internal void LoadRow(DataRow row, CPU cpu, Memory memory, GameBoy gameboy) { // We load the Registers cpu.Registers.A = GetByte(row["Ai"]); cpu.Registers.F = GetByte(row["Fi"]); cpu.Registers.B = GetByte(row["Bi"]); cpu.Registers.C = GetByte(row["Ci"]); cpu.Registers.D = GetByte(row["Di"]); cpu.Registers.E = GetByte(row["Ei"]); cpu.Registers.H = GetByte(row["Hi"]); cpu.Registers.L = GetByte(row["Li"]); cpu.Registers.PC = GetUShort(row["PCi"]); cpu.Registers.SP = GetUShort(row["SPi"]); // We load the rom ushort memoryAddress = 0x0000; int columnCount = row.Table.Columns.Count; int romColumnIndex = row.Table.Columns["ROM"].Ordinal; // Create a dummy cartridge var cartridgeData = new byte[columnCount - romColumnIndex]; for (int columnIndex = romColumnIndex; columnIndex < columnCount; columnIndex++, memoryAddress++) { var element = row[columnIndex]; if (element is System.DBNull) { break; } var value = Convert.ToByte((String)element, 16); cartridgeData[memoryAddress] = value; } gameboy.LoadCartridge("test", cartridgeData); }
public Disassembler(CPU cpu, MemorySpace.Memory memory) { _cpu = cpu; _memory = memory; Reset(); }
internal MemoryHandler(GameBoy gameboy) { this.gameboy = gameboy; this.memory = (Memory)gameboy.Memory; this.cartridge = (Cartridge.Cartridge)gameboy.Cartridge; this.cpu = (CPU)gameboy.CPU; this.display = (Display)gameboy.Display; this.apu = (APU)gameboy.APU; }
/// <summary> /// Class constructor. /// Initializes cpu and memory. /// </summary> public GameBoy() { _state.Run = false; _stopwatch = new Stopwatch(); _memory = new MemorySpace.Memory(); _cpu = new CPUSpace.CPU(this._memory); _interruptController = this._cpu._interruptController; _display = new Display(this._interruptController, this._memory); _apu = new AudioSpace.APU(this, this._memory, 44000, 2, 2); _serial = new SerialSpace.SerialController(this._interruptController, this._memory); _disassembler = new Disassembler(_cpu, _memory); // Events _cpu.BreakpointFound += BreakpointHandler; _cpu.InterruptHappened += InterruptHandler; _display.FrameReady += FrameReadyHandler; InternalReset(false); }
internal void TestFlagsAndMemory(DataRow row, CPU cpu) { var testName = (String)row["Test"]; // We test the flags Assert.AreEqual<byte>(GetByte(row["Af"]), cpu.Registers.A, testName + " Register A"); Assert.AreEqual<byte>(GetByte(row["Ff"]), cpu.Registers.F, testName + " Register F"); Assert.AreEqual<byte>(GetByte(row["Bf"]), cpu.Registers.B, testName + " Replace B"); Assert.AreEqual<byte>(GetByte(row["Cf"]), cpu.Registers.C, testName + " Replace C"); Assert.AreEqual<byte>(GetByte(row["Df"]), cpu.Registers.D, testName + " Replace D"); Assert.AreEqual<byte>(GetByte(row["Ef"]), cpu.Registers.E, testName + " Replace E"); Assert.AreEqual<byte>(GetByte(row["Hf"]), cpu.Registers.H, testName + " Replace H"); Assert.AreEqual<byte>(GetByte(row["Lf"]), cpu.Registers.L, testName + " Replace L"); Assert.AreEqual<ushort>(GetUShort(row["PCf"]), cpu.Registers.PC, testName + " PC"); Assert.AreEqual<ushort>(GetUShort(row["SPf"]), cpu.Registers.SP, testName + " SP"); // We test the memory address var testMemoryAddress = GetUShort(row["TestAddr"]); var testValue = GetByte(row["TestValue"]); Assert.AreEqual<byte>( cpu._memory.Read(testMemoryAddress), testValue, testName + " Memory Test"); }