ROM map (Boktai 3): Difference between revisions
Appearance
No edit summary |
No edit summary |
||
(3 intermediate revisions by the same user not shown) | |||
Line 20: | Line 20: | ||
|- | |- | ||
| 0x800211c || undefined Video_LoadGlobalTileset_Scripted(void) | | 0x800211c || undefined Video_LoadGlobalTileset_Scripted(void) | ||
|- | |||
| 0x801150c || int PasswordDecoder_StripTags(undefined4 out, undefined4 in, undefined4 count) | |||
Strips tags from the password. Copies all other data. | |||
|- | |||
| 0x8011578 || int PasswordDecoder_CharToIndex(byte * decodeTable, undefined4 high, undefined4 low) | |||
Looks up the input character (in high/low) in decodeTable | |||
and returns its index in decodeTable. | |||
This works for kana only? | |||
|- | |||
| 0x80115a4 || int PasswordDecoder_TextToIndices(PasswordDecoder * dec) | |||
|- | |||
| 0x80115dc || uint PasswordDecoder_ValidatePlayerName(PasswordDecoder * dec) | |||
|- | |||
| 0x8011660 || int PasswordDecoder_Parse(PasswordDecoder * dec) | |||
|- | |||
| 0x8011714 || void PasswordDecoder_SaveChanges(PasswordDecoder * dec, uchar * playerName) | |||
|- | |||
| 0x8011794 || int PasswordDecoder_Decode(char * pw, byte * pDecodeTable, byte * pNameTable, char * playerName) | |||
|- | |||
| 0x8030c84 || int TextBox_Open(byte * param_1) | |||
|- | |||
| 0x8030d9c || undefined TextBox_OpenScripted(void) | |||
|- | |||
| 0x8031e54 || void TextBox_SetDrawMode(TextBoxOutput * param_1, TextBoxDrawMode drawMode) | |||
|- | |||
| 0x8031e84 || void TextBox_UpdateDrawMode(TextBoxOutput * param_1) | |||
|- | |||
| 0x8031eac || void TextBox_AdvanceVertically(TextBoxOutput * out) | |||
|- | |||
| 0x8031ed8 || undefined TextBox_AdvanceHorizontally(TextBoxOutput * param_1, bool isWide) | |||
|- | |||
| 0x8031f58 || undefined TextBox_DrawCharNarrow(TextBoxOutput * param_1, undefined4 ch) | |||
|- | |||
| 0x8031fa0 || undefined TextBox_DrawCharWide(void) | |||
|- | |- | ||
| 0x8032070 || int16_t Text_ParseEscapeSequence(char * text) | | 0x8032070 || int16_t Text_ParseEscapeSequence(char * text) | ||
|- | |||
| 0x8032168 || int strncmp(char * param_1, char * param_2, undefined4 n) | |||
|- | |||
| 0x80321a0 || int atoi_n(char * str, int n) | |||
|- | |- | ||
| 0x803223c || char * String_FindCharOrNullTerminator(char * s, char ch) | | 0x803223c || char * String_FindCharOrNullTerminator(char * s, char ch) | ||
Line 27: | Line 65: | ||
null terminator. This function will return a pointer to the null | null terminator. This function will return a pointer to the null | ||
terminator instead. | terminator instead. | ||
|- | |||
| 0x8032254 || char * TextBox_GetTagValue(TextBoxOutput * out, undefined4 string) | |||
|- | |||
| 0x803232c || undefined TextBox_ParseTag(undefined4 out, undefined4 string) | |||
|- | |||
| 0x8032a44 || char * TextBox_DrawOneCharImpl(TextBoxOutput * out, char * string) | |||
|- | |||
| 0x8032b24 || int TextBox_DrawOneChar(TextBoxOutput * param_1) | |||
|- | |||
| 0x8032c54 || void TextBox_SetBounds(TextBoxOutput * param_1, undefined1 x, undefined1 y, undefined1 width, undefined1 height) | |||
|- | |||
| 0x8032c80 || void TextBox_SetBoundsEx(undefined4 out, undefined1 x, undefined1 y, undefined1 width, undefined1 height) | |||
|- | |||
| 0x8032cd4 || undefined TextBox_SetExtendCore(TextBoxOutput * out, undefined4 extend, char * str) | |||
|- | |||
| 0x80335f4 || char * TextSmallBox_LookupString(TextSmallBox * box, undefined4 offset) | |||
|- | |||
| 0x803360c || TextSmallBox * TextSmallBox_FindByHandleCore(TextSmallBoxList * list, undefined4 handle) | |||
|- | |||
| 0x8033634 || TextSmallBox * TextSmallBox_FindByHandle(int handle) | |||
|- | |||
| 0x8033654 || int TextSmallBox_CreateHandle(TextSmallBoxList * list) | |||
|- | |||
| 0x8033690 || int TextSmallBox_Create(undefined1 x, undefined1 y, undefined1 width, undefined1 height) | |||
|- | |||
| 0x80337fc || int TextSmallBox_SetDrawCallback(undefined4 handle) | |||
|- | |||
| 0x803386c || int TextSmallBox_SetStringRef(int handle, byte * ptrStringRef) | |||
|- | |||
| 0x8033924 || int TextSmallBox_SetStringOffset(undefined4 handle, undefined2 offset) | |||
|- | |||
| 0x803398c || int TextSmallBox_SetString(int handle, char * string) | |||
|- | |||
| 0x8033a38 || int TextSmallBox_SetExtend(int handle, undefined4 extend, char * str) | |||
|- | |||
| 0x8033af8 || void TextSmallBox_CallDrawOneChar(int param_1, TextSmallBox * param_2) | |||
|- | |||
| 0x8033e18 || undefined Credits_Update(void) | |||
|- | |||
| 0x8033e74 || int Credits_Destroy(int param_1) | |||
|- | |||
| 0x8033ea4 || undefined Credits_LoadData(void) | |||
|- | |||
| 0x8033fec || undefined Credits_Init(void) | |||
|- | |||
| 0x8034030 || undefined Credits_Create(void) | |||
|- | |||
| 0x8036ca4 || undefined Crossover_GetMappingBuf(void) | |||
|- | |||
| 0x8036cac || uint Crossover_MapCharToBoktai(uint param_1) | |||
|- | |||
| 0x8036cc4 || undefined Crossover_MapCharToBN(void) | |||
|- | |||
| 0x8036d80 || undefined Crossover_LoadMappingBuf(void) | |||
|- | |||
| 0x8037b20 || undefined CrossoverLobby_Update(CrossoverLobby * param_1) | |||
|- | |||
| 0x8037b6c || undefined CrossoverLobby_Destroy(CrossoverLobby * param_1) | |||
|- | |||
| 0x8037bb8 || int CrossoverLobby_Init(CrossoverLobby * param_1) | |||
|- | |||
| 0x8037d80 || undefined CrossoverLobby_Create(void) | |||
|- | |||
| 0x8044cf4 || uint PasswordDecoder_GetBits(PasswordDecoder * dec, undefined4 pCursor, undefined4 bitCount, undefined4 param_4) | |||
|- | |||
| 0x8044d6c || undefined PasswordDecoder_Setup(undefined param_1, undefined param_2, undefined param_3, undefined param_4, undefined4 param_5, undefined4 param_6) | |||
|- | |||
| 0x80453dc || void PasswordDecoder_ParseCore(PasswordDecoderOutput * out, PasswordDecoder * dec, int offset) | |||
|- | |||
| 0x810fddc || undefined BikeRace_Render3Digits(void) | |||
|- | |||
| 0x8110834 || undefined BikeRace_RecordScreen_Update(void) | |||
|- | |||
| 0x811086c || undefined BikeRace_RecordScreen_Destroy(void) | |||
|- | |||
| 0x8110894 || int BikeRace_RecordScreen_Init(int param_1) | |||
|- | |||
| 0x8110a40 || undefined BikeRace_RecordScreen_Create(void) | |||
|- | |- | ||
| 0x816381c || void Video_AnimatePalette(ushort * palEntry, byte * timer) | | 0x816381c || void Video_AnimatePalette(ushort * palEntry, byte * timer) | ||
Line 35: | Line 151: | ||
|- | |- | ||
| 0x81793ec || undefined BikeRace_UpdateTimer(void) | | 0x81793ec || undefined BikeRace_UpdateTimer(void) | ||
|- | |||
| 0x81bb294 || void Bank_ApplyInterest(void) | |||
|- | |- | ||
| 0x81db474 || void OptionMenu_Update(OptionMenu * menu) | | 0x81db474 || void OptionMenu_Update(OptionMenu * menu) | ||
Line 58: | Line 176: | ||
| 0x81dc470 || int EnterPasswordYesNo_Init(EnterPasswordYesNo * param_1) | | 0x81dc470 || int EnterPasswordYesNo_Init(EnterPasswordYesNo * param_1) | ||
|- | |- | ||
| 0x81dc6d0 || void | | 0x81dc6d0 || void RegionMenu_Render(RegionMenu * param_1) | ||
|- | |- | ||
| 0x81dc754 || void | | 0x81dc754 || void RegionMenu_OnSelect(RegionMenu * param_1) | ||
Called when selecting an option | Called when selecting an option | ||
in the region menu | in the region menu | ||
|- | |- | ||
| 0x81dc7a0 || void | | 0x81dc7a0 || void RegionMenu_Update(RegionMenu * param_1) | ||
|- | |- | ||
| 0x81dca6c || void | | 0x81dca6c || void RegionMenu_Destroy(int param_1) | ||
|- | |- | ||
| 0x81dca9a || int Time_LoadRegionList(int param_1) | | 0x81dca9a || int Time_LoadRegionList(int param_1) | ||
|- | |- | ||
| 0x81dca9c || int | | 0x81dca9c || int RegionMenu_Init(RegionMenu * param_1) | ||
|- | |||
| 0x81dcdf4 || void * RegionMenu_Create(void) | |||
|- | |||
| 0x81dcf20 || void NameEntry_Load(NameEntry * menu, uchar * input) | |||
|- | |||
| 0x81dcf84 || void NameEntry_DrawInput(char * input) | |||
|- | |||
| 0x81dcfe4 || undefined NameEntry_Render(NameEntry * menu) | |||
|- | |||
| 0x81dd174 || undefined NameEntry_HandleUp(NameEntry * menu) | |||
|- | |||
| 0x81dd3b8 || undefined NameEntry_HandleDown(void) | |||
|- | |- | ||
| | | 0x81dd590 || undefined NameEntry_HandleRight(void) | ||
|- | |- | ||
| 0x81ddbc0 || void | | 0x81dd80c || undefined NameEntry_HandleLeft(void) | ||
|- | |||
| 0x81dda78 || bool NameEntry_AddChar(NameEntry * menu) | |||
|- | |||
| 0x81ddaf0 || undefined NameEntry_SwitchKeyboard(void) | |||
|- | |||
| 0x81ddb44 || uint NameEntry_DrawSomething(NameEntry * name) | |||
|- | |||
| 0x81ddbc0 || void NameEntry_Update(NameEntry * menu) | |||
|- | |||
| 0x81de078 || void NameEntry_Destroy(NameEntry * menu) | |||
|- | |||
| 0x81de0cc || int NameEntry_Init(NameEntry * menu) | |||
|- | |||
| 0x81de5a4 || NameEntry * NameEntry_Create(void) | |||
|- | |- | ||
| 0x81de5e4 || void TimeMenu_HideSprites(TimeMenu * menu) | | 0x81de5e4 || void TimeMenu_HideSprites(TimeMenu * menu) | ||
Line 95: | Line 239: | ||
|- | |- | ||
| 0x81df0ac || undefined TimeMenu_Create(void) | | 0x81df0ac || undefined TimeMenu_Create(void) | ||
|- | |||
| 0x81df0ec || void PasswordMenu_SaveToEwram(PasswordMenu * menu) | |||
|- | |||
| 0x81df124 || void PasswordMenu_LoadFromEwram(PasswordMenu * param_1) | |||
|- | |||
| 0x81df160 || void PasswordMenu_Clear(PasswordMenu * param_1) | |||
|- | |||
| 0x81df1a0 || void PasswordMenu_ConcatPassword(char * in, undefined4 out) | |||
Concats the 4 quadrants into a single char array. | |||
Leaves all data as-is (so that char array will still contain tags) | |||
|- | |- | ||
| 0x81df1d8 || void PasswordMenu_CalcCursorPosition(PasswordMenu * menu) | | 0x81df1d8 || void PasswordMenu_CalcCursorPosition(PasswordMenu * menu) | ||
Line 123: | Line 277: | ||
|- | |- | ||
| 0x81e0474 || PasswordMenu * PasswordMenu_Create(void) | | 0x81e0474 || PasswordMenu * PasswordMenu_Create(void) | ||
|- | |||
| 0x81e1af4 || undefined SoundTest_CountItems(SoundTest * param_1) | |||
|- | |||
| 0x81e1c10 || undefined SoundTest_DrawBgm(SoundTest * menu) | |||
|- | |||
| 0x81e1c64 || undefined SoundTest_DrawSfx(SoundTest * menu) | |||
|- | |||
| 0x81e1cdc || undefined SoundTest_DrawVoice(SoundTest * menu) | |||
|- | |||
| 0x81e1d50 || undefined SoundTest_Play(SoundTest * menu) | |||
|- | |||
| 0x81e1e50 || undefined SoundTest_Cancel(void) | |||
|- | |||
| 0x81e1f5c || undefined SoundTest_OnLeft(void) | |||
|- | |||
| 0x81e1ff8 || undefined SoundTest_OnRight(SoundTest * menu) | |||
|- | |||
| 0x81e2154 || undefined SoundTest_Update(SoundTest * menu) | |||
|- | |||
| 0x81e2300 || void SoundTest_Destroy(SoundTest * menu) | |||
|- | |||
| 0x81e23a0 || int SoundTest_Init(SoundTest * menu) | |||
|- | |||
| 0x81e26cc || undefined SoundTest_Create(void) | |||
|- | |- | ||
| 0x81e2f44 || undefined Help_InitHelpScreen(void) | | 0x81e2f44 || undefined Help_InitHelpScreen(void) | ||
|- | |||
| 0x81ea7f0 || void MainMenu_InitBackground(MainMenu * menu) | |||
|- | |||
| 0x81ea8a8 || undefined MainMenu_InitSprites(MainMenu * menu) | |||
|- | |||
| 0x81ea9b4 || undefined MainMenu_HideSprites(MainMenu * menu) | |||
|- | |||
| 0x81eaa20 || undefined MainMenu_DestroyCore(void) | |||
|- | |||
| 0x81eab64 || void MainMenu_Update(undefined4 menu) | |||
|- | |||
| 0x81eb598 || undefined MainMenu_Destroy(void) | |||
|- | |||
| 0x81eb5a8 || int MainMenu_Init(MainMenu * menu) | |||
|- | |||
| 0x81eb7dc || undefined MainMenu_Create(void) | |||
|- | |- | ||
| 0x8210a8c || int Album_GetAcquiredCount(void) | | 0x8210a8c || int Album_GetAcquiredCount(void) | ||
Line 183: | Line 377: | ||
|- | |- | ||
| 0x8218d1c || undefined Video_LoadCharFromFont(undefined4 param_1, undefined4 ch, undefined4 param_3, undefined4 param_4, undefined4 param_5) | | 0x8218d1c || undefined Video_LoadCharFromFont(undefined4 param_1, undefined4 ch, undefined4 param_3, undefined4 param_4, undefined4 param_5) | ||
|- | |||
| 0x8218e5c || void Video_ClearRect1(uint x, uint y, int w, int h) | |||
|- | |||
| 0x8218ed8 || undefined Video_ClearRect2(void) | |||
|- | |- | ||
| 0x8218f2c || void Video_DrawCharNarrow(undefined4 ch, undefined4 x, undefined4 y, undefined4 param_4) | | 0x8218f2c || void Video_DrawCharNarrow(undefined4 ch, undefined4 x, undefined4 y, undefined4 param_4) | ||
Line 199: | Line 397: | ||
| 0x82197a4 || int Sprite_InitWithSprite(undefined4 sprite, SpriteSet * set, undefined4 spriteIndex, undefined4 param_4, undefined1 param_5, undefined1 param_6, undefined2 param_7, short * initialPosition) | | 0x82197a4 || int Sprite_InitWithSprite(undefined4 sprite, SpriteSet * set, undefined4 spriteIndex, undefined4 param_4, undefined1 param_5, undefined1 param_6, undefined2 param_7, short * initialPosition) | ||
|- | |- | ||
| 0x821980c || int Sprite_SetSprite(Sprite * sprite, SpriteSet * set, | | 0x821980c || int Sprite_SetSprite(Sprite * sprite, SpriteSet * set, uint param_3, undefined1 param_4) | ||
|- | |- | ||
| 0x821983c || int Sprite_Create(Sprite * sprite, SpriteSet * set, | | 0x821983c || int Sprite_Create(Sprite * sprite, SpriteSet * set, uint spriteId, uint param_4, undefined1 param_5, undefined1 param_6, ushort param_7, int * param_8) | ||
|- | |- | ||
| 0x8219aac || undefined Actor_Boot(void) | | 0x8219aac || undefined Actor_Boot(void) | ||
Line 220: | Line 418: | ||
| 0x8219dd8 || void bzero(void * mem, uint bytes) | | 0x8219dd8 || void bzero(void * mem, uint bytes) | ||
|- | |- | ||
| 0x8219ebc || | | 0x8219e44 || void memset(undefined1 * param_1, undefined1 param_2, uint param_3) | ||
|- | |||
| 0x8219ebc || void memcpy_slow(undefined4 dst, undefined4 src, undefined4 nb) | |||
|- | |- | ||
| 0x8219f50 || undefined Actor_InitializeList(void) | | 0x8219f50 || undefined Actor_InitializeList(void) | ||
Line 246: | Line 446: | ||
| 0x821a520 || void * Mft_GetFile(ushort dirId, undefined4 fileId) | | 0x821a520 || void * Mft_GetFile(ushort dirId, undefined4 fileId) | ||
|- | |- | ||
| 0x821a66c || | | 0x821a66c || byte * Script_ReadLength(byte * pc, int * length) | ||
Returns pc after all the length bytes, the length itself is stored in *length. | Returns pc after all the length bytes, the length itself is stored in *length. | ||
|- | |||
| 0x821a6c0 || byte * Script_ParseNextKw(byte * pc, uint * nextKw) | |||
|- | |- | ||
| 0x821a6f0 || byte * Script_GetValueCore(byte * pc, uint * param_2, int * out_value) | | 0x821a6f0 || byte * Script_GetValueCore(byte * pc, uint * param_2, int * out_value) | ||
|- | |- | ||
| 0x821a91c || undefined Script_StoreVariable(void) | | 0x821a91c || undefined Script_StoreVariable(void) | ||
|- | |||
| 0x821a940 || undefined Script_PushNextKw(void) | |||
|- | |||
| 0x821a950 || undefined Script_PopNextKw(void) | |||
|- | |- | ||
| 0x821a960 || void Script_SetPc(byte * pc) | | 0x821a960 || void Script_SetPc(byte * pc) | ||
Line 268: | Line 474: | ||
|- | |- | ||
| 0x821ab88 || int Script_GetValueSafe(void) | | 0x821ab88 || int Script_GetValueSafe(void) | ||
|- | |||
| 0x821aba8 || int Script_GetKeywordValue(char kw, int fallback) | |||
|- | |||
| 0x821ac30 || void * Script_GetControlHandler(undefined4 ctrl) | |||
|- | |||
| 0x821ac6c || uint Script_ExecControl(undefined2 * pc) | |||
|- | |- | ||
| 0x821acdc || byte * Script_LookupById(int script_id, uint * param_2) | | 0x821acdc || byte * Script_LookupById(int script_id, uint * param_2) | ||
Line 276: | Line 488: | ||
|- | |- | ||
| 0x821af2c || int Script_ExecBlock(byte * pc, undefined4 param_2, undefined4 param_3) | | 0x821af2c || int Script_ExecBlock(byte * pc, undefined4 param_2, undefined4 param_3) | ||
|- | |||
| 0x821afb4 || int Script_ExecByPointer(byte * pc, undefined * argp) | |||
|- | |- | ||
| 0x821afd8 || int Script_Exec(byte * pc, int param_2) | | 0x821afd8 || int Script_Exec(byte * pc, int param_2) | ||
|- | |||
| 0x821b084 || undefined Sys_ShuffleSaveBuffers(void) | |||
|- | |- | ||
| 0x821b148 || void Save_BackupStatAndWorld(void) | | 0x821b148 || void Save_BackupStatAndWorld(void) | ||
Line 284: | Line 500: | ||
|- | |- | ||
| 0x821b3e4 || undefined Script_StorePointer(void) | | 0x821b3e4 || undefined Script_StorePointer(void) | ||
|- | |||
| 0x821b738 || undefined8 Script_Ctrl_IfCore(byte * param_1) | |||
|- | |||
| 0x821b794 || undefined Script_Ctrl_If(void) | |||
|- | |||
| 0x821b858 || int Script_Ctrl_DebugPrint(byte * param_1) | |||
|- | |- | ||
| 0x821b938 || undefined Script_RunOperator(void) | | 0x821b938 || undefined Script_RunOperator(void) | ||
|- | |- | ||
| 0x821ba5c || int Script_RunExpression(byte * pc) | | 0x821ba5c || int Script_RunExpression(byte * pc) | ||
|- | |||
| 0x8221548 || uint PasswordMenu_CalculateChecksumCore(PasswordDecoder * dec, uint start, uint end, uint seed) | |||
|- | |||
| 0x8221594 || uint PasswordDecoder_CalculateChecksum(PasswordDecoder * dec, uint start, uint end) | |||
|- | |- | ||
| 0x8225410 || int Save_BackupStatAndWorld_Scripted(void) | | 0x8225410 || int Save_BackupStatAndWorld_Scripted(void) | ||
|- | |||
| 0x8225504 || undefined Script_Ctrl_0bb3(void) | |||
|- | |||
| 0x8225508 || undefined Script_Ctrl_CallMap(void) | |||
|- | |||
| 0x8225560 || undefined Script_Ctrl_9906(void) | |||
|- | |||
| 0x8225590 || undefined Script_Ctrl_b745(void) | |||
|- | |||
| 0x82255bc || undefined Script_Ctrl_22ff(void) | |||
|- | |||
| 0x8225620 || undefined Script_Ctrl_c091(void) | |||
|- | |||
| 0x8225624 || undefined Script_Ctrl_SetZoneCallback(void) | |||
|- | |||
| 0x82257a0 || undefined Script_Ctrl_e43c(void) | |||
|- | |||
| 0x8227878 || undefined Stat_GetPlayerName(void) | |||
|- | |||
| 0x8227e90 || void * Script_GetPc2(void) | |||
|- | |- | ||
| 0x82284f4 || void Time_ClearData(void) | | 0x82284f4 || void Time_ClearData(void) | ||
Line 307: | Line 553: | ||
|- | |- | ||
| 0x8228d94 || undefined Time_GetRtcMinutes(void) | | 0x8228d94 || undefined Time_GetRtcMinutes(void) | ||
|- | |||
| 0x8228da0 || int Time_GetRtcSeconds(void) | |||
|- | |- | ||
| 0x8229180 || int Time_WriteToRtcChip(undefined4 year, undefined4 month, undefined4 date, undefined1 hours, undefined1 minutes, undefined1 seconds) | | 0x8229180 || int Time_WriteToRtcChip(undefined4 year, undefined4 month, undefined4 date, undefined1 hours, undefined1 minutes, undefined1 seconds) | ||
Line 317: | Line 565: | ||
|- | |- | ||
| 0x822c238 || undefined Sensor_GetBars(void) | | 0x822c238 || undefined Sensor_GetBars(void) | ||
|- | |||
| 0x822fe60 || undefined MP2K_SoundInit(void) | |||
|- | |||
| 0x822fed8 || undefined MP2K_SoundMain(void) | |||
|- | |||
| 0x822fee4 || void MP2K_SongNumStart(int param_1) | |||
|- | |||
| 0x82305cc || undefined MP2K_SoundVSync(void) | |||
|- | |- | ||
| 0x8243d28 || void Sensor_Timer3Handler(void) | | 0x8243d28 || void Sensor_Timer3Handler(void) | ||
Line 356: | Line 612: | ||
| 0x824da48 || void * memcpy'(void * dest, void * src, uint len) | | 0x824da48 || void * memcpy'(void * dest, void * src, uint len) | ||
How is this different from memcpy? | How is this different from memcpy? | ||
|- | |||
| 0x824daa8 || uint * memset'(uint * param_1, uint param_2, uint param_3) | |||
|- | |||
| 0x826456c || MP2K_SongTable (1483 entries) | |||
|- | |- | ||
| 0x860330c || [[Engine calls (Boktai_3)|Engine call]] table (null-terminated array of <code>struct { void(*)(int r0) fn; int id; }</code>) | | 0x860330c || [[Engine calls (Boktai_3)|Engine call]] table (null-terminated array of <code>struct { void(*)(int r0) fn; int id; }</code>) |