Fixing the PHA

This commit is contained in:
Anonymus Raccoon
2020-05-28 03:45:37 +02:00
parent 5ef1ba8d4f
commit 627fac8f2d
4 changed files with 19 additions and 4 deletions
+1 -1
View File
@@ -478,7 +478,7 @@ namespace ComSquare::CPU
{&CPU::ORA, 3, "ora", AddressingMode::DirectPage, 2}, // 05
{&CPU::ASL, 5, "asl", AddressingMode::DirectPage, 2}, // 06
{&CPU::ORA, 6, "ora", AddressingMode::DirectPageIndirectLong, 2}, // 07
{&CPU::PHP, 3, "php", AddressingMode::Implied, 3}, // 08
{&CPU::PHP, 3, "php", AddressingMode::Implied, 1}, // 08
{&CPU::ORA, 2, "ora", AddressingMode::ImmediateForA, 2}, // 09
{&CPU::ASL, 2, "asl", AddressingMode::Implied, 1}, // 0A
{&CPU::PHD, 4, "phd", AddressingMode::Implied, 1}, // 0B
@@ -82,7 +82,10 @@ namespace ComSquare::CPU
int CPU::PHA(uint24_t, AddressingMode)
{
this->_push(this->_registers.a);
if (this->_registers.p.m)
this->_push(this->_registers.al);
else
this->_push(this->_registers.a);
return !this->_registers.p.m;
}
+2 -2
View File
@@ -45,7 +45,7 @@ namespace ComSquare::PPU
case ppuRegisters::stat78:
return 0;
default:
throw InvalidAddress("PPU Internal Registers read ", addr);
throw InvalidAddress("PPU Internal Registers read ", addr + this->getStart());
}
}
@@ -215,7 +215,7 @@ namespace ComSquare::PPU
break;
//TODO adding the rest of the registers. oaf !
default:
throw InvalidAddress("PPU Internal Registers write", addr);
throw InvalidAddress("PPU Internal Registers write", addr + this->getStart());
}
}
+12
View File
@@ -105,12 +105,24 @@ Test(PHA, basic)
Init()
snes.cpu->_registers.a = 0xABCD;
snes.cpu->_registers.s = 0x02;
snes.cpu->_registers.p.m = false;
snes.cpu->PHA(0x0, ComSquare::CPU::AddressingMode::Implied);
cr_assert_eq(snes.wram->_data[1], 0xCD, "The second value pushed to the stack should be 0xCD but it was %x", snes.wram->_data[1]);
cr_assert_eq(snes.wram->_data[2], 0xAB, "The first value pushed to the stack should be 0xAB but it was %x", snes.wram->_data[2]);
cr_assert_eq(snes.cpu->_registers.s, 0x0, "The Stack pointer should be equal to 0x0 but it was %x", snes.cpu->_registers.s);
}
Test(PHA, 8bits)
{
Init()
snes.cpu->_registers.a = 0xCD;
snes.cpu->_registers.s = 0x02;
snes.cpu->_registers.p.m = false;
snes.cpu->PHA(0x0, ComSquare::CPU::AddressingMode::Implied);
cr_assert_eq(snes.wram->_data[1], 0xCD, "The second value pushed to the stack should be 0xCD but it was %x", snes.wram->_data[1]);
cr_assert_eq(snes.cpu->_registers.s, 0x0, "The Stack pointer should be equal to 0x0 but it was %x", snes.cpu->_registers.s);
}
Test(PHB, basic)
{
Init()