public void Debug(CPU cpu, byte [] RAM, string instruction) { string line = null; if (breakPoints[cpu.PC] == true) { Console.WriteLine("Break point: 0x{0:X}", cpu.PC); debugMode = true; } while ("n".Equals(line) == false && debugMode == true) { Console.WriteLine("waiting for input..."); line = Console.ReadLine(); if (line.Equals("p")) { PrintRegs(); } if (line.StartsWith("m")) { // m <beg> <size> string[] lineSplitted = line.Split(' '); if (lineSplitted.Length == 3) { ushort length = MemoryHelper.AddressResolver(lineSplitted[2]); ushort address = MemoryHelper.StringToAddressResolve(cpu, lineSplitted[1]); PrintRAM(RAM, address, length); } } if (line.Equals("q")) { PrintRAM(RAM, 0x100, 0x100); } if (line.Equals("i")) { Console.WriteLine(instruction); } if (line.Equals("r")) { debugMode = false; } if (line.StartsWith("b")) { if (line.Length == 1) { Console.WriteLine("Active breakpoints:"); for (int i = 0; i < 0x1000; ++i) { if (breakPoints[i] == true) { Console.Write("0x{0:X}|", i); } } Console.WriteLine(); } else { char[] delimiters = new char[] { ' ' }; string[] args = line.Split(delimiters); ushort breakpoint = MemoryHelper.AddressResolver(args[1]); breakPoints[breakpoint] = !breakPoints[breakpoint]; } } } nes.Execution.Set(); }