Initial gcc Support (#568)

* Added GCC
This commit is contained in:
MegaMech 2024-04-15 10:53:58 -06:00 committed by GitHub
parent 3dd4c071e1
commit d9c1ebb626
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
39 changed files with 1149 additions and 678 deletions

View File

@ -2,6 +2,8 @@
include util.mk
include safe_gcc.mk
# Default target
default: all
@ -26,9 +28,13 @@ COMPILER ?= ido
$(eval $(call validate-option,COMPILER,ido gcc))
# Add debug tools with 'make DEBUG=1' and modify the macros in include/debug.h
# Run make clean first. Add '#define CRASH_SCREEN_ENHANCEMENT' to the top of main.c
# Adds crash screen enhancement and activates debug mode
# Run make clean first
DEBUG ?= 0
# Compile with GCC
GCC ?= 0
# VERSION - selects the version of the game to build
# us - builds the 1997 North American version
# eu - builds the 1997 1.1 PAL version
@ -76,6 +82,7 @@ ifeq ($(COMPILER),ido)
MIPSISET := -mips2
else ifeq ($(COMPILER),gcc)
NON_MATCHING := 1
VERSION_ASFLAGS := --defsym AVOID_UB=1
MIPSISET := -mips3
endif
@ -93,10 +100,14 @@ endif
ifeq ($(NON_MATCHING),1)
DEFINES += NON_MATCHING=1 AVOID_UB=1
VERSION_ASFLAGS := --defsym AVOID_UB=1
COMPARE := 0
endif
# GCC define is to link gcc's std lib.
ifeq ($(GCC), 1)
DEFINES += AVOID_UB=1 GCC=1
endif
# COMPARE - whether to verify the SHA-1 hash of the ROM after building
# 1 - verifies the SHA-1 hash of the selected version of the game
@ -328,7 +339,7 @@ else
CFLAGS += $(HIDE_WARNINGS) -non_shared -Wab,-r4300_mul -Xcpluscomm -Xfullwarn -signed -32
endif
ASFLAGS = -march=vr4300 -mabi=32 -I include -I $(BUILD_DIR) $(foreach d,$(DEFINES),--defsym $(d))
ASFLAGS = -march=vr4300 -mabi=32 -I include -I $(BUILD_DIR) $(VERSION_ASFLAGS) $(foreach d,$(DEFINES),--defsym $(d))
# Fills end of rom
OBJCOPYFLAGS = --pad-to=0xC00000 --gap-fill=0xFF
@ -384,6 +395,20 @@ define print
@$(PRINT) "$(GREEN)$(1) $(YELLOW)$(2)$(GREEN) -> $(BLUE)$(3)$(NO_COL)\n"
endef
# Override commmands for GCC Safe Files
ifeq ($(GCC),1)
$(BUILD_DIR)/src/main.o: OPT_FLAGS := -g
$(BUILD_DIR)/src/racing/skybox_and_splitscreen.o: OPT_FLAGS := -g
$(BUILD_DIR)/src/racing/render_courses.o: OPT_FLAGS := -g
$(SAFE_C_FILES): OPT_FLAGS := -O3
$(SAFE_C_FILES): CC := $(CROSS)gcc
$(SAFE_C_FILES): MIPSISET := -mips3
$(SAFE_C_FILES): CFLAGS := -G 0 $(OPT_FLAGS) $(TARGET_CFLAGS) $(MIPSISET) $(DEF_INC_CFLAGS) -mno-shared -march=vr4300 -mfix4300 -mabi=32 -mhard-float \
-mdivide-breaks -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-PIC -mno-abicalls -fno-strict-aliasing -fno-inline-functions \
-ffreestanding -fwrapv -Wall -Wextra -ffast-math -fno-unsafe-math-optimizations
$(SAFE_C_FILES): CC_CHECK := gcc -m32
endif
#==============================================================================#

View File

@ -25,6 +25,9 @@ glabel D_801976A0
.section .text, "ax"
.ifdef AVOID_UB
.set __osThreadTail, __osThreadTail_fix
.endif
glabel __osExceptionPreamble
/* 0D1DB0 800D11B0 3C1A800D */ lui $k0, %hi(__osException) # $k0, 0x800d
@ -46,8 +49,8 @@ glabel __osException
/* 0D1DEC 800D11EC AF400018 */ sw $zero, 0x18($k0)
/* 0D1DF0 800D11F0 40086800 */ mfc0 $t0, $13
/* 0D1DF4 800D11F4 03404025 */ move $t0, $k0
/* 0D1DF8 800D11F8 3C1A800F */ lui $k0, %hi(__osRunningThread) # $k0, 0x800f
/* 0D1DFC 800D11FC 8F5AB3B0 */ lw $k0, %lo(__osRunningThread)($k0)
/* 0D1DF8 800D11F8 3C1A800F */ lui $k0, %hi(__osThreadTail+0x10) # $k0, 0x800f
/* 0D1DFC 800D11FC 8F5AB3B0 */ lw $k0, %lo(__osThreadTail+0x10)($k0)
/* 0D1E00 800D1200 DD090020 */ ld $t1, 0x20($t0)
/* 0D1E04 800D1204 FF490020 */ sd $t1, 0x20($k0)
/* 0D1E08 800D1208 DD090118 */ ld $t1, 0x118($t0)
@ -320,8 +323,8 @@ glabel L800D15B4
/* 0D21E4 800D15E4 AD2A0000 */ sw $t2, ($t1)
/* 0D21E8 800D15E8 0C0345B9 */ jal func_800D16E4
/* 0D21EC 800D15EC 24040070 */ li $a0, 112
/* 0D21F0 800D15F0 3C0A800F */ lui $t2, %hi(__osRunQueue) # $t2, 0x800f
/* 0D21F4 800D15F4 8D4AB3A8 */ lw $t2, %lo(__osRunQueue)($t2)
/* 0D21F0 800D15F0 3C0A800F */ lui $t2, %hi(__osThreadTail+0x8) # $t2, 0x800f
/* 0D21F4 800D15F4 8D4AB3A8 */ lw $t2, %lo(__osThreadTail+0x8)($t2)
/* 0D21F8 800D15F8 2401EFFF */ li $at, -4097
/* 0D21FC 800D15FC 02018024 */ and $s0, $s0, $at
/* 0D2200 800D1600 8D5B0118 */ lw $k1, 0x118($t2)
@ -355,31 +358,31 @@ glabel L800D1630
/* 0D2264 800D1664 00000000 */ nop
.L800D1668:
glabel L800D1668
/* 0D2268 800D1668 3C0A800F */ lui $t2, %hi(__osRunQueue) # $t2, 0x800f
/* 0D226C 800D166C 8D4AB3A8 */ lw $t2, %lo(__osRunQueue)($t2)
/* 0D2268 800D1668 3C0A800F */ lui $t2, %hi(__osThreadTail+0x8) # $t2, 0x800f
/* 0D226C 800D166C 8D4AB3A8 */ lw $t2, %lo(__osThreadTail+0x8)($t2)
/* 0D2270 800D1670 8F490004 */ lw $t1, 4($k0)
/* 0D2274 800D1674 8D4B0004 */ lw $t3, 4($t2)
/* 0D2278 800D1678 012B082A */ slt $at, $t1, $t3
/* 0D227C 800D167C 10200007 */ beqz $at, .L800D169C
/* 0D2280 800D1680 00000000 */ nop
/* 0D2284 800D1684 3C04800F */ lui $a0, %hi(__osRunQueue) # $a0, 0x800f
/* 0D2284 800D1684 3C04800F */ lui $a0, %hi(__osThreadTail+0x8) # $a0, 0x800f
/* 0D2288 800D1688 03402825 */ move $a1, $k0
/* 0D228C 800D168C 0C034633 */ jal __osEnqueueThread
/* 0D2290 800D1690 2484B3A8 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, -0x4c58
/* 0D2290 800D1690 2484B3A8 */ addiu $a0, %lo(__osThreadTail+0x8) # addiu $a0, $a0, -0x4c58
/* 0D2294 800D1694 08034649 */ j __osDispatchThread
/* 0D2298 800D1698 00000000 */ nop
.L800D169C:
/* 0D229C 800D169C 3C09800F */ lui $t1, %hi(__osRunQueue) # $t1, 0x800f
/* 0D22A0 800D16A0 2529B3A8 */ addiu $t1, %lo(__osRunQueue) # addiu $t1, $t1, -0x4c58
/* 0D229C 800D169C 3C09800F */ lui $t1, %hi(__osThreadTail+0x8) # $t1, 0x800f
/* 0D22A0 800D16A0 2529B3A8 */ addiu $t1, %lo(__osThreadTail+0x8) # addiu $t1, $t1, -0x4c58
/* 0D22A4 800D16A4 8D2A0000 */ lw $t2, ($t1)
/* 0D22A8 800D16A8 AF4A0000 */ sw $t2, ($k0)
/* 0D22AC 800D16AC 08034649 */ j __osDispatchThread
/* 0D22B0 800D16B0 AD3A0000 */ sw $k0, ($t1)
.L800D16B4:
/* 0D22B4 800D16B4 3C01800F */ lui $at, %hi(__osFaultedThread) # $at, 0x800f
/* 0D22B8 800D16B8 AC3AB3B4 */ sw $k0, %lo(__osFaultedThread)($at)
/* 0D22B4 800D16B4 3C01800F */ lui $at, %hi(__osThreadTail+0x14) # $at, 0x800f
/* 0D22B8 800D16B8 AC3AB3B4 */ sw $k0, %lo(__osThreadTail+0x14)($at)
/* 0D22BC 800D16BC 24090001 */ li $t1, 1
/* 0D22C0 800D16C0 A7490010 */ sh $t1, 0x10($k0)
/* 0D22C4 800D16C4 24090002 */ li $t1, 2
@ -433,10 +436,10 @@ glabel func_800D16E4
/* 0D2374 800D1774 0C034645 */ jal __osPopThread
/* 0D2378 800D1778 01202025 */ move $a0, $t1
/* 0D237C 800D177C 00405025 */ move $t2, $v0
/* 0D2380 800D1780 3C04800F */ lui $a0, %hi(__osRunQueue) # $a0, 0x800f
/* 0D2380 800D1780 3C04800F */ lui $a0, %hi(__osThreadTail+0x8) # $a0, 0x800f
/* 0D2384 800D1784 01402825 */ move $a1, $t2
/* 0D2388 800D1788 0C034633 */ jal __osEnqueueThread
/* 0D238C 800D178C 2484B3A8 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, -0x4c58
/* 0D238C 800D178C 2484B3A8 */ addiu $a0, %lo(__osThreadTail+0x8) # addiu $a0, $a0, -0x4c58
.L800D1790:
/* 0D2390 800D1790 02400008 */ jr $s2
/* 0D2394 800D1794 00000000 */ nop
@ -455,8 +458,8 @@ glabel func_800D16E4
/* 0D23C4 800D17C4 1000FFB5 */ b .L800D169C
/* 0D23C8 800D17C8 AF5B0118 */ sw $k1, 0x118($k0)
glabel __osEnqueueAndYield
/* 0D23CC 800D17CC 3C05800F */ lui $a1, %hi(__osRunningThread) # $a1, 0x800f
/* 0D23D0 800D17D0 8CA5B3B0 */ lw $a1, %lo(__osRunningThread)($a1)
/* 0D23CC 800D17CC 3C05800F */ lui $a1, %hi(__osThreadTail+0x10) # $a1, 0x800f
/* 0D23D0 800D17D0 8CA5B3B0 */ lw $a1, %lo(__osThreadTail+0x10)($a1)
/* 0D23D4 800D17D4 40086000 */ mfc0 $t0, $12
/* 0D23D8 800D17D8 8CBB0018 */ lw $k1, 0x18($a1)
/* 0D23DC 800D17DC 35080002 */ ori $t0, $t0, 2
@ -553,11 +556,11 @@ glabel __osPopThread
/* 0D2520 800D1920 AC990000 */ sw $t9, ($a0)
glabel __osDispatchThread
/* 0D2524 800D1924 3C04800F */ lui $a0, %hi(__osRunQueue) # $a0, 0x800f
/* 0D2524 800D1924 3C04800F */ lui $a0, %hi(__osThreadTail+0x8) # $a0, 0x800f
/* 0D2528 800D1928 0C034645 */ jal __osPopThread
/* 0D252C 800D192C 2484B3A8 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, -0x4c58
/* 0D2530 800D1930 3C01800F */ lui $at, %hi(__osRunningThread) # $at, 0x800f
/* 0D2534 800D1934 AC22B3B0 */ sw $v0, %lo(__osRunningThread)($at)
/* 0D252C 800D192C 2484B3A8 */ addiu $a0, %lo(__osThreadTail+0x8) # addiu $a0, $a0, -0x4c58
/* 0D2530 800D1930 3C01800F */ lui $at, %hi(__osThreadTail+0x10) # $at, 0x800f
/* 0D2534 800D1934 AC22B3B0 */ sw $v0, %lo(__osThreadTail+0x10)($at)
/* 0D2538 800D1938 24080004 */ li $t0, 4
/* 0D253C 800D193C A4480010 */ sh $t0, 0x10($v0)
/* 0D2540 800D1940 0040D025 */ move $k0, $v0

100
asm/os/llmuldiv_gcc.s Normal file
View File

@ -0,0 +1,100 @@
# assembler directives
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.set gp=64
.include "macros.inc"
.section .text, "ax"
/* -------------------------------------------------------------------------------------- */
/* need to asm these functions because lib32gcc-7-dev-mips-cross does not exist so we */
/* cannot naturally link a libgcc variant for this target given this architecture and */
/* compiler. Until we have a good workaround with a gcc target that doesn't involve */
/* assuming a 32-bit to 64-bit change, we have to encode these functions as raw assembly */
/* for it to compile. */
/* -------------------------------------------------------------------------------------- */
/* TODO: Is there a non-insane way to fix this hack that doesn't involve the user compiling */
/* a library themselves? */
glabel __umoddi3
sw $a0, ($sp)
sw $a1, 4($sp)
sw $a2, 8($sp)
sw $a3, 0xc($sp)
ld $t7, 8($sp)
ld $t6, ($sp)
ddivu $zero, $t6, $t7
bnez $t7, .L80324144
nop
break 7
.L80324144:
mfhi $v0
dsll32 $v1, $v0, 0
dsra32 $v1, $v1, 0
jr $ra
dsra32 $v0, $v0, 0
glabel __udivdi3
sw $a0, ($sp)
sw $a1, 4($sp)
sw $a2, 8($sp)
sw $a3, 0xc($sp)
ld $t7, 8($sp)
ld $t6, ($sp)
ddivu $zero, $t6, $t7
bnez $t7, .L80324180
nop
break 7
.L80324180:
mflo $v0
dsll32 $v1, $v0, 0
dsra32 $v1, $v1, 0
jr $ra
dsra32 $v0, $v0, 0
glabel __moddi3
sw $a0, ($sp)
sw $a1, 4($sp)
sw $a2, 8($sp)
sw $a3, 0xc($sp)
ld $t7, 8($sp)
ld $t6, ($sp)
ddivu $zero, $t6, $t7
bnez $t7, .L803241E8
nop
break 7
.L803241E8:
mfhi $v0
dsll32 $v1, $v0, 0
dsra32 $v1, $v1, 0
jr $ra
dsra32 $v0, $v0, 0
glabel __divdi3
sw $a0, ($sp)
sw $a1, 4($sp)
sw $a2, 8($sp)
sw $a3, 0xc($sp)
ld $t7, 8($sp)
ld $t6, ($sp)
ddiv $zero, $t6, $t7
nop
bnez $t7, .L80324228
nop
break 7
.L80324228:
daddiu $at, $zero, -1
bne $t7, $at, .L80324244
daddiu $at, $zero, 1
dsll32 $at, $at, 0x1f
bne $t6, $at, .L80324244
nop
break 6
.L80324244:
mflo $v0
dsll32 $v1, $v0, 0
dsra32 $v1, $v1, 0
jr $ra
dsra32 $v0, $v0, 0

View File

@ -730,8 +730,8 @@ extern s32 osPfsNumFiles(OSPfs *, s32 *, s32 *);
extern s32 osEepromProbe(OSMesgQueue *);
extern s32 osEepromRead(OSMesgQueue *, u8, u8 *);
extern s32 osEepromWrite(OSMesgQueue *, u8, u8 *);
extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, int);
extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, int);
extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, s32);
extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, s32);
/* MOTOR interface */

