Comparison of PC serial and parallel ports

Serial ports

The device drivers built into MS-DOS and FreeDOS can only access hardware which is compatible with the hardware of the original IBM PC. In the case of the serial port this means that it must be backwards compatible with the 8250/16450 and, what later became the standard, the 16550A. Modern operating systems require driver software to be written for any hardware before it can be utilised. When a manufacturer develops a new UART chip to be used to provide a PC serial port any differences from the specification of the 16450/16550A can be hidden within the driver. This can become a problem when these UART chips are used with MS-DOS or FreeDOS as I have found when testing PrtAdd and StagView.

It has been necessary for me to modify my serial port handling code to work around these differences and I have also created a DOS utility PrtList which requires PrtAdd to be run first and lists the serial and parallel ports on a PC showing the type of each.

Super I/O, South bridge ICs and ISA cards

These ICs will normally provide serial ports which are completely compatible with either the 16450 or the 16550A.

PCI/PCIe expansion cards

Please note that if you use a PCI/PCIe serial port card you will need to obtain the I/O address and IRQ no. from PrtAdd and provide these values to the DOS software.

Manufacturer IC Compatible with FIFO size Extended features Multi-function Re-mappable Design errors Notes
                 
Brainboxes BB16PCI958 16C750 64   No No    
                 
MOXA MU860 16C650 128   No No    
                 
NetMos/MosChip/ASIX NM9835 16550A 17 h/w flow ctl No Yes TEMT bit (1)
  NM9845 16550A 17/33 h/w flow ctl No Yes TEMT bit (1)(9)
  MCS9865 16C950 253   Yes Yes   (2)(3)(6)
  MCS9900 16C950 253   Yes No   (2)(3)(6)
  MCS9901 16C950 253   Yes No   (2)(3)(6)
  MCS9922 16C950 253   Yes No   (2)(3)(6)
  AX99100 16C950 253   Yes No   (2)(6)
                 
Oxford Semiconductor OX16PCI952 16C950 128   Yes No   (4)(8)
  OX16PCI954 16C950 128   Yes No   (8)
  OXmPCI952 16C950 128   Yes No    
  OXuPCI952 16C950 128   Yes No    
  OXPCIe952 16C950 128   Yes No   (7)
                 
PCI PCI60806 16550A 17   No Yes no loopback (5)
                 
Sunix SUN1699 16550A 32 h/w flow ctl, lrg fifo No No    
  SUN1889 16550A 32 h/w flow ctl, lrg fifo No No    
  SUN1989 16550A 128 h/w flow ctl, lrg fifo No No    
  SUN2410 16550A 128 h/w flow ctl, lrg fifo No No    
                 
SystemBase SB16C1052PCI 16C1050 256   No No    
                 
TXIC TX382B 16550A 17   No No no loopback (5)
                 
Winchip CH351 16550A 16   No Yes    
  CH352 16550A 16 h/w flow ctl No Yes    
  CH353 16550A 16 h/w flow ctl No Yes    
  CH355 16550A 16 h/w flow ctl No Yes    
  CH382 16C750 256   No No    
                 

Notes :

(1) TEMT bit fault may mean it does not function correctly with some DOS software
(2) Larger FIFO but spec states it should be 256 bytes !
(3) Multifunction design causes port ghosting in some configurations
(4) Dual port design causes port ghosting in single serial port configuration
(5) Loopback mode not implemented
(6) Does not support all 16C950 indexed registers
(7) Multimode device and only modes 0, 2 & 4 can be used with MS-DOS, so the card must have mode jumpers to be certain of compatibility. If not it is still possible to modify it to work, see here for details. Also the second port cannot be used with MS-DOS because of the interrupt configuration of the card.
(8) This is a multifunction device but all UARTs share the same IRQ.
(9) FIFO size is either 17 or 33 depending on config

Parallel ports

The original IBM parallel port design used discrete buffers with open-collector outputs for the control pins (Strobe, AutoLF, Initialise & Select) which allowed the output to be read back to check the status of the pins not the value written to them. By driving these pins high to +5V the value at the pins can be pulled low externally and so they can be treated as input pins instead.

When the IBM parallel port design was duplicated in what is called a "Super I/O chip", along with serial ports, floppy disk and hard disk interfaces, improvements were made. The PS2 (Bi-directional), EPP and ECP modes were added to the original mode which was named SPP. Each of the new modes required that the parallel port control pins were implemented using push-pull outputs, which can be driven high or low. This change was required so that the port can handle high speed transfer. Some manufacturers of Super I/O chips (and later Southbridge and PCI/PCIe communication ICs) made the decision not to support the original output pin design when in Normal/Compatible/SPP mode.

