====== Functions ====== ===== Startup Code ===== The startup code is copied from ROM 0x1000 to 0x8021ED00 by the boot code. It is a relatively short chunk of code whose main job is to initialize enough of the OS to DMA the rest of the gzipped code (hd_code_text.raw and hd_code_data.raw) from ROM and inflate it. ^ Address ^ Function ^ Description ^ | 0x8021ED00 | EntryPoint | | | 0x80220730 | Main | | | 0x80220BA0 | bzero | | | 0x80220C40 | osInitialize | | | 0x80220E70 | DmaCopy | | | 0x80220F50 | GetDmaStatus | | | 0x80220F70 | %%__osGetSR%% | | | 0x80220F80 | %%__osSetFpcCsr%% | | | 0x80220F90 | %%__osSiRawReadIo%% | | | 0x80220FE0 | %%__osSiRawWriteIo%% | | | 0x802218A0 | osWriteBackDCache | | | 0x80221920 | osInvalCache | | | 0x80221A00 | osEPiRawReadIo | | | 0x80221AC8 | %%__ull_div%% | | | 0x80221BC8 | %%__ll_mul%% | | | 0x80221DE0 | %%__osSiDeviceBusy%% | | ===== Game Code (hd_code_text.raw) ===== ^ Address ^ Function ^ Description ^ | 0x802447C0 | %%MainJump%% | | | 0x80244870 | %%Thread1%% | | | 0x80244930 | %%Thread3%% | | | 0x8025615C | %%LoadLevel%% | | | 0x80267A9C | %%Thread4%% | | | 0x8026FBB0 | %%LoadLevelRdus%% | | | 0x80270F7C | %%Thread5%% | | | 0x8028B4C4 | %%InitiateDma%% | | | 0x8028C190 | %%LoadLevelAmmo%% | | | 0x8028D4C0 | %%LoadLevelTnt%% | | | 0x8028FDA0 | %%LoadLevelSquareBlocks%% | | | 0x802A1A9C | %%LoadLevelTodo74%% | | | 0x802A1C20 | %%LoadLevelTodo2C%% | | | 0x802A1D54 | %%LoadLevelBuildings%% | | | 0x802A2BB0 | %%CopyBuildingTableToRam%% | | | 0x802A2A98 | %%InflateBuildingData%% | | | 0x802A2C54 | %%LoadLevelTodo60%% | | | 0x802A2D68 | %%LoadLevelTodo4C%% | | | 0x802A3000 | %%LoadLevelTodo78%% | | | 0x802A3504 | %%LoadLevelVehicles%% | | | 0x802A3034 | %%LoadLevelMissileCarrier%% | | | 0x802A3D4C | %%LoadLevelCollisionXZ%% | | | 0x802A3DF0 | %%LoadLevelTodo70%% | | | 0x802A3E94 | %%LoadLevelTodo64%% | | | 0x802A3F78 | %%LoadLevelTrainPlatform%% | | | 0x802A445C | %%LoadLevelTerrain%% | | | 0x802A44DC | %%AlignTo8Bytes%% | | | 0x802A5500 | %%LoadLevelTodo40%% | | | 0x802A55F4 | %%LoadLevelTodo44%% | | | 0x802A57CC | %%DecodeTexture%% | | | 0x802A5948 | %%DecodeTexture6%% | | | 0x802A5A1C | %%DecodeTexture3%% | | | 0x802A5AD0 | %%DecodeTexture1%% | | | 0x802A5B80 | %%DecodeTexture2%% | | | 0x802A5C4C | %%DecodeTexture4%% | | | 0x802A5D24 | %%DecodeTexture5%% | | | 0x802A5E00 | %%DecodeTexture0%% | | | 0x802C4058 | %%GzipInflate%% | | | 0x802CE9F0 | %%LoadLevelCommPoint%% | | | 0x802D3F70 | %%osInitialize%% | | | 0x802D41A0 | %%osEPiRawReadIo%% | | | 0x802D4200 | %%osCreateThread%% | | | 0x802D4350 | %%osStartThread%% | | | 0x802D44B0 | %%osCreatePiManager%% | | | 0x802D4630 | %%osSetThreadPri%% | | | 0x802D4710 | %%osSendMesg%% | | | 0x802D4860 | %%osRecvMesg%% | | | 0x802D49A0 | %%osViBlack%% | | | 0x802D4A10 | %%osGetTime%% | | | 0x802D4AA0 | %%__ull_rshift%% | | | 0x802D4ACC | %%__ull_rem%% | | | 0x802D4B08 | %%__ull_div%% | | | 0x802D4B44 | %%__ll_lshift%% | | | 0x802D4B70 | %%__ll_rem%% | | | 0x802D4BAC | %%__ll_div%% | | | 0x802D4C08 | %%__ll_mul%% | | | 0x802D4C38 | %%__ull_divremi%% | | | 0x802D4C98 | %%__ll_mod%% | | | 0x802D4D34 | %%__ll_rshift%% | | | 0x802D4D70 | %%osVirtualToPhysical%% | | | 0x802D4DF0 | %%osWriteBackDCache%% | | | 0x802D4F10 | %%guOrthoF%% | | | 0x802D5064 | %%guFrustum%% | | | 0x802D50D0 | %%guPerspectiveF%% | | | 0x802D5300 | %%guPerspective%% | | | 0x802D5760 | %%guMtxF2L%% | | | 0x802D5860 | %%guMtxIdentF%% | | | 0x802D59D0 | %%guRotateRPYF%% | | | 0x802D5A24 | %%guRotateRPY%% | | | 0x802D5F30 | %%sqrtf%% | | | 0x802D6270 | %%sinf%% | | | 0x802D6430 | %%osCreateMesgQueue%% | | | 0x802D64A0 | %%osViSetSpecialFeatures%% | | | 0x802D6660 | %%osWriteBackDCacheAll%% | | | 0x802D6690 | %%osInvalDCache%% | | | 0x802D6740 | %%osDestroyThread%% | | | 0x802D6840 | %%cosf%% | | | 0x802D69B0 | %%proutSprintf%% | | | 0x802D6A1C | %%sprintf%% | | | 0x802D75B0 | %%osSetIntMask%% | | | 0x802D83B4 | %%alBnkfNew%% | | | 0x802D84B8 | %%alSetFileNew%% | | | 0x802D9770 | %%osGetCount%% | | | 0x802D9820 | %%__osViInit%% | | | 0x802D9950 | %%osAiSetFrequency%% | | | 0x802D9AB0 | %%osAiSetNextBuffer%% | | | 0x802D9B60 | %%osAiGetLength%% | | | 0x802DA240 | %%osPiStartDma%% | | | 0x802DA560 | %%osCreateViManager%% | | | 0x802DA6E4 | %%__osViDevMgrMain%% | | | 0x802DA8C0 | %%osViSetMode%% | | | 0x802DA930 | %%osSetEventMsg%% | | | 0x802DA9A0 | %%osViSetEventMsg%% | | | 0x802DAAA0 | %%osViSwapBuffer%% | | | 0x802DAAF0 | %%osSetTimer%% | | | 0x802DAC50 | %%osSpTaskDunno%% | | | 0x802DAD6C | %%osSpTaskLoad%% | | | 0x802DAECC | %%osSpTaskStartGo%% | | | 0x802DAF10 | %%osSpTaskYield%% | | | 0x802DAFF0 | %%osContInit%% | | | 0x802DB1EC | %%__osContGetInitData%% | | | 0x802DB2BC | %%__osPackRequestData%% | | | 0x802DB420 | %%osContStartReadData%% | | | 0x802DB4E4 | %%osContGetReadData%% | | | 0x802DB680 | %%osInvalCache%% | | | 0x802DB700 | %%bzero%% | | | 0x802DB8E0 | %%__osSetSR%% | | | 0x802DB8F0 | %%__osGetSR%% | | | 0x802DB900 | %%__osSetFpcCsr%% | | | 0x802DB910 | %%__osSiRawReadIo%% | | | 0x802DB960 | %%__osSiRawWriteIo%% | | | 0x802DB9B0 | %%__osExceptionPreamble%% | | | 0x802DB9C0 | %%__osExceptionHandler%% | | | 0x802DBFF0 | %%__osEnqueueAndYield%% | | | 0x802DC080 | %%__osEnqueueThread%% | | | 0x802DC0C8 | %%__osPopThread%% | | | 0x802DC0D8 | %%__osDispatchThread%% | | | 0x802DC218 | %%__osCleanupThread%% | | | 0x802DC280 | %%__osDisableInt%% | | | 0x802DC2A0 | %%__osRestoreInt%% | | | 0x802DC300 | %%__osPiCreateAccessQueue%% | | | 0x802DC350 | %%__osPiGetAccess%% | | | 0x802DC394 | %%__osPiRelAccess%% | | | 0x802DC3C0 | %%osGetThreadPri%% | | | 0x802DC3E0 | %%osPiRawStartDma%% | | | 0x802DC4C0 | %%__osDevMgrMain%% | | | 0x802DC640 | %%__osTimerServicesInit%% | | | 0x802DC6CC | %%__osTimerInterrupt%% | | | 0x802DC844 | %%__osSetTimerIntr%% | | | 0x802DC8B8 | %%__osInsertTimer%% | | | 0x802DCA40 | %%__osProbeTLB%% | | | 0x802DCB00 | %%_Printf%% | | | 0x802DDC90 | %%memcpy%% | | | 0x802DFB50 | %%__osAiDeviceBusy%% | | | 0x802E20F0 | %%osJamMesg%% | | | 0x802E2280 | %%__osSpGetStatus%% | | | 0x802E2290 | %%bcopy%% | | | 0x802E25A0 | %%__osSpSetStatus%% | | | 0x802E25B0 | %%__osSpSetPc%% | | | 0x802E25F0 | %%__osSpRawStartDma%% | | | 0x802E2680 | %%__osSpDeviceBusy%% | | | 0x802E26B0 | %%__osSiRawStartDma%% | | | 0x802E2760 | %%__osSiCreateAccessQueue%% | | | 0x802E27B0 | %%__osSiGetAccess%% | | | 0x802E27F4 | %%__osSiRelAccess%% | | | 0x802E2820 | %%__osSiDeviceBusy%% | | | 0x802E2CD0 | %%__osSyncPutChars%% | | | 0x802E2E00 | %%__osSetCompare%% | | | 0x802E5150 | %%__osAtomicDec%% | | ===== UI Code (hd_front_end_text.raw) ===== The EEPROM functions are all stored in the hd_front_end_text.raw gzip file. In the (U) (1.0) ROM, these are inflated to 0x801E7000. ^ RAM/offset ^ Function ^ | 801F1944/00A944 | int ManageEeprom(u8 block, u8 mode) | | 801F2C84/00BC84 | u8 UpdateChecksum(u8 *eeprom, int length) | | 80205760/01E760 | u8 ComputeChecksumByte(u8 *data) | | 80202850/01B850 | s32 osEepromProbe(OSMesgQueue *mq) | | 802042A0/01D2A0 | s32 osEepromLongWrite(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes) | | 802043E0/01D3E0 | s32 osEepromLongRead(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes) | | 80204BE0/01DBE0 | s32 osEepromWrite(OSMesgQueue *mq, u8 address, u8 *buffer) | | 802050C0/01E0C0 | s32 osEepromRead(OSMesgQueue *mq, u8 address, u8 *buffer) |