Like XMODEM-CRC, YMODEM replaced the 8-bit checksum with a 16-bit cyclic redundancy check (CRC), but made it the default form of correction instead of optional.
Finally, YMODEM allowed the block size to be increased from the original 128 bytes of data to 1024, as in XMODEM-1k, which greatly improved throughput on faster modems.
Forsberg built the standard with all of these features as runtime options, allowing a single protocol driver to fall back to XMODEM-CRC or even XMODEM when connecting to non-YAM systems.
The original XMODEM was a very simple protocol and that is the reason for its success; it could be implemented on practically any machine of the era, even those with very limited processors and storage.
The small packet size and requirement to wait for the ACK or NAK led to slow performance on higher speed links or ones with significant latency.
Chuck Forsberg, author of the CP/M "Yet Another Modem program", or YAM, decided to write a single protocol driver that supported many features compared to XMODEM and called it YMODEM.
When the users started a transfer they could indicate which options they wanted on the command line, for instance, saying they wished to use CRC.
The protocol was written so that it would attempt this style, but gracefully fall-back to match whatever capabilities the remote software did implement.
Some implementations had added the ability to send a CAN instead of ACK or NAK at the end of a received packet to indicate an abort.
YAM thus modified this slightly to require two CANs back-to-back, which would immediately perform a "graceful abort" on the sender end.
This was a very simple change to the original protocol; if requested, the receiver would attempt to trigger the transfer by sending an initial C instead of a NAK.
When such a connection was started, the sender could choose to send either 1024 bytes in a packet or 128, indicating the larger with an STX character in the header rather than the normal SOH.
This was not reliable, and TeLink improved this by placing the filename, and optionally other data like the creation date and file length, in a complete 128-byte packet.
Normally, a YMODEM transfer would be started by the receiver sending a C to indicate it wants to use the 128-byte format with CRC, or NAK if it wishes to use the original checksum system.