Application Notes: DOS Serial Communications

COM: Ports with DOS
Starting with MS-DOS and PC-DOS version 3.30, four COM: ports are supported by the operating system. Versions of DOS prior to version 3.30 only supported COM1: and COM2:. MS-COMPAQ DOS version 3.31 only supported two COM: ports.

Default Address and Interrupts
The default address and interrupts for COM: Ports are outlined in the following table:

COMx Address IRQ

1 3F8 Hex 4
2 2F8 Hex 3
3 3E8 Hex 4*
4 2E8 Hex 3*

*NOTE: COM3: and COM4: Interrupts are not standard settings, merely the most used DOS setting. These values may be different for different applications (Refer to the section below on Interrupts).

BIOS support
When DOS or a DOS application uses a COM: port, the address of the port is retrieved from the BIOS / DOS Data Segment, located in low memory at segment hex, offset 0000 (0040:0000). A two byte space is reserved for each port that is supported under DOS. This data segment holds information about hardware settings and miscellaneous system information. During 'boot up', the BIOS Power On Self Test (POST) will test the default COM: Port Address and initialize the Data Segment if a valid port is found. This usually does not present a problem, however some older POST routines only test for two COM: ports. If this is the case then the BIOS / DOS Data Segment for COM3: and COM4: are left empty, signaling to DOS that COM3: and COM4: are not present. This problem is easily remedied by the utility program SETCOM. This program will initialize the BIOS / DOS Data Segment with the Base Address of your COM: Port, allowing DOS and DOS applications access to your COM3: and COM4:. Another unique advantage of the SETCOM utility is that it allows the use of non-standard COM: Port address. This would be very useful if there was an I/O address conflict with another interface adapter installed in the computer. The SETCOM utility program is available on the Serial Utility Diskette that is provided with the hardware.

Interrupts and COM: Ports
Typically COM1: and COM3: are assigned to IRQ4 and COM2: and COM4: are assigned to IRQ3. This setting is the typical setting for interrupts and DOS COM: ports, but not the standard. DOS does not assign Interrupts (IRQs) to a COM: Port. The COM: Port services provided by DOS through Interrupt 14h are not interrupt driven. This results in very poor performance when using the DOS interrupt 14h calls to service the COM: Port. Typically, applications assign each COM: Port an interrupt and service the port in an interrupt driven fashion. This allows the COM: Port to be serviced more efficiently. When this is true, COM3: and COM4: usually are assigned an interrupt other than IRQ4 or IRQ3 because the mouse driver is loaded into memory and is servicing IRQ4 or IRQ3 (depending on where the serial mouse is installed). Many DOS applications use IRQ5 or IRQ7 if an LPT: port is not used. Like the COM: Ports, the LPT: Ports under DOS are not Interrupt Driven. If an interrupt is used, it is up to the application to program the system accordingly. IRQ2 is also available on an 'XT' machine, but on an 'AT' machine IRQ2 is actually IRQ9 and must be programmed accordingly.

Adding more COM: Ports and COM: Port Programming
Due to the nature of the operating environment of DOS, only one application is running at a time. Although this does have its drawbacks, it does allow more flexibility in system configurations. If an application wishes to use more than four COM: ports, the only thing developers need to do is define the desired serial port addresses and interrupts then program the ports by directly accessing the hardware. This is often the case when intelligent or non-intelligent multi-port communications cards are used, however the same approach will work if you have COM: cards that can be addressed to unique I/O address and interrupts. When an application programs the COM: ports, multiple ports may share the same interrupt if proper programming is utilized.

 

 

Application Notes: Windows 3.1x Serial Communications

COM: Ports and Windows 3.1
Microsoft Windows 3.1 will allow each COM: port to have a unique address and interrupt. The address and interrupt is selectable from the Windows Control Panel. The Control Panel allows you to use non-standard addressing and interrupts for the communication ports. With previous versions of Windows, any non-standard setting could only be obtained by the extensive editing of the SYSTEM.INI file.