View File

@ -38,8 +38,14 @@
* D-pad DOWN = MARIO
*
*/
#define DEBUG_MODE 0
#define DEBUG_MENU 1
#if defined(GCC) || defined(DEBUG)
#define DEBUG_MODE 1
#define DEBUG_MENU 2
#else
#define DEBUG_MODE 0
#define DEBUG_MENU 1
#endif
#define HOLD_ALL_DPAD_AND_C_BUTTONS (U_JPAD | L_JPAD | R_JPAD | D_JPAD | U_CBUTTONS | L_CBUTTONS | R_CBUTTONS | D_CBUTTONS)
/**

585
mk64.ld
View File

@ -46,262 +46,276 @@ SECTIONS
{
BUILD_DIR/asm/entry.o(.text);
BUILD_DIR/src/main.o(.text*);
BUILD_DIR/src/code_800029B0.o(.text);
BUILD_DIR/src/profiler.o(.text);
BUILD_DIR/src/crash_screen.o(.text);
BUILD_DIR/src/code_80004740.o(.text);
BUILD_DIR/src/staff_ghosts.o(.text);
BUILD_DIR/src/code_800029B0.o(.text*);
BUILD_DIR/src/profiler.o(.text*);
BUILD_DIR/src/crash_screen.o(.text*);
BUILD_DIR/src/code_80004740.o(.text*);
BUILD_DIR/src/staff_ghosts.o(.text*);
BUILD_DIR/asm/unused_overflow_check.o(.text);
BUILD_DIR/src/code_80005FD0.jp.o(.text);
BUILD_DIR/src/camera.o(.text);
BUILD_DIR/src/render_player.o(.text);
BUILD_DIR/src/kart_dma.o(.text);
BUILD_DIR/src/player_controller.o(.text);
BUILD_DIR/src/spawn_players.o(.text);
BUILD_DIR/src/code_8003DC40.o(.text);
BUILD_DIR/src/code_80005FD0.jp.o(.text*);
BUILD_DIR/src/camera.o(.text*);
BUILD_DIR/src/render_player.o(.text*);
BUILD_DIR/src/kart_dma.o(.text*);
BUILD_DIR/src/player_controller.o(.text*);
BUILD_DIR/src/spawn_players.o(.text*);
BUILD_DIR/src/code_8003DC40.o(.text*);
BUILD_DIR/asm/unused_mio0_decode.o(.text);
BUILD_DIR/asm/mio0_decode.o(.text);
BUILD_DIR/asm/tkmk00_decode.o(.text);
BUILD_DIR/src/gbiMacro.o(.text);
BUILD_DIR/src/math_util_2.o(.text);
BUILD_DIR/src/render_objects.o(.text);
BUILD_DIR/src/code_80057C60.o(.text);
BUILD_DIR/src/code_8006E9C0.o(.text);
BUILD_DIR/src/update_objects.o(.text);
BUILD_DIR/src/code_80086E70.o(.text);
BUILD_DIR/src/effects.o(.text);
BUILD_DIR/src/code_80091440.o(.text);
BUILD_DIR/src/code_80091750.jp.o(.text);
BUILD_DIR/src/code_800AF9B0.o(.text);
BUILD_DIR/src/menus.o(.text);
BUILD_DIR/src/save.o(.text);
BUILD_DIR/src/audio/synthesis.o(.text);
BUILD_DIR/src/audio/heap.o(.text);
BUILD_DIR/src/audio/load.o(.text);
BUILD_DIR/src/audio/playback.o(.text);
BUILD_DIR/src/audio/effects.o(.text);
BUILD_DIR/src/audio/seqplayer.o(.text);
BUILD_DIR/src/audio/external.o(.text);
BUILD_DIR/src/audio/port_eu.o(.text);
BUILD_DIR/src/gbiMacro.o(.text*);
BUILD_DIR/src/math_util_2.o(.text*);
BUILD_DIR/src/render_objects.o(.text*);
BUILD_DIR/src/code_80057C60.o(.text*);
BUILD_DIR/src/code_8006E9C0.o(.text*);
BUILD_DIR/src/update_objects.o(.text*);
BUILD_DIR/src/code_80086E70.o(.text*);
BUILD_DIR/src/effects.o(.text*);
BUILD_DIR/src/code_80091440.o(.text*);
BUILD_DIR/src/code_80091750.jp.o(.text*);
BUILD_DIR/src/code_800AF9B0.o(.text*);
BUILD_DIR/src/menus.o(.text*);
BUILD_DIR/src/save.o(.text*);
BUILD_DIR/src/audio/synthesis.o(.text*);
BUILD_DIR/src/audio/heap.o(.text*);
BUILD_DIR/src/audio/load.o(.text*);
BUILD_DIR/src/audio/playback.o(.text*);
BUILD_DIR/src/audio/effects.o(.text*);
BUILD_DIR/src/audio/seqplayer.o(.text*);
BUILD_DIR/src/audio/external.o(.text*);
BUILD_DIR/src/audio/port_eu.o(.text*);
#if DEBUG
BUILD_DIR/src/os/osCartRomInit.o(.text);
BUILD_DIR/src/debug/crash_screen_enhancement.o(.text);
BUILD_DIR/src/debug/debug.o(.text);
BUILD_DIR/src/os/sprintf.o(.text);
BUILD_DIR/src/os/is_debug.o(.text);
BUILD_DIR/src/os/osCartRomInit.o(.text*);
BUILD_DIR/src/debug/crash_screen_enhancement.o(.text*);
BUILD_DIR/src/debug/debug.o(.text*);
BUILD_DIR/src/os/sprintf.o(.text*);
BUILD_DIR/src/os/is_debug.o(.text*);
#endif
BUILD_DIR/src/os/osCreateThread.o(.text);
#ifdef VERSION_EU
. += 0x40;
#endif
BUILD_DIR/src/os/osInitialize.o(.text);
BUILD_DIR/src/os/osStartThread.o(.text);
BUILD_DIR/src/os/osCreateViManager.o(.text);
BUILD_DIR/src/os/osInitialize.o(.text*);
BUILD_DIR/src/os/osStartThread.o(.text*);
BUILD_DIR/src/os/osCreateViManager.o(.text*);
BUILD_DIR/asm/os/parameters.o(.text);
BUILD_DIR/src/os/osViSetMode.o(.text);
BUILD_DIR/src/os/osViBlack.o(.text);
BUILD_DIR/src/os/osViSetSpecialFeatures.o(.text);
BUILD_DIR/src/os/osCreatePiManager.o(.text);
BUILD_DIR/src/os/osSetThreadPri.o(.text);
BUILD_DIR/src/os/osCreateMesgQueue.o(.text);
BUILD_DIR/src/os/osViSetEvent.o(.text);
BUILD_DIR/src/os/osSetEventMesg.o(.text);
BUILD_DIR/src/os/osSpTaskLoadGo.o(.text);
BUILD_DIR/src/os/osContInit.o(.text);
BUILD_DIR/src/os/osContStartReadData.o(.text);
BUILD_DIR/src/os/osRecvMesg.o(.text);
BUILD_DIR/src/os/osViSetMode.o(.text*);
BUILD_DIR/src/os/osViBlack.o(.text*);
BUILD_DIR/src/os/osViSetSpecialFeatures.o(.text*);
BUILD_DIR/src/os/osCreatePiManager.o(.text*);
BUILD_DIR/src/os/osSetThreadPri.o(.text*);
BUILD_DIR/src/os/osCreateMesgQueue.o(.text*);
BUILD_DIR/src/os/osViSetEvent.o(.text*);
BUILD_DIR/src/os/osSetEventMesg.o(.text*);
BUILD_DIR/src/os/osSpTaskLoadGo.o(.text*);
BUILD_DIR/src/os/osContInit.o(.text*);
BUILD_DIR/src/os/osContStartReadData.o(.text*);
BUILD_DIR/src/os/osRecvMesg.o(.text*);
BUILD_DIR/asm/os/osWritebackDCacheAll.o(.text);
BUILD_DIR/src/os/osSendMesg.o(.text);
BUILD_DIR/src/os/osViSwapBuffer.o(.text);
BUILD_DIR/src/os/osSendMesg.o(.text*);
BUILD_DIR/src/os/osViSwapBuffer.o(.text*);
BUILD_DIR/asm/os/bzero.o(.text);
BUILD_DIR/asm/os/osInvalICache.o(.text);
BUILD_DIR/asm/os/osInvalDCache.o(.text);
BUILD_DIR/src/os/osPiStartDma.o(.text);
BUILD_DIR/src/os/osSpTaskYield.o(.text);
BUILD_DIR/src/os/osSpTaskYielded.o(.text);
BUILD_DIR/src/os/osGetTime.o(.text);
BUILD_DIR/src/os/math/llmuldiv.o(.text);
BUILD_DIR/src/os/__osGetCurrFaultedThread.o(.text);
BUILD_DIR/src/os/osPiStartDma.o(.text*);
BUILD_DIR/src/os/osSpTaskYield.o(.text*);
BUILD_DIR/src/os/osSpTaskYielded.o(.text*);
BUILD_DIR/src/os/osGetTime.o(.text*);
BUILD_DIR/src/os/math/llmuldiv.o(.text*);
#if GCC
BUILD_DIR/asm/os/llmuldiv_gcc.o(.text);
#endif
BUILD_DIR/src/os/__osGetCurrFaultedThread.o(.text*);
BUILD_DIR/asm/os/sqrtf.o(.text);
BUILD_DIR/src/os/guOrthoF.o(.text);
BUILD_DIR/src/os/osSetTime.o(.text);
BUILD_DIR/src/os/osEepromProbe.o(.text);
BUILD_DIR/src/os/osPfsIsPlug.o(.text);
BUILD_DIR/src/os/osPfsInit.o(.text);
BUILD_DIR/src/os/osPfsNumFiles.o(.text);
BUILD_DIR/src/os/osPfsFileState.o(.text);
BUILD_DIR/src/os/osPfsFreeBlocks.o(.text);
BUILD_DIR/src/os/guRotateF.o(.text);
BUILD_DIR/src/os/guScaleF.o(.text);
BUILD_DIR/src/os/guPerspectiveF.o(.text);
BUILD_DIR/src/os/guLookAtF.o(.text);
BUILD_DIR/src/os/guTranslateF.o(.text);
BUILD_DIR/src/os/osSyncPrintf.o(.text);
BUILD_DIR/src/os/guMtxCatL.o(.text);
BUILD_DIR/src/os/osPfsSearchFile.o(.text);
BUILD_DIR/src/os/osPfsDeleteFile.o(.text);
BUILD_DIR/src/os/osEepromLongWrite.o(.text);
BUILD_DIR/src/os/osEepromLongRead.o(.text);
BUILD_DIR/src/os/osPfsReadWriteFile.o(.text);
BUILD_DIR/src/os/osPfsAllocateFile.o(.text);
BUILD_DIR/src/os/osAiSetFrequency.o(.text);
BUILD_DIR/src/os/osAiGetLength.o(.text);
BUILD_DIR/src/os/osAiSetNextBuffer.o(.text);
BUILD_DIR/src/os/guOrthoF.o(.text*);
BUILD_DIR/src/os/osSetTime.o(.text*);
BUILD_DIR/src/os/osEepromProbe.o(.text*);
BUILD_DIR/src/os/osPfsIsPlug.o(.text*);
BUILD_DIR/src/os/osPfsInit.o(.text*);
BUILD_DIR/src/os/osPfsNumFiles.o(.text*);
BUILD_DIR/src/os/osPfsFileState.o(.text*);
BUILD_DIR/src/os/osPfsFreeBlocks.o(.text*);
BUILD_DIR/src/os/guRotateF.o(.text*);
BUILD_DIR/src/os/guScaleF.o(.text*);
BUILD_DIR/src/os/guPerspectiveF.o(.text*);
BUILD_DIR/src/os/guLookAtF.o(.text*);
BUILD_DIR/src/os/guTranslateF.o(.text*);
BUILD_DIR/src/os/osSyncPrintf.o(.text*);
BUILD_DIR/src/os/guMtxCatL.o(.text*);
BUILD_DIR/src/os/osPfsSearchFile.o(.text*);
BUILD_DIR/src/os/osPfsDeleteFile.o(.text*);
BUILD_DIR/src/os/osEepromLongWrite.o(.text*);
BUILD_DIR/src/os/osEepromLongRead.o(.text*);
BUILD_DIR/src/os/osPfsReadWriteFile.o(.text*);
BUILD_DIR/src/os/osPfsAllocateFile.o(.text*);
BUILD_DIR/src/os/osAiSetFrequency.o(.text*);
BUILD_DIR/src/os/osAiGetLength.o(.text*);
BUILD_DIR/src/os/osAiSetNextBuffer.o(.text*);
BUILD_DIR/asm/os/osGetCount.o(.text);
BUILD_DIR/asm/os/__osException.o(.text);
BUILD_DIR/asm/os/__osDisableInt.o(.text);
BUILD_DIR/asm/os/__osRestoreInt.o(.text);
BUILD_DIR/src/os/__osDequeueThread.o(.text);
BUILD_DIR/src/os/__osDequeueThread.o(.text*);
BUILD_DIR/asm/os/__osSetSR.o(.text);
BUILD_DIR/asm/os/__osGetSR.o(.text);
BUILD_DIR/asm/os/__osSetFpcCsr.o(.text);
BUILD_DIR/src/os/__osSiRawReadIo.o(.text);
BUILD_DIR/src/os/__osSiRawWriteIo.o(.text);
BUILD_DIR/src/os/__osSiRawReadIo.o(.text*);
BUILD_DIR/src/os/__osSiRawWriteIo.o(.text*);
BUILD_DIR/asm/os/osWritebackDCache.o(.text);
BUILD_DIR/asm/os/osMapTLBRdb.o(.text);
BUILD_DIR/src/os/osPiRawReadIo.o(.text);
BUILD_DIR/src/os/__osSetHWIntrRoutine.o(.text);
BUILD_DIR/src/os/__osLeoInterrupt.o(.text);
BUILD_DIR/src/os/osTimer.o(.text);
BUILD_DIR/src/os/osGetThreadPri.o(.text);
BUILD_DIR/src/os/__osViInit.o(.text);
BUILD_DIR/src/os/__osViGetCurrentContext.o(.text);
BUILD_DIR/src/os/__osViSwapContext.o(.text);
BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.text);
BUILD_DIR/src/os/osPiRawStartDma.o(.text);
BUILD_DIR/src/os/osEPiRawStartDma.o(.text);
BUILD_DIR/src/os/__osDevMgrMain.o(.text);
BUILD_DIR/src/os/osPiRawReadIo.o(.text*);
BUILD_DIR/src/os/__osSetHWIntrRoutine.o(.text*);
BUILD_DIR/src/os/__osLeoInterrupt.o(.text*);
BUILD_DIR/src/os/osTimer.o(.text*);
BUILD_DIR/src/os/osGetThreadPri.o(.text*);
BUILD_DIR/src/os/__osViInit.o(.text*);
BUILD_DIR/src/os/__osViGetCurrentContext.o(.text*);
BUILD_DIR/src/os/__osViSwapContext.o(.text*);
BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.text*);
BUILD_DIR/src/os/osPiRawStartDma.o(.text*);
BUILD_DIR/src/os/osEPiRawStartDma.o(.text*);
BUILD_DIR/src/os/__osDevMgrMain.o(.text*);
BUILD_DIR/asm/os/bcopy.o(.text);
BUILD_DIR/src/os/osVirtualToPhysical.o(.text);
BUILD_DIR/src/os/__osSpSetStatus.o(.text);
BUILD_DIR/src/os/__osSpSetPc.o(.text);
BUILD_DIR/src/os/__osSpRawStartDma.o(.text);
BUILD_DIR/src/os/__osSpDeviceBusy.o(.text);
BUILD_DIR/src/os/osSetTimer.o(.text);
BUILD_DIR/src/os/__osSiRawStartDma.o(.text);
BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.text);
BUILD_DIR/src/os/osJamMesg.o(.text);
BUILD_DIR/src/os/osPiGetCmdQueue.o(.text);
BUILD_DIR/src/os/__osSpGetStatus.o(.text);
BUILD_DIR/src/os/guMtxF2L.o(.text);
BUILD_DIR/src/os/osEepromWrite.o(.text);
BUILD_DIR/src/os/contpfs.o(.text);
BUILD_DIR/src/os/osPfsChecker.o(.text);
BUILD_DIR/src/os/contramread.o(.text);
BUILD_DIR/src/os/guNormalize.o(.text);
BUILD_DIR/src/os/math/sinf.o(.text);
BUILD_DIR/src/os/math/cosf.o(.text);
BUILD_DIR/src/os/_Printf.o(.text);
BUILD_DIR/src/os/guMtxCatF.o(.text);
BUILD_DIR/src/os/contramwrite.o(.text);
BUILD_DIR/src/os/osEepromRead.o(.text);
BUILD_DIR/src/os/__osAiDeviceBusy.o(.text);
BUILD_DIR/src/os/osVirtualToPhysical.o(.text*);
BUILD_DIR/src/os/__osSpSetStatus.o(.text*);
BUILD_DIR/src/os/__osSpSetPc.o(.text*);
BUILD_DIR/src/os/__osSpRawStartDma.o(.text*);
BUILD_DIR/src/os/__osSpDeviceBusy.o(.text*);
BUILD_DIR/src/os/osSetTimer.o(.text*);
BUILD_DIR/src/os/__osSiRawStartDma.o(.text*);
BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.text*);
BUILD_DIR/src/os/osJamMesg.o(.text*);
BUILD_DIR/src/os/osPiGetCmdQueue.o(.text*);
BUILD_DIR/src/os/__osSpGetStatus.o(.text*);
BUILD_DIR/src/os/guMtxF2L.o(.text*);
BUILD_DIR/src/os/osEepromWrite.o(.text*);
BUILD_DIR/src/os/contpfs.o(.text*);
BUILD_DIR/src/os/osPfsChecker.o(.text*);
BUILD_DIR/src/os/contramread.o(.text*);
BUILD_DIR/src/os/guNormalize.o(.text*);
BUILD_DIR/src/os/math/sinf.o(.text*);
BUILD_DIR/src/os/math/cosf.o(.text*);
BUILD_DIR/src/os/_Printf.o(.text*);
BUILD_DIR/src/os/guMtxCatF.o(.text*);
BUILD_DIR/src/os/contramwrite.o(.text*);
BUILD_DIR/src/os/osEepromRead.o(.text*);
BUILD_DIR/src/os/__osAiDeviceBusy.o(.text*);
BUILD_DIR/asm/os/osSetIntMask.o(.text);
BUILD_DIR/src/os/osDestroyThread.o(.text);
BUILD_DIR/src/os/__osSiDeviceBusy.o(.text);
BUILD_DIR/src/os/osLeoDiskInit.o(.text);
BUILD_DIR/src/os/osDestroyThread.o(.text*);
BUILD_DIR/src/os/__osSiDeviceBusy.o(.text*);
BUILD_DIR/src/os/osLeoDiskInit.o(.text*);
BUILD_DIR/asm/os/__osSetCompare.o(.text);
BUILD_DIR/src/os/__osResetGlobalIntMask.o(.text);
BUILD_DIR/src/os/__osEPiRawWriteIo.o(.text);
BUILD_DIR/src/os/osYieldThread.o(.text);
BUILD_DIR/src/os/__osResetGlobalIntMask.o(.text*);
BUILD_DIR/src/os/__osEPiRawWriteIo.o(.text*);
BUILD_DIR/src/os/osYieldThread.o(.text*);
BUILD_DIR/asm/os/__osProbeTLB.o(.text);
BUILD_DIR/src/os/crc.o(.text);
BUILD_DIR/src/os/string.o(.text);
BUILD_DIR/src/os/_Litob.o(.text);
BUILD_DIR/src/os/_Ldtob.o(.text);
BUILD_DIR/src/os/ldiv.o(.text);
BUILD_DIR/src/os/crc.o(.text*);
BUILD_DIR/src/os/string.o(.text*);
BUILD_DIR/src/os/_Litob.o(.text*);
BUILD_DIR/src/os/_Ldtob.o(.text*);
BUILD_DIR/src/os/ldiv.o(.text*);
BUILD_DIR/data/rsp.o(.text);
BUILD_DIR/src/main.o(.data*);
BUILD_DIR/src/code_800029B0.o(.data);
BUILD_DIR/src/profiler.o(.data);
BUILD_DIR/src/crash_screen.o(.data);
BUILD_DIR/src/staff_ghosts.o(.data);
BUILD_DIR/src/data/path_spawn_metadata.o(.data);
BUILD_DIR/src/camera.o(.data);
BUILD_DIR/src/render_player.o(.data);
BUILD_DIR/src/kart_dma.o(.data);
BUILD_DIR/src/data/kart_attributes.o(.data);
BUILD_DIR/src/player_controller.o(.data);
BUILD_DIR/src/spawn_players.o(.data);
BUILD_DIR/src/update_objects.o(.data);
BUILD_DIR/assets/code/data_800E45C0/data_800E45C0.o(.data);
BUILD_DIR/src/code_80057C60.o(.data);
BUILD_DIR/src/data/some_data.o(.data);
BUILD_DIR/src/effects.o(.data);
BUILD_DIR/src/code_80091440.o(.data);
BUILD_DIR/src/code_80091750.jp.o(.data);
BUILD_DIR/src/code_800AF9B0.o(.data);
BUILD_DIR/src/menus.o(.data);
BUILD_DIR/src/save.o(.data);
BUILD_DIR/assets/code/data_800E8700/data_800E8700.o(.data);
BUILD_DIR/src/audio/synthesis.o(.data);
BUILD_DIR/src/audio/heap.o(.data);
BUILD_DIR/src/audio/load.o(.data);
BUILD_DIR/src/audio/playback.o(.data);
BUILD_DIR/src/audio/effects.o(.data);
BUILD_DIR/src/code_800029B0.o(.data*);
BUILD_DIR/src/profiler.o(.data*);
BUILD_DIR/src/crash_screen.o(.data*);
BUILD_DIR/src/staff_ghosts.o(.data*);
BUILD_DIR/src/data/path_spawn_metadata.o(.data*);
BUILD_DIR/src/camera.o(.data*);
BUILD_DIR/src/render_player.o(.data*);
BUILD_DIR/src/kart_dma.o(.data*);
BUILD_DIR/src/data/kart_attributes.o(.data*);
BUILD_DIR/src/player_controller.o(.data*);
BUILD_DIR/src/spawn_players.o(.data*);
BUILD_DIR/src/update_objects.o(.data*);
BUILD_DIR/assets/code/data_800E45C0/data_800E45C0.o(.data*);
BUILD_DIR/src/code_80057C60.o(.data*);
BUILD_DIR/src/data/some_data.o(.data*);
BUILD_DIR/src/effects.o(.data*);
BUILD_DIR/src/code_80091440.o(.data*);
BUILD_DIR/src/code_80091750.jp.o(.data*);
BUILD_DIR/src/code_800AF9B0.o(.data*);
BUILD_DIR/src/menus.o(.data*);
BUILD_DIR/src/save.o(.data*);
BUILD_DIR/assets/code/data_800E8700/data_800E8700.o(.data*);
BUILD_DIR/src/audio/synthesis.o(.data*);
BUILD_DIR/src/audio/heap.o(.data*);
BUILD_DIR/src/audio/load.o(.data*);
BUILD_DIR/src/audio/playback.o(.data*);
BUILD_DIR/src/audio/effects.o(.data*);
#if DEBUG
BUILD_DIR/src/debug/crash_screen_enhancement.o(.data);
BUILD_DIR/src/debug/debug.o(.data);
BUILD_DIR/src/os/sprintf.o(.data);
BUILD_DIR/src/debug/crash_screen_enhancement.o(.data*);
BUILD_DIR/src/debug/debug.o(.data*);
BUILD_DIR/src/os/sprintf.o(.data*);
#endif
BUILD_DIR/src/audio/seqplayer.o(.data);
BUILD_DIR/src/audio/external.o(.data);
BUILD_DIR/src/audio/port_eu.o(.data);
BUILD_DIR/src/audio/audio_session_presets.o(.data);
BUILD_DIR/src/audio/seqplayer.o(.data*);
BUILD_DIR/src/audio/external.o(.data*);
BUILD_DIR/src/audio/port_eu.o(.data*);
BUILD_DIR/src/audio/audio_session_presets.o(.data*);
BUILD_DIR/src/os/osInitialize.o(.data*);
BUILD_DIR/src/os/osCreateViManager.o(.data);
BUILD_DIR/src/os/osViTable.o(.data);
BUILD_DIR/src/os/osCreatePiManager.o(.data);
BUILD_DIR/src/os/osContInit.o(.data);
BUILD_DIR/src/os/osAiSetNextBuffer.o(.data);
BUILD_DIR/src/os/__osSetHWIntrRoutine.o(.data);
BUILD_DIR/src/os/__osDequeueThread.o(.data);
BUILD_DIR/src/os/osTimer.o(.data);
BUILD_DIR/src/os/__osViInit.o(.data);
BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.data);
BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.data);
BUILD_DIR/src/os/_Printf.o(.data);
BUILD_DIR/src/os/osViData.o(.data);
BUILD_DIR/src/os/_Litob.o(.data);
BUILD_DIR/src/os/osCreateViManager.o(.data*);
BUILD_DIR/src/os/osViTable.o(.data*);
BUILD_DIR/src/os/osCreatePiManager.o(.data*);
BUILD_DIR/src/os/osContInit.o(.data*);
BUILD_DIR/src/os/osAiSetNextBuffer.o(.data*);
BUILD_DIR/src/os/__osSetHWIntrRoutine.o(.data*);
BUILD_DIR/src/os/__osDequeueThread.o(.data*);
BUILD_DIR/src/os/osTimer.o(.data*);
BUILD_DIR/src/os/__osViInit.o(.data*);
BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.data*);
BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.data*);
BUILD_DIR/src/os/_Printf.o(.data*);
BUILD_DIR/src/os/osViData.o(.data*);
BUILD_DIR/src/os/_Litob.o(.data*);
BUILD_DIR/src/main.o(.rodata*);
BUILD_DIR/src/code_800029B0.o(.rodata);
BUILD_DIR/src/code_80005FD0.jp.o(.rodata);
BUILD_DIR/src/camera.o(.rodata);
BUILD_DIR/src/render_player.o(.rodata);
BUILD_DIR/src/player_controller.o(.rodata);
BUILD_DIR/src/spawn_players.o(.rodata);
BUILD_DIR/src/code_8003DC40.o(.rodata);
BUILD_DIR/src/render_objects.o(.rodata);
BUILD_DIR/src/code_80057C60.o(.rodata);
BUILD_DIR/src/code_8006E9C0.o(.rodata);
BUILD_DIR/src/update_objects.o(.rodata);
BUILD_DIR/src/code_80086E70.o(.rodata);
BUILD_DIR/src/effects.o(.rodata);
BUILD_DIR/src/code_80091750.jp.o(.rodata);
BUILD_DIR/src/code_800AF9B0.o(.rodata);
BUILD_DIR/src/menus.o(.rodata);
BUILD_DIR/src/save.o(.rodata);
BUILD_DIR/src/audio/heap.o(.rodata);
BUILD_DIR/src/audio/load.o(.rodata);
BUILD_DIR/src/audio/playback.o(.rodata);
BUILD_DIR/src/audio/effects.o(.rodata);
BUILD_DIR/src/audio/seqplayer.o(.rodata);
BUILD_DIR/src/audio/external.o(.rodata);
BUILD_DIR/src/audio/port_eu.o(.rodata);
BUILD_DIR/src/code_80004740.o(.rodata*);
BUILD_DIR/src/code_800029B0.o(.rodata*);
BUILD_DIR/src/code_80005FD0.jp.o(.rodata*);
BUILD_DIR/src/camera.o(.rodata*);
BUILD_DIR/src/render_player.o(.rodata*);
BUILD_DIR/src/player_controller.o(.rodata*);
BUILD_DIR/src/spawn_players.o(.rodata*);
BUILD_DIR/src/code_8003DC40.o(.rodata*);
BUILD_DIR/src/gbiMacro.o(.rodata*);
BUILD_DIR/src/math_util_2.o(.rodata*);
BUILD_DIR/src/render_objects.o(.rodata*);
BUILD_DIR/src/code_80057C60.o(.rodata*);
BUILD_DIR/src/code_8006E9C0.o(.rodata*);
BUILD_DIR/src/update_objects.o(.rodata*);
BUILD_DIR/src/code_80086E70.o(.rodata*);
BUILD_DIR/src/effects.o(.rodata*);
BUILD_DIR/src/code_80091440.o(.rodata*);
BUILD_DIR/src/code_80091750.jp.o(.rodata*);
BUILD_DIR/src/code_800AF9B0.o(.rodata*);
BUILD_DIR/src/menus.o(.rodata*);
BUILD_DIR/src/save.o(.rodata*);
BUILD_DIR/src/audio/heap.o(.rodata*);
BUILD_DIR/src/audio/load.o(.rodata*);
BUILD_DIR/src/audio/playback.o(.rodata*);
BUILD_DIR/src/audio/effects.o(.rodata*);
BUILD_DIR/src/audio/seqplayer.o(.rodata*);
BUILD_DIR/src/audio/external.o(.rodata*);
BUILD_DIR/src/audio/port_eu.o(.rodata*);
#if DEBUG
BUILD_DIR/src/debug/crash_screen_enhancement.o(.rodata);
BUILD_DIR/src/debug/debug.o(.rodata);
BUILD_DIR/src/os/sprintf.o(.rodata);
BUILD_DIR/src/debug/crash_screen_enhancement.o(.rodata*);
BUILD_DIR/src/debug/debug.o(.rodata*);
BUILD_DIR/src/os/sprintf.o(.rodata*);
#endif
BUILD_DIR/src/os/guRotateF.o(.rodata);
BUILD_DIR/src/os/guPerspectiveF.o(.rodata);
BUILD_DIR/asm/os/__osException.o(.rodata);
BUILD_DIR/src/os/__osDevMgrMain.o(.rodata);
BUILD_DIR/src/os/math/sinf.o(.rodata);
BUILD_DIR/src/os/math/cosf.o(.rodata);
BUILD_DIR/src/os/_Printf.o(.rodata);
BUILD_DIR/src/os/guOrthoF.o(.rodata*);
BUILD_DIR/src/os/guRotateF.o(.rodata*);
BUILD_DIR/src/os/guScaleF.o(.rodata*);
BUILD_DIR/src/os/guPerspectiveF.o(.rodata*);
BUILD_DIR/src/os/guLookAtF.o(.rodata*);
BUILD_DIR/src/os/osAiSetFrequency.o(.rodata*);
BUILD_DIR/asm/os/__osException.o(.rodata*);
BUILD_DIR/src/os/__osViSwapContext.o(.rodata*);
BUILD_DIR/src/os/__osDevMgrMain.o(.rodata*);
BUILD_DIR/src/os/guMtxF2L.o(.rodata*);
BUILD_DIR/src/os/guNormalize.o(.rodata*);
BUILD_DIR/src/os/math/sinf.o(.rodata*);
BUILD_DIR/src/os/math/cosf.o(.rodata*);
BUILD_DIR/src/os/_Printf.o(.rodata*);
BUILD_DIR/asm/os/osSetIntMask.o(.rodata);
BUILD_DIR/src/os/_Ldtob.o(.rodata);
BUILD_DIR/src/os/_Ldtob.o(.rodata*);
BUILD_DIR/data/rsp.o(.data);
BUILD_DIR/src/audio/data.o(.data);
}
@ -309,46 +323,46 @@ SECTIONS
BEGIN_NOLOAD(main) {
BUILD_DIR/src/main.o(.bss*);
BUILD_DIR/src/code_800029B0.o(.bss);
BUILD_DIR/src/profiler.o(.bss);
BUILD_DIR/src/crash_screen.o(.bss);
BUILD_DIR/src/code_80004740.o(.bss);
BUILD_DIR/src/staff_ghosts.o(.bss);
BUILD_DIR/src/code_80005FD0.jp.o(.bss);
BUILD_DIR/src/camera.o(.bss);
BUILD_DIR/src/render_player.o(.bss);
BUILD_DIR/src/spawn_players.o(.bss);
BUILD_DIR/src/code_80057C60.o(.bss);
BUILD_DIR/src/code_80057C60_var.o(.bss);
BUILD_DIR/src/effects.o(.bss);
BUILD_DIR/src/code_80091750.jp.o(.bss);
BUILD_DIR/src/code_800AF9B0.o(.bss);
BUILD_DIR/src/menus.o(.bss);
BUILD_DIR/src/code_800029B0.o(.bss*);
BUILD_DIR/src/profiler.o(.bss*);
BUILD_DIR/src/crash_screen.o(.bss*);
BUILD_DIR/src/code_80004740.o(.bss*);
BUILD_DIR/src/staff_ghosts.o(.bss*);
BUILD_DIR/src/code_80005FD0.jp.o(.bss*);
BUILD_DIR/src/camera.o(.bss*);
BUILD_DIR/src/render_player.o(.bss*);
BUILD_DIR/src/spawn_players.o(.bss*);
BUILD_DIR/src/code_80057C60.o(.bss*);
BUILD_DIR/src/code_80057C60_var.o(.bss*);
BUILD_DIR/src/effects.o(.bss*);
BUILD_DIR/src/code_80091750.jp.o(.bss*);
BUILD_DIR/src/code_800AF9B0.o(.bss*);
BUILD_DIR/src/menus.o(.bss*);
#if DEBUG
BUILD_DIR/src/os/osCartRomInit.o(.bss);
BUILD_DIR/src/debug/crash_screen_enhancement.o(.bss);
BUILD_DIR/src/debug/debug.o(.bss);
BUILD_DIR/src/os/is_debug.o(.bss);
BUILD_DIR/src/os/sprintf.o(.bss);
BUILD_DIR/src/os/osCartRomInit.o(.bss*);
BUILD_DIR/src/debug/crash_screen_enhancement.o(.bss*);
BUILD_DIR/src/debug/debug.o(.bss*);
BUILD_DIR/src/os/is_debug.o(.bss*);
BUILD_DIR/src/os/sprintf.o(.bss*);
#endif
BUILD_DIR/src/audio/external.o(.bss);
BUILD_DIR/src/audio/port_eu.o(.bss);
BUILD_DIR/src/os/osInitialize.o(.bss);
BUILD_DIR/src/os/osCreateViManager.o(.bss);
BUILD_DIR/src/os/osCreatePiManager.o(.bss);
BUILD_DIR/src/os/osSetEventMesg.o(.bss);
BUILD_DIR/src/os/osSpTaskLoadGo.o(.bss);
BUILD_DIR/src/os/osContStartReadData.o(.bss);
BUILD_DIR/src/os/osContInit.o(.bss);
BUILD_DIR/src/os/osPfsIsPlug.o(.bss);
BUILD_DIR/src/os/guRotateF.o(.bss);
BUILD_DIR/src/os/leointerrupt.o(.bss);
BUILD_DIR/src/os/osTimer.o(.bss);
BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.bss);
BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.bss);
BUILD_DIR/src/os/osEepromWrite.o(.bss);
BUILD_DIR/src/audio/external.o(.bss*);
BUILD_DIR/src/audio/port_eu.o(.bss*);
BUILD_DIR/src/os/osInitialize.o(.bss*);
BUILD_DIR/src/os/osCreateViManager.o(.bss*);
BUILD_DIR/src/os/osCreatePiManager.o(.bss*);
BUILD_DIR/src/os/osSetEventMesg.o(.bss*);
BUILD_DIR/src/os/osSpTaskLoadGo.o(.bss*);
BUILD_DIR/src/os/osContStartReadData.o(.bss*);
BUILD_DIR/src/os/osContInit.o(.bss*);
BUILD_DIR/src/os/osPfsIsPlug.o(.bss*);
BUILD_DIR/src/os/guRotateF.o(.bss*);
BUILD_DIR/src/os/leointerrupt.o(.bss*);
BUILD_DIR/src/os/osTimer.o(.bss*);
BUILD_DIR/src/os/__osPiCreateAccessQueue.o(.bss*);
BUILD_DIR/src/os/__osSiCreateAccessQueue.o(.bss*);
BUILD_DIR/src/os/osEepromWrite.o(.bss*);
BUILD_DIR/asm/os/__osException.o(.bss);
BUILD_DIR/src/os/osLeoDiskInit.o(.bss);
BUILD_DIR/src/os/osLeoDiskInit.o(.bss*);
. = ALIGN(0x10);
}
END_NOLOAD(main)
@ -356,7 +370,7 @@ SECTIONS
/* Checks that segments are not overlapping into the memory pool but is not strictly necessary */
BEGIN_NOLOAD(memoryPool)
{
BUILD_DIR/src/buffers/memory_pool.o(.bss);
BUILD_DIR/src/buffers/memory_pool.o(.bss*);
. = ALIGN(0x10);
}
END_NOLOAD(memoryPool)
@ -367,26 +381,26 @@ SECTIONS
BUILD_DIR/src/racing/race_logic.o(.text*);
BUILD_DIR/src/racing/render_courses.o(.text*);
BUILD_DIR/src/racing/actors.o(.text*);
BUILD_DIR/src/racing/skybox_and_splitscreen.o(.text);
BUILD_DIR/src/racing/skybox_and_splitscreen.o(.text*);
BUILD_DIR/src/racing/memory.o(.text*);
BUILD_DIR/src/racing/collision.o(.text*);
BUILD_DIR/src/racing/actors_extended.o(.text);
BUILD_DIR/src/racing/actors_extended.o(.text*);
BUILD_DIR/src/racing/math_util.o(.text*);
BUILD_DIR/src/racing/race_logic.o(.data*);
BUILD_DIR/src/racing/render_courses.o(.data*);
BUILD_DIR/src/racing/actors.o(.data*);
BUILD_DIR/src/racing/skybox_and_splitscreen.o(.data);
BUILD_DIR/src/racing/skybox_and_splitscreen.o(.data*);
BUILD_DIR/src/racing/memory.o(.data*);
BUILD_DIR/courses/courseTable.o(.data);
BUILD_DIR/src/racing/actors_extended.o(.data);
BUILD_DIR/courses/courseTable.o(.data*);
BUILD_DIR/src/racing/actors_extended.o(.data*);
BUILD_DIR/src/racing/math_util.o(.data*);
BUILD_DIR/src/racing/race_logic.o(.rodata*);
BUILD_DIR/src/racing/render_courses.o(.rodata*);
BUILD_DIR/src/racing/actors.o(.rodata*);
BUILD_DIR/src/racing/skybox_and_splitscreen.o(.rodata);
BUILD_DIR/src/racing/skybox_and_splitscreen.o(.rodata*);
BUILD_DIR/src/racing/memory.o(.rodata*);
BUILD_DIR/src/racing/collision.o(.rodata*);
BUILD_DIR/src/racing/actors_extended.o(.rodata);
BUILD_DIR/src/racing/actors_extended.o(.rodata*);
BUILD_DIR/src/racing/math_util.o(.rodata*);
}
END_SEG(racing)
@ -414,33 +428,36 @@ SECTIONS
}
END_NOLOAD(buffers)
/* 0x80280000 123640-12AAE0 [74A0] */
BEGIN_SEG(ending, LINKER_ENDING)
{
BUILD_DIR/src/ending/code_80280000.o(.text);
BUILD_DIR/src/ending/podium_ceremony_actors.o(.text);
BUILD_DIR/src/ending/camera_junk.o(.text);
BUILD_DIR/src/ending/code_80281780.o(.text);
BUILD_DIR/src/ending/code_80281C40.o(.text);
BUILD_DIR/src/ending/ceremony_and_credits.o(.text);
BUILD_DIR/src/ending/podium_ceremony_actors.o(.data);
BUILD_DIR/src/ending/code_80281780.o(.data);
BUILD_DIR/src/ending/dl_unk_80284EE0.o(.data);
BUILD_DIR/src/ending/credits.jp.o(.data);
BUILD_DIR/src/ending/ceremony_and_credits.o(.data);
BUILD_DIR/src/ending/podium_ceremony_actors.o(.rodata);
BUILD_DIR/src/ending/camera_junk.o(.rodata);
BUILD_DIR/src/ending/credits.jp.o(.rodata);
BUILD_DIR/src/ending/ceremony_and_credits.o(.rodata);
BUILD_DIR/src/ending/code_80280000.o(.text*);
BUILD_DIR/src/ending/podium_ceremony_actors.o(.text*);
BUILD_DIR/src/ending/camera_junk.o(.text*);
BUILD_DIR/src/ending/code_80281780.o(.text*);
BUILD_DIR/src/ending/code_80281C40.o(.text*);
BUILD_DIR/src/ending/ceremony_and_credits.o(.text*);
BUILD_DIR/src/ending/podium_ceremony_actors.o(.data*);
BUILD_DIR/src/ending/code_80281780.o(.data*);
BUILD_DIR/src/ending/dl_unk_80284EE0.o(.data*);
BUILD_DIR/src/ending/credits.jp.o(.data*);
BUILD_DIR/src/ending/ceremony_and_credits.o(.data*);
BUILD_DIR/src/ending/code_80280000.o(.rodata*);
BUILD_DIR/src/ending/podium_ceremony_actors.o(.rodata*);
BUILD_DIR/src/ending/camera_junk.o(.rodata*);
BUILD_DIR/src/ending/code_80281780.o(.rodata*);
BUILD_DIR/src/ending/code_80281C40.o(.rodata*);
BUILD_DIR/src/ending/credits.jp.o(.rodata*);
BUILD_DIR/src/ending/ceremony_and_credits.o(.rodata*);
}
END_SEG(ending)
BEGIN_NOLOAD(ending) {
BUILD_DIR/src/ending/code_80280000.o(.bss);
BUILD_DIR/src/ending/podium_ceremony_actors.o(.bss);
BUILD_DIR/src/ending/code_80281C40.o(.bss);
BUILD_DIR/src/ending/ceremony_and_credits.o(.bss);
BUILD_DIR/src/ending/code_80280000.o(.bss*);
BUILD_DIR/src/ending/podium_ceremony_actors.o(.bss*);
BUILD_DIR/src/ending/code_80281C40.o(.bss*);
BUILD_DIR/src/ending/ceremony_and_credits.o(.bss*);
. = ALIGN(0x10);
}
END_NOLOAD(ending)
@ -449,7 +466,7 @@ SECTIONS
BEGIN_SEG(data_segment2, 0x02000000)
{
BUILD_DIR/src/data/textures.o(.data);
BUILD_DIR/assets/code/data_segment2/data_segment2.o(.data);
BUILD_DIR/src/data/data_segment2.o(.data);
}
END_SEG(data_segment2)

167
safe_gcc.mk Normal file
View File

@ -0,0 +1,167 @@
# This file is auto-generated. DO NOT MODIFY!
SAFE_C_FILES := \
build/us/src/camera.o \
build/us/src/spawn_players.o \
build/us/src/code_8003DC40.o \
build/us/src/code_80091440.o \
build/us/src/effects.o \
build/us/src/code_80057C60_var.o \
build/us/src/code_800029B0.o \
build/us/src/code_80004740.o \
build/us/src/player_controller.o \
build/us/src/profiler.o \
build/us/src/render_player.o \
build/us/src/code_80086E70.o \
build/us/src/staff_ghosts.o \
build/us/src/gbiMacro.o \
build/us/src/kart_dma.o \
build/us/src/math_util_2.o \
build/us/src/main.o \
build/us/src/data/kart_attributes.o \
build/us/src/data/path_spawn_metadata.o \
build/us/src/data/textures.o \
build/us/src/data/trig_tables_bss.o \
build/us/src/data/data_segment2.o \
build/us/src/audio/seqplayer.o \
build/us/src/audio/heap.o \
build/us/src/audio/effects.o \
build/us/src/audio/playback.o \
build/us/src/audio/audio_session_presets.o \
build/us/src/audio/port_eu.o \
build/us/src/buffers/gfx_output_buffer.o \
build/us/src/buffers/trig_tables.o \
build/us/src/buffers/buffers.o \
build/us/src/buffers/random.o \
build/us/src/buffers/trig_tables_bss.o \
build/us/src/buffers/memory_pool.o \
build/us/src/ending/credits.o \
build/us/src/ending/code_80280000.o \
build/us/src/ending/ceremony_and_credits.o \
build/us/src/ending/dl_unk_80284EE0.o \
build/us/src/ending/code_80281780.o \
build/us/src/ending/podium_ceremony_actors.o \
build/us/src/ending/code_80281C40.o \
build/us/src/ending/camera_junk.o \
build/us/src/debug/debug.o \
build/us/src/debug/crash_screen_enhancement.o \
build/us/src/racing/collision.o \
build/us/src/racing/skybox_and_splitscreen.o \
build/us/src/racing/memory.o \
build/us/src/racing/race_logic.o \
build/us/src/racing/actors_extended.o \
build/us/src/racing/render_courses.o \
build/us/src/racing/actors.o \
build/us/src/os/guOrthoF.o \
build/us/src/os/guLookAtF.o \
build/us/src/os/__osSiDeviceBusy.o \
build/us/src/os/_Litob.o \
build/us/src/os/osContInit.o \
build/us/src/os/osInitialize.o \
build/us/src/os/osAiSetNextBuffer.o \
build/us/src/os/guMtxCatL.o \
build/us/src/os/__osAiDeviceBusy.o \
build/us/src/os/contramread.o \
build/us/src/os/osSpTaskLoadGo.o \
build/us/src/os/crc.o \
build/us/src/os/osCreateMesgQueue.o \
build/us/src/os/guRotateF.o \
build/us/src/os/__osLeoInterrupt.o \
build/us/src/os/osContStartReadData.o \
build/us/src/os/osGetThreadPri.o \
build/us/src/os/osPfsNumFiles.o \
build/us/src/os/__osSiRawReadIo.o \
build/us/src/os/osSpTaskYield.o \
build/us/src/os/osStartThread.o \
build/us/src/os/osViData.o \
build/us/src/os/osPfsFileState.o \
build/us/src/os/contpfs.o \
build/us/src/os/leointerrupt.o \
build/us/src/os/osPfsAllocateFile.o \
build/us/src/os/ldiv.o \
build/us/src/os/osSpTaskYielded.o \
build/us/src/os/__osSpSetPc.o \
build/us/src/os/osSetTime.o \
build/us/src/os/osYieldThread.o \
build/us/src/os/osPiRawStartDma.o \
build/us/src/os/osSetTimer.o \
build/us/src/os/osPfsDeleteFile.o \
build/us/src/os/__osSpDeviceBusy.o \
build/us/src/os/osEepromRead.o \
build/us/src/os/osPiRawReadIo.o \
build/us/src/os/osSetEventMesg.o \
build/us/src/os/NaN.o \
build/us/src/os/osJamMesg.o \
build/us/src/os/osPfsChecker.o \
build/us/src/os/sprintf.o \
build/us/src/os/_Printf.o \
build/us/src/os/osViTable.o \
build/us/src/os/osEepromLongWrite.o \
build/us/src/os/__osEPiRawWriteIo.o \
build/us/src/os/osViSetEvent.o \
build/us/src/os/__osGetCurrFaultedThread.o \
build/us/src/os/osCreatePiManager.o \
build/us/src/os/epidma.o \
build/us/src/os/osCartRomInit.o \
build/us/src/os/osPfsFreeBlocks.o \
build/us/src/os/osPfsSearchFile.o \
build/us/src/os/__osAtomicDec.o \
build/us/src/os/osViBlack.o \
build/us/src/os/__osViInit.o \
build/us/src/os/osEepromWrite.o \
build/us/src/os/osAiSetFrequency.o \
build/us/src/os/__osEPiRawReadIo.o \
build/us/src/os/guLookAtRef.o \
build/us/src/os/guPerspectiveF.o \
build/us/src/os/contramwrite.o \
build/us/src/os/osGetTime.o \
build/us/src/os/__osViSwapContext.o \
build/us/src/os/alBnkfNew.o \
build/us/src/os/__osSpSetStatus.o \
build/us/src/os/osPfsReadWriteFile.o \
build/us/src/os/osPiStartDma.o \
build/us/src/os/osRecvMesg.o \
build/us/src/os/osDestroyThread.o \
build/us/src/os/string.o \
build/us/src/os/__osSiRawWriteIo.o \
build/us/src/os/osPfsInit.o \
build/us/src/os/guMtxCatF.o \
build/us/src/os/osPfsIsPlug.o \
build/us/src/os/__osDequeueThread.o \
build/us/src/os/__osSiCreateAccessQueue.o \
build/us/src/os/osViSwapBuffer.o \
build/us/src/os/is_debug.o \
build/us/src/os/__osViGetCurrentContext.o \
build/us/src/os/__osPiCreateAccessQueue.o \
build/us/src/os/__osSpRawStartDma.o \
build/us/src/os/__osSyncPutChars.o \
build/us/src/os/osSendMesg.o \
build/us/src/os/osSyncPrintf.o \
build/us/src/os/__osResetGlobalIntMask.o \
build/us/src/os/guScaleF.o \
build/us/src/os/osSetThreadPri.o \
build/us/src/os/__osDevMgrMain.o \
build/us/src/os/osVirtualToPhysical.o \
build/us/src/os/osViSetMode.o \
build/us/src/os/__osSetHWIntrRoutine.o \
build/us/src/os/osCreateViManager.o \
build/us/src/os/__osSiRawStartDma.o \
build/us/src/os/guNormalize.o \
build/us/src/os/osLeoDiskInit.o \
build/us/src/os/__osSpGetStatus.o \
build/us/src/os/osEepromLongRead.o \
build/us/src/os/_Ldtob.o \
build/us/src/os/guMtxF2L.o \
build/us/src/os/osEPiRawStartDma.o \
build/us/src/os/osPiGetCmdQueue.o \
build/us/src/os/osAiGetLength.o \
build/us/src/os/osViSetSpecialFeatures.o \
build/us/src/os/osCreateThread.o \
build/us/src/os/osTimer.o \
build/us/src/os/osEepromProbe.o \
build/us/src/os/__osSetGlobalIntMask.o \
build/us/src/os/guTranslateF.o \
build/us/src/os/math/llconv.o \
build/us/src/os/math/cosf.o \
build/us/src/os/math/llmuldiv.o \
build/us/src/os/math/sinf.o \

View File

@ -1,4 +1,5 @@
#include <PR/ultratypes.h>
#include <macros.h>
#include "data.h"
#include "effects.h"
@ -440,4 +441,4 @@ u16 D_803B7192; // unconfirmed
u32 gAudioRandom;
s32 gAudioErrorFlags;
u32 D_803B71A0[4]; // unconfirmed
u8 D_803B71B0[4]; // unconfirmed
ALIGNED8 u8 D_803B71B0[4]; // unconfirmed

View File

@ -56,8 +56,8 @@ extern s16 gAiBufferLengths[NUMAIBUFFERS]; // osAiSetNextBuffer nbytes
extern u16 D_803B7192; // unconfirmed
extern u32 gAudioRandom;
extern s32 gAudioErrorFlags;
extern u32 D_803B71A0[4]; // unconfirmed
extern u8 D_803B71B0[4]; // unconfirmed
extern u32 D_803B71A0[]; // unconfirmed
extern u8 D_803B71B0[]; // unconfirmed
extern struct ReverbSettingsEU sReverbSettings[];
extern struct AudioSessionSettingsEU gAudioSessionPresets[];

View File

@ -116,7 +116,6 @@ void *unk_pool1_lookup(s32 poolIdx, s32 id);
void func_800BA8B0(s32, s32);
extern s32 D_800EA5D0;
extern u8 D_803B71B0[];
extern s32 gMaxAudioCmds;
extern s16 gTempoInternalToExternal;

View File

@ -26,7 +26,6 @@
extern s32 D_802BA038;
extern s16 D_802BA048;
s16 gCurrentCourseId = 0;
s16 gCurrentlyLoadedCourseId = 0xFF;
u16 D_800DC5A8 = 0;
@ -52,7 +51,7 @@ u16 D_800DC5E4 = 0;
//! @todo gPlayerWinningIndex (D_800DC5E8) accessed as word, D_800DC5EB as u8
s32 gPlayerWinningIndex = 0;
struct UnkStruct_800DC5EC D_8015F480[4];
ALIGNED16 struct UnkStruct_800DC5EC D_8015F480[4];
struct UnkStruct_800DC5EC *D_800DC5EC = &D_8015F480[0];
struct UnkStruct_800DC5EC *D_800DC5F0 = &D_8015F480[1];
struct UnkStruct_800DC5EC *D_800DC5F4 = &D_8015F480[2];
@ -66,7 +65,7 @@ Lights1 D_800DC610[] = {
gdSPDefLights1(175, 175, 175, 255, 255, 255, 0, 0, 120),
gdSPDefLights1(115, 115, 115, 255, 255, 255, 0, 0, 120),
};
static s32 pad_800029B0 = 0x80000000;
UNUSED s32 pad_800029B0 = 0x80000000;
s16 gCreditsCourseId = COURSE_LUIGI_RACEWAY;
s16 gPlaceItemBoxes = 1;

View File

@ -5722,7 +5722,7 @@ void func_8006A7C0(Player *player, f32 arg1, f32 arg2, s8 arg3, s8 arg4) {
}
}
void func_8006AFD0(Player *player, s8 arg1, s16 arg2, s8 arg3) {
void render_battle_balloon(Player *player, s8 arg1, s16 arg2, s8 arg3) {
Mat4 sp140;
Vec3f sp134;
Vec3s sp12C;
@ -5848,16 +5848,19 @@ void func_8006B9CC(Player* player, s8 arg1) {
void func_8006BA94(Player* player, s8 playerIndex, s8 arg2) {
if (gPlayerBalloonStatus[playerIndex][0] != BALLOON_STATUS_GONE) {
func_8006AFD0(player, playerIndex, 0, arg2);
render_battle_balloon(player, playerIndex, 0, arg2);
}
if (gPlayerBalloonStatus[playerIndex][1] != BALLOON_STATUS_GONE) {
func_8006AFD0(player, playerIndex, 1, arg2);
render_battle_balloon(player, playerIndex, 1, arg2);
}
if (gPlayerBalloonStatus[playerIndex][2] != BALLOON_STATUS_GONE) {
func_8006AFD0(player, playerIndex, 2, arg2);
render_battle_balloon(player, playerIndex, 2, arg2);
}
}
/**
* Used in podium ceremony.
*/
void render_balloon(Vec3f arg0, f32 arg1, s16 arg2, s16 arg3) {
Mat4 sp108;
Vec3f spFC;

View File

@ -221,7 +221,7 @@ void func_8006A01C(Player*, s8, s16, s8);
void func_8006A280(Player*, s8, s16, s8);
void func_8006A50C(Player*, f32, f32, s8, s8, s16);
void func_8006A7C0(Player*, f32, f32, s8, s8);
void func_8006AFD0(Player*, s8, s16, s8);
void render_battle_balloon(Player*, s8, s16, s8);
void func_8006B7E4(Player*, s8);
void func_8006B87C(Player*, s8);

View File

@ -616,7 +616,7 @@ void init_cloud_object(s32 objectIndex, s32 arg1, CloudData *arg2) {
temp_v0->unk_09E = arg2->posY;
temp_v0->sizeScaling = (f32) arg2->scalePercent / 100.0;
temp_v0->activeTexture = &D_8018D220[arg2->subType];
func_80073404(objectIndex, 0x40U, 0x20U, &D_0D005FB0);
func_80073404(objectIndex, 0x40U, 0x20U, &D_0D005FB0[0]);
temp_v0->primAlpha = 0x00FF;
}

View File

@ -90,7 +90,7 @@ s32 gControllerPak1NumPagesFree;
s32 gControllerPak1FileNote;
s32 gControllerPak2FileNote;
s32 code_80091750_bss_pad2;
SaveData gSaveData;
ALIGNED8 SaveData gSaveData;
u8 D_8018ED90;
u8 D_8018ED91;
@ -1152,7 +1152,7 @@ s32 D_800E84A0[] = {
};
Vtx *D_800E84C0[] = {
D_02007BB8, D_02007CD8, D_02007DF8,
&D_02007BB8[0], &D_02007BB8[18], &D_02007BB8[36],
};
Gfx *D_800E84CC[] = {
@ -2791,6 +2791,15 @@ Gfx *func_800959F8(Gfx *displayListHead, Vtx *arg1) {
} else {
index = ((gTextColor * 2) + ((s32) gGlobalTimer % 2)) - 4;
}
#ifdef AVOID_UB
if (arg1 == D_02007BB8) {
gSPDisplayList(displayListHead++, D_800E84CC[index]);
} else if (arg1 == &D_02007BB8[18]) {
gSPDisplayList(displayListHead++, D_800E84EC[index]);
} else if (arg1 == &D_02007BB8[36]) {
gSPDisplayList(displayListHead++, D_800E850C[index]);
}
#else
if (arg1 == D_02007BB8) {
gSPDisplayList(displayListHead++, D_800E84CC[index]);
} else if (arg1 == D_02007CD8) {
@ -2798,6 +2807,9 @@ Gfx *func_800959F8(Gfx *displayListHead, Vtx *arg1) {
} else if (arg1 == D_02007DF8) {
gSPDisplayList(displayListHead++, D_800E850C[index]);
}
#endif
return displayListHead;
}
@ -2863,16 +2875,16 @@ func_80095BD0_label2:
gDPLoadTextureTile_4b(displayListHead++, arg1, G_IM_FMT_I, arg4, 0, 0, 0, arg4, arg5, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
switch (arg4) {
default:
var_a1 = D_02007CD8;
var_a1 = &D_02007BB8[18];
break;
case 16:
var_a1 = D_02007CD8;
var_a1 = &D_02007BB8[18];
break;
case 26:
var_a1 = D_02007BB8;
break;
case 30:
var_a1 = D_02007DF8;
var_a1 = &D_02007BB8[36];
break;
}

View File

@ -211,8 +211,7 @@ void thread9_crash_screen(UNUSED void *arg0)
// Run only on the first iteration.
if (sCounter == 0) {
crash_screen_draw_square(pFramebuffer);
//#define SKIP_DRAW_SQUARE
#ifndef SKIP_DRAW_SQUARE
#ifndef DEBUG
while(TRUE)
{
read_controllers();
@ -231,7 +230,7 @@ void thread9_crash_screen(UNUSED void *arg0)
}
}
#endif
#ifdef CRASH_SCREEN_ENHANCEMENT
#if DEBUG
crash_screen_draw(thread);
#else
crash_screen_draw_info(pFramebuffer, thread);

View File

@ -3,7 +3,7 @@
#include <PR/ultratypes.h>
#include <PR/gbi.h>
#include "data_segment2.h"
#include <assets/startup_logo.h>"
#include <assets/startup_logo.h>
Gfx D_02007650[] = {
gsDPPipeSync(),
@ -104,168 +104,168 @@ Gfx D_02007818[] = {
Gfx D_02007838[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007BD8, 2, 2),
gsSPVertex(&D_02007BB8[2], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007858[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007BF8, 2, 2),
gsSPVertex(&D_02007BB8[4], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007878[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007C18, 2, 2),
gsSPVertex(&D_02007BB8[6], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007898[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007C38, 2, 2),
gsSPVertex(&D_02007BB8[8], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020078B8[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007C58, 2, 2),
gsSPVertex(&D_02007BB8[10], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020078D8[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007C78, 2, 2),
gsSPVertex(&D_02007BB8[12], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020078F8[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007C98, 2, 2),
gsSPVertex(&D_02007BB8[14], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007918[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007CB8, 2, 2),
gsSPVertex(&D_02007BB8[16], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007938[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007CF8, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[20], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007958[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007D18, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[22], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007978[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007D38, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[24], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007998[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007D58, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[26], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020079B8[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007D78, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[28], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020079D8[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007D98, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[30], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020079F8[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007DB8, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[32], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A18[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007DD8, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[34], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A38[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007E18, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[38], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A58[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007E38, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[40], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A78[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007E58, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[42], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A98[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007E78, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[44], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007AB8[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007E98, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[46], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007AD8[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007EB8, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[48], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007AF8[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007ED8, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[50], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007B18[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007EF8, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[52], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
@ -281,8 +281,64 @@ UNUSED Vtx D_02007B38[] = {
{{{ 0, 0, 0}, 0, { 0, 448}, {0xff, 0x00, 0x00, 0xff}}},
};
//! @todo Place all these vertices in a single array
// Access the correct vertex using sym[value]
#ifdef AVOID_UB
Vtx D_02007BB8[] = {
{{{ 0, 65520, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{26, 65520, 0}, 0, {1600, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0x00, 0x00, 0xff, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0x00, 0xff, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0x00, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0xff, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0xff, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 65520, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{16, 65520, 0}, 0, {960, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0x00, 0x00, 0xff, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0x00, 0xff, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0x00, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0xff, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0xff, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 65504, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{30, 65504, 0}, 0, {1856, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0x00, 0x00, 0xff, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0x00, 0x00, 0xff, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0x00, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0x00, 0xff, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0xff, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
};
#else
Vtx D_02007BB8[] = {
{{{ 0, 65520, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{26, 65520, 0}, 0, {1600, 0}, {0xff, 0xff, 0xff, 0xff}}},
@ -417,6 +473,7 @@ Vtx D_02007EF8[] = {
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
};
#endif
Gfx D_02007F18[] = {
gsDPPipeSync(),

View File

@ -0,0 +1,13 @@
#include <ultra64.h>
#include <macros.h>
/**
* Trig tables get loaded into memory at this location.
* See trig_tables.c for the real file.
*/
#ifdef VERSION_EU
ALIGNED8 u8 trigTablesPadding[0x5750];
#else
ALIGNED8 u8 trigTablesPadding[0x5810];
#endif

View File

@ -51,6 +51,7 @@ extern Gfx D_02008058[];
extern Gfx common_rectangle_display[];
extern Vtx D_02007BB8[];
#ifndef AVOID_UB
extern Vtx D_02007BD8[];
extern Vtx D_02007BF8[];
extern Vtx D_02007C18[];
@ -77,5 +78,7 @@ extern Vtx D_02007E98[];
extern Vtx D_02007EB8[];
extern Vtx D_02007ED8[];
extern Vtx D_02007EF8[];
#endif
#endif

View File

@ -1,4 +1,6 @@
#define STRANGE_MAIN_HEADER_H
#ifndef GCC
#define D_800DC510_AS_U16
#endif
#include <ultra64.h>
#include <PR/os.h>
#include <PR/ucode.h>
@ -83,11 +85,11 @@ Player *gPlayerTwoCopy = &gPlayers[1];
UNUSED Player *gPlayerThreeCopy = &gPlayers[2];
UNUSED Player *gPlayerFourCopy = &gPlayers[3];
s32 D_800FD850[3];
UNUSED s32 D_800FD850[3];
struct GfxPool gGfxPools[2];
struct GfxPool *gGfxPool;
s32 gfxPool_padding; // is this necessary?
UNUSED s32 gfxPool_padding; // is this necessary?
struct VblankHandler gGameVblankHandler;
struct VblankHandler sSoundVblankHandler;
OSMesgQueue gDmaMesgQueue, gGameVblankQueue, gGfxVblankQueue, unused_gMsgQueue, gIntrMesgQueue, gSPTaskMesgQueue;
@ -103,15 +105,14 @@ OSMesgQueue gSIEventMesgQueue;
OSMesg gSIEventMesgBuf[3];
OSContStatus gControllerStatuses[4];
OSContPad gControllerPads[4];
u8 gControllerBits;
struct UnkStruct_8015F584 D_8014F110[1024];
u16 gNumActors;
u16 gMatrixObjectCount;
s32 gTickSpeed;
f32 D_80150118;
u16 wasSoftReset;
u16 D_8015011E;
@ -120,9 +121,6 @@ s32 gGotoMode;
UNUSED s32 D_80150128;
UNUSED s32 D_8015012C;
f32 gCameraZoom[4]; // look like to be the fov of each character
//f32 D_80150134;
//f32 D_80150138;
//f32 D_8015013C;
UNUSED s32 D_80150140;
UNUSED s32 D_80150144;
f32 gScreenAspect;
@ -133,6 +131,7 @@ UNUSED f32 D_80150154;
struct D_80150158 gD_80150158[16];
uintptr_t gSegmentTable[16];
Gfx *gDisplayListHead;
struct SPTask *gGfxSPTask;
s32 D_801502A0;
s32 D_801502A4;
@ -161,8 +160,8 @@ ALIGNED8 u8 gAudioThreadStack[STACKSIZE];
UNUSED OSThread D_8015CD30;
UNUSED ALIGNED8 u8 D_8015CD30_Stack[STACKSIZE / 2];
u8 gGfxSPTaskYieldBuffer[4352];
u32 gGfxSPTaskStack[256];
ALIGNED8 u8 gGfxSPTaskYieldBuffer[4352];
ALIGNED8 u32 gGfxSPTaskStack[256];
OSMesg gPIMesgBuf[32];
OSMesgQueue gPIMesgQueue;

View File

@ -136,23 +136,21 @@ extern Player *gPlayerEight;
extern Player *gPlayerOneCopy;
extern Player *gPlayerTwoCopy;
extern s32 D_800FD850[];
extern struct GfxPool gGfxPools[];
extern struct GfxPool *gGfxPool;
extern s32 gfxPool_padding;
extern struct VblankHandler gGameVblankHandler;
extern struct VblankHandler sSoundVblankHandler;
extern OSMesgQueue gDmaMesgQueue, gGameVblankQueue, gGfxVblankQueue, unused_gMsgQueue, gIntrMesgQueue, gSPTaskMesgQueue;
extern OSMesgQueue sSoundMesgQueue;
extern OSMesg sSoundMesgBuf[];
extern OSMesg gDmaMesgBuf[], gGameMesgBuf;
extern OSMesg sSoundMesgBuf[1];
extern OSMesg gDmaMesgBuf[1], gGameMesgBuf;
extern OSMesg gGfxMesgBuf[];
extern OSMesg gIntrMesgBuf[], gSPTaskMesgBuf[];
extern OSMesg gIntrMesgBuf[16], gSPTaskMesgBuf[16];
extern OSMesg gMainReceivedMesg;
extern OSIoMesg gDmaIoMesg;
extern OSMesgQueue gSIEventMesgQueue;
extern OSMesg gSIEventMesgBuf[];
extern OSMesg gSIEventMesgBuf[3];
extern OSContStatus gControllerStatuses[];
@ -203,11 +201,19 @@ extern u8 gGfxSPTaskYieldBuffer[];
extern u32 gGfxSPTaskStack[];
extern OSMesg gPIMesgBuf[];
extern OSMesgQueue gPIMesgQueue;
void race_logic_loop(void);
extern s32 gGamestate;
#ifndef STRANGE_MAIN_HEADER_H
extern s32 D_800DC510;
#ifndef D_800DC510_AS_U16
// Prevent overlapping writes in gcc
// Whether D_800DC510 was intended to be a separate variable in main.c from the rest of the game is unknown
#ifdef GCC
extern u16 D_800DC510;
#else
extern s32 D_800DC510;
#endif
#endif
extern u16 D_800DC514;
extern u16 creditsRenderMode;
extern u16 gDemoMode;
extern u16 gEnableDebugMode;

View File

@ -1,10 +1,15 @@
#include "libultra_internal.h"
OSThreadTail __osThreadTail = {NULL, -1};
#ifndef AVOID_UB
OSThread *__osThreadTail = NULL;
u32 __osTest = -1;
OSThread *__osRunQueue = (OSThread *) &__osThreadTail;
OSThread *__osActiveQueue = (OSThread *) &__osThreadTail;
OSThread *__osRunningThread = NULL;
OSThread *__osFaultedThread = NULL;
#else
OSThread_ListHead __osThreadTail_fix = {NULL, -1, (OSThread *) &__osThreadTail_fix, (OSThread *) &__osThreadTail_fix, NULL, 0};
#endif
void __osDequeueThread(OSThread **queue, OSThread *thread) {
register OSThread **a2;

View File

@ -1,8 +1,8 @@
#include "ultra64.h"
#include "osint.h"
#include "piint.h"
#include "libultra_internal.h"
extern OSThread *__osRunQueue;
static void __osLeoResume(void);
static void __osLeoAbnormalResume(void);
extern u8 leoDiskStack[OS_PIM_STACKSIZE]; //technically should have a OS_LEO_STACKSIZE or something..

View File

@ -1,6 +1,7 @@
#ifndef _LIBULTRA_INTERNAL_H_
#define _LIBULTRA_INTERNAL_H_
#include <ultra64.h>
#include <PR/os_thread.h>
#include "macros.h"
typedef struct __OSEventState
@ -15,15 +16,41 @@ typedef struct __osThreadTail
OSPri priority;
} OSThreadTail;
/*
* This define is needed because the original definitions in __osDequeueThread.c are declared
* seperately instead of part of a single struct, however some code alises over this memory
* assuming a unified structure. To fix this, we declare the full type here and then alias the
* symbol names to the correct members in AVOID_UB.
*/
typedef struct
{
/*0x00*/ struct OSThread_s *next;
/*0x04*/ OSPri priority;
/*0x08*/ struct OSThread_s *queue;
/*0x0C*/ struct OSThread_s *tlnext;
/*0x10*/ struct OSThread_s *unk10;
/*0x14*/ u32 unk14;
} OSThread_ListHead;
#ifdef AVOID_UB
// Now fix the symbols to the new one.
extern OSThread_ListHead __osThreadTail_fix;
#define __osThreadTail __osThreadTail_fix.next
#define D_80334894 __osThreadTail_fix.priority
#define __osRunQueue __osThreadTail_fix.queue
#define __osActiveQueue __osThreadTail_fix.tlnext
#define __osRunningThread __osThreadTail_fix.unk10
#else
// Original OSThread_ListHead definitions
extern OSThreadTail __osThreadTail;
extern OSThread *__osThreadTail;
extern OSThread *__osActiveQueue;
extern OSThread *__osRunQueue;
extern OSThread *__osRunningThread;
#endif
// Original EEPROM definitions
extern ALIGNED8 u32 D_80365E00[15];
extern u32 D_80365E00[15];
extern u32 D_80365E3C;
typedef struct {

View File

@ -7,7 +7,7 @@ unsigned long long __ull_rem(unsigned long long a0, unsigned long long a1)
return a0 % a1;
}
unsigned long long __ull_div(unsigned long long a0, unsigned long long a1)
{
{
return a0 / a1;
}
@ -34,19 +34,19 @@ unsigned long long __ll_mul(unsigned long long a0, unsigned long long a1)
void __ull_divremi(unsigned long long *div, unsigned long long *rem, unsigned long long a2, unsigned short a3)
{
*div = a2 / a3;
*rem = a2 % a3;
}
*rem = a2 % a3;
}
long long __ll_mod(long long a0, long long a1)
{
long long tmp = a0 % a1;
if ((tmp < 0 && a1 > 0) || (tmp > 0 && a1 < 0))
{
tmp += a1;
tmp += a1;
}
return tmp;
}
long long __ll_rshift(long long a0, long long a1)
{
return a0 >> a1;

View File

@ -1,7 +1,6 @@
#include "libultra_internal.h"
void __osCleanupThread(void);
extern OSThread *__osActiveQueue;
// Don't warn about pointer->u64 cast

View File

@ -1,8 +1,7 @@
#include "libultra_internal.h"
#include "controller.h"
extern u64 osClockRate;
extern u8 D_80365D20;
extern u8 _osContNumControllers;
extern OSTimer D_80196548;
extern OSMesgQueue _osContMesgQueue;
extern OSMesg _osContMesgBuff[4];

View File

@ -1,30 +1,11 @@
#include "libultra_internal.h"
#include "controller.h"
#include "macros.h"
#include "controller.h"
extern u8 __osContLastCmd;
extern u8 _osLastSentSiCmd;
extern OSPifRam __osEepPifRam;
typedef struct {
u8 unk00;
u8 unk01;
u8 unk02;
u8 unk03;
u8 unk04;
u8 unk05;
u8 unk06;
u8 unk07;
} unkStruct3;
typedef struct {
u8 unk00;
u8 unk01;
u8 unk02;
u8 unk03;
unkStruct3 unk04;
} unkStruct2;
s32 __osEepStatus(OSMesgQueue *, OSContStatus *);
void __osPackEepReadData(u8);

View File

@ -7,25 +7,6 @@ OSPifRam __osEepPifRam;
extern u8 __osContLastCmd;
typedef struct {
u8 unk00;
u8 unk01;
u8 unk02;
u8 unk03;
u8 unk04;
u8 unk05;
u8 unk06;
u8 unk07;
} unkStruct3;
typedef struct {
u8 unk00;
u8 unk01;
u8 unk02;
u8 unk03;
unkStruct3 unk04;
} unkStruct2;
s32 __osEepStatus(OSMesgQueue *, OSContStatus *);
void __osPackEepWriteData(u8, u8 *);

View File

@ -1,6 +1,7 @@
#ifndef _OSINT_H
#define _OSINT_H
#include "libultra_internal.h"
#include <macros.h>
//maybe should be in exceptasm.h?
extern void __osEnqueueAndYield(OSThread **);
@ -15,10 +16,14 @@ extern void __osTimerInterrupt(void);
extern u32 __osProbeTLB(void *);
extern int __osSpDeviceBusy(void);
#ifdef AVOID_UB
extern OSThread_ListHead __osThreadTail_fix;
#else
extern OSThread *__osRunningThread;
extern OSThread *__osActiveQueue;
extern OSThread *__osFaultedThread;
extern OSThread *__osRunQueue;
#endif
extern OSTimer *__osTimerList;
extern OSTimer __osBaseTimer;

View File

@ -7,6 +7,7 @@
#include <PR/rcp.h>
#include "buffers/trig_tables.h"
#include "math.h"
#include "memory.h"
#pragma intrinsic (sqrtf,fabs)

View File

@ -22,6 +22,7 @@ s32 render_set_position(Mat4, s32);
f32 func_802B51E8(Vec3f, Vec3f);
s32 get_angle_between_two_vectors(Vec3f, Vec3f);
u32 func_802B5258(Vec3f, Vec3s);
void func_802B5794(Mat4, Vec3f, Vec3f);
void vec3f_set(Vec3f, f32, f32, f32);
void vec3s_set(Vec3s, s16, s16, s16);
void *vec3f_copy_return(Vec3f, Vec3f);

View File

@ -26,6 +26,7 @@ struct UnkStruct_802B8CD4 D_802B8CD4[] = {
0
};
s32 D_802B8CE4 = 0; // pad
s32 memoryPadding[2];
/**
* @brief Returns the address of the next available memory location and updates the memory pointer

View File

@ -563,19 +563,19 @@ UNUSED void func_80046C78(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8 *texture) {
}
UNUSED void func_80046CDC(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8 *texture) {
func_800464D0(arg0, arg1, arg2, arg3, texture, &D_0D005FB0, 64, 32, 64, 32);
func_800464D0(arg0, arg1, arg2, arg3, texture, D_0D005FB0, 64, 32, 64, 32);
}
UNUSED void func_80046D40(Vec3f arg0, Vec3su arg1, f32 arg2, u8 *texture) {
func_80046808(arg0, arg1, arg2, texture, &D_0D005FB0, 64, 32, 64, 32);
func_80046808(arg0, arg1, arg2, texture, D_0D005FB0, 64, 32, 64, 32);
}
UNUSED void func_80046D90(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8 *texture) {
func_800464D0(arg0, arg1, arg2, arg3, texture, D_0D0060B0, 64, 64, 64, 32);
func_800464D0(arg0, arg1, arg2, arg3, texture, common_vtx_hedgehog, 64, 64, 64, 32);
}
UNUSED void func_80046DF4(s32 arg0, s32 arg1, u16 arg2, f32 arg3, s32 arg4, u8 *texture) {
func_800465B8(arg0, arg1, arg2, arg3, arg4, texture, D_0D0060B0, 64, 64, 64, 32);
func_800465B8(arg0, arg1, arg2, arg3, arg4, texture, common_vtx_hedgehog, 64, 64, 64, 32);
}
void load_texture_and_tlut(u8 *tlut, u8 *texture, s32 width, s32 height) {
@ -3528,7 +3528,7 @@ void func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 vertexIndex) {
D_80183E80[2] = (s16) (temp_v0->unk_084[6] + 0x8000);
rsp_set_matrix_transformation(temp_v0->pos, (u16 *) D_80183E80, temp_v0->sizeScaling);
set_color_render((s32) temp_v0->unk_084[0], (s32) temp_v0->unk_084[1], (s32) temp_v0->unk_084[2], (s32) temp_v0->unk_084[3], (s32) temp_v0->unk_084[4], (s32) temp_v0->unk_084[5], (s32) temp_v0->primAlpha);
gSPVertex(gDisplayListHead++, &D_0D0060B0[vertexIndex], 4, 0);
gSPVertex(gDisplayListHead++, &common_vtx_hedgehog[vertexIndex], 4, 0);
gSPDisplayList(gDisplayListHead++, common_rectangle_display);
}
}
@ -3906,7 +3906,7 @@ void draw_crabs(s32 objectIndex, s32 cameraId) {
camera = &camera1[cameraId];
func_8004A6EC(objectIndex, 0.5f);
gObjectList[objectIndex].orientation[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos);
draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8 *) gObjectList[objectIndex].activeTLUT, gObjectList[objectIndex].activeTexture, D_0D0060B0, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8 *) gObjectList[objectIndex].activeTLUT, gObjectList[objectIndex].activeTexture, common_vtx_hedgehog, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
}
}
@ -4161,7 +4161,7 @@ void render_object_neon(s32 cameraId) {
object = &gObjectList[objectIndex];
if ((object->state >= 2) && (is_obj_index_flag_status_inactive(objectIndex, 0x00080000) != 0) && (is_object_visible_on_camera(objectIndex, camera, 0x2AABU) != 0)) {
object->orientation[1] = angle_between_object_camera(objectIndex, camera);
draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8 *) object->activeTLUT, object->activeTexture, D_0D0060B0, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8 *) object->activeTLUT, object->activeTexture, common_vtx_hedgehog, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
}
}
}

View File

@ -2955,7 +2955,7 @@ void init_obj_lakitu_red_flag_countdown(s32 objectIndex, s32 arg1) {
D_8018D168 = 0;
}
init_texture_object(objectIndex, (u8 *) common_tlut_lakitu_countdown, gTextureLakituNoLights1, 0x38U, (u16) 0x00000048);
gObjectList[objectIndex].vertex = D_0D005EB0;
gObjectList[objectIndex].vertex = common_vtx_lakitu;
gObjectList[objectIndex].sizeScaling = 0.15f;
set_object_flag_status_false(objectIndex, 0x00000010);
func_80072488(objectIndex);
@ -3048,7 +3048,7 @@ void init_obj_lakitu_red_flag(s32 objectIndex, s32 playerIndex) {
init_texture_object(objectIndex, common_tlut_lakitu_checkered_flag, gTextureLakituCheckeredFlag01, 0x48U, (u16) 0x00000038);
temp_v0 = &gObjectList[objectIndex];
temp_v0->activeTexture = D_8018C028;
temp_v0->vertex = D_0D006730;
temp_v0->vertex = common_vtx_also_lakitu;
temp_v0->pos[2] = 5000.0f;
temp_v0->pos[1] = 5000.0f;
temp_v0->pos[0] = 5000.0f;
@ -3298,7 +3298,7 @@ void func_8007A060(s32 objectIndex, s32 playerIndex) {
init_texture_object(objectIndex, common_tlut_lakitu_second_lap, gTextureLakituSecondLap01, 0x48U, (u16) 0x00000038);
temp_v0 = &gObjectList[objectIndex];
temp_v0->activeTexture = D_8018C028;
temp_v0->vertex = D_0D006730;
temp_v0->vertex = common_vtx_also_lakitu;
temp_v0->pos[2] = 5000.0f;
temp_v0->pos[1] = 5000.0f;
temp_v0->pos[0] = 5000.0f;
@ -3346,7 +3346,7 @@ void func_8007A228(s32 objectIndex, s32 playerIndex) {
init_texture_object(objectIndex, common_tlut_lakitu_final_lap, gTextureLakituFinalLap01, 0x48U, (u16) 0x00000038);
temp_v0 = &gObjectList[objectIndex];
temp_v0->activeTexture = D_8018C028;
temp_v0->vertex = D_0D006730;
temp_v0->vertex = common_vtx_also_lakitu;
temp_v0->pos[2] = 5000.0f;
temp_v0->pos[1] = 5000.0f;
temp_v0->pos[0] = 5000.0f;
@ -3392,7 +3392,7 @@ void func_8007A3F0(s32 objectIndex, s32 arg1) {
func_800791F0(objectIndex, arg1);
init_texture_object(objectIndex, common_tlut_lakitu_reverse, gTextureLakituReverse01, 0x48U, (u16) 0x00000038);
gObjectList[objectIndex].activeTexture = D_8018C028;
gObjectList[objectIndex].vertex = D_0D006730;
gObjectList[objectIndex].vertex = common_vtx_also_lakitu;
gObjectList[objectIndex].pos[2] = var;
gObjectList[objectIndex].pos[1] = var;
gObjectList[objectIndex].pos[0] = var;
@ -6698,7 +6698,7 @@ void func_8008311C(s32 objectIndex, s32 arg1) {
temp_s0 = &gObjectList[objectIndex];
temp_s0->activeTLUT = d_course_yoshi_valley_hedgehog_tlut;
temp_s0->activeTexture = d_course_yoshi_valley_hedgehog;
temp_s0->vertex = D_0D0060B0;
temp_s0->vertex = common_vtx_hedgehog;
temp_s0->sizeScaling = 0.2f;
temp_s0->itemDisplay = 0;
func_80072488(objectIndex);
@ -6754,7 +6754,7 @@ void func_800833D0(s32 objectIndex, s32 arg1) {
break;
}
if (gObjectList[objectIndex].itemDisplay == 0) {
gObjectList[objectIndex].vertex = D_0D0060B0;
gObjectList[objectIndex].vertex = common_vtx_hedgehog;
} else {
gObjectList[objectIndex].vertex = D_0D006130;
}
@ -6897,7 +6897,7 @@ void func_80083A94(s32 objectIndex) {
void func_80083B0C(s32 objectIndex) {
init_texture_object(objectIndex, d_course_frappe_snowland_snowman_tlut, d_course_frappe_snowland_snowman_body, 0x40U, (u16) 0x00000040);
gObjectList[objectIndex].vertex = D_0D0060B0;
gObjectList[objectIndex].vertex = common_vtx_hedgehog;
gObjectList[objectIndex].sizeScaling = 0.1f;
gObjectList[objectIndex].itemDisplay = 0;
func_80072488(objectIndex);

65
tools/mkgccgen.py Normal file
View File

@ -0,0 +1,65 @@
#!/usr/bin/python3
# Complete file list producer v0.7
# Written by ProjectRevoTPP
import os
from glob import glob
import sys
def holecount(file):
with open(file, 'r', encoding = 'utf-8') as infile:
contents = infile.readlines()
asm_count = 0
for i, line in enumerate(contents):
if(line.count("GLOBAL_ASM") > 0 and (i + 1 == len(contents) or contents[i+1].count("#endif") == 0)):
asm_count += 1
return asm_count
def noncount(file):
with open(file, 'r', encoding = 'utf-8') as infile:
contents = infile.readlines()
noncount = 0
for i, line in enumerate(contents):
if(line.count("NON_") > 0):
noncount += 1
return noncount
def holecount_all(src):
for subdir, dirs, files in os.walk(src):
for filename in files:
filepath = subdir + os.sep + filename
if(not filename.endswith('.c')):
continue
holes = holecount(filepath)
nonmatches = noncount(filepath)
if(holes > 0 and nonmatches > 0):
print(filename, holes, nonmatches)
return 1
# get file encoding type
def get_encoding_type(file):
with open(file, 'rb') as f:
rawdata = f.read()
return detect(rawdata)['encoding']
outfile = open(sys.argv[1], "w")
outfile.write("# This file is auto-generated. DO NOT MODIFY!\n\n")
outfile.write("SAFE_C_FILES := \\\n")
for directory in os.walk("src"):
for filename in glob(os.path.join(directory[0], "*.c")):
infile = open(filename, "r", encoding="ascii", errors="surrogateescape")
# Open content.
contents = infile.read()
# Set the counts.
nonm_count = contents.count("NON_MATCHING")
noneq_count = contents.count("NON_EQUIVALENT")
global_asm_count = contents.count("GLOBAL_ASM")
# NOTE: As of now there is no distinction between unattempted files and unfinished ones.
if nonm_count + noneq_count == global_asm_count :
outfile.write(" build/us/")
outfile.write(os.path.splitext(filename)[0])
outfile.write(".o \\\n")
infile.close()
outfile.close()

@ -1 +1 @@
Subproject commit 74b0c120290083a5e3571a43deada72781af072b
Subproject commit c82b4a8423eb41202dc61378aa50f0052140c132

View File

@ -73,6 +73,61 @@ D_0D001200:
type: vtx
offset: 0x1200
count: 1
D_0D001210:
symbol: D_0D001210
type: vtx
offset: 0x1210
count: 3
D_0D001240:
symbol: D_0D001240
type: vtx
offset: 0x1240
count: 3
D_0D001270:
symbol: D_0D001270
type: vtx
offset: 0x1270
count: 3
D_0D0012A0:
symbol: D_0D0012A0
type: vtx
offset: 0x12A0
count: 3
D_0D0012D0:
symbol: D_0D0012D0
type: vtx
offset: 0x12D0
count: 3
D_0D001300:
symbol: D_0D001300
type: vtx
offset: 0x1300
count: 3
D_0D001330:
symbol: D_0D001330
type: vtx
offset: 0x1330
count: 3
D_0D001360:
symbol: D_0D001360
type: vtx
offset: 0x1360
count: 3
common_vtx_finish_line_banner:
symbol: common_vtx_finish_line_banner
type: vtx
offset: 0x1390
count: 32
common_vtx_finish_post:
symbol: common_vtx_finish_post
type: vtx
offset: 0x1590
count: 24
D_0D001710:
symbol: D_0D001710
type: vtx
offset: 0x1710
count: 4
D_0D001750:
symbol: D_0D001750
type: gfx
@ -137,16 +192,12 @@ D_0D001C88:
symbol: D_0D001C88
type: gfx
offset: 0x1C88
common_vtx_itembox_question_mark:
symbol: common_vtx_itembox_question_mark
type: vtx
offset: 0x1D28
count: 4
D_0D001D68:
symbol: D_0D001D68
type: vtx
offset: 0x1D68
count: 3
common_vtx_itembox:
symbol: common_vtx_itembox
type: VTX
offset: 0x0D001CE8
count: 32
common_texture_item_box_question_mark:
symbol: common_texture_item_box_question_mark
type: texture
@ -173,10 +224,11 @@ itemBoxQuestionMarkModel:
symbol: itemBoxQuestionMarkModel
type: gfx
offset: 0x3008
D_0D003090:
symbol: D_0D003090
type: gfx
offset: 0x3090
offset: 0x0D003090
D_0D0030F8:
symbol: D_0D0030F8
type: gfx
@ -396,116 +448,61 @@ D_0D005E80:
type: vtx
offset: 0x5E80
count: 3
D_0D005EB0:
symbol: D_0D005EB0
common_vtx_lakitu:
symbol: common_vtx_lakitu
type: vtx
offset: 0x5EB0
count: 5
D_0D005F00:
symbol: D_0D005F00
type: vtx
offset: 0x5F00
count: 3
count: 8
D_0D005F30:
symbol: D_0D005F30
type: vtx
offset: 0x5F30
count: 5
D_0D005F80:
symbol: D_0D005F80
type: vtx
offset: 0x5F80
count: 3
count: 8
D_0D005FB0:
symbol: D_0D005FB0
type: vtx
offset: 0x5FB0
count: 1
D_0D005FC0:
symbol: D_0D005FC0
type: vtx
offset: 0x5FC0
count: 3
count: 4
D_0D005FF0:
symbol: D_0D005FF0
type: vtx
offset: 0x5FF0
count: 1
D_0D006000:
symbol: D_0D006000
type: vtx
offset: 0x6000
count: 3
count: 4
D_0D006030:
symbol: D_0D006030
type: vtx
offset: 0x6030
count: 5
D_0D006080:
symbol: D_0D006080
type: vtx
offset: 0x6080
count: 3
D_0D0060B0:
symbol: D_0D0060B0
count: 8
common_vtx_hedgehog:
symbol: common_vtx_hedgehog
type: vtx
offset: 0x60B0
count: 5
D_0D006100:
symbol: D_0D006100
type: vtx
offset: 0x6100
count: 3
count: 8
D_0D006130:
symbol: D_0D006130
type: vtx
offset: 0x6130
count: 5
D_0D006180:
symbol: D_0D006180
type: vtx
offset: 0x6180
count: 3
count: 8
D_0D0061B0:
symbol: D_0D0061B0
type: vtx
offset: 0x61B0
count: 13
D_0D006280:
symbol: D_0D006280
type: vtx
offset: 0x6280
count: 3
count: 16
D_0D0062B0:
symbol: D_0D0062B0
type: vtx
offset: 0x62B0
count: 29
D_0D006480:
symbol: D_0D006480
type: vtx
offset: 0x6480
count: 3
count: 32
D_0D0064B0:
symbol: D_0D0064B0
type: vtx
offset: 0x64B0
count: 37
D_0D006700:
symbol: D_0D006700
type: vtx
offset: 0x6700
count: 3
D_0D006730:
symbol: D_0D006730
count: 40
common_vtx_also_lakitu:
symbol: common_vtx_also_lakitu
type: vtx
offset: 0x6730
count: 25
D_0D0068C0:
symbol: D_0D0068C0
type: vtx
offset: 0x68C0
count: 3
count: 28
D_0D0068F0:
symbol: D_0D0068F0
type: vtx

View File

@ -156,7 +156,7 @@ D_02007B18:
symbol: D_02007B18
type: Gfx
offset: 0x7B18
D_02007B38:
D_02007B38: # unused
symbol: D_02007B38
type: vtx
offset: 0x7B38
@ -165,137 +165,137 @@ D_02007BB8:
symbol: D_02007BB8
type: vtx
offset: 0x7BB8
count: 2
D_02007BD8:
symbol: D_02007BD8
type: vtx
offset: 0x7BD8
count: 2
D_02007BF8:
symbol: D_02007BF8
type: vtx
offset: 0x7BF8
count: 2
D_02007C18:
symbol: D_02007C18
type: vtx
offset: 0x7C18
count: 2
D_02007C38:
symbol: D_02007C38
type: vtx
offset: 0x7C38
count: 2
D_02007C58:
symbol: D_02007C58
type: vtx
offset: 0x7C58
count: 2
D_02007C78:
symbol: D_02007C78
type: vtx
offset: 0x7C78
count: 2
D_02007C98:
symbol: D_02007C98
type: vtx
offset: 0x7C98
count: 2
D_02007CB8:
symbol: D_02007CB8
type: vtx
offset: 0x7CB8
count: 2
D_02007CD8:
symbol: D_02007CD8
type: vtx
offset: 0x7CD8
count: 2
D_02007CF8:
symbol: D_02007CF8
type: vtx
offset: 0x7CF8
count: 2
D_02007D18:
symbol: D_02007D18
type: vtx
offset: 0x7D18
count: 2
D_02007D38:
symbol: D_02007D38
type: vtx
offset: 0x7D38
count: 2
D_02007D58:
symbol: D_02007D58
type: vtx
offset: 0x7D58
count: 2
D_02007D78:
symbol: D_02007D78
type: vtx
offset: 0x7D78
count: 2
D_02007D98:
symbol: D_02007D98
type: vtx
offset: 0x7D98
count: 2
D_02007DB8:
symbol: D_02007DB8
type: vtx
offset: 0x7DB8
count: 2
D_02007DD8:
symbol: D_02007DD8
type: vtx
offset: 0x7DD8
count: 2
D_02007DF8:
symbol: D_02007DF8
type: vtx
offset: 0x7DF8
count: 2
D_02007E18:
symbol: D_02007E18
type: vtx
offset: 0x7E18
count: 2
D_02007E38:
symbol: D_02007E38
type: vtx
offset: 0x7E38
count: 2
D_02007E58:
symbol: D_02007E58
type: vtx
offset: 0x7E58
count: 2
D_02007E78:
symbol: D_02007E78
type: vtx
offset: 0x7E78
count: 2
D_02007E98:
symbol: D_02007E98
type: vtx
offset: 0x7E98
count: 2
D_02007EB8:
symbol: D_02007EB8
type: vtx
offset: 0x7EB8
count: 2
D_02007ED8:
symbol: D_02007ED8
type: vtx
offset: 0x7ED8
count: 2
D_02007EF8:
symbol: D_02007EF8
type: vtx
offset: 0x7EF8
count: 2
count: 54
# D_02007BD8:
# symbol: D_02007BD8
# type: vtx
# offset: 0x7BD8
# count: 2
# D_02007BF8:
# symbol: D_02007BF8
# type: vtx
# offset: 0x7BF8
# count: 2
# D_02007C18:
# symbol: D_02007C18
# type: vtx
# offset: 0x7C18
# count: 2
# D_02007C38:
# symbol: D_02007C38
# type: vtx
# offset: 0x7C38
# count: 2
# D_02007C58:
# symbol: D_02007C58
# type: vtx
# offset: 0x7C58
# count: 2
# D_02007C78:
# symbol: D_02007C78
# type: vtx
# offset: 0x7C78
# count: 2
# D_02007C98:
# symbol: D_02007C98
# type: vtx
# offset: 0x7C98
# count: 2
# D_02007CB8:
# symbol: D_02007CB8
# type: vtx
# offset: 0x7CB8
# count: 2
# D_02007CD8:
# symbol: D_02007CD8
# type: vtx
# offset: 0x7CD8
# count: 2
# D_02007CF8:
# symbol: D_02007CF8
# type: vtx
# offset: 0x7CF8
# count: 2
# D_02007D18:
# symbol: D_02007D18
# type: vtx
# offset: 0x7D18
# count: 2
# D_02007D38:
# symbol: D_02007D38
# type: vtx
# offset: 0x7D38
# count: 2
# D_02007D58:
# symbol: D_02007D58
# type: vtx
# offset: 0x7D58
# count: 2
# D_02007D78:
# symbol: D_02007D78
# type: vtx
# offset: 0x7D78
# count: 2
# D_02007D98:
# symbol: D_02007D98
# type: vtx
# offset: 0x7D98
# count: 2
# D_02007DB8:
# symbol: D_02007DB8
# type: vtx
# offset: 0x7DB8
# count: 2
# D_02007DD8:
# symbol: D_02007DD8
# type: vtx
# offset: 0x7DD8
# count: 2
# D_02007DF8:
# symbol: D_02007DF8
# type: vtx
# offset: 0x7DF8
# count: 2
# D_02007E18:
# symbol: D_02007E18
# type: vtx
# offset: 0x7E18
# count: 2
# D_02007E38:
# symbol: D_02007E38
# type: vtx
# offset: 0x7E38
# count: 2
# D_02007E58:
# symbol: D_02007E58
# type: vtx
# offset: 0x7E58
# count: 2
# D_02007E78:
# symbol: D_02007E78
# type: vtx
# offset: 0x7E78
# count: 2
# D_02007E98:
# symbol: D_02007E98
# type: vtx
# offset: 0x7E98
# count: 2
# D_02007EB8:
# symbol: D_02007EB8
# type: vtx
# offset: 0x7EB8
# count: 2
# D_02007ED8:
# symbol: D_02007ED8
# type: vtx
# offset: 0x7ED8
# count: 2
# D_02007EF8:
# symbol: D_02007EF8
# type: vtx
# offset: 0x7EF8
# count: 2
D_02007F18:
symbol: D_02007F18
type: gfx