- 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;
}
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<ARMCPU_ARM9>(0x27FFE24, gameInfo.header.ARM9exe);
_MMU_write32<ARMCPU_ARM7>(0x27FFE34, gameInfo.header.ARM7exe);
}
break;
case REG_HALTCNT:
//printf("halt 0x%02X\n", val);
switch(val)

View File

@ -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<ARMCPU_ARM9>(dst, T1ReadLong(MMU.CART_ROM, src));

View File

@ -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);

View File

@ -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;