public void Reset() { _interrupts = new ConcurrentQueue <byte>(); _bus = new i8086BusInterfaceUnit(); _bus.LoadBIOS(File.ReadAllBytes("Chipset\\pcxtbios.bin")); //_bus.LoadROM(File.ReadAllBytes("Chipset\\ide_xt.bin"), 0xd0000); //_bus.LoadROM(File.ReadAllBytes("Chipset\\rombasic.bin"), 0xf6000); //_bus.LoadROM(File.ReadAllBytes("Chipset\\videorom.bin"), 0xc0000); _eu = new i8086ExecutionUnit(_bus); // 0x00 - 0x0f: DMA Chip 8237A-5 // 0x20 - 0x21: Interrupt 8259A Init8259(); // 0x40 - 0x43: Timer 8253 Init8253(); // 0x60 - 0x63: PPI 8255 (speaker) // 0x80 - 0x83: DMA page registers // 0xa0 - 0xaf: NMI Mask Register // 0x200 - 0x20f: Game Control // 0x210 - 0x207: Expansion Unit // 0x220 - 0x24f: Reserved // 0x3bc: IBM Monochrome Display & Printer Adapter // 0x378: Printer Adapter }
public i8086ExecutionUnit(i8086BusInterfaceUnit bus) { _bus = bus; Halted = false; _inputDevices = new Dictionary<int, IInputDevice>(); _outputDevices = new Dictionary<int, IOutputDevice>(); InitOpCodeTable(); }
public void TestInit() { i8086BusInterfaceUnit bus = new i8086BusInterfaceUnit(0, 0, new byte[] { 0x05, 0x10, 0x15 }); int i = 0; Assert.AreEqual(0x05, bus.NextIP(), string.Format("NextIP failed {0}",i++)); Assert.AreEqual(0x10, bus.NextIP(), string.Format("NextIP failed {0}", i++)); Assert.AreEqual(0x15, bus.NextIP(), string.Format("NextIP failed {0}", i++)); bus = new i8086BusInterfaceUnit(0x100, 0x200, new byte[] { 0x20, 0x25, 0x30 }); Assert.AreEqual(0x20, bus.NextIP(), string.Format("NextIP failed {0}", i++)); Assert.AreEqual(0x25, bus.NextIP(), string.Format("NextIP failed {0}", i++)); Assert.AreEqual(0x30, bus.NextIP(), string.Format("NextIP failed {0}", i++)); }
public void TestGetAndSave() { i8086BusInterfaceUnit bus = new i8086BusInterfaceUnit(0x100, 0x200, new byte[] { 0x05, 0x10, 0x15 }); byte offset = 0x05; byte value8 = 0xaa; ushort value16 = 0x5f02; bus.DS = 0x300; bus.SaveData8(offset, value8); Assert.AreEqual(value8, bus.GetData8(offset), "GetData8 failed"); bus.SaveData16(offset + 1, value16); Assert.AreEqual(value16, bus.GetData16(offset + 1), "GetData16 failed"); }
public void Boot(byte[] program) { // For now we will hard code the BIOS to start at a particular code segment. _bus = new i8086BusInterfaceUnit(0x0000, 0x0100, program); _eu = new i8086ExecutionUnit(_bus); }
public void Reset() { _interrupts = new ConcurrentQueue<byte>(); _bus = new i8086BusInterfaceUnit(); _bus.LoadBIOS(File.ReadAllBytes("Chipset\\pcxtbios.bin")); //_bus.LoadROM(File.ReadAllBytes("Chipset\\ide_xt.bin"), 0xd0000); //_bus.LoadROM(File.ReadAllBytes("Chipset\\rombasic.bin"), 0xf6000); //_bus.LoadROM(File.ReadAllBytes("Chipset\\videorom.bin"), 0xc0000); _eu = new i8086ExecutionUnit(_bus); // 0x00 - 0x0f: DMA Chip 8237A-5 // 0x20 - 0x21: Interrupt 8259A Init8259(); // 0x40 - 0x43: Timer 8253 Init8253(); // 0x60 - 0x63: PPI 8255 (speaker) // 0x80 - 0x83: DMA page registers // 0xa0 - 0xaf: NMI Mask Register // 0x200 - 0x20f: Game Control // 0x210 - 0x207: Expansion Unit // 0x220 - 0x24f: Reserved // 0x3bc: IBM Monochrome Display & Printer Adapter // 0x378: Printer Adapter }