Changing the COM: Port Settings
To change the COM: port address or interrupt, first select the Control Panel icon (This is usually located in the "MAIN" Program Group). You will then need to select which COM: port you are configuring. After the port has been selected, click on the advanced button. This will prompt you for the Base Address and IRQ selection for the COM: port.

Windows and the 16550 Buffered UART
Windows 3.1 also supports the 16550 buffered UART. The buffered UART is available on all UART based boards. The 16550 supports a 16 byte FIFO (First In First Out) Buffer, allowing the port to be serviced less often. This is extremely helpful in any multitasking environment due to the nature of the protected mode environment. Windows 3.1 sets the FIFO trigger level to 14.

Preferred Windows Settings
Although Windows does support interrupt sharing, the preferred setting for Windows 3.1 is one IRQ per COM: port. For maximum performance, each port should have a unique IRQ and should have the 16550 option.

 

 

Application Notes: Windows 95 Serial Communications

NOTE: Many INF files have been developed for Sealevel Systems I/O cards to make installation even simpler. Please refer to the Serial Utility Disk to determine if an INF file exists for your specific product.

COM Ports and Windows 95
Microsoft Windows 95 requires each COM port to have a unique I/O address and interrupt. The address and interrupt are selectable from the Windows 95 Device Manager. The Device Manager allows you to use non-standard I/O addresses and interrupts for communication ports.

Adding additional COM Ports
To add COM ports to your system, use the following procedure for each port:

  1. Select the My Computer icon or run Control Panel from the Start->Settings->Control Panel selection.
  2. In the Control Panel Folder, select the Add New Hardware icon. This will launch the Add New Hardware Wizard. Choose Next.
  3. Select No in response to "Do you want Windows to search for your new hardware?"
  4. From the Hardware types list box select Ports (COM & LPT). Then choose Next.
  5. From the Manufacturers list box select Standard port types. From the Models list box select Communication Port. Now select Next.
  6. The message "Windows can install your hardware using the following settings:" will be displayed. Accept this configuration by choosing Next even though these settings may not correspond to the selections made on your adapter card. The correct settings will be set in the next step.
  7. The message "Windows has finished installing the software necessary to support your new hardware." will be displayed. Choose Finish.
  8. Select No to answer the prompt "Do you want to shut down your system now?"
  9. Repeat the steps above to add additional ports.

Changing the COM Port Settings
Now that additional COM ports have been added to the system using the previous steps, each port's resources (i.e. I/O address and IRQ) will need to be updated to match the adapter card's settings.

  1. Again select the Control Panel folder and select the System icon.
  2. Select the Device Manager tab and click on the "+" symbol next to the Ports (COM & LPT) selection. Choose one of the ports that were added in the previous steps (usually located at the end of the list).
  3. Click the Properties button and then select the Resources tab.
  4. Windows 95 includes a set of basic configurations for COM ports. These basic configurations allow varying degrees of customization for COM settings as described in the following information taken from the Windows 95 Knowledge Base.
    Basic Config IRQ Editable? I/O Setting Editable?
    0 4 No 03F8-03FF No
    1 4 Yes 03F8-03FF No
    2 3 No 02F8-02FF No
    3 3 Yes 02F8-02FF No
    4 4 No 03E8-03EF No
    5 4 Yes 03E8-03EF No
    6 3 No 02E8-02EF No
    7 3 Yes 02E8-02EF No
    8 Variable Yes Variable Yes

    COM 1 defaults to Basic Configuration 0. The IRQ can be changed by selecting Basic Configuration 1.
    COM 2 defaults to Basic Configuration 2. The IRQ can be changed by selecting Basic Configuration 3.
    COM 3 defaults to Basic Configuration 4. The IRQ can be changed by selecting Basic Configuration 5.
    COM 4 defaults to Basic Configuration 6. The IRQ can be changed by selecting Basic Configuration 7.
    Basic Configuration 8 can be used to configure additional COM ports because it lets you change the IRQ and the I/O address.
  5. Select a basic configuration which corresponds to your adapter's settings or will allow you to enter custom settings for your adapter. Basic Configuration 8 will allow you to customize both the IRQ and I/O settings.
  6. If the message "This resource setting cannot be modified." is displayed, make sure you have selected a Base Configuration which allows this resource to be changed and that the Use Automatic Settings checkbox is not selected.
  7. Restart Windows so that your changes can take effect.

