I got a suitably dog-eared copy of 8080/Z80 Assembly Language Techniques for Improved Programming that covers the development of a system monitor in chapter 6.
The code is also available here, but the book breaks it down into stages so you can build up and debug the functionality step by step. This is invaluable since my 8080 byte-code interpreter is riddled with bugs!
There was some additional work needed before even getting through the first exercise in attaching the console. I needed a way to interface the virtual UART to the 8080 and the most elegant way of doing this was via the input/output ports. The first 8 were assigned to the expansion board, but the rest have now been assigned as follows:
|0-7||Expansion In||Expansion Out|
|8||Serial Rx||Serial Tx|
|9||Console (KBD)||Console (CRT)|
|10||KBD Scan Codes||Set Audio Mode|
|11||Cursor Character||Disable Rx|
|12-63||Zero Page Read||Zero Page Write|
The system's zero page is not addressable by the 8080, so 52 ports are mapped to this memory space via the ports. The console provides a decoded keyboard input and a simple text terminal output to make interfacing easy for the system monitor.
The second exercise in the monitor development was the memory dump command. This is now working after debugging the associated 8080 instructions and arithmetic functions. The following animated GIF demonstrates dumping memory locations 0-300 in real time.