- add support for patched firmwares;
This commit is contained in:
mtabachenko 2010-02-01 14:47:01 +00:00
parent 7abcb201e6
commit 66ec4060e4
4 changed files with 25 additions and 27 deletions

View File

@ -3541,15 +3541,6 @@ void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val)
return; return;
} }
if(adr == REG_HALTCNT)
{
switch(val)
{
case 0xC0: NDS_Sleep(); break;
default: break;
}
}
if ((adr & 0xFF800000) == 0x04800000) if ((adr & 0xFF800000) == 0x04800000)
{ {
/* is wifi hardware, dont intermix with regular hardware registers */ /* is wifi hardware, dont intermix with regular hardware registers */
@ -3564,6 +3555,17 @@ void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val)
switch(adr) switch(adr)
{ {
case REG_POSTFLG:
// hack for patched firmwares
if (val == 1)
{
if (_MMU_ARM7_read08(REG_POSTFLG) != 0)
break;
_MMU_write32<ARMCPU_ARM9>(0x27FFE24, gameInfo.header.ARM9exe);
_MMU_write32<ARMCPU_ARM7>(0x27FFE34, gameInfo.header.ARM7exe);
}
break;
case REG_HALTCNT: case REG_HALTCNT:
//printf("halt 0x%02X\n", val); //printf("halt 0x%02X\n", val);
switch(val) switch(val)

View File

@ -2044,7 +2044,7 @@ void NDS_Reset()
dst = header->ARM9cpy; dst = header->ARM9cpy;
u32 size = (0x8000 - src) >> 2; 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++) for (u32 i = 0; i < size; i++)
{ {
_MMU_write32<ARMCPU_ARM9>(dst, T1ReadLong(MMU.CART_ROM, src)); _MMU_write32<ARMCPU_ARM9>(dst, T1ReadLong(MMU.CART_ROM, src));

View File

@ -623,7 +623,7 @@ BOOL CHEATS::load()
line++; // only for debug line++; // only for debug
memset(buf, 0, sizeof(buf)); memset(buf, 0, sizeof(buf));
if (fgets(buf, sizeof(buf), flist) == NULL) { 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; continue;
} }
trim(buf); trim(buf);

View File

@ -20,8 +20,6 @@
#include "firmware.h" #include "firmware.h"
#include "NDSSystem.h" #include "NDSSystem.h"
//#define _FLASHME_SUPPORT // bugged
#define DWNUM(i) ((i) >> 2) #define DWNUM(i) ((i) >> 2)
bool CFIRMWARE::getKeyBuf() bool CFIRMWARE::getKeyBuf()
@ -353,6 +351,16 @@ bool CFIRMWARE::load()
fclose(fp); fclose(fp);
return false; 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]; data = new u8 [size];
if (!data) if (!data)
{ {
@ -404,7 +412,7 @@ bool CFIRMWARE::load()
#if 0 #if 0
crypt64BitDown((u32*)&data[0x18]); crypt64BitDown((u32*)&data[0x18]);
#else #else
// hack? // fix touch coords
data[0x18] = 0x00; data[0x18] = 0x00;
data[0x19] = 0x00; data[0x19] = 0x00;
data[0x1A] = 0x00; data[0x1A] = 0x00;
@ -471,18 +479,7 @@ bool CFIRMWARE::load()
patched = false; patched = false;
if (data[0x17C] != 0xFF) if (data[0x17C] != 0xFF)
{
#ifdef _FLASHME_SUPPORT
patched = true; 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("Firmware:\n");
INFO("- path: %s\n", CommonSettings.Firmware); INFO("- path: %s\n", CommonSettings.Firmware);
@ -502,7 +499,6 @@ bool CFIRMWARE::load()
INFO("\n"); INFO("\n");
INFO(" * Data/GFX address: 0x%08X\n", part5addr); INFO(" * Data/GFX address: 0x%08X\n", part5addr);
#ifdef _FLASHME_SUPPORT
if (patched) if (patched)
{ {
u32 patch_offset = 0x3FC80; u32 patch_offset = 0x3FC80;
@ -568,10 +564,10 @@ bool CFIRMWARE::load()
INFO(" * ARM7 boot code RAM address: 0x%08X\n", ARM7bootAddr); INFO(" * ARM7 boot code RAM address: 0x%08X\n", ARM7bootAddr);
INFO(" * ARM7 unpacked size: 0x%08X (%i) bytes\n", size7, size7); INFO(" * ARM7 unpacked size: 0x%08X (%i) bytes\n", size7, size7);
} }
#endif
// TODO: add 512Kb support // TODO: add 512Kb support
memcpy(MMU.fw.data, data, 256*1024); memcpy(MMU.fw.data, data, 256*1024);
MMU.fw.fp = NULL;
delete [] data; data = NULL; delete [] data; data = NULL;
return true; return true;