From 930f504861bf1b2cb0177e64f5c9d92d65e0b3e6 Mon Sep 17 00:00:00 2001 From: Sour Date: Wed, 13 Feb 2019 23:41:00 -0500 Subject: [PATCH] CPU: Fixed transfer instructions (based on CPUTRN test rom) --- Core/Cpu.Instructions.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Core/Cpu.Instructions.cpp b/Core/Cpu.Instructions.cpp index d54cfd2..82df6ce 100644 --- a/Core/Cpu.Instructions.cpp +++ b/Core/Cpu.Instructions.cpp @@ -835,7 +835,7 @@ void Cpu::TAY() void Cpu::TCD() { - SetRegister(_state.DBR, (uint8_t)_state.A); + SetRegister(_state.D, _state.A, false); } void Cpu::TCS() @@ -845,7 +845,7 @@ void Cpu::TCS() void Cpu::TDC() { - SetRegister(_state.A, _state.DBR, CheckFlag(ProcFlags::MemoryMode8)); + SetRegister(_state.A, _state.D, CheckFlag(ProcFlags::MemoryMode8)); } void Cpu::TSC() @@ -891,13 +891,21 @@ void Cpu::XBA() void Cpu::XCE() { - bool carry = (_state.PS & ProcFlags::Carry) != 0; + bool carry = CheckFlag(ProcFlags::Carry); if(_state.EmulationMode) { SetFlags(ProcFlags::Carry); } else { ClearFlags(ProcFlags::Carry); } _state.EmulationMode = carry; + + if(_state.EmulationMode) { + SetFlags(ProcFlags::IndexMode8 | ProcFlags::MemoryMode8); + //_state.A &= 0xFF; + _state.Y &= 0xFF; + _state.X &= 0xFF; + _state.SP = 0x100 | (_state.SP & 0xFF); + } } /*****************