Windows 95 and the 16550 Buffered UART
The following information is taken from the Microsoft Development Library. Windows 95 provides two methods for accessing the 16550 UART FIFO buffer settings. Each method is a global setting and can affect PCMCIA, internal, and external modems. Use one of the following methods to access the Advanced Port Settings dialog box:

Method 1

  1. Click the Start button, point to Settings, then click Control Panel.
  2. Double-click Modems.
  3. On the General tab, click Properties.
  4. On the Connection tab, click Port Settings.

NOTE: This setting can be changed from any modem properties dialog box. If you change this setting in one connectoid, it affects all connectoids. A connectoid is a saved communications session within an application. For example, HyperTerminal connectoids are files that store settings for individual HyperTerminal connections.

Method 2

  1. Click the Start button, point to Settings, then click Control Panel.
  2. Double-click System.
  3. On the Device Manager tab, double-click Ports (COM & LPT).
  4. Double-click the communications port (COMx) you want to change.
  5. On the Port Settings tab, click Advanced.

In the Advanced Port Settings dialog box you can:

  • Enable/disable the FIFO buffer for the 16550 chip. NOTE: The COMxFIFO setting that can be manually added to the [386Enh] section of the SYSTEM.INI file does not affect Windows-based programs in Windows 95. This setting only affects MS-DOS-based programs.
  • Increase/decrease the Receive buffer.
  • Increase/decrease the Transmit buffer.

Enable/Disable the FIFO Buffer
To disable the FIFO buffer for a 16550 UART chip, click the "Use FIFObuffers (requires 16550 compatible UART)" check box to clear it.

Receive Buffer
The Receive Buffer slider supports the values 1 (low), 4, 8, and 14 (high). The default value of 8 should be sufficient in most cases. If you decrease this value, more interrupts are sent to the processor, slowing bytes into the UART. If you increase this value from 8 to 14, characters may overrun the FIFO buffer.

Transmit Buffer
The Transmit Buffer slider supports the values 1 (low), 6, 11, and 16 (high). If you experience problems uploading files, decrease the default value of 16. If you decrease the buffer from 16, more interrupts are sent to the processor, slowing down the rate at which bytes are sent into the UART Transmit buffer, reducing serial overruns. The higher the number, the fewer interrupts are sent, increasing system performance during uploads.

Preferred Windows Settings
Windows 95 does not support interrupt sharing. Each port should have a unique IRQ and should have the 16550 option.

 

 

Application Notes: Windows NT (Version 3.51) Serial Communications

NOTE: A Windows NT setup utility has been developed to make installation of Sealevel Systems' multiport serial I/O cards even simpler. Please refer to the Serial Utility Disk for details on NT Setup.

This document details the installation of COM: ports under Windows NT. Installation notes are included for Non-Intelligent Multi-port and Normal serial interfaces. This Non-Intelligent Multi-port serial interface is one of a special type of COM: card that has an Interrupt Status Port that allows the Device Driver to better service the ports that reside on the card.

WARNING: Be very careful when following the procedure for adding ports. If an error is made, you may need to use the emergency repair disk to recover.

