WHY DID ADDING MY MODEM AT COM3 OR COM4 HANG THE MODEM? OR WHY EVEN IF YOU DON'T "SHARE INTERRUPTS" YOU GET CONFLICTS ON THE COM1-4 PORTS by Dr. W. Curtiss Priest Center for Information, Technology and Society Lexington, MA 02173 Internet: bmslib@mitvma.mit.edu Voice: 617-862-7763 _______________________________________________________________________ *********************************************************************** Most of us quickly have learned that while there are four COM ports, there are only (usually) 2 IRQ's. [In AT's you can also use IRQ's 5,7, and 9, if your serial board supports those.] First -- many uses of serial ports do not use interrupts and so you can in those cases just forget about them. Example: you print out a serial port using XON/XOFF hand-shaking using a redirection program like LPTCOM1. Second -- if you use only one IRQ, there is still no potential conflict in terms of IRQ assignments. Third -- if you want to use 2 IRQ's [3 and 4], you want one port to use one of those and the other to use the other one. Typically IRQ 4 is hardwired for use with COM1 and COM3, and IRQ 3 is hardwired for use with COM2 and COM4. So -- a typical configuration is: your serial card is set for COM1 and COM2. You use COM2 for your mouse (usually a DB 9 connector). The mouse always uses interrupt servicing, and so your mouse driver "hooks interrupt vector 3" and when an interrupt occurs the driver services the request. But now you add an internal modem. Most telecommunications programs like Procomm Plus use interrupt servicing of the modem. So -- you must use the other IRQ, IRQ 4. So, you set the modem to COM3, since this usually sets the IRQ to 4 [newer boards allow mixing and matching of IRQ's but the problem is always the same -- don't let two ports use the same IRQ ! ! ______________________________________________________________________ ******************** BUT You find things still don't work. Why? The answer is in hardware, not in software. When IBM designed the PC, they used an 8259 chip to service the interrupt request. On the bus there are separate lines for each IRQ. On the XT there are 8 interrupts. On the AT there are 16 (actually 15, since IRQ 9 is redirected to IRQ2) An informative shareware program called IRQR produces the following on my machine: IRQR -- Report Status of 8259 Hardware Interrupt Channels Copyright 1988 by Lawrence R. Steeger 8259 IRQ Status IBM Assignments OEM Assignments ---- --- ------ --------------- --------------- 0x21 0 used Timer 1 used Keyboard 2 used 2nd 8259 Autofax Imager 3 >FREE COM2 4 >FREE COM1 5 >FREE LPT2 MS Bus Mouse 6 used Floppy Disk 7 >FREE LPT1 0xA1 8 used Clock 9 used Redirected IRQ2 10 >FREE (reserved) 11 >FREE (reserved) 12 >FREE (reserved) 13 used Coprocessor 14 used Hard Disk 15 >FREE (reserved) If you go into Procomm and shell to DOS and do this again, and if your modem is on IRQ 4, you'll find the report changed to show IRQ 4 now used. When you leave Procomm, Procomm releases the interrupt and the report reverts back to showing FREE. If you take a circuit diagram of a PC, you'll find each of the IRQ's to correspond to actual bus pins [yes, the ones you plug cards into]. For example, you'll find IRQ 4 on Pins B24 and A24 [the only slot in an XT and the slot nearest the back on an AT]. On an AT you'll find for example, IRQ 14 (Hard Disk) on Pin D7. This is in the second slot from the back in the AT, and not present on the XT. ******************** THE ANSWER The 8279 watches all the IRQ lines (8 in an XT and 16 in an AT). It recognizes an IRQ when the line goes from 0 volts to 5 volts. It is also "edge triggered" -- the line only needs to go high long enough for the 8279 to register the event on the rise of the square wave. Typical TTL: In hardware things often are held high and pulled low. This is commonly done with a resistor to an output going to +5 volts and a transistor from the output connecting the anode to the output and the emitter to ground. A signal on the base causes the transistor to conduct, the output is then pulled low. This is very common in TTL (Transistor-Transistor Logic). Boards sharing the same line will typically not "electrically" interfere since the line is high across all of them using the pull-up resistor and so any one board can pull the line low, regardless of the presence of extra pull-up resistors (these resistors are typically ten thousand ohms and a transistor can pull dozens of these in parallel low). Atypical TTL: But remember, IBM uses a chip that wants an output that goes low to high. To achieve this the serial board designer uses a "totem pole driver." Here there are two transistors. One to pull the line up, the other to pull the line down. Returning to software, you might think that if you don't ask the UART (the Universal Asynchronous Receiver/Transmitter) chip to enable the interrupt that the output on the IRQ line will be not present. This would be achieved with a "tri-state" output. Tri-state is either low, high, or not there. But this just isn't so. Even if you haven't enabled the interrupt in software, it still exists in the hardware. So on that serial port, a transistor is still trying to pull that IRQ line low. So, if another board tries to pull it high using its transistor to +5, there is a battle between the transistor on one board pulling the line low and the other trying to pull it high. The result is confusion. Sometimes it works because the IRQ you want is able to beat out the other port's transistor, and sometimes it doesn't because it just can't compete. ******************** THE SOLUTION The solution is easy. On boards that you are not going to use the offending IRQ line, you disconnect that line from the bus. There are two ways: 1.) For boards that are hardwired, you take a narrow strip of scotch tape and place it over the gold contacts that slide into the board. To disable IRQ4 you wrap B24/A24 and to disable IRQ3 you wrap B25/A25. 2.) For boards that have jumpers for IRQ assignments, just take the jumper for the offending IRQ and remove it, or let it dangle from one pin into mid air. Is this unbelievable? Absolutely ! ! _______________________________________________________________________________ | Dr. W. Curtiss Priest | | Center for Information, Technology, & Society | | *********************** | | 466 Pleasant Street * Improving Humanity *| * Through Technology * | | Voice: 617-662-4044 *********************** | | Fax: 617-662-6882 | _____________________________________________________________________________|