...
call Function_01d1
db $e0
...
; Switch to specified context?
Function_01d1:
; Store the registers
push af
push bc
push de
push hl
; Read the return address
ld hl, sp+$08
ld a, [hli]
ld e, a
ld d, [hl]
; Read the 1-byte arg to b
ld a, [de]
ld b, a
; Set the return address to 1 byte after the arg
inc de
ld a, d
ld [hld], a
ld [hl], e
; Byte at HRAM address DF contains an offset into hram
ldh a, [$ffdf]
ld c, a
; Store sp
ld hl, sp+0
ld a, l
ldh [c], a
inc c
ld a, h
ldh [c], a
inc c
; Store the ROM bank number, which is a word at $4000
ld a, [$4000]
ldh [c], a
inc c
ld a, [$4001]
ldh [c], a
inc c
; Store the WRAM bank number
ldh a, [rSVBK]
ldh [c], a
; Store the new offset
ld a, b
ldh [$ffdf], a
; Load the stack pointer corresponding to the new offset
ld c, a
ldh a, [c]
ld l, a
inc c
ldh a, [c]
ld h, a
ld sp, hl
inc c
; Switch to the context banks
ldh a, [c]
inc c
inc c
call Bankswitch
ldh a, [c]
ldh [rSVBK], a
; Pop the registers
pop hl
pop de
pop bc
pop af
ret
Comments
0 B
|👍
/👎
0 B
|👍
/👎