Synopsis
.Please choose a ranking for M3i Zero Sakura for 3DS V4.5.0-10 & DSi V1.4.5. (1 star is the worst and 5 stars is the best) (1 star is the worst and 5 stars is the best) Please tell us what you think and share your opinions with others.
Set of information and tools whilst working with my M3i Zero (
GMP-Z003
) andit's firmware. Use this information however you want.Hardware
Flash Memory
The
GMP-Z003
uses a MX29LV160DBXEI-70G
for flash memory, it is a 2MB chip.This device operates over a voltage range of 2.7V to 3.6V typically using a 3Vpower supply input. The flash memory is read directly to the NDS as a cartridge,the format of which can be found here.It is writeable through the flashing process.Flashing
The device can be flashed by providing DC power to the
J3
port. I just strippeda USB cable and put the positive and ground in. The FPGA searchesthe SD card for /F_CORE.DAT
and copies 0x200000 -> 0x400000
to the flashmemory chip. I believe the F_CORE.DAT
needs to be signed in order for theFPGA to copy it first however.The LED light
D1
will change depending on the status of the flash:- Nothing: No power or completed
- Static: Error reading
F_CORE.DAT
(SD card might not be inserted, etc..) - Flashing: Copying
F_CORE.DAT
to the flash memory.
Alternatively the device can be flashed whilst inserted via the DS itselfusing card commands.
Card Commands
The common DLDI interface for the flash cart can be found here: G003.dldiAnd the reconstructed C source of that DLDI interface can be found here: iointerface.c
B0 00 00 00 00 00 00 00
= Card Info (should be 0x5AA5)C9 oo oo oo oo xx 00 00
= Read (FIFO read 0x200 words)C5 oo oo oo oo xx 00 00
= Write (write 0x200 words)C6 00 00 00 00 00 00 00
= get write status, read 1 word (= 0 when finished)CA 00 00 00 00 00 00 00
= get read status, read 1 word (= 0 when finished)
Where
oooooo
is the offset in number of words(?), MSB firstWhere xx
represents the type in the DLDI interface this is set to 0x00
for SD card access.0x00
: SD card access afaik.0xE0
: 'SW' header, used with offset = 0, after that offset += 0x10000 (in number of words)0xF0
: 'SW' regular sector (0x200 bytes)0xA0
: 'HW' sector. One sector (header ?) is at 0x80000000 then the others start at offset 0.
Credits
- TuxSH for everything on card commands.