Quick Start Details:

  1. Open Windows NT.
  2. Open Control Panel.
  3. Open Ports.
  4. Select "Add."
  5. Provide Information for Base I/O address and Interrupt that has been previously selected.
  6. elect "Don't Restart Windows Now."
    Repeat steps 4 through 6 for all ports being added.

  7. From the Windows NT command prompt type "Net Stop Serial."
  8. From the Windows NT command prompt type "REGEDT32."
  9. Select the window titled HKEY_LOCAL_MACHINE.
    Click on the System folder.
    Click on the CurrentControlSet folder.
    Click on the Services Folder.
    Click on the Serial folder.
  10. At this point a listing of Serial devices will be present.
  11. Select the device that represents the first port you have installed.
  12. Select Edit from the Command Bar.
    Select "Add Value."
    Type "PortIndex" for the Value Name.

    Select "Reg_Dword" for Data type.
  13. Type the decimal number that represents the # of the port you are configuring (i.e. "1" for the 1st port).
  14. Select "Add Value".
    Type "Interruptstatus" for the Value Name.
    Select "Reg_Dword" for Data type.
    Type the number that represents the address of the interrupt status port

Repeat steps 10 through 13 for all ports being installed.

The registry should appear as below for an adapter which has a base address of 500 Hex, an interrupt status port at 507 Hex, is sharing IRQ 10, is the
first port on this adapter, and is the third port in the system:

PortAddress REG_DWORD 0x500
Interrupt REG_DWORD 10
DosDevices REG_SZ COM3
PortIndex REG_DWORD 1
InterruptStatus REG_DWORD 0x507

From the Windows NT command prompt type "Net Start Serial." All ports should now be active and can be used.

 

 

Application Notes: OS/2 Serial Communications

COM3: OR COM4: Support on an ISA System
The original XT and AT computer allowed for the definition of up to four serial communication ports. However, there has never been any hardware architectural standard that defined the I/O port addresses or Interrupt Request (IRQ) lines associated with communication ports 3 or 4.

Over the years, a convention has developed that places the port addresses for COM3: AND COM4: at 03E8 and 02E8 respectively. This is a generally accepted convention, but not yet a standard. Check the documentation and the settings of the adapters in your system to verify your hardware environment.

After you have checked and set the I/O and IRQ values on your COM: ports or internal modems, you must add this information to the communications device-driver (COM.SYS) statement in the CONFIG.SYS file.

You might also need to tell your communications application software where the COM: ports are. PROCOM software, for example, has a configuration screen that enables you to specify these settings. If the application, operating system, and hardware are not in agreement, then the application will not run.

OS/2 COM: ports do not need to be defined in sequence. It is acceptable to have a COM4: without having a COM3:. DOS, however, might have difficulty if there is a gap in the port definition. To avoid confusion for DOS, you can define the COM: ports that do not have any physical adapters attached in the COM.SYS statement. These substitute definitions will serve as placeholders. COM1: and COM2: are assumed to have standard values and do not need to be explicitly set up unless you want to set some non-standard values to accommodate your particular configuration.

To enable COM3: or COM4: on an ISA system, place the following in the CONFIG.SYS file:
DEVICE=X:\OS2\COM.SYS (n, a, i) (n, a, i)
where X = the drive where OS/2 is installed
n = the COM: port to access
a = communications port I/O addresses (03E8, 02E8, for example)
i = IRQ level, which is usually a jumper setting on the I/O adapter

For example, to specify that COM3: is at address 03E8 on IRQ5 and that COM4: is at addresses 02E8 on IRQ10, use the following statement (assuming that OS/2 is installed on drive C):
DEVICE=C:\OS2\COM.SYS (3,03E8,5) (4,02E8,10)

The I/O address and IRQ level should be noted in the documentation that came with your adapter. Either or both may be fixed values or can be set to a range of values via jumpers or switches. In some cases you might find that the values are fixed or that the range of settings available to you is insufficient to avoid the sharing conflict. In that case, you must purchase a different, more versatile adapter or accept that you cannot use both adapters at the same time.

Trouble Shooting:
SYMPTOM: The COM: port is not recognized or does not work at all

A. If computer is an AT, ISA, or EISA machine and is trying to use COM3: or COM4:.

A.1 Parameters in DEVICE=C: OS2 COM.SYS in CONFIG.SYS are required

A.2 IRQ for COM: port in OS/2 must be different for each COM: port. DOS does not handle multiple interrupts at the same time but OS/2 does.

A.3 IRQ5 is recommended for COM3:. If IRQ5 is taken, IRQ9 or IRQ10 is recommended.

A.4 Reboot the system

A.5 If error message during boot : COM3: not installed because Interrupt is already in use.
=>Check if there is an IRQ conflict with other device driver or hardware.

B: If system (AT bus or MCA) boots without error but any of the COM: ports are still not working at all =>Issue a Mode command to the problem COM: port
If it indicates COM: port not installed check IRQ conflicts (see A.5)
=>Check Mode command parameters to be correct (see MODE_CMD).

SYMPTOM: Application appears to hang
C: When the application is started:
C.1 If an OS/2 application
=> Ensure your COM: port works in stand alone DOS.
=> Using MODE command, turn off IDSR, ODSR, and OCTS (see MODE_CMD).
=> (see SUGGESTIONS )

C.2 Using a DOS application
=> (Start from letter A.1 Above and work down)
=> If a problem still exist, remove VCOM.SYS.

D. After COM: port has been running for some time:
D.1 Using an OS/2 application and experiencing a lot of data loss
=> Lower the baud rate
=> (see SUGGESTIONS )

D.2 Using a DOS application:
D.2.1 A BBS communication package.
=> Set COM_HOLD DOS Setting to ON
=> If using a FOSSIL Driver, then
If X00.SYS Rem VCOM.SYS in CONFIG.SYS, else
If another FOSSIL Driver. Rem VCOM.SYS
WON'T WORK
=> If using less than 12MB of memory
=> (see SUGGESTIONS )

D.2.2 A FAX application which uses a COM: port.
=> Known limitation needed to operate at < 9600 bps
=> Use OS/2 application for high speed fax.
(Currently FAXPM and BitFax)

D.2.3 An application which uses QBASIC or BASIC CTTY
=> Install COMDD.SYS in C: OS2 MODS directory

D.2.4 Some other ASYNC applications.
- CrossTalk for Windows needs that BUFFER=OFF.
- Mirror III is similar to CrossTalk. BUFFER can be controlled with MODE command.
- LapLink PRO, IDSR, ODSR, and OCTS of all COM: ports must be OFF. (see MODE_CMD).

D.2.5 In Auto Answer mode and a call comes in:
=> Known problem APAR PJ04200
=> Remark out VCOM.SYS in CONFIG.SYS

SYMPTOM : OS/2 does not detect FIFO
E.1 COM.SYS detects FIFO and utilizes it, however VCOM.SYS will only emulate a 16450 or 8250 chip and hides FIFO from DOS app. No
performance problem is caused by this.

SYMPTOM: The line is dropped randomly or fails to download file F.1 While switching sessions
=> change PRIORITY_DISK_IO in CONFIG.SYS from YES to NO,
reboot. Go to F.2 below if problem continues

F.2 Without switching sessions.
=> Increase idle sensitivity to 100.
=> If problem is happening during noticeable disk activity
add additional memory to reduce swapping.
=> Try increasing DISKCACHE in CONFIG.SYS (e.g. from 1024 to 2048)

SYMPTOM: Slow through-put, poor performance
G.1 Using an OS/2 application
=> (see SUGGESTIONS )
=> Using MODE command, turn off IDSR, ODSR, and OCTS.
(see MODE_CMD).

G.2 Using a DOS application
=> Increase IDLE_SENSITIVITY to 100
=> (see SUGGESTIONS )
Note: Since interrupt must be simulated in VDM session, the throughput decreases.

MODE_CMD: Use MODE from an OS/2 Command line or DOS command line
and set IDSR, ODSR, and OCTS EQUAL TO OFF. e.g.: MODE COM3: 9600, N, 8, 1, OCTS=OFF, IDSR=OFF sets COM3: TO 9600, no parity, 8 Data Bits, 1 Stop bit, OCTS, ODSR AND IDSR to OFF.

