; Far calls to another bank
; There is no difference between `farcall` and `callfar`, except the arbitrary
; order in which they set `b` and `hl` before calling `FarCall`.
; We use the more natural name "farcall" for the more common order.
; The same goes for `farjp` and `jpfar`.
MACRO farcall
ld b, BANK(\1)
ld hl, \1
call Bankswitch
ENDM
MACRO callfar
ld hl, \1
ld b, BANK(\1)
call Bankswitch
ENDM
MACRO farjp
ld b, BANK(\1)
ld hl, \1
jp Bankswitch
ENDM
MACRO jpfar
ld hl, \1
ld b, BANK(\1)
jp Bankswitch
ENDM
MACRO homecall
ldh a, [hLoadedROMBank]
push af
ld a, BANK(\1)
ldh [hLoadedROMBank], a
ld [rROMB], a
call \1
pop af
ldh [hLoadedROMBank], a
ld [rROMB], a
ENDM
MACRO homecall_sf ; homecall but save flags by popping into bc instead of af
ldh a, [hLoadedROMBank]
push af
ld a, BANK(\1)
ldh [hLoadedROMBank], a
ld [rROMB], a
call \1
pop bc
ld a, b
ldh [hLoadedROMBank], a
ld [rROMB], a
ENDM