In my previous post, I described an Arduino dongle and the software that can be used to clock a Z80 CPU and dump the states of its buses and pins while executing a controlled set of test cases.
Here I show a trace of every single Z80 instruction as run by that setup. I also outlined some of the tests created manually that clarified a few situations which were not too obvious (to me) after reading various pieces of documentation.
The complete list of Z80 instructions and their bus responses and cycles, each individually run by the Arduino Z80 dongle and then dumped by a script, is here:
- All regular opcodes, with no prefix are listed here
- Opcodes with a prefix byte CB are listed here
- Opcodes with a prefix byte ED are listed here
- Opcodes with a prefix byes of DD (IX or IY) + CB are listed here
- Opcodes with a prefix byte DD (IX or IY) are listed here
Each instruction started at the address 0 and is run as a single event. A full reset sequence is issued before each run. No registers were set up prior to a run, so you will see, for example, SP being quite random. Besides an instruction opcode, other bytes in the instruction stream that follow were simply set to 01,02,03… and you can see Z80 fetching them in the order it needs them for instructions needing operands.
In addition, I run selected test cases manually; for example, tracing interrupts or letting LDIR loops a few times.
A full text of that document is here.
If you find this stuff informative and there are any special sequences that you’d like me to run for you, please describe it in the comments below and I will run it. That may include any combination of opcodes as well as hitting any input pins at certain times.