ODEJOI X91 firmware
Introduction
Overview
The player
What was done
The firmware in one page
Constraints
Quick start
Requirements
Files that are not in git
Build the images
Flash a theme
Look at the firmware offline
Build these pages
Project layout
Firmware reference
About this reference
Hardware, boot and upgrade mode
Identification
Memory
Boot record and boot loader
Upgrade mode
Recovery
The firmware image (LFI)
Layout
The 137 files
Settings: CONFIG.BIN
Libraries on the user disk
Programs (.AP)
File layout
Bank groups and their RAM
Programs and how they start
System calls
Messages and keys
Shared code
Resources, menus and fonts
Resource files (.STY)
Header
Pictures
Texts
Layout tables
List boxes
Menus (.MCG)
Fonts
Picture bookkeeping in COMMON.STY
Display driver (DRV_UI.DRV)
Layout
Functions
Keyed draws
List boxes
The LCD driver and rotation
Shared interface code
Status bar
App timers
List control (gui_directory)
Menus (gui_menulist)
Keys
Key filter with the screen off
Screensaver
Other shared routines used by new code
Music: program, engine and libraries
Music root menu
The lists
The playing screen
Variables (MUSIC.AP)
Engine messages
Volume
The library builder (PLAYLIST.AP)
Playlists (.m3u) as the firmware reads them
MUSIC.LIB
M3U.LIB
Other programs
Main menu (MAINMENU.AP)
Settings (SETTING.AP)
eBook reader (EBOOK.AP)
Folder view (BROWSER.AP)
Bluetooth (BT.AP, BTENGINE.AP)
Programs never changed
Programs not on the main menu
Reading and writing the firmware
Where the procedure comes from
x91_flash.py
x91_tool.py
The first dump
History of the write path
Risks that remain
Graphite design
The Graphite design
Themes
Pictures
Screen renders
The stages
Stage notes
Code reference
Build system
One build from the stock image
The parts
Changing the design
Helpers worth knowing
Outputs
Before 1.0: the stages
Program patches
Method
The patches
thumb_sim.py
New program code (design/playlist)
Rules the code follows
Files
Host test
Placement into bank tails
liststyle.c: code in a 0x1200 bank
search.c: the search (stage 25)
“Add songs” (stage 26)
Naming playlists (stage 27)
Tools
On the device
Firmware files
Media on the player
Vendor package analysis
Design
Documentation
Project
History
2026-10-12 to 2026-10-13: from no firmware to a running custom image
2026-10-14: status bar, clock, reader
2026-10-21 to 2026-10-22: playlists and lists
2026-10-23: search, adding songs, naming playlists
2026-10-23: release 1.0
Early assumptions that were wrong
Open work
Sources
Used for flashing and building
Used for analysis only
Glossary
ODEJOI X91 firmware
Index
Index