|This article does not cite any references or sources. (January 2009)|
YMODEM is a protocol for file transfer used between modems. YMODEM was developed by Chuck Forsberg as the successor to XMODEM and MODEM7, and was first implemented in his CP/M YAM program. It was formally given the name "YMODEM" in 1985 by Ward Christensen.
The original YMODEM was essentially the same as XMODEM except that it sent the file's name, size, and timestamp in a regular XMODEM block, "block 0", before actually transferring the file. Sending the file size solved XMODEM's problem of superfluous padding at the end of the file.
Forsberg built the standard with a number of optional features, believing that programmers would want to implement as many as possible on any given platform. He was dismayed to find that the majority of implementations were actually providing nothing more than 1 kilobyte block size with CRC-16, while continuing to use the "YMODEM" name. The result was a large number of mutually incompatible YMODEMs.
YMODEM-1K uses a block size of one kilobyte instead of the standard 128 bytes. 1K blocks were an option in the original YMODEM standard, but this variant is missing the rest of the features, and is best described as a 1k variant of XMODEM.
YMODEM-g is a streaming variant used for error-free connections. It simply removes the CRC and does not wait for an ACK to be received before sending the next packet. The protocol was faster than YMODEM because no error-checking is performed. However, despite this protocol potentially being faster than ZMODEM it was still rarely used. This was partially due to the lack of other functionality, but also a more serious issue. Before the emergence of the 16550 UART, there was a serious risk of buffer overrun on the serial port, and YMODEM-g would not notice this.
- XMODEM / YMODEM Protocol Reference by Chuck Forsberg, October 10, 1985
- XMODEM / YMODEM Protocol Reference by Chuck Forsberg, June 18, 1988 (document reformatted October 14, 1988) (HTML version with text issues)