The Boot ROM Knows Everything
Reverse engineering the FiiO X1.
The FiiO X1 runs firmware written by HiBy on the µC/OS-II real-time kernel, on an Ingenic JZ4760B MIPS32 chip. The Rockbox port stalled; its developer wrote that he could not find the RAM setup. This series gets that setup out of the boot loader, dumps the NAND, decompiles the firmware, finds a hidden USB DAC mode, builds a patcher, and then spends a long time on why its EQ tables did not work.
- FiiO X1 boot ROM: running code on a JZ4760B with no RAM
- FiiO X1 DDR deadlock: reading RAM config from live registers
- FiiO X1 NAND dump: hwstub, fee1:dead and a 64-bit compiler
- FiiO X1 IPL decompiled: 8 KB of JZ4760B DDR init code
- FiiO X1 factory.x1: unsigned code execution from the SD card
- FiiO X1 NAND dump: 128 MB over USB, one block at a time
- FiiO X1 NAND map: fonts, plaintext and a stranger's music
- FiiO X1 NAND: 44 KB of high-entropy data, identified
- FiiO X1 firmware: a hidden USB DAC mode and a debug shell
- FiiO X1 firmware patcher: everything but the EQ
- FiiO X1 bootloader in Ghidra: 94 functions at the wrong base
- FiiO X1 EQ presets: floats in .data, not a NAND cache
- FiiO X1 Rockbox bootloader: 12 KB of SD, FAT32 and a menu
- FiiO X1 bare-metal audio: four GPIO offsets, all wrong
- FiiO X1 EQ table: seven register bytes my generator never read
- Carving a SQLite database from a FiiO X1's raw NAND
- FiiO X1 PCM5142 DSP blocks: the flat head I believed
- FiiO X1 FTL reversed: the map was in the OOB bytes I never dumped