[vcf-midatlantic] A "100%" Efficient BBS Transfer Protocol
john.heritage at gmail.com
Mon Oct 14 19:55:03 EDT 2019
It always bugged me back in the day that ZModem (and even Ymodem-G) left
some performance on the table. For a 14.4 kbps modem with a theoretical
perfect transfer rate of 1800 characters per second (assume no data
compression, flawless connection, etc) -- ZModem would give you something
like 1650-1660 cps and Ymodem-G would give you up to 1730 cps under ideal
conditions. Ymodem-G of course had no error recovery (though it did send
CRCs to help indicate whether or not there was a problem).
In the interest of trying to use 100% of "upload" bandwidth, I always
wanted to write a protocol that used the back channel to send CRCs from the
'download' computer to the upload source computer. (Even on
asymmetrical protocols like USRobotics standards, 450 bps 'back channel'
should be enough for this..)
This protocol would operate like ZModem or YModem-G where the uploader just
keeps streaming, but no CRCs would be sent with the transfer. Instead, the
'sender' computer would simply pre-calculate CRCs for every 1K or so; the
receiver computer would calculate after receiving that 1K, and send back to
the uploader. The uploader would go back and verify that it was getting
the right CRCs in the right order (you could pre-calculate these and store
in RAM before the transfer starts to reduce CPU load during transfer). If
no problems were encountered - you might hit that theoretical 1800 cps.
If problems were encountered - you'd either pause for some period of time
and then re-send the last 3-4 good sets of CRCs to alert the 'receiver'
computer that the transfer had to resume from an earlier state and would
start after those 3-4 CRC sets were sent.
Anyway just some thoughts. Something I might try in C sometime with a
couple of modems...
More information about the vcf-midatlantic