diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 3d363f7c..6bb6cc2a 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -15,7 +15,8 @@ ], "defines": [ "_LANGUAGE_C", - "_MIPS_SZLONG=32" + "_MIPS_SZLONG=32", + "F3DEX_GBI" ], "cStandard": "gnu89", // C89 + some GNU extensions from C99 like C++ comments "cppStandard": "${default}" diff --git a/.vscode/settings.json b/.vscode/settings.json index 3ed2b542..bd9dc9ac 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -30,6 +30,7 @@ "xstdio.h": "c", "controller.h": "c", "os_version.h": "c", - "stdbool.h": "c" + "stdbool.h": "c", + "variables.h": "c" }, } \ No newline at end of file diff --git a/include/functions.h b/include/functions.h index 011189f4..7ae1cf1a 100644 --- a/include/functions.h +++ b/include/functions.h @@ -3,6 +3,13 @@ #include "structs.h" +void func_8000291C(void); +void func_800029A8(void); +void func_80002AF4(void); +void func_80002BE8(void); +void func_80002C50(void); +void func_80002CB8(void); + f32 Math_ModF(f32 value, f32 mod); void Rand_Init(void); f32 Rand_ZeroOne(void); @@ -24,13 +31,13 @@ void func_80006A20(Matrix*, Vec3f*, Vec3f*); void func_80006EB8(Gfx**); void func_80006F20(void); -void func_800070C8(s64); +void func_800070C8(u64); -s32 func_800071FC(s32*); -s32 func_800072E0(s32*); - -void func_80007D58(void*); +s32 func_800071FC(UnkStruct_7D30*); +s32 func_800072E0(UnkStruct_7D30*); +void Fault_ThreadEntry(void*); +void func_80007FE4(FrameBuffer*, u16, u16); void func_80008018(void); void func_800182F4(s32); @@ -39,7 +46,14 @@ void func_8001A838(u32 arg0); void func_8001AF40(s32 arg0); void func_8001DC6C(s32, s32); -s32 func_8001EF10(void); +void func_8000FFCC(void); +void func_8001DCE0(void); +void func_8001DECC(void); +SPTask* func_8001DF50(void); + +void RdRam_CheckIPL3(void); + +void Mio0_Decompress(void* header, u8* dst); s32 vsprintf(char* dst, char* fmt, va_list args); @@ -85,8 +99,6 @@ s64 __ull_div(s64, s64); s64 __ll_mul(s64, s64); s64 __ll_rshift(s64, s64); -s32 func_8002DE78(void*, s32, s32); // Not real signature - void func_80060FBC(u8*, f32*); void func_8006EEFC(s32, f32, f32, f32, f32, f32, f32, f32, f32, f32); @@ -121,6 +133,8 @@ void func_8009FC0C(s32, s32, s32); f32 func_8009F768(f32); void func_8009FEA0(s32, s32, s32); void func_800A1200(s32, s32, f32, f32, char*); +void func_800A18B0(void); +void func_800A26C0(void); s32 func_800A3F50(s32); void func_800A5D6C(void); void func_800B8DD0(Gfx**, s16); @@ -128,6 +142,7 @@ void func_800BA490(void); void func_800BA4F0(void); void func_800BA808(u16*, s32); void func_800BB5D0(void); +void func_800BC4B0(void); void func_800B6F50(f32, f32, f32, f32, f32, f32); void func_800B9358(void); diff --git a/include/global.h b/include/global.h index 8f959132..2792c67e 100644 --- a/include/global.h +++ b/include/global.h @@ -17,11 +17,19 @@ #include "macros.h" #include "sf64math.h" -extern Gfx* D_80137E64; - -extern OSDevMgr __osPiDevMgr; - #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 +typedef enum { + THREAD_ID_SYSTEM, + THREAD_ID_IDLE, + THREAD_ID_FAULT, + THREAD_ID_MAIN, + THREAD_ID_4, + THREAD_ID_AUDIO, + THREAD_ID_GRAPHICS, + THREAD_ID_7, + THREAD_ID_8, +} ThreadID; + #endif // GLOBAL_H diff --git a/include/libc/math.h b/include/libc/math.h index 5422d5fe..84a943fa 100644 --- a/include/libc/math.h +++ b/include/libc/math.h @@ -25,7 +25,16 @@ typedef union { f32 f; } fu; -typedef float Matrix[4][4]; +typedef union { + float m[4][4]; + struct { + float xx, yx, zx, wx, + xy, yy, zy, wy, + xz, yz, zz, wz, + xw, yw, zw, ww; + }; + // u64 force_struct_alignment; +} Matrix; extern f32 __libm_qnan_f; diff --git a/include/macros.h b/include/macros.h index 1a5ab1f4..7eb8e0b9 100644 --- a/include/macros.h +++ b/include/macros.h @@ -4,4 +4,7 @@ #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) #define SQ(x) ((x) * (x)) +#define USEC_TO_CYCLES(n) (((u64)(n)*(osClockRate/15625LL))/(1000000LL/15625LL)) +#define MSEC_TO_CYCLES(n) (USEC_TO_CYCLES((n) * 1000LL)) + #endif // MACROS_H diff --git a/include/osint.h b/include/osint.h index 8c207431..b73b6096 100644 --- a/include/osint.h +++ b/include/osint.h @@ -55,4 +55,4 @@ extern int __osDpDeviceBusy(void); extern void* __printfunc; #endif -#endif \ No newline at end of file +#endif diff --git a/include/structs.h b/include/structs.h index 4c56209a..2147424b 100644 --- a/include/structs.h +++ b/include/structs.h @@ -4,6 +4,49 @@ #include "global.h" #include "sf64math.h" +typedef struct { + u16 data[240 * 320]; +} FrameBuffer; + +typedef struct { + u8 data[0x40][8]; +} UnkStruct_7D30; + +typedef struct { + OSThread thread; + char stack[0x800]; + OSMesgQueue msgQueue; + OSMesg msg; + FrameBuffer* fb; + u16 width; + u16 height; +} FaultMgr; + +typedef enum { + SPTASK_STATE_NOT_STARTED, + SPTASK_STATE_RUNNING, + SPTASK_STATE_INTERRUPTED, + SPTASK_STATE_FINISHED, + SPTASK_STATE_FINISHED_DP +} SpTaskState; + +typedef struct { + OSTask task; + OSMesgQueue* msgQueue; + OSMesg msg; + SpTaskState state; +} SPTask; + +typedef struct { + SPTask task; + Vp viewports[0x10]; + Mtx mtx[0x480]; + Gfx unkDL1[0x180]; + Gfx masterDL[0x1380]; + Gfx unkDL2[0xD80]; + Lightsn lights[0x100]; +} GfxPool; + typedef struct UnkStruct_D_801B8350 { /* 0x00 */ Vec3f unk0; /* 0x0C */ char pad_0C[0x4C]; diff --git a/include/variables.h b/include/variables.h index 5840d255..5fa65d18 100644 --- a/include/variables.h +++ b/include/variables.h @@ -3,18 +3,141 @@ #include "structs.h" -extern OSThread D_800DEAA0; -extern OSThread D_800DFC50; // no gap -extern OSThread D_800E0E00; // 0x1000 gap -extern s32 D_800E1FB0; // 0x1000 gap, probably OSScTask -extern OSMesgQueue D_800E2010; -extern OSMesg D_800E2028; -extern OSMesgQueue D_800E2148; -extern OSMesgQueue D_800E2238; -extern OSMesgQueue D_800E2278; +extern u64 __rspboot_start[]; +extern u64 __rspboot_end[]; +extern u64 __f3dex_start[]; +extern u8 D_80281000[0x400]; +extern u8 D_80281400[0xC00]; +extern u8 D_802A7800; +extern u8 D_802D7800; +extern u8 gF3dexData; + +extern s32 D_800C45D0; + +extern f32 D_800C45E0[]; + +extern Mtx gIdentityMtx; // 800C4620 +extern Matrix gIdentityMatrix; //800C4660 +extern Vec3f D_800C46A0; +extern Vec3f D_800C46AC; +extern Vec3f D_800C46B8; +extern Vec3f D_800C46C4; +extern Vec3f D_800C46D0; +extern Vec3f D_800C46DC; + +extern u8 sFaultCharIndex[]; +extern s32 sFaultCharPixelFlags[]; +extern char* D_800C4870[]; +extern char* D_800C48B8[]; extern f32 D_800C5D34; extern s8 D_800C5D3C; +extern s8 D_800C7C50; +extern s8 D_800C7C54; +extern OSMesgQueue* D_800C7C58; +extern OSMesgQueue* D_800C7C5C; +extern OSMesgQueue* D_800C7C60; +extern OSMesgQueue* D_800C7C64; + +extern char D_800C7C80[]; + +extern u16 D_800DD8AA; +extern u8 gAudioThreadStack[0x1000]; // 800DDAA0 +extern OSThread gGraphicsThread; // 800DEAA0 +extern u8 gGraphicsThreadStack[0x1000]; // 800DEC50 +extern OSThread gUnkThread3; // 800DFC50 +extern u8 gUnkThread3Stack[0x1000]; // 800DFE00 +extern OSThread gUnkThread4; // 800E0E00 +extern u8 gUnkThread4Stack[0x1000]; // 800E0FB0 + +extern SPTask* gCurrentTask; +extern SPTask* D_800E1FB4[1]; +extern SPTask* D_800E1FB8[2]; +extern SPTask* D_800E1FC0[2]; +extern SPTask* D_800E1FC8[2]; +extern u32 gSegments[16]; // 800E1FD0 +extern OSMesgQueue gPiMgrCmdQueue; // 800E2010 +extern OSMesg sPiMgrCmdBuff[50]; // 800E2028 + +extern OSMesgQueue D_800E20F0; +extern void *D_800E2108[1]; +extern OSIoMesg D_800E2110; +extern OSMesgQueue D_800E2128; +extern void *D_800E2140[1]; +extern OSMesgQueue D_800E2148; +extern void *D_800E2160[32]; +extern OSMesgQueue D_800E21E0; +extern void *D_800E21F8[16]; +extern OSMesgQueue D_800E2238; +extern void *D_800E2250[1]; +extern OSMesgQueue D_800E2258; +extern void *D_800E2270[1]; +extern OSMesgQueue D_800E2278; +extern void *D_800E2290[4]; +extern OSMesgQueue D_800E22A0; +extern void *D_800E22B8[2]; +extern OSMesgQueue D_800E22C0; +extern void *D_800E22D8[8]; +extern OSMesgQueue D_800E22F8; +extern void *D_800E2310[1]; +extern OSMesgQueue D_800E2318; +extern void *D_800E2330[1]; +extern OSMesgQueue D_800E2338; +extern void *D_800E2350[16]; +extern OSMesgQueue D_800E2390; +extern void *D_800E23A8[1]; + +extern GfxPool* gGfxPool; +extern SPTask* gGfxTask; +extern Vp* gViewport; +extern Mtx* gGfxMtx; +extern Gfx* gUnkDisp1; +extern Gfx* gMasterDisp; +extern Gfx* gUnkDisp2; +extern Lightsn* gLight; +extern FrameBuffer *gFrameBuffer; +extern s32* D_80137E74; + +// some sort of struct I think +extern u8 D_80137E78; +extern u32 D_80137E7C; +extern u8 D_80137E80; +extern u8 D_80137E81; +extern u8 D_80137E84[4]; +extern u16 D_80137E88; +extern u16 D_80137E8A; + +extern s32 D_80178580; +extern s32 *D_80178710; +extern s32 D_80387800; +extern u16 D_8038F080[]; +extern u16 D_8038F300[]; + +extern FrameBuffer gFrameBuffers[3]; // 8038F800 +extern GfxPool gGfxPools[2]; // 800E23B0 + +extern Matrix* D_8013B3C0; +extern Matrix D_8013B3C8[0x20]; +extern Matrix* D_8013BBC8; +extern Matrix D_8013BBD0[]; + +extern OSThread sIdleThread; // 80138E90 +extern u8 sIdleThreadStack[0x1000]; // 801390A0 +extern OSThread gMainThread; // 8013A040 +extern u8 sMainThreadStack[0x1000]; // 8013A1F0 +extern OSThread gAudioThread; //8013B1F0 + +extern UnkStruct_7D30 D_80144F60; +extern UnkStruct_7D30 D_80145160; +extern FaultMgr gFaultMgr; + +extern OSMesg D_80156600; +extern OSMesg D_80156608; +extern OSMesg D_80156618; +extern OSMesg D_8015661C; +extern s32 D_8015F928; + + extern s32 D_800CFF90; extern f32 D_800D19AC[]; extern f32 D_800D19E0[]; @@ -28,7 +151,7 @@ extern s32 D_800D2190[]; extern f32 D_800D21A0; extern f32 D_800D21A4; extern s32 D_800D2870; -extern u16 D_800D99F8[]; +extern u16 D_Tex_800D99F8[]; extern OSContPad D_800DD880[4]; extern OSContPad D_800DD898[4]; @@ -41,8 +164,7 @@ extern u8 D_800DD8BC[4]; // Fake symbol. Only exists as loop terminator for D_80 // extern OSContStatus D_800DD8F0[4]; // extern OSPfs D_800DD900[4]; -extern Gfx* D_80137E64; -extern u8 D_80137E78; + extern s32 D_80161690; extern f32 D_801616BC; @@ -68,6 +190,9 @@ extern s32 D_801617B8; extern s32 D_80161810[]; extern s16 D_80161A34; extern s16 D_80161A36; +extern f32 D_80161A3C; +extern f32 D_80161A40; +extern f32 D_80161A44; extern u8 D_80161A90[]; extern s16 D_80161AA0[]; extern UnkStruct_D_8016F110 D_8016F110[]; @@ -177,11 +302,9 @@ extern f32 D_801B905C; extern f32 D_801B9060; extern f32 D_801B9064; -extern Matrix* D_8013B3C0; -extern Matrix* D_8013BBC8; extern f32 D_800C5D28[]; -extern s32 D_801ADA44_EE6104[]; +extern char D_801ADA44_EE6104[]; extern s32 D_801ADA84_EE6144[]; extern s32 D_801ADA94_EE6154; @@ -265,27 +388,5 @@ extern Gfx D_D0098B0[]; extern Gfx D_F014180[]; -extern u8 D_80137E84[]; -extern OSMesgQueue D_800E2128; -extern OSMesgQueue D_800E22F8; -extern OSMesgQueue D_800E2318; -extern u8 D_80137E80; -extern s32 D_80144F60; - -extern s8 D_800C7C50; -extern s8 D_800C7C54; -extern OSMesgQueue* D_800C7C58; -extern OSMesgQueue* D_800C7C5C; -extern OSMesgQueue* D_800C7C60; -extern OSMesgQueue* D_800C7C64; -extern OSMesg D_80156600; -extern OSMesg D_80156608; -extern OSMesg D_80156618; -extern OSMesg D_8015661C; -extern s32 D_8015F928; - -extern OSThread D_80138E90; -extern OSThread D_8013A040; // 0x1000 gap -extern OSThread D_8013B1F0; // 0x1000 gap #endif // VARIABLES_H diff --git a/linker_scripts/us/symbol_addrs.txt b/linker_scripts/us/symbol_addrs.txt index a875ca82..43f8849f 100644 --- a/linker_scripts/us/symbol_addrs.txt +++ b/linker_scripts/us/symbol_addrs.txt @@ -1,6 +1,7 @@ bootproc = 0x80004DA8; D_800C90F0 = 0x800C90F0; __libm_qnan_f = 0x800C9570; +D_1 = 0x1; //ignore:true Math_ModF = 0x80004E20; Rand_Init = 0x80004E4C; @@ -16,13 +17,71 @@ Math_PowF = 0x800055DC; Math_MinMax = 0x80005604; D_800C45E0 = 0x800C45E0; +D_800C57EC = 0x800C57EC; +D_800C7380 = 0x800C7380; +D_800C5FF4 = 0x800C5FF4; //type:u16 size:5000 + +gIdentityMtx = 0x800C4620; +gIdentityMatrix = 0x800C4660; + +sFaultCharPixelFlags = 0x800C4770; +sFaultCharIndex = 0x800C46F0; + Math_FAtanF = 0x8001FBE8; Math_FAtan2F = 0x8001FD0C; Math_FAsinF = 0x8001FE00; Math_FAcosF = 0x8001FE30; -D_800E23B0 = 0x800E23B0; // size:0x55AA0 +Idle_ThreadEntry = 0x80004D00; +Main_ThreadEntry = 0x80004ABC; +Audio_ThreadEntry = 0x80003B48; +Graphics_ThreadEntry = 0x80004144; + +__rspboot_start = 0x80000450; +__rspboot_end = 0x80000520; +__f3dex_start = 0x80001410; +gF3dexData = 0x800C3DD0; + +gAudioThreadStack = 0x800DDAA0; +gGraphicsThread = 0x800DEAA0; +gGraphicsThreadStack = 0x800DEC50; +gUnkThread3 = 0x800DFC50; +gUnkThread3Stack = 0x800DFE00; +gUnkThread4 = 0x800E0E00; +gUnkThread4Stack = 0x800E0FB0; + +gCurrentTask = 0x800E1FB0; +D_800E1FB4 = 0x800E1FB4; +D_800E1FB8 = 0x800E1FB8; +D_800E1FC0 = 0x800E1FC0; +D_800E1FC8 = 0x800E1FC8; + +gPiMgrCmdQueue = 0x800E2010; +sPiMgrCmdBuff = 0x800E2028; +sIdleThread = 0x80138E90; +sIdleThreadStack = 0x80139040; +gMainThread = 0x8013A040; +sMainThreadStack = 0x8013A1F0; +gAudioThread = 0x8013B1F0; + +gSegments = 0x800E1FD0; +gGfxPools = 0x800E23B0; // size:0x55AA0 +gGfxPool = 0x80137E50; +gGfxTask = 0x80137E54; +gViewport = 0x80137E58; +gGfxMtx = 0x80137E5C; +gUnkDisp1 = 0x80137E60; +gMasterDisp = 0x80137E64; +gUnkDisp2 = 0x80137E68; +gLight = 0x80137E6C; +gFrameBuffer = 0x80137E70; +D_80137E74 = 0x80137E74; +gFrameBuffers = 0x8038F800; D_8013C3D0 = 0x8013C3D0; // size:0x8800 +gFaultMgr = 0x80145360; // size:0x9D8 + +Mio0_Decompress = 0x8001EE70; +RdRam_CheckIPL3 = 0x8001EF10; D_800D934C = 0x800D934C; // force_migration:True D_800D503C = 0x800D503C; // force_migration:True diff --git a/linker_scripts/us/symbol_addrs_assets.txt b/linker_scripts/us/symbol_addrs_assets.txt new file mode 100644 index 00000000..29204c8b --- /dev/null +++ b/linker_scripts/us/symbol_addrs_assets.txt @@ -0,0 +1,34 @@ +D_Gfx_800D94D0 = 0x800D94D0; // type:Gfx +D_Gfx_800D95E8 = 0x800D95E8; // type:Gfx +D_Gfx_800D9688 = 0x800D9688; // type:Gfx +D_Gfx_800D96D0 = 0x800D96D0; // type:Gfx +D_Gfx_800D9860 = 0x800D9860; // type:Gfx +D_Gfx_800D9990 = 0x800D9990; // type:Gfx +D_Gfx_800DA9F8 = 0x800DA9F8; // type:Gfx +D_Gfx_800DAA98 = 0x800DAA98; // type:Gfx +D_Gfx_800DAB28 = 0x800DAB28; // type:Gfx +D_Gfx_800DAB80 = 0x800DAB80; // type:Gfx +D_Gfx_800DAC20 = 0x800DAC20; // type:Gfx +D_Gfx_800DACA0 = 0x800DACA0; // type:Gfx +D_Gfx_800DBAA0 = 0x800DBAA0; // type:Gfx + +D_Tex_800DA1F8 = 0x800DA1F8; +D_Tex_800D99F8 = 0x800D99F8; +D_Tex_800DBA20 = 0x800DBA20; + +D_Vtx_800D94A0 = 0x800D94A0; +D_Vtx_800D94E8 = 0x800D94E8; +D_Vtx_800D9658 = 0x800D9658; +D_Vtx_800D96A0 = 0x800D96A0; +D_Vtx_800D9760 = 0x800D9760; +D_Vtx_800D9950 = 0x800D9950; +D_Vtx_800D9910 = 0x800D9910; +D_Vtx_800DAA58 = 0x800DAA58; +D_Vtx_800DAAF8 = 0x800DAAF8; +D_Vtx_800DAB40 = 0x800DAB40; +D_Vtx_800DABE0 = 0x800DABE0; +D_Vtx_800DAC80 = 0x800DAC80; + +D_Unk_800DACB8 = 0x800DACB8; +D_Unk_800DB4B8 = 0x800DB4B8; +D_Unk_800D96E4 = 0x800D96E4; // type:s16 diff --git a/src/libultra/gu/lookat.c b/src/libultra/gu/lookat.c index e39ccf8d..d64e8d40 100644 --- a/src/libultra/gu/lookat.c +++ b/src/libultra/gu/lookat.c @@ -67,7 +67,7 @@ void guLookAtF(float mf[4][4], float xEye, float yEye, float zEye, float xAt, fl void guLookAt(Mtx* m, float xEye, float yEye, float zEye, float xAt, float yAt, float zAt, float xUp, float yUp, float zUp) { - Matrix mf; + float mf[4][4]; guLookAtF(mf, xEye, yEye, zEye, xAt, yAt, zAt, xUp, yUp, zUp); diff --git a/src/libultra/gu/ortho.c b/src/libultra/gu/ortho.c index 14945f8c..cc4b9030 100644 --- a/src/libultra/gu/ortho.c +++ b/src/libultra/gu/ortho.c @@ -23,7 +23,7 @@ void guOrthoF(float mf[4][4], float l, float r, float b, float t, float n, float } void guOrtho(Mtx* m, float l, float r, float b, float t, float n, float f, float scale) { - Matrix mf; + float mf[4][4]; guOrthoF(mf, l, r, b, t, n, f, scale); diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c index 9ecba032..33018cfe 100644 --- a/src/libultra/io/controller.c +++ b/src/libultra/io/controller.c @@ -4,7 +4,7 @@ extern s32 __osContinitialized; -#define USEC_TO_CYCLES(n, clock) ((n) * (u64) (clock) / 1000000) +#define USEC_TO_CYCLES_OLD(n, clock) ((n) * (u64) (clock) / 1000000) s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { OSMesg dummy; @@ -20,9 +20,9 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { __osContinitialized = 1; t = osGetTime(); - if (t < USEC_TO_CYCLES(500000, osClockRate)) { + if (t < USEC_TO_CYCLES_OLD(500000, osClockRate)) { osCreateMesgQueue(&timerMesgQueue, &dummy, 1); - osSetTimer(&mytimer, USEC_TO_CYCLES(500000, osClockRate) - t, 0, &timerMesgQueue, &dummy); + osSetTimer(&mytimer, USEC_TO_CYCLES_OLD(500000, osClockRate) - t, 0, &timerMesgQueue, &dummy); osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK); } __osMaxControllers = 4; diff --git a/src/libultra/io/motor.c b/src/libultra/io/motor.c index 412a239f..dd583ac1 100644 --- a/src/libultra/io/motor.c +++ b/src/libultra/io/motor.c @@ -63,7 +63,7 @@ s32 osMotorStart(OSPfs* pfs) { } void _MakeMotorData(s32 channel, u16 address, u8* buffer, OSPifRam* mdata) { - u8* ptr = mdata->ramarray; + u8* ptr = (u8*) mdata->ramarray; __OSContRamReadFormat ramreadformat; s32 i; diff --git a/src/libultra/io/pimgr.c b/src/libultra/io/pimgr.c index 44d43ec9..ebc9ae29 100644 --- a/src/libultra/io/pimgr.c +++ b/src/libultra/io/pimgr.c @@ -2,8 +2,8 @@ #include "piint.h" #include "PR/rdb.h" -void ramromMain(void* /*arg*/); -extern char piEventBuf[]; +void ramromMain(void* arg); +extern OSMesg piEventBuf[]; extern OSMesgQueue piEventQueue; extern OSThread piThread; extern char piThreadStack[]; @@ -22,7 +22,7 @@ void osCreatePiMgr(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt) return; } osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt); - osCreateMesgQueue(&piEventQueue, (OSMesg*) piEventBuf, 1); + osCreateMesgQueue(&piEventQueue, piEventBuf, 1); if (!__osPiAccessQueueEnabled) { __osPiCreateAccessQueue(); @@ -60,9 +60,9 @@ void osCreatePiMgr(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt) #pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/io/pimgr/osCreatePiMgr.s") #endif -extern char freeRamromBuf[]; +extern OSMesg freeRamromBuf[]; extern OSMesgQueue freeRamromQ; -extern char getRamromBuf[]; +extern OSMesg getRamromBuf[]; extern OSMesgQueue getRamromQ; void ramromMain(void* arg) { @@ -71,8 +71,10 @@ void ramromMain(void* arg) { osCreateMesgQueue(&getRamromQ, getRamromBuf, 1); osCreateMesgQueue(&freeRamromQ, freeRamromBuf, 1); - osSetEventMesg(18 /*OS_EVENT_RDB_REQ_RAMROM*/, &getRamromQ, NULL); - osSetEventMesg(19 /*OS_EVENT_RDB_FREE_RAMROM*/, &freeRamromQ, NULL); + + // For some reason the compiler thinks these macros are undefined + osSetEventMesg(18 /* OS_EVENT_RDB_REQ_RAMROM */, &getRamromQ, NULL); + osSetEventMesg(19 /*OS_EVENT_RDB_FREE_RAMROM */, &freeRamromQ, NULL); while (TRUE) { osRecvMesg(&getRamromQ, NULL, OS_MESG_BLOCK); diff --git a/src/libultra/rmon/rmonregs.c b/src/libultra/rmon/rmonregs.c index d0997339..7fd28ee5 100644 --- a/src/libultra/rmon/rmonregs.c +++ b/src/libultra/rmon/rmonregs.c @@ -3,10 +3,13 @@ #pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/rmon/rmonregs/__rmonregs_LoadStoreSU.s") +void __rmonregs_LoadStoreSU(int opcode, int regno); #pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/rmon/rmonregs/LoadStoreVU.s") +void SetUpForRCPop(int isVector); #pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/rmon/rmonregs/SetUpForRCPop.s") +void CleanupFromRCPop(int isVector); #pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/rmon/rmonregs/CleanupFromRCPop.s") #pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/rmon/rmonregs/__rmonGetGRegisters.s") @@ -26,7 +29,7 @@ s32 rmonGetRcpRegister(s32 arg0) { SetUpForRCPop(0); __rmonregs_LoadStoreSU(0x2B, arg0); __rmonStepRCP(); - ret = __rmonReadWordAt(0x04000000); + ret = __rmonReadWordAt((u32*) SP_DMEM_START); CleanupFromRCPop(0); return ret; } diff --git a/src/main/3440.c b/src/main/3440.c index 42030dd7..720b5d66 100644 --- a/src/main/3440.c +++ b/src/main/3440.c @@ -47,7 +47,7 @@ void func_8000291C(void) { u8 sp1F; s32 i; - osContInit(&D_800E2128, &sp1F, &D_800DD8F0); + osContInit(&D_800E2128, &sp1F, D_800DD8F0); for (i = 0; i < 4; i++) { D_800DD8B0[i] = (sp1F >> i) & 1; D_800DD8B8[i] = 0; @@ -84,7 +84,7 @@ void func_80002AF4(void) { osRecvMesg(&D_800E2128, NULL, 1); osContGetReadData(D_800DD8C0); } - osSendMesg(&D_800E22F8, 16, 0); + osSendMesg(&D_800E22F8, (OSMesg) 16, 0); } #else #pragma GLOBAL_ASM("asm/us/nonmatchings/main/3440/func_80002AF4.s") @@ -92,18 +92,18 @@ void func_80002AF4(void) { void func_80002BE8(void) { if ((D_80137E80 == 0) && (func_800072E0(&D_80144F60) == 0)) { - osSendMesg(&D_800E2318, 15, 0); + osSendMesg(&D_800E2318, (OSMesg) 15, 0); return; } - osSendMesg(&D_800E2318, 14, 0); + osSendMesg(&D_800E2318, (OSMesg) 14, 0); } void func_80002C50(void) { if ((D_80137E80 == 0) && (func_800071FC(&D_80144F60) == 0)) { - osSendMesg(&D_800E2318, 15, 0); + osSendMesg(&D_800E2318, (OSMesg) 15, 0); return; } - osSendMesg(&D_800E2318, 14, 0); + osSendMesg(&D_800E2318, (OSMesg) 14, 0); } void func_80002CB8(void) { diff --git a/src/main/3A80.c b/src/main/3A80.c index 7974c216..111d45f1 100644 --- a/src/main/3A80.c +++ b/src/main/3A80.c @@ -4,16 +4,144 @@ s32 func_80002E80(char* dst, char* fmt, va_list args) { return vsprintf(dst, fmt, args); } -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/3A80/func_80002EA0.s") +void func_80002EA0(s32 arg0, void (**arg1)(s32, s32), s32 arg2, s32 arg3) { + void (*temp)(s32, s32) = arg1[arg0]; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/3A80/func_80002EE4.s") + temp(arg2, arg3); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/3A80/func_80002F88.s") +void func_80002EE4(u8* buf1, u8* buf2, s32 len) { + s32 i; + u8 temp; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/3A80/func_8000316C.s") + for (i = 0; i < len; i++) { + temp = buf2[i]; + buf2[i] = buf1[i]; + buf1[i] = temp; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/3A80/func_800032B4.s") +typedef s32 (*CompareFunc)(void*, void*); -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/3A80/func_800033E0.s") +void func_80002F88(u8* first, u32 curLen, u32 size, CompareFunc cFunc) { + u32 splitIdx; + u8* last; + u8* right; + u8* left; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/3A80/func_800034E8.s") + while (1) { + last = first + (curLen - 1) * size; + + if (curLen == 2) { + if (cFunc(first, last) > 0) { + func_80002EE4(first, last, size); + } + return; + } + if (size && size && size) {} //! FAKE: must be here with at least 3 && operands. + left = first; + right = last - size; + + while (1) { + while (cFunc(left, last) < 0) { + left += size; + } + while ((cFunc(right, last) >= 0) && (left < right)) { + right -= size; + } + if (left >= right) { + break; + } + func_80002EE4(left, right, size); + left += size; + right -= size; + } + func_80002EE4(last, left, size); + splitIdx = (left - first) / size; + if (curLen / 2 < splitIdx) { + if ((curLen - splitIdx) > 2) { + func_80002F88(left + size, curLen - splitIdx - 1, size, cFunc); + } + + if (splitIdx < 2) { + return; + } + left = first; + curLen = splitIdx; + } else { + if (splitIdx >= 2) { + func_80002F88(first, splitIdx, size, cFunc); + } + + if ((curLen - splitIdx) <= 2) { + return; + } + + first = left + size; + curLen -= splitIdx + 1; + } + } +} + +void func_8000316C(Gfx** dList) { + u16 norm; + + guPerspective(gGfxMtx, &norm, D_80161A3C, 1.3333334f, D_80161A40, D_80161A44, 1.0f); + gSPPerspNormalize((*dList)++, norm); + gSPMatrix((*dList)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + guLookAt(gGfxMtx, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -12800.0f, 0.0f, 1.0f, 0.0f); + gSPMatrix((*dList)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + func_80005680(D_8013B3C0, &gIdentityMatrix); +} + +void func_800032B4(Gfx** dList) { + void* temp_t0; + void* temp_t0_2; + + guOrtho(gGfxMtx, -160.0f, 160.0f, -120.0f, 120.0f, D_80161A40, D_80161A44, 1.0f); + gSPMatrix((*dList)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + guLookAt(gGfxMtx, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -12800.0f, 0.0f, 1.0f, 0.0f); + gSPMatrix((*dList)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + func_80005680(D_8013B3C0, &gIdentityMatrix); +} + +void func_800033E0(u32 var_s2, u8* var_s1, s32 var_s0) { + osInvalICache(var_s1, var_s0); + osInvalDCache(var_s1, var_s0); + while (var_s0 > 0x100) { + osPiStartDma(&D_800E2110, 0, 0, var_s2, var_s1, 0x100, &D_800E20F0); + var_s0 -= 0x100; + var_s2 += 0x100; + var_s1 += 0x100; + osRecvMesg(&D_800E20F0, NULL, 1); + } + if (var_s0 != 0) { + osPiStartDma(&D_800E2110, 0, 0, var_s2, var_s1, var_s0, &D_800E20F0); + osRecvMesg(&D_800E20F0, NULL, 1); + } +} + +void func_800034E8(u8 arg0) { + s32 i; + + D_80137E88 |= 1; + if (arg0 == 1) { + if (D_80137E8A == 0) { + if (D_80137E88 == 1) { + osViBlack(1); + } else { + for (i = 0; i < 0x3C0; i++) { + D_8038F080[i] = D_80137E88; + } + osWritebackDCacheAll(); + osViSwapBuffer(&D_8038F300); + osViRepeatLine(1); + } + D_80137E8A = 1; + } + } else if (D_80137E8A == 1) { + osViRepeatLine(0); + osViBlack(0); + D_80137E8A = 0; + } +} diff --git a/src/main/41D0.c b/src/main/41D0.c index 1bde6f54..e47a7f0f 100644 --- a/src/main/41D0.c +++ b/src/main/41D0.c @@ -1,7 +1,84 @@ -#include "common.h" +#include "global.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/41D0/func_800035D0.s") +void func_800035D0(Gfx** dList) { + gSPNumLights((*dList)++, 7); + gSPLight((*dList)++, &gLight->l[0], 1); + gSPLight((*dList)++, &gLight->l[1], 2); + gSPLight((*dList)++, &gLight->l[2], 3); + gSPLight((*dList)++, &gLight->l[3], 4); + gSPLight((*dList)++, &gLight->l[4], 5); + gSPLight((*dList)++, &gLight->l[5], 6); + gSPLight((*dList)++, &gLight->l[6], 7); + gSPLight((*dList)++, &gLight->a, 8); + gLight++; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/41D0/func_8000372C.s") +void func_8000372C(Gfx** dList, s32 dirX, s32 dirY, s32 dirZ, s32 colR, s32 colG, s32 colB, s32 ambR, s32 ambG, + s32 ambB) { + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/41D0/func_800038AC.s") + for (i = 0; i < 4; i++) { + gLight->l[i].l.dir[0] = dirX; + gLight->l[i].l.dir[1] = dirY; + gLight->l[i].l.dir[2] = dirZ; + gLight->l[i].l.col[0] = colR; + gLight->l[i].l.col[1] = colG; + gLight->l[i].l.col[2] = colB; + gLight->l[i].l.colc[0] = colR; + gLight->l[i].l.colc[1] = colG; + gLight->l[i].l.colc[2] = colB; + } + for (i = 4; i < 7; i++) { + gLight->l[i].l.dir[0] = dirX; + gLight->l[i].l.dir[1] = dirY; + gLight->l[i].l.dir[2] = dirZ; + gLight->l[i].l.col[0] = 0; + gLight->l[i].l.col[1] = 0; + gLight->l[i].l.col[2] = 0; + gLight->l[i].l.colc[0] = 0; + gLight->l[i].l.colc[1] = 0; + gLight->l[i].l.colc[2] = 0; + } + gLight->a.l.col[0] = ambR; + gLight->a.l.col[1] = ambG; + gLight->a.l.col[2] = ambB; + gLight->a.l.colc[0] = ambR; + gLight->a.l.colc[1] = ambG; + gLight->a.l.colc[2] = ambB; + func_800035D0(dList); +} + +void func_800038AC(Gfx** dList, s32 dir1x, s32 dir1y, s32 dir1z, s32 dir2x, s32 dir2y, s32 dir2z, s32 col1r, s32 col1g, + s32 col1b, s32 col2r, s32 col2g, s32 col2b, s32 ambR, s32 ambG, s32 ambB) { + s32 i; + + for (i = 0; i < 4; i++) { + gLight->l[i].l.dir[0] = dir1x; + gLight->l[i].l.dir[1] = dir1y; + gLight->l[i].l.dir[2] = dir1z; + gLight->l[i].l.col[0] = col1r; + gLight->l[i].l.col[1] = col1g; + gLight->l[i].l.col[2] = col1b; + gLight->l[i].l.colc[0] = col1r; + gLight->l[i].l.colc[1] = col1g; + gLight->l[i].l.colc[2] = col1b; + } + for (i = 4; i < 7; i++) { + gLight->l[i].l.dir[0] = dir2x; + gLight->l[i].l.dir[1] = dir2y; + gLight->l[i].l.dir[2] = dir2z; + gLight->l[i].l.col[0] = col2r; + gLight->l[i].l.col[1] = col2g; + gLight->l[i].l.col[2] = col2b; + gLight->l[i].l.colc[0] = col2r; + gLight->l[i].l.colc[1] = col2g; + gLight->l[i].l.colc[2] = col2b; + } + gLight->a.l.col[0] = ambR; + gLight->a.l.col[1] = ambG; + gLight->a.l.col[2] = ambB; + gLight->a.l.colc[0] = ambR; + gLight->a.l.colc[1] = ambG; + gLight->a.l.colc[2] = ambB; + func_800035D0(dList); +} diff --git a/src/main/4650.c b/src/main/4650.c index 79a79dee..420c0969 100644 --- a/src/main/4650.c +++ b/src/main/4650.c @@ -1,60 +1,422 @@ #include "global.h" void func_800034E8(s32); -s32 func_80003A50(void); -void func_80003B48(void*); +void Audio_ThreadEntry(void* /*arg0*/); void func_80003EE0(void); -void func_80003FEC(void*); -void func_800040D4(void*); -void func_80004144(void*); -void func_80004ABC(void*); +void func_80003FEC(void* /*arg0*/); +void func_800040D4(void* /*arg0*/); +void Graphics_ThreadEntry(void* /*arg0*/); -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80003A50.s") +void func_80004560(void); +void func_80004714(void); +void func_80004798(void); +void func_80004824(void); +void func_800049D4(void); +void func_80007088(void*); -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80003B48.s") +s32 D_800C45D0 = 1; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80003C50.s") +void func_80003A50(void) { + u8 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80003DC0.s") + D_80137E78 = 0; + D_80137E7C = 0; + D_80137E80 = 0; + D_80137E81 = 0; + D_80137E88 = 0; + D_80137E8A = 0; + gCurrentTask = NULL; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80003EE0.s") + for (i = 0; i < ARRAY_COUNT(D_800E1FB4); i += 1) { + D_800E1FB4[i] = NULL; + } + for (i = 0; i < ARRAY_COUNT(D_800E1FB8); i += 1) { + D_800E1FB8[i] = NULL; + } + for (i = 0; i < 1; i += 1) { + D_800E1FC0[i] = NULL; + } + for (i = 0; i < ARRAY_COUNT(D_800E1FC8); i += 1) { + D_800E1FC8[i] = NULL; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80003FEC.s") +void Audio_ThreadEntry(void* arg0) { + SPTask* temp_v0; -// https://decomp.me/scratch/vo7No Random Nops missing -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_800040D4.s") + func_8000FFCC(); + func_8001DCE0(); + temp_v0 = func_8001DF50(); + if (temp_v0 != NULL) { + temp_v0->msgQueue = &D_800E2258; + temp_v0->msg = (OSMesg) 1; + osWritebackDCacheAll(); + osSendMesg(&D_800E21E0, temp_v0, 0); + } + while (1) { + temp_v0 = func_8001DF50(); + if (temp_v0 != NULL) { + temp_v0->msgQueue = &D_800E2258; + temp_v0->msg = (OSMesg) 1; + osWritebackDCacheAll(); + } + osRecvMesg(&D_800E2258, NULL, 0); + if (temp_v0 != NULL) { + osSendMesg(&D_800E21E0, temp_v0, 0); + } + osRecvMesg(&D_800E2238, NULL, 1); + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80004144.s") +void func_80003C50(void) { + gGfxTask->msgQueue = &D_800E22A0; + gGfxTask->msg = (OSMesg) 2; + gGfxTask->task.t.type = M_GFXTASK; + gGfxTask->task.t.flags = 0; + gGfxTask->task.t.ucode_boot = __rspboot_start; + gGfxTask->task.t.ucode_boot_size = (uintptr_t) __rspboot_end - (uintptr_t) __rspboot_start; + gGfxTask->task.t.ucode = __f3dex_start; + gGfxTask->task.t.ucode_size = 0x1000; + gGfxTask->task.t.ucode_data = (u64*) &gF3dexData; + gGfxTask->task.t.ucode_data_size = 0x800; + gGfxTask->task.t.dram_stack = (u64*) &D_80281000; + gGfxTask->task.t.dram_stack_size = 0x400; + gGfxTask->task.t.output_buff = (u64*) &D_802A7800; + gGfxTask->task.t.output_buff_size = (u64*) &D_802D7800; + gGfxTask->task.t.data_ptr = (u64*) gGfxPool->masterDL; + gGfxTask->task.t.data_size = (gMasterDisp - gGfxPool->masterDL) * sizeof(Gfx); + gGfxTask->task.t.yield_data_ptr = (u64*) &D_80281400; + gGfxTask->task.t.yield_data_size = OS_YIELD_DATA_SIZE; + osWritebackDCacheAll(); + osSendMesg(&D_800E21E0, gGfxTask, 0); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80004560.s") +void func_80003DC0(u32 arg0) { + gGfxPool = &gGfxPools[arg0 % 2]; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80004714.s") + gGfxTask = &gGfxPool->task; + gViewport = gGfxPool->viewports; + gGfxMtx = gGfxPool->mtx; + gUnkDisp1 = gGfxPool->unkDL1; + gMasterDisp = gGfxPool->masterDL; + gUnkDisp2 = gGfxPool->unkDL2; + gLight = gGfxPool->lights; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80004798.s") + gFrameBuffer = &gFrameBuffers[arg0 % 3]; + D_80137E74 = &D_80387800; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80004824.s") + D_8013B3C0 = D_8013B3C8; + D_8013BBC8 = D_8013BBD0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_800049D4.s") + D_80178710 = &D_80178580; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/4650/func_80004ABC.s") +void func_80003EE0(void) { + if ((D_800DD880[0].button & D_JPAD) && (D_800DD880[1].button & D_JPAD) && (D_800DD880[2].button & D_JPAD) && + (D_800DD880[3].button & L_TRIG) && (D_800DD880[3].button & R_TRIG) && (D_800DD880[3].button & Z_TRIG)) { + D_800C45D0 = 1 - D_800C45D0; + } + switch (osTvType) { + case 0: + osViSetMode(&osViModePalLan1); + break; + case 2: + osViSetMode(&osViModeMpalLan1); + break; + default: + case 1: + osViSetMode(&osViModeNtscLan1); + break; + } + if (D_800C45D0 != 0) { + osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_DIVOT_OFF | OS_VI_GAMMA_ON | OS_VI_GAMMA_DITHER_ON); + } else { + osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_DIVOT_OFF | OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF); + } +} -void func_80004D00(void* arg0) { - osCreateViManager(254); +void func_80003FEC(void* arg0) { + s32 sp34; + + func_8000291C(); + while (1) { + osRecvMesg(&D_800E22C0, (OSMesg) &sp34, 1); + switch (sp34) { + case 0xA: + func_80002AF4(); + break; + case 0xB: + func_80002BE8(); + break; + case 0xC: + func_80002C50(); + break; + case 0xD: + func_80002CB8(); + break; + } + } +} + +void func_800040D4(void* arg0) { + void* sp24; + + while (1) { + osRecvMesg(&D_800E2338, &sp24, 1); + func_80007088(sp24); + } +} + +void Graphics_ThreadEntry(void* arg0) { + u8 i; + u8 var_v1; + u8 var_v2; + + func_800A18B0(); + osSendMesg(&D_800E22C0, (OSMesg) 10, 0); + func_80003DC0(D_80137E7C); + { + gSPSegment(gUnkDisp1++, 0, 0); + gSPDisplayList(gMasterDisp++, gGfxPool->unkDL1); + func_800A26C0(); + gSPEndDisplayList(gUnkDisp1++); + gSPEndDisplayList(gUnkDisp2++); + gSPDisplayList(gMasterDisp++, gGfxPool->unkDL2); + gDPFullSync(gMasterDisp++); + gSPEndDisplayList(gMasterDisp++); + } + func_80003C50(); + while (1) { + D_80137E7C++; + func_80003DC0(D_80137E7C); + osRecvMesg(&D_800E22F8, NULL, 1); + osSendMesg(&D_800E22C0, (OSMesg) 13, 0); + func_800029A8(); + osSendMesg(&D_800E22C0, (OSMesg) 10, 0); + if (D_800DD8AA & 0x800) { + func_80003EE0(); + } + { + gSPSegment(gUnkDisp1++, 0, 0); + gSPDisplayList(gMasterDisp++, gGfxPool->unkDL1); + func_800A26C0(); + if (D_80137E80 == 1) { + func_800BC4B0(); + } + gSPEndDisplayList(gUnkDisp1++); + gSPEndDisplayList(gUnkDisp2++); + gSPDisplayList(gMasterDisp++, gGfxPool->unkDL2); + gDPFullSync(gMasterDisp++); + gSPEndDisplayList(gMasterDisp++); + } + osRecvMesg(&D_800E22A0, NULL, 1); + func_80003C50(); + if (D_80137E8A == 0) { + osViSwapBuffer(&gFrameBuffers[(D_80137E7C - 1) % 3]); + } + func_80007FE4(&gFrameBuffers[(D_80137E7C - 1) % 3], 320, 16); + + var_v1 = MIN(D_80137E78, 4); + var_v2 = MAX(var_v1, D_800E2278.validCount + 1); + for (i = 0; i < var_v2; i += 1) { // Can't be ++ + osRecvMesg(&D_800E2278, NULL, 1); + } + + func_8001DECC(); + } +} + +void func_80004560(void) { + osCreateMesgQueue(&D_800E20F0, D_800E2108, ARRAY_COUNT(D_800E2108)); + osCreateMesgQueue(&D_800E21E0, D_800E21F8, ARRAY_COUNT(D_800E21F8)); + osCreateMesgQueue(&D_800E2238, D_800E2250, ARRAY_COUNT(D_800E2250)); + osCreateMesgQueue(&D_800E2258, D_800E2270, ARRAY_COUNT(D_800E2270)); + osCreateMesgQueue(&D_800E2278, D_800E2290, ARRAY_COUNT(D_800E2290)); + osCreateMesgQueue(&D_800E22A0, D_800E22B8, ARRAY_COUNT(D_800E22B8)); + osCreateMesgQueue(&D_800E2128, D_800E2140, ARRAY_COUNT(D_800E2140)); + osSetEventMesg(OS_EVENT_SI, &D_800E2128, (OSMesg) 0); + osCreateMesgQueue(&D_800E2148, D_800E2160, ARRAY_COUNT(D_800E2160)); + osViSetEvent(&D_800E2148, (OSMesg) 3, 1); + osSetEventMesg(OS_EVENT_SP, &D_800E2148, (OSMesg) 1); + osSetEventMesg(OS_EVENT_DP, &D_800E2148, (OSMesg) 2); + osSetEventMesg(OS_EVENT_PRENMI, &D_800E2148, (OSMesg) 4); + osCreateMesgQueue(&D_800E2338, D_800E2350, ARRAY_COUNT(D_800E2350)); + osCreateMesgQueue(&D_800E2390, D_800E23A8, ARRAY_COUNT(D_800E23A8)); + osCreateMesgQueue(&D_800E22C0, D_800E22D8, ARRAY_COUNT(D_800E22D8)); + osCreateMesgQueue(&D_800E22F8, D_800E2310, ARRAY_COUNT(D_800E2310)); + osCreateMesgQueue(&D_800E2318, D_800E2330, ARRAY_COUNT(D_800E2330)); +} + +void func_80004714(void) { + SPTask** var_v1 = D_800E1FB8; + u8 i; + + if ((*var_v1)->msgQueue != NULL) { + osSendMesg((*var_v1)->msgQueue, (*var_v1)->msg, 0); + } + (*var_v1)->state = SPTASK_STATE_FINISHED_DP; + for (i = 0; i < 1; i += 1, var_v1++) { + *var_v1 = *(var_v1 + 1); + } + *var_v1 = NULL; +} + +void func_80004798(void) { + SPTask* task = gCurrentTask; + + gCurrentTask = NULL; + if (task->state == SPTASK_STATE_INTERRUPTED) { + if (osSpTaskYielded(&task->task) == 0) { + task->state = SPTASK_STATE_FINISHED; + } + } else { + task->state = SPTASK_STATE_FINISHED; + if (task->task.t.type == M_AUDTASK) { + if (task->msgQueue != NULL) { + osSendMesg(task->msgQueue, task->msg, 0); + } + D_800E1FB4[0] = NULL; + } + } +} + +void func_80004824(void) { + u8 i; + SPTask** var_a0; + SPTask** var_a1; + SPTask** var_s0_2; + SPTask** var_s1_2; + void* sp40; + SPTask* sp3C; + + var_s0_2 = D_800E1FC0; + var_s1_2 = D_800E1FC8; + for (i = 0; i < 1; i += 1) { + *(var_s0_2++) = NULL; + } + for (i = 0; i < ARRAY_COUNT(D_800E1FC8); i += 1) { + *(var_s1_2++) = NULL; + } + + var_s0_2 = D_800E1FC0; + var_s1_2 = D_800E1FC8; + while (osRecvMesg(&D_800E21E0, &sp40, 0) != -1) { + sp3C = (SPTask*) sp40; + sp3C->state = SPTASK_STATE_NOT_STARTED; + + switch (sp3C->task.t.type) { + case 2: + *(var_s0_2++) = sp3C; + break; + case 1: + *(var_s1_2++) = sp3C; + break; + } + } + var_s0_2 = D_800E1FC0; + var_s1_2 = D_800E1FC8; + var_a0 = D_800E1FB4; + var_a1 = D_800E1FB8; + + for (i = 0; i < 1; i += 1, var_a0++) { + if (*var_a0 == NULL) { + break; + } + } + for (i; i < 1; i += 1) { + *(var_a0++) = *(var_s0_2++); + } + for (i = 0; i < 2; i += 1, var_a1++) { + if (*var_a1 == NULL) { + break; + } + } + for (i; i < 2; i += 1) { + *(var_a1++) = *(var_s1_2++); + } +} + +void func_800049D4(void) { + if (D_800E1FB4[0] != NULL) { + if (gCurrentTask != NULL) { + if (gCurrentTask->task.t.type == M_GFXTASK) { + gCurrentTask->state = SPTASK_STATE_INTERRUPTED; + osSpTaskYield(); + } + } else { + gCurrentTask = D_800E1FB4[0]; + osSpTaskLoad(&gCurrentTask->task); + osSpTaskStartGo(&gCurrentTask->task); + gCurrentTask->state = SPTASK_STATE_RUNNING; + } + } else if ((gCurrentTask == NULL) && (D_800E1FB8[0] != NULL) && (D_800E1FB8[0]->state != SPTASK_STATE_FINISHED)) { + gCurrentTask = D_800E1FB8[0]; + osDpSetStatus(DPC_CLR_TMEM_CTR | DPC_CLR_PIPE_CTR | DPC_CLR_CMD_CTR | DPC_CLR_CLOCK_CTR); + osSpTaskLoad(&gCurrentTask->task); + osSpTaskStartGo(&gCurrentTask->task); + gCurrentTask->state = SPTASK_STATE_RUNNING; + } +} + +void Main_ThreadEntry(void* arg0) { + s32 sp54; + + osCreateThread(&gAudioThread, THREAD_ID_AUDIO, Audio_ThreadEntry, arg0, + gAudioThreadStack + sizeof(gAudioThreadStack), 80); + osStartThread(&gAudioThread); + osCreateThread(&gGraphicsThread, THREAD_ID_GRAPHICS, Graphics_ThreadEntry, arg0, + gGraphicsThreadStack + sizeof(gGraphicsThreadStack), 40); + osStartThread(&gGraphicsThread); + osCreateThread(&gUnkThread3, THREAD_ID_7, func_800040D4, arg0, gUnkThread3Stack + sizeof(gUnkThread3Stack), 60); + osStartThread(&gUnkThread3); + osCreateThread(&gUnkThread4, THREAD_ID_8, func_80003FEC, arg0, gUnkThread4Stack + sizeof(gUnkThread4Stack), 20); + osStartThread(&gUnkThread4); + + func_80004560(); + + while (true) { + osRecvMesg(&D_800E2148, (OSMesg) &sp54, 1); + switch ((u8) sp54) { + case 3: + osSendMesg(&D_800E2238, (OSMesg) 3, 0); + osSendMesg(&D_800E2278, (OSMesg) 3, 0); + func_80004824(); + break; + case 1: + func_80004798(); + break; + case 2: + func_80004714(); + break; + case 4: + D_80137E80 = 1; + break; + } + if (D_80137E81 == 0) { + func_800049D4(); + } + } +} + +void Idle_ThreadEntry(void* arg0) { + osCreateViManager(OS_PRIORITY_VIMGR); func_80003EE0(); func_800034E8(1); - osCreatePiMgr(150, &D_800E2010, &D_800E2028, 50); - osCreateThread(&D_8013A040, 3, &func_80004ABC, arg0, &D_8013B1F0, 100); - osStartThread(&D_8013A040); + osCreatePiMgr(OS_PRIORITY_PIMGR, &gPiMgrCmdQueue, sPiMgrCmdBuff, ARRAY_COUNT(sPiMgrCmdBuff)); + osCreateThread(&gMainThread, THREAD_ID_MAIN, &Main_ThreadEntry, arg0, sMainThreadStack + sizeof(sMainThreadStack), + 100); + osStartThread(&gMainThread); func_80008018(); - osSetThreadPri(0, 0); + osSetThreadPri(NULL, OS_PRIORITY_IDLE); loop_1: goto loop_1; } void bootproc(void) { - func_8001EF10(); + RdRam_CheckIPL3(); osInitialize(); func_80003A50(); - osCreateThread(&D_80138E90, 1, &func_80004D00, 0, &D_8013A040, 255); - osStartThread(&D_80138E90); + osCreateThread(&sIdleThread, THREAD_ID_IDLE, &Idle_ThreadEntry, NULL, sIdleThreadStack + sizeof(sIdleThreadStack), + 255); + osStartThread(&sIdleThread); } diff --git a/src/main/5A20.c b/src/main/5A20.c index 42ad98c9..1a9c49c4 100644 --- a/src/main/5A20.c +++ b/src/main/5A20.c @@ -124,7 +124,7 @@ f32 Math_FactorialF(f32 n) { return out; } -extern f32 D_800C45E0[]; +f32 D_800C45E0[] = { 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600 }; f32 Math_Factorial(s32 n) { f32 out; diff --git a/src/main/6280.c b/src/main/6280.c index 2438213c..3a0f264b 100644 --- a/src/main/6280.c +++ b/src/main/6280.c @@ -1,7 +1,60 @@ #include "global.h" -// https://decomp.me/scratch/8H8k4 100% -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80005680.s") +Mtx gIdentityMtx = { { + { 0x00010000, 0, 1, 0 }, + { 0, 0x00010000, 0, 1 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, +} }; + +Matrix gIdentityMatrix = { { + { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, +} }; + +Vec3f D_800C46A0 = { 0.0f, 0.0f, 0.0f }; +Vec3f D_800C46AC = { 0.0f, 0.0f, 1.0f }; +Vec3f D_800C46B8 = { 1.0f, 0.0f, 0.0f }; +Vec3f D_800C46C4 = { 0.0f, 0.0f, 0.0f }; +Vec3f D_800C46D0 = { 1.0f, 0.0f, 0.0f }; +Vec3f D_800C46DC = { 0.0f, 1.0f, 0.0f }; + +void func_80005680(Matrix* dst, Matrix* src) { + dst->m[0][0] = src->m[0][0]; + dst->m[0][1] = src->m[0][1]; + dst->m[0][2] = src->m[0][2]; + dst->m[0][3] = src->m[0][3]; + dst->m[1][0] = src->m[1][0]; + dst->m[1][1] = src->m[1][1]; + dst->m[1][2] = src->m[1][2]; + dst->m[1][3] = src->m[1][3]; + dst->m[2][0] = src->m[2][0]; + dst->m[2][1] = src->m[2][1]; + dst->m[2][2] = src->m[2][2]; + dst->m[2][3] = src->m[2][3]; + dst->m[3][0] = src->m[3][0]; + dst->m[3][1] = src->m[3][1]; + dst->m[3][2] = src->m[3][2]; + dst->m[3][3] = src->m[3][3]; + // dst->xx = src->xx; + // dst->yx = src->yx; + // dst->zx = src->zx; + // dst->wx = src->wx; + // dst->xy = src->xy; + // dst->yy = src->yy; + // dst->zy = src->zy; + // dst->wy = src->wy; + // dst->xz = src->xz; + // dst->yz = src->yz; + // dst->zz = src->zz; + // dst->wz = src->wz; + // dst->xw = src->xw; + // dst->yw = src->yw; + // dst->zw = src->zw; + // dst->ww = src->ww; +} void func_80005708(Matrix** mtx) { func_80005680(*mtx + 1, *mtx); diff --git a/src/main/7B20.c b/src/main/7B20.c index c42a0bf7..2ed4f717 100644 --- a/src/main/7B20.c +++ b/src/main/7B20.c @@ -1,15 +1,18 @@ -#include "common.h" +#include "global.h" + +typedef void (*unkFunc_80007088)(s32, s32); typedef struct { - s8 unk0; - char pad_0[0x27]; - void* unk28; + u8 unk0; + OSTimer unk8; + unkFunc_80007088 unk28; s32 unk2C; s32 unk30; } UnkStruct_func_80007088; extern s32 D_8013C3D0; extern s32 D_80144BD0; +extern UnkStruct_func_80007088 D_80144BE0[]; void func_80006F20(void) { D_80144BD0 = (s32) &D_8013C3D0; @@ -22,10 +25,30 @@ s32 func_80006F38(s32 arg0) { return tmp; } -// https://decomp.me/scratch/uf9Ap 98.50% -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7B20/func_80006F60.s") +UnkStruct_func_80007088* func_80006F60(void) { + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7B20/func_80006FD8.s") + for (i = 0; i < 0x10; i++) { + if (D_80144BE0[i].unk0 == 0) { + return &D_80144BE0[i]; + } + } + return NULL; +} + +s32 func_80006FD8(u64 arg0, void* arg2, s32 arg3, s32 arg4) { + UnkStruct_func_80007088* temp_v0; + + temp_v0 = func_80006F60(); + if (temp_v0 == NULL) { + return -1; + } + temp_v0->unk0 = 1; + temp_v0->unk28 = arg2; + temp_v0->unk2C = arg3; + temp_v0->unk30 = arg4; + return osSetTimer(&temp_v0->unk8, arg0, 0, &D_800E2338, temp_v0); +} void func_80007068(s32* arg0, s32 arg1) { *arg0 += arg1; @@ -36,13 +59,16 @@ void func_8000707C(s32* arg0, s32 arg1) { } void func_80007088(UnkStruct_func_80007088* arg0) { - void (*temp_v0)(s32, s32); - - temp_v0 = arg0->unk28; - if (temp_v0 != NULL) { - temp_v0(arg0->unk2C, arg0->unk30); + if (arg0->unk28 != NULL) { + arg0->unk28(arg0->unk2C, arg0->unk30); } arg0->unk0 = 0; } -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7B20/func_800070C8.s") +void func_800070C8(u64 arg0) { + OSTimer sp30; + void* sp2C; + + osSetTimer(&sp30, arg0, 0, &D_800E2390, NULL); + osRecvMesg(&D_800E2390, &sp2C, 1); +} diff --git a/src/main/7D30.c b/src/main/7D30.c index d95366dc..2b133af2 100644 --- a/src/main/7D30.c +++ b/src/main/7D30.c @@ -4,30 +4,64 @@ s32 func_80007130(s32 arg0, u8* arg1) { if (osEepromRead(&D_800E2128, arg0, arg1)) { - return -1; - } else { - return 0; - } -} - -s32 func_8000716C(s32 arg0, u8* arg1) { - s64 temp_ret; - s64 temp_ret_2; - s64 temp_ret_3; - - if (osEepromWrite(&D_800E2128, arg0, arg1)) { + (void) "EEPROM インターフェース回路反応なし (READ)\n"; return -1; } - temp_ret = __ull_div(osClockRate, 15625); - temp_ret_2 = __ll_mul(15000, temp_ret); - temp_ret_3 = __ull_div(temp_ret_2, 64); - func_800070C8(temp_ret_3); - + (void) "EEPROM READ %02X: %02X %02X %02X %02X %02X %02X %02X %02X\n"; return 0; } +s32 func_8000716C(s32 arg0, u8* arg1) { + if (osEepromWrite(&D_800E2128, arg0, arg1)) { + (void) "EEPROM インターフェース回路反応なし (WRITE)\n"; + return -1; + } + func_800070C8(MSEC_TO_CYCLES(15)); + (void) "EEPROM WRITE %02X: %02X %02X %02X %02X %02X %02X %02X %02X\n"; + return 0; +} + +#ifdef NON_MATCHING +s32 func_800071FC(UnkStruct_7D30* arg0) { + s32 var_a2; + s32 i; + s32 j; + + if (osEepromProbe(&D_800E2128) != 1) { + return -1; + } + for (i = 0; i < 0x40; i++) { + var_a2 = 0; + for (j = 0; j < 8; j++) { + if (arg0->data[i][j] != D_80145160.data[i][j]) { + arg0->data[i][j] = D_80145160.data[i][j]; + var_a2 = 1; + } + } + if ((var_a2 == 1) && func_8000716C(i, arg0->data[i])) { + return -1; + } + } + return 0; +} +#else +s32 func_800071FC(UnkStruct_7D30* arg0); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/7D30/func_800071FC.s") +#endif -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7D30/func_800072E0.s") +s32 func_800072E0(UnkStruct_7D30* arg0) { + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7D30/D_800C8120.s") + if (osEepromProbe(&D_800E2128) != 1) { + (void) "EEPROM が ありません\n"; // actually goes in above function + (void) "EEPROM が ありません\n"; + return -1; + } + for (i = 0; i < 0x40; i++) { + if (func_80007130(i, arg0->data[i]) != 0) { + return -1; + } + } + D_80145160 = *arg0; + return 0; +} diff --git a/src/main/7FC0.c b/src/main/7FC0.c index 655dcda1..5dff5909 100644 --- a/src/main/7FC0.c +++ b/src/main/7FC0.c @@ -1,28 +1,85 @@ #include "global.h" -typedef struct { - OSThread thread; - char unk_1B0[0x800]; - OSMesgQueue msgQueue; - OSMesg msg; - s32 unk9CC; // probably FaultDrawer - s16 unk9D0; - s16 unk9D2; -} UnkStruct_D_80145360; +void func_800073C0(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { + u16* var_v0; + s32 i; + s32 j; -extern UnkStruct_D_80145360 D_80145360; -extern s32 D_80145D10; -extern s32 D_80145D28; + var_v0 = gFaultMgr.width * arg1 + gFaultMgr.fb->data + arg0; + for (i = 0; i < arg3; i++) { + for (j = 0; j < arg2; j++, var_v0++) { + *var_v0 = ((*var_v0 & 0xE738) >> 2) | 1; + } + var_v0 += gFaultMgr.width - arg2; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_800073C0.s") +void func_800074AC(s32 arg0, s32 arg1, s32 arg2) { + s32* var_v0; + u16* var_v1; + s32 i; + s32 j; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_800074AC.s") + var_v0 = &sFaultCharPixelFlags[(arg2 / 5) * 7]; + var_v1 = gFaultMgr.width * arg1 + gFaultMgr.fb->data + arg0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_80007604.s") + for (i = 0; i < 7; i++) { + u32 temp_t1 = 0x80000000 >> ((arg2 % 5) * 6); + u32 temp_a3 = *var_v0++; + for (j = 0; j < 6; j++) { + if (temp_t1 & temp_a3) { + *var_v1 = -1; + } else { + *var_v1 = 1; + } + var_v1++; + temp_t1 >>= 1; + } + var_v1 += gFaultMgr.width - 6; + } +} + +void* func_80007604(void* arg0, const char* arg1, size_t arg2) { + return (char*) memcpy(arg0, arg1, arg2) + arg2; +} + +#ifdef NON_MATCHING +void func_8000762C(s32 arg0, s32 arg1, const char* fmt, ...) { + u8* var_s0; + s32 i; + u8 sp40[0x100]; + u32 temp_a2; + va_list args; + va_start(args, fmt); + + for (i = 0; i < 0x100; i++) { + sp40[i] = 0; + } + + if (_Printf(func_80007604, sp40, fmt, args) > 0) { + for (var_s0 = sp40; *var_s0 != 0; arg0 += 6, var_s0++) { + temp_a2 = sFaultCharIndex[*var_s0 & 0x7F]; + if (temp_a2 != 0xFF) { + func_800074AC(arg0, arg1, temp_a2); + } + } + } + va_end(args); +} +#else +void func_8000762C(s32 arg0, s32 arg1, const char* fmt, ...); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_8000762C.s") +#endif -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_8000770C.s") +void func_8000770C(s32 arg0) { + u64 temp_ret_4 = MSEC_TO_CYCLES(arg0); + + osSetTime(0); + while (osGetTime() < temp_ret_4) { + ; + } +} #pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/D_800C8240.s") @@ -72,32 +129,205 @@ extern s32 D_80145D28; #pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/D_800C8430.s") -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_800077F8.s") +void func_800077F8(s32 arg0, s32 arg1, s32 arg2, f32* arg3) { + u32 temp_v0 = *(u32*) arg3; + s32 temp_v1 = ((temp_v0 & 0x7F800000) >> 0x17) - 0x7F; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_80007880.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_80007910.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_80007CEC.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_80007D58.s") - -// Matches with IDO 5.3, maybe this is the right compiler for the game? -#ifdef NON_MATCHING -void func_80007FE4(s32 arg0, u16 arg1, u16 arg2) { - D_80145360.unk9CC = arg0; - D_80145360.unk9D0 = arg1; - D_80145360.unk9D2 = arg2; + if (((-0x7F < temp_v1) && (temp_v1 < 0x80)) || (temp_v0 == 0)) { + func_8000762C(arg0, arg1, "F%02d:%.3e", arg2, *arg3); + } else { + func_8000762C(arg0, arg1, "F%02d:---------", arg2); + } +} + +void func_80007880(u32 arg0) { + s32 var_v0; + u32 var_v1 = 0x20000; + + func_8000762C(0x1E, 0xA0, "FPCSR:%08XH", arg0); + for (var_v0 = 0; var_v0 < 6; var_v0++, var_v1 >>= 1) { + if (arg0 & var_v1) { + func_8000762C(0x84, 0xA0, "(%s)", D_800C48B8[var_v0]); + return; + } + } +} + +void func_80007910(OSThread* thread) { + __OSThreadContext* context = &thread->context; + s16 var_s0 = (thread->context.cause >> 2) & 0x1F; + + if (var_s0 == 0x17) { + var_s0 = 0x10; + } + if (var_s0 == 0x1F) { + var_s0 = 0x11; + } + func_8000770C(0xBB8); + func_800073C0(0xF, 0xF, 0x122, 0xD2); + func_8000762C(0x1E, 0x28, "THREAD:%d (%s)", thread->id, D_800C4870[var_s0]); + func_8000762C(0x1E, 0x32, "PC:%08XH SR:%08XH\tVA:%08XH", context->pc, context->sr, context->badvaddr); + osWritebackDCacheAll(); + func_8000762C(0x1E, 0x3C, "AT:%08XH V0:%08XH\tV1:%08XH", (s32) context->at, (s32) context->v0, (s32) context->v1); + func_8000762C(0x1E, 0x46, "A0:%08XH A1:%08XH\tA2:%08XH", (s32) context->a0, (s32) context->a1, (s32) context->a2); + func_8000762C(0x1E, 0x50, "A3:%08XH T0:%08XH\tT1:%08XH", (s32) context->a3, (s32) context->t0, (s32) context->t1); + func_8000762C(0x1E, 0x5A, "T2:%08XH T3:%08XH\tT4:%08XH", (s32) context->t2, (s32) context->t3, (s32) context->t4); + func_8000762C(0x1E, 0x64, "T5:%08XH T6:%08XH\tT7:%08XH", (s32) context->t5, (s32) context->t6, (s32) context->t7); + func_8000762C(0x1E, 0x6E, "S0:%08XH S1:%08XH\tS2:%08XH", (s32) context->s0, (s32) context->s1, (s32) context->s2); + func_8000762C(0x1E, 0x78, "S3:%08XH S4:%08XH\tS5:%08XH", (s32) context->s3, (s32) context->s4, (s32) context->s5); + func_8000762C(0x1E, 0x82, "S6:%08XH S7:%08XH\tT8:%08XH", (s32) context->s6, (s32) context->s7, (s32) context->t8); + func_8000762C(0x1E, 0x8C, "T9:%08XH GP:%08XH\tSP:%08XH", (s32) context->t9, (s32) context->gp, (s32) context->sp); + func_8000762C(0x1E, 0x96, "S8:%08XH RA:%08XH", (s32) context->s8, (s32) context->ra); + func_80007880(context->fpcsr); + osWritebackDCacheAll(); + func_800077F8(0x1E, 0xAA, 0, &context->fp0.f.f_even); + func_800077F8(0x78, 0xAA, 2, &context->fp2.f.f_even); + func_800077F8(0xD2, 0xAA, 4, &context->fp4.f.f_even); + func_800077F8(0x1E, 0xB4, 6, &context->fp6.f.f_even); + func_800077F8(0x78, 0xB4, 8, &context->fp8.f.f_even); + func_800077F8(0xD2, 0xB4, 0xA, &context->fp10.f.f_even); + func_800077F8(0x1E, 0xBE, 0xC, &context->fp12.f.f_even); + func_800077F8(0x78, 0xBE, 0xE, &context->fp14.f.f_even); + func_800077F8(0xD2, 0xBE, 0x10, &context->fp16.f.f_even); + func_800077F8(0x1E, 0xC8, 0x12, &context->fp18.f.f_even); + func_800077F8(0x78, 0xC8, 0x14, &context->fp20.f.f_even); + func_800077F8(0xD2, 0xC8, 0x16, &context->fp22.f.f_even); + func_800077F8(0x1E, 0xD2, 0x18, &context->fp24.f.f_even); + func_800077F8(0x78, 0xD2, 0x1A, &context->fp26.f.f_even); + func_800077F8(0xD2, 0xD2, 0x1C, &context->fp28.f.f_even); + func_800077F8(0x1E, 0xDC, 0x1E, &context->fp30.f.f_even); + osWritebackDCacheAll(); + osViBlack(0); + osViRepeatLine(0); + osViSwapBuffer(gFaultMgr.fb); +} + +OSThread* func_80007CEC(void) { + OSThread* var_v1; + + var_v1 = __osGetActiveQueue(); + + while (var_v1->priority != -1) { + if ((var_v1->priority > 0) && (var_v1->priority < 0x7F) && (var_v1->flags & 3)) { + return var_v1; + } + var_v1 = var_v1->tlnext; + } + return NULL; +} + +void Fault_ThreadEntry(void* arg0) { + void* sp44; + OSThread* sp40; + s32 var_s2; + s32 var_s5; + u32 var_s0; + + sp44 = NULL; + var_s5 = 0; + var_s0 = 0; + var_s2 = 0; + + osSetEventMesg(OS_EVENT_CPU_BREAK, &gFaultMgr.msgQueue, (OSMesg) 1); + osSetEventMesg(OS_EVENT_FAULT, &gFaultMgr.msgQueue, (OSMesg) 2); + + sp40 = NULL; + while (sp40 == NULL) { + osRecvMesg(&gFaultMgr.msgQueue, &sp44, 1); + sp40 = func_80007CEC(); + } + + func_8000762C(300, 10, "-"); + D_800DD8B0[0] = 1; + while (var_s5 == 0) { + osSendMesg(&D_800E22C0, (OSMesg) 10, 0); + osRecvMesg(&D_800E22F8, NULL, 1); + func_800029A8(); + switch (var_s0) { + case 0: + if (D_800DD880[0].button == 0x16) { + var_s0++; + var_s2 = 0xFA0; + } + break; + case 1: + case 2: + case 7: + if (D_800DD880[0].button & 0x10) { + if (D_800DD898[0].button == 0x8000) { + var_s0++; + var_s2 = 0xBB8; + } else if (D_800DD898[0].button != 0) { + var_s0 = 0; + } + } + break; + case 3: + case 4: + case 8: + if (D_800DD880[0].button & 0x10) { + if (D_800DD898[0].button == 0x4000) { + var_s0++; + var_s2 = 0xBB8; + } else if (D_800DD898[0].button != 0) { + var_s0 = 0; + } + } + break; + case 5: + case 6: + case 9: + case 10: + case 11: + case 12: + case 13: + if (D_800DD880[0].button & 0x10) { + if (D_800DD898[0].button == 2) { + var_s0++; + var_s2 = 0xBB8; + } else if (D_800DD898[0].button != 0) { + var_s0 = 0; + } + } + break; + case 14: + if (D_800DD880[0].button & 0x10) { + if (D_800DD898[0].button == 0x1000) { + var_s0++; + var_s2 = 0xBB8; + } else if (D_800DD898[0].button != 0) { + var_s0 = 0; + } + } + break; + case 15: + var_s5 = 1; + break; + } + if (var_s2 != 0) { + var_s2 -= 1; + } else { + var_s0 = 0; + } + } + func_80007910(sp40); + while (1) { + ; + } +} + +void func_80007FE4(FrameBuffer* arg0, u16 arg1, u16 arg2) { + gFaultMgr.fb = arg0; + gFaultMgr.width = arg1; + gFaultMgr.height = arg2; } -#else -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/7FC0/func_80007FE4.s") -#endif void func_80008018(void) { - D_80145360.unk9CC = (PHYS_TO_K0(osMemSize) - sizeof(u16[SCREEN_HEIGHT][SCREEN_WIDTH])); - D_80145360.unk9D0 = SCREEN_WIDTH; - D_80145360.unk9D2 = SCREEN_HEIGHT; - osCreateMesgQueue(&D_80145360.msgQueue, &D_80145360.msg, 1); - osCreateThread(&D_80145360.thread, 2, func_80007D58, 0, &D_80145360.msgQueue, 0x7F); - osStartThread(&D_80145360.thread); + gFaultMgr.fb = (FrameBuffer*) (PHYS_TO_K0(osMemSize) - sizeof(FrameBuffer)); + gFaultMgr.width = SCREEN_WIDTH; + gFaultMgr.height = SCREEN_HEIGHT; + osCreateMesgQueue(&gFaultMgr.msgQueue, &gFaultMgr.msg, 1); + osCreateThread(&gFaultMgr.thread, THREAD_ID_FAULT, Fault_ThreadEntry, 0, gFaultMgr.stack + sizeof(gFaultMgr.stack), + 0x7F); + osStartThread(&gFaultMgr.thread); } diff --git a/src/main/sf_B99D0.c b/src/main/sf_B99D0.c index 5b0364a5..03da6046 100644 --- a/src/main/sf_B99D0.c +++ b/src/main/sf_B99D0.c @@ -7,7 +7,7 @@ extern Gfx D_800D31B0[]; #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_B99D0/func_800B8E14.s") void func_800B8F18(void) { - gSPDisplayList(D_80137E64++, D_800D31B0); + gSPDisplayList(gMasterDisp++, D_800D31B0); } #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_B99D0/func_800B8F48.s") diff --git a/src/main/sf_C3430.c b/src/main/sf_C3430.c index 655556a2..c8c629bf 100644 --- a/src/main/sf_C3430.c +++ b/src/main/sf_C3430.c @@ -15,9 +15,3 @@ #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C2D3C.s") #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C2F30.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C2FB0.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C3084.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C3194.s") diff --git a/src/main/sf_C3BB0.c b/src/main/sf_C3BB0.c new file mode 100644 index 00000000..ee235593 --- /dev/null +++ b/src/main/sf_C3BB0.c @@ -0,0 +1,9 @@ +#include "common.h" + +#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3BB0/func_800C2FB0.s") + +#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3BB0/func_800C3084.s") + +#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3BB0/func_800C3194.s") + +#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3BB0/D_800D9430.s") diff --git a/src/main/sf_hud.c b/src/main/sf_hud.c index 9b058b96..eb0f673a 100644 --- a/src/main/sf_hud.c +++ b/src/main/sf_hud.c @@ -7,66 +7,66 @@ #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80084E78.s") void func_800853A4(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - func_8009D0BC(&D_80137E64, &D_1013170, &D_1013570, 24, 17, arg0, arg1, arg2, arg3); + func_8009D0BC(&gMasterDisp, &D_1013170, &D_1013570, 24, 17, arg0, arg1, arg2, arg3); } void func_80085404(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - func_8009C320(&D_80137E64, &D_1011280, &D_10116A0, 48, 44, arg0, arg1, arg2, arg3); + func_8009C320(&gMasterDisp, &D_1011280, &D_10116A0, 48, 44, arg0, arg1, arg2, arg3); } void func_80085464(f32 arg0, f32 arg1) { - func_8009C320(&D_80137E64, &D_1011AC0, &D_1011B90, 16, 26, arg0, arg1, 1.0f, 1.0f); + func_8009C320(&gMasterDisp, &D_1011AC0, &D_1011B90, 16, 26, arg0, arg1, 1.0f, 1.0f); } void func_800854BC(f32 arg0, f32 arg1) { - func_8009C320(&D_80137E64, &D_1011BB0, &D_1011C80, 16, 26, arg0, arg1, 1.0f, 1.0f); + func_8009C320(&gMasterDisp, &D_1011BB0, &D_1011C80, 16, 26, arg0, arg1, 1.0f, 1.0f); } void func_80085514(f32 arg0, f32 arg1) { - func_8009C320(&D_80137E64, &D_1011CA0, &D_1011D70, 16, 26, arg0, arg1, 1.0f, 1.0f); + func_8009C320(&gMasterDisp, &D_1011CA0, &D_1011D70, 16, 26, arg0, arg1, 1.0f, 1.0f); } void func_8008556C(f32 arg0, f32 arg1) { - func_8009C320(&D_80137E64, &D_1011D90, &D_1011E60, 16, 26, arg0, arg1, 1.0f, 1.0f); + func_8009C320(&gMasterDisp, &D_1011D90, &D_1011E60, 16, 26, arg0, arg1, 1.0f, 1.0f); } void func_800855C4(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - func_8009E1E8(&D_80137E64, &D_1002280, 8, 12, arg0, arg1, arg2, arg3); + func_8009E1E8(&gMasterDisp, &D_1002280, 8, 12, arg0, arg1, arg2, arg3); } void func_80085618(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - func_8009D994(&D_80137E64, &D_1002280, 8, 12, arg0, arg1, arg2, arg3); + func_8009D994(&gMasterDisp, &D_1002280, 8, 12, arg0, arg1, arg2, arg3); } void func_8008566C(f32 x, f32 y, f32 arg2, f32 arg3) { - func_8009D994(&D_80137E64, &D_10030D0, 8, 12, x, y, arg2, arg3); + func_8009D994(&gMasterDisp, &D_10030D0, 8, 12, x, y, arg2, arg3); } void func_800856C0(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { - func_80084E78(&D_80137E64, &D_1013580, &D_1013700, 48, 12, arg0, arg1, arg2, arg3, 48.0f * arg4, 8.0f); + func_80084E78(&gMasterDisp, &D_1013580, &D_1013700, 48, 12, arg0, arg1, arg2, arg3, 48.0f * arg4, 8.0f); } void func_80085740(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { if (D_801778E8 != 0) { - func_8009D994(&D_80137E64, &D_3000B20, 32, 5, arg0, arg1, arg2, arg3); + func_8009D994(&gMasterDisp, &D_3000B20, 32, 5, arg0, arg1, arg2, arg3); } else { - func_8009D994(&D_80137E64, &D_1000E80, 48, 9, arg0, arg1, arg2, arg3); + func_8009D994(&gMasterDisp, &D_1000E80, 48, 9, arg0, arg1, arg2, arg3); } } void func_800857DC(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { if (D_801778E8 != 0) { - func_8009D0BC(&D_80137E64, D_300D3C0, D_300D408, 24, 3, arg0, arg1, arg2, arg3); + func_8009D0BC(&gMasterDisp, D_300D3C0, D_300D408, 24, 3, arg0, arg1, arg2, arg3); } else { - func_8009D0BC(&D_80137E64, D_10128C0, D_1012988, 40, 5, arg0, arg1, arg2, arg3); + func_8009D0BC(&gMasterDisp, D_10128C0, D_1012988, 40, 5, arg0, arg1, arg2, arg3); } } void func_80085890(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { if (D_801778E8 != 0) { - func_8009D0BC(&D_80137E64, &D_300D350, &D_300D398, 24, 3, arg0, arg1, arg2, arg3); + func_8009D0BC(&gMasterDisp, &D_300D350, &D_300D398, 24, 3, arg0, arg1, arg2, arg3); } else { - func_8009D0BC(&D_80137E64, &D_10127D0, &D_1012898, 40, 5, arg0, arg1, arg2, arg3); + func_8009D0BC(&gMasterDisp, &D_10127D0, &D_1012898, 40, 5, arg0, arg1, arg2, arg3); } } @@ -76,16 +76,16 @@ void func_80086110(f32 arg0, f32 arg1, s32 arg2) { f32 temp = 0.82f; s32 pad; - func_800B8DD0(&D_80137E64, 0x4B); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800B8DD0(&gMasterDisp, 0x4B); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); if (arg2 != 0) { func_800856C0((8.0f * temp) + arg0, arg1 + 2.0f, temp, 1.0f, arg2 / 255.0f); } if ((arg2 <= 0) && (arg2 != -2) && ((D_80177854 == 100) || (D_80177830 == 1) || (D_80177838 != 0))) { - func_800B8DD0(&D_80137E64, 0x4C); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 0, 255); + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); if ((arg2 == 0) && (D_80178280->unk_1C8 == 7)) { func_800A1200(arg0 + (8.0f * temp) + 4.0f, arg1 + 2.0f, 1.0f, 1.0f, " OK "); } else { @@ -93,8 +93,8 @@ void func_80086110(f32 arg0, f32 arg1, s32 arg2) { } } - func_800B8DD0(&D_80137E64, 0x4C); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_80085618(arg0, arg1, temp, 1.0f); func_800855C4(arg0 + (7.0f * temp) + (temp * 6.0f) * 8.0f, arg1, 1.0f, 1.0f); func_8008566C(arg0 + (7.0f * temp), arg1, temp * 6.0f, 1.0f); @@ -167,10 +167,10 @@ s32 func_800863C8(void) { #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_800869A0.s") void func_80086C08(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - func_800B8DD0(&D_80137E64, 0x4E); - gDPSetPrimColor(D_80137E64++, 0, 0, 60, 60, 128, 96); - gDPSetAlphaDither(D_80137E64++, G_AD_DISABLE); - func_8009D0BC(&D_80137E64, D_1013170, D_1013570, 24, 17, arg0, arg1, arg2, arg3); + func_800B8DD0(&gMasterDisp, 0x4E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 60, 60, 128, 96); + gDPSetAlphaDither(gMasterDisp++, G_AD_DISABLE); + func_8009D0BC(&gMasterDisp, D_1013170, D_1013570, 24, 17, arg0, arg1, arg2, arg3); } void func_80086CC8(void) { @@ -286,17 +286,17 @@ void func_80088784(s32 arg0) { if (arg0 != 0) { arg0--; - func_800B8DD0(&D_80137E64, 0x24); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, D_800D1DC8[arg0]); + func_800B8DD0(&gMasterDisp, 0x24); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, D_800D1DC8[arg0]); func_80005708(&D_8013B3C0); func_80005B00(D_8013B3C0, 3.9f, -3.3f, -100.0f, 0); func_80005C34(D_8013B3C0, 0.37f, 0.37f, 0.37f, 1); - func_80006EB8(&D_80137E64); + func_80006EB8(&gMasterDisp); if (D_80177C98 == 0) { - gSPDisplayList(D_80137E64++, D_800D1D4C[arg0]); + gSPDisplayList(gMasterDisp++, D_800D1D4C[arg0]); } else { - gSPDisplayList(D_80137E64++, D_800D1D94[arg0]); + gSPDisplayList(gMasterDisp++, D_800D1D94[arg0]); } func_80005740(&D_8013B3C0); @@ -309,43 +309,43 @@ void func_80088784(s32 arg0) { #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80088970.s") void func_80089670(void) { - func_800B8DD0(&D_80137E64, 0x3E); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800B8DD0(&gMasterDisp, 0x3E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_80005C34(D_8013B3C0, 18.64f, 21.04f, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_1024AC0); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_1024AC0); } void func_80089710(void) { - func_800B8DD0(&D_80137E64, 0x3E); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800B8DD0(&gMasterDisp, 0x3E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_80005C34(D_8013B3C0, 11.0f, 11.0f, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_1024AC0); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_1024AC0); } void func_800897B0(void) { - func_800B8DD0(&D_80137E64, 0x3E); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800B8DD0(&gMasterDisp, 0x3E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_80005C34(D_8013B3C0, 130.0f, 130.0f, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_1024830); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_1024830); } void func_80089850(void) { - func_800B8DD0(&D_80137E64, 0x3E); - gDPSetPrimColor(D_80137E64++, 0, 0, 0, 0, 0, 255); + func_800B8DD0(&gMasterDisp, 0x3E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 0, 0, 0, 255); func_80005C34(D_8013B3C0, 125.0f, 125.0f, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_102A8A0); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_102A8A0); } void func_800898F0(void) { - func_800B8DD0(&D_80137E64, 1); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 208, 80, 255); + func_800B8DD0(&gMasterDisp, 1); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 208, 80, 255); func_80005C34(D_8013B3C0, 30.0f, 30.0f, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_6004570); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_6004570); } #ifdef IMPORT_DATA_PENDING @@ -365,37 +365,37 @@ void func_80089994(s32 arg0) { var_fv2 = 54.0f; } - func_800B8DD0(&D_80137E64, 0x3E); - gDPSetPrimColor(D_80137E64++, 0, 0, D_800D1E14[arg0][0], D_800D1E14[arg0][1], D_800D1E14[arg0][2], + func_800B8DD0(&gMasterDisp, 0x3E); + gDPSetPrimColor(gMasterDisp++, 0, 0, D_800D1E14[arg0][0], D_800D1E14[arg0][1], D_800D1E14[arg0][2], D_800D1E14[arg0][3]); func_80005C34(D_8013B3C0, var_fv1, var_fv2, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_1015510); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_1015510); } #else #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089994.s") #endif void func_80089AF4(void) { - func_800B8DD0(&D_80137E64, 0x3E); - gDPSetPrimColor(D_80137E64++, 0, 0, 0, 0, 0, 255); + func_800B8DD0(&gMasterDisp, 0x3E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 0, 0, 0, 255); func_80005C34(D_8013B3C0, 54.0f, 54.0f, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_F014180); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_F014180); } void func_80089B94(void) { - func_800B8DD0(&D_80137E64, 0x3E); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 92, 92, 255); + func_800B8DD0(&gMasterDisp, 0x3E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 92, 92, 255); func_80005C34(D_8013B3C0, 54.0f, 54.0f, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_D0098B0); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_D0098B0); } void func_80089C38(void) { s32 alpha; - func_800B8DD0(&D_80137E64, 0xC); + func_800B8DD0(&gMasterDisp, 0xC); alpha = D_80177DB0 % 21; @@ -404,16 +404,16 @@ void func_80089C38(void) { } alpha *= 255.0f / 10.0f; - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, alpha); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, alpha); func_80005C34(D_8013B3C0, 15.0f, 15.0f, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_1024230); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_1024230); } void func_80089D28(void) { s32 gb; - func_800B8DD0(&D_80137E64, 1); + func_800B8DD0(&gMasterDisp, 1); gb = D_80177DB0 % 21; @@ -430,11 +430,11 @@ void func_80089D28(void) { // clang-format on } - gDPSetPrimColor(D_80137E64++, 0, 0, 255, gb, gb, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, gb, gb, 255); func_80005B00(D_8013B3C0, 0.0f, -185.92001f, 0, 1); func_80005C34(D_8013B3C0, 3.55f, 0.13f, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_1024230); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_1024230); } void func_80089E98(s32 arg0) { @@ -522,8 +522,8 @@ void func_80089E98(s32 arg0) { void func_8008AD94(void) { if (D_80177834 == 7) { - func_800B8DD0(&D_80137E64, 0x4C); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 0, 255); + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); switch ((s32) D_80177D68) { case 0: @@ -613,8 +613,8 @@ void func_8008B1B0(void) { f32 temp = 142.0f; f32 temp2 = 18.0f; - func_800B8DD0(&D_80137E64, 0x4E); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800B8DD0(&gMasterDisp, 0x4E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); switch (D_80161790 / 2) { case 3: @@ -703,11 +703,11 @@ void func_8008B2F0(void) { } void func_8008B5B0(f32 x, f32 y) { - func_800B8DD0(&D_80137E64, 0x4B); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800B8DD0(&gMasterDisp, 0x4B); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_800856C0(x + 8.0f, y + 2.0f, D_801617A8, 1.0f, D_801617AC); - func_800B8DD0(&D_80137E64, 0x4C); - gDPSetPrimColor(D_80137E64++, 0, 0, D_800D1EB4, D_800D1EB8, D_800D1EBC, 0xFF); + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0, 0, D_800D1EB4, D_800D1EB8, D_800D1EBC, 0xFF); func_80085618(x, y, 1.0f, 1.0f); func_800855C4(x + 7.0f + (D_801617A8 * 6.0f * 8.0f), y, 1.0f, 1.0f); func_8008566C(x + 7.0f, y, D_801617A8 * 6.0f, 1.0f); @@ -769,13 +769,13 @@ void func_8008BAE4(void) { } if ((D_80161788 != 0) || (D_8016178C != 0)) { - func_800B8DD0(&D_80137E64, 0xC); - gDPSetPrimColor(D_80137E64++, 0, 0, r, g, b, alpha); + func_800B8DD0(&gMasterDisp, 0xC); + gDPSetPrimColor(gMasterDisp++, 0, 0, r, g, b, alpha); func_80005708(&D_8013B3C0); func_80005B00(D_8013B3C0, -53.9f, -38.5f, -139.4f, 1); func_80005C34(D_8013B3C0, 1.0f, 1.0f, 1.0f, 1); - func_80006EB8(&D_80137E64); - gSPDisplayList(D_80137E64++, D_800D1A40); + func_80006EB8(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_800D1A40); func_80005740(&D_8013B3C0); } } @@ -818,14 +818,14 @@ void func_8008C390(f32 arg0, f32 arg1, f32 arg2, s32 arg3) { for (i = 10; i != 1; i /= 10) { if ((arg0 > 0.0f) && (arg1 > 0.0f)) { - func_8009D994(&D_80137E64, D_800D1EC0[arg3 / i], 16, 8, arg0, arg1, arg2, arg2); + func_8009D994(&gMasterDisp, D_800D1EC0[arg3 / i], 16, 8, arg0, arg1, arg2, arg2); } arg0 += 9.0f * arg2; arg3 %= i; } if ((arg0 > 0.0f) && (arg1 > 0.0f)) { - func_8009D994(&D_80137E64, D_800D1EC0[arg3 / i], 16, 8, arg0, arg1, arg2, arg2); + func_8009D994(&gMasterDisp, D_800D1EC0[arg3 / i], 16, 8, arg0, arg1, arg2, arg2); } } #else @@ -843,9 +843,9 @@ void func_8008C5C8(f32 arg0, f32 arg1, f32 arg2, s32 arg3) { s32 i; for (i = 0; i < 2; i++) { - func_8009D418(&D_80137E64, D_800D1EE8[arg3] + (880 * i), 44, 20, arg0, (20 * i * arg2) + arg1, arg2, arg2); + func_8009D418(&gMasterDisp, D_800D1EE8[arg3] + (880 * i), 44, 20, arg0, (20 * i * arg2) + arg1, arg2, arg2); } - func_8009D418(&D_80137E64, D_800D1EE8[arg3] + 1760, 44, 4, arg0, (40.0f * arg2) + arg1, arg2, arg2); + func_8009D418(&gMasterDisp, D_800D1EE8[arg3] + 1760, 44, 4, arg0, (40.0f * arg2) + arg1, arg2, arg2); } #else #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008C5C8.s") @@ -890,7 +890,7 @@ s32 func_8008CB8C(void) { } void func_8008CB98(f32 arg0, f32 arg1, f32 arg2) { - func_8009D994(&D_80137E64, &D_30013E0, 8, 8, arg0, arg1, arg2, arg2); + func_8009D994(&gMasterDisp, &D_30013E0, 8, 8, arg0, arg1, arg2, arg2); } #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008CBE4.s") @@ -899,19 +899,19 @@ void func_8008CFB8(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { s32 i; for (i = 0; i < 3; i++) { - func_8009D994(&D_80137E64, D_3000BC0 + ((640 * i) / 2), 80, 8, arg0, (8 * i * arg3) + arg1, arg2, arg3); + func_8009D994(&gMasterDisp, D_3000BC0 + ((640 * i) / 2), 80, 8, arg0, (8 * i * arg3) + arg1, arg2, arg3); } - func_8009D994(&D_80137E64, D_3000BC0 + ((640 * i) / 2), 80, 2, arg0, (8 * i * arg3) + arg1, arg2, arg3); + func_8009D994(&gMasterDisp, D_3000BC0 + ((640 * i) / 2), 80, 2, arg0, (8 * i * arg3) + arg1, arg2, arg3); } void func_8008D0DC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { u32 var_t8 = 48.0f * arg4; - func_80084E78(&D_80137E64, D_300D440, D_300D500, 48, 4, arg0, arg1, arg2, arg3, var_t8, 4); + func_80084E78(&gMasterDisp, D_300D440, D_300D500, 48, 4, arg0, arg1, arg2, arg3, var_t8, 4); } void func_8008D1F0(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - func_8009C320(&D_80137E64, &D_10116B0, &D_1011730, 16, 16, arg0, arg1, arg2, arg3); + func_8009C320(&gMasterDisp, &D_10116B0, &D_1011730, 16, 16, arg0, arg1, arg2, arg3); } #ifdef IMPORT_DATA_PENDING @@ -919,8 +919,8 @@ void func_8008D250(void) { f32 D_800D20C8[] = { 113.0f, 273.0f, 113.0f, 273.0f }; f32 D_800D20D8[] = { 79.0f, 79.0f, 199.0f, 199.0f }; - func_800B8DD0(&D_80137E64, 0x4C); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_8008C5C8(D_800D20C8[D_801778A0], D_800D20D8[D_801778A0], 0.54f, D_801778A0); } #else @@ -933,13 +933,13 @@ void func_8008D31C(void) { f32 D_800D20F8[] = { 78.0f, 78.0f, 198.0f, 198.0f }; func_8009BC2C(&D_800D19E0[D_801778A0], D_80178280[D_801778A0].unk_264 * (1.0f / 255.0f), 0.3f, 10.0f, 0.01f); - func_800B8DD0(&D_80137E64, 0x4E); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800B8DD0(&gMasterDisp, 0x4E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_8008D0DC(D_800D20E8[D_801778A0] + 3.0f, D_800D20F8[D_801778A0] + 18.0f, 1.0f, 1.0f, D_800D19E0[D_801778A0]); - func_800B8DD0(&D_80137E64, 0x4C); + func_800B8DD0(&gMasterDisp, 0x4C); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_8008CFB8(D_800D20E8[D_801778A0], D_800D20F8[D_801778A0], 1.0f, 1.0f); } @@ -991,9 +991,9 @@ void func_8008D4F0(f32 arg0, f32 arg1) { temp_t9 = D_800D19AC[var_v1]; - func_800B8DD0(&D_80137E64, 0x4E); + func_800B8DD0(&gMasterDisp, 0x4E); - gDPSetPrimColor(D_80137E64++, 0, 0, temp_t9, temp_t9, temp_t9, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, temp_t9, temp_t9, temp_t9, 255); if (temp_fv0 > 0.01f) { func_80085890(D_800D2108[var_v1] + temp + temp2, D_800D211C[var_v1] + sp60, temp_fv0, 1.0f); @@ -1001,8 +1001,8 @@ void func_8008D4F0(f32 arg0, f32 arg1) { if (temp_fs0 > 0.01f) { func_800857DC(D_800D2108[var_v1] + temp + 1.0f, D_800D211C[var_v1] + sp60, temp_fs0, 1.0f); } - func_800B8DD0(&D_80137E64, 0x4C); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_80085740(D_800D2108[var_v1], D_800D211C[var_v1], 1.0f, 1.0f); } #else @@ -1017,8 +1017,8 @@ void func_8008D7F4(void) { s32 D_800D2160[] = { 242, 30, 179, 30 }; s32 D_800D2170[] = { 12, 0, 67, 255 }; - func_800B8DD0(&D_80137E64, 0x4E); - gDPSetPrimColor(D_80137E64++, 0, 0, D_800D2150[D_801778A0], D_800D2160[D_801778A0], D_800D2170[D_801778A0], 255); + func_800B8DD0(&gMasterDisp, 0x4E); + gDPSetPrimColor(gMasterDisp++, 0, 0, D_800D2150[D_801778A0], D_800D2160[D_801778A0], D_800D2170[D_801778A0], 255); func_8009FC0C(D_800D2130[D_801778A0], D_800D2140[D_801778A0], D_801778A0 + 1); } #else @@ -1056,7 +1056,7 @@ void func_8008D984(void) { } else { D_800D21A4 = 255.0f; } - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, D_800D21A4); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, D_800D21A4); func_8008D1F0(D_800D21A8[D_801778A0], D_800D21B8[D_801778A0], 1.0f, 1.0f); } } @@ -1080,13 +1080,13 @@ void func_8008DC34(void) { void func_8008DCB0(f32 arg0, f32 arg1, s32 arg2, s32 arg3, s32 arg4) { func_800BA4F0(); - gDPSetPrimColor(D_80137E64++, 0, 0, arg2, arg3, arg4, D_80161708); - func_8009C320(&D_80137E64, D_1011ED0, D_1011F08, 16, 7, arg0, arg1, 1.0f, 1.0f); + gDPSetPrimColor(gMasterDisp++, 0, 0, arg2, arg3, arg4, D_80161708); + func_8009C320(&gMasterDisp, D_1011ED0, D_1011F08, 16, 7, arg0, arg1, 1.0f, 1.0f); } void func_8008DD78(f32 arg0, f32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5) { func_800BA4F0(); - gDPSetPrimColor(D_80137E64++, 0, 0, arg3, arg4, arg5, D_80161708); + gDPSetPrimColor(gMasterDisp++, 0, 0, arg3, arg4, arg5, D_80161708); if (arg2 >= 10) { func_8009FC0C((s32) arg0 - (func_8008BCBC(arg2) * 8) + 11, arg1, arg2); @@ -1121,25 +1121,25 @@ void func_8008DE68(void) { temp4 = sp3C + 6.0f; temp5 = temp1 + 10.0f; - func_800B8DD0(&D_80137E64, 0x4E); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); - func_8009C320(&D_80137E64, D_1011A40, D_1011AB0, 32, 7, temp2, temp3, 1.0f, 1.0f); + func_800B8DD0(&gMasterDisp, 0x4E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + func_8009C320(&gMasterDisp, D_1011A40, D_1011AB0, 32, 7, temp2, temp3, 1.0f, 1.0f); - func_800B8DD0(&D_80137E64, 0x4C); - func_8009D994(&D_80137E64, D_1002040, 40, 12, sp3C, temp1, 1.0f, 1.0f); + func_800B8DD0(&gMasterDisp, 0x4C); + func_8009D994(&gMasterDisp, D_1002040, 40, 12, sp3C, temp1, 1.0f, 1.0f); if (sp3C >= 25.0f) { func_8009BC2C(&D_801616C4, 0.88f, 0.3f, 0.2f, 0.1f); } if ((D_801616C4 >= 0.1f) && (sp3C >= 25.0f)) { - func_800B8DD0(&D_80137E64, 0x4E); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); - func_8009D0BC(&D_80137E64, D_10129C0, D_1013090, 16, 109, temp4, temp5, 1.0f, D_801616C4); + func_800B8DD0(&gMasterDisp, 0x4E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + func_8009D0BC(&gMasterDisp, D_10129C0, D_1013090, 16, 109, temp4, temp5, 1.0f, D_801616C4); } - func_800B8DD0(&D_80137E64, 0x4C); - gDPSetPrimColor(D_80137E64++, 0, 0, 0, 0, 0, 255); + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0, 0, 0, 0, 0, 255); if (D_801616BC > 0.0f) { var_fv0 = (D_801616BC - D_80177848) * (2.76f / D_801616BC); @@ -1158,7 +1158,7 @@ void func_8008DE68(void) { temp6 = sp3C + 8.0f; temp7 = 101.0f - (31.884058f * D_801616C8) + temp1; if (D_801616C8 > 0.0f) { - func_8009D418(&D_80137E64, D_800D99F8, 32, 32, temp6, temp7, 0.2f, D_801616C8); + func_8009D418(&gMasterDisp, D_Tex_800D99F8, 32, 32, temp6, temp7, 0.2f, D_801616C8); } } } else { @@ -1188,11 +1188,11 @@ void func_8008E2C8(f32 arg0, f32 arg1, s32* arg2, f32 arg3) { if (i & 1) { func_800BA4F0(); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); - func_8009C320(&D_80137E64, &D_1011E80, &D_1011EC0, 0x10, 8, (var_fs0 * arg3) + arg0, arg1, arg3, arg3); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + func_8009C320(&gMasterDisp, &D_1011E80, &D_1011EC0, 0x10, 8, (var_fs0 * arg3) + arg0, arg1, arg3, arg3); } else { func_800BA490(); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 0, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); func_8008C390((var_fs0 * arg3) + arg0, arg1, arg3, var_s2); var_fs0 += 9.0f; } @@ -1333,8 +1333,8 @@ void func_8008E620(f32 arg0, f32 arg1) { b = 200; } } - func_800B8DD0(&D_80137E64, 0x4C); - gDPSetPrimColor(D_80137E64++, 0, 0, r, g, b, 255); + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0, 0, r, g, b, 255); func_80094D20(arg0, arg1); } diff --git a/src/overlays/segment_EBFBE0/EBFCA0.c b/src/overlays/segment_EBFBE0/EBFCA0.c index 902a2ad3..81da8051 100644 --- a/src/overlays/segment_EBFBE0/EBFCA0.c +++ b/src/overlays/segment_EBFBE0/EBFCA0.c @@ -237,22 +237,22 @@ void func_80187CA8_EC0368(void) { s32 temp = 20; s32 temp2 = 36; - func_800B8DD0(&D_80137E64, 0x53); + func_800B8DD0(&gMasterDisp, 0x53); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 0, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); func_800A1200(temp2, temp, 1.0f, 1.0f, D_801ADA44_EE6104); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); - func_8009D994(&D_80137E64, D_5000300, 16, 8, 148.0f, temp, 1.0f, 1.0f); - func_8009D994(&D_80137E64, D_5000200, 16, 8, 164, temp, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_5000300, 16, 8, 148.0f, temp, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_5000200, 16, 8, 164, temp, 1.0f, 1.0f); - func_800B8DD0(&D_80137E64, 0x53); + func_800B8DD0(&gMasterDisp, 0x53); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); - func_8009D994(&D_80137E64, &D_50077B0, 16, 2, 36, 32, 15.2f, 1.0f); + func_8009D994(&gMasterDisp, &D_50077B0, 16, 2, 36, 32, 15.2f, 1.0f); func_80187E28_EC04E8(); } @@ -260,9 +260,9 @@ void func_80187E28_EC04E8(void) { s32 temp; s32 i; - func_800B8DD0(&D_80137E64, 0x53); + func_800B8DD0(&gMasterDisp, 0x53); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 0, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); func_800A1200(94, 38, 1.0f, 1.0f, "RANK"); func_800A1200(146, 38, 1.0f, 1.0f, "NAME"); @@ -270,15 +270,15 @@ void func_80187E28_EC04E8(void) { temp = 55; for (i = 0; i < D_801B8288; i++) { - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_8009FEA0(105 - ((func_8008BCBC(i + 1) - 1) * 8), temp, i + 1); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 0, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); func_800A1200(150, temp, 1.0f, 1.0f, &D_801B8248[i][0]); - gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); func_8009FEA0(211 - ((func_8008BCBC(D_801B8220[i]) - 1) * 8), temp, D_801B8220[i]); temp += 17; diff --git a/yamls/us/header.yaml b/yamls/us/header.yaml index 1f2aedd6..3e11cf6f 100644 --- a/yamls/us/header.yaml +++ b/yamls/us/header.yaml @@ -19,6 +19,7 @@ options: symbol_addrs_path: - linker_scripts/us/symbol_addrs.txt - linker_scripts/us/symbol_addrs_libultra.txt + - linker_scripts/us/symbol_addrs_assets.txt - linker_scripts/us/ignored_addresses.txt reloc_addrs_path: - relocs/reloc_addrs.us.txt diff --git a/yamls/us/main.yaml b/yamls/us/main.yaml index 6f25b5c1..15537f6c 100644 --- a/yamls/us/main.yaml +++ b/yamls/us/main.yaml @@ -20,6 +20,7 @@ - [0x07B20, c, 7B20] - [0x07D30, c, 7D30] - [0x07FC0, c, 7FC0] + # Audio block - [0x08CC0, c, 8CC0] - [0x0C870, c, C870] - [0x0F0A0, c, F0A0] @@ -27,8 +28,9 @@ - [0x14AA0, c, 14AA0] - [0x17650, c, 17650] # Sound related - [0x1EB50, c, 1EB50] # Audio Thread - - [0x1FA60, c, 1FA60] - - [0x1FA70, hasm, decompress] # May be blanked out osDriveRomInit + + - [0x1FA60, c, 1FA60] # May be blanked out osDriveRomInit + - [0x1FA70, hasm, mio0] - [0x1FB10, hasm, rdramcheck] - [0x205E0, c, sprintf] - [0x206B0, c, math64] @@ -179,10 +181,11 @@ - [0xA4290, c, sf_A4290] - [0xA48A0, c, sf_A48A0] - [0xA4B50, c, sf_A4B50] - - [0xB99D0, c, sf_B99D0] # no rodata + - [0xB99D0, c, sf_B99D0] - [0xBB360, c, sf_BB360] - [0xBD360, c, sf_versus] - [0xC3430, c, sf_C3430] + - [0xC3BB0, c, sf_C3BB0] # DATA - Microcode - [0xC3EE0, data, aspmain] @@ -190,7 +193,12 @@ - [0xC49D0, data, f3dex] # DATA - Nintendo Libraries - - [0xC51D0, data, nlib] + - [0xC51D0, .data, 4650] + - [0xC51E0, .data, 5A20] + - [0xC5220, .data, 6280] + - [0xC52F0, data, 7B20] + - [0xC54D0, data, audio] + - [0xC8880, data, sprintf] # DATA - Libultra - [0xC88C0, data, ../libultra/io/controller] @@ -212,7 +220,6 @@ - [0xC8BD0, data, ../libultra/rmon/rmoncmds] - [0xC8CB0, data, ../libultra/rmon/rmonmain] - # RODATA - Nintendo Libraries - [0xC8CC0, .rodata, 5A20] - [0xC8D10, .rodata, 6280] @@ -243,6 +250,30 @@ # DATA - game engine - [0xCA690, data, engine] + # - [0xCA690, data, sf_2F300] + # - [0xCA7C0, data, sf_36930] + # - [0xCAA90, data, ???] + # - [0xCAB00, data, sf_43E80] + # - [0xCAB60, data, sf_496C0] + # - [0xCAE20, data, sf_52730] + # - [0xCAFB0, data, sf_59780] + # - [0xCCA70, data, ???] + # - [0xD05B0, data, sf_5A2C0] + # - [0xD09A0, data, sf_61B30] + # - [0xD0B80, data, sf_6B3B0] + # - [0xD20E0, data, sf_77E40] + # - [0xD2570, data, sf_hud] + # # - [0xD31D0, data, sf_97F80] splits from here on are unclear + # - [0xD31D0, data, sf_9A580] + # - [0xD3460, data, sf_A24B0] + # - [0xD3520, data, sf_A4290] + # # - [0x, data, sf_A48A0] + # - [0xD3B50, data, sf_A4B50] + # - [0xD3D80, data, ???] + # - [0xD3DB0, data, sf_B99D0] + # - [0xD5670, data, sf_BB360] + # - [0xD5690, data, sf_versus] + # - [0xD5910, data, ???] # RODATA - game engine - [0xD5920, .rodata, sf_2F300] @@ -267,9 +298,11 @@ - [0xD97F0, .rodata, sf_BB360] - [0xD9E50, .rodata, sf_versus] - [0xD9F60, .rodata, sf_C3430] + - [0xDA030, .rodata, sf_C3BB0] # Common assets - - [0xDA030, bin, assets] + - [0xDA0A0, data, displists] + - [0xDC710, data, audiodata] # Nintendo Library bss - { start: 0xDE480, type: bss, vram: 0x800DD880, name: nlib }