示例#1
0
        public void DecrementIndirect()
        {
            _cpu.Registers[5] = 0xC0; // H
            _cpu.Registers[6] = 0x12; // L = 0xC012

            _cpu.WriteMemory(0xC012, 0xA0);
            _cpu.WriteMemory(0xC013, 0x10);
            _cpu.WriteMemory(0xC014, 0x00);
            _cpu.WriteMemory(0xC015, 0x01);

            _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress + 0] = 0x35;
            _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress + 1] = 0x35;
            _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress + 2] = 0x35;
            _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress + 3] = 0x35;

            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 1, 12, FlagRegister.Carry | FlagRegister.HalfCarry | FlagRegister.NSubstract);
            Assert.AreEqual((byte)0x9F, _cpu.ResolveMemory(0xC012));

            _cpu.Registers[6] = 0x13;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 2, 24, FlagRegister.Carry | FlagRegister.NSubstract | FlagRegister.HalfCarry);
            Assert.AreEqual((byte)0x0F, _cpu.ResolveMemory(0xC013));

            _cpu.Registers[6] = 0x14;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 3, 36, FlagRegister.Carry | FlagRegister.HalfCarry | FlagRegister.NSubstract);
            Assert.AreEqual((byte)0xFF, _cpu.ResolveMemory(0xC014));

            _cpu.Registers[6] = 0x15;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 4, 48, FlagRegister.Carry | FlagRegister.Zero | FlagRegister.NSubstract);
            Assert.AreEqual((byte)0x00, _cpu.ResolveMemory(0xC015));
        }
示例#2
0
        public void StoreWordIndirectHL()
        {
            _cpu.Registers[5] = 0xC0;
            _cpu.Registers[6] = 0x11;

            _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress]     = 0x36;
            _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress + 1] = 0xCC;

            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 2, 12UL);
            Assert.AreEqual(0xCC, _cpu.ResolveMemory(0xC011));
        }
示例#3
0
        private static void UpdateConsole()
        {
            if (_cpu.PC == _breakpoint)
            {
                _step = true;
            }

            if (_step)
            {
                Console.Clear();
                Console.WriteLine("AF= {0:X2}{1:X2}", _cpu.Registers[0], (byte)_cpu.F);
                Console.WriteLine("BC= {0:X2}{1:X2}", _cpu.Registers[1], _cpu.Registers[2]);
                Console.WriteLine("DE= {0:X2}{1:X2}", _cpu.Registers[3], _cpu.Registers[4]);
                Console.WriteLine("HL= {0:X2}{1:X2}", _cpu.Registers[5], _cpu.Registers[6]);
                Console.WriteLine("SP= {0:X4}", _cpu.SP);
                Console.WriteLine("PC= {0:X4}", _cpu.PC);

                if (_cpu.PC == _breakpoint)
                {
                    Console.WriteLine("Breakpoint hit!");
                }

                var info = Console.ReadKey(true);

                switch (info.Key)
                {
                case ConsoleKey.M:     //[M]emory
                {
                    Console.Write("Memory address: ");
                    var mem  = Console.ReadLine();
                    var addr = Convert.ToUInt16(mem, 16);
                    Console.WriteLine(_cpu.ResolveMemory(addr));
                    Console.ReadKey(true);
                    break;
                }

                case ConsoleKey.B:     // [B]reakpoint
                {
                    Console.Write("Breakpoint address: ");
                    var mem = Console.ReadLine();
                    _breakpoint = Convert.ToUInt16(mem, 16);
                    _step       = false;
                    break;
                }

                case ConsoleKey.R:     // [R]un
                    _step = false;
                    break;

                case ConsoleKey.T:     // [T]ime
                    Console.Write("Benchmark: ");
                    var ben = Console.ReadLine();
                    TestLength(Convert.ToUInt64(ben));
                    Console.WriteLine("Press any key to resume debugger...");
                    Console.ReadKey(true);
                    break;

                case ConsoleKey.E:     // [E]xit
                    _running = false;
                    break;
                }
            }
        }