Alternate way of reading DSi extended header

This commit is contained in:
RocketRobz 2020-01-31 15:07:02 -07:00
parent af637ad935
commit d1757a95f4
2 changed files with 14 additions and 13 deletions

View File

@ -117,7 +117,7 @@ typedef struct {
// 0x200 // 0x200
// TODO: More DSi-specific fields. // TODO: More DSi-specific fields.
u8 dsi1[0x10]; u32 dsi1[0x10/4];
u32 twlRomSize; u32 twlRomSize;
u32 dsi_unk3; u32 dsi_unk3;
u32 dsi_unk4; u32 dsi_unk4;

View File

@ -290,23 +290,24 @@ int cardInit (sNDSHeaderExt* ndsHeader)
u32 iCardId=cardReadID(CARD_CLK_SLOW); u32 iCardId=cardReadID(CARD_CLK_SLOW);
while(REG_ROMCTRL & CARD_BUSY); while(REG_ROMCTRL & CARD_BUSY);
u32 iCheapCard=iCardId&0x80000000; //u32 iCheapCard=iCardId&0x80000000;
// Read the header // Read the header
if(iCheapCard) cardParamCommand (CARD_CMD_HEADER_READ, 0,
{ CARD_ACTIVATE | CARD_nRESET | CARD_CLK_SLOW | CARD_BLK_SIZE(1) | CARD_DELAY1(0x1FFF) | CARD_DELAY2(0x3F),
//this is magic of wood goblins (void*)ndsHeader, 0x200/sizeof(u32));
for(size_t ii=0;ii<8;++ii) {
cardParamCommand (CARD_CMD_HEADER_READ, ii*0x200, if ((ndsHeader->unitCode != 0) || (ndsHeader->dsi_flags != 0))
CARD_ACTIVATE | CARD_nRESET | CARD_CLK_SLOW | CARD_BLK_SIZE(1) | CARD_DELAY1(0x1FFF) | CARD_DELAY2(0x3F),
(u32*)(void*)(ndsHeader+ii*0x200), 0x200/sizeof(u32));
}
}
else
{ {
// Extended header found
cardParamCommand (CARD_CMD_HEADER_READ, 0, cardParamCommand (CARD_CMD_HEADER_READ, 0,
CARD_ACTIVATE | CARD_nRESET | CARD_CLK_SLOW | CARD_BLK_SIZE(4) | CARD_DELAY1(0x1FFF) | CARD_DELAY2(0x3F), CARD_ACTIVATE | CARD_nRESET | CARD_CLK_SLOW | CARD_BLK_SIZE(4) | CARD_DELAY1(0x1FFF) | CARD_DELAY2(0x3F),
(u32*)(void*)ndsHeader, 0x1000/sizeof(u32)); (void*)ndsHeader, 0x1000/sizeof(u32));
if (ndsHeader->dsi1[0]==0xFFFFFFFF && ndsHeader->dsi1[1]==0xFFFFFFFF
&& ndsHeader->dsi1[2]==0xFFFFFFFF && ndsHeader->dsi1[3]==0xFFFFFFFF)
{
toncset((u8*)ndsHeader+0x200, 0, 0xE00);
}
} }
// Check header CRC // Check header CRC