clarify chipId checks and fake booting
This commit is contained in:
parent
dd56e6c231
commit
4baad291dc
|
@ -2647,7 +2647,7 @@ void NDS_Reset()
|
||||||
_MMU_write08<ARMCPU_ARM9>(0x027FFC80 + fw_index, temp_buffer[fw_index]);
|
_MMU_write08<ARMCPU_ARM9>(0x027FFC80 + fw_index, temp_buffer[fw_index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//firmware copies the whole header to Main RAM 0x27FFE00 on startup. (http://nocash.emubase.de/gbatek.htm#dscartridgeheader)
|
//something copies the whole header to Main RAM 0x27FFE00 on startup. (http://nocash.emubase.de/gbatek.htm#dscartridgeheader)
|
||||||
//once upon a time this copied 0x90 more. this was thought to be wrong, and changed.
|
//once upon a time this copied 0x90 more. this was thought to be wrong, and changed.
|
||||||
if(nds.Is_DSI())
|
if(nds.Is_DSI())
|
||||||
{
|
{
|
||||||
|
@ -2669,20 +2669,18 @@ void NDS_Reset()
|
||||||
MMU.ARM9_REG[0x300] = 1;
|
MMU.ARM9_REG[0x300] = 1;
|
||||||
MMU.ARM7_REG[0x300] = 1;
|
MMU.ARM7_REG[0x300] = 1;
|
||||||
|
|
||||||
//firmware makes system think it's booted from card -- EXTREMELY IMPORTANT!!! Thanks to cReDiAr
|
//firmware makes system think it's booted from card -- EXTREMELY IMPORTANT!!! This is actually checked by some things. (which things?) Thanks to cReDiAr
|
||||||
_MMU_write08<ARMCPU_ARM9>(0x02FFFC40,0x1);
|
_MMU_write08<ARMCPU_ARM7>(0x02FFFC40,0x1); //<zero> removed redundant write to ARM9, this is going to shared main memory. But one has to wonder why r3478 was made which corrected a typo resulting in only ARMCPU_ARM7 getting used.
|
||||||
_MMU_write08<ARMCPU_ARM7>(0x02FFFC40,0x1);
|
|
||||||
|
//the chipId is read several times
|
||||||
|
//for some reason, each of those reads get stored here.
|
||||||
|
_MMU_write32<ARMCPU_ARM7>(0x027FF800, gameInfo.chipID); //1st chipId
|
||||||
|
_MMU_write32<ARMCPU_ARM7>(0x027FF804, gameInfo.chipID); //2nd (secure) chipId
|
||||||
|
_MMU_write32<ARMCPU_ARM7>(0x027FFC00, gameInfo.chipID); //3rd (secure) chipId
|
||||||
|
|
||||||
//
|
|
||||||
_MMU_write32<ARMCPU_ARM7>(0x027FF800, gameInfo.chipID); // Chip ID
|
|
||||||
_MMU_write32<ARMCPU_ARM7>(0x027FF804, gameInfo.chipID); // Secure Chip ID
|
|
||||||
_MMU_write32<ARMCPU_ARM7>(0x027FFC00, gameInfo.chipID); // 2nd Secure Chip ID
|
|
||||||
// Write the header checksum to memory
|
// Write the header checksum to memory
|
||||||
_MMU_write16<ARMCPU_ARM9>(0x027FF808, gameInfo.header.headerCRC16);
|
_MMU_write16<ARMCPU_ARM9>(0x027FF808, gameInfo.header.headerCRC16);
|
||||||
|
|
||||||
// Write the header checksum to memory (the firmware needs it to see the cart)
|
|
||||||
//_MMU_write16<ARMCPU_ARM9>(0x027FF808, T1ReadWord(MMU.CART_ROM, 0x15E));
|
|
||||||
|
|
||||||
// Save touchscreen calibration info in a structure
|
// Save touchscreen calibration info in a structure
|
||||||
// so we can easily access it at any time
|
// so we can easily access it at any time
|
||||||
// TODO - this isn't good. need revising.
|
// TODO - this isn't good. need revising.
|
||||||
|
|
|
@ -209,13 +209,9 @@ u32 Slot1Comp_Protocol::read_GCDATAIN(u8 PROCNUM)
|
||||||
|
|
||||||
case eSlot1Operation_90_ChipID:
|
case eSlot1Operation_90_ChipID:
|
||||||
case eSlot1Operation_B8_ChipID:
|
case eSlot1Operation_B8_ChipID:
|
||||||
// Note: the BIOS stores the chip ID in main memory
|
|
||||||
// Most games continuously compare the chip ID with
|
//Most games continuously compare the current chipId with the value in
|
||||||
// the value in memory, probably to know if the card
|
//stored in memory at boot-up, probably to know if the card was removed.
|
||||||
// was removed.
|
|
||||||
// As DeSmuME normally boots directly from the game, the chip
|
|
||||||
// ID in main mem is zero and this value needs to be
|
|
||||||
// zero too.
|
|
||||||
|
|
||||||
//staff of kings verifies this (it also uses the arm7 IRQ 20 to detect card ejects)
|
//staff of kings verifies this (it also uses the arm7 IRQ 20 to detect card ejects)
|
||||||
return chipId;
|
return chipId;
|
||||||
|
|
Loading…
Reference in New Issue