ORG $1000
; first section is not part of relocation table
1:
jr 1B
jr nz,1B
jr z,1B
jr nc,1B
jr c,1B
jp nz,1B
jp 1B
jp z,1B
jp nc,1B
jp c,1B
jp po,1B
jp pe,1B
jp p,1B
jp m,1B
call nz,1B
call z,1B
call 1B
call nc,1B
call c,1B
call po,1B
call pe,1B
call p,1B
call m,1B
jr 1F
jr nz,1F
jr z,1F
jr nc,1F
jr c,1F
jp nz,1F
jp 1F
jp z,1F
jp nc,1F
jp c,1F
jp po,1F
jp pe,1F
jp p,1F
jp m,1F
call nz,1F
call z,1F
call 1F
call nc,1F
call c,1F
call po,1F
call pe,1F
call p,1F
call m,1F
1:
; second section does test relocation
RELOCATE_START
ASSERT 2 * relocate_count == relocate_size
ASSERT 36 == relocate_count
dw relocate_count
dw relocate_size
1: ; usage of this label should trigger relocation
; relative jumps don't need relocation
jr 1B
jr nz,1B
jr z,1B
jr nc,1B
jr c,1B
; absolute jumps need relocation
jp nz,1B
jp 1B
jp z,1B
jp nc,1B
jp c,1B
jp po,1B
jp pe,1B
jp p,1B
jp m,1B
; calls need relocation
call nz,1B
call z,1B
call 1B
call nc,1B
call c,1B
call po,1B
call pe,1B
call p,1B
call m,1B
; again the same set, but this time using forward temporary label
jr 1F
jr nz,1F
jr z,1F
jr nc,1F
jr c,1F
jp nz,1F
jp 1F
jp z,1F
jp nc,1F
jp c,1F
jp po,1F
jp pe,1F
jp p,1F
jp m,1F
call nz,1F
call z,1F
call 1F
call nc,1F
call c,1F
call po,1F
call pe,1F
call p,1F
call m,1F
1: ; usage of this label should trigger relocation
;; adding missing DJNZ (from the first version of the test)
22:
djnz 22B
djnz 22F
22:
; the relocation table must be after all temporary labels, as those don't manage
; to settle down within 3 passes if there's dynamic-size table ahead, and "forward"
; labels are referenced
RELOCATE_TABLE ; should emit the 36 addresses of opcode data
RELOCATE_END
;; adding missing DJNZ outside of relocation block
22:
djnz 22B
djnz 22F
22: