Implemented SXA & SYA (behavior may be incorrect, but passes existing tests)
This commit is contained in:
parent
a96b6229d0
commit
56b3084e33
2 changed files with 20 additions and 1 deletions
|
@ -21,7 +21,7 @@ CPU::CPU(MemoryManager *memoryManager) : _memoryManager(memoryManager)
|
|||
&CPU::RTS, &CPU::ADC, &CPU::HLT, &CPU::RRA, &CPU::NOP, &CPU::ADC, &CPU::ROR_Memory, &CPU::RRA, &CPU::PLA, &CPU::ADC, &CPU::ROR_Acc, &CPU::ARR, &CPU::JMP_Ind, &CPU::ADC, &CPU::ROR_Memory, &CPU::RRA, //6
|
||||
&CPU::BVS, &CPU::ADC, &CPU::HLT, &CPU::RRA, &CPU::NOP, &CPU::ADC, &CPU::ROR_Memory, &CPU::RRA, &CPU::SEI, &CPU::ADC, &CPU::NOP, &CPU::RRA, &CPU::NOP, &CPU::ADC, &CPU::ROR_Memory, &CPU::RRA, //7
|
||||
&CPU::NOP, &CPU::STA, &CPU::NOP, &CPU::SAX, &CPU::STY, &CPU::STA, &CPU::STX, &CPU::SAX, &CPU::DEY, &CPU::NOP, &CPU::TXA, &CPU::UNK, &CPU::STY, &CPU::STA, &CPU::STX, &CPU::SAX, //8
|
||||
&CPU::BCC, &CPU::STA, &CPU::HLT, &CPU::AXA, &CPU::STY, &CPU::STA, &CPU::STX, &CPU::SAX, &CPU::TYA, &CPU::STA, &CPU::TXS, &CPU::TAS, &CPU::NOP, &CPU::STA, &CPU::NOP, &CPU::AXA, //9
|
||||
&CPU::BCC, &CPU::STA, &CPU::HLT, &CPU::AXA, &CPU::STY, &CPU::STA, &CPU::STX, &CPU::SAX, &CPU::TYA, &CPU::STA, &CPU::TXS, &CPU::TAS, &CPU::SYA, &CPU::STA, &CPU::SXA, &CPU::AXA, //9
|
||||
&CPU::LDY, &CPU::LDA, &CPU::LDX, &CPU::LAX, &CPU::LDY, &CPU::LDA, &CPU::LDX, &CPU::LAX, &CPU::TAY, &CPU::LDA, &CPU::TAX, &CPU::ATX, &CPU::LDY, &CPU::LDA, &CPU::LDX, &CPU::LAX, //A
|
||||
&CPU::BCS, &CPU::LDA, &CPU::HLT, &CPU::LAX, &CPU::LDY, &CPU::LDA, &CPU::LDX, &CPU::LAX, &CPU::CLV, &CPU::LDA, &CPU::TSX, &CPU::LAS, &CPU::LDY, &CPU::LDA, &CPU::LDX, &CPU::LAX, //B
|
||||
&CPU::CPY, &CPU::CPA, &CPU::NOP, &CPU::DCP, &CPU::CPY, &CPU::CPA, &CPU::DEC, &CPU::DCP, &CPU::INY, &CPU::CPA, &CPU::DEX, &CPU::AXS, &CPU::CPY, &CPU::CPA, &CPU::DEC, &CPU::DCP, //C
|
||||
|
|
19
Core/CPU.h
19
Core/CPU.h
|
@ -813,6 +813,25 @@ private:
|
|||
SetX(value);
|
||||
}
|
||||
|
||||
void SYA()
|
||||
{
|
||||
uint8_t addrHigh = GetOperand() >> 8;
|
||||
uint8_t addrLow = GetOperand() & 0xFF;
|
||||
uint8_t value = Y() & (addrHigh + 1);
|
||||
|
||||
//From here: http://forums.nesdev.com/viewtopic.php?f=3&t=3831&start=30
|
||||
//Unsure if this is accurate or not
|
||||
//"the target address for e.g. SYA becomes ((y & (addr_high + 1)) << 8) | addr_low instead of the normal ((addr_high + 1) << 8) | addr_low"
|
||||
MemoryWrite(((Y() & (addrHigh + 1)) << 8) | addrLow, value);
|
||||
}
|
||||
|
||||
void SXA()
|
||||
{
|
||||
uint8_t addrHigh = GetOperand() >> 8;
|
||||
uint8_t addrLow = GetOperand() & 0xFF;
|
||||
uint8_t value = X() & (addrHigh + 1);
|
||||
MemoryWrite(((X() & (addrHigh + 1)) << 8) | addrLow, value);
|
||||
}
|
||||
|
||||
//Unimplemented/Incorrect Unofficial OP codes
|
||||
void HLT()
|
||||
|
|
Loading…
Add table
Reference in a new issue