Esempio n. 1
0
		public void Add (IRQHandler irqHandler)
		{
			if (irqHandlerCount >= MaxIRQHandlers)
				return;

			irqHandlers[irqHandlerCount++] = irqHandler;
		}
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        /// <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");
            }
        }
Esempio n. 4
0
        public void Add(IRQHandler irqHandler)
        {
            if (irqHandlerCount >= MaxIRQHandlers)
            {
                return;
            }

            irqHandlers[irqHandlerCount++] = irqHandler;
        }
Esempio n. 5
0
        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();
        }
Esempio n. 6
0
		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 ();
		}
Esempio n. 7
0
		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 ();
		}