Decompiled course geography (#19)

* Added bss

* Decompiled course vertex data and moved packed.s

* Added recomp

* Added new line char to the end of a few audio files
This commit is contained in:
CoderStig 2021-03-08 18:13:58 -07:00 committed by GitHub
parent 6121193a29
commit a0e31c27ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
80 changed files with 764981 additions and 1265 deletions

214
Makefile
View File

@ -28,12 +28,18 @@ BUILD_DIR := $(BUILD_DIR_BASE)/$(VERSION)
# Directories containing source files
INCLUDE_DIRS := include
SRC_DIRS := src src/audio
ASM_DIRS := asm asm/audio data data/courses data/sound_data
SRC_DIRS := src src/audio courses
ASM_DIRS := asm asm/audio data data/sound_data
COURSE_DIRS := \
courses/mushroom_cup/luigi_raceway courses/mushroom_cup/koopa_beach \
courses/mushroom_cup/moo_moo_farm courses/mushroom_cup/kalimari_desert courses/flower_cup/toads_turnpike courses/flower_cup/frappe_snowland \
courses/flower_cup/choco_mountain courses/flower_cup/mario_raceway courses/star_cup/wario_stadium courses/star_cup/sherbet_land courses/star_cup/royal_raceway \
courses/star_cup/bowsers_castle courses/special_cup/dks_jungle_parkway courses/special_cup/yoshi_valley courses/special_cup/banshee_boardwalk \
courses/special_cup/rainbow_road courses/battle/big_donut courses/battle/block_fort courses/battle/double_deck courses/battle/skyscraper
TEXTURES_DIR = textures
ALL_DIRS = $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(INCLUDE_DIRS) $(ASM_DIRS) $(ALL_KARTS_DIRS) $(TEXTURES_DIR)/raw $(TEXTURES_DIR)/standalone)
ALL_DIRS = $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(COURSE_DIRS) $(INCLUDE_DIRS) $(ASM_DIRS) $(ALL_KARTS_DIRS) $(TEXTURES_DIR)/raw $(TEXTURES_DIR)/standalone)
################### Universal Dependencies ###################
@ -70,18 +76,20 @@ GLOBAL_ASM_C_FILES != grep -rl 'GLOBAL_ASM(' $(wildcard src/*.c)
GLOBAL_ASM_O_FILES = $(foreach file,$(GLOBAL_ASM_C_FILES),$(BUILD_DIR)/$(file:.c=.o))
# GLOBAL_ASM_DEP = $(BUILD_DIR)/src/audio/non_matching_dep
# Source code files
COURSE_ASM_FILES := $(wildcard courses/*/*/packed.s)
C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s))
S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s)) $(COURSE_ASM_FILES)
COURSE_FILES := $(foreach dir,$(COURSE_DIRS),$(wildcard $(dir)/model.inc.c))
# Object files
O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
$(foreach file,$(COURSE_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
$(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o))
# Automatic dependency files
DEP_FILES := $(O_FILES:.o=.d) $(BUILD_DIR)/$(LD_SCRIPT).d
##################### Compiler Options #######################
IRIX_ROOT := tools/ido5.3_compiler
ifeq ($(shell type mips-linux-gnu-ld >/dev/null 2>/dev/null; echo $$?), 0)
CROSS := mips-linux-gnu-
@ -91,16 +99,31 @@ else
CROSS := mips64-elf-
endif
# check that either QEMU_IRIX is set or qemu-irix package installed
ifndef QEMU_IRIX
# USE_QEMU_IRIX - when ido is selected, select which way to emulate IRIX programs
# 1 - use qemu-irix
# 0 - statically recompile the IRIX programs
USE_QEMU_IRIX ?= 0
$(eval $(call validate-option,USE_QEMU_IRIX,0 1))
TOOLS_DIR := tools
ifeq ($(USE_QEMU_IRIX),1)
# Verify that qemu-irix exists
QEMU_IRIX := $(shell which qemu-irix)
ifeq (, $(QEMU_IRIX))
$(error Please install qemu-irix package or set QEMU_IRIX env var to the full qemu-irix binary path)
$(error Using the IDO compiler requires qemu-irix. Please install qemu-irix package or set the QEMU_IRIX environment variable to the full qemu-irix binary path)
endif
endif
ifeq ($(USE_QEMU_IRIX),1)
IRIX_ROOT := $(TOOLS_DIR)/ido5.3_compiler
CC := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc
else
IDO_ROOT := tools/ido5.3_recomp
CC := $(IDO_ROOT)/cc
endif
AS := $(CROSS)as
CC := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc
CPP := cpp -P -Wno-trigraphs
LD := $(CROSS)ld
AR := $(CROSS)ar
@ -139,10 +162,10 @@ endif
####################### Other Tools #########################
# N64 tools
TOOLS_DIR = tools
MIO0TOOL = $(TOOLS_DIR)/mio0
N64CKSUM = $(TOOLS_DIR)/n64cksum
N64GRAPHICS = $(TOOLS_DIR)/n64graphics
EXTRACT_DATA_FOR_MIO := $(TOOLS_DIR)/extract_data_for_mio
EMULATOR = mupen64plus
EMU_FLAGS = --noosd
LOADER = loader64
@ -207,10 +230,172 @@ $(BUILD_DIR)/%.o: %.s $(MIO0_FILES) $(RAW_TEXTURE_FILES)
$(GLOBAL_ASM_O_FILES): CC := $(PYTHON) tools/asm_processor/build.py $(CC) -- $(AS) $(ASFLAGS) --
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT)
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) #repeat for other files
$(CPP) $(VERSION_CFLAGS) -DBUILD_DIR=$(BUILD_DIR) -MMD -MP -MT $@ -MF $@.d -o $@ $<
$(BUILD_DIR)/$(TARGET).elf: $(O_FILES) $(COURSE_MIO0_OBJ_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt
#################### Compile course vertex to mio0 #####################
mushroom_cup := $(BUILD_DIR)/courses/mushroom_cup
flower_cup := $(BUILD_DIR)/courses/flower_cup
star_cup := $(BUILD_DIR)/courses/star_cup
special_cup := $(BUILD_DIR)/courses/special_cup
battle := $(BUILD_DIR)/courses/battle
LD_COURSE_VERTEX_DEPENDENCIES := \
$(mushroom_cup)/luigi_raceway/model.inc.mio0.o $(mushroom_cup)/moo_moo_farm/model.inc.mio0.o \
$(mushroom_cup)/koopa_beach/model.inc.mio0.o $(mushroom_cup)/kalimari_desert/model.inc.mio0.o \
$(flower_cup)/toads_turnpike/model.inc.mio0.o $(flower_cup)/frappe_snowland/model.inc.mio0.o \
$(flower_cup)/choco_mountain/model.inc.mio0.o $(flower_cup)/mario_raceway/model.inc.mio0.o \
$(star_cup)/wario_stadium/model.inc.mio0.o $(star_cup)/sherbet_land/model.inc.mio0.o \
$(star_cup)/royal_raceway/model.inc.mio0.o $(star_cup)/bowsers_castle/model.inc.mio0.o \
$(special_cup)/dks_jungle_parkway/model.inc.mio0.o $(special_cup)/yoshi_valley/model.inc.mio0.o \
$(special_cup)/banshee_boardwalk/model.inc.mio0.o $(special_cup)/rainbow_road/model.inc.mio0.o \
$(battle)/big_donut/model.inc.mio0.o $(battle)/block_fort/model.inc.mio0.o \
$(battle)/double_deck/model.inc.mio0.o $(battle)/skyscraper/model.inc.mio0.o \
$(mushroom_cup)/luigi_raceway/%.inc.mio0.o: courses/mushroom_cup/luigi_raceway/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(mushroom_cup)/luigi_raceway/$*.inc.elf.map -o $(mushroom_cup)/luigi_raceway/$*.inc.elf $(mushroom_cup)/luigi_raceway/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(mushroom_cup)/luigi_raceway/$*.inc.elf $(mushroom_cup)/luigi_raceway/$*.inc.bin
$(MIO0TOOL) -c $(mushroom_cup)/luigi_raceway/$*.inc.bin $(mushroom_cup)/luigi_raceway/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.balign 4\n\n.incbin \"build/us/courses/mushroom_cup/luigi_raceway/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_luigi_raceway_packed\n\n.incbin \"bin/course_luigi_raceway_packed.bin\"\n" > build/us/courses/mushroom_cup/luigi_raceway/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(mushroom_cup)/luigi_raceway/$*.inc.mio0.o $(mushroom_cup)/luigi_raceway/$*.inc.mio0.s
$(mushroom_cup)/moo_moo_farm/%.inc.mio0.o: courses/mushroom_cup/moo_moo_farm/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(mushroom_cup)/moo_moo_farm/$*.elf.map -o $(mushroom_cup)/moo_moo_farm/$*.inc.elf $(mushroom_cup)/moo_moo_farm/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(mushroom_cup)/moo_moo_farm/$*.inc.elf $(mushroom_cup)/moo_moo_farm/$*.inc.bin
$(MIO0TOOL) -c $(mushroom_cup)/moo_moo_farm/$*.inc.bin $(mushroom_cup)/moo_moo_farm/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/mushroom_cup/moo_moo_farm/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_moo_moo_farm_packed\n\n.incbin \"bin/course_moo_moo_farm_packed.bin\"\n" > build/us/courses/mushroom_cup/moo_moo_farm/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(mushroom_cup)/moo_moo_farm/$*.inc.mio0.o $(mushroom_cup)/moo_moo_farm/$*.inc.mio0.s
$(mushroom_cup)/koopa_beach/%.inc.mio0.o: courses/mushroom_cup/koopa_beach/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(mushroom_cup)/koopa_beach/$*.elf.map -o $(mushroom_cup)/koopa_beach/$*.inc.elf $(mushroom_cup)/koopa_beach/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(mushroom_cup)/koopa_beach/$*.inc.elf $(mushroom_cup)/koopa_beach/$*.inc.bin
$(MIO0TOOL) -c $(mushroom_cup)/koopa_beach/$*.inc.bin $(mushroom_cup)/koopa_beach/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/mushroom_cup/koopa_beach/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_koopa_troopa_beach_packed\n\n.incbin \"bin/course_koopa_troopa_beach_packed.bin\"\n" > build/us/courses/mushroom_cup/koopa_beach/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(mushroom_cup)/koopa_beach/$*.inc.mio0.o $(mushroom_cup)/koopa_beach/$*.inc.mio0.s
$(mushroom_cup)/kalimari_desert/%.inc.mio0.o: courses/mushroom_cup/kalimari_desert/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(mushroom_cup)/kalimari_desert/$*.elf.map -o $(mushroom_cup)/kalimari_desert/$*.inc.elf $(mushroom_cup)/kalimari_desert/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(mushroom_cup)/kalimari_desert/$*.inc.elf $(mushroom_cup)/kalimari_desert/$*.inc.bin
$(MIO0TOOL) -c $(mushroom_cup)/kalimari_desert/$*.inc.bin $(mushroom_cup)/kalimari_desert/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/mushroom_cup/kalimari_desert/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_kalimari_desert_packed\n\n.incbin \"bin/course_kalimari_desert_packed.bin\"\n" > build/us/courses/mushroom_cup/kalimari_desert/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(mushroom_cup)/kalimari_desert/$*.inc.mio0.o $(mushroom_cup)/kalimari_desert/$*.inc.mio0.s
$(flower_cup)/toads_turnpike/%.inc.mio0.o: courses/flower_cup/toads_turnpike/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(flower_cup)/toads_turnpike/$*.elf.map -o $(flower_cup)/toads_turnpike/$*.inc.elf $(flower_cup)/toads_turnpike/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(flower_cup)/toads_turnpike/$*.inc.elf $(flower_cup)/toads_turnpike/$*.inc.bin
$(MIO0TOOL) -c $(flower_cup)/toads_turnpike/$*.inc.bin $(flower_cup)/toads_turnpike/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/flower_cup/toads_turnpike/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_toads_turnpike_packed\n\n.incbin \"bin/course_toads_turnpike_packed.bin\"\n" > build/us/courses/flower_cup/toads_turnpike/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(flower_cup)/toads_turnpike/$*.inc.mio0.o $(flower_cup)/toads_turnpike/$*.inc.mio0.s
$(flower_cup)/frappe_snowland/%.inc.mio0.o: courses/flower_cup/frappe_snowland/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(flower_cup)/frappe_snowland/$*.elf.map -o $(flower_cup)/frappe_snowland/$*.inc.elf $(flower_cup)/frappe_snowland/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(flower_cup)/frappe_snowland/$*.inc.elf $(flower_cup)/frappe_snowland/$*.inc.bin
$(MIO0TOOL) -c $(flower_cup)/frappe_snowland/$*.inc.bin $(flower_cup)/frappe_snowland/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/flower_cup/frappe_snowland/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_frappe_snowland_packed\n\n.incbin \"bin/course_frappe_snowland_packed.bin\"\n" > build/us/courses/flower_cup/frappe_snowland/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(flower_cup)/frappe_snowland/$*.inc.mio0.o $(flower_cup)/frappe_snowland/$*.inc.mio0.s
$(flower_cup)/choco_mountain/%.inc.mio0.o: courses/flower_cup/choco_mountain/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(flower_cup)/choco_mountain/$*.elf.map -o $(flower_cup)/choco_mountain/$*.inc.elf $(flower_cup)/choco_mountain/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(flower_cup)/choco_mountain/$*.inc.elf $(flower_cup)/choco_mountain/$*.inc.bin
$(MIO0TOOL) -c $(flower_cup)/choco_mountain/$*.inc.bin $(flower_cup)/choco_mountain/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/flower_cup/choco_mountain/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_choco_mountain_packed\n\n.incbin \"bin/course_choco_mountain_packed.bin\"\n" > build/us/courses/flower_cup/choco_mountain/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(flower_cup)/choco_mountain/$*.inc.mio0.o $(flower_cup)/choco_mountain/$*.inc.mio0.s
$(flower_cup)/mario_raceway/%.inc.mio0.o: courses/flower_cup/mario_raceway/model.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(flower_cup)/mario_raceway/model.elf.map -o $(flower_cup)/mario_raceway/model.inc.elf $(flower_cup)/mario_raceway/model.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(flower_cup)/mario_raceway/model.inc.elf $(flower_cup)/mario_raceway/model.inc.bin
$(MIO0TOOL) -c $(flower_cup)/mario_raceway/model.inc.bin $(flower_cup)/mario_raceway/model.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/flower_cup/mario_raceway/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_mario_raceway_packed\n\n.incbin \"bin/course_mario_raceway_packed.bin\"\n" > build/us/courses/flower_cup/mario_raceway/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(flower_cup)/mario_raceway/$*.inc.mio0.o $(flower_cup)/mario_raceway/$*.inc.mio0.s
$(star_cup)/wario_stadium/%.inc.mio0.o: courses/star_cup/wario_stadium/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(star_cup)/wario_stadium/$*.elf.map -o $(star_cup)/wario_stadium/$*.inc.elf $(star_cup)/wario_stadium/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(star_cup)/wario_stadium/$*.inc.elf $(star_cup)/wario_stadium/$*.inc.bin
$(MIO0TOOL) -c $(star_cup)/wario_stadium/$*.inc.bin $(star_cup)/wario_stadium/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/star_cup/wario_stadium/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_wario_stadium_packed\n\n.incbin \"bin/course_wario_stadium_packed.bin\"\n" > build/us/courses/star_cup/wario_stadium/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(star_cup)/wario_stadium/$*.inc.mio0.o $(star_cup)/wario_stadium/$*.inc.mio0.s
$(star_cup)/sherbet_land/%.inc.mio0.o: courses/star_cup/sherbet_land/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(star_cup)/sherbet_land/$*.elf.map -o $(star_cup)/sherbet_land/$*.inc.elf $(star_cup)/sherbet_land/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(star_cup)/sherbet_land/$*.inc.elf $(star_cup)/sherbet_land/$*.inc.bin
$(MIO0TOOL) -c $(star_cup)/sherbet_land/$*.inc.bin $(star_cup)/sherbet_land/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/star_cup/sherbet_land/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_sherbet_land_packed\n\n.incbin \"bin/course_sherbet_land_packed.bin\"\n" > build/us/courses/star_cup/sherbet_land/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(star_cup)/sherbet_land/$*.inc.mio0.o $(star_cup)/sherbet_land/$*.inc.mio0.s
$(star_cup)/royal_raceway/%.inc.mio0.o: courses/star_cup/royal_raceway/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(star_cup)/royal_raceway/$*.elf.map -o $(star_cup)/royal_raceway/$*.inc.elf $(star_cup)/royal_raceway/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(star_cup)/royal_raceway/$*.inc.elf $(star_cup)/royal_raceway/$*.inc.bin
$(MIO0TOOL) -c $(star_cup)/royal_raceway/$*.inc.bin $(star_cup)/royal_raceway/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/star_cup/royal_raceway/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_royal_raceway_packed\n\n.incbin \"bin/course_royal_raceway_packed.bin\"\n" > build/us/courses/star_cup/royal_raceway/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(star_cup)/royal_raceway/$*.inc.mio0.o $(star_cup)/royal_raceway/$*.inc.mio0.s
$(star_cup)/bowsers_castle/%.inc.mio0.o: courses/star_cup/bowsers_castle/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(star_cup)/bowsers_castle/$*.elf.map -o $(star_cup)/bowsers_castle/$*.inc.elf $(star_cup)/bowsers_castle/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(star_cup)/bowsers_castle/$*.inc.elf $(star_cup)/bowsers_castle/$*.inc.bin
$(MIO0TOOL) -c $(star_cup)/bowsers_castle/$*.inc.bin $(star_cup)/bowsers_castle/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/star_cup/bowsers_castle/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_bowsers_castle_packed\n\n.incbin \"bin/course_bowsers_castle_packed.bin\"\n" > build/us/courses/star_cup/bowsers_castle/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(star_cup)/bowsers_castle/$*.inc.mio0.o $(star_cup)/bowsers_castle/$*.inc.mio0.s
$(special_cup)/dks_jungle_parkway/%.inc.mio0.o: courses/special_cup/dks_jungle_parkway/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(special_cup)/dks_jungle_parkway/$*.elf.map -o $(special_cup)/dks_jungle_parkway/$*.inc.elf $(special_cup)/dks_jungle_parkway/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(special_cup)/dks_jungle_parkway/$*.inc.elf $(special_cup)/dks_jungle_parkway/$*.inc.bin
$(MIO0TOOL) -c $(special_cup)/dks_jungle_parkway/$*.inc.bin $(special_cup)/dks_jungle_parkway/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/special_cup/dks_jungle_parkway/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_dks_jungle_parkway_packed\n\n.incbin \"bin/course_dks_jungle_parkway_packed.bin\"\n" > build/us/courses/special_cup/dks_jungle_parkway/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(special_cup)/dks_jungle_parkway/$*.inc.mio0.o $(special_cup)/dks_jungle_parkway/$*.inc.mio0.s
$(special_cup)/yoshi_valley/%.inc.mio0.o: courses/special_cup/yoshi_valley/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(special_cup)/yoshi_valley/$*.elf.map -o $(special_cup)/yoshi_valley/$*.inc.elf $(special_cup)/yoshi_valley/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(special_cup)/yoshi_valley/$*.inc.elf $(special_cup)/yoshi_valley/$*.inc.bin
$(MIO0TOOL) -c $(special_cup)/yoshi_valley/$*.inc.bin $(special_cup)/yoshi_valley/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/special_cup/yoshi_valley/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_yoshi_valley_packed\n\n.incbin \"bin/course_yoshi_valley_packed.bin\"\n" > build/us/courses/special_cup/yoshi_valley/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(special_cup)/yoshi_valley/$*.inc.mio0.o $(special_cup)/yoshi_valley/$*.inc.mio0.s
$(special_cup)/banshee_boardwalk/%.inc.mio0.o: courses/special_cup/banshee_boardwalk/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(special_cup)/banshee_boardwalk/$*.elf.map -o $(special_cup)/banshee_boardwalk/$*.inc.elf $(special_cup)/banshee_boardwalk/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(special_cup)/banshee_boardwalk/$*.inc.elf $(special_cup)/banshee_boardwalk/$*.inc.bin
$(MIO0TOOL) -c $(special_cup)/banshee_boardwalk/$*.inc.bin $(special_cup)/banshee_boardwalk/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/special_cup/banshee_boardwalk/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_banshee_boardwalk_packed\n\n.incbin \"bin/course_banshee_boardwalk_packed.bin\"\n" > build/us/courses/special_cup/banshee_boardwalk/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(special_cup)/banshee_boardwalk/$*.inc.mio0.o $(special_cup)/banshee_boardwalk/$*.inc.mio0.s
$(special_cup)/rainbow_road/%.inc.mio0.o: courses/special_cup/rainbow_road/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(special_cup)/rainbow_road/$*.elf.map -o $(special_cup)/rainbow_road/$*.inc.elf $(special_cup)/rainbow_road/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(special_cup)/rainbow_road/$*.inc.elf $(special_cup)/rainbow_road/$*.inc.bin
$(MIO0TOOL) -c $(special_cup)/rainbow_road/$*.inc.bin $(special_cup)/rainbow_road/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/special_cup/rainbow_road/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_rainbow_road_packed\n\n.incbin \"bin/course_rainbow_road_packed.bin\"\n" > build/us/courses/special_cup/rainbow_road/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(special_cup)/rainbow_road/$*.inc.mio0.o $(special_cup)/rainbow_road/$*.inc.mio0.s
$(battle)/big_donut/%.inc.mio0.o: courses/battle/big_donut/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(battle)/big_donut/$*.elf.map -o $(battle)/big_donut/$*.inc.elf $(battle)/big_donut/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(battle)/big_donut/$*.inc.elf $(battle)/big_donut/$*.inc.bin
$(MIO0TOOL) -c $(battle)/big_donut/$*.inc.bin $(battle)/big_donut/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/battle/big_donut/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_big_donut_packed\n\n.incbin \"bin/course_big_donut_packed.bin\"\n" > build/us/courses/battle/big_donut/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(battle)/big_donut/$*.inc.mio0.o $(battle)/big_donut/$*.inc.mio0.s
$(battle)/block_fort/%.inc.mio0.o: courses/battle/block_fort/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(battle)/block_fort/$*.elf.map -o $(battle)/block_fort/$*.inc.elf $(battle)/block_fort/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(battle)/block_fort/$*.inc.elf $(battle)/block_fort/$*.inc.bin
$(MIO0TOOL) -c $(battle)/block_fort/$*.inc.bin $(battle)/block_fort/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/battle/block_fort/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_block_fort_packed\n\n.incbin \"bin/course_block_fort_packed.bin\"\n" > build/us/courses/battle/block_fort/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(battle)/block_fort/$*.inc.mio0.o $(battle)/block_fort/$*.inc.mio0.s
$(battle)/double_deck/%.inc.mio0.o: courses/battle/double_deck/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(battle)/double_deck/$*.elf.map -o $(battle)/double_deck/$*.inc.elf $(battle)/double_deck/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(battle)/double_deck/$*.inc.elf $(battle)/double_deck/$*.inc.bin
$(MIO0TOOL) -c $(battle)/double_deck/$*.inc.bin $(battle)/double_deck/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/battle/double_deck/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_double_deck_packed\n\n.incbin \"bin/course_double_deck_packed.bin\"\n" > build/us/courses/battle/double_deck/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(battle)/double_deck/$*.inc.mio0.o $(battle)/double_deck/$*.inc.mio0.s
$(battle)/skyscraper/%.inc.mio0.o: courses/battle/skyscraper/%.inc.c
$(LD) -t -e 0 -Ttext=0F000000 -Map $(battle)/skyscraper/$*.elf.map -o $(battle)/skyscraper/$*.inc.elf $(battle)/skyscraper/$*.inc.o --no-check-sections
$(V)$(EXTRACT_DATA_FOR_MIO) $(battle)/skyscraper/$*.inc.elf $(battle)/skyscraper/$*.inc.bin
$(MIO0TOOL) -c $(battle)/skyscraper/$*.inc.bin $(battle)/skyscraper/$*.inc.mio0
printf ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"build/us/courses/battle/skyscraper/model.inc.mio0\"\n\n.balign 4\n\nglabel d_course_skyscraper_packed\n\n.incbin \"bin/course_skyscraper_packed.bin\"\n" > build/us/courses/battle/skyscraper/model.inc.mio0.s
$(AS) $(ASFLAGS) -o $(battle)/skyscraper/$*.inc.mio0.o $(battle)/skyscraper/$*.inc.mio0.s
#################### #####################
$(BUILD_DIR)/$(TARGET).elf: $(O_FILES) $(COURSE_MIO0_OBJ_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(LD_COURSE_VERTEX_DEPENDENCIES) undefined_syms.txt
$(LD) $(LDFLAGS) -o $@ $(O_FILES)
$(BUILD_DIR)/$(TARGET).z64: $(BUILD_DIR)/$(TARGET).elf
@ -232,9 +417,10 @@ load: $(TARGET).z64
.PHONY: all clean distclean default diff test load
.SECONDARY:
# Remove built-in rules, to improve performance
# Remove built-in rules, to improve build/us/courses/star_cup/bowsers_castle/model.inc.mio0.performance
MAKEFLAGS += --no-builtin-rules
-include $(DEP_FILES)
print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true

View File

@ -26,8 +26,9 @@ COURSE_DL_NAMES := $(addprefix course_,$(addsuffix _dl,$(COURSE_NAMES)))
COURSE_DL_MIO0_FILES := $(addprefix $(BUILD_DIR)/bin/,$(addsuffix .mio0,$(COURSE_DL_NAMES)))
COURSE_DL_MIO0_OBJ_FILES := $(COURSE_DL_MIO0_FILES:.mio0=.mio0.o)
COURSE_VERTEX_NAMES := $(addprefix course_,$(addsuffix _vertex,$(COURSE_NAMES)))
COURSE_VERTEX_MIO0_FILES := $(addprefix $(BUILD_DIR)/bin/,$(addsuffix .mio0,$(COURSE_VERTEX_NAMES)))
# COURSE_VERTEX_NAMES := $(addprefix course_,$(addsuffix _vertex,$(COURSE_NAMES)))
# COURSE_VERTEX_MIO0_FILES := $(addprefix $(BUILD_DIR)/bin/,$(addsuffix .mio0,$(COURSE_VERTEX_NAMES)))
COURSE_MIO0_OBJ_FILES := $(COURSE_DL_MIO0_OBJ_FILES)
@ -121,7 +122,7 @@ KARTS_DIR := bin/karts
ALL_KARTS_DIRS := $(wildcard $(KARTS_DIR)/*)
KART_TEXTURE_MIO0_FILES := $(addprefix $(BUILD_DIR)/,$(patsubst %.bin,%.mio0,$(wildcard $(KARTS_DIR)/*/*.bin)))
MIO0_FILES := $(COURSE_VERTEX_MIO0_FILES) $(OTHER_DATA_MIO0_FILES) $(TEXTURE_DATA_MIO0_FILES) $(STANDALONE_TEXTURE_MIO0_FILES) $(KART_TEXTURE_MIO0_FILES)
MIO0_FILES := $(OTHER_DATA_MIO0_FILES) $(TEXTURE_DATA_MIO0_FILES) $(STANDALONE_TEXTURE_MIO0_FILES) $(KART_TEXTURE_MIO0_FILES)
MUSIC_FILES = \
$(MUSIC_DIR)/seq_00.m64 \

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,561 @@
#include "types.h"
mk64_Vtx d_course_double_deck_vertex[] = {
{{ 577, 60, 100}, { -317, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 80, 100}, { -317, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 80, 576}, { 9839, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 60, 576}, { 9839, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 385, 90, 384}, { -189, 610}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 110, 384}, { -189, 1037}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 110, 100}, { 5871, 1037}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 90, 100}, { 5871, 610}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 193, 80, 576}, { 1917, 1057}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 80, 576}, { -61, 1057}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 60, 576}, { -61, 1484}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 193, 60, 576}, { 1917, 1483}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 193, 50, 384}, { 3932, 1228}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 193, 80, 576}, { 0, 614}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 193, 60, 576}, { 0, 1023}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 193, 30, 384}, { 3932, 1638}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 60, 576}, { -128, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 577, 80, 576}, { -128, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 80, 576}, { 3967, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 60, 576}, { 3968, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 90, 100}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 385, 110, 100}, { 0, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 80, 100}, { 4096, 810}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 60, 100}, { 4096, 384}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 385, 90, -384}, { 5832, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 110, -384}, { 5832, 614}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 110, -384}, { 0, 614}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 90, -384}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 577, 80, -192}, { 1899, 1057}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 80, -100}, { -61, 1057}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 60, -100}, { -61, 1484}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 60, -192}, { 1899, 1484}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 385, 50, -192}, { 3932, 1228}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 80, -192}, { 0, 614}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 60, -192}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 385, 30, -192}, { 3932, 1638}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 60, -576}, { -128, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 80, -576}, { -128, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 80, -384}, { 3968, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 60, -384}, { 3967, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 60, -100}, { -61, 1070}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 577, 80, -100}, { -61, 1497}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 110, -100}, { 4034, 2137}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 90, -100}, { 4034, 1710}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 60, 576}, { -61, 1070}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 80, 576}, { -61, 1497}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 110, 384}, { 4034, 2137}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 90, 384}, { 4034, 1710}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 60, 576}, { -128, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 80, 576}, { -128, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 80, 384}, { 3967, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 60, 384}, { 3967, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -100, 90, -384}, { -188, 1023}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 110, -384}, { -188, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -383, 110, -384}, { 5853, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -383, 90, -384}, { 5853, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 90, -100}, { -189, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 110, -100}, { -189, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 110, -384}, { 5867, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 90, -384}, { 5867, 1023}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -383, 90, 100}, { -189, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 110, 100}, { -189, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 110, 384}, { 5871, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 90, 384}, { 5871, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 100, 90, 384}, { -189, 1023}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 110, 384}, { -189, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 385, 110, 384}, { 5885, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 385, 90, 384}, { 5885, 1023}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 50, 192}, { 3932, 1228}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 80, 192}, { 0, 614}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 60, 192}, { 0, 1023}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -383, 30, 192}, { 3932, 1638}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 90, 384}, { 188, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 110, 384}, { 188, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 80, 576}, { 4284, 810}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 60, 576}, { 4284, 384}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 60, 576}, { 188, 1050}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 80, 576}, { 188, 1477}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 80, 576}, { 10326, 1477}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 60, 576}, { 10326, 1050}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -383, 110, 384}, { 6230, 1037}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 110, 384}, { 188, 1037}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 90, 384}, { 188, 1463}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 90, 384}, { 6230, 1463}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -575, 60, 100}, { 3932, 1638}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -575, 80, 100}, { 3932, 1228}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 110, 100}, { 0, 614}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 90, 100}, { 0, 1023}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -575, 80, 192}, { 1886, 614}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 80, 100}, { 0, 614}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 60, 100}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 60, 192}, { 1886, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 60, -576}, { -317, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 80, -576}, { -317, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 80, -576}, { 9853, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 60, -576}, { 9853, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 769, 60, -768}, { -445, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 769, 98, -768}, { -445, 1826}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 98, -768}, { 13821, 1826}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 60, -768}, { 13821, 1023}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 60, -768}, { 13664, 1023}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 98, -768}, { 13664, 253}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -767, 98, -768}, { 0, 253}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -767, 60, -768}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -767, 60, -768}, { 13678, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 98, -768}, { 13678, 253}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 98, -100}, { 0, 253}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 60, -100}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 60, -100}, { 1024, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 98, -100}, { 1023, 253}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 98, 100}, { -3072, 253}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 60, 100}, { -3072, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 60, 100}, { -445, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 98, 100}, { -445, 1826}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 98, 768}, { 13807, 1826}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 60, 768}, { 13807, 1023}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 100, 60, -768}, { -133, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 98, -768}, { -133, 1826}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 98, -768}, { 4133, 1826}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 60, -768}, { 4133, 1023}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -383, 80, -576}, { -131, 1037}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 50, -384}, { 4014, 1037}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 30, -384}, { 4079, 615}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 60, -576}, { -65, 615}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 80, -384}, { -131, 1037}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 50, -384}, { 4014, 1037}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 30, -384}, { 4079, 615}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 577, 60, -384}, { -65, 615}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 80, 576}, { -131, 1037}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 50, 384}, { 4014, 1037}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 30, 384}, { 4079, 615}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 60, 576}, { -65, 615}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 80, 384}, { -131, 1037}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 50, 384}, { 4014, 1037}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 30, 384}, { 4079, 615}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -575, 60, 384}, { -65, 615}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 769, 60, -100}, { -445, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 98, -100}, { -445, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 98, -768}, { 13803, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 60, -768}, { 13803, 1023}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -767, 98, 768}, { -444, 1049}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 98, 768}, { 13789, 1049}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 60, 768}, { 13789, 246}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -767, 60, 768}, { -444, 246}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -191, 80, -576}, { 1885, 1057}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 80, -576}, { -60, 1057}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 60, -576}, { -60, 1483}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -191, 60, -576}, { 1885, 1484}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -191, 50, -384}, { 3932, 1228}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -191, 80, -576}, { 0, 614}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -191, 60, -576}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -191, 30, -384}, { 3932, 1638}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 60, -576}, { -128, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -575, 80, -576}, { -128, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 80, -576}, { 3967, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 60, -576}, { 3967, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 60, -576}, { -60, 1070}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 80, -576}, { -60, 1497}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 110, -384}, { 4035, 2137}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 90, -384}, { 4035, 1710}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 100, 90, -384}, { 3932, 409}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 110, -384}, { 3932, 0}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 80, -576}, { 0, 614}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 60, -576}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 60, -100}, { -317, 1023}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 80, -100}, { -317, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 80, -576}, { 9835, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 60, -576}, { 9835, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -100, 60, 768}, { 133, 1074}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 98, 768}, { 133, 1876}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 98, 768}, { 4400, 1876}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 60, 768}, { 4400, 1074}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 60, 768}, { 0, 1074}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 98, 768}, { 0, 1876}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 769, 98, 768}, { 14267, 1876}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 769, 60, 768}, { 14267, 1074}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 769, 60, 768}, { -445, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 98, 768}, { -445, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 98, 100}, { 13807, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 60, 100}, { 13807, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 60, 100}, { -133, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 98, 100}, { -133, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 98, -100}, { 4133, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 60, -100}, { 4133, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -383, 90, -384}, { 5867, 1443}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 110, -384}, { 5867, 1017}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 110, -100}, { -189, 1017}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 90, -100}, { -189, 1444}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 90, -100}, { -189, 1030}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -383, 110, -100}, { -189, 1457}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 80, -100}, { 3906, 817}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 60, -100}, { 3906, 390}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 193, 90, -192}, { -409, -2662}, {0xc8, 0x60, 0x60, 0x00}},
{{ 193, 90, 192}, { -409, 1269}, {0xc8, 0x60, 0x60, 0x00}},
{{ 385, 90, 100}, { 1556, 326}, {0xc8, 0x60, 0x60, 0x00}},
{{ 385, 90, -100}, { 1556, -1721}, {0xc8, 0x60, 0x60, 0x00}},
{{ 385, 90, -384}, { 1556, -4628}, {0xc8, 0x60, 0x60, 0x00}},
{{ -575, 60, -100}, { 1966, -697}, {0xc8, 0x60, 0x60, 0x00}},
{{ -575, 60, 100}, { 1966, 1350}, {0xc8, 0x60, 0x60, 0x00}},
{{ -383, 90, 100}, { 3932, 1350}, {0xc8, 0x60, 0x60, 0x00}},
{{ -383, 90, -100}, { 3932, -697}, {0xc8, 0x60, 0x60, 0x00}},
{{ 385, 90, 100}, { -2539, -4793}, {0xc8, 0x60, 0x60, 0x00}},
{{ 577, 60, 100}, { -573, -4793}, {0xc8, 0x60, 0x60, 0x00}},
{{ 577, 60, -100}, { -573, -6841}, {0xc8, 0x60, 0x60, 0x00}},
{{ 385, 90, -100}, { -2539, -6841}, {0xc8, 0x60, 0x60, 0x00}},
{{ 100, 90, -384}, { 1712, 3563}, {0xc8, 0x60, 0x60, 0x00}},
{{ 100, 60, -576}, { 1712, 1597}, {0xc8, 0x60, 0x60, 0x00}},
{{ -100, 60, -576}, { -335, 1597}, {0xc8, 0x60, 0x60, 0x00}},
{{ -100, 90, -384}, { -335, 3563}, {0xc8, 0x60, 0x60, 0x00}},
{{ 769, 60, -100}, { 1392, 1350}, {0xa4, 0x34, 0x34, 0x00}},
{{ 769, 60, -768}, { 1392, -5488}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 60, -384}, { -573, -1556}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 60, -192}, { -573, 409}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 60, -576}, { -573, -3522}, {0xa4, 0x34, 0x34, 0x00}},
{{ 385, 30, -384}, { -2539, -1556}, {0xa4, 0x34, 0x34, 0x00}},
{{ 385, 30, -192}, { -2539, 409}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 60, -100}, { -573, 1350}, {0xa4, 0x34, 0x34, 0x00}},
{{ -767, 60, -768}, { -1023, -368}, {0xa4, 0x34, 0x34, 0x00}},
{{ -575, 60, -576}, { 942, 1597}, {0xa4, 0x34, 0x34, 0x00}},
{{ -383, 60, -576}, { 2908, 1597}, {0xa4, 0x34, 0x34, 0x00}},
{{ -191, 60, -576}, { 4874, 1597}, {0xa4, 0x34, 0x34, 0x00}},
{{ -100, 60, -768}, { 5808, -368}, {0xa4, 0x34, 0x34, 0x00}},
{{ -383, 30, -384}, { 2908, 3563}, {0xa4, 0x34, 0x34, 0x00}},
{{ -191, 30, -384}, { 4874, 3563}, {0xa4, 0x34, 0x34, 0x00}},
{{ -191, 60, -576}, { 4874, 1597}, {0xa4, 0x34, 0x34, 0x00}},
{{ -100, 60, -576}, { 5808, 1597}, {0xa4, 0x34, 0x34, 0x00}},
{{ -100, 60, -768}, { 5808, -368}, {0xa4, 0x34, 0x34, 0x00}},
{{ 193, 90, -192}, { -409, -2662}, {0xc8, 0x60, 0x60, 0x00}},
{{ 385, 90, -384}, { 1556, -4628}, {0xc8, 0x60, 0x60, 0x00}},
{{ 100, 90, -384}, { -1359, -4628}, {0xc8, 0x60, 0x60, 0x00}},
{{ -191, 90, -192}, { -4341, -2662}, {0xc8, 0x60, 0x60, 0x00}},
{{ -100, 90, -384}, { -3407, -4628}, {0xc8, 0x60, 0x60, 0x00}},
{{ 769, 60, 768}, { 6512, 1024}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 60, 576}, { 4546, -942}, {0xa4, 0x34, 0x34, 0x00}},
{{ 385, 60, 576}, { 2580, -942}, {0xa4, 0x34, 0x34, 0x00}},
{{ 193, 60, 576}, { 614, -942}, {0xa4, 0x34, 0x34, 0x00}},
{{ 100, 60, 768}, { -335, 1023}, {0xa4, 0x34, 0x34, 0x00}},
{{ 385, 30, 384}, { 2580, -2908}, {0xa4, 0x34, 0x34, 0x00}},
{{ 193, 30, 384}, { 614, -2908}, {0xa4, 0x34, 0x34, 0x00}},
{{ 193, 90, 192}, { 5734, -778}, {0xc8, 0x60, 0x60, 0x00}},
{{ -191, 90, 192}, { 1802, -778}, {0xc8, 0x60, 0x60, 0x00}},
{{ -100, 90, 384}, { 2736, 1187}, {0xc8, 0x60, 0x60, 0x00}},
{{ 100, 90, 384}, { 4784, 1187}, {0xc8, 0x60, 0x60, 0x00}},
{{ 385, 90, 384}, { 7700, 1187}, {0xc8, 0x60, 0x60, 0x00}},
{{ -383, 90, 384}, { -163, 1187}, {0xc8, 0x60, 0x60, 0x00}},
{{ -383, 90, 100}, { -163, -1721}, {0xc8, 0x60, 0x60, 0x00}},
{{ 100, 60, 576}, { -335, -942}, {0xa4, 0x34, 0x34, 0x00}},
{{ 100, 90, 384}, { 8880, -2908}, {0xc8, 0x60, 0x60, 0x00}},
{{ -100, 90, 384}, { 6832, -2908}, {0xc8, 0x60, 0x60, 0x00}},
{{ -100, 60, 576}, { 6832, -942}, {0xc8, 0x60, 0x60, 0x00}},
{{ 100, 60, 576}, { 8880, -942}, {0xc8, 0x60, 0x60, 0x00}},
{{ 385, 90, 100}, { 7700, -1721}, {0xc8, 0x60, 0x60, 0x00}},
{{ -100, 60, 576}, { 6832, -942}, {0xa4, 0x34, 0x34, 0x00}},
{{ -100, 60, 768}, { 6832, 1023}, {0xa4, 0x34, 0x34, 0x00}},
{{ 100, 60, 768}, { 8880, 1023}, {0xa4, 0x34, 0x34, 0x00}},
{{ 100, 60, 576}, { 8880, -942}, {0xa4, 0x34, 0x34, 0x00}},
{{ -767, 60, 768}, { 0, 1023}, {0xa4, 0x34, 0x34, 0x00}},
{{ -100, 60, 768}, { 6832, 1023}, {0xa4, 0x34, 0x34, 0x00}},
{{ -100, 60, 576}, { 6832, -942}, {0xa4, 0x34, 0x34, 0x00}},
{{ -575, 60, 576}, { 1966, -942}, {0xa4, 0x34, 0x34, 0x00}},
{{ -575, 60, 384}, { 1966, -2908}, {0xa4, 0x34, 0x34, 0x00}},
{{ -575, 60, 192}, { 1966, -4874}, {0xa4, 0x34, 0x34, 0x00}},
{{ -767, 60, 100}, { 0, -5817}, {0xa4, 0x34, 0x34, 0x00}},
{{ -383, 90, -384}, { -163, -4628}, {0xc8, 0x60, 0x60, 0x00}},
{{ -191, 90, -192}, { 1802, -2662}, {0xc8, 0x60, 0x60, 0x00}},
{{ -100, 90, -384}, { 2736, -4628}, {0xc8, 0x60, 0x60, 0x00}},
{{ -383, 90, -100}, { -163, -1721}, {0xc8, 0x60, 0x60, 0x00}},
{{ -383, 90, 100}, { -163, 326}, {0xc8, 0x60, 0x60, 0x00}},
{{ -191, 90, 192}, { 1802, 1269}, {0xc8, 0x60, 0x60, 0x00}},
{{ -767, 60, 100}, { 0, 1350}, {0xa4, 0x34, 0x34, 0x00}},
{{ -575, 60, 100}, { 1966, 1350}, {0xa4, 0x34, 0x34, 0x00}},
{{ -575, 60, -100}, { 1966, -697}, {0xa4, 0x34, 0x34, 0x00}},
{{ -767, 60, -100}, { 0, -697}, {0xa4, 0x34, 0x34, 0x00}},
{{ -575, 60, -576}, { 1966, -5570}, {0xa4, 0x34, 0x34, 0x00}},
{{ -767, 60, -768}, { 0, -7536}, {0xa4, 0x34, 0x34, 0x00}},
{{ -575, 60, 100}, { 1966, -5817}, {0xa4, 0x34, 0x34, 0x00}},
{{ -383, 30, 384}, { 3932, -2908}, {0xa4, 0x34, 0x34, 0x00}},
{{ -383, 30, 192}, { 3932, -4874}, {0xa4, 0x34, 0x34, 0x00}},
{{ -100, 60, -768}, { -335, -368}, {0xa4, 0x34, 0x34, 0x00}},
{{ -100, 60, -576}, { -335, 1597}, {0xa4, 0x34, 0x34, 0x00}},
{{ 100, 60, -576}, { 1712, 1597}, {0xa4, 0x34, 0x34, 0x00}},
{{ 100, 60, -768}, { 1712, -368}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 60, -576}, { 6594, 1597}, {0xa4, 0x34, 0x34, 0x00}},
{{ 587, 60, -586}, { 6696, 1495}, {0xa4, 0x34, 0x34, 0x00}},
{{ 769, 60, -768}, { 8560, -368}, {0xa4, 0x34, 0x34, 0x00}},
{{ 769, 60, 100}, { 1392, -4793}, {0xa4, 0x34, 0x34, 0x00}},
{{ 769, 60, -100}, { 1392, -6841}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 60, -100}, { -573, -6841}, {0xa4, 0x34, 0x34, 0x00}},
{{ 769, 60, 100}, { 1392, -4793}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 60, -100}, { -573, -6841}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 60, 100}, { -573, -4793}, {0xa4, 0x34, 0x34, 0x00}},
{{ 769, 60, 768}, { 1392, 2048}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 60, 576}, { -573, 81}, {0xa4, 0x34, 0x34, 0x00}},
{{ 577, 0, -100}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 577, 20, -100}, { 0, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 50, -100}, { 4095, 2090}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 30, -100}, { 4096, 1663}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 30, -100}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 50, -100}, { 0, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 50, -192}, { 1960, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 30, -192}, { 1960, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 30, 100}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 385, 50, 100}, { 0, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 20, 100}, { 4096, 810}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 0, 100}, { 4096, 384}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 0, 100}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 20, 100}, { 0, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 20, 576}, { 10156, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 0, 576}, { 10156, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 385, 30, -384}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 385, 50, -384}, { 0, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 50, -384}, { 6075, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 30, -384}, { 6075, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 0, -576}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 20, -576}, { 0, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 50, -384}, { 4095, 2090}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 30, -384}, { 4095, 1664}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 30, -384}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 50, -384}, { 0, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -191, 50, -384}, { 1946, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -191, 30, -384}, { 1946, 1023}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 30, -384}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 50, -384}, { 0, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 20, -576}, { 4095, 810}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 0, -576}, { 4095, 384}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 0, -576}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 20, -576}, { 0, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 20, -576}, { 10171, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 577, 0, -576}, { 10171, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 385, 30, 384}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 50, 384}, { 0, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 50, 100}, { 6060, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 385, 30, 100}, { 6060, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -383, 50, 384}, { 5800, 614}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 50, 384}, { 0, 614}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 30, 384}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 30, 384}, { 5800, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -575, 0, 100}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -575, 20, 100}, { 0, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 50, 100}, { 4095, 2090}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 30, 100}, { 4095, 1663}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -383, 30, 100}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 50, 100}, { 0, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 50, 192}, { 1964, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 30, 192}, { 1964, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -575, 0, 576}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 20, 576}, { 0, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 20, 100}, { 10156, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 0, 100}, { 10156, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -100, 0, 576}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 20, 576}, { 0, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 20, 576}, { 10138, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 0, 576}, { 10138, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 577, 0, 576}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 577, 20, 576}, { 0, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 20, 576}, { 10171, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 0, 576}, { 10171, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 0, 576}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 20, 576}, { 0, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 50, 384}, { 4095, 2090}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 30, 384}, { 4095, 1663}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 30, 384}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 50, 384}, { 0, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 193, 50, 384}, { 1979, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 193, 30, 384}, { 1979, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 30, 384}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 50, 384}, { 0, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 20, 576}, { 4096, 810}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -100, 0, 576}, { 4096, 384}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -575, 0, -576}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -575, 20, -576}, { 0, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 20, -576}, { 10138, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 0, -576}, { 10138, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -767, 0, -768}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 38, -768}, { 0, 1826}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 38, -100}, { 14248, 1826}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 0, -100}, { 14248, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 0, -100}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 38, -100}, { 0, 1826}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 38, 100}, { 4266, 1826}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 0, 100}, { 4266, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 0, 100}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 38, 100}, { 0, 1826}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 38, 768}, { 14252, 1826}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 0, 768}, { 14252, 1023}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -767, 38, 768}, { 13562, 253}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 38, 768}, { -102, 253}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 0, 768}, { -102, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -767, 0, 768}, { 13562, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 0, -768}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 38, -768}, { 0, 1826}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -767, 38, -768}, { 14234, 1826}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -767, 0, -768}, { 14234, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 577, 20, -100}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 0, -100}, { 0, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 0, -576}, { 10152, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 577, 20, -576}, { 10152, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 769, 0, -100}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 38, -100}, { 0, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 38, -768}, { 14248, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 0, -768}, { 14248, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 100, 0, -768}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 38, -768}, { 0, 1826}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 38, -768}, { 4266, 1826}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 0, -768}, { 4266, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 769, 0, -768}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 769, 38, -768}, { 0, 1826}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 38, -768}, { 14267, 1826}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 100, 0, -768}, { 14267, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -100, 0, 768}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -100, 38, 768}, { 0, 1826}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 38, 768}, { 4266, 1826}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 0, 768}, { 4266, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 193, 30, 192}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ 193, 50, 192}, { 0, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -191, 50, 192}, { 8191, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -191, 30, 192}, { 8191, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -383, 30, -384}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 50, -384}, { 0, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 50, -100}, { 6056, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 30, -100}, { 6056, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ -383, 30, -100}, { 0, 1024}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -383, 50, -100}, { 0, 1450}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 20, -100}, { 4095, 810}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 0, -100}, { 4095, 384}, {0xbc, 0xbc, 0xbc, 0x00}},
{{ -575, 0, -100}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 20, -100}, { 0, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 20, -576}, { 10152, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -575, 0, -576}, { 10152, 1023}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 193, 30, -192}, { 0, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 193, 50, -192}, { 0, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 193, 50, 192}, { 8191, 1450}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 193, 30, 192}, { 8191, 1024}, {0x7c, 0x7c, 0x7c, 0x00}},
{{ 100, 0, 768}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 100, 38, 768}, { 0, 1826}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 769, 38, 768}, { 14267, 1826}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 769, 0, 768}, { 14267, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 769, 0, 768}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 38, 768}, { 0, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 38, 100}, { 14252, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 0, 100}, { 14252, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 0, 100}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 38, 100}, { 0, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 38, -100}, { 4266, 1826}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ 769, 0, -100}, { 4266, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -191, 30, 192}, { 0, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -191, 50, 192}, { 0, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -191, 50, -192}, { 8191, 1450}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -191, 30, -192}, { 8191, 1024}, {0xfc, 0xfc, 0xfc, 0x00}},
{{ -191, 30, -192}, { 0, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ -191, 50, -192}, { 0, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 193, 50, -192}, { 8191, 1450}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 193, 30, -192}, { 8191, 1024}, {0xd8, 0xd8, 0xd8, 0x00}},
{{ 385, 30, 100}, { 0, 0}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, -90}, { 0, 0}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, -100}, { 0, 0}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, 100}, { -491, 2374}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 577, 0, 100}, { 1474, 2374}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 577, 0, -100}, { 1474, 326}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, -100}, { -491, 326}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -191, 30, 192}, { 1802, 1269}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -383, 30, 100}, { -163, 326}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -383, 30, 192}, { -163, 1269}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -383, 30, 384}, { -163, 1187}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -191, 30, 192}, { 1802, -778}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -383, 30, 192}, { -163, -778}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -100, 30, 384}, { 2736, 1187}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 193, 30, -192}, { -409, -614}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, -100}, { 1556, 326}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, -192}, { 1556, -614}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 193, 30, 192}, { -409, 3317}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, 100}, { 1556, 2374}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 193, 30, 192}, { 5734, -778}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, 384}, { 7700, 1187}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, 100}, { 7700, -1721}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 193, 30, 384}, { 5734, 1187}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -767, 0, 768}, { -1024, 1024}, {0x28, 0x78, 0x28, 0x00}},
{{ -100, 0, 768}, { 5808, 1024}, {0x28, 0x78, 0x28, 0x00}},
{{ -100, 0, 576}, { 5808, -942}, {0x28, 0x78, 0x28, 0x00}},
{{ -575, 0, 576}, { 942, -942}, {0x28, 0x78, 0x28, 0x00}},
{{ 193, 50, -192}, { 3932, -2908}, {0x84, 0xfc, 0x58, 0x00}},
{{ -191, 50, -192}, { 0, -2908}, {0x84, 0xfc, 0x58, 0x00}},
{{ -191, 50, 192}, { 0, 1023}, {0x84, 0xfc, 0x58, 0x00}},
{{ 193, 50, 192}, { 3932, 1023}, {0x84, 0xfc, 0x58, 0x00}},
{{ 100, 30, 384}, { 4784, 1187}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 769, 0, 768}, { 6512, 1024}, {0x28, 0x78, 0x28, 0x00}},
{{ 577, 0, 576}, { 4546, -942}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 0, 576}, { -335, -942}, {0x28, 0x78, 0x28, 0x00}},
{{ 769, 0, 768}, { 6512, 1024}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 0, 576}, { -335, -942}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 0, 768}, { -335, 1023}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 30, 384}, { 1712, -860}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -100, 30, 384}, { -335, -860}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -100, 0, 576}, { -335, 1105}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 100, 0, 576}, { 1712, 1105}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -100, 0, 576}, { -335, -942}, {0x28, 0x78, 0x28, 0x00}},
{{ -100, 0, 768}, { -335, 1023}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 0, 768}, { 1712, 1023}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 0, 576}, { 1712, -942}, {0x28, 0x78, 0x28, 0x00}},
{{ -191, 30, -192}, { 1802, -2662}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -383, 30, -100}, { -163, -1721}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -383, 30, 100}, { -163, 326}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -191, 30, 192}, { 1802, 1269}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -383, 30, -384}, { -163, -4628}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -575, 0, -100}, { -2129, -1721}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -575, 0, 100}, { -2129, 326}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 769, 0, 100}, { 1392, 1350}, {0x28, 0x78, 0x28, 0x00}},
{{ 769, 0, -100}, { 1392, -697}, {0x28, 0x78, 0x28, 0x00}},
{{ 577, 0, -100}, { -573, -697}, {0x28, 0x78, 0x28, 0x00}},
{{ 577, 0, 100}, { -573, 1350}, {0x28, 0x78, 0x28, 0x00}},
{{ 769, 0, -768}, { 1392, -7536}, {0x28, 0x78, 0x28, 0x00}},
{{ 577, 0, -576}, { -573, -5570}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 0, -768}, { -335, -368}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 0, -576}, { -335, 1597}, {0x28, 0x78, 0x28, 0x00}},
{{ 577, 0, -576}, { 4546, 1597}, {0x28, 0x78, 0x28, 0x00}},
{{ 587, 0, -586}, { 4648, 1495}, {0x28, 0x78, 0x28, 0x00}},
{{ 769, 0, -768}, { 6512, -368}, {0x28, 0x78, 0x28, 0x00}},
{{ -100, 0, -768}, { -335, -368}, {0x28, 0x78, 0x28, 0x00}},
{{ -100, 0, -576}, { -335, 1597}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 0, -576}, { 1712, 1597}, {0x28, 0x78, 0x28, 0x00}},
{{ -100, 0, -768}, { -335, -368}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 0, -576}, { 1712, 1597}, {0x28, 0x78, 0x28, 0x00}},
{{ 100, 0, -768}, { 1712, -368}, {0x28, 0x78, 0x28, 0x00}},
{{ -767, 0, -768}, { -2047, -368}, {0x28, 0x78, 0x28, 0x00}},
{{ -575, 0, -576}, { -81, 1597}, {0x28, 0x78, 0x28, 0x00}},
{{ -100, 0, -576}, { 4784, 1597}, {0x28, 0x78, 0x28, 0x00}},
{{ -100, 0, -768}, { 4784, -368}, {0x28, 0x78, 0x28, 0x00}},
{{ -767, 0, 768}, { 0, 2048}, {0x28, 0x78, 0x28, 0x00}},
{{ -575, 0, 576}, { 1966, 81}, {0x28, 0x78, 0x28, 0x00}},
{{ -575, 0, 100}, { 1966, -4793}, {0x28, 0x78, 0x28, 0x00}},
{{ -767, 0, 100}, { 0, -4793}, {0x28, 0x78, 0x28, 0x00}},
{{ -767, 0, 100}, { 0, 1350}, {0x28, 0x78, 0x28, 0x00}},
{{ -575, 0, 100}, { 1966, 1350}, {0x28, 0x78, 0x28, 0x00}},
{{ -575, 0, -100}, { 1966, -697}, {0x28, 0x78, 0x28, 0x00}},
{{ -767, 0, -100}, { 0, -697}, {0x28, 0x78, 0x28, 0x00}},
{{ -575, 0, -576}, { 1966, -5570}, {0x28, 0x78, 0x28, 0x00}},
{{ -767, 0, -768}, { 0, -7536}, {0x28, 0x78, 0x28, 0x00}},
{{ 769, 0, 768}, { 1392, 6144}, {0x28, 0x78, 0x28, 0x00}},
{{ 769, 0, 100}, { 1392, -697}, {0x28, 0x78, 0x28, 0x00}},
{{ 577, 0, 100}, { -573, -697}, {0x28, 0x78, 0x28, 0x00}},
{{ 577, 0, 576}, { -573, 4177}, {0x28, 0x78, 0x28, 0x00}},
{{ -191, 30, -192}, { -245, 1433}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -100, 30, -384}, { 688, -532}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -191, 30, -384}, { -245, -532}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 193, 30, -192}, { 3686, 1433}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 100, 30, -384}, { 2736, -532}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -383, 30, -384}, { -2211, -532}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, -384}, { 5652, -532}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 385, 30, -192}, { 5652, 1433}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 100, 30, -384}, { 1712, 3563}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 100, 0, -576}, { 1712, 1597}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -100, 0, -576}, { -335, 1597}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ 100, 30, -384}, { 1712, 3563}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -100, 0, -576}, { -335, 1597}, {0x3c, 0xbc, 0x3c, 0x00}},
{{ -100, 30, -384}, { -335, 3563}, {0x3c, 0xbc, 0x3c, 0x00}},
};

