COMADDR.EXE version 1.1 COMADDR.TXT Copyright (c) 1994 K. D. Smyth All Rights Reserved What it does, briefly: COMADDR can reset the COM port I/O address list (those "3F8" and "2E8" things you set jumpers for on adapter cards) stored in your computer's memory to either the PC standard defaults or any others that you like. This lets the digital address that the application software reads in for the COM port actually agree with the jumper setting; correcting mistakes your BIOS loaded in during start-up. It also allows use of COM3 and COM4 on older PC and XT machines. COMADDR is especially useful for machines with lots of add-ons, or ones using extended adapters like the Mouse Systems Serial Card, or the Quickpath Portfolio I/O card, which allow you to set different addresses to resolve various I/O and hardware interrupt (IRQ) conflicts. It is compatible with both DOS and Windows, and will help resolve a lot of confusing adapter address problems. It is not a TSR and does not take up RAM space. Compatibility:MS/PC DOS 3.3 or higher, DR DOS 6.0, Novell DOS 7.0 works with Windows 3.1/3.11 How to Use: Three Ways!! Setting System Back to Defaults COMADDR (nothing afterward) sets all four COM ports to their default I/O addresses (COM1=3F8, COM2=2F8, C0M3=3E8, COM4=2E8) example:"C:\comaddr". Very useful in your AUTOEXEC.BAT file, and a big help for older machines which may only look for COM1 and COM2. This will let them also load COM3 and COM4. Setting System to Custom Addresses COMADDR (address 1),(address 2),(address 3),(address 4) sets COM1 to address 1, COM2 to address 2, etc. example: "C:\comaddr 03F8,02F8,0338,0300" will set COM1 to 3F8, COM2 to 2F8 (both normal), COM3 to 338 and COM4 to 300 (both weird) Changing Just One Address COMADDR (address 1),,, sets COM1 to address 1 but leaves others unchanged ("COMADDR ,address 2,," sets COM2 to address 2, "COMADDR ,,address 3, sets COM3 to address 3, and and so on.) example: "C:\comaddr ,,02E8," will change COM3 to to 2E8 and not disturb any settings for COM1, COM2 and COM4 Entering the Numbers Easy. "02f8", "2f8", "02F8" and "2F8" all mean the same thing. Commas (,) or semicolons (;) are used to separate the data. Leave out the quote marks when you enter things, but I assume if you're smart enough to know that you need this program, you'll already have figured that one out! Addresses below 0200 or above 03FF will not be accepted, except for 0000. Technical Discussion 1. What does this thing do? This program was written to solve a simple, stupid problem: setting up the I/O (input /output) addresses for the COM ports on a PC. Your computer's start-up sequence that runs when you turn the computer on has a routine to do this; it tests certain ad- dresses and records which ones respond, and in which order; and stores them in hexadecimal form in an area of memory called the "ROM BIOS Data Area". (You can look at this area with the DEBUG or SID utilities included with Microsoft or Digital Research DOS'es, and make some sense of it sense if you are familiar with the way assembly language writes things into memory.) The first responding COM address is stored in the location reserved for COM1, the second in the one for COM2, etc. This isn't a bad system, but it has some limitations which became problems as the capabilities of PC's grew. COM3 and COM4 were not often used in XT's so some old BIOS's leave these address locations blank. Also, this method assumes that all COM port numbers are being used in order. For example, if COM1 is disabled but COM2 and COM3 are used; then the address for COM2 will be written in the COM1 location, and the COM3 address will be written in the COM2 location. The computer then gets lost when it tries to communi- cate with COM2 or COM3. Problems like this didn't happen much before things like scanners, bus mice, and other goodies became common, but now as you fill up your PC you may need to disable COM ports to use IRQ lines normally assigned to them, or to prevent IRQ's from being shared by incompatible devices; and things just don't run right, or in extreme cases, the computer locks up when you try to access things in certain combinations. Your Mac user buddies get a good laugh, and make smug comments. (If they get on your nerves, ask them if they could get all of their older software to run under System 7) The COM/IRQ silliness is a legacy (actually a inherited birth defect) from the original IBM-PC and is carried on by the need to keep software and hard ware (at least some of it) compatible with older machines. COMADDR is a solution to these problems. It allows you to change any or all of the four COM port addresses in the ROM BIOS Data Area, so that the addresses called by your software, the addresses in the data area, and the REAL address that the silicon on the card is set up to use will ALL AGREE. It does not change the IRQ numbers that each function uses, but gives you some more ways around that problem. It also reads and resets the machine configuration word in the BIOS area to reflect the new number of COM ports, if you've added any. It is not a TSR (Terminate, Stay Resident) program so it does not sit and occupy precious lower RAM space When the addresses set in the data area, the addresses set up physically on the cards (those jumpers or DIP switches) and the ad- dresses your software sends the data to are all the same, you can go on to more important problems, like whats for lunch. Invite the Mac users along; we're really all together in this. 2. I/O Addresses and IRQ's - What ARE they?? (and what do they do?) These I/O addresses and IRQ's are two things that give migraines when setting up Intel-based PC's, and finding a decent explanation of their functions is very difficult. Let's try a simple analogy. Think of things as a classroom with chairs spread around in a neat arrangement, and a teacher with a bad memory for names who must rely on a seating chart. When a hand goes up, the teacher looks at the chart to see who sits in that chair, and calls on that person by name. When the teacher wants to call on someone, he or she looks at the chart to find out what their name is and in what chair they're sitting. In the computer, the processor is the teacher, the chairs are the "IRQ's" (or "hardware Interrupt ReQuests", an interrupt being something that causes the processor to stop what it is doing and react to something else) and the seating chart is the list of "I/O ad dresses". The software is the key to tying all of these things together, or in the analogy, keeping the chairs arranged and the seating list up to date so that our absent-minded professor doesn't get hopelessly lost. Sort of like the instructor's aide. Now, when we set addresses on the circuit cards we're giving each student a name, then we need to write the student names in a place where the software can read them. This is where COMADDR can help. We also need to put our cards into the chairs, er, IRQ's where the software will tell the processor to look. The original PC and XT that followed had eight IRQ's, numbered 0 to 7 and the AT bus machines (including most 286's, 386's, 486's and Pentiums) have 16, numbered 0 to 15. We should have plenty to choose from; but some are used for system func- tions, like IRQ0 and IRQ1; the system timer and keyboard inter- rupts, respectively. Each available IRQ has a signal line on the connector that the cards plug into. For a PC or XT 8-bit bus computer, the IRQ's are set up as follows: IRQ2 "reserved", see text - sometimes used by EGA or VGA cards IRQ3 shared by COM2 and COM4 IRQ4 shared by COM1 and COM3 IRQ5 hard disk, if installed IRQ6 floppy disk IRQ7 parallel printer (LPT1), if installed As you can see, there's not a lot of room on the 8-bit bus. Some references list IRQ 2 as 'reserved', since it is used in a screwy way on AT and up machines and by some XT EGA and VGA cards, try using it if its open on your XT; it might be the only way to make things work. (The Mouse Systems Serial Card allows you to use IRQ's 2,3,4,5 or 7 for a serial port, and can be very useful when you want to add something to a crowded box.) On an AT (or above) machine, there are an extra 36 pins on the card to run signals on, so they added IRQ's along with 8 more bits of data. IRQ2 really is 'reserved' on an AT (don't use it) and is tied into IRQ9, don't ask why, just don't use that either; it makes strange things happen on some machines. The rest of the AT IRQ's are assigned as follows: IRQ 3 COM2/COM4 IRQ 8 Real Time Clock (not available) IRQ 4 COM1/COM3 IRQ10 not assigned IRQ 5 second printer IRQ11 not assigned IRQ 6 floppy disk IRQ12 not assigned IRQ 7 first printer IRQ13 Math Coprocessor (not available) IRQ 14 Hard Disk IRQ 15 not assigned, used by some SCSI boards If you're keeping score, you notice that an XT bus has IRQ's 2,3, and 4 available, three total assuming that you have a hard disk and a standard printer attached; and the AT bus has 3,4,10,11,12, and 15 available. You can also disable the second printer function on most AT cards to allow use of IRQ5 on the AT bus, to get a total of seven available loose IRQ's for use on the various adapters. As a general rule, if something is not installed on your machine but the IRQ line is available on the bus, you can use that vacant IRQ line for something else if your software can recognize that IRQ line. That's the big if. Most hardware makers like to use cheaper 8-bit ("XT-AT compatible") cards instead of 16 bit cards, so they cheat us out of many possible configuration options and make IRQ's 3 through 5 very much in demand. You can try to avoid filling them but lots of DOS driver software doesn't recognize any other IRQ's and doesn't like to share them. That makes it hard to get around this difficulty. For example, if you are trying to run your mouse on COM3/IRQ11 so that you can install that new CD-ROM on IRQ4 but your mouse driver doesn't recognize IRQ11, the mouse won't work. This is particularly bothersome when you look at history - the IBM AT came out about ten years ago so the manufacturers have had plenty of time to work on these things. Be aware that this can happen and ask a lot of questions when you buy add-ons to your computer. One of the nice things about Windows is that you can load non-standard IRQ's for COM ports via the Ports Control Panel - Advanced menu, but these settings will only hold for Windows applications that rely on the Windows I/O routines. But remem- ber, if a card is a short, "XT" type, IRQ's 8-16 are not there. This discussion went on longer than intended, but I hope the explanations were helpful. If you want to avoid IRQ crowding problems; use an AT (286 or above) and pay extra if need be for cards that have the added IRQ lines. Mouse hookups are the easiest things to move around, if your driver software will cooperate. If a software driver cannot access these IRQ's, get a better one. Use COMADDR to make certain that the COM port ad- dresses are set correctly if addresses are the problem. With a little shuffling, hopefully you'll get everyone in the "class" seated and participating (or in the pedagogical vernacular "interacting") just fine. 3. Setting things up Plug-in cards will have a set of jumper plugs or DIP switch es to let you set the I/O address and IRQ line that the card will use. There are usually a few options available and the documenta tion that came with the card (NEVER throw that away!!) will tell you what they are and how to set-up the card. Once you've 'configured' the card, be sure to write the information down so that you can refer to it when you set up software, a drawing of where the jumpers or switches are on the card is also a good idea. If you don't know how your computer is configured, but want to find out, the simplest way is to use the Microsoft MSD.EXE utility (comes with MS DOS 6 or Windows) or Norton Utili- ties System Configuration command, or Quarterdeck's Manifest to give you a readout of the I/O address and IRQ assignment of each installed function. When installing new cards, pick an address that's not used by anything else and try not to share an IRQ line between functions if at all possible. Printers can usually share IRQ's with other printers, but CDROMS, mice, scanners, fax cards, and modems frequently have problems. When in doubt, don't share. The standard ('default') COM port I/O addresses are: COM1 3F8, COM2 2F8, COM3 3E8 and COM4 2E8. Almost all serial cards have these COM1 and COM2 addresses jumpered in at the factory, and provide at least the COM3 and COM4 addresses as alternates. Better cards have more options to help you set up the machine so that everything will work. From a hardware point of view, its perfectly o.k. to use a non-standard address for something, as long as you don't have two functions sharing the same address. Most of the system functions have addresses below 200, and this version of COMADDR will give you an illegal input message and not change anything if you try to write in one of these. Other ad- dresses to avoid are 3F0-3F7 (floppy disk controller), 378-37F (LPT1, if enabled) and 278-27F (LPT2, if enabled). Anything above 03FF will also cause COMADDR to do nothing except give an error message. You may enter a 0000 address to shut off a port. 4. Using this with Windows The easiest way to use this program with Windows is to either place the "COMADDR" command into your AUTOEXEC.BAT file, before your "cd windows" line if you use that, or to exit Windows (press "Alt-F4"), run COMADDR, then restart Windows. When Windows is restarted, the Port Addresses listed in the Control Panel will automatically be updated. Running COMADDR from the Windows "MS- DOS" shell (that icon thing) may cause the address table that Windows previously loaded and is using to disagree with the new one you've set up with COMADDR. This may cause problems. If you do this anyway, and then reset the Port Addresses in the Windows Control Panel (or SYSTEM.INI), Windows will tell you to restart, so you will not save any time. (Note: this program has been tested only with Windows 3.1, it should not crash or wreak havoc with older versions of Windows, but this has not been tested.) So, be safe, exit Windows before you run COMADDR, then restart Windows. Also, Windows documentation states that Windows will not recognize a mouse on COM3 or COM4 but some drivers have overcome this limitation. A feature of Windows that not many are aware of is that it will allow you to have up to nine COM ports. COMADDR will only set addresses for the original four that are used by plain DOS programs. Use the Windows Control Panel or edit SYSTEM.INI to insert addresses for COM 5 through COM 9. You will probably need to share IRQ's for these. Windows IRQ sharing can be enabled by adding the line "COMIrqSharing=True" to the [386Enh] section of your SYSTEM.INI file. (Now there is a mouth- ful of jargon!) The Windows documentation states that this does not work with all adapters. There are some good shareware pack- ages out there that automate this procedure. 5. Network Environments This program alters only COM port addresses. It has been tested with a Novell Netware configuration which uses an Ethernet card and caused no conflict there, but that is only one configu- ration. If your network does not use a COM port there should be no problem, but the easiest way to be certain of what will happen when using COMADDR in a network 'environment' is to use COMADDR in your AUTOEXEC.BAT before loading the network shell files. WARNING WARNING WARNING WARNING WARNING This program will allow you to reset COM port addresses to whatever you need. It will also allow you to set the COM port to the same address as a floppy disk or some other vital organ of your computer. This mistake could have catastrophic results. I am not responsible for any misuse of this program, or any data lost as a result. Please be careful, and enter only those addresses for which your cards are programmed. If you are not certain of these addresses, consult the data sheets for the particular adapter cards you are using; and check out your system configuration using a utility such as Microsoft's MSD (included with MS-DOS 6.x and Windows 3.1), Quarterdeck's Manifest, or Norton Utilities System Configuration. If you are still not too sure, use only the first mode described; which sets all four addresses to the IBM defaults and set the address jumpers on the cards accordingly. Disclaimer of Warranty THIS PROGRAM IS SUPPLIED WITH NO WARRANTIES, EXPRESS OR IMPLIED, AND SPECIFICALLY NO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. THE USER ASSUMES ALL LIABILITY FOR DAMAGES RESULTING FROM LOSS OF DATA, INTERRUPTION OF BUSINESS, LOSS OF PROFITS, USE OF EQUIPMENT, DAMAGE TO EQUIPMENT, OR INCIDENTAL OR CONSEQUENTIAL DAMAGES. In using this software you are assuming all risk as to its re- sults and performance. Use of this program for any period of time constitute your agreement with and acceptance of these conditions and responsibilities. I am not responsible for maintaining and updating this software on your system, except as stated below. Please report any bugs. I cannot guarantee that I can fix all of them, but I will try. REGISTRATION This is a copyrighted program, and all rights are specifi- cally reserved. To legally use this software after a 30-day evaluation period, you must register and receive a license. Registration entitles you to a free copy of any upgrade and use of the executable COMADDR.EXE on up to three computers. The registration fee is ten dollars US ($10) for all users with the exception of teachers in public schools, who may register this program and receive a license for use in a classroom or other educational purpose at no cost. These requests must be made on the school letterhead. This program may be freely distributed by wire or electronic means (i.e., bulletin boards and online information services) or by shareware distributors. You must still register this software even if you paid the distributor for the medium on which it was transmitted to you. Any form of distribution must be complete and include the three files listed below. These files may be com- pressed for distribution but not otherwise altered in any other way. Files included: COMADDR.EXE Executable COMADDR.TXT Long-winded Documentation (this file) READIT.1ST Short Documentation K.D. Smyth email:k.smyth1@genie.geis.com 1618 Quail Ave ksmyth@aol.com Sunnyvale, CA 94087 Legal Disclaimers Mouse Systems is a registered trademark of Mouse Systems Corporation. Microsoft, MS and MS-DOS are registered trademarks, and Windows is a trademark of Microsoft Corporation Manifest is a registered trademark of Quarterdeck Systems Inc. Norton Utilities is a registered trademark of Symantec Corporation. Portfolio is a registered trademark of Quickpath Company DR DOS and Novell Dos are registered trademarks of Novell Inc Pentium is a trademark of Intel Corporation