This file is designed to give a basic overview of the bus found in most IBM clone computers, often referred to as the XT or AT bus. The AT version of the bus is upwardly compatible, which means that cards designed to work on an XT bus will work on an AT bus. This bus was produced for many years without any formal standard. In recent years, a more formal standard called the ISA bus (Industry Standard Architecture) has been created, with an extension called the EISA (Extended ISA) bus also now as a standard. The EISA bus extensions will not be detailed here.
This file is not intended to be a thorough coverage of the standard. It is for informational purposes only, and is intended to give designers and hobbyists sufficient information to design their own XT and AT compatible cards.
ISA cards can be either 8-bit or 16-bit. 8-bit cards only uses the first 62 pins and 16-bit cards uses all 98 pins. Some 8-bit cards uses some of the 16-bit extension pins to get more interrupts.
(At
the card)
(At
the computer)
(At
the card)
(At the computer)
Power supplies. -5 is often not implimented.
Address Enable. This is asserted when a DMAC has control of the bus. This prevents an I/O device from responding to the I/O command lines during a DMA transfer. When AEN is active, the DMA Controller has control of the address bus as the memory and I/O read/write command lines.
Bus Address Latch Enable. The address bus is latched on the rising edge of this signal. The address on the SA bus is valid from the falling edge of BALE to the end of the bus cycle. Memory devices should latch the LA bus on the falling edge of BALE. Some references refer to this signal as Buffered Address Latch Enable, or just Address Latch Enable (ALE). The Buffered-Address Latch Enable is used to latch SA0-19 on the falling edge. This signal is forced high during DMA cycles.
Bus Clock, 33% Duty Cycle. Frequency Varies. 4.77 to 8 MHz typical. 8.3 MHz is specified as the maximum, but many systems allow this clock to be set to 12 MHz and higher.
System Data lines, or Standard Data Lines. They are bidrectional and tri-state. These 16 lines provide for data transfer between the processor, memory and I/O devices.
DMA Acknowledge. The active-low DMA Acknowledge 0 to 3 and 5 to 7 are the corresponding acknowledge signals for DRQ 0-3, 5-7.
DMA Request. These signals are asynchronous channel requests
used by I/O channel devices to gain DMA service. DMA request
channels 0-3 are for 8-bit data transfer. DAM request channels
5-7 are for 16-bit data transfer. DMA request channel 4 is used
internally on the system board. DMA requests should be held high
until the corresponding DACK line goes active. DMA requests are
serviced in the following priority sequence:
High: DRQ 0, 1, 2, 3, 5, 6, 7 Lowest
I/O size 16. Generated by a 16 bit slave when addressed by a bus master. The active-low I/O Chip Select 16 indicates that the current transfer is a 1 wait state, 16 bit I/O cycle. Open Collector.
Channel Check. A low signal generates an NMI. The NMI signal can be masked on a PC, externally to the processor (of course). Bit 7 of port 70(hex) (enable NMI interrupts) and bit 3 of port 61 (hex) (recognition of channel check) must both be set to zero for an NMI to reach the cpu. The I/O Channel Check is an active-low signal which indicates that a parity error exists in a device on the I/O channel.
Channel Ready. Setting this low prevents the default ready timer from timing out. The slave device may then set it high again when it is ready to end the bus cycle. Holding this line low for too long can prevent RAM refresh cycles on some systems. This signal is called IOCHRDY (I/O Channel Ready) by some references. CHRDY and NOWS should not be used simultaneously. This may cause problems with some bus controllers. This signal is pulled low by a memory or I/O device to lengthen memory or I/O read/write cycles. It should only be held low for a maimum of 2.5 microseconds.
The I/O Read is an active-low signal which instrucs the I/O device to drive its data onto the data bus, SD0-SD15.
The I/O Write is an active-low signal which instructs the I/O device to read data from the data bus, SD0-SD15.
Interrupt Request. IRQ2 has the highest priority. IRQ 10-14 are only available on AT machines, and are higher priority than IRQ 3-7. The Interrupt Request signals which indicate I/O service attention. They are prioritized in the following sequence: Highest IRQ 9(2),10,11,12,14,3,4,5,6,7
Latchable Address lines. Combine with the lower address lines to form a 24 bit address space (16 MB) These unlatched address signals give the system up to 16 MB of address ability. The are valid when "BALE" is high.
16 bit bus master. Generated by the ISA bus master when initiating a bus cycle. This active-low signal is used in conjuction with a DRQ line by a processor on the I/O channel to gain control of the system. The I/O processor first issues a DRQ, and upon recieving the corresponding DACK, the I/O processor may assert MASTER, which will allow it to control the system address, data and control lines. This signal should not be assrted for more than 15 microseconds, or system memory may be corrupted du to the lack of memory refresh activity.
The active-low Memory Chip Select 16 indicates that the current data transfer is a 1 wait state, 16 bit data memory cycle.
The Memory Read is an active-low signal which instructs memory devices to drive data onto the data bus SD0-SD15. This signal is active on all memory read cycles.
The Memory Write is an active-low signal which instructs memory devices to store data present on the data bus SD0-SD15. This signal is active on all memory write cycles.
No Wait State. Used to shorten the number of wait states generated by the default ready timer. This causes the bus cycle to end more quickly, since wait states will not be inserted. Most systems will ignore NOWS if CHRDY is active (low). However, this may cause problems with some bus controllers, and both signals should not be active simultaneously.
Oscillator, 14.31818 MHz, 50% Duty Cycle. Frequency varies. This was originally divided by 3 to provide the 4.77 MHz cpu clock of early PCs, and divided by 12 to produce the 1.19 MHz system clock. Some references have placed this signal as low as 1 MHz (possibly referencing the system clock).
Refresh. Generated when the refresh logic is bus master. This active-low signal is used to indicate a memory refresh cycle is in progress.
This signal goes low when the machine is powered up. Driving it low will force a system reset. This signal goes high to reset the system during powerup, low line-voltage or hardware reset. ??????????????
System Address Lines, tri-state. The System Address lines run from bit 0 to bit 19. They are latched on to the falling edge of "BALE".
System Bus High Enable, tristate. Indicates a 16 bit data transfer. The System Bus High Enable indicates high byte transfer is occuring on the data bus SD8-SD15.
System Memory Read Command line. Indicates a memory read in the lower 1 MB area. This System Memory Read is an active-low signal which instructs memory devices to drive data onto the data bus SD0-SD15. This signal is active only when the memory address is within the lowest 1MB of memory address space.
System Memory Write Commmand line. Indicates a memory write in the lower 1 MB area. The System Memory Write is an active-low signal which instructs memory devices to store data preset on the data bus SD0-SD15. This signal is active only when the memory address is within the lowest 1MB of memory address space.
Terminal Count. Notifies the cpu that that the last DMA data transfer operation is complete. Terminal Count provides a pulse when the terminal count for any DMA channel is reached.
__ __ __ __ __ __ __ BCLK ___| |___| |___| |__| |___| |___| |___| |__ __ BALE _______| |_______________________________________ AEN __________________________________________________ ______________________________________ SA0-SA15 ---------<______________________________________>- _____________ _____ Command Line |______________________________| (IORC,IOWC, SMRDC, or SMWTC) _____ SD0-SD7 ---------------------------------------<_____>---- (READ) ___________________________________ SD0-SD7 ---------<___________________________________>---- (WRITE)
BALE is placed high, and the address is latched on the SA bus. The slave device may safely sample the address during the falling edge of BALE, and the address on the SA bus remains valid until the end of the transfer cycle. Note that AEN remains low throughout the entire transfer cycle.
The command line is then pulled low (IORC or IOWC for I/O commands, SMRDSC or SMWTC for memory commands, read and write respectively). For write operations, the data remaines on the SD bus for the remainder of the transfer cycle. For read operations, the data must be valid on the falling edge of the last cycle.
NOWS is sampled at the midpoint of each wait cycle. If it is low, the transfer cycle terminates without further wait states. CHRDY is sampled during the first half of the clock cycle. If it is low, further wait cycles will be inserted.
The default for 8 bit transfers is 4 wait states. Some computers allow the number of default wait states to be changed.
__ __ __ __ __ __ BCLK ___| |___| |___| |__| |___| |___| |_ AEN [2] __________________________________________ _____________ LA17-LA23 -------<_____________>-[1]----------------- __ BALE ______________| |________________________ ________________ _______ SBHE |__________________| __________________ SA0-SA15 ---------------<__________________>------- _________________ ____________________ M16, IO16 |____| _________________ ___________ Command Line |____________| (IORC,IOWC, MRDC, or MWTC) ____ SD0-SD7 ---------------------------<____>--------- (READ) ________________ SD0-SD7 ---------------<________________>--------- (WRITE)
[1] The portion of the address on the LA bus for the NEXT cycle may now be placed on the bus. This is used so that cards may begin decoding the address early. Address pipelining must be active.
[2] AEN remains low throughout the entire transfer cycle, indicating that a normal (non-DMA) transfer is occuring.
16 bit transfers follow the same basic timing as 8 bit transfers. The LA bus is not latched, and a valid address may appear on the LA bus prior to the beginning of the transfer cycle. Unlike the SA bus, the LA bus is not latched, and is not valid for the entire transfer cycle.
The default for 16 bit transfers is 1 wait state. This may be shortened or lengthened in the same manner as 8 bit transfers, via NOWS and CHRDY.
SMRDC/SMWTC follow the same timing as MRDC/MWTC respectively when the address is within the lower 1 MB. If the address is not within the lower 1 MB boundary, SMRDC/SMWTC will remain high during the entire cycle.
SBHE must be pulled low to activate the upper portion of the bus (LA, SD8-15, etc). To transfer 16 bits (instead of 8), M16 or IO16 must be pulled low by the slave device (if it is a memory or I/O device, respectively).
Note: Only the first 10 address lines are decoded for I/O operations.
Port (hex) | Port Assignments |
---|---|
000-00F | DMA #1 |
020-021 | PIC #1 |
040-043 | PIT |
060-063 | Keyboard Controller |
070-071 | Real Time Clock |
080-083 | DMA Page Register |
0A0-0AF | PIC #2 |
0C0-0CF | DMA #2 |
0E0-0EF | reserved |
0F0-0FF | coprocessor |
100-1FF | AVAILABLE |
200-20F | Game Adapter |
210-217 | reserved |
220-26F | AVAILABLE |
278-27F | Parallel Interface #2 |
2B0-2DF | EGA |
2F8-2FF | COM2 |
300-31F | Prototype Adapter |
320-32F | AVAILABLE |
378-37F | Parallel Interface #1 |
380-38F | SDLC Adapter |
3A0-3AF | reserved |
3B0-3BF | Monochome Adapter/Parallel Interface |
3C0-3CF | EGA |
The ISA bus uses two DMA controllers (DMAC) cascaded together. The slave DMAC connects to the master DMAC via DMA channel 4 (channel 0 on the master DMAC). The slave therefore gains control of the bus through the master DMAC. On the ISA bus, the DMAC is programmed to use fixed priority (channel 0 always has the highest priority), which means that channel 0-4 from the slave have the highest priority (since they connect to the master channel 0), followed by channels 5-7 (which are channel 1-3 on the master).
The DMAC can be programmed for read transfers (data is read from memory and written to the I/O device), write transfers (data is read from the I/O device and written to memory), or verify transfers (neither a read or a write - this was used by DMA CH0 for DRAM refresh on early PCs).
Before a DMA transfer can take place, the DMA Controller (DMAC) must be programmed. This is done by writing the start address and the number of bytes to transfer (called the transfer count) and the direction of the transfer to the DMAC. After the DMAC has been programmed, the device may activate the appropriate DMA request (DRQx) line.
I/O | Port |
---|---|
0000 | DMA CH0 Memory Address Register Contains the lower 16 bits of the memory address, written as two consecutive bytes. |
0001 | DMA CH0 Transfer Count Contains the lower 16 bits of the transfer count, written as two consecutive bytes. |
0002 | DMA CH1 Memory Address Register |
0003 | DMA CH1 Transfer Count |
0004 | DMA CH2 Memory Address Register |
0005 | DMA CH2 Transfer Count |
0006 | DMA CH3 Memory Address Register |
0007 | DMA CH3 Transfer Count |
0008 | DMAC Status/Control Register Status (I/O read) bits 0-3: Terminal Count, CH 0-3 - bits 4-7: Request CH0-3 Control (write) - bit 0: Mem to mem enable (1 = enabled) - bit 1: ch0 address hold enable (1 = enabled) - bit 2: controller disable (1 = disabled) - bit 3: timing (0 = normal, 1 = compressed) - bit 4: priority (0 = fixed, 1 = rotating) - bit 5: write selection (0 = late, 1 = extended) - bit 6: DRQx sense asserted (0 = high, 1 = low) - bit 7: DAKn sense asserted (0 = low, 1 = high) |
0009 | Software DRQn Request - bits 0-1: channel select (CH0-3) - bit 2: request bit (0 = reset, 1 = set) |
000A | DMA mask register - bits 0-1: channel select (CH0-3) - bit 2: mask bit (0 = reset, 1 = set) |
000B | DMA Mode Register - bits 0-1: channel select (CH0-3) - bits 2-3: 00 = verify transfer, 01 = write transfer, 10 = read transfer, 11 = reserved - bit 4: Auto init (0 = disabled, 1 = enabled) - bit 5: Address (0 = increment, 1 = decrement) - bits 6-7: 00 = demand transfer mode, 01 = single transfer mode, 10 = block transfer mode, 11 = cascade mode |
000C | DMA Clear Byte Pointer Writing to this causes the DMAC to clear the pointer used to keep track of 16 bit data transfers into and out of the DMAC for hi/low byte sequencing. |
000D | DMA Master Clear (Hardware Reset) |
000E | DMA Reset Mask Register - clears the mask register |
000F | DMA Mask Register - bits 0-3: mask bits for CH0-3 (0 = not masked, 1 = masked) |
0081 | DMA CH2 Page Register (address bits A16-A23) |
0082 | DMA CH3 Page Register |
0083 | DMA CH1 Page Register |
0087 | DMA CH0 Page Register |
0089 | DMA CH6 Page Register |
008A | DMA CH7 Page Register |
008B | DMA CH5 Page Register |
I/O | Port |
---|---|
00C0 | DMA CH4 Memory Address Register Contains the lower 16 bits of the memory address, written as two consecutive bytes. |
00C2 | DMA CH4 Transfer Count Contains the lower 16 bits of the transfer count, written as two consecutive bytes. |
00C4 | DMA CH5 Memory Address Register |
00C6 | DMA CH5 Transfer Count |
00C8 | DMA CH6 Memory Address Register |
00CA | DMA CH6 Transfer Count |
00CC | DMA CH7 Memory Address Register |
00CE | DMA CH7 Transfer Count |
00D0 | DMAC Status/Control Register Status (I/O read) bits 0-3: Terminal Count, CH 4-7 - bits 4-7: Request CH4-7 Control (write)- bit 0: Mem to mem enable (1 = enabled) - bit 1: ch0 address hold enable (1 = enabled) - bit 2: controller disable (1 = disabled) - bit 3: timing (0 = normal, 1 = compressed) - bit 4: priority (0 = fixed, 1 = rotating) - bit 5: write selection (0 = late, 1 = extended) - bit 6: DRQx sense asserted (0 = high, 1 = low) - bit 7: DAKn sense asserted (0 = low, 1 = high) |
00D2 | Software DRQn Request - bits 0-1: channel select (CH4-7) - bit 2: request bit (0 = reset, 1 = set) |
00D4 | DMA mask register - bits 0-1: channel select (CH4-7) - bit 2: mask bit (0 = reset, 1 = set) |
00D6 | DMA Mode Register - bits 0-1: channel select (CH4-7) - bits 2-3: 00 = verify transfer, 01 = write transfer, 10 = read transfer, 11 = reserved - bit 4: Auto init (0 = disabled, 1 = enabled) - bit 5: Address (0 = increment, 1 = decrement) - bits 6-7: 00 = demand transfer mode, 01 = single transfer mode, 10 = block transfer mode, 11 = cascade mode |
00D8 | DMA Clear Byte Pointer Writing to this causes the DMAC to clear the pointer used to keep track of 16 bit data transfers into and out of the DMAC for hi/low byte sequencing. |
00DA | DMA Master Clear (Hardware Reset) |
00DC | DMA Reset Mask Register - clears the mask register |
00DE | DMA Mask Register - bits 0-3: mask bits for CH4-7 (0 = not masked, 1 = masked) |
The DMAC is programmed for transfer. The DMA device requests a transfer by driving the appropriate DRQ line high. The DMAC responds by asserting AEN and acknowledges the DMA request through the appropriate DAK line. The I/O and memory command lines are also asserted. When the DMA device sees the DAK signal, it drops the DRQ line.
The DMAC places the memory address on the SA bus (at the same time as the command lines are asserted), and the device either reads from or writes to memory, depending on the type of transfer. The transfer count is incrimented, and the address incrimented/decrimented. DAK is de-asserted. The cpu now once again has control of the bus, and continues execution until the I/O device is once again ready for transfer. The DMA device repeats the procedure, driving DRQ high and waiting for DAK, then transferring data. This continues for a number of cycles equal to the transfer count. When this has been completed, the DMAC signals the cpu that the DMA transfer is complete via the TC (terminal count) signal.
__ __ __ __ __ __ BCLK ___| |___| |___| |__| |___| |___| |___ _______ DRQx _| |___________________________________ ______________________________ AEN ____| |________ _______ ________ DAKx |___________________________| ____________________________ SA0-SA15 -------<____________________________>------- ___________ ____________ Command Line |___________________| (IORC, MRDC) _____________ SD0-SD7 ----------------------<_____________>------- (READ) ____________________________ SD0-SD7 -------<____________________________>------- (WRITE)
The DMAC is programmed for transfer. The device attempting DMA transfer drives the appropriate DRQ line high. The motherboard responds by driving AEN high and DAK low. This indicates that the DMA device is now the bus master. In response to the DAK signal, the DMA device drops DRQ. The DMAC places the address for DMA transfer on the address bus. Both the memory and I/O command lines are asserted (since DMA involves both an I/O and a memory device). AEN prevents I/O devices from responding to the I/O command lines, which would not result in proper operation since the I/O lines are active, but a memory address is on the address bus. The data transfer is now done (memory read or write), and the DMAC incriments/decriments the address and begins another cycle. This continues for a number of cycles equal to the DMAC transfer count. When this has been completed, the terminal count signal (TC) is generated by the DMAC to inform the cpu that the DMA transfer has been completed.
Note: Block transfer must be used carefully. The bus cannot be used for other things (like RAM refresh) while block mode transfers are being done.
The DMAC is programmed for transfer. The device attempting DMA transfer drives the appropriate DRQ line high. The motherboard responds by driving AEN high and DAK low. This indicates that the DMA device is now the bus master. Unlike single transfer and block transfer, the DMA device does not drop DRQ in response to DAK. The DMA device transfers data in the same manner as for block transfers. The DMAC will continue to generate DMA cycles as long as the I/O device asserts DRQ. When the I/O device is unable to continue the transfer (if it no longer had data ready to transfer, for example), it drops DRQ and the cpu once again has control of the bus. Control is returned to the DMAC by once again asserting DRQ. This continues until the terminal count has been reached, and the TC signal informs the cpu that the transfer has been completed.
Name | Interrupt | Description |
---|---|---|
NMI | 2 | Parity Error, Mem Refresh |
IRQ0 | 8 | 8253 Channel 0 |
IRQ1 | 9 | Keyboard |
IRQ2 | A | Cascade from slave PIC |
IRQ3 | B | COM2 |
IRQ4 | C | COM1 |
IRQ5 | D | LPT2 |
IRQ6 | E | Floppy Drive Controller |
IRQ7 | F | LPT1 |
IRQ8 | F | Real Time Clock |
IRQ9 | F | Redirection to IRQ2 |
IRQ10 | F | Reserved |
IRQ11 | F | Reserved |
IRQ12 | F | Mouse Interface |
IRQ13 | F | Coprocessor |
IRQ14 | F | Hard Drive Controller |
IRQ15 | F | Reserved |
IRQ0,1,2,8, and 13 are not available on the ISA bus.
Contributor: Joakim Ögren, Niklas Edmundsson , Mark Sokos , Pieter Hollants Sources: Mark Sokos ISA page