Example #1
0
        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;
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }
Example #4
0
 public PIC8259()
 {
     controllers    = new PIController[2];
     controllers[0] = new PIController();
     controllers[1] = new PIController();
 }