From 83f47e75fc208b5924e9484bd4c4a0e853010c6d Mon Sep 17 00:00:00 2001 From: Ogre Date: Fri, 1 Sep 2023 11:48:06 +0200 Subject: [PATCH] Added specific optimization flags for `boot.c` Added `bool` type Identified more symbols Finished `black.c` Finished `boot.c` --- Makefile | 4 +++- include/common.h | 5 ++++ splat.yaml | 32 +++++++++++++++---------- src/19FC0.c | 14 ----------- src/1A050.c | 8 ++++++- src/black.c | 26 +++++++++++++++++++++ src/boot.c | 44 ++++++++++++++++++++++++++++------- src/overlays/overlay0/3F1B0.c | 6 ++--- src/overlays/overlay0/3FE70.c | 15 ++++++++++++ symbol_addrs.txt | 20 ++++++++++++---- 10 files changed, 129 insertions(+), 45 deletions(-) delete mode 100644 src/19FC0.c create mode 100644 src/black.c create mode 100644 src/overlays/overlay0/3FE70.c diff --git a/Makefile b/Makefile index 778bdbd..5f22d5a 100644 --- a/Makefile +++ b/Makefile @@ -109,6 +109,9 @@ split: $(V)$(SPLAT) @touch $(SPLAT_TIMESTAMP) + +$(BUILD_DIR)/src/boot.c.o: OPTFLAGS = -O0 + # Run splat and update the timestamp $(SPLAT_TIMESTAMP) : $(SPLAT_YAML) | $(BUILD_DIR) @$(P)$(PRINT)$(GREEN)Running splat$(ENDGREEN)$(ENDLINE) @@ -133,7 +136,6 @@ $(BUILD_DIR)/src/%.c.o: src/%.c $(SPLAT_TIMESTAMP) | $(BUILD_DIR) @$(P)$(PRINT)$(GREEN)Compiling C file: $(ENDGREEN)$(BLUE)$<$(ENDBLUE)$(ENDLINE) @mkdir -p $(shell dirname $@) $(V)$(CC) $(CFLAGS) $(OPTFLAGS) $(CPPFLAGS) -o $@ $< -# && mips-linux-gnu-objcopy -N $< $@ # Assemble .s files with modern gnu as $(BUILD_DIR)/asm/%.s.o: asm/%.s | $(BUILD_DIR) diff --git a/include/common.h b/include/common.h index 5d51f38..5028ea0 100644 --- a/include/common.h +++ b/include/common.h @@ -5,4 +5,9 @@ #include +typedef u8 bool; + +#define false 0 +#define true 1 + #endif \ No newline at end of file diff --git a/splat.yaml b/splat.yaml index cbef9bf..8a42480 100644 --- a/splat.yaml +++ b/splat.yaml @@ -37,7 +37,7 @@ segments: start: 0x1000 vram: 0x80070C00 subsegments: - - [0x1000, hasm, entry] + - [0x1000, asm, entry] - name: main type: code @@ -103,7 +103,7 @@ segments: - [0x19E10, asm] - [0x19E30, asm, "dma_load_loop"] - [0x19EB0, asm] - - [0x19FC0, c] + - [0x19FC0, c, "black"] - [0x1A050, c] - [0x1A4F0, asm] - [0x1A5B0, asm] @@ -128,9 +128,12 @@ segments: - [0x1B650, asm] - [0x1B7A0, asm] - [0x1B940, asm] + - [0x1BC20, asm, "libultra/os/setintmask"] + - [0x1BCC0, asm, "libultra/io/pimgr"] + - [0x1BE50, asm, "libultra/io/epirawdma"] - [0x1C040, asm, "libultra/io/epidma"] - [0x1C0E0, asm] - - [0x1C130, asm, "libultra/os/cartrominit"] + - [0x1C130, asm] - [0x1C2B0, asm] - [0x1C670, asm, "libultra/io/piacs"] - [0x1C760, asm, "libultra/io/pidma"] @@ -239,11 +242,11 @@ segments: - [0x29E50, asm] - [0x29FC0, asm] - [0x29FE0, asm] - - [0x2AAD0, hasm, "libultra/os/getcause"] - - [0x2AAE0, hasm, "libultra/os/getcount"] - - [0x2AAF0, hasm, "libultra/os/getsr"] - - [0x2AB00, hasm, "libultra/os/setcompare"] - - [0x2AB10, hasm, "libultra/os/setfpccsr"] + - [0x2AAD0, asm, "libultra/os/getcause"] + - [0x2AAE0, asm, "libultra/os/getcount"] + - [0x2AAF0, asm, "libultra/os/getsr"] + - [0x2AB00, asm, "libultra/os/setcompare"] + - [0x2AB10, asm, "libultra/os/setfpccsr"] - [0x2AB20, asm, "libultra/os/setsr"] - [0x2AB30, asm] - [0x2AB40, asm, "libultra/io/sp"] @@ -253,8 +256,8 @@ segments: - [0x2AC80, asm] - [0x2ACD0, asm] - [0x2ADC0, asm, "libultra/os/destroythread"] - - [0x2AEA0, hasm, "libultra/os/maptlbrdb"] - - [0x2AF00, hasm, "libultra/os/unmaptlball"] + - [0x2AEA0, asm, "libultra/os/maptlbrdb"] + - [0x2AF00, asm, "libultra/os/unmaptlball"] - [0x2AF50, asm, "libultra/io/vi"] - [0x2B060, asm] - [0x2B070, asm, "libultra/io/pfschecker"] @@ -294,6 +297,9 @@ segments: - [0x3AB20, asm] - [0x3AB90, asm] - [0x3ABC0, asm] + + - [0x3BEC0, asm] + # - [0x3E198, rodata, "isallocatedpointer"] # - [0x3E278, rodata] @@ -332,7 +338,7 @@ segments: bss_size: 0x7F690 subsegments: - [0x3F1B0, c] - - [0x3FE70, asm] + - [0x3FE70, c] - [0x40640, asm] - { start: 0x40E80, type: bss, vram: 0x800EB8F0 } @@ -413,6 +419,8 @@ segments: # subsegments: # - [0x23A3A0, asm] + # - [0x23B210, data] + # - { start: 0x23B220, type: bss, vram: 0x801D16C0 } @@ -428,7 +436,7 @@ segments: # - [0x241610, asm] # - [0x243F20, asm] - - [0x2447A0, bin] + # - [0x2447A0, bin] # - type: code diff --git a/src/19FC0.c b/src/19FC0.c deleted file mode 100644 index e8df68a..0000000 --- a/src/19FC0.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "common.h" - -void __calls_osViBlack(u8); - -// INCLUDE_ASM(const s32, "19FC0", func_80089BC0); -extern s32 __SCREEN_IS_NOT_BLACK; - -void __set_black(void) { - __SCREEN_IS_NOT_BLACK = 0; - __calls_osViBlack(1); -} - - -INCLUDE_ASM(const s32, "19FC0", __calls_osViBlack); diff --git a/src/1A050.c b/src/1A050.c index 545426c..db8c7c6 100644 --- a/src/1A050.c +++ b/src/1A050.c @@ -67,9 +67,15 @@ void __start_controller_thread(void) { INCLUDE_ASM(const s32, "1A050", __controller_thread_80089D9C); + +// INCLUDE_ASM(const s32, "1A050", initialise); + void initialise(void) { + extern s32 func_8008BD30(); + extern s32 D_800E7A20; + osCreatePiManager(OS_PRIORITY_PIMGR, &MQ_800BE030, OSMESG_800BE048, sizeof(OSMESG_800BE048) / sizeof(OSMesg)); - CART_HANDLE = osCartRomInit(); + D_800E7A20 = func_8008BD30(); } INCLUDE_ASM(const s32, "1A050", romCopy); diff --git a/src/black.c b/src/black.c new file mode 100644 index 0000000..1870bd3 --- /dev/null +++ b/src/black.c @@ -0,0 +1,26 @@ +#include "common.h" + +void __set_black(); +void __calls_osViBlack(bool black); + +/* 19FC0 80089BC0 */ +void __set_black() { + extern s32 __SCREEN_IS_NOT_BLACK; + + __SCREEN_IS_NOT_BLACK = 0; + __calls_osViBlack(true); +} + +/* 19FE4 80089BE4 */ +void __calls_osViBlack(bool black) +{ + if (osTvType == 0) + { + if (black == 1) + osViSetYScale(1.0f); + else + osViSetYScale(0.833f); + } + osViBlack(black); +} + diff --git a/src/boot.c b/src/boot.c index 939b163..c11d30c 100644 --- a/src/boot.c +++ b/src/boot.c @@ -2,17 +2,43 @@ #include +void boot(void); void idle(void* arg); -// static OSThread IDLE_THREAD; -// static char SP_THREAD_IDLE[OS_PIM_STACKSIZE]; +void boot(void) { + extern OSThread THREAD_IDLE; + extern u8 SP_THREAD_IDLE[1]; -// void boot(void) { -// osInitialize(); -// osCreateThread(&IDLE_THREAD, 1, idle, NULL, &SP_THREAD_IDLE, 0xA); -// osStartThread(&IDLE_THREAD); -// } + osInitialize(); + osCreateThread(&THREAD_IDLE, 1, idle, NULL, SP_THREAD_IDLE, 0xA); + osStartThread(&THREAD_IDLE); +} -INCLUDE_ASM(const s32, "boot", boot); +void idle(void* arg) { + extern void main_(void*); + extern void __idle_start_4_threads(s32, s32); + extern void initialise(); + extern void (*D_800E7A18)(); -INCLUDE_ASM(const s32, "boot", idle); \ No newline at end of file + extern u8 SP_THREAD_FIRST_DMA_LOAD[1]; + extern OSThread THREAD_FIRST_DMA_LOAD; + extern OSThread THREAD_IDLE; + + D_800E7A18 = NULL; + + initialise(); + __idle_start_4_threads(2, 1); + + osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF); + + osCreateThread(&THREAD_FIRST_DMA_LOAD, 3, main_, NULL, SP_THREAD_FIRST_DMA_LOAD, 0xA); + osStartThread(&THREAD_FIRST_DMA_LOAD); + + osSetThreadPri(&THREAD_IDLE, OS_PRIORITY_IDLE); + + while(1) { + if (D_800E7A18 != NULL) { + D_800E7A18(); + } + } +} diff --git a/src/overlays/overlay0/3F1B0.c b/src/overlays/overlay0/3F1B0.c index 5449358..3367a57 100644 --- a/src/overlays/overlay0/3F1B0.c +++ b/src/overlays/overlay0/3F1B0.c @@ -2,7 +2,7 @@ #include -void func_800EA488(void*); +void __calls_romCopy_800EA488(void*); // INCLUDE_ASM(const s32, "overlays/overlay0/3F1B0", func_800E9C20); @@ -103,7 +103,7 @@ void func_800EA3E4(Arg* arg0) { if (func_80081B08(arg0->handle) == 0) { D_800EB0E8 = 0; - func_800EA488(arg0); + __calls_romCopy_800EA488(arg0); return; } if (arg0->field_0x38 == 0) { @@ -122,7 +122,7 @@ void func_800EA3E4(Arg* arg0) { } -INCLUDE_ASM(const s32, "overlays/overlay0/3F1B0", func_800EA488); +INCLUDE_ASM(const s32, "overlays/overlay0/3F1B0", __calls_romCopy_800EA488); // INCLUDE_ASM(const s32, "overlays/overlay0/3F1B0", func_800EA568); diff --git a/src/overlays/overlay0/3FE70.c b/src/overlays/overlay0/3FE70.c new file mode 100644 index 0000000..de9eba6 --- /dev/null +++ b/src/overlays/overlay0/3FE70.c @@ -0,0 +1,15 @@ +#include "common.h" + +INCLUDE_ASM(const s32, "overlays/overlay0/3FE70", func_800EA8E0); + +INCLUDE_ASM(const s32, "overlays/overlay0/3FE70", func_800EA924); + +INCLUDE_ASM(const s32, "overlays/overlay0/3FE70", func_800EA9BC); + +INCLUDE_ASM(const s32, "overlays/overlay0/3FE70", func_800EAB40); + +INCLUDE_ASM(const s32, "overlays/overlay0/3FE70", func_800EAC24); + +INCLUDE_ASM(const s32, "overlays/overlay0/3FE70", func_800EAF1C); + +INCLUDE_ASM(const s32, "overlays/overlay0/3FE70", func_800EB028); diff --git a/symbol_addrs.txt b/symbol_addrs.txt index 2a72ce9..20bf23c 100644 --- a/symbol_addrs.txt +++ b/symbol_addrs.txt @@ -11,6 +11,20 @@ D_80197168 = 0x80197168; // size:0x10 D_800E7D90 = 0x800E7D90; // size:0x58 D_800E7DE8 = 0x800E7DE8; // size:0x58 +__osException = 0x80098D70; +__osExceptionPreamble = 0x80098D60; + +__osSiRawWriteIo = 0x +__osFinalrom = 0x800E82C0; +osViClock = 0x800ABAC8; +__osSiRawReadIo = 0x8009A830; +__osSiRawWriteIo = 0x8009A880; +osResetType = 0x8000030C; +osAppNMIBuffer = 0x8000031C; +osClockRate = 0x800ABAC0; +osPiRawStartDma = 0x800997F0; +osEPiRawStartDma = 0x8008BA50; + __SCREEN_IS_NOT_BLACK = 0x800C4BD8; __calls_osViBlack = 0x80089BE4; __set_black = 0x80089BC0; @@ -165,6 +179,7 @@ __calls_romCopy_8009DBB8 = 0x8009DBB8; __calls_romCopy_8009DD38 = 0x8009DD38; __calls_romCopy_8009DE40 = 0x8009DE40; __calls_romCopy_8009DF48 = 0x8009DF48; +__calls_romCopy_800EA488 = 0x800EA488; __start_thread_800BE1C0 = 0x8008B0B0; __start_thread_800B9C88 = 0x80089660; @@ -230,8 +245,6 @@ FP_800A9E84 = 0x800A9E84; __set_fp_800A9E84 = 0x800899D0; romCopy = 0x80089F80; -CART_HANDLE = 0x800E7A20; -__CART_HANDLE_800B1898 = 0x800B1898; __GLOBAL_CONTROLLER_DATA = 0x0800C4BF0; // size:0x18 __GLOBAL_CONTROLLER_DATA_COPY = 0x0800AEE78; // size:0x18 @@ -356,8 +369,6 @@ guLookAtHilite = 0x800919D4; guLookAtReflectF = 0x80091AB0; guLookAtReflect = 0x80092028; -CartRomHandle = 0x800C4C54; - osTvType = 0x80000300; // type:s32 osRomBase = 0x80000308; // type:s32 @@ -377,7 +388,6 @@ osSetThreadPri = 0x80094950; osWritebackDCache = 0x80090140; osWritebackDCacheAll = 0x800901C0; osSetIntMask = 0x8008B820; -osCartRomInit = 0x8008BD30; osStartThread = 0x80094A20; osJamMesg = 0x800935A0; osRecvMesg = 0x800936E0;