Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
ref:zmodem [2020/11/28 16:17] – Created a new section overviewing ZMODEM frames digital man | ref:zmodem [2021/06/29 15:34] (current) – [ZFILE FRAME FILE INFORMATION SUBPACKET] footnote about path/file names with spaces (they are in fact supported in most ZMODEM implemenations) digital man | ||
---|---|---|---|
Line 67: | Line 67: | ||
==== ZMODEM Frame ==== | ==== ZMODEM Frame ==== | ||
- | | + | There are 2 classes of ZMODEM Frames: |
+ | - Hexadecimal (HEX) frames, containing only US-ASCII characters | ||
+ | - Binary (BIN16 or BIN32) frames, containing //almost// all possible octet values | ||
+ | |||
+ | === HEX Frame === | ||
+ | | ||
+ | |||
+ | HEX frames are terminated with an ASCII linefeed character. Some ZMODEM implementations send the HEX frame terminating linefeed character with the high bit set (0x8A, that's ASCII-LF with an even-parity bit set). Also, for some HEX frame types, the frame terminator may be followed by an XON (0x11) character (" | ||
+ | |||
+ | === Binary Frame === | ||
+ | <frame header> [[<* data subpacket> | ||
| | ||
- | Frames | + | Binary frames may contain |
==== Frame Header ==== | ==== Frame Header ==== | ||
- | <frame encoding> | + | <frame encoding> |
- | **Frame Encoding** (single byte): | + | **Frame Encoding** (single byte): |
- | All frames sent by the " | + | |
- | **Frame Type** (single byte): ZDATA, ZRPOS, ZACK, ZEOF, etc. | + | The //Frame Encoding// is also sometimes called the "Frame Style". |
- | **Frame Info**: Up to 15 bytes (but typically 4) of frame type-specific information. Note that later claims of //16// bytes of possible frame header data include the //Frame Type// byte. | + | ^ Style ^ AKA ^ Value ^ Frame Contents |
+ | | HEX | ZHEX | ASCII ''' | ||
+ | | BIN16 | ZBIN | ASCII ''' | ||
+ | | BIN32 | ZBIN32 | ASCII ''' | ||
+ | |||
+ | Notes: | ||
+ | * All frames sent by the " | ||
+ | |||
+ | **Frame Type** (single byte): | ||
+ | |||
+ | ^ Type ^ Value ^ TX((from sender))^ RX((from receiver)) ^ Info ^ Data Subpkt | ||
+ | | ZRQINIT | ||
+ | | ZRINIT | ||
+ | | ZSINIT | ||
+ | | ZACK | 0x03 | Y | ||
+ | | ZFILE | 0x04 | Y | ||
+ | | ZSKIP | 0x05 | - | ||
+ | | ZNAK | 0x06 | Y | ||
+ | | ZABORT | ||
+ | | ZFIN | 0x08 | Y | ||
+ | | ZRPOS | 0x09 | - | ||
+ | | ZDATA | 0x0A | Y | ||
+ | | ZEOF | 0x0B | Y | ||
+ | | ZFERROR | ||
+ | | ZCRC | 0x0D | Y | ||
+ | | ZFREECNT | 0x11 | Y | ||
+ | |||
+ | **Frame Info**: Up to 15 bytes (but typically 4) of frame type-specific information.\\ | ||
+ | Note that later claims of //16// bytes of possible frame header data include the //Frame Type// byte. | ||
**Frame Header Integrity**: | **Frame Header Integrity**: | ||
Line 85: | Line 122: | ||
==== Data Subpacket ==== | ==== Data Subpacket ==== | ||
< | < | ||
- | |||
- | Data Subpackets may contain up to 1024 bytes of //data// (special octet values are transposed and escaped with //ZLDE//). | ||
**ZDLE** is the ZMODEM Data-link-escape character ('' | **ZDLE** is the ZMODEM Data-link-escape character ('' | ||
+ | |||
+ | === Data Subpacket Length === | ||
+ | |||
+ | * Data Subpackets may contain up to **1024** bytes of //data// (special octet values are transposed and escaped with //ZDLE//) | ||
+ | * The Data Subpacket Length is also sometimes referred to as the transmit "block size" | ||
+ | * The Data Subpacket Length can be dynamically adjusted by the sender during the transfer of a file, e.g. in response to errors reported by the receiver | ||
+ | * Some ZMODEM implementations (e.g. " | ||
=== Data Subpacket Types === | === Data Subpacket Types === | ||
The Data Subpacket Type is encoded in a single byte. | The Data Subpacket Type is encoded in a single byte. | ||
- | ^ Type ^ ZACK/ZRPOS expected ^ End-of-Frame ^ Meaning ^ | + | ^ Type ^ ZACK/ZRPOS expected ^ End-of-Frame ^ Meaning |
- | | ZCRCW | Yes (synchronous) | + | | ZCRCW | Yes (synchronous) |
- | | ZCRCE | Only errors | + | | ZCRCE | Only errors |
- | | ZCRCQ | Yes (asynchronous) | + | | ZCRCQ | Yes (asynchronous) |
- | | ZCRCG | Only errors | + | | ZCRCG | Only errors |
=== Data Subpacket Integrity === | === Data Subpacket Integrity === | ||
Line 639: | Line 681: | ||
The pathname (conventionally, | The pathname (conventionally, | ||
null terminated ASCII string. | null terminated ASCII string. | ||
- | No spaces are included in the pathname. | + | No spaces are included in the pathname. |
Filename Considerations | Filename Considerations |