• Please review our updated Terms and Rules here

Major problem with setting more than 9600 baud for COM1 port of an IBM PC/XT

z80eu

Experienced Member
Joined
Feb 26, 2014
Messages
51
Location
Germany
I was quite surprised how difficult it is to set a serial port (COM1, the used I/O card has a working 16550 UART) to a baud rate of more than 9600 baud - all done with an original IBM PC/XT.
I figured out that the BIOS itself (NOT the used DOS 5.0) prevents to set more than 9600 baud (at least with programs which uses INT 14h).
But even (external) commands/programs for my Wilke Tech. SA-20 Eprom programmer (SA.EXE) which have a build in setup for the serial port do NOT work with higher baud rates.

Unfortunately if I am using some utilities like TOADMOD1 to set the port (I could check the result by MSD) to 19200 baud, the main program SA.EXE itself changed the baud rate in a way, that the new settings (like 19200) don't work.

I've looked also for a BIOS extension (INT 14h replacement) program, but it seems this is impossible - I've found some programs which claims to extend the INT 14h, but they didn't improve the possibility to set a higher baud rate.
So I'm doomed to use only 9600 baud with an IBM PC/XT ?
 
Most comms programs set the serial port up, including bitrate. Unless you're willing to hack them, that's pretty much it. If you were an OEM, Microsoft allowed you to add extensions to MODE, but such wasn't in the generic program.

Who the heck uses INT 14h for serious work anyway? Because it's limited to character-at-a-time, polled I/O,, it's pretty much useless at higher speeds.

The 16550 and later chips came much after the 5160 at any rate.
 
Dimes to dollars a PC or XT is going to have a 8250 UART that tops out at 9600 Baud anyways -- as Chuck(g) said, the 16550's with their higher throughput capability didn't materialize until much later... Pull your serial card, what's on it for a chip?

... and yeah, using BIOS for serial is probably gonna suck too, though with a max limit of 9600 baud of a 8250 UART it probably doesn't make a difference.
 
Dimes to dollars a PC or XT is going to have a 8250 UART that tops out at 9600 Baud anyways -- as Chuck(g) said, the 16550's with their higher throughput capability didn't materialize until much later... Pull your serial card, what's on it for a chip?

... and yeah, using BIOS for serial is probably gonna suck too, though with a max limit of 9600 baud of a 8250 UART it probably doesn't make a difference.

I often run 8250's higher than 9600. 19,200 and 38400 have proved to be fairly safe.

But as Chuck said, you usually just don't use those routines. For my recent C project I just used a RS232 library somebody else had written - can set the rate anywhere from 300 to 115,200.
 
A bit of historical perspective is also useful. When the PC XT came out, the primary use for asynchronous serial was communications, almost always using a modem. There were some very expensive 9600 bps modems, mostly for leased lines back in 1981, so the need of much faster speed wasn't really an issue. Computer-to-computer direct-wired comm was less common--and there was special hardware for stuff like SDLC/HLDC and bisync (now, mostly a memory, but really efficient in block-mode computer-to-computer communication).

In fact, when I was using a 5160 as a terminal for a VAX 11/750 (hard-wired, not modem--ISTR, a DZ-11), I don't recall being able to go much higher than 9600.
 
Most consumer/small business affordable modems of the PC & XT era (August 1981-April 2, 1987) were 300 and 1200 baud, so a 8250B UART with a 9600 maximum baud rate had quite a bit of breathing room to communicate with these modems.
 
Dimes to dollars a PC or XT is going to have a 8250 UART that tops out at 9600 Baud anyways -- as Chuck(g) said, the 16550's with their higher throughput capability didn't materialize until much later... Pull your serial card, what's on it for a chip?

... and yeah, using BIOS for serial is probably gonna suck too, though with a max limit of 9600 baud of a 8250 UART it probably doesn't make a difference.


I thought I wrote already (see above: "... COM1, the used I/O card has a working 16550 UART...") what chip is used, it's definitely a 16550 UART inserted in the cards UART socket.
I have no problem with that chip. I have a problem using higher baud rates, because the software does not respect the "better" UART chip, nor higher baud rates.
One idea was to patch my own PC BIOS in that way, that a low baud rate value I don't use is replaced in the oscillator table with a value, which correspond with 19200 baud. So everytime I use 300 baud, I will use 19200 baud instead automatically. This can be done with an INT14h extension by a TSR software also.

I have no idea how to change the readily compiled software (from a software vendor, not me) that it's no more using INT14h function for baud rate setting.
 
Since INT 14H isn't essential to the boot process, just write a small TSR to "hook" the interrupt and do your own baud setting.

Did any of the FOSSIL drivers do this?
 
Since INT 14H isn't essential to the boot process, just write a small TSR to "hook" the interrupt and do your own baud setting.

Did any of the FOSSIL drivers do this?

Chuck, thanks for remembering me about it. X00 do this (replacing unused slow baud rates with 19200 and 38400 Baud) while BNU has a "lock baud rate" feature (both are good ideas to get "baud rate incompatible" applications again compatible).
I will test it and if interesting for all, posting the results.
 
Back
Top