private SimulationModel ExecuteTest(Register16Table reg, bool write) { var ob = OpcodeByte.New(x: 1, z: 3, q: (byte)(write ? 0: 1), p: (byte)reg); var cpuZ80 = new CpuZ80(); var buffer = write ? new byte[] { 0xED, ob.Value, AddressLo, AddressHi, 0, 0, 0 }: new byte[] { 0xED, ob.Value, AddressLo, AddressHi, 0, ExpectedLo, ExpectedHi }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); if (write) { if (reg == Register16Table.SP) { cpuZ80.Registers.SP = Expected; } else { cpuZ80.Registers[reg] = Expected; } } model.ClockGen.SquareWave(20); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }
private SimulationModel ExecuteTest(OpcodeByte ob, byte extension = 0) { var cpuZ80 = new CpuZ80(); var buffer = extension == 0 ? new byte[] { ob.Value, 0, 0, 0, 0, 0 } : new byte[] { extension, ob.Value, 0, 0, 0, 0 }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(sp: Stack); if (extension == 0xDD) { cpuZ80.Registers.IX = Expected; } else if (extension == 0xFD) { cpuZ80.Registers.IY = Expected; } else { cpuZ80.Registers.HL = Expected; } model.ClockGen.SquareWave(extension == 0 ? 19 : 23); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }
private static SimulationModel CreateModel() { var ob = OpcodeByte.New(x: 1, z: 6, y: 6); var cpuZ80 = new CpuZ80(); var model = cpuZ80.Initialize(new byte[] { ob.Value }); cpuZ80.FillRegisters(); return(model); }
public void ExAFAF() { var ob = OpcodeByte.New(x: 0, z: 0, y: 1); var cpuZ80 = new CpuZ80(); var model = cpuZ80.Initialize(new byte[] { ob.Value }); cpuZ80.FillRegisters(a: 0x55, a_a: 0xAA); model.ClockGen.SquareWave(4); cpuZ80.AssertRegisters(a: 0xAA, a_a: 0x55); }
public void ExDE_HL() { var ob = OpcodeByte.New(x: 3, z: 3, y: 5); var cpuZ80 = new CpuZ80(); var model = cpuZ80.Initialize(new byte[] { ob.Value }); cpuZ80.FillRegisters(de: 0x1234, hl: 0x9876); model.ClockGen.SquareWave(4); cpuZ80.AssertRegisters(hl: 0x1234, de: 0x9876); }
public void Nop() { var cpuZ80 = new CpuZ80(); var model = cpuZ80.Initialize(new byte[] { 0x00 }); cpuZ80.FillRegisters(pc: 0); model.ClockGen.SquareWave(4); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); cpuZ80.AssertRegisters(pc: 1); }
private CpuZ80 ExecuteTest(OpcodeByte ob, Action <CpuZ80> preTest) { var cpuZ80 = new CpuZ80(); var model = cpuZ80.Initialize(new[] { ob.Value }); cpuZ80.FillRegisters(); preTest(cpuZ80); model.ClockGen.SquareWave(4); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
private static SimulationModel ExecuteTest(OpcodeByte ob, byte value) { var cpuZ80 = new CpuZ80(); byte[] buffer = new byte[] { 0xCB, ob.Value, 0, 0, 0, value }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(hl: AddressHL); model.ClockGen.SquareWave(ob.X == 1 ? 12 : 15); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }
private void FillRegister(CpuZ80 cpu, Register8Table reg, ushort value) { switch (reg) { case Register8Table.B: case Register8Table.C: cpu.FillRegisters(bc: value); break; case Register8Table.D: case Register8Table.E: cpu.FillRegisters(de: value); break; case Register8Table.H: case Register8Table.L: cpu.FillRegisters(hl: value); break; case Register8Table.A: cpu.FillRegisters(a: (byte)value); break; } }
private SimulationModel ExecuteTest(OpcodeByte ob) { var cpu = new CpuZ80(); var model = cpu.Initialize(new byte[] { ob.Value }); cpu.FillRegisters(); model.ClockGen.SquareWave(4); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); cpu.AssertRegisters(); return(model); }
// TODO: make OUTIR/OUTDR tests that actually repeat. private SimulationModel ExecuteTest(OpcodeByte ob, Action <CpuZ80> preTest, bool isConditionMet) { var cpu = new CpuZ80(); var model = cpu.Initialize( new byte[] { 0xED, ob.Value, 0, 0, Value, 0, 0 }, new byte[] { 0, 0, 0, 0, 0, 0, 0 }); cpu.FillRegisters(); preTest(cpu); model.ClockGen.SquareWave(isConditionMet ? 16 : 21); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }
private static SimulationModel ExecuteTest(OpcodeByte ob, byte value, Action <CpuZ80> preTest, byte extension) { var cpuZ80 = new CpuZ80(); byte[] buffer = new byte[] { extension, 0xCB, Offset, ob.Value, value }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); preTest(cpuZ80); model.ClockGen.SquareWave(ob.X == 1 ? 20 : 23); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }
private static CpuZ80 ExecuteTest(OpcodeByte ob, bool carry) { var cpuZ80 = new CpuZ80(); byte[] buffer = new byte[] { ob.Value }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); cpuZ80.Registers.Flags.C = carry; model.ClockGen.SquareWave(4); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
private static CpuZ80 ExecuteTest(OpcodeByte ob, Action <SimulationModel> fnPreTest) { var cpuZ80 = new CpuZ80(); byte[] buffer = new byte[] { ob.Value }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); fnPreTest(model); model.ClockGen.SquareWave(4); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
public void Exx() { var ob = OpcodeByte.New(x: 3, z: 1, q: 1, p: 1); var cpuZ80 = new CpuZ80(); var model = cpuZ80.Initialize(new byte[] { ob.Value }); cpuZ80.FillRegisters(bc: 0x1234, de: 0x5678, hl: 0x9ABC, a_bc: 0x4321, a_de: 8765, a_hl: 0xCBA9); model.ClockGen.SquareWave(4); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); cpuZ80.AssertRegisters(a_bc: 0x1234, a_de: 0x5678, a_hl: 0x9ABC, bc: 0x4321, de: 8765, hl: 0xCBA9); }
private static CpuZ80 ExecuteTest(OpcodeByte ob, Action <CpuZ80> preTest, byte extension = 0) { var cpuZ80 = new CpuZ80(); var buffer = extension == 0 ? new byte[] { ob.Value, 0, 0, 0, 0, Value } : new byte[] { extension, ob.Value, Offset, 0, Value, 0 }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); preTest(cpuZ80); model.ClockGen.SquareWave(extension == 0 ? 7 : 19); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
private static CpuZ80 ExecuteTest(OpcodeByte ob, byte extension = 0) { var cpuZ80 = new CpuZ80(); byte[] buffer = (extension == 0) ? new byte[] { ob.Value } : new byte[] { extension, ob.Value }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); model.ClockGen.SquareWave(extension == 0 ? 4 : 8); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
private static SimulationModel ExecuteTest(Action <SimulationModel> preTest, byte extension = 0) { var ob = OpcodeByte.New(z: 6, y: 6); var cpuZ80 = new CpuZ80(); var buffer = extension == 0 ? new byte[] { ob.Value, Value, 0, 0, 0, 0 } : new byte[] { extension, ob.Value, unchecked ((byte)Offset), Value, 0, 0, 0 }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); preTest(model); model.ClockGen.SquareWave(extension == 0 ? 10 : 19); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }
private static CpuZ80 ExecuteTest(OpcodeByte rst) { var cpuZ80 = new CpuZ80(); var model = cpuZ80.Initialize(null); var writer = new MemoryWriter <BusData16, BusData8>(model.Memory); writer.Fill(0x48, new BusData8(0)); writer[new BusData16(0)] = new BusData8(rst.Value); cpuZ80.FillRegisters(); model.ClockGen.SquareWave(11); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
private static CpuZ80 ExecuteTest(byte b, long cycles) { var djnz = OpcodeByte.New(y: 2); var d = unchecked ((byte)-2); var cpuZ80 = new CpuZ80(); var model = cpuZ80.Initialize(new byte[] { djnz.Value, d }); var bc = (ushort)((b << 8) | CpuZ80TestExtensions.MagicValue); cpuZ80.FillRegisters(bc: bc); model.ClockGen.SquareWave(cycles); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
private CpuZ80 ExecuteTest(byte value) { var ob = OpcodeByte.New(x: 1, z: 4, y: 0); var cpuZ80 = new CpuZ80(); byte[] buffer = new byte[] { 0xED, ob.Value }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); cpuZ80.Registers.A = value; model.ClockGen.SquareWave(8); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
private static CpuZ80 ExecuteTest(OpcodeByte ob, bool c = false, bool z = false) { var d = unchecked ((byte)-2); var cpuZ80 = new CpuZ80(); var model = cpuZ80.Initialize(new byte[] { ob.Value, d }); cpuZ80.Registers.Flags.Z = z; cpuZ80.Registers.Flags.C = c; cpuZ80.FillRegisters(); model.ClockGen.SquareWave(12); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
private SimulationModel ExecuteTest(OpcodeByte ob, Action <CpuZ80> preTest, byte extension = 0) { var cpu = new CpuZ80(); var buffer = extension == 0 ? new byte[] { ob.Value, IoAddress } : new byte[] { extension, ob.Value }; var model = cpu.Initialize(buffer, new byte[] { 0, 0, 0, 0, 0 }); cpu.FillRegisters(); preTest(cpu); model.ClockGen.SquareWave(extension == 0 ? 11 : 12); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }
private static CpuZ80 ExecuteTest(Register16Table reg16, bool carry) { var ob = OpcodeByte.New(x: 1, z: 2, q: 0, p: (byte)reg16); var cpuZ80 = new CpuZ80(); byte[] buffer = new byte[] { 0xED, ob.Value }; var model = cpuZ80.Initialize(buffer); cpuZ80.Registers.Flags.C = carry; cpuZ80.FillRegisters(hl: Value); cpuZ80.Registers[reg16] = ValueToSub; model.ClockGen.SquareWave(15); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
private static CpuZ80 ExecuteTest(OpcodeByte call, Action <Registers> preTest, bool alt = false) { var cpuZ80 = new CpuZ80(); var model = cpuZ80.Initialize(new[] { call.Value, AddresssLSB, AddresssMSB }); cpuZ80.FillRegisters(); if (preTest != null) { preTest(cpuZ80.Registers); } model.ClockGen.SquareWave(alt ? 11 : 17); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
private static SimulationModel ExecuteTest(OpcodeByte ob, Action <CpuZ80> preTest, byte extension = 0) { var regA = ob.Q == 3; var cpuZ80 = new CpuZ80(); byte[] buffer = (extension == 0) ? new byte[] { ob.Value, AddressLo, 0, 0, 0, 0, 0 } : new byte[] { extension, ob.Value, AddressLo, 0, 0, 0, 0 }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); preTest(cpuZ80); model.ClockGen.SquareWave(extension == 0 ? regA ? 13 : 16 : 20); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }
private static SimulationModel ExecuteTest(OpcodeByte ob, byte value, Action <CpuZ80> preTest, byte extension = 0, byte group = 0xCB) { var cpuZ80 = new CpuZ80(); byte[] buffer = extension == 0 ? new byte[] { group, ob.Value, 0, 0, 0, value }: new byte[] { extension, group, ob.Value, Offset, 0, 0, value }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); preTest(cpuZ80); long clocks = group == 0xCB ? 15 : 18; if (extension != 0) { clocks += 8; } model.ClockGen.SquareWave(clocks); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }