From b14e6f01df3130ceee6e988a4eafd39112992468 Mon Sep 17 00:00:00 2001 From: normmatt234 Date: Thu, 13 Jan 2011 04:35:11 +0000 Subject: [PATCH] Added emulation for 16bit writes to REG_GCROMCTRL. Reset slot1_device in NDS_Reset. --- desmume/src/MMU.cpp | 15 ++++++++++++++- desmume/src/NDSSystem.cpp | 3 +++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/desmume/src/MMU.cpp b/desmume/src/MMU.cpp index b870b5e5c..e34e80883 100644 --- a/desmume/src/MMU.cpp +++ b/desmume/src/MMU.cpp @@ -2713,6 +2713,13 @@ void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val) DISP_FIFOsend(val); return; } + + case REG_GCROMCTRL : + MMU_writeToGCControl( (T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x1A4) & 0xFFFF0000) | val); + return; + case REG_GCROMCTRL+2 : + MMU_writeToGCControl( (T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x1A4) & 0xFFFF) | ((u32) val << 16)); + return; } T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM9][adr>>20], adr&MMU.MMU_MASK[ARMCPU_ARM9][adr>>20], val); @@ -3936,7 +3943,13 @@ void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val) write_timer(ARMCPU_ARM7, timerIndex, val); return; } - + + case REG_GCROMCTRL : + MMU_writeToGCControl( (T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x1A4) & 0xFFFF0000) | val); + return; + case REG_GCROMCTRL+2 : + MMU_writeToGCControl( (T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x1A4) & 0xFFFF) | ((u32) val << 16)); + return; } T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][adr>>20], adr&MMU.MMU_MASK[ARMCPU_ARM7][adr>>20], val); diff --git a/desmume/src/NDSSystem.cpp b/desmume/src/NDSSystem.cpp index 5314e49d4..2b5878f28 100644 --- a/desmume/src/NDSSystem.cpp +++ b/desmume/src/NDSSystem.cpp @@ -38,6 +38,7 @@ #include "debug.h" #include "firmware.h" #include "version.h" +#include "slot1.h" #include "path.h" @@ -1866,6 +1867,7 @@ static /*donotinline*/ std::pair armInnerLoop( if(!NDS_ARM9.waitIRQ&&!nds.freezeBus) { arm9log(); + debug(); arm9 += armcpu_exec(); #ifdef DEVELOPER nds_debug_continuing[0] = false; @@ -2468,6 +2470,7 @@ void NDS_Reset() Screen_Reset(); gfx3d_reset(); gpu3D->NDS_3D_Reset(); + slot1Reset(); WIFI_Reset();