A Z80 emulator/monitor program written in C#. Opcodes are generated automatically using the JSON Opcode Table from Z80 Opcode Table.
Pass in a compiled Z80 binary file as the first argument to the program.
z80emu <program.com>
This will load the program to the CP/M or Agon MOS program memory location 0x0100 and drop you to a prompt where you can enter commands. (TODO: Allow loading to other memory locations)
Most commands are kept to one charater to make it easier to enter them
quickly. The exception is the reg
which is used less often since the
registers are displayed after every step or run.
Command | Example | Description |
---|---|---|
h |
h |
Display help |
s |
s |
Step through the program one instruction at a time |
r |
r |
Run the program to the next breakpoint |
reg |
reg |
Dump the registers and flags |
m [<addr>] |
m 100 |
Dump the memory starting at the given address. If the address is not specified, defaults to 0x100 or the last memory address viewed |
d [<addr>] |
d 100 |
Disassemble the program starting at the given address. If no address is given, will start disassembly at the program counter. If entered again, it will continue after the last disassembled address. |
p <port> |
p 0x42 |
View the value in the given port. The port must be a hex number. |
p <port> <byte> |
p 0x42 0x0a |
Set the given byte into the given port. The port and byte must be a hex number. |
b |
b |
Manage breakpoints |
q |
q |
Quit the emulator |
Breakpoints can be managed by entering the b
command.
Command | Description |
---|---|
add |
Add a breakpoint. You will be prompted for an address to set a breakpoint at |
delete |
Delete a breakpoint. You will be shown all breakpoints and be able to select one to delete |
list |
List breakpoints |
clear |
Clear all breakpoints |
quit |
Quit the breakpoint manager |
The emulator currently supports a small subset of the CP/M 2.2 system calls. For a list of supported system calls, see CPM22.cs. The plan is to expand the supported system calls as needed and to add support for the Agon Light MOS API system calls. You will be able to select between CP/M and Agon MOS with a command line switch.
- This does not emulate undocumented opcodes
- It is not cyle accurate
- It does not set the undocumented flags
- Only a subset of system calls are supported