From b1db1b7a69d3c722f598f6585d0390ec7fe39b2a Mon Sep 17 00:00:00 2001 From: brandman211 Date: Sun, 29 Jul 2012 00:02:06 +0000 Subject: [PATCH] -Reversed the double byte data bytes. It now works properly. -Set the D flag to clear one instruction after it's set; SDBD is a prefix instruction. --- BizHawk.Emulation/CPUs/CP1610/Disassembler.cs | 3 +- BizHawk.Emulation/CPUs/CP1610/Execute.cs | 38 ++++++++++--------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/BizHawk.Emulation/CPUs/CP1610/Disassembler.cs b/BizHawk.Emulation/CPUs/CP1610/Disassembler.cs index 08b3151b3c..4e54938a7d 100644 --- a/BizHawk.Emulation/CPUs/CP1610/Disassembler.cs +++ b/BizHawk.Emulation/CPUs/CP1610/Disassembler.cs @@ -14,8 +14,7 @@ namespace BizHawk.Emulation.CPUs.CP1610 addrToAdvance = 1; byte dest, src, mem; ushort addr, offset; - int decle2, decle3; - int cond, ext; + int decle2, decle3, cond, ext; string result = ""; int opcode = ReadMemory(pc) & 0x3FF; switch (opcode) diff --git a/BizHawk.Emulation/CPUs/CP1610/Execute.cs b/BizHawk.Emulation/CPUs/CP1610/Execute.cs index 74af3426b5..17f66d744f 100644 --- a/BizHawk.Emulation/CPUs/CP1610/Execute.cs +++ b/BizHawk.Emulation/CPUs/CP1610/Execute.cs @@ -35,20 +35,20 @@ namespace BizHawk.Emulation.CPUs.CP1610 public void Execute(int cycles) { - byte dest, src, mem; - ushort dest_value, src_value, mem_read, addr, addr_read, offset; - int decle2, decle3, result = 0; - int ones, carry, status_word, lower, sign, cond, ext; - bool branch = false; PendingCycles += cycles; while (PendingCycles > 0) { - int addrToAdvance; if (logging) { + int addrToAdvance; log.WriteLine(Disassemble(RegisterPC, out addrToAdvance)); log.Flush(); } + byte dest, src, mem; + ushort dest_value, src_value, mem_read, addr, addr_read, offset; + int decle2, decle3, result = 0, ones, carry, status_word, lower, sign, cond, ext; + bool branch = false; + bool prev_FlagD = FlagD; int opcode = ReadMemory(RegisterPC++) & 0x3FF; switch (opcode) { @@ -1271,8 +1271,8 @@ namespace BizHawk.Emulation.CPUs.CP1610 else { // Double Byte Data. - Register[dest] = (ushort)(ReadMemory(Register[mem]++) << 8); - Register[dest] |= (ushort)(ReadMemory(Register[mem]) & 0xFF); + Register[dest] = (ushort)(ReadMemory(Register[mem]++) & 0xFF); + Register[dest] |= (ushort)(ReadMemory(Register[mem]) << 8); PendingCycles -= 10; TotalExecutedCycles += 10; } // Auto-increment the memory register if it does so on write. @@ -1379,8 +1379,8 @@ namespace BizHawk.Emulation.CPUs.CP1610 else { // Double Byte Data. - mem_read = (ushort)(ReadMemory(Register[mem]++) << 8); - mem_read |= (ushort)(ReadMemory(Register[mem]) & 0xFF); + mem_read = (ushort)(ReadMemory(Register[mem]++) & 0xFF); + mem_read |= (ushort)(ReadMemory(Register[mem]) << 8); PendingCycles -= 10; TotalExecutedCycles += 10; } // Auto-increment the memory register if it does so on write. @@ -1496,8 +1496,8 @@ namespace BizHawk.Emulation.CPUs.CP1610 else { // Double Byte Data. - mem_read = (ushort)(ReadMemory(Register[mem]++) << 8); - mem_read |= (ushort)(ReadMemory(Register[mem]) & 0xFF); + mem_read = (ushort)(ReadMemory(Register[mem]++) & 0xFF); + mem_read |= (ushort)(ReadMemory(Register[mem]) << 8); PendingCycles -= 10; TotalExecutedCycles += 10; } // Auto-increment the memory register if it does so on write. @@ -1611,8 +1611,8 @@ namespace BizHawk.Emulation.CPUs.CP1610 else { // Double Byte Data. - mem_read = (ushort)(ReadMemory(Register[mem]++) << 8); - mem_read |= (ushort)(ReadMemory(Register[mem]) & 0xFF); + mem_read = (ushort)(ReadMemory(Register[mem]++) & 0xFF); + mem_read |= (ushort)(ReadMemory(Register[mem]) << 8); PendingCycles -= 10; TotalExecutedCycles += 10; } // Auto-increment the memory register if it does so on write. @@ -1723,8 +1723,8 @@ namespace BizHawk.Emulation.CPUs.CP1610 else { // Double Byte Data. - mem_read = (ushort)(ReadMemory(Register[mem]++) << 8); - mem_read |= (ushort)(ReadMemory(Register[mem]) & 0xFF); + mem_read = (ushort)(ReadMemory(Register[mem]++) & 0xFF); + mem_read |= (ushort)(ReadMemory(Register[mem]) << 8); PendingCycles -= 10; TotalExecutedCycles += 10; } // Auto-increment the memory register if it does so on write. @@ -1833,8 +1833,8 @@ namespace BizHawk.Emulation.CPUs.CP1610 else { // Double Byte Data. - mem_read = (ushort)(ReadMemory(Register[mem]++) << 8); - mem_read |= (ushort)(ReadMemory(Register[mem]) & 0xFF); + mem_read = (ushort)(ReadMemory(Register[mem]++) & 0xFF); + mem_read |= (ushort)(ReadMemory(Register[mem]) << 8); PendingCycles -= 10; TotalExecutedCycles += 10; } // Auto-increment the memory register if it does so on write. @@ -1846,6 +1846,8 @@ namespace BizHawk.Emulation.CPUs.CP1610 Register[dest] = (ushort)result; break; } + if (FlagD == prev_FlagD) + FlagD = false; LogData(); } }