File diff suppressed because it is too large Load Diff

426
courses/courseTable.inc.c Normal file
View File

@ -0,0 +1,426 @@
#include <ultra64.h>
#include <macros.h>
#include "types.h"
/*
#include "courses/mushroom_cup/luigi_raceway/model.inc.c"
#include "courses/mushroom_cup/moo_moo_farm/model.inc.c"
#include "courses/mushroom_cup/koopa_beach/model.inc.c"
#include "courses/mushroom_cup/kalimari_desert/model.inc.c"
#include "courses/flower_cup/toads_turnpike/model.inc.c"
#include "courses/flower_cup/frappe_snowland/model.inc.c"
#include "courses/flower_cup/choco_mountain/model.inc.c"
#include "courses/flower_cup/mario_raceway/model.inc.c"
#include "courses/star_cup/wario_stadium/model.inc.c"
#include "courses/star_cup/sherbet_land/model.inc.c"
#include "courses/star_cup/royal_raceway/model.inc.c"
#include "courses/star_cup/bowsers_castle/model.inc.c"
#include "courses/special_cup/dks_jungle_parkway/model.inc.c"
#include "courses/special_cup/yoshi_valley/model.inc.c"
#include "courses/special_cup/banshee_boardwalk/model.inc.c"
#include "courses/special_cup/rainbow_road/model.inc.c"
#include "courses/battle/block_fort/model.inc.c"
#include "courses/battle/big_donut/model.inc.c"
#include "courses/battle/double_deck/model.inc.c"
#include "courses/battle/skyscraper/model.inc.c"
*/
extern u32 _course_mario_raceway_dl_mio0SegmentRomStart[];
extern u32 _course_mario_raceway_dl_mio0SegmentRomEnd[];
extern u32 _mario_raceway_vertexSegmentRomStart[];
extern u32 _mario_raceway_vertexSegmentRomEnd[];
extern u32 _course_mario_raceway_offsetsSegmentRomStart[];
extern u32 _course_mario_raceway_offsetsSegmentRomEnd[];
extern u32 d_course_mario_raceway_packed[];
extern u32 mario_raceway_textures[];
extern u32 _course_choco_mountain_dl_mio0SegmentRomStart[];
extern u32 _course_choco_mountain_dl_mio0SegmentRomEnd[];
extern u32 _choco_mountain_vertexSegmentRomStart[];
extern u32 _choco_mountain_vertexSegmentRomEnd[];
extern u32 _course_choco_mountain_offsetsSegmentRomStart[];
extern u32 _course_choco_mountain_offsetsSegmentRomEnd[];
extern u32 d_course_choco_mountain_packed[];
extern u32 choco_mountain_textures[];
extern u32 _course_bowsers_castle_dl_mio0SegmentRomStart[];
extern u32 _course_bowsers_castle_dl_mio0SegmentRomEnd[];
extern u32 _bowsers_castle_vertexSegmentRomStart[];
extern u32 _bowsers_castle_vertexSegmentRomEnd[];
extern u32 _course_bowsers_castle_offsetsSegmentRomStart[];
extern u32 _course_bowsers_castle_offsetsSegmentRomEnd[];
extern u32 d_course_bowsers_castle_packed[];
extern u32 bowsers_castle_textures[];
extern u32 _course_banshee_boardwalk_dl_mio0SegmentRomStart[];
extern u32 _course_banshee_boardwalk_dl_mio0SegmentRomEnd[];
extern u32 _banshee_boardwalk_vertexSegmentRomStart[];
extern u32 _banshee_boardwalk_vertexSegmentRomEnd[];
extern u32 _course_banshee_boardwalk_offsetsSegmentRomStart[];
extern u32 _course_banshee_boardwalk_offsetsSegmentRomEnd[];
extern u32 d_course_banshee_boardwalk_packed[];
extern u32 banshee_boardwalk_textures[];
extern u32 _course_yoshi_valley_dl_mio0SegmentRomStart[];
extern u32 _course_yoshi_valley_dl_mio0SegmentRomEnd[];
extern u32 _yoshi_valley_vertexSegmentRomStart[];
extern u32 _yoshi_valley_vertexSegmentRomEnd[];
extern u32 _course_yoshi_valley_offsetsSegmentRomStart[];
extern u32 _course_yoshi_valley_offsetsSegmentRomEnd[];
extern u32 d_course_yoshi_valley_packed[];
extern u32 yoshi_valley_textures[];
extern u32 _course_frappe_snowland_dl_mio0SegmentRomStart[];
extern u32 _course_frappe_snowland_dl_mio0SegmentRomEnd[];
extern u32 _frappe_snowland_vertexSegmentRomStart[];
extern u32 _frappe_snowland_vertexSegmentRomEnd[];
extern u32 _course_frappe_snowland_offsetsSegmentRomStart[];
extern u32 _course_frappe_snowland_offsetsSegmentRomEnd[];
extern u32 d_course_frappe_snowland_packed[];
extern u32 frappe_snowland_textures[];
extern u32 _course_koopa_troopa_beach_dl_mio0SegmentRomStart[];
extern u32 _course_koopa_troopa_beach_dl_mio0SegmentRomEnd[];
extern u32 _koopa_troopa_beach_vertexSegmentRomStart[];
extern u32 _koopa_troopa_beach_vertexSegmentRomEnd[];
extern u32 _course_koopa_troopa_beach_offsetsSegmentRomStart[];
extern u32 _course_koopa_troopa_beach_offsetsSegmentRomEnd[];
extern u32 d_course_koopa_troopa_beach_packed[];
extern u32 koopa_troopa_beach_textures[];
extern u32 _course_royal_raceway_dl_mio0SegmentRomStart[];
extern u32 _course_royal_raceway_dl_mio0SegmentRomEnd[];
extern u32 _royal_raceway_vertexSegmentRomStart[];
extern u32 _royal_raceway_vertexSegmentRomEnd[];
extern u32 _course_royal_raceway_offsetsSegmentRomStart[];
extern u32 _course_royal_raceway_offsetsSegmentRomEnd[];
extern u32 d_course_royal_raceway_packed[];
extern u32 royal_raceway_textures[];
extern u32 _course_luigi_raceway_dl_mio0SegmentRomStart[];
extern u32 _course_luigi_raceway_dl_mio0SegmentRomEnd[];
extern u32 _luigi_raceway_vertexSegmentRomStart[];
extern u32 _luigi_raceway_vertexSegmentRomEnd[];
extern u32 _course_luigi_raceway_offsetsSegmentRomStart[];
extern u32 _course_luigi_raceway_offsetsSegmentRomEnd[];
extern u32 d_course_luigi_raceway_packed[];
extern u32 luigi_raceway_textures[];
extern u32 _course_moo_moo_farm_dl_mio0SegmentRomStart[];
extern u32 _course_moo_moo_farm_dl_mio0SegmentRomEnd[];
extern u32 _moo_moo_farm_vertexSegmentRomStart[];
extern u32 _moo_moo_farm_vertexSegmentRomEnd[];
extern u32 _course_moo_moo_farm_offsetsSegmentRomStart[];
extern u32 _course_moo_moo_farm_offsetsSegmentRomEnd[];
extern u32 d_course_moo_moo_farm_packed[];
extern u32 moo_moo_farm_textures[];
extern u32 _course_toads_turnpike_dl_mio0SegmentRomStart[];
extern u32 _course_toads_turnpike_dl_mio0SegmentRomEnd[];
extern u32 _toads_turnpike_vertexSegmentRomStart[];
extern u32 _toads_turnpike_vertexSegmentRomEnd[];
extern u32 _course_toads_turnpike_offsetsSegmentRomStart[];
extern u32 _course_toads_turnpike_offsetsSegmentRomEnd[];
extern u32 d_course_toads_turnpike_packed[];
extern u32 toads_turnpike_textures[];
extern u32 _course_kalimari_desert_dl_mio0SegmentRomStart[];
extern u32 _course_kalimari_desert_dl_mio0SegmentRomEnd[];
extern u32 _kalimari_desert_vertexSegmentRomStart[];
extern u32 _kalimari_desert_vertexSegmentRomEnd[];
extern u32 _course_kalimari_desert_offsetsSegmentRomStart[];
extern u32 _course_kalimari_desert_offsetsSegmentRomEnd[];
extern u32 d_course_kalimari_desert_packed[];
extern u32 kalimari_desert_textures[];
extern u32 _course_sherbet_land_dl_mio0SegmentRomStart[];
extern u32 _course_sherbet_land_dl_mio0SegmentRomEnd[];
extern u32 _sherbet_land_vertexSegmentRomStart[];
extern u32 _sherbet_land_vertexSegmentRomEnd[];
extern u32 _course_sherbet_land_offsetsSegmentRomStart[];
extern u32 _course_sherbet_land_offsetsSegmentRomEnd[];
extern u32 d_course_sherbet_land_packed[];
extern u32 sherbet_land_textures[];
extern u32 _course_rainbow_road_dl_mio0SegmentRomStart[];
extern u32 _course_rainbow_road_dl_mio0SegmentRomEnd[];
extern u32 _rainbow_road_vertexSegmentRomStart[];
extern u32 _rainbow_road_vertexSegmentRomEnd[];
extern u32 _course_rainbow_road_offsetsSegmentRomStart[];
extern u32 _course_rainbow_road_offsetsSegmentRomEnd[];
extern u32 d_course_rainbow_road_packed[];
extern u32 rainbow_road_textures[];
extern u32 _course_wario_stadium_dl_mio0SegmentRomStart[];
extern u32 _course_wario_stadium_dl_mio0SegmentRomEnd[];
extern u32 _wario_stadium_vertexSegmentRomStart[];
extern u32 _wario_stadium_vertexSegmentRomEnd[];
extern u32 _course_wario_stadium_offsetsSegmentRomStart[];
extern u32 _course_wario_stadium_offsetsSegmentRomEnd[];
extern u32 d_course_wario_stadium_packed[];
extern u32 wario_stadium_textures[];
extern u32 _course_block_fort_dl_mio0SegmentRomStart[];
extern u32 _course_block_fort_dl_mio0SegmentRomEnd[];
extern u32 _block_fort_vertexSegmentRomStart[];
extern u32 _block_fort_vertexSegmentRomEnd[];
extern u32 _course_block_fort_offsetsSegmentRomStart[];
extern u32 _course_block_fort_offsetsSegmentRomEnd[];
extern u32 d_course_block_fort_packed[];
extern u32 block_fort_textures[];
extern u32 _course_skyscraper_dl_mio0SegmentRomStart[];
extern u32 _course_skyscraper_dl_mio0SegmentRomEnd[];
extern u32 _skyscraper_vertexSegmentRomStart[];
extern u32 _skyscraper_vertexSegmentRomEnd[];
extern u32 _course_skyscraper_offsetsSegmentRomStart[];
extern u32 _course_skyscraper_offsetsSegmentRomEnd[];
extern u32 d_course_skyscraper_packed[];
extern u32 skyscraper_textures[];
extern u32 _course_double_deck_dl_mio0SegmentRomStart[];
extern u32 _course_double_deck_dl_mio0SegmentRomEnd[];
extern u32 _double_deck_vertexSegmentRomStart[];
extern u32 _double_deck_vertexSegmentRomEnd[];
extern u32 _course_double_deck_offsetsSegmentRomStart[];
extern u32 _course_double_deck_offsetsSegmentRomEnd[];
extern u32 d_course_double_deck_packed[];
extern u32 double_deck_textures[];
extern u32 _course_dks_jungle_parkway_dl_mio0SegmentRomStart[];
extern u32 _course_dks_jungle_parkway_dl_mio0SegmentRomEnd[];
extern u32 _dks_jungle_parkway_vertexSegmentRomStart[];
extern u32 _dks_jungle_parkway_vertexSegmentRomEnd[];
extern u32 _course_dks_jungle_parkway_offsetsSegmentRomStart[];
extern u32 _course_dks_jungle_parkway_offsetsSegmentRomEnd[];
extern u32 d_course_dks_jungle_parkway_packed[];
extern u32 dks_jungle_parkway_textures[];
extern u32 _course_big_donut_dl_mio0SegmentRomStart[];
extern u32 _course_big_donut_dl_mio0SegmentRomEnd[];
extern u32 _big_donut_vertexSegmentRomStart[];
extern u32 _big_donut_vertexSegmentRomEnd[];
extern u32 _course_big_donut_offsetsSegmentRomStart[];
extern u32 _course_big_donut_offsetsSegmentRomEnd[];
extern u32 d_course_big_donut_packed[];
extern u32 big_donut_textures[];
/*
extern mk64_Vtx d_course_mario_raceway_vertex[];
extern mk64_Vtx d_course_choco_mountain_vertex[];
extern mk64_Vtx d_course_bowsers_castle_vertex[];
extern mk64_Vtx d_course_banshee_boardwalk_vertex[];
extern mk64_Vtx d_course_yoshi_valley_vertex[];
extern mk64_Vtx d_course_frappe_snowland_vertex[];
extern mk64_Vtx d_course_koopa_troopa_beach_vertex[];
extern mk64_Vtx d_course_royal_raceway_vertex[];
extern mk64_Vtx d_course_luigi_raceway_vertex[];
extern mk64_Vtx d_course_moo_moo_farm_vertex[];
extern mk64_Vtx d_course_toads_turnpike_vertex[];
extern mk64_Vtx d_course_kalimari_desert_vertex[];
extern mk64_Vtx d_course_sherbet_land_vertex[];
extern mk64_Vtx d_course_rainbow_road_vertex[];
extern mk64_Vtx d_course_wario_stadium_vertex[];
extern mk64_Vtx d_course_block_fort_vertex[];
extern mk64_Vtx d_course_skyscraper_vertex[];
extern mk64_Vtx d_course_double_deck_vertex[];
extern mk64_Vtx d_course_dks_jungle_parkway_vertex[];
extern mk64_Vtx d_course_big_donut_vertex[];
*/
// 0x008284D0, 0x0082B620, 0x0088FA10, 0x0089B510, 0x0088CD70, 0x0088D070, 0x0F000000, 0x0000167D, 0x0F0096F4, 0x00006930, 0x09000000, 0x00000000
struct courseTable gCourseTable[] = {{
_course_mario_raceway_dl_mio0SegmentRomStart, _course_mario_raceway_dl_mio0SegmentRomEnd,
_mario_raceway_vertexSegmentRomStart, _mario_raceway_vertexSegmentRomEnd,
_course_mario_raceway_offsetsSegmentRomStart, _course_mario_raceway_offsetsSegmentRomEnd,
d_course_mario_raceway_vertex, 0x0000167D,
d_course_mario_raceway_packed, 0x00006930,
mario_raceway_textures, (u16) 0, (u16) 0x0000,
}, {
_course_choco_mountain_dl_mio0SegmentRomStart, _course_choco_mountain_dl_mio0SegmentRomEnd,
_choco_mountain_vertexSegmentRomStart, _choco_mountain_vertexSegmentRomEnd,
_course_choco_mountain_offsetsSegmentRomStart, _course_choco_mountain_offsetsSegmentRomEnd,
d_course_choco_mountain_vertex, 0x000015B8,
d_course_choco_mountain_packed, 0x00005AE8,
choco_mountain_textures, 1, 0x0000,
}, {
_course_bowsers_castle_dl_mio0SegmentRomStart, _course_bowsers_castle_dl_mio0SegmentRomEnd,
_bowsers_castle_vertexSegmentRomStart, _bowsers_castle_vertexSegmentRomEnd,
_course_bowsers_castle_offsetsSegmentRomStart, _course_bowsers_castle_offsetsSegmentRomEnd,
d_course_bowsers_castle_vertex, 0x00002537,
d_course_bowsers_castle_packed, 0x00009918,
bowsers_castle_textures, 0, 0x0000,
}, {
_course_banshee_boardwalk_dl_mio0SegmentRomStart, _course_banshee_boardwalk_dl_mio0SegmentRomEnd,
_banshee_boardwalk_vertexSegmentRomStart, _banshee_boardwalk_vertexSegmentRomEnd,
_course_banshee_boardwalk_offsetsSegmentRomStart, _course_banshee_boardwalk_offsetsSegmentRomEnd,
d_course_banshee_boardwalk_vertex, 0x00001351,
d_course_banshee_boardwalk_packed, 0x00007340,
banshee_boardwalk_textures, 1, 0x0000,
}, {
_course_yoshi_valley_dl_mio0SegmentRomStart, _course_yoshi_valley_dl_mio0SegmentRomEnd,
_yoshi_valley_vertexSegmentRomStart, _yoshi_valley_vertexSegmentRomEnd,
_course_yoshi_valley_offsetsSegmentRomStart, _course_yoshi_valley_offsetsSegmentRomEnd,
d_course_yoshi_valley_vertex, 0x00000E88,
d_course_yoshi_valley_packed, 0x00008158,
yoshi_valley_textures, 0, 0x0000,
}, {
_course_frappe_snowland_dl_mio0SegmentRomStart, _course_frappe_snowland_dl_mio0SegmentRomEnd,
_frappe_snowland_vertexSegmentRomStart, _frappe_snowland_vertexSegmentRomEnd,
_course_frappe_snowland_offsetsSegmentRomStart, _course_frappe_snowland_offsetsSegmentRomEnd,
d_course_frappe_snowland_vertex, 0x00001599,
d_course_frappe_snowland_packed, 0x00006648,
frappe_snowland_textures, 0, 0x0000,
}, {
_course_koopa_troopa_beach_dl_mio0SegmentRomStart, _course_koopa_troopa_beach_dl_mio0SegmentRomEnd,
_koopa_troopa_beach_vertexSegmentRomStart, _koopa_troopa_beach_vertexSegmentRomEnd,
_course_koopa_troopa_beach_offsetsSegmentRomStart, _course_koopa_troopa_beach_offsetsSegmentRomEnd,
d_course_koopa_troopa_beach_vertex, 0x000024A0,
d_course_koopa_troopa_beach_packed, 0x0000B2B8,
koopa_troopa_beach_textures, 0, 0x0000,
}, {
_course_royal_raceway_dl_mio0SegmentRomStart, _course_royal_raceway_dl_mio0SegmentRomEnd,
_royal_raceway_vertexSegmentRomStart, _royal_raceway_vertexSegmentRomEnd,
_course_royal_raceway_offsetsSegmentRomStart, _course_royal_raceway_offsetsSegmentRomEnd,
d_course_royal_raceway_vertex, 0x00002072,
d_course_royal_raceway_packed, 0x0000B128,
royal_raceway_textures, 0, 0x0000,
}, {
_course_luigi_raceway_dl_mio0SegmentRomStart, _course_luigi_raceway_dl_mio0SegmentRomEnd,
_luigi_raceway_vertexSegmentRomStart, _luigi_raceway_vertexSegmentRomEnd,
_course_luigi_raceway_offsetsSegmentRomStart, _course_luigi_raceway_offsetsSegmentRomEnd,
d_course_luigi_raceway_vertex, 0x00001730,
d_course_luigi_raceway_packed, 0x0000C738,
luigi_raceway_textures, 0, 0x0000,
}, {
_course_moo_moo_farm_dl_mio0SegmentRomStart, _course_moo_moo_farm_dl_mio0SegmentRomEnd,
_moo_moo_farm_vertexSegmentRomStart, _moo_moo_farm_vertexSegmentRomEnd,
_course_moo_moo_farm_offsetsSegmentRomStart, _course_moo_moo_farm_offsetsSegmentRomEnd,
d_course_moo_moo_farm_vertex, 0x00001F24,
d_course_moo_moo_farm_packed, 0x00006738,
moo_moo_farm_textures, 0, 0x0000,
}, {
_course_toads_turnpike_dl_mio0SegmentRomStart, _course_toads_turnpike_dl_mio0SegmentRomEnd,
_toads_turnpike_vertexSegmentRomStart, _toads_turnpike_vertexSegmentRomEnd,
_course_toads_turnpike_offsetsSegmentRomStart, _course_toads_turnpike_offsetsSegmentRomEnd,
d_course_toads_turnpike_vertex, 0x000018D7,
d_course_toads_turnpike_packed, 0x00006B10,
toads_turnpike_textures, 0, 0x0000,
}, {
_course_kalimari_desert_dl_mio0SegmentRomStart, _course_kalimari_desert_dl_mio0SegmentRomEnd,
_kalimari_desert_vertexSegmentRomStart, _kalimari_desert_vertexSegmentRomEnd,
_course_kalimari_desert_offsetsSegmentRomStart, _course_kalimari_desert_offsetsSegmentRomEnd,
d_course_kalimari_desert_vertex, 0x000018F9,
d_course_kalimari_desert_packed, 0x0000A678,
kalimari_desert_textures, 0, 0x0000,
}, {
_course_sherbet_land_dl_mio0SegmentRomStart, _course_sherbet_land_dl_mio0SegmentRomEnd,
_sherbet_land_vertexSegmentRomStart, _sherbet_land_vertexSegmentRomEnd,
_course_sherbet_land_offsetsSegmentRomStart, _course_sherbet_land_offsetsSegmentRomEnd,
d_course_sherbet_land_vertex, 0x00000A76,
d_course_sherbet_land_packed, 0x00003850,
sherbet_land_textures, 0, 0x0000,
}, {
_course_rainbow_road_dl_mio0SegmentRomStart, _course_rainbow_road_dl_mio0SegmentRomEnd,
_rainbow_road_vertexSegmentRomStart, _rainbow_road_vertexSegmentRomEnd,
_course_rainbow_road_offsetsSegmentRomStart, _course_rainbow_road_offsetsSegmentRomEnd,
d_course_rainbow_road_vertex, 0x00000C27,
d_course_rainbow_road_packed, 0x00002100,
rainbow_road_textures, 0, 0x0000,
}, {
_course_wario_stadium_dl_mio0SegmentRomStart, _course_wario_stadium_dl_mio0SegmentRomEnd,
_wario_stadium_vertexSegmentRomStart, _wario_stadium_vertexSegmentRomEnd,
_course_wario_stadium_offsetsSegmentRomStart, _course_wario_stadium_offsetsSegmentRomEnd,
d_course_wario_stadium_vertex, 0x000017B3,
d_course_wario_stadium_packed, 0x0000A4B8,
wario_stadium_textures, 0, 0x0000,
}, {
_course_block_fort_dl_mio0SegmentRomStart, _course_block_fort_dl_mio0SegmentRomEnd,
_block_fort_vertexSegmentRomStart, _block_fort_vertexSegmentRomEnd,
_course_block_fort_offsetsSegmentRomStart, _course_block_fort_offsetsSegmentRomEnd,
d_course_block_fort_vertex, 0x00000440,
d_course_block_fort_packed, 0x000015D0,
block_fort_textures, 0, 0x0000,
}, {
_course_skyscraper_dl_mio0SegmentRomStart, _course_skyscraper_dl_mio0SegmentRomEnd,
_skyscraper_vertexSegmentRomStart, _skyscraper_vertexSegmentRomEnd,
_course_skyscraper_offsetsSegmentRomStart, _course_skyscraper_offsetsSegmentRomEnd,
d_course_skyscraper_vertex, 0x0000043E,
d_course_skyscraper_packed, 0x00001118,
skyscraper_textures, 0, 0x0000,
}, {
_course_double_deck_dl_mio0SegmentRomStart, _course_double_deck_dl_mio0SegmentRomEnd,
_double_deck_vertexSegmentRomStart, _double_deck_vertexSegmentRomEnd,
_course_double_deck_offsetsSegmentRomStart, _course_double_deck_offsetsSegmentRomEnd,
d_course_double_deck_vertex, 0x0000022B,
d_course_double_deck_packed, 0x00000748,
double_deck_textures, 0, 0x0000,
}, {
_course_dks_jungle_parkway_dl_mio0SegmentRomStart, _course_dks_jungle_parkway_dl_mio0SegmentRomEnd,
_dks_jungle_parkway_vertexSegmentRomStart, _dks_jungle_parkway_vertexSegmentRomEnd,
_course_dks_jungle_parkway_offsetsSegmentRomStart, _course_dks_jungle_parkway_offsetsSegmentRomEnd,
d_course_dks_jungle_parkway_vertex, 0x0000162F,
d_course_dks_jungle_parkway_packed, 0x00009C20,
dks_jungle_parkway_textures, 0, 0x0000,
}, {
_course_big_donut_dl_mio0SegmentRomStart, _course_big_donut_dl_mio0SegmentRomEnd,
_big_donut_vertexSegmentRomStart, _big_donut_vertexSegmentRomEnd,
_course_big_donut_offsetsSegmentRomStart, _course_big_donut_offsetsSegmentRomEnd,
d_course_big_donut_vertex, 0x0000048D,
d_course_big_donut_packed, 0x00001078,
big_donut_textures, 0, 0x0000,
}};
/*
mk_course mario_raceway, 0x0000167D, 0x00006930, 0
mk_course choco_mountain, 0x000015B8, 0x00005AE8, 1
mk_course bowsers_castle, 0x00002537, 0x00009918, 0
mk_course banshee_boardwalk, 0x00001351, 0x00007340, 1
mk_course yoshi_valley, 0x00000E88, 0x00008158, 0
mk_course frappe_snowland, 0x00001599, 0x00006648, 0
mk_course koopa_troopa_beach, 0x000024A0, 0x0000B2B8, 0
mk_course royal_raceway, 0x00002072, 0x0000B128, 0
mk_course luigi_raceway, 0x00001730, 0x0000C738, 0
mk_course moo_moo_farm, 0x00001F24, 0x00006738, 0
mk_course toads_turnpike, 0x000018D7, 0x00006B10, 0
mk_course kalimari_desert, 0x000018F9, 0x0000A678, 0
mk_course sherbet_land, 0x00000A76, 0x00003850, 0
mk_course rainbow_road, 0x00000C27, 0x00002100, 0
mk_course wario_stadium, 0x000017B3, 0x0000A4B8, 0
mk_course block_fort, 0x00000440, 0x000015D0, 0
mk_course skyscraper, 0x0000043E, 0x00001118, 0
mk_course double_deck, 0x0000022B, 0x00000748, 0
mk_course dks_jungle_parkway, 0x0000162F, 0x00009C20, 0
mk_course big_donut, 0x0000048D, 0x00001078, 0
*/
/*
# Course data table 122390 / 802B8D80
glabel gCourseTable
.word 0x008284D0, 0x0082B620, 0x0088FA10, 0x0089B510, 0x0088CD70, 0x0088D070, 0x0F000000, 0x0000167D, 0x0F0096F4, 0x00006930, 0x09000000, 0x00000000
.word 0x0082B620, 0x0082DF40, 0x0089B510, 0x008A7640, 0x0088D070, 0x0088D340, 0x0F000000, 0x000015B8, 0x0F00A0B4, 0x00005AE8, 0x09000000, 0x00010000
.word 0x0082DF40, 0x00831DC0, 0x008A7640, 0x008B9630, 0x0088D340, 0x0088D6C0, 0x0F000000, 0x00002537, 0x0F00E368, 0x00009918, 0x09000000, 0x00000000
.word 0x00831DC0, 0x00835BA0, 0x008B9630, 0x008C2510, 0x0088D6C0, 0x0088D9C0, 0x0F000000, 0x00001351, 0x0F0068E8, 0x00007340, 0x09000000, 0x00010000
.word 0x00835BA0, 0x0083F740, 0x008C2510, 0x008CC900, 0x0088D9C0, 0x0088DAB0, 0x0F000000, 0x00000E88, 0x0F007D90, 0x00008158, 0x09000000, 0x00000000
.word 0x0083F740, 0x00842E40, 0x008CC900, 0x008D8E50, 0x0088DAB0, 0x0088DB40, 0x0F000000, 0x00001599, 0x0F009D24, 0x00006648, 0x09000000, 0x00000000
.word 0x00842E40, 0x0084ABD0, 0x008D8E50, 0x008EC390, 0x0088DB40, 0x0088DC50, 0x0F000000, 0x000024A0, 0x0F00FD78, 0x0000B2B8, 0x09000000, 0x00000000
.word 0x0084ABD0, 0x0084E8E0, 0x008EC390, 0x008FE640, 0x0088DC50, 0x0088E120, 0x0F000000, 0x00002072, 0x0F00EC60, 0x0000B128, 0x09000000, 0x00000000
.word 0x0084E8E0, 0x00852E20, 0x008FE640, 0x0090B3E0, 0x0088E120, 0x0088E590, 0x0F000000, 0x00001730, 0x0F009800, 0x0000C738, 0x09000000, 0x00000000
.word 0x00852E20, 0x00857E80, 0x0090B3E0, 0x0091B980, 0x0088E590, 0x0088E8D0, 0x0F000000, 0x00001F24, 0x0F00DAEC, 0x00006738, 0x09000000, 0x00000000
.word 0x00857E80, 0x008666A0, 0x0091B980, 0x00928C70, 0x0088E8D0, 0x0088ECD0, 0x0F000000, 0x000018D7, 0x0F00A5D0, 0x00006B10, 0x09000000, 0x00000000
.word 0x008666A0, 0x0086ECF0, 0x00928C70, 0x00936FD0, 0x0088ECD0, 0x0088EFB0, 0x0F000000, 0x000018F9, 0x0F00B394, 0x0000A678, 0x09000000, 0x00000000
.word 0x0086ECF0, 0x00872A00, 0x00936FD0, 0x0093CC60, 0x0088EFB0, 0x0088F2A0, 0x0F000000, 0x00000A76, 0x0F0049F8, 0x00003850, 0x09000000, 0x00000000
.word 0x00872A00, 0x008804A0, 0x0093CC60, 0x009438C0, 0x0088F2A0, 0x0088F300, 0x0F000000, 0x00000C27, 0x0F005A5C, 0x00002100, 0x09000000, 0x00000000
.word 0x008804A0, 0x00885630, 0x009438C0, 0x00951780, 0x0088F300, 0x0088F600, 0x0F000000, 0x000017B3, 0x0F00A9CC, 0x0000A4B8, 0x09000000, 0x00000000
.word 0x00885630, 0x00885780, 0x00951780, 0x00953890, 0x0088F600, 0x0088F680, 0x0F000000, 0x00000440, 0x0F0018D8, 0x000015D0, 0x09000000, 0x00000000
.word 0x00885780, 0x008858A0, 0x00953890, 0x00955620, 0x0088F680, 0x0088F800, 0x0F000000, 0x0000043E, 0x0F001678, 0x00001118, 0x09000000, 0x00000000
.word 0x008858A0, 0x00885A10, 0x00955620, 0x00956670, 0x0088F800, 0x0088F830, 0x0F000000, 0x0000022B, 0x0F000CD4, 0x00000748, 0x09000000, 0x00000000
.word 0x00885A10, 0x0088CC50, 0x00956670, 0x00963EF0, 0x0088F830, 0x0088F9C0, 0x0F000000, 0x0000162F, 0x0F00A45C, 0x00009C20, 0x09000000, 0x00000000
.word 0x0088CC50, 0x0088CD70, 0x00963EF0, 0x00966260, 0x0088F9C0, 0x0088FA10, 0x0F000000, 0x0000048D, 0x0F001B84, 0x00001078, 0x09000000, 0x00000000
*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_banshee_boardwalk_vertex
.incbin "bin/course_banshee_boardwalk_vertex.mio0"
.balign 4
glabel d_course_banshee_boardwalk_packed
.incbin "bin/course_banshee_boardwalk_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_big_donut_vertex
.incbin "bin/course_big_donut_vertex.mio0"
.balign 4
glabel d_course_big_donut_packed
.incbin "bin/course_big_donut_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_block_fort_vertex
.incbin "bin/course_block_fort_vertex.mio0"
.balign 4
glabel d_course_block_fort_packed
.incbin "bin/course_block_fort_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_bowsers_castle_vertex
.incbin "bin/course_bowsers_castle_vertex.mio0"
.balign 4
glabel d_course_bowsers_castle_packed
.incbin "bin/course_bowsers_castle_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_choco_mountain_vertex
.incbin "bin/course_choco_mountain_vertex.mio0"
.balign 4
glabel d_course_choco_mountain_packed
.incbin "bin/course_choco_mountain_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_dks_jungle_parkway_vertex
.incbin "bin/course_dks_jungle_parkway_vertex.mio0"
.balign 4
glabel d_course_dks_jungle_parkway_packed
.incbin "bin/course_dks_jungle_parkway_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_double_deck_vertex
.incbin "bin/course_double_deck_vertex.mio0"
.balign 4
glabel d_course_double_deck_packed
.incbin "bin/course_double_deck_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_frappe_snowland_vertex
.incbin "bin/course_frappe_snowland_vertex.mio0"
.balign 4
glabel d_course_frappe_snowland_packed
.incbin "bin/course_frappe_snowland_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_kalimari_desert_vertex
.incbin "bin/course_kalimari_desert_vertex.mio0"
.balign 4
glabel d_course_kalimari_desert_packed
.incbin "bin/course_kalimari_desert_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_koopa_troopa_beach_vertex
.incbin "bin/course_koopa_troopa_beach_vertex.mio0"
.balign 4
glabel d_course_koopa_troopa_beach_packed
.incbin "bin/course_koopa_troopa_beach_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_luigi_raceway_vertex
.incbin "bin/course_luigi_raceway_vertex.mio0"
.balign 4
glabel d_course_luigi_raceway_packed
.incbin "bin/course_luigi_raceway_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_mario_raceway_vertex
.incbin "bin/course_mario_raceway_vertex.mio0"
.balign 4
glabel d_course_mario_raceway_packed
.incbin "bin/course_mario_raceway_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_moo_moo_farm_vertex
.incbin "bin/course_moo_moo_farm_vertex.mio0"
.balign 4
glabel d_course_moo_moo_farm_packed
.incbin "bin/course_moo_moo_farm_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_rainbow_road_vertex
.incbin "bin/course_rainbow_road_vertex.mio0"
.balign 4
glabel d_course_rainbow_road_packed
.incbin "bin/course_rainbow_road_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_royal_raceway_vertex
.incbin "bin/course_royal_raceway_vertex.mio0"
.balign 4
glabel d_course_royal_raceway_packed
.incbin "bin/course_royal_raceway_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_sherbet_land_vertex
.incbin "bin/course_sherbet_land_vertex.mio0"
.balign 4
glabel d_course_sherbet_land_packed
.incbin "bin/course_sherbet_land_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_skyscraper_vertex
.incbin "bin/course_skyscraper_vertex.mio0"
.balign 4
glabel d_course_skyscraper_packed
.incbin "bin/course_skyscraper_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_toads_turnpike_vertex
.incbin "bin/course_toads_turnpike_vertex.mio0"
.balign 4
glabel d_course_toads_turnpike_packed
.incbin "bin/course_toads_turnpike_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_wario_stadium_vertex
.incbin "bin/course_wario_stadium_vertex.mio0"
.balign 4
glabel d_course_wario_stadium_packed
.incbin "bin/course_wario_stadium_packed.bin"

View File

@ -1,11 +0,0 @@
.include "macros.inc"
.section .data
.balign 4
glabel d_course_yoshi_valley_vertex
.incbin "bin/course_yoshi_valley_vertex.mio0"
.balign 4
glabel d_course_yoshi_valley_packed
.incbin "bin/course_yoshi_valley_packed.bin"

File diff suppressed because it is too large Load Diff

956
data/data_121DA0_2.s Normal file
View File

@ -0,0 +1,956 @@
# Mario Kart 64 (U) disassembly and split file
# generated by n64split v0.4a - N64 ROM splitter
.include "macros.inc"
.section .data
glabel D_802B9140
.word 0x00000000, 0x00000000, 0x00000000
glabel D_802B914C
.word 0x00000000, 0x00000000
glabel D_802B9154
.word 0x00000000, 0x00000000, 0x00000000
glabel D_802B9160
.word 0x00000000, 0x00000000, 0x00000000
glabel D_802B916C
.word 0x00000000, 0x00000000
glabel D_802B9174
.word 0x00000000, 0x00000000, 0x00000000
glabel D_802B9180
.word 0x00000000, 0x00000000, 0x00000000
glabel D_802B918C
.word 0x00000000, 0x00000000
glabel D_802B9194
.word 0x00000000, 0x00000000, 0x00000000
glabel D_802B91A0
.word 0x00000000, 0x00000000
glabel D_802B91A8
.word 0x00000000, 0x00000000, 0x00000000
glabel D_802B91B4
.word 0x00000000, 0x00000000, 0x00000000, 0x0000000d
.word 0x0000000d
glabel D_802B91C8
.word 0x00000000, 0x00000000, 0x00000000, 0x00000000
.word 0x00000000, 0x00000000
glabel D_802B91E0
.word L8028E6BC, L8028E958, L8028EAB0, L8028EC28
.word L8028EC04, L8028E714, L8028E838, L8028EBAC
glabel D_802B9200
.float 1.33333337
glabel D_802B9204
.word L8028ECE0, L8028ED10, L8028ED40, L8028ED50
.word L8028ED00, L8028ED60, L8028ED30, L8028ECE0
.word L8028ECE0, L8028ED00, L8028ECF0, L8028ED20
.word L8028ED60, L8028ED70, L8028ECE0, L8028ED10
.word L8028ED90, L8028ED10, L8028ED80, L8028ED90
glabel D_802B9254
.float 0.01666666
glabel D_802B9258
.word L8028F4CC, L8028F4CC, L8028F4B0, L8028F4B0
.word L8028F4B0, L8028F4D4, L8028F4B0
glabel D_802B9274
.float 0.017
glabel D_802B9278
.float 0.028
glabel D_802B927C
.word L8028FD10, L8028FE90, L8028FFE4, L8029003C
.word L80290088, L80290200, L802902CC, L80290304
glabel D_802B929C
.float 0.008
glabel D_802B92A0
.float 0.1
glabel D_802B92A4
.float 0.2
glabel D_802B92A8
.float 0.55
.word 0
glabel D_802B92B0
.double 0.85
.word 0x00000000, 0x00000000
glabel D_802B92C0
.word L80291488, L802914F4, L80292454, L80292454
.word L80291600, L80292454, L80292454, L80292454
.word L80292454, L80292454, L80291870, L80291A6C
.word L80291B28, L80292454, L80292454, L80292454
.word L80291D4C
glabel D_802B9304
.word L802916DC, L802916DC, L80291730, L80291730
.word L80291730, L80291730, L80291730, L802916DC
.word L802916DC, L802916DC, L80291730, L80291730
.word L80291730, L80291730, L80291730, L802916DC
glabel D_802B9344
.word L8029217C, L80292400, L80292400, L80292400
.word L80292400, L80292400, L80292400, L80292400
.word L80292400, L80292400, L80292400, L80292400
.word L802921A0, L802922A0, L80292400, L80292400
.word L80292358, L802923C0, L802923E0
glabel D_802B9390
.word L802925EC, L802925EC, L80292610, L80292628
.word L80292660, L80292660, L80292694, L802926C4
.word L802926C4, L802926D8, L802926F4, L80292730
.word L80292750, L80292750, L80292758, L80292758
.word L802925EC
glabel D_802B93D4
.word L80293D24, L80293D74, L80293DCC, L80293E24
.word L80293E80, L80293ED8
glabel D_802B93EC
.word L80294DD8, L80294E28, L80294E7C, L80294ED0
.word L80294F28, L80294F7C
glabel D_802B9404
.word L802956C4, L802956F0, L8029571C, L80295748
.word L80295774, L802957A0, L802957CC, L802957F8
.word L80295824, L80295850, L8029587C, L802958A8
.word L802958D4, L80295900, L8029592C, L80295958
.word L80295984, L802959B0, L802959DC, L80295A08
glabel D_802B9454
.word L80295AAC, L80295ABC, L80295ACC, L80295ADC
.word L80295AEC, L80295AFC, L80295B0C, L80295B1C
.word L80295B2C, L80295B3C, L80295B4C, L80295B5C
.word L80295B6C, L80295B7C, L80295B8C, L80295B9C
.word L80295BAC, L80295BBC, L80295BCC, L80295BDC
glabel D_802B94A4
.word L80295E3C, L80295EB0, L80295FA4, L80295FE8
.word L8029604C, L802960A0, L802960C8, L80296164
.word L8029618C, L802961C8, L80296204, L8029627C
.word L802962B8, L80296324, L802963E0, L80296520
.word L80296560, L8029659C, L802965DC, L80296628
glabel D_802B94F4
.float -475.0
glabel D_802B94F8
.float -0.1
.word 0
glabel D_802B9500
.word L80296B78, L80296B78, L80296B78, L80296B78
.word L80296BAC, L80296B88, L80296B78, L80296B78
glabel D_802B9520
.word L80296CBC, L80296CBC, L80296CBC, L80296CBC
.word L80296CF0, L80296CCC, L80296CBC, L80296CBC
glabel D_802B9540
.word L80296F28, L80296F6C, L80296F9C, L80296E40
.word L80296E6C, L80296E88, L80296ED8, L80296DDC
.word L802971FC, L8029721C, L802971D8, L8029716C
.word L8029721C, L80296E5C, L8029721C, L8029721C
.word L8029721C, L80296FCC, L8029721C, L8029721C
.word L8029721C, L8029721C, L8029721C, L8029713C
.word L80296FF4, L8029721C, L80297024, L8029707C
.word L802970AC, L802970DC, L8029710C, L8029704C
.word L8029721C, L8029721C, L8029721C, L80296DA8
.word L8029721C, L8029721C, L8029721C, L8029721C
.word L8029721C, L802971B0, L8029721C, L80296E20
glabel D_802B95F0
.float 1.925
glabel D_802B95F4
.float 0.35
glabel D_802B95F8
.float 4000000.0
glabel D_802B95FC
.word L80297B10, L80297B3C, L80297B68, L80297B94
.word L80297BC0
glabel D_802B9610
.double 0.12
glabel D_802B9618
.float 2.3
glabel D_802B961C
.float 0.7
glabel D_802B9620
.float 0.3
glabel D_802B9624
.float 1000000.0
glabel D_802B9628
.float 90000.0
glabel D_802B962C
.float 64000000.0
glabel D_802B9630
.float 4000000.0
glabel D_802B9634
.word L802988F0, L80298910, L80298930, L80298950
.word L80298970
glabel D_802B9648
.float 160000.0
glabel D_802B964C
.float 0.8
glabel D_802B9650
.float 9000000.0
glabel D_802B9654
.float 1000000.0
glabel D_802B9658
.float 16000000.0
glabel D_802B965C
.float 250000.0
glabel D_802B9660
.float 4000000.0
glabel D_802B9664
.float 250000.0
glabel D_802B9668
.float 4000000.0
glabel D_802B966C
.float 250000.0
glabel D_802B9670
.float 6250000.0
glabel D_802B9674
.float 4000000.0
glabel D_802B9678
.float 250000.0
glabel D_802B967C
.float 4000000.0
glabel D_802B9680
.float 250000.0
glabel D_802B9684
.float 640000.0
glabel D_802B9688
.float 250000.0
glabel D_802B968C
.float 4000000.0
glabel D_802B9690
.float 250000.0
glabel D_802B9694
.float 4000000.0
glabel D_802B9698
.float 40000.0
glabel D_802B969C
.float 4000000.0
glabel D_802B96A0
.float 40000.0
glabel D_802B96A4
.float 4000000.0
glabel D_802B96A8
.float 40000.0
glabel D_802B96AC
.float 490000.0
glabel D_802B96B0
.float 40000.0
glabel D_802B96B4
.float 490000.0
glabel D_802B96B8
.float 4000000.0
glabel D_802B96BC
.word L8029AD04, L8029AD24, L8029AD44, L8029AD64
.word L8029AD84, L8029ADA4, L8029ADC4, L8029ADE4
glabel D_802B96DC
.float 9000000.0
glabel D_802B96E0
.float 9000000.0
glabel D_802B96E4
.float 160000.0
glabel D_802B96E8
.float 640000.0
glabel D_802B96EC
.float 160000.0
glabel D_802B96F0
.float 9000000.0
glabel D_802B96F4
.float 160000.0
glabel D_802B96F8
.float 640000.0
glabel D_802B96FC
.float 160000.0
glabel D_802B9700
.float 9000000.0
glabel D_802B9704
.float 160000.0
glabel D_802B9708
.float 640000.0
glabel D_802B970C
.float 160000.0
glabel D_802B9710
.float 9000000.0
glabel D_802B9714
.float 160000.0
glabel D_802B9718
.float 640000.0
glabel D_802B971C
.float 160000.0
glabel D_802B9720
.float 9000000.0
glabel D_802B9724
.float 122500.0
glabel D_802B9728
.float 640000.0
glabel D_802B972C
.float 1440000.0
glabel D_802B9730
.float 9000000.0
glabel D_802B9734
.float 250000.0
glabel D_802B9738
.float 1000000.0
glabel D_802B973C
.float 1440000.0
glabel D_802B9740
.float 9000000.0
glabel D_802B9744
.float 250000.0
glabel D_802B9748
.float 1000000.0
glabel D_802B974C
.float 1440000.0
glabel D_802B9750
.float 4000000.0
glabel D_802B9754
.float 250000.0
glabel D_802B9758
.float 5461.0
.word 0
glabel D_802B9760
.double 0.1
glabel D_802B9768
.float -1.2
glabel D_802B976C
.float -1.2
glabel D_802B9770
.float -1.2
glabel D_802B9774
.float -1.2
glabel D_802B9778
.float -1.2
glabel D_802B977C
.word L8029D6A4, L8029D73C, L8029D6AC, L8029D73C
.word L8029D6B4, L8029D6BC, L8029D73C, L8029D6C4
.word L8029D6F0, L8029D6F8, L8029D73C, L8029D700
glabel D_802B97AC
.word L8029DBBC, L8029DC88, L8029DCA8, L8029DCC8
.word L8029DCDC, L8029DD40, L8029DD60, L8029DDA8
.word L8029DDD4, L8029DDF4, L8029DE28, L8029DE3C
.word L8029DFD4, L8029DFE8, L8029DFFC, L8029E0D0
.word L8029E0E4, L8029E0F8, L8029E10C, L8029E130
glabel D_802B97FC
.word L8029E3B0, L8029E7AC, L8029E488, L8029E7AC
.word L8029E4A4, L8029E4C0, L8029E7AC, L8029E4F0
.word L8029E5DC, L8029E60C, L8029E7AC, L8029E704
.word L8029E7AC, L8029E7AC, L8029E7AC, L8029E7AC
.word L8029E7AC, L8029E7AC, L8029E770
glabel D_802B9848
.word L8029E960, L8029E960, L8029E960, L8029E960
.word L8029EA8C, L8029E968, L8029E960, L8029E960
glabel D_802B9868
.word L8029EB34, L8029EB34, L8029EB34, L8029EB34
.word L8029EC60, L8029EB3C, L8029EB34, L8029EB34
glabel D_802B9888
.float 0.8
glabel D_802B988C
.float 0.1
glabel D_802B9890
.float 0.1
glabel D_802B9894
.float 1.2
glabel D_802B9898
.float 1.3
glabel D_802B989C
.float 0.8
glabel D_802B98A0
.float 0.1
glabel D_802B98A4
.float 1.2
glabel D_802B98A8
.float 1.2
glabel D_802B98AC
.float 0.1
glabel D_802B98B0
.float 0.1
glabel D_802B98B4
.word L8029FE48, L802A00D8, L8029FE38, L8029FE38
.word L8029FE88, L802A00D8
glabel D_802B98CC
.word L8029FFB4, L8029FFB4, L8029FF74, L8029FF74
.word L8029FF74, L8029FF74, L802A00D8, L802A00D8
.word L8029FF74, L8029FF74
glabel D_802B98F4
.word L802A0030, L802A0030, L802A0004, L802A0004
.word L802A0004, L802A0004, L802A0058, L802A00D8
.word L802A0004, L802A0004
glabel D_802B991C
.word L802A09B0, L802A09B0, L802A09B0, L802A09D4
.word L802A04E0, L802A063C, L802A0858, L802A04AC
.word L802A0968, L802A0D40, L802A0CBC, L802A0AA4
.word L802A0D40, L802A0D40, L802A0D40, L802A0D40
.word L802A0D40, L802A09B0, L802A0D40, L802A0D40
.word L802A0D40, L802A098C, L802A0D40, L802A09B0
.word L802A09B0, L802A0D40, L802A09B0, L802A09B0
.word L802A09B0, L802A09B0, L802A09B0, L802A09B0
.word L802A0D40, L802A0D40, L802A0D40, L802A0D40
.word L802A0D40, L802A0D40, L802A0D40, L802A0D40
.word L802A0744, L802A0C34
glabel D_802B99C4
.float 360000.0
glabel D_802B99C8
.float 360000.0
glabel D_802B99CC
.float 8.66
glabel D_802B99D0
.float 0.05
glabel D_802B99D4
.float 0.2
glabel D_802B99D8
.float 8.66
glabel D_802B99DC
.float 0.45
glabel D_802B99E0
.float 1000000.0
glabel D_802B99E4
.float 0.1
glabel D_802B99E8
.float 0.8
glabel D_802B99EC
.float 2.3
glabel D_802B99F0
.float 1.2
glabel D_802B99F4
.float 1.8
glabel D_802B99F8
.float -0.8
glabel D_802B99FC
.float 0.6
glabel D_802B9A00
.float 4000000.0
glabel D_802B9A04
.float 600000.0
glabel D_802B9A08
.float 100000.0
glabel D_802B9A0C
.float 0.1
glabel D_802B9A10
.float 0.8
glabel D_802B9A14
.float 2.3
glabel D_802B9A18
.float 1.2
glabel D_802B9A1C
.float 1.8
glabel D_802B9A20
.float -0.8
glabel D_802B9A24
.float 0.6
glabel D_802B9A28
.float 16000000.0
glabel D_802B9A2C
.float 16000000.0
glabel D_802B9A30
.float 640000.0
glabel D_802B9A34
.float 16000000.0
glabel D_802B9A38
.float 4000000.0
glabel D_802B9A3C
.float 4000000.0
glabel D_802B9A40
.float 250000.0
glabel D_802B9A44
.word L802A31E4, L802A31FC, L802A3214, L802A32EC
.word L802A3318, L802A3330, L802A3348, L802A34C0
.word L802A3378, L802A34D4, L802A34D4, L802A34D4
.word L802A34D4, L802A3390, L802A33A4, L802A33B8
.word L802A33CC, L802A322C, L802A33E4, L802A34D4
.word L802A34D4, L802A33FC, L802A34D4, L802A3428
.word L802A3244, L802A34D4, L802A325C, L802A328C
.word L802A32A4, L802A32BC, L802A32D4, L802A3274
.word L802A34D4, L802A3414, L802A34D4, L802A345C
.word L802A3440, L802A34AC, L802A3470, L802A3484
.word L802A3360, L802A34D4, L802A3498, L802A3300
glabel D_802B9AF4
.word L802A36D8, L802A36D8, L802A36D8, L802A3590
.word L802A35E0, L802A35A0, L802A35B0, L802A36E8
.word L802A3660, L802A36F0, L802A3630, L802A3650
.word L802A3670, L802A3600, L802A3610, L802A3620
.word L802A36F0, L802A36D8, L802A36F0, L802A3680
.word L802A3694, L802A36A8, L802A36F0, L802A36D8
.word L802A36D8, L802A36D8, L802A36D8, L802A36D8
.word L802A36D8, L802A36D8, L802A36D8, L802A36D8
.word L802A36F0, L802A36B8, L802A36F0, L802A36F0
.word L802A35F0, L802A36C8, L802A36F0, L802A36F0
.word L802A35C0, L802A3640, L802A36F0, L802A35D0
.word 0, 0, 0
glabel D_802B9BB0
.float 30000.0
glabel D_802B9BB4
.float 6800.0
glabel D_802B9BB8
.word L802A4E04, L802A4D98, L802A4D74, L802A4D74
.word L802A4E04, L802A4E04, L802A4DBC, L802A4E04
.word L802A4E04, L802A4E04, L802A4E04, L802A4E28
.word L802A4E04, L802A4D74, L802A4DE0, L802A4D74
.word L802A4D74, L802A4D98, L802A4E04
glabel D_802B9C04
.float 2700.0
glabel D_802B9C08
.float 1500.0
glabel D_802B9C0C
.float 5000.0
glabel D_802B9C10
.float 4500.0
glabel D_802B9C14
.float 7000.0
glabel D_802B9C18
.float 6800.0
glabel D_802B9C1C
.float 1.3333333730697632
glabel D_802B9C20
.float 0.6666666865348816
glabel D_802B9C24
.float 2.6666667461395264
glabel D_802B9C28
.float 1.3333333730697632
.word 0
glabel D_802B9C30
.word L802A8FE0, L802A9014, L802A902C, L802A9044
.word L802A9060, L802A907C, L802A9094, L802A9094
.word L802A9094, L802A9094, L802A9094, L802A9094
.word L802A9094, L802A9094, L802A9094, L802A9094
.word L802A9094, L802A9094, L802A8FF8
glabel D_802B9C7C
.word L802A9250, L802A9268, L802A9280, L802A9298
.word L802A92B4, L802A92D0
glabel D_802B9C94
.word L802A9BB8, L802A9BDC, L802A9C00
.word L802A9C24, L802A9C48, L802A9C6C, L802A9C90
.word L802A9CB4, L802A9CD8, L802A9CFC, L802A9D20
.word L802A9D44, L802A9D68, L802A9D8C, L802A9DB0
.word L802A9DD4, L802A9DF8, L802A9E1C, L802A9E40
.word L802A9E64, L802A9E88, L802A9EAC, L802A9EC8
.word L802A9EE4, L802A9F38, L802A9F54, L802A9FC4
.word L802AA00C, L802AA030, L802AA054, L802AA078
.word L802AA09C, L802AA0C0, L802AA0E4, L802AA108
.word L802AA12C, L802AA150, L802AA174, L802AA198
.word L802AA1BC, L802AA1E0, L802AA684, L802AA714
.word L802AA780, L802A9FE8, L802AA6F0, L802A9F00
.word L802A9F70, L802AA6CC, L802A9B74, L802A9B74
.word L802AA204, L802AA228, L802AA24C, L802AA270
.word L802AA294, L802AA2B8, L802AA2DC, L802AA300
.word L802AA324, L802AA348, L802AA36C, L802AA390
.word L802AA3B4, L802AA3D8, L802AA3FC, L802AA420
.word L802AA444, L802AA468, L802AA48C, L802AA4B0
.word L802AA4D4, L802AA4F8, L802AA51C, L802AA540
.word L802AA564, L802AA588, L802AA5AC, L802AA5D0
.word L802AA5F4, L802AA618, L802AA63C, L802AA660
.word L802A9F1C, L802A9F8C, L802A9FA8, L802AA738
.word L802AA75C, L802AA6A8
.word 0, 0
glabel D_802B9E00
.float 1859.0
glabel D_802B9E04
.float 1549.0
glabel D_802B9E08
.float -1102.0
glabel D_802B9E0C
.float -1402.0
glabel D_802B9E10
.float 2405.0
glabel D_802B9E14
.float 2233.0
glabel D_802B9E18
.float 0.8
glabel D_802B9E1C
.float -475.0
glabel D_802B9E20
.float -33.9
glabel D_802B9E24
.float -838.0
glabel D_802B9E28
.float -475.0
glabel D_802B9E2C
.float -475.0
glabel D_802B9E30
.float -993.0
glabel D_802B9E34
.float -33.9
glabel D_802B9E38
.float -475.0
glabel D_802B9E3C
.float -33.9
glabel D_802B9E40
.float -475.0
glabel D_802B9E44
.float -33.9
glabel D_802B9E48
.float -0.9
glabel D_802B9E4C
.float -3000.0
glabel D_802B9E50
.float 3000.0
glabel D_802B9E54
.float 3000.0
glabel D_802B9E58
.float 3000.0
glabel D_802B9E5C
.float 3000.0
glabel D_802B9E60
.float 3000.0
glabel D_802B9E64
.float -0.9
glabel D_802B9E68
.float 0.9
glabel D_802B9E6C
.float 0.1
glabel D_802B9E70
.float -0.1
.word 0, 0, 0
glabel D_802B9E80
.double 0.015
glabel D_802B9E88
.double 0.015
glabel D_802B9E90
.double 0.015
glabel D_802B9E98
.word L802B0A88, L802B0AB0, L802B0AF8, L802B0B40
.word L802B0B84, L802B0BCC, L802B0C70
glabel D_802B9EB4
.word L802B0EF4, L802B0F60, L802B1050, L802B1154
.word L802B11FC
glabel D_802B9EC8
.word L802B2094, L802B237C, L802B25A0, L802B2718
.word L802B28E8, L802B285C
glabel D_802B9EE0
.float 0.2
glabel D_802B9EE4
.float 0.15
glabel D_802B9EE8
.float 0.2
glabel D_802B9EEC
.float 0.2
glabel D_802B9EF0
.float 0.3
glabel D_802B9EF4
.word L802B2B0C, L802B2B20, L802B2B4C, L802B2B78
.word L802B2BA4
glabel D_802B9F08
.word L802B301C, L802B302C, L802B2FEC, L802B30BC
.word L802B2FFC, L802B30CC, L802B300C, L802B309C
.word L802B30AC, L802B308C, L802B307C, L802B303C
.word L802B304C, L802B305C, L802B306C
glabel D_802B9F44
.word L802B33CC, L802B3614, L802B382C, L802B3B30
.word L802B3974, L802B3AC4
glabel D_802B9F5C
.float 1.2
glabel D_802B9F60
.float 1.2
glabel D_802B9F64
.float 0.3
glabel D_802B9F68
.float 25000000.0
glabel D_802B9F6C
.word L802B4324, L802B44B0, L802B4750, L802B4A9C
.word L802B4AD8, L802B4B18, L802B4B94, L802B4CE4
.word L802B4D58, L802B4DE8
glabel D_802B9F94
.float 1.2
glabel D_802B9F98
.float 40000.0
glabel D_802B9F9C
.float 0.3
glabel D_802B9FA0
.float 40000.0
.word 0, 0, 0
glabel D_802B9FB0
.double 0.017453292222222222
glabel D_802B9FB8
.double 3.141592653589793
glabel D_802B9FC0
.double 360.0
glabel D_802B9FC8
.double 3.141592653589793
glabel D_802B9FD0
.double 360.0
glabel D_802B9FD8
.float 1000000.0
glabel D_802B9FDC
.float -0.01600503
glabel D_802B9FE0
.float 0.002834060
glabel D_802B9FE4
.float -0.074954450
glabel D_802B9FE8
.float 0.042587612
glabel D_802B9FEC
.float -0.142025709
glabel D_802B9FF0
.float 0.106367543
glabel D_802B9FF4
.float -0.333330661
glabel D_802B9FF8
.double 1.3375206719956623e-08
glabel D_802BA000
.double 1.5707963267948966
glabel D_802BA008
.double 1.5707963267948966
glabel D_802BA010
.double 50.123870849609375
glabel D_802BA018
.double 3.141592653589793
glabel D_802BA020
.double 3.141592653589793
glabel D_802BA028
.double 65535.0

View File

@ -54,4 +54,73 @@ struct UnkStruct_800DC5EC {
u16 unk32;
};
typedef struct {
s16 ob[3]; /* x, y, z */
s16 tc[2]; /* texture coord */
u8 ca[4]; /* color & alpha */
} mk64_Vtx;
struct courseTable {
u32 *dlRomStart; // 0x00 ROM start for segment 6 DL data
u32 *dlRomEnd; // 0x04 ROM end for segment 6 DL data
u32 *vertexRomStart; // 0x08 ROM start for segment 4 vertex data
u32 *vertexRomEnd; // 0x0C ROM end for segment 7?
u32 *offsetRomStart; // 0x10 ROM start for uncompressed segment 9 texture and DL addresses
u32 *offsetRomEnd; // 0x14 ROM end for uncompressed segment 9 texture and DL addresses
mk64_Vtx *vertexStart; // 0x18 segmented address of vertex data
u32 vertexCount; // 0x1C number of vertices in vertex data
u32 *packedStart; // 0x20 packed display list start address
u32 *finalDL; // 0x24
u32 *textures; // 0x20 segmented address of textures table
u16 unknown1; // 0x2C
u16 padding; // 0x2E
};
extern mk64_Vtx d_course_mario_raceway_vertex[];
extern mk64_Vtx d_course_choco_mountain_vertex[];
extern mk64_Vtx d_course_bowsers_castle_vertex[];
extern mk64_Vtx d_course_banshee_boardwalk_vertex[];
extern mk64_Vtx d_course_yoshi_valley_vertex[];
extern mk64_Vtx d_course_frappe_snowland_vertex[];
extern mk64_Vtx d_course_koopa_troopa_beach_vertex[];
extern mk64_Vtx d_course_royal_raceway_vertex[];
extern mk64_Vtx d_course_luigi_raceway_vertex[];
extern mk64_Vtx d_course_moo_moo_farm_vertex[];
extern mk64_Vtx d_course_toads_turnpike_vertex[];
extern mk64_Vtx d_course_kalimari_desert_vertex[];
extern mk64_Vtx d_course_sherbet_land_vertex[];
extern mk64_Vtx d_course_rainbow_road_vertex[];
extern mk64_Vtx d_course_wario_stadium_vertex[];
extern mk64_Vtx d_course_block_fort_vertex[];
extern mk64_Vtx d_course_skyscraper_vertex[];
extern mk64_Vtx d_course_double_deck_vertex[];
extern mk64_Vtx d_course_dks_jungle_parkway_vertex[];
extern mk64_Vtx d_course_big_donut_vertex[];
extern struct courseTable gCourseTable[];
/*
extern mk64_Vtx d_course_mario_raceway_vertex[5757];
extern mk64_Vtx d_course_choco_mountain_vertex[5560];
extern mk64_Vtx d_course_bowsers_castle_vertex[9527];
extern mk64_Vtx d_course_banshee_boardwalk_vertex[4945];
extern mk64_Vtx d_course_yoshi_valley_vertex[3720];
extern mk64_Vtx d_course_frappe_snowland_vertex[5529];
extern mk64_Vtx d_course_koopa_troopa_beach_vertex[9376];
extern mk64_Vtx d_course_royal_raceway_vertex[8306];
extern mk64_Vtx d_course_luigi_raceway_vertex[5936];
extern mk64_Vtx d_course_moo_moo_farm_vertex[7972];
extern mk64_Vtx d_course_toads_turnpike_vertex[6359];
extern mk64_Vtx d_course_kalimari_desert_vertex[6393];
extern mk64_Vtx d_course_sherbet_land_vertex[663];
extern mk64_Vtx d_course_rainbow_road_vertex[3111];
extern mk64_Vtx d_course_wario_stadium_vertex[6067];
extern mk64_Vtx d_course_block_fort_vertex[1088];
extern mk64_Vtx d_course_skyscraper_vertex[1086];
extern mk64_Vtx d_course_double_deck_vertex[555];
extern mk64_Vtx d_course_dks_jungle_parkway_vertex[5679];
extern mk64_Vtx d_course_big_donut_vertex[1165];
*/
#endif /* TYPES_H */

