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) { var cpuZ80 = new CpuZ80(); byte[] buffer = new byte[] { 0xED, ob.Value }; var model = cpuZ80.Initialize(buffer); cpuZ80.FillRegisters(); preTest(cpuZ80); model.ClockGen.SquareWave(9); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(cpuZ80); }
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 SimulationModel ExecuteTest(OpcodeByte push, Action <SimulationModel> preTest, byte extension = 0) { var cpuZ80 = new CpuZ80(); var buffer = (extension == 0) ? new byte[] { push.Value, 0, 0, 0, 0, 0 } : new byte[] { extension, push.Value, 0, 0, 0, 0 }; var model = cpuZ80.Initialize(buffer); preTest(model); model.ClockGen.SquareWave(extension == 0 ? 11 : 15); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }
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(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); }
public void InterruptIsLatched() { var cpu = new CpuZ80(); cpu.Registers.Interrupt.IFF1 = true; var interruptProvider = cpu.NonMaskableInterrupt.CreateConnection(); var model = cpu.Initialize(new byte[] { 0 }); model.ClockGen.SquareWave(2); interruptProvider.Write(DigitalLevel.NegEdge); model.ClockGen.SquareWave(2); // into nmi model.ClockGen.SquareWave(11); // nmi turns off interrupts cpu.Registers.Interrupt.IFF1.Should().BeFalse(); }
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); }
public void IntEI_AcceptInterrupt_TurnsOffIFF1() { var cpu = new CpuZ80(); cpu.Registers.Interrupt.IFF1 = true; var interruptProvider = cpu.Interrupt.CreateConnection(); var model = cpu.Initialize(new byte[] { 0 }); // nop model.ClockGen.SquareWave(2); interruptProvider.Write(DigitalLevel.Low); model.ClockGen.SquareWave(2); // start interrupt model.ClockGen.SquareWave(2); // interrupt accepted turns off IFF1 cpu.Registers.Interrupt.IFF1.Should().BeFalse(); }
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 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 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 SimulationModel ExecuteTest(OpcodeByte ob, Action <CpuZ80> preTest, bool isConditionMet) { var cpu = new CpuZ80(); var model = cpu.Initialize( new byte[] { 0xED, ob.Value, 0, 0, Value1, Value2, 0, 0, 0, 0, 0 }); cpu.FillRegisters(); preTest(cpu); long cycles = 16; if (!isConditionMet) { cycles += 21; } model.ClockGen.SquareWave(cycles); Console.WriteLine(model.LogicAnalyzer.ToWaveJson()); return(model); }
private static SimulationModel ExecuteTest(OpcodeByte ret, Action <SimulationModel> preTest, bool conditionMet, byte extension = 0) { var cpuZ80 = new CpuZ80(); var buffer = (extension == 0) ? new byte[] { ret.Value, 0, 0, 0, 0x55, 0xAA } : new byte[] { extension, ret.Value, 0, 0, 0x55, 0xAA }; var model = cpuZ80.Initialize(buffer); model.Cpu.FillRegisters(sp: Stack); preTest(model); var def = OpcodeDefinition.Find(ret, extension == 0 ? null : new OpcodeByte(extension)); model.ClockGen.SquareWave(conditionMet ? def.Cycles.Sum() : def.AltCycles.Sum()); 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); }