diff --git a/functions.py b/functions.py index 5519bb5ae9..beca84502e 100644 --- a/functions.py +++ b/functions.py @@ -40,6 +40,8 @@ known_funcs = { 0x8008439C:("func_8008439C","UNK_RET","UNK_TYPE, UNK_TYPE"), 0x800847CC:("func_800847CC","UNK_RET","UNK_PTR, ..."), # printf? 0x8008481C:("func_8008481C","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_PTR, UNK_PTR"), + 0x80084940:("func_80084940","void","void"), + 0x80084968:("func_80084968","void","void"), 0x80085320:("func_80085320","void","struct s80085320*, UNK_PTR, UNK_PTR, UNK_TYPE, UNK_TYPE, UNK_PTR"), 0x800853F8:("func_800853F8","UNK_RET","struct s80085320*"), 0x80085468:("func_80085468","UNK_TYPE","struct s80085320*"), @@ -108,7 +110,7 @@ known_funcs = { 0x8008AF30:("osGetThreadId","OSId","OSThread* t"), 0x8008AF50:("osSpTaskYield","void","void"), 0x8008B650:("func_8008B650","UNK_RET","UNK_PTR"), - 0x8008B6B0:("__osGetConfig","u32 ","void "), + 0x8008B6B0:("__osGetConfig","u32 ","void"), 0x8008B6C0:("__osSetConfig","void ","u32 value"), 0x8008BE70:("osStopTimer","int","OSTimer* t"), 0x8008BF60:("__osProbeTLB","u32","void*"), @@ -178,7 +180,7 @@ known_funcs = { 0x80094DF0:("ldiv","ldiv_t","long numer, long denom"), 0x80094E74:("lldiv","lldiv_t","long long numer, long long denom"), 0x80094F80:("_Litob","void","_Pft* px, unsigned char code"), - 0x80095220:("__osSiRawWriteIo","s32","u32 devAddr, u32* data"), + 0x80095220:("__osSiRawWriteIo","s32","u32 devAddr, u32 data"), 0x80095270:("__osSpGetStatus","u32","void"), 0x80095280:("__osSpSetStatus","void","u32 data"), 0x800952A0:("osCreateViManager","void","OSPri pri"), @@ -187,8 +189,8 @@ known_funcs = { 0x800955C0:("osWritebackDCacheAll","void","void"), 0x80095740:("guMtxF2L","void","float* mf[4], Mtx* m"), 0x800957B0:("osStartThread","void","OSThread* t"), - 0x80095900:("func_80095900","void","f32"), - 0x80095950:("func_80095950","UNK_RET","f32"), + 0x80095900:("osViSetYScale","void","f32"), + 0x80095950:("osViSetXScale","void","f32"), 0x80095A60:("__d_to_ll","long long","double d"), 0x80095A7C:("__f_to_ll","long long","float f"), 0x80095A98:("__d_to_ull","unsigned long long","double d"), @@ -207,18 +209,20 @@ known_funcs = { 0x800991a0:("__osRcpImTable","UNK_RET","UNK_ARGS"), 0x80099450:("__libm_qnan_f","UNK_RET","UNK_ARGS"), 0x800A5AC0:("func_800A5AC0","UNK_RET","void*, UNK_TYPE"), # guessing this is void* bc it's a thread entry point - 0x800A5B6C:("func_800A5B6C","UNK_RET","struct s800A5AC0*, UNK_TYPE"), + 0x800A5B6C:("func_800A5B6C","UNK_RET","struct s800A5AC0*, z_GlobalContext*"), 0x800A5B98:("func_800A5B98","UNK_RET","struct s800A5AC0*, UNK_TYPE"), 0x800A5C28:("func_800A5C28","UNK_RET","struct s800A5AC0*"), 0x800A5C60:("func_800A5C60","UNK_RET","struct s800A5AC0*, UNK_TYPE"), 0x800A5CB8:("func_800A5CB8","UNK_RET","struct s800A5AC0*, UNK_TYPE"), - 0x800B3BA4:("func_800B3BA4","UNK_RET","UNK_PTR, UNK_TYPE, UNK_PTR, UNK_TYPE"), + 0x800B3BA4:("func_800B3BA4","UNK_RET","UNK_PTR, f32, UNK_PTR, UNK_TYPE"), 0x800B3FC0:("func_800B3FC0","UNK_TYPE","UNK_TYPE"), + 0x800B5BB0:("func_800B5BB0","UNK_TYPE","z_GlobalContext*, UNK_TYPE"), 0x800B675C:("func_800B675C","UNK_RET","struct s800A5AC0*, UNK_TYPE"), 0x800B84D0:("func_800B84D0","UNK_TYPE","struct s800A5AC0*, UNK_TYPE"), 0x800B863C:("func_800B863C","UNK_RET","struct s800A5AC0*, UNK_TYPE"), 0x800B867C:("func_800B867C","UNK_TYPE","struct s800A5AC0*"), 0x800BDFC0:("func_800BDFC0","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_TYPE, struct s800A5AC0*"), + 0x800BE03C:("func_800BE03C","void","z_GlobalContext*, UNK_TYPE"), 0x800C6024:("func_800C6024","UNK_TYPE","UNK_TYPE"), 0x800C6248:("func_800C6248","UNK_TYPE","UNK_TYPE, UNK_TYPE"), 0x800CAAD0:("func_800CAAD0","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_TYPE"), @@ -230,11 +234,16 @@ known_funcs = { 0x800CAF38:("func_800CAF38","UNK_RET","UNK_TYPE"), 0x800E03A0:("func_800E03A0","s800E03A0*","s32"), 0x800E03CC:("func_800E03CC","void","u8*"), - 0x800E11EC:("func_800E11EC","UNK_RET","UNK_TYPE, UNK_PTR"), - 0x800E1374:("func_800E1374","UNK_RET","UNK_TYPE, UNK_PTR, struct s800A5AC0*, UNK_PTR"), + 0x800E119C:("func_800E119C","void","z_GlobalContext*, UNK_PTR"), + 0x800E11EC:("func_800E11EC","void","z_GlobalContext*, UNK_PTR"), + 0x800E130C:("func_800E130C","void","z_GlobalContext*, UNK_PTR, z_Actor*, UNK_PTR"), + 0x800E1374:("func_800E1374","UNK_RET","UNK_TYPE, UNK_PTR, z_Actor*, UNK_PTR"), + 0x800E2558:("func_800E2558","void","z_GlobalContext*, UNK_PTR, UNK_PTR"), 0x800E2928:("func_800E2928","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_PTR"), - 0x800E7DF8:("func_800E7DF8","UNK_RET","struct s800A5AC0*, UNK_PTR"), - 0x800FFADC:("func_800FFADC","UNK_RET","struct s800A5AC0*, UNK_PTR"), + 0x800E7DF8:("func_800E7DF8","void","z_Actor*, UNK_PTR"), + 0x800FFADC:("func_800FFADC","void","z_Actor*, z_ActorCompInitEntry*"), # Compact Instance Initializer + 0x80131758:("func_80131758","void","z_GlobalContext*, UNK_TYPE"), + 0x80100504:("func_80100504","UNK_TYPE","UNK_TYPE"), 0x80138C88:("func_80138C88","UNK_RET","UNK_PTR, UNK_PTR, UNK_PTR"), 0x80139188:("func_80139188","UNK_TYPE","UNK_PTR, UNK_PTR"), 0x80139894:("func_80139894","UNK_RET","UNK_PTR, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, f32, f32, f32"), diff --git a/include/functions.h b/include/functions.h index 2e334a88e9..2d1aa4578f 100644 --- a/include/functions.h +++ b/include/functions.h @@ -118,7 +118,8 @@ UNK_RET func_8008481C(UNK_TYPE, UNK_TYPE, UNK_PTR, UNK_PTR); // func_8008481C // UNK_RET func_8008486C(UNK_ARGS); // UNK_RET func_800848A4(UNK_ARGS); // UNK_RET func_800848B8(UNK_ARGS); -// UNK_RET func_80084940(UNK_ARGS); +void func_80084940(void); // func_80084940 +void func_80084968(void); // func_80084968 // UNK_RET func_800849A0(UNK_ARGS); // UNK_RET func_80084DB0(UNK_ARGS); // UNK_RET func_8008501C(UNK_ARGS); @@ -421,7 +422,7 @@ UNK_RET func_80094828(UNK_ARGS); // func_80094828 ldiv_t ldiv(long numer, long denom); // func_80094DF0 lldiv_t lldiv(long long numer, long long denom); // func_80094E74 void _Litob(_Pft* px, unsigned char code); // func_80094F80 -s32 __osSiRawWriteIo(u32 devAddr, u32* data); // func_80095220 +s32 __osSiRawWriteIo(u32 devAddr, u32 data); // func_80095220 u32 __osSpGetStatus(void); // func_80095270 void __osSpSetStatus(u32 data); // func_80095280 void osCreateViManager(OSPri pri); // func_800952A0 @@ -431,8 +432,8 @@ OSThread* __osGetCurrFaultedThread(void); // func_800955F0 // UNK_RET func_80095600(UNK_ARGS); void guMtxF2L(float* mf[4], Mtx* m); // func_80095740 void osStartThread(OSThread* t); // func_800957B0 -void func_80095900(f32); // func_80095900 -UNK_RET func_80095950(f32); // func_80095950 +void osViSetYScale(f32); // func_80095900 +void osViSetXScale(f32); // func_80095950 long long __d_to_ll(double d); // func_80095A60 long long __f_to_ll(float f); // func_80095A7C unsigned long long __d_to_ull(double d); // func_80095A98 @@ -458,7 +459,7 @@ UNK_RET osViModeMpalLan1(UNK_ARGS); // func_80098010 UNK_RET __osRcpImTable(UNK_ARGS); // func_800991A0 UNK_RET __libm_qnan_f(UNK_ARGS); // func_80099450 UNK_RET func_800A5AC0(void*, UNK_TYPE); // func_800A5AC0 -UNK_RET func_800A5B6C(struct s800A5AC0*, UNK_TYPE); // func_800A5B6C +UNK_RET func_800A5B6C(struct s800A5AC0*, z_GlobalContext*); // func_800A5B6C UNK_RET func_800A5B98(struct s800A5AC0*, UNK_TYPE); // func_800A5B98 UNK_RET func_800A5C28(struct s800A5AC0*); // func_800A5C28 UNK_RET func_800A5C60(struct s800A5AC0*, UNK_TYPE); // func_800A5C60 @@ -684,7 +685,7 @@ UNK_RET func_800A5CB8(struct s800A5AC0*, UNK_TYPE); // func_800A5CB8 // UNK_RET func_800B3880(UNK_ARGS); // UNK_RET func_800B39A4(UNK_ARGS); // UNK_RET func_800B3AD0(UNK_ARGS); -UNK_RET func_800B3BA4(UNK_PTR, UNK_TYPE, UNK_PTR, UNK_TYPE); // func_800B3BA4 +UNK_RET func_800B3BA4(UNK_PTR, f32, UNK_PTR, UNK_TYPE); // func_800B3BA4 // UNK_RET func_800B3BC8(UNK_ARGS); UNK_TYPE func_800B3FC0(UNK_TYPE); // func_800B3FC0 // UNK_RET func_800B4024(UNK_ARGS); @@ -702,7 +703,7 @@ UNK_TYPE func_800B3FC0(UNK_TYPE); // func_800B3FC0 // UNK_RET func_800B51A4(UNK_ARGS); // UNK_RET func_800B5208(UNK_ARGS); // UNK_RET func_800B5814(UNK_ARGS); -// UNK_RET func_800B5BB0(UNK_ARGS); +UNK_TYPE func_800B5BB0(z_GlobalContext*, UNK_TYPE); // func_800B5BB0 // UNK_RET func_800B5BF4(UNK_ARGS); // UNK_RET func_800B5C34(UNK_ARGS); // UNK_RET func_800B5C78(UNK_ARGS); @@ -888,7 +889,7 @@ UNK_TYPE func_800B867C(struct s800A5AC0*); // func_800B867C // UNK_RET func_800BDC5C(UNK_ARGS); // UNK_RET func_800BDFB0(UNK_ARGS); UNK_RET func_800BDFC0(UNK_TYPE, UNK_TYPE, UNK_TYPE, struct s800A5AC0*); // func_800BDFC0 -// UNK_RET func_800BE03C(UNK_ARGS); +void func_800BE03C(z_GlobalContext*, UNK_TYPE); // func_800BE03C // UNK_RET func_800BE0B8(UNK_ARGS); // UNK_RET func_800BE184(UNK_ARGS); // UNK_RET func_800BE22C(UNK_ARGS); @@ -1380,11 +1381,11 @@ void func_800E03CC(u8*); // func_800E03CC // UNK_RET func_800E110C(UNK_ARGS); // UNK_RET func_800E1148(UNK_ARGS); // UNK_RET func_800E115C(UNK_ARGS); -// UNK_RET func_800E119C(UNK_ARGS); -UNK_RET func_800E11EC(UNK_TYPE, UNK_PTR); // func_800E11EC +void func_800E119C(z_GlobalContext*, UNK_PTR); // func_800E119C +void func_800E11EC(z_GlobalContext*, UNK_PTR); // func_800E11EC // UNK_RET func_800E12A4(UNK_ARGS); -// UNK_RET func_800E130C(UNK_ARGS); -UNK_RET func_800E1374(UNK_TYPE, UNK_PTR, struct s800A5AC0*, UNK_PTR); // func_800E1374 +void func_800E130C(z_GlobalContext*, UNK_PTR, z_Actor*, UNK_PTR); // func_800E130C +UNK_RET func_800E1374(UNK_TYPE, UNK_PTR, z_Actor*, UNK_PTR); // func_800E1374 // UNK_RET func_800E13C0(UNK_ARGS); // UNK_RET func_800E1400(UNK_ARGS); // UNK_RET func_800E1440(UNK_ARGS); @@ -1429,7 +1430,7 @@ UNK_RET func_800E1374(UNK_TYPE, UNK_PTR, struct s800A5AC0*, UNK_PTR); // func_80 // UNK_RET func_800E2450(UNK_ARGS); // UNK_RET func_800E2470(UNK_ARGS); // UNK_RET func_800E2480(UNK_ARGS); -// UNK_RET func_800E2558(UNK_ARGS); +void func_800E2558(z_GlobalContext*, UNK_PTR, UNK_PTR); // func_800E2558 // UNK_RET func_800E2740(UNK_ARGS); UNK_RET func_800E2928(UNK_TYPE, UNK_TYPE, UNK_PTR); // func_800E2928 // UNK_RET func_800E2B98(UNK_ARGS); @@ -1511,7 +1512,7 @@ UNK_RET func_800E2928(UNK_TYPE, UNK_TYPE, UNK_PTR); // func_800E2928 // UNK_RET func_800E7BCC(UNK_ARGS); // UNK_RET func_800E7C64(UNK_ARGS); // UNK_RET func_800E7DCC(UNK_ARGS); -UNK_RET func_800E7DF8(struct s800A5AC0*, UNK_PTR); // func_800E7DF8 +void func_800E7DF8(z_Actor*, UNK_PTR); // func_800E7DF8 // UNK_RET func_800E7E3C(UNK_ARGS); // UNK_RET func_800E7E5C(UNK_ARGS); // UNK_RET func_800E7ECC(UNK_ARGS); @@ -1923,7 +1924,7 @@ UNK_RET func_800E7DF8(struct s800A5AC0*, UNK_PTR); // func_800E7DF8 // UNK_RET func_800FFA4C(UNK_ARGS); // UNK_RET func_800FFA60(UNK_ARGS); // UNK_RET func_800FFA94(UNK_ARGS); -UNK_RET func_800FFADC(struct s800A5AC0*, UNK_PTR); // func_800FFADC +void func_800FFADC(z_Actor*, z_ActorCompInitEntry*); // func_800FFADC // UNK_RET func_800FFB54(UNK_ARGS); // UNK_RET func_800FFB70(UNK_ARGS); // UNK_RET func_800FFB8C(UNK_ARGS); @@ -1949,7 +1950,7 @@ UNK_RET func_800FFADC(struct s800A5AC0*, UNK_PTR); // func_800FFADC // UNK_RET func_8010011C(UNK_ARGS); // UNK_RET func_801001B8(UNK_ARGS); // UNK_RET func_80100448(UNK_ARGS); -// UNK_RET func_80100504(UNK_ARGS); +UNK_TYPE func_80100504(UNK_TYPE); // func_80100504 // UNK_RET func_80100584(UNK_ARGS); // UNK_RET func_801005A0(UNK_ARGS); // UNK_RET func_801005C0(UNK_ARGS); @@ -2537,7 +2538,7 @@ UNK_RET func_800FFADC(struct s800A5AC0*, UNK_PTR); // func_800FFADC // UNK_RET func_801311B4(UNK_ARGS); // UNK_RET func_80131580(UNK_ARGS); // UNK_RET func_80131690(UNK_ARGS); -// UNK_RET func_80131758(UNK_ARGS); +void func_80131758(z_GlobalContext*, UNK_TYPE); // func_80131758 // UNK_RET func_8013178C(UNK_ARGS); // UNK_RET func_801317C0(UNK_ARGS); // UNK_RET func_8013189C(UNK_ARGS); diff --git a/include/structs.h b/include/structs.h index 8e86e14f9f..eddd217a1b 100644 --- a/include/structs.h +++ b/include/structs.h @@ -22,6 +22,7 @@ struct s8008A6FC { /* 12 */ UNK_TYPE unk12; }; +// TODO this should extend from z_Actor struct s800A5AC0 { /* 000 */ u8 pad0[28]; /* 028 */ s16 unk28; @@ -104,6 +105,69 @@ typedef struct s800F4F54_s { /* 92152 */ u8 unk92152; } s800F4F54; +typedef struct { + /* 0x0 */ f32 x; + /* 0x4 */ f32 y; + /* 0x8 */ f32 z; +} z_Vector3D; + +struct z_Actor; + +typedef void(*z_ActorFunc)(struct z_Actor*, void*); + +typedef struct { + /* 000 */ u8 pad0[4]; + /* 004 */ UNK_TYPE unk4; + /* 008 */ u8 pad1[20]; + /* 028 */ s16 unk28; + /* 030 */ u8 pad2[58]; + /* 088 */ z_Vector3D unk088; // scale? + /* 100 */ u8 pad3[46]; + /* 146 */ s16 unk146; + /* 148 */ u8 pad4[34]; + /* 182 */ u8 unk182; + /* 183 */ u8 pad5[5]; + /* 188 */ u16 unk188; // or char + /* 190 */ s16 unk190; + /* 192 */ u8 pad6[60]; + /* 252 */ f32 unk252; // start of z_Vector3D? + /* 256 */ f32 unk256; + /* 260 */ f32 unk260; + /* 264 */ u8 pad7[14]; + /* 278 */ u16 unk278; + /* 280 */ u8 pad8[36]; + /* 316 */ z_ActorFunc drawFunc; + /* 320 */ u8 pad9[4]; + // TODO figure out what size this is +} z_Actor; + +typedef struct s80BD5530_s { + /* 000000 */ u8 pad[100484]; + /* 100484 */ UNK_TYPE unk100484; +} z_GlobalContext; + +typedef struct { + u32 cont : 1; + u32 type : 4; + u32 offset : 11; + u32 value : 16; +} z_ActorCompInitEntry; + +typedef struct { + /* 0x00 */ s16 id; + /* 0x02 */ u8 type; // Classifies actor and determines when actor will execute + /* 0x03 */ u8 room; // Room instance was spawned in. If value set to FF in + // rom, instance does not despawn when swapping rooms + /* 0x04 */ s32 flags; // unknown + /* 0x08 */ s16 objectId; // Possibly it's primary object dependency + /* 0x0A */ // Padding + /* 0x0C */ u32 instanceSize; + /* 0x10 */ z_ActorFunc init; // Constructor + /* 0x14 */ z_ActorFunc fini; // Destructor + /* 0x18 */ z_ActorFunc main; // Main Update Function + /* 0x1C */ z_ActorFunc draw; // Draw function +} z_ActorInit; + // TODO everything past here should be placed in an appropiate libultra header typedef long Mtx_t[4][4]; diff --git a/include/variables.h b/include/variables.h index 86a36e175c..98613f4fe8 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1871,8 +1871,8 @@ extern UNK_TYPE D_80000500; // D_80000500 extern UNK_TYPE D_80025D00; // D_80025D00 //extern UNK_TYPE D_800969C0; extern u8 D_80096B20; // D_80096B20 -extern u8* D_80096B24; // D_80096B24 -extern u32 D_80096B28; // D_80096B28 +extern volatile u8 D_80096B24; // D_80096B24 +extern u8 D_80096B28; // D_80096B28 extern u32 D_80096B2C; // D_80096B2C extern f32 D_80096B30; // D_80096B30 extern f32 D_80096B34; // D_80096B34 @@ -1934,7 +1934,7 @@ extern u32* D_80098010; // D_80098010 //extern UNK_TYPE D_80098060; //extern UNK_TYPE D_80098090; extern __OSViContext* __osViCurr; // D_800980C0 -extern UNK_TYPE __osViNext; // D_800980C4 +extern __OSViContext* __osViNext; // D_800980C4 extern UNK_PTR D_800980D0; // D_800980D0 extern u32* D_800980E0; // D_800980E0 extern UNK_TYPE D_80098130; // D_80098130 @@ -13626,8 +13626,10 @@ extern f32 D_808637D0; // D_808637D0 //extern UNK_TYPE D_80BD52F4; //extern UNK_TYPE D_80BD52F8; //extern UNK_TYPE D_80BD52FC; -//extern UNK_TYPE D_80BD55F0; -//extern UNK_TYPE D_80BD561C; +extern z_ActorInit bgIkanaRayInitVar; // D_80BD55D0 +extern UNK_TYPE D_80BD55F0; // D_80BD55F0 +extern z_ActorCompInitEntry bgIkanaRayCompInit[]; // D_80BD561C +extern UNK_TYPE D_80BD562C; // D_80BD562C //extern UNK_TYPE D_80BD5D10; //extern UNK_TYPE D_80BD5D20; //extern UNK_TYPE D_80BD5D24; diff --git a/variables.py b/variables.py index 343ef3fe06..96fc9bdf7b 100644 --- a/variables.py +++ b/variables.py @@ -16,8 +16,8 @@ known_vars = { 0x80000500:("","UNK_TYPE",False), 0x80025D00:("","UNK_TYPE",False), 0x80096B20:("","u8",False), - 0x80096B24:("","u8*",False), - 0x80096B28:("","u32",False), + 0x80096B24:("","volatile u8",False), + 0x80096B28:("","u8",False), 0x80096B2C:("","u32",False), 0x80096B30:("","f32",False), 0x80096B34:("","f32",False), @@ -46,7 +46,7 @@ known_vars = { 0x80097FC0:("","u32*",False), 0x80098010:("","u32*",False), 0x800980C0:("__osViCurr","__OSViContext*",False), - 0x800980C4:("__osViNext","UNK_TYPE",False), # some struct pointer used in func_80095900 + 0x800980C4:("__osViNext","__OSViContext*",False), 0x800980D0:("","UNK_PTR",False), 0x800980E0:("","u32*",False), 0x80098130:("","UNK_TYPE",False), # ldigs in https:github.com/vocho/openqnx/blob/cc95df3543a1c481d4f8ad387e29f0d1ff0c87fe/trunk/lib/c/stdio/xlitob.c @@ -140,7 +140,12 @@ known_vars = { 0x80208EA0:("","UNK_TYPE",False), # En_Test - 0x808637D0:("","f32",False) + 0x808637D0:("","f32",False), + + 0x80BD55D0:("bgIkanaRayInitVar","z_ActorInit",False), + 0x80BD55F0:("","UNK_TYPE",False), + 0x80BD561C:("bgIkanaRayCompInit","z_ActorCompInitEntry",True), + 0x80BD562C:("","UNK_TYPE",False) } # these are extra variables needed for one reason or another, they should probably be deleted if possible