141
mk64.ld
View File

@ -140,6 +140,8 @@ SECTIONS
BUILD_DIR/asm/code_802B0210.o(.text);
BUILD_DIR/asm/code_802B4F60.o(.text);
BUILD_DIR/data/data_121DA0.o(.data);
BUILD_DIR/courses/courseTable.inc.o(.data);
BUILD_DIR/data/data_121DA0_2.o(.data);
}
END_SEG(code_8028DF00)
@ -282,26 +284,125 @@ SECTIONS
COURSE_OFFSETS_SEG(course_dks_jungle_parkway_offsets, 0x09000000)
COURSE_OFFSETS_SEG(course_big_donut_offsets, 0x09000000)
VERT_SEG(mario_raceway_vertex, 0x0F000000)
VERT_SEG(choco_mountain_vertex, 0x0F000000)
VERT_SEG(bowsers_castle_vertex, 0x0F000000)
VERT_SEG(banshee_boardwalk_vertex, 0x0F000000)
VERT_SEG(yoshi_valley_vertex, 0x0F000000)
VERT_SEG(frappe_snowland_vertex, 0x0F000000)
VERT_SEG(koopa_troopa_beach_vertex, 0x0F000000)
VERT_SEG(royal_raceway_vertex, 0x0F000000)
VERT_SEG(luigi_raceway_vertex, 0x0F000000)
VERT_SEG(moo_moo_farm_vertex, 0x0F000000)
VERT_SEG(toads_turnpike_vertex, 0x0F000000)
VERT_SEG(kalimari_desert_vertex, 0x0F000000)
VERT_SEG(sherbet_land_vertex, 0x0F000000)
VERT_SEG(rainbow_road_vertex, 0x0F000000)
VERT_SEG(wario_stadium_vertex, 0x0F000000)
VERT_SEG(block_fort_vertex, 0x0F000000)
VERT_SEG(skyscraper_vertex, 0x0F000000)
VERT_SEG(double_deck_vertex, 0x0F000000)
VERT_SEG(dks_jungle_parkway_vertex, 0x0F000000)
VERT_SEG(big_donut_vertex, 0x0F000000)
BEGIN_SEG(mario_raceway_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/flower_cup/mario_raceway/model.inc.mio0.o(.data); \
} \
END_SEG(mario_raceway_vertex)
BEGIN_SEG(choco_mountain_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/flower_cup/choco_mountain/model.inc.mio0.o(.data); \
} \
END_SEG(choco_mountain_vertex)
BEGIN_SEG(bowsers_castle_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/star_cup/bowsers_castle/model.inc.mio0.o(.data); \
} \
END_SEG(bowsers_castle_vertex)
BEGIN_SEG(banshee_boardwalk_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/special_cup/banshee_boardwalk/model.inc.mio0.o(.data); \
} \
END_SEG(banshee_boardwalk_vertex)
BEGIN_SEG(yoshi_valley_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/special_cup/yoshi_valley/model.inc.mio0.o(.data); \
} \
END_SEG(yoshi_valley_vertex)
BEGIN_SEG(frappe_snowland_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/flower_cup/frappe_snowland/model.inc.mio0.o(.data); \
} \
END_SEG(frappe_snowland_vertex)
BEGIN_SEG(koopa_troopa_beach_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/mushroom_cup/koopa_beach/model.inc.mio0.o(.data); \
} \
END_SEG(koopa_troopa_beach_vertex)
BEGIN_SEG(royal_raceway_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/star_cup/royal_raceway/model.inc.mio0.o(.data); \
} \
END_SEG(royal_raceway_vertex)
BEGIN_SEG(luigi_raceway_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/mushroom_cup/luigi_raceway/model.inc.mio0.o(.data); \
} \
END_SEG(luigi_raceway_vertex)
BEGIN_SEG(moo_moo_farm_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/mushroom_cup/moo_moo_farm/model.inc.mio0.o(.data); \
} \
END_SEG(moo_moo_farm_vertex)
BEGIN_SEG(toads_turnpike_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/flower_cup/toads_turnpike/model.inc.mio0.o(.data); \
} \
END_SEG(toads_turnpike_vertex)
BEGIN_SEG(kalimari_desert_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/mushroom_cup/kalimari_desert/model.inc.mio0.o(.data); \
} \
END_SEG(kalimari_desert_vertex)
BEGIN_SEG(sherbet_land_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/star_cup/sherbet_land/model.inc.mio0.o(.data); \
} \
END_SEG(sherbet_land_vertex)
BEGIN_SEG(rainbow_road_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/special_cup/rainbow_road/model.inc.mio0.o(.data); \
} \
END_SEG(rainbow_road_vertex)
BEGIN_SEG(wario_stadium_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/star_cup/wario_stadium/model.inc.mio0.o(.data); \
} \
END_SEG(wario_stadium_vertex)
BEGIN_SEG(block_fort_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/battle/block_fort/model.inc.mio0.o(.data); \
} \
END_SEG(block_fort_vertex)
BEGIN_SEG(skyscraper_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/battle/skyscraper/model.inc.mio0.o(.data); \
} \
END_SEG(skyscraper_vertex)
BEGIN_SEG(double_deck_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/battle/double_deck/model.inc.mio0.o(.data); \
} \
END_SEG(double_deck_vertex)
BEGIN_SEG(dks_jungle_parkway_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/special_cup/dks_jungle_parkway/model.inc.mio0.o(.data); \
} \
END_SEG(dks_jungle_parkway_vertex)
BEGIN_SEG(big_donut_vertex, 0x0F000000) \
{ \
BUILD_DIR/courses/battle/big_donut/model.inc.mio0.o(.data); \
} \
END_SEG(big_donut_vertex)
BEGIN_SEG(audio_banks, 0x0)
{

1
tools/.gitignore vendored
View File

@ -3,3 +3,4 @@
/n64cksum
/n64graphics
/tkmk00
/extract_data_for_mio

View File

@ -1,6 +1,6 @@
CC := gcc
CFLAGS := -I . -Wall -Wextra -Wno-unused-parameter -pedantic -std=c99 -O2 -s
PROGRAMS := mio0 n64graphics n64cksum tkmk00
PROGRAMS := mio0 n64graphics n64cksum tkmk00 extract_data_for_mio
n64graphics_SOURCES := n64graphics.c utils.c
@ -15,6 +15,8 @@ tkmk00_CFLAGS := -DTKMK00_STANDALONE
n64cksum_SOURCES := n64cksum.c utils.c
n64cksum_CFLAGS := -DN64CKSUM_STANDALONE
extract_data_for_mio_SOURCES := extract_data_for_mio.c
all: $(PROGRAMS)
clean:

View File

@ -0,0 +1,308 @@
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#define EI_DATA 5
#define EI_NIDENT 16
#define STT_NOTYPE 0
#define STT_OBJECT 1
#define STT_FUNC 2
#define STT_SECTION 3
#define STT_FILE 4
#define STT_COMMON 5
#define STT_TLS 6
#define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf)
typedef uint32_t Elf32_Addr;
typedef uint32_t Elf32_Off;
typedef struct {
unsigned char e_ident[EI_NIDENT];
uint16_t e_type;
uint16_t e_machine;
uint32_t e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
uint32_t e_flags;
uint16_t e_ehsize;
uint16_t e_phentsize;
uint16_t e_phnum;
uint16_t e_shentsize;
uint16_t e_shnum;
uint16_t e_shstrndx;
} Elf32_Ehdr;
typedef struct {
uint32_t sh_name;
uint32_t sh_type;
uint32_t sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
uint32_t sh_size;
uint32_t sh_link;
uint32_t sh_info;
uint32_t sh_addralign;
uint32_t sh_entsize;
} Elf32_Shdr;
typedef struct {
uint32_t st_name;
Elf32_Addr st_value;
uint32_t st_size;
unsigned char st_info;
unsigned char st_other;
uint16_t st_shndx;
} Elf32_Sym;
typedef struct {
uint16_t magic; //To verify validity of the table
uint16_t vstamp; //Version stamp
uint32_t ilineMax; //Number of line number entries
uint32_t cbLine; //Number of bytes for line number entries
uint32_t cbLineOffset; //Index to start of line numbers
uint32_t idnMax; //Max index into dense numbers
uint32_t cbDnOffset; //Index to start dense numbers
uint32_t ipdMax; //Number of procedures
uint32_t cbPdOffset; //Index to procedure descriptors
uint32_t isymMax; //Number of local symbols
uint32_t cbSymOffset; //Index to start of local symbols
uint32_t ioptMax; //Maximum index into optimization entries
uint32_t cbOptOffset; //Index to start of optimization entries
uint32_t iauxMax; //Number of auxiliary symbols
uint32_t cbAuxOffset; //Index to the start of auxiliary symbols
uint32_t issMax; //Max index into local strings
uint32_t cbSsOffset; //Index to start of local strings
uint32_t issExtMax; //Max index into external strings
uint32_t cbSsExtOffset; //Index to the start of external strings
uint32_t ifdMax; //Number of file descriptors
uint32_t cbFdOffset; //Index to file descriptor
uint32_t crfd; //Number of relative file descriptors
uint32_t cbRfdOffset; //Index to relative file descriptors
uint32_t iextMax; //Maximum index into external symbols
uint32_t cbExtOffset; //Index to the start of external symbols.
} SymbolicHeader;
typedef struct {
uint32_t adr; // Memory address of start of file
uint32_t rss; // Source file name
uint32_t issBase; // Start of local strings
uint32_t cbSs; // Number of bytes in local strings
uint32_t isymBase; // Start of local symbol entries
uint32_t csym; // Count of local symbol entries
uint32_t ilineBase; // Start of line number entries
uint32_t cline; // Count of line number entries
uint32_t ioptBase; // Start of optimization symbol entries
uint32_t copt; // Count of optimization symbol entries
uint16_t ipdFirst; // Start of procedure descriptor table
uint16_t cpd; // Count of procedures descriptors
uint32_t iauxBase; // Start of auxiliary symbol entries
uint32_t caux; // Count of auxiliary symbol entries
uint32_t rfdBase; // Index into relative file descriptors
uint32_t crfd; // Relative file descriptor count
uint32_t flags;
uint32_t cbLineOffset; // Byte offset from header or file ln's
uint32_t cbLine;
} FileDescriptorTable;
typedef struct {
uint32_t iss;
uint32_t value;
uint32_t st_sc_index;
} LocalSymbolsEntry;
typedef enum {
stNil,
stGlobal,
stStatic,
stParam,
stLocal,
stLabel,
stProc,
stBlock,
stEnd,
stMember,
stTypedef,
stFile,
stStaticProc,
stConstant
} StConstants;
uint32_t u32be(uint32_t val) {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
return __builtin_bswap32(val);
#else
return val;
#endif
}
uint16_t u16be(uint16_t val) {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
return __builtin_bswap16(val);
#else
return val;
#endif
}
static bool elf_get_section_range(uint8_t *file, const char *searched_name, uint32_t *address, uint32_t *offset, uint32_t *size, uint32_t *section_index) {
Elf32_Ehdr *ehdr = (Elf32_Ehdr *)file;
for (int i = 0; i < u16be(ehdr->e_shnum); i++) {
if (memcmp("\x7f" "ELF", ehdr->e_ident, 4) != 0) {
fprintf(stderr, "Missing ELF magic\n");
exit(1);
}
if (ehdr->e_ident[EI_DATA] != 2) {
fprintf(stderr, "ELF file is not big-endian\n");
exit(1);
}
Elf32_Shdr *shdr = (Elf32_Shdr *)(file + u32be(ehdr->e_shoff) + i * u16be(ehdr->e_shentsize));
if (u16be(ehdr->e_shstrndx) >= u16be(ehdr->e_shnum)) {
fprintf(stderr, "Invalid ELF file\n");
exit(1);
}
Elf32_Shdr *str_shdr = (Elf32_Shdr *)(file + u32be(ehdr->e_shoff) + u16be(ehdr->e_shstrndx) * u16be(ehdr->e_shentsize));
char *name = (char *)(file + u32be(str_shdr->sh_offset) + u32be(shdr->sh_name));
if (memcmp(name, searched_name, strlen(searched_name)) == 0) {
*address = u32be(shdr->sh_addr);
*offset = u32be(shdr->sh_offset);
*size = u32be(shdr->sh_size);
*section_index = i;
return true;
}
}
return false;
}
int main(int argc, char *argv[]) {
if (argc < 3) {
fprintf(stderr, "Usage: %s INFILE OUTFILE\n", argv[0]);
return 1;
}
FILE *in = fopen(argv[1], "rb");
if (in == NULL) {
perror("fopen couldn't open input file");
exit(1);
}
fseek(in, 0, SEEK_END);
size_t file_size = ftell(in);
fseek(in, 0, SEEK_SET);
uint8_t *file = malloc(file_size);
if (fread(file, 1, file_size, in) != file_size) {
fclose(in);
fprintf(stderr, "Failed to read file: %s\n", argv[1]);
exit(1);
}
fclose(in);
uint32_t data_address, data_offset, data_size, data_index;
if (!elf_get_section_range(file, ".data", &data_address, &data_offset, &data_size, &data_index)) {
fprintf(stderr, "section .data not found\n");
exit(1);
}
uint32_t rodata_address, rodata_offset, rodata_size, rodata_index;
if (elf_get_section_range(file, ".rodata", &rodata_address, &rodata_offset, &rodata_size, &rodata_index)) {
fprintf(stderr, ".rodata section found, please put everything in .data instead (non-const variables)\n");
exit(1);
}
uint32_t symtab_address, symtab_offset, symtab_size, symtab_index;
if (!elf_get_section_range(file, ".symtab", &symtab_address, &symtab_offset, &symtab_size, &symtab_index)) {
fprintf(stderr, "section .symtab not found\n");
exit(1);
}
uint32_t strtab_address, strtab_offset, strtab_size, strtab_index;
if (!elf_get_section_range(file, ".strtab", &strtab_address, &strtab_offset, &strtab_size, &strtab_index)) {
fprintf(stderr, "section .strtab not found\n");
exit(1);
}
// IDO might pad the section to the nearest 16 byte boundary,
// but the mio0 data should not include that. Therefore find
// the "real" end by finding where the last symbol ends.
uint32_t last_symbol_end = 0;
for (uint32_t i = 0; i < symtab_size / sizeof(Elf32_Sym); i++) {
Elf32_Sym *symbol = (Elf32_Sym *)(file + symtab_offset + i * sizeof(Elf32_Sym));
#if DEBUG
const char *name = "(null)";
if (symbol->st_name != 0U) {
name = (const char*)file + strtab_offset + u32be(symbol->st_name);
}
printf("%08x\t%08x\t%02x\t%02x\t%02x\t%s\n", u32be(symbol->st_value), u32be(symbol->st_size), symbol->st_info, symbol->st_other, u16be(symbol->st_shndx), name);
#endif
if (ELF_ST_TYPE(symbol->st_info) == STT_OBJECT && u16be(symbol->st_shndx) == data_index) {
uint32_t symbol_end = u32be(symbol->st_value) + u32be(symbol->st_size);
if (symbol_end > last_symbol_end) {
last_symbol_end = symbol_end;
}
}
}
uint32_t mdebug_address, mdebug_offset, mdebug_size, mdebug_index;
if (elf_get_section_range(file, ".mdebug", &mdebug_address, &mdebug_offset, &mdebug_size, &mdebug_index)) {
SymbolicHeader *symbolic_header = (SymbolicHeader *)(file + mdebug_offset);
for (uint32_t i = 0; i < u32be(symbolic_header->ifdMax); i++) {
FileDescriptorTable *fdt = (FileDescriptorTable *)(file + u32be(symbolic_header->cbFdOffset) + i * sizeof(FileDescriptorTable));
for (uint32_t j = 0; j < u32be(fdt->csym); j++) {
LocalSymbolsEntry lse;
memcpy(&lse, file + u32be(symbolic_header->cbSymOffset) + (u32be(fdt->isymBase) + j) * sizeof(LocalSymbolsEntry), sizeof(LocalSymbolsEntry));
uint32_t value = u32be(lse.value);
uint32_t st_sc_index = u32be(lse.st_sc_index);
uint32_t st = (st_sc_index >> 26);
#ifdef DEBUG
uint32_t sc = (st_sc_index >> 21) & 0x1f;
uint32_t index = st_sc_index & 0xfffff;
uint32_t iss = u32be(lse.iss);
const char *symbol_name = file + u32be(symbolic_header->cbSsOffset) + iss;
printf("%s %08x\n", symbol_name, value);
#endif
if (st == stStatic || st == stGlobal) {
// Right now just assume length 8 since it's quite much work to extract the real size
uint32_t symbol_end = value + 8;
if (symbol_end > last_symbol_end) {
last_symbol_end = symbol_end;
}
}
}
}
}
#ifdef DEBUG
printf("Last symbol end: %08x\n", last_symbol_end);
#endif
size_t new_size = last_symbol_end - data_address;
if (new_size + 16 <= data_size) {
// There seems to be more than 16 bytes padding or non-identified data, so abort and take the original size
new_size = data_size;
} else {
// Make sure we don't cut off non-zero bytes
for (size_t i = new_size; i < data_size; i++) {
if (file[data_offset + i] != 0) {
// Must be some symbol missing, so abort and take the original size
new_size = data_size;
break;
}
}
}
FILE *out = fopen(argv[2], "wb");
fwrite(file + data_offset, 1, new_size, out);
fclose(out);
free(file);
return 0;
}

16
tools/ido5.3_recomp/.gitignore vendored Normal file
View File

@ -0,0 +1,16 @@
/recomp
/recomp-conservative
/cc*
/cfe*
/uopt*
/ugen*
/as1*
/acpp*
/copt*
/ujoin*
/uld*
/umerge*
/usplit*
/err.english.cc

View File

@ -0,0 +1,37 @@
IRIX_ROOT := ../ido5.3_compiler
cc: OPT_CFLAGS := -O2
cfe: OPT_CFLAGS := -O2
uopt: OPT_CFLAGS := -O2
ugen: OPT_CFLAGS := -O2
as1: OPT_CFLAGS := -O2
acpp: OPT_CFLAGS := -O2
RECOMP := recomp
ugen_c.c: RECOMP_FLAGS := --conservative
all: cc cfe uopt ugen as1 acpp copt ujoin uld umerge usplit err.english.cc
clean:
$(RM) cc* cfe* uopt* ugen* as1* acpp* copt* ujoin* uld* umerge* usplit* err.english.cc $(RECOMP) libc_impl.o
$(RECOMP): recomp.cpp
$(CXX) $^ -o $@ -std=c++11 -O2 -Wno-switch `pkg-config --cflags --libs capstone`
libc_impl.o: libc_impl.c libc_impl.h
$(CC) $< -c -fno-strict-aliasing -O2 -DIDO53
err.english.cc: $(IRIX_ROOT)/usr/lib/err.english.cc
cp $^ $@
cc_c.c: $(IRIX_ROOT)/usr/bin/cc $(RECOMP)
./$(RECOMP) $(RECOMP_FLAGS) $< > $@
%_c.c: $(IRIX_ROOT)/usr/lib/% $(RECOMP)
./$(RECOMP) $(RECOMP_FLAGS) $< > $@
%: %_c.c libc_impl.o
$(CC) libc_impl.o $< -o $@ $(OPT_CFLAGS) -fno-strict-aliasing -lm -no-pie
.PHONY: all clean

BIN
tools/ido5.3_recomp/acpp Executable file

Binary file not shown.

BIN
tools/ido5.3_recomp/as1 Executable file

Binary file not shown.

BIN
tools/ido5.3_recomp/cc Executable file

Binary file not shown.

70220
tools/ido5.3_recomp/cc_c.c Normal file

File diff suppressed because it is too large Load Diff

BIN
tools/ido5.3_recomp/cfe Executable file

Binary file not shown.

240816
tools/ido5.3_recomp/cfe_c.c Normal file

File diff suppressed because it is too large Load Diff

BIN
tools/ido5.3_recomp/copt Executable file

Binary file not shown.

99
tools/ido5.3_recomp/elf.h Normal file
View File

@ -0,0 +1,99 @@
#ifndef ELF_H
#define ELF_H
#include <stdint.h>
#define EI_DATA 5
#define EI_NIDENT 16
#define SHT_SYMTAB 2
#define SHT_DYNAMIC 6
#define SHT_REL 9
#define SHT_DYNSYM 11
#define SHT_MIPS_REGINFO 0x70000006
#define STN_UNDEF 0
#define STT_OBJECT 1
#define STT_FUNC 2
#define DT_PLTGOT 3
#define DT_MIPS_LOCAL_GOTNO 0x7000000a
#define DT_MIPS_SYMTABNO 0x70000011
#define DT_MIPS_GOTSYM 0x70000013
#define ELF32_R_SYM(info) ((info) >> 8)
#define ELF32_R_TYPE(info) ((info) & 0xff)
#define ELF32_ST_TYPE(info) ((info) & 0xf)
#define R_MIPS_26 4
#define R_MIPS_HI16 5
#define R_MIPS_LO16 6
#define SHN_UNDEF 0
#define SHN_COMMON 0xfff2
#define SHN_MIPS_ACOMMON 0xff00
#define SHN_MIPS_TEXT 0xff01
#define SHN_MIPS_DATA 0xff02
typedef uint32_t Elf32_Addr;
typedef uint32_t Elf32_Off;
typedef struct {
uint8_t e_ident[EI_NIDENT];
uint16_t e_type;
uint16_t e_machine;
uint32_t e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
uint32_t e_flags;
uint16_t e_ehsize;
uint16_t e_phentsize;
uint16_t e_phnum;
uint16_t e_shentsize;
uint16_t e_shnum;
uint16_t e_shstrndx;
} Elf32_Ehdr;
typedef struct {
uint32_t sh_name;
uint32_t sh_type;
uint32_t sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
uint32_t sh_size;
uint32_t sh_link;
uint32_t sh_info;
uint32_t sh_addralign;
uint32_t sh_entsize;
} Elf32_Shdr;
typedef struct {
uint32_t st_name;
Elf32_Addr st_value;
uint32_t st_size;
uint8_t st_info;
uint8_t st_other;
uint16_t st_shndx;
} Elf32_Sym;
typedef struct {
Elf32_Addr r_offset;
uint32_t r_info;
} Elf32_Rel;
typedef struct
{
uint32_t ri_gprmask; /* General registers used. */
uint32_t ri_cprmask[4]; /* Coprocessor registers used. */
int32_t ri_gp_value; /* $gp register value. */
} Elf32_RegInfo;
typedef struct
{
int32_t d_tag; /* Dynamic entry type */
union {
uint32_t d_val; /* Integer value */
Elf32_Addr d_ptr; /* Address value */
} d_un;
} Elf32_Dyn;
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,30 @@
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include "libc_impl.h"
#include "helpers.h"
#define RM_RN 0
#define RM_RZ 1
#define RM_RP 2
#define RM_RM 3
union FloatReg {
float f[2];
uint32_t w[2];
double d;
};
#define cvt_w_d(f) \
((fcsr & RM_RZ) ? ((isnan(f) || f <= -2147483649.0 || f >= 2147483648.0) ? (fcsr |= 0x40, 2147483647) : (int)f) : (assert(0), 0))
#define cvt_w_s(f) cvt_w_d((double)f)
static union FloatReg f0 = {{0, 0}}, f2 = {{0, 0}}, f4 = {{0, 0}}, f6 = {{0, 0}}, f8 = {{0, 0}},
f10 = {{0, 0}}, f12 = {{0, 0}}, f14 = {{0, 0}}, f16 = {{0, 0}}, f18 = {{0, 0}}, f20 = {{0, 0}},
f22 = {{0, 0}}, f24 = {{0, 0}}, f26 = {{0, 0}}, f28 = {{0, 0}}, f30 = {{0, 0}};
static uint32_t fcsr = 1;

View File

@ -0,0 +1,13 @@
#ifndef HELPERS_H
#define HELPERS_H
#include <stdint.h>
#define MEM_U32(a) (*(uint32_t *)(mem + a))
#define MEM_S32(a) (*(int32_t *)(mem + a))
#define MEM_U16(a) (*(uint16_t *)(mem + ((a) ^ 2)))
#define MEM_S16(a) (*(int16_t *)(mem + ((a) ^ 2)))
#define MEM_U8(a) (*(uint8_t *)(mem + ((a) ^ 3)))
#define MEM_S8(a) (*(int8_t *)(mem + ((a) ^ 3)))
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,163 @@
#include <stdint.h>
void mmap_initial_data_range(uint8_t *mem, uint32_t start, uint32_t end);
void setup_libc_data(uint8_t *mem);
uint32_t wrapper_sbrk(uint8_t *mem, int increment);
uint32_t wrapper_malloc(uint8_t *mem, uint32_t size);
uint32_t wrapper_calloc(uint8_t *mem, uint32_t num, uint32_t size);
uint32_t wrapper_realloc(uint8_t *mem, uint32_t data_addr, uint32_t size);
int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp);
int wrapper_printf(uint8_t *mem, uint32_t format_addr, uint32_t sp);
int wrapper_sprintf(uint8_t *mem, uint32_t str_addr, uint32_t format_addr, uint32_t sp);
int wrapper_fprintf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp);
int wrapper__doprnt(uint8_t *mem, uint32_t format_addr, uint32_t params_addr, uint32_t fp_addr);
void wrapper_free(uint8_t *mem, uint32_t data_addr);
uint32_t wrapper_strlen(uint8_t *mem, uint32_t str_addr);
int wrapper_open(uint8_t *mem, uint32_t pathname_addr, int flags, int mode);
int wrapper_creat(uint8_t *mem, uint32_t pathname_addr, int mode);
int wrapper_access(uint8_t *mem, uint32_t pathname_addr, int mode);
int wrapper_rename(uint8_t *mem, uint32_t oldpath_addr, uint32_t newpath_addr);
int wrapper_utime(uint8_t *mem, uint32_t filename_addr, uint32_t times_addr);
int wrapper_flock(uint8_t *mem, int fd, int operation);
int wrapper_chmod(uint8_t *mem, uint32_t path_addr, uint32_t mode);
int wrapper_umask(int mode);
uint32_t wrapper_ecvt(uint8_t *mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr);
uint32_t wrapper_fcvt(uint8_t *mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr);
double wrapper_sqrt(double v);
float wrapper_sqrtf(float v);
int wrapper_atoi(uint8_t *mem, uint32_t nptr_addr);
int wrapper_atol(uint8_t *mem, uint32_t nptr_addr);
double wrapper_atof(uint8_t *mem, uint32_t nptr_addr);
int wrapper_strtol(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base);
uint32_t wrapper_strtoul(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base);
double wrapper_strtod(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr);
uint32_t wrapper_strchr(uint8_t *mem, uint32_t str_addr, int c);
uint32_t wrapper_strrchr(uint8_t *mem, uint32_t str_addr, int c);
uint32_t wrapper_strcspn(uint8_t *mem, uint32_t str_addr, uint32_t invalid_addr);
uint32_t wrapper_strpbrk(uint8_t *mem, uint32_t str_addr, uint32_t accept_addr);
int wrapper_fstat(uint8_t *mem, int fildes, uint32_t buf_addr);
int wrapper_stat(uint8_t *mem, uint32_t pathname_addr, uint32_t buf_addr);
int wrapper_ftruncate(uint8_t *mem, int fd, int length);
void wrapper_bcopy(uint8_t *mem, uint32_t src_addr, uint32_t dst_addr, uint32_t len);
uint32_t wrapper_memcpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, uint32_t len);
uint32_t wrapper_memccpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, int c, uint32_t len);
int wrapper_read(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes);
int wrapper_write(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes);
uint32_t wrapper_fopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr);
uint32_t wrapper_freopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr, uint32_t fp_addr);
int wrapper_fclose(uint8_t *mem, uint32_t fp_addr);
int wrapper_fflush(uint8_t *mem, uint32_t fp_addr);
int wrapper_ftell(uint8_t *mem, uint32_t fp_addr);
void wrapper_rewind(uint8_t *mem, uint32_t fp_addr);
int wrapper_fseek(uint8_t *mem, uint32_t fp_addr, int offset, int origin);
int wrapper_lseek(uint8_t *mem, int fd, int offset, int whence);
int wrapper_dup(uint8_t *mem, int fd);
int wrapper_dup2(uint8_t *mem, int oldfd, int newfd);
int wrapper_pipe(uint8_t *mem, uint32_t pipefd_addr);
void wrapper_perror(uint8_t *mem, uint32_t str_addr);
int wrapper_fdopen(uint8_t *mem, int fd, uint32_t mode_addr);
uint32_t wrapper_memset(uint8_t *mem, uint32_t dest_addr, int byte, uint32_t n);
int wrapper_bcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n);
int wrapper_memcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n);
int wrapper_getpid(void);
int wrapper_getpgrp(uint8_t *mem);
int wrapper_remove(uint8_t *mem, uint32_t path_addr);
int wrapper_unlink(uint8_t *mem, uint32_t path_addr);
int wrapper_close(uint8_t *mem, int fd);
int wrapper_strcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr);
int wrapper_strncmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n);
uint32_t wrapper_strcpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr);
uint32_t wrapper_strncpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n);
uint32_t wrapper_strcat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr);
uint32_t wrapper_strncat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n);
uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_addr);
uint32_t wrapper_strstr(uint8_t *mem, uint32_t str1_addr, uint32_t str2_addr);
uint32_t wrapper_strdup(uint8_t *mem, uint32_t str_addr);
int wrapper_toupper(int c);
int wrapper_tolower(int c);
int wrapper_gethostname(uint8_t *mem, uint32_t name_addr, uint32_t len);
int wrapper_isatty(uint8_t *mem, int fd);
int wrapper_times(uint8_t *mem, uint32_t buffer_addr);
uint32_t wrapper_strftime(uint8_t *mem, uint32_t ptr_addr, uint32_t maxsize, uint32_t format_addr, uint32_t timeptr_addr);
int wrapper_clock(void);
uint32_t wrapper_ctime(uint8_t *mem, uint32_t timep_addr);
uint32_t wrapper_localtime(uint8_t *mem, uint32_t timep_addr);
int wrapper_setvbuf(uint8_t *mem, uint32_t fp_addr, uint32_t buf_addr, int mode, uint32_t size);
int wrapper___semgetc(uint8_t *mem, uint32_t fp_addr);
int wrapper___semputc(uint8_t *mem, int c, uint32_t fp_addr);
int wrapper_fgetc(uint8_t *mem, uint32_t fp_addr);
int wrapper_fgets(uint8_t *mem, uint32_t str_addr, int count, uint32_t fp_addr);
int wrapper___filbuf(uint8_t *mem, uint32_t fp_addr);
int wrapper___flsbuf(uint8_t *mem, int ch, uint32_t fp_addr);
int wrapper_ungetc(uint8_t *mem, int ch, uint32_t fp_addr);
uint32_t wrapper_gets(uint8_t *mem, uint32_t str_addr);
uint32_t wrapper_fread(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr);
uint32_t wrapper_fwrite(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr);
int wrapper_fputs(uint8_t *mem, uint32_t str_addr, uint32_t fp_addr);
int wrapper_puts(uint8_t *mem, uint32_t str_addr);
uint32_t wrapper_getcwd(uint8_t *mem, uint32_t buf_addr, uint32_t size);
int wrapper_time(uint8_t *mem, uint32_t tloc_addr);
void wrapper_bzero(uint8_t *mem, uint32_t str_addr, uint32_t n);
int wrapper_fp_class_d(double d);
double wrapper_ldexp(double d, int i);
int64_t wrapper___ll_mul(int64_t a0, int64_t a1);
int64_t wrapper___ll_div(int64_t a0, int64_t a1);
int64_t wrapper___ll_rem(uint64_t a0, int64_t a1);
int64_t wrapper___ll_lshift(int64_t a0, uint64_t shift);
int64_t wrapper___ll_rshift(int64_t a0, uint64_t shift);
uint64_t wrapper___ull_div(uint64_t a0, uint64_t a1);
uint64_t wrapper___ull_rem(uint64_t a0, uint64_t a1);
uint64_t wrapper___ull_rshift(uint64_t a0, uint64_t shift);
uint64_t wrapper___d_to_ull(double d);
int64_t wrapper___d_to_ll(double d);
uint64_t wrapper___f_to_ull(float f);
int64_t wrapper___f_to_ll(float f);
float wrapper___ull_to_f(uint64_t v);
float wrapper___ll_to_f(int64_t v);
double wrapper___ull_to_d(uint64_t v);
double wrapper___ll_to_d(int64_t v);
void wrapper_abort(uint8_t *mem);
void wrapper_exit(uint8_t *mem, int status);
void wrapper__exit(uint8_t *mem, int status);
void wrapper__cleanup(uint8_t *mem);
uint32_t wrapper__rld_new_interface(uint8_t *mem, uint32_t operation, uint32_t sp);
void wrapper__exithandle(uint8_t *mem);
int wrapper__prctl(uint8_t *mem, int operation, uint32_t sp);
double wrapper__atod(uint8_t *mem, uint32_t buffer_addr, int ndigits, int dexp);
int wrapper_pathconf(uint8_t *mem, uint32_t path_addr, int name);
uint32_t wrapper_getenv(uint8_t *mem, uint32_t name_addr);
uint32_t wrapper_gettxt(uint8_t *mem, uint32_t msgid_addr, uint32_t default_str_addr);
uint32_t wrapper_setlocale(uint8_t *mem, int category, uint32_t locale_addr);
uint32_t wrapper_mmap(uint8_t *mem, uint32_t addr, uint32_t length, int prot, int flags, int fd, int offset);
int wrapper_munmap(uint8_t *mem, uint32_t addr, uint32_t length);
int wrapper_mprotect(uint8_t *mem, uint32_t addr, uint32_t length, int prot);
int wrapper_sysconf(uint8_t *mem, int name);
int wrapper_getpagesize(uint8_t *mem);
int wrapper_strerror(uint8_t *mem, int errnum);
int wrapper_ioctl(uint8_t *mem, int fd, uint32_t request, uint32_t sp);
int wrapper_fcntl(uint8_t *mem, int fd, int cmd, uint32_t sp);
uint32_t wrapper_signal(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t handler_addr, uint32_t sp);
uint32_t wrapper_sigset(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t disp_addr, uint32_t sp);
int wrapper_get_fpc_csr(uint8_t *mem);
int wrapper_set_fpc_csr(uint8_t *mem, int csr);
int wrapper_setjmp(uint8_t *mem, uint32_t addr);
void wrapper_longjmp(uint8_t *mem, uint32_t addr, int status);
uint32_t wrapper_tempnam(uint8_t *mem, uint32_t dir_addr, uint32_t pfx_addr);
uint32_t wrapper_tmpnam(uint8_t *mem, uint32_t str_addr);
uint32_t wrapper_mktemp(uint8_t *mem, uint32_t template_addr);
int wrapper_mkstemp(uint8_t *mem, uint32_t name_addr);
uint32_t wrapper_tmpfile(uint8_t *mem);
int wrapper_wait(uint8_t *mem, uint32_t wstatus_addr);
int wrapper_kill(uint8_t *mem, int pid, int sig);
int wrapper_execlp(uint8_t *mem, uint32_t file_addr, uint32_t sp);
int wrapper_execv(uint8_t *mem, uint32_t pathname_addr, uint32_t argv_addr);
int wrapper_execvp(uint8_t *mem, uint32_t file_addr, uint32_t argv_addr);
int wrapper_fork(uint8_t *mem);
int wrapper_system(uint8_t *mem, uint32_t command_addr);
uint32_t wrapper_tsearch(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr);
uint32_t wrapper_tfind(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr);
uint32_t wrapper_qsort(uint8_t *mem, uint32_t base_addr, uint32_t num, uint32_t size, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t compare_addr, uint32_t sp);
uint32_t wrapper_regcmp(uint8_t *mem, uint32_t string1_addr, uint32_t sp);
uint32_t wrapper_regex(uint8_t *mem, uint32_t re_addr, uint32_t subject_addr, uint32_t sp);
void wrapper___assert(uint8_t *mem, uint32_t assertion_addr, uint32_t file_addr, int line);

