I massaged Martin Eberhard's XMODEM V2.9 sourcecode from Intel 8080 assembler
mnemonics into Zilog Z80 mnemonics. There's two "customised" versions - one for
Bill Shen's Z280RC (which includes code to use the Z280's built-in console UART),
and the single-board minimal Z80-MBC2 board (which is a 4-chip system using just
a Z80 CPU, RAM and a microcontroller for I/O). Both versions can be built as a
"vanilla" XMODEM by not defining a couple of conditional symbols using Microsoft
M80 or Hector Peraza's ZSM4 macroassemblers.
The Z280RC version is in the folder at
and the Z80-MBC2 version is at
As for "boot-strapping" them onto a system, if you have CP/M 2 already running,
you can use PIP to transfer the Intel HEX object file to a disk file and then use
the LOAD command to produce a COM file.
Set your communications program to add inter-character delays and a delay after
a CR (I have used both minicom under Linux or TeraTerm under Windows - 1ms
delay is sufficient to simulate a fast typing speed without losing characters).
Start PIP to receive an Intel HEX file from the console -
A> PIP XMODEM.HEX=CON:[HZ]
Now, send the HEX file in ASCII mode (using Ctrl-A Send ASCII from minicom or
File/Send-file... from TeraTerm). PIP validates it as a Intel HEX file and detects
the end of file transfer address record to end the transfer. Just use LOAD to
RECORDS WRITTEN 20
Now you can use the XMODEM command (with appropriate switches) to transfer
a binary file. You should tinker with an XMODEM.CFG file to set the appropriate
defaults (like which serial port to use for file transfers etc.) See the comments
in the assembler source file for details.