For those of you who care, here is some technical information on the Z80 and the Z80 assembly language.

There are 16 general purpose registers, each 8 bits wide. The registers are named a, b, c, d, e, f, h and l. Registers can also be "doubled up" to form 16-bit register pairs. The pairings are af, bc, de, hl (ONLY these pairings are valid pairings).

The f register is called the flags register. Its 8 bits form eight 1-bit flags that can be tested with certain instructions. The flags are:

BIT - FLAG
0 - Carry (C)
1 - Subtract (S)
2 - Parity/Overflow (P/O)
3 - Unused/Unknown
4 - Auxilliary Carry (AC)
5 - Unused/Unknown
6 - Zero (Z)
7 - Sign (S)

Some of the flags are obvious, some are not. For instance, Zero is usually asserted when the result of the last instruction is zero. Sign is asserted when the result of the previous instruction is negative. Other flags have more mysterious uses.

The a register is called the accumulator, and the results of 8-bit adds and subtracts are sent to it. The results of most 16-bit operations are sent to the register pair hl. The Z80 has no multiply or divide instructions.

The Z80 also has 16 8-bit shadow registers called a', b', c', d', e', f' h', l'. The shadow registers also form shadow register pairs af', bc', de', hl'. The shadow registers cannot be accessed directly; Instead, we may use the instructions "EX AF,AF'" to swap af with af', or "EXX" to swap bc, de, hl with bc', de' and hl'. The shadow registers are found on some but not all Z80 processors. For instance, the Z80 in the Nintendo Gameboy does not have shadow registers.

There are some other special purpose 16-bit registers in the Z80. sp is called the "stack pointer" and is used to keep the memory address of the topmost item in the stack. pc is the "program counter" and points to the location of the next instruction to be executed. ix and iy are "index registers". There are also two more special 8-bit registers: i, the "interupt vector register" and r, the "refresh register".

The stack is generally maintained through the instructions PUSH and POP. "PUSH rp" can be used to put any register pair "rp" onto the top of the stack, and "POP rp" will take 16-bits from the top of the stack and put it into the register pair "rp".

Z80 assembler has some useful but complex pseudoinstructions. My personal favorite is CPIR which stands for "Compare Accumulator With Memory. Decremenet Byte Counter. Increment Address. Continue Until Match Is Found Or Byte Counter Is Zero."

If you have a burning desire to learn Z80 assembler, I would highly recommend Lance A. Leventhal's Z80 Assembly Language Programming, published by McGraw-Hill. It is probably the only book you will ever need on the subject.