From Wikipedia, the free encyclopedia
Jump to: navigation, search
Communications protocol
Purpose file transfer protocol
Developer(s) Chuck Forsberg
Introduced 1985; 31 years ago (1985)
Based on XMODEM
Influenced ZMODEM
Port(s) None
Hardware modems

YMODEM is a file transfer protocol used between microcomputers connected together using 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.

Common variants[edit]

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.


External links[edit]