|I tri-state gate on a interrupt line is NOT what you'd want to use if the |interrupt were sharable. Two systems that decide to DRIVE the interrupt |line at the same time would still cause problems. You need something like |open-collector lines instead. IBM in their infinite wisdom decided to have the interrupts on the PC be active high. Thus, the simplest way of making a driver that can share the line is to use a 3-state buffer chip whose input is always high; the enable on the buffer then switches the output between floating and high. |My understanding is that no one implemented shared interrupt drivers because |the hardware was essentially broken... In another piece of their infinite wisdom, IBM decided to make interrupts edge-triggered rather than level-controlled. Sharing a level-controlled interrupt is easy: simply have the ISR check the state of any device which could cause the int- terrupt. Even if a device earlier in the testing sequence starts asserting IRQ while a later device is being checked, the device will keep IRQ asserted until it's acknowleged; this in turn will force the CPU to re-execute the ISR from the start, and detect the interrupting condition which it earlier had missed. Edge-triggered interrupts are much harder to share reliably: after any interrupting device is dealt with it's essential to re-poll *ALL* the devices that could assert the interrupt line. Returning from an interrupt when a device on the line has not yet been serviced will effectively put that IRQ line out of commission. Annoying...