public void Write(ushort addr, uint value, int size) { PIController controller = null; switch (addr) { case 0x20: case 0x21: controller = controllers[0]; break; case 0xa0: case 0xa1: controller = controllers[1]; break; } Debug.Assert(controller != null, "controller != null"); if (!controller.Init) { controller.ProcessICW((byte)value); } else if (addr % 0x10 == 0) { if (value == 0x20) { controller.EOI(); } controller.CommandRegister = (byte)value; } else { controller.MaskRegister = (byte)value; } }
public uint Read(ushort addr, int size) { PIController controller = null; switch (addr) { case 0x20: case 0x21: controller = controllers[0]; break; case 0xa0: case 0xa1: controller = controllers[1]; break; } Debug.Assert(controller != null, "controller != null"); if ((controller.CommandRegister & 0x3) == 0x3) { return(controller.InServiceRegister); } return(addr % 10 == 0 ? controller.StatusRegister : controller.DataRegister); }
public bool RequestInterrupt(byte irq) { PIController controller = irq < 8 ? controllers[0] : controllers[1]; if (((controller.MaskRegister >> irq & 0x1)) != 0) { return(false); } return(controller.RequestInterrupt(irq)); }
public PIC8259() { controllers = new PIController[2]; controllers[0] = new PIController(); controllers[1] = new PIController(); }