For a register-deref target, goto_or_jump() in Z80IL.py runs the operand through operand_to_il() without peel_load=True, so it emits a load:
e9 JP (HL) -> jump([HL].w) # should be jump(HL)
JP (HL) jumps to the address in HL, it does not dereference it. This breaks the standard Z80 jump-table dispatch idiom.
For a register-deref target,
goto_or_jump()inZ80IL.pyruns the operand throughoperand_to_il()withoutpeel_load=True, so it emits a load:JP (HL)jumps to the address inHL, it does not dereference it. This breaks the standard Z80 jump-table dispatch idiom.