SupraFaxModem problems
03-May-93 22:29:26
Sb: #97954-SupraFaxModem problems
Fm: Graham Reed 72164,1750
To: Ron Legro 75136,2066
I'll just throw in a little more detail on this "hardware flow control,"
also known as Hardware Handshake, RTS/CTS handshake, or 7-wire handshake.
(Yes, this _is_ on a so-called standard interface.)
The chips in both the computer and modem which convert bytes of data to
bit-streams are called either UARTs or ACIAs. These chips have,
typically, two bytes of working space for receiving data: a shift register
which is used to convert a bit stream to a whole byte, and a buffer to
hold a byte until the computer can read it.
When a byte is received in the shift register, it is put in the buffer so
a second byte can arrive. If the computer doesn't manage to read the
_first_ byte before the second is finished, then the ACIA/UART will turn
off one of the handshake lines. These lines connect to the transmitter
control on the other chip; when the transmitter sees the wire turned off,
it will not send the next byte. This allows the hardware to pace itself
to the software's ability to read incoming data without additional
software overhead.
You may also be familliar with the buffer setting in serial preferences.
This buffer is used by serial.device (or equivelent) to hold data as it
comes in from the serial port. This allows the computer to receive data
when the application program is busy. Sometimes application programs need
to do something momentarily, like a window operation or write data to
disk. The computer still has enough time to deal with the serial port,
but the application program isn't available to deal with all the data. A
large buffer will allow a ZModem transfer to proceed at full speed, even
though the computer can take quite a while to save files to disk.
Notice that the transmitter doesn't have to use any extra wires to tell
the receiver to slow down — all the important timing is encoded in the
signal.
I know this is a lot to read through, but maybe it'll help people
understand some of the terms people toss around, and help you diagnose
faults in your software. (For example, no handhaking gives missing data;
buffer too small gives slow/inefficient transfers.)
For comparison, I get transfers as high as 3600 bytes/second (38400 baud)
on a 7.14 MHz 68000 with far too many commodities and the slowest
hard-disks ever connected to a A2090A controller. I use BaudBandit.device
instead of the stock C= serial.device; this is important for anyone on a
slower processor.