CompuServe Messages

SupraFaxModem problems

    03-May-93 22:29:26
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.