The Stag programmer parallel protocol requires that a fully IBM compatible parallel port is used because the control pins are used as inputs and so will not communicate with a parallel port which uses push-pull outputs in SPP mode. Fortunately, some manufacturers decided to switch between open-collector (later open-drain) and push-pull outputs depending on the mode and the purpose of this page is to list some common ICs providing parallel ports and indicate whether they work with the Stag parallel protocol. As the practice of using the control outputs in this way was quite common in the 1980s before the PS2, EPP and ECP modes were implemented, this page may be of benefit to anyone attempting to use old software to connect using a PC parallel port.

Interrupt handling is another area where parallel ports can differ in operation. The port should be able to generate an interrupt on the low (0V) to high (+5V) transition of the nACK pin, however, many of the Super I/O, Southbridge and interface ICs generate interrupts while the nACK pin is either low or high (level triggered) rather than on the low to high transition (edge triggered). Some parallel port implementations cannot generate interrupts at all. Although the Stag parallel protocol does not use interrupts, I am designing a interrupt driven parallel port interface for another project and so I have added this information to the tables below

Super I/O, South bridge ICs and ISA cards

Manufacturer Super I/O Supports fully IBM compatible port in SPP mode nACK signal generating interrupt in SPP mode Notes
         
California Micro Devices CM16C552 Yes Broken  
         
HMC HM83740 Yes Broken  
         
ITE IT8671 No Lo -> Hi  
  IT8703 No Lo -> Hi  
  IT8705 Yes Lo -> Hi  
  IT8712 Yes Lo -> Hi  
  IT8712-A Yes Lo -> Hi  
  IT8716 Yes Lo level  
  IT8718 Yes Lo -> Hi  
  IT8720 Yes Lo level  
  IT8728 Yes Lo -> Hi  
         
National Semiconductor PC87307-IBU Yes Lo -> Hi  
  PC87417-IBU Yes Lo -> Hi  
  PC87417-ICK No Lo -> Hi  
  PC97317-ICK Yes Lo -> Hi  
         
SMC/SMSC/Microchip FDC37C669 Yes Lo -> Hi  
  LPC47M102 Yes Lo -> Hi  
  LPC47M182 Yes Lo -> Hi  
  LPC47M192 Yes Lo -> Hi  
  SCH5127 Yes Lo -> Hi  
         
Winbond W83627F Yes Lo -> Hi  
  W83627F-AW No Lo -> Hi  
  W83627HF-AW No Lo -> Hi  
  W83757F Yes Lo -> Hi  
  W83877F Yes Lo -> Hi  
  W83977EF-AW No Lo -> Hi  
         
  Southbridge      
         
ALi M1543C No Lo -> Hi  
         
VIA VT82C686B Yes Hi level  
         
  ISA cards      
         
A?? A3203 Yes Lo -> Hi  
         
ASP AP138(B) Yes Broken (1)
         
SIIG Cyber P1000 Yes ?  
         
SUNIX SUN1688 Yes Switchable  
  SUN1689 No Lo level  

Notes :

(1) ECP control register supported but not ECP mode

PCI/PCIe expansion cards

Please note that if you use a PCI/PCIe parallel port card you will need to obtain the I/O address and IRQ no. from PrtAdd and provide these values to the DOS software.

Manufacturer IC Supports fully IBM compatible port in SPP mode nACK signal generating interrupt in SPP mode Microsoft Standard ECP register layout Multi-function Re-mappable Notes
               
Brainboxes BB16PCI958 No Hi level No No No (4)
               
ITE IT8875 Yes Hi level Yes No No (5)
               
NetMos/MosChip/ASIX NM9715 Yes Lo level Yes No Yes  
  NM9805 Yes Lo level Yes No Yes  
  NM9815 Yes Lo level Yes No Yes  
  NM9835 Yes Lo level Yes No Yes  
  MCS9865 Yes Broken Yes Yes Yes (1)
  MCS9901 No Lo -> Hi Yes Yes No (1)
  AX99100 No Lo -> Hi Yes Yes No (1)
               
Oxford Semiconductor OX12PCI840 Yes Lo -> Hi Yes No Yes  
  OX16PCI954 Yes Broken Yes Yes No  
  OXuPCI952 Yes Broken Yes Yes No  
  OXPCIe952 Yes Hi level Yes Yes No  
               
Sunix SUN1689 No Lo level No No No (2)
  SUN1989 No Broken Yes No No  
  SUN2410 No Broken Yes No No  
               
TXIC TX382B Yes Lo -> Hi No No No (3)
               
Winchip CH351 No Hi level No No Yes (3)
  CH352 No Hi level No No Yes (3)
  CH353 No Hi level No No Yes (3)
  CH382 No Hi level No No No (3)
               