Binary file not shown.

BIN
tools/ido5.3_recomp/recomp Executable file

Binary file not shown.

File diff suppressed because it is too large Load Diff

BIN
tools/ido5.3_recomp/ugen Executable file

Binary file not shown.

133401
tools/ido5.3_recomp/ugen_c.c Normal file

File diff suppressed because it is too large Load Diff

BIN
tools/ido5.3_recomp/ujoin Executable file

Binary file not shown.

BIN
tools/ido5.3_recomp/uld Executable file

Binary file not shown.

BIN
tools/ido5.3_recomp/umerge Executable file

Binary file not shown.

BIN
tools/ido5.3_recomp/uopt Executable file

Binary file not shown.

210354
tools/ido5.3_recomp/uopt_c.c Normal file

File diff suppressed because it is too large Load Diff

BIN
tools/ido5.3_recomp/usplit Executable file

Binary file not shown.

View File

@ -669,6 +669,48 @@ D_8028461C = 0x8028461C;
D_802874A0 = 0x802874A0; /* Very end of data_credits_128480.s unused? */
D_802874BE = 0x802874BE; /* unused? */
d_course_mario_raceway_vertex = 0x0F000000;
d_course_moo_moo_farm_vertex = 0x0F000000;
d_course_luigi_raceway_vertex = 0x0F000000;
d_course_sherbet_land_vertex = 0x0F000000;
d_course_kalimari_desert_vertex = 0x0F000000;
d_course_koopa_troopa_beach_vertex = 0x0F000000;
d_course_choco_mountain_vertex = 0x0F000000;
d_course_frappe_snowland_vertex = 0x0F000000;
d_course_toads_turnpike_vertex = 0x0F000000;
d_course_banshee_boardwalk_vertex = 0x0F000000;
d_course_dks_jungle_parkway_vertex = 0x0F000000;
d_course_rainbow_road_vertex = 0x0F000000;
d_course_yoshi_valley_vertex = 0x0F000000;
d_course_bowsers_castle_vertex = 0x0F000000;
d_course_royal_raceway_vertex = 0x0F000000;
d_course_wario_stadium_vertex = 0x0F000000;
d_course_big_donut_vertex = 0x0F000000;
d_course_block_fort_vertex = 0x0F000000;
d_course_double_deck_vertex = 0x0F000000;
d_course_skyscraper_vertex = 0x0F000000;
d_course_luigi_raceway_packed = 0x0F009800;
d_course_mario_raceway_packed = 0x0F0096f4;
d_course_choco_mountain_packed = 0x0F00A0B4;
d_course_bowsers_castle_packed = 0x0f00e368;
d_course_banshee_boardwalk_packed = 0x0f0068e8;
d_course_yoshi_valley_packed = 0x0f007d90;
d_course_frappe_snowland_packed = 0x0f009d24;
d_course_royal_raceway_packed = 0x0f00ec60;
d_course_toads_turnpike_packed = 0x0f00a5d0;
d_course_kalimari_desert_packed = 0x0f00b394;
d_course_sherbet_land_packed = 0x0f0049f8;
d_course_rainbow_road_packed = 0x0f005a5c;
d_course_wario_stadium_packed = 0x0f00a9cc;
d_course_block_fort_packed = 0x0f0018d8;
d_course_skyscraper_packed = 0x0f001678;
d_course_double_deck_packed = 0x0f000cd4;
d_course_dks_jungle_parkway_packed = 0x0f00a45c;
d_course_big_donut_packed = 0x0f001b84;
d_course_koopa_troopa_beach_packed = 0x0f00fd78;
d_course_moo_moo_farm_packed = 0x0f00daec;
D_802874C4 = 0x802874C4;
D_802874C6 = 0x802874C6;