Example #1
0
        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
        }
Example #2
0
        public i8086ExecutionUnit(i8086BusInterfaceUnit bus)
        {
            _bus = bus;
            Halted = false;

            _inputDevices = new Dictionary<int, IInputDevice>();
            _outputDevices = new Dictionary<int, IOutputDevice>();

            InitOpCodeTable();
        }
Example #3
0
        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++));
        }
Example #4
0
        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");
        }
Example #5
0
 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);
 }
Example #6
0
        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
        }
Example #7
0
 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);
 }