Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ...
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement