Example #1
0
 public void DumpCpu()
 {
     Console.WriteLine(_myZ80.DumpState());
 }
Example #2
0
        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();
                }
            }
        }
Example #3
0
        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)
            {
            }
        }