LD HL,PC and CALL (HL) ====================== It is possible to synthesise LD HL,PC and CALL (HL) by having a little subroutine somewhere. Code: LDHLPC: E1 POP HL CALLHL: E9 JP (HL) Doing CALL LDHLPC does the equivalent of LD HL,PC. Doing CALL CALLHL does the equivalent of CALL (HL). I usually put this code at &000E-&000F when I'm writing non-Spectrum Z80 code. You can do this on the ZX Spectrum with: CALL &006F ; for CALL (HL) OR &FF:CALL &1FC6 ; for LD HL,PC &1FC6 needs to be entered with the Z flag clear. The simplest way to do this is to use an arithmetic instruction to set A to a non-zero value. If you know what value A has in it, then comparing to a different value will clear Z, for instance: CP 255 ; Assume A<>255, so clear Z CALL &1FC6 A LD HL,PC instruction is rarely needed on the ZX Spectrum as machine code is entered with PUSH BC:RET so BC holds the entry address. Another useful subroutine is CALL NZ,(HL) to call the address in HL if it is non-zero, unfortunately this corrupts A: 7C LD A,H B5 OR L C8 RET Z E9 JP (HL)