


                                      - 1 -



                         XMODEM/YMODEM PROTOCOL REFERENCE
                     A compendium of documents describing the

                                XMODEM and YMODEM

                             File Transfer Protocols




                      This document was formatted 10-14-88.







                             Edited by Chuck Forsberg









                This file may be redistributed without restriction
                        provided the text is not altered.

                     Please distribute as widely as possible.

                           Questions to Chuck Forsberg





                               Omen Technology Inc
                          The High Reliability Software
                            17505-V Sauvie Island Road
                              Portland Oregon 97231
                            VOICE: 503-621-3406 :VOICE
      TeleGodzilla BBS: 503-621-3746 Speed 19200(Telebit PEP),2400,1200,300
                              CompuServe: 70007,2304
                                    GEnie: CAF
                        UUCP: ...!tektronix!reed!omen!caf














                                      - 2 -



    1.  TOWER OF BABEL

    A "YMODEM Tower of Babel" has descended on the microcomputing community
    bringing with it confusion, frustration, bloated phone bills, and wasted
    man hours.  Sadly, I (Chuck Forsberg) am partly to blame for this mess.

    As author of the early 1980s batch and 1k XMODEM extensions, I assumed
    readers of earlier versions of this document would implement as much of
    the YMODEM protocol as their programming skills and computing environments
    would permit.  This proved a rather naive assumption as programmers
    motivated by competitive pressure implemented as little of YMODEM as
    possible.  Some have taken whatever parts of YMODEM that appealed to them,
    applied them to MODEM7 Batch, Telink, XMODEM or whatever, and called the
    result YMODEM.

    Jeff Garbers (Crosstalk package development director) said it all: "With
    protocols in the public domain, anyone who wants to dink around with them
    can go ahead." [1]

    Documents containing altered examples derived from YMODEM.DOC have added
    to the confusion.  In one instance, some self styled rewriter of history
    altered the heading in YMODEM.DOC's Figure 1 from "1024 byte Packets" to
    "YMODEM/CRC File Transfer Protocol".  None of the XMODEM and YMODEM
    examples shown in that document were correct.

    To put an end to this confusion, we must make "perfectly clear" what
    YMODEM stands for, as Ward Christensen defined it in his 1985 coining of
    the term.

    To the majority of you who read, understood, and respected Ward's
    definition of YMODEM, I apologize for the inconvenience.

    1.1  Definitions

    ARC     ARC is a program that compresses one or more files into an archive
            and extracts files from such archives.

    XMODEM  refers to the file transfer etiquette introduced by Ward
            Christensen's 1977 MODEM.ASM program.  The name XMODEM comes from
            Keith Petersen's XMODEM.ASM program, an adaptation of MODEM.ASM
            for Remote CP/M (RCPM) systems.  It's also called the MODEM or
            MODEM2 protocol.  Some who are unaware of MODEM7's unusual batch
            file mode call it MODEM7.  Other aliases include "CP/M Users'
            Group" and "TERM II FTP 3".  The name XMODEM caught on partly
            because it is distinctive and partly because of media interest in


    __________

     1. Page C/12, PC-WEEK July 12, 1987




    Chapter 1







    X/YMODEM Protocol Reference    June 18 1988                              3



            bulletin board and RCPM systems where it was accessed with an
            "XMODEM" command.  This protocol is supported by every serious
            communications program because of its universality, simplicity,
            and reasonable performance.

    XMODEM/CRC replaces XMODEM's 1 byte checksum with a two byte Cyclical
            Redundancy Check (CRC-16), giving modern error detection
            protection.

    XMODEM-1k Refers to the XMODEM/CRC protocol with 1024 byte data blocks.

    YMODEM  Refers to the XMODEM/CRC (optional 1k blocks) protocol with batch
            transmission as described below.  In a nutshell, YMODEM means
            BATCH.

    YMODEM-g Refers to the streaming YMODEM variation described below.

    True YMODEM(TM) In an attempt to sort out the YMODEM Tower of Babel, Omen
            Technology has trademarked the term True YMODEM(TM) to represent
            the complete YMODEM protocol described in this document, including
            pathname, length, and modification date transmitted in block 0.
            Please contact Omen Technology about certifying programs for True
            YMODEM(TM) compliance.

    ZMODEM  uses familiar XMODEM/CRC and YMODEM technology in a new protocol
            that provides reliability, throughput, file management, and user
            amenities appropriate to contemporary data communications.

    ZOO     Like ARC, ZOO is a program that compresses one or more files into
            a "zoo archive".  ZOO supports many different operating systems
            including Unix and VMS.























    Chapter 1







    X/YMODEM Protocol Reference    June 18 1988                              4



    2.  YMODEM MINIMUM REQUIREMENTS

    All programs claiming to support YMODEM must meet the following minimum
    requirements:

       + The sending program shall send the pathname (file name) in block 0.

       + The pathname shall be a null terminated ASCII string as described
         below.

         For those who are too lazy to read the entire document:

            + Unless specifically requested, only the file name portion is
              sent.

            + No drive letter is sent.

            + Systems that do not distinguish between upper and lower case
              letters in filenames shall send the pathname in lower case only.


       + The receiving program shall use this pathname for the received file
         name, unless explicitly overridden.

       + When the receiving program receives this block and successfully
         opened the output file, it shall acknowledge this block with an ACK
         character and then proceed with a normal XMODEM file transfer
         beginning with a "C" or NAK tranmsitted by the receiver.

       + The sending program shall use CRC-16 in response to a "C" pathname
         nak, otherwise use 8 bit checksum.

       + The receiving program must accept any mixture of 128 and 1024 byte
         blocks within each file it receives.  Sending programs may
         arbitrarily switch between 1024 and 128 byte blocks.

       + The sending program must not change the length of an unacknowledged
         block.

       + At the end of each file, the sending program shall send EOT up to ten
         times until it receives an ACK character.  (This is part of the
         XMODEM spec.)

       + The end of a transfer session shall be signified by a null (empty)
         pathname, this pathname block shall be acknowledged the same as other
         pathname blocks.

    Programs not meeting all of these requirements are not YMODEM compatible,
    and shall not be described as supporting YMODEM.

    Meeting these MINIMUM requirements does not guarantee reliable file



    Chapter 2







    X/YMODEM Protocol Reference    June 18 1988                              5



    transfers under stress.  Particular attention is called to XMODEM's single
    character supervisory messages that are easily corrupted by transmission
    errors.



















































    Chapter 2







    X/YMODEM Protocol Reference    June 18 1988                              6



    3.  WHY YMODEM?

    Since its development half a decade ago, the Ward Christensen modem
    protocol has enabled a wide variety of computer systems to interchange
    data.  There is hardly a communications program that doesn't at least
    claim to support this protocol.

    Advances in computing, modems and networking have revealed a number of
    weaknesses in the original protocol:

       + The short block length caused throughput to suffer when used with
         timesharing systems, packet switched networks, satellite circuits,
         and buffered (error correcting) modems.

       + The 8 bit arithmetic checksum and other aspects allowed line
         impairments to interfere with dependable, accurate transfers.

       + Only one file could be sent per command.  The file name had to be
         given twice, first to the sending program and then again to the
         receiving program.

       + The transmitted file could accumulate as many as 127 extraneous
         bytes.

       + The modification date of the file was lost.

    A number of other protocols have been developed over the years, but none
    have displaced XMODEM to date:

       + Lack of public domain documentation and example programs have kept
         proprietary protocols such as Blast, Relay, and others tightly bound
         to the fortunes of their suppliers.

       + Complexity discourages the widespread application of BISYNC, SDLC,
         HDLC, X.25, and X.PC protocols.

       + Performance compromises and complexity have limited the popularity of
         the Kermit protocol, which was developed to allow file transfers in
         environments hostile to XMODEM.

    The XMODEM protocol extensions and YMODEM Batch address some of these
    weaknesses while maintaining most of XMODEM's simplicity.

    YMODEM is supported by the public domain programs YAM (CP/M),
    YAM(CP/M-86), YAM(CCPM-86), IMP (CP/M), KMD (CP/M), rz/sz (Unix, Xenix,
    VMS, Berkeley Unix, Venix, Xenix, Coherent, IDRIS, Regulus).  Commercial
    implementations include MIRROR, and Professional-YAM.[1] Communications







    Chapter 3







    X/YMODEM Protocol Reference    June 18 1988                              7



    programs supporting these extensions have been in use since 1981.

    The 1k block length (XMODEM-1k) described below may be used in conjunction
    with YMODEM Batch Protocol, or with single file transfers identical to the
    XMODEM/CRC protocol except for minimal changes to support 1k blocks.

    Another extension is the YMODEM-g protocol.  YMODEM-g provides batch
    transfers with maximum throughput when used with end to end error
    correcting media, such as X.PC and error correcting modems, including 9600
    bps units by TeleBit, U.S.Robotics, Hayes, Electronic Vaults, Data Race,
    and others.

    To complete this tome, edited versions of Ward Christensen's original
    protocol document and John Byrns's CRC-16 document are included for
    reference.

    References to the MODEM or MODEM7 protocol have been changed to XMODEM to
    accommodate the vernacular.  In Australia, it is properly called the
    Christensen Protocol.


    3.1  Some Messages from the Pioneer

    #: 130940 S0/Communications 25-Apr-85  18:38:47
    Sb: my protocol
    Fm: Ward Christensen 76703,302 [2]
    To: all

    Be aware the article[3] DID quote me correctly in terms of the phrases
    like "not robust", etc.

    It was a quick hack I threw together, very unplanned (like everything I
    do), to satisfy a personal need to communicate with "some other" people.

    ONLY the fact that it was done in 8/77, and that I put it in the public
    domain immediately, made it become the standard that it is.







    __________________________________________________________________________

     1. Available for IBM PC,XT,AT, Unix and Xenix

     2. Edited for typesetting appearance

     3. Infoworld April 29 p. 16




    Chapter 3







    X/YMODEM Protocol Reference    June 18 1988                              8



    I think its time for me to

    (1) document it; (people call me and say "my product is going to include
    it - what can I 'reference'", or "I'm writing a paper on it, what do I put
    in the bibliography") and

    (2) propose an "incremental extension" to it, which might take "exactly"
    the form of Chuck Forsberg's YAM protocol.  He wrote YAM in C for CP/M and
    put it in the public domain, and wrote a batch protocol for Unix[4] called
    rb and sb (receive batch, send batch), which was basically XMODEM with
       (a) a record 0 containing filename date time and size
       (b) a 1K block size option
       (c) CRC-16.

    He did some clever programming to detect false ACK or EOT, but basically
    left them the same.

    People who suggest I make SIGNIFICANT changes to the protocol, such as
    "full duplex", "multiple outstanding blocks", "multiple destinations", etc
    etc don't understand that the incredible simplicity of the protocol is one
    of the reasons it survived to this day in as many machines and programs as
    it may be found in!

    Consider the PC-NET group back in '77 or so - documenting to beat the band
    - THEY had a protocol, but it was "extremely complex", because it tried to
    be "all things to all people" - i.e. send binary files on a 7-bit system,
    etc.  I was not that "benevolent". I (emphasize > I < ) had an 8-bit UART,
    so "my protocol was an 8-bit protocol", and I would just say "sorry" to
    people who were held back by 7-bit limitations.  ...

    Block size: Chuck Forsberg created an extension of my protocol, called
    YAM, which is also supported via his public domain programs for UNIX
    called rb and sb - receive batch and send batch.  They cleverly send a
    "block 0" which contains the filename, date, time, and size.
    Unfortunately, its UNIX style, and is a bit weird[5] - octal numbers, etc.
    BUT, it is a nice way to overcome the kludgy "echo the chars of the name"
    introduced with MODEM7.  Further, chuck uses CRC-16 and optional 1K
    blocks.  Thus the record 0, 1K, and CRC, make it a "pretty slick new
    protocol" which is not significantly different from my own.

    Also, there is a catchy name - YMODEM.  That means to some that it is the
    "next thing after XMODEM", and to others that it is the Y(am)MODEM


    __________

     4. VAX/VMS versions of these programs are also available.

     5. The file length, time, and file mode are optional.  The pathname and
        file length may be sent alone if desired.




    Chapter 3







    X/YMODEM Protocol Reference    June 18 1988                              9



    protocol.  I don't want to emphasize that too much - out of fear that
    other mfgrs might think it is a "competitive" protocol, rather than an
    "unaffiliated" protocol.  Chuck is currently selling a much-enhanced
    version of his CP/M-80 C program YAM, calling it Professional Yam, and its
    for the PC - I'm using it right now.  VERY slick!  32K capture buffer,
    script, scrolling, previously captured text search, plus built-in commands
    for just about everything - directory (sorted every which way), XMODEM,
    YMODEM, KERMIT, and ASCII file upload/download, etc.  You can program it
    to "behave" with most any system - for example when trying a number for
    CIS it detects the "busy" string back from the modem and substitutes a
    diff phone # into the dialing string and branches back to try it.











































    Chapter 3







    X/YMODEM Protocol Reference    June 18 1988                             10



    4.  XMODEM PROTOCOL ENHANCEMENTS

    This chapter discusses the protocol extensions to Ward Christensen's 1982
    XMODEM protocol description document.

    The original document recommends the user be asked whether to continue
    trying or abort after 10 retries.  Most programs no longer ask the
    operator whether he wishes to keep retrying.  Virtually all correctable
    errors are corrected within the first few retransmissions.  If the line is
    so bad that ten attempts are insufficient, there is a significant danger
    of undetected errors.  If the connection is that bad, it's better to
    redial for a better connection, or mail a floppy disk.


    4.1  Graceful Abort

    The YAM and Professional-YAM X/YMODEM routines recognize a sequence of two
    consecutive CAN (Hex 18) characters without modem errors (overrun,
    framing, etc.) as a transfer abort command.  This sequence is recognized
    when is waiting for the beginning of a block or for an acknowledgement to
    a block that has been sent.  The check for two consecutive CAN characters
    reduces the number of transfers aborted by line hits.  YAM sends eight CAN
    characters when it aborts an XMODEM, YMODEM, or ZMODEM protocol file
    transfer.  Pro-YAM then sends eight backspaces to delete the CAN
    characters from the remote's keyboard input buffer, in case the remote had
    already aborted the transfer and was awaiting a keyboarded command.


    4.2  CRC-16 Option

    The XMODEM protocol uses an optional two character CRC-16 instead of the
    one character arithmetic checksum used by the original protocol and by
    most commercial implementations.  CRC-16 guarantees detection of all
    single and double bit errors,  all errors with an odd number of error
    bits, all burst errors of length 16 or less, 99.9969% of all 17-bit error
    bursts, and 99.9984 per cent of all possible longer error bursts.  By
    contrast, a double bit error, or a burst error of 9 bits or more can sneak
    past the XMODEM protocol arithmetic checksum.

    The XMODEM/CRC protocol is similar to the XMODEM protocol, except that the
    receiver specifies CRC-16 by sending C (Hex 43) instead of NAK when
    requesting the FIRST block.  A two byte CRC is sent in place of the one
    byte arithmetic checksum.

    YAM's c option to the r command enables CRC-16 in single file reception,
    corresponding to the original implementation in the MODEM7 series
    programs.  This remains the default because many commercial communications
    programs and bulletin board systems still do not support CRC-16,
    especially those written in Basic or Pascal.

    XMODEM protocol with CRC is accurate provided both sender and receiver



    Chapter 4                                     XMODEM Protocol Enhancements







    X/YMODEM Protocol Reference    June 18 1988                             11



    both report a successful transmission.  The protocol is robust in the
    presence of characters lost by buffer overloading on timesharing systems.

    The single character ACK/NAK responses generated by the receiving program
    adapt well to split speed modems, where the reverse channel is limited to
    ten per cent or less of the main channel's speed.

    XMODEM and YMODEM are half duplex protocols which do not attempt to
    transmit information and control signals in both directions at the same
    time.  This avoids buffer overrun problems that have been reported by
    users attempting to exploit full duplex asynchronous file transfer
    protocols such as Blast.

    Professional-YAM adds several proprietary logic enhancements to XMODEM's
    error detection and recovery.  These compatible enhancements eliminate
    most of the bad file transfers other programs make when using the XMODEM
    protocol under less than ideal conditions.


    4.3  XMODEM-1k 1024 Byte Block

    Disappointing throughput downloading from Unix with YMODEM[1] lead to the
    development of 1024 byte blocks in 1982.  1024 byte blocks reduce the
    effect of delays from timesharing systems, modems, and packet switched
    networks on throughput by 87.5 per cent in addition to decreasing XMODEM's
    3 per cent overhead (block number, CRC, etc.).

    Some environments cannot accept 1024 byte bursts, including some networks
    and minicomputer ports.  The longer block length should be an option.

    The choice to use 1024 byte blocks is expressed to the sending program on
    its command line or selection menu.[2] 1024 byte blocks improve throughput
    in many applications.

    An STX (02) replaces the SOH (01) at the beginning of the transmitted
    block to notify the receiver of the longer block length.  The transmitted
    block contains 1024 bytes of data.  The receiver should be able to accept
    any mixture of 128 and 1024 byte blocks.  The block number (in the second
    and third bytes of the block) is incremented by one for each block
    regardless of the block length.

    The sender must not change between 128 and 1024 byte block lengths if it
    has not received a valid ACK for the current block.  Failure to observe


    __________

     1. The name hadn't been coined yet, but the protocol was the same.

     2. See "KMD/IMP Exceptions to YMODEM" below.




    Chapter 4                                     XMODEM Protocol Enhancements







    X/YMODEM Protocol Reference    June 18 1988                             12



    this restriction allows transmission errors to pass undetected.

    If 1024 byte blocks are being used, it is possible for a file to "grow" up
    to the next multiple of 1024 bytes.  This does not waste disk space if the
    allocation granularity is 1k or greater.  With YMODEM batch transmission,
    the optional file length transmitted in the file name block allows the
    receiver to discard the padding, preserving the exact file length and
    contents.

    1024 byte blocks may be used with batch file transmission or with single
    file transmission.  CRC-16 should be used with the k option to preserve
    data integrity over phone lines.  If a program wishes to enforce this
    recommendation, it should cancel the transfer, then issue an informative
    diagnostic message if the receiver requests checksum instead of CRC-16.

    Under no circumstances may a sending program use CRC-16 unless the
    receiver commands CRC-16.

             Figure 1.  XMODEM-1k Blocks

             SENDER                                  RECEIVER
                                                     "sx -k foo.bar"
             "foo.bar open x.x minutes"
                                                     C
             STX 01 FE Data[1024] CRC CRC
                                                     ACK
             STX 02 FD Data[1024] CRC CRC
                                                     ACK
             STX 03 FC Data[1000] CPMEOF[24] CRC CRC
                                                     ACK
             EOT
                                                     ACK

             Figure 2.  Mixed 1024 and 128 byte Blocks

             SENDER                                  RECEIVER
                                                     "sx -k foo.bar"
             "foo.bar open x.x minutes"
                                                     C
             STX 01 FE Data[1024] CRC CRC
                                                     ACK
             STX 02 FD Data[1024] CRC CRC
                                                     ACK
             SOH 03 FC Data[128] CRC CRC
                                                     ACK
             SOH 04 FB Data[100] CPMEOF[28] CRC CRC
                                                     ACK
             EOT
                                                     ACK





    Chapter 4                                     XMODEM Protocol Enhancements







    X/YMODEM Protocol Reference    June 18 1988                             13



    5.  YMODEM Batch File Transmission

    The YMODEM Batch protocol is an extension to the XMODEM/CRC protocol that
    allows 0 or more files to be transmitted with a single command.  (Zero
    files may be sent if none of the requested files is accessible.) The
    design approach of the YMODEM Batch protocol is to use the normal routines
    for sending and receiving XMODEM blocks in a layered fashion similar to
    packet switching methods.

    Why was it necessary to design a new batch protocol when one already
    existed in MODEM7?[1] The batch file mode used by MODEM7 is unsuitable
    because it does not permit full pathnames, file length, file date, or
    other attribute information to be transmitted.  Such a restrictive design,
    hastily implemented with only CP/M in mind, would not have permitted
    extensions to current areas of personal computing such as Unix, DOS, and
    object oriented systems.  In addition, the MODEM7 batch file mode is
    somewhat susceptible to transmission impairments.

    As in the case of single a file transfer, the receiver initiates batch
    file transmission by sending a "C" character (for CRC-16).

    The sender opens the first file and sends block number 0 with the
    following information.[2]

    Only the pathname (file name) part is required for batch transfers.

    To maintain upwards compatibility, all unused bytes in block 0 must be set
    to null.

    Pathname The pathname (conventionally, the file name) is sent as a null
         terminated ASCII string.  This is the filename format used by the
         handle oriented MSDOS(TM) functions and C library fopen functions.
         An assembly language example follows:
                                  DB      'foo.bar',0
         No spaces are included in the pathname.  Normally only the file name
         stem (no directory prefix) is transmitted unless the sender has
         selected YAM's f option to send the full pathname.  The source drive
         (A:, B:, etc.) is not sent.

         Filename Considerations:



    __________

     1. The MODEM7 batch protocol transmitted CP/M FCB bytes f1...f8 and
        t1...t3 one character at a time.  The receiver echoed these bytes as
        received, one at a time.

     2. Only the data part of the block is described here.




    Chapter 5                                     XMODEM Protocol Enhancements







    X/YMODEM Protocol Reference    June 18 1988                             14



            + File names are forced to lower case unless the sending system
              supports upper/lower case file names.  This is a convenience for
              users of systems (such as Unix) which store filenames in upper
              and lower case.

            + The receiver should accommodate file names in lower and upper
              case.

            + When transmitting files between different operating systems,
              file names must be acceptable to both the sender and receiving
              operating systems.

         If directories are included, they are delimited by /; i.e.,
         "subdir/foo" is acceptable, "subdir\foo" is not.

    Length The file length and each of the succeeding fields are optional.[3]
         The length field is stored in the block as a decimal string counting
         the number of data bytes in the file.  The file length does not
         include any CPMEOF (^Z) or other garbage characters used to pad the
         last block.

         If the file being transmitted is growing during transmission, the
         length field should be set to at least the final expected file
         length, or not sent.

         The receiver stores the specified number of characters, discarding
         any padding added by the sender to fill up the last block.

    Modification Date The mod date is optional, and the filename and length
         may be sent without requiring the mod date to be sent.

         Iff the modification date is sent, a single space separates the
         modification date from the file length.

         The mod date is sent as an octal number giving the time the contents
         of the file were last changed, measured in seconds from Jan 1 1970
         Universal Coordinated Time (GMT).  A date of 0 implies the
         modification date is unknown and should be left as the date the file
         is received.

         This standard format was chosen to eliminate ambiguities arising from
         transfers between different time zones.





    __________

     3. Fields may not be skipped.




    Chapter 5                                     XMODEM Protocol Enhancements







    X/YMODEM Protocol Reference    June 18 1988                             15



    Mode Iff the file mode is sent, a single space separates the file mode
         from the modification date.  The file mode is stored as an octal
         string.  Unless the file originated from a Unix system, the file mode
         is set to 0.  rb(1) checks the file mode for the 0x8000 bit which
         indicates a Unix type regular file.  Files with the 0x8000 bit set
         are assumed to have been sent from another Unix (or similar) system
         which uses the same file conventions.  Such files are not translated
         in any way.


    Serial Number Iff the serial number is sent, a single space separates the
         serial number from the file mode.  The serial number of the
         transmitting program is stored as an octal string.  Programs which do
         not have a serial number should omit this field, or set it to 0.  The
         receiver's use of this field is optional.


    Other Fields YMODEM was designed to allow additional header fields to be
         added as above without creating compatibility problems with older
         YMODEM programs.  Please contact Omen Technology if other fields are
         needed for special application requirements.

    The rest of the block is set to nulls.  This is essential to preserve
    upward compatibility.[4]

    If the filename block is received with a CRC or other error, a
    retransmission is requested.  After the filename block has been received,
    it is ACK'ed if the write open is successful.  If the file cannot be
    opened for writing, the receiver cancels the transfer with CAN characters
    as described above.

    The receiver then initiates transfer of the file contents with a "C"
    character, according to the standard XMODEM/CRC protocol.

    After the file contents and XMODEM EOT have been transmitted and
    acknowledged, the receiver again asks for the next pathname.

    Transmission of a null pathname terminates batch file transmission.

    Note that transmission of no files is not necessarily an error.  This is
    possible if none of the files requested of the sender could be opened for
    reading.



    __________

     4. If, perchance, this information extends beyond 128 bytes (possible
        with Unix 4.2 BSD extended file names), the block should be sent as a
        1k block as described above.




    Chapter 5                                     XMODEM Protocol Enhancements







    X/YMODEM Protocol Reference    June 18 1988                             16



    Most YMODEM receivers request CRC-16 by default.

    The Unix programs sz(1) and rz(1) included in the source code file
    RZSZ.ZOO should answer other questions about YMODEM batch protocol.

              Figure 3.  YMODEM Batch Transmission Session (1 file)

              SENDER                                  RECEIVER
                                                      "sb foo.*<CR>"
              "sending in batch mode etc."
                                                      C (command:rb)
              SOH 00 FF foo.c NUL[123] CRC CRC
                                                      ACK
                                                      C
              SOH 01 FE Data[128] CRC CRC
                                                      ACK
              SOH 02 FC Data[128] CRC CRC
                                                      ACK
              SOH 03 FB Data[100] CPMEOF[28] CRC CRC
                                                      ACK
              EOT
                                                      NAK
              EOT
                                                      ACK
                                                      C
              SOH 00 FF NUL[128] CRC CRC
                                                      ACK

                Figure 7.  YMODEM Header Information and Features

    _____________________________________________________________
    | Program   | Length | Date | Mode | S/N | 1k-Blk | YMODEM-g |
    |___________|________|______|______|_____|________|__________|
    |Unix rz/sz | yes    | yes  | yes  | no  | yes    | sb only  |
    |___________|________|______|______|_____|________|__________|
    |VMS rb/sb  | yes    | no   | no   | no  | yes    | no       |
    |___________|________|______|______|_____|________|__________|
    |Pro-YAM    | yes    | yes  | no   | yes | yes    | yes      |
    |___________|________|______|______|_____|________|__________|
    |CP/M YAM   | no     | no   | no   | no  | yes    | no       |
    |___________|________|______|______|_____|________|__________|
    |KMD/IMP    | ?      | no   | no   | no  | yes    | no       |
    |___________|________|______|______|_____|________|__________|

    5.1  KMD/IMP Exceptions to YMODEM

    KMD and IMP use a "CK" character sequence emitted by the receiver to
    trigger the use of 1024 byte blocks as an alternative to specifying this
    option to the sending program.  This two character sequence generally
    works well on single process micros in direct communication, provided the
    programs rigorously adhere to all the XMODEM recommendations included



    Chapter 5                                     XMODEM Protocol Enhancements







    X/YMODEM Protocol Reference    June 18 1988                             17



           Figure 4.  YMODEM Batch Transmission Session (2 files)

           SENDER                                  RECEIVER
                                                   "sb foo.c baz.c<CR>"
           "sending in batch mode etc."
                                                   C (command:rb)
           SOH 00 FF foo.c NUL[123] CRC CRC
                                                   ACK
                                                   C
           SOH 01 FE Data[128] CRC CRC
                                                   ACK
           SOH 02 FC Data[128] CRC CRC
                                                   ACK
           SOH 03 FB Data[100] CPMEOF[28] CRC CRC
                                                   ACK
           EOT
                                                   NAK
           EOT
                                                   ACK
                                                   C
           SOH 00 FF baz.c NUL[123] CRC CRC
                                                   ACK
                                                   C
           SOH 01 FB Data[100] CPMEOF[28] CRC CRC
                                                   ACK
           EOT
                                                   NAK
           EOT
                                                   ACK
                                                   C
           SOH 00 FF NUL[128] CRC CRC
                                                   ACK

            Figure 5.  YMODEM Batch Transmission Session-1k Blocks

            SENDER                                  RECEIVER
                                                    "sb -k foo.*<CR>"
            "sending in batch mode etc."
                                                    C (command:rb)
            SOH 00 FF foo.c NUL[123] CRC CRC
                                                    ACK
                                                    C
            STX 01 FD Data[1024] CRC CRC
                                                    ACK
            SOH 02 FC Data[128] CRC CRC
                                                    ACK
            SOH 03 FB Data[100] CPMEOF[28] CRC CRC
                                                    ACK
            EOT
                                                    NAK
            EOT



    Chapter 5                                     XMODEM Protocol Enhancements







    X/YMODEM Protocol Reference    June 18 1988                             18



                                                    ACK
                                                    C
            SOH 00 FF NUL[128] CRC CRC
                                                    ACK

           Figure 6.  YMODEM Filename block transmitted by sz

           -rw-r--r--  6347 Jun 17 1984 20:34 bbcsched.txt

           00 0100FF62 62637363 6865642E 74787400   |...bbcsched.txt.|
           10 36333437 20333331 34373432 35313320   |6347 3314742513 |
           20 31303036 34340000 00000000 00000000   |100644..........|
           30 00000000 00000000 00000000 00000000
           40 00000000 00000000 00000000 00000000
           50 00000000 00000000 00000000 00000000
           60 00000000 00000000 00000000 00000000
           70 00000000 00000000 00000000 00000000
           80 000000CA 56

    herein.  Programs with marginal XMODEM implementations do not fare so
    well.  Timesharing systems and packet switched networks can separate the
    successive characters, rendering this method unreliable.

    Sending programs may detect the CK sequence if the operating enviornment
    does not preclude reliable implementation.

    Instead of the standard YMODEM file length in decimal, KMD and IMP
    transmit the CP/M record count in the last two bytes of the header block.


    6.  YMODEM-g File Transmission

    Developing technology is providing phone line data transmission at ever
    higher speeds using very specialized techniques.  These high speed modems,
    as well as session protocols such as X.PC, provide high speed, nearly
    error free communications at the expense of considerably increased delay
    time.

    This delay time is moderate compared to human interactions, but it
    cripples the throughput of most error correcting protocols.

    The g option to YMODEM has proven effective under these circumstances.
    The g option is driven by the receiver, which initiates the batch transfer
    by transmitting a G instead of C.  When the sender recognizes the G, it
    bypasses the usual wait for an ACK to each transmitted block, sending
    succeeding blocks at full speed, subject to XOFF/XON or other flow control
    exerted by the medium.

    The sender expects an inital G to initiate the transmission of a
    particular file, and also expects an ACK on the EOT sent at the end of
    each file.  This synchronization allows the receiver time to open and



    Chapter 6                                     XMODEM Protocol Enhancements







    X/YMODEM Protocol Reference    June 18 1988                             19



    close files as necessary.

    If an error is detected in a YMODEM-g transfer, the receiver aborts the
    transfer with the multiple CAN abort sequence.  The ZMODEM protocol should
    be used in applications that require both streaming throughput and error
    recovery.

            Figure 8.  YMODEM-g Transmission Session

            SENDER                                  RECEIVER
                                                    "sb foo.*<CR>"
            "sending in batch mode etc..."
                                                    G (command:rb -g)
            SOH 00 FF foo.c NUL[123] CRC CRC
                                                    G
            SOH 01 FE Data[128] CRC CRC
            STX 02 FD Data[1024] CRC CRC
            SOH 03 FC Data[128] CRC CRC
            SOH 04 FB Data[100] CPMEOF[28] CRC CRC
            EOT
                                                    ACK
                                                    G
            SOH 00 FF NUL[128] CRC CRC































    Chapter 6                                     XMODEM Protocol Enhancements







    X/YMODEM Protocol Reference    June 18 1988                             20



    7.  XMODEM PROTOCOL OVERVIEW

    8/9/82 by Ward Christensen.

    I will maintain a master copy of this.  Please pass on changes or
    suggestions via CBBS/Chicago at (312) 545-8086, CBBS/CPMUG (312) 849-1132
    or by voice at (312) 849-6279.

    7.1  Definitions

      <soh> 01H
      <eot> 04H
      <ack> 06H
      <nak> 15H
      <can> 18H
      <C>   43H


    7.2  Transmission Medium Level Protocol

    Asynchronous, 8 data bits, no parity, one stop bit.

    The protocol imposes no restrictions on the contents of the data being
    transmitted.  No control characters are looked for in the 128-byte data
    messages.  Absolutely any kind of data may be sent - binary, ASCII, etc.
    The protocol has not formally been adopted to a 7-bit environment for the
    transmission of ASCII-only (or unpacked-hex) data , although it could be
    simply by having both ends agree to AND the protocol-dependent data with
    7F hex before validating it.  I specifically am referring to the checksum,
    and the block numbers and their ones- complement.

    Those wishing to maintain compatibility of the CP/M file structure, i.e.
    to allow modemming ASCII files to or from CP/M systems should follow this
    data format:

       + ASCII tabs used (09H); tabs set every 8.

       + Lines terminated by CR/LF (0DH 0AH)

       + End-of-file indicated by ^Z, 1AH.  (one or more)

       + Data is variable length, i.e. should be considered a continuous
         stream of data bytes, broken into 128-byte chunks purely for the
         purpose of transmission.

       + A CP/M "peculiarity": If the data ends exactly on a 128-byte
         boundary, i.e. CR in 127, and LF in 128, a subsequent sector
         containing the ^Z EOF character(s) is optional, but is preferred.
         Some utilities or user programs still do not handle EOF without ^Zs.





    Chapter 7                                         Xmodem Protocol Overview







    X/YMODEM Protocol Reference    June 18 1988                             21



       + The last block sent is no different from others, i.e.  there is no
         "short block".
                  Figure 9.  XMODEM Message Block Level Protocol

    Each block of the transfer looks like:
          <SOH><blk #><255-blk #><--128 data bytes--><cksum>
    in which:
    <SOH>         = 01 hex
    <blk #>       = binary number, starts at 01 increments by 1, and
                    wraps 0FFH to 00H (not to 01)
    <255-blk #>   = blk # after going thru 8080 "CMA" instr, i.e.
                    each bit complemented in the 8-bit block number.
                    Formally, this is the "ones complement".
    <cksum>       = the sum of the data bytes only.  Toss any carry.

    7.3  File Level Protocol

    7.3.1  Common_to_Both_Sender_and_Receiver
    All errors are retried 10 times.  For versions running with an operator
    (i.e. NOT with XMODEM), a message is typed after 10 errors asking the
    operator whether to "retry or quit".

    Some versions of the protocol use <can>, ASCII ^X, to cancel transmission.
    This was never adopted as a standard, as having a single "abort" character
    makes the transmission susceptible to false termination due to an <ack>
    <nak> or <soh> being corrupted into a <can> and aborting transmission.

    The protocol may be considered "receiver driven", that is, the sender need
    not automatically re-transmit, although it does in the current
    implementations.


    7.3.2  Receive_Program_Considerations
    The receiver has a 10-second timeout.  It sends a <nak> every time it
    times out.  The receiver's first timeout, which sends a <nak>, signals the
    transmitter to start.  Optionally, the receiver could send a <nak>
    immediately, in case the sender was ready.  This would save the initial 10
    second timeout.  However, the receiver MUST continue to timeout every 10
    seconds in case the sender wasn't ready.

    Once into a receiving a block, the receiver goes into a one-second timeout
    for each character and the checksum.  If the receiver wishes to <nak> a
    block for any reason (invalid header, timeout receiving data), it must
    wait for the line to clear.  See "programming tips" for ideas

    Synchronizing:  If a valid block number is received, it will be: 1) the
    expected one, in which case everything is fine; or 2) a repeat of the
    previously received block.  This should be considered OK, and only
    indicates that the receivers <ack> got glitched, and the sender re-
    transmitted; 3) any other block number indicates a fatal loss of
    synchronization, such as the rare case of the sender getting a line-glitch



    Chapter 7                                         Xmodem Protocol Overview







    X/YMODEM Protocol Reference    June 18 1988                             22



    that looked like an <ack>.  Abort the transmission, sending a <can>


    7.3.3  Sending_program_considerations
    While waiting for transmission to begin, the sender has only a single very
    long timeout, say one minute.  In the current protocol, the sender has a
    10 second timeout before retrying.  I suggest NOT doing this, and letting
    the protocol be completely receiver-driven.  This will be compatible with
    existing programs.

    When the sender has no more data, it sends an <eot>, and awaits an <ack>,
    resending the <eot> if it doesn't get one.  Again, the protocol could be
    receiver-driven, with the sender only having the high-level 1-minute
    timeout to abort.


    Here is a sample of the data flow, sending a 3-block message.  It includes
    the two most common line hits - a garbaged block, and an <ack> reply
    getting garbaged.  <xx> represents the checksum byte.

                  Figure 10.  Data flow including Error Recovery

    SENDER                                  RECEIVER
                                  times out after 10 seconds,
                                  <---              <nak>
    <soh> 01 FE -data- <xx>       --->
                                  <---              <ack>
    <soh> 02 FD -data- xx         --->       (data gets line hit)
                                  <---              <nak>
    <soh> 02 FD -data- xx         --->
                                  <---              <ack>
    <soh> 03 FC -data- xx         --->
    (ack gets garbaged)           <---              <ack>
    <soh> 03 FC -data- xx         --->              <ack>
    <eot>                         --->
                                  <---       <anything except ack>
    <eot>                         --->
                                  <---              <ack>
    (finished)

    7.4  Programming Tips

       + The character-receive subroutine should be called with a parameter
         specifying the number of seconds to wait.  The receiver should first
         call it with a time of 10, then <nak> and try again, 10 times.

         After receiving the <soh>, the receiver should call the character
         receive subroutine with a 1-second timeout, for the remainder of the
         message and the <cksum>.  Since they are sent as a continuous stream,
         timing out of this implies a serious like glitch that caused, say,
         127 characters to be seen instead of 128.



    Chapter 7                                         Xmodem Protocol Overview







    X/YMODEM Protocol Reference    June 18 1988                             23



       + When the receiver wishes to <nak>, it should call a "PURGE"
         subroutine, to wait for the line to clear.  Recall the sender tosses
         any characters in its UART buffer immediately upon completing sending
         a block, to ensure no glitches were mis- interpreted.

         The most common technique is for "PURGE" to call the character
         receive subroutine, specifying a 1-second timeout,[1] and looping
         back to PURGE until a timeout occurs.  The <nak> is then sent,
         ensuring the other end will see it.

       + You may wish to add code recommended by John Mahr to your character
         receive routine - to set an error flag if the UART shows framing
         error, or overrun.  This will help catch a few more glitches - the
         most common of which is a hit in the high bits of the byte in two
         consecutive bytes.  The <cksum> comes out OK since counting in 1-byte
         produces the same result of adding 80H + 80H as with adding 00H +
         00H.






























    __________

     1. These times should be adjusted for use with timesharing systems.




    Chapter 7                                         Xmodem Protocol Overview







    X/YMODEM Protocol Reference    June 18 1988                             24



    8.  XMODEM/CRC Overview

    Original 1/13/85 by John Byrns -- CRC option.

    Please pass on any reports of errors in this document or suggestions for
    improvement to me via Ward's/CBBS at (312) 849-1132, or by voice at (312)
    885-1105.

    The CRC used in the Modem Protocol is an alternate form of block check
    which provides more robust error detection than the original checksum.
    Andrew S. Tanenbaum says in his book, Computer Networks, that the CRC-
    CCITT used by the Modem Protocol will detect all single and double bit
    errors, all errors with an odd number of bits, all burst errors of length
    16 or less, 99.997% of 17-bit error bursts, and 99.998% of 18-bit and
    longer bursts.[1]

    The changes to the Modem Protocol to replace the checksum with the CRC are
    straight forward. If that were all that we did we would not be able to
    communicate between a program using the old checksum protocol and one
    using the new CRC protocol. An initial handshake was added to solve this
    problem. The handshake allows a receiving program with CRC capability to
    determine whether the sending program supports the CRC option, and to
    switch it to CRC mode if it does. This handshake is designed so that it
    will work properly with programs which implement only the original
    protocol. A description of this handshake is presented in section 10.

                Figure 11.  Message Block Level Protocol, CRC mode

    Each block of the transfer in CRC mode looks like:
         <SOH><blk #><255-blk #><--128 data bytes--><CRC hi><CRC lo>
    in which:
    <SOH>        = 01 hex
    <blk #>      = binary number, starts at 01 increments by 1, and
                   wraps 0FFH to 00H (not to 01)
    <255-blk #>  = ones complement of blk #.
    <CRC hi>     = byte containing the 8 hi order coefficients of the CRC.
    <CRC lo>     = byte containing the 8 lo order coefficients of the CRC.

    8.1  CRC Calculation

    8.1.1  Formal_Definition
    To calculate the 16 bit CRC the message bits are considered to be the
    coefficients of a polynomial. This message polynomial is first multiplied
    by X^16 and then divided by the generator polynomial (X^16 + X^12 + X^5 +


    __________

     1. This reliability figure is misleading because XMODEM's critical
        supervisory functions are not protected by this CRC.




    Chapter 8                                         Xmodem Protocol Overview







    X/YMODEM Protocol Reference    June 18 1988                             25



    1) using modulo two arithmetic. The remainder left after the division is
    the desired CRC. Since a message block in the Modem Protocol is 128 bytes
    or 1024 bits, the message polynomial will be of order X^1023. The hi order
    bit of the first byte of the message block is the coefficient of X^1023 in
    the message polynomial.  The lo order bit of the last byte of the message
    block is the coefficient of X^0 in the message polynomial.

               Figure 12.  Example of CRC Calculation written in C

    The following XMODEM crc routine is taken from "rbsb.c".  Please refer to
    the source code for these programs (contained in RZSZ.ZOO) for usage.  A
    fast table driven version is also included in this file.

    /* update CRC */
    unsigned short
    updcrc(c, crc)
    register c;
    register unsigned crc;
    {
            register count;

            for (count=8; --count>=0;) {
                    if (crc & 0x8000) {
                            crc <<= 1;
                            crc += (((c<<=1) & 0400)  !=  0);
                            crc ^= 0x1021;
                    }
                    else {
                            crc <<= 1;
                            crc += (((c<<=1) & 0400)  !=  0);
                    }
            }
            return crc;
    }

    8.2  CRC File Level Protocol Changes

    8.2.1  Common_to_Both_Sender_and_Receiver
    The only change to the File Level Protocol for the CRC option is the
    initial handshake which is used to determine if both the sending and the
    receiving programs support the CRC mode. All Modem Programs should support
    the checksum mode for compatibility with older versions.  A receiving
    program that wishes to receive in CRC mode implements the mode setting
    handshake by sending a <C> in place of the initial <nak>.  If the sending
    program supports CRC mode it will recognize the <C> and will set itself
    into CRC mode, and respond by sending the first block as if a <nak> had
    been received. If the sending program does not support CRC mode it will
    not respond to the <C> at all. After the receiver has sent the <C> it will
    wait up to 3 seconds for the <soh> that starts the first block. If it
    receives a <soh> within 3 seconds it will assume the sender supports CRC
    mode and will proceed with the file exchange in CRC mode. If no <soh> is



    Chapter 8                                         Xmodem Protocol Overview







    X/YMODEM Protocol Reference    June 18 1988                             26



    received within 3 seconds the receiver will switch to checksum mode, send
    a <nak>, and proceed in checksum mode. If the receiver wishes to use
    checksum mode it should send an initial <nak> and the sending program
    should respond to the <nak> as defined in the original Modem Protocol.
    After the mode has been set by the initial <C> or <nak> the protocol
    follows the original Modem Protocol and is identical whether the checksum
    or CRC is being used.


    8.2.2  Receive_Program_Considerations
    There are at least 4 things that can go wrong with the mode setting
    handshake.

      1.  the initial <C> can be garbled or lost.

      2.  the initial <soh> can be garbled.

      3.  the initial <C> can be changed to a <nak>.

      4.  the initial <nak> from a receiver which wants to receive in checksum
          can be changed to a <C>.

    The first problem can be solved if the receiver sends a second <C> after
    it times out the first time. This process can be repeated several times.
    It must not be repeated too many times before sending a <nak> and
    switching to checksum mode or a sending program without CRC support may
    time out and abort. Repeating the <C> will also fix the second problem if
    the sending program cooperates by responding as if a <nak> were received
    instead of ignoring the extra <C>.

    It is possible to fix problems 3 and 4 but probably not worth the trouble
    since they will occur very infrequently. They could be fixed by switching
    modes in either the sending or the receiving program after a large number
    of successive <nak>s. This solution would risk other problems however.


    8.2.3  Sending_Program_Considerations
    The sending program should start in the checksum mode. This will insure
    compatibility with checksum only receiving programs. Anytime a <C> is
    received before the first <nak> or <ack> the sending program should set
    itself into CRC mode and respond as if a <nak> were received. The sender
    should respond to additional <C>s as if they were <nak>s until the first
    <ack> is received. This will assist the receiving program in determining
    the correct mode when the <soh> is lost or garbled. After the first <ack>
    is received the sending program should ignore <C>s.









    Chapter 8                                         Xmodem Protocol Overview







    X/YMODEM Protocol Reference    June 18 1988                             27



    8.3  Data Flow Examples with CRC Option

    Here is a data flow example for the case where the receiver requests
    transmission in the CRC mode but the sender does not support the CRC
    option. This example also includes various transmission errors.  <xx>
    represents the checksum byte.

          Figure 13.  Data Flow: Receiver has CRC Option, Sender Doesn't

    SENDER                                        RECEIVER
                            <---                <C>
                                    times out after 3 seconds,
                            <---                <C>
                                    times out after 3 seconds,
                            <---                <C>
                                    times out after 3 seconds,
                            <---                <C>
                                    times out after 3 seconds,
                            <---                <nak>
    <soh> 01 FE -data- <xx> --->
                            <---                <ack>
    <soh> 02 FD -data- <xx> --->        (data gets line hit)
                            <---                <nak>
    <soh> 02 FD -data- <xx> --->
                            <---                <ack>
    <soh> 03 FC -data- <xx> --->
       (ack gets garbaged)  <---                <ack>
                                    times out after 10 seconds,
                            <---                <nak>
    <soh> 03 FC -data- <xx> --->
                            <---                <ack>
    <eot>                   --->
                            <---                <ack>

    Here is a data flow example for the case where the receiver requests
    transmission in the CRC mode and the sender supports the CRC option.  This
    example also includes various transmission errors.  <xxxx> represents the
    2 CRC bytes.
















    Chapter 8                                         Xmodem Protocol Overview







    X/YMODEM Protocol Reference    June 18 1988                             28



               Figure 14.  Receiver and Sender Both have CRC Option

    SENDER                                       RECEIVER
                              <---                 <C>
    <soh> 01 FE -data- <xxxx> --->
                              <---                 <ack>
    <soh> 02 FD -data- <xxxx> --->         (data gets line hit)
                              <---                 <nak>
    <soh> 02 FD -data- <xxxx> --->
                              <---                 <ack>
    <soh> 03 FC -data- <xxxx> --->
    (ack gets garbaged)       <---                 <ack>
                                         times out after 10 seconds,
                              <---                 <nak>
    <soh> 03 FC -data- <xxxx> --->
                              <---                 <ack>
    <eot>                     --->
                              <---                 <ack>




































    Chapter 8                                         Xmodem Protocol Overview







    X/YMODEM Protocol Reference    June 18 1988                             29



    9.  MORE INFORMATION

    Please contact Omen Technology for troff source files and typeset copies
    of this document.


    9.1  TeleGodzilla Bulletin Board

    More information may be obtained by calling TeleGodzilla at 503-621-3746.
    Speed detection is automatic for 1200, 2400 and 19200(Telebit PEP) bps.
    TrailBlazer modem users may issue the TeleGodzilla trailblazer command to
    swith to 19200 bps once they have logged in.

    Interesting files include RZSZ.ZOO (C source code), YZMODEM.ZOO (Official
    XMODEM, YMODEM, and ZMODEM protocol descriptions), ZCOMMEXE.ARC,
    ZCOMMDOC.ARC, and ZCOMMHLP.ARC (PC-DOS shareware comm program with XMODEM,
    True YMODEM(TM), ZMODEM, Kermit Sliding Windows, Telink, MODEM7 Batch,
    script language, etc.).


    9.2  Unix UUCP Access

    UUCP sites can obtain the current version of this file with
                     uucp omen!/u/caf/public/ymodem.doc /tmp
    A continually updated list of available files is stored in
    /usr/spool/uucppublic/FILES.  When retrieving these files with uucp,
    remember that the destination directory on your system must be writeable
    by anyone, or the UUCP transfer will fail.

    The following L.sys line calls TeleGodzilla (Pro-YAM in host operation).
    TeleGodzilla determines the incoming speed automatically.

    In response to "Name Please:" uucico gives the Pro-YAM "link" command as a
    user name.  The password (Giznoid) controls access to the Xenix system
    connected to the IBM PC's other serial port.  Communications between
    Pro-YAM and Xenix use 9600 bps; YAM converts this to the caller's speed.

    Finally, the calling uucico logs in as uucp.

    omen Any ACU 2400 1-503-621-3746 se:--se: link ord: Giznoid in:--in: uucp



    10.  REVISIONS

    6-18-88 Further revised for clarity.  Corrected block numbering in two
    examples.
    10-27-87 Optional fields added for number of files remaining to be sent
    and total number of bytes remaining to be sent.
    10-18-87 Flow control discussion added to 1024 byte block descritpion,
    minor revisions for clarity per user comments.



    Chapter 10                                        Xmodem Protocol Overview







    X/YMODEM Protocol Reference    June 18 1988                             30



    8-03-87 Revised for clarity.
    5-31-1987 emphasizes minimum requirements for YMODEM, and updates
    information on accessing files.
    9-11-1986 clarifies nomenclature and some minor points.
    The April 15 1986 edition clarifies some points concerning CRC
    calculations and spaces in the header.


    11.  YMODEM Programs

    ZCOMM, A shareware little brother to Professional-YAM, is available as
    ZCOMMEXE.ARC on TeleGodzilla and other bulletin board systems.  ZCOMM may
    be used to test YMODEM amd ZMODEM implementations.

    Unix programs supporting YMODEM are available on TeleGodzilla in RZSZ.ZOO.
    This ZOO archive includes a ZCOMM/Pro-YAM/PowerCom script ZUPL.T to upload
    a bootstrap program MINIRB.C, compile it, and then upload the rest of the
    files using the compiled MINIRB.  Most Unix like systems are supported,
    including V7, Xenix, Sys III, 4.2 BSD, SYS V, Idris, Coherent, and
    Regulus.

    A version for VAX-VMS is available in VRBSB.SHQ.

    Irv Hoff has added 1k blocks and basic YMODEM batch transfers to the KMD
    and IMP series programs, which replace the XMODEM and MODEM7/MDM7xx series
    respectively.  Overlays are available for a wide variety of CP/M systems.

    Questions about Professional-YAM communications software may be directed
    to:
         Chuck Forsberg
         Omen Technology Inc
         17505-V Sauvie Island Road
         Portland Oregon 97231
         VOICE: 503-621-3406 :VOICE
         Modem: 503-621-3746 Speed: 19200(Telebit PEP),2400,1200,300
         Usenet: ...!tektronix!reed!omen!caf
         CompuServe: 70007,2304
         GEnie: CAF

    Unlike ZMODEM and Kermit, XMODEM and YMODEM place obstacles in the path of
    a reliable high performance implementation, evidenced by poor reliability
    under stress of the industry leaders' XMODEM and YMODEM programs.  Omen
    Technology provides consulting and other services to those wishing to
    implement XMODEM, YMODEM, and ZMODEM with state of the art features and
    reliability.









    Chapter 11                                        Xmodem Protocol Overview











                                     CONTENTS


     1.  TOWER OF BABEL...................................................   2
         1.1  Definitions.................................................   2

     2.  YMODEM MINIMUM REQUIREMENTS......................................   4

     3.  WHY YMODEM?......................................................   6
         3.1  Some Messages from the Pioneer..............................   7

     4.  XMODEM PROTOCOL ENHANCEMENTS.....................................  10
         4.1  Graceful Abort..............................................  10
         4.2  CRC-16 Option...............................................  10
         4.3  XMODEM-1k 1024 Byte Block...................................  11

     5.  YMODEM Batch File Transmission...................................  13
         5.1  KMD/IMP Exceptions to YMODEM................................  16

     6.  YMODEM-g File Transmission.......................................  18

     7.  XMODEM PROTOCOL OVERVIEW.........................................  20
         7.1  Definitions.................................................  20
         7.2  Transmission Medium Level Protocol..........................  20
         7.3  File Level Protocol.........................................  21
         7.4  Programming Tips............................................  22

     8.  XMODEM/CRC Overview..............................................  24
         8.1  CRC Calculation.............................................  24
         8.2  CRC File Level Protocol Changes.............................  25
         8.3  Data Flow Examples with CRC Option..........................  27

     9.  MORE INFORMATION.................................................  29
         9.1  TeleGodzilla Bulletin Board.................................  29
         9.2  Unix UUCP Access............................................  29

    10.  REVISIONS........................................................  29

    11.  YMODEM Programs..................................................  30















                                      - i -














                                 LIST OF FIGURES


     Figure 1.  XMODEM-1k Blocks..........................................  12

     Figure 2.  Mixed 1024 and 128 byte Blocks............................  12

     Figure 3.  YMODEM Batch Transmission Session (1 file)................  16

     Figure 4.  YMODEM Batch Transmission Session (2 files)...............  16

     Figure 5.  YMODEM Batch Transmission Session-1k Blocks...............  16

     Figure 6.  YMODEM Filename block transmitted by sz...................  16

     Figure 7.  YMODEM Header Information and Features....................  16

     Figure 8.  YMODEM-g Transmission Session.............................  19

     Figure 9.  XMODEM Message Block Level Protocol.......................  21

    Figure 10.  Data flow including Error Recovery........................  22

    Figure 11.  Message Block Level Protocol, CRC mode....................  24

    Figure 12.  Example of CRC Calculation written in C...................  25

    Figure 13.  Data Flow: Receiver has CRC Option, Sender Doesn't........  27

    Figure 14.  Receiver and Sender Both have CRC Option..................  28





















                                      - ii -
