mirror of
https://github.com/thornAvery/jep-hack.git
synced 2025-09-17 02:30:50 +12:00
93 lines
2.3 KiB
NASM
93 lines
2.3 KiB
NASM
MACRO ___conversion_table_homecall
|
|
; macro arguments: homecall type, function label
|
|
; all functions clobber af and hl (except for outputs) and preserve bc and de
|
|
; homecall types:
|
|
; - read: index to ID conversion (in: a = 8-bit ID; out: hl = 16-bit index)
|
|
; - write: ID to index conversion (in: hl = 16-bit index; out: a = 8-bit ID)
|
|
; - lock: ID locking (in: a = ID (or zero to unlock), l = position; out: a = preserved)
|
|
if strcmp("\1", "read") && strcmp("\1", "write") && strcmp("\1", "lock")
|
|
fail "16-bit homecall: invalid call type"
|
|
endc
|
|
|
|
if (strcmp("\1", "write") != 0)
|
|
ld h, a
|
|
endc
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(\2)
|
|
rst Bankswitch
|
|
if (strcmp("\1", "read") == 0)
|
|
ld a, h
|
|
endc
|
|
call \2
|
|
if (strcmp("\1", "read") != 0)
|
|
ld l, a
|
|
endc
|
|
pop af
|
|
rst Bankswitch
|
|
if (strcmp("\1", "read") != 0)
|
|
ld a, l
|
|
endc
|
|
ret
|
|
ENDM
|
|
|
|
MACRO ___conversion_table_homecall_readlocked
|
|
; macro argument: table name
|
|
; in: a = position
|
|
; out: a = 8-bit index; everything else preserved
|
|
push hl
|
|
add a, LOW(\1LockedEntries)
|
|
ld l, a
|
|
ldh a, [rSVBK]
|
|
ld h, a
|
|
ld a, BANK(\1LockedEntries)
|
|
ldh [rSVBK], a
|
|
ld a, h
|
|
ld h, HIGH(\1LockedEntries)
|
|
ld l, [hl]
|
|
ldh [rSVBK], a
|
|
ld a, l
|
|
pop hl
|
|
ret
|
|
ENDM
|
|
|
|
; in: a = 8-bit index
|
|
; out: hl = 16-bit index; a clobbered
|
|
GetPokemonIndexFromID::
|
|
___conversion_table_homecall read, _GetPokemonIndexFromID
|
|
|
|
; in: hl = 16-bit index
|
|
; out: a = 8-bit index, hl clobbered
|
|
GetPokemonIDFromIndex::
|
|
___conversion_table_homecall write, _GetPokemonIDFromIndex
|
|
|
|
; in: a = 8-bit index or zero (to clear), l = position
|
|
; out: a = unchanged, hl = clobbered
|
|
LockPokemonID::
|
|
___conversion_table_homecall lock, _LockPokemonID
|
|
|
|
; in: a = position
|
|
; out: a = 8-bit index; everything else preserved
|
|
GetLockedPokemonID::
|
|
___conversion_table_homecall_readlocked wPokemonIndexTable
|
|
|
|
; in: a = 8-bit index
|
|
; out: hl = 16-bit index; a clobbered
|
|
GetMoveIndexFromID::
|
|
___conversion_table_homecall read, _GetMoveIndexFromID
|
|
|
|
; in: hl = 16-bit index
|
|
; out: a = 8-bit index, hl clobbered
|
|
GetMoveIDFromIndex::
|
|
___conversion_table_homecall write, _GetMoveIDFromIndex
|
|
|
|
; in: a = 8-bit index or zero (to clear), l = position
|
|
; out: a = unchanged, hl = clobbered
|
|
LockMoveID::
|
|
___conversion_table_homecall lock, _LockMoveID
|
|
|
|
; in: a = position
|
|
; out: a = 8-bit index; everything else preserved
|
|
GetLockedMoveID::
|
|
___conversion_table_homecall_readlocked wMoveIndexTable
|