From 8a12e398f03f151e76165ab613cac89a6355bed8 Mon Sep 17 00:00:00 2001 From: Bl00D4NGEL Date: Mon, 15 Jun 2026 01:32:31 +0200 Subject: [PATCH 1/6] map .bss for gameboot, add missing funcs --- splat.yaml | 8 +- src/gameboot.c | 369 ++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 307 insertions(+), 70 deletions(-) diff --git a/splat.yaml b/splat.yaml index 5453889..d6de182 100644 --- a/splat.yaml +++ b/splat.yaml @@ -30,13 +30,13 @@ segments: start: 0x0200 # LBA 0 vram: 0x80000400 align: 8 + bss_size: 0x44F18 subsegments: - [0x0200, asm, entrypoint] # maybe hasm - [0x0250, data] # list of LBA Start/End Mapping Info (unused here) - [0x0260, asm] - [0x1160, c, gameboot] - - [0x76B0, asm] #--libleo .text - [0xC500, asm, leo/lib/readwrite] @@ -230,6 +230,12 @@ segments: - [0x76FB0, pad] # end + + # .bss + - { type: bss, vram: 0x800789D0, name: gameboot } + - { type: bss, vram: 0x800B86C0, name: leo } + - { type: bss, vram: 0x800BADD0, name: libultra } + #--libleo .bss #- { type: .bss, vram: 0x800B86C0, name: leo/lib/leofunc } #- { type: .bss, vram: 0x800B86E0, name: leo/lib/leoram } diff --git a/src/gameboot.c b/src/gameboot.c index 2c5ceab..0144992 100644 --- a/src/gameboot.c +++ b/src/gameboot.c @@ -3,36 +3,37 @@ #include "PR/sptask.h" #include "PR/sched.h" #include "PR/ultratypes.h" +#include "PR/gbi.h" #define THREAD_ID_IDLE 1 #define THREAD_ID_MAIN 6 #define ARRAYCOUNT(a) (sizeof(a) / sizeof(a[0])) typedef struct { - s16 centerX; - s16 centerY; - s16 width; - s16 height; - s16 unk_08[16]; -} RectDescriptor; + /* 0x00 */ s16 centerX; + /* 0x02 */ s16 centerY; + /* 0x04 */ s16 width; + /* 0x06 */ s16 height; + /* 0x08 */ s16 unk_08[16]; +} RectDescriptor; // size = 0x28 typedef struct { - s32 state; - u8 red; - u8 green; - u8 blue; - u8 alpha; - s32 x; - s32 y; - f32 scaleX; - f32 scaleY; - char text[0x42]; - u8 pad_5A[6]; - s16 unk_60; // isQueued? - u16 pad_62; - s32 unk_64; // delayFrames? - s32 unk_68; -} UnkStruct80081EA0; + /* 0x00 */ s32 state; + /* 0x04 */ u8 red; + /* 0x05 */ u8 green; + /* 0x06 */ u8 blue; + /* 0x07 */ u8 alpha; + /* 0x08 */ s32 x; + /* 0x0C */ s32 y; + /* 0x10 */ f32 scaleX; + /* 0x14 */ f32 scaleY; + /* 0x18 */ char text[0x42]; + /* 0x5A */ u8 pad_5A[6]; + /* 0x60 */ s16 unk_60; // isQueued? + /* 0x62 */ u16 pad_62; + /* 0x64 */ s32 unk_64; // delayFrames? + /* 0x68 */ s32 unk_68; +} UnkStruct80081EA0; // size = 0x6C typedef union { struct { @@ -43,29 +44,56 @@ typedef union { u8 pad[0x42-0x4]; }; u8 bytes[0x42]; -} Unk800823B0; +} Unk800823B0; // size = 0x42 + +typedef struct { + s16 unk0; + s16 unk2; + u8 pad4[0x28-0x4]; + s16 unk28; + u16 pad2A; + u16 pad2C; + s16 unk2E; + s8 unk30; + s8 unk31; +} Unk80050860; // size = 0x32 + +typedef struct { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s32 unk8; + s16 unkC; + u16 padE; +} Unk80084B30; // size = 0x10 + +typedef struct { + s32 unk0; + s32 unk4; + u16 unk8; + u16 unkA; + u16 unkC; + u16 unkE; + s32 unk10; + s32 unk14; + u16 unk18; + u16 unk1A; + u16 unk1C; + u16 pad1E; + u16 unk20; + u16 unk22; + u16 unk24; + u16 pad26; + u16 unk28; + u16 unk2A; + s8 unk2C; + s8 unk2D; + s8 pad2E; + s8 unk2F; +} Unk80087758; // size = 0x30 -extern u32 D_80037D20[]; extern s32 D_80037F58; -extern OSThread D_800791B0; -extern u8 D_80079360[0x2000]; -extern OSMesg D_8007B360[200]; -extern OSMesgQueue D_8007B680; -extern u8 D_8007B698[OS_SC_STACKSIZE]; -extern OSSched D_8007D698; -extern OSMesgQueue D_8007D9B8; -extern OSMesg D_8007D9D0[32]; -extern OSMesgQueue D_8007D920; -extern OSMesg D_8007D938[32]; -extern OSScClient D_8007DA50; -extern OSPiHandle *D_8007DA58; -extern OSThread D_8007DA60; -extern u8 D_8007DC10[0x2000]; -extern u8 D_8007FC10[OS_SC_STACKSIZE]; -extern OSThread D_80081C10; -extern OSScClient D_80081DC0; -extern OSMesgQueue D_80081DC8; -extern OSMesg D_80081DE0[32]; // TODO: too early to determine the range of these extern u8 D_80038188[0x8003FF50 - 0x80038188]; @@ -73,45 +101,37 @@ extern u8 D_8003FF50[0xC000 - ARRAYCOUNT(D_80038188)]; extern u8 D_800442A8[0x8004FF50 - 0x800442A8]; extern u8 D_8004FF50[0xC000 - ARRAYCOUNT(D_800442A8)]; -extern u32 D_800351E0; -extern u32 D_800351E4; -extern u32 D_800351E4_LOAD; -extern u16 D_800351F8; -extern u32 D_80037D24; +extern u32 D_800351E0; // = 0; +extern u32 D_800351E4; // = 0; +extern u32 D_800351E4_LOAD; // ? +extern char D_800351EC[]; // = "01"; +extern char D_800351F0[]; // = "DMPJ"; +extern u16 D_800351F8; // = 0; +extern u16 D_800351FC[5304]; // = { 1 }; extern char D_80037B6C[]; extern char D_80037B90[]; extern char D_80037C1C[]; extern char D_80037C90[]; extern char D_80037CBC[]; -extern RectDescriptor D_80037D30[]; -extern u8 D_80037D2C; +extern u32 D_80037D20[3]; // = { 0 }; +extern u8 D_80037D2C; // = 0; +extern RectDescriptor D_80037D30[5]; +extern s32 D_80037E20[4]; // static GBI commands +extern s32 D_80037E30[4]; // static GBI commands +extern s32 D_80037E40[8]; // static GBI commands +extern s32 D_80037E60[50]; // static GBI commands extern char D_80037F28[]; extern u8 D_80037F3C[]; extern u32 D_80052720[]; extern u32 D_80052730; extern OSViMode D_80059C80; extern OSViMode D_80059F50; -extern u16* D_80081E60; -extern u16* D_80081E64; -extern u16* D_80081E68; -extern u32 D_80081E70; -extern u32 D_80081E74; -extern u32 D_80081E78; -extern u32 D_80081E7C; -extern u32 D_80081E80; -extern u32 D_80081E84; -extern u32 D_80081E88; -extern UnkStruct80081EA0 D_80081EA0[]; -extern Unk800823B0 D_800823B0[12]; -extern char D_800826C8[]; extern s32 D_8011F524; extern u32 D_8011F4FC; extern u32 D_8011F4FC_LOAD; extern u8 D_801243E8[]; extern u8 D_80315AE0[]; extern u16* D_80000318; -extern char D_800351EC[]; -extern char D_800351F0[]; extern s32 gMfsError; extern u8 D_80076428[]; extern u8 diskQBuf[]; @@ -127,13 +147,90 @@ extern u32 D_3B; extern u8 func_800BD8E0[]; extern u8 D_8015F340[]; extern u8 func_801F6EB0[]; -extern u32 D_80083060; +extern Unk80050860 D_80050860; +extern f32 D_800508C4; +extern f32 D_800508C8; + +extern s32 D_80037E20[]; +extern s32 D_80037E30[]; +extern Gfx* D_8008305C; +extern void* D_80083064; +// .data u16 D_800351D0 = 240; u16 D_800351D4 = 320; u16 D_800351D8 = 1; u16* D_800351DC = 0; +// .bss +extern u8 D_800789D0[0x7E0]; +extern OSThread D_800791B0; +extern u8 D_80079360[OS_SC_STACKSIZE]; +extern OSMesg D_8007B360[200]; +extern OSMesgQueue D_8007B680; +extern u8 D_8007B698[OS_SC_STACKSIZE]; +extern OSSched D_8007D698; +extern OSMesgQueue D_8007D920; +extern OSMesg D_8007D938[32]; +extern OSMesgQueue D_8007D9B8; +extern OSMesg D_8007D9D0[32]; +extern OSScClient D_8007DA50; +extern OSPiHandle *D_8007DA58; +extern OSThread D_8007DA60; +extern u8 D_8007DC10[OS_SC_STACKSIZE]; +extern u8 D_8007FC10[OS_SC_STACKSIZE]; +extern OSThread D_80081C10; +extern OSScClient D_80081DC0; +extern OSMesgQueue D_80081DC8; +extern OSMesg D_80081DE0[32]; +extern u16* D_80081E60; +extern u16* D_80081E64; +extern u16* D_80081E68; +extern u32 D_80081E70; +extern u32 D_80081E74; +extern u32 D_80081E78; +extern u32 D_80081E7C; +extern u32 D_80081E80; +extern u32 D_80081E84; +extern u32 D_80081E88; +// extern u8 D_80081E8C[0x04]; +// extern u8 D_80081E90[0x10]; +extern UnkStruct80081EA0 D_80081EA0[12]; +extern Unk800823B0 D_800823B0[12]; +extern char D_800826C8[0x988]; +// extern u8 D_80083050[0x04]; +// extern u8 D_80083054[0x04]; +// extern u8 D_80083058[0x04]; +// extern u8 D_8008305C[0x04]; +extern u32 D_80083060; +// extern u8 D_80083064[0x04]; +// extern u8 D_80083068[0x08]; +// extern u8 D_80083070[0xC00]; +// extern u8 D_80083C70[0x18]; +// extern u8 D_80083C88[0x6C]; +// extern u8 D_80083CF4[0x54]; +// extern u8 D_80083D48[0xBD0]; +// extern u8 D_80084918[0x108]; +// extern u8 D_80084A20[0x04]; +// extern u8 D_80084A24[0x04]; +// extern u8 D_80084A28[0x100]; +// extern u8 D_80084B28[0x08]; +extern Unk80084B30 D_80084B30[42]; +// extern u8 D_80084F50[0x2800]; +extern s32 D_80087750; +extern u8 D_80087754[0x4]; // pad? +extern Unk80087758 D_80087758[2][30][66]; +// u8 D_8009EA98[0x17348]; +// extern u8 D_800B5DE0[0x21B0]; +// extern u8 D_800B7F90[0x08]; +// extern u8 D_800B7F98[0x18]; +// extern u8 D_800B7FB0[0x80]; +// extern u8 D_800B8030[0x08]; +// extern u8 D_800B8038[0x80]; +// extern u8 D_800B80B8[0x200]; +// extern u8 D_800B82B8[0x200]; +// extern u8 D_800B84B8[0x208]; + void func_800013D4(void *arg); void func_80001450(void *arg); void func_800014D4(void); @@ -179,6 +276,12 @@ void func_80005108(void); void func_80005384(void); s32 func_800C1484(void); void func_800C28A0(void); +void func_8000ADF0(void); +void func_8000AE58(s32, s32); +void func_8000AE6C(s32, s32); +void func_8000AE80(f64, f64); +void func_8000AE9C(u8, u8, u8, u8); +void func_8000AED0(s8*, s32); void func_80001360(void *arg) { osInitialize(); @@ -205,7 +308,7 @@ void func_80001450(void *arg) { func_80002788(); func_80001C98(); D_800351E0 = 1; - D_80037D24 = 1; + D_80037D20[1] = 1; func_800D7800(0); func_8000152C(); @@ -457,7 +560,7 @@ s32 func_80001E54(u32 devAddr, void *dramAddr, u32 size) { OSIoMesg mb; OSMesg msg; - if (D_80037D24 != 0) { + if (D_80037D20[1] != 0) { if ((D_80052720[4] != 0) && (D_80052720[0] & 1)) { while (TRUE) {} } @@ -614,7 +717,7 @@ s32 DisplayDiskError(s32 arg0) { } } } - if (D_80037D24 != 0) { + if (D_80037D20[1] != 0) { func_800C28A0(); } break; @@ -846,7 +949,35 @@ void func_80003720(char *str, s32 screenWidth) { #pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80003AC0.s") +#ifndef NON_MATCHING #pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80003D60.s") +#else +// this should match but doesn't seem to? +// https://decomp.me/scratch/2bzEn +void func_80003D60(void) { + s32 pad[3]; + + gDPSetColorImage(D_8008305C++, G_IM_FMT_RGBA, G_IM_SIZ_16b, D_800351D4, osVirtualToPhysical(D_80083064)); + gSPDisplayList(D_8008305C++, D_80037E60); + if (D_800351D4 == 0x140) { + { + Gfx *_g = D_8008305C++;\ + _g->words.w0 = 0xDC080008;\ + _g->words.w1 = (u32) D_80037E20; + } + } else { + { + Gfx *_g = D_8008305C++;\ + _g->words.w0 = 0xDC080008;\ + _g->words.w1 = (u32) D_80037E30; + } + } + gSPDisplayList(D_8008305C++, D_80037E40); + gDPSetCycleType(D_8008305C++, G_CYC_FILL); + gDPSetFillColor(D_8008305C++, 0x00010001); + gDPFillRectangle(D_8008305C++, 0, 0, (D_800351D4 - 2), (D_800351D0 - 2)); +} +#endif void func_80003EE8(s32 width, s32 height, s32 *left, s32 *top) { s32 halfScreenWidth; @@ -953,3 +1084,103 @@ void func_80004594(char *text, s32 x, s32 y, u8 red, u8 green, u8 blue) { #pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000584C.s") #pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80005878.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_800078B0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007A28.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007AEC.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007B20.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007B60.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007D04.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007D64.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007D70.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007D94.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80008614.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80008808.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_800088E8.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80008938.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80008988.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80009130.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_800095C0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/DisplayMessage.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80009B74.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80009F74.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000A008.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000A240.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000A310.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000A448.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000A5AC.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000A5F0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/RenderText.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000AD54.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000ADA0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000ADF0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000AE58.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000AE6C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000AE80.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000AE9C.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000AED0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/GetCharWidth.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/GetCharKern.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000B054.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000B070.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000B0FC.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000B1E0.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000B2B8.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000B368.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000B508.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000B768.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000BA44.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000BD70.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000BDB4.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000BDD4.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000BE24.s") + +#pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_8000C56C.s") From 44f033060b288ba80902597a5eb06d17501d4cd9 Mon Sep 17 00:00:00 2001 From: Bl00D4NGEL Date: Mon, 15 Jun 2026 01:49:22 +0200 Subject: [PATCH 2/6] more .data mapping --- src/gameboot.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/gameboot.c b/src/gameboot.c index 0144992..92be65b 100644 --- a/src/gameboot.c +++ b/src/gameboot.c @@ -93,14 +93,6 @@ typedef struct { s8 unk2F; } Unk80087758; // size = 0x30 -extern s32 D_80037F58; - -// TODO: too early to determine the range of these -extern u8 D_80038188[0x8003FF50 - 0x80038188]; -extern u8 D_8003FF50[0xC000 - ARRAYCOUNT(D_80038188)]; -extern u8 D_800442A8[0x8004FF50 - 0x800442A8]; -extern u8 D_8004FF50[0xC000 - ARRAYCOUNT(D_800442A8)]; - extern u32 D_800351E0; // = 0; extern u32 D_800351E4; // = 0; extern u32 D_800351E4_LOAD; // ? @@ -121,7 +113,24 @@ extern s32 D_80037E30[4]; // static GBI commands extern s32 D_80037E40[8]; // static GBI commands extern s32 D_80037E60[50]; // static GBI commands extern char D_80037F28[]; -extern u8 D_80037F3C[]; +extern u8 D_80037F3C; // = 0x81; +extern u8 D_80037F3D[12]; +extern s32 D_80037F50[3]; // = { 0 }; +extern OSMesgQueue D_80037F5C; // = { 0 }; +extern OSMesg D_80037F74[8][16]; // = { 0 }; +// TODO: too early to determine the range of these +extern u8 D_80038188[0x8003FF50 - 0x80038188]; +extern u8 D_8003FF50[0xC000 - ARRAYCOUNT(D_80038188)]; +extern u8 D_800442A8[0x8004FF50 - 0x800442A8]; +extern u8 D_8004FF50[0xC000 - ARRAYCOUNT(D_800442A8)]; +extern s16 D_800502A8[16]; // = { 0 }; +extern s32 D_800502C8; // = 0; +extern s32 D_800502CC; // = 0; +extern s32 D_800502D0; // = 0; +extern s32 D_800502D4; // = 0; +extern s32 D_800502D8; // = 0xAB; +extern s32 D_800502E0[16]; // actually a struct +extern u16 D_80050320; // = 0; extern u32 D_80052720[]; extern u32 D_80052730; extern OSViMode D_80059C80; @@ -287,7 +296,7 @@ void func_80001360(void *arg) { osInitialize(); D_80037D20[1] = 0; D_80037D20[2] = 0; - D_80037F58 = 0; + D_80037F50[2] = 0; osCreateThread(&D_800791B0, THREAD_ID_IDLE, func_800013D4, arg, D_80079360 + sizeof(D_80079360), 9); osStartThread(&D_800791B0); } @@ -629,7 +638,7 @@ void func_80002B90(s32 arg0) { s32 tens; if (1) { - digitPtr = D_80037F3C; + digitPtr = &D_80037F3C; value = arg0; remainder = value % 100; value -= remainder; From 14f9df6a82491e5a014c3f1d38610da42e60ab92 Mon Sep 17 00:00:00 2001 From: Bl00D4NGEL Date: Tue, 23 Jun 2026 22:44:26 +0200 Subject: [PATCH 3/6] map more data --- .gitignore | 3 +- src/gameboot.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 83 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 84dcddf..a978e54 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ tools/ido_recomp *.s .DS_Store *.ld -.venv/ \ No newline at end of file +.venv/ +nonmatchings/ \ No newline at end of file diff --git a/src/gameboot.c b/src/gameboot.c index 92be65b..03e3269 100644 --- a/src/gameboot.c +++ b/src/gameboot.c @@ -131,14 +131,93 @@ extern s32 D_800502D4; // = 0; extern s32 D_800502D8; // = 0xAB; extern s32 D_800502E0[16]; // actually a struct extern u16 D_80050320; // = 0; -extern u32 D_80052720[]; +// -- file split here? +extern s32 D_80050334; // = 0; +extern s32 D_80050338; // = 0; +extern u16 D_8005033C; // = 0; +extern u16 D_80050340; // = 0; +extern s32 D_80050344; // = 0; +extern s32 D_80050348; // = 1; +extern s32 D_8005034C; // = 0; +extern s32 D_80050350; // = 0; +extern s16 D_80050354[]; // = { 0x00A0, 0x0028, 0x00E0, 0x0012, 0x1A1A, 0x1AFF, 0x1A1A, 0x1AFF, 0x1A1A, 0x1AFF, 0x1A1A, 0x1AFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; +// the next three vars might all be part of D_80050382 +extern s16 D_8005037C; // = 0xA0; +extern s16 D_8005037E; // = 0x1F; +extern s16 D_80050380; // = 0xE0; +extern s16 D_80050382[]; // = { 0x0002, 0xC8C8, 0xC8FF, 0x6E6E, 0x6EFF, 0xC8C8, 0xC8FF, 0x6E6E, 0x6EFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; +// the next three vars might all be part of D_800503AA +extern s16 D_800503A4; // = 0x00A0; +extern s16 D_800503A6; // = 0x0031; +extern s16 D_800503A8; // = 0x00E0; +extern s16 D_800503AA[]; // = { 0x0002, 0x6E6E, 0x6EFF, 0x3C3C, 0x3CFF, 0x6E6E, 0x6EFF, 0x3C3C, 0x3CFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; +// the next three vars might all be part of D_800503D2 +extern s16 D_800503CC; // = 0x0030; +extern s16 D_800503CE; // = 0x0028; +extern s16 D_800503D0; // = 0x0002; +extern s16 D_800503D2[]; // = { 0x0012, 0xC8C8, 0xC8FF, 0xC8C8, 0xC8FF, 0x6E6E, 0x6EFF, 0x6E6E, 0x6EFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; +extern s16 D_800503F4[]; // = { 0x0110, 0x0028, 0x0002, 0x0012, 0x6E6E, 0x6EFF, 0x6E6E, 0x6EFF, 0x3C3C, 0x3CFF, 0x3C3C, 0x3CFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; +extern s32 D_8005041C; // = 0; +extern s32 D_80050420; // = 0; +// -- file split here? +extern s32 D_80050438; // = 0; +extern s32 D_8005043C[]; // size of 13? all 0s +extern s32 D_80050470[]; // size of 11? all 0s +extern s32 D_8005049C[]; // size of 0x60? +extern s32 D_8005061C[]; // size of 0x30? +extern s32 D_800506DC[]; // size of 0x20? +extern s8 D_8005075C[]; // size of 0x100? +extern s32 D_8005085C; +extern Unk80050860 D_80050860; +extern u8 D_800508A4; // = 0xFF; +extern u8 D_800508A8; // = 0xFF; +extern u8 D_800508AC; // = 0xFF; +extern u8 D_800508B0; // = 0xFF; +extern s32 D_800508B4; // = 0; +extern s32 D_800508B8; // = 0; +extern s32 D_800508BC; // = 0x28; +extern s32 D_800508C0; // = 1; +extern f32 D_800508C4; // = 1.0f; +extern f32 D_800508C8; // = 1.0f; +extern u16 D_800508CC[]; // size of 0x88? +extern s32 D_800509DC[]; // this is a struct +extern s16 D_800509EC[]; // size of 0x200? +extern s32 D_80050DEC[]; // Maybe an array of gbi commands? size of 0x380? +extern s32 D_80051BEC[]; // array of values between 0-4, size of 0x120? +extern u8 D_8005206C[0x80]; +extern u8 D_800520EC; // = 6; probably part of D_800520ED +extern u8 D_800520ED[0x16B]; +extern s32 D_80052258[]; // array of gbi commands? size of 10 +extern s32 D_80052280[]; // array of gbi commands? size of 16 +extern s32 D_800522C0[]; // array of gbi commands? size of 0x96? +extern s32 D_80052518[]; // array of gbi commands? size of 14 +extern s32 D_80052550[]; // array of gbi commands? size of 0x74? +extern u32 D_80052720[4]; extern u32 D_80052730; +extern s32 pad_D_80052734; +extern s32 pad_D_80052738; +extern s32 D_8005273C[9]; +extern s32 D_80052760[17]; +extern s32 D_800527A4[]; // maybe a struct? passed into func_8000B768 as 5th arg (sp10) +extern s32 D_80058744[]; // maybe a struct? passed into func_8000BA44 as 5th arg (sp10) +extern s16 D_80059164[]; // size of 0x2A? +extern s32 D_800591B8[4]; +extern s32 D_800591C8[4]; +extern s32 D_800591D8[8]; // array of gbi commands? +extern s32 D_800591F8[]; // array of gbi commands? size of 0x20? +extern s32 D_80059278; + +// libultra data extern OSViMode D_80059C80; extern OSViMode D_80059F50; + +// src/main data extern s32 D_8011F524; extern u32 D_8011F4FC; extern u32 D_8011F4FC_LOAD; extern u8 D_801243E8[]; + +// unknown data extern u8 D_80315AE0[]; extern u16* D_80000318; extern s32 gMfsError; @@ -156,9 +235,6 @@ extern u32 D_3B; extern u8 func_800BD8E0[]; extern u8 D_8015F340[]; extern u8 func_801F6EB0[]; -extern Unk80050860 D_80050860; -extern f32 D_800508C4; -extern f32 D_800508C8; extern s32 D_80037E20[]; extern s32 D_80037E30[]; @@ -1098,6 +1174,7 @@ void func_80004594(char *text, s32 x, s32 y, u8 red, u8 green, u8 blue) { #pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007A28.s") +// file split around here? #pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007AEC.s") #pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80007B20.s") From 792a4119dc2c199dad1bf7c2bd56e29c2ee5aff2 Mon Sep 17 00:00:00 2001 From: Bl00D4NGEL Date: Tue, 23 Jun 2026 23:29:32 +0200 Subject: [PATCH 4/6] move gameboot exports into gameboot.h, create common.h --- include/common.h | 6 +++ include/gameboot.h | 17 ++++++++ splat.yaml | 1 + src/gameboot.c | 101 +++++++++++++++++++++------------------------ 4 files changed, 72 insertions(+), 53 deletions(-) create mode 100644 include/common.h create mode 100644 include/gameboot.h diff --git a/include/common.h b/include/common.h new file mode 100644 index 0000000..015f64b --- /dev/null +++ b/include/common.h @@ -0,0 +1,6 @@ +#ifndef _COMMON_H +#define _COMMON_H + +#define ARRAYCOUNT(a) (sizeof(a) / sizeof(a[0])) + +#endif //_COMMON_H diff --git a/include/gameboot.h b/include/gameboot.h new file mode 100644 index 0000000..6948a36 --- /dev/null +++ b/include/gameboot.h @@ -0,0 +1,17 @@ +#ifndef _GAMEBOOT_H +#define _GAMEBOOT_H + +#include "PR/ultratypes.h" + +void func_80005384(void); +void func_800016F8(u16 arg0); +s32 func_80001D0C(u32 startLba, void *dst, u32 lbaCount); +s32 func_80001E54(u32 devAddr, void *dramAddr, u32 size); +u32 func_80001F20(u32 startLba, u32 endLba, u32 *lbaCount); +s32 DisplayDiskError(s32 arg0); +s32 func_8000314C(u8 *a, u8 *b, u32 size); +void func_80005108(void); +void func_80001360(void *arg); +void func_80001A44(void); + +#endif //_GAMEBOOT_H diff --git a/splat.yaml b/splat.yaml index d6de182..5b42dd8 100644 --- a/splat.yaml +++ b/splat.yaml @@ -18,6 +18,7 @@ options: ld_align_segment_start: 8 ld_align_segment_vram_end: false ld_align_section_vram_end: false + make_full_disasm_for_code: True segments: - name: header type: data # this is not a typical N64 header. Do not let splat process it as such. diff --git a/src/gameboot.c b/src/gameboot.c index 03e3269..fb3ce0e 100644 --- a/src/gameboot.c +++ b/src/gameboot.c @@ -4,10 +4,18 @@ #include "PR/sched.h" #include "PR/ultratypes.h" #include "PR/gbi.h" +#include "PR/leo.h" + +#include "common.h" +#include "gameboot.h" #define THREAD_ID_IDLE 1 #define THREAD_ID_MAIN 6 -#define ARRAYCOUNT(a) (sizeof(a) / sizeof(a[0])) + +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 240 +#define HIGH_RES_SCREEN_WIDTH 640 +#define HIGH_RES_SCREEN_HEIGHT 480 typedef struct { /* 0x00 */ s16 centerX; @@ -228,7 +236,6 @@ extern char D_8005BA30[]; extern char D_8005BA60[]; extern char D_8005BA6C[]; extern char D_8005BAAC[]; -extern u8 leoBootID[]; extern u32 D_19; extern u32 D_19_ALT; extern u32 D_3B; @@ -242,8 +249,8 @@ extern Gfx* D_8008305C; extern void* D_80083064; // .data -u16 D_800351D0 = 240; -u16 D_800351D4 = 320; +u16 D_800351D0 = SCREEN_HEIGHT; +u16 D_800351D4 = SCREEN_WIDTH; u16 D_800351D8 = 1; u16* D_800351DC = 0; @@ -316,20 +323,31 @@ extern Unk80087758 D_80087758[2][30][66]; // extern u8 D_800B82B8[0x200]; // extern u8 D_800B84B8[0x208]; +// forward declarations void func_800013D4(void *arg); void func_80001450(void *arg); void func_800014D4(void); void func_8000152C(void); void func_800015BC(void *arg); -void func_800016F8(u16 arg0); void func_80001B00(void); void func_80001C98(void); -s32 func_80001D0C(u32 startLba, void *dst, u32 lbaCount); -s32 func_80001E54(u32 devAddr, void *dramAddr, u32 size); -u32 func_80001F20(u32 startLba, u32 endLba, u32 *lbaCount); -void func_80002788(void); -s32 DisplayDiskError(s32 arg0); void func_80002788(void); +void func_8000327C(void *arg); +void func_800050B0(void); +void func_80003AC0(void); +void func_80003D60(void); +void func_80003570(char* str, s32 arg1, s32 screenWidth, s32 (*callback)()); +void func_80003720(char *str, s32 screenWidth); +void func_80003EE8(s32 width, s32 height, s32 *left, s32 *top); +void func_80004594(char *text, s32 x, s32 y, u8 red, u8 green, u8 blue); +void func_8000ADF0(void); +void func_8000AE58(s32, s32); +void func_8000AE6C(s32, s32); +void func_8000AE80(f64, f64); +void func_8000AE9C(u8, u8, u8, u8); +void func_8000AED0(s8*, s32); + +// defined in 20B20.s s32 Mfs_CreateLeoManager(s32 arg0, void *arg1, s32 arg2); s32 Mfs_ReadLBA(u32 startLba, void *dst, u32 lbaCount); s32 func_800273FC(void); @@ -337,36 +355,16 @@ s32 func_800275B0(void); void func_80027680(s32 arg0, s32 arg1, char *arg2); s32 func_80027B4C(void); void Mfs_SetGameCode(char *arg0, char *arg1); -s32 LeoLBAToByte(s32 startlba, u32 nlbas, s32 *bytes); void func_800283E4(void); s32 Mfs_CopyRamAreaFromBackup(void); void func_80029DEC(void *arg0, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5); -void func_80002B90(s32 arg0); -s32 func_80002AA0(void); -s32 func_80002B20(void); -s32 func_8000314C(u8 *a, u8 *b, u32 size); -void func_8000327C(void *arg); -void func_800050B0(void); + +// defined in main/787C8.s void func_800BDB80(void *arg); void func_800D7800(s32 arg0); void func_800D78A4(char *arg0, char *arg1, s32 arg2); -void func_80001A44(void); -void func_80003AC0(void); -void func_80003D60(void); -void func_80003570(char* str, s32 arg1, s32 screenWidth, s32 (*callback)()); -void func_80003720(char *str, s32 screenWidth); -void func_80003EE8(s32 width, s32 height, s32 *left, s32 *top); -void func_80004594(char *text, s32 x, s32 y, u8 red, u8 green, u8 blue); -void func_80005108(void); -void func_80005384(void); s32 func_800C1484(void); void func_800C28A0(void); -void func_8000ADF0(void); -void func_8000AE58(s32, s32); -void func_8000AE6C(s32, s32); -void func_8000AE80(f64, f64); -void func_8000AE9C(u8, u8, u8, u8); -void func_8000AED0(s8*, s32); void func_80001360(void *arg) { osInitialize(); @@ -468,12 +466,12 @@ void func_800016F8(u16 arg0) { switch (arg0) { case 1: - D_800351D4 = 320; - D_800351D0 = 240; + D_800351D4 = SCREEN_WIDTH; + D_800351D0 = SCREEN_HEIGHT; break; case 0: - D_800351D4 = 640; - D_800351D0 = 480; + D_800351D4 = HIGH_RES_SCREEN_WIDTH; + D_800351D0 = HIGH_RES_SCREEN_HEIGHT; break; } @@ -509,10 +507,10 @@ void func_800016F8(u16 arg0) { break; } - osViSetSpecialFeatures(0x40); + osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON); osViSetXScale(1.0f); osViSetYScale(1.0f); - osViSetSpecialFeatures(0x1A); + osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_GAMMA_DITHER_OFF | OS_VI_GAMMA_OFF); osViSwapBuffer(D_80081E64); } @@ -540,7 +538,7 @@ void func_80001A44(void) { } } -// TODO: split into error.c here +// TODO: split into leoerror.c here void func_80001B00(void) { s32 state; @@ -786,7 +784,7 @@ s32 DisplayDiskError(s32 arg0) { if (status != -1 || (status == -1 && gMfsError != 1)) { bcopy(D_80076428, D_801243E8, 0x20); - while (func_8000314C(D_80076428, leoBootID, 0x20) == 0) { + while (func_8000314C(D_80076428, leoBootID, sizeof(leoBootID)) == 0) { func_80003570(D_80037CBC, 1, 0xF8, func_80002AA0); } } else { @@ -797,7 +795,7 @@ s32 DisplayDiskError(s32 arg0) { D_800351F8 = 0; bcopy(D_80076428, D_801243E8, 0x20); D_80037D2C = 0; - while (func_8000314C(D_80076428, leoBootID, 0x20) == 0) { + while (func_8000314C(D_80076428, leoBootID, sizeof(leoBootID)) == 0) { func_80003570(D_80037CBC, 1, 0xF8, func_80002AA0); } } @@ -867,13 +865,13 @@ void func_80003570(char* str, s32 arg1, s32 screenWidth, s32 (*callback)()) done = 0; changedResolution = 0; - if (D_800351D4 == 640) { + if (D_800351D4 == HIGH_RES_SCREEN_WIDTH) { changedResolution = 1; - D_800351D4 = 320; - D_800351D0 = 240; + D_800351D4 = SCREEN_WIDTH; + D_800351D0 = SCREEN_HEIGHT; osViSetMode(&D_80059C80); - osViSetSpecialFeatures(0x40); - osViSetSpecialFeatures(0x1A); + osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON); + osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_GAMMA_DITHER_OFF | OS_VI_GAMMA_OFF); } D_80037D20[0] |= 1; @@ -905,12 +903,12 @@ void func_80003570(char* str, s32 arg1, s32 screenWidth, s32 (*callback)()) } if (changedResolution != 0) { - D_800351D4 = 640; - D_800351D0 = 480; + D_800351D4 = HIGH_RES_SCREEN_WIDTH; + D_800351D0 = HIGH_RES_SCREEN_HEIGHT; func_80001A44(); osViSetMode(&D_80059F50); - osViSetSpecialFeatures(0x40); - osViSetSpecialFeatures(0x1A); + osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON); + osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_GAMMA_DITHER_OFF | OS_VI_GAMMA_OFF); } for (i = 0; i < 4; i++) { @@ -1029,9 +1027,6 @@ void func_80003720(char *str, s32 screenWidth) { #pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80003A98.s") -//void __dummy(void) { -//} - #pragma GLOBAL_ASM("asm/nonmatchings/gameboot/func_80003AC0.s") #ifndef NON_MATCHING From 6be04a9910723d766ee0df37689bd5554fd7ae4c Mon Sep 17 00:00:00 2001 From: Bl00D4NGEL Date: Tue, 23 Jun 2026 23:59:29 +0200 Subject: [PATCH 5/6] map .data for libultra/io/vitbl --- include/PR/rcp.h | 7 ++++--- splat.yaml | 2 +- src/gameboot.c | 12 ++++++------ tools/symbol_addrs.txt | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/include/PR/rcp.h b/include/PR/rcp.h index 47c4b34..e07b688 100644 --- a/include/PR/rcp.h +++ b/include/PR/rcp.h @@ -560,9 +560,10 @@ #define VI_CTRL_DIVOT_ON 0x00010 /* 4: default = on */ #define VI_CTRL_SERRATE_ON 0x00040 /* 6: on if interlaced */ #define VI_CTRL_ANTIALIAS_MASK 0x00300 /* [9:8] anti-alias mode */ -#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode */ -#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode */ -#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_0 0x00000 /* Bit [9:8] anti-alias mode: AA enabled, resampling enabled, always fetch extra lines */ +#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode: AA enabled, resampling enabled, fetch extra lines as-needed */ +#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode: AA disabled, resampling enabled, operate as if everything is covered */ +#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode: AA disabled, resampling disabled, replicate pixels */ #define VI_CTRL_PIXEL_ADV_MASK 0x01000 /* [15:12] pixel advance mode? */ #define VI_CTRL_PIXEL_ADV_1 0x01000 /* Bit [15:12] pixel advance mode? */ #define VI_CTRL_PIXEL_ADV_2 0x02000 /* Bit [15:12] pixel advance mode? */ diff --git a/splat.yaml b/splat.yaml index 5b42dd8..89f145e 100644 --- a/splat.yaml +++ b/splat.yaml @@ -183,7 +183,7 @@ segments: - [0x599A0, data, libultra/io/siacs] - [0x599B0, data, libultra/io/controller] - [0x599C0, data, libultra/os/initialize] - - [0x599E0, data, libultra/io/vitbl] + - [0x599E0, .data, libultra/io/vitbl] - [0x5AB60, data, libultra/gu/us2dex2_emu] - [0x5AB90, data, libultra/io/pimgr] - [0x5ABC0, data, libultra/sched/sched] diff --git a/src/gameboot.c b/src/gameboot.c index fb3ce0e..72bc9f5 100644 --- a/src/gameboot.c +++ b/src/gameboot.c @@ -492,14 +492,14 @@ void func_800016F8(u16 arg0) { switch (arg0) { case 1: - if (osTvType == 1) { - osViSetMode(&D_80059C80); + if (osTvType == OS_TV_NTSC) { + osViSetMode(&osViModeTable[2]); break; } while (TRUE) {} case 0: - if (osTvType == 1) { - osViSetMode(&D_80059F50); + if (osTvType == OS_TV_NTSC) { + osViSetMode(&osViModeTable[11]); break; } while (TRUE) {} @@ -869,7 +869,7 @@ void func_80003570(char* str, s32 arg1, s32 screenWidth, s32 (*callback)()) changedResolution = 1; D_800351D4 = SCREEN_WIDTH; D_800351D0 = SCREEN_HEIGHT; - osViSetMode(&D_80059C80); + osViSetMode(&osViModeTable[2]); osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON); osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_GAMMA_DITHER_OFF | OS_VI_GAMMA_OFF); } @@ -906,7 +906,7 @@ void func_80003570(char* str, s32 arg1, s32 screenWidth, s32 (*callback)()) D_800351D4 = HIGH_RES_SCREEN_WIDTH; D_800351D0 = HIGH_RES_SCREEN_HEIGHT; func_80001A44(); - osViSetMode(&D_80059F50); + osViSetMode(&osViModeTable[11]); osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON); osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_GAMMA_DITHER_OFF | OS_VI_GAMMA_OFF); } diff --git a/tools/symbol_addrs.txt b/tools/symbol_addrs.txt index 8720139..231628b 100644 --- a/tools/symbol_addrs.txt +++ b/tools/symbol_addrs.txt @@ -583,7 +583,7 @@ osViClock = 0x80059BC8; __osShutdown = 0x80059BCC; __OSGlobalIntMask = 0x80059BD0; //-- libultra/io/vitbl -osViModeTable = 0x80059BE0; +osViModeTable = 0x80059BE0; // size:0x1180 //-- libultra/gu/us2dex2_emu us2dex2_emu_data_0000 = 0x8005AD60; us2dex2_emu_data_0004 = 0x8005AD64; From 40b0780a62663a9ae159b237560fa5131ba57584 Mon Sep 17 00:00:00 2001 From: Bl00D4NGEL Date: Wed, 24 Jun 2026 00:48:45 +0200 Subject: [PATCH 6/6] map some .bss --- splat.yaml | 3 +- src/gameboot.c | 149 ++++++++++++++++++++++++------------------------- 2 files changed, 76 insertions(+), 76 deletions(-) diff --git a/splat.yaml b/splat.yaml index 89f145e..2c11727 100644 --- a/splat.yaml +++ b/splat.yaml @@ -233,7 +233,8 @@ segments: # .bss - - { type: bss, vram: 0x800789D0, name: gameboot } + - { type: .bss, vram: 0x800789D0, name: gameboot } + - { type: bss, vram: 0x80083070, name: gameboot_bss_80083070 } - { type: bss, vram: 0x800B86C0, name: leo } - { type: bss, vram: 0x800BADD0, name: libultra } diff --git a/src/gameboot.c b/src/gameboot.c index 72bc9f5..9d9b446 100644 --- a/src/gameboot.c +++ b/src/gameboot.c @@ -101,6 +101,80 @@ typedef struct { s8 unk2F; } Unk80087758; // size = 0x30 + +// .bss +u8 D_800789D0[0x7E0]; +OSThread D_800791B0; +u8 D_80079360[OS_SC_STACKSIZE]; +OSMesg D_8007B360[200]; +OSMesgQueue D_8007B680; +u8 D_8007B698[OS_SC_STACKSIZE]; +OSSched D_8007D698; +OSMesgQueue D_8007D920; +OSMesg D_8007D938[32]; +OSMesgQueue D_8007D9B8; +OSMesg D_8007D9D0[32]; +OSScClient D_8007DA50; +OSPiHandle *D_8007DA58; +OSThread D_8007DA60; +u8 D_8007DC10[OS_SC_STACKSIZE]; +u8 D_8007FC10[OS_SC_STACKSIZE]; +OSThread D_80081C10; +OSScClient D_80081DC0; +OSMesgQueue D_80081DC8; +OSMesg D_80081DE0[32]; +u16* D_80081E60; +u16* D_80081E64; +u16* D_80081E68; +u32 pad_D_80081E6C; +u32 D_80081E70; +u32 D_80081E74; +u32 D_80081E78; +u32 D_80081E7C; +u32 D_80081E80; +u32 D_80081E84; +u32 D_80081E88; +s32 D_80081E8C; +s32 D_80081E90; +s32 padD_80081E94; +s32 padD_80081E98; +s32 padD_80081E9C; +UnkStruct80081EA0 D_80081EA0[12]; +Unk800823B0 D_800823B0[12]; +u8 pad_D_800826C8[2440]; +s32 D_80083050; +s32 D_80083054; +s32 D_80083058; +Gfx* D_8008305C; +u32 D_80083060; +void* D_80083064; +s32 D_80083068; +// extern u8 D_80083070[0xC00]; +// extern u8 D_80083C70[0x18]; +// extern u8 D_80083C88[0x6C]; +// extern u8 D_80083CF4[0x54]; +// extern u8 D_80083D48[0xBD0]; +// extern u8 D_80084918[0x108]; +// extern u8 D_80084A20[0x04]; +// extern u8 D_80084A24[0x04]; +// extern u8 D_80084A28[0x100]; +// extern u8 D_80084B28[0x08]; +extern Unk80084B30 D_80084B30[42]; +// extern u8 D_80084F50[0x2800]; +extern s32 D_80087750; +extern u8 D_80087754[0x4]; // pad? +extern Unk80087758 D_80087758[2][30][66]; +// u8 D_8009EA98[0x17348]; +// extern u8 D_800B5DE0[0x21B0]; +// extern u8 D_800B7F90[0x08]; +// extern u8 D_800B7F98[0x18]; +// extern u8 D_800B7FB0[0x80]; +// extern u8 D_800B8030[0x08]; +// extern u8 D_800B8038[0x80]; +// extern u8 D_800B80B8[0x200]; +// extern u8 D_800B82B8[0x200]; +// extern u8 D_800B84B8[0x208]; + extern u32 D_800351E0; // = 0; extern u32 D_800351E4; // = 0; extern u32 D_800351E4_LOAD; // ? @@ -215,10 +289,6 @@ extern s32 D_800591D8[8]; // array of gbi commands? extern s32 D_800591F8[]; // array of gbi commands? size of 0x20? extern s32 D_80059278; -// libultra data -extern OSViMode D_80059C80; -extern OSViMode D_80059F50; - // src/main data extern s32 D_8011F524; extern u32 D_8011F4FC; @@ -245,8 +315,6 @@ extern u8 func_801F6EB0[]; extern s32 D_80037E20[]; extern s32 D_80037E30[]; -extern Gfx* D_8008305C; -extern void* D_80083064; // .data u16 D_800351D0 = SCREEN_HEIGHT; @@ -254,75 +322,6 @@ u16 D_800351D4 = SCREEN_WIDTH; u16 D_800351D8 = 1; u16* D_800351DC = 0; -// .bss -extern u8 D_800789D0[0x7E0]; -extern OSThread D_800791B0; -extern u8 D_80079360[OS_SC_STACKSIZE]; -extern OSMesg D_8007B360[200]; -extern OSMesgQueue D_8007B680; -extern u8 D_8007B698[OS_SC_STACKSIZE]; -extern OSSched D_8007D698; -extern OSMesgQueue D_8007D920; -extern OSMesg D_8007D938[32]; -extern OSMesgQueue D_8007D9B8; -extern OSMesg D_8007D9D0[32]; -extern OSScClient D_8007DA50; -extern OSPiHandle *D_8007DA58; -extern OSThread D_8007DA60; -extern u8 D_8007DC10[OS_SC_STACKSIZE]; -extern u8 D_8007FC10[OS_SC_STACKSIZE]; -extern OSThread D_80081C10; -extern OSScClient D_80081DC0; -extern OSMesgQueue D_80081DC8; -extern OSMesg D_80081DE0[32]; -extern u16* D_80081E60; -extern u16* D_80081E64; -extern u16* D_80081E68; -extern u32 D_80081E70; -extern u32 D_80081E74; -extern u32 D_80081E78; -extern u32 D_80081E7C; -extern u32 D_80081E80; -extern u32 D_80081E84; -extern u32 D_80081E88; -// extern u8 D_80081E8C[0x04]; -// extern u8 D_80081E90[0x10]; -extern UnkStruct80081EA0 D_80081EA0[12]; -extern Unk800823B0 D_800823B0[12]; -extern char D_800826C8[0x988]; -// extern u8 D_80083050[0x04]; -// extern u8 D_80083054[0x04]; -// extern u8 D_80083058[0x04]; -// extern u8 D_8008305C[0x04]; -extern u32 D_80083060; -// extern u8 D_80083064[0x04]; -// extern u8 D_80083068[0x08]; -// extern u8 D_80083070[0xC00]; -// extern u8 D_80083C70[0x18]; -// extern u8 D_80083C88[0x6C]; -// extern u8 D_80083CF4[0x54]; -// extern u8 D_80083D48[0xBD0]; -// extern u8 D_80084918[0x108]; -// extern u8 D_80084A20[0x04]; -// extern u8 D_80084A24[0x04]; -// extern u8 D_80084A28[0x100]; -// extern u8 D_80084B28[0x08]; -extern Unk80084B30 D_80084B30[42]; -// extern u8 D_80084F50[0x2800]; -extern s32 D_80087750; -extern u8 D_80087754[0x4]; // pad? -extern Unk80087758 D_80087758[2][30][66]; -// u8 D_8009EA98[0x17348]; -// extern u8 D_800B5DE0[0x21B0]; -// extern u8 D_800B7F90[0x08]; -// extern u8 D_800B7F98[0x18]; -// extern u8 D_800B7FB0[0x80]; -// extern u8 D_800B8030[0x08]; -// extern u8 D_800B8038[0x80]; -// extern u8 D_800B80B8[0x200]; -// extern u8 D_800B82B8[0x200]; -// extern u8 D_800B84B8[0x208]; - // forward declarations void func_800013D4(void *arg); void func_80001450(void *arg);