Controlling Multiport Serial I/O Cards
The Microsoft serial driver can be used to control many dumb multiport serial cards. Dumb indicates that the control includes no on-board processor. Each port of a multiport board has a separate subkey under the CurrentControlSet\Services\Serial subkey in the Registry. In each of these subkeys, you must add values for DosDevices, Interrupt, InterruptStatus, PortAddress, and PortIndex because these are not detected by the Hardware Recognizer. (For descriptions and ranges for these values, see Regentry.hlp, the Registry help file on the Windows NT Workstation Resource Kit CD.
For example, if you have a four-port COMTROL Hostess 550 board configured to use address 0x500 with an interrupt of 0x2, the values in the Registry are:
Serial2 subkey:
PortAddress = REG_DWORD 0x500 Interrupt = REG_DWORD 2 DosDevices = REG_SZ COM3 InterruptStatus = REG_DWORD 0x507 PortIndex = REG_DWORD 1
| Serial4 subkey:
PortAddress = REG_DWORD 0x510 Interrupt = REG_DWORD 2 DosDevices = REG_SZ COM5 InterruptStatus = REG_DWORD 0x507 PortIndex = REG_DWORD 3
|
Serial3 subkey:
PortAddress = REG_DWORD 0x508 Interrupt = REG_DWORD 2 DosDevices = REG_SZ COM4 InterruptStatus = REG_DWORD 0x507 PortIndex = REG_DWORD 2
|
Serial5 subkey:
PortAddress = REG_DWORD 0x518 Interrupt = REG_DWORD 2 DosDevices = REG_SZ COM6 InterruptStatus = REG_DWORD 0x507 PortIndex = REG_DWORD 4
|
Certain multiport boards, such as Digiboard non-MCA bus cards, use a different scheme to determine which port is interrupting. These boards should include the Indexed value entry in the configuration data for each port under its subkey in CurrentControlSet\Services\Serial. This entry indicates that the board uses an indexed interrupt notification scheme as opposed to a bitmapped method.
For example, if you have an eight-port Digiboard communications board configured to be at address 0x100 with an interrupt of 0x3, the values in the Registry are:
Serial2 subkey:
PortAddress = REG_DWORD 0x100 Interrupt = REG_DWORD 3 DosDevices = REG_SZ COM3 InterruptStatus = REG_DWORD 0x140 Indexed = REG_DWORD 1 PortIndex = REG_DWORD 1
Serial3 subkey:
PortAddress = REG_DWORD 0x108 Interrupt = REG_DWORD 3 DosDevices = REG_SZ COM4 InterruptStatus = REG_DWORD 0x140 Indexed = REG_DWORD 1 PortIndex = REG_DWORD 2
Serial4 subkey:
PortAddress = REG_DWORD 0x110 Interrupt = REG_DWORD 3 DosDevices = REG_SZ COM5 InterruptStatus = REG_DWORD 0x140 Indexed = REG_DWORD 1 PortIndex = REG_DWORD 3
Serial5 subkey:
PortAddress = REG_DWORD 0x118 Interrupt = REG_DWORD 3 DosDevices = REG_SZ COM6 InterruptStatus = REG_DWORD 0x140 Indexed = REG_DWORD 1 PortIndex = REG_DWORD 4
| Serial6 subkey:
PortAddress = REG_DWORD 0x120 Interrupt = REG_DWORD 3 DosDevices = REG_SZ COM7 InterruptStatus = REG_DWORD 0x140 Indexed = REG_DWORD 1 PortIndex = REG_DWORD 5
Serial7 subkey:
PortAddress = REG_DWORD 0x128 Interrupt = REG_DWORD 3 DosDevices = REG_SZ COM8 InterruptStatus = REG_DWORD 0x140 Indexed = REG_DWORD 1 PortIndex = REG_DWORD 6
Serial8 subkey:
PortAddress = REG_DWORD 0x130 Interrupt = REG_DWORD 3 DosDevices = REG_SZ COM9 InterruptStatus = REG_DWORD 0x140 Indexed = REG_DWORD 1 PortIndex = REG_DWORD 7
Serial9 subkey:
PortAddress = REG_DWORD 0x138 Interrupt = REG_DWORD 3 DosDevices = REG_SZ COM10 InterruptStatus = REG_DWORD 0x140 Indexed = REG_DWORD 1 PortIndex = REG_DWORD 8
|