Testing HEX file upload to the Z80-MBC2
One of the Z80-MBC2 boot menu options, iLoad, allows uploading an executable program in Intel HEX format. This is cool because it enables running code on the bare metal with no operating system, such as a resident monitor or software that directly accesses the hardware.
To test iLoad I uploaded and run a demo to the Z80-MBC2, a Z80 Assembly program that prints a message to the console and blinks the board's User LED.
The source file,
Blink demo Z80-MBC2.asm, is included in the sources of the Z80-MBC2 firmware in directory
src. I assembled the program with the zasm Z80 assembler and converted it to HEX format with the
bin2hex tool that comes with the z80pack Z80 emulator.
The screenshot shows the steps for uploading the demo to the Z80-MBC2 and running it. It's a Minicom session under Crostini Linux on my Chromebox.
First off, I brought up the Z80-MBC2 boot menu. After selecting the iLoad option, the Z80-MBC2 waited for the file transfer to start.
Next, in Minicom I executed the
Paste file command (activated by the
Ctrl+A Y keystroke), which reads an ASCII file and sends its contents as if it were typed in, and selected the program file
blink.hex. A few seconds later the message
Z80-MBC2 User led blink demo running... appeared on the console and the board's User led started blinking.
I completed the process successfully only after tweaking the transmission parameters.
The Z80-MBC2 developer notes the board's serial port can't handle high-speed data transfers, and advises to set a 50-90 ms newline transmission delay in the settings of the terminal emulator used for the transfer.
In Minicon I set the delay with the
Newline Tx delay (
Ctrl+A T D) option. But with my setup iLoad transfers abort even with delays up to 150 ms, causing the Z80-MBC2 to display a checksum error and halt.
To overcome the issue I set a character transmission delay of at least 5 ms with the
Character Tx delay option (
Ctrl+a T F).