Notes :

(1) Multifunction design causes port ghosting in some configurations
(2) Only SPP/PS2 modes supported with MS-DOS/Win98/Linux!
(3) Only SPP/PS2 modes supported with MS-DOS!
(4) Only SPP/PS2 modes supported
(5) Not fully IBM compatible if SPP function used while in EPP or ECP mode so PRTADD currently disables EPP and ECP.

So a motherboard with a ITE, Winbond or SMC/SMSC Super I/O IC is likely to work with the Stag parallel protocol in SPP mode. A PCI parallel card with a NetMos/MosChip/ASIX or Oxford Semi IC or a PCIe parallel card with a TXIC IC will also work (TXIC ICs do not seem to use the standard parallel port register layout but should be ok).

Some PC motherboards have ACPI BIOS bugs which will cause the extended registers of a parallel port to be located at an address which is incompatible with the standard. (see Q0010 here)

The TXIC and Winchip ICs do not follow the Microsoft standard for register layout and use one group of 4 registers instead of two groups of 8 & 3 registers where the second group is offset from the first by 0400h (although the ACPI BIOS problem mentioned above can locate it elsewhere). This means that MS-DOS apps which follow the Microsoft standard can only use SPP and PS2 modes with these devices. They can be used in EPP and ECP modes with Windows because drivers have been written for this condensed register layout. At this time I have not seen any Linux drivers for these devices that support EPP and ECP modes.

Re-mapping ports for use with legacy software

The I/O addresses and IRQ no.s used by a PCI or PCIe card are allocated automatically by the PnP or ACPI BIOS to ensure that there are no conflicts with other devices. The range of addresses available for this purpose is limited and does not include the legacy addresses 03f8, 03e8, 02f8, 02e8, used for serial ports, and 0378, 0278, 0778, 0678, and 03bc, used for parallel ports. Some PCI serial and parallel cards do allow the I/O addresses to be re-mapped to legacy addresses, however, they do not allow the IRQ no to be re-mapped to the associated legacy IRQ.

In the case of parallel ports very few applications use interrupts for communication and so this re-mapping is likely to work. For serial ports it has been necessary to use interrupts for many years to allow reliable communication at baud rates higher than 9600 baud so re-mapping serves no purpose for serial ports because the IRQ no cannot be changed to that expected by the legacy software and associated with the re-mapped address.

The tables above for serial and parallel devices indicate if they are re-mappable but please note that devices on PCIe cards cannot be re-mapped to use legacy addresses. This means that a PCI device, which is indicated as re-mappable, on a PCIe card with a PCIe-to-PCI bridge IC cannot be re-mapped to a legacy address.

I have discovered that some motherboards do not allow PCI cards to be accessed at legacy addresses preventing any re-mapping and they are listed here. The tests were carried out using PrtAdd v1.0.4 and a NetMos NM9805.

Manufacturer Model BIOS BIOS version
Gigabyte GA-MA69VM-S2 Award Modular BIOS v6.00PG F8
Gigabyte GA-770T-D3L Award Modular BIOS v6.00PG  
Asus K8N-E Deluxe AMIBIOS 1010

I have a Gigabyte GA-H97-D3H and an Epox EP-9NPA+Ultra, which uses the Award Modular BIOS v6.00PG, and they both allow PCI cards to be accessed at legacy addresses so this problem must be caused by bugs in individual releases of BIOS.

Recommendations for PCI/PCIe cards

Some of these devices are either multifunction, which usually means that they allocate separate interrupts for each function, or are single function, multiport devices where unused ports cannot be disabled but the card manufacturer has not fitted some components or connectors. With some configurations of these devices what I have called ghost ports will appear which, although fully functional and assigned addresses and interrupts, cannot be used. There is no way to predict if a partially populated board will have unusable ghost ports as it depends on whether a single pcb design is used for all configurations and if the mode selection pins of the device, if any, are set correctly for that configuration. For these devices I recommend obtaining only cards with no missing components. e.g. NM9865 with 2x serial ports and 1x parallel port or OX16PCI952 with 2x serial ports.

Of the other devices you should probably avoid the NM9835/9845, the TXIC TX382B and the PCI60806 because of their problems with serial ports. The OXPCIe952 has been shown to have problems with interrupts and DOS and should be avoided. If you need to use the EPP or ECP modes of a parallel port then you should avoid the Sunix, TXIC and Winchip ICs because of their non-standard register layout.

Please note that any problems with these devices relate to their use with DOS (or Linux for parallel ports) and, as far as I know, all of these devices work correctly with Windows if you use the manufacturer's drivers.

home contact