From adb8ad260f2aa993dc1b8fa492400e6cdc4e141b Mon Sep 17 00:00:00 2001 From: Balint Kovacs Date: Tue, 23 Feb 2021 23:52:26 +0000 Subject: [PATCH] Add some documentation to cart types, and remove old exports --- arm9/source/gamecart/card_spi.c | 28 ++++++++++++++-------------- arm9/source/gamecart/card_spi.h | 12 ------------ 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/arm9/source/gamecart/card_spi.c b/arm9/source/gamecart/card_spi.c index 7d824bf..f3ec65a 100644 --- a/arm9/source/gamecart/card_spi.c +++ b/arm9/source/gamecart/card_spi.c @@ -57,7 +57,7 @@ int CardSPIWriteSaveData_24bit_erase_program(CardSPIType type, u32 offset, const int CardSPIEraseSector_emulated(CardSPIType type, u32 offset); int CardSPIEraseSector_real(CardSPIType type, u32 offset); -const CardSPITypeData EEPROM_512B_ = { CardSPIEnableWriting_512B, CardSPIReadSaveData_9bit, CardSPIWriteSaveData_9bit, CardSPIEraseSector_emulated, 0xffff, 1 << 9, 16, 16, 16, 0, 0, 0 }; +const CardSPITypeData EEPROM_512B = { CardSPIEnableWriting_512B, CardSPIReadSaveData_9bit, CardSPIWriteSaveData_9bit, CardSPIEraseSector_emulated, 0xffff, 1 << 9, 16, 16, 16, 0, 0, 0 }; const CardSPITypeData EEPROM_DUMMY = { CardSPIEnableWriting_regular, CardSPIReadSaveData_16bit, CardSPIWriteSaveData_16bit, CardSPIEraseSector_emulated, 0xffff, UINT32_MAX, 1, 1, 1, SPI_EEPROM_CMD_WRITE, 0, 0 }; const CardSPITypeData EEPROMTypes[] = { @@ -69,26 +69,26 @@ const CardSPITypeData EEPROMTypes[] = { const CardSPITypeData FLASH_DUMMY = { NULL, CardSPIReadSaveData_24bit, NULL, NULL, 0x0, 0, 0, 0, 0, 0, 0, 0 }; const CardSPITypeData flashTypes[] = { // NTR/TWL + + // Most common flash chip in DS games, in 3 different sizes (256kB: ST M45PE20, 512kB: ST M45PE40, 1MB: ST M45PE80) { CardSPIEnableWriting_regular, CardSPIReadSaveData_24bit, CardSPIWriteSaveData_24bit_write, CardSPIEraseSector_real, 0x2040, 0, 65536, 256, 256, SPI_FLASH_CMD_PW, SPI_CMD_PP, SPI_FLASH_CMD_SE }, + + // Found in Mario Kart, for example (always 256kB, Sanyo LE25FW203T) { CardSPIEnableWriting_regular, CardSPIReadSaveData_24bit, CardSPIWriteSaveData_24bit_erase_program, CardSPIEraseSector_real, 0x6216, 1 << 18, 65536, 256, 65536, SPI_FLASH_CMD_PW, SPI_CMD_PP, SPI_FLASH_CMD_SE }, + + // Found in some copies of Pokemon Diamond/Pearl (always 512kB, Sanyo ??) { CardSPIEnableWriting_regular, CardSPIReadSaveData_24bit, CardSPIWriteSaveData_24bit_write, CardSPIEraseSector_real, 0x6211, 1 << 19, 65536, 256, 256, SPI_FLASH_CMD_PW, SPI_CMD_PP, SPI_FLASH_CMD_SE }, + + // Found in Art Academy, and maybe some other ones (8MB: ST M25P64) { CardSPIEnableWriting_regular, CardSPIReadSaveData_24bit, CardSPIWriteSaveData_24bit_erase_program, CardSPIEraseSector_real, 0x2020, 0, 65536, 256, 65536, SPI_FLASH_CMD_PW, SPI_CMD_PP, SPI_FLASH_CMD_SE }, + + // Found in some DS bootlegs (ST M25PE40VP in my case) { CardSPIEnableWriting_regular, CardSPIReadSaveData_24bit, CardSPIWriteSaveData_24bit_erase_program, CardSPIEraseSector_real, 0x2080, 0, 65536, 256, 65536, SPI_FLASH_CMD_PW, SPI_CMD_PP, SPI_FLASH_CMD_SE }, + + // This is the most common type of flash 3DS cartridges. Not normally found in DS ones, but check anyway. (Custom MXIC chips) { CardSPIEnableWriting_regular, CardSPIReadSaveData_24bit, CardSPIWriteSaveData_24bit_erase_program, CardSPIEraseSector_real, 0xC222, 0, 4096, 32, 4096, SPI_FLASH_CMD_PW, SPI_CMD_PP, SPI_FLASH_CMD_MXIC_SE }, }; -const CardSPITypeData * const EEPROM_512B = &EEPROM_512B_; - -const CardSPITypeData * const EEPROM_8KB = EEPROMTypes + 0; -const CardSPITypeData * const EEPROM_64KB = EEPROMTypes + 1; -const CardSPITypeData * const EEPROM_128KB = EEPROMTypes + 2; - -const CardSPITypeData * const FLASH_NTR_GENERIC = flashTypes + 0; -const CardSPITypeData * const FLASH_256KB = flashTypes + 1; -const CardSPITypeData * const FLASH_512KB = flashTypes + 2; -const CardSPITypeData * const FLASH_8MB = flashTypes + 3; -const CardSPITypeData * const FLASH_NTR_BOOTLEG = flashTypes + 4; - const CardSPITypeData * const FLASH_CTR_GENERIC = flashTypes + 5; #define REG_CFG9_CARDCTL *((vu16*)0x1000000C) @@ -455,7 +455,7 @@ CardSPIType CardSPIGetCardSPIType(bool infrared) { if (res) return (CardSPIType) {NO_CHIP, false}; if ((sr & 0xfd) == 0x00 && (jedec != 0x00ffffff)) { t.chip = &FLASH_DUMMY; } - if ((sr & 0xfd) == 0xF0 && (jedec == 0x00ffffff)) { return (CardSPIType) { EEPROM_512B, false }; } + if ((sr & 0xfd) == 0xF0 && (jedec == 0x00ffffff)) { return (CardSPIType) { &EEPROM_512B, false }; } if ((sr & 0xfd) == 0x00 && (jedec == 0x00ffffff)) { t = (CardSPIType) { &EEPROM_DUMMY, false }; } if(t.chip == NO_CHIP) { diff --git a/arm9/source/gamecart/card_spi.h b/arm9/source/gamecart/card_spi.h index c52ab40..fadda71 100644 --- a/arm9/source/gamecart/card_spi.h +++ b/arm9/source/gamecart/card_spi.h @@ -49,18 +49,6 @@ struct CardSPITypeData { #define NO_CHIP NULL -extern const CardSPITypeData * const EEPROM_512B; - -extern const CardSPITypeData * const EEPROM_8KB; -extern const CardSPITypeData * const EEPROM_64KB; -extern const CardSPITypeData * const EEPROM_128KB; - -extern const CardSPITypeData * const FLASH_NTR_GENERIC; // Most common flash chip in DS games, in 3 different sizes -extern const CardSPITypeData * const FLASH_256KB; -extern const CardSPITypeData * const FLASH_512KB; -extern const CardSPITypeData * const FLASH_8MB; -extern const CardSPITypeData * const FLASH_NTR_BOOTLEG; // Found in some DS bootlegs off of eBay (ST M25PE40VP in my case) - extern const CardSPITypeData * const FLASH_CTR_GENERIC; // Handles each 3ds cartridge the exact same int CardSPIWriteRead(bool infrared, const void* cmd, u32 cmdSize, void* answer, u32 answerSize, const void* data, u32 dataSize);