From 9f2bcf3318f4b3fe0da7918fc1c7c1b00bc95b31 Mon Sep 17 00:00:00 2001 From: brandman211 Date: Sun, 22 Jul 2012 18:08:10 +0000 Subject: [PATCH] -Fixed logging. --It now just builds a strings and writes on finalization. -Fixed up format strings. -As RegisterPC already increments upon reading the third decle, I now just store PC as the return address for jumping instead of PC + 1. --- BizHawk.Emulation/CPUs/CP1610/CP1610.cs | 40 ++++++++----------- BizHawk.Emulation/CPUs/CP1610/Disassembler.cs | 14 +++---- BizHawk.Emulation/CPUs/CP1610/Execute.cs | 8 ++-- .../Consoles/Intellivision/Intellivision.cs | 11 +---- 4 files changed, 29 insertions(+), 44 deletions(-) diff --git a/BizHawk.Emulation/CPUs/CP1610/CP1610.cs b/BizHawk.Emulation/CPUs/CP1610/CP1610.cs index c58b18fd81..772c551fd0 100644 --- a/BizHawk.Emulation/CPUs/CP1610/CP1610.cs +++ b/BizHawk.Emulation/CPUs/CP1610/CP1610.cs @@ -17,22 +17,15 @@ namespace BizHawk.Emulation.CPUs.CP1610 public Action WriteMemory; private bool logging = true; - private TextWriter log; - - public CP1610() - { - if (logging) - log = File.CreateText("log.txt"); - } + private string log = ""; ~CP1610() { - Close(); - } - - public void Close() - { - log.Close(); + using (StreamWriter write = new StreamWriter("log.txt")) + { + if (logging) + write.Write(log); + } } public void LogData() @@ -40,17 +33,16 @@ namespace BizHawk.Emulation.CPUs.CP1610 if (!logging) return; for (int register = 0; register <= 5; register++) - log.WriteLine("R" + register + " = {0:X4}", Register[register]); - log.WriteLine("SP = {0:X4}", RegisterSP); - log.WriteLine("PC = {0:X4}", RegisterPC); - log.WriteLine("S = {0:X4}", FlagS); - log.WriteLine("C = {0:X4}", FlagC); - log.WriteLine("Z = {0:X4}", FlagZ); - log.WriteLine("O = {0:X4}", FlagO); - log.WriteLine("I = {0:X4}", FlagI); - log.WriteLine("D = {0:X4}", FlagD); - log.WriteLine("------"); - log.WriteLine(); + log += string.Format("R{0:d} = {1:X4}\n", register, Register[register]); + log += string.Format("SP = {0:X4}\n", RegisterSP); + log += string.Format("PC = {0:X4}\n", RegisterPC); + log += string.Format("S = {0:X4}\n", FlagS); + log += string.Format("C = {0:X4}\n", FlagC); + log += string.Format("Z = {0:X4}\n", FlagZ); + log += string.Format("O = {0:X4}\n", FlagO); + log += string.Format("I = {0:X4}\n", FlagI); + log += string.Format("D = {0:X4}\n", FlagD); + log += "------\n"; } } } diff --git a/BizHawk.Emulation/CPUs/CP1610/Disassembler.cs b/BizHawk.Emulation/CPUs/CP1610/Disassembler.cs index c1a56d8620..b8194bb514 100644 --- a/BizHawk.Emulation/CPUs/CP1610/Disassembler.cs +++ b/BizHawk.Emulation/CPUs/CP1610/Disassembler.cs @@ -792,7 +792,7 @@ namespace BizHawk.Emulation.CPUs.CP1610 src = (byte)(opcode & 0x7); addr = ReadMemory((ushort)(pc + 1)); addrToAdvance = 2; - return "MVO R" + src + ", " + string.Format("${0:X4}", addr); + return string.Format("MVO R{0:d}, ${1:X4}", src, addr); case 0x248: case 0x249: case 0x24A: @@ -863,7 +863,7 @@ namespace BizHawk.Emulation.CPUs.CP1610 dest = (byte)(opcode & 0x7); addr = ReadMemory((ushort)(pc + 1)); addrToAdvance = 2; - return "MVI R" + dest + ", " + string.Format("${0:X4}", addr); + return string.Format("MVI R{0:d}, ${1:X4}", dest, addr); case 0x288: case 0x289: case 0x28A: @@ -934,7 +934,7 @@ namespace BizHawk.Emulation.CPUs.CP1610 dest = (byte)(opcode & 0x7); addr = ReadMemory((ushort)(pc + 1)); addrToAdvance = 2; - return "ADD R" + dest + ", " + string.Format("${0:X4}", addr); + return string.Format("ADD R{0:d}, ${1:X4}", dest, addr); case 0x2C8: case 0x2C9: case 0x2CA: @@ -1005,7 +1005,7 @@ namespace BizHawk.Emulation.CPUs.CP1610 mem = (byte)(opcode & 0x7); addr = ReadMemory((ushort)(pc + 1)); addrToAdvance = 2; - return "SUB R" + mem + ", " + string.Format("${0:X4}", addr); + return string.Format("SUB R{0:d}, ${1:X4}", mem, addr); case 0x308: case 0x309: case 0x30A: @@ -1076,7 +1076,7 @@ namespace BizHawk.Emulation.CPUs.CP1610 mem = (byte)(opcode & 0x7); addr = ReadMemory((ushort)(pc + 1)); addrToAdvance = 2; - return "CMP R" + mem + ", " + string.Format("${0:X4}", addr); + return string.Format("CMP R{0:d}, ${1:X4}", mem, addr); case 0x348: case 0x349: case 0x34A: @@ -1147,7 +1147,7 @@ namespace BizHawk.Emulation.CPUs.CP1610 mem = (byte)(opcode & 0x7); addr = ReadMemory((ushort)(pc + 1)); addrToAdvance = 2; - return "AND R" + mem + ", " + string.Format("${0:X4}", addr); + return string.Format("AND R{0:d}, ${1:X4}", mem, addr); case 0x388: case 0x389: case 0x38A: @@ -1218,7 +1218,7 @@ namespace BizHawk.Emulation.CPUs.CP1610 mem = (byte)(opcode & 0x7); addr = ReadMemory((ushort)(pc + 1)); addrToAdvance = 2; - return "XOR R" + mem + ", " + string.Format("${0:X4}", addr); + return string.Format("XOR R{0:d}, ${1:X4}", mem, addr); case 0x3C8: case 0x3C9: case 0x3CA: diff --git a/BizHawk.Emulation/CPUs/CP1610/Execute.cs b/BizHawk.Emulation/CPUs/CP1610/Execute.cs index b32c9bad71..1e87bb228d 100644 --- a/BizHawk.Emulation/CPUs/CP1610/Execute.cs +++ b/BizHawk.Emulation/CPUs/CP1610/Execute.cs @@ -43,8 +43,8 @@ namespace BizHawk.Emulation.CPUs.CP1610 while (PendingCycles > 0) { int addrToAdvance; - if (!logging) - log.WriteLine(Disassemble(RegisterPC, out addrToAdvance)); + if (logging) + log += Disassemble(RegisterPC, out addrToAdvance) + "\n"; int opcode = ReadMemory(RegisterPC++) & 0x3FF; switch (opcode) { @@ -76,7 +76,7 @@ namespace BizHawk.Emulation.CPUs.CP1610 addr = (ushort)(((decle2 << 8) & 0xFC00) | (decle3 & 0x3FF)); if (dest != 0x7) // Store the return address. - Register[dest] = (ushort)((RegisterPC + 1) & 0xFFFF); + Register[dest] = (ushort)(RegisterPC & 0xFFFF); // ff indicates how to affect the Interrupt (I) flag in the CP1610 switch (decle2 & 0x3) { @@ -1496,8 +1496,8 @@ namespace BizHawk.Emulation.CPUs.CP1610 case 0x3FF: throw new NotImplementedException(); } + LogData(); } - LogData(); } } } diff --git a/BizHawk.Emulation/Consoles/Intellivision/Intellivision.cs b/BizHawk.Emulation/Consoles/Intellivision/Intellivision.cs index cf3988a58e..b3a2b74c18 100644 --- a/BizHawk.Emulation/Consoles/Intellivision/Intellivision.cs +++ b/BizHawk.Emulation/Consoles/Intellivision/Intellivision.cs @@ -48,21 +48,14 @@ namespace BizHawk.Emulation.Consoles.Intellivision Cpu.ReadMemory = ReadMemory; Cpu.WriteMemory = WriteMemory; Cpu.RegisterPC = 0x1000; + Cpu.LogData(); CoreOutputComm = new CoreOutputComm(); } public void FrameAdvance(bool render) { - try - { - Cpu.Execute(999); // execute some cycles. this will do nothing useful until a memory mapper is created. - } - catch (Exception e) - { - Cpu.Close(); - throw e; - } + Cpu.Execute(999); // execute some cycles. this will do nothing useful until a memory mapper is created. }