implement bit 10 of exmemcnt
This commit is contained in:
parent
b048e0cbfd
commit
96c8f67d5f
|
@ -129,6 +129,9 @@ void DSi::Reset()
|
|||
//ARM9.CP15Write(0x911, 0x00000020);
|
||||
//ARM9.CP15Write(0x100, ARM9.CP15Read(0x100) | 0x00050000);
|
||||
NDS::Reset();
|
||||
|
||||
ExMemCnt[0] = 0xEC8C; // checkme: bit 10 should be explicitly set?
|
||||
ExMemCnt[1] = 0xEC8C;
|
||||
|
||||
// The SOUNDBIAS register does nothing on DSi
|
||||
SPU.SetApplyBias(false);
|
||||
|
@ -3114,6 +3117,7 @@ void DSi::ARM7IOWrite32(u32 addr, u32 val)
|
|||
SCFG_EXT[0] |= (val & 0x03000000);
|
||||
SCFG_EXT[1] &= ~0x93FF0F07;
|
||||
SCFG_EXT[1] |= (val & 0x93FF0F07);
|
||||
if (!(val & (1<<24))) { ExMemCnt[0] &= ~(1<<10); ExMemCnt[1] &= ~(1<<10); } // bit 10 of exmemcnt is cleared when disabling second card slot access
|
||||
Log(LogLevel::Debug, "SCFG_EXT = %08X / %08X (val7 %08X)\n", SCFG_EXT[0], SCFG_EXT[1], val);
|
||||
return;
|
||||
case 0x04004010:
|
||||
|
|
11
src/NDS.cpp
11
src/NDS.cpp
|
@ -484,7 +484,7 @@ void NDS::Reset()
|
|||
|
||||
MapSharedWRAM(0);
|
||||
|
||||
ExMemCnt[0] = 0xE88C; // checkme: is this correct? ...and what does bit 10 do...? it can be set on 3ds it seems...
|
||||
ExMemCnt[0] = 0xE88C; // checkme: is this correct?
|
||||
ExMemCnt[1] = 0xE88C; // note: these should only matter for direct boot; bios sets these values fairly quickly during native boot
|
||||
memset(ROMSeed0, 0, 2*8);
|
||||
memset(ROMSeed1, 0, 2*8);
|
||||
|
@ -3801,9 +3801,11 @@ void NDS::ARM9IOWrite16(u32 addr, u16 val)
|
|||
|
||||
case 0x04000204:
|
||||
{
|
||||
u16 settablemask = 0x88FF;
|
||||
if ((ConsoleType == 1) && (((DSi*)this)->SCFG_EXT[1] & (1<<24))) settablemask |= 0x0400; // bit 10 can be set if SCFG_EXT bit 24 is set
|
||||
u16 oldVal = ExMemCnt[0];
|
||||
ExMemCnt[0] = (ExMemCnt[0] & 0x7700) | (val & 0x88FF);
|
||||
ExMemCnt[1] = (ExMemCnt[1] & 0x777F) | (val & 0x8880);
|
||||
ExMemCnt[0] = (ExMemCnt[0] & ~settablemask) | (val & settablemask);
|
||||
ExMemCnt[1] = (ExMemCnt[1] & (~settablemask | 0x7F)) | (val & (settablemask & ~0x7F));
|
||||
if ((oldVal ^ ExMemCnt[0]) & 0xFF)
|
||||
SetGBASlotTimings();
|
||||
return;
|
||||
|
@ -4596,8 +4598,9 @@ void NDS::ARM7IOWrite16(u32 addr, u16 val)
|
|||
|
||||
case 0x04000204:
|
||||
{
|
||||
u16 settablemask = 0x007F;
|
||||
u16 oldVal = ExMemCnt[1];
|
||||
ExMemCnt[1] = (ExMemCnt[1] & 0xFF80) | (val & 0x007F);
|
||||
ExMemCnt[1] = (ExMemCnt[1] & ~settablemask) | (val & settablemask);
|
||||
if ((ExMemCnt[1] ^ oldVal) & 0xFF)
|
||||
SetGBASlotTimings();
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue