Added specific optimization flags for `boot.c`

Added `bool` type
Identified more symbols
Finished `black.c`
Finished `boot.c`
This commit is contained in:
Ogre 2023-09-01 11:48:06 +02:00
parent 7ad1f85eac
commit 83f47e75fc
10 changed files with 129 additions and 45 deletions

View File

@ -109,6 +109,9 @@ split:
$(V)$(SPLAT) $(V)$(SPLAT)
@touch $(SPLAT_TIMESTAMP) @touch $(SPLAT_TIMESTAMP)
$(BUILD_DIR)/src/boot.c.o: OPTFLAGS = -O0
# Run splat and update the timestamp # Run splat and update the timestamp
$(SPLAT_TIMESTAMP) : $(SPLAT_YAML) | $(BUILD_DIR) $(SPLAT_TIMESTAMP) : $(SPLAT_YAML) | $(BUILD_DIR)
@$(P)$(PRINT)$(GREEN)Running splat$(ENDGREEN)$(ENDLINE) @$(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) @$(P)$(PRINT)$(GREEN)Compiling C file: $(ENDGREEN)$(BLUE)$<$(ENDBLUE)$(ENDLINE)
@mkdir -p $(shell dirname $@) @mkdir -p $(shell dirname $@)
$(V)$(CC) $(CFLAGS) $(OPTFLAGS) $(CPPFLAGS) -o $@ $< $(V)$(CC) $(CFLAGS) $(OPTFLAGS) $(CPPFLAGS) -o $@ $<
# && mips-linux-gnu-objcopy -N $< $@
# Assemble .s files with modern gnu as # Assemble .s files with modern gnu as
$(BUILD_DIR)/asm/%.s.o: asm/%.s | $(BUILD_DIR) $(BUILD_DIR)/asm/%.s.o: asm/%.s | $(BUILD_DIR)

View File

@ -5,4 +5,9 @@
#include <ultra64.h> #include <ultra64.h>
typedef u8 bool;
#define false 0
#define true 1
#endif #endif

View File

@ -37,7 +37,7 @@ segments:
start: 0x1000 start: 0x1000
vram: 0x80070C00 vram: 0x80070C00
subsegments: subsegments:
- [0x1000, hasm, entry] - [0x1000, asm, entry]
- name: main - name: main
type: code type: code
@ -103,7 +103,7 @@ segments:
- [0x19E10, asm] - [0x19E10, asm]
- [0x19E30, asm, "dma_load_loop"] - [0x19E30, asm, "dma_load_loop"]
- [0x19EB0, asm] - [0x19EB0, asm]
- [0x19FC0, c] - [0x19FC0, c, "black"]
- [0x1A050, c] - [0x1A050, c]
- [0x1A4F0, asm] - [0x1A4F0, asm]
- [0x1A5B0, asm] - [0x1A5B0, asm]
@ -128,9 +128,12 @@ segments:
- [0x1B650, asm] - [0x1B650, asm]
- [0x1B7A0, asm] - [0x1B7A0, asm]
- [0x1B940, asm] - [0x1B940, asm]
- [0x1BC20, asm, "libultra/os/setintmask"]
- [0x1BCC0, asm, "libultra/io/pimgr"]
- [0x1BE50, asm, "libultra/io/epirawdma"]
- [0x1C040, asm, "libultra/io/epidma"] - [0x1C040, asm, "libultra/io/epidma"]
- [0x1C0E0, asm] - [0x1C0E0, asm]
- [0x1C130, asm, "libultra/os/cartrominit"] - [0x1C130, asm]
- [0x1C2B0, asm] - [0x1C2B0, asm]
- [0x1C670, asm, "libultra/io/piacs"] - [0x1C670, asm, "libultra/io/piacs"]
- [0x1C760, asm, "libultra/io/pidma"] - [0x1C760, asm, "libultra/io/pidma"]
@ -239,11 +242,11 @@ segments:
- [0x29E50, asm] - [0x29E50, asm]
- [0x29FC0, asm] - [0x29FC0, asm]
- [0x29FE0, asm] - [0x29FE0, asm]
- [0x2AAD0, hasm, "libultra/os/getcause"] - [0x2AAD0, asm, "libultra/os/getcause"]
- [0x2AAE0, hasm, "libultra/os/getcount"] - [0x2AAE0, asm, "libultra/os/getcount"]
- [0x2AAF0, hasm, "libultra/os/getsr"] - [0x2AAF0, asm, "libultra/os/getsr"]
- [0x2AB00, hasm, "libultra/os/setcompare"] - [0x2AB00, asm, "libultra/os/setcompare"]
- [0x2AB10, hasm, "libultra/os/setfpccsr"] - [0x2AB10, asm, "libultra/os/setfpccsr"]
- [0x2AB20, asm, "libultra/os/setsr"] - [0x2AB20, asm, "libultra/os/setsr"]
- [0x2AB30, asm] - [0x2AB30, asm]
- [0x2AB40, asm, "libultra/io/sp"] - [0x2AB40, asm, "libultra/io/sp"]
@ -253,8 +256,8 @@ segments:
- [0x2AC80, asm] - [0x2AC80, asm]
- [0x2ACD0, asm] - [0x2ACD0, asm]
- [0x2ADC0, asm, "libultra/os/destroythread"] - [0x2ADC0, asm, "libultra/os/destroythread"]
- [0x2AEA0, hasm, "libultra/os/maptlbrdb"] - [0x2AEA0, asm, "libultra/os/maptlbrdb"]
- [0x2AF00, hasm, "libultra/os/unmaptlball"] - [0x2AF00, asm, "libultra/os/unmaptlball"]
- [0x2AF50, asm, "libultra/io/vi"] - [0x2AF50, asm, "libultra/io/vi"]
- [0x2B060, asm] - [0x2B060, asm]
- [0x2B070, asm, "libultra/io/pfschecker"] - [0x2B070, asm, "libultra/io/pfschecker"]
@ -294,6 +297,9 @@ segments:
- [0x3AB20, asm] - [0x3AB20, asm]
- [0x3AB90, asm] - [0x3AB90, asm]
- [0x3ABC0, asm] - [0x3ABC0, asm]
- [0x3BEC0, asm]
# - [0x3E198, rodata, "isallocatedpointer"] # - [0x3E198, rodata, "isallocatedpointer"]
# - [0x3E278, rodata] # - [0x3E278, rodata]
@ -332,7 +338,7 @@ segments:
bss_size: 0x7F690 bss_size: 0x7F690
subsegments: subsegments:
- [0x3F1B0, c] - [0x3F1B0, c]
- [0x3FE70, asm] - [0x3FE70, c]
- [0x40640, asm] - [0x40640, asm]
- { start: 0x40E80, type: bss, vram: 0x800EB8F0 } - { start: 0x40E80, type: bss, vram: 0x800EB8F0 }
@ -413,6 +419,8 @@ segments:
# subsegments: # subsegments:
# - [0x23A3A0, asm] # - [0x23A3A0, asm]
# - [0x23B210, data]
# - { start: 0x23B220, type: bss, vram: 0x801D16C0 } # - { start: 0x23B220, type: bss, vram: 0x801D16C0 }
@ -428,7 +436,7 @@ segments:
# - [0x241610, asm] # - [0x241610, asm]
# - [0x243F20, asm] # - [0x243F20, asm]
- [0x2447A0, bin] # - [0x2447A0, bin]
# - type: code # - type: code

View File

@ -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);

View File

@ -67,9 +67,15 @@ void __start_controller_thread(void) {
INCLUDE_ASM(const s32, "1A050", __controller_thread_80089D9C); INCLUDE_ASM(const s32, "1A050", __controller_thread_80089D9C);
// INCLUDE_ASM(const s32, "1A050", initialise);
void initialise(void) { void initialise(void) {
extern s32 func_8008BD30();
extern s32 D_800E7A20;
osCreatePiManager(OS_PRIORITY_PIMGR, &MQ_800BE030, OSMESG_800BE048, sizeof(OSMESG_800BE048) / sizeof(OSMesg)); 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); INCLUDE_ASM(const s32, "1A050", romCopy);

26
src/black.c Normal file
View File

@ -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);
}

View File

@ -2,17 +2,43 @@
#include <PR/os.h> #include <PR/os.h>
void boot(void);
void idle(void* arg); void idle(void* arg);
// static OSThread IDLE_THREAD; void boot(void) {
// static char SP_THREAD_IDLE[OS_PIM_STACKSIZE]; extern OSThread THREAD_IDLE;
extern u8 SP_THREAD_IDLE[1];
// void boot(void) { osInitialize();
// osInitialize(); osCreateThread(&THREAD_IDLE, 1, idle, NULL, SP_THREAD_IDLE, 0xA);
// osCreateThread(&IDLE_THREAD, 1, idle, NULL, &SP_THREAD_IDLE, 0xA); osStartThread(&THREAD_IDLE);
// osStartThread(&IDLE_THREAD); }
// }
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); 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();
}
}
}

View File

@ -2,7 +2,7 @@
#include <PR/os.h> #include <PR/os.h>
void func_800EA488(void*); void __calls_romCopy_800EA488(void*);
// INCLUDE_ASM(const s32, "overlays/overlay0/3F1B0", func_800E9C20); // INCLUDE_ASM(const s32, "overlays/overlay0/3F1B0", func_800E9C20);
@ -103,7 +103,7 @@ void func_800EA3E4(Arg* arg0) {
if (func_80081B08(arg0->handle) == 0) { if (func_80081B08(arg0->handle) == 0) {
D_800EB0E8 = 0; D_800EB0E8 = 0;
func_800EA488(arg0); __calls_romCopy_800EA488(arg0);
return; return;
} }
if (arg0->field_0x38 == 0) { 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); // INCLUDE_ASM(const s32, "overlays/overlay0/3F1B0", func_800EA568);

View File

@ -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);

View File

@ -11,6 +11,20 @@ D_80197168 = 0x80197168; // size:0x10
D_800E7D90 = 0x800E7D90; // size:0x58 D_800E7D90 = 0x800E7D90; // size:0x58
D_800E7DE8 = 0x800E7DE8; // 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; __SCREEN_IS_NOT_BLACK = 0x800C4BD8;
__calls_osViBlack = 0x80089BE4; __calls_osViBlack = 0x80089BE4;
__set_black = 0x80089BC0; __set_black = 0x80089BC0;
@ -165,6 +179,7 @@ __calls_romCopy_8009DBB8 = 0x8009DBB8;
__calls_romCopy_8009DD38 = 0x8009DD38; __calls_romCopy_8009DD38 = 0x8009DD38;
__calls_romCopy_8009DE40 = 0x8009DE40; __calls_romCopy_8009DE40 = 0x8009DE40;
__calls_romCopy_8009DF48 = 0x8009DF48; __calls_romCopy_8009DF48 = 0x8009DF48;
__calls_romCopy_800EA488 = 0x800EA488;
__start_thread_800BE1C0 = 0x8008B0B0; __start_thread_800BE1C0 = 0x8008B0B0;
__start_thread_800B9C88 = 0x80089660; __start_thread_800B9C88 = 0x80089660;
@ -230,8 +245,6 @@ FP_800A9E84 = 0x800A9E84;
__set_fp_800A9E84 = 0x800899D0; __set_fp_800A9E84 = 0x800899D0;
romCopy = 0x80089F80; romCopy = 0x80089F80;
CART_HANDLE = 0x800E7A20;
__CART_HANDLE_800B1898 = 0x800B1898;
__GLOBAL_CONTROLLER_DATA = 0x0800C4BF0; // size:0x18 __GLOBAL_CONTROLLER_DATA = 0x0800C4BF0; // size:0x18
__GLOBAL_CONTROLLER_DATA_COPY = 0x0800AEE78; // size:0x18 __GLOBAL_CONTROLLER_DATA_COPY = 0x0800AEE78; // size:0x18
@ -356,8 +369,6 @@ guLookAtHilite = 0x800919D4;
guLookAtReflectF = 0x80091AB0; guLookAtReflectF = 0x80091AB0;
guLookAtReflect = 0x80092028; guLookAtReflect = 0x80092028;
CartRomHandle = 0x800C4C54;
osTvType = 0x80000300; // type:s32 osTvType = 0x80000300; // type:s32
osRomBase = 0x80000308; // type:s32 osRomBase = 0x80000308; // type:s32
@ -377,7 +388,6 @@ osSetThreadPri = 0x80094950;
osWritebackDCache = 0x80090140; osWritebackDCache = 0x80090140;
osWritebackDCacheAll = 0x800901C0; osWritebackDCacheAll = 0x800901C0;
osSetIntMask = 0x8008B820; osSetIntMask = 0x8008B820;
osCartRomInit = 0x8008BD30;
osStartThread = 0x80094A20; osStartThread = 0x80094A20;
osJamMesg = 0x800935A0; osJamMesg = 0x800935A0;
osRecvMesg = 0x800936E0; osRecvMesg = 0x800936E0;