diff options
author | Neil Millstone | 2007-01-19 21:36:47 +0000 |
---|---|---|
committer | Neil Millstone | 2007-01-19 21:36:47 +0000 |
commit | bcef1cb04d326ffffe71ad3fab267520b872aa11 (patch) | |
tree | cedd2883029d4c85c42fa3a90a5fce92c62a5ffa /backends/platform/ds/arm7/source/libcartreset/cartreset.c | |
parent | 37f94f7cba8135a8ee28a0ce1fe18337f8b764b6 (diff) | |
download | scummvm-rg350-bcef1cb04d326ffffe71ad3fab267520b872aa11.tar.gz scummvm-rg350-bcef1cb04d326ffffe71ad3fab267520b872aa11.tar.bz2 scummvm-rg350-bcef1cb04d326ffffe71ad3fab267520b872aa11.zip |
Adding libcartreset to ARM7 binary
svn-id: r25122
Diffstat (limited to 'backends/platform/ds/arm7/source/libcartreset/cartreset.c')
-rw-r--r-- | backends/platform/ds/arm7/source/libcartreset/cartreset.c | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/backends/platform/ds/arm7/source/libcartreset/cartreset.c b/backends/platform/ds/arm7/source/libcartreset/cartreset.c new file mode 100644 index 0000000000..2f27c1884e --- /dev/null +++ b/backends/platform/ds/arm7/source/libcartreset/cartreset.c @@ -0,0 +1,109 @@ +/********************************** + Copyright (C) Rick Wong (Lick) + http://licklick.wordpress.com/ +***********************************/ +#include <cartreset_nolibfat.h> + + +#ifdef ARM9 + +bool cartSetMenuMode(u32 _deviceType) +{ + *(vu16*)(0x04000204) &= ~0x0880; //sysSetBusOwners(true, true); + u32 deviceType = _deviceType; + + *((vu32*)0x027FFFF8) = 0x080000C0; // ARM7 reset address + + if(deviceType == DEVICE_TYPE_EFA2) + { + *(u16 *)0x9FE0000 = 0xD200; + *(u16 *)0x8000000 = 0x1500; + *(u16 *)0x8020000 = 0xD200; + *(u16 *)0x8040000 = 0x1500; + *(u16 *)0x9880000 = 1 << 15; + *(u16 *)0x9FC0000 = 0x1500; + return true; + } + else if(deviceType == DEVICE_TYPE_MPCF) + { + return true; + } + else if(deviceType == DEVICE_TYPE_EZSD) + { + return true; + } + else if(deviceType == DEVICE_TYPE_M3CF || deviceType == DEVICE_TYPE_M3SD) + { + u32 mode = 0x00400004; + vu16 tmp; + tmp = *(vu16*)(0x08E00002); + tmp = *(vu16*)(0x0800000E); + tmp = *(vu16*)(0x08801FFC); + tmp = *(vu16*)(0x0800104A); + tmp = *(vu16*)(0x08800612); + tmp = *(vu16*)(0x08000000); + tmp = *(vu16*)(0x08801B66); + tmp = *(vu16*)(0x08000000 + (mode << 1)); + tmp = *(vu16*)(0x0800080E); + tmp = *(vu16*)(0x08000000); + + tmp = *(vu16*)(0x080001E4); + tmp = *(vu16*)(0x080001E4); + tmp = *(vu16*)(0x08000188); + tmp = *(vu16*)(0x08000188); + return true; + } + else if(deviceType == DEVICE_TYPE_SCCF || deviceType == DEVICE_TYPE_SCSD) + { + *(vu16*)0x09FFFFFE = 0xA55A; + *(vu16*)0x09FFFFFE = 0xA55A; + *(vu16*)0x09FFFFFE = 0; + *(vu16*)0x09FFFFFE = 0; + *((vu32*)0x027FFFF8) = 0x08000000; // Special ARM7 reset address + return true; + } + + return false; +} + + + +void passmeloopEnter() +{ + *(vu16*)(0x04000208) = 0; //REG_IME = IME_DISABLE; + *(vu16*)(0x04000204) |= 0x0880; //sysSetBusOwners(false, false); + *((vu32*)0x027FFFFC) = 0; + *((vu32*)0x027FFE04) = (u32)0xE59FF018; + *((vu32*)0x027FFE24) = (u32)0x027FFE04; + asm("swi 0x00"); //swiSoftReset(); + asm("bx lr"); +} + +#endif + + +#ifdef ARM7 + +//#include <nds.h> + +bool passmeloopQuery() +{ + if(*((vu32*)0x027FFE24) == (u32)0x027FFE04) + return true; + return false; +} + + + +void cartExecute() +{ + *(vu16*)(0x04000208) = 0; //REG_IME = IME_DISABLE; + *((vu32*)0x027FFE34) = *((vu32*)0x027FFFF8); + asm("swi 0x00"); //swiSoftReset(); + asm("bx lr"); +} + +#endif + + + |