Exemple #1
0
        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();
        }