This is version 0.70 and it is much more functional. CP/M, MS-DOS, and WIN32 console executables attached.
Breakpoints are implemented along with go.
You can set the speed (Hz) with throttle or turn the throttle off for the maximum speed. (Not for CP/M - there is no timer in CP/M so there is no throttle or performance update commands)
Performance Update will show the speed on the screen every 5 seconds like this <740000> would be 740kHz.
You an specify the monitor break key (default is ESC/0x1b).
It loads with this default program which waits on the user to type a key and then echoes that key to the display. I've added some comments (the U command does not have comments). This essentially uses a special instruction I added 0xFE called EMU for emulator call. The accumulator is used to pass data back and forth. This is a list of the commands supported by the EMU instruction:
-
Breakpoints are implemented along with go.
You can set the speed (Hz) with throttle or turn the throttle off for the maximum speed. (Not for CP/M - there is no timer in CP/M so there is no throttle or performance update commands)
Performance Update will show the speed on the screen every 5 seconds like this <740000> would be 740kHz.
You an specify the monitor break key (default is ESC/0x1b).
It loads with this default program which waits on the user to type a key and then echoes that key to the display. I've added some comments (the U command does not have comments). This essentially uses a special instruction I added 0xFE called EMU for emulator call. The accumulator is used to pass data back and forth. This is a list of the commands supported by the EMU instruction:
Code:
0xFE EMU instruction (uses accumulator for data transfer)
Sent | Returned || Sent | Returned || Sent | Returned
EC_HALT (0x0) | none || | || |
EC_STATUS0 (0x1) | status* || | || |
EC_RX0 (0x2) | high nibble || any | low nibble || |
EC_TX0 (0x3) | none || high nibble | none || low nibble | none
*status
bit0 - ready to rx
bit1 - ready to tx
Code:
-U 0-10
PGM:000 D1 LDM 1 ;call EMU command for serial status
PGM:001 FE EMU
PGM:002 F6 RAR ;let's put bit0 (RX ready) in carry
PGM:003 1A 00 JCN A(JNC) 000 ;if no carry we retry this loop from 0
PGM:005 D2 LDM 2 ;if we are here there is a key ready to receive
PGM:006 FE EMU ;receive high nibble of key
PGM:007 B0 XCH 0 ;put it at r0
PGM:008 FE EMU ;receive low nibble of key
PGM:009 B1 XCH 1 ;put it at r1
PGM:00A D3 LDM 3 ;we want to echo it back with the tx command
PGM:00B FE EMU
PGM:00C A0 LD 0 ;get high nibble from r0
PGM:00D FE EMU ;send it
PGM:00E A1 LD 1 ;get low nibble from r1
PGM:00F FE EMU ;send it (character is echoed)
PGM:010 40 00 JUN 000 ;jump back to start
Code:
A [addr] Assemble
B [[-]breakpoint] [-all] ... Breakpoints
C srcrange tgtaddr //Copy
D [addr|range] Dump
E [addr] Enter
F range data //Fill
G [addr] Go
H Help
I [instructions] Step into
K srcrange tgtaddr //Compare
LI range //Load intel hex
LF range file //Load file
M [key] Monitor break key
N Initialize CPU
O [instructions] Step over
P [on|off] Performance update every 5 seconds
Q Quit
R [reg=value] ... Registers
SI range //Save intel hex
SF range file //Save file
T [speed|off] Throttle (decimal cycles per second or off)
U [addr|range] Unassemble
V [on|off] Display pause when full
X Address spaces
Z range data //Search