DOS Days

I/O Addresses, IRQs and DMA Channels Explained

When configuring expansion cards in a PC, these cards tend to have three properties that must be set correctly in order for the card to function. These are:

  • I/O Address (Input/Output address)
  • IRQ (Interrupt Request line)
  • DMA Channel (Direct Memory Access channel)

Since the introduction of 'Plug & Play' (also sometimes abbreviated to "PnP"), these settings are largely handled for us by the computer's BIOS and/or operating system. But for anyone dabbling with older, non-PnP hardware, it is very helpful to understand what these terms mean and how to use them in your own system.

IRQ

The Interrupt Request line is a physical line from the card to the CPU through which to send interrupt signals - in others words, when the device needs the immediate attention of the CPU it triggers an 'interrupt'. Typically, each expansion card needs to have a dedicated IRQ line through which it can "interrupt" the microprocessor when it needs to. There are usually 16 IRQ lines (from 0-15), of which many are reserved by the system. Here is the list of IRQ lines and their assignment in most AT through Pentium computers:

IRQ Used By
0 System Timer
1 Keyboard Controller
2 (Tied to IRQs 8 thru 15)
3 COM2* or Sound Card
4 COM1*
5 LPT2* or Sound Card
6 Floppy disk controller
7 LPT1*
IRQ Used By
8 Real-time Clock
9 Substitutes for IRQ2
10 Available
11 Available
12 PS/2 Mouse port
13 Floating Point unit
14 Primary Hard disk controller
15 Secondary Hard disk controller

8-bit motherboards (PC and XT) have only interrupt request lines from 0 through 7. Starting with the AT (80286 and beyond), a second 8259A controller chip was added to open up more interrupt request lines (8 through 15) for more devices. In order for the system to gain access to these 'extended' IRQs provided by the second interrupt controller, IRQ2 was commandeered and thus no longer available to the system - this would instead move to IRQ 9. IRQ 2/9 is used by the Roland MPU-401 audio interface, and also by some EGA/VGA cards to identify when the start of the vertical retrace occurs for correct timing of the frame buffer content being sent to the display.

*In very modern PCs, COM (Serial) and LPT (Parallel) ports are rarely used since many devices that used to use these now use USB instead, so these IRQs may be considered 'Available'. If you want to keep these IRQs free for others devices and you're not bothered about having a working parallel or serial port, it is recommended to disable the COM and LPT ports in the BIOS, otherwise the BIOS or your operating system will try to assign an IRQ line to them. Once an IRQ line is assigned, it cannot be unassigned until the computer is rebooted.

Conflicts in most PCs are usually as a result of multiple devices trying to use the same IRQ line. Many devices do not require an IRQ line, but typically network cards, SCSI adapters, sound cards, modems, CD-ROM drives, and serial and parallel ports do.

Some devices will not allow you to change the IRQ - they are fixed to use the same IRQ line. Within the BIOS there is often a page called "PNP/PCI Configuration" which can be used to manually set IRQ lines. If your BIOS has this page set to 'Auto' or 'ESCD' (Extended System Configuration Data), your operating system will attempt to manage all device IRQ, DMA and memory address assignments. This is no good for old DOS-based hardware resources, as DOS isn't able to remap these in the way a PnP operating system (and devices) can. So on your DOS system you can configure these settings to be set to "Legacy ISA" or similar, instead of PCI/PnP.

I/O Address (or I/O channel)

Each expansion card or peripheral is given its own 3-digit hex number which is used to identify its "address" within the operating system. This address is used to signal the card or device, and send or receive data to/from it.

Some common I/O Addresses are shown below:

I/O Address Commonly Used By
170h Secondary IDE interface
1F0h Primary IDE interface
220h Sound Blaster and compatible sound cards
240h Alternative sound card address
278h LPT2 or 3 and generally used with IRQ5
2E8h COM4 and generally used with IRQ3
2F8h COM2 and generally used with IRQ3
320h MIDI device or network card
330h Ad Lib FM audio card address, or SCSI host adapter
378h LPT1 and generally used with IRQ7
3E8h COM3 and generally used with IRQ4
3F8h COM1 and generally used with IRQ4

DMA Channels

Direct Memory Access (DMA) permits expansion cards and peripherals to directly access memory (as the name suggests) without going via the CPU. This means it's much faster and keeps the CPU undistracted from its other tasks. In a typical PC there are 8 DMA channels available, as follows:

DMA Channel Used By
0 Reserved for the system board
1 Commonly used by sound cards or SCSI host adapters
2 Assigned to disk drives
3 Commonly used by sound cards
4 Available
5 Commonly used by sound cards
6 Available
7 Available

DMA channels 5, 6 and 7 are 16-bit channels, and are therefore not usually available under DOS. In DOS, you usually see the 8-bit channels 1 or 3 being used.

Some computers weren't considered IBM PC-compatible, but could still load and run some PC software. In many cases, one of the reasons for lack of 100% compatibility was the lack of a DMA controller (the chip that manages Direct Memory Access from cards and devices). In the original IBM PC, the DMA controller chip was an Intel 8237.

The following computers are known to not have support for DMA:

  • IBM PC Jr
  • Tandy 1000 series
  • Sanyo MBC-55x series

A word of warning: 8237 DMA chips manufactured by AMD (under license) tended to have problems when more than one DMA channel was used at the same time. Chips marked with a date code of "82" or "83" are likely to be faulty. AMD versions can also be marked as "AMD9517". NEC branded versions are OK.