pyroholic wrote:What is strange though is when the memory card transmits the exi-id on command 0x0000, the card responds with 4 bytes of data, first three bytes are 0x00, and the last byte 0x20. The card is a memory card 251 and should respond with 0x10 in that byte according to all sources of information that I have read, and 0x20 is the id for memory card 507. I just played with the thought that the gamecube latches input data on rising edge, but then the response would be 0x80000010 which is not correct either...
Definitely sounds like the first bit is being missed... although it should be 0.
For reference, the 32-bit ID is decoded like this (starting at MSB):
- 18 bits = 0
- 3 bits sector size index (always 0/8192 bytes for all known cards)
- 3 bits latency index (4 / 8 / 16 / 32 / 48 / 128 / 256 dummy read cycles)
- 6 bits card size bitmask (only one bit should be set)
- 2 bits = 0
I took a sample of the startup sequence as well to have something more to verify against and it doesn't look right either from what i can see. I recorded all status requests that was done after inserting the memory card and in the first response I receive 0x3 and the second one that happens after the unlock sequence is 0x83. After that there are no more status requests and loading save files works as expected. But it doesn't seem to match the status bit for unlocked card from what I can tell. Shouldn't the unlocked bit be bit6?
Yes, because the first bit/cycle is being dropped. The first bit (0x80) means programming is in progress (writing or erase), the second bit (0x40) signals the card is unlocked.