public void Add (IRQHandler irqHandler) { if (irqHandlerCount >= MaxIRQHandlers) return; irqHandlers[irqHandlerCount++] = irqHandler; }
public FloppyDiskDriver(ushort ioBase) { base.name = "FDC_0x" + ioBase.ToString("X"); base.parent = null; // no parent base.deviceStatus = DeviceStatus.Initializing; this.ioBase = ioBase; floppyDrives = new FloppyDriveInfo[DrivesPerController]; floppyMedia = new FloppyMediaInfo[DrivesPerController]; trackCache = new TrackCache[DrivesPerController]; lastSeek = new LastSeek[DrivesPerController]; for (int drive = 0; drive < DrivesPerController; drive++) { trackCache[drive].buffer = new byte[FDC.MaxBytesPerTrack]; } ControllerCommands = base.CreateIOPort(ioBase); StatusPort = base.CreateIOPort(ioBase, 2); DataPort = base.CreateIOPort(ioBase, 3); ConfigPort = base.CreateIOPort(ioBase, 5); CMOSComand = base.CreateIOPort(0x70); CMOSResponse = base.CreateIOPort(0x71); floppyDMA = base.CreateDMAChannel(2); floppyIRQ = base.CreateIRQHandler(6); this.Initialize(); }
/// <summary> /// Sets an IRQ handler /// </summary> /// <param name="num">The IRQ number</param> /// <param name="handler">The handler</param> public static void SetHandler(uint num, IRQHandler handler) { // No entry yet? handlers[num] = new IRQHandler[3]; // Add entry to handler bool found = false; for (int i = 0; i < IRQ_MAX_SHARING; i++) { if (handlers[num][i] == null) { handlers[num][i] = handler; found = true; break; } } if (!found) { Console.Write("[IRQ] Couldn't set a handler for IRQ "); Console.WriteNum((int)num); Console.WriteLine(" because the maximum amount of sharing has been reached for this IRQ number"); } }
public void Add(IRQHandler irqHandler) { if (irqHandlerCount >= MaxIRQHandlers) { return; } irqHandlers[irqHandlerCount++] = irqHandler; }
public SerialDevice(ushort ioBase, byte irq) { base.name = "COM_0x" + ((uint)ioBase).ToString("X"); base.parent = null; // no parent base.deviceStatus = DeviceStatus.Initializing; this.ioBase = ioBase; this.fifoBuffer = new byte[FIFOSize]; this.fifoStart = 0; this.fifoEnd = 0; // Receive Buffer Register (read only) RBRBase = base.CreateIOPort(ioBase); // Transmitter Holding Register (write only) THRBase = base.CreateIOPort(ioBase); // Interrupt Enable Register IERBase = base.CreateIOPort(ioBase, 1); // Divisor Latch (LSB and MSB) DLLBase = base.CreateIOPort(ioBase); DLMBase = base.CreateIOPort(ioBase, 1); // Interrupt Identification Register (read only) IIRBase = base.CreateIOPort(ioBase, 2); // FIFO Control Register (write only, 16550+ only) FCRBase = base.CreateIOPort(ioBase, 2); // Line Control Register LCRBase = base.CreateIOPort(ioBase, 3); // Modem Control Register MCRBase = base.CreateIOPort(ioBase, 4); // Line Status Register LSRBase = base.CreateIOPort(ioBase, 5); // Modem Status Register MSRBase = base.CreateIOPort(ioBase, 6); // Scratch Register (16450+ and some 8250s, special use with some boards) SCRBase = base.CreateIOPort(ioBase, 7); serialIRQ = base.CreateIRQHandler(irq); this.Initialize(); }
public FloppyDiskDriver (ushort ioBase) { base.name = "FDC_0x" + ioBase.ToString ("X"); base.parent = null; // no parent base.deviceStatus = DeviceStatus.Initializing; this.ioBase = ioBase; floppyDrives = new FloppyDriveInfo[DrivesPerController]; floppyMedia = new FloppyMediaInfo[DrivesPerController]; trackCache = new TrackCache[DrivesPerController]; lastSeek = new LastSeek[DrivesPerController]; for (int drive = 0; drive < DrivesPerController; drive++) trackCache[drive].buffer = new byte[FDC.MaxBytesPerTrack]; ControllerCommands = base.CreateIOPort (ioBase); StatusPort = base.CreateIOPort (ioBase, 2); DataPort = base.CreateIOPort (ioBase, 3); ConfigPort = base.CreateIOPort (ioBase, 5); CMOSComand = base.CreateIOPort (0x70); CMOSResponse = base.CreateIOPort (0x71); floppyDMA = base.CreateDMAChannel (2); floppyIRQ = base.CreateIRQHandler (6); this.Initialize (); }
public SerialDevice (ushort ioBase, byte irq) { base.name = "COM_0x" + ((uint)ioBase).ToString ("X"); base.parent = null; // no parent base.deviceStatus = DeviceStatus.Initializing; this.ioBase = ioBase; this.fifoBuffer = new byte[FIFOSize]; this.fifoStart = 0; this.fifoEnd = 0; // Receive Buffer Register (read only) RBRBase = base.CreateIOPort (ioBase); // Transmitter Holding Register (write only) THRBase = base.CreateIOPort (ioBase); // Interrupt Enable Register IERBase = base.CreateIOPort (ioBase, 1); // Divisor Latch (LSB and MSB) DLLBase = base.CreateIOPort (ioBase); DLMBase = base.CreateIOPort (ioBase, 1); // Interrupt Identification Register (read only) IIRBase = base.CreateIOPort (ioBase, 2); // FIFO Control Register (write only, 16550+ only) FCRBase = base.CreateIOPort (ioBase, 2); // Line Control Register LCRBase = base.CreateIOPort (ioBase, 3); // Modem Control Register MCRBase = base.CreateIOPort (ioBase, 4); // Line Status Register LSRBase = base.CreateIOPort (ioBase, 5); // Modem Status Register MSRBase = base.CreateIOPort (ioBase, 6); // Scratch Register (16450+ and some 8250s, special use with some boards) SCRBase = base.CreateIOPort (ioBase, 7); serialIRQ = base.CreateIRQHandler (irq); this.Initialize (); }