From 66ec4060e4867b67e754fd917ddc799a0f2a34f3 Mon Sep 17 00:00:00 2001 From: mtabachenko Date: Mon, 1 Feb 2010 14:47:01 +0000 Subject: [PATCH] core: - add support for patched firmwares; --- desmume/src/MMU.cpp | 20 +++++++++++--------- desmume/src/NDSSystem.cpp | 2 +- desmume/src/cheatSystem.cpp | 2 +- desmume/src/firmware.cpp | 28 ++++++++++++---------------- 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/desmume/src/MMU.cpp b/desmume/src/MMU.cpp index ebe22a910..321ea1182 100644 --- a/desmume/src/MMU.cpp +++ b/desmume/src/MMU.cpp @@ -3541,15 +3541,6 @@ void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val) return; } - if(adr == REG_HALTCNT) - { - switch(val) - { - case 0xC0: NDS_Sleep(); break; - default: break; - } - } - if ((adr & 0xFF800000) == 0x04800000) { /* is wifi hardware, dont intermix with regular hardware registers */ @@ -3564,6 +3555,17 @@ void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val) switch(adr) { + case REG_POSTFLG: + // hack for patched firmwares + if (val == 1) + { + if (_MMU_ARM7_read08(REG_POSTFLG) != 0) + break; + _MMU_write32(0x27FFE24, gameInfo.header.ARM9exe); + _MMU_write32(0x27FFE34, gameInfo.header.ARM7exe); + } + break; + case REG_HALTCNT: //printf("halt 0x%02X\n", val); switch(val) diff --git a/desmume/src/NDSSystem.cpp b/desmume/src/NDSSystem.cpp index 4c71f2309..ec3769424 100644 --- a/desmume/src/NDSSystem.cpp +++ b/desmume/src/NDSSystem.cpp @@ -2044,7 +2044,7 @@ void NDS_Reset() dst = header->ARM9cpy; u32 size = (0x8000 - src) >> 2; - INFO("Copy secure area from 0x%08X to 0x%08X (size %i/0x%08X)\n", src, dst, size, size); + //INFO("Copy secure area from 0x%08X to 0x%08X (size %i/0x%08X)\n", src, dst, size, size); for (u32 i = 0; i < size; i++) { _MMU_write32(dst, T1ReadLong(MMU.CART_ROM, src)); diff --git a/desmume/src/cheatSystem.cpp b/desmume/src/cheatSystem.cpp index 9b4690dcf..798b05b40 100644 --- a/desmume/src/cheatSystem.cpp +++ b/desmume/src/cheatSystem.cpp @@ -623,7 +623,7 @@ BOOL CHEATS::load() line++; // only for debug memset(buf, 0, sizeof(buf)); if (fgets(buf, sizeof(buf), flist) == NULL) { - INFO("Cheats: Failed to read from flist at line %i\n", line); + //INFO("Cheats: Failed to read from flist at line %i\n", line); continue; } trim(buf); diff --git a/desmume/src/firmware.cpp b/desmume/src/firmware.cpp index 67a58ea51..1147c96bf 100644 --- a/desmume/src/firmware.cpp +++ b/desmume/src/firmware.cpp @@ -20,8 +20,6 @@ #include "firmware.h" #include "NDSSystem.h" -//#define _FLASHME_SUPPORT // bugged - #define DWNUM(i) ((i) >> 2) bool CFIRMWARE::getKeyBuf() @@ -353,6 +351,16 @@ bool CFIRMWARE::load() fclose(fp); return false; } + +#if 1 + if (size == 512*1024) + { + INFO("ERROR: 32Mbit (512Kb) firmware not supported\n"); + fclose(fp); + return false; + } +#endif + data = new u8 [size]; if (!data) { @@ -404,7 +412,7 @@ bool CFIRMWARE::load() #if 0 crypt64BitDown((u32*)&data[0x18]); #else - // hack? + // fix touch coords data[0x18] = 0x00; data[0x19] = 0x00; data[0x1A] = 0x00; @@ -471,18 +479,7 @@ bool CFIRMWARE::load() patched = false; if (data[0x17C] != 0xFF) - { -#ifdef _FLASHME_SUPPORT patched = true; -#else - INFO("!!! ERROR: Firmware patched with 'Flashme' v"); - if (data[0x17C] == 1) INFO("1..4"); - else - INFO("%i", (u16)data[0x3F7FC] + 3); - INFO(" - not support\n"); - return false; -#endif - } INFO("Firmware:\n"); INFO("- path: %s\n", CommonSettings.Firmware); @@ -502,7 +499,6 @@ bool CFIRMWARE::load() INFO("\n"); INFO(" * Data/GFX address: 0x%08X\n", part5addr); -#ifdef _FLASHME_SUPPORT if (patched) { u32 patch_offset = 0x3FC80; @@ -568,10 +564,10 @@ bool CFIRMWARE::load() INFO(" * ARM7 boot code RAM address: 0x%08X\n", ARM7bootAddr); INFO(" * ARM7 unpacked size: 0x%08X (%i) bytes\n", size7, size7); } -#endif // TODO: add 512Kb support memcpy(MMU.fw.data, data, 256*1024); + MMU.fw.fp = NULL; delete [] data; data = NULL; return true;