mirror of
https://github.com/zoriya/ComSquare.git
synced 2026-05-31 17:33:07 +00:00
Cleaning up the CPX/CPY/INX/INY
This commit is contained in:
@@ -199,72 +199,6 @@ namespace ComSquare::CPU
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CPU::INX(uint24_t, AddressingMode)
|
||||
{
|
||||
this->_registers.x++;
|
||||
|
||||
if (this->_registers.p.x_b)
|
||||
this->_registers.x %= 0x100;
|
||||
|
||||
unsigned negativeFlag = this->_registers.p.x_b ? 0x80u : 0x8000u;
|
||||
this->_registers.p.z = this->_registers.x == 0;
|
||||
this->_registers.p.n = this->_registers.x & negativeFlag;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CPU::INY(uint24_t, AddressingMode)
|
||||
{
|
||||
this->_registers.y++;
|
||||
|
||||
if (this->_registers.p.x_b)
|
||||
this->_registers.y %= 0x100;
|
||||
|
||||
unsigned negativeFlag = this->_registers.p.x_b ? 0x80u : 0x8000u;
|
||||
this->_registers.p.z = this->_registers.y == 0;
|
||||
this->_registers.p.n = this->_registers.y & negativeFlag;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CPU::CPX(uint24_t valueAddr, AddressingMode mode)
|
||||
{
|
||||
unsigned value = this->_bus->read(valueAddr++);
|
||||
|
||||
if (this->_registers.p.x_b) {
|
||||
uint8_t x = this->_registers.x;
|
||||
x -= value;
|
||||
this->_registers.p.z = x == 0;
|
||||
this->_registers.p.n = x & 0x80u;
|
||||
} else {
|
||||
value += this->_bus->read(valueAddr) << 8u;
|
||||
uint16_t x = this->_registers.x;
|
||||
x -= value;
|
||||
this->_registers.p.z = x == 0;
|
||||
this->_registers.p.n = x & 0x8000u;
|
||||
}
|
||||
this->_registers.p.c = this->_registers.x >= value;
|
||||
return !this->_registers.p.x_b + (mode == DirectPage && this->_registers.dl != 0);
|
||||
}
|
||||
|
||||
int CPU::CPY(uint24_t valueAddr, AddressingMode mode)
|
||||
{
|
||||
unsigned value = this->_bus->read(valueAddr++);
|
||||
|
||||
this->_registers.p.c = this->_registers.y >= value;
|
||||
if (this->_registers.p.x_b) {
|
||||
uint8_t y = this->_registers.y;
|
||||
y -= value;
|
||||
this->_registers.p.z = y == 0;
|
||||
this->_registers.p.n = y & 0x80u;
|
||||
} else {
|
||||
value += this->_bus->read(valueAddr) << 8u;
|
||||
uint16_t y = this->_registers.y;
|
||||
y -= value;
|
||||
this->_registers.p.z = y == 0;
|
||||
this->_registers.p.n = y & 0x8000u;
|
||||
}
|
||||
return !this->_registers.p.x_b + (mode == DirectPage && this->_registers.dl != 0);
|
||||
}
|
||||
|
||||
int CPU::BCC(uint24_t valueAddr, AddressingMode)
|
||||
{
|
||||
if (!this->_registers.p.c)
|
||||
|
||||
Reference in New Issue
Block a user