well, more AR shito
This commit is contained in:
parent
83f8e11bc1
commit
eb44833171
152
src/AREngine.cpp
152
src/AREngine.cpp
|
@ -53,10 +53,10 @@ void Reset()
|
||||||
NumCheatCodes = 0;
|
NumCheatCodes = 0;
|
||||||
|
|
||||||
// TODO: acquire codes from a sensible source!
|
// TODO: acquire codes from a sensible source!
|
||||||
|
#define TEMP_PUTCODE(a, b) *ptr++ = a; *ptr++ = b;
|
||||||
CheatEntry* entry = &CheatCodes[0];
|
CheatEntry* entry = &CheatCodes[0];
|
||||||
u32* ptr = &entry->Code[0];
|
u32* ptr = &entry->Code[0];
|
||||||
#define TEMP_PUTCODE(a, b) *ptr++ = a; *ptr++ = b;
|
/*// NSMBDS EUR - giant fucking Mario
|
||||||
// NSMBDS EUR - giant fucking Mario
|
|
||||||
TEMP_PUTCODE(0x1209DBD0, 0x0000027C);
|
TEMP_PUTCODE(0x1209DBD0, 0x0000027C);
|
||||||
TEMP_PUTCODE(0x2209DBC0, 0x00000003);
|
TEMP_PUTCODE(0x2209DBC0, 0x00000003);
|
||||||
TEMP_PUTCODE(0x94000130, 0xFFFD0000);
|
TEMP_PUTCODE(0x94000130, 0xFFFD0000);
|
||||||
|
@ -64,6 +64,44 @@ void Reset()
|
||||||
TEMP_PUTCODE(0x2209DBC0, 0x00000003);
|
TEMP_PUTCODE(0x2209DBC0, 0x00000003);
|
||||||
entry->Enabled = true;
|
entry->Enabled = true;
|
||||||
NumCheatCodes++;
|
NumCheatCodes++;
|
||||||
|
|
||||||
|
entry = &CheatCodes[1];
|
||||||
|
ptr = &entry->Code[0];*/
|
||||||
|
// NSMBDS EUR - jump to the sky
|
||||||
|
/*TEMP_PUTCODE(0x9209DC90, 0xFFFD0002);
|
||||||
|
TEMP_PUTCODE(0x920DC910, 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x021C1944, 0x00004000);
|
||||||
|
TEMP_PUTCODE(0xD2000000, 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x9209DC90, 0xFFFE0001);
|
||||||
|
TEMP_PUTCODE(0x920DC910, 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x021C1944, 0x00004000);
|
||||||
|
TEMP_PUTCODE(0xD2000000, 0x00000000);*/
|
||||||
|
// SM64DS EUR redcoin
|
||||||
|
/*TEMP_PUTCODE(0x0210CC3E, 0x00000121);
|
||||||
|
TEMP_PUTCODE(0x5209F30C, 0x00000008);
|
||||||
|
TEMP_PUTCODE(0x0209F30C, 0x00000000);
|
||||||
|
TEMP_PUTCODE(0xD2000000, 0x00000000);*/
|
||||||
|
// SM64DS EUR shroom-o-matic
|
||||||
|
/*TEMP_PUTCODE(0x9209D09A , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x6209B468 , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0xB209B468 , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x10000672 , 0x000003FF);
|
||||||
|
TEMP_PUTCODE(0xD2000000 , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x9209D09A , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x94000130 , 0xFCBF0000);
|
||||||
|
TEMP_PUTCODE(0x6209B468 , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0xB209B468 , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x200006B3 , 0x00000001);
|
||||||
|
TEMP_PUTCODE(0x200006B4 , 0x00000001);
|
||||||
|
TEMP_PUTCODE(0xD2000000 , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x9209D09A , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x94000130 , 0xFC7F0000);
|
||||||
|
TEMP_PUTCODE(0x6209B468 , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0xB209B468 , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0x10000672 , 0x00000000);
|
||||||
|
TEMP_PUTCODE(0xD2000000 , 0x00000000);*/
|
||||||
|
entry->Enabled = true;
|
||||||
|
NumCheatCodes++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,6 +115,8 @@ void RunCheat(CheatEntry* entry)
|
||||||
{
|
{
|
||||||
u32* code = &entry->Code[0];
|
u32* code = &entry->Code[0];
|
||||||
|
|
||||||
|
u32 offset = 0;
|
||||||
|
u32 datareg = 0;
|
||||||
u32 cond = 1;
|
u32 cond = 1;
|
||||||
u32 condstack = 0;
|
u32 condstack = 0;
|
||||||
|
|
||||||
|
@ -100,18 +140,88 @@ void RunCheat(CheatEntry* entry)
|
||||||
switch (op)
|
switch (op)
|
||||||
{
|
{
|
||||||
case16(0x00): // 32-bit write
|
case16(0x00): // 32-bit write
|
||||||
NDS::ARM7Write32(a & 0x0FFFFFFF, b);
|
NDS::ARM7Write32((a & 0x0FFFFFFF) + offset, b);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case16(0x10): // 16-bit write
|
case16(0x10): // 16-bit write
|
||||||
NDS::ARM7Write16(a & 0x0FFFFFFF, b & 0xFFFF);
|
NDS::ARM7Write16((a & 0x0FFFFFFF) + offset, b & 0xFFFF);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case16(0x20): // 8-bit write
|
case16(0x20): // 8-bit write
|
||||||
NDS::ARM7Write8(a & 0x0FFFFFFF, b & 0xFF);
|
NDS::ARM7Write8((a & 0x0FFFFFFF) + offset, b & 0xFF);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case16(0x90): // IF b.l = ((~b.h) & u16[a])
|
case16(0x30): // IF b > u32[a]
|
||||||
|
{
|
||||||
|
condstack <<= 1;
|
||||||
|
condstack |= cond;
|
||||||
|
|
||||||
|
u32 chk = NDS::ARM7Read32(a & 0x0FFFFFFF);
|
||||||
|
|
||||||
|
cond = (b > chk) ? 1:0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case16(0x40): // IF b < u32[a]
|
||||||
|
{
|
||||||
|
condstack <<= 1;
|
||||||
|
condstack |= cond;
|
||||||
|
|
||||||
|
u32 chk = NDS::ARM7Read32(a & 0x0FFFFFFF);
|
||||||
|
|
||||||
|
cond = (b < chk) ? 1:0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case16(0x50): // IF b == u32[a]
|
||||||
|
{
|
||||||
|
condstack <<= 1;
|
||||||
|
condstack |= cond;
|
||||||
|
|
||||||
|
u32 chk = NDS::ARM7Read32(a & 0x0FFFFFFF);
|
||||||
|
|
||||||
|
cond = (b == chk) ? 1:0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case16(0x60): // IF b != u32[a]
|
||||||
|
{
|
||||||
|
condstack <<= 1;
|
||||||
|
condstack |= cond;
|
||||||
|
|
||||||
|
u32 chk = NDS::ARM7Read32(a & 0x0FFFFFFF);
|
||||||
|
|
||||||
|
cond = (b != chk) ? 1:0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case16(0x70): // IF b.l > ((~b.h) & u16[a])
|
||||||
|
{
|
||||||
|
condstack <<= 1;
|
||||||
|
condstack |= cond;
|
||||||
|
|
||||||
|
u16 val = NDS::ARM7Read16(a & 0x0FFFFFFF);
|
||||||
|
u16 chk = ~(b >> 16);
|
||||||
|
chk &= val;
|
||||||
|
|
||||||
|
cond = ((b & 0xFFFF) > chk) ? 1:0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case16(0x80): // IF b.l < ((~b.h) & u16[a])
|
||||||
|
{
|
||||||
|
condstack <<= 1;
|
||||||
|
condstack |= cond;
|
||||||
|
|
||||||
|
u16 val = NDS::ARM7Read16(a & 0x0FFFFFFF);
|
||||||
|
u16 chk = ~(b >> 16);
|
||||||
|
chk &= val;
|
||||||
|
|
||||||
|
cond = ((b & 0xFFFF) < chk) ? 1:0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case16(0x90): // IF b.l == ((~b.h) & u16[a])
|
||||||
{
|
{
|
||||||
condstack <<= 1;
|
condstack <<= 1;
|
||||||
condstack |= cond;
|
condstack |= cond;
|
||||||
|
@ -124,6 +234,36 @@ void RunCheat(CheatEntry* entry)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case16(0xA0): // IF b.l != ((~b.h) & u16[a])
|
||||||
|
{
|
||||||
|
condstack <<= 1;
|
||||||
|
condstack |= cond;
|
||||||
|
|
||||||
|
u16 val = NDS::ARM7Read16(a & 0x0FFFFFFF);
|
||||||
|
u16 chk = ~(b >> 16);
|
||||||
|
chk &= val;
|
||||||
|
|
||||||
|
cond = ((b & 0xFFFF) != chk) ? 1:0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case16(0xB0): // offset = u32[a + offset]
|
||||||
|
offset = NDS::ARM7Read32((a & 0x0FFFFFFF) + offset);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0xD0: // ENDIF
|
||||||
|
cond = condstack & 0x1;
|
||||||
|
condstack >>= 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0xD2: // NEXT+FLUSH
|
||||||
|
// TODO: loop shenanigans!
|
||||||
|
offset = 0;
|
||||||
|
datareg = 0;
|
||||||
|
condstack = 0;
|
||||||
|
cond = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("!! bad AR opcode %08X %08X\n", a, b);
|
printf("!! bad AR opcode %08X %08X\n", a, b);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue