====== EZ Flash (GBA) programming ====== It appears many EZ Flash GBA cartridges use a compatible interface across the product line. ===== Unlocking ===== To unlock the cartridge's interface, the following writes must be issued: * 0x9FE0000 = 0xD200 * 0x8000000 = 0x1500 * 0x8020000 = 0xD200 * 0x8040000 = 0x1500 To lock the interface: * 0x9FC0000 = 0x1500 ===== Specifications ===== ==== EZ-Flash III ==== * 1 Gbit NAND (Samsung K9F1G08U0M). * 256 Mbit NOR * 32 Mbit NOR (firmware), * 128 Mbit RAM * 2Mbit SRAM Memory Map (OS mode): ^ Start ^ End ^ Role ^ | 0x8000000 | 0x83FFFFF | 32 Mbit NOR (firmware) | | 0x8400000 | 0x93FFFFF | 128 Mbit RAM | | 0x9400000 | 0x9BFFFFF | 64 Mbit window of 256 Mbit NOR | Memory Map (Game mode): ^ ROM page (Mbits) ^ Role ^ | 0 | 256 Mbit NOR | | 256 | 128 Mbit SRAM | | 384 | 32 Mbit NOR (firmware) | ==== EZ-Flash Omega/Omega DE ==== * S98WS512PE0 (512Mbit NOR + 256Mbit PSRAM) * S71GL064A08 (64Mbit NOR + 8Mbit SRAM) * FM28V100 (1Mbit FRAM) * XC6SLX9 (FPGA) * W25Q16 (SPI flash) Memory Map (S71GL064A08 NOR): ^ Start ^ End ^ Role ^ | 0x000000 | 0x00FFFF | Boot loader | | 0x040000 | 0x7FFFFF? | Kernel | Memory Map (Game mode): ^ ROM page (Mbits) ^ Role ^ | 0 | 512 Mbit NOR | | 512 | Special value - map 256 Mbit PSRAM | Memory Map (OS mode): ^ Start ^ End ^ Role ^ | 0x8000000 | 0x87FFFFF | 64 Mbit NOR (bootloader/kernel) | | 0x8800000 | 0x8FFFFFF | 64 Mbit window of 256 Mbit PSRAM | | 0x9000000 | 0x97FFFFF | 64 Mbit window of 512 Mbit NOR | | 0xE000000 | 0xE01FFFF | 1 Mbit FRAM | TODO: 0xE020000? ===== Memory-mapped I/O ===== ==== NAND Flash (III, IV) ==== === EZ_NAND_CONTROL (0x9400000; III, IV) === === EZ_NAND_DATA (0x9FFC000; III, IV) === === EZ_NAND_ADDR (0x9FFFFE0; III, IV) === === EZ_NAND_CMD (0x9FFFFE2; III, IV) === ==== SD Card (IV) ==== === ? (0x9FEA000; IV) === === ? (0x9FFFF40; IV) === ==== SD Card (Omega) ==== === EZ_SDCARD_CONTROL (0x9400000; Omega, Omega DE) === === EZ_SDCARD_BUFFER_ADDR_LO (0x9600000; Omega, Omega DE) === === EZ_SDCARD_BUFFER_ADDR_HI (0x9620000; Omega, Omega DE) === === EZ_SDCARD_BUFFER_CONTROL (0x9640000; Omega, Omega DE) === 15 bit 0 m... .... .... .ccc | ||| | +++- Sector count (0-4) +------------------- Mode: 0 - Read, 1 - Write === EZ_SDCARD_BUFFER_DATA (0x9E00000; Omega, Omega DE) === 2KB buffer for read and/or written sectors. ==== SPI (IV) ==== === EZ_SPI_DATA (0x80000C4; IV) === === EZ_SPI_CONTROL (0x80000C6; IV) === 15 bit 0 .... .... .... .csk ||| ||+- SCK |+-- SIO +--- CS === EZ_SPI_ENABLE (0x80000C8; IV) ==== 15 bit 0 .... .... .... ...e | +- Enable ==== Cartridge ==== === EZ_RTC_CONTROL (0x96A0000; Omega, Omega DE) === === EZ_AUTO_SAVE_CONTROL (0x96C0000; Omega, Omega DE) === === EZ_LED_CONTROL (0x96E0000; Omega DE) === === EZ_64MROM_CONTROL (0x9700000; Omega DE) === 15 bit 0 .... .... .... ...v | +- Emulate GBA Video 64M mapper === EZ_PSRAM_OFFSET (0x9860000; Omega, Omega DE) === PSRAM offset, in megabits. === EZ_ROM_OFFSET (0x9880000; III, IV, Omega, Omega DE) === ROM offset, in megabits. === EZ_RAM_OFFSET (0x9C00000; III, IV, Omega, Omega DE) === RAM offset, in megabits. === EZ_NOR_WRITE_ENABLE (0x9C40000; III, IV) === === EZ_RUMBLE_STRENGTH (0x9E20000; Omega DE) === * Minimum: 0xF0 * Maximum: 0xF1 * Regular: 0xF2 ==== Other/Unknown ==== === ? (0x9420000; Omega, Omega DE) ==== === ? (0x9A40000; IV) ====