If OCTS and/or ODSR are set to ON, the COM: port will not transmit data unless CTS and/or DSR signal lines are enabled. If set to OFF, the COM: port will transmit regardless of the state of signal lines CTS and/or DSR.

If IDSR is set to ON, the COM: port will discard the incoming data unless DSR signal line is enabled. If set to OFF, the port will receive data regardless of the state of DSR.

If any problems transmitting or receiving, set OCTS=OFF, ODSR=OFF, IDSR=OFF to ensure that the hardware connected to the COM: port is no
preventing the port from transmitting or receiving.

SUGGESTIONS:
=> Increase IDLE_SENSITIVITY in DOS settings
=> Adjust the disk cache in CONFIG.SYS
=> Change PRIORITY_DISK_IO from YES to NO in CONFIG.SYS
=> To reduce swapping add more memory

Additional Information:
The 16550 provides for a 16-character receive hardware buffer that can be set to generate an interrupt every 1, 4, 8 or 14 characters. It can also hold up to 16 characters in a transmit buffer, generating an interrupt only when that buffer is empty. In other words, in its most efficient mode, the 16550 can handle transmission and receipt of data in roughly 16-byte chunks, only interrupting the CPU at the end of each chunk.

Note that even if you don't make use of the extended buffering from the point of view of interrupt handling, but still receive an interrupt for every character received or transmitted, the 16550 buffer can be helpful, as it can buffer received characters if the COM: handler misses an interrupt, thereby preventing receive overruns.

The OS/2 COM: driver can fully exploit these capabilities of the 16550 depending on how it is configured. Here's the problem - if you take the default COM: settings, and even if you use MODE to set the BUFFER parameter to AUTO, the COM: driver is only partially using the capabilities of the UART.

COM: Driver Settings (MODE):
The extended hardware buffering mode of the async driver can be controlled via the BUFFER parameter of the MODE command. It can take on three values:

ON - Set transmit/receive triggers to fully exploit buffering. (16-character transmit/receive queues for 16550).
OFF - Set transmit/receive triggers to a single character.
AUTO - "Automatic Protocol Override". Adjust the transmit/receive triggers according to handshaking protocols in effect.

The "handshaking protocols" for AUTO mode use the following signals:
RTS = Request To Send (Signals FROM OS/2 COM: Driver)
DTR = Data Terminal Ready
CTS = Clear To Send (Signals TO OS/2 COM: Driver)
DCD = Data Carrier Detect
DSR = Data Set Ready

and refer to the following:
* Input Sensitivity using DSR
- MODE option IDSR, default ON
- If this setting is ON, then the driver will only accept data from the device while the DSR line is active.
* Output Handshaking using CTS, DSR, DCD
- MODE options OCTS, ODSR, default is both ON
- No MODE option for DCD - MODE always sets it OFF
- This setting controls whether CTS, DSR or DCD are used to control the flow of data to the modem. If any of these settings are ON, the driver stops
giving data to the transmit hardware as soon as the corresponding control signal drops.

* RTS Control Mode
- MODE option RTS, default is ON. Can be one of the following:
+ Enabled...............................................[MODE=ON]
+ Disabled..............................................[MODE=OFF]
+ Input Handshaking (RTS drops on input queue full).....[MODE=HS]
+ Toggling on Transmit (RTS drops unless transmitting)..[MODE=TOG]
- This setting controls how the RTS signal is controlled by the driver. If ON, DTR is used to signal when the COM: port is active, while if HS, DTR is
used to control the flow of data from the modem.

* DTR Control Mode
- MODE option DTR, default is ON. Can be one of the following:
+ Enabled..............................................[MODE=ON]
+ Disabled.............................................[MODE=OFF]
+ Input Handshaking (DTR drops on input queue full)....[MODE=HS]
- This setting controls how the DTR signal is used to control the flow of data.
- This setting controls how the RTS signal is controlled by the driver. If ON, DTR is used to signal when the COM: port is active, while if HS, DTR is
used to control the flow of data from the modem.

