public void DumpCpu() { Console.WriteLine(_myZ80.DumpState()); }
private static void Main(string[] args) { var ram = new byte[65536]; Array.Clear(ram, 0, ram.Length); var inp = File.ReadAllBytes("48.rom"); if (inp.Length != 16384) { throw new InvalidOperationException("Invalid 48.rom file"); } Array.Copy(inp, ram, 16384); var myZ80 = new Z80(new Memory(ram, 16384), new SamplePorts()); Console.Clear(); //var counter = 0; while (!myZ80.Halt) { myZ80.Parse(); //counter++; //if (counter % 1000 == 1) //{ // if (Console.KeyAvailable) // break; // var registers = myZ80.GetState(); // Console.WriteLine($"0x{(ushort)(registers[25] + (registers[24] << 8)):X4}"); //} } Console.WriteLine(Environment.NewLine + myZ80.DumpState()); for (var i = 0; i < 0x80; i++) { if (i % 16 == 0) { Console.Write("{0:X4} | ", i); } Console.Write("{0:x2} ", ram[i]); if (i % 8 == 7) { Console.Write(" "); } if (i % 16 == 15) { Console.WriteLine(); } } Console.WriteLine(); for (var i = 0x4000; i < 0x4100; i++) { if (i % 16 == 0) { Console.Write("{0:X4} | ", i); } Console.Write("{0:x2} ", ram[i]); if (i % 8 == 7) { Console.Write(" "); } if (i % 16 == 15) { Console.WriteLine(); } } }
public static void Main(string[] args) { Console.WriteLine("Loading Breakpoints"); LinkedList <Int16> breakpointList = new LinkedList <Int16>(); try { StreamReader breakpointsFileReader = new StreamReader(File.OpenRead("breakpoints")); while (!breakpointsFileReader.EndOfStream) { breakpointList.AddLast(Int16.Parse(breakpointsFileReader.ReadLine())); } } catch (System.Exception) { Console.WriteLine("Unable to read file 'breakpoints'"); } Console.WriteLine("Initializing memory"); var ram = new byte[65536]; Array.Clear(ram, 0, ram.Length); Console.WriteLine("Loading memory"); try { File.ReadAllBytes("code.bin").CopyTo(ram, 0); } catch (System.Exception) { Console.WriteLine("ERROR: Unable to read code.bin"); Console.WriteLine("Press RETURN to exit."); while (Console.Read() == -1) { } return; } var mem = new Memory(ram, 0); Console.WriteLine("Initializing I/O ports"); var ports = new SimplePorts(); Console.WriteLine("Initializing CPU"); var cpu = new Z80(mem, ports); Console.WriteLine("Starting CPU" + Environment.NewLine); Console.WriteLine("Press 'T' to terminate emulation"); Console.WriteLine("Press 'S' to single step and 'R' to run continuously" + Environment.NewLine); ConsoleKeyInfo keystroke; bool singleStep = true; bool running = true; int curPC = 0; while (running) { curPC = (cpu.GetState()[24] * 256) + cpu.GetState()[25]; foreach (int i in breakpointList) { if (i == curPC) { Console.WriteLine("Breakpoint hit, pausing"); singleStep = true; } } if (singleStep) { Console.WriteLine(cpu.DumpState()); keystroke = Console.ReadKey(true); if (keystroke.Key == ConsoleKey.S) { Console.WriteLine("Single stepping" + Environment.NewLine); singleStep = true; } else if (keystroke.Key == ConsoleKey.R) { Console.WriteLine("Running free" + Environment.NewLine); singleStep = false; } else if (keystroke.Key == ConsoleKey.T) { Console.WriteLine("Terminating emulation" + Environment.NewLine); break; } } cpu.Parse(); if (cpu.Halt) { Console.WriteLine("Halt executed, pausing simulation" + Environment.NewLine); singleStep = true; } } Console.WriteLine("Press RETURN to exit."); while (Console.Read() == -1) { } }