INTERRUPTS "I can send characters to the modem, but I never see any on my screen." This complaint (often arising from the user's observation of the modem lights and speaker), also known as "can-talk-but-not-listen syndrome", usually means that the communication device was found at the expected address, but Kermit's idea of its interrupt is wrong. What's an interrupt? To achieve high-speed communication without impacting other applications, Kermit reads characters from a serial device using "interrupts". Whenever a character arrives at the serial device, the device sends a signal, called an interrupt, that can be "caught" by application software like Kermit, leaving the application free to do other work in the meantime without having to constantly look at the serial port to see if any characters have arrived (an operation called "polling", which is used by some other communications programs). Communications programs that use polling are not sensitive to interrupts being set improperly and might therefore work with improperly- configured machines where Kermit will not (until you give it the required information), but they also tend to take over the entire computer. In contrast to polling programs, Kermit is normally waiting for input from the keyboard, and is therefore idle if you are not typing and no characters are arriving at the communication port. In multi-tasking environments such as Windows or OS/2, this allows other applications the largest possible share of the CPU while Kermit is running. When a character arrives at the port, an interrupt signals Kermit to wake up from its keyboard-wait state and read the character from the port. But Kermit needs a way of knowing which device the interrupt came from, so it will not erroneously read characters from the wrong one. The device is identified by an Interrupt Request (IRQ) number, a small number like 3 or 4. The BIOS does not record the IRQ number used by a serial port because the BIOS uses polling rather than interrupts. The communications software has to know which IRQ to use. By convention from the original IBM PC, COM1 uses IRQ 4 and COM2 uses IRQ 3. There is no standard for COM3 and above, but certain conventions are normally followed: Port PS/2 Others COM3 IRQ3 IRQ4 COM4 IRQ3 IRQ3 WARNING: Certain serial port cards and internal modems allow themselves to be configured with different IRQ numbers (such as 9), even on COM1 or COM2. Check your device's installation instructions. Some types of PCs (PS/2s, for example) allow sharing of IRQ numbers, provided each application has its own interrupt service routine and each such routine is built to "chain" interrupts properly (i.e. pass them along to other applications if they have arrived at the wrong place). This works, for example, with Kermit on a PS/2; you can run two copies of Kermit under Windows, one using COM2/IRQ3 and the other using COM3/IRQ3 (i.e. two ports, same IRQ), both doing input and output simultaneously with no confusion. But on most types of PCs, IRQs can NOT be shared, so each device must have a unique IRQ number. This caution applies especially when you have a serial mouse on IRQ 3 or 4. Once Kermit knows the COM port's address, it tests to see which IRQ number, 3 or 4, the device uses. This is a safe test and doesn't cause any modem signaling or communication to take place. The PC architecture has a limited range of IRQ numbers available, and so (usually) there can not be a unique IRQ number for each serial port when there are more than two, so in most cases no more than two serial ports can be active at once. MS-DOS Kermit tests first for IRQ4, and then if there is no response, IRQ3. If both tests fail, a default value is used (on PS/2s, the default is IRQ4 for COM1 and IRQ3 for COM2-4; on others is it is IRQ4 for COM1 and COM3, IRQ3 for COM2 and COM4). No error message is given in this case, but "can-talk-but-not-listen syndrome" is a likely result. Some add-on communication boards or internal modems are set up to use IRQ numbers other than 3 or 4 in order to avoid conflicts with COM1 or COM2 and/or to allow more than two COM ports to be active at once. But this can be dangerous -- for example, IRQ 5 (which is often used for this purpose) is also used by the hard disk controller on the PC/XT. IRQ 7 is often used by network boards. For this reason, Kermit does not automatically test any IRQ numbers other than 3 or 4, and does not use any other IRQ number by default. But it is sometimes necessary, particularly on ISA (Industry Standard Architecture) bus machines (PC/ATs and compatibles) and earlier (such as PCs and XTs) to use an IRQ other than 3 or 4, for example when when an internal modem is installed as COM3 on IRQ4, and then use of COM1 prevents COM3 from working, and vice versa. This problem can often be solved by reconfiguring the board to use an otherwise unused unique IRQ number. Ideally this would be a normally free IRQ such as 10 or 11, but unfortunately most communication boards are not configurable for IRQs higher than 7. Here is a brief, and definitely not comprehensive, guide to the low IRQ numbers (with IRQ numbers expressed in decimal): 2 Normally available, but some video boards use it to obey an obsolete standard for indicating vertical refresh. Adjust video board jumpers to not do this. On 286's and above, IRQ 2 is also known as IRQ 9: same IRQ, alternate number. Windows 3.0 had difficulty with devices using IRQ 2, but Windows 3.1 is better. 3 Normally COM2 and COM4. PS/2's use IRQ 3 for all serial ports above COM1. IRQ3 is also a favorite "factory default" of many local area network (LAN) adapters. 4 Normally COM1 and informally COM3 (except on PS/2s). 5 Secondary parallel port. Parallel ports are rarely interrupt-driven (except for Novell RPRINTER users) so this wire becomes free if you unjumper the IRQ on the parallel port board. LAN adapters are frequently placed on IRQ 5. PC/XTs use IRQ 5 for the hard disk. Be careful with this one. 6 Floppy disk drives. Leave it alone! 7 Primary parallel port. Remove as described for IRQ 5. Be careful, LAN adapters are frequently placed here. 9 Alias for IRQ 2. 10 Usually free. 11 Usually free. 12 Used by the IBM bus mouse, otherwise usually free. 13 Math coprocessor errors are trapped here, otherwise frequently free. 14 Used by hard disk on 286 and above. Leave alone! 15 Some SCSI controllers use this. Usually free. If your communication board uses an IRQ other than 3 or 4, you will experience the "can talk but not listen" syndrome when using Kermit. To fix it, simply inform Kermit of the device's IRQ number. This is done in the SET COMn command, after the address: SET COMn
for example: SET COM3 \x03e8 5 When you include a number (like 3, 4, 5, 6, or 7) after the port address (separated by a space), Kermit skips its IRQ test and uses the IRQ number you specified the next time you give a SET PORT command for that port. AVOID address and IRQ conflicts; these items MUST NOT overlap existing equipment. SERIOUS DAMAGE can result if, for example, the IRQ number you give is the same as the one used by your disk controller or network adapter. Incorrect operation can result if the interrupt is in use by a less critical device, such as a mouse. It is necessary to specify the IRQ number in either of these two situations: 1. The communication device uses an IRQ number other than 3 or 4. 2. Kermit's IRQ test interferes with Windows or a similar environment. Check your PC's configuration carefully before specifying an IRQ number. Before starting Kermit, you can use certain public domain or commercial utilities, such as MAPMEM, Northgate QAPLUS, Quarterdeck MFT, or the MSD utility shipped with Windows 3.1 to get an idea of which IRQ numbers are already in use (these utilities are, of course, not foolproof -- for example, they can't tell what IRQs are used by programs that are not presently loaded). If, even after establishing the device's interrupt, Kermit still fails to operate correctly (or reliably), check to see whether: 1. Some other device (such as a mouse or LAN adapter) is generating the same interrupt. 2. Some other software (such as a mouse or video driver) is catching the same interrupt. If you find a conflict, you'll have to resolve it: remove the offending device driver or TSR from your CONFIG.SYS or AUTOEXEC.BAT file or turn it off temporarily (e.g. with the MOUSE OFF command for certain mouse drivers); or, if possible, reconfigure one of the conflicting devices to use a different interrupt. Example: A PC (not PS/2) is delivered with a serial mouse on COM1 and with COM2 as a free serial port. COM2 can be used with an external modem, but you can't put an internal modem on COM3 because its IRQ conflicts with the mouse and the COM4 address clashes with an 8514/A video adapter (such as the ATI Ultra+). Neither the mouse interrupt nor the video board address can be changed. So to install an internal modem, you must remove the serial mouse and driver and, if you need a mouse, replace it with a bus mouse. .