A Z80 emulator study in C++. By Sijmen Mulder ik@sjmulder.nl.
Input:
int main()
{
Z80 cpu;
cpu.ram() = {
JR, 0x0C, // -+
'H', 'e', 'l', 'l', 'o', ' ', // |
'W', 'o', 'r', 'l', 'd', '!', // |
// |
// calculate 3 * 4 // |
EXT_FD, FD_LD_A_imm, 0x00, // <-+
EXT_DD, DD_LD_B_imm, 0x04,
EXT_DD, DD_LD_C_imm, 0x03,
ADD_A_C, // <-+
DJNZ, 0xFD, // -+
XOR_A_imm, 0xFF,
NOOP
};
}
Output:
A: 0x00 F: 0x00 A': 0x00 F': 0x00
B: 0x00 C: 0x00 B': 0x00 C': 0x00
D: 0x00 E: 0x00 D': 0x00 E': 0x00
H: 0x00 L: 0x00 H': 0x00 L': 0x00
I: 0x00 R: 0x00
IX: 0x0000
IY: 0x0000
SP: 0x0000
PC: 0x0000
S: 0 Z: 0 H: 0 PV: 0 N: 0 C: 0
> jr 0x0c
// ...
> djnz 0xfd
A: 0x09 F: 0x08 A': 0x00 F': 0x00
B: 0x01 C: 0x03 B': 0x00 C': 0x00
D: 0x00 E: 0x00 D': 0x00 E': 0x00
H: 0x00 L: 0x00 H': 0x00 L': 0x00
I: 0x00 R: 0x00
IX: 0x0000
IY: 0x0000
SP: 0x0000
PC: 0x0017
S: 0 Z: 0 H: 1 PV: 0 N: 0 C: 0
> add a, c
A: 0x0c F: 0x08 A': 0x00 F': 0x00
B: 0x01 C: 0x03 B': 0x00 C': 0x00
D: 0x00 E: 0x00 D': 0x00 E': 0x00
H: 0x00 L: 0x00 H': 0x00 L': 0x00
I: 0x00 R: 0x00
IX: 0x0000
IY: 0x0000
SP: 0x0000
PC: 0x0018
S: 0 Z: 0 H: 1 PV: 0 N: 0 C: 0
> djnz 0xfd
A: 0x0c F: 0x08 A': 0x00 F': 0x00
B: 0x00 C: 0x03 B': 0x00 C': 0x00
D: 0x00 E: 0x00 D': 0x00 E': 0x00
H: 0x00 L: 0x00 H': 0x00 L': 0x00
I: 0x00 R: 0x00
IX: 0x0000
IY: 0x0000
SP: 0x0000
PC: 0x001a
S: 0 Z: 0 H: 1 PV: 0 N: 0 C: 0
> xor a, 0xff
A: 0xf3 F: 0x84 A': 0x00 F': 0x00
B: 0x00 C: 0x03 B': 0x00 C': 0x00
D: 0x00 E: 0x00 D': 0x00 E': 0x00
H: 0x00 L: 0x00 H': 0x00 L': 0x00
I: 0x00 R: 0x00
IX: 0x0000
IY: 0x0000
SP: 0x0000
PC: 0x001c
S: 1 Z: 0 H: 0 PV: 1 N: 0 C: 0
> noop