mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 13:57:57 -07:00
AR fixes, more cheat codes work now! :P
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@889 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
dfd332e149
commit
0667c925de
@ -29,7 +29,6 @@ u32 data;
|
|||||||
u8 subtype;
|
u8 subtype;
|
||||||
u8 w;
|
u8 w;
|
||||||
u8 type;
|
u8 type;
|
||||||
u8 z;
|
|
||||||
std::vector<AREntry>::const_iterator iter;
|
std::vector<AREntry>::const_iterator iter;
|
||||||
std::vector<ARCode> arCodes;
|
std::vector<ARCode> arCodes;
|
||||||
ARCode code;
|
ARCode code;
|
||||||
@ -107,12 +106,11 @@ void RunActionReplayCode(const ARCode &arcode, bool nowIsBootup) {
|
|||||||
{
|
{
|
||||||
cmd_addr = iter->cmd_addr;
|
cmd_addr = iter->cmd_addr;
|
||||||
cmd = iter->cmd_addr>>24;
|
cmd = iter->cmd_addr>>24;
|
||||||
addr = (iter->cmd_addr & 0x01FFFFFF);
|
addr = iter->cmd_addr;
|
||||||
data = iter->value;
|
data = iter->value;
|
||||||
subtype = ((addr >> 30) & 0x03);
|
subtype = ((cmd_addr >> 30) & 0x03);
|
||||||
w = (cmd - ((cmd >> 4) << 4));
|
w = (cmd - ((cmd >> 4) << 4));
|
||||||
type = ((addr >> 27) & 0x07);
|
type = ((cmd_addr >> 27) & 0x07);
|
||||||
z = (cmd >> 4);
|
|
||||||
|
|
||||||
if (addr >= 0x00002000 && addr < 0x00003000) {
|
if (addr >= 0x00002000 && addr < 0x00003000) {
|
||||||
PanicAlert("This action replay simulator does not support codes that modify Action Replay itself.");
|
PanicAlert("This action replay simulator does not support codes that modify Action Replay itself.");
|
||||||
@ -145,27 +143,27 @@ void RunActionReplayCode(const ARCode &arcode, bool nowIsBootup) {
|
|||||||
if (iter == code.ops.begin() && cmd == 1) continue;
|
if (iter == code.ops.begin() && cmd == 1) continue;
|
||||||
|
|
||||||
// SubType selector
|
// SubType selector
|
||||||
switch(z)
|
switch(subtype)
|
||||||
{
|
{
|
||||||
case 0x0: // Ram write (and fill)
|
case 0x0: // Ram write (and fill)
|
||||||
{
|
{
|
||||||
DoARSubtype_RamWriteAndFill(); continue;
|
DoARSubtype_RamWriteAndFill(); continue;
|
||||||
}
|
}
|
||||||
case 0x4: // Write to pointer
|
case 0x1: // Write to pointer
|
||||||
{
|
{
|
||||||
DoARSubtype_WriteToPointer(); continue;
|
DoARSubtype_WriteToPointer(); continue;
|
||||||
}
|
}
|
||||||
case 0x8: // Add code
|
case 0x2: // Add code
|
||||||
{
|
{
|
||||||
DoARSubtype_AddCode(); continue;
|
DoARSubtype_AddCode(); continue;
|
||||||
}
|
}
|
||||||
case 0xC: // Master Code & Write to CCXXXXXX
|
case 0x3: // Master Code & Write to CCXXXXXX
|
||||||
{
|
{
|
||||||
DoARSubtype_MasterCodeAndWriteToCCXXXXXX(); // TODO: This is not implemented yet
|
DoARSubtype_MasterCodeAndWriteToCCXXXXXX(); continue;// TODO: This is not implemented yet
|
||||||
}
|
}
|
||||||
default: // non-specific z codes (hacks)
|
default: // non-specific z codes (hacks)
|
||||||
{
|
{
|
||||||
DoARSubtype_Other();
|
DoARSubtype_Other(); continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,8 +173,8 @@ void DoARSubtype_RamWriteAndFill()
|
|||||||
{
|
{
|
||||||
if(w < 0x8) // Check the value W in 0xZWXXXXXXX
|
if(w < 0x8) // Check the value W in 0xZWXXXXXXX
|
||||||
{
|
{
|
||||||
u32 new_addr = (addr | 0x80000000);
|
u32 new_addr = ( (addr & 0x01FFFFFF) | 0x80000000);
|
||||||
switch ((new_addr >> 25) & 0x03)
|
switch ((addr >> 25) & 0x03)
|
||||||
{
|
{
|
||||||
case 0x00: // Byte write
|
case 0x00: // Byte write
|
||||||
{
|
{
|
||||||
@ -211,9 +209,9 @@ void DoARSubtype_WriteToPointer()
|
|||||||
if(w < 0x8)
|
if(w < 0x8)
|
||||||
{
|
{
|
||||||
u32 new_addr = ( addr | 0x80000000);
|
u32 new_addr = ( addr | 0x80000000);
|
||||||
switch ((new_addr >> 25) & 0x03)
|
switch ((addr >> 25) & 0x03)
|
||||||
{
|
{
|
||||||
case 0x00: // Byte write to pointer
|
case 0x00: // Byte write to pointer [40]
|
||||||
{
|
{
|
||||||
u32 ptr = Memory::Read_U32(new_addr);
|
u32 ptr = Memory::Read_U32(new_addr);
|
||||||
u8 thebyte = data & 0xFF;
|
u8 thebyte = data & 0xFF;
|
||||||
@ -222,7 +220,7 @@ void DoARSubtype_WriteToPointer()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0x01: // Short write to pointer
|
case 0x01: // Short write to pointer [42]
|
||||||
{
|
{
|
||||||
u32 ptr = Memory::Read_U32(new_addr);
|
u32 ptr = Memory::Read_U32(new_addr);
|
||||||
u16 theshort = data & 0xFFFF;
|
u16 theshort = data & 0xFFFF;
|
||||||
@ -231,13 +229,11 @@ void DoARSubtype_WriteToPointer()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 0x02: // Dword write to pointer [44]
|
||||||
case 0x02: // Dword write to pointer
|
|
||||||
{
|
{
|
||||||
u32 ptr = Memory::Read_U32(new_addr);
|
Memory::Write_U32(data, Memory::Read_U32(new_addr)); break;
|
||||||
Memory::Write_U32(data, ptr);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default: PanicAlert("AR Method Error (Write To Pointer): w = %08x, addr = %08x",w,addr);
|
default: PanicAlert("AR Method Error (Write To Pointer): w = %08x, addr = %08x",w,addr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -247,8 +243,8 @@ void DoARSubtype_AddCode()
|
|||||||
{
|
{
|
||||||
if(w < 0x8)
|
if(w < 0x8)
|
||||||
{
|
{
|
||||||
u32 new_addr = (addr | 0x81FFFFFF);
|
u32 new_addr = ( (addr & 0x01FFFFFF) | 0x81FFFFFF);
|
||||||
switch((new_addr >> 25) & 0x03)
|
switch((addr >> 25) & 0x03)
|
||||||
{
|
{
|
||||||
case 0x0: // Byte add
|
case 0x0: // Byte add
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user