A typical default configuration for the COM: port is (ignoring some of the MODE parameters not relevant to this post):

IDSR=ON, ODSR=ON
OCTS=ON, DTR=ON
RTS=ON, BUFFER=AUTO

Setting Interaction:
For the purposes of this article (getting the most performance out of the 16550), the only settings that are really important from the above discussion are the "Extended Hardware Buffering" (BUFFER), "Input Sensitivity using DSR" (IDSR), and "Output Handshaking using CTS, DSR, DCD" (OCTS,ODSR).

Here's the basic problem. In order to accomplish the latter two settings in their default modes, the AUTO buffering mode basically stops using the FIFO buffers. In particular, the following adjustments are "automatically" made:

* If IDSR is enabled, then the COM: driver is set up to respond to a lowering of the DSR signal within one character time. To ensure this, the driver adjusts the receive trigger to be a single character. In other words, it lets the 16550 generate an interrupt per character. The full 16-character receive buffer is still available to prevent receive overruns, and the transmit trigger is not adjusted.

* If either OCTS, ODSR (or ODCD - only changeable from a program) are enabled, then the device driver will respond to a lowering of the appropriate signal within a single character time. To do this, the transmit trigger is lowered to a single character - the 16550 is set to generate a transmit interrupt for each character, although the receive trigger is not adjusted.

The reason both of these automatic adjustments are made is to take the safe course, and assume that anything using these signals have been designed to assume that the signals take action within a single character time. For example, without fixing the transmit trigger, the modem could lower the CTS signal, but the 16550 might continue transmitting up to 15 characters that might still be in the FIFO transmit queue.

Of course, the problem is that with the default settings, both of these rules come into effect, and the driver ends up getting an interrupt per character for both transmitting and receiving characters. In other words, you end up using the 16550 just like any lower UART, with the single advantage that the receive FIFO buffer on the chip helps avoid receive overruns.

Improving Settings
In order to make more effective use of the 16550, you can do one of three things:

  • Explicitly set the extended buffering on (MODE BUFFER=ON).
  • Disable IDSR sensitivity (MODE IDSR=OFF)
  • Disable any output flow control (MODE OCTS=OFF,ODSR=OFF)

Of the three, the former is preferred, but you may have reasons to do one of the latter two. By explicitly setting the buffering on, you will override the rules above that adjust the receive and transmit triggers. What this means is that you may receive extraneous data if DSR is actually being used to signal input and that if the modem asks the driver to stop sending data (CTS), it may still receive up to 15 more characters.

This problem should not effect most modem users. Most modems hold DSR high while they are on (or at least are configurable to do this), and most modems that handle hardware flow control (RTS/CTS) drop CTS before they are absolutely out of room.

Summary
An important aspect of the support for 16550 UARTs within the OS/2 2.0 COM: driver is the interaction between various modem control handshaking settings and the automatic control of extended buffering. In particular, several of the default COM: port settings (IDSR=ON,OCTS=ON,ODSR=ON) when automatic control (BUFFER=AUTO) is enabled force the driver not to use the enhanced buffering of the 16550, and instead generate interrupts for each character transmitted or received. This can decrease performance and definitely places a heavier load on the machine.

The easiest way to solve this is to use a setting of BUFFER=ON rather than BUFFER=AUTO, as long as it won't cause problems overrunning your modem or receiving extraneous information (see "Improving Settings" above).

For the DOS Box, one hint to users trying to get reasonable performance out of DOS COM: applications - BUFFER=ON may also help this situation, but if you can live with 9600 baud, and your application supports using the BIOS interface to the COM: port, try using that mode. You may be to run the application successfully at higher data rates through the emulated BIOS interface than if the application tries to use the emulated COM: hardware directly.