On Mon, Sep 18, 2023 at 7:08 PM Dan Cross <crossd@gmail.com> wrote:

but there was no total byte
count, so it was assumed that the final block would be padded with a
throwaway character.

CP/M, like RT-11 and OS/8 before it, did not track the sizes of files in bytes or words, only in blocks.  Text files ended in ^Z and were then padded with either NULs or more ^Zs if necessary; binary files were usually padded with NULs.

ZMODEM was, as I understood it, designed for transfers across telenet,
which was pretty reliable; instead of the highly synchronous
send/wait-for-ack cycle of xmodem and ymodem, zmodem relies on error
detection and correction and is basically a streaming protocol: a
packet in a sliding window could be NAK'ed, thus rewinding the
transfer, but otherwise it basically just sends data until done.

It's an analogue of TCP/IP, in fact.