Fill 'N' Slide fixes.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1505 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
3e33e06844
commit
ffae8c51d6
|
@ -55,7 +55,7 @@ bool Subtype_WriteToPointer(u32 addr, u32 data);
|
||||||
bool Subtype_AddCode(u32 addr, u32 data);
|
bool Subtype_AddCode(u32 addr, u32 data);
|
||||||
bool Subtype_MasterCodeAndWriteToCCXXXXXX();
|
bool Subtype_MasterCodeAndWriteToCCXXXXXX();
|
||||||
// Zero Codes
|
// Zero Codes
|
||||||
bool ZeroCode_FillAndSlide(u32 addr_last, u32 addr, u32 data);
|
bool ZeroCode_FillAndSlide(u32 val_last, u32 addr, u32 data);
|
||||||
bool ZeroCode_MemoryCopy(u32 val_last, u32 addr, u32 data);
|
bool ZeroCode_MemoryCopy(u32 val_last, u32 addr, u32 data);
|
||||||
// Normal Codes
|
// Normal Codes
|
||||||
bool NormalCode_Type_0(u8 subtype, u32 addr, u32 data);
|
bool NormalCode_Type_0(u8 subtype, u32 addr, u32 data);
|
||||||
|
@ -212,7 +212,7 @@ bool RunActionReplayCode(const ARCode &arcode) {
|
||||||
bool skip = false;
|
bool skip = false;
|
||||||
bool cond = false;
|
bool cond = false;
|
||||||
u32 addr_last = 0;
|
u32 addr_last = 0;
|
||||||
u32 val_last;
|
u32 val_last = 0;
|
||||||
|
|
||||||
code = arcode;
|
code = arcode;
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ bool RunActionReplayCode(const ARCode &arcode) {
|
||||||
if (doFillNSlide) {
|
if (doFillNSlide) {
|
||||||
doFillNSlide = false;
|
doFillNSlide = false;
|
||||||
LogInfo("Doing Fill And Slide");
|
LogInfo("Doing Fill And Slide");
|
||||||
if (!ZeroCode_FillAndSlide(addr_last, addr, data))
|
if (!ZeroCode_FillAndSlide(val_last, addr, data))
|
||||||
return false;
|
return false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -308,7 +308,7 @@ bool RunActionReplayCode(const ARCode &arcode) {
|
||||||
{
|
{
|
||||||
LogInfo("ZCode: Fill And Slide");
|
LogInfo("ZCode: Fill And Slide");
|
||||||
doFillNSlide = true;
|
doFillNSlide = true;
|
||||||
addr_last = addr;
|
val_last = data;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
default:
|
default:
|
||||||
|
@ -545,10 +545,10 @@ bool Subtype_MasterCodeAndWriteToCCXXXXXX()
|
||||||
|
|
||||||
|
|
||||||
// Zero Codes
|
// Zero Codes
|
||||||
bool ZeroCode_FillAndSlide(u32 addr_last, u32 addr, u32 data) // This needs more testing
|
bool ZeroCode_FillAndSlide(u32 val_last, u32 addr, u32 data) // This needs more testing
|
||||||
{
|
{
|
||||||
u32 new_addr = (addr_last & 0x81FFFFFF);
|
u32 new_addr = (val_last & 0x81FFFFFF);
|
||||||
u8 size = ((addr_last >> 25) & 0x03);
|
u8 size = ((val_last >> 25) & 0x03);
|
||||||
int addr_incr;
|
int addr_incr;
|
||||||
u32 val = addr;
|
u32 val = addr;
|
||||||
int val_incr;
|
int val_incr;
|
||||||
|
@ -572,8 +572,8 @@ bool ZeroCode_FillAndSlide(u32 addr_last, u32 addr, u32 data) // This needs more
|
||||||
val_incr = (int)(data & 0x7F); // 000000Z1
|
val_incr = (int)(data & 0x7F); // 000000Z1
|
||||||
}
|
}
|
||||||
|
|
||||||
LogInfo("Address Increment: %08x", addr_incr);
|
LogInfo("Address Increment: %i", addr_incr);
|
||||||
LogInfo("Value Increment: %08x", val_incr);
|
LogInfo("Value Increment: %i", val_incr);
|
||||||
|
|
||||||
// Correct?
|
// Correct?
|
||||||
if (val_incr < 0)
|
if (val_incr < 0)
|
||||||
|
@ -591,38 +591,76 @@ bool ZeroCode_FillAndSlide(u32 addr_last, u32 addr, u32 data) // This needs more
|
||||||
for (int i=0; i < write_num; i++) {
|
for (int i=0; i < write_num; i++) {
|
||||||
Memory::Write_U8(val & 0xFF, curr_addr);
|
Memory::Write_U8(val & 0xFF, curr_addr);
|
||||||
LogInfo("Write %08x to address %08x", val & 0xFF, curr_addr);
|
LogInfo("Write %08x to address %08x", val & 0xFF, curr_addr);
|
||||||
val += val_incr;
|
if (val_incr < 0)
|
||||||
curr_addr += addr_incr;
|
{
|
||||||
|
val -= (u32)val_incr;
|
||||||
|
}
|
||||||
|
if (val_incr > 0)
|
||||||
|
{
|
||||||
|
val += (u32)(abs(val_incr));
|
||||||
|
}
|
||||||
|
if (addr_incr < 0)
|
||||||
|
{
|
||||||
|
curr_addr -= (u32)(abs(addr_incr));
|
||||||
|
}
|
||||||
|
if (addr_incr > 0)
|
||||||
|
{
|
||||||
|
curr_addr += (u32)addr_incr;
|
||||||
|
}
|
||||||
LogInfo("Value Update: %08x", val);
|
LogInfo("Value Update: %08x", val);
|
||||||
LogInfo("Current Hardware Address Update: %08x", curr_addr);
|
LogInfo("Current Hardware Address Update: %08x", curr_addr);
|
||||||
}
|
}
|
||||||
LogInfo("--------");
|
LogInfo("--------");
|
||||||
break;
|
break;
|
||||||
case 0x1: // Halfword
|
case 0x1: // Halfword
|
||||||
addr_incr >>= 1;
|
|
||||||
LogInfo ("Address increment shifted right by 1: %08x", addr_incr);
|
|
||||||
LogInfo("Short Write");
|
LogInfo("Short Write");
|
||||||
LogInfo("--------");
|
LogInfo("--------");
|
||||||
for (int i=0; i < write_num; i++) {
|
for (int i=0; i < write_num; i++) {
|
||||||
Memory::Write_U16(val & 0xFFFF, curr_addr);
|
Memory::Write_U16(val & 0xFFFF, curr_addr);
|
||||||
LogInfo("Write %08x to address %08x", val & 0xFFFF, curr_addr);
|
LogInfo("Write %08x to address %08x", val & 0xFFFF, curr_addr);
|
||||||
val += val_incr;
|
if (val_incr < 0)
|
||||||
curr_addr += addr_incr;
|
{
|
||||||
|
val -= (u32)val_incr;
|
||||||
|
}
|
||||||
|
if (val_incr > 0)
|
||||||
|
{
|
||||||
|
val += (u32)(abs(val_incr));
|
||||||
|
}
|
||||||
|
if (addr_incr < 0)
|
||||||
|
{
|
||||||
|
curr_addr -= (u32)(abs(addr_incr));
|
||||||
|
}
|
||||||
|
if (addr_incr > 0)
|
||||||
|
{
|
||||||
|
curr_addr += (u32)addr_incr;
|
||||||
|
}
|
||||||
LogInfo("Value Update: %08x", val);
|
LogInfo("Value Update: %08x", val);
|
||||||
LogInfo("Current Hardware Address Update: %08x", curr_addr);
|
LogInfo("Current Hardware Address Update: %08x", curr_addr);
|
||||||
}
|
}
|
||||||
LogInfo("--------");
|
LogInfo("--------");
|
||||||
break;
|
break;
|
||||||
case 0x2: // Word
|
case 0x2: // Word
|
||||||
addr_incr >>= 2;
|
|
||||||
LogInfo ("Address increment shifted right by 2: %08x", addr_incr);
|
|
||||||
LogInfo("Word Write");
|
LogInfo("Word Write");
|
||||||
LogInfo("--------");
|
LogInfo("--------");
|
||||||
for (int i=0; i < write_num; i++) {
|
for (int i=0; i < write_num; i++) {
|
||||||
Memory::Write_U32(val, curr_addr);
|
Memory::Write_U32(val, curr_addr);
|
||||||
LogInfo("Write %08x to address %08x", val, curr_addr);
|
LogInfo("Write %08x to address %08x", val, curr_addr);
|
||||||
val += val_incr;
|
if (val_incr < 0)
|
||||||
curr_addr += addr_incr;
|
{
|
||||||
|
val -= (u32)val_incr;
|
||||||
|
}
|
||||||
|
if (val_incr > 0)
|
||||||
|
{
|
||||||
|
val += (u32)(abs(val_incr));
|
||||||
|
}
|
||||||
|
if (addr_incr < 0)
|
||||||
|
{
|
||||||
|
curr_addr -= (u32)(abs(addr_incr));
|
||||||
|
}
|
||||||
|
if (addr_incr > 0)
|
||||||
|
{
|
||||||
|
curr_addr += (u32)addr_incr;
|
||||||
|
}
|
||||||
LogInfo("Value Update: %08x", val);
|
LogInfo("Value Update: %08x", val);
|
||||||
LogInfo("Current Hardware Address Update: %08x", curr_addr);
|
LogInfo("Current Hardware Address Update: %08x", curr_addr);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue