From a5218faeba4e8af1008b7f46d1694ab496c7da34 Mon Sep 17 00:00:00 2001 From: normmatt234 Date: Mon, 18 May 2009 07:24:47 +0000 Subject: [PATCH] Implement a few of the new card commands used in Made in Ore. It wont save but at least it boots now. This is just a temporary fix until something better can be worked out. --- desmume/src/MMU.cpp | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/desmume/src/MMU.cpp b/desmume/src/MMU.cpp index 6d357336a..1594ee9c5 100644 --- a/desmume/src/MMU.cpp +++ b/desmume/src/MMU.cpp @@ -2585,6 +2585,22 @@ void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val) } break; + /* Nand Init */ + case 0x94: + { + MMU.dscard[ARMCPU_ARM9].address = 0; + MMU.dscard[ARMCPU_ARM9].transfer_count = 0x80; + } + break; + + /* Nand Error? */ + case 0xD6: + { + MMU.dscard[ARMCPU_ARM9].address = 0; + MMU.dscard[ARMCPU_ARM9].transfer_count = 1; + } + break; + /* Data read */ case 0x00: case 0xB7: @@ -2605,7 +2621,7 @@ void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val) default: { - LOG("CARD command: %02X\t", MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT)); + LOG("WRITE CARD command: %08X %08X\t", ((MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT) << 24) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+1) << 16) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+2) << 8) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+3))),((MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+4) << 24) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+5) << 16) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+6) << 8) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+7)))); LOG("FROM: %08X\n", NDS_ARM9.instruct_adr); MMU.dscard[ARMCPU_ARM9].address = 0; MMU.dscard[ARMCPU_ARM9].transfer_count = 0; @@ -2914,6 +2930,19 @@ u32 FASTCALL _MMU_ARM9_read32(u32 adr) } break; + /* Nand Init? */ + case 0x94: + { + val = 0; //Unsure what to return here to return 0 for now + } + break; + /* Nand Error? */ + case 0xD6: + { + val = 0x80; //0x80 == ok? + } + break; + /* Data read */ case 0x00: case 0xB7: @@ -2936,6 +2965,11 @@ u32 FASTCALL _MMU_ARM9_read32(u32 adr) val = 0x00000000; } break; + default: + LOG("READ CARD command: %08X %08X\t", ((MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT) << 24) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+1) << 16) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+2) << 8) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+3))),((MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+4) << 24) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+5) << 16) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+6) << 8) | (MEM_8(MMU.MMU_MEM[ARMCPU_ARM9], REG_GCCMDOUT+7)))); + LOG("FROM: %08X\n", NDS_ARM9.instruct_adr); + break; + } MMU.dscard[ARMCPU_ARM9].address += 4; // increment address @@ -3925,7 +3959,7 @@ u32 FASTCALL _MMU_ARM7_read32(u32 adr) case 0xB8: { /* TODO */ - val = 0x00000000; + val = 0x00000FC2; } break; }