事前に関数を特定の領域に登録しておくことで、現在のバンクやレジスタの状態にかかわらず登録しておいた関数を呼び出せるようにしたもの
predefでは事前定義という言葉が示すようにpredefテーブルに関数を事前に登録しておく
事前に登録しておいた関数はpredefマクロを用いて呼び出すことができる
callはすでにROMバンクに存在している関数にしかジャンプできず、呼び出すときもPCしかスタックに保存しない
predefによる関数呼び出しは対象の関数が現在セットされていなくても可能(far callが可能)であり、呼び出す際にhl, de, bcをスタックに退避する
以後、predefで呼び出される関数のことをpredef-routineと呼ぶ
predefs.asmで行われている
add_predef
マクロでpredef-routineのあるバンク番号とアドレスをテーブル(PredefPointers
)に登録する
PredefPointers::
add_predef DrawPlayerHUDAndHPBar
add_predef CopyUncompressedPicToTilemap
add_predef AnimateSendingOutMon
...
asm_macros.asmで定義されているpredef
マクロを用いる
predef [predef_routine_name]
のようにしてpredef-routineを実行することができる