Files

1731 lines
46 KiB
C

/*
Compile unit: C:\HOMEBOY\STEPHEN\Japanese Ocarina\Fire\cpu.c
Producer: MW EABI PPC C-Compiler
Language: C++
Code range: 0x80030E70 -> 0x80036870
*/
#include "dolphin/types.h"
typedef struct _XL_OBJECTTYPE {
/* 0x0 */ char* szName;
/* 0x4 */ int nSizeObject;
/* 0x8 */ struct _XL_OBJECTTYPE* pClassBase;
/* 0xC */ int (*pfEvent)(void*, int, void*);
} __anon_0x3CBBE; // size = 0x10
// size = 0x10, address = 0x800EB658
struct _XL_OBJECTTYPE gClassCPU;
// size = 0x80, address = 0x800EB668
static char* gaszNameGPR[32];
// size = 0x80, address = 0x800EB6E8
static char* gaszNameFPR[32];
// size = 0x80, address = 0x800EB850
static char* gaszNameCP0[32];
// size = 0x80, address = 0x800EBB04
static char* gaszNameCP1[32];
// size = 0x100, address = 0x800EBB88
static s64 ganMaskGetCP0[32];
// size = 0x100, address = 0x800EBC88
static s64 ganMaskSetCP0[32];
// size = 0x40, address = 0x800EBD88
static u8 Opcode[64];
// size = 0x40, address = 0x800EBDC8
static u8 SpecialOpcode[64];
// size = 0x20, address = 0x800EBE08
static u8 RegimmOpcode[32];
// size = 0x4, address = 0x801356E0
void* gHeapTree;
// size = 0x14, address = 0x800EBE28
static unsigned int ganOpcodeSaveFP1[5];
// size = 0x14, address = 0x800EBE3C
static unsigned int ganOpcodeSaveFP2_0[5];
// size = 0xC, address = 0x800EBE50
static unsigned int ganOpcodeSaveFP2_1[3];
// size = 0x14, address = 0x800EBE5C
static unsigned int ganOpcodeLoadFP[5];
// size = 0x80, address = 0x800EBE70
int ganMapGPR[32];
// size = 0x4, address = 0x801356E4
static int cpuCompile_DSLLV_function;
// size = 0x4, address = 0x801356E8
static int cpuCompile_DSRLV_function;
// size = 0x4, address = 0x801356EC
static int cpuCompile_DSRAV_function;
// size = 0x4, address = 0x801356F0
static int cpuCompile_DMULT_function;
// size = 0x4, address = 0x801356F4
static int cpuCompile_DMULTU_function;
// size = 0x4, address = 0x801356F8
static int cpuCompile_DDIV_function;
// size = 0x4, address = 0x801356FC
static int cpuCompile_DDIVU_function;
// size = 0x4, address = 0x80135700
static int cpuCompile_DADD_function;
// size = 0x4, address = 0x80135704
static int cpuCompile_DADDU_function;
// size = 0x4, address = 0x80135708
static int cpuCompile_DSUB_function;
// size = 0x4, address = 0x8013570C
static int cpuCompile_DSUBU_function;
// size = 0x4, address = 0x80135710
static int cpuCompile_S_SQRT_function;
// size = 0x4, address = 0x80135714
static int cpuCompile_D_SQRT_function;
// size = 0x4, address = 0x80135718
static int cpuCompile_W_CVT_SD_function;
// size = 0x4, address = 0x8013571C
static int cpuCompile_L_CVT_SD_function;
// size = 0x4, address = 0x80135720
static int cpuCompile_CEIL_W_function;
// size = 0x4, address = 0x80135724
static int cpuCompile_FLOOR_W_function;
// size = 0x4, address = 0x80135728
static int cpuCompile_ROUND_W_function;
// size = 0x4, address = 0x8013572C
static int cpuCompile_TRUNC_W_function;
// size = 0x4, address = 0x80135730
static int cpuCompile_LB_function;
// size = 0x4, address = 0x80135734
static int cpuCompile_LH_function;
// size = 0x4, address = 0x80135738
static int cpuCompile_LW_function;
// size = 0x4, address = 0x8013573C
static int cpuCompile_LBU_function;
// size = 0x4, address = 0x80135740
static int cpuCompile_LHU_function;
// size = 0x4, address = 0x80135744
static int cpuCompile_SB_function;
// size = 0x4, address = 0x80135748
static int cpuCompile_SH_function;
// size = 0x4, address = 0x8013574C
static int cpuCompile_SW_function;
// size = 0x4, address = 0x80135750
static int cpuCompile_LDC_function;
// size = 0x4, address = 0x80135754
static int cpuCompile_SDC_function;
// size = 0x4, address = 0x80135758
static int cpuCompile_LWL_function;
// size = 0x4, address = 0x8013575C
static int cpuCompile_LWR_function;
// size = 0x1F4, address = 0x80130A58
unsigned int aHeapTreeFlag[125];
typedef enum __anon_0x3D79A {
SM_NONE = -1,
SM_RUNNING = 0,
SM_STOPPED = 1,
} __anon_0x3D79A;
typedef struct __anon_0x3D7FC {
/* 0x0 */ int nSize;
/* 0x4 */ int nOffsetRAM;
/* 0x8 */ int nOffsetROM;
/* 0xC */ int (*pCallback)();
} __anon_0x3D7FC; // size = 0x10
typedef enum __anon_0x3D8AD {
SRT_NONE = -1,
SRT_MARIO = 0,
SRT_WAVERACE = 1,
SRT_MARIOKART = 2,
SRT_STARFOX = 3,
SRT_ZELDA1 = 4,
SRT_ZELDA2 = 5,
SRT_1080 = 6,
SRT_PANEL = 7,
SRT_MARIOPARTY1 = 8,
SRT_MARIOPARTY2 = 9,
SRT_MARIOPARTY3 = 10,
SRT_DRMARIO = 11,
SRT_UNKNOWN = 12,
} __anon_0x3D8AD;
typedef enum __anon_0x3D9D9 {
SOT_NONE = -1,
SOT_CPU = 0,
SOT_PIF = 1,
SOT_RAM = 2,
SOT_ROM = 3,
SOT_RSP = 4,
SOT_RDP = 5,
SOT_MIPS = 6,
SOT_DISK = 7,
SOT_FLASH = 8,
SOT_SRAM = 9,
SOT_AUDIO = 10,
SOT_VIDEO = 11,
SOT_SERIAL = 12,
SOT_LIBRARY = 13,
SOT_PERIPHERAL = 14,
SOT_RDB = 15,
SOT_COUNT = 16,
} __anon_0x3D9D9;
typedef struct __anon_0x3DB14 {
/* 0x00 */ void* pFrame;
/* 0x04 */ void* pSound;
/* 0x08 */ int bException;
/* 0x0C */ enum __anon_0x3D79A eMode;
/* 0x10 */ struct __anon_0x3D7FC romCopy;
/* 0x20 */ enum __anon_0x3D8AD eTypeROM;
/* 0x24 */ void* apObject[16];
/* 0x68 */ u64 nAddressBreak;
/* 0x70 */ enum __anon_0x3D9D9 storageDevice;
/* 0x74 */ u8 anException[16];
/* 0x84 */ int bJapaneseVersion;
} __anon_0x3DB14; // size = 0x88
// size = 0x4, address = 0x80135600
struct __anon_0x3DB14* gpSystem;
typedef struct __anon_0x3DE78 {
/* 0x0 */ int nOffsetHost;
/* 0x4 */ int nAddressN64;
} __anon_0x3DE78; // size = 0x8
typedef struct cpu_callerID {
/* 0x0 */ int N64address;
/* 0x4 */ int GCNaddress;
} __anon_0x3DEDE; // size = 0x8
typedef struct cpu_function {
/* 0x00 */ void* pnBase;
/* 0x04 */ void* pfCode;
/* 0x08 */ int nCountJump;
/* 0x0C */ struct __anon_0x3DE78* aJump;
/* 0x10 */ int nAddress0;
/* 0x14 */ int nAddress1;
/* 0x18 */ struct cpu_callerID* block;
/* 0x1C */ int callerID_total;
/* 0x20 */ int callerID_flag;
/* 0x24 */ unsigned int nChecksum;
/* 0x28 */ int timeToLive;
/* 0x2C */ int memory_size;
/* 0x30 */ int heapID;
/* 0x34 */ int heapWhere;
/* 0x38 */ int treeheapWhere;
/* 0x3C */ struct cpu_function* prev;
/* 0x40 */ struct cpu_function* left;
/* 0x44 */ struct cpu_function* right;
} __anon_0x3DF51; // size = 0x48
typedef union __anon_0x3E22D {
/* 0x0 */ char _0s8;
/* 0x1 */ char _1s8;
/* 0x2 */ char _2s8;
/* 0x3 */ char _3s8;
/* 0x4 */ char _4s8;
/* 0x5 */ char _5s8;
/* 0x6 */ char _6s8;
/* 0x7 */ char s8;
/* 0x0 */ s16 _0s16;
/* 0x2 */ s16 _1s16;
/* 0x4 */ s16 _2s16;
/* 0x6 */ s16 s16;
/* 0x0 */ int _0s32;
/* 0x4 */ int s32;
/* 0x0 */ s64 s64;
/* 0x0 */ u8 _0u8;
/* 0x1 */ u8 _1u8;
/* 0x2 */ u8 _2u8;
/* 0x3 */ u8 _3u8;
/* 0x4 */ u8 _4u8;
/* 0x5 */ u8 _5u8;
/* 0x6 */ u8 _6u8;
/* 0x7 */ u8 u8;
/* 0x0 */ u16 _0u16;
/* 0x2 */ u16 _1u16;
/* 0x4 */ u16 _2u16;
/* 0x6 */ u16 u16;
/* 0x0 */ unsigned int _0u32;
/* 0x4 */ unsigned int u32;
/* 0x0 */ u64 u64;
} __anon_0x3E22D;
typedef union __anon_0x3E641 {
/* 0x0 */ f32 _0f32;
/* 0x4 */ f32 f32;
/* 0x0 */ f64 f64;
/* 0x0 */ int _0s32;
/* 0x4 */ int s32;
/* 0x0 */ s64 s64;
/* 0x0 */ unsigned int _0u32;
/* 0x4 */ unsigned int u32;
/* 0x0 */ u64 u64;
} __anon_0x3E641;
typedef struct __anon_0x3EB4F {
/* 0x00 */ int nType;
/* 0x04 */ void* pObject;
/* 0x08 */ int nOffsetAddress;
/* 0x0C */ int (*pfGet8)(void*, unsigned int, char*);
/* 0x10 */ int (*pfGet16)(void*, unsigned int, s16*);
/* 0x14 */ int (*pfGet32)(void*, unsigned int, int*);
/* 0x18 */ int (*pfGet64)(void*, unsigned int, s64*);
/* 0x1C */ int (*pfPut8)(void*, unsigned int, char*);
/* 0x20 */ int (*pfPut16)(void*, unsigned int, s16*);
/* 0x24 */ int (*pfPut32)(void*, unsigned int, int*);
/* 0x28 */ int (*pfPut64)(void*, unsigned int, s64*);
/* 0x2C */ unsigned int nAddressPhysical0;
/* 0x30 */ unsigned int nAddressPhysical1;
} __anon_0x3EB4F; // size = 0x34
typedef struct cpu_treeRoot {
/* 0x00 */ u16 total;
/* 0x04 */ int total_memory;
/* 0x08 */ int root_address;
/* 0x0C */ int start_range;
/* 0x10 */ int end_range;
/* 0x14 */ int cache_miss;
/* 0x18 */ int cache[20];
/* 0x68 */ struct cpu_function* left;
/* 0x6C */ struct cpu_function* right;
/* 0x70 */ int kill_limit;
/* 0x74 */ int kill_number;
/* 0x78 */ int side;
/* 0x7C */ struct cpu_function* restore;
/* 0x80 */ int restore_side;
} __anon_0x3EE1D; // size = 0x84
typedef struct __anon_0x3F080 {
/* 0x0 */ unsigned int nAddress;
/* 0x4 */ unsigned int nOpcodeOld;
/* 0x8 */ unsigned int nOpcodeNew;
} __anon_0x3F080; // size = 0xC
typedef struct OSContext {
/* 0x000 */ u32 gpr[32];
/* 0x080 */ u32 cr;
/* 0x084 */ u32 lr;
/* 0x088 */ u32 ctr;
/* 0x08C */ u32 xer;
/* 0x090 */ f64 fpr[32];
/* 0x190 */ u32 fpscr_pad;
/* 0x194 */ u32 fpscr;
/* 0x198 */ u32 srr0;
/* 0x19C */ u32 srr1;
/* 0x1A0 */ u16 mode;
/* 0x1A2 */ u16 state;
/* 0x1A4 */ u32 gqr[8];
/* 0x1C4 */ u32 psf_pad;
/* 0x1C8 */ f64 psf[32];
} __anon_0x3F1AB; // size = 0x2C8
typedef struct OSAlarm {
/* 0x00 */ void (*handler)(struct OSAlarm*, struct OSContext*);
/* 0x04 */ u32 tag;
/* 0x08 */ s64 fire;
/* 0x10 */ struct OSAlarm* prev;
/* 0x14 */ struct OSAlarm* next;
/* 0x18 */ s64 period;
/* 0x20 */ s64 start;
} __anon_0x3F402; // size = 0x28
typedef struct cpu_optimize {
/* 0x00 */ unsigned int validCheck;
/* 0x04 */ unsigned int destGPR_check;
/* 0x08 */ int destGPR;
/* 0x0C */ int destGPR_mapping;
/* 0x10 */ unsigned int destFPR_check;
/* 0x14 */ int destFPR;
/* 0x18 */ unsigned int addr_check;
/* 0x1C */ int addr_last;
/* 0x20 */ unsigned int checkType;
/* 0x24 */ unsigned int checkNext;
} __anon_0x3F51D; // size = 0x28
typedef struct _CPU {
/* 0x00000 */ int nMode;
/* 0x00004 */ int nTick;
/* 0x00008 */ void* pHost;
/* 0x00010 */ s64 nLo;
/* 0x00018 */ s64 nHi;
/* 0x00020 */ int nCountAddress;
/* 0x00024 */ int iDeviceDefault;
/* 0x00028 */ unsigned int nPC;
/* 0x0002C */ unsigned int nWaitPC;
/* 0x00030 */ unsigned int nCallLast;
/* 0x00034 */ struct cpu_function* pFunctionLast;
/* 0x00038 */ int nReturnAddrLast;
/* 0x0003C */ int survivalTimer;
/* 0x00040 */ union __anon_0x3E22D aGPR[32];
/* 0x00140 */ union __anon_0x3E641 aFPR[32];
/* 0x00240 */ u64 aTLB[48][5];
/* 0x009C0 */ int anFCR[32];
/* 0x00A40 */ s64 anCP0[32];
/* 0x00B40 */ int (*pfStep)(struct _CPU*);
/* 0x00B44 */ int (*pfJump)(struct _CPU*);
/* 0x00B48 */ int (*pfCall)(struct _CPU*);
/* 0x00B4C */ int (*pfIdle)(struct _CPU*);
/* 0x00B50 */ int (*pfRam)(struct _CPU*);
/* 0x00B54 */ int (*pfRamF)(struct _CPU*);
/* 0x00B58 */ unsigned int nTickLast;
/* 0x00B5C */ unsigned int nRetrace;
/* 0x00B60 */ unsigned int nRetraceUsed;
/* 0x00B64 */ struct __anon_0x3EB4F* apDevice[256];
/* 0x00F64 */ u8 aiDevice[65536];
/* 0x10F64 */ void* gHeap1;
/* 0x10F68 */ void* gHeap2;
/* 0x10F6C */ unsigned int aHeap1Flag[192];
/* 0x1126C */ unsigned int aHeap2Flag[13];
/* 0x112A0 */ struct cpu_treeRoot* gTree;
/* 0x112A4 */ struct _CPU_ADDRESS aAddressCache[256];
/* 0x11EA4 */ int nCountCodeHack;
/* 0x11EA8 */ struct __anon_0x3F080 aCodeHack[32];
/* 0x12028 */ s64 nTimeRetrace;
/* 0x12030 */ struct OSAlarm alarmRetrace;
/* 0x12058 */ unsigned int nFlagRAM;
/* 0x1205C */ unsigned int nFlagCODE;
/* 0x12060 */ unsigned int nCompileFlag;
/* 0x12064 */ struct cpu_optimize nOptimize;
} __anon_0x3F6CA; // size = 0x12090
typedef struct cpu_disk_node {
/* 0x00 */ unsigned int functionLength;
/* 0x04 */ unsigned int checksum;
/* 0x08 */ int startAddress;
/* 0x0C */ int endAddress;
/* 0x10 */ unsigned int specialFlag;
/* 0x14 */ unsigned int frequency;
/* 0x18 */ unsigned int inCatalog;
/* 0x1C */ unsigned int* length;
/* 0x20 */ unsigned int size;
/* 0x24 */ unsigned int GCNsize;
/* 0x28 */ unsigned int* N64code;
/* 0x2C */ unsigned int* GCNcode;
/* 0x30 */ struct cpu_disk_node* prev;
/* 0x34 */ struct cpu_disk_node* left;
/* 0x38 */ struct cpu_disk_node* right;
/* 0x3C */ struct cpu_disk_node* same;
} __anon_0x3FE5C; // size = 0x40
typedef enum __anon_0x42F73 {
CS_NONE = -1,
CS_32BIT = 0,
CS_64BIT = 1,
} __anon_0x42F73;
typedef enum __anon_0x43B0A {
RLM_NONE = -1,
RLM_PART = 0,
RLM_FULL = 1,
RLM_COUNT_ = 2,
} __anon_0x43B0A;
typedef struct __anon_0x43B69 {
/* 0x0 */ int iCache;
/* 0x4 */ unsigned int nSize;
/* 0x8 */ unsigned int nTickUsed;
/* 0xC */ char keep;
} __anon_0x43B69; // size = 0x10
typedef struct __anon_0x43C7D {
/* 0x00 */ int bWait;
/* 0x04 */ int (*pCallback)();
/* 0x08 */ u8* pTarget;
/* 0x0C */ unsigned int nSize;
/* 0x10 */ unsigned int nOffset;
} __anon_0x43C7D; // size = 0x14
typedef struct __anon_0x43D5D {
/* 0x00 */ int bWait;
/* 0x04 */ int bDone;
/* 0x08 */ int nResult;
/* 0x0C */ u8* anData;
/* 0x10 */ int (*pCallback)();
/* 0x14 */ int iCache;
/* 0x18 */ int iBlock;
/* 0x1C */ int nOffset;
/* 0x20 */ unsigned int nOffset0;
/* 0x24 */ unsigned int nOffset1;
/* 0x28 */ unsigned int nSize;
/* 0x2C */ unsigned int nSizeRead;
} __anon_0x43D5D; // size = 0x30
typedef struct DVDDiskID {
/* 0x0 */ char gameName[4];
/* 0x4 */ char company[2];
/* 0x6 */ u8 diskNumber;
/* 0x7 */ u8 gameVersion;
/* 0x8 */ u8 streaming;
/* 0x9 */ u8 streamingBufSize;
/* 0xA */ u8 padding[22];
} __anon_0x43FA8; // size = 0x20
typedef struct DVDCommandBlock {
/* 0x00 */ struct DVDCommandBlock* next;
/* 0x04 */ struct DVDCommandBlock* prev;
/* 0x08 */ u32 command;
/* 0x0C */ s32 state;
/* 0x10 */ u32 offset;
/* 0x14 */ u32 length;
/* 0x18 */ void* addr;
/* 0x1C */ u32 currTransferSize;
/* 0x20 */ u32 transferredSize;
/* 0x24 */ struct DVDDiskID* id;
/* 0x28 */ void (*callback)(s32, struct DVDCommandBlock*);
/* 0x2C */ void* userData;
} __anon_0x44118; // size = 0x30
typedef struct DVDFileInfo {
/* 0x00 */ struct DVDCommandBlock cb;
/* 0x30 */ u32 startAddr;
/* 0x34 */ u32 length;
/* 0x38 */ void (*callback)(s32, struct DVDFileInfo*);
} __anon_0x4433E; // size = 0x3C
typedef struct __anon_0x443F6 {
/* 0x00000 */ void* pHost;
/* 0x00004 */ void* pBuffer;
/* 0x00008 */ int bFlip;
/* 0x0000C */ int bLoad;
/* 0x00010 */ char acNameFile[513];
/* 0x00214 */ unsigned int nSize;
/* 0x00218 */ enum __anon_0x43B0A eModeLoad;
/* 0x0021C */ struct __anon_0x43B69 aBlock[4096];
/* 0x1021C */ unsigned int nTick;
/* 0x10220 */ u8* pCacheRAM;
/* 0x10224 */ u8 anBlockCachedRAM[1024];
/* 0x10624 */ u8 anBlockCachedARAM[2046];
/* 0x10E24 */ struct __anon_0x43C7D copy;
/* 0x10E38 */ struct __anon_0x43D5D load;
/* 0x10E68 */ int nCountBlockRAM;
/* 0x10E6C */ int nSizeCacheRAM;
/* 0x10E70 */ u8 acHeader[64];
/* 0x10EB0 */ unsigned int* anOffsetBlock;
/* 0x10EB4 */ int nCountOffsetBlocks;
/* 0x10EB8 */ struct DVDFileInfo fileInfo;
/* 0x10EF4 */ int offsetToRom;
} __anon_0x443F6; // size = 0x10EF8
// size = 0x0, address = 0x800F3E78
int __float_nan[];
// size = 0x0, address = 0x800F3E7C
int __float_huge[];
// size = 0x4, address = 0x80134E64
f32 fTickScale;
// size = 0x4, address = 0x80134E60
unsigned int nTickMultiplier;
typedef enum __anon_0x44829 {
RUM_NONE = 0,
RUM_IDLE = 1,
} __anon_0x44829;
typedef enum __anon_0x44AE9 {
CM_NONE = -1,
CM_USER = 0,
CM_SUPER = 1,
CM_KERNEL = 2,
} __anon_0x44AE9;
typedef enum __anon_0x45AE1 {
CEC_NONE = -1,
CEC_INTERRUPT = 0,
CEC_TLB_MODIFICATION = 1,
CEC_TLB_LOAD = 2,
CEC_TLB_STORE = 3,
CEC_ADDRESS_LOAD = 4,
CEC_ADDRESS_STORE = 5,
CEC_BUS_INSTRUCTION = 6,
CEC_BUS_DATA = 7,
CEC_SYSCALL = 8,
CEC_BREAK = 9,
CEC_RESERVED = 10,
CEC_COPROCESSOR = 11,
CEC_OVERFLOW = 12,
CEC_TRAP = 13,
CEC_VCE_INSTRUCTION = 14,
CEC_FLOAT = 15,
CEC_RESERVED_16 = 16,
CEC_RESERVED_17 = 17,
CEC_RESERVED_18 = 18,
CEC_RESERVED_19 = 19,
CEC_RESERVED_20 = 20,
CEC_RESERVED_21 = 21,
CEC_RESERVED_22 = 22,
CEC_WATCH = 23,
CEC_RESERVED_24 = 24,
CEC_RESERVED_25 = 25,
CEC_RESERVED_26 = 26,
CEC_RESERVED_27 = 27,
CEC_RESERVED_28 = 28,
CEC_RESERVED_29 = 29,
CEC_RESERVED_30 = 30,
CEC_VCE_DATA = 31,
CEC_COUNT = 32,
} __anon_0x45AE1;
typedef struct _CPU_ADDRESS {
/* 0x0 */ int nN64;
/* 0x4 */ int nHost;
/* 0x8 */ struct cpu_function* pFunction;
} __anon_0x45F28; // size = 0xC
// size = 0x10, address = 0x800ED6C8
struct _XL_OBJECTTYPE gClassRAM;
// Erased
static int cpuHackIdle(struct _CPU* pCPU) {
// Parameters
// struct _CPU* pCPU; // r1+0x8
// Local variables
struct __anon_0x3DB14* pSystem; // r3
}
// Erased
static int cpuHackCacheInstruction(struct _CPU* pCPU) {
// Parameters
// struct _CPU* pCPU; // r31
// Local variables
unsigned int* pnCode; // r1+0x10
}
// Range: 0x80036658 -> 0x80036870
static int cpuHackHandler(struct _CPU* pCPU) {
// Parameters
// struct _CPU* pCPU; // r27
// Local variables
unsigned int nSize; // r1+0x10
unsigned int* pnCode; // r1+0xC
int iCode; // r3
int iSave1; // r30
int iSave2; // r29
int iLoad; // r28
// References
// -> static unsigned int ganOpcodeLoadFP[5];
// -> static unsigned int ganOpcodeSaveFP2_1[3];
// -> static unsigned int ganOpcodeSaveFP2_0[5];
// -> static unsigned int ganOpcodeSaveFP1[5];
// -> struct _XL_OBJECTTYPE gClassRAM;
}
// Erased
static int cpuMakeCachedAddress(struct _CPU* pCPU, int nAddressN64, int nAddressHost, struct cpu_function* pFunction) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
// int nAddressN64; // r1+0x4
// int nAddressHost; // r1+0x8
// struct cpu_function* pFunction; // r1+0xC
// Local variables
int iAddress; // r7
struct _CPU_ADDRESS* aAddressCache; // r9
}
// Range: 0x800365C4 -> 0x80036658
int cpuFreeCachedAddress(struct _CPU* pCPU, int nAddress0, int nAddress1) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
// int nAddress0; // r1+0x4
// int nAddress1; // r1+0x8
// Local variables
int iAddress; // r10
int iAddressNext; // r11
int nAddressN64; // r1+0x0
struct _CPU_ADDRESS* aAddressCache; // r12
}
// Range: 0x800363E8 -> 0x800365C4
static int cpuFindCachedAddress(struct _CPU* pCPU, int nAddressN64, int* pnAddressHost) {
// Parameters
// struct _CPU* pCPU; // r1+0x8
// int nAddressN64; // r1+0xC
// int* pnAddressHost; // r1+0x10
// Local variables
int iAddress; // r10
struct cpu_function* pFunction; // r1+0x8
struct _CPU_ADDRESS addressFound; // r1+0x14
struct _CPU_ADDRESS* aAddressCache; // r6
}
// Range: 0x8003630C -> 0x800363E8
int cpuTestInterrupt(struct _CPU* pCPU, int nMaskIP) {
// Parameters
// struct _CPU* pCPU; // r1+0x8
// int nMaskIP; // r31
}
// Erased
static int cpuResetInterrupt(struct _CPU* pCPU, int nMaskIP) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
// int nMaskIP; // r1+0x4
}
// Range: 0x8003604C -> 0x8003630C
int cpuException(struct _CPU* pCPU, enum __anon_0x45AE1 eCode, int nMaskIP) {
// Parameters
// struct _CPU* pCPU; // r27
// enum __anon_0x45AE1 eCode; // r28
// int nMaskIP; // r29
}
// Range: 0x80035F3C -> 0x8003604C
static int cpuMakeDevice(struct _CPU* pCPU, int* piDevice, void* pObject, int nOffset, unsigned int nAddress0,
unsigned int nAddress1, int nType) {
// Parameters
// struct _CPU* pCPU; // r25
// int* piDevice; // r1+0xC
// void* pObject; // r26
// int nOffset; // r27
// unsigned int nAddress0; // r28
// unsigned int nAddress1; // r29
// int nType; // r30
// Local variables
struct __anon_0x3EB4F* pDevice; // r1+0x28
int iDevice; // r31
}
// Range: 0x80035E98 -> 0x80035F3C
static int cpuFreeDevice(struct _CPU* pCPU, int iDevice) {
// Parameters
// struct _CPU* pCPU; // r29
// int iDevice; // r30
// Local variables
int iAddress; // r4
}
// Erased
static int cpuWipeDevices(struct _CPU* pCPU, int bFree) {
// Parameters
// struct _CPU* pCPU; // r28
// int bFree; // r29
// Local variables
int iDevice; // r30
}
// Range: 0x80035CD0 -> 0x80035E98
static int cpuMapAddress(struct _CPU* pCPU, int* piDevice, unsigned int nVirtual, unsigned int nPhysical, int nSize) {
// Parameters
// struct _CPU* pCPU; // r30
// int* piDevice; // r31
// unsigned int nVirtual; // r28
// unsigned int nPhysical; // r6
// int nSize; // r29
// Local variables
int iDeviceTarget; // r1+0x1C
int iDeviceSource; // r5
unsigned int nAddressVirtual0; // r5
unsigned int nAddressVirtual1; // r6
}
// Erased
static int cpuCountTLB(struct _CPU* pCPU, int* pnCount) {
// Parameters
// struct _CPU* pCPU; // r3
// int* pnCount; // r1+0x4
// Local variables
int iEntry; // r8
int nCount; // r9
}
// Range: 0x800359EC -> 0x80035CD0
static int cpuSetTLB(struct _CPU* pCPU, int iEntry) {
// Parameters
// struct _CPU* pCPU; // r28
// int iEntry; // r1+0xC
// Local variables
int iDevice; // r1+0x10
unsigned int nMask; // r1+0x8
unsigned int nVirtual; // r27
unsigned int nPhysical; // r30
}
// Erased
static int cpuGetTLB(struct _CPU* pCPU, int iEntry) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
// int iEntry; // r1+0x4
}
// Erased
static int cpuFindTLB(struct _CPU* pCPU, u64 nAddressVirtual, unsigned int* pnAddressPhysical) {
// Parameters
// struct _CPU* pCPU; // r3
// u64 nAddressVirtual; // r1+0x8
// unsigned int* pnAddressPhysical; // r1+0x10
// Local variables
int iEntry; // r12
unsigned int nMask; // r1+0x0
unsigned int nVirtual; // r1+0x0
}
// Erased
static int cpuVirtualToPhysical_User32(struct _CPU* pCPU, u64 nAddressVirtual, unsigned int* pnAddressPhysical) {
// Parameters
// struct _CPU* pCPU; // r3
// u64 nAddressVirtual; // r1+0x8
// unsigned int* pnAddressPhysical; // r1+0x10
}
// Erased
static int cpuVirtualToPhysical_User64(struct _CPU* pCPU, u64 nAddressVirtual, unsigned int* pnAddressPhysical) {
// Parameters
// struct _CPU* pCPU; // r3
// u64 nAddressVirtual; // r1+0x8
// unsigned int* pnAddressPhysical; // r1+0x10
}
// Erased
static int cpuVirtualToPhysical_Super32(struct _CPU* pCPU, u64 nAddressVirtual, unsigned int* pnAddressPhysical) {
// Parameters
// struct _CPU* pCPU; // r3
// u64 nAddressVirtual; // r1+0x8
// unsigned int* pnAddressPhysical; // r1+0x10
}
// Erased
static int cpuVirtualToPhysical_Super64(struct _CPU* pCPU, u64 nAddressVirtual, unsigned int* pnAddressPhysical) {
// Parameters
// struct _CPU* pCPU; // r3
// u64 nAddressVirtual; // r1+0x8
// unsigned int* pnAddressPhysical; // r1+0x10
}
// Erased
static int cpuVirtualToPhysical_Kernel32(struct _CPU* pCPU, u64 nAddressVirtual, unsigned int* pnAddressPhysical) {
// Parameters
// struct _CPU* pCPU; // r3
// u64 nAddressVirtual; // r1+0x8
// unsigned int* pnAddressPhysical; // r1+0x10
}
// Erased
static int cpuVirtualToPhysical_Kernel64(struct _CPU* pCPU, u64 nAddressVirtual, unsigned int* pnAddressPhysical) {
// Parameters
// struct _CPU* pCPU; // r28
// u64 nAddressVirtual; // r30
// unsigned int* pnAddressPhysical; // r31
}
// Range: 0x80035914 -> 0x800359EC
static int cpuGetMode(u64 nStatus, enum __anon_0x44AE9* peMode) {
// Parameters
// u64 nStatus; // r1+0x0
// enum __anon_0x44AE9* peMode; // r1+0x8
}
// Range: 0x800357D0 -> 0x80035914
static int cpuGetSize(u64 nStatus, enum __anon_0x42F73* peSize, enum __anon_0x44AE9* peMode) {
// Parameters
// u64 nStatus; // r29
// enum __anon_0x42F73* peSize; // r30
// enum __anon_0x44AE9* peMode; // r31
// Local variables
enum __anon_0x44AE9 eMode; // r1+0x18
}
// Erased
static int cpuSetCP0_Config(struct _CPU* pCPU, unsigned int nConfig) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
// unsigned int nConfig; // r1+0x4
}
// Range: 0x8003573C -> 0x800357D0
static int cpuSetCP0_Status(struct _CPU* pCPU, u64 nStatus) {
// Parameters
// struct _CPU* pCPU; // r29
// u64 nStatus; // r31
// Local variables
enum __anon_0x44AE9 eMode; // r1+0x28
enum __anon_0x44AE9 eModeLast; // r1+0x24
enum __anon_0x42F73 eSize; // r1+0x20
enum __anon_0x42F73 eSizeLast; // r1+0x1C
}
// Range: 0x80035570 -> 0x8003573C
int cpuSetRegisterCP0(struct _CPU* pCPU, int iRegister, s64 nData) {
// Parameters
// struct _CPU* pCPU; // r26
// int iRegister; // r27
// s64 nData; // r29
// Local variables
int bFlag; // r30
// References
// -> static s64 ganMaskSetCP0[32];
}
// Range: 0x800352C8 -> 0x80035570
int cpuGetRegisterCP0(struct _CPU* pCPU, int iRegister, s64* pnData) {
// Parameters
// struct _CPU* pCPU; // r3
// int iRegister; // r1+0xC
// s64* pnData; // r1+0x10
// Local variables
int bFlag; // r1+0x8
// References
// -> static s64 ganMaskGetCP0[32];
}
// Range: 0x8003522C -> 0x800352C8
int __cpuERET(struct _CPU* pCPU) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
}
// Range: 0x80035218 -> 0x8003522C
int __cpuBreak(struct _CPU* pCPU) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
}
// Erased
static int cpuGetOpcodeText() {}
// Range: 0x80035068 -> 0x80035218
int cpuMapObject(struct _CPU* pCPU, void* pObject, unsigned int nAddress0, unsigned int nAddress1, int nType) {
// Parameters
// struct _CPU* pCPU; // r31
// void* pObject; // r27
// unsigned int nAddress0; // r28
// unsigned int nAddress1; // r29
// int nType; // r30
// Local variables
int iDevice; // r1+0x24
int iAddress; // r4
unsigned int nAddressVirtual0; // r5
unsigned int nAddressVirtual1; // r6
}
// Range: 0x80035050 -> 0x80035068
int cpuSetDeviceGet(struct __anon_0x3EB4F* pDevice, int (*pfGet8)(void*, unsigned int, char*),
int (*pfGet16)(void*, unsigned int, s16*), int (*pfGet32)(void*, unsigned int, int*),
int (*pfGet64)(void*, unsigned int, s64*)) {
// Parameters
// struct __anon_0x3EB4F* pDevice; // r1+0x4
// int (* pfGet8)(void*, unsigned int, char*); // r1+0x8
// int (* pfGet16)(void*, unsigned int, s16*); // r1+0xC
// int (* pfGet32)(void*, unsigned int, int*); // r1+0x10
// int (* pfGet64)(void*, unsigned int, s64*); // r1+0x14
}
// Range: 0x80035038 -> 0x80035050
int cpuSetDevicePut(struct __anon_0x3EB4F* pDevice, int (*pfPut8)(void*, unsigned int, char*),
int (*pfPut16)(void*, unsigned int, s16*), int (*pfPut32)(void*, unsigned int, int*),
int (*pfPut64)(void*, unsigned int, s64*)) {
// Parameters
// struct __anon_0x3EB4F* pDevice; // r1+0x4
// int (* pfPut8)(void*, unsigned int, char*); // r1+0x8
// int (* pfPut16)(void*, unsigned int, s16*); // r1+0xC
// int (* pfPut32)(void*, unsigned int, int*); // r1+0x10
// int (* pfPut64)(void*, unsigned int, s64*); // r1+0x14
}
// Range: 0x80034FCC -> 0x80035038
int cpuSetCodeHack(struct _CPU* pCPU, int nAddress, int nOpcodeOld, int nOpcodeNew) {
// Parameters
// struct _CPU* pCPU; // r3
// int nAddress; // r1+0x4
// int nOpcodeOld; // r1+0x8
// int nOpcodeNew; // r1+0xC
// Local variables
int iHack; // r9
}
// Range: 0x80034AE8 -> 0x80034FCC
int cpuReset(struct _CPU* pCPU) {
// Parameters
// struct _CPU* pCPU; // r31
// Local variables
int iRegister; // r1+0x8
int iTLB; // r1+0x8
// References
// -> void* gHeapTree;
// -> unsigned int aHeapTreeFlag[125];
}
// Erased
static int cpuGetXPC(struct _CPU* pCPU, signed int* pnPC, signed int* pnLo, signed int* pnHi) {
// Parameters
// struct _CPU* pCPU; // r28
// signed int* pnPC; // r29
// signed int* pnLo; // r30
// signed int* pnHi; // r31
// References
// -> struct _XL_OBJECTTYPE gClassCPU;
}
// Erased
static int cpuGetGPR(struct _CPU* pCPU, signed int* anRegister) {
// Parameters
// struct _CPU* pCPU; // r30
// signed int* anRegister; // r31
// Local variables
int iRegister; // r1+0x8
enum __anon_0x42F73 eSize; // r1+0x18
// References
// -> struct _XL_OBJECTTYPE gClassCPU;
}
// Erased
static int cpuGetCP0(struct _CPU* pCPU, signed int* anRegister) {
// Parameters
// struct _CPU* pCPU; // r30
// signed int* anRegister; // r31
// Local variables
int iRegister; // r1+0x8
// References
// -> struct _XL_OBJECTTYPE gClassCPU;
}
// Erased
static int cpuGetFPR(struct _CPU* pCPU, f64* arRegister, int bDouble) {
// Parameters
// struct _CPU* pCPU; // r29
// f64* arRegister; // r30
// int bDouble; // r31
// Local variables
int iRegister; // r1+0x8
// References
// -> struct _XL_OBJECTTYPE gClassCPU;
}
// Erased
static int cpuGetFCR(struct _CPU* pCPU, int* anRegister) {
// Parameters
// struct _CPU* pCPU; // r30
// int* anRegister; // r31
// Local variables
int iRegister; // r1+0x8
// References
// -> struct _XL_OBJECTTYPE gClassCPU;
}
// Range: 0x80034A6C -> 0x80034AE8
int cpuSetXPC(struct _CPU* pCPU, s64 nPC, s64 nLo, s64 nHi) {
// Parameters
// struct _CPU* pCPU; // r26
// s64 nPC; // r0
// s64 nLo; // r29
// s64 nHi; // r31
// References
// -> struct _XL_OBJECTTYPE gClassCPU;
}
// Erased
static int cpuSetGPR(struct _CPU* pCPU, signed int* anRegister) {
// Parameters
// struct _CPU* pCPU; // r30
// signed int* anRegister; // r31
// Local variables
int iRegister; // r1+0x8
enum __anon_0x42F73 eSize; // r1+0x18
// References
// -> struct _XL_OBJECTTYPE gClassCPU;
}
// Erased
static int cpuSetCP0(struct _CPU* pCPU, signed int* anRegister) {
// Parameters
// struct _CPU* pCPU; // r30
// signed int* anRegister; // r31
// Local variables
int iRegister; // r1+0x8
// References
// -> struct _XL_OBJECTTYPE gClassCPU;
}
// Erased
static int cpuSetFPR(struct _CPU* pCPU, f64* arRegister, int bDouble) {
// Parameters
// struct _CPU* pCPU; // r29
// f64* arRegister; // r30
// int bDouble; // r31
// Local variables
int iRegister; // r1+0x8
// References
// -> struct _XL_OBJECTTYPE gClassCPU;
}
// Erased
static int cpuSetFCR(struct _CPU* pCPU, int* anRegister) {
// Parameters
// struct _CPU* pCPU; // r30
// int* anRegister; // r31
// Local variables
int iRegister; // r1+0x8
// References
// -> struct _XL_OBJECTTYPE gClassCPU;
}
// Range: 0x80034864 -> 0x80034A6C
int cpuEvent(struct _CPU* pCPU, int nEvent, void* pArgument) {
// Parameters
// struct _CPU* pCPU; // r28
// int nEvent; // r1+0xC
// void* pArgument; // r1+0x10
}
// Range: 0x800347F8 -> 0x80034864
int cpuGetAddressOffset(struct _CPU* pCPU, int* pnOffset, unsigned int nAddress) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
// int* pnOffset; // r1+0x4
// unsigned int nAddress; // r1+0x8
// Local variables
int iDevice; // r1+0x0
}
// Range: 0x80034780 -> 0x800347F8
int cpuGetAddressBuffer(struct _CPU* pCPU, void* ppBuffer, unsigned int nAddress) {
// Parameters
// struct _CPU* pCPU; // r1+0x8
// void* ppBuffer; // r4
// unsigned int nAddress; // r5
// Local variables
struct __anon_0x3EB4F* pDevice; // r1+0x8
}
// Range: 0x800345F0 -> 0x80034780
int cpuGetOffsetAddress(struct _CPU* pCPU, unsigned int* anAddress, int* pnCount, unsigned int nOffset,
unsigned int nSize) {
// Parameters
// struct _CPU* pCPU; // r3
// unsigned int* anAddress; // r1+0xC
// int* pnCount; // r1+0x10
// unsigned int nOffset; // r1+0x14
// unsigned int nSize; // r1+0x18
// Local variables
int iEntry; // r1+0x8
int iAddress; // r7
unsigned int nAddress; // r1+0x8
unsigned int nMask; // r1+0x8
unsigned int nSizeMapped; // r26
}
// Range: 0x80034564 -> 0x800345F0
int cpuInvalidateCache(struct _CPU* pCPU, int nAddress0, int nAddress1) {
// Parameters
// struct _CPU* pCPU; // r29
// int nAddress0; // r30
// int nAddress1; // r31
}
// Range: 0x80034324 -> 0x80034564
int cpuGetFunctionChecksum(struct _CPU* pCPU, unsigned int* pnChecksum, struct cpu_function* pFunction) {
// Parameters
// struct _CPU* pCPU; // r1+0x8
// unsigned int* pnChecksum; // r30
// struct cpu_function* pFunction; // r31
// Local variables
int nSize; // r10
unsigned int* pnBuffer; // r1+0x18
unsigned int nChecksum; // r11
unsigned int nData; // r12
}
// Range: 0x80034288 -> 0x80034324
static int cpuHeapReset(unsigned int* array, int count) {
// Parameters
// unsigned int* array; // r3
// int count; // r1+0x4
// Local variables
int i; // r6
}
// Range: 0x80034028 -> 0x80034288
int cpuHeapTake(void* heap, struct _CPU* pCPU, struct cpu_function* pFunction, int memory_size) {
// Parameters
// void* heap; // r3
// struct _CPU* pCPU; // r1+0xC
// struct cpu_function* pFunction; // r1+0x10
// int memory_size; // r6
// Local variables
int done; // r12
int second; // r7
unsigned int* anPack; // r8
int nPackCount; // r9
int nBlockCount; // r10
int nOffset; // r27
int nCount; // r26
int iPack; // r1+0x8
unsigned int nPack; // r25
unsigned int nMask; // r24
unsigned int nMask0; // r23
}
// Range: 0x80033F3C -> 0x80034028
int cpuHeapFree(struct _CPU* pCPU, struct cpu_function* pFunction) {
// Parameters
// struct _CPU* pCPU; // r1+0x8
// struct cpu_function* pFunction; // r4
// Local variables
unsigned int* anPack; // r8
int iPack; // r1+0x8
unsigned int nMask; // r6
}
// Range: 0x80033E88 -> 0x80033F3C
static int cpuTreeTake(void* heap, int* where) {
// Parameters
// void* heap; // r1+0x0
// int* where; // r1+0x4
// Local variables
int done; // r5
int nOffset; // r8
int nCount; // r1+0x0
int iPack; // r1+0x0
unsigned int nPack; // r9
unsigned int nMask; // r10
unsigned int nMask0; // r1+0x0
// References
// -> void* gHeapTree;
// -> unsigned int aHeapTreeFlag[125];
}
// Erased
static int cpuTreeFree(struct cpu_function* pFunction) {
// Parameters
// struct cpu_function* pFunction; // r1+0x0
// Local variables
unsigned int* anPack; // r1+0x0
int iPack; // r1+0x0
unsigned int nMask; // r5
// References
// -> unsigned int aHeapTreeFlag[125];
}
// Range: 0x80033304 -> 0x80033E88
int cpuFindFunction(struct _CPU* pCPU, int theAddress, struct cpu_function** tree_node) {
// Parameters
// struct _CPU* pCPU; // r22
// int theAddress; // r1+0x38
// struct cpu_function** tree_node; // r28
// Local variables
struct __anon_0x3EB4F** apDevice; // r26
u8* aiDevice; // r27
unsigned int opcode; // r1+0x34
u8 follow; // r1+0x3D
u8 valid; // r16
u8 check; // r1+0x3C
u8 end_flag; // r18
u8 save_restore; // r14
u8 alert; // r15
int beginAddress; // r21
int cheat_address; // r17
int current_address; // r31
int temp_address; // r30
int branch; // r1+0x8
// References
// -> static u8 Opcode[64];
// -> static u8 RegimmOpcode[32];
// -> static u8 SpecialOpcode[64];
}
// Range: 0x800331A4 -> 0x80033304
static int cpuDMAUpdateFunction(struct _CPU* pCPU, int start, int end) {
// Parameters
// struct _CPU* pCPU; // r28
// int start; // r29
// int end; // r30
// Local variables
struct cpu_treeRoot* root; // r1+0x8
int count; // r1+0x8
int cancel; // r5
}
// Erased
static void treeCallerInit(struct cpu_callerID* block, int total) {
// Parameters
// struct cpu_callerID* block; // r3
// int total; // r1+0x4
// Local variables
int count; // r6
}
// Erased
static int treeCallerKill(struct _CPU* pCPU, struct cpu_function* kill) {
// Parameters
// struct _CPU* pCPU; // r29
// struct cpu_function* kill; // r30
// Local variables
int left; // r1+0x14
int right; // r1+0x10
struct cpu_treeRoot* root; // r31
}
// Range: 0x800330A0 -> 0x800331A4
static int treeCallerCheck(struct _CPU* pCPU, struct cpu_function* tree, int flag, int nAddress0, int nAddress1) {
// Parameters
// struct _CPU* pCPU; // r24
// struct cpu_function* tree; // r25
// int flag; // r26
// int nAddress0; // r27
// int nAddress1; // r28
// Local variables
int count; // r30
int saveGCN; // r6
int saveN64; // r1+0x8
int* addr_function; // r1+0x8
int* addr_call; // r29
}
// Range: 0x80033048 -> 0x800330A0
static int treeInit(struct _CPU* pCPU, int root_address) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
// int root_address; // r1+0x4
// Local variables
struct cpu_treeRoot* root; // r1+0x0
}
// Range: 0x80032F2C -> 0x80033048
static int treeInitNode(struct cpu_function** tree, struct cpu_function* prev, int start, int end) {
// Parameters
// struct cpu_function** tree; // r30
// struct cpu_function* prev; // r31
// int start; // r28
// int end; // r29
// Local variables
struct cpu_function* node; // r1+0x1C
int where; // r1+0x18
}
// Range: 0x80032C84 -> 0x80032F2C
static int treeKill(struct _CPU* pCPU) {
// Parameters
// struct _CPU* pCPU; // r28
// Local variables
struct cpu_treeRoot* root; // r1+0x8
int count; // r29
// References
// -> unsigned int aHeapTreeFlag[125];
}
// Range: 0x800329D4 -> 0x80032C84
static int treeKillNodes(struct _CPU* pCPU, struct cpu_function* tree) {
// Parameters
// struct _CPU* pCPU; // r24
// struct cpu_function* tree; // r25
// Local variables
struct cpu_function* current; // r27
struct cpu_function* kill; // r28
int count; // r26
// References
// -> unsigned int aHeapTreeFlag[125];
}
// Range: 0x80032674 -> 0x800329D4
static int treeDeleteNode(struct _CPU* pCPU, struct cpu_function** top, struct cpu_function* kill) {
// Parameters
// struct _CPU* pCPU; // r30
// struct cpu_function** top; // r1+0xC
// struct cpu_function* kill; // r31
// Local variables
struct cpu_treeRoot* root; // r3
struct cpu_function* save1; // r5
struct cpu_function* save2; // r8
struct cpu_function* connect; // r1+0x8
// References
// -> unsigned int aHeapTreeFlag[125];
}
// Erased
static int treeRebuild(struct _CPU* pCPU, int start_address, struct cpu_function** node) {
// Parameters
// struct _CPU* pCPU; // r29
// int start_address; // r30
// struct cpu_function** node; // r31
}
// Erased
static int treeInsertAndReturn(struct _CPU* pCPU, int start, int end, struct cpu_function** ppFunction) {
// Parameters
// struct _CPU* pCPU; // r3
// int start; // r28
// int end; // r29
// struct cpu_function** ppFunction; // r30
// Local variables
struct cpu_treeRoot* root; // r31
int flag; // r3
}
// Range: 0x80032558 -> 0x80032674
int treeInsert(struct _CPU* pCPU, int start, int end) {
// Parameters
// struct _CPU* pCPU; // r3
// int start; // r29
// int end; // r30
// Local variables
struct cpu_treeRoot* root; // r31
struct cpu_function* current; // r1+0x14
int flag; // r3
}
// Range: 0x80032470 -> 0x80032558
static int treeInsertNode(struct cpu_function** tree, int start, int end, struct cpu_function** ppFunction) {
// Parameters
// struct cpu_function** tree; // r31
// int start; // r8
// int end; // r7
// struct cpu_function** ppFunction; // r30
// Local variables
struct cpu_function** current; // r31
struct cpu_function* prev; // r4
}
// Range: 0x800322D8 -> 0x80032470
static int treeBalance(struct cpu_treeRoot* root) {
// Parameters
// struct cpu_treeRoot* root; // r1+0x0
// Local variables
struct cpu_function* tree; // r8
struct cpu_function* current; // r4
struct cpu_function* save; // r6
int total; // r9
int count; // r7
}
// Range: 0x800320EC -> 0x800322D8
static int treeAdjustRoot(struct _CPU* pCPU, int new_end) {
// Parameters
// struct _CPU* pCPU; // r23
// int new_end; // r24
// Local variables
int old_root; // r1+0x8
int new_root; // r30
int kill_start; // r29
int check1; // r1+0x8
int check2; // r28
u16 total; // r27
int total_memory; // r26
int address; // r22
struct cpu_treeRoot* root; // r25
struct cpu_function* node; // r1+0x18
struct cpu_function* change; // r1+0x14
}
// Erased
static int treeSearch(struct _CPU* pCPU, int target, struct cpu_function** node) {
// Parameters
// struct _CPU* pCPU; // r1+0x8
// int target; // r4
// struct cpu_function** node; // r5
// Local variables
struct cpu_treeRoot* root; // r1+0x8
int flag; // r3
}
// Range: 0x80032088 -> 0x800320EC
static int treeSearchNode(struct cpu_function* tree, int target, struct cpu_function** node) {
// Parameters
// struct cpu_function* tree; // r3
// int target; // r1+0x4
// struct cpu_function** node; // r1+0x8
// Local variables
struct cpu_function* current; // r3
}
// Range: 0x800318F0 -> 0x80032088
static int treeKillRange(struct _CPU* pCPU, struct cpu_function* tree, int start, int end) {
// Parameters
// struct _CPU* pCPU; // r31
// struct cpu_function* tree; // r24
// int start; // r25
// int end; // r26
// Local variables
struct cpu_treeRoot* root; // r29
struct cpu_function* node1; // r1+0x3C
struct cpu_function* node2; // r1+0x38
struct cpu_function* save1; // r3
struct cpu_function* save2; // r4
struct cpu_function* connect; // r5
int update; // r28
int count; // r27
// References
// -> unsigned int aHeapTreeFlag[125];
}
// Range: 0x80031860 -> 0x800318F0
static int treeKillReason(struct _CPU* pCPU, int* value) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
// int* value; // r1+0x4
}
// Range: 0x8003174C -> 0x80031860
static int treeTimerCheck(struct _CPU* pCPU) {
// Parameters
// struct _CPU* pCPU; // r30
// Local variables
struct cpu_treeRoot* root; // r1+0x8
int begin; // r1+0x10
int end; // r1+0xC
}
// Erased
static int treeCleanUpCheck(struct _CPU* pCPU, struct cpu_function* node) {
// Parameters
// struct _CPU* pCPU; // r29
// struct cpu_function* node; // r30
// Local variables
struct cpu_treeRoot* root; // r31
}
// Range: 0x8003161C -> 0x8003174C
static int treeCleanUp(struct _CPU* pCPU, struct cpu_treeRoot* root) {
// Parameters
// struct _CPU* pCPU; // r29
// struct cpu_treeRoot* root; // r31
// Local variables
int done; // r3
int complete; // r30
}
// Range: 0x8003133C -> 0x8003161C
static int treeCleanNodes(struct _CPU* pCPU, struct cpu_function* top) {
// Parameters
// struct _CPU* pCPU; // r27
// struct cpu_function* top; // r1+0xC
// Local variables
struct cpu_function** current; // r30
struct cpu_function* kill; // r29
struct cpu_treeRoot* root; // r1+0x8
int kill_limit; // r28
}
// Erased
static int treeForceCleanUp(struct _CPU* pCPU, struct cpu_function* node, int kill_value) {
// Parameters
// struct _CPU* pCPU; // r3
// struct cpu_function* node; // r1+0xC
// int kill_value; // r5
// Local variables
struct cpu_treeRoot* root; // r31
}
// Range: 0x80031168 -> 0x8003133C
static int treeForceCleanNodes(struct _CPU* pCPU, struct cpu_function* tree, int kill_limit) {
// Parameters
// struct _CPU* pCPU; // r28
// struct cpu_function* tree; // r1+0xC
// int kill_limit; // r29
// Local variables
struct cpu_function* current; // r31
struct cpu_function* kill; // r30
}
// Erased
static int treePrint(struct _CPU* pCPU) {
// Parameters
// struct _CPU* pCPU; // r29
// Local variables
struct cpu_treeRoot* root; // r1+0x8
int left; // r1+0x10
int right; // r1+0xC
}
// Range: 0x80030F84 -> 0x80031168
static int treePrintNode(struct _CPU* pCPU, struct cpu_function* tree, int print_flag, int* left, int* right) {
// Parameters
// struct _CPU* pCPU; // r21
// struct cpu_function* tree; // r22
// int print_flag; // r1+0x10
// int* left; // r23
// int* right; // r24
// Local variables
struct cpu_function* current; // r27
int flag; // r26
int level; // r25
// References
// -> int ganMapGPR[32];
}
// Erased
static int treeMemory(struct _CPU* pCPU) {
// Parameters
// struct _CPU* pCPU; // r1+0x0
}
// Range: 0x80030E70 -> 0x80030F84
static int cpuOpcodeChecksum(unsigned int opcode) {
// Parameters
// unsigned int opcode; // r1+0x0
// Local variables
int flag; // r5
}
// Erased
static int cpuDoubleCheckSameChecksum(struct cpu_disk_node* pDisk, int start) {
// Parameters
// struct cpu_disk_node* pDisk; // r30
// int start; // r4
// Local variables
int count; // r1+0x8
int instruction; // r1+0x8
unsigned int* last; // r31
unsigned int* current; // r1+0x10
// References
// -> struct __anon_0x3DB14* gpSystem;
}
// Erased
static int cpuCheckOpcodeHack(struct _CPU* pCPU, int startAddress, int instruction) {
// Parameters
// struct _CPU* pCPU; // r29
// int startAddress; // r30
// int instruction; // r31
// Local variables
int iHack; // r1+0x8
unsigned int* opcode; // r1+0x14
}
// Erased
static int cpuUpdateDiskChecksum(unsigned int* checksum, int startAddress, int endAddress) {
// Parameters
// unsigned int* checksum; // r29
// int startAddress; // r4
// int endAddress; // r1+0x10
// Local variables
int count; // r31
int instruction; // r30
int check; // r1+0x8
unsigned int* opcode; // r1+0x14
unsigned int part; // r27
// References
// -> struct __anon_0x3DB14* gpSystem;
}