2018-06-24 07:09:41 -07:00
|
|
|
FarCall_de::
|
2013-09-05 11:24:29 -07:00
|
|
|
; Call a:de.
|
|
|
|
; Preserves other registers.
|
|
|
|
|
|
|
|
ld [hBuffer], a
|
|
|
|
ld a, [hROMBank]
|
|
|
|
push af
|
|
|
|
ld a, [hBuffer]
|
|
|
|
rst Bankswitch
|
|
|
|
call .de
|
|
|
|
jr ReturnFarCall
|
|
|
|
|
|
|
|
.de
|
|
|
|
push de
|
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
FarCall_hl::
|
2013-09-05 11:24:29 -07:00
|
|
|
; Call a:hl.
|
|
|
|
; Preserves other registers.
|
|
|
|
|
|
|
|
ld [hBuffer], a
|
|
|
|
ld a, [hROMBank]
|
|
|
|
push af
|
|
|
|
ld a, [hBuffer]
|
|
|
|
rst Bankswitch
|
2015-11-03 19:35:36 -08:00
|
|
|
call FarJump_hl
|
2013-09-05 11:24:29 -07:00
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
ReturnFarCall::
|
2013-09-05 11:24:29 -07:00
|
|
|
; We want to retain the contents of f.
|
|
|
|
; To do this, we can pop to bc instead of af.
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2013-09-05 11:24:29 -07:00
|
|
|
ld a, b
|
2015-11-03 19:35:36 -08:00
|
|
|
ld [wFarCallBCBuffer], a
|
2013-09-05 11:24:29 -07:00
|
|
|
ld a, c
|
2015-11-03 19:35:36 -08:00
|
|
|
ld [wFarCallBCBuffer + 1], a
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2013-09-05 11:24:29 -07:00
|
|
|
; Restore the working bank.
|
|
|
|
pop bc
|
|
|
|
ld a, b
|
|
|
|
rst Bankswitch
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2015-11-03 19:35:36 -08:00
|
|
|
ld a, [wFarCallBCBuffer]
|
2013-09-05 11:24:29 -07:00
|
|
|
ld b, a
|
2015-11-03 19:35:36 -08:00
|
|
|
ld a, [wFarCallBCBuffer + 1]
|
2013-09-05 11:24:29 -07:00
|
|
|
ld c, a
|
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
FarJump_hl::
|
2017-06-09 14:01:10 -07:00
|
|
|
jp hl
|