diff --git a/.clang-tidy b/.clang-tidy
index caf62ab7f8..a56f7b17c9 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -1,6 +1,6 @@
Checks: '-*,readability-braces-around-statements,readability-inconsistent-declaration-parameter-name'
WarningsAsErrors: ''
-HeaderFilterRegex: '(src|include)\/.*\.h$'
+HeaderFilterRegex: '(src|include)\/.*(\.h|\.inc\.c)$'
FormatStyle: 'file'
CheckOptions:
# Require argument names to match exactly (instead of allowing a name to be a prefix/suffix of another)
diff --git a/Makefile b/Makefile
index 7195365d3c..ebba84f850 100644
--- a/Makefile
+++ b/Makefile
@@ -41,6 +41,8 @@ VERSION ?= gc-eu-mq-dbg
N_THREADS ?= $(shell nproc)
# Check code syntax with host compiler.
RUN_CC_CHECK ?= 1
+# If DEBUG_OBJECTS is 1, produce additional debugging files such as objdump output or raw binaries for assets
+DEBUG_OBJECTS ?= 0
# Set prefix to mips binutils binaries (mips-linux-gnu-ld => 'mips-linux-gnu-') - Change at your own risk!
# In nearly all cases, not having 'mips-linux-gnu-*' binaries on the PATH indicates missing dependencies.
MIPS_BINUTILS_PREFIX ?= mips-linux-gnu-
@@ -55,10 +57,6 @@ N64_EMULATOR ?=
# This may also be used to disable debug features on debug ROMs by setting DEBUG_FEATURES to 0
# DEBUG_FEATURES ?= 1
-CFLAGS ?=
-CPPFLAGS ?=
-CPP_DEFINES ?=
-
# Version-specific settings
REGIONAL_CHECKSUM := 0
ifeq ($(VERSION),ntsc-1.0)
@@ -66,6 +64,7 @@ ifeq ($(VERSION),ntsc-1.0)
REGION ?= JP
PLATFORM := N64
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd44
BUILD_DATE := 98-10-21
BUILD_TIME := 04:56:31
REVISION := 0
@@ -74,6 +73,7 @@ else ifeq ($(VERSION),ntsc-1.1)
REGION ?= JP
PLATFORM := N64
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd44
BUILD_DATE := 98-10-26
BUILD_TIME := 10:58:45
REVISION := 1
@@ -81,6 +81,7 @@ else ifeq ($(VERSION),pal-1.0)
REGION ?= EU
PLATFORM := N64
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd44
BUILD_DATE := 98-11-10
BUILD_TIME := 14:34:22
REVISION := 0
@@ -89,6 +90,7 @@ else ifeq ($(VERSION),ntsc-1.2)
REGION ?= JP
PLATFORM := N64
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd44
BUILD_DATE := 98-11-12
BUILD_TIME := 18:17:03
REVISION := 2
@@ -96,6 +98,7 @@ else ifeq ($(VERSION),pal-1.1)
REGION ?= EU
PLATFORM := N64
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd44
BUILD_DATE := 98-11-18
BUILD_TIME := 17:36:49
REVISION := 1
@@ -103,6 +106,7 @@ else ifeq ($(VERSION),gc-jp)
REGION ?= JP
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
BUILD_DATE := 02-10-29
BUILD_TIME := 23:49:53
REVISION := 15
@@ -110,6 +114,7 @@ else ifeq ($(VERSION),gc-jp-mq)
REGION ?= JP
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
BUILD_DATE := 02-10-30
BUILD_TIME := 00:15:15
REVISION := 15
@@ -117,6 +122,7 @@ else ifeq ($(VERSION),gc-us)
REGION ?= US
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
BUILD_DATE := 02-12-19
BUILD_TIME := 13:28:09
REVISION := 15
@@ -124,6 +130,7 @@ else ifeq ($(VERSION),gc-us-mq)
REGION ?= US
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
BUILD_DATE := 02-12-19
BUILD_TIME := 14:05:42
REVISION := 15
@@ -131,6 +138,7 @@ else ifeq ($(VERSION),gc-eu-mq-dbg)
REGION ?= EU
PLATFORM := GC
DEBUG_FEATURES ?= 1
+ BUILD_CREATOR := zelda@srd022j
BUILD_DATE := 03-02-21
BUILD_TIME := 00:16:31
REVISION := 15
@@ -138,6 +146,7 @@ else ifeq ($(VERSION),gc-eu)
REGION ?= EU
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
BUILD_DATE := 03-02-21
BUILD_TIME := 20:12:23
REVISION := 15
@@ -145,6 +154,7 @@ else ifeq ($(VERSION),gc-eu-mq)
REGION ?= EU
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
BUILD_DATE := 03-02-21
BUILD_TIME := 20:37:19
REVISION := 15
@@ -152,23 +162,23 @@ else ifeq ($(VERSION),gc-jp-ce)
REGION ?= JP
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
BUILD_DATE := 03-10-08
BUILD_TIME := 21:53:00
REVISION := 15
+else ifeq ($(VERSION),ique-cn)
+ COMPARE := 0
+ REGION ?= US
+ PLATFORM := IQUE
+ DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := build@toad.routefree.com
+ BUILD_DATE := 03-10-22
+ BUILD_TIME := 16:23:19
+ REVISION := 0
else
$(error Unsupported version $(VERSION))
endif
-ifeq ($(PLATFORM),N64)
- BUILD_CREATOR := zelda@srd44
- LIBULTRA_VERSION := I
- LIBULTRA_PATCH := 1
-else
- BUILD_CREATOR := zelda@srd022j
- LIBULTRA_VERSION := L
- LIBULTRA_PATCH := 0
-endif
-
# ORIG_COMPILER cannot be combined with a non-IDO compiler. Check for this case and error out if found.
ifneq ($(COMPILER),ido)
ifeq ($(ORIG_COMPILER),1)
@@ -194,22 +204,31 @@ EXTRACTED_DIR := extracted/$(VERSION)
VENV := .venv
MAKE = make
-CPPFLAGS += -P -xc -fno-dollars-in-identifiers
+
+ifeq ($(PLATFORM),N64)
+ CPP_DEFINES += -DPLATFORM_N64=1 -DPLATFORM_GC=0 -DPLATFORM_IQUE=0
+ LIBULTRA_VERSION := I
+ LIBULTRA_PATCH := 1
+else ifeq ($(PLATFORM),GC)
+ CPP_DEFINES += -DPLATFORM_N64=0 -DPLATFORM_GC=1 -DPLATFORM_IQUE=0
+ LIBULTRA_VERSION := L
+ LIBULTRA_PATCH := 0
+else ifeq ($(PLATFORM),IQUE)
+ CPP_DEFINES += -DPLATFORM_N64=0 -DPLATFORM_GC=0 -DPLATFORM_IQUE=1
+ LIBULTRA_VERSION := L
+ LIBULTRA_PATCH := 0
+else
+$(error Unsupported platform $(PLATFORM))
+endif
# Converts e.g. ntsc-1.0 to NTSC_1_0
VERSION_MACRO := $(shell echo $(VERSION) | tr a-z-. A-Z__)
CPP_DEFINES += -DOOT_VERSION=$(VERSION_MACRO) -DOOT_REVISION=$(REVISION)
CPP_DEFINES += -DOOT_REGION=REGION_$(REGION)
-CPP_DEFINES += -DBUILD_CREATOR="\"$(BUILD_CREATOR)\"" -DBUILD_DATE="\"$(BUILD_DATE)\"" -DBUILD_TIME="\"$(BUILD_TIME)\""
CPP_DEFINES += -DLIBULTRA_VERSION=LIBULTRA_VERSION_$(LIBULTRA_VERSION)
CPP_DEFINES += -DLIBULTRA_PATCH=$(LIBULTRA_PATCH)
-
-ifeq ($(PLATFORM),N64)
- CPP_DEFINES += -DPLATFORM_N64=1 -DPLATFORM_GC=0
-else ifeq ($(PLATFORM),GC)
- CPP_DEFINES += -DPLATFORM_N64=0 -DPLATFORM_GC=1
-else
- $(error Unsupported platform $(PLATFORM))
+ifeq ($(PLATFORM),IQUE)
+ CPP_DEFINES += -DBBPLAYER
endif
ifeq ($(DEBUG_FEATURES),1)
@@ -219,6 +238,7 @@ else
CPP_DEFINES += -DDEBUG_FEATURES=0 -DNDEBUG
OPTFLAGS := -O2 -g3
endif
+ASOPTFLAGS := -O1
ifeq ($(OS),Windows_NT)
DETECTED_OS=windows
@@ -241,9 +261,11 @@ endif
# Detect compiler and set variables appropriately.
ifeq ($(COMPILER),gcc)
CC := $(MIPS_BINUTILS_PREFIX)gcc
+ CCAS := $(CC) -x assembler-with-cpp
else ifeq ($(COMPILER),ido)
CC := tools/ido_recomp/$(DETECTED_OS)/7.1/cc
CC_OLD := tools/ido_recomp/$(DETECTED_OS)/5.3/cc
+ CCAS := $(CC_OLD)
else
$(error Unsupported compiler. Please use either ido or gcc as the COMPILER variable.)
endif
@@ -256,15 +278,28 @@ ifeq ($(ORIG_COMPILER),1)
$(error Please install qemu-irix package or set QEMU_IRIX env var to the full qemu-irix binary path)
endif
endif
- CC = $(QEMU_IRIX) -L tools/ido7.1_compiler tools/ido7.1_compiler/usr/bin/cc
- CC_OLD = $(QEMU_IRIX) -L tools/ido5.3_compiler tools/ido5.3_compiler/usr/bin/cc
+ CC := $(QEMU_IRIX) -L tools/ido7.1_compiler tools/ido7.1_compiler/usr/bin/cc
+ CC_OLD := $(QEMU_IRIX) -L tools/ido5.3_compiler tools/ido5.3_compiler/usr/bin/cc
+ CCAS := $(CC)
endif
+# EGCS Compiler
+EGCS_PREFIX := tools/egcs/$(DETECTED_OS)/
+EGCS_CC := $(EGCS_PREFIX)gcc -B $(EGCS_PREFIX)
+EGCS_CCAS := $(EGCS_CC) -x assembler-with-cpp
+
AS := $(MIPS_BINUTILS_PREFIX)as
LD := $(MIPS_BINUTILS_PREFIX)ld
OBJCOPY := $(MIPS_BINUTILS_PREFIX)objcopy
OBJDUMP := $(MIPS_BINUTILS_PREFIX)objdump
NM := $(MIPS_BINUTILS_PREFIX)nm
+STRIP := $(MIPS_BINUTILS_PREFIX)strip
+
+# Command prefix to preprocess a file before running the compiler
+PREPROCESS :=
+
+# Command to patch certain object files after they are built
+POSTPROCESS_OBJ := @:
# The default iconv on macOS has some differences from GNU iconv, so we use the Homebrew version instead
ifeq ($(UNAME_S),Darwin)
@@ -307,34 +342,45 @@ SEQ_CPPFLAGS := -D_LANGUAGE_ASEQ -DMML_VERSION=MML_VERSION_OOT $(CPP_DEFINES) -
SBCFLAGS := --matching
SFCFLAGS := --matching
-CFLAGS += $(CPP_DEFINES)
-CPPFLAGS += $(CPP_DEFINES)
+# Extra debugging steps
+ifeq ($(DEBUG_OBJECTS),1)
+ OBJDUMP_CMD = @$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
+ OBJCOPY_CMD = @$(OBJCOPY) -O binary $@ $(@:.o=.bin)
+else
+ OBJDUMP_CMD = @:
+ OBJCOPY_CMD = @:
+endif
ifeq ($(COMPILER),gcc)
OPTFLAGS := -Os -ffast-math -fno-unsafe-math-optimizations
endif
GBI_DEFINES := -DF3DEX_GBI_2
-ifeq ($(PLATFORM),GC)
+ifneq ($(PLATFORM),N64)
GBI_DEFINES += -DF3DEX_GBI_PL -DGBI_DOWHILE
endif
ifeq ($(DEBUG_FEATURES),1)
GBI_DEFINES += -DGBI_DEBUG
endif
-CFLAGS += $(GBI_DEFINES)
-
-ASFLAGS := -march=vr4300 -32 -no-pad-sections -Iinclude -I$(EXTRACTED_DIR)
+CPPFLAGS += -P -xc -fno-dollars-in-identifiers $(CPP_DEFINES)
+ASFLAGS += -march=vr4300 -32 -no-pad-sections -Iinclude -I$(EXTRACTED_DIR)
ifeq ($(COMPILER),gcc)
- CFLAGS += -G 0 -nostdinc $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -mdivide-breaks -fno-PIC -fno-common -ffreestanding -fbuiltin -fno-builtin-sinf -fno-builtin-cosf $(CHECK_WARNINGS) -funsigned-char
+ CFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -nostdinc $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -mdivide-breaks -fno-PIC -fno-common -ffreestanding -funsigned-char -fbuiltin -fno-builtin-sinf -fno-builtin-cosf $(CHECK_WARNINGS)
+ CCASFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -nostdinc $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -fno-PIC -fno-common -Wa,-no-pad-sections
MIPS_VERSION := -mips3
else
# Suppress warnings for wrong number of macro arguments (to fake variadic
# macros) and Microsoft extensions such as anonymous structs (which the
# compiler does support but warns for their usage).
- CFLAGS += -G 0 -non_shared -fullwarn -verbose -Xcpluscomm $(INC) -Wab,-r4300_mul -woff 516,609,649,838,712,807
+ CFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -non_shared -fullwarn -verbose -Xcpluscomm $(INC) -Wab,-r4300_mul -woff 516,609,649,838,712,807
+ CCASFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -non_shared -fullwarn -verbose -Xcpluscomm $(INC) -Wab,-r4300_mul -woff 516,609,649,838,712,807 -o32
+ EGCS_CFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -nostdinc $(INC) -mcpu=vr4300 -mabi=32 -mgp32 -mfp32 -fno-PIC
MIPS_VERSION := -mips2
+
+ EGCS_CCASFLAGS := -Wall -nostdinc $(CPP_DEFINES) $(INC) -c -G 0 -Wa,-irix-symtab -D_ABIO32=1 -D_ABI64=3 -D_MIPS_SIM_ABI64=_ABI64 -D_MIPS_SIM_ABI32=_ABIO32 -DMIPSEB -D_LANGUAGE_ASSEMBLY -mabi=32 -fno-PIC -non_shared -mcpu=4300 -mfix4300
+ EGCS_ASOPTFLAGS :=
endif
ifeq ($(COMPILER),ido)
@@ -365,11 +411,8 @@ LDSCRIPT := $(ROM:.z64=.ld)
# description of ROM segments
SPEC := spec
-ifeq ($(COMPILER),ido)
-SRC_DIRS := $(shell find src -type d -not -path src/gcc_fix)
-else
SRC_DIRS := $(shell find src -type d)
-endif
+UNDECOMPILED_DATA_DIRS := $(shell find data -type d)
ifneq ($(wildcard $(EXTRACTED_DIR)/assets/audio),)
SAMPLE_EXTRACT_DIRS := $(shell find $(EXTRACTED_DIR)/assets/audio/samples -type d)
@@ -445,32 +488,19 @@ ASSET_BIN_DIRS := $(ASSET_BIN_DIRS_EXTRACTED) $(ASSET_BIN_DIRS_COMMITTED)
ASSET_FILES_BIN_EXTRACTED := $(foreach dir,$(ASSET_BIN_DIRS_EXTRACTED),$(wildcard $(dir)/*.bin))
ASSET_FILES_BIN_COMMITTED := $(foreach dir,$(ASSET_BIN_DIRS_COMMITTED),$(wildcard $(dir)/*.bin))
ASSET_FILES_OUT := $(foreach f,$(ASSET_FILES_BIN_EXTRACTED:.bin=.bin.inc.c),$(f:$(EXTRACTED_DIR)/%=$(BUILD_DIR)/%)) \
- $(foreach f,$(ASSET_FILES_BIN_COMMITTED:.bin=.bin.inc.c),$(BUILD_DIR)/$f) \
- $(foreach f,$(wildcard assets/text/*.c),$(BUILD_DIR)/$(f:.c=.o))
+ $(foreach f,$(ASSET_FILES_BIN_COMMITTED:.bin=.bin.inc.c),$(BUILD_DIR)/$f)
-UNDECOMPILED_DATA_DIRS := $(shell find data -type d)
+# Find all .o files included in the spec
+SPEC_O_FILES := $(shell $(CPP) $(CPPFLAGS) $(SPEC) | $(BUILD_DIR_REPLACE) | sed -n -E 's/^[ \t]*include[ \t]*"([a-zA-Z0-9/_.-]+\.o)"/\1/p')
-BASEROM_BIN_FILES := $(wildcard $(EXTRACTED_DIR)/baserom/*)
-
-# source files
-ASSET_C_FILES_EXTRACTED := $(filter-out %.inc.c,$(foreach dir,$(ASSET_BIN_DIRS_EXTRACTED),$(wildcard $(dir)/*.c)))
-ASSET_C_FILES_COMMITTED := $(filter-out %.inc.c,$(foreach dir,$(ASSET_BIN_DIRS_COMMITTED),$(wildcard $(dir)/*.c)))
-SRC_C_FILES := $(filter-out %.inc.c,$(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)))
-S_FILES := $(foreach dir,$(SRC_DIRS) $(UNDECOMPILED_DATA_DIRS),$(wildcard $(dir)/*.s))
-O_FILES := $(foreach f,$(S_FILES:.s=.o),$(BUILD_DIR)/$f) \
- $(foreach f,$(SRC_C_FILES:.c=.o),$(BUILD_DIR)/$f) \
- $(foreach f,$(ASSET_C_FILES_EXTRACTED:.c=.o),$(f:$(EXTRACTED_DIR)/%=$(BUILD_DIR)/%)) \
- $(foreach f,$(ASSET_C_FILES_COMMITTED:.c=.o),$(BUILD_DIR)/$f) \
- $(foreach f,$(BASEROM_BIN_FILES),$(BUILD_DIR)/baserom/$(notdir $f).o) \
- $(BUILD_DIR)/src/code/z_message_z_game_over.o
-
-OVL_RELOC_FILES := $(shell $(CPP) $(CPPFLAGS) $(SPEC) | $(BUILD_DIR_REPLACE) | grep -o '[^"]*_reloc.o' )
+# Split out reloc files
+O_FILES := $(filter-out %_reloc.o,$(SPEC_O_FILES))
+OVL_RELOC_FILES := $(filter %_reloc.o,$(SPEC_O_FILES))
# Automatic dependency files
# (Only asm_processor dependencies and reloc dependencies are handled for now)
DEP_FILES := $(O_FILES:.o=.asmproc.d) $(OVL_RELOC_FILES:.o=.d)
-
TEXTURE_FILES_PNG_EXTRACTED := $(foreach dir,$(ASSET_BIN_DIRS_EXTRACTED),$(wildcard $(dir)/*.png))
TEXTURE_FILES_PNG_COMMITTED := $(foreach dir,$(ASSET_BIN_DIRS_COMMITTED),$(wildcard $(dir)/*.png))
TEXTURE_FILES_JPG_EXTRACTED := $(foreach dir,$(ASSET_BIN_DIRS_EXTRACTED),$(wildcard $(dir)/*.jpg))
@@ -482,7 +512,8 @@ TEXTURE_FILES_OUT := $(foreach f,$(TEXTURE_FILES_PNG_EXTRACTED:.png=.inc.c),$(f:
# create build directories
$(shell mkdir -p $(BUILD_DIR)/baserom \
- $(BUILD_DIR)/assets/text)
+ $(BUILD_DIR)/assets/text \
+ $(BUILD_DIR)/linker_scripts)
$(shell mkdir -p $(foreach dir, \
$(SRC_DIRS) \
$(UNDECOMPILED_DATA_DIRS) \
@@ -502,9 +533,20 @@ $(shell mkdir -p $(foreach dir, \
$(dir:$(EXTRACTED_DIR)/%=$(BUILD_DIR)/%)))
endif
+$(BUILD_DIR)/src/boot/build.o: CPP_DEFINES += -DBUILD_CREATOR="\"$(BUILD_CREATOR)\"" -DBUILD_DATE="\"$(BUILD_DATE)\"" -DBUILD_TIME="\"$(BUILD_TIME)\""
+
ifeq ($(COMPILER),ido)
$(BUILD_DIR)/src/boot/driverominit.o: OPTFLAGS := -O2
+ifeq ($(PLATFORM),IQUE)
+# iQue's driverominit.o seems to have been patched manually. For non-matching builds we edit the source code instead.
+ifneq ($(NON_MATCHING),1)
+$(BUILD_DIR)/src/boot/driverominit.o: POSTPROCESS_OBJ := $(PYTHON) tools/patch_ique_driverominit.py
+endif
+
+$(BUILD_DIR)/src/boot/viconfig.o: OPTFLAGS := -O2
+endif
+
$(BUILD_DIR)/src/code/jpegutils.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/code/jpegdecoder.o: OPTFLAGS := -O2
@@ -523,10 +565,47 @@ endif
$(BUILD_DIR)/src/code/jpegutils.o: CC := $(CC_OLD)
$(BUILD_DIR)/src/code/jpegdecoder.o: CC := $(CC_OLD)
-ifeq ($(DEBUG_FEATURES),1)
+ifeq ($(PLATFORM),IQUE)
+# Some files are compiled with EGCS on iQue
+EGCS_O_FILES += $(BUILD_DIR)/src/boot/boot_main.o
+EGCS_O_FILES += $(BUILD_DIR)/src/boot/idle.o
+EGCS_O_FILES += $(BUILD_DIR)/src/boot/is_debug_ique.o
+EGCS_O_FILES += $(BUILD_DIR)/src/boot/z_locale.o
+EGCS_O_FILES += $(BUILD_DIR)/src/boot/z_std_dma.o
+# EGCS_O_FILES += $(BUILD_DIR)/src/code/z_actor.o
+EGCS_O_FILES += $(BUILD_DIR)/src/code/z_common_data.o
+EGCS_O_FILES += $(BUILD_DIR)/src/code/z_construct.o
+# EGCS_O_FILES += $(BUILD_DIR)/src/code/z_kanfont.o
+# EGCS_O_FILES += $(BUILD_DIR)/src/code/z_message.o
+EGCS_O_FILES += $(BUILD_DIR)/src/code/z_parameter.o
+# EGCS_O_FILES += $(BUILD_DIR)/src/code/z_sram.o
+EGCS_O_FILES += $(BUILD_DIR)/src/overlays/actors/ovl_En_Mag/z_en_mag.o
+EGCS_O_FILES += $(BUILD_DIR)/src/overlays/actors/ovl_End_Title/z_end_title.o
+EGCS_O_FILES += $(BUILD_DIR)/src/overlays/actors/ovl_Fishing/z_fishing.o
+# EGCS_O_FILES += $(BUILD_DIR)/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.o
+EGCS_O_FILES += $(BUILD_DIR)/src/overlays/gamestates/ovl_opening/z_opening.o
+EGCS_O_FILES += $(BUILD_DIR)/src/overlays/gamestates/ovl_title/z_title.o
+EGCS_O_FILES += $(BUILD_DIR)/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.o
+EGCS_O_FILES += $(BUILD_DIR)/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.o
+
+$(EGCS_O_FILES): CC := $(EGCS_CC)
+$(EGCS_O_FILES): CFLAGS := $(EGCS_CFLAGS) -mno-abicalls -funsigned-char
+$(EGCS_O_FILES): MIPS_VERSION :=
+endif
+
+ifeq ($(PLATFORM),IQUE)
+$(BUILD_DIR)/src/libc/%.o: CC := $(EGCS_CC)
+$(BUILD_DIR)/src/libc/%.o: CCAS := $(EGCS_CCAS)
+$(BUILD_DIR)/src/libc/%.o: CFLAGS := $(EGCS_CFLAGS) -mno-abicalls
+$(BUILD_DIR)/src/libc/%.o: CCASFLAGS := $(EGCS_CCASFLAGS)
+$(BUILD_DIR)/src/libc/%.o: OPTFLAGS := -O1
+$(BUILD_DIR)/src/libc/%.o: MIPS_VERSION :=
+else ifeq ($(DEBUG_FEATURES),1)
$(BUILD_DIR)/src/libc/%.o: OPTFLAGS := -g
+$(BUILD_DIR)/src/libc/%.o: ASOPTFLAGS := -g
else
$(BUILD_DIR)/src/libc/%.o: OPTFLAGS := -O2
+$(BUILD_DIR)/src/libc/%.o: ASOPTFLAGS := -O2
endif
$(BUILD_DIR)/src/libc64/%.o: OPTFLAGS := -O2
@@ -546,12 +625,43 @@ endif
$(BUILD_DIR)/src/audio/sfx.o: CFLAGS += -use_readwrite_const
$(BUILD_DIR)/src/audio/sequence.o: CFLAGS += -use_readwrite_const
+ifeq ($(PLATFORM),IQUE)
+$(BUILD_DIR)/src/libultra/%.o: CC := $(EGCS_CC)
+$(BUILD_DIR)/src/libultra/%.o: CCAS := $(EGCS_CCAS)
+$(BUILD_DIR)/src/libultra/%.o: CFLAGS := $(EGCS_CFLAGS) -mno-abicalls
+$(BUILD_DIR)/src/libultra/%.o: CCASFLAGS := $(EGCS_CCASFLAGS)
+$(BUILD_DIR)/src/libultra/%.o: ASOPTFLAGS := $(EGCS_ASOPTFLAGS)
+
+$(BUILD_DIR)/src/libultra/reg/_%.o: OPTFLAGS := -O0
+$(BUILD_DIR)/src/libultra/reg/_%.o: MIPS_VERSION := -mgp64 -mfp64 -mips3
+
+$(BUILD_DIR)/src/libultra/libc/ll.o: OPTFLAGS := -O0
+$(BUILD_DIR)/src/libultra/libc/llcvt.o: OPTFLAGS := -O0
+
+$(BUILD_DIR)/src/libultra/os/exceptasm.o: MIPS_VERSION := -mips3
+$(BUILD_DIR)/src/libultra/os/invaldcache.o: MIPS_VERSION := -mips3
+$(BUILD_DIR)/src/libultra/os/invalicache.o: MIPS_VERSION := -mips3
+$(BUILD_DIR)/src/libultra/os/writebackdcache.o: MIPS_VERSION := -mips3
+$(BUILD_DIR)/src/libultra/os/writebackdcacheall.o: MIPS_VERSION := -mips3
+else
$(BUILD_DIR)/src/libultra/%.o: CC := $(CC_OLD)
$(BUILD_DIR)/src/libultra/libc/ll.o: OPTFLAGS := -O1
$(BUILD_DIR)/src/libultra/libc/ll.o: MIPS_VERSION := -mips3 -32
+$(BUILD_DIR)/src/libultra/libc/ll.o: POSTPROCESS_OBJ := $(PYTHON) tools/set_o32abi_bit.py
+
$(BUILD_DIR)/src/libultra/libc/llcvt.o: OPTFLAGS := -O1
$(BUILD_DIR)/src/libultra/libc/llcvt.o: MIPS_VERSION := -mips3 -32
+$(BUILD_DIR)/src/libultra/libc/llcvt.o: POSTPROCESS_OBJ := $(PYTHON) tools/set_o32abi_bit.py
+
+$(BUILD_DIR)/src/libultra/os/exceptasm.o: MIPS_VERSION := -mips3 -32
+$(BUILD_DIR)/src/libultra/os/exceptasm.o: POSTPROCESS_OBJ := $(PYTHON) tools/set_o32abi_bit.py
+endif
+
+$(BUILD_DIR)/src/code/%.o: ASOPTFLAGS := -O2
+$(BUILD_DIR)/src/libleo/%.o: ASOPTFLAGS := -O2
+$(BUILD_DIR)/src/libultra/libc/%.o: ASOPTFLAGS := -O2
+$(BUILD_DIR)/src/libultra/mgu/%.o: ASOPTFLAGS := -O2
ifeq ($(LIBULTRA_VERSION),I)
$(BUILD_DIR)/src/libultra/gu/%.o: OPTFLAGS := -O3
@@ -592,20 +702,32 @@ else
$(BUILD_DIR)/src/libultra/gu/%.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/libultra/io/%.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/libultra/libc/%.o: OPTFLAGS := -O2
+ifeq ($(PLATFORM),IQUE)
+$(BUILD_DIR)/src/libultra/os/%.o: OPTFLAGS := -O0
+else
$(BUILD_DIR)/src/libultra/os/%.o: OPTFLAGS := -O1
endif
+endif
$(BUILD_DIR)/src/libleo/%.o: CC := $(CC_OLD)
$(BUILD_DIR)/src/libleo/%.o: OPTFLAGS := -O2
+ifeq ($(PLATFORM),IQUE)
+$(BUILD_DIR)/src/libgcc/%.o: CC := $(EGCS_CC)
+$(BUILD_DIR)/src/libgcc/%.o: CFLAGS := $(EGCS_CFLAGS)
+endif
+
$(BUILD_DIR)/assets/misc/z_select_static/%.o: GBI_DEFINES := -DF3DEX_GBI
-# For using asm_processor on some files:
-#$(BUILD_DIR)/.../%.o: CC := $(PYTHON) tools/asm_processor/build.py $(CC) -- $(AS) $(ASFLAGS) --
+ifeq ($(PLATFORM),IQUE)
+$(BUILD_DIR)/src/makerom/%.o: CCAS := $(EGCS_CCAS)
+$(BUILD_DIR)/src/makerom/%.o: CCASFLAGS := $(EGCS_CCASFLAGS)
+$(BUILD_DIR)/src/makerom/%.o: ASOPTFLAGS := $(EGCS_ASOPTFLAGS)
+endif
ifeq ($(PERMUTER),) # permuter + preprocess.py misbehaves, permuter doesn't care about rodata diffs or bss ordering so just don't use it in that case
# Handle encoding (UTF-8 -> EUC-JP) and custom pragmas
-$(BUILD_DIR)/src/%.o: CC := ./tools/preprocess.sh -v $(VERSION) -i $(ICONV) -- $(CC)
+$(BUILD_DIR)/src/%.o: PREPROCESS := ./tools/preprocess.sh -v $(VERSION) -i $(ICONV) --
endif
else
@@ -686,14 +808,25 @@ endif
$(ROM): $(ELF)
$(ELF2ROM) -cic 6105 $< $@
-$(ROMC): $(ROM) $(ELF) $(BUILD_DIR)/compress_ranges.txt
- $(PYTHON) tools/compress.py --in $(ROM) --out $@ --dmadata-start `./tools/dmadata_start.sh $(NM) $(ELF)` --compress `cat $(BUILD_DIR)/compress_ranges.txt` --threads $(N_THREADS)
- $(PYTHON) -m ipl3checksum sum --cic 6105 --update $@
+ifeq ($(PLATFORM),IQUE)
+ COMPRESS_ARGS := --format gzip --pad-to 0x4000
+ CIC = 6102
+else
+ COMPRESS_ARGS := --format yaz0 --pad-to 0x800000 --fill-padding-bytes
+ CIC = 6105
+endif
-$(ELF): $(TEXTURE_FILES_OUT) $(ASSET_FILES_OUT) $(O_FILES) $(OVL_RELOC_FILES) $(LDSCRIPT) $(BUILD_DIR)/undefined_syms.txt \
+$(ROMC): $(ROM) $(ELF) $(BUILD_DIR)/compress_ranges.txt
+ $(PYTHON) tools/compress.py --in $(ROM) --out $@ --dmadata-start `./tools/dmadata_start.sh $(NM) $(ELF)` --compress `cat $(BUILD_DIR)/compress_ranges.txt` --threads $(N_THREADS) $(COMPRESS_ARGS)
+ $(PYTHON) -m ipl3checksum sum --cic $(CIC) --update $@
+
+$(ELF): $(TEXTURE_FILES_OUT) $(ASSET_FILES_OUT) $(O_FILES) $(OVL_RELOC_FILES) $(LDSCRIPT) $(BUILD_DIR)/linker_scripts/makerom.ld $(BUILD_DIR)/undefined_syms.txt \
$(SAMPLEBANK_O_FILES) $(SOUNDFONT_O_FILES) $(SEQUENCE_O_FILES) \
$(BUILD_DIR)/assets/audio/sequence_font_table.o $(BUILD_DIR)/assets/audio/audiobank_padding.o
- $(LD) -T $(LDSCRIPT) -T $(BUILD_DIR)/undefined_syms.txt --no-check-sections --accept-unknown-input-arch --emit-relocs -Map $(MAP) -o $@
+ $(LD) -T $(LDSCRIPT) -T $(BUILD_DIR)/linker_scripts/makerom.ld -T $(BUILD_DIR)/undefined_syms.txt --no-check-sections --accept-unknown-input-arch --emit-relocs -Map $(MAP) -o $@
+
+$(BUILD_DIR)/linker_scripts/makerom.ld: linker_scripts/makerom.ld
+ $(CPP) -I include $(CPPFLAGS) $< > $@
## Order-only prerequisites
# These ensure e.g. the O_FILES are built before the OVL_RELOC_FILES.
@@ -722,11 +855,17 @@ $(BUILD_DIR)/baserom/%.o: $(EXTRACTED_DIR)/baserom/%
$(BUILD_DIR)/data/%.o: data/%.s
$(CPP) $(CPPFLAGS) -Iinclude $< | $(AS) $(ASFLAGS) -o $@
-$(BUILD_DIR)/assets/text/%.enc.jpn.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h assets/text/charmap.txt
- $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding jpn --charmap assets/text/charmap.txt - $@
+ifeq ($(PLATFORM),IQUE)
+ NES_CHARMAP := assets/text/charmap.chn.txt
+else
+ NES_CHARMAP := assets/text/charmap.nes.txt
+endif
-$(BUILD_DIR)/assets/text/%.enc.nes.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h assets/text/charmap.txt
- $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding nes --charmap assets/text/charmap.txt - $@
+$(BUILD_DIR)/assets/text/%.enc.nes.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h $(NES_CHARMAP)
+ $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding utf-8 --charmap $(NES_CHARMAP) - $@
+
+$(BUILD_DIR)/assets/text/%.enc.jpn.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h assets/text/charmap.jpn.txt
+ $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding SHIFT-JIS --wchar --charmap assets/text/charmap.jpn.txt - $@
# Dependencies for files including message data headers
# TODO remove when full header dependencies are used.
@@ -749,14 +888,37 @@ endif
$(BUILD_DIR)/assets/%.o: assets/%.c
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
- $(OBJCOPY) -O binary $@ $@.bin
+ $(OBJCOPY_CMD)
$(BUILD_DIR)/assets/%.o: $(EXTRACTED_DIR)/assets/%.c
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
- $(OBJCOPY) -O binary $@ $@.bin
+ $(OBJCOPY_CMD)
+
+# Assemble the ROM header with GNU AS always
+$(BUILD_DIR)/src/makerom/rom_header.o: src/makerom/rom_header.s
+ifeq ($(COMPILER),ido)
+ $(CPP) $(CPPFLAGS) $(MIPS_BUILTIN_DEFS) $(INC) $< | $(AS) $(ASFLAGS) -o $@
+else
+ $(CCAS) -c $(CCASFLAGS) $(MIPS_VERSION) $(ASOPTFLAGS) -o $@ $<
+endif
+ $(OBJDUMP_CMD)
+
+$(BUILD_DIR)/src/makerom/ipl3.o: $(EXTRACTED_DIR)/incbin/ipl3
+ $(OBJCOPY) -I binary -O elf32-big --rename-section .data=.text $< $@
$(BUILD_DIR)/src/%.o: src/%.s
- $(CPP) $(CPPFLAGS) -Iinclude $< | $(AS) $(ASFLAGS) -o $@
+ifeq ($(COMPILER),ido)
+ $(CCAS) -c $(CCASFLAGS) $(MIPS_VERSION) $(ASOPTFLAGS) -o $(@:.o=.tmp.o) $<
+# IDO generates bad symbol tables, fix the symbol table with strip..
+ $(STRIP) $(@:.o=.tmp.o) -N dummy-symbol-name
+# but strip doesn't know about file-relative offsets in .mdebug and doesn't relocate them, ld will
+# segfault unless .mdebug is removed
+ $(OBJCOPY) --remove-section .mdebug $(@:.o=.tmp.o) $@
+else
+ $(CCAS) -c $(CCASFLAGS) $(MIPS_VERSION) $(ASOPTFLAGS) -o $@ $<
+endif
+ $(POSTPROCESS_OBJ) $@
+ $(OBJDUMP_CMD)
# Incremental link to move z_message and z_game_over data into rodata
$(BUILD_DIR)/src/code/z_message_z_game_over.o: $(BUILD_DIR)/src/code/z_message.o $(BUILD_DIR)/src/code/z_game_over.o
@@ -785,23 +947,16 @@ $(BUILD_DIR)/src/%.o: src/%.c
ifneq ($(RUN_CC_CHECK),0)
$(CC_CHECK) $<
endif
- $(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
- @$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
+ $(PREPROCESS) $(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
+ $(POSTPROCESS_OBJ) $@
+ $(OBJDUMP_CMD)
-$(BUILD_DIR)/src/libultra/libc/ll.o: src/libultra/libc/ll.c
+$(BUILD_DIR)/src/audio/session_init.o: src/audio/session_init.c $(BUILD_DIR)/assets/audio/soundfont_sizes.h $(BUILD_DIR)/assets/audio/sequence_sizes.h
ifneq ($(RUN_CC_CHECK),0)
$(CC_CHECK) $<
endif
- $(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
- $(PYTHON) tools/set_o32abi_bit.py $@
- @$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
-
-$(BUILD_DIR)/src/libultra/libc/llcvt.o: src/libultra/libc/llcvt.c
-ifneq ($(RUN_CC_CHECK),0)
- $(CC_CHECK) $<
-endif
- $(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
- $(PYTHON) tools/set_o32abi_bit.py $@
+ $(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $(@:.o=.tmp) $<
+ $(LD) -r -T linker_scripts/data_with_rodata.ld -o $@ $(@:.o=.tmp)
@$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
$(BUILD_DIR)/src/overlays/%_reloc.o: $(BUILD_DIR)/$(SPEC)
@@ -967,8 +1122,6 @@ $(BUILD_DIR)/assets/audio/sequence_font_table.o: $(BUILD_DIR)/assets/audio/seque
# make headers with file sizes and amounts
-$(BUILD_DIR)/src/audio/session_config.o: $(BUILD_DIR)/assets/audio/soundfont_sizes.h $(BUILD_DIR)/assets/audio/sequence_sizes.h
-
$(BUILD_DIR)/assets/audio/soundfont_sizes.h: $(SOUNDFONT_O_FILES)
$(AFILE_SIZES) $@ NUM_SOUNDFONTS SOUNDFONT_SIZES .rodata $^
diff --git a/README.md b/README.md
index 59791e60a0..ff255f32db 100644
--- a/README.md
+++ b/README.md
@@ -81,6 +81,7 @@ The build process has the following package requirements:
* git
* build-essential
* binutils-mips-linux-gnu
+* curl
* python3
* python3-pip
* python3-venv
@@ -91,7 +92,7 @@ Under Debian / Ubuntu (which we recommend using), you can install them with the
```bash
sudo apt-get update
-sudo apt-get install git build-essential binutils-mips-linux-gnu python3 python3-pip python3-venv libpng-dev libxml2-dev
+sudo apt-get install git build-essential binutils-mips-linux-gnu curl python3 python3-pip python3-venv libpng-dev libxml2-dev
```
If you are using GCC as the compiler for Ocarina of Time, you will also need:
diff --git a/assets/audio/sequences/seq_109.prg.seq b/assets/audio/sequences/seq_109.prg.seq
index 49b0dfb606..ee3e8e0aa4 100644
--- a/assets/audio/sequences/seq_109.prg.seq
+++ b/assets/audio/sequences/seq_109.prg.seq
@@ -1149,7 +1149,7 @@ ENVELOPE_08BA:
point 20, 20000
hang
-#if OOT_VERSION == NTSC_1_2 || PLATFORM_GC
+#if OOT_VERSION == NTSC_1_2 || !PLATFORM_N64
.filter FILTER_0932
filter 0, 0, 0, 0, 0, 0, 0, 0
diff --git a/assets/text/charmap.chn.txt b/assets/text/charmap.chn.txt
new file mode 100644
index 0000000000..08d4d451df
--- /dev/null
+++ b/assets/text/charmap.chn.txt
@@ -0,0 +1,1823 @@
+# Determines how certain text sequences should be encoded for the CHN text encoding.
+{
+ '\n' : 0x01,
+
+ '[A]' : 0xAA9F,
+ '[B]' : 0xAAA0,
+ '[C]' : 0xAAA1,
+ '[L]' : 0xAAA2,
+ '[R]' : 0xAAA3,
+ '[Z]' : 0xAAA4,
+ '[C-Up]' : 0xAAA5,
+ '[C-Down]' : 0xAAA6,
+ '[C-Left]' : 0xAAA7,
+ '[C-Right]' : 0xAAA8,
+ '▼' : 0xAAA9,
+ '[Control-Pad]' : 0xAAAA,
+
+ 'À' : 0x80,
+ 'î' : 0x81,
+ 'Â' : 0x82,
+ 'Ä' : 0x83,
+ 'Ç' : 0x84,
+ 'È' : 0x85,
+ 'É' : 0x86,
+ 'Ê' : 0x87,
+ 'Ë' : 0x88,
+ 'Ï' : 0x89,
+ 'Ô' : 0x8A,
+ 'Ö' : 0x8B,
+ 'Ù' : 0x8C,
+ 'Û' : 0x8D,
+ 'Ü' : 0x8E,
+ 'ß' : 0x8F,
+ 'à' : 0x90,
+ 'á' : 0x91,
+ 'â' : 0x92,
+ 'ä' : 0x93,
+ 'ç' : 0x94,
+ 'è' : 0x95,
+ 'é' : 0x96,
+ 'ê' : 0x97,
+ 'ë' : 0x98,
+ 'ï' : 0x99,
+ 'ô' : 0x9A,
+ 'ö' : 0x9B,
+ 'ù' : 0x9C,
+ 'û' : 0x9D,
+ 'ü' : 0x9E,
+
+ # Unfortunately the CN codepoint map does not correspond to any standard encoding,
+ # characters were added in the order they were needed in the text. The order is
+ # reproduced here.
+ '你' : 0xA08C,
+ '借' : 0xA08D,
+ '到' : 0xA08E,
+ '了' : 0xA08F,
+ '一' : 0xA090,
+ '颗' : 0xA091,
+ '口' : 0xA092,
+ '袋' : 0xA093,
+ '鸡' : 0xA094,
+ '蛋' : 0xA095,
+ '过' : 0xA096,
+ '夜' : 0xA097,
+ '后' : 0xA098,
+ '就' : 0xA099,
+ '会' : 0xA09A,
+ '孵' : 0xA09B,
+ '出' : 0xA09C,
+ '只' : 0xA09D,
+ ',' : 0xA09E,
+ '用' : 0xA09F,
+ '完' : 0xA0A0,
+ '别' : 0xA0A1,
+ '忘' : 0xA0A2,
+ '记' : 0xA0A3,
+ '把' : 0xA0A4,
+ '它' : 0xA0A5,
+ '还' : 0xA0A6,
+ '回' : 0xA0A7,
+ '去' : 0xA0A8,
+ '。' : 0xA0A9,
+ '归' : 0xA0AA,
+ '得' : 0xA0AB,
+ '克' : 0xA0AC,
+ '洛' : 0xA0AD,
+ '!' : 0xA0AE,
+ '与' : 0xA0AF,
+ '不' : 0xA0B0,
+ '同' : 0xA0B1,
+ '很' : 0xA0B2,
+ '少' : 0xA0B3,
+ '啼' : 0xA0B4,
+ '叫' : 0xA0B5,
+ '个' : 0xA0B6,
+ '奇' : 0xA0B7,
+ '异' : 0xA0B8,
+ '蘑' : 0xA0B9,
+ '菇' : 0xA0BA,
+ '新' : 0xA0BB,
+ '鲜' : 0xA0BC,
+ '的' : 0xA0BD,
+ '都' : 0xA0BE,
+ '容' : 0xA0BF,
+ '易' : 0xA0C0,
+ '变' : 0xA0C1,
+ '质' : 0xA0C2,
+ '快' : 0xA0C3,
+ '拿' : 0xA0C4,
+ '卡' : 0xA0C5,
+ '利' : 0xA0C6,
+ '科' : 0xA0C7,
+ '药' : 0xA0C8,
+ '店' : 0xA0C9,
+ '吧' : 0xA0CA,
+ '之' : 0xA0CB,
+ '知' : 0xA0CC,
+ '道' : 0xA0CD,
+ '这' : 0xA0CE,
+ '两' : 0xA0CF,
+ '人' : 0xA0D0,
+ '间' : 0xA0D1,
+ '发' : 0xA0D2,
+ '生' : 0xA0D3,
+ '什' : 0xA0D4,
+ '么' : 0xA0D5,
+ '事' : 0xA0D6,
+ '但' : 0xA0D7,
+ '带' : 0xA0D8,
+ '迷' : 0xA0D9,
+ '失' : 0xA0DA,
+ '森' : 0xA0DB,
+ '林' : 0xA0DC,
+ '物' : 0xA0DD,
+ '原' : 0xA0DE,
+ '主' : 0xA0DF,
+ '偷' : 0xA0E0,
+ '猎' : 0xA0E1,
+ '者' : 0xA0E2,
+ '锯' : 0xA0E3,
+ '定' : 0xA0E4,
+ '是' : 0xA0E5,
+ '那' : 0xA0E6,
+ '年' : 0xA0E7,
+ '轻' : 0xA0E8,
+ '留' : 0xA0E9,
+ '下' : 0xA0EA,
+ '炸' : 0xA0EB,
+ '弹' : 0xA0EC,
+ '枚' : 0xA0ED,
+ '卢' : 0xA0EE,
+ '比' : 0xA0EF,
+ '买' : 0xA0F0,
+ '德' : 0xA0F1,
+ '库' : 0xA0F2,
+ '子' : 0xA0F3,
+ '可' : 0xA0F4,
+ '以' : 0xA0F5,
+ '装' : 0xA0F6,
+ '弓' : 0xA0F7,
+ '换' : 0xA0F8,
+ '破' : 0xA0F9,
+ '损' : 0xA0FA,
+ '格' : 0xA0FB,
+ '雷' : 0xA0FC,
+ '剑' : 0xA0FD,
+ '大' : 0xA0FE,
+ '城' : 0xA0FF,
+ '修' : 0xA100,
+ '好' : 0xA101,
+ '交' : 0xA102,
+ '处' : 0xA103,
+ '方' : 0xA104,
+ '见' : 0xA105,
+ '卓' : 0xA106,
+ '拉' : 0xA107,
+ '王' : 0xA108,
+ '⋯' : 0xA109, # TODO this isn't quite the same width as everything else..
+ '兑' : 0xA10A,
+ '券' : 0xA10B,
+ '急' : 0xA10C,
+ '切' : 0xA10D,
+ '地' : 0xA10E,
+ '希' : 0xA10F,
+ '望' : 0xA110,
+ '点' : 0xA111,
+ '铸' : 0xA112,
+ '卖' : 0xA113,
+ '掉' : 0xA114,
+ '巨' : 0xA115,
+ '刀' : 0xA116,
+ '铁' : 0xA117,
+ '匠' : 0xA118,
+ '师' : 0xA119,
+ '所' : 0xA11A,
+ '造' : 0xA11B,
+ '坚' : 0xA11C,
+ '摧' : 0xA11D,
+ '卷' : 0xA11E,
+ '眼' : 0xA11F,
+ '青' : 0xA120,
+ '蛙' : 0xA121,
+ '趁' : 0xA122,
+ '凉' : 0xA123,
+ '海' : 0xA124,
+ '鲁' : 0xA125,
+ '湖' : 0xA126,
+ '世' : 0xA127,
+ '上' : 0xA128,
+ '最' : 0xA129,
+ '水' : 0xA12A,
+ '在' : 0xA12B,
+ '前' : 0xA12C,
+ '送' : 0xA12D,
+ '蠃' : 0xA12E,
+ '啦' : 0xA12F,
+ '骷' : 0xA130,
+ '髅' : 0xA131,
+ '面' : 0xA132,
+ '具' : 0xA133,
+ '按' : 0xA134,
+ '戴' : 0xA135,
+ '试' : 0xA136,
+ '看' : 0xA137,
+ '着' : 0xA138,
+ '真' : 0xA139,
+ '像' : 0xA13A,
+ '怪' : 0xA13B,
+ '恐' : 0xA13C,
+ '怖' : 0xA13D,
+ '吓' : 0xA13E,
+ '基' : 0xA13F,
+ '顿' : 0xA140,
+ '受' : 0xA141,
+ '欢' : 0xA142,
+ '迎' : 0xA143,
+ '哦' : 0xA144,
+ '兔' : 0xA145,
+ '兜' : 0xA146,
+ '帽' : 0xA147,
+ '长' : 0xA148,
+ '耳' : 0xA149,
+ '朵' : 0xA14A,
+ '太' : 0xA14B,
+ '爱' : 0xA14C,
+ '让' : 0xA14D,
+ '头' : 0xA14E,
+ '起' : 0xA14F,
+ '来' : 0xA150,
+ '有' : 0xA151,
+ '女' : 0xA152,
+ '孩' : 0xA153,
+ '?' : 0xA154,
+ '理' : 0xA155,
+ '更' : 0xA156,
+ '多' : 0xA157,
+ '我' : 0xA158,
+ '们' : 0xA159,
+ '娱' : 0xA15A,
+ '乐' : 0xA15B,
+ '中' : 0xA15C,
+ '心' : 0xA15D,
+ ':' : 0xA15E,
+ '保' : 0xA15F,
+ '龄' : 0xA160,
+ '球' : 0xA161,
+ '场' : 0xA162,
+ '想' : 0xA163,
+ '奖' : 0xA164,
+ '品' : 0xA165,
+ '吗' : 0xA166,
+ '秘' : 0xA167,
+ '密' : 0xA168,
+ '付' : 0xA169,
+ '钱' : 0xA16A,
+ '才' : 0xA16B,
+ '告' : 0xA16C,
+ '诉' : 0xA16D,
+ '玩' : 0xA16E,
+ '次' : 0xA16F,
+ '要' : 0xA170,
+ '瞄' : 0xA171,
+ '准' : 0xA172,
+ '洞' : 0xA173,
+ '放' : 0xA174,
+ '鼠' : 0xA175,
+ '十' : 0xA176,
+ '机' : 0xA177,
+ '预' : 0xA178,
+ '备' : 0xA179,
+ '开' : 0xA17A,
+ '始' : 0xA17B,
+ '再' : 0xA17C,
+ '差' : 0xA17D,
+ '(' : 0xA17E,
+ ')' : 0xA17F,
+ '捡' : 0xA180,
+ '扔' : 0xA181,
+ '没' : 0xA182,
+ '能' : 0xA183,
+ '恢' : 0xA184,
+ '复' : 0xA185,
+ '正' : 0xA186,
+ '常' : 0xA187,
+ '请' : 0xA188,
+ '救' : 0xA189,
+ '其' : 0xA18A,
+ '他' : 0xA18B,
+ '兄' : 0xA18C,
+ '弟' : 0xA18D,
+ '给' : 0xA18E,
+ '励' : 0xA18F,
+ '诅' : 0xA190,
+ '咒' : 0xA191,
+ '解' : 0xA192,
+ '除' : 0xA193,
+ '谢' : 0xA194,
+ '报' : 0xA195,
+ '呀' : 0xA196,
+ '啊' : 0xA197,
+ '被' : 0xA198,
+ '小' : 0xA199,
+ '消' : 0xA19A,
+ '灭' : 0xA19B,
+ '蜘' : 0xA19C,
+ '蛛' : 0xA19D,
+ '已' : 0xA19E,
+ '经' : 0xA19F,
+ '减' : 0xA1A0,
+ '弱' : 0xA1A1,
+ '富' : 0xA1A2,
+ '办' : 0xA1A3,
+ '法' : 0xA1A4,
+ '越' : 0xA1A5,
+ '些' : 0xA1A6,
+ '验' : 0xA1A7,
+ '帮' : 0xA1A8,
+ '助' : 0xA1A9,
+ '寻' : 0xA1AA,
+ '找' : 0xA1AB,
+ '首' : 0xA1AC,
+ '先' : 0xA1AD,
+ '晚' : 0xA1AE,
+ '行' : 0xA1AF,
+ '动' : 0xA1B0,
+ '第' : 0xA1B1,
+ '二' : 0xA1B2,
+ '住' : 0xA1B3,
+ '喜' : 0xA1B4,
+ '松' : 0xA1B5,
+ '柔' : 0xA1B6,
+ '土' : 0xA1B7,
+ '壤' : 0xA1B8,
+ '仔' : 0xA1B9,
+ '细' : 0xA1BA,
+ '观' : 0xA1BB,
+ '察' : 0xA1BC,
+ '周' : 0xA1BD,
+ '围' : 0xA1BE,
+ '全' : 0xA1BF,
+ '靠' : 0xA1C0,
+ '成' : 0xA1C1,
+ '样' : 0xA1C2,
+ '因' : 0xA1C3,
+ '为' : 0xA1C4,
+ '种' : 0xA1C5,
+ '界' : 0xA1C6,
+ '每' : 0xA1C7,
+ '现' : 0xA1C8,
+ '徽' : 0xA1C9,
+ '章' : 0xA1CA,
+ '收' : 0xA1CB,
+ '集' : 0xA1CC,
+ '作' : 0xA1CD,
+ '战' : 0xA1CE,
+ '绩' : 0xA1CF,
+ '证' : 0xA1D0,
+ '明' : 0xA1D1,
+ '征' : 0xA1D2,
+ '途' : 0xA1D3,
+ '状' : 0xA1D4,
+ '态' : 0xA1D5,
+ '窗' : 0xA1D6,
+ '此' : 0xA1D7,
+ '图' : 0xA1D8,
+ '标' : 0xA1D9,
+ '旁' : 0xA1DA,
+ '边' : 0xA1DB,
+ '数' : 0xA1DC,
+ '字' : 0xA1DD,
+ '显' : 0xA1DE,
+ '示' : 0xA1DF,
+ '目' : 0xA1E0,
+ '量' : 0xA1E1,
+ '如' : 0xA1E2,
+ '果' : 0xA1E3,
+ '区' : 0xA1E4,
+ '名' : 0xA1E5,
+ '说' : 0xA1E6,
+ '里' : 0xA1E7,
+ '家' : 0xA1E8,
+ '族' : 0xA1E9,
+ '身' : 0xA1EA,
+ '感' : 0xA1EB,
+ '止' : 0xA1EC,
+ '错' : 0xA1ED,
+ '担' : 0xA1EE,
+ '需' : 0xA1EF,
+ '箭' : 0xA1F0,
+ '关' : 0xA1F1,
+ '系' : 0xA1F2,
+ '强' : 0xA1F3,
+ '迫' : 0xA1F4,
+ '游' : 0xA1F5,
+ '戏' : 0xA1F6,
+ '著' : 0xA1F7,
+ '射' : 0xA1F8,
+ '击' : 0xA1F9,
+ '从' : 0xA1FA,
+ '台' : 0xA1FB,
+ '够' : 0xA1FC,
+ '五' : 0xA1FD,
+ '支' : 0xA1FE,
+ '武' : 0xA1FF,
+ '器' : 0xA200,
+ '争' : 0xA201,
+ '取' : 0xA202,
+ '祝' : 0xA203,
+ '运' : 0xA204,
+ '堆' : 0xA205,
+ '软' : 0xA206,
+ '泥' : 0xA207,
+ '精' : 0xA208,
+ '灵' : 0xA209,
+ '选' : 0xA20A,
+ '择' : 0xA20B,
+ '或' : 0xA20C,
+ '键' : 0xA20D,
+ '并' : 0xA20E,
+ '立' : 0xA20F,
+ '即' : 0xA210,
+ '时' : 0xA211,
+ '举' : 0xA212,
+ '置' : 0xA213,
+ '跑' : 0xA214,
+ '投' : 0xA215,
+ '掷' : 0xA216,
+ '疑' : 0xA217,
+ '型' : 0xA218,
+ '甚' : 0xA219,
+ '至' : 0xA21A,
+ '飞' : 0xA21B,
+ '檐' : 0xA21C,
+ '走' : 0xA21D,
+ '壁' : 0xA21E,
+ '闪' : 0xA21F,
+ '光' : 0xA220,
+ '使' : 0xA221,
+ '敌' : 0xA222,
+ '眩' : 0xA223,
+ '晕' : 0xA224,
+ '旋' : 0xA225,
+ '镖' : 0xA226,
+ '攻' : 0xA227,
+ '远' : 0xA228,
+ '短' : 0xA229,
+ '钩' : 0xA22A,
+ '条' : 0xA22B,
+ '力' : 0xA22C,
+ '链' : 0xA22D,
+ '勾' : 0xA22E,
+ '体' : 0xA22F,
+ '获' : 0xA230,
+ '自' : 0xA231,
+ '己' : 0xA232,
+ '根' : 0xA233,
+ '木' : 0xA234,
+ '棒' : 0xA235,
+ '挥' : 0xA236,
+ '舞' : 0xA237,
+ '站' : 0xA238,
+ '携' : 0xA239,
+ '浪' : 0xA23A,
+ '费' : 0xA23B,
+ '锤' : 0xA23C,
+ '砸' : 0xA23D,
+ '碎' : 0xA23E,
+ '废' : 0xA23F,
+ '沉' : 0xA240,
+ '双' : 0xA241,
+ '手' : 0xA242,
+ '镜' : 0xA243,
+ '神' : 0xA244,
+ '井' : 0xA245,
+ '外' : 0xA246,
+ '也' : 0xA247,
+ '耗' : 0xA248,
+ '魔' : 0xA249,
+ '停' : 0xA24A,
+ '笛' : 0xA24B,
+ '塞' : 0xA24C,
+ '尔' : 0xA24D,
+ '达' : 0xA24E,
+ '宝' : 0xA24F,
+ '散' : 0xA250,
+ '芒' : 0xA251,
+ '施' : 0xA252,
+ '展' : 0xA253,
+ '花' : 0xA254,
+ '风' : 0xA255,
+ '返' : 0xA256,
+ '避' : 0xA257,
+ '退' : 0xA258,
+ '火' : 0xA259,
+ '勋' : 0xA25A,
+ '圣' : 0xA25B,
+ '尼' : 0xA25C,
+ '亚' : 0xA25D,
+ '觉' : 0xA25E,
+ '醒' : 0xA25F,
+ '将' : 0xA260,
+ '赐' : 0xA261,
+ '予' : 0xA262,
+ '茹' : 0xA263,
+ '特' : 0xA264,
+ '她' : 0xA265,
+ '萨' : 0xA266,
+ '莉' : 0xA267,
+ '娅' : 0xA268,
+ '魂' : 0xA269,
+ '纳' : 0xA26A,
+ '波' : 0xA26B,
+ '若' : 0xA26C,
+ '暗' : 0xA26D,
+ '英' : 0xA26E,
+ '帕' : 0xA26F,
+ '空' : 0xA270,
+ '瓶' : 0xA271,
+ '红' : 0xA272,
+ '色' : 0xA273,
+ '命' : 0xA274,
+ '份' : 0xA275,
+ '绿' : 0xA276,
+ '蓝' : 0xA277,
+ '和' : 0xA278,
+ '抓' : 0xA279,
+ '伙' : 0xA27A,
+ '伴' : 0xA27B,
+ '活' : 0xA27C,
+ '随' : 0xA27D,
+ '呼' : 0xA27E,
+ '唤' : 0xA27F,
+ '鱼' : 0xA280,
+ '非' : 0xA281,
+ '美' : 0xA282,
+ '豆' : 0xA283,
+ '园' : 0xA284,
+ '合' : 0xA285,
+ '适' : 0xA286,
+ '趣' : 0xA287,
+ '对' : 0xA288,
+ '纪' : 0xA289,
+ '念' : 0xA28A,
+ '演' : 0xA28B,
+ '奏' : 0xA28C,
+ '各' : 0xA28D,
+ '律' : 0xA28E,
+ '重' : 0xA28F,
+ '握' : 0xA290,
+ '盾' : 0xA291,
+ '蹲' : 0xA292,
+ '防' : 0xA293,
+ '御' : 0xA294,
+ '移' : 0xA295,
+ '表' : 0xA296,
+ '滑' : 0xA297,
+ '反' : 0xA298,
+ '升' : 0xA299,
+ '级' : 0xA29A,
+ '延' : 0xA29B,
+ '伸' : 0xA29C,
+ '距' : 0xA29D,
+ '离' : 0xA29E,
+ '倍' : 0xA29F,
+ '套' : 0xA2A0,
+ '件' : 0xA2A1,
+ '隔' : 0xA2A2,
+ '热' : 0xA2A3,
+ '穿' : 0xA2A4,
+ '潜' : 0xA2A5,
+ '服' : 0xA2A6,
+ '淹' : 0xA2A7,
+ '死' : 0xA2A8,
+ '坛' : 0xA2A9,
+ '充' : 0xA2AA,
+ '满' : 0xA2AB,
+ '靴' : 0xA2AC,
+ '浮' : 0xA2AD,
+ '悬' : 0xA2AE,
+ '缺' : 0xA2AF,
+ '摩' : 0xA2B0,
+ '擦' : 0xA2B1,
+ '段' : 0xA2B2,
+ '勇' : 0xA2B3,
+ '敢' : 0xA2B4,
+ '相' : 0xA2B5,
+ '信' : 0xA2B6,
+ '超' : 0xA2B7,
+ '东' : 0xA2B8,
+ '哥' : 0xA2B9,
+ '猛' : 0xA2BA,
+ '龙' : 0xA2BB,
+ '胃' : 0xA2BC,
+ '做' : 0xA2BD,
+ '幸' : 0xA2BE,
+ '银' : 0xA2BF,
+ '臂' : 0xA2C0,
+ '答' : 0xA2C1,
+ '应' : 0xA2C2,
+ '遵' : 0xA2C3,
+ '守' : 0xA2C4,
+ '诺' : 0xA2C5,
+ '言' : 0xA2C6,
+ '金' : 0xA2C7,
+ '焰' : 0xA2C8,
+ '入' : 0xA2C9,
+ '冷' : 0xA2CA,
+ '艳' : 0xA2CB,
+ '包' : 0xA2CC,
+ '钥' : 0xA2CD,
+ '匙' : 0xA2CE,
+ '打' : 0xA2CF,
+ '锁' : 0xA2D0,
+ '门' : 0xA2D1,
+ '限' : 0xA2D2,
+ '于' : 0xA2D3,
+ '宫' : 0xA2D4,
+ '内' : 0xA2D5,
+ '老' : 0xA2D6,
+ '却' : 0xA2D7,
+ '驱' : 0xA2D8,
+ '喝' : 0xA2D9,
+ '进' : 0xA2DA,
+ '然' : 0xA2DB,
+ '域' : 0xA2DC,
+ '烁' : 0xA2DD,
+ '当' : 0xA2DE,
+ '位' : 0xA2DF,
+ '拨' : 0xA2E0,
+ '查' : 0xA2E1,
+ '某' : 0xA2E2,
+ '层' : 0xA2E3,
+ '罗' : 0xA2E4,
+ '盘' : 0xA2E5,
+ '隐' : 0xA2E6,
+ '藏' : 0xA2E7,
+ '振' : 0xA2E8,
+ '石' : 0xA2E9,
+ '继' : 0xA2EA,
+ '续' : 0xA2EB,
+ '努' : 0xA2EC,
+ '哇' : 0xA2ED,
+ '公' : 0xA2EE,
+ '签' : 0xA2EF,
+ '临' : 0xA2F0,
+ '西' : 0xA2F1,
+ '便' : 0xA2F2,
+ '箱' : 0xA2F3,
+ '意' : 0xA2F4,
+ '惊' : 0xA2F5,
+ '话' : 0xA2F6,
+ '左' : 0xA2F7,
+ '右' : 0xA2F8,
+ '赌' : 0xA2F9,
+ '徒' : 0xA2FA,
+ '值' : 0xA2FB,
+ '威' : 0xA2FC,
+ '增' : 0xA2FD,
+ '冰' : 0xA2FE,
+ '结' : 0xA2FF,
+ '授' : 0xA300,
+ '艰' : 0xA301,
+ '苦' : 0xA302,
+ '训' : 0xA303,
+ '练' : 0xA304,
+ '该' : 0xA305,
+ '拥' : 0xA306,
+ '而' : 0xA307,
+ '荣' : 0xA308,
+ '义' : 0xA309,
+ '邪' : 0xA30A,
+ '恶' : 0xA30B,
+ '学' : 0xA30C,
+ '步' : 0xA30D,
+ '曲' : 0xA30E,
+ '烈' : 0xA30F,
+ '安' : 0xA310,
+ '影' : 0xA311,
+ '梦' : 0xA312,
+ '幻' : 0xA313,
+ '镯' : 0xA314,
+ '拔' : 0xA315,
+ '虫' : 0xA316,
+ '员' : 0xA317,
+ '张' : 0xA318,
+ '据' : 0xA319,
+ '翡' : 0xA31A,
+ '翠' : 0xA31B,
+ '伟' : 0xA31C,
+ '树' : 0xA31D,
+ '托' : 0xA31E,
+ '代' : 0xA31F,
+ '传' : 0xA320,
+ '碧' : 0xA321,
+ '商' : 0xA322,
+ '讲' : 0xA323,
+ '妖' : 0xA324,
+ '婆' : 0xA325,
+ '堡' : 0xA326,
+ '男' : 0xA327,
+ '情' : 0xA328,
+ '隆' : 0xA329,
+ '牛' : 0xA32A,
+ '奶' : 0xA32B,
+ '营' : 0xA32C,
+ '养' : 0xA32D,
+ '排' : 0xA32E,
+ '销' : 0xA32F,
+ '售' : 0xA330,
+ '榜' : 0xA331,
+ '朋' : 0xA332,
+ '友' : 0xA333,
+ '搬' : 0xA334,
+ '日' : 0xA335,
+ '客' : 0xA336,
+ '碰' : 0xA337,
+ '烧' : 0xA338,
+ '毁' : 0xA339,
+ '折' : 0xA33A,
+ '断' : 0xA33B,
+ '斗' : 0xA33C,
+ '习' : 0xA33D,
+ '骑' : 0xA33E,
+ '士' : 0xA33F,
+ '又' : 0xA340,
+ '承' : 0xA341,
+ '制' : 0xA342,
+ '尺' : 0xA343,
+ '码' : 0xA344,
+ '护' : 0xA345,
+ '炙' : 0xA346,
+ '侵' : 0xA347,
+ '害' : 0xA348,
+ '底' : 0xA349,
+ '溺' : 0xA34A,
+ '掌' : 0xA34B,
+ '丁' : 0xA34C,
+ '妮' : 0xA34D,
+ '席' : 0xA34E,
+ '性' : 0xA34F,
+ '危' : 0xA350,
+ '往' : 0xA351,
+ '创' : 0xA352,
+ '建' : 0xA353,
+ '娜' : 0xA354,
+ '产' : 0xA355,
+ '罩' : 0xA356,
+ '刚' : 0xA357,
+ '清' : 0xA358,
+ '舒' : 0xA359,
+ '爽' : 0xA35A,
+ '般' : 0xA35B,
+ '暂' : 0xA35C,
+ '脱' : 0xA35D,
+ '参' : 0xA35E,
+ '加' : 0xA35F,
+ '嗯' : 0xA360,
+ '顾' : 0xA361,
+ '片' : 0xA362,
+ '四' : 0xA363,
+ '整' : 0xA364,
+ '三' : 0xA365,
+ '房' : 0xA366,
+ '干' : 0xA367,
+ '稍' : 0xA368,
+ '候' : 0xA369,
+ '赛' : 0xA36A,
+ '鳞' : 0xA36B,
+ '跳' : 0xA36C,
+ '深' : 0xA36D,
+ '歌' : 0xA36E,
+ '伊' : 0xA36F,
+ '阳' : 0xA370,
+ '摇' : 0xA371,
+ '篮' : 0xA372,
+ '雪' : 0xA373,
+ '壮' : 0xA374,
+ '管' : 0xA375,
+ '术' : 0xA376,
+ '接' : 0xA377,
+ '智' : 0xA378,
+ '慧' : 0xA379,
+ '气' : 0xA37A,
+ '疲' : 0xA37B,
+ '惫' : 0xA37C,
+ '治' : 0xA37D,
+ '疗' : 0xA37E,
+ '伤' : 0xA37F,
+ '且' : 0xA380,
+ '硬' : 0xA381,
+ '技' : 0xA382,
+ '斩' : 0xA383,
+ '积' : 0xA384,
+ '蓄' : 0xA385,
+ '直' : 0xA386,
+ '释' : 0xA387,
+ '转' : 0xA388,
+ '效' : 0xA389,
+ '谈' : 0xA38A,
+ '听' : 0xA38B,
+ '束' : 0xA38C,
+ '刻' : 0xA38D,
+ '注' : 0xA38E,
+ '嗨' : 0xA38F,
+ '皇' : 0xA390,
+ '探' : 0xA391,
+ '儿' : 0xA392,
+ '附' : 0xA393,
+ '近' : 0xA394,
+ '半' : 0xA395,
+ '思' : 0xA396,
+ '仅' : 0xA397,
+ '燃' : 0xA398,
+ '紫' : 0xA399,
+ '价' : 0xA39A,
+ '高' : 0xA39B,
+ '百' : 0xA39C,
+ '索' : 0xA39D,
+ '何' : 0xA39E,
+ '输' : 0xA39F,
+ '虽' : 0xA3A0,
+ '惜' : 0xA3A1,
+ '幽' : 0xA3A2,
+ '妙' : 0xA3A3,
+ '愿' : 0xA3A4,
+ '勉' : 0xA3A5,
+ '网' : 0xA3A6,
+ '墙' : 0xA3A7,
+ '布' : 0xA3A8,
+ '藤' : 0xA3A9,
+ '蔓' : 0xA3AA,
+ '平' : 0xA3AB,
+ '爬' : 0xA3AC,
+ '屏' : 0xA3AD,
+ '幕' : 0xA3AE,
+ '顶' : 0xA3AF,
+ '端' : 0xA3B0,
+ '挂' : 0xA3B1,
+ '旧' : 0xA3B2,
+ '梯' : 0xA3B3,
+ '嘿' : 0xA3B4,
+ '饰' : 0xA3B5,
+ '熄' : 0xA3B6,
+ '久' : 0xA3B7,
+ '通' : 0xA3B8,
+ '狭' : 0xA3B9,
+ '路' : 0xA3BA,
+ '慢' : 0xA3BB,
+ '躲' : 0xA3BC,
+ '调' : 0xA3BD,
+ '视' : 0xA3BE,
+ '角' : 0xA3BF,
+ '弯' : 0xA3C0,
+ '旦' : 0xA3C1,
+ '侧' : 0xA3C2,
+ '落' : 0xA3C3,
+ '块' : 0xA3C4,
+ '推' : 0xA3C5,
+ '向' : 0xA3C6,
+ '兴' : 0xA3C7,
+ '引' : 0xA3C8,
+ '爆' : 0xA3C9,
+ '呢' : 0xA3CA,
+ '山' : 0xA3CB,
+ '坑' : 0xA3CC,
+ '楼' : 0xA3CD,
+ '绝' : 0xA3CE,
+ '总' : 0xA3CF,
+ '巧' : 0xA3D0,
+ '脸' : 0xA3D1,
+ '私' : 0xA3D2,
+ '语' : 0xA3D3,
+ '足' : 0xA3D4,
+ '导' : 0xA3D5,
+ '写' : 0xA3D6,
+ '险' : 0xA3D7,
+ '雕' : 0xA3D8,
+ '流' : 0xA3D9,
+ '粘' : 0xA3DA,
+ '浑' : 0xA3DB,
+ '电' : 0xA3DC,
+ '尾' : 0xA3DD,
+ '巴' : 0xA3DE,
+ '几' : 0xA3DF,
+ '瞧' : 0xA3E0,
+ '旗' : 0xA3E1,
+ '哪' : 0xA3E2,
+ '召' : 0xA3E3,
+ '跟' : 0xA3E4,
+ '拜' : 0xA3E5,
+ '访' : 0xA3E6,
+ '牧' : 0xA3E7,
+ '爸' : 0xA3E8,
+ '拯' : 0xA3E9,
+ '窟' : 0xA3EA,
+ '卜' : 0xA3EB,
+ '肚' : 0xA3EC,
+ '白' : 0xA3ED,
+ '马' : 0xA3EE,
+ '丢' : 0xA3EF,
+ '河' : 0xA3F0,
+ '殿' : 0xA3F1,
+ '村' : 0xA3F2,
+ '云' : 0xA3F3,
+ '吹' : 0xA3F4,
+ '寒' : 0xA3F5,
+ '庄' : 0xA3F6,
+ '谁' : 0xA3F7,
+ '教' : 0xA3F8,
+ '沙' : 0xA3F9,
+ '漠' : 0xA3FA,
+ '盖' : 0xA3FB,
+ '侬' : 0xA3FC,
+ '夫' : 0xA3FD,
+ '等' : 0xA3FE,
+ '介' : 0xA3FF,
+ '联' : 0xA400,
+ '声' : 0xA401,
+ '嘻' : 0xA402,
+ '曾' : 0xA403,
+ '领' : 0xA404,
+ '统' : 0xA405,
+ '疆' : 0xA406,
+ '怕' : 0xA407,
+ '鸟' : 0xA408,
+ '黑' : 0xA409,
+ '睛' : 0xA40A,
+ '暴' : 0xA40B,
+ '雨' : 0xA40C,
+ '息' : 0xA40D,
+ '初' : 0xA40E,
+ '六' : 0xA40F,
+ '聚' : 0xA410,
+ '封' : 0xA411,
+ '印' : 0xA412,
+ '七' : 0xA413,
+ '认' : 0xA414,
+ '识' : 0xA415,
+ '必' : 0xA416,
+ '须' : 0xA417,
+ '未' : 0xA418,
+ '梭' : 0xA419,
+ '另' : 0xA41A,
+ '渡' : 0xA41B,
+ '船' : 0xA41C,
+ '乘' : 0xA41D,
+ '艘' : 0xA41E,
+ '咯' : 0xA41F,
+ '扇' : 0xA420,
+ '许' : 0xA421,
+ '鬼' : 0xA422,
+ '板' : 0xA423,
+ '画' : 0xA424,
+ '廊' : 0xA425,
+ '扭' : 0xA426,
+ '天' : 0xA427,
+ '味' : 0xA428,
+ '冻' : 0xA429,
+ '音' : 0xA42A,
+ '座' : 0xA42B,
+ '锈' : 0xA42C,
+ '漩' : 0xA42D,
+ '涡' : 0xA42E,
+ '吞' : 0xA42F,
+ '嘛' : 0xA430,
+ '牢' : 0xA431,
+ '固' : 0xA432,
+ '殊' : 0xA433,
+ '静' : 0xA434,
+ '墓' : 0xA435,
+ '培' : 0xA436,
+ '睡' : 0xA437,
+ '掘' : 0xA438,
+ '阅' : 0xA439,
+ '读' : 0xA43A,
+ '式' : 0xA43B,
+ '租' : 0xA43C,
+ '货' : 0xA43D,
+ '款' : 0xA43E,
+ '仍' : 0xA43F,
+ ';' : 0xA440,
+ '载' : 0xA441,
+ '贪' : 0xA442,
+ '婪' : 0xA443,
+ '仇' : 0xA444,
+ '恨' : 0xA445,
+ '血' : 0xA446,
+ '腥' : 0xA447,
+ '历' : 0xA448,
+ '史' : 0xA449,
+ '诡' : 0xA44A,
+ '计' : 0xA44B,
+ '谜' : 0xA44C,
+ '题' : 0xA44D,
+ '亡' : 0xA44E,
+ '闭' : 0xA44F,
+ '今' : 0xA450,
+ '业' : 0xA451,
+ '早' : 0xA452,
+ '招' : 0xA453,
+ '聘' : 0xA454,
+ '兼' : 0xA455,
+ '职' : 0xA456,
+ '杂' : 0xA457,
+ '指' : 0xA458,
+ '启' : 0xA459,
+ '遗' : 0xA45A,
+ '极' : 0xA45B,
+ '亮' : 0xA45C,
+ '照' : 0xA45D,
+ '闯' : 0xA45E,
+ '穴' : 0xA45F,
+ '伏' : 0xA460,
+ '阻' : 0xA461,
+ '拦' : 0xA462,
+ '朝' : 0xA463,
+ '囚' : 0xA464,
+ '室' : 0xA465,
+ '贝' : 0xA466,
+ '泊' : 0xA467,
+ '泉' : 0xA468,
+ '黎' : 0xA469,
+ '童' : 0xA46A,
+ '纯' : 0xA46B,
+ '洁' : 0xA46C,
+ '翻' : 0xA46D,
+ '嘴' : 0xA46E,
+ '陷' : 0xA46F,
+ '野' : 0xA470,
+ '研' : 0xA471,
+ '究' : 0xA472,
+ '考' : 0xA473,
+ '坏' : 0xA474,
+ '竟' : 0xA475,
+ '坐' : 0xA476,
+ '玛' : 0xA477,
+ '录' : 0xA478,
+ '钓' : 0xA479,
+ '磅' : 0xA47A,
+ '分' : 0xA47B,
+ '纹' : 0xA47C,
+ '誓' : 0xA47D,
+ '忠' : 0xA47E,
+ '哈' : 0xA47F,
+ '眠' : 0xA480,
+ '瀑' : 0xA481,
+ '国' : 0xA482,
+ '务' : 0xA483,
+ '盯' : 0xA484,
+ '毯' : 0xA485,
+ '踩' : 0xA486,
+ '资' : 0xA487,
+ '瞎' : 0xA488,
+ '难' : 0xA489,
+ '倒' : 0xA48A,
+ '阱' : 0xA48B,
+ '塘' : 0xA48C,
+ '屈' : 0xA48D,
+ '镇' : 0xA48E,
+ '径' : 0xA48F,
+ '窄' : 0xA490,
+ '慌' : 0xA491,
+ '允' : 0xA492,
+ '禁' : 0xA493,
+ '激' : 0xA494,
+ '颁' : 0xA495,
+ '喷' : 0xA496,
+ '扰' : 0xA497,
+ '砍' : 0xA498,
+ '持' : 0xA499,
+ '草' : 0xA49A,
+ '泰' : 0xA49B,
+ '沿' : 0xA49C,
+ '实' : 0xA49D,
+ '峡' : 0xA49E,
+ '谷' : 0xA49F,
+ '册' : 0xA4A0,
+ '追' : 0xA4A1,
+ '赶' : 0xA4A2,
+ '市' : 0xA4A3,
+ '蜃' : 0xA4A4,
+ '崖' : 0xA4A5,
+ '灼' : 0xA4A6,
+ '宣' : 0xA4A7,
+ '疯' : 0xA4A8,
+ '狂' : 0xA4A9,
+ '滚' : 0xA4AA,
+ '伞' : 0xA4AB,
+ '脚' : 0xA4AC,
+ '共' : 0xA4AD,
+ '部' : 0xA4AE,
+ '免' : 0xA4AF,
+ '规' : 0xA4B0,
+ '递' : 0xA4B1,
+ '登' : 0xA4B2,
+ '补' : 0xA4B3,
+ '肉' : 0xA4B4,
+ '歉' : 0xA4B5,
+ '刺' : 0xA4B6,
+ '杀' : 0xA4B7,
+ '节' : 0xA4B8,
+ '横' : 0xA4B9,
+ '纵' : 0xA4BA,
+ '礼' : 0xA4BB,
+ '貌' : 0xA4BC,
+ '米' : 0xA4BD,
+ '无' : 0xA4BE,
+ '孪' : 0xA4BF,
+ '姐' : 0xA4C0,
+ '妹' : 0xA4C1,
+ '改' : 0xA4C2,
+ '池' : 0xA4C3,
+ '胆' : 0xA4C4,
+ '跃' : 0xA4C5,
+ '任' : 0xA4C6,
+ '句' : 0xA4C7,
+ '线' : 0xA4C8,
+ '范' : 0xA4C9,
+ '逃' : 0xA4CA,
+ '期' : 0xA4CB,
+ '待' : 0xA4CC,
+ '丽' : 0xA4CD,
+ '问' : 0xA4CE,
+ '闲' : 0xA4CF,
+ '泳' : 0xA4D0,
+ '连' : 0xA4D1,
+ '北' : 0xA4D2,
+ '棵' : 0xA4D3,
+ '锐' : 0xA4D4,
+ '虑' : 0xA4D5,
+ '挤' : 0xA4D6,
+ '障' : 0xA4D7,
+ '碍' : 0xA4D8,
+ '盔' : 0xA4D9,
+ '甲' : 0xA4DA,
+ '假' : 0xA4DB,
+ '设' : 0xA4DC,
+ '温' : 0xA4DD,
+ '际' : 0xA4DE,
+ '顽' : 0xA4DF,
+ '皮' : 0xA4E0,
+ '姆' : 0xA4E1,
+ '违' : 0xA4E2,
+ '盗' : 0xA4E3,
+ '贼' : 0xA4E4,
+ '蝴' : 0xA4E5,
+ '蝶' : 0xA4E6,
+ '崇' : 0xA4E7,
+ '象' : 0xA4E8,
+ '猫' : 0xA4E9,
+ '鹰' : 0xA4EA,
+ '凯' : 0xA4EB,
+ '普' : 0xA4EC,
+ '・' : 0xA4ED,
+ '博' : 0xA4EE,
+ '古' : 0xA4EF,
+ '化' : 0xA4F0,
+ '笨' : 0xA4F1,
+ '朗' : 0xA4F2,
+ '匹' : 0xA4F3,
+ '雄' : 0xA4F4,
+ '赚' : 0xA4F5,
+ '寄' : 0xA4F6,
+ '卵' : 0xA4F7,
+ '幼' : 0xA4F8,
+ '突' : 0xA4F9,
+ '袭' : 0xA4FA,
+ '腹' : 0xA4FB,
+ '绦' : 0xA4FC,
+ '食' : 0xA4FD,
+ '笔' : 0xA4FE,
+ '竖' : 0xA4FF,
+ '枯' : 0xA500,
+ '矮' : 0xA501,
+ '丛' : 0xA502,
+ '吃' : 0xA503,
+ '震' : 0xA504,
+ '撼' : 0xA505,
+ '吸' : 0xA506,
+ '败' : 0xA507,
+ '蜥' : 0xA508,
+ '蜴' : 0xA509,
+ '蝙' : 0xA50A,
+ '蝠' : 0xA50B,
+ '否' : 0xA50C,
+ '则' : 0xA50D,
+ '阿' : 0xA50E,
+ '莫' : 0xA50F,
+ '斯' : 0xA510,
+ '母' : 0xA511,
+ '绕' : 0xA512,
+ '触' : 0xA513,
+ '傻' : 0xA514,
+ '遭' : 0xA515,
+ '汀' : 0xA516,
+ '幅' : 0xA517,
+ '敬' : 0xA518,
+ '诱' : 0xA519,
+ '泡' : 0xA51A,
+ '挡' : 0xA51B,
+ '沃' : 0xA51C,
+ '衣' : 0xA51D,
+ '炬' : 0xA51E,
+ '黏' : 0xA51F,
+ '背' : 0xA520,
+ '抵' : 0xA521,
+ '权' : 0xA522,
+ '核' : 0xA523,
+ '挑' : 0xA524,
+ '壳' : 0xA525,
+ '肌' : 0xA526,
+ '缩' : 0xA527,
+ '邦' : 0xA528,
+ '苏' : 0xA529,
+ '透' : 0xA52A,
+ '僵' : 0xA52B,
+ '尸' : 0xA52C,
+ '麻' : 0xA52D,
+ '痹' : 0xA52E,
+ '咬' : 0xA52F,
+ '吉' : 0xA530,
+ '乃' : 0xA531,
+ '穷' : 0xA532,
+ '尽' : 0xA533,
+ '裂' : 0xA534,
+ '拢' : 0xA535,
+ '娃' : 0xA536,
+ '傀' : 0xA537,
+ '儡' : 0xA538,
+ '亲' : 0xA539,
+ '巫' : 0xA53A,
+ '低' : 0xA53B,
+ '骨' : 0xA53C,
+ '斧' : 0xA53D,
+ '漏' : 0xA53E,
+ '莱' : 0xA53F,
+ '彼' : 0xA540,
+ '塔' : 0xA541,
+ '扫' : 0xA542,
+ '描' : 0xA543,
+ '烟' : 0xA544,
+ '蛇' : 0xA545,
+ '弗' : 0xA546,
+ '扎' : 0xA547,
+ '挺' : 0xA548,
+ '八' : 0xA549,
+ '爪' : 0xA54A,
+ '迪' : 0xA54B,
+ '困' : 0xA54C,
+ '陆' : 0xA54D,
+ '嗜' : 0xA54E,
+ '仙' : 0xA54F,
+ '狼' : 0xA550,
+ '懈' : 0xA551,
+ '贩' : 0xA552,
+ '麦' : 0xA553,
+ '判' : 0xA554,
+ '乔' : 0xA555,
+ '绽' : 0xA556,
+ '速' : 0xA557,
+ '嗄' : 0xA558,
+ '羞' : 0xA559,
+ '永' : 0xA55A,
+ '稻' : 0xA55B,
+ '终' : 0xA55C,
+ '薇' : 0xA55D,
+ '呵' : 0xA55E,
+ '父' : 0xA55F,
+ '程' : 0xA560,
+ '工' : 0xA561,
+ '存' : 0xA562,
+ '氛' : 0xA563,
+ '笼' : 0xA564,
+ '令' : 0xA565,
+ '敏' : 0xA566,
+ '项' : 0xA567,
+ '欧' : 0xA568,
+ '谅' : 0xA569,
+ '众' : 0xA56A,
+ '悍' : 0xA56B,
+ '怎' : 0xA56C,
+ '亏' : 0xA56D,
+ '掏' : 0xA56E,
+ '毕' : 0xA56F,
+ '缓' : 0xA570,
+ '冲' : 0xA571,
+ '酷' : 0xA572,
+ '俯' : 0xA573,
+ '瞰' : 0xA574,
+ '哼' : 0xA575,
+ '蚀' : 0xA576,
+ '功' : 0xA577,
+ '糟' : 0xA578,
+ '呸' : 0xA579,
+ '黄' : 0xA57A,
+ '类' : 0xA57B,
+ '篇' : 0xA57C,
+ '论' : 0xA57D,
+ '控' : 0xA57E,
+ '括' : 0xA57F,
+ '冒' : 0xA580,
+ '度' : 0xA581,
+ '检' : 0xA582,
+ '单' : 0xA583,
+ '懂' : 0xA584,
+ '屋' : 0xA585,
+ '户' : 0xA586,
+ '致' : 0xA587,
+ '腾' : 0xA588,
+ '模' : 0xA589,
+ '嗒' : 0xA58A,
+ '咔' : 0xA58B,
+ '咋' : 0xA58C,
+ '萎' : 0xA58D,
+ '紧' : 0xA58E,
+ '决' : 0xA58F,
+ '呆' : 0xA590,
+ '闷' : 0xA591,
+ '畏' : 0xA592,
+ '骗' : 0xA593,
+ '苗' : 0xA594,
+ '茁' : 0xA595,
+ '算' : 0xA596,
+ '猜' : 0xA597,
+ '残' : 0xA598,
+ '妇' : 0xA599,
+ '婴' : 0xA59A,
+ '蔽' : 0xA59B,
+ '唯' : 0xA59C,
+ '响' : 0xA59D,
+ '抚' : 0xA59E,
+ '吵' : 0xA59F,
+ '境' : 0xA5A0,
+ '隙' : 0xA5A1,
+ '逝' : 0xA5A2,
+ '忆' : 0xA5A3,
+ '喂' : 0xA5A4,
+ '辈' : 0xA5A5,
+ '肩' : 0xA5A6,
+ '洋' : 0xA5A7,
+ '溢' : 0xA5A8,
+ '确' : 0xA5A9,
+ '迹' : 0xA5AA,
+ '凝' : 0xA5AB,
+ '髓' : 0xA5AC,
+ '混' : 0xA5AD,
+ '沌' : 0xA5AE,
+ '降' : 0xA5AF,
+ '健' : 0xA5B0,
+ '耕' : 0xA5B1,
+ '耘' : 0xA5B2,
+ '星' : 0xA5B3,
+ '倾' : 0xA5B4,
+ '沛' : 0xA5B5,
+ '础' : 0xA5B6,
+ '堂' : 0xA5B7,
+ '万' : 0xA5B8,
+ '宗' : 0xA5B9,
+ '源' : 0xA5BA,
+ '本' : 0xA5BB,
+ '替' : 0xA5BC,
+ '缝' : 0xA5BD,
+ '惩' : 0xA5BE,
+ '罚' : 0xA5BF,
+ '遇' : 0xA5C0,
+ '懒' : 0xA5C1,
+ '惰' : 0xA5C2,
+ '衷' : 0xA5C3,
+ '势' : 0xA5C4,
+ '维' : 0xA5C5,
+ '秩' : 0xA5C6,
+ '序' : 0xA5C7,
+ '抗' : 0xA5C8,
+ '衡' : 0xA5C9,
+ '旅' : 0xA5CA,
+ '顺' : 0xA5CB,
+ '叛' : 0xA5CC,
+ '愤' : 0xA5CD,
+ '辽' : 0xA5CE,
+ '阔' : 0xA5CF,
+ '茂' : 0xA5D0,
+ '称' : 0xA5D1,
+ '讨' : 0xA5D2,
+ '厌' : 0xA5D3,
+ '靶' : 0xA5D4,
+ '饲' : 0xA5D5,
+ '求' : 0xA5D6,
+ '材' : 0xA5D7,
+ '耶' : 0xA5D8,
+ '谊' : 0xA5D9,
+ '噓' : 0xA5DA,
+ '遍' : 0xA5DB,
+ '谱' : 0xA5DC,
+ '议' : 0xA5DD,
+ '吼' : 0xA5DE,
+ '薄' : 0xA5DF,
+ '饶' : 0xA5E0,
+ '稽' : 0xA5E1,
+ '齐' : 0xA5E2,
+ '懦' : 0xA5E3,
+ '抱' : 0xA5E4,
+ '千' : 0xA5E5,
+ '辛' : 0xA5E6,
+ '漂' : 0xA5E7,
+ '环' : 0xA5E8,
+ '配' : 0xA5E9,
+ '帝' : 0xA5EA,
+ '焦' : 0xA5EB,
+ '乎' : 0xA5EC,
+ '欠' : 0xA5ED,
+ '驯' : 0xA5EE,
+ '圈' : 0xA5EF,
+ '局' : 0xA5F0,
+ '咩' : 0xA5F1,
+ '既' : 0xA5F2,
+ '劳' : 0xA5F3,
+ '祭' : 0xA5F4,
+ '伪' : 0xA5F5,
+ '弃' : 0xA5F6,
+ '耐' : 0xA5F7,
+ '岗' : 0xA5F8,
+ '唔' : 0xA5F9,
+ '佳' : 0xA5FA,
+ '搭' : 0xA5FB,
+ '档' : 0xA5FC,
+ '负' : 0xA5FD,
+ '责' : 0xA5FE,
+ '攀' : 0xA5FF,
+ '绍' : 0xA600,
+ '忙' : 0xA601,
+ '提' : 0xA602,
+ '缠' : 0xA603,
+ '唉' : 0xA604,
+ '亳' : 0xA605,
+ '毛' : 0xA606,
+ '笑' : 0xA607,
+ '欣' : 0xA608,
+ '赏' : 0xA609,
+ '怜' : 0xA60A,
+ '瓜' : 0xA60B,
+ '奔' : 0xA60C,
+ '啧' : 0xA60D,
+ '踢' : 0xA60E,
+ '志' : 0xA60F,
+ '宜' : 0xA610,
+ '仿' : 0xA611,
+ '楚' : 0xA612,
+ '挖' : 0xA613,
+ '由' : 0xA614,
+ '捕' : 0xA615,
+ '播' : 0xA616,
+ '谣' : 0xA617,
+ '勤' : 0xA618,
+ '陌' : 0xA619,
+ '杰' : 0xA61A,
+ '骏' : 0xA61B,
+ '鞭' : 0xA61C,
+ '抽' : 0xA61D,
+ '享' : 0xA61E,
+ '栏' : 0xA61F,
+ '逛' : 0xA620,
+ '汊' : 0xA621,
+ '烦' : 0xA622,
+ '匆' : 0xA623,
+ '妈' : 0xA624,
+ '唱' : 0xA625,
+ '墟' : 0xA626,
+ '粗' : 0xA627,
+ '虐' : 0xA628,
+ '乡' : 0xA629,
+ '彻' : 0xA62A,
+ '咕' : 0xA62B,
+ '哝' : 0xA62C,
+ '简' : 0xA62D,
+ '优' : 0xA62E,
+ '惠' : 0xA62F,
+ '民' : 0xA630,
+ '灰' : 0xA631,
+ '聪' : 0xA632,
+ '南' : 0xA633,
+ '澈' : 0xA634,
+ '卫' : 0xA635,
+ '熟' : 0xA636,
+ '悉' : 0xA637,
+ '故' : 0xA638,
+ '乌' : 0xA639,
+ '兆' : 0xA63A,
+ '企' : 0xA63B,
+ '抢' : 0xA63C,
+ '夺' : 0xA63D,
+ '拼' : 0xA63E,
+ '粉' : 0xA63F,
+ '番' : 0xA640,
+ '群' : 0xA641,
+ '秒' : 0xA642,
+ '料' : 0xA643,
+ '肯' : 0xA644,
+ '赋' : 0xA645,
+ '婚' : 0xA646,
+ '诚' : 0xA647,
+ '邀' : 0xA648,
+ '斜' : 0xA649,
+ '诞' : 0xA64A,
+ '及' : 0xA64B,
+ '盛' : 0xA64C,
+ '典' : 0xA64D,
+ '拍' : 0xA64E,
+ '轰' : 0xA64F,
+ '植' : 0xA650,
+ '矿' : 0xA651,
+ '采' : 0xA652,
+ '阴' : 0xA653,
+ '罕' : 0xA654,
+ '昏' : 0xA655,
+ '压' : 0xA656,
+ '悦' : 0xA657,
+ '饿' : 0xA658,
+ '忍' : 0xA659,
+ '咳' : 0xA65A,
+ '弄' : 0xA65B,
+ '舔' : 0xA65C,
+ '醉' : 0xA65D,
+ '怀' : 0xA65E,
+ '尊' : 0xA65F,
+ '严' : 0xA660,
+ '滋' : 0xA661,
+ '农' : 0xA662,
+ '饥' : 0xA663,
+ '沮' : 0xA664,
+ '丧' : 0xA665,
+ '奋' : 0xA666,
+ '省' : 0xA667,
+ '撑' : 0xA668,
+ '脑' : 0xA669,
+ '灯' : 0xA66A,
+ '隧' : 0xA66B,
+ '派' : 0xA66C,
+ '狗' : 0xA66D,
+ '呜' : 0xA66E,
+ '咣' : 0xA66F,
+ '警' : 0xA670,
+ '挪' : 0xA671,
+ '窜' : 0xA672,
+ '峙' : 0xA673,
+ '含' : 0xA674,
+ '痛' : 0xA675,
+ '夸' : 0xA676,
+ '艺' : 0xA677,
+ '撒' : 0xA678,
+ '谎' : 0xA679,
+ '昨' : 0xA67A,
+ '炎' : 0xA67B,
+ '痒' : 0xA67C,
+ '泪' : 0xA67D,
+ '稳' : 0xA67E,
+ '况' : 0xA67F,
+ '磨' : 0xA680,
+ '休' : 0xA681,
+ '柱' : 0xA682,
+ '敲' : 0xA683,
+ '油' : 0xA684,
+ '菜' : 0xA685,
+ '盟' : 0xA686,
+ '骄' : 0xA687,
+ '傲' : 0xA688,
+ '献' : 0xA689,
+ '噢' : 0xA68A,
+ '窒' : 0xA68B,
+ '医' : 0xA68C,
+ '甜' : 0xA68D,
+ '鰓' : 0xA68E,
+ '恼' : 0xA68F,
+ '耽' : 0xA690,
+ '搁' : 0xA691,
+ '孤' : 0xA692,
+ '丈' : 0xA693,
+ '订' : 0xA694,
+ '戒' : 0xA695,
+ '贵' : 0xA696,
+ '财' : 0xA697,
+ '惹' : 0xA698,
+ '腐' : 0xA699,
+ '剂' : 0xA69A,
+ '融' : 0xA69B,
+ '厚' : 0xA69C,
+ '映' : 0xA69D,
+ '妻' : 0xA69E,
+ '狠' : 0xA69F,
+ '泄' : 0xA6A0,
+ '咿' : 0xA6A1,
+ '瞒' : 0xA6A2,
+ '咽' : 0xA6A3,
+ '恭' : 0xA6A4,
+ '涨' : 0xA6A5,
+ '嘎' : 0xA6A6,
+ '悔' : 0xA6A7,
+ '犹' : 0xA6A8,
+ '豫' : 0xA6A9,
+ '呃' : 0xA6AA,
+ '糕' : 0xA6AB,
+ '埃' : 0xA6AC,
+ '荡' : 0xA6AD,
+ '漾' : 0xA6AE,
+ '饵' : 0xA6AF,
+ '晃' : 0xA6B0,
+ '约' : 0xA6B1,
+ '专' : 0xA6B2,
+ '剔' : 0xA6B3,
+ '窍' : 0xA6B4,
+ '.' : 0xA6B5,
+ '乱' : 0xA6B6,
+ '甩' : 0xA6B7,
+ '鳅' : 0xA6B8,
+ '剧' : 0xA6B9,
+ '竿' : 0xA6BA,
+ '杆' : 0xA6BB,
+ '符' : 0xA6BC,
+ '呱' : 0xA6BD,
+ '团' : 0xA6BE,
+ '饱' : 0xA6BF,
+ '犯' : 0xA6C0,
+ '肃' : 0xA6C1,
+ '啵' : 0xA6C2,
+ '吟' : 0xA6C3,
+ '月' : 0xA6C4,
+ '诗' : 0xA6C5,
+ '碑' : 0xA6C6,
+ '奥' : 0xA6C7,
+ '扬' : 0xA6C8,
+ '舍' : 0xA6C9,
+ '副' : 0xA6CA,
+ '袖' : 0xA6CB,
+ '夏' : 0xA6CC,
+ '赖' : 0xA6CD,
+ '仆' : 0xA6CE,
+ '摆' : 0xA6CF,
+ '雇' : 0xA6D0,
+ '疙' : 0xA6D1,
+ '瘩' : 0xA6D2,
+ '居' : 0xA6D3,
+ '簧' : 0xA6D4,
+ '车' : 0xA6D5,
+ '剩' : 0xA6D6,
+ '玻' : 0xA6D7,
+ '璃' : 0xA6D8,
+ '赔' : 0xA6D9,
+ '欺' : 0xA6DA,
+ '育' : 0xA6DB,
+ '珍' : 0xA6DC,
+ '床' : 0xA6DD,
+ '蛮' : 0xA6DE,
+ '啄' : 0xA6DF,
+ '、' : 0xA6E0,
+ '稀' : 0xA6E1,
+ '栋' : 0xA6E2,
+ '柜' : 0xA6E3,
+ '鼻' : 0xA6E4,
+ '厉' : 0xA6E5,
+ '乏' : 0xA6E6,
+ '饭' : 0xA6E7,
+ '胡' : 0xA6E8,
+ '叮' : 0xA6E9,
+ '咚' : 0xA6EA,
+ '兵' : 0xA6EB,
+ '勃' : 0xA6EC,
+ '苛' : 0xA6ED,
+ '薪' : 0xA6EE,
+ '痴' : 0xA6EF,
+ '挣' : 0xA6F0,
+ '馊' : 0xA6F1,
+ '扑' : 0xA6F2,
+ '良' : 0xA6F3,
+ '竭' : 0xA6F4,
+ '慷' : 0xA6F5,
+ '慨' : 0xA6F6,
+ '欲' : 0xA6F7,
+ '愚' : 0xA6F8,
+ '蠢' : 0xA6F9,
+ '嘉' : 0xA6FA,
+ '监' : 0xA6FB,
+ '狱' : 0xA6FC,
+ '喔' : 0xA6FD,
+ '港' : 0xA6FE,
+ '逆' : 0xA6FF,
+ '误' : 0xA700,
+ '独' : 0xA701,
+ '划' : 0xA702,
+ '措' : 0xA703,
+ '颜' : 0xA704,
+ '奴' : 0xA705,
+ '罢' : 0xA706,
+ '洗' : 0xA707,
+ '俊' : 0xA708,
+ '罪' : 0xA709,
+ '偿' : 0xA70A,
+ '牺' : 0xA70B,
+ '牲' : 0xA70C,
+ '劲' : 0xA70D,
+ '岁' : 0xA70E,
+ '恩' : 0xA70F,
+ '账' : 0xA710,
+ '珂' : 0xA711,
+ '艾' : 0xA712,
+ '组' : 0xA713,
+ '织' : 0xA714,
+ '伯' : 0xA715,
+ '社' : 0xA716,
+ '架' : 0xA717,
+ '桥' : 0xA718,
+ '碟' : 0xA719,
+ '卑' : 0xA71A,
+ '鄙' : 0xA71B,
+ '臭' : 0xA71C,
+ '占' : 0xA71D,
+ '讶' : 0xA71E,
+ '兽' : 0xA71F,
+ '刷' : 0xA720,
+ '竞' : 0xA721,
+ '帐' : 0xA722,
+ '篷' : 0xA723,
+ '迟' : 0xA724,
+ '繁' : 0xA725,
+ '倦' : 0xA726,
+ '罐' : 0xA727,
+ '牌' : 0xA728,
+ '晨' : 0xA729,
+ '景' : 0xA72A,
+ '田' : 0xA72B,
+ '孔' : 0xA72C,
+ '钻' : 0xA72D,
+ '浓' : 0xA72E,
+ '盒' : 0xA72F,
+ '溜' : 0xA730,
+ '街' : 0xA731,
+ '概' : 0xA732,
+ '盹' : 0xA733,
+ '敞' : 0xA734,
+ '扉' : 0xA735,
+ '文' : 0xA736,
+ '撞' : 0xA737,
+ '姑' : 0xA738,
+ '娘' : 0xA739,
+ '糊' : 0xA73A,
+ '涂' : 0xA73B,
+ '依' : 0xA73C,
+ '辐' : 0xA73D,
+ '微' : 0xA73E,
+ '汇' : 0xA73F,
+ '缚' : 0xA740,
+ '宰' : 0xA741,
+ '摸' : 0xA742,
+ '侍' : 0xA743,
+ '垒' : 0xA744,
+ '扮' : 0xA745,
+ '惕' : 0xA746,
+ '估' : 0xA747,
+ '执' : 0xA748,
+ '悲' : 0xA749,
+ '拖' : 0xA74A,
+ '累' : 0xA74B,
+ '弥' : 0xA74C,
+ '渴' : 0xA74D,
+ '班' : 0xA74E,
+ '搞' : 0xA74F,
+ '谛' : 0xA750,
+ '哀' : 0xA751,
+ '圆' : 0xA752,
+ '鸣' : 0xA753,
+ '俩' : 0xA754,
+ '善' : 0xA755,
+ '塌' : 0xA756,
+ '埋' : 0xA757,
+ '孙' : 0xA758,
+ '凶' : 0xA759,
+ '聊' : 0xA75A,
+ '寃' : 0xA75B,
+ '怨' : 0xA75C,
+ '购' : 0xA75D,
+ '涌' : 0xA75E,
+ '劈' : 0xA75F,
+ '狐' : 0xA760,
+ '狸' : 0xA761,
+ '票' : 0xA762,
+ '闻' : 0xA763,
+ '哟' : 0xA764,
+ '唬' : 0xA765,
+ '摘' : 0xA766,
+ '愉' : 0xA767,
+ '呦' : 0xA768,
+ '棺' : 0xA769,
+ '溶' : 0xA76A,
+ '褐' : 0xA76B,
+ '肤' : 0xA76C,
+ '颤' : 0xA76D,
+ '逗' : 0xA76E,
+ '娶' : 0xA76F,
+ '逼' : 0xA770,
+ '悠' : 0xA771,
+ '蒙' : 0xA772,
+ '漆' : 0xA773,
+ '彩' : 0xA774,
+ '丰' : 0xA775,
+}
diff --git a/assets/text/charmap.jpn.txt b/assets/text/charmap.jpn.txt
new file mode 100644
index 0000000000..f615e8807f
--- /dev/null
+++ b/assets/text/charmap.jpn.txt
@@ -0,0 +1,20 @@
+# Determines how certain text sequences should be encoded for the JPN text encoding.
+{
+ '\n' : 0x000A,
+
+ '[A]' : 0x839F,
+ '[B]' : 0x83A0,
+ '[C]' : 0x83A1,
+ '[L]' : 0x83A2,
+ '[R]' : 0x83A3,
+ '[Z]' : 0x83A4,
+ '[C-Up]' : 0x83A5,
+ '[C-Down]' : 0x83A6,
+ '[C-Left]' : 0x83A7,
+ '[C-Right]' : 0x83A8,
+ '▼' : 0x83A9,
+ '[Control-Pad]' : 0x83AA,
+
+ # Possibly from a SHIFT-JIS extension, python doesn't have builtin support
+ '┯' : 0x86D3,
+}
diff --git a/assets/text/charmap.nes.txt b/assets/text/charmap.nes.txt
new file mode 100644
index 0000000000..1dd6445712
--- /dev/null
+++ b/assets/text/charmap.nes.txt
@@ -0,0 +1,50 @@
+# Determines how certain text sequences should be encoded for the NES text encoding.
+{
+ '\n' : 0x01,
+
+ '[A]' : 0x9F,
+ '[B]' : 0xA0,
+ '[C]' : 0xA1,
+ '[L]' : 0xA2,
+ '[R]' : 0xA3,
+ '[Z]' : 0xA4,
+ '[C-Up]' : 0xA5,
+ '[C-Down]' : 0xA6,
+ '[C-Left]' : 0xA7,
+ '[C-Right]' : 0xA8,
+ '▼' : 0xA9,
+ '[Control-Pad]' : 0xAA,
+ '[D-Pad]' : 0xAB,
+
+ 'À' : 0x80,
+ 'î' : 0x81,
+ 'Â' : 0x82,
+ 'Ä' : 0x83,
+ 'Ç' : 0x84,
+ 'È' : 0x85,
+ 'É' : 0x86,
+ 'Ê' : 0x87,
+ 'Ë' : 0x88,
+ 'Ï' : 0x89,
+ 'Ô' : 0x8A,
+ 'Ö' : 0x8B,
+ 'Ù' : 0x8C,
+ 'Û' : 0x8D,
+ 'Ü' : 0x8E,
+ 'ß' : 0x8F,
+ 'à' : 0x90,
+ 'á' : 0x91,
+ 'â' : 0x92,
+ 'ä' : 0x93,
+ 'ç' : 0x94,
+ 'è' : 0x95,
+ 'é' : 0x96,
+ 'ê' : 0x97,
+ 'ë' : 0x98,
+ 'ï' : 0x99,
+ 'ô' : 0x9A,
+ 'ö' : 0x9B,
+ 'ù' : 0x9C,
+ 'û' : 0x9D,
+ 'ü' : 0x9E,
+}
diff --git a/assets/text/charmap.txt b/assets/text/charmap.txt
deleted file mode 100644
index 1e7260a7c7..0000000000
--- a/assets/text/charmap.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-# Determines how certain text sequences should be encoded. The text sequence is
-# converted to either the first or second tuple element based on whether the
-# target encoding is the "wide" encoding. The first element is for the non-wide
-# encoding, used for all languages besides JP, while the second element is for
-# the wide encoding, used for JP.
-{
- '\n' : (0x01, 0x000A),
-
- '[A]' : (0x9F, 0x839F),
- '[B]' : (0xA0, 0x83A0),
- '[C]' : (0xA1, 0x83A1),
- '[L]' : (0xA2, 0x83A2),
- '[R]' : (0xA3, 0x83A3),
- '[Z]' : (0xA4, 0x83A4),
- '[C-Up]' : (0xA5, 0x83A5),
- '[C-Down]' : (0xA6, 0x83A6),
- '[C-Left]' : (0xA7, 0x83A7),
- '[C-Right]' : (0xA8, 0x83A8),
- '▼' : (0xA9, 0x83A9),
- '[Control-Pad]' : (0xAA, 0x83AA),
- '[D-Pad]' : (0xAB, None),
-
- # Possibly from a SHIFT-JIS extension, python doesn't have builtin support
- '┯' : (None, 0x86D3),
-
- 'À' : (0x80, None),
- 'î' : (0x81, None),
- 'Â' : (0x82, None),
- 'Ä' : (0x83, None),
- 'Ç' : (0x84, None),
- 'È' : (0x85, None),
- 'É' : (0x86, None),
- 'Ê' : (0x87, None),
- 'Ë' : (0x88, None),
- 'Ï' : (0x89, None),
- 'Ô' : (0x8A, None),
- 'Ö' : (0x8B, None),
- 'Ù' : (0x8C, None),
- 'Û' : (0x8D, None),
- 'Ü' : (0x8E, None),
- 'ß' : (0x8F, None),
- 'à' : (0x90, None),
- 'á' : (0x91, None),
- 'â' : (0x92, None),
- 'ä' : (0x93, None),
- 'ç' : (0x94, None),
- 'è' : (0x95, None),
- 'é' : (0x96, None),
- 'ê' : (0x97, None),
- 'ë' : (0x98, None),
- 'ï' : (0x99, None),
- 'ô' : (0x9A, None),
- 'ö' : (0x9B, None),
- 'ù' : (0x9C, None),
- 'û' : (0x9D, None),
- 'ü' : (0x9E, None),
-}
diff --git a/assets/xml/objects/object_mag_ique.xml b/assets/xml/objects/object_mag_ique.xml
new file mode 100644
index 0000000000..03b1a8b193
--- /dev/null
+++ b/assets/xml/objects/object_mag_ique.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_End_Title_ique.xml b/assets/xml/overlays/ovl_End_Title_ique.xml
new file mode 100644
index 0000000000..300448cabf
--- /dev/null
+++ b/assets/xml/overlays/ovl_End_Title_ique.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/textures/nes_font_static_ique_cn.xml b/assets/xml/textures/nes_font_static_ique_cn.xml
new file mode 100644
index 0000000000..484707b05d
--- /dev/null
+++ b/assets/xml/textures/nes_font_static_ique_cn.xml
@@ -0,0 +1,1919 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/baseroms/gc-eu-mq-dbg/config.yml b/baseroms/gc-eu-mq-dbg/config.yml
index 84a6d3b6c7..09abaaf67a 100644
--- a/baseroms/gc-eu-mq-dbg/config.yml
+++ b/baseroms/gc-eu-mq-dbg/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x12F70
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-eu-mq/config.yml b/baseroms/gc-eu-mq/config.yml
index f29e904e85..62925ab3b4 100644
--- a/baseroms/gc-eu-mq/config.yml
+++ b/baseroms/gc-eu-mq/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-eu/config.yml b/baseroms/gc-eu/config.yml
index de1d26194c..278badfb80 100644
--- a/baseroms/gc-eu/config.yml
+++ b/baseroms/gc-eu/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-jp-ce/config.yml b/baseroms/gc-jp-ce/config.yml
index 3a3de8c818..f73344d892 100644
--- a/baseroms/gc-jp-ce/config.yml
+++ b/baseroms/gc-jp-ce/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-jp-mq/config.yml b/baseroms/gc-jp-mq/config.yml
index 6e1ab6b0ef..81927277bd 100644
--- a/baseroms/gc-jp-mq/config.yml
+++ b/baseroms/gc-jp-mq/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-jp/config.yml b/baseroms/gc-jp/config.yml
index 08df45e6ae..26e407d8c4 100644
--- a/baseroms/gc-jp/config.yml
+++ b/baseroms/gc-jp/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-us-mq/config.yml b/baseroms/gc-us-mq/config.yml
index df026951f4..77f12ba8bd 100644
--- a/baseroms/gc-us-mq/config.yml
+++ b/baseroms/gc-us-mq/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-us/config.yml b/baseroms/gc-us/config.yml
index 60050cb7ec..c53cd1841a 100644
--- a/baseroms/gc-us/config.yml
+++ b/baseroms/gc-us/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/ique-cn/checksum-compressed.md5 b/baseroms/ique-cn/checksum-compressed.md5
new file mode 100644
index 0000000000..ba4e5e57bf
--- /dev/null
+++ b/baseroms/ique-cn/checksum-compressed.md5
@@ -0,0 +1 @@
+0ab48b2d44a74b3bb2d384f6170c2742 build/ique-cn/oot-ique-cn-compressed.z64
diff --git a/baseroms/ique-cn/checksum.md5 b/baseroms/ique-cn/checksum.md5
new file mode 100644
index 0000000000..82dfff85bf
--- /dev/null
+++ b/baseroms/ique-cn/checksum.md5
@@ -0,0 +1 @@
+17a9f30d722c29e6912bd4b66713d2b0 build/ique-cn/oot-ique-cn.z64
diff --git a/baseroms/ique-cn/config.yml b/baseroms/ique-cn/config.yml
new file mode 100644
index 0000000000..86bceb7339
--- /dev/null
+++ b/baseroms/ique-cn/config.yml
@@ -0,0 +1,1212 @@
+dmadata_start: 0xB7A0
+text_lang: CN
+incbins:
+ - name: ipl3
+ segment: makerom
+ vram: 0x80000040
+ size: 0xFC0
+ - name: rspbootText
+ segment: boot
+ vram: 0x80009C30
+ size: 0xD0
+ - name: aspMainText
+ segment: code
+ vram: 0x800EBF70
+ size: 0xFB0
+ - name: gspS2DEX2d_fifoText
+ segment: code
+ vram: 0x800ECF20
+ size: 0x18C0
+ - name: njpgdspMainText
+ segment: code
+ vram: 0x800EE7E0
+ size: 0xAF0
+ - name: aspMainData
+ segment: code
+ vram: 0x8011FE20
+ size: 0x2E0
+ - name: gspF3DZEX2_NoN_PosLight_fifoText
+ segment: code
+ vram: 0x80120100
+ size: 0x1630
+ - name: gspF3DZEX2_NoN_PosLight_fifoData
+ segment: code
+ vram: 0x80121730
+ size: 0x420
+ - name: gspS2DEX2d_fifoData
+ segment: code
+ vram: 0x80121B50
+ size: 0x390
+ - name: njpgdspMainData
+ segment: code
+ vram: 0x80121EE0
+ size: 0x60
+variables:
+ gMtxClear: 0x80106980
+ sJpnMessageEntryTable: 0x80115838
+ sNesMessageEntryTable: 0x80119978
+ sStaffMessageEntryTable: 0x8011DB98
+ gSoundFontTable: 0x8011F280
+ gSequenceFontTable: 0x8011F4F0
+ gSequenceTable: 0x8011F6B0
+ gSampleBankTable: 0x8011FDA0
+ sShadowTex: 0x80AE0B10
+assets:
+- name: code/fbdemo_circle
+ xml_path: assets/xml/code/fbdemo_circle.xml
+ start_offset: 0xEBD88
+ end_offset: 0xECFA8
+- name: code/fbdemo_triforce
+ xml_path: assets/xml/code/fbdemo_triforce.xml
+ start_offset: 0xEB210
+ end_offset: 0xEB2E0
+- name: code/fbdemo_wipe1
+ xml_path: assets/xml/code/fbdemo_wipe1.xml
+ start_offset: 0xEB2E0
+ end_offset: 0xEBC70
+- name: misc/link_animetion
+ xml_path: assets/xml/misc/link_animetion.xml
+- name: misc/z_select_static
+ xml_path: assets/xml/misc/z_select_static.xml
+- name: objects/gameplay_dangeon_keep
+ xml_path: assets/xml/objects/gameplay_dangeon_keep.xml
+- name: objects/gameplay_field_keep
+ xml_path: assets/xml/objects/gameplay_field_keep.xml
+- name: objects/gameplay_keep
+ xml_path: assets/xml/objects/gameplay_keep.xml
+- name: objects/object_ahg
+ xml_path: assets/xml/objects/object_ahg.xml
+- name: objects/object_am
+ xml_path: assets/xml/objects/object_am.xml
+- name: objects/object_ane
+ xml_path: assets/xml/objects/object_ane.xml
+- name: objects/object_ani
+ xml_path: assets/xml/objects/object_ani.xml
+- name: objects/object_anubice
+ xml_path: assets/xml/objects/object_anubice.xml
+- name: objects/object_aob
+ xml_path: assets/xml/objects/object_aob.xml
+- name: objects/object_b_heart
+ xml_path: assets/xml/objects/object_b_heart.xml
+- name: objects/object_Bb
+ xml_path: assets/xml/objects/object_Bb.xml
+- name: objects/object_bba
+ xml_path: assets/xml/objects/object_bba.xml
+- name: objects/object_bdan_objects
+ xml_path: assets/xml/objects/object_bdan_objects.xml
+- name: objects/object_bdoor
+ xml_path: assets/xml/objects/object_bdoor.xml
+- name: objects/object_bg
+ xml_path: assets/xml/objects/object_bg.xml
+- name: objects/object_bigokuta
+ xml_path: assets/xml/objects/object_bigokuta.xml
+- name: objects/object_bird
+ xml_path: assets/xml/objects/object_bird.xml
+- name: objects/object_bji
+ xml_path: assets/xml/objects/object_bji.xml
+- name: objects/object_bl
+ xml_path: assets/xml/objects/object_bl.xml
+- name: objects/object_blkobj
+ xml_path: assets/xml/objects/object_blkobj.xml
+- name: objects/object_bob
+ xml_path: assets/xml/objects/object_bob.xml
+- name: objects/object_boj
+ xml_path: assets/xml/objects/object_boj.xml
+- name: objects/object_bombf
+ xml_path: assets/xml/objects/object_bombf.xml
+- name: objects/object_bombiwa
+ xml_path: assets/xml/objects/object_bombiwa.xml
+- name: objects/object_bowl
+ xml_path: assets/xml/objects/object_bowl.xml
+- name: objects/object_box
+ xml_path: assets/xml/objects/object_box.xml
+- name: objects/object_brob
+ xml_path: assets/xml/objects/object_brob.xml
+- name: objects/object_bubble
+ xml_path: assets/xml/objects/object_bubble.xml
+- name: objects/object_bv
+ xml_path: assets/xml/objects/object_bv.xml
+- name: objects/object_bw
+ xml_path: assets/xml/objects/object_bw.xml
+- name: objects/object_bwall
+ xml_path: assets/xml/objects/object_bwall.xml
+- name: objects/object_bxa
+ xml_path: assets/xml/objects/object_bxa.xml
+- name: objects/object_cne
+ xml_path: assets/xml/objects/object_cne.xml
+- name: objects/object_cob
+ xml_path: assets/xml/objects/object_cob.xml
+- name: objects/object_cow
+ xml_path: assets/xml/objects/object_cow.xml
+- name: objects/object_crow
+ xml_path: assets/xml/objects/object_crow.xml
+- name: objects/object_cs
+ xml_path: assets/xml/objects/object_cs.xml
+- name: objects/object_d_elevator
+ xml_path: assets/xml/objects/object_d_elevator.xml
+- name: objects/object_d_hsblock
+ xml_path: assets/xml/objects/object_d_hsblock.xml
+- name: objects/object_d_lift
+ xml_path: assets/xml/objects/object_d_lift.xml
+- name: objects/object_daiku
+ xml_path: assets/xml/objects/object_daiku.xml
+- name: objects/object_ddan_objects
+ xml_path: assets/xml/objects/object_ddan_objects.xml
+- name: objects/object_dekubaba
+ xml_path: assets/xml/objects/object_dekubaba.xml
+- name: objects/object_dekujr
+ xml_path: assets/xml/objects/object_dekujr.xml
+- name: objects/object_dekunuts
+ xml_path: assets/xml/objects/object_dekunuts.xml
+- name: objects/object_demo_6k
+ xml_path: assets/xml/objects/object_demo_6k.xml
+- name: objects/object_demo_kekkai
+ xml_path: assets/xml/objects/object_demo_kekkai.xml
+- name: objects/object_demo_tre_lgt
+ xml_path: assets/xml/objects/object_demo_tre_lgt.xml
+- name: objects/object_dh
+ xml_path: assets/xml/objects/object_dh.xml
+- name: objects/object_dnk
+ xml_path: assets/xml/objects/object_dnk.xml
+- name: objects/object_dns
+ xml_path: assets/xml/objects/object_dns.xml
+- name: objects/object_dodojr
+ xml_path: assets/xml/objects/object_dodojr.xml
+- name: objects/object_dodongo
+ xml_path: assets/xml/objects/object_dodongo.xml
+- name: objects/object_dog
+ xml_path: assets/xml/objects/object_dog.xml
+- name: objects/object_door_gerudo
+ xml_path: assets/xml/objects/object_door_gerudo.xml
+- name: objects/object_door_killer
+ xml_path: assets/xml/objects/object_door_killer.xml
+- name: objects/object_ds
+ xml_path: assets/xml/objects/object_ds.xml
+- name: objects/object_ds2
+ xml_path: assets/xml/objects/object_ds2.xml
+- name: objects/object_du
+ xml_path: assets/xml/objects/object_du.xml
+- name: objects/object_dy_obj
+ xml_path: assets/xml/objects/object_dy_obj.xml
+- name: objects/object_ec
+ xml_path: assets/xml/objects/object_ec.xml
+- name: objects/object_efc_crystal_light
+ xml_path: assets/xml/objects/object_efc_crystal_light.xml
+- name: objects/object_efc_doughnut
+ xml_path: assets/xml/objects/object_efc_doughnut.xml
+- name: objects/object_efc_erupc
+ xml_path: assets/xml/objects/object_efc_erupc.xml
+- name: objects/object_efc_fire_ball
+ xml_path: assets/xml/objects/object_efc_fire_ball.xml
+- name: objects/object_efc_flash
+ xml_path: assets/xml/objects/object_efc_flash.xml
+- name: objects/object_efc_lgt_shower
+ xml_path: assets/xml/objects/object_efc_lgt_shower.xml
+- name: objects/object_efc_star_field
+ xml_path: assets/xml/objects/object_efc_star_field.xml
+- name: objects/object_efc_tw
+ xml_path: assets/xml/objects/object_efc_tw.xml
+- name: objects/object_ei
+ xml_path: assets/xml/objects/object_ei.xml
+- name: objects/object_fa
+ xml_path: assets/xml/objects/object_fa.xml
+- name: objects/object_fd
+ xml_path: assets/xml/objects/object_fd.xml
+- name: objects/object_fd2
+ xml_path: assets/xml/objects/object_fd2.xml
+- name: objects/object_fhg
+ xml_path: assets/xml/objects/object_fhg.xml
+- name: objects/object_fire
+ xml_path: assets/xml/objects/object_fire.xml
+- name: objects/object_firefly
+ xml_path: assets/xml/objects/object_firefly.xml
+- name: objects/object_fish
+ xml_path: assets/xml/objects/object_fish.xml
+- name: objects/object_fr
+ xml_path: assets/xml/objects/object_fr.xml
+- name: objects/object_fu
+ xml_path: assets/xml/objects/object_fu.xml
+- name: objects/object_fw
+ xml_path: assets/xml/objects/object_fw.xml
+- name: objects/object_fz
+ xml_path: assets/xml/objects/object_fz.xml
+- name: objects/object_ganon
+ xml_path: assets/xml/objects/object_ganon.xml
+- name: objects/object_ganon2
+ xml_path: assets/xml/objects/object_ganon2.xml
+- name: objects/object_ganon_anime1
+ xml_path: assets/xml/objects/object_ganon_anime1.xml
+- name: objects/object_ganon_anime2
+ xml_path: assets/xml/objects/object_ganon_anime2.xml
+- name: objects/object_ganon_anime3
+ xml_path: assets/xml/objects/object_ganon_anime3.xml
+- name: objects/object_ganon_objects
+ xml_path: assets/xml/objects/object_ganon_objects.xml
+- name: objects/object_ge1
+ xml_path: assets/xml/objects/object_ge1.xml
+- name: objects/object_geff
+ xml_path: assets/xml/objects/object_geff.xml
+- name: objects/object_geldb
+ xml_path: assets/xml/objects/object_geldb.xml
+- name: objects/object_gi_arrow
+ xml_path: assets/xml/objects/object_gi_arrow.xml
+- name: objects/object_gi_arrowcase
+ xml_path: assets/xml/objects/object_gi_arrowcase.xml
+- name: objects/object_gi_bean
+ xml_path: assets/xml/objects/object_gi_bean.xml
+- name: objects/object_gi_bomb_1
+ xml_path: assets/xml/objects/object_gi_bomb_1.xml
+- name: objects/object_gi_bomb_2
+ xml_path: assets/xml/objects/object_gi_bomb_2.xml
+- name: objects/object_gi_bombpouch
+ xml_path: assets/xml/objects/object_gi_bombpouch.xml
+- name: objects/object_gi_boomerang
+ xml_path: assets/xml/objects/object_gi_boomerang.xml
+- name: objects/object_gi_boots_2
+ xml_path: assets/xml/objects/object_gi_boots_2.xml
+- name: objects/object_gi_bosskey
+ xml_path: assets/xml/objects/object_gi_bosskey.xml
+- name: objects/object_gi_bottle
+ xml_path: assets/xml/objects/object_gi_bottle.xml
+- name: objects/object_gi_bottle_letter
+ xml_path: assets/xml/objects/object_gi_bottle_letter.xml
+- name: objects/object_gi_bow
+ xml_path: assets/xml/objects/object_gi_bow.xml
+- name: objects/object_gi_bracelet
+ xml_path: assets/xml/objects/object_gi_bracelet.xml
+- name: objects/object_gi_brokensword
+ xml_path: assets/xml/objects/object_gi_brokensword.xml
+- name: objects/object_gi_butterfly
+ xml_path: assets/xml/objects/object_gi_butterfly.xml
+- name: objects/object_gi_clothes
+ xml_path: assets/xml/objects/object_gi_clothes.xml
+- name: objects/object_gi_coin
+ xml_path: assets/xml/objects/object_gi_coin.xml
+- name: objects/object_gi_compass
+ xml_path: assets/xml/objects/object_gi_compass.xml
+- name: objects/object_gi_dekupouch
+ xml_path: assets/xml/objects/object_gi_dekupouch.xml
+- name: objects/object_gi_egg
+ xml_path: assets/xml/objects/object_gi_egg.xml
+- name: objects/object_gi_eye_lotion
+ xml_path: assets/xml/objects/object_gi_eye_lotion.xml
+- name: objects/object_gi_fire
+ xml_path: assets/xml/objects/object_gi_fire.xml
+- name: objects/object_gi_fish
+ xml_path: assets/xml/objects/object_gi_fish.xml
+- name: objects/object_gi_frog
+ xml_path: assets/xml/objects/object_gi_frog.xml
+- name: objects/object_gi_gerudo
+ xml_path: assets/xml/objects/object_gi_gerudo.xml
+- name: objects/object_gi_gerudomask
+ xml_path: assets/xml/objects/object_gi_gerudomask.xml
+- name: objects/object_gi_ghost
+ xml_path: assets/xml/objects/object_gi_ghost.xml
+- name: objects/object_gi_glasses
+ xml_path: assets/xml/objects/object_gi_glasses.xml
+- name: objects/object_gi_gloves
+ xml_path: assets/xml/objects/object_gi_gloves.xml
+- name: objects/object_gi_goddess
+ xml_path: assets/xml/objects/object_gi_goddess.xml
+- name: objects/object_gi_golonmask
+ xml_path: assets/xml/objects/object_gi_golonmask.xml
+- name: objects/object_gi_grass
+ xml_path: assets/xml/objects/object_gi_grass.xml
+- name: objects/object_gi_hammer
+ xml_path: assets/xml/objects/object_gi_hammer.xml
+- name: objects/object_gi_heart
+ xml_path: assets/xml/objects/object_gi_heart.xml
+- name: objects/object_gi_hearts
+ xml_path: assets/xml/objects/object_gi_hearts.xml
+- name: objects/object_gi_hookshot
+ xml_path: assets/xml/objects/object_gi_hookshot.xml
+- name: objects/object_gi_hoverboots
+ xml_path: assets/xml/objects/object_gi_hoverboots.xml
+- name: objects/object_gi_insect
+ xml_path: assets/xml/objects/object_gi_insect.xml
+- name: objects/object_gi_jewel
+ xml_path: assets/xml/objects/object_gi_jewel.xml
+- name: objects/object_gi_key
+ xml_path: assets/xml/objects/object_gi_key.xml
+- name: objects/object_gi_ki_tan_mask
+ xml_path: assets/xml/objects/object_gi_ki_tan_mask.xml
+- name: objects/object_gi_letter
+ xml_path: assets/xml/objects/object_gi_letter.xml
+- name: objects/object_gi_liquid
+ xml_path: assets/xml/objects/object_gi_liquid.xml
+- name: objects/object_gi_longsword
+ xml_path: assets/xml/objects/object_gi_longsword.xml
+- name: objects/object_gi_m_arrow
+ xml_path: assets/xml/objects/object_gi_m_arrow.xml
+- name: objects/object_gi_magicpot
+ xml_path: assets/xml/objects/object_gi_magicpot.xml
+- name: objects/object_gi_map
+ xml_path: assets/xml/objects/object_gi_map.xml
+- name: objects/object_gi_medal
+ xml_path: assets/xml/objects/object_gi_medal.xml
+- name: objects/object_gi_melody
+ xml_path: assets/xml/objects/object_gi_melody.xml
+- name: objects/object_gi_milk
+ xml_path: assets/xml/objects/object_gi_milk.xml
+- name: objects/object_gi_mushroom
+ xml_path: assets/xml/objects/object_gi_mushroom.xml
+- name: objects/object_gi_niwatori
+ xml_path: assets/xml/objects/object_gi_niwatori.xml
+- name: objects/object_gi_nuts
+ xml_path: assets/xml/objects/object_gi_nuts.xml
+- name: objects/object_gi_ocarina
+ xml_path: assets/xml/objects/object_gi_ocarina.xml
+- name: objects/object_gi_ocarina_0
+ xml_path: assets/xml/objects/object_gi_ocarina_0.xml
+- name: objects/object_gi_pachinko
+ xml_path: assets/xml/objects/object_gi_pachinko.xml
+- name: objects/object_gi_powder
+ xml_path: assets/xml/objects/object_gi_powder.xml
+- name: objects/object_gi_prescription
+ xml_path: assets/xml/objects/object_gi_prescription.xml
+- name: objects/object_gi_purse
+ xml_path: assets/xml/objects/object_gi_purse.xml
+- name: objects/object_gi_rabit_mask
+ xml_path: assets/xml/objects/object_gi_rabit_mask.xml
+- name: objects/object_gi_redead_mask
+ xml_path: assets/xml/objects/object_gi_redead_mask.xml
+- name: objects/object_gi_rupy
+ xml_path: assets/xml/objects/object_gi_rupy.xml
+- name: objects/object_gi_saw
+ xml_path: assets/xml/objects/object_gi_saw.xml
+- name: objects/object_gi_scale
+ xml_path: assets/xml/objects/object_gi_scale.xml
+- name: objects/object_gi_seed
+ xml_path: assets/xml/objects/object_gi_seed.xml
+- name: objects/object_gi_shield_1
+ xml_path: assets/xml/objects/object_gi_shield_1.xml
+- name: objects/object_gi_shield_2
+ xml_path: assets/xml/objects/object_gi_shield_2.xml
+- name: objects/object_gi_shield_3
+ xml_path: assets/xml/objects/object_gi_shield_3.xml
+- name: objects/object_gi_skj_mask
+ xml_path: assets/xml/objects/object_gi_skj_mask.xml
+- name: objects/object_gi_soldout
+ xml_path: assets/xml/objects/object_gi_soldout.xml
+- name: objects/object_gi_soul
+ xml_path: assets/xml/objects/object_gi_soul.xml
+- name: objects/object_gi_stick
+ xml_path: assets/xml/objects/object_gi_stick.xml
+- name: objects/object_gi_sutaru
+ xml_path: assets/xml/objects/object_gi_sutaru.xml
+- name: objects/object_gi_sword_1
+ xml_path: assets/xml/objects/object_gi_sword_1.xml
+- name: objects/object_gi_ticketstone
+ xml_path: assets/xml/objects/object_gi_ticketstone.xml
+- name: objects/object_gi_truth_mask
+ xml_path: assets/xml/objects/object_gi_truth_mask.xml
+- name: objects/object_gi_zoramask
+ xml_path: assets/xml/objects/object_gi_zoramask.xml
+- name: objects/object_gj
+ xml_path: assets/xml/objects/object_gj.xml
+- name: objects/object_gjyo_objects
+ xml_path: assets/xml/objects/object_gjyo_objects.xml
+- name: objects/object_gla
+ xml_path: assets/xml/objects/object_gla.xml
+- name: objects/object_gm
+ xml_path: assets/xml/objects/object_gm.xml
+- name: objects/object_gnd
+ xml_path: assets/xml/objects/object_gnd.xml
+- name: objects/object_gnd_magic
+ xml_path: assets/xml/objects/object_gnd_magic.xml
+- name: objects/object_gndd
+ xml_path: assets/xml/objects/object_gndd.xml
+- name: objects/object_god_lgt
+ xml_path: assets/xml/objects/object_god_lgt.xml
+- name: objects/object_gol
+ xml_path: assets/xml/objects/object_gol.xml
+- name: objects/object_goma
+ xml_path: assets/xml/objects/object_goma.xml
+- name: objects/object_goroiwa
+ xml_path: assets/xml/objects/object_goroiwa.xml
+- name: objects/object_gr
+ xml_path: assets/xml/objects/object_gr.xml
+- name: objects/object_gs
+ xml_path: assets/xml/objects/object_gs.xml
+- name: objects/object_gt
+ xml_path: assets/xml/objects/object_gt.xml
+- name: objects/object_haka
+ xml_path: assets/xml/objects/object_haka.xml
+- name: objects/object_haka_door
+ xml_path: assets/xml/objects/object_haka_door.xml
+- name: objects/object_haka_objects
+ xml_path: assets/xml/objects/object_haka_objects.xml
+- name: objects/object_hakach_objects
+ xml_path: assets/xml/objects/object_hakach_objects.xml
+- name: objects/object_hata
+ xml_path: assets/xml/objects/object_hata.xml
+- name: objects/object_heavy_object
+ xml_path: assets/xml/objects/object_heavy_object.xml
+- name: objects/object_hidan_objects
+ xml_path: assets/xml/objects/object_hidan_objects.xml
+- name: objects/object_hintnuts
+ xml_path: assets/xml/objects/object_hintnuts.xml
+- name: objects/object_hni
+ xml_path: assets/xml/objects/object_hni.xml
+- name: objects/object_horse
+ xml_path: assets/xml/objects/object_horse.xml
+- name: objects/object_horse_ganon
+ xml_path: assets/xml/objects/object_horse_ganon.xml
+- name: objects/object_horse_link_child
+ xml_path: assets/xml/objects/object_horse_link_child.xml
+- name: objects/object_horse_normal
+ xml_path: assets/xml/objects/object_horse_normal.xml
+- name: objects/object_horse_zelda
+ xml_path: assets/xml/objects/object_horse_zelda.xml
+- name: objects/object_hs
+ xml_path: assets/xml/objects/object_hs.xml
+- name: objects/object_human
+ xml_path: assets/xml/objects/object_human.xml
+- name: objects/object_ice_objects
+ xml_path: assets/xml/objects/object_ice_objects.xml
+- name: objects/object_ik
+ xml_path: assets/xml/objects/object_ik.xml
+- name: objects/object_im
+ xml_path: assets/xml/objects/object_im.xml
+- name: objects/object_in
+ xml_path: assets/xml/objects/object_in.xml
+- name: objects/object_ingate
+ xml_path: assets/xml/objects/object_ingate.xml
+- name: objects/object_jj
+ xml_path: assets/xml/objects/object_jj.xml
+- name: objects/object_js
+ xml_path: assets/xml/objects/object_js.xml
+- name: objects/object_jya_door
+ xml_path: assets/xml/objects/object_jya_door.xml
+- name: objects/object_jya_iron
+ xml_path: assets/xml/objects/object_jya_iron.xml
+- name: objects/object_jya_obj
+ xml_path: assets/xml/objects/object_jya_obj.xml
+- name: objects/object_ka
+ xml_path: assets/xml/objects/object_ka.xml
+- name: objects/object_kanban
+ xml_path: assets/xml/objects/object_kanban.xml
+- name: objects/object_kibako2
+ xml_path: assets/xml/objects/object_kibako2.xml
+- name: objects/object_kingdodongo
+ xml_path: assets/xml/objects/object_kingdodongo.xml
+- name: objects/object_km1
+ xml_path: assets/xml/objects/object_km1.xml
+- name: objects/object_kusa
+ xml_path: assets/xml/objects/object_kusa.xml
+- name: objects/object_kw1
+ xml_path: assets/xml/objects/object_kw1.xml
+- name: objects/object_kz
+ xml_path: assets/xml/objects/object_kz.xml
+- name: objects/object_light_ring
+ xml_path: assets/xml/objects/object_light_ring.xml
+- name: objects/object_lightbox
+ xml_path: assets/xml/objects/object_lightbox.xml
+- name: objects/object_lightswitch
+ xml_path: assets/xml/objects/object_lightswitch.xml
+- name: objects/object_link_boy
+ xml_path: assets/xml/objects/object_link_boy.xml
+- name: objects/object_link_child
+ xml_path: assets/xml/objects/object_link_child.xml
+- name: objects/object_ma1
+ xml_path: assets/xml/objects/object_ma1.xml
+- name: objects/object_ma2
+ xml_path: assets/xml/objects/object_ma2.xml
+- name: objects/object_mag
+ xml_path: assets/xml/objects/object_mag_ique.xml
+- name: objects/object_mamenoki
+ xml_path: assets/xml/objects/object_mamenoki.xml
+- name: objects/object_mastergolon
+ xml_path: assets/xml/objects/object_mastergolon.xml
+- name: objects/object_masterkokiri
+ xml_path: assets/xml/objects/object_masterkokiri.xml
+- name: objects/object_masterkokirihead
+ xml_path: assets/xml/objects/object_masterkokirihead.xml
+- name: objects/object_masterzoora
+ xml_path: assets/xml/objects/object_masterzoora.xml
+- name: objects/object_mb
+ xml_path: assets/xml/objects/object_mb.xml
+- name: objects/object_md
+ xml_path: assets/xml/objects/object_md.xml
+- name: objects/object_medal
+ xml_path: assets/xml/objects/object_medal.xml
+- name: objects/object_menkuri_objects
+ xml_path: assets/xml/objects/object_menkuri_objects.xml
+- name: objects/object_mir_ray
+ xml_path: assets/xml/objects/object_mir_ray.xml
+- name: objects/object_mizu_objects
+ xml_path: assets/xml/objects/object_mizu_objects.xml
+- name: objects/object_mjin
+ xml_path: assets/xml/objects/object_mjin.xml
+- name: objects/object_mjin_dark
+ xml_path: assets/xml/objects/object_mjin_dark.xml
+- name: objects/object_mjin_flame
+ xml_path: assets/xml/objects/object_mjin_flame.xml
+- name: objects/object_mjin_flash
+ xml_path: assets/xml/objects/object_mjin_flash.xml
+- name: objects/object_mjin_ice
+ xml_path: assets/xml/objects/object_mjin_ice.xml
+- name: objects/object_mjin_oka
+ xml_path: assets/xml/objects/object_mjin_oka.xml
+- name: objects/object_mjin_soul
+ xml_path: assets/xml/objects/object_mjin_soul.xml
+- name: objects/object_mjin_wind
+ xml_path: assets/xml/objects/object_mjin_wind.xml
+- name: objects/object_mk
+ xml_path: assets/xml/objects/object_mk.xml
+- name: objects/object_mm
+ xml_path: assets/xml/objects/object_mm.xml
+- name: objects/object_mo
+ xml_path: assets/xml/objects/object_mo.xml
+- name: objects/object_mori_hineri1
+ xml_path: assets/xml/objects/object_mori_hineri1.xml
+- name: objects/object_mori_hineri1a
+ xml_path: assets/xml/objects/object_mori_hineri1a.xml
+- name: objects/object_mori_hineri2
+ xml_path: assets/xml/objects/object_mori_hineri2.xml
+- name: objects/object_mori_hineri2a
+ xml_path: assets/xml/objects/object_mori_hineri2a.xml
+- name: objects/object_mori_objects
+ xml_path: assets/xml/objects/object_mori_objects.xml
+- name: objects/object_mori_tex
+ xml_path: assets/xml/objects/object_mori_tex.xml
+- name: objects/object_ms
+ xml_path: assets/xml/objects/object_ms.xml
+- name: objects/object_mu
+ xml_path: assets/xml/objects/object_mu.xml
+- name: objects/object_nb
+ xml_path: assets/xml/objects/object_nb.xml
+- name: objects/object_niw
+ xml_path: assets/xml/objects/object_niw.xml
+- name: objects/object_nwc
+ xml_path: assets/xml/objects/object_nwc.xml
+- name: objects/object_ny
+ xml_path: assets/xml/objects/object_ny.xml
+- name: objects/object_o_anime
+ xml_path: assets/xml/objects/object_o_anime.xml
+- name: objects/object_oA1
+ xml_path: assets/xml/objects/object_oA1.xml
+- name: objects/object_oA2
+ xml_path: assets/xml/objects/object_oA2.xml
+- name: objects/object_oA3
+ xml_path: assets/xml/objects/object_oA3.xml
+- name: objects/object_oA4
+ xml_path: assets/xml/objects/object_oA4.xml
+- name: objects/object_oA5
+ xml_path: assets/xml/objects/object_oA5.xml
+- name: objects/object_oA6
+ xml_path: assets/xml/objects/object_oA6.xml
+- name: objects/object_oA7
+ xml_path: assets/xml/objects/object_oA7.xml
+- name: objects/object_oA8
+ xml_path: assets/xml/objects/object_oA8.xml
+- name: objects/object_oA9
+ xml_path: assets/xml/objects/object_oA9.xml
+- name: objects/object_oA10
+ xml_path: assets/xml/objects/object_oA10.xml
+- name: objects/object_oA11
+ xml_path: assets/xml/objects/object_oA11.xml
+- name: objects/object_oB1
+ xml_path: assets/xml/objects/object_oB1.xml
+- name: objects/object_oB2
+ xml_path: assets/xml/objects/object_oB2.xml
+- name: objects/object_oB3
+ xml_path: assets/xml/objects/object_oB3.xml
+- name: objects/object_oB4
+ xml_path: assets/xml/objects/object_oB4.xml
+- name: objects/object_oE1
+ xml_path: assets/xml/objects/object_oE1.xml
+- name: objects/object_oE1s
+ xml_path: assets/xml/objects/object_oE1s.xml
+- name: objects/object_oE2
+ xml_path: assets/xml/objects/object_oE2.xml
+- name: objects/object_oE3
+ xml_path: assets/xml/objects/object_oE3.xml
+- name: objects/object_oE4
+ xml_path: assets/xml/objects/object_oE4.xml
+- name: objects/object_oE4s
+ xml_path: assets/xml/objects/object_oE4s.xml
+- name: objects/object_oE5
+ xml_path: assets/xml/objects/object_oE5.xml
+- name: objects/object_oE6
+ xml_path: assets/xml/objects/object_oE6.xml
+- name: objects/object_oE7
+ xml_path: assets/xml/objects/object_oE7.xml
+- name: objects/object_oE8
+ xml_path: assets/xml/objects/object_oE8.xml
+- name: objects/object_oE9
+ xml_path: assets/xml/objects/object_oE9.xml
+- name: objects/object_oE10
+ xml_path: assets/xml/objects/object_oE10.xml
+- name: objects/object_oE11
+ xml_path: assets/xml/objects/object_oE11.xml
+- name: objects/object_oE12
+ xml_path: assets/xml/objects/object_oE12.xml
+- name: objects/object_oE_anime
+ xml_path: assets/xml/objects/object_oE_anime.xml
+- name: objects/object_oF1d_map
+ xml_path: assets/xml/objects/object_oF1d_map.xml
+- name: objects/object_oF1s
+ xml_path: assets/xml/objects/object_oF1s.xml
+- name: objects/object_okuta
+ xml_path: assets/xml/objects/object_okuta.xml
+- name: objects/object_opening_demo1
+ xml_path: assets/xml/objects/object_opening_demo1.xml
+- name: objects/object_os
+ xml_path: assets/xml/objects/object_os.xml
+- name: objects/object_os_anime
+ xml_path: assets/xml/objects/object_os_anime.xml
+- name: objects/object_ossan
+ xml_path: assets/xml/objects/object_ossan.xml
+- name: objects/object_ouke_haka
+ xml_path: assets/xml/objects/object_ouke_haka.xml
+- name: objects/object_owl
+ xml_path: assets/xml/objects/object_owl.xml
+- name: objects/object_peehat
+ xml_path: assets/xml/objects/object_peehat.xml
+- name: objects/object_po_composer
+ xml_path: assets/xml/objects/object_po_composer.xml
+- name: objects/object_po_field
+ xml_path: assets/xml/objects/object_po_field.xml
+- name: objects/object_po_sisters
+ xml_path: assets/xml/objects/object_po_sisters.xml
+- name: objects/object_poh
+ xml_path: assets/xml/objects/object_poh.xml
+- name: objects/object_ps
+ xml_path: assets/xml/objects/object_ps.xml
+- name: objects/object_pu_box
+ xml_path: assets/xml/objects/object_pu_box.xml
+- name: objects/object_rd
+ xml_path: assets/xml/objects/object_rd.xml
+- name: objects/object_reeba
+ xml_path: assets/xml/objects/object_reeba.xml
+- name: objects/object_relay_objects
+ xml_path: assets/xml/objects/object_relay_objects.xml
+- name: objects/object_rl
+ xml_path: assets/xml/objects/object_rl.xml
+- name: objects/object_rr
+ xml_path: assets/xml/objects/object_rr.xml
+- name: objects/object_rs
+ xml_path: assets/xml/objects/object_rs.xml
+- name: objects/object_ru1
+ xml_path: assets/xml/objects/object_ru1.xml
+- name: objects/object_ru2
+ xml_path: assets/xml/objects/object_ru2.xml
+- name: objects/object_sa
+ xml_path: assets/xml/objects/object_sa.xml
+- name: objects/object_sb
+ xml_path: assets/xml/objects/object_sb.xml
+- name: objects/object_sd
+ xml_path: assets/xml/objects/object_sd.xml
+- name: objects/object_shop_dungen
+ xml_path: assets/xml/objects/object_shop_dungen.xml
+- name: objects/object_shopnuts
+ xml_path: assets/xml/objects/object_shopnuts.xml
+- name: objects/object_siofuki
+ xml_path: assets/xml/objects/object_siofuki.xml
+- name: objects/object_sk2
+ xml_path: assets/xml/objects/object_sk2.xml
+- name: objects/object_skb
+ xml_path: assets/xml/objects/object_skb.xml
+- name: objects/object_skj
+ xml_path: assets/xml/objects/object_skj.xml
+- name: objects/object_spot00_break
+ xml_path: assets/xml/objects/object_spot00_break.xml
+- name: objects/object_spot00_objects
+ xml_path: assets/xml/objects/object_spot00_objects.xml
+- name: objects/object_spot01_matoya
+ xml_path: assets/xml/objects/object_spot01_matoya.xml
+- name: objects/object_spot01_matoyab
+ xml_path: assets/xml/objects/object_spot01_matoyab.xml
+- name: objects/object_spot01_objects
+ xml_path: assets/xml/objects/object_spot01_objects.xml
+- name: objects/object_spot01_objects2
+ xml_path: assets/xml/objects/object_spot01_objects2.xml
+- name: objects/object_spot02_objects
+ xml_path: assets/xml/objects/object_spot02_objects.xml
+- name: objects/object_spot03_object
+ xml_path: assets/xml/objects/object_spot03_object.xml
+- name: objects/object_spot04_objects
+ xml_path: assets/xml/objects/object_spot04_objects.xml
+- name: objects/object_spot05_objects
+ xml_path: assets/xml/objects/object_spot05_objects.xml
+- name: objects/object_spot06_objects
+ xml_path: assets/xml/objects/object_spot06_objects.xml
+- name: objects/object_spot07_object
+ xml_path: assets/xml/objects/object_spot07_object.xml
+- name: objects/object_spot08_obj
+ xml_path: assets/xml/objects/object_spot08_obj.xml
+- name: objects/object_spot09_obj
+ xml_path: assets/xml/objects/object_spot09_obj.xml
+- name: objects/object_spot11_obj
+ xml_path: assets/xml/objects/object_spot11_obj.xml
+- name: objects/object_spot12_obj
+ xml_path: assets/xml/objects/object_spot12_obj.xml
+- name: objects/object_spot15_obj
+ xml_path: assets/xml/objects/object_spot15_obj.xml
+- name: objects/object_spot16_obj
+ xml_path: assets/xml/objects/object_spot16_obj.xml
+- name: objects/object_spot17_obj
+ xml_path: assets/xml/objects/object_spot17_obj.xml
+- name: objects/object_spot18_obj
+ xml_path: assets/xml/objects/object_spot18_obj.xml
+- name: objects/object_ssh
+ xml_path: assets/xml/objects/object_ssh.xml
+- name: objects/object_sst
+ xml_path: assets/xml/objects/object_sst.xml
+- name: objects/object_st
+ xml_path: assets/xml/objects/object_st.xml
+- name: objects/object_stream
+ xml_path: assets/xml/objects/object_stream.xml
+- name: objects/object_syokudai
+ xml_path: assets/xml/objects/object_syokudai.xml
+- name: objects/object_ta
+ xml_path: assets/xml/objects/object_ta.xml
+- name: objects/object_timeblock
+ xml_path: assets/xml/objects/object_timeblock.xml
+- name: objects/object_tite
+ xml_path: assets/xml/objects/object_tite.xml
+- name: objects/object_tk
+ xml_path: assets/xml/objects/object_tk.xml
+- name: objects/object_toki_objects
+ xml_path: assets/xml/objects/object_toki_objects.xml
+- name: objects/object_torch2
+ xml_path: assets/xml/objects/object_torch2.xml
+- name: objects/object_toryo
+ xml_path: assets/xml/objects/object_toryo.xml
+- name: objects/object_tp
+ xml_path: assets/xml/objects/object_tp.xml
+- name: objects/object_tr
+ xml_path: assets/xml/objects/object_tr.xml
+- name: objects/object_trap
+ xml_path: assets/xml/objects/object_trap.xml
+- name: objects/object_triforce_spot
+ xml_path: assets/xml/objects/object_triforce_spot.xml
+- name: objects/object_ts
+ xml_path: assets/xml/objects/object_ts.xml
+- name: objects/object_tsubo
+ xml_path: assets/xml/objects/object_tsubo.xml
+- name: objects/object_tw
+ xml_path: assets/xml/objects/object_tw.xml
+- name: objects/object_umajump
+ xml_path: assets/xml/objects/object_umajump.xml
+- name: objects/object_vali
+ xml_path: assets/xml/objects/object_vali.xml
+- name: objects/object_vase
+ xml_path: assets/xml/objects/object_vase.xml
+- name: objects/object_vm
+ xml_path: assets/xml/objects/object_vm.xml
+- name: objects/object_wallmaster
+ xml_path: assets/xml/objects/object_wallmaster.xml
+- name: objects/object_warp1
+ xml_path: assets/xml/objects/object_warp1.xml
+- name: objects/object_warp2
+ xml_path: assets/xml/objects/object_warp2.xml
+- name: objects/object_wf
+ xml_path: assets/xml/objects/object_wf.xml
+- name: objects/object_wood02
+ xml_path: assets/xml/objects/object_wood02.xml
+- name: objects/object_xc
+ xml_path: assets/xml/objects/object_xc.xml
+- name: objects/object_yabusame_point
+ xml_path: assets/xml/objects/object_yabusame_point.xml
+- name: objects/object_ydan_objects
+ xml_path: assets/xml/objects/object_ydan_objects.xml
+- name: objects/object_yukabyun
+ xml_path: assets/xml/objects/object_yukabyun.xml
+- name: objects/object_zf
+ xml_path: assets/xml/objects/object_zf.xml
+- name: objects/object_zg
+ xml_path: assets/xml/objects/object_zg.xml
+- name: objects/object_zl1
+ xml_path: assets/xml/objects/object_zl1.xml
+- name: objects/object_zl2
+ xml_path: assets/xml/objects/object_zl2.xml
+- name: objects/object_zl2_anime1
+ xml_path: assets/xml/objects/object_zl2_anime1.xml
+- name: objects/object_zl2_anime2
+ xml_path: assets/xml/objects/object_zl2_anime2.xml
+- name: objects/object_zl4
+ xml_path: assets/xml/objects/object_zl4.xml
+- name: objects/object_zo
+ xml_path: assets/xml/objects/object_zo.xml
+- name: overlays/ovl_Arrow_Fire
+ xml_path: assets/xml/overlays/ovl_Arrow_Fire.xml
+ start_offset: 0x980
+ end_offset: 0x1DA0
+- name: overlays/ovl_Arrow_Ice
+ xml_path: assets/xml/overlays/ovl_Arrow_Ice.xml
+ start_offset: 0x9A0
+ end_offset: 0x1DC0
+- name: overlays/ovl_Arrow_Light
+ xml_path: assets/xml/overlays/ovl_Arrow_Light.xml
+ start_offset: 0x9B0
+ end_offset: 0x1DD0
+- name: overlays/ovl_Bg_Ganon_Otyuka
+ xml_path: assets/xml/overlays/ovl_Bg_Ganon_Otyuka.xml
+ start_offset: 0x1100
+ end_offset: 0x24DC
+- name: overlays/ovl_Bg_Jya_Cobra
+ xml_path: assets/xml/overlays/ovl_Bg_Jya_Cobra.xml
+ start_offset: 0x1850
+ end_offset: 0x18C8
+- name: overlays/ovl_Boss_Dodongo
+ xml_path: assets/xml/overlays/ovl_Boss_Dodongo.xml
+ start_offset: 0x61E8
+ end_offset: 0x91E8
+- name: overlays/ovl_Boss_Ganon
+ xml_path: assets/xml/overlays/ovl_Boss_Ganon.xml
+ start_offset: 0xE3C8
+ end_offset: 0x20EE8
+- name: overlays/ovl_Boss_Ganon2
+ xml_path: assets/xml/overlays/ovl_Boss_Ganon2.xml
+ start_offset: 0x9F88
+ end_offset: 0x10438
+- name: overlays/ovl_Boss_Sst
+ xml_path: assets/xml/overlays/ovl_Boss_Sst.xml
+ start_offset: 0xA380
+ end_offset: 0xAD30
+- name: overlays/ovl_Demo_Shd
+ xml_path: assets/xml/overlays/ovl_Demo_Shd.xml
+ start_offset: 0x410
+ end_offset: 0x2390
+- name: overlays/ovl_Effect_Ss_Fhg_Flash
+ xml_path: assets/xml/overlays/ovl_Effect_Ss_Fhg_Flash.xml
+ start_offset: 0x9F0
+ end_offset: 0xEA8
+- name: overlays/ovl_En_Bili
+ xml_path: assets/xml/overlays/ovl_En_Bili.xml
+ start_offset: 0x1E40
+ end_offset: 0x1E60
+- name: overlays/ovl_En_Clear_Tag
+ xml_path: assets/xml/overlays/ovl_En_Clear_Tag.xml
+ start_offset: 0x2600
+ end_offset: 0x8900
+- name: overlays/ovl_En_Ganon_Mant
+ xml_path: assets/xml/overlays/ovl_En_Ganon_Mant.xml
+ start_offset: 0x11F8
+ end_offset: 0x40F8
+- name: overlays/ovl_En_Ganon_Organ
+ xml_path: assets/xml/overlays/ovl_En_Ganon_Organ.xml
+ start_offset: 0x368
+ end_offset: 0x6EF0
+- name: overlays/ovl_En_Holl
+ xml_path: assets/xml/overlays/ovl_En_Holl.xml
+ start_offset: 0xE68
+ end_offset: 0xED0
+- name: overlays/ovl_En_Jsjutan
+ xml_path: assets/xml/overlays/ovl_En_Jsjutan.xml
+ start_offset: 0x12C8
+ end_offset: 0x4C60
+- name: overlays/ovl_En_Kanban
+ xml_path: assets/xml/overlays/ovl_En_Kanban.xml
+ start_offset: 0x2E70
+ end_offset: 0x2F30
+- name: overlays/ovl_En_Sda
+ xml_path: assets/xml/overlays/ovl_En_Sda.xml
+ start_offset: 0x1498
+ end_offset: 0x1528
+- name: overlays/ovl_En_Ssh
+ xml_path: assets/xml/overlays/ovl_En_Ssh.xml
+ start_offset: 0x2150
+ end_offset: 0x21E0
+- name: overlays/ovl_En_St
+ xml_path: assets/xml/overlays/ovl_En_St.xml
+ start_offset: 0x26A0
+ end_offset: 0x2730
+- name: overlays/ovl_En_Sth
+ xml_path: assets/xml/overlays/ovl_En_Sth.xml
+ start_offset: 0xE70
+ end_offset: 0x3E44
+- name: overlays/ovl_End_Title
+ xml_path: assets/xml/overlays/ovl_End_Title_ique.xml
+ start_offset: 0x750
+ end_offset: 0x59D0
+- name: overlays/ovl_file_choose
+ xml_path: assets/xml/overlays/ovl_file_choose.xml
+ start_offset: 0xEC40
+ end_offset: 0xF320
+- name: overlays/ovl_Magic_Dark
+ xml_path: assets/xml/overlays/ovl_Magic_Dark.xml
+ start_offset: 0xC90
+ end_offset: 0x16C0
+- name: overlays/ovl_Magic_Fire
+ xml_path: assets/xml/overlays/ovl_Magic_Fire.xml
+ start_offset: 0xB50
+ end_offset: 0x21A0
+- name: overlays/ovl_Magic_Wind
+ xml_path: assets/xml/overlays/ovl_Magic_Wind.xml
+ start_offset: 0x6A0
+ end_offset: 0x1BB8
+- name: overlays/ovl_Oceff_Spot
+ xml_path: assets/xml/overlays/ovl_Oceff_Spot.xml
+ start_offset: 0x780
+ end_offset: 0xE58
+- name: overlays/ovl_Oceff_Storm
+ xml_path: assets/xml/overlays/ovl_Oceff_Storm.xml
+ start_offset: 0x750
+ end_offset: 0x1AE0
+- name: overlays/ovl_Oceff_Wipe
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe.xml
+ start_offset: 0x520
+ end_offset: 0xCE0
+- name: overlays/ovl_Oceff_Wipe2
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe2.xml
+ start_offset: 0x430
+ end_offset: 0x1698
+- name: overlays/ovl_Oceff_Wipe3
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe3.xml
+ start_offset: 0x430
+ end_offset: 0x1678
+- name: overlays/ovl_Oceff_Wipe4
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe4.xml
+ start_offset: 0x410
+ end_offset: 0xEF8
+- name: scenes/dungeons/bdan
+ xml_path: assets/xml/scenes/dungeons/bdan.xml
+- name: scenes/dungeons/bdan_boss
+ xml_path: assets/xml/scenes/dungeons/bdan_boss.xml
+- name: scenes/dungeons/Bmori1
+ xml_path: assets/xml/scenes/dungeons/Bmori1.xml
+- name: scenes/dungeons/ddan
+ xml_path: assets/xml/scenes/dungeons/ddan.xml
+- name: scenes/dungeons/ddan_boss
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
+- name: scenes/dungeons/FIRE_bs
+ xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
+- name: scenes/dungeons/ganon
+ xml_path: assets/xml/scenes/dungeons/ganon.xml
+- name: scenes/dungeons/ganon_boss
+ xml_path: assets/xml/scenes/dungeons/ganon_boss.xml
+- name: scenes/dungeons/ganon_demo
+ xml_path: assets/xml/scenes/dungeons/ganon_demo.xml
+- name: scenes/dungeons/ganon_final
+ xml_path: assets/xml/scenes/dungeons/ganon_final.xml
+- name: scenes/dungeons/ganon_sonogo
+ xml_path: assets/xml/scenes/dungeons/ganon_sonogo.xml
+- name: scenes/dungeons/ganontika
+ xml_path: assets/xml/scenes/dungeons/ganontika.xml
+- name: scenes/dungeons/ganontikasonogo
+ xml_path: assets/xml/scenes/dungeons/ganontikasonogo.xml
+- name: scenes/dungeons/gerudoway
+ xml_path: assets/xml/scenes/dungeons/gerudoway.xml
+- name: scenes/dungeons/HAKAdan
+ xml_path: assets/xml/scenes/dungeons/HAKAdan.xml
+- name: scenes/dungeons/HAKAdan_bs
+ xml_path: assets/xml/scenes/dungeons/HAKAdan_bs.xml
+- name: scenes/dungeons/HAKAdanCH
+ xml_path: assets/xml/scenes/dungeons/HAKAdanCH.xml
+- name: scenes/dungeons/HIDAN
+ xml_path: assets/xml/scenes/dungeons/HIDAN.xml
+- name: scenes/dungeons/ice_doukutu
+ xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml
+- name: scenes/dungeons/jyasinboss
+ xml_path: assets/xml/scenes/dungeons/jyasinboss.xml
+- name: scenes/dungeons/jyasinzou
+ xml_path: assets/xml/scenes/dungeons/jyasinzou.xml
+- name: scenes/dungeons/men
+ xml_path: assets/xml/scenes/dungeons/men.xml
+- name: scenes/dungeons/MIZUsin
+ xml_path: assets/xml/scenes/dungeons/MIZUsin.xml
+- name: scenes/dungeons/MIZUsin_bs
+ xml_path: assets/xml/scenes/dungeons/MIZUsin_bs.xml
+- name: scenes/dungeons/moribossroom
+ xml_path: assets/xml/scenes/dungeons/moribossroom.xml
+- name: scenes/dungeons/ydan
+ xml_path: assets/xml/scenes/dungeons/ydan.xml
+- name: scenes/dungeons/ydan_boss
+ xml_path: assets/xml/scenes/dungeons/ydan_boss.xml
+- name: scenes/indoors/bowling
+ xml_path: assets/xml/scenes/indoors/bowling.xml
+- name: scenes/indoors/daiyousei_izumi
+ xml_path: assets/xml/scenes/indoors/daiyousei_izumi.xml
+- name: scenes/indoors/hairal_niwa
+ xml_path: assets/xml/scenes/indoors/hairal_niwa.xml
+- name: scenes/indoors/hairal_niwa_n
+ xml_path: assets/xml/scenes/indoors/hairal_niwa_n.xml
+- name: scenes/indoors/hakasitarelay
+ xml_path: assets/xml/scenes/indoors/hakasitarelay.xml
+- name: scenes/indoors/hut
+ xml_path: assets/xml/scenes/indoors/hut.xml
+- name: scenes/indoors/hylia_labo
+ xml_path: assets/xml/scenes/indoors/hylia_labo.xml
+- name: scenes/indoors/impa
+ xml_path: assets/xml/scenes/indoors/impa.xml
+- name: scenes/indoors/kakariko
+ xml_path: assets/xml/scenes/indoors/kakariko.xml
+- name: scenes/indoors/kenjyanoma
+ xml_path: assets/xml/scenes/indoors/kenjyanoma.xml
+- name: scenes/indoors/kokiri_home
+ xml_path: assets/xml/scenes/indoors/kokiri_home.xml
+- name: scenes/indoors/kokiri_home3
+ xml_path: assets/xml/scenes/indoors/kokiri_home3.xml
+- name: scenes/indoors/kokiri_home4
+ xml_path: assets/xml/scenes/indoors/kokiri_home4.xml
+- name: scenes/indoors/kokiri_home5
+ xml_path: assets/xml/scenes/indoors/kokiri_home5.xml
+- name: scenes/indoors/labo
+ xml_path: assets/xml/scenes/indoors/labo.xml
+- name: scenes/indoors/link_home
+ xml_path: assets/xml/scenes/indoors/link_home.xml
+- name: scenes/indoors/mahouya
+ xml_path: assets/xml/scenes/indoors/mahouya.xml
+- name: scenes/indoors/malon_stable
+ xml_path: assets/xml/scenes/indoors/malon_stable.xml
+- name: scenes/indoors/miharigoya
+ xml_path: assets/xml/scenes/indoors/miharigoya.xml
+- name: scenes/indoors/nakaniwa
+ xml_path: assets/xml/scenes/indoors/nakaniwa.xml
+- name: scenes/indoors/souko
+ xml_path: assets/xml/scenes/indoors/souko.xml
+- name: scenes/indoors/syatekijyou
+ xml_path: assets/xml/scenes/indoors/syatekijyou.xml
+- name: scenes/indoors/takaraya
+ xml_path: assets/xml/scenes/indoors/takaraya.xml
+- name: scenes/indoors/tent
+ xml_path: assets/xml/scenes/indoors/tent.xml
+- name: scenes/indoors/tokinoma
+ xml_path: assets/xml/scenes/indoors/tokinoma.xml
+- name: scenes/indoors/yousei_izumi_tate
+ xml_path: assets/xml/scenes/indoors/yousei_izumi_tate.xml
+- name: scenes/indoors/yousei_izumi_yoko
+ xml_path: assets/xml/scenes/indoors/yousei_izumi_yoko.xml
+- name: scenes/misc/enrui
+ xml_path: assets/xml/scenes/misc/enrui.xml
+- name: scenes/misc/entra
+ xml_path: assets/xml/scenes/misc/entra.xml
+- name: scenes/misc/entra_n
+ xml_path: assets/xml/scenes/misc/entra_n.xml
+- name: scenes/misc/hakaana
+ xml_path: assets/xml/scenes/misc/hakaana.xml
+- name: scenes/misc/hakaana2
+ xml_path: assets/xml/scenes/misc/hakaana2.xml
+- name: scenes/misc/hakaana_ouke
+ xml_path: assets/xml/scenes/misc/hakaana_ouke.xml
+- name: scenes/misc/hiral_demo
+ xml_path: assets/xml/scenes/misc/hiral_demo.xml
+- name: scenes/misc/kakariko3
+ xml_path: assets/xml/scenes/misc/kakariko3.xml
+- name: scenes/misc/kakusiana
+ xml_path: assets/xml/scenes/misc/kakusiana.xml
+- name: scenes/misc/kinsuta
+ xml_path: assets/xml/scenes/misc/kinsuta.xml
+- name: scenes/misc/market_alley
+ xml_path: assets/xml/scenes/misc/market_alley.xml
+- name: scenes/misc/market_alley_n
+ xml_path: assets/xml/scenes/misc/market_alley_n.xml
+- name: scenes/misc/market_day
+ xml_path: assets/xml/scenes/misc/market_day.xml
+- name: scenes/misc/market_night
+ xml_path: assets/xml/scenes/misc/market_night.xml
+- name: scenes/misc/market_ruins
+ xml_path: assets/xml/scenes/misc/market_ruins.xml
+- name: scenes/misc/shrine
+ xml_path: assets/xml/scenes/misc/shrine.xml
+- name: scenes/misc/shrine_n
+ xml_path: assets/xml/scenes/misc/shrine_n.xml
+- name: scenes/misc/shrine_r
+ xml_path: assets/xml/scenes/misc/shrine_r.xml
+- name: scenes/misc/turibori
+ xml_path: assets/xml/scenes/misc/turibori.xml
+- name: scenes/overworld/ganon_tou
+ xml_path: assets/xml/scenes/overworld/ganon_tou.xml
+- name: scenes/overworld/spot00
+ xml_path: assets/xml/scenes/overworld/spot00.xml
+- name: scenes/overworld/spot01
+ xml_path: assets/xml/scenes/overworld/spot01.xml
+- name: scenes/overworld/spot02
+ xml_path: assets/xml/scenes/overworld/spot02.xml
+- name: scenes/overworld/spot03
+ xml_path: assets/xml/scenes/overworld/spot03.xml
+- name: scenes/overworld/spot04
+ xml_path: assets/xml/scenes/overworld/spot04.xml
+- name: scenes/overworld/spot05
+ xml_path: assets/xml/scenes/overworld/spot05.xml
+- name: scenes/overworld/spot06
+ xml_path: assets/xml/scenes/overworld/spot06.xml
+- name: scenes/overworld/spot07
+ xml_path: assets/xml/scenes/overworld/spot07.xml
+- name: scenes/overworld/spot08
+ xml_path: assets/xml/scenes/overworld/spot08.xml
+- name: scenes/overworld/spot09
+ xml_path: assets/xml/scenes/overworld/spot09.xml
+- name: scenes/overworld/spot10
+ xml_path: assets/xml/scenes/overworld/spot10.xml
+- name: scenes/overworld/spot11
+ xml_path: assets/xml/scenes/overworld/spot11.xml
+- name: scenes/overworld/spot12
+ xml_path: assets/xml/scenes/overworld/spot12.xml
+- name: scenes/overworld/spot13
+ xml_path: assets/xml/scenes/overworld/spot13.xml
+- name: scenes/overworld/spot15
+ xml_path: assets/xml/scenes/overworld/spot15.xml
+- name: scenes/overworld/spot16
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
+- name: scenes/overworld/spot17
+ xml_path: assets/xml/scenes/overworld/spot17.xml
+- name: scenes/overworld/spot18
+ xml_path: assets/xml/scenes/overworld/spot18.xml
+- name: scenes/overworld/spot20
+ xml_path: assets/xml/scenes/overworld/spot20.xml
+- name: scenes/shops/alley_shop
+ xml_path: assets/xml/scenes/shops/alley_shop.xml
+- name: scenes/shops/drag
+ xml_path: assets/xml/scenes/shops/drag.xml
+- name: scenes/shops/face_shop
+ xml_path: assets/xml/scenes/shops/face_shop.xml
+- name: scenes/shops/golon
+ xml_path: assets/xml/scenes/shops/golon.xml
+- name: scenes/shops/kokiri_shop
+ xml_path: assets/xml/scenes/shops/kokiri_shop.xml
+- name: scenes/shops/night_shop
+ xml_path: assets/xml/scenes/shops/night_shop.xml
+- name: scenes/shops/shop1
+ xml_path: assets/xml/scenes/shops/shop1.xml
+- name: scenes/shops/zoora
+ xml_path: assets/xml/scenes/shops/zoora.xml
+- name: textures/backgrounds
+ xml_path: assets/xml/textures/backgrounds.xml
+- name: textures/do_action_static
+ xml_path: assets/xml/textures/do_action_static.xml
+- name: textures/icon_item_24_static
+ xml_path: assets/xml/textures/icon_item_24_static.xml
+- name: textures/icon_item_dungeon_static
+ xml_path: assets/xml/textures/icon_item_dungeon_static.xml
+- name: textures/icon_item_field_static
+ xml_path: assets/xml/textures/icon_item_field_static.xml
+- name: textures/icon_item_gameover_static
+ xml_path: assets/xml/textures/icon_item_gameover_static.xml
+- name: textures/icon_item_jpn_static
+ xml_path: assets/xml/textures/icon_item_jpn_static.xml
+- name: textures/icon_item_nes_static
+ xml_path: assets/xml/textures/icon_item_nes_static.xml
+- name: textures/icon_item_static
+ xml_path: assets/xml/textures/icon_item_static.xml
+- name: textures/item_name_static
+ xml_path: assets/xml/textures/item_name_static.xml
+- name: textures/kanji
+ xml_path: assets/xml/textures/kanji.xml
+- name: textures/map_48x85_static
+ xml_path: assets/xml/textures/map_48x85_static.xml
+- name: textures/map_grand_static
+ xml_path: assets/xml/textures/map_grand_static.xml
+- name: textures/map_i_static
+ xml_path: assets/xml/textures/map_i_static.xml
+- name: textures/map_name_static
+ xml_path: assets/xml/textures/map_name_static.xml
+- name: textures/message_static
+ xml_path: assets/xml/textures/message_static.xml
+- name: textures/message_texture_static
+ xml_path: assets/xml/textures/message_texture_static.xml
+- name: textures/nes_font_static
+ xml_path: assets/xml/textures/nes_font_static_ique_cn.xml
+- name: textures/nintendo_rogo_static
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
+- name: textures/parameter_static
+ xml_path: assets/xml/textures/parameter_static.xml
+- name: textures/place_title_cards
+ xml_path: assets/xml/textures/place_title_cards.xml
+- name: textures/skyboxes
+ xml_path: assets/xml/textures/skyboxes.xml
+- name: textures/title_static
+ xml_path: assets/xml/textures/title_static.xml
diff --git a/baseroms/ique-cn/segments.csv b/baseroms/ique-cn/segments.csv
new file mode 100644
index 0000000000..e06853b6c2
--- /dev/null
+++ b/baseroms/ique-cn/segments.csv
@@ -0,0 +1,1510 @@
+Name,VRAM start
+makerom,80000000
+boot,80000450
+dmadata,
+Audiobank,
+Audioseq,
+Audiotable,
+kanji,
+link_animetion,
+icon_item_static,
+icon_item_24_static,
+icon_item_field_static,
+icon_item_dungeon_static,
+icon_item_gameover_static,
+icon_item_jpn_static,
+icon_item_nes_static,
+item_name_static,
+map_name_static,
+do_action_static,
+message_static,
+message_texture_static,
+nes_font_static,
+jpn_message_data_static,
+nes_message_data_static,
+staff_message_data_static,
+map_grand_static,
+map_48x85_static,
+map_i_static,
+code,80018FA0
+ovl_title,80800000
+ovl_select,80800930
+ovl_opening,808035B0
+ovl_file_choose,80803700
+ovl_kaleido_scope,808141F0
+ovl_player_actor,80830290
+ovl_map_mark_data,80856A70
+ovl_En_Test,8085D5D0
+ovl_En_GirlA,80862E80
+ovl_En_Part,808657A0
+ovl_En_Light,80866E00
+ovl_En_Door,80867C00
+ovl_En_Box,80868A40
+ovl_En_Poh,8086A5A0
+ovl_En_Okuta,8086E790
+ovl_En_Bom,80870D70
+ovl_En_Wallmas,80871C40
+ovl_En_Dodongo,80873650
+ovl_En_Firefly,808763F0
+ovl_En_Horse,80878560
+ovl_En_Arrow,808847C0
+ovl_En_Elf,80885EC0
+ovl_En_Niw,8088A880
+ovl_En_Tite,8088DBB0
+ovl_En_Reeba,80890950
+ovl_En_Peehat,808923C0
+ovl_En_Holl,80895AC0
+ovl_En_Scene_Change,80896A90
+ovl_En_Zf,80896BC0
+ovl_En_Hata,8089D6B0
+ovl_Boss_Dodongo,8089DC40
+ovl_Boss_Goma,808A7740
+ovl_En_Zl1,808AD6E0
+ovl_En_Viewer,808B14F0
+ovl_En_Goma,808B43B0
+ovl_Bg_Pushbox,808B7060
+ovl_En_Bubble,808B7360
+ovl_Door_Shutter,808B8780
+ovl_En_Dodojr,808BAA40
+ovl_En_Bdfire,808BC8E0
+ovl_En_Boom,808BD480
+ovl_En_Torch2,808BDD50
+ovl_En_Bili,808C04F0
+ovl_En_Tp,808C27C0
+ovl_En_St,808C4630
+ovl_En_Bw,808C72A0
+ovl_En_Eiyer,808CA630
+ovl_En_River_Sound,808CC290
+ovl_En_Horse_Normal,808CCC20
+ovl_En_Ossan,808CF240
+ovl_Bg_Treemouth,808D5820
+ovl_Bg_Dodoago,808D6E80
+ovl_Bg_Hidan_Dalm,808D7C30
+ovl_Bg_Hidan_Hrock,808D8480
+ovl_En_Horse_Ganon,808D8CB0
+ovl_Bg_Hidan_Rock,808D9A30
+ovl_Bg_Hidan_Rsekizou,808DAB30
+ovl_Bg_Hidan_Sekizou,808DB710
+ovl_Bg_Hidan_Sima,808DCB60
+ovl_Bg_Hidan_Syoku,808DDA60
+ovl_En_Xc,808DDEC0
+ovl_Bg_Hidan_Curtain,808E4650
+ovl_Bg_Spot00_Hanebasi,808E50F0
+ovl_En_Mb,808E6200
+ovl_En_Bombf,808EA430
+ovl_Bg_Hidan_Firewall,808EB8C0
+ovl_Bg_Dy_Yoseizo,808EC020
+ovl_En_Zl2,808EEE10
+ovl_Bg_Hidan_Fslift,808F3510
+ovl_En_OE2,808F39E0
+ovl_Bg_Ydan_Hasi,808F3AC0
+ovl_Bg_Ydan_Maruta,808F4270
+ovl_Boss_Ganondrof,808F4950
+ovl_En_Am,808F96E0
+ovl_En_Dekubaba,808FBAE0
+ovl_En_M_Fire1,808FF590
+ovl_En_M_Thunder,808FF730
+ovl_Bg_Ddan_Jd,80900D30
+ovl_Bg_Breakwall,80901380
+ovl_En_Jj,809021F0
+ovl_En_Horse_Zelda,809037C0
+ovl_Bg_Ddan_Kd,809042B0
+ovl_Door_Warp1,80904BA0
+ovl_Obj_Syokudai,80908EB0
+ovl_Item_B_Heart,80909B00
+ovl_En_Dekunuts,80909F10
+ovl_Bg_Menkuri_Kaiten,8090B710
+ovl_Bg_Menkuri_Eye,8090B8A0
+ovl_En_Vali,8090BD40
+ovl_Bg_Mizu_Movebg,8090E400
+ovl_Bg_Mizu_Water,8090F590
+ovl_Arms_Hook,80910260
+ovl_En_fHG,80910FD0
+ovl_Bg_Mori_Hineri,80913900
+ovl_En_Bb,80914650
+ovl_Bg_Toki_Hikari,80918330
+ovl_En_Yukabyun,809190D0
+ovl_Bg_Toki_Swd,809196E0
+ovl_En_Fhg_Fire,8091AD30
+ovl_Bg_Mjin,8091D3D0
+ovl_Bg_Hidan_Kousi,8091D7C0
+ovl_Door_Toki,8091DD50
+ovl_Bg_Hidan_Hamstep,8091DEB0
+ovl_En_Bird,8091ED60
+ovl_En_Wood02,8091F220
+ovl_En_Lightbox,80920400
+ovl_En_Pu_box,80920880
+ovl_En_Trap,80920BC0
+ovl_En_Arow_Trap,80921E60
+ovl_En_Vase,80921FB0
+ovl_En_Ta,809220B0
+ovl_En_Tk,80925A70
+ovl_Bg_Mori_Bigst,809278A0
+ovl_Bg_Mori_Elevator,809281D0
+ovl_Bg_Mori_Kaitenkabe,80928CC0
+ovl_Bg_Mori_Rakkatenjo,80929330
+ovl_En_Vm,80929CB0
+ovl_Demo_Effect,8092B570
+ovl_Demo_Kankyo,80931110
+ovl_Bg_Hidan_Fwbig,80934E00
+ovl_En_Floormas,80935AE0
+ovl_En_Heishi1,80938EC0
+ovl_En_Rd,8093A3D0
+ovl_En_Po_Sisters,8093CC90
+ovl_Bg_Heavy_Block,80941980
+ovl_Bg_Po_Event,80943270
+ovl_Obj_Mure,809450B0
+ovl_En_Sw,809460C0
+ovl_Boss_Fd,809498B0
+ovl_Object_Kankyo,80950C10
+ovl_En_Du,80953E90
+ovl_En_Fd,80955920
+ovl_En_Horse_Link_Child,809585C0
+ovl_Door_Ana,8095A3C0
+ovl_Bg_Spot02_Objects,8095AA30
+ovl_Bg_Haka,8095BD90
+ovl_Magic_Wind,8095C450
+ovl_Magic_Fire,8095E150
+ovl_En_Ru1,80960450
+ovl_Boss_Fd2,80967AF0
+ovl_En_Fd_Fire,8096B820
+ovl_En_Dh,8096C530
+ovl_En_Dha,8096E010
+ovl_En_Rl,8096F010
+ovl_En_Encount1,8096FEF0
+ovl_Demo_Du,80970A50
+ovl_Demo_Im,80974230
+ovl_Demo_Tre_Lgt,809781A0
+ovl_En_Fw,809788B0
+ovl_Bg_Vb_Sima,8097A070
+ovl_En_Vb_Ball,8097A790
+ovl_Bg_Haka_Megane,8097B940
+ovl_Bg_Haka_MeganeBG,8097BD40
+ovl_Bg_Haka_Ship,8097C400
+ovl_Bg_Haka_Sgami,8097CE50
+ovl_En_Heishi2,8097DA70
+ovl_En_Encount2,8097FC70
+ovl_En_Fire_Rock,80980EA0
+ovl_En_Brob,80981FB0
+ovl_Mir_Ray,809830A0
+ovl_Bg_Spot09_Obj,80984950
+ovl_Bg_Spot18_Obj,80984E70
+ovl_Boss_Va,80985740
+ovl_Bg_Haka_Tubo,8099C9D0
+ovl_Bg_Haka_Trap,8099D3F0
+ovl_Bg_Haka_Huta,8099E9C0
+ovl_Bg_Haka_Zou,8099F460
+ovl_Bg_Spot17_Funen,809A0650
+ovl_En_Syateki_Itm,809A08A0
+ovl_En_Syateki_Man,809A1640
+ovl_En_Tana,809A2400
+ovl_En_Nb,809A26B0
+ovl_Boss_Mo,809A6C80
+ovl_En_Sb,809B7260
+ovl_En_Bigokuta,809B86A0
+ovl_En_Karebaba,809BB1A0
+ovl_Bg_Bdan_Objects,809BCA90
+ovl_Demo_Sa,809BDD60
+ovl_Demo_Go,809C0880
+ovl_En_In,809C15D0
+ovl_En_Tr,809C4370
+ovl_Bg_Spot16_Bombstone,809C5C70
+ovl_Bg_Hidan_Kowarerukabe,809C71C0
+ovl_Bg_Bombwall,809C80A0
+ovl_En_Ru2,809C8960
+ovl_Obj_Dekujr,809CB6E0
+ovl_Bg_Mizu_Uzu,809CBD20
+ovl_Bg_Spot06_Objects,809CBEF0
+ovl_Bg_Ice_Objects,809CD2F0
+ovl_Bg_Haka_Water,809CE230
+ovl_En_Ma2,809CEA30
+ovl_En_Bom_Chu,809CFA90
+ovl_En_Horse_Game_Check,809D1130
+ovl_Boss_Tw,809D2200
+ovl_En_Rr,809E7DD0
+ovl_En_Ba,809EA300
+ovl_En_Bx,809EC1D0
+ovl_En_Anubice,809ECCD0
+ovl_En_Anubice_Fire,809EDF80
+ovl_Bg_Mori_Hashigo,809EED40
+ovl_Bg_Mori_Hashira4,809EF600
+ovl_Bg_Mori_Idomizu,809EFB90
+ovl_Bg_Spot16_Doughnut,809F01D0
+ovl_Bg_Bdan_Switch,809F0790
+ovl_En_Ma1,809F1BC0
+ovl_Boss_Ganon,809F2EA0
+ovl_Boss_Sst,80A18CD0
+ovl_En_Ny,80A252A0
+ovl_En_Fr,80A26BE0
+ovl_Item_Shield,80A29670
+ovl_Bg_Ice_Shelter,80A2A080
+ovl_En_Ice_Hono,80A2B2C0
+ovl_Item_Ocarina,80A2C4B0
+ovl_Magic_Dark,80A2CC80
+ovl_Demo_6K,80A2E4D0
+ovl_En_Anubice_Tag,80A31230
+ovl_Bg_Haka_Gate,80A31500
+ovl_Bg_Spot15_Saku,80A325A0
+ovl_Bg_Jya_Goroiwa,80A328E0
+ovl_Bg_Jya_Zurerukabe,80A33060
+ovl_Bg_Jya_Cobra,80A33710
+ovl_Bg_Jya_Kanaami,80A35450
+ovl_Fishing,80A35800
+ovl_Obj_Oshihiki,80A4ED40
+ovl_Bg_Gate_Shutter,80A507F0
+ovl_Eff_Dust,80A50C80
+ovl_Bg_Spot01_Fusya,80A52050
+ovl_Bg_Spot01_Idohashira,80A522F0
+ovl_Bg_Spot01_Idomizu,80A52EF0
+ovl_Bg_Po_Syokudai,80A53210
+ovl_Bg_Ganon_Otyuka,80A53B80
+ovl_Bg_Spot15_Rrbox,80A561C0
+ovl_Bg_Umajump,80A56FA0
+ovl_En_Insect,80A57130
+ovl_En_Butte,80A59650
+ovl_En_Fish,80A5AC20
+ovl_Bg_Spot08_Iceblock,80A5CD30
+ovl_Item_Etcetera,80A5DD70
+ovl_Arrow_Fire,80A5E640
+ovl_Arrow_Ice,80A60520
+ovl_Arrow_Light,80A62420
+ovl_Obj_Kibako,80A64330
+ovl_Obj_Tsubo,80A65030
+ovl_En_Wonder_Item,80A66020
+ovl_En_Ik,80A66D50
+ovl_Demo_Ik,80A6B3B0
+ovl_En_Skj,80A6C8C0
+ovl_En_Skjneedle,80A70210
+ovl_En_G_Switch,80A70520
+ovl_Demo_Ext,80A71D40
+ovl_Demo_Shd,80A72690
+ovl_En_Dns,80A74AA0
+ovl_Elf_Msg,80A75E30
+ovl_En_Honotrap,80A76420
+ovl_En_Tubo_Trap,80A77980
+ovl_Obj_Ice_Poly,80A78620
+ovl_Bg_Spot03_Taki,80A78FD0
+ovl_Bg_Spot07_Taki,80A798F0
+ovl_En_Fz,80A79EE0
+ovl_En_Po_Relay,80A7BEF0
+ovl_Bg_Relay_Objects,80A7D600
+ovl_En_Diving_Game,80A7DDB0
+ovl_En_Kusa,80A7F760
+ovl_Obj_Bean,80A80C40
+ovl_Obj_Bombiwa,80A833D0
+ovl_Obj_Switch,80A83940
+ovl_Obj_Elevator,80A85720
+ovl_Obj_Lift,80A85AE0
+ovl_Obj_Hsblock,80A86500
+ovl_En_Okarina_Tag,80A86AD0
+ovl_En_Yabusame_Mark,80A87FD0
+ovl_En_Goroiwa,80A886A0
+ovl_En_Ex_Ruppy,80A8AA60
+ovl_En_Toryo,80A8BB20
+ovl_En_Daiku,80A8C7B0
+ovl_En_Nwc,80A8DEF0
+ovl_En_Blkobj,80A8E910
+ovl_Item_Inbox,80A8EE70
+ovl_En_Ge1,80A8EFD0
+ovl_Obj_Blockstop,80A91000
+ovl_En_Sda,80A911A0
+ovl_En_Clear_Tag,80A92890
+ovl_En_Niw_Lady,80A9DE30
+ovl_En_Gm,80A9F730
+ovl_En_Ms,80AA0460
+ovl_En_Hs,80AA0B50
+ovl_Bg_Ingate,80AA16F0
+ovl_En_Kanban,80AA1A80
+ovl_En_Heishi3,80AA4BD0
+ovl_En_Syateki_Niw,80AA55A0
+ovl_En_Attack_Niw,80AA7630
+ovl_Bg_Spot01_Idosoko,80AA8890
+ovl_En_Sa,80AA8AA0
+ovl_En_Wonder_Talk,80AAAD10
+ovl_Bg_Gjyo_Bridge,80AAB3A0
+ovl_En_Ds,80AAB890
+ovl_En_Mk,80AAC4B0
+ovl_En_Bom_Bowl_Man,80AAD340
+ovl_En_Bom_Bowl_Pit,80AAE880
+ovl_En_Owl,80AAF1F0
+ovl_En_Ishi,80AB2D90
+ovl_Obj_Hana,80ABBEE0
+ovl_Obj_Lightswitch,80ABC1F0
+ovl_Obj_Mure2,80ABD620
+ovl_En_Go,80ABE040
+ovl_En_Fu,80AC2680
+ovl_En_Changer,80AC33D0
+ovl_Bg_Jya_Megami,80AC3DB0
+ovl_Bg_Jya_Lift,80AC4FA0
+ovl_Bg_Jya_Bigmirror,80AC54F0
+ovl_Bg_Jya_Bombchuiwa,80AC5D40
+ovl_Bg_Jya_Amishutter,80AC6880
+ovl_Bg_Jya_Bombiwa,80AC6C10
+ovl_Bg_Spot18_Basket,80AC71D0
+ovl_En_Ganon_Organ,80AC81C0
+ovl_En_Siofuki,80ACF200
+ovl_En_Stream,80ACFFB0
+ovl_En_Mm,80AD0540
+ovl_En_Ko,80AD1BA0
+ovl_En_Kz,80AD5CE0
+ovl_En_Weather_Tag,80AD7280
+ovl_Bg_Sst_Floor,80AD8170
+ovl_En_Ani,80AD86D0
+ovl_En_Ex_Item,80AD9440
+ovl_Bg_Jya_Ironobj,80ADA5C0
+ovl_En_Js,80ADB370
+ovl_En_Jsjutan,80ADBD40
+ovl_En_Cs,80AE1670
+ovl_En_Md,80AE28A0
+ovl_En_Hy,80AE4F10
+ovl_En_Ganon_Mant,80AE8850
+ovl_En_Okarina_Effect,80AECA80
+ovl_En_Mag,80AECE40
+ovl_Door_Gerudo,80AF1E80
+ovl_Elf_Msg2,80AF2470
+ovl_Demo_Gt,80AF28E0
+ovl_En_Po_Field,80AF7EF0
+ovl_Efc_Erupc,80AFB980
+ovl_Bg_Zg,80AFC470
+ovl_En_Heishi4,80AFC8C0
+ovl_En_Zl3,80AFD7C0
+ovl_Boss_Ganon2,80B05610
+ovl_En_Kakasi,80B18480
+ovl_En_Takara_Man,80B191C0
+ovl_Obj_Makeoshihiki,80B19A80
+ovl_Oceff_Spot,80B19F10
+ovl_End_Title,80B1AE40
+ovl_En_Torch,80B20880
+ovl_Demo_Ec,80B20970
+ovl_Shot_Sun,80B241D0
+ovl_En_Dy_Extra,80B24890
+ovl_En_Wonder_Talk2,80B24E30
+ovl_En_Ge2,80B254D0
+ovl_Obj_Roomtimer,80B26E70
+ovl_En_Ssh,80B270C0
+ovl_En_Sth,80B296B0
+ovl_Oceff_Wipe,80B2D770
+ovl_Effect_Ss_Dust,80B2E4F0
+ovl_Effect_Ss_KiraKira,80B2ED30
+ovl_Effect_Ss_Bomb,80B2F3A0
+ovl_Effect_Ss_Bomb2,80B2F7D0
+ovl_Effect_Ss_Blast,80B300D0
+ovl_Effect_Ss_G_Spk,80B30460
+ovl_Effect_Ss_D_Fire,80B30A10
+ovl_Effect_Ss_Bubble,80B30F00
+ovl_Effect_Ss_G_Ripple,80B31380
+ovl_Effect_Ss_G_Splash,80B318E0
+ovl_Effect_Ss_G_Magma,80B31D90
+ovl_Effect_Ss_G_Fire,80B31FF0
+ovl_Effect_Ss_Lightning,80B32280
+ovl_Effect_Ss_Dt_Bubble,80B32950
+ovl_Effect_Ss_Hahen,80B32EE0
+ovl_Effect_Ss_Stick,80B33520
+ovl_Effect_Ss_Sibuki,80B338C0
+ovl_Effect_Ss_Sibuki2,80B33F90
+ovl_Effect_Ss_G_Magma2,80B342C0
+ovl_Effect_Ss_Stone1,80B347D0
+ovl_Effect_Ss_HitMark,80B34B50
+ovl_Effect_Ss_Fhg_Flash,80B350A0
+ovl_Effect_Ss_K_Fire,80B36020
+ovl_Effect_Ss_Solder_Srch_Ball,80B36460
+ovl_Effect_Ss_Kakera,80B36610
+ovl_Effect_Ss_Ice_Piece,80B376A0
+ovl_Effect_Ss_En_Ice,80B37AE0
+ovl_Effect_Ss_Fire_Tail,80B383A0
+ovl_Effect_Ss_En_Fire,80B38AA0
+ovl_Effect_Ss_Extra,80B391F0
+ovl_Effect_Ss_Fcircle,80B395B0
+ovl_Effect_Ss_Dead_Db,80B39A60
+ovl_Effect_Ss_Dead_Dd,80B39F40
+ovl_Effect_Ss_Dead_Ds,80B3A4D0
+ovl_Effect_Ss_Dead_Sound,80B3A950
+ovl_Oceff_Storm,80B3AA90
+ovl_En_Weiyer,80B3C640
+ovl_Bg_Spot05_Soko,80B3E040
+ovl_Bg_Jya_1flift,80B3E360
+ovl_Bg_Jya_Haheniron,80B3E9F0
+ovl_Bg_Spot12_Gate,80B3F1E0
+ovl_Bg_Spot12_Saku,80B3F5F0
+ovl_En_Hintnuts,80B3FAB0
+ovl_En_Nutsball,80B414E0
+ovl_Bg_Spot00_Break,80B41B00
+ovl_En_Shopnuts,80B41CA0
+ovl_En_It,80B42BB0
+ovl_En_GeldB,80B42D40
+ovl_Oceff_Wipe2,80B480F0
+ovl_Oceff_Wipe3,80B49860
+ovl_En_Niw_Girl,80B4AFB0
+ovl_En_Dog,80B4BA80
+ovl_En_Si,80B4CC30
+ovl_Bg_Spot01_Objects2,80B4D130
+ovl_Obj_Comb,80B4D5F0
+ovl_Bg_Spot11_Bakudankabe,80B4DE50
+ovl_Obj_Kibako2,80B4E490
+ovl_En_Dnt_Demo,80B4EB50
+ovl_En_Dnt_Jiji,80B4F870
+ovl_En_Dnt_Nomal,80B50D90
+ovl_En_Guest,80B53B90
+ovl_Bg_Bom_Guard,80B54530
+ovl_En_Hs2,80B54750
+ovl_Demo_Kekkai,80B54D30
+ovl_Bg_Spot08_Bakudankabe,80B56020
+ovl_Bg_Spot17_Bakudankabe,80B566C0
+ovl_Obj_Mure3,80B56DB0
+ovl_En_Tg,80B57580
+ovl_En_Mu,80B57C60
+ovl_En_Go2,80B58580
+ovl_En_Wf,80B5E5C0
+ovl_En_Skb,80B628D0
+ovl_Demo_Gj,80B641C0
+ovl_Demo_Geff,80B67E70
+ovl_Bg_Gnd_Firemeiro,80B68690
+ovl_Bg_Gnd_Darkmeiro,80B68BE0
+ovl_Bg_Gnd_Soulmeiro,80B693A0
+ovl_Bg_Gnd_Nisekabe,80B69C00
+ovl_Bg_Gnd_Iceblock,80B69D70
+ovl_Bg_Ydan_Sp,80B6AE70
+ovl_En_Gb,80B6C590
+ovl_En_Gs,80B6DCC0
+ovl_Bg_Mizu_Bwall,80B6FB30
+ovl_Bg_Mizu_Shutter,80B71000
+ovl_En_Daiku_Kakariko,80B71800
+ovl_Bg_Bowl_Wall,80B72BC0
+ovl_En_Wall_Tubo,80B73540
+ovl_En_Po_Desert,80B73A30
+ovl_En_Crow,80B747F0
+ovl_Door_Killer,80B75E90
+ovl_Bg_Spot11_Oasis,80B77400
+ovl_Bg_Spot18_Futa,80B77B30
+ovl_Bg_Spot18_Shutter,80B77CD0
+ovl_En_Ma3,80B78220
+ovl_En_Cow,80B791D0
+ovl_Bg_Ice_Turara,80B7A630
+ovl_Bg_Ice_Shutter,80B7AE60
+ovl_En_Kakasi2,80B7B2D0
+ovl_En_Kakasi3,80B7B9F0
+ovl_Oceff_Wipe4,80B7CAD0
+ovl_En_Eg,80B7DAB0
+ovl_Bg_Menkuri_Nisekabe,80B7DC60
+ovl_En_Zo,80B7DDB0
+ovl_Effect_Ss_Ice_Smoke,80B80370
+ovl_Obj_Makekinsuta,80B80850
+ovl_En_Ge3,80B809A0
+ovl_Obj_Timeblock,80B815E0
+ovl_Obj_Hamishi,80B82230
+ovl_En_Zl4,80B82A80
+ovl_En_Mm2,80B874B0
+ovl_Bg_Jya_Block,80B88270
+ovl_Obj_Warp2block,80B884E0
+gameplay_keep,
+gameplay_field_keep,
+gameplay_dangeon_keep,
+gameplay_object_exchange_static,
+object_link_boy,
+object_link_child,
+object_box,
+object_human,
+object_okuta,
+object_poh,
+object_wallmaster,
+object_dy_obj,
+object_firefly,
+object_dodongo,
+object_fire,
+object_niw,
+object_tite,
+object_reeba,
+object_peehat,
+object_kingdodongo,
+object_horse,
+object_zf,
+object_goma,
+object_zl1,
+object_gol,
+object_bubble,
+object_dodojr,
+object_torch2,
+object_bl,
+object_tp,
+object_oA1,
+object_st,
+object_bw,
+object_ei,
+object_horse_normal,
+object_oB1,
+object_o_anime,
+object_spot04_objects,
+object_ddan_objects,
+object_hidan_objects,
+object_horse_ganon,
+object_oA2,
+object_spot00_objects,
+object_mb,
+object_bombf,
+object_sk2,
+object_oE1,
+object_oE_anime,
+object_oE2,
+object_ydan_objects,
+object_gnd,
+object_am,
+object_dekubaba,
+object_oA3,
+object_oA4,
+object_oA5,
+object_oA6,
+object_oA7,
+object_jj,
+object_oA8,
+object_oA9,
+object_oB2,
+object_oB3,
+object_oB4,
+object_horse_zelda,
+object_opening_demo1,
+object_warp1,
+object_b_heart,
+object_dekunuts,
+object_oE3,
+object_oE4,
+object_menkuri_objects,
+object_oE5,
+object_oE6,
+object_oE7,
+object_oE8,
+object_oE9,
+object_oE10,
+object_oE11,
+object_oE12,
+object_vali,
+object_oA10,
+object_oA11,
+object_mizu_objects,
+object_fhg,
+object_ossan,
+object_mori_hineri1,
+object_Bb,
+object_toki_objects,
+object_yukabyun,
+object_zl2,
+object_mjin,
+object_mjin_flash,
+object_mjin_dark,
+object_mjin_flame,
+object_mjin_ice,
+object_mjin_soul,
+object_mjin_wind,
+object_mjin_oka,
+object_haka_objects,
+object_spot06_objects,
+object_ice_objects,
+object_relay_objects,
+object_mori_hineri1a,
+object_mori_hineri2,
+object_mori_hineri2a,
+object_mori_objects,
+object_mori_tex,
+object_spot08_obj,
+object_warp2,
+object_hata,
+object_bird,
+object_wood02,
+object_lightbox,
+object_pu_box,
+object_trap,
+object_vase,
+object_im,
+object_ta,
+object_tk,
+object_xc,
+object_vm,
+object_bv,
+object_hakach_objects,
+object_efc_crystal_light,
+object_efc_fire_ball,
+object_efc_flash,
+object_efc_lgt_shower,
+object_efc_star_field,
+object_god_lgt,
+object_light_ring,
+object_triforce_spot,
+object_medal,
+object_bdan_objects,
+object_sd,
+object_rd,
+object_po_sisters,
+object_heavy_object,
+object_gndd,
+object_fd,
+object_du,
+object_fw,
+object_horse_link_child,
+object_spot02_objects,
+object_haka,
+object_ru1,
+object_syokudai,
+object_fd2,
+object_dh,
+object_rl,
+object_efc_tw,
+object_demo_tre_lgt,
+object_gi_key,
+object_mir_ray,
+object_brob,
+object_gi_jewel,
+object_spot09_obj,
+object_spot18_obj,
+object_bdoor,
+object_spot17_obj,
+object_shop_dungen,
+object_nb,
+object_mo,
+object_sb,
+object_gi_melody,
+object_gi_heart,
+object_gi_compass,
+object_gi_bosskey,
+object_gi_medal,
+object_gi_nuts,
+object_sa,
+object_gi_hearts,
+object_gi_arrowcase,
+object_gi_bombpouch,
+object_in,
+object_tr,
+object_spot16_obj,
+object_oE1s,
+object_oE4s,
+object_os_anime,
+object_gi_bottle,
+object_gi_stick,
+object_gi_map,
+object_oF1d_map,
+object_ru2,
+object_gi_shield_1,
+object_dekujr,
+object_gi_magicpot,
+object_gi_bomb_1,
+object_oF1s,
+object_ma2,
+object_gi_purse,
+object_hni,
+object_tw,
+object_rr,
+object_bxa,
+object_anubice,
+object_gi_gerudo,
+object_gi_arrow,
+object_gi_bomb_2,
+object_gi_egg,
+object_gi_scale,
+object_gi_shield_2,
+object_gi_hookshot,
+object_gi_ocarina,
+object_gi_milk,
+object_ma1,
+object_ganon,
+object_sst,
+object_ny,
+object_fr,
+object_gi_pachinko,
+object_gi_boomerang,
+object_gi_bow,
+object_gi_glasses,
+object_gi_liquid,
+object_ani,
+object_demo_6k,
+object_gi_shield_3,
+object_gi_letter,
+object_spot15_obj,
+object_jya_obj,
+object_gi_clothes,
+object_gi_bean,
+object_gi_fish,
+object_gi_saw,
+object_gi_hammer,
+object_gi_grass,
+object_gi_longsword,
+object_spot01_objects,
+object_md,
+object_km1,
+object_kw1,
+object_zo,
+object_kz,
+object_umajump,
+object_masterkokiri,
+object_masterkokirihead,
+object_mastergolon,
+object_masterzoora,
+object_aob,
+object_ik,
+object_ahg,
+object_cne,
+object_gi_niwatori,
+object_skj,
+object_gi_bottle_letter,
+object_bji,
+object_bba,
+object_gi_ocarina_0,
+object_ds,
+object_ane,
+object_boj,
+object_spot03_object,
+object_spot07_object,
+object_fz,
+object_bob,
+object_ge1,
+object_yabusame_point,
+object_gi_boots_2,
+object_gi_seed,
+object_gnd_magic,
+object_d_elevator,
+object_d_hsblock,
+object_d_lift,
+object_mamenoki,
+object_goroiwa,
+object_toryo,
+object_daiku,
+object_nwc,
+object_blkobj,
+object_gm,
+object_ms,
+object_hs,
+object_ingate,
+object_lightswitch,
+object_kusa,
+object_tsubo,
+object_gi_gloves,
+object_gi_coin,
+object_kanban,
+object_gjyo_objects,
+object_owl,
+object_mk,
+object_fu,
+object_gi_ki_tan_mask,
+object_gi_redead_mask,
+object_gi_skj_mask,
+object_gi_rabit_mask,
+object_gi_truth_mask,
+object_ganon_objects,
+object_siofuki,
+object_stream,
+object_mm,
+object_fa,
+object_os,
+object_gi_eye_lotion,
+object_gi_powder,
+object_gi_mushroom,
+object_gi_ticketstone,
+object_gi_brokensword,
+object_js,
+object_cs,
+object_gi_prescription,
+object_gi_bracelet,
+object_gi_soldout,
+object_gi_frog,
+object_mag,
+object_door_gerudo,
+object_gt,
+object_efc_erupc,
+object_zl2_anime1,
+object_zl2_anime2,
+object_gi_golonmask,
+object_gi_zoramask,
+object_gi_gerudomask,
+object_ganon2,
+object_ka,
+object_ts,
+object_zg,
+object_gi_hoverboots,
+object_gi_m_arrow,
+object_ds2,
+object_ec,
+object_fish,
+object_gi_sutaru,
+object_gi_goddess,
+object_ssh,
+object_bigokuta,
+object_bg,
+object_spot05_objects,
+object_spot12_obj,
+object_bombiwa,
+object_hintnuts,
+object_rs,
+object_spot00_break,
+object_gla,
+object_shopnuts,
+object_geldb,
+object_gr,
+object_dog,
+object_jya_iron,
+object_jya_door,
+object_spot01_objects2,
+object_spot11_obj,
+object_kibako2,
+object_dns,
+object_dnk,
+object_gi_fire,
+object_gi_insect,
+object_gi_butterfly,
+object_gi_ghost,
+object_gi_soul,
+object_bowl,
+object_po_field,
+object_demo_kekkai,
+object_efc_doughnut,
+object_gi_dekupouch,
+object_ganon_anime1,
+object_ganon_anime2,
+object_ganon_anime3,
+object_gi_rupy,
+object_spot01_matoya,
+object_spot01_matoyab,
+object_po_composer,
+object_mu,
+object_wf,
+object_skb,
+object_gj,
+object_geff,
+object_haka_door,
+object_gs,
+object_ps,
+object_bwall,
+object_crow,
+object_cow,
+object_cob,
+object_gi_sword_1,
+object_door_killer,
+object_ouke_haka,
+object_timeblock,
+object_zl4,
+g_pn_01,
+g_pn_02,
+g_pn_03,
+g_pn_04,
+g_pn_05,
+g_pn_06,
+g_pn_07,
+g_pn_08,
+g_pn_09,
+g_pn_10,
+g_pn_11,
+g_pn_12,
+g_pn_13,
+g_pn_14,
+g_pn_15,
+g_pn_16,
+g_pn_17,
+g_pn_18,
+g_pn_19,
+g_pn_20,
+g_pn_21,
+g_pn_22,
+g_pn_23,
+g_pn_24,
+g_pn_25,
+g_pn_26,
+g_pn_27,
+g_pn_28,
+g_pn_29,
+g_pn_30,
+g_pn_31,
+g_pn_32,
+g_pn_33,
+g_pn_34,
+g_pn_35,
+g_pn_36,
+g_pn_37,
+g_pn_38,
+g_pn_39,
+g_pn_40,
+g_pn_41,
+g_pn_42,
+g_pn_43,
+g_pn_44,
+g_pn_45,
+g_pn_46,
+g_pn_47,
+g_pn_48,
+g_pn_49,
+g_pn_50,
+g_pn_51,
+g_pn_52,
+g_pn_53,
+g_pn_54,
+g_pn_55,
+g_pn_56,
+g_pn_57,
+z_select_static,
+nintendo_rogo_static,
+title_static,
+parameter_static,
+vr_fine0_static,
+vr_fine0_pal_static,
+vr_fine1_static,
+vr_fine1_pal_static,
+vr_fine2_static,
+vr_fine2_pal_static,
+vr_fine3_static,
+vr_fine3_pal_static,
+vr_cloud0_static,
+vr_cloud0_pal_static,
+vr_cloud1_static,
+vr_cloud1_pal_static,
+vr_cloud2_static,
+vr_cloud2_pal_static,
+vr_cloud3_static,
+vr_cloud3_pal_static,
+vr_holy0_static,
+vr_holy0_pal_static,
+vr_holy1_static,
+vr_holy1_pal_static,
+vr_MDVR_static,
+vr_MDVR_pal_static,
+vr_MNVR_static,
+vr_MNVR_pal_static,
+vr_RUVR_static,
+vr_RUVR_pal_static,
+vr_LHVR_static,
+vr_LHVR_pal_static,
+vr_KHVR_static,
+vr_KHVR_pal_static,
+vr_K3VR_static,
+vr_K3VR_pal_static,
+vr_K4VR_static,
+vr_K4VR_pal_static,
+vr_K5VR_static,
+vr_K5VR_pal_static,
+vr_SP1a_static,
+vr_SP1a_pal_static,
+vr_MLVR_static,
+vr_MLVR_pal_static,
+vr_KKRVR_static,
+vr_KKRVR_pal_static,
+vr_KR3VR_static,
+vr_KR3VR_pal_static,
+vr_IPVR_static,
+vr_IPVR_pal_static,
+vr_KSVR_static,
+vr_KSVR_pal_static,
+vr_GLVR_static,
+vr_GLVR_pal_static,
+vr_ZRVR_static,
+vr_ZRVR_pal_static,
+vr_DGVR_static,
+vr_DGVR_pal_static,
+vr_ALVR_static,
+vr_ALVR_pal_static,
+vr_NSVR_static,
+vr_NSVR_pal_static,
+vr_LBVR_static,
+vr_LBVR_pal_static,
+vr_TTVR_static,
+vr_TTVR_pal_static,
+vr_FCVR_static,
+vr_FCVR_pal_static,
+elf_message_field,
+elf_message_ydan,
+ydan_scene,
+ydan_room_0,
+ydan_room_1,
+ydan_room_2,
+ydan_room_3,
+ydan_room_4,
+ydan_room_5,
+ydan_room_6,
+ydan_room_7,
+ydan_room_8,
+ydan_room_9,
+ydan_room_10,
+ydan_room_11,
+ddan_scene,
+ddan_room_0,
+ddan_room_1,
+ddan_room_2,
+ddan_room_3,
+ddan_room_4,
+ddan_room_5,
+ddan_room_6,
+ddan_room_7,
+ddan_room_8,
+ddan_room_9,
+ddan_room_10,
+ddan_room_11,
+ddan_room_12,
+ddan_room_13,
+ddan_room_14,
+ddan_room_15,
+ddan_room_16,
+bdan_scene,
+bdan_room_0,
+bdan_room_1,
+bdan_room_2,
+bdan_room_3,
+bdan_room_4,
+bdan_room_5,
+bdan_room_6,
+bdan_room_7,
+bdan_room_8,
+bdan_room_9,
+bdan_room_10,
+bdan_room_11,
+bdan_room_12,
+bdan_room_13,
+bdan_room_14,
+bdan_room_15,
+Bmori1_scene,
+Bmori1_room_0,
+Bmori1_room_1,
+Bmori1_room_2,
+Bmori1_room_3,
+Bmori1_room_4,
+Bmori1_room_5,
+Bmori1_room_6,
+Bmori1_room_7,
+Bmori1_room_8,
+Bmori1_room_9,
+Bmori1_room_10,
+Bmori1_room_11,
+Bmori1_room_12,
+Bmori1_room_13,
+Bmori1_room_14,
+Bmori1_room_15,
+Bmori1_room_16,
+Bmori1_room_17,
+Bmori1_room_18,
+Bmori1_room_19,
+Bmori1_room_20,
+Bmori1_room_21,
+Bmori1_room_22,
+HIDAN_scene,
+HIDAN_room_0,
+HIDAN_room_1,
+HIDAN_room_2,
+HIDAN_room_3,
+HIDAN_room_4,
+HIDAN_room_5,
+HIDAN_room_6,
+HIDAN_room_7,
+HIDAN_room_8,
+HIDAN_room_9,
+HIDAN_room_10,
+HIDAN_room_11,
+HIDAN_room_12,
+HIDAN_room_13,
+HIDAN_room_14,
+HIDAN_room_15,
+HIDAN_room_16,
+HIDAN_room_17,
+HIDAN_room_18,
+HIDAN_room_19,
+HIDAN_room_20,
+HIDAN_room_21,
+HIDAN_room_22,
+HIDAN_room_23,
+HIDAN_room_24,
+HIDAN_room_25,
+HIDAN_room_26,
+MIZUsin_scene,
+MIZUsin_room_0,
+MIZUsin_room_1,
+MIZUsin_room_2,
+MIZUsin_room_3,
+MIZUsin_room_4,
+MIZUsin_room_5,
+MIZUsin_room_6,
+MIZUsin_room_7,
+MIZUsin_room_8,
+MIZUsin_room_9,
+MIZUsin_room_10,
+MIZUsin_room_11,
+MIZUsin_room_12,
+MIZUsin_room_13,
+MIZUsin_room_14,
+MIZUsin_room_15,
+MIZUsin_room_16,
+MIZUsin_room_17,
+MIZUsin_room_18,
+MIZUsin_room_19,
+MIZUsin_room_20,
+MIZUsin_room_21,
+MIZUsin_room_22,
+jyasinzou_scene,
+jyasinzou_room_0,
+jyasinzou_room_1,
+jyasinzou_room_2,
+jyasinzou_room_3,
+jyasinzou_room_4,
+jyasinzou_room_5,
+jyasinzou_room_6,
+jyasinzou_room_7,
+jyasinzou_room_8,
+jyasinzou_room_9,
+jyasinzou_room_10,
+jyasinzou_room_11,
+jyasinzou_room_12,
+jyasinzou_room_13,
+jyasinzou_room_14,
+jyasinzou_room_15,
+jyasinzou_room_16,
+jyasinzou_room_17,
+jyasinzou_room_18,
+jyasinzou_room_19,
+jyasinzou_room_20,
+jyasinzou_room_21,
+jyasinzou_room_22,
+jyasinzou_room_23,
+jyasinzou_room_24,
+jyasinzou_room_25,
+jyasinzou_room_26,
+jyasinzou_room_27,
+jyasinzou_room_28,
+HAKAdan_scene,
+HAKAdan_room_0,
+HAKAdan_room_1,
+HAKAdan_room_2,
+HAKAdan_room_3,
+HAKAdan_room_4,
+HAKAdan_room_5,
+HAKAdan_room_6,
+HAKAdan_room_7,
+HAKAdan_room_8,
+HAKAdan_room_9,
+HAKAdan_room_10,
+HAKAdan_room_11,
+HAKAdan_room_12,
+HAKAdan_room_13,
+HAKAdan_room_14,
+HAKAdan_room_15,
+HAKAdan_room_16,
+HAKAdan_room_17,
+HAKAdan_room_18,
+HAKAdan_room_19,
+HAKAdan_room_20,
+HAKAdan_room_21,
+HAKAdan_room_22,
+HAKAdanCH_scene,
+HAKAdanCH_room_0,
+HAKAdanCH_room_1,
+HAKAdanCH_room_2,
+HAKAdanCH_room_3,
+HAKAdanCH_room_4,
+HAKAdanCH_room_5,
+HAKAdanCH_room_6,
+ice_doukutu_scene,
+ice_doukutu_room_0,
+ice_doukutu_room_1,
+ice_doukutu_room_2,
+ice_doukutu_room_3,
+ice_doukutu_room_4,
+ice_doukutu_room_5,
+ice_doukutu_room_6,
+ice_doukutu_room_7,
+ice_doukutu_room_8,
+ice_doukutu_room_9,
+ice_doukutu_room_10,
+ice_doukutu_room_11,
+men_scene,
+men_room_0,
+men_room_1,
+men_room_2,
+men_room_3,
+men_room_4,
+men_room_5,
+men_room_6,
+men_room_7,
+men_room_8,
+men_room_9,
+men_room_10,
+ganontika_scene,
+ganontika_room_0,
+ganontika_room_1,
+ganontika_room_2,
+ganontika_room_3,
+ganontika_room_4,
+ganontika_room_5,
+ganontika_room_6,
+ganontika_room_7,
+ganontika_room_8,
+ganontika_room_9,
+ganontika_room_10,
+ganontika_room_11,
+ganontika_room_12,
+ganontika_room_13,
+ganontika_room_14,
+ganontika_room_15,
+ganontika_room_16,
+ganontika_room_17,
+ganontika_room_18,
+ganontika_room_19,
+spot00_scene,
+spot00_room_0,
+spot01_scene,
+spot01_room_0,
+spot02_scene,
+spot02_room_0,
+spot02_room_1,
+spot03_scene,
+spot03_room_0,
+spot03_room_1,
+spot04_scene,
+spot04_room_0,
+spot04_room_1,
+spot04_room_2,
+spot05_scene,
+spot05_room_0,
+spot06_scene,
+spot06_room_0,
+spot07_scene,
+spot07_room_0,
+spot07_room_1,
+spot08_scene,
+spot08_room_0,
+spot09_scene,
+spot09_room_0,
+spot10_scene,
+spot10_room_0,
+spot10_room_1,
+spot10_room_2,
+spot10_room_3,
+spot10_room_4,
+spot10_room_5,
+spot10_room_6,
+spot10_room_7,
+spot10_room_8,
+spot10_room_9,
+spot11_scene,
+spot11_room_0,
+spot12_scene,
+spot12_room_0,
+spot12_room_1,
+spot13_scene,
+spot13_room_0,
+spot13_room_1,
+spot15_scene,
+spot15_room_0,
+spot16_scene,
+spot16_room_0,
+spot17_scene,
+spot17_room_0,
+spot17_room_1,
+spot18_scene,
+spot18_room_0,
+spot18_room_1,
+spot18_room_2,
+spot18_room_3,
+market_day_scene,
+market_day_room_0,
+market_night_scene,
+market_night_room_0,
+kenjyanoma_scene,
+kenjyanoma_room_0,
+tokinoma_scene,
+tokinoma_room_0,
+tokinoma_room_1,
+link_home_scene,
+link_home_room_0,
+kokiri_shop_scene,
+kokiri_shop_room_0,
+kokiri_home_scene,
+kokiri_home_room_0,
+kakusiana_scene,
+kakusiana_room_0,
+kakusiana_room_1,
+kakusiana_room_2,
+kakusiana_room_3,
+kakusiana_room_4,
+kakusiana_room_5,
+kakusiana_room_6,
+kakusiana_room_7,
+kakusiana_room_8,
+kakusiana_room_9,
+kakusiana_room_10,
+kakusiana_room_11,
+kakusiana_room_12,
+kakusiana_room_13,
+entra_scene,
+entra_room_0,
+moribossroom_scene,
+moribossroom_room_0,
+moribossroom_room_1,
+syatekijyou_scene,
+syatekijyou_room_0,
+shop1_scene,
+shop1_room_0,
+hairal_niwa_scene,
+hairal_niwa_room_0,
+ganon_tou_scene,
+ganon_tou_room_0,
+market_alley_scene,
+market_alley_room_0,
+spot20_scene,
+spot20_room_0,
+market_ruins_scene,
+market_ruins_room_0,
+entra_n_scene,
+entra_n_room_0,
+enrui_scene,
+enrui_room_0,
+market_alley_n_scene,
+market_alley_n_room_0,
+hiral_demo_scene,
+hiral_demo_room_0,
+kokiri_home3_scene,
+kokiri_home3_room_0,
+malon_stable_scene,
+malon_stable_room_0,
+kakariko_scene,
+kakariko_room_0,
+bdan_boss_scene,
+bdan_boss_room_0,
+bdan_boss_room_1,
+FIRE_bs_scene,
+FIRE_bs_room_0,
+FIRE_bs_room_1,
+hut_scene,
+hut_room_0,
+daiyousei_izumi_scene,
+daiyousei_izumi_room_0,
+hakaana_scene,
+hakaana_room_0,
+yousei_izumi_tate_scene,
+yousei_izumi_tate_room_0,
+yousei_izumi_yoko_scene,
+yousei_izumi_yoko_room_0,
+golon_scene,
+golon_room_0,
+zoora_scene,
+zoora_room_0,
+drag_scene,
+drag_room_0,
+alley_shop_scene,
+alley_shop_room_0,
+night_shop_scene,
+night_shop_room_0,
+impa_scene,
+impa_room_0,
+labo_scene,
+labo_room_0,
+tent_scene,
+tent_room_0,
+nakaniwa_scene,
+nakaniwa_room_0,
+ddan_boss_scene,
+ddan_boss_room_0,
+ddan_boss_room_1,
+ydan_boss_scene,
+ydan_boss_room_0,
+ydan_boss_room_1,
+HAKAdan_bs_scene,
+HAKAdan_bs_room_0,
+HAKAdan_bs_room_1,
+MIZUsin_bs_scene,
+MIZUsin_bs_room_0,
+MIZUsin_bs_room_1,
+ganon_scene,
+ganon_room_0,
+ganon_room_1,
+ganon_room_2,
+ganon_room_3,
+ganon_room_4,
+ganon_room_5,
+ganon_room_6,
+ganon_room_7,
+ganon_room_8,
+ganon_room_9,
+ganon_boss_scene,
+ganon_boss_room_0,
+jyasinboss_scene,
+jyasinboss_room_0,
+jyasinboss_room_1,
+jyasinboss_room_2,
+jyasinboss_room_3,
+kokiri_home4_scene,
+kokiri_home4_room_0,
+kokiri_home5_scene,
+kokiri_home5_room_0,
+ganon_final_scene,
+ganon_final_room_0,
+kakariko3_scene,
+kakariko3_room_0,
+hakasitarelay_scene,
+hakasitarelay_room_0,
+hakasitarelay_room_1,
+hakasitarelay_room_2,
+hakasitarelay_room_3,
+hakasitarelay_room_4,
+hakasitarelay_room_5,
+hakasitarelay_room_6,
+shrine_scene,
+shrine_room_0,
+turibori_scene,
+turibori_room_0,
+shrine_n_scene,
+shrine_n_room_0,
+shrine_r_scene,
+shrine_r_room_0,
+hakaana2_scene,
+hakaana2_room_0,
+gerudoway_scene,
+gerudoway_room_0,
+gerudoway_room_1,
+gerudoway_room_2,
+gerudoway_room_3,
+gerudoway_room_4,
+gerudoway_room_5,
+hairal_niwa_n_scene,
+hairal_niwa_n_room_0,
+bowling_scene,
+bowling_room_0,
+hakaana_ouke_scene,
+hakaana_ouke_room_0,
+hakaana_ouke_room_1,
+hakaana_ouke_room_2,
+hylia_labo_scene,
+hylia_labo_room_0,
+souko_scene,
+souko_room_0,
+souko_room_1,
+souko_room_2,
+miharigoya_scene,
+miharigoya_room_0,
+mahouya_scene,
+mahouya_room_0,
+takaraya_scene,
+takaraya_room_0,
+takaraya_room_1,
+takaraya_room_2,
+takaraya_room_3,
+takaraya_room_4,
+takaraya_room_5,
+takaraya_room_6,
+ganon_sonogo_scene,
+ganon_sonogo_room_0,
+ganon_sonogo_room_1,
+ganon_sonogo_room_2,
+ganon_sonogo_room_3,
+ganon_sonogo_room_4,
+ganon_demo_scene,
+ganon_demo_room_0,
+face_shop_scene,
+face_shop_room_0,
+kinsuta_scene,
+kinsuta_room_0,
+ganontikasonogo_scene,
+ganontikasonogo_room_0,
+ganontikasonogo_room_1,
+bump_texture_static,
+anime_model_1_static,
+anime_model_2_static,
+anime_model_3_static,
+anime_model_4_static,
+anime_model_5_static,
+anime_model_6_static,
+anime_texture_1_static,
+anime_texture_2_static,
+anime_texture_3_static,
+anime_texture_4_static,
+anime_texture_5_static,
+anime_texture_6_static,
+softsprite_matrix_static,
diff --git a/baseroms/ntsc-1.0/config.yml b/baseroms/ntsc-1.0/config.yml
index 072aebec3d..2bdf99411a 100644
--- a/baseroms/ntsc-1.0/config.yml
+++ b/baseroms/ntsc-1.0/config.yml
@@ -2,7 +2,7 @@ checksums:
- checksum-JP
- checksum-US
dmadata_start: 0x7430
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/ntsc-1.1/config.yml b/baseroms/ntsc-1.1/config.yml
index 6726cc59f6..1b110a84c8 100644
--- a/baseroms/ntsc-1.1/config.yml
+++ b/baseroms/ntsc-1.1/config.yml
@@ -2,7 +2,7 @@ checksums:
- checksum-JP
- checksum-US
dmadata_start: 0x7430
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/ntsc-1.2/config.yml b/baseroms/ntsc-1.2/config.yml
index f9293586f9..a631ca5511 100644
--- a/baseroms/ntsc-1.2/config.yml
+++ b/baseroms/ntsc-1.2/config.yml
@@ -2,7 +2,7 @@ checksums:
- checksum-JP
- checksum-US
dmadata_start: 0x7960
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/pal-1.0/config.yml b/baseroms/pal-1.0/config.yml
index 1a80071bbb..a8ea60b79d 100644
--- a/baseroms/pal-1.0/config.yml
+++ b/baseroms/pal-1.0/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7950
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/pal-1.1/config.yml b/baseroms/pal-1.1/config.yml
index 57f037b350..4811f1cb93 100644
--- a/baseroms/pal-1.1/config.yml
+++ b/baseroms/pal-1.1/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7950
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/docs/BUILDING_MACOS.md b/docs/BUILDING_MACOS.md
index 9fe0e1b11b..d34035fcec 100644
--- a/docs/BUILDING_MACOS.md
+++ b/docs/BUILDING_MACOS.md
@@ -43,10 +43,9 @@ cd ~/binutils-tmp
Get and extract binutils source
```bash
-wget https://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.bz2
+curl -O https://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.bz2
tar xjf binutils-2.35.tar.bz2
```
-(You may find this command does not work: if so, just access the URL in a browser and save it to `~/binutils-tmp`.)
Create and enter a build directory
```bash
@@ -65,9 +64,9 @@ make -j
sudo make install
```
-Edit your `~/.bash_profile`/`~/.zsh_profile` (or whichever shell you use) to add the new binutils binaries to the system PATH
+Edit your `~/.bash_profile`/`~/.zprofile` (or whichever shell you use) to add the new binutils binaries to the system PATH
```bash
-echo "export PATH=$PATH:/opt/cross/bin" >> ~/.bash_profile
+echo 'export PATH="$PATH:/opt/cross/bin"' >> ~/.bash_profile
```
Reload `~/.bash_profile` (or just launch a new terminal tab)
diff --git a/include/attributes.h b/include/attributes.h
index c3154cac7b..3276c84325 100644
--- a/include/attributes.h
+++ b/include/attributes.h
@@ -8,12 +8,22 @@
#endif
#define UNUSED __attribute__((unused))
-#define FALLTHROUGH __attribute__((fallthrough))
-#define NORETURN __attribute__((noreturn))
#define NO_REORDER __attribute__((no_reorder))
#define SECTION_DATA __attribute__((section(".data")))
-#ifdef __GNUC__
+#if __GNUC__ >= 7
+#define FALLTHROUGH __attribute__((fallthrough))
+#else
+#define FALLTHROUGH
+#endif
+
+#if defined(__GNUC__) && defined(NON_MATCHING)
+#define NORETURN __attribute__((noreturn))
+#else
+#define NORETURN
+#endif
+
+#if defined(__GNUC__) && defined(NON_MATCHING)
#define UNREACHABLE() __builtin_unreachable()
#else
#define UNREACHABLE()
diff --git a/include/fault.h b/include/fault.h
index a95ae59064..8f1979520f 100644
--- a/include/fault.h
+++ b/include/fault.h
@@ -5,7 +5,7 @@
#include "attributes.h"
#include "padmgr.h"
-#if PLATFORM_GC
+#if !PLATFORM_N64
// These are the same as the 3-bit ansi color codes
#define FAULT_COLOR_BLACK 0
#define FAULT_COLOR_RED 1
@@ -33,7 +33,7 @@ typedef struct FaultClient {
/* 0x0C */ void* arg1;
} FaultClient; // size = 0x10
-#if PLATFORM_GC
+#if !PLATFORM_N64
typedef struct FaultAddrConvClient {
/* 0x00 */ struct FaultAddrConvClient* next;
/* 0x04 */ void* callback;
@@ -78,7 +78,7 @@ void func_800AE1F8(void);
#define Fault_SetFontColor(color) (void)0
#define Fault_SetCharPad(padW, padH) (void)0
-#elif PLATFORM_GC
+#else
void Fault_InitDrawer(void);
void Fault_SetForeColor(u16 color);
@@ -98,7 +98,7 @@ extern volatile OSThread* gFaultFaultedThread;
#define FAULT_MSG_ID gFaultMsgId
-#elif PLATFORM_GC
+#else
typedef struct FaultMgr {
/* 0x000 */ OSThread thread;
diff --git a/include/functions.h b/include/functions.h
index 7a114f73c5..f89ce3a0af 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -9,10 +9,11 @@ void Main_ThreadEntry(void* arg);
void Idle_ThreadEntry(void* arg);
void ViConfig_UpdateVi(u32 black);
void ViConfig_UpdateBlack(void);
-void* Yaz0_FirstDMA(void);
-void* Yaz0_NextDMA(u8* curSrcPos);
-void Yaz0_DecompressImpl(u8* src, u8* dst);
+#if !PLATFORM_IQUE
void Yaz0_Decompress(uintptr_t romStart, u8* dst, size_t size);
+#else
+void gzip_decompress(uintptr_t romStart, u8* dst, size_t size);
+#endif
void Locale_Init(void);
void Locale_ResetRegion(void);
#if DEBUG_FEATURES
diff --git a/include/libc/assert.h b/include/libc/assert.h
index dae8aeb651..de54b8a79c 100644
--- a/include/libc/assert.h
+++ b/include/libc/assert.h
@@ -29,7 +29,7 @@ __attribute__((noreturn)) void __assert(const char* assertion, const char* file,
// Static/compile-time assertions
-#if !defined(__sgi) && (defined(__GNUC__) || (__STDC_VERSION__ >= 201112L))
+#if !defined(__sgi) && (__GNUC__ >= 5 || __STDC_VERSION__ >= 201112L)
# define static_assert(cond, msg) _Static_assert(cond, msg)
#else
# ifndef GLUE
diff --git a/include/libc/math.h b/include/libc/math.h
index b46b6cd911..4389b576ef 100644
--- a/include/libc/math.h
+++ b/include/libc/math.h
@@ -61,6 +61,10 @@ f64 sqrt(f64 f);
#endif
#if !PLATFORM_N64
+extern float gPositiveInfinity;
+extern float gNegativeInfinity;
+extern float gPositiveZero;
+extern float gNegativeZero;
extern float qNaN0x3FFFFF;
extern float qNaN0x10000;
extern float sNaN0x3FFFFF;
diff --git a/include/libc/stdarg.h b/include/libc/stdarg.h
index 35ce4f944e..7c7d2800e5 100644
--- a/include/libc/stdarg.h
+++ b/include/libc/stdarg.h
@@ -1,16 +1,16 @@
#ifndef STDARG_H
#define STDARG_H
-// When building with GCC, use the official vaarg macros to avoid warnings and possibly bad codegen.
+// When building with modern GCC, use the official vaarg macros to avoid warnings and possibly bad codegen.
-#ifdef __GNUC__
+#if __GNUC__ >= 3
#define va_list __builtin_va_list
#define va_start __builtin_va_start
#define va_arg __builtin_va_arg
#define va_end __builtin_va_end
-#else
+#elif defined(__sgi) /* IDO */
#ifndef _VA_LIST_
# define _VA_LIST_
@@ -52,6 +52,29 @@ typedef char* va_list;
/* No cleanup processing is required for the end of a varargs list: */
#define va_end(__list)
-#endif /* __GNUC__ */
+#else /* EGCS */
+
+typedef char * __gnuc_va_list;
+
+#define __va_rounded_size(__TYPE) \
+ (((sizeof (__TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
+
+#define va_start(__AP, __LASTARG) \
+ (__AP = (__gnuc_va_list) __builtin_next_arg (__LASTARG))
+
+#define va_end(__AP) ((void)0)
+
+/* We cast to void * and then to TYPE * because this avoids
+ a warning about increasing the alignment requirement. */
+#define va_arg(__AP, __type) \
+ ((__type *) (void *) (__AP = (char *) ((__alignof__(__type) > 4 \
+ ? ((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8 \
+ : ((__PTRDIFF_TYPE__)__AP + 4 - 1) & -4) \
+ + __va_rounded_size (__type))), \
+ *(__type *) (void *) (__AP - __va_rounded_size (__type)))
+
+typedef __gnuc_va_list va_list;
+
+#endif
#endif
diff --git a/include/libc/stddef.h b/include/libc/stddef.h
index 45620895ee..0c0926ba6b 100644
--- a/include/libc/stddef.h
+++ b/include/libc/stddef.h
@@ -15,7 +15,7 @@ typedef unsigned long size_t;
#endif
-#ifdef __GNUC__
+#if __GNUC__ >= 4
#define offsetof(structure, member) __builtin_offsetof (structure, member)
#else
#define offsetof(structure, member) ((size_t)&(((structure*)0)->member))
diff --git a/include/libc64/os_malloc.h b/include/libc64/os_malloc.h
index 91b0d93c47..fcd4da1e14 100644
--- a/include/libc64/os_malloc.h
+++ b/include/libc64/os_malloc.h
@@ -11,7 +11,7 @@ typedef struct Arena {
#if PLATFORM_N64
/* 0x08 */ u32 size;
/* 0x0C */ u8 allocFailures;
-#elif PLATFORM_GC
+#else
/* 0x08 */ OSMesgQueue lockQueue;
/* 0x20 */ u8 allocFailures; // only used in non-debug builds
/* 0x21 */ u8 isInit;
diff --git a/include/line_numbers.h b/include/line_numbers.h
index 20df4e1534..bc11d555db 100644
--- a/include/line_numbers.h
+++ b/include/line_numbers.h
@@ -5,31 +5,35 @@
// The "LN" macros defined here are not meant to be used directly. See the wrapper macros below.
#if OOT_VERSION == NTSC_1_0
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (ntsc_1_0)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ntsc_1_0)
#elif OOT_VERSION == NTSC_1_1
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (ntsc_1_1)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ntsc_1_1)
#elif OOT_VERSION == PAL_1_0
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (pal_1_0)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (pal_1_0)
#elif OOT_VERSION == NTSC_1_2
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (ntsc_1_2)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ntsc_1_2)
#elif OOT_VERSION == PAL_1_1
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (pal_1_1)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (pal_1_1)
#elif OOT_VERSION == GC_JP
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (gc_jp)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_jp)
#elif OOT_VERSION == GC_JP_MQ
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (gc_jp_mq)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_jp_mq)
#elif OOT_VERSION == GC_US
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (gc_us)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_us)
#elif OOT_VERSION == GC_US_MQ
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (gc_us_mq)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_us_mq)
#elif OOT_VERSION == GC_EU_MQ_DBG
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (gc_eu_mq_dbg)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_eu_mq_dbg)
#elif OOT_VERSION == GC_EU
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (gc_eu)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_eu)
#elif OOT_VERSION == GC_EU_MQ
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (gc_eu_mq)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_eu_mq)
#elif OOT_VERSION == GC_JP_CE
-#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce) (gc_jp_ce)
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_jp_ce)
+#elif OOT_VERSION == IQUE_CN
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ique_cn)
+#else
+#error "Unsupported OOT version"
#endif
/**
@@ -42,22 +46,22 @@
// NTSC 1.0 and all the other versions
#define LN1(ntsc_1_0, other) \
- LN(ntsc_1_0, other, other, other, other, other, other, other, other, other, other, other, other)
+ LN(ntsc_1_0, other, other, other, other, other, other, other, other, other, other, other, other, other)
// NTSC 1.0, NTSC 1.1, and all the other versions
#define LN2(ntsc_1_0, ntsc_1_1, other) \
- LN(ntsc_1_0, ntsc_1_1, other, other, other, other, other, other, other, other, other, other, other)
+ LN(ntsc_1_0, ntsc_1_1, other, other, other, other, other, other, other, other, other, other, other, other)
-// NTSC 1.0, Gamecube, and all the other versions
-#define LN3(ntsc_1_0, other, gc) \
- LN(ntsc_1_0, other, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc)
+// NTSC 1.0, iQue, GameCube, and all the other versions
+#define LN3(ntsc_1_0, other, ique, gc) \
+ LN(ntsc_1_0, other, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc, ique)
-// NTSC 1.0, NTSC 1.1, Gamecube, and all the other versions
-#define LN4(ntsc_1_0, ntsc_1_1, other, gc) \
- LN(ntsc_1_0, ntsc_1_1, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc)
+// NTSC 1.0, NTSC 1.1, iQue, GameCube, and all the other versions
+#define LN4(ntsc_1_0, ntsc_1_1, other, ique, gc) \
+ LN(ntsc_1_0, ntsc_1_1, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc, ique)
-// NTSC 1.0, NTSC 1.1, NTSC 1.2/PAL 1.0, Gamecube US/JP, Gamecube EU, and Gamecube CE
-#define LN5(ntsc_1_0, ntsc_1_1, other, pal_1_1, gc_ntsc, gc_eu, gc_jp_ce) \
- LN(ntsc_1_0, ntsc_1_1, other, other, pal_1_1, gc_ntsc, gc_ntsc, gc_ntsc, gc_ntsc, gc_eu, gc_eu, gc_eu, gc_jp_ce)
+// NTSC 1.0, NTSC 1.1, NTSC 1.2/PAL 1.0, iQue, Gamecube US/JP, Gamecube EU, and Gamecube CE
+#define LN5(ntsc_1_0, ntsc_1_1, other, pal_1_1, ique, gc_ntsc, gc_eu, gc_jp_ce) \
+ LN(ntsc_1_0, ntsc_1_1, other, other, pal_1_1, gc_ntsc, gc_ntsc, gc_ntsc, gc_ntsc, gc_eu, gc_eu, gc_eu, gc_jp_ce, ique)
#endif
diff --git a/include/macros.h b/include/macros.h
index 59360541d0..d7547482c0 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -1,6 +1,7 @@
#ifndef MACROS_H
#define MACROS_H
+#include "terminal.h"
#include "versions.h"
#ifndef AVOID_UB
@@ -53,10 +54,38 @@
#define PRINTF osSyncPrintf
#elif IDO_PRINTF_WORKAROUND
#define PRINTF(args) (void)0
+#elif defined(__GNUC__) && __GNUC__ < 3
+#define PRINTF(format, args...) while (0) osSyncPrintf(format, ##args)
#else
#define PRINTF(format, ...) (void)0
#endif
+#if DEBUG_FEATURES
+#define PRINTF_COLOR_BLACK() PRINTF(VT_FGCOL(BLACK))
+#define PRINTF_COLOR_RED() PRINTF(VT_FGCOL(RED))
+#define PRINTF_COLOR_GREEN() PRINTF(VT_FGCOL(GREEN))
+#define PRINTF_COLOR_YELLOW() PRINTF(VT_FGCOL(YELLOW))
+#define PRINTF_COLOR_BLUE() PRINTF(VT_FGCOL(BLUE))
+#define PRINTF_COLOR_MAGENTA() PRINTF(VT_FGCOL(MAGENTA))
+#define PRINTF_COLOR_CYAN() PRINTF(VT_FGCOL(CYAN))
+#define PRINTF_COLOR_WHITE() PRINTF(VT_FGCOL(WHITE))
+#define PRINTF_COLOR_WARNING() PRINTF(VT_COL(YELLOW, BLACK))
+#define PRINTF_COLOR_ERROR() PRINTF(VT_COL(RED, WHITE))
+#define PRINTF_RST() PRINTF(VT_RST)
+#else
+#define PRINTF_COLOR_BLACK() (void)0
+#define PRINTF_COLOR_RED() (void)0
+#define PRINTF_COLOR_GREEN() (void)0
+#define PRINTF_COLOR_YELLOW() (void)0
+#define PRINTF_COLOR_BLUE() (void)0
+#define PRINTF_COLOR_MAGENTA() (void)0
+#define PRINTF_COLOR_CYAN() (void)0
+#define PRINTF_COLOR_WHITE() (void)0
+#define PRINTF_COLOR_WARNING() (void)0
+#define PRINTF_COLOR_ERROR() (void)0
+#define PRINTF_RST() (void)0
+#endif
+
#if DEBUG_FEATURES
#define LOG(exp, value, format, file, line) \
do { \
diff --git a/include/ultra64/R4300.h b/include/ultra64/R4300.h
index 6398ea17c4..1c2da84f12 100644
--- a/include/ultra64/R4300.h
+++ b/include/ultra64/R4300.h
@@ -4,13 +4,11 @@
#ifdef _LANGUAGE_C
#include "ultratypes.h"
#define U32(x) ((u32)x)
-#define C_REG(x) (x)
#else
#define U32(x) (x)
-#define C_REG(x) $x
#endif
-// Segment base addresses and sizes
+/* Segment base addresses and sizes */
#define KUBASE 0
#define KUSIZE 0x80000000
#define K0BASE 0x80000000
@@ -20,24 +18,24 @@
#define K2BASE 0xC0000000
#define K2SIZE 0x20000000
-// Exception vectors
-#define SIZE_EXCVEC 0x80 // Size of an exc. vec
-#define UT_VEC K0BASE // utlbmiss vector
-#define R_VEC (K1BASE + 0x1FC00000) // reset vector
-#define XUT_VEC (K0BASE + 0x80) // extended address tlbmiss
-#define ECC_VEC (K0BASE + 0x100) // Ecc exception vector
-#define E_VEC (K0BASE + 0x180) // Gen. exception vector
+/* Exception vectors */
+#define SIZE_EXCVEC 0x80 /* Size of an exc. vec */
+#define UT_VEC K0BASE /* utlbmiss vector */
+#define R_VEC (K1BASE + 0x1FC00000) /* reset vector */
+#define XUT_VEC (K0BASE + 0x80) /* extended address tlbmiss */
+#define ECC_VEC (K0BASE + 0x100) /* Ecc exception vector */
+#define E_VEC (K0BASE + 0x180) /* Gen. exception vector */
-// Address conversion macros
-#define K0_TO_K1(x) (U32(x) | 0xA0000000) // kseg0 to kseg1
-#define K1_TO_K0(x) (U32(x) & 0x9FFFFFFF) // kseg1 to kseg0
-#define K0_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) // kseg0 to physical
-#define K1_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) // kseg1 to physical
-#define KDM_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) // direct mapped to physical
-#define PHYS_TO_K0(x) (U32(x) | 0x80000000) // physical to kseg0
-#define PHYS_TO_K1(x) (U32(x) | 0xA0000000) // physical to kseg1
+/* Address conversion macros */
+#define K0_TO_K1(x) (U32(x) | 0xA0000000) /* kseg0 to kseg1 */
+#define K1_TO_K0(x) (U32(x) & 0x9FFFFFFF) /* kseg1 to kseg0 */
+#define K0_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) /* kseg0 to physical */
+#define K1_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) /* kseg1 to physical */
+#define KDM_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) /* direct mapped to physical */
+#define PHYS_TO_K0(x) (U32(x) | 0x80000000) /* physical to kseg0 */
+#define PHYS_TO_K1(x) (U32(x) | 0xA0000000) /* physical to kseg1 */
-// Address predicates
+/* Address predicates */
#define IS_KSEG0(x) (U32(x) >= K0BASE && U32(x) < K1BASE)
#define IS_KSEG1(x) (U32(x) >= K1BASE && U32(x) < K2BASE)
#define IS_KSEGDM(x) (U32(x) >= K0BASE && U32(x) < K2BASE)
@@ -45,25 +43,25 @@
#define IS_KPTESEG(x) (U32(x) >= KPTE_SHDUBASE)
#define IS_KUSEG(x) (U32(x) < K0BASE)
-// TLB size constants
+/* TLB size constants */
#define NTLBENTRIES 31 /* entry 31 is reserved by rdb */
#define TLBHI_VPN2MASK 0xFFFFE000
#define TLBHI_VPN2SHIFT 13
#define TLBHI_PIDMASK 0xFF
#define TLBHI_PIDSHIFT 0
-#define TLBHI_NPID 255 // 255 to fit in 8 bits
+#define TLBHI_NPID 255 /* 255 to fit in 8 bits */
#define TLBLO_PFNMASK 0x3FFFFFC0
#define TLBLO_PFNSHIFT 6
-#define TLBLO_CACHMASK 0x38 // cache coherency algorithm
+#define TLBLO_CACHMASK 0x38 /* cache coherency algorithm */
#define TLBLO_CACHSHIFT 3
-#define TLBLO_UNCACHED 0x10 // not cached
-#define TLBLO_NONCOHRNT 0x18 // Cacheable non-coherent
-#define TLBLO_EXLWR 0x28 // Exclusive write
-#define TLBLO_D 0x4 // writeable
-#define TLBLO_V 0x2 // valid bit
-#define TLBLO_G 0x1 // global access bit
+#define TLBLO_UNCACHED 0x10 /* not cached */
+#define TLBLO_NONCOHRNT 0x18 /* Cacheable non-coherent */
+#define TLBLO_EXLWR 0x28 /* Exclusive write */
+#define TLBLO_D 0x4 /* writeable */
+#define TLBLO_V 0x2 /* valid bit */
+#define TLBLO_G 0x1 /* global access bit */
#define TLBINX_PROBE 0x80000000
#define TLBINX_INXMASK 0x3F
@@ -88,104 +86,104 @@
/*
* Status register
*/
-#define SR_CUMASK 0xF0000000 // coproc usable bits
+#define SR_CUMASK 0xF0000000 /* coproc usable bits */
-#define SR_CU3 0x80000000 // Coprocessor 3 usable
-#define SR_CU2 0x40000000 // Coprocessor 2 usable
-#define SR_CU1 0x20000000 // Coprocessor 1 usable
-#define SR_CU0 0x10000000 // Coprocessor 0 usable
-#define SR_RP 0x08000000 // Reduced power (quarter speed)
-#define SR_FR 0x04000000 // MIPS III FP register mode
-#define SR_RE 0x02000000 // Reverse endian
-#define SR_ITS 0x01000000 // Instruction trace support
-#define SR_BEV 0x00400000 // Use boot exception vectors
-#define SR_TS 0x00200000 // TLB shutdown
-#define SR_SR 0x00100000 // Soft reset occured
-#define SR_CH 0x00040000 // Cache hit for last 'cache' op
-#define SR_CE 0x00020000 // Create ECC
-#define SR_DE 0x00010000 // ECC of parity does not cause error
+#define SR_CU3 0x80000000 /* Coprocessor 3 usable */
+#define SR_CU2 0x40000000 /* Coprocessor 2 usable */
+#define SR_CU1 0x20000000 /* Coprocessor 1 usable */
+#define SR_CU0 0x10000000 /* Coprocessor 0 usable */
+#define SR_RP 0x08000000 /* Reduced power (quarter speed) */
+#define SR_FR 0x04000000 /* MIPS III FP register mode */
+#define SR_RE 0x02000000 /* Reverse endian */
+#define SR_ITS 0x01000000 /* Instruction trace support */
+#define SR_BEV 0x00400000 /* Use boot exception vectors */
+#define SR_TS 0x00200000 /* TLB shutdown */
+#define SR_SR 0x00100000 /* Soft reset occured */
+#define SR_CH 0x00040000 /* Cache hit for last 'cache' op */
+#define SR_CE 0x00020000 /* Create ECC */
+#define SR_DE 0x00010000 /* ECC of parity does not cause error */
-// Interrupt enable bits
-// (NOTE: bits set to 1 enable the corresponding level interrupt)
-#define SR_IMASK 0x0000FF00 // Interrupt mask
-#define SR_IMASK8 0x00000000 // mask level 8
-#define SR_IMASK7 0x00008000 // mask level 7
-#define SR_IMASK6 0x0000C000 // mask level 6
-#define SR_IMASK5 0x0000E000 // mask level 5
-#define SR_IMASK4 0x0000F000 // mask level 4
-#define SR_IMASK3 0x0000F800 // mask level 3
-#define SR_IMASK2 0x0000FC00 // mask level 2
-#define SR_IMASK1 0x0000FE00 // mask level 1
-#define SR_IMASK0 0x0000FF00 // mask level 0
+/* Interrupt enable bits */
+/* (NOTE: bits set to 1 enable the corresponding level interrupt) */
+#define SR_IMASK 0x0000FF00 /* Interrupt mask */
+#define SR_IMASK8 0x00000000 /* mask level 8 */
+#define SR_IMASK7 0x00008000 /* mask level 7 */
+#define SR_IMASK6 0x0000C000 /* mask level 6 */
+#define SR_IMASK5 0x0000E000 /* mask level 5 */
+#define SR_IMASK4 0x0000F000 /* mask level 4 */
+#define SR_IMASK3 0x0000F800 /* mask level 3 */
+#define SR_IMASK2 0x0000FC00 /* mask level 2 */
+#define SR_IMASK1 0x0000FE00 /* mask level 1 */
+#define SR_IMASK0 0x0000FF00 /* mask level 0 */
-#define SR_IBIT8 0x00008000 // bit level 8
-#define SR_IBIT7 0x00004000 // bit level 7
-#define SR_IBIT6 0x00002000 // bit level 6
-#define SR_IBIT5 0x00001000 // bit level 5
-#define SR_IBIT4 0x00000800 // bit level 4
-#define SR_IBIT3 0x00000400 // bit level 3
-#define SR_IBIT2 0x00000200 // bit level 2
-#define SR_IBIT1 0x00000100 // bit level 1
+#define SR_IBIT8 0x00008000 /* bit level 8 */
+#define SR_IBIT7 0x00004000 /* bit level 7 */
+#define SR_IBIT6 0x00002000 /* bit level 6 */
+#define SR_IBIT5 0x00001000 /* bit level 5 */
+#define SR_IBIT4 0x00000800 /* bit level 4 */
+#define SR_IBIT3 0x00000400 /* bit level 3 */
+#define SR_IBIT2 0x00000200 /* bit level 2 */
+#define SR_IBIT1 0x00000100 /* bit level 1 */
#define SR_IMASKSHIFT 8
-#define SR_KX 0x00000080 // extended-addr TLB vec in kernel
-#define SR_SX 0x00000040 // xtended-addr TLB vec supervisor
-#define SR_UX 0x00000020 // xtended-addr TLB vec in user mode
-#define SR_KSU_MASK 0x00000018 // mode mask
-#define SR_KSU_USR 0x00000010 // user mode
-#define SR_KSU_SUP 0x00000008 // supervisor mode
-#define SR_KSU_KER 0x00000000 // kernel mode
-#define SR_ERL 0x00000004 // Error level, 1=>cache error
-#define SR_EXL 0x00000002 // Exception level, 1=>exception
-#define SR_IE 0x00000001 // interrupt enable, 1=>enable
+#define SR_KX 0x00000080 /* extended-addr TLB vec in kernel */
+#define SR_SX 0x00000040 /* xtended-addr TLB vec supervisor */
+#define SR_UX 0x00000020 /* xtended-addr TLB vec in user mode */
+#define SR_KSU_MASK 0x00000018 /* mode mask */
+#define SR_KSU_USR 0x00000010 /* user mode */
+#define SR_KSU_SUP 0x00000008 /* supervisor mode */
+#define SR_KSU_KER 0x00000000 /* kernel mode */
+#define SR_ERL 0x00000004 /* Error level, 1=>cache error */
+#define SR_EXL 0x00000002 /* Exception level, 1=>exception */
+#define SR_IE 0x00000001 /* interrupt enable, 1=>enable */
-// Cause Register
-#define CAUSE_BD 0x80000000 // Branch delay slot
-#define CAUSE_CEMASK 0x30000000 // coprocessor error
+/* Cause Register */
+#define CAUSE_BD 0x80000000 /* Branch delay slot */
+#define CAUSE_CEMASK 0x30000000 /* coprocessor error */
#define CAUSE_CESHIFT 28
-// Interrupt pending bits
-#define CAUSE_IP8 0x00008000 // External level 8 pending - COMPARE
-#define CAUSE_IP7 0x00004000 // External level 7 pending - INT4
-#define CAUSE_IP6 0x00002000 // External level 6 pending - INT3
-#define CAUSE_IP5 0x00001000 // External level 5 pending - INT2
-#define CAUSE_IP4 0x00000800 // External level 4 pending - INT1
-#define CAUSE_IP3 0x00000400 // External level 3 pending - INT0
-#define CAUSE_SW2 0x00000200 // Software level 2 pending
-#define CAUSE_SW1 0x00000100 // Software level 1 pending
+/* Interrupt pending bits */
+#define CAUSE_IP8 0x00008000 /* External level 8 pending - COMPARE */
+#define CAUSE_IP7 0x00004000 /* External level 7 pending - INT4 */
+#define CAUSE_IP6 0x00002000 /* External level 6 pending - INT3 */
+#define CAUSE_IP5 0x00001000 /* External level 5 pending - INT2 */
+#define CAUSE_IP4 0x00000800 /* External level 4 pending - INT1 */
+#define CAUSE_IP3 0x00000400 /* External level 3 pending - INT0 */
+#define CAUSE_SW2 0x00000200 /* Software level 2 pending */
+#define CAUSE_SW1 0x00000100 /* Software level 1 pending */
-#define CAUSE_IPMASK 0x0000FF00 // Pending interrupt mask
+#define CAUSE_IPMASK 0x0000FF00 /* Pending interrupt mask */
#define CAUSE_IPSHIFT 8
-#define CAUSE_EXCMASK 0x0000007C // Cause code bits
+#define CAUSE_EXCMASK 0x0000007C /* Cause code bits */
#define CAUSE_EXCSHIFT 2
-// Cause register exception codes
+/* Cause register exception codes */
#define EXC_CODE(x) ((x) << 2)
-// Hardware exception codes
-#define EXC_INT EXC_CODE(0) // interrupt
-#define EXC_MOD EXC_CODE(1) // TLB mod
-#define EXC_RMISS EXC_CODE(2) // Read TLB Miss
-#define EXC_WMISS EXC_CODE(3) // Write TLB Miss
-#define EXC_RADE EXC_CODE(4) // Read Address Error
-#define EXC_WADE EXC_CODE(5) // Write Address Error
-#define EXC_IBE EXC_CODE(6) // Instruction Bus Error
-#define EXC_DBE EXC_CODE(7) // Data Bus Error
-#define EXC_SYSCALL EXC_CODE(8) // SYSCALL
-#define EXC_BREAK EXC_CODE(9) // BREAKpoint
-#define EXC_II EXC_CODE(10) // Illegal Instruction
-#define EXC_CPU EXC_CODE(11) // CoProcessor Unusable
-#define EXC_OV EXC_CODE(12) // OVerflow
-#define EXC_TRAP EXC_CODE(13) // Trap exception
-#define EXC_VCEI EXC_CODE(14) // Virt. Coherency on Inst. fetch
-#define EXC_FPE EXC_CODE(15) // Floating Point Exception
-#define EXC_WATCH EXC_CODE(23) // Watchpoint reference
-#define EXC_VCED EXC_CODE(31) // Virt. Coherency on data read
+/* Hardware exception codes */
+#define EXC_INT EXC_CODE(0) /* interrupt */
+#define EXC_MOD EXC_CODE(1) /* TLB mod */
+#define EXC_RMISS EXC_CODE(2) /* Read TLB Miss */
+#define EXC_WMISS EXC_CODE(3) /* Write TLB Miss */
+#define EXC_RADE EXC_CODE(4) /* Read Address Error */
+#define EXC_WADE EXC_CODE(5) /* Write Address Error */
+#define EXC_IBE EXC_CODE(6) /* Instruction Bus Error */
+#define EXC_DBE EXC_CODE(7) /* Data Bus Error */
+#define EXC_SYSCALL EXC_CODE(8) /* SYSCALL */
+#define EXC_BREAK EXC_CODE(9) /* BREAKpoint */
+#define EXC_II EXC_CODE(10) /* Illegal Instruction */
+#define EXC_CPU EXC_CODE(11) /* CoProcessor Unusable */
+#define EXC_OV EXC_CODE(12) /* OVerflow */
+#define EXC_TRAP EXC_CODE(13) /* Trap exception */
+#define EXC_VCEI EXC_CODE(14) /* Virt. Coherency on Inst. fetch */
+#define EXC_FPE EXC_CODE(15) /* Floating Point Exception */
+#define EXC_WATCH EXC_CODE(23) /* Watchpoint reference */
+#define EXC_VCED EXC_CODE(31) /* Virt. Coherency on data read */
-// C0_PRID Defines
+/* C0_PRID Defines */
#define C0_IMPMASK 0xFF00
#define C0_IMPSHIFT 8
#define C0_REVMASK 0xFF
@@ -193,106 +191,106 @@
#define C0_MAJREVSHIFT 4
#define C0_MINREVMASK 0xF
-// Coprocessor 0 operations
-#define C0_READI 0x1 // read ITLB entry addressed by C0_INDEX
-#define C0_WRITEI 0x2 // write ITLB entry addressed by C0_INDEX
-#define C0_WRITER 0x6 // write ITLB entry addressed by C0_RAND
-#define C0_PROBE 0x8 // probe for ITLB entry addressed by TLBHI
-#define C0_RFE 0x10 // restore for exception
+/* Coprocessor 0 operations */
+#define C0_READI 0x1 /* read ITLB entry addressed by C0_INDEX */
+#define C0_WRITEI 0x2 /* write ITLB entry addressed by C0_INDEX */
+#define C0_WRITER 0x6 /* write ITLB entry addressed by C0_RAND */
+#define C0_PROBE 0x8 /* probe for ITLB entry addressed by TLBHI */
+#define C0_RFE 0x10 /* restore for exception */
-// 'cache' instruction definitions
+/* 'cache' instruction definitions */
-// Target cache
-#define CACH_PI 0x0 // specifies primary inst. cache
-#define CACH_PD 0x1 // primary data cache
-#define CACH_SI 0x2 // secondary instruction cache
-#define CACH_SD 0x3 // secondary data cache
+/* Target cache */
+#define CACH_PI 0x0 /* specifies primary inst. cache */
+#define CACH_PD 0x1 /* primary data cache */
+#define CACH_SI 0x2 /* secondary instruction cache */
+#define CACH_SD 0x3 /* secondary data cache */
-// Cache operations
-#define C_IINV 0x0 // index invalidate (inst, 2nd inst)
-#define C_IWBINV 0x0 // index writeback inval (d, sd)
-#define C_ILT 0x4 // index load tag (all)
-#define C_IST 0x8 // index store tag (all)
-#define C_CDX 0xC // create dirty exclusive (d, sd)
-#define C_HINV 0x10 // hit invalidate (all)
-#define C_HWBINV 0x14 // hit writeback inv. (d, sd)
-#define C_FILL 0x14 // fill (i)
-#define C_HWB 0x18 // hit writeback (i, d, sd)
-#define C_HSV 0x1C // hit set virt. (si, sd)
+/* Cache operations */
+#define C_IINV 0x0 /* index invalidate (inst, 2nd inst) */
+#define C_IWBINV 0x0 /* index writeback inval (d, sd) */
+#define C_ILT 0x4 /* index load tag (all) */
+#define C_IST 0x8 /* index store tag (all) */
+#define C_CDX 0xC /* create dirty exclusive (d, sd) */
+#define C_HINV 0x10 /* hit invalidate (all) */
+#define C_HWBINV 0x14 /* hit writeback inv. (d, sd) */
+#define C_FILL 0x14 /* fill (i) */
+#define C_HWB 0x18 /* hit writeback (i, d, sd) */
+#define C_HSV 0x1C /* hit set virt. (si, sd) */
-// Cache size definitions
-#define ICACHE_SIZE 0x4000 // 16K
-#define ICACHE_LINESIZE 32 // 8 words
+/* Cache size definitions */
+#define ICACHE_SIZE 0x4000 /* 16K */
+#define ICACHE_LINESIZE 32 /* 8 words */
#define ICACHE_LINEMASK (ICACHE_LINESIZE - 1)
-#define DCACHE_SIZE 0x2000 // 8K
-#define DCACHE_LINESIZE 16 // 4 words
+#define DCACHE_SIZE 0x2000 /* 8K */
+#define DCACHE_LINESIZE 16 /* 4 words */
#define DCACHE_LINEMASK (DCACHE_LINESIZE - 1)
-// C0_CONFIG register definitions
-#define CONFIG_CM 0x80000000 // 1 == Master-Checker enabled
-#define CONFIG_EC 0x70000000 // System Clock ratio
-#define CONFIG_EC_1_1 0x6 // System Clock ratio 1 :1
-#define CONFIG_EC_3_2 0x7 // System Clock ratio 1.5 :1
-#define CONFIG_EC_2_1 0x0 // System Clock ratio 2 :1
-#define CONFIG_EC_3_1 0x1 // System Clock ratio 3 :1
-#define CONFIG_EP 0x0F000000 // Transmit Data Pattern
-#define CONFIG_SB 0x00C00000 // Secondary cache block size
+/* C0_CONFIG register definitions */
+#define CONFIG_CM 0x80000000 /* 1 == Master-Checker enabled */
+#define CONFIG_EC 0x70000000 /* System Clock ratio */
+#define CONFIG_EC_1_1 0x6 /* System Clock ratio 1 :1 */
+#define CONFIG_EC_3_2 0x7 /* System Clock ratio 1.5 :1 */
+#define CONFIG_EC_2_1 0x0 /* System Clock ratio 2 :1 */
+#define CONFIG_EC_3_1 0x1 /* System Clock ratio 3 :1 */
+#define CONFIG_EP 0x0F000000 /* Transmit Data Pattern */
+#define CONFIG_SB 0x00C00000 /* Secondary cache block size */
-#define CONFIG_SS 0x00200000 // Split scache: 0 == I&D combined
-#define CONFIG_SW 0x00100000 // scache port: 0==128, 1==64
-#define CONFIG_EW 0x000C0000 // System Port width: 0==64, 1==32
-#define CONFIG_SC 0x00020000 // 0 -> 2nd cache present
-#define CONFIG_SM 0x00010000 // 0 -> Dirty Shared Coherency enable
-#define CONFIG_BE 0x00008000 // Endian-ness: 1 --> BE
-#define CONFIG_EM 0x00004000 // 1 -> ECC mode, 0 -> parity
-#define CONFIG_EB 0x00002000 // Block order:1->sequent,0->subblock
+#define CONFIG_SS 0x00200000 /* Split scache: 0 == I&D combined */
+#define CONFIG_SW 0x00100000 /* scache port: 0==128, 1==64 */
+#define CONFIG_EW 0x000C0000 /* System Port width: 0==64, 1==32 */
+#define CONFIG_SC 0x00020000 /* 0 -> 2nd cache present */
+#define CONFIG_SM 0x00010000 /* 0 -> Dirty Shared Coherency enable */
+#define CONFIG_BE 0x00008000 /* Endian-ness: 1 --> BE */
+#define CONFIG_EM 0x00004000 /* 1 -> ECC mode, 0 -> parity */
+#define CONFIG_EB 0x00002000 /* Block order:1->sequent,0->subblock */
-#define CONFIG_IC 0x00000E00 // Primary Icache size
-#define CONFIG_DC 0x000001C0 // Primary Dcache size
-#define CONFIG_IB 0x00000020 // Icache block size
-#define CONFIG_DB 0x00000010 // Dcache block size
-#define CONFIG_CU 0x00000008 // Update on Store-conditional
-#define CONFIG_K0 0x00000007 // K0SEG Coherency algorithm
+#define CONFIG_IC 0x00000E00 /* Primary Icache size */
+#define CONFIG_DC 0x000001C0 /* Primary Dcache size */
+#define CONFIG_IB 0x00000020 /* Icache block size */
+#define CONFIG_DB 0x00000010 /* Dcache block size */
+#define CONFIG_CU 0x00000008 /* Update on Store-conditional */
+#define CONFIG_K0 0x00000007 /* K0SEG Coherency algorithm */
-#define CONFIG_UNCACHED 0x00000002 // K0 is uncached
+#define CONFIG_UNCACHED 0x00000002 /* K0 is uncached */
#define CONFIG_NONCOHRNT 0x00000003
#define CONFIG_COHRNT_EXLWR 0x00000005
-#define CONFIG_SB_SHFT 22 // shift SB to bit position 0
-#define CONFIG_IC_SHFT 9 // shift IC to bit position 0
-#define CONFIG_DC_SHFT 6 // shift DC to bit position 0
-#define CONFIG_BE_SHFT 15 // shift BE to bit position 0
+#define CONFIG_SB_SHFT 22 /* shift SB to bit position 0 */
+#define CONFIG_IC_SHFT 9 /* shift IC to bit position 0 */
+#define CONFIG_DC_SHFT 6 /* shift DC to bit position 0 */
+#define CONFIG_BE_SHFT 15 /* shift BE to bit position 0 */
-// C0_TAGLO definitions for setting/getting cache states and physaddr bits
-#define SADDRMASK 0xFFFFE000 // 31..13 -> scache paddr bits 35..17
-#define SVINDEXMASK 0x00000380 // 9..7: prim virt index bits 14..12
-#define SSTATEMASK 0x00001C00 // bits 12..10 hold scache line state
-#define SINVALID 0x00000000 // invalid --> 000 == state 0
-#define SCLEANEXCL 0x00001000 // clean exclusive --> 100 == state 4
-#define SDIRTYEXCL 0x00001400 // dirty exclusive --> 101 == state 5
-#define SECC_MASK 0x0000007F // low 7 bits are ecc for the tag
-#define SADDR_SHIFT 4 // shift STagLo (31..13) to 35..17
+/* C0_TAGLO definitions for setting/getting cache states and physaddr bits */
+#define SADDRMASK 0xFFFFE000 /* 31..13 -> scache paddr bits 35..17 */
+#define SVINDEXMASK 0x00000380 /* 9..7: prim virt index bits 14..12 */
+#define SSTATEMASK 0x00001C00 /* bits 12..10 hold scache line state */
+#define SINVALID 0x00000000 /* invalid --> 000 == state 0 */
+#define SCLEANEXCL 0x00001000 /* clean exclusive --> 100 == state 4 */
+#define SDIRTYEXCL 0x00001400 /* dirty exclusive --> 101 == state 5 */
+#define SECC_MASK 0x0000007F /* low 7 bits are ecc for the tag */
+#define SADDR_SHIFT 4 /* shift STagLo (31..13) to 35..17 */
-#define PADDRMASK 0xFFFFFF00 // PTagLo31..8->prim paddr bits35..12
-#define PADDR_SHIFT 4 // roll bits 35..12 down to 31..8
-#define PSTATEMASK 0x00C0 // bits 7..6 hold primary line state
-#define PINVALID 0x0000 // invalid --> 000 == state 0
-#define PCLEANEXCL 0x0080 // clean exclusive --> 10 == state 2
-#define PDIRTYEXCL 0x00C0 // dirty exclusive --> 11 == state 3
-#define PPARITY_MASK 0x0001 // low bit is parity bit (even).
+#define PADDRMASK 0xFFFFFF00 /* PTagLo31..8->prim paddr bits35..12 */
+#define PADDR_SHIFT 4 /* roll bits 35..12 down to 31..8 */
+#define PSTATEMASK 0x00C0 /* bits 7..6 hold primary line state */
+#define PINVALID 0x0000 /* invalid --> 000 == state 0 */
+#define PCLEANEXCL 0x0080 /* clean exclusive --> 10 == state 2 */
+#define PDIRTYEXCL 0x00C0 /* dirty exclusive --> 11 == state 3 */
+#define PPARITY_MASK 0x0001 /* low bit is parity bit (even). */
-// C0_CACHE_ERR definitions.
-#define CACHERR_ER 0x80000000 // 0: inst ref, 1: data ref
-#define CACHERR_EC 0x40000000 // 0: primary, 1: secondary
-#define CACHERR_ED 0x20000000 // 1: data error
-#define CACHERR_ET 0x10000000 // 1: tag error
-#define CACHERR_ES 0x08000000 // 1: external ref, e.g. snoo
-#define CACHERR_EE 0x04000000 // error on SysAD bus
-#define CACHERR_EB 0x02000000 // complicated, see spec.
-#define CACHERR_EI 0x01000000 // complicated, see spec.
-#define CACHERR_SIDX_MASK 0x003FFFF8 // secondary cache index
-#define CACHERR_PIDX_MASK 0x00000007 // primary cache index
-#define CACHERR_PIDX_SHIFT 12 // bits 2..0 are paddr14..12
+/* C0_CACHE_ERR definitions. */
+#define CACHERR_ER 0x80000000 /* 0: inst ref, 1: data ref */
+#define CACHERR_EC 0x40000000 /* 0: primary, 1: secondary */
+#define CACHERR_ED 0x20000000 /* 1: data error */
+#define CACHERR_ET 0x10000000 /* 1: tag error */
+#define CACHERR_ES 0x08000000 /* 1: external ref, e.g. snoo */
+#define CACHERR_EE 0x04000000 /* error on SysAD bus */
+#define CACHERR_EB 0x02000000 /* complicated, see spec. */
+#define CACHERR_EI 0x01000000 /* complicated, see spec. */
+#define CACHERR_SIDX_MASK 0x003FFFF8 /* secondary cache index */
+#define CACHERR_PIDX_MASK 0x00000007 /* primary cache index */
+#define CACHERR_PIDX_SHIFT 12 /* bits 2..0 are paddr14..12 */
/*
* R4000 family supports hardware watchpoints:
@@ -311,57 +309,88 @@
#define WATCHLO_VALIDMASK 0xFFFFFFFB
#define WATCHHI_VALIDMASK 0x0000000F
-// Coprocessor 0 registers
-#define C0_INX C_REG(0)
-#define C0_RAND C_REG(1)
-#define C0_ENTRYLO0 C_REG(2)
-#define C0_ENTRYLO1 C_REG(3)
-#define C0_CONTEXT C_REG(4)
-#define C0_PAGEMASK C_REG(5) // page mask
-#define C0_WIRED C_REG(6) // # wired entries in tlb
-#define C0_BADVADDR C_REG(8)
-#define C0_COUNT C_REG(9) // free-running counter
-#define C0_ENTRYHI C_REG(10)
-#define C0_COMPARE C_REG(11) // counter comparison reg.
-#define C0_SR C_REG(12)
-#define C0_CAUSE C_REG(13)
-#define C0_EPC C_REG(14)
-#define C0_PRID C_REG(15) // revision identifier
-#define C0_CONFIG C_REG(16) // hardware configuration
-#define C0_LLADDR C_REG(17) // load linked address
-#define C0_WATCHLO C_REG(18) // watchpoint
-#define C0_WATCHHI C_REG(19) // watchpoint
-#define C0_ECC C_REG(26) // S-cache ECC and primary parity
-#define C0_CACHE_ERR C_REG(27) // cache error status
-#define C0_TAGLO C_REG(28) // cache operations
-#define C0_TAGHI C_REG(29) // cache operations
-#define C0_ERROR_EPC C_REG(30) // ECC error prg. counter
+/* Coprocessor 0 registers */
+#ifdef _LANGUAGE_C
+#define C0_INX 0
+#define C0_RAND 1
+#define C0_ENTRYLO0 2
+#define C0_ENTRYLO1 3
+#define C0_CONTEXT 4
+#define C0_PAGEMASK 5 /* page mask */
+#define C0_WIRED 6 /* # wired entries in tlb */
+#define C0_BADVADDR 8
+#define C0_COUNT 9 /* free-running counter */
+#define C0_ENTRYHI 10
+#define C0_COMPARE 11 /* counter comparison reg. */
+#define C0_SR 12
+#define C0_CAUSE 13
+#define C0_EPC 14
+#define C0_PRID 15 /* revision identifier */
+#define C0_CONFIG 16 /* hardware configuration */
+#define C0_LLADDR 17 /* load linked address */
+#define C0_WATCHLO 18 /* watchpoint */
+#define C0_WATCHHI 19 /* watchpoint */
+#define C0_ECC 26 /* S-cache ECC and primary parity */
+#define C0_CACHE_ERR 27 /* cache error status */
+#define C0_TAGLO 28 /* cache operations */
+#define C0_TAGHI 29 /* cache operations */
+#define C0_ERROR_EPC 30 /* ECC error prg. counter */
+#else
+#define C0_INX $0
+#define C0_RAND $1
+#define C0_ENTRYLO0 $2
+#define C0_ENTRYLO1 $3
+#define C0_CONTEXT $4
+#define C0_PAGEMASK $5 /* page mask */
+#define C0_WIRED $6 /* # wired entries in tlb */
+#define C0_BADVADDR $8
+#define C0_COUNT $9 /* free-running counter */
+#define C0_ENTRYHI $10
+#define C0_COMPARE $11 /* counter comparison reg. */
+#define C0_SR $12
+#define C0_CAUSE $13
+#define C0_EPC $14
+#define C0_PRID $15 /* revision identifier */
+#define C0_CONFIG $16 /* hardware configuration */
+#define C0_LLADDR $17 /* load linked address */
+#define C0_WATCHLO $18 /* watchpoint */
+#define C0_WATCHHI $19 /* watchpoint */
+#define C0_ECC $26 /* S-cache ECC and primary parity */
+#define C0_CACHE_ERR $27 /* cache error status */
+#define C0_TAGLO $28 /* cache operations */
+#define C0_TAGHI $29 /* cache operations */
+#define C0_ERROR_EPC $30 /* ECC error prg. counter */
+#endif
-// floating-point status register
-#define C1_FPCSR C_REG(31)
+/* floating-point status register */
+#ifdef _LANGUAGE_C
+#define C1_FPCSR 31
+#else
+#define C1_FPCSR $31
+#endif
-#define FPCSR_FS 0x01000000 // flush denorm to zero
-#define FPCSR_C 0x00800000 // condition bit
-#define FPCSR_CE 0x00020000 // cause: unimplemented operation
-#define FPCSR_CV 0x00010000 // cause: invalid operation
-#define FPCSR_CZ 0x00008000 // cause: division by zero
-#define FPCSR_CO 0x00004000 // cause: overflow
-#define FPCSR_CU 0x00002000 // cause: underflow
-#define FPCSR_CI 0x00001000 // cause: inexact operation
-#define FPCSR_EV 0x00000800 // enable: invalid operation
-#define FPCSR_EZ 0x00000400 // enable: division by zero
-#define FPCSR_EO 0x00000200 // enable: overflow
-#define FPCSR_EU 0x00000100 // enable: underflow
-#define FPCSR_EI 0x00000080 // enable: inexact operation
-#define FPCSR_FV 0x00000040 // flag: invalid operation
-#define FPCSR_FZ 0x00000020 // flag: division by zero
-#define FPCSR_FO 0x00000010 // flag: overflow
-#define FPCSR_FU 0x00000008 // flag: underflow
-#define FPCSR_FI 0x00000004 // flag: inexact operation
-#define FPCSR_RM_MASK 0x00000003 // rounding mode mask
-#define FPCSR_RM_RN 0x00000000 // round to nearest
-#define FPCSR_RM_RZ 0x00000001 // round to zero
-#define FPCSR_RM_RP 0x00000002 // round to positive infinity
-#define FPCSR_RM_RM 0x00000003 // round to negative infinity
+#define FPCSR_FS 0x01000000 /* flush denorm to zero */
+#define FPCSR_C 0x00800000 /* condition bit */
+#define FPCSR_CE 0x00020000 /* cause: unimplemented operation */
+#define FPCSR_CV 0x00010000 /* cause: invalid operation */
+#define FPCSR_CZ 0x00008000 /* cause: division by zero */
+#define FPCSR_CO 0x00004000 /* cause: overflow */
+#define FPCSR_CU 0x00002000 /* cause: underflow */
+#define FPCSR_CI 0x00001000 /* cause: inexact operation */
+#define FPCSR_EV 0x00000800 /* enable: invalid operation */
+#define FPCSR_EZ 0x00000400 /* enable: division by zero */
+#define FPCSR_EO 0x00000200 /* enable: overflow */
+#define FPCSR_EU 0x00000100 /* enable: underflow */
+#define FPCSR_EI 0x00000080 /* enable: inexact operation */
+#define FPCSR_FV 0x00000040 /* flag: invalid operation */
+#define FPCSR_FZ 0x00000020 /* flag: division by zero */
+#define FPCSR_FO 0x00000010 /* flag: overflow */
+#define FPCSR_FU 0x00000008 /* flag: underflow */
+#define FPCSR_FI 0x00000004 /* flag: inexact operation */
+#define FPCSR_RM_MASK 0x00000003 /* rounding mode mask */
+#define FPCSR_RM_RN 0x00000000 /* round to nearest */
+#define FPCSR_RM_RZ 0x00000001 /* round to zero */
+#define FPCSR_RM_RP 0x00000002 /* round to positive infinity */
+#define FPCSR_RM_RM 0x00000003 /* round to negative infinity */
#endif
diff --git a/include/ultra64/asm.h b/include/ultra64/asm.h
index 2a2536bdaa..d887673fa6 100644
--- a/include/ultra64/asm.h
+++ b/include/ultra64/asm.h
@@ -6,55 +6,107 @@
#define _MIPS_ISA_MIPS2 2
#define _MIPS_ISA_MIPS3 3
#define _MIPS_ISA_MIPS4 4
+
+#define _MIPS_SIM_ABI32 1 /* MIPS MSIG calling convention */
+#define _MIPS_SIM_NABI32 2 /* MIPS new 32-bit abi */
+ /* NABI32 is 64bit calling convention but 32bit type sizes) */
+#define _MIPS_SIM_ABI64 3 /* MIPS 64 calling convention */
#endif
#ifndef _LANGUAGE_C
+#ifdef __GNUC__
+#define TYPE(x, t) .type x, @t
+#define SIZE(x) .size x, . - x
+#else
+#define TYPE(x, t)
+#define SIZE(x)
+#endif
+
#define LEAF(x) \
- .balign 4 ;\
+ .align 2 ;\
.globl x ;\
- .type x, @function ;\
+ TYPE(x, function) ;\
+ .ent x, 0 ;\
x: ;\
- .ent x, 0 ;\
- .frame $sp, 0, $ra
+ .frame sp, 0, ra
#define XLEAF(x) \
- .balign 4 ;\
+ .align 2 ;\
.globl x ;\
- .type x, @function ;\
- x: ;\
- .aent x, 0
+ TYPE(x, function) ;\
+ .aent x, 0 ;\
+ x:
#define NESTED(x, fsize, ra) \
.globl x ;\
+ .ent x, 0 ;\
x: ;\
- .ent x, 0 ;\
- .frame $sp, fsize, ra
+ .frame sp, fsize, ra
#define XNESTED(x) \
.globl x ;\
- x: ;\
- .aent x, 0
+ .aent x, 0 ;\
+ x:
#define END(x) \
- .size x, . - x ;\
+ SIZE(x) ;\
.end x
-#define IMPORT(x, size) \
- .extern x, size
-
#define EXPORT(x) \
.globl x ;\
x:
+#ifdef __sgi
+#define IMPORT(sym, size) \
+ .extern sym, size
+#else
+#define IMPORT(sym, size)
+#endif
+
#define DATA(x) \
- .balign 4 ;\
+ .align 2 ;\
.globl x ;\
- .type x, @object ;\
+ TYPE(x, object) ;\
x:
#define ENDDATA(x) \
- .size x, . - x
+ SIZE(x)
+
+#define MFC0(dst, src) \
+ .set noreorder; mfc0 dst, src; .set reorder
+#define MTC0(dst, src) \
+ .set noreorder; mtc0 dst, src; .set reorder
+
+#define CACHE(op, base) \
+ .set noreorder; cache op, base; .set reorder
+
+#define CFC1(dst, src) \
+ .set noreorder; cfc1 dst, src; .set reorder
+#define CTC1(src, dst) \
+ .set noreorder; ctc1 src, dst; .set reorder
+
+#define NOP \
+ .set noreorder; nop; .set reorder
+
+#define TLBWI \
+ .set noreorder; tlbwi; .set reorder
+
+#define TLBR \
+ .set noreorder; tlbr; .set reorder
+
+#define TLBP \
+ .set noreorder; tlbp; .set reorder
+
+#ifndef __GNUC__
+#define ABS(x, y) \
+ .globl x; \
+ x = y
+#else
+#define ABS(x, y) \
+ .globl x; \
+ .set x, y
+#endif
#endif
@@ -62,11 +114,11 @@
* Stack Alignment
*/
#if (_MIPS_SIM == _ABIO32)
-#define NARGSAVE 4 // space for 4 args must be allocated
+#define NARGSAVE 4 /* space for 4 args must be allocated */
#define ALSZ (8-1)
#define ALMASK ~(8-1)
#elif (_MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64)
-#define NARGSAVE 0 // no caller responsibilities
+#define NARGSAVE 0 /* no caller responsibilities */
#define ALSZ (16-1)
#define ALMASK ~(16-1)
#endif
diff --git a/include/ultra64/bbskapi.h b/include/ultra64/bbskapi.h
new file mode 100644
index 0000000000..7918975475
--- /dev/null
+++ b/include/ultra64/bbskapi.h
@@ -0,0 +1,272 @@
+/**
+ * @file bbskapi.h
+ *
+ * This file contains the external API for the iQue Player's Secure Kernel Calls.
+ *
+ * Applications require permission to call particular Secure Kernel Calls, defined in the associated Ticket.
+ * Most are not callable by games.
+ */
+#ifndef BB_SKAPI_H
+#define BB_SKAPI_H
+
+#include "ultratypes.h"
+
+#define SKC_OK 0
+#define SKC_RECRYPT_INVALID 1
+#define SKC_RECRYPT_2 2 // Complete?
+#define SKC_RECRYPT_3 3 // Partial?
+#define SKC_RECRYPT_4 4 // Beginning?
+#define SKC_INVALID_ARGS -1
+#define SKC_INVALID_TSRL -2
+#define SKC_INVALID_CARL -3
+#define SKC_INVALID_CPRL -4
+#define SKC_INVALID_CERT -9
+#define SKC_NO_PERMISSION -11
+
+typedef struct BbAppLaunchCrls BbAppLaunchCrls;
+typedef struct BbCertBase BbCertBase;
+typedef struct BbEccSig BbEccSig;
+typedef struct BbRecryptList BbRecryptList;
+typedef struct BbShaHash BbShaHash;
+typedef struct BbTicketBundle BbTicketBundle;
+
+/**
+ * Retrieves the console's unique BBID.
+ *
+ * @param bbId Location to write the BBID to. Must be a pointer to cached DRAM with 4-byte alignment.
+ * @return
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_INVALID_ARGS If the supplied pointer is not valid.
+ * SKC_OK Otherwise.
+ */
+s32 skGetId(u32* bbId);
+
+/**
+ * Prepares to launch an application.
+ * The provided ticket bundle is verified and made the active ticket bundle.
+ * The AES decryption hardware is prepared.
+ *
+ * @param bundle Ticket Bundle associated with this application.
+ * @param crls Application Certificate Revocation Lists to check when verifying the ticket bundle.
+ * The ticket bundle must be signed by the Root signature without going through any
+ * revoked certificates.
+ * @param recryptList System Recrypt List (encrypted and digitally signed)
+ * @return
+ * SKC_INVALID_ARGS If any inputs are or contain invalid pointers,
+ * or the ticket is not for this console,
+ * or the ticket is for a trial that has expired.
+ * SKC_INVALID_TSRL If the provided TSRL revocation list is invalid.
+ * SKC_INVALID_CARL If the provided CARL revocation list is invalid.
+ * SKC_INVALID_CPRL If the provided CPRL revocation list is invalid.
+ * SKC_INVALID_CERT If a digital certificate was revoked by one of the revocation lists.
+ * SKC_RECRYPT_3 If the recrypt state for this app is not in an acceptable state to be launched.
+ * SKC_RECRYPT_4 If the recrypt state for this app is not in an acceptable state to be launched.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ */
+s32 skLaunchSetup(BbTicketBundle* bundle, BbAppLaunchCrls* crls, BbRecryptList* recryptList);
+
+/**
+ * Launches a prepared application that is assumed to have been loaded into memory at the entrypoint between calling
+ * skLaunchSetup and calling this. skLaunchSetup must have been called prior to set the active ticket bundle.
+ *
+ * @param entrypoint The entrypoint address of the app to launch.
+ *
+ * @return
+ * SKC_INVALID_ARGS If the entrypoint is an invalid pointer,
+ * or if content failed a hash check for non-recrypted apps,
+ * or if the content is an expired trial.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * @note Does not return if the call is successful.
+ */
+s32 skLaunch(void* entrypoint);
+
+/**
+ * Verifies whether a provided Recrypt List is valid.
+ *
+ * @param recryptList Pointer to the (encrypted and digitally signed) recrypt list to verify.
+ * @return
+ * SKC_OK If the recrypt list is valid
+ * SKC_INVALID_ARGS If the recrypt list is invalid
+ * (e.g. contains invalid pointers or its ECDSA signature fails to verify)
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ */
+s32 skRecryptListValid(BbRecryptList* recryptList);
+
+/**
+ * Begins a new recryption task. Content downloaded is initially encrypted with the Common Key but may be re-encrypted
+ * with a new randomly generated AES key if the recrypt flag is set in the content metadata. Like with skLaunchSetup,
+ * the provided ticket bundle is first verified before being made the active ticket bundle.
+ *
+ * @param bundle The ticket bundle associated with the content that will be recrypted.
+ * @param crls Application Certificate Revocation Lists to check when verifying the ticket bundle.
+ * The ticket bundle must be signed by the Root signature without going through any
+ * revoked certificates.
+ * @param recryptList The recrypt list that the AES key will be saved to, after being encrypted with the
+ * console-specific recrypt list key.
+ * @return
+ * SKC_RECRYPT_INVALID If called on a ticket bundle that does not have the recrypt flag set.
+ * SKC_INVALID_ARGS If any inputs are or contain invalid pointers,
+ * or the ticket is not for this console,
+ * or the ticket is for a trial that has expired.
+ * SKC_INVALID_TSRL If the provided TSRL revocation list is invalid.
+ * SKC_INVALID_CARL If the provided CARL revocation list is invalid.
+ * SKC_INVALID_CPRL If the provided CPRL revocation list is invalid.
+ * SKC_INVALID_CERT If a digital certificate was revoked by one of the revocation lists.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * Otherwise, one of SKC_RECRYPT_* will be returned communicating the initial state of the recryption process.
+ */
+s32 skRecryptBegin(BbTicketBundle* bundle, BbAppLaunchCrls* crls, BbRecryptList* recryptList);
+
+/**
+ * Recrypts the provided data, using the previously set context.
+ * Must be called following skRecryptBegin.
+ *
+ * @param buf Pointer to app content to encrypt and hash.
+ * @param size Amount of data to process in this buffer.
+ * @return
+ * SKC_INVALID_ARGS If the provided buffer is not fully contained in RAM or is otherwise invalid.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ */
+s32 skRecryptData(u8* buf, u32 size);
+
+/**
+ * Resumes a partially-complete recryption. The last chunk of successfully-recrypted data must be provided in order to
+ * set the AES-128-CBC Initialization Vector to continue recryption of the next chunk.
+ * Must be called following skRecryptBegin.
+ *
+ * @param buf Pointer to last chunk of successfully-recrypted content.
+ * @param size Amount of data available.
+ * @return
+ * SKC_INVALID_ARGS If the provided buffer is not fully contained in RAM or is otherwise invalid.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ */
+s32 skRecryptComputeState(u8* buf, u32 size);
+
+/**
+ * Concludes the recryption process. The SHA-1 hash of the content, computed during recryption, is checked against the
+ * hash in the active ticket bundle; if it passes, the recrypt list entry for the active content is updated to indicate
+ * that recryption is complete and was successful.
+ *
+ * @param recryptList The (encrypted and digitally signed) recrypt list to update.
+ * @return
+ * SKC_OK If recryption succeeded.
+ * SKC_INVALID_ARGS If recryption failed (e.g. if the hash of the content did not match the hash in the ticket bundle)
+ * or if the provided recrypt list is invalid or cannot find the entry for the content.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ */
+s32 skRecryptEnd(BbRecryptList* recryptList);
+
+/**
+ * Generates a digital signature for the provided SHA-1 hash (treated as a message) using the Elliptic Curve Digital
+ * Signature Algorithm (ECDSA) on the curve sect233r1 with the console's ECDSA Private Key. Appends an identity of 1 to
+ * the end of the message prior to signing.
+ *
+ * @param hash The SHA-1 hash to sign.
+ * @param outSignature The resulting ECDSA digital signature.
+ * @return
+ * SKC_INVALID_ARGS If either of the arguments is an invalid pointer.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ */
+s32 skSignHash(BbShaHash* hash, BbEccSig* outSignature);
+
+/**
+ * Verifies a SHA-1 hash (treated as a message) against a digital signature using either the Elliptic Curve Digital
+ * Signature Algorithm (ECDSA) or the RSA Digital Signature Algorithm. For RSA, either 2048-bit or 4096-bit signatures
+ * can be recognized.
+ *
+ * For verifying self-signed (e.g. via skSignHash) ECDSA signatures the certificate chain and revocation lists are not
+ * required and may be passed as NULL, the public key is the console's own ECDSA public key. For verifying other types
+ * of signatures, a valid certificate chain and certificate revocation lists must be provided, in which case the
+ * signature must be signed by the Root certificate without going through any revoked certificates.
+ *
+ * This can only verify hashes signed with an identity of 1, such as those signed via skSignHash.
+ *
+ * @param hash The SHA-1 hash to check the signature of.
+ * @param signature The signature to compare against. May be an ECDSA, RSA2048 or RSA4096 signature.
+ * @param certChain Certificate Chain, NULL-terminated list of certificate pointers.
+ * Not required for self-signed ECDSA signatures and must be NULL in that case.
+ * Should not be more than 5 certificates long.
+ * Should end on the Root signature.
+ * @param crls Certificate Revocation Lists to check certificates against. Not required for self-signed ECDSA signatures.
+ * @return
+ * SKC_OK If the hash was successfully verified against the signature.
+ * SKC_INVALID_ARGS If any arguments are invalid pointers,
+ * or the hash could not be verified against the digital signature,
+ * or the certificate chain was invalid,
+ * or if any certificate revocation lists were invalid.
+ * SKC_INVALID_CERT If a digital certificate was revoked by one of the revocation lists.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ */
+s32 skVerifyHash(BbShaHash* hash, u32* signature, BbCertBase** certChain, BbAppLaunchCrls* crls);
+
+/**
+ * Retrieves the consumption counters for all currently-tracked applications and the Ticket ID (TID) Window.
+ *
+ * The TID Window determines the TID for the first counter (cc[0]), the other counters (cc[i]) are associated with
+ * tidWindow + i.
+ *
+ * The consumption counters track either the number of minutes that a trial app has been played for, or the number of
+ * times a trial app has been launched.
+ *
+ * @param tidWindow The location to save the TID window to.
+ * @param cc An array of 26 u16s to save the consumption counters into.
+ * @return
+ * SKC_INVALID_ARGS If either pointer is invalid or there is not enough room to save all the consumption counters.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ */
+s32 skGetConsumption(u16* tidWindow, u16 cc[26]);
+
+/**
+ * Increments the Ticket ID Window by 1 and moves all consumption counters down by 1 slot to match the new window. The
+ * counter previously at position 0 is forgotten.
+ *
+ * @return
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_INVALID_ARGS If the resulting state could not be saved internally.
+ * SKC_OK If success.
+ */
+s32 skAdvanceTicketWindow(void);
+
+/**
+ * Overrides the trial limit and trial type stored in the currently loaded ticket.
+ *
+ * @param limit The new trial limit. Either a length of time or the number of allowed launches, depending on trial type.
+ * @param code The new trial type
+ * 0 = Time-limited in minutes, call skKeepAlive periodically
+ * 1 = Limited by number of launches
+ * 2 = Time-limited in minutes, no need to call skKeepAlive (TOVERIFY)
+ * @return
+ * SKC_OK If success.
+ * SKC_INVALID_ARGS If no ticket is currently loaded.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ */
+s32 skSetLimit(u16 limit, u16 code);
+
+/**
+ * Returns to the system menu.
+ *
+ * @return
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * @note Does not return if called with permission.
+ */
+s32 skExit(void);
+
+/**
+ * Keeps trial applications alive.
+ *
+ * The hardware trial timer does not have a very long period so must be refreshed periodically by calling this function.
+ * This function updates the timer and checks for an expiry.
+ *
+ * @return
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ * @note This function may not return if it detects the trial has expired.
+ */
+s32 skKeepAlive(void);
+
+#endif
diff --git a/include/ultra64/bcp.h b/include/ultra64/bcp.h
new file mode 100644
index 0000000000..f66fee2f02
--- /dev/null
+++ b/include/ultra64/bcp.h
@@ -0,0 +1,275 @@
+#ifndef BCP_H
+#define BCP_H
+
+#include "rcp.h"
+
+/******************************************************************************
+ * Additional MIPS Interface (MI) Registers
+ */
+
+/**
+ * Accesses to this register outside of Secure Mode cause an NMI to transfer control
+ * to the Secure Kernel.
+ *
+ * [25] ?: System software writes to this bit when launching an app or game
+ * [24] SK RAM Access: Set to 1 to enable access to 0x8000 bytes at 0x1FC40000
+ * [7] Secure Trap Cause: Memory card removed
+ * [6] Secure Trap Cause: Power button pressed
+ * [5] Secure Trap Cause: MI Error
+ * [4] Secure Trap Cause: PI Error
+ * [3] Secure Trap Cause: Timer expired
+ * [2] Secure Trap Cause: Syscall via read of this register outside of secure mode
+ * [1] Boot ROM Swap: 0 = SK mapped at 0x1FC00000, Boot ROM mapped at 0x1FC20000
+ * 1 = Boot ROM mapped at 0x1FC00000, SK mapped at 0x1FC20000
+ * [0] Secure Mode: 0 = not in secure mode
+ * 1 = in secure mode
+ */
+#define MI_SECURE_EXCEPTION_REG (MI_BASE_REG + 0x14)
+
+/**
+ * Read:
+ * [25] MD (active, 1 if card is currently disconnected else 0)
+ * [24] Power Button (active, 1 if button is currently pressed else 0)
+ * [13] MD (pending interrupt)
+ * [12] Power Button (pending interrupt)
+ * [11] USB1
+ * [10] USB0
+ * [ 9] PI_ERR
+ * [ 8] IDE
+ * [ 7] AES
+ * [ 6] FLASH
+ * [ 5] DP
+ * [ 4] PI
+ * [ 3] VI
+ * [ 2] AI
+ * [ 1] SI
+ * [ 0] SP
+ *
+ * Write:
+ * [13] Clear MD Interrupt
+ */
+#define MI_EX_INTR_REG (MI_BASE_REG + 0x38)
+
+/*
+ * MI_EX_INTR_REG: read bits
+ */
+#define MI_EX_INTR_SP (1 << 0)
+#define MI_EX_INTR_SI (1 << 1)
+#define MI_EX_INTR_AI (1 << 2)
+#define MI_EX_INTR_VI (1 << 3)
+#define MI_EX_INTR_PI (1 << 4)
+#define MI_EX_INTR_DP (1 << 5)
+#define MI_EX_INTR_FLASH (1 << 6)
+#define MI_EX_INTR_AES (1 << 7)
+#define MI_EX_INTR_IDE (1 << 8)
+#define MI_EX_INTR_PI_ERR (1 << 9)
+#define MI_EX_INTR_USB0 (1 << 10)
+#define MI_EX_INTR_USB1 (1 << 11)
+#define MI_EX_INTR_PWR_BTN (1 << 12)
+#define MI_EX_INTR_MD (1 << 13)
+#define MI_EX_INTR_PWR_BTN_PRESSED (1 << 24) /* updated in real-time, unrelated to interrupt */
+#define MI_EX_INTR_CARD_NOT_PRESENT (1 << 25) /* updated in real-time, unrelated to interrupt */
+
+#define MI_EX_INTR_ALL \
+ (MI_EX_INTR_FLASH | MI_EX_INTR_AES | MI_EX_INTR_IDE | MI_EX_INTR_PI_ERR | \
+ MI_EX_INTR_USB0 | MI_EX_INTR_USB1 | MI_EX_INTR_PWR_BTN | MI_EX_INTR_MD)
+
+/*
+ * MI_EX_INTR_REG: write bits
+ */
+#define MI_EX_INTR_CLR_MD (1 << 13)
+
+/**
+ * Write:
+ * [27:26] Set/Clear MD
+ * [25:24] Set/Clear BUTTON
+ * [23:22] Set/Clear USB1
+ * [21:20] Set/Clear USB0
+ * [19:18] Set/Clear PI_ERR
+ * [17:16] Set/Clear IDE
+ * [15:14] Set/Clear AES
+ * [13:12] Set/Clear FLASH
+ * [11:10] Set/Clear DP
+ * [ 9: 8] Set/Clear PI
+ * [ 7: 6] Set/Clear VI
+ * [ 5: 4] Set/Clear AI
+ * [ 3: 2] Set/Clear SI
+ * [ 1: 0] Set/Clear SP
+ *
+ * Read:
+ * [13] MD
+ * [12] BUTTON
+ * [11] USB1
+ * [10] USB0
+ * [ 9] PI_ERR
+ * [ 8] IDE
+ * [ 7] AES
+ * [ 6] FLASH
+ * [ 5] DP
+ * [ 4] PI
+ * [ 3] VI
+ * [ 2] AI
+ * [ 1] SI
+ * [ 0] SP
+ */
+#define MI_EX_INTR_MASK_REG (MI_BASE_REG + 0x3C)
+
+/*
+ * MI_EX_INTR_MASK_REG: write bits
+ */
+#define MI_EX_INTR_MASK_CLR_SP (1 << 0) /* clear SP mask */
+#define MI_EX_INTR_MASK_SET_SP (1 << 1) /* set SP mask */
+#define MI_EX_INTR_MASK_CLR_SI (1 << 2) /* clear SI mask */
+#define MI_EX_INTR_MASK_SET_SI (1 << 3) /* set SI mask */
+#define MI_EX_INTR_MASK_CLR_AI (1 << 4) /* clear AI mask */
+#define MI_EX_INTR_MASK_SET_AI (1 << 5) /* set AI mask */
+#define MI_EX_INTR_MASK_CLR_VI (1 << 6) /* clear VI mask */
+#define MI_EX_INTR_MASK_SET_VI (1 << 7) /* set VI mask */
+#define MI_EX_INTR_MASK_CLR_PI (1 << 8) /* clear PI mask */
+#define MI_EX_INTR_MASK_SET_PI (1 << 9) /* set PI mask */
+#define MI_EX_INTR_MASK_CLR_DP (1 << 10) /* clear DP mask */
+#define MI_EX_INTR_MASK_SET_DP (1 << 11) /* set DP mask */
+#define MI_EX_INTR_MASK_CLR_FLASH (1 << 12) /* clear FLASH mask */
+#define MI_EX_INTR_MASK_SET_FLASH (1 << 13) /* set FLASH mask */
+#define MI_EX_INTR_MASK_CLR_AES (1 << 14) /* clear AES mask */
+#define MI_EX_INTR_MASK_SET_AES (1 << 15) /* set AES mask */
+#define MI_EX_INTR_MASK_CLR_IDE (1 << 16) /* clear IDE mask */
+#define MI_EX_INTR_MASK_SET_IDE (1 << 17) /* set IDE mask */
+#define MI_EX_INTR_MASK_CLR_PI_ERR (1 << 18) /* clear PI_ERR mask */
+#define MI_EX_INTR_MASK_SET_PI_ERR (1 << 19) /* set PI_ERR mask */
+#define MI_EX_INTR_MASK_CLR_USB0 (1 << 20) /* clear USB0 mask */
+#define MI_EX_INTR_MASK_SET_USB0 (1 << 21) /* set USB0 mask */
+#define MI_EX_INTR_MASK_CLR_USB1 (1 << 22) /* clear USB1 mask */
+#define MI_EX_INTR_MASK_SET_USB1 (1 << 23) /* set USB1 mask */
+#define MI_EX_INTR_MASK_CLR_PWR_BTN (1 << 24) /* clear PWR_BTN mask */
+#define MI_EX_INTR_MASK_SET_PWR_BTN (1 << 25) /* set PWR_BTN mask */
+#define MI_EX_INTR_MASK_CLR_MD (1 << 26) /* clear MD mask */
+#define MI_EX_INTR_MASK_SET_MD (1 << 27) /* set MD mask */
+
+/*
+ * MI_EX_INTR_MASK_REG: read bits
+ */
+#define MI_EX_INTR_MASK_SP (1 << 0) /* SP intr mask */
+#define MI_EX_INTR_MASK_SI (1 << 1) /* SI intr mask */
+#define MI_EX_INTR_MASK_AI (1 << 2) /* AI intr mask */
+#define MI_EX_INTR_MASK_VI (1 << 3) /* VI intr mask */
+#define MI_EX_INTR_MASK_PI (1 << 4) /* PI intr mask */
+#define MI_EX_INTR_MASK_DP (1 << 5) /* DP intr mask */
+#define MI_EX_INTR_MASK_FLASH (1 << 6) /* FLASH intr mask */
+#define MI_EX_INTR_MASK_AES (1 << 7) /* AES intr mask */
+#define MI_EX_INTR_MASK_IDE (1 << 8) /* IDE intr mask */
+#define MI_EX_INTR_MASK_PI_ERR (1 << 9) /* PI_ERR intr mask */
+#define MI_EX_INTR_MASK_USB0 (1 << 10) /* USB0 intr mask */
+#define MI_EX_INTR_MASK_USB1 (1 << 11) /* USB1 intr mask */
+#define MI_EX_INTR_MASK_PWR_BTN (1 << 12) /* PWR_BTN intr mask */
+#define MI_EX_INTR_MASK_MD (1 << 13) /* MD intr mask */
+
+/******************************************************************************
+ * Additional Parallel Interface (PI) Registers
+ */
+
+/**
+ * Write:
+ * [31] Execute command after write
+ * [30] Interrupt when done
+ * [29:24] ?
+ * [23:16] NAND Command
+ * [15] ?
+ * [14] Buffer Select
+ * [13:12] Device Select
+ * [11] Do Error Correction
+ * [10] NAND Command is Multi-Cycle
+ * [ 9: 0] Data Transfer Length in Bytes
+ *
+ * Writing 0 to this register clears the interrupt
+ *
+ * Read:
+ * [31] Busy
+ * [11] Single-Bit Error Corrected
+ * [10] Double-Bit Error Uncorrectable
+ */
+#define PI_NAND_CTRL_REG (PI_BASE_REG + 0x48)
+
+/**
+ * PI internal buffer DMA read length. Writes initiate a DMA from RDRAM to the PI buffer.
+ */
+#define PI_EX_RD_LEN_REG (PI_BASE_REG + 0x58)
+
+/**
+ * PI internal buffer DMA write length. Writes initiate a DMA from the PI buffer to RDRAM.
+ */
+#define PI_EX_WR_LEN_REG (PI_BASE_REG + 0x5C)
+
+/**
+ * [31:16] Box ID
+ * [31:30] Hardware Revision? (osInitialize checks this and sets __osBbIsBb to 2 if != 0)
+ * [29:27] ?? (not seen)
+ * [26:25] ?? (system clock speed identifier?)
+ * [24:22] ?? (bootrom, checked against MI_10_REG and copied there if mismatch)
+ * [21:16] ?? (not seen)
+ * [ 7: 4] GPIO direction control
+ * [7] RTC Data output enable
+ * [6] RTC Clock output enable
+ * [5] Error LED output enable
+ * [4] Power Control output enable
+ * [ 3: 0] GPIO in/out value
+ * [3] RTC Data output value (0=low, 1=high)
+ * [2] RTC Clock output value (0=low, 1=high)
+ * [1] Error LED (0=on, 1=off)
+ * [0] Power Control (0=off, 1=on)
+ */
+#define PI_GPIO_REG (PI_BASE_REG + 0x60)
+
+/* Box ID */
+#define PI_GPIO_GET_BOXID(reg) ((reg) >> 16)
+#define PI_GPIO_IS_HW_V2(reg) ((reg) & (3 << 30))
+
+/* GPIO: Input/Output enables */
+#define PI_GPIO_I_PWR ((0 << 0) << 4)
+#define PI_GPIO_O_PWR ((1 << 0) << 4)
+#define PI_GPIO_I_LED ((0 << 1) << 4)
+#define PI_GPIO_O_LED ((1 << 1) << 4)
+#define PI_GPIO_I_RTC_CLK ((0 << 2) << 4)
+#define PI_GPIO_O_RTC_CLK ((1 << 2) << 4)
+#define PI_GPIO_I_RTC_DAT ((0 << 3) << 4)
+#define PI_GPIO_O_RTC_DAT ((1 << 3) << 4)
+
+/* GPIO: Output controls */
+/* Power */
+#define PI_GPIO_PWR_OFF (0 << 0)
+#define PI_GPIO_PWR_ON (1 << 0)
+/* LED */
+#define PI_GPIO_LED_ON (0 << 1)
+#define PI_GPIO_LED_OFF (1 << 1)
+/* RTC */
+#define PI_GPIO_RTC_CLK_LO (0 << 2)
+#define PI_GPIO_RTC_CLK_HI (1 << 2)
+#define PI_GPIO_RTC_DAT_LO (0 << 3)
+#define PI_GPIO_RTC_DAT_HI (1 << 3)
+
+/* GPIO: Input getters */
+#define PI_GPIO_GET_PWR(reg) (((reg) >> 0) & 1)
+#define PI_GPIO_GET_LED(reg) (((reg) >> 1) & 1)
+#define PI_GPIO_GET_RTC_CLK(reg) (((reg) >> 2) & 1)
+#define PI_GPIO_GET_RTC_DAT(reg) (((reg) >> 3) & 1)
+
+/**
+ * [31] ?
+ */
+#define PI_64_REG (PI_BASE_REG + 0x64)
+
+/******************************************************************************
+ * Additional Serial Interface (SI) Registers
+ */
+
+/**
+ * ?
+ */
+#define SI_0C_REG (SI_BASE_REG + 0x0C)
+
+/**
+ * ?
+ */
+#define SI_1C_REG (SI_BASE_REG + 0x1C)
+
+#endif
diff --git a/include/ultra64/controller.h b/include/ultra64/controller.h
index 4ce047a201..1b6d0cf323 100644
--- a/include/ultra64/controller.h
+++ b/include/ultra64/controller.h
@@ -17,6 +17,7 @@
#define CONT_CMD_WRITE_MEMPACK 3
#define CONT_CMD_READ_EEPROM 4
#define CONT_CMD_WRITE_EEPROM 5
+#define CONT_CMD_CHANNEL_RESET 0xFD
#define CONT_CMD_RESET 0xFF
#define CONT_CMD_REQUEST_STATUS_TX 1
diff --git a/include/ultra64/exception.h b/include/ultra64/exception.h
index 886a3b9096..d4368da166 100644
--- a/include/ultra64/exception.h
+++ b/include/ultra64/exception.h
@@ -1,7 +1,7 @@
#ifndef ULTRA64_EXCEPTION_H
#define ULTRA64_EXCEPTION_H
-// Interrupt masks
+/* Interrupt masks */
#define OS_IM_NONE 0x00000001
#define OS_IM_RCP 0x00000401
#define OS_IM_SW1 0x00000501
@@ -23,7 +23,7 @@
#define RCP_IMASK 0x003F0000
#define RCP_IMASKSHIFT 16
-// OSHWIntr values
+/* OSHWIntr values */
#define OS_INTR_CART 1
#ifdef _LANGUAGE_C
@@ -51,11 +51,11 @@ extern __osHwInt __osHwIntTable[];
#else
-// __osHwInt struct member offsets
+/* __osHwInt struct member offsets */
#define HWINT_CALLBACK 0x00
#define HWINT_SP 0x04
-// __osHwInt struct size
+/* __osHwInt struct size */
#define HWINT_SIZE 0x8
#endif
diff --git a/include/ultra64/libc.h b/include/ultra64/libc.h
index e71cb879d7..3480f101ad 100644
--- a/include/ultra64/libc.h
+++ b/include/ultra64/libc.h
@@ -5,7 +5,7 @@
void osSyncPrintf(const char* fmt, ...);
-#ifdef __GNUC__
+#if defined(__GNUC__) && defined(NON_MATCHING)
void bzero(void* __s, unsigned int __n);
int bcmp(const void* __sl, const void* __s2, unsigned int __n);
void bcopy(const void* __src, void* __dest, unsigned int __n);
diff --git a/include/ultra64/message.h b/include/ultra64/message.h
index bf93c524c9..dc89dc48ed 100644
--- a/include/ultra64/message.h
+++ b/include/ultra64/message.h
@@ -21,6 +21,16 @@
#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */
#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */
#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */
+#ifdef BBPLAYER
+#define OS_EVENT_FLASH 23 /* NAND flash operation complete */
+#define OS_EVENT_AES 24 /* AES decryption complete */
+#define OS_EVENT_IDE 25 /* IDE transfer complete */
+#define OS_EVENT_PI_ERR 26 /* PI Error? */
+#define OS_EVENT_USB0 27 /* USB Controller 0 */
+#define OS_EVENT_USB1 28 /* USB Controller 1 */
+#define OS_EVENT_UNK_29 29 /* ? */
+#define OS_EVENT_MD 30 /* Memory card removed */
+#endif
#ifdef _LANGUAGE_C
@@ -47,7 +57,7 @@ typedef struct OSMesgQueue {
#else
-// OSMesgQueue struct member offsets
+/* OSMesgQueue struct member offsets */
#define MQ_MTQUEUE 0x00
#define MQ_FULLQUEUE 0x04
diff --git a/include/ultra64/rcp.h b/include/ultra64/rcp.h
index 9c97e8bd9f..8fb8a523e9 100644
--- a/include/ultra64/rcp.h
+++ b/include/ultra64/rcp.h
@@ -114,13 +114,13 @@
/**
* External device info
*/
-#define DEVICE_TYPE_CART 0 // ROM cartridge
-#define DEVICE_TYPE_BULK 1 // ROM bulk
-#define DEVICE_TYPE_64DD 2 // 64 Disk Drive
-#define DEVICE_TYPE_SRAM 3 // SRAM
-// 4-6 are reserved
-#define DEVICE_TYPE_INIT 7 // initial value
-// 8-14 are reserved
+#define DEVICE_TYPE_CART 0 /* ROM cartridge */
+#define DEVICE_TYPE_BULK 1 /* ROM bulk */
+#define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */
+#define DEVICE_TYPE_SRAM 3 /* SRAM */
+/* 4-6 are reserved */
+#define DEVICE_TYPE_INIT 7 /* initial value */
+/* 8-14 are reserved */
/**
@@ -138,31 +138,31 @@
#define SP_BASE_REG 0x04040000
-// SP memory address (R/W): [12] 0=DMEM,1=IMEM, [11:0] DMEM/IMEM address
+/* SP memory address (R/W): [12] 0=DMEM,1=IMEM, [11:0] DMEM/IMEM address */
#define SP_MEM_ADDR_REG (SP_BASE_REG + 0x00)
-// SP DRAM DMA address (R/W): [23:0] RDRAM address
+/* SP DRAM DMA address (R/W): [23:0] RDRAM address */
#define SP_DRAM_ADDR_REG (SP_BASE_REG + 0x04)
-// SP read DMA length (R/W): [31:20] skip, [19:12] count, [11:0] length; RDRAM -> I/DMEM
+/* SP read DMA length (R/W): [31:20] skip, [19:12] count, [11:0] length; RDRAM -> I/DMEM */
#define SP_RD_LEN_REG (SP_BASE_REG + 0x08)
-// SP write DMA length (R/W): [31:20] skip, [19:12] count, [11:0] length; I/DMEM -> RDRAM
+/* SP write DMA length (R/W): [31:20] skip, [19:12] count, [11:0] length; I/DMEM -> RDRAM */
#define SP_WR_LEN_REG (SP_BASE_REG + 0x0C)
-// SP status (R/W): [14:0] valid bits; see below for write/read mode
+/* SP status (R/W): [14:0] valid bits; see below for write/read mode */
#define SP_STATUS_REG (SP_BASE_REG + 0x10)
-// SP DMA full (R): [0] dma full
+/* SP DMA full (R): [0] dma full */
#define SP_DMA_FULL_REG (SP_BASE_REG + 0x14)
-// SP DMA busy (R): [0] dma busy
+/* SP DMA busy (R): [0] dma busy */
#define SP_DMA_BUSY_REG (SP_BASE_REG + 0x18)
-// SP semaphore (R/W): Read: [0] acquire semaphore; Write: [] release semaphore
+/* SP semaphore (R/W): Read: [0] acquire semaphore; Write: [] release semaphore */
#define SP_SEMAPHORE_REG (SP_BASE_REG + 0x1C)
-// SP PC (R/W): [11:0] program counter
+/* SP PC (R/W): [11:0] program counter */
#define SP_PC_REG 0x04080000
/*
@@ -174,31 +174,31 @@
/*
* SP_STATUS_REG: write bits
*/
-#define SP_CLR_HALT (1 << 0) // clear halt
-#define SP_SET_HALT (1 << 1) // set halt
-#define SP_CLR_BROKE (1 << 2) // clear broke
-#define SP_CLR_INTR (1 << 3) // clear interrupt
-#define SP_SET_INTR (1 << 4) // set interrupt
-#define SP_CLR_SSTEP (1 << 5) // clear sstep
-#define SP_SET_SSTEP (1 << 6) // set sstep
-#define SP_CLR_INTR_BREAK (1 << 7) // clear interrupt on break
-#define SP_SET_INTR_BREAK (1 << 8) // set interrupt on break
-#define SP_CLR_SIG0 (1 << 9) // clear signal 0
-#define SP_SET_SIG0 (1 << 10) // set signal 0
-#define SP_CLR_SIG1 (1 << 11) // clear signal 1
-#define SP_SET_SIG1 (1 << 12) // set signal 1
-#define SP_CLR_SIG2 (1 << 13) // clear signal 2
-#define SP_SET_SIG2 (1 << 14) // set signal 2
-#define SP_CLR_SIG3 (1 << 15) // clear signal 3
-#define SP_SET_SIG3 (1 << 16) // set signal 3
-#define SP_CLR_SIG4 (1 << 17) // clear signal 4
-#define SP_SET_SIG4 (1 << 18) // set signal 4
-#define SP_CLR_SIG5 (1 << 19) // clear signal 5
-#define SP_SET_SIG5 (1 << 20) // set signal 5
-#define SP_CLR_SIG6 (1 << 21) // clear signal 6
-#define SP_SET_SIG6 (1 << 22) // set signal 6
-#define SP_CLR_SIG7 (1 << 23) // clear signal 7
-#define SP_SET_SIG7 (1 << 24) // set signal 7
+#define SP_CLR_HALT (1 << 0) /* clear halt */
+#define SP_SET_HALT (1 << 1) /* set halt */
+#define SP_CLR_BROKE (1 << 2) /* clear broke */
+#define SP_CLR_INTR (1 << 3) /* clear interrupt */
+#define SP_SET_INTR (1 << 4) /* set interrupt */
+#define SP_CLR_SSTEP (1 << 5) /* clear sstep */
+#define SP_SET_SSTEP (1 << 6) /* set sstep */
+#define SP_CLR_INTR_BREAK (1 << 7) /* clear interrupt on break */
+#define SP_SET_INTR_BREAK (1 << 8) /* set interrupt on break */
+#define SP_CLR_SIG0 (1 << 9) /* clear signal 0 */
+#define SP_SET_SIG0 (1 << 10) /* set signal 0 */
+#define SP_CLR_SIG1 (1 << 11) /* clear signal 1 */
+#define SP_SET_SIG1 (1 << 12) /* set signal 1 */
+#define SP_CLR_SIG2 (1 << 13) /* clear signal 2 */
+#define SP_SET_SIG2 (1 << 14) /* set signal 2 */
+#define SP_CLR_SIG3 (1 << 15) /* clear signal 3 */
+#define SP_SET_SIG3 (1 << 16) /* set signal 3 */
+#define SP_CLR_SIG4 (1 << 17) /* clear signal 4 */
+#define SP_SET_SIG4 (1 << 18) /* set signal 4 */
+#define SP_CLR_SIG5 (1 << 19) /* clear signal 5 */
+#define SP_SET_SIG5 (1 << 20) /* set signal 5 */
+#define SP_CLR_SIG6 (1 << 21) /* clear signal 6 */
+#define SP_SET_SIG6 (1 << 22) /* set signal 6 */
+#define SP_CLR_SIG7 (1 << 23) /* clear signal 7 */
+#define SP_SET_SIG7 (1 << 24) /* set signal 7 */
/*
* SP_STATUS_REG: read bits
@@ -238,22 +238,22 @@
#define SP_SET_CPUSIGNAL SP_SET_SIG4
#define SP_STATUS_CPUSIGNAL SP_STATUS_SIG4
-// SP IMEM BIST REG (R/W): [6:0] BIST status bits; see below for detail
+/* SP IMEM BIST REG (R/W): [6:0] BIST status bits; see below for detail */
#define SP_IBIST_REG 0x04080004
/*
* SP_IBIST_REG: write bits
*/
-#define SP_IBIST_CHECK (1 << 0) // BIST check
-#define SP_IBIST_GO (1 << 1) // BIST go
-#define SP_IBIST_CLEAR (1 << 2) // BIST clear
+#define SP_IBIST_CHECK (1 << 0) /* BIST check */
+#define SP_IBIST_GO (1 << 1) /* BIST go */
+#define SP_IBIST_CLEAR (1 << 2) /* BIST clear */
/*
* SP_BIST_REG: read bits
* First 2 bits are same as in write mode
*/
#define SP_IBIST_DONE (1 << 2)
-#define SP_IBIST_FAILED 0x78 // bits [6:3], BIST fail
+#define SP_IBIST_FAILED 0x78 /* bits [6:3], BIST fail */
/**
@@ -261,28 +261,28 @@
*/
#define DPC_BASE_REG 0x04100000
-// DP CMD DMA start (R/W): [23:0] DMEM/RDRAM start address
+/* DP CMD DMA start (R/W): [23:0] DMEM/RDRAM start address */
#define DPC_START_REG (DPC_BASE_REG + 0x00)
-// DP CMD DMA end (R/W): [23:0] DMEM/RDRAM end address
+/* DP CMD DMA end (R/W): [23:0] DMEM/RDRAM end address */
#define DPC_END_REG (DPC_BASE_REG + 0x04)
-// DP CMD DMA end (R): [23:0] DMEM/RDRAM current address
+/* DP CMD DMA end (R): [23:0] DMEM/RDRAM current address */
#define DPC_CURRENT_REG (DPC_BASE_REG + 0x08)
-// DP CMD status (R/W): [9:0] valid bits - see below for definitions
+/* DP CMD status (R/W): [9:0] valid bits - see below for definitions */
#define DPC_STATUS_REG (DPC_BASE_REG + 0x0C)
-// DP clock counter (R): [23:0] clock counter
+/* DP clock counter (R): [23:0] clock counter */
#define DPC_CLOCK_REG (DPC_BASE_REG + 0x10)
-// DP buffer busy counter (R): [23:0] clock counter
+/* DP buffer busy counter (R): [23:0] clock counter */
#define DPC_BUFBUSY_REG (DPC_BASE_REG + 0x14)
-// DP pipe busy counter (R): [23:0] clock counter
+/* DP pipe busy counter (R): [23:0] clock counter */
#define DPC_PIPEBUSY_REG (DPC_BASE_REG + 0x18)
-// DP TMEM load counter (R): [23:0] clock counter
+/* DP TMEM load counter (R): [23:0] clock counter */
#define DPC_TMEM_REG (DPC_BASE_REG + 0x1C)
/*
@@ -320,16 +320,16 @@
*/
#define DPS_BASE_REG 0x04200000
-// DP tmem built-in self-test (R/W): [10:0] BIST status bits
+/* DP tmem built-in self-test (R/W): [10:0] BIST status bits */
#define DPS_TBIST_REG (DPS_BASE_REG + 0x00)
-// DP span test mode (R/W): [0] Span buffer test access enable
+/* DP span test mode (R/W): [0] Span buffer test access enable */
#define DPS_TEST_MODE_REG (DPS_BASE_REG + 0x04)
-// DP span buffer test address (R/W): [6:0] bits
+/* DP span buffer test address (R/W): [6:0] bits */
#define DPS_BUFTEST_ADDR_REG (DPS_BASE_REG + 0x08)
-// DP span buffer test data (R/W): [31:0] span buffer data
+/* DP span buffer test data (R/W): [31:0] span buffer data */
#define DPS_BUFTEST_DATA_REG (DPS_BASE_REG + 0x0C)
/*
@@ -344,7 +344,7 @@
* First 2 bits are same as in write mode
*/
#define DPS_TBIST_DONE (1 << 2)
-#define DPS_TBIST_FAILED 0x7F8 // bits [10:3], BIST fail
+#define DPS_TBIST_FAILED 0x7F8 /* bits [10:3], BIST fail */
/**
@@ -352,22 +352,22 @@
*/
#define MI_BASE_REG 0x04300000
-// MI init mode (W): [11] clear DP interrupt, [9/10] clear/set ebus test mode
-// [8] set init mode, [7] clear init mode, [6:0] init length
-// (R): [8] ebus test mode, [7] init mode, [6:0] init length
+/* MI init mode (W): [11] clear DP interrupt, [9/10] clear/set ebus test mode */
+/* [8] set init mode, [7] clear init mode, [6:0] init length */
+/* (R): [8] ebus test mode, [7] init mode, [6:0] init length */
#define MI_INIT_MODE_REG (MI_BASE_REG + 0x00)
#define MI_MODE_REG MI_INIT_MODE_REG
/*
* MI_MODE_REG: write bits
*/
-#define MI_CLR_INIT (1 << 7) // clear init mode
-#define MI_SET_INIT (1 << 8) // set init mode
-#define MI_CLR_EBUS (1 << 9) // clear ebus test
-#define MI_SET_EBUS (1 << 10) // set ebus test mode
-#define MI_CLR_DP_INTR (1 << 11) // clear dp interrupt
-#define MI_CLR_RDRAM (1 << 12) // clear RDRAM reg
-#define MI_SET_RDRAM (1 << 13) // set RDRAM reg mode
+#define MI_CLR_INIT (1 << 7) /* clear init mode */
+#define MI_SET_INIT (1 << 8) /* set init mode */
+#define MI_CLR_EBUS (1 << 9) /* clear ebus test */
+#define MI_SET_EBUS (1 << 10) /* set ebus test mode */
+#define MI_CLR_DP_INTR (1 << 11) /* clear dp interrupt */
+#define MI_CLR_RDRAM (1 << 12) /* clear RDRAM reg */
+#define MI_SET_RDRAM (1 << 13) /* set RDRAM reg mode */
/*
* MI_MODE_REG: read bits
@@ -376,52 +376,52 @@
#define MI_MODE_EBUS (1 << 8) /* ebus test mode */
#define MI_MODE_RDRAM (1 << 9) /* RDRAM reg mode */
-// MI version (R): [31:24] rsp, [23:16] rdp, [15:8] rac, [7:0] io
+/* MI version (R): [31:24] rsp, [23:16] rdp, [15:8] rac, [7:0] io */
#define MI_VERSION_REG (MI_BASE_REG + 0x04)
#define MI_NOOP_REG MI_VERSION_REG
-// MI interrupt (R): [5:0] valid bits - see below for bit patterns
+/* MI interrupt (R): [5:0] valid bits - see below for bit patterns */
#define MI_INTR_REG (MI_BASE_REG + 0x08)
-// MI interrupt mask (R): [5:0] valid bits - see below for bit patterns
-// (W): [11:0] valid bits - see below for bit patterns
+/* MI interrupt mask (R): [5:0] valid bits - see below for bit patterns */
+/* (W): [11:0] valid bits - see below for bit patterns */
#define MI_INTR_MASK_REG (MI_BASE_REG + 0x0C)
/*
* MI_INTR_REG: read bits
*/
-#define MI_INTR_SP (1 << 0) // SP intr
-#define MI_INTR_SI (1 << 1) // SI intr
-#define MI_INTR_AI (1 << 2) // AI intr
-#define MI_INTR_VI (1 << 3) // VI intr
-#define MI_INTR_PI (1 << 4) // PI intr
-#define MI_INTR_DP (1 << 5) // DP intr
+#define MI_INTR_SP (1 << 0) /* SP intr */
+#define MI_INTR_SI (1 << 1) /* SI intr */
+#define MI_INTR_AI (1 << 2) /* AI intr */
+#define MI_INTR_VI (1 << 3) /* VI intr */
+#define MI_INTR_PI (1 << 4) /* PI intr */
+#define MI_INTR_DP (1 << 5) /* DP intr */
/*
* MI_INTR_MASK_REG: write bits
*/
-#define MI_INTR_MASK_CLR_SP (1 << 0) // clear SP mask
-#define MI_INTR_MASK_SET_SP (1 << 1) // set SP mask
-#define MI_INTR_MASK_CLR_SI (1 << 2) // clear SI mask
-#define MI_INTR_MASK_SET_SI (1 << 3) // set SI mask
-#define MI_INTR_MASK_CLR_AI (1 << 4) // clear AI mask
-#define MI_INTR_MASK_SET_AI (1 << 5) // set AI mask
-#define MI_INTR_MASK_CLR_VI (1 << 6) // clear VI mask
-#define MI_INTR_MASK_SET_VI (1 << 7) // set VI mask
-#define MI_INTR_MASK_CLR_PI (1 << 8) // clear PI mask
-#define MI_INTR_MASK_SET_PI (1 << 9) // set PI mask
-#define MI_INTR_MASK_CLR_DP (1 << 10) // clear DP mask
-#define MI_INTR_MASK_SET_DP (1 << 11) // set DP mask
+#define MI_INTR_MASK_CLR_SP (1 << 0) /* clear SP mask */
+#define MI_INTR_MASK_SET_SP (1 << 1) /* set SP mask */
+#define MI_INTR_MASK_CLR_SI (1 << 2) /* clear SI mask */
+#define MI_INTR_MASK_SET_SI (1 << 3) /* set SI mask */
+#define MI_INTR_MASK_CLR_AI (1 << 4) /* clear AI mask */
+#define MI_INTR_MASK_SET_AI (1 << 5) /* set AI mask */
+#define MI_INTR_MASK_CLR_VI (1 << 6) /* clear VI mask */
+#define MI_INTR_MASK_SET_VI (1 << 7) /* set VI mask */
+#define MI_INTR_MASK_CLR_PI (1 << 8) /* clear PI mask */
+#define MI_INTR_MASK_SET_PI (1 << 9) /* set PI mask */
+#define MI_INTR_MASK_CLR_DP (1 << 10) /* clear DP mask */
+#define MI_INTR_MASK_SET_DP (1 << 11) /* set DP mask */
/*
* MI_INTR_MASK_REG: read bits
*/
-#define MI_INTR_MASK_SP (1 << 0) // SP intr mask
-#define MI_INTR_MASK_SI (1 << 1) // SI intr mask
-#define MI_INTR_MASK_AI (1 << 2) // AI intr mask
-#define MI_INTR_MASK_VI (1 << 3) // VI intr mask
-#define MI_INTR_MASK_PI (1 << 4) // PI intr mask
-#define MI_INTR_MASK_DP (1 << 5) // DP intr mask
+#define MI_INTR_MASK_SP (1 << 0) /* SP intr mask */
+#define MI_INTR_MASK_SI (1 << 1) /* SI intr mask */
+#define MI_INTR_MASK_AI (1 << 2) /* AI intr mask */
+#define MI_INTR_MASK_VI (1 << 3) /* VI intr mask */
+#define MI_INTR_MASK_PI (1 << 4) /* PI intr mask */
+#define MI_INTR_MASK_DP (1 << 5) /* DP intr mask */
/**
@@ -454,90 +454,90 @@
#define VI_CONTROL_REG (VI_BASE_REG + 0x00)
#define VI_STATUS_REG VI_CONTROL_REG
-// VI origin (R/W): [23:0] frame buffer origin in bytes
+/* VI origin (R/W): [23:0] frame buffer origin in bytes */
#define VI_ORIGIN_REG (VI_BASE_REG + 0x04)
#define VI_DRAM_ADDR_REG VI_ORIGIN_REG
-// VI width (R/W): [11:0] frame buffer line width in pixels
+/* VI width (R/W): [11:0] frame buffer line width in pixels */
#define VI_WIDTH_REG (VI_BASE_REG + 0x08)
#define VI_H_WIDTH_REG VI_WIDTH_REG
-// VI vertical intr (R/W): [9:0] interrupt when current half-line = V_INTR
+/* VI vertical intr (R/W): [9:0] interrupt when current half-line = V_INTR */
#define VI_INTR_REG (VI_BASE_REG + 0x0C)
#define VI_V_INTR_REG VI_INTR_REG
-// VI current vertical line (R/W): [9:0] current half line, sampled once per
-// line (the lsb of V_CURRENT is constant within a field, and in interlaced
-// modes gives the field number - which is constant for non-interlaced modes)
-// - Any write to this register will clear interrupt line
+/* VI current vertical line (R/W): [9:0] current half line, sampled once per */
+/* line (the lsb of V_CURRENT is constant within a field, and in interlaced */
+/* modes gives the field number - which is constant for non-interlaced modes) */
+/* - Any write to this register will clear interrupt line */
#define VI_CURRENT_REG (VI_BASE_REG + 0x10)
#define VI_V_CURRENT_LINE_REG VI_CURRENT_REG
-// VI video timing (R/W): [29:20] start of color burst in pixels from h-sync
-// [19:16] vertical sync width in half lines,
-// [15: 8] color burst width in pixels,
-// [ 7: 0] horizontal sync width in pixels,
+/* VI video timing (R/W): [29:20] start of color burst in pixels from h-sync */
+/* [19:16] vertical sync width in half lines, */
+/* [15: 8] color burst width in pixels, */
+/* [ 7: 0] horizontal sync width in pixels, */
#define VI_BURST_REG (VI_BASE_REG + 0x14)
#define VI_TIMING_REG VI_BURST_REG
-// VI vertical sync (R/W): [9:0] number of half-lines per field
+/* VI vertical sync (R/W): [9:0] number of half-lines per field */
#define VI_V_SYNC_REG (VI_BASE_REG + 0x18)
-// VI horizontal sync (R/W): [20:16] a 5-bit leap pattern used for PAL only (h_sync_period)
-// [11: 0] total duration of a line in 1/4 pixel
+/* VI horizontal sync (R/W): [20:16] a 5-bit leap pattern used for PAL only (h_sync_period) */
+/* [11: 0] total duration of a line in 1/4 pixel */
#define VI_H_SYNC_REG (VI_BASE_REG + 0x1C)
-// VI horizontal sync leap (R/W): [27:16] identical to h_sync_period
-// [11: 0] identical to h_sync_period
+/* VI horizontal sync leap (R/W): [27:16] identical to h_sync_period */
+/* [11: 0] identical to h_sync_period */
#define VI_LEAP_REG (VI_BASE_REG + 0x20)
#define VI_H_SYNC_LEAP_REG VI_LEAP_REG
-// VI horizontal video (R/W): [25:16] start of active video in screen pixels
-// [ 9: 0] end of active video in screen pixels
+/* VI horizontal video (R/W): [25:16] start of active video in screen pixels */
+/* [ 9: 0] end of active video in screen pixels */
#define VI_H_START_REG (VI_BASE_REG + 0x24)
#define VI_H_VIDEO_REG VI_H_START_REG
-// VI vertical video (R/W): [25:16] start of active video in screen half-lines
-// [ 9: 0] end of active video in screen half-lines
+/* VI vertical video (R/W): [25:16] start of active video in screen half-lines */
+/* [ 9: 0] end of active video in screen half-lines */
#define VI_V_START_REG (VI_BASE_REG + 0x28)
#define VI_V_VIDEO_REG VI_V_START_REG
-// VI vertical burst (R/W): [25:16] start of color burst enable in half-lines
-// [ 9: 0] end of color burst enable in half-lines
+/* VI vertical burst (R/W): [25:16] start of color burst enable in half-lines */
+/* [ 9: 0] end of color burst enable in half-lines */
#define VI_V_BURST_REG (VI_BASE_REG + 0x2C)
-// VI x-scale (R/W): [27:16] horizontal subpixel offset (2.10 format)
-// [11: 0] 1/horizontal scale up factor (2.10 format)
+/* VI x-scale (R/W): [27:16] horizontal subpixel offset (2.10 format) */
+/* [11: 0] 1/horizontal scale up factor (2.10 format) */
#define VI_X_SCALE_REG (VI_BASE_REG + 0x30)
-// VI y-scale (R/W): [27:16] vertical subpixel offset (2.10 format)
-// [11: 0] 1/vertical scale up factor (2.10 format)
+/* VI y-scale (R/W): [27:16] vertical subpixel offset (2.10 format) */
+/* [11: 0] 1/vertical scale up factor (2.10 format) */
#define VI_Y_SCALE_REG (VI_BASE_REG + 0x34)
/*
* VI_CONTROL_REG: read bits
*/
-#define VI_CTRL_TYPE_16 0x00002 // [1:0] pixel size: 16 bit
-#define VI_CTRL_TYPE_32 0x00003 // [1:0] pixel size: 32 bit
-#define VI_CTRL_GAMMA_DITHER_ON 0x00004 // 2: default = on
-#define VI_CTRL_GAMMA_ON 0x00008 // 3: default = on
-#define VI_CTRL_DIVOT_ON 0x00010 // 4: default = on
-#define VI_CTRL_SERRATE_ON 0x00040 // 6: on if interlaced
-#define VI_CTRL_ANTIALIAS_MASK 0x00300 // [9:8] anti-alias mode
-#define VI_CTRL_ANTIALIAS_MODE_0 0x00000 // Bit [9:8] anti-alias mode: AA enabled, resampling enabled, always fetch extra lines
-#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 // Bit [9:8] anti-alias mode: AA enabled, resampling enabled, fetch extra lines as-needed
-#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 // Bit [9:8] anti-alias mode: AA disabled, resampling enabled, operate as if everything is covered
-#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 // Bit [9:8] anti-alias mode: AA disabled, resampling disabled, replicate pixels
-#define VI_CTRL_PIXEL_ADV_MASK 0x0F000 // [15:12] pixel advance mode
-#define VI_CTRL_PIXEL_ADV_3 0x03000 // Bit [15:12] pixel advance mode: Always 3 on N64
-#define VI_CTRL_DITHER_FILTER_ON 0x10000 // 16: dither-filter mode
+#define VI_CTRL_TYPE_16 0x00002 /* [1:0] pixel size: 16 bit */
+#define VI_CTRL_TYPE_32 0x00003 /* [1:0] pixel size: 32 bit */
+#define VI_CTRL_GAMMA_DITHER_ON 0x00004 /* 2: default = on */
+#define VI_CTRL_GAMMA_ON 0x00008 /* 3: default = on */
+#define VI_CTRL_DIVOT_ON 0x00010 /* 4: default = on */
+#define VI_CTRL_SERRATE_ON 0x00040 /* 6: on if interlaced */
+#define VI_CTRL_ANTIALIAS_MASK 0x00300 /* [9:8] anti-alias mode */
+#define VI_CTRL_ANTIALIAS_MODE_0 0x00000 /* Bit [9:8] anti-alias mode: AA enabled, resampling enabled, always fetch extra lines */
+#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode: AA enabled, resampling enabled, fetch extra lines as-needed */
+#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode: AA disabled, resampling enabled, operate as if everything is covered */
+#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode: AA disabled, resampling disabled, replicate pixels */
+#define VI_CTRL_PIXEL_ADV_MASK 0x0F000 /* [15:12] pixel advance mode */
+#define VI_CTRL_PIXEL_ADV(n) (((n) << 12) & VI_CTRL_PIXEL_ADV_MASK) /* Bit [15:12] pixel advance mode: Always 3 on N64 */
+#define VI_CTRL_DITHER_FILTER_ON 0x10000 /* 16: dither-filter mode */
/*
* Possible video clocks (NTSC or PAL)
*/
-#define VI_NTSC_CLOCK 48681812 // Hz = 48.681812 MHz
-#define VI_PAL_CLOCK 49656530 // Hz = 49.656530 MHz
-#define VI_MPAL_CLOCK 48628316 // Hz = 48.628316 MHz
+#define VI_NTSC_CLOCK 48681812 /* Hz = 48.681812 MHz */
+#define VI_PAL_CLOCK 49656530 /* Hz = 49.656530 MHz */
+#define VI_MPAL_CLOCK 48628316 /* Hz = 48.628316 MHz */
/**
@@ -549,25 +549,25 @@
*/
#define AI_BASE_REG 0x04500000
-// AI DRAM address (W): [23:0] starting RDRAM address (8B-aligned)
+/* AI DRAM address (W): [23:0] starting RDRAM address (8B-aligned) */
#define AI_DRAM_ADDR_REG (AI_BASE_REG + 0x00)
-// AI length (R/W): [14:0] transfer length (v1.0) - Bottom 3 bits are ignored
-// [17:0] transfer length (v2.0) - Bottom 3 bits are ignored
+/* AI length (R/W): [14:0] transfer length (v1.0) - Bottom 3 bits are ignored */
+/* [17:0] transfer length (v2.0) - Bottom 3 bits are ignored */
#define AI_LEN_REG (AI_BASE_REG + 0x04)
-// AI control (W): [0] DMA enable - if LSB == 1, DMA is enabled
+/* AI control (W): [0] DMA enable - if LSB == 1, DMA is enabled */
#define AI_CONTROL_REG (AI_BASE_REG + 0x08)
/*
* AI_CONTROL_REG: write bits
*/
-#define AI_CONTROL_DMA_ON 1 // LSB = 1: DMA enable
-#define AI_CONTROL_DMA_OFF 0 // LSB = 1: DMA enable
+#define AI_CONTROL_DMA_ON 1 /* LSB = 1: DMA enable */
+#define AI_CONTROL_DMA_OFF 0 /* LSB = 1: DMA enable */
-// AI status (R): [31]/[0] ai_full (addr & len buffer full), [30] ai_busy
-// Note that a 1->0 transition in ai_full will set interrupt
-// (W): clear audio interrupt
+/* AI status (R): [31]/[0] ai_full (addr & len buffer full), [30] ai_busy */
+/* Note that a 1->0 transition in ai_full will set interrupt */
+/* (W): clear audio interrupt */
#define AI_STATUS_REG (AI_BASE_REG + 0x0C)
/*
@@ -576,23 +576,23 @@
#define AI_STATUS_FIFO_FULL (1 << 31)
#define AI_STATUS_DMA_BUSY (1 << 30)
-// AI DAC sample period register (W): [13:0] dac rate
-// - vid_clock/(dperiod + 1) is the DAC sample rate
-// - (dperiod + 1) >= 66 * (aclockhp + 1) must be true
+/* AI DAC sample period register (W): [13:0] dac rate */
+/* - vid_clock/(dperiod + 1) is the DAC sample rate */
+/* - (dperiod + 1) >= 66 * (aclockhp + 1) must be true */
#define AI_DACRATE_REG (AI_BASE_REG + 0x10)
-// DAC rate = video clock / audio frequency
-// - DAC rate >= (66 * Bit rate) must be true
-#define AI_MAX_DAC_RATE 16384 // 14-bit+1
+/* DAC rate = video clock / audio frequency */
+/* - DAC rate >= (66 * Bit rate) must be true */
+#define AI_MAX_DAC_RATE 16384 /* 14-bit+1 */
#define AI_MIN_DAC_RATE 132
-// AI bit rate (W): [3:0] bit rate (abus clock half period register - aclockhp)
-// - vid_clock/(2 * (aclockhp + 1)) is the DAC clock rate
-// - The abus clock stops if aclockhp is zero
+/* AI bit rate (W): [3:0] bit rate (abus clock half period register - aclockhp) */
+/* - vid_clock/(2 * (aclockhp + 1)) is the DAC clock rate */
+/* - The abus clock stops if aclockhp is zero */
#define AI_BITRATE_REG (AI_BASE_REG + 0x14)
-// Bit rate <= (DAC rate / 66)
-#define AI_MAX_BIT_RATE 16 // 4-bit+1
+/* Bit rate <= (DAC rate / 66) */
+#define AI_MAX_BIT_RATE 16 /* 4-bit+1 */
#define AI_MIN_BIT_RATE 2
/*
@@ -600,14 +600,14 @@
* max frequency = (video clock / min dac rate)
* min frequency = (video clock / max dac rate)
*/
-#define AI_NTSC_MAX_FREQ 368000 // 368 KHz
-#define AI_NTSC_MIN_FREQ 3000 // 3 KHz ~ 2971 Hz
+#define AI_NTSC_MAX_FREQ 368000 /* 368 KHz */
+#define AI_NTSC_MIN_FREQ 3000 /* 3 KHz ~ 2971 Hz */
-#define AI_PAL_MAX_FREQ 376000 // 376 KHz
-#define AI_PAL_MIN_FREQ 3050 // 3 KHz ~ 3031 Hz
+#define AI_PAL_MAX_FREQ 376000 /* 376 KHz */
+#define AI_PAL_MIN_FREQ 3050 /* 3 KHz ~ 3031 Hz */
-#define AI_MPAL_MAX_FREQ 368000 // 368 KHz
-#define AI_MPAL_MIN_FREQ 3000 // 3 KHz ~ 2968 Hz
+#define AI_MPAL_MAX_FREQ 368000 /* 368 KHz */
+#define AI_MPAL_MIN_FREQ 3000 /* 3 KHz ~ 2968 Hz */
/**
@@ -615,44 +615,44 @@
*/
#define PI_BASE_REG 0x04600000
-// PI DRAM address (R/W): [23:0] starting RDRAM address
+/* PI DRAM address (R/W): [23:0] starting RDRAM address */
#define PI_DRAM_ADDR_REG (PI_BASE_REG + 0x00)
-// PI pbus (cartridge) address (R/W): [31:0] starting AD16 address
+/* PI pbus (cartridge) address (R/W): [31:0] starting AD16 address */
#define PI_CART_ADDR_REG (PI_BASE_REG + 0x04)
-// PI read length (R/W): [23:0] read data length
+/* PI read length (R/W): [23:0] read data length */
#define PI_RD_LEN_REG (PI_BASE_REG + 0x08)
-// PI write length (R/W): [23:0] write data length
+/* PI write length (R/W): [23:0] write data length */
#define PI_WR_LEN_REG (PI_BASE_REG + 0x0C)
-// PI status (R): [3] interrupt flag, [2] error, [1] IO busy, [0] DMA busy
-// (W): [1] clear intr, [0] reset controller (and abort current op)
+/* PI status (R): [3] interrupt flag, [2] error, [1] IO busy, [0] DMA busy */
+/* (W): [1] clear intr, [0] reset controller (and abort current op) */
#define PI_STATUS_REG (PI_BASE_REG + 0x10)
-// PI dom1 latency (R/W): [7:0] domain 1 device latency
+/* PI dom1 latency (R/W): [7:0] domain 1 device latency */
#define PI_BSD_DOM1_LAT_REG (PI_BASE_REG + 0x14)
-// PI dom1 pulse width (R/W): [7:0] domain 1 device R/W strobe pulse width
+/* PI dom1 pulse width (R/W): [7:0] domain 1 device R/W strobe pulse width */
#define PI_BSD_DOM1_PWD_REG (PI_BASE_REG + 0x18)
-// PI dom1 page size (R/W): [3:0] domain 1 device page size
+/* PI dom1 page size (R/W): [3:0] domain 1 device page size */
#define PI_BSD_DOM1_PGS_REG (PI_BASE_REG + 0x1C)
-// PI dom1 release (R/W): [1:0] domain 1 device R/W release duration
+/* PI dom1 release (R/W): [1:0] domain 1 device R/W release duration */
#define PI_BSD_DOM1_RLS_REG (PI_BASE_REG + 0x20)
-// PI dom2 latency (R/W): [7:0] domain 2 device latency
+/* PI dom2 latency (R/W): [7:0] domain 2 device latency */
#define PI_BSD_DOM2_LAT_REG (PI_BASE_REG + 0x24)
-// PI dom2 pulse width (R/W): [7:0] domain 2 device R/W strobe pulse width
+/* PI dom2 pulse width (R/W): [7:0] domain 2 device R/W strobe pulse width */
#define PI_BSD_DOM2_PWD_REG (PI_BASE_REG + 0x28)
-// PI dom2 page size (R/W): [3:0] domain 2 device page size
+/* PI dom2 page size (R/W): [3:0] domain 2 device page size */
#define PI_BSD_DOM2_PGS_REG (PI_BASE_REG + 0x2C)
-// PI dom2 release (R/W): [1:0] domain 2 device R/W release duration
+/* PI dom2 release (R/W): [1:0] domain 2 device R/W release duration */
#define PI_BSD_DOM2_RLS_REG (PI_BASE_REG + 0x30)
#define PI_DOMAIN1_REG PI_BSD_DOM1_LAT_REG
@@ -719,30 +719,30 @@
*/
#define RI_BASE_REG 0x04700000
-// RI mode (R/W): [3] stop R active, [2] stop T active, [1:0] operating mode
+/* RI mode (R/W): [3] stop R active, [2] stop T active, [1:0] operating mode */
#define RI_MODE_REG (RI_BASE_REG + 0x00)
-// RI config (R/W): [6] current control enable, [5:0] current control input
+/* RI config (R/W): [6] current control enable, [5:0] current control input */
#define RI_CONFIG_REG (RI_BASE_REG + 0x04)
-// RI current load (W): [] any write updates current control register
+/* RI current load (W): [] any write updates current control register */
#define RI_CURRENT_LOAD_REG (RI_BASE_REG + 0x08)
-// RI select (R/W): [3:2] receive select, [1:0] transmit select
+/* RI select (R/W): [3:2] receive select, [1:0] transmit select */
#define RI_SELECT_REG (RI_BASE_REG + 0x0C)
-// RI refresh (R/W): [16] refresh bank, [17] refresh enable, [18] refresh optimize
-// [7:0] clean refresh delay, [15:8] dirty refresh dela
+/* RI refresh (R/W): [16] refresh bank, [17] refresh enable, [18] refresh optimize */
+/* [7:0] clean refresh delay, [15:8] dirty refresh dela */
#define RI_REFRESH_REG (RI_BASE_REG + 0x10)
#define RI_COUNT_REG RI_REFRESH_REG
-// RI latency (R/W): [3:0] DMA latency/overlap
+/* RI latency (R/W): [3:0] DMA latency/overlap */
#define RI_LATENCY_REG (RI_BASE_REG + 0x14)
-// RI error (R): [1] ack error, [0] nack error
+/* RI error (R): [1] ack error, [0] nack error */
#define RI_RERROR_REG (RI_BASE_REG + 0x18)
-// RI error (W): [] any write clears all error bits
+/* RI error (W): [] any write clears all error bits */
#define RI_WERROR_REG (RI_BASE_REG + 0x1C)
@@ -751,27 +751,27 @@
*/
#define SI_BASE_REG 0x04800000
-// SI DRAM address (R/W): [23:0] starting RDRAM address
+/* SI DRAM address (R/W): [23:0] starting RDRAM address */
#define SI_DRAM_ADDR_REG (SI_BASE_REG + 0x00)
-// SI address read 64B (W): [] write begins a 64B DMA write PIF RAM -> RDRAM
+/* SI address read 64B (W): [] write begins a 64B DMA write PIF RAM -> RDRAM */
#define SI_PIF_ADDR_RD64B_REG (SI_BASE_REG + 0x04)
-// Address SI_BASE_REG + (0x08, 0x0C, 0x14) are reserved
+/* Address SI_BASE_REG + (0x08, 0x0C, 0x14) are reserved */
-// SI address write 64B (W): [] write begins a 64B DMA read RDRAM -> PIF RAM */
+/* SI address write 64B (W): [] write begins a 64B DMA read RDRAM -> PIF RAM */
#define SI_PIF_ADDR_WR64B_REG (SI_BASE_REG + 0x10)
-// SI status (R/W): [] any write clears interrupt
+/* SI status (R/W): [] any write clears interrupt */
#define SI_STATUS_REG (SI_BASE_REG + 0x18)
/*
* SI_STATUS_REG: read bits
*/
-#define SI_STATUS_DMA_BUSY (1 << 0) // DMA in progress
-#define SI_STATUS_RD_BUSY (1 << 1) // IO access in progress
-#define SI_STATUS_DMA_ERROR (1 << 3) // Overlapping DMA requests
-#define SI_STATUS_INTERRUPT (1 << 12) // Interrupt is set
+#define SI_STATUS_DMA_BUSY (1 << 0) /* DMA in progress */
+#define SI_STATUS_RD_BUSY (1 << 1) /* IO access in progress */
+#define SI_STATUS_DMA_ERROR (1 << 3) /* Overlapping DMA requests */
+#define SI_STATUS_INTERRUPT (1 << 12) /* Interrupt is set */
/**
@@ -780,13 +780,13 @@
#define GIO_BASE_REG 0x18000000
-// Game to Host Interrupt
+/* Game to Host Interrupt */
#define GIO_GIO_INTR_REG (GIO_BASE_REG+0x000)
-// Game to Host SYNC
+/* Game to Host SYNC */
#define GIO_GIO_SYNC_REG (GIO_BASE_REG+0x400)
-// Host to Game Interrupt
+/* Host to Game Interrupt */
#define GIO_CART_INTR_REG (GIO_BASE_REG+0x800)
diff --git a/include/ultra64/regdef.h b/include/ultra64/regdef.h
new file mode 100644
index 0000000000..a3b2832180
--- /dev/null
+++ b/include/ultra64/regdef.h
@@ -0,0 +1,164 @@
+#ifndef REGDEF_H
+#define REGDEF_H
+
+#ifdef __GNUC__
+#define _MIPS_SIM_ABI32 _ABIO32
+#define _MIPS_SIM_NABI32 _ABIN32
+#define _MIPS_SIM_ABI64 _ABI64
+#endif
+
+#if (_MIPS_SIM == _MIPS_SIM_ABI32)
+#define zero $0
+#define AT $at
+#define v0 $2
+#define v1 $3
+#define a0 $4
+#define a1 $5
+#define a2 $6
+#define a3 $7
+#define t0 $8
+#define t1 $9
+#define t2 $10
+#define t3 $11
+#define t4 $12
+#define ta0 $12
+#define t5 $13
+#define ta1 $13
+#define t6 $14
+#define ta2 $14
+#define t7 $15
+#define ta3 $15
+#define s0 $16
+#define s1 $17
+#define s2 $18
+#define s3 $19
+#define s4 $20
+#define s5 $21
+#define s6 $22
+#define s7 $23
+#define t8 $24
+#define t9 $25
+#define jp $25
+#define k0 $26
+#define k1 $27
+#define gp $28
+#define sp $29
+#define fp $30
+#define s8 $30
+#define ra $31
+#endif
+
+#if (_MIPS_SIM == _MIPS_SIM_ABI64)
+#define zero $0
+#define AT $at
+#define v0 $2
+#define v1 $3
+#define a0 $4
+#define a1 $5
+#define a2 $6
+#define a3 $7
+#define a4 $8
+#define ta0 $8
+#define a5 $9
+#define ta1 $9
+#define a6 $10
+#define ta2 $10
+#define a7 $11
+#define ta3 $11
+#define t0 $12
+#define t1 $13
+#define t2 $14
+#define t3 $15
+#define s0 $16
+#define s1 $17
+#define s2 $18
+#define s3 $19
+#define s4 $20
+#define s5 $21
+#define s6 $22
+#define s7 $23
+#define t8 $24
+#define t9 $25
+#define jp $25
+#define k0 $26
+#define k1 $27
+#define gp $28
+#define sp $29
+#define fp $30
+#define s8 $30
+#define ra $31
+#endif
+
+#if (_MIPS_SIM == _MIPS_SIM_ABI32)
+#define fv0 $f0
+#define fv0f $f1
+#define fv1 $f2
+#define fv1f $f3
+#define fa0 $f12
+#define fa0f $f13
+#define fa1 $f14
+#define fa1f $f15
+#define ft0 $f4
+#define ft0f $f5
+#define ft1 $f6
+#define ft1f $f7
+#define ft2 $f8
+#define ft2f $f9
+#define ft3 $f10
+#define ft3f $f11
+#define ft4 $f16
+#define ft4f $f17
+#define ft5 $f18
+#define ft5f $f19
+#define fs0 $f20
+#define fs0f $f21
+#define fs1 $f22
+#define fs1f $f23
+#define fs2 $f24
+#define fs2f $f25
+#define fs3 $f26
+#define fs3f $f27
+#define fs4 $f28
+#define fs4f $f29
+#define fs5 $f30
+#define fs5f $f31
+#endif
+
+#if (_MIPS_SIM == _MIPS_SIM_ABI64)
+#define fv0 $f0
+#define fv1 $f2
+#define fa0 $f12
+#define fa1 $f13
+#define fa2 $f14
+#define fa3 $f15
+#define fa4 $f16
+#define fa5 $f17
+#define fa6 $f18
+#define fa7 $f19
+#define ft0 $f4
+#define ft1 $f5
+#define ft2 $f6
+#define ft3 $f7
+#define ft4 $f8
+#define ft5 $f9
+#define ft6 $f10
+#define ft7 $f11
+#define ft8 $f20
+#define ft9 $f21
+#define ft10 $f22
+#define ft11 $f23
+#define ft12 $f1
+#define ft13 $f3
+#define fs0 $f24
+#define fs1 $f25
+#define fs2 $f26
+#define fs3 $f27
+#define fs4 $f28
+#define fs5 $f29
+#define fs6 $f30
+#define fs7 $f31
+#endif
+
+#define fcr31 $31
+
+#endif
diff --git a/include/ultra64/thread.h b/include/ultra64/thread.h
index 813fefaa97..3c2733f150 100644
--- a/include/ultra64/thread.h
+++ b/include/ultra64/thread.h
@@ -73,7 +73,7 @@ typedef struct __OSThreadTail {
#else
-// OSThread struct member offsets
+/* OSThread struct member offsets */
#define THREAD_NEXT 0x00
#define THREAD_PRI 0x04
diff --git a/include/ultra64/viint.h b/include/ultra64/viint.h
index 6fbdb023df..2df9936405 100644
--- a/include/ultra64/viint.h
+++ b/include/ultra64/viint.h
@@ -35,5 +35,12 @@
#define ORIGIN(v) (v)
#define VINTR(v) (v)
#define HSTART(start, end) START(start, end)
+#define VSTART(start, end) START(start, end)
+
+#ifdef BBPLAYER
+#define VI_CTRL_PIXEL_ADV_DEFAULT VI_CTRL_PIXEL_ADV(1)
+#else
+#define VI_CTRL_PIXEL_ADV_DEFAULT VI_CTRL_PIXEL_ADV(3)
+#endif
#endif
diff --git a/include/variables.h b/include/variables.h
index 7ba7a69ef0..f5f4599e7a 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -9,11 +9,24 @@ extern Mtx D_01000000;
extern void* osRomBase;
extern s32 osTvType;
+extern u32 osRomType;
+extern u32 osVersion;
extern s32 osResetType;
extern s32 osCicId;
extern u32 osMemSize;
extern u8 osAppNMIBuffer[0x40];
+extern u32 __osBbIsBb;
+extern u32 __osBbEepromSize;
+extern u32 __osBbPakSize;
+extern u32 __osBbFlashSize;
+extern u32 __osBbEepromAddress;
+extern u32 __osBbPakAddress[4];
+extern u32 __osBbFlashAddress;
+extern u32 __osBbSramSize;
+extern u32 __osBbSramAddress;
+extern u32 __osBbHackFlags;
+
extern s8 D_80009430;
extern vu8 gViConfigBlack;
extern u8 gViConfigAdditionalScanLines;
@@ -133,8 +146,8 @@ extern s32 gSystemArenaLogSeverity;
extern u8 __osPfsInodeCacheBank;
extern s32 __osPfsLastChannel;
-extern const TempoData gTempoData;
-extern const AudioHeapInitSizes gAudioHeapInitSizes;
+extern TempoData gTempoData;
+extern AudioHeapInitSizes gAudioHeapInitSizes;
extern s16 gOcarinaSongItemMap[];
extern AudioTable gSoundFontTable;
extern u8 gSequenceFontTable[];
diff --git a/include/versions.h b/include/versions.h
index 96ae716f06..620b27999e 100644
--- a/include/versions.h
+++ b/include/versions.h
@@ -15,6 +15,7 @@
#define GC_EU 11
#define GC_EU_MQ 12
#define GC_JP_CE 13
+#define IQUE_CN 14
// NTSC/PAL
#if OOT_VERSION == PAL_1_0 || OOT_VERSION == PAL_1_1 || OOT_VERSION == GC_EU || OOT_VERSION == GC_EU_MQ || OOT_VERSION == GC_EU_MQ_DBG
diff --git a/include/z64audio.h b/include/z64audio.h
index 86e2860db6..d60a6aaeb7 100644
--- a/include/z64audio.h
+++ b/include/z64audio.h
@@ -201,11 +201,9 @@ typedef struct AdpcmBookHeader {
* The procedure used to design the codeBook is based on an adaptive clustering algorithm.
* The size of the codeBook is (8 * order * numPredictors) and is 8-byte aligned
*/
-typedef s16 AdpcmBookData[];
-
typedef struct AdpcmBook {
/* 0x00 */ AdpcmBookHeader header;
- /* 0x08 */ AdpcmBookData book; // size 8 * order * numPredictors. 8-byte aligned
+ /* 0x08 */ s16 book[1]; // size 8 * order * numPredictors. 8-byte aligned
} AdpcmBook; // size >= 0x8
typedef struct Sample {
diff --git a/include/z64save.h b/include/z64save.h
index c31d144557..b52e08ada5 100644
--- a/include/z64save.h
+++ b/include/z64save.h
@@ -465,6 +465,17 @@ typedef enum LinkAge {
* SaveContext.eventChkInf
*/
+#define EVENTCHKINF_INDEX(flag) ((flag) >> 4)
+#define EVENTCHKINF_MASK(flag) (1 << ((flag) & 0xF))
+
+#define GET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX(flag)] & EVENTCHKINF_MASK(flag))
+#define SET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX(flag)] |= EVENTCHKINF_MASK(flag))
+#define CLEAR_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX(flag)] &= ~EVENTCHKINF_MASK(flag))
+
+// EVENTCHKINF 0x00-0x0F
+#define EVENTCHKINF_INDEX_0 0
+#define EVENTCHKINF_00_UNUSED 0x00 // flag is set in the debug save, but has no functionality
+#define EVENTCHKINF_01_UNUSED 0x01 // flag is set in the debug save, but has no functionality
#define EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS 0x02
#define EVENTCHKINF_03 0x03
#define EVENTCHKINF_04 0x04
@@ -508,11 +519,9 @@ typedef enum LinkAge {
#define EVENTCHKINF_3B 0x3B
#define EVENTCHKINF_DEFEATED_NABOORU_KNUCKLE 0x3C
-// 0x40
-#define EVENTCHKINF_40_INDEX 4
-#define EVENTCHKINF_40_SHIFT 0
-#define EVENTCHKINF_40_MASK (1 << EVENTCHKINF_40_SHIFT)
-#define EVENTCHKINF_40 ((EVENTCHKINF_40_INDEX << 4) | EVENTCHKINF_40_SHIFT)
+// EVENTCHKINF 0x40
+#define EVENTCHKINF_INDEX_40 EVENTCHKINF_INDEX(EVENTCHKINF_40)
+#define EVENTCHKINF_40 0x40
#define EVENTCHKINF_41 0x41
#define EVENTCHKINF_42 0x42
@@ -541,11 +550,9 @@ typedef enum LinkAge {
#define EVENTCHKINF_RESTORED_LAKE_HYLIA 0x69
#define EVENTCHKINF_TALON_WOKEN_IN_KAKARIKO 0x6A
-// 0x6B
-#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX 6
-#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT 11
-#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_MASK (1 << EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT)
-#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO ((EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX << 4) | EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT)
+// EVENTCHKINF 0x6B
+#define EVENTCHKINF_INDEX_TALON_RETURNED_FROM_KAKARIKO EVENTCHKINF_INDEX(EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO)
+#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO 0x6B
#define EVENTCHKINF_6E 0x6E
#define EVENTCHKINF_6F 0x6F
@@ -565,19 +572,39 @@ typedef enum LinkAge {
#define EVENTCHKINF_PAID_BACK_SPOOKY_MASK 0x8E
#define EVENTCHKINF_PAID_BACK_BUNNY_HOOD 0x8F
-// 0x90-0x93
-// carpenters freed from the gerudo
-#define EVENTCHKINF_CARPENTERS_FREE_INDEX 9
-#define EVENTCHKINF_CARPENTERS_FREE_SHIFT(n) (0 + (n))
-#define EVENTCHKINF_CARPENTERS_FREE_MASK(n) (1 << EVENTCHKINF_CARPENTERS_FREE_SHIFT(n))
-#define EVENTCHKINF_CARPENTERS_FREE(n) ((EVENTCHKINF_CARPENTERS_FREE_INDEX << 4) | EVENTCHKINF_CARPENTERS_FREE_SHIFT(n))
-#define EVENTCHKINF_CARPENTERS_FREE_MASK_ALL (\
- EVENTCHKINF_CARPENTERS_FREE_MASK(0) \
- | EVENTCHKINF_CARPENTERS_FREE_MASK(1) \
- | EVENTCHKINF_CARPENTERS_FREE_MASK(2) \
- | EVENTCHKINF_CARPENTERS_FREE_MASK(3) )
-#define GET_EVENTCHKINF_CARPENTERS_FREE_ALL() \
- CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX], EVENTCHKINF_CARPENTERS_FREE_MASK_ALL)
+// EVENTCHKINF 0x90-0x93
+// Carpenters rescued from Gerudo Fortress
+#define EVENTCHKINF_INDEX_CARPENTERS_RESCUED 0x9
+#define EVENTCHKINF_CARPENTER_0_RESCUED 0x90
+#define EVENTCHKINF_CARPENTER_1_RESCUED 0x91
+#define EVENTCHKINF_CARPENTER_2_RESCUED 0x92
+#define EVENTCHKINF_CARPENTER_3_RESCUED 0x93
+
+#define EVENTCHKINF_CARPENTERS_ALL_RESCUED_MASK \
+ (EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_0_RESCUED) | EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_1_RESCUED) | \
+ EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_2_RESCUED) | EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_3_RESCUED))
+
+#define GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED() \
+ CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_RESCUED], \
+ EVENTCHKINF_CARPENTERS_ALL_RESCUED_MASK)
+
+#define GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED2() \
+ CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_RESCUED] & \
+ (EVENTCHKINF_CARPENTERS_ALL_RESCUED_MASK | 0xF0), \
+ EVENTCHKINF_CARPENTERS_ALL_RESCUED_MASK)
+
+#define ENDAIKU_CARPENTER_RESCUED_MASK(carpenterType) (1 << (carpenterType))
+
+#define ENDAIKU_IS_CARPENTER_RESCUED(carpenterType) \
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_RESCUED] & \
+ ENDAIKU_CARPENTER_RESCUED_MASK(carpenterType)
+
+#define ENDAIKU_SET_CARPENTER_RESCUED(carpenterType) \
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_RESCUED] |= \
+ ENDAIKU_CARPENTER_RESCUED_MASK((carpenterType))
+
+#define GET_EVENTCHKINF_CARPENTERS_RESCUED_FLAGS() \
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_RESCUED] & EVENTCHKINF_CARPENTERS_ALL_RESCUED_MASK
#define EVENTCHKINF_94 0x94
#define EVENTCHKINF_95 0x95
@@ -621,48 +648,35 @@ typedef enum LinkAge {
#define EVENTCHKINF_C8 0xC8
#define EVENTCHKINF_C9 0xC9
-// 0xD0-0xD6
-#define EVENTCHKINF_SONGS_FOR_FROGS_INDEX 13
-#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT 0
-#define EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT 1
-#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT 2
-#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT 3
-#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT 4
-#define EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT 5
-#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT 6
-#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_ZL_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SOT_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_ZL ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SOT ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT)
+// EVENTCHKINF 0xD0-0xD6
+#define EVENTCHKINF_INDEX_SONGS_FOR_FROGS EVENTCHKINF_INDEX(EVENTCHKINF_SONGS_FOR_FROGS_CHOIR)
+#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR 0xD0
+#define EVENTCHKINF_SONGS_FOR_FROGS_ZL 0xD1
+#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA 0xD2
+#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS 0xD3
+#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA 0xD4
+#define EVENTCHKINF_SONGS_FOR_FROGS_SOT 0xD5
+#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS 0xD6
-// 0xDA-0xDE
-#define EVENTCHKINF_DA_DB_DC_DD_DE_INDEX 13
-#define EVENTCHKINF_DA_MASK (1 << 10)
-#define EVENTCHKINF_DB_MASK (1 << 11)
-#define EVENTCHKINF_DC_MASK (1 << 12)
-#define EVENTCHKINF_DD_MASK (1 << 13)
-#define EVENTCHKINF_DE_MASK (1 << 14)
-
-
-#define GET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
-#define SET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
-#define CLEAR_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF)))
+// EVENTCHKINF 0xDA-0xDE
+#define EVENTCHKINF_INDEX_SKULLTULA_REWARD 0xD
+#define EVENTCHKINF_SKULLTULA_REWARD_10 0xDA
+#define EVENTCHKINF_SKULLTULA_REWARD_20 0xDB
+#define EVENTCHKINF_SKULLTULA_REWARD_30 0xDC
+#define EVENTCHKINF_SKULLTULA_REWARD_40 0xDD
+#define EVENTCHKINF_SKULLTULA_REWARD_50 0xDE
/*
* SaveContext.itemGetInf
*/
+#define ITEMGETINF_INDEX(flag) ((flag) >> 4)
+#define ITEMGETINF_MASK(flag) (1 << ((flag) & 0xF))
+
+#define GET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[ITEMGETINF_INDEX(flag)] & ITEMGETINF_MASK(flag))
+#define SET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[ITEMGETINF_INDEX(flag)] |= ITEMGETINF_MASK(flag))
+
#define ITEMGETINF_TALON_BOTTLE 0x02
#define ITEMGETINF_03 0x03
#define ITEMGETINF_04 0x04
@@ -685,17 +699,11 @@ typedef enum LinkAge {
#define ITEMGETINF_16 0x16
#define ITEMGETINF_17 0x17
-// 0x18-0x1A
-#define ITEMGETINF_18_19_1A_INDEX 1
-#define ITEMGETINF_18_SHIFT 8
-#define ITEMGETINF_19_SHIFT 9
-#define ITEMGETINF_1A_SHIFT 10
-#define ITEMGETINF_18_MASK (1 << ITEMGETINF_18_SHIFT)
-#define ITEMGETINF_19_MASK (1 << ITEMGETINF_19_SHIFT)
-#define ITEMGETINF_1A_MASK (1 << ITEMGETINF_1A_SHIFT)
-#define ITEMGETINF_18 ((ITEMGETINF_18_19_1A_INDEX << 4) | ITEMGETINF_18_SHIFT)
-#define ITEMGETINF_19 ((ITEMGETINF_18_19_1A_INDEX << 4) | ITEMGETINF_19_SHIFT)
-#define ITEMGETINF_1A ((ITEMGETINF_18_19_1A_INDEX << 4) | ITEMGETINF_1A_SHIFT)
+// ITEMGETINF 0x18-0x1A
+#define ITEMGETINF_INDEX_18_19_1A 1
+#define ITEMGETINF_18 0x18
+#define ITEMGETINF_19 0x19
+#define ITEMGETINF_1A 0x1A
#define ITEMGETINF_1B 0x1B
#define ITEMGETINF_1C 0x1C
@@ -721,14 +729,19 @@ typedef enum LinkAge {
#define ITEMGETINF_3F 0x3F
-#define GET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
-#define SET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
-
-
/*
* SaveContext.infTable
*/
+#define INFTABLE_INDEX(flag) ((flag) >> 4)
+#define INFTABLE_MASK(flag) (1 << ((flag) & 0xF))
+
+#define GET_INFTABLE(flag) (gSaveContext.save.info.infTable[INFTABLE_INDEX(flag)] & INFTABLE_MASK(flag))
+#define SET_INFTABLE(flag) (gSaveContext.save.info.infTable[INFTABLE_INDEX(flag)] |= INFTABLE_MASK(flag))
+#define CLEAR_INFTABLE(flag) (gSaveContext.save.info.infTable[INFTABLE_INDEX(flag)] &= ~INFTABLE_MASK(flag))
+
+// INFTABLE 0x0-0xF
+#define INFTABLE_INDEX_0 0
#define INFTABLE_00 0x00
#define INFTABLE_01 0x01
#define INFTABLE_03 0x03
@@ -856,18 +869,18 @@ typedef enum LinkAge {
#define INFTABLE_197 0x197
#define INFTABLE_198 0x198
-// 0x199-0x19F
-#define INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX 25
-#define INFTABLE_199_MASK (1 << 9)
-#define INFTABLE_19A_MASK (1 << 10)
-#define INFTABLE_19B_MASK (1 << 11)
-#define INFTABLE_19C_MASK (1 << 12)
-#define INFTABLE_19D_MASK (1 << 13)
-#define INFTABLE_19E_MASK (1 << 14)
-#define INFTABLE_19F_MASK (1 << 15)
+// INFTABLE 0x199-0x19F
+#define INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F 25
+#define INFTABLE_199 0x199
+#define INFTABLE_19A 0x19A
+#define INFTABLE_19B 0x19B
+#define INFTABLE_19C 0x19C
+#define INFTABLE_19D 0x19D
+#define INFTABLE_19E 0x19E
+#define INFTABLE_19F 0x19F
-// 0x1A0-0x1AF
-#define INFTABLE_1AX_INDEX 26
+// INFTABLE 0x1A0-0x1AF
+#define INFTABLE_INDEX_1AX 26
#define INFTABLE_1A0_SHIFT 0
#define INFTABLE_1A1_SHIFT 1
#define INFTABLE_1A2_SHIFT 2
@@ -881,24 +894,27 @@ typedef enum LinkAge {
#define INFTABLE_1AB_SHIFT 11
#define INFTABLE_1AD_SHIFT 13
-// 0x1D0-0x1DF
-#define INFTABLE_1DX_INDEX 29
-
-
-#define GET_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] & (1 << ((flag) & 0xF)))
-#define SET_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] |= (1 << ((flag) & 0xF)))
-#define CLEAR_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] &= ~(1 << ((flag) & 0xF)))
+// INFTABLE 0x1D0-0x1DF
+#define INFTABLE_INDEX_1DX INFTABLE_INDEX(INFTABLE_1D0)
+#define INFTABLE_1D0 0x1D0
/*
* SaveContext.eventInf
*/
+#define EVENTINF_INDEX(flag) ((flag) >> 4)
+#define EVENTINF_MASK(flag) (1 << ((flag) & 0xF))
+
+#define GET_EVENTINF(flag) (gSaveContext.eventInf[EVENTINF_INDEX(flag)] & EVENTINF_MASK(flag))
+#define SET_EVENTINF(flag) (gSaveContext.eventInf[EVENTINF_INDEX(flag)] |= EVENTINF_MASK(flag))
+#define CLEAR_EVENTINF(flag) (gSaveContext.eventInf[EVENTINF_INDEX(flag)] &= ~EVENTINF_MASK(flag))
+
// EVENTINF 0x00-0x0F
// Ingo Race, Lon Lon Ranch minigames, and Horseback Archery minigame flags
-#define EVENTINF_HORSES_INDEX 0
+#define EVENTINF_INDEX_HORSES 0
// EVENTINF 0x00-0x03 reserved for IngoRaceState
-#define EVENTINF_INGO_RACE_STATE_MASK (0xF << 0)
+#define EVENTINF_INGO_RACE_STATE_MASK (0xF << 0x00)
typedef enum IngoRaceState {
/* 0 */ INGO_RACE_STATE_OFFER_RENTAL,
/* 1 */ INGO_RACE_STATE_HORSE_RENTAL_PERIOD,
@@ -910,39 +926,35 @@ typedef enum IngoRaceState {
/* 7 */ INGO_RACE_STATE_REMATCH
} IngoRaceState;
-#define EVENTINF_INGO_RACE_HORSETYPE 4
-#define EVENTINF_INGO_RACE_HORSETYPE_MASK (1 << EVENTINF_INGO_RACE_HORSETYPE)
-#define EVENTINF_INGO_RACE_LOST_ONCE 5
-#define EVENTINF_INGO_RACE_LOST_ONCE_MASK (1 << EVENTINF_INGO_RACE_LOST_ONCE)
-#define EVENTINF_INGO_RACE_SECOND_RACE 6
-#define EVENTINF_INGO_RACE_SECOND_RACE_MASK (1 << EVENTINF_INGO_RACE_SECOND_RACE)
+#define EVENTINF_INGO_RACE_HORSETYPE 0x04
+#define EVENTINF_INGO_RACE_LOST_ONCE 0x05
+#define EVENTINF_INGO_RACE_SECOND_RACE 0x06
// Used in z_en_ta (Talon) to store Cucco game winning status
// and in z_en_ge1 (Gerudo) to store archery in-progress status
-#define EVENTINF_HORSES_08 8
+#define EVENTINF_HORSES_08 0x08
#define EVENTINF_CUCCO_GAME_WON EVENTINF_HORSES_08
// Used in z_en_ta (Talon) and z_en_ma3 (Malon) to store minigame finishing status
-#define EVENTINF_HORSES_0A 10
+#define EVENTINF_HORSES_0A 0x0A
#define EVENTINF_CUCCO_GAME_FINISHED EVENTINF_HORSES_0A
-#define EVENTINF_INGO_RACE_0F 15 // unused?
-#define EVENTINF_INGO_RACE_0F_MASK (1 << EVENTINF_INGO_RACE_0F)
+#define EVENTINF_INGO_RACE_0F 0x0F // unused?
// "InRaceSeq"
-#define GET_EVENTINF_INGO_RACE_STATE() (gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & EVENTINF_INGO_RACE_STATE_MASK)
+#define GET_EVENTINF_INGO_RACE_STATE() (gSaveContext.eventInf[EVENTINF_INDEX_HORSES] & EVENTINF_INGO_RACE_STATE_MASK)
#define SET_EVENTINF_INGO_RACE_STATE(v) \
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = \
- (gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & ~EVENTINF_INGO_RACE_STATE_MASK) | (v)
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] = \
+ (gSaveContext.eventInf[EVENTINF_INDEX_HORSES] & ~EVENTINF_INGO_RACE_STATE_MASK) | (v)
#define GET_EVENTINF_INGO_RACE_FLAG(flag) \
- ((gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & (1 << ((flag) & 0xF))) >> ((flag) & 0xF))
+ ((gSaveContext.eventInf[EVENTINF_INDEX_HORSES] & EVENTINF_MASK(flag)) >> ((flag) & 0xF))
#define SET_EVENTINF_INGO_RACE_FLAG(flag) \
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = \
- (gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & 0xFFFF) | (1 << ((flag) & 0xF))
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] = \
+ (gSaveContext.eventInf[EVENTINF_INDEX_HORSES] & 0xFFFF) | EVENTINF_MASK(flag)
#define WRITE_EVENTINF_INGO_RACE_FLAG(flag, v) \
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = \
- (gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & ~(1 << ((flag) & 0xF))) | ((v) << ((flag) & 0xF))
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] = \
+ (gSaveContext.eventInf[EVENTINF_INDEX_HORSES] & ~EVENTINF_MASK(flag)) | ((v) << ((flag) & 0xF))
#define GET_EVENTINF_INGO_RACE_HORSETYPE() GET_EVENTINF_INGO_RACE_FLAG(EVENTINF_INGO_RACE_HORSETYPE)
#define WRITE_EVENTINF_INGO_RACE_HORSETYPE(v) WRITE_EVENTINF_INGO_RACE_FLAG(EVENTINF_INGO_RACE_HORSETYPE, v)
@@ -953,7 +965,7 @@ typedef enum IngoRaceState {
#define EVENTINF_MARATHON_ACTIVE 0x10
// EVENTINF 0x20-0x24
-#define EVENTINF_20_21_22_23_24_INDEX 2
+#define EVENTINF_INDEX_20_21_22_23_24 2
#define EVENTINF_20_MASK (1 << 0)
#define EVENTINF_21_MASK (1 << 1)
#define EVENTINF_22_MASK (1 << 2)
@@ -962,10 +974,6 @@ typedef enum IngoRaceState {
#define EVENTINF_30 0x30
-#define GET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
-#define SET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
-#define CLEAR_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF)))
-
extern SaveContext gSaveContext;
diff --git a/linker_scripts/makerom.ld b/linker_scripts/makerom.ld
new file mode 100644
index 0000000000..a898c6b34f
--- /dev/null
+++ b/linker_scripts/makerom.ld
@@ -0,0 +1,13 @@
+#include "boot.h"
+
+/* These are only here due to iQue entry.s using ori to load the lower halves of symbols
+ * rather than addiu, so the usual relocation operators %hi() and %lo() can't be used. */
+
+_bootSegmentBssStart_HI = _bootSegmentBssStart >> 16;
+
+_bootSegmentBssSize_HI = _bootSegmentBssSize >> 16;
+
+bootproc_HI = bootproc >> 16;
+
+BOOT_STACK_TOP = (sBootThreadStack + BOOT_STACK_SIZE);
+BOOT_STACK_TOP_HI = BOOT_STACK_TOP >> 16;
diff --git a/requirements.txt b/requirements.txt
index 45c122f0ec..c9c4afed64 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,5 +1,5 @@
# Setup and compression
-crunch64>=0.3.1,<1.0.0
+crunch64>=0.5.1,<1.0.0
ipl3checksum>=1.2.0,<2.0.0
pyyaml>=6.0.1,<7.0.0
diff --git a/retail_progress.py b/retail_progress.py
index ec1095330e..cf6a623c4a 100755
--- a/retail_progress.py
+++ b/retail_progress.py
@@ -192,7 +192,9 @@ def get_section_hex_dump(path: Path, section: str) -> List[str]:
def parse_hex_dump(lines: List[str]) -> bytes:
result = bytearray()
for line in lines:
- data = line[6:41].replace(" ", "")
+ # strip offset
+ line = " ".join(line.strip().split(" ", 1)[1])
+ data = line[:35].replace(" ", "")
result.extend(bytes.fromhex(data))
# pad to 0x10-byte alignment
@@ -391,7 +393,7 @@ if __name__ == "__main__":
"--version",
dest="oot_version",
help="version to compare",
- default="ntsc-1.2",
+ default="ique-cn",
)
parser.add_argument(
"--data",
diff --git a/spec b/spec
index c5c437cafd..69476bd4e9 100644
--- a/spec
+++ b/spec
@@ -6,6 +6,9 @@
beginseg
name "makerom"
+ // We set the address of the makerom segment as 0x80000400 - 0x1000, since the ROM header and IPL3 together
+ // are 0x1000 bytes long and we want the entry code to end up at address 0x80000400.
+ address 0x7FFFF400
include "$(BUILD_DIR)/src/makerom/rom_header.o"
include "$(BUILD_DIR)/src/makerom/ipl3.o"
include "$(BUILD_DIR)/src/makerom/entry.o"
@@ -13,7 +16,6 @@ endseg
beginseg
name "boot"
- address 0x80000460
include "$(BUILD_DIR)/src/boot/boot_main.o"
include "$(BUILD_DIR)/src/boot/idle.o"
#if OOT_VERSION >= PAL_1_0
@@ -21,7 +23,11 @@ beginseg
#endif
include "$(BUILD_DIR)/src/boot/carthandle.o"
include "$(BUILD_DIR)/src/boot/z_std_dma.o"
+#if !PLATFORM_IQUE
include "$(BUILD_DIR)/src/boot/yaz0.o"
+#else
+ include "$(BUILD_DIR)/src/boot/inflate.o"
+#endif
include "$(BUILD_DIR)/src/boot/z_locale.o"
#if PLATFORM_N64
include "$(BUILD_DIR)/src/boot/cic6105.o"
@@ -29,7 +35,11 @@ beginseg
#if DEBUG_FEATURES
include "$(BUILD_DIR)/src/boot/assert.o"
#endif
+#if !PLATFORM_IQUE
include "$(BUILD_DIR)/src/boot/is_debug.o"
+#else
+ include "$(BUILD_DIR)/src/boot/is_debug_ique.o"
+#endif
include "$(BUILD_DIR)/src/boot/driverominit.o"
include "$(BUILD_DIR)/src/boot/mio0.o"
include "$(BUILD_DIR)/src/libu64/stackcheck.o"
@@ -166,6 +176,21 @@ beginseg
include "$(BUILD_DIR)/src/boot/build.o"
include "$(BUILD_DIR)/data/rsp_boot.text.o"
include "$(BUILD_DIR)/data/cic6105.text.o"
+
+#if PLATFORM_IQUE && !defined(COMPILER_GCC)
+ include "$(BUILD_DIR)/src/libgcc/__divdi3.o"
+ include "$(BUILD_DIR)/src/libgcc/__moddi3.o"
+ include "$(BUILD_DIR)/src/libgcc/__udivdi3.o"
+ include "$(BUILD_DIR)/src/libgcc/__umoddi3.o"
+ include "$(BUILD_DIR)/src/libgcc/__cmpdi2.o"
+ include "$(BUILD_DIR)/src/libgcc/__floatdidf.o"
+ include "$(BUILD_DIR)/src/libgcc/__floatdisf.o"
+ include "$(BUILD_DIR)/src/libgcc/__fixunsdfdi.o"
+ include "$(BUILD_DIR)/src/libgcc/__fixdfdi.o"
+ include "$(BUILD_DIR)/src/libgcc/__fixunssfdi.o"
+ include "$(BUILD_DIR)/src/libgcc/__fixsfdi.o"
+#endif
+
#ifdef COMPILER_GCC
include "$(BUILD_DIR)/src/libc/memset.o"
include "$(BUILD_DIR)/src/libc/memmove.o"
@@ -740,6 +765,7 @@ beginseg
include "$(BUILD_DIR)/src/audio/sequence.o"
include "$(BUILD_DIR)/src/audio/data.o"
include "$(BUILD_DIR)/src/audio/session_config.o"
+ include "$(BUILD_DIR)/src/audio/session_init.o"
#if PLATFORM_N64
include "$(BUILD_DIR)/src/libu64/gfxprint.o"
include "$(BUILD_DIR)/src/libu64/rcp_utils.o"
@@ -805,6 +831,7 @@ beginseg
include "$(BUILD_DIR)/src/libultra/gu/perspective.o"
include "$(BUILD_DIR)/src/libultra/io/sprawdma.o"
include "$(BUILD_DIR)/src/libultra/io/sirawdma.o"
+ include "$(BUILD_DIR)/src/libultra/bb/sk/skapi.o" // TODO temporary
include "$(BUILD_DIR)/src/libultra/io/sptaskyield.o"
#if DEBUG_FEATURES
include "$(BUILD_DIR)/src/libultra/io/pfsreadwritefile.o"
@@ -889,7 +916,7 @@ beginseg
include "$(BUILD_DIR)/src/libultra/mgu/translate.o"
#endif
include "$(BUILD_DIR)/src/libultra/io/contramwrite.o"
-#if OOT_VERSION == NTSC_1_2 || (PLATFORM_GC && !DEBUG_FEATURES)
+#if OOT_VERSION >= PAL_1_0 && !(OOT_PAL_N64 || DEBUG_FEATURES)
include "$(BUILD_DIR)/src/libultra/io/vimodefpallan1.o"
#endif
#if !DEBUG_FEATURES
diff --git a/src/audio/general.c b/src/audio/general.c
index cbbb0c0709..cb87548fa8 100644
--- a/src/audio/general.c
+++ b/src/audio/general.c
@@ -8,6 +8,8 @@
#define AUDIO_PRINTF osSyncPrintf
#elif IDO_PRINTF_WORKAROUND
#define AUDIO_PRINTF(args) (void)0
+#elif defined(__GNUC__) && __GNUC__ < 3
+#define AUDIO_PRINTF(format, args...) (void)0
#else
#define AUDIO_PRINTF(format, ...) (void)0
#endif
@@ -1188,7 +1190,7 @@ u8 D_8016B9F3;
u8 sFanfareStartTimer;
u16 sFanfareSeqId;
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
u16 sPrevAmbienceSeqId;
#endif
@@ -1706,7 +1708,7 @@ void AudioOcarina_PlayControllerInput(u8 unused) {
} else {
// no bending or vibrato for recording state OCARINA_RECORD_SCARECROW_SPAWN
sCurOcarinaBendIndex = 0;
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
sCurOcarinaVibrato = 0;
#endif
sCurOcarinaBendFreq = 1.0f; // No bend
@@ -1853,7 +1855,7 @@ void AudioOcarina_PlaybackSong(void) {
}
// Update vibrato
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
if (sNotePlaybackVibrato != sPlaybackSong[sPlaybackNotePos].vibrato) {
sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato;
// Sets vibrato to io port 6
@@ -2144,7 +2146,7 @@ void AudioOcarina_RecordSong(void) {
} else if (sRecordOcarinaVolume != sCurOcarinaVolume) {
noteChanged = true;
} else if (sRecordOcarinaVibrato != sCurOcarinaVibrato) {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) {
noteChanged = true;
}
@@ -2152,7 +2154,7 @@ void AudioOcarina_RecordSong(void) {
noteChanged = true;
#endif
} else if (sRecordOcarinaBendIndex != sCurOcarinaBendIndex) {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) {
noteChanged = true;
}
@@ -2493,7 +2495,7 @@ f32 Audio_ComputeSfxFreqScale(u8 bankId, u8 entryIdx) {
switch (bankId) {
case BANK_VOICE:
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (((entry->sfxId & 0xFF) < 0x40) && (sAudioBaseFilter2 != 0)) {
phi_v0 = true;
} else if (((entry->sfxId & 0xFF) >= 0x40) && (sAudioExtraFilter2 != 0)) {
@@ -2614,7 +2616,7 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) {
f32 behindScreenZ;
u8 baseFilter = 0;
SfxBankEntry* entry = &gSfxBanks[bankId][entryIdx];
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
s32 pad;
#endif
@@ -2655,7 +2657,7 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) {
}
}
if (sAudioBaseFilter != 0) {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if ((bankId == BANK_PLAYER) || (bankId == BANK_ITEM) ||
((bankId == BANK_VOICE) && ((entry->sfxId & 0xFF) < 0x40)))
#else
@@ -3239,7 +3241,7 @@ void Audio_PlaySceneSequence(u16 seqId) {
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
}
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) {
Audio_StopSequence(SEQ_PLAYER_BGM_MAIN, 0);
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
@@ -3383,7 +3385,7 @@ void func_800F5B58(void) {
if (sPrevMainBgmSeqId == NA_BGM_DISABLED) {
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
} else {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (sPrevMainBgmSeqId == NA_BGM_NATURE_AMBIENCE) {
sPrevMainBgmSeqId = sPrevAmbienceSeqId;
}
@@ -3519,7 +3521,7 @@ void Audio_SetSequenceMode(u8 seqMode) {
volumeFadeInTimer);
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY);
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
if (seqId != NA_BGM_NATURE_AMBIENCE)
#else
if (seqId > NA_BGM_NATURE_AMBIENCE)
@@ -3544,7 +3546,7 @@ void Audio_SetSequenceMode(u8 seqMode) {
sPrevSeqMode = seqMode + 0x80;
} else {
-#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC
+#if OOT_VERSION < NTSC_1_1 || !PLATFORM_N64
// Empty
#elif OOT_VERSION < PAL_1_0
if ((seqMode == SEQ_MODE_ENEMY) && (seqId != NA_BGM_FIELD_LOGIC) &&
@@ -3600,7 +3602,7 @@ void Audio_SetBgmEnemyVolume(f32 dist) {
sAudioEnemyVol = ((350.0f - adjDist) * 127.0f) / 350.0f;
Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_BGM_SUB, sAudioEnemyVol, 10);
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE)
#else
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE)
@@ -3610,7 +3612,7 @@ void Audio_SetBgmEnemyVolume(f32 dist) {
}
}
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE)
#else
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE)
@@ -3928,7 +3930,7 @@ void func_800F6C34(void) {
sFanfareStartTimer = 0;
D_8016B9F3 = 1;
sMalonSingingDisabled = false;
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
sPrevAmbienceSeqId = NA_BGM_DISABLED;
#endif
}
@@ -3989,7 +3991,7 @@ void Audio_StartNatureAmbienceSequence(u16 playerIO, u16 channelMask) {
}
#endif
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if ((Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) &&
(Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_NATURE_AMBIENCE)) {
Audio_StopSequence(SEQ_PLAYER_BGM_MAIN, 0);
@@ -4023,7 +4025,7 @@ void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId) {
if ((gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId == NA_BGM_DISABLED) ||
!(sSeqFlags[gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE)) {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) {
sPrevAmbienceSeqId = gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId;
}
diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c
index 3e66c79329..0aa3324d73 100644
--- a/src/audio/lib/load.c
+++ b/src/audio/lib/load.c
@@ -1250,8 +1250,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
ramAddr = AudioHeap_Alloc(&gAudioCtx.initPool, gAudioHeapInitSizes.permanentPoolSize);
if (ramAddr == NULL) {
- // cast away const from gAudioHeapInitSizes
- *((u32*)&gAudioHeapInitSizes.permanentPoolSize) = 0;
+ gAudioHeapInitSizes.permanentPoolSize = 0;
}
AudioHeap_InitPool(&gAudioCtx.permanentPool, ramAddr, gAudioHeapInitSizes.permanentPoolSize);
diff --git a/src/audio/lib/seqplayer.c b/src/audio/lib/seqplayer.c
index 71132797e2..a7091b24b3 100644
--- a/src/audio/lib/seqplayer.c
+++ b/src/audio/lib/seqplayer.c
@@ -437,7 +437,7 @@ void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) {
void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
s32 finished = 0;
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (seqPlayer->finished == 1) {
finished = 1;
}
@@ -457,7 +457,7 @@ void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
}
if (AudioLoad_IsFontLoadComplete(seqPlayer->defaultFont)) {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (finished == 1) {
AudioHeap_ReleaseNotesForFont(seqPlayer->defaultFont);
}
diff --git a/src/audio/lib/synthesis.c b/src/audio/lib/synthesis.c
index d19ed4ae5f..85fb8d2610 100644
--- a/src/audio/lib/synthesis.c
+++ b/src/audio/lib/synthesis.c
@@ -644,7 +644,7 @@ Acmd* AudioSynth_DoOneAudioUpdate(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updat
// Leak reverb between the left and right channels
-#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC
+#if OOT_VERSION < NTSC_1_1 || !PLATFORM_N64
if ((reverb->leakRtl != 0) || (reverb->leakLtr != 0))
#else
if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioCtx.soundMode != SOUNDMODE_MONO))
@@ -785,7 +785,7 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS
samplesLenFixedPoint = (resamplingRateFixedPoint * aiBufLen * 2) + synthState->samplePosFrac;
numSamplesToLoad = samplesLenFixedPoint >> 16;
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (numSamplesToLoad == 0) {
skipBytes = false;
}
diff --git a/src/audio/lib/thread.c b/src/audio/lib/thread.c
index c074f596a1..f47dbade7e 100644
--- a/src/audio/lib/thread.c
+++ b/src/audio/lib/thread.c
@@ -17,7 +17,7 @@ AudioTask* AudioThread_Update(void) {
return AudioThread_UpdateImpl();
}
-#if !(OOT_VERSION < PAL_1_0 || PLATFORM_GC)
+#if !(OOT_VERSION < PAL_1_0 || !PLATFORM_N64)
static s32 sMaxAbiCmdCnt = 0x80;
static AudioTask* sWaitingAudioTask = NULL;
#endif
@@ -26,7 +26,7 @@ static AudioTask* sWaitingAudioTask = NULL;
* This is Audio_Update for the audio thread
*/
AudioTask* AudioThread_UpdateImpl(void) {
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
static s32 sMaxAbiCmdCnt = 0x80;
static AudioTask* sWaitingAudioTask = NULL;
#endif
diff --git a/src/audio/session_config.c b/src/audio/session_config.c
index 27771515a2..a531d6c27b 100644
--- a/src/audio/session_config.c
+++ b/src/audio/session_config.c
@@ -1,33 +1,9 @@
#include "global.h"
-#include "assets/audio/sequence_sizes.h"
-#include "assets/audio/soundfont_sizes.h"
-#define SFX_SEQ_SIZE Sequence_0_SIZE
-#define SFX_SOUNDFONTS_SIZE (Soundfont_0_SIZE + Soundfont_1_SIZE)
AudioContext gAudioCtx;
AudioCustomUpdateFunction gAudioCustomUpdateFunction;
s32 D_801755D8[3]; // unused
-const TempoData gTempoData = {
- 0x1C00, // unk_00
- SEQTICKS_PER_BEAT, // seqTicksPerBeat
-};
-
-// Sizes of everything on the init pool
-#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioCtx.aiBuffers))
-#define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont))
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
-#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONTS_SIZE)
-#else
-#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONTS_SIZE + 0x10)
-#endif
-
-const AudioHeapInitSizes gAudioHeapInitSizes = {
- ALIGN16(sizeof(gAudioHeap) - 0x100), // audio heap size
- ALIGN16(PERMANENT_POOL_SIZE + AI_BUFFERS_SIZE + SOUNDFONT_LIST_SIZE), // init pool size
- ALIGN16(PERMANENT_POOL_SIZE), // permanent pool size
-};
-
#define DEFAULT_REVERB_SETTINGS \
{ 1, 0x30, 0x3000, 0, 0, 0x7FFF, 0x0000, 0x0000, 0xFF, 0x3000, 0x0, 0x0 }
diff --git a/src/audio/session_init.c b/src/audio/session_init.c
new file mode 100644
index 0000000000..a6e67f40d4
--- /dev/null
+++ b/src/audio/session_init.c
@@ -0,0 +1,26 @@
+#include "global.h"
+#include "assets/audio/sequence_sizes.h"
+#include "assets/audio/soundfont_sizes.h"
+
+#define SFX_SEQ_SIZE Sequence_0_SIZE
+#define SFX_SOUNDFONTS_SIZE (Soundfont_0_SIZE + Soundfont_1_SIZE)
+
+TempoData gTempoData = {
+ 0x1C00, // unk_00
+ SEQTICKS_PER_BEAT, // seqTicksPerBeat
+};
+
+// Sizes of everything on the init pool
+#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioCtx.aiBuffers))
+#define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont))
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
+#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONTS_SIZE)
+#else
+#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONTS_SIZE + 0x10)
+#endif
+
+AudioHeapInitSizes gAudioHeapInitSizes = {
+ ALIGN16(sizeof(gAudioHeap) - 0x100), // audio heap size
+ ALIGN16(PERMANENT_POOL_SIZE + AI_BUFFERS_SIZE + SOUNDFONT_LIST_SIZE), // init pool size
+ ALIGN16(PERMANENT_POOL_SIZE), // permanent pool size
+};
diff --git a/src/audio/sfx.c b/src/audio/sfx.c
index ce94cf5483..1c743e95ba 100644
--- a/src/audio/sfx.c
+++ b/src/audio/sfx.c
@@ -342,7 +342,7 @@ void Audio_ChooseActiveSfx(u8 bankId) {
entry->sfxId, entry->posX, entry->posZ, *entry->posX, *entry->posY, *entry->posZ);
}
entry->priority = (u32)entry->dist + (SQ(0xFF - sfxImportance) * SQ(76));
-#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC
+#if OOT_VERSION < NTSC_1_1 || !PLATFORM_N64
temp3 = entry->sfxId; // fake
entry->priority = entry->priority + temp3 - temp3;
#endif
diff --git a/src/boot/driverominit.c b/src/boot/driverominit.c
index 7d1441cdd9..5ed69abe07 100644
--- a/src/boot/driverominit.c
+++ b/src/boot/driverominit.c
@@ -3,7 +3,14 @@
OSPiHandle __DriveRomHandle;
OSPiHandle* osDriveRomInit(void) {
+#if PLATFORM_IQUE && defined(NON_MATCHING)
+ // On iQue, the compiled output of this file is patched so that the
+ // `!first` check is always taken. For non-matching builds, we edit the
+ // source code instead.
+ static u32 first = false;
+#else
static u32 first = true;
+#endif
register s32 status;
register u32 value;
register u32 prevInt;
diff --git a/src/boot/idle.c b/src/boot/idle.c
index ce1eaa9b5c..508fd16c4e 100644
--- a/src/boot/idle.c
+++ b/src/boot/idle.c
@@ -57,7 +57,7 @@ void Idle_ThreadEntry(void* arg) {
PRINTF(T("作製者 : %s\n", "Created by: %s\n"), gBuildCreator);
PRINTF(T("作成日時 : %s\n", "Created : %s\n"), gBuildDate);
PRINTF("MAKEOPTION: %s\n", gBuildMakeOption);
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("RAMサイズは %d キロバイトです(osMemSize/osGetMemSize)\n",
"RAM size is %d kilobytes (osMemSize/osGetMemSize)\n"),
(s32)osMemSize / 1024);
@@ -70,7 +70,7 @@ void Idle_ThreadEntry(void* arg) {
PRINTF(T("YIELDバッファのサイズは %d キロバイトです\n", "YIELD buffer size is %d kilobytes\n"), 3);
PRINTF(T("オーディオヒープのサイズは %d キロバイトです\n", "Audio heap size is %d kilobytes\n"),
((intptr_t)&gAudioHeap[ARRAY_COUNT(gAudioHeap)] - (intptr_t)gAudioHeap) / 1024);
- PRINTF(VT_RST);
+ PRINTF_RST();
osCreateViManager(OS_PRIORITY_VIMGR);
diff --git a/src/boot/inflate.c b/src/boot/inflate.c
new file mode 100644
index 0000000000..c0467dd38c
--- /dev/null
+++ b/src/boot/inflate.c
@@ -0,0 +1,1003 @@
+/* Not copyrighted 1992 by Mark Adler
+ version c10p1, 10 January 1993 */
+
+/* You can do whatever you like with this source file, though I would
+ prefer that if you modify it and redistribute it that you include
+ comments to that effect with your name and the date. Thank you.
+ [The history has been moved to the file ChangeLog.]
+ */
+
+/*
+ Inflate deflated (PKZIP's method 8 compressed) data. The compression
+ method searches for as much of the current string of bytes (up to a
+ length of 258) in the previous 32K bytes. If it doesn't find any
+ matches (of at least length 3), it codes the next byte. Otherwise, it
+ codes the length of the matched string and its distance backwards from
+ the current position. There is a single Huffman code that codes both
+ single bytes (called "literals") and match lengths. A second Huffman
+ code codes the distance information, which follows a length code. Each
+ length or distance code actually represents a base value and a number
+ of "extra" (sometimes zero) bits to get to add to the base value. At
+ the end of each deflated block is a special end-of-block (EOB) literal/
+ length code. The decoding process is basically: get a literal/length
+ code; if EOB then done; if a literal, emit the decoded byte; if a
+ length then get the distance and emit the referred-to bytes from the
+ sliding window of previously emitted data.
+
+ There are (currently) three kinds of inflate blocks: stored, fixed, and
+ dynamic. The compressor deals with some chunk of data at a time, and
+ decides which method to use on a chunk-by-chunk basis. A chunk might
+ typically be 32K or 64K. If the chunk is uncompressible, then the
+ "stored" method is used. In this case, the bytes are simply stored as
+ is, eight bits per byte, with none of the above coding. The bytes are
+ preceded by a count, since there is no longer an EOB code.
+
+ If the data is compressible, then either the fixed or dynamic methods
+ are used. In the dynamic method, the compressed data is preceded by
+ an encoding of the literal/length and distance Huffman codes that are
+ to be used to decode this block. The representation is itself Huffman
+ coded, and so is preceded by a description of that code. These code
+ descriptions take up a little space, and so for small blocks, there is
+ a predefined set of codes, called the fixed codes. The fixed method is
+ used if the block codes up smaller that way (usually for quite small
+ chunks), otherwise the dynamic method is used. In the latter case, the
+ codes are customized to the probabilities in the current block, and so
+ can code it much better than the pre-determined fixed codes.
+
+ The Huffman codes themselves are decoded using a multi-level table
+ lookup, in order to maximize the speed of decoding plus the speed of
+ building the decoding tables. See the comments below that precede the
+ lbits and dbits tuning parameters.
+ */
+
+/*
+ Notes beyond the 1.93a appnote.txt:
+
+ 1. Distance pointers never point before the beginning of the output
+ stream.
+ 2. Distance pointers can point back across blocks, up to 32k away.
+ 3. There is an implied maximum of 7 bits for the bit length table and
+ 15 bits for the actual data.
+ 4. If only one code exists, then it is encoded using one bit. (Zero
+ would be more efficient, but perhaps a little confusing.) If two
+ codes exist, they are coded using one bit each (0 and 1).
+ 5. There is no way of sending zero distance codes--a dummy must be
+ sent if there are none. (History: a pre 2.0 version of PKZIP would
+ store blocks with no distance codes, but this was discovered to be
+ too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
+ zero distance codes, which is sent as one code of zero bits in
+ length.
+ 6. There are up to 286 literal/length codes. Code 256 represents the
+ end-of-block. Note however that the static length tree defines
+ 288 codes just to fill out the Huffman codes. Codes 286 and 287
+ cannot be used though, since there is no length base or extra bits
+ defined for them. Similarly, there are up to 30 distance codes.
+ However, static trees define 32 codes (all 5 bits) to fill out the
+ Huffman codes, but the last two had better not show up in the data.
+ 7. Unzip can check dynamic Huffman blocks for complete code sets.
+ The exception is that a single code would not be complete (see #4).
+ 8. The five bits following the block type is really the number of
+ literal codes sent minus 257.
+ 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
+ (1+6+6). Therefore, to output three times the length, you output
+ three codes (1+1+1), whereas to output four times the same length,
+ you only need two codes (1+3). Hmm.
+ 10. In the tree reconstruction algorithm, Code = Code + Increment
+ only if BitLength(i) is not zero. (Pretty obvious.)
+ 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
+ 12. Note: length code 284 can represent 227-258, but length code 285
+ really is 258. The last length deserves its own, short code
+ since it gets used a lot in very redundant files. The length
+ 258 is special since 258 - 3 (the min match length) is 255.
+ 13. The literal/length and distance code bit lengths are read as a
+ single stream of lengths. It is possible (and advantageous) for
+ a repeat code (16, 17, or 18) to go across the boundary between
+ the two sets of lengths.
+ */
+
+#include "ultra64/ultratypes.h"
+#include "libc/stddef.h"
+#include "libc/stdint.h"
+#include "alignment.h"
+#include "attributes.h"
+#include "z64dma.h"
+
+typedef u8 uch;
+typedef u16 ush;
+typedef u32 ulg;
+
+#define Trace(x)
+#define Tracev(x)
+#define Tracevv(x)
+#define Tracecv(c, x)
+
+#define EOF -1
+
+#define WSIZE 0x8000
+#define INBUFSIZ 0x1000
+
+typedef struct GzipFileDescriptor {
+ uintptr_t addr;
+ s32 size;
+} GzipFileDescriptor;
+
+GzipFileDescriptor ifd;
+
+unsigned insize;
+unsigned inptr;
+unsigned outcnt;
+
+static u8 inbuf[INBUFSIZ];
+static u8* output_ptr;
+
+int fill_inbuf(int eof_ok);
+void flush_window(void);
+
+/* Huffman code lookup table entry--this entry is four bytes for machines
+ that have 16-bit pointers (e.g. PC's in the small or medium model).
+ Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16
+ means that v is a literal, 16 < e < 32 means that v is a pointer to
+ the next table, which codes e - 16 bits, and lastly e == 99 indicates
+ an unused code. If a code with e == 99 is looked up, this implies an
+ error in the data. */
+struct huft {
+ uch e; /* number of extra bits or operation */
+ uch b; /* number of bits in this code or subcode */
+ union {
+ ush n; /* literal, length base, or distance base */
+ struct huft* t; /* pointer to next level of table */
+ } v;
+};
+
+/* Function prototypes */
+int huft_free(struct huft*);
+
+/* The inflate algorithm uses a sliding 32K byte window on the uncompressed
+ stream to find repeated byte strings. This is implemented here as a
+ circular buffer. The index is updated simply by incrementing and then
+ and'ing with 0x7fff (32K-1). */
+/* It is left to other modules to supply the 32K area. It is assumed
+ to be usable as if it were declared "uch slide[32768];" or as just
+ "uch *slide;" and then malloc'ed in the latter case. The definition
+ must be in unzip.h, included above. */
+/* unsigned wp; current position in slide */
+#define wp outcnt
+#define flush_output(w) (wp = (w), flush_window())
+
+/* Tables for deflate from PKZIP's appnote.txt. */
+static unsigned border[] = { /* Order of the bit length code lengths */
+ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
+};
+static ush cplens[] = { /* Copy lengths for literal codes 257..285 */
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+ 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
+};
+/* note: see note #13 above about the 258 in this list. */
+static ush cplext[] = { /* Extra bits for literal codes 257..285 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99
+}; /* 99==invalid */
+static ush cpdist[] = { /* Copy offsets for distance codes 0..29 */
+ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129,
+ 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577
+};
+static ush cpdext[] = { /* Extra bits for distance codes */
+ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13
+};
+
+/* Macros for inflate() bit peeking and grabbing.
+ The usage is:
+
+ NEEDBITS(j)
+ x = b & mask_bits[j];
+ DUMPBITS(j)
+
+ where NEEDBITS makes sure that b has at least j bits in it, and
+ DUMPBITS removes the bits from b. The macros use the variable k
+ for the number of bits in b. Normally, b and k are register
+ variables for speed, and are initialized at the beginning of a
+ routine that uses these macros from a global bit buffer and count.
+ The macros also use the variable w, which is a cached copy of wp.
+
+ If we assume that EOB will be the longest code, then we will never
+ ask for bits with NEEDBITS that are beyond the end of the stream.
+ So, NEEDBITS should not read any more bytes than are needed to
+ meet the request. Then no bytes need to be "returned" to the buffer
+ at the end of the last block.
+
+ However, this assumption is not true for fixed blocks--the EOB code
+ is 7 bits, but the other literal/length codes can be 8 or 9 bits.
+ (The EOB code is shorter than other codes because fixed blocks are
+ generally short. So, while a block always has an EOB, many other
+ literal/length codes have a significantly lower probability of
+ showing up at all.) However, by making the first table have a
+ lookup of seven bits, the EOB code will be found in that first
+ lookup, and so will not require that too many bits be pulled from
+ the stream.
+ */
+
+ulg bb; /* bit buffer */
+unsigned bk; /* bits in bit buffer */
+
+static ush mask_bits[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
+ 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff };
+
+#define GETBYTE() (inptr < insize ? inbuf[inptr++] : fill_inbuf(0))
+
+#define NEXTBYTE() (uch) GETBYTE()
+#define NEEDBITS(n) \
+ { \
+ while (k < (n)) { \
+ b |= ((ulg)NEXTBYTE()) << k; \
+ k += 8; \
+ } \
+ }
+#define DUMPBITS(n) \
+ { \
+ b >>= (n); \
+ k -= (n); \
+ }
+
+/*
+ Huffman code decoding is performed using a multi-level table lookup.
+ The fastest way to decode is to simply build a lookup table whose
+ size is determined by the longest code. However, the time it takes
+ to build this table can also be a factor if the data being decoded
+ is not very long. The most common codes are necessarily the
+ shortest codes, so those codes dominate the decoding time, and hence
+ the speed. The idea is you can have a shorter table that decodes the
+ shorter, more probable codes, and then point to subsidiary tables for
+ the longer codes. The time it costs to decode the longer codes is
+ then traded against the time it takes to make longer tables.
+
+ This results of this trade are in the variables lbits and dbits
+ below. lbits is the number of bits the first level table for literal/
+ length codes can decode in one step, and dbits is the same thing for
+ the distance codes. Subsequent tables are also less than or equal to
+ those sizes. These values may be adjusted either when all of the
+ codes are shorter than that, in which case the longest code length in
+ bits is used, or when the shortest code is *longer* than the requested
+ table size, in which case the length of the shortest code in bits is
+ used.
+
+ There are two different values for the two tables, since they code a
+ different number of possibilities each. The literal/length table
+ codes 286 possible values, or in a flat code, a little over eight
+ bits. The distance table codes 30 possible values, or a little less
+ than five bits, flat. The optimum values for speed end up being
+ about one bit more than those, so lbits is 8+1 and dbits is 5+1.
+ The optimum values may differ though from machine to machine, and
+ possibly even between compilers. Your mileage may vary.
+ */
+
+static int lbits = 9; /* bits in base literal/length lookup table */
+static int dbits = 6; /* bits in base distance lookup table */
+
+/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */
+#define BMAX 16 /* maximum bit length of any code (16 for explode) */
+#define N_MAX 288 /* maximum number of codes in any set */
+
+unsigned hufts; /* track memory usage */
+
+#define MEMBUFSIZ 0x2000
+
+static u8 gzip_mem_buff[MEMBUFSIZ];
+void* gzip_malloc_addr = gzip_mem_buff;
+s32 gzip_malloc_tmp = 0;
+
+void* gzip_malloc(size_t size) {
+ void* ret;
+
+ gzip_malloc_tmp += size;
+ if (gzip_malloc_tmp > MEMBUFSIZ) {
+ return NULL;
+ }
+
+ ret = gzip_malloc_addr;
+ gzip_malloc_addr = (void*)(((uintptr_t)gzip_malloc_addr) + size);
+ return ret;
+}
+
+void gzip_free(void* ptr) {
+ gzip_malloc_tmp = 0;
+ gzip_malloc_addr = gzip_mem_buff;
+}
+
+/* Given a list of code lengths and a maximum table size, make a set of
+ tables to decode that set of codes. Return zero on success, one if
+ the given code set is incomplete (the tables are still built in this
+ case), two if the input is invalid (all zero length codes or an
+ oversubscribed set of lengths), and three if not enough memory. */
+int huft_build(unsigned* b, /* code lengths in bits (all assumed <= BMAX) */
+ unsigned n, /* number of codes (assumed <= N_MAX) */
+ unsigned s, /* number of simple-valued codes (0..s-1) */
+ ush* d, /* list of base values for non-simple codes */
+ ush* e, /* list of extra bits for non-simple codes */
+ struct huft** t, /* result: starting table */
+ int* m /* maximum lookup bits, returns actual */
+) {
+ unsigned a; /* counter for codes of length k */
+ unsigned c[BMAX + 1]; /* bit length count table */
+ unsigned f; /* i repeats in table every f entries */
+ int g; /* maximum code length */
+ int h; /* table level */
+ register unsigned i; /* counter, current code */
+ register unsigned j; /* counter */
+ register int k; /* number of bits in current code */
+ int l; /* bits per table (returned in m) */
+ register unsigned* p; /* pointer into c[], b[], or v[] */
+ register struct huft* q; /* points to current table */
+ struct huft r; /* table entry for structure assignment */
+ struct huft* u[BMAX]; /* table stack */
+ static unsigned v[N_MAX]; /* values in order of bit length */
+ register int w; /* bits before this table == (l * h) */
+ unsigned x[BMAX + 1]; /* bit offsets, then code stack */
+ unsigned* xp; /* pointer into x */
+ int y; /* number of dummy codes added */
+ unsigned z; /* number of entries in current table */
+
+ /* Generate counts for each bit length */
+ for (j = 0; j < BMAX + 1; j++) {
+ c[j] = 0;
+ }
+
+ p = b;
+ i = n;
+ do {
+ Tracecv(*p, (stderr, (n - i >= ' ' && n - i <= '~' ? "%c %d\n" : "0x%x %d\n"), n - i, *p));
+ c[*p]++; /* assume all entries <= BMAX */
+ p++; /* Can't combine with above line (Solaris bug) */
+ } while (--i);
+ if (c[0] == n) { /* null input--all zero length codes */
+ *t = NULL;
+ *m = 0;
+ return 0;
+ }
+
+ /* Find minimum and maximum length, bound *m by those */
+ l = *m;
+ for (j = 1; j <= BMAX; j++) {
+ if (c[j]) {
+ break;
+ }
+ }
+ k = j; /* minimum code length */
+ if ((unsigned)l < j) {
+ l = j;
+ }
+ for (i = BMAX; i; i--) {
+ if (c[i]) {
+ break;
+ }
+ }
+ g = i; /* maximum code length */
+ if ((unsigned)l > i) {
+ l = i;
+ }
+ *m = l;
+
+ /* Adjust last length count to fill out codes, if needed */
+ for (y = 1 << j; j < i; j++, y <<= 1) {
+ if ((y -= c[j]) < 0) {
+ return 2; /* bad input: more codes than bits */
+ }
+ }
+ if ((y -= c[i]) < 0) {
+ return 2;
+ }
+ c[i] += y;
+
+ /* Generate starting offsets into the value table for each length */
+ x[1] = j = 0;
+ p = c + 1;
+ xp = x + 2;
+ while (--i) { /* note that i == g from above */
+ *xp++ = (j += *p++);
+ }
+
+ /* Make a table of values in order of bit lengths */
+ p = b;
+ i = 0;
+ do {
+ if ((j = *p++) != 0) {
+ v[x[j]++] = i;
+ }
+ } while (++i < n);
+
+ /* Generate the Huffman codes and for each, make the table entries */
+ x[0] = i = 0; /* first Huffman code is zero */
+ p = v; /* grab values in bit order */
+ h = -1; /* no tables yet--level -1 */
+ w = -l; /* bits decoded == (l * h) */
+ u[0] = (struct huft*)NULL; /* just to keep compilers happy */
+ q = (struct huft*)NULL; /* ditto */
+ z = 0; /* ditto */
+
+ /* go through the bit lengths (k already is bits in shortest code) */
+ for (; k <= g; k++) {
+ a = c[k];
+ while (a--) {
+ /* here i is the Huffman code of length k bits for value *p */
+ /* make tables up to required level */
+ while (k > w + l) {
+ h++;
+ w += l; /* previous table always l bits */
+
+ /* compute minimum size table less than or equal to l bits */
+ z = (z = g - w) > (unsigned)l ? l : z; /* upper limit on table size */
+ if ((f = 1 << (j = k - w)) > a + 1) { /* try a k-w bit table */
+ /* too few codes for k-w bit table */
+ f -= a + 1; /* deduct codes from patterns left */
+ xp = c + k;
+ while (++j < z) { /* try smaller tables up to z bits */
+ if ((f <<= 1) <= *++xp) {
+ break; /* enough codes to use up j bits */
+ }
+ f -= *xp; /* else deduct codes from patterns */
+ }
+ }
+ z = 1 << j; /* table entries for j-bit table */
+
+ /* allocate and link in new table */
+ if ((q = (struct huft*)gzip_malloc((z + 1) * sizeof(struct huft))) == (struct huft*)NULL) {
+ if (h) {
+ huft_free(u[0]);
+ }
+ return 3; /* not enough memory */
+ }
+ hufts += z + 1; /* track memory usage */
+ *t = q + 1; /* link to list for huft_free() */
+ *(t = &(q->v.t)) = (struct huft*)NULL;
+ u[h] = ++q; /* table starts after link */
+
+ /* connect to last table, if there is one */
+ if (h) {
+ x[h] = i; /* save pattern for backing up */
+ r.b = (uch)l; /* bits to dump before this table */
+ r.e = (uch)(16 + j); /* bits in this table */
+ r.v.t = q; /* pointer to this table */
+ j = i >> (w - l); /* (get around Turbo C bug) */
+ u[h - 1][j] = r; /* connect to last table */
+ }
+ }
+
+ /* set up table entry in r */
+ r.b = (uch)(k - w);
+ if (p >= v + n) {
+ r.e = 99; /* out of values--invalid code */
+ } else if (*p < s) {
+ r.e = (uch)(*p < 256 ? 16 : 15); /* 256 is end-of-block code */
+ r.v.n = (ush)(*p); /* simple code is just the value */
+ p++; /* one compiler does not like *p++ */
+ } else {
+ r.e = (uch)e[*p - s]; /* non-simple--look up in lists */
+ r.v.n = d[*p++ - s];
+ }
+
+ /* fill code-like entries with r */
+ f = 1 << (k - w);
+ for (j = i >> w; j < z; j += f) {
+ q[j] = r;
+ }
+
+ /* backwards increment the k-bit code i */
+ for (j = 1 << (k - 1); i & j; j >>= 1) {
+ i ^= j;
+ }
+ i ^= j;
+
+ /* backup over finished tables */
+ while ((i & ((1 << w) - 1)) != x[h]) {
+ h--; /* don't need to update q */
+ w -= l;
+ }
+ }
+ }
+
+ /* Return true (1) if we were given an incomplete table */
+ return y != 0 && g != 1;
+}
+
+/* Free the malloc'ed tables T built by huft_build(), which makes a linked
+ list of the tables it made, with the links in a dummy first entry of
+ each table. */
+int huft_free(struct huft* t) {
+ register struct huft *p, *q;
+
+ /* Go through linked list, freeing from the malloced (t[-1]) address. */
+ p = t;
+ while (p != (struct huft*)NULL) {
+ q = (--p)->v.t;
+ gzip_free(p);
+ p = q;
+ }
+ return 0;
+}
+
+/* tl, td: literal/length and distance decoder tables */
+/* bl, bd: number of bits decoded by tl[] and td[] */
+/* inflate (decompress) the codes in a deflated (compressed) block.
+ Return an error code or zero if it all goes ok. */
+int inflate_codes(struct huft* tl, struct huft* td, int bl, int bd) {
+ register unsigned e; /* table entry flag/number of extra bits */
+ unsigned n, d; /* length and index for copy */
+ unsigned w; /* current window position */
+ struct huft* t; /* pointer to table entry */
+ unsigned ml, md; /* masks for bl and bd bits */
+ register ulg b; /* bit buffer */
+ register unsigned k; /* number of bits in bit buffer */
+ unsigned char* p;
+
+ /* make local copies of globals */
+ b = bb; /* initialize bit buffer */
+ k = bk;
+ w = wp; /* initialize window position */
+
+ /* inflate the coded data */
+ ml = mask_bits[bl]; /* precompute masks for speed */
+ md = mask_bits[bd];
+ for (;;) { /* do until end of block */
+ NEEDBITS((unsigned)bl)
+ if ((e = (t = tl + ((unsigned)b & ml))->e) > 16) {
+ do {
+ if (e == 99) {
+ return 1;
+ }
+ DUMPBITS(t->b)
+ e -= 16;
+ NEEDBITS(e)
+ } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
+ }
+ DUMPBITS(t->b)
+ if (e == 16) { /* then it's a literal */
+ *output_ptr++ = (uch)t->v.n;
+ w++;
+ if (w == WSIZE) {
+ flush_output(w);
+ w = 0;
+ }
+ } else { /* it's an EOB or a length */
+ /* exit if end of block */
+ if (e == 15) {
+ break;
+ }
+
+ /* get length of block to copy */
+ NEEDBITS(e)
+ n = t->v.n + ((unsigned)b & mask_bits[e]);
+ DUMPBITS(e);
+
+ /* decode distance of block to copy */
+ NEEDBITS((unsigned)bd)
+ if ((e = (t = td + ((unsigned)b & md))->e) > 16) {
+ do {
+ if (e == 99) {
+ return 1;
+ }
+ DUMPBITS(t->b)
+ e -= 16;
+ NEEDBITS(e)
+ } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
+ }
+ DUMPBITS(t->b)
+ NEEDBITS(e)
+ d = w - t->v.n - ((unsigned)b & mask_bits[e]);
+ DUMPBITS(e)
+ Tracevv((stderr, "\\[%d,%d]", w - d, n));
+
+ /* do the copy */
+ p = output_ptr + d - w;
+ do {
+ *output_ptr++ = *p++;
+ w++;
+ if (w == WSIZE) {
+ flush_output(w);
+ w = 0;
+ }
+ d++;
+ n--;
+ } while (n != 0);
+ }
+ }
+
+ /* restore the globals from the locals */
+ wp = w; /* restore global window pointer */
+ bb = b; /* restore global bit buffer */
+ bk = k;
+
+ /* done */
+ return 0;
+}
+
+/* "decompress" an inflated type 0 (stored) block. */
+int inflate_stored(void) {
+ unsigned n; /* number of bytes in block */
+ unsigned w; /* current window position */
+ register ulg b; /* bit buffer */
+ register unsigned k; /* number of bits in bit buffer */
+
+ /* make local copies of globals */
+ b = bb; /* initialize bit buffer */
+ k = bk;
+ w = wp; /* initialize window position */
+
+ /* go to byte boundary */
+ n = k & 7;
+ DUMPBITS(n);
+
+ /* get the length and its complement */
+ NEEDBITS(16)
+ n = ((unsigned)b & 0xffff);
+ DUMPBITS(16)
+ NEEDBITS(16)
+ if (n != (unsigned)((~b) & 0xffff)) {
+ return 1; /* error in compressed data */
+ }
+ DUMPBITS(16)
+
+ /* read and output the compressed data */
+ while (n--) {
+ NEEDBITS(8)
+ *output_ptr++ = (uch)b;
+ w++;
+ if (w == WSIZE) {
+ flush_output(w);
+ w = 0;
+ }
+ DUMPBITS(8)
+ }
+
+ /* restore the globals from the locals */
+ wp = w; /* restore global window pointer */
+ bb = b; /* restore global bit buffer */
+ bk = k;
+ return 0;
+}
+
+/* decompress an inflated type 1 (fixed Huffman codes) block. We should
+ either replace this with a custom decoder, or at least precompute the
+ Huffman tables. */
+int inflate_fixed(void) {
+ int i; /* temporary variable */
+ struct huft* tl; /* literal/length code table */
+ struct huft* td; /* distance code table */
+ int bl; /* lookup bits for tl */
+ int bd; /* lookup bits for td */
+ static unsigned l[288]; /* length list for huft_build */
+
+ /* set up literal table */
+ for (i = 0; i < 144; i++) {
+ l[i] = 8;
+ }
+ for (; i < 256; i++) {
+ l[i] = 9;
+ }
+ for (; i < 280; i++) {
+ l[i] = 7;
+ }
+ for (; i < 288; i++) { /* make a complete, but wrong code set */
+ l[i] = 8;
+ }
+ bl = 7;
+ if ((i = huft_build(l, 288, 257, cplens, cplext, &tl, &bl)) != 0) {
+ return i;
+ }
+
+ /* set up distance table */
+ for (i = 0; i < 30; i++) { /* make an incomplete code set */
+ l[i] = 5;
+ }
+ bd = 5;
+ if ((i = huft_build(l, 30, 0, cpdist, cpdext, &td, &bd)) > 1) {
+ huft_free(tl);
+ return i;
+ }
+
+ /* decompress until an end-of-block code */
+ if (inflate_codes(tl, td, bl, bd)) {
+ return 1;
+ }
+
+ /* free the decoding tables, return */
+ huft_free(td);
+ huft_free(tl);
+ return 0;
+}
+
+/* decompress an inflated type 2 (dynamic Huffman codes) block. */
+int inflate_dynamic(void) {
+ int i; /* temporary variables */
+ unsigned j;
+ unsigned l; /* last length */
+ unsigned m; /* mask for bit lengths table */
+ unsigned n; /* number of lengths to get */
+ UNUSED unsigned w; /* current window position */
+ struct huft* tl; /* literal/length code table */
+ struct huft* td; /* distance code table */
+ int bl; /* lookup bits for tl */
+ int bd; /* lookup bits for td */
+ unsigned nb; /* number of bit length codes */
+ unsigned nl; /* number of literal/length codes */
+ unsigned nd; /* number of distance codes */
+ static unsigned ll[288 + 32]; /* literal/length and distance code lengths */
+ register ulg b; /* bit buffer */
+ register unsigned k; /* number of bits in bit buffer */
+
+ /* make local bit buffer */
+ b = bb;
+ k = bk;
+ w = wp;
+
+ /* read in table lengths */
+ NEEDBITS(5)
+ nl = 257 + ((unsigned)b & 0x1f); /* number of literal/length codes */
+ DUMPBITS(5)
+ NEEDBITS(5)
+ nd = 1 + ((unsigned)b & 0x1f); /* number of distance codes */
+ DUMPBITS(5)
+ NEEDBITS(4)
+ nb = 4 + ((unsigned)b & 0xf); /* number of bit length codes */
+ DUMPBITS(4)
+ if (nl > 288 || nd > 32) {
+ return 1; /* bad lengths */
+ }
+
+ /* read in bit-length-code lengths */
+ for (j = 0; j < nb; j++) {
+ NEEDBITS(3)
+ ll[border[j]] = (unsigned)b & 7;
+ DUMPBITS(3)
+ }
+ for (; j < 19; j++) {
+ ll[border[j]] = 0;
+ }
+
+ /* build decoding table for trees--single level, 7 bit lookup */
+ bl = 7;
+ if ((i = huft_build(ll, 19, 19, NULL, NULL, &tl, &bl)) != 0) {
+ if (i == 1) {
+ huft_free(tl);
+ }
+ return i; /* incomplete code set */
+ }
+
+ /* read in literal and distance code lengths */
+ n = nl + nd;
+ m = mask_bits[bl];
+ i = l = 0;
+ while ((unsigned)i < n) {
+ NEEDBITS((unsigned)bl)
+ j = (td = tl + ((unsigned)b & m))->b;
+ DUMPBITS(j)
+ j = td->v.n;
+ if (j < 16) { /* length of code in bits (0..15) */
+ ll[i++] = l = j; /* save last length in l */
+ } else if (j == 16) { /* repeat last length 3 to 6 times */
+ NEEDBITS(2)
+ j = 3 + ((unsigned)b & 3);
+ DUMPBITS(2)
+ if ((unsigned)i + j > n) {
+ return 1;
+ }
+ while (j--) {
+ ll[i++] = l;
+ }
+ } else if (j == 17) { /* 3 to 10 zero length codes */
+ NEEDBITS(3)
+ j = 3 + ((unsigned)b & 7);
+ DUMPBITS(3)
+ if ((unsigned)i + j > n) {
+ return 1;
+ }
+ while (j--) {
+ ll[i++] = 0;
+ }
+ l = 0;
+ } else { /* j == 18: 11 to 138 zero length codes */
+ NEEDBITS(7)
+ j = 11 + ((unsigned)b & 0x7f);
+ DUMPBITS(7)
+ if ((unsigned)i + j > n) {
+ return 1;
+ }
+ while (j--) {
+ ll[i++] = 0;
+ }
+ l = 0;
+ }
+ }
+
+ /* free decoding table for trees */
+ huft_free(tl);
+
+ /* restore the global bit buffer */
+ bb = b;
+ bk = k;
+
+ /* build the decoding tables for literal/length and distance codes */
+ bl = lbits;
+ if ((i = huft_build(ll, nl, 257, cplens, cplext, &tl, &bl)) != 0) {
+ if (i == 1) {
+ Trace((stderr, " incomplete literal tree\n"));
+ huft_free(tl);
+ }
+ return i; /* incomplete code set */
+ }
+ bd = dbits;
+ if ((i = huft_build(ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0) {
+ if (i == 1) {
+ Trace((stderr, " incomplete distance tree\n"));
+ i = 0;
+ }
+ }
+
+ /* decompress until an end-of-block code */
+ if (inflate_codes(tl, td, bl, bd) != 0) {
+ return 1;
+ }
+
+ /* free the decoding tables */
+ huft_free(td);
+ huft_free(tl);
+
+ return 0;
+}
+
+/* decompress an inflated block */
+/* E is the last block flag */
+int inflate_block(int* e) {
+ unsigned t; /* block type */
+ UNUSED unsigned w; /* current window position */
+ register ulg b; /* bit buffer */
+ register unsigned k; /* number of bits in bit buffer */
+
+ /* make local bit buffer */
+ b = bb;
+ k = bk;
+ w = wp;
+
+ /* read in last block bit */
+ NEEDBITS(1)
+ *e = (int)b & 1;
+ DUMPBITS(1)
+
+ /* read in block type */
+ NEEDBITS(2)
+ t = (unsigned)b & 3;
+ DUMPBITS(2)
+
+ /* restore the global bit buffer */
+ bb = b;
+ bk = k;
+
+ /* inflate that block type */
+ if (t == 2) {
+ return inflate_dynamic();
+ }
+ if (t == 0) {
+ return inflate_stored();
+ }
+ if (t == 1) {
+ return inflate_fixed();
+ }
+
+ /* bad block type */
+ return 2;
+}
+
+/* decompress an inflated entry */
+int inflate(void) {
+ int e; /* last block flag */
+ int r; /* result code */
+ unsigned h; /* maximum struct huft's malloc'ed */
+
+ /* initialize window, bit buffer */
+ wp = 0;
+ bk = 0;
+ bb = 0;
+
+ gzip_malloc_tmp = 0;
+ gzip_malloc_addr = gzip_mem_buff;
+
+ /* decompress until the last block */
+ h = 0;
+ do {
+ hufts = 0;
+ if ((r = inflate_block(&e)) != 0) {
+ return r;
+ }
+ if (hufts > h) {
+ h = hufts;
+ }
+ } while (!e);
+
+ /* Undo too much lookahead. The next read will be byte aligned so we
+ * can discard unused bits in the last meaningful byte.
+ */
+ while (bk >= 8) {
+ bk -= 8;
+ inptr--;
+ }
+
+ /* flush out slide */
+ flush_output(wp);
+
+ /* return success */
+ Trace((stderr, "<%u> ", h));
+ return 0;
+}
+
+size_t gzip_read(GzipFileDescriptor* romInput, void* dst, size_t blockSize) {
+ size_t alignedSize;
+
+ if (blockSize > (size_t)romInput->size) {
+ blockSize = romInput->size;
+ }
+
+ alignedSize = ALIGN8(blockSize);
+ if (alignedSize > 0) {
+ DmaMgr_DmaRomToRam(romInput->addr, dst, alignedSize);
+ }
+
+ romInput->size -= alignedSize;
+ romInput->addr += alignedSize;
+ if (romInput->size < 0) {
+ romInput->size = 0;
+ }
+
+ return blockSize;
+}
+
+int unzip(void) {
+ int ret = inflate();
+
+ if (ret == 3) {
+ return -1;
+ }
+
+ if (ret != 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
+void clear_bufs(void) {
+ insize = inptr = 0;
+}
+
+int fill_inbuf(int eof_ok) {
+ int len;
+
+ /* Read as much as possible */
+ insize = 0;
+ do {
+ len = gzip_read(&ifd, (char*)inbuf + insize, INBUFSIZ - insize);
+ if (len == 0 || len == -1) {
+ break;
+ }
+ insize += len;
+ } while (insize < INBUFSIZ);
+
+ if (insize == 0) {
+ if (eof_ok) {
+ return EOF;
+ }
+ }
+
+ inptr = 1;
+ return inbuf[0];
+}
+
+void flush_window(void) {
+ outcnt = 0;
+}
+
+void gzip_decompress(uintptr_t romStart, u8* dst, size_t size) {
+ ifd.addr = romStart;
+ ifd.size = size;
+
+ output_ptr = dst;
+
+ clear_bufs();
+ unzip();
+}
diff --git a/src/boot/is_debug_ique.c b/src/boot/is_debug_ique.c
new file mode 100644
index 0000000000..a78fef8235
--- /dev/null
+++ b/src/boot/is_debug_ique.c
@@ -0,0 +1,8 @@
+void osSyncPrintfUnused() {
+}
+
+void osSyncPrintf() {
+}
+
+void rmonPrintf() {
+}
diff --git a/src/boot/mio0.s b/src/boot/mio0.s
index a3fb8eba26..a6c2eee6bc 100644
--- a/src/boot/mio0.s
+++ b/src/boot/mio0.s
@@ -1,10 +1,7 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* void Mio0_Decompress(void* src, void* dst);
@@ -12,53 +9,56 @@
* Decompress Mio0 chunk
*/
LEAF(Mio0_Decompress)
- lw $a3, 8($a0) // compressed offset
- lw $t9, 0xC($a0) // uncompressed offset
- lw $t8, 4($a0) // decompressed length
- add $a3, $a3, $a0 // compressed start
- add $t9, $t9, $a0 // uncompressed start
- move $a2, $zero // 0
- addi $a0, $a0, 0x10 // move past header
- add $t8, $t8, $a1 // dst + decompressed length = end
+ lw a3, 0x08(a0) /* compressed offset */
+ lw t9, 0x0C(a0) /* uncompressed offset */
+ lw t8, 0x04(a0) /* decompressed length */
+ add a3, a3, a0 /* compressed start */
+ add t9, t9, a0 /* uncompressed start */
+ move a2, zero /* 0 */
+ addi a0, a0, 0x10 /* move past header */
+ add t8, t8, a1 /* dst + decompressed length = end */
mainloop:
- bnez $a2, 1f
- nop
- lw $t0, ($a0)
- li $a2, 32
- addi $a0, $a0, 4
+ bnez a2, 1f
+
+ lw t0, (a0)
+ li a2, 32
+ addi a0, a0, 4
1:
- slt $t1, $t0, $zero
- beqz $t1, read_comp
- nop
- lb $t2, ($t9) // read 1 byte from uncompressed data
- addi $t9, $t9, 1 // advance uncompressed start
- addi $a1, $a1, 1
+ slt t1, t0, zero
+ beqz t1, read_comp
+
+ lb t2, (t9) /* read 1 byte from uncompressed data */
+ sb t2, (a1) /* store uncompressed byte */
+ addi t9, t9, 1 /* advance uncompressed start */
+ addi a1, a1, 1
b next_iter
- sb $t2, -1($a1) // store uncompressed byte
+
read_comp:
- lhu $t2, ($a3) // read 2 bytes from compressed data
- addi $a3, $a3, 2 // advance compressed start
- srl $t3, $t2, 0xC
- andi $t2, $t2, 0xFFF
- beqz $t3, 3f
- sub $t1, $a1, $t2
- addi $t3, $t3, 2
+ lhu t2, (a3) /* read 2 bytes from compressed data */
+ addi a3, a3, 2 /* advance compressed start */
+ srl t3, t2, 0xC
+ andi t2, t2, 0xFFF
+ sub t1, a1, t2
+ beqz t3, 3f
+
+ addi t3, t3, 2
2:
- lb $t2, -1($t1)
- addi $t3, $t3, -1
- addi $t1, $t1, 1
- addi $a1, $a1, 1
- bnez $t3, 2b
- sb $t2, -1($a1)
+ lb t2, -1(t1)
+ addi t3, t3, -1
+ addi t1, t1, 1
+ sb t2, (a1)
+ addi a1, a1, 1
+ bnez t3, 2b
+
next_iter:
- sll $t0, $t0, 1
- bne $a1, $t8, mainloop // continue until decompressed length is reached
- addi $a2, $a2, -1
- jr $ra
- nop
+ sll t0, t0, 1
+ addi a2, a2, -1
+ bne a1, t8, mainloop /* continue until decompressed length is reached */
+
+ jr ra
3:
- lbu $t3, ($t9)
- addi $t9, $t9, 1
+ lbu t3, (t9)
+ addi t9, t9, 1
+ addi t3, t3, 0x12
b 2b
- addi $t3, $t3, 0x12
END(Mio0_Decompress)
diff --git a/src/boot/z_locale.c b/src/boot/z_locale.c
index 41c6ea00c4..f320f1e0f4 100644
--- a/src/boot/z_locale.c
+++ b/src/boot/z_locale.c
@@ -7,7 +7,7 @@
s32 gCurrentRegion = 0;
void Locale_Init(void) {
-#if PLATFORM_N64
+#if !PLATFORM_GC
ALIGNED(4) u8 regionInfo[4];
u8 countryCode;
@@ -24,6 +24,7 @@ void Locale_Init(void) {
countryCode = sCartInfo.countryCode;
#endif
+#if !PLATFORM_IQUE
switch (countryCode) {
case 'J': // "NTSC-J (Japan)"
gCurrentRegion = REGION_JP;
@@ -37,16 +38,19 @@ void Locale_Init(void) {
break;
#endif
default:
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF(T("z_locale_init: 日本用かアメリカ用か判別できません\n",
"z_locale_init: Can't tell if it's for Japan or America\n"));
- LogUtils_HungupThread("../z_locale.c", LN4(86, 92, 101, 118));
+ LogUtils_HungupThread("../z_locale.c", LN4(86, 92, 101, UNK_LINE, 118));
PRINTF(VT_RST);
break;
}
PRINTF(T("z_locale_init:日本用かアメリカ用か3コンで判断させる\n",
"z_locale_init: Determine whether it is for Japan or America using 3 controls\n"));
+#else
+ gCurrentRegion = REGION_US;
+#endif
}
void Locale_ResetRegion(void) {
diff --git a/src/boot/z_std_dma.c b/src/boot/z_std_dma.c
index d962f67889..8fe2982e7b 100644
--- a/src/boot/z_std_dma.c
+++ b/src/boot/z_std_dma.c
@@ -28,7 +28,7 @@
#endif
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.2:82 pal-1.0:80 pal-1.1:80"
+ "ntsc-1.2:70 pal-1.0:68 pal-1.1:68"
StackEntry sDmaMgrStackInfo;
OSMesgQueue sDmaMgrMsgQueue;
@@ -53,11 +53,20 @@ const char* sDmaMgrFileNames[] = {
#include "tables/dmadata_table.h"
};
-#endif
-
#undef DEFINE_DMA_ENTRY
-#if PLATFORM_N64 || DEBUG_FEATURES
+#endif
+
+#define SET_IOMSG(ioMsg, queue, rom, ram, buffSize) \
+ do { \
+ (ioMsg).hdr.pri = OS_MESG_PRI_NORMAL; \
+ (ioMsg).hdr.retQueue = (queue); \
+ (ioMsg).devAddr = (rom); \
+ (ioMsg).dramAddr = (ram); \
+ (ioMsg).size = (buffSize); \
+ } while (0)
+
+#if !PLATFORM_GC || DEBUG_FEATURES
/**
* Compares `str1` and `str2`.
*
@@ -103,6 +112,9 @@ s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size) {
OSMesg msg;
s32 ret;
size_t buffSize = gDmaMgrDmaBuffSize;
+#if DEBUG_FEATURES
+ UNUSED s32 pad;
+#endif
if (buffSize == 0) {
buffSize = DMAMGR_DEFAULT_BUFSIZE;
@@ -116,13 +128,7 @@ s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size) {
// The system avoids large DMAs as these would stall the PI for too long, potentially causing issues with
// audio. To allow audio to continue to DMA whenever it needs to, other DMAs are split into manageable chunks.
- if (1) {} // Necessary to match
-
- ioMsg.hdr.pri = OS_MESG_PRI_NORMAL;
- ioMsg.hdr.retQueue = &queue;
- ioMsg.devAddr = rom;
- ioMsg.dramAddr = ram;
- ioMsg.size = buffSize;
+ SET_IOMSG(ioMsg, &queue, rom, ram, buffSize);
if (gDmaMgrVerbose == 10) {
PRINTF(T("%10lld ノーマルDMA %08x %08x %08x (%d)\n", "%10lld Normal DMA %08x %08x %08x (%d)\n"),
@@ -151,15 +157,9 @@ s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size) {
ram = (u8*)ram + buffSize;
}
- if (1) { // Also necessary to match
- s32 pad[2];
- }
+ SET_IOMSG(ioMsg, &queue, rom, ram, size);
- ioMsg.hdr.pri = OS_MESG_PRI_NORMAL;
- ioMsg.hdr.retQueue = &queue;
- ioMsg.devAddr = rom;
- ioMsg.dramAddr = ram;
- ioMsg.size = size;
+ { UNUSED s32 pad2; }
if (gDmaMgrVerbose == 10) {
PRINTF(T("%10lld ノーマルDMA %08x %08x %08x (%d)\n", "%10lld Normal DMA %08x %08x %08x (%d)\n"),
@@ -242,11 +242,7 @@ void DmaMgr_DmaFromDriveRom(void* ram, uintptr_t rom, size_t size) {
osInvalDCache(ram, size);
osCreateMesgQueue(&queue, &msg, 1);
- ioMsg.hdr.retQueue = &queue;
- ioMsg.hdr.pri = OS_MESG_PRI_NORMAL;
- ioMsg.devAddr = rom;
- ioMsg.dramAddr = ram;
- ioMsg.size = size;
+ SET_IOMSG(ioMsg, &queue, rom, ram, size);
handle->transferInfo.cmdType = 2;
osEPiStartDma(handle, &ioMsg, OS_READ);
@@ -272,7 +268,7 @@ NORETURN void DmaMgr_Error(DmaRequest* req, const char* filename, const char* er
char buff2[80];
PRINTF("%c", BEL);
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("DMA致命的エラー(%s)\nROM:%X RAM:%X SIZE:%X %s\n", "DMA Fatal Error (%s)\nROM:%X RAM:%X SIZE:%X %s\n"),
errorDesc != NULL ? errorDesc : (errorName != NULL ? errorName : "???"), vrom, ram, size,
filename != NULL ? filename : "???");
@@ -283,7 +279,7 @@ NORETURN void DmaMgr_Error(DmaRequest* req, const char* filename, const char* er
PRINTF("DMA ERROR: %s %d", sDmaMgrCurFileName, sDmaMgrCurFileLine);
}
- PRINTF(VT_RST);
+ PRINTF_RST();
if (req->filename != NULL) {
sprintf(buff1, "DMA ERROR: %s %d", req->filename, req->line);
@@ -350,7 +346,7 @@ const char* DmaMgr_GetFileName(uintptr_t vrom) {
return ret;
#elif PLATFORM_GC
return "";
-#elif PLATFORM_N64
+#else
return "??";
#endif
}
@@ -380,19 +376,16 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
if (vrom >= iter->file.vromStart && vrom < iter->file.vromEnd) {
// Found the region this request falls into
-#if PLATFORM_N64
- // Based on the MM Debug ROM, these strings are part of the condition for the empty if statement below,
- // as `... && DmaMgr_StrCmp("", "kanji") != 0 && DmaMgr_StrCmp("", "link_animetion") != 0`
- (void)"";
- (void)"kanji";
- (void)"";
- (void)"link_animetion";
-#endif
-
if (0) {
- // The string is defined in .rodata of debug builds but not used, suggesting a debug print is here
- // but was optimized out in some way.
- PRINTF("DMA ROM:%08X RAM:%08X SIZE:%08X %s\n", vrom, ram, size, filename);
+#if !PLATFORM_GC
+ // Based on the MM Debug ROM, these strings are part of the condition for the empty if statement below
+ if (DmaMgr_StrCmp("", "kanji") != 0 && DmaMgr_StrCmp("", "link_animetion") != 0)
+#endif
+ {
+ // The string is defined in .rodata of debug builds but not used, suggesting a debug print is here
+ // but was optimized out in some way.
+ PRINTF("DMA ROM:%08X RAM:%08X SIZE:%08X %s\n", vrom, ram, size, filename);
+ }
}
if (iter->romEnd == 0) {
@@ -405,10 +398,10 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, filename, "Segment Alignment Error",
T("セグメント境界をまたがってDMA転送することはできません",
"DMA transfers cannot cross segment boundaries"),
- "../z_std_dma.c", LN3(575, 578, 726));
+ "../z_std_dma.c", LN3(575, 578, 595, 726));
}
- DmaMgr_DmaRomToRam(iter->romStart + (vrom - iter->file.vromStart), ram, size);
+ DmaMgr_DmaRomToRam(iter->romStart + vrom - iter->file.vromStart, ram, size);
found = true;
if (0) {
@@ -417,16 +410,16 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
} else {
// File is compressed. Files that are stored compressed must be loaded into RAM all at once.
- romStart = iter->romStart;
romSize = iter->romEnd - iter->romStart;
+ romStart = iter->romStart;
- if (vrom != iter->file.vromStart) {
+ if (iter->file.vromStart != vrom) {
// Error, requested vrom is not the start of a file
DMA_ERROR(req, filename, "Can't Transfer Segment",
T("圧縮されたセグメントの途中からはDMA転送することはできません",
"DMA transfer cannot be performed from the middle of a compressed segment"),
- "../z_std_dma.c", LN3(595, 598, 746));
+ "../z_std_dma.c", LN3(595, 598, 615, 746));
}
if (size != iter->file.vromEnd - iter->file.vromStart) {
@@ -435,13 +428,19 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, filename, "Can't Transfer Segment",
T("圧縮されたセグメントの一部だけをDMA転送することはできません",
"It is not possible to DMA only part of a compressed segment"),
- "../z_std_dma.c", LN3(601, 604, 752));
+ "../z_std_dma.c", LN3(601, 604, 621, 752));
}
// Reduce the thread priority and decompress the file, the decompression routine handles the DMA
// in chunks. Restores the thread priority when done.
osSetThreadPri(NULL, THREAD_PRI_DMAMGR_LOW);
+
+#if !PLATFORM_IQUE
Yaz0_Decompress(romStart, ram, romSize);
+#else
+ gzip_decompress(romStart, ram, romSize);
+#endif
+
osSetThreadPri(NULL, THREAD_PRI_DMAMGR);
found = true;
@@ -452,7 +451,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
break;
}
-#if PLATFORM_N64
+#if !PLATFORM_GC
if (i != 0) {
i += 4;
}
@@ -469,11 +468,12 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, NULL, "DATA DON'T EXIST",
T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c",
- LN3(621, 624, 771));
+ LN3(621, 624, 641, 771));
return;
} else {
// ROM is uncompressed, allow arbitrary DMA even if the region is not marked in the filesystem
- DmaMgr_DmaRomToRam(vrom, ram, size);
+ romStart = vrom;
+ DmaMgr_DmaRomToRam(romStart, ram, size);
if (0) {
PRINTF(T("No Press ROM:%08X RAM:%08X SIZE:%08X (非公式)\n",
@@ -534,6 +534,10 @@ s32 DmaMgr_RequestAsync(DmaRequest* req, void* ram, uintptr_t vrom, size_t size,
OSMesg msg) {
static s32 sDmaMgrQueueFullLogged = 0;
+#if PLATFORM_IQUE
+ PRINTF("dmacopy_bg(%x, %x, %x, %x, %x, %x, %x)\n", req, ram, vrom, size, unk, queue, msg);
+#endif
+
#if DEBUG_FEATURES
if ((ram == NULL) || (osMemSize < OS_K0_TO_PHYSICAL(ram) + size) || (vrom & 1) || (vrom > 0x4000000) ||
(size == 0) || (size & 1)) {
@@ -562,12 +566,12 @@ s32 DmaMgr_RequestAsync(DmaRequest* req, void* ram, uintptr_t vrom, size_t size,
if (1 && (sDmaMgrQueueFullLogged == 0) && MQ_IS_FULL(&sDmaMgrMsgQueue)) {
sDmaMgrQueueFullLogged++;
PRINTF("%c", BEL);
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("dmaEntryMsgQが一杯です。キューサイズの再検討をおすすめします。",
"dmaEntryMsgQ is full. Reconsider your queue size."));
LOG_NUM("(sizeof(dmaEntryMsgBufs) / sizeof(dmaEntryMsgBufs[0]))", ARRAY_COUNT(sDmaMgrMsgBuf), "../z_std_dma.c",
952);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
#endif
@@ -608,9 +612,10 @@ void DmaMgr_Init(void) {
// DMA the dma data table to RAM
DmaMgr_DmaRomToRam((uintptr_t)_dmadataSegmentRomStart, _dmadataSegmentStart,
(u32)(_dmadataSegmentRomEnd - _dmadataSegmentRomStart));
- PRINTF("dma_rom_ad[]\n");
#if DEBUG_FEATURES
+ PRINTF("dma_rom_ad[]\n");
+
name = sDmaMgrFileNames;
iter = gDmaDataTable;
idx = 0;
@@ -641,7 +646,7 @@ void DmaMgr_Init(void) {
PRINTF("_bootSegmentRomStart(%08x) != dma_rom_ad[0].rom_b(%08x)\n", _bootSegmentRomStart,
gDmaDataTable[0].file.vromEnd);
//! @bug The main code file where fault.c resides is not yet loaded
- Fault_AddHungupAndCrash("../z_std_dma.c", LN3(837, 840, 1055));
+ Fault_AddHungupAndCrash("../z_std_dma.c", LN3(837, 840, 859, 1055));
}
// Start the DMA manager
diff --git a/src/boot/zlib.c b/src/boot/zlib.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/boot/zlib.c
@@ -0,0 +1 @@
+
diff --git a/src/code/db_camera.c b/src/code/db_camera.c
index 7721a28bcf..1045df9ca2 100644
--- a/src/code/db_camera.c
+++ b/src/code/db_camera.c
@@ -1,7 +1,5 @@
#include "global.h"
-#if DEBUG_FEATURES
-
#define DEBUG_CAM_CONTROLLER_PORT 2
static PlayState* sPlay;
@@ -2368,5 +2366,3 @@ void func_800BB060(void) {
int func_800BB06C(void) {
return sDebugCamPtr->unk_00 == 2 && sDebugCamAnim.unk_0A != 0;
}
-
-#endif
diff --git a/src/code/fault_gc.c b/src/code/fault_gc.c
index af69321590..059162c162 100644
--- a/src/code/fault_gc.c
+++ b/src/code/fault_gc.c
@@ -40,10 +40,8 @@
* DPad-Up may be pressed to enable sending fault pages over osSyncPrintf as well as displaying them on-screen.
* DPad-Down disables sending fault pages over osSyncPrintf.
*/
-#if PLATFORM_GC
-
-#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-eu-mq-dbg:160 gc-jp:176 gc-jp-ce:176 gc-jp-mq:176 gc-us:176" \
- "gc-us-mq:176"
+#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-eu-mq-dbg:160 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160" \
+ "gc-us-mq:160"
#include "global.h"
#include "alloca.h"
@@ -1340,5 +1338,3 @@ NORETURN void Fault_AddHungupAndCrash(const char* file, int line) {
sprintf(msg, "HungUp %s:%d", file, line);
Fault_AddHungupAndCrashImpl(msg, NULL);
}
-
-#endif
diff --git a/src/code/fault_gc_drawer.c b/src/code/fault_gc_drawer.c
index 808b258497..9d3478a48f 100644
--- a/src/code/fault_gc_drawer.c
+++ b/src/code/fault_gc_drawer.c
@@ -9,8 +9,6 @@
#include "terminal.h"
#pragma increment_block_number "gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128"
-#if PLATFORM_GC
-
typedef struct FaultDrawer {
/* 0x00 */ u16* fb;
/* 0x04 */ u16 w;
@@ -344,5 +342,3 @@ void Fault_InitDrawer(void) {
bcopy(&sFaultDrawerDefault, &sFaultDrawer, sizeof(FaultDrawer));
sFaultDrawer.fb = (u16*)(PHYS_TO_K0(osMemSize) - sizeof(u16[SCREEN_HEIGHT][SCREEN_WIDTH]));
}
-
-#endif
diff --git a/src/code/fault_n64.c b/src/code/fault_n64.c
index 7ea68abeb8..720307c0a1 100644
--- a/src/code/fault_n64.c
+++ b/src/code/fault_n64.c
@@ -1,5 +1,3 @@
-#if PLATFORM_N64
-
#pragma increment_block_number "ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
#include "global.h"
@@ -849,5 +847,3 @@ NORETURN void Fault_AddHungupAndCrash(const char* file, int line) {
sprintf(msg, "HungUp %s:%d", file, line);
Fault_AddHungupAndCrashImpl(msg, NULL);
}
-
-#endif
diff --git a/src/code/game.c b/src/code/game.c
index 2bed93e965..4367839528 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -391,7 +391,7 @@ void GameState_InitArena(GameState* gameState, size_t size) {
} else {
THA_Init(&gameState->tha, NULL, 0);
PRINTF(T("ハイラル確保失敗\n", "Failure to secure Hyrule\n"));
- HUNGUP_AND_CRASH("../game.c", LN4(895, 898, 985, 999));
+ HUNGUP_AND_CRASH("../game.c", LN4(895, 898, 985, 999, 999));
}
}
@@ -409,12 +409,12 @@ void GameState_Realloc(GameState* gameState, size_t size) {
SystemArena_GetSizes(&systemMaxFree, &systemFree, &systemAlloc);
if ((systemMaxFree - 0x10) < size) {
PRINTF("%c", BEL);
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("メモリが足りません。ハイラルサイズを可能な最大値に変更します\n",
"Not enough memory. Change Hyrule size to maximum possible value\n"));
PRINTF("(hyral=%08x max=%08x free=%08x alloc=%08x)\n", size, systemMaxFree, systemFree, systemAlloc);
- PRINTF(VT_RST);
+ PRINTF_RST();
size = systemMaxFree - 0x10;
}
@@ -432,7 +432,7 @@ void GameState_Realloc(GameState* gameState, size_t size) {
SystemArena_Display();
#endif
- HUNGUP_AND_CRASH("../game.c", LN4(940, 943, 1030, 1044));
+ HUNGUP_AND_CRASH("../game.c", LN4(940, 943, 1030, 1044, 1044));
}
}
@@ -557,9 +557,9 @@ void* GameState_Alloc(GameState* gameState, size_t size, const char* file, int l
}
}
if (ret != NULL) {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("game_alloc(%08x) %08x-%08x [%s:%d]\n", size, ret, (uintptr_t)ret + size, file, line);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
return ret;
}
diff --git a/src/code/graph.c b/src/code/graph.c
index 84186386e3..046e04d374 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -188,9 +188,9 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx) {
if (msg == (OSMesg)666) {
#if DEBUG_FEATURES
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("RCPが帰ってきませんでした。", "RCP did not return."));
- PRINTF(VT_RST);
+ PRINTF_RST();
LogUtils_LogHexDump((void*)PHYS_TO_K1(SP_BASE_REG), 0x20);
LogUtils_LogHexDump((void*)PHYS_TO_K1(DPC_BASE_REG), 0x20);
@@ -380,7 +380,7 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
PRINTF("%c", BEL);
PRINTF(VT_COL(RED, WHITE) T("ダイナミック領域先頭が破壊されています\n", "Dynamic area head is destroyed\n")
VT_RST);
- Fault_AddHungupAndCrash("../graph.c", LN4(937, 940, 951, 1070));
+ Fault_AddHungupAndCrash("../graph.c", LN4(937, 940, 951, 1067, 1070));
}
if (pool->tailMagic != GFXPOOL_TAIL_MAGIC) {
@@ -388,7 +388,7 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
PRINTF("%c", BEL);
PRINTF(VT_COL(RED, WHITE)
T("ダイナミック領域末尾が破壊されています\n", "Dynamic region tail is destroyed\n") VT_RST);
- Fault_AddHungupAndCrash("../graph.c", LN4(943, 946, 957, 1076));
+ Fault_AddHungupAndCrash("../graph.c", LN4(943, 946, 957, 1073, 1076));
}
}
@@ -481,7 +481,7 @@ void Graph_ThreadEntry(void* arg0) {
sprintf(faultMsg, "CLASS SIZE= %d bytes", size);
Fault_AddHungupAndCrashImpl("GAME CLASS MALLOC FAILED", faultMsg);
#else
- Fault_AddHungupAndCrash("../graph.c", LN4(1067, 1070, 1081, 1200));
+ Fault_AddHungupAndCrash("../graph.c", LN4(1067, 1070, 1081, 1197, 1200));
#endif
}
diff --git a/src/code/irqmgr.c b/src/code/irqmgr.c
index 3a1e3cdf55..59d7a41cfa 100644
--- a/src/code/irqmgr.c
+++ b/src/code/irqmgr.c
@@ -185,11 +185,11 @@ void IrqMgr_CheckStacks(void) {
PRINTF(T("スタックは大丈夫みたいです\n", "The stack looks ok\n"));
} else {
PRINTF("%c", BEL);
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("スタックがオーバーフローしたか危険な状態です\n", "Stack overflow or dangerous\n"));
PRINTF(T("早々にスタックサイズを増やすか、スタックを消費しないようにしてください\n",
"Increase stack size early or don't consume stack\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
}
}
diff --git a/src/code/kanread.s b/src/code/kanread.s
index a163f9ead7..fdf69ed9be 100644
--- a/src/code/kanread.s
+++ b/src/code/kanread.s
@@ -1,11 +1,7 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* s32 Kanji_OffsetFromShiftJIS(s32 sjis);
@@ -26,64 +22,57 @@
* @remark Almost identical to "LeoGetKadr" from libleo.
*/
LEAF(Kanji_OffsetFromShiftJIS)
- // Characters with codepoints >= 0x8800 are kanji. Arrangement is regular,
- // so convert index directly.
- li $at, 0x8800
- slt $at, $a0, $at
- bnez $at, .nonkanji
- // 0xBC is number of glyphs in one block in the `kanji` file:
- // 0x100 possible codepoints with the same byte1
- // - 0x40 unused at beginning
- // - 1 unused at 0x7F
- // - 3 unused at 0xFD, 0xFE, 0xFF
- li $a2, 0xBC
- // Get byte1 and adjust so starts at 0
- srl $a1, $a0, 8
- addi $a1, $a1, -0x88
- multu $a2, $a1
- // Get byte2 and adjust so starts at 0
- andi $a3, $a0, 0xFF
- addi $a3, $a3, -0x40
- slti $at, $a3, (0x80 - 0x40)
- mflo $a2
- // 0x__7F is always empty and elided in the file, so decrement if larger
- bnezl $at, .kanji_lower_halfblock
- mflo $a2
- addi $a3, $a3, -1
- mflo $a2
-.kanji_lower_halfblock:
- addi $a3, $a3, 0x30A
- add $a3, $a3, $a2
- jr $ra
- sll $v0, $a3, 7
- // returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE
+ /* Characters with codepoints >= 0x8800 are kanji. Arrangement is regular, */
+ /* so convert index directly. */
+ li a2, 0xBC
+ blt a0, 0x8800, .nonkanji
+ /* 0xBC is number of glyphs in one block in the `kanji` file: */
+ /* 0x100 possible codepoints with the same byte1 */
+ /* - 0x40 unused at beginning */
+ /* - 1 unused at 0x7F */
+ /* - 3 unused at 0xFD, 0xFE, 0xFF */
+ /* Get byte1 and adjust so starts at 0 */
+ srl a1, a0, 8
+ addi a1, a1, -0x88
+ /* Get byte2 and adjust so starts at 0 */
+ andi a3, a0, 0xFF
+ addi a3, a3, -0x40
+ mul a2, a2, a1
+ blt a3, 0x40, .kanji_lower_halfblock
-// Non-kanji are arranged with irregular gaps, use the lookup table.
+ /* 0x__7F is always empty and elided in the file, so decrement if larger */
+ addi a3, a3, -1
+.kanji_lower_halfblock:
+ mflo a2 /* Unncessary mflo: the pseudo-op `mul` already performs mflo */
+ addi a3, a3, 0x30A
+ add a3, a3, a2
+ /* returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE */
+ sll v0, a3, 7
+ jr ra
+
+/* Non-kanji are arranged with irregular gaps, use the lookup table. */
.nonkanji:
- // Get byte1 and adjust so starts at 0
- srl $a1, $a0, 8
- addi $a1, $a1, -0x81
- multu $a2, $a1
- // Get byte2 and adjust so starts at 0
- andi $a3, $a0, 0xFF
- addi $a3, $a3, -0x40
- slti $at, $a3, (0x80 - 0x40)
- mflo $a2
- // 0x__7F is always empty and elided in the file, so decrement if larger
- bnezl $at, .nonkanji_lower_halfblock
- mflo $a2
- addi $a3, $a3, -1
- mflo $a2
+ /* Get byte1 and adjust so starts at 0 */
+ srl a1, a0, 8
+ addi a1, a1, -0x81
+ /* Get byte2 and adjust so starts at 0 */
+ andi a3, a0, 0xFF
+ addi a3, a3, -0x40
+ mul a2, a2, a1
+ blt a3, 0x40, .nonkanji_lower_halfblock
+
+ /* 0x__7F is always empty and elided in the file, so decrement if larger */
+ addi a3, a3, -1
.nonkanji_lower_halfblock:
- add $a3, $a3, $a2
- lui $a2, %hi(sNonKanjiIndices)
- sll $a3, $a3, 1
- addiu $a2, %lo(sNonKanjiIndices)
- add $a3, $a3, $a2
- lh $a2, ($a3)
- jr $ra
- sll $v0, $a2, 7
- // returns sNonKanjiIndices[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE
+ mflo a2 /* Unncessary mflo: the pseudo-op `mul` already performs mflo */
+ add a3, a3, a2
+ sll a3, a3, 1
+ la a2, sNonKanjiIndices
+ add a3, a3, a2
+ lh a2, (a3)
+ /* returns sNonKanjiIndices[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE */
+ sll v0, a2, 7
+ jr ra
END(Kanji_OffsetFromShiftJIS)
/**
@@ -116,7 +105,7 @@ END(Kanji_OffsetFromShiftJIS)
* into blocks by high byte.
*/
DATA(sNonKanjiIndices)
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x814_ */ .half 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F
/* 0x815_ */ .half 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F
/* 0x816_ */ .half 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F
@@ -130,7 +119,7 @@ DATA(sNonKanjiIndices)
/* 0x81E_ */ .half 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x81F_ */ .half 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0091
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x824_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0092
/* 0x825_ */ .half 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x826_ */ .half 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB
@@ -144,7 +133,7 @@ DATA(sNonKanjiIndices)
/* 0x82E_ */ .half 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011A, 0x011B, 0x011C, 0x011D, 0x011E, 0x011F, 0x0120
/* 0x82F_ */ .half 0x0121, 0x0122, 0x0123, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x834_ */ .half 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, 0x012A, 0x012B, 0x012C, 0x012D, 0x012E, 0x012F, 0x0130, 0x0131, 0x0132, 0x0133
/* 0x835_ */ .half 0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013A, 0x013B, 0x013C, 0x013D, 0x013E, 0x013F, 0x0140, 0x0141, 0x0142, 0x0143
/* 0x836_ */ .half 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, 0x014A, 0x014B, 0x014C, 0x014D, 0x014E, 0x014F, 0x0150, 0x0151, 0x0152, 0x0153
@@ -158,7 +147,7 @@ DATA(sNonKanjiIndices)
/* 0x83E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x83F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x844_ */ .half 0x01AB, 0x01AC, 0x01AD, 0x01AE, 0x01AF, 0x01B0, 0x01B1, 0x01B2, 0x01B3, 0x01B4, 0x01B5, 0x01B6, 0x01B7, 0x01B8, 0x01B9, 0x01BA
/* 0x845_ */ .half 0x01BB, 0x01BC, 0x01BD, 0x01BE, 0x01BF, 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C4, 0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA
/* 0x846_ */ .half 0x01CB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
@@ -172,7 +161,7 @@ DATA(sNonKanjiIndices)
/* 0x84E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x84F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x854_ */ .half 0x020E, 0x020F, 0x0210, 0x0211, 0x0212, 0x0213, 0x0214, 0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D
/* 0x855_ */ .half 0x021E, 0x021F, 0x0220, 0x0221, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0222, 0x0223
/* 0x856_ */ .half 0x0224, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022A, 0x022B, 0x022C, 0x022D, 0x022E, 0x022F, 0x0230, 0x0231, 0x0232, 0x0233
@@ -186,7 +175,7 @@ DATA(sNonKanjiIndices)
/* 0x85E_ */ .half 0x026C, 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, 0x0278, 0x0279, 0x027A, 0x027B
/* 0x85F_ */ .half 0x027C, 0x027D, 0x027E, 0x027F, 0x0280, 0x0281, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x864_ */ .half 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, 0x028A, 0x028B, 0x028C, 0x028D, 0x028E, 0x028F, 0x0290, 0x0291
/* 0x865_ */ .half 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029A, 0x029B, 0x029C, 0x029D, 0x029E, 0x029F, 0x0000, 0x0000
/* 0x866_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
@@ -200,7 +189,7 @@ DATA(sNonKanjiIndices)
/* 0x86E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x86F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x874_ */ .half 0x02C0, 0x02C1, 0x02C2, 0x02C3, 0x02C4, 0x02C5, 0x02C6, 0x02C7, 0x02C8, 0x02C9, 0x02CA, 0x02CB, 0x02CC, 0x02CD, 0x02CE, 0x02CF
/* 0x875_ */ .half 0x02D0, 0x02D1, 0x02D2, 0x02D3, 0x02D4, 0x02D5, 0x02D6, 0x02D7, 0x02D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x876_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
diff --git a/src/code/main.c b/src/code/main.c
index 8ad00b52bd..d2c3c9f8bc 100644
--- a/src/code/main.c
+++ b/src/code/main.c
@@ -23,8 +23,8 @@ extern struct IrqMgr gIrqMgr;
#include "n64dd.h"
#endif
-#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \
- "ntsc-1.0:141 ntsc-1.1:141 ntsc-1.2:141 pal-1.0:139 pal-1.1:139"
+#pragma increment_block_number "gc-eu:144 gc-eu-mq:144 gc-jp:144 gc-jp-ce:144 gc-jp-mq:144 gc-us:144 gc-us-mq:144" \
+ "ntsc-1.0:130 ntsc-1.1:130 ntsc-1.2:130 pal-1.0:128 pal-1.1:128"
extern u8 _buffersSegmentEnd[];
@@ -59,11 +59,11 @@ OSMesg sSerialMsgBuf[1];
#if DEBUG_FEATURES
void Main_LogSystemHeap(void) {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(
T("システムヒープサイズ %08x(%dKB) 開始アドレス %08x\n", "System heap size %08x (%dKB) Start address %08x\n"),
gSystemHeapSize, gSystemHeapSize / 1024, _buffersSegmentEnd);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
#endif
diff --git a/src/code/padmgr.c b/src/code/padmgr.c
index 33a5056639..b5f76b7217 100644
--- a/src/code/padmgr.c
+++ b/src/code/padmgr.c
@@ -35,9 +35,9 @@
#define PADMGR_LOG(controllerNum, msg) \
if (DEBUG_FEATURES) { \
- PRINTF(VT_FGCOL(YELLOW)); \
+ PRINTF_COLOR_YELLOW(); \
PRINTF(T("padmgr: %dコン: %s\n", "padmgr: Controller %d: %s\n"), (controllerNum) + 1, (msg)); \
- PRINTF(VT_RST); \
+ PRINTF_RST(); \
} \
(void)0
@@ -327,7 +327,7 @@ void PadMgr_UpdateInputs(PadMgr* padMgr) {
default:
// Unknown error response
LOG_HEX("padnow1->errno", pad->errno, "../padmgr.c", 396);
- Fault_AddHungupAndCrash("../padmgr.c", LN3(379, 382, 397));
+ Fault_AddHungupAndCrash("../padmgr.c", LN3(379, 382, 397, 397));
break;
}
diff --git a/src/code/sched.c b/src/code/sched.c
index b22f38b402..58aa627a71 100644
--- a/src/code/sched.c
+++ b/src/code/sched.c
@@ -62,6 +62,8 @@ vs32 sSchedDebugPrintfEnabled = false;
PRINTF
#elif IDO_PRINTF_WORKAROUND
#define SCHED_DEBUG_PRINTF(args) (void)0
+#elif defined(__GNUC__) && __GNUC__ < 3
+#define SCHED_DEBUG_PRINTF(format, args...) (void)0
#else
#define SCHED_DEBUG_PRINTF(format, ...) (void)0
#endif
diff --git a/src/code/speed_meter.c b/src/code/speed_meter.c
index d325099a89..d282e34953 100644
--- a/src/code/speed_meter.c
+++ b/src/code/speed_meter.c
@@ -185,9 +185,9 @@ void SpeedMeter_DrawAllocEntry(SpeedMeterAllocEntry* this, GraphicsContext* gfxC
Gfx* gfx;
if (this->maxval == 0) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
LOG_NUM("this->maxval", this->maxval, "../speed_meter.c", 313);
- PRINTF(VT_RST);
+ PRINTF_RST();
} else {
OPEN_DISPS(gfxCtx, "../speed_meter.c", 318);
diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c
index 9ad789176b..c3b29d7ac5 100644
--- a/src/code/sys_cfb.c
+++ b/src/code/sys_cfb.c
@@ -34,7 +34,7 @@ void SysCfb_Init(s32 n64dd) {
PRINTF("RAM4M mode\n");
sSysCfbEnd = 0x80400000;
} else {
- LogUtils_HungupThread("../sys_cfb.c", LN4(305, 308, 322, 354));
+ LogUtils_HungupThread("../sys_cfb.c", LN4(305, 308, 322, 341, 354));
}
screenSize = SCREEN_WIDTH * SCREEN_HEIGHT;
diff --git a/src/code/sys_math3d.c b/src/code/sys_math3d.c
index 96b352d693..203b9f2e2a 100644
--- a/src/code/sys_math3d.c
+++ b/src/code/sys_math3d.c
@@ -5,7 +5,7 @@
#include "macros.h"
#include "sys_math3d.h"
-#pragma increment_block_number "gc-eu:103 gc-eu-mq:103 gc-jp:103 gc-jp-ce:103 gc-jp-mq:103 gc-us:103 gc-us-mq:103" \
+#pragma increment_block_number "gc-eu:99 gc-eu-mq:99 gc-jp:99 gc-jp-ce:99 gc-jp-mq:99 gc-us:99 gc-us-mq:99" \
"ntsc-1.0:80 ntsc-1.1:80 ntsc-1.2:79 pal-1.0:80 pal-1.1:80"
s32 Math3D_LineVsLineClosestTwoPoints(Vec3f* lineAPointA, Vec3f* lineAPointB, Vec3f* lineBPointA, Vec3f* lineBPointB,
@@ -127,11 +127,11 @@ void Math3D_LineClosestToPoint(InfiniteLine* line, Vec3f* pos, Vec3f* closestPoi
dirVectorLengthSq = Math3D_Vec3fMagnitudeSq(&line->dir);
if (IS_ZERO(dirVectorLengthSq)) {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
PRINTF(T("Math3D_lineVsPosSuisenCross():直線の長さがありません\n",
"Math3D_lineVsPosSuisenCross(): No straight line length\n"));
PRINTF(T("cross = pos を返します。\n", "Returns cross = pos.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
Math_Vec3f_Copy(closestPoint, pos);
//! @bug Missing early return
}
@@ -930,11 +930,11 @@ f32 Math3D_Plane(Plane* plane, Vec3f* pointOnPlane) {
*/
f32 Math3D_UDistPlaneToPos(f32 nx, f32 ny, f32 nz, f32 originDist, Vec3f* p) {
if (DEBUG_FEATURES && IS_ZERO(sqrtf(SQ(nx) + SQ(ny) + SQ(nz)))) {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
PRINTF(T("Math3DLengthPlaneAndPos():法線size がゼロ近いです%f %f %f\n",
"Math3DLengthPlaneAndPos(): Normal size is near zero %f %f %f\n"),
nx, ny, nz);
- PRINTF(VT_RST);
+ PRINTF_RST();
return 0.0f;
}
return fabsf(Math3D_DistPlaneToPos(nx, ny, nz, originDist, p));
@@ -949,11 +949,11 @@ f32 Math3D_DistPlaneToPos(f32 nx, f32 ny, f32 nz, f32 originDist, Vec3f* p) {
normMagnitude = sqrtf(SQ(nx) + SQ(ny) + SQ(nz));
if (IS_ZERO(normMagnitude)) {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
PRINTF(T("Math3DSignedLengthPlaneAndPos():法線size がゼロ近いです%f %f %f\n",
"Math3DSignedLengthPlaneAndPos(): Normal size is close to zero %f %f %f\n"),
nx, ny, nz);
- PRINTF(VT_RST);
+ PRINTF_RST();
return 0.0f;
}
return Math3D_Planef(nx, ny, nz, originDist, p) / normMagnitude;
diff --git a/src/code/z_DLF.c b/src/code/z_DLF.c
index 547dc4bbbd..f56fcc742b 100644
--- a/src/code/z_DLF.c
+++ b/src/code/z_DLF.c
@@ -18,12 +18,12 @@ void Overlay_LoadGameState(GameStateOverlay* overlayEntry) {
return;
}
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("OVL(d):Seg:%08x-%08x Ram:%08x-%08x Off:%08x %s\n", overlayEntry->vramStart, overlayEntry->vramEnd,
overlayEntry->loadedRamAddr,
(u32)overlayEntry->loadedRamAddr + (u32)overlayEntry->vramEnd - (u32)overlayEntry->vramStart,
(u32)overlayEntry->vramStart - (u32)overlayEntry->loadedRamAddr, "");
- PRINTF(VT_RST);
+ PRINTF_RST();
if (overlayEntry->unk_14 != NULL) {
overlayEntry->unk_14 = (void*)((u32)overlayEntry->unk_14 -
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index 66b9601e56..c0633747fc 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -24,6 +24,8 @@ static s32 sCurCeilingBgId;
PRINTF
#elif IDO_PRINTF_WORKAROUND
#define ACTOR_DEBUG_PRINTF(args) (void)0
+#elif defined(__GNUC__) && __GNUC__ < 3
+#define ACTOR_DEBUG_PRINTF(format, args...) (void)0
#else
#define ACTOR_DEBUG_PRINTF(format, ...) (void)0
#endif
@@ -3055,7 +3057,7 @@ Actor* Actor_RemoveFromCategory(PlayState* play, ActorContext* actorCtx, Actor*
}
void Actor_FreeOverlay(ActorOverlay* actorOverlay) {
- PRINTF(VT_FGCOL(CYAN));
+ PRINTF_COLOR_CYAN();
if (actorOverlay->numLoaded == 0) {
ACTOR_DEBUG_PRINTF(T("アクタークライアントが0になりました\n", "Actor clients are now 0\n"));
@@ -3078,7 +3080,7 @@ void Actor_FreeOverlay(ActorOverlay* actorOverlay) {
actorOverlay->numLoaded);
}
- PRINTF(VT_RST);
+ PRINTF_RST();
}
Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX,
@@ -3144,13 +3146,13 @@ Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 pos
Overlay_Load(overlayEntry->file.vromStart, overlayEntry->file.vromEnd, overlayEntry->vramStart,
overlayEntry->vramEnd, overlayEntry->loadedRamAddr);
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("OVL(a):Seg:%08x-%08x Ram:%08x-%08x Off:%08x %s\n", overlayEntry->vramStart, overlayEntry->vramEnd,
overlayEntry->loadedRamAddr,
(uintptr_t)overlayEntry->loadedRamAddr + (uintptr_t)overlayEntry->vramEnd -
(uintptr_t)overlayEntry->vramStart,
(uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr, name);
- PRINTF(VT_RST);
+ PRINTF_RST();
overlayEntry->numLoaded = 0;
}
diff --git a/src/code/z_bg_collect.c b/src/code/z_bg_collect.c
index 2bdfc6bcdc..bd349765de 100644
--- a/src/code/z_bg_collect.c
+++ b/src/code/z_bg_collect.c
@@ -40,14 +40,14 @@ void DynaPolyActor_UpdateCarriedActorPos(CollisionContext* colCtx, s32 bgId, Act
if (BGCHECK_XYZ_ABSMAX <= pos.x || pos.x <= -BGCHECK_XYZ_ABSMAX || BGCHECK_XYZ_ABSMAX <= pos.y ||
pos.y <= -BGCHECK_XYZ_ABSMAX || BGCHECK_XYZ_ABSMAX <= pos.z || pos.z <= -BGCHECK_XYZ_ABSMAX) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
//! @bug file and line are not passed to PRINTF
PRINTF(T("BGCheckCollection_typicalActorPos():位置が妥当ではありません。\n"
"pos (%f,%f,%f) file:%s line:%d\n",
"BGCheckCollection_typicalActorPos(): Position is not valid. \n"
"pos (%f,%f,%f) file:%s line:%d\n"),
pos.x, pos.y, pos.z);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
#endif
}
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index c8b0e491dc..57a2c80289 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -2,7 +2,7 @@
#include "terminal.h"
#include "line_numbers.h"
-#pragma increment_block_number "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128"
+#pragma increment_block_number "ntsc-1.0:112 ntsc-1.1:112 ntsc-1.2:112"
u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* nodeList);
void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector);
@@ -89,11 +89,11 @@ u16 sSurfaceMaterialToSfxOffset[SURFACE_MATERIAL_MAX] = {
s32 BgCheck_PosErrorCheck(Vec3f* pos, const char* file, int line) {
if (pos->x >= BGCHECK_XYZ_ABSMAX || pos->x <= -BGCHECK_XYZ_ABSMAX || pos->y >= BGCHECK_XYZ_ABSMAX ||
pos->y <= -BGCHECK_XYZ_ABSMAX || pos->z >= BGCHECK_XYZ_ABSMAX || pos->z <= -BGCHECK_XYZ_ABSMAX) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("T_BGCheck_PosErrorCheck():位置が妥当ではありません。pos (%f,%f,%f) file:%s line:%d\n",
"T_BGCheck_PosErrorCheck(): Position is invalid. pos (%f,%f,%f) file:%s line:%d\n"),
pos->x, pos->y, pos->z, file, line);
- PRINTF(VT_RST);
+ PRINTF_RST();
return true;
}
return false;
@@ -307,11 +307,11 @@ void CollisionPoly_GetVerticesByBgId(CollisionPoly* poly, s32 bgId, CollisionCon
Vec3s* vtxList;
if (poly == NULL || bgId > BG_ACTOR_MAX || dest == NULL) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF(T("T_Polygon_GetVertex_bg_ai(): Error %d %d %d 引数が適切ではありません。処理を終了します。\n",
"T_Polygon_GetVertex_bg_ai(): Error %d %d %d Argument not appropriate. Processing terminated.\n"),
poly == NULL, bgId > BG_ACTOR_MAX, dest == NULL);
- PRINTF(VT_RST);
+ PRINTF_RST();
if (dest != NULL) {
//! @bug: dest[2] x and y are not set to 0
@@ -1648,10 +1648,10 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
SSNodeList_Alloc(play, &colCtx->polyNodes, tblMax, colCtx->colHeader->numPolygons);
lookupTblMemSize = BgCheck_InitializeStaticLookup(colCtx, play, colCtx->lookupTbl);
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("/*---結局 BG使用サイズ %dbyte---*/\n", "/*---BG size used in the end %dbyte---*/\n"),
memSize + lookupTblMemSize);
- PRINTF(VT_RST);
+ PRINTF_RST();
DynaPoly_Init(play, &colCtx->dyna);
DynaPoly_Alloc(play, &colCtx->dyna);
@@ -1669,10 +1669,10 @@ CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId)
return NULL;
}
if (!(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE)) {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
PRINTF(T("T_BGCheck_getBGDataInfo():そのbg_actor_indexは使われておりません。index=%d\n",
"T_BGCheck_getBGDataInfo(): That bg_actor_index is not in use. index=%d\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return NULL;
}
return colCtx->dyna.bgActors[bgId].colHeader;
@@ -2738,10 +2738,10 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto
}
if (!foundSlot) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("DynaPolyInfo_setActor():ダイナミックポリゴン 空きインデックスはありません\n",
"DynaPolyInfo_setActor(): Dynamic polygon no free indexes\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return BG_ACTOR_MAX;
}
@@ -2749,9 +2749,9 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
dyna->bgActorFlags[bgId] &= ~BGACTOR_1;
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("DynaPolyInfo_setActor():index %d\n", bgId);
- PRINTF(VT_RST);
+ PRINTF_RST();
return bgId;
}
@@ -2801,27 +2801,27 @@ void DynaPoly_EnableCeilingCollision(PlayState* play, DynaCollisionContext* dyna
void DynaPoly_DeleteBgActor(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
DynaPolyActor* actor;
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("DynaPolyInfo_delReserve():index %d\n", bgId);
- PRINTF(VT_RST);
+ PRINTF_RST();
if (!DynaPoly_IsBgIdBgActor(bgId)) {
#if DEBUG_FEATURES
if (bgId == -1) {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("DynaPolyInfo_delReserve():削除されているはずの(?)\n"
"インデックス(== -1)のため,処理を中止します。\n",
"DynaPolyInfo_delReserve():The index that should have been deleted(?)\n"
" was(== -1), processing aborted.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
} else {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("DynaPolyInfo_delReserve():"
"確保していない/出来なかったインデックスの解放のため、処理を中止します。index == %d\n",
"DynaPolyInfo_delReserve():"
" Unable to deallocate index / index unallocated, processing aborted. index == %d\n"),
bgId);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
#endif
@@ -2880,14 +2880,14 @@ void DynaPoly_AddBgActorToLookup(PlayState* play, DynaCollisionContext* dyna, s3
#if DEBUG_FEATURES
if (!(dyna->polyListMax >= *polyStartIndex + pbgdata->numPolygons)) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("DynaPolyInfo_expandSRT():polygon over %dが%dを越えるとダメ\n",
"DynaPolyInfo_expandSRT():polygon over do not use if %d exceeds %d\n"),
*polyStartIndex + pbgdata->numPolygons, dyna->polyListMax);
}
if (!(dyna->vtxListMax >= *vtxStartIndex + pbgdata->numVertices)) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("DynaPolyInfo_expandSRT():vertex over %dが%dを越えるとダメ\n",
"DynaPolyInfo_expandSRT():vertex over do not use if %d exceeds %d\n"),
*vtxStartIndex + pbgdata->numVertices, dyna->vtxListMax);
@@ -3067,9 +3067,9 @@ void DynaPoly_UpdateContext(PlayState* play, DynaCollisionContext* dyna) {
for (i = 0; i < BG_ACTOR_MAX; i++) {
if (dyna->bgActorFlags[i] & BGACTOR_1) {
// Initialize BgActor
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("DynaPolyInfo_setup():削除 index=%d\n", "DynaPolyInfo_setup(): Delete index=%d\n"), i);
- PRINTF(VT_RST);
+ PRINTF_RST();
dyna->bgActorFlags[i] = 0;
BgActor_Initialize(play, &dyna->bgActors[i]);
@@ -3077,9 +3077,9 @@ void DynaPoly_UpdateContext(PlayState* play, DynaCollisionContext* dyna) {
}
if (dyna->bgActors[i].actor != NULL && dyna->bgActors[i].actor->update == NULL) {
// Delete BgActor
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("DynaPolyInfo_setup():削除 index=%d\n", "DynaPolyInfo_setup(): Delete index=%d\n"), i);
- PRINTF(VT_RST);
+ PRINTF_RST();
actor = DynaPoly_GetActor(&play->colCtx, i);
if (actor == NULL) {
return;
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index e4090d484e..cb59ef55e9 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -4,7 +4,7 @@
#include "terminal.h"
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
-#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
+#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
s16 Camera_RequestSettingImpl(Camera* camera, s16 requestedSetting, s16 flags);
@@ -3639,7 +3639,7 @@ s32 Camera_KeepOn3(Camera* camera) {
}
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.0:144 ntsc-1.1:144 ntsc-1.2:144 pal-1.0:142 pal-1.1:142"
+ "ntsc-1.0:133 ntsc-1.1:133 ntsc-1.2:133 pal-1.0:131 pal-1.1:131"
s32 Camera_KeepOn4(Camera* camera) {
static Vec3f D_8015BD50;
diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c
index 0567fd15a1..aa83c5e532 100644
--- a/src/code/z_collision_check.c
+++ b/src/code/z_collision_check.c
@@ -367,9 +367,9 @@ s32 Collider_SetJntSphToActor(PlayState* play, ColliderJntSph* dest, ColliderJnt
if (dest->elements == NULL) {
dest->count = 0;
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("ClObjJntSph_set():zelda_malloc()出来ません。\n", "ClObjJntSph_set():zelda_malloc() Can not.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return false;
}
@@ -395,9 +395,9 @@ s32 Collider_SetJntSphAllocType1(PlayState* play, ColliderJntSph* dest, Actor* a
if (dest->elements == NULL) {
dest->count = 0;
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("ClObjJntSph_set3():zelda_malloc_出来ません。\n", "ClObjJntSph_set3():zelda_malloc_ Can not.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return false;
}
@@ -423,9 +423,9 @@ s32 Collider_SetJntSphAlloc(PlayState* play, ColliderJntSph* dest, Actor* actor,
if (dest->elements == NULL) {
dest->count = 0;
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("ClObjJntSph_set5():zelda_malloc出来ません\n", "ClObjJntSph_set5():zelda_malloc Can not\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return false;
}
for (destElem = dest->elements, srcElem = src->elements; destElem < dest->elements + dest->count;
@@ -729,9 +729,9 @@ s32 Collider_SetTrisAllocType1(PlayState* play, ColliderTris* dest, Actor* actor
dest->elements = ZELDA_ARENA_MALLOC(dest->count * sizeof(ColliderTrisElement), "../z_collision_check.c", 2156);
if (dest->elements == NULL) {
dest->count = 0;
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("ClObjTris_set3():zelda_malloc()出来ません\n", "ClObjTris_set3():zelda_malloc() Can not\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return false;
}
for (destElem = dest->elements, srcElem = src->elements; destElem < dest->elements + dest->count;
@@ -755,9 +755,9 @@ s32 Collider_SetTrisAlloc(PlayState* play, ColliderTris* dest, Actor* actor, Col
dest->elements = ZELDA_ARENA_MALLOC(dest->count * sizeof(ColliderTrisElement), "../z_collision_check.c", 2207);
if (dest->elements == NULL) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("ClObjTris_set5():zelda_malloc出来ません\n", "ClObjTris_set5():zelda_malloc Can not\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
dest->count = 0;
return false;
}
diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c
index 5dbf19588d..d84dc5b208 100644
--- a/src/code/z_common_data.c
+++ b/src/code/z_common_data.c
@@ -3,7 +3,7 @@
#include "versions.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
+ "ntsc-1.0:176 ntsc-1.1:176 ntsc-1.2:176 pal-1.0:160 pal-1.1:160"
ALIGNED(16) SaveContext gSaveContext;
u32 D_8015FA88;
diff --git a/src/code/z_eff_shield_particle.c b/src/code/z_eff_shield_particle.c
index c66934a4ff..74cd6a435a 100644
--- a/src/code/z_eff_shield_particle.c
+++ b/src/code/z_eff_shield_particle.c
@@ -18,10 +18,10 @@ void EffectShieldParticle_Init(void* thisx, void* initParamsx) {
if ((this != NULL) && (initParams != NULL)) {
this->numElements = initParams->numElements;
if (this->numElements > ARRAY_COUNT(this->elements)) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("EffectShieldParticle_ct():パーティクル数がオーバしてます。\n",
"EffectShieldParticle_ct(): Number of particles exceeded.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return;
}
diff --git a/src/code/z_eff_ss_dead.c b/src/code/z_eff_ss_dead.c
index 3c1adf4cb6..2a64a23f4a 100644
--- a/src/code/z_eff_ss_dead.c
+++ b/src/code/z_eff_ss_dead.c
@@ -30,7 +30,7 @@ void func_80026400(PlayState* play, Color_RGBA8* color, s16 arg2, s16 arg3) {
Gfx* displayListHead;
f32 cos;
-#if !PLATFORM_N64
+#if PLATFORM_GC
if (arg3 == 0) {
return;
}
diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c
index 4041426b41..9a3df7eef3 100644
--- a/src/code/z_effect_soft_sprite.c
+++ b/src/code/z_effect_soft_sprite.c
@@ -197,7 +197,7 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initParams) {
overlayEntry->loadedRamAddr = ZELDA_ARENA_MALLOC_R(overlaySize, "../z_effect_soft_sprite.c", 585);
if (overlayEntry->loadedRamAddr == NULL) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("EffectSoftSprite2_makeEffect():zelda_malloc_r()により,%dbyteのメモリ確保ができま\n"
"せん。そのため、プログラムのロードも\n"
"出来ません。ただいま危険な状態です!\n"
@@ -207,18 +207,18 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initParams) {
"cannot be loaded. What a dangerous situation!\n"
"Naturally, effects will not be produced either.\n"),
overlaySize);
- PRINTF(VT_RST);
+ PRINTF_RST();
return;
}
Overlay_Load(overlayEntry->file.vromStart, overlayEntry->file.vromEnd, overlayEntry->vramStart,
overlayEntry->vramEnd, overlayEntry->loadedRamAddr);
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("EFFECT SS OVL:SegRom %08x %08x, Seg %08x %08x, RamStart %08x, type: %d\n",
overlayEntry->file.vromStart, overlayEntry->file.vromEnd, overlayEntry->vramStart,
overlayEntry->vramEnd, overlayEntry->loadedRamAddr, type);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
profile = (void*)(uintptr_t)((overlayEntry->profile != NULL)
@@ -246,14 +246,14 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initParams) {
sEffectSsInfo.table[index].priority = priority;
if (profile->init(play, index, &sEffectSsInfo.table[index], initParams) == 0) {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("EffectSoftSprite2_makeEffect():"
"何らかの理由でコンストラクト失敗。コンストラクターがエラーを返しました。"
"エフェクトの追加を中止します。\n",
"EffectSoftSprite2_makeEffect(): "
"Construction failed for some reason. The constructor returned an error. "
"Ceasing effect addition.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
EffectSs_Reset(&sEffectSsInfo.table[index]);
}
}
@@ -313,7 +313,7 @@ void EffectSs_DrawAll(PlayState* play) {
if ((sEffectSsInfo.table[i].pos.x > 32000.0f) || (sEffectSsInfo.table[i].pos.x < -32000.0f) ||
(sEffectSsInfo.table[i].pos.y > 32000.0f) || (sEffectSsInfo.table[i].pos.y < -32000.0f) ||
(sEffectSsInfo.table[i].pos.z > 32000.0f) || (sEffectSsInfo.table[i].pos.z < -32000.0f)) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("EffectSoftSprite2_disp():位置が領域外のため "
"削除します。エフェクトラベルNo.%d:プログラムの方で対応をお願いします。ここです ==> "
"pos(%f, %f, %f)で、ラベルはz_effect_soft_sprite_dlftbls.declにあります。\n",
@@ -322,10 +322,10 @@ void EffectSs_DrawAll(PlayState* play) {
"pos(%f, %f, %f) and the label is in z_effect_soft_sprite_dlftbls.decl.\n"),
sEffectSsInfo.table[i].type, sEffectSsInfo.table[i].pos.x, sEffectSsInfo.table[i].pos.y,
sEffectSsInfo.table[i].pos.z);
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("もし、posを別のことに使っている場合相談に応じます。\n",
"If you are using pos for something else, consult me.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
EffectSs_Delete(&sEffectSsInfo.table[i]);
} else {
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index 64021830da..31386556c5 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -3,7 +3,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "overlays/effects/ovl_Effect_Ss_Dead_Sound/z_eff_ss_dead_sound.h"
-#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-eu-mq-dbg:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128" \
+#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-eu-mq-dbg:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128" \
"gc-us-mq:128 ntsc-1.2:128"
#define FLAGS 0
diff --git a/src/code/z_horse.c b/src/code/z_horse.c
index 5f8b700ba2..fd3eb1747c 100644
--- a/src/code/z_horse.c
+++ b/src/code/z_horse.c
@@ -115,11 +115,11 @@ void Horse_SetupInGameplay(PlayState* play, Player* player) {
horseActor->room = -1;
}
} else {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF(
T("Horse_SetNormal():%d セットスポットまずいです。\n", "Horse_SetNormal():%d set spot is no good.\n"),
gSaveContext.save.info.horseData.sceneId);
- PRINTF(VT_RST);
+ PRINTF_RST();
Horse_ResetHorseData(play);
}
} else if ((play->sceneId == SCENE_LON_LON_RANCH) &&
@@ -291,11 +291,11 @@ void Horse_SetupInCutscene(PlayState* play, Player* player) {
void Horse_InitPlayerHorse(PlayState* play, Player* player) {
if (LINK_IS_ADULT) {
if (!Horse_CanSpawn(gSaveContext.save.info.horseData.sceneId)) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF(
T("Horse_Set_Check():%d セットスポットまずいです。\n", "Horse_Set_Check():%d set spot is no good.\n"),
gSaveContext.save.info.horseData.sceneId);
- PRINTF(VT_RST);
+ PRINTF_RST();
Horse_ResetHorseData(play);
}
diff --git a/src/code/z_inventory.c b/src/code/z_inventory.c
index b452a92e16..2f89c0565b 100644
--- a/src/code/z_inventory.c
+++ b/src/code/z_inventory.c
@@ -299,7 +299,7 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
if (equipment == EQUIP_TYPE_SWORD) {
gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
- gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 1;
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] = 1;
}
Player_SetEquipmentData(play, player);
diff --git a/src/code/z_jpeg.c b/src/code/z_jpeg.c
index 83ec5aafd6..86a97183aa 100644
--- a/src/code/z_jpeg.c
+++ b/src/code/z_jpeg.c
@@ -337,9 +337,9 @@ s32 Jpeg_Decode(void* data, void* zbuffer, void* work, u32 workSize) {
x = y = 0;
for (i = 0; i < 300; i += 4) {
if (JpegDecoder_Decode(&decoder, (u16*)workBuff->data, 4, i != 0, &state)) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF("Error : Can't decode jpeg\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
} else {
Jpeg_ScheduleDecoderTask(&ctx);
osInvalDCache(&workBuff->data, sizeof(workBuff->data[0]));
diff --git a/src/code/z_kaleido_manager.c b/src/code/z_kaleido_manager.c
index 761d1fb9ec..42ec59fd0a 100644
--- a/src/code/z_kaleido_manager.c
+++ b/src/code/z_kaleido_manager.c
@@ -19,11 +19,11 @@ void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl) {
ovl->loadedRamAddr = sKaleidoAreaPtr;
Overlay_Load(ovl->file.vromStart, ovl->file.vromEnd, ovl->vramStart, ovl->vramEnd, ovl->loadedRamAddr);
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("OVL(k):Seg:%08x-%08x Ram:%08x-%08x Off:%08x %s\n", ovl->vramStart, ovl->vramEnd, ovl->loadedRamAddr,
(uintptr_t)ovl->loadedRamAddr + (uintptr_t)ovl->vramEnd - (uintptr_t)ovl->vramStart,
(uintptr_t)ovl->vramStart - (uintptr_t)ovl->loadedRamAddr, ovl->name);
- PRINTF(VT_RST);
+ PRINTF_RST();
ovl->offset = (uintptr_t)ovl->loadedRamAddr - (uintptr_t)ovl->vramStart;
gKaleidoMgrCurOvl = ovl;
@@ -50,17 +50,17 @@ void KaleidoManager_Init(PlayState* play) {
}
}
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("KaleidoArea の最大サイズは %d バイトを確保します\n", "The maximum size of KaleidoArea is %d bytes\n"),
largestSize);
- PRINTF(VT_RST);
+ PRINTF_RST();
sKaleidoAreaPtr = GAME_STATE_ALLOC(&play->state, largestSize, "../z_kaleido_manager.c", 150);
LOG_UTILS_CHECK_NULL_POINTER("KaleidoArea_allocp", sKaleidoAreaPtr, "../z_kaleido_manager.c", 151);
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("KaleidoArea %08x - %08x\n", sKaleidoAreaPtr, (uintptr_t)sKaleidoAreaPtr + largestSize);
- PRINTF(VT_RST);
+ PRINTF_RST();
gKaleidoMgrCurOvl = NULL;
}
diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c
index 69d2b2d9ba..10fff2bb07 100644
--- a/src/code/z_kaleido_scope_call.c
+++ b/src/code/z_kaleido_scope_call.c
@@ -1,4 +1,4 @@
-#pragma increment_block_number "gc-eu:224 gc-eu-mq:224 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
+#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
"ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:224 pal-1.1:224"
#include "global.h"
@@ -18,16 +18,16 @@ void KaleidoScopeCall_LoadPlayer(void) {
if (gKaleidoMgrCurOvl != playerActorOvl) {
if (gKaleidoMgrCurOvl != NULL) {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("カレイド領域 強制排除\n", "Kaleido area forced exclusion\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
KaleidoManager_ClearOvl(gKaleidoMgrCurOvl);
}
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("プレイヤーアクター搬入\n", "Player actor import\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
KaleidoManager_LoadOvl(playerActorOvl);
}
@@ -90,16 +90,16 @@ void KaleidoScopeCall_Update(PlayState* play) {
} else if (pauseCtx->state != PAUSE_STATE_OFF) {
if (gKaleidoMgrCurOvl != kaleidoScopeOvl) {
if (gKaleidoMgrCurOvl != NULL) {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("カレイド領域 プレイヤー 強制排除\n", "Kaleido area Player Forced Elimination\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
KaleidoManager_ClearOvl(gKaleidoMgrCurOvl);
}
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("カレイド領域 カレイドスコープ搬入\n", "Kaleido area Kaleidoscope loading\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
KaleidoManager_LoadOvl(kaleidoScopeOvl);
}
@@ -108,9 +108,9 @@ void KaleidoScopeCall_Update(PlayState* play) {
sKaleidoScopeUpdateFunc(play);
if (!IS_PAUSED(&play->pauseCtx)) {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("カレイド領域 カレイドスコープ排出\n", "Kaleido area Kaleidoscope Emission\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
KaleidoManager_ClearOvl(kaleidoScopeOvl);
KaleidoScopeCall_LoadPlayer();
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 00d7b79710..91e168ecde 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -1,5 +1,5 @@
-#pragma increment_block_number "gc-eu:232 gc-eu-mq:232 gc-jp:212 gc-jp-ce:212 gc-jp-mq:212 gc-us:212 gc-us-mq:212" \
- "ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:240 pal-1.1:240"
+#pragma increment_block_number "gc-eu:220 gc-eu-mq:220 gc-jp:212 gc-jp-ce:212 gc-jp-mq:212 gc-us:212 gc-us-mq:212" \
+ "ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:228 pal-1.1:228"
#include "global.h"
#include "ultra64.h"
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index 1c82288b7a..c658775da3 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -30,12 +30,12 @@ void Map_SetPaletteData(PlayState* play, s16 room) {
interfaceCtx->mapPaletteIndex = paletteIndex;
}
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("PALETEセット 【 i=%x : room=%x 】Room_Inf[%d][4]=%x ( map_palete_no = %d )\n",
"PALETE Set 【 i=%x : room=%x 】Room_Inf[%d][4]=%x ( map_palete_no = %d )\n"),
paletteIndex, room, mapIndex, gSaveContext.save.info.sceneFlags[mapIndex].rooms,
interfaceCtx->mapPaletteIndex);
- PRINTF(VT_RST);
+ PRINTF_RST();
interfaceCtx->mapPalette[paletteIndex * 2] = 2;
interfaceCtx->mapPalette[paletteIndex * 2 + 1] = 0xBF;
@@ -122,17 +122,17 @@ void Map_InitData(PlayState* play, s16 room) {
extendedMapIndex = 0x15;
}
} else if (play->sceneId == SCENE_GERUDO_VALLEY) {
- if ((LINK_AGE_IN_YEARS == YEARS_ADULT) && !GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if ((LINK_AGE_IN_YEARS == YEARS_ADULT) && !GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
extendedMapIndex = 0x16;
}
} else if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
- if (GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
extendedMapIndex = 0x17;
}
}
- PRINTF(VT_FGCOL(BLUE));
+ PRINTF_COLOR_BLUE();
PRINTF("KKK=%d\n", extendedMapIndex);
- PRINTF(VT_RST);
+ PRINTF_RST();
sEntranceIconMapIndex = extendedMapIndex;
DMA_REQUEST_SYNC(interfaceCtx->mapSegment,
(uintptr_t)_map_grand_staticSegmentRomStart +
@@ -158,11 +158,11 @@ void Map_InitData(PlayState* play, s16 room) {
case SCENE_WATER_TEMPLE_BOSS:
case SCENE_SPIRIT_TEMPLE_BOSS:
case SCENE_SHADOW_TEMPLE_BOSS:
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("デクの樹ダンジョンMAP テクスチャDMA(%x) scene_id_offset=%d VREG(30)=%d\n",
"Deku Tree Dungeon MAP Texture DMA(%x) scene_id_offset=%d VREG(30)=%d\n"),
room, mapIndex, VREG(30));
- PRINTF(VT_RST);
+ PRINTF_RST();
#if PLATFORM_N64
if ((B_80121220 != NULL) && (B_80121220->unk_28 != NULL) && B_80121220->unk_28(play)) {
@@ -219,9 +219,9 @@ void Map_InitRoomData(PlayState* play, s16 room) {
interfaceCtx->mapRoomNum = room;
interfaceCtx->unk_25A = mapIndex;
Map_SetPaletteData(play, room);
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("部屋部屋=%d\n", "Room Room = %d\n"), room);
- PRINTF(VT_RST);
+ PRINTF_RST();
Map_InitData(play, room);
break;
}
@@ -496,7 +496,7 @@ void Minimap_Draw(PlayState* play) {
(LINK_AGE_IN_YEARS != YEARS_ADULT)) {
if ((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) ||
((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) &&
- (gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] &
+ (gSaveContext.save.info.infTable[INFTABLE_INDEX_1AX] &
gBitFlags[gMapData->owEntranceFlag[mapIndex]]))) {
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b,
@@ -513,7 +513,7 @@ void Minimap_Draw(PlayState* play) {
}
if ((play->sceneId == SCENE_ZORAS_FOUNTAIN) &&
- (gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] & gBitFlags[INFTABLE_1A9_SHIFT])) {
+ (gSaveContext.save.info.infTable[INFTABLE_INDEX_1AX] & gBitFlags[INFTABLE_1A9_SHIFT])) {
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8,
8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
@@ -600,9 +600,9 @@ void Map_Update(PlayState* play) {
if ((interfaceCtx->mapRoomNum == gMapData->switchFromRoom[mapIndex][i]) &&
(floor == gMapData->switchFromFloor[mapIndex][i])) {
interfaceCtx->mapRoomNum = gMapData->switchToRoom[mapIndex][i];
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("階層切替=%x\n", "Layer switching = %x\n"), interfaceCtx->mapRoomNum);
- PRINTF(VT_RST);
+ PRINTF_RST();
Map_InitData(play, interfaceCtx->mapRoomNum);
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
Map_SavePlayerInitialInfo(play);
diff --git a/src/code/z_message.c b/src/code/z_message.c
index bef5387eed..b6e24c1d62 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -8,7 +8,7 @@
#endif
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.0:96 ntsc-1.1:96 ntsc-1.2:96 pal-1.0:128 pal-1.1:128"
+ "ntsc-1.0:80 ntsc-1.1:80 ntsc-1.2:80 pal-1.0:128 pal-1.1:128"
#if !PLATFORM_GC
#define OCARINA_BUTTON_A_PRIM_1_R 80
@@ -2515,9 +2515,9 @@ void Message_OpenText(PlayState* play, u16 textId) {
msgCtx->textId = textId;
if (textId == 0x2030) { // Talking to Ingo as adult in Lon Lon Ranch for the first time before freeing Epona
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("???????????????? z_message.c ??????????????????\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
gSaveContext.eventInf[0] = gSaveContext.eventInf[1] = gSaveContext.eventInf[2] = gSaveContext.eventInf[3] = 0;
}
@@ -2657,9 +2657,9 @@ void Message_OpenText(PlayState* play, u16 textId) {
void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor) {
MessageContext* msgCtx = &play->msgCtx;
- PRINTF(VT_FGCOL(BLUE));
+ PRINTF_COLOR_BLUE();
PRINTF(T("めっせーじ=%x(%d)\n", "Message=%x(%d)\n"), textId, actor);
- PRINTF(VT_RST);
+ PRINTF_RST();
msgCtx->ocarinaAction = 0xFFFF;
Message_OpenText(play, textId);
@@ -2677,9 +2677,9 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) {
s32 pad2[3];
#endif
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("めっせーじ=%x message->msg_data\n", "Message=%x message->msg_data\n"), textId, msgCtx->msgLength);
- PRINTF(VT_RST);
+ PRINTF_RST();
msgCtx->msgLength = 0;
Message_OpenText(play, textId);
@@ -2719,7 +2719,7 @@ void Message_StartOcarinaImpl(PlayState* play, u16 ocarinaActionId) {
s16 noStopDoAction;
s32 k;
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
for (i = sOcarinaSongBitFlags = 0; i <= (QUEST_SONG_STORMS - QUEST_SONG_MINUET); i++) {
if (CHECK_QUEST_ITEM(QUEST_SONG_MINUET + i)) {
@@ -2731,7 +2731,7 @@ void Message_StartOcarinaImpl(PlayState* play, u16 ocarinaActionId) {
sOcarinaSongBitFlags |= (1 << OCARINA_SONG_SCARECROW_SPAWN);
}
PRINTF("ocarina_bit = %x\n", sOcarinaSongBitFlags);
- PRINTF(VT_RST);
+ PRINTF_RST();
sHasSunsSong = CHECK_QUEST_ITEM(QUEST_SONG_SUN);
msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff();
@@ -3352,11 +3352,11 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("Na_StopOcarinaMode();\n");
PRINTF("Na_StopOcarinaMode();\n");
PRINTF("Na_StopOcarinaMode();\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
Message_Decode(play);
msgCtx->msgMode = MSGMODE_SETUP_DISPLAY_SONG_PLAYED;
msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
@@ -3456,7 +3456,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
if (msgCtx->lastPlayedSong == OCARINA_SONG_EPONAS) {
R_EPONAS_SONG_PLAYED = true;
}
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("☆☆☆ocarina=%d message->ocarina_no=%d ", msgCtx->lastPlayedSong,
msgCtx->ocarinaAction);
if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE) {
@@ -3465,7 +3465,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
play->msgCtx.ocarinaMode = OCARINA_MODE_0B;
}
} else if (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_MINUET) {
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("Ocarina_PC_Wind=%d(%d) ☆☆☆ ", OCARINA_ACTION_CHECK_MINUET,
msgCtx->ocarinaAction - OCARINA_ACTION_CHECK_MINUET);
if (msgCtx->lastPlayedSong == (msgCtx->ocarinaAction - OCARINA_ACTION_CHECK_MINUET)) {
@@ -3474,7 +3474,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
play->msgCtx.ocarinaMode = msgCtx->lastPlayedSong - 1;
}
} else {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("Ocarina_C_Wind=%d(%d) ☆☆☆ ", OCARINA_ACTION_PLAYBACK_MINUET,
msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET);
if (msgCtx->lastPlayedSong == (msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET)) {
@@ -3483,7 +3483,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
}
}
- PRINTF(VT_RST);
+ PRINTF_RST();
PRINTF("→ OCARINA_MODE=%d\n", play->msgCtx.ocarinaMode);
}
}
@@ -3529,10 +3529,10 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
msgCtx->lastPlayedSong = msgCtx->ocarinaStaff->state;
msgCtx->msgMode = MSGMODE_SONG_PLAYBACK_SUCCESS;
Item_Give(play, ITEM_SONG_MINUET + gOcarinaSongItemMap[msgCtx->ocarinaStaff->state]);
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("z_message.c 取得メロディ=%d\n", "z_message.c Song Acquired = %d\n"),
ITEM_SONG_MINUET + msgCtx->ocarinaStaff->state);
- PRINTF(VT_RST);
+ PRINTF_RST();
msgCtx->stateTimer = 20;
Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@@ -3600,14 +3600,14 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
Message_CloseTextbox(play);
PRINTF(
T("録音終了!!!!!!!!!録音終了\n", "Recording complete!!!!!!!!! Recording Complete\n"));
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("\n====================================================================\n");
MemCpy(gSaveContext.save.info.scarecrowLongSong, gScarecrowLongSongPtr,
sizeof(gSaveContext.save.info.scarecrowLongSong));
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowLongSong); i++) {
PRINTF("%d, ", gSaveContext.save.info.scarecrowLongSong[i]);
}
- PRINTF(VT_RST);
+ PRINTF_RST();
PRINTF("\n====================================================================\n");
}
DRAW_TEXT(play, &gfx, false);
@@ -3665,14 +3665,14 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_DONE;
Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("\n====================================================================\n");
MemCpy(gSaveContext.save.info.scarecrowSpawnSong, gScarecrowSpawnSongPtr,
sizeof(gSaveContext.save.info.scarecrowSpawnSong));
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowSpawnSong); i++) {
PRINTF("%d, ", gSaveContext.save.info.scarecrowSpawnSong[i]);
}
- PRINTF(VT_RST);
+ PRINTF_RST();
PRINTF("\n====================================================================\n");
} else if (msgCtx->ocarinaStaff->state == OCARINA_RECORD_REJECTED ||
CHECK_BTN_ALL(play->state.input[0].press.button, BTN_B)) {
@@ -4289,7 +4289,7 @@ void Message_Update(PlayState* play) {
gSaveContext.prevHudVisibilityMode = HUD_VISIBILITY_ALL;
}
if (play->csCtx.state == 0) {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("day_time=%x active_camera=%d ", gSaveContext.save.cutsceneIndex, play->activeCamId);
if (msgCtx->textId != 0x2061 && msgCtx->textId != 0x2025 && msgCtx->textId != 0x208C &&
@@ -4307,7 +4307,7 @@ void Message_Update(PlayState* play) {
}
}
}
- PRINTF(VT_RST);
+ PRINTF_RST();
msgCtx->msgLength = 0;
msgCtx->msgMode = MSGMODE_NONE;
interfaceCtx->unk_1FA = interfaceCtx->unk_1FC = 0;
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index 2697d39857..fd780e2a52 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -852,7 +852,7 @@ void func_80083108(PlayState* play) {
(gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOMBCHU) ||
(gSaveContext.save.info.equips.buttonItems[0] == ITEM_NONE)) {
if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) ||
- (gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] == 0)) {
+ (gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] == 0)) {
gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
sp28 = true;
@@ -876,7 +876,7 @@ void func_80083108(PlayState* play) {
(gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOMBCHU) ||
(gSaveContext.save.info.equips.buttonItems[0] == ITEM_NONE)) {
if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) ||
- (gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] == 0)) {
+ (gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] == 0)) {
gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
sp28 = true;
@@ -1135,7 +1135,7 @@ void Interface_SetSceneRestrictions(PlayState* play) {
interfaceCtx->restrictions.dinsNayrus = (sRestrictionFlags[i].flags3 & 0x0C) >> 2;
interfaceCtx->restrictions.all = (sRestrictionFlags[i].flags3 & 0x03) >> 0;
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("parameter->button_status = %x,%x,%x\n", sRestrictionFlags[i].flags1, sRestrictionFlags[i].flags2,
sRestrictionFlags[i].flags3);
PRINTF("h_gage=%d, b_button=%d, a_button=%d, c_bottle=%d\n", interfaceCtx->restrictions.hGauge,
@@ -1147,7 +1147,7 @@ void Interface_SetSceneRestrictions(PlayState* play) {
PRINTF("c_sunmoon=%d, m_wind=%d, m_magic=%d, another=%d\n", interfaceCtx->restrictions.sunsSong,
interfaceCtx->restrictions.farores, interfaceCtx->restrictions.dinsNayrus,
interfaceCtx->restrictions.all);
- PRINTF(VT_RST);
+ PRINTF_RST();
return;
}
i++;
@@ -1346,7 +1346,7 @@ void func_80084BF4(PlayState* play, u16 flag) {
}
} else if (gSaveContext.save.info.equips.buttonItems[0] == ITEM_NONE) {
if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) ||
- (gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] == 0)) {
+ (gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] == 0)) {
gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
Interface_LoadItemIcon1(play, 0);
}
@@ -1376,16 +1376,16 @@ u8 Item_Give(PlayState* play, u8 item) {
slot = SLOT(sExtraItemBases[item - ITEM_DEKU_STICKS_5]);
}
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("item_get_setting=%d pt=%d z=%x\n", item, slot, gSaveContext.save.info.inventory.items[slot]);
- PRINTF(VT_RST);
+ PRINTF_RST();
if ((item >= ITEM_MEDALLION_FOREST) && (item <= ITEM_MEDALLION_LIGHT)) {
gSaveContext.save.info.inventory.questItems |= gBitFlags[item - ITEM_MEDALLION_FOREST + QUEST_MEDALLION_FOREST];
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("封印 = %x\n", "Seals = %x\n"), gSaveContext.save.info.inventory.questItems);
- PRINTF(VT_RST);
+ PRINTF_RST();
if (item == ITEM_MEDALLION_WATER) {
Horse_FixLakeHyliaPosition(play);
@@ -1395,38 +1395,38 @@ u8 Item_Give(PlayState* play, u8 item) {
} else if ((item >= ITEM_SONG_MINUET) && (item <= ITEM_SONG_STORMS)) {
gSaveContext.save.info.inventory.questItems |= gBitFlags[item - ITEM_SONG_MINUET + QUEST_SONG_MINUET];
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("楽譜 = %x\n", "Musical scores = %x\n"), gSaveContext.save.info.inventory.questItems);
PRINTF(T("楽譜 = %x (%x) (%x)\n", "Musical scores = %x (%x) (%x)\n"),
gSaveContext.save.info.inventory.questItems, gBitFlags[item - ITEM_SONG_MINUET + QUEST_SONG_MINUET],
gBitFlags[item - ITEM_SONG_MINUET]);
- PRINTF(VT_RST);
+ PRINTF_RST();
return ITEM_NONE;
} else if ((item >= ITEM_KOKIRI_EMERALD) && (item <= ITEM_ZORA_SAPPHIRE)) {
gSaveContext.save.info.inventory.questItems |= gBitFlags[item - ITEM_KOKIRI_EMERALD + QUEST_KOKIRI_EMERALD];
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("精霊石 = %x\n", "Spiritual Stones = %x\n"), gSaveContext.save.info.inventory.questItems);
- PRINTF(VT_RST);
+ PRINTF_RST();
return ITEM_NONE;
} else if ((item == ITEM_STONE_OF_AGONY) || (item == ITEM_GERUDOS_CARD)) {
gSaveContext.save.info.inventory.questItems |= gBitFlags[item - ITEM_STONE_OF_AGONY + QUEST_STONE_OF_AGONY];
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("アイテム = %x\n", "Items = %x\n"), gSaveContext.save.info.inventory.questItems);
- PRINTF(VT_RST);
+ PRINTF_RST();
return ITEM_NONE;
} else if (item == ITEM_SKULL_TOKEN) {
gSaveContext.save.info.inventory.questItems |= gBitFlags[item - ITEM_SKULL_TOKEN + QUEST_SKULL_TOKEN];
gSaveContext.save.info.inventory.gsTokens++;
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("Nコイン = %x(%d)\n", "N Coins = %x(%d)\n"), gSaveContext.save.info.inventory.questItems,
gSaveContext.save.info.inventory.gsTokens);
- PRINTF(VT_RST);
+ PRINTF_RST();
return ITEM_NONE;
} else if ((item >= ITEM_SWORD_KOKIRI) && (item <= ITEM_SWORD_BIGGORON)) {
@@ -1869,9 +1869,9 @@ u8 Item_CheckObtainability(u8 item) {
slot = SLOT(sExtraItemBases[item - ITEM_DEKU_STICKS_5]);
}
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("item_get_non_setting=%d pt=%d z=%x\n", item, slot, gSaveContext.save.info.inventory.items[slot]);
- PRINTF(VT_RST);
+ PRINTF_RST();
if ((item >= ITEM_MEDALLION_FOREST) && (item <= ITEM_MEDALLION_LIGHT)) {
return ITEM_NONE;
@@ -3545,11 +3545,11 @@ void Interface_Draw(PlayState* play) {
for (svar1 = 0; svar1 < ARRAY_COUNT(gSpoilingItems); svar1++) {
if (INV_CONTENT(ITEM_TRADE_ADULT) == gSpoilingItems[svar1]) {
#if OOT_VERSION >= NTSC_1_1
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] &=
- (u16) ~(EVENTINF_INGO_RACE_STATE_MASK | EVENTINF_INGO_RACE_HORSETYPE_MASK |
- EVENTINF_INGO_RACE_LOST_ONCE_MASK | EVENTINF_INGO_RACE_SECOND_RACE_MASK |
- EVENTINF_INGO_RACE_0F_MASK);
- PRINTF("EVENT_INF=%x\n", gSaveContext.eventInf[EVENTINF_HORSES_INDEX]);
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] &=
+ (u16) ~(EVENTINF_INGO_RACE_STATE_MASK | EVENTINF_MASK(EVENTINF_INGO_RACE_HORSETYPE) |
+ EVENTINF_MASK(EVENTINF_INGO_RACE_LOST_ONCE) |
+ EVENTINF_MASK(EVENTINF_INGO_RACE_SECOND_RACE) | EVENTINF_MASK(EVENTINF_INGO_RACE_0F));
+ PRINTF("EVENT_INF=%x\n", gSaveContext.eventInf[EVENTINF_INDEX_HORSES]);
#endif
play->nextEntranceIndex = spoilingItemEntrances[svar1];
INV_CONTENT(gSpoilingItemReverts[svar1]) = gSpoilingItemReverts[svar1];
@@ -4277,13 +4277,13 @@ void Interface_Update(PlayState* play) {
if (gSaveContext.save.info.playerData.isMagicAcquired && (gSaveContext.save.info.playerData.magicLevel == 0)) {
gSaveContext.save.info.playerData.magicLevel = gSaveContext.save.info.playerData.isDoubleMagicAcquired + 1;
gSaveContext.magicState = MAGIC_STATE_STEP_CAPACITY;
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("魔法スター─────ト!!!!!!!!!\n", "Magic Start!!!!!!!!!\n"));
PRINTF("MAGIC_MAX=%d\n", gSaveContext.save.info.playerData.magicLevel);
PRINTF("MAGIC_NOW=%d\n", gSaveContext.save.info.playerData.magic);
PRINTF("Z_MAGIC_NOW_NOW=%d\n", gSaveContext.magicFillTarget);
PRINTF("Z_MAGIC_NOW_MAX=%d\n", gSaveContext.magicCapacity);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
Magic_Update(play);
diff --git a/src/code/z_play.c b/src/code/z_play.c
index 08f5d2de29..a04391aa89 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -176,7 +176,7 @@ void Play_SetupTransition(PlayState* this, s32 transitionType) {
break;
default:
- HUNGUP_AND_CRASH("../z_play.c", LN5(2263, 2266, 2269, 2272, 2287, 2290, 2293));
+ HUNGUP_AND_CRASH("../z_play.c", LN5(2263, 2266, 2269, 2272, 2282, 2287, 2290, 2293));
break;
}
}
diff --git a/src/code/z_room.c b/src/code/z_room.c
index 67d99eb214..0c5d37f551 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -458,7 +458,7 @@ RoomShapeImageMultiBgEntry* Room_GetImageMultiBgEntry(RoomShapeImageMulti* roomS
"z_room.c: Data consistent with camera id does not exist camid=%d\n") VT_RST,
bgCamIndex);
-#if PLATFORM_GC
+#if !PLATFORM_N64
LogUtils_HungupThread("../z_room.c", 726);
#else
Fault_AddHungupAndCrash("../z_room.c", LN2(724, 727, 721));
@@ -545,7 +545,7 @@ void Room_DrawImage(PlayState* play, Room* room, u32 flags) {
} else if (roomShape->amountType == ROOM_SHAPE_IMAGE_AMOUNT_MULTI) {
Room_DrawImageMulti(play, room, flags);
} else {
-#if PLATFORM_GC
+#if !PLATFORM_N64
LogUtils_HungupThread("../z_room.c", 841);
#else
Fault_AddHungupAndCrash("../z_room.c", LN2(849, 852, 836));
@@ -611,14 +611,14 @@ u32 Room_SetupFirstRoom(PlayState* play, RoomContext* roomCtx) {
}
}
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF(T("部屋バッファサイズ=%08x(%5.1fK)\n", "Room buffer size=%08x(%5.1fK)\n"), roomBufferSize,
roomBufferSize / 1024.0f);
roomCtx->bufPtrs[0] = GAME_STATE_ALLOC(&play->state, roomBufferSize, "../z_room.c", 946);
PRINTF(T("部屋バッファ開始ポインタ=%08x\n", "Room buffer initial pointer=%08x\n"), roomCtx->bufPtrs[0]);
roomCtx->bufPtrs[1] = (void*)((uintptr_t)roomCtx->bufPtrs[0] + roomBufferSize);
PRINTF(T("部屋バッファ終了ポインタ=%08x\n", "Room buffer end pointer=%08x\n"), roomCtx->bufPtrs[1]);
- PRINTF(VT_RST);
+ PRINTF_RST();
roomCtx->activeBufPage = 0;
roomCtx->status = 0;
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index d162fb740b..bcb4c5ba9b 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -87,9 +87,9 @@ void Object_InitContext(PlayState* play, ObjectContext* objectCtx) {
objectCtx->slots[i].id = OBJECT_INVALID;
}
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF(T("オブジェクト入れ替えバンク情報 %8.3fKB\n", "Object exchange bank data %8.3fKB\n"), spaceSize / 1024.0f);
- PRINTF(VT_RST);
+ PRINTF_RST();
objectCtx->spaceStart = objectCtx->slots[0].segment =
GAME_STATE_ALLOC(&play->state, spaceSize, "../z_scene.c", 219);
@@ -195,9 +195,9 @@ s32 Scene_ExecuteCommands(PlayState* play, SceneCmd* sceneCmd) {
if (cmdCode < ARRAY_COUNT(sSceneCmdHandlers)) {
sSceneCmdHandlers[cmdCode](play, sceneCmd);
} else {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("code の値が異常です\n", "code variable is abnormal\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
}
sceneCmd++;
diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c
index a953bdb214..49502f4ec9 100644
--- a/src/code/z_skelanime.c
+++ b/src/code/z_skelanime.c
@@ -71,9 +71,9 @@ void SkelAnime_DrawLod(PlayState* play, void** skeleton, Vec3s* jointTable, Over
Vec3s rot;
if (skeleton == NULL) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("Si2_Lod_draw():skelがNULLです。\n", "Si2_Lod_draw(): skel is NULL.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return;
}
@@ -184,9 +184,9 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx));
if (skeleton == NULL) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("Si2_Lod_draw_SV():skelがNULLです。\n", "Si2_Lod_draw_SV(): skel is NULL.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return;
}
@@ -287,9 +287,9 @@ void SkelAnime_DrawOpa(PlayState* play, void** skeleton, Vec3s* jointTable, Over
Vec3s rot;
if (skeleton == NULL) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("Si2_draw():skelがNULLです。\n", "Si2_draw(): skel is NULL.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return;
}
@@ -400,9 +400,9 @@ void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable,
Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx));
if (skeleton == NULL) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("Si2_draw_SV():skelがNULLです。\n", "Si2_draw_SV(): skel is NULL.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return;
}
@@ -553,9 +553,9 @@ Gfx* SkelAnime_Draw(PlayState* play, void** skeleton, Vec3s* jointTable, Overrid
Vec3s rot;
if (skeleton == NULL) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("Si2_draw2():skelがNULLです。NULLを返します。\n", "Si2_draw2(): skel is NULL. Returns NULL.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return NULL;
}
@@ -661,9 +661,9 @@ Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32
Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(*mtx));
if (skeleton == NULL) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("Si2_draw2_SV():skelがNULLです。NULLを返します。\n", "Si2_draw2_SV(): skel is NULL. Returns NULL.\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return NULL;
}
@@ -849,7 +849,7 @@ AnimTask* AnimTaskQueue_NewTask(AnimTaskQueue* animTaskQueue, s32 type) {
return task;
}
-#if PLATFORM_N64
+#if !PLATFORM_GC
#define LINK_ANIMATION_OFFSET(addr, offset) \
(((uintptr_t)_link_animetionSegmentRomStart) + SEGMENT_OFFSET(addr) + (offset))
#else
@@ -1129,10 +1129,10 @@ void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeade
}
if ((skelAnime->jointTable == NULL) || (skelAnime->morphTable == NULL)) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("Skeleton_Info_Rom_SV_ct メモリアロケーションエラー\n",
"Skeleton_Info_Rom_SV_ct Memory allocation error\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
}
LinkAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f);
@@ -1443,9 +1443,9 @@ BAD_RETURN(s32) SkelAnime_Init(PlayState* play, SkelAnime* skelAnime, SkeletonHe
skelAnime->morphTable = morphTable;
}
if ((skelAnime->jointTable == NULL) || (skelAnime->morphTable == NULL)) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("Skeleton_Info2_ct メモリアロケーションエラー\n", "Skeleton_Info2_ct Memory allocation error\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
}
if (animation != NULL) {
@@ -1476,10 +1476,10 @@ BAD_RETURN(s32) SkelAnime_InitFlex(PlayState* play, SkelAnime* skelAnime, FlexSk
skelAnime->morphTable = morphTable;
}
if ((skelAnime->jointTable == NULL) || (skelAnime->morphTable == NULL)) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("Skeleton_Info_Rom_SV_ct メモリアロケーションエラー\n",
"Skeleton_Info_Rom_SV_ct Memory allocation error\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
}
if (animation != NULL) {
@@ -1501,10 +1501,10 @@ BAD_RETURN(s32) SkelAnime_InitSkin(PlayState* play, SkelAnime* skelAnime, Skelet
skelAnime->morphTable =
ZELDA_ARENA_MALLOC(skelAnime->limbCount * sizeof(*skelAnime->morphTable), "../z_skelanime.c", 3121);
if ((skelAnime->jointTable == NULL) || (skelAnime->morphTable == NULL)) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("Skeleton_Info2_skin2_ct メモリアロケーションエラー\n",
"Skeleton_Info2_skin2_ct Memory allocation error\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
}
if (animation != NULL) {
diff --git a/src/code/z_skin_matrix.c b/src/code/z_skin_matrix.c
index e5d0dfe99b..689fe67107 100644
--- a/src/code/z_skin_matrix.c
+++ b/src/code/z_skin_matrix.c
@@ -252,10 +252,10 @@ s32 SkinMatrix_Invert(MtxF* src, MtxF* dest) {
// Reaching row = 4 means the column is either all 0 or a duplicate column.
// Therefore src is a singular matrix (0 determinant).
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
PRINTF(T("Skin_Matrix_InverseMatrix():逆行列つくれません\n",
"Skin_Matrix_InverseMatrix(): Cannot create inverse matrix\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
return 2;
}
diff --git a/src/code/z_sram.c b/src/code/z_sram.c
index 114c9f60e1..28871572c4 100644
--- a/src/code/z_sram.c
+++ b/src/code/z_sram.c
@@ -162,7 +162,7 @@ void Sram_InitNewSave(void) {
gSaveContext.save.info.horseData.pos.z = 5497;
gSaveContext.save.info.horseData.angle = -0x6AD9;
gSaveContext.save.info.playerData.magicLevel = 0;
- gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 1;
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] = 1;
gSaveContext.save.info.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
}
@@ -325,8 +325,15 @@ void Sram_InitDebugSave(void) {
gSaveContext.save.info.horseData.pos.y = 72;
gSaveContext.save.info.horseData.pos.z = 5497;
gSaveContext.save.info.horseData.angle = -0x6AD9;
- gSaveContext.save.info.infTable[0] |= 0x5009;
- gSaveContext.save.info.eventChkInf[0] |= 0x123F;
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_0] |= INFTABLE_MASK(INFTABLE_00) | INFTABLE_MASK(INFTABLE_03) |
+ INFTABLE_MASK(INFTABLE_0C) | INFTABLE_MASK(INFTABLE_0E);
+
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_0] |=
+ EVENTCHKINF_MASK(EVENTCHKINF_00_UNUSED) | EVENTCHKINF_MASK(EVENTCHKINF_01_UNUSED) |
+ EVENTCHKINF_MASK(EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS) | EVENTCHKINF_MASK(EVENTCHKINF_03) |
+ EVENTCHKINF_MASK(EVENTCHKINF_04) | EVENTCHKINF_MASK(EVENTCHKINF_05) | EVENTCHKINF_MASK(EVENTCHKINF_09) |
+ EVENTCHKINF_MASK(EVENTCHKINF_0C);
+
SET_EVENTCHKINF(EVENTCHKINF_80);
SET_EVENTCHKINF(EVENTCHKINF_C4);
@@ -385,7 +392,7 @@ void Sram_OpenSave(SramContext* sramCtx) {
MemCpy(&gSaveContext, sramCtx->readBuff + i, sizeof(Save));
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("SCENE_DATA_ID = %d SceneNo = %d\n", gSaveContext.save.info.playerData.savedSceneId,
((void)0, gSaveContext.save.entranceIndex));
@@ -458,14 +465,14 @@ void Sram_OpenSave(SramContext* sramCtx) {
}
PRINTF("scene_no = %d\n", gSaveContext.save.entranceIndex);
- PRINTF(VT_RST);
+ PRINTF_RST();
if (gSaveContext.save.info.playerData.health < 0x30) {
gSaveContext.save.info.playerData.health = 0x30;
}
if (gSaveContext.save.info.scarecrowLongSongSet) {
- PRINTF(VT_FGCOL(BLUE));
+ PRINTF_COLOR_BLUE();
PRINTF("\n====================================================================\n");
MemCpy(gScarecrowLongSongPtr, gSaveContext.save.info.scarecrowLongSong,
@@ -477,11 +484,11 @@ void Sram_OpenSave(SramContext* sramCtx) {
}
PRINTF("\n====================================================================\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
}
if (gSaveContext.save.info.scarecrowSpawnSongSet) {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("\n====================================================================\n");
MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.info.scarecrowSpawnSong,
@@ -493,13 +500,13 @@ void Sram_OpenSave(SramContext* sramCtx) {
}
PRINTF("\n====================================================================\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
}
// if zelda cutscene has been watched but lullaby was not obtained, restore cutscene and take away letter
if (GET_EVENTCHKINF(EVENTCHKINF_40) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
- i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_40_INDEX] & ~EVENTCHKINF_40_MASK;
- gSaveContext.save.info.eventChkInf[EVENTCHKINF_40_INDEX] = i;
+ i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40] & ~EVENTCHKINF_MASK(EVENTCHKINF_40);
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40] = i;
INV_CONTENT(ITEM_ZELDAS_LETTER) = ITEM_CHICKEN;
@@ -986,11 +993,11 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
PRINTF(T("GOOD!GOOD! サイズ=%d + %d = %d\n", "GOOD! GOOD! Size = %d + %d = %d\n"), sizeof(SaveInfo), 4,
sizeof(SaveInfo) + 4);
- PRINTF(VT_FGCOL(BLUE));
+ PRINTF_COLOR_BLUE();
PRINTF("Na_SetSoundOutputMode = %d\n", gSaveContext.audioSetting);
PRINTF("Na_SetSoundOutputMode = %d\n", gSaveContext.audioSetting);
PRINTF("Na_SetSoundOutputMode = %d\n", gSaveContext.audioSetting);
- PRINTF(VT_RST);
+ PRINTF_RST();
func_800F6700(gSaveContext.audioSetting);
}
diff --git a/src/code/z_view.c b/src/code/z_view.c
index 37e8ac9b00..5b68f00bf4 100644
--- a/src/code/z_view.c
+++ b/src/code/z_view.c
@@ -647,11 +647,11 @@ s32 View_ErrorCheckEyePosition(f32 eyeX, f32 eyeY, f32 eyeZ) {
}
if (error != 0) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF(T("eye が大きすぎます eye=[%8.3f %8.3f %8.3f] error=%d\n",
"eye is too large eye=[%8.3f %8.3f %8.3f] error=%d\n"),
eyeX, eyeY, eyeZ, error);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
return error;
diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c
index 59fa5df2d0..0d2f5716fa 100644
--- a/src/code/z_vimode.c
+++ b/src/code/z_vimode.c
@@ -86,7 +86,7 @@ void ViMode_Configure(ViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antia
yScaleHiOddField = modeF ? (loResInterlaced ? (F210(0.75) << 16) : (F210(0.5) << 16)) : 0;
viMode->customViMode.type = type;
- viMode->customViMode.comRegs.ctrl = VI_CTRL_PIXEL_ADV_3 | VI_CTRL_GAMMA_ON | VI_CTRL_GAMMA_DITHER_ON |
+ viMode->customViMode.comRegs.ctrl = VI_CTRL_PIXEL_ADV(3) | VI_CTRL_GAMMA_ON | VI_CTRL_GAMMA_DITHER_ON |
(!loResDeinterlaced ? VI_CTRL_SERRATE_ON : 0) |
(antialiasOn ? VI_CTRL_DIVOT_ON : 0) |
(fb32Bit ? VI_CTRL_TYPE_32 : VI_CTRL_TYPE_16);
diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c
index d2aac8c1f3..2e7953362b 100644
--- a/src/code/z_vr_box.c
+++ b/src/code/z_vr_box.c
@@ -1030,7 +1030,7 @@ void Skybox_Init(GameState* state, SkyboxContext* skyboxCtx, s16 skyboxId) {
// Precompute vertices and display lists for drawing the skybox
if (skyboxId != SKYBOX_NONE) {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
if (skyboxCtx->drawType != SKYBOX_DRAW_128) {
skyboxCtx->dListBuf = GAME_STATE_ALLOC(state, 8 * 150 * sizeof(Gfx), "../z_vr_box.c", 1636);
@@ -1056,6 +1056,6 @@ void Skybox_Init(GameState* state, SkyboxContext* skyboxCtx, s16 skyboxId) {
Skybox_Calculate128(skyboxCtx, 5); // compute 5 faces, excludes the bottom face
}
}
- PRINTF(VT_RST);
+ PRINTF_RST();
}
}
diff --git a/src/libc/absf.s b/src/libc/absf.s
index b423334614..58450e7791 100644
--- a/src/libc/absf.s
+++ b/src/libc/absf.s
@@ -1,15 +1,9 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-#if DEBUG_FEATURES
-.set noreorder
-#endif
-
-.section .text
-
-.balign 16
+.text
LEAF(absf)
- abs.s $f0, $f12
- jr $ra
- nop
+ abs.s fv0, fa0
+ jr ra
END(absf)
diff --git a/src/libc/sqrt.s b/src/libc/sqrt.s
index 6ffb2b7085..1d69d3adb2 100644
--- a/src/libc/sqrt.s
+++ b/src/libc/sqrt.s
@@ -1,15 +1,9 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-#if DEBUG_FEATURES
-.set noreorder
-#endif
-
-.section .text
-
-.balign 16
+.text
LEAF(sqrt)
- sqrt.d $f0, $f12
- jr $ra
- nop
+ sqrt.d fv0, fa0
+ jr ra
END(sqrt)
diff --git a/src/libc64/__osMalloc_gc.c b/src/libc64/__osMalloc_gc.c
index f2770767fa..025c21bff9 100644
--- a/src/libc64/__osMalloc_gc.c
+++ b/src/libc64/__osMalloc_gc.c
@@ -3,8 +3,6 @@
#include "libc64/os_malloc.h"
#include "terminal.h"
-#if PLATFORM_GC
-
#define FILL_ALLOC_BLOCK_FLAG (1 << 0)
#define FILL_FREE_BLOCK_FLAG (1 << 1)
#define CHECK_FREE_BLOCK_FLAG (1 << 2)
@@ -891,5 +889,3 @@ u8 ArenaImpl_GetAllocFailures(Arena* arena) {
return arena->allocFailures;
}
#endif
-
-#endif
diff --git a/src/libc64/__osMalloc_n64.c b/src/libc64/__osMalloc_n64.c
index 8efb4ec6c8..56996feac9 100644
--- a/src/libc64/__osMalloc_n64.c
+++ b/src/libc64/__osMalloc_n64.c
@@ -2,8 +2,6 @@
#include "fault.h"
#include "libc64/os_malloc.h"
-#if PLATFORM_N64
-
#define NODE_MAGIC 0x7373
#define NODE_IS_VALID(node) ((node)->magic == NODE_MAGIC)
@@ -470,5 +468,3 @@ s32 __osCheckArena(Arena* arena) {
u8 ArenaImpl_GetAllocFailures(Arena* arena) {
return arena->allocFailures;
}
-
-#endif
diff --git a/src/libc64/fp.s b/src/libc64/fp.s
index d5b42094a3..32c084ef56 100644
--- a/src/libc64/fp.s
+++ b/src/libc64/fp.s
@@ -1,12 +1,26 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noreorder
-
-.section .data
-
-.balign 16
+.data
#if !PLATFORM_N64
+
+DATA(gPositiveInfinity)
+ .word 0x7F800000
+ENDDATA(gPositiveInfinity)
+
+DATA(gNegativeInfinity)
+ .word 0xFF800000
+ENDDATA(gNegativeInfinity)
+
+DATA(gPositiveZero)
+ .word 0x00000000
+ENDDATA(gPositiveZero)
+
+DATA(gNegativeZero)
+ .word 0x80000000
+ENDDATA(gNegativeZero)
+
DATA(qNaN0x3FFFFF)
.word 0x7FBFFFFF
ENDDATA(qNaN0x3FFFFF)
@@ -18,150 +32,135 @@ ENDDATA(qNaN0x10000)
DATA(sNaN0x3FFFFF)
.word 0x7FFFFFFF
ENDDATA(sNaN0x3FFFFF)
+
#endif
-.section .text
-
-.balign 16
+.text
LEAF(floorf)
- floor.w.s $f12, $f12
- jr $ra
- cvt.s.w $f0, $f12
+ floor.w.s fa0, fa0
+ cvt.s.w fv0, fa0
+ jr ra
END(floorf)
LEAF(floor)
- floor.w.d $f12, $f12
- jr $ra
- cvt.d.w $f0, $f12
+ floor.w.d fa0, fa0
+ cvt.d.w fv0, fa0
+ jr ra
END(floor)
LEAF(lfloorf)
- floor.w.s $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ floor.w.s ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lfloorf)
LEAF(lfloor)
- floor.w.d $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ floor.w.d ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lfloor)
LEAF(ceilf)
- ceil.w.s $f12, $f12
- jr $ra
- cvt.s.w $f0, $f12
+ ceil.w.s fa0, fa0
+ cvt.s.w fv0, fa0
+ jr ra
END(ceilf)
LEAF(ceil)
- ceil.w.d $f12, $f12
- jr $ra
- cvt.d.w $f0, $f12
+ ceil.w.d fa0, fa0
+ cvt.d.w fv0, fa0
+ jr ra
END(ceil)
LEAF(lceilf)
- ceil.w.s $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ ceil.w.s ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lceilf)
LEAF(lceil)
- ceil.w.d $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ ceil.w.d ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lceil)
LEAF(truncf)
- trunc.w.s $f12, $f12
- jr $ra
- cvt.s.w $f0, $f12
+ trunc.w.s fa0, fa0
+ cvt.s.w fv0, fa0
+ jr ra
END(truncf)
LEAF(trunc)
- trunc.w.d $f12, $f12
- jr $ra
- cvt.d.w $f0, $f12
+ trunc.w.d fa0, fa0
+ cvt.d.w fv0, fa0
+ jr ra
END(trunc)
LEAF(ltruncf)
- trunc.w.s $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ trunc.w.s ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(ltruncf)
LEAF(ltrunc)
- trunc.w.d $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ trunc.w.d ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(ltrunc)
LEAF(nearbyintf)
- round.w.s $f12, $f12
- jr $ra
- cvt.s.w $f0, $f12
+ round.w.s fa0, fa0
+ cvt.s.w fv0, fa0
+ jr ra
END(nearbyintf)
LEAF(nearbyint)
- round.w.d $f12, $f12
- jr $ra
- cvt.d.w $f0, $f12
+ round.w.d fa0, fa0
+ cvt.d.w fv0, fa0
+ jr ra
END(nearbyint)
LEAF(lnearbyintf)
- round.w.s $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ round.w.s ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lnearbyintf)
LEAF(lnearbyint)
- round.w.d $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ round.w.d ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lnearbyint)
LEAF(roundf)
- li.s $f4, 0.5
- nop
- add.s $f0, $f12, $f4
- floor.w.s $f0, $f0
- jr $ra
- cvt.s.w $f0, $f0
+ li.s ft0, 0.5
+ add.s fv0, fa0, ft0
+ floor.w.s fv0, fv0
+ cvt.s.w fv0, fv0
+ jr ra
END(roundf)
LEAF(round)
- li.d $f4, 0.5
- nop
- add.d $f0, $f12, $f4
- floor.w.d $f0, $f0
- jr $ra
- cvt.d.w $f0, $f0
+ li.d ft0, 0.5
+ add.d fv0, fa0, ft0
+ floor.w.d fv0, fv0
+ cvt.d.w fv0, fv0
+ jr ra
END(round)
LEAF(lroundf)
- li.s $f4, 0.5
- nop
- add.s $f0, $f12, $f4
- floor.w.s $f0, $f0
- mfc1 $v0, $f0
- jr $ra
- nop
+ li.s ft0, 0.5
+ add.s fv0, fa0, ft0
+ floor.w.s fv0, fv0
+ mfc1 v0, fv0
+ jr ra
END(lroundf)
LEAF(lround)
- li.d $f4, 0.5
- nop
- add.d $f0, $f12, $f4
- floor.w.d $f0, $f0
- mfc1 $v0, $f0
- jr $ra
- nop
+ li.d ft0, 0.5
+ add.d fv0, fa0, ft0
+ floor.w.d fv0, fv0
+ mfc1 v0, fv0
+ jr ra
END(lround)
diff --git a/src/libgcc/__cmpdi2.c b/src/libgcc/__cmpdi2.c
new file mode 100644
index 0000000000..4c477f8263
--- /dev/null
+++ b/src/libgcc/__cmpdi2.c
@@ -0,0 +1,2 @@
+#define L_cmpdi2
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/__divdi3.c b/src/libgcc/__divdi3.c
new file mode 100644
index 0000000000..26cc049c2f
--- /dev/null
+++ b/src/libgcc/__divdi3.c
@@ -0,0 +1,2 @@
+#define L_divdi3
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/__fixdfdi.c b/src/libgcc/__fixdfdi.c
new file mode 100644
index 0000000000..a0c73d0b8f
--- /dev/null
+++ b/src/libgcc/__fixdfdi.c
@@ -0,0 +1,2 @@
+#define L_fixdfdi
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/__fixsfdi.c b/src/libgcc/__fixsfdi.c
new file mode 100644
index 0000000000..4e6d6baf7b
--- /dev/null
+++ b/src/libgcc/__fixsfdi.c
@@ -0,0 +1,2 @@
+#define L_fixsfdi
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/__fixunsdfdi.c b/src/libgcc/__fixunsdfdi.c
new file mode 100644
index 0000000000..9940267102
--- /dev/null
+++ b/src/libgcc/__fixunsdfdi.c
@@ -0,0 +1,2 @@
+#define L_fixunsdfdi
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/__fixunssfdi.c b/src/libgcc/__fixunssfdi.c
new file mode 100644
index 0000000000..34b123e48f
--- /dev/null
+++ b/src/libgcc/__fixunssfdi.c
@@ -0,0 +1,2 @@
+#define L_fixunssfdi
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/__floatdidf.c b/src/libgcc/__floatdidf.c
new file mode 100644
index 0000000000..996973fe0f
--- /dev/null
+++ b/src/libgcc/__floatdidf.c
@@ -0,0 +1,2 @@
+#define L_floatdidf
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/__floatdisf.c b/src/libgcc/__floatdisf.c
new file mode 100644
index 0000000000..433988fa63
--- /dev/null
+++ b/src/libgcc/__floatdisf.c
@@ -0,0 +1,2 @@
+#define L_floatdisf
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/__moddi3.c b/src/libgcc/__moddi3.c
new file mode 100644
index 0000000000..f40a11ec73
--- /dev/null
+++ b/src/libgcc/__moddi3.c
@@ -0,0 +1,2 @@
+#define L_moddi3
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/__udivdi3.c b/src/libgcc/__udivdi3.c
new file mode 100644
index 0000000000..7c2e52eb78
--- /dev/null
+++ b/src/libgcc/__udivdi3.c
@@ -0,0 +1,2 @@
+#define L_udivdi3
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/__umoddi3.c b/src/libgcc/__umoddi3.c
new file mode 100644
index 0000000000..4cb7dec926
--- /dev/null
+++ b/src/libgcc/__umoddi3.c
@@ -0,0 +1,2 @@
+#define L_umoddi3
+#include "src/libgcc/libgcc2.inc.c"
diff --git a/src/libgcc/libgcc2.inc.c b/src/libgcc/libgcc2.inc.c
new file mode 100644
index 0000000000..d8b89b75ef
--- /dev/null
+++ b/src/libgcc/libgcc2.inc.c
@@ -0,0 +1,464 @@
+/* More subroutines needed by GCC output code on some machines. */
+/* Compile this one with gcc. */
+/* Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* As a special exception, if you link this library with other files,
+ some of which are compiled with GCC, to produce an executable,
+ this library does not by itself cause the resulting executable
+ to be covered by the GNU General Public License.
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
+/* Modified by ZeldaRET to keep only the parts that are relevant to the iQue build of OoT. */
+
+#include "ultra64/ultratypes.h"
+
+typedef u8 UQItype;
+typedef s32 SItype;
+typedef u32 USItype;
+typedef s64 DItype;
+typedef u64 UDItype;
+
+typedef f32 SFtype;
+typedef f64 DFtype;
+
+typedef s32 word_type;
+
+#define SI_TYPE_SIZE 32
+
+#define DI_SIZE 64
+#define DF_SIZE 53
+#define SF_SIZE 24
+
+#define WORD_SIZE 32
+#define HIGH_HALFWORD_COEFF (((UDItype)1) << (WORD_SIZE / 2))
+#define HIGH_WORD_COEFF (((UDItype)1) << WORD_SIZE)
+
+/* DIstructs are pairs of SItype values in big-endian order. */
+
+struct DIstruct {
+ SItype high, low;
+};
+
+/* We need this union to unpack/pack DImode values, since we don't have
+ any arithmetic yet. Incoming DImode parameters are stored into the
+ `ll' field, and the unpacked result is read from the struct `s'. */
+
+typedef union {
+ struct DIstruct s;
+ DItype ll;
+} DIunion;
+
+extern DItype __fixunssfdi(SFtype original_a);
+extern DItype __fixunsdfdi(DFtype a);
+
+#if defined(L_divdi3) || defined(L_moddi3)
+static inline DItype __negdi2(DItype u) {
+ DIunion w;
+ DIunion uu;
+
+ uu.ll = u;
+
+ w.s.low = -uu.s.low;
+ w.s.high = -uu.s.high - ((USItype)w.s.low > 0);
+
+ return w.ll;
+}
+#endif
+
+#if defined(L_udivdi3) || defined(L_divdi3) || defined(L_umoddi3) || defined(L_moddi3)
+static const UQItype __clz_tab[] = {
+ 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+};
+
+#include "src/libgcc/longlong.h"
+
+static inline UDItype __udivmoddi4(UDItype n, UDItype d, UDItype* rp) {
+ DIunion ww;
+ DIunion nn, dd;
+ DIunion rr;
+ USItype d0, d1, n0, n1, n2;
+ USItype q0, q1;
+ USItype b, bm;
+
+ nn.ll = n;
+ dd.ll = d;
+
+ d0 = dd.s.low;
+ d1 = dd.s.high;
+ n0 = nn.s.low;
+ n1 = nn.s.high;
+
+ if (d1 == 0) {
+ if (d0 > n1) {
+ /* 0q = nn / 0D */
+
+ count_leading_zeros(bm, d0);
+
+ if (bm != 0) {
+ /* Normalize, i.e. make the most significant bit of the
+ denominator set. */
+
+ d0 = d0 << bm;
+ n1 = (n1 << bm) | (n0 >> (SI_TYPE_SIZE - bm));
+ n0 = n0 << bm;
+ }
+
+ udiv_qrnnd(q0, n0, n1, n0, d0);
+ q1 = 0;
+
+ /* Remainder in n0 >> bm. */
+ } else {
+ /* qq = NN / 0d */
+
+ if (d0 == 0) {
+ d0 = 1 / d0; /* Divide intentionally by zero. */
+ }
+
+ count_leading_zeros(bm, d0);
+
+ if (bm == 0) {
+ /* From (n1 >= d0) /\ (the most significant bit of d0 is set),
+ conclude (the most significant bit of n1 is set) /\ (the
+ leading quotient digit q1 = 1).
+
+ This special case is necessary, not an optimization.
+ (Shifts counts of SI_TYPE_SIZE are undefined.) */
+
+ n1 -= d0;
+ q1 = 1;
+ } else {
+ /* Normalize. */
+
+ b = SI_TYPE_SIZE - bm;
+
+ d0 = d0 << bm;
+ n2 = n1 >> b;
+ n1 = (n1 << bm) | (n0 >> b);
+ n0 = n0 << bm;
+
+ udiv_qrnnd(q1, n1, n2, n1, d0);
+ }
+
+ /* n1 != d0... */
+
+ udiv_qrnnd(q0, n0, n1, n0, d0);
+
+ /* Remainder in n0 >> bm. */
+ }
+
+ if (rp != 0) {
+ rr.s.low = n0 >> bm;
+ rr.s.high = 0;
+ *rp = rr.ll;
+ }
+ } else {
+ if (d1 > n1) {
+ /* 00 = nn / DD */
+
+ q0 = 0;
+ q1 = 0;
+
+ /* Remainder in n1n0. */
+ if (rp != 0) {
+ rr.s.low = n0;
+ rr.s.high = n1;
+ *rp = rr.ll;
+ }
+ } else {
+ /* 0q = NN / dd */
+
+ count_leading_zeros(bm, d1);
+ if (bm == 0) {
+ /* From (n1 >= d1) /\ (the most significant bit of d1 is set),
+ conclude (the most significant bit of n1 is set) /\ (the
+ quotient digit q0 = 0 or 1).
+
+ This special case is necessary, not an optimization. */
+
+ /* The condition on the next line takes advantage of that
+ n1 >= d1 (true due to program flow). */
+ if (n1 > d1 || n0 >= d0) {
+ q0 = 1;
+ sub_ddmmss(n1, n0, n1, n0, d1, d0);
+ } else {
+ q0 = 0;
+ }
+
+ q1 = 0;
+
+ if (rp != 0) {
+ rr.s.low = n0;
+ rr.s.high = n1;
+ *rp = rr.ll;
+ }
+ } else {
+ USItype m1, m0;
+ /* Normalize. */
+
+ b = SI_TYPE_SIZE - bm;
+
+ d1 = (d1 << bm) | (d0 >> b);
+ d0 = d0 << bm;
+ n2 = n1 >> b;
+ n1 = (n1 << bm) | (n0 >> b);
+ n0 = n0 << bm;
+
+ udiv_qrnnd(q0, n1, n2, n1, d1);
+ umul_ppmm(m1, m0, q0, d0);
+
+ if (m1 > n1 || (m1 == n1 && m0 > n0)) {
+ q0--;
+ sub_ddmmss(m1, m0, m1, m0, d1, d0);
+ }
+
+ q1 = 0;
+
+ /* Remainder in (n1n0 - m1m0) >> bm. */
+ if (rp != 0) {
+ sub_ddmmss(n1, n0, n1, n0, m1, m0);
+ rr.s.low = (n1 << b) | (n0 >> bm);
+ rr.s.high = n1 >> bm;
+ *rp = rr.ll;
+ }
+ }
+ }
+ }
+
+ ww.s.low = q0;
+ ww.s.high = q1;
+ return ww.ll;
+}
+#endif
+
+#ifdef L_divdi3
+DItype __divdi3(DItype u, DItype v) {
+ word_type c = 0;
+ DIunion uu, vv;
+ DItype w;
+
+ uu.ll = u;
+ vv.ll = v;
+
+ if (uu.s.high < 0) {
+ c = ~c, uu.ll = __negdi2(uu.ll);
+ }
+ if (vv.s.high < 0) {
+ c = ~c, vv.ll = __negdi2(vv.ll);
+ }
+
+ w = __udivmoddi4(uu.ll, vv.ll, (UDItype*)0);
+ if (c) {
+ w = __negdi2(w);
+ }
+
+ return w;
+}
+#endif
+
+#ifdef L_moddi3
+DItype __moddi3(DItype u, DItype v) {
+ word_type c = 0;
+ DIunion uu, vv;
+ DItype w;
+
+ uu.ll = u;
+ vv.ll = v;
+
+ if (uu.s.high < 0) {
+ c = ~c, uu.ll = __negdi2(uu.ll);
+ }
+ if (vv.s.high < 0) {
+ vv.ll = __negdi2(vv.ll);
+ }
+
+ (void)__udivmoddi4(uu.ll, vv.ll, (UDItype*)&w);
+ if (c) {
+ w = __negdi2(w);
+ }
+
+ return w;
+}
+#endif
+
+#ifdef L_umoddi3
+UDItype __umoddi3(UDItype u, UDItype v) {
+ UDItype w;
+
+ (void)__udivmoddi4(u, v, &w);
+
+ return w;
+}
+#endif
+
+#ifdef L_udivdi3
+UDItype __udivdi3(UDItype n, UDItype d) {
+ return __udivmoddi4(n, d, (UDItype*)0);
+}
+#endif
+
+#ifdef L_cmpdi2
+word_type __cmpdi2(DItype a, DItype b) {
+ DIunion au, bu;
+
+ au.ll = a, bu.ll = b;
+
+ if (au.s.high < bu.s.high) {
+ return 0;
+ } else if (au.s.high > bu.s.high) {
+ return 2;
+ }
+ if ((USItype)au.s.low < (USItype)bu.s.low) {
+ return 0;
+ } else if ((USItype)au.s.low > (USItype)bu.s.low) {
+ return 2;
+ }
+ return 1;
+}
+#endif
+
+#ifdef L_fixunsdfdi
+DItype __fixunsdfdi(DFtype a) {
+ DFtype b;
+ UDItype v;
+
+ if (a < 0) {
+ return 0;
+ }
+
+ /* Compute high word of result, as a flonum. */
+ b = (a / HIGH_WORD_COEFF);
+ /* Convert that to fixed (but not to DItype!),
+ and shift it into the high word. */
+ v = (USItype)b;
+ v <<= WORD_SIZE;
+ /* Remove high part from the DFtype, leaving the low part as flonum. */
+ a -= (DFtype)v;
+ /* Convert that to fixed (but not to DItype!) and add it in.
+ Sometimes A comes out negative. This is significant, since
+ A has more bits than a long int does. */
+ if (a < 0) {
+ v -= (USItype)(-a);
+ } else {
+ v += (USItype)a;
+ }
+ return v;
+}
+#endif
+
+#ifdef L_fixdfdi
+DItype __fixdfdi(DFtype a) {
+ if (a < 0) {
+ return -__fixunsdfdi(-a);
+ }
+ return __fixunsdfdi(a);
+}
+#endif
+
+#ifdef L_fixunssfdi
+DItype __fixunssfdi(SFtype original_a) {
+ /* Convert the SFtype to a DFtype, because that is surely not going
+ to lose any bits. Some day someone else can write a faster version
+ that avoids converting to DFtype, and verify it really works right. */
+ DFtype a = original_a;
+ DFtype b;
+ UDItype v;
+
+ if (a < 0) {
+ return 0;
+ }
+
+ /* Compute high word of result, as a flonum. */
+ b = (a / HIGH_WORD_COEFF);
+ /* Convert that to fixed (but not to DItype!),
+ and shift it into the high word. */
+ v = (USItype)b;
+ v <<= WORD_SIZE;
+ /* Remove high part from the DFtype, leaving the low part as flonum. */
+ a -= (DFtype)v;
+ /* Convert that to fixed (but not to DItype!) and add it in.
+ Sometimes A comes out negative. This is significant, since
+ A has more bits than a long int does. */
+ if (a < 0) {
+ v -= (USItype)(-a);
+ } else {
+ v += (USItype)a;
+ }
+ return v;
+}
+#endif
+
+#ifdef L_fixsfdi
+DItype __fixsfdi(SFtype a) {
+ if (a < 0) {
+ return -__fixunssfdi(-a);
+ }
+ return __fixunssfdi(a);
+}
+#endif
+
+#ifdef L_floatdidf
+DFtype __floatdidf(DItype u) {
+ DFtype d;
+
+ d = (SItype)(u >> WORD_SIZE);
+ d *= HIGH_HALFWORD_COEFF;
+ d *= HIGH_HALFWORD_COEFF;
+ d += (USItype)(u & (HIGH_WORD_COEFF - 1));
+
+ return d;
+}
+#endif
+
+#ifdef L_floatdisf
+SFtype __floatdisf(DItype u) {
+ /* Do the calculation in DFmode
+ so that we don't lose any of the precision of the high word
+ while multiplying it. */
+ DFtype f;
+
+ /* Protect against double-rounding error.
+ Represent any low-order bits, that might be truncated in DFmode,
+ by a bit that won't be lost. The bit can go in anywhere below the
+ rounding position of the SFmode. A fixed mask and bit position
+ handles all usual configurations. It doesn't handle the case
+ of 128-bit DImode, however. */
+ if (DF_SIZE < DI_SIZE && DF_SIZE > (DI_SIZE - DF_SIZE + SF_SIZE)) {
+#define REP_BIT ((USItype)1 << (DI_SIZE - DF_SIZE))
+ if (!(-((DItype)1 << DF_SIZE) < u && u < ((DItype)1 << DF_SIZE))) {
+ if ((USItype)u & (REP_BIT - 1)) {
+ u |= REP_BIT;
+ }
+ }
+ }
+ f = (SItype)(u >> WORD_SIZE);
+ f *= HIGH_HALFWORD_COEFF;
+ f *= HIGH_HALFWORD_COEFF;
+ f += (USItype)(u & (HIGH_WORD_COEFF - 1));
+
+ return (SFtype)f;
+}
+#endif
diff --git a/src/libgcc/longlong.h b/src/libgcc/longlong.h
new file mode 100644
index 0000000000..403a7f6fa9
--- /dev/null
+++ b/src/libgcc/longlong.h
@@ -0,0 +1,149 @@
+/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
+ Copyright (C) 1991, 92, 94, 95, 96, 1997 Free Software Foundation, Inc.
+
+ This definition file is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2, or (at your option) any later version.
+
+ This definition file is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* Modified by ZeldaRET to keep only the parts that are relevant to the iQue build of OoT. */
+
+#define __BITS4 (SI_TYPE_SIZE / 4)
+#define __ll_B (1L << (SI_TYPE_SIZE / 2))
+#define __ll_lowpart(t) ((USItype)(t) % __ll_B)
+#define __ll_highpart(t) ((USItype)(t) / __ll_B)
+
+/* Define auxiliary asm macros.
+
+ 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand)
+ multiplies two USItype integers MULTIPLER and MULTIPLICAND,
+ and generates a two-part USItype product in HIGH_PROD and
+ LOW_PROD.
+
+ 2) __umulsidi3(a,b) multiplies two USItype integers A and B,
+ and returns a UDItype product. This is just a variant of umul_ppmm.
+
+ 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
+ denominator) divides a two-word unsigned integer, composed by the
+ integers HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and
+ places the quotient in QUOTIENT and the remainder in REMAINDER.
+ HIGH_NUMERATOR must be less than DENOMINATOR for correct operation.
+ If, in addition, the most significant bit of DENOMINATOR must be 1,
+ then the pre-processor symbol UDIV_NEEDS_NORMALIZATION is defined to 1.
+
+ 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
+ denominator). Like udiv_qrnnd but the numbers are signed. The
+ quotient is rounded towards 0.
+
+ 5) count_leading_zeros(count, x) counts the number of zero-bits from
+ the msb to the first non-zero bit. This is the number of steps X
+ needs to be shifted left to set the msb. Undefined for X == 0.
+
+ 6) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
+ high_addend_2, low_addend_2) adds two two-word unsigned integers,
+ composed by HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and
+ LOW_ADDEND_2 respectively. The result is placed in HIGH_SUM and
+ LOW_SUM. Overflow (i.e. carry out) is not stored anywhere, and is
+ lost.
+
+ 7) sub_ddmmss(high_difference, low_difference, high_minuend,
+ low_minuend, high_subtrahend, low_subtrahend) subtracts two
+ two-word unsigned integers, composed by HIGH_MINUEND_1 and
+ LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and LOW_SUBTRAHEND_2
+ respectively. The result is placed in HIGH_DIFFERENCE and
+ LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere,
+ and is lost.
+
+ If any of these macros are left undefined for a particular CPU,
+ C macros are used. */
+
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ do { \
+ USItype __x; \
+ __x = (al) + (bl); \
+ (sh) = (ah) + (bh) + (__x < (al)); \
+ (sl) = __x; \
+ } while (0)
+
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ do { \
+ USItype __x; \
+ __x = (al) - (bl); \
+ (sh) = (ah) - (bh) - (__x > (al)); \
+ (sl) = __x; \
+ } while (0)
+
+#if __GNUC__ < 3
+#define umul_ppmm(w1, w0, u, v) \
+ __asm__("multu %2,%3" : "=l"((USItype)(w0)), "=h"((USItype)(w1)) : "d"((USItype)(u)), "d"((USItype)(v)))
+#else
+#define umul_ppmm(w1, w0, u, v) \
+ __asm__("multu %2,%3\n\t" \
+ "mflo %0\n\t" \
+ "mfhi %1" \
+ : "=d"(w0), "=d"(w1) \
+ : "d"((USItype)(u)), "d"((USItype)(v)))
+#endif
+
+#define udiv_qrnnd(q, r, n1, n0, d) \
+ do { \
+ USItype __d1, __d0, __q1, __q0; \
+ USItype __r1, __r0, __m; \
+ __d1 = __ll_highpart(d); \
+ __d0 = __ll_lowpart(d); \
+ \
+ __r1 = (n1) % __d1; \
+ __q1 = (n1) / __d1; \
+ __m = (USItype)__q1 * __d0; \
+ __r1 = __r1 * __ll_B | __ll_highpart(n0); \
+ if (__r1 < __m) { \
+ __q1--, __r1 += (d); \
+ if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */ \
+ if (__r1 < __m) \
+ __q1--, __r1 += (d); \
+ } \
+ __r1 -= __m; \
+ \
+ __r0 = __r1 % __d1; \
+ __q0 = __r1 / __d1; \
+ __m = (USItype)__q0 * __d0; \
+ __r0 = __r0 * __ll_B | __ll_lowpart(n0); \
+ if (__r0 < __m) { \
+ __q0--, __r0 += (d); \
+ if (__r0 >= (d)) \
+ if (__r0 < __m) \
+ __q0--, __r0 += (d); \
+ } \
+ __r0 -= __m; \
+ \
+ (q) = (USItype)__q1 * __ll_B | __q0; \
+ (r) = __r0; \
+ } while (0)
+
+#define count_leading_zeros(count, x) \
+ do { \
+ USItype __xr = (x); \
+ USItype __a; \
+ \
+ if (SI_TYPE_SIZE <= 32) { \
+ __a = __xr < ((USItype)1 << 2 * __BITS4) \
+ ? (__xr < ((USItype)1 << __BITS4) ? 0 : __BITS4) \
+ : (__xr < ((USItype)1 << 3 * __BITS4) ? 2 * __BITS4 : 3 * __BITS4); \
+ } else { \
+ for (__a = SI_TYPE_SIZE - 8; __a > 0; __a -= 8) \
+ if (((__xr >> __a) & 0xff) != 0) \
+ break; \
+ } \
+ \
+ (count) = SI_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \
+ } while (0)
diff --git a/src/libleo/api/getaadr.s b/src/libleo/api/getaadr.s
index a36d27a5b3..95c1cfb14d 100644
--- a/src/libleo/api/getaadr.s
+++ b/src/libleo/api/getaadr.s
@@ -1,42 +1,33 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(LeoGetAAdr)
- bltz $a0, .out_of_range
- slti $at, $a0, 0x908
- beqz $at, .out_of_range
- nop
- lui $v1, %hi(asc2tbl)
- sll $t0, $a0, 2
- addiu $v1, %lo(asc2tbl)
- add $t1, $t0, $v1
- lbu $t8, 2($t1)
- lhu $t9, 0($t1)
- li $at, 0x70000
- andi $t2, $t8, 0xF
- addi $t3, $t2, 1
- sw $t3, ($a2)
- lb $t0, 3($t1)
- srl $t4, $t8, 4
- ori $at, $at, 0xEE80
- andi $t5, $t0, 1
- sll $t6, $t5, 4
- or $t7, $t6, $t4
- sw $t7, ($a1)
- sll $v0, $t9, 1
- sra $v1, $t0, 1
- sw $v1, ($a3)
- jr $ra
- add $v0, $v0, $at
+ bltz a0, .out_of_range
+ bge a0, 0x908, .out_of_range
+ sll t0, a0, 2
+ la v1, asc2tbl
+ add t1, t0, v1
+ lbu t8, 2(t1)
+ lhu t9, 0(t1)
+ andi t2, t8, 0xF
+ addi t3, t2, 1
+ sw t3, (a2)
+ lb t0, 3(t1)
+ srl t4, t8, 4
+ andi t5, t0, 1
+ sll t6, t5, 4
+ or t7, t6, t4
+ sw t7, (a1)
+ sll v0, t9, 1
+ sra v1, t0, 1
+ sw v1, (a3)
+ add v0, v0, 0x7EE80
+ jr ra
.out_of_range:
- jr $ra
- li $v0, -1
+ li v0, -1
+ jr ra
END(LeoGetAAdr)
DATA(asc2tbl)
diff --git a/src/libleo/api/getaadr2.s b/src/libleo/api/getaadr2.s
index e3ea0868bb..cac52cd90b 100644
--- a/src/libleo/api/getaadr2.s
+++ b/src/libleo/api/getaadr2.s
@@ -1,33 +1,25 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(LeoGetAAdr2)
- li $at, 0x10000
- srl $t8, $a0, 0xF
- ori $at, $at, 0xFFFE
- and $v1, $t8, $at
- li $at, 0x70000
- ori $at, $at, 0xEE80
- srl $t2, $a0, 0x8
- add $v0, $v1, $at
- andi $t3, $t2, 0xF
- andi $t5, $a0, 0xFE
- addi $t4, $t3, 1
- sll $t6, $t5, 0x18
- andi $t9, $a0, 0x1
- srl $v1, $a0, 0xC
- sw $t4, ($a2)
- sra $t7, $t6, 0x19
- sll $t8, $t9, 0x4
- andi $t1, $v1, 0xF
- sw $t7, ($a3)
- or $t2, $t1, $t8
- jr $ra
- sw $t2, ($a1)
+ srl t8, a0, 15
+ and v1, t8, 0x1FFFE
+ add v0, v1, 0x7EE80
+ srl t2, a0, 8
+ andi t3, t2, 0xF
+ andi t5, a0, 0xFE
+ addi t4, t3, 1
+ sll t6, t5, 24
+ andi t9, a0, 1
+ srl v1, a0, 12
+ sw t4, (a2)
+ sra t7, t6, 25
+ sll t8, t9, 4
+ andi t1, v1, 0xF
+ sw t7, (a3)
+ or t2, t1, t8
+ sw t2, (a1)
+ jr ra
END(LeoGetAAdr2)
diff --git a/src/libleo/api/getkadr.s b/src/libleo/api/getkadr.s
index 22d85cb593..d71719525a 100644
--- a/src/libleo/api/getkadr.s
+++ b/src/libleo/api/getkadr.s
@@ -1,11 +1,7 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* int LeoGetKAdr(int sjis);
@@ -22,74 +18,61 @@
* @return int Storage offset address into the N64 Disk Drive mask ROM.
*/
LEAF(LeoGetKAdr)
- // Check if the codepoint is in the range 0x8140 to 0x9872.
- li $at, 0x8140
- slt $at, $a0, $at
- bnez $at, .out_of_range
- li $at, 0x9873
- slt $at, $a0, $at
- beqz $at, .out_of_range
- // Characters with codepoints >= 0x8800 are kanji. Arrangement is regular,
- // so convert index directly.
- li $at, 0x8800
- slt $at, $a0, $at
- bnez $at, .nonkanji
- // 0xBC is number of glyphs in one block in the `kanji` file:
- // 0x100 possible codepoints with the same byte1
- // - 0x40 unused at beginning
- // - 1 unused at 0x7F
- // - 3 unused at 0xFD, 0xFE, 0xFF
- li $a2, 0xBC
- // Get byte1 and adjust so starts at 0
- srl $a1, $a0, 8
- addi $a1, $a1, -0x88
- multu $a2, $a1
- // Get byte2 and adjust so starts at 0
- andi $a3, $a0, 0xFF
- addi $a3, $a3, -0x40
- slti $at, $a3, (0x80 - 0x40)
- mflo $a2
- // 0x__7F is always empty and elided in the file, so decrement if larger
- bnezl $at, .kanji_lower_halfblock
- mflo $a2
- addi $a3, $a3, -1
- mflo $a2
+ /* Check if the codepoint is in the range 0x8140 to 0x9872. */
+ blt a0, 0x8140, .out_of_range
+ bge a0, 0x9873, .out_of_range
+ /* Characters with codepoints >= 0x8800 are kanji. Arrangement is regular,
+ * so convert index directly. */
+ li a2, 0xBC
+ blt a0, 0x8800, .nonkanji
+ /* 0xBC is number of glyphs in one block in the `kanji` file:
+ * 0x100 possible codepoints with the same byte1
+ * - 0x40 unused at beginning
+ * - 1 unused at 0x7F
+ * - 3 unused at 0xFD, 0xFE, 0xFF */
+ /* Get byte1 and adjust so starts at 0 */
+ srl a1, a0, 8
+ addi a1, a1, -0x88
+ mul a2, a2, a1
+ /* Get byte2 and adjust so starts at 0 */
+ andi a3, a0, 0xFF
+ addi a3, a3, -0x40
+ /* 0x__7F is always empty and elided in the file, so decrement if larger */
+ blt a3, 0x40, .kanji_lower_halfblock
+ addi a3, a3, -1
.kanji_lower_halfblock:
- addi $a3, $a3, 0x30A
- add $a3, $a3, $a2
- jr $ra
- sll $v0, $a3, 7
- // returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE
+ mflo a2
+ addi a3, a3, 0x30A
+ add a3, a3, a2
+ sll v0, a3, 7
+ jr ra
+ /* returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE */
-// Non-kanji are arranged with irregular gaps, use the lookup table.
+/* Non-kanji are arranged with irregular gaps, use the lookup table. */
.nonkanji:
- // Get byte1 and adjust so starts at 0
- srl $a1, $a0, 8
- addi $a1, $a1, -0x81
- multu $a2, $a1
- // Get byte2 and adjust so starts at 0
- andi $a3, $a0, 0xFF
- addi $a3, $a3, -0x40
- slti $at, $a3, (0x80 - 0x40)
- mflo $a2
- // 0x__7F is always empty and elided in the file, so decrement if larger
- bnezl $at, .nonkanji_lower_halfblock
- mflo $a2
- addi $a3, $a3, -1
- mflo $a2
+ /* Get byte1 and adjust so starts at 0 */
+ srl a1, a0, 8
+ addi a1, a1, -0x81
+ mul a2, a2, a1
+ /* Get byte2 and adjust so starts at 0 */
+ andi a3, a0, 0xFF
+ addi a3, a3, -0x40
+ /* 0x__7F is always empty and elided in the file, so decrement if larger */
+ blt a3, 0x40, .nonkanji_lower_halfblock
+ addi a3, a3, -1
.nonkanji_lower_halfblock:
- add $a3, $a3, $a2
- lui $a2, %hi(kantbl)
- sll $a3, $a3, 1
- addiu $a2, %lo(kantbl)
- add $a3, $a3, $a2
- lh $a2, ($a3)
- jr $ra
- sll $v0, $a2, 7
- // returns kantbl[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE
+ mflo a2
+ add a3, a3, a2
+ sll a3, a3, 1
+ la a2, kantbl
+ add a3, a3, a2
+ lh a2, (a3)
+ sll v0, a2, 7
+ jr ra
+ /* returns kantbl[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE */
.out_of_range:
- jr $ra
- li $v0, -1
+ li v0, -1
+ jr ra
END(LeoGetKAdr)
/**
@@ -129,7 +112,7 @@ END(LeoGetKAdr)
* into blocks by high byte.
*/
DATA(kantbl)
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x814_ */ .half 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F
/* 0x815_ */ .half 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F
/* 0x816_ */ .half 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F
@@ -143,7 +126,7 @@ DATA(kantbl)
/* 0x81E_ */ .half 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x81F_ */ .half 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0091
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x824_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0092
/* 0x825_ */ .half 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x826_ */ .half 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB
@@ -157,7 +140,7 @@ DATA(kantbl)
/* 0x82E_ */ .half 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011A, 0x011B, 0x011C, 0x011D, 0x011E, 0x011F, 0x0120
/* 0x82F_ */ .half 0x0121, 0x0122, 0x0123, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x834_ */ .half 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, 0x012A, 0x012B, 0x012C, 0x012D, 0x012E, 0x012F, 0x0130, 0x0131, 0x0132, 0x0133
/* 0x835_ */ .half 0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013A, 0x013B, 0x013C, 0x013D, 0x013E, 0x013F, 0x0140, 0x0141, 0x0142, 0x0143
/* 0x836_ */ .half 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, 0x014A, 0x014B, 0x014C, 0x014D, 0x014E, 0x014F, 0x0150, 0x0151, 0x0152, 0x0153
@@ -171,7 +154,7 @@ DATA(kantbl)
/* 0x83E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x83F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x844_ */ .half 0x01AB, 0x01AC, 0x01AD, 0x01AE, 0x01AF, 0x01B0, 0x01B1, 0x01B2, 0x01B3, 0x01B4, 0x01B5, 0x01B6, 0x01B7, 0x01B8, 0x01B9, 0x01BA
/* 0x845_ */ .half 0x01BB, 0x01BC, 0x01BD, 0x01BE, 0x01BF, 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C4, 0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA
/* 0x846_ */ .half 0x01CB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
@@ -185,7 +168,7 @@ DATA(kantbl)
/* 0x84E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x84F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x854_ */ .half 0x020E, 0x020F, 0x0210, 0x0211, 0x0212, 0x0213, 0x0214, 0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D
/* 0x855_ */ .half 0x021E, 0x021F, 0x0220, 0x0221, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0222, 0x0223
/* 0x856_ */ .half 0x0224, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022A, 0x022B, 0x022C, 0x022D, 0x022E, 0x022F, 0x0230, 0x0231, 0x0232, 0x0233
@@ -199,7 +182,7 @@ DATA(kantbl)
/* 0x85E_ */ .half 0x026C, 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, 0x0278, 0x0279, 0x027A, 0x027B
/* 0x85F_ */ .half 0x027C, 0x027D, 0x027E, 0x027F, 0x0280, 0x0281, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x864_ */ .half 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, 0x028A, 0x028B, 0x028C, 0x028D, 0x028E, 0x028F, 0x0290, 0x0291
/* 0x865_ */ .half 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029A, 0x029B, 0x029C, 0x029D, 0x029E, 0x029F, 0x0000, 0x0000
/* 0x866_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
@@ -213,7 +196,7 @@ DATA(kantbl)
/* 0x86E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x86F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x874_ */ .half 0x02C0, 0x02C1, 0x02C2, 0x02C3, 0x02C4, 0x02C5, 0x02C6, 0x02C7, 0x02C8, 0x02C9, 0x02CA, 0x02CB, 0x02CC, 0x02CD, 0x02CE, 0x02CF
/* 0x875_ */ .half 0x02D0, 0x02D1, 0x02D2, 0x02D3, 0x02D4, 0x02D5, 0x02D6, 0x02D7, 0x02D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x876_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
diff --git a/src/libu64/stackcheck.c b/src/libu64/stackcheck.c
index a8b32ffcee..787eb1c3e5 100644
--- a/src/libu64/stackcheck.c
+++ b/src/libu64/stackcheck.c
@@ -158,12 +158,12 @@ u32 StackCheck_GetState(StackEntry* entry) {
if (free == 0) {
ret = STACK_STATUS_OVERFLOW;
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
} else if (free < (u32)entry->minSpace && entry->minSpace != -1) {
ret = STACK_STATUS_WARNING;
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
} else {
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
ret = STACK_STATUS_OK;
}
@@ -174,7 +174,7 @@ u32 StackCheck_GetState(StackEntry* entry) {
PRINTF("head=%08x tail=%08x last=%08x used=%08x free=%08x [%s]\n", entry->head, entry->tail, last, used, free,
entry->name != NULL ? entry->name : "(null)");
- PRINTF(VT_RST);
+ PRINTF_RST();
#if DEBUG_FEATURES
if (ret != STACK_STATUS_OK) {
diff --git a/src/libu64/system_heap.c b/src/libu64/system_heap.c
index 94926d838e..1ae93e868c 100644
--- a/src/libu64/system_heap.c
+++ b/src/libu64/system_heap.c
@@ -20,13 +20,6 @@ char sNew[] = "new";
char sNew[] = "";
#endif
-#if !PLATFORM_N64
-char D_80134488[0x18] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00,
- 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-};
-#endif
-
// possibly some kind of new() function
void* func_800FC800(u32 size) {
DECLARE_INTERRUPT_MASK
diff --git a/src/libultra/audio/auxbus.c b/src/libultra/audio/auxbus.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/auxbus.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/copy.c b/src/libultra/audio/copy.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/copy.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/drvrnew.c b/src/libultra/audio/drvrnew.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/drvrnew.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/env.c b/src/libultra/audio/env.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/env.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/filter.c b/src/libultra/audio/filter.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/filter.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/heapalloc.c b/src/libultra/audio/heapalloc.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/heapalloc.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/load.c b/src/libultra/audio/load.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/load.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/mainbus.c b/src/libultra/audio/mainbus.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/mainbus.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/resample.c b/src/libultra/audio/resample.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/resample.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/reverb.c b/src/libultra/audio/reverb.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/reverb.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/save.c b/src/libultra/audio/save.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/save.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/sl.c b/src/libultra/audio/sl.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/sl.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/synallocfx.c b/src/libultra/audio/synallocfx.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/synallocfx.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/syndelete.c b/src/libultra/audio/syndelete.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/syndelete.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/synthesizer.c b/src/libultra/audio/synthesizer.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/synthesizer.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/bb/sa/common.c b/src/libultra/bb/sa/common.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/bb/sa/common.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/bb/sk/skapi.s b/src/libultra/bb/sk/skapi.s
new file mode 100644
index 0000000000..3e80adfcd1
--- /dev/null
+++ b/src/libultra/bb/sk/skapi.s
@@ -0,0 +1,48 @@
+#ifdef BBPLAYER
+#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
+#include "ultra64/bcp.h"
+
+.text
+
+#define SKC(name, num) \
+ LEAF(name) ;\
+ .set noreorder ;\
+ /* Load syscall number into v0 */ ;\
+ li v0, num ;\
+ /* Read from MI_SECURE_EXCEPTION_REG to */ ;\
+ /* transfer control to the Secure Kernel */ ;\
+ li t0, PHYS_TO_K1(MI_SECURE_EXCEPTION_REG) ;\
+ lw t1, (t0) ;\
+ nop ;\
+ jr ra ;\
+ nop ;\
+ .set reorder ;\
+ END(name)
+
+SKC(skGetId, 0)
+SKC(skLaunchSetup, 1)
+SKC(skLaunch, 2)
+SKC(skRecryptListValid, 3)
+SKC(skRecryptBegin, 4)
+SKC(skRecryptData, 5)
+SKC(skRecryptComputeState, 6)
+SKC(skRecryptEnd, 7)
+SKC(skSignHash, 8)
+SKC(skVerifyHash, 9)
+SKC(skGetConsumption, 10)
+SKC(skAdvanceTicketWindow, 11)
+SKC(skSetLimit, 12)
+SKC(skExit, 13)
+SKC(skKeepAlive, 14)
+
+/* These are not valid for a retail Secure Kernel, their usage pattern is unknown. */
+
+SKC(skGetRandomKeyData, 15)
+SKC(skDumpVirage, 16)
+SKC(skTest2, 17)
+SKC(skTest3, 18)
+SKC(skResetWindow, 19)
+SKC(skValidateRls, 20)
+
+#endif
diff --git a/src/libultra/gu/libm_vals.s b/src/libultra/gu/libm_vals.s
index 18de1ae4f2..91f2cadb37 100644
--- a/src/libultra/gu/libm_vals.s
+++ b/src/libultra/gu/libm_vals.s
@@ -1,8 +1,6 @@
#include "ultra64/asm.h"
-.section .rodata
-
-.balign 16
+.rdata
DATA(__libm_qnan_f)
.word 0x7F810000
diff --git a/src/libultra/gu/rotate.c b/src/libultra/gu/rotate.c
index 7d495e98ef..dc50aba3c5 100644
--- a/src/libultra/gu/rotate.c
+++ b/src/libultra/gu/rotate.c
@@ -1,7 +1,7 @@
#include "global.h"
void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) {
- static f32 D_80134D10 = M_PI / 180.0f;
+ static f32 dtor = M_PI / 180.0f;
f32 sine;
f32 cosine;
f32 ab;
@@ -16,14 +16,15 @@ void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) {
guNormalize(&x, &y, &z);
- a *= D_80134D10;
+ a *= dtor;
sine = sinf(a);
cosine = cosf(a);
- ab = x * y * (1 - cosine);
- bc = y * z * (1 - cosine);
- ca = z * x * (1 - cosine);
+ t = 1.0f - cosine;
+ ab = x * y * t;
+ bc = y * z * t;
+ ca = z * x * t;
guMtxIdentF(m);
@@ -38,15 +39,15 @@ void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) {
#endif
t = x * x;
- m[0][0] = (1 - t) * cosine + t;
+ m[0][0] = t + cosine * (1.0f - t);
m[2][1] = bc - xs;
m[1][2] = bc + xs;
t = y * y;
- m[1][1] = (1 - t) * cosine + t;
+ m[1][1] = t + cosine * (1.0f - t);
m[2][0] = ca + ys;
m[0][2] = ca - ys;
t = z * z;
- m[2][2] = (1 - t) * cosine + t;
+ m[2][2] = t + cosine * (1.0f - t);
m[1][0] = ab - zs;
m[0][1] = ab + zs;
}
diff --git a/src/libultra/gu/sqrtf.c b/src/libultra/gu/sqrtf.c
deleted file mode 100644
index 5e5fa233cc..0000000000
--- a/src/libultra/gu/sqrtf.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "global.h"
-
-#ifndef __GNUC__
-#define __builtin_sqrtf sqrtf
-#endif
-
-f32 sqrtf(f32 f) {
- return __builtin_sqrtf(f);
-}
diff --git a/src/libultra/gu/sqrtf.s b/src/libultra/gu/sqrtf.s
new file mode 100644
index 0000000000..aaf5023593
--- /dev/null
+++ b/src/libultra/gu/sqrtf.s
@@ -0,0 +1,9 @@
+#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
+
+.text
+
+LEAF(sqrtf)
+ sqrt.s fv0, fa0
+ j ra
+END(sqrtf)
diff --git a/src/libultra/gu/us2dex.c b/src/libultra/gu/us2dex.c
index d2e5a2b043..b8708c086c 100644
--- a/src/libultra/gu/us2dex.c
+++ b/src/libultra/gu/us2dex.c
@@ -1,25 +1,25 @@
#include "global.h"
void guS2DInitBg(uObjBg* bg) {
- u32 size;
- s32 tmem = (bg->b.imageFmt == G_IM_FMT_CI) ? 0x100 : 0x200;
- u16 shift = (6 - bg->b.imageSiz);
+ u16 tmem = (bg->b.imageFmt == G_IM_FMT_CI) ? 0x100 : 0x200;
+ u16 shift = 6 - bg->b.imageSiz;
+ u32 tsize;
if (bg->b.imageLoad == G_BGLT_LOADBLOCK) {
bg->b.tmemW = bg->b.imageW >> shift;
- bg->b.tmemH = (tmem / bg->b.tmemW) * 4;
- bg->b.tmemSizeW = bg->b.tmemW * 2;
+ bg->b.tmemH = (tmem / bg->b.tmemW) << 2;
+ bg->b.tmemSizeW = bg->b.tmemW << 1;
bg->b.tmemSize = bg->b.tmemH * bg->b.tmemSizeW;
bg->b.tmemLoadSH = (bg->b.tmemSize >> 1) - 1;
- bg->b.tmemLoadTH = (0x7FF / bg->b.tmemW) + 1;
+ bg->b.tmemLoadTH = GS_CALC_DXT(bg->b.tmemW);
} else { // G_BGLT_LOADTILE
bg->b.tmemW = (bg->b.frameW >> shift) + 3;
- bg->b.tmemH = (tmem / bg->b.tmemW) * 4;
- bg->b.tmemSizeW = (bg->b.imageW >> shift) * 2;
+ bg->b.tmemH = (tmem / bg->b.tmemW) << 2;
+ bg->b.tmemSizeW = (bg->b.imageW >> shift) << 1;
- size = bg->b.tmemH * bg->b.tmemSizeW;
- bg->b.tmemSize = (size >> 16);
- bg->b.tmemLoadSH = (size >> 0) & 0xFFFF;
+ tsize = bg->b.tmemH * bg->b.tmemSizeW;
+ bg->b.tmemSize = tsize >> 16;
+ bg->b.tmemLoadSH = tsize & 0xFFFF;
bg->b.tmemLoadTH = bg->b.tmemH - 1;
}
}
diff --git a/src/libultra/io/contquery.c b/src/libultra/io/contquery.c
index 660e2dcd42..9a8370af31 100644
--- a/src/libultra/io/contquery.c
+++ b/src/libultra/io/contquery.c
@@ -15,7 +15,11 @@ s32 osContStartQuery(OSMesgQueue* mq) {
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
}
ret = __osSiRawStartDma(OS_READ, &__osContPifRam);
+#ifdef BBPLAYER
+ __osContLastCmd = CONT_CMD_CHANNEL_RESET;
+#else
__osContLastCmd = CONT_CMD_REQUEST_STATUS;
+#endif
__osSiRelAccess();
return ret;
}
diff --git a/src/libultra/io/contramread.c b/src/libultra/io/contramread.c
index 058f58e80f..01e0703da6 100644
--- a/src/libultra/io/contramread.c
+++ b/src/libultra/io/contramread.c
@@ -2,9 +2,12 @@
#define BLOCKSIZE 32
+#ifndef BBPLAYER
s32 __osPfsLastChannel = -1;
+#endif
s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* data) {
+#ifndef BBPLAYER
s32 ret;
s32 i;
u8* ptr;
@@ -60,4 +63,26 @@ s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* data) {
__osSiRelAccess();
return ret;
+#else
+ s32 ret;
+
+ __osSiGetAccess();
+
+ ret = 0;
+ if (__osBbPakAddress[channel] != 0) {
+ if (__osBbPakSize - 0x20 >= addr * 0x20) {
+ s32 i;
+
+ for (i = 0; i < 0x20; i++) {
+ data[i] = *(u8*)(__osBbPakAddress[channel] + addr * 0x20 + i);
+ }
+ }
+ } else {
+ ret = PFS_ERR_NOPACK;
+ }
+
+ __osSiRelAccess();
+
+ return ret;
+#endif
}
diff --git a/src/libultra/io/contramwrite.c b/src/libultra/io/contramwrite.c
index 6a776a13b8..4bd8ffaa30 100644
--- a/src/libultra/io/contramwrite.c
+++ b/src/libultra/io/contramwrite.c
@@ -2,6 +2,7 @@
#include "global.h"
s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force) {
+#ifndef BBPLAYER
s32 ret = 0;
s32 i;
u8* ptr;
@@ -65,4 +66,28 @@ s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32
__osSiRelAccess();
return ret;
+#else
+ s32 ret = 0;
+
+ if ((force != true) && (address < PFS_LABEL_AREA) && (address != 0)) {
+ return 0;
+ }
+
+ __osSiGetAccess();
+
+ if (__osBbPakAddress[channel] != 0) {
+ if (__osBbPakSize - 0x20 >= address * 0x20) {
+ s32 i;
+
+ for (i = 0; i < 0x20; i++) {
+ *(u8*)(__osBbPakAddress[channel] + address * 0x20 + i) = buffer[i];
+ }
+ }
+ } else {
+ ret = 1;
+ }
+
+ __osSiRelAccess();
+ return ret;
+#endif
}
diff --git a/src/libultra/io/contreaddata.c b/src/libultra/io/contreaddata.c
index ff44bc15b8..f1f250e965 100644
--- a/src/libultra/io/contreaddata.c
+++ b/src/libultra/io/contreaddata.c
@@ -10,7 +10,11 @@ s32 osContStartReadData(OSMesgQueue* mq) {
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
}
ret = __osSiRawStartDma(OS_READ, &__osContPifRam);
+#ifdef BBPLAYER
+ __osContLastCmd = CONT_CMD_CHANNEL_RESET;
+#else
__osContLastCmd = CONT_CMD_READ_BUTTON;
+#endif
__osSiRelAccess();
return ret;
}
@@ -29,7 +33,18 @@ void osContGetReadData(OSContPad* contData) {
contData->stick_x = read.joyX;
contData->stick_y = read.joyY;
}
- };
+ }
+
+#ifdef BBPLAYER
+ if (__osBbIsBb && __osBbHackFlags != 0) {
+ OSContPad tmp;
+ contData -= __osMaxControllers;
+
+ tmp = contData[0];
+ contData[0] = contData[__osBbHackFlags];
+ contData[__osBbHackFlags] = tmp;
+ }
+#endif
}
void __osPackReadData(void) {
diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c
index 290f1b5854..c6c8d83ca3 100644
--- a/src/libultra/io/controller.c
+++ b/src/libultra/io/controller.c
@@ -41,7 +41,11 @@ s32 osContInit(OSMesgQueue* mq, u8* ctlBitfield, OSContStatus* status) {
osRecvMesg(mq, &msg, OS_MESG_BLOCK);
__osContGetInitData(ctlBitfield, status);
+#ifdef BBPLAYER
+ __osContLastCmd = CONT_CMD_CHANNEL_RESET;
+#else
__osContLastCmd = CONT_CMD_REQUEST_STATUS;
+#endif
__osSiCreateAccessQueue();
osCreateMesgQueue(&__osEepromTimerMsgQueue, &__osEepromTimerMsg, 1);
@@ -52,7 +56,7 @@ void __osContGetInitData(u8* ctlBitfield, OSContStatus* data) {
u8* ptr;
__OSContRequesFormat req;
s32 i;
- u8 bitfieldTemp = 0;
+ u8 bits = 0;
ptr = (u8*)&__osContPifRam;
@@ -63,10 +67,30 @@ void __osContGetInitData(u8* ctlBitfield, OSContStatus* data) {
continue;
}
data->type = req.typel << 8 | req.typeh;
+#ifdef BBPLAYER
+ data->status = __osBbPakAddress[i] != 0;
+#else
data->status = req.status;
- bitfieldTemp |= 1 << i;
+#endif
+ bits |= 1 << i;
}
- *ctlBitfield = bitfieldTemp;
+
+#ifdef BBPLAYER
+ if (__osBbIsBb && __osBbHackFlags != 0) {
+ OSContStatus tmp;
+
+ bits = (bits & ~((1 << __osBbHackFlags) | 1)) | ((bits & 1) << __osBbHackFlags) |
+ ((bits & (1 << __osBbHackFlags)) >> __osBbHackFlags);
+
+ data -= __osMaxControllers;
+
+ tmp = data[0];
+ data[0] = data[__osBbHackFlags];
+ data[__osBbHackFlags] = tmp;
+ }
+#endif
+
+ *ctlBitfield = bits;
}
void __osPackRequestData(u8 poll) {
diff --git a/src/libultra/io/devmgr.c b/src/libultra/io/devmgr.c
index d0e7d5289a..05dcb99519 100644
--- a/src/libultra/io/devmgr.c
+++ b/src/libultra/io/devmgr.c
@@ -2,6 +2,8 @@
#include "ultra64/internal.h"
#include "ultra64/leodrive.h"
+#define TEMP_BUFFER ((void*)0x80600000)
+
// os.h
#define LEO_BLOCK_MODE 1
#define LEO_TRACK_MODE 2
@@ -14,6 +16,9 @@ void __osDevMgrMain(void* arg) {
s32 ret;
OSDevMgr* dm = (OSDevMgr*)arg;
s32 messageSend;
+#ifdef BBPLAYER
+ s32 check = false;
+#endif
while (true) {
osRecvMesg(dm->cmdQueue, (OSMesg*)&ioMesg, OS_MESG_BLOCK);
@@ -78,6 +83,13 @@ void __osDevMgrMain(void* arg) {
switch (ioMesg->hdr.type) {
case OS_MESG_TYPE_DMAREAD:
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
+#ifdef BBPLAYER
+ if (__osBbIsBb == 1 && ((u32)ioMesg->dramAddr & 0x7F) >= 0x60) {
+ check = true;
+ ret = dm->dma(OS_READ, ioMesg->devAddr, TEMP_BUFFER, ioMesg->size);
+ break;
+ }
+#endif
ret = dm->dma(OS_READ, ioMesg->devAddr, ioMesg->dramAddr, ioMesg->size);
break;
case OS_MESG_TYPE_DMAWRITE:
@@ -86,6 +98,13 @@ void __osDevMgrMain(void* arg) {
break;
case OS_MESG_TYPE_EDMAREAD:
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
+#ifdef BBPLAYER
+ if (__osBbIsBb == 1 && ((u32)ioMesg->dramAddr & 0x7F) >= 0x60) {
+ check = true;
+ ret = dm->edma(ioMesg->piHandle, OS_READ, ioMesg->devAddr, TEMP_BUFFER, ioMesg->size);
+ break;
+ }
+#endif
ret = dm->edma(ioMesg->piHandle, OS_READ, ioMesg->devAddr, ioMesg->dramAddr, ioMesg->size);
break;
case OS_MESG_TYPE_EDMAWRITE:
@@ -103,6 +122,14 @@ void __osDevMgrMain(void* arg) {
if (ret == 0) {
osRecvMesg(dm->evtQueue, &em, OS_MESG_BLOCK);
+#ifdef BBPLAYER
+ if (__osBbIsBb == 1 && check) {
+ osInvalDCache(TEMP_BUFFER, (ioMesg->size + DCACHE_LINEMASK) & ~DCACHE_LINEMASK);
+ bcopy(TEMP_BUFFER, ioMesg->dramAddr, ioMesg->size);
+ check = false;
+ osWritebackDCache(ioMesg->dramAddr, ioMesg->size);
+ }
+#endif
osSendMesg(ioMesg->hdr.retQueue, (OSMesg)ioMesg, OS_MESG_NOBLOCK);
osSendMesg(dm->acsQueue, NULL, OS_MESG_NOBLOCK);
}
diff --git a/src/libultra/io/epirawdma.c b/src/libultra/io/epirawdma.c
index ff6bb9a653..dbc072fbb2 100644
--- a/src/libultra/io/epirawdma.c
+++ b/src/libultra/io/epirawdma.c
@@ -1,8 +1,18 @@
#include "global.h"
+#include "ultra64/bcp.h"
s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, u32 cartAddr, void* dramAddr, size_t size) {
- s32 status;
+#ifdef BBPLAYER
+ u64 dummybuf[2];
+#endif
+ u32 status;
OSPiHandle* curHandle;
+#ifdef BBPLAYER
+ u32 buffer;
+ u32 pgsize;
+ u16* adr;
+ u32 i;
+#endif
status = IO_READ(PI_STATUS_REG);
while (status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) {
@@ -53,9 +63,102 @@ s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, u32 cartAddr, void* dr
curHandle->pulse = handle->pulse;
}
+#ifdef BBPLAYER
+ if (direction == OS_READ) {
+ // Device page size in bytes
+ pgsize = 1;
+ for (i = 1; i <= (u32)handle->pageSize + 2; i++) {
+ pgsize *= 2;
+ }
+
+ // If the initial cart address mod pgsize is at the last u16 in the page,
+ // need to do some manual DMAs?
+ if ((cartAddr & (pgsize - 1)) == pgsize - sizeof(u16)) {
+ // Read 32 bits starting 2 bytes before the target DMA address,
+ // so that the lower 16 bits of the result are the first 2 bytes
+ // of the requested data.
+ __osEPiRawReadIo(handle, cartAddr - sizeof(u16), &buffer);
+
+ // Poke the lower 16 bits into the destination address
+ adr = (u16*)PHYS_TO_K1(dramAddr);
+ *(adr++) = (u16)buffer;
+
+ // Update DMA parameters
+ cartAddr += sizeof(u16);
+ dramAddr = adr;
+ size -= sizeof(u16);
+
+ // If the remaining size is >= 4
+ if (size >= sizeof(u32)) {
+ // Read another 32 bits at the cart addr
+ __osEPiRawReadIo(handle, cartAddr, &buffer);
+
+ // Store all 32 bits to RAM
+ adr = (u16*)dramAddr;
+ *(adr++) = buffer >> 16;
+ *(adr++) = (u16)buffer;
+
+ // Update DMA parameters again
+ cartAddr += sizeof(u32);
+ dramAddr = adr;
+ size -= sizeof(u32);
+
+ // If we're not at the end of the DMA
+ if (size != 0) {
+ // Read 32 bits again
+ __osEPiRawReadIo(handle, cartAddr, &buffer);
+
+ // Store just the upper 16 bits
+ adr = (u16*)PHYS_TO_K1(dramAddr);
+ *(adr++) = buffer >> 16;
+
+ // Update DMA parameters once more
+ cartAddr += sizeof(u16);
+ dramAddr = adr;
+ size -= sizeof(u16);
+ }
+ }
+ }
+
+ // If the end cart address mod pgsize is just 2 bytes into a page or the remaining data size is just 1x u16
+ if (((((cartAddr + size) & (pgsize - 1)) == sizeof(u16)) | (size == sizeof(u16))) != 0) {
+ if ((cartAddr + size) & 2) {
+ // Read 32 bits at end - 2, store the upper 16 bits
+ __osEPiRawReadIo(handle, cartAddr + size - sizeof(u16), &buffer);
+ adr = (u16*)PHYS_TO_K1(dramAddr) + (size - sizeof(u16)) / sizeof(u16);
+ *adr = buffer >> 16;
+ } else {
+ // Read 32 bits at end - 4, store the lower 16 bits
+ __osEPiRawReadIo(handle, cartAddr + size - sizeof(u32), &buffer);
+ adr = (u16*)PHYS_TO_K1(dramAddr) + (size - sizeof(u16)) / sizeof(u16);
+ *adr = (u16)buffer;
+ }
+ size -= sizeof(u16);
+ }
+
+ if (size == 0) {
+ // If size ended up 0 following the adjustments, run an 8-byte dummy DMA anyway
+ size = 8;
+ dramAddr = (void*)dummybuf;
+ cartAddr = 0;
+ }
+ }
+#endif
+
IO_WRITE(PI_DRAM_ADDR_REG, osVirtualToPhysical(dramAddr));
IO_WRITE(PI_CART_ADDR_REG, K1_TO_PHYS(handle->baseAddress | cartAddr));
+#ifdef BBPLAYER
+ if (direction != OS_READ && direction != OS_WRITE) {
+ return -1;
+ }
+
+ if ((handle->baseAddress | cartAddr) <= 0x400) {
+ IO_WRITE((direction == OS_READ) ? PI_EX_WR_LEN_REG : PI_EX_RD_LEN_REG, size - 1);
+ } else {
+ IO_WRITE((direction == OS_READ) ? PI_WR_LEN_REG : PI_RD_LEN_REG, size - 1);
+ }
+#else
switch (direction) {
case OS_READ:
IO_WRITE(PI_WR_LEN_REG, size - 1);
@@ -66,5 +169,6 @@ s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, u32 cartAddr, void* dr
default:
return -1;
}
+#endif
return 0;
}
diff --git a/src/libultra/io/pfsgetstatus.c b/src/libultra/io/pfsgetstatus.c
index 0ec3bd7b4d..aa9851e6e7 100644
--- a/src/libultra/io/pfsgetstatus.c
+++ b/src/libultra/io/pfsgetstatus.c
@@ -2,6 +2,7 @@
#include "global.h"
s32 __osPfsGetStatus(OSMesgQueue* queue, s32 channel) {
+#ifndef BBPLAYER
s32 ret = 0;
OSMesg msg;
OSContStatus data;
@@ -24,6 +25,12 @@ s32 __osPfsGetStatus(OSMesgQueue* queue, s32 channel) {
return PFS_ERR_CONTRFAIL;
}
return ret;
+#else
+ if (__osBbPakAddress[channel] != 0) {
+ return 0;
+ }
+ return PFS_ERR_NOPACK;
+#endif
}
void __osPfsRequestOneChannel(s32 channel, u8 cmd) {
diff --git a/src/libultra/io/pfsisplug.c b/src/libultra/io/pfsisplug.c
index d5630fccc5..9a144d0cb5 100644
--- a/src/libultra/io/pfsisplug.c
+++ b/src/libultra/io/pfsisplug.c
@@ -88,8 +88,28 @@ void __osPfsGetInitData(u8* pattern, OSContStatus* contData) {
}
contData->type = ((req.typel << 8) | req.typeh);
+#ifdef BBPLAYER
+ contData->status = __osBbPakAddress[i] != 0;
+#else
contData->status = req.status;
+#endif
bits |= (1 << i);
}
+
+#ifdef BBPLAYER
+ if (__osBbIsBb && __osBbHackFlags != 0) {
+ OSContStatus tmp;
+
+ bits = (bits & ~((1 << __osBbHackFlags) | 1)) | ((bits & 1) << __osBbHackFlags) |
+ ((bits & (1 << __osBbHackFlags)) >> __osBbHackFlags);
+
+ contData -= __osMaxControllers;
+
+ tmp = contData[0];
+ contData[0] = contData[__osBbHackFlags];
+ contData[__osBbHackFlags] = tmp;
+ }
+#endif
+
*pattern = bits;
}
diff --git a/src/libultra/io/pimgr.c b/src/libultra/io/pimgr.c
index e8aa98d01b..7a0b68f8dc 100644
--- a/src/libultra/io/pimgr.c
+++ b/src/libultra/io/pimgr.c
@@ -40,8 +40,8 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQueue, OSMesg* cmdBuf, s32 cmd
prevInt = __osDisableInt();
__osPiDevMgr.active = true;
- __osPiDevMgr.cmdQueue = cmdQueue;
__osPiDevMgr.thread = &piThread;
+ __osPiDevMgr.cmdQueue = cmdQueue;
__osPiDevMgr.evtQueue = &piEventQueue;
__osPiDevMgr.acsQueue = &__osPiAccessQueue;
__osPiDevMgr.dma = __osPiRawStartDma;
diff --git a/src/libultra/io/sirawdma.c b/src/libultra/io/sirawdma.c
index 9bf499cc6a..0aa2f86942 100644
--- a/src/libultra/io/sirawdma.c
+++ b/src/libultra/io/sirawdma.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "ultra64/bbskapi.h"
#define PIF_RAM_SIZE (PIF_RAM_END + 1 - PIF_RAM_START)
@@ -11,6 +12,13 @@ s32 __osSiRawStartDma(s32 dir, void* addr) {
}
IO_WRITE(SI_DRAM_ADDR_REG, osVirtualToPhysical(addr));
if (dir == OS_READ) {
+#ifdef BBPLAYER
+ if (__osBbIsBb) {
+ register u32 mask = __osDisableInt();
+ skKeepAlive();
+ __osRestoreInt(mask);
+ }
+#endif
IO_WRITE(SI_PIF_ADDR_RD64B_REG, PIF_RAM_START);
} else {
IO_WRITE(SI_PIF_ADDR_WR64B_REG, PIF_RAM_START);
diff --git a/src/libultra/io/sptaskyielded.c b/src/libultra/io/sptaskyielded.c
index d04f673c54..8be0556c33 100644
--- a/src/libultra/io/sptaskyielded.c
+++ b/src/libultra/io/sptaskyielded.c
@@ -2,18 +2,13 @@
u32 osSpTaskYielded(OSTask* task) {
u32 status = __osSpGetStatus();
- u32 ret;
+ u32 result;
- if (status & SP_STATUS_YIELDED) {
- ret = OS_TASK_YIELDED;
- } else {
- ret = 0;
- }
+ result = (status & SP_STATUS_YIELDED) ? OS_TASK_YIELDED : 0;
if (status & SP_STATUS_YIELD) {
- task->t.flags |= ret;
+ task->t.flags |= result;
task->t.flags &= ~OS_TASK_DP_WAIT;
}
-
- return ret;
+ return result;
}
diff --git a/src/libultra/io/vimodefpalhaf1.c b/src/libultra/io/vimodefpalhaf1.c
new file mode 100644
index 0000000000..6444c97a4d
--- /dev/null
+++ b/src/libultra/io/vimodefpalhaf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpalhaf1.c
+ *
+ * FPAL HAF1 Video Mode
+ *
+ * H = High Resolution
+ * A = Anti-Aliased
+ * F = Deflickered Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalHaf1 = {
+ OS_VI_FPAL_HAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpalhan1.c b/src/libultra/io/vimodefpalhan1.c
new file mode 100644
index 0000000000..e6243a01f6
--- /dev/null
+++ b/src/libultra/io/vimodefpalhan1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpalhan1.c
+ *
+ * FPAL HAN1 Video Mode
+ *
+ * H = High Resolution
+ * A = Anti-Aliased
+ * N = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalHan1 = {
+ OS_VI_FPAL_HAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpalhpf1.c b/src/libultra/io/vimodefpalhpf1.c
new file mode 100644
index 0000000000..af827fa466
--- /dev/null
+++ b/src/libultra/io/vimodefpalhpf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpalhpf1.c
+ *
+ * FPAL HPF1 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * F = Deflickered Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalHpf1 = {
+ OS_VI_FPAL_HPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpalhpf2.c b/src/libultra/io/vimodefpalhpf2.c
new file mode 100644
index 0000000000..3ce09602ab
--- /dev/null
+++ b/src/libultra/io/vimodefpalhpf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpalhpf2.c
+ *
+ * FPAL HPF2 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * F = Deflickered Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalHpf2 = {
+ OS_VI_FPAL_HPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpalhpn1.c b/src/libultra/io/vimodefpalhpn1.c
new file mode 100644
index 0000000000..f789c3baf0
--- /dev/null
+++ b/src/libultra/io/vimodefpalhpn1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpalhpn1.c
+ *
+ * FPAL HPN1 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * N = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalHpn1 = {
+ OS_VI_FPAL_HPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpalhpn2.c b/src/libultra/io/vimodefpalhpn2.c
new file mode 100644
index 0000000000..483dbd8f74
--- /dev/null
+++ b/src/libultra/io/vimodefpalhpn2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpalhpn2.c
+ *
+ * FPAL HPN2 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * N = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalHpn2 = {
+ OS_VI_FPAL_HPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpallaf1.c b/src/libultra/io/vimodefpallaf1.c
new file mode 100644
index 0000000000..cd508f053b
--- /dev/null
+++ b/src/libultra/io/vimodefpallaf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpallaf1.c
+ *
+ * FPAL LAF1 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * F = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalLaf1 = {
+ OS_VI_FPAL_LAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpallaf2.c b/src/libultra/io/vimodefpallaf2.c
new file mode 100644
index 0000000000..5dd7b99b29
--- /dev/null
+++ b/src/libultra/io/vimodefpallaf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpallaf2.c
+ *
+ * FPAL LAF2 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * F = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalLaf2 = {
+ OS_VI_FPAL_LAF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpallan1.c b/src/libultra/io/vimodefpallan1.c
index 37cb5ff557..aad8d8a5ff 100644
--- a/src/libultra/io/vimodefpallan1.c
+++ b/src/libultra/io/vimodefpallan1.c
@@ -8,7 +8,7 @@
* N = Deinterlaced
* 1 = 16-bit Framebuffer
*/
-#include "global.h"
+#include "ultra64.h"
#include "ultra64/viint.h"
OSViMode osViModeFpalLan1 = {
@@ -16,31 +16,33 @@ OSViMode osViModeFpalLan1 = {
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
- VI_CTRL_PIXEL_ADV_3, // ctrl
- WIDTH(320), // width
- BURST(58, 30, 4, 69), // burst
- VSYNC(625), // vSync
- HSYNC(3177, 23), // hSync
- LEAP(3183, 3181), // leap
- HSTART(128, 768), // hStart
- SCALE(2, 0), // xScale
- VCURRENT(0), // vCurrent
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
},
- { // fldRegs
- {
- // [0]
- ORIGIN(640), // origin
- SCALE(1, 0), // yScale
- START(47, 617), // vStart
- BURST(107, 2, 9, 0), // vBurst
- VINTR(2), // vIntr
- },
- {
- // [1]
- ORIGIN(640), // origin
- SCALE(1, 0), // yScale
- START(47, 617), // vStart
- BURST(107, 2, 9, 0), // vBurst
- VINTR(2), // vIntr
- } },
};
diff --git a/src/libultra/io/vimodefpallan2.c b/src/libultra/io/vimodefpallan2.c
new file mode 100644
index 0000000000..a1224f5e73
--- /dev/null
+++ b/src/libultra/io/vimodefpallan2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpallan2.c
+ *
+ * FPAL LAN2 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * N = Deinterlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalLan2 = {
+ OS_VI_FPAL_LAN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpallpf1.c b/src/libultra/io/vimodefpallpf1.c
new file mode 100644
index 0000000000..ed14626d8c
--- /dev/null
+++ b/src/libultra/io/vimodefpallpf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpallpf1.c
+ *
+ * FPAL LPF1 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * F = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalLpf1 = {
+ OS_VI_FPAL_LPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpallpf2.c b/src/libultra/io/vimodefpallpf2.c
new file mode 100644
index 0000000000..9603b26192
--- /dev/null
+++ b/src/libultra/io/vimodefpallpf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpallpf2.c
+ *
+ * FPAL LPF2 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * F = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalLpf2 = {
+ OS_VI_FPAL_LPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpallpn1.c b/src/libultra/io/vimodefpallpn1.c
new file mode 100644
index 0000000000..2aa76cfff4
--- /dev/null
+++ b/src/libultra/io/vimodefpallpn1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpallpn1.c
+ *
+ * FPAL LPN1 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * N = Deinterlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalLpn1 = {
+ OS_VI_FPAL_LPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodefpallpn2.c b/src/libultra/io/vimodefpallpn2.c
new file mode 100644
index 0000000000..7f6938a323
--- /dev/null
+++ b/src/libultra/io/vimodefpallpn2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodefpallpn2.c
+ *
+ * FPAL LPN2 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * N = Deinterlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeFpalLpn2 = {
+ OS_VI_FPAL_LPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempalhaf1.c b/src/libultra/io/vimodempalhaf1.c
new file mode 100644
index 0000000000..7eb17048e0
--- /dev/null
+++ b/src/libultra/io/vimodempalhaf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempalhaf1.c
+ *
+ * MPAL HAF1 Video Mode
+ *
+ * H = High Resolution
+ * A = Anti-Aliased
+ * F = Deflickered Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalHaf1 = {
+ OS_VI_MPAL_HAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ //[0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ //[1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempalhan1.c b/src/libultra/io/vimodempalhan1.c
new file mode 100644
index 0000000000..57e594b3d9
--- /dev/null
+++ b/src/libultra/io/vimodempalhan1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempalhan1.c
+ *
+ * MPAL HAN1 Video Mode
+ *
+ * H = High Resolution
+ * A = Anti-Aliased
+ * N = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalHan1 = {
+ OS_VI_MPAL_HAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempalhpf1.c b/src/libultra/io/vimodempalhpf1.c
new file mode 100644
index 0000000000..6441ef2800
--- /dev/null
+++ b/src/libultra/io/vimodempalhpf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempalhpf1.c
+ *
+ * MPAL HPF1 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * F = Deflickered Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalHpf1 = {
+ OS_VI_MPAL_HPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempalhpf2.c b/src/libultra/io/vimodempalhpf2.c
new file mode 100644
index 0000000000..e853874fb4
--- /dev/null
+++ b/src/libultra/io/vimodempalhpf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempalhpf2.c
+ *
+ * MPAL HPF2 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * F = Deflickered Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalHpf2 = {
+ OS_VI_MPAL_HPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempalhpn1.c b/src/libultra/io/vimodempalhpn1.c
new file mode 100644
index 0000000000..4a4c22e229
--- /dev/null
+++ b/src/libultra/io/vimodempalhpn1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempalhpn1.c
+ *
+ * MPAL HPN1 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * N = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalHpn1 = {
+ OS_VI_MPAL_HPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempalhpn2.c b/src/libultra/io/vimodempalhpn2.c
new file mode 100644
index 0000000000..fe8f7f6f30
--- /dev/null
+++ b/src/libultra/io/vimodempalhpn2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempalhpn2.c
+ *
+ * MPAL HPN2 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * N = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalHpn2 = {
+ OS_VI_MPAL_HPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempallaf1.c b/src/libultra/io/vimodempallaf1.c
new file mode 100644
index 0000000000..29f35cd454
--- /dev/null
+++ b/src/libultra/io/vimodempallaf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempallaf1.c
+ *
+ * MPAL LAF1 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * F = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalLaf1 = {
+ OS_VI_MPAL_LAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempallaf2.c b/src/libultra/io/vimodempallaf2.c
new file mode 100644
index 0000000000..783440a4ed
--- /dev/null
+++ b/src/libultra/io/vimodempallaf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempallaf2.c
+ *
+ * MPAL LAF2 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * F = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalLaf2 = {
+ OS_VI_MPAL_LAF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempallan1.c b/src/libultra/io/vimodempallan1.c
index bcc4273afb..5140c50e55 100644
--- a/src/libultra/io/vimodempallan1.c
+++ b/src/libultra/io/vimodempallan1.c
@@ -8,7 +8,7 @@
* N = Deinterlaced
* 1 = 16-bit Framebuffer
*/
-#include "global.h"
+#include "ultra64.h"
#include "ultra64/viint.h"
OSViMode osViModeMpalLan1 = {
@@ -16,31 +16,33 @@ OSViMode osViModeMpalLan1 = {
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
- VI_CTRL_PIXEL_ADV_3, // ctrl
- WIDTH(320), // width
- BURST(57, 30, 5, 70), // burst
- VSYNC(525), // vSync
- HSYNC(3089, 4), // hSync
- LEAP(3097, 3098), // leap
- HSTART(108, 748), // hStart
- SCALE(2, 0), // xScale
- VCURRENT(0), // vCurrent
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(525), // vSync
+ HSYNC(3089, 4), // hSync
+ LEAP(3097, 3098), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
},
- { // fldRegs
- {
- // [0]
- ORIGIN(640), // origin
- SCALE(1, 0), // yScale
- START(37, 511), // vStart
- BURST(4, 2, 14, 0), // vBurst
- VINTR(2), // vIntr
- },
- {
- // [1]
- ORIGIN(640), // origin
- SCALE(1, 0), // yScale
- START(37, 511), // vStart
- BURST(4, 2, 14, 0), // vBurst
- VINTR(2), // vIntr
- } },
};
diff --git a/src/libultra/io/vimodempallan2.c b/src/libultra/io/vimodempallan2.c
new file mode 100644
index 0000000000..b3717e6c74
--- /dev/null
+++ b/src/libultra/io/vimodempallan2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempallan2.c
+ *
+ * MPAL LAN2 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * N = Deinterlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalLan2 = {
+ OS_VI_MPAL_LAN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(525), // vSync
+ HSYNC(3089, 4), // hSync
+ LEAP(3097, 3098), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempallpf1.c b/src/libultra/io/vimodempallpf1.c
new file mode 100644
index 0000000000..52e927bfab
--- /dev/null
+++ b/src/libultra/io/vimodempallpf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempallpf1.c
+ *
+ * MPAL LPF1 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * F = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalLpf1 = {
+ OS_VI_MPAL_LPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempallpf2.c b/src/libultra/io/vimodempallpf2.c
new file mode 100644
index 0000000000..14a918a53d
--- /dev/null
+++ b/src/libultra/io/vimodempallpf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempallpf2.c
+ *
+ * MPAL LPF2 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * F = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalLpf2 = {
+ OS_VI_MPAL_LPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempallpn1.c b/src/libultra/io/vimodempallpn1.c
new file mode 100644
index 0000000000..ce35838b9e
--- /dev/null
+++ b/src/libultra/io/vimodempallpn1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempallpn1.c
+ *
+ * MPAL LPN1 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * N = Deinterlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalLpn1 = {
+ OS_VI_MPAL_LPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(525), // vSync
+ HSYNC(3089, 4), // hSync
+ LEAP(3097, 3098), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodempallpn2.c b/src/libultra/io/vimodempallpn2.c
new file mode 100644
index 0000000000..1f35696e82
--- /dev/null
+++ b/src/libultra/io/vimodempallpn2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodempallpn2.c
+ *
+ * MPAL LPN2 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * N = Deinterlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeMpalLpn2 = {
+ OS_VI_MPAL_LPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(525), // vSync
+ HSYNC(3089, 4), // hSync
+ LEAP(3097, 3098), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentschaf1.c b/src/libultra/io/vimodentschaf1.c
new file mode 100644
index 0000000000..79b3987a0f
--- /dev/null
+++ b/src/libultra/io/vimodentschaf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentschaf1.c
+ *
+ * NTSC HAF1 Video Mode
+ *
+ * H = High Resolution
+ * A = Anti-Aliased
+ * F = Deflickered Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscHaf1 = {
+ OS_VI_NTSC_HAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentschan1.c b/src/libultra/io/vimodentschan1.c
new file mode 100644
index 0000000000..994937aa75
--- /dev/null
+++ b/src/libultra/io/vimodentschan1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentschan1.c
+ *
+ * NTSC HAN1 Video Mode
+ *
+ * H = High Resolution
+ * A = Anti-Aliased
+ * N = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscHan1 = {
+ OS_VI_NTSC_HAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentschpf1.c b/src/libultra/io/vimodentschpf1.c
new file mode 100644
index 0000000000..a91addf6e2
--- /dev/null
+++ b/src/libultra/io/vimodentschpf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentschpf1.c
+ *
+ * NTSC HPF1 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * F = Deflickered Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscHpf1 = {
+ OS_VI_NTSC_HPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentschpf2.c b/src/libultra/io/vimodentschpf2.c
new file mode 100644
index 0000000000..54b15f31be
--- /dev/null
+++ b/src/libultra/io/vimodentschpf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentschpf2.c
+ *
+ * NTSC HPF2 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * F = Deflickered Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscHpf2 = {
+ OS_VI_NTSC_HPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentschpn1.c b/src/libultra/io/vimodentschpn1.c
new file mode 100644
index 0000000000..83ffa0fd54
--- /dev/null
+++ b/src/libultra/io/vimodentschpn1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentschpn1.c
+ *
+ * NTSC HPN1 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * N = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscHpn1 = {
+ OS_VI_NTSC_HPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentschpn2.c b/src/libultra/io/vimodentschpn2.c
new file mode 100644
index 0000000000..5f3fbdf2d9
--- /dev/null
+++ b/src/libultra/io/vimodentschpn2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentschpn2.c
+ *
+ * NTSC HPN2 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * N = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscHpn2 = {
+ OS_VI_NTSC_HPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentsclaf1.c b/src/libultra/io/vimodentsclaf1.c
new file mode 100644
index 0000000000..236200044d
--- /dev/null
+++ b/src/libultra/io/vimodentsclaf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentsclaf1.c
+ *
+ * NTSC LAF1 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * F = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscLaf1 = {
+ OS_VI_NTSC_LAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentsclaf2.c b/src/libultra/io/vimodentsclaf2.c
new file mode 100644
index 0000000000..5b8d9194f1
--- /dev/null
+++ b/src/libultra/io/vimodentsclaf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentsclaf2.c
+ *
+ * NTSC LAF2 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * F = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscLaf2 = {
+ OS_VI_NTSC_LAF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentsclan1.c b/src/libultra/io/vimodentsclan1.c
index a29d15129f..44f038a02c 100644
--- a/src/libultra/io/vimodentsclan1.c
+++ b/src/libultra/io/vimodentsclan1.c
@@ -8,7 +8,7 @@
* N = Deinterlaced
* 1 = 16-bit Framebuffer
*/
-#include "global.h"
+#include "ultra64.h"
#include "ultra64/viint.h"
OSViMode osViModeNtscLan1 = {
@@ -16,31 +16,33 @@ OSViMode osViModeNtscLan1 = {
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
- VI_CTRL_PIXEL_ADV_3, // ctrl
- WIDTH(320), // width
- BURST(57, 34, 5, 62), // burst
- VSYNC(525), // vSync
- HSYNC(3093, 0), // hSync
- LEAP(3093, 3093), // leap
- HSTART(108, 748), // hStart
- SCALE(2, 0), // xScale
- VCURRENT(0), // vCurrent
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(525), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
},
- { // fldRegs
- {
- // [0]
- ORIGIN(640), // origin
- SCALE(1, 0), // yScale
- START(37, 511), // vStart
- BURST(4, 2, 14, 0), // vBurst
- VINTR(2), // vIntr
- },
- {
- // [1]
- ORIGIN(640), // origin
- SCALE(1, 0), // yScale
- START(37, 511), // vStart
- BURST(4, 2, 14, 0), // vBurst
- VINTR(2), // vIntr
- } },
};
diff --git a/src/libultra/io/vimodentsclan2.c b/src/libultra/io/vimodentsclan2.c
new file mode 100644
index 0000000000..a34f8ec300
--- /dev/null
+++ b/src/libultra/io/vimodentsclan2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentsclan2.c
+ *
+ * NTSC LAN2 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * N = Deinterlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscLan2 = {
+ OS_VI_NTSC_LAN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(525), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentsclpf1.c b/src/libultra/io/vimodentsclpf1.c
new file mode 100644
index 0000000000..0824a29184
--- /dev/null
+++ b/src/libultra/io/vimodentsclpf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentsclpf1.c
+ *
+ * NTSC LPF1 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * F = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscLpf1 = {
+ OS_VI_NTSC_LPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentsclpf2.c b/src/libultra/io/vimodentsclpf2.c
new file mode 100644
index 0000000000..fccfcbbd33
--- /dev/null
+++ b/src/libultra/io/vimodentsclpf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentsclpf2.c
+ *
+ * NTSC LPF2 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * F = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscLpf2 = {
+ OS_VI_NTSC_LPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentsclpn1.c b/src/libultra/io/vimodentsclpn1.c
new file mode 100644
index 0000000000..aabe7af792
--- /dev/null
+++ b/src/libultra/io/vimodentsclpn1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentsclpn1.c
+ *
+ * NTSC LPN1 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * N = Deinterlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscLpn1 = {
+ OS_VI_NTSC_LPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(525), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodentsclpn2.c b/src/libultra/io/vimodentsclpn2.c
new file mode 100644
index 0000000000..ce05176c3e
--- /dev/null
+++ b/src/libultra/io/vimodentsclpn2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodentsclpn2.c
+ *
+ * NTSC LPN2 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * N = Deinterlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeNtscLpn2 = {
+ OS_VI_NTSC_LPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(525), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepalhaf1.c b/src/libultra/io/vimodepalhaf1.c
new file mode 100644
index 0000000000..af4d5de616
--- /dev/null
+++ b/src/libultra/io/vimodepalhaf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepalhaf1.c
+ *
+ * PAL HAF1 Video Mode
+ *
+ * H = High Resolution
+ * A = Anti-Aliased
+ * F = Deflickered Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalHaf1 = {
+ OS_VI_PAL_HAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepalhan1.c b/src/libultra/io/vimodepalhan1.c
new file mode 100644
index 0000000000..7831490814
--- /dev/null
+++ b/src/libultra/io/vimodepalhan1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepalhan1.c
+ *
+ * PAL HAN1 Video Mode
+ *
+ * H = High Resolution
+ * A = Anti-Aliased
+ * N = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalHan1 = {
+ OS_VI_PAL_HAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepalhpf1.c b/src/libultra/io/vimodepalhpf1.c
new file mode 100644
index 0000000000..954c3a1199
--- /dev/null
+++ b/src/libultra/io/vimodepalhpf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepalhpf1.c
+ *
+ * PAL HPF1 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * F = Deflickered Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalHpf1 = {
+ OS_VI_PAL_HPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepalhpf2.c b/src/libultra/io/vimodepalhpf2.c
new file mode 100644
index 0000000000..e87290f306
--- /dev/null
+++ b/src/libultra/io/vimodepalhpf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepalhpf2.c
+ *
+ * PAL HPF2 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * F = Deflickered Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalHpf2 = {
+ OS_VI_PAL_HPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepalhpn1.c b/src/libultra/io/vimodepalhpn1.c
new file mode 100644
index 0000000000..680e48bea8
--- /dev/null
+++ b/src/libultra/io/vimodepalhpn1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepalhpn1.c
+ *
+ * PAL HPN1 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * N = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalHpn1 = {
+ OS_VI_PAL_HPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepalhpn2.c b/src/libultra/io/vimodepalhpn2.c
new file mode 100644
index 0000000000..ca4d33c2c6
--- /dev/null
+++ b/src/libultra/io/vimodepalhpn2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepalhpn2.c
+ *
+ * PAL HPN2 Video Mode
+ *
+ * H = High Resolution
+ * P = Point-Sampled
+ * N = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalHpn2 = {
+ OS_VI_PAL_HPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepallaf1.c b/src/libultra/io/vimodepallaf1.c
new file mode 100644
index 0000000000..de645b2919
--- /dev/null
+++ b/src/libultra/io/vimodepallaf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepallaf1.c
+ *
+ * PAL LAF1 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * F = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalLaf1 = {
+ OS_VI_PAL_LAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepallaf2.c b/src/libultra/io/vimodepallaf2.c
new file mode 100644
index 0000000000..a1a4d8c9d3
--- /dev/null
+++ b/src/libultra/io/vimodepallaf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepallaf2.c
+ *
+ * PAL LAF2 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * F = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalLaf2 = {
+ OS_VI_PAL_LAF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepallan1.c b/src/libultra/io/vimodepallan1.c
index d656dc4f94..f129073406 100644
--- a/src/libultra/io/vimodepallan1.c
+++ b/src/libultra/io/vimodepallan1.c
@@ -8,7 +8,7 @@
* N = Deinterlaced
* 1 = 16-bit Framebuffer
*/
-#include "global.h"
+#include "ultra64.h"
#include "ultra64/viint.h"
OSViMode osViModePalLan1 = {
@@ -16,31 +16,33 @@ OSViMode osViModePalLan1 = {
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
- VI_CTRL_PIXEL_ADV_3, // ctrl
- WIDTH(320), // width
- BURST(58, 30, 4, 69), // burst
- VSYNC(625), // vSync
- HSYNC(3177, 23), // hSync
- LEAP(3183, 3181), // leap
- HSTART(128, 768), // hStart
- SCALE(2, 0), // xScale
- VCURRENT(0), // vCurrent
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
},
- { // fldRegs
- {
- // [0]
- ORIGIN(640), // origin
- SCALE(1, 0), // yScale
- START(95, 569), // vStart
- BURST(107, 2, 9, 0), // vBurst
- VINTR(2), // vIntr
- },
- {
- // [1]
- ORIGIN(640), // origin
- SCALE(1, 0), // yScale
- START(95, 569), // vStart
- BURST(107, 2, 9, 0), // vBurst
- VINTR(2), // vIntr
- } },
};
diff --git a/src/libultra/io/vimodepallan2.c b/src/libultra/io/vimodepallan2.c
new file mode 100644
index 0000000000..310ab266c9
--- /dev/null
+++ b/src/libultra/io/vimodepallan2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepallan2.c
+ *
+ * PAL LAN2 Video Mode
+ *
+ * L = Low Resolution
+ * A = Anti-Aliased
+ * N = Deinterlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalLan2 = {
+ OS_VI_PAL_LAN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepallpf1.c b/src/libultra/io/vimodepallpf1.c
new file mode 100644
index 0000000000..5d10214ac9
--- /dev/null
+++ b/src/libultra/io/vimodepallpf1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepallpf1.c
+ *
+ * PAL LPF1 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * F = Interlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalLpf1 = {
+ OS_VI_PAL_LPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepallpf2.c b/src/libultra/io/vimodepallpf2.c
new file mode 100644
index 0000000000..076b3199c3
--- /dev/null
+++ b/src/libultra/io/vimodepallpf2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepallpf2.c
+ *
+ * PAL LPF2 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * F = Interlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalLpf2 = {
+ OS_VI_PAL_LPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepallpn1.c b/src/libultra/io/vimodepallpn1.c
new file mode 100644
index 0000000000..7eeb37f9e2
--- /dev/null
+++ b/src/libultra/io/vimodepallpn1.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepallpn1.c
+ *
+ * PAL LPN1 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * N = Deinterlaced
+ * 1 = 16-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalLpn1 = {
+ OS_VI_PAL_LPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/vimodepallpn2.c b/src/libultra/io/vimodepallpn2.c
new file mode 100644
index 0000000000..e460b87234
--- /dev/null
+++ b/src/libultra/io/vimodepallpn2.c
@@ -0,0 +1,48 @@
+/**
+ * @file vimodepallpn2.c
+ *
+ * PAL LPN2 Video Mode
+ *
+ * L = Low Resolution
+ * P = Point-Sampled
+ * N = Deinterlaced
+ * 2 = 32-bit Framebuffer
+ */
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModePalLpn2 = {
+ OS_VI_PAL_LPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+};
diff --git a/src/libultra/io/visetmode.c b/src/libultra/io/visetmode.c
index ab5b3b0e18..8c34a4ee31 100644
--- a/src/libultra/io/visetmode.c
+++ b/src/libultra/io/visetmode.c
@@ -4,6 +4,12 @@
void osViSetMode(OSViMode* mode) {
register u32 prevInt = __osDisableInt();
+#ifdef BBPLAYER
+ if (__osBbIsBb) {
+ mode->comRegs.ctrl &= ~VI_CTRL_PIXEL_ADV(2);
+ }
+#endif
+
__osViNext->modep = mode;
__osViNext->state = VI_STATE_MODE_SET;
__osViNext->features = __osViNext->modep->comRegs.ctrl;
diff --git a/src/libultra/io/vitbl.c b/src/libultra/io/vitbl.c
new file mode 100644
index 0000000000..8779396bbc
--- /dev/null
+++ b/src/libultra/io/vitbl.c
@@ -0,0 +1,1967 @@
+#include "ultra64.h"
+#include "ultra64/viint.h"
+
+OSViMode osViModeTable[] = {
+ {
+ OS_VI_NTSC_LPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(525), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_LPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_LAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(525), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_LAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_LPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(525), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_LPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_LAN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(525), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_LAF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_HPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_HPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_HAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_HAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_HPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_3 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_NTSC_HPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(524), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_LPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_LPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_LAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_LAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_LPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_LPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_LAN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_LAF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_HPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_HPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_HAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_HAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_HPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_3 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(1, 0), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_PAL_HPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(93, 567), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(95, 569), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_LPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(525), // vSync
+ HSYNC(3089, 4), // hSync
+ LEAP(3097, 3098), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_LPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_LAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(525), // vSync
+ HSYNC(3089, 4), // hSync
+ LEAP(3097, 3098), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_LAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_LPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(525), // vSync
+ HSYNC(3089, 4), // hSync
+ LEAP(3097, 3098), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_LPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_LAN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(525), // vSync
+ HSYNC(3089, 4), // hSync
+ LEAP(3097, 3098), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_LAF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_HPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_HPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_HAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_HAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ //[0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ //[1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_HPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_3 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(1, 0), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_MPAL_HPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(524), // vSync
+ HSYNC(3088, 0), // hSync
+ LEAP(3100, 3100), // leap
+ HSTART(108, 748), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(35, 509), // vStart
+ BURST(2, 2, 11, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(37, 511), // vStart
+ BURST(4, 2, 14, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+#if BUILD_VERSION >= VERSION_J
+ {
+ OS_VI_FPAL_LPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_2 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_LPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_LAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_LAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(640), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(640), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_LPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_3 |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_LPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_LAN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_LAF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.25), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(1280), // origin
+ SCALE(1, 0.75), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_HPN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_HPF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_HAN1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(1, 0), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_HAF1, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(1280), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_HPN2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_3 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(1280), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(1, 0), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(1, 0), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+ {
+ OS_VI_FPAL_HPF2, // type
+ {
+ // comRegs
+ VI_CTRL_TYPE_32 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON |
+ VI_CTRL_ANTIALIAS_MODE_2 | VI_CTRL_PIXEL_ADV_DEFAULT, // ctrl
+ WIDTH(640), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(624), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(1, 0), // xScale
+ VCURRENT(0), // vCurrent
+ },
+ {
+ // fldRegs
+ {
+ // [0]
+ ORIGIN(2560), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(45, 615), // vStart
+ BURST(107, 2, 9, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ {
+ // [1]
+ ORIGIN(5120), // origin
+ SCALE(0.5, 0.5), // yScale
+ VSTART(47, 617), // vStart
+ BURST(105, 2, 13, 0), // vBurst
+ VINTR(2), // vIntr
+ },
+ },
+ },
+#endif
+};
diff --git a/src/libultra/libc/bcmp.s b/src/libultra/libc/bcmp.s
index df6692feb5..9ef0746cf3 100644
--- a/src/libultra/libc/bcmp.s
+++ b/src/libultra/libc/bcmp.s
@@ -1,93 +1,89 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(bcmp)
- slti $at, $a2, 0x10
- bnez $at, bytecmp
- xor $v0, $a0, $a1
- andi $v0, $v0, 3
- bnez $v0, unaligncmp
- negu $t8, $a0
- andi $t8, $t8, 3
- beqz $t8, wordcmp
- subu $a2, $a2, $t8
- move $v0, $v1
- lwl $v0, ($a0)
- lwl $v1, ($a1)
- addu $a0, $a0, $t8
- addu $a1, $a1, $t8
- bne $v0, $v1, cmpne
+ xor v0, a0, a1
+ blt a2, 0x10, bytecmp
+
+ and v0, v0, 3
+ negu t8, a0
+ bnez v0, unaligncmp
+
+ and t8, t8, 3
+ subu a2, a2, t8
+ beqz t8, wordcmp
+
+ move v0, v1
+ lwl v0, (a0)
+ lwl v1, (a1)
+ addu a0, a0, t8
+ addu a1, a1, t8
+ bne v0, v1, cmpne
+
wordcmp:
- li $at, ~3
- and $a3, $a2, $at
- beqz $a3, bytecmp
- subu $a2, $a2, $a3
- addu $a3, $a3, $a0
- lw $v0, ($a0)
+ and a3, a2, ~3
+ subu a2, a2, a3
+ beqz a3, bytecmp
+
+ addu a3, a3, a0
1:
- lw $v1, ($a1)
- addiu $a0, $a0, 4
- addiu $a1, $a1, 4
- bne $v0, $v1, cmpne
- nop
- bnel $a0, $a3, 1b
- lw $v0, ($a0)
+ lw v0, (a0)
+ lw v1, (a1)
+ addu a0, a0, 4
+ addu a1, a1, 4
+ bne v0, v1, cmpne
+ bne a0, a3, 1b
+
b bytecmp
- nop
+
unaligncmp:
- negu $a3, $a1
- andi $a3, $a3, 3
- beqz $a3, partaligncmp
- subu $a2, $a2, $a3
- addu $a3, $a3, $a0
- lbu $v0, ($a0)
+ negu a3, a1
+ and a3, a3, 3
+ subu a2, a2, a3
+ beqz a3, partaligncmp
+
+ addu a3, a3, a0
1:
- lbu $v1, ($a1)
- addiu $a0, $a0, 1
- addiu $a1, $a1, 1
- bne $v0, $v1, cmpne
- nop
- bnel $a0, $a3, 1b
- lbu $v0, ($a0)
+ lbu v0, (a0)
+ lbu v1, (a1)
+ addu a0, a0, 1
+ addu a1, a1, 1
+ bne v0, v1, cmpne
+ bne a0, a3, 1b
+
partaligncmp:
- li $at, ~3
- and $a3, $a2, $at
- beqz $a3, bytecmp
- subu $a2, $a2, $a3
- addu $a3, $a3, $a0
- lwl $v0, ($a0)
+ and a3, a2, ~3
+ subu a2, a2, a3
+ beqz a3, bytecmp
+
+ addu a3, a3, a0
1:
- lw $v1, ($a1)
- lwr $v0, 3($a0)
- addiu $a0, $a0, 4
- addiu $a1, $a1, 4
- bne $v0, $v1, cmpne
- nop
- bnel $a0, $a3, 1b
- lwl $v0, ($a0)
+ lwl v0, (a0)
+ lwr v0, 3(a0)
+ lw v1, (a1)
+ addu a0, a0, 4
+ addu a1, a1, 4
+ bne v0, v1, cmpne
+ bne a0, a3, 1b
+
bytecmp:
- blez $a2, cmpdone
- addu $a3, $a2, $a0
- lbu $v0, ($a0)
+ addu a3, a2, a0
+ blez a2, cmpdone
1:
- lbu $v1, ($a1)
- addiu $a0, $a0, 1
- addiu $a1, $a1, 1
- bne $v0, $v1, cmpne
- nop
- bnel $a0, $a3, 1b
- lbu $v0, ($a0)
+ lbu v0, (a0)
+ lbu v1, (a1)
+ addu a0, a0, 1
+ addu a1, a1, 1
+ bne v0, v1, cmpne
+ bne a0, a3, 1b
+
cmpdone:
- jr $ra
- move $v0, $zero
+ move v0, zero
+ jr ra
cmpne:
- jr $ra
- li $v0, 1
+ li v0, 1
+ jr ra
END(bcmp)
diff --git a/src/libultra/libc/bcopy.s b/src/libultra/libc/bcopy.s
index e1240f113a..dcb6ad13c3 100644
--- a/src/libultra/libc/bcopy.s
+++ b/src/libultra/libc/bcopy.s
@@ -1,233 +1,211 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(bcopy)
- beqz $a2, ret
- move $a3, $a1
- beq $a0, $a1, ret
- slt $at, $a1, $a0
- bnezl $at, goforwards
- slti $at, $a2, 0x10
- add $v0, $a0, $a2
- slt $at, $a1, $v0
- beql $at, $zero, goforwards
- slti $at, $a2, 0x10
+ move a3, a1
+ beqz a2, ret
+ beq a0, a1, ret
+ blt a1, a0, goforwards
+ add v0, a0, a2
+ bge a1, v0, goforwards
b gobackwards
- slti $at, $a2, 0x10
- slti $at, $a2, 0x10
+
goforwards:
- bnez $at, forwards_bytecopy
- nop
- andi $v0, $a0, 3
- andi $v1, $a1, 3
- beq $v0, $v1, forwalignable
- nop
+ blt a2, 0x10, forwards_bytecopy
+ and v0, a0, 3
+ and v1, a1, 3
+ beq v0, v1, forwalignable
+
forwards_bytecopy:
- beqz $a2, ret
- nop
- addu $v1, $a0, $a2
+ beqz a2, ret
+ addu v1, a0, a2
99:
- lb $v0, ($a0)
- addiu $a0, $a0, 1
- addiu $a1, $a1, 1
- bne $a0, $v1, 99b
- sb $v0, -1($a1)
+ lb v0, (a0)
+ addu a0, a0, 1
+ sb v0, (a1)
+ addu a1, a1, 1
+ bne a0, v1, 99b
ret:
- jr $ra
- move $v0, $a3
+ move v0, a3
+ jr ra
forwalignable:
- beqz $v0, forwards_32
- li $at, 1
- beq $v0, $at, forw_copy3
- li $at, 2
- beql $v0, $at, forw_copy2
- lh $v0, ($a0)
- lb $v0, ($a0)
- addiu $a0, $a0, 1
- addiu $a1, $a1, 1
- addiu $a2, $a2, -1
+ beqz v0, forwards_32
+ beq v0, 1, forw_copy3
+ beq v0, 2, forw_copy2
+
+ lb v0, (a0)
+ addu a0, a0, 1
+ sb v0, (a1)
+ addu a1, a1, 1
+ addu a2, a2, -1
b forwards_32
- sb $v0, -1($a1)
- lh $v0, ($a0)
+
forw_copy2:
- addiu $a0, $a0, 2
- addiu $a1, $a1, 2
- addiu $a2, $a2, -2
+ lh v0, (a0)
+ addu a0, a0, 2
+ sh v0, (a1)
+ addu a1, a1, 2
+ addu a2, a2, -2
b forwards_32
- sh $v0, -2($a1)
+
forw_copy3:
- lb $v0, ($a0)
- lh $v1, 1($a0)
- addiu $a0, $a0, 3
- addiu $a1, $a1, 3
- addiu $a2, $a2, -3
- sb $v0, -3($a1)
- sh $v1, -2($a1)
+ lb v0, (a0)
+ lh v1, 1(a0)
+ addiu a0, a0, 3
+ sb v0, (a1)
+ sh v1, 1(a1)
+ addiu a1, a1, 3
+ addiu a2, a2, -3
forwards:
forwards_32:
- slti $at, $a2, 0x20
- bnezl $at, forwards_16_
- slti $at, $a2, 0x10
- lw $v0, ($a0)
- lw $v1, 4($a0)
- lw $t0, 8($a0)
- lw $t1, 0xC($a0)
- lw $t2, 0x10($a0)
- lw $t3, 0x14($a0)
- lw $t4, 0x18($a0)
- lw $t5, 0x1C($a0)
- addiu $a0, $a0, 0x20
- addiu $a1, $a1, 0x20
- addiu $a2, $a2, -0x20
- sw $v0, -0x20($a1)
- sw $v1, -0x1C($a1)
- sw $t0, -0x18($a1)
- sw $t1, -0x14($a1)
- sw $t2, -0x10($a1)
- sw $t3, -0xC($a1)
- sw $t4, -8($a1)
+ blt a2, 32, forwards_16
+ lw v0, 0(a0)
+ lw v1, 4(a0)
+ lw t0, 8(a0)
+ lw t1, 12(a0)
+ lw t2, 16(a0)
+ lw t3, 20(a0)
+ lw t4, 24(a0)
+ lw t5, 28(a0)
+ addiu a0, a0, 32
+ sw v0, 0(a1)
+ sw v1, 4(a1)
+ sw t0, 8(a1)
+ sw t1, 12(a1)
+ sw t2, 16(a1)
+ sw t3, 20(a1)
+ sw t4, 24(a1)
+ sw t5, 28(a1)
+ addiu a1, a1, 32
+ addiu a2, a2, -32
b forwards_32
- sw $t5, -4($a1)
+
forwards_16:
- slti $at, $a2, 0x10
-forwards_16_: // fake label due to branch likely optimization
- bnezl $at, forwards_4_
- slti $at, $a2, 4
- lw $v0, ($a0)
- lw $v1, 4($a0)
- lw $t0, 8($a0)
- lw $t1, 0xC($a0)
- addiu $a0, $a0, 0x10
- addiu $a1, $a1, 0x10
- addiu $a2, $a2, -0x10
- sw $v0, -0x10($a1)
- sw $v1, -0xC($a1)
- sw $t0, -8($a1)
+ blt a2, 16, forwards_4
+ lw v0, 0(a0)
+ lw v1, 4(a0)
+ lw t0, 8(a0)
+ lw t1, 12(a0)
+ addiu a0, a0, 16
+ sw v0, 0(a1)
+ sw v1, 4(a1)
+ sw t0, 8(a1)
+ sw t1, 12(a1)
+ addiu a1, a1, 16
+ addiu a2, a2, -16
b forwards_16
- sw $t1, -4($a1)
+
forwards_4:
- slti $at, $a2, 4
-forwards_4_: // fake label due to branch likely optimization
- bnez $at, forwards_bytecopy
- nop
- lw $v0, ($a0)
- addiu $a0, $a0, 4
- addiu $a1, $a1, 4
- addiu $a2, $a2, -4
+ blt a2, 4, forwards_bytecopy
+
+ lw v0, 0(a0)
+ addiu a0, a0, 4
+ sw v0, 0(a1)
+ addiu a1, a1, 4
+ addiu a2, a2, -4
b forwards_4
- sw $v0, -4($a1)
- slti $at, $a2, 0x10
+
gobackwards:
- add $a0, $a0, $a2
- bnez $at, backwards_bytecopy
- add $a1, $a1, $a2
- andi $v0, $a0, 3
- andi $v1, $a1, 3
- beq $v0, $v1, backalignable
- nop
+ add a0, a0,a2
+ add a1, a1,a2
+ blt a2, 16, backwards_bytecopy
+
+ andi v0, a0, 0x3
+ andi v1, a1, 0x3
+ beq v0, v1, backalignable
+
backwards_bytecopy:
- beqz $a2, ret
- nop
- addiu $a0, $a0, -1
- addiu $a1, $a1, -1
- subu $v1, $a0, $a2
+ beqz a2, ret
+ addiu a0, a0, -1
+ addiu a1, a1, -1
+ subu v1, a0,a2
99:
- lb $v0, ($a0)
- addiu $a0, $a0, -1
- addiu $a1, $a1, -1
- bne $a0, $v1, 99b
- sb $v0, 1($a1)
- jr $ra
- move $v0, $a3
+ lb v0, 0(a0)
+ addiu a0, a0, -1
+ sb v0, 0(a1)
+ addiu a1, a1, -1
+ bne a0, v1,99b
+
+ move v0, a3
+ jr ra
backalignable:
- beqz $v0, backwards_32
- li $at, 3
- beq $v0, $at, back_copy3
- li $at, 2
- beql $v0, $at, back_copy2
- lh $v0, -2($a0)
- lb $v0, -1($a0)
- addiu $a0, $a0, -1
- addiu $a1, $a1, -1
- addiu $a2, $a2, -1
- b backwards_32
- sb $v0, ($a1)
- lh $v0, -2($a0)
+ beqz v0, backwards
+ beq v0, 3, back_copy3
+ beq v0, 2, back_copy2
+ lb v0, -1(a0)
+ addiu a0, a0, -1
+ sb v0, -1(a1)
+ addiu a1, a1, -1
+ addiu a2, a2, -1
+ b backwards
+
back_copy2:
- addiu $a0, $a0, -2
- addiu $a1, $a1, -2
- addiu $a2, $a2, -2
- b backwards_32
- sh $v0, ($a1)
+ lh v0, -2(a0)
+ addiu a0, a0, -2
+ sh v0, -2(a1)
+ addiu a1, a1, -2
+ addiu a2, a2, -2
+ b backwards
+
back_copy3:
- lb $v0, -1($a0)
- lh $v1, -3($a0)
- addiu $a0, $a0, -3
- addiu $a1, $a1, -3
- addiu $a2, $a2, -3
- sb $v0, 2($a1)
- sh $v1, ($a1)
+ lb v0, -1(a0)
+ lh v1, -3(a0)
+ addiu a0, a0, -3
+ sb v0, -1(a1)
+ sh v1, -3(a1)
+ addiu a1, a1, -3
+ addiu a2, a2, -3
backwards:
backwards_32:
- slti $at, $a2, 0x20
- bnezl $at, backwards_16_
- slti $at, $a2, 0x10
- lw $v0, -4($a0)
- lw $v1, -8($a0)
- lw $t0, -0xc($a0)
- lw $t1, -0x10($a0)
- lw $t2, -0x14($a0)
- lw $t3, -0x18($a0)
- lw $t4, -0x1c($a0)
- lw $t5, -0x20($a0)
- addiu $a0, $a0, -0x20
- addiu $a1, $a1, -0x20
- addiu $a2, $a2, -0x20
- sw $v0, 0x1C($a1)
- sw $v1, 0x18($a1)
- sw $t0, 0x14($a1)
- sw $t1, 0x10($a1)
- sw $t2, 0xC($a1)
- sw $t3, 8($a1)
- sw $t4, 4($a1)
+ blt a2, 32, backwards_16
+ lw v0, -4(a0)
+ lw v1, -8(a0)
+ lw t0, -12(a0)
+ lw t1, -16(a0)
+ lw t2, -20(a0)
+ lw t3, -24(a0)
+ lw t4, -28(a0)
+ lw t5, -32(a0)
+ addiu a0, a0, -32
+ sw v0, -4(a1)
+ sw v1, -8(a1)
+ sw t0, -12(a1)
+ sw t1, -16(a1)
+ sw t2, -20(a1)
+ sw t3, -24(a1)
+ sw t4, -28(a1)
+ sw t5, -32(a1)
+ addiu a1, a1, -32
+ addiu a2, a2, -32
b backwards_32
- sw $t5, ($a1)
+
backwards_16:
- slti $at, $a2, 0x10
-backwards_16_: // fake label due to branch likely optimization
- bnezl $at, backwards_4_
- slti $at, $a2, 4
- lw $v0, -4($a0)
- lw $v1, -8($a0)
- lw $t0, -0xC($a0)
- lw $t1, -0x10($a0)
- addiu $a0, $a0, -0x10
- addiu $a1, $a1, -0x10
- addiu $a2, $a2, -0x10
- sw $v0, 0xC($a1)
- sw $v1, 8($a1)
- sw $t0, 4($a1)
+ blt a2, 16, backwards_4
+ lw v0, -4(a0)
+ lw v1, -8(a0)
+ lw t0, -12(a0)
+ lw t1, -16(a0)
+ addiu a0, a0, -16
+ sw v0, -4(a1)
+ sw v1, -8(a1)
+ sw t0, -12(a1)
+ sw t1, -16(a1)
+ addiu a1, a1, -16
+ addiu a2, a2, -16
b backwards_16
- sw $t1, ($a1)
+
backwards_4:
- slti $at, $a2, 4
-backwards_4_: // fake label due to branch likely optimization
- bnez $at, backwards_bytecopy
- nop
- lw $v0, -4($a0)
- addiu $a0, $a0, -4
- addiu $a1, $a1, -4
- addiu $a2, $a2, -4
+ blt a2, 4, backwards_bytecopy
+ lw v0, -4(a0)
+ addiu a0, a0, -4
+ sw v0, -4(a1)
+ addiu a1, a1, -4
+ addiu a2, a2, -4
b backwards_4
- sw $v0, ($a1)
END(bcopy)
diff --git a/src/libultra/libc/bzero.s b/src/libultra/libc/bzero.s
index 5323a92d7d..e1ee69e89a 100644
--- a/src/libultra/libc/bzero.s
+++ b/src/libultra/libc/bzero.s
@@ -1,65 +1,59 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(bzero)
- slti $at, $a1, 0xC
- bnez $at, bytezero
- negu $v1, $a0
- andi $v1, $v1, 3
- beqz $v1, blkzero
- subu $a1, $a1, $v1
- swl $zero, ($a0)
- addu $a0, $a0, $v1
+ negu v1, a0
+ blt a1, 0xC, bytezero
+
+ and v1, v1, 3
+ subu a1, a1, v1
+ beqz v1, blkzero
+
+ swl zero, (a0)
+ addu a0, a0, v1
blkzero:
- // align backwards to 0x20
- li $at, ~0x1F
- and $a3, $a1, $at
- // If the result is zero, the amount to zero is less than 0x20 bytes
- beqz $a3, wordzero
- subu $a1, $a1, $a3
- // zero in blocks of 0x20 at a time
- addu $a3, $a3, $a0
+ /* align backwards to 0x20 */
+ and a3, a1, ~(0x20 - 1)
+ /* If the result is zero, the amount to zero is less than 0x20 bytes */
+ subu a1, a1, a3
+ beqz a3, wordzero
+ /* zero in blocks of 0x20 at a time */
+ addu a3, a3, a0
1:
- addiu $a0, $a0, 0x20
- sw $zero, -0x20($a0)
- sw $zero, -0x1C($a0)
- sw $zero, -0x18($a0)
- sw $zero, -0x14($a0)
- sw $zero, -0x10($a0)
- sw $zero, -0xC($a0)
- sw $zero, -8($a0)
- bne $a0, $a3, 1b
- sw $zero, -4($a0)
+ sw zero, 0(a0)
+ sw zero, 4(a0)
+ sw zero, 8(a0)
+ sw zero, 12(a0)
+ addiu a0, a0, 0x20
+ sw zero, -16(a0)
+ sw zero, -12(a0)
+ sw zero, -8(a0)
+ sw zero, -4(a0)
+ bne a0, a3, 1b
+
wordzero:
- // align backwards to 0x4
- li $at, ~3
- and $a3, $a1, $at
- // If the result is zero, the amount to zero is less than 0x4 bytes
- beqz $a3, bytezero
- subu $a1, $a1, $a3
- // zero one word at a time
- addu $a3, $a3, $a0
+ /* align backwards to 0x4 */
+ and a3, a1, ~3
+ /* If the result is zero, the amount to zero is less than 0x4 bytes */
+ subu a1, a1, a3
+ beqz a3, bytezero
+ /* zero one word at a time */
+ addu a3, a3, a0
1:
- addiu $a0, $a0, 4
- bne $a0, $a3, 1b
- sw $zero, -4($a0)
+ addu a0, a0, 4
+ sw zero, -4(a0)
+ bne a0, a3, 1b
bytezero:
- // test if nothing left to zero
- blez $a1, zerodone
- nop
- // zero one byte at a time
- addu $a1, $a1, $a0
+ /* test if nothing left to zero */
+ blez a1, zerodone
+ /* zero one byte at a time */
+ addu a1, a1, a0
1:
- addiu $a0, $a0, 1
- bne $a0, $a1, 1b
- sb $zero, -1($a0)
+ addiu a0, a0, 1
+ sb zero, -1(a0)
+ bne a0, a1, 1b
zerodone:
- jr $ra
- nop
+ jr ra
END(bzero)
diff --git a/src/libultra/libc/xldtob.c b/src/libultra/libc/xldtob.c
index a0ebe5d2d8..1a64baf041 100644
--- a/src/libultra/libc/xldtob.c
+++ b/src/libultra/libc/xldtob.c
@@ -56,7 +56,7 @@ void _Ldtob(_Pft* args, char code) {
} else if (args->prec == 0 && (code == 'g' || code == 'G')) {
args->prec = 1;
}
- err = _Ldunscale(&exp, (_Pft*)args);
+ err = _Ldunscale(&exp, args);
if (err > 0) {
memcpy(args->s, err == 2 ? "NaN" : "Inf", args->n1 = 3);
return;
@@ -76,7 +76,7 @@ void _Ldtob(_Pft* args, char code) {
exp = exp * 30103 / 100000 - 4;
if (exp < 0) {
- n = (3 - exp) & ~3;
+ n = (-exp + 3) & ~3;
exp = -n;
for (i = 0; n > 0; n >>= 1, i++) {
if ((n & 1) != 0) {
@@ -95,7 +95,7 @@ void _Ldtob(_Pft* args, char code) {
val /= factor;
}
- gen = ((code == 'f') ? exp + 10 : 6) + args->prec;
+ gen = args->prec + ((code == 'f') ? exp + 10 : 6);
if (gen > 0x13) {
gen = 0x13;
}
@@ -128,20 +128,14 @@ void _Ldtob(_Pft* args, char code) {
--gen, --exp;
}
- nsig = ((code == 'f') ? exp + 1 : ((code == 'e' || code == 'E') ? 1 : 0)) + args->prec;
+ nsig = args->prec + ((code == 'f') ? exp + 1 : ((code == 'e' || code == 'E') ? 1 : 0));
if (gen < nsig) {
nsig = gen;
}
if (nsig > 0) {
- char drop;
+ char drop = (nsig < gen && ptr[nsig] > '4') ? '9' : '0';
int n2;
- if (nsig < gen && ptr[nsig] > '4') {
- drop = '9';
- } else {
- drop = '0';
- }
-
for (n2 = nsig; ptr[--n2] == drop;) {
nsig--;
}
diff --git a/src/libultra/libc/xprintf.c b/src/libultra/libc/xprintf.c
index 7fba40b4c4..32a25d383c 100644
--- a/src/libultra/libc/xprintf.c
+++ b/src/libultra/libc/xprintf.c
@@ -11,7 +11,7 @@
#define ATOI(i, a) \
for (i = 0; isdigit(*a); a++) \
if (i < 999) \
- i = *a + i * 10 - '0';
+ i = i * 10 + *a - '0';
#define PUT(fmt, _size) \
if (_size > 0) { \
@@ -93,11 +93,7 @@ int _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap) {
}
}
- if (strchr("hlL", *s) != NULL) {
- x.qual = *s++;
- } else {
- x.qual = '\0';
- }
+ x.qual = (strchr("hlL", *s) != NULL) ? *s++ : '\0';
if (x.qual == 'l' && *s == 'l') {
x.qual = 'L';
@@ -126,7 +122,7 @@ static void _Putfld(_Pft* px, va_list* pap, char code, char* ac) {
switch (code) {
case 'c':
- ac[px->n0++] = va_arg(*pap, unsigned int);
+ ac[px->n0++] = va_arg(*pap, int);
break;
case 'd':
diff --git a/src/libultra/mgu/mtxf2l.s b/src/libultra/mgu/mtxf2l.s
index edbb675a8e..0268a323ef 100644
--- a/src/libultra/mgu/mtxf2l.s
+++ b/src/libultra/mgu/mtxf2l.s
@@ -1,40 +1,36 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
#define MTX_INTPART 0
#define MTX_FRACPART 0x20
LEAF(guMtxF2L)
- li $at, 0x47800000 // 65536.0f
- mtc1 $at, $f0
- li $t9, 0xFFFF0000
- addiu $t8, $a1, MTX_FRACPART
+ li.s fv0, 65536.0
+ li t9, 0xFFFF0000
+ addu t8, a1, MTX_FRACPART
1:
- lwc1 $f4, ($a0)
- lwc1 $f10, 4($a0)
- addiu $a1, $a1, 4
- mul.s $f6, $f4, $f0
- addiu $a0, $a0, 8
- mul.s $f16, $f10, $f0
- trunc.w.s $f8, $f6
- trunc.w.s $f18, $f16
- mfc1 $t0, $f8
- mfc1 $t1, $f18
- and $t2, $t0, $t9
- sll $t5, $t0, 0x10
- srl $t3, $t1, 0x10
- andi $t6, $t1, 0xFFFF
- or $t4, $t2, $t3
- or $t7, $t5, $t6
- sw $t4, (MTX_INTPART-4)($a1)
- bne $a1, $t8, 1b
- sw $t7, (MTX_FRACPART-4)($a1)
- jr $ra
- nop
+ lwc1 ft0, 0(a0)
+ mul.s ft1, ft0, fv0
+ trunc.w.s ft2, ft1
+ lwc1 ft3, 4(a0)
+ mul.s ft4, ft3, fv0
+ trunc.w.s ft5, ft4
+ mfc1 t0, ft2
+ mfc1 t1, ft5
+ and t2, t0, t9
+ srl t3, t1, 0x10
+ or t4, t2, t3
+ sw t4, (MTX_INTPART)(a1)
+ sll t5, t0, 0x10
+ and t6, t1, 0xFFFF
+ or t7, t5, t6
+ sw t7, (MTX_FRACPART)(a1)
+ addu a1, a1, 4
+ addu a0, a0, 8
+ bne a1, t8, 1b
+
+ jr ra
END(guMtxF2L)
diff --git a/src/libultra/mgu/mtxident.s b/src/libultra/mgu/mtxident.s
index fb0e4c44ad..7f074a5526 100644
--- a/src/libultra/mgu/mtxident.s
+++ b/src/libultra/mgu/mtxident.s
@@ -1,29 +1,27 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
LEAF(guMtxIdent)
- addi $t0, $zero, 1
- sll $t1, $t0, 0x10
- sw $t1, ($a0)
- sw $zero, 4($a0)
- sw $t0, 8($a0)
- sw $zero, 0xc($a0)
- sw $zero, 0x10($a0)
- sw $t1, 0x14($a0)
- sw $zero, 0x18($a0)
- sw $t0, 0x1C($a0)
- sw $zero, 0x20($a0)
- sw $zero, 0x24($a0)
- sw $zero, 0x28($a0)
- sw $zero, 0x2c($a0)
- sw $zero, 0x30($a0)
- sw $zero, 0x34($a0)
- sw $zero, 0x38($a0)
- jr $ra
- sw $zero, 0x3C($a0)
+ add t0, zero, 1
+ sll t1, t0, 0x10
+ sw t1, 0x00(a0)
+ sw zero, 0x04(a0)
+ sw t0, 0x08(a0)
+ sw zero, 0x0C(a0)
+ sw zero, 0x10(a0)
+ sw t1, 0x14(a0)
+ sw zero, 0x18(a0)
+ sw t0, 0x1C(a0)
+ sw zero, 0x20(a0)
+ sw zero, 0x24(a0)
+ sw zero, 0x28(a0)
+ sw zero, 0x2c(a0)
+ sw zero, 0x30(a0)
+ sw zero, 0x34(a0)
+ sw zero, 0x38(a0)
+ sw zero, 0x3C(a0)
+ jr ra
END(guMtxIdent)
diff --git a/src/libultra/mgu/mtxidentf.s b/src/libultra/mgu/mtxidentf.s
index 583fc22184..490b79e4b4 100644
--- a/src/libultra/mgu/mtxidentf.s
+++ b/src/libultra/mgu/mtxidentf.s
@@ -1,28 +1,26 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
LEAF(guMtxIdentF)
- li $t0, 0x3F800000 // 1.0f
- sw $t0, ($a0)
- sw $zero, 4($a0)
- sw $zero, 8($a0)
- sw $zero, 0xC($a0)
- sw $zero, 0x10($a0)
- sw $t0, 0x14($a0)
- sw $zero, 0x18($a0)
- sw $zero, 0x1C($a0)
- sw $zero, 0x20($a0)
- sw $zero, 0x24($a0)
- sw $t0, 0x28($a0)
- sw $zero, 0x2C($a0)
- sw $zero, 0x30($a0)
- sw $zero, 0x34($a0)
- sw $zero, 0x38($a0)
- jr $ra
- sw $t0, 0x3C($a0)
+ li.s t0, 1.0
+ sw t0, 0x00(a0)
+ sw zero, 0x04(a0)
+ sw zero, 0x08(a0)
+ sw zero, 0x0C(a0)
+ sw zero, 0x10(a0)
+ sw t0, 0x14(a0)
+ sw zero, 0x18(a0)
+ sw zero, 0x1C(a0)
+ sw zero, 0x20(a0)
+ sw zero, 0x24(a0)
+ sw t0, 0x28(a0)
+ sw zero, 0x2C(a0)
+ sw zero, 0x30(a0)
+ sw zero, 0x34(a0)
+ sw zero, 0x38(a0)
+ sw t0, 0x3C(a0)
+ jr ra
END(guMtxIdentF)
diff --git a/src/libultra/mgu/mtxl2f.s b/src/libultra/mgu/mtxl2f.s
index 9298da37cc..b95e3aca7f 100644
--- a/src/libultra/mgu/mtxl2f.s
+++ b/src/libultra/mgu/mtxl2f.s
@@ -1,41 +1,43 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
#define MTX_INTPART 0
#define MTX_FRACPART 0x20
+#define FIXTOF 0.0000152587890625 /* 1.0f / 65536.0f */
+
LEAF(guMtxL2F)
- li $at, 0x37800000 // 1.0f / 65536.0f
- mtc1 $at, $f0
- li $t9, 0xFFFF0000
- addiu $t8, $a1, MTX_FRACPART
+ li.s fv0, FIXTOF
+ li t9, 0xFFFF0000
+ addiu t8, a1, MTX_FRACPART
1:
- lw $t0, MTX_INTPART($a1)
- lw $t1, MTX_FRACPART($a1)
- addiu $a1, $a1, 4
- and $t2, $t0, $t9
- srl $t3, $t1, 0x10
- or $t4, $t2, $t3
- mtc1 $t4, $f4
- sll $t5, $t0, 0x10
- andi $t6, $t1, 0xFFFF
- or $t7, $t5, $t6
- cvt.s.w $f6, $f4
- mtc1 $t7, $f10
- addiu $a0, $a0, 8
- cvt.s.w $f16, $f10
- mul.s $f8, $f6, $f0
- nop
- mul.s $f18, $f16, $f0
- swc1 $f8, -8($a0)
- bne $a1, $t8, 1b
- swc1 $f18, -4($a0)
- jr $ra
- nop
+ lw t0, MTX_INTPART(a1)
+ lw t1, MTX_FRACPART(a1)
+
+ and t2, t0, t9
+ srl t3, t1, 0x10
+ or t4, t2, t3
+
+ sll t5, t0, 0x10
+ and t6, t1, 0xFFFF
+ or t7, t5, t6
+
+ mtc1 t4, ft0
+ cvt.s.w ft1, ft0
+ mul.s ft2, ft1, fv0
+
+ mtc1 t7, ft3
+ cvt.s.w ft4, ft3
+ mul.s ft5, ft4, fv0
+
+ swc1 ft2, 0(a0)
+ swc1 ft5, 4(a0)
+ addu a0, a0, 8
+ addu a1, a1, 4
+ bne a1, t8, 1b
+
+ jr ra
END(guMtxL2F)
diff --git a/src/libultra/mgu/normalize.s b/src/libultra/mgu/normalize.s
index 7686317ea2..8174527f2c 100644
--- a/src/libultra/mgu/normalize.s
+++ b/src/libultra/mgu/normalize.s
@@ -1,31 +1,29 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
LEAF(guNormalize)
- lwc1 $f4, ($a0)
- lwc1 $f6, ($a1)
- lwc1 $f8, ($a2)
- mul.s $f10, $f4, $f4
- li $t0, 0x3F800000 // 1.0f
- mul.s $f16, $f6, $f6
- add.s $f18, $f10, $f16
- mul.s $f16, $f8, $f8
- add.s $f10, $f16, $f18
- mtc1 $t0, $f18
- sqrt.s $f16, $f10
- div.s $f10, $f18, $f16
- mul.s $f16, $f4, $f10
+ lwc1 ft0, (a0)
+ lwc1 ft1, (a1)
+ lwc1 ft2, (a2)
+ mul.s ft3, ft0, ft0
+ li.s t0, 1.0
+ mul.s ft4, ft1, ft1
+ add.s ft5, ft3, ft4
+ mul.s ft4, ft2, ft2
+ add.s ft3, ft4, ft5
+ mtc1 t0, ft5
+ sqrt.s ft4, ft3
+ div.s ft3, ft5, ft4
+ mul.s ft4, ft0, ft3
nop
- mul.s $f18, $f6, $f10
+ mul.s ft5, ft1, ft3
nop
- mul.s $f4, $f8, $f10
- swc1 $f16, ($a0)
- swc1 $f18, ($a1)
- jr $ra
- swc1 $f4, ($a2)
+ mul.s ft0, ft2, ft3
+ swc1 ft4, (a0)
+ swc1 ft5, (a1)
+ swc1 ft0, (a2)
+ jr ra
END(guNormalize)
diff --git a/src/libultra/mgu/scale.s b/src/libultra/mgu/scale.s
index 80199c0621..5661b940cc 100644
--- a/src/libultra/mgu/scale.s
+++ b/src/libultra/mgu/scale.s
@@ -1,52 +1,56 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
LEAF(guScale)
- li $at, 0x47800000 // 65536.0f
- mtc1 $at, $f4
- mtc1 $a1, $f6
- sw $zero, 4($a0)
- sw $zero, 0xC($a0)
- mul.s $f8, $f6, $f4
- mtc1 $a2, $f6
- sw $zero, 0x10($a0)
- sw $zero, 0x18($a0)
- sw $zero, 0x24($a0)
- sw $zero, 0x2C($a0)
- sw $zero, 0x30($a0)
- trunc.w.s $f10, $f8
- mul.s $f8, $f6, $f4
- mtc1 $a3, $f6
- sw $zero, 0x38($a0)
- mfc1 $t1, $f10
- sw $zero, 0x3C($a0)
- srl $t2, $t1, 0x10
- trunc.w.s $f10, $f8
- mul.s $f8, $f6, $f4
- sll $t0, $t2, 0x10
- sll $t2, $t1, 0x10
- mfc1 $t1, $f10
- sw $t0, ($a0)
- sw $t2, 0x20($a0)
- srl $t0, $t1, 0x10
- trunc.w.s $f10, $f8
- andi $t2, $t1, 0xFFFF
- sw $t2, 0x28($a0)
- sw $t0, 8($a0)
- mfc1 $t1, $f10
- nop
- srl $t2, $t1, 0x10
- sll $t0, $t2, 0x10
- sw $t0, 0x14($a0)
- li $t0, 1
- sll $t2, $t1, 0x10
- sw $t2, 0x34($a0)
- jr $ra
- sw $t0, 0x1C($a0)
+ li.s ft0, 65536.0
+
+ mtc1 a1, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t1, ft3
+
+ srl t2, t1, 0x10
+ sll t0, t2, 0x10
+ sw t0, 0x00(a0)
+ sll t2, t1, 0x10
+ sw t2, 0x20(a0)
+
+ mtc1 a2, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t1, ft3
+
+ srl t0, t1, 0x10
+ sw t0, 0x08(a0)
+ andi t2, t1, 0xFFFF
+ sw t2, 0x28(a0)
+
+ mtc1 a3, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t1, ft3
+
+ srl t2, t1, 0x10
+ sll t0, t2, 0x10
+ sw t0, 0x14(a0)
+ sll t2, t1, 0x10
+ sw t2, 0x34(a0)
+
+ li t0, 1
+ sw t0, 0x1C(a0)
+
+ sw zero, 0x04(a0)
+ sw zero, 0x0C(a0)
+ sw zero, 0x10(a0)
+ sw zero, 0x18(a0)
+ sw zero, 0x24(a0)
+ sw zero, 0x2C(a0)
+ sw zero, 0x30(a0)
+ sw zero, 0x38(a0)
+ sw zero, 0x3C(a0)
+
+ jr ra
END(guScale)
diff --git a/src/libultra/mgu/translate.s b/src/libultra/mgu/translate.s
index d059ad5692..cf2d246434 100644
--- a/src/libultra/mgu/translate.s
+++ b/src/libultra/mgu/translate.s
@@ -1,61 +1,68 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
LEAF(guTranslate)
- li $at, 0x47800000 // 65536.0f
- mtc1 $at, $f4
- mtc1 $a1, $f6
- sw $zero, ($a0)
- sw $zero, 0x14($a0)
- mul.s $f8, $f6, $f4
- mtc1 $a2, $f6
- sw $zero, 8($a0)
- sw $zero, 4($a0)
- sw $zero, 0xC($a0)
- sw $zero, 0x10($a0)
- sw $zero, 0x20($a0)
- trunc.w.s $f10, $f8
- mul.s $f8, $f6, $f4
- mtc1 $a3, $f6
- sw $zero, 0x24($a0)
- mfc1 $t1, $f10
- sw $zero, 0x28($a0)
- sw $zero, 0x2C($a0)
- srl $t2, $t1, 0x10
- trunc.w.s $f10, $f8
- mul.s $f8, $f6, $f4
- sll $t0, $t2, 0x10
- sw $zero, 0x30($a0)
- mfc1 $t3, $f10
- sw $zero, 0x34($a0)
- srl $t2, $t3, 0x10
- trunc.w.s $f10, $f8
- or $t0, $t0, $t2
- sw $t0, 0x18($a0)
- sll $t0, $t1, 0x10
- sll $t2, $t3, 0x10
- mfc1 $t1, $f10
- srl $t2, $t2, 0x10
- or $t0, $t0, $t2
- sw $t0, 0x38($a0)
- srl $t2, $t1, 0x10
- sll $t0, $t2, 0x10
- addiu $t0, $t0, 1
- sw $t0, 0x1C($a0)
- lui $t0, 1
- ori $t0, $t0, 0
- sw $t0, ($a0)
- sw $t0, 0x14($a0)
- lui $t0, (0x00000001 >> 16)
- ori $t0, (0x00000001 & 0xFFFF)
- sll $t2, $t1, 0x10
- sw $t2, 0x3C($a0)
- jr $ra
- sw $t0, 8($a0)
+ li.s ft0, 65536.0
+
+ mtc1 a1, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t1, ft3
+
+ mtc1 a2, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t3, ft3
+
+ srl t2, t1, 0x10
+ sll t0, t2, 0x10
+ srl t2, t3, 0x10
+ or t0, t0, t2
+ sw t0, 0x18(a0)
+
+ sll t0, t1, 0x10
+ sll t2, t3, 0x10
+ srl t2, t2, 0x10
+ or t0, t0, t2
+ sw t0, 0x38(a0)
+
+ mtc1 a3, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t1, ft3
+
+ srl t2, t1, 0x10
+ sll t0, t2, 0x10
+ addiu t0, t0, 1
+ sw t0, 0x1C(a0)
+
+ sll t2, t1, 0x10
+ sw t2, 0x3C(a0)
+
+ sw zero, 0x00(a0)
+ sw zero, 0x04(a0)
+ sw zero, 0x08(a0)
+ sw zero, 0x0C(a0)
+ sw zero, 0x10(a0)
+ sw zero, 0x14(a0)
+ sw zero, 0x20(a0)
+ sw zero, 0x24(a0)
+ sw zero, 0x28(a0)
+ sw zero, 0x2C(a0)
+ sw zero, 0x30(a0)
+ sw zero, 0x34(a0)
+
+ lui t0, (0x00010000 >> 16)
+ ori t0, (0x00010000 & 0xFFFF)
+ sw t0, (a0)
+ sw t0, 0x14(a0)
+
+ lui t0, (0x00000001 >> 16)
+ ori t0, (0x00000001 & 0xFFFF)
+ sw t0, 8(a0)
+
+ jr ra
END(guTranslate)
diff --git a/src/libultra/os/exceptasm.s b/src/libultra/os/exceptasm.s
index 3c55d66ac8..cdadef1f7f 100644
--- a/src/libultra/os/exceptasm.s
+++ b/src/libultra/os/exceptasm.s
@@ -1,22 +1,24 @@
+#ifdef __GNUC__
+.set gp=64
+#endif
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
#include "ultra64/rcp.h"
+#include "ultra64/bcp.h"
#include "ultra64/message.h"
#include "ultra64/thread.h"
#include "ultra64/exception.h"
#include "ultra64/version.h"
-.set noat
-.set noreorder
-.set gp=64
+#define MESG(x) ((x) << 3)
-.section .data
-
-.balign 16
+.data
+.align 2
DATA(__osHwIntTable)
.word 0, 0
- .word 0, 0 // cart
+ .word 0, 0 /* cart */
.word 0, 0
.word 0, 0
.word 0, 0
@@ -26,9 +28,8 @@ DATA(__osPiIntTable)
.word 0, 0
ENDDATA(__osPiIntTable)
-.section .rodata
-
-.balign 16
+.rdata
+.align 2
__osIntOffTable:
.byte 0x00 /* redispatch */
@@ -75,215 +76,197 @@ __osIntTable:
.word IP7_Hdlr
.word counter
-.section .text
-
-.balign 16
+.text
/**
- * The exception preamble is copied to the exception vectors at
+ * The 16-byte exception preamble is copied to the exception vectors at
* UT_VEC, XUT_VEC, ECC_VEC, E_VEC, to direct execution to __osException
*/
LEAF(__osExceptionPreamble)
- lui $k0, %hi(__osException)
- addiu $k0, %lo(__osException)
- jr $k0
- nop
+ la k0, __osException
+ jr k0
END(__osExceptionPreamble)
LEAF(__osException)
- // Load scratch space for thread saving
- lui $k0, %hi(__osThreadSave)
- addiu $k0, %lo(__osThreadSave)
- // Save $at
- sd $at, THREAD_AT($k0)
- // Save sr
- mfc0 $k1, C0_SR
- sw $k1, THREAD_SR($k0)
- // Disable interrupts
- li $at, ~(SR_IE | SR_EXL)
- and $k1, $k1, $at
- mtc0 $k1, C0_SR
- // Save some temp registers for use in the following
- sd $t0, THREAD_T0($k0)
- sd $t1, THREAD_T1($k0)
- sd $t2, THREAD_T2($k0)
- // Mark FPU as unused
- sw $zero, THREAD_FP($k0)
- // Left over from misplaced ifdef, immediately overwritten on next instruction
- mfc0 $t0, C0_CAUSE
+.set noat
+ /* Load scratch space for thread saving */
+ la k0, __osThreadSave
+ /* Save at */
+ sd AT, THREAD_AT(k0)
+.set at
+ /* Save sr */
+ MFC0( k1, C0_SR)
+ sw k1, THREAD_SR(k0)
+ /* Disable interrupts */
+ and k1, k1, ~(SR_IE | SR_EXL)
+ MTC0( k1, C0_SR)
+ /* Save some temp registers for use in the following */
+ sd t0, THREAD_T0(k0)
+ sd t1, THREAD_T1(k0)
+ sd t2, THREAD_T2(k0)
+ /* Mark FPU as unused */
+ sw zero, THREAD_FP(k0)
+ /* Left over from misplaced ifdef, immediately overwritten on next instruction */
+ MFC0( t0, C0_CAUSE)
savecontext:
- // Save the previously running thread's context to be restored when it resumes
- move $t0, $k0
- lui $k0, %hi(__osRunningThread)
- lw $k0, %lo(__osRunningThread)($k0)
- ld $t1, THREAD_AT($t0)
- sd $t1, THREAD_AT($k0)
- ld $t1, THREAD_SR($t0)
- sd $t1, THREAD_SR($k0)
- ld $t1, THREAD_T0($t0)
- sd $t1, THREAD_T0($k0)
- ld $t1, THREAD_T1($t0)
- sd $t1, THREAD_T1($k0)
- ld $t1, THREAD_T2($t0)
- sd $t1, THREAD_T2($k0)
- lw $k1, THREAD_SR($k0)
- mflo $t0
- sd $t0, THREAD_LO($k0)
- mfhi $t0
- andi $t1, $k1, SR_IMASK
- sd $v0, THREAD_V0($k0)
- sd $v1, THREAD_V1($k0)
- sd $a0, THREAD_A0($k0)
- sd $a1, THREAD_A1($k0)
- sd $a2, THREAD_A2($k0)
- sd $a3, THREAD_A3($k0)
- sd $t3, THREAD_T3($k0)
- sd $t4, THREAD_T4($k0)
- sd $t5, THREAD_T5($k0)
- sd $t6, THREAD_T6($k0)
- sd $t7, THREAD_T7($k0)
- sd $s0, THREAD_S0($k0)
- sd $s1, THREAD_S1($k0)
- sd $s2, THREAD_S2($k0)
- sd $s3, THREAD_S3($k0)
- sd $s4, THREAD_S4($k0)
- sd $s5, THREAD_S5($k0)
- sd $s6, THREAD_S6($k0)
- sd $s7, THREAD_S7($k0)
- sd $t8, THREAD_T8($k0)
- sd $t9, THREAD_T9($k0)
- sd $gp, THREAD_GP($k0)
- sd $sp, THREAD_SP($k0)
- sd $fp, THREAD_S8($k0)
- sd $ra, THREAD_RA($k0)
- beqz $t1, savercp
- sd $t0, THREAD_HI($k0)
- // If any CPU interrupts are enabled in the previous thread's SR, bitwise-OR in the
- // disabled CPU interrupts from the global interrupt mask.
- // This is an attempt at reverting the effect of masking the thread's SR with the
- // global interrupt mask. This is however broken, see comments for osSetIntMask.
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, ($t0)
- li $at, ~0
- xor $t2, $t0, $at
- lui $at, ((~SR_IMASK) >> 0x10) & 0xFFFF
- andi $t2, $t2, SR_IMASK
- ori $at, (~SR_IMASK) & 0xFFFF
- or $t4, $t1, $t2
- and $t3, $k1, $at
- andi $t0, $t0, SR_IMASK
- or $t3, $t3, $t4
- and $t1, $t1, $t0
- and $k1, $k1, $at
- sw $t3, THREAD_SR($k0)
- or $k1, $k1, $t1
+.set noreorder
+ /* Save the previously running thread's context to be restored when it resumes */
+ move t0, k0
+ lw k0, __osRunningThread
+ ld t1, THREAD_AT(t0)
+ sd t1, THREAD_AT(k0)
+ ld t1, THREAD_SR(t0)
+ sd t1, THREAD_SR(k0)
+ ld t1, THREAD_T0(t0)
+ sd t1, THREAD_T0(k0)
+ ld t1, THREAD_T1(t0)
+ sd t1, THREAD_T1(k0)
+ ld t1, THREAD_T2(t0)
+ sd t1, THREAD_T2(k0)
+.set reorder
+ sd $2, THREAD_V0(k0)
+ sd $3, THREAD_V1(k0)
+ sd $4, THREAD_A0(k0)
+ sd $5, THREAD_A1(k0)
+ sd $6, THREAD_A2(k0)
+ sd $7, THREAD_A3(k0)
+ sd $11, THREAD_T3(k0)
+ sd $12, THREAD_T4(k0)
+ sd $13, THREAD_T5(k0)
+ sd $14, THREAD_T6(k0)
+ sd $15, THREAD_T7(k0)
+ sd $16, THREAD_S0(k0)
+ sd $17, THREAD_S1(k0)
+ sd $18, THREAD_S2(k0)
+ sd $19, THREAD_S3(k0)
+ sd $20, THREAD_S4(k0)
+ sd $21, THREAD_S5(k0)
+ sd $22, THREAD_S6(k0)
+ sd $23, THREAD_S7(k0)
+ sd $24, THREAD_T8(k0)
+ sd $25, THREAD_T9(k0)
+ sd $28, THREAD_GP(k0)
+ sd $29, THREAD_SP(k0)
+ sd $30, THREAD_S8(k0)
+ sd $31, THREAD_RA(k0)
+ mflo t0
+ sd t0, THREAD_LO(k0)
+ mfhi t0
+ sd t0, THREAD_HI(k0)
+ lw k1, THREAD_SR(k0)
+ andi t1, k1, SR_IMASK
+ beqz t1, savercp
+ /* If any CPU interrupts are enabled in the previous thread's SR, bitwise-OR in the */
+ /* disabled CPU interrupts from the global interrupt mask. */
+ /* This is an attempt at reverting the effect of masking the thread's SR with the */
+ /* global interrupt mask. This is however broken, see comments for osSetIntMask. */
+ la t0, __OSGlobalIntMask
+ lw t0, (t0)
+ xor t2, t0, 0xFFFFFFFF
+ andi t2, t2, SR_IMASK
+ or t4, t1, t2
+ and t3, k1, ~SR_IMASK
+ or t3, t3, t4
+ sw t3, THREAD_SR(k0)
+ andi t0, t0, SR_IMASK
+ and t1, t1, t0
+ and k1, k1, ~SR_IMASK
+ or k1, k1, t1
savercp:
- // Save the currently masked RCP interrupts.
- lui $t1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- lw $t1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t1)
- beqz $t1, endrcp
- nop
- // Similar to the above comment, but for RCP interrupt enable bits rather than CPU.
- // This suffers from the same problem as above.
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, ($t0)
- lw $t4, THREAD_RCP($k0)
- li $at, ~0
- srl $t0, $t0, RCP_IMASKSHIFT
- xor $t0, $t0, $at
- andi $t0, $t0, (RCP_IMASK >> RCP_IMASKSHIFT)
- and $t0, $t0, $t4
- or $t1, $t1, $t0
+ /* Save the currently masked RCP interrupts. */
+ lw t1, PHYS_TO_K1(MI_INTR_MASK_REG)
+ beqz t1, endrcp
+ /* Similar to the above comment, but for RCP interrupt enable bits rather than CPU. */
+ /* This suffers from the same problem as above. */
+ la t0, __OSGlobalIntMask
+ lw t0, (t0)
+ srl t0, t0, RCP_IMASKSHIFT
+ xor t0, t0, 0xFFFFFFFF
+ andi t0, t0, (RCP_IMASK >> RCP_IMASKSHIFT)
+ lw t4, THREAD_RCP(k0)
+ and t0, t0, t4
+ or t1, t1, t0
endrcp:
- sw $t1, THREAD_RCP($k0)
- mfc0 $t0, C0_EPC
- sw $t0, THREAD_PC($k0)
- lw $t0, THREAD_FP($k0)
- beqz $t0, handle_interrupt
- nop
- // Save FP Registers if FPU was used by the thread
- cfc1 $t0, C1_FPCSR
+ sw t1, THREAD_RCP(k0)
+ MFC0( t0, C0_EPC)
+ sw t0, THREAD_PC(k0)
+ lw t0, THREAD_FP(k0)
+ beqz t0, handle_interrupt
+ /* Save FP Registers if FPU was used by the thread */
+.set noreorder
+ cfc1 t0, C1_FPCSR
nop
- sw $t0, THREAD_FPCSR($k0)
- sdc1 $f0, THREAD_FP0($k0)
- sdc1 $f2, THREAD_FP2($k0)
- sdc1 $f4, THREAD_FP4($k0)
- sdc1 $f6, THREAD_FP6($k0)
- sdc1 $f8, THREAD_FP8($k0)
- sdc1 $f10, THREAD_FP10($k0)
- sdc1 $f12, THREAD_FP12($k0)
- sdc1 $f14, THREAD_FP14($k0)
- sdc1 $f16, THREAD_FP16($k0)
- sdc1 $f18, THREAD_FP18($k0)
- sdc1 $f20, THREAD_FP20($k0)
- sdc1 $f22, THREAD_FP22($k0)
- sdc1 $f24, THREAD_FP24($k0)
- sdc1 $f26, THREAD_FP26($k0)
- sdc1 $f28, THREAD_FP28($k0)
- sdc1 $f30, THREAD_FP30($k0)
+ sw t0, THREAD_FPCSR(k0)
+.set reorder
+ sdc1 $f0, THREAD_FP0(k0)
+ sdc1 $f2, THREAD_FP2(k0)
+ sdc1 $f4, THREAD_FP4(k0)
+ sdc1 $f6, THREAD_FP6(k0)
+ sdc1 $f8, THREAD_FP8(k0)
+ sdc1 $f10, THREAD_FP10(k0)
+ sdc1 $f12, THREAD_FP12(k0)
+ sdc1 $f14, THREAD_FP14(k0)
+ sdc1 $f16, THREAD_FP16(k0)
+ sdc1 $f18, THREAD_FP18(k0)
+ sdc1 $f20, THREAD_FP20(k0)
+ sdc1 $f22, THREAD_FP22(k0)
+ sdc1 $f24, THREAD_FP24(k0)
+ sdc1 $f26, THREAD_FP26(k0)
+ sdc1 $f28, THREAD_FP28(k0)
+ sdc1 $f30, THREAD_FP30(k0)
handle_interrupt:
- // Determine the cause of the exception or interrupt and
- // enter appropriate handling routine
- mfc0 $t0, C0_CAUSE
- sw $t0, THREAD_CAUSE($k0)
- li $t1, OS_STATE_RUNNABLE
- sh $t1, THREAD_STATE($k0)
- andi $t1, $t0, CAUSE_EXCMASK
- // Test for break exception
- li $t2, EXC_BREAK
- beq $t1, $t2, handle_break
- nop
- // Test for CpU (coprocessor unusable) exception
- li $t2, EXC_CPU
- beq $t1, $t2, handle_CpU
- nop
- // Test for interrupt, if it's not an interrupt, panic
- li $t2, EXC_INT
- bne $t1, $t2, panic
- nop
- and $s0, $k1, $t0
+ /* Determine the cause of the exception or interrupt and */
+ /* enter appropriate handling routine */
+ MFC0( t0, C0_CAUSE)
+ sw t0, THREAD_CAUSE(k0)
+label:
+ li t1, OS_STATE_RUNNABLE
+ sh t1, THREAD_STATE(k0)
+ andi t1, t0, CAUSE_EXCMASK
+ /* Test for break exception */
+ li t2, EXC_BREAK
+ beq t1, t2, handle_break
+ /* Test for CpU (coprocessor unusable) exception */
+ li t2, EXC_CPU
+ beq t1, t2, handle_CpU
+ /* Test for interrupt, if it's not an interrupt, panic */
+ li t2, EXC_INT
+ bne t1, t2, panic
+
+ and s0, k1, t0
next_interrupt:
- // Handle external interrupt causes, using a jump table
- // to enter into the appropriate handler
- andi $t1, $s0, CAUSE_IPMASK
- srl $t2, $t1, CAUSE_IPSHIFT + 4
- bnez $t2, 1f
- nop
- srl $t2, $t1, CAUSE_IPSHIFT
- addi $t2, $t2, 0x10
+ /* Handle external interrupt causes, using a jump table */
+ /* to enter into the appropriate handler */
+ andi t1, s0, CAUSE_IPMASK
+ srl t2, t1, CAUSE_IPSHIFT + 4
+ bnez t2, 1f
+
+ srl t2, t1, CAUSE_IPSHIFT
+ addi t2, t2, 0x10
1:
- lui $at, %hi(__osIntOffTable)
- addu $at, $at, $t2
- lbu $t2, %lo(__osIntOffTable)($at)
- lui $at, %hi(__osIntTable)
- addu $at, $at, $t2
- lw $t2, %lo(__osIntTable)($at)
- jr $t2
- nop
+ lbu t2, __osIntOffTable(t2)
+ lw t2, __osIntTable(t2)
+ jr t2
/**
* IP6 Interrupt
* Only signalled by development hardware
*/
IP6_Hdlr:
- // Mask out interrupt and continue
- li $at, ~CAUSE_IP6
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_IP6
b next_interrupt
- and $s0, $s0, $at
/**
* IP7 Interrupt
* Only signalled by development hardware
*/
IP7_Hdlr:
- // Mask out interrupt and continue
- li $at, ~CAUSE_IP7
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_IP7
b next_interrupt
- and $s0, $s0, $at
/**
* IP8/Counter Interrupt
@@ -291,435 +274,473 @@ IP7_Hdlr:
* cop0 compare register, this interrupt is triggered
*/
counter:
- mfc0 $t1, C0_COMPARE
- mtc0 $t1, C0_COMPARE
- // Post counter message
+ MFC0( t1, C0_COMPARE)
+ MTC0( t1, C0_COMPARE)
+ /* Post counter message */
+ li a0, MESG(OS_EVENT_COUNTER)
jal send_mesg
- li $a0, OS_EVENT_COUNTER*8
- // Mask out interrupt and continue
- li $at, ~CAUSE_IP8
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_IP8
b next_interrupt
- and $s0, $s0, $at
/**
- * IP4/Cartridge Interrupt
- * Signalled by the N64 Disk Drive
+ * N64:
+ * IP4/Cartridge Interrupt
+ * Signalled by the N64 Disk Drive
+ * iQue:
+ * IP4/BCP Interrupt
+ * New RCP Interrupts
*/
cart:
- // Load cart callback set by __osSetHWIntrRoutine
- lui $t1, %hi(__osHwIntTable)
- addiu $t1, %lo(__osHwIntTable)
- lw $t2, (OS_INTR_CART*HWINT_SIZE+HWINT_CALLBACK)($t1)
- // Mask out interrupt
- li $at, ~CAUSE_IP4
- and $s0, $s0, $at
- // If the callback is NULL, handling is done
- beqz $t2, send_cart_mesg
- addi $t1, $t1, (OS_INTR_CART*HWINT_SIZE)
- // Set up a stack and run the callback
- jalr $t2
- lw $sp, HWINT_SP($t1)
- beqz $v0, send_cart_mesg
- nop
- // Redispatch immediately if the callback returned nonzero
+ /* Mask out interrupt */
+ and s0, s0, ~CAUSE_IP4
+ /* Load cart callback set by __osSetHWIntrRoutine */
+ la t1, __osHwIntTable
+ addi t1, t1, (OS_INTR_CART * HWINT_SIZE)
+ lw t2, HWINT_CALLBACK(t1)
+ /* If the callback is NULL, handling is done */
+ beqz t2, 1f
+ /* Set up a stack and run the callback */
+ lw sp, HWINT_SP(t1)
+ jalr t2
+ beqz v0, 1f
+ /* Redispatch immediately if the callback returned nonzero */
b redispatch
- nop
-send_cart_mesg:
- // Post a cart event message
+1:
+#ifndef BBPLAYER
+ /* Post a cart event message */
+ li a0, MESG(OS_EVENT_CART)
jal send_mesg
- li $a0, OS_EVENT_CART*8
- // Continue
+#else
+ /* On the iQue Player the CART interrupt no longer exists. New RCP interrupts are vectored here */
+ lw s1, PHYS_TO_K1(MI_EX_INTR_REG)
+
+flash:
+ /* Check for FLASH interrupt */
+ andi t1, s1, MI_EX_INTR_FLASH
+ beqz t1, flashx
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_FLASH
+ /* Clear it */
+ li t1, 0
+ sw t1, PHYS_TO_K1(PI_NAND_CTRL_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_FLASH)
+ jal send_mesg
+flashx:
+md:
+ /* Check for MD interrupt */
+ andi t1, s1, MI_EX_INTR_MD
+ beqz t1, mdx
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_MD
+ /* Clear it */
+ li t1, MI_EX_INTR_CLR_MD
+ sw t1, PHYS_TO_K1(MI_EX_INTR_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_MD)
+ jal send_mesg
+mdx:
+aes:
+ /* Check for AES interrupt */
+ andi t1, s1, MI_EX_INTR_AES
+ beqz t1, aesx
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_AES
+ /* Disable the interrupt, this does not clear it.
+ * The responsibility of clearing and re-enabling
+ * the interrupt is left to the handler. */
+ li t1, MI_EX_INTR_MASK_CLR_AES
+ sw t1, PHYS_TO_K1(MI_EX_INTR_MASK_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_AES)
+ jal send_mesg
+aesx:
+ide:
+ /* Check for IDE interrupt */
+ andi t1, s1, MI_EX_INTR_IDE
+ beqz t1, idex
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_IDE
+ /* Disable the interrupt, this does not clear it.
+ * The responsibility of clearing and re-enabling
+ * the interrupt is left to the handler. */
+ li t1, MI_EX_INTR_MASK_CLR_IDE
+ sw t1, PHYS_TO_K1(MI_EX_INTR_MASK_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_IDE)
+ jal send_mesg
+idex:
+pi_err:
+ /* Check for PI_ERR Interrupt */
+ andi t1, s1, MI_EX_INTR_PI_ERR
+ beqz t1, pi_errx
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_PI_ERR
+ /* Disable the interrupt, this does not clear it.
+ * The responsibility of clearing and re-enabling
+ * the interrupt is left to the handler. */
+ li t1, MI_EX_INTR_MASK_CLR_PI_ERR
+ sw t1, PHYS_TO_K1(MI_EX_INTR_MASK_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_PI_ERR)
+ jal send_mesg
+pi_errx:
+usb0:
+ /* Check for USB0 Interrupt */
+ andi t1, s1, MI_EX_INTR_USB0
+ beqz t1, usb0x
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_USB0
+ /* Disable the interrupt, this does not clear it.
+ * The responsibility of clearing and re-enabling
+ * the interrupt is left to the handler. */
+ li t1, MI_EX_INTR_MASK_CLR_USB0
+ sw t1, PHYS_TO_K1(MI_EX_INTR_MASK_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_USB0)
+ jal send_mesg
+usb0x:
+usb1:
+ /* Check for USB1 Interrupt */
+ andi t1, s1, MI_EX_INTR_USB1
+ beqz t1, usb1x
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_USB1
+ /* Disable the interrupt, this does not clear it.
+ * The responsibility of clearing and re-enabling
+ * the interrupt is left to the handler. */
+ li t1, MI_EX_INTR_MASK_CLR_USB1
+ sw t1, PHYS_TO_K1(MI_EX_INTR_MASK_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_USB1)
+ jal send_mesg
+usb1x:
+#endif
+ /* Continue */
b next_interrupt
- nop
/**
* IP3/RCP Interrupt
* Signalled by the RCP for various reasons, described below
*/
rcp:
- // Load the MI interrupts and mask with the RCP bits in the global interrupt mask
- //! @bug this clobbers the t0 register which is expected to hold the value of the
- //! C0_CAUSE register in the sw1 and sw2 handlers. If the sw1 or sw2 handler runs
- //! after this, the interrupt will not be cleared properly.
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, ($t0)
- lui $s1, %hi(PHYS_TO_K1(MI_INTR_REG))
- lw $s1, %lo(PHYS_TO_K1(MI_INTR_REG))($s1)
- srl $t0, $t0, RCP_IMASKSHIFT
- and $s1, $s1, $t0
+ /* Load the MI interrupts and mask with the RCP bits in the global interrupt mask */
+ /*! @bug this clobbers the t0 register which is expected to hold the value of the */
+ /*! C0_CAUSE register in the sw1 and sw2 handlers. If the sw1 or sw2 handler runs */
+ /*! after this, the interrupt will not be cleared properly. */
+ lw s1, PHYS_TO_K1(MI_INTR_REG)
+ la t0, __OSGlobalIntMask
+ lw t0, (t0)
+ srl t0, t0, RCP_IMASKSHIFT
+ and s1, s1, t0
/**
* Signal Processor (SP) Interrupt
*/
-sp:
- // Test for sp interrupt
- andi $t1, $s1, MI_INTR_SP
- beqz $t1, vi
- nop
- // Test for yielded or done signals in particular
- lui $t4, %hi(PHYS_TO_K1(SP_STATUS_REG))
- lw $t4, %lo(PHYS_TO_K1(SP_STATUS_REG))($t4)
- li $t1, (SP_CLR_INTR | SP_CLR_SIG3)
- lui $at, %hi(PHYS_TO_K1(SP_STATUS_REG))
- andi $t4, $t4, (SP_STATUS_YIELDED | SP_STATUS_TASKDONE)
- // Mask out SP interrupt
- andi $s1, $s1, (MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
- beqz $t4, sp_other_break
- // Clear interrupt and signal 3
- sw $t1, %lo(PHYS_TO_K1(SP_STATUS_REG))($at)
- // Post an SP event message
+ /* Test for sp interrupt */
+ andi t1, s1, MI_INTR_SP
+ beqz t1, vi
+ /* Mask out SP interrupt */
+ andi s1, s1, (MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
+ lw t4, PHYS_TO_K1(SP_STATUS_REG)
+ /* Clear interrupt and signal 3 */
+ li t1, (SP_CLR_INTR | SP_CLR_SIG3)
+ sw t1, PHYS_TO_K1(SP_STATUS_REG)
+ /* Test for yielded or done signals in particular */
+ andi t4, t4, (SP_STATUS_YIELDED | SP_STATUS_TASKDONE)
+ beqz t4, sp_other_break
+ /* Post an SP event message */
+ li a0, MESG(OS_EVENT_SP)
jal send_mesg
- li $a0, OS_EVENT_SP*8
- beqz $s1, NoMoreRcpInts
- nop
- // Step over sp_other_break handler
+ beqz s1, NoMoreRcpInts
+ /* Step over sp_other_break handler */
b vi
- nop
sp_other_break:
- // An sp signal that is not due to yielding or task completion, such as
- // an sp breakpoint. Post a different event message
+ /* An sp signal that is not due to yielding or task completion, such as */
+ /* an sp breakpoint. Post a different event message */
+ li a0, MESG(OS_EVENT_SP_BREAK)
jal send_mesg
- li $a0, OS_EVENT_SP_BREAK*8
- beqz $s1, NoMoreRcpInts
- nop
+ beqz s1, NoMoreRcpInts
/**
* Video Interface (VI) Interrupt
*/
vi:
- // Test for vi interrupt
- andi $t1, $s1, MI_INTR_VI
- beqz $t1, ai
- lui $at, %hi(PHYS_TO_K1(VI_CURRENT_REG))
- // Mask out vi interrupt
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_PI | MI_INTR_DP)
- // Clear interrupt
- sw $zero, %lo(PHYS_TO_K1(VI_CURRENT_REG))($at)
- // Post vi event message
+ /* Test for vi interrupt */
+ andi t1, s1, MI_INTR_VI
+ beqz t1, ai
+ /* Mask out vi interrupt */
+ andi s1, s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_PI | MI_INTR_DP)
+ /* Clear interrupt */
+ sw zero, PHYS_TO_K1(VI_CURRENT_REG)
+ /* Post vi event message */
+ li a0, MESG(OS_EVENT_VI)
jal send_mesg
- li $a0, OS_EVENT_VI*8
- beqz $s1, NoMoreRcpInts
- nop
+ beqz s1, NoMoreRcpInts
/**
* Audio Interface (AI) Interrupt
*/
ai:
- // Test for ai interrupt
- andi $t1, $s1, MI_INTR_AI
- beqz $t1, si
- nop
- li $t1, 1
- lui $at, %hi(PHYS_TO_K1(AI_STATUS_REG))
- // Mask out ai interrupt
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
- // Clear interrupt
- sw $t1, %lo(PHYS_TO_K1(AI_STATUS_REG))($at)
- // Post ai event message
+ /* Test for ai interrupt */
+ andi t1, s1, MI_INTR_AI
+ beqz t1, si
+
+ /* Mask out ai interrupt */
+ andi s1, s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
+ /* Clear interrupt */
+ li t1, 1
+ sw t1, PHYS_TO_K1(AI_STATUS_REG)
+ /* Post ai event message */
+ li a0, MESG(OS_EVENT_AI)
jal send_mesg
- li $a0, OS_EVENT_AI*8
- beqz $s1, NoMoreRcpInts
- nop
+ beqz s1, NoMoreRcpInts
/**
* Serial Interface (SI) Interrupt
*/
si:
- // Test for si interrupt
- andi $t1, $s1, MI_INTR_SI
- beqz $t1, pi
- lui $at, %hi(PHYS_TO_K1(SI_STATUS_REG))
- // Mask out si interrupt
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
- // Clear interrupt
- sw $zero, %lo(PHYS_TO_K1(SI_STATUS_REG))($at)
- // Post si event message
+ /* Test for si interrupt */
+ andi t1, s1, MI_INTR_SI
+ beqz t1, pi
+
+ /* Mask out si interrupt */
+ andi s1, s1, (MI_INTR_SP | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
+ /* Clear interrupt */
+ sw zero, PHYS_TO_K1(SI_STATUS_REG)
+ /* Post si event message */
+ li a0, MESG(OS_EVENT_SI)
jal send_mesg
- li $a0, OS_EVENT_SI*8
- beqz $s1, NoMoreRcpInts
- nop
+ beqz s1, NoMoreRcpInts
/**
* Parallel Interface (PI) Interrupt
*/
pi:
- // Test for pi interrupt
- andi $t1, $s1, MI_INTR_PI
- beqz $t1, dp
- nop
-#if LIBULTRA_VERSION < LIBULTRA_VERSION_J
- // Clear interrupt and mask out pi interrupt
- li $t1, PI_STATUS_CLR_INTR
- lui $at, %hi(PHYS_TO_K1(PI_STATUS_REG))
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_DP)
- sw $t1, %lo(PHYS_TO_K1(PI_STATUS_REG))($at)
-#else
- // Clear interrupt
- li $t1, PI_STATUS_CLR_INTR
- lui $at, %hi(PHYS_TO_K1(PI_STATUS_REG))
- sw $t1, %lo(PHYS_TO_K1(PI_STATUS_REG))($at)
- // Load pi callback
- lui $t1, %hi(__osPiIntTable)
- addiu $t1, %lo(__osPiIntTable)
- lw $t2, HWINT_CALLBACK($t1)
- // Mask out pi interrupt
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_DP)
- // Skip callback if NULL
- beqz $t2, no_pi_callback
- nop
- // Set up a stack and run the callback
- lw $sp, HWINT_SP($t1)
- jalr $t2
- move $a0, $v0
- // If the callback returns non-zero, don't post a pi event message
- bnez $v0, skip_pi_mesg
- nop
+ /* Test for pi interrupt */
+ andi t1, s1, MI_INTR_PI
+ beqz t1, dp
+
+ /* Mask out pi interrupt */
+ andi s1, s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_DP)
+ /* Clear the interrupt */
+ li t1, PI_STATUS_CLR_INTR
+ sw t1, PHYS_TO_K1(PI_STATUS_REG)
+#if LIBULTRA_VERSION >= LIBULTRA_VERSION_J
+ /* Load pi callback */
+ la t1, __osPiIntTable
+ lw t2, HWINT_CALLBACK(t1)
+ /* Skip callback if NULL */
+ beqz t2, no_pi_callback
+ /* Set up a stack and run the callback */
+ lw sp, HWINT_SP(t1)
+ move a0, v0
+ jalr t2
+ /* If the callback returns non-zero, don't post a pi event message */
+ bnez v0, skip_pi_mesg
#endif
no_pi_callback:
- // Post pi event message
+ /* Post pi event message */
+ li a0, MESG(OS_EVENT_PI)
jal send_mesg
- li $a0, OS_EVENT_PI*8
skip_pi_mesg:
- beqz $s1, NoMoreRcpInts
- nop
+ beqz s1, NoMoreRcpInts
/**
* Display Processor (DP) Interrupt
*/
dp:
- // Test for dp interrupt
- andi $t1, $s1, MI_INTR_DP
- beqz $t1, NoMoreRcpInts
- nop
- // Clear dp interrupt
- li $t1, MI_CLR_DP_INTR
- lui $at, %hi(PHYS_TO_K1(MI_INIT_MODE_REG))
- // Mask out dp interrupt
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI)
- sw $t1, %lo(PHYS_TO_K1(MI_INIT_MODE_REG))($at)
- // Post dp event message
+ /* Test for dp interrupt */
+ andi t1, s1, MI_INTR_DP
+ beqz t1, NoMoreRcpInts
+
+ /* Mask out dp interrupt */
+ andi s1, s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI)
+ /* Clear dp interrupt */
+ li t1, MI_CLR_DP_INTR
+ sw t1, PHYS_TO_K1(MI_INIT_MODE_REG)
+ /* Post dp event message */
+ li a0, MESG(OS_EVENT_DP)
jal send_mesg
- li $a0, OS_EVENT_DP*8
NoMoreRcpInts:
- // Mask out interrupt and continue
- li $at, ~CAUSE_IP3
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_IP3
b next_interrupt
- and $s0, $s0, $at
/**
* IP5/PreNMI Interrupt
* Reset button has been pressed
*/
prenmi:
- // Disable IP5/PreNMI interrupt for the previously running thread
- lw $k1, THREAD_SR($k0)
- li $at, ~SR_IBIT5
- lui $t1, %hi(__osShutdown)
- and $k1, $k1, $at
- sw $k1, THREAD_SR($k0)
- addiu $t1, %lo(__osShutdown)
- // Test __osShutdown for first PreNMI event
- lw $t2, ($t1)
- beqz $t2, firstnmi
- li $at, ~CAUSE_IP5
- // Mask out interrupt and redispatch immediately
+ /* Disable IP5/PreNMI interrupt for the previously running thread */
+ lw k1, THREAD_SR(k0)
+ and k1, k1, ~SR_IBIT5
+ sw k1, THREAD_SR(k0)
+ /* Test __osShutdown for first PreNMI event */
+ la t1, __osShutdown
+ lw t2, (t1)
+ beqz t2, firstnmi
+ /* Mask out interrupt and redispatch immediately */
+ and s0, s0, ~CAUSE_IP5
b redispatch
- and $s0, $s0, $at
firstnmi:
- // Set __osShutdown
- li $t2, 1
- sw $t2, ($t1)
- // Post a PreNMI event message
+ /* Set __osShutdown */
+ li t2, 1
+ sw t2, (t1)
+ /* Post a PreNMI event message */
+ li a0, MESG(OS_EVENT_PRENMI)
jal send_mesg
- li $a0, OS_EVENT_PRENMI*8
- // Mask out and disable IP5/PreNMI interrupt for the highest priority thread
- lui $t2, %hi(__osRunQueue)
- lw $t2, %lo(__osRunQueue)($t2)
- li $at, ~SR_IBIT5
- and $s0, $s0, $at
- lw $k1, THREAD_SR($t2)
- and $k1, $k1, $at
- // Redispatch immediately
+ /* Mask out and disable IP5/PreNMI interrupt for the highest priority thread */
+ and s0, s0, ~SR_IBIT5
+ lw t2, __osRunQueue
+ lw k1, THREAD_SR(t2)
+ and k1, k1, ~SR_IBIT5
+ sw k1, THREAD_SR(t2)
+ /* Redispatch immediately */
b redispatch
- sw $k1, THREAD_SR($t2)
sw2:
- // Mask out interrupt
- li $at, ~CAUSE_SW2
- and $t0, $t0, $at
- mtc0 $t0, C0_CAUSE
- // Post sw2 event message
+ /* Mask out interrupt */
+ and t0, t0, ~CAUSE_SW2
+ MTC0( t0, C0_CAUSE)
+ /* Post sw2 event message */
+ li a0, MESG(OS_EVENT_SW2)
jal send_mesg
- li $a0, OS_EVENT_SW2*8
- li $at, ~CAUSE_SW2
- // Mask out interrupt and continue
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_SW2
b next_interrupt
- and $s0, $s0, $at
sw1:
- // Mask out interrupt
- li $at, ~CAUSE_SW1
- and $t0, $t0, $at
- mtc0 $t0, C0_CAUSE
- // Post sw1 event message
+ /* Mask out interrupt */
+ and t0, t0, ~CAUSE_SW1
+ MTC0( t0, C0_CAUSE)
+ /* Post sw1 event message */
+ li a0, MESG(OS_EVENT_SW1)
jal send_mesg
- li $a0, OS_EVENT_SW1*8
- li $at, ~CAUSE_SW1
- // Mask out interrupt and continue
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_SW1
b next_interrupt
- and $s0, $s0, $at
handle_break:
- // Set last thread as having hit a break exception
- li $t1, OS_FLAG_CPU_BREAK
- sh $t1, THREAD_FLAGS($k0)
- // Post a cpu break event message
+ /* Set last thread as having hit a break exception */
+ li t1, OS_FLAG_CPU_BREAK
+ sh t1, THREAD_FLAGS(k0)
+ /* Post a cpu break event message */
+ li a0, MESG(OS_EVENT_CPU_BREAK)
jal send_mesg
- li $a0, OS_EVENT_CPU_BREAK*8
- // Redispatch
+ /* Redispatch */
b redispatch
- nop
redispatch:
- lui $t2, %hi(__osRunQueue)
- lw $t2, %lo(__osRunQueue)($t2)
- // Get priority of previously running thread
- lw $t1, THREAD_PRI($k0)
- // Get highest priority from waiting threads
- lw $t3, THREAD_PRI($t2)
- slt $at, $t1, $t3
- beqz $at, enqueueRunning
- nop
- // The previously running thread is no longer the highest priority,
- // enqueue it to the run queue to wait its turn again
- lui $a0, %hi(__osRunQueue)
- move $a1, $k0
+ /* Get priority of previously running thread */
+ lw t1, THREAD_PRI(k0)
+ lw t2, __osRunQueue
+ /* Get highest priority from waiting threads */
+ lw t3, THREAD_PRI(t2)
+ bge t1, t3, enqueueRunning
+ /* The previously running thread is no longer the highest priority, */
+ /* enqueue it to the run queue to wait its turn again */
+ move a1, k0
+ la a0, __osRunQueue
jal __osEnqueueThread
- addiu $a0, $a0, %lo(__osRunQueue)
+
j __osDispatchThread
- nop
/**
* Resume the previously running thread by placing it at the top of
* the run queue and dispatching it
*/
enqueueRunning:
- lui $t1, %hi(__osRunQueue)
- addiu $t1, $t1, %lo(__osRunQueue)
- lw $t2, ($t1)
- sw $t2, THREAD_NEXT($k0)
+ la t1, __osRunQueue
+ lw t2, (t1)
+ sw t2, THREAD_NEXT(k0)
+ sw k0, (t1)
j __osDispatchThread
- sw $k0, ($t1)
/**
* Unhandled exceptions & interrupts end up here,
* trap to software by posting a fault message
*/
panic:
- // Mark the thread as having faulted
- lui $at, %hi(__osFaultedThread)
- sw $k0, %lo(__osFaultedThread)($at)
- li $t1, OS_STATE_STOPPED
- sh $t1, THREAD_STATE($k0)
- li $t1, OS_FLAG_FAULT
- sh $t1, THREAD_FLAGS($k0)
- // Save C0_BADVADDR
- mfc0 $t2, C0_BADVADDR
- sw $t2, THREAD_BADVADDR($k0)
- // Post the fault message
+ /* Mark the thread as having faulted */
+ sw k0, __osFaultedThread
+ li t1, OS_STATE_STOPPED
+ sh t1, THREAD_STATE(k0)
+ li t1, OS_FLAG_FAULT
+ sh t1, THREAD_FLAGS(k0)
+ /* Save C0_BADVADDR */
+ MFC0( t2, C0_BADVADDR)
+ sw t2, THREAD_BADVADDR(k0)
+ /* Post the fault message */
+ li a0, MESG(OS_EVENT_FAULT)
jal send_mesg
- li $a0, OS_EVENT_FAULT*8
- // Dispatch next thread
+ /* Dispatch next thread */
j __osDispatchThread
- nop
/**
* Handles posting event messages to the listening message queue, if there is one
*/
send_mesg:
- // Load pointer to listening message queue
- lui $t2, %hi(__osEventStateTab)
- addiu $t2, %lo(__osEventStateTab)
- addu $t2, $t2, $a0
- lw $t1, ($t2)
- // Save return address
- move $s2, $ra
- // If there is no listening message queue, done
- beqz $t1, send_done
- nop
- // Test if the message queue is full, if so don't post the message
- lw $t3, MQ_VALIDCOUNT($t1)
- lw $t4, MQ_MSGCOUNT($t1)
- slt $at, $t3, $t4
- beqz $at, send_done
- nop
- // Add validcount to first and modulo with msgcount
- lw $t5, MQ_FIRST($t1)
- addu $t5, $t5, $t3
- // Modulo
- div $zero, $t5, $t4
- bnez $t4, 1f
- nop
- break 7 // div0
-1:
- li $at, -1
- bne $t4, $at, 2f
- li $at, -0x80000000
- bne $t5, $at, 2f
- nop
- break 6 // overflow
-2:
- // End Modulo
- lw $t4, MQ_MSG($t1)
- mfhi $t5
- sll $t5, $t5, 2
- addu $t4, $t4, $t5
- // Fetch the message to post
- lw $t5, 4($t2)
- addiu $t2, $t3, 1
- // Post the message to the message queue
- sw $t5, ($t4)
- // Increment the validCount
- sw $t2, MQ_VALIDCOUNT($t1)
- // If there was a thread blocked on this message queue,
- // wake it up
- lw $t2, MQ_MTQUEUE($t1)
- lw $t3, ($t2)
- beqz $t3, send_done
- nop
+ /* Save return address */
+ move s2, ra
+ /* Load pointer to listening message queue */
+ la t2, __osEventStateTab
+ addu t2, t2, a0
+ lw t1, (t2)
+ /* If there is no listening message queue, done */
+ beqz t1, send_done
+
+ /* Test if the message queue is full, if so don't post the message */
+ lw t3, MQ_VALIDCOUNT(t1)
+ lw t4, MQ_MSGCOUNT(t1)
+ bge t3, t4, send_done
+
+ /* Add validcount to first and modulo with msgcount */
+ lw t5, MQ_FIRST(t1)
+ addu t5, t5, t3
+ rem t5, t5, t4
+ lw t4, MQ_MSG(t1)
+ mul t5, t5, 4
+ addu t4, t4, t5
+ /* Post the message to the message queue */
+ lw t5, 4(t2)
+ sw t5, (t4)
+ /* Increment the validCount */
+ addiu t2, t3, 1
+ sw t2, MQ_VALIDCOUNT(t1)
+ /* If there was a thread blocked on this message queue, */
+ /* wake it up */
+ lw t2, MQ_MTQUEUE(t1)
+ lw t3, (t2)
+ beqz t3, send_done
+ move a0, t1
jal __osPopThread
- move $a0, $t1
- move $t2, $v0
- lui $a0, %hi(__osRunQueue)
- move $a1, $t2
+ move t2, v0
+ move a1, t2
+ la a0, __osRunQueue
jal __osEnqueueThread
- addiu $a0, %lo(__osRunQueue)
send_done:
- jr $s2
- nop
+ jr s2
/**
* Handle coprocessor unusable exception
*/
handle_CpU:
- li $at, CAUSE_CEMASK
- and $t1, $t0, $at
- srl $t1, $t1, CAUSE_CESHIFT
- li $t2, 1 // if not coprocessor 1, panic
- bne $t1, $t2, panic
- nop
- // Mark cop1 as usable for previous thread
- lw $k1, THREAD_SR($k0)
- li $at, SR_CU1
- li $t1, 1
- or $k1, $k1, $at
- sw $t1, THREAD_FP($k0)
+ and t1, t0, CAUSE_CEMASK
+ srl t1, t1, CAUSE_CESHIFT
+ li t2, 1 /* if not coprocessor 1, panic */
+ bne t1, t2, panic
+ /* Mark cop1 as usable for previous thread */
+ li t1, 1
+ sw t1, THREAD_FP(k0)
+ lw k1, THREAD_SR(k0)
+ or k1, k1, SR_CU1
+ sw k1, THREAD_SR(k0)
b enqueueRunning
- sw $k1, THREAD_SR($k0)
END(__osException)
/**
@@ -731,83 +752,71 @@ END(__osException)
* unblocked runnable thread.
*/
LEAF(__osEnqueueAndYield)
- lui $a1, %hi(__osRunningThread)
- lw $a1, %lo(__osRunningThread)($a1)
- // Save SR
- mfc0 $t0, C0_SR
- lw $k1, THREAD_FP($a1)
- ori $t0, $t0, SR_EXL
- sw $t0, THREAD_SR($a1)
- // Save callee-saved registers
- sd $s0, THREAD_S0($a1)
- sd $s1, THREAD_S1($a1)
- sd $s2, THREAD_S2($a1)
- sd $s3, THREAD_S3($a1)
- sd $s4, THREAD_S4($a1)
- sd $s5, THREAD_S5($a1)
- sd $s6, THREAD_S6($a1)
- sd $s7, THREAD_S7($a1)
- sd $gp, THREAD_GP($a1)
- sd $sp, THREAD_SP($a1)
- sd $fp, THREAD_S8($a1)
- sd $ra, THREAD_RA($a1)
- // Save FPU callee-saved registers if the current thread has used the FPU
- beqz $k1, 1f
- sw $ra, THREAD_PC($a1)
- cfc1 $k1, C1_FPCSR
- sdc1 $f20, THREAD_FP20($a1)
- sdc1 $f22, THREAD_FP22($a1)
- sdc1 $f24, THREAD_FP24($a1)
- sdc1 $f26, THREAD_FP26($a1)
- sdc1 $f28, THREAD_FP28($a1)
- sdc1 $f30, THREAD_FP30($a1)
- sw $k1, THREAD_FPCSR($a1)
+ lw a1, __osRunningThread
+ /* Save SR */
+ MFC0( t0, C0_SR)
+ ori t0, t0, SR_EXL
+ sw t0, THREAD_SR(a1)
+ /* Save callee-saved registers */
+ sd s0, THREAD_S0(a1)
+ sd s1, THREAD_S1(a1)
+ sd s2, THREAD_S2(a1)
+ sd s3, THREAD_S3(a1)
+ sd s4, THREAD_S4(a1)
+ sd s5, THREAD_S5(a1)
+ sd s6, THREAD_S6(a1)
+ sd s7, THREAD_S7(a1)
+ sd gp, THREAD_GP(a1)
+ sd sp, THREAD_SP(a1)
+ sd fp, THREAD_S8(a1)
+ sd ra, THREAD_RA(a1)
+ sw ra, THREAD_PC(a1)
+ /* Save FPU callee-saved registers if the current thread has used the FPU */
+ lw k1, THREAD_FP(a1)
+ beqz k1, 1f
+ cfc1 k1, C1_FPCSR
+ sw k1, THREAD_FPCSR(a1)
+ sdc1 $f20, THREAD_FP20(a1)
+ sdc1 $f22, THREAD_FP22(a1)
+ sdc1 $f24, THREAD_FP24(a1)
+ sdc1 $f26, THREAD_FP26(a1)
+ sdc1 $f28, THREAD_FP28(a1)
+ sdc1 $f30, THREAD_FP30(a1)
1:
- lw $k1, THREAD_SR($a1)
- andi $t1, $k1, SR_IMASK
- beqz $t1, 2f
- nop
- // This code does the same thing as the block just above the `savercp` label.
- // See the comment there for more about this.
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, ($t0)
- li $at, ~0
- xor $t0, $t0, $at
- lui $at, ((~SR_IMASK) >> 0x10) & 0xFFFF
- andi $t0, $t0, SR_IMASK
- ori $at, (~SR_IMASK) & 0xFFFF
- or $t1, $t1, $t0
- and $k1, $k1, $at
- or $k1, $k1, $t1
- sw $k1, THREAD_SR($a1)
+ lw k1, THREAD_SR(a1)
+ andi t1, k1, SR_IMASK
+ beqz t1, 2f
+ /* This code does the same thing as the block just above the `savercp` label. */
+ /* See the comment there for more about this. */
+ la t0, __OSGlobalIntMask
+ lw t0, (t0)
+ xor t0, t0, 0xFFFFFFFF
+ andi t0, t0, SR_IMASK
+ or t1, t1, t0
+ and k1, k1, ~SR_IMASK
+ or k1, k1, t1
+ sw k1, THREAD_SR(a1)
2:
- lui $k1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- lw $k1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($k1)
- beqz $k1, 3f
- nop
- // This code does the same thing as the block just below the `savercp` label.
- // See the comment there for more about this.
- lui $k0, %hi(__OSGlobalIntMask)
- addiu $k0, %lo(__OSGlobalIntMask)
- lw $k0, ($k0)
- lw $t0, THREAD_RCP($a1)
- li $at, ~0
- srl $k0, $k0, RCP_IMASKSHIFT
- xor $k0, $k0, $at
- andi $k0, $k0, (RCP_IMASK >> RCP_IMASKSHIFT)
- and $k0, $k0, $t0
- or $k1, $k1, $k0
+ lw k1, PHYS_TO_K1(MI_INTR_MASK_REG)
+ beqz k1, 3f
+ /* This code does the same thing as the block just below the `savercp` label. */
+ /* See the comment there for more about this. */
+ la k0, __OSGlobalIntMask
+ lw k0, (k0)
+ srl k0, k0, RCP_IMASKSHIFT
+ xor k0, k0, 0xFFFFFFFF
+ andi k0, k0, (RCP_IMASK >> RCP_IMASKSHIFT)
+ lw t0, THREAD_RCP(a1)
+ and k0, k0, t0
+ or k1, k1, k0
3:
- // If the specified thread queue is null, skip
- // straight to dispatching
- beqz $a0, no_enqueue
- sw $k1, THREAD_RCP($a1)
+ /* If the specified thread queue is null, skip */
+ /* straight to dispatching */
+ sw k1, THREAD_RCP(a1)
+ beqz a0, no_enqueue
jal __osEnqueueThread
- nop
no_enqueue:
j __osDispatchThread
- nop
END(__osEnqueueAndYield)
/**
@@ -816,31 +825,27 @@ END(__osEnqueueAndYield)
* Enqueues `thread` to the thread queue `threadQueue`, inserted by priority
*/
LEAF(__osEnqueueThread)
- lw $t8, ($a0)
- lw $t7, THREAD_PRI($a1)
- move $t9, $a0
- lw $t6, THREAD_PRI($t8)
- slt $at, $t6, $t7
- // If the current highest priority thread is a lower priority than
- // the new thread, skip searching the queue
- bnez $at, 2f
- nop
+ move t9, a0
+ lw t8, (a0)
+ lw t7, THREAD_PRI(a1)
+ lw t6, THREAD_PRI(t8)
+ /* If the current highest priority thread is a lower priority than */
+ /* the new thread, skip searching the queue */
+ blt t6, t7, 2f
1:
- // Search the queue for the position to insert the thread to maintain
- // ordering by priority
- move $t9, $t8
- lw $t8, THREAD_NEXT($t8)
- lw $t6, THREAD_PRI($t8)
- slt $at, $t6, $t7
- beqz $at, 1b
- nop
+ /* Search the queue for the position to insert the thread to maintain */
+ /* ordering by priority */
+ move t9, t8
+ lw t8, THREAD_NEXT(t8)
+ lw t6, THREAD_PRI(t8)
+ bge t6, t7, 1b
2:
- // Insert the thread into the queue
- lw $t8, ($t9)
- sw $t8, THREAD_NEXT($a1)
- sw $a1, ($t9)
- jr $ra
- sw $a0, THREAD_QUEUE($a1)
+ /* Insert the thread into the queue */
+ lw t8, (t9)
+ sw t8, THREAD_NEXT(a1)
+ sw a1, (t9)
+ sw a0, THREAD_QUEUE(a1)
+ jr ra
END(__osEnqueueThread)
/**
@@ -850,16 +855,15 @@ END(__osEnqueueThread)
* thread queue `threadQueue` and returns it
*/
LEAF(__osPopThread)
- lw $v0, ($a0)
- lw $t9, THREAD_NEXT($v0)
- jr $ra
- sw $t9, ($a0)
+ lw v0, (a0)
+ lw t9, THREAD_NEXT(v0)
+ sw t9, (a0)
+ jr ra
END(__osPopThread)
#if LIBULTRA_VERSION >= LIBULTRA_VERSION_K
LEAF(__osNop)
- jr $ra
- nop
+ jr ra
END(__osNop)
#endif
@@ -869,113 +873,111 @@ END(__osNop)
* Dispatches the next thread to run after restoring the context
*/
LEAF(__osDispatchThread)
- // Obtain highest priority thread from the active run queue
- lui $a0, %hi(__osRunQueue)
+ /* Obtain highest priority thread from the active run queue */
+ la a0, __osRunQueue
jal __osPopThread
- addiu $a0, $a0, %lo(__osRunQueue)
- // Set thread as running
- lui $at, %hi(__osRunningThread)
- sw $v0, %lo(__osRunningThread)($at)
- li $t0, OS_STATE_RUNNING
- sh $t0, THREAD_STATE($v0)
- // Restore SR, masking out any interrupts that are not also
- // enabled in the global interrupt mask
- move $k0, $v0
- lui $t0, %hi(__OSGlobalIntMask)
- lw $k1, THREAD_SR($k0)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, ($t0)
- lui $at, ((~SR_IMASK) >> 0x10) & 0xFFFF
- andi $t1, $k1, SR_IMASK
- ori $at, (~SR_IMASK) & 0xFFFF
- andi $t0, $t0, SR_IMASK
- and $t1, $t1, $t0
- and $k1, $k1, $at
- or $k1, $k1, $t1
- mtc0 $k1, C0_SR
- // Restore GPRs
- ld $k1, THREAD_LO($k0)
- ld $at, THREAD_AT($k0)
- ld $v0, THREAD_V0($k0)
- mtlo $k1
- ld $k1, THREAD_HI($k0)
- ld $v1, THREAD_V1($k0)
- ld $a0, THREAD_A0($k0)
- ld $a1, THREAD_A1($k0)
- ld $a2, THREAD_A2($k0)
- ld $a3, THREAD_A3($k0)
- ld $t0, THREAD_T0($k0)
- ld $t1, THREAD_T1($k0)
- ld $t2, THREAD_T2($k0)
- ld $t3, THREAD_T3($k0)
- ld $t4, THREAD_T4($k0)
- ld $t5, THREAD_T5($k0)
- ld $t6, THREAD_T6($k0)
- ld $t7, THREAD_T7($k0)
- ld $s0, THREAD_S0($k0)
- ld $s1, THREAD_S1($k0)
- ld $s2, THREAD_S2($k0)
- ld $s3, THREAD_S3($k0)
- ld $s4, THREAD_S4($k0)
- ld $s5, THREAD_S5($k0)
- ld $s6, THREAD_S6($k0)
- ld $s7, THREAD_S7($k0)
- ld $t8, THREAD_T8($k0)
- ld $t9, THREAD_T9($k0)
- ld $gp, THREAD_GP($k0)
- mthi $k1
- ld $sp, THREAD_SP($k0)
- ld $fp, THREAD_S8($k0)
- ld $ra, THREAD_RA($k0)
- // Move thread pc to EPC so that eret will return execution to where the thread left off
- lw $k1, THREAD_PC($k0)
- mtc0 $k1, C0_EPC
- // Check if the FPU was used by this thread and if so also restore the FPU registers
- lw $k1, THREAD_FP($k0)
- beqz $k1, 1f
- nop
- lw $k1, THREAD_FPCSR($k0)
- ctc1 $k1, C1_FPCSR
- ldc1 $f0, THREAD_FP0($k0)
- ldc1 $f2, THREAD_FP2($k0)
- ldc1 $f4, THREAD_FP4($k0)
- ldc1 $f6, THREAD_FP6($k0)
- ldc1 $f8, THREAD_FP8($k0)
- ldc1 $f10, THREAD_FP10($k0)
- ldc1 $f12, THREAD_FP12($k0)
- ldc1 $f14, THREAD_FP14($k0)
- ldc1 $f16, THREAD_FP16($k0)
- ldc1 $f18, THREAD_FP18($k0)
- ldc1 $f20, THREAD_FP20($k0)
- ldc1 $f22, THREAD_FP22($k0)
- ldc1 $f24, THREAD_FP24($k0)
- ldc1 $f26, THREAD_FP26($k0)
- ldc1 $f28, THREAD_FP28($k0)
- ldc1 $f30, THREAD_FP30($k0)
+ /* Set thread as running */
+ sw v0, __osRunningThread
+ li t0, OS_STATE_RUNNING
+ sh t0, THREAD_STATE(v0)
+ /* Restore SR, masking out any interrupts that are not also */
+ /* enabled in the global interrupt mask */
+ move k0, v0
+ lw k1, THREAD_SR(k0)
+ la t0, __OSGlobalIntMask
+ lw t0, (t0)
+ andi t0, t0, SR_IMASK
+ andi t1, k1, SR_IMASK
+ and t1, t1, t0
+ and k1, k1, ~SR_IMASK
+ or k1, k1, t1
+ MTC0( k1, C0_SR)
+ /* Restore GPRs */
+.set noat
+ ld AT, THREAD_AT(k0)
+ ld v0, THREAD_V0(k0)
+ ld v1, THREAD_V1(k0)
+ ld a0, THREAD_A0(k0)
+ ld a1, THREAD_A1(k0)
+ ld a2, THREAD_A2(k0)
+ ld a3, THREAD_A3(k0)
+ ld t0, THREAD_T0(k0)
+ ld t1, THREAD_T1(k0)
+ ld t2, THREAD_T2(k0)
+ ld t3, THREAD_T3(k0)
+ ld t4, THREAD_T4(k0)
+ ld t5, THREAD_T5(k0)
+ ld t6, THREAD_T6(k0)
+ ld t7, THREAD_T7(k0)
+ ld s0, THREAD_S0(k0)
+ ld s1, THREAD_S1(k0)
+ ld s2, THREAD_S2(k0)
+ ld s3, THREAD_S3(k0)
+ ld s4, THREAD_S4(k0)
+ ld s5, THREAD_S5(k0)
+ ld s6, THREAD_S6(k0)
+ ld s7, THREAD_S7(k0)
+ ld t8, THREAD_T8(k0)
+ ld t9, THREAD_T9(k0)
+ ld gp, THREAD_GP(k0)
+ ld sp, THREAD_SP(k0)
+ ld fp, THREAD_S8(k0)
+ ld ra, THREAD_RA(k0)
+ ld k1, THREAD_LO(k0)
+ mtlo k1
+ ld k1, THREAD_HI(k0)
+ mthi k1
+ /* Move thread pc to EPC so that eret will return execution to where the thread left off */
+ lw k1, THREAD_PC(k0)
+ MTC0( k1, C0_EPC)
+ /* Check if the FPU was used by this thread and if so also restore the FPU registers */
+ lw k1, THREAD_FP(k0)
+ beqz k1, 1f
+
+.set noreorder
+ lw k1, THREAD_FPCSR(k0)
+ ctc1 k1, C1_FPCSR
+.set reorder
+ ldc1 $f0, THREAD_FP0(k0)
+ ldc1 $f2, THREAD_FP2(k0)
+ ldc1 $f4, THREAD_FP4(k0)
+ ldc1 $f6, THREAD_FP6(k0)
+ ldc1 $f8, THREAD_FP8(k0)
+ ldc1 $f10, THREAD_FP10(k0)
+ ldc1 $f12, THREAD_FP12(k0)
+ ldc1 $f14, THREAD_FP14(k0)
+ ldc1 $f16, THREAD_FP16(k0)
+ ldc1 $f18, THREAD_FP18(k0)
+ ldc1 $f20, THREAD_FP20(k0)
+ ldc1 $f22, THREAD_FP22(k0)
+ ldc1 $f24, THREAD_FP24(k0)
+ ldc1 $f26, THREAD_FP26(k0)
+ ldc1 $f28, THREAD_FP28(k0)
+ ldc1 $f30, THREAD_FP30(k0)
1:
- // Restore RCP interrupt mask, masking out any RCP interrupts that
- // are not also enabled in the global interrupt mask
- lw $k1, THREAD_RCP($k0)
- lui $k0, %hi(__OSGlobalIntMask)
- addiu $k0, %lo(__OSGlobalIntMask)
- lw $k0, ($k0)
- srl $k0, $k0, RCP_IMASKSHIFT
- and $k1, $k1, $k0
- sll $k1, $k1, 1
- lui $k0, %hi(__osRcpImTable)
- addiu $k0, %lo(__osRcpImTable)
- addu $k1, $k1, $k0
- lhu $k1, ($k1)
- lui $k0, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- addiu $k0, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))
- sw $k1, ($k0)
- // Empty pipeline
+ /* Restore RCP interrupt mask, masking out any RCP interrupts that */
+ /* are not also enabled in the global interrupt mask */
+.set noreorder
+ lw k1, THREAD_RCP(k0)
+ la k0, __OSGlobalIntMask
+ lw k0, (k0)
+ srl k0, k0, RCP_IMASKSHIFT
+ and k1, k1, k0
+ sll k1, k1, 1
+ la k0, __osRcpImTable
+ addu k1, k1, k0
+ lhu k1, (k1)
+ la k0, PHYS_TO_K1(MI_INTR_MASK_REG)
+ sw k1, (k0)
+ /* Empty pipeline */
nop
nop
nop
nop
- // Resume thread execution
+ /* Resume thread execution */
eret
+.set reorder
+.set at
END(__osDispatchThread)
/**
@@ -986,7 +988,7 @@ END(__osDispatchThread)
* current thread to be destroyed.
*/
LEAF(__osCleanupThread)
+ move a0, zero
jal osDestroyThread
- move $a0, $zero
- // Despite being a jal, this function does not return as the thread will have been destroyed
+ /* Despite being a jal, this function does not return as the thread will have been destroyed */
END(__osCleanupThread)
diff --git a/src/libultra/os/getcause.s b/src/libultra/os/getcause.s
index a621e97363..b59c5c6801 100644
--- a/src/libultra/os/getcause.s
+++ b/src/libultra/os/getcause.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osGetCause)
- mfc0 $v0, C0_CAUSE
- jr $ra
- nop
+ MFC0( v0, C0_CAUSE)
+ jr ra
END(__osGetCause)
diff --git a/src/libultra/os/getcount.s b/src/libultra/os/getcount.s
index 242c9da692..84552adb00 100644
--- a/src/libultra/os/getcount.s
+++ b/src/libultra/os/getcount.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(osGetCount)
- mfc0 $v0, C0_COUNT
- jr $ra
- nop
+ MFC0( v0, C0_COUNT)
+ jr ra
END(osGetCount)
diff --git a/src/libultra/os/getfpccsr.s b/src/libultra/os/getfpccsr.s
index 93d4e51b8e..37c0e8c3b2 100644
--- a/src/libultra/os/getfpccsr.s
+++ b/src/libultra/os/getfpccsr.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osGetFpcCsr)
- cfc1 $v0, C1_FPCSR
- jr $ra
- nop
+ CFC1( v0, C1_FPCSR)
+ jr ra
END(__osGetFpcCsr)
diff --git a/src/libultra/os/getintmask.s b/src/libultra/os/getintmask.s
index 2c6ddc86ed..f734103938 100644
--- a/src/libultra/os/getintmask.s
+++ b/src/libultra/os/getintmask.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
#include "ultra64/rcp.h"
#include "ultra64/exception.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* OSIntMask osGetIntMask(void);
@@ -23,38 +19,35 @@
* See the comment for osSetIntMask for more details.
*/
LEAF(osGetIntMask)
- // Extract interrupt enable bits from current SR
- mfc0 $v0, C0_SR
- andi $v0, $v0, (SR_IMASK | SR_IE)
- // Get value of __OSGlobalIntMask
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t1, 0($t0)
- // Bitwise-OR in the disabled CPU bits of __OSGlobalIntMask
- li $at, ~0
- xor $t0, $t1, $at
- andi $t0, $t0, SR_IMASK
- or $v0, $v0, $t0
- // Fetch MI_INTR_MASK_REG
- lui $t1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- lw $t1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t1)
- // If there are RCP interrupts masked
- beqz $t1, 1f
- // Get value of __OSGlobalIntMask
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, 0($t0)
- // Bitwise-OR in the disabled RCP bits of __OSGlobalIntMask
- srl $t0, $t0, RCP_IMASKSHIFT
- li $at, ~0
- xor $t0, $t0, $at
- andi $t0, $t0, (RCP_IMASK >> RCP_IMASKSHIFT)
- or $t1, $t1, $t0
+.set noreorder
+ /* Extract interrupt enable bits from current SR */
+ mfc0 v0, C0_SR
+ andi v0, v0, (SR_IMASK | SR_IE)
+ /* Get value of __OSGlobalIntMask */
+ la t0, __OSGlobalIntMask
+ lw t1, (t0)
+ /* Bitwise-OR in the disabled CPU bits of __OSGlobalIntMask */
+ xor t0, t1, ~0
+ andi t0, t0, SR_IMASK
+ or v0, v0, t0
+ /* Fetch MI_INTR_MASK_REG */
+ lw t1, PHYS_TO_K1(MI_INTR_MASK_REG)
+ /* If there are RCP interrupts masked */
+ beqz t1, 1f
+ /* Get value of __OSGlobalIntMask */
+ la t0, __OSGlobalIntMask /* Note: macro expansion in delay slot */
+ lw t0, (t0)
+ /* Bitwise-OR in the disabled RCP bits of __OSGlobalIntMask */
+ srl t0, t0, RCP_IMASKSHIFT
+ xor t0, t0, ~0
+ andi t0, t0, (RCP_IMASK >> RCP_IMASKSHIFT)
+ or t1, t1, t0
1:
- // Shift the RCP bits to not conflict with the CPU bits
- sll $t2, $t1, RCP_IMASKSHIFT
- // OR the CPU and RCP bits together
- or $v0, $v0, $t2
- jr $ra
+ /* Shift the RCP bits to not conflict with the CPU bits */
+ sll t2, t1, RCP_IMASKSHIFT
+ /* OR the CPU and RCP bits together */
+ or v0, v0, t2
+ jr ra
nop
+.set reorder
END(osGetIntMask)
diff --git a/src/libultra/os/getmemsize.c b/src/libultra/os/getmemsize.c
index 787346de63..1adbd66ff4 100644
--- a/src/libultra/os/getmemsize.c
+++ b/src/libultra/os/getmemsize.c
@@ -3,6 +3,7 @@
#define STEP 0x100000
u32 osGetMemSize(void) {
+#ifndef BBPLAYER
vu32* ptr;
u32 size = 0x400000;
u32 data0;
@@ -28,4 +29,7 @@ u32 osGetMemSize(void) {
}
return size;
+#else
+ return osMemSize;
+#endif
}
diff --git a/src/libultra/os/getsr.s b/src/libultra/os/getsr.s
index dc6901b982..709075a7b7 100644
--- a/src/libultra/os/getsr.s
+++ b/src/libultra/os/getsr.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osGetSR)
- mfc0 $v0, C0_SR
- jr $ra
- nop
+ MFC0( v0, C0_SR)
+ jr ra
END(__osGetSR)
diff --git a/src/libultra/os/gettime.c b/src/libultra/os/gettime.c
index 2ca90b0df9..e8943cd9e0 100644
--- a/src/libultra/os/gettime.c
+++ b/src/libultra/os/gettime.c
@@ -11,5 +11,5 @@ OSTime osGetTime(void) {
t = __osCurrentTime;
__osRestoreInt(prevInt);
- return base + t;
+ return t + base;
}
diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c
index 427a517710..300f2743dc 100644
--- a/src/libultra/os/initialize.c
+++ b/src/libultra/os/initialize.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "ultra64/bcp.h"
typedef struct __osExceptionVector {
u32 inst1; // lui $k0, %hi(__osException)
@@ -59,13 +60,50 @@ void OSINITIALIZE_FUNC(void) {
__osSetWatchLo(0x04900000);
#endif
- while (__osSiRawReadIo((void*)(PIF_RAM_END - 3), &pifdata)) {
- ;
+#ifdef BBPLAYER
+ {
+ u32 x, y;
+
+ // Check for iQue Player hardware by enabling and disabling FLASH and IDE interrupts and checking if the
+ // register gives the correct response.
+ IO_WRITE(MI_EX_INTR_MASK_REG, MI_EX_INTR_MASK_SET_FLASH | MI_EX_INTR_MASK_SET_IDE);
+ x = IO_READ(MI_EX_INTR_MASK_REG);
+ IO_WRITE(MI_EX_INTR_MASK_REG, MI_EX_INTR_MASK_CLR_FLASH | MI_EX_INTR_MASK_CLR_IDE);
+ y = IO_READ(MI_EX_INTR_MASK_REG);
+
+ __osBbIsBb =
+ ((x & (MI_EX_INTR_MASK_FLASH | MI_EX_INTR_MASK_IDE)) == (MI_EX_INTR_MASK_FLASH | MI_EX_INTR_MASK_IDE)) &&
+ ((y & (MI_EX_INTR_MASK_FLASH | MI_EX_INTR_MASK_IDE)) == 0);
}
- while (__osSiRawWriteIo((void*)(PIF_RAM_END - 3), pifdata | 8)) {
- ;
+
+ //! @bug Most games do not have permission to use GPIO, so they often cannot correctly tell if they are running on
+ //! HW V1 or V2.
+ if (__osBbIsBb && PI_GPIO_IS_HW_V2(IO_READ(PI_GPIO_REG))) {
+ __osBbIsBb = 2;
}
+ if (__osBbIsBb) {
+ // Set IPL boot parameters
+ osTvType = OS_TV_NTSC;
+ osRomType = 0;
+ osResetType = 0;
+ osVersion = 1;
+ osMemSize = 0x400000;
+ }
+
+ if (!__osBbIsBb) {
+ // The PIF doesn't exist on iQue, no need to enable NMI from PIF
+#endif
+ while (__osSiRawReadIo((void*)(PIF_RAM_END - 3), &pifdata)) {
+ ;
+ }
+ while (__osSiRawWriteIo((void*)(PIF_RAM_END - 3), pifdata | 8)) {
+ ;
+ }
+#ifdef BBPLAYER
+ }
+#endif
+
*(__osExceptionVector*)UT_VEC = __osExceptionPreamble; // TLB miss
*(__osExceptionVector*)XUT_VEC = __osExceptionPreamble; // XTLB miss
*(__osExceptionVector*)ECC_VEC = __osExceptionPreamble; // cache errors
@@ -102,6 +140,31 @@ void OSINITIALIZE_FUNC(void) {
}
#endif
+#ifdef BBPLAYER
+ if (!__osBbIsBb) {
+ // In a real iQue Player environment (that is, real hardware + app launched from the system menu)
+ // these are set on app launch by the system menu based on the contents of the game's associated
+ // ticket. Set some dummy values if not running on iQue Player hardware.
+ __osBbEepromSize = 0x200;
+ __osBbPakSize = 0x8000;
+ __osBbFlashSize = 0x20000;
+ __osBbEepromAddress = 0x80400000 - 0x200;
+ __osBbPakAddress[0] = 0x80400000 - 0x8200;
+ __osBbPakAddress[1] = 0;
+ __osBbPakAddress[2] = 0;
+ __osBbPakAddress[3] = 0;
+ __osBbFlashAddress = 0x80400000 - 0x20000;
+ __osBbSramSize = __osBbFlashSize;
+ __osBbSramAddress = __osBbFlashAddress;
+ }
+ if (__osBbIsBb) {
+ IO_WRITE(PI_64_REG, IO_READ(PI_64_REG) & ~0x80000000);
+ IO_WRITE(MI_EX_INTR_MASK_REG, MI_EX_INTR_MASK_SET_IDE);
+ IO_WRITE(SI_0C_REG, 0);
+ IO_WRITE(SI_1C_REG, (IO_READ(SI_1C_REG) & ~0x7F000000) | 0x2F400000);
+ }
+#endif
+
IO_WRITE(AI_CONTROL_REG, AI_CONTROL_DMA_ON);
IO_WRITE(AI_DACRATE_REG, AI_MAX_DAC_RATE - 1);
IO_WRITE(AI_BITRATE_REG, AI_MAX_BIT_RATE - 1);
diff --git a/src/libultra/os/interrupt.s b/src/libultra/os/interrupt.s
index 829377bb0e..3a9102c579 100644
--- a/src/libultra/os/interrupt.s
+++ b/src/libultra/os/interrupt.s
@@ -1,53 +1,45 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
#include "ultra64/thread.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osDisableInt)
- lui $t2, %hi(__OSGlobalIntMask)
- addiu $t2, $t2, %lo(__OSGlobalIntMask)
- lw $t3, ($t2)
- andi $t3, $t3, SR_IMASK
- mfc0 $t0, C0_SR
- li $at, ~SR_IE
- and $t1, $t0, $at
- mtc0 $t1, C0_SR
- andi $v0, $t0, SR_IE
- lw $t0, ($t2)
- andi $t0, $t0, SR_IMASK
- beq $t0, $t3, No_Change_Global_Int
- lui $t2, %hi(__osRunningThread)
- //! @bug this addiu should be lw, it may never come up in practice as to reach this code
- //! the CPU bits of __OSGlobalIntMask must have changed while this function is running.
- addiu $t2, $t2, %lo(__osRunningThread)
- lw $t1, THREAD_SR($t2)
- andi $t2, $t1, SR_IMASK
- and $t2, $t2, $t0
- li $at, ~SR_IMASK
- and $t1, $t1, $at
- or $t1, $t1, $t2
- li $at, ~SR_IE
- and $t1, $t1, $at
- mtc0 $t1, C0_SR
- nop
- nop
+ la t2, __OSGlobalIntMask
+ lw t3, (t2)
+ and t3, t3, SR_IMASK
+ MFC0( t0, C0_SR)
+ and t1, t0, ~SR_IE
+ MTC0( t1, C0_SR)
+ and v0, t0, SR_IE
+ lw t0, (t2)
+ and t0, t0, SR_IMASK
+.set noreorder
+ beq t0, t3, No_Change_Global_Int
+ /*! @bug this la should be lw, it may never come up in practice as to reach this code
+ *! the CPU bits of __OSGlobalIntMask must have changed while this function is running.
+ */
+ la t2, __osRunningThread
+ lw t1, THREAD_SR(t2)
+ and t2, t1, SR_IMASK
+ and t2, t2, t0
+.set reorder
+ and t1, t1, ~SR_IMASK
+ or t1, t1, t2
+ and t1, t1, ~SR_IE
+ MTC0( t1, C0_SR)
+ NOP
+ NOP
No_Change_Global_Int:
- jr $ra
- nop
+ jr ra
END(__osDisableInt)
LEAF(__osRestoreInt)
- mfc0 $t0, C0_SR
- or $t0, $t0, $a0
- mtc0 $t0, C0_SR
- nop
- nop
- jr $ra
- nop
+ MFC0( t0, C0_SR)
+ or t0, t0, a0
+ MTC0( t0, C0_SR)
+ NOP
+ NOP
+ jr ra
END(__osRestoreInt)
diff --git a/src/libultra/os/invaldcache.s b/src/libultra/os/invaldcache.s
index 9464a24da6..9cf3d82e05 100644
--- a/src/libultra/os/invaldcache.s
+++ b/src/libultra/os/invaldcache.s
@@ -1,12 +1,8 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* void osInvalDCache(void* vaddr, s32 nbytes);
@@ -24,71 +20,61 @@
* the entire data cache is invalidated.
*/
LEAF(osInvalDCache)
- // If the amount to invalidate is less than or equal to 0, return immediately
- blez $a1, 3f
- nop
- // If the amount to invalidate is as large as or larger than
- // the data cache size, invalidate all
- li $t3, DCACHE_SIZE
- sltu $at, $a1, $t3
- beqz $at, 4f
- nop
- // Ensure end address doesn't wrap around and end up smaller
- // than the start address
- move $t0, $a0
- addu $t1, $a0, $a1
- sltu $at, $t0, $t1
- beqz $at, 3f
- nop
- // Mask start with cache line
- andi $t2, $t0, DCACHE_LINEMASK
- // If mask is not zero, the start is not cache aligned
- beqz $t2, 1f
- addiu $t1, $t1, -DCACHE_LINESIZE
- // Subtract mask result to align to cache line
- subu $t0, $t0, $t2
- // Hit-Writeback-Invalidate unaligned part
- cache (CACH_PD | C_HWBINV), ($t0)
- sltu $at, $t0, $t1
- // If that's all there is to do, return early
- beqz $at, 3f
- nop
- addiu $t0, $t0, DCACHE_LINESIZE
+ /* If the amount to invalidate is less than or equal to 0, return immediately */
+ blez a1, 3f
+ /* If the amount to invalidate is as large as or larger than
+ * the data cache size, invalidate all */
+ li t3, DCACHE_SIZE
+ bgeu a1, t3, 4f
+ /* Ensure end address doesn't wrap around and end up smaller
+ * than the start address */
+ move t0, a0
+ addu t1, a0, a1
+ bgeu t0, t1, 3f
+ /* Mask start with cache line */
+ addiu t1, t1, -DCACHE_LINESIZE
+ andi t2, t0, DCACHE_LINEMASK
+ /* If mask is not zero, the start is not cache aligned */
+ beqz t2, 1f
+ /* Subtract mask result to align to cache line */
+ subu t0, t0, t2
+ /* Hit-Writeback-Invalidate unaligned part */
+ CACHE( (CACH_PD | C_HWBINV), (t0))
+ /* If that's all there is to do, return early */
+ bgeu t0, t1, 3f
+ addiu t0, t0, DCACHE_LINESIZE
1:
- // Mask end with cache line
- andi $t2, $t1, DCACHE_LINEMASK
- // If mask is not zero, the end is not cache aligned
- beqz $t2, 1f
- nop
- // Subtract mask result to align to cache line
- subu $t1, $t1, $t2
- // Hit-Writeback-Invalidate unaligned part
- cache (CACH_PD | C_HWBINV), DCACHE_LINESIZE($t1)
- sltu $at, $t1, $t0
- // If that's all there is to do, return early
- bnez $at, 3f
- nop
- // Invalidate the rest
-1:
- // Hit-Invalidate
- cache (CACH_PD | C_HINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 1b
- addiu $t0, $t0, DCACHE_LINESIZE
+ /* Mask end with cache line */
+ andi t2, t1, DCACHE_LINEMASK
+ /* If mask is not zero, the end is not cache aligned */
+ beqz t2, 2f
+ /* Subtract mask result to align to cache line */
+ subu t1, t1, t2
+ /* Hit-Writeback-Invalidate unaligned part */
+ CACHE( (CACH_PD | C_HWBINV), DCACHE_LINESIZE(t1))
+ /* If that's all there is to do, return early */
+ bltu t1, t0, 3f
+ /* Invalidate the rest */
+2:
+ /* Hit-Invalidate */
+ CACHE( (CACH_PD | C_HINV), (t0))
+.set noreorder
+ bltu t0, t1, 2b
+ addiu t0, t0, DCACHE_LINESIZE
+.set reorder
3:
- jr $ra
- nop
+ jr ra
4:
- li $t0, K0BASE
- addu $t1, $t0, $t3
- addiu $t1, $t1, -DCACHE_LINESIZE
+ li t0, K0BASE
+ addu t1, t0, t3
+ addiu t1, t1, -DCACHE_LINESIZE
5:
- // Index-Writeback-Invalidate
- cache (CACH_PD | C_IWBINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 5b
- addiu $t0, DCACHE_LINESIZE
- jr $ra
- nop
+ /* Index-Writeback-Invalidate */
+ CACHE( (CACH_PD | C_IWBINV), (t0))
+.set noreorder
+ bltu t0, t1, 5b
+ addiu t0, DCACHE_LINESIZE
+.set reorder
+ jr ra
END(osInvalDCache)
diff --git a/src/libultra/os/invalicache.s b/src/libultra/os/invalicache.s
index 55f8312380..ef92d4cb08 100644
--- a/src/libultra/os/invalicache.s
+++ b/src/libultra/os/invalicache.s
@@ -1,52 +1,44 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(osInvalICache)
- // If the amount to invalidate is less than or equal to 0, return immediately
- blez $a1, 2f
- nop
- // If the amount to invalidate is as large as or larger than
- // the instruction cache size, invalidate all
- li $t3, ICACHE_SIZE
- sltu $at, $a1, $t3
- beqz $at, 3f
- nop
- // ensure end address doesn't wrap around and end up smaller
- // than the start address
- move $t0, $a0
- addu $t1, $a0, $a1
- sltu $at, $t0, $t1
- beqz $at, 2f
- nop
- // Mask and subtract to align to cache line
- andi $t2, $t0, ICACHE_LINEMASK
- addiu $t1, $t1, -ICACHE_LINESIZE
- subu $t0, $t0, $t2
+ /* If the amount to invalidate is less than or equal to 0, return immediately */
+ blez a1, 2f
+ /* If the amount to invalidate is as large as or larger than */
+ /* the instruction cache size, invalidate all */
+ li t3, ICACHE_SIZE
+ bgeu a1, t3, 3f
+ /* ensure end address doesn't wrap around and end up smaller */
+ /* than the start address */
+ move t0, a0
+ addu t1, a0, a1
+ bgeu t0, t1, 2f
+ /* Mask and subtract to align to cache line */
+ addiu t1, t1, -ICACHE_LINESIZE
+ andi t2, t0, ICACHE_LINEMASK
+ subu t0, t0, t2
1:
- cache (CACH_PI | C_HINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 1b
- addiu $t0, $t0, ICACHE_LINESIZE
+ CACHE( (CACH_PI | C_HINV), (t0))
+.set noreorder
+ bltu t0, t1, 1b
+ addiu t0, t0, ICACHE_LINESIZE
+.set reorder
2:
- jr $ra
- nop
+ jr ra
3:
- li $t0, K0BASE
- addu $t1, $t0, $t3
- addiu $t1, $t1, -ICACHE_LINESIZE
+ li t0, K0BASE
+ addu t1, t0, t3
+ addiu t1, t1, -ICACHE_LINESIZE
4:
- cache (CACH_PI | C_IINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 4b
- addiu $t0, ICACHE_LINESIZE
- jr $ra
- nop
+ CACHE( (CACH_PI | C_IINV), (t0))
+.set noreorder
+ bltu t0, t1, 4b
+ addiu t0, ICACHE_LINESIZE
+.set reorder
+ jr ra
+.set reorder
END(osInvalICache)
diff --git a/src/libultra/os/maptlbrdb.s b/src/libultra/os/maptlbrdb.s
index c3ac20948b..43e7cc93a3 100644
--- a/src/libultra/os/maptlbrdb.s
+++ b/src/libultra/os/maptlbrdb.s
@@ -1,36 +1,31 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
#include "ultra64/rdb.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(osMapTLBRdb)
- mfc0 $t0, C0_ENTRYHI
- li $t1, NTLBENTRIES
- mtc0 $t1, C0_INX
- mtc0 $zero, C0_PAGEMASK
- li $t2, (TLBLO_UNCACHED | TLBLO_D | TLBLO_V | TLBLO_G)
- li $t1, (RDB_BASE_REG & TLBHI_VPN2MASK)
- mtc0 $t1, C0_ENTRYHI
- // Possible bug? Virtual address instead of physical address
- // set as page frame number
- li $t1, RDB_BASE_VIRTUAL_ADDR
- srl $t3, $t1, TLBLO_PFNSHIFT
- or $t3, $t3, $t2
- mtc0 $t3, C0_ENTRYLO0
- li $t1, TLBLO_G
- mtc0 $t1, C0_ENTRYLO1
- nop
- tlbwi
- nop
- nop
- nop
- nop
- mtc0 $t0, C0_ENTRYHI
- jr $ra
- nop
+ MFC0( t0, C0_ENTRYHI)
+ li t1, NTLBENTRIES
+ MTC0( t1, C0_INX)
+ MTC0( zero, C0_PAGEMASK)
+ li t2, (TLBLO_UNCACHED | TLBLO_D | TLBLO_V | TLBLO_G)
+ li t1, (RDB_BASE_REG & TLBHI_VPN2MASK)
+ MTC0( t1, C0_ENTRYHI)
+ /* Possible bug? Virtual address instead of physical address set as page frame number */
+ li t1, RDB_BASE_VIRTUAL_ADDR
+ srl t3, t1, TLBLO_PFNSHIFT
+ or t3, t3, t2
+ MTC0( t3, C0_ENTRYLO0)
+ li t1, TLBLO_G
+ MTC0( t1, C0_ENTRYLO1)
+ NOP
+ TLBWI
+ NOP
+ NOP
+ NOP
+ NOP
+ MTC0( t0, C0_ENTRYHI)
+ jr ra
END(osMapTLBRdb)
diff --git a/src/libultra/os/parameters.s b/src/libultra/os/parameters.s
index c0020ddbed..8fb324d240 100644
--- a/src/libultra/os/parameters.s
+++ b/src/libultra/os/parameters.s
@@ -1,22 +1,48 @@
#include "ultra64/asm.h"
-.section .text
+.text
-.macro IPL_SYMBOL name, address, size
- .global \name
- .set \name, \address
- .type \name, @object
- .size \name, \size
-.endm
+#ifdef __sgi
+#define IPL_SYMBOL(name, address, size) \
+ ABS(name, address)
+#else
+#define IPL_SYMBOL(name, address, sz) \
+ ABS(name, address) ;\
+ .type name, @object ;\
+ .size name, sz
+#endif
-IPL_SYMBOL leoBootID, 0x800001A0, 4
-IPL_SYMBOL osTvType, 0x80000300, 4
-IPL_SYMBOL osRomType, 0x80000304, 4
-IPL_SYMBOL osRomBase, 0x80000308, 4
-IPL_SYMBOL osResetType, 0x8000030C, 4
-IPL_SYMBOL osCicId, 0x80000310, 4
-IPL_SYMBOL osVersion, 0x80000314, 4
-IPL_SYMBOL osMemSize, 0x80000318, 4
-IPL_SYMBOL osAppNMIBuffer, 0x8000031C, 0x40
-.fill 0x60
+IPL_SYMBOL(leoBootID, 0x800001A0, 4)
+IPL_SYMBOL(osTvType, 0x80000300, 4)
+IPL_SYMBOL(osRomType, 0x80000304, 4)
+IPL_SYMBOL(osRomBase, 0x80000308, 4)
+IPL_SYMBOL(osResetType, 0x8000030C, 4)
+IPL_SYMBOL(osCicId, 0x80000310, 4)
+IPL_SYMBOL(osVersion, 0x80000314, 4)
+IPL_SYMBOL(osMemSize, 0x80000318, 4)
+IPL_SYMBOL(osAppNMIBuffer, 0x8000031C, 0x40)
+
+#ifdef BBPLAYER
+
+IPL_SYMBOL(__osBbEepromAddress, 0x8000035C, 4)
+IPL_SYMBOL(__osBbEepromSize, 0x80000360, 4)
+IPL_SYMBOL(__osBbFlashAddress, 0x80000364, 4)
+IPL_SYMBOL(__osBbFlashSize, 0x80000368, 4)
+IPL_SYMBOL(__osBbSramAddress, 0x8000036C, 4)
+IPL_SYMBOL(__osBbSramSize, 0x80000370, 4)
+IPL_SYMBOL(__osBbPakAddress, 0x80000374, 0x10)
+IPL_SYMBOL(__osBbPakSize, 0x80000384, 4)
+IPL_SYMBOL(__osBbIsBb, 0x80000388, 4)
+IPL_SYMBOL(__osBbHackFlags, 0x8000038C, 4)
+IPL_SYMBOL(__osBbStashMagic, 0x80000390, 4)
+IPL_SYMBOL(__osBbPakBindings, 0x80000394, 0x10)
+IPL_SYMBOL(__osBbStateName, 0x800003A4, 0x10)
+IPL_SYMBOL(__osBbStateDirty, 0x800003B4, 4)
+IPL_SYMBOL(__osBbAuxDataLimit, 0x800003B8, 4)
+
+.space 0x30
+
+#endif
+
+.space 0x60
diff --git a/src/libultra/os/probetlb.s b/src/libultra/os/probetlb.s
index 7bc7856e13..4fa8abc38e 100644
--- a/src/libultra/os/probetlb.s
+++ b/src/libultra/os/probetlb.s
@@ -1,12 +1,8 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* u32 __osProbeTLB(void* vaddr);
@@ -17,70 +13,71 @@
* Returns the physical address if found, or -1 if not found.
*/
LEAF(__osProbeTLB)
- // Set C0_ENTRYHI based on supplied vaddr
- mfc0 $t0, C0_ENTRYHI
- andi $t1, $t0, TLBHI_PIDMASK
- li $at, TLBHI_VPN2MASK
- and $t2, $a0, $at
- or $t1, $t1, $t2
- mtc0 $t1, C0_ENTRYHI
+.set noreorder
+ /* Set C0_ENTRYHI based on supplied vaddr */
+ mfc0 t0, C0_ENTRYHI
+ and t1, t0, TLBHI_PIDMASK
+ and t2, a0, TLBHI_VPN2MASK
+ or t1, t1, t2
+ mtc0 t1, C0_ENTRYHI
nop
nop
nop
- // TLB probe, sets C0_INX to a value matching C0_ENTRYHI.
- // If no match is found the TLBINX_PROBE bit is set to indicate this.
+ /* TLB probe, sets C0_INX to a value matching C0_ENTRYHI. */
+ /* If no match is found the TLBINX_PROBE bit is set to indicate this. */
tlbp
nop
nop
- // Read result
- mfc0 $t3, C0_INX
- li $at, TLBINX_PROBE
- and $t3, $t3, $at
- // Branch if no match was found
- bnez $t3, 3f
+ /* Read result */
+ mfc0 t3, C0_INX
+ and t3, t3, TLBINX_PROBE
+ /* Branch if no match was found */
+ bnez t3, 3f
nop
- // Read TLB, sets C0_ENTRYHI, C0_ENTRYLO0, C0_ENTRYLO1 and C0_PAGEMASK for the TLB
- // entry indicated by C0_INX
+
+ /* Read TLB, sets C0_ENTRYHI, C0_ENTRYLO0, C0_ENTRYLO1 and C0_PAGEMASK for the TLB */
+ /* entry indicated by C0_INX */
tlbr
nop
nop
nop
- // Calculate page size = (page mask + 0x2000) >> 1
- mfc0 $t3, C0_PAGEMASK
- addi $t3, $t3, 0x2000
- srl $t3, $t3, 1
- // & with vaddr
- and $t4, $t3, $a0
- // Select C0_ENTRYLO0 or C0_ENTRYLO1
- bnez $t4, 1f
- addi $t3, $t3, -1 // make bitmask out of page size
- mfc0 $v0, C0_ENTRYLO0
+ /* Calculate page size = (page mask + 0x2000) >> 1 */
+ mfc0 t3, C0_PAGEMASK
+ add t3, t3, 0x2000
+ srl t3, t3, 1
+ /* & with vaddr */
+ and t4, t3, a0
+ /* Select C0_ENTRYLO0 or C0_ENTRYLO1 */
+ bnez t4, 1f
+ add t3, t3, -1 /* make bitmask out of page size */
+ mfc0 v0, C0_ENTRYLO0
b 2f
nop
1:
- mfc0 $v0, C0_ENTRYLO1
+ mfc0 v0, C0_ENTRYLO1
2:
- // Check valid bit and branch if not valid
- andi $t5, $v0, TLBLO_V
- beqz $t5, 3f
+ /* Check valid bit and branch if not valid */
+ and t5, v0, TLBLO_V
+ beqz t5, 3f
nop
- // Extract the Page Frame Number from the entry
- li $at, TLBLO_PFNMASK
- and $v0, $v0, $at
- sll $v0, $v0, TLBLO_PFNSHIFT
- // Mask vaddr with page size mask
- and $t5, $a0, $t3
- // Add masked vaddr to pfn to obtain the physical address
- add $v0, $v0, $t5
+
+ /* Extract the Page Frame Number from the entry */
+ and v0, v0, TLBLO_PFNMASK
+ sll v0, v0, TLBLO_PFNSHIFT
+ /* Mask vaddr with page size mask */
+ and t5, a0, t3
+ /* Add masked vaddr to pfn to obtain the physical address */
+ add v0, v0, t5
b 4f
nop
3:
- // No physical address for the supplied virtual address was found,
- // return -1
- li $v0, -1
+ /* No physical address for the supplied virtual address was found, */
+ /* return -1 */
+ li v0, -1
4:
- // Restore original C0_ENTRYHI value before returning
- mtc0 $t0, C0_ENTRYHI
- jr $ra
+ /* Restore original C0_ENTRYHI value before returning */
+ mtc0 t0, C0_ENTRYHI
+ jr ra
nop
+.set reorder
END(__osProbeTLB)
diff --git a/src/libultra/os/recvmesg.c b/src/libultra/os/recvmesg.c
index f065188cd0..3254867cce 100644
--- a/src/libultra/os/recvmesg.c
+++ b/src/libultra/os/recvmesg.c
@@ -7,9 +7,10 @@ s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flag) {
if (flag == OS_MESG_NOBLOCK) {
__osRestoreInt(prevInt);
return -1;
+ } else {
+ __osRunningThread->state = OS_STATE_WAITING;
+ __osEnqueueAndYield(&mq->mtqueue);
}
- __osRunningThread->state = OS_STATE_WAITING;
- __osEnqueueAndYield(&mq->mtqueue);
}
if (msg != NULL) {
diff --git a/src/libultra/os/setcompare.s b/src/libultra/os/setcompare.s
index bd16533774..3c175c4943 100644
--- a/src/libultra/os/setcompare.s
+++ b/src/libultra/os/setcompare.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osSetCompare)
- mtc0 $a0, C0_COMPARE
- jr $ra
- nop
+ MTC0( a0, C0_COMPARE)
+ jr ra
END(__osSetCompare)
diff --git a/src/libultra/os/setfpccsr.s b/src/libultra/os/setfpccsr.s
index 1aa0e7d298..e333550844 100644
--- a/src/libultra/os/setfpccsr.s
+++ b/src/libultra/os/setfpccsr.s
@@ -1,15 +1,11 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osSetFpcCsr)
- cfc1 $v0, C1_FPCSR
- ctc1 $a0, C1_FPCSR
- jr $ra
- nop
+ CFC1( v0, C1_FPCSR)
+ CTC1( a0, C1_FPCSR)
+ jr ra
END(__osSetFpcCsr)
diff --git a/src/libultra/os/setintmask.s b/src/libultra/os/setintmask.s
index e48c1b376f..7b2f5be2f5 100644
--- a/src/libultra/os/setintmask.s
+++ b/src/libultra/os/setintmask.s
@@ -1,14 +1,11 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
#include "ultra64/rcp.h"
#include "ultra64/exception.h"
-.set noat
-.set noreorder
-
-.section .rodata
-
-.balign 16
+.rdata
+.align 2
/**
* LUT to convert between an interrupt mask value and a value for MI_INTR_MASK_REG.
@@ -82,9 +79,7 @@ DATA(__osRcpImTable)
.half MI_INTR_MASK_SET_SP | MI_INTR_MASK_SET_SI | MI_INTR_MASK_SET_AI | MI_INTR_MASK_SET_VI | MI_INTR_MASK_SET_PI | MI_INTR_MASK_SET_DP
ENDDATA(__osRcpImTable)
-.section .text
-
-.balign 16
+.text
/**
* OSIntMask osSetIntMask(OSIntMask);
@@ -113,56 +108,47 @@ ENDDATA(__osRcpImTable)
* OS_IM_ALL, so the operation is usually simply (SR | 0).
*/
LEAF(osSetIntMask)
- // Extract interrupt enable bits from current SR
- mfc0 $t4, C0_SR
- andi $v0, $t4, (SR_IMASK | SR_IE)
- // Get value of __OSGlobalIntMask
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t3, ($t0)
- // Bitwise-OR in the disabled CPU bits of __OSGlobalIntMask
- li $at, ~0
- xor $t0, $t3, $at
- andi $t0, $t0, SR_IMASK
- or $v0, $v0, $t0
- // Fetch MI_INTR_MASK_REG
- lui $t2, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- lw $t2, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t2)
- // If there are RCP interrupts masked
- beqz $t2, 1f
- srl $t1, $t3, RCP_IMASKSHIFT
- // Bitwise-OR in the disabled RCP bits of __OSGlobalIntMask
- li $at, ~0
- xor $t1, $t1, $at
- andi $t1, $t1, (RCP_IMASK >> RCP_IMASKSHIFT)
- or $t2, $t2, $t1
+ /* Extract interrupt enable bits from current SR */
+ MFC0( t4, C0_SR)
+.set noreorder
+ and v0, t4, (SR_IMASK | SR_IE)
+ /* Get value of __OSGlobalIntMask */
+ la t0, __OSGlobalIntMask
+ lw t3, (t0)
+ /* Bitwise-OR in the disabled CPU bits of __OSGlobalIntMask */
+ xor t0, t3, 0xFFFFFFFF
+ and t0, t0, SR_IMASK
+ or v0, v0, t0
+ /* Fetch MI_INTR_MASK_REG */
+ lw t2, PHYS_TO_K1(MI_INTR_MASK_REG)
+ /* If there are RCP interrupts masked */
+ beqz t2, 1f
+ srl t1, t3, RCP_IMASKSHIFT
+ /* Bitwise-OR in the disabled RCP bits of __OSGlobalIntMask */
+ xor t1, t1, 0xFFFFFFFF
+ and t1, t1, (RCP_IMASK >> RCP_IMASKSHIFT)
+ or t2, t2, t1
1:
- // Shift the RCP bits to not conflict with the CPU bits
- sll $t2, $t2, RCP_IMASKSHIFT
- // OR the CPU and RCP bits together
- or $v0, $v0, $t2
- // Extract RCP interrupt enable bits from requested mask and mask with __OSGlobalIntMask
- li $at, RCP_IMASK
- and $t0, $a0, $at
- and $t0, $t0, $t3
- // Convert to a value for MI_INTR_MASK_REG and set it
- srl $t0, $t0, (RCP_IMASKSHIFT-1)
- lui $t2, %hi(__osRcpImTable)
- addu $t2, $t2, $t0
- lhu $t2, %lo(__osRcpImTable)($t2)
- lui $at, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- sw $t2, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($at)
- // Extract CPU interrupt enable bits from requested mask and mask with __OSGlobalIntMask
- andi $t0, $a0, OS_IM_CPU
- andi $t1, $t3, SR_IMASK
- and $t0, $t0, $t1
- li $at, ~SR_IMASK
- and $t4, $t4, $at
- // Bitwise OR in the remaining bits of SR and set new SR
- or $t4, $t4, $t0
- mtc0 $t4, C0_SR
- nop
- nop
- jr $ra
- nop
+ /* Shift the RCP bits to not conflict with the CPU bits */
+ sll t2, t2, RCP_IMASKSHIFT
+ /* OR the CPU and RCP bits together */
+ or v0, v0, t2
+ /* Extract RCP interrupt enable bits from requested mask and mask with __OSGlobalIntMask */
+ and t0, a0, RCP_IMASK
+ and t0, t0, t3
+ /* Convert to a value for MI_INTR_MASK_REG and set it */
+ srl t0, t0, (RCP_IMASKSHIFT-1)
+ lhu t2, __osRcpImTable(t0)
+ sw t2, PHYS_TO_K1(MI_INTR_MASK_REG)
+ /* Extract CPU interrupt enable bits from requested mask and mask with __OSGlobalIntMask */
+ and t0, a0, OS_IM_CPU
+ and t1, t3, SR_IMASK
+ and t0, t0, t1
+ and t4, t4, ~SR_IMASK
+ /* Bitwise OR in the remaining bits of SR and set new SR */
+ or t4, t4, t0
+ MTC0( t4, C0_SR)
+ NOP
+ NOP
+ jr ra
END(osSetIntMask)
diff --git a/src/libultra/os/setsr.s b/src/libultra/os/setsr.s
index b754359eae..fb7a1586d4 100644
--- a/src/libultra/os/setsr.s
+++ b/src/libultra/os/setsr.s
@@ -1,15 +1,11 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osSetSR)
- mtc0 $a0, C0_SR
- nop
- jr $ra
- nop
+ MTC0( a0, C0_SR)
+ NOP
+ jr ra
END(__osSetSR)
diff --git a/src/libultra/os/settimer.c b/src/libultra/os/settimer.c
index a876641e88..c5632e82c2 100644
--- a/src/libultra/os/settimer.c
+++ b/src/libultra/os/settimer.c
@@ -12,20 +12,14 @@ s32 osSetTimer(OSTimer* timer, OSTime countdown, OSTime interval, OSMesgQueue* m
timer->next = NULL;
timer->prev = NULL;
timer->interval = interval;
-
- if (countdown != 0) {
- timer->value = countdown;
- } else {
- timer->value = interval;
- }
+ timer->value = (countdown != 0) ? countdown : interval;
timer->mq = mq;
timer->msg = msg;
#if LIBULTRA_VERSION >= LIBULTRA_VERSION_K
prevInt = __osDisableInt();
- if (__osTimerList->next != __osTimerList) {
- if (1) {}
-
+ if (__osTimerList->next == __osTimerList) {
+ } else {
next = __osTimerList->next;
count = osGetCount();
value = count - __osTimerCounter;
diff --git a/src/libultra/os/setwatchlo.s b/src/libultra/os/setwatchlo.s
index aee3ad4d6d..962513a480 100644
--- a/src/libultra/os/setwatchlo.s
+++ b/src/libultra/os/setwatchlo.s
@@ -1,15 +1,11 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osSetWatchLo)
- mtc0 $a0, C0_WATCHLO
- nop
- jr $ra
- nop
+ MTC0( a0, C0_WATCHLO)
+ NOP
+ jr ra
END(__osSetWatchLo)
diff --git a/src/libultra/os/stopthread.c b/src/libultra/os/stopthread.c
index 54a236b49b..53aecd940a 100644
--- a/src/libultra/os/stopthread.c
+++ b/src/libultra/os/stopthread.c
@@ -2,13 +2,7 @@
void osStopThread(OSThread* thread) {
register u32 prevInt = __osDisableInt();
- register u32 state;
-
- if (thread == NULL) {
- state = OS_STATE_RUNNING;
- } else {
- state = thread->state;
- }
+ register u16 state = (thread == NULL) ? OS_STATE_RUNNING : thread->state;
switch (state) {
case OS_STATE_RUNNING:
diff --git a/src/libultra/os/thread.c b/src/libultra/os/thread.c
index c78a34e4ec..0263acb454 100644
--- a/src/libultra/os/thread.c
+++ b/src/libultra/os/thread.c
@@ -6,16 +6,16 @@ OSThread* __osActiveQueue = (OSThread*)&__osThreadTail;
OSThread* __osRunningThread = NULL;
OSThread* __osFaultedThread = NULL;
-void __osDequeueThread(OSThread** queue, OSThread* thread) {
- register OSThread** a2 = queue;
- register OSThread* a3 = *a2;
+void __osDequeueThread(register OSThread** queue, register OSThread* thread) {
+ register OSThread* pred = (OSThread*)queue;
+ register OSThread* succ = pred->next;
- while (a3 != NULL) {
- if (a3 == thread) {
- *a2 = thread->next;
+ while (succ != NULL) {
+ if (succ == thread) {
+ pred->next = thread->next;
return;
}
- a2 = &a3->next;
- a3 = *a2;
+ pred = succ;
+ succ = pred->next;
}
}
diff --git a/src/libultra/os/timerintr.c b/src/libultra/os/timerintr.c
index ce5c12fc5f..3f94368b20 100644
--- a/src/libultra/os/timerintr.c
+++ b/src/libultra/os/timerintr.c
@@ -11,10 +11,8 @@ void __osTimerServicesInit(void) {
__osCurrentTime = 0;
__osBaseCounter = 0;
__osViIntrCount = 0;
- __osTimerList->prev = __osTimerList;
- __osTimerList->next = __osTimerList->prev;
- __osTimerList->value = 0;
- __osTimerList->interval = __osTimerList->value;
+ __osTimerList->next = __osTimerList->prev = __osTimerList;
+ __osTimerList->interval = __osTimerList->value = 0;
__osTimerList->mq = NULL;
__osTimerList->msg = NULL;
}
@@ -28,7 +26,7 @@ void __osTimerInterrupt(void) {
return;
}
- while (true) {
+ for (;;) {
timer = __osTimerList->next;
if (timer == __osTimerList) {
__osSetCompare(0);
@@ -72,7 +70,7 @@ void __osSetTimerIntr(OSTime time) {
prevInt = __osDisableInt();
__osTimerCounter = osGetCount();
- newTime = time + __osTimerCounter;
+ newTime = __osTimerCounter + time;
__osSetCompare((u32)newTime);
__osRestoreInt(prevInt);
}
diff --git a/src/libultra/os/unmaptlball.s b/src/libultra/os/unmaptlball.s
index e1a03b1a23..8cd79984ec 100644
--- a/src/libultra/os/unmaptlball.s
+++ b/src/libultra/os/unmaptlball.s
@@ -1,29 +1,25 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(osUnmapTLBAll)
- mfc0 $t0, C0_ENTRYHI
- li $t1, (NTLBENTRIES - 1)
- li $t2, (K0BASE & TLBHI_VPN2MASK)
- mtc0 $t2, C0_ENTRYHI
- mtc0 $zero, C0_ENTRYLO0
- mtc0 $zero, C0_ENTRYLO1
+ MFC0( t0, C0_ENTRYHI)
+ li t1, (NTLBENTRIES - 1)
+ li t2, (K0BASE & TLBHI_VPN2MASK)
+ MTC0( t2, C0_ENTRYHI)
+ MTC0( zero, C0_ENTRYLO0)
+ MTC0( zero, C0_ENTRYLO1)
1:
- mtc0 $t1, C0_INX
- nop
- tlbwi
- nop
- nop
- addi $t1, $t1, -1
- bgez $t1, 1b
- nop
- mtc0 $t0, C0_ENTRYHI
- jr $ra
- nop
+ MTC0( t1, C0_INX)
+ NOP
+ TLBWI
+ NOP
+ NOP
+ addi t1, t1, -1
+ bgez t1, 1b
+
+ MTC0( t0, C0_ENTRYHI)
+ jr ra
END(osUnmapTLBAll)
diff --git a/src/libultra/os/virtualtophysical.c b/src/libultra/os/virtualtophysical.c
index 5f8f79d83c..0037572232 100644
--- a/src/libultra/os/virtualtophysical.c
+++ b/src/libultra/os/virtualtophysical.c
@@ -3,11 +3,9 @@
u32 osVirtualToPhysical(void* vaddr) {
if (IS_KSEG0(vaddr)) {
return K0_TO_PHYS(vaddr);
- }
-
- if (IS_KSEG1(vaddr)) {
+ } else if (IS_KSEG1(vaddr)) {
return K1_TO_PHYS(vaddr);
+ } else {
+ return __osProbeTLB(vaddr);
}
-
- return __osProbeTLB(vaddr);
}
diff --git a/src/libultra/os/writebackdcache.s b/src/libultra/os/writebackdcache.s
index 829f6f4a05..7b2af1b459 100644
--- a/src/libultra/os/writebackdcache.s
+++ b/src/libultra/os/writebackdcache.s
@@ -1,12 +1,8 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* void osWritebackDCache(void* vaddr, s32 nbytes);
@@ -16,45 +12,43 @@
* written back.
*/
LEAF(osWritebackDCache)
- // If the amount to write back is less than or equal to 0, return immediately
- blez $a1, .ret
- nop
- // If the amount to write back is as large as or larger than
- // the data cache size, write back all
- li $t3, DCACHE_SIZE
- sltu $at, $a1, $t3
- beqz $at, .all
- nop
- // ensure end address doesn't wrap around and end up smaller
- // than the start address
- move $t0, $a0
- addu $t1, $a0, $a1
- sltu $at, $t0, $t1
- beqz $at, .ret
- nop
- // Mask and subtract to align to cache line
- andi $t2, $t0, DCACHE_LINEMASK
- addiu $t1, $t1, -DCACHE_LINESIZE
- subu $t0, $t0, $t2
-1:
- cache (CACH_PD | C_HWB), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 1b
- addiu $t0, $t0, DCACHE_LINESIZE
-.ret:
- jr $ra
- nop
+ /* If the amount to write back is less than or equal to 0, return immediately */
+ blez a1, 2f
-// same as osWritebackDCacheAll in operation
-.all:
- li $t0, K0BASE
- addu $t1, $t0, $t3
- addiu $t1, $t1, -DCACHE_LINESIZE
+ /* If the amount to write back is as large as or larger than */
+ /* the data cache size, write back all */
+ li t3, DCACHE_SIZE
+ bgeu a1, t3, 3f
+
+ /* ensure end address doesn't wrap around and end up smaller */
+ /* than the start address */
+ move t0, a0
+ addu t1, a0, a1
+ bgeu t0, t1, 2f
+
+ /* Mask and subtract to align to cache line */
+ addiu t1, t1, -DCACHE_LINESIZE
+ andi t2, t0, DCACHE_LINEMASK
+ subu t0, t0, t2
1:
- cache (CACH_PD | C_IWBINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 1b
- addiu $t0, DCACHE_LINESIZE
- jr $ra
- nop
+ CACHE( (CACH_PD | C_HWB), (t0))
+.set noreorder
+ bltu t0, t1, 1b
+ addiu t0, t0, DCACHE_LINESIZE
+.set reorder
+2:
+ jr ra
+
+/* same as osWritebackDCacheAll in operation */
+3:
+ li t0, K0BASE
+ addu t1, t0, t3
+ addiu t1, t1, -DCACHE_LINESIZE
+4:
+ CACHE( (CACH_PD | C_IWBINV), (t0))
+.set noreorder
+ bltu t0, t1, 4b
+ addiu t0, DCACHE_LINESIZE
+.set reorder
+ jr ra
END(osWritebackDCache)
diff --git a/src/libultra/os/writebackdcacheall.s b/src/libultra/os/writebackdcacheall.s
index 54a58dff8a..a15ef4554f 100644
--- a/src/libultra/os/writebackdcacheall.s
+++ b/src/libultra/os/writebackdcacheall.s
@@ -1,23 +1,19 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(osWritebackDCacheAll)
- li $t0, K0BASE
- li $t2, DCACHE_SIZE
- addu $t1, $t0, $t2
- addiu $t1, $t1, -DCACHE_LINESIZE
+ li t0, K0BASE
+ li t2, DCACHE_SIZE
+ addu t1, t0, t2
+ addiu t1, t1, -DCACHE_LINESIZE
1:
- cache (CACH_PD | C_IWBINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 1b
- addiu $t0, DCACHE_LINESIZE
- jr $ra
- nop
+.set noreorder
+ cache (CACH_PD | C_IWBINV), (t0)
+ bltu t0, t1, 1b
+ addiu t0, DCACHE_LINESIZE
+.set reorder
+ jr ra
END(osWritebackDCacheAll)
diff --git a/src/libultra/reg/_getcount.c b/src/libultra/reg/_getcount.c
new file mode 100644
index 0000000000..53073df994
--- /dev/null
+++ b/src/libultra/reg/_getcount.c
@@ -0,0 +1,32 @@
+#ifdef BBPLAYER
+#include "ultra64.h"
+
+u32 __osBbLastRCount;
+u32 __osBbRCountWraps;
+u32 __osBbLastVCount;
+u32 __osBbVCountWraps;
+
+u32 osGetCount(void) {
+ u32 count;
+ u32 mask = __osDisableInt();
+
+ __asm__("mfc0 %0, $%1" : "=r"(count) : "i"(C0_COUNT));
+
+ if (count < __osBbLastRCount) {
+ __osBbRCountWraps++;
+ }
+ __osBbLastRCount = count;
+
+ count = (((u64)__osBbRCountWraps << 32) | count) * 125ull / 192ull;
+
+ if (count < __osBbLastVCount) {
+ __osBbVCountWraps++;
+ }
+ __osBbLastVCount = count;
+
+ __osRestoreInt(mask);
+
+ return count;
+}
+
+#endif
diff --git a/src/libultra/reg/_setcompare.c b/src/libultra/reg/_setcompare.c
new file mode 100644
index 0000000000..810afcd8fb
--- /dev/null
+++ b/src/libultra/reg/_setcompare.c
@@ -0,0 +1,20 @@
+#ifdef BBPLAYER
+#include "ultra64.h"
+
+extern u32 __osBbLastRCount;
+extern u32 __osBbRCountWraps;
+extern u32 __osBbLastVCount;
+extern u32 __osBbVCountWraps;
+
+void __osSetCompare(u32 v) {
+ if (v != 0) {
+ u32 mask = __osDisableInt();
+ u32 wraps = (v < __osBbLastVCount) ? (__osBbVCountWraps + 1) : __osBbVCountWraps;
+
+ v = (((u64)wraps << 32) | v) * 192ull / 125ull;
+
+ __osRestoreInt(mask);
+ }
+ __asm__("mtc0 %0, $%1" ::"r"(v), "i"(C0_COMPARE));
+}
+#endif
diff --git a/src/makerom/entry.s b/src/makerom/entry.s
index 6be493e6b6..870b979d69 100644
--- a/src/makerom/entry.s
+++ b/src/makerom/entry.s
@@ -1,34 +1,59 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "boot.h"
-.set noreorder
+.text
-.section .text
+#if defined(NON_MATCHING) || defined(__sgi)
+/* Non-matching builds or IDO */
+#define PAD_TO 0x60
+#define LA(reg, sym) la reg, sym
+#define BOOT_STACK_TOP sBootThreadStack + BOOT_STACK_SIZE
+#else
+/* EGCS */
+#define PAD_TO 0x50
+#define LA(reg, sym) \
+ lui reg, %lo(sym##_HI); \
+ ori reg, %lo(sym)
+#endif
-.balign 16
+#if !defined(AVOID_UB)
+/* Old assembler workarounds: The makerom tool in the N64 SDK was given the bss segment size as a const
+ * literal, and since this literal was < 0x10000 it was loaded in one instruction. We don't have access
+ * to the bss segment size until we link everything so we cannot do the same thing. Instead we must load
+ * only the lower 16 bits of the bss size for matching.
+ * When AVOID_UB is enabled, don't do this and instead load the full symbol value, otherwise not all of
+ * bss may be cleared. */
+#if defined(__sgi)
+#define LOAD_BSS_SIZE(reg) li reg, %half(_bootSegmentBssSize)
+#else
+#define LOAD_BSS_SIZE(reg) ori reg, zero, %lo(_bootSegmentBssSize)
+#endif
+#else
+#define LOAD_BSS_SIZE(reg) LA(reg, _bootSegmentBssSize)
+#endif
LEAF(entrypoint)
- // Clear boot segment .bss
- la $t0, _bootSegmentBssStart
-#ifndef AVOID_UB
- // UB: li only loads the lower 16 bits of _bootSegmentBssSize when it may be larger than this,
- // so not all of bss may be cleared if it is too large
- li $t1, _bootSegmentBssSize
-#else
- la $t1, _bootSegmentBssSize
-#endif
+ /* Clear boot segment .bss */
+ LA( t0, _bootSegmentBssStart)
+ LOAD_BSS_SIZE(t1)
.clear_bss:
- addi $t1, $t1, -8
- sw $zero, ($t0)
- sw $zero, 4($t0)
- bnez $t1, .clear_bss
- addi $t0, $t0, 8
- // Set up stack and enter program code
- lui $t2, %hi(bootproc)
- lui $sp, %hi(sBootThreadStack + BOOT_STACK_SIZE)
- addiu $t2, %lo(bootproc)
- jr $t2
- addiu $sp, %lo(sBootThreadStack + BOOT_STACK_SIZE)
+ sw zero, 0(t0)
+ sw zero, 4(t0)
+ addi t0, t0, 8
+ addi t1, t1, -8
+ bnez t1, .clear_bss
+
+ /* Set up stack and enter program code */
+ LA( sp, BOOT_STACK_TOP)
+ LA( t2, bootproc)
+ jr t2
END(entrypoint)
-.fill 0x60 - (. - entrypoint)
+#ifdef __sgi
+/* IDO can't take absolute differences of symbols so the size of the above is hardcoded */
+.space PAD_TO - 0x34
+#else
+/* Pad to a total size taking into account the size of the above */
+.space PAD_TO - (. - entrypoint)
+#endif
diff --git a/src/makerom/ipl3.s b/src/makerom/ipl3.s
deleted file mode 100644
index 45f1c8e6f8..0000000000
--- a/src/makerom/ipl3.s
+++ /dev/null
@@ -1,4 +0,0 @@
-
-.section .text
-
-.incbin "incbin/ipl3"
diff --git a/src/makerom/rom_header.s b/src/makerom/rom_header.s
index d3d938cda3..2edf871c40 100644
--- a/src/makerom/rom_header.s
+++ b/src/makerom/rom_header.s
@@ -6,9 +6,12 @@
/* 0x00 */ ENDIAN_IDENTIFIER
/* 0x01 */ PI_DOMAIN_1_CFG(64, 18, 7, 3)
/* 0x04 */ SYSTEM_CLOCK_RATE_SETTING(0xF)
-/* 0x08 */ ENTRYPOINT(0x80000400)
+/* 0x08 */ ENTRYPOINT(entrypoint)
/* 0x0C */ OS_VERSION(2, 0, LIBULTRA_VERSION)
/* 0x10 */ CHECKSUM()
+
+#if !PLATFORM_IQUE
+
/* 0x18 */ PADDING(8)
/* 0x20 */ ROM_NAME("THE LEGEND OF ZELDA")
/* 0x34 */ PADDING(7)
@@ -26,3 +29,9 @@
/* 0x3E */ REGION(PAL)
#endif
/* 0x3F */ GAME_REVISION(OOT_REVISION)
+
+#else
+
+ .fill 0x40 - 0x18
+
+#endif
diff --git a/src/n64dd/n64dd_error_textures.c b/src/n64dd/n64dd_error_textures.c
index 037ed7835b..d115fdd6ef 100644
--- a/src/n64dd/n64dd_error_textures.c
+++ b/src/n64dd/n64dd_error_textures.c
@@ -1,7 +1,5 @@
#include "ultra64.h"
-#if PLATFORM_N64
-
u64 gN64DDError41Texs[2][0x600 / sizeof(u64)] = {
{
#include "assets/n64dd/error_textures/n64dd_error_41_jpn.i4.inc.c"
@@ -19,5 +17,3 @@ u64 gN64DDPleaseReadManualTexs[2][0x2800 / sizeof(u64)] = {
#include "assets/n64dd/error_textures/n64dd_please_read_manual_eng.i4.inc.c"
},
};
-
-#endif
diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
index 9ec48c5084..c8877e0e64 100644
--- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
+++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
@@ -696,7 +696,8 @@ static s16 sDemoEffectLightColors[] = { DEMO_EFFECT_LIGHT_GREEN, DEMO_EFFECT_LIG
static s16 sExItemTypes[] = { EXITEM_MAGIC_WIND, EXITEM_MAGIC_FIRE, EXITEM_MAGIC_DARK };
-static s16 sItemGetFlags[] = { ITEMGETINF_18_MASK, ITEMGETINF_19_MASK, ITEMGETINF_1A_MASK };
+static s16 sItemGetFlagMasks[] = { ITEMGETINF_MASK(ITEMGETINF_18), ITEMGETINF_MASK(ITEMGETINF_19),
+ ITEMGETINF_MASK(ITEMGETINF_1A) };
static u8 sItemIds[] = { ITEM_FARORES_WIND, ITEM_DINS_FIRE, ITEM_NAYRUS_LOVE };
@@ -808,7 +809,7 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) {
this->itemSpawned = true;
gSaveContext.healthAccumulator = 0x140;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC);
- gSaveContext.save.info.itemGetInf[ITEMGETINF_18_19_1A_INDEX] |= sItemGetFlags[cueIdTemp];
+ gSaveContext.save.info.itemGetInf[ITEMGETINF_INDEX_18_19_1A] |= sItemGetFlagMasks[cueIdTemp];
Item_Give(play, sItemIds[cueIdTemp]);
}
} else {
diff --git a/src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c b/src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c
index 51450109de..5db5debc6a 100644
--- a/src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c
+++ b/src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c
@@ -89,9 +89,9 @@ void BgGanonOtyuka_Destroy(Actor* thisx, PlayState* play2) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("WHY !!!!!!!!!!!!!!!!\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
}
void BgGanonOtyuka_WaitToFall(BgGanonOtyuka* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Jya_Bombiwa/z_bg_jya_bombiwa.c b/src/overlays/actors/ovl_Bg_Jya_Bombiwa/z_bg_jya_bombiwa.c
index 691e2adbe2..c94ee924b1 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Bombiwa/z_bg_jya_bombiwa.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Bombiwa/z_bg_jya_bombiwa.c
@@ -92,12 +92,12 @@ void BgJyaBombiwa_Init(Actor* thisx, PlayState* play) {
BgJyaBombiwa* this = (BgJyaBombiwa*)thisx;
if (PARAMS_GET_U(this->dyna.actor.params, 0, 6) != 0x29) {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
// "Warning: Switch Number changed (%s %d)(SW %d)"
PRINTF("Warning : Switch Number が変更された(%s %d)(SW %d)\n", "../z_bg_jya_bombiwa.c", 218,
PARAMS_GET_U(this->dyna.actor.params, 0, 6));
- PRINTF(VT_RST);
+ PRINTF_RST();
}
BgJyaBombiwa_SetupDynaPoly(this, play, &gBombiwaCol, 0);
BgJyaBombiwa_InitCollider(this, play);
diff --git a/src/overlays/actors/ovl_Bg_Jya_Cobra/z_bg_jya_cobra.c b/src/overlays/actors/ovl_Bg_Jya_Cobra/z_bg_jya_cobra.c
index 3b418afec1..c32bd92896 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Cobra/z_bg_jya_cobra.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Cobra/z_bg_jya_cobra.c
@@ -140,10 +140,10 @@ void BgJyaCobra_SpawnRay(BgJyaCobra* this, PlayState* play) {
#if DEBUG_FEATURES
if (this->dyna.actor.child == NULL) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
// "Error : Mir Ray occurrence failure"
PRINTF("Error : Mir Ray 発生失敗 (%s %d)\n", "../z_bg_jya_cobra.c", 270);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
#endif
}
diff --git a/src/overlays/actors/ovl_Bg_Jya_Zurerukabe/z_bg_jya_zurerukabe.c b/src/overlays/actors/ovl_Bg_Jya_Zurerukabe/z_bg_jya_zurerukabe.c
index 66875ae85b..bbdc93c2f8 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Zurerukabe/z_bg_jya_zurerukabe.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Zurerukabe/z_bg_jya_zurerukabe.c
@@ -125,10 +125,10 @@ void BgJyaZurerukabe_Init(Actor* thisx, PlayState* play) {
}
if (i == ARRAY_COUNT(D_8089B9F0)) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF("home pos が変更されたみたい(%s %d)(arg_data 0x%04x)\n", "../z_bg_jya_zurerukabe.c", 299,
this->dyna.actor.params);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
this->unk_16E = D_8089B9F8[this->unk_168];
diff --git a/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c b/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c
index 2839607d85..00ca47644f 100644
--- a/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c
+++ b/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c
@@ -63,7 +63,7 @@ s32 func_808B1AE0(BgSpot09Obj* this, PlayState* play) {
return this->dyna.actor.params == 0;
}
- carpentersRescued = GET_EVENTCHKINF_CARPENTERS_FREE_ALL();
+ carpentersRescued = GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED();
if (LINK_AGE_IN_YEARS == YEARS_ADULT) {
switch (this->dyna.actor.params) {
@@ -138,8 +138,7 @@ void BgSpot09Obj_Init(Actor* thisx, PlayState* play) {
BgSpot09Obj* this = (BgSpot09Obj*)thisx;
PRINTF("Spot09 Object [arg_data : 0x%04x](大工救出フラグ 0x%x)\n", this->dyna.actor.params,
- gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] &
- EVENTCHKINF_CARPENTERS_FREE_MASK_ALL);
+ GET_EVENTCHKINF_CARPENTERS_RESCUED_FLAGS());
this->dyna.actor.params &= 0xFF;
if ((this->dyna.actor.params < 0) || (this->dyna.actor.params >= 5)) {
PRINTF("Error : Spot 09 object の arg_data が判別出来ない(%s %d)(arg_data 0x%04x)\n", "../z_bg_spot09_obj.c",
diff --git a/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c b/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c
index 95aecef7ff..566d4342b5 100644
--- a/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c
+++ b/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c
@@ -155,9 +155,9 @@ void BgSpot18Basket_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.rot.y + 0x1555, this->dyna.actor.shape.rot.z, -1);
if (this->dyna.actor.child == NULL) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF("Error : 変化壷蓋発生失敗(%s %d)\n", "../z_bg_spot18_basket.c", 351);
- PRINTF(VT_RST);
+ PRINTF_RST();
Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c b/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c
index 9b9fd17c75..bf270508c4 100644
--- a/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c
+++ b/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c
@@ -877,10 +877,10 @@ void BossFd2_CollisionCheck(BossFd2* this, PlayState* play) {
}
if (((s8)bossFd->actor.colChkInfo.health > 2) || canKill) {
bossFd->actor.colChkInfo.health -= damage;
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("damage %d\n", damage);
}
- PRINTF(VT_RST);
+ PRINTF_RST();
PRINTF("hp %d\n", bossFd->actor.colChkInfo.health);
if ((s8)bossFd->actor.colChkInfo.health <= 0) {
diff --git a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
index 3ad6c417b7..fc82d8000e 100644
--- a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
+++ b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
@@ -1747,7 +1747,7 @@ void BossMo_CoreCollisionCheck(BossMo* this, PlayState* play) {
s16 i;
Player* player = GET_PLAYER(play);
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("Core_Damage_check START\n");
if (this->coreCollider.base.atFlags & AT_HIT) {
this->coreCollider.base.atFlags &= ~AT_HIT;
@@ -1843,7 +1843,7 @@ void BossMo_CoreCollisionCheck(BossMo* this, PlayState* play) {
}
// "end !!"
PRINTF("Core_Damage_check 終わり !!\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
}
void BossMo_Core(BossMo* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
index 2fac588608..64b3cc1088 100644
--- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
+++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
@@ -4,6 +4,8 @@
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
+#define ENDAIKU_GET_TYPE(thisx) PARAMS_GET_U((thisx)->params, 0, 2)
+
typedef struct EnDaikuEscapeSubCamParam {
Vec3f eyePosDeltaLocal;
s32 maxFramesActive;
@@ -150,21 +152,21 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) {
EnDaiku* this = (EnDaiku*)thisx;
s32 pad;
s32 noKill = true;
- s32 isFree = false;
+ s32 isRescued = false;
- if (PARAMS_GET_U(this->actor.params, 0, 2) == 0 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(0))) {
- isFree = true;
- } else if (PARAMS_GET_U(this->actor.params, 0, 2) == 1 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(1))) {
- isFree = true;
- } else if (PARAMS_GET_U(this->actor.params, 0, 2) == 2 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(2))) {
- isFree = true;
- } else if (PARAMS_GET_U(this->actor.params, 0, 2) == 3 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(3))) {
- isFree = true;
+ if (ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE0 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_0_RESCUED)) {
+ isRescued = true;
+ } else if (ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE1 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_1_RESCUED)) {
+ isRescued = true;
+ } else if (ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE2 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_2_RESCUED)) {
+ isRescued = true;
+ } else if (ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE3 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_3_RESCUED)) {
+ isRescued = true;
}
- if (isFree == true && play->sceneId == SCENE_THIEVES_HIDEOUT) {
+ if (isRescued == true && play->sceneId == SCENE_THIEVES_HIDEOUT) {
noKill = false;
- } else if (!isFree && play->sceneId == SCENE_CARPENTERS_TENT) {
+ } else if (!isRescued && play->sceneId == SCENE_CARPENTERS_TENT) {
noKill = false;
}
@@ -200,7 +202,7 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) {
this->stateFlags |= ENDAIKU_STATEFLAG_1 | ENDAIKU_STATEFLAG_2;
this->actionFunc = EnDaiku_Jailed;
} else {
- if (PARAMS_GET_U(this->actor.params, 0, 2) == 1 || PARAMS_GET_U(this->actor.params, 0, 2) == 3) {
+ if (ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE1 || ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE3) {
EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_SIT, &this->currentAnimIndex);
this->stateFlags |= ENDAIKU_STATEFLAG_1;
} else {
@@ -254,7 +256,7 @@ s32 EnDaiku_UpdateTalking(EnDaiku* this, PlayState* play) {
void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
s32 carpenterType;
- s32 freedCount;
+ s32 rescuedCount;
s16 sp2E;
s16 sp2C;
@@ -268,15 +270,14 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
Actor_OfferTalk(&this->actor, play, 100.0f) == 1) {
if (play->sceneId == SCENE_THIEVES_HIDEOUT) {
if (this->stateFlags & ENDAIKU_STATEFLAG_GERUDODEFEATED) {
- freedCount = 0;
+ rescuedCount = 0;
for (carpenterType = 0; carpenterType < 4; carpenterType++) {
- if (gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] &
- EVENTCHKINF_CARPENTERS_FREE_MASK(carpenterType)) {
- freedCount++;
+ if (ENDAIKU_IS_CARPENTER_RESCUED(carpenterType)) {
+ rescuedCount++;
}
}
- switch (freedCount) {
+ switch (rescuedCount) {
case 0:
this->actor.textId = 0x605B;
break;
@@ -295,15 +296,15 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
this->actor.textId = 0x6007;
}
} else if (play->sceneId == SCENE_CARPENTERS_TENT) {
- switch (PARAMS_GET_U(this->actor.params, 0, 2)) {
- case 0:
+ switch (ENDAIKU_GET_TYPE(&this->actor)) {
+ case ENDAIKU_TYPE0:
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
this->actor.textId = 0x6060;
} else {
this->actor.textId = 0x605F;
}
break;
- case 1:
+ case ENDAIKU_TYPE1:
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
this->actor.textId = 0x6063;
} else {
@@ -314,7 +315,7 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
}
}
break;
- case 2:
+ case ENDAIKU_TYPE2:
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
this->actor.textId = 0x6066;
} else {
@@ -325,7 +326,7 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
}
}
break;
- case 3:
+ case ENDAIKU_TYPE3:
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
this->actor.textId = 0x6068;
} else {
@@ -385,7 +386,7 @@ void EnDaiku_WaitFreedom(EnDaiku* this, PlayState* play) {
}
/**
- * The carpenter is free, initializes his running away animation
+ * The carpenter is rescued, initializes his running away animation
*/
void EnDaiku_InitEscape(EnDaiku* this, PlayState* play) {
Path* path;
@@ -399,11 +400,10 @@ void EnDaiku_InitEscape(EnDaiku* this, PlayState* play) {
EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_RUN, &this->currentAnimIndex);
this->stateFlags &= ~(ENDAIKU_STATEFLAG_1 | ENDAIKU_STATEFLAG_2);
- gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] |=
- EVENTCHKINF_CARPENTERS_FREE_MASK(PARAMS_GET_U(this->actor.params, 0, 2));
+ ENDAIKU_SET_CARPENTER_RESCUED(ENDAIKU_GET_TYPE(&this->actor));
this->actor.gravity = -1.0f;
- this->escapeSubCamTimer = sEscapeSubCamParams[PARAMS_GET_U(this->actor.params, 0, 2)].maxFramesActive;
+ this->escapeSubCamTimer = sEscapeSubCamParams[ENDAIKU_GET_TYPE(&this->actor)].maxFramesActive;
EnDaiku_InitSubCamera(this, play);
exitLoop = false;
@@ -444,11 +444,11 @@ void EnDaiku_InitSubCamera(EnDaiku* this, PlayState* play) {
Vec3f eyePosDeltaWorld;
this->subCamActive = true;
- this->escapeSubCamTimer = sEscapeSubCamParams[PARAMS_GET_U(this->actor.params, 0, 2)].maxFramesActive;
+ this->escapeSubCamTimer = sEscapeSubCamParams[ENDAIKU_GET_TYPE(&this->actor)].maxFramesActive;
- eyePosDeltaLocal.x = sEscapeSubCamParams[PARAMS_GET_U(this->actor.params, 0, 2)].eyePosDeltaLocal.x;
- eyePosDeltaLocal.y = sEscapeSubCamParams[PARAMS_GET_U(this->actor.params, 0, 2)].eyePosDeltaLocal.y;
- eyePosDeltaLocal.z = sEscapeSubCamParams[PARAMS_GET_U(this->actor.params, 0, 2)].eyePosDeltaLocal.z;
+ eyePosDeltaLocal.x = sEscapeSubCamParams[ENDAIKU_GET_TYPE(&this->actor)].eyePosDeltaLocal.x;
+ eyePosDeltaLocal.y = sEscapeSubCamParams[ENDAIKU_GET_TYPE(&this->actor)].eyePosDeltaLocal.y;
+ eyePosDeltaLocal.z = sEscapeSubCamParams[ENDAIKU_GET_TYPE(&this->actor)].eyePosDeltaLocal.z;
Matrix_RotateY(BINANG_TO_RAD(this->actor.world.rot.y), MTXMODE_NEW);
Matrix_MultVec3f(&eyePosDeltaLocal, &eyePosDeltaWorld);
@@ -493,7 +493,7 @@ void EnDaiku_EscapeSuccess(EnDaiku* this, PlayState* play) {
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_ACTIVE);
this->subCamActive = false;
- if (GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
Actor* gerudoGuard;
Vec3f vec;
@@ -594,13 +594,13 @@ void EnDaiku_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
- if (PARAMS_GET_U(thisx->params, 0, 2) == 0) {
+ if (ENDAIKU_GET_TYPE(thisx) == ENDAIKU_TYPE0) {
gDPSetEnvColor(POLY_OPA_DISP++, 170, 10, 70, 255);
- } else if (PARAMS_GET_U(thisx->params, 0, 2) == 1) {
+ } else if (ENDAIKU_GET_TYPE(thisx) == ENDAIKU_TYPE1) {
gDPSetEnvColor(POLY_OPA_DISP++, 170, 200, 255, 255);
- } else if (PARAMS_GET_U(thisx->params, 0, 2) == 2) {
+ } else if (ENDAIKU_GET_TYPE(thisx) == ENDAIKU_TYPE2) {
gDPSetEnvColor(POLY_OPA_DISP++, 0, 230, 70, 255);
- } else if (PARAMS_GET_U(thisx->params, 0, 2) == 3) {
+ } else if (ENDAIKU_GET_TYPE(thisx) == ENDAIKU_TYPE3) {
gDPSetEnvColor(POLY_OPA_DISP++, 200, 0, 150, 255);
}
@@ -637,7 +637,7 @@ void EnDaiku_PostLimbDraw(PlayState* play, s32 limb, Gfx** dList, Vec3s* rot, vo
if (limb == 15) { // head
Matrix_MultVec3f(&targetPosHeadLocal, &this->actor.focus.pos);
- gSPDisplayList(POLY_OPA_DISP++, hairDLists[PARAMS_GET_U(this->actor.params, 0, 2)]);
+ gSPDisplayList(POLY_OPA_DISP++, hairDLists[ENDAIKU_GET_TYPE(&this->actor)]);
}
CLOSE_DISPS(play->state.gfxCtx, "../z_en_daiku.c", 1330);
diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
index 82b7a06346..69136f6a92 100644
--- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
+++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
@@ -8,6 +8,13 @@ struct EnDaiku;
typedef void (*EnDaikuActionFunc)(struct EnDaiku*, PlayState*);
+typedef enum EnDaikuType {
+ ENDAIKU_TYPE0,
+ ENDAIKU_TYPE1,
+ ENDAIKU_TYPE2,
+ ENDAIKU_TYPE3
+} EnDaikuType;
+
typedef struct EnDaiku {
/* 0x0000 */ Actor actor;
/* 0x014C */ SkelAnime skelAnime;
diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.c b/src/overlays/actors/ovl_En_Fish/z_en_fish.c
index 7f16563730..8ef16187f3 100644
--- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c
+++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c
@@ -384,10 +384,10 @@ void EnFish_Dropped_Fall(EnFish* this, PlayState* play) {
EnFish_Dropped_SetupSwimAway(this);
} else if ((this->timer <= 0) && (this->actor.params == FISH_DROPPED) &&
(this->actor.floorHeight < BGCHECK_Y_MIN + 10.0f)) {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
// "BG missing? Running Actor_delete"
PRINTF("BG 抜け? Actor_delete します(%s %d)\n", "../z_en_sakana.c", 822);
- PRINTF(VT_RST);
+ PRINTF_RST();
Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.c b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
index b683415f80..ee133164c2 100644
--- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c
+++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
@@ -108,22 +108,22 @@ static EnFrPointers sEnFrPointers = {
};
#define FROG_HAS_SONG_BEEN_PLAYED(frogSongIndex) \
- (gSaveContext.save.info.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] & \
+ (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_SONGS_FOR_FROGS] & \
sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex])
#define FROG_SET_SONG_PLAYED(frogSongIndex) \
- gSaveContext.save.info.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] |= \
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_SONGS_FOR_FROGS] |= \
sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex];
static u16 sFrogSongIndexToEventChkInfSongsForFrogsMask[] = {
- EVENTCHKINF_SONGS_FOR_FROGS_ZL_MASK, // FROG_ZL
- EVENTCHKINF_SONGS_FOR_FROGS_EPONA_MASK, // FROG_EPONA
- EVENTCHKINF_SONGS_FOR_FROGS_SARIA_MASK, // FROG_SARIA
- EVENTCHKINF_SONGS_FOR_FROGS_SUNS_MASK, // FROG_SUNS
- EVENTCHKINF_SONGS_FOR_FROGS_SOT_MASK, // FROG_SOT
- EVENTCHKINF_SONGS_FOR_FROGS_STORMS_MASK, // FROG_STORMS
- EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_MASK, // FROG_CHOIR_SONG
- 0, // FROG_NO_SONG
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_ZL), // FROG_ZL
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_EPONA), // FROG_EPONA
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_SARIA), // FROG_SARIA
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_SUNS), // FROG_SUNS
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_SOT), // FROG_SOT
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_STORMS), // FROG_STORMS
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_CHOIR), // FROG_CHOIR_SONG
+ 0, // FROG_NO_SONG
};
static u8 sFrogToFrogSongIndex[] = {
@@ -245,20 +245,20 @@ void EnFr_Init(Actor* thisx, PlayState* play) {
this->actionFunc = EnFr_Idle;
} else {
if ((this->actor.params >= 6) || (this->actor.params < 0)) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
// "The argument is wrong!!"
PRINTF("%s[%d] : 引数が間違っている!!(%d)\n", "../z_en_fr.c", 370, this->actor.params);
- PRINTF(VT_RST);
+ PRINTF_RST();
ASSERT(0, "0", "../z_en_fr.c", 372);
}
this->requiredObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GAMEPLAY_FIELD_KEEP);
if (this->requiredObjectSlot < 0) {
Actor_Kill(&this->actor);
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
// "There is no bank!!"
PRINTF("%s[%d] : バンクが無いよ!!\n", "../z_en_fr.c", 380);
- PRINTF(VT_RST);
+ PRINTF_RST();
ASSERT(0, "0", "../z_en_fr.c", 382);
}
}
@@ -980,10 +980,10 @@ void EnFr_Deactivate(EnFr* this, PlayState* play) {
EnFr* frog = sEnFrPointers.frogs[frogIndex];
if (frog == NULL) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
// "There are no frogs!?"
PRINTF("%s[%d]カエルがいない!?\n", "../z_en_fr.c", 1604);
- PRINTF(VT_RST);
+ PRINTF_RST();
return;
} else if (frog->isDeactivating != true) {
return;
@@ -994,10 +994,10 @@ void EnFr_Deactivate(EnFr* this, PlayState* play) {
EnFr* frog = sEnFrPointers.frogs[frogIndex];
if (frog == NULL) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
// "There are no frogs!?"
PRINTF("%s[%d]カエルがいない!?\n", "../z_en_fr.c", 1618);
- PRINTF(VT_RST);
+ PRINTF_RST();
return;
}
frog->isDeactivating = false;
diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
index d4fd63c0e4..6f526c242e 100644
--- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
+++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
@@ -27,7 +27,7 @@ void EnGe1_Destroy(Actor* thisx, PlayState* play);
void EnGe1_Update(Actor* thisx, PlayState* play);
void EnGe1_Draw(Actor* thisx, PlayState* play);
-s32 EnGe1_CheckCarpentersFreed(void);
+s32 EnGe1_CheckAllCarpentersRescued(void);
void EnGe1_WatchForPlayerFrontOnly(EnGe1* this, PlayState* play);
void EnGe1_SetNormalText(EnGe1* this, PlayState* play);
void EnGe1_WatchForAndSensePlayer(EnGe1* this, PlayState* play);
@@ -114,7 +114,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
case GE1_TYPE_GATE_OPERATOR:
this->hairstyle = GE1_HAIR_STRAIGHT;
- if (EnGe1_CheckCarpentersFreed()) {
+ if (EnGe1_CheckAllCarpentersRescued()) {
this->actionFunc = EnGe1_CheckGate_GateOp;
} else {
this->actionFunc = EnGe1_WatchForPlayerFrontOnly;
@@ -124,7 +124,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
case GE1_TYPE_NORMAL:
this->hairstyle = GE1_HAIR_STRAIGHT;
- if (EnGe1_CheckCarpentersFreed()) {
+ if (EnGe1_CheckAllCarpentersRescued()) {
this->actionFunc = EnGe1_SetNormalText;
} else {
this->actionFunc = EnGe1_WatchForAndSensePlayer;
@@ -154,7 +154,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
if (GET_EVENTINF(EVENTINF_HORSES_08)) {
this->actionFunc = EnGe1_TalkAfterGame_Archery;
- } else if (EnGe1_CheckCarpentersFreed()) {
+ } else if (EnGe1_CheckAllCarpentersRescued()) {
this->actionFunc = EnGe1_Wait_Archery;
} else {
this->actionFunc = EnGe1_WatchForPlayerFrontOnly;
@@ -164,7 +164,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
case GE1_TYPE_TRAINING_GROUNDS_GUARD:
this->hairstyle = GE1_HAIR_STRAIGHT;
- if (EnGe1_CheckCarpentersFreed()) {
+ if (EnGe1_CheckAllCarpentersRescued()) {
this->actionFunc = EnGe1_CheckForCard_GTGGuard;
} else {
this->actionFunc = EnGe1_WatchForPlayerFrontOnly;
@@ -208,9 +208,9 @@ void EnGe1_SetAnimationIdle(EnGe1* this) {
this->animFunc = EnGe1_CueUpAnimation;
}
-s32 EnGe1_CheckCarpentersFreed(void) {
- if (!(GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(0)) && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(1)) &&
- GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(2)) && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(3)))) {
+s32 EnGe1_CheckAllCarpentersRescued(void) {
+ if (!(GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_0_RESCUED) && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_1_RESCUED) &&
+ GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_2_RESCUED) && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_3_RESCUED))) {
return false;
}
return true;
diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
index 8c466a25f7..0df133fe4f 100644
--- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
+++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
@@ -39,7 +39,7 @@ void EnGe2_Destroy(Actor* thisx, PlayState* play);
void EnGe2_Update(Actor* thisx, PlayState* play);
void EnGe2_Draw(Actor* thisx, PlayState* play);
-s32 EnGe2_CheckCarpentersFreed(void);
+s32 EnGe2_CheckAllCarpentersRescued(void);
void EnGe2_CaptureClose(EnGe2* this, PlayState* play);
void EnGe2_CaptureCharge(EnGe2* this, PlayState* play);
void EnGe2_CaptureTurn(EnGe2* this, PlayState* play);
@@ -137,14 +137,14 @@ void EnGe2_Init(Actor* thisx, PlayState* play) {
switch (PARAMS_GET_S(thisx->params, 0, 8)) {
case GE2_TYPE_PATROLLING:
EnGe2_ChangeAction(this, GE2_ACTION_WALK);
- if (EnGe2_CheckCarpentersFreed()) {
+ if (EnGe2_CheckAllCarpentersRescued()) {
this->actor.update = EnGe2_UpdateFriendly;
this->actor.attentionRangeType = ATTENTION_RANGE_6;
}
break;
case GE2_TYPE_STATIONARY:
EnGe2_ChangeAction(this, GE2_ACTION_STAND);
- if (EnGe2_CheckCarpentersFreed()) {
+ if (EnGe2_CheckAllCarpentersRescued()) {
this->actor.update = EnGe2_UpdateFriendly;
this->actor.attentionRangeType = ATTENTION_RANGE_6;
}
@@ -224,13 +224,11 @@ s32 Ge2_DetectPlayerInUpdate(PlayState* play, EnGe2* this, Vec3f* pos, s16 yRot,
return 1;
}
-s32 EnGe2_CheckCarpentersFreed(void) {
- if (CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] &
- (EVENTCHKINF_CARPENTERS_FREE_MASK_ALL | 0xF0),
- EVENTCHKINF_CARPENTERS_FREE_MASK_ALL)) {
- return 1;
+s32 EnGe2_CheckAllCarpentersRescued(void) {
+ if (GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED2()) {
+ return true;
}
- return 0;
+ return false;
}
// Actions
@@ -594,7 +592,7 @@ void EnGe2_Update(Actor* thisx, PlayState* play) {
}
EnGe2_MoveAndBlink(this, play);
- if (EnGe2_CheckCarpentersFreed() && !(this->stateFlags & GE2_STATE_KO)) {
+ if (EnGe2_CheckAllCarpentersRescued() && !(this->stateFlags & GE2_STATE_KO)) {
this->actor.update = EnGe2_UpdateFriendly;
this->actor.attentionRangeType = ATTENTION_RANGE_6;
}
@@ -620,7 +618,7 @@ void EnGe2_UpdateStunned(Actor* thisx, PlayState* play2) {
}
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
- if (EnGe2_CheckCarpentersFreed()) {
+ if (EnGe2_CheckAllCarpentersRescued()) {
this->actor.update = EnGe2_UpdateFriendly;
this->actor.attentionRangeType = ATTENTION_RANGE_6;
this->actor.colorFilterTimer = 0;
diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
index 4261af7b18..4ad132c690 100644
--- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
+++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
@@ -382,9 +382,9 @@ void EnGirlA_InitItem(EnGirlA* this, PlayState* play) {
if ((params >= SI_MAX) && (params < 0)) {
Actor_Kill(&this->actor);
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF("引数がおかしいよ(arg_data=%d)!!\n", this->actor.params);
- PRINTF(VT_RST);
+ PRINTF_RST();
ASSERT(0, "0", "../z_en_girlA.c", 1421);
return;
}
@@ -393,9 +393,9 @@ void EnGirlA_InitItem(EnGirlA* this, PlayState* play) {
if (this->requiredObjectSlot < 0) {
Actor_Kill(&this->actor);
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF("バンクが無いよ!!(%s)\n", sShopItemDescriptions[params]);
- PRINTF(VT_RST);
+ PRINTF_RST();
ASSERT(0, "0", "../z_en_girlA.c", 1434);
return;
}
diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c
index 55c10f147d..3ed42e5119 100644
--- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c
+++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c
@@ -73,10 +73,10 @@ void EnGm_Init(Actor* thisx, PlayState* play) {
this->gmObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GM);
if (this->gmObjectSlot < 0) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
// "There is no model bank! !! (Medi Goron)"
PRINTF("モデル バンクが無いよ!!(中ゴロン)\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
ASSERT(0, "0", "../z_en_gm.c", 145);
}
diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
index 923d4e3e70..56f7b6d975 100644
--- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
+++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
@@ -610,9 +610,9 @@ void EnGoroiwa_Roll(EnGoroiwa* this, PlayState* play) {
}
}
Actor_SetPlayerKnockbackLarge(play, &this->actor, 2.0f, this->actor.yawTowardsPlayer, 0.0f, 0);
- PRINTF(VT_FGCOL(CYAN));
+ PRINTF_COLOR_CYAN();
PRINTF("Player ぶっ飛ばし\n"); // "Player knocked down"
- PRINTF(VT_RST);
+ PRINTF_RST();
onHitSetupFuncs[PARAMS_GET_U(this->actor.params, 10, 1)](this);
Player_PlaySfx(GET_PLAYER(play), NA_SE_PL_BODY_HIT);
if ((this->actor.home.rot.z & 1) == 1) {
diff --git a/src/overlays/actors/ovl_En_Guest/z_en_guest.c b/src/overlays/actors/ovl_En_Guest/z_en_guest.c
index 9bb3cb6783..5c0a14f9d0 100644
--- a/src/overlays/actors/ovl_En_Guest/z_en_guest.c
+++ b/src/overlays/actors/ovl_En_Guest/z_en_guest.c
@@ -57,10 +57,10 @@ void EnGuest_Init(Actor* thisx, PlayState* play) {
} else {
this->osAnimeObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OS_ANIME);
if (this->osAnimeObjectSlot < 0) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
// "No such bank!!"
PRINTF("%s[%d] : バンクが無いよ!!\n", "../z_en_guest.c", 129);
- PRINTF(VT_RST);
+ PRINTF_RST();
ASSERT(0, "0", "../z_en_guest.c", 132);
}
}
diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
index 67e3dd162e..cf678bf1bc 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
@@ -457,7 +457,7 @@ s32 EnHorse_BgCheckBridgeJumpPoint(EnHorse* this, PlayState* play) {
if (this->actor.speed < 12.8f) {
return false;
}
- if (GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
return false;
}
@@ -3595,7 +3595,7 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) {
this->stateFlags &= ~ENHORSE_FLAG_24;
}
- if (play->sceneId == SCENE_GERUDO_VALLEY && !GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (play->sceneId == SCENE_GERUDO_VALLEY && !GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
EnHorse_CheckBridgeJumps(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Hy/z_en_hy.c b/src/overlays/actors/ovl_En_Hy/z_en_hy.c
index 2c20a18560..2aa163d0fb 100644
--- a/src/overlays/actors/ovl_En_Hy/z_en_hy.c
+++ b/src/overlays/actors/ovl_En_Hy/z_en_hy.c
@@ -605,7 +605,7 @@ u16 EnHy_GetTextId(PlayState* play, Actor* thisx) {
switch (ENHY_GET_TYPE(&this->actor)) {
case ENHY_TYPE_DOG_LADY:
if (play->sceneId == SCENE_KAKARIKO_CENTER_GUEST_HOUSE) {
- return (this->talonEventChkInf & EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_MASK)
+ return (this->talonEventChkInf & EVENTCHKINF_MASK(EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO))
? 0x508D
: (GET_INFTABLE(INFTABLE_CB) ? 0x508C : 0x508B);
} else if (play->sceneId == SCENE_MARKET_DAY) {
@@ -738,7 +738,7 @@ u16 EnHy_GetTextId(PlayState* play, Actor* thisx) {
if (!LINK_IS_ADULT) {
return GET_EVENTCHKINF(EVENTCHKINF_80) ? 0x505F : (GET_INFTABLE(INFTABLE_163) ? 0x505E : 0x505D);
} else {
- return (this->talonEventChkInf & EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_MASK)
+ return (this->talonEventChkInf & EVENTCHKINF_MASK(EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO))
? 0x5062
: (GET_INFTABLE(INFTABLE_164) ? 0x5061 : 0x5060);
}
@@ -1165,7 +1165,7 @@ void EnHy_WaitForObjects(EnHy* this, PlayState* play) {
}
if (play->sceneId == SCENE_KAKARIKO_CENTER_GUEST_HOUSE) {
- this->talonEventChkInf = gSaveContext.save.info.eventChkInf[EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX];
+ this->talonEventChkInf = gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_TALON_RETURNED_FROM_KAKARIKO];
}
EnHy_InitSetProperties(this);
diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c
index 27bc0890e8..36d9634f91 100644
--- a/src/overlays/actors/ovl_En_In/z_en_in.c
+++ b/src/overlays/actors/ovl_En_In/z_en_in.c
@@ -500,7 +500,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
respawnPos = respawn->pos;
// hardcoded coords for lon lon entrance
if (D_80A7B998 == 0 && respawnPos.x == 1107.0f && respawnPos.y == 0.0f && respawnPos.z == -3740.0f) {
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = 0;
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] = 0;
D_80A7B998 = 1;
}
this->actionFunc = EnIn_WaitForObject;
@@ -586,7 +586,7 @@ void EnIn_WaitForObject(EnIn* this, PlayState* play) {
case INGO_RACE_STATE_RACING:
EnIn_ChangeAnim(this, ENIN_ANIM_2);
this->actionFunc = func_80A7A4C8;
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = 0;
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] = 0;
break;
case INGO_RACE_STATE_HORSE_RENTAL_PERIOD:
this->actor.attentionRangeType = ATTENTION_RANGE_3;
diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.c b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
index 5fcc053a69..4740bbc791 100644
--- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c
+++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
@@ -578,10 +578,10 @@ void EnInsect_Dropped(EnInsect* this, PlayState* play) {
distanceSq = Math3D_Vec3fDistSq(&this->actor.world.pos, &this->soilActor->actor.world.pos);
} else {
if (this->insectFlags & INSECT_FLAG_FOUND_SOIL) {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
// "warning: target Actor is NULL"
PRINTF("warning:目標 Actor が NULL (%s %d)\n", "../z_en_mushi.c", 1046);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
distanceSq = 40.0f;
}
@@ -706,10 +706,10 @@ void EnInsect_Dropped(EnInsect* this, PlayState* play) {
} else if ((type == INSECT_TYPE_FIRST_DROPPED || type == INSECT_TYPE_EXTRA_DROPPED) &&
(this->insectFlags & INSECT_FLAG_0) && this->lifeTimer <= 0 && this->actionTimer <= 0 &&
this->actor.floorHeight < BGCHECK_Y_MIN + 10.0f) {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
// "BG missing? To do Actor_delete"
PRINTF("BG 抜け? Actor_delete します(%s %d)\n", "../z_en_mushi.c", 1197);
- PRINTF(VT_RST);
+ PRINTF_RST();
Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
index 9fb7bd587c..7e84670426 100644
--- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
+++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
@@ -125,10 +125,10 @@ s32 EnIshi_SnapToFloor(EnIshi* this, PlayState* play, f32 arg2) {
Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);
return true;
} else {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
// "Failure attaching to ground"
PRINTF("地面に付着失敗(%s %d)\n", "../z_en_ishi.c", 388);
- PRINTF(VT_RST);
+ PRINTF_RST();
return false;
}
}
diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
index d3dce9d5aa..03242220e0 100644
--- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
+++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
@@ -463,7 +463,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play2) {
this->actor.bgCheckFlags = tempBgFlags;
this->actor.depthInWater = tempDepthInWater;
- PRINTF(VT_RST);
+ PRINTF_RST();
if (1) {
u8 onGround = (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND);
@@ -727,9 +727,9 @@ void EnKanban_Update(Actor* thisx, PlayState* play2) {
bomb = bomb->next;
}
}
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("OCARINA_MODE %d\n", play->msgCtx.ocarinaMode);
- PRINTF(VT_RST);
+ PRINTF_RST();
switch (this->ocarinaFlag) {
case 0:
if (play->msgCtx.ocarinaMode == OCARINA_MODE_01) {
diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
index 0d938f45c6..e46125878e 100644
--- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
+++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
@@ -115,10 +115,10 @@ s32 EnKusa_SnapToFloor(EnKusa* this, PlayState* play, f32 yOffset) {
Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);
return true;
} else {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
// "Failure attaching to ground"
PRINTF("地面に付着失敗(%s %d)\n", "../z_en_kusa.c", 323);
- PRINTF(VT_RST);
+ PRINTF_RST();
return false;
}
}
diff --git a/src/overlays/actors/ovl_En_Mag/z_en_mag.c b/src/overlays/actors/ovl_En_Mag/z_en_mag.c
index 03a6851ef7..8de1d3058d 100644
--- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c
+++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c
@@ -639,7 +639,8 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) {
#endif
}
-#if OOT_NTSC
+ // TODO: implement for iQue
+#if OOT_NTSC && !PLATFORM_IQUE
if (gSaveContext.language == LANGUAGE_JPN) {
this->unk_E30C++;
gDPPipeSync(gfx++);
@@ -687,11 +688,11 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) {
gDPLoadTextureBlock(gfx++, gTitleCopyright1998Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 128, 16, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
-#elif OOT_VERSION < GC_US
+#elif PLATFORM_GC && OOT_VERSION < GC_US
gDPLoadTextureBlock(gfx++, gTitleCopyright19982002Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 160, 16, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
-#elif OOT_NTSC
+#elif PLATFORM_GC && OOT_NTSC
if (gSaveContext.language == LANGUAGE_JPN) {
gDPLoadTextureBlock(gfx++, gTitleCopyright19982002Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 160, 16, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
@@ -701,10 +702,12 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) {
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
}
-#else
+#elif PLATFORM_GC && OOT_PAL
gDPLoadTextureBlock(gfx++, gTitleCopyright19982003Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 160, 16, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
+#elif PLATFORM_IQUE
+ // TODO: implement for iQue
#endif
#if PLATFORM_N64
diff --git a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
index 28901f464d..3082b5c35d 100644
--- a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
+++ b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
@@ -100,7 +100,7 @@ void EnMm2_ChangeAnim(EnMm2* this, s32 index, s32* currentIndex) {
}
void func_80AAEF70(EnMm2* this, PlayState* play) {
- if (!GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (!GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
this->actor.textId = 0x6086;
} else if (GET_INFTABLE(INFTABLE_17F)) {
if (GET_EVENTINF(EVENTINF_MARATHON_ACTIVE)) {
diff --git a/src/overlays/actors/ovl_En_Mu/z_en_mu.c b/src/overlays/actors/ovl_En_Mu/z_en_mu.c
index 01c3788df9..dbe5e1b15c 100644
--- a/src/overlays/actors/ovl_En_Mu/z_en_mu.c
+++ b/src/overlays/actors/ovl_En_Mu/z_en_mu.c
@@ -64,9 +64,9 @@ void EnMu_Interact(EnMu* this, PlayState* play) {
s32 randomIndex;
s32 i;
- textFlags = gSaveContext.eventInf[EVENTINF_20_21_22_23_24_INDEX] &
+ textFlags = gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] &
(EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK);
- gSaveContext.eventInf[EVENTINF_20_21_22_23_24_INDEX] &=
+ gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] &=
~(EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK);
randomIndex = (play->state.frames + (s32)(Rand_ZeroOne() * 5.0f)) % 5;
@@ -95,7 +95,7 @@ void EnMu_Interact(EnMu* this, PlayState* play) {
textFlags |= bitmask[randomIndex];
this->defaultTextId = textIdOffset[randomIndex] | 0x7000;
textFlags &= EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK | 0xE0;
- gSaveContext.eventInf[EVENTINF_20_21_22_23_24_INDEX] |= textFlags;
+ gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] |= textFlags;
}
u16 EnMu_GetTextId(PlayState* play, Actor* thisx) {
diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c
index 88ec34a096..144c76b2cb 100644
--- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c
+++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c
@@ -66,8 +66,8 @@ static Vec3f sKakarikoPosList[] = {
};
static s16 sKakarikoFlagList[] = {
- INFTABLE_199_MASK, INFTABLE_19A_MASK, INFTABLE_19B_MASK, INFTABLE_19C_MASK,
- INFTABLE_19D_MASK, INFTABLE_19E_MASK, INFTABLE_19F_MASK,
+ INFTABLE_MASK(INFTABLE_199), INFTABLE_MASK(INFTABLE_19A), INFTABLE_MASK(INFTABLE_19B), INFTABLE_MASK(INFTABLE_19C),
+ INFTABLE_MASK(INFTABLE_19D), INFTABLE_MASK(INFTABLE_19E), INFTABLE_MASK(INFTABLE_19F),
};
static u8 sLowerRiverSpawned = false;
@@ -162,7 +162,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
fabsf(this->actor.world.pos.z - sKakarikoPosList[i].z) < 40.0f) {
this->unk_2AA = i;
PRINTF(VT_FGCOL(YELLOW) " 通常鶏index %d\n" VT_RST, this->unk_2AA);
- if (gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] &
+ if (gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] &
sKakarikoFlagList[i]) {
this->actor.world.pos.x = 300.0f;
this->actor.world.pos.y = 100.0f;
diff --git a/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c b/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c
index c58a8663f8..0415f95bb9 100644
--- a/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c
+++ b/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c
@@ -43,8 +43,8 @@ static s16 sMissingCuccoTextIds[] = {
};
static s16 D_80ABB3B4[] = {
- INFTABLE_199_MASK, INFTABLE_19A_MASK, INFTABLE_19B_MASK, INFTABLE_19C_MASK,
- INFTABLE_19D_MASK, INFTABLE_19E_MASK, INFTABLE_19F_MASK,
+ INFTABLE_MASK(INFTABLE_199), INFTABLE_MASK(INFTABLE_19A), INFTABLE_MASK(INFTABLE_19B), INFTABLE_MASK(INFTABLE_19C),
+ INFTABLE_MASK(INFTABLE_19D), INFTABLE_MASK(INFTABLE_19E), INFTABLE_MASK(INFTABLE_19F),
};
static ColliderCylinderInit sCylinderInit = {
@@ -210,7 +210,7 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
if ((fabsf(currentCucco->actor.world.pos.x - 330.0f) < 90.0f) &&
(fabsf(currentCucco->actor.world.pos.z - 1610.0f) < 190.0f)) {
if (this->unk_26C == 0) {
- gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] |=
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] |=
D_80ABB3B4[currentCucco->unk_2AA];
if (BREG(1) != 0) {
// "GET inside the chicken fence!"
@@ -219,7 +219,7 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
}
this->cuccosInPen++;
} else if (this->unk_26C == 0) {
- gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] &=
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] &=
~D_80ABB3B4[currentCucco->unk_2AA];
}
}
@@ -276,12 +276,13 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
this->unk_262 = TEXT_STATE_EVENT;
this->unk_26A = this->cuccosInPen;
PRINTF(VT_FGCOL(CYAN) "☆☆☆☆☆ 柵内BIT変更前 ☆☆ %x\n" VT_RST,
- gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX]);
- gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] &=
- (u16) ~(INFTABLE_199_MASK | INFTABLE_19A_MASK | INFTABLE_19B_MASK | INFTABLE_19C_MASK |
- INFTABLE_19D_MASK | INFTABLE_19E_MASK | INFTABLE_19F_MASK);
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F]);
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] &=
+ (u16) ~(INFTABLE_MASK(INFTABLE_199) | INFTABLE_MASK(INFTABLE_19A) | INFTABLE_MASK(INFTABLE_19B) |
+ INFTABLE_MASK(INFTABLE_19C) | INFTABLE_MASK(INFTABLE_19D) | INFTABLE_MASK(INFTABLE_19E) |
+ INFTABLE_MASK(INFTABLE_19F));
PRINTF(VT_FGCOL(CYAN) "☆☆☆☆☆ 柵内BIT変更後 ☆☆ %x\n" VT_RST,
- gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX]);
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F]);
PRINTF("\n\n");
this->actionFunc = func_80ABA654;
return;
diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
index 2016b3bafb..a083ef85d7 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
@@ -593,9 +593,9 @@ void EnOssan_Init(Actor* thisx, PlayState* play) {
//! @bug This check will always evaluate to false, it should be || not &&
if (this->actor.params > OSSAN_TYPE_MASK && this->actor.params < OSSAN_TYPE_KOKIRI) {
Actor_Kill(&this->actor);
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF("引数がおかしいよ(arg_data=%d)!!\n", this->actor.params);
- PRINTF(VT_RST);
+ PRINTF_RST();
ASSERT(0, "0", "../z_en_oB1.c", 1246);
return;
}
@@ -622,18 +622,18 @@ void EnOssan_Init(Actor* thisx, PlayState* play) {
if (this->objectSlot1 < 0) {
Actor_Kill(&this->actor);
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF("バンクが無いよ!!(%s)\n", sShopkeeperPrintName[this->actor.params]);
- PRINTF(VT_RST);
+ PRINTF_RST();
ASSERT(0, "0", "../z_en_oB1.c", 1284);
return;
}
if (EnOssan_TryGetObjBankIndices(this, play, objectIds) == 0) {
Actor_Kill(&this->actor);
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF("予備バンクが無いよ!!(%s)\n", sShopkeeperPrintName[this->actor.params]);
- PRINTF(VT_RST);
+ PRINTF_RST();
ASSERT(0, "0", "../z_en_oB1.c", 1295);
return;
}
@@ -2127,10 +2127,10 @@ void EnOssan_InitActionFunc(EnOssan* this, PlayState* play) {
this->shelves = (EnTana*)Actor_Find(&play->actorCtx, ACTOR_EN_TANA, ACTORCAT_PROP);
if (this->shelves == NULL) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
// "Warning!! There are no shelves!!"
PRINTF("★★★ 警告!! 棚がないよ!! ★★★\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
return;
}
diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c
index c5ed802b70..46696027f4 100644
--- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c
+++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c
@@ -220,11 +220,11 @@ void EnOwl_Init(Actor* thisx, PlayState* play) {
break;
default:
// Outside kokiri forest
- PRINTF(VT_FGCOL(CYAN));
+ PRINTF_COLOR_CYAN();
PRINTF("no = %d \n", owlType);
PRINTF(T("未完成のフクロウ未完成のフクロウ未完成のフクロウ\n",
"Unfinished owl unfinished owl unfinished owl\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
this->actionFlags |= 2;
this->unk_3EE = 0x20;
this->actionFunc = EnOwl_WaitOutsideKokiri;
@@ -927,14 +927,14 @@ void func_80ACC00C(EnOwl* this, PlayState* play) {
if (this->actor.xzDistToPlayer < 50.0f) {
if (!Play_InCsMode(play)) {
owlType = PARAMS_GET_S(this->actor.params, 6, 6);
- PRINTF(VT_FGCOL(CYAN));
+ PRINTF_COLOR_CYAN();
PRINTF(T("%dのフクロウ\n", "%d owl\n"), owlType);
- PRINTF(VT_RST);
+ PRINTF_RST();
switch (owlType) {
case 7:
- PRINTF(VT_FGCOL(CYAN));
+ PRINTF_COLOR_CYAN();
PRINTF(T("SPOT 06 の デモがはしった\n", "Demo of SPOT 06 has been completed\n"));
- PRINTF(VT_RST);
+ PRINTF_RST();
play->csCtx.script = SEGMENTED_TO_VIRTUAL(gLakeHyliaOwlCs);
this->actor.draw = NULL;
break;
diff --git a/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c b/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c
index b4de777c72..00eff4a39f 100644
--- a/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c
+++ b/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c
@@ -143,7 +143,8 @@ static EnPoFieldInfo sPoFieldInfo[2] = {
static Vec3f D_80AD714C = { 0.0f, 1400.0f, 0.0f };
-#pragma increment_block_number "gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128 ntsc-1.2:128"
+#pragma increment_block_number "gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128 ntsc-1.2:128 pal-1.0:128" \
+ "pal-1.1:128"
static Vec3s sSpawnPositions[10];
static u8 sSpawnSwitchFlags[10];
diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c
index e4ad439806..ac10651812 100644
--- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c
+++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c
@@ -74,19 +74,18 @@ static EnSthActionFunc sRewardObtainedWaitActions[6] = {
};
static u16 sEventFlags[6] = {
- 0, EVENTCHKINF_DA_MASK, EVENTCHKINF_DB_MASK, EVENTCHKINF_DC_MASK, EVENTCHKINF_DD_MASK, EVENTCHKINF_DE_MASK,
+ 0,
+ EVENTCHKINF_MASK(EVENTCHKINF_SKULLTULA_REWARD_10),
+ EVENTCHKINF_MASK(EVENTCHKINF_SKULLTULA_REWARD_20),
+ EVENTCHKINF_MASK(EVENTCHKINF_SKULLTULA_REWARD_30),
+ EVENTCHKINF_MASK(EVENTCHKINF_SKULLTULA_REWARD_40),
+ EVENTCHKINF_MASK(EVENTCHKINF_SKULLTULA_REWARD_50),
};
static s16 sGetItemIds[6] = {
GI_RUPEE_GOLD, GI_WALLET_ADULT, GI_STONE_OF_AGONY, GI_WALLET_GIANT, GI_BOMBCHUS_10, GI_HEART_PIECE,
};
-static Vec3f D_80B0B49C = { 700.0f, 400.0f, 0.0f };
-
-static Color_RGB8 sTunicColors[6] = {
- { 190, 110, 0 }, { 0, 180, 110 }, { 0, 255, 80 }, { 255, 160, 60 }, { 190, 230, 250 }, { 240, 230, 120 },
-};
-
void EnSth_SetupAction(EnSth* this, EnSthActionFunc actionFunc) {
this->actionFunc = actionFunc;
}
@@ -114,7 +113,7 @@ void EnSth_Init(Actor* thisx, PlayState* play) {
}
objectId = sObjectIds[params];
- if (objectId != 1) {
+ if (objectId != OBJECT_GAMEPLAY_KEEP) {
objectSlot = Object_GetSlot(&play->objectCtx, objectId);
} else {
objectSlot = 0;
@@ -154,9 +153,9 @@ void EnSth_SetupAfterObjectLoaded(EnSth* this, PlayState* play) {
16);
Animation_PlayLoop(&this->skelAnime, sAnimations[this->actor.params]);
- this->eventFlag = sEventFlags[this->actor.params];
params = &this->actor.params;
- if (gSaveContext.save.info.eventChkInf[EVENTCHKINF_DA_DB_DC_DD_DE_INDEX] & this->eventFlag) {
+ this->eventFlag = sEventFlags[*params];
+ if (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_SKULLTULA_REWARD] & this->eventFlag) {
EnSth_SetupAction(this, sRewardObtainedWaitActions[*params]);
} else {
EnSth_SetupAction(this, EnSth_RewardUnobtainedWait);
@@ -256,7 +255,7 @@ void EnSth_GiveReward(EnSth* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
EnSth_SetupAction(this, EnSth_RewardObtainedTalk);
- gSaveContext.save.info.eventChkInf[EVENTCHKINF_DA_DB_DC_DD_DE_INDEX] |= this->eventFlag;
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_SKULLTULA_REWARD] |= this->eventFlag;
} else {
EnSth_GivePlayerItem(this, play);
}
@@ -358,6 +357,7 @@ s32 EnSth_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
}
void EnSth_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ static Vec3f D_80B0B49C = { 700.0f, 400.0f, 0.0f };
EnSth* this = (EnSth*)thisx;
if (limbIndex == 15) {
@@ -383,6 +383,9 @@ Gfx* EnSth_AllocColorDList(GraphicsContext* play, u8 envR, u8 envG, u8 envB, u8
}
void EnSth_Draw(Actor* thisx, PlayState* play) {
+ static Color_RGB8 sShirtColors[6] = {
+ { 190, 110, 0 }, { 0, 180, 110 }, { 0, 255, 80 }, { 255, 160, 60 }, { 190, 230, 250 }, { 240, 230, 120 },
+ };
EnSth* this = (EnSth*)thisx;
Color_RGB8* envColor1;
@@ -392,8 +395,8 @@ void EnSth_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL_37Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
- EnSth_AllocColorDList(play->state.gfxCtx, sTunicColors[this->actor.params].r,
- sTunicColors[this->actor.params].g, sTunicColors[this->actor.params].b, 255));
+ EnSth_AllocColorDList(play->state.gfxCtx, sShirtColors[this->actor.params].r,
+ sShirtColors[this->actor.params].g, sShirtColors[this->actor.params].b, 255));
if (this->actor.params == 0) {
gSPSegment(POLY_OPA_DISP++, 0x09, EnSth_AllocColorDList(play->state.gfxCtx, 190, 110, 0, 255));
diff --git a/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c b/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c
index ab2c9aaf77..5b31c32f84 100644
--- a/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c
+++ b/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c
@@ -258,7 +258,7 @@ s32 EnToryo_GetTextId(EnToryo* this, PlayState* play) {
if (textId == 0) {
if (this->stateFlags & 1) {
- if (GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
ret = 0x606C;
} else if (GET_INFTABLE(INFTABLE_170)) {
ret = 0x606B;
diff --git a/src/overlays/actors/ovl_Fishing/z_fishing.c b/src/overlays/actors/ovl_Fishing/z_fishing.c
index ebb4a45787..a2c5ee5ae6 100644
--- a/src/overlays/actors/ovl_Fishing/z_fishing.c
+++ b/src/overlays/actors/ovl_Fishing/z_fishing.c
@@ -35,7 +35,7 @@
#include "cic6105.h"
#endif
-#pragma increment_block_number "gc-eu:170 gc-eu-mq:170 gc-jp:170 gc-jp-ce:170 gc-jp-mq:170 gc-us:170 gc-us-mq:170" \
+#pragma increment_block_number "gc-eu:167 gc-eu-mq:167 gc-jp:167 gc-jp-ce:167 gc-jp-mq:167 gc-us:167 gc-us-mq:167" \
"ntsc-1.0:121 ntsc-1.1:121 ntsc-1.2:121 pal-1.0:121 pal-1.1:121"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
@@ -5172,11 +5172,11 @@ void Fishing_UpdateOwner(Actor* thisx, PlayState* play2) {
#if DEBUG_FEATURES
if (0) {
// Strings existing only in rodata
- PRINTF(VT_FGCOL(GREEN));
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_GREEN();
+ PRINTF_COLOR_YELLOW();
PRINTF("plays %x\n");
PRINTF("ys %x\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
}
#endif
@@ -5676,9 +5676,9 @@ void Fishing_UpdateOwner(Actor* thisx, PlayState* play2) {
sREG(14) = 0;
#endif
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("zelda_time %x\n", ((void)0, gSaveContext.save.dayTime));
- PRINTF(VT_RST);
+ PRINTF_RST();
if (sStormChanceTimer >= 2) {
sStormChanceTimer--;
diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
index 1e34d1c586..a7bf1716d7 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
@@ -472,18 +472,18 @@ void ObjBean_Init(Actor* thisx, PlayState* play) {
if (Flags_GetSwitch(play, PARAMS_GET_U(this->dyna.actor.params, 0, 6)) || (DEBUG_FEATURES && mREG(1) == 1)) {
path = PARAMS_GET_U(this->dyna.actor.params, 8, 5);
if (path == 0x1F) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
// "No path data?"
PRINTF("パスデータが無い?(%s %d)(arg_data %xH)\n", "../z_obj_bean.c", 909, this->dyna.actor.params);
- PRINTF(VT_RST);
+ PRINTF_RST();
Actor_Kill(&this->dyna.actor);
return;
}
if (play->pathList[path].count < 3) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
// "Incorrect number of path data"
PRINTF("パスデータ数が不正(%s %d)(arg_data %xH)\n", "../z_obj_bean.c", 921, this->dyna.actor.params);
- PRINTF(VT_RST);
+ PRINTF_RST();
Actor_Kill(&this->dyna.actor);
return;
}
@@ -888,10 +888,10 @@ void ObjBean_Update(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.shadowScale = this->dyna.actor.scale.x * 88.0f;
if (ObjBean_CheckForHorseTrample(this, play)) {
- PRINTF(VT_FGCOL(CYAN));
+ PRINTF_COLOR_CYAN();
// "Horse and bean tree lift collision"
PRINTF("馬と豆の木リフト衝突!!!\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
ObjBean_Break(this, play);
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
func_80B908EC(this);
diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
index a2d8dbbb12..adecf7e08b 100644
--- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
+++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
@@ -188,10 +188,10 @@ void ObjLightswitch_Init(Actor* thisx, PlayState* play) {
if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_OBJ_OSHIHIKI, this->actor.home.pos.x,
this->actor.home.pos.y, this->actor.home.pos.z, 0, this->actor.home.rot.y, 0,
(0xFF << 8) | PUSHBLOCK_SMALL_START_ON) == NULL) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
// "Push-pull block occurrence failure"
PRINTF("押引ブロック発生失敗(%s %d)(arg_data 0x%04x)\n", "../z_obj_lightswitch.c", 452, this->actor.params);
- PRINTF(VT_RST);
+ PRINTF_RST();
removeSelf = true;
}
}
diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
index 82e10d0f23..7ac997ae62 100644
--- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
+++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
@@ -32,15 +32,15 @@ void ObjMakekinsuta_Init(Actor* thisx, PlayState* play) {
ObjMakekinsuta* this = (ObjMakekinsuta*)thisx;
if (PARAMS_GET_NOSHIFT(this->actor.params, 13, 2) == 0x4000) {
- PRINTF(VT_FGCOL(BLUE));
+ PRINTF_COLOR_BLUE();
// "Gold Star Enemy(arg_data %x)"
PRINTF("金スタ発生敵(arg_data %x)\n", this->actor.params);
- PRINTF(VT_RST);
+ PRINTF_RST();
} else {
- PRINTF(VT_COL(YELLOW, BLACK));
+ PRINTF_COLOR_WARNING();
// "Invalid Argument (arg_data %x)(%s %d)"
PRINTF("引数不正 (arg_data %x)(%s %d)\n", this->actor.params, "../z_obj_makekinsuta.c", 119);
- PRINTF(VT_RST);
+ PRINTF_RST();
}
this->actionFunc = func_80B98320;
}
diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
index 1cc2161196..3ea20567ef 100644
--- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
+++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
@@ -72,9 +72,9 @@ void ObjMakeoshihiki_Init(Actor* thisx, PlayState* play) {
if (Actor_SpawnAsChild(&play->actorCtx, thisx, play, ACTOR_OBJ_OSHIHIKI, spawnPos->x, spawnPos->y, spawnPos->z, 0,
block->rotY, 0, ((block->color << 6) & 0xC0) | (block->type & 0xF) | 0xFF00) == NULL) {
// "Push-pull block failure"
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF("Error : 押し引きブロック発生失敗(%s %d)\n", "../z_obj_makeoshihiki.c", 194);
- PRINTF(VT_RST);
+ PRINTF_RST();
Actor_Kill(thisx);
return;
}
diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
index 05f23ebaaf..e791de6297 100644
--- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
+++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
@@ -322,9 +322,9 @@ void ObjSwitch_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE;
if (OBJSWITCH_FROZEN(&this->dyna.actor) && (ObjSwitch_SpawnIce(this, play) == NULL)) {
- PRINTF(VT_FGCOL(RED));
+ PRINTF_COLOR_RED();
PRINTF("Error : 氷発生失敗 (%s %d)\n", "../z_obj_switch.c", 732);
- PRINTF(VT_RST);
+ PRINTF_RST();
this->dyna.actor.params &= ~OBJSWITCH_FROZEN_FLAG;
}
diff --git a/src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c b/src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c
index ac422c63e8..94c6618470 100644
--- a/src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c
+++ b/src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c
@@ -264,9 +264,9 @@ void func_80BA24F8(ObjWarp2block* this, PlayState* play) {
this->unk_174++;
if (this->unk_174 > 60) {
- PRINTF(VT_COL(RED, WHITE));
+ PRINTF_COLOR_ERROR();
PRINTF("Error : 時のブロック(ワープ2)が対でセットされていません(%s %d)\n", "../z_obj_warp2block.c", 505);
- PRINTF(VT_RST);
+ PRINTF_RST();
Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
index 7953afe1f8..5aeb61031a 100644
--- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
+++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
@@ -85,17 +85,17 @@ void OceffSpot_End(OceffSpot* this, PlayState* play) {
if (play->msgCtx.ocarinaAction != OCARINA_ACTION_CHECK_NOWARP_DONE ||
play->msgCtx.ocarinaMode != OCARINA_MODE_08) {
gSaveContext.sunsSongState = SUNSSONG_START;
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
// "Sun's Song Flag"
PRINTF("z_oceff_spot 太陽の歌フラグ\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
}
} else {
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
// "Ocarina End"
PRINTF("z_oceff_spot オカリナ終了\n");
- PRINTF(VT_RST);
+ PRINTF_RST();
}
}
}
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index b4b3a94773..820bd3978c 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -338,14 +338,14 @@ static s32 D_80858AA0;
// TODO: There's probably a way to match BSS ordering with less padding by spreading the variables out and moving
// data around. It would be easier if we had more options for controlling BSS ordering in debug.
-#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
+#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
static s32 sSavedCurrentMask;
static Vec3f sInteractWallCheckResult;
static Input* sControlInput;
-#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \
+#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
"ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
// .data
@@ -10760,7 +10760,7 @@ void Player_Init(Actor* thisx, PlayState* play2) {
gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 1;
if (play->sceneId <= SCENE_INSIDE_GANONS_CASTLE_COLLAPSE) {
- gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] |= gBitFlags[play->sceneId];
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_1AX] |= gBitFlags[play->sceneId];
}
startMode = PLAYER_GET_START_MODE(thisx);
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
index f0e265f931..f7c6b6e691 100644
--- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
@@ -1908,10 +1908,10 @@ void FileSelect_LoadGame(GameState* thisx) {
// capacity and `magicFillTarget`
gSaveContext.save.info.playerData.magicLevel = gSaveContext.save.info.playerData.magic = 0;
- PRINTF(VT_FGCOL(GREEN));
+ PRINTF_COLOR_GREEN();
PRINTF("Z_MAGIC_NOW_NOW=%d MAGIC_NOW=%d\n", ((void)0, gSaveContext.magicFillTarget),
gSaveContext.save.info.playerData.magic);
- PRINTF(VT_RST);
+ PRINTF_RST();
gSaveContext.save.info.playerData.naviTimer = 0;
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset.c
index f148c1d78b..9bafd123bd 100644
--- a/src/overlays/gamestates/ovl_file_choose/z_file_nameset.c
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset.c
@@ -1347,13 +1347,13 @@ void FileSelect_UpdateOptionsMenu(GameState* thisx) {
#endif
PRINTF("SAVE");
Sram_WriteSramHeader(sramCtx);
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("sram->read_buff[2] = J_N = %x\n", sramCtx->readBuff[2]);
PRINTF("sram->read_buff[2] = J_N = %x\n", &sramCtx->readBuff[2]);
PRINTF("Na_SetSoundOutputMode = %d\n", gSaveContext.audioSetting);
PRINTF("Na_SetSoundOutputMode = %d\n", gSaveContext.audioSetting);
PRINTF("Na_SetSoundOutputMode = %d\n", gSaveContext.audioSetting);
- PRINTF(VT_RST);
+ PRINTF_RST();
func_800F6700(gSaveContext.audioSetting);
PRINTF("終了\n");
return;
diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c
index 2777ac889d..2151159c2a 100644
--- a/src/overlays/gamestates/ovl_select/z_select.c
+++ b/src/overlays/gamestates/ovl_select/z_select.c
@@ -20,9 +20,9 @@ void MapSelect_LoadTitle(MapSelectState* this) {
}
void MapSelect_LoadGame(MapSelectState* this, s32 entranceIndex) {
- PRINTF(VT_FGCOL(BLUE));
+ PRINTF_COLOR_BLUE();
PRINTF("\n\n\nFILE_NO=%x\n\n\n", gSaveContext.fileNum);
- PRINTF(VT_RST);
+ PRINTF_RST();
if (gSaveContext.fileNum == 0xFF) {
Sram_InitDebugSave();
// Set the fill target to be the saved magic amount
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c
index 33c98159c9..e633b06e2e 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c
@@ -466,7 +466,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
Inventory_ChangeEquipment(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP]);
if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) {
- gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 0;
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] = 0;
gSaveContext.save.info.equips.buttonItems[0] = cursorItem;
if ((pauseCtx->cursorX[PAUSE_EQUIP] == 3) && (gSaveContext.save.info.playerData.bgsFlag != 0)) {
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
index bc45e22551..7a6cff2334 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
@@ -16,7 +16,7 @@
#include "terminal.h"
#include "versions.h"
-#pragma increment_block_number "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#if !PLATFORM_GC
#define KALEIDO_PROMPT_CURSOR_R 100
@@ -1877,10 +1877,10 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
#if DEBUG_FEATURES
if (pauseCtx->pageIndex == PAUSE_MAP) {
if (YREG(7) != 0) {
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("キンスタ数(%d) Get_KIN_STA=%x (%x) (%x)\n", YREG(6), GET_GS_FLAGS(YREG(6)),
gAreaGsFlags[YREG(6)], gSaveContext.save.info.gsFlags[YREG(6) >> 2]);
- PRINTF(VT_RST);
+ PRINTF_RST();
YREG(7) = 0;
SET_GS_FLAGS(D_8082AE30[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]],
@@ -4554,7 +4554,7 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.healthAccumulator = 0;
gSaveContext.magicState = MAGIC_STATE_IDLE;
gSaveContext.prevMagicState = MAGIC_STATE_IDLE;
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("MAGIC_NOW=%d ", gSaveContext.save.info.playerData.magic);
PRINTF("Z_MAGIC_NOW_NOW=%d → ", gSaveContext.magicFillTarget);
gSaveContext.magicCapacity = 0;
@@ -4565,7 +4565,7 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.save.info.playerData.magicLevel = gSaveContext.save.info.playerData.magic = 0;
PRINTF("MAGIC_NOW=%d ", gSaveContext.save.info.playerData.magic);
PRINTF("Z_MAGIC_NOW_NOW=%d\n", gSaveContext.magicFillTarget);
- PRINTF(VT_RST);
+ PRINTF_RST();
} else {
play->state.running = false;
SET_NEXT_GAMESTATE(&play->state, TitleSetup_Init, TitleSetupState);
@@ -4636,13 +4636,13 @@ void KaleidoScope_Update(PlayState* play) {
gSaveContext.buttonStatus[3] = D_808321A8[3];
gSaveContext.buttonStatus[4] = D_808321A8[4];
interfaceCtx->unk_1FA = interfaceCtx->unk_1FC = 0;
- PRINTF(VT_FGCOL(YELLOW));
+ PRINTF_COLOR_YELLOW();
PRINTF("i=%d LAST_TIME_TYPE=%d\n", i, gSaveContext.prevHudVisibilityMode);
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
Interface_ChangeHudVisibilityMode(gSaveContext.prevHudVisibilityMode);
player->talkActor = NULL;
Player_SetEquipmentData(play, player);
- PRINTF(VT_RST);
+ PRINTF_RST();
break;
}
}
diff --git a/tools/.gitignore b/tools/.gitignore
index 9583c693b9..8d3a321faa 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -9,4 +9,5 @@ reloc_prereq
vtxdis
yaz0
-graphovl/
+ido_recomp/
+egcs/
diff --git a/tools/Makefile b/tools/Makefile
index 3cde87ebc2..b50027312d 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -1,6 +1,23 @@
CFLAGS := -Wall -Wextra -pedantic -std=c99 -g -O2
PROGRAMS := elf2rom makeromfs mkdmadata mkldscript preprocess_pragmas reloc_prereq vtxdis
+UNAME_S := $(shell uname -s)
+ifeq ($(UNAME_S),Linux)
+ DETECTED_OS=linux
+else ifeq ($(UNAME_S),Darwin)
+ DETECTED_OS=macos
+else
+ $(error Unsupported OS: $(UNAME_S))
+endif
+
+IDO_RECOMP_VERSION := v1.2
+IDO_RECOMP_5_3_DIR := ido_recomp/$(DETECTED_OS)/5.3
+IDO_RECOMP_7_1_DIR := ido_recomp/$(DETECTED_OS)/7.1
+
+EGCS_BINUTILS_VERSION := 0.6
+EGCS_GCC_VERSION := 0.7
+EGCS_DIR := egcs/$(DETECTED_OS)
+
ifeq ($(shell command -v clang >/dev/null 2>&1; echo $$?),0)
CC := clang
else
@@ -17,13 +34,14 @@ ifneq ($(LLD),0)
CFLAGS += -fuse-ld=lld
endif
-all: $(PROGRAMS)
+all: $(PROGRAMS) $(IDO_RECOMP_5_3_DIR) $(IDO_RECOMP_7_1_DIR) $(EGCS_DIR)
$(MAKE) -C ZAPD
$(MAKE) -C fado
$(MAKE) -C audio
clean:
$(RM) $(PROGRAMS) $(addsuffix .exe,$(PROGRAMS))
+ $(RM) -r ido_recomp egcs
$(MAKE) -C ZAPD clean
$(MAKE) -C fado clean
$(MAKE) -C audio clean
@@ -48,3 +66,16 @@ $(1): $($1_SOURCES)
endef
$(foreach p,$(PROGRAMS),$(eval $(call COMPILE,$(p))))
+
+$(IDO_RECOMP_5_3_DIR):
+ mkdir -p $@
+ curl -sL https://github.com/decompals/ido-static-recomp/releases/download/$(IDO_RECOMP_VERSION)/ido-5.3-recomp-$(DETECTED_OS).tar.gz | tar xz -C $@
+
+$(IDO_RECOMP_7_1_DIR):
+ mkdir -p $@
+ curl -sL https://github.com/decompals/ido-static-recomp/releases/download/$(IDO_RECOMP_VERSION)/ido-7.1-recomp-$(DETECTED_OS).tar.gz | tar xz -C $@
+
+$(EGCS_DIR):
+ mkdir -p $@
+ curl -sL https://github.com/decompals/mips-binutils-egcs-2.9.5/releases/download/$(EGCS_BINUTILS_VERSION)/mips-binutils-egcs-2.9.5-$(DETECTED_OS).tar.gz | tar xz -C $@
+ curl -sL https://github.com/decompals/mips-gcc-egcs-2.91.66/releases/download/$(EGCS_GCC_VERSION)/mips-gcc-egcs-2.91.66-$(DETECTED_OS).tar.gz | tar xz -C $@
diff --git a/tools/ZAPDConfigs/ique-cn/Config.xml b/tools/ZAPDConfigs/ique-cn/Config.xml
new file mode 100644
index 0000000000..b2f4e3e4d3
--- /dev/null
+++ b/tools/ZAPDConfigs/ique-cn/Config.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/ZAPDConfigs/ique-cn/SymbolMap.txt b/tools/ZAPDConfigs/ique-cn/SymbolMap.txt
new file mode 100644
index 0000000000..52ff547fde
--- /dev/null
+++ b/tools/ZAPDConfigs/ique-cn/SymbolMap.txt
@@ -0,0 +1,2 @@
+80106980 gMtxClear
+80AE0B10 sShadowTex
diff --git a/tools/audio/soundfont_compiler.c b/tools/audio/soundfont_compiler.c
index 3dbf18eaa5..4f9a5779c4 100644
--- a/tools/audio/soundfont_compiler.c
+++ b/tools/audio/soundfont_compiler.c
@@ -1076,7 +1076,7 @@ emit_c_samples(FILE *out, soundfont *sf)
"NO_REORDER SECTION_DATA ALIGNED(16) AdpcmBookHeader SF%d_%s_BOOK_HEADER = {" "\n"
" %d, %d," "\n"
"};" "\n"
- "NO_REORDER SECTION_DATA AdpcmBookData SF%d_%s_BOOK_DATA = {" "\n",
+ "NO_REORDER SECTION_DATA s16 SF%d_%s_BOOK_DATA[] = {" "\n",
// clang-format on
sf->info.index, bookname, sample->aifc.book.order, sample->aifc.book.npredictors, sf->info.index,
bookname);
diff --git a/tools/compress.py b/tools/compress.py
index 8abb8b09c6..f4d6a7e95e 100755
--- a/tools/compress.py
+++ b/tools/compress.py
@@ -17,6 +17,12 @@ import crunch64
import dmadata
+COMPRESSION_METHODS = {
+ "yaz0": crunch64.yaz0.compress,
+ "gzip": crunch64.gzip.compress,
+}
+
+
def align(v: int):
v += 0xF
return v // 0x10 * 0x10
@@ -48,15 +54,24 @@ def compress_rom(
rom_data: memoryview,
dmadata_start: int,
compress_entries_indices: set[int],
+ compression_format: str,
+ pad_to_multiple_of: int,
+ fill_padding_bytes: bool,
n_threads: int = None,
):
"""
rom_data: the uncompressed rom data
dmadata_start: the offset in the rom where the dmadata starts
compress_entries_indices: the indices in the dmadata of the segments that should be compressed
+ compression_format: the compression format to use
+ pad_to_multiple_of: pad the compressed rom to a multiple of this size, in bytes
+ fill_padding_bytes: fill the padding bytes with a 0x00 0x01 0x02 ... pattern instead of zeros
n_threads: how many cores to use for compression
"""
+ # Compression function
+ compress = COMPRESSION_METHODS[compression_format]
+
# Segments of the compressed rom (not all are compressed)
compressed_rom_segments: list[RomSegment] = []
@@ -80,7 +95,7 @@ def compress_rom(
if is_compressed:
segment_data = None
segment_data_async = p.apply_async(
- crunch64.yaz0.compress,
+ compress,
(bytes(segment_data_uncompressed),),
)
else:
@@ -149,7 +164,6 @@ def compress_rom(
compressed_rom_size = sum(
align(len(segment.data)) for segment in compressed_rom_segments
)
- pad_to_multiple_of = 8 * 2**20 # 8 MiB
compressed_rom_size_padded = (
(compressed_rom_size + pad_to_multiple_of - 1)
// pad_to_multiple_of
@@ -186,9 +200,10 @@ def compress_rom(
)
assert rom_offset == compressed_rom_size
- # Pad the compressed rom with the pattern matching the baseroms
- for i in range(compressed_rom_size, compressed_rom_size_padded):
- compressed_rom_data[i] = i % 256
+ if fill_padding_bytes:
+ # Pad the compressed rom with the pattern matching the baseroms
+ for i in range(compressed_rom_size, compressed_rom_size_padded):
+ compressed_rom_data[i] = i % 256
# Write the new dmadata
offset = dmadata_start
@@ -233,6 +248,25 @@ def main():
" e.g. '0-1,3,5,6-9' is all indices from 0 to 9 (included) except 2 and 4."
),
)
+ parser.add_argument(
+ "--format",
+ dest="format",
+ choices=COMPRESSION_METHODS.keys(),
+ default="yaz0",
+ help="compression format to use (default: yaz0)",
+ )
+ parser.add_argument(
+ "--pad-to",
+ dest="pad_to",
+ type=lambda s: int(s, 16),
+ help="pad the compressed rom to a multiple of this size, in hex (e.g. 0x800000 for 8 MiB)",
+ )
+ parser.add_argument(
+ "--fill-padding-bytes",
+ dest="fill_padding_bytes",
+ action="store_true",
+ help="fill the padding bytes with a 0x00 0x01 0x02 ... pattern instead of zeros",
+ )
parser.add_argument(
"--threads",
dest="n_threads",
@@ -269,6 +303,9 @@ def main():
range(compress_range_first, compress_range_last + 1)
)
+ compression_format = args.format
+ pad_to_multiple_of = args.pad_to
+ fill_padding_bytes = args.fill_padding_bytes
n_threads = args.n_threads
in_rom_data = in_rom_p.read_bytes()
@@ -276,6 +313,9 @@ def main():
memoryview(in_rom_data),
dmadata_start,
compress_entries_indices,
+ compression_format,
+ pad_to_multiple_of,
+ fill_padding_bytes,
n_threads,
)
out_rom_p.write_bytes(out_rom_data)
diff --git a/tools/disasm/ique-cn/file_addresses.csv b/tools/disasm/ique-cn/file_addresses.csv
new file mode 100644
index 0000000000..3f3c9d9590
--- /dev/null
+++ b/tools/disasm/ique-cn/file_addresses.csv
@@ -0,0 +1,472 @@
+name,vrom_start,vrom_end,rom_start,rom_end,vram_start,overlay_dir
+boot,1050,B7A0,1050,0,80000450,
+code,AB0000,BB8FA0,A890F0,B08080,80018FA0,
+ovl_title,BB8FA0,BB98D0,B08080,B08650,80800000,gamestates
+ovl_select,BB98D0,BBC550,B08650,B09C90,80800930,gamestates
+ovl_opening,BBC550,BBC6A0,B09C90,B09DA0,808035B0,gamestates
+ovl_file_choose,BBC6A0,BCD170,B09DA0,B114B0,80803700,gamestates
+ovl_kaleido_scope,BCD170,BE91A0,B114B0,B1CE20,808141F0,misc
+ovl_player_actor,BE91A0,C0F8B0,B1CE20,B318E0,80830290,actors
+ovl_map_mark_data,C0F8B0,C16410,B318E0,B31C00,80856A70,misc
+ovl_En_Test,C16410,C1BCC0,B31C00,B34720,8085D5D0,actors
+ovl_En_GirlA,C1BCC0,C1E5E0,B34720,B357F0,80862E80,actors
+ovl_En_Part,C1E5E0,C1FC40,B357F0,B36580,808657A0,actors
+ovl_En_Light,C1FC40,C20A40,B36580,B36DD0,80866E00,actors
+ovl_En_Door,C20A40,C21880,B36DD0,B37790,80867C00,actors
+ovl_En_Box,C21880,C233D0,B37790,B387B0,80868A40,actors
+ovl_En_Poh,C233D0,C275C0,B387B0,B3AB60,8086A5A0,actors
+ovl_En_Okuta,C275C0,C29BA0,B3AB60,B3C1B0,8086E790,actors
+ovl_En_Bom,C29BA0,C2AA70,B3C1B0,B3CB60,80870D70,actors
+ovl_En_Wallmas,C2AA70,C2C480,B3CB60,B3DA80,80871C40,actors
+ovl_En_Dodongo,C2C480,C2F220,B3DA80,B3F4D0,80873650,actors
+ovl_En_Firefly,C2F220,C31390,B3F4D0,B40800,808763F0,actors
+ovl_En_Horse,C31390,C3D5F0,B40800,B46B20,80878560,actors
+ovl_En_Arrow,C3D5F0,C3ECF0,B46B20,B47900,808847C0,actors
+ovl_En_Elf,C3ECF0,C436B0,B47900,B4A170,80885EC0,actors
+ovl_En_Niw,C436B0,C469E0,B4A170,B4C040,8088A880,actors
+ovl_En_Tite,C469E0,C49780,B4C040,B4D800,8088DBB0,actors
+ovl_En_Reeba,C49780,C4B1F0,B4D800,B4E810,80890950,actors
+ovl_En_Peehat,C4B1F0,C4E8F0,B4E810,B505B0,808923C0,actors
+ovl_En_Holl,C4E8F0,C4F8C0,B505B0,B50F90,80895AC0,actors
+ovl_En_Scene_Change,C4F8C0,C4F9F0,B50F90,B51060,80896A90,actors
+ovl_En_Zf,C4F9F0,C564D0,B51060,B548E0,80896BC0,actors
+ovl_En_Hata,C564D0,C56A60,B548E0,B54D00,8089D6B0,actors
+ovl_Boss_Dodongo,C56A60,C60560,B54D00,B5A160,8089DC40,actors
+ovl_Boss_Goma,C60560,C66500,B5A160,B5D240,808A7740,actors
+ovl_En_Zl1,C66500,C6A310,B5D240,B5ED00,808AD6E0,actors
+ovl_En_Viewer,C6A310,C6D1B0,B5ED00,B607E0,808B14F0,actors
+ovl_En_Goma,C6D1B0,C6FE60,B607E0,B62130,808B43B0,actors
+ovl_Bg_Pushbox,C6FE60,C70160,B62130,B62350,808B7060,actors
+ovl_En_Bubble,C70160,C71580,B62350,B63030,808B7360,actors
+ovl_Door_Shutter,C71580,C73840,B63030,B64550,808B8780,actors
+ovl_En_Dodojr,C73840,C756E0,B64550,B65760,808BAA40,actors
+ovl_En_Bdfire,C756E0,C76280,B65760,B65EF0,808BC8E0,actors
+ovl_En_Boom,C76280,C76B50,B65EF0,B664F0,808BD480,actors
+ovl_En_Torch2,C76B50,C792B0,B664F0,B67D50,808BDD50,actors
+ovl_En_Bili,C792B0,C7B580,B67D50,B691C0,808C04F0,actors
+ovl_En_Tp,C7B580,C7D3F0,B691C0,B6A490,808C27C0,actors
+ovl_En_St,C7D3F0,C80060,B6A490,B6BEB0,808C4630,actors
+ovl_En_Bw,C80060,C833F0,B6BEB0,B6DC30,808C72A0,actors
+ovl_En_Eiyer,C833F0,C85050,B6DC30,B6ED50,808CA630,actors
+ovl_En_River_Sound,C85050,C859E0,B6ED50,B6F3D0,808CC290,actors
+ovl_En_Horse_Normal,C859E0,C88000,B6F3D0,B708B0,808CCC20,actors
+ovl_En_Ossan,C88000,C8E5E0,B708B0,B73780,808CF240,actors
+ovl_Bg_Treemouth,C8E5E0,C8FC40,B73780,B741C0,808D5820,actors
+ovl_Bg_Dodoago,C8FC40,C90980,B741C0,B74A60,808D6E80,actors
+ovl_Bg_Hidan_Dalm,C90980,C911D0,B74A60,B74FB0,808D7C30,actors
+ovl_Bg_Hidan_Hrock,C911D0,C91A00,B74FB0,B75510,808D8480,actors
+ovl_En_Horse_Ganon,C91A00,C92780,B75510,B75DD0,808D8CB0,actors
+ovl_Bg_Hidan_Rock,C92780,C93880,B75DD0,B76880,808D9A30,actors
+ovl_Bg_Hidan_Rsekizou,C93880,C94460,B76880,B76FC0,808DAB30,actors
+ovl_Bg_Hidan_Sekizou,C94460,C958B0,B76FC0,B77C90,808DB710,actors
+ovl_Bg_Hidan_Sima,C958B0,C967B0,B77C90,B78660,808DCB60,actors
+ovl_Bg_Hidan_Syoku,C967B0,C96C10,B78660,B78900,808DDA60,actors
+ovl_En_Xc,C96C10,C9D370,B78900,B7B400,808DDEC0,actors
+ovl_Bg_Hidan_Curtain,C9D370,C9DE10,B7B400,B7BAE0,808E4650,actors
+ovl_Bg_Spot00_Hanebasi,C9DE10,C9EF20,B7BAE0,B7C670,808E50F0,actors
+ovl_En_Mb,C9EF20,CA3150,B7C670,B7EAB0,808E6200,actors
+ovl_En_Bombf,CA3150,CA45E0,B7EAB0,B7F820,808EA430,actors
+ovl_Bg_Hidan_Firewall,CA45E0,CA4D40,B7F820,B7FD30,808EB8C0,actors
+ovl_Bg_Dy_Yoseizo,CA4D40,CA7B30,B7FD30,B817E0,808EC020,actors
+ovl_En_Zl2,CA7B30,CAC230,B817E0,B834B0,808EEE10,actors
+ovl_Bg_Hidan_Fslift,CAC230,CAC700,B834B0,B837B0,808F3510,actors
+ovl_En_OE2,CAC700,CAC7E0,B837B0,B83830,808F39E0,actors
+ovl_Bg_Ydan_Hasi,CAC7E0,CACF90,B83830,B83D40,808F3AC0,actors
+ovl_Bg_Ydan_Maruta,CACF90,CAD670,B83D40,B841D0,808F4270,actors
+ovl_Boss_Ganondrof,CAD670,CB2400,B841D0,B86CE0,808F4950,actors
+ovl_En_Am,CB2400,CB4800,B86CE0,B88160,808F96E0,actors
+ovl_En_Dekubaba,CB4800,CB82B0,B88160,B8A190,808FBAE0,actors
+ovl_En_M_Fire1,CB82B0,CB8450,B8A190,B8A2C0,808FF590,actors
+ovl_En_M_Thunder,CB8450,CB9A50,B8A2C0,B8B070,808FF730,actors
+ovl_Bg_Ddan_Jd,CB9A50,CBA0A0,B8B070,B8B4A0,80900D30,actors
+ovl_Bg_Breakwall,CBA0A0,CBAF10,B8B4A0,B8BE10,80901380,actors
+ovl_En_Jj,CBAF10,CBC4E0,B8BE10,B8C890,809021F0,actors
+ovl_En_Horse_Zelda,CBC4E0,CBCFD0,B8C890,B8CFF0,809037C0,actors
+ovl_Bg_Ddan_Kd,CBCFD0,CBD8C0,B8CFF0,B8D5A0,809042B0,actors
+ovl_Door_Warp1,CBD8C0,CC1BC0,B8D5A0,B8F6A0,80904BA0,actors
+ovl_Obj_Syokudai,CC1BC0,CC2800,B8F6A0,B8FF20,80908EB0,actors
+ovl_Item_B_Heart,CC2800,CC2C10,B8FF20,B90200,80909B00,actors
+ovl_En_Dekunuts,CC2C10,CC4410,B90200,B90F60,80909F10,actors
+ovl_Bg_Menkuri_Kaiten,CC4410,CC45A0,B90F60,B91090,8090B710,actors
+ovl_Bg_Menkuri_Eye,CC45A0,CC4A30,B91090,B913C0,8090B8A0,actors
+ovl_En_Vali,CC4A30,CC70F0,B913C0,B92A60,8090BD40,actors
+ovl_Bg_Mizu_Movebg,CC70F0,CC8270,B92A60,B934F0,8090E400,actors
+ovl_Bg_Mizu_Water,CC8270,CC8F40,B934F0,B93C70,8090F590,actors
+ovl_Arms_Hook,CC8F40,CC9CB0,B93C70,B94520,80910260,actors
+ovl_En_fHG,CC9CB0,CCC5E0,B94520,B95C80,80910FD0,actors
+ovl_Bg_Mori_Hineri,CCC5E0,CCD330,B95C80,B964C0,80913900,actors
+ovl_En_Bb,CCD330,CD1010,B964C0,B98950,80914650,actors
+ovl_Bg_Toki_Hikari,CD1010,CD1DB0,B98950,B99070,80918330,actors
+ovl_En_Yukabyun,CD1DB0,CD23C0,B99070,B994E0,809190D0,actors
+ovl_Bg_Toki_Swd,CD23C0,CD3A10,B994E0,B99DB0,809196E0,actors
+ovl_En_Fhg_Fire,CD3A10,CD60B0,B99DB0,B9B520,8091AD30,actors
+ovl_Bg_Mjin,CD60B0,CD64A0,B9B520,B9B7F0,8091D3D0,actors
+ovl_Bg_Hidan_Kousi,CD64A0,CD6A30,B9B7F0,B9BB80,8091D7C0,actors
+ovl_Door_Toki,CD6A30,CD6B90,B9BB80,B9BC80,8091DD50,actors
+ovl_Bg_Hidan_Hamstep,CD6B90,CD7A40,B9BC80,B9C5E0,8091DEB0,actors
+ovl_En_Bird,CD7A40,CD7F00,B9C5E0,B9C920,8091ED60,actors
+ovl_En_Wood02,CD7F00,CD90D0,B9C920,B9D4C0,8091F220,actors
+ovl_En_Lightbox,CD90D0,CD9550,B9D4C0,B9D800,80920400,actors
+ovl_En_Pu_box,CD9550,CD9890,B9D800,B9DA60,80920880,actors
+ovl_En_Trap,CD9890,CDAB30,B9DA60,B9E4B0,80920BC0,actors
+ovl_En_Arow_Trap,CDAB30,CDAC80,B9E4B0,B9E5D0,80921E60,actors
+ovl_En_Vase,CDAC80,CDAD80,B9E5D0,B9E690,80921FB0,actors
+ovl_En_Ta,CDAD80,CDE740,B9E690,BA0470,809220B0,actors
+ovl_En_Tk,CDE740,CE0570,BA0470,BA1710,80925A70,actors
+ovl_Bg_Mori_Bigst,CE0570,CE0EA0,BA1710,BA1C80,809278A0,actors
+ovl_Bg_Mori_Elevator,CE0EA0,CE1990,BA1C80,BA22B0,809281D0,actors
+ovl_Bg_Mori_Kaitenkabe,CE1990,CE2000,BA22B0,BA2720,80928CC0,actors
+ovl_Bg_Mori_Rakkatenjo,CE2000,CE2980,BA2720,BA2CD0,80929330,actors
+ovl_En_Vm,CE2980,CE4240,BA2CD0,BA3BB0,80929CB0,actors
+ovl_Demo_Effect,CE4240,CE9DE0,BA3BB0,BA6D90,8092B570,actors
+ovl_Demo_Kankyo,CE9DE0,CEDA80,BA6D90,BA8C80,80931110,actors
+ovl_Bg_Hidan_Fwbig,CEDA80,CEE760,BA8C80,BA9520,80934E00,actors
+ovl_En_Floormas,CEE760,CF1B40,BA9520,BAB060,80935AE0,actors
+ovl_En_Heishi1,CF1B40,CF3050,BAB060,BABC80,80938EC0,actors
+ovl_En_Rd,CF3050,CF5910,BABC80,BAD2A0,8093A3D0,actors
+ovl_En_Po_Sisters,CF5910,CFA600,BAD2A0,BAFCF0,8093CC90,actors
+ovl_Bg_Heavy_Block,CFA600,CFBEF0,BAFCF0,BB0C40,80941980,actors
+ovl_Bg_Po_Event,CFBEF0,CFDD20,BB0C40,BB1F30,80943270,actors
+ovl_Obj_Mure,CFDD20,CFED30,BB1F30,BB2890,809450B0,actors
+ovl_En_Sw,CFED30,D024A0,BB2890,BB4A40,809460C0,actors
+ovl_Boss_Fd,D024A0,D09800,BB4A40,BB8AF0,809498B0,actors
+ovl_Object_Kankyo,D09800,D0CA80,BB8AF0,BBA8B0,80950C10,actors
+ovl_En_Du,D0CA80,D0E510,BBA8B0,BBB820,80953E90,actors
+ovl_En_Fd,D0E510,D111B0,BBB820,BBD3D0,80955920,actors
+ovl_En_Horse_Link_Child,D111B0,D12FB0,BBD3D0,BBE350,809585C0,actors
+ovl_Door_Ana,D12FB0,D13620,BBE350,BBE7D0,8095A3C0,actors
+ovl_Bg_Spot02_Objects,D13620,D14980,BBE7D0,BBF3A0,8095AA30,actors
+ovl_Bg_Haka,D14980,D15040,BBF3A0,BBF860,8095BD90,actors
+ovl_Magic_Wind,D15040,D16D40,BBF860,BC0F20,8095C450,actors
+ovl_Magic_Fire,D16D40,D19040,BC0F20,BC2B20,8095E150,actors
+ovl_En_Ru1,D19040,D206E0,BC2B20,BC5F20,80960450,actors
+ovl_Boss_Fd2,D206E0,D24410,BC5F20,BC83D0,80967AF0,actors
+ovl_En_Fd_Fire,D24410,D25120,BC83D0,BC8CD0,8096B820,actors
+ovl_En_Dh,D25120,D26C00,BC8CD0,BC9D70,8096C530,actors
+ovl_En_Dha,D26C00,D27C00,BC9D70,BCA750,8096E010,actors
+ovl_En_Rl,D27C00,D28AE0,BCA750,BCAEE0,8096F010,actors
+ovl_En_Encount1,D28AE0,D29640,BCAEE0,BCB6B0,8096FEF0,actors
+ovl_Demo_Du,D29640,D2CE20,BCB6B0,BCCE20,80970A50,actors
+ovl_Demo_Im,D2CE20,D30D90,BCCE20,BCE8A0,80974230,actors
+ovl_Demo_Tre_Lgt,D30D90,D314A0,BCE8A0,BCED80,809781A0,actors
+ovl_En_Fw,D314A0,D32C60,BCED80,BCFD90,809788B0,actors
+ovl_Bg_Vb_Sima,D32C60,D33380,BCFD90,BD02B0,8097A070,actors
+ovl_En_Vb_Ball,D33380,D34530,BD02B0,BD0DF0,8097A790,actors
+ovl_Bg_Haka_Megane,D34530,D34930,BD0DF0,BD10B0,8097B940,actors
+ovl_Bg_Haka_MeganeBG,D34930,D34FF0,BD10B0,BD1510,8097BD40,actors
+ovl_Bg_Haka_Ship,D34FF0,D35A40,BD1510,BD1BE0,8097C400,actors
+ovl_Bg_Haka_Sgami,D35A40,D36660,BD1BE0,BD23D0,8097CE50,actors
+ovl_En_Heishi2,D36660,D38860,BD23D0,BD3570,8097DA70,actors
+ovl_En_Encount2,D38860,D39A90,BD3570,BD4140,8097FC70,actors
+ovl_En_Fire_Rock,D39A90,D3ABA0,BD4140,BD4BB0,80980EA0,actors
+ovl_En_Brob,D3ABA0,D3BC90,BD4BB0,BD5610,80981FB0,actors
+ovl_Mir_Ray,D3BC90,D3D540,BD5610,BD66B0,809830A0,actors
+ovl_Bg_Spot09_Obj,D3D540,D3DA60,BD66B0,BD69E0,80984950,actors
+ovl_Bg_Spot18_Obj,D3DA60,D3E330,BD69E0,BD6F20,80984E70,actors
+ovl_Boss_Va,D3E330,D4CBC0,BD6F20,BDEBF0,80985740,actors
+ovl_Bg_Haka_Tubo,D4CBC0,D4D5E0,BDEBF0,BDF2D0,8099C9D0,actors
+ovl_Bg_Haka_Trap,D4D5E0,D4EBB0,BDF2D0,BE0060,8099D3F0,actors
+ovl_Bg_Haka_Huta,D4EBB0,D4F650,BE0060,BE0760,8099E9C0,actors
+ovl_Bg_Haka_Zou,D4F650,D50840,BE0760,BE12E0,8099F460,actors
+ovl_Bg_Spot17_Funen,D50840,D50A90,BE12E0,BE14A0,809A0650,actors
+ovl_En_Syateki_Itm,D50A90,D51830,BE14A0,BE1D30,809A08A0,actors
+ovl_En_Syateki_Man,D51830,D525F0,BE1D30,BE25B0,809A1640,actors
+ovl_En_Tana,D525F0,D528A0,BE25B0,BE2790,809A2400,actors
+ovl_En_Nb,D528A0,D56E70,BE2790,BE4570,809A26B0,actors
+ovl_Boss_Mo,D56E70,D62940,BE4570,BEB300,809A6C80,actors
+ovl_En_Sb,D62940,D63D80,BEB300,BEBE70,809B7260,actors
+ovl_En_Bigokuta,D63D80,D66880,BEBE70,BED740,809B86A0,actors
+ovl_En_Karebaba,D66880,D68170,BED740,BEE610,809BB1A0,actors
+ovl_Bg_Bdan_Objects,D68170,D69440,BEE610,BEF150,809BCA90,actors
+ovl_Demo_Sa,D69440,D6BF60,BEF150,BF03C0,809BDD60,actors
+ovl_Demo_Go,D6BF60,D6CCB0,BF03C0,BF0B70,809C0880,actors
+ovl_En_In,D6CCB0,D6FA50,BF0B70,BF2750,809C15D0,actors
+ovl_En_Tr,D6FA50,D71350,BF2750,BF3690,809C4370,actors
+ovl_Bg_Spot16_Bombstone,D71350,D728A0,BF3690,BF4490,809C5C70,actors
+ovl_Bg_Hidan_Kowarerukabe,D728A0,D73780,BF4490,BF4CE0,809C71C0,actors
+ovl_Bg_Bombwall,D73780,D74040,BF4CE0,BF52A0,809C80A0,actors
+ovl_En_Ru2,D74040,D76DC0,BF52A0,BF65C0,809C8960,actors
+ovl_Obj_Dekujr,D76DC0,D77400,BF65C0,BF6A10,809CB6E0,actors
+ovl_Bg_Mizu_Uzu,D77400,D775D0,BF6A10,BF6B70,809CBD20,actors
+ovl_Bg_Spot06_Objects,D775D0,D789D0,BF6B70,BF7840,809CBEF0,actors
+ovl_Bg_Ice_Objects,D789D0,D79910,BF7840,BF80C0,809CD2F0,actors
+ovl_Bg_Haka_Water,D79910,D7A110,BF80C0,BF85A0,809CE230,actors
+ovl_En_Ma2,D7A110,D7B170,BF85A0,BF9020,809CEA30,actors
+ovl_En_Bom_Chu,D7B170,D7C810,BF9020,BF9F10,809CFA90,actors
+ovl_En_Horse_Game_Check,D7C810,D7D8E0,BF9F10,BFA960,809D1130,actors
+ovl_Boss_Tw,D7D8E0,D90A30,BFA960,C04CE0,809D2200,actors
+ovl_En_Rr,D90A30,D92F60,C04CE0,C06350,809E7DD0,actors
+ovl_En_Ba,D92F60,D94E30,C06350,C07490,809EA300,actors
+ovl_En_Bx,D94E30,D95930,C07490,C07C60,809EC1D0,actors
+ovl_En_Anubice,D95930,D96BE0,C07C60,C08810,809ECCD0,actors
+ovl_En_Anubice_Fire,D96BE0,D979A0,C08810,C09180,809EDF80,actors
+ovl_Bg_Mori_Hashigo,D979A0,D98260,C09180,C09700,809EED40,actors
+ovl_Bg_Mori_Hashira4,D98260,D987E0,C09700,C09AA0,809EF600,actors
+ovl_Bg_Mori_Idomizu,D987E0,D98E20,C09AA0,C09EC0,809EFB90,actors
+ovl_Bg_Spot16_Doughnut,D98E20,D993E0,C09EC0,C0A2C0,809F01D0,actors
+ovl_Bg_Bdan_Switch,D993E0,D9A810,C0A2C0,C0ACC0,809F0790,actors
+ovl_En_Ma1,D9A810,D9BAF0,C0ACC0,C0B870,809F1BC0,actors
+ovl_Boss_Ganon,D9BAF0,DBDDA0,C0B870,C1E5A0,809F2EA0,actors
+ovl_Boss_Sst,DBDDA0,DCA330,C1E5A0,C24DB0,80A18CD0,actors
+ovl_En_Ny,DCA330,DCBC70,C24DB0,C25D40,80A252A0,actors
+ovl_En_Fr,DCBC70,DCE700,C25D40,C276B0,80A26BE0,actors
+ovl_Item_Shield,DCE700,DCF110,C276B0,C27D70,80A29670,actors
+ovl_Bg_Ice_Shelter,DCF110,DD0350,C27D70,C28900,80A2A080,actors
+ovl_En_Ice_Hono,DD0350,DD1540,C28900,C293E0,80A2B2C0,actors
+ovl_Item_Ocarina,DD1540,DD1D10,C293E0,C298C0,80A2C4B0,actors
+ovl_Magic_Dark,DD1D10,DD3560,C298C0,C2A9A0,80A2CC80,actors
+ovl_Demo_6K,DD3560,DD62C0,C2A9A0,C2C5E0,80A2E4D0,actors
+ovl_En_Anubice_Tag,DD62C0,DD6590,C2C5E0,C2C7F0,80A31230,actors
+ovl_Bg_Haka_Gate,DD6590,DD7620,C2C7F0,C2D290,80A31500,actors
+ovl_Bg_Spot15_Saku,DD7620,DD7960,C2D290,C2D4F0,80A325A0,actors
+ovl_Bg_Jya_Goroiwa,DD7960,DD80E0,C2D4F0,C2DA20,80A328E0,actors
+ovl_Bg_Jya_Zurerukabe,DD80E0,DD8790,C2DA20,C2DE80,80A33060,actors
+ovl_Bg_Jya_Cobra,DD8790,DDA4D0,C2DE80,C2F0B0,80A33710,actors
+ovl_Bg_Jya_Kanaami,DDA4D0,DDA880,C2F0B0,C2F330,80A35450,actors
+ovl_Fishing,DDA880,DECD10,C2F330,C38420,80A35800,actors
+ovl_Obj_Oshihiki,DECD10,DEE7C0,C38420,C393D0,80A4ED40,actors
+ovl_Bg_Gate_Shutter,DEE7C0,DEEC50,C393D0,C396C0,80A507F0,actors
+ovl_Eff_Dust,DEEC50,DF0020,C396C0,C3A0E0,80A50C80,actors
+ovl_Bg_Spot01_Fusya,DF0020,DF02C0,C3A0E0,C3A2E0,80A52050,actors
+ovl_Bg_Spot01_Idohashira,DF02C0,DF0EC0,C3A2E0,C3AA70,80A522F0,actors
+ovl_Bg_Spot01_Idomizu,DF0EC0,DF11E0,C3AA70,C3ACD0,80A52EF0,actors
+ovl_Bg_Po_Syokudai,DF11E0,DF1B50,C3ACD0,C3B320,80A53210,actors
+ovl_Bg_Ganon_Otyuka,DF1B50,DF4190,C3B320,C3CCA0,80A53B80,actors
+ovl_Bg_Spot15_Rrbox,DF4190,DF4F70,C3CCA0,C3D500,80A561C0,actors
+ovl_Bg_Umajump,DF4F70,DF5100,C3D500,C3D630,80A56FA0,actors
+ovl_En_Insect,DF5100,DF7620,C3D630,C3EB20,80A57130,actors
+ovl_En_Butte,DF7620,DF8BF0,C3EB20,C3F870,80A59650,actors
+ovl_En_Fish,DF8BF0,DFAD00,C3F870,C40A30,80A5AC20,actors
+ovl_Bg_Spot08_Iceblock,DFAD00,DFBD40,C40A30,C413B0,80A5CD30,actors
+ovl_Item_Etcetera,DFBD40,DFC610,C413B0,C41920,80A5DD70,actors
+ovl_Arrow_Fire,DFC610,DFE4F0,C41920,C430F0,80A5E640,actors
+ovl_Arrow_Ice,DFE4F0,E003F0,C430F0,C446A0,80A60520,actors
+ovl_Arrow_Light,E003F0,E02300,C446A0,C45CD0,80A62420,actors
+ovl_Obj_Kibako,E02300,E03000,C45CD0,C46440,80A64330,actors
+ovl_Obj_Tsubo,E03000,E03FF0,C46440,C46DD0,80A65030,actors
+ovl_En_Wonder_Item,E03FF0,E04C40,C46DD0,C47520,80A66020,actors
+ovl_En_Ik,E04C40,E09290,C47520,C497E0,80A66D50,actors
+ovl_Demo_Ik,E09290,E0A7A0,C497E0,C4A2D0,80A6B3B0,actors
+ovl_En_Skj,E0A7A0,E0E0E0,C4A2D0,C4C0E0,80A6C8C0,actors
+ovl_En_Skjneedle,E0E0E0,E0E3F0,C4C0E0,C4C320,80A70210,actors
+ovl_En_G_Switch,E0E3F0,E0FC10,C4C320,C4D2D0,80A70520,actors
+ovl_Demo_Ext,E0FC10,E10560,C4D2D0,C4D8D0,80A71D40,actors
+ovl_Demo_Shd,E10560,E12970,C4D8D0,C4EE30,80A72690,actors
+ovl_En_Dns,E12970,E13D00,C4EE30,C4F900,80A74AA0,actors
+ovl_Elf_Msg,E13D00,E142F0,C4F900,C4FCB0,80A75E30,actors
+ovl_En_Honotrap,E142F0,E15850,C4FCB0,C50A20,80A76420,actors
+ovl_En_Tubo_Trap,E15850,E164F0,C50A20,C511C0,80A77980,actors
+ovl_Obj_Ice_Poly,E164F0,E16EA0,C511C0,C51850,80A78620,actors
+ovl_Bg_Spot03_Taki,E16EA0,E177C0,C51850,C51E00,80A78FD0,actors
+ovl_Bg_Spot07_Taki,E177C0,E17DB0,C51E00,C521C0,80A798F0,actors
+ovl_En_Fz,E17DB0,E19DC0,C521C0,C534E0,80A79EE0,actors
+ovl_En_Po_Relay,E19DC0,E1B4D0,C534E0,C543A0,80A7BEF0,actors
+ovl_Bg_Relay_Objects,E1B4D0,E1BC80,C543A0,C548B0,80A7D600,actors
+ovl_En_Diving_Game,E1BC80,E1D630,C548B0,C55800,80A7DDB0,actors
+ovl_En_Kusa,E1D630,E1EB10,C55800,C564E0,80A7F760,actors
+ovl_Obj_Bean,E1EB10,E212A0,C564E0,C57A00,80A80C40,actors
+ovl_Obj_Bombiwa,E212A0,E21810,C57A00,C57DF0,80A833D0,actors
+ovl_Obj_Switch,E21810,E235F0,C57DF0,C58DF0,80A83940,actors
+ovl_Obj_Elevator,E235F0,E239B0,C58DF0,C59070,80A85720,actors
+ovl_Obj_Lift,E239B0,E243D0,C59070,C59750,80A85AE0,actors
+ovl_Obj_Hsblock,E243D0,E249A0,C59750,C59B30,80A86500,actors
+ovl_En_Okarina_Tag,E249A0,E25EA0,C59B30,C5A570,80A86AD0,actors
+ovl_En_Yabusame_Mark,E25EA0,E26570,C5A570,C5A9D0,80A87FD0,actors
+ovl_En_Goroiwa,E26570,E28930,C5A9D0,C5BF50,80A886A0,actors
+ovl_En_Ex_Ruppy,E28930,E299F0,C5BF50,C5C9F0,80A8AA60,actors
+ovl_En_Toryo,E299F0,E2A680,C5C9F0,C5D1A0,80A8BB20,actors
+ovl_En_Daiku,E2A680,E2BDC0,C5D1A0,C5E0C0,80A8C7B0,actors
+ovl_En_Nwc,E2BDC0,E2C7E0,C5E0C0,C5E7E0,80A8DEF0,actors
+ovl_En_Blkobj,E2C7E0,E2CD40,C5E7E0,C5EBA0,80A8E910,actors
+ovl_Item_Inbox,E2CD40,E2CEA0,C5EBA0,C5EC90,80A8EE70,actors
+ovl_En_Ge1,E2CEA0,E2EED0,C5EC90,C5FDC0,80A8EFD0,actors
+ovl_Obj_Blockstop,E2EED0,E2F070,C5FDC0,C5FF00,80A91000,actors
+ovl_En_Sda,E2F070,E306A0,C5FF00,C60BA0,80A911A0,actors
+ovl_En_Clear_Tag,E306A0,E39210,C60BA0,C64720,80A92890,actors
+ovl_En_Niw_Lady,E39210,E3AB10,C64720,C65630,80A9DE30,actors
+ovl_En_Gm,E3AB10,E3B840,C65630,C65EB0,80A9F730,actors
+ovl_En_Ms,E3B840,E3BF30,C65EB0,C66370,80AA0460,actors
+ovl_En_Hs,E3BF30,E3CAD0,C66370,C66A60,80AA0B50,actors
+ovl_Bg_Ingate,E3CAD0,E3CE60,C66A60,C66CF0,80AA16F0,actors
+ovl_En_Kanban,E3CE60,E3FFB0,C66CF0,C68660,80AA1A80,actors
+ovl_En_Heishi3,E3FFB0,E40980,C68660,C68C60,80AA4BD0,actors
+ovl_En_Syateki_Niw,E40980,E42A10,C68C60,C6A060,80AA55A0,actors
+ovl_En_Attack_Niw,E42A10,E43C70,C6A060,C6ABA0,80AA7630,actors
+ovl_Bg_Spot01_Idosoko,E43C70,E43E80,C6ABA0,C6AD20,80AA8890,actors
+ovl_En_Sa,E43E80,E460F0,C6AD20,C6BFE0,80AA8AA0,actors
+ovl_En_Wonder_Talk,E460F0,E46780,C6BFE0,C6C450,80AAAD10,actors
+ovl_Bg_Gjyo_Bridge,E46780,E46C70,C6C450,C6C7E0,80AAB3A0,actors
+ovl_En_Ds,E46C70,E47890,C6C7E0,C6CF10,80AAB890,actors
+ovl_En_Mk,E47890,E48720,C6CF10,C6D770,80AAC4B0,actors
+ovl_En_Bom_Bowl_Man,E48720,E49C60,C6D770,C6E4B0,80AAD340,actors
+ovl_En_Bom_Bowl_Pit,E49C60,E4A5D0,C6E4B0,C6EAD0,80AAE880,actors
+ovl_En_Owl,E4A5D0,E4E170,C6EAD0,C707E0,80AAF1F0,actors
+ovl_En_Ishi,E4E170,E572C0,C707E0,C717A0,80AB2D90,actors
+ovl_Obj_Hana,E572C0,E575D0,C717A0,C719C0,80ABBEE0,actors
+ovl_Obj_Lightswitch,E575D0,E58A00,C719C0,C72570,80ABC1F0,actors
+ovl_Obj_Mure2,E58A00,E59420,C72570,C72BB0,80ABD620,actors
+ovl_En_Go,E59420,E5DA60,C72BB0,C75160,80ABE040,actors
+ovl_En_Fu,E5DA60,E5E7A0,C75160,C75A10,80AC2680,actors
+ovl_En_Changer,E5E7A0,E5F180,C75A10,C76020,80AC33D0,actors
+ovl_Bg_Jya_Megami,E5F180,E60370,C76020,C76CA0,80AC3DB0,actors
+ovl_Bg_Jya_Lift,E60370,E608C0,C76CA0,C77040,80AC4FA0,actors
+ovl_Bg_Jya_Bigmirror,E608C0,E61110,C77040,C77610,80AC54F0,actors
+ovl_Bg_Jya_Bombchuiwa,E61110,E61C50,C77610,C77D40,80AC5D40,actors
+ovl_Bg_Jya_Amishutter,E61C50,E61FE0,C77D40,C77F40,80AC6880,actors
+ovl_Bg_Jya_Bombiwa,E61FE0,E625A0,C77F40,C78350,80AC6C10,actors
+ovl_Bg_Spot18_Basket,E625A0,E63590,C78350,C78D60,80AC71D0,actors
+ovl_En_Ganon_Organ,E63590,E6A5D0,C78D60,C7BCA0,80AC81C0,actors
+ovl_En_Siofuki,E6A5D0,E6B380,C7BCA0,C7C530,80ACF200,actors
+ovl_En_Stream,E6B380,E6B910,C7C530,C7C920,80ACFFB0,actors
+ovl_En_Mm,E6B910,E6CF70,C7C920,C7D770,80AD0540,actors
+ovl_En_Ko,E6CF70,E710B0,C7D770,C7F6F0,80AD1BA0,actors
+ovl_En_Kz,E710B0,E72650,C7F6F0,C80480,80AD5CE0,actors
+ovl_En_Weather_Tag,E72650,E73540,C80480,C80AA0,80AD7280,actors
+ovl_Bg_Sst_Floor,E73540,E73AA0,C80AA0,C80EB0,80AD8170,actors
+ovl_En_Ani,E73AA0,E74810,C80EB0,C816C0,80AD86D0,actors
+ovl_En_Ex_Item,E74810,E75990,C816C0,C82120,80AD9440,actors
+ovl_Bg_Jya_Ironobj,E75990,E76740,C82120,C82910,80ADA5C0,actors
+ovl_En_Js,E76740,E77110,C82910,C82F00,80ADB370,actors
+ovl_En_Jsjutan,E77110,E7BEE0,C82F00,C847E0,80ADBD40,actors
+ovl_En_Cs,E7BEE0,E7D110,C847E0,C85380,80AE1670,actors
+ovl_En_Md,E7D110,E7F780,C85380,C866E0,80AE28A0,actors
+ovl_En_Hy,E7F780,E830C0,C866E0,C88530,80AE4F10,actors
+ovl_En_Ganon_Mant,E830C0,E872F0,C88530,C89E00,80AE8850,actors
+ovl_En_Okarina_Effect,E872F0,E876B0,C89E00,C8A080,80AECA80,actors
+ovl_En_Mag,E876B0,E8A6F0,C8A080,C8B630,80AECE40,actors
+ovl_Door_Gerudo,E8A6F0,E8ACE0,C8B630,C8BA60,80AF1E80,actors
+ovl_Elf_Msg2,E8ACE0,E8B150,C8BA60,C8BCE0,80AF2470,actors
+ovl_Demo_Gt,E8B150,E90760,C8BCE0,C8E1A0,80AF28E0,actors
+ovl_En_Po_Field,E90760,E94160,C8E1A0,C903D0,80AF7EF0,actors
+ovl_Efc_Erupc,E94160,E94C50,C903D0,C90B40,80AFB980,actors
+ovl_Bg_Zg,E94C50,E950A0,C90B40,C90E20,80AFC470,actors
+ovl_En_Heishi4,E950A0,E95FA0,C90E20,C91710,80AFC8C0,actors
+ovl_En_Zl3,E95FA0,E9DDF0,C91710,C94CC0,80AFD7C0,actors
+ovl_Boss_Ganon2,E9DDF0,EAF140,C94CC0,C9DC80,80B05610,actors
+ovl_En_Kakasi,EAF140,EAFE80,C9DC80,C9E500,80B18480,actors
+ovl_En_Takara_Man,EAFE80,EB0740,C9E500,C9EB20,80B191C0,actors
+ovl_Obj_Makeoshihiki,EB0740,EB0BD0,C9EB20,C9EE50,80B19A80,actors
+ovl_Oceff_Spot,EB0BD0,EB1B00,C9EE50,C9F9C0,80B19F10,actors
+ovl_End_Title,EB1B00,EB7540,C9F9C0,CA1670,80B1AE40,actors
+ovl_En_Torch,EB7540,EB7630,CA1670,CA1740,80B20880,actors
+ovl_Demo_Ec,EB7630,EBAE90,CA1740,CA2A30,80B20970,actors
+ovl_Shot_Sun,EBAE90,EBB550,CA2A30,CA2EF0,80B241D0,actors
+ovl_En_Dy_Extra,EBB550,EBBAF0,CA2EF0,CA3300,80B24890,actors
+ovl_En_Wonder_Talk2,EBBAF0,EBC190,CA3300,CA37A0,80B24E30,actors
+ovl_En_Ge2,EBC190,EBDB30,CA37A0,CA4690,80B254D0,actors
+ovl_Obj_Roomtimer,EBDB30,EBDD80,CA4690,CA4850,80B26E70,actors
+ovl_En_Ssh,EBDD80,EC0370,CA4850,CA5EA0,80B270C0,actors
+ovl_En_Sth,EC0370,EC4430,CA5EA0,CA8540,80B296B0,actors
+ovl_Oceff_Wipe,EC4430,EC51B0,CA8540,CA8FA0,80B2D770,actors
+ovl_Effect_Ss_Dust,EC51B0,EC59F0,CA8FA0,CA9530,80B2E4F0,effects
+ovl_Effect_Ss_KiraKira,EC59F0,EC6060,CA9530,CA99D0,80B2ED30,effects
+ovl_Effect_Ss_Bomb,EC6060,EC6490,CA99D0,CA9D00,80B2F3A0,effects
+ovl_Effect_Ss_Bomb2,EC6490,EC6D90,CA9D00,CAA290,80B2F7D0,effects
+ovl_Effect_Ss_Blast,EC6D90,EC7120,CAA290,CAA560,80B300D0,effects
+ovl_Effect_Ss_G_Spk,EC7120,EC76D0,CAA560,CAA990,80B30460,effects
+ovl_Effect_Ss_D_Fire,EC76D0,EC7BC0,CAA990,CAAD60,80B30A10,effects
+ovl_Effect_Ss_Bubble,EC7BC0,EC8040,CAAD60,CAB0B0,80B30F00,effects
+ovl_Effect_Ss_G_Ripple,EC8040,EC85A0,CAB0B0,CAB4B0,80B31380,effects
+ovl_Effect_Ss_G_Splash,EC85A0,EC8A50,CAB4B0,CAB7C0,80B318E0,effects
+ovl_Effect_Ss_G_Magma,EC8A50,EC8CB0,CAB7C0,CAB9A0,80B31D90,effects
+ovl_Effect_Ss_G_Fire,EC8CB0,EC8F40,CAB9A0,CABB90,80B31FF0,effects
+ovl_Effect_Ss_Lightning,EC8F40,EC9610,CABB90,CAC0C0,80B32280,effects
+ovl_Effect_Ss_Dt_Bubble,EC9610,EC9BA0,CAC0C0,CAC4C0,80B32950,effects
+ovl_Effect_Ss_Hahen,EC9BA0,ECA1E0,CAC4C0,CAC8E0,80B32EE0,effects
+ovl_Effect_Ss_Stick,ECA1E0,ECA580,CAC8E0,CACB90,80B33520,effects
+ovl_Effect_Ss_Sibuki,ECA580,ECAC50,CACB90,CAD080,80B338C0,effects
+ovl_Effect_Ss_Sibuki2,ECAC50,ECAF80,CAD080,CAD300,80B33F90,effects
+ovl_Effect_Ss_G_Magma2,ECAF80,ECB490,CAD300,CAD6E0,80B342C0,effects
+ovl_Effect_Ss_Stone1,ECB490,ECB810,CAD6E0,CAD990,80B347D0,effects
+ovl_Effect_Ss_HitMark,ECB810,ECBD60,CAD990,CADD60,80B34B50,effects
+ovl_Effect_Ss_Fhg_Flash,ECBD60,ECCCE0,CADD60,CAE5E0,80B350A0,effects
+ovl_Effect_Ss_K_Fire,ECCCE0,ECD120,CAE5E0,CAE930,80B36020,effects
+ovl_Effect_Ss_Solder_Srch_Ball,ECD120,ECD2D0,CAE930,CAEA90,80B36460,effects
+ovl_Effect_Ss_Kakera,ECD2D0,ECE360,CAEA90,CAF4C0,80B36610,effects
+ovl_Effect_Ss_Ice_Piece,ECE360,ECE7A0,CAF4C0,CAF810,80B376A0,effects
+ovl_Effect_Ss_En_Ice,ECE7A0,ECF060,CAF810,CAFE60,80B37AE0,effects
+ovl_Effect_Ss_Fire_Tail,ECF060,ECF760,CAFE60,CB0390,80B383A0,effects
+ovl_Effect_Ss_En_Fire,ECF760,ECFEB0,CB0390,CB08F0,80B38AA0,effects
+ovl_Effect_Ss_Extra,ECFEB0,ED0270,CB08F0,CB0BE0,80B391F0,effects
+ovl_Effect_Ss_Fcircle,ED0270,ED0720,CB0BE0,CB0F80,80B395B0,effects
+ovl_Effect_Ss_Dead_Db,ED0720,ED0C00,CB0F80,CB1360,80B39A60,effects
+ovl_Effect_Ss_Dead_Dd,ED0C00,ED1190,CB1360,CB1780,80B39F40,effects
+ovl_Effect_Ss_Dead_Ds,ED1190,ED1610,CB1780,CB1AF0,80B3A4D0,effects
+ovl_Effect_Ss_Dead_Sound,ED1610,ED1750,CB1AF0,CB1C00,80B3A950,effects
+ovl_Oceff_Storm,ED1750,ED3300,CB1C00,CB33A0,80B3AA90,actors
+ovl_En_Weiyer,ED3300,ED4D00,CB33A0,CB4250,80B3C640,actors
+ovl_Bg_Spot05_Soko,ED4D00,ED5020,CB4250,CB4480,80B3E040,actors
+ovl_Bg_Jya_1flift,ED5020,ED56B0,CB4480,CB48B0,80B3E360,actors
+ovl_Bg_Jya_Haheniron,ED56B0,ED5EA0,CB48B0,CB4E10,80B3E9F0,actors
+ovl_Bg_Spot12_Gate,ED5EA0,ED62B0,CB4E10,CB50C0,80B3F1E0,actors
+ovl_Bg_Spot12_Saku,ED62B0,ED6770,CB50C0,CB53F0,80B3F5F0,actors
+ovl_En_Hintnuts,ED6770,ED81A0,CB53F0,CB62E0,80B3FAB0,actors
+ovl_En_Nutsball,ED81A0,ED87C0,CB62E0,CB6760,80B414E0,actors
+ovl_Bg_Spot00_Break,ED87C0,ED8960,CB6760,CB68A0,80B41B00,actors
+ovl_En_Shopnuts,ED8960,ED9870,CB68A0,CB7170,80B41CA0,actors
+ovl_En_It,ED9870,ED9A00,CB7170,CB7280,80B42BB0,actors
+ovl_En_GeldB,ED9A00,EDEDB0,CB7280,CB9DA0,80B42D40,actors
+ovl_Oceff_Wipe2,EDEDB0,EE0520,CB9DA0,CBA9E0,80B480F0,actors
+ovl_Oceff_Wipe3,EE0520,EE1C70,CBA9E0,CBBA20,80B49860,actors
+ovl_En_Niw_Girl,EE1C70,EE2740,CBBA20,CBC1D0,80B4AFB0,actors
+ovl_En_Dog,EE2740,EE38F0,CBC1D0,CBCC50,80B4BA80,actors
+ovl_En_Si,EE38F0,EE3DF0,CBCC50,CBCFC0,80B4CC30,actors
+ovl_Bg_Spot01_Objects2,EE3DF0,EE42B0,CBCFC0,CBD330,80B4D130,actors
+ovl_Obj_Comb,EE42B0,EE4B10,CBD330,CBD940,80B4D5F0,actors
+ovl_Bg_Spot11_Bakudankabe,EE4B10,EE5150,CBD940,CBDDB0,80B4DE50,actors
+ovl_Obj_Kibako2,EE5150,EE5810,CBDDB0,CBE260,80B4E490,actors
+ovl_En_Dnt_Demo,EE5810,EE6530,CBE260,CBEB10,80B4EB50,actors
+ovl_En_Dnt_Jiji,EE6530,EE7A50,CBEB10,CBF5F0,80B4F870,actors
+ovl_En_Dnt_Nomal,EE7A50,EEA850,CBF5F0,CC0D90,80B50D90,actors
+ovl_En_Guest,EEA850,EEB1F0,CC0D90,CC1440,80B53B90,actors
+ovl_Bg_Bom_Guard,EEB1F0,EEB410,CC1440,CC15F0,80B54530,actors
+ovl_En_Hs2,EEB410,EEB9F0,CC15F0,CC19F0,80B54750,actors
+ovl_Demo_Kekkai,EEB9F0,EECCE0,CC19F0,CC2630,80B54D30,actors
+ovl_Bg_Spot08_Bakudankabe,EECCE0,EED380,CC2630,CC2AE0,80B56020,actors
+ovl_Bg_Spot17_Bakudankabe,EED380,EEDA70,CC2AE0,CC2FC0,80B566C0,actors
+ovl_Obj_Mure3,EEDA70,EEE240,CC2FC0,CC34F0,80B56DB0,actors
+ovl_En_Tg,EEE240,EEE920,CC34F0,CC39A0,80B57580,actors
+ovl_En_Mu,EEE920,EEF240,CC39A0,CC4000,80B57C60,actors
+ovl_En_Go2,EEF240,EF5280,CC4000,CC7460,80B58580,actors
+ovl_En_Wf,EF5280,EF9590,CC7460,CC97F0,80B5E5C0,actors
+ovl_En_Skb,EF9590,EFAE80,CC97F0,CCA720,80B628D0,actors
+ovl_Demo_Gj,EFAE80,EFEB30,CCA720,CCBEA0,80B641C0,actors
+ovl_Demo_Geff,EFEB30,EFF350,CCBEA0,CCC380,80B67E70,actors
+ovl_Bg_Gnd_Firemeiro,EFF350,EFF8A0,CCC380,CCC720,80B68690,actors
+ovl_Bg_Gnd_Darkmeiro,EFF8A0,F00060,CCC720,CCCC00,80B68BE0,actors
+ovl_Bg_Gnd_Soulmeiro,F00060,F008C0,CCCC00,CCD1D0,80B693A0,actors
+ovl_Bg_Gnd_Nisekabe,F008C0,F00A30,CCD1D0,CCD2F0,80B69C00,actors
+ovl_Bg_Gnd_Iceblock,F00A30,F01B20,CCD2F0,CCDC00,80B69D70,actors
+ovl_Bg_Ydan_Sp,F01B20,F03240,CCDC00,CCEA50,80B6AE70,actors
+ovl_En_Gb,F03240,F04970,CCEA50,CCF8E0,80B6C590,actors
+ovl_En_Gs,F04970,F067E0,CCF8E0,CD0BD0,80B6DCC0,actors
+ovl_Bg_Mizu_Bwall,F067E0,F07CB0,CD0BD0,CD1780,80B6FB30,actors
+ovl_Bg_Mizu_Shutter,F07CB0,F084B0,CD1780,CD1CB0,80B71000,actors
+ovl_En_Daiku_Kakariko,F084B0,F09870,CD1CB0,CD2940,80B71800,actors
+ovl_Bg_Bowl_Wall,F09870,F0A1F0,CD2940,CD3000,80B72BC0,actors
+ovl_En_Wall_Tubo,F0A1F0,F0A6E0,CD3000,CD3370,80B73540,actors
+ovl_En_Po_Desert,F0A6E0,F0B4A0,CD3370,CD3CD0,80B73A30,actors
+ovl_En_Crow,F0B4A0,F0CB40,CD3CD0,CD4B00,80B747F0,actors
+ovl_Door_Killer,F0CB40,F0E0B0,CD4B00,CD58C0,80B75E90,actors
+ovl_Bg_Spot11_Oasis,F0E0B0,F0E7E0,CD58C0,CD5DE0,80B77400,actors
+ovl_Bg_Spot18_Futa,F0E7E0,F0E980,CD5DE0,CD5F20,80B77B30,actors
+ovl_Bg_Spot18_Shutter,F0E980,F0EED0,CD5F20,CD62A0,80B77CD0,actors
+ovl_En_Ma3,F0EED0,F0FE80,CD62A0,CD6CA0,80B78220,actors
+ovl_En_Cow,F0FE80,F112E0,CD6CA0,CD77D0,80B791D0,actors
+ovl_Bg_Ice_Turara,F112E0,F11B10,CD77D0,CD7D70,80B7A630,actors
+ovl_Bg_Ice_Shutter,F11B10,F11F80,CD7D70,CD8040,80B7AE60,actors
+ovl_En_Kakasi2,F11F80,F126A0,CD8040,CD84E0,80B7B2D0,actors
+ovl_En_Kakasi3,F126A0,F13780,CD84E0,CD8F40,80B7B9F0,actors
+ovl_Oceff_Wipe4,F13780,F14760,CD8F40,CD9970,80B7CAD0,actors
+ovl_En_Eg,F14760,F14910,CD9970,CD9AB0,80B7DAB0,actors
+ovl_Bg_Menkuri_Nisekabe,F14910,F14A60,CD9AB0,CD9BB0,80B7DC60,actors
+ovl_En_Zo,F14A60,F17020,CD9BB0,CDB1A0,80B7DDB0,actors
+ovl_Effect_Ss_Ice_Smoke,F17020,F17500,CDB1A0,CDB530,80B80370,effects
+ovl_Obj_Makekinsuta,F17500,F17650,CDB530,CDB650,80B80850,actors
+ovl_En_Ge3,F17650,F18290,CDB650,CDBDE0,80B809A0,actors
+ovl_Obj_Timeblock,F18290,F18EE0,CDBDE0,CDC570,80B815E0,actors
+ovl_Obj_Hamishi,F18EE0,F19730,CDC570,CDCB40,80B82230,actors
+ovl_En_Zl4,F19730,F1E160,CDCB40,CDEB30,80B82A80,actors
+ovl_En_Mm2,F1E160,F1EF20,CDEB30,CDF3F0,80B874B0,actors
+ovl_Bg_Jya_Block,F1EF20,F1F190,CDF3F0,CDF5F0,80B88270,actors
+ovl_Obj_Warp2block,F1F190,F1FCC0,CDF5F0,CDFD50,80B884E0,actors
diff --git a/tools/disasm/ique-cn/files_boot.csv b/tools/disasm/ique-cn/files_boot.csv
new file mode 100644
index 0000000000..dfbbf225bc
--- /dev/null
+++ b/tools/disasm/ique-cn/files_boot.csv
@@ -0,0 +1,141 @@
+offset,vram,.text
+0,80000450,src/boot/boot_main
+140,80000590,src/boot/idle
+390,800007E0,src/boot/viconfig
+4D0,80000920,src/boot/z_std_dma
+B50,80000FA0,src/boot/inflate
+2830,80002C80,src/boot/z_locale
+2870,80002CC0,src/boot/is_debug_ique
+2890,80002CE0,src/boot/driverominit
+2A70,80002EC0,src/boot/mio0
+2B20,80002F70,src/libu64/stackcheck
+2D70,800031C0,src/libultra/os/invaldcache
+2E20,80003270,src/libultra/os/invalicache
+2EA0,800032F0,src/libultra/libc/bcmp
+2FB0,80003400,src/libultra/libc/bzero
+3050,800034A0,src/libultra/os/createmesgqueue
+30C0,80003510,src/libultra/os/recvmesg
+3230,80003680,src/libultra/os/sendmesg
+33A0,800037F0,src/libultra/os/getfpccsr
+33B0,80003800,src/libultra/os/getsr
+33C0,80003810,src/libultra/os/setfpccsr
+33D0,80003820,src/libultra/os/setsr
+33E0,80003830,src/libultra/os/createthread
+3550,800039A0,src/libultra/os/setthreadpri
+3660,80003AB0,src/libultra/os/startthread
+37F0,80003C40,src/libultra/os/stopthread
+38E0,80003D30,src/libultra/os/thread
+3940,80003D90,src/libultra/os/gettime
+39F0,80003E40,src/libultra/os/timerintr
+3F10,80004360,src/libultra/io/vigetnextframebuf
+3F50,800043A0,src/libultra/io/vimgr
+4250,800046A0,src/libultra/io/visetmode
+42D0,80004720,src/libultra/io/visetspecial
+4450,800048A0,src/libultra/io/visetxscale
+4510,80004960,src/libultra/io/visetyscale
+4560,800049B0,src/libultra/io/viswapbuf
+45B0,80004A00,src/libultra/io/viswapcontext
+48C0,80004D10,src/libultra/io/viblack
+4920,80004D70,src/libultra/io/viextendvstart
+4930,80004D80,src/libultra/os/exceptasm
+53B0,80005800,src/libultra/os/interrupt
+5440,80005890,src/libultra/os/setintmask
+54F0,80005940,src/libultra/os/sethwintrroutine
+5580,800059D0,src/libultra/os/gethwintrroutine
+55F0,80005A40,src/libultra/io/pimgr
+5770,80005BC0,src/libultra/io/epirawdma
+5B30,80005F80,src/libultra/io/epiread
+5B90,80005FE0,src/libultra/io/epidma
+5C30,80006080,src/libultra/io/cartrominit
+5D90,800061E0,src/libultra/io/devmgr
+6230,80006680,src/libultra/io/piacs
+62F0,80006740,src/libultra/os/parameters
+6360,800067B0,src/libultra/os/getmemsize
+6390,800067E0,src/libultra/os/initialize
+6920,80006D70,src/libultra/os/writebackdcache
+69A0,80006DF0,src/libultra/os/virtualtophysical
+6A70,80006EC0,src/libultra/libc/bcopy
+6D90,800071E0,src/libultra/os/jammesg
+6F10,80007360,src/libultra/os/seteventmesg
+6FE0,80007430,src/libultra/os/getcause
+6FF0,80007440,src/libultra/os/setwatchlo
+7000,80007450,src/libultra/reg/_getcount
+7100,80007550,src/libultra/reg/_setcompare
+71B0,80007600,src/libultra/io/sirawread
+7200,80007650,src/libultra/io/sirawwrite
+7250,800076A0,src/libultra/os/destroythread
+7380,800077D0,src/libultra/os/getthreadpri
+73D0,80007820,src/libultra/os/yieldthread
+7430,80007880,src/libultra/os/probetlb
+74F0,80007940,src/libultra/os/maptlbrdb
+7550,800079A0,src/libultra/os/unmaptlball
+75A0,800079F0,src/libultra/io/vi
+76A0,80007AF0,src/libultra/io/vigetcurrcontext
+76B0,80007B00,src/libultra/os/setglobalintmask
+7710,80007B60,src/libultra/os/resetglobalintmask
+7780,80007BD0,src/libultra/io/pirawdma
+7860,80007CB0,src/libultra/io/pigetcmdq
+7890,80007CE0,src/libultra/io/epirawread
+7A10,80007E60,src/libultra/io/epirawwrite
+7B90,80007FE0,src/libultra/io/si
+7BC0,80008010,src/libgcc/__divdi3
+81A0,800085F0,src/libgcc/__moddi3
+8730,80008B80,src/libgcc/__udivdi3
+8CA0,800090F0,src/libgcc/__umoddi3
+91B0,80009600,src/libgcc/__cmpdi2
+9200,80009650,src/libgcc/__floatdidf
+9250,800096A0,src/libgcc/__floatdisf
+9310,80009760,src/libgcc/__fixunsdfdi
+9510,80009960,src/libgcc/__fixdfdi
+9580,800099D0,src/libgcc/__fixunssfdi
+9780,80009BD0,src/libgcc/__fixsfdi
+97E0,80009C30,data/rsp_boot
+
+offset,vram,.data
+98D0,80009D20,src/boot/idle
+98F0,80009D40,src/boot/viconfig
+9910,80009D60,src/boot/carthandle
+9920,80009D70,src/boot/z_std_dma
+9930,80009D80,src/boot/inflate
+9AB0,80009F00,src/boot/z_locale
+9AC0,80009F10,src/boot/driverominit
+9AD0,80009F20,src/libu64/stackcheck
+9AE0,80009F30,src/libultra/os/thread
+9B00,80009F50,src/libultra/os/timerintr
+9B10,80009F60,src/libultra/io/vimgr
+9B30,80009F80,src/libultra/io/vimodentsclan1
+9B80,80009FD0,src/libultra/io/vimodepallan1
+9BD0,8000A020,src/libultra/io/vimodempallan1
+9C20,8000A070,src/libultra/os/exceptasm
+9C50,8000A0A0,src/libultra/io/pimgr
+9C80,8000A0D0,src/libultra/io/cartrominit
+9C90,8000A0E0,src/libultra/io/piacs
+9CA0,8000A0F0,src/libultra/os/initialize
+9CC0,8000A110,src/libultra/os/seteventmesg
+9CD0,8000A120,src/libultra/io/vi
+
+offset,vram,.rodata
+9D40,8000A190,src/boot/boot_main
+9D50,8000A1A0,src/boot/idle
+9FA0,8000A3F0,src/boot/z_std_dma
+A210,8000A660,src/libu64/stackcheck
+A220,8000A670,src/libultra/os/exceptasm
+A270,8000A6C0,src/libultra/os/setintmask
+A2F0,8000A740,src/libultra/io/devmgr
+A310,8000A760,src/libgcc/__divdi3
+A410,8000A860,src/libgcc/__moddi3
+A510,8000A960,src/libgcc/__udivdi3
+A610,8000AA60,src/libgcc/__umoddi3
+A710,8000AA70,src/boot/build
+
+offset,vram,.bss
+A750,8000ABA0,data/boot_common_8000ABA0
+A7A0,8000ABF0,src/boot/boot_main
+B190,8000B5E0,src/boot/idle
+BD90,8000C1E0,src/boot/z_std_dma
+C500,8000C950,src/boot/inflate
+10310,80010760,src/boot/driverominit
+10390,800107E0,src/libultra/io/vimgr
+115B0,80011A00,src/libultra/io/pimgr
+12940,80012D90,data/boot_common_80012D90
+12BF0,80013040,.end
diff --git a/tools/disasm/ique-cn/files_code.csv b/tools/disasm/ique-cn/files_code.csv
new file mode 100644
index 0000000000..031d059a0b
--- /dev/null
+++ b/tools/disasm/ique-cn/files_code.csv
@@ -0,0 +1,528 @@
+offset,vram,.text
+0,80018FA0,src/code/z_en_a_keep
+AA0,80019A40,src/code/z_en_item00
+2EA0,8001BE40,src/code/z_eff_blure
+62D0,8001F270,src/code/z_eff_shield_particle
+7930,800208D0,src/code/z_eff_spark
+8FE0,80021F80,src/code/z_eff_ss_dead
+9790,80022730,src/code/z_effect
+9F10,80022EB0,src/code/z_effect_soft_sprite
+A9B0,80023950,src/code/z_effect_soft_sprite_old_init
+D4D0,80026470,src/code/flg_set
+D8F0,80026890,src/code/z_DLF
+DB40,80026AE0,src/code/z_actor
+18ED0,80031E70,src/code/z_actor_dlftbls
+19020,80031FC0,src/code/z_bgcheck
+22C00,8003BBA0,src/code/z_bg_collect
+22F20,8003BEC0,src/code/z_bg_item
+232B0,8003C250,src/code/z_camera
+378E0,80050880,src/code/z_collision_btltbls
+37940,800508E0,src/code/z_collision_check
+3F5C0,80058560,src/code/z_common_data
+3F670,80058610,src/code/z_debug
+3F980,80058920,src/code/z_debug_display
+3FE40,80058DE0,src/code/z_demo
+44B20,8005DAC0,src/code/z_memory_utils
+44BB0,8005DB50,src/code/z_draw
+46AB0,8005FA50,src/code/z_sfx_source
+46C70,8005FC10,src/code/z_elf_message
+47350,800602F0,src/code/z_face_reaction
+473A0,80060340,src/code/z_env_flags
+47520,800604C0,src/code/z_fcurve_data
+47760,80060700,src/code/z_fcurve_data_skelanime
+47F70,80060F10,src/code/z_horse
+48C50,80061BF0,src/code/z_jpeg
+49410,800623B0,src/code/z_kaleido_setup
+497E0,80062780,src/code/z_kanfont
+499E0,80062980,src/code/z_kankyo
+511F0,8006A190,src/code/z_lib
+52390,8006B330,src/code/z_lifemeter
+53730,8006C6D0,src/code/z_lights
+547D0,8006D770,src/code/z_malloc
+549B0,8006D950,src/code/z_map_mark
+54FB0,8006DF50,src/code/z_prenmi_buff
+55070,8006E010,src/code/z_nulltask
+550F0,8006E090,src/code/z_olib
+557E0,8006E780,src/code/z_onepointdemo
+59780,80072720,src/code/z_map_exp
+5B320,800742C0,src/code/z_parameter
+66080,8007F020,src/code/z_path
+66250,8007F1F0,src/code/z_frame_advance
+66300,8007F2A0,src/code/z_player_lib
+69D70,80082D10,src/code/z_prenmi
+69F10,80082EB0,src/code/z_quake
+6AD80,80083D20,src/code/z_rcp
+6C640,800855E0,src/code/z_room
+6DE30,80086DD0,src/code/z_sample
+6E230,800871D0,src/code/z_inventory
+6E3F0,80087390,src/code/z_scene
+6F8A0,80088840,src/code/z_scene_table
+760A0,8008F040,src/code/z_skelanime
+7AA90,80093A30,src/code/z_skin
+7B630,800945D0,src/code/z_skin_awb
+7BF40,80094EE0,src/code/z_skin_matrix
+7D2E0,80096280,src/code/z_sram
+7E690,80097630,src/code/z_ss_sram
+7E860,80097800,src/code/z_rumble
+7EAE0,80097A80,src/code/z_view
+801E0,80099180,src/code/z_vimode
+80D50,80099CF0,src/code/z_viscvg
+80EF0,80099E90,src/code/z_vismono
+81710,8009A6B0,src/code/z_viszbuf
+819A0,8009A940,src/code/z_vr_box
+84270,8009D210,src/code/z_vr_box_draw
+84950,8009D8F0,src/code/z_player_call
+84AC0,8009DA60,src/code/z_fbdemo
+854E0,8009E480,src/code/z_fbdemo_triforce
+85AA0,8009EA40,src/code/z_fbdemo_wipe1
+85F10,8009EEB0,src/code/z_fbdemo_circle
+865D0,8009F570,src/code/z_fbdemo_fade
+86930,8009F8D0,src/code/shrink_window
+86AA0,8009FA40,src/code/z_cutscene_spline
+86F70,8009FF10,src/code/z_kaleido_manager
+871A0,800A0140,src/code/z_kaleido_scope_call
+87480,800A0420,src/code/z_play
+8AEA0,800A3E40,src/code/PreRender
+8CF90,800A5F30,src/code/TwoHeadGfxArena
+8D1A0,800A6140,src/code/TwoHeadArena
+8D360,800A6300,src/code/audio_stop_all_sfx
+8D3B0,800A6350,src/code/audio_thread_manager
+8D7C0,800A6760,src/code/title_setup
+8D830,800A67D0,src/code/game
+8DFB0,800A6F50,src/code/gamealloc
+8E0F0,800A7090,src/code/graph
+8EA90,800A7A30,src/code/gfxalloc
+8EAF0,800A7A90,src/code/listalloc
+8EC40,800A7BE0,src/code/main
+8EFA0,800A7F40,src/code/padmgr
+8FAA0,800A8A40,src/code/sched
+90720,800A96C0,src/code/speed_meter
+91160,800AA100,src/code/sys_cfb
+91280,800AA220,src/code/sys_math
+91520,800AA4C0,src/code/sys_math3d
+972F0,800B0290,src/code/sys_math_atan
+97520,800B04C0,src/code/sys_matrix
+99920,800B28C0,src/code/sys_ucode
+99970,800B2910,src/code/sys_rumble
+99CD0,800B2C70,src/code/sys_freeze
+99D00,800B2CA0,src/code/irqmgr
+9A320,800B32C0,src/code/fault_gc
+9CB70,800B5B10,src/code/fault_gc_drawer
+9D5F0,800B6590,src/code/kanread
+9E0E0,800B7080,src/audio/lib/synthesis
+A1240,800BA1E0,src/audio/lib/heap
+A4610,800BD5B0,src/audio/lib/load
+A8400,800C13A0,src/audio/lib/thread
+A9C60,800C2C00,src/audio/lib/dcache
+A9CE0,800C2C80,src/audio/lib/aisetnextbuf
+A9D60,800C2D00,src/audio/lib/playback
+ABCE0,800C4C80,src/audio/lib/effects
+AC760,800C5700,src/audio/lib/seqplayer
+AFD80,800C8D20,src/audio/general
+B5F10,800CEEB0,src/audio/sfx
+B7D70,800D0D10,src/audio/sequence
+B9990,800D2930,src/libu64/system_heap
+B9CD0,800D2C70,src/libu64/debug
+B9D30,800D2CD0,src/libu64/gfxprint
+BAAA0,800D3A40,src/libu64/relocation_gc
+BACE0,800D3C80,src/libu64/loadfragment2_gc
+BAD40,800D3CE0,src/libu64/load_gc
+BAE10,800D3DB0,src/libu64/padsetup
+BAF50,800D3EF0,src/libu64/pad
+BB140,800D40E0,src/libu64/rcp_utils
+BB1A0,800D4140,src/libc64/__osMalloc_gc
+BBF50,800D4EF0,src/libc64/aprintf
+BBFB0,800D4F50,src/libc64/malloc
+BC180,800D5120,src/libc64/math64
+BC690,800D5630,src/libc64/fp
+BC7F0,800D5790,src/libc64/qrand
+BC9B0,800D5950,src/libc64/sleep
+BCB50,800D5AF0,src/libc64/sprintf
+BCC20,800D5BC0,src/code/jpegutils
+BD130,800D60D0,src/code/jpegdecoder
+BD720,800D66C0,src/libultra/io/aigetlen
+BD730,800D66D0,src/libultra/io/aisetfreq
+BD830,800D67D0,src/libultra/audio/sl
+BD8E0,800D6880,src/libultra/audio/synthesizer
+BDF50,800D6EF0,src/libultra/audio/syndelete
+BDF60,800D6F00,src/libultra/audio/synallocfx
+BE000,800D6FA0,src/libultra/os/writebackdcacheall
+BE030,800D6FD0,src/libultra/io/contquery
+BE0E0,800D7080,src/libultra/io/contreaddata
+BE360,800D7300,src/libultra/io/controller
+BE730,800D76D0,src/libultra/io/contsetch
+BE790,800D7730,src/libultra/gu/sqrtf
+BE7A0,800D7740,src/libultra/gu/cosf
+BE8D0,800D7870,src/libultra/gu/coss
+BE8F0,800D7890,src/libultra/gu/lookat
+BEC20,800D7BC0,src/libultra/gu/lookathil
+BF4F0,800D8490,src/libultra/gu/ortho
+BF660,800D8600,src/libultra/gu/perspective
+BF860,800D8800,src/libultra/gu/position
+BFA40,800D89E0,src/libultra/gu/sinf
+BFBC0,800D8B60,src/libultra/gu/sins
+BFC10,800D8BB0,src/libultra/gu/us2dex
+BFD30,800D8CD0,src/libultra/libc/ll
+C02B0,800D9250,src/libultra/libc/llcvt
+C05C0,800D9560,src/libultra/libc/string
+C0640,800D95E0,src/libultra/libc/xprintf
+C1020,800D9FC0,src/libultra/io/dpgetstat
+C1030,800D9FD0,src/libultra/io/dpsetstat
+C1040,800D9FE0,src/libultra/io/spgetstat
+C1050,800D9FF0,src/libultra/io/spsetstat
+C1060,800DA000,src/libultra/io/sptask
+C1270,800DA210,src/libultra/io/sptaskyield
+C1290,800DA230,src/libultra/io/sptaskyielded
+C12E0,800DA280,src/libultra/io/sirawdma
+C13C0,800DA360,src/libultra/io/siacs
+C1480,800DA420,src/libultra/os/getthreadid
+C14D0,800DA470,src/libultra/os/getactivequeue
+C1500,800DA4A0,src/libultra/os/settimer
+C16C0,800DA660,src/libultra/os/stoptimer
+C17E0,800DA780,src/libultra/io/vigetcurrframebuf
+C1820,800DA7C0,src/libultra/io/visetevent
+C1880,800DA820,src/libultra/mgu/mtxident
+C18E0,800DA880,src/libultra/mgu/mtxidentf
+C1940,800DA8E0,src/libultra/mgu/mtxf2l
+C19C0,800DA960,src/libultra/mgu/scale
+C1A60,800DAA00,src/libultra/mgu/translate
+C1B30,800DAAD0,src/libultra/gu/rotate
+C1CC0,800DAC60,src/libultra/os/getcurrfaultedthread
+C1CF0,800DAC90,src/libultra/bb/sk/skapi
+C1F40,800DAEE0,src/libultra/bb/sa/common
+C2030,800DAFD0,src/libultra/io/motor
+C2040,800DAFE0,src/libultra/os/afterprenmi
+C2080,800DB020,src/libultra/audio/drvrnew
+C2830,800DB7D0,src/libultra/audio/load
+C32C0,800DC260,src/libultra/audio/auxbus
+C33D0,800DC370,src/libultra/audio/env
+C3F40,800DCEE0,src/libultra/audio/filter
+C3F60,800DCF00,src/libultra/audio/mainbus
+C40D0,800DD070,src/libultra/audio/resample
+C4370,800DD310,src/libultra/audio/reverb
+C4EE0,800DDE80,src/libultra/audio/save
+C4FC0,800DDF60,src/libultra/audio/heapalloc
+C5010,800DDFB0,src/libultra/audio/copy
+C5040,800DDFE0,src/libultra/libc/xlitob
+C5270,800DE210,src/libultra/libc/xldtob
+C5C70,800DEC10,src/libultra/io/sp
+C5CA0,800DEC40,src/libultra/io/spsetpc
+C5CD0,800DEC70,src/libultra/io/sprawdma
+C5D60,800DED00,src/libultra/mgu/normalize
+C5DC0,800DED60,src/libultra/libc/ldiv
+C5F80,800DEF20,src/libc/fmodf
+C5FC0,800DEF60,src/libc/memmove
+C6050,800DEFF0,src/libc/absf
+C6060,800DF000,src/libc/sqrt
+C6070,800DF010,src/code/z_message_z_game_over
+D20D0,800EB070,src/code/z_construct
+D2FD0,800EBF70,data/rsp.text
+
+offset,vram,.data
+D6330,800EF2D0,src/code/z_en_a_keep
+D63D0,800EF370,src/code/z_en_item00
+D6670,800EF610,src/code/z_eff_blure
+D6720,800EF6C0,src/code/z_eff_shield_particle
+D6770,800EF710,src/code/z_effect
+D67C0,800EF760,src/code/z_effect_soft_sprite
+D67D0,800EF770,src/code/z_effect_soft_sprite_old_init
+D68C0,800EF860,src/code/z_effect_soft_sprite_dlftbls
+D6CD0,800EFC70,src/code/flg_set
+D6E90,800EFE30,src/code/z_actor
+D7180,800F0120,src/code/z_actor_dlftbls
+DAC70,800F3C10,src/code/z_bgcheck
+DADC0,800F3D60,src/code/z_camera
+DE310,800F72B0,src/code/z_collision_btltbls
+DE5F0,800F7590,src/code/z_collision_check
+DE8A0,800F7840,src/code/z_debug
+DE8D0,800F7870,src/code/z_debug_display
+DE920,800F78C0,src/code/z_demo
+DEA80,800F7A20,src/code/z_draw
+DFB00,800F8AA0,src/code/z_elf_message
+DFB50,800F8AF0,src/code/z_face_reaction
+DFF90,800F8F30,src/code/z_game_dlftbls
+E00B0,800F9050,src/code/z_horse
+E01C0,800F9160,src/code/z_jpeg
+E0200,800F91A0,src/code/z_kaleido_setup
+E0250,800F91F0,src/code/z_kankyo
+E0640,800F95E0,src/code/z_lib
+E0670,800F9610,src/code/z_lifemeter
+E0790,800F9730,src/code/z_lights
+E07A0,800F9740,src/code/z_map_mark
+E0860,800F9800,src/code/z_onepointdemo
+E4180,800FD120,src/code/z_map_exp
+E41A0,800FD140,src/code/z_map_data
+E5FA0,800FEF40,src/code/z_parameter
+E6280,800FF220,src/code/z_player_lib
+E6960,800FF900,src/code/z_quake
+E6990,800FF930,src/code/z_rcp
+E77B0,80100750,src/code/z_room
+E7830,801007D0,src/code/z_inventory
+E7BB0,80100B50,src/code/z_scene
+E7C30,80100BD0,src/code/object_table
+E88D0,80101870,src/code/z_scene_table
+EAAE0,80103A80,src/code/z_skelanime
+EAB00,80103AA0,src/code/z_skin_matrix
+EAB40,80103AE0,src/code/z_sram
+EACF0,80103C90,src/code/z_ss_sram
+EADA0,80103D40,data/unk_8012ABC0.data
+EADD0,80103D70,src/code/z_view
+EADE0,80103D80,src/code/z_viscvg
+EAE70,80103E10,src/code/z_vr_box
+EB170,80104110,src/code/z_player_call
+EB190,80104130,src/code/z_fbdemo
+EB210,801041B0,src/code/z_fbdemo_triforce
+EB2E0,80104280,src/code/z_fbdemo_wipe1
+EBD80,80104D20,src/code/z_fbdemo_circle
+ED080,80106020,src/code/z_fbdemo_fade
+ED0B0,80106050,src/code/shrink_window
+ED0C0,80106060,src/code/z_kaleido_manager
+ED110,801060B0,src/code/z_play
+ED120,801060C0,src/code/audio_stop_all_sfx
+ED130,801060D0,src/code/graph
+ED140,801060E0,src/code/main
+ED150,801060F0,src/code/padmgr
+ED160,80106100,src/code/speed_meter
+ED190,80106130,src/code/sys_math
+ED1D0,80106170,src/code/sys_math_atan
+ED9E0,80106980,src/code/sys_matrix
+EDA60,80106A00,src/code/sys_ucode
+EDA70,80106A10,src/code/sys_rumble
+EDA80,80106A20,src/code/irqmgr
+EDAA0,80106A40,src/code/fault_gc
+EDB00,80106AA0,src/code/fault_gc_drawer
+EDB40,80106AE0,src/audio/lib/data
+EFF50,80108EF0,src/audio/lib/synthesis
+EFF80,80108F20,src/audio/lib/load
+EFF90,80108F30,src/audio/lib/thread
+EFFB0,80108F50,src/audio/lib/aisetnextbuf
+EFFC0,80108F60,src/audio/lib/effects
+EFFD0,80108F70,src/audio/lib/seqplayer
+F0020,80108FC0,src/audio/general
+F1740,8010A6E0,src/audio/sfx_params
+F2B10,8010BAB0,src/audio/data
+F2B80,8010BB20,src/audio/session_config
+F3320,8010C2C0,src/libu64/system_heap
+F3330,8010C2D0,src/libu64/gfxprint
+F3BE0,8010CB80,src/libu64/logseverity_gc
+F3BF0,8010CB90,src/libc64/__osMalloc_gc
+F3C00,8010CBA0,src/libc64/fp
+F3C20,8010CBC0,src/libc64/qrand
+F3C30,8010CBD0,src/libultra/audio/sl
+F3C40,8010CBE0,src/libultra/io/controller
+F3C50,8010CBF0,src/libultra/gu/position
+F3C60,8010CC00,src/libultra/gu/sins
+F4460,8010D400,src/libultra/libc/xprintf
+F44B0,8010D450,src/libultra/io/siacs
+F44C0,8010D460,src/libultra/io/vitbl
+F5640,8010E5E0,src/libultra/io/vimodentsclpn1
+F5690,8010E630,src/libultra/io/vimodentsclpf1
+F56E0,8010E680,src/libultra/io/vimodentsclaf1
+F5730,8010E6D0,src/libultra/io/vimodentsclpn2
+F5780,8010E720,src/libultra/io/vimodentsclpf2
+F57D0,8010E770,src/libultra/io/vimodentsclan2
+F5820,8010E7C0,src/libultra/io/vimodentsclaf2
+F5870,8010E810,src/libultra/io/vimodentschpn1
+F58C0,8010E860,src/libultra/io/vimodentschpf1
+F5910,8010E8B0,src/libultra/io/vimodentschan1
+F5960,8010E900,src/libultra/io/vimodentschaf1
+F59B0,8010E950,src/libultra/io/vimodentschpn2
+F5A00,8010E9A0,src/libultra/io/vimodentschpf2
+F5A50,8010E9F0,src/libultra/io/vimodepallpn1
+F5AA0,8010EA40,src/libultra/io/vimodepallpf1
+F5AF0,8010EA90,src/libultra/io/vimodepallaf1
+F5B40,8010EAE0,src/libultra/io/vimodepallpn2
+F5B90,8010EB30,src/libultra/io/vimodepallpf2
+F5BE0,8010EB80,src/libultra/io/vimodepallan2
+F5C30,8010EBD0,src/libultra/io/vimodepallaf2
+F5C80,8010EC20,src/libultra/io/vimodepalhpn1
+F5CD0,8010EC70,src/libultra/io/vimodepalhpf1
+F5D20,8010ECC0,src/libultra/io/vimodepalhan1
+F5D70,8010ED10,src/libultra/io/vimodepalhaf1
+F5DC0,8010ED60,src/libultra/io/vimodepalhpn2
+F5E10,8010EDB0,src/libultra/io/vimodepalhpf2
+F5E60,8010EE00,src/libultra/io/vimodempallpn1
+F5EB0,8010EE50,src/libultra/io/vimodempallpf1
+F5F00,8010EEA0,src/libultra/io/vimodempallaf1
+F5F50,8010EEF0,src/libultra/io/vimodempallpn2
+F5FA0,8010EF40,src/libultra/io/vimodempallpf2
+F5FF0,8010EF90,src/libultra/io/vimodempallan2
+F6040,8010EFE0,src/libultra/io/vimodempallaf2
+F6090,8010F030,src/libultra/io/vimodempalhpn1
+F60E0,8010F080,src/libultra/io/vimodempalhpf1
+F6130,8010F0D0,src/libultra/io/vimodempalhan1
+F6180,8010F120,src/libultra/io/vimodempalhaf1
+F61D0,8010F170,src/libultra/io/vimodempalhpn2
+F6220,8010F1C0,src/libultra/io/vimodempalhpf2
+F6270,8010F210,src/libultra/io/vimodefpallpn1
+F62C0,8010F260,src/libultra/io/vimodefpallpf1
+F6310,8010F2B0,src/libultra/io/vimodefpallan1
+F6360,8010F300,src/libultra/io/vimodefpallaf1
+F63B0,8010F350,src/libultra/io/vimodefpallpn2
+F6400,8010F3A0,src/libultra/io/vimodefpallpf2
+F6450,8010F3F0,src/libultra/io/vimodefpallan2
+F64A0,8010F440,src/libultra/io/vimodefpallaf2
+F64F0,8010F490,src/libultra/io/vimodefpalhpn1
+F6540,8010F4E0,src/libultra/io/vimodefpalhpf1
+F6590,8010F530,src/libultra/io/vimodefpalhan1
+F65E0,8010F580,src/libultra/io/vimodefpalhaf1
+F6630,8010F5D0,src/libultra/io/vimodefpalhpn2
+F6680,8010F620,src/libultra/io/vimodefpalhpf2
+F66D0,8010F670,src/libultra/gu/rotate
+F66E0,8010F680,src/libultra/audio/drvrnew
+F6870,8010F810,src/libultra/audio/env
+F6970,8010F910,src/libultra/libc/xlitob
+
+offset,vram,.rodata
+F69A0,8010F940,src/code/z_en_a_keep
+F69F0,8010F990,src/code/z_en_item00
+F6C60,8010FC00,src/code/z_eff_blure
+F6C90,8010FC30,src/code/z_eff_shield_particle
+F6CA0,8010FC40,src/code/z_eff_spark
+F6CB0,8010FC50,src/code/z_eff_ss_dead
+F6CC0,8010FC60,src/code/z_effect_soft_sprite_old_init
+F6CE0,8010FC80,src/code/flg_set
+F7070,80110010,src/code/z_actor
+F7790,80110730,src/code/z_actor_dlftbls
+F77E0,80110780,src/code/z_bgcheck
+F7880,80110820,src/code/z_bg_item
+F7890,80110830,src/code/z_camera
+F8010,80110FB0,src/code/z_collision_check
+F8060,80111000,src/code/z_debug
+F8070,80111010,src/code/z_demo
+F8550,801114F0,src/code/z_draw
+F8560,80111500,src/code/z_elf_message
+F8680,80111620,src/code/z_fcurve_data
+F8690,80111630,src/code/z_fcurve_data_skelanime
+F86A0,80111640,src/code/z_horse
+F86B0,80111650,src/code/z_jpeg
+F8740,801116E0,src/code/z_kanfont
+F87A0,80111740,src/code/z_kankyo
+F8850,801117F0,src/code/z_lib
+F8860,80111800,src/code/z_lifemeter
+F8880,80111820,src/code/z_lights
+F8890,80111830,src/code/z_map_mark
+F88F0,80111890,src/code/z_olib
+F8910,801118B0,src/code/z_onepointdemo
+F91D0,80112170,src/code/z_map_exp
+F94F0,80112490,src/code/z_parameter
+F9BF0,80112B90,src/code/z_path
+F9C00,80112BA0,src/code/z_player_lib
+F9C60,80112C00,src/code/z_quake
+F9CF0,80112C90,src/code/z_room
+F9D30,80112CD0,src/code/z_sample
+F9D40,80112CE0,src/code/z_scene_table
+F9D80,80112D20,src/code/z_skelanime
+F9DA0,80112D40,src/code/z_skin
+F9DB0,80112D50,src/code/z_skin_matrix
+F9DC0,80112D60,src/code/z_sram
+FA460,80113400,src/code/z_rumble
+FA470,80113410,src/code/z_view
+FA480,80113420,src/code/z_vr_box
+FA570,80113510,src/code/z_fbdemo_triforce
+FA580,80113520,src/code/z_fbdemo_wipe1
+FA590,80113530,src/code/z_fbdemo_circle
+FA5A0,80113540,src/code/z_cutscene_spline
+FA5B0,80113550,src/code/z_kaleido_manager
+FA5D0,80113570,src/code/z_play
+FA690,80113630,src/code/game
+FA6B0,80113650,src/code/graph
+FA700,801136A0,src/code/main
+FA730,801136D0,src/code/padmgr
+FA740,801136E0,src/code/sys_cfb
+FA750,801136F0,src/code/sys_math
+FA760,80113700,src/code/sys_math3d
+FA7F0,80113790,src/code/sys_math_atan
+FA800,801137A0,src/code/sys_matrix
+FA830,801137D0,src/code/irqmgr
+FA850,801137F0,src/code/fault_gc
+FB260,80114200,src/code/fault_gc_drawer
+FB690,80114630,src/audio/lib/synthesis
+FB6B0,80114650,src/audio/lib/heap
+FB6E0,80114680,src/audio/lib/load
+FB750,801146F0,src/audio/lib/thread
+FB880,80114820,src/audio/lib/playback
+FB8B0,80114850,src/audio/lib/effects
+FB8E0,80114880,src/audio/lib/seqplayer
+FBF20,80114EC0,src/audio/general
+FC0B0,80115050,src/audio/sfx
+FC0D0,80115070,src/audio/sequence
+FC150,801150F0,src/audio/session_init
+FC160,80115100,src/libu64/debug
+FC170,80115110,src/libu64/gfxprint
+FC190,80115130,src/libc64/__osMalloc_gc
+FC450,801153F0,src/libc64/math64
+FC4A0,80115440,src/libultra/audio/synthesizer
+FC4B0,80115450,src/libultra/gu/cosf
+FC500,801154A0,src/libultra/gu/lookathil
+FC510,801154B0,src/libultra/gu/perspective
+FC520,801154C0,src/libultra/gu/sinf
+FC570,80115510,src/libultra/libc/xprintf
+FC6F0,80115690,src/libultra/audio/drvrnew
+FC710,801156B0,src/libultra/audio/env
+FC7B0,80115750,src/libultra/audio/resample
+FC7E0,80115780,src/libultra/audio/reverb
+FC810,801157B0,src/libultra/gu/libm_vals
+FC820,801157C0,src/libultra/libc/xldtob
+FC880,80115820,src/code/z_message_z_game_over
+106130,8011F0D0,src/code/z_construct
+1062E0,8011F280,data/audio_tables.rodata
+106E80,8011FE20,data/rsp.rodata
+
+offset,vram,.bss
+108FA0,80121F40,data/code_common_80121F40
+108FC0,80121F60,src/code/z_en_item00
+108FD0,80121F70,src/code/z_effect
+10CDC0,80125D60,src/code/flg_set
+10CDD0,80125D70,src/code/z_actor
+10CE50,80125DF0,src/code/z_actor_dlftbls
+10CE60,80125E00,src/code/z_bgcheck
+10CF80,80125F20,src/code/z_camera
+10D060,80126000,src/code/z_collision_check
+10E7C0,80127760,src/code/z_debug
+10E9E0,80127980,src/code/z_debug_display
+10E9F0,80127990,src/code/z_demo
+10EA20,801279C0,src/code/z_kankyo
+10EAF0,80127A90,src/code/z_lifemeter
+10EB20,80127AC0,src/code/z_lights
+10ECB0,80127C50,src/code/z_malloc
+10ECE0,80127C80,src/code/z_map_mark
+10ECF0,80127C90,src/code/z_map_exp
+10ED00,80127CA0,src/code/z_parameter
+10ED20,80127CC0,src/code/z_player_lib
+10ED40,80127CE0,src/code/z_quake
+10EDD0,80127D70,src/code/z_skelanime
+10EDE0,80127D80,src/code/z_skin
+10FCF0,80128C90,src/code/z_rumble
+10FE00,80128DA0,src/code/z_vr_box_draw
+10FE10,80128DB0,src/code/z_player_call
+10FE20,80128DC0,src/code/z_kaleido_scope_call
+10FE40,80128DE0,src/code/z_play
+10FF50,80128EF0,src/code/game
+110030,80128FD0,src/code/graph
+1100A0,80129040,src/code/main
+113F30,8012CED0,src/code/padmgr
+113F40,8012CEE0,src/code/sched
+113F60,8012CF00,src/code/speed_meter
+113FD0,8012CF70,src/code/sys_cfb
+113FE0,8012CF80,src/code/sys_math3d
+114200,8012D1A0,src/code/sys_matrix
+114210,8012D1B0,src/code/fault_gc
+115090,8012E030,src/code/fault_gc_drawer
+1150F0,8012E090,src/audio/lib/load
+1151B0,8012E150,src/audio/general
+1153B0,8012E350,src/audio/sfx
+117BC0,80130B60,src/audio/sequence
+118980,80131920,src/audio/data
+118A20,801319C0,src/audio/session_config
+11EE90,80137E30,src/libu64/gfxprint
+11EEA0,80137E40,src/libc64/__osMalloc_gc
+11EEB0,80137E50,src/libc64/malloc
+11EEE0,80137E80,src/libc64/math64
+11EEF0,80137E90,src/libc64/qrand
+11EF00,80137EA0,src/code/jpegdecoder
+11EF10,80137EB0,src/libultra/io/sptask
+11EF50,80137EF0,src/libultra/io/siacs
+11EF60,80137F00,data/code_common_80137F00
+120420,801393C0,src/code/z_message_z_game_over
+120440,801393E0,.end
diff --git a/tools/disasm/ique-cn/files_ovl_file_choose.csv b/tools/disasm/ique-cn/files_ovl_file_choose.csv
new file mode 100644
index 0000000000..d1c024e666
--- /dev/null
+++ b/tools/disasm/ique-cn/files_ovl_file_choose.csv
@@ -0,0 +1,23 @@
+offset,vram,.text
+0,80803700,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
+3AE0,808071E0,src/overlays/gamestates/ovl_file_choose/z_file_nameset
+8F30,8080C630,src/overlays/gamestates/ovl_file_choose/z_file_choose
+
+offset,vram,.data
+F6E0,80812DE0,src/overlays/gamestates/ovl_file_choose/z_file_nameset_data
+FDC0,808134C0,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
+FE00,80813500,src/overlays/gamestates/ovl_file_choose/z_file_nameset
+FFA0,808136A0,src/overlays/gamestates/ovl_file_choose/z_file_choose
+
+offset,vram,.rodata
+10280,80813980,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
+102B0,808139B0,src/overlays/gamestates/ovl_file_choose/z_file_nameset
+102C0,808139C0,src/overlays/gamestates/ovl_file_choose/z_file_choose
+
+offset,vram,.ovl
+102E0,808139E0,src/overlays/gamestates/ovl_file_choose/ovl_file_choose_reloc
+
+offset,vram,.bss
+10AD0,808141D0,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
+10AE0,808141E0,src/overlays/gamestates/ovl_file_choose/z_file_nameset
+10AF0,808141F0,.end
diff --git a/tools/disasm/ique-cn/files_ovl_kaleido_scope.csv b/tools/disasm/ique-cn/files_ovl_kaleido_scope.csv
new file mode 100644
index 0000000000..4f63c0b0e9
--- /dev/null
+++ b/tools/disasm/ique-cn/files_ovl_kaleido_scope.csv
@@ -0,0 +1,35 @@
+offset,vram,.text
+0,808141F0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect
+2400,808165F0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug
+43B0,808185A0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment
+5E30,8081A020,src/overlays/misc/ovl_kaleido_scope/z_kaleido_item
+7E20,8081C010,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map
+B3F0,8081F5E0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt
+B5F0,8081F7E0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope
+149E0,80828BD0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark
+
+offset,vram,.data
+150A0,80829290,src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect
+15250,80829440,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug
+15420,80829610,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment
+15450,80829640,src/overlays/misc/ovl_kaleido_scope/z_kaleido_item
+154C0,808296B0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map
+15700,808298F0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt
+15710,80829900,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope
+160A0,8082A290,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark
+160F0,8082A2E0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data
+
+offset,vram,.rodata
+1A250,8082E440,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug
+1A330,8082E520,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment
+1A340,8082E530,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map
+1A380,8082E570,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope
+1A5F0,8082E7E0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark
+1A6A0,8082E890,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data
+
+offset,vram,.ovl
+1A720,8082E910,src/overlays/misc/ovl_kaleido_scope/ovl_kaleido_scope_reloc
+
+offset,vram,.bss
+1C030,80830220,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope
+1C040,80830230,.end
diff --git a/tools/disasm/ique-cn/functions.txt b/tools/disasm/ique-cn/functions.txt
new file mode 100644
index 0000000000..41abd66a7c
--- /dev/null
+++ b/tools/disasm/ique-cn/functions.txt
@@ -0,0 +1,13230 @@
+entrypoint = 0x80000400; // type:func
+bootclear = 0x80000450; // type:func
+bootproc = 0x80000484; // type:func
+Main_ThreadEntry = 0x80000590; // type:func
+Idle_ThreadEntry = 0x80000604; // type:func
+ViConfig_UpdateVi = 0x800007E0; // type:func
+ViConfig_UpdateBlack = 0x800008D8; // type:func
+DmaMgr_StrCmp = 0x80000920; // type:func
+DmaMgr_DmaRomToRam = 0x80000980; // type:func
+DmaMgr_AudioDmaHandler = 0x80000AD0; // type:func
+DmaMgr_DmaFromDriveRom = 0x80000AEC; // type:func
+DmaMgr_GetFileName = 0x80000BA4; // type:func
+DmaMgr_ProcessRequest = 0x80000BB0; // type:func
+DmaMgr_ThreadEntry = 0x80000D60; // type:func
+DmaMgr_RequestAsync = 0x80000DC4; // type:func
+DmaMgr_RequestSync = 0x80000E14; // type:func
+DmaMgr_Init = 0x80000EAC; // type:func
+gzip_malloc = 0x80000FA0; // type:func
+gzip_free = 0x80000FE8; // type:func
+huft_build = 0x80001004; // type:func
+huft_free = 0x800015E8; // type:func
+inflate_codes = 0x8000162C; // type:func
+inflate_stored = 0x80001BCC; // type:func
+inflate_fixed = 0x80001E4C; // type:func
+inflate_dynamic = 0x80002018; // type:func
+inflate_block = 0x80002808; // type:func
+inflate = 0x800029B0; // type:func
+gzip_read = 0x80002A88; // type:func
+unzip = 0x80002B14; // type:func
+clear_bufs = 0x80002B50; // type:func
+fill_inbuf = 0x80002B68; // type:func
+flush_window = 0x80002C2C; // type:func
+gzip_decompress = 0x80002C3C; // type:func
+Locale_Init = 0x80002C80; // type:func
+Locale_ResetRegion = 0x80002CB4; // type:func
+osSyncPrintfUnused = 0x80002CC0; // type:func
+osSyncPrintf = 0x80002CC8; // type:func
+rmonPrintf = 0x80002CD0; // type:func
+osDriveRomInit = 0x80002CE0; // type:func
+Mio0_Decompress = 0x80002EC0; // type:func
+StackCheck_Init = 0x80002F70; // type:func
+StackCheck_Cleanup = 0x80003048; // type:func
+StackCheck_GetState = 0x800030B8; // type:func
+StackCheck_CheckAll = 0x80003130; // type:func
+StackCheck_Check = 0x80003188; // type:func
+osInvalDCache = 0x800031C0; // type:func
+osInvalICache = 0x80003270; // type:func
+bcmp = 0x800032F0; // type:func
+bzero = 0x80003400; // type:func
+osCreateMesgQueue = 0x800034A0; // type:func
+osRecvMesg = 0x80003510; // type:func
+osSendMesg = 0x80003680; // type:func
+__osGetFpcCsr = 0x800037F0; // type:func
+__osGetSR = 0x80003800; // type:func
+__osSetFpcCsr = 0x80003810; // type:func
+__osSetSR = 0x80003820; // type:func
+osCreateThread = 0x80003830; // type:func
+osSetThreadPri = 0x800039A0; // type:func
+osStartThread = 0x80003AB0; // type:func
+osStopThread = 0x80003C40; // type:func
+__osDequeueThread = 0x80003D30; // type:func
+osGetTime = 0x80003D90; // type:func
+__osTimerServicesInit = 0x80003E40; // type:func
+__osTimerInterrupt = 0x80003EEC; // type:func
+__osSetTimerIntr = 0x800040D4; // type:func
+__osInsertTimer = 0x800041A8; // type:func
+osViGetNextFramebuffer = 0x80004360; // type:func
+osCreateViManager = 0x800043A0; // type:func
+viMgrMain = 0x80004518; // type:func
+osViSetMode = 0x800046A0; // type:func
+osViSetSpecialFeatures = 0x80004720; // type:func
+osViSetXScale = 0x800048A0; // type:func
+osViSetYScale = 0x80004960; // type:func
+osViSwapBuffer = 0x800049B0; // type:func
+__osViSwapContext = 0x80004A00; // type:func
+osViBlack = 0x80004D10; // type:func
+osViExtendVStart = 0x80004D70; // type:func
+__osExceptionPreamble = 0x80004D80; // type:func
+__osException = 0x80004D90; // type:func
+__osEnqueueAndYield = 0x80005504; // type:func
+__osEnqueueThread = 0x80005610; // type:func
+__osPopThread = 0x80005658; // type:func
+__osNop = 0x80005668; // type:func
+__osDispatchThread = 0x80005670; // type:func
+__osCleanupThread = 0x800057F0; // type:func
+__osDisableInt = 0x80005800; // type:func
+__osRestoreInt = 0x80005870; // type:func
+osSetIntMask = 0x80005890; // type:func
+__osSetHWIntrRoutine = 0x80005940; // type:func
+__osGetHWIntrRoutine = 0x800059D0; // type:func
+osCreatePiManager = 0x80005A40; // type:func
+__osEPiRawStartDma = 0x80005BC0; // type:func
+osEPiReadIo = 0x80005F80; // type:func
+osEPiStartDma = 0x80005FE0; // type:func
+osCartRomInit = 0x80006080; // type:func
+__osDevMgrMain = 0x800061E0; // type:func
+__osPiCreateAccessQueue = 0x80006680; // type:func
+__osPiGetAccess = 0x800066D4; // type:func
+__osPiRelAccess = 0x80006710; // type:func
+osGetMemSize = 0x800067B0; // type:func
+__createSpeedParam = 0x800067E0; // type:func
+__osInitialize_common = 0x80006894; // type:func
+__osInitialize_autodetect = 0x80006D4C; // type:func
+osWritebackDCache = 0x80006D70; // type:func
+osVirtualToPhysical = 0x80006DF0; // type:func
+bcopy = 0x80006EC0; // type:func
+osJamMesg = 0x800071E0; // type:func
+osSetEventMesg = 0x80007360; // type:func
+__osGetCause = 0x80007430; // type:func
+__osSetWatchLo = 0x80007440; // type:func
+osGetCount = 0x80007450; // type:func
+__osSetCompare = 0x80007550; // type:func
+__osSiRawReadIo = 0x80007600; // type:func
+__osSiRawWriteIo = 0x80007650; // type:func
+osDestroyThread = 0x800076A0; // type:func
+osGetThreadPri = 0x800077D0; // type:func
+osYieldThread = 0x80007820; // type:func
+__osProbeTLB = 0x80007880; // type:func
+osMapTLBRdb = 0x80007940; // type:func
+osUnmapTLBAll = 0x800079A0; // type:func
+__osViInit = 0x800079F0; // type:func
+__osViGetCurrentContext = 0x80007AF0; // type:func
+__osSetGlobalIntMask = 0x80007B00; // type:func
+__osResetGlobalIntMask = 0x80007B60; // type:func
+__osPiRawStartDma = 0x80007BD0; // type:func
+osPiGetCmdQueue = 0x80007CB0; // type:func
+__osEPiRawReadIo = 0x80007CE0; // type:func
+__osEPiRawWriteIo = 0x80007E60; // type:func
+__osSiDeviceBusy = 0x80007FE0; // type:func
+__divdi3 = 0x80008010; // type:func
+__moddi3 = 0x800085F0; // type:func
+__udivdi3 = 0x80008B80; // type:func
+__umoddi3 = 0x800090F0; // type:func
+__cmpdi2 = 0x80009600; // type:func
+__floatdidf = 0x80009650; // type:func
+__floatdisf = 0x800096A0; // type:func
+__fixunsdfdi = 0x80009760; // type:func
+__fixdfdi = 0x80009960; // type:func
+__fixunssfdi = 0x800099D0; // type:func
+__fixsfdi = 0x80009BD0; // type:func
+EnAObj_SetupAction = 0x80018FA0; // type:func
+EnAObj_Init = 0x80018FAC; // type:func
+EnAObj_Destroy = 0x800192EC; // type:func
+EnAObj_WaitFinishedTalking = 0x80019348; // type:func
+EnAObj_SetupWaitTalk = 0x80019378; // type:func
+EnAObj_WaitTalk = 0x800193A0; // type:func
+EnAObj_SetupBlockRot = 0x80019454; // type:func
+EnAObj_BlockRot = 0x800194A4; // type:func
+EnAObj_SetupBoulderFragment = 0x800195C4; // type:func
+EnAObj_BoulderFragment = 0x800195EC; // type:func
+EnAObj_SetupBlock = 0x8001970C; // type:func
+EnAObj_Block = 0x8001974C; // type:func
+EnAObj_Update = 0x80019834; // type:func
+EnAObj_Draw = 0x80019950; // type:func
+EnItem00_SetupAction = 0x80019A40; // type:func
+EnItem00_Init = 0x80019A4C; // type:func
+EnItem00_Destroy = 0x8001A0B4; // type:func
+func_8001DFC8 = 0x8001A0E0; // type:func
+func_8001E1C8 = 0x8001A2E0; // type:func
+func_8001E304 = 0x8001A41C; // type:func
+EnItem00_Collected = 0x8001A6E0; // type:func
+EnItem00_Update = 0x8001A838; // type:func
+EnItem00_Draw = 0x8001AEB8; // type:func
+EnItem00_DrawRupee = 0x8001B050; // type:func
+EnItem00_DrawCollectible = 0x8001B168; // type:func
+EnItem00_DrawHeartContainer = 0x8001B2A8; // type:func
+EnItem00_DrawHeartPiece = 0x8001B3A0; // type:func
+func_8001F404 = 0x8001B438; // type:func
+Item_DropCollectible = 0x8001B580; // type:func
+Item_DropCollectible2 = 0x8001B7B8; // type:func
+Item_DropCollectibleRandom = 0x8001B98C; // type:func
+EffectBlure_AddVertex = 0x8001BE40; // type:func
+EffectBlure_AddSpace = 0x8001C164; // type:func
+EffectBlure_InitElements = 0x8001C1A8; // type:func
+EffectBlure_Init1 = 0x8001C260; // type:func
+EffectBlure_Init2 = 0x8001C370; // type:func
+EffectBlure_Destroy = 0x8001C4A4; // type:func
+EffectBlure_Update = 0x8001C4B0; // type:func
+EffectBlure_UpdateFlags = 0x8001C914; // type:func
+EffectBlure_GetComputedValues = 0x8001CA84; // type:func
+EffectBlure_SetupSmooth = 0x8001CF98; // type:func
+EffectBlure_DrawElemNoInterpolation = 0x8001CFCC; // type:func
+EffectBlure_DrawElemHermiteInterpolation = 0x8001D4A0; // type:func
+EffectBlure_DrawSmooth = 0x8001DE2C; // type:func
+EffectBlure_SetupSimple = 0x8001E0FC; // type:func
+EffectBlure_SetupSimpleAlt = 0x8001E134; // type:func
+EffectBlure_DrawSimpleVertices = 0x8001E39C; // type:func
+EffectBlure_DrawSimple = 0x8001E87C; // type:func
+EffectBlure_Draw = 0x8001ED88; // type:func
+EffectShieldParticle_Init = 0x8001F270; // type:func
+EffectShieldParticle_Destroy = 0x8001F4A8; // type:func
+EffectShieldParticle_Update = 0x8001F534; // type:func
+EffectShieldParticle_GetColors = 0x8001F698; // type:func
+EffectShieldParticle_Draw = 0x800203B8; // type:func
+EffectSpark_Init = 0x800208D0; // type:func
+EffectSpark_Destroy = 0x80020CAC; // type:func
+EffectSpark_Update = 0x80020CB8; // type:func
+EffectSpark_Draw = 0x80020D7C; // type:func
+func_80026230 = 0x80021F80; // type:func
+func_80026400 = 0x80022128; // type:func
+func_80026608 = 0x8002230C; // type:func
+func_80026690 = 0x80022350; // type:func
+func_80026860 = 0x800224F8; // type:func
+func_80026A6C = 0x800226E4; // type:func
+Effect_GetPlayState = 0x80022730; // type:func
+Effect_GetByIndex = 0x80022740; // type:func
+Effect_InitStatus = 0x80022850; // type:func
+Effect_InitContext = 0x80022864; // type:func
+Effect_Add = 0x8002290C; // type:func
+Effect_DrawAll = 0x80022A8C; // type:func
+Effect_UpdateAll = 0x80022B88; // type:func
+Effect_Delete = 0x80022CB4; // type:func
+Effect_DeleteAll = 0x80022DC0; // type:func
+EffectSs_InitInfo = 0x80022EB0; // type:func
+EffectSs_ClearAll = 0x80022F94; // type:func
+EffectSs_Delete = 0x80023054; // type:func
+EffectSs_Reset = 0x800230B4; // type:func
+EffectSs_FindSlot = 0x80023148; // type:func
+EffectSs_Insert = 0x80023280; // type:func
+EffectSs_Spawn = 0x80023318; // type:func
+EffectSs_Update = 0x800234C0; // type:func
+EffectSs_UpdateAll = 0x80023560; // type:func
+EffectSs_Draw = 0x8002361C; // type:func
+EffectSs_DrawAll = 0x80023660; // type:func
+EffectSs_LerpInv = 0x800237AC; // type:func
+EffectSs_LerpS16 = 0x80023810; // type:func
+EffectSs_LerpU8 = 0x80023864; // type:func
+EffectSs_DrawGEffect = 0x80023950; // type:func
+EffectSsDust_Spawn = 0x80023B8C; // type:func
+func_8002829C = 0x80023C40; // type:func
+func_80028304 = 0x80023CA8; // type:func
+func_8002836C = 0x80023D10; // type:func
+func_800283D4 = 0x80023D78; // type:func
+func_8002843C = 0x80023DE0; // type:func
+func_800284A4 = 0x80023E48; // type:func
+func_80028510 = 0x80023EB4; // type:func
+func_8002857C = 0x80023F20; // type:func
+func_800285EC = 0x80023F90; // type:func
+func_8002865C = 0x80024000; // type:func
+func_800286CC = 0x80024070; // type:func
+func_8002873C = 0x800240E0; // type:func
+func_800287AC = 0x80024150; // type:func
+func_8002881C = 0x800241C0; // type:func
+func_80028858 = 0x800241FC; // type:func
+func_80028894 = 0x80024238; // type:func
+func_80028990 = 0x80024334; // type:func
+func_80028A54 = 0x800243F8; // type:func
+EffectSsKiraKira_SpawnSmallYellow = 0x800244BC; // type:func
+EffectSsKiraKira_SpawnSmall = 0x80024518; // type:func
+EffectSsKiraKira_SpawnDispersed = 0x80024554; // type:func
+EffectSsKiraKira_SpawnFocused = 0x80024690; // type:func
+EffectSsBomb_Spawn = 0x80024768; // type:func
+EffectSsBomb2_SpawnFade = 0x800247C0; // type:func
+EffectSsBomb2_SpawnLayered = 0x80024828; // type:func
+EffectSsBlast_Spawn = 0x80024898; // type:func
+EffectSsBlast_SpawnWhiteShockwaveSetScale = 0x80024928; // type:func
+EffectSsBlast_SpawnShockwaveSetColor = 0x8002497C; // type:func
+EffectSsBlast_SpawnWhiteShockwave = 0x800249C8; // type:func
+EffectSsGSpk_SpawnAccel = 0x80024A04; // type:func
+EffectSsGSpk_SpawnNoAccel = 0x80024A94; // type:func
+EffectSsGSpk_SpawnFuse = 0x80024B28; // type:func
+EffectSsGSpk_SpawnRandColor = 0x80024B7C; // type:func
+EffectSsGSpk_SpawnSmall = 0x80024C80; // type:func
+EffectSsDFire_Spawn = 0x80024CC4; // type:func
+EffectSsDFire_SpawnFixedScale = 0x80024D44; // type:func
+EffectSsBubble_Spawn = 0x80024D88; // type:func
+EffectSsGRipple_Spawn = 0x80024DE8; // type:func
+EffectSsGSplash_Spawn = 0x80024E40; // type:func
+EffectSsGMagma_Spawn = 0x80024ED4; // type:func
+EffectSsGFire_Spawn = 0x80024F0C; // type:func
+EffectSsLightning_Spawn = 0x80024F44; // type:func
+EffectSsDtBubble_SpawnColorProfile = 0x80024FBC; // type:func
+EffectSsDtBubble_SpawnCustomColor = 0x80025038; // type:func
+EffectSsHahen_Spawn = 0x800250C8; // type:func
+EffectSsHahen_SpawnBurst = 0x80025148; // type:func
+EffectSsStick_Spawn = 0x80025290; // type:func
+EffectSsSibuki_Spawn = 0x800252E4; // type:func
+EffectSsSibuki_SpawnBurst = 0x80025354; // type:func
+EffectSsSibuki2_Spawn = 0x800254D8; // type:func
+EffectSsGMagma2_Spawn = 0x80025538; // type:func
+EffectSsStone1_Spawn = 0x800255A8; // type:func
+EffectSsHitMark_Spawn = 0x800255FC; // type:func
+EffectSsHitMark_SpawnFixedScale = 0x80025654; // type:func
+EffectSsHitMark_SpawnCustomScale = 0x80025678; // type:func
+EffectSsFhgFlash_SpawnLightBall = 0x800256A4; // type:func
+EffectSsFhgFlash_SpawnShock = 0x80025710; // type:func
+EffectSsKFire_Spawn = 0x80025774; // type:func
+EffectSsSolderSrchBall_Spawn = 0x800257DC; // type:func
+EffectSsKakera_Spawn = 0x80025844; // type:func
+EffectSsIcePiece_Spawn = 0x800258FC; // type:func
+EffectSsIcePiece_SpawnBurst = 0x80025964; // type:func
+EffectSsEnIce_SpawnFlyingVec3f = 0x80025AF8; // type:func
+EffectSsEnIce_SpawnFlyingVec3s = 0x80025B98; // type:func
+EffectSsEnIce_Spawn = 0x80025C64; // type:func
+EffectSsFireTail_Spawn = 0x80025CEC; // type:func
+EffectSsFireTail_SpawnFlame = 0x80025D84; // type:func
+EffectSsFireTail_SpawnFlameOnPlayer = 0x80025E48; // type:func
+EffectSsEnFire_SpawnVec3f = 0x80025E98; // type:func
+EffectSsEnFire_SpawnVec3s = 0x80025F10; // type:func
+EffectSsExtra_Spawn = 0x80025FBC; // type:func
+EffectSsFCircle_Spawn = 0x80026024; // type:func
+EffectSsDeadDb_Spawn = 0x80026080; // type:func
+EffectSsDeadDd_Spawn = 0x80026138; // type:func
+EffectSsDeadDd_SpawnRandYellow = 0x800261EC; // type:func
+EffectSsDeadDs_Spawn = 0x8002625C; // type:func
+EffectSsDeadDs_SpawnStationary = 0x800262D4; // type:func
+EffectSsDeadSound_Spawn = 0x80026324; // type:func
+EffectSsDeadSound_SpawnStationary = 0x800263BC; // type:func
+EffectSsIceSmoke_Spawn = 0x8002640C; // type:func
+FlagSet_Update = 0x80026470; // type:func
+Overlay_LoadGameState = 0x80026890; // type:func
+Overlay_FreeGameState = 0x800269B8; // type:func
+ActorShape_Init = 0x80026AE0; // type:func
+ActorShadow_Draw = 0x80026AF8; // type:func
+ActorShadow_DrawCircle = 0x80026DC0; // type:func
+ActorShadow_DrawWhiteCircle = 0x80026DE4; // type:func
+ActorShadow_DrawHorse = 0x80026E10; // type:func
+ActorShadow_DrawFoot = 0x80026E34; // type:func
+ActorShadow_DrawFeet = 0x8002701C; // type:func
+Actor_SetFeetPos = 0x80027450; // type:func
+Actor_ProjectPos = 0x80027490; // type:func
+Attention_SetReticlePos = 0x800274E0; // type:func
+Attention_InitReticle = 0x80027510; // type:func
+Attention_SetNaviState = 0x800275DC; // type:func
+Attention_Init = 0x800276CC; // type:func
+Attention_Draw = 0x8002773C; // type:func
+Attention_Update = 0x80027D18; // type:func
+Flags_GetSwitch = 0x80028068; // type:func
+Flags_SetSwitch = 0x8002809C; // type:func
+Flags_UnsetSwitch = 0x800280DC; // type:func
+Flags_GetUnknown = 0x80028124; // type:func
+Flags_SetUnknown = 0x80028158; // type:func
+Flags_UnsetUnknown = 0x80028198; // type:func
+Flags_GetTreasure = 0x800281E0; // type:func
+Flags_SetTreasure = 0x800281F4; // type:func
+Flags_GetClear = 0x8002820C; // type:func
+Flags_SetClear = 0x80028220; // type:func
+Flags_UnsetClear = 0x80028238; // type:func
+Flags_GetTempClear = 0x80028254; // type:func
+Flags_SetTempClear = 0x80028268; // type:func
+Flags_UnsetTempClear = 0x80028280; // type:func
+Flags_GetCollectible = 0x8002829C; // type:func
+Flags_SetCollectible = 0x800282D0; // type:func
+TitleCard_Init = 0x80028318; // type:func
+TitleCard_InitBossName = 0x8002832C; // type:func
+TitleCard_InitPlaceName = 0x8002835C; // type:func
+TitleCard_Update = 0x800283F0; // type:func
+TitleCard_Draw = 0x80028488; // type:func
+TitleCard_Clear = 0x80028A18; // type:func
+Actor_Kill = 0x80028A44; // type:func
+Actor_SetWorldToHome = 0x80028A60; // type:func
+Actor_SetFocus = 0x80028A8C; // type:func
+Actor_SetWorldRotToShape = 0x80028AC8; // type:func
+Actor_SetShapeRotToWorld = 0x80028AE4; // type:func
+Actor_SetScale = 0x80028B00; // type:func
+Actor_SetObjectDependency = 0x80028B14; // type:func
+Actor_Init = 0x80028B4C; // type:func
+Actor_Destroy = 0x80028C60; // type:func
+Actor_UpdatePos = 0x80028C98; // type:func
+Actor_UpdateVelocityXZGravity = 0x80028D10; // type:func
+Actor_MoveXZGravity = 0x80028D78; // type:func
+Actor_UpdateVelocityXYZ = 0x80028DA4; // type:func
+Actor_MoveXYZ = 0x80028E10; // type:func
+Actor_SetProjectileSpeed = 0x80028E3C; // type:func
+Actor_UpdatePosByAnimation = 0x80028E90; // type:func
+Actor_WorldYawTowardActor = 0x80028F08; // type:func
+Actor_FocusYawTowardActor = 0x80028F28; // type:func
+Actor_WorldYawTowardPoint = 0x80028F48; // type:func
+Actor_WorldPitchTowardActor = 0x80028F64; // type:func
+Actor_FocusPitchTowardActor = 0x80028F84; // type:func
+Actor_WorldPitchTowardPoint = 0x80028FA4; // type:func
+Actor_WorldDistXYZToActor = 0x80028FC0; // type:func
+Actor_WorldDistXYZToPoint = 0x80028FE0; // type:func
+Actor_WorldDistXZToActor = 0x80028FFC; // type:func
+Actor_WorldDistXZToPoint = 0x8002901C; // type:func
+Actor_WorldToActorCoords = 0x80029038; // type:func
+Actor_HeightDiff = 0x800290D8; // type:func
+Player_GetHeight = 0x800290E8; // type:func
+func_8002DCE4 = 0x80029140; // type:func
+func_8002DD6C = 0x800291CC; // type:func
+func_8002DD78 = 0x800291D8; // type:func
+func_8002DDA8 = 0x8002921C; // type:func
+func_8002DDE4 = 0x80029264; // type:func
+func_8002DDF4 = 0x80029274; // type:func
+Actor_SwapHookshotAttachment = 0x80029284; // type:func
+Actor_RequestHorseCameraSetting = 0x800292F0; // type:func
+Actor_MountHorse = 0x8002934C; // type:func
+func_8002DEEC = 0x80029368; // type:func
+Actor_InitPlayerHorse = 0x80029398; // type:func
+Player_SetCsAction = 0x800293B4; // type:func
+Player_SetCsActionWithHaltedActors = 0x800293CC; // type:func
+func_8002DF90 = 0x80029404; // type:func
+func_8002DFA4 = 0x80029414; // type:func
+Player_IsFacingActor = 0x8002942C; // type:func
+Actor_ActorBIsFacingActorA = 0x80029478; // type:func
+Actor_IsFacingPlayer = 0x800294DC; // type:func
+Actor_ActorAIsFacingActorB = 0x80029520; // type:func
+Actor_IsFacingAndNearPlayer = 0x80029580; // type:func
+Actor_ActorAIsFacingAndNearActorB = 0x800295F8; // type:func
+func_8002E234 = 0x80029684; // type:func
+func_8002E2AC = 0x800296E4; // type:func
+Actor_UpdateBgCheckInfo = 0x800298D0; // type:func
+func_8002E830 = 0x80029C04; // type:func
+func_8002EABC = 0x80029DA0; // type:func
+func_8002EB44 = 0x80029DDC; // type:func
+func_8002EBCC = 0x80029E18; // type:func
+func_8002ED80 = 0x80029F38; // type:func
+Actor_GetFocus = 0x8002A058; // type:func
+Actor_GetWorld = 0x8002A08C; // type:func
+Actor_GetWorldPosShapeRot = 0x8002A0C0; // type:func
+Attention_WeightedDistToPlayerSq = 0x8002A13C; // type:func
+Attention_ActorIsInRange = 0x8002A1FC; // type:func
+Attention_ShouldReleaseLockOn = 0x8002A22C; // type:func
+Actor_TalkOfferAccepted = 0x8002A2E8; // type:func
+Actor_OfferTalkExchange = 0x8002A310; // type:func
+Actor_OfferTalkExchangeEquiCylinder = 0x8002A3E0; // type:func
+Actor_OfferTalk = 0x8002A404; // type:func
+Actor_OfferTalkNearColChkInfoCylinder = 0x8002A420; // type:func
+Actor_TextboxIsClosing = 0x8002A458; // type:func
+Actor_GetPlayerExchangeItemId = 0x8002A484; // type:func
+Actor_GetScreenPos = 0x8002A494; // type:func
+Actor_HasParent = 0x8002A524; // type:func
+Actor_OfferGetItem = 0x8002A540; // type:func
+Actor_OfferGetItemNearby = 0x8002A65C; // type:func
+Actor_OfferCarry = 0x8002A684; // type:func
+Actor_HasNoParent = 0x8002A6A0; // type:func
+func_8002F5C4 = 0x8002A6BC; // type:func
+Actor_SetClosestSecretDistance = 0x8002A6E4; // type:func
+Actor_IsMounted = 0x8002A708; // type:func
+Actor_SetRideActor = 0x8002A724; // type:func
+Actor_NotMounted = 0x8002A754; // type:func
+Actor_SetPlayerKnockback = 0x8002A770; // type:func
+Actor_SetPlayerKnockbackLarge = 0x8002A798; // type:func
+Actor_SetPlayerKnockbackLargeNoDamage = 0x8002A7D0; // type:func
+Actor_SetPlayerKnockbackSmall = 0x8002A7FC; // type:func
+Actor_SetPlayerKnockbackSmallNoDamage = 0x8002A834; // type:func
+Player_PlaySfx = 0x8002A860; // type:func
+Actor_PlaySfx = 0x8002A8A0; // type:func
+Actor_PlaySfx_SurfaceBomb = 0x8002A8C0; // type:func
+Actor_PlaySfx_Flagged2 = 0x8002A94C; // type:func
+Actor_PlaySfx_FlaggedCentered1 = 0x8002A970; // type:func
+Actor_PlaySfx_FlaggedCentered2 = 0x8002A994; // type:func
+Actor_PlaySfx_Flagged = 0x8002A9B8; // type:func
+Actor_PlaySfx_FlaggedTimer = 0x8002A9D4; // type:func
+func_8002F9EC = 0x8002AA24; // type:func
+func_8002FA60 = 0x8002AA9C; // type:func
+Actor_DrawFaroresWindPointer = 0x8002ABE4; // type:func
+func_80030488 = 0x8002B34C; // type:func
+Actor_DisableLens = 0x8002B370; // type:func
+Actor_InitContext = 0x8002B394; // type:func
+Actor_UpdateAll = 0x8002B4B8; // type:func
+Actor_FaultPrint = 0x8002B904; // type:func
+Actor_Draw = 0x8002B970; // type:func
+Actor_UpdateFlaggedAudio = 0x8002BC1C; // type:func
+Actor_DrawLensOverlay = 0x8002BCF0; // type:func
+Actor_DrawLensActors = 0x8002BE8C; // type:func
+Actor_CullingCheck = 0x8002C0EC; // type:func
+Actor_CullingVolumeTest = 0x8002C10C; // type:func
+func_800315AC = 0x8002C1B8; // type:func
+Actor_KillAllWithMissingObject = 0x8002C3A4; // type:func
+Actor_FreezeAllEnemies = 0x8002C438; // type:func
+func_80031B14 = 0x8002C48C; // type:func
+func_80031C3C = 0x8002C5A0; // type:func
+Actor_AddToCategory = 0x8002C650; // type:func
+Actor_RemoveFromCategory = 0x8002C6A0; // type:func
+Actor_FreeOverlay = 0x8002C770; // type:func
+Actor_Spawn = 0x8002C7CC; // type:func
+Actor_SpawnAsChild = 0x8002CA70; // type:func
+Actor_SpawnTransitionActors = 0x8002CAFC; // type:func
+Actor_SpawnEntry = 0x8002CC7C; // type:func
+Actor_Delete = 0x8002CCF4; // type:func
+Attention_ActorOnScreen = 0x8002CDF8; // type:func
+Attention_FindActorInCategory = 0x8002CE48; // type:func
+Attention_FindActor = 0x8002D040; // type:func
+Actor_Find = 0x8002D178; // type:func
+Enemy_StartFinishingBlow = 0x8002D1B4; // type:func
+FaceChange_UpdateBlinking = 0x8002D1E0; // type:func
+FaceChange_UpdateRandomSet = 0x8002D280; // type:func
+BodyBreak_Alloc = 0x8002D358; // type:func
+BodyBreak_SetInfo = 0x8002D448; // type:func
+BodyBreak_SpawnParts = 0x8002D554; // type:func
+Actor_SpawnFloorDustRing = 0x8002D730; // type:func
+func_80033480 = 0x8002D930; // type:func
+Actor_GetCollidedExplosive = 0x8002DAB8; // type:func
+func_80033684 = 0x8002DAEC; // type:func
+Actor_ChangeCategory = 0x8002DB8C; // type:func
+Actor_GetProjectileActor = 0x8002DBD8; // type:func
+Actor_SetTextWithPrefix = 0x8002DD44; // type:func
+Actor_TestFloorInDirection = 0x8002DDB8; // type:func
+Actor_IsLockedOn = 0x8002DE98; // type:func
+Actor_OtherIsLockedOn = 0x8002DEC8; // type:func
+func_80033AEC = 0x8002DEF8; // type:func
+func_80033C30 = 0x8002DFD4; // type:func
+Actor_RequestQuake = 0x8002E124; // type:func
+Actor_RequestQuakeWithSpeed = 0x8002E1A0; // type:func
+Actor_RequestQuakeAndRumble = 0x8002E22C; // type:func
+Rand_ZeroFloat = 0x8002E2B0; // type:func
+Rand_CenteredFloat = 0x8002E2D8; // type:func
+Actor_DrawDoorLock = 0x8002E30C; // type:func
+func_8003424C = 0x8002E57C; // type:func
+Actor_SetColorFilter = 0x8002E598; // type:func
+func_800342EC = 0x8002E5CC; // type:func
+func_8003435C = 0x8002E63C; // type:func
+Npc_UpdateTalking = 0x8002E6AC; // type:func
+Npc_TrackPointWithLimits = 0x8002E79C; // type:func
+Npc_GetTrackingPresetMaxPlayerYaw = 0x8002EA9C; // type:func
+Npc_UpdateAutoTurn = 0x8002EAC0; // type:func
+Npc_TrackPoint = 0x8002EC48; // type:func
+func_80034B28 = 0x8002ED90; // type:func
+func_80034B54 = 0x8002EDAC; // type:func
+func_80034BA0 = 0x8002EDE0; // type:func
+func_80034CC4 = 0x8002EEF8; // type:func
+Actor_UpdateAlphaByDistance = 0x8002EFF8; // type:func
+Animation_ChangeByInfo = 0x8002F0C4; // type:func
+Actor_UpdateFidgetTables = 0x8002F150; // type:func
+Actor_Noop = 0x8002F1A8; // type:func
+func_80035124 = 0x8002F1B0; // type:func
+Gfx_DrawDListOpa = 0x8002F2F4; // type:func
+Gfx_DrawDListXlu = 0x8002F380; // type:func
+func_800353E8 = 0x8002F40C; // type:func
+Actor_FindNearby = 0x8002F41C; // type:func
+func_800354B4 = 0x8002F4C0; // type:func
+func_8003555C = 0x8002F554; // type:func
+func_800355B8 = 0x8002F5AC; // type:func
+func_800355E4 = 0x8002F5D8; // type:func
+Actor_ApplyDamage = 0x8002F614; // type:func
+Actor_SetDropFlag = 0x8002F63C; // type:func
+Actor_SetDropFlagJntSph = 0x8002F724; // type:func
+func_80035844 = 0x8002F820; // type:func
+func_800358DC = 0x8002F8C0; // type:func
+func_800359B8 = 0x8002F994; // type:func
+func_80035B18 = 0x8002FAE0; // type:func
+Flags_GetEventChkInf = 0x8002FB18; // type:func
+Flags_SetEventChkInf = 0x8002FB40; // type:func
+Flags_GetInfTable = 0x8002FB70; // type:func
+Flags_SetInfTable = 0x8002FB98; // type:func
+func_80035BFC = 0x8002FBC8; // type:func
+func_80036E50 = 0x800309B0; // type:func
+func_800374E0 = 0x80031038; // type:func
+func_80037C30 = 0x80031710; // type:func
+func_80037C5C = 0x80031734; // type:func
+func_80037C94 = 0x8003175C; // type:func
+func_80037CB8 = 0x8003177C; // type:func
+func_80037D98 = 0x80031884; // type:func
+Actor_TrackNone = 0x800319F0; // type:func
+Actor_TrackPoint = 0x80031A8C; // type:func
+Actor_TrackPlayerSetFocusHeight = 0x80031C1C; // type:func
+Actor_TrackPlayer = 0x80031D4C; // type:func
+ActorOverlayTable_LogPrint = 0x80031E70; // type:func
+ActorOverlayTable_FaultPrint = 0x80031E78; // type:func
+ActorOverlayTable_Init = 0x80031F50; // type:func
+ActorOverlayTable_Cleanup = 0x80031F90; // type:func
+SSNode_SetValue = 0x80031FC0; // type:func
+SSList_SetNull = 0x80031FDC; // type:func
+SSNodeList_SetSSListHead = 0x80031FEC; // type:func
+DynaSSNodeList_SetSSListHead = 0x80032044; // type:func
+DynaSSNodeList_Initialize = 0x8003209C; // type:func
+DynaSSNodeList_Alloc = 0x800320B0; // type:func
+DynaSSNodeList_ResetCount = 0x80032100; // type:func
+DynaSSNodeList_GetNextNodeIdx = 0x8003210C; // type:func
+BgCheck_Vec3sToVec3f = 0x8003213C; // type:func
+BgCheck_Vec3fToVec3s = 0x80032180; // type:func
+CollisionPoly_GetMinY = 0x800321C4; // type:func
+CollisionPoly_GetNormalF = 0x80032270; // type:func
+func_80038A28 = 0x800322C8; // type:func
+CollisionPoly_GetPointDistanceFromPlane = 0x8003241C; // type:func
+CollisionPoly_GetVertices = 0x80032484; // type:func
+CollisionPoly_GetVerticesByBgId = 0x80032524; // type:func
+CollisionPoly_CheckYIntersectApprox1 = 0x800325A4; // type:func
+CollisionPoly_CheckYIntersect = 0x800326D8; // type:func
+CollisionPoly_CheckYIntersectApprox2 = 0x80032784; // type:func
+CollisionPoly_CheckXIntersectApprox = 0x800327C4; // type:func
+CollisionPoly_CheckZIntersectApprox = 0x80032868; // type:func
+CollisionPoly_LineVsPoly = 0x8003290C; // type:func
+CollisionPoly_SphVsPoly = 0x80032BEC; // type:func
+StaticLookup_AddPolyToSSList = 0x80032CBC; // type:func
+StaticLookup_AddPoly = 0x80032EDC; // type:func
+BgCheck_RaycastDownStaticList = 0x80032F70; // type:func
+BgCheck_RaycastDownStatic = 0x800331AC; // type:func
+BgCheck_ComputeWallDisplacement = 0x800332C4; // type:func
+BgCheck_SphVsStaticWall = 0x80033374; // type:func
+BgCheck_CheckStaticCeiling = 0x80033C08; // type:func
+BgCheck_CheckLineAgainstSSList = 0x80033DE0; // type:func
+BgCheck_CheckLineInSubdivision = 0x80034004; // type:func
+BgCheck_SphVsFirstStaticPolyList = 0x80034190; // type:func
+BgCheck_SphVsFirstStaticPoly = 0x80034360; // type:func
+BgCheck_GetNearestStaticLookup = 0x80034498; // type:func
+BgCheck_GetStaticLookup = 0x8003454C; // type:func
+BgCheck_GetStaticLookupIndicesFromPos = 0x80034618; // type:func
+BgCheck_GetSubdivisionMinBounds = 0x800346F8; // type:func
+BgCheck_GetSubdivisionMaxBounds = 0x8003489C; // type:func
+BgCheck_GetPolySubdivisionBounds = 0x80034A68; // type:func
+BgCheck_PolyIntersectsSubdivision = 0x80034C18; // type:func
+BgCheck_InitializeStaticLookup = 0x8003536C; // type:func
+BgCheck_IsSpotScene = 0x8003576C; // type:func
+BgCheck_TryGetCustomMemsize = 0x800357B0; // type:func
+BgCheck_SetSubdivisionDimension = 0x80035848; // type:func
+BgCheck_Allocate = 0x800358D0; // type:func
+BgCheck_GetCollisionHeader = 0x80035CB4; // type:func
+BgCheck_PosInStaticBoundingBox = 0x80035D1C; // type:func
+BgCheck_RaycastDownImpl = 0x80035DD8; // type:func
+BgCheck_CameraRaycastDown1 = 0x80035FA8; // type:func
+BgCheck_EntityRaycastDown1 = 0x80036004; // type:func
+BgCheck_EntityRaycastDown2 = 0x80036060; // type:func
+BgCheck_EntityRaycastDown3 = 0x800360B4; // type:func
+BgCheck_EntityRaycastDown4 = 0x80036118; // type:func
+BgCheck_EntityRaycastDown5 = 0x80036180; // type:func
+BgCheck_EntityRaycastDown6 = 0x800361D8; // type:func
+BgCheck_EntityRaycastDown7 = 0x8003623C; // type:func
+BgCheck_AnyRaycastDown1 = 0x800362A4; // type:func
+BgCheck_AnyRaycastDown2 = 0x80036358; // type:func
+BgCheck_CameraRaycastDown2 = 0x80036410; // type:func
+BgCheck_EntityRaycastDownWalls = 0x80036474; // type:func
+BgCheck_EntityRaycastDown9 = 0x800364DC; // type:func
+BgCheck_CheckWallImpl = 0x80036540; // type:func
+BgCheck_EntitySphVsWall1 = 0x80036B7C; // type:func
+BgCheck_EntitySphVsWall2 = 0x80036BE0; // type:func
+BgCheck_EntitySphVsWall3 = 0x80036C44; // type:func
+BgCheck_EntitySphVsWall4 = 0x80036CAC; // type:func
+BgCheck_CheckCeilingImpl = 0x80036D18; // type:func
+BgCheck_AnyCheckCeiling = 0x80036E38; // type:func
+BgCheck_EntityCheckCeiling = 0x80036E84; // type:func
+BgCheck_CheckLineImpl = 0x80036ED4; // type:func
+BgCheck_GetBccFlags = 0x800373B4; // type:func
+BgCheck_CameraLineTest1 = 0x800373FC; // type:func
+BgCheck_CameraLineTest2 = 0x80037488; // type:func
+BgCheck_EntityLineTest1 = 0x80037514; // type:func
+BgCheck_EntityLineTest2 = 0x800375A0; // type:func
+BgCheck_EntityLineTest3 = 0x80037630; // type:func
+BgCheck_ProjectileLineTest = 0x800376BC; // type:func
+BgCheck_AnyLineTest1 = 0x80037748; // type:func
+BgCheck_AnyLineTest2 = 0x8003778C; // type:func
+BgCheck_AnyLineTest3 = 0x80037818; // type:func
+BgCheck_SphVsFirstPolyImpl = 0x800378A4; // type:func
+BgCheck_SphVsFirstPoly = 0x80037968; // type:func
+BgCheck_SphVsFirstWall = 0x800379AC; // type:func
+SSNodeList_Initialize = 0x800379F4; // type:func
+SSNodeList_Alloc = 0x80037A0C; // type:func
+SSNodeList_GetNextNode = 0x80037A7C; // type:func
+SSNodeList_GetNextNodeIdx = 0x80037AB8; // type:func
+ScaleRotPos_Initialize = 0x80037ACC; // type:func
+ScaleRotPos_SetValue = 0x80037B0C; // type:func
+ScaleRotPos_Equals = 0x80037B5C; // type:func
+DynaLookup_ResetLists = 0x80037C30; // type:func
+DynaLookup_Reset = 0x80037C70; // type:func
+DynaLookup_ResetVtxStartIndex = 0x80037C90; // type:func
+BgActor_Initialize = 0x80037C9C; // type:func
+BgActor_SetActor = 0x80037CFC; // type:func
+BgActor_IsTransformUnchanged = 0x80037DB4; // type:func
+DynaPoly_NullPolyList = 0x80037DDC; // type:func
+DynaPoly_AllocPolyList = 0x80037DE8; // type:func
+DynaPoly_NullVtxList = 0x80037E24; // type:func
+DynaPoly_AllocVtxList = 0x80037E30; // type:func
+DynaPoly_SetBgActorPrevTransform = 0x80037E78; // type:func
+DynaPoly_IsBgIdBgActor = 0x80037EC4; // type:func
+DynaPoly_Init = 0x80037EE4; // type:func
+DynaPoly_Alloc = 0x80037F30; // type:func
+DynaPoly_SetBgActor = 0x80038004; // type:func
+DynaPoly_GetActor = 0x800380C4; // type:func
+DynaPoly_DisableCollision = 0x80038138; // type:func
+DynaPoly_EnableCollision = 0x80038190; // type:func
+DynaPoly_DisableCeilingCollision = 0x800381E8; // type:func
+DynaPoly_EnableCeilingCollision = 0x80038240; // type:func
+DynaPoly_DeleteBgActor = 0x80038298; // type:func
+DynaPoly_InvalidateLookup = 0x80038320; // type:func
+DynaPoly_AddBgActorToLookup = 0x80038338; // type:func
+DynaPoly_UnsetAllInteractFlags = 0x80038C84; // type:func
+DynaPoly_UpdateContext = 0x80038D1C; // type:func
+DynaPoly_UpdateBgActorTransforms = 0x80038E88; // type:func
+BgCheck_RaycastDownDynaList = 0x80038F18; // type:func
+BgCheck_RaycastDownDyna = 0x80039100; // type:func
+BgCheck_SphVsDynaWallInBgActor = 0x800395A8; // type:func
+BgCheck_SphVsDynaWall = 0x80039C6C; // type:func
+BgCheck_CheckDynaCeilingList = 0x80039EA8; // type:func
+BgCheck_CheckDynaCeiling = 0x8003A104; // type:func
+BgCheck_CheckLineAgainstBgActorSSList = 0x8003A268; // type:func
+BgCheck_CheckLineAgainstBgActor = 0x8003A3EC; // type:func
+BgCheck_CheckLineAgainstDyna = 0x8003A508; // type:func
+BgCheck_SphVsFirstDynaPolyList = 0x8003A6C0; // type:func
+BgCheck_SphVsFirstDynaPolyInBgActor = 0x8003A7D8; // type:func
+BgCheck_SphVsFirstDynaPoly = 0x8003A918; // type:func
+CollisionHeader_SegmentedToVirtual = 0x8003AA70; // type:func
+CollisionHeader_GetVirtual = 0x8003AB54; // type:func
+func_800418D0 = 0x8003ABA8; // type:func
+BgCheck_ResetPolyCheckTbl = 0x8003AC50; // type:func
+SurfaceType_GetData = 0x8003AC88; // type:func
+SurfaceType_GetBgCamIndex = 0x8003AD00; // type:func
+BgCheck_GetBgCamSettingImpl = 0x8003AD24; // type:func
+BgCheck_GetBgCamSetting = 0x8003AD6C; // type:func
+BgCheck_GetBgCamCountImpl = 0x8003AE00; // type:func
+BgCheck_GetBgCamCount = 0x8003AE5C; // type:func
+BgCheck_GetBgCamFuncDataImpl = 0x8003AEF0; // type:func
+BgCheck_GetBgCamFuncData = 0x8003AF78; // type:func
+SurfaceType_GetExitIndex = 0x8003B00C; // type:func
+SurfaceType_GetFloorType = 0x8003B034; // type:func
+func_80041D70 = 0x8003B05C; // type:func
+SurfaceType_GetWallType = 0x8003B084; // type:func
+SurfaceType_GetWallFlags = 0x8003B0AC; // type:func
+SurfaceType_CheckWallFlag0 = 0x8003B0DC; // type:func
+SurfaceType_CheckWallFlag1 = 0x8003B110; // type:func
+SurfaceType_CheckWallFlag2 = 0x8003B144; // type:func
+SurfaceType_GetFloorProperty2 = 0x8003B178; // type:func
+SurfaceType_GetFloorProperty = 0x8003B1A0; // type:func
+SurfaceType_IsSoft = 0x8003B1C8; // type:func
+SurfaceType_IsHorseBlocked = 0x8003B1F0; // type:func
+SurfaceType_GetMaterial = 0x8003B218; // type:func
+SurfaceType_GetSfxOffset = 0x8003B23C; // type:func
+SurfaceType_GetFloorEffect = 0x8003B284; // type:func
+SurfaceType_GetLightSetting = 0x8003B2AC; // type:func
+SurfaceType_GetEcho = 0x8003B2D4; // type:func
+SurfaceType_CanHookshot = 0x8003B2FC; // type:func
+SurfaceType_IsIgnoredByEntities = 0x8003B324; // type:func
+SurfaceType_IsIgnoredByProjectiles = 0x8003B360; // type:func
+SurfaceType_IsFloorConveyor = 0x8003B39C; // type:func
+SurfaceType_GetConveyorSpeed = 0x8003B3D8; // type:func
+SurfaceType_GetConveyorDirection = 0x8003B400; // type:func
+func_80042108 = 0x8003B428; // type:func
+WaterBox_GetSurface1 = 0x8003B45C; // type:func
+WaterBox_GetSurfaceImpl = 0x8003B568; // type:func
+WaterBox_GetSurface2 = 0x8003B6C0; // type:func
+WaterBox_GetBgCamIndex = 0x8003B85C; // type:func
+WaterBox_GetBgCamSetting = 0x8003B870; // type:func
+WaterBox_GetLightIndex = 0x8003B8C8; // type:func
+func_800425B0 = 0x8003B8E0; // type:func
+func_80042708 = 0x8003BA38; // type:func
+func_800427B4 = 0x8003BAE8; // type:func
+DynaPolyActor_UpdateCarriedActorPos = 0x8003BBA0; // type:func
+DynaPolyActor_UpdateCarriedActorRotY = 0x8003BCDC; // type:func
+func_80043334 = 0x8003BD70; // type:func
+DynaPolyActor_TransformCarriedActor = 0x8003BDE0; // type:func
+DynaPolyActor_Init = 0x8003BEC0; // type:func
+DynaPolyActor_UnsetAllInteractFlags = 0x8003BEE4; // type:func
+DynaPolyActor_SetActorOnTop = 0x8003BEF0; // type:func
+DynaPolyActor_SetPlayerOnTop = 0x8003BF04; // type:func
+DynaPoly_SetPlayerOnTop = 0x8003BF18; // type:func
+DynaPolyActor_SetPlayerAbove = 0x8003BF48; // type:func
+DynaPoly_SetPlayerAbove = 0x8003BF5C; // type:func
+DynaPolyActor_SetSwitchPressed = 0x8003BF8C; // type:func
+DynaPolyActor_IsActorOnTop = 0x8003BFA0; // type:func
+DynaPolyActor_IsPlayerOnTop = 0x8003BFC4; // type:func
+DynaPolyActor_IsPlayerAbove = 0x8003BFE8; // type:func
+DynaPolyActor_IsSwitchPressed = 0x8003C00C; // type:func
+func_800435D8 = 0x8003C030; // type:func
+Camera_InterpolateCurve = 0x8003C250; // type:func
+Camera_LERPCeilF = 0x8003C2FC; // type:func
+Camera_LERPFloorF = 0x8003C340; // type:func
+Camera_LERPCeilS = 0x8003C384; // type:func
+Camera_LERPFloorS = 0x8003C418; // type:func
+Camera_LERPCeilVec3f = 0x8003C4AC; // type:func
+func_80043ABC = 0x8003C530; // type:func
+func_80043B60 = 0x8003C570; // type:func
+Camera_Vec3sToVec3f = 0x8003C5A0; // type:func
+Camera_AddVecGeoToVec3f = 0x8003C608; // type:func
+Camera_Vec3fTranslateByUnitVector = 0x8003C688; // type:func
+Camera_BGCheckInfo = 0x8003C6F4; // type:func
+Camera_BGCheck = 0x8003C91C; // type:func
+func_80043F94 = 0x8003C978; // type:func
+func_80044340 = 0x8003CD30; // type:func
+Camera_CheckOOB = 0x8003CD8C; // type:func
+Camera_GetFloorYNorm = 0x8003CE28; // type:func
+Camera_GetFloorY = 0x8003CF0C; // type:func
+Camera_GetFloorYLayer = 0x8003CF68; // type:func
+Camera_GetBgCamSetting = 0x8003D12C; // type:func
+Camera_GetBgCamFuncData = 0x8003D160; // type:func
+Camera_GetBgCamIndex = 0x8003D190; // type:func
+Camera_GetBgCamFuncDataUnderPlayer = 0x8003D210; // type:func
+Camera_GetWaterBoxBgCamIndex = 0x8003D2C0; // type:func
+Camera_GetWaterSurface = 0x8003D3A0; // type:func
+Camera_XZAngle = 0x8003D468; // type:func
+Camera_GetPitchAdjFromFloorHeightDiffs = 0x8003D4D0; // type:func
+Camera_CalcUpFromPitchYawRoll = 0x8003D7FC; // type:func
+Camera_ClampLERPScale = 0x8003DA38; // type:func
+Camera_CopyDataToRegs = 0x8003DA90; // type:func
+Camera_UpdateInterface = 0x8003DAA0; // type:func
+Camera_BGCheckCorner = 0x8003DBAC; // type:func
+func_80045508 = 0x8003DC14; // type:func
+Camera_CalcSlopeYAdj = 0x8003DE24; // type:func
+Camera_CalcAtDefault = 0x8003DEB8; // type:func
+func_800458D4 = 0x8003DFD0; // type:func
+func_80045B08 = 0x8003E188; // type:func
+Camera_CalcAtForParallel = 0x8003E2E8; // type:func
+Camera_CalcAtForLockOn = 0x8003E64C; // type:func
+Camera_CalcAtForHorse = 0x8003EB04; // type:func
+Camera_LERPClampDist = 0x8003ECC0; // type:func
+Camera_ClampDist = 0x8003ED78; // type:func
+Camera_CalcDefaultPitch = 0x8003EE8C; // type:func
+Camera_CalcDefaultYaw = 0x8003EFEC; // type:func
+func_80046E20 = 0x8003F140; // type:func
+Camera_Noop = 0x8003F664; // type:func
+Camera_Normal1 = 0x8003F674; // type:func
+Camera_Normal2 = 0x800400CC; // type:func
+Camera_Normal3 = 0x8004085C; // type:func
+Camera_Normal4 = 0x80040F04; // type:func
+Camera_Normal0 = 0x80040F24; // type:func
+Camera_Parallel1 = 0x80040F44; // type:func
+Camera_Parallel2 = 0x800417D0; // type:func
+Camera_Parallel3 = 0x800417F0; // type:func
+Camera_Parallel4 = 0x80041854; // type:func
+Camera_Parallel0 = 0x80041874; // type:func
+Camera_Jump1 = 0x80041894; // type:func
+Camera_Jump2 = 0x80041ED4; // type:func
+Camera_Jump3 = 0x800427C0; // type:func
+Camera_Jump4 = 0x80042F2C; // type:func
+Camera_Jump0 = 0x80042F4C; // type:func
+Camera_Battle1 = 0x80042F6C; // type:func
+Camera_Battle2 = 0x80043CA8; // type:func
+Camera_Battle3 = 0x80043CC8; // type:func
+Camera_Battle4 = 0x80043CE8; // type:func
+Camera_Battle0 = 0x80044040; // type:func
+Camera_KeepOn1 = 0x80044060; // type:func
+Camera_KeepOn2 = 0x80044DB0; // type:func
+Camera_KeepOn3 = 0x80044DD0; // type:func
+Camera_KeepOn4 = 0x800457C8; // type:func
+Camera_KeepOn0 = 0x800465E0; // type:func
+Camera_Fixed1 = 0x80046880; // type:func
+Camera_Fixed2 = 0x80046B6C; // type:func
+Camera_Fixed3 = 0x80046F20; // type:func
+Camera_Fixed4 = 0x80047120; // type:func
+Camera_Fixed0 = 0x800474AC; // type:func
+Camera_Subj1 = 0x800474CC; // type:func
+Camera_Subj2 = 0x800474EC; // type:func
+Camera_Subj3 = 0x8004750C; // type:func
+Camera_Subj4 = 0x80047B10; // type:func
+Camera_Subj0 = 0x80048144; // type:func
+Camera_Data0 = 0x80048164; // type:func
+Camera_Data1 = 0x80048184; // type:func
+Camera_Data2 = 0x800481A4; // type:func
+Camera_Data3 = 0x800481C4; // type:func
+Camera_Data4 = 0x800481E4; // type:func
+Camera_Unique1 = 0x800484D0; // type:func
+Camera_Unique2 = 0x80048954; // type:func
+Camera_Unique3 = 0x80048D0C; // type:func
+Camera_Unique0 = 0x800491BC; // type:func
+Camera_Unique4 = 0x800496D8; // type:func
+Camera_Unique5 = 0x800496F8; // type:func
+Camera_Unique6 = 0x80049718; // type:func
+Camera_Unique7 = 0x80049848; // type:func
+Camera_Unique8 = 0x80049A4C; // type:func
+Camera_Unique9 = 0x80049A6C; // type:func
+Camera_Vec3fCopy = 0x8004AEC8; // type:func
+Camera_RotateAroundPoint = 0x8004AEE8; // type:func
+Camera_Demo1 = 0x8004AF44; // type:func
+Camera_Demo2 = 0x8004B11C; // type:func
+Camera_Demo3 = 0x8004B13C; // type:func
+Camera_Demo4 = 0x8004BBD8; // type:func
+Camera_Demo5 = 0x8004BBF8; // type:func
+Camera_Demo6 = 0x8004C5D0; // type:func
+Camera_Demo7 = 0x8004C874; // type:func
+Camera_Demo8 = 0x8004C8A8; // type:func
+Camera_Demo9 = 0x8004C8C8; // type:func
+Camera_Demo0 = 0x8004CCE8; // type:func
+Camera_Special0 = 0x8004CD08; // type:func
+Camera_Special1 = 0x8004CE50; // type:func
+Camera_Special2 = 0x8004CE70; // type:func
+Camera_Special3 = 0x8004CE90; // type:func
+Camera_Special4 = 0x8004CEB0; // type:func
+Camera_Special5 = 0x8004D054; // type:func
+Camera_Special7 = 0x8004D3F8; // type:func
+Camera_Special6 = 0x8004D744; // type:func
+Camera_Special8 = 0x8004DBB4; // type:func
+Camera_Special9 = 0x8004DBD4; // type:func
+Camera_Create = 0x8004E2BC; // type:func
+Camera_Destroy = 0x8004E30C; // type:func
+Camera_Init = 0x8004E334; // type:func
+func_80057FC4 = 0x8004E554; // type:func
+Camera_Stub80058140 = 0x8004E6A8; // type:func
+Camera_InitDataUsingPlayer = 0x8004E6B4; // type:func
+Camera_ChangeStatus = 0x8004E8B0; // type:func
+Camera_UpdateWater = 0x8004E8CC; // type:func
+Camera_UpdateHotRoom = 0x8004ECE8; // type:func
+Camera_UpdateDistortion = 0x8004ED28; // type:func
+Camera_Update = 0x8004F088; // type:func
+Camera_Finish = 0x8004F8B8; // type:func
+Camera_SetNewModeStateFlags = 0x8004FA24; // type:func
+Camera_RequestModeImpl = 0x8004FA48; // type:func
+Camera_RequestMode = 0x8004FDAC; // type:func
+Camera_CheckValidMode = 0x8004FDD8; // type:func
+Camera_RequestSettingImpl = 0x8004FE44; // type:func
+Camera_RequestSetting = 0x80050038; // type:func
+Camera_RequestBgCam = 0x80050064; // type:func
+Camera_GetInputDir = 0x80050138; // type:func
+Camera_GetInputDirPitch = 0x8005015C; // type:func
+Camera_GetInputDirYaw = 0x80050184; // type:func
+Camera_GetCamDir = 0x800501AC; // type:func
+Camera_GetCamDirPitch = 0x800501D0; // type:func
+Camera_GetCamDirYaw = 0x800501F8; // type:func
+Camera_RequestQuake = 0x80050220; // type:func
+Camera_SetViewParam = 0x80050294; // type:func
+Camera_UnsetViewFlag = 0x80050428; // type:func
+Camera_OverwriteStateFlags = 0x80050450; // type:func
+Camera_ResetAnim = 0x8005046C; // type:func
+Camera_SetCSParams = 0x8005047C; // type:func
+Camera_SetStateFlag = 0x80050510; // type:func
+Camera_UnsetStateFlag = 0x80050534; // type:func
+Camera_ChangeDoorCam = 0x8005055C; // type:func
+Camera_Copy = 0x8005065C; // type:func
+Camera_IsDebugCamEnabled = 0x800507A4; // type:func
+Camera_GetQuakeOffset = 0x800507B0; // type:func
+Camera_SetCameraData = 0x800507D4; // type:func
+func_8005B198 = 0x80050820; // type:func
+Camera_SetFinishedFlag = 0x80050830; // type:func
+DamageTable_Get = 0x80050880; // type:func
+DamageTable_Clear = 0x800508AC; // type:func
+Collider_InitBase = 0x800508E0; // type:func
+Collider_DestroyBase = 0x80050928; // type:func
+Collider_SetBaseToActor = 0x8005093C; // type:func
+Collider_SetBaseType1 = 0x8005097C; // type:func
+Collider_SetBase = 0x800509C0; // type:func
+Collider_ResetATBase = 0x80050A04; // type:func
+Collider_ResetACBase = 0x80050A20; // type:func
+Collider_ResetOCBase = 0x80050A3C; // type:func
+Collider_InitElementDamageInfoAT = 0x80050A64; // type:func
+Collider_DestroyElementDamageInfoAT = 0x80050A8C; // type:func
+Collider_SetElementDamageInfoAT = 0x80050AA0; // type:func
+Collider_ResetATElement_Unk = 0x80050AC8; // type:func
+Collider_InitElementDamageInfoAC = 0x80050AD8; // type:func
+Collider_DestroyElementDamageInfoAC = 0x80050B08; // type:func
+Collider_SetElementDamageInfoAC = 0x80050B1C; // type:func
+Collider_InitElement = 0x80050B44; // type:func
+Collider_DestroyElement = 0x80050BC4; // type:func
+Collider_SetElement = 0x80050C04; // type:func
+Collider_ResetATElement = 0x80050C7C; // type:func
+Collider_ResetACElement = 0x80050CB4; // type:func
+Collider_ResetOCElement = 0x80050CEC; // type:func
+Collider_InitJntSphElementDim = 0x80050D04; // type:func
+Collider_DestroyJntSphElementDim = 0x80050D4C; // type:func
+Collider_SetJntSphElementDim = 0x80050D60; // type:func
+Collider_InitJntSphElement = 0x80050DB8; // type:func
+Collider_DestroyJntSphElement = 0x80050DF8; // type:func
+Collider_SetJntSphElement = 0x80050E38; // type:func
+Collider_ResetJntSphElementAT = 0x80050E88; // type:func
+Collider_ResetJntSphElementAC = 0x80050EAC; // type:func
+Collider_ResetJntSphElementOC = 0x80050ED0; // type:func
+Collider_InitJntSph = 0x80050EF4; // type:func
+Collider_FreeJntSph = 0x80050F20; // type:func
+Collider_DestroyJntSph = 0x80050FC0; // type:func
+Collider_SetJntSphToActor = 0x80051050; // type:func
+Collider_SetJntSphAllocType1 = 0x8005112C; // type:func
+Collider_SetJntSphAlloc = 0x80051208; // type:func
+Collider_SetJntSph = 0x800512E4; // type:func
+Collider_ResetJntSphAT = 0x80051398; // type:func
+Collider_ResetJntSphAC = 0x80051424; // type:func
+Collider_ResetJntSphOC = 0x800514B0; // type:func
+Collider_InitCylinderDim = 0x8005153C; // type:func
+Collider_DestroyCylinderDim = 0x80051598; // type:func
+Collider_SetCylinderDim = 0x800515AC; // type:func
+Collider_InitCylinder = 0x800515EC; // type:func
+Collider_DestroyCylinder = 0x8005163C; // type:func
+Collider_SetCylinderToActor = 0x8005168C; // type:func
+Collider_SetCylinderType1 = 0x800516F4; // type:func
+Collider_SetCylinder = 0x8005175C; // type:func
+Collider_ResetCylinderAT = 0x800517C4; // type:func
+Collider_ResetCylinderAC = 0x80051804; // type:func
+Collider_ResetCylinderOC = 0x80051844; // type:func
+Collider_InitTrisElementDim = 0x80051884; // type:func
+Collider_DestroyTrisElementDim = 0x800518D0; // type:func
+Collider_SetTrisElementDim = 0x800518E4; // type:func
+Collider_InitTrisElement = 0x80051998; // type:func
+Collider_DestroyTrisElement = 0x800519D8; // type:func
+Collider_SetTrisElement = 0x80051A18; // type:func
+Collider_ResetTrisElementAT = 0x80051A68; // type:func
+Collider_ResetTrisElementAC = 0x80051A8C; // type:func
+Collider_ResetTrisElementOC = 0x80051AB0; // type:func
+Collider_InitTris = 0x80051AD4; // type:func
+Collider_FreeTris = 0x80051B00; // type:func
+Collider_DestroyTris = 0x80051BB8; // type:func
+Collider_SetTrisAllocType1 = 0x80051C5C; // type:func
+Collider_SetTrisAlloc = 0x80051D5C; // type:func
+Collider_SetTris = 0x80051E5C; // type:func
+Collider_ResetTrisAT = 0x80051F28; // type:func
+Collider_ResetTrisAC = 0x80051FC8; // type:func
+Collider_ResetTrisOC = 0x80052068; // type:func
+Collider_InitQuadDim = 0x80052108; // type:func
+Collider_DestroyQuadDim = 0x80052154; // type:func
+Collider_ResetQuadACDist = 0x80052168; // type:func
+Collider_SetQuadMidpoints = 0x80052184; // type:func
+Collider_SetQuadDim = 0x80052240; // type:func
+Collider_InitQuad = 0x800522C8; // type:func
+Collider_DestroyQuad = 0x80052318; // type:func
+Collider_SetQuadType1 = 0x80052368; // type:func
+Collider_SetQuad = 0x800523D0; // type:func
+Collider_ResetQuadAT = 0x80052438; // type:func
+Collider_ResetQuadAC = 0x80052488; // type:func
+Collider_ResetQuadOC = 0x800524C8; // type:func
+Collider_QuadSetNearestAC = 0x80052508; // type:func
+Collider_InitLine = 0x800525B8; // type:func
+Collider_DestroyLine = 0x80052618; // type:func
+Collider_SetLinePoints = 0x8005262C; // type:func
+Collider_SetLine = 0x80052670; // type:func
+Collider_ResetLineOC = 0x8005269C; // type:func
+CollisionCheck_InitContext = 0x800526B8; // type:func
+CollisionCheck_DestroyContext = 0x800526D8; // type:func
+CollisionCheck_ClearContext = 0x800526E8; // type:func
+CollisionCheck_EnableSAC = 0x80052790; // type:func
+CollisionCheck_DisableSAC = 0x800527A8; // type:func
+CollisionCheck_SetAT = 0x800527C0; // type:func
+CollisionCheck_SetAT_SAC = 0x800528A0; // type:func
+CollisionCheck_SetAC = 0x800529B0; // type:func
+CollisionCheck_SetAC_SAC = 0x80052A90; // type:func
+CollisionCheck_SetOC = 0x80052BA0; // type:func
+CollisionCheck_SetOC_SAC = 0x80052C80; // type:func
+CollisionCheck_SetOCLine = 0x80052D90; // type:func
+CollisionCheck_IsElementNotAT = 0x80052E1C; // type:func
+CollisionCheck_IsElementNotAC = 0x80052E40; // type:func
+CollisionCheck_NoSharedFlags = 0x80052E64; // type:func
+CollisionCheck_NoBlood = 0x80052E8C; // type:func
+CollisionCheck_BlueBlood = 0x80052EA0; // type:func
+CollisionCheck_GreenBlood = 0x8005300C; // type:func
+CollisionCheck_WaterBurst = 0x80053178; // type:func
+CollisionCheck_RedBlood = 0x800531B4; // type:func
+CollisionCheck_RedBloodUnused = 0x800531D8; // type:func
+CollisionCheck_HitSolid = 0x800531FC; // type:func
+CollisionCheck_SwordHitAudio = 0x8005340C; // type:func
+CollisionCheck_HitEffects = 0x80053518; // type:func
+CollisionCheck_SetBounce = 0x80053718; // type:func
+CollisionCheck_SetATvsAC = 0x80053738; // type:func
+CollisionCheck_ATJntSphVsACJntSph = 0x800538E0; // type:func
+CollisionCheck_ATJntSphVsACCyl = 0x80053B8C; // type:func
+CollisionCheck_ATCylVsACJntSph = 0x80053E00; // type:func
+CollisionCheck_ATJntSphVsACTris = 0x800540A0; // type:func
+CollisionCheck_ATTrisVsACJntSph = 0x800542C0; // type:func
+CollisionCheck_ATJntSphVsACQuad = 0x800544D4; // type:func
+CollisionCheck_ATQuadVsACJntSph = 0x800546F4; // type:func
+CollisionCheck_ATCylVsACCyl = 0x80054958; // type:func
+CollisionCheck_ATCylVsACTris = 0x80054B2C; // type:func
+CollisionCheck_ATTrisVsACCyl = 0x80054CF0; // type:func
+CollisionCheck_ATCylVsACQuad = 0x80054EB0; // type:func
+CollisionCheck_ATQuadVsACCyl = 0x80055124; // type:func
+CollisionCheck_ATTrisVsACTris = 0x800553D0; // type:func
+CollisionCheck_ATTrisVsACQuad = 0x80055624; // type:func
+CollisionCheck_ATQuadVsACTris = 0x800558B4; // type:func
+CollisionCheck_ATQuadVsACQuad = 0x80055B4C; // type:func
+CollisionCheck_SetJntSphHitFX = 0x80055DDC; // type:func
+CollisionCheck_SetCylHitFX = 0x80055EBC; // type:func
+CollisionCheck_SetTrisHitFX = 0x80055F54; // type:func
+CollisionCheck_SetQuadHitFX = 0x8005603C; // type:func
+CollisionCheck_SetHitEffects = 0x800560D4; // type:func
+CollisionCheck_AC = 0x800561A8; // type:func
+CollisionCheck_AT = 0x800562D0; // type:func
+CollisionCheck_GetMassType = 0x800563A0; // type:func
+CollisionCheck_SetOCvsOC = 0x800563DC; // type:func
+CollisionCheck_OC_JntSphVsJntSph = 0x8005670C; // type:func
+CollisionCheck_OC_JntSphVsCyl = 0x800568DC; // type:func
+CollisionCheck_OC_CylVsJntSph = 0x80056A3C; // type:func
+CollisionCheck_OC_CylVsCyl = 0x80056A68; // type:func
+CollisionCheck_SkipOC = 0x80056B38; // type:func
+CollisionCheck_Incompatible = 0x80056B5C; // type:func
+CollisionCheck_OC = 0x80056BDC; // type:func
+CollisionCheck_InitInfo = 0x80056D6C; // type:func
+CollisionCheck_ResetDamage = 0x80056DB4; // type:func
+CollisionCheck_SetInfoNoDamageTable = 0x80056DE0; // type:func
+CollisionCheck_SetInfo = 0x80056E08; // type:func
+CollisionCheck_SetInfo2 = 0x80056E34; // type:func
+CollisionCheck_SetInfoGetDamageTable = 0x80056E68; // type:func
+CollisionCheck_ApplyDamage = 0x80056EA0; // type:func
+CollisionCheck_ApplyDamageJntSph = 0x80057060; // type:func
+CollisionCheck_ApplyDamageCyl = 0x80057108; // type:func
+CollisionCheck_ApplyDamageTris = 0x80057128; // type:func
+CollisionCheck_ApplyDamageQuad = 0x800571BC; // type:func
+CollisionCheck_Damage = 0x800571DC; // type:func
+CollisionCheck_LineOC_JntSph = 0x8005729C; // type:func
+CollisionCheck_LineOC_Cyl = 0x800573B4; // type:func
+CollisionCheck_LineOC = 0x8005742C; // type:func
+CollisionCheck_LineOCCheckAll = 0x80057574; // type:func
+CollisionCheck_LineOCCheck = 0x80057598; // type:func
+Collider_UpdateCylinder = 0x800575C4; // type:func
+Collider_SetCylinderPosition = 0x80057608; // type:func
+Collider_SetQuadVertices = 0x80057628; // type:func
+Collider_SetTrisVertices = 0x80057698; // type:func
+Collider_SetTrisDim = 0x80057758; // type:func
+Collider_UpdateSpheres = 0x800577A8; // type:func
+CollisionCheck_SpawnRedBlood = 0x8005792C; // type:func
+CollisionCheck_SpawnWaterDroplets = 0x80057A8C; // type:func
+CollisionCheck_SpawnShieldParticles = 0x80057BE8; // type:func
+CollisionCheck_SpawnShieldParticlesMetal = 0x80057C7C; // type:func
+CollisionCheck_SpawnShieldParticlesMetalSfx = 0x80057CC8; // type:func
+CollisionCheck_SpawnShieldParticlesMetal2 = 0x80057D14; // type:func
+CollisionCheck_SpawnShieldParticlesWood = 0x80057D34; // type:func
+CollisionCheck_CylSideVsLineSeg = 0x80057DF4; // type:func
+CollisionCheck_GetSwordDamage = 0x800584F8; // type:func
+SaveContext_Init = 0x80058560; // type:func
+Regs_Init = 0x80058610; // type:func
+DebugCamera_ScreenText = 0x800586A0; // type:func
+DebugCamera_ScreenTextColored = 0x800586B4; // type:func
+DebugCamera_DrawScreenText = 0x80058770; // type:func
+Debug_DrawText = 0x80058854; // type:func
+DebugDisplay_Init = 0x80058920; // type:func
+DebugDisplay_AddObject = 0x80058930; // type:func
+DebugDisplay_DrawObjects = 0x80058A0C; // type:func
+DebugDisplay_DrawSpriteI8 = 0x80058A9C; // type:func
+DebugDisplay_DrawPolygon = 0x80058C80; // type:func
+Cutscene_InitContext = 0x80058DE0; // type:func
+Cutscene_StartManual = 0x80058DF8; // type:func
+Cutscene_StopManual = 0x80058E10; // type:func
+Cutscene_UpdateManual = 0x80058E34; // type:func
+Cutscene_UpdateScripted = 0x80058E80; // type:func
+CutsceneHandler_DoNothing = 0x80058F34; // type:func
+Cutscene_StepTimer = 0x80058F44; // type:func
+CutsceneHandler_StartManual = 0x80058F7C; // type:func
+CutsceneHandler_StartScript = 0x80058FDC; // type:func
+CutsceneCmd_Misc = 0x80059048; // type:func
+CutsceneCmd_SetLightSetting = 0x800597E4; // type:func
+CutsceneCmd_StartSequence = 0x80059824; // type:func
+CutsceneCmd_StopSequence = 0x80059860; // type:func
+CutsceneCmd_FadeOutSequence = 0x8005989C; // type:func
+CutsceneCmd_RumbleController = 0x8005991C; // type:func
+CutsceneCmd_SetTime = 0x80059960; // type:func
+CutsceneCmd_Destination = 0x80059A04; // type:func
+CutsceneCmd_Transition = 0x8005B724; // type:func
+CutsceneCmd_UpdateCamEyeSpline = 0x8005C104; // type:func
+CutsceneCmd_UpdateCamAtSpline = 0x8005C258; // type:func
+CutsceneCmd_SetCamEye = 0x8005C3B4; // type:func
+CutsceneCmd_SetCamAt = 0x8005C590; // type:func
+CutsceneCmd_Text = 0x8005C738; // type:func
+Cutscene_ProcessScript = 0x8005CA0C; // type:func
+CutsceneHandler_RunScript = 0x8005D3DC; // type:func
+CutsceneHandler_StopManual = 0x8005D420; // type:func
+CutsceneHandler_StopScript = 0x8005D460; // type:func
+Cutscene_SetupScripted = 0x8005D568; // type:func
+func_80069048 = 0x8005D6E8; // type:func
+func_8006907C = 0x8005D720; // type:func
+Cutscene_HandleEntranceTriggers = 0x8005D744; // type:func
+Cutscene_HandleConditionalTriggers = 0x8005D864; // type:func
+Cutscene_SetScript = 0x8005DA6C; // type:func
+MemCpy = 0x8005DAC0; // type:func
+MemSet = 0x8005DAF0; // type:func
+GetItem_Draw = 0x8005DB50; // type:func
+GetItem_DrawMaskOrBombchu = 0x8005DB94; // type:func
+GetItem_DrawSoldOut = 0x8005DC30; // type:func
+GetItem_DrawBlueFire = 0x8005DCD8; // type:func
+GetItem_DrawPoes = 0x8005DE7C; // type:func
+GetItem_DrawFairy = 0x8005E078; // type:func
+GetItem_DrawMirrorShield = 0x8005E254; // type:func
+GetItem_DrawSkullToken = 0x8005E3CC; // type:func
+GetItem_DrawEggOrMedallion = 0x8005E534; // type:func
+GetItem_DrawCompass = 0x8005E5EC; // type:func
+GetItem_DrawPotion = 0x8005E6F4; // type:func
+GetItem_DrawGoronSword = 0x8005E8C8; // type:func
+GetItem_DrawDekuNuts = 0x8005E9D0; // type:func
+GetItem_DrawRecoveryHeart = 0x8005EAE4; // type:func
+GetItem_DrawFish = 0x8005EBFC; // type:func
+GetItem_DrawOpa0 = 0x8005ED04; // type:func
+GetItem_DrawOpa0Xlu1 = 0x8005EDA0; // type:func
+GetItem_DrawXlu01 = 0x8005EEA4; // type:func
+GetItem_DrawOpa10Xlu2 = 0x8005EF5C; // type:func
+GetItem_DrawMagicArrow = 0x8005F078; // type:func
+GetItem_DrawMagicSpell = 0x8005F194; // type:func
+GetItem_DrawOpa1023 = 0x8005F2E4; // type:func
+GetItem_DrawOpa10Xlu32 = 0x8005F3CC; // type:func
+GetItem_DrawSmallRupee = 0x8005F500; // type:func
+GetItem_DrawScale = 0x8005F650; // type:func
+GetItem_DrawBulletBag = 0x8005F7B0; // type:func
+GetItem_DrawWallet = 0x8005F8FC; // type:func
+SfxSource_InitAll = 0x8005FA50; // type:func
+SfxSource_UpdateAll = 0x8005FA80; // type:func
+SfxSource_PlaySfxAtFixedWorldPos = 0x8005FB28; // type:func
+QuestHint_CheckCondition = 0x8005FC10; // type:func
+QuestHint_CheckConditionChain = 0x8005FE8C; // type:func
+QuestHint_CheckRandomCondition = 0x8005FF20; // type:func
+QuestHint_GetTextIdFromScript = 0x80060100; // type:func
+QuestHint_GetSariaTextId = 0x80060244; // type:func
+QuestHint_GetNaviTextId = 0x800602AC; // type:func
+MaskReaction_GetTextId = 0x800602F0; // type:func
+CutsceneFlags_UnsetAll = 0x80060340; // type:func
+CutsceneFlags_Set = 0x80060370; // type:func
+CutsceneFlags_Unset = 0x800603DC; // type:func
+CutsceneFlags_Get = 0x8006044C; // type:func
+Curve_CubicHermiteSpline = 0x800604C0; // type:func
+Curve_Interpolate = 0x80060558; // type:func
+SkelCurve_Clear = 0x80060700; // type:func
+SkelCurve_Init = 0x80060730; // type:func
+SkelCurve_Destroy = 0x800607E0; // type:func
+SkelCurve_SetAnim = 0x80060810; // type:func
+SkelCurve_Update = 0x80060848; // type:func
+SkelCurve_DrawLimb = 0x80060B38; // type:func
+SkelCurve_Draw = 0x80060EC4; // type:func
+Horse_CanSpawn = 0x80060F10; // type:func
+Horse_ResetHorseData = 0x80060FC4; // type:func
+Horse_FixLakeHyliaPosition = 0x80061000; // type:func
+Horse_SetupInGameplay = 0x80061040; // type:func
+Horse_SetupInCutscene = 0x800614D8; // type:func
+Horse_InitPlayerHorse = 0x80061A4C; // type:func
+Horse_RotateToPoint = 0x80061B5C; // type:func
+Jpeg_ScheduleDecoderTask = 0x80061BF0; // type:func
+Jpeg_CopyToZbuffer = 0x80061D2C; // type:func
+Jpeg_GetUnalignedU16 = 0x80061E64; // type:func
+Jpeg_ParseMarkers = 0x80061EB0; // type:func
+Jpeg_Decode = 0x8006207C; // type:func
+KaleidoSetup_Update = 0x800623B0; // type:func
+KaleidoSetup_Init = 0x8006261C; // type:func
+KaleidoSetup_Destroy = 0x80062770; // type:func
+Font_LoadCharWide = 0x80062780; // type:func
+Font_LoadChar = 0x800627D0; // type:func
+Font_LoadMessageBoxIcon = 0x80062848; // type:func
+Font_LoadOrderedFont = 0x8006287C; // type:func
+Environment_ZBufValToFixedPoint = 0x80062980; // type:func
+Environment_GetPixelDepth = 0x800629B8; // type:func
+Environment_GraphCallback = 0x800629E4; // type:func
+Environment_Init = 0x80062A28; // type:func
+Environment_SmoothStepToU8 = 0x80062EF8; // type:func
+Environment_SmoothStepToS8 = 0x80063030; // type:func
+Environment_LerpWeight = 0x80063170; // type:func
+Environment_LerpWeightAccelDecel = 0x800631F4; // type:func
+Environment_UpdateStorm = 0x800633B4; // type:func
+Environment_UpdateSkybox = 0x800634A8; // type:func
+Environment_EnableUnderwaterLights = 0x80063D94; // type:func
+Environment_DisableUnderwaterLights = 0x80063E0C; // type:func
+Environment_Update = 0x80063E84; // type:func
+Environment_DrawSunAndMoon = 0x80065CE0; // type:func
+Environment_DrawSunLensFlare = 0x8006653C; // type:func
+Environment_DrawLensFlare = 0x80066610; // type:func
+Environment_RandCentered = 0x80067268; // type:func
+Environment_DrawRain = 0x80067290; // type:func
+Environment_ChangeLightSetting = 0x80067838; // type:func
+Environment_DrawSkyboxFilters = 0x800678BC; // type:func
+Environment_DrawLightningFlash = 0x80067ADC; // type:func
+Environment_UpdateLightningStrike = 0x80067B74; // type:func
+Environment_AddLightningBolts = 0x80067E7C; // type:func
+Environment_DrawLightning = 0x80067EE4; // type:func
+Environment_PlaySceneSequence = 0x80068328; // type:func
+Environment_PlayTimeBasedSequence = 0x80068518; // type:func
+Environment_DrawCustomLensFlare = 0x80068830; // type:func
+Environment_InitGameOverLights = 0x800688DC; // type:func
+Environment_FadeInGameOverLights = 0x80068AC4; // type:func
+Environment_FadeOutGameOverLights = 0x80068D78; // type:func
+Environment_UpdateRain = 0x80069094; // type:func
+Environment_FillScreen = 0x800690FC; // type:func
+Environment_DrawSandstorm = 0x800692F4; // type:func
+Environment_AdjustLights = 0x80069D40; // type:func
+Environment_GetBgsDayCount = 0x80069F6C; // type:func
+Environment_ClearBgsDayCount = 0x80069F7C; // type:func
+Environment_GetTotalDays = 0x80069F8C; // type:func
+Environment_ForcePlaySequence = 0x80069F9C; // type:func
+Environment_IsForcedSequenceDisabled = 0x80069FB4; // type:func
+Environment_PlayStormNatureAmbience = 0x80069FDC; // type:func
+Environment_StopStormNatureAmbience = 0x8006A03C; // type:func
+Environment_WarpSongLeave = 0x8006A09C; // type:func
+Lib_MemSet = 0x8006A190; // type:func
+Math_CosS = 0x8006A1E4; // type:func
+Math_SinS = 0x8006A224; // type:func
+Math_ScaledStepToS = 0x8006A264; // type:func
+Math_StepToS = 0x8006A334; // type:func
+Math_StepToF = 0x8006A3BC; // type:func
+Math_StepUntilAngleS = 0x8006A450; // type:func
+Math_StepUntilS = 0x8006A4B8; // type:func
+Math_StepToAngleS = 0x8006A518; // type:func
+Math_StepUntilF = 0x8006A5DC; // type:func
+Math_AsymStepToF = 0x8006A62C; // type:func
+Lib_GetControlStickData = 0x8006A6D4; // type:func
+Rand_S16Offset = 0x8006A750; // type:func
+Rand_S16OffsetStride = 0x8006A7A4; // type:func
+Math_Vec3f_Copy = 0x8006A80C; // type:func
+Math_Vec3s_ToVec3f = 0x8006A82C; // type:func
+Math_Vec3f_Sum = 0x8006A870; // type:func
+Math_Vec3f_Diff = 0x8006A8A8; // type:func
+Math_Vec3s_DiffToVec3f = 0x8006A8E0; // type:func
+Math_Vec3f_Scale = 0x8006A93C; // type:func
+Math_Vec3f_DistXYZ = 0x8006A978; // type:func
+Math_Vec3f_DistXYZAndStoreDiff = 0x8006A9BC; // type:func
+Math_Vec3f_DistXZ = 0x8006AA18; // type:func
+Math_Vec3f_DiffY = 0x8006AA4C; // type:func
+Math_Vec3f_Yaw = 0x8006AA60; // type:func
+Math_Vec3f_Pitch = 0x8006AA94; // type:func
+Actor_ProcessInitChain = 0x8006AADC; // type:func
+IChain_Apply_u8 = 0x8006AB54; // type:func
+IChain_Apply_s8 = 0x8006AB70; // type:func
+IChain_Apply_u16 = 0x8006AB8C; // type:func
+IChain_Apply_s16 = 0x8006ABA8; // type:func
+IChain_Apply_u32 = 0x8006ABC4; // type:func
+IChain_Apply_s32 = 0x8006ABE0; // type:func
+IChain_Apply_f32 = 0x8006ABFC; // type:func
+IChain_Apply_f32div1000 = 0x8006AC20; // type:func
+IChain_Apply_Vec3f = 0x8006AC50; // type:func
+IChain_Apply_Vec3fdiv1000 = 0x8006AC7C; // type:func
+IChain_Apply_Vec3s = 0x8006ACB4; // type:func
+Math_SmoothStepToF = 0x8006ACD8; // type:func
+Math_ApproachF = 0x8006ADE0; // type:func
+Math_ApproachZeroF = 0x8006AE50; // type:func
+Math_SmoothStepToDegF = 0x8006AEA4; // type:func
+Math_SmoothStepToS = 0x8006B068; // type:func
+Math_ApproachS = 0x8006B184; // type:func
+Color_RGBA8_Copy = 0x8006B228; // type:func
+Sfx_PlaySfxCentered = 0x8006B250; // type:func
+Sfx_PlaySfxCentered2 = 0x8006B298; // type:func
+Sfx_PlaySfxAtPos = 0x8006B2E0; // type:func
+Health_InitMeter = 0x8006B330; // type:func
+Health_UpdateMeter = 0x8006B40C; // type:func
+func_80078E18 = 0x8006B7F0; // type:func
+func_80078E34 = 0x8006B810; // type:func
+func_80078E84 = 0x8006B860; // type:func
+Health_DrawMeter = 0x8006B8F8; // type:func
+Health_UpdateBeatingHeart = 0x8006C570; // type:func
+Health_IsCritical = 0x8006C65C; // type:func
+Lights_PointSetInfo = 0x8006C6D0; // type:func
+Lights_PointNoGlowSetInfo = 0x8006C72C; // type:func
+Lights_PointGlowSetInfo = 0x8006C790; // type:func
+Lights_PointSetColorAndRadius = 0x8006C7F8; // type:func
+Lights_DirectionalSetInfo = 0x8006C82C; // type:func
+Lights_Reset = 0x8006C884; // type:func
+Lights_Draw = 0x8006C8C0; // type:func
+Lights_FindSlot = 0x8006CA04; // type:func
+Lights_BindPoint = 0x8006CA34; // type:func
+Lights_BindDirectional = 0x8006CD90; // type:func
+Lights_BindAll = 0x8006CDF8; // type:func
+Lights_FindBufSlot = 0x8006CE94; // type:func
+Lights_FreeNode = 0x8006CF20; // type:func
+LightContext_Init = 0x8006CF98; // type:func
+LightContext_SetAmbientColor = 0x8006D004; // type:func
+LightContext_SetFog = 0x8006D030; // type:func
+LightContext_NewLights = 0x8006D06C; // type:func
+LightContext_InitList = 0x8006D0A4; // type:func
+LightContext_DestroyList = 0x8006D0B4; // type:func
+LightContext_InsertLight = 0x8006D110; // type:func
+LightContext_RemoveLight = 0x8006D170; // type:func
+Lights_NewAndDraw = 0x8006D1D4; // type:func
+Lights_New = 0x8006D31C; // type:func
+Lights_GlowCheck = 0x8006D364; // type:func
+Lights_DrawGlow = 0x8006D568; // type:func
+ZeldaArena_Malloc = 0x8006D770; // type:func
+ZeldaArena_MallocR = 0x8006D798; // type:func
+ZeldaArena_Realloc = 0x8006D7C0; // type:func
+ZeldaArena_Free = 0x8006D7F0; // type:func
+ZeldaArena_Calloc = 0x8006D818; // type:func
+ZeldaArena_GetSizes = 0x8006D870; // type:func
+ZeldaArena_Check = 0x8006D8A8; // type:func
+ZeldaArena_Init = 0x8006D8CC; // type:func
+ZeldaArena_Cleanup = 0x8006D8FC; // type:func
+ZeldaArena_IsInitialized = 0x8006D920; // type:func
+MapMark_Init = 0x8006D950; // type:func
+MapMark_ClearPointers = 0x8006D9FC; // type:func
+MapMark_DrawForDungeon = 0x8006DA18; // type:func
+MapMark_Draw = 0x8006DF08; // type:func
+PreNmiBuff_Init = 0x8006DF50; // type:func
+PreNmiBuff_SetReset = 0x8006DFC8; // type:func
+PreNmiBuff_IsResetting = 0x8006DFFC; // type:func
+Sched_FlushTaskQueue = 0x8006E010; // type:func
+OLib_Vec3fDist = 0x8006E090; // type:func
+OLib_Vec3fDistOutDiff = 0x8006E0D4; // type:func
+OLib_Vec3fDistXZ = 0x8006E130; // type:func
+OLib_ClampMinDist = 0x8006E164; // type:func
+OLib_ClampMaxDist = 0x8006E1B4; // type:func
+OLib_Vec3fDistNormalize = 0x8006E204; // type:func
+OLib_VecSphToVec3f = 0x8006E2B4; // type:func
+OLib_VecGeoToVec3f = 0x8006E360; // type:func
+OLib_Vec3fToVecSph = 0x8006E3A4; // type:func
+OLib_Vec3fToVecGeo = 0x8006E4F8; // type:func
+OLib_Vec3fDiffToVecSph = 0x8006E540; // type:func
+OLib_Vec3fDiffToVecGeo = 0x8006E594; // type:func
+OLib_Vec3fDiffRad = 0x8006E5E8; // type:func
+OLib_Vec3fDiffDegF = 0x8006E678; // type:func
+OLib_Vec3fDiffBinAng = 0x8006E6E0; // type:func
+OnePointCutscene_AddVecGeoToVec3f = 0x8006E780; // type:func
+OnePointCutscene_Vec3fYaw = 0x8006E800; // type:func
+OnePointCutscene_Vec3sToVec3f = 0x8006E868; // type:func
+OnePointCutscene_BgCheckLineTest = 0x8006E8AC; // type:func
+OnePointCutscene_RaycastDown = 0x8006E8FC; // type:func
+OnePointCutscene_SetCsCamPoints = 0x8006E924; // type:func
+OnePointCutscene_SetInfo = 0x8006E958; // type:func
+OnePointCutscene_SetAsChild = 0x80072094; // type:func
+OnePointCutscene_RemoveCamera = 0x800720DC; // type:func
+OnePointCutscene_Init = 0x800721B0; // type:func
+OnePointCutscene_EndCutscene = 0x80072468; // type:func
+OnePointCutscene_Attention = 0x800724C4; // type:func
+OnePointCutscene_AttentionSetSfx = 0x80072630; // type:func
+OnePointCutscene_EnableAttention = 0x80072684; // type:func
+OnePointCutscene_DisableAttention = 0x80072694; // type:func
+OnePointCutscene_CheckForCategory = 0x800726A8; // type:func
+OnePointCutscene_Noop = 0x80072708; // type:func
+Map_SavePlayerInitialInfo = 0x80072720; // type:func
+Map_SetPaletteData = 0x80072780; // type:func
+Map_SetFloorPalettesData = 0x800727FC; // type:func
+Map_InitData = 0x800729B4; // type:func
+Map_InitRoomData = 0x80072C70; // type:func
+Map_Destroy = 0x80072D4C; // type:func
+Map_Init = 0x80072D74; // type:func
+Minimap_DrawCompassIcons = 0x80072FFC; // type:func
+Minimap_Draw = 0x80073450; // type:func
+Map_GetFloorTextIndexOffset = 0x80073F6C; // type:func
+Map_Update = 0x80073F94; // type:func
+Interface_ChangeHudVisibilityMode = 0x800742C0; // type:func
+Interface_RaiseButtonAlphas = 0x800742F0; // type:func
+Interface_DimButtonAlphas = 0x80074434; // type:func
+Interface_UpdateHudAlphas = 0x800744F8; // type:func
+func_80083108 = 0x80074BF4; // type:func
+Interface_SetSceneRestrictions = 0x800759A0; // type:func
+Gfx_TextureIA8 = 0x80075AF0; // type:func
+Gfx_TextureI8 = 0x80075D08; // type:func
+Inventory_SwapAgeEquipment = 0x80075F20; // type:func
+Interface_InitHorsebackArchery = 0x8007620C; // type:func
+func_800849EC = 0x8007624C; // type:func
+Interface_LoadItemIcon1 = 0x800762C8; // type:func
+Interface_LoadItemIcon2 = 0x80076368; // type:func
+func_80084BF4 = 0x80076408; // type:func
+Item_Give = 0x800764FC; // type:func
+Item_CheckObtainability = 0x80077A34; // type:func
+Inventory_DeleteItem = 0x80077E30; // type:func
+Inventory_ReplaceItem = 0x80077EC0; // type:func
+Inventory_HasEmptyBottle = 0x80077F68; // type:func
+Inventory_HasSpecificBottle = 0x80077FA4; // type:func
+Inventory_UpdateBottleItem = 0x80077FE0; // type:func
+Inventory_ConsumeFairy = 0x80078094; // type:func
+func_80086D5C = 0x8007817C; // type:func
+Interface_LoadActionLabel = 0x800781B0; // type:func
+Interface_SetDoAction = 0x80078304; // type:func
+Interface_SetNaviCall = 0x8007837C; // type:func
+Interface_LoadActionLabelB = 0x8007846C; // type:func
+Health_ChangeBy = 0x80078534; // type:func
+Health_GiveHearts = 0x80078620; // type:func
+Rupees_ChangeBy = 0x80078640; // type:func
+Inventory_ChangeAmmo = 0x80078660; // type:func
+Magic_Fill = 0x8007891C; // type:func
+Magic_Reset = 0x8007895C; // type:func
+Magic_RequestChange = 0x80078998; // type:func
+Magic_Update = 0x80078BB0; // type:func
+Magic_DrawMeter = 0x80079470; // type:func
+Interface_SetSubTimer = 0x80079C6C; // type:func
+Interface_SetSubTimerToFinalSecond = 0x80079CB4; // type:func
+Interface_SetTimer = 0x80079CF0; // type:func
+Interface_DrawActionLabel = 0x80079D38; // type:func
+Interface_DrawItemButtons = 0x80079E3C; // type:func
+Interface_DrawItemIconTexture = 0x8007ACD4; // type:func
+Interface_DrawAmmoCount = 0x8007AED0; // type:func
+Interface_DrawActionButton = 0x8007B374; // type:func
+Interface_InitVertices = 0x8007B578; // type:func
+func_8008A8B8 = 0x8007B870; // type:func
+func_8008A994 = 0x8007B954; // type:func
+Interface_Draw = 0x8007B99C; // type:func
+Interface_Update = 0x8007E538; // type:func
+Path_GetByIndex = 0x8007F020; // type:func
+Path_OrientAndGetDistSq = 0x8007F064; // type:func
+Path_CopyLastPoint = 0x8007F150; // type:func
+FrameAdvance_Init = 0x8007F1F0; // type:func
+FrameAdvance_Update = 0x8007F200; // type:func
+Player_SetBootData = 0x8007F2A0; // type:func
+Player_InBlockingCsMode = 0x8007F42C; // type:func
+Player_InCsMode = 0x8007F4DC; // type:func
+Player_CheckHostileLockOn = 0x8007F518; // type:func
+Player_IsChildWithHylianShield = 0x8007F528; // type:func
+Player_ActionToModelGroup = 0x8007F550; // type:func
+Player_SetModelsForHoldingShield = 0x8007F59C; // type:func
+Player_SetModels = 0x8007F688; // type:func
+Player_SetModelGroup = 0x8007F760; // type:func
+func_8008EC70 = 0x8007F7CC; // type:func
+Player_SetEquipmentData = 0x8007F804; // type:func
+Player_UpdateBottleHeld = 0x8007F8F4; // type:func
+Player_ReleaseLockOn = 0x8007F948; // type:func
+Player_ClearZTargeting = 0x8007F964; // type:func
+Player_SetAutoLockOnActor = 0x8007FA08; // type:func
+func_8008EF30 = 0x8007FA8C; // type:func
+func_8008EF44 = 0x8007FAA4; // type:func
+Player_IsBurningStickInRange = 0x8007FAC0; // type:func
+Player_GetStrength = 0x8007FB98; // type:func
+Player_GetMask = 0x8007FBE4; // type:func
+Player_UnsetMask = 0x8007FBF4; // type:func
+Player_HasMirrorShieldEquipped = 0x8007FC04; // type:func
+Player_HasMirrorShieldSetToDraw = 0x8007FC1C; // type:func
+Player_ActionToMagicSpell = 0x8007FC48; // type:func
+Player_HoldsHookshot = 0x8007FC74; // type:func
+func_8008F128 = 0x8007FC98; // type:func
+Player_ActionToMeleeWeapon = 0x8007FCCC; // type:func
+Player_GetMeleeWeaponHeld = 0x8007FCF4; // type:func
+Player_HoldsTwoHandedWeapon = 0x8007FD18; // type:func
+Player_HoldsBrokenKnife = 0x8007FD44; // type:func
+Player_ActionToBottle = 0x8007FD9C; // type:func
+Player_GetBottleHeld = 0x8007FDC8; // type:func
+Player_ActionToExplosive = 0x8007FDE8; // type:func
+Player_GetExplosiveHeld = 0x8007FE14; // type:func
+func_8008F2BC = 0x8007FE34; // type:func
+Player_GetEnvironmentalHazard = 0x8007FE70; // type:func
+Player_DrawImpl = 0x8007FFE8; // type:func
+func_8008F87C = 0x800803AC; // type:func
+Player_OverrideLimbDrawGameplayCommon = 0x800807F8; // type:func
+Player_OverrideLimbDrawGameplayDefault = 0x80080B4C; // type:func
+Player_OverrideLimbDrawGameplayFirstPerson = 0x80080E38; // type:func
+Player_OverrideLimbDrawGameplayCrawling = 0x80080F88; // type:func
+func_80090480 = 0x80080FCC; // type:func
+Player_UpdateShieldCollider = 0x80081154; // type:func
+func_800906D4 = 0x80081228; // type:func
+Player_DrawGetItemImpl = 0x80081338; // type:func
+Player_DrawGetItem = 0x800814CC; // type:func
+func_80090A28 = 0x80081544; // type:func
+Player_DrawHookshotReticle = 0x80081618; // type:func
+Player_PostLimbDrawGameplay = 0x800817FC; // type:func
+Player_InitPauseDrawData = 0x80082164; // type:func
+Player_OverrideLimbDrawPause = 0x80082290; // type:func
+Player_DrawPauseImpl = 0x80082434; // type:func
+Player_DrawPause = 0x80082B38; // type:func
+func_80092320 = 0x80082D10; // type:func
+PreNMI_Update = 0x80082D24; // type:func
+PreNMI_Draw = 0x80082D6C; // type:func
+PreNMI_Main = 0x80082E28; // type:func
+PreNMI_Destroy = 0x80082E5C; // type:func
+PreNMI_Init = 0x80082E68; // type:func
+Quake_AddVecGeoToVec3f = 0x80082EB0; // type:func
+Quake_UpdateShakeInfo = 0x80082F30; // type:func
+Quake_CallbackType1 = 0x80083158; // type:func
+Quake_CallbackType5 = 0x800831E0; // type:func
+Quake_CallbackType6 = 0x80083254; // type:func
+Quake_CallbackType3 = 0x800832D8; // type:func
+Quake_CallbackType2 = 0x80083370; // type:func
+Quake_CallbackType4 = 0x800833E0; // type:func
+Quake_GetFreeIndex = 0x80083478; // type:func
+Quake_RequestImpl = 0x800834DC; // type:func
+Quake_Remove = 0x80083594; // type:func
+Quake_GetRequest = 0x800835BC; // type:func
+Quake_SetValue = 0x80083618; // type:func
+Quake_SetSpeed = 0x80083748; // type:func
+Quake_SetDuration = 0x80083790; // type:func
+Quake_GetTimeLeft = 0x800837E0; // type:func
+Quake_SetPerturbations = 0x80083818; // type:func
+Quake_SetOrientation = 0x80083880; // type:func
+Quake_Init = 0x800838E8; // type:func
+Quake_Request = 0x8008393C; // type:func
+Quake_RemoveRequest = 0x80083960; // type:func
+Quake_Update = 0x800839A8; // type:func
+Gfx_SetFog = 0x80083D20; // type:func
+Gfx_SetFogWithSync = 0x80083E9C; // type:func
+Gfx_SetFog2 = 0x8008402C; // type:func
+Gfx_SetupDLImpl = 0x80084060; // type:func
+Gfx_SetupDL = 0x8008409C; // type:func
+Gfx_SetupDLAtPtr = 0x800840BC; // type:func
+Gfx_SetupDL_57 = 0x800840E8; // type:func
+Gfx_SetupDL_57b = 0x80084110; // type:func
+Gfx_SetupDL_52NoCD = 0x80084138; // type:func
+Gfx_SetupDL_58Opa = 0x8008417C; // type:func
+Gfx_SetupDL_57Opa = 0x800841A4; // type:func
+Gfx_SetupDL_50Opa = 0x800841CC; // type:func
+Gfx_SetupDL_51Opa = 0x800841F4; // type:func
+Gfx_SetupDL_52Xlu = 0x8008421C; // type:func
+Gfx_SetupDL_53Opa = 0x80084244; // type:func
+Gfx_SetupDL_54Opa = 0x8008426C; // type:func
+Gfx_SetupDL_55Xlu = 0x80084294; // type:func
+Gfx_SetupDL_26Opa = 0x800842BC; // type:func
+Gfx_SetupDL_25Xlu2 = 0x800842E4; // type:func
+func_80093C80 = 0x8008430C; // type:func
+Gfx_SetupDL_25Opa = 0x80084378; // type:func
+Gfx_SetupDL_25Xlu = 0x800843A0; // type:func
+Gfx_SetupDL_31Opa = 0x800843C8; // type:func
+Gfx_SetupDL_32Opa = 0x800843F0; // type:func
+Gfx_SetupDL_33Opa = 0x80084418; // type:func
+Gfx_SetupDL_64 = 0x80084440; // type:func
+Gfx_SetupDL_34 = 0x80084468; // type:func
+Gfx_SetupDL_34Opa = 0x80084490; // type:func
+Gfx_SetupDL_35Opa = 0x800844BC; // type:func
+Gfx_SetupDL_44Xlu = 0x800844E4; // type:func
+Gfx_SetupDL_36Opa = 0x8008450C; // type:func
+Gfx_SetupDL_28 = 0x80084534; // type:func
+Gfx_SetupDL_28Opa = 0x8008455C; // type:func
+Gfx_SetupDL_43Opa = 0x80084584; // type:func
+Gfx_SetupDL_45Opa = 0x800845AC; // type:func
+Gfx_SetupDL_46Overlay = 0x800845D4; // type:func
+Gfx_SetupDL_38Xlu = 0x800845FC; // type:func
+Gfx_SetupDL_4Xlu = 0x80084624; // type:func
+Gfx_SetupDL_37Opa = 0x8008464C; // type:func
+Gfx_SetupDL_2Opa = 0x80084674; // type:func
+Gfx_SetupDL_39 = 0x8008469C; // type:func
+Gfx_SetupDL_39Opa = 0x800846C4; // type:func
+Gfx_SetupDL_39Overlay = 0x800846F0; // type:func
+Gfx_SetupDL_39Ptr = 0x8008471C; // type:func
+Gfx_SetupDL_40Opa = 0x80084748; // type:func
+Gfx_SetupDL_41Opa = 0x80084770; // type:func
+Gfx_SetupDL_47Xlu = 0x80084798; // type:func
+Gfx_SetupDL_66 = 0x800847C0; // type:func
+Gfx_SetupDL_67 = 0x800847E8; // type:func
+Gfx_SetupDL_68NoCD = 0x80084810; // type:func
+Gfx_SetupDL_69NoCD = 0x80084854; // type:func
+func_800947AC = 0x80084898; // type:func
+Gfx_SetupDL_70 = 0x800848DC; // type:func
+Gfx_SetupDL_20NoCD = 0x80084904; // type:func
+Gfx_SetupDL_42Opa = 0x80084948; // type:func
+Gfx_SetupDL_42Overlay = 0x80084970; // type:func
+Gfx_SetupDL_48Opa = 0x80084998; // type:func
+Gfx_SetupDL_49Xlu = 0x800849C0; // type:func
+Gfx_SetupDL_27Xlu = 0x800849E8; // type:func
+Gfx_SetupDL_60NoCDXlu = 0x80084A10; // type:func
+Gfx_SetupDL_61Xlu = 0x80084A58; // type:func
+Gfx_SetupDL_56Opa = 0x80084A80; // type:func
+Gfx_SetupDL_56Ptr = 0x80084AA8; // type:func
+Gfx_SetupDL_59Opa = 0x80084AD4; // type:func
+Gfx_BranchTexScroll = 0x80084AFC; // type:func
+func_80094E54 = 0x80084BA0; // type:func
+func_80094E78 = 0x80084BC4; // type:func
+Gfx_TexScroll = 0x80084BE8; // type:func
+Gfx_TwoTexScroll = 0x80084C6C; // type:func
+Gfx_TwoTexScrollEnvColor = 0x80084D8C; // type:func
+Gfx_EnvColor = 0x80084EEC; // type:func
+Gfx_SetupFrame = 0x80084F44; // type:func
+func_80095974 = 0x800854FC; // type:func
+func_80095AA0 = 0x800855E0; // type:func
+Room_DrawNormal = 0x800855F8; // type:func
+Room_DrawCullable = 0x80085814; // type:func
+Room_DecodeJpeg = 0x80085CDC; // type:func
+Room_DrawBackground2D = 0x80085D64; // type:func
+Room_DrawImageSingle = 0x80086060; // type:func
+Room_GetImageMultiBgEntry = 0x80086430; // type:func
+Room_DrawImageMulti = 0x8008651C; // type:func
+Room_DrawImage = 0x800868EC; // type:func
+Room_Init = 0x80086954; // type:func
+Room_SetupFirstRoom = 0x8008696C; // type:func
+Room_RequestNewRoom = 0x80086B08; // type:func
+Room_ProcessRoomRequest = 0x80086C40; // type:func
+Room_Draw = 0x80086CE4; // type:func
+Room_FinishRoomChange = 0x80086D34; // type:func
+Sample_HandleStateChange = 0x80086DD0; // type:func
+Sample_Draw = 0x80086E04; // type:func
+Sample_Main = 0x80086FF0; // type:func
+Sample_Destroy = 0x8008701C; // type:func
+Sample_SetupView = 0x80087028; // type:func
+Sample_LoadTitleStatic = 0x800870E0; // type:func
+Sample_Init = 0x80087140; // type:func
+Inventory_ChangeEquipment = 0x800871D0; // type:func
+Inventory_DeleteEquipment = 0x80087228; // type:func
+Inventory_ChangeUpgrade = 0x80087334; // type:func
+Object_SpawnPersistent = 0x80087390; // type:func
+Object_InitContext = 0x80087474; // type:func
+Object_UpdateEntries = 0x800875D0; // type:func
+Object_GetSlot = 0x800876C8; // type:func
+Object_IsLoaded = 0x80087728; // type:func
+func_800981B8 = 0x80087758; // type:func
+func_800982FC = 0x800877E0; // type:func
+Scene_ExecuteCommands = 0x80087840; // type:func
+Scene_CommandPlayerEntryList = 0x800878C4; // type:func
+Scene_CommandActorEntryList = 0x800879A0; // type:func
+Scene_CommandUnused2 = 0x800879F8; // type:func
+Scene_CommandCollisionHeader = 0x80087A40; // type:func
+Scene_CommandRoomList = 0x80087B70; // type:func
+Scene_CommandSpawnList = 0x80087BC8; // type:func
+Scene_CommandSpecialFiles = 0x80087C10; // type:func
+Scene_CommandRoomBehavior = 0x80087CD8; // type:func
+Scene_CommandRoomShape = 0x80087D30; // type:func
+Scene_CommandObjectList = 0x80087D78; // type:func
+Scene_CommandLightList = 0x80087F2C; // type:func
+Scene_CommandPathList = 0x80087FDC; // type:func
+Scene_CommandTransitionActorEntryList = 0x80088024; // type:func
+Scene_ResetTransitionActorList = 0x8008807C; // type:func
+Scene_CommandLightSettingsList = 0x8008808C; // type:func
+Scene_CommandSkyboxSettings = 0x800880E4; // type:func
+Scene_CommandSkyboxDisables = 0x80088128; // type:func
+Scene_CommandTimeSettings = 0x80088150; // type:func
+Scene_CommandWindSettings = 0x80088464; // type:func
+Scene_CommandExitList = 0x800884C8; // type:func
+Scene_CommandUndefined9 = 0x80088510; // type:func
+Scene_CommandSoundSettings = 0x80088520; // type:func
+Scene_CommandEchoSettings = 0x8008856C; // type:func
+Scene_CommandAlternateHeaderList = 0x80088584; // type:func
+Scene_CommandCutsceneData = 0x80088680; // type:func
+Scene_CommandMiscSettings = 0x800886C0; // type:func
+Scene_SetTransitionForNextEntrance = 0x80088784; // type:func
+Scene_DrawConfigDefault = 0x80088840; // type:func
+Scene_DrawConfigDekuTree = 0x80088880; // type:func
+Scene_DrawConfigDekuTreeBoss = 0x800889C8; // type:func
+Scene_DrawConfigDodongosCavern = 0x80088AAC; // type:func
+Scene_DrawConfigTempleOfTime = 0x80088DD4; // type:func
+Scene_DrawConfigGrottos = 0x800895EC; // type:func
+Scene_DrawConfigChamberOfTheSages = 0x800898FC; // type:func
+Scene_DrawConfigGreatFairyFountain = 0x80089B20; // type:func
+Scene_DrawConfigGraveExitLightShining = 0x80089CB8; // type:func
+Scene_DrawConfigFairysFountain = 0x80089D90; // type:func
+Scene_DrawConfigShadowTempleAndWell = 0x80089EF4; // type:func
+Scene_DrawConfigThievesHideout = 0x8008A080; // type:func
+Scene_DrawConfigWaterTemple = 0x8008A168; // type:func
+Scene_DrawConfigWaterTempleBoss = 0x8008A8D8; // type:func
+Scene_DrawConfigShootingGallery = 0x8008A9F8; // type:func
+Scene_DrawConfigCastleCourtyardGuards = 0x8008AAAC; // type:func
+Scene_DrawConfigOutsideGanonsCastle = 0x8008AC24; // type:func
+func_8009BEEC = 0x8008AEC0; // type:func
+Scene_DrawConfigGanonsTowerCollapseExterior = 0x8008B080; // type:func
+Scene_DrawConfigIceCavern = 0x8008B38C; // type:func
+Scene_DrawConfigRoyalFamilysTomb = 0x8008B57C; // type:func
+Scene_DrawConfigLakesideLaboratory = 0x8008B800; // type:func
+Scene_DrawConfigCalmWater = 0x8008B9E0; // type:func
+Scene_DrawConfigGerudoTrainingGround = 0x8008BAE8; // type:func
+Gfx_TwoTexScrollPrimColor = 0x8008BCD8; // type:func
+Scene_DrawConfigFishingPond = 0x8008BE38; // type:func
+Scene_DrawConfigBombchuBowlingAlley = 0x8008BF64; // type:func
+Scene_DrawConfigLonLonBuildings = 0x8008C168; // type:func
+Scene_DrawConfigMarketGuardHouse = 0x8008C238; // type:func
+Scene_DrawConfigPotionShopGranny = 0x8008C368; // type:func
+Scene_DrawConfigForestTemple = 0x8008C4E0; // type:func
+Scene_DrawConfigSpiritTemple = 0x8008C6D0; // type:func
+Scene_DrawConfigHyruleField = 0x8008C740; // type:func
+Scene_DrawConfigKakarikoVillage = 0x8008CA3C; // type:func
+Scene_DrawConfigZorasRiver = 0x8008CB0C; // type:func
+Scene_DrawConfigKokiriForest = 0x8008CD24; // type:func
+Scene_DrawConfigLakeHylia = 0x8008D188; // type:func
+Scene_DrawConfigZorasDomain = 0x8008D348; // type:func
+Scene_DrawConfigZorasFountain = 0x8008D4A4; // type:func
+Scene_DrawConfigGerudoValley = 0x8008D694; // type:func
+Scene_DrawConfigLostWoods = 0x8008D9D0; // type:func
+Scene_DrawConfigDesertColossus = 0x8008DBCC; // type:func
+Scene_DrawConfigGerudosFortress = 0x8008DCD8; // type:func
+Scene_DrawConfigHauntedWasteland = 0x8008DD48; // type:func
+Scene_DrawConfigHyruleCastle = 0x8008DEC0; // type:func
+Scene_DrawConfigDeathMountainTrail = 0x8008E064; // type:func
+Scene_DrawConfigDeathMountainCrater = 0x8008E228; // type:func
+Scene_DrawConfigGoronCity = 0x8008E3F4; // type:func
+Scene_DrawConfigLonLonRanch = 0x8008E564; // type:func
+Scene_DrawConfigFireTemple = 0x8008E634; // type:func
+Scene_DrawConfigJabuJabu = 0x8008E7D8; // type:func
+Scene_DrawConfigInsideGanonsCastle = 0x8008EC84; // type:func
+Scene_DrawConfigInsideGanonsCastleCollapse = 0x8008EE88; // type:func
+Scene_DrawConfigGanonsTowerCollapseInterior = 0x8008EEA8; // type:func
+Scene_DrawConfigBesitu = 0x8008EEC8; // type:func
+Scene_Draw = 0x8008F000; // type:func
+SkelAnime_DrawLimbLod = 0x8008F040; // type:func
+SkelAnime_DrawLod = 0x8008F2A8; // type:func
+SkelAnime_DrawFlexLimbLod = 0x8008F498; // type:func
+SkelAnime_DrawFlexLod = 0x8008F728; // type:func
+SkelAnime_DrawLimbOpa = 0x8008F9A0; // type:func
+SkelAnime_DrawOpa = 0x8008FBEC; // type:func
+SkelAnime_DrawFlexLimbOpa = 0x8008FDCC; // type:func
+SkelAnime_DrawFlexOpa = 0x80090044; // type:func
+SkelAnime_GetFrameData = 0x800902A8; // type:func
+Animation_GetLength = 0x80090410; // type:func
+Animation_GetLastFrame = 0x8009044C; // type:func
+SkelAnime_DrawLimb = 0x80090494; // type:func
+SkelAnime_Draw = 0x800906D4; // type:func
+SkelAnime_DrawFlexLimb = 0x800908C4; // type:func
+SkelAnime_DrawFlex = 0x80090B54; // type:func
+SkelAnime_GetFrameDataLegacy = 0x80090DBC; // type:func
+Animation_GetLimbCountLegacy = 0x800911C0; // type:func
+Animation_GetLengthLegacy = 0x800911FC; // type:func
+Animation_GetLastFrameLegacy = 0x80091238; // type:func
+SkelAnime_InterpFrameTable = 0x80091280; // type:func
+AnimTaskQueue_Reset = 0x80091700; // type:func
+AnimTaskQueue_SetNextGroup = 0x8009170C; // type:func
+AnimTaskQueue_DisableTransformTasksForGroup = 0x8009172C; // type:func
+AnimTaskQueue_NewTask = 0x80091754; // type:func
+AnimTaskQueue_AddLoadPlayerFrame = 0x8009178C; // type:func
+AnimTaskQueue_AddCopy = 0x80091888; // type:func
+AnimTaskQueue_AddInterp = 0x800918F0; // type:func
+AnimTaskQueue_AddCopyUsingMap = 0x80091960; // type:func
+AnimTaskQueue_AddCopyUsingMapInverted = 0x800919D0; // type:func
+AnimTaskQueue_AddActorMovement = 0x80091A40; // type:func
+AnimTask_LoadPlayerFrame = 0x80091A9C; // type:func
+AnimTask_Copy = 0x80091ACC; // type:func
+AnimTask_Interp = 0x80091B3C; // type:func
+AnimTask_CopyUsingMap = 0x80091B98; // type:func
+AnimTask_CopyUsingMapInverted = 0x80091C18; // type:func
+AnimTask_ActorMovement = 0x80091C9C; // type:func
+AnimTaskQueue_Update = 0x80091D30; // type:func
+SkelAnime_InitLink = 0x80091DD0; // type:func
+LinkAnimation_SetUpdateFunction = 0x80091F34; // type:func
+LinkAnimation_Update = 0x80091F6C; // type:func
+LinkAnimation_Morph = 0x80091F90; // type:func
+LinkAnimation_AnimateFrame = 0x8009204C; // type:func
+LinkAnimation_Loop = 0x80092128; // type:func
+LinkAnimation_Once = 0x800921C8; // type:func
+Animation_SetMorph = 0x800922A4; // type:func
+LinkAnimation_Change = 0x800922C8; // type:func
+LinkAnimation_PlayOnce = 0x80092440; // type:func
+LinkAnimation_PlayOnceSetSpeed = 0x800924A0; // type:func
+LinkAnimation_PlayLoop = 0x80092504; // type:func
+LinkAnimation_PlayLoopSetSpeed = 0x80092560; // type:func
+LinkAnimation_CopyJointToMorph = 0x800925C0; // type:func
+LinkAnimation_CopyMorphToJoint = 0x800925F0; // type:func
+LinkAnimation_LoadToMorph = 0x80092620; // type:func
+LinkAnimation_LoadToJoint = 0x80092664; // type:func
+LinkAnimation_InterpJointMorph = 0x800926A8; // type:func
+LinkAnimation_BlendToJoint = 0x800926E0; // type:func
+LinkAnimation_BlendToMorph = 0x80092780; // type:func
+LinkAnimation_EndLoop = 0x80092820; // type:func
+Animation_OnFrameImpl = 0x80092844; // type:func
+LinkAnimation_OnFrame = 0x800928FC; // type:func
+SkelAnime_Init = 0x8009294C; // type:func
+SkelAnime_InitFlex = 0x80092A50; // type:func
+SkelAnime_InitSkin = 0x80092B5C; // type:func
+SkelAnime_SetUpdate = 0x80092C3C; // type:func
+SkelAnime_Update = 0x80092C88; // type:func
+SkelAnime_Morph = 0x80092CAC; // type:func
+SkelAnime_MorphTaper = 0x80092D6C; // type:func
+SkelAnime_AnimateFrame = 0x80092EF4; // type:func
+SkelAnime_LoopFull = 0x8009303C; // type:func
+SkelAnime_LoopPartial = 0x800930DC; // type:func
+SkelAnime_Once = 0x80093184; // type:func
+Animation_ChangeImpl = 0x80093288; // type:func
+Animation_Change = 0x80093444; // type:func
+Animation_PlayOnce = 0x8009348C; // type:func
+Animation_MorphToPlayOnce = 0x800934E4; // type:func
+Animation_PlayOnceSetSpeed = 0x80093540; // type:func
+Animation_PlayLoop = 0x8009359C; // type:func
+Animation_MorphToLoop = 0x800935F0; // type:func
+Animation_PlayLoopSetSpeed = 0x80093628; // type:func
+Animation_EndLoop = 0x80093680; // type:func
+Animation_Reverse = 0x800936AC; // type:func
+SkelAnime_CopyFrameTableTrue = 0x800936D0; // type:func
+SkelAnime_CopyFrameTableFalse = 0x80093738; // type:func
+SkelAnime_UpdateTranslation = 0x800937A4; // type:func
+Animation_OnFrame = 0x80093970; // type:func
+SkelAnime_Free = 0x80093998; // type:func
+SkelAnime_CopyFrameTable = 0x800939E4; // type:func
+Skin_UpdateVertices = 0x80093A30; // type:func
+Skin_ApplyLimbModifications = 0x80093BFC; // type:func
+Skin_DrawAnimatedLimb = 0x80094068; // type:func
+Skin_DrawLimb = 0x80094144; // type:func
+Skin_DrawImpl = 0x8009426C; // type:func
+func_800A6330 = 0x80094498; // type:func
+func_800A6360 = 0x800944C8; // type:func
+func_800A6394 = 0x800944FC; // type:func
+func_800A63CC = 0x80094534; // type:func
+Skin_GetLimbPos = 0x80094570; // type:func
+Skin_InitAnimatedLimb = 0x800945D0; // type:func
+Skin_Init = 0x800947AC; // type:func
+Skin_Free = 0x8009497C; // type:func
+func_800A698C = 0x80094A50; // type:func
+Skin_ApplyAnimTransformations = 0x80094B8C; // type:func
+SkinMatrix_Vec3fMtxFMultXYZW = 0x80094EE0; // type:func
+SkinMatrix_Vec3fMtxFMultXYZ = 0x80094FC8; // type:func
+SkinMatrix_MtxFMtxFMult = 0x80095078; // type:func
+SkinMatrix_GetClear = 0x800953D4; // type:func
+SkinMatrix_Clear = 0x800953E8; // type:func
+SkinMatrix_MtxFCopy = 0x80095440; // type:func
+SkinMatrix_Invert = 0x800954C8; // type:func
+SkinMatrix_SetScale = 0x80095768; // type:func
+SkinMatrix_SetRotateZYX = 0x800957CC; // type:func
+SkinMatrix_SetRotateYXZ = 0x8009595C; // type:func
+SkinMatrix_SetTranslate = 0x80095AEC; // type:func
+SkinMatrix_SetTranslateRotateZYXScale = 0x80095B50; // type:func
+SkinMatrix_SetTranslateRotateYXZScale = 0x80095BD4; // type:func
+SkinMatrix_SetTranslateRotateZYX = 0x80095C58; // type:func
+SkinMatrix_Vec3fToVec3s = 0x80095CB8; // type:func
+SkinMatrix_Vec3sToVec3f = 0x80095CFC; // type:func
+SkinMatrix_MtxFToMtx = 0x80095D40; // type:func
+SkinMatrix_MtxFToNewMtx = 0x80095F58; // type:func
+SkinMatrix_SetRotateAxis = 0x80095FA0; // type:func
+func_800A8030 = 0x80096110; // type:func
+Sram_InitNewSave = 0x800962D0; // type:func
+Sram_InitDebugSave = 0x80096420; // type:func
+Sram_OpenSave = 0x800965E8; // type:func
+Sram_WriteSave = 0x80096934; // type:func
+Sram_VerifyAndLoadAllSaves = 0x80096A78; // type:func
+Sram_InitSave = 0x80096F04; // type:func
+Sram_EraseSave = 0x800971CC; // type:func
+Sram_CopySave = 0x800972E0; // type:func
+Sram_WriteSramHeader = 0x80097504; // type:func
+Sram_InitSram = 0x80097530; // type:func
+Sram_Alloc = 0x800975F4; // type:func
+Sram_Init = 0x80097624; // type:func
+SsSram_Init = 0x80097630; // type:func
+SsSram_Dma = 0x80097708; // type:func
+SsSram_ReadWrite = 0x80097794; // type:func
+Rumble_Update = 0x80097800; // type:func
+Rumble_Override = 0x8009783C; // type:func
+Rumble_Request = 0x800978D8; // type:func
+Rumble_Init = 0x80097994; // type:func
+Rumble_Destroy = 0x800979D0; // type:func
+Rumble_Controller1HasRumblePak = 0x80097A28; // type:func
+Rumble_Reset = 0x80097A40; // type:func
+Rumble_ClearRequests = 0x80097A54; // type:func
+Rumble_SetUpdateEnabled = 0x80097A64; // type:func
+View_ViewportToVp = 0x80097A80; // type:func
+View_New = 0x80097AEC; // type:func
+View_Free = 0x80097B38; // type:func
+View_Init = 0x80097B58; // type:func
+View_LookAt = 0x80097C18; // type:func
+View_LookAtUnsafe = 0x80097CB4; // type:func
+View_SetScale = 0x80097D04; // type:func
+View_GetScale = 0x80097D24; // type:func
+View_SetPerspective = 0x80097D34; // type:func
+View_GetPerspective = 0x80097D64; // type:func
+View_SetOrtho = 0x80097D84; // type:func
+View_GetOrtho = 0x80097DC0; // type:func
+View_SetViewport = 0x80097DE0; // type:func
+View_GetViewport = 0x80097E14; // type:func
+View_ApplyLetterbox = 0x80097E3C; // type:func
+View_SetDistortionOrientation = 0x80097F7C; // type:func
+View_SetDistortionScale = 0x80097FA0; // type:func
+View_SetDistortionSpeed = 0x80097FC4; // type:func
+View_InitDistortion = 0x80097FD8; // type:func
+View_ClearDistortion = 0x8009803C; // type:func
+View_SetDistortion = 0x80098070; // type:func
+View_StepDistortion = 0x800980C4; // type:func
+View_Apply = 0x8009827C; // type:func
+View_ApplyPerspective = 0x800982C8; // type:func
+View_ApplyOrtho = 0x800985BC; // type:func
+View_ApplyOrthoToOverlay = 0x80098768; // type:func
+View_ApplyPerspectiveToOverlay = 0x8009899C; // type:func
+View_UpdateViewingMatrix = 0x80098CEC; // type:func
+View_ApplyTo = 0x80098D58; // type:func
+ViMode_LogPrint = 0x80099180; // type:func
+ViMode_Configure = 0x8009918C; // type:func
+ViMode_Save = 0x80099734; // type:func
+ViMode_Load = 0x80099814; // type:func
+ViMode_Init = 0x8009989C; // type:func
+ViMode_Destroy = 0x80099904; // type:func
+ViMode_ConfigureFeatures = 0x80099910; // type:func
+ViMode_Update = 0x80099974; // type:func
+VisCvg_Init = 0x80099CF0; // type:func
+VisCvg_Destroy = 0x80099D14; // type:func
+VisCvg_Draw = 0x80099D20; // type:func
+VisMono_Init = 0x80099E90; // type:func
+VisMono_Destroy = 0x80099EE0; // type:func
+VisMono_DesaturateTLUT = 0x80099F04; // type:func
+VisMono_DesaturateDList = 0x8009A218; // type:func
+VisMono_Draw = 0x8009A448; // type:func
+VisMono_DrawOld = 0x8009A63C; // type:func
+VisZBuf_Init = 0x8009A6B0; // type:func
+VisZBuf_Destroy = 0x8009A6E4; // type:func
+VisZBuf_Draw = 0x8009A6F0; // type:func
+Skybox_CalculateFace256 = 0x8009A940; // type:func
+Skybox_CalculateFace128 = 0x8009B050; // type:func
+Skybox_Calculate256 = 0x8009BD58; // type:func
+Skybox_Calculate128 = 0x8009BF08; // type:func
+Skybox_Setup = 0x8009BFA8; // type:func
+Skybox_Init = 0x8009D0FC; // type:func
+Skybox_UpdateMatrix = 0x8009D210; // type:func
+Skybox_Draw = 0x8009D298; // type:func
+Skybox_Update = 0x8009D8E0; // type:func
+PlayerCall_InitFuncPtrs = 0x8009D8F0; // type:func
+PlayerCall_Init = 0x8009D958; // type:func
+PlayerCall_Destroy = 0x8009D9A0; // type:func
+PlayerCall_Update = 0x8009D9E0; // type:func
+PlayerCall_Draw = 0x8009DA20; // type:func
+TransitionTile_InitGraphics = 0x8009DA60; // type:func
+TransitionTile_InitVtxData = 0x8009DE2C; // type:func
+TransitionTile_Destroy = 0x8009DEEC; // type:func
+TransitionTile_Init = 0x8009DF78; // type:func
+TransitionTile_SetVtx = 0x8009E0F0; // type:func
+TransitionTile_Draw = 0x8009E204; // type:func
+TransitionTile_Suck = 0x8009E330; // type:func
+TransitionTile_Update = 0x8009E464; // type:func
+func_800B23F0 = 0x8009E470; // type:func
+TransitionTriforce_Start = 0x8009E480; // type:func
+TransitionTriforce_Init = 0x8009E4B8; // type:func
+TransitionTriforce_Destroy = 0x8009E558; // type:func
+TransitionTriforce_Update = 0x8009E564; // type:func
+TransitionTriforce_SetColor = 0x8009E678; // type:func
+TransitionTriforce_SetType = 0x8009E684; // type:func
+TransitionTriforce_SetState = 0x8009E690; // type:func
+TransitionTriforce_Draw = 0x8009E69C; // type:func
+TransitionTriforce_IsDone = 0x8009E9AC; // type:func
+TransitionWipe_Start = 0x8009EA40; // type:func
+TransitionWipe_Init = 0x8009EAF8; // type:func
+TransitionWipe_Destroy = 0x8009EB24; // type:func
+TransitionWipe_Update = 0x8009EB30; // type:func
+TransitionWipe_Draw = 0x8009EC10; // type:func
+TransitionWipe_IsDone = 0x8009EE4C; // type:func
+TransitionWipe_SetType = 0x8009EE58; // type:func
+TransitionWipe_SetColor = 0x8009EE98; // type:func
+TransitionWipe_SetUnkColor = 0x8009EEA4; // type:func
+TransitionCircle_Start = 0x8009EEB0; // type:func
+TransitionCircle_Init = 0x8009F09C; // type:func
+TransitionCircle_Destroy = 0x8009F0C8; // type:func
+TransitionCircle_Update = 0x8009F0D4; // type:func
+TransitionCircle_Draw = 0x8009F258; // type:func
+TransitionCircle_IsDone = 0x8009F4F4; // type:func
+TransitionCircle_SetType = 0x8009F500; // type:func
+TransitionCircle_SetColor = 0x8009F558; // type:func
+TransitionCircle_SetUnkColor = 0x8009F564; // type:func
+TransitionFade_Start = 0x8009F570; // type:func
+TransitionFade_Init = 0x8009F5CC; // type:func
+TransitionFade_Destroy = 0x8009F5F8; // type:func
+TransitionFade_Update = 0x8009F604; // type:func
+TransitionFade_Draw = 0x8009F794; // type:func
+TransitionFade_IsDone = 0x8009F860; // type:func
+TransitionFade_SetColor = 0x8009F86C; // type:func
+TransitionFade_SetType = 0x8009F878; // type:func
+Letterbox_SetSizeTarget = 0x8009F8D0; // type:func
+Letterbox_GetSizeTarget = 0x8009F8E0; // type:func
+Letterbox_SetSize = 0x8009F8F0; // type:func
+Letterbox_GetSize = 0x8009F900; // type:func
+Letterbox_Init = 0x8009F910; // type:func
+Letterbox_Destroy = 0x8009F930; // type:func
+Letterbox_Update = 0x8009F940; // type:func
+func_800BB0A0 = 0x8009FA40; // type:func
+func_800BB2B4 = 0x8009FC54; // type:func
+KaleidoManager_LoadOvl = 0x8009FF10; // type:func
+KaleidoManager_ClearOvl = 0x8009FF6C; // type:func
+KaleidoManager_Init = 0x8009FFBC; // type:func
+KaleidoManager_Destroy = 0x800A002C; // type:func
+KaleidoManager_GetRamAddr = 0x800A006C; // type:func
+KaleidoScopeCall_LoadPlayer = 0x800A0140; // type:func
+KaleidoScopeCall_Init = 0x800A018C; // type:func
+KaleidoScopeCall_Destroy = 0x800A01D8; // type:func
+KaleidoScopeCall_Update = 0x800A01F8; // type:func
+KaleidoScopeCall_Draw = 0x800A0398; // type:func
+Play_RequestViewpointBgCam = 0x800A0420; // type:func
+Play_SetViewpoint = 0x800A0460; // type:func
+Play_CheckViewpoint = 0x800A050C; // type:func
+Play_SetShopBrowsingViewpoint = 0x800A0534; // type:func
+Play_SetupTransition = 0x800A0560; // type:func
+func_800BC88C = 0x800A080C; // type:func
+Play_SetFog = 0x800A0824; // type:func
+Play_Destroy = 0x800A0870; // type:func
+Play_Init = 0x800A09DC; // type:func
+Play_Update = 0x800A1158; // type:func
+Play_DrawOverlayElements = 0x800A224C; // type:func
+Play_Draw = 0x800A22E4; // type:func
+Play_Main = 0x800A2D28; // type:func
+Play_InCsMode = 0x800A2D68; // type:func
+func_800BFCB8 = 0x800A2D9C; // type:func
+Play_LoadFile = 0x800A2F48; // type:func
+Play_InitEnvironment = 0x800A2FA4; // type:func
+Play_InitScene = 0x800A2FEC; // type:func
+Play_SpawnScene = 0x800A30F0; // type:func
+Play_GetScreenPos = 0x800A3198; // type:func
+Play_CreateSubCamera = 0x800A325C; // type:func
+Play_GetActiveCamId = 0x800A330C; // type:func
+Play_ChangeCameraStatus = 0x800A3318; // type:func
+Play_ClearCamera = 0x800A3388; // type:func
+Play_ClearAllSubCameras = 0x800A33F0; // type:func
+Play_GetCamera = 0x800A345C; // type:func
+Play_SetCameraAtEye = 0x800A3494; // type:func
+Play_SetCameraAtEyeUp = 0x800A35A4; // type:func
+Play_SetCameraFov = 0x800A36C8; // type:func
+Play_SetCameraRoll = 0x800A3710; // type:func
+Play_CopyCamera = 0x800A375C; // type:func
+Play_InitCameraDataUsingPlayer = 0x800A37D8; // type:func
+Play_RequestCameraSetting = 0x800A3848; // type:func
+Play_ReturnToMainCam = 0x800A3884; // type:func
+Play_GetCameraUID = 0x800A3960; // type:func
+func_800C09D8 = 0x800A3994; // type:func
+Play_SaveSceneFlags = 0x800A3A00; // type:func
+Play_SetRespawnData = 0x800A3A48; // type:func
+Play_SetupRespawnPoint = 0x800A3AB8; // type:func
+Play_TriggerVoidOut = 0x800A3B24; // type:func
+Play_LoadToLastEntrance = 0x800A3B7C; // type:func
+Play_TriggerRespawn = 0x800A3C50; // type:func
+Play_CamIsNotFixed = 0x800A3C84; // type:func
+FrameAdvance_IsEnabled = 0x800A3CF4; // type:func
+func_800C0D34 = 0x800A3D04; // type:func
+func_800C0DB4 = 0x800A3D84; // type:func
+PreRender_SetValuesSave = 0x800A3E40; // type:func
+PreRender_Init = 0x800A3E7C; // type:func
+PreRender_SetValues = 0x800A3EB0; // type:func
+PreRender_Destroy = 0x800A3EE4; // type:func
+PreRender_CopyImage = 0x800A3F08; // type:func
+PreRender_CopyImageRegionImpl = 0x800A41D0; // type:func
+func_800C170C = 0x800A4618; // type:func
+func_800C1AE8 = 0x800A4994; // type:func
+PreRender_CoverageRgba16ToI8 = 0x800A49D0; // type:func
+PreRender_SaveZBuffer = 0x800A4CE8; // type:func
+PreRender_SaveFramebuffer = 0x800A4D20; // type:func
+PreRender_FetchFbufCoverage = 0x800A4D58; // type:func
+PreRender_DrawCoverage = 0x800A4E70; // type:func
+PreRender_RestoreZBuffer = 0x800A4EB4; // type:func
+func_800C213C = 0x800A4ED8; // type:func
+PreRender_RestoreFramebuffer = 0x800A5208; // type:func
+PreRender_CopyImageRegion = 0x800A522C; // type:func
+PreRender_AntiAliasFilter = 0x800A524C; // type:func
+PreRender_DivotFilter = 0x800A5D0C; // type:func
+PreRender_ApplyFilters = 0x800A5E60; // type:func
+THGA_Init = 0x800A5F30; // type:func
+THGA_Destroy = 0x800A5F50; // type:func
+THGA_IsCrash = 0x800A5F70; // type:func
+THGA_Reset = 0x800A5F90; // type:func
+THGA_GetRemaining = 0x800A5FB0; // type:func
+THGA_GetHead = 0x800A5FD0; // type:func
+THGA_SetHead = 0x800A5FF0; // type:func
+THGA_GetTail = 0x800A6010; // type:func
+THGA_AllocDisplayList = 0x800A6030; // type:func
+THGA_AllocGfx = 0x800A6054; // type:func
+THGA_AllocGfx2 = 0x800A6074; // type:func
+THGA_AllocTail = 0x800A6094; // type:func
+THGA_AllocMtxArray = 0x800A60B4; // type:func
+THGA_AllocMtx = 0x800A60D8; // type:func
+THGA_AllocVtxArray = 0x800A60F8; // type:func
+THGA_AllocVtx = 0x800A611C; // type:func
+THA_GetHead = 0x800A6140; // type:func
+THA_SetHead = 0x800A614C; // type:func
+THA_GetTail = 0x800A6158; // type:func
+THA_AllocHead = 0x800A6164; // type:func
+THA_AllocHeadByte = 0x800A6178; // type:func
+THA_AllocTail = 0x800A6198; // type:func
+THA_AllocTailAlign16 = 0x800A6228; // type:func
+THA_AllocTailAlign = 0x800A6248; // type:func
+THA_GetRemaining = 0x800A6264; // type:func
+THA_IsCrash = 0x800A6278; // type:func
+THA_Reset = 0x800A629C; // type:func
+THA_Init = 0x800A62B8; // type:func
+THA_Destroy = 0x800A62DC; // type:func
+AudioMgr_StopAllSfx = 0x800A6300; // type:func
+AudioMgr_NotifyTaskDone = 0x800A6350; // type:func
+AudioMgr_HandleRetrace = 0x800A6388; // type:func
+AudioMgr_HandlePreNMI = 0x800A6510; // type:func
+AudioMgr_ThreadEntry = 0x800A6534; // type:func
+AudioMgr_WaitForInit = 0x800A6664; // type:func
+AudioMgr_Init = 0x800A6690; // type:func
+Setup_InitImpl = 0x800A6760; // type:func
+Setup_Destroy = 0x800A679C; // type:func
+Setup_Init = 0x800A67A8; // type:func
+GameState_SetFBFilter = 0x800A67D0; // type:func
+func_800C4344 = 0x800A6924; // type:func
+GameState_Draw = 0x800A6930; // type:func
+GameState_SetFrameBuffer = 0x800A6A28; // type:func
+func_800C49F4 = 0x800A6B0C; // type:func
+GameState_ReqPadData = 0x800A6B84; // type:func
+GameState_Update = 0x800A6BB4; // type:func
+GameState_InitArena = 0x800A6C30; // type:func
+GameState_Realloc = 0x800A6CA0; // type:func
+GameState_Init = 0x800A6D60; // type:func
+GameState_Destroy = 0x800A6E58; // type:func
+GameState_GetInit = 0x800A6F08; // type:func
+GameState_GetSize = 0x800A6F14; // type:func
+GameState_IsRunning = 0x800A6F20; // type:func
+GameState_GetArenaSize = 0x800A6F2C; // type:func
+GameAlloc_Log = 0x800A6F50; // type:func
+GameAlloc_Malloc = 0x800A6F70; // type:func
+GameAlloc_Free = 0x800A6FDC; // type:func
+GameAlloc_Cleanup = 0x800A7028; // type:func
+GameAlloc_Init = 0x800A7078; // type:func
+Graph_InitTHGA = 0x800A7090; // type:func
+Graph_GetNextGameState = 0x800A71A8; // type:func
+Graph_Init = 0x800A7258; // type:func
+Graph_Destroy = 0x800A72C8; // type:func
+Graph_TaskSet00 = 0x800A72D4; // type:func
+Graph_Update = 0x800A7618; // type:func
+Graph_ThreadEntry = 0x800A78CC; // type:func
+Graph_Alloc = 0x800A79C4; // type:func
+Graph_Alloc2 = 0x800A79F8; // type:func
+Gfx_Open = 0x800A7A30; // type:func
+Gfx_Close = 0x800A7A3C; // type:func
+Gfx_Alloc = 0x800A7A54; // type:func
+ListAlloc_Init = 0x800A7A90; // type:func
+ListAlloc_Alloc = 0x800A7AA4; // type:func
+ListAlloc_Free = 0x800A7B10; // type:func
+ListAlloc_FreeAll = 0x800A7B90; // type:func
+Main = 0x800A7BE0; // type:func
+PadMgr_AcquireSerialEventQueue = 0x800A7F40; // type:func
+PadMgr_ReleaseSerialEventQueue = 0x800A7F70; // type:func
+PadMgr_LockPadData = 0x800A7F98; // type:func
+PadMgr_UnlockPadData = 0x800A7FC4; // type:func
+PadMgr_UpdateRumble = 0x800A7FF0; // type:func
+PadMgr_RumbleStop = 0x800A8240; // type:func
+PadMgr_RumbleReset = 0x800A82D8; // type:func
+PadMgr_RumbleSetSingle = 0x800A82E8; // type:func
+PadMgr_RumbleSet = 0x800A8300; // type:func
+PadMgr_UpdateInputs = 0x800A8330; // type:func
+PadMgr_HandleRetrace = 0x800A8510; // type:func
+PadMgr_HandlePreNMI = 0x800A86A8; // type:func
+PadMgr_RequestPadData = 0x800A86CC; // type:func
+PadMgr_ThreadEntry = 0x800A8848; // type:func
+PadMgr_Init = 0x800A8944; // type:func
+Sched_SwapFrameBufferImpl = 0x800A8A40; // type:func
+Sched_SwapFrameBuffer = 0x800A8AB0; // type:func
+Sched_HandlePreNMI = 0x800A8B00; // type:func
+Sched_HandleNMI = 0x800A8B0C; // type:func
+Sched_QueueTask = 0x800A8B30; // type:func
+Sched_Yield = 0x800A8B9C; // type:func
+Sched_GfxTaskFramebufferValid = 0x800A8BD0; // type:func
+Sched_Schedule = 0x800A8C94; // type:func
+Sched_SetNextFramebufferFromTask = 0x800A8DC8; // type:func
+Sched_TaskComplete = 0x800A8E14; // type:func
+Sched_RunTask = 0x800A8E8C; // type:func
+Sched_HandleNotification = 0x800A8FF0; // type:func
+Sched_HandleRetrace = 0x800A90E0; // type:func
+Sched_HandleRSPDone = 0x800A91B8; // type:func
+Sched_HandleRDPDone = 0x800A93CC; // type:func
+Sched_Notify = 0x800A9494; // type:func
+Sched_ThreadEntry = 0x800A94B8; // type:func
+Sched_Init = 0x800A95EC; // type:func
+SpeedMeter_InitImpl = 0x800A96C0; // type:func
+SpeedMeter_Init = 0x800A96D0; // type:func
+SpeedMeter_Destroy = 0x800A96F4; // type:func
+SpeedMeter_DrawTimeEntries = 0x800A9700; // type:func
+SpeedMeter_InitAllocEntry = 0x800A9BC4; // type:func
+SpeedMeter_DrawAllocEntry = 0x800A9C08; // type:func
+SpeedMeter_DrawAllocEntries = 0x800A9E5C; // type:func
+SysCfb_Init = 0x800AA100; // type:func
+SysCfb_Reset = 0x800AA1C8; // type:func
+SysCfb_GetFbPtr = 0x800AA1E8; // type:func
+SysCfb_GetFbEnd = 0x800AA210; // type:func
+Math_FactorialF = 0x800AA220; // type:func
+Math_Factorial = 0x800AA320; // type:func
+Math_PowF = 0x800AA3E4; // type:func
+Math_SinF = 0x800AA40C; // type:func
+Math_CosF = 0x800AA460; // type:func
+Math3D_PlaneVsLineSegClosestPoint = 0x800AA4C0; // type:func
+Math3D_LineVsLineClosestTwoPoints = 0x800AA5E0; // type:func
+Math3D_LineClosestToPoint = 0x800AA88C; // type:func
+Math3D_FindPointOnPlaneIntersect = 0x800AA978; // type:func
+Math3D_PlaneVsPlaneNewLine = 0x800AA9D8; // type:func
+Math3D_PlaneVsPlaneVsLineClosestPoint = 0x800AABB8; // type:func
+Math3D_PointOnInfiniteLine = 0x800AAC34; // type:func
+Math3D_LineSplitRatio = 0x800AAC80; // type:func
+Math3D_Cos = 0x800AACCC; // type:func
+Math3D_CosOut = 0x800AACF0; // type:func
+Math3D_Vec3fReflect = 0x800AADA8; // type:func
+Math3D_PointInSquare2D = 0x800AAE7C; // type:func
+Math3D_CirSquareVsTriSquare = 0x800AAEE0; // type:func
+Math3D_SphCubeVsTriCube = 0x800AB020; // type:func
+Math3D_Dist1DSq = 0x800AB244; // type:func
+Math3D_Dist1D = 0x800AB25C; // type:func
+Math3D_Dist2DSq = 0x800AB280; // type:func
+Math3D_Dist2D = 0x800AB2C4; // type:func
+Math3D_Vec3fMagnitudeSq = 0x800AB2F4; // type:func
+Math3D_Vec3fMagnitude = 0x800AB320; // type:func
+Math3D_Vec3fDistSq = 0x800AB348; // type:func
+Math3D_Vec3f_DistXYZ = 0x800AB370; // type:func
+Math3D_DistXYZ16toF = 0x800AB390; // type:func
+Math3D_Vec3fDiff_CrossZ = 0x800AB408; // type:func
+Math3D_Vec3fDiff_CrossX = 0x800AB448; // type:func
+Math3D_Vec3fDiff_CrossY = 0x800AB488; // type:func
+Math3D_Vec3f_Cross = 0x800AB4C8; // type:func
+Math3D_SurfaceNorm = 0x800AB53C; // type:func
+Math3D_PointRelativeToCubeFaces = 0x800AB5A4; // type:func
+Math3D_PointRelativeToCubeEdges = 0x800AB650; // type:func
+Math3D_PointRelativeToCubeVertices = 0x800AB800; // type:func
+Math3D_LineVsCube = 0x800AB97C; // type:func
+Math3D_LineVsCubeShort = 0x800AC3F4; // type:func
+Math3D_RotateXZPlane = 0x800AC560; // type:func
+Math3D_DefPlane = 0x800AC5EC; // type:func
+Math3D_Planef = 0x800AC700; // type:func
+Math3D_Plane = 0x800AC740; // type:func
+Math3D_UDistPlaneToPos = 0x800AC77C; // type:func
+Math3D_DistPlaneToPos = 0x800AC7B4; // type:func
+Math3D_TriChkPointParaYImpl = 0x800AC838; // type:func
+Math3D_TriChkPointParaYDeterminate = 0x800ACB54; // type:func
+Math3D_TriChkPointParaYSlopedY = 0x800ACB9C; // type:func
+Math3D_TriChkPointParaYIntersectDist = 0x800ACBEC; // type:func
+Math3D_TriChkPointParaYIntersectInsideTri = 0x800ACC9C; // type:func
+Math3D_TriChkPointParaY = 0x800ACD48; // type:func
+Math3D_TriChkLineSegParaYIntersect = 0x800ACDC4; // type:func
+Math3D_TriChkPointParaYDist = 0x800ACF38; // type:func
+Math3D_TriChkPointParaXImpl = 0x800ACFAC; // type:func
+Math3D_TriChkPointParaXDeterminate = 0x800AD2C8; // type:func
+Math3D_TriChkPointParaXIntersect = 0x800AD310; // type:func
+Math3D_TriChkPointParaX = 0x800AD3C4; // type:func
+Math3D_TriChkLineSegParaXIntersect = 0x800AD440; // type:func
+Math3D_TriChkPointParaXDist = 0x800AD5C8; // type:func
+Math3D_TriChkPointParaZImpl = 0x800AD63C; // type:func
+Math3D_TriChkPointParaZDeterminate = 0x800AD984; // type:func
+Math3D_TriChkPointParaZIntersect = 0x800AD9CC; // type:func
+Math3D_TriChkPointParaZ = 0x800ADA80; // type:func
+Math3D_TriChkLineSegParaZIntersect = 0x800ADAFC; // type:func
+Math3D_TriChkLineSegParaZDist = 0x800ADC88; // type:func
+Math3D_LineSegFindPlaneIntersect = 0x800ADCFC; // type:func
+Math3D_LineSegVsPlane = 0x800ADDD8; // type:func
+Math3D_TriLineIntersect = 0x800ADEE0; // type:func
+Math3D_TriNorm = 0x800AE044; // type:func
+Math3D_PointInSph = 0x800AE0F4; // type:func
+Math3D_PointDistSqToLine2D = 0x800AE144; // type:func
+Math3D_LineVsSph = 0x800AE28C; // type:func
+Math3D_GetSphVsTriIntersectPoint = 0x800AE494; // type:func
+Math3D_TriVsSphIntersect = 0x800AE5D4; // type:func
+Math3D_PointInCyl = 0x800AE9F4; // type:func
+Math3D_CylVsLineSeg = 0x800AEAB0; // type:func
+Math3D_CylTriVsIntersect = 0x800AF478; // type:func
+Math3D_CylVsTri = 0x800AF8F8; // type:func
+Math3D_SphVsSph = 0x800AF918; // type:func
+Math3D_SphVsSphOverlap = 0x800AF938; // type:func
+Math3D_SphVsSphOverlapCenterDist = 0x800AF958; // type:func
+Math3D_SphVsCylOverlap = 0x800AFA30; // type:func
+Math3D_SphVsCylOverlapCenterDist = 0x800AFA50; // type:func
+Math3D_CylVsCylOverlap = 0x800AFBC0; // type:func
+Math3D_CylVsCylOverlapCenterDist = 0x800AFBE0; // type:func
+Math3D_TriVsTriIntersect = 0x800AFDB0; // type:func
+Math3D_XZInSphere = 0x800B0130; // type:func
+Math3D_XYInSphere = 0x800B01A4; // type:func
+Math3D_YZInSphere = 0x800B0218; // type:func
+Math_GetAtan2Tbl = 0x800B0290; // type:func
+Math_Atan2S = 0x800B0308; // type:func
+Math_Atan2F = 0x800B0480; // type:func
+Matrix_Init = 0x800B04C0; // type:func
+Matrix_Push = 0x800B04FC; // type:func
+Matrix_Pop = 0x800B0534; // type:func
+Matrix_Get = 0x800B0550; // type:func
+Matrix_Put = 0x800B0574; // type:func
+Matrix_GetCurrent = 0x800B059C; // type:func
+Matrix_Mult = 0x800B05AC; // type:func
+Matrix_Translate = 0x800B0604; // type:func
+Matrix_Scale = 0x800B070C; // type:func
+Matrix_RotateX = 0x800B07F0; // type:func
+Matrix_RotateY = 0x800B09A4; // type:func
+Matrix_RotateZ = 0x800B0B5C; // type:func
+Matrix_RotateZYX = 0x800B0D10; // type:func
+Matrix_TranslateRotateZYX = 0x800B0FCC; // type:func
+Matrix_SetTranslateRotateYXZ = 0x800B1320; // type:func
+Matrix_MtxFToMtx = 0x800B14CC; // type:func
+Matrix_ToMtx = 0x800B16E8; // type:func
+Matrix_Finalize = 0x800B1710; // type:func
+Matrix_MtxFToNewMtx = 0x800B173C; // type:func
+Matrix_MultVec3f = 0x800B1768; // type:func
+Matrix_MtxFCopy = 0x800B1820; // type:func
+Matrix_MtxToMtxF = 0x800B1928; // type:func
+Matrix_MultVec3fExt = 0x800B1B7C; // type:func
+Matrix_Transpose = 0x800B1C2C; // type:func
+Matrix_ReplaceRotation = 0x800B1C64; // type:func
+Matrix_MtxFToYXZRotS = 0x800B1D60; // type:func
+Matrix_MtxFToZYXRotS = 0x800B1EF8; // type:func
+Matrix_RotateAxis = 0x800B2090; // type:func
+Matrix_SetTranslateUniformScaleMtxF = 0x800B24F8; // type:func
+Matrix_SetTranslateUniformScaleMtx = 0x800B2560; // type:func
+Matrix_SetTranslateUniformScaleMtx2 = 0x800B25B0; // type:func
+Matrix_SetTranslateScaleMtx1 = 0x800B26A0; // type:func
+Matrix_SetTranslateScaleMtx2 = 0x800B27C0; // type:func
+SysUcode_GetUCodeBoot = 0x800B28C0; // type:func
+SysUcode_GetUCodeBootSize = 0x800B28D0; // type:func
+SysUcode_GetUCode = 0x800B28EC; // type:func
+SysUcode_GetUCodeData = 0x800B28FC; // type:func
+RumbleMgr_Update = 0x800B2910; // type:func
+RumbleMgr_Init = 0x800B2C20; // type:func
+RumbleMgr_Destroy = 0x800B2C58; // type:func
+func_800D31A0 = 0x800B2C70; // type:func
+IrqMgr_AddClient = 0x800B2CA0; // type:func
+IrqMgr_RemoveClient = 0x800B2D2C; // type:func
+IrqMgr_SendMesgToClients = 0x800B2DB8; // type:func
+IrqMgr_JamMesgToClients = 0x800B2E1C; // type:func
+IrqMgr_HandlePreNMI = 0x800B2E80; // type:func
+IrqMgr_CheckStacks = 0x800B2F18; // type:func
+IrqMgr_HandlePreNMI450 = 0x800B2F38; // type:func
+IrqMgr_HandlePreNMI480 = 0x800B2FB4; // type:func
+IrqMgr_HandlePreNMI500 = 0x800B3048; // type:func
+IrqMgr_HandleRetrace = 0x800B306C; // type:func
+IrqMgr_ThreadEntry = 0x800B3124; // type:func
+IrqMgr_Init = 0x800B31F8; // type:func
+Fault_SleepImpl = 0x800B32C0; // type:func
+Fault_ClientProcessThread = 0x800B3330; // type:func
+Fault_ClientRunTask = 0x800B33A4; // type:func
+Fault_ProcessClient = 0x800B3528; // type:func
+Fault_AddClient = 0x800B357C; // type:func
+Fault_RemoveClient = 0x800B3660; // type:func
+Fault_AddAddrConvClient = 0x800B3758; // type:func
+Fault_RemoveAddrConvClient = 0x800B3830; // type:func
+Fault_ConvertAddress = 0x800B3928; // type:func
+Fault_Sleep = 0x800B39DC; // type:func
+Fault_PadCallback = 0x800B3A18; // type:func
+Fault_UpdatePadImpl = 0x800B3A54; // type:func
+Fault_WaitForInputImpl = 0x800B3AA0; // type:func
+Fault_WaitForInput = 0x800B3BEC; // type:func
+Fault_DrawRec = 0x800B3C38; // type:func
+Fault_FillScreenBlack = 0x800B3C98; // type:func
+Fault_FillScreenRed = 0x800B3CEC; // type:func
+Fault_DrawCornerRec = 0x800B3D40; // type:func
+Fault_PrintFReg = 0x800B3D94; // type:func
+Fault_LogFReg = 0x800B3E40; // type:func
+Fault_PrintFPCSR = 0x800B3EF0; // type:func
+Fault_LogFPCSR = 0x800B3F94; // type:func
+Fault_PrintThreadContext = 0x800B402C; // type:func
+Fault_LogThreadContext = 0x800B4348; // type:func
+Fault_FindFaultedThread = 0x800B4644; // type:func
+Fault_Wait5Seconds = 0x800B46CC; // type:func
+Fault_WaitForButtonCombo = 0x800B475C; // type:func
+Fault_DrawMemDumpContents = 0x800B4A28; // type:func
+Fault_DrawMemDump = 0x800B4B94; // type:func
+Fault_WalkStack = 0x800B4D98; // type:func
+Fault_DrawStackTrace = 0x800B4F28; // type:func
+Fault_LogStackTrace = 0x800B50A8; // type:func
+Fault_ResumeThread = 0x800B5218; // type:func
+Fault_DisplayFrameBuffer = 0x800B5294; // type:func
+Fault_ProcessClients = 0x800B5354; // type:func
+Fault_UpdatePad = 0x800B5434; // type:func
+Fault_ThreadEntry = 0x800B5470; // type:func
+Fault_SetFrameBuffer = 0x800B57D0; // type:func
+Fault_Init = 0x800B5824; // type:func
+Fault_HungupFaultClient = 0x800B5958; // type:func
+Fault_AddHungupAndCrashImpl = 0x800B5A54; // type:func
+Fault_AddHungupAndCrash = 0x800B5AAC; // type:func
+Fault_SetOsSyncPrintfEnabled = 0x800B5B10; // type:func
+Fault_DrawRecImpl = 0x800B5B20; // type:func
+Fault_DrawChar = 0x800B5C3C; // type:func
+Fault_ColorToPrintColor = 0x800B5DAC; // type:func
+Fault_UpdatePrintColor = 0x800B5E5C; // type:func
+Fault_SetForeColor = 0x800B5EFC; // type:func
+Fault_SetBackColor = 0x800B5F44; // type:func
+Fault_SetFontColor = 0x800B5F8C; // type:func
+Fault_SetCharPad = 0x800B5FD4; // type:func
+Fault_SetCursor = 0x800B6004; // type:func
+Fault_FillScreen = 0x800B60FC; // type:func
+Fault_PrintCallback = 0x800B618C; // type:func
+Fault_VPrintf = 0x800B6398; // type:func
+Fault_Printf = 0x800B63E8; // type:func
+Fault_DrawText = 0x800B6438; // type:func
+Fault_SetDrawerFB = 0x800B6488; // type:func
+Fault_SetInputCallback = 0x800B64B4; // type:func
+Fault_WritebackFBDCache = 0x800B64C4; // type:func
+Fault_InitDrawer = 0x800B6520; // type:func
+Kanji_OffsetFromShiftJIS = 0x800B6590; // type:func
+AudioSynth_InitNextRingBuf = 0x800B7080; // type:func
+func_800DB03C = 0x800B73FC; // type:func
+AudioSynth_Update = 0x800B7484; // type:func
+func_800DB2C0 = 0x800B7680; // type:func
+AudioSynth_LoadRingBuffer1AtTemp = 0x800B76F0; // type:func
+AudioSynth_SaveRingBuffer1AtTemp = 0x800B7798; // type:func
+AudioSynth_LeakReverb = 0x800B7840; // type:func
+func_800DB4E4 = 0x800B78A4; // type:func
+func_800DB680 = 0x800B7A40; // type:func
+func_800DB828 = 0x800B7BE8; // type:func
+AudioSynth_FilterReverb = 0x800B7E00; // type:func
+AudioSynth_MaybeMixRingBuffer1 = 0x800B7EA8; // type:func
+func_800DBB94 = 0x800B7F54; // type:func
+AudioSynth_ClearBuffer = 0x800B7F5C; // type:func
+func_800DBBBC = 0x800B7F7C; // type:func
+func_800DBBC4 = 0x800B7F84; // type:func
+func_800DBBCC = 0x800B7F8C; // type:func
+AudioSynth_Mix = 0x800B7F94; // type:func
+func_800DBC08 = 0x800B7FC8; // type:func
+func_800DBC10 = 0x800B7FD0; // type:func
+func_800DBC18 = 0x800B7FD8; // type:func
+AudioSynth_SetBuffer = 0x800B7FE0; // type:func
+func_800DBC54 = 0x800B8014; // type:func
+func_800DBC5C = 0x800B801C; // type:func
+AudioSynth_DMemMove = 0x800B8024; // type:func
+func_800DBC90 = 0x800B8050; // type:func
+func_800DBC98 = 0x800B8058; // type:func
+func_800DBCA0 = 0x800B8060; // type:func
+func_800DBCA8 = 0x800B8068; // type:func
+AudioSynth_InterL = 0x800B8070; // type:func
+AudioSynth_EnvSetup1 = 0x800B8094; // type:func
+func_800DBD08 = 0x800B80C8; // type:func
+AudioSynth_LoadBuffer = 0x800B80D0; // type:func
+AudioSynth_SaveBuffer = 0x800B80F8; // type:func
+AudioSynth_EnvSetup2 = 0x800B8120; // type:func
+func_800DBD7C = 0x800B813C; // type:func
+func_800DBD84 = 0x800B8144; // type:func
+func_800DBD8C = 0x800B814C; // type:func
+AudioSynth_S8Dec = 0x800B8154; // type:func
+AudioSynth_HiLoGain = 0x800B8170; // type:func
+AudioSynth_UnkCmd19 = 0x800B81A4; // type:func
+func_800DBE18 = 0x800B81D8; // type:func
+func_800DBE20 = 0x800B81E0; // type:func
+func_800DBE28 = 0x800B81E8; // type:func
+func_800DBE30 = 0x800B81F0; // type:func
+AudioSynth_UnkCmd3 = 0x800B81F8; // type:func
+func_800DBE5C = 0x800B821C; // type:func
+func_800DBE64 = 0x800B8224; // type:func
+func_800DBE6C = 0x800B822C; // type:func
+AudioSynth_LoadFilterBuffer = 0x800B8234; // type:func
+AudioSynth_LoadFilterSize = 0x800B8258; // type:func
+AudioSynth_LoadRingBuffer1 = 0x800B8270; // type:func
+AudioSynth_LoadRingBuffer2 = 0x800B831C; // type:func
+AudioSynth_LoadRingBufferPart = 0x800B83C8; // type:func
+AudioSynth_SaveRingBufferPart = 0x800B8434; // type:func
+AudioSynth_SaveBufferOffset = 0x800B84A0; // type:func
+AudioSynth_MaybeLoadRingBuffer2 = 0x800B84E4; // type:func
+AudioSynth_LoadReverbSamples = 0x800B8524; // type:func
+AudioSynth_SaveReverbSamples = 0x800B8598; // type:func
+AudioSynth_SaveRingBuffer2 = 0x800B869C; // type:func
+AudioSynth_DoOneAudioUpdate = 0x800B8744; // type:func
+AudioSynth_ProcessNote = 0x800B8CD0; // type:func
+AudioSynth_FinalResample = 0x800B99EC; // type:func
+AudioSynth_ProcessEnvelope = 0x800B9A8C; // type:func
+AudioSynth_LoadWaveSamples = 0x800B9DB4; // type:func
+AudioSynth_ApplyHaasEffect = 0x800B9F24; // type:func
+AudioHeap_CalculateAdsrDecay = 0x800BA1E0; // type:func
+AudioHeap_InitAdsrDecayTable = 0x800BA1FC; // type:func
+AudioHeap_ResetLoadStatus = 0x800BA340; // type:func
+AudioHeap_DiscardFont = 0x800BA408; // type:func
+AudioHeap_ReleaseNotesForFont = 0x800BA4EC; // type:func
+AudioHeap_DiscardSequence = 0x800BA574; // type:func
+AudioHeap_WritebackDCache = 0x800BA5F8; // type:func
+AudioHeap_AllocZeroedAttemptExternal = 0x800BA618; // type:func
+AudioHeap_AllocAttemptExternal = 0x800BA670; // type:func
+AudioHeap_AllocDmaMemory = 0x800BA6C8; // type:func
+AudioHeap_AllocDmaMemoryZeroed = 0x800BA704; // type:func
+AudioHeap_AllocZeroed = 0x800BA740; // type:func
+AudioHeap_Alloc = 0x800BA79C; // type:func
+AudioHeap_InitPool = 0x800BA7F4; // type:func
+AudioHeap_InitPersistentCache = 0x800BA81C; // type:func
+AudioHeap_InitTemporaryCache = 0x800BA830; // type:func
+AudioHeap_ResetPool = 0x800BA860; // type:func
+AudioHeap_PopPersistentCache = 0x800BA870; // type:func
+AudioHeap_InitMainPools = 0x800BA9B0; // type:func
+AudioHeap_InitSessionPools = 0x800BAA10; // type:func
+AudioHeap_InitCachePools = 0x800BAA94; // type:func
+AudioHeap_InitPersistentPoolsAndCaches = 0x800BAB18; // type:func
+AudioHeap_InitTemporaryPoolsAndCaches = 0x800BABDC; // type:func
+AudioHeap_AllocCached = 0x800BACA0; // type:func
+AudioHeap_SearchCaches = 0x800BB434; // type:func
+AudioHeap_SearchRegularCaches = 0x800BB48C; // type:func
+func_800DF1D8 = 0x800BB598; // type:func
+AudioHeap_ClearFilter = 0x800BB96C; // type:func
+AudioHeap_LoadLowPassFilter = 0x800BB99C; // type:func
+AudioHeap_LoadHighPassFilter = 0x800BB9F0; // type:func
+AudioHeap_LoadFilter = 0x800BBA48; // type:func
+AudioHeap_UpdateReverb = 0x800BBB7C; // type:func
+AudioHeap_UpdateReverbs = 0x800BBB84; // type:func
+AudioHeap_ClearCurrentAiBuffer = 0x800BBC48; // type:func
+AudioHeap_ResetStep = 0x800BBCB4; // type:func
+AudioHeap_Init = 0x800BBFB8; // type:func
+AudioHeap_SearchPermanentCache = 0x800BC8A8; // type:func
+AudioHeap_AllocPermanent = 0x800BC900; // type:func
+AudioHeap_AllocSampleCache = 0x800BC984; // type:func
+AudioHeap_InitSampleCaches = 0x800BC9F4; // type:func
+AudioHeap_AllocTemporarySampleCacheEntry = 0x800BCA8C; // type:func
+AudioHeap_UnapplySampleCacheForFont = 0x800BCD24; // type:func
+AudioHeap_DiscardSampleCacheEntry = 0x800BCE98; // type:func
+AudioHeap_UnapplySampleCache = 0x800BCF74; // type:func
+AudioHeap_AllocPersistentSampleCacheEntry = 0x800BCFB8; // type:func
+AudioHeap_DiscardSampleCacheForFont = 0x800BD040; // type:func
+AudioHeap_DiscardSampleCaches = 0x800BD07C; // type:func
+AudioHeap_ChangeStorage = 0x800BD1CC; // type:func
+AudioHeap_DiscardSampleBank = 0x800BD22C; // type:func
+AudioHeap_ApplySampleBankCache = 0x800BD250; // type:func
+AudioHeap_ApplySampleBankCacheInternal = 0x800BD274; // type:func
+AudioHeap_DiscardSampleBanks = 0x800BD508; // type:func
+AudioLoad_DecreaseSampleDmaTtls = 0x800BD5B0; // type:func
+AudioLoad_DmaSampleData = 0x800BD69C; // type:func
+AudioLoad_InitSampleDmaBuffers = 0x800BD9D8; // type:func
+AudioLoad_IsFontLoadComplete = 0x800BDC70; // type:func
+AudioLoad_IsSeqLoadComplete = 0x800BDCE8; // type:func
+AudioLoad_IsSampleLoadComplete = 0x800BDD60; // type:func
+AudioLoad_SetFontLoadStatus = 0x800BDDD8; // type:func
+AudioLoad_SetSeqLoadStatus = 0x800BDE08; // type:func
+AudioLoad_SetSampleFontLoadStatusAndApplyCaches = 0x800BDE38; // type:func
+AudioLoad_SetSampleFontLoadStatus = 0x800BDE98; // type:func
+AudioLoad_InitTable = 0x800BDEC8; // type:func
+AudioLoad_SyncLoadSeqFonts = 0x800BDF28; // type:func
+AudioLoad_SyncLoadSeqParts = 0x800BDFD8; // type:func
+AudioLoad_SyncLoadSample = 0x800BE038; // type:func
+AudioLoad_SyncLoadInstrument = 0x800BE124; // type:func
+AudioLoad_AsyncLoad = 0x800BE1F4; // type:func
+AudioLoad_AsyncLoadSeq = 0x800BE22C; // type:func
+AudioLoad_AsyncLoadSampleBank = 0x800BE270; // type:func
+AudioLoad_AsyncLoadFont = 0x800BE2B4; // type:func
+AudioLoad_GetFontsForSequence = 0x800BE2F8; // type:func
+AudioLoad_DiscardSeqFonts = 0x800BE33C; // type:func
+AudioLoad_DiscardFont = 0x800BE3EC; // type:func
+AudioLoad_SyncInitSeqPlayer = 0x800BE494; // type:func
+AudioLoad_SyncInitSeqPlayerSkipTicks = 0x800BE4E4; // type:func
+AudioLoad_SyncInitSeqPlayerInternal = 0x800BE53C; // type:func
+AudioLoad_SyncLoadSeq = 0x800BE684; // type:func
+AudioLoad_GetSampleBank = 0x800BE6D8; // type:func
+AudioLoad_TrySyncLoadSampleBank = 0x800BE6F8; // type:func
+AudioLoad_SyncLoadFont = 0x800BE814; // type:func
+AudioLoad_SyncLoad = 0x800BE918; // type:func
+AudioLoad_GetRealTableIndex = 0x800BEB28; // type:func
+AudioLoad_SearchCaches = 0x800BEB64; // type:func
+AudioLoad_GetLoadTable = 0x800BEBB8; // type:func
+AudioLoad_RelocateFont = 0x800BEBFC; // type:func
+AudioLoad_SyncDma = 0x800BEE68; // type:func
+AudioLoad_SyncDmaUnkMedium = 0x800BEF8C; // type:func
+AudioLoad_Dma = 0x800BEFA0; // type:func
+AudioLoad_Unused1 = 0x800BF078; // type:func
+AudioLoad_SyncLoadSimple = 0x800BF080; // type:func
+AudioLoad_AsyncLoadInner = 0x800BF0A0; // type:func
+AudioLoad_ProcessLoads = 0x800BF3AC; // type:func
+AudioLoad_SetDmaHandler = 0x800BF3DC; // type:func
+AudioLoad_SetUnusedHandler = 0x800BF3E8; // type:func
+AudioLoad_InitSoundFont = 0x800BF3F4; // type:func
+AudioLoad_Init = 0x800BF454; // type:func
+AudioLoad_InitSlowLoads = 0x800BF7C0; // type:func
+AudioLoad_SlowLoadSample = 0x800BF7D4; // type:func
+AudioLoad_GetFontSample = 0x800BF9A0; // type:func
+AudioLoad_Unused2 = 0x800BFA30; // type:func
+AudioLoad_FinishSlowLoad = 0x800BFA38; // type:func
+AudioLoad_ProcessSlowLoads = 0x800BFAAC; // type:func
+AudioLoad_DmaSlowCopy = 0x800BFC34; // type:func
+AudioLoad_DmaSlowCopyUnkMedium = 0x800BFCB8; // type:func
+AudioLoad_SlowLoadSeq = 0x800BFCCC; // type:func
+AudioLoad_InitAsyncLoads = 0x800BFDD4; // type:func
+AudioLoad_StartAsyncLoadUnkMedium = 0x800BFE04; // type:func
+AudioLoad_StartAsyncLoad = 0x800BFE88; // type:func
+AudioLoad_ProcessAsyncLoads = 0x800BFFAC; // type:func
+AudioLoad_ProcessAsyncLoadUnkMedium = 0x800C00D0; // type:func
+AudioLoad_FinishAsyncLoad = 0x800C00DC; // type:func
+AudioLoad_ProcessAsyncLoad = 0x800C0218; // type:func
+AudioLoad_AsyncDma = 0x800C0374; // type:func
+AudioLoad_AsyncDmaUnkMedium = 0x800C0404; // type:func
+AudioLoad_RelocateSample = 0x800C0418; // type:func
+AudioLoad_RelocateFontAndPreloadSamples = 0x800C0558; // type:func
+AudioLoad_ProcessSamplePreloads = 0x800C0950; // type:func
+AudioLoad_AddToSampleSet = 0x800C0B04; // type:func
+AudioLoad_GetSamplesForFont = 0x800C0B4C; // type:func
+AudioLoad_AddUsedSample = 0x800C0C80; // type:func
+AudioLoad_PreloadSamplesForFont = 0x800C0CD8; // type:func
+AudioLoad_LoadPermanentSamples = 0x800C1154; // type:func
+AudioLoad_Unused3 = 0x800C1294; // type:func
+AudioLoad_Unused4 = 0x800C129C; // type:func
+AudioLoad_Unused5 = 0x800C12A4; // type:func
+AudioLoad_ScriptLoad = 0x800C12AC; // type:func
+AudioLoad_ProcessScriptLoads = 0x800C1318; // type:func
+AudioLoad_InitScriptLoads = 0x800C1370; // type:func
+AudioThread_Update = 0x800C13A0; // type:func
+AudioThread_UpdateImpl = 0x800C13C0; // type:func
+AudioThread_ProcessGlobalCmd = 0x800C1944; // type:func
+AudioThread_SetFadeOutTimer = 0x800C1D18; // type:func
+AudioThread_SetFadeInTimer = 0x800C1D6C; // type:func
+AudioThread_InitMesgQueuesImpl = 0x800C1DB4; // type:func
+AudioThread_QueueCmd = 0x800C1E4C; // type:func
+AudioThread_QueueCmdF32 = 0x800C1E98; // type:func
+AudioThread_QueueCmdS32 = 0x800C1EBC; // type:func
+AudioThread_QueueCmdS8 = 0x800C1EE0; // type:func
+AudioThread_QueueCmdU16 = 0x800C1F10; // type:func
+AudioThread_ScheduleProcessCmds = 0x800C1F40; // type:func
+AudioThread_ResetCmdQueue = 0x800C1FD0; // type:func
+AudioThread_ProcessCmd = 0x800C1FE8; // type:func
+AudioThread_ProcessCmds = 0x800C212C; // type:func
+func_800E5E20 = 0x800C21E0; // type:func
+AudioThread_GetFontsForSequence = 0x800C2244; // type:func
+Audio_GetSampleBankIdsOfFont = 0x800C2264; // type:func
+func_800E5EDC = 0x800C229C; // type:func
+func_800E5F34 = 0x800C22F4; // type:func
+AudioThread_ResetAudioHeap = 0x800C2348; // type:func
+AudioThread_PreNMIInternal = 0x800C23E4; // type:func
+AudioThread_GetChannelIO = 0x800C2430; // type:func
+AudioThread_GetSeqPlayerIO = 0x800C2484; // type:func
+AudioThread_InitExternalPool = 0x800C24AC; // type:func
+AudioThread_ResetExternalPool = 0x800C24DC; // type:func
+AudioThread_ProcessSeqPlayerCmd = 0x800C24E8; // type:func
+AudioThread_ProcessChannelCmd = 0x800C26C0; // type:func
+AudioThread_Noop1Cmd = 0x800C2870; // type:func
+AudioThread_Noop1CmdZeroed = 0x800C28B8; // type:func
+AudioThread_Noop2Cmd = 0x800C28DC; // type:func
+AudioThread_WaitForAudioTask = 0x800C2910; // type:func
+func_800E6590 = 0x800C2950; // type:func
+func_800E6680 = 0x800C2A40; // type:func
+func_800E66A0 = 0x800C2A60; // type:func
+func_800E66C0 = 0x800C2A80; // type:func
+AudioThread_NextRandom = 0x800C2B80; // type:func
+AudioThread_InitMesgQueues = 0x800C2BD8; // type:func
+Audio_InvalDCache = 0x800C2C00; // type:func
+Audio_WritebackDCache = 0x800C2C40; // type:func
+osAiSetNextBuffer = 0x800C2C80; // type:func
+Audio_InitNoteSub = 0x800C2D00; // type:func
+Audio_NoteSetResamplingRate = 0x800C3178; // type:func
+Audio_NoteInit = 0x800C3228; // type:func
+Audio_NoteDisable = 0x800C32E8; // type:func
+Audio_ProcessNotes = 0x800C334C; // type:func
+Audio_GetInstrumentTunedSample = 0x800C381C; // type:func
+Audio_GetInstrumentInner = 0x800C3858; // type:func
+Audio_GetDrum = 0x800C392C; // type:func
+Audio_GetSoundEffect = 0x800C3A10; // type:func
+Audio_SetFontInstrument = 0x800C3B04; // type:func
+Audio_SeqLayerDecayRelease = 0x800C3C48; // type:func
+Audio_SeqLayerNoteDecay = 0x800C3F20; // type:func
+Audio_SeqLayerNoteRelease = 0x800C3F40; // type:func
+Audio_BuildSyntheticWave = 0x800C3F60; // type:func
+Audio_InitSyntheticWave = 0x800C4064; // type:func
+Audio_InitNoteList = 0x800C40BC; // type:func
+Audio_InitNoteLists = 0x800C40CC; // type:func
+Audio_InitNoteFreeList = 0x800C411C; // type:func
+Audio_NotePoolClear = 0x800C41C0; // type:func
+Audio_NotePoolFill = 0x800C4320; // type:func
+Audio_AudioListPushFront = 0x800C445C; // type:func
+Audio_AudioListRemove = 0x800C449C; // type:func
+Audio_FindNodeWithPrioLessThan = 0x800C44C8; // type:func
+Audio_NoteInitForLayer = 0x800C4548; // type:func
+func_800E82C0 = 0x800C4680; // type:func
+Audio_NoteReleaseAndTakeOwnership = 0x800C46B4; // type:func
+Audio_AllocNoteFromDisabled = 0x800C46E0; // type:func
+Audio_AllocNoteFromDecaying = 0x800C472C; // type:func
+Audio_AllocNoteFromActive = 0x800C477C; // type:func
+Audio_AllocNote = 0x800C4874; // type:func
+Audio_NoteInitAll = 0x800C4B48; // type:func
+Audio_SequenceChannelProcessSound = 0x800C4C80; // type:func
+Audio_SequencePlayerProcessSound = 0x800C4E48; // type:func
+Audio_GetPortamentoFreqScale = 0x800C4F94; // type:func
+Audio_GetVibratoPitchChange = 0x800C4FF0; // type:func
+Audio_GetVibratoFreqScale = 0x800C5028; // type:func
+Audio_NoteVibratoUpdate = 0x800C5264; // type:func
+Audio_NoteVibratoInit = 0x800C52C0; // type:func
+Audio_NotePortamentoInit = 0x800C5378; // type:func
+Audio_AdsrInit = 0x800C53A4; // type:func
+Audio_AdsrUpdate = 0x800C53C4; // type:func
+AudioSeq_GetScriptControlFlowArgument = 0x800C5700; // type:func
+AudioSeq_HandleScriptFlowControl = 0x800C5768; // type:func
+AudioSeq_InitSequenceChannel = 0x800C5944; // type:func
+AudioSeq_SeqChannelSetLayer = 0x800C5A98; // type:func
+AudioSeq_SeqLayerDisable = 0x800C5BBC; // type:func
+AudioSeq_SeqLayerFree = 0x800C5C38; // type:func
+AudioSeq_SequenceChannelDisable = 0x800C5C88; // type:func
+AudioSeq_SequencePlayerSetupChannels = 0x800C5CF4; // type:func
+AudioSeq_SequencePlayerDisableChannels = 0x800C5DEC; // type:func
+AudioSeq_SequenceChannelEnable = 0x800C5E6C; // type:func
+AudioSeq_SequencePlayerDisableAsFinished = 0x800C5F04; // type:func
+AudioSeq_SequencePlayerDisable = 0x800C5F2C; // type:func
+AudioSeq_AudioListPushBack = 0x800C5FE8; // type:func
+AudioSeq_AudioListPopBack = 0x800C6028; // type:func
+AudioSeq_InitLayerFreelist = 0x800C6068; // type:func
+AudioSeq_ScriptReadU8 = 0x800C6108; // type:func
+AudioSeq_ScriptReadS16 = 0x800C611C; // type:func
+AudioSeq_ScriptReadCompressedU16 = 0x800C6154; // type:func
+AudioSeq_SeqLayerProcessScript = 0x800C6194; // type:func
+AudioSeq_SeqLayerProcessScriptStep1 = 0x800C6298; // type:func
+AudioSeq_SeqLayerProcessScriptStep5 = 0x800C6324; // type:func
+AudioSeq_SeqLayerProcessScriptStep2 = 0x800C6480; // type:func
+AudioSeq_SeqLayerProcessScriptStep4 = 0x800C6800; // type:func
+AudioSeq_SeqLayerProcessScriptStep3 = 0x800C6EA0; // type:func
+AudioSeq_SetChannelPriorities = 0x800C72B4; // type:func
+AudioSeq_GetInstrument = 0x800C72E4; // type:func
+AudioSeq_SetInstrument = 0x800C7358; // type:func
+AudioSeq_SequenceChannelSetVolume = 0x800C7404; // type:func
+AudioSeq_SequenceChannelProcessScript = 0x800C7428; // type:func
+AudioSeq_SequencePlayerProcessSequence = 0x800C8118; // type:func
+AudioSeq_ProcessSequences = 0x800C8924; // type:func
+AudioSeq_SkipForwardSequence = 0x800C89D8; // type:func
+AudioSeq_ResetSequencePlayer = 0x800C8A28; // type:func
+AudioSeq_InitSequencePlayerChannels = 0x800C8AF4; // type:func
+AudioSeq_InitSequencePlayer = 0x800C8BCC; // type:func
+AudioSeq_InitSequencePlayers = 0x800C8C9C; // type:func
+AudioOcarina_SetCustomButtonMapping = 0x800C8D20; // type:func
+AudioOcarina_ReadControllerInput = 0x800C8DC0; // type:func
+AudioOcarina_BendPitchTwoSemitones = 0x800C8E20; // type:func
+AudioOcarina_GetPlayingState = 0x800C8EB0; // type:func
+AudioOcarina_MapNoteToButton = 0x800C8EF4; // type:func
+AudioOcarina_MapNotesToScarecrowButtons = 0x800C8F3C; // type:func
+AudioOcarina_Start = 0x800C8FC4; // type:func
+AudioOcarina_CheckIfStartedSong = 0x800C917C; // type:func
+AudioOcarina_CheckSongsWithMusicStaff = 0x800C91B8; // type:func
+AudioOcarina_CheckSongsWithoutMusicStaff = 0x800C95C0; // type:func
+AudioOcarina_PlayControllerInput = 0x800C9818; // type:func
+AudioOcarina_EnableInput = 0x800C9C08; // type:func
+AudioOcarina_SetInstrument = 0x800C9C18; // type:func
+AudioOcarina_SetPlaybackSong = 0x800C9CFC; // type:func
+AudioOcarina_PlaybackSong = 0x800C9DFC; // type:func
+AudioOcarina_SetRecordingSong = 0x800CA128; // type:func
+AudioOcarina_SetRecordingState = 0x800CA530; // type:func
+AudioOcarina_UpdateRecordingStaff = 0x800CA65C; // type:func
+AudioOcarina_UpdatePlayingStaff = 0x800CA694; // type:func
+AudioOcarina_UpdatePlaybackStaff = 0x800CA6D8; // type:func
+AudioOcarina_GetRecordingStaff = 0x800CA788; // type:func
+AudioOcarina_GetPlayingStaff = 0x800CA794; // type:func
+AudioOcarina_GetPlaybackStaff = 0x800CA7B8; // type:func
+AudioOcarina_RecordSong = 0x800CA7C4; // type:func
+AudioOcarina_MemoryGameInit = 0x800CA93C; // type:func
+AudioOcarina_MemoryGameNextNote = 0x800CA9AC; // type:func
+AudioOcarina_Update = 0x800CAAB4; // type:func
+AudioOcarina_PlayLongScarecrowSong = 0x800CABE4; // type:func
+AudioOcarina_ResetStaffs = 0x800CACF0; // type:func
+AudioDebug_Draw = 0x800CAD3C; // type:func
+AudioDebug_ScrPrt = 0x800CAD44; // type:func
+Audio_Update = 0x800CAD50; // type:func
+func_800F3138 = 0x800CADF4; // type:func
+func_800F3140 = 0x800CADFC; // type:func
+func_800F314C = 0x800CAE08; // type:func
+Audio_ComputeSfxVolume = 0x800CAE44; // type:func
+Audio_ComputeSfxReverb = 0x800CAFAC; // type:func
+Audio_ComputeSfxPanSigned = 0x800CB124; // type:func
+Audio_ComputeSfxFreqScale = 0x800CB2A8; // type:func
+func_800F37B8 = 0x800CB474; // type:func
+func_800F3990 = 0x800CB64C; // type:func
+Audio_SetSfxProperties = 0x800CB6C4; // type:func
+Audio_ResetSfxChannelState = 0x800CBB9C; // type:func
+Audio_PlayCutsceneEffectsSequence = 0x800CBC04; // type:func
+func_800F3F84 = 0x800CBC4C; // type:func
+func_800F4010 = 0x800CBCD8; // type:func
+func_800F4138 = 0x800CBDF8; // type:func
+func_800F4190 = 0x800CBE50; // type:func
+Audio_PlaySfxRandom = 0x800CBEA0; // type:func
+func_800F4254 = 0x800CBF14; // type:func
+func_800F436C = 0x800CC02C; // type:func
+func_800F4414 = 0x800CC0D4; // type:func
+func_800F44EC = 0x800CC1AC; // type:func
+func_800F4524 = 0x800CC1E4; // type:func
+func_800F4578 = 0x800CC238; // type:func
+func_800F45D0 = 0x800CC290; // type:func
+Audio_PlaySfxRiver = 0x800CC2F4; // type:func
+Audio_PlaySfxWaterfall = 0x800CC3A0; // type:func
+Audio_StepFreqLerp = 0x800CC444; // type:func
+Audio_SetBgmVolumeOffDuringFanfare = 0x800CC47C; // type:func
+Audio_SetBgmVolumeOnDuringFanfare = 0x800CC4BC; // type:func
+Audio_SetMainBgmVolume = 0x800CC4FC; // type:func
+Audio_SetGanonsTowerBgmVolumeLevel = 0x800CC530; // type:func
+Audio_SetGanonsTowerBgmVolume = 0x800CC5DC; // type:func
+Audio_LowerMainBgmVolume = 0x800CC714; // type:func
+Audio_UpdateRiverSoundVolumes = 0x800CC730; // type:func
+Audio_PlaySfxIncreasinglyTransposed = 0x800CC818; // type:func
+Audio_ResetIncreasingTranspose = 0x800CC8A8; // type:func
+Audio_PlaySfxTransposed = 0x800CC8B4; // type:func
+func_800F4C58 = 0x800CC918; // type:func
+func_800F4E30 = 0x800CCAF0; // type:func
+Audio_ClearSariaBgm = 0x800CCD8C; // type:func
+Audio_ClearSariaBgmAtPos = 0x800CCDAC; // type:func
+Audio_SplitBgmChannels = 0x800CCDCC; // type:func
+Audio_PlaySariaBgm = 0x800CCF60; // type:func
+Audio_ClearSariaBgm2 = 0x800CD1C4; // type:func
+Audio_PlayMorningSceneSequence = 0x800CD1D0; // type:func
+Audio_PlaySceneSequence = 0x800CD210; // type:func
+Audio_UpdateSceneSequenceResumePoint = 0x800CD368; // type:func
+Audio_PlayWindmillBgm = 0x800CD3D8; // type:func
+Audio_SetMainBgmTempoFreqAfterFanfare = 0x800CD40C; // type:func
+Audio_SetFastTempoForTimedMinigame = 0x800CD5D8; // type:func
+Audio_PlaySequenceInCutscene = 0x800CD61C; // type:func
+Audio_StopSequenceInCutscene = 0x800CD6A8; // type:func
+Audio_IsSequencePlaying = 0x800CD718; // type:func
+func_800F5ACC = 0x800CD78C; // type:func
+func_800F5B58 = 0x800CD800; // type:func
+func_800F5BF0 = 0x800CD898; // type:func
+func_800F5C2C = 0x800CD8D4; // type:func
+Audio_PlayFanfare = 0x800CD90C; // type:func
+Audio_UpdateFanfare = 0x800CD9A0; // type:func
+Audio_PlaySequenceWithSeqPlayerIO = 0x800CDAC0; // type:func
+Audio_SetSequenceMode = 0x800CDB38; // type:func
+Audio_SetBgmEnemyVolume = 0x800CDDB4; // type:func
+Audio_UpdateMalonSinging = 0x800CDF08; // type:func
+func_800F64E0 = 0x800CE16C; // type:func
+Audio_ToggleMalonSinging = 0x800CE210; // type:func
+Audio_SetEnvReverb = 0x800CE34C; // type:func
+Audio_SetCodeReverb = 0x800CE368; // type:func
+func_800F6700 = 0x800CE38C; // type:func
+Audio_SetBaseFilter = 0x800CE42C; // type:func
+Audio_SetExtraFilter = 0x800CE4B4; // type:func
+Audio_SetCutsceneFlag = 0x800CE548; // type:func
+Audio_PlaySfxGeneralIfNotInCutscene = 0x800CE560; // type:func
+Audio_PlaySfxIfNotInCutscene = 0x800CE5A8; // type:func
+func_800F6964 = 0x800CE5F0; // type:func
+Audio_StopBgmAndFanfare = 0x800CE73C; // type:func
+func_800F6B3C = 0x800CE7C8; // type:func
+Audio_DisableAllSeq = 0x800CE7F4; // type:func
+func_800F6BB8 = 0x800CE844; // type:func
+func_800F6BDC = 0x800CE868; // type:func
+Audio_PreNMI = 0x800CE8A0; // type:func
+func_800F6C34 = 0x800CE8C0; // type:func
+Audio_SetNatureAmbienceChannelIO = 0x800CE9E4; // type:func
+Audio_StartNatureAmbienceSequence = 0x800CEAF8; // type:func
+Audio_PlayNatureAmbienceSequence = 0x800CEBFC; // type:func
+Audio_Init = 0x800CED40; // type:func
+Audio_InitSound = 0x800CED64; // type:func
+func_800F7170 = 0x800CEDB8; // type:func
+func_800F71BC = 0x800CEE04; // type:func
+func_800F7208 = 0x800CEE50; // type:func
+Audio_SetSfxBanksMute = 0x800CEEB0; // type:func
+Audio_QueueSeqCmdMute = 0x800CEF08; // type:func
+Audio_ClearBGMMute = 0x800CEF6C; // type:func
+Audio_PlaySfxGeneral = 0x800CEFDC; // type:func
+Audio_RemoveMatchingSfxRequests = 0x800CF05C; // type:func
+Audio_ProcessSfxRequest = 0x800CF1FC; // type:func
+Audio_RemoveSfxBankEntry = 0x800CF698; // type:func
+Audio_ChooseActiveSfx = 0x800CF830; // type:func
+Audio_PlayActiveSfx = 0x800CFF70; // type:func
+Audio_StopSfxByBank = 0x800D0290; // type:func
+Audio_RemoveSfxFromBankByPos = 0x800D0374; // type:func
+Audio_StopSfxByPosAndBank = 0x800D0490; // type:func
+Audio_StopSfxByPos = 0x800D04D8; // type:func
+Audio_StopSfxByPosAndId = 0x800D0534; // type:func
+Audio_StopSfxByTokenAndId = 0x800D0690; // type:func
+Audio_StopSfxById = 0x800D07F4; // type:func
+Audio_ProcessSfxRequests = 0x800D092C; // type:func
+Audio_SetUnusedBankLerp = 0x800D0990; // type:func
+Audio_StepUnusedBankLerp = 0x800D0A24; // type:func
+func_800F8F88 = 0x800D0A78; // type:func
+Audio_IsSfxPlaying = 0x800D0AE4; // type:func
+Audio_ResetSfx = 0x800D0B4C; // type:func
+Audio_StartSequence = 0x800D0D10; // type:func
+Audio_StopSequence = 0x800D0E94; // type:func
+Audio_ProcessSeqCmd = 0x800D0F1C; // type:func
+Audio_QueueSeqCmd = 0x800D19E0; // type:func
+Audio_ProcessSeqCmds = 0x800D1A08; // type:func
+Audio_GetActiveSeqId = 0x800D1A88; // type:func
+Audio_IsSeqCmdNotQueued = 0x800D1AF0; // type:func
+Audio_ResetSequenceRequests = 0x800D1B48; // type:func
+Audio_ReplaceSeqCmdSetupOpVolRestore = 0x800D1B60; // type:func
+Audio_SetVolumeScale = 0x800D1C14; // type:func
+Audio_UpdateActiveSequences = 0x800D1DB0; // type:func
+func_800FAD34 = 0x800D2708; // type:func
+Audio_ResetActiveSequences = 0x800D27CC; // type:func
+Audio_ResetActiveSequencesAndVolume = 0x800D2888; // type:func
+func_800FC800 = 0x800D2930; // type:func
+func_800FC83C = 0x800D2960; // type:func
+func_800FC868 = 0x800D298C; // type:func
+func_800FC8D8 = 0x800D29FC; // type:func
+func_800FC948 = 0x800D2A6C; // type:func
+func_800FCA18 = 0x800D2B3C; // type:func
+func_800FCB34 = 0x800D2BD8; // type:func
+SystemHeap_Init = 0x800D2C48; // type:func
+LogUtils_HungupThread = 0x800D2C70; // type:func
+LogUtils_ResetHungup = 0x800D2CA4; // type:func
+GfxPrint_Setup = 0x800D2CD0; // type:func
+GfxPrint_SetColor = 0x800D311C; // type:func
+GfxPrint_SetPosPx = 0x800D3168; // type:func
+GfxPrint_SetPos = 0x800D318C; // type:func
+GfxPrint_SetBasePosPx = 0x800D31B4; // type:func
+GfxPrint_PrintCharImpl = 0x800D31C8; // type:func
+GfxPrint_PrintChar = 0x800D365C; // type:func
+GfxPrint_PrintStringWithSize = 0x800D381C; // type:func
+GfxPrint_PrintString = 0x800D3878; // type:func
+GfxPrint_Callback = 0x800D38D0; // type:func
+GfxPrint_Init = 0x800D38FC; // type:func
+GfxPrint_Destroy = 0x800D3984; // type:func
+GfxPrint_Open = 0x800D398C; // type:func
+GfxPrint_Close = 0x800D39C0; // type:func
+GfxPrint_VPrintf = 0x800D39F0; // type:func
+GfxPrint_Printf = 0x800D3A10; // type:func
+Overlay_Relocate = 0x800D3A40; // type:func
+Overlay_AllocateAndLoad = 0x800D3C80; // type:func
+Overlay_Load = 0x800D3CE0; // type:func
+PadSetup_Init = 0x800D3DB0; // type:func
+PadUtils_Init = 0x800D3EF0; // type:func
+func_800FCB70 = 0x800D3F10; // type:func
+PadUtils_ResetPressRel = 0x800D3F18; // type:func
+PadUtils_CheckCurExact = 0x800D3F24; // type:func
+PadUtils_CheckCur = 0x800D3F3C; // type:func
+PadUtils_CheckPressed = 0x800D3F58; // type:func
+PadUtils_CheckReleased = 0x800D3F74; // type:func
+PadUtils_GetCurButton = 0x800D3F90; // type:func
+PadUtils_GetPressButton = 0x800D3F98; // type:func
+PadUtils_GetCurX = 0x800D3FA0; // type:func
+PadUtils_GetCurY = 0x800D3FA8; // type:func
+PadUtils_SetRelXY = 0x800D3FB0; // type:func
+PadUtils_GetRelXImpl = 0x800D3FBC; // type:func
+PadUtils_GetRelYImpl = 0x800D3FC4; // type:func
+PadUtils_GetRelX = 0x800D3FCC; // type:func
+PadUtils_GetRelY = 0x800D3FEC; // type:func
+PadUtils_UpdateRelXY = 0x800D400C; // type:func
+RcpUtils_PrintRegisterStatus = 0x800D40E0; // type:func
+RcpUtils_Reset = 0x800D4108; // type:func
+ArenaImpl_LockInit = 0x800D4140; // type:func
+ArenaImpl_Lock = 0x800D416C; // type:func
+ArenaImpl_Unlock = 0x800D4194; // type:func
+ArenaImpl_GetLastBlock = 0x800D41BC; // type:func
+__osMallocInit = 0x800D4220; // type:func
+__osMallocAddBlock = 0x800D4270; // type:func
+__osMallocCleanup = 0x800D4310; // type:func
+__osMallocIsInitialized = 0x800D4330; // type:func
+__osMalloc_NoLock = 0x800D4338; // type:func
+__osMalloc = 0x800D4464; // type:func
+__osMallocR = 0x800D44A4; // type:func
+__osFree_NoLock = 0x800D4618; // type:func
+__osFree = 0x800D4758; // type:func
+__osRealloc = 0x800D4790; // type:func
+ArenaImpl_GetSizes = 0x800D4B88; // type:func
+ArenaImpl_FaultClient = 0x800D4C5C; // type:func
+__osCheckArena = 0x800D4E30; // type:func
+PrintUtils_VPrintf = 0x800D4EF0; // type:func
+PrintUtils_Printf = 0x800D4F24; // type:func
+SystemArena_Malloc = 0x800D4F50; // type:func
+SystemArena_MallocR = 0x800D4F78; // type:func
+SystemArena_Realloc = 0x800D4FA0; // type:func
+SystemArena_Free = 0x800D4FD0; // type:func
+SystemArena_Calloc = 0x800D4FF8; // type:func
+SystemArena_GetSizes = 0x800D504C; // type:func
+SystemArena_Check = 0x800D5084; // type:func
+SystemArena_Init = 0x800D50A8; // type:func
+SystemArena_Cleanup = 0x800D50D8; // type:func
+SystemArena_IsInitialized = 0x800D50FC; // type:func
+Math_FTanF = 0x800D5120; // type:func
+Math_FFloorF = 0x800D5154; // type:func
+Math_FCeilF = 0x800D5174; // type:func
+Math_FRoundF = 0x800D5194; // type:func
+Math_FTruncF = 0x800D51B4; // type:func
+Math_FNearbyIntF = 0x800D51D4; // type:func
+Math_FAtanTaylorQF = 0x800D51F4; // type:func
+Math_FAtanTaylorF = 0x800D5240; // type:func
+Math_FAtanContFracF = 0x800D5364; // type:func
+Math_FAtanF = 0x800D54B0; // type:func
+Math_FAtan2F = 0x800D54F0; // type:func
+Math_FAsinF = 0x800D55D8; // type:func
+Math_FAcosF = 0x800D5608; // type:func
+floorf = 0x800D5630; // type:func
+floor = 0x800D563C; // type:func
+lfloorf = 0x800D5648; // type:func
+lfloor = 0x800D5658; // type:func
+ceilf = 0x800D5668; // type:func
+ceil = 0x800D5674; // type:func
+lceilf = 0x800D5680; // type:func
+lceil = 0x800D5690; // type:func
+truncf = 0x800D56A0; // type:func
+trunc = 0x800D56AC; // type:func
+ltruncf = 0x800D56B8; // type:func
+ltrunc = 0x800D56C8; // type:func
+nearbyintf = 0x800D56D8; // type:func
+nearbyint = 0x800D56E4; // type:func
+lnearbyintf = 0x800D56F0; // type:func
+lnearbyint = 0x800D5700; // type:func
+roundf = 0x800D5710; // type:func
+round = 0x800D572C; // type:func
+lroundf = 0x800D574C; // type:func
+lround = 0x800D576C; // type:func
+Rand_Next = 0x800D5790; // type:func
+Rand_Seed = 0x800D57C0; // type:func
+Rand_ZeroOne = 0x800D57CC; // type:func
+Rand_Centered = 0x800D5820; // type:func
+Rand_Seed_Variable = 0x800D5878; // type:func
+Rand_Next_Variable = 0x800D5880; // type:func
+Rand_ZeroOne_Variable = 0x800D58A8; // type:func
+Rand_Centered_Variable = 0x800D58F4; // type:func
+Sleep_Cycles = 0x800D5950; // type:func
+Sleep_Nsec = 0x800D59BC; // type:func
+Sleep_Usec = 0x800D5A0C; // type:func
+Sleep_Msec = 0x800D5A5C; // type:func
+Sleep_Sec = 0x800D5AB0; // type:func
+proutSprintf = 0x800D5AF0; // type:func
+vsprintf = 0x800D5B14; // type:func
+sprintf = 0x800D5B64; // type:func
+JpegUtils_ProcessQuantizationTable = 0x800D5BC0; // type:func
+JpegUtils_ParseHuffmanCodesLengths = 0x800D5C28; // type:func
+JpegUtils_GetHuffmanCodes = 0x800D5CAC; // type:func
+JpegUtils_SetHuffmanTable = 0x800D5D18; // type:func
+JpegUtils_ProcessHuffmanTableImpl = 0x800D5DC0; // type:func
+JpegUtils_ProcessHuffmanTable = 0x800D5E7C; // type:func
+JpegUtils_SetHuffmanTableOld = 0x800D5F54; // type:func
+JpegUtils_ProcessHuffmanTableImplOld = 0x800D5FFC; // type:func
+JpegDecoder_Decode = 0x800D60D0; // type:func
+JpegDecoder_ProcessMcu = 0x800D62F8; // type:func
+JpegDecoder_ParseNextSymbol = 0x800D6494; // type:func
+JpegDecoder_ReadBits = 0x800D65D0; // type:func
+osAiGetLength = 0x800D66C0; // type:func
+osAiSetFrequency = 0x800D66D0; // type:func
+alInit = 0x800D67D0; // type:func
+alClose = 0x800D67FC; // type:func
+alLink = 0x800D682C; // type:func
+alUnlink = 0x800D684C; // type:func
+alSynNew = 0x800D6880; // type:func
+alAudioFrame = 0x800D6BA4; // type:func
+__allocParam = 0x800D6D50; // type:func
+__freeParam = 0x800D6D7C; // type:func
+_collectPVoices = 0x800D6D94; // type:func
+_freePVoice = 0x800D6DE4; // type:func
+_timeToSamplesNoRound = 0x800D6E24; // type:func
+_timeToSamples = 0x800D6E6C; // type:func
+__nextSampleTime = 0x800D6E90; // type:func
+alSynDelete = 0x800D6EF0; // type:func
+alSynAllocFX = 0x800D6F00; // type:func
+osWritebackDCacheAll = 0x800D6FA0; // type:func
+osContStartQuery = 0x800D6FD0; // type:func
+osContGetQuery = 0x800D7054; // type:func
+osContStartReadData = 0x800D7080; // type:func
+osContGetReadData = 0x800D7108; // type:func
+__osPackReadData = 0x800D7244; // type:func
+osContInit = 0x800D7300; // type:func
+__osContGetInitData = 0x800D74A4; // type:func
+__osPackRequestData = 0x800D7610; // type:func
+osContSetCh = 0x800D76D0; // type:func
+sqrtf = 0x800D7730; // type:func
+cosf = 0x800D7740; // type:func
+coss = 0x800D7870; // type:func
+guLookAtF = 0x800D7890; // type:func
+guLookAt = 0x800D7B54; // type:func
+guLookAtHiliteF = 0x800D7BC0; // type:func
+guLookAtHilite = 0x800D83B8; // type:func
+guOrthoF = 0x800D8490; // type:func
+guOrtho = 0x800D85AC; // type:func
+guPerspectiveF = 0x800D8600; // type:func
+guPerspective = 0x800D87A8; // type:func
+guPositionF = 0x800D8800; // type:func
+guPosition = 0x800D8988; // type:func
+sinf = 0x800D89E0; // type:func
+sins = 0x800D8B60; // type:func
+guS2DInitBg = 0x800D8BB0; // type:func
+__ull_rshift = 0x800D8CD0; // type:func
+__ull_rem = 0x800D8D4C; // type:func
+__ull_div = 0x800D8DB0; // type:func
+__ll_lshift = 0x800D8E0C; // type:func
+__ll_rem = 0x800D8E88; // type:func
+__ll_div = 0x800D8EEC; // type:func
+__ll_mul = 0x800D8F48; // type:func
+__ull_divremi = 0x800D8FBC; // type:func
+__ll_mod = 0x800D9060; // type:func
+__ll_rshift = 0x800D91CC; // type:func
+__d_to_ll = 0x800D9250; // type:func
+__f_to_ll = 0x800D9294; // type:func
+__d_to_ull = 0x800D92D8; // type:func
+__f_to_ull = 0x800D931C; // type:func
+__ll_to_d = 0x800D9360; // type:func
+__ll_to_f = 0x800D93A4; // type:func
+__ull_to_d = 0x800D93E8; // type:func
+__ull_to_f = 0x800D94A4; // type:func
+strchr = 0x800D9560; // type:func
+strlen = 0x800D9590; // type:func
+memcpy = 0x800D95B4; // type:func
+_Printf = 0x800D95E0; // type:func
+_Putfld = 0x800D9B1C; // type:func
+osDpGetStatus = 0x800D9FC0; // type:func
+osDpSetStatus = 0x800D9FD0; // type:func
+__osSpGetStatus = 0x800D9FE0; // type:func
+__osSpSetStatus = 0x800D9FF0; // type:func
+_VirtualToPhysicalTask = 0x800DA000; // type:func
+osSpTaskLoad = 0x800DA0DC; // type:func
+osSpTaskStartGo = 0x800DA1E0; // type:func
+osSpTaskYield = 0x800DA210; // type:func
+osSpTaskYielded = 0x800DA230; // type:func
+__osSiRawStartDma = 0x800DA280; // type:func
+__osSiCreateAccessQueue = 0x800DA360; // type:func
+__osSiGetAccess = 0x800DA3B4; // type:func
+__osSiRelAccess = 0x800DA3F0; // type:func
+osGetThreadId = 0x800DA420; // type:func
+__osGetActiveQueue = 0x800DA470; // type:func
+osSetTimer = 0x800DA4A0; // type:func
+osStopTimer = 0x800DA660; // type:func
+osViGetCurrentFramebuffer = 0x800DA780; // type:func
+osViSetEvent = 0x800DA7C0; // type:func
+guMtxIdent = 0x800DA820; // type:func
+guMtxIdentF = 0x800DA880; // type:func
+guMtxF2L = 0x800DA8E0; // type:func
+guScale = 0x800DA960; // type:func
+guTranslate = 0x800DAA00; // type:func
+guRotateF = 0x800DAAD0; // type:func
+guRotate = 0x800DAC1C; // type:func
+__osGetCurrFaultedThread = 0x800DAC60; // type:func
+skGetId = 0x800DAC90; // type:func
+skLaunchSetup = 0x800DACAC; // type:func
+skLaunch = 0x800DACC8; // type:func
+skRecryptListValid = 0x800DACE4; // type:func
+skRecryptBegin = 0x800DAD00; // type:func
+skRecryptData = 0x800DAD1C; // type:func
+skRecryptComputeState = 0x800DAD38; // type:func
+skRecryptEnd = 0x800DAD54; // type:func
+skSignHash = 0x800DAD70; // type:func
+skVerifyHash = 0x800DAD8C; // type:func
+skGetConsumption = 0x800DADA8; // type:func
+skAdvanceTicketWindow = 0x800DADC4; // type:func
+skSetLimit = 0x800DADE0; // type:func
+skExit = 0x800DADFC; // type:func
+skKeepAlive = 0x800DAE18; // type:func
+skGetRandomKeyData = 0x800DAE34; // type:func
+skDumpVirage = 0x800DAE50; // type:func
+skTest2 = 0x800DAE6C; // type:func
+skTest3 = 0x800DAE88; // type:func
+skResetWindow = 0x800DAEA4; // type:func
+skValidateRls = 0x800DAEC0; // type:func
+strcmp = 0x800DAEE0; // type:func
+memset = 0x800DAF30; // type:func
+strncmp = 0x800DAF54; // type:func
+__osMotorAccess = 0x800DAFD0; // type:func
+osMotorInit = 0x800DAFD8; // type:func
+osAfterPreNMI = 0x800DAFE0; // type:func
+_init_lpfilter = 0x800DB020; // type:func
+alFxNew = 0x800DB0D0; // type:func
+alEnvmixerNew = 0x800DB4E4; // type:func
+alLoadNew = 0x800DB594; // type:func
+alResampleNew = 0x800DB644; // type:func
+alAuxBusNew = 0x800DB6D0; // type:func
+alMainBusNew = 0x800DB72C; // type:func
+alSaveNew = 0x800DB788; // type:func
+alAdpcmPull = 0x800DB7D0; // type:func
+alRaw16Pull = 0x800DBBEC; // type:func
+alLoadParam = 0x800DBF70; // type:func
+_decodeChunk = 0x800DC0FC; // type:func
+alAuxBusPull = 0x800DC260; // type:func
+alAuxBusParam = 0x800DC33C; // type:func
+alEnvmixerPull = 0x800DC370; // type:func
+alEnvmixerParam = 0x800DC83C; // type:func
+_pullSubFrame = 0x800DC904; // type:func
+_frexpf = 0x800DCBC8; // type:func
+_ldexpf = 0x800DCC7C; // type:func
+_getRate = 0x800DCC9C; // type:func
+_getVol = 0x800DCE5C; // type:func
+alFilterNew = 0x800DCEE0; // type:func
+alMainBusPull = 0x800DCF00; // type:func
+alMainBusParam = 0x800DD044; // type:func
+alResamplePull = 0x800DD070; // type:func
+alResampleParam = 0x800DD248; // type:func
+alFxPull = 0x800DD310; // type:func
+alFxParam = 0x800DD660; // type:func
+alFxParamHdl = 0x800DD674; // type:func
+_loadOutputBuffer = 0x800DD850; // type:func
+_loadBuffer = 0x800DDA54; // type:func
+_saveBuffer = 0x800DDBC0; // type:func
+_filterBuffer = 0x800DDD30; // type:func
+_doModFunc = 0x800DDDE8; // type:func
+alSavePull = 0x800DDE80; // type:func
+alSaveParam = 0x800DDF2C; // type:func
+alHeapDBAlloc = 0x800DDF60; // type:func
+alCopy = 0x800DDFB0; // type:func
+_Litob = 0x800DDFE0; // type:func
+_Ldtob = 0x800DE210; // type:func
+_Ldunscale = 0x800DE63C; // type:func
+_Genld = 0x800DE6D8; // type:func
+__osSpDeviceBusy = 0x800DEC10; // type:func
+__osSpSetPc = 0x800DEC40; // type:func
+__osSpRawStartDma = 0x800DEC70; // type:func
+guNormalize = 0x800DED00; // type:func
+ldiv = 0x800DED60; // type:func
+lldiv = 0x800DEDDC; // type:func
+fmodf = 0x800DEF20; // type:func
+memmove = 0x800DEF60; // type:func
+absf = 0x800DEFF0; // type:func
+sqrt = 0x800DF000; // type:func
+Message_ResetOcarinaNoteState = 0x800DF010; // type:func
+Message_UpdateOcarinaMemoryGame = 0x800DF0F4; // type:func
+Message_ShouldAdvance = 0x800DF1E4; // type:func
+Message_ShouldAdvanceSilent = 0x800DF29C; // type:func
+Message_CloseTextbox = 0x800DF2DC; // type:func
+Message_HandleChoiceSelection = 0x800DF35C; // type:func
+Message_DrawTextChar = 0x800DF528; // type:func
+Message_GrowTextbox = 0x800DF85C; // type:func
+Message_FindMessageJPN = 0x800DFA58; // type:func
+Message_FindMessageNES = 0x800DFADC; // type:func
+Message_FindCreditsMessage = 0x800DFB60; // type:func
+Message_SetTextColor = 0x800DFBCC; // type:func
+Message_DrawTextboxIcon = 0x800DFEAC; // type:func
+Message_DrawItemIcon = 0x800E06E0; // type:func
+Message_HandleOcarina = 0x800E0A4C; // type:func
+Message_DrawTextWide = 0x800E0BE8; // type:func
+Message_DrawText = 0x800E208C; // type:func
+Message_LoadItemIcon = 0x800E33C4; // type:func
+Message_Decode = 0x800E3520; // type:func
+Message_OpenText = 0x800E5D2C; // type:func
+Message_StartTextbox = 0x800E61B0; // type:func
+Message_ContinueTextbox = 0x800E6240; // type:func
+Message_StartOcarinaImpl = 0x800E6364; // type:func
+Message_StartOcarina = 0x800E67C0; // type:func
+Message_StartOcarinaSunsSongDisabled = 0x800E67E8; // type:func
+Message_GetState = 0x800E6814; // type:func
+Message_DrawTextBox = 0x800E691C; // type:func
+Message_SetView = 0x800E6DBC; // type:func
+Message_DrawMain = 0x800E6E04; // type:func
+Message_Draw = 0x800E9F58; // type:func
+Message_Update = 0x800E9FF8; // type:func
+Message_SetTables = 0x800EAAF8; // type:func
+GameOver_Init = 0x800EAB30; // type:func
+GameOver_FadeInLights = 0x800EAB44; // type:func
+GameOver_Update = 0x800EABAC; // type:func
+Interface_Destroy = 0x800EB070; // type:func
+Interface_Init = 0x800EB08C; // type:func
+Message_Init = 0x800EB474; // type:func
+Regs_InitDataImpl = 0x800EB558; // type:func
+Regs_InitData = 0x800EBF48; // type:func
+ConsoleLogo_Calc = 0x80800000; // type:func
+ConsoleLogo_SetupView = 0x80800098; // type:func
+ConsoleLogo_Draw = 0x8080011C; // type:func
+ConsoleLogo_Main = 0x808006C0; // type:func
+ConsoleLogo_Destroy = 0x80800780; // type:func
+ConsoleLogo_Init = 0x8080079C; // type:func
+MapSelect_LoadTitle = 0x80800930; // type:func
+MapSelect_LoadGame = 0x80800950; // type:func
+MapSelect_UpdateMenu = 0x80800A40; // type:func
+MapSelect_PrintMenu = 0x808013A0; // type:func
+MapSelect_PrintLoadingMessage = 0x8080157C; // type:func
+MapSelect_PrintAgeSetting = 0x80801608; // type:func
+MapSelect_PrintCutsceneSetting = 0x8080167C; // type:func
+MapSelect_DrawMenu = 0x80801838; // type:func
+MapSelect_DrawLoadingScreen = 0x8080194C; // type:func
+MapSelect_Draw = 0x80801A34; // type:func
+MapSelect_Main = 0x80801AE8; // type:func
+MapSelect_Destroy = 0x80801B14; // type:func
+MapSelect_Init = 0x80801B20; // type:func
+TitleSetup_SetupTitleScreen = 0x808035B0; // type:func
+func_80803C5C = 0x8080361C; // type:func
+TitleSetup_Main = 0x80803624; // type:func
+TitleSetup_Destroy = 0x80803668; // type:func
+TitleSetup_Init = 0x80803670; // type:func
+FileSelect_SetupCopySource = 0x80803700; // type:func
+FileSelect_SelectCopySource = 0x8080392C; // type:func
+FileSelect_SetupCopyDest1 = 0x80803CD0; // type:func
+FileSelect_SetupCopyDest2 = 0x80803EE4; // type:func
+FileSelect_SelectCopyDest = 0x80803FD4; // type:func
+FileSelect_ExitToCopySource1 = 0x80804400; // type:func
+FileSelect_ExitToCopySource2 = 0x808044FC; // type:func
+FileSelect_SetupCopyConfirm1 = 0x80804644; // type:func
+FileSelect_SetupCopyConfirm2 = 0x80804900; // type:func
+FileSelect_CopyConfirm = 0x80804968; // type:func
+FileSelect_ReturnToCopyDest = 0x80804B78; // type:func
+FileSelect_CopyAnim1 = 0x80804E5C; // type:func
+FileSelect_CopyAnim2 = 0x80804F1C; // type:func
+FileSelect_CopyAnim3 = 0x808050D8; // type:func
+FileSelect_CopyAnim4 = 0x80805228; // type:func
+FileSelect_CopyAnim5 = 0x80805370; // type:func
+FileSelect_ExitCopyToMain = 0x8080579C; // type:func
+FileSelect_SetupEraseSelect = 0x80805910; // type:func
+FileSelect_EraseSelect = 0x80805B4C; // type:func
+FileSelect_SetupEraseConfirm1 = 0x80805EF0; // type:func
+FileSelect_SetupEraseConfirm2 = 0x808062D8; // type:func
+FileSelect_EraseConfirm = 0x808063F8; // type:func
+FileSelect_ExitToEraseSelect1 = 0x808065F8; // type:func
+FileSelect_ExitToEraseSelect2 = 0x808066E0; // type:func
+FileSelect_EraseAnim1 = 0x808069BC; // type:func
+FileSelect_EraseAnim2 = 0x80806C2C; // type:func
+FileSelect_EraseAnim3 = 0x80806CE4; // type:func
+FileSelect_ExitEraseToMain = 0x80807004; // type:func
+FileSelect_DrawCharacter = 0x808071E0; // type:func
+FileSelect_DrawCharacterTransition = 0x80807318; // type:func
+FileSelect_SetKeyboardVtx = 0x808074F8; // type:func
+FileSelect_SetNameEntryVtx = 0x808077BC; // type:func
+FileSelect_DrawKeyboard = 0x808084A0; // type:func
+FileSelect_ApplyDiacriticToCharacter = 0x80808D64; // type:func
+FileSelect_ApplyDiacriticToFilename = 0x80808F6C; // type:func
+FileSelect_DrawNameEntry = 0x80808FEC; // type:func
+FileSelect_StartNameEntry = 0x8080A450; // type:func
+FileSelect_UpdateKeyboardCursor = 0x8080A504; // type:func
+FileSelect_StartOptions = 0x8080AEE4; // type:func
+FileSelect_UpdateOptionsMenu = 0x8080AF74; // type:func
+FileSelect_DrawOptionsImpl = 0x8080B1F0; // type:func
+FileSelect_DrawOptions = 0x8080C608; // type:func
+FileSelect_SetView = 0x8080C630; // type:func
+FileSelect_QuadTextureIA8 = 0x8080C6B4; // type:func
+FileSelect_InitModeUpdate = 0x8080C894; // type:func
+FileSelect_InitModeDraw = 0x8080C8EC; // type:func
+FileSelect_FadeInMenuElements = 0x8080C8F8; // type:func
+FileSelect_SplitNumber = 0x8080CA60; // type:func
+FileSelect_StartFadeIn = 0x8080CAD4; // type:func
+FileSelect_FinishFadeIn = 0x8080CB5C; // type:func
+FileSelect_UpdateMainMenu = 0x8080CBF4; // type:func
+FileSelect_UnusedCM31 = 0x8080D498; // type:func
+FileSelect_UnusedCMDelay = 0x8080D4A4; // type:func
+FileSelect_RotateToNameEntry = 0x8080D4F8; // type:func
+FileSelect_RotateToOptions = 0x8080D56C; // type:func
+FileSelect_RotateToMain = 0x8080D5E0; // type:func
+FileSelect_PulsateCursor = 0x8080D658; // type:func
+FileSelect_ConfigModeUpdate = 0x8080D754; // type:func
+FileSelect_SetWindowVtx = 0x8080D790; // type:func
+FileSelect_SetWindowContentVtx = 0x8080DA64; // type:func
+FileSelect_DrawFileInfo = 0x8080ED28; // type:func
+FileSelect_DrawWindowContents = 0x8080F4A4; // type:func
+FileSelect_ConfigModeDraw = 0x80810958; // type:func
+FileSelect_FadeMainToSelect = 0x80811238; // type:func
+FileSelect_MoveSelectedFileToTop = 0x808113A4; // type:func
+FileSelect_FadeInFileInfo = 0x808114A8; // type:func
+FileSelect_ConfirmFile = 0x8081158C; // type:func
+FileSelect_FadeOutFileInfo = 0x80811764; // type:func
+FileSelect_MoveSelectedFileToSlot = 0x80811854; // type:func
+FileSelect_FadeOut = 0x80811AAC; // type:func
+FileSelect_LoadGame = 0x80811B08; // type:func
+FileSelect_SelectModeUpdate = 0x80811CD0; // type:func
+FileSelect_SelectModeDraw = 0x80811D0C; // type:func
+FileSelect_Main = 0x808120C4; // type:func
+FileSelect_InitContext = 0x8081268C; // type:func
+FileSelect_Destroy = 0x80812CB8; // type:func
+FileSelect_Init = 0x80812CC4; // type:func
+KaleidoScope_DrawQuestStatus = 0x808141F0; // type:func
+KaleidoScope_UpdateQuestStatusPoint = 0x808165DC; // type:func
+KaleidoScope_DrawDebugEditorText = 0x808165F0; // type:func
+KaleidoScope_DrawDigit = 0x808168E4; // type:func
+KaleidoScope_DrawDebugEditor = 0x80816A58; // type:func
+KaleidoScope_DrawEquipmentImage = 0x808185A0; // type:func
+KaleidoScope_DrawPlayerWork = 0x808189A0; // type:func
+KaleidoScope_DrawEquipment = 0x80818B44; // type:func
+KaleidoScope_DrawAmmoCount = 0x8081A020; // type:func
+KaleidoScope_SetCursorPos = 0x8081A55C; // type:func
+KaleidoScope_SetItemCursorPos = 0x8081A58C; // type:func
+KaleidoScope_DrawItemSelect = 0x8081A5B8; // type:func
+KaleidoScope_UpdateItemEquip = 0x8081B414; // type:func
+KaleidoScope_DrawDungeonMap = 0x8081C010; // type:func
+KaleidoScope_DrawWorldMap = 0x8081D89C; // type:func
+KaleidoScope_UpdatePrompt = 0x8081F5E0; // type:func
+KaleidoScope_SetupPlayerPreRender = 0x8081F7E0; // type:func
+KaleidoScope_ProcessPlayerPreRender = 0x8081F8CC; // type:func
+KaleidoScope_QuadTextureIA4 = 0x8081F908; // type:func
+KaleidoScope_QuadTextureIA8 = 0x8081FAE4; // type:func
+KaleidoScope_OverridePalIndexCI4 = 0x8081FCC4; // type:func
+KaleidoScope_MoveCursorToSpecialPos = 0x8081FD34; // type:func
+KaleidoScope_DrawQuadTextureRGBA32 = 0x8081FD88; // type:func
+KaleidoScope_SetDefaultCursor = 0x8081FF88; // type:func
+KaleidoScope_SetupPageSwitch = 0x80820038; // type:func
+KaleidoScope_HandlePageToggles = 0x808201B4; // type:func
+KaleidoScope_DrawCursor = 0x808202AC; // type:func
+KaleidoScope_DrawPageSections = 0x8082064C; // type:func
+KaleidoScope_DrawPages = 0x80820900; // type:func
+KaleidoScope_DrawInfoPanel = 0x80821FB8; // type:func
+KaleidoScope_UpdateNamePanel = 0x80823404; // type:func
+KaleidoScope_UpdatePageSwitch = 0x8082359C; // type:func
+KaleidoScope_SetView = 0x8082376C; // type:func
+KaleidoScope_SetPageVertices = 0x808237D8; // type:func
+KaleidoScope_SetVertices = 0x8082459C; // type:func
+KaleidoScope_DrawGameOver = 0x80825730; // type:func
+KaleidoScope_Draw = 0x80825E18; // type:func
+KaleidoScope_GrayOutTextureRGBA32 = 0x80826064; // type:func
+KaleidoScope_UpdateOpening = 0x80826114; // type:func
+KaleidoScope_UpdateCursorVtx = 0x808262F0; // type:func
+KaleidoScope_LoadDungeonMap = 0x80826568; // type:func
+KaleidoScope_UpdateDungeonMap = 0x808265F8; // type:func
+KaleidoScope_Update = 0x808266DC; // type:func
+PauseMapMark_Init = 0x80828BD0; // type:func
+PauseMapMark_Clear = 0x80828C04; // type:func
+PauseMapMark_DrawForDungeon = 0x80828C18; // type:func
+PauseMapMark_Draw = 0x8082922C; // type:func
+Player_ZeroSpeedXZ = 0x80830290; // type:func
+func_80832224 = 0x808302A8; // type:func
+Player_IsTalking = 0x808302D0; // type:func
+Player_AnimPlayOnce = 0x808302EC; // type:func
+Player_AnimPlayLoop = 0x80830310; // type:func
+Player_AnimPlayLoopAdjusted = 0x80830334; // type:func
+Player_AnimPlayOnceAdjusted = 0x80830364; // type:func
+Player_ApplyYawFromAnim = 0x80830394; // type:func
+func_80832318 = 0x808303B4; // type:func
+func_80832340 = 0x808303E0; // type:func
+Player_DetachHeldActor = 0x80830450; // type:func
+func_80832440 = 0x808304DC; // type:func
+Player_PutAwayHeldItem = 0x808305C4; // type:func
+func_80832564 = 0x80830600; // type:func
+func_80832594 = 0x80830638; // type:func
+func_80832630 = 0x808306D8; // type:func
+Player_RequestRumble = 0x808306F4; // type:func
+Player_PlayVoiceSfx = 0x80830740; // type:func
+func_808326F0 = 0x808307A0; // type:func
+Player_ApplyFloorSfxOffset = 0x8083080C; // type:func
+Player_PlayFloorSfx = 0x80830828; // type:func
+Player_ApplyFloorAndAgeSfxOffsets = 0x80830860; // type:func
+Player_PlayFloorSfxByAge = 0x80830888; // type:func
+Player_PlaySteppingSfx = 0x808308C0; // type:func
+Player_PlayJumpingSfx = 0x8083091C; // type:func
+Player_PlayLandingSfx = 0x80830968; // type:func
+func_808328EC = 0x808309B4; // type:func
+Player_ProcessAnimSfxList = 0x808309E8; // type:func
+Player_AnimChangeOnceMorph = 0x80830BD0; // type:func
+Player_AnimChangeOnceMorphAdjusted = 0x80830C3C; // type:func
+Player_AnimChangeLoopMorph = 0x80830CAC; // type:func
+Player_AnimChangeFreeze = 0x80830CF4; // type:func
+Player_AnimChangeLoopSlowMorph = 0x80830D38; // type:func
+func_80832CB0 = 0x80830D80; // type:func
+Player_ResetAnimMovement = 0x80830DD4; // type:func
+Player_ResetAnimMovementScaledByAge = 0x80830DFC; // type:func
+Player_ZeroRootLimbYaw = 0x80830E88; // type:func
+Player_FinishAnimMovement = 0x80830E98; // type:func
+Player_ApplyAnimMovementScaledByAge = 0x80830F24; // type:func
+Player_StartAnimMovement = 0x80831034; // type:func
+Player_AnimReplacePlayOnceSetSpeed = 0x808310DC; // type:func
+Player_AnimReplacePlayOnce = 0x80831124; // type:func
+Player_AnimReplacePlayOnceAdjusted = 0x8083114C; // type:func
+Player_AnimReplaceNormalPlayOnceAdjusted = 0x80831174; // type:func
+Player_AnimReplacePlayLoopSetSpeed = 0x80831194; // type:func
+Player_AnimReplacePlayLoop = 0x808311DC; // type:func
+Player_AnimReplacePlayLoopAdjusted = 0x80831204; // type:func
+Player_AnimReplaceNormalPlayLoopAdjusted = 0x8083122C; // type:func
+Player_ProcessControlStick = 0x8083124C; // type:func
+func_8083328C = 0x80831378; // type:func
+func_808332B8 = 0x808313A8; // type:func
+func_808332E4 = 0x808313D4; // type:func
+func_808332F4 = 0x808313E8; // type:func
+Player_GetIdleAnim = 0x8083142C; // type:func
+Player_CheckForIdleAnim = 0x80831448; // type:func
+Player_ProcessFidgetAnimSfxList = 0x808314FC; // type:func
+func_80833438 = 0x80831538; // type:func
+func_808334B4 = 0x808315B4; // type:func
+func_808334E4 = 0x808315E8; // type:func
+func_80833528 = 0x80831630; // type:func
+func_8083356C = 0x80831678; // type:func
+func_808335B0 = 0x808316C0; // type:func
+func_808335F4 = 0x80831708; // type:func
+Player_SetUpperActionFunc = 0x80831750; // type:func
+Player_InitItemActionWithAnim = 0x8083177C; // type:func
+Player_ItemToItemAction = 0x8083183C; // type:func
+Player_InitDefaultIA = 0x80831888; // type:func
+Player_InitDekuStickIA = 0x80831898; // type:func
+Player_InitHammerIA = 0x808318B4; // type:func
+Player_InitBowOrSlingshotIA = 0x808318C4; // type:func
+Player_InitExplosiveIA = 0x808318FC; // type:func
+Player_InitHookshotIA = 0x80831A3C; // type:func
+Player_InitBoomerangIA = 0x80831AAC; // type:func
+Player_InitItemAction = 0x80831AC8; // type:func
+func_80833A20 = 0x80831B54; // type:func
+Player_FriendlyLockOnOrParallel = 0x80831C5C; // type:func
+Player_UpdateHostileLockOn = 0x80831C84; // type:func
+Player_IsZTargeting = 0x80831CFC; // type:func
+Player_IsZTargetingWithHostileUpdate = 0x80831D38; // type:func
+func_80833C3C = 0x80831D74; // type:func
+Player_ItemIsInUse = 0x80831D8C; // type:func
+Player_ItemIsItemAction = 0x80831DD8; // type:func
+Player_GetItemOnButton = 0x80831E20; // type:func
+Player_ProcessItemButtons = 0x80831F3C; // type:func
+Player_StartChangingHeldItem = 0x80832224; // type:func
+Player_UpdateItems = 0x808323DC; // type:func
+func_80834380 = 0x808324C4; // type:func
+func_8083442C = 0x80832570; // type:func
+Player_FinishItemChange = 0x808326D8; // type:func
+func_80834644 = 0x80832788; // type:func
+func_808346C4 = 0x80832808; // type:func
+func_80834758 = 0x8083289C; // type:func
+func_8083485C = 0x808329A4; // type:func
+func_80834894 = 0x808329DC; // type:func
+Player_WaitToFinishItemChange = 0x80832A38; // type:func
+func_8083499C = 0x80832AE8; // type:func
+Player_UpperAction_Sword = 0x80832B28; // type:func
+Player_UpperAction_ChangeHeldItem = 0x80832B78; // type:func
+func_80834B5C = 0x80832CA8; // type:func
+func_80834BD4 = 0x80832D24; // type:func
+func_80834C74 = 0x80832DC8; // type:func
+func_80834D2C = 0x80832E80; // type:func
+func_80834E44 = 0x80832F98; // type:func
+func_80834E7C = 0x80832FD0; // type:func
+func_80834EB8 = 0x8083300C; // type:func
+func_80834F2C = 0x80833080; // type:func
+func_80834FBC = 0x80833110; // type:func
+func_8083501C = 0x80833170; // type:func
+func_808350A4 = 0x808331F8; // type:func
+func_808351D4 = 0x8083332C; // type:func
+func_808353D8 = 0x80833538; // type:func
+func_80835588 = 0x808336E8; // type:func
+Player_SetParallel = 0x80833744; // type:func
+func_80835644 = 0x808337B0; // type:func
+func_80835688 = 0x808337F8; // type:func
+Player_UpperAction_CarryActor = 0x80833858; // type:func
+func_808357E8 = 0x80833958; // type:func
+func_80835800 = 0x80833974; // type:func
+func_80835884 = 0x808339F8; // type:func
+func_808358F0 = 0x80833A64; // type:func
+func_808359FC = 0x80833B78; // type:func
+func_80835B60 = 0x80833CE0; // type:func
+func_80835C08 = 0x80833D88; // type:func
+Player_SetupAction = 0x80833DE0; // type:func
+Player_SetupActionPreserveAnimMovement = 0x80833F3C; // type:func
+Player_SetupActionPreserveItemAction = 0x80833F70; // type:func
+func_80835E44 = 0x80833FD4; // type:func
+func_80835EA4 = 0x80834038; // type:func
+Player_DestroyHookshot = 0x80834094; // type:func
+Player_UseItem = 0x808340E4; // type:func
+func_80836448 = 0x808345EC; // type:func
+Player_CanUpdateItems = 0x8083476C; // type:func
+Player_UpdateUpperBody = 0x80834818; // type:func
+Player_SetupWaitForPutAway = 0x80834A40; // type:func
+Player_UpdateShapeYaw = 0x80834A98; // type:func
+Player_ScaledStepBinangClamped = 0x80834B74; // type:func
+func_80836AB8 = 0x80834C60; // type:func
+Player_UpdateZTargeting = 0x80834D94; // type:func
+Player_CalcSpeedAndYawFromControlStick = 0x80835158; // type:func
+Player_DecelerateToZero = 0x808353C8; // type:func
+Player_GetMovementSpeedAndYaw = 0x8083541C; // type:func
+Player_TryActionHandlerList = 0x808354FC; // type:func
+Player_TryActionInterrupt = 0x80835658; // type:func
+func_80837530 = 0x808356F0; // type:func
+Player_CanSpinAttack = 0x808357A0; // type:func
+func_80837704 = 0x808358D0; // type:func
+func_808377DC = 0x808359A8; // type:func
+func_80837818 = 0x808359EC; // type:func
+func_80837918 = 0x80835AEC; // type:func
+func_80837948 = 0x80835B1C; // type:func
+Player_SetIntangibility = 0x80835CBC; // type:func
+Player_SetInvulnerability = 0x80835CD8; // type:func
+func_80837B18 = 0x80835CF8; // type:func
+func_80837B60 = 0x80835D40; // type:func
+func_80837B9C = 0x80835D7C; // type:func
+func_80837C0C = 0x80835DEC; // type:func
+func_80838144 = 0x80836324; // type:func
+func_8083816C = 0x8083634C; // type:func
+func_8083819C = 0x8083637C; // type:func
+func_8083821C = 0x80836400; // type:func
+func_80838280 = 0x80836464; // type:func
+func_808382BC = 0x808364A0; // type:func
+func_808382DC = 0x808364C0; // type:func
+func_80838940 = 0x80836B24; // type:func
+func_808389E8 = 0x80836BC8; // type:func
+Player_ActionHandler_12 = 0x80836BF4; // type:func
+func_80838E70 = 0x80837050; // type:func
+func_80838F18 = 0x80837100; // type:func
+func_80838F5C = 0x8083714C; // type:func
+func_80838FB8 = 0x808371B0; // type:func
+Player_HandleExitsAndVoids = 0x8083722C; // type:func
+Player_GetRelativePosition = 0x808377D0; // type:func
+Player_SpawnFairy = 0x80837874; // type:func
+func_808396F4 = 0x808378E8; // type:func
+func_8083973C = 0x80837934; // type:func
+Player_PosVsWallLineTest = 0x80837960; // type:func
+Player_ActionHandler_1 = 0x808379FC; // type:func
+func_80839E88 = 0x80838094; // type:func
+func_80839F30 = 0x80838138; // type:func
+func_80839F90 = 0x80838194; // type:func
+func_80839FFC = 0x80838200; // type:func
+func_8083A060 = 0x80838268; // type:func
+func_8083A098 = 0x808382A4; // type:func
+func_8083A0D4 = 0x808382E4; // type:func
+func_8083A0F4 = 0x80838304; // type:func
+Player_SetupTalk = 0x80838508; // type:func
+func_8083A360 = 0x80838578; // type:func
+func_8083A388 = 0x808385A0; // type:func
+func_8083A3B0 = 0x808385C8; // type:func
+func_8083A40C = 0x80838620; // type:func
+func_8083A434 = 0x80838648; // type:func
+func_8083A4A8 = 0x808386BC; // type:func
+func_8083A5C4 = 0x808387D8; // type:func
+func_8083A6AC = 0x808388CC; // type:func
+func_8083A9B8 = 0x80838BD4; // type:func
+func_8083AA10 = 0x80838C2C; // type:func
+func_8083AD4C = 0x80838F68; // type:func
+Player_StartCsAction = 0x80838FF0; // type:func
+func_8083AE40 = 0x8083905C; // type:func
+func_8083AF44 = 0x808390E4; // type:func
+func_8083B010 = 0x808391B8; // type:func
+Player_ActionHandler_13 = 0x808391EC; // type:func
+Player_ActionHandler_Talk = 0x808397F0; // type:func
+func_8083B8F4 = 0x80839AA0; // type:func
+Player_ActionHandler_0 = 0x80839B48; // type:func
+func_8083BA90 = 0x80839C40; // type:func
+func_8083BB20 = 0x80839CD8; // type:func
+func_8083BBA0 = 0x80839D58; // type:func
+Player_SetupRoll = 0x80839DC0; // type:func
+Player_TryRoll = 0x80839E38; // type:func
+func_8083BCD0 = 0x80839E8C; // type:func
+Player_ActionHandler_10 = 0x80839F78; // type:func
+func_8083BF50 = 0x8083A110; // type:func
+func_8083C0B8 = 0x8083A274; // type:func
+func_8083C0E8 = 0x8083A2AC; // type:func
+func_8083C148 = 0x8083A308; // type:func
+Player_ActionHandler_Roll = 0x8083A3A4; // type:func
+Player_ActionHandler_11 = 0x8083A480; // type:func
+func_8083C484 = 0x8083A658; // type:func
+func_8083C50C = 0x8083A6E0; // type:func
+Player_ActionHandler_8 = 0x8083A718; // type:func
+func_8083C61C = 0x8083A7F4; // type:func
+func_8083C6B8 = 0x8083A890; // type:func
+func_8083C858 = 0x8083AA34; // type:func
+func_8083C8DC = 0x8083AAB8; // type:func
+Player_SetStartingMovement = 0x8083AAEC; // type:func
+Player_StartMode_Idle = 0x8083AC00; // type:func
+Player_StartMode_MoveForwardSlow = 0x8083AC38; // type:func
+Player_StartMode_MoveForward = 0x8083AC80; // type:func
+func_8083CB2C = 0x8083AD14; // type:func
+func_8083CB94 = 0x8083AD78; // type:func
+func_8083CBF0 = 0x8083ADD4; // type:func
+func_8083CC9C = 0x8083AE7C; // type:func
+func_8083CD00 = 0x8083AEDC; // type:func
+Player_SetupTurnInPlace = 0x8083AF30; // type:func
+func_8083CE0C = 0x8083AFEC; // type:func
+func_8083CEAC = 0x8083B088; // type:func
+func_8083CF10 = 0x8083B0E8; // type:func
+func_8083CF5C = 0x8083B130; // type:func
+func_8083CFA8 = 0x8083B178; // type:func
+func_8083D0A8 = 0x8083B280; // type:func
+func_8083D12C = 0x8083B308; // type:func
+func_8083D330 = 0x8083B510; // type:func
+func_8083D36C = 0x8083B54C; // type:func
+func_8083D53C = 0x8083B720; // type:func
+func_8083D6EC = 0x8083B8D0; // type:func
+func_8083DB98 = 0x8083BD80; // type:func
+func_8083DC54 = 0x8083BE3C; // type:func
+func_8083DDC8 = 0x8083BFB0; // type:func
+func_8083DF68 = 0x8083C158; // type:func
+func_8083DFE0 = 0x8083C1D4; // type:func
+Player_ActionHandler_3 = 0x8083C2F4; // type:func
+Player_GetSlopeDirection = 0x8083C494; // type:func
+Player_HandleSlopes = 0x8083C510; // type:func
+func_8083E4C4 = 0x8083C6C4; // type:func
+Player_ActionHandler_2 = 0x8083C7AC; // type:func
+func_8083EA94 = 0x8083CC44; // type:func
+Player_CanThrowCarriedActor = 0x8083CCA0; // type:func
+Player_ActionHandler_9 = 0x8083CCF4; // type:func
+func_8083EC18 = 0x8083CDC8; // type:func
+func_8083F070 = 0x8083D224; // type:func
+Player_TryEnteringCrawlspace = 0x8083D27C; // type:func
+func_8083F360 = 0x8083D518; // type:func
+func_8083F524 = 0x8083D6DC; // type:func
+Player_TryLeavingCrawlspace = 0x8083D728; // type:func
+func_8083F72C = 0x8083D8E4; // type:func
+Player_ActionHandler_5 = 0x8083D970; // type:func
+func_8083F9D0 = 0x8083DB88; // type:func
+func_8083FAB8 = 0x8083DC70; // type:func
+func_8083FB14 = 0x8083DCCC; // type:func
+func_8083FB7C = 0x8083DD34; // type:func
+func_8083FBC0 = 0x8083DD74; // type:func
+func_8083FC68 = 0x8083DE24; // type:func
+func_8083FD78 = 0x8083DF34; // type:func
+func_8083FFB8 = 0x8083E178; // type:func
+func_80840058 = 0x8083E218; // type:func
+func_80840138 = 0x8083E300; // type:func
+func_808401B0 = 0x8083E378; // type:func
+func_8084021C = 0x8083E3E4; // type:func
+func_8084029C = 0x8083E464; // type:func
+Player_Action_80840450 = 0x8083E61C; // type:func
+Player_Action_808407CC = 0x8083E998; // type:func
+Player_ChooseNextIdleAnim = 0x8083EB98; // type:func
+Player_Action_Idle = 0x8083ED94; // type:func
+Player_Action_80840DE4 = 0x8083EFB4; // type:func
+func_80841138 = 0x8083F308; // type:func
+func_8084140C = 0x8083F5E4; // type:func
+func_80841458 = 0x8083F630; // type:func
+Player_Action_808414F8 = 0x8083F6D0; // type:func
+func_808416C0 = 0x8083F8A4; // type:func
+Player_Action_8084170C = 0x8083F8F0; // type:func
+Player_Action_808417FC = 0x8083F9E0; // type:func
+func_80841860 = 0x8083FA44; // type:func
+Player_Action_8084193C = 0x8083FB20; // type:func
+Player_Action_TurnInPlace = 0x8083FD84; // type:func
+func_80841CC4 = 0x8083FEA0; // type:func
+func_80841EE4 = 0x808400C4; // type:func
+Player_Action_80842180 = 0x80840368; // type:func
+Player_Action_8084227C = 0x8084046C; // type:func
+Player_Action_808423EC = 0x808405E0; // type:func
+Player_Action_8084251C = 0x80840710; // type:func
+func_8084260C = 0x80840800; // type:func
+func_8084269C = 0x80840890; // type:func
+Player_Action_8084279C = 0x80840990; // type:func
+func_8084285C = 0x80840A50; // type:func
+func_808428D8 = 0x80840ACC; // type:func
+func_80842964 = 0x80840B5C; // type:func
+Player_RequestQuake = 0x80840BB4; // type:func
+func_80842A28 = 0x80840C28; // type:func
+func_80842A88 = 0x80840C8C; // type:func
+func_80842AC4 = 0x80840CC8; // type:func
+func_80842B7C = 0x80840D84; // type:func
+func_80842CF0 = 0x80840EFC; // type:func
+func_80842D20 = 0x80840F34; // type:func
+func_80842DF4 = 0x8084100C; // type:func
+Player_Action_80843188 = 0x808413A0; // type:func
+Player_Action_808435C4 = 0x808417DC; // type:func
+Player_Action_8084370C = 0x80841928; // type:func
+Player_Action_8084377C = 0x8084199C; // type:func
+Player_Action_80843954 = 0x80841B78; // type:func
+Player_Action_80843A38 = 0x80841C60; // type:func
+func_80843AE8 = 0x80841D14; // type:func
+Player_Action_80843CEC = 0x80841F18; // type:func
+func_80843E14 = 0x80842044; // type:func
+func_80843E64 = 0x80842098; // type:func
+func_8084409C = 0x808422D0; // type:func
+Player_Action_8084411C = 0x80842358; // type:func
+Player_Action_Roll = 0x8084294C; // type:func
+Player_Action_80844A44 = 0x80842C88; // type:func
+Player_Action_80844AF4 = 0x80842D38; // type:func
+func_80844BE4 = 0x80842E28; // type:func
+func_80844CF8 = 0x80842F40; // type:func
+func_80844D30 = 0x80842F78; // type:func
+func_80844D68 = 0x80842FB0; // type:func
+func_80844DC8 = 0x80843014; // type:func
+func_80844E3C = 0x80843088; // type:func
+Player_Action_80844E68 = 0x808430B8; // type:func
+Player_Action_80845000 = 0x80843250; // type:func
+Player_Action_80845308 = 0x80843558; // type:func
+Player_Action_80845668 = 0x808438B8; // type:func
+Player_Action_WaitForPutAway = 0x80843B24; // type:func
+func_80845964 = 0x80843BB8; // type:func
+func_80845BA0 = 0x80843DFC; // type:func
+func_80845C68 = 0x80843EC8; // type:func
+Player_Action_80845CA4 = 0x80843F08; // type:func
+Player_Action_80845EF8 = 0x80844168; // type:func
+Player_Action_80846050 = 0x808442C0; // type:func
+Player_Action_80846120 = 0x80844398; // type:func
+Player_Action_80846260 = 0x808444D8; // type:func
+Player_Action_80846358 = 0x808445D8; // type:func
+Player_Action_80846408 = 0x80844688; // type:func
+Player_Action_808464B0 = 0x80844730; // type:func
+Player_Action_80846578 = 0x808447FC; // type:func
+Player_DoNothing = 0x808448C4; // type:func
+Player_StartMode_Nothing = 0x808448D4; // type:func
+Player_StartMode_BlueWarp = 0x808448F0; // type:func
+Player_PutSwordInHand = 0x808449B0; // type:func
+Player_StartMode_TimeTravel = 0x80844A64; // type:func
+Player_StartMode_Door = 0x80844B40; // type:func
+Player_StartMode_Grotto = 0x80844B88; // type:func
+Player_StartMode_KnockedOver = 0x80844C18; // type:func
+Player_StartMode_WarpSong = 0x80844C5C; // type:func
+Player_SpawnMagicSpell = 0x80844C9C; // type:func
+Player_StartMode_FaroresWind = 0x80844D08; // type:func
+Player_InitCommon = 0x80844D48; // type:func
+Player_Init = 0x80844F78; // type:func
+Player_ApproachZeroBinang = 0x80845488; // type:func
+func_80847298 = 0x8084552C; // type:func
+Player_UpdateInterface = 0x80845668; // type:func
+Player_UpdateHoverBoots = 0x80845D18; // type:func
+Player_ProcessSceneCollision = 0x80845E40; // type:func
+Player_UpdateCamAndSeqModes = 0x80846948; // type:func
+Player_UpdateBurningDekuStick = 0x80846CA8; // type:func
+Player_UpdateBodyShock = 0x80846DF0; // type:func
+Player_UpdateBodyBurn = 0x80846F20; // type:func
+Player_DetectRumbleSecrets = 0x808471A4; // type:func
+Player_UpdateCommon = 0x8084724C; // type:func
+Player_Update = 0x80848158; // type:func
+Player_DrawGameplay = 0x80848390; // type:func
+Player_Draw = 0x80848834; // type:func
+Player_Destroy = 0x80848D94; // type:func
+func_8084ABD8 = 0x80848E18; // type:func
+func_8084AEEC = 0x8084912C; // type:func
+func_8084B000 = 0x80849248; // type:func
+func_8084B158 = 0x808493A8; // type:func
+Player_Action_8084B1D8 = 0x80849428; // type:func
+func_8084B3CC = 0x80849618; // type:func
+func_8084B498 = 0x808496EC; // type:func
+func_8084B4D4 = 0x80849728; // type:func
+Player_Action_Talk = 0x80849788; // type:func
+Player_Action_8084B78C = 0x808499F0; // type:func
+func_8084B840 = 0x80849AA4; // type:func
+Player_Action_8084B898 = 0x80849B00; // type:func
+Player_Action_8084B9E4 = 0x80849C4C; // type:func
+Player_Action_8084BBE4 = 0x80849E50; // type:func
+Player_Action_8084BDFC = 0x8084A068; // type:func
+func_8084BEE4 = 0x8084A150; // type:func
+Player_Action_8084BF1C = 0x8084A188; // type:func
+Player_Action_8084C5F8 = 0x8084A868; // type:func
+Player_Action_8084C760 = 0x8084A9D0; // type:func
+Player_Action_8084C81C = 0x8084AA8C; // type:func
+func_8084C89C = 0x8084AB0C; // type:func
+func_8084C9BC = 0x8084AC38; // type:func
+func_8084CBF4 = 0x8084AE74; // type:func
+Player_Action_8084CC98 = 0x8084AF1C; // type:func
+Player_Action_8084D3E4 = 0x8084B66C; // type:func
+func_8084D530 = 0x8084B7C0; // type:func
+func_8084D574 = 0x8084B808; // type:func
+func_8084D5CC = 0x8084B864; // type:func
+Player_Action_8084D610 = 0x8084B8B0; // type:func
+Player_Action_8084D7C4 = 0x8084BA60; // type:func
+Player_Action_8084D84C = 0x8084BAF0; // type:func
+func_8084D980 = 0x8084BC24; // type:func
+Player_Action_8084DAB4 = 0x8084BD5C; // type:func
+func_8084DBC4 = 0x8084BE6C; // type:func
+Player_Action_8084DC48 = 0x8084BEF0; // type:func
+func_8084DF6C = 0x8084C21C; // type:func
+func_8084DFAC = 0x8084C260; // type:func
+func_8084DFF4 = 0x8084C2AC; // type:func
+Player_Action_8084E1EC = 0x8084C4A4; // type:func
+Player_Action_8084E30C = 0x8084C5C4; // type:func
+Player_Action_8084E368 = 0x8084C624; // type:func
+Player_Action_8084E3C4 = 0x8084C684; // type:func
+Player_Action_8084E604 = 0x8084C8C4; // type:func
+Player_Action_8084E6D4 = 0x8084C994; // type:func
+func_8084E988 = 0x8084CC48; // type:func
+Player_Action_TimeTravelEnd = 0x8084CC6C; // type:func
+Player_Action_8084EAC0 = 0x8084CD80; // type:func
+Player_Action_SwingBottle = 0x8084CF6C; // type:func
+Player_Action_8084EED8 = 0x8084D1A4; // type:func
+Player_Action_8084EFC0 = 0x8084D28C; // type:func
+Player_Action_ExchangeItem = 0x8084D3D4; // type:func
+Player_Action_8084F308 = 0x8084D5DC; // type:func
+Player_Action_SlideOnSlope = 0x8084D664; // type:func
+Player_Action_WaitForCutscene = 0x8084D8DC; // type:func
+Player_Action_StartWarpSongArrive = 0x8084D96C; // type:func
+Player_Action_BlueWarpArrive = 0x8084D9E4; // type:func
+Player_Action_8084F88C = 0x8084DB60; // type:func
+Player_Action_TryOpeningDoor = 0x8084DC74; // type:func
+Player_Action_ExitGrotto = 0x8084DC94; // type:func
+Player_Action_8084FA54 = 0x8084DD28; // type:func
+Player_Action_8084FB10 = 0x8084DDE4; // type:func
+Player_Action_8084FBF4 = 0x8084DEC8; // type:func
+func_8084FF7C = 0x8084DF80; // type:func
+Player_UpdateBunnyEars = 0x8084E034; // type:func
+Player_ActionHandler_7 = 0x8084E22C; // type:func
+Player_Action_808502D0 = 0x8084E2D8; // type:func
+Player_Action_808505DC = 0x8084E5E8; // type:func
+Player_Action_8085063C = 0x8084E648; // type:func
+Player_Action_FaroresWindArrive = 0x8084E778; // type:func
+Player_Action_808507F4 = 0x8084E800; // type:func
+Player_Action_HookshotFly = 0x8084EAFC; // type:func
+Player_Action_80850C68 = 0x8084EC7C; // type:func
+Player_Action_80850E84 = 0x8084EE98; // type:func
+Player_AnimChangeOnceMorphZeroRootYawSpeed = 0x8084EEEC; // type:func
+Player_AnimChangeOnceMorphAdjustedZeroRootYawSpeed = 0x8084EF30; // type:func
+Player_AnimChangeLoopMorphAdjustedZeroRootYawSpeed = 0x8084EFB0; // type:func
+func_80851008 = 0x8084F01C; // type:func
+func_80851030 = 0x8084F044; // type:func
+func_80851050 = 0x8084F064; // type:func
+func_80851094 = 0x8084F0A8; // type:func
+func_808510B4 = 0x8084F0C8; // type:func
+func_808510D4 = 0x8084F0E8; // type:func
+func_808510F4 = 0x8084F108; // type:func
+func_80851114 = 0x8084F128; // type:func
+func_80851134 = 0x8084F148; // type:func
+func_80851154 = 0x8084F168; // type:func
+func_80851174 = 0x8084F188; // type:func
+func_80851194 = 0x8084F1A8; // type:func
+func_808511B4 = 0x8084F1C8; // type:func
+func_808511D4 = 0x8084F1E8; // type:func
+func_808511FC = 0x8084F214; // type:func
+func_80851248 = 0x8084F268; // type:func
+func_80851294 = 0x8084F2BC; // type:func
+func_808512E0 = 0x8084F310; // type:func
+func_80851314 = 0x8084F348; // type:func
+func_80851368 = 0x8084F39C; // type:func
+func_808513BC = 0x8084F3F0; // type:func
+func_808514C0 = 0x8084F4F8; // type:func
+func_8085157C = 0x8084F5B4; // type:func
+func_808515A4 = 0x8084F5E0; // type:func
+func_80851688 = 0x8084F6C4; // type:func
+func_80851750 = 0x8084F794; // type:func
+func_80851788 = 0x8084F7D0; // type:func
+func_80851828 = 0x8084F870; // type:func
+func_808518DC = 0x8084F928; // type:func
+func_8085190C = 0x8084F95C; // type:func
+func_80851998 = 0x8084F9E8; // type:func
+func_808519C0 = 0x8084FA10; // type:func
+func_808519EC = 0x8084FA3C; // type:func
+func_80851A50 = 0x8084FAA0; // type:func
+func_80851B90 = 0x8084FBE0; // type:func
+func_80851BE8 = 0x8084FC3C; // type:func
+func_80851CA4 = 0x8084FCFC; // type:func
+func_80851D2C = 0x8084FD88; // type:func
+func_80851D80 = 0x8084FDE0; // type:func
+func_80851DEC = 0x8084FE54; // type:func
+func_80851E28 = 0x8084FE94; // type:func
+func_80851E64 = 0x8084FED4; // type:func
+func_80851E90 = 0x8084FF00; // type:func
+func_80851ECC = 0x8084FF40; // type:func
+func_80851F14 = 0x8084FF90; // type:func
+func_80851F84 = 0x80850004; // type:func
+func_80851FB0 = 0x80850030; // type:func
+func_80852048 = 0x808500CC; // type:func
+func_80852080 = 0x80850108; // type:func
+func_808520BC = 0x80850148; // type:func
+func_80852174 = 0x80850200; // type:func
+func_808521B8 = 0x8085024C; // type:func
+func_808521F4 = 0x8085028C; // type:func
+func_80852234 = 0x808502CC; // type:func
+func_8085225C = 0x808502F8; // type:func
+func_80852280 = 0x8085031C; // type:func
+func_80852298 = 0x80850338; // type:func
+func_80852328 = 0x808503CC; // type:func
+func_80852358 = 0x808503FC; // type:func
+func_80852388 = 0x8085042C; // type:func
+func_80852414 = 0x808504BC; // type:func
+func_80852450 = 0x808504FC; // type:func
+func_80852480 = 0x8085052C; // type:func
+func_808524B0 = 0x8085055C; // type:func
+func_808524D0 = 0x80850580; // type:func
+func_80852514 = 0x808505C8; // type:func
+func_80852544 = 0x808505FC; // type:func
+func_80852554 = 0x80850610; // type:func
+func_80852564 = 0x80850624; // type:func
+func_808525C0 = 0x80850688; // type:func
+func_80852608 = 0x808506D4; // type:func
+func_80852648 = 0x8085071C; // type:func
+func_808526EC = 0x808507C4; // type:func
+func_8085283C = 0x8085091C; // type:func
+func_808528C8 = 0x808509AC; // type:func
+func_80852944 = 0x80850A2C; // type:func
+func_808529D0 = 0x80850AB8; // type:func
+func_80852A54 = 0x80850B40; // type:func
+func_80852B4C = 0x80850C38; // type:func
+func_80852C0C = 0x80850CF8; // type:func
+func_80852C50 = 0x80850D3C; // type:func
+Player_Action_CsAction = 0x80850EF8; // type:func
+Player_IsDroppingFish = 0x80850FA0; // type:func
+Player_StartFishing = 0x80850FD4; // type:func
+func_80852F38 = 0x80851010; // type:func
+Player_TryCsAction = 0x808510DC; // type:func
+func_80853080 = 0x80851160; // type:func
+Player_InflictDamage = 0x808511BC; // type:func
+Player_StartTalking = 0x80851224; // type:func
+EnTest_SetupAction = 0x8085D5D0; // type:func
+EnTest_Init = 0x8085D5DC; // type:func
+EnTest_Destroy = 0x8085D828; // type:func
+EnTest_ChooseRandomAction = 0x8085D8C0; // type:func
+EnTest_ChooseAction = 0x8085DA3C; // type:func
+EnTest_SetupWaitGround = 0x8085DD5C; // type:func
+EnTest_WaitGround = 0x8085DDD4; // type:func
+EnTest_SetupWaitAbove = 0x8085DEB4; // type:func
+EnTest_WaitAbove = 0x8085DF28; // type:func
+EnTest_SetupIdle = 0x8085DFF4; // type:func
+EnTest_Idle = 0x8085E078; // type:func
+EnTest_Fall = 0x8085E2A8; // type:func
+EnTest_Land = 0x8085E35C; // type:func
+EnTest_SetupWalkAndBlock = 0x8085E3CC; // type:func
+EnTest_WalkAndBlock = 0x8085E490; // type:func
+func_80860BDC = 0x8085EB74; // type:func
+func_80860C24 = 0x8085EBBC; // type:func
+func_80860EC0 = 0x8085EE58; // type:func
+func_80860F84 = 0x8085EF1C; // type:func
+EnTest_SetupSlashDown = 0x8085F3B0; // type:func
+EnTest_SlashDown = 0x8085F434; // type:func
+EnTest_SetupSlashDownEnd = 0x8085F540; // type:func
+EnTest_SlashDownEnd = 0x8085F590; // type:func
+EnTest_SetupSlashUp = 0x8085F7BC; // type:func
+EnTest_SlashUp = 0x8085F838; // type:func
+EnTest_SetupJumpBack = 0x8085F8F0; // type:func
+EnTest_JumpBack = 0x8085F990; // type:func
+EnTest_SetupJumpslash = 0x8085FB38; // type:func
+EnTest_Jumpslash = 0x8085FBE4; // type:func
+EnTest_SetupJumpUp = 0x8085FCF4; // type:func
+EnTest_JumpUp = 0x8085FD6C; // type:func
+EnTest_SetupStopAndBlock = 0x8085FE64; // type:func
+EnTest_StopAndBlock = 0x8085FF24; // type:func
+EnTest_SetupIdleFromBlock = 0x8085FFF4; // type:func
+EnTest_IdleFromBlock = 0x80860040; // type:func
+func_80862154 = 0x808600F8; // type:func
+func_808621D4 = 0x80860178; // type:func
+func_80862398 = 0x80860340; // type:func
+func_80862418 = 0x808603C0; // type:func
+EnTest_SetupStunned = 0x80860524; // type:func
+EnTest_Stunned = 0x80860600; // type:func
+func_808627C4 = 0x80860778; // type:func
+func_808628C8 = 0x8086087C; // type:func
+func_80862DBC = 0x80860D74; // type:func
+func_80862E6C = 0x80860E28; // type:func
+func_80862FA8 = 0x80860F64; // type:func
+func_80863044 = 0x80861000; // type:func
+func_808630F0 = 0x808610AC; // type:func
+func_8086318C = 0x80861148; // type:func
+EnTest_SetupRecoil = 0x808611FC; // type:func
+EnTest_Recoil = 0x80861250; // type:func
+EnTest_Rise = 0x8086131C; // type:func
+func_808633E8 = 0x808613A4; // type:func
+EnTest_UpdateHeadRot = 0x80861420; // type:func
+EnTest_UpdateDamage = 0x808614B8; // type:func
+EnTest_Update = 0x80861658; // type:func
+EnTest_OverrideLimbDraw = 0x80861A84; // type:func
+EnTest_PostLimbDraw = 0x80861C58; // type:func
+EnTest_Draw = 0x80861FE0; // type:func
+func_80864158 = 0x808620F4; // type:func
+EnTest_ReactToProjectile = 0x80862184; // type:func
+EnGirlA_SetupAction = 0x80862E80; // type:func
+EnGirlA_TryChangeShopItem = 0x80862E8C; // type:func
+EnGirlA_InitItem = 0x80863004; // type:func
+EnGirlA_Init = 0x808630A8; // type:func
+EnGirlA_Destroy = 0x808630DC; // type:func
+EnGirlA_CanBuy_Arrows = 0x8086310C; // type:func
+EnGirlA_CanBuy_Bombs = 0x808631BC; // type:func
+EnGirlA_CanBuy_DekuNuts = 0x8086325C; // type:func
+EnGirlA_CanBuy_DekuSticks = 0x80863314; // type:func
+EnGirlA_CanBuy_Fish = 0x808633CC; // type:func
+EnGirlA_CanBuy_RedPotion = 0x80863444; // type:func
+EnGirlA_CanBuy_GreenPotion = 0x808634BC; // type:func
+EnGirlA_CanBuy_BluePotion = 0x80863534; // type:func
+EnGirlA_CanBuy_Longsword = 0x808635AC; // type:func
+EnGirlA_CanBuy_HylianShield = 0x80863640; // type:func
+EnGirlA_CanBuy_DekuShield = 0x808636C0; // type:func
+EnGirlA_CanBuy_GoronTunic = 0x80863740; // type:func
+EnGirlA_CanBuy_ZoraTunic = 0x808637E8; // type:func
+EnGirlA_CanBuy_RecoveryHeart = 0x80863890; // type:func
+EnGirlA_CanBuy_MilkBottle = 0x808638DC; // type:func
+EnGirlA_CanBuy_WeirdEgg = 0x80863938; // type:func
+EnGirlA_CanBuy_Unk19 = 0x80863994; // type:func
+EnGirlA_CanBuy_Unk20 = 0x808639A8; // type:func
+EnGirlA_CanBuy_Bombchus = 0x808639BC; // type:func
+EnGirlA_CanBuy_DekuSeeds = 0x80863A40; // type:func
+EnGirlA_CanBuy_SoldOut = 0x80863AF0; // type:func
+EnGirlA_CanBuy_BlueFire = 0x80863B04; // type:func
+EnGirlA_CanBuy_Bugs = 0x80863B7C; // type:func
+EnGirlA_CanBuy_Poe = 0x80863BF4; // type:func
+EnGirlA_CanBuy_Fairy = 0x80863C6C; // type:func
+EnGirlA_ItemGive_Arrows = 0x80863CE4; // type:func
+EnGirlA_ItemGive_Bombs = 0x80863D2C; // type:func
+EnGirlA_ItemGive_DekuNuts = 0x80863DCC; // type:func
+EnGirlA_ItemGive_DekuSticks = 0x80863E3C; // type:func
+EnGirlA_ItemGive_Longsword = 0x80863E78; // type:func
+EnGirlA_ItemGive_HylianShield = 0x80863EC0; // type:func
+EnGirlA_ItemGive_DekuShield = 0x80863EFC; // type:func
+EnGirlA_ItemGive_GoronTunic = 0x80863F38; // type:func
+EnGirlA_ItemGive_ZoraTunic = 0x80863F74; // type:func
+EnGirlA_ItemGive_Health = 0x80863FB0; // type:func
+EnGirlA_ItemGive_MilkBottle = 0x80863FF0; // type:func
+EnGirlA_ItemGive_WeirdEgg = 0x8086402C; // type:func
+EnGirlA_ItemGive_Unk19 = 0x80864068; // type:func
+EnGirlA_ItemGive_Unk20 = 0x80864098; // type:func
+EnGirlA_ItemGive_DekuSeeds = 0x808640C8; // type:func
+EnGirlA_ItemGive_BottledItem = 0x80864104; // type:func
+EnGirlA_BuyEvent_ShieldDiscount = 0x80864234; // type:func
+EnGirlA_BuyEvent_GoronTunic = 0x808642D4; // type:func
+EnGirlA_BuyEvent_ZoraTunic = 0x80864304; // type:func
+EnGirlA_BuyEvent_ObtainBombchuPack = 0x80864334; // type:func
+EnGirlA_Noop = 0x80864448; // type:func
+EnGirlA_SetItemDescription = 0x80864458; // type:func
+EnGirlA_SetItemOutOfStock = 0x80864580; // type:func
+EnGirlA_UpdateStockedItem = 0x808645B4; // type:func
+EnGirlA_TrySetMaskItemDescription = 0x8086462C; // type:func
+EnGirlA_WaitForObject = 0x808646BC; // type:func
+EnGirlA_Update2 = 0x80864A6C; // type:func
+EnGirlA_Update = 0x80864B28; // type:func
+func_80A3C498 = 0x80864B4C; // type:func
+EnGirlA_Draw = 0x80864B90; // type:func
+EnPart_Init = 0x808657A0; // type:func
+EnPart_Destroy = 0x808657B0; // type:func
+func_80ACDDE8 = 0x808657C0; // type:func
+func_80ACE13C = 0x80865B14; // type:func
+func_80ACE5B8 = 0x80865F90; // type:func
+func_80ACE5C8 = 0x80865FA4; // type:func
+func_80ACE7E8 = 0x808661C8; // type:func
+EnPart_Update = 0x808663C4; // type:func
+func_80ACEAC0 = 0x808664A4; // type:func
+EnPart_Draw = 0x8086655C; // type:func
+EnLight_Init = 0x80866E00; // type:func
+EnLight_Destroy = 0x80866FE0; // type:func
+EnLight_UpdatePosRot = 0x80867014; // type:func
+EnLight_Update = 0x80867090; // type:func
+EnLight_UpdateSwitch = 0x80867334; // type:func
+EnLight_Draw = 0x8086776C; // type:func
+EnDoor_Init = 0x80867C00; // type:func
+EnDoor_Destroy = 0x80867E1C; // type:func
+EnDoor_SetupType = 0x80867E50; // type:func
+EnDoor_Idle = 0x80868008; // type:func
+EnDoor_WaitForCheck = 0x808682C0; // type:func
+EnDoor_Check = 0x8086830C; // type:func
+EnDoor_AjarWait = 0x80868344; // type:func
+EnDoor_AjarOpen = 0x80868378; // type:func
+EnDoor_AjarClose = 0x808683E8; // type:func
+EnDoor_Open = 0x80868430; // type:func
+EnDoor_Update = 0x80868684; // type:func
+EnDoor_OverrideLimbDraw = 0x808686A8; // type:func
+EnDoor_Draw = 0x808687DC; // type:func
+EnBox_SetupAction = 0x80868A40; // type:func
+EnBox_ClipToGround = 0x80868A4C; // type:func
+EnBox_Init = 0x80868AD8; // type:func
+EnBox_Destroy = 0x80868F48; // type:func
+EnBox_RandomDustKinematic = 0x80868F7C; // type:func
+EnBox_SpawnDust = 0x80869080; // type:func
+EnBox_Fall = 0x80869134; // type:func
+EnBox_FallOnSwitchFlag = 0x808692B8; // type:func
+func_809C9700 = 0x80869388; // type:func
+EnBox_AppearOnSwitchFlag = 0x80869518; // type:func
+EnBox_AppearOnRoomClear = 0x80869598; // type:func
+EnBox_AppearInit = 0x80869650; // type:func
+EnBox_AppearAnimation = 0x8086970C; // type:func
+EnBox_WaitOpen = 0x808697B8; // type:func
+EnBox_Open = 0x808699EC; // type:func
+EnBox_SpawnIceSmoke = 0x80869B74; // type:func
+EnBox_Update = 0x80869E20; // type:func
+EnBox_PostLimbDraw = 0x80869F5C; // type:func
+EnBox_EmptyDList = 0x8086A0C4; // type:func
+func_809CA4A0 = 0x8086A0E8; // type:func
+func_809CA518 = 0x8086A128; // type:func
+EnBox_Draw = 0x8086A168; // type:func
+EnPoh_Init = 0x8086A5A0; // type:func
+EnPoh_Destroy = 0x8086A8E8; // type:func
+func_80ADE114 = 0x8086A968; // type:func
+EnPoh_SetupIdle = 0x8086A9C0; // type:func
+func_80ADE1BC = 0x8086AA10; // type:func
+EnPoh_SetupAttack = 0x8086AA60; // type:func
+func_80ADE28C = 0x8086AAE0; // type:func
+func_80ADE368 = 0x8086ABBC; // type:func
+EnPoh_SetupInitialAction = 0x8086AC30; // type:func
+func_80ADE48C = 0x8086ACE0; // type:func
+func_80ADE4C8 = 0x8086AD20; // type:func
+func_80ADE514 = 0x8086AD6C; // type:func
+EnPoh_SetupDisappear = 0x8086ADC4; // type:func
+EnPoh_SetupAppear = 0x8086AE1C; // type:func
+EnPoh_SetupDeath = 0x8086AE68; // type:func
+func_80ADE6D4 = 0x8086AF34; // type:func
+EnPoh_Talk = 0x8086B020; // type:func
+func_80ADE950 = 0x8086B1B8; // type:func
+func_80ADE998 = 0x8086B204; // type:func
+func_80ADE9BC = 0x8086B22C; // type:func
+EnPoh_MoveTowardsPlayerHeight = 0x8086B240; // type:func
+func_80ADEA5C = 0x8086B2D4; // type:func
+func_80ADEAC4 = 0x8086B344; // type:func
+EnPoh_Idle = 0x8086B400; // type:func
+func_80ADEC9C = 0x8086B51C; // type:func
+EnPoh_Attack = 0x8086B680; // type:func
+func_80ADEECC = 0x8086B750; // type:func
+func_80ADEF38 = 0x8086B7BC; // type:func
+EnPoh_ComposerAppear = 0x8086B93C; // type:func
+func_80ADF15C = 0x8086B9E0; // type:func
+func_80ADF574 = 0x8086BDF8; // type:func
+func_80ADF5E0 = 0x8086BE64; // type:func
+EnPoh_Disappear = 0x8086BEE4; // type:func
+EnPoh_Appear = 0x8086C000; // type:func
+func_80ADF894 = 0x8086C120; // type:func
+EnPoh_Death = 0x8086C220; // type:func
+func_80ADFA90 = 0x8086C320; // type:func
+func_80ADFE28 = 0x8086C6B8; // type:func
+func_80ADFE80 = 0x8086C710; // type:func
+func_80AE009C = 0x8086C92C; // type:func
+EnPoh_TalkRegular = 0x8086C96C; // type:func
+EnPoh_TalkComposer = 0x8086CA98; // type:func
+func_80AE032C = 0x8086CBC4; // type:func
+EnPoh_UpdateVisibility = 0x8086CC5C; // type:func
+EnPoh_Update = 0x8086CDCC; // type:func
+func_80AE067C = 0x8086CF18; // type:func
+func_80AE089C = 0x8086D138; // type:func
+EnPoh_UpdateLiving = 0x8086D2B8; // type:func
+EnPoh_OverrideLimbDraw = 0x8086D498; // type:func
+EnPoh_PostLimbDraw = 0x8086D58C; // type:func
+EnPoh_DrawRegular = 0x8086D77C; // type:func
+EnPoh_DrawComposer = 0x8086D9A4; // type:func
+EnPoh_UpdateDead = 0x8086DE20; // type:func
+EnPoh_DrawSoul = 0x8086DE74; // type:func
+EnOkuta_Init = 0x8086E790; // type:func
+EnOkuta_Destroy = 0x8086E99C; // type:func
+EnOkuta_SpawnBubbles = 0x8086E9C8; // type:func
+EnOkuta_SpawnDust = 0x8086EA74; // type:func
+EnOkuta_SpawnSplash = 0x8086EADC; // type:func
+EnOkuta_SpawnRipple = 0x8086EB20; // type:func
+EnOkuta_SetupWaitToAppear = 0x8086EBC4; // type:func
+EnOkuta_SetupAppear = 0x8086EBF4; // type:func
+EnOkuta_SetupHide = 0x8086EC64; // type:func
+EnOkuta_SetupWaitToShoot = 0x8086ECA4; // type:func
+EnOkuta_SetupShoot = 0x8086ED04; // type:func
+EnOkuta_SetupWaitToDie = 0x8086EDF0; // type:func
+EnOkuta_SetupDie = 0x8086EE78; // type:func
+EnOkuta_SetupFreeze = 0x8086EEC0; // type:func
+EnOkuta_SpawnProjectile = 0x8086EF0C; // type:func
+EnOkuta_WaitToAppear = 0x8086F04C; // type:func
+EnOkuta_Appear = 0x8086F0A8; // type:func
+EnOkuta_Hide = 0x8086F1EC; // type:func
+EnOkuta_WaitToShoot = 0x8086F2EC; // type:func
+EnOkuta_Shoot = 0x8086F41C; // type:func
+EnOkuta_WaitToDie = 0x8086F59C; // type:func
+EnOkuta_Die = 0x8086F5F0; // type:func
+EnOkuta_Freeze = 0x8086F904; // type:func
+EnOkuta_ProjectileFly = 0x8086FA80; // type:func
+EnOkuta_UpdateHeadScale = 0x8086FCCC; // type:func
+EnOkuta_ColliderCheck = 0x80870074; // type:func
+EnOkuta_Update = 0x80870124; // type:func
+EnOkuta_GetSnoutScale = 0x808704A4; // type:func
+EnOkuta_OverrideLimbDraw = 0x8087072C; // type:func
+EnOkuta_Draw = 0x80870828; // type:func
+EnBom_SetupAction = 0x80870D70; // type:func
+EnBom_Init = 0x80870D7C; // type:func
+EnBom_Destroy = 0x80870E94; // type:func
+EnBom_Move = 0x80870ED4; // type:func
+EnBom_WaitForRelease = 0x808710A4; // type:func
+EnBom_Explode = 0x808710F0; // type:func
+EnBom_Update = 0x80871240; // type:func
+EnBom_Draw = 0x808718D0; // type:func
+EnWallmas_Init = 0x80871C40; // type:func
+EnWallmas_Destroy = 0x80871D80; // type:func
+EnWallmas_TimerInit = 0x80871DAC; // type:func
+EnWallmas_SetupDrop = 0x80871E08; // type:func
+EnWallmas_SetupLand = 0x80871ECC; // type:func
+EnWallmas_SetupStand = 0x80871F90; // type:func
+EnWallmas_SetupWalk = 0x80871FD0; // type:func
+EnWallmas_SetupJumpToCeiling = 0x80872020; // type:func
+EnWallmas_SetupReturnToCeiling = 0x80872068; // type:func
+EnWallmas_SetupTakeDamage = 0x808720EC; // type:func
+EnWallmas_SetupCooldown = 0x808721A8; // type:func
+EnWallmas_SetupDie = 0x808721FC; // type:func
+EnWallmas_SetupTakePlayer = 0x808722C4; // type:func
+EnWallmas_ProximityOrSwitchInit = 0x8087234C; // type:func
+EnWallmas_SetupStun = 0x80872394; // type:func
+EnWallmas_WaitToDrop = 0x80872464; // type:func
+EnWallmas_Drop = 0x80872570; // type:func
+EnWallmas_Land = 0x8087263C; // type:func
+EnWallmas_Stand = 0x80872678; // type:func
+EnWallmas_Walk = 0x808726D8; // type:func
+EnWallmas_JumpToCeiling = 0x8087278C; // type:func
+EnWallmas_ReturnToCeiling = 0x808727C8; // type:func
+EnWallmas_TakeDamage = 0x808728E4; // type:func
+EnWallmas_Cooldown = 0x80872978; // type:func
+EnWallmas_Die = 0x808729B4; // type:func
+EnWallmas_TakePlayer = 0x80872A28; // type:func
+EnWallmas_WaitForProximity = 0x80872C4C; // type:func
+EnWallmas_WaitForSwitchFlag = 0x80872CA8; // type:func
+EnWallmas_Stun = 0x80872CF4; // type:func
+EnWallmas_ColUpdate = 0x80872D68; // type:func
+EnWallmas_Update = 0x80872E84; // type:func
+EnWallmas_DrawXlu = 0x8087304C; // type:func
+EnWallMas_OverrideLimbDraw = 0x808731EC; // type:func
+EnWallMas_PostLimbDraw = 0x80873260; // type:func
+EnWallmas_Draw = 0x80873350; // type:func
+EnDodongo_SetupAction = 0x80873650; // type:func
+EnDodongo_SpawnBombSmoke = 0x8087365C; // type:func
+EnDodongo_Init = 0x80873B4C; // type:func
+EnDodongo_Destroy = 0x80873D74; // type:func
+EnDodongo_SetupIdle = 0x80873DD4; // type:func
+EnDodongo_SetupWalk = 0x80873E3C; // type:func
+EnDodongo_SetupBreatheFire = 0x80873EE0; // type:func
+EnDodongo_SetupEndBreatheFire = 0x80873F34; // type:func
+EnDodongo_SetupSwallowBomb = 0x80873F84; // type:func
+EnDodongo_SetupStunned = 0x80874004; // type:func
+EnDodongo_Idle = 0x8087409C; // type:func
+EnDodongo_EndBreatheFire = 0x80874114; // type:func
+EnDodongo_BreatheFire = 0x80874164; // type:func
+EnDodongo_SwallowBomb = 0x8087433C; // type:func
+EnDodongo_Walk = 0x80874834; // type:func
+EnDodongo_SetupSweepTail = 0x80874B74; // type:func
+EnDodongo_SweepTail = 0x80874BD4; // type:func
+EnDodongo_SetupDeath = 0x80874E98; // type:func
+EnDodongo_Death = 0x80874F10; // type:func
+EnDodongo_Stunned = 0x8087505C; // type:func
+EnDodongo_CollisionCheck = 0x808750C0; // type:func
+EnDodongo_UpdateQuad = 0x808751E8; // type:func
+EnDodongo_Update = 0x80875354; // type:func
+EnDodongo_OverrideLimbDraw = 0x80875520; // type:func
+EnDodongo_PostLimbDraw = 0x80875574; // type:func
+EnDodongo_Draw = 0x808759B0; // type:func
+EnDodongo_ShiftVecRadial = 0x80875AA0; // type:func
+EnDodongo_AteBomb = 0x80875B00; // type:func
+EnFirefly_Extinguish = 0x808763F0; // type:func
+EnFirefly_Ignite = 0x8087641C; // type:func
+EnFirefly_Init = 0x8087645C; // type:func
+EnFirefly_Destroy = 0x80876654; // type:func
+EnFirefly_SetupFlyIdle = 0x80876680; // type:func
+EnFirefly_SetupFall = 0x8087672C; // type:func
+EnFirefly_SetupDie = 0x808767D0; // type:func
+EnFirefly_SetupRebound = 0x808767F4; // type:func
+EnFirefly_SetupDiveAttack = 0x80876830; // type:func
+EnFirefly_SetupFlyAway = 0x808768A0; // type:func
+EnFirefly_SetupStunned = 0x808768D0; // type:func
+EnFirefly_SetupFrozenFall = 0x80876940; // type:func
+EnFirefly_SetupPerch = 0x80876AE0; // type:func
+EnFirefly_SetupDisturbDiveAttack = 0x80876B04; // type:func
+EnFirefly_ReturnToPerch = 0x80876B40; // type:func
+EnFirefly_SeekTorch = 0x80876C5C; // type:func
+EnFirefly_FlyIdle = 0x80876DAC; // type:func
+EnFirefly_Fall = 0x8087703C; // type:func
+EnFirefly_Die = 0x8087710C; // type:func
+EnFirefly_DiveAttack = 0x80877188; // type:func
+EnFirefly_Rebound = 0x8087739C; // type:func
+EnFirefly_FlyAway = 0x80877430; // type:func
+EnFirefly_Stunned = 0x80877598; // type:func
+EnFirefly_FrozenFall = 0x8087763C; // type:func
+EnFirefly_Perch = 0x8087769C; // type:func
+EnFirefly_DisturbDiveAttack = 0x8087775C; // type:func
+EnFirefly_Combust = 0x80877834; // type:func
+EnFirefly_UpdateDamage = 0x808778B4; // type:func
+EnFirefly_Update = 0x80877A64; // type:func
+EnFirefly_OverrideLimbDraw = 0x80877D0C; // type:func
+EnFirefly_PostLimbDraw = 0x80877D60; // type:func
+EnFirefly_Draw = 0x808780F0; // type:func
+EnFirefly_DrawInvisible = 0x808781A4; // type:func
+EnHorse_BgCheckBridgeJumpPoint = 0x80878560; // type:func
+EnHorse_CheckBridgeJumps = 0x808786C0; // type:func
+EnHorse_RaceWaypointPos = 0x80878800; // type:func
+EnHorse_RotateToPoint = 0x80878854; // type:func
+EnHorse_UpdateIngoRaceInfo = 0x80878890; // type:func
+EnHorse_PlayWalkingSfx = 0x80878C44; // type:func
+EnHorse_PlayTrottingSfx = 0x80878D00; // type:func
+EnHorse_PlayGallopingSfx = 0x80878D48; // type:func
+EnHorse_SlopeSpeedMultiplier = 0x80878D90; // type:func
+func_80A5BB90 = 0x80878E10; // type:func
+func_80A5BBBC = 0x80878E40; // type:func
+EnHorse_IdleAnimSounds = 0x80878EF0; // type:func
+EnHorse_Spawn = 0x8087901C; // type:func
+EnHorse_ResetCutscene = 0x80879260; // type:func
+EnHorse_ResetRace = 0x80879278; // type:func
+EnHorse_PlayerCanMove = 0x80879288; // type:func
+EnHorse_ResetHorsebackArchery = 0x80879344; // type:func
+EnHorse_ClearDustFlags = 0x8087935C; // type:func
+EnHorse_Init = 0x80879368; // type:func
+EnHorse_Destroy = 0x80879A98; // type:func
+EnHorse_RotateToPlayer = 0x80879B08; // type:func
+EnHorse_Freeze = 0x80879B78; // type:func
+EnHorse_Frozen = 0x80879BF8; // type:func
+EnHorse_UpdateSpeed = 0x80879D68; // type:func
+EnHorse_StartMountedIdleResetAnim = 0x8087A1AC; // type:func
+EnHorse_StartMountedIdle = 0x8087A1E8; // type:func
+EnHorse_MountedIdle = 0x8087A324; // type:func
+EnHorse_MountedIdleAnim = 0x8087A424; // type:func
+EnHorse_MountedIdleWhinney = 0x8087A448; // type:func
+EnHorse_MountedIdleWhinneying = 0x8087A544; // type:func
+EnHorse_StartTurning = 0x8087A644; // type:func
+EnHorse_MountedTurn = 0x8087A6EC; // type:func
+EnHorse_StartWalkingFromIdle = 0x8087A8B0; // type:func
+EnHorse_StartWalkingInterruptable = 0x8087A900; // type:func
+EnHorse_StartWalking = 0x8087A924; // type:func
+EnHorse_MountedWalkingReset = 0x8087A9D0; // type:func
+EnHorse_MountedWalk = 0x8087AA24; // type:func
+EnHorse_StartTrotting = 0x8087ACF4; // type:func
+EnHorse_MountedTrotReset = 0x8087AD98; // type:func
+EnHorse_MountedTrot = 0x8087ADE4; // type:func
+EnHorse_StartGallopingInterruptable = 0x8087AF1C; // type:func
+EnHorse_StartGalloping = 0x8087AF40; // type:func
+EnHorse_MountedGallopReset = 0x8087AFE8; // type:func
+EnHorse_JumpLanding = 0x8087B040; // type:func
+EnHorse_MountedGallop = 0x8087B0C4; // type:func
+EnHorse_StartRearing = 0x8087B298; // type:func
+EnHorse_MountedRearing = 0x8087B3BC; // type:func
+EnHorse_StartBraking = 0x8087B538; // type:func
+EnHorse_Stopping = 0x8087B628; // type:func
+EnHorse_StartReversingInterruptable = 0x8087B814; // type:func
+EnHorse_StartReversing = 0x8087B838; // type:func
+EnHorse_Reverse = 0x8087B8DC; // type:func
+EnHorse_LowJumpInit = 0x8087BC8C; // type:func
+EnHorse_StartLowJump = 0x8087BCB0; // type:func
+EnHorse_Stub1 = 0x8087BDE0; // type:func
+EnHorse_LowJump = 0x8087BDEC; // type:func
+EnHorse_HighJumpInit = 0x8087BFB0; // type:func
+EnHorse_StartHighJump = 0x8087BFD4; // type:func
+EnHorse_Stub2 = 0x8087C110; // type:func
+EnHorse_HighJump = 0x8087C11C; // type:func
+EnHorse_InitInactive = 0x8087C2E0; // type:func
+EnHorse_Inactive = 0x8087C330; // type:func
+EnHorse_PlayIdleAnimation = 0x8087C45C; // type:func
+EnHorse_ChangeIdleAnimation = 0x8087C62C; // type:func
+EnHorse_ResetIdleAnimation = 0x8087C654; // type:func
+EnHorse_StartIdleRidable = 0x8087C688; // type:func
+EnHorse_Idle = 0x8087C6BC; // type:func
+EnHorse_StartMovingAnimation = 0x8087C8A4; // type:func
+EnHorse_SetFollowAnimation = 0x8087CA0C; // type:func
+EnHorse_FollowPlayer = 0x8087CB40; // type:func
+EnHorse_InitIngoHorse = 0x8087CF64; // type:func
+EnHorse_SetIngoAnimation = 0x8087CFE8; // type:func
+EnHorse_UpdateIngoHorseAnim = 0x8087D08C; // type:func
+EnHorse_UpdateIngoRace = 0x8087D3A0; // type:func
+EnHorse_CsMoveInit = 0x8087D550; // type:func
+EnHorse_CsMoveToPoint = 0x8087D5BC; // type:func
+EnHorse_CsSetAnimHighJump = 0x8087D70C; // type:func
+EnHorse_CsPlayHighJumpAnim = 0x8087D730; // type:func
+EnHorse_CsJumpInit = 0x8087D864; // type:func
+EnHorse_CsJump = 0x8087D89C; // type:func
+EnHorse_CsRearingInit = 0x8087DAF4; // type:func
+EnHorse_CsRearing = 0x8087DC14; // type:func
+EnHorse_WarpMoveInit = 0x8087DDBC; // type:func
+EnHorse_CsWarpMoveToPoint = 0x8087DEA4; // type:func
+EnHorse_CsWarpRearingInit = 0x8087DFF4; // type:func
+EnHorse_CsWarpRearing = 0x8087E17C; // type:func
+EnHorse_InitCutscene = 0x8087E324; // type:func
+EnHorse_GetCutsceneFunctionIndex = 0x8087E348; // type:func
+EnHorse_CutsceneUpdate = 0x8087E398; // type:func
+EnHorse_UpdateHbaRaceInfo = 0x8087E4F0; // type:func
+EnHorse_InitHorsebackArchery = 0x8087E6E0; // type:func
+EnHorse_UpdateHbaAnim = 0x8087E714; // type:func
+EnHorse_UpdateHorsebackArchery = 0x8087EA4C; // type:func
+EnHorse_InitFleePlayer = 0x8087ECD8; // type:func
+EnHorse_FleePlayer = 0x8087ED00; // type:func
+EnHorse_BridgeJumpInit = 0x8087F554; // type:func
+EnHorse_StartBridgeJump = 0x8087F78C; // type:func
+EnHorse_BridgeJumpMove = 0x8087F83C; // type:func
+EnHorse_CheckBridgeJumpLanding = 0x8087F998; // type:func
+EnHorse_BridgeJump = 0x8087FA84; // type:func
+EnHorse_Vec3fOffset = 0x8087FAC8; // type:func
+EnHorse_CalcFloorHeight = 0x8087FB44; // type:func
+EnHorse_ObstructMovement = 0x8087FC84; // type:func
+EnHorse_CheckFloors = 0x8087FDAC; // type:func
+EnHorse_MountDismount = 0x8088032C; // type:func
+EnHorse_StickDirection = 0x80880430; // type:func
+EnHorse_UpdateStick = 0x808804BC; // type:func
+EnHorse_ResolveCollision = 0x808804FC; // type:func
+EnHorse_BgCheckSlowMoving = 0x80880654; // type:func
+EnHorse_UpdateBgCheckInfo = 0x80880794; // type:func
+EnHorse_CheckBoost = 0x808812A0; // type:func
+EnHorse_RegenBoost = 0x8088144C; // type:func
+EnHorse_UpdatePlayerDir = 0x80881678; // type:func
+EnHorse_TiltBody = 0x80881784; // type:func
+EnHorse_UpdateConveyors = 0x80881880; // type:func
+EnHorse_RandInt = 0x80881988; // type:func
+EnHorse_Update = 0x808819BC; // type:func
+EnHorse_PlayerDirToMountSide = 0x808821E8; // type:func
+EnHorse_MountSideCheck = 0x80882228; // type:func
+EnHorse_GetMountSide = 0x8088232C; // type:func
+EnHorse_RandomOffset = 0x80882384; // type:func
+EnHorse_PostDraw = 0x80882420; // type:func
+EnHorse_OverrideLimbDraw = 0x80882F18; // type:func
+EnHorse_Draw = 0x80883018; // type:func
+EnArrow_SetupAction = 0x808847C0; // type:func
+EnArrow_Init = 0x808847CC; // type:func
+EnArrow_Destroy = 0x808849D4; // type:func
+EnArrow_Shoot = 0x80884A5C; // type:func
+func_809B3CEC = 0x80884B74; // type:func
+EnArrow_CarryActor = 0x80884C5C; // type:func
+EnArrow_Fly = 0x80884E60; // type:func
+func_809B45E0 = 0x80885468; // type:func
+func_809B4640 = 0x808854C8; // type:func
+EnArrow_Update = 0x80885530; // type:func
+func_809B4800 = 0x8088568C; // type:func
+EnArrow_Draw = 0x808857F4; // type:func
+EnElf_SetupAction = 0x80885EC0; // type:func
+func_80A01C38 = 0x80885ECC; // type:func
+func_80A01F90 = 0x80886224; // type:func
+func_80A01FE0 = 0x80886278; // type:func
+func_80A020A4 = 0x80886340; // type:func
+func_80A0214C = 0x808863EC; // type:func
+func_80A0232C = 0x808865CC; // type:func
+EnElf_GetColorValue = 0x80886644; // type:func
+EnElf_Init = 0x808866B4; // type:func
+func_80A0299C = 0x80886C20; // type:func
+func_80A029A8 = 0x80886C30; // type:func
+EnElf_Destroy = 0x80886C58; // type:func
+func_80A02A20 = 0x80886CA8; // type:func
+func_80A02AA4 = 0x80886D2C; // type:func
+func_80A02B38 = 0x80886DC0; // type:func
+func_80A02BD8 = 0x80886E5C; // type:func
+func_80A02C98 = 0x80886F1C; // type:func
+func_80A02E30 = 0x808870B4; // type:func
+func_80A02EC0 = 0x80887140; // type:func
+func_80A02F2C = 0x808871AC; // type:func
+func_80A03018 = 0x80887298; // type:func
+func_80A03148 = 0x808873CC; // type:func
+func_80A0329C = 0x80887524; // type:func
+func_80A0353C = 0x808877C8; // type:func
+func_80A03604 = 0x80887890; // type:func
+func_80A03610 = 0x808878A0; // type:func
+func_80A03814 = 0x80887AA8; // type:func
+func_80A03990 = 0x80887C28; // type:func
+func_80A03AB0 = 0x80887D4C; // type:func
+EnElf_UpdateLights = 0x80887DB0; // type:func
+func_80A03CF8 = 0x80887F84; // type:func
+EnElf_ChangeColor = 0x8088861C; // type:func
+func_80A04414 = 0x808886A8; // type:func
+func_80A0461C = 0x808888B4; // type:func
+EnElf_SpawnSparkles = 0x80888C50; // type:func
+func_80A04D90 = 0x80889030; // type:func
+func_80A04DE4 = 0x80889084; // type:func
+func_80A04F94 = 0x80889238; // type:func
+func_80A05040 = 0x808892E8; // type:func
+func_80A05114 = 0x808893C4; // type:func
+func_80A05188 = 0x80889440; // type:func
+func_80A05208 = 0x808894C8; // type:func
+func_80A052F4 = 0x808895BC; // type:func
+func_80A053F0 = 0x808896C0; // type:func
+EnElf_Update = 0x8088993C; // type:func
+EnElf_OverrideLimbDraw = 0x80889998; // type:func
+EnElf_Draw = 0x80889ABC; // type:func
+EnElf_GetCuePos = 0x8088A134; // type:func
+EnNiw_Init = 0x8088A880; // type:func
+EnNiw_Destroy = 0x8088AD84; // type:func
+func_80AB5BF8 = 0x8088ADB0; // type:func
+EnNiw_SpawnAttackCucco = 0x8088B158; // type:func
+func_80AB6100 = 0x8088B2A0; // type:func
+EnNiw_ResetAction = 0x8088B41C; // type:func
+func_80AB6324 = 0x8088B4C4; // type:func
+func_80AB63A8 = 0x8088B548; // type:func
+func_80AB6450 = 0x8088B5F0; // type:func
+func_80AB6570 = 0x8088B710; // type:func
+func_80AB6A38 = 0x8088BBDC; // type:func
+func_80AB6BF8 = 0x8088BD9C; // type:func
+func_80AB6D08 = 0x8088BEAC; // type:func
+func_80AB6EB4 = 0x8088C058; // type:func
+func_80AB6F04 = 0x8088C0A8; // type:func
+func_80AB70A0 = 0x8088C248; // type:func
+func_80AB70F8 = 0x8088C2A0; // type:func
+func_80AB714C = 0x8088C2F4; // type:func
+func_80AB7204 = 0x8088C3AC; // type:func
+func_80AB7290 = 0x8088C43C; // type:func
+func_80AB7328 = 0x8088C4D4; // type:func
+func_80AB7420 = 0x8088C5D0; // type:func
+func_80AB747C = 0x8088C62C; // type:func
+EnNiw_Update = 0x8088C6E4; // type:func
+EnNiw_OverrideLimbDraw = 0x8088CF90; // type:func
+EnNiw_Draw = 0x8088D0E8; // type:func
+EnNiw_SpawnFeather = 0x8088D198; // type:func
+EnNiw_UpdateEffects = 0x8088D288; // type:func
+EnNiw_DrawEffects = 0x8088D43C; // type:func
+EnTite_SetupAction = 0x8088DBB0; // type:func
+EnTite_Init = 0x8088DBBC; // type:func
+EnTite_Destroy = 0x8088DD14; // type:func
+EnTite_SetupIdle = 0x8088DD5C; // type:func
+EnTite_Idle = 0x8088DDC4; // type:func
+EnTite_SetupAttack = 0x8088DF08; // type:func
+EnTite_Attack = 0x8088DF7C; // type:func
+EnTite_SetupTurnTowardPlayer = 0x8088E624; // type:func
+EnTite_TurnTowardPlayer = 0x8088E6C0; // type:func
+EnTite_SetupMoveTowardPlayer = 0x8088E95C; // type:func
+EnTite_MoveTowardPlayer = 0x8088EA18; // type:func
+EnTite_SetupRecoil = 0x8088EF28; // type:func
+EnTite_Recoil = 0x8088EF94; // type:func
+EnTite_SetupStunned = 0x8088F2EC; // type:func
+EnTite_Stunned = 0x8088F3A0; // type:func
+EnTite_SetupDeathCry = 0x8088F73C; // type:func
+EnTite_DeathCry = 0x8088F770; // type:func
+EnTite_FallApart = 0x8088F7E4; // type:func
+EnTite_SetupFlipOnBack = 0x8088F870; // type:func
+EnTite_FlipOnBack = 0x8088F98C; // type:func
+EnTite_SetupFlipUpright = 0x8088FB48; // type:func
+EnTite_FlipUpright = 0x8088FB98; // type:func
+EnTite_CheckDamage = 0x8088FCC0; // type:func
+EnTite_Update = 0x8088FE98; // type:func
+EnTite_PostLimbDraw = 0x80890284; // type:func
+EnTite_Draw = 0x80890374; // type:func
+EnReeba_Init = 0x80890950; // type:func
+EnReeba_Destroy = 0x80890B2C; // type:func
+EnReeba_SetupSurface = 0x80890BA4; // type:func
+EnReeba_Surface = 0x80890CB8; // type:func
+EnReeba_Move = 0x80890ED8; // type:func
+EnReeba_SetupMoveBig = 0x80890FF4; // type:func
+EnReeba_MoveBig = 0x80891018; // type:func
+EnReeba_Recoiled = 0x80891288; // type:func
+EnReeba_SetupSink = 0x808912F4; // type:func
+EnReeba_Sink = 0x8089134C; // type:func
+EnReeba_SetupDamaged = 0x8089145C; // type:func
+EnReeba_Damaged = 0x808914C0; // type:func
+EnReeba_SetupStunned = 0x80891558; // type:func
+EnReeba_Stunned = 0x808915A8; // type:func
+EnReeba_StunDie = 0x8089170C; // type:func
+EnReeba_SetupDie = 0x80891834; // type:func
+EnReeba_Die = 0x808918A8; // type:func
+EnReeba_StunRecover = 0x80891A88; // type:func
+EnReeba_CheckDamage = 0x80891B1C; // type:func
+EnReeba_Update = 0x80891D58; // type:func
+EnReeba_Draw = 0x80892008; // type:func
+EnPeehat_SetupAction = 0x808923C0; // type:func
+EnPeehat_Init = 0x808923CC; // type:func
+EnPeehat_Destroy = 0x8089263C; // type:func
+EnPeehat_SpawnDust = 0x808926B0; // type:func
+EnPeehat_HitWhenGrounded = 0x80892848; // type:func
+EnPeehat_Ground_SetStateGround = 0x80892A64; // type:func
+EnPeehat_Ground_StateGround = 0x80892AFC; // type:func
+EnPeehat_Flying_SetStateGround = 0x80892C50; // type:func
+EnPeehat_Flying_StateGrounded = 0x80892CDC; // type:func
+EnPeehat_Flying_SetStateFly = 0x80892DE0; // type:func
+EnPeehat_Flying_StateFly = 0x80892E28; // type:func
+EnPeehat_Ground_SetStateRise = 0x80892FA0; // type:func
+EnPeehat_Ground_StateRise = 0x80893048; // type:func
+EnPeehat_Flying_SetStateRise = 0x80893210; // type:func
+EnPeehat_Flying_StateRise = 0x808932B8; // type:func
+EnPeehat_Ground_SetStateSeekPlayer = 0x80893480; // type:func
+EnPeehat_Ground_StateSeekPlayer = 0x808934D0; // type:func
+EnPeehat_Larva_SetStateSeekPlayer = 0x8089364C; // type:func
+EnPeehat_Larva_StateSeekPlayer = 0x80893698; // type:func
+EnPeehat_Ground_SetStateLanding = 0x80893A70; // type:func
+EnPeehat_Ground_StateLanding = 0x80893AB8; // type:func
+EnPeehat_Flying_SetStateLanding = 0x80893C6C; // type:func
+EnPeehat_Flying_StateLanding = 0x80893CB4; // type:func
+EnPeehat_Ground_SetStateHover = 0x80893E64; // type:func
+EnPeehat_Ground_StateHover = 0x80893EF4; // type:func
+EnPeehat_Ground_SetStateReturnHome = 0x80894150; // type:func
+EnPeehat_Ground_StateReturnHome = 0x80894188; // type:func
+EnPeehat_SetStateAttackRecoil = 0x80894374; // type:func
+EnPeehat_StateAttackRecoil = 0x808943D4; // type:func
+EnPeehat_SetStateBoomerangStunned = 0x808945B0; // type:func
+EnPeehat_StateBoomerangStunned = 0x80894634; // type:func
+EnPeehat_Adult_SetStateDie = 0x808946B0; // type:func
+EnPeehat_Adult_StateDie = 0x8089471C; // type:func
+EnPeehat_SetStateExplode = 0x808949DC; // type:func
+EnPeehat_StateExplode = 0x80894A34; // type:func
+EnPeehat_Adult_CollisionCheck = 0x80894B0C; // type:func
+EnPeehat_Update = 0x80894CF8; // type:func
+EnPeehat_OverrideLimbDraw = 0x8089515C; // type:func
+EnPeehat_PostLimbDraw = 0x80895334; // type:func
+EnPeehat_Draw = 0x808954E8; // type:func
+EnHoll_SetupAction = 0x80895AC0; // type:func
+EnHoll_IsKokiriLayer8 = 0x80895ACC; // type:func
+EnHoll_ChooseAction = 0x80895AFC; // type:func
+EnHoll_Init = 0x80895B64; // type:func
+EnHoll_Destroy = 0x80895BA0; // type:func
+EnHoll_SwapRooms = 0x80895BD0; // type:func
+EnHoll_HorizontalVisibleNarrow = 0x80895C8C; // type:func
+EnHoll_HorizontalInvisible = 0x80895ECC; // type:func
+EnHoll_VerticalDownBgCoverLarge = 0x8089607C; // type:func
+EnHoll_VerticalBgCover = 0x80896268; // type:func
+EnHoll_VerticalInvisible = 0x808963E8; // type:func
+EnHoll_HorizontalBgCoverSwitchFlag = 0x808964E0; // type:func
+EnHoll_WaitRoomLoaded = 0x808966F0; // type:func
+EnHoll_Update = 0x80896768; // type:func
+EnHoll_Draw = 0x8089678C; // type:func
+EnSceneChange_SetupAction = 0x80896A90; // type:func
+EnSceneChange_Init = 0x80896A9C; // type:func
+EnSceneChange_Destroy = 0x80896AC4; // type:func
+EnSceneChange_DoNothing = 0x80896AD4; // type:func
+EnSceneChange_Update = 0x80896AE4; // type:func
+EnSceneChange_Draw = 0x80896B08; // type:func
+EnZf_SetupAction = 0x80896BC0; // type:func
+EnZf_PrimaryFloorCheck = 0x80896BCC; // type:func
+EnZf_SecondaryFloorCheck = 0x80896D3C; // type:func
+EnZf_Init = 0x80896E6C; // type:func
+EnZf_Destroy = 0x808971A4; // type:func
+EnZf_FindPlatform = 0x80897228; // type:func
+EnZf_FindNextPlatformAwayFromPlayer = 0x808973F0; // type:func
+EnZf_FindNextPlatformTowardsPlayer = 0x80897694; // type:func
+EnZf_CanAttack = 0x80897870; // type:func
+func_80B44DC4 = 0x80897944; // type:func
+EnZf_ChooseAction = 0x80897A10; // type:func
+EnZf_SetupDropIn = 0x80897C30; // type:func
+EnZf_DropIn = 0x80897CF8; // type:func
+func_80B45384 = 0x80897F08; // type:func
+func_80B4543C = 0x80897FC0; // type:func
+EnZf_SetupApproachPlayer = 0x8089823C; // type:func
+EnZf_ApproachPlayer = 0x808982D0; // type:func
+EnZf_SetupJumpForward = 0x808989BC; // type:func
+EnZf_JumpForward = 0x80898A7C; // type:func
+func_80B4604C = 0x80898BD8; // type:func
+func_80B46098 = 0x80898C24; // type:func
+func_80B462E4 = 0x80898E70; // type:func
+func_80B463E4 = 0x80898F78; // type:func
+EnZf_SetupSlash = 0x808995BC; // type:func
+EnZf_Slash = 0x80899678; // type:func
+EnZf_SetupRecoilFromBlockedSlash = 0x80899904; // type:func
+EnZf_RecoilFromBlockedSlash = 0x80899978; // type:func
+EnZf_SetupJumpBack = 0x80899A30; // type:func
+EnZf_JumpBack = 0x80899AD0; // type:func
+EnZf_SetupStunned = 0x80899BF4; // type:func
+EnZf_Stunned = 0x80899CC4; // type:func
+EnZf_SetupSheatheSword = 0x80899F04; // type:func
+EnZf_SheatheSword = 0x80899FE0; // type:func
+EnZf_SetupHopAndTaunt = 0x8089A08C; // type:func
+EnZf_HopAndTaunt = 0x8089A0EC; // type:func
+EnZf_SetupHopAway = 0x8089A344; // type:func
+EnZf_HopAway = 0x8089A3C4; // type:func
+EnZf_SetupDrawSword = 0x8089A810; // type:func
+EnZf_DrawSword = 0x8089A8A4; // type:func
+EnZf_SetupDamaged = 0x8089A954; // type:func
+EnZf_Damaged = 0x8089AA60; // type:func
+EnZf_SetupJumpUp = 0x8089ADC0; // type:func
+EnZf_JumpUp = 0x8089AE68; // type:func
+func_80B483E4 = 0x8089AF94; // type:func
+EnZf_CircleAroundPlayer = 0x8089B130; // type:func
+EnZf_SetupDie = 0x8089B8B0; // type:func
+EnZf_Die = 0x8089BA14; // type:func
+EnZf_UpdateHeadRotation = 0x8089BB54; // type:func
+EnZf_UpdateDamage = 0x8089BC78; // type:func
+EnZf_Update = 0x8089BE10; // type:func
+EnZf_OverrideLimbDraw = 0x8089C1C8; // type:func
+EnZf_PostLimbDraw = 0x8089C254; // type:func
+EnZf_Draw = 0x8089C4A8; // type:func
+EnZf_SetupCircleAroundPlayer = 0x8089C6F4; // type:func
+EnZf_DodgeRangedEngaging = 0x8089C7C0; // type:func
+EnZf_DodgeRangedWaiting = 0x8089C9EC; // type:func
+EnHata_Init = 0x8089D6B0; // type:func
+EnHata_Destroy = 0x8089D7E8; // type:func
+EnHata_Update = 0x8089D830; // type:func
+EnHata_OverrideLimbDraw = 0x8089DA4C; // type:func
+EnHata_PostLimbDraw = 0x8089DAD0; // type:func
+EnHata_Draw = 0x8089DAE8; // type:func
+func_808C1190 = 0x8089DC40; // type:func
+func_808C11D0 = 0x8089DC80; // type:func
+func_808C1200 = 0x8089DCB0; // type:func
+func_808C1230 = 0x8089DCE0; // type:func
+func_808C1278 = 0x8089DD28; // type:func
+func_808C12C4 = 0x8089DD74; // type:func
+func_808C1554 = 0x8089E004; // type:func
+func_808C17C8 = 0x8089E284; // type:func
+BossDodongo_AteExplosive = 0x8089E36C; // type:func
+BossDodongo_Init = 0x8089E42C; // type:func
+BossDodongo_Destroy = 0x8089E708; // type:func
+BossDodongo_SetupIntroCutscene = 0x8089E748; // type:func
+BossDodongo_IntroCutscene = 0x8089E7C8; // type:func
+BossDodongo_SetupDamaged = 0x8089F344; // type:func
+BossDodongo_SetupExplode = 0x8089F3D8; // type:func
+BossDodongo_SetupWalk = 0x8089F47C; // type:func
+BossDodongo_SetupRoll = 0x8089F50C; // type:func
+BossDodongo_SetupBlowFire = 0x8089F580; // type:func
+BossDodongo_SetupInhale = 0x8089F608; // type:func
+BossDodongo_Damaged = 0x8089F698; // type:func
+BossDodongo_Explode = 0x8089F74C; // type:func
+BossDodongo_LayDown = 0x8089F9A0; // type:func
+BossDodongo_Vulnerable = 0x8089FA80; // type:func
+BossDodongo_GetUp = 0x8089FB6C; // type:func
+BossDodongo_BlowFire = 0x8089FBD0; // type:func
+BossDodongo_Inhale = 0x8089FD00; // type:func
+BossDodongo_Walk = 0x8089FDD4; // type:func
+BossDodongo_Roll = 0x808A01E4; // type:func
+BossDodongo_Update = 0x808A05E0; // type:func
+BossDodongo_OverrideLimbDraw = 0x808A1420; // type:func
+BossDodongo_PostLimbDraw = 0x808A1644; // type:func
+BossDodongo_Draw = 0x808A1728; // type:func
+func_808C4F6C = 0x808A19F0; // type:func
+func_808C50A8 = 0x808A1B2C; // type:func
+BossDodongo_PlayerYawCheck = 0x808A1C78; // type:func
+BossDodongo_PlayerPosCheck = 0x808A1CD4; // type:func
+BossDodongo_SpawnFire = 0x808A1D68; // type:func
+BossDodongo_UpdateDamage = 0x808A1DDC; // type:func
+BossDodongo_SetupDeathCutscene = 0x808A1F48; // type:func
+BossDodongo_DeathCutscene = 0x808A2000; // type:func
+BossDodongo_UpdateEffects = 0x808A3740; // type:func
+BossDodongo_DrawEffects = 0x808A3874; // type:func
+BossGoma_ClearPixels16x16Rgba16 = 0x808A7740; // type:func
+BossGoma_ClearPixels32x32Rgba16 = 0x808A7770; // type:func
+BossGoma_ClearPixels = 0x808A77C4; // type:func
+BossGoma_Init = 0x808A7974; // type:func
+BossGoma_PlayEffectsAndSfx = 0x808A7B2C; // type:func
+BossGoma_Destroy = 0x808A7C34; // type:func
+BossGoma_SetupDefeated = 0x808A7C74; // type:func
+BossGoma_SetupEncounter = 0x808A7D3C; // type:func
+BossGoma_SetupFloorIdle = 0x808A7DE0; // type:func
+BossGoma_SetupCeilingIdle = 0x808A7E68; // type:func
+BossGoma_SetupFallJump = 0x808A7EEC; // type:func
+BossGoma_SetupFallStruckDown = 0x808A7F68; // type:func
+BossGoma_SetupCeilingSpawnGohmas = 0x808A7FE4; // type:func
+BossGoma_SetupCeilingPrepareSpawnGohmas = 0x808A8058; // type:func
+BossGoma_SetupWallClimb = 0x808A80D0; // type:func
+BossGoma_SetupCeilingMoveToCenter = 0x808A8154; // type:func
+BossGoma_SetupFloorMain = 0x808A81E8; // type:func
+BossGoma_SetupFloorLand = 0x808A8268; // type:func
+BossGoma_SetupFloorLandStruckDown = 0x808A82F4; // type:func
+BossGoma_SetupFloorStunned = 0x808A8398; // type:func
+BossGoma_SetupFloorAttackPosture = 0x808A8408; // type:func
+BossGoma_SetupFloorPrepareAttack = 0x808A847C; // type:func
+BossGoma_SetupFloorAttack = 0x808A84F0; // type:func
+BossGoma_SetupFloorDamaged = 0x808A856C; // type:func
+BossGoma_UpdateCeilingMovement = 0x808A85E0; // type:func
+BossGoma_SetupEncounterState4 = 0x808A881C; // type:func
+BossGoma_Encounter = 0x808A89CC; // type:func
+BossGoma_Defeated = 0x808A9AC4; // type:func
+BossGoma_FloorAttackPosture = 0x808AA934; // type:func
+BossGoma_FloorPrepareAttack = 0x808AAA3C; // type:func
+BossGoma_FloorAttack = 0x808AAA98; // type:func
+BossGoma_FloorDamaged = 0x808AACE8; // type:func
+BossGoma_FloorLandStruckDown = 0x808AAD80; // type:func
+BossGoma_FloorLand = 0x808AAE24; // type:func
+BossGoma_FloorStunned = 0x808AAE80; // type:func
+BossGoma_FallJump = 0x808AAFAC; // type:func
+BossGoma_FallStruckDown = 0x808AB060; // type:func
+BossGoma_CeilingSpawnGohmas = 0x808AB120; // type:func
+BossGoma_CeilingPrepareSpawnGohmas = 0x808AB27C; // type:func
+BossGoma_FloorIdle = 0x808AB2D8; // type:func
+BossGoma_CeilingIdle = 0x808AB340; // type:func
+BossGoma_FloorMain = 0x808AB438; // type:func
+BossGoma_WallClimb = 0x808AB6A8; // type:func
+BossGoma_CeilingMoveToCenter = 0x808AB774; // type:func
+BossGoma_UpdateEye = 0x808AB970; // type:func
+BossGoma_UpdateTailLimbsScale = 0x808ABBB8; // type:func
+BossGoma_UpdateHit = 0x808ABCC4; // type:func
+BossGoma_UpdateMainEnvColor = 0x808ABEA4; // type:func
+BossGoma_UpdateEyeEnvColor = 0x808AC020; // type:func
+BossGoma_Update = 0x808AC0C8; // type:func
+BossGoma_OverrideLimbDraw = 0x808AC298; // type:func
+BossGoma_PostLimbDraw = 0x808AC6E4; // type:func
+BossGoma_EmptyDlist = 0x808AC8E8; // type:func
+BossGoma_NoBackfaceCullingDlist = 0x808AC90C; // type:func
+BossGoma_Draw = 0x808AC978; // type:func
+BossGoma_SpawnChildGohma = 0x808ACA68; // type:func
+func_80B4AB40 = 0x808AD6E0; // type:func
+func_80B4AB48 = 0x808AD6E8; // type:func
+EnZl1_Init = 0x808AD6F0; // type:func
+EnZl1_Destroy = 0x808AD980; // type:func
+func_80B4AE18 = 0x808AD9C0; // type:func
+func_80B4AF18 = 0x808ADAC0; // type:func
+func_80B4B010 = 0x808ADBB8; // type:func
+func_80B4B240 = 0x808ADDF0; // type:func
+func_80B4B7F4 = 0x808AE3A4; // type:func
+func_80B4B834 = 0x808AE3E8; // type:func
+func_80B4B874 = 0x808AE42C; // type:func
+func_80B4B8B4 = 0x808AE46C; // type:func
+func_80B4BBC4 = 0x808AE77C; // type:func
+func_80B4BC78 = 0x808AE830; // type:func
+func_80B4BF2C = 0x808AEAE4; // type:func
+EnZl1_Update = 0x808AEDD8; // type:func
+EnZl1_OverrideLimbDraw = 0x808AEEFC; // type:func
+EnZl1_PostLimbDraw = 0x808AEFBC; // type:func
+EnZl1_Draw = 0x808AF018; // type:func
+EnViewer_SetupAction = 0x808B14F0; // type:func
+EnViewer_Init = 0x808B14FC; // type:func
+EnViewer_Destroy = 0x808B15D0; // type:func
+EnViewer_InitAnimGanondorfOrZelda = 0x808B15FC; // type:func
+EnViewer_InitAnimImpa = 0x808B1748; // type:func
+EnViewer_InitAnimHorse = 0x808B17D8; // type:func
+EnViewer_InitImpl = 0x808B1870; // type:func
+EnViewer_UpdateImpl = 0x808B1A2C; // type:func
+EnViewer_Update = 0x808B2584; // type:func
+EnViewer_Ganondorf3OverrideLimbDraw = 0x808B25D8; // type:func
+EnViewer_Ganondorf9PostLimbDraw = 0x808B2648; // type:func
+EnViewer_GanondorfPostLimbDrawUpdateCapeVec = 0x808B2710; // type:func
+EnViewer_DrawGanondorf = 0x808B2750; // type:func
+EnViewer_DrawHorse = 0x808B2B7C; // type:func
+EnViewer_ZeldaOverrideLimbDraw = 0x808B2BA8; // type:func
+EnViewer_ZeldaPostLimbDraw = 0x808B2C28; // type:func
+EnViewer_DrawZelda = 0x808B2C70; // type:func
+EnViewer_ImpaOverrideLimbDraw = 0x808B3314; // type:func
+EnViewer_DrawImpa = 0x808B333C; // type:func
+EnViewer_Draw = 0x808B3450; // type:func
+EnViewer_UpdatePosition = 0x808B3540; // type:func
+EnViewer_InitFireEffect = 0x808B3910; // type:func
+EnViewer_DrawFireEffects = 0x808B3A58; // type:func
+EnViewer_UpdateGanondorfCape = 0x808B3D9C; // type:func
+EnGoma_Init = 0x808B43B0; // type:func
+EnGoma_Destroy = 0x808B473C; // type:func
+EnGoma_SetupFlee = 0x808B478C; // type:func
+EnGoma_Flee = 0x808B4830; // type:func
+EnGoma_EggFallToGround = 0x808B48D0; // type:func
+EnGoma_Egg = 0x808B4B5C; // type:func
+EnGoma_SetupHatch = 0x808B4D9C; // type:func
+EnGoma_Hatch = 0x808B4E64; // type:func
+EnGoma_SetupHurt = 0x808B4EAC; // type:func
+EnGoma_Hurt = 0x808B4F98; // type:func
+EnGoma_SetupDie = 0x808B5020; // type:func
+EnGoma_Die = 0x808B50E0; // type:func
+EnGoma_SetupDead = 0x808B5184; // type:func
+EnGoma_Dead = 0x808B51FC; // type:func
+EnGoma_SetupStand = 0x808B536C; // type:func
+EnGoma_SetupChasePlayer = 0x808B53F8; // type:func
+EnGoma_SetupPrepareJump = 0x808B5478; // type:func
+EnGoma_PrepareJump = 0x808B54F4; // type:func
+EnGoma_SetupLand = 0x808B558C; // type:func
+EnGoma_Land = 0x808B5604; // type:func
+EnGoma_SetupJump = 0x808B5670; // type:func
+EnGoma_Jump = 0x808B5718; // type:func
+EnGoma_Stand = 0x808B57D0; // type:func
+EnGoma_ChasePlayer = 0x808B584C; // type:func
+EnGoma_SetupStunned = 0x808B5954; // type:func
+EnGoma_Stunned = 0x808B59F0; // type:func
+EnGoma_LookAtPlayer = 0x808B5AF0; // type:func
+EnGoma_UpdateHit = 0x808B5B9C; // type:func
+EnGoma_UpdateEyeEnvColor = 0x808B5DCC; // type:func
+EnGoma_SetFloorRot = 0x808B5E5C; // type:func
+EnGoma_Update = 0x808B5F70; // type:func
+EnGoma_OverrideLimbDraw = 0x808B61BC; // type:func
+EnGoma_NoBackfaceCullingDlist = 0x808B6318; // type:func
+EnGoma_Draw = 0x808B6384; // type:func
+EnGoma_Debris = 0x808B6810; // type:func
+EnGoma_SpawnHatchDebris = 0x808B6854; // type:func
+EnGoma_BossLimb = 0x808B69B8; // type:func
+BgPushbox_SetupAction = 0x808B7060; // type:func
+BgPushbox_Init = 0x808B706C; // type:func
+BgPushbox_Destroy = 0x808B7104; // type:func
+BgPushbox_UpdateImpl = 0x808B7138; // type:func
+BgPushbox_Update = 0x808B7214; // type:func
+BgPushbox_Draw = 0x808B7244; // type:func
+EnBubble_SetDimensions = 0x808B7360; // type:func
+func_809CBCBC = 0x808B741C; // type:func
+func_809CBCEC = 0x808B7450; // type:func
+EnBubble_DamagePlayer = 0x808B7474; // type:func
+EnBubble_Explosion = 0x808B74E0; // type:func
+func_809CBFD4 = 0x808B773C; // type:func
+func_809CC020 = 0x808B7788; // type:func
+EnBubble_Vec3fNormalizedReflect = 0x808B77DC; // type:func
+EnBubble_Vec3fNormalize = 0x808B7864; // type:func
+EnBubble_Fly = 0x808B78DC; // type:func
+func_809CC648 = 0x808B7DB8; // type:func
+EnBubble_DetectPop = 0x808B7E54; // type:func
+func_809CC774 = 0x808B7EE4; // type:func
+EnBubble_Init = 0x808B7FF8; // type:func
+EnBubble_Destroy = 0x808B80F8; // type:func
+EnBubble_Wait = 0x808B8124; // type:func
+EnBubble_Pop = 0x808B81D8; // type:func
+EnBubble_Disappear = 0x808B8228; // type:func
+EnBubble_Regrow = 0x808B8270; // type:func
+EnBubble_Update = 0x808B82E0; // type:func
+EnBubble_Draw = 0x808B835C; // type:func
+DoorShutter_SetupAction = 0x808B8780; // type:func
+DoorShutter_SetupDoor = 0x808B8790; // type:func
+DoorShutter_Init = 0x808B8978; // type:func
+DoorShutter_Destroy = 0x808B8B90; // type:func
+DoorShutter_WaitForObject = 0x808B8C00; // type:func
+DoorShutter_GetPlayerDistance = 0x808B8D3C; // type:func
+DoorShutter_GetPlayerSide = 0x808B8DD4; // type:func
+DoorShutter_WaitClear = 0x808B8F54; // type:func
+DoorShutter_Unopenable = 0x808B9000; // type:func
+DoorShutter_Idle = 0x808B9010; // type:func
+DoorShutter_InitOpeningDoorCam = 0x808B9164; // type:func
+DoorShutter_UpdateOpening = 0x808B921C; // type:func
+DoorShutter_UpdateBarsClosed = 0x808B9314; // type:func
+DoorShutter_BarAndWaitSwitchFlag = 0x808B93F8; // type:func
+DoorShutter_UnbarredCheckSwitchFlag = 0x808B94B0; // type:func
+DoorShutter_Open = 0x808B951C; // type:func
+DoorShutter_Unbar = 0x808B966C; // type:func
+DoorShutter_SetupClosed = 0x808B973C; // type:func
+DoorShutter_Close = 0x808B9908; // type:func
+DoorShutter_JabuDoorClose = 0x808B9A4C; // type:func
+DoorShutter_WaitPlayerSurprised = 0x808B9A90; // type:func
+DoorShutter_GohmaBlockFall = 0x808B9AE8; // type:func
+DoorShutter_GohmaBlockBounce = 0x808B9BE4; // type:func
+DoorShutter_PhantomGanonBarsRaise = 0x808B9C70; // type:func
+DoorShutter_Update = 0x808B9D00; // type:func
+DoorShutter_DrawJabuJabuDoor = 0x808B9D54; // type:func
+DoorShutter_ShouldDraw = 0x808B9F44; // type:func
+DoorShutter_Draw = 0x808B9FF0; // type:func
+DoorShutter_RequestQuakeAndRumble = 0x808BA544; // type:func
+EnDodojr_Init = 0x808BAA40; // type:func
+EnDodojr_Destroy = 0x808BAB28; // type:func
+EnDodojr_DoSwallowedBombEffects = 0x808BAB54; // type:func
+EnDodojr_SpawnLargeDust = 0x808BAB98; // type:func
+EnDodojr_SpawnSmallDust = 0x808BADB8; // type:func
+EnDodojr_UpdateBounces = 0x808BAF38; // type:func
+EnDodojr_SetupCrawlTowardsTarget = 0x808BB01C; // type:func
+EnDodojr_SetupFlipBounce = 0x808BB0A4; // type:func
+EnDodojr_SetupSwallowedBombDeathSequence = 0x808BB148; // type:func
+EnDodojr_SetupJumpAttackBounce = 0x808BB1B8; // type:func
+EnDodojr_SetupDespawn = 0x808BB23C; // type:func
+EnDodojr_SetupEatBomb = 0x808BB2A8; // type:func
+EnDodojr_CheckNearbyBombs = 0x808BB324; // type:func
+EnDodojr_TryEatBomb = 0x808BB450; // type:func
+EnDodojr_UpdateCrawl = 0x808BB4D4; // type:func
+EnDodojr_IsPlayerWithinAttackRange = 0x808BB6E8; // type:func
+EnDodojr_SetupStandardDeathBounce = 0x808BB718; // type:func
+EnDodojr_CheckDamaged = 0x808BB764; // type:func
+EnDodojr_UpdateCollider = 0x808BB920; // type:func
+EnDodojr_WaitUnderground = 0x808BBA30; // type:func
+EnDodojr_EmergeFromGround = 0x808BBB48; // type:func
+EnDodojr_CrawlTowardsTarget = 0x808BBC10; // type:func
+EnDodojr_EatBomb = 0x808BBD14; // type:func
+EnDodojr_SwallowBomb = 0x808BBDC4; // type:func
+EnDodojr_SwallowedBombDeathBounce = 0x808BBE34; // type:func
+EnDodojr_SwallowedBombDeathSequence = 0x808BBED4; // type:func
+EnDodojr_StunnedBounce = 0x808BBEF4; // type:func
+EnDodojr_Stunned = 0x808BBF74; // type:func
+EnDodojr_JumpAttackBounce = 0x808BC024; // type:func
+EnDodojr_Despawn = 0x808BC08C; // type:func
+EnDodojr_StandardDeathBounce = 0x808BC144; // type:func
+EnDodojr_DeathSequence = 0x808BC1CC; // type:func
+EnDodojr_DropItem = 0x808BC278; // type:func
+EnDodojr_WaitFreezeFrames = 0x808BC2DC; // type:func
+EnDodojr_Update = 0x808BC324; // type:func
+EnDodojr_OverrideLimbDraw = 0x808BC3E4; // type:func
+EnDodojr_PostLimbDraw = 0x808BC490; // type:func
+EnDodojr_Draw = 0x808BC4A8; // type:func
+EnBdfire_SetupAction = 0x808BC8E0; // type:func
+EnbdFire_SetupDraw = 0x808BC8EC; // type:func
+EnBdfire_Init = 0x808BC8F8; // type:func
+EnBdfire_Destroy = 0x808BCB28; // type:func
+func_809BC2A4 = 0x808BCB60; // type:func
+func_809BC598 = 0x808BCE54; // type:func
+EnBdfire_Update = 0x808BD144; // type:func
+EnBdfire_DrawFire = 0x808BD180; // type:func
+EnBdfire_Draw = 0x808BD340; // type:func
+EnBoom_SetupAction = 0x808BD480; // type:func
+EnBoom_Init = 0x808BD48C; // type:func
+EnBoom_Destroy = 0x808BD5A8; // type:func
+EnBoom_Fly = 0x808BD5E8; // type:func
+EnBoom_Update = 0x808BDA28; // type:func
+EnBoom_Draw = 0x808BDA80; // type:func
+EnTorch2_Init = 0x808BDD50; // type:func
+EnTorch2_Destroy = 0x808BDEF8; // type:func
+EnTorch2_GetAttackItem = 0x808BDF68; // type:func
+EnTorch2_SwingSword = 0x808BDFB0; // type:func
+EnTorch2_Backflip = 0x808BE148; // type:func
+EnTorch2_Update = 0x808BE1A0; // type:func
+EnTorch2_OverrideLimbDraw = 0x808BFB88; // type:func
+EnTorch2_PostLimbDraw = 0x808BFBB4; // type:func
+EnTorch2_Draw = 0x808BFBD8; // type:func
+EnBili_Init = 0x808C04F0; // type:func
+EnBili_Destroy = 0x808C05E8; // type:func
+EnBili_SetupFloatIdle = 0x808C0614; // type:func
+EnBili_SetupSpawnedFlyApart = 0x808C0670; // type:func
+EnBili_SetupDischargeLightning = 0x808C06E8; // type:func
+EnBili_SetupClimb = 0x808C0744; // type:func
+EnBili_SetupApproachPlayer = 0x808C079C; // type:func
+EnBili_SetupSetNewHomeHeight = 0x808C07BC; // type:func
+EnBili_SetupRecoil = 0x808C0824; // type:func
+EnBili_SetupBurnt = 0x808C08AC; // type:func
+EnBili_SetupDie = 0x808C094C; // type:func
+EnBili_SetupStunned = 0x808C0980; // type:func
+EnBili_SetupFrozen = 0x808C09F8; // type:func
+EnBili_UpdateTentaclesIndex = 0x808C0BD0; // type:func
+EnBili_UpdateFloating = 0x808C0CF0; // type:func
+EnBili_FloatIdle = 0x808C0DD8; // type:func
+EnBili_SpawnedFlyApart = 0x808C0EC4; // type:func
+EnBili_DischargeLightning = 0x808C0F1C; // type:func
+EnBili_Climb = 0x808C1118; // type:func
+EnBili_ApproachPlayer = 0x808C11D4; // type:func
+EnBili_SetNewHomeHeight = 0x808C1264; // type:func
+EnBili_Recoil = 0x808C12E0; // type:func
+EnBili_Burnt = 0x808C1344; // type:func
+EnBili_Die = 0x808C13B8; // type:func
+EnBili_Stunned = 0x808C15E0; // type:func
+EnBili_Frozen = 0x808C1640; // type:func
+EnBili_UpdateDamage = 0x808C16D0; // type:func
+EnBili_Update = 0x808C189C; // type:func
+EnBili_PulseLimb3 = 0x808C1A70; // type:func
+EnBili_PulseLimb2 = 0x808C1C88; // type:func
+EnBili_PulseLimb4 = 0x808C1EA8; // type:func
+EnBili_OverrideLimbDraw = 0x808C2010; // type:func
+EnBili_Draw = 0x808C2100; // type:func
+EnTp_SetupAction = 0x808C27C0; // type:func
+EnTp_Init = 0x808C27CC; // type:func
+EnTp_Destroy = 0x808C2A44; // type:func
+EnTp_Tail_SetupFollowHead = 0x808C2A70; // type:func
+EnTp_Tail_FollowHead = 0x808C2A9C; // type:func
+EnTp_Head_SetupApproachPlayer = 0x808C2C78; // type:func
+EnTp_Head_ApproachPlayer = 0x808C2CAC; // type:func
+EnTp_SetupDie = 0x808C2E48; // type:func
+EnTp_Die = 0x808C2EC0; // type:func
+EnTp_Fragment_SetupFade = 0x808C31F0; // type:func
+EnTp_Fragment_Fade = 0x808C32F4; // type:func
+EnTp_Head_SetupTakeOff = 0x808C3340; // type:func
+EnTp_Head_TakeOff = 0x808C339C; // type:func
+EnTp_Head_SetupWait = 0x808C3584; // type:func
+EnTp_Head_Wait = 0x808C35D0; // type:func
+EnTp_Head_SetupBurrowReturnHome = 0x808C38DC; // type:func
+EnTp_Head_BurrowReturnHome = 0x808C390C; // type:func
+EnTp_UpdateDamage = 0x808C3BDC; // type:func
+EnTp_Update = 0x808C3E34; // type:func
+EnTp_Draw = 0x808C41A0; // type:func
+EnSt_SetupAction = 0x808C4630; // type:func
+EnSt_SpawnDust = 0x808C463C; // type:func
+EnSt_SpawnBlastEffect = 0x808C485C; // type:func
+EnSt_SpawnDeadEffect = 0x808C48E4; // type:func
+EnSt_CreateBlureEffect = 0x808C4A20; // type:func
+EnSt_CheckCeilingPos = 0x808C4B1C; // type:func
+EnSt_AddBlurVertex = 0x808C4BEC; // type:func
+EnSt_AddBlurSpace = 0x808C4CF4; // type:func
+EnSt_SetWaitingAnimation = 0x808C4D20; // type:func
+EnSt_SetReturnToCeilingAnimation = 0x808C4D50; // type:func
+EnSt_SetLandAnimation = 0x808C4D90; // type:func
+EnSt_SetDropAnimAndVel = 0x808C4DEC; // type:func
+EnSt_InitColliders = 0x808C4E4C; // type:func
+EnSt_CheckBodyStickHit = 0x808C4F8C; // type:func
+EnSt_SetBodyCylinderAC = 0x808C5000; // type:func
+EnSt_SetLegsCylinderAC = 0x808C5044; // type:func
+EnSt_SetCylinderOC = 0x808C50FC; // type:func
+EnSt_UpdateCylinders = 0x808C52D4; // type:func
+EnSt_CheckHitPlayer = 0x808C5398; // type:func
+EnSt_CheckHitFrontside = 0x808C5484; // type:func
+EnSt_CheckHitBackside = 0x808C54C4; // type:func
+EnSt_CheckColliders = 0x808C56B4; // type:func
+EnSt_SetColliderScale = 0x808C573C; // type:func
+EnSt_SetTeethColor = 0x808C58A8; // type:func
+EnSt_DecrStunTimer = 0x808C59D8; // type:func
+EnSt_UpdateYaw = 0x808C59F8; // type:func
+EnSt_IsDoneBouncing = 0x808C5C98; // type:func
+EnSt_Bob = 0x808C5D60; // type:func
+EnSt_IsCloseToPlayer = 0x808C5DCC; // type:func
+EnSt_IsCloseToInitialPos = 0x808C5E74; // type:func
+EnSt_IsCloseToGround = 0x808C5EAC; // type:func
+EnSt_Sway = 0x808C5EEC; // type:func
+EnSt_Init = 0x808C60BC; // type:func
+EnSt_Destroy = 0x808C61E0; // type:func
+EnSt_WaitOnCeiling = 0x808C6260; // type:func
+EnSt_WaitOnGround = 0x808C62BC; // type:func
+EnSt_LandOnGround = 0x808C63B4; // type:func
+EnSt_MoveToGround = 0x808C64B8; // type:func
+EnSt_ReturnToCeiling = 0x808C65B0; // type:func
+EnSt_BounceAround = 0x808C6684; // type:func
+EnSt_FinishBouncing = 0x808C6758; // type:func
+EnSt_Die = 0x808C68CC; // type:func
+EnSt_StartOnCeilingOrGround = 0x808C6944; // type:func
+EnSt_Update = 0x808C69C8; // type:func
+EnSt_OverrideLimbDraw = 0x808C6B48; // type:func
+EnSt_PostLimbDraw = 0x808C6C28; // type:func
+EnSt_Draw = 0x808C6C64; // type:func
+EnBw_SetupAction = 0x808C72A0; // type:func
+EnBw_Init = 0x808C72AC; // type:func
+EnBw_Destroy = 0x808C740C; // type:func
+func_809CE884 = 0x808C744C; // type:func
+func_809CE9A8 = 0x808C7570; // type:func
+func_809CEA24 = 0x808C75EC; // type:func
+func_809CF72C = 0x808C82F4; // type:func
+func_809CF7AC = 0x808C8374; // type:func
+func_809CF8F0 = 0x808C84B8; // type:func
+func_809CF984 = 0x808C854C; // type:func
+func_809CFBA8 = 0x808C8774; // type:func
+func_809CFC4C = 0x808C8818; // type:func
+func_809CFF10 = 0x808C8ADC; // type:func
+func_809CFF98 = 0x808C8B64; // type:func
+func_809D00F4 = 0x808C8CC0; // type:func
+func_809D014C = 0x808C8D18; // type:func
+func_809D01CC = 0x808C8D98; // type:func
+func_809D0268 = 0x808C8E34; // type:func
+func_809D03CC = 0x808C8F98; // type:func
+func_809D0424 = 0x808C8FF0; // type:func
+func_809D0584 = 0x808C9150; // type:func
+EnBw_Update = 0x808C945C; // type:func
+EnBw_OverrideLimbDraw = 0x808C98EC; // type:func
+EnBw_Draw = 0x808C9B04; // type:func
+EnEiyer_Init = 0x808CA630; // type:func
+EnEiyer_Destroy = 0x808CA810; // type:func
+EnEiyer_RotateAroundHome = 0x808CA83C; // type:func
+EnEiyer_SetupAppearFromGround = 0x808CA8AC; // type:func
+EnEiyer_SetupUnderground = 0x808CA9EC; // type:func
+EnEiyer_SetupInactive = 0x808CAA4C; // type:func
+EnEiyer_SetupAmbush = 0x808CAA78; // type:func
+EnEiyer_SetupGlide = 0x808CAB58; // type:func
+EnEiyer_SetupStartAttack = 0x808CABD4; // type:func
+EnEiyer_SetupDiveAttack = 0x808CABE8; // type:func
+EnEiyer_SetupLand = 0x808CAC30; // type:func
+EnEiyer_SetupHurt = 0x808CACA8; // type:func
+EnEiyer_SetupDie = 0x808CAD58; // type:func
+EnEiyer_SetupDead = 0x808CAE18; // type:func
+EnEiyer_SetupStunned = 0x808CAE44; // type:func
+EnEiyer_AppearFromGround = 0x808CAF08; // type:func
+EnEiyer_CheckPlayerCollision = 0x808CAF58; // type:func
+EnEiyer_CircleUnderground = 0x808CAF88; // type:func
+EnEiyer_WanderUnderground = 0x808CB004; // type:func
+EnEiyer_Inactive = 0x808CB138; // type:func
+EnEiyer_Ambush = 0x808CB1CC; // type:func
+EnEiyer_Glide = 0x808CB324; // type:func
+EnEiyer_StartAttack = 0x808CB540; // type:func
+EnEiyer_DiveAttack = 0x808CB63C; // type:func
+EnEiyer_Land = 0x808CB6C8; // type:func
+EnEiyer_Hurt = 0x808CB7BC; // type:func
+EnEiyer_Die = 0x808CB8F4; // type:func
+EnEiyer_Dead = 0x808CB9A8; // type:func
+EnEiyer_Stunned = 0x808CBA28; // type:func
+EnEiyer_UpdateDamage = 0x808CBAE0; // type:func
+EnEiyer_Update = 0x808CBC28; // type:func
+EnEiyer_OverrideLimbDraw = 0x808CBE4C; // type:func
+EnEiyer_Draw = 0x808CBEA0; // type:func
+EnRiverSound_Init = 0x808CC290; // type:func
+EnRiverSound_Destroy = 0x808CC360; // type:func
+EnRiverSound_FindClosestPointOnLineSegment = 0x808CC3B8; // type:func
+EnRiverSound_GetSfxPos = 0x808CC524; // type:func
+EnRiverSound_Update = 0x808CC820; // type:func
+EnRiverSound_Draw = 0x808CC9F0; // type:func
+func_80A6B250 = 0x808CCC20; // type:func
+func_80A6B30C = 0x808CCCDC; // type:func
+EnHorseNormal_Init = 0x808CCDA4; // type:func
+EnHorseNormal_Destroy = 0x808CD294; // type:func
+func_80A6B91C = 0x808CD2F4; // type:func
+EnHorseNormal_FollowPath = 0x808CD3AC; // type:func
+EnHorseNormal_NextAnimation = 0x808CD588; // type:func
+EnHorseNormal_CycleAnimations = 0x808CD5DC; // type:func
+func_80A6BC48 = 0x808CD624; // type:func
+func_80A6BCEC = 0x808CD6CC; // type:func
+func_80A6BD7C = 0x808CD75C; // type:func
+EnHorseNormal_Wander = 0x808CD850; // type:func
+func_80A6C4CC = 0x808CDEB4; // type:func
+EnHorseNormal_Wait = 0x808CDF5C; // type:func
+func_80A6C6B0 = 0x808CE09C; // type:func
+EnHorseNormal_WaitClone = 0x808CE150; // type:func
+func_80A6C8E0 = 0x808CE2D4; // type:func
+EnHorseNormal_Update = 0x808CE398; // type:func
+EnHorseNormal_PostDraw = 0x808CE4F4; // type:func
+func_80A6CC88 = 0x808CE680; // type:func
+EnHorseNormal_Draw = 0x808CE868; // type:func
+EnOssan_SetupAction = 0x808CF240; // type:func
+ShopItemDisp_Default = 0x808CF24C; // type:func
+ShopItemDisp_SpookyMask = 0x808CF264; // type:func
+ShopItemDisp_SkullMask = 0x808CF298; // type:func
+ShopItemDisp_BunnyHood = 0x808CF2CC; // type:func
+ShopItemDisp_ZoraMask = 0x808CF300; // type:func
+ShopItemDisp_GoronMask = 0x808CF334; // type:func
+ShopItemDisp_GerudoMask = 0x808CF368; // type:func
+EnOssan_SpawnItemsOnShelves = 0x808CF39C; // type:func
+EnOssan_UpdateShopOfferings = 0x808CF4F0; // type:func
+EnOssan_TalkDefaultShopkeeper = 0x808CF65C; // type:func
+EnOssan_TalkKakarikoPotionShopkeeper = 0x808CF67C; // type:func
+EnOssan_TalkMarketPotionShopkeeper = 0x808CF6C0; // type:func
+EnOssan_TalkKokiriShopkeeper = 0x808CF6E0; // type:func
+EnOssan_TalkBazaarShopkeeper = 0x808CF700; // type:func
+EnOssan_TalkBombchuShopkeeper = 0x808CF744; // type:func
+EnOssan_TalkZoraShopkeeper = 0x808CF764; // type:func
+EnOssan_TalkGoronShopkeeper = 0x808CF7BC; // type:func
+EnOssan_TalkHappyMaskShopkeeper = 0x808CF890; // type:func
+EnOssan_UpdateCameraDirection = 0x808CF91C; // type:func
+EnOssan_TryGetObjBankIndices = 0x808CF980; // type:func
+EnOssan_Init = 0x808CFA44; // type:func
+EnOssan_Destroy = 0x808CFC10; // type:func
+EnOssan_UpdateCursorPos = 0x808CFC50; // type:func
+EnOssan_EndInteraction = 0x808CFCB4; // type:func
+EnOssan_TestEndInteraction = 0x808CFD78; // type:func
+EnOssan_TestCancelOption = 0x808CFDC0; // type:func
+EnOssan_SetStateStartShopping = 0x808CFE24; // type:func
+EnOssan_StartShopping = 0x808CFEA8; // type:func
+EnOssan_ChooseTalkToOwner = 0x808CFF80; // type:func
+EnOssan_SetLookToShopkeeperFromShelf = 0x808CFFE0; // type:func
+EnOssan_State_Idle = 0x808D0014; // type:func
+EnOssan_UpdateJoystickInputState = 0x808D00C4; // type:func
+EnOssan_SetCursorIndexFromNeutral = 0x808D0210; // type:func
+EnOssan_CursorRight = 0x808D0348; // type:func
+EnOssan_CursorLeft = 0x808D03D4; // type:func
+EnOssan_TryPaybackMask = 0x808D043C; // type:func
+EnOssan_State_StartConversation = 0x808D0578; // type:func
+EnOssan_FacingShopkeeperDialogResult = 0x808D0720; // type:func
+EnOssan_State_FacingShopkeeper = 0x808D078C; // type:func
+EnOssan_State_TalkingToShopkeeper = 0x808D08A4; // type:func
+EnOssan_State_LookToLeftShelf = 0x808D08F8; // type:func
+EnOssan_State_LookToRightShelf = 0x808D09E4; // type:func
+EnOssan_CursorUpDown = 0x808D0AD0; // type:func
+EnOssan_HasPlayerSelectedItem = 0x808D0CE4; // type:func
+EnOssan_State_BrowseLeftShelf = 0x808D0E80; // type:func
+EnOssan_State_BrowseRightShelf = 0x808D1040; // type:func
+EnOssan_State_LookFromShelfToShopkeeper = 0x808D1200; // type:func
+EnOssan_State_DisplayOnlyBombDialog = 0x808D12BC; // type:func
+EnOssan_GiveItemWithFanfare = 0x808D138C; // type:func
+EnOssan_SetStateCantGetItem = 0x808D1458; // type:func
+EnOssan_SetStateQuickBuyDialog = 0x808D148C; // type:func
+EnOssan_HandleCanBuyItem = 0x808D14C0; // type:func
+EnOssan_HandleCanBuyLonLonMilk = 0x808D1668; // type:func
+EnOssan_HandleCanBuyWeirdEgg = 0x808D1774; // type:func
+EnOssan_HandleCanBuyBombs = 0x808D18AC; // type:func
+EnOssan_BuyGoronCityBombs = 0x808D19B0; // type:func
+EnOssan_State_ItemSelected = 0x808D1A54; // type:func
+EnOssan_State_SelectMilkBottle = 0x808D1B28; // type:func
+EnOssan_State_SelectWeirdEgg = 0x808D1BFC; // type:func
+EnOssan_State_SelectUnimplementedItem = 0x808D1CD0; // type:func
+EnOssan_State_SelectBombs = 0x808D1D60; // type:func
+EnOssan_State_SelectMaskItem = 0x808D1E58; // type:func
+EnOssan_State_CantGetItem = 0x808D2034; // type:func
+EnOssan_State_QuickBuyDialog = 0x808D20B0; // type:func
+EnOssan_State_GiveItemWithFanfare = 0x808D2158; // type:func
+EnOssan_State_ItemPurchased = 0x808D21C8; // type:func
+EnOssan_State_ContinueShoppingPrompt = 0x808D230C; // type:func
+EnOssan_State_WaitForDisplayOnlyBombDialog = 0x808D24EC; // type:func
+EnOssan_State_21 = 0x808D2554; // type:func
+EnOssan_State_22 = 0x808D25C8; // type:func
+EnOssan_State_GiveLonLonMilk = 0x808D261C; // type:func
+EnOssan_State_LendMaskOfTruth = 0x808D2670; // type:func
+EnOssan_SetStateGiveDiscountDialog = 0x808D26E0; // type:func
+EnOssan_State_GiveDiscountDialog = 0x808D270C; // type:func
+EnOssan_PositionSelectedItem = 0x808D27A0; // type:func
+EnOssan_ResetItemPosition = 0x808D2888; // type:func
+EnOssan_TakeItemOffShelf = 0x808D28AC; // type:func
+EnOssan_ReturnItemToShelf = 0x808D2948; // type:func
+EnOssan_UpdateItemSelectedProperty = 0x808D29D4; // type:func
+EnOssan_UpdateCursorAnim = 0x808D2B10; // type:func
+EnOssan_UpdateStickDirectionPromptAnim = 0x808D2BDC; // type:func
+EnOssan_WaitForBlink = 0x808D2D8C; // type:func
+EnOssan_Blink = 0x808D2DC0; // type:func
+EnOssan_AreShopkeeperObjectsLoaded = 0x808D2E60; // type:func
+EnOssan_InitBazaarShopkeeper = 0x808D2EFC; // type:func
+EnOssan_InitKokiriShopkeeper = 0x808D2F5C; // type:func
+EnOssan_InitGoronShopkeeper = 0x808D3074; // type:func
+EnOssan_InitZoraShopkeeper = 0x808D3150; // type:func
+EnOssan_InitPotionShopkeeper = 0x808D322C; // type:func
+EnOssan_InitHappyMaskShopkeeper = 0x808D328C; // type:func
+EnOssan_InitBombchuShopkeeper = 0x808D32EC; // type:func
+EnOssan_SetupHelloDialog = 0x808D334C; // type:func
+EnOssan_InitActionFunc = 0x808D34B4; // type:func
+EnOssan_Obj3ToSeg6 = 0x808D376C; // type:func
+EnOssan_MainActionFunc = 0x808D37A4; // type:func
+EnOssan_Update = 0x808D38C0; // type:func
+EnOssan_OverrideLimbDrawDefaultShopkeeper = 0x808D38EC; // type:func
+EnOssan_DrawCursor = 0x808D3924; // type:func
+EnOssan_DrawTextRec = 0x808D3B84; // type:func
+EnOssan_DrawStickDirectionPrompts = 0x808D3D20; // type:func
+EnOssan_DrawBazaarShopkeeper = 0x808D40C8; // type:func
+EnOssan_OverrideLimbDrawKokiriShopkeeper = 0x808D41BC; // type:func
+EnOssan_EmptyDList = 0x808D42B4; // type:func
+EnOssan_SetEnvColor = 0x808D42D8; // type:func
+EnOssan_DrawKokiriShopkeeper = 0x808D4344; // type:func
+EnOssan_DrawGoronShopkeeper = 0x808D44A4; // type:func
+EnOssan_OverrideLimbDrawZoraShopkeeper = 0x808D45D8; // type:func
+EnOssan_DrawZoraShopkeeper = 0x808D4610; // type:func
+EnOssan_DrawPotionShopkeeper = 0x808D4754; // type:func
+EnOssan_DrawHappyMaskShopkeeper = 0x808D4840; // type:func
+EnOssan_DrawBombchuShopkeeper = 0x808D492C; // type:func
+BgTreemouth_SetupAction = 0x808D5820; // type:func
+BgTreemouth_Init = 0x808D582C; // type:func
+BgTreemouth_Destroy = 0x808D5954; // type:func
+func_808BC65C = 0x808D5988; // type:func
+func_808BC6F8 = 0x808D5A24; // type:func
+func_808BC80C = 0x808D5B38; // type:func
+func_808BC864 = 0x808D5B90; // type:func
+func_808BC8B8 = 0x808D5BE4; // type:func
+func_808BC9EC = 0x808D5D18; // type:func
+func_808BCAF0 = 0x808D5E20; // type:func
+BgTreemouth_DoNothing = 0x808D5EBC; // type:func
+BgTreemouth_Update = 0x808D5ECC; // type:func
+BgTreemouth_Draw = 0x808D5F4C; // type:func
+BgDodoago_SetupAction = 0x808D6E80; // type:func
+BgDodoago_SpawnSparkles = 0x808D6E8C; // type:func
+BgDodoago_Init = 0x808D6FAC; // type:func
+BgDodoago_Destroy = 0x808D7110; // type:func
+BgDodoago_WaitExplosives = 0x808D717C; // type:func
+BgDodoago_OpenJaw = 0x808D7440; // type:func
+BgDodoago_DoNothing = 0x808D7704; // type:func
+BgDodoago_LightOneEye = 0x808D7714; // type:func
+BgDodoago_Update = 0x808D7778; // type:func
+BgDodoago_Draw = 0x808D78D0; // type:func
+BgHidanDalm_Init = 0x808D7C30; // type:func
+BgHidanDalm_Destroy = 0x808D7D18; // type:func
+BgHidanDalm_Wait = 0x808D7D60; // type:func
+BgHidanDalm_Shrink = 0x808D7EE4; // type:func
+BgHidanDalm_Update = 0x808D8094; // type:func
+BgHidanDalm_UpdateCollider = 0x808D80F4; // type:func
+BgHidanDalm_Draw = 0x808D8220; // type:func
+BgHidanHrock_Init = 0x808D8480; // type:func
+BgHidanHrock_Destroy = 0x808D87B0; // type:func
+func_808894A4 = 0x808D87F8; // type:func
+func_808894B0 = 0x808D8808; // type:func
+func_8088960C = 0x808D8964; // type:func
+func_808896B8 = 0x808D8A10; // type:func
+BgHidanHrock_Update = 0x808D8AF0; // type:func
+BgHidanHrock_Draw = 0x808D8B14; // type:func
+func_80A68660 = 0x808D8CB0; // type:func
+func_80A686A8 = 0x808D8CFC; // type:func
+func_80A68870 = 0x808D8EC4; // type:func
+EnHorseGanon_Init = 0x808D8F80; // type:func
+EnHorseGanon_Destroy = 0x808D90CC; // type:func
+func_80A68AC4 = 0x808D911C; // type:func
+func_80A68AF0 = 0x808D914C; // type:func
+func_80A68B20 = 0x808D9180; // type:func
+func_80A68DB0 = 0x808D9410; // type:func
+func_80A68E14 = 0x808D9474; // type:func
+EnHorseGanon_Update = 0x808D9538; // type:func
+EnHorseGanon_PostDraw = 0x808D960C; // type:func
+EnHorseGanon_Draw = 0x808D9798; // type:func
+BgHidanRock_Init = 0x808D9A30; // type:func
+BgHidanRock_Destroy = 0x808D9BAC; // type:func
+func_8088B24C = 0x808D9C00; // type:func
+func_8088B268 = 0x808D9C20; // type:func
+func_8088B5F4 = 0x808D9FB0; // type:func
+func_8088B634 = 0x808D9FF0; // type:func
+func_8088B69C = 0x808DA05C; // type:func
+func_8088B79C = 0x808DA15C; // type:func
+func_8088B90C = 0x808DA2CC; // type:func
+func_8088B954 = 0x808DA314; // type:func
+func_8088B990 = 0x808DA350; // type:func
+BgHidanRock_Update = 0x808DA53C; // type:func
+func_8088BC40 = 0x808DA60C; // type:func
+BgHidanRock_Draw = 0x808DA81C; // type:func
+BgHidanRsekizou_Init = 0x808DAB30; // type:func
+BgHidanRsekizou_Destroy = 0x808DAC34; // type:func
+BgHidanRsekizou_Update = 0x808DAC7C; // type:func
+BgHidanRsekizou_DrawFireball = 0x808DB040; // type:func
+BgHidanRsekizou_Draw = 0x808DB358; // type:func
+func_8088CEC0 = 0x808DB710; // type:func
+BgHidanSekizou_Init = 0x808DBACC; // type:func
+BgHidanSekizou_Destroy = 0x808DBC40; // type:func
+func_8088D434 = 0x808DBC88; // type:func
+func_8088D720 = 0x808DBF74; // type:func
+func_8088D750 = 0x808DBFA4; // type:func
+BgHidanSekizou_Update = 0x808DC110; // type:func
+func_8088D9F4 = 0x808DC24C; // type:func
+func_8088DC50 = 0x808DC494; // type:func
+func_8088DE08 = 0x808DC64C; // type:func
+BgHidanSekizou_Draw = 0x808DC72C; // type:func
+BgHidanSima_Init = 0x808DCB60; // type:func
+BgHidanSima_Destroy = 0x808DCC64; // type:func
+func_8088E518 = 0x808DCCAC; // type:func
+func_8088E5D0 = 0x808DCD68; // type:func
+func_8088E6D0 = 0x808DCE6C; // type:func
+func_8088E760 = 0x808DCF04; // type:func
+func_8088E7A8 = 0x808DCF4C; // type:func
+func_8088E90C = 0x808DD0B0; // type:func
+BgHidanSima_Update = 0x808DD210; // type:func
+func_8088EB54 = 0x808DD300; // type:func
+BgHidanSima_Draw = 0x808DD778; // type:func
+BgHidanSyoku_Init = 0x808DDA60; // type:func
+BgHidanSyoku_Destroy = 0x808DDAEC; // type:func
+func_8088F47C = 0x808DDB20; // type:func
+func_8088F4B8 = 0x808DDB5C; // type:func
+func_8088F514 = 0x808DDBBC; // type:func
+func_8088F5A0 = 0x808DDC48; // type:func
+func_8088F62C = 0x808DDCD4; // type:func
+BgHidanSyoku_Update = 0x808DDD30; // type:func
+BgHidanSyoku_Draw = 0x808DDDD8; // type:func
+EnXc_InitCollider = 0x808DDEC0; // type:func
+EnXc_UpdateCollider = 0x808DDF0C; // type:func
+EnXc_Destroy = 0x808DDF50; // type:func
+EnXc_CalculateHeadTurn = 0x808DDF7C; // type:func
+EnXc_SetEyePattern = 0x808DE004; // type:func
+EnXc_SpawnNut = 0x808DE08C; // type:func
+EnXc_BgCheck = 0x808DE154; // type:func
+EnXc_AnimIsFinished = 0x808DE19C; // type:func
+EnXc_GetCue = 0x808DE1C0; // type:func
+EnXc_CheckForCue = 0x808DE1E4; // type:func
+EnXc_CheckForNoCue = 0x808DE230; // type:func
+func_80B3C588 = 0x808DE27C; // type:func
+func_80B3C620 = 0x808DE314; // type:func
+EnXc_ChangeAnimation = 0x808DE3F4; // type:func
+EnXc_CheckAndSetAction = 0x808DE4B0; // type:func
+func_80B3C7D4 = 0x808DE4C8; // type:func
+func_80B3C8CC = 0x808DE4F4; // type:func
+func_80B3C924 = 0x808DE550; // type:func
+func_80B3C964 = 0x808DE590; // type:func
+func_80B3C9DC = 0x808DE608; // type:func
+func_80B3C9EC = 0x808DE61C; // type:func
+func_80B3CA38 = 0x808DE668; // type:func
+EnXc_MinuetCS = 0x808DE6BC; // type:func
+func_80B3CB58 = 0x808DE794; // type:func
+EnXc_BoleroCS = 0x808DE7E8; // type:func
+EnXc_SetupSerenadeAction = 0x808DE948; // type:func
+EnXc_SerenadeCS = 0x808DE9A0; // type:func
+EnXc_DoNothing = 0x808DEA68; // type:func
+EnXc_SetWalkingSFX = 0x808DEA78; // type:func
+EnXc_SetNutThrowSFX = 0x808DEAF8; // type:func
+EnXc_SetLandingSFX = 0x808DEB84; // type:func
+EnXc_SetColossusAppearSFX = 0x808DEC04; // type:func
+func_80B3D118 = 0x808DED10; // type:func
+EnXc_SetColossusWindSFX = 0x808DED54; // type:func
+EnXc_SpawnFlame = 0x808DEE5C; // type:func
+EnXc_SetupFlamePos = 0x808DEF00; // type:func
+EnXc_DestroyFlame = 0x808DEF7C; // type:func
+EnXc_InitFlame = 0x808DEFBC; // type:func
+func_80B3D48C = 0x808DF058; // type:func
+EnXc_GetCurrentHarpAnim = 0x808DF0A8; // type:func
+EnXc_CalcXZAccel = 0x808DF13C; // type:func
+func_80B3D644 = 0x808DF214; // type:func
+EnXc_CalcXZSpeed = 0x808DF234; // type:func
+func_80B3D6F0 = 0x808DF2C0; // type:func
+func_80B3D710 = 0x808DF2E0; // type:func
+func_80B3D730 = 0x808DF300; // type:func
+func_80B3D750 = 0x808DF320; // type:func
+EnXc_SetupFallFromSkyAction = 0x808DF36C; // type:func
+func_80B3D8A4 = 0x808DF47C; // type:func
+EnXc_SetupWalkAction = 0x808DF56C; // type:func
+EnXc_SetupHaltAction = 0x808DF5DC; // type:func
+EnXc_SetupStoppedAction = 0x808DF688; // type:func
+func_80B3DAF0 = 0x808DF6D0; // type:func
+EnXc_SetupInitialHarpAction = 0x808DF790; // type:func
+EnXc_SetupPlayingHarpAction = 0x808DF808; // type:func
+func_80B3DCA8 = 0x808DF890; // type:func
+EnXc_SetupHarpPutawayAction = 0x808DF924; // type:func
+func_80B3DE00 = 0x808DF9F4; // type:func
+func_80B3DE78 = 0x808DFA6C; // type:func
+EnXc_SetupReverseAccel = 0x808DFAE8; // type:func
+EnXc_SetupReverseWalkAction = 0x808DFB98; // type:func
+EnXc_SetupReverseHaltAction = 0x808DFC08; // type:func
+EnXc_SetupNutThrow = 0x808DFCB4; // type:func
+func_80B3E164 = 0x808DFD5C; // type:func
+EnXc_SetupDisappear = 0x808DFDB0; // type:func
+EnXc_ActionFunc0 = 0x808DFE20; // type:func
+EnXc_ActionFunc1 = 0x808DFE60; // type:func
+EnXc_GracefulFall = 0x808DFEA0; // type:func
+EnXc_Accelerate = 0x808DFF1C; // type:func
+EnXc_Walk = 0x808DFF7C; // type:func
+EnXc_Stopped = 0x808DFFDC; // type:func
+EnXc_ActionFunc6 = 0x808E003C; // type:func
+EnXc_ActionFunc7 = 0x808E0084; // type:func
+EnXc_ActionFunc8 = 0x808E00D0; // type:func
+EnXc_ActionFunc9 = 0x808E0120; // type:func
+EnXc_ActionFunc10 = 0x808E0168; // type:func
+EnXc_ActionFunc11 = 0x808E01B0; // type:func
+EnXc_ActionFunc12 = 0x808E01FC; // type:func
+EnXc_ActionFunc13 = 0x808E0248; // type:func
+EnXc_ReverseAccelerate = 0x808E02A4; // type:func
+EnXc_ActionFunc15 = 0x808E0310; // type:func
+EnXc_HaltAndWaitToThrowNut = 0x808E037C; // type:func
+EnXc_ThrowNut = 0x808E03E8; // type:func
+EnXc_Delete = 0x808E0450; // type:func
+EnXc_Fade = 0x808E04AC; // type:func
+func_80B3E87C = 0x808E04CC; // type:func
+EnXc_PullingOutHarpOverrideLimbDraw = 0x808E04FC; // type:func
+EnXc_HarpOverrideLimbDraw = 0x808E0538; // type:func
+EnXc_DrawPullingOutHarp = 0x808E0560; // type:func
+EnXc_DrawHarp = 0x808E069C; // type:func
+func_80B3EBF0 = 0x808E07D8; // type:func
+func_80B3EC00 = 0x808E07EC; // type:func
+func_80B3EC0C = 0x808E07FC; // type:func
+func_80B3EC90 = 0x808E0880; // type:func
+func_80B3ECD8 = 0x808E08C8; // type:func
+EnXc_ActionFunc20 = 0x808E0938; // type:func
+EnXc_ActionFunc21 = 0x808E095C; // type:func
+EnXc_ActionFunc22 = 0x808E097C; // type:func
+EnXc_ActionFunc23 = 0x808E09C4; // type:func
+EnXc_ActionFunc24 = 0x808E0A24; // type:func
+EnXc_ActionFunc25 = 0x808E0A34; // type:func
+EnXc_ActionFunc26 = 0x808E0A44; // type:func
+EnXc_ActionFunc27 = 0x808E0A54; // type:func
+EnXc_ActionFunc28 = 0x808E0A64; // type:func
+func_80B3EE64 = 0x808E0A74; // type:func
+func_80B3EE74 = 0x808E0A88; // type:func
+func_80B3EEA4 = 0x808E0ABC; // type:func
+func_80B3EEC8 = 0x808E0AE0; // type:func
+func_80B3EEEC = 0x808E0B04; // type:func
+func_80B3EF10 = 0x808E0B28; // type:func
+func_80B3EF34 = 0x808E0B4C; // type:func
+func_80B3EF58 = 0x808E0B70; // type:func
+func_80B3EF80 = 0x808E0B98; // type:func
+func_80B3EFA4 = 0x808E0BBC; // type:func
+func_80B3EFC8 = 0x808E0BE0; // type:func
+func_80B3EFEC = 0x808E0C04; // type:func
+func_80B3F010 = 0x808E0C28; // type:func
+func_80B3F0B8 = 0x808E0CD4; // type:func
+func_80B3F0DC = 0x808E0CF8; // type:func
+func_80B3F100 = 0x808E0D1C; // type:func
+EnXc_Serenade = 0x808E0D40; // type:func
+EnXc_ActionFunc30 = 0x808E0D60; // type:func
+EnXc_ActionFunc31 = 0x808E0D8C; // type:func
+EnXc_ActionFunc32 = 0x808E0DD0; // type:func
+EnXc_ActionFunc33 = 0x808E0DFC; // type:func
+EnXc_ActionFunc34 = 0x808E0E28; // type:func
+EnXc_ActionFunc35 = 0x808E0E54; // type:func
+EnXc_ActionFunc36 = 0x808E0E80; // type:func
+EnXc_ActionFunc37 = 0x808E0EAC; // type:func
+EnXc_ActionFunc38 = 0x808E0ED8; // type:func
+EnXc_ActionFunc39 = 0x808E0F04; // type:func
+EnXc_ActionFunc40 = 0x808E0F30; // type:func
+EnXc_ActionFunc41 = 0x808E0F90; // type:func
+EnXc_ActionFunc42 = 0x808E0FBC; // type:func
+EnXc_ActionFunc43 = 0x808E0FE8; // type:func
+EnXc_ActionFunc44 = 0x808E1014; // type:func
+func_80B3F3C8 = 0x808E1024; // type:func
+func_80B3F3D8 = 0x808E1038; // type:func
+EnXc_PlayDiveSFX = 0x808E1058; // type:func
+EnXc_LakeHyliaDive = 0x808E10AC; // type:func
+func_80B3F534 = 0x808E1198; // type:func
+func_80B3F59C = 0x808E1200; // type:func
+func_80B3F620 = 0x808E1284; // type:func
+func_80B3F644 = 0x808E12A8; // type:func
+func_80B3F668 = 0x808E12CC; // type:func
+func_80B3F6DC = 0x808E1340; // type:func
+EnXc_SetupKneelAction = 0x808E1364; // type:func
+func_80B3F754 = 0x808E13BC; // type:func
+func_80B3F7BC = 0x808E142C; // type:func
+EnXc_ActionFunc45 = 0x808E1468; // type:func
+EnXc_ActionFunc46 = 0x808E1494; // type:func
+EnXc_ActionFunc47 = 0x808E14C0; // type:func
+EnXc_ActionFunc48 = 0x808E1518; // type:func
+EnXc_ActionFunc49 = 0x808E1544; // type:func
+EnXc_Kneel = 0x808E15A8; // type:func
+EnXc_ActionFunc51 = 0x808E160C; // type:func
+EnXc_ActionFunc52 = 0x808E1670; // type:func
+func_80B3FA08 = 0x808E1690; // type:func
+func_80B3FA2C = 0x808E16B8; // type:func
+EnXc_PlayTriforceSFX = 0x808E16D8; // type:func
+func_80B3FAE0 = 0x808E1770; // type:func
+EnXc_CalcTriforce = 0x808E17B8; // type:func
+func_80B3FF0C = 0x808E1BB0; // type:func
+EnXc_SetupShowTriforceAction = 0x808E1C58; // type:func
+EnXc_SetupShowTriforceIdleAction = 0x808E1CE8; // type:func
+func_80B400AC = 0x808E1D54; // type:func
+EnXc_ActionFunc53 = 0x808E1D90; // type:func
+EnXc_ActionFunc54 = 0x808E1DB0; // type:func
+EnXc_ShowTriforce = 0x808E1DF8; // type:func
+EnXc_ShowTriforceIdle = 0x808E1E60; // type:func
+EnXc_TriforceOverrideLimbDraw = 0x808E1EBC; // type:func
+EnXc_TriforcePostLimbDraw = 0x808E1EE4; // type:func
+EnXc_DrawTriforce = 0x808E1F60; // type:func
+func_80B40590 = 0x808E21F4; // type:func
+EnXc_SetThrownAroundSFX = 0x808E2210; // type:func
+EnXc_PlayLinkScreamSFX = 0x808E22D4; // type:func
+EnXc_SetCrySFX = 0x808E2308; // type:func
+func_80B406F8 = 0x808E2364; // type:func
+EnXc_SetupIdleInNocturne = 0x808E237C; // type:func
+EnXc_SetupDefenseStance = 0x808E2418; // type:func
+EnXc_SetupContortions = 0x808E2490; // type:func
+EnXc_SetupFallInNocturne = 0x808E252C; // type:func
+EnXc_SetupHittingGroundInNocturne = 0x808E2608; // type:func
+func_80B40A78 = 0x808E26A8; // type:func
+EnXc_SetupKneelInNocturne = 0x808E2748; // type:func
+func_80B40BB4 = 0x808E27E4; // type:func
+func_80B40C50 = 0x808E2880; // type:func
+func_80B40C74 = 0x808E28A4; // type:func
+func_80B40C98 = 0x808E28C8; // type:func
+func_80B40CBC = 0x808E28EC; // type:func
+func_80B40CE0 = 0x808E2910; // type:func
+func_80B40D08 = 0x808E2938; // type:func
+func_80B40D2C = 0x808E295C; // type:func
+func_80B40D50 = 0x808E2980; // type:func
+func_80B40D74 = 0x808E29A4; // type:func
+EnXc_SetupReverseHaltInNocturneCS = 0x808E29C8; // type:func
+func_80B40E40 = 0x808E2A74; // type:func
+func_80B40E64 = 0x808E2A98; // type:func
+func_80B40E88 = 0x808E2ABC; // type:func
+EnXc_SetupNocturneState = 0x808E2AE0; // type:func
+EnXc_InitialNocturneAction = 0x808E2C20; // type:func
+EnXc_IdleInNocturne = 0x808E2C40; // type:func
+EnXc_DefenseStance = 0x808E2C90; // type:func
+EnXc_Contort = 0x808E2CD8; // type:func
+EnXc_FallInNocturne = 0x808E2D44; // type:func
+EnXc_HitGroundInNocturne = 0x808E2DAC; // type:func
+EnXc_ActionFunc63 = 0x808E2DEC; // type:func
+EnXc_KneelInNocturneCS = 0x808E2E48; // type:func
+EnXc_ActionFunc65 = 0x808E2E90; // type:func
+EnXc_ActionFunc66 = 0x808E2ED4; // type:func
+EnXc_ActionFunc67 = 0x808E2F00; // type:func
+EnXc_ActionFunc68 = 0x808E2F2C; // type:func
+EnXc_ActionFunc69 = 0x808E2F58; // type:func
+EnXc_ActionFunc70 = 0x808E2F84; // type:func
+EnXc_ActionFunc71 = 0x808E2FB0; // type:func
+EnXc_ActionFunc72 = 0x808E2FDC; // type:func
+EnXc_ReverseAccelInNocturneCS = 0x808E3008; // type:func
+EnXc_ReverseWalkInNocturneCS = 0x808E3034; // type:func
+EnXc_ReverseHaltInNocturneCS = 0x808E3088; // type:func
+EnXc_ThrowNutInNocturneCS = 0x808E30B4; // type:func
+EnXc_DeleteInNocturneCS = 0x808E30E0; // type:func
+EnXc_KillInNocturneCS = 0x808E310C; // type:func
+EnXc_DrawSquintingEyes = 0x808E3130; // type:func
+EnXc_InitTempleOfTime = 0x808E320C; // type:func
+EnXc_SetupDialogueAction = 0x808E3378; // type:func
+func_80B41798 = 0x808E3400; // type:func
+EnXc_BlockingPedestalAction = 0x808E344C; // type:func
+EnXc_ActionFunc80 = 0x808E34B4; // type:func
+EnXc_Update = 0x808E351C; // type:func
+EnXc_Init = 0x808E3564; // type:func
+EnXc_OverrideLimbDraw = 0x808E36D0; // type:func
+EnXc_PostLimbDraw = 0x808E3758; // type:func
+EnXc_DrawNothing = 0x808E37E4; // type:func
+EnXc_DrawDefault = 0x808E37F4; // type:func
+EnXc_Draw = 0x808E38FC; // type:func
+BgHidanCurtain_Init = 0x808E4650; // type:func
+BgHidanCurtain_Destroy = 0x808E4864; // type:func
+BgHidanCurtain_WaitForSwitchOn = 0x808E4890; // type:func
+BgHidanCurtain_WaitForCutscene = 0x808E4944; // type:func
+BgHidanCurtain_WaitForClear = 0x808E4970; // type:func
+BgHidanCurtain_WaitForSwitchOff = 0x808E49B4; // type:func
+BgHidanCurtain_TurnOn = 0x808E49F8; // type:func
+BgHidanCurtain_TurnOff = 0x808E4A6C; // type:func
+BgHidanCurtain_WaitForTimer = 0x808E4B5C; // type:func
+BgHidanCurtain_Update = 0x808E4BC0; // type:func
+BgHidanCurtain_Draw = 0x808E4E54; // type:func
+BgSpot00Hanebasi_Init = 0x808E50F0; // type:func
+BgSpot00Hanebasi_Destroy = 0x808E5500; // type:func
+BgSpot00Hanebasi_DrawbridgeWait = 0x808E555C; // type:func
+BgSpot00Hanebasi_DoNothing = 0x808E568C; // type:func
+BgSpot00Hanebasi_DrawbridgeRiseAndFall = 0x808E569C; // type:func
+BgSpot00Hanebasi_SetTorchLightInfo = 0x808E57D0; // type:func
+BgSpot00Hanebasi_Update = 0x808E5928; // type:func
+BgSpot00Hanebasi_DrawTorches = 0x808E5C38; // type:func
+BgSpot00Hanebasi_Draw = 0x808E5ED8; // type:func
+EnMb_SetupAction = 0x808E6200; // type:func
+EnMb_Init = 0x808E620C; // type:func
+EnMb_Destroy = 0x808E6570; // type:func
+EnMb_FaceWaypoint = 0x808E65C0; // type:func
+EnMb_NextWaypoint = 0x808E65F8; // type:func
+EnMb_IsPlayerInCorridor = 0x808E66E4; // type:func
+EnMb_FindWaypointTowardsPlayer = 0x808E6858; // type:func
+EnMb_SetupSpearGuardLookAround = 0x808E69E8; // type:func
+EnMb_SetupClubWaitPlayerNear = 0x808E6A50; // type:func
+EnMb_SetupSpearPatrolTurnTowardsWaypoint = 0x808E6AB4; // type:func
+EnMb_SetupSpearGuardWalk = 0x808E6B2C; // type:func
+EnMb_SetupSpearPatrolWalkTowardsWaypoint = 0x808E6BD0; // type:func
+EnMb_SetupSpearPrepareAndCharge = 0x808E6C80; // type:func
+EnMb_SetupSpearPatrolImmediateCharge = 0x808E6D38; // type:func
+EnMb_SetupClubAttack = 0x808E6DA8; // type:func
+EnMb_SetupSpearEndChargeQuick = 0x808E6E78; // type:func
+EnMb_SetupSpearPatrolEndCharge = 0x808E6ED8; // type:func
+EnMb_SetupClubWaitAfterAttack = 0x808E6F5C; // type:func
+EnMb_SetupClubDamaged = 0x808E6FD4; // type:func
+EnMb_SetupClubDamagedWhileKneeling = 0x808E7034; // type:func
+EnMb_SetupClubDead = 0x808E70BC; // type:func
+EnMb_SetupStunned = 0x808E7144; // type:func
+EnMb_Stunned = 0x808E71E8; // type:func
+EnMb_SpearGuardLookAround = 0x808E72F4; // type:func
+EnMb_SpearPatrolTurnTowardsWaypoint = 0x808E736C; // type:func
+EnMb_SpearEndChargeQuick = 0x808E74D0; // type:func
+EnMb_ClubWaitAfterAttack = 0x808E7638; // type:func
+EnMb_SpearPatrolEndCharge = 0x808E767C; // type:func
+EnMb_SpearGuardPrepareAndCharge = 0x808E7994; // type:func
+EnMb_ClubAttack = 0x808E7AFC; // type:func
+EnMb_SpearPatrolPrepareAndCharge = 0x808E7E74; // type:func
+EnMb_SpearPatrolImmediateCharge = 0x808E81D8; // type:func
+EnMb_ClubDamaged = 0x808E8548; // type:func
+EnMb_ClubDamagedWhileKneeling = 0x808E85DC; // type:func
+EnMb_ClubDead = 0x808E86E8; // type:func
+EnMb_SpearGuardWalk = 0x808E89AC; // type:func
+EnMb_SpearPatrolWalkTowardsWaypoint = 0x808E8CBC; // type:func
+EnMb_ClubWaitPlayerNear = 0x808E8FA8; // type:func
+EnMb_SetupSpearDamaged = 0x808E9058; // type:func
+EnMb_SpearDamaged = 0x808E9120; // type:func
+EnMb_SetupSpearDead = 0x808E9198; // type:func
+EnMb_SpearDead = 0x808E9270; // type:func
+EnMb_SpearUpdateAttackCollider = 0x808E9488; // type:func
+EnMb_ClubUpdateAttackCollider = 0x808E9614; // type:func
+EnMb_CheckColliding = 0x808E96AC; // type:func
+EnMb_Update = 0x808E9878; // type:func
+EnMb_PostLimbDraw = 0x808E9A4C; // type:func
+EnMb_Draw = 0x808E9BE8; // type:func
+EnBombf_SetupAction = 0x808EA430; // type:func
+EnBombf_Init = 0x808EA43C; // type:func
+EnBombf_Destroy = 0x808EA618; // type:func
+EnBombf_SetupGrowBomb = 0x808EA658; // type:func
+EnBombf_GrowBomb = 0x808EA680; // type:func
+EnBombf_Move = 0x808EA990; // type:func
+EnBombf_WaitForRelease = 0x808EAAB4; // type:func
+EnBombf_Explode = 0x808EAB18; // type:func
+EnBombf_Update = 0x808EAC6C; // type:func
+EnBombf_NewMtxDList = 0x808EB418; // type:func
+EnBombf_Draw = 0x808EB4A4; // type:func
+BgHidanFirewall_Init = 0x808EB8C0; // type:func
+BgHidanFirewall_Destroy = 0x808EB960; // type:func
+BgHidanFirewall_CheckProximity = 0x808EB98C; // type:func
+BgHidanFirewall_Wait = 0x808EB9FC; // type:func
+BgHidanFirewall_Countdown = 0x808EBA44; // type:func
+BgHidanFirewall_Erupt = 0x808EBA78; // type:func
+BgHidanFirewall_Collide = 0x808EBB08; // type:func
+BgHidanFirewall_ColliderFollowPlayer = 0x808EBB70; // type:func
+BgHidanFirewall_Update = 0x808EBCD4; // type:func
+BgHidanFirewall_Draw = 0x808EBDAC; // type:func
+BgDyYoseizo_Init = 0x808EC020; // type:func
+BgDyYoseizo_Destroy = 0x808EC124; // type:func
+BgDyYoseizo_SpawnEffects = 0x808EC134; // type:func
+BgDyYoseizo_Bob = 0x808EC430; // type:func
+BgDyYoseizo_CheckMagicAcquired = 0x808EC4F8; // type:func
+BgDyYoseizo_ChooseType = 0x808EC5BC; // type:func
+BgDyYoseizo_SetupSpinGrow_NoReward = 0x808EC9B8; // type:func
+BgDyYoseizo_SpinGrow_NoReward = 0x808ECAB4; // type:func
+BgDyYoseizo_CompleteSpinGrow_NoReward = 0x808ECC10; // type:func
+BgDyYoseizo_SetupGreetPlayer_NoReward = 0x808ECCC0; // type:func
+BgDyYoseizo_GreetPlayer_NoReward = 0x808ECDD8; // type:func
+BgDyYoseizo_SetupHealPlayer_NoReward = 0x808ECEB4; // type:func
+BgDyYoseizo_HealPlayer_NoReward = 0x808ECFA0; // type:func
+BgDyYoseizo_SayFarewell_NoReward = 0x808ED278; // type:func
+BgDyYoseizo_SetupSpinShrink = 0x808ED354; // type:func
+BgDyYoseizo_SpinShrink = 0x808ED458; // type:func
+BgDyYoseizo_Vanish = 0x808ED548; // type:func
+BgDyYoseizo_SetupSpinGrow_Reward = 0x808ED5EC; // type:func
+BgDyYoseizo_SpinGrowSetupGive_Reward = 0x808ED720; // type:func
+BgDyYoseizo_Give_Reward = 0x808EDA4C; // type:func
+BgDyYoseizo_Update = 0x808EE09C; // type:func
+BgDyYoseizo_OverrideLimbDraw = 0x808EE2C8; // type:func
+BgDyYoseizo_Draw = 0x808EE330; // type:func
+BgDyYoseizo_SpawnEffect = 0x808EE4B8; // type:func
+BgDyYoseizo_UpdateEffects = 0x808EE5C8; // type:func
+BgDyYoseizo_DrawEffects = 0x808EE8BC; // type:func
+EnZl2_Destroy = 0x808EEE10; // type:func
+EnZl2_UpdateEyes = 0x808EEE34; // type:func
+func_80B4EA40 = 0x808EEEC4; // type:func
+func_80B4EAF4 = 0x808EEF78; // type:func
+func_80B4EBB8 = 0x808EF03C; // type:func
+func_80B4EC48 = 0x808EF0CC; // type:func
+EnZl2_setEyesIndex = 0x808EF16C; // type:func
+EnZl2_setEyeIndex2 = 0x808EF18C; // type:func
+EnZl2_setMouthIndex = 0x808EF1A4; // type:func
+func_80B4ED2C = 0x808EF1BC; // type:func
+EnZl2_UpdateSkelAnime = 0x808EF204; // type:func
+EnZl2_GetCue = 0x808EF228; // type:func
+func_80B4EDB8 = 0x808EF250; // type:func
+func_80B4EE38 = 0x808EF2D0; // type:func
+func_80B4EF64 = 0x808EF400; // type:func
+func_80B4F230 = 0x808EF6D0; // type:func
+func_80B4F45C = 0x808EF900; // type:func
+EnZl2_PostLimbDraw = 0x808EFFCC; // type:func
+func_80B4FCCC = 0x808F0118; // type:func
+func_80B4FD00 = 0x808F0150; // type:func
+func_80B4FD90 = 0x808F01E0; // type:func
+func_80B4FDD4 = 0x808F0224; // type:func
+func_80B4FE10 = 0x808F0264; // type:func
+func_80B4FE48 = 0x808F029C; // type:func
+func_80B4FE6C = 0x808F02C4; // type:func
+func_80B4FE90 = 0x808F02EC; // type:func
+func_80B4FEB4 = 0x808F0314; // type:func
+func_80B4FED8 = 0x808F033C; // type:func
+EnZl2_GiveLightArrows = 0x808F0364; // type:func
+func_80B4FF84 = 0x808F03F4; // type:func
+func_80B4FFF0 = 0x808F0460; // type:func
+func_80B5008C = 0x808F0500; // type:func
+func_80B500E0 = 0x808F0554; // type:func
+func_80B501C4 = 0x808F0638; // type:func
+func_80B501E8 = 0x808F065C; // type:func
+func_80B50260 = 0x808F06D4; // type:func
+func_80B50278 = 0x808F06F0; // type:func
+func_80B50304 = 0x808F077C; // type:func
+func_80B503DC = 0x808F0854; // type:func
+func_80B5042C = 0x808F08A4; // type:func
+func_80B50488 = 0x808F0900; // type:func
+func_80B504D4 = 0x808F094C; // type:func
+func_80B5053C = 0x808F09B0; // type:func
+func_80B50580 = 0x808F09F8; // type:func
+func_80B505D4 = 0x808F0A4C; // type:func
+func_80B50618 = 0x808F0A94; // type:func
+func_80B50644 = 0x808F0AC0; // type:func
+func_80B50670 = 0x808F0AEC; // type:func
+func_80B506C4 = 0x808F0B40; // type:func
+func_80B5073C = 0x808F0BBC; // type:func
+func_80B50780 = 0x808F0C04; // type:func
+func_80B507E8 = 0x808F0C6C; // type:func
+func_80B5082C = 0x808F0CB4; // type:func
+func_80B50880 = 0x808F0D08; // type:func
+func_80B508C8 = 0x808F0D50; // type:func
+func_80B50928 = 0x808F0DAC; // type:func
+func_80B50970 = 0x808F0DF4; // type:func
+func_80B50980 = 0x808F0E08; // type:func
+func_80B509A0 = 0x808F0E2C; // type:func
+func_80B50A04 = 0x808F0E90; // type:func
+func_80B50BBC = 0x808F1034; // type:func
+func_80B50BEC = 0x808F106C; // type:func
+func_80B50C40 = 0x808F10C8; // type:func
+func_80B50CA8 = 0x808F1138; // type:func
+func_80B50CFC = 0x808F1194; // type:func
+func_80B50D50 = 0x808F11F0; // type:func
+func_80B50D94 = 0x808F123C; // type:func
+func_80B50DE8 = 0x808F1298; // type:func
+func_80B50E3C = 0x808F12F4; // type:func
+func_80B50E90 = 0x808F1350; // type:func
+func_80B50EE4 = 0x808F13AC; // type:func
+func_80B50F38 = 0x808F1408; // type:func
+func_80B50F8C = 0x808F1464; // type:func
+func_80B50FE8 = 0x808F14C8; // type:func
+func_80B51034 = 0x808F151C; // type:func
+func_80B51080 = 0x808F1570; // type:func
+func_80B510CC = 0x808F15C4; // type:func
+func_80B51118 = 0x808F1618; // type:func
+func_80B51164 = 0x808F166C; // type:func
+func_80B511B0 = 0x808F16C0; // type:func
+func_80B511FC = 0x808F1714; // type:func
+func_80B51250 = 0x808F1770; // type:func
+func_80B512B8 = 0x808F17E0; // type:func
+func_80B51310 = 0x808F1840; // type:func
+func_80B5135C = 0x808F1890; // type:func
+func_80B513A8 = 0x808F18DC; // type:func
+func_80B51418 = 0x808F1950; // type:func
+func_80B5146C = 0x808F19A4; // type:func
+func_80B5149C = 0x808F19D8; // type:func
+func_80B514F8 = 0x808F1A38; // type:func
+func_80B5154C = 0x808F1A8C; // type:func
+func_80B515C4 = 0x808F1B04; // type:func
+func_80B515D8 = 0x808F1B1C; // type:func
+func_80B51644 = 0x808F1B88; // type:func
+func_80B51678 = 0x808F1BBC; // type:func
+func_80B516D0 = 0x808F1C14; // type:func
+func_80B51704 = 0x808F1C48; // type:func
+func_80B5175C = 0x808F1CA0; // type:func
+func_80B51790 = 0x808F1CD4; // type:func
+func_80B517E0 = 0x808F1D24; // type:func
+func_80B51824 = 0x808F1D6C; // type:func
+func_80B5187C = 0x808F1DC4; // type:func
+func_80B518C0 = 0x808F1E0C; // type:func
+func_80B51948 = 0x808F1E94; // type:func
+func_80B51A5C = 0x808F1F94; // type:func
+func_80B51A8C = 0x808F1FCC; // type:func
+func_80B51AE4 = 0x808F202C; // type:func
+func_80B51B44 = 0x808F2094; // type:func
+func_80B51BA8 = 0x808F2100; // type:func
+func_80B51C0C = 0x808F216C; // type:func
+func_80B51C64 = 0x808F21CC; // type:func
+func_80B51CA8 = 0x808F2218; // type:func
+func_80B51D0C = 0x808F2284; // type:func
+func_80B51D24 = 0x808F22A0; // type:func
+func_80B51DA4 = 0x808F2320; // type:func
+func_80B51EA8 = 0x808F2424; // type:func
+func_80B51EBC = 0x808F243C; // type:func
+func_80B51F38 = 0x808F24BC; // type:func
+func_80B51FA8 = 0x808F252C; // type:func
+func_80B52068 = 0x808F25D8; // type:func
+func_80B52098 = 0x808F2610; // type:func
+func_80B52108 = 0x808F2688; // type:func
+func_80B52114 = 0x808F2698; // type:func
+func_80B521A0 = 0x808F26F8; // type:func
+EnZl2_Update = 0x808F2784; // type:func
+EnZl2_Init = 0x808F27CC; // type:func
+EnZl2_OverrideLimbDraw = 0x808F2878; // type:func
+func_80B523BC = 0x808F28E0; // type:func
+func_80B523C8 = 0x808F28F0; // type:func
+func_80B525D4 = 0x808F2ACC; // type:func
+EnZl2_Draw = 0x808F2C74; // type:func
+BgHidanFslift_Init = 0x808F3510; // type:func
+BgHidanFslift_SetHookshotTargetPos = 0x808F35F8; // type:func
+BgHidanFslift_Destroy = 0x808F3658; // type:func
+BgHidanFslift_SetupIdle = 0x808F368C; // type:func
+BgHidanFslift_Idle = 0x808F36A8; // type:func
+BgHidanFslift_Descend = 0x808F3748; // type:func
+BgHidanFslift_Ascend = 0x808F37B4; // type:func
+BgHidanFslift_Update = 0x808F3850; // type:func
+BgHidanFslift_Draw = 0x808F38F8; // type:func
+EnOE2_SetupAction = 0x808F39E0; // type:func
+EnOE2_Init = 0x808F39EC; // type:func
+EnOE2_Destroy = 0x808F3A14; // type:func
+EnOE2_DoNothing = 0x808F3A24; // type:func
+EnOE2_Update = 0x808F3A34; // type:func
+EnOE2_Draw = 0x808F3A44; // type:func
+BgYdanHasi_Init = 0x808F3AC0; // type:func
+BgYdanHasi_Destroy = 0x808F3C24; // type:func
+BgYdanHasi_UpdateFloatingBlock = 0x808F3C58; // type:func
+BgYdanHasi_InitWater = 0x808F3D90; // type:func
+BgYdanHasi_MoveWater = 0x808F3DDC; // type:func
+BgYdanHasi_DecWaterTimer = 0x808F3EAC; // type:func
+BgYdanHasi_SetupThreeBlocks = 0x808F3F00; // type:func
+BgYdanHasi_UpdateThreeBlocks = 0x808F3F6C; // type:func
+BgYdanHasi_Update = 0x808F403C; // type:func
+BgYdanHasi_Draw = 0x808F4060; // type:func
+BgYdanMaruta_Init = 0x808F4270; // type:func
+BgYdanMaruta_Destroy = 0x808F44D4; // type:func
+func_808BEFF4 = 0x808F4528; // type:func
+func_808BF078 = 0x808F45AC; // type:func
+func_808BF108 = 0x808F463C; // type:func
+func_808BF1EC = 0x808F4720; // type:func
+BgYdanMaruta_DoNothing = 0x808F4790; // type:func
+BgYdanMaruta_Update = 0x808F47A0; // type:func
+BgYdanMaruta_Draw = 0x808F47C4; // type:func
+BossGanondrof_ClearPixels8x8 = 0x808F4950; // type:func
+BossGanondrof_ClearPixels16x8 = 0x808F4990; // type:func
+BossGanondrof_ClearPixels16x16 = 0x808F49D0; // type:func
+BossGanondrof_ClearPixels32x16 = 0x808F4A00; // type:func
+BossGanondrof_ClearPixels16x32 = 0x808F4A48; // type:func
+BossGanondrof_ClearPixels = 0x808F4A94; // type:func
+BossGanondrof_SetColliderPos = 0x808F4D44; // type:func
+BossGanondrof_Init = 0x808F4D88; // type:func
+BossGanondrof_Destroy = 0x808F5018; // type:func
+BossGanondrof_SetupIntro = 0x808F5084; // type:func
+BossGanondrof_Intro = 0x808F50D0; // type:func
+BossGanondrof_SetupPaintings = 0x808F5588; // type:func
+BossGanondrof_Paintings = 0x808F55CC; // type:func
+BossGanondrof_SetupNeutral = 0x808F57A0; // type:func
+BossGanondrof_Neutral = 0x808F5820; // type:func
+BossGanondrof_SetupThrow = 0x808F5F68; // type:func
+BossGanondrof_Throw = 0x808F6090; // type:func
+BossGanondrof_SetupReturn = 0x808F629C; // type:func
+BossGanondrof_Return = 0x808F633C; // type:func
+BossGanondrof_SetupStunned = 0x808F6448; // type:func
+BossGanondrof_Stunned = 0x808F650C; // type:func
+BossGanondrof_SetupBlock = 0x808F6620; // type:func
+BossGanondrof_Block = 0x808F6694; // type:func
+BossGanondrof_SetupCharge = 0x808F6770; // type:func
+BossGanondrof_Charge = 0x808F67E0; // type:func
+BossGanondrof_SetupDeath = 0x808F6EC4; // type:func
+BossGanondrof_Death = 0x808F6F5C; // type:func
+BossGanondrof_CollisionCheck = 0x808F7E4C; // type:func
+BossGanondrof_Update = 0x808F8078; // type:func
+BossGanondrof_OverrideLimbDraw = 0x808F8480; // type:func
+BossGanondrof_PostLimbDraw = 0x808F885C; // type:func
+BossGanondrof_GetClearPixelDList = 0x808F8920; // type:func
+BossGanondrof_EmptyDList = 0x808F898C; // type:func
+BossGanondrof_Draw = 0x808F89B0; // type:func
+EnAm_SetupAction = 0x808F96E0; // type:func
+EnAm_CanMove = 0x808F96EC; // type:func
+EnAm_Init = 0x808F9818; // type:func
+EnAm_Destroy = 0x808F99E4; // type:func
+EnAm_SpawnEffects = 0x808F9A3C; // type:func
+EnAm_SetupSleep = 0x808F9BD8; // type:func
+EnAm_SetupStatue = 0x808F9C74; // type:func
+EnAm_SetupLunge = 0x808F9D04; // type:func
+EnAm_SetupCooldown = 0x808F9D68; // type:func
+EnAm_SetupMoveToHome = 0x808F9DD4; // type:func
+EnAm_SetupRotateToInit = 0x808F9E30; // type:func
+EnAm_SetupRotateToHome = 0x808F9E8C; // type:func
+EnAm_SetupRecoilFromDamage = 0x808F9EE8; // type:func
+EnAm_SetupRicochet = 0x808F9FC0; // type:func
+EnAm_Sleep = 0x808FA074; // type:func
+EnAm_RotateToHome = 0x808FA2E0; // type:func
+EnAm_RotateToInit = 0x808FA3E4; // type:func
+EnAm_MoveToHome = 0x808FA550; // type:func
+EnAm_RecoilFromDamage = 0x808FA6C0; // type:func
+EnAm_Cooldown = 0x808FA764; // type:func
+EnAm_Lunge = 0x808FA89C; // type:func
+EnAm_Statue = 0x808FAAD0; // type:func
+EnAm_SetupStunned = 0x808FAD20; // type:func
+EnAm_Stunned = 0x808FAE0C; // type:func
+EnAm_Ricochet = 0x808FAEE0; // type:func
+EnAm_TransformSwordHitbox = 0x808FAF94; // type:func
+EnAm_UpdateDamage = 0x808FB02C; // type:func
+EnAm_Update = 0x808FB1C4; // type:func
+EnAm_PostLimbDraw = 0x808FB568; // type:func
+EnAm_Draw = 0x808FB5B0; // type:func
+EnDekubaba_Init = 0x808FBAE0; // type:func
+EnDekubaba_Destroy = 0x808FBD24; // type:func
+EnDekubaba_DisableACColliderElems = 0x808FBD50; // type:func
+EnDekubaba_SetupWait = 0x808FBDD8; // type:func
+EnDekubaba_SetupGrow = 0x808FC040; // type:func
+EnDekubaba_SetupRetract = 0x808FC170; // type:func
+EnDekubaba_SetupDecideLunge = 0x808FC258; // type:func
+EnDekubaba_SetupPrepareLunge = 0x808FC2B0; // type:func
+EnDekubaba_SetupLunge = 0x808FC2D4; // type:func
+EnDekubaba_SetupPullBack = 0x808FC318; // type:func
+EnDekubaba_SetupRecover = 0x808FC390; // type:func
+EnDekubaba_SetupHit = 0x808FC3C4; // type:func
+EnDekubaba_SetupPrunedSomersault = 0x808FC48C; // type:func
+EnDekubaba_SetupShrinkDie = 0x808FC500; // type:func
+EnDekubaba_SetupStunnedVertical = 0x808FC580; // type:func
+EnDekubaba_SetupSway = 0x808FC704; // type:func
+EnDekubaba_SetupDeadStickDrop = 0x808FC770; // type:func
+EnDekubaba_Wait = 0x808FC810; // type:func
+EnDekubaba_Grow = 0x808FC8BC; // type:func
+EnDekubaba_Retract = 0x808FCD24; // type:func
+EnDekubaba_UpdateHeadPosition = 0x808FD0EC; // type:func
+EnDekubaba_DecideLunge = 0x808FD1F0; // type:func
+EnDekubaba_Lunge = 0x808FD420; // type:func
+EnDekubaba_PrepareLunge = 0x808FD6A8; // type:func
+EnDekubaba_PullBack = 0x808FD774; // type:func
+EnDekubaba_Recover = 0x808FDB00; // type:func
+EnDekubaba_Hit = 0x808FDBF8; // type:func
+EnDekubaba_StunnedVertical = 0x808FDD08; // type:func
+EnDekubaba_Sway = 0x808FDDA4; // type:func
+EnDekubaba_PrunedSomersault = 0x808FDECC; // type:func
+EnDekubaba_ShrinkDie = 0x808FE230; // type:func
+EnDekubaba_DeadStickDrop = 0x808FE3F4; // type:func
+EnDekubaba_UpdateDamage = 0x808FE45C; // type:func
+EnDekubaba_Update = 0x808FE710; // type:func
+EnDekubaba_DrawStemRetracted = 0x808FE8B0; // type:func
+EnDekubaba_DrawStemExtended = 0x808FE9A0; // type:func
+EnDekubaba_DrawStemBasePruned = 0x808FEC90; // type:func
+EnDekubaba_DrawBaseShadow = 0x808FED50; // type:func
+EnDekubaba_PostLimbDraw = 0x808FEE44; // type:func
+EnDekubaba_Draw = 0x808FEE80; // type:func
+EnMFire1_Init = 0x808FF590; // type:func
+EnMFire1_Destroy = 0x808FF5FC; // type:func
+EnMFire1_Update = 0x808FF628; // type:func
+func_80A9EFE0 = 0x808FF730; // type:func
+EnMThunder_Init = 0x808FF73C; // type:func
+EnMThunder_Destroy = 0x808FF9FC; // type:func
+func_80A9F314 = 0x808FFA6C; // type:func
+func_80A9F350 = 0x808FFAA8; // type:func
+func_80A9F408 = 0x808FFB60; // type:func
+func_80A9F938 = 0x80900094; // type:func
+func_80A9F9B4 = 0x80900110; // type:func
+EnMThunder_Update = 0x8090027C; // type:func
+EnMThunder_Draw = 0x80900450; // type:func
+BgDdanJd_Init = 0x80900D30; // type:func
+BgDdanJd_Destroy = 0x80900DDC; // type:func
+BgDdanJd_Idle = 0x80900E10; // type:func
+BgDdanJd_MoveEffects = 0x80900FB4; // type:func
+BgDdanJd_Move = 0x8090118C; // type:func
+BgDdanJd_Update = 0x80901290; // type:func
+BgDdanJd_Draw = 0x809012B4; // type:func
+BgBreakwall_SetupAction = 0x80901380; // type:func
+BgBreakwall_Init = 0x8090138C; // type:func
+BgBreakwall_Destroy = 0x80901538; // type:func
+BgBreakwall_SpawnFragments = 0x8090156C; // type:func
+BgBreakwall_WaitForObject = 0x80901A3C; // type:func
+BgBreakwall_Wait = 0x80901B44; // type:func
+BgBreakwall_LavaCoverMove = 0x80901D14; // type:func
+BgBreakwall_Update = 0x80901D68; // type:func
+BgBreakwall_Draw = 0x80901D8C; // type:func
+EnJj_SetupAction = 0x809021F0; // type:func
+EnJj_Init = 0x809021FC; // type:func
+EnJj_Destroy = 0x8090248C; // type:func
+EnJj_Blink = 0x8090251C; // type:func
+EnJj_OpenMouth = 0x8090259C; // type:func
+EnJj_WaitToOpenMouth = 0x809025F0; // type:func
+EnJj_WaitForFish = 0x80902634; // type:func
+EnJj_BeginCutscene = 0x809026F0; // type:func
+EnJj_CutsceneUpdate = 0x80902798; // type:func
+EnJj_RemoveDust = 0x809028F4; // type:func
+EnJj_UpdateStaticCollision = 0x8090294C; // type:func
+EnJj_Update = 0x8090295C; // type:func
+EnJj_Draw = 0x80902A08; // type:func
+EnHorseZelda_GetFieldPosition = 0x809037C0; // type:func
+EnHorseZelda_Move = 0x8090380C; // type:func
+EnHorseZelda_Init = 0x809039D4; // type:func
+EnHorseZelda_Destroy = 0x80903B24; // type:func
+EnHorseZelda_SetupStop = 0x80903B74; // type:func
+EnHorseZelda_Stop = 0x80903BC4; // type:func
+EnHorseZelda_Spur = 0x80903C0C; // type:func
+EnHorseZelda_Gallop = 0x80903CF4; // type:func
+EnHorseZelda_SetRotate = 0x80903D34; // type:func
+EnHorseZelda_Update = 0x80903DF8; // type:func
+EnHorseZelda_PostDraw = 0x80903ED4; // type:func
+EnHorseZelda_Draw = 0x80904060; // type:func
+BgDdanKd_SetupAction = 0x809042B0; // type:func
+BgDdanKd_Init = 0x809042BC; // type:func
+BgDdanKd_Destroy = 0x809043B4; // type:func
+BgDdanKd_CheckForExplosions = 0x809043FC; // type:func
+BgDdanKd_LowerStairs = 0x80904514; // type:func
+BgDdanKd_DoNothing = 0x809049E8; // type:func
+BgDdanKd_Update = 0x809049F8; // type:func
+BgDdanKd_Draw = 0x80904A1C; // type:func
+DoorWarp1_SetupAction = 0x80904BA0; // type:func
+DoorWarp1_Init = 0x80904BAC; // type:func
+DoorWarp1_Destroy = 0x80904D1C; // type:func
+DoorWarp1_SetupWarp = 0x80904DA4; // type:func
+DoorWarp1_SetupAdultDungeonWarp = 0x809050AC; // type:func
+DoorWarp1_SetupBlueCrystal = 0x80905278; // type:func
+DoorWarp1_SetupPurpleCrystal = 0x80905410; // type:func
+DoorWarp1_SetPlayerPos = 0x809055B0; // type:func
+DoorWarp1_BlueCrystal = 0x809055E8; // type:func
+func_80999214 = 0x80905634; // type:func
+func_80999348 = 0x80905768; // type:func
+DoorWarp1_FloatPlayer = 0x80905830; // type:func
+DoorWarp1_PurpleCrystal = 0x8090584C; // type:func
+DoorWarp1_ChooseInitialAction = 0x8090592C; // type:func
+DoorWarp1_AwaitClearFlag = 0x809059A4; // type:func
+func_809995D4 = 0x809059FC; // type:func
+DoorWarp1_WarpAppear = 0x80905B4C; // type:func
+func_809998A4 = 0x80905CD0; // type:func
+DoorWarp1_PlayerInRange = 0x80905D68; // type:func
+DoorWarp1_ChildWarpIdle = 0x80905DD4; // type:func
+DoorWarp1_ChildWarpOut = 0x80905EA0; // type:func
+DoorWarp1_RutoWarpIdle = 0x80906294; // type:func
+func_80999EE0 = 0x80906314; // type:func
+func_80999FE4 = 0x8090641C; // type:func
+DoorWarp1_RutoWarpOut = 0x809064D4; // type:func
+func_8099A3A4 = 0x809067E0; // type:func
+DoorWarp1_AdultWarpIdle = 0x809068AC; // type:func
+func_8099A508 = 0x8090694C; // type:func
+DoorWarp1_AdultWarpOut = 0x80906A30; // type:func
+DoorWarp1_Destination = 0x80907314; // type:func
+DoorWarp1_DoNothing = 0x80907444; // type:func
+func_8099B020 = 0x80907454; // type:func
+DoorWarp1_Update = 0x80907510; // type:func
+DoorWarp1_DrawBlueCrystal = 0x80907574; // type:func
+DoorWarp1_DrawPurpleCrystal = 0x80907744; // type:func
+DoorWarp1_DrawWarp = 0x809079C8; // type:func
+DoorWarp1_Draw = 0x80908874; // type:func
+ObjSyokudai_Init = 0x80908EB0; // type:func
+ObjSyokudai_Destroy = 0x80909074; // type:func
+ObjSyokudai_Update = 0x809090C8; // type:func
+ObjSyokudai_Draw = 0x809096E4; // type:func
+ItemBHeart_Init = 0x80909B00; // type:func
+ItemBHeart_Destroy = 0x80909B6C; // type:func
+ItemBHeart_Update = 0x80909B7C; // type:func
+func_80B85264 = 0x80909C24; // type:func
+ItemBHeart_Draw = 0x80909D10; // type:func
+EnDekunuts_Init = 0x80909F10; // type:func
+EnDekunuts_Destroy = 0x8090A07C; // type:func
+EnDekunuts_SetupWait = 0x8090A0B8; // type:func
+EnDekunuts_SetupLookAround = 0x8090A12C; // type:func
+EnDekunuts_SetupThrowNut = 0x8090A174; // type:func
+EnDekunuts_SetupStand = 0x8090A1B8; // type:func
+EnDekunuts_SetupBurrow = 0x8090A220; // type:func
+EnDekunuts_SetupBeginRun = 0x8090A270; // type:func
+EnDekunuts_SetupRun = 0x8090A2D8; // type:func
+EnDekunuts_SetupGasp = 0x8090A330; // type:func
+EnDekunuts_SetupBeDamaged = 0x8090A390; // type:func
+EnDekunuts_SetupBeStunned = 0x8090A46C; // type:func
+EnDekunuts_SetupDie = 0x8090A500; // type:func
+EnDekunuts_Wait = 0x8090A550; // type:func
+EnDekunuts_LookAround = 0x8090A7B4; // type:func
+EnDekunuts_Stand = 0x8090A838; // type:func
+EnDekunuts_ThrowNut = 0x8090A924; // type:func
+EnDekunuts_Burrow = 0x8090AA7C; // type:func
+EnDekunuts_BeginRun = 0x8090AB90; // type:func
+EnDekunuts_Run = 0x8090ABF8; // type:func
+EnDekunuts_Gasp = 0x8090AE38; // type:func
+EnDekunuts_BeDamaged = 0x8090AEA0; // type:func
+EnDekunuts_BeStunned = 0x8090AEF0; // type:func
+EnDekunuts_Die = 0x8090AF6C; // type:func
+EnDekunuts_ColliderCheck = 0x8090B0C8; // type:func
+EnDekunuts_Update = 0x8090B1EC; // type:func
+EnDekunuts_OverrideLimbDraw = 0x8090B354; // type:func
+EnDekunuts_Draw = 0x8090B488; // type:func
+BgMenkuriKaiten_Init = 0x8090B710; // type:func
+BgMenkuriKaiten_Destroy = 0x8090B778; // type:func
+BgMenkuriKaiten_Update = 0x8090B7AC; // type:func
+BgMenkuriKaiten_Draw = 0x8090B80C; // type:func
+BgMenkuriEye_Init = 0x8090B8A0; // type:func
+BgMenkuriEye_Destroy = 0x8090B97C; // type:func
+BgMenkuriEye_Update = 0x8090B9A8; // type:func
+BgMenkuriEye_Draw = 0x8090BB18; // type:func
+EnVali_Init = 0x8090BD40; // type:func
+EnVali_Destroy = 0x8090BEBC; // type:func
+EnVali_SetupLurk = 0x8090BF0C; // type:func
+EnVali_SetupDropAppear = 0x8090BF5C; // type:func
+EnVali_SetupFloatIdle = 0x8090BF94; // type:func
+EnVali_SetupAttacked = 0x8090C1AC; // type:func
+EnVali_SetupRetaliate = 0x8090C1E4; // type:func
+EnVali_SetupMoveArmsDown = 0x8090C254; // type:func
+EnVali_SetupBurnt = 0x8090C294; // type:func
+EnVali_SetupDivideAndDie = 0x8090C2EC; // type:func
+EnVali_SetupStunned = 0x8090C3F0; // type:func
+EnVali_SetupFrozen = 0x8090C47C; // type:func
+EnVali_SetupReturnToLurk = 0x8090C4DC; // type:func
+EnVali_DischargeLightning = 0x8090C538; // type:func
+EnVali_Lurk = 0x8090C734; // type:func
+EnVali_DropAppear = 0x8090C774; // type:func
+EnVali_FloatIdle = 0x8090C808; // type:func
+EnVali_Attacked = 0x8090C9B4; // type:func
+EnVali_Retaliate = 0x8090CA6C; // type:func
+EnVali_MoveArmsDown = 0x8090CAC8; // type:func
+EnVali_Burnt = 0x8090CB04; // type:func
+EnVali_DivideAndDie = 0x8090CB40; // type:func
+EnVali_Stunned = 0x8090CCF4; // type:func
+EnVali_Frozen = 0x8090CDB0; // type:func
+EnVali_ReturnToLurk = 0x8090CF40; // type:func
+EnVali_UpdateDamage = 0x8090CFB0; // type:func
+EnVali_Update = 0x8090D168; // type:func
+EnVali_PulseOutside = 0x8090D2C4; // type:func
+EnVali_PulseInsides = 0x8090D4E0; // type:func
+EnVali_SetArmLength = 0x8090D6FC; // type:func
+EnVali_OverrideLimbDraw = 0x8090D89C; // type:func
+EnVali_PostLimbDraw = 0x8090D92C; // type:func
+EnVali_DrawBody = 0x8090D9F0; // type:func
+EnVali_Draw = 0x8090DD58; // type:func
+BgMizuMovebg_GetDragonStatueBossRoomOffsetIndex = 0x8090E400; // type:func
+BgMizuMovebg_Init = 0x8090E46C; // type:func
+BgMizuMovebg_Destroy = 0x8090E834; // type:func
+BgMizuMovebg_SetPosFromPath = 0x8090E8E8; // type:func
+BgMizuMovebg_SetScrollAlphas = 0x8090E97C; // type:func
+BgMizuMovebg_UpdateMain = 0x8090EB00; // type:func
+BgMizuMovebg_UpdateHookshotPlatform = 0x8090EE3C; // type:func
+BgMizuMovebg_Update = 0x8090EFF8; // type:func
+BgMizuMovebg_Draw = 0x8090F01C; // type:func
+BgMizuWater_GetWaterLevelActionIndex = 0x8090F590; // type:func
+BgMizuWater_SetWaterBoxesHeight = 0x8090F630; // type:func
+BgMizuWater_Init = 0x8090F69C; // type:func
+BgMizuWater_Destroy = 0x8090F8F8; // type:func
+BgMizuWater_WaitForAction = 0x8090F908; // type:func
+BgMizuWater_ChangeWaterLevel = 0x8090FAD4; // type:func
+BgMizuWater_Update = 0x8090FDE4; // type:func
+BgMizuWater_Draw = 0x8090FF3C; // type:func
+ArmsHook_SetupAction = 0x80910260; // type:func
+ArmsHook_Init = 0x8091026C; // type:func
+ArmsHook_Destroy = 0x809102E0; // type:func
+ArmsHook_Wait = 0x80910328; // type:func
+ArmsHook_PullPlayer = 0x809103A8; // type:func
+ArmsHook_AttachToPlayer = 0x809103BC; // type:func
+ArmsHook_DetachFromActor = 0x809103EC; // type:func
+ArmsHook_CheckForCancel = 0x80910414; // type:func
+ArmsHook_AttachToActor = 0x809104B0; // type:func
+ArmsHook_Shoot = 0x809104F8; // type:func
+ArmsHook_Update = 0x80910B64; // type:func
+ArmsHook_Draw = 0x80910BA4; // type:func
+EnfHG_Init = 0x80910FD0; // type:func
+EnfHG_Destroy = 0x809110D0; // type:func
+EnfHG_SetupIntro = 0x809110FC; // type:func
+EnfHG_Intro = 0x80911160; // type:func
+EnfHG_SetupApproach = 0x8091236C; // type:func
+EnfHG_Approach = 0x809125B8; // type:func
+EnfHG_Attack = 0x8091275C; // type:func
+EnfHG_Damage = 0x80912BE0; // type:func
+EnfHG_Retreat = 0x80912F10; // type:func
+EnfHG_Done = 0x80913144; // type:func
+EnfHG_Update = 0x80913154; // type:func
+EnfHG_PostDraw = 0x809132E8; // type:func
+EnfHG_Draw = 0x809132FC; // type:func
+BgMoriHineri_Init = 0x80913900; // type:func
+BgMoriHineri_Destroy = 0x80913B00; // type:func
+func_808A39FC = 0x80913B34; // type:func
+BgMoriHineri_DoNothing = 0x80913D2C; // type:func
+BgMoriHineri_SpawnBossKeyChest = 0x80913D3C; // type:func
+func_808A3C8C = 0x80913DCC; // type:func
+func_808A3D58 = 0x80913E98; // type:func
+func_808A3E54 = 0x80913F94; // type:func
+BgMoriHineri_Update = 0x80914074; // type:func
+BgMoriHineri_DrawHallAndRoom = 0x80914098; // type:func
+EnBb_SetupAction = 0x80914650; // type:func
+EnBb_FindExplosive = 0x8091465C; // type:func
+EnBb_SpawnFlameTrail = 0x809146F0; // type:func
+EnBb_KillFlameTrail = 0x8091488C; // type:func
+EnBb_Init = 0x809148D8; // type:func
+EnBb_Destroy = 0x80914C80; // type:func
+EnBb_SetupFlameTrail = 0x80914CAC; // type:func
+EnBb_FlameTrail = 0x80914D00; // type:func
+EnBb_SetupDeath = 0x80914E7C; // type:func
+EnBb_Death = 0x80914F10; // type:func
+EnBb_SetupDamage = 0x8091508C; // type:func
+EnBb_Damage = 0x8091514C; // type:func
+EnBb_SetupBlue = 0x809151B8; // type:func
+EnBb_Blue = 0x80915278; // type:func
+EnBb_SetupDown = 0x80915A6C; // type:func
+EnBb_Down = 0x80915AFC; // type:func
+EnBb_SetupRed = 0x80915DD0; // type:func
+EnBb_Red = 0x80915EE0; // type:func
+EnBb_FaceWaypoint = 0x809162A8; // type:func
+EnBb_SetWaypoint = 0x809162DC; // type:func
+EnBb_SetupWhite = 0x809163A8; // type:func
+EnBb_White = 0x80916458; // type:func
+EnBb_InitGreen = 0x809167DC; // type:func
+EnBb_SetupGreen = 0x80916914; // type:func
+EnBb_Green = 0x809169AC; // type:func
+EnBb_SetupStunned = 0x8091701C; // type:func
+EnBb_Stunned = 0x80917130; // type:func
+EnBb_CollisionCheck = 0x809172D4; // type:func
+EnBb_Update = 0x80917608; // type:func
+EnBb_PostLimbDraw = 0x80917888; // type:func
+EnBb_Draw = 0x809178D8; // type:func
+BgTokiHikari_Init = 0x80918330; // type:func
+BgTokiHikari_Destroy = 0x809183BC; // type:func
+BgTokiHikari_DoNothing = 0x809183CC; // type:func
+BgTokiHikari_Update = 0x809183DC; // type:func
+BgTokiHikari_Draw = 0x80918400; // type:func
+func_808BA018 = 0x80918450; // type:func
+func_808BA204 = 0x809185F8; // type:func
+func_808BA22C = 0x80918620; // type:func
+func_808BA274 = 0x80918668; // type:func
+func_808BA2CC = 0x809186C0; // type:func
+EnYukabyun_Init = 0x809190D0; // type:func
+EnYukabyun_Destroy = 0x80919180; // type:func
+func_80B43A94 = 0x809191AC; // type:func
+func_80B43AD4 = 0x809191EC; // type:func
+func_80B43B6C = 0x80919284; // type:func
+EnYukabyun_Break = 0x809192E4; // type:func
+EnYukabyun_Update = 0x80919358; // type:func
+EnYukabyun_Draw = 0x809194F8; // type:func
+BgTokiSwd_SetupAction = 0x809196E0; // type:func
+BgTokiSwd_Init = 0x809196EC; // type:func
+BgTokiSwd_Destroy = 0x809197C0; // type:func
+func_808BAF40 = 0x809197EC; // type:func
+func_808BB0AC = 0x80919960; // type:func
+func_808BB128 = 0x809199E0; // type:func
+BgTokiSwd_Update = 0x80919A34; // type:func
+BgTokiSwd_Draw = 0x80919A88; // type:func
+EnFhgFire_SetUpdate = 0x8091AD30; // type:func
+EnFhgFire_Init = 0x8091AD3C; // type:func
+EnFhgFire_Destroy = 0x8091B14C; // type:func
+EnFhgFire_LightningStrike = 0x8091B1BC; // type:func
+EnFhgFire_LightningTrail = 0x8091B554; // type:func
+EnFhgFire_LightningShock = 0x8091B6F4; // type:func
+EnFhgFire_LightningBurst = 0x8091B838; // type:func
+EnFhgFire_SpearLight = 0x8091BAB4; // type:func
+EnFhgFire_EnergyBall = 0x8091BCA8; // type:func
+EnFhgFire_PhantomWarp = 0x8091C954; // type:func
+EnFhgFire_Update = 0x8091CB10; // type:func
+EnFhgFire_Draw = 0x8091CB60; // type:func
+BgMjin_SetupAction = 0x8091D3D0; // type:func
+BgMjin_Init = 0x8091D3DC; // type:func
+BgMjin_Destroy = 0x8091D47C; // type:func
+func_808A0850 = 0x8091D4B0; // type:func
+BgMjin_DoNothing = 0x8091D584; // type:func
+BgMjin_Update = 0x8091D594; // type:func
+BgMjin_Draw = 0x8091D5B8; // type:func
+BgHidanKousi_SetupAction = 0x8091D7C0; // type:func
+BgHidanKousi_Init = 0x8091D7CC; // type:func
+BgHidanKousi_Destroy = 0x8091D8C4; // type:func
+func_80889ACC = 0x8091D8F8; // type:func
+func_80889B5C = 0x8091D984; // type:func
+func_80889BC0 = 0x8091D9E8; // type:func
+func_80889C18 = 0x8091DA40; // type:func
+func_80889C90 = 0x8091DAB8; // type:func
+func_80889D28 = 0x8091DB54; // type:func
+BgHidanKousi_Update = 0x8091DB64; // type:func
+BgHidanKousi_Draw = 0x8091DB88; // type:func
+DoorToki_Init = 0x8091DD50; // type:func
+DoorToki_Destroy = 0x8091DDB8; // type:func
+DoorToki_Update = 0x8091DDEC; // type:func
+BgHidanHamstep_SetupAction = 0x8091DEB0; // type:func
+BgHidanHamstep_SpawnChildren = 0x8091DED0; // type:func
+BgHidanHamstep_Init = 0x8091E04C; // type:func
+BgHidanHamstep_Destroy = 0x8091E2BC; // type:func
+func_808884C8 = 0x8091E310; // type:func
+func_80888638 = 0x8091E480; // type:func
+func_80888694 = 0x8091E4DC; // type:func
+func_80888734 = 0x8091E57C; // type:func
+func_808887C4 = 0x8091E610; // type:func
+func_80888860 = 0x8091E6AC; // type:func
+func_808889B8 = 0x8091E7F8; // type:func
+func_80888A58 = 0x8091E898; // type:func
+BgHidanHamstep_DoNothing = 0x8091EA30; // type:func
+BgHidanHamstep_Update = 0x8091EA40; // type:func
+BgHidanHamstep_Draw = 0x8091EA64; // type:func
+EnBird_SetupAction = 0x8091ED60; // type:func
+EnBird_Init = 0x8091ED6C; // type:func
+EnBird_Destroy = 0x8091EE58; // type:func
+EnBird_SetupIdle = 0x8091EE68; // type:func
+EnBird_Idle = 0x8091EF1C; // type:func
+EnBird_SetupMove = 0x8091EFBC; // type:func
+EnBird_Move = 0x8091EFFC; // type:func
+EnBird_Update = 0x8091F118; // type:func
+EnBird_Draw = 0x8091F148; // type:func
+EnWood02_SpawnZoneCheck = 0x8091F220; // type:func
+EnWood02_SpawnOffspring = 0x8091F348; // type:func
+EnWood02_Init = 0x8091F560; // type:func
+EnWood02_Destroy = 0x8091F99C; // type:func
+EnWood02_Update = 0x8091F9D8; // type:func
+EnWood02_Draw = 0x8091FED0; // type:func
+EnLightbox_Init = 0x80920400; // type:func
+EnLightbox_Destroy = 0x8092052C; // type:func
+EnLightbox_Update = 0x80920560; // type:func
+EnLightbox_Draw = 0x809207E8; // type:func
+EnPubox_Init = 0x80920880; // type:func
+EnPubox_Destroy = 0x809209B8; // type:func
+EnPubox_Update = 0x809209EC; // type:func
+EnPubox_Draw = 0x80920B3C; // type:func
+EnTrap_Init = 0x80920BC0; // type:func
+EnTrap_Destroy = 0x80920F7C; // type:func
+EnTrap_Update = 0x80920FA8; // type:func
+EnTrap_Draw = 0x80921D3C; // type:func
+EnArowTrap_Init = 0x80921E60; // type:func
+EnArowTrap_Destroy = 0x80921EB0; // type:func
+EnArowTrap_Update = 0x80921EC0; // type:func
+EnVase_Init = 0x80921FB0; // type:func
+EnVase_Destroy = 0x80922014; // type:func
+EnVase_Draw = 0x80922024; // type:func
+EnTa_SetupAction = 0x809220B0; // type:func
+EnTa_SetTextForTalkInLonLonHouse = 0x809220C0; // type:func
+EnTa_Init = 0x809221A0; // type:func
+EnTa_DecreaseShadowSize = 0x80922824; // type:func
+EnTa_Destroy = 0x80922858; // type:func
+EnTa_RequestTalk = 0x809228D0; // type:func
+EnTa_SleepTalkInKakariko = 0x80922978; // type:func
+EnTa_SleepTalkInLonLonHouse = 0x809229B8; // type:func
+EnTa_SetupAwake = 0x809229F8; // type:func
+EnTa_TalkWakingUp2 = 0x80922A74; // type:func
+EnTa_TalkWakingUp1 = 0x80922AC0; // type:func
+EnTa_WakeUp = 0x80922B5C; // type:func
+EnTa_SleepTalkInCastle = 0x80922BE8; // type:func
+EnTa_IdleAsleepInCastle = 0x80922C28; // type:func
+EnTa_IdleAsleepInLonLonHouse = 0x80922CF0; // type:func
+EnTa_IdleAsleepInKakariko = 0x80922D54; // type:func
+EnTa_RunWithAccelerationAndSfx = 0x80922E1C; // type:func
+EnTa_RunAwayRunOutOfGate = 0x80922E9C; // type:func
+EnTa_RunAwayTurnTowardsGate = 0x80922F10; // type:func
+EnTa_RunAwayRunWest = 0x80922F70; // type:func
+EnTa_RunAwayTurnWest = 0x80922FF8; // type:func
+EnTa_RunAwayRunSouth = 0x80923058; // type:func
+EnTa_RunAwayStart = 0x809230F8; // type:func
+EnTa_TalkAwakeInCastle = 0x80923170; // type:func
+EnTa_IdleAwakeInCastle = 0x8092321C; // type:func
+EnTa_TalkAwakeInKakariko = 0x80923268; // type:func
+EnTa_IdleAwakeInKakariko = 0x809232B4; // type:func
+EnTa_TalkAtRanch = 0x8092335C; // type:func
+EnTa_IdleAtRanch = 0x809233A8; // type:func
+EnTa_CheckCanBuyMilk = 0x809233EC; // type:func
+EnTa_CreateFloorCamera = 0x8092343C; // type:func
+EnTa_RemoveFloorCamera = 0x809234F0; // type:func
+EnTa_SetupActionWithSleepAnimation = 0x80923534; // type:func
+EnTa_SetupActionWithWakeUpAnimation = 0x809235C4; // type:func
+EnTa_TalkNotEnoughRupees = 0x80923650; // type:func
+EnTa_IsPlayerHoldingSuperCucco = 0x809236C8; // type:func
+EnTa_TalkFoundSuperCucco = 0x8092371C; // type:func
+EnTa_IdleFoundSuperCucco = 0x8092387C; // type:func
+EnTa_GetSuperCuccosCount = 0x809238EC; // type:func
+EnTa_AnimateHandsUpDown = 0x80923928; // type:func
+EnTa_TransitionToPostCuccoGame = 0x809239F4; // type:func
+EnTa_TalkCuccoGameEnd = 0x80923A44; // type:func
+EnTa_RunCuccoGame = 0x80923B20; // type:func
+EnTa_ThrowSuperCuccos = 0x80923E80; // type:func
+EnTa_StartingCuccoGame3 = 0x809240F8; // type:func
+EnTa_StartingCuccoGame2 = 0x8092421C; // type:func
+EnTa_StartingCuccoGame1 = 0x809242EC; // type:func
+EnTa_StartCuccoGame = 0x809243B4; // type:func
+EnTa_TalkGeneralInLonLonHouse = 0x8092444C; // type:func
+EnTa_GiveItemInLonLonHouse = 0x809244A8; // type:func
+EnTa_TalkAfterCuccoGameFirstWon = 0x8092457C; // type:func
+EnTa_WaitBuyMilkOrPlayCuccoGameResponse = 0x80924614; // type:func
+EnTa_WaitForPlayCuccoGameResponse = 0x809247F0; // type:func
+EnTa_WaitForMarryMalonResponse = 0x80924918; // type:func
+EnTa_ContinueTalkInLonLonHouse = 0x80924998; // type:func
+EnTa_TalkAfterCuccoGameWon = 0x80924A64; // type:func
+EnTa_IdleSittingInLonLonHouse = 0x80924B3C; // type:func
+EnTa_IdleAfterCuccoGameFinished = 0x80924C3C; // type:func
+EnTa_BlinkWaitUntilNext = 0x80924D00; // type:func
+EnTa_BlinkAdvanceState = 0x80924D34; // type:func
+EnTa_AnimRepeatCurrent = 0x80924DF4; // type:func
+EnTa_AnimSleeping = 0x80924E34; // type:func
+EnTa_AnimSitSleeping = 0x80924E88; // type:func
+EnTa_AnimRunToEnd = 0x80924F68; // type:func
+EnTa_Update = 0x80924FC0; // type:func
+EnTa_OverrideLimbDraw = 0x80925150; // type:func
+EnTa_PostLimbDraw = 0x809252D4; // type:func
+EnTa_Draw = 0x80925314; // type:func
+EnTkEff_Create = 0x80925A70; // type:func
+EnTkEff_Update = 0x80925B14; // type:func
+EnTkEff_Draw = 0x80925C20; // type:func
+EnTkEff_CreateDflt = 0x80925F18; // type:func
+EnTk_RestAnim = 0x80925FD0; // type:func
+EnTk_WalkAnim = 0x8092604C; // type:func
+EnTk_DigAnim = 0x809260C0; // type:func
+EnTk_UpdateEyes = 0x80926140; // type:func
+EnTk_CheckFacingPlayer = 0x80926204; // type:func
+EnTk_CheckNextSpot = 0x80926288; // type:func
+EnTk_CheckCurrentSpot = 0x80926370; // type:func
+EnTk_Step = 0x809263E8; // type:func
+EnTk_Orient = 0x80926510; // type:func
+EnTk_GetTextId = 0x80926680; // type:func
+EnTk_UpdateTalkState = 0x809266D4; // type:func
+EnTk_ChooseReward = 0x80926870; // type:func
+EnTk_DigEff = 0x80926A2C; // type:func
+EnTk_Init = 0x80926B9C; // type:func
+EnTk_Destroy = 0x80926D18; // type:func
+EnTk_Rest = 0x80926D44; // type:func
+EnTk_Walk = 0x80926F6C; // type:func
+EnTk_Dig = 0x8092703C; // type:func
+EnTk_Update = 0x809272A0; // type:func
+func_80B1D200 = 0x8092734C; // type:func
+EnTk_OverrideLimbDraw = 0x80927378; // type:func
+EnTk_PostLimbDraw = 0x809273E4; // type:func
+EnTk_Draw = 0x80927498; // type:func
+BgMoriBigst_SetupAction = 0x809278A0; // type:func
+BgMoriBigst_InitDynapoly = 0x809278AC; // type:func
+BgMoriBigst_Init = 0x80927904; // type:func
+BgMoriBigst_Destroy = 0x809279DC; // type:func
+BgMoriBigst_SetupWaitForMoriTex = 0x80927A10; // type:func
+BgMoriBigst_WaitForMoriTex = 0x80927A38; // type:func
+BgMoriBigst_SetupNoop = 0x80927B04; // type:func
+BgMoriBigst_SetupStalfosFight = 0x80927B28; // type:func
+BgMoriBigst_StalfosFight = 0x80927BDC; // type:func
+BgMoriBigst_SetupFall = 0x80927C54; // type:func
+BgMoriBigst_Fall = 0x80927C7C; // type:func
+BgMoriBigst_SetupLanding = 0x80927D08; // type:func
+BgMoriBigst_Landing = 0x80927D9C; // type:func
+BgMoriBigst_SetupStalfosPairFight = 0x80927DC8; // type:func
+BgMoriBigst_StalfosPairFight = 0x80927EE0; // type:func
+BgMoriBigst_SetupDone = 0x80927F40; // type:func
+BgMoriBigst_Update = 0x80927F64; // type:func
+BgMoriBigst_Draw = 0x80927FD8; // type:func
+func_808A1800 = 0x809281D0; // type:func
+func_808A18FC = 0x809282C8; // type:func
+BgMoriElevator_Init = 0x80928350; // type:func
+BgMoriElevator_Destroy = 0x80928434; // type:func
+BgMoriElevator_IsPlayerRiding = 0x80928474; // type:func
+BgMoriElevator_SetupWaitAfterInit = 0x809284D4; // type:func
+BgMoriElevator_WaitAfterInit = 0x809284E8; // type:func
+func_808A1C30 = 0x8092858C; // type:func
+BgMoriElevator_MoveIntoGround = 0x809285A0; // type:func
+func_808A1CF4 = 0x80928654; // type:func
+BgMoriElevator_MoveAboveGround = 0x809286B0; // type:func
+BgMoriElevator_SetupSetPosition = 0x80928764; // type:func
+BgMoriElevator_SetPosition = 0x80928778; // type:func
+BgMoriElevator_StopMovement = 0x80928940; // type:func
+func_808A2008 = 0x8092895C; // type:func
+BgMoriElevator_Update = 0x80928A10; // type:func
+BgMoriElevator_Draw = 0x80928A68; // type:func
+BgMoriKaitenkabe_CrossProduct = 0x80928CC0; // type:func
+BgMoriKaitenkabe_Init = 0x80928D34; // type:func
+BgMoriKaitenkabe_Destroy = 0x80928DE8; // type:func
+BgMoriKaitenkabe_WaitForMoriTex = 0x80928E1C; // type:func
+BgMoriKaitenkabe_SetupWait = 0x80928E74; // type:func
+BgMoriKaitenkabe_Wait = 0x80928E8C; // type:func
+BgMoriKaitenkabe_SetupRotate = 0x80928FEC; // type:func
+BgMoriKaitenkabe_Rotate = 0x8092900C; // type:func
+BgMoriKaitenkabe_Update = 0x80929178; // type:func
+BgMoriKaitenkabe_Draw = 0x8092919C; // type:func
+BgMoriRakkatenjo_Init = 0x80929330; // type:func
+BgMoriRakkatenjo_Destroy = 0x809293E8; // type:func
+BgMoriRakkatenjo_IsLinkUnder = 0x8092941C; // type:func
+BgMoriRakkatenjo_IsLinkClose = 0x809294CC; // type:func
+BgMoriRakkatenjo_SetupWaitForMoriTex = 0x8092957C; // type:func
+BgMoriRakkatenjo_WaitForMoriTex = 0x80929590; // type:func
+BgMoriRakkatenjo_SetupWait = 0x809295E8; // type:func
+BgMoriRakkatenjo_Wait = 0x80929624; // type:func
+BgMoriRakkatenjo_SetupFall = 0x809296F4; // type:func
+BgMoriRakkatenjo_Fall = 0x80929714; // type:func
+BgMoriRakkatenjo_SetupRest = 0x8092988C; // type:func
+BgMoriRakkatenjo_Rest = 0x809298B4; // type:func
+BgMoriRakkatenjo_SetupRise = 0x809298E4; // type:func
+BgMoriRakkatenjo_Rise = 0x80929904; // type:func
+BgMoriRakkatenjo_Update = 0x80929984; // type:func
+BgMoriRakkatenjo_Draw = 0x80929A5C; // type:func
+EnVm_SetupAction = 0x80929CB0; // type:func
+EnVm_Init = 0x80929CBC; // type:func
+EnVm_Destroy = 0x80929E2C; // type:func
+EnVm_SetupWait = 0x80929E58; // type:func
+EnVm_Wait = 0x80929EE4; // type:func
+EnVm_SetupAttack = 0x8092A238; // type:func
+EnVm_Attack = 0x8092A2DC; // type:func
+EnVm_SetupStun = 0x8092A52C; // type:func
+EnVm_Stun = 0x8092A5D4; // type:func
+EnVm_SetupDie = 0x8092A6E0; // type:func
+EnVm_Die = 0x8092A7E8; // type:func
+EnVm_CheckHealth = 0x8092A89C; // type:func
+EnVm_Update = 0x8092A998; // type:func
+EnVm_OverrideLimbDraw = 0x8092AB2C; // type:func
+EnVm_PostLimbDraw = 0x8092AB94; // type:func
+EnVm_Draw = 0x8092AE6C; // type:func
+DemoEffect_SetupUpdate = 0x8092B570; // type:func
+DemoEffect_InterpolateCsFrames = 0x8092B57C; // type:func
+DemoEffect_InitJewel = 0x8092B5DC; // type:func
+DemoEffect_InitGetItem = 0x8092B69C; // type:func
+DemoEffect_Init = 0x8092B6E8; // type:func
+DemoEffect_Destroy = 0x8092BEE8; // type:func
+DemoEffect_WaitForObject = 0x8092BF38; // type:func
+DemoEffect_UpdatePositionToParent = 0x8092BF90; // type:func
+DemoEffect_UpdateCrystalLight = 0x8092BFC0; // type:func
+DemoEffect_MedalSparkle = 0x8092BFF4; // type:func
+DemoEffect_UpdateGetItem = 0x8092C18C; // type:func
+DemoEffect_InitTimeWarp = 0x8092C3CC; // type:func
+DemoEffect_UpdateTimeWarpPullMasterSword = 0x8092C588; // type:func
+DemoEffect_TimewarpShrink = 0x8092C62C; // type:func
+DemoEffect_UpdateTimeWarpReturnFromChamberOfSages = 0x8092C750; // type:func
+DemoEffect_UpdateTimeWarpTimeblock = 0x8092C808; // type:func
+DemoEffect_InitTimeWarpTimeblock = 0x8092C8C4; // type:func
+DemoEffect_UpdateTriforceSpot = 0x8092C948; // type:func
+DemoEffect_UpdateLightRingShrinking = 0x8092CC30; // type:func
+DemoEffect_UpdateLightRingExpanding = 0x8092CCC0; // type:func
+DemoEffect_UpdateLightRingTriforce = 0x8092CD34; // type:func
+DemoEffect_UpdateCreationFireball = 0x8092CDF0; // type:func
+DemoEffect_InitCreationFireball = 0x8092CF44; // type:func
+DemoEffect_UpdateBlueOrbShrink = 0x8092CF94; // type:func
+DemoEffect_UpdateBlueOrbGrow = 0x8092CFFC; // type:func
+DemoEffect_UpdateLightEffect = 0x8092D0DC; // type:func
+DemoEffect_UpdateLgtShower = 0x8092D3D4; // type:func
+DemoEffect_UpdateGodLgtDin = 0x8092D440; // type:func
+DemoEffect_UpdateGodLgtNayru = 0x8092D5DC; // type:func
+DemoEffect_UpdateGodLgtFarore = 0x8092D7D4; // type:func
+DemoEffect_MoveTowardTarget = 0x8092D978; // type:func
+DemoEffect_InitJewelColor = 0x8092D9D8; // type:func
+DemoEffect_SetJewelColor = 0x8092DAD8; // type:func
+DemoEffect_MoveJewelSplit = 0x8092E24C; // type:func
+DemoEffect_MoveJewelSpherical = 0x8092E2A8; // type:func
+DemoEffect_MoveJewelActivateDoorOfTime = 0x8092E48C; // type:func
+DemoEffect_JewelSparkle = 0x8092E6F8; // type:func
+DemoEffect_PlayJewelSfx = 0x8092E85C; // type:func
+DemoEffect_UpdateJewelAdult = 0x8092E8C0; // type:func
+DemoEffect_UpdateJewelChild = 0x8092E904; // type:func
+DemoEffect_UpdateDust = 0x8092EB18; // type:func
+DemoEffect_Update = 0x8092EC3C; // type:func
+DemoEffect_CheckForCue = 0x8092EC60; // type:func
+DemoEffect_DrawJewel = 0x8092ECA4; // type:func
+DemoEffect_DrawCrystalLight = 0x8092F0E4; // type:func
+DemoEffect_DrawFireBall = 0x8092F3BC; // type:func
+DemoEffect_DrawGodLgt = 0x8092F548; // type:func
+DemoEffect_DrawLightEffect = 0x8092F918; // type:func
+DemoEffect_DrawBlueOrb = 0x8092FB50; // type:func
+DemoEffect_DrawLgtShower = 0x8092FC78; // type:func
+DemoEffect_DrawLightRing = 0x8092FDFC; // type:func
+DemoEffect_DrawTriforceSpot = 0x8092FF64; // type:func
+DemoEffect_DrawGetItem = 0x809304E8; // type:func
+DemoEffect_OverrideLimbDrawTimeWarp = 0x80930580; // type:func
+DemoEffect_DrawTimeWarp = 0x80930700; // type:func
+DemoEffect_FaceTowardPoint = 0x809307D8; // type:func
+DemoEffect_SetPosRotFromCue = 0x80930888; // type:func
+DemoEffect_MoveTowardCuePos = 0x809309E8; // type:func
+DemoEffect_SetStartPosFromCue = 0x80930A94; // type:func
+DemoKankyo_SetupAction = 0x80931110; // type:func
+DemoKankyo_Init = 0x8093111C; // type:func
+DemoKankyo_Destroy = 0x80931500; // type:func
+DemoKankyo_SetupType = 0x8093150C; // type:func
+DemoKankyo_DoNothing = 0x80931944; // type:func
+DemoKankyo_UpdateWarpIn = 0x80931954; // type:func
+DemoKankyo_SetPosFromCue = 0x8093197C; // type:func
+DemoKankyo_UpdateRock = 0x80931A6C; // type:func
+DemoKankyo_UpdateClouds = 0x80931AE4; // type:func
+DemoKankyo_UpdateDoorOfTime = 0x80931B30; // type:func
+DemoKankyo_KillDoorOfTimeCollision = 0x80931BCC; // type:func
+DemoKankyo_Update = 0x80931BF8; // type:func
+DemoKankyo_Draw = 0x80931C1C; // type:func
+func_80989B54 = 0x80931DC4; // type:func
+DemoKankyo_DrawRain = 0x80931F94; // type:func
+DemoKankyo_DrawRock = 0x809325A0; // type:func
+DemoKankyo_DrawClouds = 0x809326E4; // type:func
+DemoKankyo_DrawDoorOfTime = 0x80932A10; // type:func
+DemoKankyo_DrawLightPlane = 0x80932B20; // type:func
+DemoKankyo_Vec3fCopy = 0x80932C08; // type:func
+DemoKankyo_AddVecGeoToVec3f = 0x80932C28; // type:func
+DemoKankyo_Vec3fAddPosRot = 0x80932CA8; // type:func
+DemoKankyo_DrawWarpSparkles = 0x80932D04; // type:func
+DemoKankyo_DrawSparkles = 0x80933460; // type:func
+BgHidanFwbig_Init = 0x80934E00; // type:func
+BgHidanFwbig_Destroy = 0x80934FA0; // type:func
+BgHidanFwbig_UpdatePosition = 0x80934FCC; // type:func
+BgHidanFwbig_WaitForSwitch = 0x8093504C; // type:func
+BgHidanFwbig_WaitForCs = 0x809350B0; // type:func
+BgHidanFwbig_Rise = 0x809350DC; // type:func
+BgHidanFwbig_Lower = 0x80935150; // type:func
+BgHidanFwbig_WaitForTimer = 0x80935230; // type:func
+BgHidanFwbig_WaitForPlayer = 0x80935280; // type:func
+BgHidanFwbig_Move = 0x809352E4; // type:func
+BgHidanFwbig_MoveCollider = 0x80935384; // type:func
+BgHidanFwbig_Update = 0x80935584; // type:func
+BgHidanFwbig_Draw = 0x809356FC; // type:func
+EnFloormas_Init = 0x80935AE0; // type:func
+EnFloormas_Destroy = 0x80935CF4; // type:func
+EnFloormas_MakeInvulnerable = 0x80935D20; // type:func
+EnFloormas_MakeVulnerable = 0x80935D44; // type:func
+EnFloormas_SetupBigDecideAction = 0x80935D60; // type:func
+EnFloormas_SetupStand = 0x80935DA8; // type:func
+EnFloormas_SetupBigWalk = 0x80935DEC; // type:func
+EnFloormas_SetupBigStopWalk = 0x80935E78; // type:func
+EnFloormas_SetupRun = 0x80935EC0; // type:func
+EnFloormas_SetupTurn = 0x80935EF0; // type:func
+EnFloormas_SetupHover = 0x80936020; // type:func
+EnFloormas_SetupCharge = 0x809360F8; // type:func
+EnFloormas_SetupLand = 0x8093612C; // type:func
+EnFloormas_SetupSplit = 0x809361D8; // type:func
+EnFloormas_SetupSmallWalk = 0x80936338; // type:func
+EnFloormas_SetupSmallDecideAction = 0x80936388; // type:func
+EnFloormas_SetupSmallShrink = 0x809363E8; // type:func
+EnFloormas_SetupSmallFollowerJumpAtLeader = 0x809364C0; // type:func
+EnFloormas_SetupJumpAtLink = 0x8093652C; // type:func
+EnFloormas_SetupGrabLink = 0x80936598; // type:func
+EnFloormas_SetupMerge = 0x8093676C; // type:func
+EnFloormas_SetupSmallWait = 0x809367C4; // type:func
+EnFloormas_SetupTakeDamage = 0x80936848; // type:func
+EnFloormas_SetupRecover = 0x80936904; // type:func
+EnFloormas_SetupFreeze = 0x80936958; // type:func
+EnFloormas_Die = 0x80936A58; // type:func
+EnFloormas_BigDecideAction = 0x80936AF4; // type:func
+EnFloormas_Stand = 0x80936BB8; // type:func
+EnFloormas_BigWalk = 0x80936C44; // type:func
+EnFloormas_BigStopWalk = 0x80936DA0; // type:func
+EnFloormas_Run = 0x80936DDC; // type:func
+EnFloormas_Turn = 0x80936EE8; // type:func
+EnFloormas_Hover = 0x809370AC; // type:func
+EnFloormas_Slide = 0x80937130; // type:func
+EnFloormas_Charge = 0x80937270; // type:func
+EnFloormas_Land = 0x80937360; // type:func
+EnFloormas_Split = 0x80937548; // type:func
+EnFloormas_SmallWalk = 0x809375D0; // type:func
+EnFloormas_SmallDecideAction = 0x809376C0; // type:func
+EnFloormas_SmallShrink = 0x80937828; // type:func
+EnFloormas_JumpAtLink = 0x80937880; // type:func
+EnFloormas_GrabLink = 0x809379BC; // type:func
+EnFloormas_SmallFollowerJumpAtLeader = 0x80937CD8; // type:func
+EnFloormas_Merge = 0x80937EE8; // type:func
+EnFloormas_SmallWait = 0x80938198; // type:func
+EnFloormas_TakeDamage = 0x809381A8; // type:func
+EnFloormas_Recover = 0x8093826C; // type:func
+EnFloormas_Freeze = 0x809382A8; // type:func
+EnFloormas_ColliderCheck = 0x8093831C; // type:func
+EnFloormas_Update = 0x809384CC; // type:func
+EnFloormas_OverrideLimbDraw = 0x80938734; // type:func
+EnFloormas_PostLimbDraw = 0x80938770; // type:func
+EnFloormas_Draw = 0x80938860; // type:func
+EnFloormas_DrawHighlighted = 0x8093892C; // type:func
+EnHeishi1_Init = 0x80938EC0; // type:func
+EnHeishi1_Destroy = 0x809390D8; // type:func
+EnHeishi1_SetupWalk = 0x809390E8; // type:func
+EnHeishi1_Walk = 0x8093919C; // type:func
+EnHeishi1_SetupMoveToLink = 0x809394BC; // type:func
+EnHeishi1_MoveToLink = 0x80939578; // type:func
+EnHeishi1_SetupWait = 0x80939670; // type:func
+EnHeishi1_Wait = 0x80939738; // type:func
+EnHeishi1_SetupTurnTowardLink = 0x809398F4; // type:func
+EnHeishi1_TurnTowardLink = 0x80939990; // type:func
+EnHeishi1_SetupKick = 0x80939A3C; // type:func
+EnHeishi1_Kick = 0x80939AD0; // type:func
+EnHeishi1_SetupWaitNight = 0x80939BA4; // type:func
+EnHeishi1_WaitNight = 0x80939C38; // type:func
+EnHeishi1_Update = 0x80939CB8; // type:func
+EnHeishi1_OverrideLimbDraw = 0x80939FCC; // type:func
+EnHeishi1_Draw = 0x8093A010; // type:func
+EnRd_SetupAction = 0x8093A3D0; // type:func
+EnRd_Init = 0x8093A3DC; // type:func
+EnRd_Destroy = 0x8093A5C8; // type:func
+EnRd_UpdateMourningTarget = 0x8093A60C; // type:func
+EnRd_SetupIdle = 0x8093A678; // type:func
+EnRd_Idle = 0x8093A720; // type:func
+EnRd_SetupRiseFromCoffin = 0x8093A94C; // type:func
+EnRd_RiseFromCoffin = 0x8093A9EC; // type:func
+EnRd_SetupWalkToPlayer = 0x8093AB6C; // type:func
+EnRd_WalkToPlayer = 0x8093ABF8; // type:func
+EnRd_SetupWalkToHome = 0x8093AF2C; // type:func
+EnRd_WalkToHome = 0x8093AFAC; // type:func
+EnRd_SetupWalkToParent = 0x8093B1C0; // type:func
+EnRd_WalkToParent = 0x8093B244; // type:func
+EnRd_SetupGrab = 0x8093B3D8; // type:func
+EnRd_Grab = 0x8093B43C; // type:func
+EnRd_SetupAttemptPlayerFreeze = 0x8093B7A8; // type:func
+EnRd_AttemptPlayerFreeze = 0x8093B820; // type:func
+EnRd_SetupStandUp = 0x8093B918; // type:func
+EnRd_StandUp = 0x8093B964; // type:func
+EnRd_SetupCrouch = 0x8093B9C0; // type:func
+EnRd_Crouch = 0x8093BA40; // type:func
+EnRd_SetupDamaged = 0x8093BA7C; // type:func
+EnRd_Damaged = 0x8093BB08; // type:func
+EnRd_SetupDead = 0x8093BC18; // type:func
+EnRd_Dead = 0x8093BC90; // type:func
+EnRd_SetupStunned = 0x8093BDDC; // type:func
+EnRd_Stunned = 0x8093BEC8; // type:func
+EnRd_TurnTowardsPlayer = 0x8093BF9C; // type:func
+EnRd_UpdateDamage = 0x8093C114; // type:func
+EnRd_Update = 0x8093C2E0; // type:func
+EnRd_OverrideLimbDraw = 0x8093C4CC; // type:func
+EnRd_PostLimbDraw = 0x8093C528; // type:func
+EnRd_Draw = 0x8093C670; // type:func
+EnPoSisters_Init = 0x8093CC90; // type:func
+EnPoSisters_Destroy = 0x8093CEDC; // type:func
+func_80AD9240 = 0x8093CF44; // type:func
+func_80AD9368 = 0x8093D070; // type:func
+func_80AD93C4 = 0x8093D0CC; // type:func
+func_80AD943C = 0x8093D144; // type:func
+func_80AD944C = 0x8093D158; // type:func
+func_80AD94E0 = 0x8093D1EC; // type:func
+func_80AD9568 = 0x8093D274; // type:func
+func_80AD95D8 = 0x8093D2E4; // type:func
+func_80AD96A4 = 0x8093D3B0; // type:func
+func_80AD9718 = 0x8093D424; // type:func
+func_80AD97C8 = 0x8093D4D4; // type:func
+func_80AD98F4 = 0x8093D600; // type:func
+func_80AD99D4 = 0x8093D6E0; // type:func
+func_80AD9A54 = 0x8093D760; // type:func
+func_80AD9AA8 = 0x8093D7B4; // type:func
+func_80AD9C24 = 0x8093D930; // type:func
+func_80AD9D44 = 0x8093DA50; // type:func
+func_80AD9DF0 = 0x8093DAFC; // type:func
+func_80AD9E60 = 0x8093DB6C; // type:func
+func_80AD9F1C = 0x8093DC28; // type:func
+func_80AD9F90 = 0x8093DC9C; // type:func
+func_80ADA028 = 0x8093DD34; // type:func
+func_80ADA094 = 0x8093DDA0; // type:func
+func_80ADA10C = 0x8093DE18; // type:func
+func_80ADA1B8 = 0x8093DEC8; // type:func
+func_80ADA25C = 0x8093DF6C; // type:func
+func_80ADA2BC = 0x8093DFCC; // type:func
+func_80ADA35C = 0x8093E06C; // type:func
+func_80ADA4A8 = 0x8093E1B8; // type:func
+func_80ADA530 = 0x8093E240; // type:func
+func_80ADA6A0 = 0x8093E3B0; // type:func
+func_80ADA7F0 = 0x8093E500; // type:func
+func_80ADA8C0 = 0x8093E5D0; // type:func
+func_80ADA9E8 = 0x8093E6F8; // type:func
+func_80ADAAA4 = 0x8093E7B4; // type:func
+func_80ADAC70 = 0x8093E980; // type:func
+func_80ADAD54 = 0x8093EA64; // type:func
+func_80ADAE6C = 0x8093EB7C; // type:func
+func_80ADAFC0 = 0x8093ECD0; // type:func
+func_80ADB17C = 0x8093EE8C; // type:func
+func_80ADB2B8 = 0x8093EFC8; // type:func
+func_80ADB338 = 0x8093F044; // type:func
+func_80ADB4B0 = 0x8093F1C0; // type:func
+func_80ADB51C = 0x8093F22C; // type:func
+func_80ADB770 = 0x8093F480; // type:func
+func_80ADB9F0 = 0x8093F700; // type:func
+func_80ADBB6C = 0x8093F87C; // type:func
+func_80ADBBF4 = 0x8093F904; // type:func
+func_80ADBC88 = 0x8093F998; // type:func
+func_80ADBD38 = 0x8093FA4C; // type:func
+func_80ADBD8C = 0x8093FAA0; // type:func
+func_80ADBEE8 = 0x8093FC00; // type:func
+func_80ADBF58 = 0x8093FC70; // type:func
+func_80ADC034 = 0x8093FD4C; // type:func
+func_80ADC10C = 0x8093FE24; // type:func
+EnPoSisters_Update = 0x8093FFE8; // type:func
+func_80ADC55C = 0x8094027C; // type:func
+EnPoSisters_OverrideLimbDraw = 0x8094049C; // type:func
+EnPoSisters_PostLimbDraw = 0x8094068C; // type:func
+EnPoSisters_Draw = 0x80940D5C; // type:func
+BgHeavyBlock_SetPieceRandRot = 0x80941980; // type:func
+BgHeavyBlock_InitPiece = 0x80941A10; // type:func
+BgHeavyBlock_SetupDynapoly = 0x80941B8C; // type:func
+BgHeavyBlock_Init = 0x80941C00; // type:func
+BgHeavyBlock_Destroy = 0x80941E44; // type:func
+BgHeavyBlock_MovePiece = 0x80941E8C; // type:func
+BgHeavyBlock_SpawnDust = 0x80942050; // type:func
+BgHeavyBlock_SpawnPieces = 0x809423B4; // type:func
+BgHeavyBlock_Wait = 0x809425AC; // type:func
+BgHeavyBlock_LiftedUp = 0x809426D4; // type:func
+BgHeavyBlock_Fly = 0x8094283C; // type:func
+BgHeavyBlock_DoNothing = 0x80942B54; // type:func
+BgHeavyBlock_Land = 0x80942B64; // type:func
+BgHeavyBlock_Update = 0x80942DD4; // type:func
+BgHeavyBlock_Draw = 0x80942DF8; // type:func
+BgHeavyBlock_DrawPiece = 0x80942F60; // type:func
+BgPoEvent_InitPaintings = 0x80943270; // type:func
+BgPoEvent_InitBlocks = 0x809435EC; // type:func
+BgPoEvent_Init = 0x8094379C; // type:func
+BgPoEvent_Destroy = 0x809438AC; // type:func
+BgPoEvent_BlockWait = 0x80943930; // type:func
+BgPoEvent_BlockShake = 0x80943A3C; // type:func
+BgPoEvent_CheckBlock = 0x80943AF4; // type:func
+BgPoEvent_BlockFall = 0x80943C2C; // type:func
+BgPoEvent_BlockIdle = 0x80943D30; // type:func
+BgPoEvent_BlockPush = 0x80943FE4; // type:func
+BgPoEvent_BlockReset = 0x809441A4; // type:func
+BgPoEvent_BlockSolved = 0x809442A4; // type:func
+BgPoEvent_AmyWait = 0x8094431C; // type:func
+BgPoEvent_AmyPuzzle = 0x80944398; // type:func
+BgPoEvent_NextPainting = 0x809444B4; // type:func
+BgPoEvent_PaintingEmpty = 0x80944570; // type:func
+BgPoEvent_PaintingAppear = 0x809445A0; // type:func
+BgPoEvent_PaintingVanish = 0x809445D8; // type:func
+BgPoEvent_PaintingPresent = 0x80944628; // type:func
+BgPoEvent_PaintingBurn = 0x80944884; // type:func
+BgPoEvent_Update = 0x80944A30; // type:func
+BgPoEvent_Draw = 0x80944AA0; // type:func
+ObjMure_SetCullingImpl = 0x809450B0; // type:func
+ObjMure_SetCulling = 0x80945108; // type:func
+ObjMure_Init = 0x80945134; // type:func
+ObjMure_Destroy = 0x809451E4; // type:func
+ObjMure_GetMaxChildSpawns = 0x809451F4; // type:func
+ObjMure_GetSpawnPos = 0x80945220; // type:func
+ObjMure_SpawnActors0 = 0x80945248; // type:func
+ObjMure_SpawnActors1 = 0x80945410; // type:func
+ObjMure_SpawnActors = 0x8094555C; // type:func
+ObjMure_KillActorsImpl = 0x809455AC; // type:func
+ObjMure_KillActors = 0x809456A4; // type:func
+ObjMure_CheckChildren = 0x809456C4; // type:func
+ObjMure_InitialAction = 0x80945788; // type:func
+ObjMure_CulledState = 0x809457A0; // type:func
+ObjMure_SetFollowTargets = 0x80945800; // type:func
+ObjMure_SetChildToFollowPlayer = 0x809458D8; // type:func
+ObjMure_GroupBehavior0 = 0x80945A58; // type:func
+ObjMure_GroupBehavior1 = 0x80945C80; // type:func
+ObjMure_ActiveState = 0x80945E04; // type:func
+ObjMure_Update = 0x80945EAC; // type:func
+EnSw_CrossProduct = 0x809460C0; // type:func
+func_80B0BE20 = 0x80946134; // type:func
+func_80B0C020 = 0x80946334; // type:func
+func_80B0C0CC = 0x809463E4; // type:func
+EnSw_Init = 0x80946818; // type:func
+EnSw_Destroy = 0x80946CE0; // type:func
+func_80B0C9F0 = 0x80946D0C; // type:func
+func_80B0CBE8 = 0x80946F08; // type:func
+func_80B0CCF4 = 0x80947014; // type:func
+func_80B0CEA8 = 0x809471C8; // type:func
+func_80B0CF44 = 0x80947268; // type:func
+func_80B0D14C = 0x80947470; // type:func
+func_80B0D364 = 0x80947688; // type:func
+func_80B0D3AC = 0x809476D0; // type:func
+func_80B0D590 = 0x809478B8; // type:func
+func_80B0D878 = 0x80947BA0; // type:func
+func_80B0DB00 = 0x80947E28; // type:func
+func_80B0DC7C = 0x80947FA8; // type:func
+func_80B0DE34 = 0x80948164; // type:func
+func_80B0DEA8 = 0x809481E0; // type:func
+func_80B0DFFC = 0x80948334; // type:func
+func_80B0E314 = 0x8094864C; // type:func
+func_80B0E430 = 0x80948764; // type:func
+func_80B0E5E0 = 0x80948914; // type:func
+func_80B0E728 = 0x80948A60; // type:func
+func_80B0E90C = 0x80948C44; // type:func
+func_80B0E9BC = 0x80948CF4; // type:func
+EnSw_Update = 0x80948DA4; // type:func
+EnSw_OverrideLimbDraw = 0x80948E00; // type:func
+EnSw_PostLimbDraw = 0x809490A4; // type:func
+func_80B0EDB8 = 0x809490BC; // type:func
+func_80B0EEA4 = 0x80949174; // type:func
+EnSw_Draw = 0x809491A0; // type:func
+BossFd_SpawnEmber = 0x809498B0; // type:func
+BossFd_SpawnDebris = 0x8094997C; // type:func
+BossFd_SpawnDust = 0x80949A4C; // type:func
+BossFd_SpawnFireBreath = 0x80949AE4; // type:func
+BossFd_SetCameraSpeed = 0x80949BF0; // type:func
+BossFd_UpdateCamera = 0x80949C90; // type:func
+BossFd_Init = 0x80949DFC; // type:func
+BossFd_Destroy = 0x8094A11C; // type:func
+BossFd_IsFacingLink = 0x8094A17C; // type:func
+BossFd_SetupFly = 0x8094A1AC; // type:func
+BossFd_Fly = 0x8094A21C; // type:func
+BossFd_Wait = 0x8094C8A4; // type:func
+BossFd_Effects = 0x8094CA94; // type:func
+BossFd_CollisionCheck = 0x8094D6B4; // type:func
+BossFd_Update = 0x8094D768; // type:func
+BossFd_UpdateEffects = 0x8094DEA8; // type:func
+BossFd_DrawEffects = 0x8094E300; // type:func
+BossFd_Draw = 0x8094E9A0; // type:func
+BossFd_OverrideRightArmDraw = 0x8094EA58; // type:func
+BossFd_OverrideLeftArmDraw = 0x8094EB78; // type:func
+BossFd_DrawMane = 0x8094EC98; // type:func
+BossFd_OverrideHeadDraw = 0x8094F11C; // type:func
+BossFd_PostHeadDraw = 0x8094F214; // type:func
+BossFd_DrawBody = 0x8094F268; // type:func
+ObjectKankyo_SetupAction = 0x80950C10; // type:func
+ObjectKankyo_Init = 0x80950C1C; // type:func
+ObjectKankyo_Destroy = 0x80950F1C; // type:func
+ObjectKankyo_Snow = 0x80950F40; // type:func
+ObjectKankyo_Fairies = 0x80950F50; // type:func
+ObjectKankyo_Update = 0x80951D68; // type:func
+ObjectKankyo_Draw = 0x80951D8C; // type:func
+ObjectKankyo_DrawFairies = 0x80951E10; // type:func
+ObjectKankyo_DrawSnow = 0x80952298; // type:func
+ObjectKankyo_Lightning = 0x80952A60; // type:func
+ObjectKankyo_DrawLightning = 0x80952B08; // type:func
+ObjectKankyo_SunGraveSparkInit = 0x80952D04; // type:func
+ObjectKankyo_WaitForSunGraveSparkObject = 0x80952D50; // type:func
+ObjectKankyo_SunGraveSpark = 0x80952DC0; // type:func
+ObjectKankyo_DrawSunGraveSpark = 0x80952E6C; // type:func
+ObjectKankyo_InitBeams = 0x809533B4; // type:func
+ObjectKankyo_WaitForBeamObject = 0x80953400; // type:func
+ObjectKankyo_Beams = 0x80953460; // type:func
+ObjectKankyo_DrawBeams = 0x80953540; // type:func
+EnDu_SetupAction = 0x80953E90; // type:func
+EnDu_GetTextId = 0x80953E9C; // type:func
+EnDu_UpdateTalkState = 0x80953F40; // type:func
+func_809FDDB4 = 0x8095401C; // type:func
+func_809FDE24 = 0x8095408C; // type:func
+func_809FDE9C = 0x80954104; // type:func
+func_809FDFC0 = 0x80954228; // type:func
+func_809FE000 = 0x8095426C; // type:func
+func_809FE040 = 0x809542B0; // type:func
+func_809FE104 = 0x80954374; // type:func
+EnDu_Init = 0x8095441C; // type:func
+EnDu_Destroy = 0x809545EC; // type:func
+func_809FE3B4 = 0x8095462C; // type:func
+func_809FE3C0 = 0x8095463C; // type:func
+func_809FE4A4 = 0x80954724; // type:func
+func_809FE638 = 0x809548BC; // type:func
+func_809FE6CC = 0x80954954; // type:func
+func_809FE740 = 0x809549C8; // type:func
+func_809FE798 = 0x80954A20; // type:func
+func_809FE890 = 0x80954B18; // type:func
+func_809FEB08 = 0x80954D94; // type:func
+func_809FEC14 = 0x80954EA0; // type:func
+func_809FEC70 = 0x80954EFC; // type:func
+func_809FECE4 = 0x80954F74; // type:func
+EnDu_Update = 0x80954FAC; // type:func
+EnDu_OverrideLimbDraw = 0x80955138; // type:func
+EnDu_PostLimbDraw = 0x809552B4; // type:func
+EnDu_Draw = 0x80955310; // type:func
+EnFd_SpawnCore = 0x80955920; // type:func
+EnFd_SpawnChildFire = 0x80955A18; // type:func
+EnFd_SpawnDot = 0x80955B38; // type:func
+EnFd_CheckHammer = 0x80955CA4; // type:func
+EnFd_ColliderCheck = 0x80955D40; // type:func
+EnFd_CanSeeActor = 0x80955ED8; // type:func
+EnFd_FindBomb = 0x80955FE8; // type:func
+EnFd_FindPotentialTheat = 0x809560A8; // type:func
+EnFd_GetPosAdjAroundCircle = 0x8095611C; // type:func
+EnFd_ShouldStopRunning = 0x809561E4; // type:func
+EnFd_Fade = 0x80956318; // type:func
+EnFd_Init = 0x80956428; // type:func
+EnFd_Destroy = 0x80956564; // type:func
+EnFd_Reappear = 0x80956590; // type:func
+EnFd_SpinAndGrow = 0x80956620; // type:func
+EnFd_JumpToGround = 0x809566F4; // type:func
+EnFd_Land = 0x80956770; // type:func
+EnFd_SpinAndSpawnFire = 0x80956850; // type:func
+EnFd_Run = 0x80956A70; // type:func
+EnFd_WaitForCore = 0x80956CD0; // type:func
+EnFd_Update = 0x80956D48; // type:func
+EnFd_OverrideLimbDraw = 0x80956F44; // type:func
+EnFd_PostLimbDraw = 0x80956F80; // type:func
+EnFd_Draw = 0x809572AC; // type:func
+EnFd_SpawnEffect = 0x80957658; // type:func
+EnFd_UpdateEffectsFlames = 0x80957748; // type:func
+EnFd_UpdateEffectsDots = 0x80957860; // type:func
+EnFd_DrawEffectsFlames = 0x8095797C; // type:func
+EnFd_DrawEffectsDots = 0x80957D50; // type:func
+func_80A693D0 = 0x809585C0; // type:func
+func_80A6948C = 0x8095867C; // type:func
+func_80A695A4 = 0x80958794; // type:func
+EnHorseLinkChild_Init = 0x8095885C; // type:func
+EnHorseLinkChild_Destroy = 0x80958A34; // type:func
+func_80A6988C = 0x80958A84; // type:func
+func_80A698F4 = 0x80958AE8; // type:func
+func_80A6993C = 0x80958B30; // type:func
+func_80A699FC = 0x80958BF0; // type:func
+func_80A69B7C = 0x80958D78; // type:func
+func_80A69C18 = 0x80958E18; // type:func
+func_80A69EC0 = 0x809590C0; // type:func
+func_80A69F5C = 0x80959160; // type:func
+func_80A6A068 = 0x8095926C; // type:func
+func_80A6A4DC = 0x809596E8; // type:func
+func_80A6A5A4 = 0x809597B0; // type:func
+func_80A6A724 = 0x80959930; // type:func
+func_80A6A7D0 = 0x809599E0; // type:func
+EnHorseLinkChild_Update = 0x80959CBC; // type:func
+EnHorseLinkChild_PostDraw = 0x80959E14; // type:func
+EnHorseLinkChild_OverrideLimbDraw = 0x80959FA0; // type:func
+EnHorseLinkChild_Draw = 0x8095A028; // type:func
+DoorAna_SetupAction = 0x8095A3C0; // type:func
+DoorAna_Init = 0x8095A3CC; // type:func
+DoorAna_Destroy = 0x8095A488; // type:func
+DoorAna_WaitClosed = 0x8095A4C4; // type:func
+DoorAna_WaitOpen = 0x8095A5FC; // type:func
+DoorAna_GrabPlayer = 0x8095A7B0; // type:func
+DoorAna_Update = 0x8095A85C; // type:func
+DoorAna_Draw = 0x8095A8B0; // type:func
+BgSpot02Objects_Init = 0x8095AA30; // type:func
+BgSpot02Objects_Destroy = 0x8095ACA0; // type:func
+func_808AC8FC = 0x8095ACD4; // type:func
+func_808AC908 = 0x8095ACE4; // type:func
+func_808ACA08 = 0x8095ADE4; // type:func
+func_808ACAFC = 0x8095AEDC; // type:func
+func_808ACB58 = 0x8095AF38; // type:func
+BgSpot02Objects_Update = 0x8095AFB8; // type:func
+BgSpot02Objects_Draw = 0x8095AFDC; // type:func
+func_808ACC34 = 0x8095B018; // type:func
+func_808ACCB8 = 0x8095B09C; // type:func
+func_808AD3D4 = 0x8095B788; // type:func
+func_808AD450 = 0x8095B804; // type:func
+BgHaka_Init = 0x8095BD90; // type:func
+BgHaka_Destroy = 0x8095BE0C; // type:func
+BgHaka_CheckPlayerOnDirtPatch = 0x8095BE40; // type:func
+BgHaka_IdleClosed = 0x8095BED0; // type:func
+BgHaka_Pull = 0x8095C024; // type:func
+BgHaka_IdleOpened = 0x8095C19C; // type:func
+BgHaka_IdleLockedClosed = 0x8095C1D8; // type:func
+BgHaka_Update = 0x8095C250; // type:func
+BgHaka_Draw = 0x8095C274; // type:func
+MagicWind_SetupAction = 0x8095C450; // type:func
+MagicWind_Init = 0x8095C45C; // type:func
+MagicWind_Destroy = 0x8095C568; // type:func
+MagicWind_UpdateAlpha = 0x8095C59C; // type:func
+MagicWind_WaitForTimer = 0x8095C6BC; // type:func
+MagicWind_Grow = 0x8095C738; // type:func
+MagicWind_WaitAtFullSize = 0x8095C788; // type:func
+MagicWind_FadeOut = 0x8095C7D4; // type:func
+MagicWind_Shrink = 0x8095C838; // type:func
+MagicWind_Update = 0x8095C878; // type:func
+MagicWind_OverrideLimbDraw = 0x8095C8CC; // type:func
+MagicWind_Draw = 0x8095CA50; // type:func
+MagicFire_Init = 0x8095E150; // type:func
+MagicFire_Destroy = 0x8095E1FC; // type:func
+MagicFire_UpdateBeforeCast = 0x8095E220; // type:func
+MagicFire_Update = 0x8095E2C4; // type:func
+MagicFire_Draw = 0x8095E658; // type:func
+func_80AEAC10 = 0x80960450; // type:func
+func_80AEAC54 = 0x80960494; // type:func
+func_80AEACDC = 0x8096051C; // type:func
+func_80AEAD20 = 0x80960560; // type:func
+EnRu1_DestroyColliders = 0x809605D8; // type:func
+func_80AEADD8 = 0x80960618; // type:func
+func_80AEADE0 = 0x80960624; // type:func
+func_80AEADF0 = 0x80960638; // type:func
+EnRu1_Destroy = 0x80960648; // type:func
+EnRu1_UpdateEyes = 0x80960668; // type:func
+EnRu1_SetEyeIndex = 0x809606F0; // type:func
+EnRu1_SetMouthIndex = 0x80960708; // type:func
+func_80AEAECC = 0x80960720; // type:func
+EnRu1_IsCsStateIdle = 0x80960788; // type:func
+EnRu1_GetCue = 0x809607A8; // type:func
+func_80AEAFA0 = 0x809607F4; // type:func
+func_80AEAFE0 = 0x80960834; // type:func
+func_80AEB020 = 0x80960874; // type:func
+EnRu1_FindSwitch = 0x809608DC; // type:func
+func_80AEB0EC = 0x80960924; // type:func
+func_80AEB104 = 0x8096093C; // type:func
+func_80AEB124 = 0x8096095C; // type:func
+func_80AEB174 = 0x809609AC; // type:func
+func_80AEB1B4 = 0x809609F0; // type:func
+func_80AEB264 = 0x80960A1C; // type:func
+EnRu1_UpdateSkelAnime = 0x80960AD8; // type:func
+func_80AEB364 = 0x80960B1C; // type:func
+func_80AEB3A4 = 0x80960B5C; // type:func
+func_80AEB3CC = 0x80960B84; // type:func
+func_80AEB3DC = 0x80960B98; // type:func
+EnRu1_GetCueChannel3 = 0x80960BF4; // type:func
+func_80AEB458 = 0x80960C14; // type:func
+func_80AEB480 = 0x80960C3C; // type:func
+EnRu1_SpawnRipple = 0x80960C64; // type:func
+func_80AEB50C = 0x80960CCC; // type:func
+func_80AEB59C = 0x80960D5C; // type:func
+EnRu1_SpawnSplash = 0x80960E48; // type:func
+func_80AEB6E0 = 0x80960EAC; // type:func
+func_80AEB738 = 0x80960F08; // type:func
+func_80AEB7D0 = 0x80960FA0; // type:func
+func_80AEB7E0 = 0x80960FB4; // type:func
+func_80AEB87C = 0x80961050; // type:func
+func_80AEB89C = 0x80961074; // type:func
+func_80AEB914 = 0x809610EC; // type:func
+func_80AEB934 = 0x8096110C; // type:func
+func_80AEB954 = 0x8096112C; // type:func
+func_80AEB974 = 0x8096114C; // type:func
+func_80AEBA0C = 0x809611E4; // type:func
+func_80AEBA2C = 0x80961204; // type:func
+func_80AEBAFC = 0x809612D4; // type:func
+func_80AEBB3C = 0x80961318; // type:func
+func_80AEBB78 = 0x80961358; // type:func
+func_80AEBBF4 = 0x809613D8; // type:func
+func_80AEBC30 = 0x80961418; // type:func
+func_80AEBC84 = 0x80961470; // type:func
+func_80AEBCB8 = 0x809614A8; // type:func
+func_80AEBD1C = 0x8096150C; // type:func
+func_80AEBD94 = 0x80961584; // type:func
+func_80AEBE3C = 0x8096162C; // type:func
+func_80AEBEC8 = 0x809616BC; // type:func
+func_80AEBF60 = 0x80961754; // type:func
+func_80AEBFD8 = 0x809617D0; // type:func
+func_80AEC070 = 0x80961868; // type:func
+func_80AEC0B4 = 0x809618B0; // type:func
+func_80AEC100 = 0x80961904; // type:func
+func_80AEC130 = 0x80961938; // type:func
+func_80AEC17C = 0x80961988; // type:func
+func_80AEC1D4 = 0x809619E8; // type:func
+func_80AEC244 = 0x80961A5C; // type:func
+func_80AEC2C0 = 0x80961ADC; // type:func
+func_80AEC320 = 0x80961B40; // type:func
+func_80AEC40C = 0x80961C34; // type:func
+func_80AEC4CC = 0x80961CF4; // type:func
+func_80AEC4F4 = 0x80961D1C; // type:func
+func_80AEC5FC = 0x80961E24; // type:func
+func_80AEC650 = 0x80961E78; // type:func
+func_80AEC6B0 = 0x80961EDC; // type:func
+func_80AEC6E4 = 0x80961F14; // type:func
+func_80AEC780 = 0x80961FB4; // type:func
+func_80AEC81C = 0x80962054; // type:func
+func_80AEC8B8 = 0x809620F0; // type:func
+func_80AEC93C = 0x80962178; // type:func
+func_80AEC9C4 = 0x80962200; // type:func
+func_80AECA18 = 0x80962254; // type:func
+func_80AECA44 = 0x80962284; // type:func
+func_80AECA94 = 0x809622D8; // type:func
+func_80AECAB4 = 0x809622F8; // type:func
+func_80AECAD4 = 0x80962318; // type:func
+func_80AECB18 = 0x80962360; // type:func
+func_80AECB60 = 0x809623AC; // type:func
+func_80AECBB8 = 0x80962408; // type:func
+func_80AECC1C = 0x80962470; // type:func
+func_80AECC84 = 0x809624DC; // type:func
+func_80AECCB0 = 0x80962508; // type:func
+func_80AECDA0 = 0x809625F8; // type:func
+func_80AECE04 = 0x8096265C; // type:func
+func_80AECE20 = 0x8096267C; // type:func
+func_80AECEB4 = 0x8096270C; // type:func
+func_80AECF6C = 0x809627C4; // type:func
+func_80AED084 = 0x809628DC; // type:func
+func_80AED0B0 = 0x80962908; // type:func
+func_80AED0C8 = 0x80962920; // type:func
+func_80AED0D8 = 0x80962934; // type:func
+func_80AED110 = 0x8096296C; // type:func
+func_80AED154 = 0x809629B0; // type:func
+func_80AED19C = 0x809629F8; // type:func
+func_80AED218 = 0x80962A74; // type:func
+func_80AED304 = 0x80962B64; // type:func
+func_80AED324 = 0x80962B84; // type:func
+func_80AED344 = 0x80962BA4; // type:func
+func_80AED374 = 0x80962BD8; // type:func
+func_80AED3A4 = 0x80962C0C; // type:func
+func_80AED3E0 = 0x80962C4C; // type:func
+func_80AED414 = 0x80962C84; // type:func
+func_80AED44C = 0x80962CC4; // type:func
+func_80AED4FC = 0x80962D78; // type:func
+func_80AED520 = 0x80962DA0; // type:func
+func_80AED57C = 0x80962E00; // type:func
+func_80AED5B8 = 0x80962E40; // type:func
+func_80AED5DC = 0x80962E68; // type:func
+func_80AED600 = 0x80962E90; // type:func
+func_80AED624 = 0x80962EB8; // type:func
+func_80AED6DC = 0x80962F70; // type:func
+func_80AED6F8 = 0x80962F90; // type:func
+func_80AED738 = 0x80962FD0; // type:func
+func_80AED83C = 0x809630D8; // type:func
+func_80AED8DC = 0x8096317C; // type:func
+func_80AEDAE0 = 0x80963380; // type:func
+func_80AEDB30 = 0x809633D4; // type:func
+func_80AEDEF4 = 0x80963794; // type:func
+func_80AEDFF4 = 0x80963898; // type:func
+func_80AEE02C = 0x809638D8; // type:func
+func_80AEE050 = 0x80963900; // type:func
+func_80AEE264 = 0x80963B1C; // type:func
+func_80AEE2F8 = 0x80963BB0; // type:func
+func_80AEE394 = 0x80963C4C; // type:func
+func_80AEE488 = 0x80963D40; // type:func
+func_80AEE568 = 0x80963E20; // type:func
+func_80AEE628 = 0x80963EE4; // type:func
+func_80AEE6D0 = 0x80963F88; // type:func
+func_80AEE7C4 = 0x8096407C; // type:func
+func_80AEEAC8 = 0x8096439C; // type:func
+func_80AEEB24 = 0x809643F8; // type:func
+func_80AEEBB4 = 0x80964488; // type:func
+func_80AEEBD4 = 0x809644A8; // type:func
+func_80AEEC5C = 0x80964534; // type:func
+func_80AEECF0 = 0x809645CC; // type:func
+func_80AEED58 = 0x80964638; // type:func
+func_80AEEDCC = 0x809646B0; // type:func
+func_80AEEE34 = 0x8096471C; // type:func
+func_80AEEE9C = 0x80964788; // type:func
+func_80AEEF08 = 0x809647F8; // type:func
+func_80AEEF5C = 0x80964850; // type:func
+func_80AEEF68 = 0x80964860; // type:func
+func_80AEEFEC = 0x809648E8; // type:func
+func_80AEF080 = 0x8096497C; // type:func
+func_80AEF0BC = 0x809649BC; // type:func
+func_80AEF170 = 0x80964A74; // type:func
+func_80AEF188 = 0x80964A8C; // type:func
+func_80AEF1F0 = 0x80964AF4; // type:func
+func_80AEF29C = 0x80964BA0; // type:func
+func_80AEF2AC = 0x80964BB4; // type:func
+func_80AEF2D0 = 0x80964BDC; // type:func
+func_80AEF354 = 0x80964C68; // type:func
+func_80AEF3A8 = 0x80964CC4; // type:func
+func_80AEF40C = 0x80964D2C; // type:func
+func_80AEF4A8 = 0x80964DCC; // type:func
+func_80AEF4E0 = 0x80964E04; // type:func
+func_80AEF51C = 0x80964E44; // type:func
+func_80AEF540 = 0x80964E6C; // type:func
+func_80AEF5B8 = 0x80964EE8; // type:func
+func_80AEF624 = 0x80964F58; // type:func
+func_80AEF728 = 0x8096505C; // type:func
+func_80AEF79C = 0x809650D0; // type:func
+func_80AEF820 = 0x80965158; // type:func
+func_80AEF890 = 0x809651C8; // type:func
+func_80AEF930 = 0x80965254; // type:func
+func_80AEF99C = 0x809652C4; // type:func
+func_80AEF9D8 = 0x80965300; // type:func
+func_80AEFA2C = 0x80965344; // type:func
+func_80AEFAAC = 0x809653BC; // type:func
+func_80AEFB04 = 0x80965404; // type:func
+func_80AEFB68 = 0x80965460; // type:func
+func_80AEFBC8 = 0x809654B8; // type:func
+func_80AEFC24 = 0x80965518; // type:func
+func_80AEFC54 = 0x8096554C; // type:func
+func_80AEFCE8 = 0x809655E8; // type:func
+func_80AEFD38 = 0x80965638; // type:func
+func_80AEFDC0 = 0x809656C4; // type:func
+func_80AEFE38 = 0x80965748; // type:func
+func_80AEFE84 = 0x80965794; // type:func
+func_80AEFE9C = 0x809657AC; // type:func
+func_80AEFECC = 0x809657E0; // type:func
+func_80AEFF40 = 0x8096585C; // type:func
+func_80AEFF94 = 0x809658B8; // type:func
+EnRu1_Update = 0x80965954; // type:func
+EnRu1_Init = 0x8096599C; // type:func
+func_80AF0278 = 0x80965AD8; // type:func
+EnRu1_OverrideLimbDraw = 0x80965B48; // type:func
+EnRu1_PostLimbDraw = 0x80965BB4; // type:func
+EnRu1_DrawNothing = 0x80965C40; // type:func
+EnRu1_DrawOpa = 0x80965C50; // type:func
+EnRu1_DrawXlu = 0x80965DF4; // type:func
+EnRu1_Draw = 0x80965F94; // type:func
+BossFd2_SpawnDebris = 0x80967AF0; // type:func
+BossFd2_SpawnFireBreath = 0x80967BC8; // type:func
+BossFd2_SpawnEmber = 0x80967CDC; // type:func
+BossFd2_SpawnSkullPiece = 0x80967DB0; // type:func
+BossFd2_SpawnDust = 0x80967E88; // type:func
+BossFd2_Init = 0x80967F20; // type:func
+BossFd2_Destroy = 0x8096801C; // type:func
+BossFd2_SetupEmerge = 0x8096805C; // type:func
+BossFd2_Emerge = 0x80968154; // type:func
+BossFd2_SetupIdle = 0x80968494; // type:func
+BossFd2_Idle = 0x8096853C; // type:func
+BossFd2_SetupBurrow = 0x80968690; // type:func
+BossFd2_Burrow = 0x80968708; // type:func
+BossFd2_SetupBreatheFire = 0x809687D8; // type:func
+BossFd2_BreatheFire = 0x8096883C; // type:func
+BossFd2_SetupClawSwipe = 0x80968D80; // type:func
+BossFd2_ClawSwipe = 0x80968DE0; // type:func
+BossFd2_SetupVulnerable = 0x80968E58; // type:func
+BossFd2_Vulnerable = 0x80968EB4; // type:func
+BossFd2_SetupDamaged = 0x8096910C; // type:func
+BossFd2_Damaged = 0x80969168; // type:func
+BossFd2_SetupDeath = 0x80969298; // type:func
+BossFd2_UpdateCamera = 0x80969328; // type:func
+BossFd2_Death = 0x80969498; // type:func
+BossFd2_Wait = 0x80969B1C; // type:func
+BossFd2_CollisionCheck = 0x80969B64; // type:func
+BossFd2_UpdateFace = 0x8096A004; // type:func
+BossFd2_Update = 0x8096A170; // type:func
+BossFd2_OverrideLimbDraw = 0x8096A324; // type:func
+BossFd2_PostLimbDraw = 0x8096A518; // type:func
+BossFd2_UpdateMane = 0x8096A5C0; // type:func
+BossFd2_DrawMane = 0x8096AB94; // type:func
+BossFd2_Draw = 0x8096AFD8; // type:func
+EnFdFire_UpdatePos = 0x8096B820; // type:func
+EnFdFire_CheckCollider = 0x8096B8E8; // type:func
+EnFdFire_Init = 0x8096B94C; // type:func
+EnFdFire_Destroy = 0x8096BA54; // type:func
+func_80A0E70C = 0x8096BA80; // type:func
+EnFdFire_WaitToDie = 0x8096BBBC; // type:func
+EnFdFire_DanceTowardsPlayer = 0x8096BBF8; // type:func
+EnFdFire_Disappear = 0x8096BDA8; // type:func
+EnFdFire_Update = 0x8096BE5C; // type:func
+EnFdFire_Draw = 0x8096BF58; // type:func
+EnDh_SetupAction = 0x8096C530; // type:func
+EnDh_Init = 0x8096C53C; // type:func
+EnDh_Destroy = 0x8096C678; // type:func
+EnDh_SpawnDebris = 0x8096C6C0; // type:func
+EnDh_SetupWait = 0x8096C858; // type:func
+EnDh_Wait = 0x8096C90C; // type:func
+EnDh_SetupWalk = 0x8096CB30; // type:func
+EnDh_Walk = 0x8096CBCC; // type:func
+EnDh_SetupRetreat = 0x8096CCD4; // type:func
+EnDh_Retreat = 0x8096CD38; // type:func
+EnDh_SetupAttack = 0x8096CDC4; // type:func
+EnDh_Attack = 0x8096CE24; // type:func
+EnDh_SetupBurrow = 0x8096D134; // type:func
+EnDh_Burrow = 0x8096D1B8; // type:func
+EnDh_SetupDamage = 0x8096D348; // type:func
+EnDh_Damage = 0x8096D3C8; // type:func
+EnDh_SetupDeath = 0x8096D4F0; // type:func
+EnDh_Death = 0x8096D578; // type:func
+EnDh_CollisionCheck = 0x8096D6A8; // type:func
+EnDh_Update = 0x8096D7F8; // type:func
+EnDh_PostLimbDraw = 0x8096D9A8; // type:func
+EnDh_Draw = 0x8096DA38; // type:func
+EnDha_SetupAction = 0x8096E010; // type:func
+EnDha_Init = 0x8096E01C; // type:func
+EnDha_Destroy = 0x8096E138; // type:func
+EnDha_SetupWait = 0x8096E164; // type:func
+EnDha_Wait = 0x8096E1EC; // type:func
+EnDha_SetupTakeDamage = 0x8096E6FC; // type:func
+EnDha_TakeDamage = 0x8096E728; // type:func
+EnDha_SetupDeath = 0x8096E7F0; // type:func
+EnDha_Die = 0x8096E860; // type:func
+EnDha_UpdateHealth = 0x8096EA1C; // type:func
+EnDha_Update = 0x8096EB10; // type:func
+EnDha_OverrideLimbDraw = 0x8096EBB8; // type:func
+EnDha_PostLimbDraw = 0x8096EC58; // type:func
+EnDha_Draw = 0x8096ED70; // type:func
+EnRl_Destroy = 0x8096F010; // type:func
+func_80AE72D0 = 0x8096F034; // type:func
+func_80AE744C = 0x8096F0BC; // type:func
+func_80AE7494 = 0x8096F104; // type:func
+func_80AE74B4 = 0x8096F128; // type:func
+func_80AE74FC = 0x8096F174; // type:func
+func_80AE7544 = 0x8096F1C0; // type:func
+func_80AE7590 = 0x8096F20C; // type:func
+func_80AE7668 = 0x8096F2EC; // type:func
+func_80AE7698 = 0x8096F320; // type:func
+func_80AE772C = 0x8096F3B4; // type:func
+func_80AE7798 = 0x8096F420; // type:func
+func_80AE77B8 = 0x8096F440; // type:func
+func_80AE77F8 = 0x8096F488; // type:func
+func_80AE7838 = 0x8096F4CC; // type:func
+func_80AE7878 = 0x8096F514; // type:func
+func_80AE78D4 = 0x8096F56C; // type:func
+func_80AE7954 = 0x8096F5EC; // type:func
+func_80AE79A4 = 0x8096F63C; // type:func
+func_80AE7AF8 = 0x8096F790; // type:func
+func_80AE7BF8 = 0x8096F89C; // type:func
+func_80AE7C64 = 0x8096F908; // type:func
+func_80AE7C94 = 0x8096F928; // type:func
+func_80AE7CE8 = 0x8096F970; // type:func
+func_80AE7D40 = 0x8096F9B4; // type:func
+func_80AE7D94 = 0x8096F9FC; // type:func
+EnRl_Update = 0x8096FB44; // type:func
+EnRl_Init = 0x8096FB8C; // type:func
+func_80AE7FD0 = 0x8096FBF8; // type:func
+func_80AE7FDC = 0x8096FC08; // type:func
+EnRl_Draw = 0x8096FD3C; // type:func
+EnEncount1_Init = 0x8096FEF0; // type:func
+EnEncount1_SpawnLeevers = 0x80970024; // type:func
+EnEncount1_SpawnTektites = 0x80970380; // type:func
+EnEncount1_SpawnStalchildOrWolfos = 0x80970518; // type:func
+EnEncount1_Update = 0x8097096C; // type:func
+DemoDu_Destroy = 0x80970A50; // type:func
+DemoDu_UpdateEyes = 0x80970A74; // type:func
+DemoDu_SetEyeTexIndex = 0x80970AFC; // type:func
+DemoDu_SetMouthTexIndex = 0x80970B14; // type:func
+DemoDu_UpdateSkelAnime = 0x80970B2C; // type:func
+DemoDu_UpdateBgCheckInfo = 0x80970B50; // type:func
+DemoDu_GetCue = 0x80970B98; // type:func
+DemoDu_CheckForCue = 0x80970BC0; // type:func
+DemoDu_CheckForNoCue = 0x80970C0C; // type:func
+DemoDu_SetStartPosRotFromCue = 0x80970C58; // type:func
+func_80969DDC = 0x80970CD8; // type:func
+DemoDu_InitCs_FireMedallion = 0x80970D68; // type:func
+DemoDu_CsFireMedallion_SpawnDoorWarp = 0x80970DD8; // type:func
+func_80969F38 = 0x80970E34; // type:func
+func_80969FB4 = 0x80970EB0; // type:func
+DemoDu_CsFireMedallion_AdvanceTo01 = 0x80970ED0; // type:func
+DemoDu_CsFireMedallion_AdvanceTo02 = 0x80970F68; // type:func
+DemoDu_CsFireMedallion_AdvanceTo03 = 0x80970FB8; // type:func
+DemoDu_CsFireMedallion_AdvanceTo04 = 0x80970FE4; // type:func
+DemoDu_CsFireMedallion_AdvanceTo05 = 0x80971078; // type:func
+DemoDu_CsFireMedallion_AdvanceTo06 = 0x809710E4; // type:func
+DemoDu_UpdateCs_FM_00 = 0x80971130; // type:func
+DemoDu_UpdateCs_FM_01 = 0x80971150; // type:func
+DemoDu_UpdateCs_FM_02 = 0x80971170; // type:func
+DemoDu_UpdateCs_FM_03 = 0x809711A4; // type:func
+DemoDu_UpdateCs_FM_04 = 0x809711E4; // type:func
+DemoDu_UpdateCs_FM_05 = 0x8097121C; // type:func
+DemoDu_UpdateCs_FM_06 = 0x8097125C; // type:func
+DemoDu_InitCs_GoronsRuby = 0x80971288; // type:func
+DemoDu_CsPlaySfx_GoronLanding = 0x809712D8; // type:func
+DemoDu_CsPlaySfx_DaruniaFalling = 0x80971300; // type:func
+DemoDu_CsPlaySfx_DaruniaHitsLink = 0x80971330; // type:func
+DemoDu_CsPlaySfx_HitBreast = 0x80971388; // type:func
+DemoDu_CsPlaySfx_LinkEscapeFromGorons = 0x809713B0; // type:func
+DemoDu_CsPlaySfx_LinkSurprised = 0x80971408; // type:func
+DemoDu_CsGoronsRuby_UpdateFaceTextures = 0x80971460; // type:func
+func_8096A630 = 0x80971568; // type:func
+DemoDu_CsGoronsRuby_SpawnDustWhenHittingLink = 0x8097161C; // type:func
+DemoDu_CsGoronsRuby_DaruniaFalling = 0x809718B0; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo01 = 0x8097198C; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo02 = 0x809719A0; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo03 = 0x80971A44; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo04 = 0x80971A98; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo05 = 0x80971AD0; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo06 = 0x80971B3C; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo07 = 0x80971BD4; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo08 = 0x80971C40; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo09 = 0x80971CD4; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo10 = 0x80971D44; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo11 = 0x80971DB0; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo12 = 0x80971E44; // type:func
+DemoDu_CsGoronsRuby_AdvanceTo13 = 0x80971EB0; // type:func
+DemoDu_UpdateCs_GR_00 = 0x80971F40; // type:func
+DemoDu_UpdateCs_GR_01 = 0x80971F74; // type:func
+DemoDu_UpdateCs_GR_02 = 0x80971FB0; // type:func
+DemoDu_UpdateCs_GR_03 = 0x8097200C; // type:func
+DemoDu_UpdateCs_GR_04 = 0x8097204C; // type:func
+DemoDu_UpdateCs_GR_05 = 0x8097209C; // type:func
+DemoDu_UpdateCs_GR_06 = 0x809720E8; // type:func
+DemoDu_UpdateCs_GR_07 = 0x80972148; // type:func
+DemoDu_UpdateCs_GR_08 = 0x80972194; // type:func
+DemoDu_UpdateCs_GR_09 = 0x809721F8; // type:func
+DemoDu_UpdateCs_GR_10 = 0x80972258; // type:func
+DemoDu_UpdateCs_GR_11 = 0x809722A4; // type:func
+DemoDu_UpdateCs_GR_12 = 0x809722F4; // type:func
+DemoDu_UpdateCs_GR_13 = 0x80972340; // type:func
+DemoDu_InitCs_AfterGanon = 0x80972388; // type:func
+DemoDu_CsPlaySfx_WhiteOut = 0x80972428; // type:func
+DemoDu_CsAfterGanon_SpawnDemo6K = 0x80972448; // type:func
+DemoDu_CsAfterGanon_AdvanceTo01 = 0x809724C8; // type:func
+DemoDu_CsAfterGanon_AdvanceTo02 = 0x8097251C; // type:func
+DemoDu_CsAfterGanon_BackTo01 = 0x80972670; // type:func
+DemoDu_UpdateCs_AG_00 = 0x8097270C; // type:func
+DemoDu_UpdateCs_AG_01 = 0x8097272C; // type:func
+DemoDu_UpdateCs_AG_02 = 0x80972774; // type:func
+DemoDu_Draw_02 = 0x809727BC; // type:func
+DemoDu_InitCs_Credits = 0x80972978; // type:func
+DemoDu_CsCredits_UpdateShadowAlpha = 0x809729E4; // type:func
+DemoDu_CsCredits_AdvanceTo01 = 0x80972A70; // type:func
+DemoDu_CsCredits_AdvanceTo02 = 0x80972AA8; // type:func
+DemoDu_CsCredits_AdvanceTo03 = 0x80972AF4; // type:func
+DemoDu_CsCredits_AdvanceTo04 = 0x80972B34; // type:func
+DemoDu_CsCredits_BackTo02 = 0x80972B74; // type:func
+DemoDu_CsCredits_HandleCues = 0x80972BBC; // type:func
+DemoDu_UpdateCs_CR_00 = 0x80972C68; // type:func
+DemoDu_UpdateCs_CR_01 = 0x80972C88; // type:func
+DemoDu_UpdateCs_CR_02 = 0x80972CD4; // type:func
+DemoDu_UpdateCs_CR_03 = 0x80972D1C; // type:func
+DemoDu_UpdateCs_CR_04 = 0x80972D64; // type:func
+DemoDu_Update = 0x80972DA8; // type:func
+DemoDu_Init = 0x80972DF0; // type:func
+DemoDu_Draw_NoDraw = 0x80972E94; // type:func
+DemoDu_Draw_01 = 0x80972EA4; // type:func
+DemoDu_Draw = 0x8097304C; // type:func
+func_80984BE0 = 0x80974230; // type:func
+DemoIm_InitCollider = 0x809742B8; // type:func
+DemoIm_DestroyCollider = 0x80974304; // type:func
+DemoIm_UpdateCollider = 0x80974330; // type:func
+func_80984DB8 = 0x80974374; // type:func
+func_80984E58 = 0x80974418; // type:func
+func_80984F10 = 0x809744D0; // type:func
+func_80984F94 = 0x80974558; // type:func
+DemoIm_UpdateBgCheckInfo = 0x809745E0; // type:func
+DemoIm_UpdateSkelAnime = 0x80974628; // type:func
+DemoIm_IsCutsceneIdle = 0x8097464C; // type:func
+DemoIm_GetCue = 0x8097466C; // type:func
+func_809850E8 = 0x809746B8; // type:func
+func_80985134 = 0x80974704; // type:func
+func_80985180 = 0x80974750; // type:func
+func_80985200 = 0x809747D0; // type:func
+DemoIm_ChangeAnim = 0x80974850; // type:func
+func_80985310 = 0x809748E0; // type:func
+func_80985358 = 0x80974928; // type:func
+func_809853B4 = 0x80974984; // type:func
+func_80985430 = 0x80974A00; // type:func
+func_8098544C = 0x80974A20; // type:func
+func_809854DC = 0x80974ABC; // type:func
+func_8098557C = 0x80974B5C; // type:func
+func_809855A8 = 0x80974B88; // type:func
+func_80985640 = 0x80974C20; // type:func
+func_809856AC = 0x80974C8C; // type:func
+func_809856F8 = 0x80974CD8; // type:func
+func_80985718 = 0x80974CF8; // type:func
+func_80985738 = 0x80974D18; // type:func
+func_80985770 = 0x80974D54; // type:func
+func_809857B0 = 0x80974D9C; // type:func
+func_809857F0 = 0x80974DE0; // type:func
+func_80985830 = 0x80974E28; // type:func
+func_80985860 = 0x80974E5C; // type:func
+func_809858A8 = 0x80974EA0; // type:func
+DemoIm_SpawnLightBall = 0x80974EC0; // type:func
+func_80985948 = 0x80974F40; // type:func
+func_809859E0 = 0x80974FDC; // type:func
+func_80985B34 = 0x80975130; // type:func
+func_80985C10 = 0x80975214; // type:func
+func_80985C40 = 0x80975234; // type:func
+func_80985C94 = 0x8097527C; // type:func
+DemoIm_DrawTranslucent = 0x809752C4; // type:func
+func_80985E60 = 0x8097540C; // type:func
+func_80985EAC = 0x80975458; // type:func
+func_80985EF4 = 0x809754A0; // type:func
+func_80985F54 = 0x80975500; // type:func
+func_80985F64 = 0x80975514; // type:func
+func_80985FE8 = 0x80975598; // type:func
+func_8098604C = 0x809755FC; // type:func
+func_809860C8 = 0x80975678; // type:func
+func_809860DC = 0x80975690; // type:func
+func_80986148 = 0x809756FC; // type:func
+func_809861C4 = 0x80975778; // type:func
+func_8098629C = 0x8097583C; // type:func
+func_809862E0 = 0x80975880; // type:func
+func_809863BC = 0x80975948; // type:func
+func_809863DC = 0x80975968; // type:func
+func_80986430 = 0x809759C4; // type:func
+func_80986494 = 0x80975A30; // type:func
+func_809864D4 = 0x80975A78; // type:func
+func_8098652C = 0x80975AD8; // type:func
+func_80986570 = 0x80975B1C; // type:func
+func_809865F8 = 0x80975BA4; // type:func
+func_80986700 = 0x80975CB4; // type:func
+func_80986710 = 0x80975CC8; // type:func
+func_80986794 = 0x80975D4C; // type:func
+func_8098680C = 0x80975DC4; // type:func
+func_809868E8 = 0x80975E8C; // type:func
+func_80986908 = 0x80975EAC; // type:func
+func_80986948 = 0x80975EF4; // type:func
+func_809869B0 = 0x80975F64; // type:func
+func_809869F8 = 0x80975FA8; // type:func
+func_80986A5C = 0x8097600C; // type:func
+func_80986AD0 = 0x80976080; // type:func
+func_80986B2C = 0x809760DC; // type:func
+func_80986BA0 = 0x80976150; // type:func
+func_80986BE4 = 0x80976194; // type:func
+func_80986BF8 = 0x809761A8; // type:func
+func_80986C30 = 0x809761E0; // type:func
+func_80986CC8 = 0x80976284; // type:func
+func_80986CFC = 0x809762B8; // type:func
+func_80986D40 = 0x80976300; // type:func
+func_80986DC8 = 0x80976368; // type:func
+func_80986E20 = 0x809763C4; // type:func
+func_80986E40 = 0x809763E4; // type:func
+func_80986EAC = 0x80976458; // type:func
+func_80986F08 = 0x809764BC; // type:func
+func_80986F28 = 0x809764DC; // type:func
+func_80986F88 = 0x80976544; // type:func
+func_80986FA8 = 0x80976568; // type:func
+func_80987018 = 0x809765E0; // type:func
+func_80987064 = 0x80976628; // type:func
+func_809870F0 = 0x809766B4; // type:func
+func_80987128 = 0x809766EC; // type:func
+func_80987174 = 0x80976738; // type:func
+func_809871B4 = 0x80976778; // type:func
+func_809871E8 = 0x809767AC; // type:func
+func_80987288 = 0x80976838; // type:func
+func_809872A8 = 0x80976858; // type:func
+func_809872F0 = 0x809768A4; // type:func
+func_80987330 = 0x809768EC; // type:func
+DemoIm_Update = 0x80976930; // type:func
+DemoIm_Init = 0x80976978; // type:func
+DemoIm_Destroy = 0x80976AA0; // type:func
+DemoIm_OverrideLimbDraw = 0x80976AC0; // type:func
+DemoIm_PostLimbDraw = 0x80976B70; // type:func
+DemoIm_DrawNothing = 0x80976BFC; // type:func
+DemoIm_DrawSolid = 0x80976C0C; // type:func
+DemoIm_Draw = 0x80976D50; // type:func
+DemoTreLgt_Init = 0x809781A0; // type:func
+DemoTreLgt_Destroy = 0x809781FC; // type:func
+func_80993754 = 0x80978228; // type:func
+func_8099375C = 0x80978234; // type:func
+func_809937B4 = 0x8097828C; // type:func
+func_80993848 = 0x80978324; // type:func
+DemoTreLgt_Update = 0x809785D8; // type:func
+DemoTreLgt_OverrideLimbDraw = 0x8097860C; // type:func
+DemoTreLgt_Draw = 0x80978760; // type:func
+EnFw_DoBounce = 0x809788B0; // type:func
+EnFw_PlayerInRange = 0x80978978; // type:func
+EnFw_GetPosAdjAroundCircle = 0x80978A74; // type:func
+EnFw_CheckCollider = 0x80978B48; // type:func
+EnFw_SpawnDust = 0x80978C08; // type:func
+EnFw_Init = 0x80978E50; // type:func
+EnFw_Destroy = 0x80978F58; // type:func
+EnFw_Bounce = 0x80978F84; // type:func
+EnFw_Run = 0x80978FF0; // type:func
+EnFw_TurnToParentInitPos = 0x809795C4; // type:func
+EnFw_JumpToParentInitPos = 0x809796B8; // type:func
+EnFw_Update = 0x8097976C; // type:func
+EnFw_OverrideLimbDraw = 0x8097984C; // type:func
+EnFw_PostLimbDraw = 0x80979868; // type:func
+EnFw_Draw = 0x80979904; // type:func
+EnFw_SpawnEffectDust = 0x8097998C; // type:func
+EnFw_UpdateEffects = 0x80979A30; // type:func
+EnFw_DrawEffects = 0x80979B3C; // type:func
+BgVbSima_Init = 0x8097A070; // type:func
+BgVbSima_Destroy = 0x8097A0D8; // type:func
+BgVbSima_SpawnEmber = 0x8097A10C; // type:func
+BgVbSima_Update = 0x8097A1D8; // type:func
+BgVbSima_Draw = 0x8097A638; // type:func
+EnVbBall_Init = 0x8097A790; // type:func
+EnVbBall_Destroy = 0x8097A910; // type:func
+EnVbBall_SpawnDebris = 0x8097A94C; // type:func
+EnVbBall_SpawnDust = 0x8097AA24; // type:func
+EnVbBall_UpdateBones = 0x8097AAC4; // type:func
+EnVbBall_Update = 0x8097ADA8; // type:func
+EnVbBall_Draw = 0x8097B574; // type:func
+BgHakaMegane_Init = 0x8097B940; // type:func
+BgHakaMegane_Destroy = 0x8097B9F8; // type:func
+func_8087DB24 = 0x8097BA2C; // type:func
+func_8087DBF0 = 0x8097BAFC; // type:func
+BgHakaMegane_DoNothing = 0x8097BB70; // type:func
+BgHakaMegane_Update = 0x8097BB80; // type:func
+BgHakaMegane_Draw = 0x8097BBA4; // type:func
+BgHakaMeganeBG_Init = 0x8097BD40; // type:func
+BgHakaMeganeBG_Destroy = 0x8097BEDC; // type:func
+func_8087DFF8 = 0x8097BF10; // type:func
+func_8087E040 = 0x8097BF58; // type:func
+func_8087E10C = 0x8097C024; // type:func
+func_8087E1E0 = 0x8097C0F8; // type:func
+func_8087E258 = 0x8097C170; // type:func
+func_8087E288 = 0x8097C1A0; // type:func
+func_8087E2D8 = 0x8097C1F0; // type:func
+func_8087E34C = 0x8097C264; // type:func
+BgHakaMeganeBG_Update = 0x8097C274; // type:func
+BgHakaMeganeBG_Draw = 0x8097C298; // type:func
+BgHakaShip_Init = 0x8097C400; // type:func
+BgHakaShip_Destroy = 0x8097C544; // type:func
+BgHakaShip_ChildUpdatePosition = 0x8097C584; // type:func
+BgHakaShip_WaitForSong = 0x8097C5E0; // type:func
+BgHakaShip_CutsceneStationary = 0x8097C658; // type:func
+BgHakaShip_Move = 0x8097C6F4; // type:func
+BgHakaShip_SetupCrash = 0x8097C8B8; // type:func
+BgHakaShip_CrashShake = 0x8097C914; // type:func
+BgHakaShip_CrashFall = 0x8097C9A4; // type:func
+BgHakaShip_Update = 0x8097CA64; // type:func
+BgHakaShip_Draw = 0x8097CAA4; // type:func
+BgHakaSgami_Init = 0x8097CE50; // type:func
+BgHakaSgami_Destroy = 0x8097D0F8; // type:func
+BgHakaSgami_SetupSpin = 0x8097D158; // type:func
+BgHakaSgami_Spin = 0x8097D1D0; // type:func
+BgHakaSgami_Update = 0x8097D6E4; // type:func
+BgHakaSgami_Draw = 0x8097D738; // type:func
+EnHeishi2_Init = 0x8097DA70; // type:func
+EnHeishi2_Destroy = 0x8097DCF0; // type:func
+EnHeishi2_DoNothing1 = 0x8097DD34; // type:func
+EnHeishi_DoNothing2 = 0x8097DD44; // type:func
+func_80A531E4 = 0x8097DD54; // type:func
+func_80A53278 = 0x8097DDE8; // type:func
+func_80A5344C = 0x8097DF68; // type:func
+func_80A53538 = 0x8097E054; // type:func
+func_80A535BC = 0x8097E0DC; // type:func
+func_80A53638 = 0x8097E158; // type:func
+func_80A5372C = 0x8097E244; // type:func
+func_80A53850 = 0x8097E368; // type:func
+func_80A53908 = 0x8097E420; // type:func
+func_80A5399C = 0x8097E4B4; // type:func
+func_80A53AD4 = 0x8097E5D8; // type:func
+func_80A53C0C = 0x8097E714; // type:func
+func_80A53C90 = 0x8097E79C; // type:func
+func_80A53D0C = 0x8097E818; // type:func
+func_80A53DF8 = 0x8097E8FC; // type:func
+func_80A53F30 = 0x8097EA34; // type:func
+func_80A54038 = 0x8097EB3C; // type:func
+func_80A540C0 = 0x8097EBC8; // type:func
+func_80A541FC = 0x8097ED04; // type:func
+func_80A5427C = 0x8097ED88; // type:func
+func_80A54320 = 0x8097EE2C; // type:func
+func_80A543A0 = 0x8097EEAC; // type:func
+func_80A544AC = 0x8097EFB8; // type:func
+func_80A5455C = 0x8097F068; // type:func
+func_80A546DC = 0x8097F1DC; // type:func
+func_80A5475C = 0x8097F25C; // type:func
+func_80A54954 = 0x8097F454; // type:func
+func_80A549E8 = 0x8097F4E8; // type:func
+EnHeishi2_Update = 0x8097F578; // type:func
+EnHeishi2_OverrideLimbDraw = 0x8097F6C4; // type:func
+EnHeishi2_PostLimbDraw = 0x8097F73C; // type:func
+EnHeishi2_DrawKingGuard = 0x8097F774; // type:func
+EnHeishi2_Draw = 0x8097F7E8; // type:func
+EnEncount2_Init = 0x8097FC70; // type:func
+EnEncount2_Wait = 0x8097FCE4; // type:func
+EnEncount2_SpawnRocks = 0x8097FF3C; // type:func
+EnEncount2_Update = 0x80980504; // type:func
+EnEncount2_Draw = 0x809808D0; // type:func
+EnEncount2_SpawnEffect = 0x809808F0; // type:func
+EnEncount2_UpdateEffects = 0x809809A4; // type:func
+EnEncount2_DrawEffects = 0x80980B78; // type:func
+EnFireRock_Init = 0x80980EA0; // type:func
+EnFireRock_Destroy = 0x80981290; // type:func
+EnFireRock_Fall = 0x809812F4; // type:func
+EnFireRock_SpawnMoreBrokenPieces = 0x80981648; // type:func
+FireRock_WaitSpawnRocksFromCeiling = 0x809817C8; // type:func
+FireRock_WaitOnFloor = 0x809818B8; // type:func
+EnFireRock_Update = 0x8098199C; // type:func
+EnFireRock_Draw = 0x80981C48; // type:func
+EnBrob_Init = 0x80981FB0; // type:func
+EnBrob_Destroy = 0x80982224; // type:func
+EnBrob_SetupIdle = 0x8098227C; // type:func
+EnBrob_SetupMoveUp = 0x809822E4; // type:func
+EnBrob_SetupWobble = 0x80982344; // type:func
+EnBrob_SetupStunned = 0x80982398; // type:func
+EnBrob_SetupMoveDown = 0x8098242C; // type:func
+EnBrob_SetupShock = 0x809824AC; // type:func
+EnBrob_Idle = 0x809824F8; // type:func
+EnBrob_MoveUp = 0x809825B8; // type:func
+EnBrob_Wobble = 0x809826BC; // type:func
+EnBrob_Stunned = 0x8098275C; // type:func
+EnBrob_MoveDown = 0x809827F8; // type:func
+EnBrob_Shock = 0x809828FC; // type:func
+EnBrob_Update = 0x80982B14; // type:func
+EnBrob_PostLimbDraw = 0x80982DB0; // type:func
+EnBrob_Draw = 0x80982E84; // type:func
+MirRay_SetupCollider = 0x809830A0; // type:func
+MirRay_MakeShieldLight = 0x80983168; // type:func
+MirRay_Init = 0x8098330C; // type:func
+MirRay_Destroy = 0x809835A4; // type:func
+MirRay_Update = 0x8098361C; // type:func
+MirRay_SetIntensity = 0x80983708; // type:func
+MirRay_SetupReflectionPolys = 0x809838BC; // type:func
+MirRay_RemoveSimilarReflections = 0x80983A98; // type:func
+MirRay_ReflectedBeam = 0x80983B9C; // type:func
+MirRay_Draw = 0x8098410C; // type:func
+MirRay_CheckInFrustum = 0x809843E8; // type:func
+func_808B1AE0 = 0x80984950; // type:func
+func_808B1BA0 = 0x80984A10; // type:func
+func_808B1BEC = 0x80984A5C; // type:func
+func_808B1C70 = 0x80984AE8; // type:func
+func_808B1CEC = 0x80984B64; // type:func
+func_808B1D18 = 0x80984B90; // type:func
+func_808B1D44 = 0x80984BBC; // type:func
+BgSpot09Obj_Init = 0x80984BFC; // type:func
+BgSpot09Obj_Destroy = 0x80984C64; // type:func
+BgSpot09Obj_Update = 0x80984CA4; // type:func
+BgSpot09Obj_Draw = 0x80984CB4; // type:func
+func_808B8910 = 0x80984E70; // type:func
+func_808B8A5C = 0x80984F28; // type:func
+func_808B8A98 = 0x80984F64; // type:func
+func_808B8B08 = 0x80984FD4; // type:func
+func_808B8B38 = 0x80985008; // type:func
+func_808B8BB4 = 0x80985084; // type:func
+func_808B8C90 = 0x80985168; // type:func
+func_808B8CC8 = 0x809851A4; // type:func
+BgSpot18Obj_Init = 0x809851F8; // type:func
+BgSpot18Obj_Destroy = 0x80985254; // type:func
+func_808B8DC0 = 0x80985288; // type:func
+func_808B8DD0 = 0x8098529C; // type:func
+func_808B8DDC = 0x809852AC; // type:func
+func_808B8E20 = 0x809852F0; // type:func
+func_808B8E64 = 0x80985334; // type:func
+func_808B8E7C = 0x80985350; // type:func
+func_808B8EE0 = 0x809853B4; // type:func
+func_808B8F08 = 0x809853E0; // type:func
+func_808B9030 = 0x8098550C; // type:func
+func_808B9040 = 0x80985520; // type:func
+BgSpot18Obj_Update = 0x80985540; // type:func
+BgSpot18Obj_Draw = 0x80985574; // type:func
+BossVa_SetupAction = 0x80985740; // type:func
+BossVa_AttachToBody = 0x8098574C; // type:func
+BossVa_BloodDroplets = 0x80985990; // type:func
+BossVa_BloodSplatter = 0x80985A90; // type:func
+BossVa_Gore = 0x80985BBC; // type:func
+BossVa_Spark = 0x80985CEC; // type:func
+BossVa_Tumor = 0x80985E70; // type:func
+BossVa_SetSparkEnv = 0x80985FF4; // type:func
+BossVa_SetDeathEnv = 0x80986040; // type:func
+BossVa_FindBoomerang = 0x809860C0; // type:func
+BossVa_KillBari = 0x80986100; // type:func
+BossVa_Init = 0x809862EC; // type:func
+BossVa_Destroy = 0x80986B3C; // type:func
+BossVa_SetupIntro = 0x80986B8C; // type:func
+BossVa_BodyIntro = 0x80986C1C; // type:func
+BossVa_SetupBodyPhase1 = 0x80987C3C; // type:func
+BossVa_BodyPhase1 = 0x80987CE0; // type:func
+BossVa_SetupBodyPhase2 = 0x80987F78; // type:func
+BossVa_BodyPhase2 = 0x809880A4; // type:func
+BossVa_SetupBodyPhase3 = 0x809885A8; // type:func
+BossVa_BodyPhase3 = 0x809885E4; // type:func
+BossVa_SetupBodyPhase4 = 0x80988C4C; // type:func
+BossVa_BodyPhase4 = 0x80988D00; // type:func
+BossVa_SetupBodyDeath = 0x80989808; // type:func
+BossVa_BodyDeath = 0x809898A0; // type:func
+BossVa_SetupSupportIntro = 0x8098A3F8; // type:func
+BossVa_SupportIntro = 0x8098A470; // type:func
+BossVa_SetupSupportAttached = 0x8098A594; // type:func
+BossVa_SupportAttached = 0x8098A618; // type:func
+BossVa_SetupSupportCut = 0x8098A840; // type:func
+BossVa_SupportCut = 0x8098A908; // type:func
+BossVa_SetupStump = 0x8098ADDC; // type:func
+BossVa_Stump = 0x8098AE60; // type:func
+BossVa_SetupZapperIntro = 0x8098AEF8; // type:func
+BossVa_ZapperIntro = 0x8098AF8C; // type:func
+BossVa_SetupZapperAttack = 0x8098B04C; // type:func
+BossVa_ZapperAttack = 0x8098B0E0; // type:func
+BossVa_SetupZapperDamaged = 0x8098BB14; // type:func
+BossVa_ZapperDamaged = 0x8098BC1C; // type:func
+BossVa_SetupZapperDeath = 0x8098BD30; // type:func
+BossVa_ZapperDeath = 0x8098BE04; // type:func
+BossVa_SetupZapperEnraged = 0x8098C32C; // type:func
+BossVa_ZapperEnraged = 0x8098C3B4; // type:func
+BossVa_SetupZapperHold = 0x8098CB0C; // type:func
+BossVa_ZapperHold = 0x8098CB8C; // type:func
+BossVa_SetupBariIntro = 0x8098CC98; // type:func
+BossVa_BariIntro = 0x8098CDA8; // type:func
+BossVa_SetupBariPhase3Attack = 0x8098D300; // type:func
+BossVa_BariPhase3Attack = 0x8098D3A8; // type:func
+BossVa_SetupBariPhase2Attack = 0x8098D7A8; // type:func
+BossVa_BariPhase2Attack = 0x8098D850; // type:func
+BossVa_SetupBariPhase3Stunned = 0x8098DE68; // type:func
+BossVa_BariPhase3Stunned = 0x8098DEC4; // type:func
+BossVa_SetupBariDeath = 0x8098E0E0; // type:func
+BossVa_BariDeath = 0x8098E138; // type:func
+BossVa_SetupDoor = 0x8098E16C; // type:func
+BossVa_Door = 0x8098E1BC; // type:func
+BossVa_Update = 0x8098E230; // type:func
+BossVa_BodyOverrideLimbDraw = 0x8098E43C; // type:func
+BossVa_BodyPostLimbDraw = 0x8098E5E0; // type:func
+BossVa_SupportOverrideLimbDraw = 0x8098EAE4; // type:func
+BossVa_SupportPostLimbDraw = 0x8098EB28; // type:func
+BossVa_ZapperOverrideLimbDraw = 0x8098ED78; // type:func
+BossVa_ZapperPostLimbDraw = 0x8098EF54; // type:func
+BossVa_BariOverrideLimbDraw = 0x8098F3B4; // type:func
+BossVa_BariPostLimbDraw = 0x8098F444; // type:func
+BossVa_Draw = 0x8098F5D0; // type:func
+BossVa_UpdateEffects = 0x8098FBC8; // type:func
+BossVa_DrawEffects = 0x80990568; // type:func
+BossVa_SpawnSpark = 0x80991370; // type:func
+BossVa_SpawnSparkBall = 0x80991660; // type:func
+BossVa_SpawnBloodDroplets = 0x809917EC; // type:func
+BossVa_SpawnBloodSplatter = 0x809919B8; // type:func
+BossVa_SpawnTumor = 0x80991B54; // type:func
+BossVa_SpawnGore = 0x80991CF8; // type:func
+BossVa_SpawnZapperCharge = 0x80991F18; // type:func
+BossVa_DrawDoor = 0x8099206C; // type:func
+BgHakaTubo_Init = 0x8099C9D0; // type:func
+BgHakaTubo_Destroy = 0x8099CACC; // type:func
+BgHakaTubo_Idle = 0x8099CB24; // type:func
+BgHakaTubo_DropCollectible = 0x8099CD90; // type:func
+BgHakaTubo_Update = 0x8099D054; // type:func
+BgHakaTubo_DrawFlameCircle = 0x8099D088; // type:func
+BgHakaTubo_Draw = 0x8099D234; // type:func
+BgHakaTrap_Init = 0x8099D3F0; // type:func
+BgHakaTrap_Destroy = 0x8099D690; // type:func
+func_8087FFC0 = 0x8099D714; // type:func
+func_808801B8 = 0x8099D914; // type:func
+func_808802D8 = 0x8099DA38; // type:func
+func_80880484 = 0x8099DBE4; // type:func
+func_808805C0 = 0x8099DD20; // type:func
+func_808806BC = 0x8099DE1C; // type:func
+func_808808F4 = 0x8099E054; // type:func
+func_808809B0 = 0x8099E114; // type:func
+func_808809E4 = 0x8099E148; // type:func
+func_80880AE8 = 0x8099E254; // type:func
+func_80880C0C = 0x8099E378; // type:func
+BgHakaTrap_Update = 0x8099E3EC; // type:func
+func_80880D68 = 0x8099E4DC; // type:func
+BgHakaTrap_Draw = 0x8099E578; // type:func
+BgHakaHuta_Init = 0x8099E9C0; // type:func
+BgHakaHuta_Destroy = 0x8099EA80; // type:func
+BgHakaHuta_SpawnDust = 0x8099EAB4; // type:func
+BgHakaHuta_PlaySfx = 0x8099EC70; // type:func
+BgHakaHuta_SpawnEnemies = 0x8099ECFC; // type:func
+BgHakaHuta_Open = 0x8099EFC4; // type:func
+BgHakaHuta_SlideOpen = 0x8099F078; // type:func
+func_8087D720 = 0x8099F12C; // type:func
+BgHakaHuta_DoNothing = 0x8099F2D0; // type:func
+BgHakaHuta_Update = 0x8099F2E0; // type:func
+BgHakaHuta_Draw = 0x8099F304; // type:func
+BgHakaZou_Init = 0x8099F460; // type:func
+BgHakaZou_Destroy = 0x8099F748; // type:func
+func_808828F4 = 0x8099F798; // type:func
+BgHakaZou_Wait = 0x8099F914; // type:func
+func_80882BDC = 0x8099FA84; // type:func
+func_80882CC4 = 0x8099FB6C; // type:func
+func_80882E54 = 0x8099FCFC; // type:func
+func_80883000 = 0x8099FEAC; // type:func
+func_80883104 = 0x8099FFB0; // type:func
+func_80883144 = 0x8099FFF0; // type:func
+func_80883254 = 0x809A0100; // type:func
+func_80883328 = 0x809A01D8; // type:func
+func_808834D8 = 0x809A0388; // type:func
+BgHakaZou_DoNothing = 0x809A0418; // type:func
+BgHakaZou_Update = 0x809A0428; // type:func
+BgHakaZou_Draw = 0x809A046C; // type:func
+BgSpot17Funen_Init = 0x809A0650; // type:func
+BgSpot17Funen_Destroy = 0x809A0678; // type:func
+BgSpot17Funen_Update = 0x809A0688; // type:func
+func_808B746C = 0x809A06AC; // type:func
+func_808B7478 = 0x809A06BC; // type:func
+EnSyatekiItm_Init = 0x809A08A0; // type:func
+EnSyatekiItm_Destroy = 0x809A0A04; // type:func
+EnSyatekiItm_Idle = 0x809A0A14; // type:func
+EnSyatekiItm_StartRound = 0x809A0B24; // type:func
+EnSyatekiItm_SpawnTargets = 0x809A0CA0; // type:func
+EnSyatekiItm_CheckTargets = 0x809A1120; // type:func
+EnSyatekiItm_CleanupGame = 0x809A11C4; // type:func
+EnSyatekiItm_EndGame = 0x809A124C; // type:func
+EnSyatekiItm_Update = 0x809A1298; // type:func
+EnSyatekiMan_Init = 0x809A1640; // type:func
+EnSyatekiMan_Destroy = 0x809A16F4; // type:func
+EnSyatekiMan_Start = 0x809A1704; // type:func
+EnSyatekiMan_SetupIdle = 0x809A1798; // type:func
+EnSyatekiMan_Idle = 0x809A17F0; // type:func
+EnSyatekiMan_Talk = 0x809A184C; // type:func
+EnSyatekiMan_StopTalk = 0x809A19F4; // type:func
+EnSyatekiMan_StartGame = 0x809A1A9C; // type:func
+EnSyatekiMan_WaitForGame = 0x809A1B5C; // type:func
+EnSyatekiMan_EndGame = 0x809A1C78; // type:func
+EnSyatekiMan_GivePrize = 0x809A1EC8; // type:func
+EnSyatekiMan_FinishPrize = 0x809A1F38; // type:func
+EnSyatekiMan_RestartGame = 0x809A1FFC; // type:func
+EnSyatekiMan_BlinkWait = 0x809A2064; // type:func
+EnSyatekiMan_Blink = 0x809A2098; // type:func
+EnSyatekiMan_Update = 0x809A2138; // type:func
+EnSyatekiMan_OverrideLimbDraw = 0x809A21D8; // type:func
+EnSyatekiMan_Draw = 0x809A2268; // type:func
+EnTana_Init = 0x809A2400; // type:func
+EnTana_Destroy = 0x809A2450; // type:func
+EnTana_Update = 0x809A2460; // type:func
+EnTana_DrawWoodenShelves = 0x809A2470; // type:func
+EnTana_DrawStoneShelves = 0x809A2508; // type:func
+EnNb_GetPath = 0x809A26B0; // type:func
+EnNb_GetType = 0x809A26C4; // type:func
+EnNb_UpdatePath = 0x809A26D4; // type:func
+EnNb_SetupCollider = 0x809A2800; // type:func
+EnNb_UpdateCollider = 0x809A284C; // type:func
+EnNb_Destroy = 0x809A2890; // type:func
+func_80AB0FBC = 0x809A28BC; // type:func
+func_80AB1040 = 0x809A2944; // type:func
+func_80AB10C4 = 0x809A29CC; // type:func
+EnNb_UpdateEyes = 0x809A2A70; // type:func
+func_80AB1284 = 0x809A2AF8; // type:func
+EnNb_UpdateSkelAnime = 0x809A2B40; // type:func
+EnNb_GetCue = 0x809A2B64; // type:func
+EnNb_SetStartPosRotFromCue1 = 0x809A2B8C; // type:func
+func_80AB1390 = 0x809A2C0C; // type:func
+func_80AB13D8 = 0x809A2C58; // type:func
+EnNb_SetStartPosRotFromCue2 = 0x809A2CA4; // type:func
+EnNb_SetCurrentAnim = 0x809A2D24; // type:func
+EnNb_SetChamberAnim = 0x809A2DB4; // type:func
+EnNb_SpawnBlueWarp = 0x809A2DFC; // type:func
+EnNb_GiveMedallion = 0x809A2E58; // type:func
+EnNb_ComeUpImpl = 0x809A2ED4; // type:func
+EnNb_SetupChamberCsImpl = 0x809A2EF4; // type:func
+EnNb_SetupChamberWarpImpl = 0x809A2F90; // type:func
+EnNb_SetupDefaultChamberIdle = 0x809A2FE0; // type:func
+EnNb_SetupArmRaise = 0x809A300C; // type:func
+EnNb_SetupRaisedArmTransition = 0x809A30A0; // type:func
+EnNb_SetupMedallion = 0x809A310C; // type:func
+EnNb_SetupChamberCs = 0x809A3158; // type:func
+EnNb_SetupChamberWarp = 0x809A3178; // type:func
+EnNb_ComeUp = 0x809A3198; // type:func
+func_80AB193C = 0x809A31D4; // type:func
+EnNb_RaiseArm = 0x809A321C; // type:func
+func_80AB19BC = 0x809A3260; // type:func
+func_80AB19FC = 0x809A32A8; // type:func
+EnNb_SetupLightArrowOrSealingCs = 0x809A32DC; // type:func
+EnNb_PlaySealingSfx = 0x809A3320; // type:func
+EnNb_InitializeDemo6K = 0x809A3340; // type:func
+EnNb_SetupHide = 0x809A33C0; // type:func
+EnNb_CheckToFade = 0x809A3414; // type:func
+EnNb_SetupLightOrb = 0x809A3568; // type:func
+EnNb_Hide = 0x809A3604; // type:func
+EnNb_Fade = 0x809A3624; // type:func
+EnNb_CreateLightOrb = 0x809A366C; // type:func
+EnNb_DrawTransparency = 0x809A36B4; // type:func
+EnNb_InitKidnap = 0x809A37FC; // type:func
+EnNb_PlayCrySFX = 0x809A3854; // type:func
+EnNb_PlayAgonySFX = 0x809A388C; // type:func
+EnNb_SetPosInPortal = 0x809A38C4; // type:func
+EnNb_SetupCaptureCutsceneState = 0x809A39A8; // type:func
+EnNb_SetRaisedArmCaptureAnim = 0x809A39DC; // type:func
+EnNb_SetupLookAroundInKidnap = 0x809A3A3C; // type:func
+EnNb_SetupKidnap = 0x809A3AB0; // type:func
+EnNb_CheckKidnapCsMode = 0x809A3B28; // type:func
+func_80AB23A8 = 0x809A3BF0; // type:func
+EnNb_MovingInPortal = 0x809A3C28; // type:func
+EnNb_SuckedInByPortal = 0x809A3C84; // type:func
+EnNb_SetupConfrontation = 0x809A3CE0; // type:func
+EnNb_PlayKnuckleDefeatSFX = 0x809A3D24; // type:func
+EnNb_PlayKneelingOnGroundSFX = 0x809A3D68; // type:func
+EnNb_PlayLookRightSFX = 0x809A3DCC; // type:func
+EnNb_PlayLookLeftSFX = 0x809A3E18; // type:func
+EnNb_InitDemo6KInConfrontation = 0x809A3E70; // type:func
+func_80AB2688 = 0x809A3EE8; // type:func
+func_80AB26C8 = 0x809A3F28; // type:func
+func_80AB26DC = 0x809A3F40; // type:func
+EnNb_SetupKneel = 0x809A3FD8; // type:func
+EnNb_CheckIfKneeling = 0x809A4054; // type:func
+EnNb_SetupLookRight = 0x809A40C0; // type:func
+EnNb_CheckIfLookingRight = 0x809A4140; // type:func
+EnNb_SetupLookLeft = 0x809A41AC; // type:func
+EnNb_CheckIfLookLeft = 0x809A422C; // type:func
+EnNb_SetupDemo6KInConfrontation = 0x809A428C; // type:func
+EnNb_SetupRun = 0x809A42CC; // type:func
+EnNb_SetupConfrontationDestroy = 0x809A434C; // type:func
+EnNb_CheckConfrontationCsMode = 0x809A4364; // type:func
+EnNb_CheckConfrontationCsModeWrapper = 0x809A444C; // type:func
+func_80AB2C18 = 0x809A446C; // type:func
+EnNb_Kneel = 0x809A44B8; // type:func
+EnNb_LookRight = 0x809A4528; // type:func
+EnNb_LookLeft = 0x809A4598; // type:func
+EnNb_Run = 0x809A4600; // type:func
+EnNb_ConfrontationDestroy = 0x809A4688; // type:func
+func_80AB2E70 = 0x809A46DC; // type:func
+func_80AB2FC0 = 0x809A47F8; // type:func
+func_80AB2FE4 = 0x809A4820; // type:func
+EnNb_SetupCreditsSpawn = 0x809A495C; // type:func
+EnNb_SetAlphaInCredits = 0x809A49A4; // type:func
+EnNb_SetupCreditsFadeIn = 0x809A4A30; // type:func
+EnNb_SetupCreditsSit = 0x809A4A68; // type:func
+EnNb_SetupCreditsHeadTurn = 0x809A4AB4; // type:func
+EnNb_CheckIfLookingUp = 0x809A4AF4; // type:func
+EnNb_CheckCreditsCsModeImpl = 0x809A4B28; // type:func
+EnNb_CheckCreditsCsMode = 0x809A4BB4; // type:func
+EnNb_CreditsFade = 0x809A4BD4; // type:func
+func_80AB3428 = 0x809A4C20; // type:func
+EnNb_LookUp = 0x809A4C68; // type:func
+EnNb_CrawlspaceSpawnCheck = 0x809A4CAC; // type:func
+func_80AB359C = 0x809A4DA8; // type:func
+EnNb_SetNoticeSFX = 0x809A4E6C; // type:func
+EnNb_GetNoticedStatus = 0x809A4E94; // type:func
+func_80AB36DC = 0x809A4EEC; // type:func
+EnNb_CheckNoticed = 0x809A4F9C; // type:func
+EnNb_SetupIdleCrawlspace = 0x809A4FF4; // type:func
+func_80AB3838 = 0x809A504C; // type:func
+EnNb_SetupPathMovement = 0x809A50C8; // type:func
+EnNb_SetTextIdAsChild = 0x809A5130; // type:func
+func_80AB3A7C = 0x809A529C; // type:func
+func_80AB3B04 = 0x809A5328; // type:func
+func_80AB3B7C = 0x809A53B0; // type:func
+EnNb_WaitForNotice = 0x809A53FC; // type:func
+EnNb_StandUpAfterNotice = 0x809A5458; // type:func
+EnNb_BlockCrawlspace = 0x809A54B8; // type:func
+EnNb_InitCrawlspaceDialogue = 0x809A5520; // type:func
+EnNb_FollowPath = 0x809A5588; // type:func
+func_80AB3DB0 = 0x809A5608; // type:func
+func_80AB3E10 = 0x809A5670; // type:func
+EnNb_Update = 0x809A56D8; // type:func
+EnNb_Init = 0x809A5720; // type:func
+EnNb_OverrideLimbDraw = 0x809A583C; // type:func
+EnNb_PostLimbDraw = 0x809A58CC; // type:func
+EnNb_DrawNothing = 0x809A5958; // type:func
+EnNb_DrawDefault = 0x809A5968; // type:func
+EnNb_Draw = 0x809A5AAC; // type:func
+BossMo_InitRand = 0x809A6C80; // type:func
+BossMo_RandZeroOne = 0x809A6CA0; // type:func
+BossMo_NearLand = 0x809A6DC8; // type:func
+BossMo_SpawnRipple = 0x809A6EC0; // type:func
+BossMo_SpawnDroplet = 0x809A6FE0; // type:func
+BossMo_SpawnStillDroplet = 0x809A70BC; // type:func
+BossMo_SpawnBubble = 0x809A7180; // type:func
+BossMo_Init = 0x809A7234; // type:func
+BossMo_Destroy = 0x809A761C; // type:func
+BossMo_SetupTentacle = 0x809A766C; // type:func
+BossMo_Tentacle = 0x809A76C0; // type:func
+BossMo_TentCollisionCheck = 0x809AA480; // type:func
+BossMo_IntroCs = 0x809AA72C; // type:func
+BossMo_DeathCs = 0x809AB844; // type:func
+BossMo_CoreCollisionCheck = 0x809AC400; // type:func
+BossMo_Core = 0x809AC808; // type:func
+BossMo_UpdateCore = 0x809ADE6C; // type:func
+BossMo_UpdateTent = 0x809AE09C; // type:func
+BossMo_UpdateTentColliders = 0x809AE8D4; // type:func
+BossMo_DrawTentacle = 0x809AE980; // type:func
+BossMo_DrawWater = 0x809AF0B0; // type:func
+BossMo_DrawCore = 0x809AF2C0; // type:func
+BossMo_DrawTent = 0x809AFB48; // type:func
+BossMo_UpdateEffects = 0x809AFD7C; // type:func
+BossMo_DrawEffects = 0x809B048C; // type:func
+BossMo_SfxTest = 0x809B0BB8; // type:func
+EnSb_Init = 0x809B7260; // type:func
+EnSb_Destroy = 0x809B7348; // type:func
+EnSb_SpawnBubbles = 0x809B7388; // type:func
+EnSb_SetupWaitClosed = 0x809B7438; // type:func
+EnSb_SetupOpen = 0x809B74B0; // type:func
+EnSb_SetupWaitOpen = 0x809B752C; // type:func
+EnSb_SetupLunge = 0x809B75A0; // type:func
+EnSb_SetupBounce = 0x809B7648; // type:func
+EnSb_SetupCooldown = 0x809B76C0; // type:func
+EnSb_WaitClosed = 0x809B77C4; // type:func
+EnSb_Open = 0x809B7844; // type:func
+EnSb_WaitOpen = 0x809B790C; // type:func
+EnSb_TurnAround = 0x809B79C0; // type:func
+EnSb_Lunge = 0x809B7AAC; // type:func
+EnSb_Bounce = 0x809B7B54; // type:func
+EnSb_Cooldown = 0x809B7C88; // type:func
+EnSb_IsVulnerable = 0x809B7CF0; // type:func
+EnSb_UpdateDamage = 0x809B7E38; // type:func
+EnSb_Update = 0x809B8114; // type:func
+EnSb_PostLimbDraw = 0x809B8294; // type:func
+EnSb_Draw = 0x809B82E4; // type:func
+EnBigokuta_Init = 0x809B86A0; // type:func
+EnBigokuta_Destroy = 0x809B880C; // type:func
+func_809BCE3C = 0x809B8880; // type:func
+func_809BCEBC = 0x809B88FC; // type:func
+func_809BCF68 = 0x809B89AC; // type:func
+func_809BD1C8 = 0x809B8C14; // type:func
+func_809BD2E4 = 0x809B8D30; // type:func
+func_809BD318 = 0x809B8D64; // type:func
+func_809BD370 = 0x809B8DBC; // type:func
+func_809BD3AC = 0x809B8DF8; // type:func
+func_809BD3E0 = 0x809B8E30; // type:func
+func_809BD3F8 = 0x809B8E4C; // type:func
+func_809BD47C = 0x809B8ED0; // type:func
+func_809BD4A4 = 0x809B8EFC; // type:func
+func_809BD524 = 0x809B8F7C; // type:func
+func_809BD5E0 = 0x809B9038; // type:func
+func_809BD658 = 0x809B90B0; // type:func
+func_809BD6B8 = 0x809B9110; // type:func
+func_809BD768 = 0x809B91C0; // type:func
+func_809BD7F0 = 0x809B9248; // type:func
+func_809BD84C = 0x809B92A8; // type:func
+func_809BD8DC = 0x809B9338; // type:func
+func_809BDAE8 = 0x809B9544; // type:func
+func_809BDB90 = 0x809B95EC; // type:func
+func_809BDC08 = 0x809B9664; // type:func
+func_809BDF34 = 0x809B9994; // type:func
+func_809BDFC8 = 0x809B9A28; // type:func
+func_809BE058 = 0x809B9AB8; // type:func
+func_809BE180 = 0x809B9BE0; // type:func
+func_809BE26C = 0x809B9CCC; // type:func
+func_809BE3E4 = 0x809B9E44; // type:func
+func_809BE4A4 = 0x809B9F04; // type:func
+func_809BE518 = 0x809B9F78; // type:func
+func_809BE568 = 0x809B9FC8; // type:func
+func_809BE798 = 0x809BA1F8; // type:func
+EnBigokuta_UpdateDamage = 0x809BA33C; // type:func
+EnBigokuta_Update = 0x809BA42C; // type:func
+EnBigokuta_OverrideLimbDraw = 0x809BA624; // type:func
+EnBigokuta_Draw = 0x809BAA9C; // type:func
+EnKarebaba_Init = 0x809BB1A0; // type:func
+EnKarebaba_Destroy = 0x809BB2D4; // type:func
+EnKarebaba_ResetCollider = 0x809BB314; // type:func
+EnKarebaba_SetupGrow = 0x809BB350; // type:func
+EnKarebaba_SetupIdle = 0x809BB3A0; // type:func
+EnKarebaba_SetupAwaken = 0x809BB3F4; // type:func
+EnKarebaba_SetupUpright = 0x809BB470; // type:func
+EnKarebaba_SetupSpin = 0x809BB510; // type:func
+EnKarebaba_SetupDying = 0x809BB52C; // type:func
+EnKarebaba_SetupDeadItemDrop = 0x809BB5A0; // type:func
+EnKarebaba_SetupRetract = 0x809BB640; // type:func
+EnKarebaba_SetupDead = 0x809BB6C0; // type:func
+EnKarebaba_SetupRegrow = 0x809BB74C; // type:func
+EnKarebaba_Grow = 0x809BB7A0; // type:func
+EnKarebaba_Idle = 0x809BB838; // type:func
+EnKarebaba_Awaken = 0x809BB898; // type:func
+EnKarebaba_Upright = 0x809BB96C; // type:func
+EnKarebaba_Spin = 0x809BBA60; // type:func
+EnKarebaba_Dying = 0x809BBBF4; // type:func
+EnKarebaba_DeadItemDrop = 0x809BBEAC; // type:func
+EnKarebaba_Retract = 0x809BBF14; // type:func
+EnKarebaba_Dead = 0x809BBFE8; // type:func
+EnKarebaba_Regrow = 0x809BC040; // type:func
+EnKarebaba_Update = 0x809BC10C; // type:func
+EnKarebaba_DrawBaseShadow = 0x809BC2C0; // type:func
+EnKarebaba_Draw = 0x809BC3AC; // type:func
+BgBdanObjects_GetProperty = 0x809BCA90; // type:func
+BgBdanObjects_SetProperty = 0x809BCAE4; // type:func
+BgBdanObjects_Init = 0x809BCB38; // type:func
+BgBdanObjects_Destroy = 0x809BCDBC; // type:func
+BgBdanObjects_OctoPlatform_WaitForRutoToStartCutscene = 0x809BCE0C; // type:func
+BgBdanObjects_OctoPlatform_RaiseToUpperPosition = 0x809BCF60; // type:func
+BgBdanObjects_OctoPlatform_WaitForRutoToAdvanceCutscene = 0x809BD05C; // type:func
+BgBdanObjects_OctoPlatform_DescendWithBigOcto = 0x809BD198; // type:func
+BgBdanObjects_OctoPlatform_PauseBeforeDescending = 0x809BD31C; // type:func
+BgBdanObjects_OctoPlatform_WaitForBigOctoToStartBattle = 0x809BD380; // type:func
+BgBdanObjects_OctoPlatform_BattleInProgress = 0x809BD3DC; // type:func
+BgBdanObjects_SinkToFloorHeight = 0x809BD4B4; // type:func
+BgBdanObjects_WaitForPlayerInRange = 0x809BD534; // type:func
+BgBdanObjects_RaiseToUpperPosition = 0x809BD5A0; // type:func
+BgBdanObjects_DoNothing = 0x809BD638; // type:func
+BgBdanObjects_ElevatorOscillate = 0x809BD648; // type:func
+BgBdanObjects_WaitForSwitch = 0x809BD77C; // type:func
+BgBdanObjects_ChangeWaterBoxLevel = 0x809BD7C8; // type:func
+BgBdanObjects_WaitForTimerExpired = 0x809BD890; // type:func
+BgBdanObjects_WaitForPlayerOnTop = 0x809BD8E4; // type:func
+BgBdanObjects_FallToLowerPos = 0x809BD968; // type:func
+BgBdanObjects_Update = 0x809BDA24; // type:func
+BgBdanObjects_Draw = 0x809BDA60; // type:func
+DemoSa_Destroy = 0x809BDD60; // type:func
+func_8098E480 = 0x809BDD84; // type:func
+DemoSa_SetEyeIndex = 0x809BDE0C; // type:func
+DemoSa_SetMouthIndex = 0x809BDE24; // type:func
+func_8098E5C8 = 0x809BDE3C; // type:func
+DemoSa_UpdateSkelAnime = 0x809BDE84; // type:func
+DemoSa_GetCue = 0x809BDEA8; // type:func
+func_8098E654 = 0x809BDED0; // type:func
+func_8098E6A0 = 0x809BDF1C; // type:func
+func_8098E6EC = 0x809BDF68; // type:func
+func_8098E76C = 0x809BDFE8; // type:func
+func_8098E7FC = 0x809BE078; // type:func
+func_8098E86C = 0x809BE0E8; // type:func
+func_8098E8C8 = 0x809BE144; // type:func
+func_8098E944 = 0x809BE1C0; // type:func
+func_8098E960 = 0x809BE1E0; // type:func
+func_8098E9EC = 0x809BE278; // type:func
+func_8098EA3C = 0x809BE2C8; // type:func
+func_8098EA68 = 0x809BE2F4; // type:func
+func_8098EB00 = 0x809BE38C; // type:func
+func_8098EB6C = 0x809BE3F8; // type:func
+func_8098EBB8 = 0x809BE444; // type:func
+func_8098EBD8 = 0x809BE464; // type:func
+func_8098EBF8 = 0x809BE484; // type:func
+func_8098EC28 = 0x809BE4B8; // type:func
+func_8098EC60 = 0x809BE4F8; // type:func
+func_8098EC94 = 0x809BE530; // type:func
+func_8098ECCC = 0x809BE570; // type:func
+func_8098ECF4 = 0x809BE59C; // type:func
+func_8098EDB0 = 0x809BE658; // type:func
+func_8098EE08 = 0x809BE6B0; // type:func
+func_8098EE28 = 0x809BE6D0; // type:func
+func_8098EEA8 = 0x809BE750; // type:func
+func_8098EEFC = 0x809BE7A4; // type:func
+func_8098F050 = 0x809BE8F8; // type:func
+func_8098F0E8 = 0x809BE994; // type:func
+func_8098F118 = 0x809BE9B4; // type:func
+func_8098F16C = 0x809BE9FC; // type:func
+DemoSa_DrawXlu = 0x809BEA44; // type:func
+func_8098F390 = 0x809BEBE4; // type:func
+func_8098F3F0 = 0x809BEC44; // type:func
+func_8098F420 = 0x809BEC78; // type:func
+func_8098F480 = 0x809BECD4; // type:func
+func_8098F50C = 0x809BED60; // type:func
+func_8098F544 = 0x809BED98; // type:func
+func_8098F590 = 0x809BEDE4; // type:func
+func_8098F5D0 = 0x809BEE24; // type:func
+func_8098F610 = 0x809BEE64; // type:func
+func_8098F654 = 0x809BEEAC; // type:func
+func_8098F714 = 0x809BEF58; // type:func
+func_8098F734 = 0x809BEF78; // type:func
+func_8098F77C = 0x809BEFC4; // type:func
+func_8098F7BC = 0x809BF00C; // type:func
+func_8098F7FC = 0x809BF054; // type:func
+func_8098F83C = 0x809BF098; // type:func
+func_8098F8F8 = 0x809BF154; // type:func
+func_8098F984 = 0x809BF1E0; // type:func
+func_8098F998 = 0x809BF1F8; // type:func
+func_8098FA2C = 0x809BF28C; // type:func
+func_8098FA84 = 0x809BF2E4; // type:func
+func_8098FAE0 = 0x809BF340; // type:func
+func_8098FB34 = 0x809BF394; // type:func
+func_8098FB68 = 0x809BF3C8; // type:func
+func_8098FC44 = 0x809BF490; // type:func
+func_8098FC64 = 0x809BF4B0; // type:func
+func_8098FC9C = 0x809BF4EC; // type:func
+func_8098FCD4 = 0x809BF52C; // type:func
+func_8098FD0C = 0x809BF56C; // type:func
+DemoSa_Update = 0x809BF5B8; // type:func
+DemoSa_Init = 0x809BF600; // type:func
+DemoSa_OverrideLimbDraw = 0x809BF6C8; // type:func
+DemoSa_DrawNothing = 0x809BF700; // type:func
+DemoSa_DrawOpa = 0x809BF710; // type:func
+DemoSa_Draw = 0x809BF8A4; // type:func
+DemoGo_GetCueChannel = 0x809C0880; // type:func
+func_8097C8A8 = 0x809C08BC; // type:func
+DemoGo_Destroy = 0x809C0928; // type:func
+func_8097C930 = 0x809C094C; // type:func
+func_8097C9B8 = 0x809C09D4; // type:func
+func_8097C9DC = 0x809C09FC; // type:func
+func_8097CA30 = 0x809C0A54; // type:func
+func_8097CA78 = 0x809C0A9C; // type:func
+func_8097CB0C = 0x809C0B34; // type:func
+func_8097CC08 = 0x809C0C34; // type:func
+func_8097CCC0 = 0x809C0CEC; // type:func
+func_8097CCE0 = 0x809C0D0C; // type:func
+DemoGo_UpdateSkelAnime = 0x809C0DC4; // type:func
+func_8097CDB0 = 0x809C0DE8; // type:func
+func_8097CE10 = 0x809C0E54; // type:func
+func_8097CE20 = 0x809C0E68; // type:func
+func_8097CE78 = 0x809C0EC4; // type:func
+func_8097CEEC = 0x809C0F3C; // type:func
+func_8097CF20 = 0x809C0F74; // type:func
+func_8097CF9C = 0x809C0FF0; // type:func
+func_8097CFDC = 0x809C1030; // type:func
+func_8097CFFC = 0x809C1050; // type:func
+func_8097D01C = 0x809C1070; // type:func
+func_8097D058 = 0x809C10B4; // type:func
+func_8097D088 = 0x809C10EC; // type:func
+func_8097D0D0 = 0x809C113C; // type:func
+func_8097D130 = 0x809C11A4; // type:func
+DemoGo_Update = 0x809C1204; // type:func
+DemoGo_Init = 0x809C124C; // type:func
+func_8097D290 = 0x809C12F8; // type:func
+func_8097D29C = 0x809C1308; // type:func
+DemoGo_Draw = 0x809C1418; // type:func
+EnIn_GetTextIdChild = 0x809C15D0; // type:func
+EnIn_GetTextIdAdult = 0x809C1630; // type:func
+EnIn_GetTextId = 0x809C1788; // type:func
+EnIn_UpdateTalkStateOnClosing = 0x809C17EC; // type:func
+EnIn_UpdateTalkStateOnChoice = 0x809C1860; // type:func
+EnIn_UpdateTalkStateOnEvent = 0x809C1AB0; // type:func
+EnIn_UpdateTalkState = 0x809C1B1C; // type:func
+func_80A795C8 = 0x809C1BE4; // type:func
+func_80A79690 = 0x809C1CAC; // type:func
+EnIn_ChangeAnim = 0x809C1D08; // type:func
+func_80A7975C = 0x809C1D78; // type:func
+EnIn_GetStartMode = 0x809C1E4C; // type:func
+EnIn_UpdateEyes = 0x809C2048; // type:func
+func_80A79AB4 = 0x809C20D0; // type:func
+func_80A79BAC = 0x809C21C8; // type:func
+func_80A79C78 = 0x809C2294; // type:func
+EnIn_Init = 0x809C2488; // type:func
+EnIn_Destroy = 0x809C2594; // type:func
+EnIn_WaitForObject = 0x809C25D8; // type:func
+func_80A7A304 = 0x809C2930; // type:func
+func_80A7A4BC = 0x809C2AE8; // type:func
+func_80A7A4C8 = 0x809C2AF8; // type:func
+func_80A7A568 = 0x809C2B9C; // type:func
+func_80A7A770 = 0x809C2DA4; // type:func
+func_80A7A848 = 0x809C2E7C; // type:func
+func_80A7A940 = 0x809C2F74; // type:func
+func_80A7AA40 = 0x809C3074; // type:func
+func_80A7ABD4 = 0x809C3208; // type:func
+func_80A7AE84 = 0x809C34BC; // type:func
+func_80A7AEF0 = 0x809C3528; // type:func
+func_80A7B018 = 0x809C3654; // type:func
+func_80A7B024 = 0x809C3664; // type:func
+EnIn_Update = 0x809C3750; // type:func
+EnIn_OverrideLimbDraw = 0x809C3964; // type:func
+EnIn_PostLimbDraw = 0x809C3BB8; // type:func
+EnIn_Draw = 0x809C3CC8; // type:func
+EnTr_SetupAction = 0x809C4370; // type:func
+EnTr_Init = 0x809C437C; // type:func
+EnTr_Destroy = 0x809C44CC; // type:func
+EnTr_CrySpellcast = 0x809C44DC; // type:func
+EnTr_DoNothing = 0x809C458C; // type:func
+EnTr_ChooseAction2 = 0x809C459C; // type:func
+EnTr_FlyKidnapCutscene = 0x809C474C; // type:func
+func_80B23254 = 0x809C48C8; // type:func
+EnTr_ShrinkVanish = 0x809C4B48; // type:func
+EnTr_Reappear = 0x809C4D04; // type:func
+EnTr_WaitToReappear = 0x809C4E9C; // type:func
+EnTr_TakeOff = 0x809C4F5C; // type:func
+EnTr_TurnLookOverShoulder = 0x809C5024; // type:func
+EnTr_ChooseAction1 = 0x809C5104; // type:func
+EnTr_Update = 0x809C5238; // type:func
+EnTr_OverrideLimbDraw = 0x809C53F0; // type:func
+EnTr_Draw = 0x809C5520; // type:func
+func_80B23FDC = 0x809C562C; // type:func
+func_80B24038 = 0x809C568C; // type:func
+EnTr_SetRotFromCue = 0x809C5888; // type:func
+EnTr_SetStartPosRotFromCue = 0x809C5910; // type:func
+func_808B4C30 = 0x809C5C70; // type:func
+func_808B4C4C = 0x809C5C90; // type:func
+func_808B4D04 = 0x809C5D44; // type:func
+func_808B4D9C = 0x809C5DD8; // type:func
+func_808B4E58 = 0x809C5E88; // type:func
+BgSpot16Bombstone_Init = 0x809C6084; // type:func
+BgSpot16Bombstone_Destroy = 0x809C6138; // type:func
+BgSpot16Bombstone_SpawnDust = 0x809C6184; // type:func
+func_808B5240 = 0x809C6220; // type:func
+BgSpot16Bombstone_SpawnFragments = 0x809C6388; // type:func
+func_808B561C = 0x809C6600; // type:func
+func_808B56BC = 0x809C66A0; // type:func
+func_808B57E0 = 0x809C679C; // type:func
+func_808B5934 = 0x809C68F4; // type:func
+func_808B5950 = 0x809C6914; // type:func
+func_808B5A78 = 0x809C6A00; // type:func
+func_808B5A94 = 0x809C6A20; // type:func
+func_808B5AF0 = 0x809C6A84; // type:func
+func_808B5B04 = 0x809C6A9C; // type:func
+func_808B5B58 = 0x809C6AF4; // type:func
+func_808B5B6C = 0x809C6B0C; // type:func
+BgSpot16Bombstone_Update = 0x809C6C08; // type:func
+BgSpot16Bombstone_Draw = 0x809C6C3C; // type:func
+BgHidanKowarerukabe_InitDynaPoly = 0x809C71C0; // type:func
+BgHidanKowarerukabe_InitColliderSphere = 0x809C725C; // type:func
+BgHidanKowarerukabe_OffsetActorYPos = 0x809C72F0; // type:func
+BgHidanKowarerukabe_Init = 0x809C731C; // type:func
+BgHidanKowarerukabe_Destroy = 0x809C73CC; // type:func
+BgHidanKowarerukabe_SpawnDust = 0x809C7414; // type:func
+BgHidanKowarerukabe_FloorBreak = 0x809C7538; // type:func
+func_8088A67C = 0x809C7804; // type:func
+BgHidanKowarerukabe_LargeWallBreak = 0x809C7A9C; // type:func
+BgHidanKowarerukabe_Break = 0x809C7D28; // type:func
+BgHidanKowarerukabe_Update = 0x809C7DB8; // type:func
+BgHidanKowarerukabe_Draw = 0x809C7E88; // type:func
+BgBombwall_InitDynapoly = 0x809C80A0; // type:func
+BgBombwall_RotateVec = 0x809C80F8; // type:func
+BgBombwall_Init = 0x809C814C; // type:func
+BgBombwall_DestroyCollision = 0x809C835C; // type:func
+BgBombwall_Destroy = 0x809C83D8; // type:func
+func_8086EB5C = 0x809C83F8; // type:func
+func_8086ED50 = 0x809C85EC; // type:func
+func_8086ED70 = 0x809C8610; // type:func
+func_8086EDFC = 0x809C86A0; // type:func
+func_8086EE40 = 0x809C86E4; // type:func
+func_8086EE94 = 0x809C8738; // type:func
+BgBombwall_Update = 0x809C8768; // type:func
+BgBombwall_Draw = 0x809C8794; // type:func
+EnRu2_InitCollider = 0x809C8960; // type:func
+EnRu2_UpdateCollider = 0x809C89AC; // type:func
+EnRu2_Destroy = 0x809C89F0; // type:func
+EnRu2_UpdateEyes = 0x809C8A1C; // type:func
+EnRu2_GetSwitchFlag = 0x809C8AA4; // type:func
+EnRu2_GetType = 0x809C8AB8; // type:func
+EnRu2_UpdateBgCheckInfo = 0x809C8AC8; // type:func
+EnRu2_UpdateSkelAnime = 0x809C8B10; // type:func
+EnRu2_GetCue = 0x809C8B34; // type:func
+EnRu2_CheckCueMatchingId = 0x809C8B5C; // type:func
+EnRu2_CheckCueNotMatchingId = 0x809C8BA8; // type:func
+EnRu2_InitPositionFromCue = 0x809C8BF4; // type:func
+EnRu2_AnimationChange = 0x809C8C74; // type:func
+EnRu2_Rise = 0x809C8D04; // type:func
+EnRu2_InitChamberOfSages = 0x809C8D24; // type:func
+EnRu2_SpawnBlueWarp = 0x809C8D6C; // type:func
+EnRu2_SpawnWaterMedallion = 0x809C8DC8; // type:func
+EnRu2_CheckWaterMedallionCutscene = 0x809C8E44; // type:func
+EnRu2_CheckIfBlueWarpShouldSpawn = 0x809C8EE0; // type:func
+EnRu2_EndRise = 0x809C8F30; // type:func
+EnRu2_CheckStartRaisingArms = 0x809C8F5C; // type:func
+EnRu2_HoldArmsUp = 0x809C8FF0; // type:func
+EnRu2_CheckIfWaterMedallionShouldSpawn = 0x809C9004; // type:func
+EnRu2_SetupWaterMedallionCutscene = 0x809C9050; // type:func
+EnRu2_AwaitBlueWarp = 0x809C9070; // type:func
+EnRu2_RiseThroughBlueWarp = 0x809C9090; // type:func
+EnRu2_SageOfWaterDialog = 0x809C90CC; // type:func
+EnRu2_RaiseArms = 0x809C9114; // type:func
+EnRu2_AwaitWaterMedallion = 0x809C9158; // type:func
+EnRu2_FinishWaterMedallionCutscene = 0x809C91A0; // type:func
+EnRu2_InitWaterTrial = 0x809C91D4; // type:func
+EnRu2_PlayWhiteOutSound = 0x809C9218; // type:func
+EnRu2_SpawnLightBall = 0x809C9238; // type:func
+EnRu2_CheckFadeIn = 0x809C92B8; // type:func
+EnRu2_Fade = 0x809C930C; // type:func
+EnRu2_CheckFadeOut = 0x809C9460; // type:func
+EnRu2_WaterTrialInvisible = 0x809C94FC; // type:func
+EnRu2_WaterTrialFade = 0x809C951C; // type:func
+EnRu2_AwaitSpawnLightBall = 0x809C9564; // type:func
+EnRu2_DrawXlu = 0x809C95AC; // type:func
+EnRu2_InitCredits = 0x809C96F4; // type:func
+EnRu2_FadeInCredits = 0x809C973C; // type:func
+EnRu2_InitCreditsPosition = 0x809C97C8; // type:func
+EnRu2_CheckVisibleInCredits = 0x809C9800; // type:func
+EnRu2_SetupTurnHeadDownLeftAnimation = 0x809C984C; // type:func
+EnRu2_HoldLookingDownLeftPose = 0x809C988C; // type:func
+EnRu2_NextCreditsAction = 0x809C98C0; // type:func
+EnRu2_CreditsInvisible = 0x809C994C; // type:func
+EnRu2_CreditsFadeIn = 0x809C996C; // type:func
+EnRu2_CreditsVisible = 0x809C99B8; // type:func
+EnRu2_CreditsTurnHeadDownLeft = 0x809C9A00; // type:func
+EnRu2_SetEncounterSwitchFlag = 0x809C9A44; // type:func
+EnRu2_GetEncounterSwitchFlag = 0x809C9A74; // type:func
+EnRu2_InitWaterTempleEncounter = 0x809C9AA4; // type:func
+EnRu2_PlayFanfare = 0x809C9B0C; // type:func
+EnRu2_SwimUpProgress = 0x809C9B2C; // type:func
+EnRu2_IsPlayerInRangeForEncounter = 0x809C9B98; // type:func
+EnRu2_CheckRangeToStartEncounter = 0x809C9BD4; // type:func
+EnRu2_StartEncounter = 0x809C9C34; // type:func
+EnRu2_EncounterBeginningHandler = 0x809C9C70; // type:func
+EnRu2_DialogCameraHandler = 0x809C9D40; // type:func
+EnRu2_StartSwimmingUp = 0x809C9E2C; // type:func
+EnRu2_EndSwimmingUp = 0x809C9EC4; // type:func
+EnRu2_WaterTempleEncounterRangeCheck = 0x809C9F18; // type:func
+EnRu2_WaterTempleEncounterUnconditional = 0x809C9F5C; // type:func
+EnRu2_WaterTempleEncounterBegin = 0x809C9FC4; // type:func
+EnRu2_WaterTempleEncounterDialog = 0x809CA020; // type:func
+EnRu2_WaterTempleEncounterEnd = 0x809CA07C; // type:func
+EnRu2_WaterTempleSwimmingUp = 0x809CA0D8; // type:func
+EnRu2_Update = 0x809CA13C; // type:func
+EnRu2_Init = 0x809CA184; // type:func
+EnRu2_DrawNothing = 0x809CA27C; // type:func
+EnRu2_DrawOpa = 0x809CA28C; // type:func
+EnRu2_Draw = 0x809CA3C0; // type:func
+ObjDekujr_Init = 0x809CB6E0; // type:func
+ObjDekujr_Destroy = 0x809CB7EC; // type:func
+ObjDekujr_GetCueStartPos = 0x809CB7FC; // type:func
+ObjDekujr_GetCueEndPos = 0x809CB840; // type:func
+ObjDekujr_ComeUp = 0x809CB884; // type:func
+ObjDekujr_Update = 0x809CBA34; // type:func
+ObjDekujr_Draw = 0x809CBB24; // type:func
+BgMizuUzu_Init = 0x809CBD20; // type:func
+BgMizuUzu_Destroy = 0x809CBD9C; // type:func
+func_8089F788 = 0x809CBDD0; // type:func
+BgMizuUzu_Update = 0x809CBE48; // type:func
+BgMizuUzu_Draw = 0x809CBE6C; // type:func
+BgSpot06Objects_Init = 0x809CBEF0; // type:func
+BgSpot06Objects_Destroy = 0x809CC2BC; // type:func
+BgSpot06Objects_GateSpawnBubbles = 0x809CC324; // type:func
+BgSpot06Objects_GateWaitForSwitch = 0x809CC41C; // type:func
+BgSpot06Objects_GateWaitToOpen = 0x809CC4B0; // type:func
+BgSpot06Objects_GateOpen = 0x809CC4E4; // type:func
+BgSpot06Objects_DoNothing = 0x809CC570; // type:func
+BgSpot06Objects_LockSpawnWaterRipples = 0x809CC580; // type:func
+BgSpot06Objects_LockSpawnBubbles = 0x809CC5E4; // type:func
+BgSpot06Objects_LockWait = 0x809CC678; // type:func
+BgSpot06Objects_LockPullOutward = 0x809CC89C; // type:func
+BgSpot06Objects_LockSwimToSurface = 0x809CC954; // type:func
+BgSpot06Objects_LockFloat = 0x809CCBCC; // type:func
+BgSpot06Objects_Update = 0x809CCC4C; // type:func
+BgSpot06Objects_DrawLakeHyliaWater = 0x809CCCAC; // type:func
+BgSpot06Objects_Draw = 0x809CCE94; // type:func
+BgSpot06Objects_WaterPlaneCutsceneWait = 0x809CCF58; // type:func
+BgSpot06Objects_WaterPlaneCutsceneRise = 0x809CCF84; // type:func
+BgIceObjects_Init = 0x809CD2F0; // type:func
+BgIceObjects_Destroy = 0x809CD37C; // type:func
+BgIceObjects_SetNextTarget = 0x809CD3B0; // type:func
+BgIceObjects_CheckPits = 0x809CD830; // type:func
+BgIceObjects_Idle = 0x809CD9B8; // type:func
+BgIceObjects_Slide = 0x809CDABC; // type:func
+BgIceObjects_Reset = 0x809CDE4C; // type:func
+BgIceObjects_Stuck = 0x809CDEE8; // type:func
+BgIceObjects_Update = 0x809CDF24; // type:func
+BgIceObjects_Draw = 0x809CDF48; // type:func
+BgHakaWater_Init = 0x809CE230; // type:func
+BgHakaWater_Destroy = 0x809CE2BC; // type:func
+BgHakaWater_LowerWater = 0x809CE2CC; // type:func
+BgHakaWater_Wait = 0x809CE414; // type:func
+BgHakaWater_ChangeWaterLevel = 0x809CE4D0; // type:func
+BgHakaWater_Update = 0x809CE5D8; // type:func
+BgHakaWater_Draw = 0x809CE5FC; // type:func
+EnMa2_GetTextId = 0x809CEA30; // type:func
+EnMa2_UpdateTalkState = 0x809CEAC8; // type:func
+func_80AA1AE4 = 0x809CEB78; // type:func
+func_80AA1B58 = 0x809CEBEC; // type:func
+func_80AA1C68 = 0x809CECFC; // type:func
+EnMa2_UpdateEyes = 0x809CED54; // type:func
+EnMa2_ChangeAnim = 0x809CEDE0; // type:func
+func_80AA1DB4 = 0x809CEE50; // type:func
+EnMa2_Init = 0x809CEEDC; // type:func
+EnMa2_Destroy = 0x809CF080; // type:func
+func_80AA2018 = 0x809CF0C0; // type:func
+func_80AA204C = 0x809CF0F4; // type:func
+func_80AA20E4 = 0x809CF190; // type:func
+func_80AA21C8 = 0x809CF27C; // type:func
+EnMa2_Update = 0x809CF31C; // type:func
+EnMa2_OverrideLimbDraw = 0x809CF40C; // type:func
+EnMa2_PostLimbDraw = 0x809CF64C; // type:func
+EnMa2_Draw = 0x809CF700; // type:func
+EnBomChu_Init = 0x809CFA90; // type:func
+EnBomChu_Destroy = 0x809CFC30; // type:func
+EnBomChu_Explode = 0x809CFC80; // type:func
+EnBomChu_CrossProduct = 0x809CFDA0; // type:func
+EnBomChu_UpdateFloorPoly = 0x809CFE14; // type:func
+EnBomChu_WaitForRelease = 0x809D0048; // type:func
+EnBomChu_Move = 0x809D01B8; // type:func
+EnBomChu_WaitForKill = 0x809D06D0; // type:func
+EnBomChu_ModelToWorld = 0x809D0710; // type:func
+EnBomChu_SpawnRipples = 0x809D07C0; // type:func
+EnBomChu_Update = 0x809D084C; // type:func
+EnBomChu_Draw = 0x809D0C10; // type:func
+EnHorseGameCheck_InitIngoRace = 0x809D1130; // type:func
+EnHorseGameCheck_DestroyIngoRace = 0x809D11EC; // type:func
+EnHorseGameCheck_FinishIngoRace = 0x809D1200; // type:func
+EnHorseGameCheck_UpdateIngoRace = 0x809D134C; // type:func
+EnHorseGameCheck_InitGerudoArchery = 0x809D17C4; // type:func
+EnHorseGameCheck_DestroyGerudoArchery = 0x809D17E4; // type:func
+EnHorseGameCheck_UpdateGerudoArchery = 0x809D17F8; // type:func
+EnHorseGameCheck_InitType3 = 0x809D1840; // type:func
+EnHorseGameCheck_DestroyType3 = 0x809D185C; // type:func
+EnHorseGameCheck_UpdateType3 = 0x809D1870; // type:func
+EnHorseGameCheck_InitMalonRace = 0x809D1884; // type:func
+EnHorseGameCheck_DestroyMalonRace = 0x809D18D4; // type:func
+EnHorseGameCheck_FinishMalonRace = 0x809D18E8; // type:func
+EnHorseGameCheck_UpdateMalonRace = 0x809D19DC; // type:func
+EnHorseGameCheck_Init = 0x809D1EF4; // type:func
+EnHorseGameCheck_Destroy = 0x809D1F78; // type:func
+EnHorseGameCheck_Update = 0x809D1FB4; // type:func
+EnHorseGameCheck_Draw = 0x809D1FF0; // type:func
+BossTw_AddDotEffect = 0x809D2200; // type:func
+BossTw_AddDmgCloud = 0x809D22F4; // type:func
+BossTw_AddRingEffect = 0x809D23F0; // type:func
+BossTw_AddPlayerFreezeEffect = 0x809D24F4; // type:func
+BossTw_AddFlameEffect = 0x809D25A0; // type:func
+BossTw_AddMergeFlameEffect = 0x809D2678; // type:func
+BossTw_AddShieldBlastEffect = 0x809D2780; // type:func
+BossTw_AddShieldDeflectEffect = 0x809D2868; // type:func
+BossTw_AddShieldHitEffect = 0x809D2A30; // type:func
+BossTw_Init = 0x809D2BF8; // type:func
+BossTw_Destroy = 0x809D3414; // type:func
+BossTw_SetupTurnToPlayer = 0x809D347C; // type:func
+BossTw_TurnToPlayer = 0x809D34CC; // type:func
+BossTw_SetupFlyTo = 0x809D35EC; // type:func
+BossTw_FlyTo = 0x809D37F0; // type:func
+BossTw_SetupShootBeam = 0x809D3A24; // type:func
+BossTw_SpawnGroundBlast = 0x809D3B0C; // type:func
+BossTw_BeamHitPlayerCheck = 0x809D3E88; // type:func
+BossTw_CheckBeamReflection = 0x809D4080; // type:func
+BossTw_BeamReflHitCheck = 0x809D4308; // type:func
+BossTw_GetFloorY = 0x809D4430; // type:func
+BossTw_ShootBeam = 0x809D4704; // type:func
+BossTw_SetupFinishBeamShoot = 0x809D56BC; // type:func
+BossTw_FinishBeamShoot = 0x809D5718; // type:func
+BossTw_SetupHitByBeam = 0x809D57B0; // type:func
+BossTw_HitByBeam = 0x809D5818; // type:func
+BossTw_SetupLaugh = 0x809D5AE0; // type:func
+BossTw_Laugh = 0x809D5B44; // type:func
+BossTw_SetupSpin = 0x809D5BD4; // type:func
+BossTw_Spin = 0x809D5C50; // type:func
+BossTw_SetupMergeCS = 0x809D5CF0; // type:func
+BossTw_MergeCS = 0x809D5D3C; // type:func
+BossTw_SetupWait = 0x809D5D80; // type:func
+BossTw_Wait = 0x809D5DB8; // type:func
+BossTw_TwinrovaSetupMergeCS = 0x809D5E5C; // type:func
+BossTw_TwinrovaMergeCS = 0x809D5E7C; // type:func
+BossTw_SetupDeathCS = 0x809D6948; // type:func
+BossTw_DeathCS = 0x809D69B0; // type:func
+BossTw_SetupCSWait = 0x809D6AB8; // type:func
+BossTw_CSWait = 0x809D6AF0; // type:func
+BossTw_TwinrovaSetupIntroCS = 0x809D6B00; // type:func
+BossTw_TwinrovaIntroCS = 0x809D6B38; // type:func
+BossTw_DeathBall = 0x809D838C; // type:func
+BossTw_TwinrovaSetupDeathCS = 0x809D8688; // type:func
+BossTw_DeathCSMsgSfx = 0x809D8744; // type:func
+BossTw_TwinrovaDeathCS = 0x809D8F64; // type:func
+BossTw_Update = 0x809D9C58; // type:func
+BossTw_TwinrovaUpdate = 0x809DA2CC; // type:func
+BossTw_OverrideLimbDraw = 0x809DAC48; // type:func
+BossTw_PostLimbDraw = 0x809DACFC; // type:func
+func_80941BC0 = 0x809DB114; // type:func
+func_80942180 = 0x809DB68C; // type:func
+func_809426F0 = 0x809DBBA8; // type:func
+func_80942C70 = 0x809DC0F0; // type:func
+func_80943028 = 0x809DC460; // type:func
+BossTw_Draw = 0x809DC664; // type:func
+BossTw_TwinrovaOverrideLimbDraw = 0x809DCD20; // type:func
+BossTw_TwinrovaPostLimbDraw = 0x809DD14C; // type:func
+BossTw_ShieldChargeDraw = 0x809DD288; // type:func
+BossTw_SpawnPortalDraw = 0x809DDAF0; // type:func
+func_80944C50 = 0x809DDF28; // type:func
+BossTw_TwinrovaDraw = 0x809DE30C; // type:func
+BossTw_BlastFire = 0x809DE644; // type:func
+BossTw_BlastIce = 0x809DEF7C; // type:func
+BossTw_BlastShieldCheck = 0x809DFAF0; // type:func
+BossTw_BlastUpdate = 0x809DFD80; // type:func
+BossTw_BlastDraw = 0x809DFEFC; // type:func
+BossTw_DrawDeathBall = 0x809E0480; // type:func
+BossTw_UpdateEffects = 0x809E09E0; // type:func
+BossTw_InitRand = 0x809E1738; // type:func
+BossTw_RandZeroOne = 0x809E1758; // type:func
+BossTw_DrawEffects = 0x809E1880; // type:func
+BossTw_TwinrovaSetupArriveAtTarget = 0x809E26B4; // type:func
+BossTw_TwinrovaArriveAtTarget = 0x809E2728; // type:func
+BossTw_TwinrovaSetupChargeBlast = 0x809E2854; // type:func
+BossTw_TwinrovaChargeBlast = 0x809E28B4; // type:func
+BossTw_TwinrovaSetupShootBlast = 0x809E2AA0; // type:func
+BossTw_TwinrovaShootBlast = 0x809E2B28; // type:func
+BossTw_TwinrovaSetupDoneBlastShoot = 0x809E2D78; // type:func
+BossTw_TwinrovaDoneBlastShoot = 0x809E2DC4; // type:func
+BossTw_TwinrovaDamage = 0x809E2E5C; // type:func
+BossTw_TwinrovaStun = 0x809E2F88; // type:func
+BossTw_TwinrovaSetupGetUp = 0x809E323C; // type:func
+BossTw_TwinrovaGetUp = 0x809E32A0; // type:func
+BossTw_TwinrovaSetupFly = 0x809E3334; // type:func
+BossTw_TwinrovaFly = 0x809E350C; // type:func
+BossTw_TwinrovaSetupSpin = 0x809E3780; // type:func
+BossTw_TwinrovaSpin = 0x809E37D8; // type:func
+BossTw_TwinrovaSetupLaugh = 0x809E3850; // type:func
+BossTw_TwinrovaLaugh = 0x809E38B4; // type:func
+EnRr_Init = 0x809E7DD0; // type:func
+EnRr_Destroy = 0x809E7F70; // type:func
+EnRr_Move = 0x809E7FB0; // type:func
+EnRr_SetupReach = 0x809E7FD8; // type:func
+EnRr_SetupNeutral = 0x809E80D8; // type:func
+EnRr_SetupGrabPlayer = 0x809E81A4; // type:func
+EnRr_GetMessage = 0x809E82AC; // type:func
+EnRr_SetupReleasePlayer = 0x809E8300; // type:func
+EnRr_SetupDamage = 0x809E84FC; // type:func
+EnRr_SetupApproach = 0x809E85C8; // type:func
+EnRr_SetupDeath = 0x809E8680; // type:func
+EnRr_SetupStunned = 0x809E8720; // type:func
+EnRr_CollisionCheck = 0x809E882C; // type:func
+EnRr_InitBodySegments = 0x809E8BBC; // type:func
+EnRr_UpdateBodySegments = 0x809E8D7C; // type:func
+EnRr_Approach = 0x809E8F00; // type:func
+EnRr_Reach = 0x809E8FC0; // type:func
+EnRr_GrabPlayer = 0x809E90DC; // type:func
+EnRr_Damage = 0x809E91D4; // type:func
+EnRr_Death = 0x809E924C; // type:func
+EnRr_Retreat = 0x809E95C0; // type:func
+EnRr_Stunned = 0x809E9654; // type:func
+EnRr_Update = 0x809E96BC; // type:func
+EnRr_Draw = 0x809E9AE8; // type:func
+EnBa_SetupAction = 0x809EA300; // type:func
+EnBa_Init = 0x809EA30C; // type:func
+EnBa_Destroy = 0x809EA4F8; // type:func
+EnBa_SetupIdle = 0x809EA524; // type:func
+EnBa_Idle = 0x809EA564; // type:func
+EnBa_SetupFallAsBlob = 0x809EA990; // type:func
+EnBa_FallAsBlob = 0x809EAA00; // type:func
+EnBa_SetupSwingAtPlayer = 0x809EAAC0; // type:func
+EnBa_SwingAtPlayer = 0x809EAB14; // type:func
+func_809B7174 = 0x809EB134; // type:func
+EnBa_RecoilFromDamage = 0x809EB1B0; // type:func
+func_809B75A0 = 0x809EB564; // type:func
+EnBa_Die = 0x809EB7E0; // type:func
+EnBa_Update = 0x809EBB10; // type:func
+EnBa_Draw = 0x809EBBF0; // type:func
+EnBx_Init = 0x809EC1D0; // type:func
+EnBx_Destroy = 0x809EC3D8; // type:func
+func_809D1D0C = 0x809EC404; // type:func
+EnBx_Update = 0x809EC4D4; // type:func
+EnBx_Draw = 0x809EC7F8; // type:func
+EnAnubice_Hover = 0x809ECCD0; // type:func
+EnAnubice_AimFireball = 0x809ECD74; // type:func
+EnAnubice_Init = 0x809ECE54; // type:func
+EnAnubice_Destroy = 0x809ECF6C; // type:func
+EnAnubice_FindFlameCircles = 0x809ECFC8; // type:func
+EnAnubice_SetupIdle = 0x809ED050; // type:func
+EnAnubice_Idle = 0x809ED0F8; // type:func
+EnAnubice_GoToHome = 0x809ED1D8; // type:func
+EnAnubice_SetupShootFireball = 0x809ED328; // type:func
+EnAnubice_ShootFireball = 0x809ED3B0; // type:func
+EnAnubice_SetupDie = 0x809ED4B0; // type:func
+EnAnubice_Die = 0x809ED580; // type:func
+EnAnubice_Update = 0x809ED834; // type:func
+EnAnubice_OverrideLimbDraw = 0x809EDC38; // type:func
+EnAnubice_PostLimbDraw = 0x809EDC84; // type:func
+EnAnubice_Draw = 0x809EDD40; // type:func
+EnAnubiceFire_Init = 0x809EDF80; // type:func
+EnAnubiceFire_Destroy = 0x809EE0A0; // type:func
+func_809B26EC = 0x809EE0CC; // type:func
+func_809B27D8 = 0x809EE1B8; // type:func
+func_809B2B48 = 0x809EE528; // type:func
+EnAnubiceFire_Update = 0x809EE6D4; // type:func
+EnAnubiceFire_Draw = 0x809EE8D0; // type:func
+BgMoriHashigo_InitDynapoly = 0x809EED40; // type:func
+BgMoriHashigo_InitCollider = 0x809EED98; // type:func
+BgMoriHashigo_SpawnLadder = 0x809EEE44; // type:func
+BgMoriHashigo_InitClasp = 0x809EEEFC; // type:func
+BgMoriHashigo_InitLadder = 0x809EEF88; // type:func
+BgMoriHashigo_Init = 0x809EEFCC; // type:func
+BgMoriHashigo_Destroy = 0x809EF090; // type:func
+BgMoriHashigo_SetupWaitForMoriTex = 0x809EF0E8; // type:func
+BgMoriHashigo_WaitForMoriTex = 0x809EF0FC; // type:func
+BgMoriHashigo_SetupClasp = 0x809EF17C; // type:func
+BgMoriHashigo_Clasp = 0x809EF190; // type:func
+BgMoriHashigo_SetupLadderWait = 0x809EF1F4; // type:func
+BgMoriHashigo_LadderWait = 0x809EF208; // type:func
+BgMoriHashigo_SetupLadderFall = 0x809EF23C; // type:func
+BgMoriHashigo_LadderFall = 0x809EF278; // type:func
+BgMoriHashigo_SetupLadderRest = 0x809EF358; // type:func
+BgMoriHashigo_Update = 0x809EF37C; // type:func
+BgMoriHashigo_Draw = 0x809EF3B8; // type:func
+BgMoriHashira4_SetupAction = 0x809EF600; // type:func
+BgMoriHashira4_InitDynaPoly = 0x809EF60C; // type:func
+BgMoriHashira4_Init = 0x809EF664; // type:func
+BgMoriHashira4_Destroy = 0x809EF778; // type:func
+BgMoriHashira4_SetupWaitForMoriTex = 0x809EF7AC; // type:func
+BgMoriHashira4_WaitForMoriTex = 0x809EF7D0; // type:func
+BgMoriHashira4_SetupPillarsRotate = 0x809EF84C; // type:func
+BgMoriHashira4_PillarsRotate = 0x809EF870; // type:func
+BgMoriHashira4_GateWait = 0x809EF8A8; // type:func
+BgMoriHashira4_GateOpen = 0x809EF954; // type:func
+BgMoriHashira4_Update = 0x809EF9AC; // type:func
+BgMoriHashira4_Draw = 0x809EF9D8; // type:func
+BgMoriIdomizu_SetupAction = 0x809EFB90; // type:func
+BgMoriIdomizu_SetWaterLevel = 0x809EFB9C; // type:func
+BgMoriIdomizu_Init = 0x809EFBC4; // type:func
+BgMoriIdomizu_Destroy = 0x809EFCE8; // type:func
+BgMoriIdomizu_SetupWaitForMoriTex = 0x809EFD08; // type:func
+BgMoriIdomizu_WaitForMoriTex = 0x809EFD2C; // type:func
+BgMoriIdomizu_SetupMain = 0x809EFD84; // type:func
+BgMoriIdomizu_Main = 0x809EFDA8; // type:func
+BgMoriIdomizu_Update = 0x809EFF6C; // type:func
+BgMoriIdomizu_Draw = 0x809EFF98; // type:func
+BgSpot16Doughnut_Init = 0x809F01D0; // type:func
+BgSpot16Doughnut_Destroy = 0x809F0344; // type:func
+BgSpot16Doughnut_Update = 0x809F0354; // type:func
+BgSpot16Doughnut_UpdateExpanding = 0x809F03E8; // type:func
+BgSpot16Doughnut_Draw = 0x809F0450; // type:func
+BgSpot16Doughnut_DrawExpanding = 0x809F0608; // type:func
+BgBdanSwitch_InitDynaPoly = 0x809F0790; // type:func
+BgBdanSwitch_InitCollision = 0x809F07E8; // type:func
+func_8086D0EC = 0x809F083C; // type:func
+BgBdanSwitch_Init = 0x809F09A8; // type:func
+BgBdanSwitch_Destroy = 0x809F0B64; // type:func
+func_8086D4B4 = 0x809F0BD0; // type:func
+func_8086D548 = 0x809F0C64; // type:func
+func_8086D5C4 = 0x809F0CE0; // type:func
+func_8086D5E0 = 0x809F0D00; // type:func
+func_8086D67C = 0x809F0D9C; // type:func
+func_8086D694 = 0x809F0DB8; // type:func
+func_8086D730 = 0x809F0E58; // type:func
+func_8086D754 = 0x809F0E80; // type:func
+func_8086D7FC = 0x809F0F28; // type:func
+func_8086D80C = 0x809F0F3C; // type:func
+func_8086D86C = 0x809F0F9C; // type:func
+func_8086D888 = 0x809F0FBC; // type:func
+func_8086D8BC = 0x809F0FF4; // type:func
+func_8086D8CC = 0x809F1008; // type:func
+func_8086D944 = 0x809F1080; // type:func
+func_8086D95C = 0x809F109C; // type:func
+func_8086D9F8 = 0x809F113C; // type:func
+func_8086DA1C = 0x809F1164; // type:func
+func_8086DAB4 = 0x809F1200; // type:func
+func_8086DAC4 = 0x809F1214; // type:func
+func_8086DB24 = 0x809F1274; // type:func
+func_8086DB40 = 0x809F1294; // type:func
+func_8086DB4C = 0x809F12A4; // type:func
+func_8086DB68 = 0x809F12C4; // type:func
+func_8086DC30 = 0x809F138C; // type:func
+func_8086DC48 = 0x809F13A8; // type:func
+func_8086DCCC = 0x809F142C; // type:func
+func_8086DCE8 = 0x809F144C; // type:func
+func_8086DDA8 = 0x809F150C; // type:func
+func_8086DDC0 = 0x809F1528; // type:func
+BgBdanSwitch_Update = 0x809F15BC; // type:func
+func_8086DF58 = 0x809F16C0; // type:func
+BgBdanSwitch_Draw = 0x809F1730; // type:func
+EnMa1_GetTextId = 0x809F1BC0; // type:func
+EnMa1_UpdateTalkState = 0x809F1CA8; // type:func
+EnMa1_ShouldSpawn = 0x809F1DF4; // type:func
+EnMa1_UpdateEyes = 0x809F1F40; // type:func
+EnMa1_ChangeAnim = 0x809F1FB8; // type:func
+EnMa1_UpdateTracking = 0x809F2028; // type:func
+EnMa1_UpdateSinging = 0x809F20A8; // type:func
+EnMa1_Init = 0x809F2120; // type:func
+EnMa1_Destroy = 0x809F2288; // type:func
+EnMa1_Idle = 0x809F22C8; // type:func
+EnMa1_GiveWeirdEgg = 0x809F23E0; // type:func
+EnMa1_FinishGivingWeirdEgg = 0x809F2440; // type:func
+EnMa1_IdleTeachSong = 0x809F2488; // type:func
+EnMa1_StartTeachSong = 0x809F25B4; // type:func
+EnMa1_TeachSong = 0x809F2638; // type:func
+EnMa1_WaitForPlayback = 0x809F26A0; // type:func
+EnMa1_DoNothing = 0x809F2718; // type:func
+EnMa1_Update = 0x809F2728; // type:func
+EnMa1_OverrideLimbDraw = 0x809F2814; // type:func
+EnMa1_PostLimbDraw = 0x809F29A4; // type:func
+EnMa1_Draw = 0x809F2A00; // type:func
+BossGanonEff_SpawnWindowShard = 0x809F2EA0; // type:func
+BossGanonEff_SpawnSparkle = 0x809F2FE0; // type:func
+BossGanonEff_SpawnLightRay = 0x809F30DC; // type:func
+BossGanonEff_SpawnShock = 0x809F3220; // type:func
+BossGanonEff_SpawnLightning = 0x809F32EC; // type:func
+BossGanonEff_SpawnDustDark = 0x809F3390; // type:func
+BossGanonEff_SpawnDustLight = 0x809F3484; // type:func
+BossGanonEff_SpawnShockwave = 0x809F3568; // type:func
+BossGanonEff_SpawnBlackDot = 0x809F3660; // type:func
+BossGanon_SetColliderPos = 0x809F371C; // type:func
+BossGanon_SetAnimationObject = 0x809F3760; // type:func
+BossGanon_Init = 0x809F37D0; // type:func
+BossGanon_Destroy = 0x809F3D74; // type:func
+BossGanon_SetupIntroCutscene = 0x809F3DD8; // type:func
+BossGanon_SetIntroCsCamera = 0x809F3EBC; // type:func
+BossGanon_IntroCutscene = 0x809F3F5C; // type:func
+BossGanon_SetupDeathCutscene = 0x809F565C; // type:func
+BossGanon_SetupTowerCutscene = 0x809F5740; // type:func
+BossGanon_ShatterWindows = 0x809F5844; // type:func
+BossGanon_DeathAndTowerCutscene = 0x809F5988; // type:func
+BossGanon_SetupPoundFloor = 0x809F7330; // type:func
+BossGanon_PoundFloor = 0x809F736C; // type:func
+BossGanon_SetupChargeBigMagic = 0x809F78C0; // type:func
+BossGanon_ChargeBigMagic = 0x809F7930; // type:func
+BossGanon_SetupWait = 0x809F8138; // type:func
+BossGanon_Wait = 0x809F81C0; // type:func
+BossGanon_SetupChargeLightBall = 0x809F850C; // type:func
+BossGanon_ChargeLightBall = 0x809F857C; // type:func
+BossGanon_SetupPlayTennis = 0x809F8730; // type:func
+BossGanon_PlayTennis = 0x809F8798; // type:func
+BossGanon_SetupBlock = 0x809F8A68; // type:func
+BossGanon_Block = 0x809F8B20; // type:func
+BossGanon_SetupHitByLightBall = 0x809F8CB0; // type:func
+BossGanon_HitByLightBall = 0x809F8DA4; // type:func
+BossGanon_SetupVulnerable = 0x809F8FFC; // type:func
+BossGanon_Vulnerable = 0x809F91CC; // type:func
+BossGanon_SetupDamaged = 0x809F9738; // type:func
+BossGanon_Damaged = 0x809F97A0; // type:func
+BossGanon_UpdateDamage = 0x809F9860; // type:func
+BossGanon_Update = 0x809F9C28; // type:func
+BossGanon_OverrideLimbDraw = 0x809FAD90; // type:func
+BossGanon_PostLimbDraw = 0x809FAFD0; // type:func
+BossGanon_InitRand = 0x809FB32C; // type:func
+BossGanon_RandZeroOne = 0x809FB34C; // type:func
+BossGanon_DrawShock = 0x809FB474; // type:func
+BossGanon_DrawHandLightBall = 0x809FB820; // type:func
+BossGanon_DrawBigMagicCharge = 0x809FBA74; // type:func
+BossGanon_DrawTriforce = 0x809FC104; // type:func
+BossGanon_DrawDarkVortex = 0x809FC4C8; // type:func
+func_808E0254 = 0x809FC720; // type:func
+BossGanon_GenShadowTexture = 0x809FCBC8; // type:func
+BossGanon_DrawShadowTexture = 0x809FCF08; // type:func
+BossGanon_Draw = 0x809FD184; // type:func
+BossGanon_CheckFallingPlatforms = 0x809FD3CC; // type:func
+BossGanon_LightBall_Update = 0x809FD4B4; // type:func
+BossGanon_LightBall_Draw = 0x809FDFD4; // type:func
+func_808E1EB4 = 0x809FE2E8; // type:func
+func_808E229C = 0x809FE6D8; // type:func
+func_808E2544 = 0x809FE948; // type:func
+func_808E324C = 0x809FF65C; // type:func
+BossGanon_UpdateEffects = 0x809FF930; // type:func
+BossGanon_DrawEffects = 0x80A00158; // type:func
+BossSst_Init = 0x80A18CD0; // type:func
+BossSst_Destroy = 0x80A19158; // type:func
+BossSst_HeadSetupLurk = 0x80A191A4; // type:func
+BossSst_HeadLurk = 0x80A191D8; // type:func
+BossSst_HeadSetupIntro = 0x80A19214; // type:func
+BossSst_HeadIntro = 0x80A19360; // type:func
+BossSst_HeadSetupWait = 0x80A1A178; // type:func
+BossSst_HeadWait = 0x80A1A1C8; // type:func
+BossSst_HeadSetupNeutral = 0x80A1A244; // type:func
+BossSst_HeadNeutral = 0x80A1A264; // type:func
+BossSst_HeadSetupDamagedHand = 0x80A1A408; // type:func
+BossSst_HeadDamagedHand = 0x80A1A470; // type:func
+BossSst_HeadSetupReadyCharge = 0x80A1A568; // type:func
+BossSst_HeadReadyCharge = 0x80A1A5C0; // type:func
+BossSst_HeadSetupCharge = 0x80A1A664; // type:func
+BossSst_HeadCharge = 0x80A1A720; // type:func
+BossSst_HeadSetupEndCharge = 0x80A1A980; // type:func
+BossSst_HeadEndCharge = 0x80A1AA04; // type:func
+BossSst_HeadSetupFrozenHand = 0x80A1AA74; // type:func
+BossSst_HeadFrozenHand = 0x80A1AAC8; // type:func
+BossSst_HeadSetupUnfreezeHand = 0x80A1AB10; // type:func
+BossSst_HeadUnfreezeHand = 0x80A1AB5C; // type:func
+BossSst_HeadSetupStunned = 0x80A1AB98; // type:func
+BossSst_HeadStunned = 0x80A1AC38; // type:func
+BossSst_HeadSetupVulnerable = 0x80A1AEBC; // type:func
+BossSst_HeadVulnerable = 0x80A1AF5C; // type:func
+BossSst_HeadSetupDamage = 0x80A1B05C; // type:func
+BossSst_HeadDamage = 0x80A1B12C; // type:func
+BossSst_HeadSetupRecover = 0x80A1B17C; // type:func
+BossSst_HeadRecover = 0x80A1B208; // type:func
+BossSst_SetCameraTargets = 0x80A1B39C; // type:func
+BossSst_UpdateDeathCamera = 0x80A1B4C8; // type:func
+BossSst_HeadSetupDeath = 0x80A1B654; // type:func
+BossSst_HeadDeath = 0x80A1B7E8; // type:func
+BossSst_HeadSetupThrash = 0x80A1BA38; // type:func
+BossSst_HeadThrash = 0x80A1BAA0; // type:func
+BossSst_HeadSetupDarken = 0x80A1BB1C; // type:func
+BossSst_HeadDarken = 0x80A1BB64; // type:func
+BossSst_HeadSetupFall = 0x80A1BD8C; // type:func
+BossSst_HeadFall = 0x80A1BE24; // type:func
+BossSst_HeadSetupMelt = 0x80A1BEC0; // type:func
+BossSst_HeadMelt = 0x80A1BF10; // type:func
+BossSst_HeadSetupFinish = 0x80A1BFC8; // type:func
+BossSst_HeadFinish = 0x80A1C024; // type:func
+BossSst_HandSetupWait = 0x80A1C31C; // type:func
+BossSst_HandWait = 0x80A1C398; // type:func
+BossSst_HandSetupDownbeat = 0x80A1C508; // type:func
+BossSst_HandDownbeat = 0x80A1C57C; // type:func
+BossSst_HandSetupDownbeatEnd = 0x80A1C6CC; // type:func
+BossSst_HandDownbeatEnd = 0x80A1C728; // type:func
+BossSst_HandSetupOffbeat = 0x80A1C81C; // type:func
+BossSst_HandOffbeat = 0x80A1C890; // type:func
+BossSst_HandSetupOffbeatEnd = 0x80A1C970; // type:func
+BossSst_HandOffbeatEnd = 0x80A1C9BC; // type:func
+BossSst_HandSetupEndSlam = 0x80A1CB00; // type:func
+BossSst_HandEndSlam = 0x80A1CB74; // type:func
+BossSst_HandSetupRetreat = 0x80A1CBB0; // type:func
+BossSst_HandRetreat = 0x80A1CC58; // type:func
+BossSst_HandSetupReadySlam = 0x80A1CE84; // type:func
+BossSst_HandReadySlam = 0x80A1CEF0; // type:func
+BossSst_HandSetupSlam = 0x80A1CFE0; // type:func
+BossSst_HandSlam = 0x80A1D070; // type:func
+BossSst_HandSetupReadySweep = 0x80A1D254; // type:func
+BossSst_HandReadySweep = 0x80A1D2FC; // type:func
+BossSst_HandSetupSweep = 0x80A1D420; // type:func
+BossSst_HandSweep = 0x80A1D4AC; // type:func
+BossSst_HandSetupReadyPunch = 0x80A1D6BC; // type:func
+BossSst_HandReadyPunch = 0x80A1D724; // type:func
+BossSst_HandSetupPunch = 0x80A1D780; // type:func
+BossSst_HandPunch = 0x80A1D808; // type:func
+BossSst_HandSetupReadyClap = 0x80A1D94C; // type:func
+BossSst_HandReadyClap = 0x80A1DA3C; // type:func
+BossSst_HandSetupClap = 0x80A1DC2C; // type:func
+BossSst_HandClap = 0x80A1DC9C; // type:func
+BossSst_HandSetupEndClap = 0x80A1DEC8; // type:func
+BossSst_HandEndClap = 0x80A1DF34; // type:func
+BossSst_HandSetupReadyGrab = 0x80A1DFD8; // type:func
+BossSst_HandReadyGrab = 0x80A1E05C; // type:func
+BossSst_HandSetupGrab = 0x80A1E104; // type:func
+BossSst_HandGrab = 0x80A1E190; // type:func
+BossSst_HandSetupCrush = 0x80A1E43C; // type:func
+BossSst_HandCrush = 0x80A1E494; // type:func
+BossSst_HandSetupEndCrush = 0x80A1E5AC; // type:func
+BossSst_HandEndCrush = 0x80A1E5FC; // type:func
+BossSst_HandSetupSwing = 0x80A1E638; // type:func
+BossSst_HandSwing = 0x80A1E6C0; // type:func
+BossSst_HandSetupReel = 0x80A1E9F4; // type:func
+BossSst_HandReel = 0x80A1EA8C; // type:func
+BossSst_HandSetupReadyShake = 0x80A1EBE4; // type:func
+BossSst_HandReadyShake = 0x80A1EC34; // type:func
+BossSst_HandSetupShake = 0x80A1ED9C; // type:func
+BossSst_HandShake = 0x80A1EDB8; // type:func
+BossSst_HandSetupReadyCharge = 0x80A1EF4C; // type:func
+BossSst_HandReadyCharge = 0x80A1EFA0; // type:func
+BossSst_HandSetupStunned = 0x80A1F118; // type:func
+BossSst_HandStunned = 0x80A1F1C4; // type:func
+BossSst_HandSetupDamage = 0x80A1F320; // type:func
+BossSst_HandDamage = 0x80A1F37C; // type:func
+BossSst_HandSetupThrash = 0x80A1F454; // type:func
+BossSst_HandThrash = 0x80A1F4F0; // type:func
+BossSst_HandSetupDarken = 0x80A1F6E4; // type:func
+BossSst_HandDarken = 0x80A1F734; // type:func
+BossSst_HandSetupFall = 0x80A1F7A8; // type:func
+BossSst_HandFall = 0x80A1F7F8; // type:func
+BossSst_HandSetupMelt = 0x80A1F87C; // type:func
+BossSst_HandMelt = 0x80A1F8B8; // type:func
+BossSst_HandSetupFinish = 0x80A1F930; // type:func
+BossSst_HandFinish = 0x80A1F95C; // type:func
+BossSst_HandSetupRecover = 0x80A1F988; // type:func
+BossSst_HandRecover = 0x80A1F9DC; // type:func
+BossSst_HandSetupFrozen = 0x80A1FA74; // type:func
+BossSst_HandFrozen = 0x80A1FB40; // type:func
+BossSst_HandSetupReadyBreakIce = 0x80A1FCA0; // type:func
+BossSst_HandReadyBreakIce = 0x80A1FD54; // type:func
+BossSst_HandSetupBreakIce = 0x80A1FE70; // type:func
+BossSst_HandBreakIce = 0x80A1FE98; // type:func
+BossSst_HandGrabPlayer = 0x80A2002C; // type:func
+BossSst_HandReleasePlayer = 0x80A200CC; // type:func
+BossSst_MoveAround = 0x80A20150; // type:func
+BossSst_HandSelectAttack = 0x80A202DC; // type:func
+BossSst_HandSetDamage = 0x80A203D8; // type:func
+BossSst_HandSetInvulnerable = 0x80A20444; // type:func
+BossSst_HeadSfx = 0x80A20484; // type:func
+BossSst_HandCollisionCheck = 0x80A204B0; // type:func
+BossSst_HeadCollisionCheck = 0x80A2063C; // type:func
+BossSst_UpdateHand = 0x80A20788; // type:func
+BossSst_UpdateHead = 0x80A20A98; // type:func
+BossSst_OverrideHandDraw = 0x80A20D08; // type:func
+BossSst_PostHandDraw = 0x80A20D58; // type:func
+BossSst_OverrideHandTrailDraw = 0x80A20D94; // type:func
+BossSst_DrawHand = 0x80A20DD8; // type:func
+BossSst_OverrideHeadDraw = 0x80A21184; // type:func
+BossSst_PostHeadDraw = 0x80A21988; // type:func
+BossSst_DrawHead = 0x80A21A30; // type:func
+BossSst_SpawnHeadShadow = 0x80A21E80; // type:func
+BossSst_SpawnHandShadow = 0x80A21FAC; // type:func
+BossSst_SpawnShockwave = 0x80A22060; // type:func
+BossSst_SpawnIceCrystal = 0x80A2213C; // type:func
+BossSst_SpawnIceShard = 0x80A223F8; // type:func
+BossSst_IceShatter = 0x80A2264C; // type:func
+BossSst_UpdateEffects = 0x80A22818; // type:func
+BossSst_DrawEffects = 0x80A22ABC; // type:func
+EnNy_Init = 0x80A252A0; // type:func
+EnNy_Destroy = 0x80A253DC; // type:func
+func_80ABCD40 = 0x80A25408; // type:func
+func_80ABCD84 = 0x80A25450; // type:func
+func_80ABCD94 = 0x80A25464; // type:func
+func_80ABCDAC = 0x80A25480; // type:func
+func_80ABCDBC = 0x80A25494; // type:func
+EnNy_SetupTurnToStone = 0x80A254D8; // type:func
+func_80ABCE38 = 0x80A25514; // type:func
+func_80ABCE50 = 0x80A25530; // type:func
+func_80ABCE90 = 0x80A25570; // type:func
+func_80ABCEEC = 0x80A255CC; // type:func
+EnNy_Move = 0x80A2562C; // type:func
+EnNy_TurnToStone = 0x80A25740; // type:func
+func_80ABD11C = 0x80A25800; // type:func
+EnNy_CollisionCheck = 0x80A25874; // type:func
+func_80ABD3B8 = 0x80A25A9C; // type:func
+EnNy_Update = 0x80A25B84; // type:func
+EnNy_SetupDie = 0x80A25E10; // type:func
+EnNy_Die = 0x80A26094; // type:func
+EnNy_UpdateDeath = 0x80A262A0; // type:func
+EnNy_UpdateUnused = 0x80A262E0; // type:func
+EnNy_Draw = 0x80A26410; // type:func
+EnNy_DrawDeathEffect = 0x80A266E4; // type:func
+EnFr_OrientUnderwater = 0x80A26BE0; // type:func
+EnFr_Init = 0x80A26CF4; // type:func
+EnFr_DrawIdle = 0x80A26DAC; // type:func
+EnFr_DrawActive = 0x80A26DD4; // type:func
+EnFr_Update = 0x80A26DE8; // type:func
+EnFr_Destroy = 0x80A270E0; // type:func
+EnFr_IsDivingIntoWater = 0x80A27114; // type:func
+EnFr_DivingIntoWater = 0x80A27198; // type:func
+EnFr_IsBelowLogSpot = 0x80A27244; // type:func
+EnFr_IsAboveAndWithin30DistXZ = 0x80A272A0; // type:func
+EnFr_DecrementBlinkTimer = 0x80A2731C; // type:func
+EnFr_DecrementBlinkTimerUpdate = 0x80A27344; // type:func
+EnFr_SetupJumpingOutOfWater = 0x80A273D4; // type:func
+EnFr_JumpingOutOfWater = 0x80A27474; // type:func
+EnFr_OrientOnLogSpot = 0x80A27614; // type:func
+EnFr_ChooseJumpFromLogSpot = 0x80A276D4; // type:func
+EnFr_JumpingUp = 0x80A277E8; // type:func
+EnFr_JumpingBackIntoWater = 0x80A27928; // type:func
+EnFr_SetScaleActive = 0x80A27A80; // type:func
+EnFr_ButterflyPath = 0x80A27B88; // type:func
+EnFr_UpdateActive = 0x80A27CE4; // type:func
+EnFr_SetupJumpingUp = 0x80A27DC8; // type:func
+EnFr_Idle = 0x80A27E68; // type:func
+EnFr_Activate = 0x80A27F48; // type:func
+EnFr_ActivateCheckFrogSong = 0x80A27FB0; // type:func
+func_80A1BE98 = 0x80A28054; // type:func
+EnFr_ListeningToOcarinaNotes = 0x80A280CC; // type:func
+EnFr_ChildSong = 0x80A28218; // type:func
+EnFr_ChildSongFirstTime = 0x80A28350; // type:func
+EnFr_TalkBeforeFrogSong = 0x80A283A8; // type:func
+EnFr_CheckOcarinaInputFrogSong = 0x80A28410; // type:func
+EnFr_DeactivateButterfly = 0x80A2850C; // type:func
+EnFr_GetNextNoteFrogSong = 0x80A28554; // type:func
+EnFr_SetupFrogSong = 0x80A285D0; // type:func
+EnFr_IsFrogSongComplete = 0x80A28644; // type:func
+EnFr_OcarinaMistake = 0x80A286F4; // type:func
+EnFr_ContinueFrogSong = 0x80A28750; // type:func
+EnFr_SetupReward = 0x80A288F4; // type:func
+EnFr_PrintTextBox = 0x80A28970; // type:func
+EnFr_TalkBeforeReward = 0x80A289B0; // type:func
+EnFr_SetReward = 0x80A28A18; // type:func
+EnFr_Deactivate = 0x80A28B2C; // type:func
+EnFr_GiveReward = 0x80A28C2C; // type:func
+EnFr_SetIdle = 0x80A28C8C; // type:func
+EnFr_UpdateIdle = 0x80A28CE0; // type:func
+EnFr_OverrideLimbDraw = 0x80A28D0C; // type:func
+EnFr_PostLimbDraw = 0x80A28D38; // type:func
+EnFr_Draw = 0x80A28DF0; // type:func
+ItemShield_SetupAction = 0x80A29670; // type:func
+ItemShield_Init = 0x80A2967C; // type:func
+ItemShield_Destroy = 0x80A297E4; // type:func
+func_80B86AC8 = 0x80A29810; // type:func
+func_80B86BC8 = 0x80A29914; // type:func
+func_80B86CA8 = 0x80A299FC; // type:func
+func_80B86F68 = 0x80A29CC0; // type:func
+ItemShield_Update = 0x80A29DCC; // type:func
+ItemShield_Draw = 0x80A29DF0; // type:func
+BgIceShelter_InitColliders = 0x80A2A080; // type:func
+BgIceShelter_InitDynaPoly = 0x80A2A1B4; // type:func
+BgIceShelter_RotateY = 0x80A2A20C; // type:func
+BgIceShelter_Init = 0x80A2A28C; // type:func
+BgIceShelter_Destroy = 0x80A2A408; // type:func
+BgIceShelter_SpawnSteamAround = 0x80A2A494; // type:func
+BgIceShelter_SpawnSteamAlong = 0x80A2A708; // type:func
+BgIceShelter_SetupIdle = 0x80A2A96C; // type:func
+BgIceShelter_Idle = 0x80A2A988; // type:func
+BgIceShelter_SetupMelt = 0x80A2AAC8; // type:func
+BgIceShelter_Melt = 0x80A2AAE4; // type:func
+BgIceShelter_Update = 0x80A2ACA8; // type:func
+BgIceShelter_Draw = 0x80A2ACCC; // type:func
+EnIceHono_XZDistanceSquared = 0x80A2B2C0; // type:func
+EnIceHono_InitCapturableFlame = 0x80A2B2F0; // type:func
+EnIceHono_InitDroppedFlame = 0x80A2B394; // type:func
+EnIceHono_InitSmallFlame = 0x80A2B49C; // type:func
+EnIceHono_Init = 0x80A2B504; // type:func
+EnIceHono_Destroy = 0x80A2B664; // type:func
+EnIceHono_InBottleRange = 0x80A2B6BC; // type:func
+EnIceHono_SetupActionCapturableFlame = 0x80A2B7AC; // type:func
+EnIceHono_CapturableFlame = 0x80A2B7D4; // type:func
+EnIceHono_SetupActionDroppedFlame = 0x80A2B884; // type:func
+EnIceHono_DropFlame = 0x80A2B8A8; // type:func
+EnIceHono_SetupActionSpreadFlames = 0x80A2BA68; // type:func
+EnIceHono_SpreadFlames = 0x80A2BA8C; // type:func
+EnIceHono_SetupActionSmallFlame = 0x80A2BCE8; // type:func
+EnIceHono_SmallFlameMove = 0x80A2BDBC; // type:func
+EnIceHono_Update = 0x80A2BF14; // type:func
+EnIceHono_Draw = 0x80A2C0A8; // type:func
+ItemOcarina_SetupAction = 0x80A2C4B0; // type:func
+ItemOcarina_Init = 0x80A2C4BC; // type:func
+ItemOcarina_Destroy = 0x80A2C644; // type:func
+ItemOcarina_Fly = 0x80A2C654; // type:func
+ItemOcarina_GetThrown = 0x80A2C800; // type:func
+func_80B864EC = 0x80A2C858; // type:func
+func_80B865E0 = 0x80A2C94C; // type:func
+ItemOcarina_DoNothing = 0x80A2C9AC; // type:func
+ItemOcarina_StartSoTCutscene = 0x80A2C9BC; // type:func
+ItemOcarina_WaitInWater = 0x80A2CA30; // type:func
+ItemOcarina_Update = 0x80A2CB04; // type:func
+ItemOcarina_Draw = 0x80A2CB28; // type:func
+MagicDark_Init = 0x80A2CC80; // type:func
+MagicDark_Destroy = 0x80A2CD64; // type:func
+MagicDark_DiamondUpdate = 0x80A2CD9C; // type:func
+MagicDark_DimLighting = 0x80A2CFE4; // type:func
+MagicDark_OrbUpdate = 0x80A2D130; // type:func
+MagicDark_DiamondDraw = 0x80A2D2D8; // type:func
+MagicDark_OrbDraw = 0x80A2D540; // type:func
+Demo6K_SetupAction = 0x80A2E4D0; // type:func
+Demo6K_Init = 0x80A2E4DC; // type:func
+Demo6K_Destroy = 0x80A2E8C4; // type:func
+Demo6K_WaitForObject = 0x80A2E8F8; // type:func
+func_80966E04 = 0x80A2E950; // type:func
+func_80966E98 = 0x80A2E9E8; // type:func
+func_80966F84 = 0x80A2EADC; // type:func
+func_809670AC = 0x80A2EC04; // type:func
+func_8096712C = 0x80A2EC84; // type:func
+func_80967244 = 0x80A2ED9C; // type:func
+func_80967410 = 0x80A2EF68; // type:func
+func_809674E0 = 0x80A2F038; // type:func
+func_809676A4 = 0x80A2F1FC; // type:func
+func_8096784C = 0x80A2F3A4; // type:func
+func_80967A04 = 0x80A2F560; // type:func
+func_80967AD0 = 0x80A2F62C; // type:func
+func_80967BF8 = 0x80A2F758; // type:func
+func_80967DBC = 0x80A2F91C; // type:func
+func_80967F10 = 0x80A2FA68; // type:func
+Demo6K_Update = 0x80A2FB34; // type:func
+func_80967FFC = 0x80A2FB58; // type:func
+func_80968298 = 0x80A2FDB4; // type:func
+func_8096865C = 0x80A30138; // type:func
+func_809688C4 = 0x80A30358; // type:func
+func_80968B70 = 0x80A305D4; // type:func
+func_80968FB0 = 0x80A309D4; // type:func
+func_809691BC = 0x80A30B98; // type:func
+EnAnubiceTag_Init = 0x80A31230; // type:func
+EnAnubiceTag_Destroy = 0x80A31280; // type:func
+EnAnubiceTag_SpawnAnubis = 0x80A31290; // type:func
+EnAnubiceTag_ManageAnubis = 0x80A31308; // type:func
+EnAnubiceTag_Update = 0x80A3146C; // type:func
+EnAnubiceTag_Draw = 0x80A31490; // type:func
+BgHakaGate_Init = 0x80A31500; // type:func
+BgHakaGate_Destroy = 0x80A317D0; // type:func
+BgHakaGate_DoNothing = 0x80A3182C; // type:func
+BgHakaGate_StatueInactive = 0x80A3183C; // type:func
+BgHakaGate_StatueIdle = 0x80A31878; // type:func
+BgHakaGate_StatueTurn = 0x80A31990; // type:func
+BgHakaGate_FloorClosed = 0x80A31B74; // type:func
+BgHakaGate_FloorOpen = 0x80A31CFC; // type:func
+BgHakaGate_GateWait = 0x80A31D88; // type:func
+BgHakaGate_GateOpen = 0x80A31DD8; // type:func
+BgHakaGate_SkullOfTruth = 0x80A31E68; // type:func
+BgHakaGate_FalseSkull = 0x80A31EC4; // type:func
+BgHakaGate_Update = 0x80A31F44; // type:func
+BgHakaGate_DrawFlame = 0x80A31F8C; // type:func
+BgHakaGate_Draw = 0x80A32164; // type:func
+BgSpot15Saku_Init = 0x80A325A0; // type:func
+BgSpot15Saku_Destroy = 0x80A32654; // type:func
+func_808B4930 = 0x80A32688; // type:func
+func_808B4978 = 0x80A326D0; // type:func
+func_808B4A04 = 0x80A3275C; // type:func
+BgSpot15Saku_Update = 0x80A3278C; // type:func
+BgSpot15Saku_Draw = 0x80A327C0; // type:func
+BgJyaGoroiwa_UpdateCollider = 0x80A328E0; // type:func
+BgJyaGoroiwa_InitCollider = 0x80A32938; // type:func
+BgJyaGoroiwa_UpdateRotation = 0x80A329A0; // type:func
+BgJyaGoroiwa_Init = 0x80A329E0; // type:func
+BgJyaGoroiwa_Destroy = 0x80A32A74; // type:func
+BgJyaGoroiwa_SetupMove = 0x80A32AA0; // type:func
+BgJyaGoroiwa_Move = 0x80A32AD0; // type:func
+BgJyaGoroiwa_SetupWait = 0x80A32D64; // type:func
+BgJyaGoroiwa_Wait = 0x80A32D7C; // type:func
+BgJyaGoroiwa_Update = 0x80A32DCC; // type:func
+BgJyaGoroiwa_Draw = 0x80A32EB8; // type:func
+BgJyaZurerukabe_InitDynaPoly = 0x80A33060; // type:func
+func_8089B4C8 = 0x80A330B8; // type:func
+BgJyaZurerukabe_Init = 0x80A33254; // type:func
+BgJyaZurerukabe_Destroy = 0x80A33314; // type:func
+func_8089B7B4 = 0x80A33360; // type:func
+func_8089B7C4 = 0x80A33374; // type:func
+func_8089B80C = 0x80A333C0; // type:func
+func_8089B870 = 0x80A33428; // type:func
+BgJyaZurerukabe_Update = 0x80A334F0; // type:func
+BgJyaZurerukabe_Draw = 0x80A33548; // type:func
+func_808958F0 = 0x80A33710; // type:func
+BgJyaCobra_InitDynapoly = 0x80A33764; // type:func
+BgJyaCobra_SpawnRay = 0x80A337BC; // type:func
+func_80895A70 = 0x80A33824; // type:func
+func_80895BEC = 0x80A339A4; // type:func
+func_80895C74 = 0x80A33A28; // type:func
+BgJyaCobra_UpdateShadowFromSide = 0x80A33CA8; // type:func
+BgJyaCobra_UpdateShadowFromTop = 0x80A342D0; // type:func
+BgJyaCobra_Init = 0x80A3458C; // type:func
+BgJyaCobra_Destroy = 0x80A34678; // type:func
+func_80896918 = 0x80A346AC; // type:func
+func_80896950 = 0x80A346E8; // type:func
+func_808969F8 = 0x80A34790; // type:func
+func_80896ABC = 0x80A34858; // type:func
+BgJyaCobra_Update = 0x80A349EC; // type:func
+func_80896CB4 = 0x80A34A60; // type:func
+func_80896D78 = 0x80A34AE8; // type:func
+BgJyaCobra_DrawShadow = 0x80A34C14; // type:func
+BgJyaCobra_Draw = 0x80A34E98; // type:func
+BgJyaKanaami_InitDynaPoly = 0x80A35450; // type:func
+BgJyaKanaami_Init = 0x80A354A8; // type:func
+BgJyaKanaami_Destroy = 0x80A35528; // type:func
+func_80899880 = 0x80A3555C; // type:func
+func_80899894 = 0x80A35574; // type:func
+func_8089993C = 0x80A3561C; // type:func
+func_80899950 = 0x80A35634; // type:func
+func_80899A08 = 0x80A356EC; // type:func
+BgJyaKanaami_Update = 0x80A35700; // type:func
+BgJyaKanaami_Draw = 0x80A35734; // type:func
+Fishing_SetColliderElement = 0x80A35800; // type:func
+Fishing_SeedRand = 0x80A35890; // type:func
+Fishing_RandZeroOne = 0x80A358B0; // type:func
+Fishing_SmoothStepToS = 0x80A35A68; // type:func
+Fishing_SpawnRipple = 0x80A35AF4; // type:func
+Fishing_SpawnDustSplash = 0x80A35C68; // type:func
+Fishing_SpawnWaterDust = 0x80A35DB8; // type:func
+Fishing_SpawnBubble = 0x80A35EF8; // type:func
+Fishing_SpawnRainDrop = 0x80A3603C; // type:func
+Fishing_InitPondProps = 0x80A36138; // type:func
+Fishing_Init = 0x80A36424; // type:func
+Fishing_Destroy = 0x80A36D34; // type:func
+Fishing_UpdateEffects = 0x80A36DA0; // type:func
+Fishing_DrawEffects = 0x80A3749C; // type:func
+Fishing_DrawStreamSplash = 0x80A38014; // type:func
+Fishing_IsAboveCounter = 0x80A38198; // type:func
+Fishing_UpdateLine = 0x80A38258; // type:func
+Fishing_UpdateLinePos = 0x80A387C4; // type:func
+Fishing_DrawLureHook = 0x80A38974; // type:func
+Fishing_UpdateSinkingLure = 0x80A38E20; // type:func
+Fishing_DrawSinkingLure = 0x80A39110; // type:func
+Fishing_DrawLureAndLine = 0x80A3940C; // type:func
+Fishing_DrawRod = 0x80A39C70; // type:func
+Fishing_UpdateLure = 0x80A3A564; // type:func
+Fishing_SplashBySize = 0x80A3C0C8; // type:func
+Fishing_SplashBySize2 = 0x80A3C368; // type:func
+func_80B70ED4 = 0x80A3C550; // type:func
+Fishing_FishLeapSfx = 0x80A3C8C4; // type:func
+Fishing_HandleAquariumDialog = 0x80A3C984; // type:func
+Fishing_UpdateFish = 0x80A3CADC; // type:func
+Fishing_FishOverrideLimbDraw = 0x80A40904; // type:func
+Fishing_FishPostLimbDraw = 0x80A409E0; // type:func
+Fishing_LoachOverrideLimbDraw = 0x80A40A10; // type:func
+Fishing_LoachPostLimbDraw = 0x80A40A74; // type:func
+Fishing_DrawFish = 0x80A40AA4; // type:func
+Fishing_HandleReedContact = 0x80A40CCC; // type:func
+Fishing_HandleLilyPadContact = 0x80A40D8C; // type:func
+Fishing_UpdatePondProps = 0x80A40E7C; // type:func
+Fishing_DrawPondProps = 0x80A41130; // type:func
+Fishing_UpdateGroupFishes = 0x80A41614; // type:func
+Fishing_DrawGroupFishes = 0x80A41F34; // type:func
+Fishing_HandleOwnerDialog = 0x80A42148; // type:func
+Fishing_UpdateOwner = 0x80A42CBC; // type:func
+Fishing_OwnerOverrideLimbDraw = 0x80A4469C; // type:func
+Fishing_OwnerPostLimbDraw = 0x80A446C8; // type:func
+Fishing_DrawOwner = 0x80A447A0; // type:func
+ObjOshihiki_InitDynapoly = 0x80A4ED40; // type:func
+ObjOshihiki_RotateXZ = 0x80A4ED98; // type:func
+ObjOshihiki_StrongEnough = 0x80A4EDEC; // type:func
+ObjOshihiki_ResetFloors = 0x80A4EE70; // type:func
+ObjOshihiki_GetBlockUnder = 0x80A4EE9C; // type:func
+ObjOshihiki_UpdateInitPos = 0x80A4EF2C; // type:func
+ObjOshihiki_NoSwitchPress = 0x80A4F05C; // type:func
+ObjOshihiki_CheckType = 0x80A4F128; // type:func
+ObjOshihiki_SetScale = 0x80A4F178; // type:func
+ObjOshihiki_SetTexture = 0x80A4F1B0; // type:func
+ObjOshihiki_SetColor = 0x80A4F210; // type:func
+ObjOshihiki_Init = 0x80A4F2B8; // type:func
+ObjOshihiki_Destroy = 0x80A4F3E0; // type:func
+ObjOshihiki_SetFloors = 0x80A4F414; // type:func
+ObjOshihiki_GetHighestFloor = 0x80A4F574; // type:func
+ObjOshihiki_SetGround = 0x80A4F6C0; // type:func
+ObjOshihiki_CheckFloor = 0x80A4F718; // type:func
+ObjOshihiki_CheckGround = 0x80A4F770; // type:func
+ObjOshihiki_CheckWall = 0x80A4F7E8; // type:func
+ObjOshihiki_MoveWithBlockUnder = 0x80A4FA3C; // type:func
+ObjOshihiki_SetupOnScene = 0x80A4FB38; // type:func
+ObjOshihiki_OnScene = 0x80A4FB70; // type:func
+ObjOshihiki_SetupOnActor = 0x80A4FC5C; // type:func
+ObjOshihiki_OnActor = 0x80A4FC9C; // type:func
+ObjOshihiki_SetupPush = 0x80A4FE94; // type:func
+ObjOshihiki_Push = 0x80A4FEC0; // type:func
+ObjOshihiki_SetupFall = 0x80A500DC; // type:func
+ObjOshihiki_Fall = 0x80A50134; // type:func
+ObjOshihiki_Update = 0x80A50238; // type:func
+ObjOshihiki_Draw = 0x80A502C0; // type:func
+BgGateShutter_Init = 0x80A507F0; // type:func
+BgGateShutter_Destroy = 0x80A508D8; // type:func
+func_8087828C = 0x80A5090C; // type:func
+func_80878300 = 0x80A50980; // type:func
+func_808783AC = 0x80A50A30; // type:func
+func_808783D4 = 0x80A50A58; // type:func
+BgGateShutter_Update = 0x80A50B14; // type:func
+BgGateShutter_Draw = 0x80A50B48; // type:func
+EffDust_SetupAction = 0x80A50C80; // type:func
+EffDust_SetupDraw = 0x80A50C8C; // type:func
+EffDust_InitPosAndDistance = 0x80A50C98; // type:func
+EffDust_Init = 0x80A50D10; // type:func
+EffDust_Destroy = 0x80A50ED0; // type:func
+EffDust_UpdateFunc_8099DB28 = 0x80A50EE0; // type:func
+EffDust_UpdateFunc_8099DD74 = 0x80A5112C; // type:func
+EffDust_UpdateFunc_8099DFC0 = 0x80A51378; // type:func
+EffDust_Update = 0x80A5188C; // type:func
+EffDust_DrawFunc_8099E4F4 = 0x80A518B0; // type:func
+EffDust_DrawFunc_8099E784 = 0x80A51B04; // type:func
+EffDust_Draw = 0x80A51E68; // type:func
+BgSpot01Fusya_SetupAction = 0x80A52050; // type:func
+BgSpot01Fusya_Init = 0x80A5205C; // type:func
+BgSpot01Fusya_Destroy = 0x80A520D8; // type:func
+func_808AAA50 = 0x80A520E8; // type:func
+BgSpot01Fusya_Update = 0x80A521A8; // type:func
+BgSpot01Fusya_Draw = 0x80A521CC; // type:func
+BgSpot01Idohashira_PlayBreakSfx1 = 0x80A522F0; // type:func
+BgSpot01Idohashira_PlayBreakSfx2 = 0x80A52318; // type:func
+func_808AAD3C = 0x80A52350; // type:func
+func_808AAE6C = 0x80A52488; // type:func
+func_808AAF34 = 0x80A52554; // type:func
+BgSpot01Idohashira_Destroy = 0x80A52718; // type:func
+BgSpot01Idohashira_NotInCsMode = 0x80A5274C; // type:func
+BgSpot01Idohashira_GetCue = 0x80A5276C; // type:func
+func_808AB18C = 0x80A527B8; // type:func
+func_808AB1DC = 0x80A5280C; // type:func
+func_808AB29C = 0x80A528B0; // type:func
+func_808AB3E8 = 0x80A529FC; // type:func
+func_808AB3F8 = 0x80A52A10; // type:func
+func_808AB414 = 0x80A52A30; // type:func
+func_808AB444 = 0x80A52A5C; // type:func
+func_808AB504 = 0x80A52B08; // type:func
+func_808AB510 = 0x80A52B18; // type:func
+func_808AB530 = 0x80A52B38; // type:func
+func_808AB570 = 0x80A52B7C; // type:func
+BgSpot01Idohashira_Update = 0x80A52B9C; // type:func
+BgSpot01Idohashira_Init = 0x80A52BE4; // type:func
+func_808AB700 = 0x80A52CFC; // type:func
+BgSpot01Idohashira_Draw = 0x80A52D8C; // type:func
+BgSpot01Idomizu_Init = 0x80A52EF0; // type:func
+BgSpot01Idomizu_Destroy = 0x80A52F88; // type:func
+BgSpot01Idomizu_UpdateWaterLevel = 0x80A52F98; // type:func
+BgSpot01Idomizu_Update = 0x80A5304C; // type:func
+BgSpot01Idomizu_Draw = 0x80A53070; // type:func
+BgPoSyokudai_Init = 0x80A53210; // type:func
+BgPoSyokudai_Destroy = 0x80A534B0; // type:func
+BgPoSyokudai_Update = 0x80A53520; // type:func
+BgPoSyokudai_Draw = 0x80A535A0; // type:func
+BgGanonOtyuka_Init = 0x80A53B80; // type:func
+BgGanonOtyuka_Destroy = 0x80A53C1C; // type:func
+BgGanonOtyuka_WaitToFall = 0x80A53C50; // type:func
+BgGanonOtyuka_Fall = 0x80A53EA0; // type:func
+BgGanonOtyuka_DoNothing = 0x80A542E0; // type:func
+BgGanonOtyuka_Update = 0x80A542F0; // type:func
+BgGanonOtyuka_Draw = 0x80A54338; // type:func
+func_808B3960 = 0x80A561C0; // type:func
+BgSpot15Rrbox_RotatePoint = 0x80A56218; // type:func
+func_808B3A34 = 0x80A5626C; // type:func
+func_808B3A40 = 0x80A5627C; // type:func
+func_808B3AAC = 0x80A562EC; // type:func
+BgSpot15Rrbox_Init = 0x80A563D4; // type:func
+BgSpot15Rrbox_Destroy = 0x80A564A4; // type:func
+BgSpot15Rrbox_TrySnapToCheckedPoint = 0x80A564E0; // type:func
+BgSpot15Rrbox_GetFloorHeight = 0x80A56620; // type:func
+BgSpot15Rrbox_TrySnapToFloor = 0x80A567A0; // type:func
+func_808B4010 = 0x80A56860; // type:func
+func_808B4084 = 0x80A568D4; // type:func
+func_808B40AC = 0x80A56900; // type:func
+func_808B4178 = 0x80A569CC; // type:func
+func_808B4194 = 0x80A569EC; // type:func
+func_808B4380 = 0x80A56BD8; // type:func
+func_808B43D0 = 0x80A56C28; // type:func
+func_808B44B8 = 0x80A56CF4; // type:func
+func_808B44CC = 0x80A56D0C; // type:func
+BgSpot15Rrbox_Update = 0x80A56D30; // type:func
+BgSpot15Rrbox_Draw = 0x80A56D9C; // type:func
+BgUmaJump_Init = 0x80A56FA0; // type:func
+BgUmaJump_Destroy = 0x80A5705C; // type:func
+BgUmaJump_Update = 0x80A57090; // type:func
+BgUmaJump_Draw = 0x80A570A0; // type:func
+EnInsect_InitFlags = 0x80A57130; // type:func
+EnInsect_XZDistanceSquared = 0x80A57154; // type:func
+EnInsect_InBottleRange = 0x80A57184; // type:func
+EnInsect_SetCrawlAnim = 0x80A57274; // type:func
+EnInsect_TryFindNearbySoil = 0x80A572C0; // type:func
+EnInsect_UpdateCrawlSfx = 0x80A57378; // type:func
+EnInsect_Init = 0x80A5740C; // type:func
+EnInsect_Destroy = 0x80A57658; // type:func
+EnInsect_SetupSlowDown = 0x80A576C8; // type:func
+EnInsect_SlowDown = 0x80A57718; // type:func
+EnInsect_SetupCrawl = 0x80A578BC; // type:func
+EnInsect_Crawl = 0x80A5790C; // type:func
+EnInsect_SetupRunFromPlayer = 0x80A57B38; // type:func
+EnInsect_RunFromPlayer = 0x80A57B88; // type:func
+EnInsect_SetupCaught = 0x80A57D80; // type:func
+EnInsect_Caught = 0x80A57DEC; // type:func
+EnInsect_SetupDig = 0x80A57EE4; // type:func
+EnInsect_Dig = 0x80A57F5C; // type:func
+EnInsect_SetupWalkOnWater = 0x80A58180; // type:func
+EnInsect_WalkOnWater = 0x80A581E0; // type:func
+EnInsect_SetupDrown = 0x80A58514; // type:func
+EnInsect_Drown = 0x80A5858C; // type:func
+EnInsect_SetupDropped = 0x80A586BC; // type:func
+EnInsect_Dropped = 0x80A58784; // type:func
+EnInsect_Update = 0x80A58EB4; // type:func
+EnInsect_Draw = 0x80A590FC; // type:func
+EnButte_SelectFlightParams = 0x80A59650; // type:func
+EnButte_ResetTransformationEffect = 0x80A596D4; // type:func
+EnButte_UpdateTransformationEffect = 0x80A596F0; // type:func
+EnButte_DrawTransformationEffect = 0x80A59728; // type:func
+EnButte_Init = 0x80A59964; // type:func
+EnButte_Destroy = 0x80A59AD8; // type:func
+func_809CD56C = 0x80A59B04; // type:func
+func_809CD634 = 0x80A59BCC; // type:func
+EnButte_Turn = 0x80A59C94; // type:func
+EnButte_SetupFlyAround = 0x80A59D30; // type:func
+EnButte_FlyAround = 0x80A59D7C; // type:func
+EnButte_SetupFollowLink = 0x80A5A160; // type:func
+EnButte_FollowLink = 0x80A5A1AC; // type:func
+EnButte_SetupTransformIntoFairy = 0x80A5A560; // type:func
+EnButte_TransformIntoFairy = 0x80A5A5B0; // type:func
+EnButte_SetupWaitToDie = 0x80A5A66C; // type:func
+EnButte_WaitToDie = 0x80A5A68C; // type:func
+EnButte_Update = 0x80A5A6BC; // type:func
+EnButte_Draw = 0x80A5A7FC; // type:func
+EnFish_XZDistanceSquared = 0x80A5AC20; // type:func
+EnFish_SetInWaterAnimation = 0x80A5AC50; // type:func
+EnFish_SetOutOfWaterAnimation = 0x80A5ACB4; // type:func
+EnFish_BeginRespawn = 0x80A5AD18; // type:func
+EnFish_SetCutsceneData = 0x80A5AD4C; // type:func
+EnFish_ClearCutsceneData = 0x80A5ADE4; // type:func
+EnFish_Init = 0x80A5AE0C; // type:func
+EnFish_Destroy = 0x80A5AF50; // type:func
+EnFish_SetYOffset = 0x80A5AF7C; // type:func
+EnFish_InBottleRange = 0x80A5B034; // type:func
+EnFish_CheckXZDistanceToPlayer = 0x80A5B124; // type:func
+EnFish_Respawning_SetupSlowDown = 0x80A5B154; // type:func
+EnFish_Respawning_SlowDown = 0x80A5B1AC; // type:func
+EnFish_Respawning_SetupFollowChild = 0x80A5B2A0; // type:func
+EnFish_Respawning_FollowChild = 0x80A5B2F8; // type:func
+EnFish_Respawning_SetupFleePlayer = 0x80A5B48C; // type:func
+EnFish_Respawning_FleePlayer = 0x80A5B4E4; // type:func
+EnFish_Respawning_SetupApproachPlayer = 0x80A5B6D4; // type:func
+EnFish_Respawning_ApproachPlayer = 0x80A5B72C; // type:func
+EnFish_Dropped_SetupFall = 0x80A5B8F0; // type:func
+EnFish_Dropped_Fall = 0x80A5B950; // type:func
+EnFish_Dropped_SetupFlopOnGround = 0x80A5BA58; // type:func
+EnFish_Dropped_FlopOnGround = 0x80A5BB9C; // type:func
+EnFish_Dropped_SetupSwimAway = 0x80A5BD78; // type:func
+EnFish_Dropped_SwimAway = 0x80A5BDEC; // type:func
+EnFish_Unique_SetupSwimIdle = 0x80A5BFB4; // type:func
+EnFish_Unique_SwimIdle = 0x80A5C00C; // type:func
+EnFish_Cutscene_FlopOnGround = 0x80A5C234; // type:func
+EnFish_Cutscene_WiggleFlyingThroughAir = 0x80A5C364; // type:func
+EnFish_UpdateCutscene = 0x80A5C400; // type:func
+EnFish_OrdinaryUpdate = 0x80A5C5C0; // type:func
+EnFish_RespawningUpdate = 0x80A5C744; // type:func
+EnFish_Update = 0x80A5C858; // type:func
+EnFish_Draw = 0x80A5C904; // type:func
+BgSpot08Iceblock_SetupAction = 0x80A5CD30; // type:func
+BgSpot08Iceblock_InitDynaPoly = 0x80A5CD3C; // type:func
+BgSpot08Iceblock_CheckParams = 0x80A5CD94; // type:func
+BgSpot08Iceblock_Bobbing = 0x80A5CDF4; // type:func
+BgSpot08Iceblock_SinkUnderPlayer = 0x80A5CE50; // type:func
+BgSpot08Iceblock_SetWaterline = 0x80A5CF00; // type:func
+BgSpot08Iceblock_MultVectorScalar = 0x80A5CF20; // type:func
+BgSpot08Iceblock_CrossProduct = 0x80A5CF54; // type:func
+BgSpot08Iceblock_NormalizeVector = 0x80A5CFC8; // type:func
+BgSpot08Iceblock_Roll = 0x80A5D064; // type:func
+BgSpot08Iceblock_SpawnTwinFloe = 0x80A5D3D8; // type:func
+BgSpot08Iceblock_Init = 0x80A5D4D8; // type:func
+BgSpot08Iceblock_Destroy = 0x80A5D6CC; // type:func
+BgSpot08Iceblock_SetupFloatNonrotating = 0x80A5D700; // type:func
+BgSpot08Iceblock_FloatNonrotating = 0x80A5D724; // type:func
+BgSpot08Iceblock_SetupFloatRotating = 0x80A5D778; // type:func
+BgSpot08Iceblock_FloatRotating = 0x80A5D79C; // type:func
+BgSpot08Iceblock_SetupFloatOrbitingTwins = 0x80A5D7FC; // type:func
+BgSpot08Iceblock_FloatOrbitingTwins = 0x80A5D820; // type:func
+BgSpot08Iceblock_SetupNoAction = 0x80A5D8F8; // type:func
+BgSpot08Iceblock_Update = 0x80A5D918; // type:func
+BgSpot08Iceblock_Draw = 0x80A5D9B4; // type:func
+ItemEtcetera_SetupAction = 0x80A5DD70; // type:func
+ItemEtcetera_Init = 0x80A5DD7C; // type:func
+ItemEtcetera_Destroy = 0x80A5DEFC; // type:func
+ItemEtcetera_WaitForObject = 0x80A5DF0C; // type:func
+func_80B85824 = 0x80A5DF64; // type:func
+func_80B858B4 = 0x80A5DFFC; // type:func
+ItemEtcetera_SpawnSparkles = 0x80A5E0DC; // type:func
+ItemEtcetera_MoveFireArrowDown = 0x80A5E1EC; // type:func
+func_80B85B28 = 0x80A5E27C; // type:func
+ItemEtcetera_UpdateFireArrow = 0x80A5E2C4; // type:func
+ItemEtcetera_Update = 0x80A5E344; // type:func
+ItemEtcetera_DrawThroughLens = 0x80A5E368; // type:func
+ItemEtcetera_Draw = 0x80A5E3C0; // type:func
+ArrowFire_SetupAction = 0x80A5E640; // type:func
+ArrowFire_Init = 0x80A5E64C; // type:func
+ArrowFire_Destroy = 0x80A5E6C8; // type:func
+ArrowFire_Charge = 0x80A5E6EC; // type:func
+func_80865ECC = 0x80A5E7E0; // type:func
+ArrowFire_Hit = 0x80A5E838; // type:func
+ArrowFire_Fly = 0x80A5EA04; // type:func
+ArrowFire_Update = 0x80A5EB58; // type:func
+ArrowFire_Draw = 0x80A5EBAC; // type:func
+ArrowIce_SetupAction = 0x80A60520; // type:func
+ArrowIce_Init = 0x80A6052C; // type:func
+ArrowIce_Destroy = 0x80A605A8; // type:func
+ArrowIce_Charge = 0x80A605CC; // type:func
+func_80867E8C = 0x80A606C0; // type:func
+ArrowIce_Hit = 0x80A60718; // type:func
+ArrowIce_Fly = 0x80A608E4; // type:func
+ArrowIce_Update = 0x80A60A38; // type:func
+ArrowIce_Draw = 0x80A60A8C; // type:func
+ArrowLight_SetupAction = 0x80A62420; // type:func
+ArrowLight_Init = 0x80A6242C; // type:func
+ArrowLight_Destroy = 0x80A624A8; // type:func
+ArrowLight_Charge = 0x80A624CC; // type:func
+func_80869E6C = 0x80A625C0; // type:func
+ArrowLight_Hit = 0x80A62618; // type:func
+ArrowLight_Fly = 0x80A627E4; // type:func
+ArrowLight_Update = 0x80A62938; // type:func
+ArrowLight_Draw = 0x80A6298C; // type:func
+ObjKibako_SpawnCollectible = 0x80A64330; // type:func
+ObjKibako_ApplyGravity = 0x80A64390; // type:func
+ObjKibako_InitCollider = 0x80A643C4; // type:func
+ObjKibako_Init = 0x80A6441C; // type:func
+ObjKibako_Destroy = 0x80A64494; // type:func
+ObjKibako_AirBreak = 0x80A644C0; // type:func
+ObjKibako_WaterBreak = 0x80A64740; // type:func
+ObjKibako_SetupIdle = 0x80A649C0; // type:func
+ObjKibako_Idle = 0x80A649DC; // type:func
+ObjKibako_SetupHeld = 0x80A64BD8; // type:func
+ObjKibako_Held = 0x80A64C0C; // type:func
+ObjKibako_SetupThrown = 0x80A64CD8; // type:func
+ObjKibako_Thrown = 0x80A64D38; // type:func
+ObjKibako_Update = 0x80A64E74; // type:func
+ObjKibako_Draw = 0x80A64E98; // type:func
+ObjTsubo_SpawnCollectible = 0x80A65030; // type:func
+ObjTsubo_ApplyGravity = 0x80A65090; // type:func
+ObjTsubo_SnapToFloor = 0x80A650C4; // type:func
+ObjTsubo_InitCollider = 0x80A65160; // type:func
+ObjTsubo_Init = 0x80A651B8; // type:func
+ObjTsubo_Destroy = 0x80A65288; // type:func
+ObjTsubo_AirBreak = 0x80A652B4; // type:func
+ObjTsubo_WaterBreak = 0x80A6553C; // type:func
+ObjTsubo_SetupWaitForObject = 0x80A657D4; // type:func
+ObjTsubo_WaitForObject = 0x80A657E8; // type:func
+ObjTsubo_SetupIdle = 0x80A6585C; // type:func
+ObjTsubo_Idle = 0x80A65870; // type:func
+ObjTsubo_SetupLiftedUp = 0x80A65A80; // type:func
+ObjTsubo_LiftedUp = 0x80A65AC4; // type:func
+ObjTsubo_SetupThrown = 0x80A65B4C; // type:func
+ObjTsubo_Thrown = 0x80A65C14; // type:func
+ObjTsubo_Update = 0x80A65DA8; // type:func
+ObjTsubo_Draw = 0x80A65DCC; // type:func
+EnWonderItem_Destroy = 0x80A66020; // type:func
+EnWonderItem_DropCollectible = 0x80A66064; // type:func
+EnWonderItem_Init = 0x80A661C0; // type:func
+EnWonderItem_MultitagFree = 0x80A6650C; // type:func
+EnWonderItem_ProximityDrop = 0x80A66654; // type:func
+EnWonderItem_InteractSwitch = 0x80A666BC; // type:func
+EnWonderItem_ProximitySwitch = 0x80A666F0; // type:func
+EnWonderItem_MultitagOrdered = 0x80A6677C; // type:func
+EnWonderItem_BombSoldier = 0x80A668D8; // type:func
+EnWonderItem_RollDrop = 0x80A66968; // type:func
+EnWonderItem_Update = 0x80A669DC; // type:func
+EnIk_Destroy = 0x80A66D50; // type:func
+EnIk_SetupAction = 0x80A66DD0; // type:func
+EnIk_InitImpl = 0x80A66DDC; // type:func
+EnIk_HandleBlocking = 0x80A67028; // type:func
+EnIk_FindBreakableProp = 0x80A670B8; // type:func
+EnIk_SetupStandUp = 0x80A67158; // type:func
+EnIk_StandUp = 0x80A67204; // type:func
+EnIk_SetupIdle = 0x80A672E4; // type:func
+EnIk_Idle = 0x80A67374; // type:func
+EnIk_SetupWalkOrRun = 0x80A674F4; // type:func
+EnIk_WalkOrRun = 0x80A675EC; // type:func
+EnIk_SetupVerticalAttack = 0x80A67874; // type:func
+EnIk_VerticalAttack = 0x80A67904; // type:func
+EnIk_SetupPullOutAxe = 0x80A67AB8; // type:func
+EnIk_PullOutAxe = 0x80A67B58; // type:func
+EnIk_SetupDoubleHorizontalAttack = 0x80A67C14; // type:func
+EnIk_DoubleHorizontalAttack = 0x80A67CAC; // type:func
+EnIk_SetupRecoverFromHorizontalAttack = 0x80A67E1C; // type:func
+EnIk_RecoverFromHorizontalAttack = 0x80A67EA8; // type:func
+EnIk_SetupSingleHorizontalAttack = 0x80A67EF0; // type:func
+EnIk_SingleHorizontalAttack = 0x80A67F80; // type:func
+EnIk_SetupStopAndBlock = 0x80A68040; // type:func
+EnIk_StopAndBlock = 0x80A680CC; // type:func
+EnIk_SetupReactToAttack = 0x80A681E0; // type:func
+EnIk_ReactToAttack = 0x80A68300; // type:func
+EnIk_SetupDie = 0x80A683DC; // type:func
+EnIk_Die = 0x80A68488; // type:func
+EnIk_UpdateDamage = 0x80A68684; // type:func
+EnIk_UpdateEnemy = 0x80A689F0; // type:func
+EnIk_SetPrimEnvColors = 0x80A68C08; // type:func
+EnIk_OverrideLimbDrawEnemy = 0x80A68CC0; // type:func
+EnIk_PostLimbDrawEnemy = 0x80A68D80; // type:func
+EnIk_DrawEnemy = 0x80A69194; // type:func
+EnIk_StartMinibossBgm = 0x80A695CC; // type:func
+EnIk_UpdateAction2Sfx = 0x80A695EC; // type:func
+EnIk_PlayAxeSpawnSfx = 0x80A697B8; // type:func
+EnIk_SpawnAxeSmoke = 0x80A69808; // type:func
+EnIk_UpdateBgCheckInfo = 0x80A69A14; // type:func
+EnIk_UpdateSkelAnime = 0x80A69A5C; // type:func
+EnIk_GetCue = 0x80A69A80; // type:func
+EnIk_SetStartPosRotFromCue = 0x80A69AA8; // type:func
+EnIk_GetAnimCurFrame = 0x80A69B28; // type:func
+EnIk_SetupCsAction0 = 0x80A69B34; // type:func
+EnIk_SetupCsAction1 = 0x80A69B48; // type:func
+EnIk_SetupCsAction2 = 0x80A69BD4; // type:func
+EnIk_HandleEnemyChange = 0x80A69C54; // type:func
+EnIk_PlayArmorFallSfx = 0x80A69C94; // type:func
+EnIk_PlayDeathSfx = 0x80A69CDC; // type:func
+EnIk_SetupCsAction3 = 0x80A69D50; // type:func
+EnIk_SetupCsAction4 = 0x80A69E28; // type:func
+EnIk_SetupCsAction5 = 0x80A69E64; // type:func
+EnIk_CsAction3 = 0x80A69E80; // type:func
+EnIk_CsAction4 = 0x80A69EB8; // type:func
+EnIk_CsAction5 = 0x80A69EF8; // type:func
+EnIk_OverrideLimbDrawDefeat = 0x80A69F34; // type:func
+EnIk_PostLimbDrawDefeat = 0x80A69FA0; // type:func
+EnIk_CsDrawDefeat = 0x80A6A1EC; // type:func
+EnIk_HandleCsCues = 0x80A6A350; // type:func
+EnIk_CsAction0 = 0x80A6A44C; // type:func
+EnIk_CsAction1 = 0x80A6A46C; // type:func
+EnIk_CsAction2 = 0x80A6A4A4; // type:func
+EnIk_UpdateCutscene = 0x80A6A508; // type:func
+EnIk_OverrideLimbDrawIntro = 0x80A6A550; // type:func
+EnIk_PostLimbDrawIntro = 0x80A6A5D4; // type:func
+EnIk_CsDrawNothing = 0x80A6A7C0; // type:func
+EnIk_CsDrawIntro = 0x80A6A7D0; // type:func
+EnIk_DrawCutscene = 0x80A6A934; // type:func
+EnIk_CsInit = 0x80A6A97C; // type:func
+EnIk_ChangeToEnemy = 0x80A6A9EC; // type:func
+EnIk_StartDefeatCutscene = 0x80A6AA58; // type:func
+EnIk_Init = 0x80A6AAEC; // type:func
+DemoIk_Destroy = 0x80A6B3B0; // type:func
+DemoIk_BgCheck = 0x80A6B3C0; // type:func
+DemoIk_UpdateSkelAnime = 0x80A6B408; // type:func
+DemoIk_GetCue = 0x80A6B42C; // type:func
+DemoIk_CheckForCue = 0x80A6B454; // type:func
+DemoIk_SetMove = 0x80A6B494; // type:func
+DemoIk_EndMove = 0x80A6B4D4; // type:func
+DemoIk_GetCurFrame = 0x80A6B4E8; // type:func
+DemoIk_SetColors = 0x80A6B4F4; // type:func
+DemoIk_GetCueChannel = 0x80A6B598; // type:func
+DemoIk_Type1PlaySfx = 0x80A6B5C4; // type:func
+DemoIk_SpawnDeadDb = 0x80A6B6C4; // type:func
+DemoIk_MoveToStartPos = 0x80A6B868; // type:func
+DemoIk_Type1Init = 0x80A6B8E8; // type:func
+func_8098393C = 0x80A6BA04; // type:func
+func_8098394C = 0x80A6BA18; // type:func
+func_809839AC = 0x80A6BA7C; // type:func
+func_809839D0 = 0x80A6BAA4; // type:func
+DemoIk_Type1Action0 = 0x80A6BB64; // type:func
+DemoIk_Type1Action1 = 0x80A6BB84; // type:func
+DemoIk_Type1Action2 = 0x80A6BBBC; // type:func
+DemoIk_Type1PostLimbDraw = 0x80A6BC24; // type:func
+DemoIk_Type1Draw = 0x80A6BD20; // type:func
+DemoIk_Type2Init = 0x80A6BE78; // type:func
+DemoIk_Type2PlaySfxOnFrame = 0x80A6BF80; // type:func
+DemoIk_Type2PlaySfx = 0x80A6BFE0; // type:func
+func_80983FDC = 0x80A6C030; // type:func
+func_80983FEC = 0x80A6C044; // type:func
+func_8098402C = 0x80A6C084; // type:func
+func_80984048 = 0x80A6C0A4; // type:func
+DemoIk_Type2Action0 = 0x80A6C16C; // type:func
+DemoIk_Type2Action1 = 0x80A6C18C; // type:func
+DemoIk_Type2Action2 = 0x80A6C1AC; // type:func
+DemoIk_Type2OverrideLimbDraw = 0x80A6C1E8; // type:func
+DemoIk_Type2PostLimbDraw = 0x80A6C244; // type:func
+DemoIk_Type2Draw = 0x80A6C414; // type:func
+DemoIk_Update = 0x80A6C578; // type:func
+DemoIk_DrawNothing = 0x80A6C5C0; // type:func
+DemoIk_Draw = 0x80A6C5D0; // type:func
+DemoIk_Init = 0x80A6C618; // type:func
+EnSkj_ChangeAnim = 0x80A6C8C0; // type:func
+EnSkj_SetupAction = 0x80A6C948; // type:func
+EnSkj_CalculateCenter = 0x80A6C9A0; // type:func
+EnSkj_SetNaviId = 0x80A6CA38; // type:func
+EnSkj_Init = 0x80A6CABC; // type:func
+EnSkj_Destroy = 0x80A6CE08; // type:func
+EnSkj_RangeCheck = 0x80A6CE34; // type:func
+EnSkj_GetItemXzRange = 0x80A6CEB0; // type:func
+EnSkj_GetItemYRange = 0x80A6CEF8; // type:func
+EnSkj_ShootNeedle = 0x80A6CF24; // type:func
+EnSkj_SpawnBlood = 0x80A6D03C; // type:func
+EnSkj_CollisionCheck = 0x80A6D194; // type:func
+func_80AFEDF8 = 0x80A6D350; // type:func
+EnSkj_Backflip = 0x80A6D3DC; // type:func
+EnSkj_Fade = 0x80A6D424; // type:func
+EnSkj_SetupWaitToShootNeedle = 0x80A6D4B4; // type:func
+EnSkj_WaitToShootNeedle = 0x80A6D4F0; // type:func
+EnSkj_SetupResetFight = 0x80A6D590; // type:func
+EnSkj_SariasSongKidIdle = 0x80A6D5D4; // type:func
+EnSkj_SetupDie = 0x80A6D6CC; // type:func
+EnSkj_WaitForDeathAnim = 0x80A6D700; // type:func
+func_80AFF1F0 = 0x80A6D754; // type:func
+EnSkj_PickNextFightAction = 0x80A6D788; // type:func
+func_80AFF2A0 = 0x80A6D808; // type:func
+EnSkj_WaitForLandAnim = 0x80A6D84C; // type:func
+func_80AFF334 = 0x80A6D8A0; // type:func
+EnSkj_ResetFight = 0x80A6D8EC; // type:func
+EnSkj_SetupStand = 0x80A6D93C; // type:func
+EnSkj_Fight = 0x80A6D990; // type:func
+EnSkj_SetupNeedleRecover = 0x80A6DB5C; // type:func
+EnSkj_NeedleRecover = 0x80A6DB90; // type:func
+EnSkj_SetupSpawnDeathEffect = 0x80A6DBCC; // type:func
+EnSkj_SpawnDeathEffect = 0x80A6DBF4; // type:func
+EnSkj_SetupWaitInRange = 0x80A6DD0C; // type:func
+EnSkj_WaitInRange = 0x80A6DD44; // type:func
+EnSkj_SetupWaitForSong = 0x80A6DF58; // type:func
+EnSkj_WaitForSong = 0x80A6DF7C; // type:func
+EnSkj_SetupAfterSong = 0x80A6E250; // type:func
+EnSkj_AfterSong = 0x80A6E284; // type:func
+EnSkj_SetupTalk = 0x80A6E2D8; // type:func
+EnSkj_SariaSongTalk = 0x80A6E2F8; // type:func
+func_80AFFE24 = 0x80A6E39C; // type:func
+func_80AFFE44 = 0x80A6E3BC; // type:func
+EnSkj_SetupPostSariasSong = 0x80A6E434; // type:func
+EnSkj_ChangeModeAfterSong = 0x80A6E454; // type:func
+EnSkj_SetupMaskTrade = 0x80A6E4BC; // type:func
+EnSkj_StartMaskTrade = 0x80A6E4DC; // type:func
+EnSkj_JumpFromStump = 0x80A6E544; // type:func
+EnSkj_WaitForLanding = 0x80A6E5A8; // type:func
+EnSkj_SetupWaitForLandAnimFinish = 0x80A6E5F8; // type:func
+EnSkj_WaitForLandAnimFinish = 0x80A6E62C; // type:func
+EnSkj_SetupWalkToPlayer = 0x80A6E680; // type:func
+EnSkj_WalkToPlayer = 0x80A6E6C4; // type:func
+EnSkj_SetupAskForMask = 0x80A6E760; // type:func
+EnSkj_AskForMask = 0x80A6E7A8; // type:func
+EnSkj_SetupTakeMask = 0x80A6E840; // type:func
+EnSkj_TakeMask = 0x80A6E878; // type:func
+EnSkj_SetupWaitForMaskTextClear = 0x80A6E910; // type:func
+EnSkj_WaitForMaskTextClear = 0x80A6E930; // type:func
+EnSkj_SetupWrongSong = 0x80A6E998; // type:func
+EnSkj_WrongSong = 0x80A6E9D0; // type:func
+EnSkj_SetupWaitForTextClear = 0x80A6EA24; // type:func
+EnSkj_SariasSongWaitForTextClear = 0x80A6EA44; // type:func
+EnSkj_OcarinaGameSetupWaitForPlayer = 0x80A6EABC; // type:func
+EnSkj_OcarinaGameWaitForPlayer = 0x80A6EAFC; // type:func
+EnSkj_IsLeavingGame = 0x80A6EB38; // type:func
+EnSkj_SetupIdle = 0x80A6EB88; // type:func
+EnSkj_Appear = 0x80A6EBBC; // type:func
+EnSkj_OcarinaGameIdle = 0x80A6EBE4; // type:func
+EnSkj_SetupPlayOcarinaGame = 0x80A6EC30; // type:func
+EnSkj_PlayOcarinaGame = 0x80A6EC64; // type:func
+EnSkj_SetupLeaveOcarinaGame = 0x80A6ECB0; // type:func
+EnSkj_LeaveOcarinaGame = 0x80A6ECF8; // type:func
+EnSkj_Update = 0x80A6ED40; // type:func
+EnSkj_SariasSongShortStumpUpdate = 0x80A6EF24; // type:func
+EnSkj_TurnPlayer = 0x80A6EF4C; // type:func
+EnSkj_SetupWaitForOcarina = 0x80A6EF98; // type:func
+EnSkj_WaitForOcarina = 0x80A6F054; // type:func
+EnSkj_StartOcarinaMinigame = 0x80A6F0FC; // type:func
+EnSkj_WaitForPlayback = 0x80A6F188; // type:func
+EnSkj_FailedMiniGame = 0x80A6F3F8; // type:func
+EnSkj_WaitForNextRound = 0x80A6F438; // type:func
+EnSkj_OfferNextRound = 0x80A6F488; // type:func
+EnSkj_WaitForOfferResponse = 0x80A6F4C4; // type:func
+EnSkj_WonOcarinaMiniGame = 0x80A6F56C; // type:func
+EnSkj_WaitToGiveReward = 0x80A6F5AC; // type:func
+EnSkj_GiveOcarinaGameReward = 0x80A6F634; // type:func
+EnSkj_FinishOcarinaGameRound = 0x80A6F6A8; // type:func
+EnSkj_CleanupOcarinaGame = 0x80A6F744; // type:func
+EnSkj_OcarinaMinigameShortStumpUpdate = 0x80A6F7C0; // type:func
+EnSkj_OverrideLimbDraw = 0x80A6F844; // type:func
+EnSkj_PostLimbDraw = 0x80A6F860; // type:func
+EnSkj_TranslucentDL = 0x80A6F930; // type:func
+EnSkj_OpaqueDL = 0x80A6F988; // type:func
+EnSkj_Draw = 0x80A6F9C0; // type:func
+EnSkjneedle_Init = 0x80A70210; // type:func
+EnSkjneedle_Destroy = 0x80A702A8; // type:func
+EnSkjNeedle_CollisionCheck = 0x80A702D4; // type:func
+EnSkjneedle_Update = 0x80A70304; // type:func
+EnSkjneedle_Draw = 0x80A703F4; // type:func
+EnGSwitch_Init = 0x80A70520; // type:func
+EnGSwitch_Destroy = 0x80A707B8; // type:func
+EnGSwitch_Break = 0x80A707E4; // type:func
+EnGSwitch_WaitForObject = 0x80A7098C; // type:func
+EnGSwitch_SilverRupeeTracker = 0x80A70A24; // type:func
+EnGSwitch_SilverRupeeIdle = 0x80A70B08; // type:func
+EnGSwitch_SilverRupeeCollected = 0x80A70BF0; // type:func
+EnGSwitch_GalleryRupee = 0x80A70CD4; // type:func
+EnGSwitch_ArcheryPot = 0x80A71074; // type:func
+EnGSwitch_Kill = 0x80A7135C; // type:func
+EnGSwitch_Update = 0x80A7138C; // type:func
+EnGSwitch_DrawPot = 0x80A714C0; // type:func
+EnGSwitch_DrawRupee = 0x80A71554; // type:func
+EnGSwitch_SpawnEffects = 0x80A71684; // type:func
+EnGSwitch_UpdateEffects = 0x80A71798; // type:func
+EnGSwitch_DrawEffects = 0x80A71958; // type:func
+DemoExt_Destroy = 0x80A71D40; // type:func
+DemoExt_Init = 0x80A71D50; // type:func
+DemoExt_PlayVortexSFX = 0x80A71E08; // type:func
+DemoExt_GetCue = 0x80A71E90; // type:func
+DemoExt_SetupWait = 0x80A71EB8; // type:func
+DemoExt_SetupMaintainVortex = 0x80A71EC8; // type:func
+DemoExt_SetupDispellVortex = 0x80A71F54; // type:func
+DemoExt_FinishClosing = 0x80A71F6C; // type:func
+DemoExt_HandleCues = 0x80A71FD8; // type:func
+DemoExt_SetScrollAndRotation = 0x80A72084; // type:func
+DemoExt_SetColorsAndScales = 0x80A720D4; // type:func
+DemoExt_Wait = 0x80A72210; // type:func
+DemoExt_MaintainVortex = 0x80A72230; // type:func
+DemoExt_DispellVortex = 0x80A7226C; // type:func
+DemoExt_Update = 0x80A722AC; // type:func
+DemoExt_DrawNothing = 0x80A722F4; // type:func
+DemoExt_DrawVortex = 0x80A72304; // type:func
+DemoExt_Draw = 0x80A72584; // type:func
+DemoShd_SetupAction = 0x80A72690; // type:func
+DemoShd_Init = 0x80A7269C; // type:func
+DemoShd_Destroy = 0x80A726EC; // type:func
+func_80991298 = 0x80A726FC; // type:func
+DemoShd_Update = 0x80A72854; // type:func
+DemoShd_Draw = 0x80A72878; // type:func
+EnDns_Init = 0x80A74AA0; // type:func
+EnDns_Destroy = 0x80A74C14; // type:func
+EnDns_ChangeAnim = 0x80A74C40; // type:func
+EnDns_CanBuyDekuNuts = 0x80A74CC8; // type:func
+EnDns_CanBuyDekuSticks = 0x80A74D80; // type:func
+EnDns_CanBuyPrice = 0x80A74E38; // type:func
+EnDns_CanBuyDekuSeeds = 0x80A74E68; // type:func
+EnDns_CanBuyDekuShield = 0x80A74F30; // type:func
+EnDns_CanBuyBombs = 0x80A74F84; // type:func
+EnDns_CanBuyArrows = 0x80A75024; // type:func
+EnDns_CanBuyBottle = 0x80A750D4; // type:func
+EnDns_PayPrice = 0x80A7512C; // type:func
+EnDns_PayForDekuNuts = 0x80A75160; // type:func
+EnDns_PayForHeartPiece = 0x80A75194; // type:func
+EnDns_PayForBombs = 0x80A751DC; // type:func
+EnDns_PayForArrows = 0x80A75210; // type:func
+EnDns_PayForDekuStickUpgrade = 0x80A75244; // type:func
+EnDns_PayForDekuNutUpgrade = 0x80A7528C; // type:func
+EnDns_SetupIdle = 0x80A752D4; // type:func
+EnDns_Idle = 0x80A75318; // type:func
+EnDns_Talk = 0x80A753EC; // type:func
+EnDns_OfferSaleItem = 0x80A75524; // type:func
+EnDns_SetupSale = 0x80A7563C; // type:func
+EnDns_Sale = 0x80A756A8; // type:func
+EnDns_SetupBurrow = 0x80A756F4; // type:func
+EnDns_SetupNoSaleBurrow = 0x80A757E8; // type:func
+EnDns_Burrow = 0x80A75860; // type:func
+EnDns_PostBurrow = 0x80A758DC; // type:func
+EnDns_Update = 0x80A759E0; // type:func
+EnDns_Draw = 0x80A75AD0; // type:func
+ElfMsg_SetupAction = 0x80A75E30; // type:func
+ElfMsg_KillCheck = 0x80A75E3C; // type:func
+ElfMsg_Init = 0x80A75F74; // type:func
+ElfMsg_Destroy = 0x80A76068; // type:func
+ElfMsg_GetMessageId = 0x80A76078; // type:func
+ElfMsg_CallNaviCuboid = 0x80A760A4; // type:func
+ElfMsg_WithinXZDistance = 0x80A76174; // type:func
+ElfMsg_CallNaviCylinder = 0x80A761C8; // type:func
+ElfMsg_Update = 0x80A76290; // type:func
+EnHonotrap_FlameCollisionCheck = 0x80A76420; // type:func
+EnHonotrap_GetNormal = 0x80A764B4; // type:func
+EnHonotrap_InitEye = 0x80A76548; // type:func
+EnHonotrap_InitFlame = 0x80A766E4; // type:func
+EnHonotrap_Init = 0x80A76824; // type:func
+EnHonotrap_Destroy = 0x80A7687C; // type:func
+EnHonotrap_SetupEyeIdle = 0x80A768C8; // type:func
+EnHonotrap_EyeIdle = 0x80A768E4; // type:func
+EnHonotrap_SetupEyeOpen = 0x80A7699C; // type:func
+EnHonotrap_EyeOpen = 0x80A769F0; // type:func
+EnHonotrap_SetupEyeAttack = 0x80A76AC0; // type:func
+EnHonotrap_EyeAttack = 0x80A76AD8; // type:func
+EnHonotrap_SetupEyeClose = 0x80A76B08; // type:func
+EnHonotrap_EyeClose = 0x80A76B1C; // type:func
+EnHonotrap_SetupFlameGrow = 0x80A76B68; // type:func
+EnHonotrap_FlameGrow = 0x80A76B7C; // type:func
+EnHonotrap_SetupFlameDrop = 0x80A76C10; // type:func
+EnHonotrap_FlameDrop = 0x80A76C78; // type:func
+EnHonotrap_SetupFlameMove = 0x80A76DBC; // type:func
+EnHonotrap_FlameMove = 0x80A76E48; // type:func
+EnHonotrap_SetupFlameChase = 0x80A77014; // type:func
+EnHonotrap_FlameChase = 0x80A77054; // type:func
+EnHonotrap_SetupFlameVanish = 0x80A77208; // type:func
+EnHonotrap_FlameVanish = 0x80A7721C; // type:func
+EnHonotrap_Update = 0x80A772AC; // type:func
+EnHonotrap_DrawEye = 0x80A773F4; // type:func
+EnHonotrap_DrawFlame = 0x80A774E4; // type:func
+EnHonotrap_Draw = 0x80A7767C; // type:func
+EnTuboTrap_Init = 0x80A77980; // type:func
+EnTuboTrap_Destroy = 0x80A77A04; // type:func
+EnTuboTrap_DropCollectible = 0x80A77A30; // type:func
+EnTuboTrap_SpawnEffectsOnLand = 0x80A77A90; // type:func
+EnTuboTrap_SpawnEffectsInWater = 0x80A77D04; // type:func
+EnTuboTrap_HandleImpact = 0x80A77F84; // type:func
+EnTuboTrap_WaitForProximity = 0x80A781AC; // type:func
+EnTuboTrap_Levitate = 0x80A782B8; // type:func
+EnTuboTrap_Fly = 0x80A78344; // type:func
+EnTuboTrap_Update = 0x80A78414; // type:func
+EnTuboTrap_Draw = 0x80A784D4; // type:func
+ObjIcePoly_Init = 0x80A78620; // type:func
+ObjIcePoly_Destroy = 0x80A787E0; // type:func
+ObjIcePoly_Idle = 0x80A78830; // type:func
+ObjIcePoly_Melt = 0x80A78A60; // type:func
+ObjIcePoly_Update = 0x80A78D18; // type:func
+ObjIcePoly_Draw = 0x80A78D3C; // type:func
+BgSpot03Taki_ApplyOpeningAlpha = 0x80A78FD0; // type:func
+BgSpot03Taki_Init = 0x80A7930C; // type:func
+BgSpot03Taki_Destroy = 0x80A793BC; // type:func
+BgSpot03Taki_HandleWaterfallState = 0x80A793F0; // type:func
+BgSpot03Taki_Update = 0x80A795C4; // type:func
+BgSpot03Taki_Draw = 0x80A795E8; // type:func
+BgSpot07Taki_Init = 0x80A798F0; // type:func
+BgSpot07Taki_Destroy = 0x80A7999C; // type:func
+BgSpot07Taki_DoNothing = 0x80A799D0; // type:func
+BgSpot07Taki_Update = 0x80A799E0; // type:func
+BgSpot07Taki_Draw = 0x80A79A04; // type:func
+EnFz_Init = 0x80A79EE0; // type:func
+EnFz_Destroy = 0x80A7A060; // type:func
+EnFz_UpdateTargetPos = 0x80A7A0B0; // type:func
+EnFz_ReachedTarget = 0x80A7A1D0; // type:func
+EnFz_Damaged = 0x80A7A220; // type:func
+EnFz_SpawnIceSmokeHiddenState = 0x80A7A414; // type:func
+EnFz_SpawnIceSmokeGrowingState = 0x80A7A420; // type:func
+EnFz_SpawnIceSmokeActiveState = 0x80A7A500; // type:func
+EnFz_ApplyDamage = 0x80A7A5C4; // type:func
+EnFz_SetYawTowardsPlayer = 0x80A7A82C; // type:func
+EnFz_SetupDisappear = 0x80A7A86C; // type:func
+EnFz_Disappear = 0x80A7A89C; // type:func
+EnFz_SetupWait = 0x80A7A91C; // type:func
+EnFz_Wait = 0x80A7A95C; // type:func
+EnFz_SetupAppear = 0x80A7A9AC; // type:func
+EnFz_Appear = 0x80A7A9D8; // type:func
+EnFz_SetupAimForMove = 0x80A7AA68; // type:func
+EnFz_AimForMove = 0x80A7AAAC; // type:func
+EnFz_SetupMoveTowardsPlayer = 0x80A7AAE8; // type:func
+EnFz_MoveTowardsPlayer = 0x80A7AB1C; // type:func
+EnFz_SetupAimForFreeze = 0x80A7AB58; // type:func
+EnFz_AimForFreeze = 0x80A7AB88; // type:func
+EnFz_SetupBlowSmoke = 0x80A7ABC4; // type:func
+EnFz_BlowSmoke = 0x80A7ABFC; // type:func
+EnFz_SetupDespawn = 0x80A7ADE8; // type:func
+EnFz_Despawn = 0x80A7AE88; // type:func
+EnFz_SetupMelt = 0x80A7AEB8; // type:func
+EnFz_Melt = 0x80A7AEFC; // type:func
+EnFz_SetupBlowSmokeStationary = 0x80A7AFC4; // type:func
+EnFz_BlowSmokeStationary = 0x80A7B008; // type:func
+EnFz_Update = 0x80A7B200; // type:func
+EnFz_Draw = 0x80A7B390; // type:func
+EnFz_SpawnIceSmokeNoFreeze = 0x80A7B54C; // type:func
+EnFz_SpawnIceSmokeFreeze = 0x80A7B5F0; // type:func
+EnFz_UpdateIceSmoke = 0x80A7B6AC; // type:func
+EnFz_DrawEffects = 0x80A7B998; // type:func
+EnPoRelay_Init = 0x80A7BEF0; // type:func
+EnPoRelay_Destroy = 0x80A7C078; // type:func
+EnPoRelay_SetupIdle = 0x80A7C0C0; // type:func
+EnPoRelay_Vec3sToVec3f = 0x80A7C0FC; // type:func
+EnPoRelay_SetupRace = 0x80A7C140; // type:func
+EnPoRelay_SetupEndRace = 0x80A7C208; // type:func
+EnPoRelay_CorrectY = 0x80A7C248; // type:func
+EnPoRelay_Idle = 0x80A7C2F0; // type:func
+EnPoRelay_Talk = 0x80A7C3AC; // type:func
+EnPoRelay_Race = 0x80A7C420; // type:func
+EnPoRelay_EndRace = 0x80A7C934; // type:func
+EnPoRelay_Talk2 = 0x80A7C9F4; // type:func
+EnPoRelay_DisappearAndReward = 0x80A7CACC; // type:func
+EnPoRelay_Update = 0x80A7CF98; // type:func
+EnPoRelay_PostLimbDraw = 0x80A7D08C; // type:func
+EnPoRelay_Draw = 0x80A7D280; // type:func
+BgRelayObjects_Init = 0x80A7D600; // type:func
+BgRelayObjects_Destroy = 0x80A7D840; // type:func
+func_808A90F4 = 0x80A7D8AC; // type:func
+func_808A91AC = 0x80A7D968; // type:func
+func_808A9234 = 0x80A7D9F0; // type:func
+BgRelayObjects_DoNothing = 0x80A7DADC; // type:func
+func_808A932C = 0x80A7DAEC; // type:func
+func_808A939C = 0x80A7DB5C; // type:func
+BgRelayObjects_Update = 0x80A7DC30; // type:func
+BgRelayObjects_Draw = 0x80A7DC54; // type:func
+EnDivingGame_Init = 0x80A7DDB0; // type:func
+EnDivingGame_Destroy = 0x80A7DECC; // type:func
+EnDivingGame_SpawnRuppy = 0x80A7DF0C; // type:func
+EnDivingGame_HasMinigameFinished = 0x80A7E038; // type:func
+func_809EDCB0 = 0x80A7E1E4; // type:func
+EnDivingGame_Talk = 0x80A7E280; // type:func
+EnDivingGame_HandlePlayChoice = 0x80A7E410; // type:func
+func_809EE048 = 0x80A7E57C; // type:func
+func_809EE0FC = 0x80A7E630; // type:func
+func_809EE194 = 0x80A7E6C8; // type:func
+EnDivingGame_SetupRupeeThrow = 0x80A7E728; // type:func
+EnDivingGame_RupeeThrow = 0x80A7E93C; // type:func
+EnDivingGame_SetupUnderwaterViewCs = 0x80A7EBFC; // type:func
+func_809EE780 = 0x80A7ECB4; // type:func
+func_809EE800 = 0x80A7ED34; // type:func
+func_809EE8F0 = 0x80A7EE24; // type:func
+func_809EE96C = 0x80A7EEA4; // type:func
+func_809EEA00 = 0x80A7EF38; // type:func
+func_809EEA90 = 0x80A7EFC8; // type:func
+func_809EEAF8 = 0x80A7F034; // type:func
+EnDivingGame_Update = 0x80A7F0C4; // type:func
+EnDivingGame_EmptyDList = 0x80A7F2F0; // type:func
+EnDivingGame_OverrideLimbDraw = 0x80A7F314; // type:func
+EnDivingGame_Draw = 0x80A7F474; // type:func
+EnKusa_SetupAction = 0x80A7F760; // type:func
+EnKusa_SnapToFloor = 0x80A7F770; // type:func
+EnKusa_DropCollectible = 0x80A7F814; // type:func
+EnKusa_UpdateVelY = 0x80A7F8E0; // type:func
+EnKusa_RandScaleVecToZero = 0x80A7F914; // type:func
+EnKusa_SetScaleSmall = 0x80A7F998; // type:func
+EnKusa_SpawnFragments = 0x80A7F9BC; // type:func
+EnKusa_SpawnBugs = 0x80A7FD14; // type:func
+EnKusa_InitCollider = 0x80A7FDD0; // type:func
+EnKusa_Init = 0x80A7FE28; // type:func
+EnKusa_Destroy = 0x80A7FF50; // type:func
+EnKusa_SetupWaitForObject = 0x80A7FF7C; // type:func
+EnKusa_WaitForObject = 0x80A7FFA0; // type:func
+EnKusa_SetupMain = 0x80A80030; // type:func
+EnKusa_Main = 0x80A80068; // type:func
+EnKusa_SetupLiftedUp = 0x80A80230; // type:func
+EnKusa_LiftedUp = 0x80A8026C; // type:func
+EnKusa_SetupFall = 0x80A8034C; // type:func
+EnKusa_Fall = 0x80A803B8; // type:func
+EnKusa_SetupCut = 0x80A80648; // type:func
+EnKusa_CutWaitRegrow = 0x80A80698; // type:func
+EnKusa_DoNothing = 0x80A806CC; // type:func
+EnKusa_SetupUprootedWaitRegrow = 0x80A806DC; // type:func
+EnKusa_UprootedWaitRegrow = 0x80A80748; // type:func
+EnKusa_SetupRegrow = 0x80A807AC; // type:func
+EnKusa_Regrow = 0x80A80804; // type:func
+EnKusa_Update = 0x80A8089C; // type:func
+EnKusa_Draw = 0x80A80900; // type:func
+ObjBean_InitCollider = 0x80A80C40; // type:func
+ObjBean_InitDynaPoly = 0x80A80C98; // type:func
+ObjBean_FindFloor = 0x80A80CF0; // type:func
+func_80B8EBC8 = 0x80A80D58; // type:func
+ObjBean_UpdatePosition = 0x80A80D78; // type:func
+func_80B8EDF4 = 0x80A80F88; // type:func
+func_80B8EE24 = 0x80A80FB8; // type:func
+ObjBean_Move = 0x80A81090; // type:func
+ObjBean_SetDrawMode = 0x80A810C0; // type:func
+ObjBean_SetupPathCount = 0x80A810E4; // type:func
+ObjBean_SetupPath = 0x80A81124; // type:func
+ObjBean_FollowPath = 0x80A811A0; // type:func
+ObjBean_CheckForHorseTrample = 0x80A81448; // type:func
+ObjBean_Break = 0x80A814D8; // type:func
+ObjBean_UpdateLeaves = 0x80A81750; // type:func
+ObjBean_SetupLeavesStill = 0x80A8180C; // type:func
+ObjBean_LeavesStill = 0x80A8187C; // type:func
+ObjBean_SetupShakeLeaves = 0x80A818C0; // type:func
+ObjBean_ShakeLeaves = 0x80A81938; // type:func
+ObjBean_SetupShakeLeavesFast = 0x80A819BC; // type:func
+ObjBean_ShakeLeavesFast = 0x80A81A00; // type:func
+ObjBean_SetupGrow = 0x80A81A88; // type:func
+ObjBean_Grow = 0x80A81A9C; // type:func
+ObjBean_SetupFlattenLeaves = 0x80A81B00; // type:func
+ObjBean_FlattenLeaves = 0x80A81B1C; // type:func
+ObjBean_SetupGrown = 0x80A81B98; // type:func
+ObjBean_Grown = 0x80A81BDC; // type:func
+ObjBean_Init = 0x80A81C38; // type:func
+ObjBean_Destroy = 0x80A81DF4; // type:func
+ObjBean_SetupWaitForBean = 0x80A81E70; // type:func
+ObjBean_WaitForBean = 0x80A81EA8; // type:func
+func_80B8FE00 = 0x80A81F24; // type:func
+func_80B8FE3C = 0x80A81F5C; // type:func
+func_80B8FE6C = 0x80A81F8C; // type:func
+func_80B8FEAC = 0x80A81FCC; // type:func
+func_80B8FF50 = 0x80A82070; // type:func
+func_80B8FF8C = 0x80A820A8; // type:func
+func_80B90010 = 0x80A8212C; // type:func
+func_80B90050 = 0x80A82168; // type:func
+ObjBean_SetupWaitForWater = 0x80A82228; // type:func
+ObjBean_WaitForWater = 0x80A82270; // type:func
+ObjBean_SetupGrowWaterPhase1 = 0x80A82368; // type:func
+ObjBean_GrowWaterPhase1 = 0x80A823A8; // type:func
+ObjBean_SetupGrowWaterPhase2 = 0x80A823EC; // type:func
+ObjBean_GrowWaterPhase2 = 0x80A82428; // type:func
+ObjBean_SetupGrowWaterPhase3 = 0x80A824D8; // type:func
+ObjBean_GrowWaterPhase3 = 0x80A82510; // type:func
+ObjBean_SetupGrowWaterPhase4 = 0x80A82624; // type:func
+ObjBean_GrowWaterPhase4 = 0x80A8265C; // type:func
+ObjBean_SetupGrowWaterPhase5 = 0x80A826F8; // type:func
+ObjBean_GrowWaterPhase5 = 0x80A82730; // type:func
+ObjBean_SetupWaitForPlayer = 0x80A82788; // type:func
+ObjBean_WaitForPlayer = 0x80A827B4; // type:func
+ObjBean_SetupFly = 0x80A82828; // type:func
+ObjBean_Fly = 0x80A8286C; // type:func
+ObjBean_SetupWaitForStepOff = 0x80A8299C; // type:func
+ObjBean_WaitForStepOff = 0x80A829C8; // type:func
+func_80B908EC = 0x80A82A08; // type:func
+func_80B90918 = 0x80A82A34; // type:func
+func_80B90970 = 0x80A82A90; // type:func
+func_80B909B0 = 0x80A82AD0; // type:func
+func_80B909F8 = 0x80A82B18; // type:func
+func_80B90A34 = 0x80A82B50; // type:func
+ObjBean_Update = 0x80A82BF0; // type:func
+ObjBean_DrawSoftSoilSpot = 0x80A82D80; // type:func
+ObjBean_DrawBeanstalk = 0x80A82E08; // type:func
+ObjBean_Draw = 0x80A82E94; // type:func
+ObjBombiwa_InitCollision = 0x80A833D0; // type:func
+ObjBombiwa_Init = 0x80A83428; // type:func
+ObjBombiwa_Destroy = 0x80A834F4; // type:func
+ObjBombiwa_Break = 0x80A83520; // type:func
+ObjBombiwa_Update = 0x80A83720; // type:func
+ObjBombiwa_Draw = 0x80A83830; // type:func
+ObjSwitch_RotateY = 0x80A83940; // type:func
+ObjSwitch_InitDynaPoly = 0x80A839C0; // type:func
+ObjSwitch_InitJntSphCollider = 0x80A83A18; // type:func
+ObjSwitch_InitTrisCollider = 0x80A83AB4; // type:func
+ObjSwitch_SpawnIce = 0x80A83BD4; // type:func
+ObjSwitch_SetOn = 0x80A83C48; // type:func
+ObjSwitch_SetOff = 0x80A83CF4; // type:func
+ObjSwitch_UpdateTwoTexScrollXY = 0x80A83D7C; // type:func
+ObjSwitch_Init = 0x80A83DC4; // type:func
+ObjSwitch_Destroy = 0x80A8405C; // type:func
+ObjSwitch_FloorUpInit = 0x80A84100; // type:func
+ObjSwitch_FloorUp = 0x80A84120; // type:func
+ObjSwitch_FloorPressInit = 0x80A84290; // type:func
+ObjSwitch_FloorPress = 0x80A842AC; // type:func
+ObjSwitch_FloorDownInit = 0x80A8436C; // type:func
+ObjSwitch_FloorDown = 0x80A84394; // type:func
+ObjSwitch_FloorReleaseInit = 0x80A844E0; // type:func
+ObjSwitch_FloorRelease = 0x80A844FC; // type:func
+ObjSwitch_EyeIsHit = 0x80A845E0; // type:func
+ObjSwitch_EyeFrozenInit = 0x80A84650; // type:func
+ObjSwitch_EyeInit = 0x80A84664; // type:func
+ObjSwitch_EyeOpenInit = 0x80A846BC; // type:func
+ObjSwitch_EyeOpen = 0x80A846D4; // type:func
+ObjSwitch_EyeClosingInit = 0x80A84740; // type:func
+ObjSwitch_EyeClosing = 0x80A8475C; // type:func
+ObjSwitch_EyeClosedInit = 0x80A847D8; // type:func
+ObjSwitch_EyeClosed = 0x80A847F4; // type:func
+ObjSwitch_EyeOpeningInit = 0x80A848B4; // type:func
+ObjSwitch_EyeOpening = 0x80A848D0; // type:func
+ObjSwitch_CrystalOffInit = 0x80A84960; // type:func
+ObjSwitch_CrystalOff = 0x80A8498C; // type:func
+ObjSwitch_CrystalTurnOnInit = 0x80A84AC4; // type:func
+ObjSwitch_CrystalTurnOn = 0x80A84AE0; // type:func
+ObjSwitch_CrystalOnInit = 0x80A84B68; // type:func
+ObjSwitch_CrystalOn = 0x80A84B98; // type:func
+ObjSwitch_CrystalTurnOffInit = 0x80A84C60; // type:func
+ObjSwitch_CrystalTurnOff = 0x80A84C7C; // type:func
+ObjSwitch_Update = 0x80A84D04; // type:func
+ObjSwitch_DrawFloor = 0x80A84E40; // type:func
+ObjSwitch_DrawFloorRusty = 0x80A84E84; // type:func
+ObjSwitch_DrawEye = 0x80A84EB4; // type:func
+ObjSwitch_DrawCrystal = 0x80A84FC8; // type:func
+ObjSwitch_Draw = 0x80A85224; // type:func
+ObjElevator_SetupAction = 0x80A85720; // type:func
+func_80B92B08 = 0x80A8572C; // type:func
+ObjElevator_Init = 0x80A85784; // type:func
+ObjElevator_Destroy = 0x80A85814; // type:func
+func_80B92C5C = 0x80A85848; // type:func
+func_80B92C80 = 0x80A8586C; // type:func
+func_80B92D20 = 0x80A8590C; // type:func
+func_80B92D44 = 0x80A85930; // type:func
+ObjElevator_Update = 0x80A859B4; // type:func
+ObjElevator_Draw = 0x80A859E8; // type:func
+ObjLift_SetupAction = 0x80A85AE0; // type:func
+ObjLift_InitDynaPoly = 0x80A85AEC; // type:func
+ObjLift_SpawnFragments = 0x80A85B44; // type:func
+ObjLift_Init = 0x80A85DC8; // type:func
+ObjLift_Destroy = 0x80A85EC8; // type:func
+ObjLift_SetupWait = 0x80A85EFC; // type:func
+ObjLift_Wait = 0x80A85F40; // type:func
+ObjLift_SetupShake = 0x80A86030; // type:func
+ObjLift_Shake = 0x80A8605C; // type:func
+ObjLift_SetupFall = 0x80A861A4; // type:func
+ObjLift_Fall = 0x80A86228; // type:func
+ObjLift_Update = 0x80A8632C; // type:func
+ObjLift_Draw = 0x80A86360; // type:func
+ObjHsblock_SetupAction = 0x80A86500; // type:func
+func_80B93B68 = 0x80A8650C; // type:func
+func_80B93BF0 = 0x80A86564; // type:func
+ObjHsblock_Init = 0x80A865E8; // type:func
+ObjHsblock_Destroy = 0x80A866B8; // type:func
+func_80B93D90 = 0x80A866EC; // type:func
+func_80B93DB0 = 0x80A8670C; // type:func
+func_80B93DF4 = 0x80A86750; // type:func
+func_80B93E38 = 0x80A86798; // type:func
+func_80B93E5C = 0x80A867BC; // type:func
+ObjHsblock_Update = 0x80A86864; // type:func
+ObjHsblock_Draw = 0x80A868B0; // type:func
+EnOkarinaTag_Destroy = 0x80A86AD0; // type:func
+EnOkarinaTag_Init = 0x80A86AE0; // type:func
+func_80ABEF2C = 0x80A86C48; // type:func
+func_80ABF0CC = 0x80A86DAC; // type:func
+func_80ABF28C = 0x80A86F6C; // type:func
+func_80ABF4C8 = 0x80A871B4; // type:func
+func_80ABF708 = 0x80A873F4; // type:func
+func_80ABF7CC = 0x80A874BC; // type:func
+EnOkarinaTag_Update = 0x80A87580; // type:func
+EnYabusameMark_Destroy = 0x80A87FD0; // type:func
+EnYabusameMark_Init = 0x80A87FFC; // type:func
+func_80B42F74 = 0x80A8813C; // type:func
+EnYabusameMark_Update = 0x80A88380; // type:func
+EnGoroiwa_UpdateCollider = 0x80A886A0; // type:func
+EnGoroiwa_InitCollider = 0x80A8870C; // type:func
+EnGoroiwa_UpdateFlags = 0x80A88774; // type:func
+EnGoroiwa_Vec3fNormalize = 0x80A88798; // type:func
+EnGoroiwa_SetSpeed = 0x80A8881C; // type:func
+EnGoroiwa_FaceNextWaypoint = 0x80A88844; // type:func
+EnGoroiwa_GetPrevWaypointDiff = 0x80A8891C; // type:func
+EnGoroiw_CheckEndOfPath = 0x80A88A78; // type:func
+EnGoroiwa_SetNextWaypoint = 0x80A88B2C; // type:func
+EnGoroiwa_ReverseDirection = 0x80A88B5C; // type:func
+EnGoroiwa_InitPath = 0x80A88B84; // type:func
+EnGoroiwa_TeleportToWaypoint = 0x80A88BC4; // type:func
+EnGoroiwa_InitRotation = 0x80A88C68; // type:func
+EnGoroiwa_GetAscendDirection = 0x80A88C84; // type:func
+EnGoroiwa_SpawnDust = 0x80A88D48; // type:func
+EnGoroiwa_SpawnWaterEffects = 0x80A88F38; // type:func
+EnGoroiwa_MoveAndFall = 0x80A8906C; // type:func
+EnGoroiwa_Move = 0x80A891A0; // type:func
+EnGoroiwa_MoveUpToNextWaypoint = 0x80A893CC; // type:func
+EnGoroiwa_MoveDownToNextWaypoint = 0x80A894EC; // type:func
+EnGoroiwa_UpdateRotation = 0x80A8984C; // type:func
+EnGoroiwa_NextWaypoint = 0x80A899EC; // type:func
+EnGoroiwa_SpawnFragments = 0x80A89A74; // type:func
+EnGoroiwa_Init = 0x80A89D90; // type:func
+EnGoroiwa_Destroy = 0x80A89EC0; // type:func
+EnGoroiwa_SetupRoll = 0x80A89EEC; // type:func
+EnGoroiwa_Roll = 0x80A89F2C; // type:func
+EnGoroiwa_SetupMoveAndFallToGround = 0x80A8A1B0; // type:func
+EnGoroiwa_MoveAndFallToGround = 0x80A8A224; // type:func
+EnGoroiwa_SetupWait = 0x80A8A2C4; // type:func
+EnGoroiwa_Wait = 0x80A8A320; // type:func
+EnGoroiwa_SetupMoveUp = 0x80A8A360; // type:func
+EnGoroiwa_MoveUp = 0x80A8A3B0; // type:func
+EnGoroiwa_SetupMoveDown = 0x80A8A470; // type:func
+EnGoroiwa_MoveDown = 0x80A8A4DC; // type:func
+EnGoroiwa_Update = 0x80A8A5A4; // type:func
+EnGoroiwa_Draw = 0x80A8A704; // type:func
+EnExRuppy_Init = 0x80A8AA60; // type:func
+EnExRuppy_Destroy = 0x80A8AE38; // type:func
+EnExRuppy_SpawnSparkles = 0x80A8AE48; // type:func
+EnExRuppy_DropIntoWater = 0x80A8B064; // type:func
+EnExRuppy_EnterWater = 0x80A8B144; // type:func
+EnExRuppy_Sink = 0x80A8B2B0; // type:func
+EnExRuppy_WaitInGame = 0x80A8B3B0; // type:func
+EnExRuppy_Kill = 0x80A8B508; // type:func
+EnExRuppy_WaitToBlowUp = 0x80A8B54C; // type:func
+EnExRuppy_WaitAsCollectible = 0x80A8B678; // type:func
+EnExRuppy_GalleryTarget = 0x80A8B6FC; // type:func
+EnExRuppy_Update = 0x80A8B75C; // type:func
+EnExRuppy_Draw = 0x80A8B7E8; // type:func
+EnToryo_Init = 0x80A8BB20; // type:func
+EnToryo_Destroy = 0x80A8BD64; // type:func
+EnToryo_TalkRespond = 0x80A8BD90; // type:func
+EnToryo_DoneTalking = 0x80A8BF84; // type:func
+EnToryo_ReactToExchangeItem = 0x80A8BFF0; // type:func
+EnToryo_GetTextId = 0x80A8C05C; // type:func
+EnToryo_HandleTalking = 0x80A8C128; // type:func
+EnToryo_Idle = 0x80A8C2D8; // type:func
+EnToryo_Update = 0x80A8C33C; // type:func
+EnToryo_Draw = 0x80A8C474; // type:func
+EnToryo_OverrideLimbDraw = 0x80A8C4D4; // type:func
+EnToryo_PostLimbDraw = 0x80A8C564; // type:func
+EnDaiku_ChangeAnim = 0x80A8C7B0; // type:func
+EnDaiku_Init = 0x80A8C864; // type:func
+EnDaiku_Destroy = 0x80A8CBAC; // type:func
+EnDaiku_UpdateTalking = 0x80A8CBD8; // type:func
+EnDaiku_UpdateText = 0x80A8CCF4; // type:func
+EnDaiku_TentIdle = 0x80A8CFC4; // type:func
+EnDaiku_Jailed = 0x80A8CFFC; // type:func
+EnDaiku_WaitFreedom = 0x80A8D0CC; // type:func
+EnDaiku_InitEscape = 0x80A8D130; // type:func
+EnDaiku_EscapeRotate = 0x80A8D338; // type:func
+EnDaiku_InitSubCamera = 0x80A8D3A4; // type:func
+EnDaiku_UpdateSubCamera = 0x80A8D530; // type:func
+EnDaiku_EscapeSuccess = 0x80A8D5E8; // type:func
+EnDaiku_EscapeRun = 0x80A8D724; // type:func
+EnDaiku_Update = 0x80A8D930; // type:func
+EnDaiku_Draw = 0x80A8DA48; // type:func
+EnDaiku_OverrideLimbDraw = 0x80A8DB70; // type:func
+EnDaiku_PostLimbDraw = 0x80A8DBF4; // type:func
+EnNwc_SetUpdate = 0x80A8DEF0; // type:func
+EnNwc_ChickNoop = 0x80A8DEFC; // type:func
+EnNwc_ChickBgCheck = 0x80A8DF10; // type:func
+EnNwc_ChickFall = 0x80A8E00C; // type:func
+EnNwc_UpdateChicks = 0x80A8E078; // type:func
+EnNwc_DrawChicks = 0x80A8E278; // type:func
+EnNwc_Init = 0x80A8E5D4; // type:func
+EnNwc_Destroy = 0x80A8E760; // type:func
+EnNwc_Idle = 0x80A8E78C; // type:func
+EnNwc_Update = 0x80A8E7AC; // type:func
+EnNwc_Draw = 0x80A8E800; // type:func
+EnBlkobj_SetupAction = 0x80A8E910; // type:func
+EnBlkobj_Init = 0x80A8E920; // type:func
+EnBlkobj_Destroy = 0x80A8E9D0; // type:func
+EnBlkobj_Wait = 0x80A8EA04; // type:func
+EnBlkobj_SpawnDarkLink = 0x80A8EA58; // type:func
+EnBlkobj_DarkLinkFight = 0x80A8EAD0; // type:func
+EnBlkobj_DoNothing = 0x80A8EBAC; // type:func
+EnBlkobj_Update = 0x80A8EBBC; // type:func
+EnBlkobj_DrawAlpha = 0x80A8EBE0; // type:func
+EnBlkobj_Draw = 0x80A8EC5C; // type:func
+ItemInbox_Init = 0x80A8EE70; // type:func
+ItemInbox_Destroy = 0x80A8EEA4; // type:func
+ItemInbox_Wait = 0x80A8EEB4; // type:func
+ItemInbox_Update = 0x80A8EEFC; // type:func
+ItemInbox_Draw = 0x80A8EF20; // type:func
+EnGe1_Init = 0x80A8EFD0; // type:func
+EnGe1_Destroy = 0x80A8F294; // type:func
+EnGe1_SetTalkAction = 0x80A8F2C0; // type:func
+EnGe1_SetAnimationIdle = 0x80A8F3A0; // type:func
+EnGe1_CheckAllCarpentersRescued = 0x80A8F424; // type:func
+EnGe1_KickPlayer = 0x80A8F460; // type:func
+EnGe1_SpotPlayer = 0x80A8F540; // type:func
+EnGe1_WatchForPlayerFrontOnly = 0x80A8F5A0; // type:func
+EnGe1_ChooseActionFromTextId = 0x80A8F658; // type:func
+EnGe1_SetNormalText = 0x80A8F6EC; // type:func
+EnGe1_WatchForAndSensePlayer = 0x80A8F71C; // type:func
+EnGe1_GetReaction_ValleyFloor = 0x80A8F7E8; // type:func
+EnGe1_WaitTillOpened_GTGGuard = 0x80A8F83C; // type:func
+EnGe1_Open_GTGGuard = 0x80A8F88C; // type:func
+EnGe1_SetupOpen_GTGGuard = 0x80A8F93C; // type:func
+EnGe1_RefuseEntryTooPoor_GTGGuard = 0x80A8F9FC; // type:func
+EnGe1_OfferOpen_GTGGuard = 0x80A8FA3C; // type:func
+EnGe1_RefuseOpenNoCard_GTGGuard = 0x80A8FB2C; // type:func
+EnGe1_CheckForCard_GTGGuard = 0x80A8FB70; // type:func
+EnGe1_WaitGateOpen_GateOp = 0x80A8FBD8; // type:func
+EnGe1_WaitUntilGateOpened_GateOp = 0x80A8FC4C; // type:func
+EnGe1_OpenGate_GateOp = 0x80A8FC9C; // type:func
+EnGe1_SetupOpenGate_GateOp = 0x80A8FD4C; // type:func
+EnGe1_CheckGate_GateOp = 0x80A8FE18; // type:func
+EnGe1_Talk_GateGuard = 0x80A8FE94; // type:func
+EnGe1_GetReaction_GateGuard = 0x80A8FED8; // type:func
+EnGe1_SetupWait_Archery = 0x80A8FF8C; // type:func
+EnGe1_WaitTillItemGiven_Archery = 0x80A8FFC4; // type:func
+EnGe1_BeginGiveItem_Archery = 0x80A900B8; // type:func
+EnGe1_TalkWinPrize_Archery = 0x80A90180; // type:func
+EnGe1_TalkTooPoor_Archery = 0x80A901E0; // type:func
+EnGe1_WaitDoNothing = 0x80A90244; // type:func
+EnGe1_BeginGame_Archery = 0x80A90254; // type:func
+EnGe1_TalkOfferPlay_Archery = 0x80A903F4; // type:func
+EnGe1_TalkNoPrize_Archery = 0x80A90454; // type:func
+EnGe1_TalkAfterGame_Archery = 0x80A904A0; // type:func
+EnGe1_TalkNoHorse_Archery = 0x80A905A4; // type:func
+EnGe1_Wait_Archery = 0x80A905E8; // type:func
+EnGe1_TurnToFacePlayer = 0x80A90680; // type:func
+EnGe1_LookAtPlayer = 0x80A90798; // type:func
+EnGe1_Update = 0x80A90874; // type:func
+EnGe1_CueUpAnimation = 0x80A909BC; // type:func
+EnGe1_StopFidget = 0x80A909FC; // type:func
+EnGe1_OverrideLimbDraw = 0x80A90A54; // type:func
+EnGe1_PostLimbDraw = 0x80A90BA8; // type:func
+EnGe1_Draw = 0x80A90C14; // type:func
+ObjBlockstop_Init = 0x80A91000; // type:func
+ObjBlockstop_Destroy = 0x80A9105C; // type:func
+ObjBlockstop_Update = 0x80A9106C; // type:func
+EnSda_Init = 0x80A911A0; // type:func
+EnSda_Destroy = 0x80A911B0; // type:func
+EnSda_Update = 0x80A911C0; // type:func
+EnSda_Draw = 0x80A911FC; // type:func
+func_80AF8F60 = 0x80A91290; // type:func
+func_80AF95C4 = 0x80A918F4; // type:func
+func_80AF9C70 = 0x80A91F70; // type:func
+EnClearTag_CreateDebrisEffect = 0x80A92890; // type:func
+EnClearTag_CreateFireEffect = 0x80A92988; // type:func
+EnClearTag_CreateSmokeEffect = 0x80A92A78; // type:func
+EnClearTag_CreateFlashEffect = 0x80A92B9C; // type:func
+EnClearTag_Destroy = 0x80A92C74; // type:func
+EnClearTag_Init = 0x80A92CA0; // type:func
+EnClearTag_CalculateFloorTangent = 0x80A92E64; // type:func
+EnClearTag_Update = 0x80A92F20; // type:func
+EnClearTag_Draw = 0x80A93CD4; // type:func
+EnClearTag_UpdateEffects = 0x80A94268; // type:func
+EnClearTag_DrawEffects = 0x80A94630; // type:func
+EnNiwLady_Init = 0x80A9DE30; // type:func
+EnNiwLady_Destroy = 0x80A9DF18; // type:func
+EnNiwLady_ChoseAnimation = 0x80A9DF44; // type:func
+func_80AB9F24 = 0x80A9E10C; // type:func
+func_80ABA21C = 0x80A9E408; // type:func
+func_80ABA244 = 0x80A9E434; // type:func
+func_80ABA654 = 0x80A9E7B4; // type:func
+func_80ABA778 = 0x80A9E8AC; // type:func
+func_80ABA878 = 0x80A9E980; // type:func
+func_80ABA9B8 = 0x80A9EAC4; // type:func
+func_80ABAA9C = 0x80A9EBA8; // type:func
+func_80ABAB08 = 0x80A9EC18; // type:func
+func_80ABAC00 = 0x80A9ED10; // type:func
+func_80ABAC84 = 0x80A9ED98; // type:func
+func_80ABAD38 = 0x80A9EE40; // type:func
+func_80ABAD7C = 0x80A9EE60; // type:func
+EnNiwLady_Update = 0x80A9EF24; // type:func
+EnNiwLady_EmptyDList = 0x80A9F18C; // type:func
+EnNiwLady_OverrideLimbDraw = 0x80A9F1B0; // type:func
+EnNiwLady_Draw = 0x80A9F30C; // type:func
+EnGm_Init = 0x80A9F730; // type:func
+EnGm_Destroy = 0x80A9F790; // type:func
+func_80A3D7C8 = 0x80A9F7BC; // type:func
+func_80A3D838 = 0x80A9F82C; // type:func
+EnGm_UpdateEye = 0x80A9F9CC; // type:func
+EnGm_SetTextID = 0x80A9FA44; // type:func
+func_80A3DB04 = 0x80A9FAF8; // type:func
+func_80A3DBF4 = 0x80A9FBE8; // type:func
+func_80A3DC44 = 0x80A9FC3C; // type:func
+func_80A3DD7C = 0x80A9FD78; // type:func
+EnGm_ProcessChoiceIndex = 0x80A9FE10; // type:func
+func_80A3DF00 = 0x80A9FF00; // type:func
+func_80A3DF60 = 0x80A9FF64; // type:func
+func_80A3DFBC = 0x80A9FFC4; // type:func
+EnGm_Update = 0x80AA0078; // type:func
+func_80A3E090 = 0x80AA009C; // type:func
+EnGm_Draw = 0x80AA01FC; // type:func
+EnMs_SetOfferText = 0x80AA0460; // type:func
+EnMs_Init = 0x80AA04DC; // type:func
+EnMs_Destroy = 0x80AA0600; // type:func
+EnMs_Wait = 0x80AA062C; // type:func
+EnMs_Talk = 0x80AA06D8; // type:func
+EnMs_Sell = 0x80AA07F4; // type:func
+EnMs_TalkAfterPurchase = 0x80AA0890; // type:func
+EnMs_Update = 0x80AA08F0; // type:func
+EnMs_Draw = 0x80AA09E8; // type:func
+func_80A6E3A0 = 0x80AA0B50; // type:func
+EnHs_Init = 0x80AA0B5C; // type:func
+EnHs_Destroy = 0x80AA0CA0; // type:func
+func_80A6E53C = 0x80AA0CCC; // type:func
+func_80A6E5EC = 0x80AA0D80; // type:func
+func_80A6E630 = 0x80AA0DC4; // type:func
+func_80A6E6B0 = 0x80AA0E44; // type:func
+func_80A6E6D8 = 0x80AA0E6C; // type:func
+func_80A6E70C = 0x80AA0EA4; // type:func
+func_80A6E740 = 0x80AA0EDC; // type:func
+func_80A6E7BC = 0x80AA0F5C; // type:func
+func_80A6E8CC = 0x80AA106C; // type:func
+func_80A6E9AC = 0x80AA1148; // type:func
+EnHs_Update = 0x80AA1290; // type:func
+EnHs_OverrideLimbDraw = 0x80AA13FC; // type:func
+EnHs_PostLimbDraw = 0x80AA14B8; // type:func
+EnHs_Draw = 0x80AA14F8; // type:func
+BgInGate_SetupAction = 0x80AA16F0; // type:func
+BgInGate_Init = 0x80AA16FC; // type:func
+BgInGate_Destroy = 0x80AA1818; // type:func
+func_80892890 = 0x80AA184C; // type:func
+BgInGate_DoNothing = 0x80AA194C; // type:func
+BgInGate_Update = 0x80AA195C; // type:func
+BgInGate_Draw = 0x80AA1980; // type:func
+EnKanban_SetFloorRot = 0x80AA1A80; // type:func
+EnKanban_Init = 0x80AA1B3C; // type:func
+EnKanban_Destroy = 0x80AA1C64; // type:func
+EnKanban_Message = 0x80AA1C9C; // type:func
+EnKanban_Update = 0x80AA1D54; // type:func
+EnKanban_Draw = 0x80AA35D0; // type:func
+EnHeishi3_Init = 0x80AA4BD0; // type:func
+EnHeishi3_Destroy = 0x80AA4CFC; // type:func
+EnHeishi3_SetupGuardType = 0x80AA4D28; // type:func
+EnHeishi3_StandSentinelInGrounds = 0x80AA4DD8; // type:func
+EnHeishi3_StandSentinelInCastle = 0x80AA4F34; // type:func
+EnHeishi3_CatchStart = 0x80AA50A4; // type:func
+func_80A55BD4 = 0x80AA514C; // type:func
+EnHeishi3_ResetAnimationToIdle = 0x80AA51E4; // type:func
+func_80A55D00 = 0x80AA5278; // type:func
+EnHeishi3_Update = 0x80AA5328; // type:func
+EnHeishi3_OverrideLimbDraw = 0x80AA5408; // type:func
+EnHeishi3_Draw = 0x80AA5470; // type:func
+EnSyatekiNiw_Init = 0x80AA55A0; // type:func
+EnSyatekiNiw_Destroy = 0x80AA56E8; // type:func
+EnSyatekiNiw_UpdateRotations = 0x80AA5714; // type:func
+EnSyatekiNiw_SetupDefault = 0x80AA5A70; // type:func
+EnSyatekiNiw_Default = 0x80AA5AFC; // type:func
+EnSyatekiNiw_SetupArchery = 0x80AA602C; // type:func
+EnSyatekiNiw_Archery = 0x80AA60E4; // type:func
+EnSyatekiNiw_ExitArchery = 0x80AA6560; // type:func
+EnSyatekiNiw_SetupRemove = 0x80AA6580; // type:func
+EnSyatekiNiw_Remove = 0x80AA6678; // type:func
+EnSyatekiNiw_CheckHit = 0x80AA6834; // type:func
+EnSyatekiNiw_Update = 0x80AA6904; // type:func
+SyatekiNiw_OverrideLimbDraw = 0x80AA6C74; // type:func
+EnSyatekiNiw_Draw = 0x80AA6DA4; // type:func
+EnSyatekiNiw_SpawnFeather = 0x80AA6E50; // type:func
+EnSyatekiNiw_UpdateEffects = 0x80AA6F40; // type:func
+EnSyatekiNiw_DrawEffects = 0x80AA70FC; // type:func
+EnAttackNiw_Init = 0x80AA7630; // type:func
+EnAttackNiw_Destroy = 0x80AA7764; // type:func
+func_809B5268 = 0x80AA7798; // type:func
+func_809B55EC = 0x80AA7B20; // type:func
+func_809B5670 = 0x80AA7BA4; // type:func
+func_809B59B0 = 0x80AA7EE4; // type:func
+func_809B5C18 = 0x80AA8154; // type:func
+EnAttackNiw_Update = 0x80AA8218; // type:func
+func_809B5F98 = 0x80AA84DC; // type:func
+EnAttackNiw_Draw = 0x80AA8634; // type:func
+BgSpot01Idosoko_SetupAction = 0x80AA8890; // type:func
+BgSpot01Idosoko_Init = 0x80AA889C; // type:func
+BgSpot01Idosoko_Destroy = 0x80AA893C; // type:func
+func_808ABF54 = 0x80AA8970; // type:func
+BgSpot01Idosoko_Update = 0x80AA8980; // type:func
+BgSpot01Idosoko_Draw = 0x80AA89A4; // type:func
+func_80AF5560 = 0x80AA8AA0; // type:func
+EnSa_GetTextId = 0x80AA8B20; // type:func
+EnSa_UpdateTalkState = 0x80AA8C34; // type:func
+func_80AF57D8 = 0x80AA8D18; // type:func
+func_80AF5894 = 0x80AA8DD8; // type:func
+func_80AF58B8 = 0x80AA8E00; // type:func
+func_80AF594C = 0x80AA8E94; // type:func
+func_80AF59E0 = 0x80AA8F28; // type:func
+func_80AF5A74 = 0x80AA8FBC; // type:func
+func_80AF5B10 = 0x80AA9058; // type:func
+func_80AF5BA4 = 0x80AA90EC; // type:func
+func_80AF5C40 = 0x80AA9188; // type:func
+func_80AF5CD4 = 0x80AA921C; // type:func
+func_80AF5CE4 = 0x80AA9234; // type:func
+EnSa_ChangeAnim = 0x80AA92DC; // type:func
+func_80AF5DFC = 0x80AA934C; // type:func
+func_80AF5F34 = 0x80AA9484; // type:func
+func_80AF603C = 0x80AA958C; // type:func
+func_80AF609C = 0x80AA95EC; // type:func
+func_80AF6130 = 0x80AA9688; // type:func
+func_80AF6170 = 0x80AA96CC; // type:func
+EnSa_Init = 0x80AA9710; // type:func
+EnSa_Destroy = 0x80AA9980; // type:func
+func_80AF6448 = 0x80AA99AC; // type:func
+func_80AF67D0 = 0x80AA9D38; // type:func
+func_80AF683C = 0x80AA9DAC; // type:func
+func_80AF68E4 = 0x80AA9E54; // type:func
+func_80AF6B20 = 0x80AAA094; // type:func
+EnSa_Update = 0x80AAA154; // type:func
+EnSa_OverrideLimbDraw = 0x80AAA2E4; // type:func
+EnSa_PostLimbDraw = 0x80AAA48C; // type:func
+EnSa_Draw = 0x80AAA4E8; // type:func
+EnWonderTalk_Destroy = 0x80AAAD10; // type:func
+EnWonderTalk_Init = 0x80AAAD20; // type:func
+func_80B391CC = 0x80AAADC8; // type:func
+func_80B3943C = 0x80AAAF58; // type:func
+func_80B395F0 = 0x80AAB0AC; // type:func
+EnWonderTalk_Update = 0x80AAB29C; // type:func
+BgGjyoBridge_Init = 0x80AAB3A0; // type:func
+BgGjyoBridge_Destroy = 0x80AAB458; // type:func
+func_808787A4 = 0x80AAB48C; // type:func
+BgGjyoBridge_TriggerCutscene = 0x80AAB49C; // type:func
+BgGjyoBridge_SpawnBridge = 0x80AAB5F4; // type:func
+BgGjyoBridge_Update = 0x80AAB670; // type:func
+BgGjyoBridge_Draw = 0x80AAB694; // type:func
+EnDs_Init = 0x80AAB890; // type:func
+EnDs_Destroy = 0x80AAB960; // type:func
+EnDs_Talk = 0x80AAB970; // type:func
+EnDs_TalkNoEmptyBottle = 0x80AAB9C0; // type:func
+EnDs_TalkAfterGiveOddPotion = 0x80AABA2C; // type:func
+EnDs_DisplayOddPotionText = 0x80AABA88; // type:func
+EnDs_GiveOddPotion = 0x80AABAE8; // type:func
+EnDs_TalkAfterBrewOddPotion = 0x80AABB54; // type:func
+EnDs_BrewOddPotion3 = 0x80AABBD4; // type:func
+EnDs_BrewOddPotion2 = 0x80AABC78; // type:func
+EnDs_BrewOddPotion1 = 0x80AABCCC; // type:func
+EnDs_OfferOddPotion = 0x80AABD6C; // type:func
+EnDs_CheckRupeesAndBottle = 0x80AABE38; // type:func
+EnDs_GiveBluePotion = 0x80AABE88; // type:func
+EnDs_OfferBluePotion = 0x80AABEEC; // type:func
+EnDs_Wait = 0x80AAC024; // type:func
+EnDs_Update = 0x80AAC1A8; // type:func
+EnDs_OverrideLimbDraw = 0x80AAC2B0; // type:func
+EnDs_PostLimbDraw = 0x80AAC2F8; // type:func
+EnDs_Draw = 0x80AAC338; // type:func
+EnMk_Init = 0x80AAC4B0; // type:func
+EnMk_Destroy = 0x80AAC5C8; // type:func
+func_80AACA40 = 0x80AAC5F4; // type:func
+func_80AACA94 = 0x80AAC644; // type:func
+func_80AACB14 = 0x80AAC6CC; // type:func
+func_80AACB6C = 0x80AAC728; // type:func
+func_80AACBAC = 0x80AAC764; // type:func
+func_80AACC04 = 0x80AAC7BC; // type:func
+func_80AACCA0 = 0x80AAC858; // type:func
+func_80AACD48 = 0x80AAC900; // type:func
+func_80AACE2C = 0x80AAC9E4; // type:func
+func_80AACEE8 = 0x80AACAA0; // type:func
+func_80AACFA0 = 0x80AACB58; // type:func
+func_80AAD014 = 0x80AACBD0; // type:func
+EnMk_Wait = 0x80AACC3C; // type:func
+EnMk_Update = 0x80AACE90; // type:func
+EnMk_OverrideLimbDraw = 0x80AAD0DC; // type:func
+EnMk_PostLimbDraw = 0x80AAD124; // type:func
+EnMk_Draw = 0x80AAD164; // type:func
+EnBomBowlMan_Init = 0x80AAD340; // type:func
+EnBomBowlMan_Destroy = 0x80AAD500; // type:func
+EnBomBowlMan_SetupWaitAsleep = 0x80AAD510; // type:func
+EnBomBowlMan_WaitAsleep = 0x80AAD598; // type:func
+EnBomBowlMan_TalkAsleep = 0x80AAD64C; // type:func
+EnBomBowlMan_WakeUp = 0x80AAD6C4; // type:func
+EnBomBowlMan_BlinkAwake = 0x80AAD748; // type:func
+EnBomBowlMan_CheckBeatenDC = 0x80AAD844; // type:func
+EnBomBowlMan_WaitNotBeatenDC = 0x80AAD970; // type:func
+EnBomBowlMan_TalkNotBeatenDC = 0x80AAD9CC; // type:func
+EnBomBowlMan_SetupRunGame = 0x80AADA3C; // type:func
+EnBomBowlMan_RunGame = 0x80AADAC0; // type:func
+EnBomBowlMan_HandlePlayChoice = 0x80AADCD0; // type:func
+func_809C41FC = 0x80AADE8C; // type:func
+EnBomBowlMan_SetupChooseShowPrize = 0x80AADFA8; // type:func
+EnBomBowlMan_ChooseShowPrize = 0x80AAE0AC; // type:func
+EnBomBowlMan_BeginPlayGame = 0x80AAE2F4; // type:func
+EnBomBowlMan_Update = 0x80AAE3B0; // type:func
+EnBomBowlMan_OverrideLimbDraw = 0x80AAE528; // type:func
+EnBomBowlMan_Draw = 0x80AAE570; // type:func
+EnBomBowlPit_Init = 0x80AAE880; // type:func
+EnBomBowlPit_Destroy = 0x80AAE898; // type:func
+EnBomBowlPit_SetupDetectHit = 0x80AAE8A8; // type:func
+EnBomBowlPit_DetectHit = 0x80AAE8D4; // type:func
+EnBomBowlPit_CameraDollyIn = 0x80AAEBCC; // type:func
+EnBomBowlPit_SpawnPrize = 0x80AAEDA8; // type:func
+EnBomBowlPit_SetupGivePrize = 0x80AAEE38; // type:func
+EnBomBowlPit_GivePrize = 0x80AAEEF0; // type:func
+EnBomBowlPit_WaitTillPrizeGiven = 0x80AAEFF4; // type:func
+EnBomBowlPit_Reset = 0x80AAF050; // type:func
+EnBomBowlPit_Update = 0x80AAF0D0; // type:func
+EnOwl_Init = 0x80AAF1F0; // type:func
+EnOwl_Destroy = 0x80AAF5D4; // type:func
+EnOwl_LookAtLink = 0x80AAF600; // type:func
+EnOwl_CheckInitTalk = 0x80AAF63C; // type:func
+func_80ACA558 = 0x80AAF7A8; // type:func
+func_80ACA5C8 = 0x80AAF81C; // type:func
+func_80ACA62C = 0x80AAF87C; // type:func
+func_80ACA690 = 0x80AAF8C8; // type:func
+func_80ACA6C0 = 0x80AAF8F8; // type:func
+func_80ACA71C = 0x80AAF954; // type:func
+func_80ACA76C = 0x80AAF9A0; // type:func
+func_80ACA7E0 = 0x80AAFA14; // type:func
+EnOwl_ConfirmKokiriMessage = 0x80AAFAC0; // type:func
+EnOwl_WaitOutsideKokiri = 0x80AAFB60; // type:func
+func_80ACA998 = 0x80AAFBD8; // type:func
+func_80ACAA54 = 0x80AAFC98; // type:func
+func_80ACAAC0 = 0x80AAFD08; // type:func
+EnOwl_WaitHyruleCastle = 0x80AAFD78; // type:func
+func_80ACAB88 = 0x80AAFDDC; // type:func
+func_80ACAC6C = 0x80AAFEC4; // type:func
+EnOwl_WaitKakariko = 0x80AAFF34; // type:func
+func_80ACAD34 = 0x80AAFF98; // type:func
+func_80ACADF0 = 0x80AB0058; // type:func
+EnOwl_WaitGerudo = 0x80AB00C8; // type:func
+func_80ACAEB8 = 0x80AB012C; // type:func
+func_80ACAF74 = 0x80AB01EC; // type:func
+EnOwl_WaitLakeHylia = 0x80AB025C; // type:func
+func_80ACB03C = 0x80AB02C0; // type:func
+EnOwl_WaitZoraRiver = 0x80AB0334; // type:func
+func_80ACB148 = 0x80AB03D4; // type:func
+EnOwl_WaitHyliaShortcut = 0x80AB0434; // type:func
+func_80ACB22C = 0x80AB04C0; // type:func
+func_80ACB274 = 0x80AB050C; // type:func
+EnOwl_WaitDeathMountainShortcut = 0x80AB0550; // type:func
+func_80ACB344 = 0x80AB05E4; // type:func
+func_80ACB3E0 = 0x80AB0684; // type:func
+func_80ACB440 = 0x80AB06EC; // type:func
+func_80ACB4FC = 0x80AB07AC; // type:func
+EnOwl_WaitLWPreSaria = 0x80AB081C; // type:func
+func_80ACB5C4 = 0x80AB0880; // type:func
+func_80ACB680 = 0x80AB0940; // type:func
+EnOwl_WaitLWPostSaria = 0x80AB09B0; // type:func
+func_80ACB748 = 0x80AB0A14; // type:func
+func_80ACB904 = 0x80AB0BD0; // type:func
+func_80ACB994 = 0x80AB0C68; // type:func
+EnOwl_WaitDefault = 0x80AB0D00; // type:func
+func_80ACBAB8 = 0x80AB0D94; // type:func
+func_80ACBC0C = 0x80AB0EE8; // type:func
+func_80ACBD4C = 0x80AB1024; // type:func
+func_80ACBEA0 = 0x80AB1178; // type:func
+func_80ACBF50 = 0x80AB1228; // type:func
+func_80ACC00C = 0x80AB12E4; // type:func
+func_80ACC23C = 0x80AB14A8; // type:func
+func_80ACC30C = 0x80AB1574; // type:func
+func_80ACC390 = 0x80AB15F8; // type:func
+func_80ACC460 = 0x80AB16C8; // type:func
+func_80ACC540 = 0x80AB17A8; // type:func
+func_80ACC5CC = 0x80AB1834; // type:func
+func_80ACC624 = 0x80AB188C; // type:func
+EnOwl_Update = 0x80AB1908; // type:func
+EnOwl_OverrideLimbDraw = 0x80AB2058; // type:func
+EnOwl_PostLimbUpdate = 0x80AB2184; // type:func
+EnOwl_Draw = 0x80AB2208; // type:func
+EnOwl_ChangeMode = 0x80AB22D4; // type:func
+func_80ACD130 = 0x80AB234C; // type:func
+func_80ACD1C4 = 0x80AB23E0; // type:func
+func_80ACD220 = 0x80AB2440; // type:func
+func_80ACD2CC = 0x80AB24EC; // type:func
+func_80ACD4D4 = 0x80AB26F4; // type:func
+EnIshi_InitCollider = 0x80AB2D90; // type:func
+EnIshi_SnapToFloor = 0x80AB2E08; // type:func
+EnIshi_SpawnFragmentsSmall = 0x80AB2EAC; // type:func
+EnIshi_SpawnFragmentsLarge = 0x80AB3128; // type:func
+EnIshi_SpawnDustSmall = 0x80AB3414; // type:func
+EnIshi_SpawnDustLarge = 0x80AB3508; // type:func
+EnIshi_DropCollectible = 0x80AB35FC; // type:func
+EnIshi_Fall = 0x80AB366C; // type:func
+func_80A7ED94 = 0x80AB36A0; // type:func
+EnIshi_SpawnBugs = 0x80AB3724; // type:func
+EnIshi_Init = 0x80AB37E0; // type:func
+EnIshi_Destroy = 0x80AB397C; // type:func
+EnIshi_SetupWait = 0x80AB39A8; // type:func
+EnIshi_Wait = 0x80AB39BC; // type:func
+EnIshi_SetupLiftedUp = 0x80AB3C14; // type:func
+EnIshi_LiftedUp = 0x80AB3C3C; // type:func
+EnIshi_SetupFly = 0x80AB3D10; // type:func
+EnIshi_Fly = 0x80AB3E3C; // type:func
+EnIshi_Update = 0x80AB41A8; // type:func
+EnIshi_DrawSmall = 0x80AB41CC; // type:func
+EnIshi_DrawLarge = 0x80AB41FC; // type:func
+EnIshi_Draw = 0x80AB42A4; // type:func
+ObjHana_Init = 0x80ABBEE0; // type:func
+ObjHana_Destroy = 0x80ABBFDC; // type:func
+ObjHana_Update = 0x80ABC028; // type:func
+ObjHana_Draw = 0x80ABC098; // type:func
+ObjLightswitch_InitCollider = 0x80ABC1F0; // type:func
+ObjLightswitch_SetSwitchFlag = 0x80ABC28C; // type:func
+ObjLightswitch_ClearSwitchFlag = 0x80ABC350; // type:func
+ObjLightswitch_SpawnDisappearEffects = 0x80ABC3D0; // type:func
+ObjLightswitch_Init = 0x80ABC5F8; // type:func
+ObjLightswitch_Destroy = 0x80ABC78C; // type:func
+ObjLightswitch_SetupOff = 0x80ABC7B8; // type:func
+ObjLightswitch_Off = 0x80ABC7EC; // type:func
+ObjLightswitch_SetupTurnOn = 0x80ABC8CC; // type:func
+ObjLightswitch_TurnOn = 0x80ABC8F0; // type:func
+ObjLightswitch_SetupOn = 0x80ABC9E4; // type:func
+ObjLightswitch_On = 0x80ABCA20; // type:func
+ObjLightswitch_SetupTurnOff = 0x80ABCB34; // type:func
+ObjLightswitch_TurnOff = 0x80ABCB60; // type:func
+ObjLightswitch_SetupDisappearDelay = 0x80ABCC50; // type:func
+ObjLightswitch_DisappearDelay = 0x80ABCC6C; // type:func
+ObjLightswitch_SetupDisappear = 0x80ABCCB4; // type:func
+ObjLightswitch_Disappear = 0x80ABCCD0; // type:func
+ObjLightswitch_Update = 0x80ABCD14; // type:func
+ObjLightswitch_DrawOpa = 0x80ABCDF8; // type:func
+ObjLightswitch_DrawXlu = 0x80ABD120; // type:func
+ObjLightswitch_Draw = 0x80ABD3D0; // type:func
+ObjMure2_SetPosShrubCircle = 0x80ABD620; // type:func
+ObjMure2_SetPosShrubScattered = 0x80ABD73C; // type:func
+ObjMure2_SetPosRockCircle = 0x80ABD83C; // type:func
+ObjMure2_SetActorSpawnParams = 0x80ABD948; // type:func
+ObjMure2_SpawnActors = 0x80ABD99C; // type:func
+ObjMure2_CleanupAndDie = 0x80ABDAF8; // type:func
+func_80B9A534 = 0x80ABDBF8; // type:func
+ObjMure2_Init = 0x80ABDC8C; // type:func
+ObjMure2_SetupWait = 0x80ABDCEC; // type:func
+ObjMure2_Wait = 0x80ABDD00; // type:func
+func_80B9A658 = 0x80ABDD24; // type:func
+func_80B9A668 = 0x80ABDD38; // type:func
+func_80B9A6E8 = 0x80ABDDB8; // type:func
+func_80B9A6F8 = 0x80ABDDCC; // type:func
+ObjMure2_Update = 0x80ABDE5C; // type:func
+EnGo_SetupAction = 0x80ABE040; // type:func
+EnGo_GetTextID = 0x80ABE04C; // type:func
+EnGo_UpdateTalkState = 0x80ABE3DC; // type:func
+EnGo_UpdateTalking = 0x80ABE7FC; // type:func
+EnGo_ChangeAnim = 0x80ABE8BC; // type:func
+EnGo_IsActorSpawned = 0x80ABE96C; // type:func
+EnGo_GetPlayerTrackingYOffset = 0x80ABEACC; // type:func
+func_80A3F060 = 0x80ABEB44; // type:func
+func_80A3F0E4 = 0x80ABEBC8; // type:func
+EnGo_IsCameraModified = 0x80ABEC40; // type:func
+EnGo_ReverseAnimation = 0x80ABED44; // type:func
+EnGo_UpdateShadow = 0x80ABED5C; // type:func
+EnGo_FollowPath = 0x80ABEDE8; // type:func
+EnGo_SetMovedPos = 0x80ABEFA4; // type:func
+EnGo_SpawnDust = 0x80ABF07C; // type:func
+EnGo_IsRollingOnGround = 0x80ABF2A8; // type:func
+func_80A3F908 = 0x80ABF3F4; // type:func
+EnGo_Init = 0x80ABF624; // type:func
+EnGo_Destroy = 0x80ABF974; // type:func
+func_80A3FEB4 = 0x80ABF9B4; // type:func
+EnGo_StopRolling = 0x80ABF9F8; // type:func
+func_80A4008C = 0x80ABFB8C; // type:func
+EnGo_GoronLinkRolling = 0x80ABFC1C; // type:func
+EnGo_FireGenericActionFunc = 0x80ABFD14; // type:func
+EnGo_CurledUp = 0x80ABFD24; // type:func
+EnGo_WakeUp = 0x80ABFE24; // type:func
+func_80A40494 = 0x80ABFFA0; // type:func
+func_80A405CC = 0x80AC00D8; // type:func
+EnGo_BiggoronActionFunc = 0x80AC01EC; // type:func
+func_80A408D8 = 0x80AC03E4; // type:func
+func_80A40A54 = 0x80AC0560; // type:func
+func_80A40B1C = 0x80AC0628; // type:func
+EnGo_GetItem = 0x80AC0680; // type:func
+func_80A40C78 = 0x80AC0788; // type:func
+EnGo_Eyedrops = 0x80AC0870; // type:func
+func_80A40DCC = 0x80AC08E0; // type:func
+EnGo_Update = 0x80AC0964; // type:func
+EnGo_DrawCurledUp = 0x80AC0A74; // type:func
+EnGo_DrawRolling = 0x80AC0B40; // type:func
+EnGo_OverrideLimbDraw = 0x80AC0C6C; // type:func
+EnGo_PostLimbDraw = 0x80AC0E88; // type:func
+EnGo_Draw = 0x80AC0EE4; // type:func
+EnGo_SpawnEffectDust = 0x80AC1084; // type:func
+EnGo_UpdateEffects = 0x80AC1128; // type:func
+EnGo_DrawEffects = 0x80AC1234; // type:func
+EnFu_Init = 0x80AC2680; // type:func
+EnFu_Destroy = 0x80AC2794; // type:func
+func_80A1D94C = 0x80AC27C0; // type:func
+func_80A1DA04 = 0x80AC287C; // type:func
+EnFu_WaitChild = 0x80AC2918; // type:func
+func_80A1DB60 = 0x80AC29DC; // type:func
+func_80A1DBA0 = 0x80AC2A1C; // type:func
+func_80A1DBD4 = 0x80AC2A54; // type:func
+EnFu_WaitForPlayback = 0x80AC2BC4; // type:func
+EnFu_TeachSong = 0x80AC2C2C; // type:func
+EnFu_WaitAdult = 0x80AC2CA8; // type:func
+EnFu_Update = 0x80AC2DF8; // type:func
+EnFu_OverrideLimbDraw = 0x80AC2FA0; // type:func
+EnFu_PostLimbDraw = 0x80AC30FC; // type:func
+EnFu_Draw = 0x80AC313C; // type:func
+EnChanger_Destroy = 0x80AC33D0; // type:func
+EnChanger_Init = 0x80AC33E0; // type:func
+EnChanger_Wait = 0x80AC38FC; // type:func
+EnChanger_OpenChests = 0x80AC39A0; // type:func
+EnChanger_SetHeartPieceFlag = 0x80AC3B50; // type:func
+EnChanger_Update = 0x80AC3BA0; // type:func
+BgJyaMegami_InitDynaPoly = 0x80AC3DB0; // type:func
+BgJyaMegami_InitCollider = 0x80AC3E08; // type:func
+BgJyaMegami_SpawnEffect = 0x80AC3E5C; // type:func
+BgJyaMegami_SetupSpawnEffect = 0x80AC40A0; // type:func
+BgJyaMegami_Init = 0x80AC419C; // type:func
+BgJyaMegami_Destroy = 0x80AC4230; // type:func
+BgJyaMegami_SetupDetectLight = 0x80AC4278; // type:func
+BgJyaMegami_DetectLight = 0x80AC4294; // type:func
+BgJyaMegami_SetupExplode = 0x80AC4420; // type:func
+BgJyaMegami_Explode = 0x80AC44B8; // type:func
+BgJyaMegami_Update = 0x80AC4840; // type:func
+BgJyaMegami_DrawFace = 0x80AC4864; // type:func
+BgJyaMegami_DrawExplode = 0x80AC49A8; // type:func
+BgJyaMegami_Draw = 0x80AC4B74; // type:func
+BgJyaLift_InitDynapoly = 0x80AC4FA0; // type:func
+BgJyaLift_Init = 0x80AC4FF8; // type:func
+BgJyaLift_Destroy = 0x80AC50B4; // type:func
+BgJyaLift_SetInitPosY = 0x80AC50F8; // type:func
+BgJyaLift_DelayMove = 0x80AC511C; // type:func
+BgJyaLift_SetupMove = 0x80AC51A0; // type:func
+BgJyaLift_Move = 0x80AC51B4; // type:func
+BgJyaLift_SetFinalPosY = 0x80AC52D8; // type:func
+BgJyaLift_Update = 0x80AC52F0; // type:func
+BgJyaLift_Draw = 0x80AC53E0; // type:func
+BgJyaBigmirror_SetRoomFlag = 0x80AC54F0; // type:func
+BgJyaBigmirror_HandleCobra = 0x80AC5560; // type:func
+BgJyaBigmirror_SetBombiwaFlag = 0x80AC56F8; // type:func
+BgJyaBigmirror_HandleMirRay = 0x80AC574C; // type:func
+BgJyaBigmirror_Init = 0x80AC58F4; // type:func
+BgJyaBigmirror_Destroy = 0x80AC5978; // type:func
+BgJyaBigmirror_Update = 0x80AC5998; // type:func
+BgJyaBigmirror_DrawLightBeam = 0x80AC59E8; // type:func
+BgJyaBigmirror_Draw = 0x80AC5B74; // type:func
+BgJyaBombchuiwa_SetupCollider = 0x80AC5D40; // type:func
+BgJyaBombchuiwa_SetDrawFlags = 0x80AC5D94; // type:func
+BgJyaBombchuiwa_Init = 0x80AC5DB8; // type:func
+BgJyaBombchuiwa_Destroy = 0x80AC5E38; // type:func
+BgJyaBombchuiwa_Break = 0x80AC5E64; // type:func
+BgJyaBombchuiwa_SetupWaitForExplosion = 0x80AC60F0; // type:func
+BgJyaBombchuiwa_WaitForExplosion = 0x80AC6128; // type:func
+BgJyaBombchuiwa_CleanUpAfterExplosion = 0x80AC620C; // type:func
+func_808949B8 = 0x80AC6264; // type:func
+BgJyaBombchuiwa_SpawnLightRay = 0x80AC62F0; // type:func
+BgJyaBombchuiwa_Update = 0x80AC6368; // type:func
+BgJyaBombchuiwa_DrawRock = 0x80AC6394; // type:func
+BgJyaBombchuiwa_DrawLight = 0x80AC641C; // type:func
+BgJyaBombchuiwa_Draw = 0x80AC6678; // type:func
+BgJyaAmishutter_InitDynaPoly = 0x80AC6880; // type:func
+BgJyaAmishutter_Init = 0x80AC68D8; // type:func
+BgJyaAmishutter_Destroy = 0x80AC6920; // type:func
+BgJyaAmishutter_SetupWaitForPlayer = 0x80AC6954; // type:func
+BgJyaAmishutter_WaitForPlayer = 0x80AC6968; // type:func
+func_80893428 = 0x80AC69C4; // type:func
+func_80893438 = 0x80AC69D8; // type:func
+func_808934B0 = 0x80AC6A50; // type:func
+func_808934C0 = 0x80AC6A64; // type:func
+func_808934FC = 0x80AC6AA0; // type:func
+func_8089350C = 0x80AC6AB4; // type:func
+BgJyaAmishutter_Update = 0x80AC6B18; // type:func
+BgJyaAmishutter_Draw = 0x80AC6B40; // type:func
+BgJyaBombiwa_SetupDynaPoly = 0x80AC6C10; // type:func
+BgJyaBombiwa_InitCollider = 0x80AC6C68; // type:func
+BgJyaBombiwa_Init = 0x80AC6CBC; // type:func
+BgJyaBombiwa_Destroy = 0x80AC6D3C; // type:func
+BgJyaBombiwa_Break = 0x80AC6D84; // type:func
+BgJyaBombiwa_Update = 0x80AC7018; // type:func
+BgJyaBombiwa_Draw = 0x80AC70A8; // type:func
+func_808B7710 = 0x80AC71D0; // type:func
+func_808B7770 = 0x80AC722C; // type:func
+BgSpot18Basket_Init = 0x80AC73E8; // type:func
+BgSpot18Basket_Destroy = 0x80AC7534; // type:func
+func_808B7AEC = 0x80AC757C; // type:func
+func_808B7AFC = 0x80AC7590; // type:func
+func_808B7B58 = 0x80AC75EC; // type:func
+func_808B7B6C = 0x80AC7604; // type:func
+func_808B7BB0 = 0x80AC7648; // type:func
+func_808B7BCC = 0x80AC7668; // type:func
+func_808B7D38 = 0x80AC77D4; // type:func
+func_808B7D50 = 0x80AC77F0; // type:func
+func_808B7F74 = 0x80AC7A14; // type:func
+func_808B7FC0 = 0x80AC7A64; // type:func
+func_808B818C = 0x80AC7C30; // type:func
+func_808B81A0 = 0x80AC7C48; // type:func
+BgSpot18Basket_Update = 0x80AC7EE0; // type:func
+BgSpot18Basket_Draw = 0x80AC7FA4; // type:func
+EnGanonOrgan_Init = 0x80AC81C0; // type:func
+EnGanonOrgan_Destroy = 0x80AC81DC; // type:func
+EnGanonOrgan_Update = 0x80AC81EC; // type:func
+EnGanonOrgan_EmptyDList = 0x80AC8230; // type:func
+func_80A280BC = 0x80AC8254; // type:func
+func_80A28148 = 0x80AC82CC; // type:func
+EnGanonOrgan_Draw = 0x80AC833C; // type:func
+EnSiofuki_Init = 0x80ACF200; // type:func
+EnSiofuki_Destroy = 0x80ACF41C; // type:func
+func_80AFBDC8 = 0x80ACF450; // type:func
+func_80AFBE8C = 0x80ACF510; // type:func
+func_80AFC1D0 = 0x80ACF85C; // type:func
+func_80AFC218 = 0x80ACF8A4; // type:func
+func_80AFC34C = 0x80ACF9E0; // type:func
+func_80AFC3C8 = 0x80ACFA64; // type:func
+func_80AFC478 = 0x80ACFB1C; // type:func
+func_80AFC544 = 0x80ACFBF0; // type:func
+EnSiofuki_Update = 0x80ACFC28; // type:func
+EnSiofuki_Draw = 0x80ACFC4C; // type:func
+EnStream_SetupAction = 0x80ACFFB0; // type:func
+EnStream_Init = 0x80ACFFBC; // type:func
+EnStream_Destroy = 0x80AD0024; // type:func
+func_80B0B81C = 0x80AD0034; // type:func
+EnStream_SuckPlayer = 0x80AD0154; // type:func
+EnStream_WaitForPlayer = 0x80AD02EC; // type:func
+EnStream_Update = 0x80AD0340; // type:func
+EnStream_Draw = 0x80AD0374; // type:func
+EnMm_ChangeAnim = 0x80AD0540; // type:func
+EnMm_Init = 0x80AD0664; // type:func
+EnMm_Destroy = 0x80AD0820; // type:func
+func_80AADA70 = 0x80AD084C; // type:func
+func_80AADAA0 = 0x80AD0880; // type:func
+EnMm_GetTextId = 0x80AD0A14; // type:func
+func_80AADCD0 = 0x80AD0AB4; // type:func
+EnMm_GetPointCount = 0x80AD0C34; // type:func
+func_80AADE60 = 0x80AD0C48; // type:func
+func_80AADEF0 = 0x80AD0CDC; // type:func
+func_80AAE224 = 0x80AD1014; // type:func
+func_80AAE294 = 0x80AD1084; // type:func
+func_80AAE50C = 0x80AD12FC; // type:func
+func_80AAE598 = 0x80AD1388; // type:func
+EnMm_Update = 0x80AD1430; // type:func
+EnMm_Draw = 0x80AD14A4; // type:func
+EnMm_OverrideLimbDraw = 0x80AD1738; // type:func
+EnMm_PostLimbDraw = 0x80AD17CC; // type:func
+EnKo_AreObjectsAvailable = 0x80AD1BA0; // type:func
+EnKo_AreObjectsLoaded = 0x80AD1CB8; // type:func
+EnKo_IsOsAnimeAvailable = 0x80AD1D40; // type:func
+EnKo_IsOsAnimeLoaded = 0x80AD1D90; // type:func
+EnKo_GetTextIdChild = 0x80AD1DD0; // type:func
+EnKo_GetTextIdAdult = 0x80AD2138; // type:func
+EnKo_GetTextId = 0x80AD2410; // type:func
+EnKo_UpdateTalkState = 0x80AD253C; // type:func
+EnKo_GetForestQuestState = 0x80AD293C; // type:func
+func_80A97BC0 = 0x80AD29C4; // type:func
+func_80A97C7C = 0x80AD2A80; // type:func
+EnKo_IsWithinTalkAngle = 0x80AD2B04; // type:func
+func_80A97D68 = 0x80AD2B70; // type:func
+func_80A97E18 = 0x80AD2C20; // type:func
+func_80A97EB0 = 0x80AD2CBC; // type:func
+func_80A97F20 = 0x80AD2D30; // type:func
+func_80A97F70 = 0x80AD2D80; // type:func
+func_80A98034 = 0x80AD2E44; // type:func
+func_80A98124 = 0x80AD2F38; // type:func
+func_80A98174 = 0x80AD2F88; // type:func
+EnKo_ChildStart = 0x80AD306C; // type:func
+EnKo_ChildStone = 0x80AD3174; // type:func
+EnKo_ChildSaria = 0x80AD327C; // type:func
+EnKo_AdultEnemy = 0x80AD3384; // type:func
+EnKo_AdultSaved = 0x80AD348C; // type:func
+func_80A9877C = 0x80AD3594; // type:func
+EnKo_CanSpawn = 0x80AD3750; // type:func
+EnKo_Blink = 0x80AD3A34; // type:func
+func_80A98CD8 = 0x80AD3AF4; // type:func
+EnKo_GetForestQuestState2 = 0x80AD3B4C; // type:func
+func_80A98DB4 = 0x80AD3BD8; // type:func
+func_80A98ECC = 0x80AD3CF0; // type:func
+EnKo_Init = 0x80AD3DB8; // type:func
+EnKo_Destroy = 0x80AD3E48; // type:func
+func_80A99048 = 0x80AD3E74; // type:func
+func_80A99384 = 0x80AD41A4; // type:func
+func_80A99438 = 0x80AD4258; // type:func
+func_80A99504 = 0x80AD4324; // type:func
+func_80A99560 = 0x80AD4384; // type:func
+func_80A995CC = 0x80AD43F4; // type:func
+EnKo_Update = 0x80AD4530; // type:func
+EnKo_OverrideLimbDraw = 0x80AD4694; // type:func
+EnKo_PostLimbDraw = 0x80AD49F4; // type:func
+EnKo_SetEnvColor = 0x80AD4AC4; // type:func
+EnKo_Draw = 0x80AD4B30; // type:func
+EnKz_GetTextIdChild = 0x80AD5CE0; // type:func
+EnKz_GetTextIdAdult = 0x80AD5D3C; // type:func
+EnKz_GetTextId = 0x80AD5DEC; // type:func
+EnKz_UpdateTalkState = 0x80AD5E54; // type:func
+EnKz_UpdateEyes = 0x80AD6078; // type:func
+EnKz_UpdateTalking = 0x80AD60F0; // type:func
+func_80A9CB18 = 0x80AD62AC; // type:func
+EnKz_FollowPath = 0x80AD646C; // type:func
+EnKz_SetMovedPos = 0x80AD65D8; // type:func
+EnKz_Init = 0x80AD66A0; // type:func
+EnKz_Destroy = 0x80AD682C; // type:func
+EnKz_PreMweepWait = 0x80AD6858; // type:func
+EnKz_SetupMweep = 0x80AD68C8; // type:func
+EnKz_Mweep = 0x80AD69F4; // type:func
+EnKz_StopMweep = 0x80AD6B60; // type:func
+EnKz_Wait = 0x80AD6BC4; // type:func
+EnKz_SetupGetItem = 0x80AD6C2C; // type:func
+EnKz_StartTimer = 0x80AD6CC0; // type:func
+EnKz_Update = 0x80AD6D58; // type:func
+EnKz_OverrideLimbDraw = 0x80AD6E14; // type:func
+EnKz_PostLimbDraw = 0x80AD6EE4; // type:func
+EnKz_Draw = 0x80AD6F40; // type:func
+EnWeatherTag_SetupAction = 0x80AD7280; // type:func
+EnWeatherTag_Destroy = 0x80AD728C; // type:func
+EnWeatherTag_Init = 0x80AD729C; // type:func
+WeatherTag_CheckEnableWeatherEffect = 0x80AD7470; // type:func
+WeatherTag_CheckRestoreWeather = 0x80AD7648; // type:func
+EnWeatherTag_DisabledCloudyHyruleMarket = 0x80AD7808; // type:func
+EnWeatherTag_EnabledCloudyHyruleMarket = 0x80AD7864; // type:func
+EnWeatherTag_DisabledCloudyLonLonRanch = 0x80AD78B8; // type:func
+EnWeatherTag_EnabledCloudyLonLonRanch = 0x80AD7914; // type:func
+EnWeatherTag_DisabledCloudyDeathMountain = 0x80AD7968; // type:func
+EnWeatherTag_EnabledCloudyDeathMountain = 0x80AD79C4; // type:func
+EnWeatherTag_DisabledCloudySnow = 0x80AD7A18; // type:func
+EnWeatherTag_EnabledCloudySnow = 0x80AD7A90; // type:func
+EnWeatherTag_DisabledRainLakeHylia = 0x80AD7AFC; // type:func
+EnWeatherTag_EnabledRainLakeHylia = 0x80AD7B80; // type:func
+EnWeatherTag_DisabledCloudyRainThunderKakariko = 0x80AD7BF8; // type:func
+EnWeatherTag_EnabledCloudyRainThunderKakariko = 0x80AD7C90; // type:func
+EnWeatherTag_SetSandstormIntensity = 0x80AD7D1C; // type:func
+EnWeatherTag_DisabledRainThunder = 0x80AD7E18; // type:func
+EnWeatherTag_EnabledRainThunder = 0x80AD7EBC; // type:func
+EnWeatherTag_Update = 0x80AD7F70; // type:func
+BgSstFloor_Init = 0x80AD8170; // type:func
+BgSstFloor_Destroy = 0x80AD81D8; // type:func
+BgSstFloor_Update = 0x80AD820C; // type:func
+BgSstFloor_Draw = 0x80AD8580; // type:func
+EnAni_SetupAction = 0x80AD86D0; // type:func
+EnAni_Init = 0x80AD86DC; // type:func
+EnAni_Destroy = 0x80AD87F4; // type:func
+EnAni_SetText = 0x80AD8820; // type:func
+func_809B04F0 = 0x80AD885C; // type:func
+func_809B0524 = 0x80AD8894; // type:func
+func_809B0558 = 0x80AD88CC; // type:func
+func_809B05F0 = 0x80AD8968; // type:func
+func_809B064C = 0x80AD89CC; // type:func
+func_809B07F8 = 0x80AD8B78; // type:func
+func_809B0988 = 0x80AD8D08; // type:func
+func_809B0994 = 0x80AD8D18; // type:func
+func_809B0A28 = 0x80AD8DAC; // type:func
+func_809B0A6C = 0x80AD8DF0; // type:func
+EnAni_Update = 0x80AD8E9C; // type:func
+EnAni_OverrideLimbDraw = 0x80AD9118; // type:func
+EnAni_PostLimbDraw = 0x80AD9160; // type:func
+EnAni_Draw = 0x80AD91A0; // type:func
+EnExItem_Destroy = 0x80AD9440; // type:func
+EnExItem_Init = 0x80AD9450; // type:func
+EnExItem_WaitForObject = 0x80AD95AC; // type:func
+EnExItem_BowlPrize = 0x80AD9928; // type:func
+EnExItem_SetupBowlCounter = 0x80AD9B14; // type:func
+EnExItem_BowlCounter = 0x80AD9B3C; // type:func
+EnExItem_ExitChest = 0x80AD9B74; // type:func
+EnExItem_FairyMagic = 0x80AD9BDC; // type:func
+EnExItem_TargetPrizeApproach = 0x80AD9BF4; // type:func
+EnExItem_TargetPrizeGive = 0x80AD9E48; // type:func
+EnExItem_TargetPrizeFinish = 0x80AD9ED4; // type:func
+EnExItem_Update = 0x80AD9F34; // type:func
+EnExItem_Draw = 0x80AD9F88; // type:func
+EnExItem_DrawItems = 0x80ADA038; // type:func
+EnExItem_DrawHeartPiece = 0x80ADA09C; // type:func
+EnExItem_DrawMagic = 0x80ADA0D0; // type:func
+EnExItem_DrawKey = 0x80ADA118; // type:func
+EnExItem_DrawRupee = 0x80ADA208; // type:func
+BgJyaIronobj_InitCylinder = 0x80ADA5C0; // type:func
+BgJyaIronobj_SpawnPillarParticles = 0x80ADA640; // type:func
+BgJyaIronobj_SpawnThroneParticles = 0x80ADAABC; // type:func
+BgJyaIronobj_Init = 0x80ADAEE8; // type:func
+BgJyaIronobj_Destroy = 0x80ADAF7C; // type:func
+func_808992D8 = 0x80ADAFC4; // type:func
+func_808992E8 = 0x80ADAFD8; // type:func
+BgJyaIronobj_Update = 0x80ADB118; // type:func
+BgJyaIronobj_Draw = 0x80ADB13C; // type:func
+En_Js_SetupAction = 0x80ADB370; // type:func
+EnJs_Init = 0x80ADB37C; // type:func
+EnJs_Destroy = 0x80ADB4A0; // type:func
+func_80A88F64 = 0x80ADB4CC; // type:func
+func_80A89008 = 0x80ADB574; // type:func
+func_80A89078 = 0x80ADB5E8; // type:func
+func_80A890C0 = 0x80ADB634; // type:func
+func_80A8910C = 0x80ADB684; // type:func
+func_80A89160 = 0x80ADB6D8; // type:func
+func_80A891C4 = 0x80ADB740; // type:func
+func_80A89294 = 0x80ADB814; // type:func
+func_80A89304 = 0x80ADB888; // type:func
+EnJs_Update = 0x80ADB8C0; // type:func
+EnJs_OverrideLimbDraw = 0x80ADBB4C; // type:func
+EnJs_PostLimbDraw = 0x80ADBB84; // type:func
+EnJs_Draw = 0x80ADBBC4; // type:func
+EnJsjutan_Init = 0x80ADBD40; // type:func
+EnJsjutan_Destroy = 0x80ADBDD4; // type:func
+func_80A89860 = 0x80ADBE08; // type:func
+func_80A89A6C = 0x80ADC014; // type:func
+EnJsjutan_Update = 0x80ADCAF4; // type:func
+EnJsjutan_Draw = 0x80ADCBCC; // type:func
+EnCs_ChangeAnim = 0x80AE1670; // type:func
+EnCs_Init = 0x80AE1794; // type:func
+EnCs_Destroy = 0x80AE1928; // type:func
+EnCs_GetTalkState = 0x80AE1954; // type:func
+EnCs_GetTextId = 0x80AE1A88; // type:func
+EnCs_HandleTalking = 0x80AE1B0C; // type:func
+EnCs_GetwaypointCount = 0x80AE1C58; // type:func
+EnCs_GetPathPoint = 0x80AE1C6C; // type:func
+EnCs_HandleWalking = 0x80AE1D00; // type:func
+EnCs_Walk = 0x80AE1F18; // type:func
+EnCs_Wait = 0x80AE20B8; // type:func
+EnCs_Talk = 0x80AE2144; // type:func
+EnCs_Update = 0x80AE2208; // type:func
+EnCs_Draw = 0x80AE2378; // type:func
+EnCs_OverrideLimbDraw = 0x80AE252C; // type:func
+EnCs_PostLimbDraw = 0x80AE25BC; // type:func
+EnMd_ReverseAnimation = 0x80AE28A0; // type:func
+EnMd_UpdateAnimSequence_IdleToHalt = 0x80AE28C8; // type:func
+EnMd_UpdateAnimSequence_HaltToCurious = 0x80AE295C; // type:func
+EnMd_UpdateAnimSequence_WalkAway = 0x80AE29F0; // type:func
+EnMd_UpdateAnimSequence_TwitchIdle_Unused = 0x80AE2AC8; // type:func
+EnMd_UpdateAnimSequence_HaltToIdle = 0x80AE2B5C; // type:func
+EnMd_UpdateAnimSequence_SurpriseToAnnoyed = 0x80AE2BF8; // type:func
+EnMd_UpdateAnimSequence_SurpriseToIdle = 0x80AE2C8C; // type:func
+EnMd_UpdateAnimSequence_CuriousToAnnoyed = 0x80AE2D28; // type:func
+EnMd_UpdateAnimSequence_AnnoyedToHalt = 0x80AE2DBC; // type:func
+EnMd_UpdateAnimSequence_IdleToAnnoyed = 0x80AE2E50; // type:func
+EnMd_UpdateAnimSequence_StopWalking = 0x80AE2EE4; // type:func
+EnMd_SetAnimSequence = 0x80AE2F80; // type:func
+EnMd_UpdateAnimSequence = 0x80AE2F98; // type:func
+EnMd_UpdateAnimSequence_WithTalking = 0x80AE3080; // type:func
+EnMd_TrackMessageState = 0x80AE32D4; // type:func
+EnMd_GetTextIdKokiriForest = 0x80AE3354; // type:func
+EnMd_GetTextIdMidosHouse = 0x80AE343C; // type:func
+EnMd_GetTextIdLostWoods = 0x80AE3470; // type:func
+EnMd_GetTextId = 0x80AE34F0; // type:func
+EnMd_UpdateTalkState = 0x80AE3560; // type:func
+EnMd_ShouldSpawn = 0x80AE3698; // type:func
+EnMd_UpdateEyes = 0x80AE373C; // type:func
+EnMd_UpdateTalking = 0x80AE37B4; // type:func
+EnMd_FollowPath = 0x80AE39D0; // type:func
+EnMd_SetMovedPos = 0x80AE3B3C; // type:func
+EnMd_UpdateAlphaByDistance = 0x80AE3C04; // type:func
+EnMd_Init = 0x80AE3CB0; // type:func
+EnMd_Destroy = 0x80AE3EAC; // type:func
+EnMd_Idle = 0x80AE3ED8; // type:func
+EnMd_Watch = 0x80AE3F5C; // type:func
+EnMd_BlockPath = 0x80AE3FAC; // type:func
+EnMd_ListenToOcarina = 0x80AE427C; // type:func
+EnMd_Walk = 0x80AE4378; // type:func
+EnMd_Update = 0x80AE44A0; // type:func
+EnMd_OverrideLimbDraw = 0x80AE4560; // type:func
+EnMd_PostLimbDraw = 0x80AE477C; // type:func
+EnMd_Draw = 0x80AE47D8; // type:func
+EnHy_FindSkelAndHeadObjects = 0x80AE4F10; // type:func
+EnHy_AreSkelAndHeadObjectsLoaded = 0x80AE5024; // type:func
+EnHy_FindOsAnimeObject = 0x80AE50AC; // type:func
+EnHy_IsOsAnimeObjectLoaded = 0x80AE50FC; // type:func
+EnHy_GiveItem = 0x80AE513C; // type:func
+EnHy_GetTextId = 0x80AE5180; // type:func
+EnHy_UpdateTalkState = 0x80AE59C8; // type:func
+EnHy_UpdateEyes = 0x80AE5F14; // type:func
+EnHy_InitCollider = 0x80AE5FD0; // type:func
+EnHy_InitSetProperties = 0x80AE600C; // type:func
+EnHy_UpdateCollider = 0x80AE60A4; // type:func
+EnHy_OfferBuyBottledItem = 0x80AE61A8; // type:func
+EnHy_UpdateNPC = 0x80AE62F0; // type:func
+EnHy_ShouldSpawn = 0x80AE6460; // type:func
+EnHy_Init = 0x80AE66FC; // type:func
+EnHy_Destroy = 0x80AE678C; // type:func
+EnHy_WaitForObjects = 0x80AE67B8; // type:func
+EnHy_WatchDog = 0x80AE6A84; // type:func
+EnHy_Walk = 0x80AE6B40; // type:func
+EnHy_Fidget = 0x80AE6C0C; // type:func
+EnHy_DoNothing = 0x80AE6C44; // type:func
+EnHy_SetupPace = 0x80AE6C54; // type:func
+EnHy_Pace = 0x80AE6CE0; // type:func
+EnHy_WaitDogFoundRewardGiven = 0x80AE6E5C; // type:func
+EnHy_FinishGivingDogFoundReward = 0x80AE6ECC; // type:func
+EnHy_Update = 0x80AE6F7C; // type:func
+EnHy_OverrideLimbDraw = 0x80AE705C; // type:func
+EnHy_PostLimbDraw = 0x80AE73C8; // type:func
+EnHy_SetEnvColor = 0x80AE74D4; // type:func
+EnHy_Draw = 0x80AE7540; // type:func
+EnGanonMant_Init = 0x80AE8850; // type:func
+EnGanonMant_Destroy = 0x80AE886C; // type:func
+EnGanonMant_Tear = 0x80AE887C; // type:func
+EnGanonMant_UpdateStrand = 0x80AE8AD8; // type:func
+EnGanonMant_UpdateVertices = 0x80AE909C; // type:func
+EnGanonMant_Update = 0x80AE92C0; // type:func
+EnGanonMant_DrawCloak = 0x80AE937C; // type:func
+EnGanonMant_Draw = 0x80AE9498; // type:func
+EnOkarinaEffect_SetupAction = 0x80AECA80; // type:func
+EnOkarinaEffect_Destroy = 0x80AECA8C; // type:func
+EnOkarinaEffect_Init = 0x80AECB0C; // type:func
+EnOkarinaEffect_TriggerStorm = 0x80AECB54; // type:func
+EnOkarinaEffect_ManageStorm = 0x80AECBE0; // type:func
+EnOkarinaEffect_Update = 0x80AECDB0; // type:func
+EnMag_ResetSram = 0x80AECE40; // type:func
+EnMag_Init = 0x80AED004; // type:func
+EnMag_Destroy = 0x80AED2A8; // type:func
+EnMag_CheckSramResetCode = 0x80AED2B0; // type:func
+EnMag_Update = 0x80AED3FC; // type:func
+EnMag_DrawTextureI8 = 0x80AEDC5C; // type:func
+EnMag_DrawEffectTextures = 0x80AEDE8C; // type:func
+EnMag_DrawImageRGBA32 = 0x80AEE2EC; // type:func
+EnMag_DrawCharTexture = 0x80AEE744; // type:func
+EnMag_DrawInner = 0x80AEE8F8; // type:func
+EnMag_Draw = 0x80AEFAC0; // type:func
+DoorGerudo_Init = 0x80AF1E80; // type:func
+DoorGerudo_Destroy = 0x80AF1F30; // type:func
+func_809946BC = 0x80AF1F64; // type:func
+func_80994750 = 0x80AF1FFC; // type:func
+func_8099485C = 0x80AF2108; // type:func
+func_8099496C = 0x80AF2218; // type:func
+func_809949C8 = 0x80AF2274; // type:func
+DoorGerudo_Update = 0x80AF22D0; // type:func
+DoorGerudo_Draw = 0x80AF22F4; // type:func
+ElfMsg2_SetupAction = 0x80AF2470; // type:func
+ElfMsg2_KillCheck = 0x80AF247C; // type:func
+ElfMsg2_Init = 0x80AF25B4; // type:func
+ElfMsg2_Destroy = 0x80AF2674; // type:func
+ElfMsg2_GetMessageId = 0x80AF2684; // type:func
+ElfMsg2_WaitForTextClose = 0x80AF2698; // type:func
+ElfMsg2_WaitForTextRead = 0x80AF2718; // type:func
+ElfMsg2_WaitUntilActivated = 0x80AF2750; // type:func
+ElfMsg2_Update = 0x80AF27CC; // type:func
+DemoGt_Destroy = 0x80AF28E0; // type:func
+DemoGt_PlayEarthquakeSfx = 0x80AF2928; // type:func
+DemoGt_PlayExplosion1Sfx = 0x80AF2948; // type:func
+DemoGt_PlayExplosion2Sfx = 0x80AF296C; // type:func
+DemoGt_Rumble = 0x80AF2990; // type:func
+DemoGt_SpawnDust = 0x80AF29C0; // type:func
+func_8097D7D8 = 0x80AF2A50; // type:func
+DemoGt_SpawnCloudRing = 0x80AF2BD8; // type:func
+DemoGt_SpawnExplosionWithSound = 0x80AF2C38; // type:func
+DemoGt_SpawnExplosionNoSound = 0x80AF2CEC; // type:func
+func_8097DAC8 = 0x80AF2D40; // type:func
+func_8097DD28 = 0x80AF2FA0; // type:func
+func_8097DF70 = 0x80AF31E8; // type:func
+func_8097E1D4 = 0x80AF344C; // type:func
+func_8097E454 = 0x80AF36CC; // type:func
+DemoGt_IsCutsceneIdle = 0x80AF391C; // type:func
+DemoGt_GetCue = 0x80AF393C; // type:func
+func_8097E704 = 0x80AF3988; // type:func
+func_8097E744 = 0x80AF39C8; // type:func
+func_8097E824 = 0x80AF3AA8; // type:func
+func_8097ED64 = 0x80AF3FE4; // type:func
+DemoGt_IsCutsceneLayer = 0x80AF401C; // type:func
+func_8097EDD8 = 0x80AF4044; // type:func
+func_8097EE44 = 0x80AF40BC; // type:func
+func_8097EEA8_Init0 = 0x80AF4120; // type:func
+func_8097EF00 = 0x80AF4178; // type:func
+func_8097EF34 = 0x80AF41AC; // type:func
+func_8097EF40 = 0x80AF41BC; // type:func
+func_8097F0AC = 0x80AF4314; // type:func
+func_8097F19C = 0x80AF43F8; // type:func
+func_8097F1D8 = 0x80AF443C; // type:func
+func_8097F280 = 0x80AF44E4; // type:func
+func_8097F3EC = 0x80AF4658; // type:func
+DemoGt_Update0 = 0x80AF4698; // type:func
+DemoGt_Update8 = 0x80AF4710; // type:func
+DemoGt_Draw1 = 0x80AF4788; // type:func
+func_8097F904_Init1 = 0x80AF4B4C; // type:func
+func_8097F960 = 0x80AF4BA8; // type:func
+func_8097F96C = 0x80AF4BB8; // type:func
+func_8097FA1C = 0x80AF4C4C; // type:func
+func_8097FAFC = 0x80AF4D14; // type:func
+func_8097FC1C = 0x80AF4E1C; // type:func
+func_8097FCE4 = 0x80AF4ED0; // type:func
+func_8097FD70 = 0x80AF4F4C; // type:func
+func_8097FDDC = 0x80AF4FC0; // type:func
+func_8097FED8 = 0x80AF50C0; // type:func
+DemoGt_Update1 = 0x80AF5100; // type:func
+DemoGt_Update9 = 0x80AF5150; // type:func
+DemoGt_Draw2 = 0x80AF5198; // type:func
+func_80980110_Init2 = 0x80AF52CC; // type:func
+func_8098016C = 0x80AF5328; // type:func
+func_80980178 = 0x80AF5338; // type:func
+func_80980184 = 0x80AF5348; // type:func
+func_80980218 = 0x80AF53DC; // type:func
+func_809802AC = 0x80AF5470; // type:func
+func_8098036C = 0x80AF5534; // type:func
+func_80980430 = 0x80AF55FC; // type:func
+func_80980504 = 0x80AF56BC; // type:func
+func_809805D8 = 0x80AF577C; // type:func
+func_809806B8 = 0x80AF5844; // type:func
+func_8098078C = 0x80AF5904; // type:func
+func_8098085C = 0x80AF59C0; // type:func
+func_809809C0 = 0x80AF5B0C; // type:func
+func_80980AD4 = 0x80AF5C10; // type:func
+func_80980B68 = 0x80AF5C90; // type:func
+func_80980BFC = 0x80AF5D10; // type:func
+func_80980C90 = 0x80AF5D90; // type:func
+func_80980D74 = 0x80AF5E7C; // type:func
+DemoGt_Update2 = 0x80AF5EBC; // type:func
+DemoGt_Update10 = 0x80AF5F00; // type:func
+DemoGt_Draw3 = 0x80AF5F3C; // type:func
+func_80980F00_Init5 = 0x80AF5FD8; // type:func
+func_80980F58 = 0x80AF6030; // type:func
+func_80980F8C = 0x80AF6068; // type:func
+func_8098103C = 0x80AF611C; // type:func
+DemoGt_Update3 = 0x80AF6180; // type:func
+DemoGt_Update11 = 0x80AF61C4; // type:func
+DemoGt_Update16 = 0x80AF6200; // type:func
+DemoGt_Draw4 = 0x80AF6298; // type:func
+func_809813CC_Init6 = 0x80AF6480; // type:func
+func_80981424 = 0x80AF64D8; // type:func
+func_80981458 = 0x80AF6510; // type:func
+func_80981524 = 0x80AF65C8; // type:func
+DemoGt_Update4 = 0x80AF662C; // type:func
+DemoGt_Update12 = 0x80AF6670; // type:func
+DemoGt_Update17 = 0x80AF66AC; // type:func
+DemoGt_Draw5 = 0x80AF6744; // type:func
+func_809818A4_Init7 = 0x80AF6920; // type:func
+func_809818FC = 0x80AF6978; // type:func
+func_80981930 = 0x80AF69B0; // type:func
+DemoGt_Update5 = 0x80AF6A14; // type:func
+DemoGt_Update13 = 0x80AF6A58; // type:func
+DemoGt_Update18 = 0x80AF6A94; // type:func
+DemoGt_Draw6 = 0x80AF6B2C; // type:func
+func_80981C94_Init23 = 0x80AF6CE4; // type:func
+func_80981CEC = 0x80AF6D3C; // type:func
+func_80981D20 = 0x80AF6D74; // type:func
+func_80981DC8 = 0x80AF6E1C; // type:func
+DemoGt_Update6 = 0x80AF6E5C; // type:func
+DemoGt_Update14 = 0x80AF6EA0; // type:func
+DemoGt_Draw7 = 0x80AF6EE4; // type:func
+func_80982054_Init24 = 0x80AF707C; // type:func
+func_809820AC = 0x80AF70D4; // type:func
+func_809820E0 = 0x80AF710C; // type:func
+func_80982188 = 0x80AF71B4; // type:func
+DemoGt_Update7 = 0x80AF71F4; // type:func
+DemoGt_Update15 = 0x80AF7238; // type:func
+DemoGt_Draw8 = 0x80AF727C; // type:func
+DemoGt_Update = 0x80AF7418; // type:func
+DemoGt_Init = 0x80AF7460; // type:func
+DemoGt_Draw0 = 0x80AF7524; // type:func
+DemoGt_Draw = 0x80AF7534; // type:func
+EnPoField_Init = 0x80AF7EF0; // type:func
+EnPoField_Destroy = 0x80AF80F8; // type:func
+EnPoField_SetupWaitForSpawn = 0x80AF8158; // type:func
+EnPoField_SetupAppear = 0x80AF821C; // type:func
+EnPoField_SetupCirclePlayer = 0x80AF833C; // type:func
+EnPoField_SetupFlee = 0x80AF83E4; // type:func
+EnPoField_SetupDamage = 0x80AF8478; // type:func
+EnPoField_SetupDeath = 0x80AF8534; // type:func
+EnPoField_SetupDisappear = 0x80AF8588; // type:func
+EnPoField_SetupSoulIdle = 0x80AF8600; // type:func
+func_80AD42B0 = 0x80AF86B0; // type:func
+func_80AD4384 = 0x80AF8784; // type:func
+EnPoField_SetupSoulDisappear = 0x80AF883C; // type:func
+EnPoField_SetupInteractWithSoul = 0x80AF8850; // type:func
+EnPoField_CorrectYPos = 0x80AF8878; // type:func
+EnPoField_SetFleeSpeed = 0x80AF895C; // type:func
+EnPoField_WaitForSpawn = 0x80AF8A6C; // type:func
+EnPoField_Appear = 0x80AF8CD4; // type:func
+EnPoField_CirclePlayer = 0x80AF8E70; // type:func
+EnPoField_Flee = 0x80AF90B0; // type:func
+EnPoField_Damage = 0x80AF9254; // type:func
+EnPoField_Death = 0x80AF92E4; // type:func
+EnPoField_Disappear = 0x80AF96FC; // type:func
+EnPoField_SoulIdle = 0x80AF97FC; // type:func
+EnPoField_SoulUpdateProperties = 0x80AF98E0; // type:func
+func_80AD587C = 0x80AF9C88; // type:func
+func_80AD58D4 = 0x80AF9CE0; // type:func
+EnPoField_SoulDisappear = 0x80AF9EE4; // type:func
+EnPoField_SoulInteract = 0x80AF9F24; // type:func
+EnPoField_TestForDamage = 0x80AFA084; // type:func
+EnPoField_SpawnFlame = 0x80AFA11C; // type:func
+EnPoField_UpdateFlame = 0x80AFA170; // type:func
+EnPoField_DrawFlame = 0x80AFA29C; // type:func
+func_80AD619C = 0x80AFA574; // type:func
+func_80AD6330 = 0x80AFA708; // type:func
+EnPoField_Update = 0x80AFA87C; // type:func
+EnPoField_OverrideLimbDraw2 = 0x80AFA9A8; // type:func
+EnPoField_PostLimDraw2 = 0x80AFAAB0; // type:func
+EnPoField_Draw = 0x80AFACC0; // type:func
+EnPoField_UpdateDead = 0x80AFAFA4; // type:func
+EnPoField_DrawSoul = 0x80AFB000; // type:func
+EfcErupc_SetupAction = 0x80AFB980; // type:func
+EfcErupc_Init = 0x80AFB98C; // type:func
+EfcErupc_Destroy = 0x80AFB9F8; // type:func
+EfcErupc_UpdateAction = 0x80AFBA08; // type:func
+EfcErupc_Update = 0x80AFBC54; // type:func
+EfcErupc_Draw = 0x80AFBC90; // type:func
+EfcErupc_DrawEffects = 0x80AFBFD0; // type:func
+EfcErupc_UpdateEffects = 0x80AFC18C; // type:func
+EfcErupc_SpawnEffect = 0x80AFC2B0; // type:func
+EfcErupc_InitEffects = 0x80AFC37C; // type:func
+BgZg_Destroy = 0x80AFC470; // type:func
+func_808C0C50 = 0x80AFC4A4; // type:func
+func_808C0C98 = 0x80AFC4EC; // type:func
+func_808C0CC8 = 0x80AFC520; // type:func
+func_808C0CD4 = 0x80AFC530; // type:func
+func_808C0D08 = 0x80AFC564; // type:func
+BgZg_Update = 0x80AFC608; // type:func
+BgZg_Init = 0x80AFC650; // type:func
+func_808C0EEC = 0x80AFC73C; // type:func
+BgZg_Draw = 0x80AFC7B8; // type:func
+EnHeishi4_Init = 0x80AFC8C0; // type:func
+EnHeishi4_Destroy = 0x80AFCAA0; // type:func
+func_80A56328 = 0x80AFCACC; // type:func
+func_80A563BC = 0x80AFCB60; // type:func
+func_80A56544 = 0x80AFCCE8; // type:func
+func_80A56614 = 0x80AFCDAC; // type:func
+func_80A5673C = 0x80AFCED4; // type:func
+func_80A56874 = 0x80AFCFE8; // type:func
+func_80A56900 = 0x80AFD074; // type:func
+func_80A56994 = 0x80AFD108; // type:func
+func_80A56A50 = 0x80AFD1C4; // type:func
+func_80A56ACC = 0x80AFD240; // type:func
+func_80A56B40 = 0x80AFD2B4; // type:func
+EnHeishi4_Update = 0x80AFD428; // type:func
+EnHeishi_OverrideLimbDraw = 0x80AFD58C; // type:func
+EnHeishi4_Draw = 0x80AFD5F4; // type:func
+func_80B533B0 = 0x80AFD7C0; // type:func
+func_80B533FC = 0x80AFD80C; // type:func
+EnZl3_Destroy = 0x80AFD850; // type:func
+func_80B53468 = 0x80AFD87C; // type:func
+func_80B53488 = 0x80AFD89C; // type:func
+EnZl3_UpdateEyes = 0x80AFD8E8; // type:func
+EnZl3_setEyeIndex = 0x80AFD970; // type:func
+EnZl3_setMouthIndex = 0x80AFD988; // type:func
+func_80B5357C = 0x80AFD9A0; // type:func
+func_80B53614 = 0x80AFDA3C; // type:func
+func_80B5366C = 0x80AFDA94; // type:func
+func_80B536B4 = 0x80AFDADC; // type:func
+func_80B536C4 = 0x80AFDAF0; // type:func
+func_80B53764 = 0x80AFDB94; // type:func
+func_80B537E8 = 0x80AFDC1C; // type:func
+func_80B538B0 = 0x80AFDCE4; // type:func
+EnZl3_UpdateSkelAnime = 0x80AFDD80; // type:func
+func_80B5396C = 0x80AFDDA4; // type:func
+func_80B53974 = 0x80AFDDB0; // type:func
+func_80B53980 = 0x80AFDDC4; // type:func
+func_80B53B64 = 0x80AFDFAC; // type:func
+func_80B54360 = 0x80AFE7BC; // type:func
+func_80B5458C = 0x80AFE9EC; // type:func
+EnZl3_PostLimbDraw = 0x80AFF0E8; // type:func
+func_80B54DB4 = 0x80AFF1B4; // type:func
+func_80B54DC4 = 0x80AFF1C8; // type:func
+func_80B54DD4 = 0x80AFF1DC; // type:func
+func_80B54DE0 = 0x80AFF1EC; // type:func
+func_80B54E14 = 0x80AFF224; // type:func
+func_80B54EA4 = 0x80AFF2B4; // type:func
+func_80B54EF4 = 0x80AFF308; // type:func
+func_80B54F18 = 0x80AFF330; // type:func
+func_80B54FB4 = 0x80AFF3D0; // type:func
+func_80B55054 = 0x80AFF454; // type:func
+func_80B550F0 = 0x80AFF4F4; // type:func
+func_80B55144 = 0x80AFF548; // type:func
+func_80B551E0 = 0x80AFF5E8; // type:func
+func_80B55220 = 0x80AFF628; // type:func
+func_80B55268 = 0x80AFF670; // type:func
+func_80B552A8 = 0x80AFF6B0; // type:func
+func_80B552DC = 0x80AFF6E4; // type:func
+func_80B55334 = 0x80AFF740; // type:func
+func_80B55368 = 0x80AFF774; // type:func
+func_80B553B4 = 0x80AFF7C0; // type:func
+func_80B553E8 = 0x80AFF7F4; // type:func
+func_80B55408 = 0x80AFF814; // type:func
+func_80B55444 = 0x80AFF850; // type:func
+func_80B55550 = 0x80AFF954; // type:func
+func_80B555A4 = 0x80AFF9B0; // type:func
+func_80B55604 = 0x80AFFA18; // type:func
+func_80B5566C = 0x80AFFA88; // type:func
+func_80B556CC = 0x80AFFAF0; // type:func
+func_80B5572C = 0x80AFFB58; // type:func
+func_80B55780 = 0x80AFFBB4; // type:func
+func_80B55808 = 0x80AFFC18; // type:func
+func_80B5582C = 0x80AFFC40; // type:func
+func_80B5585C = 0x80AFFC70; // type:func
+func_80B558A8 = 0x80AFFCBC; // type:func
+func_80B559C4 = 0x80AFFDDC; // type:func
+func_80B55A58 = 0x80AFFE6C; // type:func
+func_80B55A84 = 0x80AFFE98; // type:func
+func_80B55AC4 = 0x80AFFED8; // type:func
+func_80B55B04 = 0x80AFFF18; // type:func
+func_80B55B38 = 0x80AFFF4C; // type:func
+func_80B55B78 = 0x80AFFF8C; // type:func
+func_80B55BAC = 0x80AFFFC0; // type:func
+func_80B55C0C = 0x80B00024; // type:func
+func_80B55C4C = 0x80B00064; // type:func
+func_80B55C70 = 0x80B0008C; // type:func
+func_80B55CCC = 0x80B000E4; // type:func
+func_80B55D00 = 0x80B00118; // type:func
+func_80B55DB0 = 0x80B001CC; // type:func
+func_80B55E08 = 0x80B00224; // type:func
+func_80B55E48 = 0x80B00264; // type:func
+func_80B55E7C = 0x80B00298; // type:func
+func_80B55EBC = 0x80B002D8; // type:func
+func_80B55EF0 = 0x80B0030C; // type:func
+func_80B55F38 = 0x80B00354; // type:func
+func_80B55F6C = 0x80B00388; // type:func
+func_80B5604C = 0x80B0046C; // type:func
+func_80B56090 = 0x80B004B0; // type:func
+func_80B56108 = 0x80B0052C; // type:func
+func_80B56160 = 0x80B00584; // type:func
+func_80B561A0 = 0x80B005C4; // type:func
+func_80B561E0 = 0x80B00604; // type:func
+func_80B56214 = 0x80B00638; // type:func
+func_80B562F4 = 0x80B0071C; // type:func
+func_80B5634C = 0x80B00774; // type:func
+func_80B5638C = 0x80B007B4; // type:func
+func_80B563C0 = 0x80B007E8; // type:func
+func_80B56400 = 0x80B00828; // type:func
+func_80B56434 = 0x80B0085C; // type:func
+func_80B56474 = 0x80B0089C; // type:func
+func_80B564A8 = 0x80B008D0; // type:func
+func_80B56658 = 0x80B00A70; // type:func
+func_80B566AC = 0x80B00ACC; // type:func
+func_80B5670C = 0x80B00B34; // type:func
+func_80B5676C = 0x80B00B9C; // type:func
+func_80B567CC = 0x80B00C04; // type:func
+func_80B5682C = 0x80B00C6C; // type:func
+func_80B568B4 = 0x80B00CFC; // type:func
+func_80B5691C = 0x80B00D6C; // type:func
+func_80B5697C = 0x80B00DD4; // type:func
+func_80B569E4 = 0x80B00E44; // type:func
+func_80B56A68 = 0x80B00ED0; // type:func
+func_80B56AE0 = 0x80B00F50; // type:func
+func_80B56B54 = 0x80B00FCC; // type:func
+func_80B56BA8 = 0x80B01028; // type:func
+func_80B56C24 = 0x80B010AC; // type:func
+func_80B56C84 = 0x80B01114; // type:func
+func_80B56CE4 = 0x80B0117C; // type:func
+func_80B56D44 = 0x80B011E4; // type:func
+func_80B56DA4 = 0x80B0124C; // type:func
+func_80B56DC8 = 0x80B01270; // type:func
+func_80B56DEC = 0x80B01298; // type:func
+func_80B56E38 = 0x80B012E4; // type:func
+func_80B56EB8 = 0x80B01364; // type:func
+func_80B56EE4 = 0x80B01394; // type:func
+func_80B56F10 = 0x80B013C4; // type:func
+func_80B56F8C = 0x80B01418; // type:func
+func_80B56FAC = 0x80B01438; // type:func
+func_80B57034 = 0x80B014C4; // type:func
+func_80B57104 = 0x80B01598; // type:func
+func_80B571A8 = 0x80B01640; // type:func
+func_80B571FC = 0x80B01694; // type:func
+func_80B57240 = 0x80B016D8; // type:func
+func_80B57298 = 0x80B01730; // type:func
+func_80B572F0 = 0x80B01788; // type:func
+func_80B57324 = 0x80B017C0; // type:func
+func_80B57350 = 0x80B017EC; // type:func
+func_80B573C8 = 0x80B01864; // type:func
+func_80B573FC = 0x80B01898; // type:func
+func_80B57458 = 0x80B018F4; // type:func
+func_80B57564 = 0x80B01A04; // type:func
+func_80B575B0 = 0x80B01A58; // type:func
+func_80B575D0 = 0x80B01A78; // type:func
+func_80B575F0 = 0x80B01A98; // type:func
+func_80B5764C = 0x80B01AF4; // type:func
+func_80B576C8 = 0x80B01B74; // type:func
+func_80B57704 = 0x80B01BB8; // type:func
+func_80B5772C = 0x80B01BE4; // type:func
+func_80B57754 = 0x80B01C10; // type:func
+func_80B577BC = 0x80B01C7C; // type:func
+func_80B57858 = 0x80B01D1C; // type:func
+func_80B57890 = 0x80B01D58; // type:func
+func_80B57A74 = 0x80B01F40; // type:func
+func_80B57AAC = 0x80B01F78; // type:func
+func_80B57AE0 = 0x80B01FAC; // type:func
+func_80B57C54 = 0x80B02124; // type:func
+func_80B57C7C = 0x80B0214C; // type:func
+func_80B57C8C = 0x80B02160; // type:func
+func_80B57CB4 = 0x80B02188; // type:func
+func_80B57D60 = 0x80B02230; // type:func
+func_80B57D80 = 0x80B02254; // type:func
+func_80B57EAC = 0x80B0238C; // type:func
+func_80B57EEC = 0x80B023D4; // type:func
+func_80B57F1C = 0x80B02408; // type:func
+func_80B57F84 = 0x80B02474; // type:func
+func_80B58014 = 0x80B0250C; // type:func
+func_80B58214 = 0x80B02718; // type:func
+func_80B58268 = 0x80B02770; // type:func
+func_80B582C8 = 0x80B027D0; // type:func
+func_80B584B4 = 0x80B029BC; // type:func
+func_80B58624 = 0x80B02B2C; // type:func
+func_80B5884C = 0x80B02D5C; // type:func
+func_80B58898 = 0x80B02DA8; // type:func
+func_80B588E8 = 0x80B02DF8; // type:func
+func_80B58938 = 0x80B02E48; // type:func
+func_80B5899C = 0x80B02EB0; // type:func
+func_80B58A1C = 0x80B02F30; // type:func
+func_80B58A50 = 0x80B02F6C; // type:func
+func_80B58AAC = 0x80B02FCC; // type:func
+func_80B58C08 = 0x80B03128; // type:func
+func_80B58D50 = 0x80B03270; // type:func
+func_80B58DB0 = 0x80B032D8; // type:func
+func_80B58E10 = 0x80B03340; // type:func
+func_80B58E7C = 0x80B033B4; // type:func
+func_80B58EF4 = 0x80B03434; // type:func
+func_80B58F6C = 0x80B034B4; // type:func
+func_80B58FDC = 0x80B0352C; // type:func
+func_80B5904C = 0x80B035A4; // type:func
+func_80B590BC = 0x80B0361C; // type:func
+func_80B5912C = 0x80B03694; // type:func
+func_80B591BC = 0x80B0372C; // type:func
+func_80B5922C = 0x80B037A4; // type:func
+func_80B592A8 = 0x80B03828; // type:func
+func_80B59340 = 0x80B038C8; // type:func
+func_80B593D0 = 0x80B03960; // type:func
+func_80B5944C = 0x80B039E4; // type:func
+func_80B59698 = 0x80B03BE0; // type:func
+func_80B59768 = 0x80B03CB0; // type:func
+func_80B59828 = 0x80B03D70; // type:func
+func_80B59A80 = 0x80B03FD0; // type:func
+func_80B59AD0 = 0x80B04020; // type:func
+func_80B59B6C = 0x80B040BC; // type:func
+func_80B59DB8 = 0x80B04304; // type:func
+EnZl3_Update = 0x80B04374; // type:func
+EnZl3_Init = 0x80B043BC; // type:func
+EnZl3_OverrideLimbDraw = 0x80B0447C; // type:func
+func_80B59FE8 = 0x80B044E4; // type:func
+func_80B59FF4 = 0x80B044F4; // type:func
+func_80B5A1D0 = 0x80B046A0; // type:func
+EnZl3_Draw = 0x80B04848; // type:func
+BossGanon2_InitRand = 0x80B05610; // type:func
+BossGanon2_RandZeroOne = 0x80B05630; // type:func
+func_808FD080 = 0x80B05758; // type:func
+BossGanon2_SetObjectSegment = 0x80B057E8; // type:func
+func_808FD210 = 0x80B0589C; // type:func
+func_808FD27C = 0x80B0590C; // type:func
+BossGanon2_Init = 0x80B059EC; // type:func
+BossGanon2_Destroy = 0x80B05B1C; // type:func
+func_808FD4D4 = 0x80B05B6C; // type:func
+func_808FD5C4 = 0x80B05C5C; // type:func
+func_808FD5F4 = 0x80B05C90; // type:func
+func_808FF898 = 0x80B07F40; // type:func
+func_808FFA24 = 0x80B080CC; // type:func
+func_808FFAC8 = 0x80B08170; // type:func
+func_808FFBBC = 0x80B08268; // type:func
+func_808FFC84 = 0x80B08334; // type:func
+func_808FFCFC = 0x80B083AC; // type:func
+func_808FFDB0 = 0x80B08460; // type:func
+func_808FFEBC = 0x80B08570; // type:func
+func_808FFF90 = 0x80B08644; // type:func
+func_808FFFE0 = 0x80B08694; // type:func
+func_809000A0 = 0x80B08754; // type:func
+func_80900104 = 0x80B087B4; // type:func
+func_80900210 = 0x80B088C0; // type:func
+func_8090026C = 0x80B0891C; // type:func
+func_809002CC = 0x80B08980; // type:func
+func_80900344 = 0x80B089F4; // type:func
+func_80900580 = 0x80B08C30; // type:func
+func_80900650 = 0x80B08D00; // type:func
+func_80900818 = 0x80B08EC8; // type:func
+func_80900890 = 0x80B08F40; // type:func
+func_80901020 = 0x80B096D4; // type:func
+func_8090109C = 0x80B09750; // type:func
+func_8090120C = 0x80B098C0; // type:func
+func_80902348 = 0x80B0AA04; // type:func
+BossGanon2_CollisionCheck = 0x80B0ABE4; // type:func
+BossGanon2_Update = 0x80B0AED8; // type:func
+func_809034E4 = 0x80B0BBA4; // type:func
+func_80903F38 = 0x80B0C5F8; // type:func
+func_80904108 = 0x80B0C784; // type:func
+func_80904340 = 0x80B0C988; // type:func
+func_8090464C = 0x80B0CC78; // type:func
+BossGanon2_OverrideLimbDraw = 0x80B0CE0C; // type:func
+BossGanon2_PostLimbDraw = 0x80B0CF44; // type:func
+func_80904D88 = 0x80B0D308; // type:func
+func_80904FC8 = 0x80B0D50C; // type:func
+func_8090523C = 0x80B0D730; // type:func
+BossGanon2_PostLimbDraw2 = 0x80B0D9C0; // type:func
+func_80905674 = 0x80B0DAEC; // type:func
+BossGanon2_Draw = 0x80B0DD34; // type:func
+BossGanon2_UpdateEffects = 0x80B0E1B4; // type:func
+BossGanon2_DrawEffects = 0x80B0E4F8; // type:func
+func_80906538 = 0x80B0E8F0; // type:func
+BossGanon2_GenShadowTexture = 0x80B0EDB0; // type:func
+BossGanon2_DrawShadowTexture = 0x80B0EE68; // type:func
+EnKakasi_Destroy = 0x80B18480; // type:func
+EnKakasi_Init = 0x80B184AC; // type:func
+func_80A8F28C = 0x80B18574; // type:func
+func_80A8F320 = 0x80B18608; // type:func
+func_80A8F660 = 0x80B18948; // type:func
+func_80A8F75C = 0x80B18A44; // type:func
+func_80A8F8D0 = 0x80B18BC0; // type:func
+func_80A8F9C8 = 0x80B18CAC; // type:func
+func_80A8FAA4 = 0x80B18D8C; // type:func
+func_80A8FBB8 = 0x80B18E90; // type:func
+EnKakasi_Update = 0x80B18F28; // type:func
+EnKakasi_Draw = 0x80B1902C; // type:func
+EnTakaraMan_Destroy = 0x80B191C0; // type:func
+EnTakaraMan_Init = 0x80B191D0; // type:func
+func_80B176E0 = 0x80B1931C; // type:func
+func_80B1778C = 0x80B193C8; // type:func
+func_80B17934 = 0x80B19570; // type:func
+func_80B17A6C = 0x80B196A8; // type:func
+func_80B17AC4 = 0x80B19704; // type:func
+func_80B17B14 = 0x80B19758; // type:func
+EnTakaraMan_Update = 0x80B197BC; // type:func
+EnTakaraMan_OverrideLimbDraw = 0x80B19894; // type:func
+EnTakaraMan_Draw = 0x80B198FC; // type:func
+ObjMakeoshihiki_Init = 0x80B19A80; // type:func
+ObjMakeoshihiki_Draw = 0x80B19BF4; // type:func
+OceffSpot_SetupAction = 0x80B19F10; // type:func
+OceffSpot_Init = 0x80B19F1C; // type:func
+OceffSpot_Destroy = 0x80B1A078; // type:func
+OceffSpot_End = 0x80B1A108; // type:func
+OceffSpot_Wait = 0x80B1A1D0; // type:func
+OceffSpot_GrowCylinder = 0x80B1A20C; // type:func
+OceffSpot_Update = 0x80B1A270; // type:func
+OceffSpot_Draw = 0x80B1A548; // type:func
+EndTitle_Init = 0x80B1AE40; // type:func
+EndTitle_Destroy = 0x80B1AE6C; // type:func
+EndTitle_Update = 0x80B1AE74; // type:func
+EndTitle_DrawFull = 0x80B1AE7C; // type:func
+EndTitle_DrawNintendoLogo = 0x80B1B4D8; // type:func
+EnTorch_Init = 0x80B20880; // type:func
+DemoEc_Destroy = 0x80B20970; // type:func
+DemoEc_Init = 0x80B20994; // type:func
+DemoEc_UpdateSkelAnime = 0x80B209DC; // type:func
+DemoEc_UpdateBgFlags = 0x80B20A00; // type:func
+func_8096D594 = 0x80B20A48; // type:func
+func_8096D5D4 = 0x80B20A88; // type:func
+func_8096D64C = 0x80B20B00; // type:func
+DemoEc_UpdateEyes = 0x80B20B40; // type:func
+DemoEc_SetEyeTexIndex = 0x80B20BC8; // type:func
+DemoEc_InitSkelAnime = 0x80B20BE0; // type:func
+DemoEc_ChangeAnimation = 0x80B20C58; // type:func
+DemoEc_AllocColorDList = 0x80B20D14; // type:func
+DemoEc_DrawSkeleton = 0x80B20D6C; // type:func
+DemoEc_DrawSkeletonCustomColor = 0x80B20EFC; // type:func
+DemoEc_UseDrawObject = 0x80B2115C; // type:func
+DemoEc_UseAnimationObject = 0x80B211B8; // type:func
+DemoEc_GetCue = 0x80B211F0; // type:func
+DemoEc_SetStartPosRotFromCue = 0x80B21218; // type:func
+DemoEc_InitIngo = 0x80B21298; // type:func
+DemoEc_UpdateIngo = 0x80B21338; // type:func
+DemoEc_DrawIngo = 0x80B21378; // type:func
+DemoEc_InitTalon = 0x80B213AC; // type:func
+DemoEc_UpdateTalon = 0x80B2144C; // type:func
+DemoEc_DrawTalon = 0x80B2148C; // type:func
+DemoEc_InitWindmillMan = 0x80B214C0; // type:func
+DemoEc_UpdateWindmillMan = 0x80B21560; // type:func
+DemoEc_DrawWindmillMan = 0x80B215A0; // type:func
+DemoEc_InitKokiriBoy = 0x80B215D4; // type:func
+DemoEc_InitDancingKokiriBoy = 0x80B21674; // type:func
+DemoEc_UpdateKokiriBoy = 0x80B21718; // type:func
+DemoEc_UpdateDancingKokiriBoy = 0x80B21758; // type:func
+DemoEc_DrawKokiriBoy = 0x80B21778; // type:func
+DemoEc_InitKokiriGirl = 0x80B217BC; // type:func
+DemoEc_InitDancingKokiriGirl = 0x80B2185C; // type:func
+DemoEc_UpdateKokiriGirl = 0x80B21900; // type:func
+DemoEc_UpdateDancingKokiriGirl = 0x80B21948; // type:func
+DemoEc_DrawKokiriGirl = 0x80B21968; // type:func
+DemoEc_InitOldMan = 0x80B219BC; // type:func
+DemoEc_UpdateOldMan = 0x80B21A5C; // type:func
+DemoEc_DrawOldMan = 0x80B21AA4; // type:func
+DemoEc_InitBeardedMan = 0x80B21AF8; // type:func
+DemoEc_UpdateBeardedMan = 0x80B21B98; // type:func
+DemoEc_DrawBeardedMan = 0x80B21BE0; // type:func
+DemoEc_InitWoman = 0x80B21C34; // type:func
+DemoEc_UpdateWoman = 0x80B21CD4; // type:func
+DemoEc_DrawWoman = 0x80B21D1C; // type:func
+DemoEc_InitOldWoman = 0x80B21D58; // type:func
+DemoEc_UpdateOldWoman = 0x80B21DF8; // type:func
+DemoEc_DrawOldWoman = 0x80B21E38; // type:func
+DemoEc_InitBossCarpenter = 0x80B21E68; // type:func
+DemoEc_UpdateBossCarpenter = 0x80B21F08; // type:func
+DemoEc_DrawBossCarpenter = 0x80B21F48; // type:func
+DemoEc_InitCarpenter = 0x80B21F74; // type:func
+DemoEc_UpdateCarpenter = 0x80B22014; // type:func
+DemoEc_CarpenterOverrideLimbDraw = 0x80B22054; // type:func
+DemoEc_GetCarpenterPostLimbDList = 0x80B22158; // type:func
+DemoEc_CarpenterPostLimbDraw = 0x80B221C0; // type:func
+DemoEc_DrawCarpenter = 0x80B22244; // type:func
+DemoEc_InitGerudo = 0x80B22280; // type:func
+DemoEc_UpdateGerudo = 0x80B22324; // type:func
+DemoEc_GetGerudoPostLimbDList = 0x80B2236C; // type:func
+DemoEc_GerudoPostLimbDraw = 0x80B223C0; // type:func
+DemoEc_DrawGerudo = 0x80B22444; // type:func
+DemoEc_InitDancingZora = 0x80B22488; // type:func
+DemoEc_UpdateDancingZora = 0x80B2252C; // type:func
+DemoEc_DrawDancingZora = 0x80B22574; // type:func
+DemoEc_InitKingZora = 0x80B225B0; // type:func
+func_8096F1D4 = 0x80B22660; // type:func
+func_8096F224 = 0x80B226B0; // type:func
+func_8096F26C = 0x80B226F8; // type:func
+func_8096F2B0 = 0x80B22740; // type:func
+DemoEc_UpdateKingZora = 0x80B227A4; // type:func
+func_8096F378 = 0x80B2280C; // type:func
+func_8096F3D4 = 0x80B2286C; // type:func
+DemoEc_DrawKingZora = 0x80B228B4; // type:func
+DemoEc_InitMido = 0x80B228F0; // type:func
+func_8096F4FC = 0x80B229A0; // type:func
+func_8096F544 = 0x80B229E8; // type:func
+func_8096F578 = 0x80B22A1C; // type:func
+DemoEc_UpdateMido = 0x80B22A80; // type:func
+func_8096F640 = 0x80B22AE8; // type:func
+DemoEc_DrawMido = 0x80B22B48; // type:func
+DemoEc_InitCucco = 0x80B22B84; // type:func
+DemoEc_UpdateCucco = 0x80B22C54; // type:func
+DemoEc_DrawCucco = 0x80B22C94; // type:func
+DemoEc_InitCuccoLady = 0x80B22CC0; // type:func
+DemoEc_UpdateCuccoLady = 0x80B22D64; // type:func
+DemoEc_DrawCuccoLady = 0x80B22DAC; // type:func
+DemoEc_InitPotionShopOwner = 0x80B22DE8; // type:func
+DemoEc_UpdatePotionShopOwner = 0x80B22E8C; // type:func
+DemoEc_DrawPotionShopOwner = 0x80B22ED4; // type:func
+DemoEc_InitMaskShopOwner = 0x80B22F10; // type:func
+DemoEc_UpdateMaskShopOwner = 0x80B22FB4; // type:func
+DemoEc_DrawMaskShopOwner = 0x80B22FF4; // type:func
+DemoEc_InitFishingOwner = 0x80B23024; // type:func
+DemoEc_UpdateFishingOwner = 0x80B230C8; // type:func
+DemoEc_FishingOwnerPostLimbDraw = 0x80B23110; // type:func
+DemoEc_DrawFishingOwner = 0x80B23190; // type:func
+DemoEc_InitBombchuShopOwner = 0x80B231D4; // type:func
+DempEc_UpdateBombchuShopOwner = 0x80B23278; // type:func
+DemoEc_DrawBombchuShopOwner = 0x80B232C0; // type:func
+DemoEc_InitGorons = 0x80B232FC; // type:func
+DemoEc_UpdateGorons = 0x80B23434; // type:func
+DemoEc_DrawGorons = 0x80B2347C; // type:func
+DemoEc_InitMalon = 0x80B234BC; // type:func
+DemoEc_UpdateMalon = 0x80B23560; // type:func
+DemoEc_DrawMalon = 0x80B235A8; // type:func
+DemoEc_InitNpc = 0x80B235E8; // type:func
+DemoEc_InitCommon = 0x80B23634; // type:func
+DemoEc_Update = 0x80B23708; // type:func
+DemoEc_DrawCommon = 0x80B23780; // type:func
+DemoEc_Draw = 0x80B23790; // type:func
+ShotSun_Init = 0x80B241D0; // type:func
+ShotSun_Destroy = 0x80B2428C; // type:func
+ShotSun_SpawnFairy = 0x80B242D0; // type:func
+ShotSun_TriggerFairy = 0x80B24378; // type:func
+ShotSun_UpdateFairySpawner = 0x80B24414; // type:func
+ShotSun_UpdateHyliaSun = 0x80B24564; // type:func
+ShotSun_Update = 0x80B2479C; // type:func
+EnDyExtra_Destroy = 0x80B24890; // type:func
+EnDyExtra_Init = 0x80B248A0; // type:func
+EnDyExtra_WaitForTrigger = 0x80B24914; // type:func
+EnDyExtra_FallAndKill = 0x80B249A8; // type:func
+EnDyExtra_Update = 0x80B24A60; // type:func
+EnDyExtra_Draw = 0x80B24ACC; // type:func
+EnWonderTalk2_Destroy = 0x80B24E30; // type:func
+EnWonderTalk2_Init = 0x80B24E40; // type:func
+func_80B3A10C = 0x80B24FD0; // type:func
+func_80B3A15C = 0x80B25020; // type:func
+func_80B3A3D4 = 0x80B251A0; // type:func
+func_80B3A4F8 = 0x80B25288; // type:func
+EnWonderTalk2_DoNothing = 0x80B253D8; // type:func
+EnWonderTalk2_Update = 0x80B253E8; // type:func
+EnGe2_ChangeAction = 0x80B254D0; // type:func
+EnGe2_Init = 0x80B25578; // type:func
+EnGe2_Destroy = 0x80B25790; // type:func
+Ge2_DetectPlayerInAction = 0x80B257BC; // type:func
+Ge2_DetectPlayerInUpdate = 0x80B25868; // type:func
+EnGe2_CheckAllCarpentersRescued = 0x80B25998; // type:func
+EnGe2_CaptureClose = 0x80B259C4; // type:func
+EnGe2_CaptureCharge = 0x80B25A98; // type:func
+EnGe2_CaptureTurn = 0x80B25BCC; // type:func
+EnGe2_KnockedOut = 0x80B25C44; // type:func
+EnGe2_TurnPlayerSpotted = 0x80B25D3C; // type:func
+EnGe2_AboutTurn = 0x80B25E44; // type:func
+EnGe2_Walk = 0x80B25EFC; // type:func
+EnGe2_Stand = 0x80B25FC4; // type:func
+EnGe2_TurnToFacePlayer = 0x80B26004; // type:func
+EnGe2_LookAtPlayer = 0x80B2611C; // type:func
+EnGe2_SetActionAfterTalk = 0x80B26230; // type:func
+EnGe2_WaitLookAtPlayer = 0x80B262F4; // type:func
+EnGe2_WaitTillCardGiven = 0x80B26314; // type:func
+EnGe2_GiveCard = 0x80B26378; // type:func
+EnGe2_ForceTalk = 0x80B2640C; // type:func
+EnGe2_SetupCapturePlayer = 0x80B26490; // type:func
+EnGe2_MaintainColliderAndSetAnimState = 0x80B26500; // type:func
+EnGe2_MoveAndBlink = 0x80B265A8; // type:func
+EnGe2_UpdateFriendly = 0x80B26634; // type:func
+EnGe2_UpdateAfterTalk = 0x80B2670C; // type:func
+EnGe2_Update = 0x80B26760; // type:func
+EnGe2_UpdateStunned = 0x80B26948; // type:func
+EnGe2_OverrideLimbDraw = 0x80B26A7C; // type:func
+EnGe2_PostLimbDraw = 0x80B26AC4; // type:func
+EnGe2_Draw = 0x80B26B04; // type:func
+ObjRoomtimer_Init = 0x80B26E70; // type:func
+ObjRoomtimer_Destroy = 0x80B26EC4; // type:func
+func_80B9D054 = 0x80B26EF8; // type:func
+func_80B9D0B0 = 0x80B26F58; // type:func
+ObjRoomtimer_Update = 0x80B27034; // type:func
+EnSsh_SetupAction = 0x80B270C0; // type:func
+EnSsh_SpawnShockwave = 0x80B270CC; // type:func
+EnSsh_CreateBlureEffect = 0x80B27154; // type:func
+EnSsh_CheckCeilingPos = 0x80B27250; // type:func
+EnSsh_AddBlureVertex = 0x80B272E8; // type:func
+EnSsh_AddBlureSpace = 0x80B273F0; // type:func
+EnSsh_InitColliders = 0x80B2741C; // type:func
+EnSsh_SetAnimation = 0x80B2755C; // type:func
+EnSsh_SetWaitAnimation = 0x80B27690; // type:func
+EnSsh_SetReturnAnimation = 0x80B276B0; // type:func
+EnSsh_SetLandAnimation = 0x80B276E4; // type:func
+EnSsh_SetDropAnimation = 0x80B27728; // type:func
+EnSsh_SetStunned = 0x80B27778; // type:func
+EnSsh_SetColliderScale = 0x80B277A4; // type:func
+EnSsh_Damaged = 0x80B27918; // type:func
+EnSsh_Turn = 0x80B279F4; // type:func
+EnSsh_Stunned = 0x80B27AC8; // type:func
+EnSsh_UpdateYaw = 0x80B27B68; // type:func
+EnSsh_Bob = 0x80B27BA4; // type:func
+EnSsh_IsCloseToLink = 0x80B27C10; // type:func
+EnSsh_IsCloseToHome = 0x80B27CF8; // type:func
+EnSsh_IsCloseToGround = 0x80B27D30; // type:func
+EnSsh_Sway = 0x80B27D70; // type:func
+EnSsh_CheckBodyStickHit = 0x80B27EB4; // type:func
+EnSsh_CheckHitPlayer = 0x80B27F28; // type:func
+EnSsh_CheckHitFront = 0x80B28030; // type:func
+EnSsh_CheckHitBack = 0x80B2808C; // type:func
+EnSsh_CollisionCheck = 0x80B28164; // type:func
+EnSsh_SetBodyCylinderAC = 0x80B28218; // type:func
+EnSsh_SetLegsCylinderAC = 0x80B2825C; // type:func
+EnSsh_SetCylinderOC = 0x80B28314; // type:func
+EnSsh_SetColliders = 0x80B284EC; // type:func
+EnSsh_Init = 0x80B285B4; // type:func
+EnSsh_Destroy = 0x80B28748; // type:func
+EnSsh_Wait = 0x80B287C8; // type:func
+EnSsh_Talk = 0x80B28824; // type:func
+EnSsh_Idle = 0x80B28870; // type:func
+EnSsh_Land = 0x80B28B08; // type:func
+EnSsh_Drop = 0x80B28BF0; // type:func
+EnSsh_Return = 0x80B28CF0; // type:func
+EnSsh_UpdateColliderScale = 0x80B28DC4; // type:func
+EnSsh_Start = 0x80B28E6C; // type:func
+EnSsh_Update = 0x80B28EF4; // type:func
+EnSsh_OverrideLimbDraw = 0x80B29014; // type:func
+EnSsh_PostLimbDraw = 0x80B29104; // type:func
+EnSsh_Draw = 0x80B29140; // type:func
+EnSth_SetupAction = 0x80B296B0; // type:func
+EnSth_Init = 0x80B296BC; // type:func
+EnSth_SetupShapeColliderUpdate2AndDraw = 0x80B297B8; // type:func
+EnSth_SetupAfterObjectLoaded = 0x80B2983C; // type:func
+EnSth_Destroy = 0x80B29960; // type:func
+EnSth_WaitForObject = 0x80B2998C; // type:func
+EnSth_FacePlayer = 0x80B299E0; // type:func
+EnSth_LookAtPlayer = 0x80B29AF8; // type:func
+EnSth_RewardObtainedTalk = 0x80B29C0C; // type:func
+EnSth_ParentRewardObtainedWait = 0x80B29C88; // type:func
+EnSth_GivePlayerItem = 0x80B29D14; // type:func
+EnSth_GiveReward = 0x80B29DB0; // type:func
+EnSth_RewardUnobtainedTalk = 0x80B29E30; // type:func
+EnSth_RewardUnobtainedWait = 0x80B29EAC; // type:func
+EnSth_ChildRewardObtainedWait = 0x80B29F50; // type:func
+EnSth_Update = 0x80B29FFC; // type:func
+EnSth_Update2 = 0x80B2A020; // type:func
+EnSth_OverrideLimbDraw = 0x80B2A124; // type:func
+EnSth_PostLimbDraw = 0x80B2A280; // type:func
+EnSth_AllocColorDList = 0x80B2A2F8; // type:func
+EnSth_Draw = 0x80B2A364; // type:func
+OceffWipe_Init = 0x80B2D770; // type:func
+OceffWipe_Destroy = 0x80B2D7CC; // type:func
+OceffWipe_Update = 0x80B2D818; // type:func
+OceffWipe_Draw = 0x80B2D878; // type:func
+EffectSsDust_Init = 0x80B2E4F0; // type:func
+EffectSsDust_Draw = 0x80B2E6A4; // type:func
+EffectSsDust_Update = 0x80B2E9EC; // type:func
+EffectSsDust_UpdateFire = 0x80B2EAE4; // type:func
+EffectSsKiraKira_Init = 0x80B2ED30; // type:func
+EffectSsKiraKira_Draw = 0x80B2EED0; // type:func
+func_809AABF0 = 0x80B2F0EC; // type:func
+func_809AACAC = 0x80B2F1A4; // type:func
+func_809AAD6C = 0x80B2F260; // type:func
+EffectSsBomb_Init = 0x80B2F3A0; // type:func
+EffectSsBomb_Draw = 0x80B2F468; // type:func
+EffectSsBomb_Update = 0x80B2F6A0; // type:func
+EffectSsBomb2_Init = 0x80B2F7D0; // type:func
+EffectSsBomb2_DrawFade = 0x80B2F8C8; // type:func
+EffectSsBomb2_DrawLayered = 0x80B2FAB8; // type:func
+EffectSsBomb2_Update = 0x80B2FDEC; // type:func
+EffectSsBlast_Init = 0x80B300D0; // type:func
+EffectSsBlast_Draw = 0x80B3022C; // type:func
+EffectSsBlast_Update = 0x80B30398; // type:func
+EffectSsGSpk_Init = 0x80B30460; // type:func
+EffectSsGSpk_Draw = 0x80B305D0; // type:func
+EffectSsGSpk_Update = 0x80B307C4; // type:func
+EffectSsGSpk_UpdateNoAccel = 0x80B308CC; // type:func
+EffectSsDFire_Init = 0x80B30A10; // type:func
+EffectSsDFire_Draw = 0x80B30B5C; // type:func
+EffectSsDFire_Update = 0x80B30DA4; // type:func
+EffectSsBubble_Init = 0x80B30F00; // type:func
+EffectSsBubble_Draw = 0x80B31090; // type:func
+EffectSsBubble_Update = 0x80B311E4; // type:func
+EffectSsGRipple_Init = 0x80B31380; // type:func
+EffectSsGRipple_DrawRipple = 0x80B314FC; // type:func
+EffectSsGRipple_Draw = 0x80B316F8; // type:func
+EffectSsGRipple_Update = 0x80B31730; // type:func
+EffectSsGSplash_Init = 0x80B318E0; // type:func
+EffectSsGSplash_Draw = 0x80B31B00; // type:func
+EffectSsGSplash_Update = 0x80B31C08; // type:func
+EffectSsGMagma_Init = 0x80B31D90; // type:func
+EffectSsGMagma_Draw = 0x80B31EE8; // type:func
+EffectSsGMagma_Update = 0x80B31F44; // type:func
+EffectSsGFire_Init = 0x80B31FF0; // type:func
+EffectSsGFire_Draw = 0x80B32130; // type:func
+EffectSsGFire_Update = 0x80B321D8; // type:func
+EffectSsLightning_Init = 0x80B32280; // type:func
+EffectSsLightning_NewLightning = 0x80B32368; // type:func
+EffectSsLightning_Draw = 0x80B3240C; // type:func
+EffectSsLightning_Update = 0x80B326A4; // type:func
+EffectSsDtBubble_Init = 0x80B32950; // type:func
+EffectSsDtBubble_Draw = 0x80B32BA4; // type:func
+EffectSsDtBubble_Update = 0x80B32DE4; // type:func
+EffectSsHahen_CheckForObject = 0x80B32EE0; // type:func
+EffectSsHahen_Init = 0x80B32F54; // type:func
+EffectSsHahen_Draw = 0x80B330F0; // type:func
+EffectSsHahen_DrawGray = 0x80B33250; // type:func
+EffectSsHahen_Update = 0x80B333F8; // type:func
+EffectSsStick_Init = 0x80B33520; // type:func
+EffectSsStick_Draw = 0x80B33680; // type:func
+EffectSsStick_Update = 0x80B33820; // type:func
+EffectSsSibuki_Init = 0x80B338C0; // type:func
+EffectSsSibuki_Draw = 0x80B33A78; // type:func
+EffectSsSibuki_Update = 0x80B33C28; // type:func
+EffectSsSibuki2_Init = 0x80B33F90; // type:func
+EffectSsSibuki2_Draw = 0x80B34040; // type:func
+EffectSsSibuki2_Update = 0x80B34224; // type:func
+EffectSsGMagma2_Init = 0x80B342C0; // type:func
+EffectSsGMagma2_Draw = 0x80B3448C; // type:func
+EffectSsGMagma2_Update = 0x80B346A4; // type:func
+EffectSsStone1_Init = 0x80B347D0; // type:func
+EffectSsStone1_Draw = 0x80B3485C; // type:func
+EffectSsStone1_Update = 0x80B34A58; // type:func
+EffectSsHitMark_Init = 0x80B34B50; // type:func
+EffectSsHitMark_Draw = 0x80B34C50; // type:func
+EffectSsHitMark_Update = 0x80B34E5C; // type:func
+EffectSsFhgFlash_Init = 0x80B350A0; // type:func
+EffectSsFhgFlash_DrawLightBall = 0x80B353EC; // type:func
+EffectSsFhgFlash_DrawShock = 0x80B355E0; // type:func
+EffectSsFhgFlash_UpdateLightBall = 0x80B357EC; // type:func
+EffectSsFhgFlash_UpdateShock = 0x80B35884; // type:func
+EffectSsKFire_Init = 0x80B36020; // type:func
+EffectSsKFire_Draw = 0x80B360F0; // type:func
+EffectSsKFire_Update = 0x80B36358; // type:func
+EffectSsSolderSrchBall_Init = 0x80B36460; // type:func
+EffectSsSolderSrchBall_Update = 0x80B364E0; // type:func
+EffectSsKakera_Init = 0x80B36610; // type:func
+func_809A9818 = 0x80B3679C; // type:func
+EffectSsKakera_Draw = 0x80B367D8; // type:func
+func_809A9BA8 = 0x80B36AC4; // type:func
+func_809A9C10 = 0x80B36B30; // type:func
+func_809A9DC0 = 0x80B36CE0; // type:func
+func_809A9DD8 = 0x80B36CFC; // type:func
+func_809A9DEC = 0x80B36D18; // type:func
+func_809A9E28 = 0x80B36D54; // type:func
+func_809A9E68 = 0x80B36D94; // type:func
+func_809A9E88 = 0x80B36DB4; // type:func
+func_809A9F10 = 0x80B36E44; // type:func
+func_809A9F4C = 0x80B36E84; // type:func
+func_809A9FD8 = 0x80B36F18; // type:func
+func_809AA0B8 = 0x80B36FF4; // type:func
+func_809AA0EC = 0x80B3702C; // type:func
+func_809AA230 = 0x80B37174; // type:func
+EffectSsKakera_Update = 0x80B37374; // type:func
+EffectSsIcePiece_Init = 0x80B376A0; // type:func
+EffectSsIcePiece_Draw = 0x80B377EC; // type:func
+EffectSsIcePiece_Update = 0x80B37A20; // type:func
+EffectSsEnIce_Init = 0x80B37AE0; // type:func
+EffectSsEnIce_Draw = 0x80B37D88; // type:func
+EffectSsEnIce_UpdateFlying = 0x80B380F8; // type:func
+EffectSsEnIce_Update = 0x80B382D0; // type:func
+EffectSsFireTail_Init = 0x80B383A0; // type:func
+EffectSsFireTail_Draw = 0x80B384BC; // type:func
+EffectSsFireTail_Update = 0x80B389C4; // type:func
+EffectSsEnFire_Init = 0x80B38AA0; // type:func
+EffectSsEnFire_Draw = 0x80B38C68; // type:func
+EffectSsEnFire_Update = 0x80B38F70; // type:func
+EffectSsExtra_Init = 0x80B391F0; // type:func
+EffectSsExtra_Draw = 0x80B39334; // type:func
+EffectSsExtra_Update = 0x80B394E8; // type:func
+EffectSsFcircle_Init = 0x80B395B0; // type:func
+EffectSsFcircle_Draw = 0x80B39670; // type:func
+EffectSsFcircle_Update = 0x80B3993C; // type:func
+EffectSsDeadDb_Init = 0x80B39A60; // type:func
+EffectSsDeadDb_Draw = 0x80B39B7C; // type:func
+EffectSsDeadDb_Update = 0x80B39D50; // type:func
+EffectSsDeadDd_Init = 0x80B39F40; // type:func
+EffectSsDeadDd_Draw = 0x80B3A208; // type:func
+EffectSsDeadDd_Update = 0x80B3A3D8; // type:func
+EffectSsDeadDs_Init = 0x80B3A4D0; // type:func
+EffectSsDeadDs_Draw = 0x80B3A5B8; // type:func
+EffectSsDeadDs_Update = 0x80B3A88C; // type:func
+EffectSsDeadSound_Init = 0x80B3A950; // type:func
+EffectSsDeadSound_Update = 0x80B3A9DC; // type:func
+OceffStorm_SetupAction = 0x80B3AA90; // type:func
+OceffStorm_Init = 0x80B3AA9C; // type:func
+OceffStorm_Destroy = 0x80B3AB6C; // type:func
+OceffStorm_DefaultAction = 0x80B3ABB8; // type:func
+OceffStorm_UnkAction = 0x80B3AD7C; // type:func
+OceffStorm_Update = 0x80B3AD9C; // type:func
+OceffStorm_Draw2 = 0x80B3AE08; // type:func
+OceffStorm_Draw = 0x80B3AFB8; // type:func
+EnWeiyer_Init = 0x80B3C640; // type:func
+EnWeiyer_Destroy = 0x80B3C710; // type:func
+func_80B32384 = 0x80B3C73C; // type:func
+func_80B32434 = 0x80B3C7F0; // type:func
+func_80B32494 = 0x80B3C850; // type:func
+func_80B32508 = 0x80B3C8C4; // type:func
+func_80B32538 = 0x80B3C8F8; // type:func
+func_80B325A0 = 0x80B3C964; // type:func
+func_80B32660 = 0x80B3CA24; // type:func
+func_80B32724 = 0x80B3CAE8; // type:func
+func_80B327B0 = 0x80B3CB74; // type:func
+func_80B327D8 = 0x80B3CBA0; // type:func
+func_80B32804 = 0x80B3CBD0; // type:func
+func_80B328E8 = 0x80B3CCB4; // type:func
+func_80B32C2C = 0x80B3CFF8; // type:func
+func_80B32D30 = 0x80B3D0FC; // type:func
+func_80B32DEC = 0x80B3D1B8; // type:func
+func_80B32E34 = 0x80B3D204; // type:func
+func_80B33018 = 0x80B3D3EC; // type:func
+func_80B331CC = 0x80B3D5A0; // type:func
+func_80B332B4 = 0x80B3D688; // type:func
+func_80B33338 = 0x80B3D70C; // type:func
+func_80B333B8 = 0x80B3D78C; // type:func
+func_80B3349C = 0x80B3D870; // type:func
+func_80B3368C = 0x80B3DA64; // type:func
+EnWeiyer_Update = 0x80B3DB44; // type:func
+EnWeiyer_OverrideLimbDraw = 0x80B3DCB8; // type:func
+EnWeiyer_Draw = 0x80B3DCE8; // type:func
+BgSpot05Soko_Init = 0x80B3E040; // type:func
+BgSpot05Soko_Destroy = 0x80B3E14C; // type:func
+func_808AE5A8 = 0x80B3E180; // type:func
+func_808AE5B4 = 0x80B3E190; // type:func
+func_808AE630 = 0x80B3E20C; // type:func
+BgSpot05Soko_Update = 0x80B3E274; // type:func
+BgSpot05Soko_Draw = 0x80B3E298; // type:func
+BgJya1flift_InitDynapoly = 0x80B3E360; // type:func
+BgJya1flift_InitCollision = 0x80B3E3B8; // type:func
+BgJya1flift_Init = 0x80B3E40C; // type:func
+BgJya1flift_Destroy = 0x80B3E504; // type:func
+BgJya1flift_SetupWaitForSwitch = 0x80B3E55C; // type:func
+BgJya1flift_WaitForSwitch = 0x80B3E57C; // type:func
+BgJya1flift_SetupDoNothing = 0x80B3E5C0; // type:func
+BgJya1flift_DoNothing = 0x80B3E5E0; // type:func
+BgJya1flift_ChangeDirection = 0x80B3E5F0; // type:func
+BgJya1flift_Move = 0x80B3E618; // type:func
+BgJya1flift_ResetMoveDelay = 0x80B3E6FC; // type:func
+BgJya1flift_DelayMove = 0x80B3E714; // type:func
+BgJya1flift_Update = 0x80B3E754; // type:func
+BgJya1flift_Draw = 0x80B3E870; // type:func
+BgJyaHaheniron_ColliderInit = 0x80B3E9F0; // type:func
+BgJyaHaheniron_SpawnFragments = 0x80B3EA44; // type:func
+BgJyaHaheniron_Init = 0x80B3EC70; // type:func
+BgJyaHaheniron_Destroy = 0x80B3ED3C; // type:func
+BgJyaHaheniron_SetupChairCrumble = 0x80B3ED74; // type:func
+BgJyaHaheniron_ChairCrumble = 0x80B3ED88; // type:func
+BgJyaHaheniron_SetupPillarCrumble = 0x80B3EEC4; // type:func
+BgJyaHaheniron_PillarCrumble = 0x80B3EED8; // type:func
+BgJyaHaheniron_SetupRubbleCollide = 0x80B3EF58; // type:func
+BgJyaHaheniron_RubbleCollide = 0x80B3EF6C; // type:func
+BgJyaHaheniron_Update = 0x80B3EFD0; // type:func
+BgJyaHaheniron_Draw = 0x80B3EFFC; // type:func
+BgSpot12Gate_InitDynaPoly = 0x80B3F1E0; // type:func
+BgSpot12Gate_Init = 0x80B3F238; // type:func
+BgSpot12Gate_Destroy = 0x80B3F2B8; // type:func
+func_808B30C0 = 0x80B3F2EC; // type:func
+func_808B30D8 = 0x80B3F308; // type:func
+func_808B3134 = 0x80B3F364; // type:func
+func_808B314C = 0x80B3F380; // type:func
+func_808B317C = 0x80B3F3B0; // type:func
+func_808B318C = 0x80B3F3C4; // type:func
+func_808B3274 = 0x80B3F4AC; // type:func
+func_808B3298 = 0x80B3F4D4; // type:func
+BgSpot12Gate_Update = 0x80B3F4E4; // type:func
+BgSpot12Gate_Draw = 0x80B3F518; // type:func
+func_808B3420 = 0x80B3F5F0; // type:func
+BgSpot12Saku_Init = 0x80B3F648; // type:func
+BgSpot12Saku_Destroy = 0x80B3F6C8; // type:func
+func_808B3550 = 0x80B3F6FC; // type:func
+func_808B357C = 0x80B3F72C; // type:func
+func_808B35E4 = 0x80B3F794; // type:func
+func_808B3604 = 0x80B3F7B4; // type:func
+func_808B3714 = 0x80B3F8C4; // type:func
+func_808B37AC = 0x80B3F958; // type:func
+BgSpot12Saku_Update = 0x80B3F968; // type:func
+BgSpot12Saku_Draw = 0x80B3F99C; // type:func
+EnHintnuts_Init = 0x80B3FAB0; // type:func
+EnHintnuts_Destroy = 0x80B3FC50; // type:func
+EnHintnuts_HitByScrubProjectile1 = 0x80B3FC8C; // type:func
+EnHintnuts_SetupWait = 0x80B3FD10; // type:func
+EnHintnuts_SetupLookAround = 0x80B3FD90; // type:func
+EnHintnuts_SetupThrowScrubProjectile = 0x80B3FDD8; // type:func
+EnHintnuts_SetupStand = 0x80B3FE18; // type:func
+EnHintnuts_SetupBurrow = 0x80B3FE80; // type:func
+EnHintnuts_HitByScrubProjectile2 = 0x80B3FED0; // type:func
+EnHintnuts_SetupRun = 0x80B3FFC0; // type:func
+EnHintnuts_SetupTalk = 0x80B40008; // type:func
+EnHintnuts_SetupLeave = 0x80B40054; // type:func
+EnHintnuts_SetupFreeze = 0x80B40114; // type:func
+EnHintnuts_Wait = 0x80B401C0; // type:func
+EnHintnuts_LookAround = 0x80B40424; // type:func
+EnHintnuts_Stand = 0x80B404A8; // type:func
+EnHintnuts_ThrowNut = 0x80B4056C; // type:func
+EnHintnuts_Burrow = 0x80B406A8; // type:func
+EnHintnuts_BeginRun = 0x80B407BC; // type:func
+EnHintnuts_BeginFreeze = 0x80B40820; // type:func
+EnHintnuts_CheckProximity = 0x80B4085C; // type:func
+EnHintnuts_Run = 0x80B408F0; // type:func
+EnHintnuts_Talk = 0x80B40B80; // type:func
+EnHintnuts_Leave = 0x80B40BEC; // type:func
+EnHintnuts_Freeze = 0x80B40DA8; // type:func
+EnHintnuts_ColliderCheck = 0x80B40ED4; // type:func
+EnHintnuts_Update = 0x80B40F88; // type:func
+EnHintnuts_OverrideLimbDraw = 0x80B41110; // type:func
+EnHintnuts_Draw = 0x80B41244; // type:func
+EnNutsball_Init = 0x80B414E0; // type:func
+EnNutsball_Destroy = 0x80B4159C; // type:func
+func_80ABBB34 = 0x80B415C8; // type:func
+func_80ABBBA8 = 0x80B41640; // type:func
+EnNutsball_Update = 0x80B41810; // type:func
+EnNutsball_Draw = 0x80B4192C; // type:func
+BgSpot00Break_Init = 0x80B41B00; // type:func
+BgSpot00Break_Destroy = 0x80B41BAC; // type:func
+BgSpot00Break_Update = 0x80B41BE0; // type:func
+BgSpot00Break_Draw = 0x80B41BF0; // type:func
+EnShopnuts_Init = 0x80B41CA0; // type:func
+EnShopnuts_Destroy = 0x80B41DDC; // type:func
+EnShopnuts_SetupIdle = 0x80B41E08; // type:func
+EnShopnuts_SetupLookAround = 0x80B41E70; // type:func
+EnShopnuts_SetupThrowNut = 0x80B41EB8; // type:func
+EnShopnuts_SetupPeek = 0x80B41EF8; // type:func
+EnShopnuts_SetupBurrow = 0x80B41F60; // type:func
+EnShopnuts_SetupSpawnSalesman = 0x80B41FB0; // type:func
+EnShopnuts_Idle = 0x80B42008; // type:func
+EnShopnuts_LookAround = 0x80B4226C; // type:func
+EnShopnuts_Peek = 0x80B422F0; // type:func
+EnShopnuts_ThrowNut = 0x80B423B4; // type:func
+EnShopnuts_Burrow = 0x80B424F0; // type:func
+EnShopnuts_SpawnSalesman = 0x80B425B4; // type:func
+EnShopnuts_ColliderCheck = 0x80B42650; // type:func
+EnShopnuts_Update = 0x80B426B0; // type:func
+EnShopnuts_OverrideLimbDraw = 0x80B427F0; // type:func
+EnShopnuts_PostLimbDraw = 0x80B42828; // type:func
+EnShopnuts_Draw = 0x80B429C8; // type:func
+EnIt_Init = 0x80B42BB0; // type:func
+EnIt_Destroy = 0x80B42C1C; // type:func
+EnIt_Update = 0x80B42C48; // type:func
+EnGeldB_SetupAction = 0x80B42D40; // type:func
+EnGeldB_Init = 0x80B42D4C; // type:func
+EnGeldB_Destroy = 0x80B42F70; // type:func
+EnGeldB_ReactToPlayer = 0x80B42FD8; // type:func
+EnGeldB_SetupWait = 0x80B433B0; // type:func
+EnGeldB_Wait = 0x80B43444; // type:func
+EnGeldB_SetupFlee = 0x80B435C8; // type:func
+EnGeldB_Flee = 0x80B43660; // type:func
+EnGeldB_SetupReady = 0x80B43788; // type:func
+EnGeldB_Ready = 0x80B43810; // type:func
+EnGeldB_SetupAdvance = 0x80B43AF4; // type:func
+EnGeldB_Advance = 0x80B43B74; // type:func
+EnGeldB_SetupRollForward = 0x80B44020; // type:func
+EnGeldB_RollForward = 0x80B440D4; // type:func
+EnGeldB_SetupPivot = 0x80B4422C; // type:func
+EnGeldB_Pivot = 0x80B44278; // type:func
+EnGeldB_SetupCircle = 0x80B44458; // type:func
+EnGeldB_Circle = 0x80B4452C; // type:func
+EnGeldB_SetupSpinDodge = 0x80B44B08; // type:func
+EnGeldB_SpinDodge = 0x80B44C70; // type:func
+EnGeldB_SetupSlash = 0x80B450C0; // type:func
+EnGeldB_Slash = 0x80B45130; // type:func
+EnGeldB_SetupSpinAttack = 0x80B45380; // type:func
+EnGeldB_SpinAttack = 0x80B45414; // type:func
+EnGeldB_SetupRollBack = 0x80B457C8; // type:func
+EnGeldB_RollBack = 0x80B45844; // type:func
+EnGeldB_SetupStunned = 0x80B45948; // type:func
+EnGeldB_Stunned = 0x80B459F4; // type:func
+EnGeldB_SetupDamaged = 0x80B45AB0; // type:func
+EnGeldB_Damaged = 0x80B45B48; // type:func
+EnGeldB_SetupJump = 0x80B45CF0; // type:func
+EnGeldB_Jump = 0x80B45DA8; // type:func
+EnGeldB_SetupBlock = 0x80B45E90; // type:func
+EnGeldB_Block = 0x80B45F48; // type:func
+EnGeldB_SetupSidestep = 0x80B46234; // type:func
+EnGeldB_Sidestep = 0x80B463C4; // type:func
+EnGeldB_SetupDefeated = 0x80B46AE4; // type:func
+EnGeldB_Defeated = 0x80B46B88; // type:func
+EnGeldB_TurnHead = 0x80B46C44; // type:func
+EnGeldB_CollisionCheck = 0x80B46D44; // type:func
+EnGeldB_Update = 0x80B46F10; // type:func
+EnGeldB_OverrideLimbDraw = 0x80B470FC; // type:func
+EnGeldB_PostLimbDraw = 0x80B47244; // type:func
+EnGeldB_Draw = 0x80B474BC; // type:func
+EnGeldB_DodgeRanged = 0x80B4782C; // type:func
+OceffWipe2_Init = 0x80B480F0; // type:func
+OceffWipe2_Destroy = 0x80B4814C; // type:func
+OceffWipe2_Update = 0x80B48198; // type:func
+OceffWipe2_Draw = 0x80B481F8; // type:func
+OceffWipe3_Init = 0x80B49860; // type:func
+OceffWipe3_Destroy = 0x80B498BC; // type:func
+OceffWipe3_Update = 0x80B49908; // type:func
+OceffWipe3_Draw = 0x80B49968; // type:func
+EnNiwGirl_Init = 0x80B4AFB0; // type:func
+EnNiwGirl_Destroy = 0x80B4B150; // type:func
+EnNiwGirl_Jump = 0x80B4B160; // type:func
+func_80AB9210 = 0x80B4B1E4; // type:func
+EnNiwGirl_Talk = 0x80B4B398; // type:func
+func_80AB94D0 = 0x80B4B4A8; // type:func
+EnNiwGirl_Update = 0x80B4B59C; // type:func
+EnNiwGirlOverrideLimbDraw = 0x80B4B7C4; // type:func
+EnNiwGirl_Draw = 0x80B4B82C; // type:func
+EnDog_PlayWalkSFX = 0x80B4BA80; // type:func
+EnDog_PlayRunSFX = 0x80B4BAE8; // type:func
+EnDog_PlayBarkSFX = 0x80B4BB50; // type:func
+EnDog_PlayAnimAndSFX = 0x80B4BBB8; // type:func
+EnDog_CanFollow = 0x80B4BD50; // type:func
+EnDog_UpdateWaypoint = 0x80B4BDD4; // type:func
+EnDog_Orient = 0x80B4BE60; // type:func
+EnDog_Init = 0x80B4BF04; // type:func
+EnDog_Destroy = 0x80B4C154; // type:func
+EnDog_FollowPath = 0x80B4C180; // type:func
+EnDog_ChooseMovement = 0x80B4C318; // type:func
+EnDog_FollowPlayer = 0x80B4C408; // type:func
+EnDog_RunAway = 0x80B4C588; // type:func
+EnDog_FaceLink = 0x80B4C62C; // type:func
+EnDog_Wait = 0x80B4C734; // type:func
+EnDog_Update = 0x80B4C78C; // type:func
+EnDog_OverrideLimbDraw = 0x80B4C858; // type:func
+EnDog_PostLimbDraw = 0x80B4C874; // type:func
+EnDog_Draw = 0x80B4C88C; // type:func
+EnSi_Init = 0x80B4CC30; // type:func
+EnSi_Destroy = 0x80B4CCC0; // type:func
+func_80AFB748 = 0x80B4CCEC; // type:func
+func_80AFB768 = 0x80B4CD10; // type:func
+func_80AFB89C = 0x80B4CE44; // type:func
+func_80AFB950 = 0x80B4CEFC; // type:func
+EnSi_Update = 0x80B4CF90; // type:func
+EnSi_Draw = 0x80B4D004; // type:func
+BgSpot01Objects2_Init = 0x80B4D130; // type:func
+BgSpot01Objects2_Destroy = 0x80B4D20C; // type:func
+func_808AC22C = 0x80B4D21C; // type:func
+func_808AC2BC = 0x80B4D2B0; // type:func
+func_808AC474 = 0x80B4D460; // type:func
+BgSpot01Objects2_Update = 0x80B4D470; // type:func
+func_808AC4A4 = 0x80B4D494; // type:func
+ObjComb_Break = 0x80B4D5F0; // type:func
+ObjComb_ChooseItemDrop = 0x80B4D8E0; // type:func
+ObjComb_Init = 0x80B4D9B0; // type:func
+ObjComb_Destroy = 0x80B4DA20; // type:func
+ObjComb_SetupWait = 0x80B4DA4C; // type:func
+ObjComb_Wait = 0x80B4DA60; // type:func
+ObjComb_Update = 0x80B4DB4C; // type:func
+ObjComb_Draw = 0x80B4DBC4; // type:func
+func_808B2180 = 0x80B4DE50; // type:func
+func_808B2218 = 0x80B4DEE4; // type:func
+BgSpot11Bakudankabe_Init = 0x80B4E1FC; // type:func
+BgSpot11Bakudankabe_Destroy = 0x80B4E298; // type:func
+BgSpot11Bakudankabe_Update = 0x80B4E2E0; // type:func
+BgSpot11Bakudankabe_Draw = 0x80B4E37C; // type:func
+ObjKibako2_InitCollider = 0x80B4E490; // type:func
+ObjKibako2_Break = 0x80B4E4E8; // type:func
+ObjKibako2_SpawnCollectible = 0x80B4E764; // type:func
+ObjKibako2_Init = 0x80B4E7B4; // type:func
+ObjKibako2_Destroy = 0x80B4E860; // type:func
+ObjKibako2_Idle = 0x80B4E8A8; // type:func
+ObjKibako2_Kill = 0x80B4E980; // type:func
+ObjKibako2_Update = 0x80B4EA04; // type:func
+ObjKibako2_Draw = 0x80B4EA28; // type:func
+EnDntDemo_Destroy = 0x80B4EB50; // type:func
+EnDntDemo_Init = 0x80B4EB60; // type:func
+EnDntDemo_Judge = 0x80B4ECD0; // type:func
+EnDntDemo_Results = 0x80B4F2F0; // type:func
+EnDntDemo_Prize = 0x80B4F564; // type:func
+EnDntDemo_Update = 0x80B4F640; // type:func
+EnDntJiji_Init = 0x80B4F870; // type:func
+EnDntJiji_Destroy = 0x80B4F950; // type:func
+EnDntJiji_SetFlower = 0x80B4F97C; // type:func
+EnDntJiji_SetupWait = 0x80B4F9BC; // type:func
+EnDntJiji_Wait = 0x80B4FA6C; // type:func
+EnDntJiji_SetupUp = 0x80B4FB24; // type:func
+EnDntJiji_Up = 0x80B4FC08; // type:func
+EnDntJiji_SetupUnburrow = 0x80B4FC78; // type:func
+EnDntJiji_Unburrow = 0x80B4FD5C; // type:func
+EnDntJiji_SetupWalk = 0x80B4FDE4; // type:func
+EnDntJiji_Walk = 0x80B4FE94; // type:func
+EnDntJiji_SetupBurrow = 0x80B4FFD0; // type:func
+EnDntJiji_Burrow = 0x80B500C0; // type:func
+EnDntJiji_SetupCower = 0x80B500EC; // type:func
+EnDntJiji_Cower = 0x80B5022C; // type:func
+EnDntJiji_SetupTalk = 0x80B502D0; // type:func
+EnDntJiji_Talk = 0x80B50364; // type:func
+EnDntJiji_SetupGivePrize = 0x80B50430; // type:func
+EnDntJiji_GivePrize = 0x80B504A0; // type:func
+EnDntJiji_SetupHide = 0x80B505B0; // type:func
+EnDntJiji_Hide = 0x80B50648; // type:func
+EnDntJiji_SetupReturn = 0x80B506B4; // type:func
+EnDntJiji_Return = 0x80B50764; // type:func
+EnDntJiji_Update = 0x80B508DC; // type:func
+EnDntJiji_Draw = 0x80B50AB4; // type:func
+EnDntNomal_Init = 0x80B50D90; // type:func
+EnDntNomal_Destroy = 0x80B50EB8; // type:func
+EnDntNomal_WaitForObject = 0x80B50F04; // type:func
+EnDntNomal_SetFlower = 0x80B51054; // type:func
+EnDntNomal_SetupTargetWait = 0x80B510AC; // type:func
+EnDntNomal_TargetWait = 0x80B51154; // type:func
+EnDntNomal_SetupTargetUnburrow = 0x80B51430; // type:func
+EnDntNomal_TargetUnburrow = 0x80B5154C; // type:func
+EnDntNomal_SetupTargetWalk = 0x80B515B8; // type:func
+EnDntNomal_TargetWalk = 0x80B5165C; // type:func
+EnDntNomal_TargetFacePlayer = 0x80B51748; // type:func
+EnDntNomal_SetupTargetTalk = 0x80B517FC; // type:func
+EnDntNomal_TargetTalk = 0x80B518A8; // type:func
+EnDntNomal_SetupTargetGivePrize = 0x80B51950; // type:func
+EnDntNomal_TargetGivePrize = 0x80B519E8; // type:func
+EnDntNomal_TargetReturn = 0x80B51B50; // type:func
+EnDntNomal_TargetBurrow = 0x80B51D20; // type:func
+EnDntNomal_SetupStageWait = 0x80B51D8C; // type:func
+EnDntNomal_StageWait = 0x80B51E44; // type:func
+EnDntNomal_SetupStageUp = 0x80B51E70; // type:func
+EnDntNomal_StageUp = 0x80B51F7C; // type:func
+EnDntNomal_SetupStageUnburrow = 0x80B521B0; // type:func
+EnDntNomal_StageUnburrow = 0x80B522A4; // type:func
+EnDntNomal_SetupStageCelebrate = 0x80B5237C; // type:func
+EnDntNomal_StageCelebrate = 0x80B52424; // type:func
+EnDntNomal_SetupStageDance = 0x80B5262C; // type:func
+EnDntNomal_StageDance = 0x80B5273C; // type:func
+EnDntNomal_SetupStageHide = 0x80B528A0; // type:func
+EnDntNomal_StageHide = 0x80B5297C; // type:func
+EnDntNomal_StageAttackHide = 0x80B52B40; // type:func
+EnDntNomal_SetupStageAttack = 0x80B52B74; // type:func
+EnDntNomal_StageAttack = 0x80B52C40; // type:func
+EnDntNomal_StageSetupReturn = 0x80B52F04; // type:func
+EnDntNomal_StageReturn = 0x80B52FA8; // type:func
+EnDntNomal_Update = 0x80B530AC; // type:func
+EnDntNomal_OverrideLimbDraw = 0x80B53370; // type:func
+EnDntNomal_PostLimbDraw = 0x80B53420; // type:func
+EnDntNomal_DrawStageScrub = 0x80B534A8; // type:func
+EnDntNomal_DrawTargetScrub = 0x80B53698; // type:func
+EnGuest_Init = 0x80B53B90; // type:func
+EnGuest_Destroy = 0x80B53BF0; // type:func
+EnGuest_Update = 0x80B53C1C; // type:func
+func_80A5046C = 0x80B53D8C; // type:func
+func_80A50518 = 0x80B53E38; // type:func
+func_80A5057C = 0x80B53EA0; // type:func
+func_80A505CC = 0x80B53EF4; // type:func
+func_80A50708 = 0x80B54034; // type:func
+EnGuest_OverrideLimbDraw = 0x80B540A0; // type:func
+EnGuest_Draw = 0x80B542C8; // type:func
+BgBomGuard_SetupAction = 0x80B54530; // type:func
+BgBomGuard_Init = 0x80B5453C; // type:func
+BgBomGuard_Destroy = 0x80B545D8; // type:func
+func_8086E638 = 0x80B5460C; // type:func
+BgBomGuard_Update = 0x80B546D8; // type:func
+EnHs2_Init = 0x80B54750; // type:func
+EnHs2_Destroy = 0x80B54830; // type:func
+func_80A6F0B4 = 0x80B5485C; // type:func
+func_80A6F164 = 0x80B54910; // type:func
+func_80A6F1A4 = 0x80B5494C; // type:func
+EnHs2_Update = 0x80B54998; // type:func
+EnHs2_OverrideLimbDraw = 0x80B54B04; // type:func
+EnHs2_PostLimbDraw = 0x80B54B8C; // type:func
+EnHs2_Draw = 0x80B54BCC; // type:func
+DemoKekkai_CheckEventFlag = 0x80B54D30; // type:func
+DemoKekkai_Init = 0x80B54D74; // type:func
+DemoKekkai_Destroy = 0x80B54FA4; // type:func
+DemoKekkai_SpawnParticles = 0x80B54FE4; // type:func
+DemoKekkai_TowerBarrier = 0x80B55238; // type:func
+DemoKekkai_Update = 0x80B55354; // type:func
+DemoKekkai_TrialBarrierDispel = 0x80B55480; // type:func
+DemoKekkai_TrialBarrierIdle = 0x80B555E0; // type:func
+DemoKekkai_DrawTrialBarrier = 0x80B55704; // type:func
+DemoKekkai_DrawTowerBarrier = 0x80B55C18; // type:func
+func_808B02D0 = 0x80B56020; // type:func
+func_808B0324 = 0x80B56074; // type:func
+BgSpot08Bakudankabe_Init = 0x80B5636C; // type:func
+BgSpot08Bakudankabe_Destroy = 0x80B5640C; // type:func
+BgSpot08Bakudankabe_Update = 0x80B56454; // type:func
+BgSpot08Bakudankabe_Draw = 0x80B56508; // type:func
+func_808B6BC0 = 0x80B566C0; // type:func
+BgSpot17Bakudankabe_Init = 0x80B569F0; // type:func
+BgSpot17Bakudankabe_Destroy = 0x80B56A84; // type:func
+BgSpot17Bakudankabe_Update = 0x80B56AB8; // type:func
+BgSpot17Bakudankabe_Draw = 0x80B56B4C; // type:func
+func_80B9A9D0 = 0x80B56DB0; // type:func
+func_80B9AA90 = 0x80B56E70; // type:func
+func_80B9ABA0 = 0x80B56F80; // type:func
+func_80B9ACE4 = 0x80B570C4; // type:func
+func_80B9ADCC = 0x80B571B0; // type:func
+ObjMure3_Init = 0x80B572A4; // type:func
+ObjMure3_Destroy = 0x80B57304; // type:func
+func_80B9AF24 = 0x80B57314; // type:func
+func_80B9AF34 = 0x80B57328; // type:func
+func_80B9AF54 = 0x80B5734C; // type:func
+func_80B9AF64 = 0x80B57360; // type:func
+func_80B9AFEC = 0x80B573E8; // type:func
+func_80B9AFFC = 0x80B573FC; // type:func
+ObjMure3_Update = 0x80B57478; // type:func
+EnTg_GetTextId = 0x80B57580; // type:func
+EnTg_UpdateTalkState = 0x80B5761C; // type:func
+EnTg_Init = 0x80B576D8; // type:func
+EnTg_Destroy = 0x80B577AC; // type:func
+EnTg_SpinIfNotTalking = 0x80B577EC; // type:func
+EnTg_Update = 0x80B57810; // type:func
+EnTg_OverrideLimbDraw = 0x80B57930; // type:func
+EnTg_PostLimbDraw = 0x80B5794C; // type:func
+EnTg_SetColor = 0x80B579A8; // type:func
+EnTg_Draw = 0x80B57A14; // type:func
+EnMu_SetupAction = 0x80B57C60; // type:func
+EnMu_Interact = 0x80B57C6C; // type:func
+EnMu_GetTextId = 0x80B57DCC; // type:func
+EnMu_UpdateTalkState = 0x80B57E10; // type:func
+EnMu_Init = 0x80B57E7C; // type:func
+EnMu_Destroy = 0x80B57F54; // type:func
+EnMu_Pose = 0x80B57F78; // type:func
+EnMu_Update = 0x80B57FB0; // type:func
+EnMu_OverrideLimbDraw = 0x80B580F8; // type:func
+EnMu_PostLimbDraw = 0x80B581E4; // type:func
+EnMu_DisplayListSetColor = 0x80B581FC; // type:func
+EnMu_Draw = 0x80B58268; // type:func
+EnGo2_SpawnEffectDust = 0x80B58580; // type:func
+EnGo2_UpdateEffects = 0x80B58624; // type:func
+EnGo2_DrawEffects = 0x80B58730; // type:func
+EnGo2_SpawnDust = 0x80B58A28; // type:func
+EnGo2_GetItem = 0x80B58C40; // type:func
+EnGo2_GetDialogState = 0x80B58C84; // type:func
+EnGo2_GoronFireGenericGetTextId = 0x80B58D04; // type:func
+EnGo2_GetTextIdGoronCityRollingBig = 0x80B58D80; // type:func
+EnGo2_UpdateTalkStateGoronCityRollingBig = 0x80B58E08; // type:func
+EnGo2_GetTextIdGoronDmtBombFlower = 0x80B58F00; // type:func
+EnGo2_UpdateTalkStateGoronDmtBombFlower = 0x80B58F3C; // type:func
+EnGo2_GetTextIdGoronDmtRollingSmall = 0x80B59054; // type:func
+EnGo2_UpdateTalkStateGoronDmtRollingSmall = 0x80B590AC; // type:func
+EnGo2_GetTextIdGoronDmtDcEntrance = 0x80B590E8; // type:func
+EnGo2_UpdateTalkStateGoronDmtDcEntrance = 0x80B59184; // type:func
+EnGo2_GetTextIdGoronCityEntrance = 0x80B591E4; // type:func
+EnGo2_UpdateTalkStateGoronCityEntrance = 0x80B59264; // type:func
+EnGo2_GetTextIdGoronCityIsland = 0x80B592C4; // type:func
+EnGo2_UpdateTalkStateGoronCityIsland = 0x80B59344; // type:func
+EnGo2_GetTextIdGoronCityLowestFloor = 0x80B593A4; // type:func
+EnGo2_UpdateTalkStateGoronCityLowestFloor = 0x80B59480; // type:func
+EnGo2_GetTextIdGoronCityLink = 0x80B594E0; // type:func
+EnGo2_UpdateTalkStateGoronCityLink = 0x80B595BC; // type:func
+EnGo2_GetTextIdGoronDmtBiggoron = 0x80B597D4; // type:func
+EnGo2_UpdateTalkStateGoronDmtBiggoron = 0x80B59854; // type:func
+EnGo2_GetTextIdGoronFireGeneric = 0x80B59A68; // type:func
+EnGo2_UpdateTalkStateGoronFireGeneric = 0x80B59AA0; // type:func
+EnGo2_GetTextIdGoronCityStairwell = 0x80B59B3C; // type:func
+EnGo2_UpdateTalkStateGoronCityStairwell = 0x80B59B8C; // type:func
+EnGo2_GetTextIdGoronMarketBazaar = 0x80B59BEC; // type:func
+EnGo2_UpdateTalkStateGoronMarketBazaar = 0x80B59C00; // type:func
+EnGo2_GetTextIdGoronCityLostWoods = 0x80B59C3C; // type:func
+EnGo2_UpdateTalkStateGoronCityLostWoods = 0x80B59CAC; // type:func
+EnGo2_GetTextIdGoronDmtFairyHint = 0x80B59D0C; // type:func
+EnGo2_UpdateTalkStateGoronDmtFairyHint = 0x80B59D64; // type:func
+EnGo2_GetTextId = 0x80B59DA0; // type:func
+EnGo2_UpdateTalkState = 0x80B59EE4; // type:func
+func_80A44790 = 0x80B59FFC; // type:func
+EnGo2_SetColliderDim = 0x80B5A0F8; // type:func
+EnGo2_SetShape = 0x80B5A134; // type:func
+EnGo2_CheckCollision = 0x80B5A1AC; // type:func
+EnGo2_SwapInitialFrameAnimFrameCount = 0x80B5A308; // type:func
+func_80A44AB0 = 0x80B5A320; // type:func
+EnGo2_UpdateWaypoint = 0x80B5A4DC; // type:func
+EnGo2_Orient = 0x80B5A558; // type:func
+func_80A44D84 = 0x80B5A5FC; // type:func
+EnGo2_IsWakingUp = 0x80B5A634; // type:func
+EnGo2_IsRollingOnGround = 0x80B5A764; // type:func
+EnGo2_BiggoronSetTextId = 0x80B5A900; // type:func
+func_80A45288 = 0x80B5AB00; // type:func
+func_80A45360 = 0x80B5ABDC; // type:func
+EnGo2_RollForward = 0x80B5ACE8; // type:func
+func_80A454CC = 0x80B5AD48; // type:func
+EnGo2_GetTargetXZSpeed = 0x80B5ADF4; // type:func
+EnGo2_IsCameraModified = 0x80B5AE98; // type:func
+EnGo2_DefaultWakingUp = 0x80B5AFB4; // type:func
+EnGo2_WakingUp = 0x80B5B00C; // type:func
+EnGo2_BiggoronWakingUp = 0x80B5B07C; // type:func
+EnGo2_SelectGoronWakingUp = 0x80B5B0CC; // type:func
+EnGo2_EyeMouthTexState = 0x80B5B1B0; // type:func
+EnGo2_SitDownAnimation = 0x80B5B284; // type:func
+EnGo2_GetDustData = 0x80B5B39C; // type:func
+EnGo2_RollingAnimation = 0x80B5B424; // type:func
+EnGo2_WakeUp = 0x80B5B4D8; // type:func
+EnGo2_GetItemAnimation = 0x80B5B5CC; // type:func
+EnGo2_SetupRolling = 0x80B5B630; // type:func
+EnGo2_StopRolling = 0x80B5B6D8; // type:func
+EnGo2_IsFreeingGoronInFire = 0x80B5B798; // type:func
+EnGo2_IsGoronDmtBombFlower = 0x80B5B830; // type:func
+EnGo2_IsGoronRollingBig = 0x80B5B8B0; // type:func
+EnGo2_IsGoronFireGeneric = 0x80B5B910; // type:func
+EnGo2_IsGoronLinkReversing = 0x80B5B94C; // type:func
+EnGo2_IsRolling = 0x80B5B9A8; // type:func
+EnGo2_GoronLinkAnimation = 0x80B5BA3C; // type:func
+EnGo2_GoronFireCamera = 0x80B5BB70; // type:func
+EnGo2_GoronFireClearCamera = 0x80B5BC70; // type:func
+EnGo2_BiggoronAnimation = 0x80B5BCB0; // type:func
+EnGo2_Init = 0x80B5BD64; // type:func
+EnGo2_Destroy = 0x80B5C1F8; // type:func
+EnGo2_CurledUp = 0x80B5C208; // type:func
+func_80A46B40 = 0x80B5C3DC; // type:func
+EnGo2_GoronDmtBombFlowerAnimation = 0x80B5C574; // type:func
+EnGo2_GoronRollingBigContinueRolling = 0x80B5C5F8; // type:func
+EnGo2_ContinueRolling = 0x80B5C658; // type:func
+EnGo2_SlowRolling = 0x80B5C6F0; // type:func
+EnGo2_GroundRolling = 0x80B5C828; // type:func
+EnGo2_ReverseRolling = 0x80B5C8C4; // type:func
+EnGo2_SetupGetItem = 0x80B5C98C; // type:func
+EnGo2_SetGetItem = 0x80B5CA00; // type:func
+EnGo2_BiggoronEyedrops = 0x80B5CB08; // type:func
+EnGo2_GoronLinkStopRolling = 0x80B5CD3C; // type:func
+EnGo2_GoronFireGenericAction = 0x80B5CE2C; // type:func
+EnGo2_Update = 0x80B5D158; // type:func
+EnGo2_DrawCurledUp = 0x80B5D26C; // type:func
+EnGo2_DrawRolling = 0x80B5D330; // type:func
+EnGo2_OverrideLimbDraw = 0x80B5D46C; // type:func
+EnGo2_PostLimbDraw = 0x80B5D688; // type:func
+EnGo2_Draw = 0x80B5D6E4; // type:func
+EnWf_SetupAction = 0x80B5E5C0; // type:func
+EnWf_Init = 0x80B5E5CC; // type:func
+EnWf_Destroy = 0x80B5E800; // type:func
+EnWf_ChangeAction = 0x80B5E89C; // type:func
+EnWf_SetupWaitToAppear = 0x80B5EC6C; // type:func
+EnWf_WaitToAppear = 0x80B5ED14; // type:func
+EnWf_SetupWait = 0x80B5EE48; // type:func
+EnWf_Wait = 0x80B5EED0; // type:func
+EnWf_SetupRunAtPlayer = 0x80B5F0EC; // type:func
+EnWf_RunAtPlayer = 0x80B5F16C; // type:func
+EnWf_SetupSearchForPlayer = 0x80B5F5EC; // type:func
+EnWf_SearchForPlayer = 0x80B5F638; // type:func
+EnWf_SetupRunAroundPlayer = 0x80B5F818; // type:func
+EnWf_RunAroundPlayer = 0x80B5F914; // type:func
+EnWf_SetupSlash = 0x80B5FE34; // type:func
+EnWf_Slash = 0x80B5FEB0; // type:func
+EnWf_SetupRecoilFromBlockedSlash = 0x80B60204; // type:func
+EnWf_RecoilFromBlockedSlash = 0x80B602A0; // type:func
+EnWf_SetupBackflipAway = 0x80B60498; // type:func
+EnWf_BackflipAway = 0x80B60514; // type:func
+EnWf_SetupStunned = 0x80B6061C; // type:func
+EnWf_Stunned = 0x80B60694; // type:func
+EnWf_SetupDamaged = 0x80B60750; // type:func
+EnWf_Damaged = 0x80B607E8; // type:func
+EnWf_SetupSomersaultAndAttack = 0x80B609F0; // type:func
+EnWf_SomersaultAndAttack = 0x80B60AA8; // type:func
+EnWf_SetupBlocking = 0x80B60B90; // type:func
+EnWf_Blocking = 0x80B60C30; // type:func
+EnWf_SetupSidestep = 0x80B60EB4; // type:func
+EnWf_Sidestep = 0x80B6104C; // type:func
+EnWf_SetupDie = 0x80B6159C; // type:func
+EnWf_Die = 0x80B6164C; // type:func
+func_80B36F40 = 0x80B61854; // type:func
+EnWf_UpdateDamage = 0x80B6194C; // type:func
+EnWf_Update = 0x80B61B1C; // type:func
+EnWf_OverrideLimbDraw = 0x80B61D70; // type:func
+EnWf_PostLimbDraw = 0x80B61DB4; // type:func
+EnWf_Draw = 0x80B61F5C; // type:func
+EnWf_DodgeRanged = 0x80B62118; // type:func
+EnSkb_SetupAction = 0x80B628D0; // type:func
+EnSkb_SpawnDebris = 0x80B628DC; // type:func
+EnSkb_Init = 0x80B62A8C; // type:func
+EnSkb_Destroy = 0x80B62C44; // type:func
+EnSkb_DecideNextAction = 0x80B62C9C; // type:func
+EnSkb_SetupRiseFromGround = 0x80B62D38; // type:func
+EnSkb_RiseFromGround = 0x80B62D9C; // type:func
+EnSkb_SetupDespawn = 0x80B62E88; // type:func
+EnSkb_Despawn = 0x80B62F30; // type:func
+EnSkb_SetupWalkForward = 0x80B62FE4; // type:func
+EnSkb_WalkForward = 0x80B6307C; // type:func
+EnSkb_SetupAttack = 0x80B6327C; // type:func
+EnSkb_Attack = 0x80B63314; // type:func
+EnSkb_SetupRecoil = 0x80B633C0; // type:func
+EnSkb_Recoil = 0x80B6344C; // type:func
+EnSkb_SetupStunned = 0x80B63488; // type:func
+EnSkb_Stunned = 0x80B634E4; // type:func
+EnSkb_SetupTakeDamage = 0x80B6358C; // type:func
+EnSkb_TakeDamage = 0x80B63614; // type:func
+EnSkb_SetupDeath = 0x80B63700; // type:func
+EnSkb_Death = 0x80B637CC; // type:func
+EnSkb_CheckDamage = 0x80B638B8; // type:func
+EnSkb_Update = 0x80B63B68; // type:func
+EnSkb_OverrideLimbDraw = 0x80B63C90; // type:func
+EnSkb_PostLimbDraw = 0x80B63E60; // type:func
+EnSkb_Draw = 0x80B63F08; // type:func
+DemoGj_GetCollectibleType = 0x80B641C0; // type:func
+DemoGj_GetCollectibleAmount = 0x80B641D4; // type:func
+DemoGj_GetType = 0x80B641E8; // type:func
+DemoGj_InitCylinder = 0x80B641F8; // type:func
+DemoGj_HitByExplosion = 0x80B64240; // type:func
+DemoGj_DestroyCylinder = 0x80B64278; // type:func
+DemoGj_Destroy = 0x80B64330; // type:func
+DemoGj_PlayExplosionSfx = 0x80B64374; // type:func
+DemoGj_SpawnSmoke = 0x80B643AC; // type:func
+DemoGj_DropCollectible = 0x80B64440; // type:func
+DemoGj_Explode = 0x80B644D4; // type:func
+DemoGj_IsCutsceneLayer = 0x80B64770; // type:func
+DemoGj_FindGanon = 0x80B64798; // type:func
+DemoGj_InitCommon = 0x80B647E4; // type:func
+DemoGj_InitSetIndices = 0x80B6485C; // type:func
+DemoGj_DrawCommon = 0x80B648C0; // type:func
+DemoGj_DrawRotated = 0x80B6495C; // type:func
+DemoGj_SetupRotation = 0x80B64A38; // type:func
+func_809797E4 = 0x80B64FD0; // type:func
+DemoGj_IsGanondorfRisingFromRubble = 0x80B65004; // type:func
+DemoGj_IsGanondorfFloatingInAir = 0x80B65028; // type:func
+DemoGj_SetupMovement = 0x80B6504C; // type:func
+DemoGj_CheckIfTransformedIntoGanon = 0x80B65770; // type:func
+DemoGj_InitRubblePile1 = 0x80B657A8; // type:func
+func_8097A000 = 0x80B657D8; // type:func
+DemoGj_SpawnSmokePreBattle1 = 0x80B65854; // type:func
+func_8097A0E4 = 0x80B658C0; // type:func
+func_8097A130 = 0x80B65914; // type:func
+DemoGj_Update01 = 0x80B65948; // type:func
+DemoGj_Update08 = 0x80B65980; // type:func
+DemoGj_DrawRubble2 = 0x80B659B8; // type:func
+DemoGj_DrawRotatedRubble2 = 0x80B659DC; // type:func
+DemoGj_InitRubblePile2 = 0x80B65A00; // type:func
+func_8097A238 = 0x80B65A30; // type:func
+DemoGj_SpawnSmokePreBattle2 = 0x80B65AAC; // type:func
+func_8097A320 = 0x80B65B1C; // type:func
+func_8097A36C = 0x80B65B70; // type:func
+DemoGj_Update02 = 0x80B65BA4; // type:func
+DemoGj_Update09 = 0x80B65BDC; // type:func
+DemoGj_DrawRubble3 = 0x80B65C14; // type:func
+DemoGj_DrawRotatedRubble3 = 0x80B65C38; // type:func
+DemoGj_InitRubblePile3 = 0x80B65C5C; // type:func
+func_8097A474 = 0x80B65C8C; // type:func
+func_8097A4F0 = 0x80B65D08; // type:func
+func_8097A53C = 0x80B65D5C; // type:func
+DemoGj_Update03 = 0x80B65D90; // type:func
+DemoGj_Update10 = 0x80B65DC8; // type:func
+DemoGj_DrawRubble4 = 0x80B65E00; // type:func
+DemoGj_DrawRotatedRubble4 = 0x80B65E24; // type:func
+DemoGj_InitRubblePile4 = 0x80B65E48; // type:func
+func_8097A644 = 0x80B65E78; // type:func
+func_8097A6C0 = 0x80B65EF4; // type:func
+func_8097A70C = 0x80B65F48; // type:func
+DemoGj_Update04 = 0x80B65F7C; // type:func
+DemoGj_Update11 = 0x80B65FB4; // type:func
+DemoGj_DrawRubble5 = 0x80B65FEC; // type:func
+DemoGj_DrawRotatedRubble5 = 0x80B66010; // type:func
+DemoGj_InitRubblePile5 = 0x80B66034; // type:func
+func_8097A814 = 0x80B66064; // type:func
+func_8097A890 = 0x80B660E0; // type:func
+func_8097A8DC = 0x80B66134; // type:func
+DemoGj_Update05 = 0x80B66168; // type:func
+DemoGj_Update12 = 0x80B661A0; // type:func
+DemoGj_DrawRubble6 = 0x80B661D8; // type:func
+DemoGj_DrawRotatedRubble6 = 0x80B661FC; // type:func
+DemoGj_InitRubblePile6 = 0x80B66220; // type:func
+func_8097A9E4 = 0x80B66250; // type:func
+func_8097AA60 = 0x80B662CC; // type:func
+func_8097AAAC = 0x80B66320; // type:func
+DemoGj_Update06 = 0x80B66354; // type:func
+DemoGj_Update13 = 0x80B6638C; // type:func
+DemoGj_DrawRubble7 = 0x80B663C4; // type:func
+DemoGj_DrawRotatedRubble7 = 0x80B663E8; // type:func
+DemoGj_InitRubblePile7 = 0x80B6640C; // type:func
+func_8097ABB4 = 0x80B6643C; // type:func
+DemoGj_SpawnSmokePreBattle3 = 0x80B664B8; // type:func
+func_8097AC9C = 0x80B66528; // type:func
+func_8097ACE8 = 0x80B6657C; // type:func
+DemoGj_Update07 = 0x80B665B0; // type:func
+DemoGj_Update14 = 0x80B665E8; // type:func
+DemoGj_DrawRubbleTall = 0x80B66620; // type:func
+DemoGj_DrawRotatedRubbleTall = 0x80B66644; // type:func
+DemoGj_InitRubbleAroundArena = 0x80B66668; // type:func
+DemoGj_UpdateRubbleAroundArena = 0x80B66698; // type:func
+DemoGj_DrawRubbleAroundArena = 0x80B666E8; // type:func
+DemoGj_InitDestructableRubble1 = 0x80B6670C; // type:func
+func_8097AEE8 = 0x80B66794; // type:func
+DemoGj_SetCylindersAsAC = 0x80B66928; // type:func
+DemoGj_DirectedExplosion = 0x80B66994; // type:func
+func_8097B128 = 0x80B669D0; // type:func
+DemoGj_HasCylinderAnyExploded = 0x80B66A60; // type:func
+func_8097B22C = 0x80B66ADC; // type:func
+DemoGj_Update15 = 0x80B66BF4; // type:func
+DemoGj_Update18 = 0x80B66C2C; // type:func
+DemoGj_DrawDestructableRubble1 = 0x80B66C4C; // type:func
+DemoGj_InitDestructableRubble2 = 0x80B66C70; // type:func
+func_8097B450 = 0x80B66CF8; // type:func
+DemoGj_SetCylindersAsAC2 = 0x80B66E48; // type:func
+DemoGj_HasCylinderAnyExploded2 = 0x80B66EB4; // type:func
+DemoGj_DirectedExplosion2 = 0x80B66F30; // type:func
+func_8097B6C4 = 0x80B66F6C; // type:func
+func_8097B750 = 0x80B66FFC; // type:func
+DemoGj_Update16 = 0x80B67114; // type:func
+DemoGj_Update19 = 0x80B6714C; // type:func
+DemoGj_DemoGj_InitDestructableRubble2 = 0x80B6716C; // type:func
+DemoGj_InitDestructableRubbleTall = 0x80B67190; // type:func
+DemoGj_DirectedDoubleExplosion = 0x80B671DC; // type:func
+func_8097B9BC = 0x80B67260; // type:func
+func_8097BA48 = 0x80B672F0; // type:func
+DemoGj_Update17 = 0x80B67424; // type:func
+DemoGj_Update20 = 0x80B6745C; // type:func
+DemoGj_DemoGj_InitDestructableRubbleTall = 0x80B6747C; // type:func
+DemoGj_Update = 0x80B674A0; // type:func
+DemoGj_Init = 0x80B674E8; // type:func
+DemoGj_DrawNothing = 0x80B675F0; // type:func
+DemoGj_Draw = 0x80B67600; // type:func
+DemoGeff_Destroy = 0x80B67E70; // type:func
+DemoGeff_Init = 0x80B67E80; // type:func
+func_80977EA8 = 0x80B67EC8; // type:func
+func_80977F80 = 0x80B67F64; // type:func
+func_80978030 = 0x80B67FC0; // type:func
+func_809781FC = 0x80B6818C; // type:func
+func_809782A0 = 0x80B68230; // type:func
+func_80978308 = 0x80B68298; // type:func
+func_80978344 = 0x80B682D0; // type:func
+func_80978370 = 0x80B68300; // type:func
+func_809783D4 = 0x80B6834C; // type:func
+DemoGeff_Update = 0x80B683E8; // type:func
+func_809784D4 = 0x80B68430; // type:func
+DemoGeff_Draw = 0x80B68440; // type:func
+BgGndFiremeiro_Init = 0x80B68690; // type:func
+BgGndFiremeiro_Destroy = 0x80B68744; // type:func
+BgGndFiremeiro_Sink = 0x80B68784; // type:func
+BgGndFiremeiro_Shake = 0x80B68840; // type:func
+BgGndFiremeiro_Rise = 0x80B689E4; // type:func
+BgGndFiremeiro_Update = 0x80B68AA4; // type:func
+BgGndFiremeiro_Draw = 0x80B68AC8; // type:func
+BgGndDarkmeiro_ToggleBlock = 0x80B68BE0; // type:func
+BgGndDarkmeiro_Init = 0x80B68C6C; // type:func
+BgGndDarkmeiro_Destroy = 0x80B68E98; // type:func
+BgGndDarkmeiro_Noop = 0x80B68EE0; // type:func
+BgGndDarkmeiro_UpdateBlockTimer = 0x80B68EF0; // type:func
+BgGndDarkmeiro_UpdateStaticBlock = 0x80B690E4; // type:func
+BgGndDarkmeiro_UpdateSwitchBlock = 0x80B690F4; // type:func
+BgGndDarkmeiro_Update = 0x80B69158; // type:func
+BgGndDarkmeiro_DrawInvisiblePath = 0x80B6917C; // type:func
+BgGndDarkmeiro_DrawSwitchBlock = 0x80B691AC; // type:func
+BgGndDarkmeiro_DrawStaticBlock = 0x80B692C4; // type:func
+BgGndSoulmeiro_Init = 0x80B693A0; // type:func
+BgGndSoulmeiro_Destroy = 0x80B694E4; // type:func
+func_8087AF38 = 0x80B69520; // type:func
+func_8087B284 = 0x80B6986C; // type:func
+func_8087B350 = 0x80B69938; // type:func
+BgGndSoulmeiro_Update = 0x80B6998C; // type:func
+BgGndSoulmeiro_Draw = 0x80B699B8; // type:func
+BgGndNisekabe_Init = 0x80B69C00; // type:func
+BgGndNisekabe_Destroy = 0x80B69C3C; // type:func
+BgGndNisekabe_Update = 0x80B69C4C; // type:func
+BgGndNisekabe_Draw = 0x80B69C80; // type:func
+BgGndIceblock_Init = 0x80B69D70; // type:func
+BgGndIceblock_Destroy = 0x80B69E5C; // type:func
+BgGndIceblock_SetPosition = 0x80B69E90; // type:func
+BgGndIceblock_CheckForBlock = 0x80B69F9C; // type:func
+BgGndIceblock_NextAction = 0x80B69FD8; // type:func
+BgGndIceblock_SetNextPosition = 0x80B6A024; // type:func
+BgGndIceblock_Idle = 0x80B6A354; // type:func
+BgGndIceblock_Reset = 0x80B6A410; // type:func
+BgGndIceblock_Fall = 0x80B6A4D4; // type:func
+BgGndIceblock_Hole = 0x80B6A58C; // type:func
+BgGndIceblock_Slide = 0x80B6A628; // type:func
+BgGndIceblock_Update = 0x80B6A958; // type:func
+BgGndIceblock_Draw = 0x80B6A97C; // type:func
+BgYdanSp_Init = 0x80B6AE70; // type:func
+BgYdanSp_Destroy = 0x80B6B258; // type:func
+BgYdanSp_UpdateFloorWebCollision = 0x80B6B2A0; // type:func
+BgYdanSp_BurnWeb = 0x80B6B374; // type:func
+BgYdanSp_BurnFloorWeb = 0x80B6B3E4; // type:func
+BgYdanSp_FloorWebBroken = 0x80B6B6B8; // type:func
+BgYdanSp_FloorWebBreaking = 0x80B6B6F8; // type:func
+BgYdanSp_FloorWebIdle = 0x80B6B8B8; // type:func
+BgYdanSp_BurnWallWeb = 0x80B6BB94; // type:func
+BgYdanSp_WallWebIdle = 0x80B6BECC; // type:func
+BgYdanSp_Update = 0x80B6C00C; // type:func
+BgYdanSp_Draw = 0x80B6C030; // type:func
+func_80A2F180 = 0x80B6C590; // type:func
+EnGb_Init = 0x80B6C5C0; // type:func
+EnGb_Destroy = 0x80B6C9C0; // type:func
+func_80A2F608 = 0x80B6CA1C; // type:func
+func_80A2F760 = 0x80B6CB74; // type:func
+func_80A2F7C0 = 0x80B6CBD4; // type:func
+func_80A2F83C = 0x80B6CC50; // type:func
+func_80A2F94C = 0x80B6CD6C; // type:func
+func_80A2F9C0 = 0x80B6CDE4; // type:func
+func_80A2FA50 = 0x80B6CE78; // type:func
+func_80A2FB40 = 0x80B6CF68; // type:func
+func_80A2FBB0 = 0x80B6CFDC; // type:func
+func_80A2FC0C = 0x80B6D03C; // type:func
+func_80A2FC70 = 0x80B6D0A4; // type:func
+EnGb_Update = 0x80B6D1A8; // type:func
+EnGb_Draw = 0x80B6D2E0; // type:func
+EnGb_UpdateCagedSouls = 0x80B6D400; // type:func
+EnGb_DrawCagedSouls = 0x80B6D758; // type:func
+EnGs_Init = 0x80B6DCC0; // type:func
+EnGs_Destroy = 0x80B6DD84; // type:func
+func_80A4E3EC = 0x80B6DD94; // type:func
+func_80A4E470 = 0x80B6DE1C; // type:func
+func_80A4E648 = 0x80B6DFDC; // type:func
+func_80A4E754 = 0x80B6E0EC; // type:func
+func_80A4E910 = 0x80B6E2AC; // type:func
+func_80A4EA08 = 0x80B6E3A8; // type:func
+func_80A4EB3C = 0x80B6E4DC; // type:func
+func_80A4ED34 = 0x80B6E6D4; // type:func
+func_80A4F13C = 0x80B6EAE0; // type:func
+func_80A4F700 = 0x80B6F0A4; // type:func
+func_80A4F734 = 0x80B6F0D8; // type:func
+func_80A4F77C = 0x80B6F120; // type:func
+EnGs_Update = 0x80B6F19C; // type:func
+EnGs_Draw = 0x80B6F334; // type:func
+BgMizuBwall_RotateVec3f = 0x80B6FB30; // type:func
+BgMizuBwall_Init = 0x80B6FB84; // type:func
+BgMizuBwall_Destroy = 0x80B70400; // type:func
+BgMizuBwall_SetAlpha = 0x80B70448; // type:func
+BgMizuBwall_SpawnDebris = 0x80B705CC; // type:func
+BgMizuBwall_Idle = 0x80B708A0; // type:func
+BgMizuBwall_Break = 0x80B709A0; // type:func
+BgMizuBwall_DoNothing = 0x80B709CC; // type:func
+BgMizuBwall_Update = 0x80B709DC; // type:func
+BgMizuBwall_Draw = 0x80B70A00; // type:func
+BgMizuShutter_Init = 0x80B71000; // type:func
+BgMizuShutter_Destroy = 0x80B71260; // type:func
+BgMizuShutter_WaitForSwitch = 0x80B71294; // type:func
+BgMizuShutter_WaitForCutscene = 0x80B71328; // type:func
+BgMizuShutter_Move = 0x80B71374; // type:func
+BgMizuShutter_WaitForTimer = 0x80B71560; // type:func
+BgMizuShutter_Update = 0x80B715E0; // type:func
+BgMizuShutter_Draw = 0x80B71604; // type:func
+EnDaikuKakariko_ChangeAnim = 0x80B71800; // type:func
+EnDaikuKakariko_Init = 0x80B718B4; // type:func
+EnDaikuKakariko_Destroy = 0x80B71C0C; // type:func
+EnDaikuKakariko_GetTalkState = 0x80B71C38; // type:func
+EnDaikuKakariko_HandleTalking = 0x80B71CDC; // type:func
+EnDaikuKakariko_Talk = 0x80B71E98; // type:func
+EnDaikuKakariko_Wait = 0x80B71F6C; // type:func
+EnDaikuKakariko_StopRunning = 0x80B72008; // type:func
+EnDaikuKakariko_Run = 0x80B720B8; // type:func
+EnDaikuKakariko_Update = 0x80B72438; // type:func
+EnDaikuKakariko_OverrideLimbDraw = 0x80B725B0; // type:func
+EnDaikuKakariko_PostLimbDraw = 0x80B72770; // type:func
+EnDaikuKakariko_Draw = 0x80B727EC; // type:func
+BgBowlWall_Init = 0x80B72BC0; // type:func
+BgBowlWall_Destroy = 0x80B72C78; // type:func
+BgBowlWall_SpawnBullseyes = 0x80B72CAC; // type:func
+BgBowlWall_WaitForHit = 0x80B72E7C; // type:func
+BgBowlWall_FallDoEffects = 0x80B72EA0; // type:func
+BgBowlWall_FinishFall = 0x80B73154; // type:func
+BgBowlWall_Reset = 0x80B73234; // type:func
+BgBowlWall_Update = 0x80B732CC; // type:func
+BgBowlWall_Draw = 0x80B73300; // type:func
+EnWallTubo_Init = 0x80B73540; // type:func
+EnWallTubo_Destroy = 0x80B73570; // type:func
+EnWallTubo_FindGirl = 0x80B73580; // type:func
+EnWallTubo_DetectChu = 0x80B735C4; // type:func
+EnWallTubo_SetWallFall = 0x80B737E0; // type:func
+EnWallTubo_Update = 0x80B7394C; // type:func
+EnPoDesert_Init = 0x80B73A30; // type:func
+EnPoDesert_Destroy = 0x80B73BA0; // type:func
+EnPoDesert_SetNextPathPoint = 0x80B73BE8; // type:func
+EnPoDesert_SetupMoveToNextPoint = 0x80B73D44; // type:func
+EnPoDesert_SetupDisappear = 0x80B73D88; // type:func
+EnPoDesert_UpdateSpeedModifier = 0x80B73DE8; // type:func
+EnPoDesert_WaitForPlayer = 0x80B73E58; // type:func
+EnPoDesert_MoveToNextPoint = 0x80B73F24; // type:func
+EnPoDesert_Disappear = 0x80B740B8; // type:func
+EnPoDesert_Update = 0x80B741A0; // type:func
+EnPoDesert_OverrideLimbDraw = 0x80B74294; // type:func
+EnPoDesert_PostLimbDraw = 0x80B74320; // type:func
+EnPoDesert_Draw = 0x80B74574; // type:func
+EnCrow_Init = 0x80B747F0; // type:func
+EnCrow_Destroy = 0x80B748E0; // type:func
+EnCrow_SetupFlyIdle = 0x80B7490C; // type:func
+EnCrow_SetupDiveAttack = 0x80B74940; // type:func
+EnCrow_SetupDamaged = 0x80B74974; // type:func
+EnCrow_SetupDie = 0x80B74C94; // type:func
+EnCrow_SetupTurnAway = 0x80B74CAC; // type:func
+EnCrow_SetupRespawn = 0x80B74D34; // type:func
+EnCrow_FlyIdle = 0x80B74E28; // type:func
+EnCrow_DiveAttack = 0x80B75254; // type:func
+EnCrow_Damaged = 0x80B753F8; // type:func
+EnCrow_Die = 0x80B75520; // type:func
+EnCrow_TurnAway = 0x80B755D0; // type:func
+EnCrow_Respawn = 0x80B75674; // type:func
+EnCrow_UpdateDamage = 0x80B75740; // type:func
+EnCrow_Update = 0x80B757F0; // type:func
+EnCrow_OverrideLimbDraw = 0x80B75A0C; // type:func
+EnCrow_PostLimbDraw = 0x80B75AF8; // type:func
+EnCrow_Draw = 0x80B75BB8; // type:func
+DoorKiller_Init = 0x80B75E90; // type:func
+DoorKiller_Destroy = 0x80B761E8; // type:func
+DoorKiller_SpawnRubble = 0x80B76238; // type:func
+DoorKiller_FallAsRubble = 0x80B763E0; // type:func
+DoorKiller_IsHit = 0x80B764A0; // type:func
+DoorKiller_SetAC = 0x80B764D4; // type:func
+DoorKiller_Die = 0x80B76534; // type:func
+DoorKiller_RiseBackUp = 0x80B76584; // type:func
+DoorKiller_FallOver = 0x80B76734; // type:func
+DoorKiller_Wobble = 0x80B76B00; // type:func
+DoorKiller_WaitBeforeWobble = 0x80B76C70; // type:func
+DoorKiller_Wait = 0x80B76CA4; // type:func
+DoorKiller_UpdateTexture = 0x80B76F04; // type:func
+DoorKiller_WaitForObject = 0x80B76F98; // type:func
+DoorKiller_Update = 0x80B7704C; // type:func
+DoorKiller_SetTexture = 0x80B77070; // type:func
+DoorKiller_DrawDoor = 0x80B7709C; // type:func
+DoorKiller_DrawRubble = 0x80B770F8; // type:func
+func_808B27F0 = 0x80B77400; // type:func
+func_808B280C = 0x80B77420; // type:func
+BgSpot11Oasis_Init = 0x80B77534; // type:func
+func_808B2970 = 0x80B77588; // type:func
+func_808B2980 = 0x80B7759C; // type:func
+func_808B29E0 = 0x80B775FC; // type:func
+func_808B29F0 = 0x80B77610; // type:func
+func_808B2AA8 = 0x80B776C8; // type:func
+func_808B2AB8 = 0x80B776DC; // type:func
+BgSpot11Oasis_Update = 0x80B776EC; // type:func
+BgSpot11Oasis_Draw = 0x80B778E0; // type:func
+BgSpot18Futa_Init = 0x80B77B30; // type:func
+BgSpot18Futa_Destroy = 0x80B77B9C; // type:func
+BgSpot18Futa_Update = 0x80B77BD0; // type:func
+BgSpot18Futa_Draw = 0x80B77C34; // type:func
+BgSpot18Shutter_Init = 0x80B77CD0; // type:func
+BgSpot18Shutter_Destroy = 0x80B77E80; // type:func
+func_808B95AC = 0x80B77EB4; // type:func
+func_808B95B8 = 0x80B77EC4; // type:func
+func_808B9618 = 0x80B77F24; // type:func
+func_808B9698 = 0x80B77FAC; // type:func
+func_808B971C = 0x80B78030; // type:func
+BgSpot18Shutter_Update = 0x80B7810C; // type:func
+BgSpot18Shutter_Draw = 0x80B78130; // type:func
+EnMa3_GetTextId = 0x80B78220; // type:func
+EnMa3_UpdateTalkState = 0x80B78358; // type:func
+func_80AA2E54 = 0x80B785D8; // type:func
+func_80AA2EC8 = 0x80B7864C; // type:func
+func_80AA2F28 = 0x80B786B0; // type:func
+EnMa3_UpdateEyes = 0x80B78708; // type:func
+EnMa3_ChangeAnim = 0x80B78794; // type:func
+EnMa3_Init = 0x80B78804; // type:func
+EnMa3_Destroy = 0x80B78958; // type:func
+func_80AA3200 = 0x80B78998; // type:func
+EnMa3_Update = 0x80B789CC; // type:func
+EnMa3_OverrideLimbDraw = 0x80B78AE0; // type:func
+EnMa3_PostLimbDraw = 0x80B78D20; // type:func
+EnMa3_Draw = 0x80B78DD4; // type:func
+EnCow_RotateY = 0x80B791D0; // type:func
+EnCow_SetColliderPos = 0x80B79268; // type:func
+EnCow_SetTailPos = 0x80B7935C; // type:func
+EnCow_Init = 0x80B793D8; // type:func
+EnCow_Destroy = 0x80B79810; // type:func
+EnCow_UpdateAnimation = 0x80B7985C; // type:func
+EnCow_TalkEnd = 0x80B79A84; // type:func
+EnCow_GiveMilkEnd = 0x80B79AFC; // type:func
+EnCow_GiveMilkWait = 0x80B79B44; // type:func
+EnCow_GiveMilk = 0x80B79BA8; // type:func
+EnCow_CheckForEmptyBottle = 0x80B79C44; // type:func
+EnCow_Talk = 0x80B79CD4; // type:func
+EnCow_Idle = 0x80B79D48; // type:func
+EnCow_IdleTail = 0x80B79E64; // type:func
+EnCow_Update = 0x80B79FFC; // type:func
+EnCow_UpdateTail = 0x80B7A278; // type:func
+EnCow_OverrideLimbDraw = 0x80B7A364; // type:func
+EnCow_PostLimbDraw = 0x80B7A3B4; // type:func
+EnCow_Draw = 0x80B7A3F4; // type:func
+EnCow_DrawTail = 0x80B7A454; // type:func
+BgIceTurara_Init = 0x80B7A630; // type:func
+BgIceTurara_Destroy = 0x80B7A70C; // type:func
+BgIceTurara_Break = 0x80B7A754; // type:func
+BgIceTurara_Stalagmite = 0x80B7A934; // type:func
+BgIceTurara_Wait = 0x80B7A99C; // type:func
+BgIceTurara_Shiver = 0x80B7A9D4; // type:func
+BgIceTurara_Fall = 0x80B7AB40; // type:func
+BgIceTurara_Regrow = 0x80B7AC98; // type:func
+BgIceTurara_Update = 0x80B7ACE8; // type:func
+BgIceTurara_Draw = 0x80B7AD0C; // type:func
+func_80891AC0 = 0x80B7AE60; // type:func
+BgIceShutter_Init = 0x80B7AEE8; // type:func
+BgIceShutter_Destroy = 0x80B7B068; // type:func
+func_80891CF4 = 0x80B7B09C; // type:func
+func_80891D6C = 0x80B7B114; // type:func
+func_80891DD4 = 0x80B7B17C; // type:func
+BgIceShutter_Update = 0x80B7B1E4; // type:func
+BgIceShutter_Draw = 0x80B7B208; // type:func
+EnKakasi2_Init = 0x80B7B2D0; // type:func
+EnKakasi2_Destroy = 0x80B7B42C; // type:func
+func_80A90264 = 0x80B7B458; // type:func
+func_80A904D8 = 0x80B7B5B0; // type:func
+func_80A90578 = 0x80B7B650; // type:func
+func_80A9062C = 0x80B7B704; // type:func
+func_80A906C4 = 0x80B7B79C; // type:func
+EnKakasi2_Update = 0x80B7B80C; // type:func
+func_80A90948 = 0x80B7B8CC; // type:func
+EnKakasi3_Destroy = 0x80B7B9F0; // type:func
+EnKakasi3_Init = 0x80B7BA1C; // type:func
+func_80A90E28 = 0x80B7BAE4; // type:func
+func_80A90EBC = 0x80B7BB78; // type:func
+func_80A911F0 = 0x80B7BEAC; // type:func
+func_80A91284 = 0x80B7BF40; // type:func
+func_80A91348 = 0x80B7C004; // type:func
+func_80A915B8 = 0x80B7C27C; // type:func
+func_80A91620 = 0x80B7C2E8; // type:func
+func_80A91760 = 0x80B7C428; // type:func
+func_80A917FC = 0x80B7C4C8; // type:func
+func_80A9187C = 0x80B7C550; // type:func
+func_80A918E4 = 0x80B7C5BC; // type:func
+func_80A91A90 = 0x80B7C700; // type:func
+EnKakasi3_Update = 0x80B7C800; // type:func
+EnKakasi3_Draw = 0x80B7C8F8; // type:func
+OceffWipe4_Init = 0x80B7CAD0; // type:func
+OceffWipe4_Destroy = 0x80B7CB2C; // type:func
+OceffWipe4_Update = 0x80B7CB50; // type:func
+OceffWipe4_Draw = 0x80B7CBB0; // type:func
+EnEg_PlayVoidOutSFX = 0x80B7DAB0; // type:func
+EnEg_Destroy = 0x80B7DAD0; // type:func
+EnEg_Init = 0x80B7DAE0; // type:func
+func_809FFDC8 = 0x80B7DAF0; // type:func
+EnEg_Update = 0x80B7DB88; // type:func
+EnEg_Draw = 0x80B7DBD0; // type:func
+BgMenkuriNisekabe_Init = 0x80B7DC60; // type:func
+BgMenkuriNisekabe_Destroy = 0x80B7DC88; // type:func
+BgMenkuriNisekabe_Update = 0x80B7DC98; // type:func
+BgMenkuriNisekabe_Draw = 0x80B7DCCC; // type:func
+EnZo_SpawnRipple = 0x80B7DDB0; // type:func
+EnZo_SpawnBubble = 0x80B7DE44; // type:func
+EnZo_SpawnSplash = 0x80B7DF74; // type:func
+EnZo_UpdateEffectsRipples = 0x80B7E0E0; // type:func
+EnZo_UpdateEffectsBubbles = 0x80B7E19C; // type:func
+EnZo_UpdateEffectsSplashes = 0x80B7E2CC; // type:func
+EnZo_DrawEffectsRipples = 0x80B7E404; // type:func
+EnZo_DrawEffectsBubbles = 0x80B7E5B4; // type:func
+EnZo_DrawEffectsSplashes = 0x80B7E760; // type:func
+EnZo_TreadWaterRipples = 0x80B7E918; // type:func
+EnZo_SpawnSplashes = 0x80B7E994; // type:func
+EnZo_GetTextId = 0x80B7EB08; // type:func
+EnZo_UpdateTalkState = 0x80B7ED7C; // type:func
+EnZo_Blink = 0x80B7EEE0; // type:func
+EnZo_Dialog = 0x80B7EF58; // type:func
+EnZo_PlayerInProximity = 0x80B7F038; // type:func
+EnZo_SetAnimation = 0x80B7F0D8; // type:func
+EnZo_Init = 0x80B7F1D0; // type:func
+EnZo_Destroy = 0x80B7F3D8; // type:func
+EnZo_Standing = 0x80B7F3E8; // type:func
+EnZo_Submerged = 0x80B7F4CC; // type:func
+EnZo_Surface = 0x80B7F50C; // type:func
+EnZo_TreadWater = 0x80B7F5F0; // type:func
+EnZo_Dive = 0x80B7F7A0; // type:func
+EnZo_Update = 0x80B7F8E8; // type:func
+EnZo_OverrideLimbDraw = 0x80B7FAC8; // type:func
+EnZo_PostLimbDraw = 0x80B7FCE8; // type:func
+EnZo_Draw = 0x80B7FD44; // type:func
+EffectSsIceSmoke_Init = 0x80B80370; // type:func
+EffectSsIceSmoke_Draw = 0x80B80490; // type:func
+EffectSsIceSmoke_Update = 0x80B80770; // type:func
+ObjMakekinsuta_Init = 0x80B80850; // type:func
+func_80B98320 = 0x80B80868; // type:func
+ObjMakekinsuta_DoNothing = 0x80B8091C; // type:func
+ObjMakekinsuta_Update = 0x80B8092C; // type:func
+EnGe3_ChangeAction = 0x80B809A0; // type:func
+EnGe3_Init = 0x80B80A48; // type:func
+EnGe3_Destroy = 0x80B80B50; // type:func
+EnGe3_TurnToFacePlayer = 0x80B80B7C; // type:func
+EnGe3_LookAtPlayer = 0x80B80C94; // type:func
+EnGe3_Wait = 0x80B80DA8; // type:func
+EnGe3_WaitLookAtPlayer = 0x80B80E0C; // type:func
+EnGe3_WaitTillCardGiven = 0x80B80E2C; // type:func
+EnGe3_GiveCard = 0x80B80E90; // type:func
+EnGe3_ForceTalk = 0x80B80F24; // type:func
+EnGe3_UpdateCollision = 0x80B80FDC; // type:func
+EnGe3_MoveAndBlink = 0x80B81084; // type:func
+EnGe3_UpdateWhenNotTalking = 0x80B81110; // type:func
+EnGe3_Update = 0x80B811C4; // type:func
+EnGe3_OverrideLimbDraw = 0x80B81210; // type:func
+EnGe3_PostLimbDraw = 0x80B81364; // type:func
+EnGe3_Draw = 0x80B813C0; // type:func
+ObjTimeblock_CalculateIsVisible = 0x80B815E0; // type:func
+ObjTimeblock_SpawnDemoEffect = 0x80B816A0; // type:func
+ObjTimeblock_ToggleSwitchFlag = 0x80B81714; // type:func
+ObjTimeblock_Init = 0x80B8175C; // type:func
+ObjTimeblock_Destroy = 0x80B81910; // type:func
+ObjTimeblock_PlayerIsInRange = 0x80B81944; // type:func
+ObjTimeblock_WaitForOcarina = 0x80B81A24; // type:func
+ObjTimeblock_WaitForSong = 0x80B81AA4; // type:func
+ObjTimeblock_SetupDoNothing = 0x80B81B1C; // type:func
+ObjTimeblock_DoNothing = 0x80B81B30; // type:func
+ObjTimeblock_SetupNormal = 0x80B81B40; // type:func
+ObjTimeblock_Normal = 0x80B81B54; // type:func
+func_80BA06AC = 0x80B81CD0; // type:func
+ObjTimeblock_SetupAltBehaviorVisible = 0x80B81D80; // type:func
+ObjTimeblock_AltBehaviorVisible = 0x80B81D94; // type:func
+ObjTimeblock_SetupAltBehaviourNotVisible = 0x80B81E60; // type:func
+ObjTimeblock_AltBehaviourNotVisible = 0x80B81E74; // type:func
+ObjTimeblock_Update = 0x80B81F44; // type:func
+ObjTimeblock_Draw = 0x80B81FCC; // type:func
+ObjHamishi_InitCollision = 0x80B82230; // type:func
+ObjHamishi_Shake = 0x80B82288; // type:func
+ObjHamishi_Break = 0x80B82404; // type:func
+ObjHamishi_Init = 0x80B826B0; // type:func
+ObjHamishi_Destroy = 0x80B82798; // type:func
+ObjHamishi_Update = 0x80B827C4; // type:func
+ObjHamishi_Draw = 0x80B828F4; // type:func
+EnZl4_SetActiveCamDir = 0x80B82A80; // type:func
+EnZl4_SetActiveCamMove = 0x80B82B58; // type:func
+EnZl4_GetTextId = 0x80B82BDC; // type:func
+EnZl4_UpdateTalkState = 0x80B82C80; // type:func
+EnZl4_UpdateFace = 0x80B82CBC; // type:func
+EnZl4_SetMove = 0x80B82E0C; // type:func
+func_80B5BB78 = 0x80B82E4C; // type:func
+EnZl4_GetCueStartPos = 0x80B82E98; // type:func
+EnZl4_SetupFromLegendCs = 0x80B82EDC; // type:func
+EnZl4_InMovingAnim = 0x80B82FB4; // type:func
+EnZl4_Init = 0x80B83084; // type:func
+EnZl4_Destroy = 0x80B83240; // type:func
+EnZl4_SetNextAnim = 0x80B8326C; // type:func
+EnZl4_ReverseAnimation = 0x80B832C0; // type:func
+EnZl4_CsWaitForPlayer = 0x80B832E8; // type:func
+EnZl4_CsMeetPlayer = 0x80B83448; // type:func
+EnZl4_CsAskStone = 0x80B83740; // type:func
+EnZl4_CsAskName = 0x80B83C6C; // type:func
+EnZl4_CsTellLegend = 0x80B84258; // type:func
+EnZl4_CsLookWindow = 0x80B846B4; // type:func
+EnZl4_CsWarnAboutGanon = 0x80B848F8; // type:func
+EnZl4_CsMakePlan = 0x80B84DC0; // type:func
+EnZl4_Cutscene = 0x80B85104; // type:func
+EnZl4_Idle = 0x80B8537C; // type:func
+EnZl4_TheEnd = 0x80B853F4; // type:func
+EnZl4_Update = 0x80B855A4; // type:func
+EnZl4_OverrideLimbDraw = 0x80B85654; // type:func
+EnZl4_PostLimbDraw = 0x80B857E4; // type:func
+EnZl4_Draw = 0x80B85840; // type:func
+EnMm2_ChangeAnim = 0x80B874B0; // type:func
+func_80AAEF70 = 0x80B875D4; // type:func
+EnMm2_Init = 0x80B876A4; // type:func
+EnMm2_Destroy = 0x80B8785C; // type:func
+func_80AAF224 = 0x80B87888; // type:func
+func_80AAF2BC = 0x80B87924; // type:func
+func_80AAF330 = 0x80B87998; // type:func
+func_80AAF3C0 = 0x80B87A28; // type:func
+func_80AAF57C = 0x80B87BE4; // type:func
+func_80AAF5EC = 0x80B87C58; // type:func
+func_80AAF668 = 0x80B87CD4; // type:func
+EnMm2_Update = 0x80B87DC8; // type:func
+EnMm2_Draw = 0x80B87F10; // type:func
+EnMm2_OverrideLimbDraw = 0x80B87FDC; // type:func
+EnMm2_PostLimbDraw = 0x80B88064; // type:func
+BgJyaBlock_Init = 0x80B88270; // type:func
+BgJyaBlock_Destroy = 0x80B88328; // type:func
+BgJyaBlock_Update = 0x80B8835C; // type:func
+BgJyaBlock_Draw = 0x80B88380; // type:func
+ObjWarp2block_Spawn = 0x80B884E0; // type:func
+func_80BA1ECC = 0x80B885BC; // type:func
+ObjWarp2block_SwapWithChild = 0x80B8873C; // type:func
+func_80BA2218 = 0x80B8890C; // type:func
+func_80BA228C = 0x80B8898C; // type:func
+func_80BA2304 = 0x80B88A04; // type:func
+ObjWarp2block_Init = 0x80B88A48; // type:func
+ObjWarp2block_Destroy = 0x80B88B68; // type:func
+ObjWarp2block_SetInactive = 0x80B88BA8; // type:func
+ObjWarp2block_DoNothing = 0x80B88BC0; // type:func
+func_80BA24E8 = 0x80B88BD0; // type:func
+func_80BA24F8 = 0x80B88BE4; // type:func
+func_80BA2600 = 0x80B88CC8; // type:func
+func_80BA2610 = 0x80B88CDC; // type:func
+ObjWarp2block_Update = 0x80B88D8C; // type:func
+ObjWarp2block_Draw = 0x80B88DC8; // type:func
diff --git a/tools/disasm/ique-cn/variables.txt b/tools/disasm/ique-cn/variables.txt
new file mode 100644
index 0000000000..3103f86a63
--- /dev/null
+++ b/tools/disasm/ique-cn/variables.txt
@@ -0,0 +1,23 @@
+gCartHandle = 0x80009D60; // size:0x4 type:OSPiHandle*
+gCurrentRegion = 0x80009F00; // size:0x4 type:u32
+__osRunQueue = 0x80009F38; // size:0x4 type:OSThread*
+__osRunningThread = 0x80009F40; // size:0x4 type:OSThread*
+__osFaultedThread = 0x80009F44; // size:0x4 type:OSThread*
+__osHwIntTable = 0x8000A070; // size:0x28
+__osPiIntTable = 0x8000A098; // size:0x8
+__osShutdown = 0x8000A0FC; // size:0x4 type:u32
+__OSGlobalIntMask = 0x8000A100; // type:OSHWIntr
+__osIntOffTable = 0x8000A670; // size:0x20 type:u8
+__osIntTable = 0x8000A690; // size:0x24
+__osRcpImTable = 0x8000A6C0; // type:u16
+__DriveRomHandle = 0x80010760; // size:0x74 type:OSPiHandle
+__osThreadSave = 0x80012BE0; // type:OSThread
+__osEventStateTab = 0x80012F40; // size:0x78
+gGameStateOverlayTable = 0x800F8F30; // size:0x120 type:GameStateOverlay
+gRegEditor = 0x80127760; // size:0x4 type:RegEditor*
+sZeldaArena = 0x80127C50; // size:0x24 type:Arena
+gSegments = 0x80129048; // size:0x40
+sFaultDrawer = 0x8012E030; // size:0x3C type:FaultDrawer
+sArenaLockMsg = 0x80137E40; // size:0x4 type:OSMesg
+gSystemArena = 0x80137E50; // type:Arena
+gSaveContext = 0x80137F40; // size:0x1428 type:SaveContext
diff --git a/tools/extract_text.py b/tools/extract_text.py
index 50b6923732..d9d9b50b61 100755
--- a/tools/extract_text.py
+++ b/tools/extract_text.py
@@ -1882,6 +1882,148 @@ class MessageDecoderNES(MessageDecoder):
0x47 : "BLACK",
}[c]
+# Chinese Characters ordered according to their appearance in nes_font_static.
+# This unfortunately does not appear to match any standard encoding.
+CHN_CHARS = """你借到了一\
+颗口袋鸡蛋过夜后就会孵出只,用完\
+别忘记把它还回去。归得克洛!与不\
+同很少啼叫个奇异蘑菇新鲜的都容易\
+变质快拿卡利科药店吧之知道这两人\
+间发生什么事但带迷失森林物原主偷\
+猎者锯定是那年轻留下炸弹枚卢比买\
+德库子可以装弓换破损格雷剑大城修\
+好交处方见卓拉王⋯兑券急切地希望\
+点铸卖掉巨刀铁匠师所造坚摧卷眼青\
+蛙趁凉海鲁湖世上最水在前送蠃啦骷\
+髅面具按戴试看着真像怪恐怖吓基顿\
+受欢迎哦兔兜帽长耳朵太爱让头起来\
+有女孩?理更多我们娱乐中心:保龄\
+球场想奖品吗秘密付钱才告诉玩次要\
+瞄准洞放鼠十机预备开始再差()捡\
+扔没能恢复正常请救其他兄弟给励诅\
+咒解除谢报呀啊被小消灭蜘蛛已经减\
+弱富办法越些验帮助寻找首先晚行动\
+第二住喜松柔土壤仔细观察周围全靠\
+成样因为种界每现徽章收集作战绩证\
+明征途状态窗此图标旁边数字显示目\
+量如果区名说里家族身感止错担需箭\
+关系强迫游戏著射击从台够五支武器\
+争取祝运堆软泥精灵选择或键并立即\
+时举置跑投掷疑型甚至飞檐走壁闪光\
+使敌眩晕旋镖攻远短钩条力链勾体获\
+自己根木棒挥舞站携浪费锤砸碎废沉\
+双手镜神井外也耗魔停笛塞尔达宝散\
+芒施展花风返避退火勋圣尼亚觉醒将\
+赐予茹特她萨莉娅魂纳波若暗英帕空\
+瓶红色命份绿蓝和抓伙伴活随呼唤鱼\
+非美豆园合适趣对纪念演奏各律重握\
+盾蹲防御移表滑反升级延伸距离倍套\
+件隔热穿潜服淹死坛充满靴浮悬缺摩\
+擦段勇敢相信超东哥猛龙胃做幸银臂\
+答应遵守诺言金焰入冷艳包钥匙打锁\
+门限于宫内老却驱喝进然域烁当位拨\
+查某层罗盘隐藏振石继续努哇公签临\
+西便箱意惊话左右赌徒值威增冰结授\
+艰苦训练该拥而荣义邪恶学步曲烈安\
+影梦幻镯拔虫员张据翡翠伟树托代传\
+碧商讲妖婆堡男情隆牛奶营养排销售\
+榜朋友搬日客碰烧毁折断斗习骑士又\
+承制尺码护炙侵害底溺掌丁妮席性危\
+往创建娜产罩刚清舒爽般暂脱参加嗯\
+顾片四整三房干稍候赛鳞跳深歌伊阳\
+摇篮雪壮管术接智慧气疲惫治疗伤且\
+硬技斩积蓄直释转效谈听束刻注嗨皇\
+探儿附近半思仅燃紫价高百索何输虽\
+惜幽妙愿勉网墙布藤蔓平爬屏幕顶端\
+挂旧梯嘿饰熄久通狭路慢躲调视角弯\
+旦侧落块推向兴引爆呢山坑楼绝总巧\
+脸私语足导写险雕流粘浑电尾巴几瞧\
+旗哪召跟拜访牧爸拯窟卜肚白马丢河\
+殿村云吹寒庄谁教沙漠盖侬夫等介联\
+声嘻曾领统疆怕鸟黑睛暴雨息初六聚\
+封印七认识必须未梭另渡船乘艘咯扇\
+许鬼板画廊扭天味冻音座锈漩涡吞嘛\
+牢固殊静墓培睡掘阅读式租货款仍;\
+载贪婪仇恨血腥历史诡计谜题亡闭今\
+业早招聘兼职杂指启遗极亮照闯穴伏\
+阻拦朝囚室贝泊泉黎童纯洁翻嘴陷野\
+研究考坏竟坐玛录钓磅分纹誓忠哈眠\
+瀑国务盯毯踩资瞎难倒阱塘屈镇径窄\
+慌允禁激颁喷扰砍持草泰沿实峡谷册\
+追赶市蜃崖灼宣疯狂滚伞脚共部免规\
+递登补肉歉刺杀节横纵礼貌米无孪姐\
+妹改池胆跃任句线范逃期待丽问闲泳\
+连北棵锐虑挤障碍盔甲假设温际顽皮\
+姆违盗贼蝴蝶崇象猫鹰凯普・博古化\
+笨朗匹雄赚寄卵幼突袭腹绦食笔竖枯\
+矮丛吃震撼吸败蜥蜴蝙蝠否则阿莫斯\
+母绕触傻遭汀幅敬诱泡挡沃衣炬黏背\
+抵权核挑壳肌缩邦苏透僵尸麻痹咬吉\
+乃穷尽裂拢娃傀儡亲巫低骨斧漏莱彼\
+塔扫描烟蛇弗扎挺八爪迪困陆嗜仙狼\
+懈贩麦判乔绽速嗄羞永稻终薇呵父程\
+工存氛笼令敏项欧谅众悍怎亏掏毕缓\
+冲酷俯瞰哼蚀功糟呸黄类篇论控括冒\
+度检单懂屋户致腾模嗒咔咋萎紧决呆\
+闷畏骗苗茁算猜残妇婴蔽唯响抚吵境\
+隙逝忆喂辈肩洋溢确迹凝髓混沌降健\
+耕耘星倾沛础堂万宗源本替缝惩罚遇\
+懒惰衷势维秩序抗衡旅顺叛愤辽阔茂\
+称讨厌靶饲求材耶谊噓遍谱议吼薄饶\
+稽齐懦抱千辛漂环配帝焦乎欠驯圈局\
+咩既劳祭伪弃耐岗唔佳搭档负责攀绍\
+忙提缠唉亳毛笑欣赏怜瓜奔啧踢志宜\
+仿楚挖由捕播谣勤陌杰骏鞭抽享栏逛\
+汊烦匆妈唱墟粗虐乡彻咕哝简优惠民\
+灰聪南澈卫熟悉故乌兆企抢夺拼粉番\
+群秒料肯赋婚诚邀斜诞及盛典拍轰植\
+矿采阴罕昏压悦饿忍咳弄舔醉怀尊严\
+滋农饥沮丧奋省撑脑灯隧派狗呜咣警\
+挪窜峙含痛夸艺撒谎昨炎痒泪稳况磨\
+休柱敲油菜盟骄傲献噢窒医甜鰓恼耽\
+搁孤丈订戒贵财惹腐剂融厚映妻狠泄\
+咿瞒咽恭涨嘎悔犹豫呃糕埃荡漾饵晃\
+约专剔窍.乱甩鳅剧竿杆符呱团饱犯\
+肃啵吟月诗碑奥扬舍副袖夏赖仆摆雇\
+疙瘩居簧车剩玻璃赔欺育珍床蛮啄、\
+稀栋柜鼻厉乏饭胡叮咚兵勃苛薪痴挣\
+馊扑良竭慷慨欲愚蠢嘉监狱喔港逆误\
+独划措颜奴罢洗俊罪偿牺牲劲岁恩账\
+珂艾组织伯社架桥碟卑鄙臭占讶兽刷\
+竞帐篷迟繁倦罐牌晨景田孔钻浓盒溜\
+街概盹敞扉文撞姑娘糊涂依辐微汇缚\
+宰摸侍垒扮惕估执悲拖累弥渴班搞谛\
+哀圆鸣俩善塌埋孙凶聊寃怨购涌劈狐\
+狸票闻哟唬摘愉呦棺溶褐肤颤逗娶逼\
+悠蒙漆彩丰"""
+# Ensure the contents of the above is unique
+assert len(set(CHN_CHARS)) == len(CHN_CHARS), (len(set(CHN_CHARS)), len(CHN_CHARS))
+
+class MessageDecoderCHN(MessageDecoderNES):
+ def __init__(self) -> None:
+ # The CHN text encoding is mostly the same as the NES encoding, except it lacks
+ # the D-Pad Icon and has multi-byte sequences for Chinese characters.
+ super().__init__()
+ # Remove D-Pad Icon
+ self.extraction_charmap.pop(0xAB)
+ # Add Chinese Characters
+ for i,c in enumerate(CHN_CHARS):
+ self.extraction_charmap[0xA08C + i] = c
+ self.pop_char = self.pop_char_chn
+
+ def pop_char_chn(self) -> int:
+ c = self.pop_byte()
+ # AA acts like a sort of escape sequence for single-byte
+ # chars that are >= 0xA0 that should not be interpreted
+ # as a multi-byte sequence
+ if c == 0xAA:
+ return self.pop_byte()
+ # For other chars >= 0xA0, it indicates a multi-byte sequence
+ if c >= 0xA0:
+ return (c << 8) | self.pop_byte()
+ # If neither of the above, treat as a single byte char
+ return c
+
class MessageTableDesc:
def __init__(self, table_name : str, seg_name : str, decoder : MessageDecoder, parent : Optional[int]) -> None:
self.table_name : str = table_name
@@ -1895,6 +2037,9 @@ class MessageTableEntry:
def __init__(self, text_id : int, box_type : int, box_pos : int, addr : int) -> None:
self.text_id, self.box_type, self.box_pos, self.addr = text_id, box_type, box_pos, addr
+ def __str__(self) -> str:
+ return f"MessageTableEntry(0x{self.text_id:04X}, {self.box_type}, {self.box_pos}, 0x{self.addr:08X})"
+
@staticmethod
def from_bin(data : bytes) -> "MessageTableEntry":
text_id,info,addr = struct.unpack(">HBxI", data)
@@ -1947,8 +2092,9 @@ class MessageEntry:
# Valid for all languages
out += self.define_message("DEFINE_MESSAGE", shared_box_type, shared_box_pos, self.data)
else:
- # Some NTSC messages have different box types/positions between JPN and NES,
+ # Some NTSC/iQue messages have different box types/positions between JPN and NES/CHN,
# so emit both DEFINE_MESSAGE_JPN and DEFINE_MESSAGE_NES
+ assert len(self.data) == 4
assert self.data[0] is not None
assert self.data[1] is not None
assert self.data[2] is None
@@ -1959,7 +2105,7 @@ class MessageEntry:
# JPN only
out += self.define_message("DEFINE_MESSAGE_JPN", self.data[0].box_type, self.data[0].box_pos, self.data)
elif selection == (False,True,True,True):
- # NES only
+ # NES/CHN only
out += self.define_message("DEFINE_MESSAGE_NES", self.data[1].box_type, self.data[1].box_pos, self.data)
else:
# Other unimplemented cases
@@ -2070,22 +2216,31 @@ def main():
jpn_decoder = MessageDecoderJPN()
nes_decoder = MessageDecoderNES()
+ chn_decoder = MessageDecoderCHN()
- message_tables : List[Optional[MessageTableDesc]] = [None for _ in range(4)] # JP, EN, FR, DE
+ message_tables : List[Optional[MessageTableDesc]] = [None for _ in range(4)] # JP, EN/CN, FR, DE
message_table_staff : MessageTableDesc = None
- if config.text_lang_pal:
- message_tables[0] = None
- message_tables[1] = MessageTableDesc("sNesMessageEntryTable", "nes_message_data_static", nes_decoder, None)
- message_tables[2] = MessageTableDesc("sGerMessageEntryTable", "ger_message_data_static", nes_decoder, 1)
- message_tables[3] = MessageTableDesc("sFraMessageEntryTable", "fra_message_data_static", nes_decoder, 1)
- message_table_staff = MessageTableDesc("sStaffMessageEntryTable", "staff_message_data_static", nes_decoder, None)
- else:
+ if config.text_lang == "NTSC":
message_tables[0] = MessageTableDesc("sJpnMessageEntryTable", "jpn_message_data_static", jpn_decoder, None)
message_tables[1] = MessageTableDesc("sNesMessageEntryTable", "nes_message_data_static", nes_decoder, None)
message_tables[2] = None
message_tables[3] = None
message_table_staff = MessageTableDesc("sStaffMessageEntryTable", "staff_message_data_static", nes_decoder, None)
+ elif config.text_lang == "PAL":
+ message_tables[0] = None
+ message_tables[1] = MessageTableDesc("sNesMessageEntryTable", "nes_message_data_static", nes_decoder, None)
+ message_tables[2] = MessageTableDesc("sGerMessageEntryTable", "ger_message_data_static", nes_decoder, 1)
+ message_tables[3] = MessageTableDesc("sFraMessageEntryTable", "fra_message_data_static", nes_decoder, 1)
+ message_table_staff = MessageTableDesc("sStaffMessageEntryTable", "staff_message_data_static", nes_decoder, None)
+ elif config.text_lang == "CN":
+ message_tables[0] = MessageTableDesc("sJpnMessageEntryTable", "jpn_message_data_static", jpn_decoder, None)
+ message_tables[1] = MessageTableDesc("sNesMessageEntryTable", "nes_message_data_static", chn_decoder, None)
+ message_tables[2] = None
+ message_tables[3] = None
+ message_table_staff = MessageTableDesc("sStaffMessageEntryTable", "staff_message_data_static", nes_decoder, None)
+ else:
+ raise Exception(f"Unsupported text language: {config.text_lang}")
messages = collect_messages(message_tables, baserom_segments_dir, config, code_vram, code_bin)
staff_messages = collect_messages([message_table_staff], baserom_segments_dir, config, code_vram, code_bin)
diff --git a/tools/ido_recomp/linux/5.3/as0 b/tools/ido_recomp/linux/5.3/as0
deleted file mode 100755
index cdac712e5f..0000000000
Binary files a/tools/ido_recomp/linux/5.3/as0 and /dev/null differ
diff --git a/tools/ido_recomp/linux/5.3/as1 b/tools/ido_recomp/linux/5.3/as1
deleted file mode 100755
index f89911f80f..0000000000
Binary files a/tools/ido_recomp/linux/5.3/as1 and /dev/null differ
diff --git a/tools/ido_recomp/linux/5.3/cc b/tools/ido_recomp/linux/5.3/cc
deleted file mode 100755
index be5bed557d..0000000000
Binary files a/tools/ido_recomp/linux/5.3/cc and /dev/null differ
diff --git a/tools/ido_recomp/linux/5.3/cfe b/tools/ido_recomp/linux/5.3/cfe
deleted file mode 100755
index c257f65a62..0000000000
Binary files a/tools/ido_recomp/linux/5.3/cfe and /dev/null differ
diff --git a/tools/ido_recomp/linux/5.3/err.english.cc b/tools/ido_recomp/linux/5.3/err.english.cc
deleted file mode 100644
index 6976e38a95..0000000000
--- a/tools/ido_recomp/linux/5.3/err.english.cc
+++ /dev/null
@@ -1,1260 +0,0 @@
-@
- 358 358 358
- 6464 6482 6553
- 6553 6593 6728
- 6728 6746 6803
- 6803 6808 6808
- 6808 6818 6818
- 6818 6826 6826
- 6826 6847 6847
- 6847 6875 6922
- 6922 6930 6930
- 6930 6939 6939
- 6939 6948 6948
- 6948 6974 7120
- 7120 7149 7204
- 7210 7248 7311
- 7317 7350 7442
- 7450 7497 7627
- 7635 7709 7930
- 7938 7975 8063
- 8071 8113 8253
- 8261 8289 8289
- 8298 8338 8445
- 8460 8502 8635
- 8650 8690 8819
- 8834 8857 8965
- 8965 9008 9113
- 9119 9142 9227
- 9235 9282 9451
- 9451 9462 9462
- 9462 9477 9477
- 9477 9497 9497
- 9497 9545 9545
- 9545 9584 9584
- 9584 9604 9662
- 9662 9682 9720
- 9720 9749 9749
- 9749 9788 9788
- 9788 9802 9802
- 9802 9829 9829
- 9829 9861 9861
- 9861 9904 9904
- 9904 9920 9920
- 9920 9962 9962
- 9962 9988 9988
- 9988 10014 10014
-10014 10035 10035
-10035 10054 10097
-10097 10115 10115
-10115 10147 10147
-10147 10183 10183
-10183 10208 10208
-10208 10236 10236
-10236 10269 10269
-10269 10304 10304
-10304 10328 10328
-10328 10351 10351
-10351 10371 10371
-10371 10402 10402
-10402 10447 10447
-10447 10497 10497
-10497 10533 10533
-10533 10598 10598
-10606 10630 10630
-10640 10671 10671
-10690 10719 10719
-10728 10752 10795
-10795 10837 10837
-10837 10876 10876
-10876 10900 10900
-10900 10948 10948
-10960 11021 11103
-11103 11128 11128
-11128 11153 11153
-11153 11216 11216
-11216 11239 11239
-11239 11303 11303
-11303 11347 11347
-11357 11393 11393
-11393 11432 11432
-11442 11494 11494
-11494 11536 11536
-11536 11595 11595
-11595 11622 11622
-11622 11684 11684
-11684 11726 11726
-11738 11778 11778
-11782 11813 11813
-11813 11850 11850
-11850 11900 12087
-12111 12120 12120
-12120 12129 12129
-12129 12158 12158
-12158 12192 12192
-12192 12237 12237
-12237 12273 12273
-12273 12326 12326
-12330 12366 12366
-12366 12423 12423
-12427 12482 12482
-12486 12560 12560
-12568 12631 12631
-12637 12691 12691
-12691 12743 12743
-12743 12785 12785
-12785 12826 12826
-12826 12865 12865
-12865 12883 12883
-12883 12946 12946
-12956 12995 12995
-13005 13066 13066
-13077 13163 13163
-13163 13211 13211
-13211 13270 13270
-13270 13318 13318
-13318 13350 13350
-13350 13387 13387
-13387 13428 13428
-13428 13464 13533
-13533 13580 13737
-13737 13776 13854
-13854 13913 13913
-13913 13950 13950
-13950 14118 14118
-14118 14150 14150
-14150 14163 14194
-14194 14224 14255
-14255 14275 14319
-14319 14353 14458
-14466 14484 14530
-14534 14567 14567
-14567 14635 14682
-14690 14742 14742
-14742 14789 14789
-14801 14875 14875
-14886 14947 14947
-14947 14992 14992
-14992 15035 15085
-15085 15134 15205
-15214 15267 15448
-15454 15496 16810
-16822 16875 16960
-16972 17053 17179
-17191 17236 17332
-17344 17491 17841
-17853 17939 18304
-18316 18471 18774
-18786 18952 19323
-19335 19364 19496
-19500 19527 19598
-19598 19613 19776
-19797 19808 19837
-19837 19862 19862
-19868 19927 20026
-20034 20075 20179
-20187 20223 20223
-20223 20290 20382
-20392 20441 20589
-20601 20656 20656
-20656 20699 20818
-20826 20860 21038
-21046 21094 21191
-21203 21236 21314
-21326 21395 21457
-21469 21502 21502
-21502 21587 21731
-21756 21789 21864
-21875 21901 21976
-22013 22059 22220
-22257 22397 22561
-22561 22595 22595
-22603 22623 22623
-22631 22667 22828
-22865 22919 22994
-23031 23059 23120
-23132 23201 23201
-23212 23274 23274
-23285 23345 23345
-23356 23393 23393
-23399 23431 23532
-23542 23587 23646
-23656 23697 23745
-23755 23796 23844
-23854 23876 23928
-23942 23971 24153
-24160 24243 24243
-24247 24273 24743
-24755 24784 24984
-24996 25034 25034
-25034 25075 25273
-25281 25332 25410
-25420 25467 25544
-25554 25583 25744
-25754 25783 26061
-26071 26111 26185
-26194 26239 26525
-26535 26568 26914
-26924 26951 26998
-27008 27035 27082
-27093 27120 27167
-27178 27206 27251
-27261 27289 27334
-27345 27391 27931
-27938 27959 28007
-28019 28037 28037
-28043 28069 28069
-28077 28147 28199
-28207 28266 28266
-28274 28306 28306
-28314 28339 28339
-28347 28404 28510
-28518 28567 28682
-28690 28728 28728
-28736 28782 29023
-29033 29085 29234
-29246 29303 29383
-29395 29432 29570
-29592 29631 29644
-29644 29693 29758
-29767 29810 29875
-29875 29911 29976
-29984 30014 30014
-30027 30086 30151
-30157 30223 30293
-30301 30369 30445
-30457 30511 30568
-30580 30630 30743
-30755 30812 30874
-30886 30959 31035
-31043 31076 31175
-31183 31243 31243
-31251 31323 31323
-31331 31433 31433
-31445 31544 31686
-31698 31740 31740
-31740 31783 31783
-31783 31824 31824
-31824 31873 31996
-32008 32056 32164
-32176 32210 32210
-32229 32271 32271
-32279 32323 32569
-32581 32642 32718
-32739 32779 32916
-32926 32953 33047
-33057 33116 33315
-33325 33373 33373
-33373 33407 33469
-33494 33527 33527
-33536 33573 33573
-33584 33650 33697
-33705 33763 33763
-33763 33797 33797
-33797 33829 33906
-33915 33976 33976
-33985 34016 34098
-34098 34133 34198
-34198 34261 34261
-34269 34312 34312
-34324 34363 34438
-34444 34530 34530
-34538 34596 34626
-34636 34675 34754
-34764 34821 34821
-34821 34867 34950
-34959 35016 35135
-35145 35198 35198
-35208 35266 35344
-35355 35382 35537
-35547 35576 35629
-35637 35705 35705
-35713 35764 35764
-35764 35784 35876
-35888 35932 35950
-35950 36013 36138
-36150 36191 36280
-36286 36314 36419
-36431 36516 36516
-36516 36554 36642
-36642 36689 36808
-36818 36881 37105
-37113 37183 37204
-37204 37225 37225
-37225 37255 37348
-37348 37388 37388
-37388 37454 37454
-37454 37518 37518
-37518 37584 37584
-37584 37717 37717
-37717 37752 37752
-37752 37783 37889
-37901 37928 38034
-38046 38115 38115
-38115 38140 38187
-38195 38219 38339
-38351 38422 38422
-38422 38486 38486
-38486 38555 38555
-38555 38619 38619
-38619 38641 38641
-38641 38758 38758
-38758 38929 38929
-38929 38975 39043
-39055 39084 39133
-39133 39175 39265
-39275 39310 39494
-39504 39547 39576
-39587 39614 39668
-39674 39697 39797
-39797 39845 40094
-40094 40158 40264
-40264 40369 40523
-40523 40593 40593
-40593 40629 40876
-40876 40911 40971
-40977 41026 41026
-41038 41077 41077
-41077 41116 41116
-41116 41156 41156
-41156 41195 41195
-41195 41237 41237
-41237 41285 41285
-41285 41304 41304
-41304 41371 41371
-41371 41429 41429
-41429 41491 41491
-41491 41519 41519
-41519 41572 41572
-41572 41642 41642
-41642 41676 41676
-41676 41713 41713
-41713 41751 41751
-41751 41792 41792
-41792 41856 41856
-41856 41881 41881
-41881 41936 41936
-41936 41977 41977
-41977 42018 42018
-42018 42090 42090
-42090 42162 42162
-42162 42205 42205
-42205 42267 42267
-42267 42294 42294
-42294 42309 42309
-42309 42338 42386
-42393 42425 42522
-42530 42577 42577
-42577 42623 42623
-42623 42643 42725
-42725 42748 42748
-42748 42829 42897
-42901 42952 42952
-42952 42978 43025
-43025 43116 43116
-43116 43171 43171
-43171 43204 43376
-43386 43453 43471
-43471 43547 43780
-43798 43921 44116
-44120 44120 44120
-Out of memory: %s
-There is no more memory left in the system for compiling this program.
-Internal Error Unknown Error Message %s
-1) An internal error, while attempting to print an unavailable message
-2) The error message file is inaccessible or has other problems
-Unknown Signal %s
-1) An unknown signal has been caught
-2) 2 Nested signals
-line
-Warning:
-Fatal:
-Source not available
-Too many errors... goodbye.
-There is a limit of 30 errors before aborting.
-Error:
-reserved
-reserved
-Unknown Control Statement
-1) The line begins with a '#' and is not of the form:
- # ""
-2) Please compile this program with the preprocessor enabled.
-Unknown character %s ignored
-The character is not part of the source character set.
-2.2.1
-Unknown control character \%s ignored
-The control character is not part of the source character set.
-2.2.1
-Illegal character %s in exponent
-1) Digits or sign expected after 'e' or 'E'.
-2) Digits are expected after sign in exponent.
-3.1.3.1
-Constant is out of range and may be truncated.
-The constant is too large to be accurately represented and may be
-truncated. The limits are in the system include file limits.h.
-2.2.4.2
-Constant is out of range for a 32-bit data type, but accepted as written.
-The constant is too large to fit in a 32-bit data type, but will be
-accurately represented in a wider data type. The value may be truncated,
-depending on its context. The limits are in the system include file
-limits.h.
-2.2.4.2
-Character constant size out of range
-1) No characters in a character constant.
-2) More than 4 bytes in a character constant.
-3.1.3.4
-Wide character constant size out of range
-1) No characters in the multibyte sequence (0 assumed).
-2) More than 1 byte in the multi-byte sequence (only the first byte was converted).
-3.1.3.4
-Invalid multibyte character
-4.10.7.2
-Newline in string or character constant
-1) Terminate your string or character constant with closing quotes.
-2) Put a backslash before the newline.
-3.1.3.4, 3.1.4
-Octal character escape too large: %s > %s
-1) Terminate end of octal sequence with a non-octal character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Hex character escape too large: %s > %s
-1) Terminate end of hex sequence with a non-hex character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Unexpected End-of-file
-1) Unterminated string or character constant
-2) Missing closing comment marker (*/)
-3) File system problems
-Unrecognized escape sequence in string \%s
-Recognized escape sequences are \a, \b, \f, \n, \r, \t, and \v.
-Character will be treated as un-escaped.
-3.9.2
-Illegal octal digit %s
-Octal constants, beginning with 0, must only have digits between 0 and 7,
-inclusive.
-3.1.3.2
-Unable to open temporary file for compiling %s
-1) TMPDIR environment variable is set to a directory that you have no
- permissions for.
-2) The file system is full.
-3) System errors beyond the scope of the compiler.
-%s: Hangup
-%s: Interrupt
-%s: Quit (ASCII FS)
-%s: Illegal instruction (not reset when caught)
-%s: Trace trap (not reset when caught)
-%s: IOT instruction
-Also SIGABRT, used by abort, replace SIGIOT in the future
-%s: EMT instruction
-Also SIGXCPU, Exceeded CPU time limit
-%s: Floating point exception
-%s: Kill (cannot be caught or ignored)
-%s: Bus error
-%s: Segmentation violation
-%s: Bad argument to system call
-%s: Write on a pipe with no one to read it
-%s: Alarm clock
-%s: Software termination signal from kill
-%s: User defined signal 1
-%s: User defined signal 2
-%s: Death of a child
-Power-fail restart
-%s: Also SIGXFSZ, exceeded file size limit
-%s: Window change
-%s: Handset, line status change
-%s: Sendablestop signalnot from tty
-%s: Stop signal from tty
-%s: Pollable event occurred
-%s: Input/Output possible signal
-%s: Urgent condition on IO channel
-%s: Window size changes
-%s: Virtual time alarm
-%s: Profiling alarm
-%s: Continue a stopped process
-%s: To readers pgrp upon background tty read
-%s: Like TTIN for output if (tp->t_local<OSTOP)
-%s: Resource lost (eg, record-lock)
-'auto' and 'register' are not allowed in an external declaration
-3.7(10)
-must have function type
-3.7.1(30)
-Functions cannot return arrays
-3.7.1(33), 3.3.2.2
-Declaration list not allowed
-3.7.1(5)
-Too many input files %s
-The command line may contain only one file
-cpp internal error: input stack underflow
-cpp internal error: if stack underflow
-Cannot open the file %s
-No new-line character at the end of the file %s
-2.1.1.2(30)
-Fatal: Exceeded the limit of nesting level for #include file
-Fatal: Exceeded the limit of nesting level for #include file. This limit
-is 200.
-Fail to read the file %s
-Cannot write the file %s
-%s: %s: An if directive is not terminated properly in the file
-%s: %s: nested comment
-%s:%s: Illegal macro name %s; macro name shall be an identifier
-%s:%s: Illegal preprocessing token sequence
-3.8.3(35)
-%s:%s: Illegal macro parameter name
-%s:%s: Non-unique macro parameter name
-3.8.3(18)
-%s:%s: Missing ')' in parameter list for #define %s
-%s:%s: Missing ')' in macro instantiation
-%s:%s: Bad punctuator in the parameter list for #define %s
-%s:%s: Macro %s redefined.
-%s:%s: # operator should be followed by a macro argument name
-%s:%s: Badly formed constant expression%s
-3.4(9), 3.8
-%s:%s: Division by zero in #if or #elif
-3.8
-unknown command line option %s
-extraneous input/output file name %s
-%s: %s: Unterminated string or character constant
-A preprocessing string or character constant token was not
-terminated. Note that preprocessing directives are processed
-after the source file has been divided into preprocessing tokens.
-2.1.1.2(30) 3.1(18) 3.8
-%s: %s:
-%s: %s:
-%s: %s: Unterminated comment
-%s: %s: Unknown directive type %s
-%s: %s: #elif or #else after #else directive
-%s: %s: Bad identifier after the %s
-%s: %s: #%s accepts only one identifier as parameter
-3.8
-%s: %s: Bad identifier after the %s
-%s: %s: text following #%s violates the ANSI C standard.
-3.8
-%s: %s: Bad character %s occurs after the # directive.
-3.8
-%s: %s: the ## operator shall not be the %s token in the replacement list
-3.8.3.3
-%s: %s: the defined operator takes identifier as operand only.
-3.8.1
-%s: %s: Not in a conditional directive while using %s
-%s: %s: Illegal filename specification for #include
-%s: %s: Invalid file name %s for #include
-%s: %s: Cannot open file %s for #include
-%s: %s: Bad argument for #line command
-%s: %s: #error %s
-%s: %s: Tried to redefine predefined macro %s, attempt ignored
-3.8.7(22)
-%s: %s: Undefining predefined macro %s
-3.8.7(22)
-%s: %s: Undefined the ANSI standard library defined macro %s
-4.1.2.1(9)
-%s: %s: The number of arguments in the macro invocation does not match the definition
-%s: %s: Illegal character %s in preprocessor if
-%s: %s: Illegal character %s for number in preprocessor if
-%s: %s: No string is allowed in preprocessor if
-%s: %s: Not supported pragma %s
-%s: %s: Not supported #pragma format
-%s: %s: ANSI C does not allow #ident; %s
-%s: %s: Not supported #ident format
-This cpp extension accepts the following format:
-#ident "any string"
-%s: %s: Not supported #assert/#unassert format
-This cpp extension accepts the following format:
-#assert identifier
-#assert identifier ( pp-tokens )
-#unassert identifier
-#unassert identifier ( pp-tokens )
-%s: %s: Bad assertion predicate format
-The correct syntax for this cpp extension is:
-#assert identifier ( pp-token )
-%s: %s: directive is an upward-compatible ANSI C extension
-%s: This option requires an argument
-%s: %s: A macro has expanded recursively more than %s times. Further expansion will be disabled! Use command-line option: -Wp,-max_rec_depth=depth to recurse deeper.
-A status return from cpp to cfe
-Syntax Error
-The token read was unexpected.
-Syntax Error -- cannot backup
-The token read was unexpected.
-Yacc stack overflow
-The expression is too complicated to parse.
-Trailing comma in enumerator list
-The use of a trailing comma in an enumerator list is not standard C. There
-may be portability problems.
-3.5.2.2
-Empty declaration
-Empty declarations are invalid in standard C.
-3.5
-%s declared, but not referenced.
-redeclaration of '%s'; previous declaration at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-'%s' undefined; reoccurrences will not be reported.
-Non-function name referenced in function call.
-3.3.2.2(18)
-The number of arguments doesn't agree with the number in the declaration.
-3.3.2.2(5)
-'%s' section name longer than 8 characters. Name truncated.
-'%s' is already placed by pragma alloc_text.
-Cannot write ucode file while compiling %s
-1) The file system is full
-2) Permissions problem
-Must have corresponding formal argument for '%s'
-Parameter found in the declaration part, but not in the argument list.
-3.7.1(7)
-Non-prototype declaration is an obsolescent feature.
-The use of function definitions with separate parameter identifier
-and declaration lists (not prototype-format parameter type and
-identifier declarators) is an obsolescent feature.
-3.9.5
-Incompatible function declarations for %s
-For two function types to be compatible, both shall specify compatible
-return types. Moreover, the parameter type lists, if both are present,
-shall agree in the number of parameters and in use of the ellipsis
-terminator; corresponding parameters shall have compatible types. If
-one type has a parameter type list and the other type is specified by
-a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions. If one type has a parameter type list and the
-other is specified by a function definition that contains a (possibly
-empty) identifier list, both shall agree in the number of parameters,
-and the type of each prototype parameter shall be compatible with the
-type that results from application of the default argument promotions
-to the type of the corresponding identifier. (For each parameter
-declared with function or array type, its type for these comparisons
-is the one that results from conversion to a pointer type. For each
-parameter declared with qualified type, its type for these comparisons
-is the unqualified version of its declared type.) There you have it!
-3.5.4.3(15)
-Incompatible function return type for this function.
-For two function types to be compatible, both shall specify compatible
-return types.
-3.5.4.3(15)
-The number of parameters for function is different from the previous declaration
-The parameter type lists, if both are present, shall agree in the
-number of parameters and in use of the ellipsis terminator.
-3.5.4.3(15)
-Incompatible type for the function parameter
-If both parameter type lists are present, corresponding
-parameters shall have compatible types.
-3.5.4.3(15)
-Function %s is redeclared with an incompatible argument type (after default argument promotion), which could lead to undefined run-time behaviour.
-The redeclaration could cause arguments at a call site to be passed
-inconsistently with what the function implementation expects, and
-parameters would therefore be accessed erroneously when executing the
-function body. Note that a float argument is promoted to a double
-when passed (potentially through fp registers) to an unprototyped
-function.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, ellipsis terminator not allowed
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the type of each parameter shall be
-compatible with the type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype declaration and non-prototype definition found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other is specified by a
-function definition that contains a (possibly empty) identifier list,
-both shall agree in the number of parameters, and the type of each
-prototype parameter shall be compatible with the type that results
-from application of the default argument promotions to the type of the
-corresponding identifier.
-3.5.4.3(15)
-Empty declaration specifiers
-Standard C requires at least a storage class specifier, type specifier,
-or a type qualifier in declarations. 'extern int' assumed.
-3.5
-Can't write to the file %s
-1) The output file cannot be opened for writing.
-2) Out of file space.
-Duplicate '%s'
-typedef, extern, static, auto, register, const, volatile may not
-appear more than once in the same specifier list or qualifier list.
-Duplicate occurrence ignored.
-3.5.1(10) , 3.5.3(5)
-Null input
-There is nothing to compile.
-Illegal type combination
-3.5.2
-Missing ';' at end of structure / union member declaration
-In standard C, each member declaration must be terminated by a ';'. A
-terminating ';' is assumed.
-3.5.2.1
-Missing member name in structure / union
-In standard C, each member declaration have a member name. The missing
-member is assumed to not exist.
-3.5.2.1
-This variable is initialized twice.
-Neither 'const' or 'volatile' have any effect on function results.
-Qualifiers only apply to expressions designating an object that
-can be altered or examined.
-3.5.3(10)
-An integer constant expression is required here.
-The expression that defines the value of an enumeration constant
-shall be an integral constant expression that has a value
-representable as an int.
-3.5.2.2(28)
-(previous declaration of '%s' at line %s in file '%s')
-Must be an integer type greater than zero.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-Array size cannot be a long long.
-Arrays with more than 2^32 elements are not yet supported.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-bit-field '%s' width is not an integer constant
-The expression that specifies the width of a bit-field shall be an
-integral constant expression.
-3.5.2.1(15)
-bit-field '%s' width is negative
-The expression that specifies the width of a bit-field shall be
-non-negative.
-3.5.2.1(15)
-bit-field '%s' type required to be int, unsigned int, or signed int.
-A bit-field shall have type int, unsigned int, or signed int.
-3.5.2.1(30)
-bit-field %s's type not integer.
-Non-scalar type or pointer type to a non-object for increment or decrement operator.
-The operand of the prefix/postfix increment or decrement operator shall have scalar type; if it is of pointer type, it must point to an object.
-3.3.2.4(37), 3.3.3.1(25)
-Assign value to a function type.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.2.2.1(5)
-Assign value to an array.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for variable of incomplete type.
-The operand of increment and decrement operator shall be a modifiable
-scalar lvalue. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-The left-hand side of the '.' operator must be an addressable lvalue, when a bit-field is not contained within a unit of 32 bits alignment.
-This is a restriction in our implementation, which can be worked
-around by always accessing long long bit-fields indirectly (i.e.
-by means of the '->' operator).
-This expression is not an lvalue.
-3.2.2.1
-Modified an rvalue.
-3.2.2.1
-Change value for constant variable.
-The operand of increment and decrement operators shall be modifiable
-scalar lvalues. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for constant field of a struct or union.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Dereferenced a non-pointer.
-The operand of the unary * operator shall have pointer type.
-3.3.3.2(39)
-The operand of the unary + or - operator shall have arithmetic type.
-3.3.3.3(6)
-The operand of the unary ~ operator shall have integral type.
-3.3.3.3(6)
-The operand of the unary ! operator shall have scalar type.
-3.3.3.3(6)
-Constants must have arithmetic type.
-3.1.3
-Bad type name for cast operator
-The type name for the cast operator should either be void or a
-qualified or unqualified scalar type.
-3.3.4(22)
-Improper cast of non-scalar type expression.
-The operand for the cast operator shall be of scalar type.
-3.3.4(23)
-Cast a pointer into a non-integral type.
-A pointer may be converted to an integral type.
-3.3.4(31)
-Cast a non-integral type into a pointer.
-An integral type may be converted to a pointer.
-3.3.4(31)
-Duplicate member '%s'
-Two members of a struct may not have the same name.
-3.1.2.2(7,25)
-Invalid constant expression.
-Constant expressions shall not contain assignment, increment, decrement,
-function-call, or comma operators, except when they are contained within
-the operand of the sizeof operator.
-3.4(9)
-Constant expressions must be derived from a constant value or a constant
-variable.
-3.4
-Dangerous operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier. This operand is NOT an lvalue, but we let it pass.
-Note that a segmentation error with possible core dump will result
-when the resulting address does not denote a valid (declared)
-storage location. This feature will be discontinued in future
-releases of the compiler!
-3.3.3.2(36)
-Unacceptable operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier.
-3.3.3.2(36)
-'&' before array or function; ignored
-Unacceptable operand of sizeof operator.
-The sizeof operator shall not be applied to an expression that has
-function type or an incomplete type, to the parenthesized name of such
-a type, or to an lvalue that designates a bit-field object.
-3.3.3.4
-Unacceptable operand of a multiplicative operator.
-Each of the operands of a multiplicative operator shall have arithmetic type.
-3.3.5(18)
-Unacceptable operand of the remainder operator
-Each of the operands of the remainder (%) operator shall have integral type.
-3.3.5(18)
-Unacceptable operand of '+'.
-For the + operator, either both operands shall have arithmetic type, or
-one operand shall be a pointer to an object type and the other shall
-have integral type.
-3.3.6(39)
-Unacceptable operand of '-'.
-For the subtraction operator, one of the following shall hold: both operands
-have arithmetic type; operands are pointers to qualified or unqualified
-versions of compatible object types; or the left operand is a pointer
-to an object type and the right operand has integral type.
-3.3.6(39)
-Unacceptable operand of shift operator.
-Each of the operands of bitwise shift operators shall have integral type.
-3.3.7(9)
-Unacceptable operand of relational operator.
-For relational operators, one of the following shall hold: both
-operands have arithmetic type; both operands are pointers to qualified
-or unqualified versions of compatible object types; or both operands
-are pointers to qualified or unqualified versions of compatible
-incomplete types.
-3.3.8(32)
-Unacceptable operand of == or !=
-For the == or != operator, one of the following shall hold: both operands
-are pointers to qualified or unqualified versions of compatible types; one
-operand is a pointer to an object or incomplete type and the other is a
-pointer to a qualified or unqualified version of void; or one operand is
-a pointer and the other is a null pointer constant.
-3.3.9(21)
-Unacceptable operand of &.
-Each of the operands shall have integral type.
-3.3.10(7)
-Unacceptable operand of ^.
-Each of the operands shall have integral type.
-3.3.11(18)
-Unacceptable operand of |.
-Each of the operands shall have integral type.
-3.3.12(30)
-Unacceptable operand of &&.
-Each of the operands shall have scalar type.
-3.3.13(7)
-Unacceptable operand of ||.
-Each of the operands shall have scalar type.
-3.3.14(20)
-Unacceptable operand of conditional operator.
-The first operand of conditional operator shall have scalar type. One
-of the following shall hold for the second and third operands:
-both operands have arithmetic type; both operands have compatible
-structure or union types; both operands have void type; both operands
-are pointers to qualified or unqualified versions of compatible types;
-one operand is a pointer and the other is a null pointer constant; or
-one operand is pointer to an object or incomplete type and the other
-is a pointer to a qualified or unqualified version of void.
-3.3.15
-Duplicate label '%s'
-A label name can only occur once in a function.
-3.1.2.1(25)
-Division by zero.
-3.3.5
-Subscripting a non-array.
-3.3.2.1
-Subscripting an array of incomplete type which is not an object type.
-The element of the array shall have an object type.
-3.3.2.1
-Should only subscript an array with an integral expression
-3.3.2.1
-Subscripting an unbounded array
-3.3.2.1
-Array index out of range
-3.3.2.1
-Selector requires struct/union pointer as left hand side
-In K&R mode the expression is implicitly converted to the '.' selector
-for a struct/union left-hand side.
-3.3.2.3
-Selector requires struct/union as left hand side
-In K&R mode the expression is implicitly converted to the '->' selector
-for a struct/union pointer left-hand side.
-3.3.2.3
-member of structure or union required
-3.3.2.3
-types have different qualifier specifications
-For two qualified types to be compatible, both shall have the
-identically qualified version of a compatible type; qualified
-and unqualified versions of a type are distinct types. For two
-types to be compatible their types must be the same.
-3.5.3(26)
-Incompatible array type due to different array size
-For two array types to be compatible, both shall have compatible element
-types; if both size specifiers are present, they shall have the
-same value.
-3.5.4.2(11)
-Incompatible array type due to incompatible element type
-For two array types to be compatible, both shall have compatible element
-types.
-3.5.4.2(11)
-Incompatible pointer type assignment
-The type pointed to by the left-hand side of simple assignment
-statement is incompatible with the type pointed to by the right-hand side.
-3.3.16.1, 3.5.4.1(21)
-Incompatible base type of pointer type
-K&R feature.
-Type %s of %s is incompatible with type %s of %s
-Incompatible types can be resolved by casting or by other means.
-3.3.16.1
-illegal combination of pointer and integer
-Assigning an integral expression to a pointer is a bad practice.
-Type for %s is incompatible with %s
-Incompatible types can be resolved by casting or by other means.
-3.1.2.6
-Bad operand type for += or -=
-3.3.16.2(26)
-A case or default label appears outside a switch statement
-A case or default label shall appear only in a switch statement.
-3.6.1
-The controlling expression of the if statement is not scalar type
-The controlling expression of an if statement shall have scalar type.
-3.6.4.1
-The controlling expression of switch statement is not integral type
-The controlling expression of an switch statement shall have integral type.
-3.6.4.2(20)
-The case label is not an integral constant expression
-The case label shall be an integral constant expression.
-3.6.4.2(22)
-Duplicate case label in the same switch statement
-No two of the case constant expressions in the same switch statement
-shall have the same value after conversion.
-3.6.4.2(22)
-More than one default label in the same switch statement
-There may be at most one default label in a switch statement.
-3.6.4.2(23)
-The controlling expression of the iteration statement is not scalar
-type
-The controlling expression of a iteration statement shall have scalar
-type.
-3.6.5.1
-label '%s' used, but not defined
-The identifier in a goto statement shall name a label located
-somewhere in the enclosing function.
-3.6.6.1
-A continue statement shall appear only in or as a loop body
-3.6.6.2
-A break statement shall appear only in or as a switch body or loop body
-3.6.6.3
-A return statement with an expression should not appear
-in a function '%s', whose return type is void
-3.6.6.4(24)
-A return statement without an expression appears in a
-function '%s', whose return type is not void
-If a return statement without an expression is executed, and the value
-of the function call is used by the caller, the behavior is undefined.
-3.6.6.4(33)
-Internal Error: statement stack underflow
-Long double not supported; double assumed.
-Long float not standard; double assumed.
-Only 'register' allowed in parameter declaration
-The only storage-class specifier that shall occur in a parameter
-declaration is 'register'; illegal storage class ignored.
-3.5.4.3(25)
-Name(s) without types in a function declaration
-An old-style function declaration is not allowed to have names
-in the parameter list; useless names ignored
-3.5.4.3(26)
-Functions cannot return functions
-3.7.1(33), 3.3.2.2
-Functions cannot return a non-object type
-3.3.2.2
-enum declaration must contain enum literals
-Although structs or unions may delay the declaration of their members,
-a similar construction with enum does not exist and is not necessary,
-as there can be no mutual dependencies between the declaration of an
-enumerated type and any other type.
-3.5.2.3(27)
-Register qualification has no effect for this type of object
-Register declarations for array, struct, and function types have
-no effect.
-3.5.1(16), 3.5.1(19)
-Functions cannot be declared 'register'
-The declaration of an identifier for a function that has block
-scope shall have no explicit storage-class specifier other than
-'extern'.
-3.5.1(19)
-'%s' cannot be initialized
-The type of the entity to be initialized shall be an object type
-or an array of unknown size.
-3.5.7(32)
-Cannot initialize 'extern' variable '%s' within a function
-If the declaration of an identifier has block scope, and the
-identifier has 'extern' or 'static' linkage, the declaration
-shall have no initializer for the identifier; initialization
-allowed anyway.
-3.5.7(35)
-initializing an 'extern' is an ANSI C extension
-conflicting declarations for '%s'
-'static' and 'extern' declarations conflict. Which is meant?
-3.1.2.2(15), 3.1.2.2(27)
-Too many initial values for '%s'
-3.5.7(1)
-incompatible types in initialization
-3.3.16(35)
-redefinition of '%s'; previous definition at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-bit-fields as members of a union are an ANSI C invention.
-storage size for '%s' isn't known
-type mismatch in initialization
-Missing braces in a union initialization or illegally formed
-initialization.
-3.5.7(5)
-union '%s' only allowed one initializer for the first member
-3.5.7(5)
-width of '%s' exceeds its type
-the specified bitfield width is too large to be contained within a
-bitfield type.
-structure has no member named '%s'
-This is allowed for compatibility with AT&T pcc-based compilers.
-Reference of an expression of void type or an incomplete type.
-3.2.2.1
-element size of an array shall not be zero
-3.2.2.5(25)
-invalid combination of type specifiers
-Although order is unimportant, not all type specifiers can occur together.
-3.5.2
-declaration must at least declare an identifier, tag, or the member of an enumeration
-3.5(16)
-at most one storage class may be given in the declaration
-Duplicate occurrence ignored.
-3.5.1(10)
-size of function's return type is zero
-The return type of a function must be void or an object type other than array.
-3.7.1(33)
-Expecting an integral return type from the main function
-identifier missing from parameter declaration
-Prototypes for function definitions require identifiers in parameter
-declarations.
-3.7.1(4)
-only 'register' allowed for storage class for parameters
-The declarations in the declaration list shall contain no storage class
-other than 'register', and no initializations.
-3.7.1(10)
-parameters declarations can not have initializations
-3.7.1(10)
-only one instance of 'void' allowed in the parameter list
-'void' must occur by itself (specifying that the function has no parameters).
-3.5.4.3(1)
-%s must have function type
-1) An argument list must be explicitly present in the declarator; it cannot
- be inherited from a typedef (3.5.4.3).
-2) The declarator is not a function.
-3.7.1(30)
-Illegal hexadecimal constant
-You have no digits after the 0x or 0X. 0x0 assumed.
-3.1.3.2
-value overflows its type in this context. Value is set to be '%s'!
-3.2.1.4
-value is outside range representable for type '%s'
-missing member name
-K&R mode permits a missing member name; otherwise, only bitfields can omit
-the member name.
-3.5.2.1(10)
-useless keyword or type name in declaration
-Type was ignored.
-'%s' declared within and is limited to this function prototype
-Possible program error, since parameter type checking will always fail
-unless the type declaration is visible to the caller.
-3.1.2.1(35)
-Extra spaces within operator, %s assumed
-In ANSI C, the compound assignment operator cannot have embedded
-white space characters.
-3.1.5
-missing size for array '%s'
-Incomplete types permitted for identifiers with internal or
-external linkage, but not automatic linkage.
-3.1.2.5(10)
-can't jump into (from outside of) the body of a 'try' or into either type of handler
-'%s' missing, please #include excpt.h
-excpt.h required to declare exception statements, intrinsics or compiler
-runtime names.
-local function declarations cannot be 'static'
-A function declaration can only contain the storage-class 'static'
-if it is at file scope. Declaration made 'extern'.
-3.5.1(19)
-static function '%s' declared and referenced, but not defined.
-If an identifier declared with internal linkage is used in an
-expression (other than as a part of the operand of a sizeof
-operator), there shall be exactly one external definition for
-the identifier in the translation unit.
-3.7(12)
-pragma argument '%s' must be declared prior to being used in a pragma
-Pragma name ignored.
-Pragma not supported
-'%s' not enabled as intrinsic
-It may have already appeared in a function pragma, or never occurred in
-an intrinsic pragma.
-'%s' is already enabled as an intrinsic
-weak definition for '%s' is later redefined; pragma weak ignored.
-definition of primary name '%s' not found; pragma weak ignored.
-definition of secondary name '%s' not found; pragma weak ignored.
-primary name '%s' is declared as a common or external, and is not defined
-with initial value within this file; pragma weak ignored.
-useless '%s' storage class ignored
-array of functions not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-array of voids not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-argument for pragma pack must be an integer constant; pragma ignored
-'%s' has wrong tag type.
-Identifier redeclared in the same scope/block.
-3.1.2.3
-missing dimension bound
-For multidimensional arrays, the constant bounds of the array may be
-omitted only for the first member of the sequence.
-3.1.2.5(23)
-Internal error in parameters to function substr; loc: '%s'; len: '%s'.
-Internal error in parameters to function insertstr; indx: '%s'.
-Internal error in function get_tag_name; input is a non-tagged type.
-Internal error in function gen_type_str -- not a type tree '%s'
-Cannot open file '%s'
-Prototype should be moved after tag or a typedef declaration.
-Please look for comments in the extracted header file.
-The extracted header file includes prototypes for static functions,
-which should be removed, if you wish to include the header in a source file
-other than the originator.
-ANSI C requires formal parameter before "..."
-This extension is meant to be used for compatibility with varargs.h
-3.5.4.3(35)
-syntax error: "&..." invalid
-extension used to access "..." formal arguments.
-function '%s' initialized like a variable
-The type of entity to be initialized shall be an object type or an
-array of unknown size.
-3.5.7(31)
-initializer not an array aggregate
-The initializer for an object that has aggregate type shall be a
-brace-enclosed list of initializers for the members of the aggregate,
-written in increasing subscript or member order.
-3.5.7(20)
-'%s' type is incomplete; cannot initialize
-Was the struct ever defined?
-3.5.7.(31)
-'%s' is not standard ANSI.
-This keyword/type is not defined in strict ANSI mode.
-3.1.1
-not a legal asm string
-The first operand of an asm string should be, after argument substitution,
-a legal assembly string.
-The -float option will be ignored in ANSI mode.
-The -float option is ignored, since otherwise program semantics would
-violate the ANSI standard. In particular, fp constants are always
-'double' with ANSI-C, while with -float the type of fp constants will
-depend on the context and may be 'float'.
-ANSI C support unavailable with C compiler bundled with RISC/os
-The C compiler bundled with RISC/os does not support ANSI C. ANSI
-C support requires a separate license.
-Ignored invalid warning number(s) in -woff option, %s%s !
-Warning numbers must be in the range %s to %s.
-The set of warning numbers in cfe is disjoint from the set of warning numbers
-in accom, since accom warnings cannot be mapped one-to-one to cfe warnings.
-'%s' not handled as an intrinsic due to incompatible argument types .
-'__unalign' only qualifies pointers
-'__unalign' indicates the object pointed at by pointer is unaligned (e.g.,
-int * __unalign p). This is an extension to ANSI C and like 'volatile'
-and 'const' can follow the '*' in pointer declarations, but unlike both
-cannot qualify a base type.
-index expression is an anachronism
-ANSI C++ doesn't support array index expressions in delete.
-5.3.4
-member cannot be of function or incomplete type.
-3.5.2.1(12)
-Illegal lint option, '%s', is ignored.
-cannot open header message buffer file
-cannot write header message buffer file
-cannot read header message buffer file
-cannot seek in header message buffer file
-struct/union/enum '%s' is used, but not defined
-static '%s' unused
-nonportable character comparison (chars may be signed or unsigned)
-redundant comparison of unsigned with constant expression
-redundant statement, control flow cannot reach this statement
-'%s' may be used before set
-function parameter '%s' is not used in function '%s'
-'%s' can be const qualified, since it is not set within its lifetime.
-'%s' is not used in function '%s'
-'%s' set but unused in function '%s'
-control may fall through %s statement
-function '%s' has return(e); and return;
-function '%s' may return random value to place of invocation %s
-label without goto: '%s'
-width of %s constant is smaller than size of type (%s)
-explicit conversion from '%s' to '%s' %s
-implicit conversion from '%s' to '%s' %s
-'%s' may be indistinguishable from '%s' due to internal name truncation
-Promoted formal parameter and promoted argument have incompatible types
-No prototype for the definition of '%s' %s
-References to '%s' are substituted by its literal initializer
- (as included in %s)
-==============
-unsupported language linkage
-string-literal specifies an unsupported linkage
-7.4(1)
-No prototype for the call to %s
-To achieve better type-checking, there should be a full prototype for
-the function being called.
-3.5.4.3
-'inline' only applies to function declarations
-leave statment can occur only within try body
-Microsoft extension
-Use of a Microsoft extension detected without usage of the
-compiler option -msft.
-No parameter mentioned
-A file with no declarations or definitions is accepted as an extension to ANSI C
-The translation unit must contain at least one external definition.
-3.7
-Incompatible signed and unsigned version of a type
-Yacc initialization error
-Internal error: yacc cannot initialize itself.
-The cfe option %s may not be in future releases. We suggest that you not use this option!
-Incompatible char and unsigned char versions of a type
-Lshift with undefined behaviour.
-Lshift with a negative right operand, or a right operand that is greater
-than or equal to the width in bits of the promoted left operand, results
-in undefined behaviour.
-3.3.7(11)
-useless type name in declaration, possibly a semicolon is missing.
-Type was ignored.
-constant initializer expression is invalid (refers to automatic variables).
-All the expressions in an initializer for an object that has static storage
-duration or in the initializer list for an object that has aggregate or
-union type shall be constant expressions. Otherwise, unexpected results
-may occur.
-3.5.7(32) and 3.4
-invalid explicit or implicit conversion of an address constant to an integral value in a constant initializing expression.
-An address constant in a constant initializing expression can neither
-initialize a bit-field nor be directly or indirectly converted to an
-integral type of size different from an address type.
-6.4
diff --git a/tools/ido_recomp/linux/5.3/ugen b/tools/ido_recomp/linux/5.3/ugen
deleted file mode 100755
index d356300bfc..0000000000
Binary files a/tools/ido_recomp/linux/5.3/ugen and /dev/null differ
diff --git a/tools/ido_recomp/linux/5.3/ujoin b/tools/ido_recomp/linux/5.3/ujoin
deleted file mode 100755
index 5a3162799e..0000000000
Binary files a/tools/ido_recomp/linux/5.3/ujoin and /dev/null differ
diff --git a/tools/ido_recomp/linux/5.3/uld b/tools/ido_recomp/linux/5.3/uld
deleted file mode 100755
index a65a2239ba..0000000000
Binary files a/tools/ido_recomp/linux/5.3/uld and /dev/null differ
diff --git a/tools/ido_recomp/linux/5.3/umerge b/tools/ido_recomp/linux/5.3/umerge
deleted file mode 100755
index 36fa5ac6e6..0000000000
Binary files a/tools/ido_recomp/linux/5.3/umerge and /dev/null differ
diff --git a/tools/ido_recomp/linux/5.3/uopt b/tools/ido_recomp/linux/5.3/uopt
deleted file mode 100755
index f446420873..0000000000
Binary files a/tools/ido_recomp/linux/5.3/uopt and /dev/null differ
diff --git a/tools/ido_recomp/linux/5.3/usplit b/tools/ido_recomp/linux/5.3/usplit
deleted file mode 100755
index 5aa4151ed4..0000000000
Binary files a/tools/ido_recomp/linux/5.3/usplit and /dev/null differ
diff --git a/tools/ido_recomp/linux/7.1/as0 b/tools/ido_recomp/linux/7.1/as0
deleted file mode 100755
index 1a69a14a5b..0000000000
Binary files a/tools/ido_recomp/linux/7.1/as0 and /dev/null differ
diff --git a/tools/ido_recomp/linux/7.1/as1 b/tools/ido_recomp/linux/7.1/as1
deleted file mode 100755
index 047cfdd7fd..0000000000
Binary files a/tools/ido_recomp/linux/7.1/as1 and /dev/null differ
diff --git a/tools/ido_recomp/linux/7.1/cc b/tools/ido_recomp/linux/7.1/cc
deleted file mode 100755
index 61c43ede1a..0000000000
Binary files a/tools/ido_recomp/linux/7.1/cc and /dev/null differ
diff --git a/tools/ido_recomp/linux/7.1/cfe b/tools/ido_recomp/linux/7.1/cfe
deleted file mode 100755
index 75235c1125..0000000000
Binary files a/tools/ido_recomp/linux/7.1/cfe and /dev/null differ
diff --git a/tools/ido_recomp/linux/7.1/err.english.cc b/tools/ido_recomp/linux/7.1/err.english.cc
deleted file mode 100644
index b5d5be36ef..0000000000
--- a/tools/ido_recomp/linux/7.1/err.english.cc
+++ /dev/null
@@ -1,1260 +0,0 @@
-@
- 358 358 358
- 6464 6482 6553
- 6553 6593 6728
- 6728 6746 6803
- 6803 6808 6808
- 6808 6818 6818
- 6818 6826 6826
- 6826 6847 6847
- 6847 6875 6922
- 6922 6930 6930
- 6930 6939 6939
- 6939 6948 6948
- 6948 6974 7120
- 7120 7149 7204
- 7210 7248 7311
- 7317 7350 7442
- 7450 7497 7627
- 7635 7709 7930
- 7938 7975 8063
- 8071 8113 8253
- 8261 8289 8289
- 8298 8338 8445
- 8460 8502 8635
- 8650 8690 8819
- 8834 8857 8965
- 8965 9008 9113
- 9119 9142 9227
- 9235 9282 9451
- 9451 9462 9462
- 9462 9477 9477
- 9477 9497 9497
- 9497 9545 9545
- 9545 9584 9584
- 9584 9604 9662
- 9662 9682 9720
- 9720 9749 9749
- 9749 9788 9788
- 9788 9802 9802
- 9802 9829 9829
- 9829 9861 9861
- 9861 9904 9904
- 9904 9920 9920
- 9920 9962 9962
- 9962 9988 9988
- 9988 10014 10014
-10014 10035 10035
-10035 10054 10097
-10097 10115 10115
-10115 10147 10147
-10147 10183 10183
-10183 10208 10208
-10208 10236 10236
-10236 10269 10269
-10269 10304 10304
-10304 10328 10328
-10328 10351 10351
-10351 10371 10371
-10371 10402 10402
-10402 10447 10447
-10447 10497 10497
-10497 10533 10533
-10533 10598 10598
-10606 10630 10630
-10640 10671 10671
-10690 10719 10719
-10728 10752 10795
-10795 10837 10837
-10837 10876 10876
-10876 10900 10900
-10900 10948 10948
-10960 11021 11103
-11103 11128 11128
-11128 11153 11153
-11153 11216 11216
-11216 11239 11239
-11239 11303 11303
-11303 11347 11347
-11357 11393 11393
-11393 11432 11432
-11442 11494 11494
-11494 11536 11536
-11536 11595 11595
-11595 11622 11622
-11622 11684 11684
-11684 11726 11726
-11738 11778 11778
-11782 11813 11813
-11813 11850 11850
-11850 11900 12087
-12111 12120 12120
-12120 12129 12129
-12129 12158 12158
-12158 12192 12192
-12192 12237 12237
-12237 12273 12273
-12273 12326 12326
-12330 12366 12366
-12366 12423 12423
-12427 12482 12482
-12486 12560 12560
-12568 12631 12631
-12637 12691 12691
-12691 12743 12743
-12743 12785 12785
-12785 12826 12826
-12826 12865 12865
-12865 12883 12883
-12883 12946 12946
-12956 12995 12995
-13005 13066 13066
-13077 13163 13163
-13163 13211 13211
-13211 13270 13270
-13270 13318 13318
-13318 13350 13350
-13350 13387 13387
-13387 13428 13428
-13428 13464 13533
-13533 13580 13737
-13737 13776 13854
-13854 13913 13913
-13913 13950 13950
-13950 14118 14118
-14118 14150 14150
-14150 14163 14194
-14194 14224 14255
-14255 14275 14319
-14319 14353 14458
-14466 14484 14530
-14534 14567 14567
-14567 14635 14682
-14690 14742 14742
-14742 14789 14789
-14801 14875 14875
-14886 14947 14947
-14947 14992 14992
-14992 15035 15085
-15085 15134 15205
-15214 15267 15448
-15454 15496 16810
-16822 16875 16960
-16972 17053 17179
-17191 17236 17332
-17344 17491 17841
-17853 17939 18304
-18316 18471 18774
-18786 18952 19323
-19335 19364 19496
-19500 19527 19598
-19598 19613 19776
-19797 19808 19837
-19837 19862 19862
-19868 19927 20026
-20034 20075 20179
-20187 20223 20223
-20223 20290 20382
-20392 20441 20589
-20601 20656 20656
-20656 20699 20818
-20826 20860 21038
-21046 21094 21191
-21203 21236 21314
-21326 21395 21457
-21469 21502 21502
-21502 21587 21731
-21756 21789 21864
-21875 21901 21976
-22013 22059 22220
-22257 22397 22561
-22561 22595 22595
-22603 22623 22623
-22631 22667 22828
-22865 22919 22994
-23031 23059 23120
-23132 23201 23201
-23212 23274 23274
-23285 23345 23345
-23356 23393 23393
-23399 23431 23532
-23542 23587 23646
-23656 23697 23745
-23755 23796 23844
-23854 23876 23928
-23942 23971 24153
-24160 24243 24243
-24247 24273 24743
-24755 24784 24984
-24996 25034 25034
-25034 25075 25273
-25281 25332 25410
-25420 25467 25544
-25554 25583 25744
-25754 25783 26061
-26071 26111 26185
-26194 26239 26525
-26535 26568 26914
-26924 26951 26998
-27008 27035 27082
-27093 27120 27167
-27178 27206 27251
-27261 27289 27334
-27345 27391 27931
-27938 27959 28007
-28019 28037 28037
-28043 28069 28069
-28077 28147 28199
-28207 28266 28266
-28274 28306 28306
-28314 28339 28339
-28347 28404 28510
-28518 28567 28682
-28690 28728 28728
-28736 28782 29023
-29033 29085 29234
-29246 29303 29383
-29395 29432 29570
-29592 29631 29644
-29644 29693 29758
-29767 29810 29875
-29875 29911 29976
-29984 30014 30014
-30027 30086 30151
-30157 30223 30293
-30301 30369 30445
-30457 30511 30568
-30580 30630 30743
-30755 30812 30874
-30886 30959 31035
-31043 31076 31175
-31183 31243 31243
-31251 31323 31323
-31331 31433 31433
-31445 31544 31686
-31698 31740 31740
-31740 31783 31783
-31783 31824 31824
-31824 31873 31996
-32008 32056 32164
-32176 32210 32210
-32229 32271 32271
-32279 32323 32569
-32581 32642 32718
-32739 32779 32916
-32926 32953 33047
-33057 33116 33315
-33325 33373 33373
-33373 33407 33469
-33494 33527 33527
-33536 33573 33573
-33584 33650 33697
-33705 33763 33763
-33763 33797 33797
-33797 33829 33906
-33915 33976 33976
-33985 34016 34098
-34098 34133 34198
-34198 34261 34261
-34269 34312 34312
-34324 34363 34438
-34444 34530 34530
-34538 34596 34626
-34636 34675 34754
-34764 34821 34821
-34821 34867 34950
-34959 35016 35135
-35145 35198 35198
-35208 35266 35344
-35355 35382 35537
-35547 35576 35629
-35637 35705 35705
-35713 35764 35764
-35764 35784 35876
-35888 35932 35950
-35950 36013 36138
-36150 36191 36280
-36286 36314 36419
-36431 36516 36516
-36516 36554 36642
-36642 36689 36808
-36818 36881 37105
-37113 37183 37204
-37204 37225 37225
-37225 37255 37348
-37348 37388 37388
-37388 37454 37454
-37454 37518 37518
-37518 37584 37584
-37584 37717 37717
-37717 37752 37752
-37752 37783 37889
-37901 37928 38034
-38046 38115 38115
-38115 38140 38187
-38195 38219 38339
-38351 38422 38422
-38422 38486 38486
-38486 38555 38555
-38555 38619 38619
-38619 38641 38641
-38641 38758 38758
-38758 38929 38929
-38929 38975 39043
-39055 39084 39133
-39133 39175 39265
-39275 39310 39494
-39504 39547 39576
-39587 39614 39668
-39674 39697 39797
-39797 39845 40094
-40094 40158 40264
-40264 40369 40523
-40523 40593 40593
-40593 40629 40876
-40876 40911 40971
-40977 41026 41026
-41038 41077 41077
-41077 41116 41116
-41116 41156 41156
-41156 41195 41195
-41195 41237 41237
-41237 41285 41285
-41285 41304 41304
-41304 41371 41371
-41371 41429 41429
-41429 41491 41491
-41491 41519 41519
-41519 41572 41572
-41572 41642 41642
-41642 41676 41676
-41676 41713 41713
-41713 41751 41751
-41751 41792 41792
-41792 41856 41856
-41856 41881 41881
-41881 41944 41944
-41944 41985 41985
-41985 42026 42026
-42026 42098 42098
-42098 42170 42170
-42170 42213 42213
-42213 42275 42275
-42275 42302 42302
-42302 42317 42317
-42317 42346 42394
-42401 42433 42530
-42538 42585 42585
-42585 42631 42631
-42631 42651 42733
-42733 42756 42756
-42756 42837 42905
-42909 42960 42960
-42960 42986 43033
-43033 43124 43124
-43124 43179 43179
-43179 43212 43384
-43394 43461 43479
-43479 43555 43788
-43806 43929 44124
-44128 44128 44128
-Out of memory: %s
-There is no more memory left in the system for compiling this program.
-Internal Error Unknown Error Message %s
-1) An internal error, while attempting to print an unavailable message
-2) The error message file is inaccessible or has other problems
-Unknown Signal %s
-1) An unknown signal has been caught
-2) 2 Nested signals
-line
-Warning:
-Fatal:
-Source not available
-Too many errors... goodbye.
-There is a limit of 30 errors before aborting.
-Error:
-reserved
-reserved
-Unknown Control Statement
-1) The line begins with a '#' and is not of the form:
- # ""
-2) Please compile this program with the preprocessor enabled.
-Unknown character %s ignored
-The character is not part of the source character set.
-2.2.1
-Unknown control character \%s ignored
-The control character is not part of the source character set.
-2.2.1
-Illegal character %s in exponent
-1) Digits or sign expected after 'e' or 'E'.
-2) Digits are expected after sign in exponent.
-3.1.3.1
-Constant is out of range and may be truncated.
-The constant is too large to be accurately represented and may be
-truncated. The limits are in the system include file limits.h.
-2.2.4.2
-Constant is out of range for a 32-bit data type, but accepted as written.
-The constant is too large to fit in a 32-bit data type, but will be
-accurately represented in a wider data type. The value may be truncated,
-depending on its context. The limits are in the system include file
-limits.h.
-2.2.4.2
-Character constant size out of range
-1) No characters in a character constant.
-2) More than 4 bytes in a character constant.
-3.1.3.4
-Wide character constant size out of range
-1) No characters in the multibyte sequence (0 assumed).
-2) More than 1 byte in the multi-byte sequence (only the first byte was converted).
-3.1.3.4
-Invalid multibyte character
-4.10.7.2
-Newline in string or character constant
-1) Terminate your string or character constant with closing quotes.
-2) Put a backslash before the newline.
-3.1.3.4, 3.1.4
-Octal character escape too large: %s > %s
-1) Terminate end of octal sequence with a non-octal character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Hex character escape too large: %s > %s
-1) Terminate end of hex sequence with a non-hex character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Unexpected End-of-file
-1) Unterminated string or character constant
-2) Missing closing comment marker (*/)
-3) File system problems
-Unrecognized escape sequence in string \%s
-Recognized escape sequences are \a, \b, \f, \n, \r, \t, and \v.
-Character will be treated as un-escaped.
-3.9.2
-Illegal octal digit %s
-Octal constants, beginning with 0, must only have digits between 0 and 7,
-inclusive.
-3.1.3.2
-Unable to open temporary file for compiling %s
-1) TMPDIR environment variable is set to a directory that you have no
- permissions for.
-2) The file system is full.
-3) System errors beyond the scope of the compiler.
-%s: Hangup
-%s: Interrupt
-%s: Quit (ASCII FS)
-%s: Illegal instruction (not reset when caught)
-%s: Trace trap (not reset when caught)
-%s: IOT instruction
-Also SIGABRT, used by abort, replace SIGIOT in the future
-%s: EMT instruction
-Also SIGXCPU, Exceeded CPU time limit
-%s: Floating point exception
-%s: Kill (cannot be caught or ignored)
-%s: Bus error
-%s: Segmentation violation
-%s: Bad argument to system call
-%s: Write on a pipe with no one to read it
-%s: Alarm clock
-%s: Software termination signal from kill
-%s: User defined signal 1
-%s: User defined signal 2
-%s: Death of a child
-Power-fail restart
-%s: Also SIGXFSZ, exceeded file size limit
-%s: Window change
-%s: Handset, line status change
-%s: Sendablestop signalnot from tty
-%s: Stop signal from tty
-%s: Pollable event occurred
-%s: Input/Output possible signal
-%s: Urgent condition on IO channel
-%s: Window size changes
-%s: Virtual time alarm
-%s: Profiling alarm
-%s: Continue a stopped process
-%s: To readers pgrp upon background tty read
-%s: Like TTIN for output if (tp->t_local<OSTOP)
-%s: Resource lost (eg, record-lock)
-'auto' and 'register' are not allowed in an external declaration
-3.7(10)
-must have function type
-3.7.1(30)
-Functions cannot return arrays
-3.7.1(33), 3.3.2.2
-Declaration list not allowed
-3.7.1(5)
-Too many input files %s
-The command line may contain only one file
-cpp internal error: input stack underflow
-cpp internal error: if stack underflow
-Cannot open the file %s
-No new-line character at the end of the file %s
-2.1.1.2(30)
-Fatal: Exceeded the limit of nesting level for #include file
-Fatal: Exceeded the limit of nesting level for #include file. This limit
-is 200.
-Fail to read the file %s
-Cannot write the file %s
-%s: %s: An if directive is not terminated properly in the file
-%s: %s: nested comment
-%s:%s: Illegal macro name %s; macro name shall be an identifier
-%s:%s: Illegal preprocessing token sequence
-3.8.3(35)
-%s:%s: Illegal macro parameter name
-%s:%s: Non-unique macro parameter name
-3.8.3(18)
-%s:%s: Missing ')' in parameter list for #define %s
-%s:%s: Missing ')' in macro instantiation
-%s:%s: Bad punctuator in the parameter list for #define %s
-%s:%s: Macro %s redefined.
-%s:%s: # operator should be followed by a macro argument name
-%s:%s: Badly formed constant expression%s
-3.4(9), 3.8
-%s:%s: Division by zero in #if or #elif
-3.8
-unknown command line option %s
-extraneous input/output file name %s
-%s: %s: Unterminated string or character constant
-A preprocessing string or character constant token was not
-terminated. Note that preprocessing directives are processed
-after the source file has been divided into preprocessing tokens.
-2.1.1.2(30) 3.1(18) 3.8
-%s: %s:
-%s: %s:
-%s: %s: Unterminated comment
-%s: %s: Unknown directive type %s
-%s: %s: #elif or #else after #else directive
-%s: %s: Bad identifier after the %s
-%s: %s: #%s accepts only one identifier as parameter
-3.8
-%s: %s: Bad identifier after the %s
-%s: %s: text following #%s violates the ANSI C standard.
-3.8
-%s: %s: Bad character %s occurs after the # directive.
-3.8
-%s: %s: the ## operator shall not be the %s token in the replacement list
-3.8.3.3
-%s: %s: the defined operator takes identifier as operand only.
-3.8.1
-%s: %s: Not in a conditional directive while using %s
-%s: %s: Illegal filename specification for #include
-%s: %s: Invalid file name %s for #include
-%s: %s: Cannot open file %s for #include
-%s: %s: Bad argument for #line command
-%s: %s: #error %s
-%s: %s: Tried to redefine predefined macro %s, attempt ignored
-3.8.7(22)
-%s: %s: Undefining predefined macro %s
-3.8.7(22)
-%s: %s: Undefined the ANSI standard library defined macro %s
-4.1.2.1(9)
-%s: %s: The number of arguments in the macro invocation does not match the definition
-%s: %s: Illegal character %s in preprocessor if
-%s: %s: Illegal character %s for number in preprocessor if
-%s: %s: No string is allowed in preprocessor if
-%s: %s: Not supported pragma %s
-%s: %s: Not supported #pragma format
-%s: %s: ANSI C does not allow #ident; %s
-%s: %s: Not supported #ident format
-This cpp extension accepts the following format:
-#ident "any string"
-%s: %s: Not supported #assert/#unassert format
-This cpp extension accepts the following format:
-#assert identifier
-#assert identifier ( pp-tokens )
-#unassert identifier
-#unassert identifier ( pp-tokens )
-%s: %s: Bad assertion predicate format
-The correct syntax for this cpp extension is:
-#assert identifier ( pp-token )
-%s: %s: directive is an upward-compatible ANSI C extension
-%s: This option requires an argument
-%s: %s: A macro has expanded recursively more than %s times. Further expansion will be disabled! Use command-line option: -Wp,-max_rec_depth=depth to recurse deeper.
-A status return from cpp to cfe
-Syntax Error
-The token read was unexpected.
-Syntax Error -- cannot backup
-The token read was unexpected.
-Yacc stack overflow
-The expression is too complicated to parse.
-Trailing comma in enumerator list
-The use of a trailing comma in an enumerator list is not standard C. There
-may be portability problems.
-3.5.2.2
-Empty declaration
-Empty declarations are invalid in standard C.
-3.5
-%s declared, but not referenced.
-redeclaration of '%s'; previous declaration at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-'%s' undefined; reoccurrences will not be reported.
-Non-function name referenced in function call.
-3.3.2.2(18)
-The number of arguments doesn't agree with the number in the declaration.
-3.3.2.2(5)
-'%s' section name longer than 8 characters. Name truncated.
-'%s' is already placed by pragma alloc_text.
-Cannot write ucode file while compiling %s
-1) The file system is full
-2) Permissions problem
-Must have corresponding formal argument for '%s'
-Parameter found in the declaration part, but not in the argument list.
-3.7.1(7)
-Non-prototype declaration is an obsolescent feature.
-The use of function definitions with separate parameter identifier
-and declaration lists (not prototype-format parameter type and
-identifier declarators) is an obsolescent feature.
-3.9.5
-Incompatible function declarations for %s
-For two function types to be compatible, both shall specify compatible
-return types. Moreover, the parameter type lists, if both are present,
-shall agree in the number of parameters and in use of the ellipsis
-terminator; corresponding parameters shall have compatible types. If
-one type has a parameter type list and the other type is specified by
-a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions. If one type has a parameter type list and the
-other is specified by a function definition that contains a (possibly
-empty) identifier list, both shall agree in the number of parameters,
-and the type of each prototype parameter shall be compatible with the
-type that results from application of the default argument promotions
-to the type of the corresponding identifier. (For each parameter
-declared with function or array type, its type for these comparisons
-is the one that results from conversion to a pointer type. For each
-parameter declared with qualified type, its type for these comparisons
-is the unqualified version of its declared type.) There you have it!
-3.5.4.3(15)
-Incompatible function return type for this function.
-For two function types to be compatible, both shall specify compatible
-return types.
-3.5.4.3(15)
-The number of parameters for function is different from the previous declaration
-The parameter type lists, if both are present, shall agree in the
-number of parameters and in use of the ellipsis terminator.
-3.5.4.3(15)
-Incompatible type for the function parameter
-If both parameter type lists are present, corresponding
-parameters shall have compatible types.
-3.5.4.3(15)
-Function %s is redeclared with an incompatible argument type (after default argument promotion), which could lead to undefined run-time behaviour.
-The redeclaration could cause arguments at a call site to be passed
-inconsistently with what the function implementation expects, and
-parameters would therefore be accessed erroneously when executing the
-function body. Note that a float argument is promoted to a double
-when passed (potentially through fp registers) to an unprototyped
-function.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, ellipsis terminator not allowed
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the type of each parameter shall be
-compatible with the type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype declaration and non-prototype definition found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other is specified by a
-function definition that contains a (possibly empty) identifier list,
-both shall agree in the number of parameters, and the type of each
-prototype parameter shall be compatible with the type that results
-from application of the default argument promotions to the type of the
-corresponding identifier.
-3.5.4.3(15)
-Empty declaration specifiers
-Standard C requires at least a storage class specifier, type specifier,
-or a type qualifier in declarations. 'extern int' assumed.
-3.5
-Can't write to the file %s
-1) The output file cannot be opened for writing.
-2) Out of file space.
-Duplicate '%s'
-typedef, extern, static, auto, register, const, volatile may not
-appear more than once in the same specifier list or qualifier list.
-Duplicate occurrence ignored.
-3.5.1(10) , 3.5.3(5)
-Null input
-There is nothing to compile.
-Illegal type combination
-3.5.2
-Missing ';' at end of structure / union member declaration
-In standard C, each member declaration must be terminated by a ';'. A
-terminating ';' is assumed.
-3.5.2.1
-Missing member name in structure / union
-In standard C, each member declaration have a member name. The missing
-member is assumed to not exist.
-3.5.2.1
-This variable is initialized twice.
-Neither 'const' or 'volatile' have any effect on function results.
-Qualifiers only apply to expressions designating an object that
-can be altered or examined.
-3.5.3(10)
-An integer constant expression is required here.
-The expression that defines the value of an enumeration constant
-shall be an integral constant expression that has a value
-representable as an int.
-3.5.2.2(28)
-(previous declaration of '%s' at line %s in file '%s')
-Must be an integer type greater than zero.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-Array size cannot be a long long.
-Arrays with more than 2^32 elements are not yet supported.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-bit-field '%s' width is not an integer constant
-The expression that specifies the width of a bit-field shall be an
-integral constant expression.
-3.5.2.1(15)
-bit-field '%s' width is negative
-The expression that specifies the width of a bit-field shall be
-non-negative.
-3.5.2.1(15)
-bit-field '%s' type required to be int, unsigned int, or signed int.
-A bit-field shall have type int, unsigned int, or signed int.
-3.5.2.1(30)
-bit-field %s's type not integer.
-Non-scalar type or pointer type to a non-object for increment or decrement operator.
-The operand of the prefix/postfix increment or decrement operator shall have scalar type; if it is of pointer type, it must point to an object.
-3.3.2.4(37), 3.3.3.1(25)
-Assign value to a function type.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.2.2.1(5)
-Assign value to an array.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for variable of incomplete type.
-The operand of increment and decrement operator shall be a modifiable
-scalar lvalue. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-The left-hand side of the '.' operator must be an addressable lvalue, when a bit-field is not contained within a unit of 32 bits alignment.
-This is a restriction in our implementation, which can be worked
-around by always accessing long long bit-fields indirectly (i.e.
-by means of the '->' operator).
-This expression is not an lvalue.
-3.2.2.1
-Modified an rvalue.
-3.2.2.1
-Change value for constant variable.
-The operand of increment and decrement operators shall be modifiable
-scalar lvalues. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for constant field of a struct or union.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Dereferenced a non-pointer.
-The operand of the unary * operator shall have pointer type.
-3.3.3.2(39)
-The operand of the unary + or - operator shall have arithmetic type.
-3.3.3.3(6)
-The operand of the unary ~ operator shall have integral type.
-3.3.3.3(6)
-The operand of the unary ! operator shall have scalar type.
-3.3.3.3(6)
-Constants must have arithmetic type.
-3.1.3
-Bad type name for cast operator
-The type name for the cast operator should either be void or a
-qualified or unqualified scalar type.
-3.3.4(22)
-Improper cast of non-scalar type expression.
-The operand for the cast operator shall be of scalar type.
-3.3.4(23)
-Cast a pointer into a non-integral type.
-A pointer may be converted to an integral type.
-3.3.4(31)
-Cast a non-integral type into a pointer.
-An integral type may be converted to a pointer.
-3.3.4(31)
-Duplicate member '%s'
-Two members of a struct may not have the same name.
-3.1.2.2(7,25)
-Invalid constant expression.
-Constant expressions shall not contain assignment, increment, decrement,
-function-call, or comma operators, except when they are contained within
-the operand of the sizeof operator.
-3.4(9)
-Constant expressions must be derived from a constant value or a constant
-variable.
-3.4
-Dangerous operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier. This operand is NOT an lvalue, but we let it pass.
-Note that a segmentation error with possible core dump will result
-when the resulting address does not denote a valid (declared)
-storage location. This feature will be discontinued in future
-releases of the compiler!
-3.3.3.2(36)
-Unacceptable operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier.
-3.3.3.2(36)
-'&' before array or function; ignored
-Unacceptable operand of sizeof operator.
-The sizeof operator shall not be applied to an expression that has
-function type or an incomplete type, to the parenthesized name of such
-a type, or to an lvalue that designates a bit-field object.
-3.3.3.4
-Unacceptable operand of a multiplicative operator.
-Each of the operands of a multiplicative operator shall have arithmetic type.
-3.3.5(18)
-Unacceptable operand of the remainder operator
-Each of the operands of the remainder (%) operator shall have integral type.
-3.3.5(18)
-Unacceptable operand of '+'.
-For the + operator, either both operands shall have arithmetic type, or
-one operand shall be a pointer to an object type and the other shall
-have integral type.
-3.3.6(39)
-Unacceptable operand of '-'.
-For the subtraction operator, one of the following shall hold: both operands
-have arithmetic type; operands are pointers to qualified or unqualified
-versions of compatible object types; or the left operand is a pointer
-to an object type and the right operand has integral type.
-3.3.6(39)
-Unacceptable operand of shift operator.
-Each of the operands of bitwise shift operators shall have integral type.
-3.3.7(9)
-Unacceptable operand of relational operator.
-For relational operators, one of the following shall hold: both
-operands have arithmetic type; both operands are pointers to qualified
-or unqualified versions of compatible object types; or both operands
-are pointers to qualified or unqualified versions of compatible
-incomplete types.
-3.3.8(32)
-Unacceptable operand of == or !=
-For the == or != operator, one of the following shall hold: both operands
-are pointers to qualified or unqualified versions of compatible types; one
-operand is a pointer to an object or incomplete type and the other is a
-pointer to a qualified or unqualified version of void; or one operand is
-a pointer and the other is a null pointer constant.
-3.3.9(21)
-Unacceptable operand of &.
-Each of the operands shall have integral type.
-3.3.10(7)
-Unacceptable operand of ^.
-Each of the operands shall have integral type.
-3.3.11(18)
-Unacceptable operand of |.
-Each of the operands shall have integral type.
-3.3.12(30)
-Unacceptable operand of &&.
-Each of the operands shall have scalar type.
-3.3.13(7)
-Unacceptable operand of ||.
-Each of the operands shall have scalar type.
-3.3.14(20)
-Unacceptable operand of conditional operator.
-The first operand of conditional operator shall have scalar type. One
-of the following shall hold for the second and third operands:
-both operands have arithmetic type; both operands have compatible
-structure or union types; both operands have void type; both operands
-are pointers to qualified or unqualified versions of compatible types;
-one operand is a pointer and the other is a null pointer constant; or
-one operand is pointer to an object or incomplete type and the other
-is a pointer to a qualified or unqualified version of void.
-3.3.15
-Duplicate label '%s'
-A label name can only occur once in a function.
-3.1.2.1(25)
-Division by zero.
-3.3.5
-Subscripting a non-array.
-3.3.2.1
-Subscripting an array of incomplete type which is not an object type.
-The element of the array shall have an object type.
-3.3.2.1
-Should only subscript an array with an integral expression
-3.3.2.1
-Subscripting an unbounded array
-3.3.2.1
-Array index out of range
-3.3.2.1
-Selector requires struct/union pointer as left hand side
-In K&R mode the expression is implicitly converted to the '.' selector
-for a struct/union left-hand side.
-3.3.2.3
-Selector requires struct/union as left hand side
-In K&R mode the expression is implicitly converted to the '->' selector
-for a struct/union pointer left-hand side.
-3.3.2.3
-member of structure or union required
-3.3.2.3
-types have different qualifier specifications
-For two qualified types to be compatible, both shall have the
-identically qualified version of a compatible type; qualified
-and unqualified versions of a type are distinct types. For two
-types to be compatible their types must be the same.
-3.5.3(26)
-Incompatible array type due to different array size
-For two array types to be compatible, both shall have compatible element
-types; if both size specifiers are present, they shall have the
-same value.
-3.5.4.2(11)
-Incompatible array type due to incompatible element type
-For two array types to be compatible, both shall have compatible element
-types.
-3.5.4.2(11)
-Incompatible pointer type assignment
-The type pointed to by the left-hand side of simple assignment
-statement is incompatible with the type pointed to by the right-hand side.
-3.3.16.1, 3.5.4.1(21)
-Incompatible base type of pointer type
-K&R feature.
-Type %s of %s is incompatible with type %s of %s
-Incompatible types can be resolved by casting or by other means.
-3.3.16.1
-illegal combination of pointer and integer
-Assigning an integral expression to a pointer is a bad practice.
-Type for %s is incompatible with %s
-Incompatible types can be resolved by casting or by other means.
-3.1.2.6
-Bad operand type for += or -=
-3.3.16.2(26)
-A case or default label appears outside a switch statement
-A case or default label shall appear only in a switch statement.
-3.6.1
-The controlling expression of the if statement is not scalar type
-The controlling expression of an if statement shall have scalar type.
-3.6.4.1
-The controlling expression of switch statement is not integral type
-The controlling expression of an switch statement shall have integral type.
-3.6.4.2(20)
-The case label is not an integral constant expression
-The case label shall be an integral constant expression.
-3.6.4.2(22)
-Duplicate case label in the same switch statement
-No two of the case constant expressions in the same switch statement
-shall have the same value after conversion.
-3.6.4.2(22)
-More than one default label in the same switch statement
-There may be at most one default label in a switch statement.
-3.6.4.2(23)
-The controlling expression of the iteration statement is not scalar
-type
-The controlling expression of a iteration statement shall have scalar
-type.
-3.6.5.1
-label '%s' used, but not defined
-The identifier in a goto statement shall name a label located
-somewhere in the enclosing function.
-3.6.6.1
-A continue statement shall appear only in or as a loop body
-3.6.6.2
-A break statement shall appear only in or as a switch body or loop body
-3.6.6.3
-A return statement with an expression should not appear
-in a function '%s', whose return type is void
-3.6.6.4(24)
-A return statement without an expression appears in a
-function '%s', whose return type is not void
-If a return statement without an expression is executed, and the value
-of the function call is used by the caller, the behavior is undefined.
-3.6.6.4(33)
-Internal Error: statement stack underflow
-Long double not supported; double assumed.
-Long float not standard; double assumed.
-Only 'register' allowed in parameter declaration
-The only storage-class specifier that shall occur in a parameter
-declaration is 'register'; illegal storage class ignored.
-3.5.4.3(25)
-Name(s) without types in a function declaration
-An old-style function declaration is not allowed to have names
-in the parameter list; useless names ignored
-3.5.4.3(26)
-Functions cannot return functions
-3.7.1(33), 3.3.2.2
-Functions cannot return a non-object type
-3.3.2.2
-enum declaration must contain enum literals
-Although structs or unions may delay the declaration of their members,
-a similar construction with enum does not exist and is not necessary,
-as there can be no mutual dependencies between the declaration of an
-enumerated type and any other type.
-3.5.2.3(27)
-Register qualification has no effect for this type of object
-Register declarations for array, struct, and function types have
-no effect.
-3.5.1(16), 3.5.1(19)
-Functions cannot be declared 'register'
-The declaration of an identifier for a function that has block
-scope shall have no explicit storage-class specifier other than
-'extern'.
-3.5.1(19)
-'%s' cannot be initialized
-The type of the entity to be initialized shall be an object type
-or an array of unknown size.
-3.5.7(32)
-Cannot initialize 'extern' variable '%s' within a function
-If the declaration of an identifier has block scope, and the
-identifier has 'extern' or 'static' linkage, the declaration
-shall have no initializer for the identifier; initialization
-allowed anyway.
-3.5.7(35)
-initializing an 'extern' is an ANSI C extension
-conflicting declarations for '%s'
-'static' and 'extern' declarations conflict. Which is meant?
-3.1.2.2(15), 3.1.2.2(27)
-Too many initial values for '%s'
-3.5.7(1)
-incompatible types in initialization
-3.3.16(35)
-redefinition of '%s'; previous definition at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-bit-fields as members of a union are an ANSI C invention.
-storage size for '%s' isn't known
-type mismatch in initialization
-Missing braces in a union initialization or illegally formed
-initialization.
-3.5.7(5)
-union '%s' only allowed one initializer for the first member
-3.5.7(5)
-width of '%s' exceeds its type
-the specified bitfield width is too large to be contained within a
-bitfield type.
-structure has no member named '%s'
-This is allowed for compatibility with AT&T pcc-based compilers.
-Reference of an expression of void type or an incomplete type.
-3.2.2.1
-element size of an array shall not be zero
-3.2.2.5(25)
-invalid combination of type specifiers
-Although order is unimportant, not all type specifiers can occur together.
-3.5.2
-declaration must at least declare an identifier, tag, or the member of an enumeration
-3.5(16)
-at most one storage class may be given in the declaration
-Duplicate occurrence ignored.
-3.5.1(10)
-size of function's return type is zero
-The return type of a function must be void or an object type other than array.
-3.7.1(33)
-Expecting an integral return type from the main function
-identifier missing from parameter declaration
-Prototypes for function definitions require identifiers in parameter
-declarations.
-3.7.1(4)
-only 'register' allowed for storage class for parameters
-The declarations in the declaration list shall contain no storage class
-other than 'register', and no initializations.
-3.7.1(10)
-parameters declarations can not have initializations
-3.7.1(10)
-only one instance of 'void' allowed in the parameter list
-'void' must occur by itself (specifying that the function has no parameters).
-3.5.4.3(1)
-%s must have function type
-1) An argument list must be explicitly present in the declarator; it cannot
- be inherited from a typedef (3.5.4.3).
-2) The declarator is not a function.
-3.7.1(30)
-Illegal hexadecimal constant
-You have no digits after the 0x or 0X. 0x0 assumed.
-3.1.3.2
-value overflows its type in this context. Value is set to be '%s'!
-3.2.1.4
-value is outside range representable for type '%s'
-missing member name
-K&R mode permits a missing member name; otherwise, only bitfields can omit
-the member name.
-3.5.2.1(10)
-useless keyword or type name in declaration
-Type was ignored.
-'%s' declared within and is limited to this function prototype
-Possible program error, since parameter type checking will always fail
-unless the type declaration is visible to the caller.
-3.1.2.1(35)
-Extra spaces within operator, %s assumed
-In ANSI C, the compound assignment operator cannot have embedded
-white space characters.
-3.1.5
-missing size for array '%s'
-Incomplete types permitted for identifiers with internal or
-external linkage, but not automatic linkage.
-3.1.2.5(10)
-can't jump into (from outside of) the body of a 'try' or into either type of handler
-'%s' missing, please #include excpt.h
-excpt.h required to declare exception statements, intrinsics or compiler
-runtime names.
-local function declarations cannot be 'static'
-A function declaration can only contain the storage-class 'static'
-if it is at file scope. Declaration made 'extern'.
-3.5.1(19)
-static function '%s' declared and referenced, but not defined.
-If an identifier declared with internal linkage is used in an
-expression (other than as a part of the operand of a sizeof
-operator), there shall be exactly one external definition for
-the identifier in the translation unit.
-3.7(12)
-pragma argument '%s' must be declared prior to being used in a pragma
-Pragma name ignored.
-Pragma not supported
-'%s' not enabled as intrinsic
-It may have already appeared in a function pragma, or never occurred in
-an intrinsic pragma.
-'%s' is already enabled as an intrinsic
-weak definition for '%s' is later redefined; pragma weak ignored.
-definition of primary name '%s' not found; pragma weak ignored.
-definition of secondary name '%s' not found; pragma weak ignored.
-primary name '%s' is declared as a common or external, and is not defined
-with initial value within this file; pragma weak ignored.
-useless '%s' storage class ignored
-array of functions not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-array of voids not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-argument for pragma pack must be an integer constant; pragma ignored
-'%s' has wrong tag type.
-Identifier redeclared in the same scope/block.
-3.1.2.3
-missing dimension bound
-For multidimensional arrays, the constant bounds of the array may be
-omitted only for the first member of the sequence.
-3.1.2.5(23)
-Internal error in parameters to function substr; loc: '%s'; len: '%s'.
-Internal error in parameters to function insertstr; indx: '%s'.
-Internal error in function get_tag_name; input is a non-tagged type.
-Internal error in function gen_type_str -- not a type tree '%s'
-Cannot open file '%s'
-Prototype should be moved after tag or a typedef declaration.
-Please look for comments in the extracted header file.
-The extracted header file includes prototypes for static functions,
-which should be removed, if you wish to include the header in a source file
-other than the originator.
-ANSI C requires formal parameter before "..."
-This extension is meant to be used for compatibility with varargs.h
-3.5.4.3(35)
-syntax error: "&..." invalid
-extension used to access "..." formal arguments.
-function '%s' initialized like a variable
-The type of entity to be initialized shall be an object type or an
-array of unknown size.
-3.5.7(31)
-initializer not an array aggregate
-The initializer for an object that has aggregate type shall be a
-brace-enclosed list of initializers for the members of the aggregate,
-written in increasing subscript or member order.
-3.5.7(20)
-'%s' type is incomplete; cannot initialize
-Was the struct ever defined?
-3.5.7.(31)
-'%s' is not standard ANSI.
-This keyword/type is not defined in strict ANSI mode.
-3.1.1
-not a legal asm string
-The first operand of an asm string should be, after argument substitution,
-a legal assembly string.
-The -float option will be ignored in ANSI mode.
-The -float option is ignored, since otherwise program semantics would
-violate the ANSI standard. In particular, fp constants are always
-'double' with ANSI-C, while with -float the type of fp constants will
-depend on the context and may be 'float'.
-ANSI C support unavailable with C compiler bundled with RISC/os
-The C compiler bundled with RISC/os does not support ANSI C. ANSI
-C support requires a separate license.
-Ignored invalid warning number(s) in -woff option, %s%s !
-Warning numbers must be in the range %s to %s.
-The set of warning numbers in cfe is disjoint from the set of warning numbers
-in accom, since accom warnings cannot be mapped one-to-one to cfe warnings.
-'%s' not handled as an intrinsic due to incompatible argument types .
-'__unalign' only qualifies pointers
-'__unalign' indicates the object pointed at by pointer is unaligned (e.g.,
-int * __unalign p). This is an extension to ANSI C and like 'volatile'
-and 'const' can follow the '*' in pointer declarations, but unlike both
-cannot qualify a base type.
-index expression is an anachronism
-ANSI C++ doesn't support array index expressions in delete.
-5.3.4
-member cannot be of function or incomplete type.
-3.5.2.1(12)
-Illegal lint option, '%s', is ignored.
-cannot open header message buffer file
-cannot write header message buffer file
-cannot read header message buffer file
-cannot seek in header message buffer file
-struct/union/enum '%s' is used, but not defined
-static '%s' unused
-nonportable character comparison (chars may be signed or unsigned)
-redundant comparison of unsigned with constant expression
-redundant statement, control flow cannot reach this statement
-'%s' may be used before set
-function parameter '%s' is not used in function '%s'
-'%s' can be const qualified, since it is not set within its lifetime.
-'%s' is not used in function '%s'
-'%s' set but unused in function '%s'
-control may fall through %s statement
-function '%s' has return(e); and return;
-function '%s' may return random value to place of invocation %s
-label without goto: '%s'
-only %s bits of '%s' constant (type '%s') are explicitly given
-explicit conversion from '%s' to '%s' %s
-implicit conversion from '%s' to '%s' %s
-'%s' may be indistinguishable from '%s' due to internal name truncation
-Promoted formal parameter and promoted argument have incompatible types
-No prototype for the definition of '%s' %s
-References to '%s' are substituted by its literal initializer
- (as included in %s)
-==============
-unsupported language linkage
-string-literal specifies an unsupported linkage
-7.4(1)
-No prototype for the call to %s
-To achieve better type-checking, there should be a full prototype for
-the function being called.
-3.5.4.3
-'inline' only applies to function declarations
-leave statment can occur only within try body
-Microsoft extension
-Use of a Microsoft extension detected without usage of the
-compiler option -msft.
-No parameter mentioned
-A file with no declarations or definitions is accepted as an extension to ANSI C
-The translation unit must contain at least one external definition.
-3.7
-Incompatible signed and unsigned version of a type
-Yacc initialization error
-Internal error: yacc cannot initialize itself.
-The cfe option %s may not be in future releases. We suggest that you not use this option!
-Incompatible char and unsigned char versions of a type
-Lshift with undefined behaviour.
-Lshift with a negative right operand, or a right operand that is greater
-than or equal to the width in bits of the promoted left operand, results
-in undefined behaviour.
-3.3.7(11)
-useless type name in declaration, possibly a semicolon is missing.
-Type was ignored.
-constant initializer expression is invalid (refers to automatic variables).
-All the expressions in an initializer for an object that has static storage
-duration or in the initializer list for an object that has aggregate or
-union type shall be constant expressions. Otherwise, unexpected results
-may occur.
-3.5.7(32) and 3.4
-invalid explicit or implicit conversion of an address constant to an integral value in a constant initializing expression.
-An address constant in a constant initializing expression can neither
-initialize a bit-field nor be directly or indirectly converted to an
-integral type of size different from an address type.
-6.4
diff --git a/tools/ido_recomp/linux/7.1/ugen b/tools/ido_recomp/linux/7.1/ugen
deleted file mode 100755
index 32d8d0be6e..0000000000
Binary files a/tools/ido_recomp/linux/7.1/ugen and /dev/null differ
diff --git a/tools/ido_recomp/linux/7.1/ujoin b/tools/ido_recomp/linux/7.1/ujoin
deleted file mode 100755
index 49b35ba6a5..0000000000
Binary files a/tools/ido_recomp/linux/7.1/ujoin and /dev/null differ
diff --git a/tools/ido_recomp/linux/7.1/uld b/tools/ido_recomp/linux/7.1/uld
deleted file mode 100755
index 756d30cd43..0000000000
Binary files a/tools/ido_recomp/linux/7.1/uld and /dev/null differ
diff --git a/tools/ido_recomp/linux/7.1/umerge b/tools/ido_recomp/linux/7.1/umerge
deleted file mode 100755
index 569e56e767..0000000000
Binary files a/tools/ido_recomp/linux/7.1/umerge and /dev/null differ
diff --git a/tools/ido_recomp/linux/7.1/uopt b/tools/ido_recomp/linux/7.1/uopt
deleted file mode 100755
index 349d1d6ffd..0000000000
Binary files a/tools/ido_recomp/linux/7.1/uopt and /dev/null differ
diff --git a/tools/ido_recomp/linux/7.1/usplit b/tools/ido_recomp/linux/7.1/usplit
deleted file mode 100755
index 563c5f8a2e..0000000000
Binary files a/tools/ido_recomp/linux/7.1/usplit and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/as0 b/tools/ido_recomp/macos/5.3/as0
deleted file mode 100755
index 1d2b7a7254..0000000000
Binary files a/tools/ido_recomp/macos/5.3/as0 and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/as1 b/tools/ido_recomp/macos/5.3/as1
deleted file mode 100755
index 44fada1c50..0000000000
Binary files a/tools/ido_recomp/macos/5.3/as1 and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/cc b/tools/ido_recomp/macos/5.3/cc
deleted file mode 100755
index 9e3c8f8c99..0000000000
Binary files a/tools/ido_recomp/macos/5.3/cc and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/cfe b/tools/ido_recomp/macos/5.3/cfe
deleted file mode 100755
index 86d98c79d3..0000000000
Binary files a/tools/ido_recomp/macos/5.3/cfe and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/err.english.cc b/tools/ido_recomp/macos/5.3/err.english.cc
deleted file mode 100644
index 6976e38a95..0000000000
--- a/tools/ido_recomp/macos/5.3/err.english.cc
+++ /dev/null
@@ -1,1260 +0,0 @@
-@
- 358 358 358
- 6464 6482 6553
- 6553 6593 6728
- 6728 6746 6803
- 6803 6808 6808
- 6808 6818 6818
- 6818 6826 6826
- 6826 6847 6847
- 6847 6875 6922
- 6922 6930 6930
- 6930 6939 6939
- 6939 6948 6948
- 6948 6974 7120
- 7120 7149 7204
- 7210 7248 7311
- 7317 7350 7442
- 7450 7497 7627
- 7635 7709 7930
- 7938 7975 8063
- 8071 8113 8253
- 8261 8289 8289
- 8298 8338 8445
- 8460 8502 8635
- 8650 8690 8819
- 8834 8857 8965
- 8965 9008 9113
- 9119 9142 9227
- 9235 9282 9451
- 9451 9462 9462
- 9462 9477 9477
- 9477 9497 9497
- 9497 9545 9545
- 9545 9584 9584
- 9584 9604 9662
- 9662 9682 9720
- 9720 9749 9749
- 9749 9788 9788
- 9788 9802 9802
- 9802 9829 9829
- 9829 9861 9861
- 9861 9904 9904
- 9904 9920 9920
- 9920 9962 9962
- 9962 9988 9988
- 9988 10014 10014
-10014 10035 10035
-10035 10054 10097
-10097 10115 10115
-10115 10147 10147
-10147 10183 10183
-10183 10208 10208
-10208 10236 10236
-10236 10269 10269
-10269 10304 10304
-10304 10328 10328
-10328 10351 10351
-10351 10371 10371
-10371 10402 10402
-10402 10447 10447
-10447 10497 10497
-10497 10533 10533
-10533 10598 10598
-10606 10630 10630
-10640 10671 10671
-10690 10719 10719
-10728 10752 10795
-10795 10837 10837
-10837 10876 10876
-10876 10900 10900
-10900 10948 10948
-10960 11021 11103
-11103 11128 11128
-11128 11153 11153
-11153 11216 11216
-11216 11239 11239
-11239 11303 11303
-11303 11347 11347
-11357 11393 11393
-11393 11432 11432
-11442 11494 11494
-11494 11536 11536
-11536 11595 11595
-11595 11622 11622
-11622 11684 11684
-11684 11726 11726
-11738 11778 11778
-11782 11813 11813
-11813 11850 11850
-11850 11900 12087
-12111 12120 12120
-12120 12129 12129
-12129 12158 12158
-12158 12192 12192
-12192 12237 12237
-12237 12273 12273
-12273 12326 12326
-12330 12366 12366
-12366 12423 12423
-12427 12482 12482
-12486 12560 12560
-12568 12631 12631
-12637 12691 12691
-12691 12743 12743
-12743 12785 12785
-12785 12826 12826
-12826 12865 12865
-12865 12883 12883
-12883 12946 12946
-12956 12995 12995
-13005 13066 13066
-13077 13163 13163
-13163 13211 13211
-13211 13270 13270
-13270 13318 13318
-13318 13350 13350
-13350 13387 13387
-13387 13428 13428
-13428 13464 13533
-13533 13580 13737
-13737 13776 13854
-13854 13913 13913
-13913 13950 13950
-13950 14118 14118
-14118 14150 14150
-14150 14163 14194
-14194 14224 14255
-14255 14275 14319
-14319 14353 14458
-14466 14484 14530
-14534 14567 14567
-14567 14635 14682
-14690 14742 14742
-14742 14789 14789
-14801 14875 14875
-14886 14947 14947
-14947 14992 14992
-14992 15035 15085
-15085 15134 15205
-15214 15267 15448
-15454 15496 16810
-16822 16875 16960
-16972 17053 17179
-17191 17236 17332
-17344 17491 17841
-17853 17939 18304
-18316 18471 18774
-18786 18952 19323
-19335 19364 19496
-19500 19527 19598
-19598 19613 19776
-19797 19808 19837
-19837 19862 19862
-19868 19927 20026
-20034 20075 20179
-20187 20223 20223
-20223 20290 20382
-20392 20441 20589
-20601 20656 20656
-20656 20699 20818
-20826 20860 21038
-21046 21094 21191
-21203 21236 21314
-21326 21395 21457
-21469 21502 21502
-21502 21587 21731
-21756 21789 21864
-21875 21901 21976
-22013 22059 22220
-22257 22397 22561
-22561 22595 22595
-22603 22623 22623
-22631 22667 22828
-22865 22919 22994
-23031 23059 23120
-23132 23201 23201
-23212 23274 23274
-23285 23345 23345
-23356 23393 23393
-23399 23431 23532
-23542 23587 23646
-23656 23697 23745
-23755 23796 23844
-23854 23876 23928
-23942 23971 24153
-24160 24243 24243
-24247 24273 24743
-24755 24784 24984
-24996 25034 25034
-25034 25075 25273
-25281 25332 25410
-25420 25467 25544
-25554 25583 25744
-25754 25783 26061
-26071 26111 26185
-26194 26239 26525
-26535 26568 26914
-26924 26951 26998
-27008 27035 27082
-27093 27120 27167
-27178 27206 27251
-27261 27289 27334
-27345 27391 27931
-27938 27959 28007
-28019 28037 28037
-28043 28069 28069
-28077 28147 28199
-28207 28266 28266
-28274 28306 28306
-28314 28339 28339
-28347 28404 28510
-28518 28567 28682
-28690 28728 28728
-28736 28782 29023
-29033 29085 29234
-29246 29303 29383
-29395 29432 29570
-29592 29631 29644
-29644 29693 29758
-29767 29810 29875
-29875 29911 29976
-29984 30014 30014
-30027 30086 30151
-30157 30223 30293
-30301 30369 30445
-30457 30511 30568
-30580 30630 30743
-30755 30812 30874
-30886 30959 31035
-31043 31076 31175
-31183 31243 31243
-31251 31323 31323
-31331 31433 31433
-31445 31544 31686
-31698 31740 31740
-31740 31783 31783
-31783 31824 31824
-31824 31873 31996
-32008 32056 32164
-32176 32210 32210
-32229 32271 32271
-32279 32323 32569
-32581 32642 32718
-32739 32779 32916
-32926 32953 33047
-33057 33116 33315
-33325 33373 33373
-33373 33407 33469
-33494 33527 33527
-33536 33573 33573
-33584 33650 33697
-33705 33763 33763
-33763 33797 33797
-33797 33829 33906
-33915 33976 33976
-33985 34016 34098
-34098 34133 34198
-34198 34261 34261
-34269 34312 34312
-34324 34363 34438
-34444 34530 34530
-34538 34596 34626
-34636 34675 34754
-34764 34821 34821
-34821 34867 34950
-34959 35016 35135
-35145 35198 35198
-35208 35266 35344
-35355 35382 35537
-35547 35576 35629
-35637 35705 35705
-35713 35764 35764
-35764 35784 35876
-35888 35932 35950
-35950 36013 36138
-36150 36191 36280
-36286 36314 36419
-36431 36516 36516
-36516 36554 36642
-36642 36689 36808
-36818 36881 37105
-37113 37183 37204
-37204 37225 37225
-37225 37255 37348
-37348 37388 37388
-37388 37454 37454
-37454 37518 37518
-37518 37584 37584
-37584 37717 37717
-37717 37752 37752
-37752 37783 37889
-37901 37928 38034
-38046 38115 38115
-38115 38140 38187
-38195 38219 38339
-38351 38422 38422
-38422 38486 38486
-38486 38555 38555
-38555 38619 38619
-38619 38641 38641
-38641 38758 38758
-38758 38929 38929
-38929 38975 39043
-39055 39084 39133
-39133 39175 39265
-39275 39310 39494
-39504 39547 39576
-39587 39614 39668
-39674 39697 39797
-39797 39845 40094
-40094 40158 40264
-40264 40369 40523
-40523 40593 40593
-40593 40629 40876
-40876 40911 40971
-40977 41026 41026
-41038 41077 41077
-41077 41116 41116
-41116 41156 41156
-41156 41195 41195
-41195 41237 41237
-41237 41285 41285
-41285 41304 41304
-41304 41371 41371
-41371 41429 41429
-41429 41491 41491
-41491 41519 41519
-41519 41572 41572
-41572 41642 41642
-41642 41676 41676
-41676 41713 41713
-41713 41751 41751
-41751 41792 41792
-41792 41856 41856
-41856 41881 41881
-41881 41936 41936
-41936 41977 41977
-41977 42018 42018
-42018 42090 42090
-42090 42162 42162
-42162 42205 42205
-42205 42267 42267
-42267 42294 42294
-42294 42309 42309
-42309 42338 42386
-42393 42425 42522
-42530 42577 42577
-42577 42623 42623
-42623 42643 42725
-42725 42748 42748
-42748 42829 42897
-42901 42952 42952
-42952 42978 43025
-43025 43116 43116
-43116 43171 43171
-43171 43204 43376
-43386 43453 43471
-43471 43547 43780
-43798 43921 44116
-44120 44120 44120
-Out of memory: %s
-There is no more memory left in the system for compiling this program.
-Internal Error Unknown Error Message %s
-1) An internal error, while attempting to print an unavailable message
-2) The error message file is inaccessible or has other problems
-Unknown Signal %s
-1) An unknown signal has been caught
-2) 2 Nested signals
-line
-Warning:
-Fatal:
-Source not available
-Too many errors... goodbye.
-There is a limit of 30 errors before aborting.
-Error:
-reserved
-reserved
-Unknown Control Statement
-1) The line begins with a '#' and is not of the form:
- # ""
-2) Please compile this program with the preprocessor enabled.
-Unknown character %s ignored
-The character is not part of the source character set.
-2.2.1
-Unknown control character \%s ignored
-The control character is not part of the source character set.
-2.2.1
-Illegal character %s in exponent
-1) Digits or sign expected after 'e' or 'E'.
-2) Digits are expected after sign in exponent.
-3.1.3.1
-Constant is out of range and may be truncated.
-The constant is too large to be accurately represented and may be
-truncated. The limits are in the system include file limits.h.
-2.2.4.2
-Constant is out of range for a 32-bit data type, but accepted as written.
-The constant is too large to fit in a 32-bit data type, but will be
-accurately represented in a wider data type. The value may be truncated,
-depending on its context. The limits are in the system include file
-limits.h.
-2.2.4.2
-Character constant size out of range
-1) No characters in a character constant.
-2) More than 4 bytes in a character constant.
-3.1.3.4
-Wide character constant size out of range
-1) No characters in the multibyte sequence (0 assumed).
-2) More than 1 byte in the multi-byte sequence (only the first byte was converted).
-3.1.3.4
-Invalid multibyte character
-4.10.7.2
-Newline in string or character constant
-1) Terminate your string or character constant with closing quotes.
-2) Put a backslash before the newline.
-3.1.3.4, 3.1.4
-Octal character escape too large: %s > %s
-1) Terminate end of octal sequence with a non-octal character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Hex character escape too large: %s > %s
-1) Terminate end of hex sequence with a non-hex character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Unexpected End-of-file
-1) Unterminated string or character constant
-2) Missing closing comment marker (*/)
-3) File system problems
-Unrecognized escape sequence in string \%s
-Recognized escape sequences are \a, \b, \f, \n, \r, \t, and \v.
-Character will be treated as un-escaped.
-3.9.2
-Illegal octal digit %s
-Octal constants, beginning with 0, must only have digits between 0 and 7,
-inclusive.
-3.1.3.2
-Unable to open temporary file for compiling %s
-1) TMPDIR environment variable is set to a directory that you have no
- permissions for.
-2) The file system is full.
-3) System errors beyond the scope of the compiler.
-%s: Hangup
-%s: Interrupt
-%s: Quit (ASCII FS)
-%s: Illegal instruction (not reset when caught)
-%s: Trace trap (not reset when caught)
-%s: IOT instruction
-Also SIGABRT, used by abort, replace SIGIOT in the future
-%s: EMT instruction
-Also SIGXCPU, Exceeded CPU time limit
-%s: Floating point exception
-%s: Kill (cannot be caught or ignored)
-%s: Bus error
-%s: Segmentation violation
-%s: Bad argument to system call
-%s: Write on a pipe with no one to read it
-%s: Alarm clock
-%s: Software termination signal from kill
-%s: User defined signal 1
-%s: User defined signal 2
-%s: Death of a child
-Power-fail restart
-%s: Also SIGXFSZ, exceeded file size limit
-%s: Window change
-%s: Handset, line status change
-%s: Sendablestop signalnot from tty
-%s: Stop signal from tty
-%s: Pollable event occurred
-%s: Input/Output possible signal
-%s: Urgent condition on IO channel
-%s: Window size changes
-%s: Virtual time alarm
-%s: Profiling alarm
-%s: Continue a stopped process
-%s: To readers pgrp upon background tty read
-%s: Like TTIN for output if (tp->t_local<OSTOP)
-%s: Resource lost (eg, record-lock)
-'auto' and 'register' are not allowed in an external declaration
-3.7(10)
-must have function type
-3.7.1(30)
-Functions cannot return arrays
-3.7.1(33), 3.3.2.2
-Declaration list not allowed
-3.7.1(5)
-Too many input files %s
-The command line may contain only one file
-cpp internal error: input stack underflow
-cpp internal error: if stack underflow
-Cannot open the file %s
-No new-line character at the end of the file %s
-2.1.1.2(30)
-Fatal: Exceeded the limit of nesting level for #include file
-Fatal: Exceeded the limit of nesting level for #include file. This limit
-is 200.
-Fail to read the file %s
-Cannot write the file %s
-%s: %s: An if directive is not terminated properly in the file
-%s: %s: nested comment
-%s:%s: Illegal macro name %s; macro name shall be an identifier
-%s:%s: Illegal preprocessing token sequence
-3.8.3(35)
-%s:%s: Illegal macro parameter name
-%s:%s: Non-unique macro parameter name
-3.8.3(18)
-%s:%s: Missing ')' in parameter list for #define %s
-%s:%s: Missing ')' in macro instantiation
-%s:%s: Bad punctuator in the parameter list for #define %s
-%s:%s: Macro %s redefined.
-%s:%s: # operator should be followed by a macro argument name
-%s:%s: Badly formed constant expression%s
-3.4(9), 3.8
-%s:%s: Division by zero in #if or #elif
-3.8
-unknown command line option %s
-extraneous input/output file name %s
-%s: %s: Unterminated string or character constant
-A preprocessing string or character constant token was not
-terminated. Note that preprocessing directives are processed
-after the source file has been divided into preprocessing tokens.
-2.1.1.2(30) 3.1(18) 3.8
-%s: %s:
-%s: %s:
-%s: %s: Unterminated comment
-%s: %s: Unknown directive type %s
-%s: %s: #elif or #else after #else directive
-%s: %s: Bad identifier after the %s
-%s: %s: #%s accepts only one identifier as parameter
-3.8
-%s: %s: Bad identifier after the %s
-%s: %s: text following #%s violates the ANSI C standard.
-3.8
-%s: %s: Bad character %s occurs after the # directive.
-3.8
-%s: %s: the ## operator shall not be the %s token in the replacement list
-3.8.3.3
-%s: %s: the defined operator takes identifier as operand only.
-3.8.1
-%s: %s: Not in a conditional directive while using %s
-%s: %s: Illegal filename specification for #include
-%s: %s: Invalid file name %s for #include
-%s: %s: Cannot open file %s for #include
-%s: %s: Bad argument for #line command
-%s: %s: #error %s
-%s: %s: Tried to redefine predefined macro %s, attempt ignored
-3.8.7(22)
-%s: %s: Undefining predefined macro %s
-3.8.7(22)
-%s: %s: Undefined the ANSI standard library defined macro %s
-4.1.2.1(9)
-%s: %s: The number of arguments in the macro invocation does not match the definition
-%s: %s: Illegal character %s in preprocessor if
-%s: %s: Illegal character %s for number in preprocessor if
-%s: %s: No string is allowed in preprocessor if
-%s: %s: Not supported pragma %s
-%s: %s: Not supported #pragma format
-%s: %s: ANSI C does not allow #ident; %s
-%s: %s: Not supported #ident format
-This cpp extension accepts the following format:
-#ident "any string"
-%s: %s: Not supported #assert/#unassert format
-This cpp extension accepts the following format:
-#assert identifier
-#assert identifier ( pp-tokens )
-#unassert identifier
-#unassert identifier ( pp-tokens )
-%s: %s: Bad assertion predicate format
-The correct syntax for this cpp extension is:
-#assert identifier ( pp-token )
-%s: %s: directive is an upward-compatible ANSI C extension
-%s: This option requires an argument
-%s: %s: A macro has expanded recursively more than %s times. Further expansion will be disabled! Use command-line option: -Wp,-max_rec_depth=depth to recurse deeper.
-A status return from cpp to cfe
-Syntax Error
-The token read was unexpected.
-Syntax Error -- cannot backup
-The token read was unexpected.
-Yacc stack overflow
-The expression is too complicated to parse.
-Trailing comma in enumerator list
-The use of a trailing comma in an enumerator list is not standard C. There
-may be portability problems.
-3.5.2.2
-Empty declaration
-Empty declarations are invalid in standard C.
-3.5
-%s declared, but not referenced.
-redeclaration of '%s'; previous declaration at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-'%s' undefined; reoccurrences will not be reported.
-Non-function name referenced in function call.
-3.3.2.2(18)
-The number of arguments doesn't agree with the number in the declaration.
-3.3.2.2(5)
-'%s' section name longer than 8 characters. Name truncated.
-'%s' is already placed by pragma alloc_text.
-Cannot write ucode file while compiling %s
-1) The file system is full
-2) Permissions problem
-Must have corresponding formal argument for '%s'
-Parameter found in the declaration part, but not in the argument list.
-3.7.1(7)
-Non-prototype declaration is an obsolescent feature.
-The use of function definitions with separate parameter identifier
-and declaration lists (not prototype-format parameter type and
-identifier declarators) is an obsolescent feature.
-3.9.5
-Incompatible function declarations for %s
-For two function types to be compatible, both shall specify compatible
-return types. Moreover, the parameter type lists, if both are present,
-shall agree in the number of parameters and in use of the ellipsis
-terminator; corresponding parameters shall have compatible types. If
-one type has a parameter type list and the other type is specified by
-a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions. If one type has a parameter type list and the
-other is specified by a function definition that contains a (possibly
-empty) identifier list, both shall agree in the number of parameters,
-and the type of each prototype parameter shall be compatible with the
-type that results from application of the default argument promotions
-to the type of the corresponding identifier. (For each parameter
-declared with function or array type, its type for these comparisons
-is the one that results from conversion to a pointer type. For each
-parameter declared with qualified type, its type for these comparisons
-is the unqualified version of its declared type.) There you have it!
-3.5.4.3(15)
-Incompatible function return type for this function.
-For two function types to be compatible, both shall specify compatible
-return types.
-3.5.4.3(15)
-The number of parameters for function is different from the previous declaration
-The parameter type lists, if both are present, shall agree in the
-number of parameters and in use of the ellipsis terminator.
-3.5.4.3(15)
-Incompatible type for the function parameter
-If both parameter type lists are present, corresponding
-parameters shall have compatible types.
-3.5.4.3(15)
-Function %s is redeclared with an incompatible argument type (after default argument promotion), which could lead to undefined run-time behaviour.
-The redeclaration could cause arguments at a call site to be passed
-inconsistently with what the function implementation expects, and
-parameters would therefore be accessed erroneously when executing the
-function body. Note that a float argument is promoted to a double
-when passed (potentially through fp registers) to an unprototyped
-function.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, ellipsis terminator not allowed
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the type of each parameter shall be
-compatible with the type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype declaration and non-prototype definition found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other is specified by a
-function definition that contains a (possibly empty) identifier list,
-both shall agree in the number of parameters, and the type of each
-prototype parameter shall be compatible with the type that results
-from application of the default argument promotions to the type of the
-corresponding identifier.
-3.5.4.3(15)
-Empty declaration specifiers
-Standard C requires at least a storage class specifier, type specifier,
-or a type qualifier in declarations. 'extern int' assumed.
-3.5
-Can't write to the file %s
-1) The output file cannot be opened for writing.
-2) Out of file space.
-Duplicate '%s'
-typedef, extern, static, auto, register, const, volatile may not
-appear more than once in the same specifier list or qualifier list.
-Duplicate occurrence ignored.
-3.5.1(10) , 3.5.3(5)
-Null input
-There is nothing to compile.
-Illegal type combination
-3.5.2
-Missing ';' at end of structure / union member declaration
-In standard C, each member declaration must be terminated by a ';'. A
-terminating ';' is assumed.
-3.5.2.1
-Missing member name in structure / union
-In standard C, each member declaration have a member name. The missing
-member is assumed to not exist.
-3.5.2.1
-This variable is initialized twice.
-Neither 'const' or 'volatile' have any effect on function results.
-Qualifiers only apply to expressions designating an object that
-can be altered or examined.
-3.5.3(10)
-An integer constant expression is required here.
-The expression that defines the value of an enumeration constant
-shall be an integral constant expression that has a value
-representable as an int.
-3.5.2.2(28)
-(previous declaration of '%s' at line %s in file '%s')
-Must be an integer type greater than zero.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-Array size cannot be a long long.
-Arrays with more than 2^32 elements are not yet supported.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-bit-field '%s' width is not an integer constant
-The expression that specifies the width of a bit-field shall be an
-integral constant expression.
-3.5.2.1(15)
-bit-field '%s' width is negative
-The expression that specifies the width of a bit-field shall be
-non-negative.
-3.5.2.1(15)
-bit-field '%s' type required to be int, unsigned int, or signed int.
-A bit-field shall have type int, unsigned int, or signed int.
-3.5.2.1(30)
-bit-field %s's type not integer.
-Non-scalar type or pointer type to a non-object for increment or decrement operator.
-The operand of the prefix/postfix increment or decrement operator shall have scalar type; if it is of pointer type, it must point to an object.
-3.3.2.4(37), 3.3.3.1(25)
-Assign value to a function type.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.2.2.1(5)
-Assign value to an array.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for variable of incomplete type.
-The operand of increment and decrement operator shall be a modifiable
-scalar lvalue. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-The left-hand side of the '.' operator must be an addressable lvalue, when a bit-field is not contained within a unit of 32 bits alignment.
-This is a restriction in our implementation, which can be worked
-around by always accessing long long bit-fields indirectly (i.e.
-by means of the '->' operator).
-This expression is not an lvalue.
-3.2.2.1
-Modified an rvalue.
-3.2.2.1
-Change value for constant variable.
-The operand of increment and decrement operators shall be modifiable
-scalar lvalues. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for constant field of a struct or union.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Dereferenced a non-pointer.
-The operand of the unary * operator shall have pointer type.
-3.3.3.2(39)
-The operand of the unary + or - operator shall have arithmetic type.
-3.3.3.3(6)
-The operand of the unary ~ operator shall have integral type.
-3.3.3.3(6)
-The operand of the unary ! operator shall have scalar type.
-3.3.3.3(6)
-Constants must have arithmetic type.
-3.1.3
-Bad type name for cast operator
-The type name for the cast operator should either be void or a
-qualified or unqualified scalar type.
-3.3.4(22)
-Improper cast of non-scalar type expression.
-The operand for the cast operator shall be of scalar type.
-3.3.4(23)
-Cast a pointer into a non-integral type.
-A pointer may be converted to an integral type.
-3.3.4(31)
-Cast a non-integral type into a pointer.
-An integral type may be converted to a pointer.
-3.3.4(31)
-Duplicate member '%s'
-Two members of a struct may not have the same name.
-3.1.2.2(7,25)
-Invalid constant expression.
-Constant expressions shall not contain assignment, increment, decrement,
-function-call, or comma operators, except when they are contained within
-the operand of the sizeof operator.
-3.4(9)
-Constant expressions must be derived from a constant value or a constant
-variable.
-3.4
-Dangerous operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier. This operand is NOT an lvalue, but we let it pass.
-Note that a segmentation error with possible core dump will result
-when the resulting address does not denote a valid (declared)
-storage location. This feature will be discontinued in future
-releases of the compiler!
-3.3.3.2(36)
-Unacceptable operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier.
-3.3.3.2(36)
-'&' before array or function; ignored
-Unacceptable operand of sizeof operator.
-The sizeof operator shall not be applied to an expression that has
-function type or an incomplete type, to the parenthesized name of such
-a type, or to an lvalue that designates a bit-field object.
-3.3.3.4
-Unacceptable operand of a multiplicative operator.
-Each of the operands of a multiplicative operator shall have arithmetic type.
-3.3.5(18)
-Unacceptable operand of the remainder operator
-Each of the operands of the remainder (%) operator shall have integral type.
-3.3.5(18)
-Unacceptable operand of '+'.
-For the + operator, either both operands shall have arithmetic type, or
-one operand shall be a pointer to an object type and the other shall
-have integral type.
-3.3.6(39)
-Unacceptable operand of '-'.
-For the subtraction operator, one of the following shall hold: both operands
-have arithmetic type; operands are pointers to qualified or unqualified
-versions of compatible object types; or the left operand is a pointer
-to an object type and the right operand has integral type.
-3.3.6(39)
-Unacceptable operand of shift operator.
-Each of the operands of bitwise shift operators shall have integral type.
-3.3.7(9)
-Unacceptable operand of relational operator.
-For relational operators, one of the following shall hold: both
-operands have arithmetic type; both operands are pointers to qualified
-or unqualified versions of compatible object types; or both operands
-are pointers to qualified or unqualified versions of compatible
-incomplete types.
-3.3.8(32)
-Unacceptable operand of == or !=
-For the == or != operator, one of the following shall hold: both operands
-are pointers to qualified or unqualified versions of compatible types; one
-operand is a pointer to an object or incomplete type and the other is a
-pointer to a qualified or unqualified version of void; or one operand is
-a pointer and the other is a null pointer constant.
-3.3.9(21)
-Unacceptable operand of &.
-Each of the operands shall have integral type.
-3.3.10(7)
-Unacceptable operand of ^.
-Each of the operands shall have integral type.
-3.3.11(18)
-Unacceptable operand of |.
-Each of the operands shall have integral type.
-3.3.12(30)
-Unacceptable operand of &&.
-Each of the operands shall have scalar type.
-3.3.13(7)
-Unacceptable operand of ||.
-Each of the operands shall have scalar type.
-3.3.14(20)
-Unacceptable operand of conditional operator.
-The first operand of conditional operator shall have scalar type. One
-of the following shall hold for the second and third operands:
-both operands have arithmetic type; both operands have compatible
-structure or union types; both operands have void type; both operands
-are pointers to qualified or unqualified versions of compatible types;
-one operand is a pointer and the other is a null pointer constant; or
-one operand is pointer to an object or incomplete type and the other
-is a pointer to a qualified or unqualified version of void.
-3.3.15
-Duplicate label '%s'
-A label name can only occur once in a function.
-3.1.2.1(25)
-Division by zero.
-3.3.5
-Subscripting a non-array.
-3.3.2.1
-Subscripting an array of incomplete type which is not an object type.
-The element of the array shall have an object type.
-3.3.2.1
-Should only subscript an array with an integral expression
-3.3.2.1
-Subscripting an unbounded array
-3.3.2.1
-Array index out of range
-3.3.2.1
-Selector requires struct/union pointer as left hand side
-In K&R mode the expression is implicitly converted to the '.' selector
-for a struct/union left-hand side.
-3.3.2.3
-Selector requires struct/union as left hand side
-In K&R mode the expression is implicitly converted to the '->' selector
-for a struct/union pointer left-hand side.
-3.3.2.3
-member of structure or union required
-3.3.2.3
-types have different qualifier specifications
-For two qualified types to be compatible, both shall have the
-identically qualified version of a compatible type; qualified
-and unqualified versions of a type are distinct types. For two
-types to be compatible their types must be the same.
-3.5.3(26)
-Incompatible array type due to different array size
-For two array types to be compatible, both shall have compatible element
-types; if both size specifiers are present, they shall have the
-same value.
-3.5.4.2(11)
-Incompatible array type due to incompatible element type
-For two array types to be compatible, both shall have compatible element
-types.
-3.5.4.2(11)
-Incompatible pointer type assignment
-The type pointed to by the left-hand side of simple assignment
-statement is incompatible with the type pointed to by the right-hand side.
-3.3.16.1, 3.5.4.1(21)
-Incompatible base type of pointer type
-K&R feature.
-Type %s of %s is incompatible with type %s of %s
-Incompatible types can be resolved by casting or by other means.
-3.3.16.1
-illegal combination of pointer and integer
-Assigning an integral expression to a pointer is a bad practice.
-Type for %s is incompatible with %s
-Incompatible types can be resolved by casting or by other means.
-3.1.2.6
-Bad operand type for += or -=
-3.3.16.2(26)
-A case or default label appears outside a switch statement
-A case or default label shall appear only in a switch statement.
-3.6.1
-The controlling expression of the if statement is not scalar type
-The controlling expression of an if statement shall have scalar type.
-3.6.4.1
-The controlling expression of switch statement is not integral type
-The controlling expression of an switch statement shall have integral type.
-3.6.4.2(20)
-The case label is not an integral constant expression
-The case label shall be an integral constant expression.
-3.6.4.2(22)
-Duplicate case label in the same switch statement
-No two of the case constant expressions in the same switch statement
-shall have the same value after conversion.
-3.6.4.2(22)
-More than one default label in the same switch statement
-There may be at most one default label in a switch statement.
-3.6.4.2(23)
-The controlling expression of the iteration statement is not scalar
-type
-The controlling expression of a iteration statement shall have scalar
-type.
-3.6.5.1
-label '%s' used, but not defined
-The identifier in a goto statement shall name a label located
-somewhere in the enclosing function.
-3.6.6.1
-A continue statement shall appear only in or as a loop body
-3.6.6.2
-A break statement shall appear only in or as a switch body or loop body
-3.6.6.3
-A return statement with an expression should not appear
-in a function '%s', whose return type is void
-3.6.6.4(24)
-A return statement without an expression appears in a
-function '%s', whose return type is not void
-If a return statement without an expression is executed, and the value
-of the function call is used by the caller, the behavior is undefined.
-3.6.6.4(33)
-Internal Error: statement stack underflow
-Long double not supported; double assumed.
-Long float not standard; double assumed.
-Only 'register' allowed in parameter declaration
-The only storage-class specifier that shall occur in a parameter
-declaration is 'register'; illegal storage class ignored.
-3.5.4.3(25)
-Name(s) without types in a function declaration
-An old-style function declaration is not allowed to have names
-in the parameter list; useless names ignored
-3.5.4.3(26)
-Functions cannot return functions
-3.7.1(33), 3.3.2.2
-Functions cannot return a non-object type
-3.3.2.2
-enum declaration must contain enum literals
-Although structs or unions may delay the declaration of their members,
-a similar construction with enum does not exist and is not necessary,
-as there can be no mutual dependencies between the declaration of an
-enumerated type and any other type.
-3.5.2.3(27)
-Register qualification has no effect for this type of object
-Register declarations for array, struct, and function types have
-no effect.
-3.5.1(16), 3.5.1(19)
-Functions cannot be declared 'register'
-The declaration of an identifier for a function that has block
-scope shall have no explicit storage-class specifier other than
-'extern'.
-3.5.1(19)
-'%s' cannot be initialized
-The type of the entity to be initialized shall be an object type
-or an array of unknown size.
-3.5.7(32)
-Cannot initialize 'extern' variable '%s' within a function
-If the declaration of an identifier has block scope, and the
-identifier has 'extern' or 'static' linkage, the declaration
-shall have no initializer for the identifier; initialization
-allowed anyway.
-3.5.7(35)
-initializing an 'extern' is an ANSI C extension
-conflicting declarations for '%s'
-'static' and 'extern' declarations conflict. Which is meant?
-3.1.2.2(15), 3.1.2.2(27)
-Too many initial values for '%s'
-3.5.7(1)
-incompatible types in initialization
-3.3.16(35)
-redefinition of '%s'; previous definition at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-bit-fields as members of a union are an ANSI C invention.
-storage size for '%s' isn't known
-type mismatch in initialization
-Missing braces in a union initialization or illegally formed
-initialization.
-3.5.7(5)
-union '%s' only allowed one initializer for the first member
-3.5.7(5)
-width of '%s' exceeds its type
-the specified bitfield width is too large to be contained within a
-bitfield type.
-structure has no member named '%s'
-This is allowed for compatibility with AT&T pcc-based compilers.
-Reference of an expression of void type or an incomplete type.
-3.2.2.1
-element size of an array shall not be zero
-3.2.2.5(25)
-invalid combination of type specifiers
-Although order is unimportant, not all type specifiers can occur together.
-3.5.2
-declaration must at least declare an identifier, tag, or the member of an enumeration
-3.5(16)
-at most one storage class may be given in the declaration
-Duplicate occurrence ignored.
-3.5.1(10)
-size of function's return type is zero
-The return type of a function must be void or an object type other than array.
-3.7.1(33)
-Expecting an integral return type from the main function
-identifier missing from parameter declaration
-Prototypes for function definitions require identifiers in parameter
-declarations.
-3.7.1(4)
-only 'register' allowed for storage class for parameters
-The declarations in the declaration list shall contain no storage class
-other than 'register', and no initializations.
-3.7.1(10)
-parameters declarations can not have initializations
-3.7.1(10)
-only one instance of 'void' allowed in the parameter list
-'void' must occur by itself (specifying that the function has no parameters).
-3.5.4.3(1)
-%s must have function type
-1) An argument list must be explicitly present in the declarator; it cannot
- be inherited from a typedef (3.5.4.3).
-2) The declarator is not a function.
-3.7.1(30)
-Illegal hexadecimal constant
-You have no digits after the 0x or 0X. 0x0 assumed.
-3.1.3.2
-value overflows its type in this context. Value is set to be '%s'!
-3.2.1.4
-value is outside range representable for type '%s'
-missing member name
-K&R mode permits a missing member name; otherwise, only bitfields can omit
-the member name.
-3.5.2.1(10)
-useless keyword or type name in declaration
-Type was ignored.
-'%s' declared within and is limited to this function prototype
-Possible program error, since parameter type checking will always fail
-unless the type declaration is visible to the caller.
-3.1.2.1(35)
-Extra spaces within operator, %s assumed
-In ANSI C, the compound assignment operator cannot have embedded
-white space characters.
-3.1.5
-missing size for array '%s'
-Incomplete types permitted for identifiers with internal or
-external linkage, but not automatic linkage.
-3.1.2.5(10)
-can't jump into (from outside of) the body of a 'try' or into either type of handler
-'%s' missing, please #include excpt.h
-excpt.h required to declare exception statements, intrinsics or compiler
-runtime names.
-local function declarations cannot be 'static'
-A function declaration can only contain the storage-class 'static'
-if it is at file scope. Declaration made 'extern'.
-3.5.1(19)
-static function '%s' declared and referenced, but not defined.
-If an identifier declared with internal linkage is used in an
-expression (other than as a part of the operand of a sizeof
-operator), there shall be exactly one external definition for
-the identifier in the translation unit.
-3.7(12)
-pragma argument '%s' must be declared prior to being used in a pragma
-Pragma name ignored.
-Pragma not supported
-'%s' not enabled as intrinsic
-It may have already appeared in a function pragma, or never occurred in
-an intrinsic pragma.
-'%s' is already enabled as an intrinsic
-weak definition for '%s' is later redefined; pragma weak ignored.
-definition of primary name '%s' not found; pragma weak ignored.
-definition of secondary name '%s' not found; pragma weak ignored.
-primary name '%s' is declared as a common or external, and is not defined
-with initial value within this file; pragma weak ignored.
-useless '%s' storage class ignored
-array of functions not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-array of voids not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-argument for pragma pack must be an integer constant; pragma ignored
-'%s' has wrong tag type.
-Identifier redeclared in the same scope/block.
-3.1.2.3
-missing dimension bound
-For multidimensional arrays, the constant bounds of the array may be
-omitted only for the first member of the sequence.
-3.1.2.5(23)
-Internal error in parameters to function substr; loc: '%s'; len: '%s'.
-Internal error in parameters to function insertstr; indx: '%s'.
-Internal error in function get_tag_name; input is a non-tagged type.
-Internal error in function gen_type_str -- not a type tree '%s'
-Cannot open file '%s'
-Prototype should be moved after tag or a typedef declaration.
-Please look for comments in the extracted header file.
-The extracted header file includes prototypes for static functions,
-which should be removed, if you wish to include the header in a source file
-other than the originator.
-ANSI C requires formal parameter before "..."
-This extension is meant to be used for compatibility with varargs.h
-3.5.4.3(35)
-syntax error: "&..." invalid
-extension used to access "..." formal arguments.
-function '%s' initialized like a variable
-The type of entity to be initialized shall be an object type or an
-array of unknown size.
-3.5.7(31)
-initializer not an array aggregate
-The initializer for an object that has aggregate type shall be a
-brace-enclosed list of initializers for the members of the aggregate,
-written in increasing subscript or member order.
-3.5.7(20)
-'%s' type is incomplete; cannot initialize
-Was the struct ever defined?
-3.5.7.(31)
-'%s' is not standard ANSI.
-This keyword/type is not defined in strict ANSI mode.
-3.1.1
-not a legal asm string
-The first operand of an asm string should be, after argument substitution,
-a legal assembly string.
-The -float option will be ignored in ANSI mode.
-The -float option is ignored, since otherwise program semantics would
-violate the ANSI standard. In particular, fp constants are always
-'double' with ANSI-C, while with -float the type of fp constants will
-depend on the context and may be 'float'.
-ANSI C support unavailable with C compiler bundled with RISC/os
-The C compiler bundled with RISC/os does not support ANSI C. ANSI
-C support requires a separate license.
-Ignored invalid warning number(s) in -woff option, %s%s !
-Warning numbers must be in the range %s to %s.
-The set of warning numbers in cfe is disjoint from the set of warning numbers
-in accom, since accom warnings cannot be mapped one-to-one to cfe warnings.
-'%s' not handled as an intrinsic due to incompatible argument types .
-'__unalign' only qualifies pointers
-'__unalign' indicates the object pointed at by pointer is unaligned (e.g.,
-int * __unalign p). This is an extension to ANSI C and like 'volatile'
-and 'const' can follow the '*' in pointer declarations, but unlike both
-cannot qualify a base type.
-index expression is an anachronism
-ANSI C++ doesn't support array index expressions in delete.
-5.3.4
-member cannot be of function or incomplete type.
-3.5.2.1(12)
-Illegal lint option, '%s', is ignored.
-cannot open header message buffer file
-cannot write header message buffer file
-cannot read header message buffer file
-cannot seek in header message buffer file
-struct/union/enum '%s' is used, but not defined
-static '%s' unused
-nonportable character comparison (chars may be signed or unsigned)
-redundant comparison of unsigned with constant expression
-redundant statement, control flow cannot reach this statement
-'%s' may be used before set
-function parameter '%s' is not used in function '%s'
-'%s' can be const qualified, since it is not set within its lifetime.
-'%s' is not used in function '%s'
-'%s' set but unused in function '%s'
-control may fall through %s statement
-function '%s' has return(e); and return;
-function '%s' may return random value to place of invocation %s
-label without goto: '%s'
-width of %s constant is smaller than size of type (%s)
-explicit conversion from '%s' to '%s' %s
-implicit conversion from '%s' to '%s' %s
-'%s' may be indistinguishable from '%s' due to internal name truncation
-Promoted formal parameter and promoted argument have incompatible types
-No prototype for the definition of '%s' %s
-References to '%s' are substituted by its literal initializer
- (as included in %s)
-==============
-unsupported language linkage
-string-literal specifies an unsupported linkage
-7.4(1)
-No prototype for the call to %s
-To achieve better type-checking, there should be a full prototype for
-the function being called.
-3.5.4.3
-'inline' only applies to function declarations
-leave statment can occur only within try body
-Microsoft extension
-Use of a Microsoft extension detected without usage of the
-compiler option -msft.
-No parameter mentioned
-A file with no declarations or definitions is accepted as an extension to ANSI C
-The translation unit must contain at least one external definition.
-3.7
-Incompatible signed and unsigned version of a type
-Yacc initialization error
-Internal error: yacc cannot initialize itself.
-The cfe option %s may not be in future releases. We suggest that you not use this option!
-Incompatible char and unsigned char versions of a type
-Lshift with undefined behaviour.
-Lshift with a negative right operand, or a right operand that is greater
-than or equal to the width in bits of the promoted left operand, results
-in undefined behaviour.
-3.3.7(11)
-useless type name in declaration, possibly a semicolon is missing.
-Type was ignored.
-constant initializer expression is invalid (refers to automatic variables).
-All the expressions in an initializer for an object that has static storage
-duration or in the initializer list for an object that has aggregate or
-union type shall be constant expressions. Otherwise, unexpected results
-may occur.
-3.5.7(32) and 3.4
-invalid explicit or implicit conversion of an address constant to an integral value in a constant initializing expression.
-An address constant in a constant initializing expression can neither
-initialize a bit-field nor be directly or indirectly converted to an
-integral type of size different from an address type.
-6.4
diff --git a/tools/ido_recomp/macos/5.3/ugen b/tools/ido_recomp/macos/5.3/ugen
deleted file mode 100755
index add44a34df..0000000000
Binary files a/tools/ido_recomp/macos/5.3/ugen and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/ujoin b/tools/ido_recomp/macos/5.3/ujoin
deleted file mode 100755
index 5e7ed4789d..0000000000
Binary files a/tools/ido_recomp/macos/5.3/ujoin and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/uld b/tools/ido_recomp/macos/5.3/uld
deleted file mode 100755
index 64fc3899cf..0000000000
Binary files a/tools/ido_recomp/macos/5.3/uld and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/umerge b/tools/ido_recomp/macos/5.3/umerge
deleted file mode 100755
index c66ef9f2fb..0000000000
Binary files a/tools/ido_recomp/macos/5.3/umerge and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/uopt b/tools/ido_recomp/macos/5.3/uopt
deleted file mode 100755
index 0872f9c171..0000000000
Binary files a/tools/ido_recomp/macos/5.3/uopt and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/usplit b/tools/ido_recomp/macos/5.3/usplit
deleted file mode 100755
index 2a7c351880..0000000000
Binary files a/tools/ido_recomp/macos/5.3/usplit and /dev/null differ
diff --git a/tools/ido_recomp/macos/7.1/as0 b/tools/ido_recomp/macos/7.1/as0
deleted file mode 100755
index 9a2fd2f0af..0000000000
Binary files a/tools/ido_recomp/macos/7.1/as0 and /dev/null differ
diff --git a/tools/ido_recomp/macos/7.1/as1 b/tools/ido_recomp/macos/7.1/as1
deleted file mode 100755
index e91f7d1a2f..0000000000
Binary files a/tools/ido_recomp/macos/7.1/as1 and /dev/null differ
diff --git a/tools/ido_recomp/macos/7.1/cc b/tools/ido_recomp/macos/7.1/cc
deleted file mode 100755
index b487956f20..0000000000
Binary files a/tools/ido_recomp/macos/7.1/cc and /dev/null differ
diff --git a/tools/ido_recomp/macos/7.1/cfe b/tools/ido_recomp/macos/7.1/cfe
deleted file mode 100755
index f86fc3743f..0000000000
Binary files a/tools/ido_recomp/macos/7.1/cfe and /dev/null differ
diff --git a/tools/ido_recomp/macos/7.1/err.english.cc b/tools/ido_recomp/macos/7.1/err.english.cc
deleted file mode 100644
index b5d5be36ef..0000000000
--- a/tools/ido_recomp/macos/7.1/err.english.cc
+++ /dev/null
@@ -1,1260 +0,0 @@
-@
- 358 358 358
- 6464 6482 6553
- 6553 6593 6728
- 6728 6746 6803
- 6803 6808 6808
- 6808 6818 6818
- 6818 6826 6826
- 6826 6847 6847
- 6847 6875 6922
- 6922 6930 6930
- 6930 6939 6939
- 6939 6948 6948
- 6948 6974 7120
- 7120 7149 7204
- 7210 7248 7311
- 7317 7350 7442
- 7450 7497 7627
- 7635 7709 7930
- 7938 7975 8063
- 8071 8113 8253
- 8261 8289 8289
- 8298 8338 8445
- 8460 8502 8635
- 8650 8690 8819
- 8834 8857 8965
- 8965 9008 9113
- 9119 9142 9227
- 9235 9282 9451
- 9451 9462 9462
- 9462 9477 9477
- 9477 9497 9497
- 9497 9545 9545
- 9545 9584 9584
- 9584 9604 9662
- 9662 9682 9720
- 9720 9749 9749
- 9749 9788 9788
- 9788 9802 9802
- 9802 9829 9829
- 9829 9861 9861
- 9861 9904 9904
- 9904 9920 9920
- 9920 9962 9962
- 9962 9988 9988
- 9988 10014 10014
-10014 10035 10035
-10035 10054 10097
-10097 10115 10115
-10115 10147 10147
-10147 10183 10183
-10183 10208 10208
-10208 10236 10236
-10236 10269 10269
-10269 10304 10304
-10304 10328 10328
-10328 10351 10351
-10351 10371 10371
-10371 10402 10402
-10402 10447 10447
-10447 10497 10497
-10497 10533 10533
-10533 10598 10598
-10606 10630 10630
-10640 10671 10671
-10690 10719 10719
-10728 10752 10795
-10795 10837 10837
-10837 10876 10876
-10876 10900 10900
-10900 10948 10948
-10960 11021 11103
-11103 11128 11128
-11128 11153 11153
-11153 11216 11216
-11216 11239 11239
-11239 11303 11303
-11303 11347 11347
-11357 11393 11393
-11393 11432 11432
-11442 11494 11494
-11494 11536 11536
-11536 11595 11595
-11595 11622 11622
-11622 11684 11684
-11684 11726 11726
-11738 11778 11778
-11782 11813 11813
-11813 11850 11850
-11850 11900 12087
-12111 12120 12120
-12120 12129 12129
-12129 12158 12158
-12158 12192 12192
-12192 12237 12237
-12237 12273 12273
-12273 12326 12326
-12330 12366 12366
-12366 12423 12423
-12427 12482 12482
-12486 12560 12560
-12568 12631 12631
-12637 12691 12691
-12691 12743 12743
-12743 12785 12785
-12785 12826 12826
-12826 12865 12865
-12865 12883 12883
-12883 12946 12946
-12956 12995 12995
-13005 13066 13066
-13077 13163 13163
-13163 13211 13211
-13211 13270 13270
-13270 13318 13318
-13318 13350 13350
-13350 13387 13387
-13387 13428 13428
-13428 13464 13533
-13533 13580 13737
-13737 13776 13854
-13854 13913 13913
-13913 13950 13950
-13950 14118 14118
-14118 14150 14150
-14150 14163 14194
-14194 14224 14255
-14255 14275 14319
-14319 14353 14458
-14466 14484 14530
-14534 14567 14567
-14567 14635 14682
-14690 14742 14742
-14742 14789 14789
-14801 14875 14875
-14886 14947 14947
-14947 14992 14992
-14992 15035 15085
-15085 15134 15205
-15214 15267 15448
-15454 15496 16810
-16822 16875 16960
-16972 17053 17179
-17191 17236 17332
-17344 17491 17841
-17853 17939 18304
-18316 18471 18774
-18786 18952 19323
-19335 19364 19496
-19500 19527 19598
-19598 19613 19776
-19797 19808 19837
-19837 19862 19862
-19868 19927 20026
-20034 20075 20179
-20187 20223 20223
-20223 20290 20382
-20392 20441 20589
-20601 20656 20656
-20656 20699 20818
-20826 20860 21038
-21046 21094 21191
-21203 21236 21314
-21326 21395 21457
-21469 21502 21502
-21502 21587 21731
-21756 21789 21864
-21875 21901 21976
-22013 22059 22220
-22257 22397 22561
-22561 22595 22595
-22603 22623 22623
-22631 22667 22828
-22865 22919 22994
-23031 23059 23120
-23132 23201 23201
-23212 23274 23274
-23285 23345 23345
-23356 23393 23393
-23399 23431 23532
-23542 23587 23646
-23656 23697 23745
-23755 23796 23844
-23854 23876 23928
-23942 23971 24153
-24160 24243 24243
-24247 24273 24743
-24755 24784 24984
-24996 25034 25034
-25034 25075 25273
-25281 25332 25410
-25420 25467 25544
-25554 25583 25744
-25754 25783 26061
-26071 26111 26185
-26194 26239 26525
-26535 26568 26914
-26924 26951 26998
-27008 27035 27082
-27093 27120 27167
-27178 27206 27251
-27261 27289 27334
-27345 27391 27931
-27938 27959 28007
-28019 28037 28037
-28043 28069 28069
-28077 28147 28199
-28207 28266 28266
-28274 28306 28306
-28314 28339 28339
-28347 28404 28510
-28518 28567 28682
-28690 28728 28728
-28736 28782 29023
-29033 29085 29234
-29246 29303 29383
-29395 29432 29570
-29592 29631 29644
-29644 29693 29758
-29767 29810 29875
-29875 29911 29976
-29984 30014 30014
-30027 30086 30151
-30157 30223 30293
-30301 30369 30445
-30457 30511 30568
-30580 30630 30743
-30755 30812 30874
-30886 30959 31035
-31043 31076 31175
-31183 31243 31243
-31251 31323 31323
-31331 31433 31433
-31445 31544 31686
-31698 31740 31740
-31740 31783 31783
-31783 31824 31824
-31824 31873 31996
-32008 32056 32164
-32176 32210 32210
-32229 32271 32271
-32279 32323 32569
-32581 32642 32718
-32739 32779 32916
-32926 32953 33047
-33057 33116 33315
-33325 33373 33373
-33373 33407 33469
-33494 33527 33527
-33536 33573 33573
-33584 33650 33697
-33705 33763 33763
-33763 33797 33797
-33797 33829 33906
-33915 33976 33976
-33985 34016 34098
-34098 34133 34198
-34198 34261 34261
-34269 34312 34312
-34324 34363 34438
-34444 34530 34530
-34538 34596 34626
-34636 34675 34754
-34764 34821 34821
-34821 34867 34950
-34959 35016 35135
-35145 35198 35198
-35208 35266 35344
-35355 35382 35537
-35547 35576 35629
-35637 35705 35705
-35713 35764 35764
-35764 35784 35876
-35888 35932 35950
-35950 36013 36138
-36150 36191 36280
-36286 36314 36419
-36431 36516 36516
-36516 36554 36642
-36642 36689 36808
-36818 36881 37105
-37113 37183 37204
-37204 37225 37225
-37225 37255 37348
-37348 37388 37388
-37388 37454 37454
-37454 37518 37518
-37518 37584 37584
-37584 37717 37717
-37717 37752 37752
-37752 37783 37889
-37901 37928 38034
-38046 38115 38115
-38115 38140 38187
-38195 38219 38339
-38351 38422 38422
-38422 38486 38486
-38486 38555 38555
-38555 38619 38619
-38619 38641 38641
-38641 38758 38758
-38758 38929 38929
-38929 38975 39043
-39055 39084 39133
-39133 39175 39265
-39275 39310 39494
-39504 39547 39576
-39587 39614 39668
-39674 39697 39797
-39797 39845 40094
-40094 40158 40264
-40264 40369 40523
-40523 40593 40593
-40593 40629 40876
-40876 40911 40971
-40977 41026 41026
-41038 41077 41077
-41077 41116 41116
-41116 41156 41156
-41156 41195 41195
-41195 41237 41237
-41237 41285 41285
-41285 41304 41304
-41304 41371 41371
-41371 41429 41429
-41429 41491 41491
-41491 41519 41519
-41519 41572 41572
-41572 41642 41642
-41642 41676 41676
-41676 41713 41713
-41713 41751 41751
-41751 41792 41792
-41792 41856 41856
-41856 41881 41881
-41881 41944 41944
-41944 41985 41985
-41985 42026 42026
-42026 42098 42098
-42098 42170 42170
-42170 42213 42213
-42213 42275 42275
-42275 42302 42302
-42302 42317 42317
-42317 42346 42394
-42401 42433 42530
-42538 42585 42585
-42585 42631 42631
-42631 42651 42733
-42733 42756 42756
-42756 42837 42905
-42909 42960 42960
-42960 42986 43033
-43033 43124 43124
-43124 43179 43179
-43179 43212 43384
-43394 43461 43479
-43479 43555 43788
-43806 43929 44124
-44128 44128 44128
-Out of memory: %s
-There is no more memory left in the system for compiling this program.
-Internal Error Unknown Error Message %s
-1) An internal error, while attempting to print an unavailable message
-2) The error message file is inaccessible or has other problems
-Unknown Signal %s
-1) An unknown signal has been caught
-2) 2 Nested signals
-line
-Warning:
-Fatal:
-Source not available
-Too many errors... goodbye.
-There is a limit of 30 errors before aborting.
-Error:
-reserved
-reserved
-Unknown Control Statement
-1) The line begins with a '#' and is not of the form:
- # ""
-2) Please compile this program with the preprocessor enabled.
-Unknown character %s ignored
-The character is not part of the source character set.
-2.2.1
-Unknown control character \%s ignored
-The control character is not part of the source character set.
-2.2.1
-Illegal character %s in exponent
-1) Digits or sign expected after 'e' or 'E'.
-2) Digits are expected after sign in exponent.
-3.1.3.1
-Constant is out of range and may be truncated.
-The constant is too large to be accurately represented and may be
-truncated. The limits are in the system include file limits.h.
-2.2.4.2
-Constant is out of range for a 32-bit data type, but accepted as written.
-The constant is too large to fit in a 32-bit data type, but will be
-accurately represented in a wider data type. The value may be truncated,
-depending on its context. The limits are in the system include file
-limits.h.
-2.2.4.2
-Character constant size out of range
-1) No characters in a character constant.
-2) More than 4 bytes in a character constant.
-3.1.3.4
-Wide character constant size out of range
-1) No characters in the multibyte sequence (0 assumed).
-2) More than 1 byte in the multi-byte sequence (only the first byte was converted).
-3.1.3.4
-Invalid multibyte character
-4.10.7.2
-Newline in string or character constant
-1) Terminate your string or character constant with closing quotes.
-2) Put a backslash before the newline.
-3.1.3.4, 3.1.4
-Octal character escape too large: %s > %s
-1) Terminate end of octal sequence with a non-octal character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Hex character escape too large: %s > %s
-1) Terminate end of hex sequence with a non-hex character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Unexpected End-of-file
-1) Unterminated string or character constant
-2) Missing closing comment marker (*/)
-3) File system problems
-Unrecognized escape sequence in string \%s
-Recognized escape sequences are \a, \b, \f, \n, \r, \t, and \v.
-Character will be treated as un-escaped.
-3.9.2
-Illegal octal digit %s
-Octal constants, beginning with 0, must only have digits between 0 and 7,
-inclusive.
-3.1.3.2
-Unable to open temporary file for compiling %s
-1) TMPDIR environment variable is set to a directory that you have no
- permissions for.
-2) The file system is full.
-3) System errors beyond the scope of the compiler.
-%s: Hangup
-%s: Interrupt
-%s: Quit (ASCII FS)
-%s: Illegal instruction (not reset when caught)
-%s: Trace trap (not reset when caught)
-%s: IOT instruction
-Also SIGABRT, used by abort, replace SIGIOT in the future
-%s: EMT instruction
-Also SIGXCPU, Exceeded CPU time limit
-%s: Floating point exception
-%s: Kill (cannot be caught or ignored)
-%s: Bus error
-%s: Segmentation violation
-%s: Bad argument to system call
-%s: Write on a pipe with no one to read it
-%s: Alarm clock
-%s: Software termination signal from kill
-%s: User defined signal 1
-%s: User defined signal 2
-%s: Death of a child
-Power-fail restart
-%s: Also SIGXFSZ, exceeded file size limit
-%s: Window change
-%s: Handset, line status change
-%s: Sendablestop signalnot from tty
-%s: Stop signal from tty
-%s: Pollable event occurred
-%s: Input/Output possible signal
-%s: Urgent condition on IO channel
-%s: Window size changes
-%s: Virtual time alarm
-%s: Profiling alarm
-%s: Continue a stopped process
-%s: To readers pgrp upon background tty read
-%s: Like TTIN for output if (tp->t_local<OSTOP)
-%s: Resource lost (eg, record-lock)
-'auto' and 'register' are not allowed in an external declaration
-3.7(10)
-must have function type
-3.7.1(30)
-Functions cannot return arrays
-3.7.1(33), 3.3.2.2
-Declaration list not allowed
-3.7.1(5)
-Too many input files %s
-The command line may contain only one file
-cpp internal error: input stack underflow
-cpp internal error: if stack underflow
-Cannot open the file %s
-No new-line character at the end of the file %s
-2.1.1.2(30)
-Fatal: Exceeded the limit of nesting level for #include file
-Fatal: Exceeded the limit of nesting level for #include file. This limit
-is 200.
-Fail to read the file %s
-Cannot write the file %s
-%s: %s: An if directive is not terminated properly in the file
-%s: %s: nested comment
-%s:%s: Illegal macro name %s; macro name shall be an identifier
-%s:%s: Illegal preprocessing token sequence
-3.8.3(35)
-%s:%s: Illegal macro parameter name
-%s:%s: Non-unique macro parameter name
-3.8.3(18)
-%s:%s: Missing ')' in parameter list for #define %s
-%s:%s: Missing ')' in macro instantiation
-%s:%s: Bad punctuator in the parameter list for #define %s
-%s:%s: Macro %s redefined.
-%s:%s: # operator should be followed by a macro argument name
-%s:%s: Badly formed constant expression%s
-3.4(9), 3.8
-%s:%s: Division by zero in #if or #elif
-3.8
-unknown command line option %s
-extraneous input/output file name %s
-%s: %s: Unterminated string or character constant
-A preprocessing string or character constant token was not
-terminated. Note that preprocessing directives are processed
-after the source file has been divided into preprocessing tokens.
-2.1.1.2(30) 3.1(18) 3.8
-%s: %s:
-%s: %s:
-%s: %s: Unterminated comment
-%s: %s: Unknown directive type %s
-%s: %s: #elif or #else after #else directive
-%s: %s: Bad identifier after the %s
-%s: %s: #%s accepts only one identifier as parameter
-3.8
-%s: %s: Bad identifier after the %s
-%s: %s: text following #%s violates the ANSI C standard.
-3.8
-%s: %s: Bad character %s occurs after the # directive.
-3.8
-%s: %s: the ## operator shall not be the %s token in the replacement list
-3.8.3.3
-%s: %s: the defined operator takes identifier as operand only.
-3.8.1
-%s: %s: Not in a conditional directive while using %s
-%s: %s: Illegal filename specification for #include
-%s: %s: Invalid file name %s for #include
-%s: %s: Cannot open file %s for #include
-%s: %s: Bad argument for #line command
-%s: %s: #error %s
-%s: %s: Tried to redefine predefined macro %s, attempt ignored
-3.8.7(22)
-%s: %s: Undefining predefined macro %s
-3.8.7(22)
-%s: %s: Undefined the ANSI standard library defined macro %s
-4.1.2.1(9)
-%s: %s: The number of arguments in the macro invocation does not match the definition
-%s: %s: Illegal character %s in preprocessor if
-%s: %s: Illegal character %s for number in preprocessor if
-%s: %s: No string is allowed in preprocessor if
-%s: %s: Not supported pragma %s
-%s: %s: Not supported #pragma format
-%s: %s: ANSI C does not allow #ident; %s
-%s: %s: Not supported #ident format
-This cpp extension accepts the following format:
-#ident "any string"
-%s: %s: Not supported #assert/#unassert format
-This cpp extension accepts the following format:
-#assert identifier
-#assert identifier ( pp-tokens )
-#unassert identifier
-#unassert identifier ( pp-tokens )
-%s: %s: Bad assertion predicate format
-The correct syntax for this cpp extension is:
-#assert identifier ( pp-token )
-%s: %s: directive is an upward-compatible ANSI C extension
-%s: This option requires an argument
-%s: %s: A macro has expanded recursively more than %s times. Further expansion will be disabled! Use command-line option: -Wp,-max_rec_depth=depth to recurse deeper.
-A status return from cpp to cfe
-Syntax Error
-The token read was unexpected.
-Syntax Error -- cannot backup
-The token read was unexpected.
-Yacc stack overflow
-The expression is too complicated to parse.
-Trailing comma in enumerator list
-The use of a trailing comma in an enumerator list is not standard C. There
-may be portability problems.
-3.5.2.2
-Empty declaration
-Empty declarations are invalid in standard C.
-3.5
-%s declared, but not referenced.
-redeclaration of '%s'; previous declaration at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-'%s' undefined; reoccurrences will not be reported.
-Non-function name referenced in function call.
-3.3.2.2(18)
-The number of arguments doesn't agree with the number in the declaration.
-3.3.2.2(5)
-'%s' section name longer than 8 characters. Name truncated.
-'%s' is already placed by pragma alloc_text.
-Cannot write ucode file while compiling %s
-1) The file system is full
-2) Permissions problem
-Must have corresponding formal argument for '%s'
-Parameter found in the declaration part, but not in the argument list.
-3.7.1(7)
-Non-prototype declaration is an obsolescent feature.
-The use of function definitions with separate parameter identifier
-and declaration lists (not prototype-format parameter type and
-identifier declarators) is an obsolescent feature.
-3.9.5
-Incompatible function declarations for %s
-For two function types to be compatible, both shall specify compatible
-return types. Moreover, the parameter type lists, if both are present,
-shall agree in the number of parameters and in use of the ellipsis
-terminator; corresponding parameters shall have compatible types. If
-one type has a parameter type list and the other type is specified by
-a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions. If one type has a parameter type list and the
-other is specified by a function definition that contains a (possibly
-empty) identifier list, both shall agree in the number of parameters,
-and the type of each prototype parameter shall be compatible with the
-type that results from application of the default argument promotions
-to the type of the corresponding identifier. (For each parameter
-declared with function or array type, its type for these comparisons
-is the one that results from conversion to a pointer type. For each
-parameter declared with qualified type, its type for these comparisons
-is the unqualified version of its declared type.) There you have it!
-3.5.4.3(15)
-Incompatible function return type for this function.
-For two function types to be compatible, both shall specify compatible
-return types.
-3.5.4.3(15)
-The number of parameters for function is different from the previous declaration
-The parameter type lists, if both are present, shall agree in the
-number of parameters and in use of the ellipsis terminator.
-3.5.4.3(15)
-Incompatible type for the function parameter
-If both parameter type lists are present, corresponding
-parameters shall have compatible types.
-3.5.4.3(15)
-Function %s is redeclared with an incompatible argument type (after default argument promotion), which could lead to undefined run-time behaviour.
-The redeclaration could cause arguments at a call site to be passed
-inconsistently with what the function implementation expects, and
-parameters would therefore be accessed erroneously when executing the
-function body. Note that a float argument is promoted to a double
-when passed (potentially through fp registers) to an unprototyped
-function.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, ellipsis terminator not allowed
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the type of each parameter shall be
-compatible with the type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype declaration and non-prototype definition found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other is specified by a
-function definition that contains a (possibly empty) identifier list,
-both shall agree in the number of parameters, and the type of each
-prototype parameter shall be compatible with the type that results
-from application of the default argument promotions to the type of the
-corresponding identifier.
-3.5.4.3(15)
-Empty declaration specifiers
-Standard C requires at least a storage class specifier, type specifier,
-or a type qualifier in declarations. 'extern int' assumed.
-3.5
-Can't write to the file %s
-1) The output file cannot be opened for writing.
-2) Out of file space.
-Duplicate '%s'
-typedef, extern, static, auto, register, const, volatile may not
-appear more than once in the same specifier list or qualifier list.
-Duplicate occurrence ignored.
-3.5.1(10) , 3.5.3(5)
-Null input
-There is nothing to compile.
-Illegal type combination
-3.5.2
-Missing ';' at end of structure / union member declaration
-In standard C, each member declaration must be terminated by a ';'. A
-terminating ';' is assumed.
-3.5.2.1
-Missing member name in structure / union
-In standard C, each member declaration have a member name. The missing
-member is assumed to not exist.
-3.5.2.1
-This variable is initialized twice.
-Neither 'const' or 'volatile' have any effect on function results.
-Qualifiers only apply to expressions designating an object that
-can be altered or examined.
-3.5.3(10)
-An integer constant expression is required here.
-The expression that defines the value of an enumeration constant
-shall be an integral constant expression that has a value
-representable as an int.
-3.5.2.2(28)
-(previous declaration of '%s' at line %s in file '%s')
-Must be an integer type greater than zero.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-Array size cannot be a long long.
-Arrays with more than 2^32 elements are not yet supported.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-bit-field '%s' width is not an integer constant
-The expression that specifies the width of a bit-field shall be an
-integral constant expression.
-3.5.2.1(15)
-bit-field '%s' width is negative
-The expression that specifies the width of a bit-field shall be
-non-negative.
-3.5.2.1(15)
-bit-field '%s' type required to be int, unsigned int, or signed int.
-A bit-field shall have type int, unsigned int, or signed int.
-3.5.2.1(30)
-bit-field %s's type not integer.
-Non-scalar type or pointer type to a non-object for increment or decrement operator.
-The operand of the prefix/postfix increment or decrement operator shall have scalar type; if it is of pointer type, it must point to an object.
-3.3.2.4(37), 3.3.3.1(25)
-Assign value to a function type.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.2.2.1(5)
-Assign value to an array.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for variable of incomplete type.
-The operand of increment and decrement operator shall be a modifiable
-scalar lvalue. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-The left-hand side of the '.' operator must be an addressable lvalue, when a bit-field is not contained within a unit of 32 bits alignment.
-This is a restriction in our implementation, which can be worked
-around by always accessing long long bit-fields indirectly (i.e.
-by means of the '->' operator).
-This expression is not an lvalue.
-3.2.2.1
-Modified an rvalue.
-3.2.2.1
-Change value for constant variable.
-The operand of increment and decrement operators shall be modifiable
-scalar lvalues. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for constant field of a struct or union.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Dereferenced a non-pointer.
-The operand of the unary * operator shall have pointer type.
-3.3.3.2(39)
-The operand of the unary + or - operator shall have arithmetic type.
-3.3.3.3(6)
-The operand of the unary ~ operator shall have integral type.
-3.3.3.3(6)
-The operand of the unary ! operator shall have scalar type.
-3.3.3.3(6)
-Constants must have arithmetic type.
-3.1.3
-Bad type name for cast operator
-The type name for the cast operator should either be void or a
-qualified or unqualified scalar type.
-3.3.4(22)
-Improper cast of non-scalar type expression.
-The operand for the cast operator shall be of scalar type.
-3.3.4(23)
-Cast a pointer into a non-integral type.
-A pointer may be converted to an integral type.
-3.3.4(31)
-Cast a non-integral type into a pointer.
-An integral type may be converted to a pointer.
-3.3.4(31)
-Duplicate member '%s'
-Two members of a struct may not have the same name.
-3.1.2.2(7,25)
-Invalid constant expression.
-Constant expressions shall not contain assignment, increment, decrement,
-function-call, or comma operators, except when they are contained within
-the operand of the sizeof operator.
-3.4(9)
-Constant expressions must be derived from a constant value or a constant
-variable.
-3.4
-Dangerous operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier. This operand is NOT an lvalue, but we let it pass.
-Note that a segmentation error with possible core dump will result
-when the resulting address does not denote a valid (declared)
-storage location. This feature will be discontinued in future
-releases of the compiler!
-3.3.3.2(36)
-Unacceptable operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier.
-3.3.3.2(36)
-'&' before array or function; ignored
-Unacceptable operand of sizeof operator.
-The sizeof operator shall not be applied to an expression that has
-function type or an incomplete type, to the parenthesized name of such
-a type, or to an lvalue that designates a bit-field object.
-3.3.3.4
-Unacceptable operand of a multiplicative operator.
-Each of the operands of a multiplicative operator shall have arithmetic type.
-3.3.5(18)
-Unacceptable operand of the remainder operator
-Each of the operands of the remainder (%) operator shall have integral type.
-3.3.5(18)
-Unacceptable operand of '+'.
-For the + operator, either both operands shall have arithmetic type, or
-one operand shall be a pointer to an object type and the other shall
-have integral type.
-3.3.6(39)
-Unacceptable operand of '-'.
-For the subtraction operator, one of the following shall hold: both operands
-have arithmetic type; operands are pointers to qualified or unqualified
-versions of compatible object types; or the left operand is a pointer
-to an object type and the right operand has integral type.
-3.3.6(39)
-Unacceptable operand of shift operator.
-Each of the operands of bitwise shift operators shall have integral type.
-3.3.7(9)
-Unacceptable operand of relational operator.
-For relational operators, one of the following shall hold: both
-operands have arithmetic type; both operands are pointers to qualified
-or unqualified versions of compatible object types; or both operands
-are pointers to qualified or unqualified versions of compatible
-incomplete types.
-3.3.8(32)
-Unacceptable operand of == or !=
-For the == or != operator, one of the following shall hold: both operands
-are pointers to qualified or unqualified versions of compatible types; one
-operand is a pointer to an object or incomplete type and the other is a
-pointer to a qualified or unqualified version of void; or one operand is
-a pointer and the other is a null pointer constant.
-3.3.9(21)
-Unacceptable operand of &.
-Each of the operands shall have integral type.
-3.3.10(7)
-Unacceptable operand of ^.
-Each of the operands shall have integral type.
-3.3.11(18)
-Unacceptable operand of |.
-Each of the operands shall have integral type.
-3.3.12(30)
-Unacceptable operand of &&.
-Each of the operands shall have scalar type.
-3.3.13(7)
-Unacceptable operand of ||.
-Each of the operands shall have scalar type.
-3.3.14(20)
-Unacceptable operand of conditional operator.
-The first operand of conditional operator shall have scalar type. One
-of the following shall hold for the second and third operands:
-both operands have arithmetic type; both operands have compatible
-structure or union types; both operands have void type; both operands
-are pointers to qualified or unqualified versions of compatible types;
-one operand is a pointer and the other is a null pointer constant; or
-one operand is pointer to an object or incomplete type and the other
-is a pointer to a qualified or unqualified version of void.
-3.3.15
-Duplicate label '%s'
-A label name can only occur once in a function.
-3.1.2.1(25)
-Division by zero.
-3.3.5
-Subscripting a non-array.
-3.3.2.1
-Subscripting an array of incomplete type which is not an object type.
-The element of the array shall have an object type.
-3.3.2.1
-Should only subscript an array with an integral expression
-3.3.2.1
-Subscripting an unbounded array
-3.3.2.1
-Array index out of range
-3.3.2.1
-Selector requires struct/union pointer as left hand side
-In K&R mode the expression is implicitly converted to the '.' selector
-for a struct/union left-hand side.
-3.3.2.3
-Selector requires struct/union as left hand side
-In K&R mode the expression is implicitly converted to the '->' selector
-for a struct/union pointer left-hand side.
-3.3.2.3
-member of structure or union required
-3.3.2.3
-types have different qualifier specifications
-For two qualified types to be compatible, both shall have the
-identically qualified version of a compatible type; qualified
-and unqualified versions of a type are distinct types. For two
-types to be compatible their types must be the same.
-3.5.3(26)
-Incompatible array type due to different array size
-For two array types to be compatible, both shall have compatible element
-types; if both size specifiers are present, they shall have the
-same value.
-3.5.4.2(11)
-Incompatible array type due to incompatible element type
-For two array types to be compatible, both shall have compatible element
-types.
-3.5.4.2(11)
-Incompatible pointer type assignment
-The type pointed to by the left-hand side of simple assignment
-statement is incompatible with the type pointed to by the right-hand side.
-3.3.16.1, 3.5.4.1(21)
-Incompatible base type of pointer type
-K&R feature.
-Type %s of %s is incompatible with type %s of %s
-Incompatible types can be resolved by casting or by other means.
-3.3.16.1
-illegal combination of pointer and integer
-Assigning an integral expression to a pointer is a bad practice.
-Type for %s is incompatible with %s
-Incompatible types can be resolved by casting or by other means.
-3.1.2.6
-Bad operand type for += or -=
-3.3.16.2(26)
-A case or default label appears outside a switch statement
-A case or default label shall appear only in a switch statement.
-3.6.1
-The controlling expression of the if statement is not scalar type
-The controlling expression of an if statement shall have scalar type.
-3.6.4.1
-The controlling expression of switch statement is not integral type
-The controlling expression of an switch statement shall have integral type.
-3.6.4.2(20)
-The case label is not an integral constant expression
-The case label shall be an integral constant expression.
-3.6.4.2(22)
-Duplicate case label in the same switch statement
-No two of the case constant expressions in the same switch statement
-shall have the same value after conversion.
-3.6.4.2(22)
-More than one default label in the same switch statement
-There may be at most one default label in a switch statement.
-3.6.4.2(23)
-The controlling expression of the iteration statement is not scalar
-type
-The controlling expression of a iteration statement shall have scalar
-type.
-3.6.5.1
-label '%s' used, but not defined
-The identifier in a goto statement shall name a label located
-somewhere in the enclosing function.
-3.6.6.1
-A continue statement shall appear only in or as a loop body
-3.6.6.2
-A break statement shall appear only in or as a switch body or loop body
-3.6.6.3
-A return statement with an expression should not appear
-in a function '%s', whose return type is void
-3.6.6.4(24)
-A return statement without an expression appears in a
-function '%s', whose return type is not void
-If a return statement without an expression is executed, and the value
-of the function call is used by the caller, the behavior is undefined.
-3.6.6.4(33)
-Internal Error: statement stack underflow
-Long double not supported; double assumed.
-Long float not standard; double assumed.
-Only 'register' allowed in parameter declaration
-The only storage-class specifier that shall occur in a parameter
-declaration is 'register'; illegal storage class ignored.
-3.5.4.3(25)
-Name(s) without types in a function declaration
-An old-style function declaration is not allowed to have names
-in the parameter list; useless names ignored
-3.5.4.3(26)
-Functions cannot return functions
-3.7.1(33), 3.3.2.2
-Functions cannot return a non-object type
-3.3.2.2
-enum declaration must contain enum literals
-Although structs or unions may delay the declaration of their members,
-a similar construction with enum does not exist and is not necessary,
-as there can be no mutual dependencies between the declaration of an
-enumerated type and any other type.
-3.5.2.3(27)
-Register qualification has no effect for this type of object
-Register declarations for array, struct, and function types have
-no effect.
-3.5.1(16), 3.5.1(19)
-Functions cannot be declared 'register'
-The declaration of an identifier for a function that has block
-scope shall have no explicit storage-class specifier other than
-'extern'.
-3.5.1(19)
-'%s' cannot be initialized
-The type of the entity to be initialized shall be an object type
-or an array of unknown size.
-3.5.7(32)
-Cannot initialize 'extern' variable '%s' within a function
-If the declaration of an identifier has block scope, and the
-identifier has 'extern' or 'static' linkage, the declaration
-shall have no initializer for the identifier; initialization
-allowed anyway.
-3.5.7(35)
-initializing an 'extern' is an ANSI C extension
-conflicting declarations for '%s'
-'static' and 'extern' declarations conflict. Which is meant?
-3.1.2.2(15), 3.1.2.2(27)
-Too many initial values for '%s'
-3.5.7(1)
-incompatible types in initialization
-3.3.16(35)
-redefinition of '%s'; previous definition at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-bit-fields as members of a union are an ANSI C invention.
-storage size for '%s' isn't known
-type mismatch in initialization
-Missing braces in a union initialization or illegally formed
-initialization.
-3.5.7(5)
-union '%s' only allowed one initializer for the first member
-3.5.7(5)
-width of '%s' exceeds its type
-the specified bitfield width is too large to be contained within a
-bitfield type.
-structure has no member named '%s'
-This is allowed for compatibility with AT&T pcc-based compilers.
-Reference of an expression of void type or an incomplete type.
-3.2.2.1
-element size of an array shall not be zero
-3.2.2.5(25)
-invalid combination of type specifiers
-Although order is unimportant, not all type specifiers can occur together.
-3.5.2
-declaration must at least declare an identifier, tag, or the member of an enumeration
-3.5(16)
-at most one storage class may be given in the declaration
-Duplicate occurrence ignored.
-3.5.1(10)
-size of function's return type is zero
-The return type of a function must be void or an object type other than array.
-3.7.1(33)
-Expecting an integral return type from the main function
-identifier missing from parameter declaration
-Prototypes for function definitions require identifiers in parameter
-declarations.
-3.7.1(4)
-only 'register' allowed for storage class for parameters
-The declarations in the declaration list shall contain no storage class
-other than 'register', and no initializations.
-3.7.1(10)
-parameters declarations can not have initializations
-3.7.1(10)
-only one instance of 'void' allowed in the parameter list
-'void' must occur by itself (specifying that the function has no parameters).
-3.5.4.3(1)
-%s must have function type
-1) An argument list must be explicitly present in the declarator; it cannot
- be inherited from a typedef (3.5.4.3).
-2) The declarator is not a function.
-3.7.1(30)
-Illegal hexadecimal constant
-You have no digits after the 0x or 0X. 0x0 assumed.
-3.1.3.2
-value overflows its type in this context. Value is set to be '%s'!
-3.2.1.4
-value is outside range representable for type '%s'
-missing member name
-K&R mode permits a missing member name; otherwise, only bitfields can omit
-the member name.
-3.5.2.1(10)
-useless keyword or type name in declaration
-Type was ignored.
-'%s' declared within and is limited to this function prototype
-Possible program error, since parameter type checking will always fail
-unless the type declaration is visible to the caller.
-3.1.2.1(35)
-Extra spaces within operator, %s assumed
-In ANSI C, the compound assignment operator cannot have embedded
-white space characters.
-3.1.5
-missing size for array '%s'
-Incomplete types permitted for identifiers with internal or
-external linkage, but not automatic linkage.
-3.1.2.5(10)
-can't jump into (from outside of) the body of a 'try' or into either type of handler
-'%s' missing, please #include excpt.h
-excpt.h required to declare exception statements, intrinsics or compiler
-runtime names.
-local function declarations cannot be 'static'
-A function declaration can only contain the storage-class 'static'
-if it is at file scope. Declaration made 'extern'.
-3.5.1(19)
-static function '%s' declared and referenced, but not defined.
-If an identifier declared with internal linkage is used in an
-expression (other than as a part of the operand of a sizeof
-operator), there shall be exactly one external definition for
-the identifier in the translation unit.
-3.7(12)
-pragma argument '%s' must be declared prior to being used in a pragma
-Pragma name ignored.
-Pragma not supported
-'%s' not enabled as intrinsic
-It may have already appeared in a function pragma, or never occurred in
-an intrinsic pragma.
-'%s' is already enabled as an intrinsic
-weak definition for '%s' is later redefined; pragma weak ignored.
-definition of primary name '%s' not found; pragma weak ignored.
-definition of secondary name '%s' not found; pragma weak ignored.
-primary name '%s' is declared as a common or external, and is not defined
-with initial value within this file; pragma weak ignored.
-useless '%s' storage class ignored
-array of functions not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-array of voids not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-argument for pragma pack must be an integer constant; pragma ignored
-'%s' has wrong tag type.
-Identifier redeclared in the same scope/block.
-3.1.2.3
-missing dimension bound
-For multidimensional arrays, the constant bounds of the array may be
-omitted only for the first member of the sequence.
-3.1.2.5(23)
-Internal error in parameters to function substr; loc: '%s'; len: '%s'.
-Internal error in parameters to function insertstr; indx: '%s'.
-Internal error in function get_tag_name; input is a non-tagged type.
-Internal error in function gen_type_str -- not a type tree '%s'
-Cannot open file '%s'
-Prototype should be moved after tag or a typedef declaration.
-Please look for comments in the extracted header file.
-The extracted header file includes prototypes for static functions,
-which should be removed, if you wish to include the header in a source file
-other than the originator.
-ANSI C requires formal parameter before "..."
-This extension is meant to be used for compatibility with varargs.h
-3.5.4.3(35)
-syntax error: "&..." invalid
-extension used to access "..." formal arguments.
-function '%s' initialized like a variable
-The type of entity to be initialized shall be an object type or an
-array of unknown size.
-3.5.7(31)
-initializer not an array aggregate
-The initializer for an object that has aggregate type shall be a
-brace-enclosed list of initializers for the members of the aggregate,
-written in increasing subscript or member order.
-3.5.7(20)
-'%s' type is incomplete; cannot initialize
-Was the struct ever defined?
-3.5.7.(31)
-'%s' is not standard ANSI.
-This keyword/type is not defined in strict ANSI mode.
-3.1.1
-not a legal asm string
-The first operand of an asm string should be, after argument substitution,
-a legal assembly string.
-The -float option will be ignored in ANSI mode.
-The -float option is ignored, since otherwise program semantics would
-violate the ANSI standard. In particular, fp constants are always
-'double' with ANSI-C, while with -float the type of fp constants will
-depend on the context and may be 'float'.
-ANSI C support unavailable with C compiler bundled with RISC/os
-The C compiler bundled with RISC/os does not support ANSI C. ANSI
-C support requires a separate license.
-Ignored invalid warning number(s) in -woff option, %s%s !
-Warning numbers must be in the range %s to %s.
-The set of warning numbers in cfe is disjoint from the set of warning numbers
-in accom, since accom warnings cannot be mapped one-to-one to cfe warnings.
-'%s' not handled as an intrinsic due to incompatible argument types .
-'__unalign' only qualifies pointers
-'__unalign' indicates the object pointed at by pointer is unaligned (e.g.,
-int * __unalign p). This is an extension to ANSI C and like 'volatile'
-and 'const' can follow the '*' in pointer declarations, but unlike both
-cannot qualify a base type.
-index expression is an anachronism
-ANSI C++ doesn't support array index expressions in delete.
-5.3.4
-member cannot be of function or incomplete type.
-3.5.2.1(12)
-Illegal lint option, '%s', is ignored.
-cannot open header message buffer file
-cannot write header message buffer file
-cannot read header message buffer file
-cannot seek in header message buffer file
-struct/union/enum '%s' is used, but not defined
-static '%s' unused
-nonportable character comparison (chars may be signed or unsigned)
-redundant comparison of unsigned with constant expression
-redundant statement, control flow cannot reach this statement
-'%s' may be used before set
-function parameter '%s' is not used in function '%s'
-'%s' can be const qualified, since it is not set within its lifetime.
-'%s' is not used in function '%s'
-'%s' set but unused in function '%s'
-control may fall through %s statement
-function '%s' has return(e); and return;
-function '%s' may return random value to place of invocation %s
-label without goto: '%s'
-only %s bits of '%s' constant (type '%s') are explicitly given
-explicit conversion from '%s' to '%s' %s
-implicit conversion from '%s' to '%s' %s
-'%s' may be indistinguishable from '%s' due to internal name truncation
-Promoted formal parameter and promoted argument have incompatible types
-No prototype for the definition of '%s' %s
-References to '%s' are substituted by its literal initializer
- (as included in %s)
-==============
-unsupported language linkage
-string-literal specifies an unsupported linkage
-7.4(1)
-No prototype for the call to %s
-To achieve better type-checking, there should be a full prototype for
-the function being called.
-3.5.4.3
-'inline' only applies to function declarations
-leave statment can occur only within try body
-Microsoft extension
-Use of a Microsoft extension detected without usage of the
-compiler option -msft.
-No parameter mentioned
-A file with no declarations or definitions is accepted as an extension to ANSI C
-The translation unit must contain at least one external definition.
-3.7
-Incompatible signed and unsigned version of a type
-Yacc initialization error
-Internal error: yacc cannot initialize itself.
-The cfe option %s may not be in future releases. We suggest that you not use this option!
-Incompatible char and unsigned char versions of a type
-Lshift with undefined behaviour.
-Lshift with a negative right operand, or a right operand that is greater
-than or equal to the width in bits of the promoted left operand, results
-in undefined behaviour.
-3.3.7(11)
-useless type name in declaration, possibly a semicolon is missing.
-Type was ignored.
-constant initializer expression is invalid (refers to automatic variables).
-All the expressions in an initializer for an object that has static storage
-duration or in the initializer list for an object that has aggregate or
-union type shall be constant expressions. Otherwise, unexpected results
-may occur.
-3.5.7(32) and 3.4
-invalid explicit or implicit conversion of an address constant to an integral value in a constant initializing expression.
-An address constant in a constant initializing expression can neither
-initialize a bit-field nor be directly or indirectly converted to an
-integral type of size different from an address type.
-6.4
diff --git a/tools/ido_recomp/macos/7.1/ugen b/tools/ido_recomp/macos/7.1/ugen
deleted file mode 100755
index 1e9839b4eb..0000000000
Binary files a/tools/ido_recomp/macos/7.1/ugen and /dev/null differ
diff --git a/tools/ido_recomp/macos/7.1/ujoin b/tools/ido_recomp/macos/7.1/ujoin
deleted file mode 100755
index d2512e9341..0000000000
Binary files a/tools/ido_recomp/macos/7.1/ujoin and /dev/null differ
diff --git a/tools/ido_recomp/macos/7.1/uld b/tools/ido_recomp/macos/7.1/uld
deleted file mode 100755
index a746a8236e..0000000000
Binary files a/tools/ido_recomp/macos/7.1/uld and /dev/null differ
diff --git a/tools/ido_recomp/macos/7.1/umerge b/tools/ido_recomp/macos/7.1/umerge
deleted file mode 100755
index a561c08012..0000000000
Binary files a/tools/ido_recomp/macos/7.1/umerge and /dev/null differ
diff --git a/tools/ido_recomp/macos/7.1/uopt b/tools/ido_recomp/macos/7.1/uopt
deleted file mode 100755
index 30817f201d..0000000000
Binary files a/tools/ido_recomp/macos/7.1/uopt and /dev/null differ
diff --git a/tools/ido_recomp/macos/7.1/usplit b/tools/ido_recomp/macos/7.1/usplit
deleted file mode 100755
index 2472794531..0000000000
Binary files a/tools/ido_recomp/macos/7.1/usplit and /dev/null differ
diff --git a/tools/ido_recomp/windows/5.3/as0.exe b/tools/ido_recomp/windows/5.3/as0.exe
deleted file mode 100755
index 0c49260857..0000000000
Binary files a/tools/ido_recomp/windows/5.3/as0.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/5.3/as1.exe b/tools/ido_recomp/windows/5.3/as1.exe
deleted file mode 100755
index 2d79cc536a..0000000000
Binary files a/tools/ido_recomp/windows/5.3/as1.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/5.3/cc.exe b/tools/ido_recomp/windows/5.3/cc.exe
deleted file mode 100755
index 7c08eac812..0000000000
Binary files a/tools/ido_recomp/windows/5.3/cc.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/5.3/cfe.exe b/tools/ido_recomp/windows/5.3/cfe.exe
deleted file mode 100755
index 2f5de5f18b..0000000000
Binary files a/tools/ido_recomp/windows/5.3/cfe.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/5.3/err.english.cc b/tools/ido_recomp/windows/5.3/err.english.cc
deleted file mode 100644
index 6976e38a95..0000000000
--- a/tools/ido_recomp/windows/5.3/err.english.cc
+++ /dev/null
@@ -1,1260 +0,0 @@
-@
- 358 358 358
- 6464 6482 6553
- 6553 6593 6728
- 6728 6746 6803
- 6803 6808 6808
- 6808 6818 6818
- 6818 6826 6826
- 6826 6847 6847
- 6847 6875 6922
- 6922 6930 6930
- 6930 6939 6939
- 6939 6948 6948
- 6948 6974 7120
- 7120 7149 7204
- 7210 7248 7311
- 7317 7350 7442
- 7450 7497 7627
- 7635 7709 7930
- 7938 7975 8063
- 8071 8113 8253
- 8261 8289 8289
- 8298 8338 8445
- 8460 8502 8635
- 8650 8690 8819
- 8834 8857 8965
- 8965 9008 9113
- 9119 9142 9227
- 9235 9282 9451
- 9451 9462 9462
- 9462 9477 9477
- 9477 9497 9497
- 9497 9545 9545
- 9545 9584 9584
- 9584 9604 9662
- 9662 9682 9720
- 9720 9749 9749
- 9749 9788 9788
- 9788 9802 9802
- 9802 9829 9829
- 9829 9861 9861
- 9861 9904 9904
- 9904 9920 9920
- 9920 9962 9962
- 9962 9988 9988
- 9988 10014 10014
-10014 10035 10035
-10035 10054 10097
-10097 10115 10115
-10115 10147 10147
-10147 10183 10183
-10183 10208 10208
-10208 10236 10236
-10236 10269 10269
-10269 10304 10304
-10304 10328 10328
-10328 10351 10351
-10351 10371 10371
-10371 10402 10402
-10402 10447 10447
-10447 10497 10497
-10497 10533 10533
-10533 10598 10598
-10606 10630 10630
-10640 10671 10671
-10690 10719 10719
-10728 10752 10795
-10795 10837 10837
-10837 10876 10876
-10876 10900 10900
-10900 10948 10948
-10960 11021 11103
-11103 11128 11128
-11128 11153 11153
-11153 11216 11216
-11216 11239 11239
-11239 11303 11303
-11303 11347 11347
-11357 11393 11393
-11393 11432 11432
-11442 11494 11494
-11494 11536 11536
-11536 11595 11595
-11595 11622 11622
-11622 11684 11684
-11684 11726 11726
-11738 11778 11778
-11782 11813 11813
-11813 11850 11850
-11850 11900 12087
-12111 12120 12120
-12120 12129 12129
-12129 12158 12158
-12158 12192 12192
-12192 12237 12237
-12237 12273 12273
-12273 12326 12326
-12330 12366 12366
-12366 12423 12423
-12427 12482 12482
-12486 12560 12560
-12568 12631 12631
-12637 12691 12691
-12691 12743 12743
-12743 12785 12785
-12785 12826 12826
-12826 12865 12865
-12865 12883 12883
-12883 12946 12946
-12956 12995 12995
-13005 13066 13066
-13077 13163 13163
-13163 13211 13211
-13211 13270 13270
-13270 13318 13318
-13318 13350 13350
-13350 13387 13387
-13387 13428 13428
-13428 13464 13533
-13533 13580 13737
-13737 13776 13854
-13854 13913 13913
-13913 13950 13950
-13950 14118 14118
-14118 14150 14150
-14150 14163 14194
-14194 14224 14255
-14255 14275 14319
-14319 14353 14458
-14466 14484 14530
-14534 14567 14567
-14567 14635 14682
-14690 14742 14742
-14742 14789 14789
-14801 14875 14875
-14886 14947 14947
-14947 14992 14992
-14992 15035 15085
-15085 15134 15205
-15214 15267 15448
-15454 15496 16810
-16822 16875 16960
-16972 17053 17179
-17191 17236 17332
-17344 17491 17841
-17853 17939 18304
-18316 18471 18774
-18786 18952 19323
-19335 19364 19496
-19500 19527 19598
-19598 19613 19776
-19797 19808 19837
-19837 19862 19862
-19868 19927 20026
-20034 20075 20179
-20187 20223 20223
-20223 20290 20382
-20392 20441 20589
-20601 20656 20656
-20656 20699 20818
-20826 20860 21038
-21046 21094 21191
-21203 21236 21314
-21326 21395 21457
-21469 21502 21502
-21502 21587 21731
-21756 21789 21864
-21875 21901 21976
-22013 22059 22220
-22257 22397 22561
-22561 22595 22595
-22603 22623 22623
-22631 22667 22828
-22865 22919 22994
-23031 23059 23120
-23132 23201 23201
-23212 23274 23274
-23285 23345 23345
-23356 23393 23393
-23399 23431 23532
-23542 23587 23646
-23656 23697 23745
-23755 23796 23844
-23854 23876 23928
-23942 23971 24153
-24160 24243 24243
-24247 24273 24743
-24755 24784 24984
-24996 25034 25034
-25034 25075 25273
-25281 25332 25410
-25420 25467 25544
-25554 25583 25744
-25754 25783 26061
-26071 26111 26185
-26194 26239 26525
-26535 26568 26914
-26924 26951 26998
-27008 27035 27082
-27093 27120 27167
-27178 27206 27251
-27261 27289 27334
-27345 27391 27931
-27938 27959 28007
-28019 28037 28037
-28043 28069 28069
-28077 28147 28199
-28207 28266 28266
-28274 28306 28306
-28314 28339 28339
-28347 28404 28510
-28518 28567 28682
-28690 28728 28728
-28736 28782 29023
-29033 29085 29234
-29246 29303 29383
-29395 29432 29570
-29592 29631 29644
-29644 29693 29758
-29767 29810 29875
-29875 29911 29976
-29984 30014 30014
-30027 30086 30151
-30157 30223 30293
-30301 30369 30445
-30457 30511 30568
-30580 30630 30743
-30755 30812 30874
-30886 30959 31035
-31043 31076 31175
-31183 31243 31243
-31251 31323 31323
-31331 31433 31433
-31445 31544 31686
-31698 31740 31740
-31740 31783 31783
-31783 31824 31824
-31824 31873 31996
-32008 32056 32164
-32176 32210 32210
-32229 32271 32271
-32279 32323 32569
-32581 32642 32718
-32739 32779 32916
-32926 32953 33047
-33057 33116 33315
-33325 33373 33373
-33373 33407 33469
-33494 33527 33527
-33536 33573 33573
-33584 33650 33697
-33705 33763 33763
-33763 33797 33797
-33797 33829 33906
-33915 33976 33976
-33985 34016 34098
-34098 34133 34198
-34198 34261 34261
-34269 34312 34312
-34324 34363 34438
-34444 34530 34530
-34538 34596 34626
-34636 34675 34754
-34764 34821 34821
-34821 34867 34950
-34959 35016 35135
-35145 35198 35198
-35208 35266 35344
-35355 35382 35537
-35547 35576 35629
-35637 35705 35705
-35713 35764 35764
-35764 35784 35876
-35888 35932 35950
-35950 36013 36138
-36150 36191 36280
-36286 36314 36419
-36431 36516 36516
-36516 36554 36642
-36642 36689 36808
-36818 36881 37105
-37113 37183 37204
-37204 37225 37225
-37225 37255 37348
-37348 37388 37388
-37388 37454 37454
-37454 37518 37518
-37518 37584 37584
-37584 37717 37717
-37717 37752 37752
-37752 37783 37889
-37901 37928 38034
-38046 38115 38115
-38115 38140 38187
-38195 38219 38339
-38351 38422 38422
-38422 38486 38486
-38486 38555 38555
-38555 38619 38619
-38619 38641 38641
-38641 38758 38758
-38758 38929 38929
-38929 38975 39043
-39055 39084 39133
-39133 39175 39265
-39275 39310 39494
-39504 39547 39576
-39587 39614 39668
-39674 39697 39797
-39797 39845 40094
-40094 40158 40264
-40264 40369 40523
-40523 40593 40593
-40593 40629 40876
-40876 40911 40971
-40977 41026 41026
-41038 41077 41077
-41077 41116 41116
-41116 41156 41156
-41156 41195 41195
-41195 41237 41237
-41237 41285 41285
-41285 41304 41304
-41304 41371 41371
-41371 41429 41429
-41429 41491 41491
-41491 41519 41519
-41519 41572 41572
-41572 41642 41642
-41642 41676 41676
-41676 41713 41713
-41713 41751 41751
-41751 41792 41792
-41792 41856 41856
-41856 41881 41881
-41881 41936 41936
-41936 41977 41977
-41977 42018 42018
-42018 42090 42090
-42090 42162 42162
-42162 42205 42205
-42205 42267 42267
-42267 42294 42294
-42294 42309 42309
-42309 42338 42386
-42393 42425 42522
-42530 42577 42577
-42577 42623 42623
-42623 42643 42725
-42725 42748 42748
-42748 42829 42897
-42901 42952 42952
-42952 42978 43025
-43025 43116 43116
-43116 43171 43171
-43171 43204 43376
-43386 43453 43471
-43471 43547 43780
-43798 43921 44116
-44120 44120 44120
-Out of memory: %s
-There is no more memory left in the system for compiling this program.
-Internal Error Unknown Error Message %s
-1) An internal error, while attempting to print an unavailable message
-2) The error message file is inaccessible or has other problems
-Unknown Signal %s
-1) An unknown signal has been caught
-2) 2 Nested signals
-line
-Warning:
-Fatal:
-Source not available
-Too many errors... goodbye.
-There is a limit of 30 errors before aborting.
-Error:
-reserved
-reserved
-Unknown Control Statement
-1) The line begins with a '#' and is not of the form:
- # ""
-2) Please compile this program with the preprocessor enabled.
-Unknown character %s ignored
-The character is not part of the source character set.
-2.2.1
-Unknown control character \%s ignored
-The control character is not part of the source character set.
-2.2.1
-Illegal character %s in exponent
-1) Digits or sign expected after 'e' or 'E'.
-2) Digits are expected after sign in exponent.
-3.1.3.1
-Constant is out of range and may be truncated.
-The constant is too large to be accurately represented and may be
-truncated. The limits are in the system include file limits.h.
-2.2.4.2
-Constant is out of range for a 32-bit data type, but accepted as written.
-The constant is too large to fit in a 32-bit data type, but will be
-accurately represented in a wider data type. The value may be truncated,
-depending on its context. The limits are in the system include file
-limits.h.
-2.2.4.2
-Character constant size out of range
-1) No characters in a character constant.
-2) More than 4 bytes in a character constant.
-3.1.3.4
-Wide character constant size out of range
-1) No characters in the multibyte sequence (0 assumed).
-2) More than 1 byte in the multi-byte sequence (only the first byte was converted).
-3.1.3.4
-Invalid multibyte character
-4.10.7.2
-Newline in string or character constant
-1) Terminate your string or character constant with closing quotes.
-2) Put a backslash before the newline.
-3.1.3.4, 3.1.4
-Octal character escape too large: %s > %s
-1) Terminate end of octal sequence with a non-octal character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Hex character escape too large: %s > %s
-1) Terminate end of hex sequence with a non-hex character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Unexpected End-of-file
-1) Unterminated string or character constant
-2) Missing closing comment marker (*/)
-3) File system problems
-Unrecognized escape sequence in string \%s
-Recognized escape sequences are \a, \b, \f, \n, \r, \t, and \v.
-Character will be treated as un-escaped.
-3.9.2
-Illegal octal digit %s
-Octal constants, beginning with 0, must only have digits between 0 and 7,
-inclusive.
-3.1.3.2
-Unable to open temporary file for compiling %s
-1) TMPDIR environment variable is set to a directory that you have no
- permissions for.
-2) The file system is full.
-3) System errors beyond the scope of the compiler.
-%s: Hangup
-%s: Interrupt
-%s: Quit (ASCII FS)
-%s: Illegal instruction (not reset when caught)
-%s: Trace trap (not reset when caught)
-%s: IOT instruction
-Also SIGABRT, used by abort, replace SIGIOT in the future
-%s: EMT instruction
-Also SIGXCPU, Exceeded CPU time limit
-%s: Floating point exception
-%s: Kill (cannot be caught or ignored)
-%s: Bus error
-%s: Segmentation violation
-%s: Bad argument to system call
-%s: Write on a pipe with no one to read it
-%s: Alarm clock
-%s: Software termination signal from kill
-%s: User defined signal 1
-%s: User defined signal 2
-%s: Death of a child
-Power-fail restart
-%s: Also SIGXFSZ, exceeded file size limit
-%s: Window change
-%s: Handset, line status change
-%s: Sendablestop signalnot from tty
-%s: Stop signal from tty
-%s: Pollable event occurred
-%s: Input/Output possible signal
-%s: Urgent condition on IO channel
-%s: Window size changes
-%s: Virtual time alarm
-%s: Profiling alarm
-%s: Continue a stopped process
-%s: To readers pgrp upon background tty read
-%s: Like TTIN for output if (tp->t_local<OSTOP)
-%s: Resource lost (eg, record-lock)
-'auto' and 'register' are not allowed in an external declaration
-3.7(10)
-must have function type
-3.7.1(30)
-Functions cannot return arrays
-3.7.1(33), 3.3.2.2
-Declaration list not allowed
-3.7.1(5)
-Too many input files %s
-The command line may contain only one file
-cpp internal error: input stack underflow
-cpp internal error: if stack underflow
-Cannot open the file %s
-No new-line character at the end of the file %s
-2.1.1.2(30)
-Fatal: Exceeded the limit of nesting level for #include file
-Fatal: Exceeded the limit of nesting level for #include file. This limit
-is 200.
-Fail to read the file %s
-Cannot write the file %s
-%s: %s: An if directive is not terminated properly in the file
-%s: %s: nested comment
-%s:%s: Illegal macro name %s; macro name shall be an identifier
-%s:%s: Illegal preprocessing token sequence
-3.8.3(35)
-%s:%s: Illegal macro parameter name
-%s:%s: Non-unique macro parameter name
-3.8.3(18)
-%s:%s: Missing ')' in parameter list for #define %s
-%s:%s: Missing ')' in macro instantiation
-%s:%s: Bad punctuator in the parameter list for #define %s
-%s:%s: Macro %s redefined.
-%s:%s: # operator should be followed by a macro argument name
-%s:%s: Badly formed constant expression%s
-3.4(9), 3.8
-%s:%s: Division by zero in #if or #elif
-3.8
-unknown command line option %s
-extraneous input/output file name %s
-%s: %s: Unterminated string or character constant
-A preprocessing string or character constant token was not
-terminated. Note that preprocessing directives are processed
-after the source file has been divided into preprocessing tokens.
-2.1.1.2(30) 3.1(18) 3.8
-%s: %s:
-%s: %s:
-%s: %s: Unterminated comment
-%s: %s: Unknown directive type %s
-%s: %s: #elif or #else after #else directive
-%s: %s: Bad identifier after the %s
-%s: %s: #%s accepts only one identifier as parameter
-3.8
-%s: %s: Bad identifier after the %s
-%s: %s: text following #%s violates the ANSI C standard.
-3.8
-%s: %s: Bad character %s occurs after the # directive.
-3.8
-%s: %s: the ## operator shall not be the %s token in the replacement list
-3.8.3.3
-%s: %s: the defined operator takes identifier as operand only.
-3.8.1
-%s: %s: Not in a conditional directive while using %s
-%s: %s: Illegal filename specification for #include
-%s: %s: Invalid file name %s for #include
-%s: %s: Cannot open file %s for #include
-%s: %s: Bad argument for #line command
-%s: %s: #error %s
-%s: %s: Tried to redefine predefined macro %s, attempt ignored
-3.8.7(22)
-%s: %s: Undefining predefined macro %s
-3.8.7(22)
-%s: %s: Undefined the ANSI standard library defined macro %s
-4.1.2.1(9)
-%s: %s: The number of arguments in the macro invocation does not match the definition
-%s: %s: Illegal character %s in preprocessor if
-%s: %s: Illegal character %s for number in preprocessor if
-%s: %s: No string is allowed in preprocessor if
-%s: %s: Not supported pragma %s
-%s: %s: Not supported #pragma format
-%s: %s: ANSI C does not allow #ident; %s
-%s: %s: Not supported #ident format
-This cpp extension accepts the following format:
-#ident "any string"
-%s: %s: Not supported #assert/#unassert format
-This cpp extension accepts the following format:
-#assert identifier
-#assert identifier ( pp-tokens )
-#unassert identifier
-#unassert identifier ( pp-tokens )
-%s: %s: Bad assertion predicate format
-The correct syntax for this cpp extension is:
-#assert identifier ( pp-token )
-%s: %s: directive is an upward-compatible ANSI C extension
-%s: This option requires an argument
-%s: %s: A macro has expanded recursively more than %s times. Further expansion will be disabled! Use command-line option: -Wp,-max_rec_depth=depth to recurse deeper.
-A status return from cpp to cfe
-Syntax Error
-The token read was unexpected.
-Syntax Error -- cannot backup
-The token read was unexpected.
-Yacc stack overflow
-The expression is too complicated to parse.
-Trailing comma in enumerator list
-The use of a trailing comma in an enumerator list is not standard C. There
-may be portability problems.
-3.5.2.2
-Empty declaration
-Empty declarations are invalid in standard C.
-3.5
-%s declared, but not referenced.
-redeclaration of '%s'; previous declaration at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-'%s' undefined; reoccurrences will not be reported.
-Non-function name referenced in function call.
-3.3.2.2(18)
-The number of arguments doesn't agree with the number in the declaration.
-3.3.2.2(5)
-'%s' section name longer than 8 characters. Name truncated.
-'%s' is already placed by pragma alloc_text.
-Cannot write ucode file while compiling %s
-1) The file system is full
-2) Permissions problem
-Must have corresponding formal argument for '%s'
-Parameter found in the declaration part, but not in the argument list.
-3.7.1(7)
-Non-prototype declaration is an obsolescent feature.
-The use of function definitions with separate parameter identifier
-and declaration lists (not prototype-format parameter type and
-identifier declarators) is an obsolescent feature.
-3.9.5
-Incompatible function declarations for %s
-For two function types to be compatible, both shall specify compatible
-return types. Moreover, the parameter type lists, if both are present,
-shall agree in the number of parameters and in use of the ellipsis
-terminator; corresponding parameters shall have compatible types. If
-one type has a parameter type list and the other type is specified by
-a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions. If one type has a parameter type list and the
-other is specified by a function definition that contains a (possibly
-empty) identifier list, both shall agree in the number of parameters,
-and the type of each prototype parameter shall be compatible with the
-type that results from application of the default argument promotions
-to the type of the corresponding identifier. (For each parameter
-declared with function or array type, its type for these comparisons
-is the one that results from conversion to a pointer type. For each
-parameter declared with qualified type, its type for these comparisons
-is the unqualified version of its declared type.) There you have it!
-3.5.4.3(15)
-Incompatible function return type for this function.
-For two function types to be compatible, both shall specify compatible
-return types.
-3.5.4.3(15)
-The number of parameters for function is different from the previous declaration
-The parameter type lists, if both are present, shall agree in the
-number of parameters and in use of the ellipsis terminator.
-3.5.4.3(15)
-Incompatible type for the function parameter
-If both parameter type lists are present, corresponding
-parameters shall have compatible types.
-3.5.4.3(15)
-Function %s is redeclared with an incompatible argument type (after default argument promotion), which could lead to undefined run-time behaviour.
-The redeclaration could cause arguments at a call site to be passed
-inconsistently with what the function implementation expects, and
-parameters would therefore be accessed erroneously when executing the
-function body. Note that a float argument is promoted to a double
-when passed (potentially through fp registers) to an unprototyped
-function.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, ellipsis terminator not allowed
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the type of each parameter shall be
-compatible with the type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype declaration and non-prototype definition found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other is specified by a
-function definition that contains a (possibly empty) identifier list,
-both shall agree in the number of parameters, and the type of each
-prototype parameter shall be compatible with the type that results
-from application of the default argument promotions to the type of the
-corresponding identifier.
-3.5.4.3(15)
-Empty declaration specifiers
-Standard C requires at least a storage class specifier, type specifier,
-or a type qualifier in declarations. 'extern int' assumed.
-3.5
-Can't write to the file %s
-1) The output file cannot be opened for writing.
-2) Out of file space.
-Duplicate '%s'
-typedef, extern, static, auto, register, const, volatile may not
-appear more than once in the same specifier list or qualifier list.
-Duplicate occurrence ignored.
-3.5.1(10) , 3.5.3(5)
-Null input
-There is nothing to compile.
-Illegal type combination
-3.5.2
-Missing ';' at end of structure / union member declaration
-In standard C, each member declaration must be terminated by a ';'. A
-terminating ';' is assumed.
-3.5.2.1
-Missing member name in structure / union
-In standard C, each member declaration have a member name. The missing
-member is assumed to not exist.
-3.5.2.1
-This variable is initialized twice.
-Neither 'const' or 'volatile' have any effect on function results.
-Qualifiers only apply to expressions designating an object that
-can be altered or examined.
-3.5.3(10)
-An integer constant expression is required here.
-The expression that defines the value of an enumeration constant
-shall be an integral constant expression that has a value
-representable as an int.
-3.5.2.2(28)
-(previous declaration of '%s' at line %s in file '%s')
-Must be an integer type greater than zero.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-Array size cannot be a long long.
-Arrays with more than 2^32 elements are not yet supported.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-bit-field '%s' width is not an integer constant
-The expression that specifies the width of a bit-field shall be an
-integral constant expression.
-3.5.2.1(15)
-bit-field '%s' width is negative
-The expression that specifies the width of a bit-field shall be
-non-negative.
-3.5.2.1(15)
-bit-field '%s' type required to be int, unsigned int, or signed int.
-A bit-field shall have type int, unsigned int, or signed int.
-3.5.2.1(30)
-bit-field %s's type not integer.
-Non-scalar type or pointer type to a non-object for increment or decrement operator.
-The operand of the prefix/postfix increment or decrement operator shall have scalar type; if it is of pointer type, it must point to an object.
-3.3.2.4(37), 3.3.3.1(25)
-Assign value to a function type.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.2.2.1(5)
-Assign value to an array.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for variable of incomplete type.
-The operand of increment and decrement operator shall be a modifiable
-scalar lvalue. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-The left-hand side of the '.' operator must be an addressable lvalue, when a bit-field is not contained within a unit of 32 bits alignment.
-This is a restriction in our implementation, which can be worked
-around by always accessing long long bit-fields indirectly (i.e.
-by means of the '->' operator).
-This expression is not an lvalue.
-3.2.2.1
-Modified an rvalue.
-3.2.2.1
-Change value for constant variable.
-The operand of increment and decrement operators shall be modifiable
-scalar lvalues. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for constant field of a struct or union.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Dereferenced a non-pointer.
-The operand of the unary * operator shall have pointer type.
-3.3.3.2(39)
-The operand of the unary + or - operator shall have arithmetic type.
-3.3.3.3(6)
-The operand of the unary ~ operator shall have integral type.
-3.3.3.3(6)
-The operand of the unary ! operator shall have scalar type.
-3.3.3.3(6)
-Constants must have arithmetic type.
-3.1.3
-Bad type name for cast operator
-The type name for the cast operator should either be void or a
-qualified or unqualified scalar type.
-3.3.4(22)
-Improper cast of non-scalar type expression.
-The operand for the cast operator shall be of scalar type.
-3.3.4(23)
-Cast a pointer into a non-integral type.
-A pointer may be converted to an integral type.
-3.3.4(31)
-Cast a non-integral type into a pointer.
-An integral type may be converted to a pointer.
-3.3.4(31)
-Duplicate member '%s'
-Two members of a struct may not have the same name.
-3.1.2.2(7,25)
-Invalid constant expression.
-Constant expressions shall not contain assignment, increment, decrement,
-function-call, or comma operators, except when they are contained within
-the operand of the sizeof operator.
-3.4(9)
-Constant expressions must be derived from a constant value or a constant
-variable.
-3.4
-Dangerous operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier. This operand is NOT an lvalue, but we let it pass.
-Note that a segmentation error with possible core dump will result
-when the resulting address does not denote a valid (declared)
-storage location. This feature will be discontinued in future
-releases of the compiler!
-3.3.3.2(36)
-Unacceptable operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier.
-3.3.3.2(36)
-'&' before array or function; ignored
-Unacceptable operand of sizeof operator.
-The sizeof operator shall not be applied to an expression that has
-function type or an incomplete type, to the parenthesized name of such
-a type, or to an lvalue that designates a bit-field object.
-3.3.3.4
-Unacceptable operand of a multiplicative operator.
-Each of the operands of a multiplicative operator shall have arithmetic type.
-3.3.5(18)
-Unacceptable operand of the remainder operator
-Each of the operands of the remainder (%) operator shall have integral type.
-3.3.5(18)
-Unacceptable operand of '+'.
-For the + operator, either both operands shall have arithmetic type, or
-one operand shall be a pointer to an object type and the other shall
-have integral type.
-3.3.6(39)
-Unacceptable operand of '-'.
-For the subtraction operator, one of the following shall hold: both operands
-have arithmetic type; operands are pointers to qualified or unqualified
-versions of compatible object types; or the left operand is a pointer
-to an object type and the right operand has integral type.
-3.3.6(39)
-Unacceptable operand of shift operator.
-Each of the operands of bitwise shift operators shall have integral type.
-3.3.7(9)
-Unacceptable operand of relational operator.
-For relational operators, one of the following shall hold: both
-operands have arithmetic type; both operands are pointers to qualified
-or unqualified versions of compatible object types; or both operands
-are pointers to qualified or unqualified versions of compatible
-incomplete types.
-3.3.8(32)
-Unacceptable operand of == or !=
-For the == or != operator, one of the following shall hold: both operands
-are pointers to qualified or unqualified versions of compatible types; one
-operand is a pointer to an object or incomplete type and the other is a
-pointer to a qualified or unqualified version of void; or one operand is
-a pointer and the other is a null pointer constant.
-3.3.9(21)
-Unacceptable operand of &.
-Each of the operands shall have integral type.
-3.3.10(7)
-Unacceptable operand of ^.
-Each of the operands shall have integral type.
-3.3.11(18)
-Unacceptable operand of |.
-Each of the operands shall have integral type.
-3.3.12(30)
-Unacceptable operand of &&.
-Each of the operands shall have scalar type.
-3.3.13(7)
-Unacceptable operand of ||.
-Each of the operands shall have scalar type.
-3.3.14(20)
-Unacceptable operand of conditional operator.
-The first operand of conditional operator shall have scalar type. One
-of the following shall hold for the second and third operands:
-both operands have arithmetic type; both operands have compatible
-structure or union types; both operands have void type; both operands
-are pointers to qualified or unqualified versions of compatible types;
-one operand is a pointer and the other is a null pointer constant; or
-one operand is pointer to an object or incomplete type and the other
-is a pointer to a qualified or unqualified version of void.
-3.3.15
-Duplicate label '%s'
-A label name can only occur once in a function.
-3.1.2.1(25)
-Division by zero.
-3.3.5
-Subscripting a non-array.
-3.3.2.1
-Subscripting an array of incomplete type which is not an object type.
-The element of the array shall have an object type.
-3.3.2.1
-Should only subscript an array with an integral expression
-3.3.2.1
-Subscripting an unbounded array
-3.3.2.1
-Array index out of range
-3.3.2.1
-Selector requires struct/union pointer as left hand side
-In K&R mode the expression is implicitly converted to the '.' selector
-for a struct/union left-hand side.
-3.3.2.3
-Selector requires struct/union as left hand side
-In K&R mode the expression is implicitly converted to the '->' selector
-for a struct/union pointer left-hand side.
-3.3.2.3
-member of structure or union required
-3.3.2.3
-types have different qualifier specifications
-For two qualified types to be compatible, both shall have the
-identically qualified version of a compatible type; qualified
-and unqualified versions of a type are distinct types. For two
-types to be compatible their types must be the same.
-3.5.3(26)
-Incompatible array type due to different array size
-For two array types to be compatible, both shall have compatible element
-types; if both size specifiers are present, they shall have the
-same value.
-3.5.4.2(11)
-Incompatible array type due to incompatible element type
-For two array types to be compatible, both shall have compatible element
-types.
-3.5.4.2(11)
-Incompatible pointer type assignment
-The type pointed to by the left-hand side of simple assignment
-statement is incompatible with the type pointed to by the right-hand side.
-3.3.16.1, 3.5.4.1(21)
-Incompatible base type of pointer type
-K&R feature.
-Type %s of %s is incompatible with type %s of %s
-Incompatible types can be resolved by casting or by other means.
-3.3.16.1
-illegal combination of pointer and integer
-Assigning an integral expression to a pointer is a bad practice.
-Type for %s is incompatible with %s
-Incompatible types can be resolved by casting or by other means.
-3.1.2.6
-Bad operand type for += or -=
-3.3.16.2(26)
-A case or default label appears outside a switch statement
-A case or default label shall appear only in a switch statement.
-3.6.1
-The controlling expression of the if statement is not scalar type
-The controlling expression of an if statement shall have scalar type.
-3.6.4.1
-The controlling expression of switch statement is not integral type
-The controlling expression of an switch statement shall have integral type.
-3.6.4.2(20)
-The case label is not an integral constant expression
-The case label shall be an integral constant expression.
-3.6.4.2(22)
-Duplicate case label in the same switch statement
-No two of the case constant expressions in the same switch statement
-shall have the same value after conversion.
-3.6.4.2(22)
-More than one default label in the same switch statement
-There may be at most one default label in a switch statement.
-3.6.4.2(23)
-The controlling expression of the iteration statement is not scalar
-type
-The controlling expression of a iteration statement shall have scalar
-type.
-3.6.5.1
-label '%s' used, but not defined
-The identifier in a goto statement shall name a label located
-somewhere in the enclosing function.
-3.6.6.1
-A continue statement shall appear only in or as a loop body
-3.6.6.2
-A break statement shall appear only in or as a switch body or loop body
-3.6.6.3
-A return statement with an expression should not appear
-in a function '%s', whose return type is void
-3.6.6.4(24)
-A return statement without an expression appears in a
-function '%s', whose return type is not void
-If a return statement without an expression is executed, and the value
-of the function call is used by the caller, the behavior is undefined.
-3.6.6.4(33)
-Internal Error: statement stack underflow
-Long double not supported; double assumed.
-Long float not standard; double assumed.
-Only 'register' allowed in parameter declaration
-The only storage-class specifier that shall occur in a parameter
-declaration is 'register'; illegal storage class ignored.
-3.5.4.3(25)
-Name(s) without types in a function declaration
-An old-style function declaration is not allowed to have names
-in the parameter list; useless names ignored
-3.5.4.3(26)
-Functions cannot return functions
-3.7.1(33), 3.3.2.2
-Functions cannot return a non-object type
-3.3.2.2
-enum declaration must contain enum literals
-Although structs or unions may delay the declaration of their members,
-a similar construction with enum does not exist and is not necessary,
-as there can be no mutual dependencies between the declaration of an
-enumerated type and any other type.
-3.5.2.3(27)
-Register qualification has no effect for this type of object
-Register declarations for array, struct, and function types have
-no effect.
-3.5.1(16), 3.5.1(19)
-Functions cannot be declared 'register'
-The declaration of an identifier for a function that has block
-scope shall have no explicit storage-class specifier other than
-'extern'.
-3.5.1(19)
-'%s' cannot be initialized
-The type of the entity to be initialized shall be an object type
-or an array of unknown size.
-3.5.7(32)
-Cannot initialize 'extern' variable '%s' within a function
-If the declaration of an identifier has block scope, and the
-identifier has 'extern' or 'static' linkage, the declaration
-shall have no initializer for the identifier; initialization
-allowed anyway.
-3.5.7(35)
-initializing an 'extern' is an ANSI C extension
-conflicting declarations for '%s'
-'static' and 'extern' declarations conflict. Which is meant?
-3.1.2.2(15), 3.1.2.2(27)
-Too many initial values for '%s'
-3.5.7(1)
-incompatible types in initialization
-3.3.16(35)
-redefinition of '%s'; previous definition at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-bit-fields as members of a union are an ANSI C invention.
-storage size for '%s' isn't known
-type mismatch in initialization
-Missing braces in a union initialization or illegally formed
-initialization.
-3.5.7(5)
-union '%s' only allowed one initializer for the first member
-3.5.7(5)
-width of '%s' exceeds its type
-the specified bitfield width is too large to be contained within a
-bitfield type.
-structure has no member named '%s'
-This is allowed for compatibility with AT&T pcc-based compilers.
-Reference of an expression of void type or an incomplete type.
-3.2.2.1
-element size of an array shall not be zero
-3.2.2.5(25)
-invalid combination of type specifiers
-Although order is unimportant, not all type specifiers can occur together.
-3.5.2
-declaration must at least declare an identifier, tag, or the member of an enumeration
-3.5(16)
-at most one storage class may be given in the declaration
-Duplicate occurrence ignored.
-3.5.1(10)
-size of function's return type is zero
-The return type of a function must be void or an object type other than array.
-3.7.1(33)
-Expecting an integral return type from the main function
-identifier missing from parameter declaration
-Prototypes for function definitions require identifiers in parameter
-declarations.
-3.7.1(4)
-only 'register' allowed for storage class for parameters
-The declarations in the declaration list shall contain no storage class
-other than 'register', and no initializations.
-3.7.1(10)
-parameters declarations can not have initializations
-3.7.1(10)
-only one instance of 'void' allowed in the parameter list
-'void' must occur by itself (specifying that the function has no parameters).
-3.5.4.3(1)
-%s must have function type
-1) An argument list must be explicitly present in the declarator; it cannot
- be inherited from a typedef (3.5.4.3).
-2) The declarator is not a function.
-3.7.1(30)
-Illegal hexadecimal constant
-You have no digits after the 0x or 0X. 0x0 assumed.
-3.1.3.2
-value overflows its type in this context. Value is set to be '%s'!
-3.2.1.4
-value is outside range representable for type '%s'
-missing member name
-K&R mode permits a missing member name; otherwise, only bitfields can omit
-the member name.
-3.5.2.1(10)
-useless keyword or type name in declaration
-Type was ignored.
-'%s' declared within and is limited to this function prototype
-Possible program error, since parameter type checking will always fail
-unless the type declaration is visible to the caller.
-3.1.2.1(35)
-Extra spaces within operator, %s assumed
-In ANSI C, the compound assignment operator cannot have embedded
-white space characters.
-3.1.5
-missing size for array '%s'
-Incomplete types permitted for identifiers with internal or
-external linkage, but not automatic linkage.
-3.1.2.5(10)
-can't jump into (from outside of) the body of a 'try' or into either type of handler
-'%s' missing, please #include excpt.h
-excpt.h required to declare exception statements, intrinsics or compiler
-runtime names.
-local function declarations cannot be 'static'
-A function declaration can only contain the storage-class 'static'
-if it is at file scope. Declaration made 'extern'.
-3.5.1(19)
-static function '%s' declared and referenced, but not defined.
-If an identifier declared with internal linkage is used in an
-expression (other than as a part of the operand of a sizeof
-operator), there shall be exactly one external definition for
-the identifier in the translation unit.
-3.7(12)
-pragma argument '%s' must be declared prior to being used in a pragma
-Pragma name ignored.
-Pragma not supported
-'%s' not enabled as intrinsic
-It may have already appeared in a function pragma, or never occurred in
-an intrinsic pragma.
-'%s' is already enabled as an intrinsic
-weak definition for '%s' is later redefined; pragma weak ignored.
-definition of primary name '%s' not found; pragma weak ignored.
-definition of secondary name '%s' not found; pragma weak ignored.
-primary name '%s' is declared as a common or external, and is not defined
-with initial value within this file; pragma weak ignored.
-useless '%s' storage class ignored
-array of functions not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-array of voids not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-argument for pragma pack must be an integer constant; pragma ignored
-'%s' has wrong tag type.
-Identifier redeclared in the same scope/block.
-3.1.2.3
-missing dimension bound
-For multidimensional arrays, the constant bounds of the array may be
-omitted only for the first member of the sequence.
-3.1.2.5(23)
-Internal error in parameters to function substr; loc: '%s'; len: '%s'.
-Internal error in parameters to function insertstr; indx: '%s'.
-Internal error in function get_tag_name; input is a non-tagged type.
-Internal error in function gen_type_str -- not a type tree '%s'
-Cannot open file '%s'
-Prototype should be moved after tag or a typedef declaration.
-Please look for comments in the extracted header file.
-The extracted header file includes prototypes for static functions,
-which should be removed, if you wish to include the header in a source file
-other than the originator.
-ANSI C requires formal parameter before "..."
-This extension is meant to be used for compatibility with varargs.h
-3.5.4.3(35)
-syntax error: "&..." invalid
-extension used to access "..." formal arguments.
-function '%s' initialized like a variable
-The type of entity to be initialized shall be an object type or an
-array of unknown size.
-3.5.7(31)
-initializer not an array aggregate
-The initializer for an object that has aggregate type shall be a
-brace-enclosed list of initializers for the members of the aggregate,
-written in increasing subscript or member order.
-3.5.7(20)
-'%s' type is incomplete; cannot initialize
-Was the struct ever defined?
-3.5.7.(31)
-'%s' is not standard ANSI.
-This keyword/type is not defined in strict ANSI mode.
-3.1.1
-not a legal asm string
-The first operand of an asm string should be, after argument substitution,
-a legal assembly string.
-The -float option will be ignored in ANSI mode.
-The -float option is ignored, since otherwise program semantics would
-violate the ANSI standard. In particular, fp constants are always
-'double' with ANSI-C, while with -float the type of fp constants will
-depend on the context and may be 'float'.
-ANSI C support unavailable with C compiler bundled with RISC/os
-The C compiler bundled with RISC/os does not support ANSI C. ANSI
-C support requires a separate license.
-Ignored invalid warning number(s) in -woff option, %s%s !
-Warning numbers must be in the range %s to %s.
-The set of warning numbers in cfe is disjoint from the set of warning numbers
-in accom, since accom warnings cannot be mapped one-to-one to cfe warnings.
-'%s' not handled as an intrinsic due to incompatible argument types .
-'__unalign' only qualifies pointers
-'__unalign' indicates the object pointed at by pointer is unaligned (e.g.,
-int * __unalign p). This is an extension to ANSI C and like 'volatile'
-and 'const' can follow the '*' in pointer declarations, but unlike both
-cannot qualify a base type.
-index expression is an anachronism
-ANSI C++ doesn't support array index expressions in delete.
-5.3.4
-member cannot be of function or incomplete type.
-3.5.2.1(12)
-Illegal lint option, '%s', is ignored.
-cannot open header message buffer file
-cannot write header message buffer file
-cannot read header message buffer file
-cannot seek in header message buffer file
-struct/union/enum '%s' is used, but not defined
-static '%s' unused
-nonportable character comparison (chars may be signed or unsigned)
-redundant comparison of unsigned with constant expression
-redundant statement, control flow cannot reach this statement
-'%s' may be used before set
-function parameter '%s' is not used in function '%s'
-'%s' can be const qualified, since it is not set within its lifetime.
-'%s' is not used in function '%s'
-'%s' set but unused in function '%s'
-control may fall through %s statement
-function '%s' has return(e); and return;
-function '%s' may return random value to place of invocation %s
-label without goto: '%s'
-width of %s constant is smaller than size of type (%s)
-explicit conversion from '%s' to '%s' %s
-implicit conversion from '%s' to '%s' %s
-'%s' may be indistinguishable from '%s' due to internal name truncation
-Promoted formal parameter and promoted argument have incompatible types
-No prototype for the definition of '%s' %s
-References to '%s' are substituted by its literal initializer
- (as included in %s)
-==============
-unsupported language linkage
-string-literal specifies an unsupported linkage
-7.4(1)
-No prototype for the call to %s
-To achieve better type-checking, there should be a full prototype for
-the function being called.
-3.5.4.3
-'inline' only applies to function declarations
-leave statment can occur only within try body
-Microsoft extension
-Use of a Microsoft extension detected without usage of the
-compiler option -msft.
-No parameter mentioned
-A file with no declarations or definitions is accepted as an extension to ANSI C
-The translation unit must contain at least one external definition.
-3.7
-Incompatible signed and unsigned version of a type
-Yacc initialization error
-Internal error: yacc cannot initialize itself.
-The cfe option %s may not be in future releases. We suggest that you not use this option!
-Incompatible char and unsigned char versions of a type
-Lshift with undefined behaviour.
-Lshift with a negative right operand, or a right operand that is greater
-than or equal to the width in bits of the promoted left operand, results
-in undefined behaviour.
-3.3.7(11)
-useless type name in declaration, possibly a semicolon is missing.
-Type was ignored.
-constant initializer expression is invalid (refers to automatic variables).
-All the expressions in an initializer for an object that has static storage
-duration or in the initializer list for an object that has aggregate or
-union type shall be constant expressions. Otherwise, unexpected results
-may occur.
-3.5.7(32) and 3.4
-invalid explicit or implicit conversion of an address constant to an integral value in a constant initializing expression.
-An address constant in a constant initializing expression can neither
-initialize a bit-field nor be directly or indirectly converted to an
-integral type of size different from an address type.
-6.4
diff --git a/tools/ido_recomp/windows/5.3/ugen.exe b/tools/ido_recomp/windows/5.3/ugen.exe
deleted file mode 100755
index 0f919c2348..0000000000
Binary files a/tools/ido_recomp/windows/5.3/ugen.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/5.3/ujoin.exe b/tools/ido_recomp/windows/5.3/ujoin.exe
deleted file mode 100755
index f1397ee0c9..0000000000
Binary files a/tools/ido_recomp/windows/5.3/ujoin.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/5.3/uld.exe b/tools/ido_recomp/windows/5.3/uld.exe
deleted file mode 100755
index d415d9ba00..0000000000
Binary files a/tools/ido_recomp/windows/5.3/uld.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/5.3/umerge.exe b/tools/ido_recomp/windows/5.3/umerge.exe
deleted file mode 100755
index 23bf7b2516..0000000000
Binary files a/tools/ido_recomp/windows/5.3/umerge.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/5.3/uopt.exe b/tools/ido_recomp/windows/5.3/uopt.exe
deleted file mode 100755
index 248beabc70..0000000000
Binary files a/tools/ido_recomp/windows/5.3/uopt.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/5.3/usplit.exe b/tools/ido_recomp/windows/5.3/usplit.exe
deleted file mode 100755
index 6ac2a6382b..0000000000
Binary files a/tools/ido_recomp/windows/5.3/usplit.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/7.1/as0.exe b/tools/ido_recomp/windows/7.1/as0.exe
deleted file mode 100755
index 346827a49d..0000000000
Binary files a/tools/ido_recomp/windows/7.1/as0.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/7.1/as1.exe b/tools/ido_recomp/windows/7.1/as1.exe
deleted file mode 100755
index 7076875b9f..0000000000
Binary files a/tools/ido_recomp/windows/7.1/as1.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/7.1/cc.exe b/tools/ido_recomp/windows/7.1/cc.exe
deleted file mode 100755
index 53bf834332..0000000000
Binary files a/tools/ido_recomp/windows/7.1/cc.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/7.1/cfe.exe b/tools/ido_recomp/windows/7.1/cfe.exe
deleted file mode 100755
index 0286c3fa5a..0000000000
Binary files a/tools/ido_recomp/windows/7.1/cfe.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/7.1/err.english.cc b/tools/ido_recomp/windows/7.1/err.english.cc
deleted file mode 100644
index b5d5be36ef..0000000000
--- a/tools/ido_recomp/windows/7.1/err.english.cc
+++ /dev/null
@@ -1,1260 +0,0 @@
-@
- 358 358 358
- 6464 6482 6553
- 6553 6593 6728
- 6728 6746 6803
- 6803 6808 6808
- 6808 6818 6818
- 6818 6826 6826
- 6826 6847 6847
- 6847 6875 6922
- 6922 6930 6930
- 6930 6939 6939
- 6939 6948 6948
- 6948 6974 7120
- 7120 7149 7204
- 7210 7248 7311
- 7317 7350 7442
- 7450 7497 7627
- 7635 7709 7930
- 7938 7975 8063
- 8071 8113 8253
- 8261 8289 8289
- 8298 8338 8445
- 8460 8502 8635
- 8650 8690 8819
- 8834 8857 8965
- 8965 9008 9113
- 9119 9142 9227
- 9235 9282 9451
- 9451 9462 9462
- 9462 9477 9477
- 9477 9497 9497
- 9497 9545 9545
- 9545 9584 9584
- 9584 9604 9662
- 9662 9682 9720
- 9720 9749 9749
- 9749 9788 9788
- 9788 9802 9802
- 9802 9829 9829
- 9829 9861 9861
- 9861 9904 9904
- 9904 9920 9920
- 9920 9962 9962
- 9962 9988 9988
- 9988 10014 10014
-10014 10035 10035
-10035 10054 10097
-10097 10115 10115
-10115 10147 10147
-10147 10183 10183
-10183 10208 10208
-10208 10236 10236
-10236 10269 10269
-10269 10304 10304
-10304 10328 10328
-10328 10351 10351
-10351 10371 10371
-10371 10402 10402
-10402 10447 10447
-10447 10497 10497
-10497 10533 10533
-10533 10598 10598
-10606 10630 10630
-10640 10671 10671
-10690 10719 10719
-10728 10752 10795
-10795 10837 10837
-10837 10876 10876
-10876 10900 10900
-10900 10948 10948
-10960 11021 11103
-11103 11128 11128
-11128 11153 11153
-11153 11216 11216
-11216 11239 11239
-11239 11303 11303
-11303 11347 11347
-11357 11393 11393
-11393 11432 11432
-11442 11494 11494
-11494 11536 11536
-11536 11595 11595
-11595 11622 11622
-11622 11684 11684
-11684 11726 11726
-11738 11778 11778
-11782 11813 11813
-11813 11850 11850
-11850 11900 12087
-12111 12120 12120
-12120 12129 12129
-12129 12158 12158
-12158 12192 12192
-12192 12237 12237
-12237 12273 12273
-12273 12326 12326
-12330 12366 12366
-12366 12423 12423
-12427 12482 12482
-12486 12560 12560
-12568 12631 12631
-12637 12691 12691
-12691 12743 12743
-12743 12785 12785
-12785 12826 12826
-12826 12865 12865
-12865 12883 12883
-12883 12946 12946
-12956 12995 12995
-13005 13066 13066
-13077 13163 13163
-13163 13211 13211
-13211 13270 13270
-13270 13318 13318
-13318 13350 13350
-13350 13387 13387
-13387 13428 13428
-13428 13464 13533
-13533 13580 13737
-13737 13776 13854
-13854 13913 13913
-13913 13950 13950
-13950 14118 14118
-14118 14150 14150
-14150 14163 14194
-14194 14224 14255
-14255 14275 14319
-14319 14353 14458
-14466 14484 14530
-14534 14567 14567
-14567 14635 14682
-14690 14742 14742
-14742 14789 14789
-14801 14875 14875
-14886 14947 14947
-14947 14992 14992
-14992 15035 15085
-15085 15134 15205
-15214 15267 15448
-15454 15496 16810
-16822 16875 16960
-16972 17053 17179
-17191 17236 17332
-17344 17491 17841
-17853 17939 18304
-18316 18471 18774
-18786 18952 19323
-19335 19364 19496
-19500 19527 19598
-19598 19613 19776
-19797 19808 19837
-19837 19862 19862
-19868 19927 20026
-20034 20075 20179
-20187 20223 20223
-20223 20290 20382
-20392 20441 20589
-20601 20656 20656
-20656 20699 20818
-20826 20860 21038
-21046 21094 21191
-21203 21236 21314
-21326 21395 21457
-21469 21502 21502
-21502 21587 21731
-21756 21789 21864
-21875 21901 21976
-22013 22059 22220
-22257 22397 22561
-22561 22595 22595
-22603 22623 22623
-22631 22667 22828
-22865 22919 22994
-23031 23059 23120
-23132 23201 23201
-23212 23274 23274
-23285 23345 23345
-23356 23393 23393
-23399 23431 23532
-23542 23587 23646
-23656 23697 23745
-23755 23796 23844
-23854 23876 23928
-23942 23971 24153
-24160 24243 24243
-24247 24273 24743
-24755 24784 24984
-24996 25034 25034
-25034 25075 25273
-25281 25332 25410
-25420 25467 25544
-25554 25583 25744
-25754 25783 26061
-26071 26111 26185
-26194 26239 26525
-26535 26568 26914
-26924 26951 26998
-27008 27035 27082
-27093 27120 27167
-27178 27206 27251
-27261 27289 27334
-27345 27391 27931
-27938 27959 28007
-28019 28037 28037
-28043 28069 28069
-28077 28147 28199
-28207 28266 28266
-28274 28306 28306
-28314 28339 28339
-28347 28404 28510
-28518 28567 28682
-28690 28728 28728
-28736 28782 29023
-29033 29085 29234
-29246 29303 29383
-29395 29432 29570
-29592 29631 29644
-29644 29693 29758
-29767 29810 29875
-29875 29911 29976
-29984 30014 30014
-30027 30086 30151
-30157 30223 30293
-30301 30369 30445
-30457 30511 30568
-30580 30630 30743
-30755 30812 30874
-30886 30959 31035
-31043 31076 31175
-31183 31243 31243
-31251 31323 31323
-31331 31433 31433
-31445 31544 31686
-31698 31740 31740
-31740 31783 31783
-31783 31824 31824
-31824 31873 31996
-32008 32056 32164
-32176 32210 32210
-32229 32271 32271
-32279 32323 32569
-32581 32642 32718
-32739 32779 32916
-32926 32953 33047
-33057 33116 33315
-33325 33373 33373
-33373 33407 33469
-33494 33527 33527
-33536 33573 33573
-33584 33650 33697
-33705 33763 33763
-33763 33797 33797
-33797 33829 33906
-33915 33976 33976
-33985 34016 34098
-34098 34133 34198
-34198 34261 34261
-34269 34312 34312
-34324 34363 34438
-34444 34530 34530
-34538 34596 34626
-34636 34675 34754
-34764 34821 34821
-34821 34867 34950
-34959 35016 35135
-35145 35198 35198
-35208 35266 35344
-35355 35382 35537
-35547 35576 35629
-35637 35705 35705
-35713 35764 35764
-35764 35784 35876
-35888 35932 35950
-35950 36013 36138
-36150 36191 36280
-36286 36314 36419
-36431 36516 36516
-36516 36554 36642
-36642 36689 36808
-36818 36881 37105
-37113 37183 37204
-37204 37225 37225
-37225 37255 37348
-37348 37388 37388
-37388 37454 37454
-37454 37518 37518
-37518 37584 37584
-37584 37717 37717
-37717 37752 37752
-37752 37783 37889
-37901 37928 38034
-38046 38115 38115
-38115 38140 38187
-38195 38219 38339
-38351 38422 38422
-38422 38486 38486
-38486 38555 38555
-38555 38619 38619
-38619 38641 38641
-38641 38758 38758
-38758 38929 38929
-38929 38975 39043
-39055 39084 39133
-39133 39175 39265
-39275 39310 39494
-39504 39547 39576
-39587 39614 39668
-39674 39697 39797
-39797 39845 40094
-40094 40158 40264
-40264 40369 40523
-40523 40593 40593
-40593 40629 40876
-40876 40911 40971
-40977 41026 41026
-41038 41077 41077
-41077 41116 41116
-41116 41156 41156
-41156 41195 41195
-41195 41237 41237
-41237 41285 41285
-41285 41304 41304
-41304 41371 41371
-41371 41429 41429
-41429 41491 41491
-41491 41519 41519
-41519 41572 41572
-41572 41642 41642
-41642 41676 41676
-41676 41713 41713
-41713 41751 41751
-41751 41792 41792
-41792 41856 41856
-41856 41881 41881
-41881 41944 41944
-41944 41985 41985
-41985 42026 42026
-42026 42098 42098
-42098 42170 42170
-42170 42213 42213
-42213 42275 42275
-42275 42302 42302
-42302 42317 42317
-42317 42346 42394
-42401 42433 42530
-42538 42585 42585
-42585 42631 42631
-42631 42651 42733
-42733 42756 42756
-42756 42837 42905
-42909 42960 42960
-42960 42986 43033
-43033 43124 43124
-43124 43179 43179
-43179 43212 43384
-43394 43461 43479
-43479 43555 43788
-43806 43929 44124
-44128 44128 44128
-Out of memory: %s
-There is no more memory left in the system for compiling this program.
-Internal Error Unknown Error Message %s
-1) An internal error, while attempting to print an unavailable message
-2) The error message file is inaccessible or has other problems
-Unknown Signal %s
-1) An unknown signal has been caught
-2) 2 Nested signals
-line
-Warning:
-Fatal:
-Source not available
-Too many errors... goodbye.
-There is a limit of 30 errors before aborting.
-Error:
-reserved
-reserved
-Unknown Control Statement
-1) The line begins with a '#' and is not of the form:
- # ""
-2) Please compile this program with the preprocessor enabled.
-Unknown character %s ignored
-The character is not part of the source character set.
-2.2.1
-Unknown control character \%s ignored
-The control character is not part of the source character set.
-2.2.1
-Illegal character %s in exponent
-1) Digits or sign expected after 'e' or 'E'.
-2) Digits are expected after sign in exponent.
-3.1.3.1
-Constant is out of range and may be truncated.
-The constant is too large to be accurately represented and may be
-truncated. The limits are in the system include file limits.h.
-2.2.4.2
-Constant is out of range for a 32-bit data type, but accepted as written.
-The constant is too large to fit in a 32-bit data type, but will be
-accurately represented in a wider data type. The value may be truncated,
-depending on its context. The limits are in the system include file
-limits.h.
-2.2.4.2
-Character constant size out of range
-1) No characters in a character constant.
-2) More than 4 bytes in a character constant.
-3.1.3.4
-Wide character constant size out of range
-1) No characters in the multibyte sequence (0 assumed).
-2) More than 1 byte in the multi-byte sequence (only the first byte was converted).
-3.1.3.4
-Invalid multibyte character
-4.10.7.2
-Newline in string or character constant
-1) Terminate your string or character constant with closing quotes.
-2) Put a backslash before the newline.
-3.1.3.4, 3.1.4
-Octal character escape too large: %s > %s
-1) Terminate end of octal sequence with a non-octal character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Hex character escape too large: %s > %s
-1) Terminate end of hex sequence with a non-hex character.
-2) Select a character value within the limits.
-Value may be truncated
-3.1.3.4, 3.1.4
-Unexpected End-of-file
-1) Unterminated string or character constant
-2) Missing closing comment marker (*/)
-3) File system problems
-Unrecognized escape sequence in string \%s
-Recognized escape sequences are \a, \b, \f, \n, \r, \t, and \v.
-Character will be treated as un-escaped.
-3.9.2
-Illegal octal digit %s
-Octal constants, beginning with 0, must only have digits between 0 and 7,
-inclusive.
-3.1.3.2
-Unable to open temporary file for compiling %s
-1) TMPDIR environment variable is set to a directory that you have no
- permissions for.
-2) The file system is full.
-3) System errors beyond the scope of the compiler.
-%s: Hangup
-%s: Interrupt
-%s: Quit (ASCII FS)
-%s: Illegal instruction (not reset when caught)
-%s: Trace trap (not reset when caught)
-%s: IOT instruction
-Also SIGABRT, used by abort, replace SIGIOT in the future
-%s: EMT instruction
-Also SIGXCPU, Exceeded CPU time limit
-%s: Floating point exception
-%s: Kill (cannot be caught or ignored)
-%s: Bus error
-%s: Segmentation violation
-%s: Bad argument to system call
-%s: Write on a pipe with no one to read it
-%s: Alarm clock
-%s: Software termination signal from kill
-%s: User defined signal 1
-%s: User defined signal 2
-%s: Death of a child
-Power-fail restart
-%s: Also SIGXFSZ, exceeded file size limit
-%s: Window change
-%s: Handset, line status change
-%s: Sendablestop signalnot from tty
-%s: Stop signal from tty
-%s: Pollable event occurred
-%s: Input/Output possible signal
-%s: Urgent condition on IO channel
-%s: Window size changes
-%s: Virtual time alarm
-%s: Profiling alarm
-%s: Continue a stopped process
-%s: To readers pgrp upon background tty read
-%s: Like TTIN for output if (tp->t_local<OSTOP)
-%s: Resource lost (eg, record-lock)
-'auto' and 'register' are not allowed in an external declaration
-3.7(10)
-must have function type
-3.7.1(30)
-Functions cannot return arrays
-3.7.1(33), 3.3.2.2
-Declaration list not allowed
-3.7.1(5)
-Too many input files %s
-The command line may contain only one file
-cpp internal error: input stack underflow
-cpp internal error: if stack underflow
-Cannot open the file %s
-No new-line character at the end of the file %s
-2.1.1.2(30)
-Fatal: Exceeded the limit of nesting level for #include file
-Fatal: Exceeded the limit of nesting level for #include file. This limit
-is 200.
-Fail to read the file %s
-Cannot write the file %s
-%s: %s: An if directive is not terminated properly in the file
-%s: %s: nested comment
-%s:%s: Illegal macro name %s; macro name shall be an identifier
-%s:%s: Illegal preprocessing token sequence
-3.8.3(35)
-%s:%s: Illegal macro parameter name
-%s:%s: Non-unique macro parameter name
-3.8.3(18)
-%s:%s: Missing ')' in parameter list for #define %s
-%s:%s: Missing ')' in macro instantiation
-%s:%s: Bad punctuator in the parameter list for #define %s
-%s:%s: Macro %s redefined.
-%s:%s: # operator should be followed by a macro argument name
-%s:%s: Badly formed constant expression%s
-3.4(9), 3.8
-%s:%s: Division by zero in #if or #elif
-3.8
-unknown command line option %s
-extraneous input/output file name %s
-%s: %s: Unterminated string or character constant
-A preprocessing string or character constant token was not
-terminated. Note that preprocessing directives are processed
-after the source file has been divided into preprocessing tokens.
-2.1.1.2(30) 3.1(18) 3.8
-%s: %s:
-%s: %s:
-%s: %s: Unterminated comment
-%s: %s: Unknown directive type %s
-%s: %s: #elif or #else after #else directive
-%s: %s: Bad identifier after the %s
-%s: %s: #%s accepts only one identifier as parameter
-3.8
-%s: %s: Bad identifier after the %s
-%s: %s: text following #%s violates the ANSI C standard.
-3.8
-%s: %s: Bad character %s occurs after the # directive.
-3.8
-%s: %s: the ## operator shall not be the %s token in the replacement list
-3.8.3.3
-%s: %s: the defined operator takes identifier as operand only.
-3.8.1
-%s: %s: Not in a conditional directive while using %s
-%s: %s: Illegal filename specification for #include
-%s: %s: Invalid file name %s for #include
-%s: %s: Cannot open file %s for #include
-%s: %s: Bad argument for #line command
-%s: %s: #error %s
-%s: %s: Tried to redefine predefined macro %s, attempt ignored
-3.8.7(22)
-%s: %s: Undefining predefined macro %s
-3.8.7(22)
-%s: %s: Undefined the ANSI standard library defined macro %s
-4.1.2.1(9)
-%s: %s: The number of arguments in the macro invocation does not match the definition
-%s: %s: Illegal character %s in preprocessor if
-%s: %s: Illegal character %s for number in preprocessor if
-%s: %s: No string is allowed in preprocessor if
-%s: %s: Not supported pragma %s
-%s: %s: Not supported #pragma format
-%s: %s: ANSI C does not allow #ident; %s
-%s: %s: Not supported #ident format
-This cpp extension accepts the following format:
-#ident "any string"
-%s: %s: Not supported #assert/#unassert format
-This cpp extension accepts the following format:
-#assert identifier
-#assert identifier ( pp-tokens )
-#unassert identifier
-#unassert identifier ( pp-tokens )
-%s: %s: Bad assertion predicate format
-The correct syntax for this cpp extension is:
-#assert identifier ( pp-token )
-%s: %s: directive is an upward-compatible ANSI C extension
-%s: This option requires an argument
-%s: %s: A macro has expanded recursively more than %s times. Further expansion will be disabled! Use command-line option: -Wp,-max_rec_depth=depth to recurse deeper.
-A status return from cpp to cfe
-Syntax Error
-The token read was unexpected.
-Syntax Error -- cannot backup
-The token read was unexpected.
-Yacc stack overflow
-The expression is too complicated to parse.
-Trailing comma in enumerator list
-The use of a trailing comma in an enumerator list is not standard C. There
-may be portability problems.
-3.5.2.2
-Empty declaration
-Empty declarations are invalid in standard C.
-3.5
-%s declared, but not referenced.
-redeclaration of '%s'; previous declaration at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-'%s' undefined; reoccurrences will not be reported.
-Non-function name referenced in function call.
-3.3.2.2(18)
-The number of arguments doesn't agree with the number in the declaration.
-3.3.2.2(5)
-'%s' section name longer than 8 characters. Name truncated.
-'%s' is already placed by pragma alloc_text.
-Cannot write ucode file while compiling %s
-1) The file system is full
-2) Permissions problem
-Must have corresponding formal argument for '%s'
-Parameter found in the declaration part, but not in the argument list.
-3.7.1(7)
-Non-prototype declaration is an obsolescent feature.
-The use of function definitions with separate parameter identifier
-and declaration lists (not prototype-format parameter type and
-identifier declarators) is an obsolescent feature.
-3.9.5
-Incompatible function declarations for %s
-For two function types to be compatible, both shall specify compatible
-return types. Moreover, the parameter type lists, if both are present,
-shall agree in the number of parameters and in use of the ellipsis
-terminator; corresponding parameters shall have compatible types. If
-one type has a parameter type list and the other type is specified by
-a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions. If one type has a parameter type list and the
-other is specified by a function definition that contains a (possibly
-empty) identifier list, both shall agree in the number of parameters,
-and the type of each prototype parameter shall be compatible with the
-type that results from application of the default argument promotions
-to the type of the corresponding identifier. (For each parameter
-declared with function or array type, its type for these comparisons
-is the one that results from conversion to a pointer type. For each
-parameter declared with qualified type, its type for these comparisons
-is the unqualified version of its declared type.) There you have it!
-3.5.4.3(15)
-Incompatible function return type for this function.
-For two function types to be compatible, both shall specify compatible
-return types.
-3.5.4.3(15)
-The number of parameters for function is different from the previous declaration
-The parameter type lists, if both are present, shall agree in the
-number of parameters and in use of the ellipsis terminator.
-3.5.4.3(15)
-Incompatible type for the function parameter
-If both parameter type lists are present, corresponding
-parameters shall have compatible types.
-3.5.4.3(15)
-Function %s is redeclared with an incompatible argument type (after default argument promotion), which could lead to undefined run-time behaviour.
-The redeclaration could cause arguments at a call site to be passed
-inconsistently with what the function implementation expects, and
-parameters would therefore be accessed erroneously when executing the
-function body. Note that a float argument is promoted to a double
-when passed (potentially through fp registers) to an unprototyped
-function.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, ellipsis terminator not allowed
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the parameter list shall not have
-an ellipsis terminator and the type of each parameter shall be
-compatible with they type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype and non-prototype declaration found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other type is specified
-by a function declarator that is not part of a function definition and
-contains an empty identifier list, the type of each parameter shall be
-compatible with the type that results from application of the default
-argument promotions.
-3.5.4.3(15)
-prototype declaration and non-prototype definition found for %s, the type of this parameter is not compatible with the type after applying default argument promotion
-If one type has a parameter type list and the other is specified by a
-function definition that contains a (possibly empty) identifier list,
-both shall agree in the number of parameters, and the type of each
-prototype parameter shall be compatible with the type that results
-from application of the default argument promotions to the type of the
-corresponding identifier.
-3.5.4.3(15)
-Empty declaration specifiers
-Standard C requires at least a storage class specifier, type specifier,
-or a type qualifier in declarations. 'extern int' assumed.
-3.5
-Can't write to the file %s
-1) The output file cannot be opened for writing.
-2) Out of file space.
-Duplicate '%s'
-typedef, extern, static, auto, register, const, volatile may not
-appear more than once in the same specifier list or qualifier list.
-Duplicate occurrence ignored.
-3.5.1(10) , 3.5.3(5)
-Null input
-There is nothing to compile.
-Illegal type combination
-3.5.2
-Missing ';' at end of structure / union member declaration
-In standard C, each member declaration must be terminated by a ';'. A
-terminating ';' is assumed.
-3.5.2.1
-Missing member name in structure / union
-In standard C, each member declaration have a member name. The missing
-member is assumed to not exist.
-3.5.2.1
-This variable is initialized twice.
-Neither 'const' or 'volatile' have any effect on function results.
-Qualifiers only apply to expressions designating an object that
-can be altered or examined.
-3.5.3(10)
-An integer constant expression is required here.
-The expression that defines the value of an enumeration constant
-shall be an integral constant expression that has a value
-representable as an int.
-3.5.2.2(28)
-(previous declaration of '%s' at line %s in file '%s')
-Must be an integer type greater than zero.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-Array size cannot be a long long.
-Arrays with more than 2^32 elements are not yet supported.
-The array size must be either a char, signed or unsigned integer or
-an enumerated type with a value greater than zero.
-3.5.4.2
-bit-field '%s' width is not an integer constant
-The expression that specifies the width of a bit-field shall be an
-integral constant expression.
-3.5.2.1(15)
-bit-field '%s' width is negative
-The expression that specifies the width of a bit-field shall be
-non-negative.
-3.5.2.1(15)
-bit-field '%s' type required to be int, unsigned int, or signed int.
-A bit-field shall have type int, unsigned int, or signed int.
-3.5.2.1(30)
-bit-field %s's type not integer.
-Non-scalar type or pointer type to a non-object for increment or decrement operator.
-The operand of the prefix/postfix increment or decrement operator shall have scalar type; if it is of pointer type, it must point to an object.
-3.3.2.4(37), 3.3.3.1(25)
-Assign value to a function type.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.2.2.1(5)
-Assign value to an array.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for variable of incomplete type.
-The operand of increment and decrement operator shall be a modifiable
-scalar lvalue. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-The left-hand side of the '.' operator must be an addressable lvalue, when a bit-field is not contained within a unit of 32 bits alignment.
-This is a restriction in our implementation, which can be worked
-around by always accessing long long bit-fields indirectly (i.e.
-by means of the '->' operator).
-This expression is not an lvalue.
-3.2.2.1
-Modified an rvalue.
-3.2.2.1
-Change value for constant variable.
-The operand of increment and decrement operators shall be modifiable
-scalar lvalues. An assignment operator shall have a modifiable lvalue
-as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Change value for constant field of a struct or union.
-An assignment operator shall have a modifiable lvalue as its left operand.
-3.3.2.4(36), 3.3.3.1(24), 3.2.2.1(5)
-Dereferenced a non-pointer.
-The operand of the unary * operator shall have pointer type.
-3.3.3.2(39)
-The operand of the unary + or - operator shall have arithmetic type.
-3.3.3.3(6)
-The operand of the unary ~ operator shall have integral type.
-3.3.3.3(6)
-The operand of the unary ! operator shall have scalar type.
-3.3.3.3(6)
-Constants must have arithmetic type.
-3.1.3
-Bad type name for cast operator
-The type name for the cast operator should either be void or a
-qualified or unqualified scalar type.
-3.3.4(22)
-Improper cast of non-scalar type expression.
-The operand for the cast operator shall be of scalar type.
-3.3.4(23)
-Cast a pointer into a non-integral type.
-A pointer may be converted to an integral type.
-3.3.4(31)
-Cast a non-integral type into a pointer.
-An integral type may be converted to a pointer.
-3.3.4(31)
-Duplicate member '%s'
-Two members of a struct may not have the same name.
-3.1.2.2(7,25)
-Invalid constant expression.
-Constant expressions shall not contain assignment, increment, decrement,
-function-call, or comma operators, except when they are contained within
-the operand of the sizeof operator.
-3.4(9)
-Constant expressions must be derived from a constant value or a constant
-variable.
-3.4
-Dangerous operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier. This operand is NOT an lvalue, but we let it pass.
-Note that a segmentation error with possible core dump will result
-when the resulting address does not denote a valid (declared)
-storage location. This feature will be discontinued in future
-releases of the compiler!
-3.3.3.2(36)
-Unacceptable operand of '&'.
-The operand of the unary & operator shall be either a function
-designator or an lvalue that designates an object that is not a
-bit-field and is not declared with the register storage-class
-specifier.
-3.3.3.2(36)
-'&' before array or function; ignored
-Unacceptable operand of sizeof operator.
-The sizeof operator shall not be applied to an expression that has
-function type or an incomplete type, to the parenthesized name of such
-a type, or to an lvalue that designates a bit-field object.
-3.3.3.4
-Unacceptable operand of a multiplicative operator.
-Each of the operands of a multiplicative operator shall have arithmetic type.
-3.3.5(18)
-Unacceptable operand of the remainder operator
-Each of the operands of the remainder (%) operator shall have integral type.
-3.3.5(18)
-Unacceptable operand of '+'.
-For the + operator, either both operands shall have arithmetic type, or
-one operand shall be a pointer to an object type and the other shall
-have integral type.
-3.3.6(39)
-Unacceptable operand of '-'.
-For the subtraction operator, one of the following shall hold: both operands
-have arithmetic type; operands are pointers to qualified or unqualified
-versions of compatible object types; or the left operand is a pointer
-to an object type and the right operand has integral type.
-3.3.6(39)
-Unacceptable operand of shift operator.
-Each of the operands of bitwise shift operators shall have integral type.
-3.3.7(9)
-Unacceptable operand of relational operator.
-For relational operators, one of the following shall hold: both
-operands have arithmetic type; both operands are pointers to qualified
-or unqualified versions of compatible object types; or both operands
-are pointers to qualified or unqualified versions of compatible
-incomplete types.
-3.3.8(32)
-Unacceptable operand of == or !=
-For the == or != operator, one of the following shall hold: both operands
-are pointers to qualified or unqualified versions of compatible types; one
-operand is a pointer to an object or incomplete type and the other is a
-pointer to a qualified or unqualified version of void; or one operand is
-a pointer and the other is a null pointer constant.
-3.3.9(21)
-Unacceptable operand of &.
-Each of the operands shall have integral type.
-3.3.10(7)
-Unacceptable operand of ^.
-Each of the operands shall have integral type.
-3.3.11(18)
-Unacceptable operand of |.
-Each of the operands shall have integral type.
-3.3.12(30)
-Unacceptable operand of &&.
-Each of the operands shall have scalar type.
-3.3.13(7)
-Unacceptable operand of ||.
-Each of the operands shall have scalar type.
-3.3.14(20)
-Unacceptable operand of conditional operator.
-The first operand of conditional operator shall have scalar type. One
-of the following shall hold for the second and third operands:
-both operands have arithmetic type; both operands have compatible
-structure or union types; both operands have void type; both operands
-are pointers to qualified or unqualified versions of compatible types;
-one operand is a pointer and the other is a null pointer constant; or
-one operand is pointer to an object or incomplete type and the other
-is a pointer to a qualified or unqualified version of void.
-3.3.15
-Duplicate label '%s'
-A label name can only occur once in a function.
-3.1.2.1(25)
-Division by zero.
-3.3.5
-Subscripting a non-array.
-3.3.2.1
-Subscripting an array of incomplete type which is not an object type.
-The element of the array shall have an object type.
-3.3.2.1
-Should only subscript an array with an integral expression
-3.3.2.1
-Subscripting an unbounded array
-3.3.2.1
-Array index out of range
-3.3.2.1
-Selector requires struct/union pointer as left hand side
-In K&R mode the expression is implicitly converted to the '.' selector
-for a struct/union left-hand side.
-3.3.2.3
-Selector requires struct/union as left hand side
-In K&R mode the expression is implicitly converted to the '->' selector
-for a struct/union pointer left-hand side.
-3.3.2.3
-member of structure or union required
-3.3.2.3
-types have different qualifier specifications
-For two qualified types to be compatible, both shall have the
-identically qualified version of a compatible type; qualified
-and unqualified versions of a type are distinct types. For two
-types to be compatible their types must be the same.
-3.5.3(26)
-Incompatible array type due to different array size
-For two array types to be compatible, both shall have compatible element
-types; if both size specifiers are present, they shall have the
-same value.
-3.5.4.2(11)
-Incompatible array type due to incompatible element type
-For two array types to be compatible, both shall have compatible element
-types.
-3.5.4.2(11)
-Incompatible pointer type assignment
-The type pointed to by the left-hand side of simple assignment
-statement is incompatible with the type pointed to by the right-hand side.
-3.3.16.1, 3.5.4.1(21)
-Incompatible base type of pointer type
-K&R feature.
-Type %s of %s is incompatible with type %s of %s
-Incompatible types can be resolved by casting or by other means.
-3.3.16.1
-illegal combination of pointer and integer
-Assigning an integral expression to a pointer is a bad practice.
-Type for %s is incompatible with %s
-Incompatible types can be resolved by casting or by other means.
-3.1.2.6
-Bad operand type for += or -=
-3.3.16.2(26)
-A case or default label appears outside a switch statement
-A case or default label shall appear only in a switch statement.
-3.6.1
-The controlling expression of the if statement is not scalar type
-The controlling expression of an if statement shall have scalar type.
-3.6.4.1
-The controlling expression of switch statement is not integral type
-The controlling expression of an switch statement shall have integral type.
-3.6.4.2(20)
-The case label is not an integral constant expression
-The case label shall be an integral constant expression.
-3.6.4.2(22)
-Duplicate case label in the same switch statement
-No two of the case constant expressions in the same switch statement
-shall have the same value after conversion.
-3.6.4.2(22)
-More than one default label in the same switch statement
-There may be at most one default label in a switch statement.
-3.6.4.2(23)
-The controlling expression of the iteration statement is not scalar
-type
-The controlling expression of a iteration statement shall have scalar
-type.
-3.6.5.1
-label '%s' used, but not defined
-The identifier in a goto statement shall name a label located
-somewhere in the enclosing function.
-3.6.6.1
-A continue statement shall appear only in or as a loop body
-3.6.6.2
-A break statement shall appear only in or as a switch body or loop body
-3.6.6.3
-A return statement with an expression should not appear
-in a function '%s', whose return type is void
-3.6.6.4(24)
-A return statement without an expression appears in a
-function '%s', whose return type is not void
-If a return statement without an expression is executed, and the value
-of the function call is used by the caller, the behavior is undefined.
-3.6.6.4(33)
-Internal Error: statement stack underflow
-Long double not supported; double assumed.
-Long float not standard; double assumed.
-Only 'register' allowed in parameter declaration
-The only storage-class specifier that shall occur in a parameter
-declaration is 'register'; illegal storage class ignored.
-3.5.4.3(25)
-Name(s) without types in a function declaration
-An old-style function declaration is not allowed to have names
-in the parameter list; useless names ignored
-3.5.4.3(26)
-Functions cannot return functions
-3.7.1(33), 3.3.2.2
-Functions cannot return a non-object type
-3.3.2.2
-enum declaration must contain enum literals
-Although structs or unions may delay the declaration of their members,
-a similar construction with enum does not exist and is not necessary,
-as there can be no mutual dependencies between the declaration of an
-enumerated type and any other type.
-3.5.2.3(27)
-Register qualification has no effect for this type of object
-Register declarations for array, struct, and function types have
-no effect.
-3.5.1(16), 3.5.1(19)
-Functions cannot be declared 'register'
-The declaration of an identifier for a function that has block
-scope shall have no explicit storage-class specifier other than
-'extern'.
-3.5.1(19)
-'%s' cannot be initialized
-The type of the entity to be initialized shall be an object type
-or an array of unknown size.
-3.5.7(32)
-Cannot initialize 'extern' variable '%s' within a function
-If the declaration of an identifier has block scope, and the
-identifier has 'extern' or 'static' linkage, the declaration
-shall have no initializer for the identifier; initialization
-allowed anyway.
-3.5.7(35)
-initializing an 'extern' is an ANSI C extension
-conflicting declarations for '%s'
-'static' and 'extern' declarations conflict. Which is meant?
-3.1.2.2(15), 3.1.2.2(27)
-Too many initial values for '%s'
-3.5.7(1)
-incompatible types in initialization
-3.3.16(35)
-redefinition of '%s'; previous definition at line %s in file '%s'
-Identifier redeclared in the same scope/block.
-3.1.2.3
-bit-fields as members of a union are an ANSI C invention.
-storage size for '%s' isn't known
-type mismatch in initialization
-Missing braces in a union initialization or illegally formed
-initialization.
-3.5.7(5)
-union '%s' only allowed one initializer for the first member
-3.5.7(5)
-width of '%s' exceeds its type
-the specified bitfield width is too large to be contained within a
-bitfield type.
-structure has no member named '%s'
-This is allowed for compatibility with AT&T pcc-based compilers.
-Reference of an expression of void type or an incomplete type.
-3.2.2.1
-element size of an array shall not be zero
-3.2.2.5(25)
-invalid combination of type specifiers
-Although order is unimportant, not all type specifiers can occur together.
-3.5.2
-declaration must at least declare an identifier, tag, or the member of an enumeration
-3.5(16)
-at most one storage class may be given in the declaration
-Duplicate occurrence ignored.
-3.5.1(10)
-size of function's return type is zero
-The return type of a function must be void or an object type other than array.
-3.7.1(33)
-Expecting an integral return type from the main function
-identifier missing from parameter declaration
-Prototypes for function definitions require identifiers in parameter
-declarations.
-3.7.1(4)
-only 'register' allowed for storage class for parameters
-The declarations in the declaration list shall contain no storage class
-other than 'register', and no initializations.
-3.7.1(10)
-parameters declarations can not have initializations
-3.7.1(10)
-only one instance of 'void' allowed in the parameter list
-'void' must occur by itself (specifying that the function has no parameters).
-3.5.4.3(1)
-%s must have function type
-1) An argument list must be explicitly present in the declarator; it cannot
- be inherited from a typedef (3.5.4.3).
-2) The declarator is not a function.
-3.7.1(30)
-Illegal hexadecimal constant
-You have no digits after the 0x or 0X. 0x0 assumed.
-3.1.3.2
-value overflows its type in this context. Value is set to be '%s'!
-3.2.1.4
-value is outside range representable for type '%s'
-missing member name
-K&R mode permits a missing member name; otherwise, only bitfields can omit
-the member name.
-3.5.2.1(10)
-useless keyword or type name in declaration
-Type was ignored.
-'%s' declared within and is limited to this function prototype
-Possible program error, since parameter type checking will always fail
-unless the type declaration is visible to the caller.
-3.1.2.1(35)
-Extra spaces within operator, %s assumed
-In ANSI C, the compound assignment operator cannot have embedded
-white space characters.
-3.1.5
-missing size for array '%s'
-Incomplete types permitted for identifiers with internal or
-external linkage, but not automatic linkage.
-3.1.2.5(10)
-can't jump into (from outside of) the body of a 'try' or into either type of handler
-'%s' missing, please #include excpt.h
-excpt.h required to declare exception statements, intrinsics or compiler
-runtime names.
-local function declarations cannot be 'static'
-A function declaration can only contain the storage-class 'static'
-if it is at file scope. Declaration made 'extern'.
-3.5.1(19)
-static function '%s' declared and referenced, but not defined.
-If an identifier declared with internal linkage is used in an
-expression (other than as a part of the operand of a sizeof
-operator), there shall be exactly one external definition for
-the identifier in the translation unit.
-3.7(12)
-pragma argument '%s' must be declared prior to being used in a pragma
-Pragma name ignored.
-Pragma not supported
-'%s' not enabled as intrinsic
-It may have already appeared in a function pragma, or never occurred in
-an intrinsic pragma.
-'%s' is already enabled as an intrinsic
-weak definition for '%s' is later redefined; pragma weak ignored.
-definition of primary name '%s' not found; pragma weak ignored.
-definition of secondary name '%s' not found; pragma weak ignored.
-primary name '%s' is declared as a common or external, and is not defined
-with initial value within this file; pragma weak ignored.
-useless '%s' storage class ignored
-array of functions not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-array of voids not allowed
-The element type must be an object type representing a region
-of data storage which can represent values.
-3.1.2.5(23)
-argument for pragma pack must be an integer constant; pragma ignored
-'%s' has wrong tag type.
-Identifier redeclared in the same scope/block.
-3.1.2.3
-missing dimension bound
-For multidimensional arrays, the constant bounds of the array may be
-omitted only for the first member of the sequence.
-3.1.2.5(23)
-Internal error in parameters to function substr; loc: '%s'; len: '%s'.
-Internal error in parameters to function insertstr; indx: '%s'.
-Internal error in function get_tag_name; input is a non-tagged type.
-Internal error in function gen_type_str -- not a type tree '%s'
-Cannot open file '%s'
-Prototype should be moved after tag or a typedef declaration.
-Please look for comments in the extracted header file.
-The extracted header file includes prototypes for static functions,
-which should be removed, if you wish to include the header in a source file
-other than the originator.
-ANSI C requires formal parameter before "..."
-This extension is meant to be used for compatibility with varargs.h
-3.5.4.3(35)
-syntax error: "&..." invalid
-extension used to access "..." formal arguments.
-function '%s' initialized like a variable
-The type of entity to be initialized shall be an object type or an
-array of unknown size.
-3.5.7(31)
-initializer not an array aggregate
-The initializer for an object that has aggregate type shall be a
-brace-enclosed list of initializers for the members of the aggregate,
-written in increasing subscript or member order.
-3.5.7(20)
-'%s' type is incomplete; cannot initialize
-Was the struct ever defined?
-3.5.7.(31)
-'%s' is not standard ANSI.
-This keyword/type is not defined in strict ANSI mode.
-3.1.1
-not a legal asm string
-The first operand of an asm string should be, after argument substitution,
-a legal assembly string.
-The -float option will be ignored in ANSI mode.
-The -float option is ignored, since otherwise program semantics would
-violate the ANSI standard. In particular, fp constants are always
-'double' with ANSI-C, while with -float the type of fp constants will
-depend on the context and may be 'float'.
-ANSI C support unavailable with C compiler bundled with RISC/os
-The C compiler bundled with RISC/os does not support ANSI C. ANSI
-C support requires a separate license.
-Ignored invalid warning number(s) in -woff option, %s%s !
-Warning numbers must be in the range %s to %s.
-The set of warning numbers in cfe is disjoint from the set of warning numbers
-in accom, since accom warnings cannot be mapped one-to-one to cfe warnings.
-'%s' not handled as an intrinsic due to incompatible argument types .
-'__unalign' only qualifies pointers
-'__unalign' indicates the object pointed at by pointer is unaligned (e.g.,
-int * __unalign p). This is an extension to ANSI C and like 'volatile'
-and 'const' can follow the '*' in pointer declarations, but unlike both
-cannot qualify a base type.
-index expression is an anachronism
-ANSI C++ doesn't support array index expressions in delete.
-5.3.4
-member cannot be of function or incomplete type.
-3.5.2.1(12)
-Illegal lint option, '%s', is ignored.
-cannot open header message buffer file
-cannot write header message buffer file
-cannot read header message buffer file
-cannot seek in header message buffer file
-struct/union/enum '%s' is used, but not defined
-static '%s' unused
-nonportable character comparison (chars may be signed or unsigned)
-redundant comparison of unsigned with constant expression
-redundant statement, control flow cannot reach this statement
-'%s' may be used before set
-function parameter '%s' is not used in function '%s'
-'%s' can be const qualified, since it is not set within its lifetime.
-'%s' is not used in function '%s'
-'%s' set but unused in function '%s'
-control may fall through %s statement
-function '%s' has return(e); and return;
-function '%s' may return random value to place of invocation %s
-label without goto: '%s'
-only %s bits of '%s' constant (type '%s') are explicitly given
-explicit conversion from '%s' to '%s' %s
-implicit conversion from '%s' to '%s' %s
-'%s' may be indistinguishable from '%s' due to internal name truncation
-Promoted formal parameter and promoted argument have incompatible types
-No prototype for the definition of '%s' %s
-References to '%s' are substituted by its literal initializer
- (as included in %s)
-==============
-unsupported language linkage
-string-literal specifies an unsupported linkage
-7.4(1)
-No prototype for the call to %s
-To achieve better type-checking, there should be a full prototype for
-the function being called.
-3.5.4.3
-'inline' only applies to function declarations
-leave statment can occur only within try body
-Microsoft extension
-Use of a Microsoft extension detected without usage of the
-compiler option -msft.
-No parameter mentioned
-A file with no declarations or definitions is accepted as an extension to ANSI C
-The translation unit must contain at least one external definition.
-3.7
-Incompatible signed and unsigned version of a type
-Yacc initialization error
-Internal error: yacc cannot initialize itself.
-The cfe option %s may not be in future releases. We suggest that you not use this option!
-Incompatible char and unsigned char versions of a type
-Lshift with undefined behaviour.
-Lshift with a negative right operand, or a right operand that is greater
-than or equal to the width in bits of the promoted left operand, results
-in undefined behaviour.
-3.3.7(11)
-useless type name in declaration, possibly a semicolon is missing.
-Type was ignored.
-constant initializer expression is invalid (refers to automatic variables).
-All the expressions in an initializer for an object that has static storage
-duration or in the initializer list for an object that has aggregate or
-union type shall be constant expressions. Otherwise, unexpected results
-may occur.
-3.5.7(32) and 3.4
-invalid explicit or implicit conversion of an address constant to an integral value in a constant initializing expression.
-An address constant in a constant initializing expression can neither
-initialize a bit-field nor be directly or indirectly converted to an
-integral type of size different from an address type.
-6.4
diff --git a/tools/ido_recomp/windows/7.1/ugen.exe b/tools/ido_recomp/windows/7.1/ugen.exe
deleted file mode 100755
index 30577e396a..0000000000
Binary files a/tools/ido_recomp/windows/7.1/ugen.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/7.1/ujoin.exe b/tools/ido_recomp/windows/7.1/ujoin.exe
deleted file mode 100755
index 18fc825bc3..0000000000
Binary files a/tools/ido_recomp/windows/7.1/ujoin.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/7.1/uld.exe b/tools/ido_recomp/windows/7.1/uld.exe
deleted file mode 100755
index a0bb885938..0000000000
Binary files a/tools/ido_recomp/windows/7.1/uld.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/7.1/umerge.exe b/tools/ido_recomp/windows/7.1/umerge.exe
deleted file mode 100755
index 3e6698adac..0000000000
Binary files a/tools/ido_recomp/windows/7.1/umerge.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/7.1/uopt.exe b/tools/ido_recomp/windows/7.1/uopt.exe
deleted file mode 100755
index ae714d5280..0000000000
Binary files a/tools/ido_recomp/windows/7.1/uopt.exe and /dev/null differ
diff --git a/tools/ido_recomp/windows/7.1/usplit.exe b/tools/ido_recomp/windows/7.1/usplit.exe
deleted file mode 100755
index f61837d0fd..0000000000
Binary files a/tools/ido_recomp/windows/7.1/usplit.exe and /dev/null differ
diff --git a/tools/msgenc.py b/tools/msgenc.py
index b7a03a5b23..1483dcdc2d 100644
--- a/tools/msgenc.py
+++ b/tools/msgenc.py
@@ -13,18 +13,16 @@ def read_charmap(path : str, wchar : bool) -> Dict[str,str]:
out_charmap = {}
for k,v in charmap.items():
- v = v[wchar]
- if v is None:
- v = 0
assert isinstance(k, str)
- assert v in (range(0xFFFF + 1) if wchar else range(0xFF + 1))
+ assert isinstance(v, int) and v in range(0xFFFF + 1)
k = repr(k)[1:-1]
- if wchar:
+ if wchar or v > 0xFF:
+ # split value across two bytes
u = (v >> 8) & 0xFF
l = (v >> 0) & 0xFF
- out_charmap[k] = f"0x{u:02X}, 0x{l:02X},"
+ out_charmap[k] = f"0x{u:02X},0x{l:02X},"
else:
out_charmap[k] = f"0x{v:02X},"
@@ -62,7 +60,7 @@ def convert_text(text : str, encoding : str, charmap : Dict[str, str]) -> str:
# flush text
to_flush = string[run_start:i]
if len(string[run_start:i]) != 0:
- out += ",".join(f"0x{b:02X}" for b in to_flush.encode(encoding))
+ out += ",".join(f"0x{b:02X}" for b in to_flush.encode(encoding, "replace"))
out += ","
if text is None:
return
@@ -126,24 +124,25 @@ def main():
)
parser.add_argument(
"--encoding",
- help="encoding (jpn or nes)",
+ help="base text encoding",
required=True,
type=str,
- choices=("jpn", "nes"),
+ choices=("utf-8", "SHIFT-JIS"),
)
parser.add_argument(
"--charmap",
help="path to charmap file specifying custom encoding elements",
required=True,
)
+ parser.add_argument(
+ "--wchar",
+ help="force wide encoding",
+ required=False,
+ action="store_true"
+ )
args = parser.parse_args()
- wchar,encoding = {
- "jpn" : (True, "SHIFT-JIS"),
- "nes" : (False, "raw-unicode-escape"),
- }[args.encoding]
-
- charmap = read_charmap(args.charmap, wchar)
+ charmap = read_charmap(args.charmap, args.wchar)
text = ""
if args.input == "-":
@@ -153,7 +152,7 @@ def main():
text = infile.read()
text = remove_comments(text)
- text = convert_text(text, encoding, charmap)
+ text = convert_text(text, args.encoding, charmap)
if args.output == "-":
sys.stdout.buffer.write(text.encode("utf-8"))
diff --git a/tools/patch_ique_driverominit.py b/tools/patch_ique_driverominit.py
new file mode 100755
index 0000000000..f7ca9daac2
--- /dev/null
+++ b/tools/patch_ique_driverominit.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python3
+import struct, sys, argparse
+
+import elftools.elf.elffile
+
+# Patches driverominit.o to change bnez t6,3c to nop at offset 0x20 in the .text section
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument("file", help="input file")
+ args = parser.parse_args()
+
+ with open(args.file, "r+b") as f:
+ elf = elftools.elf.elffile.ELFFile(f)
+
+ text_offset = 0
+ for section in elf.iter_sections():
+ if section.name == ".text":
+ text_offset = section["sh_offset"]
+ break
+
+ if text_offset == 0:
+ print("Error: .text section not found")
+ sys.exit(1)
+
+ f.seek(text_offset + 0x20)
+ instruction = struct.unpack(">I", f.read(4))[0]
+ if instruction != 0x15C00006: # bnez t6,3c
+ print("Error: expected instruction not found, found 0x%08X" % instruction)
+ sys.exit(1)
+
+ f.seek(text_offset + 0x20)
+ f.write(struct.pack(">I", 0x00000000)) # nop
diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml
index 472edb6964..b168afec86 100644
--- a/tools/permuter_settings.toml
+++ b/tools/permuter_settings.toml
@@ -33,3 +33,4 @@ ACTOR_DEBUG_PRINTF = "void"
[decompme.compilers]
"tools/ido_recomp/*/7.1/cc" = "ido7.1"
"tools/ido_recomp/*/5.3/cc" = "ido5.3"
+"tools/egcs/*/gcc" = "egcs_1.1.2-4c"
diff --git a/tools/version_config.py b/tools/version_config.py
index 9377637763..3516073f0d 100644
--- a/tools/version_config.py
+++ b/tools/version_config.py
@@ -23,8 +23,8 @@ class VersionConfig:
checksums: list[str]
# ROM offset to start of DMA table
dmadata_start: int
- # Whether the languages are PAL (EN/DE/FR) or not (JP/EN)
- text_lang_pal: bool
+ # "NTSC" (JP/EN), "PAL" (EN/DE/FR), or "CN" (JP/CN)
+ text_lang: str
# DMA segment information, in ROM order
dmadata_segments: OrderedDict[str, SegmentInfo]
# ROM pieces that are copied directly into the build with .incbin
@@ -92,7 +92,7 @@ def load_version_config(version: str) -> VersionConfig:
version=version,
checksums=config.get("checksums", ["checksum"]),
dmadata_start=config["dmadata_start"],
- text_lang_pal=config["text_lang_pal"],
+ text_lang=config["text_lang"],
dmadata_segments=load_dmadata_segments(version),
incbins=incbins,
variables=config["variables"],