1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-05 07:24:34 +00:00

Merge branch 'main' into meta_new_assets_2025

This commit is contained in:
Dragorn421 2025-02-05 19:21:41 +01:00
commit f70a07f8cf
No known key found for this signature in database
GPG key ID: 381AEBAF3D429335
71 changed files with 6590 additions and 14549 deletions

View file

@ -13,6 +13,7 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone &
python3-pip \
python3-venv \
git \
curl \
wget \
unzip \
clang-tidy \

7
Jenkinsfile vendored
View file

@ -120,6 +120,13 @@ pipeline {
}
}
}
stage('Build ique-cn') {
steps {
script {
build('ique-cn', 'oot-ique-cn.z64')
}
}
}
stage('Generate patch') {
when {
not {

View file

@ -1,7 +1,7 @@
MAKEFLAGS += --no-builtin-rules
# Ensure the build fails if a piped command fails
SHELL = /bin/bash
SHELL = /usr/bin/env bash
.SHELLFLAGS = -o pipefail -c
#### Build options ####
@ -36,6 +36,7 @@ COMPILER ?= ido
# gc-eu GameCube Europe/PAL
# gc-eu-mq GameCube Europe/PAL Master Quest
# gc-jp-ce GameCube Japan (Collector's Edition disc)
# ique-cn iQue Player (Simplified Chinese)
VERSION ?= gc-eu-mq-dbg
# Number of threads to extract and compress with.
N_THREADS ?= $(shell nproc)
@ -167,7 +168,6 @@ else ifeq ($(VERSION),gc-jp-ce)
BUILD_TIME := 21:53:00
REVISION := 15
else ifeq ($(VERSION),ique-cn)
COMPARE := 0
REGION ?= US
PLATFORM := IQUE
DEBUG_FEATURES ?= 0
@ -410,8 +410,8 @@ MAP := $(ROM:.z64=.map)
LDSCRIPT := $(ROM:.z64=.ld)
# description of ROM segments
SPEC := spec
SPEC_INCLUDES := $(wildcard spec_includes/*.inc)
SPEC := spec/spec
SPEC_INCLUDES := $(wildcard spec/*.inc)
SRC_DIRS := $(shell find src -type d)
UNDECOMPILED_DATA_DIRS := $(shell find data -type d)
@ -493,7 +493,7 @@ ASSET_FILES_OUT := $(foreach f,$(ASSET_FILES_BIN_EXTRACTED:.bin=.inc.c),$(f:$(EX
$(foreach f,$(ASSET_FILES_BIN_COMMITTED:.bin=.inc.c),$(BUILD_DIR)/$f)
# 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')
SPEC_O_FILES := $(shell $(CPP) $(CPPFLAGS) -I. $(SPEC) | $(BUILD_DIR_REPLACE) | sed -n -E 's/^[ \t]*include[ \t]*"([a-zA-Z0-9/_.-]+\.o)"/\1/p')
# Split out reloc files
O_FILES := $(filter-out %_reloc.o,$(SPEC_O_FILES))
@ -585,7 +585,7 @@ 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_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
@ -603,6 +603,7 @@ $(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 :=
$(BUILD_DIR)/src/libc/memmove.o: MIPS_VERSION := -mips2
else ifeq ($(DEBUG_FEATURES),1)
$(BUILD_DIR)/src/libc/%.o: OPTFLAGS := -g
$(BUILD_DIR)/src/libc/%.o: ASOPTFLAGS := -g
@ -825,10 +826,18 @@ $(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 $@
COM_PLUGIN := tools/com-plugin/common-plugin.so
LDFLAGS := -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)
ifeq ($(PLATFORM),IQUE)
LDFLAGS += -plugin $(COM_PLUGIN) -plugin-opt order=$(BASEROM_DIR)/bss-order.txt
$(ELF): $(BASEROM_DIR)/bss-order.txt
endif
$(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)/linker_scripts/makerom.ld -T $(BUILD_DIR)/undefined_syms.txt --no-check-sections --accept-unknown-input-arch --emit-relocs -Map $(MAP) -o $@
$(LD) $(LDFLAGS) -o $@
$(BUILD_DIR)/linker_scripts/makerom.ld: linker_scripts/makerom.ld
$(CPP) -I include $(CPPFLAGS) $< > $@
@ -845,10 +854,10 @@ $(O_FILES): | asset_files
.PHONY: o_files asset_files
$(BUILD_DIR)/$(SPEC): $(SPEC) $(SPEC_INCLUDES)
$(CPP) $(CPPFLAGS) $< | $(BUILD_DIR_REPLACE) > $@
$(BUILD_DIR)/spec: $(SPEC) $(SPEC_INCLUDES)
$(CPP) $(CPPFLAGS) -I. $< | $(BUILD_DIR_REPLACE) > $@
$(LDSCRIPT): $(BUILD_DIR)/$(SPEC)
$(LDSCRIPT): $(BUILD_DIR)/spec
$(MKLDSCRIPT) $< $@
$(BUILD_DIR)/undefined_syms.txt: undefined_syms.txt
@ -927,9 +936,9 @@ endif
# 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
$(LD) -r -T linker_scripts/data_with_rodata.ld -o $@ $^
$(LD) -r -G 0 -T linker_scripts/data_with_rodata.ld -o $@ $^
$(BUILD_DIR)/dmadata_table_spec.h $(BUILD_DIR)/compress_ranges.txt: $(BUILD_DIR)/$(SPEC)
$(BUILD_DIR)/dmadata_table_spec.h $(BUILD_DIR)/compress_ranges.txt: $(BUILD_DIR)/spec
$(MKDMADATA) $< $(BUILD_DIR)/dmadata_table_spec.h $(BUILD_DIR)/compress_ranges.txt
# Dependencies for files that may include the dmadata header automatically generated from the spec file
@ -964,8 +973,15 @@ endif
$(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)
ifeq ($(PLATFORM),IQUE)
ifneq ($(NON_MATCHING),1)
$(BUILD_DIR)/src/overlays/misc/ovl_kaleido_scope/ovl_kaleido_scope_reloc.o: POSTPROCESS_OBJ := $(PYTHON) tools/patch_ique_kaleido_reloc.py
endif
endif
$(BUILD_DIR)/src/overlays/%_reloc.o: $(BUILD_DIR)/spec
$(FADO) $$(tools/reloc_prereq $< $(notdir $*)) -n $(notdir $*) -o $(@:.o=.s) -M $(@:.o=.d)
$(POSTPROCESS_OBJ) $(@:.o=.s)
$(AS) $(ASFLAGS) $(@:.o=.s) -o $@
$(BUILD_DIR)/assets/%.inc.c: assets/%.png

View file

@ -42,6 +42,7 @@ It builds the following versions:
| gc-eu | 03-02-21 20:12:23 | GameCube Europe/PAL | `2c27b4e000e85fd78dbca551f1b1c965` |
| gc-eu-mq | 03-02-21 20:37:19 | GameCube Europe/PAL Master Quest | `1618403427e4344a57833043db5ce3c3` |
| gc-jp-ce | 03-10-08 21:53:00 | GameCube Japan (Collector's Edition Disc) | `0c13e0449a28ea5b925cdb8af8d29768` |
| ique-cn | 03-10-22 16:23:19 | iQue Player (Simplified Chinese) | `0ab48b2d44a74b3bb2d384f6170c2742` |
The default version is `gc-eu-mq-dbg`, i.e. the GameCube Europe/PAL Master Quest Debug ROM.

View file

@ -0,0 +1,60 @@
<Root>
<File Name="parameter_static" Segment="2">
<Texture Name="gHeartEmptyTex" OutName="heart_empty" Format="ia8" Width="16" Height="16" Offset="0x0"/>
<Texture Name="gHeartQuarterTex" OutName="heart_quarter" Format="ia8" Width="16" Height="16" Offset="0x100"/>
<Texture Name="gHeartHalfTex" OutName="heart_half" Format="ia8" Width="16" Height="16" Offset="0x200"/>
<Texture Name="gHeartThreeQuarterTex" OutName="heart_three_quarter" Format="ia8" Width="16" Height="16" Offset="0x300"/>
<Texture Name="gHeartFullTex" OutName="heart_full" Format="ia8" Width="16" Height="16" Offset="0x400"/>
<Texture Name="gDefenseHeartEmptyTex" OutName="defense_heart_empty" Format="ia8" Width="16" Height="16" Offset="0x500"/>
<Texture Name="gDefenseHeartQuarterTex" OutName="defense_heart_quarter" Format="ia8" Width="16" Height="16" Offset="0x600"/>
<Texture Name="gDefenseHeartHalfTex" OutName="defense_heart_half" Format="ia8" Width="16" Height="16" Offset="0x700"/>
<Texture Name="gDefenseHeartThreeQuarterTex" OutName="defense_heart_three_quarter" Format="ia8" Width="16" Height="16" Offset="0x800"/>
<Texture Name="gDefenseHeartFullTex" OutName="defense_heart_full" Format="ia8" Width="16" Height="16" Offset="0x900"/>
<Texture Name="gButtonBackgroundTex" OutName="button_background" Format="ia8" Width="32" Height="32" Offset="0xA00"/>
<Texture Name="gEquippedItemOutlineTex" OutName="equipped_item_outline" Format="ia8" Width="32" Height="32" Offset="0xE00"/>
<Texture Name="gEmptyCLeftArrowTex" OutName="empty_c_left_arrow" Format="ia8" Width="32" Height="32" Offset="0x1200"/>
<Texture Name="gEmptyCDownArrowTex" OutName="empty_c_down_arrow" Format="ia8" Width="32" Height="32" Offset="0x1600"/>
<Texture Name="gEmptyCRightArrowTex" OutName="empty_c_right_arrow" Format="ia8" Width="32" Height="32" Offset="0x1A00"/>
<Texture Name="gSmallKeyCounterIconTex" OutName="small_key_counter_icon" Format="ia8" Width="16" Height="16" Offset="0x1E00"/>
<Texture Name="gRupeeCounterIconTex" OutName="rupee_counter_icon" Format="ia8" Width="16" Height="16" Offset="0x1F00"/>
<Texture Name="gClockIconTex" OutName="clock_icon" Format="ia8" Width="16" Height="16" Offset="0x2000"/>
<Texture Name="gCarrotIconTex" OutName="carrot_icon" Format="rgba32" Width="16" Height="16" Offset="0x2100"/>
<Texture Name="gMapDungeonEntranceIconTex" OutName="map_dungeon_entrance_icon" Format="rgba16" Width="8" Height="8" Offset="0x2500"/>
<Texture Name="gMapChestIconTex" OutName="map_chest_icon" Format="rgba16" Width="8" Height="8" Offset="0x2580"/>
<Texture Name="gArcheryScoreIconTex" OutName="archery_score_icon" Format="rgba16" Width="24" Height="16" Offset="0x2600"/>
<Texture Name="gMapBossIconTex" OutName="map_boss_icon" Format="ia8" Width="8" Height="8" Offset="0x2900"/>
<Texture Name="gOcarinaBtnIconATex" OutName="ocarina_a" Format="ia8" Width="16" Height="16" Offset="0x2940"/>
<Texture Name="gOcarinaBtnIconCDownTex" OutName="ocarina_c_down" Format="ia8" Width="16" Height="16" Offset="0x2A40"/>
<Texture Name="gOcarinaBtnIconCRightTex" OutName="ocarina_c_right" Format="ia8" Width="16" Height="16" Offset="0x2B40"/>
<Texture Name="gOcarinaBtnIconCLeftTex" OutName="ocarina_c_left" Format="ia8" Width="16" Height="16" Offset="0x2C40"/>
<Texture Name="gOcarinaBtnIconCUpTex" OutName="ocarina_c_up" Format="ia8" Width="16" Height="16" Offset="0x2D40"/>
<Texture Name="gOcarinaTrebleClefTex" OutName="ocarina_treble_clef" Format="i4" Width="16" Height="32" Offset="0x2E40"/>
<Texture Name="gNaviCUpJPNTex" OutName="navi_c_up_jpn" Format="ia4" Width="32" Height="8" Offset="0x2F40"/>
<Texture Name="gNaviCUpENGTex" OutName="navi_c_up_eng" Format="ia4" Width="32" Height="8" Offset="0x2FC0"/>
<Texture Name="gCounterDigit0Tex" OutName="counter_digit_0" Format="i8" Width="8" Height="16" Offset="0x3140"/>
<Texture Name="gCounterDigit1Tex" OutName="counter_digit_1" Format="i8" Width="8" Height="16" Offset="0x31C0"/>
<Texture Name="gCounterDigit2Tex" OutName="counter_digit_2" Format="i8" Width="8" Height="16" Offset="0x3240"/>
<Texture Name="gCounterDigit3Tex" OutName="counter_digit_3" Format="i8" Width="8" Height="16" Offset="0x32C0"/>
<Texture Name="gCounterDigit4Tex" OutName="counter_digit_4" Format="i8" Width="8" Height="16" Offset="0x3340"/>
<Texture Name="gCounterDigit5Tex" OutName="counter_digit_5" Format="i8" Width="8" Height="16" Offset="0x33C0"/>
<Texture Name="gCounterDigit6Tex" OutName="counter_digit_6" Format="i8" Width="8" Height="16" Offset="0x3440"/>
<Texture Name="gCounterDigit7Tex" OutName="counter_digit_7" Format="i8" Width="8" Height="16" Offset="0x34C0"/>
<Texture Name="gCounterDigit8Tex" OutName="counter_digit_8" Format="i8" Width="8" Height="16" Offset="0x3540"/>
<Texture Name="gCounterDigit9Tex" OutName="counter_digit_9" Format="i8" Width="8" Height="16" Offset="0x35C0"/>
<Texture Name="gCounterColonTex" OutName="counter_colon" Format="i8" Width="8" Height="16" Offset="0x3640"/>
<Texture Name="gAmmoDigit0Tex" OutName="ammo_digit_0" Format="ia8" Width="8" Height="8" Offset="0x36C0"/>
<Texture Name="gAmmoDigit1Tex" OutName="ammo_digit_1" Format="ia8" Width="8" Height="8" Offset="0x3700"/>
<Texture Name="gAmmoDigit2Tex" OutName="ammo_digit_2" Format="ia8" Width="8" Height="8" Offset="0x3740"/>
<Texture Name="gAmmoDigit3Tex" OutName="ammo_digit_3" Format="ia8" Width="8" Height="8" Offset="0x3780"/>
<Texture Name="gAmmoDigit4Tex" OutName="ammo_digit_4" Format="ia8" Width="8" Height="8" Offset="0x37C0"/>
<Texture Name="gAmmoDigit5Tex" OutName="ammo_digit_5" Format="ia8" Width="8" Height="8" Offset="0x3800"/>
<Texture Name="gAmmoDigit6Tex" OutName="ammo_digit_6" Format="ia8" Width="8" Height="8" Offset="0x3840"/>
<Texture Name="gAmmoDigit7Tex" OutName="ammo_digit_7" Format="ia8" Width="8" Height="8" Offset="0x3880"/>
<Texture Name="gAmmoDigit8Tex" OutName="ammo_digit_8" Format="ia8" Width="8" Height="8" Offset="0x38C0"/>
<Texture Name="gAmmoDigit9Tex" OutName="ammo_digit_9" Format="ia8" Width="8" Height="8" Offset="0x3900"/>
<Texture Name="gUnusedAmmoDigitHalfTex" OutName="unused_ammo_digit_half" Format="ia8" Width="16" Height="8" Offset="0x3940"/>
<Texture Name="gMagicMeterEndTex" OutName="magic_meter_end" Format="ia8" Width="8" Height="16" Offset="0x39C0"/>
<Texture Name="gMagicMeterMidTex" OutName="magic_meter_mid" Format="ia8" Width="24" Height="16" Offset="0x3A40"/>
<Texture Name="gMagicMeterFillTex" OutName="magic_meter_fill" Format="ia8" Width="8" Height="8" Offset="0x3BC0"/>
</File>
</Root>

View file

@ -0,0 +1,110 @@
// Specification for linker plugin COMMON symbol order for the ique-cn version
build/ique-cn/boot_bss_1.o {
bk;
__osBaseCounter;
__osBbRCountWraps;
__osBbLastRCount;
__osViIntrCount;
insize;
outcnt;
bb;
__osCurrentTime;
hufts;
__osBbLastVCount;
__osTimerCounter;
__osBbVCountWraps;
__osFinalrom;
inptr;
ifd;
}
build/ique-cn/boot_bss_boot_main.o {
sBootThreadInfo;
sIdleThread;
sIdleThreadStack;
sIdleThreadInfo;
sBootThreadStack;
}
build/ique-cn/boot_bss_idle.o {
sMainThread;
sMainStack;
sMainStackInfo;
sPiMgrCmdBuff;
}
build/ique-cn/boot_bss_viconfig.o {
gViConfigMode;
gViConfigModeType;
}
build/ique-cn/boot_bss_z_std_dma.o {
sDmaMgrStackInfo;
sDmaMgrMsgQueue;
sDmaMgrMsgBuf;
sDmaMgrThread;
sDmaMgrStack;
}
build/ique-cn/boot_bss_2.o {
__osThreadSave;
__Dom2SpeedParam;
__CartRomHandle;
__osPiAccessQueue;
__Dom1SpeedParam;
gPiMgrCmdQueue;
__osBaseTimer;
__osEventStateTab;
}
build/ique-cn/code_bss_1.o {
D_8015FA8C;
__osMaxControllers;
D_8015FA88;
__osContLastCmd;
__osEepromTimerMsg;
}
build/ique-cn/code_bss_z_actor.o {
D_8015BBA8;
sCurCeilingPoly;
sCurCeilingBgId;
D_8015BC00;
D_8015BC10;
D_8015BC14;
D_8015BC18;
sNearestAttentionActor;
sPrioritizedAttentionActor;
sNearestAttentionActorDistSq;
sBgmEnemyDistSq;
sHighestAttentionPriority;
sAttentionPlayerRotY;
}
build/ique-cn/code_bss_2.o {
__osContPifRam;
gSaveContext;
sUnknownBssPadding;
__osEepromTimerMsgQueue;
__osSiAccessQueue;
}
build/ique-cn/code_bss_3.o {
sCharTexSize;
sCharTexScale;
sOcarinaButtonAPrimR;
sOcarinaButtonAPrimB;
sOcarinaButtonAPrimG;
sOcarinaButtonAEnvR;
sOcarinaButtonAEnvB;
sOcarinaButtonAEnvG;
sOcarinaButtonCPrimR;
sOcarinaButtonCPrimB;
sOcarinaButtonCPrimG;
sOcarinaButtonCEnvR;
sOcarinaButtonCEnvB;
sOcarinaButtonCEnvG;
}

View file

@ -928,8 +928,8 @@ assets:
end_offset: 0x59D0
- name: overlays/ovl_file_choose
xml_path: assets/xml/overlays/ovl_file_choose.xml
start_offset: 0xEC40
end_offset: 0xF320
start_offset: 0xF6E0
end_offset: 0xFDC0
- name: overlays/ovl_Magic_Dark
xml_path: assets/xml/overlays/ovl_Magic_Dark.xml
start_offset: 0xC90
@ -1207,7 +1207,7 @@ assets:
- 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
xml_path: assets/xml/textures/parameter_static_ique.xml
- name: textures/place_title_cards
xml_path: assets/xml/textures/place_title_cards.xml
- name: textures/skyboxes

View file

@ -19,6 +19,7 @@
"OOT_REGION=REGION_JP",
"PLATFORM_N64=1",
"PLATFORM_GC=0",
"PLATFORM_IQUE=0",
"DEBUG_FEATURES=0",
"NDEBUG",
"F3DEX_GBI_2"
@ -44,6 +45,7 @@
"OOT_REGION=REGION_JP",
"PLATFORM_N64=0",
"PLATFORM_GC=1",
"PLATFORM_IQUE=0",
"DEBUG_FEATURES=0",
"NDEBUG",
"F3DEX_GBI_2",
@ -71,6 +73,7 @@
"OOT_REGION=REGION_JP",
"PLATFORM_N64=0",
"PLATFORM_GC=1",
"PLATFORM_IQUE=0",
"DEBUG_FEATURES=0",
"NDEBUG",
"F3DEX_GBI_2",
@ -98,6 +101,7 @@
"OOT_REGION=REGION_US",
"PLATFORM_N64=0",
"PLATFORM_GC=1",
"PLATFORM_IQUE=0",
"DEBUG_FEATURES=0",
"NDEBUG",
"F3DEX_GBI_2",
@ -125,6 +129,7 @@
"OOT_REGION=REGION_US",
"PLATFORM_N64=0",
"PLATFORM_GC=1",
"PLATFORM_IQUE=0",
"DEBUG_FEATURES=0",
"NDEBUG",
"F3DEX_GBI_2",
@ -152,6 +157,7 @@
"OOT_REGION=REGION_EU",
"PLATFORM_N64=0",
"PLATFORM_GC=1",
"PLATFORM_IQUE=0",
"DEBUG_FEATURES=1",
"F3DEX_GBI_2",
"F3DEX_GBI_PL",
@ -179,6 +185,7 @@
"OOT_REGION=REGION_EU",
"PLATFORM_N64=0",
"PLATFORM_GC=1",
"PLATFORM_IQUE=0",
"DEBUG_FEATURES=0",
"NDEBUG",
"F3DEX_GBI_2",
@ -206,6 +213,7 @@
"OOT_REGION=REGION_EU",
"PLATFORM_N64=0",
"PLATFORM_GC=1",
"PLATFORM_IQUE=0",
"DEBUG_FEATURES=0",
"NDEBUG",
"F3DEX_GBI_2",
@ -233,6 +241,7 @@
"OOT_REGION=REGION_JP",
"PLATFORM_N64=0",
"PLATFORM_GC=1",
"PLATFORM_IQUE=0",
"DEBUG_FEATURES=0",
"NDEBUG",
"F3DEX_GBI_2",
@ -241,6 +250,35 @@
],
"cStandard": "gnu89"
},
{
"name": "oot-ique-cn",
"compilerArgs": [
"-m32"
],
"includePath": [
"include",
"include/libc",
"src",
"build/ique-cn",
".",
"extracted/ique-cn"
],
"defines": [
"_LANGUAGE_C",
"OOT_VERSION=IQUE_CN",
"OOT_REGION=REGION_US",
"PLATFORM_N64=0",
"PLATFORM_GC=0",
"PLATFORM_IQUE=1",
"BBPLAYER",
"DEBUG_FEATURES=0",
"NDEBUG",
"F3DEX_GBI_2",
"F3DEX_GBI_PL",
"GBI_DOWHILE"
],
"cStandard": "gnu89"
}
],
"version": 4
}

View file

@ -15,7 +15,7 @@
* - Argument 3: Cache load policy for the sequence (AudioCacheLoadType)
* - Argument 4: Sequence flags
*/
#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
#define SEQ_0_FLAGS SEQ_FLAG_FANFARE
#else
#define SEQ_0_FLAGS SEQ_FLAG_FANFARE | SEQ_FLAG_ENEMY

View file

@ -334,7 +334,7 @@
/* 0x3942 */ DEFINE_SFX(CHAN_4EA8, NA_SE_EN_BALINADE_THUNDER, 0x34, 3, 0, 0)
/* 0x3943 */ DEFINE_SFX(CHAN_415D, NA_SE_EN_BALINADE_BL_SPARK, 0x20, 2, 0, 0)
/* 0x3944 */ DEFINE_SFX(CHAN_4184, NA_SE_EN_BALINADE_BL_DEAD, 0x34, 3, 0, 0)
#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
/* 0x3945 */ DEFINE_SFX(CHAN_4E86, NA_SE_EN_BALINADE_BREAK2, 0x30, 3, 0, 0)
#else
/* 0x3945 */ DEFINE_SFX(CHAN_4E86, NA_SE_EN_BALINADE_BREAK2, 0x34, 3, 0, 0)

View file

@ -43,7 +43,7 @@
/* 0x281F */ DEFINE_SFX(CHAN_1B61, NA_SE_EV_TBOX_UNLOCK, 0x30, 0, 0, 0)
/* 0x2820 */ DEFINE_SFX(CHAN_1B7D, NA_SE_EV_TBOX_OPEN, 0x30, 0, 0, 0)
/* 0x2821 */ DEFINE_SFX(CHAN_1B93, NA_SE_SY_TIMER, 0xA0, 0, 0, SFX_FLAG_13 | SFX_FLAG_3)
#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
/* 0x2822 */ DEFINE_SFX(CHAN_1BE9, NA_SE_EV_FLAME_IGNITION, 0x20, 2, 0, 0)
#else
/* 0x2822 */ DEFINE_SFX(CHAN_1BE9, NA_SE_EV_FLAME_IGNITION, 0x2D, 2, 0, 0)
@ -108,7 +108,7 @@
/* 0x285C */ DEFINE_SFX(CHAN_2374, NA_SE_EV_BLOCKSINK, 0x30, 2, 0, 0)
/* 0x285D */ DEFINE_SFX(CHAN_2389, NA_SE_EV_CROWD, 0x30, 0, 0, SFX_FLAG_13 | SFX_FLAG_12 | SFX_FLAG_11)
/* 0x285E */ DEFINE_SFX(CHAN_23A6, NA_SE_EV_WATER_LEVEL_DOWN, 0x30, 0, 0, 0)
#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
/* 0x285F */ DEFINE_SFX(CHAN_23D5, NA_SE_EV_NAVY_VANISH, 0x30, 0, 0, 0)
#else
/* 0x285F */ DEFINE_SFX(CHAN_23D5, NA_SE_EV_NAVY_VANISH, 0x2C, 0, 0, 0)

View file

@ -28,7 +28,7 @@
/* 0x1810 */ DEFINE_SFX(CHAN_10A2, NA_SE_IT_BOOMERANG_FLY, 0x30, 0, 0, SFX_FLAG_10)
/* 0x1811 */ DEFINE_SFX(CHAN_10D2, NA_SE_IT_SWORD_STRIKE, 0x40, 2, 0, 0)
/* 0x1812 */ DEFINE_SFX(CHAN_10E6, NA_SE_IT_HAMMER_SWING, 0x30, 0, 1, 0)
#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
/* 0x1813 */ DEFINE_SFX(CHAN_10F4, NA_SE_IT_HOOKSHOT_REFLECT, 0x30, 0, 0, 0)
#else
/* 0x1813 */ DEFINE_SFX(CHAN_10F4, NA_SE_IT_HOOKSHOT_REFLECT, 0x20, 0, 0, 0)

View file

@ -4,7 +4,11 @@
#define OS_MESG_NOBLOCK 0
#define OS_MESG_BLOCK 1
#ifndef BBPLAYER
#define OS_NUM_EVENTS 15
#else
#define OS_NUM_EVENTS 31
#endif
#define OS_EVENT_SW1 0 /* CPU SW1 interrupt */
#define OS_EVENT_SW2 1 /* CPU SW2 interrupt */

View file

@ -18,5 +18,7 @@ SECTIONS {
* To avoid dealing with this, we just discard all .gptab sections.
*/
*(.gptab.*)
/* Inhibit merging of COMMON into scommon */
*(.scommon)
}
}

View file

@ -17,6 +17,7 @@
include "$(BUILD_DIR)/src/libultra/os/writebackdcache.o"
include "$(BUILD_DIR)/src/libultra/io/vigetnextframebuf.o"
include "$(BUILD_DIR)/src/libultra/io/pimgr.o"
include "$(BUILD_DIR)/src/libultra/os/kdebugserver.o"
include "$(BUILD_DIR)/src/libultra/io/devmgr.o"
include "$(BUILD_DIR)/src/libultra/io/pirawdma.o"
include "$(BUILD_DIR)/src/libultra/os/virtualtophysical.o"

View file

@ -35,6 +35,7 @@
include "$(BUILD_DIR)/src/libultra/os/sethwintrroutine.o"
include "$(BUILD_DIR)/src/libultra/os/gethwintrroutine.o"
include "$(BUILD_DIR)/src/libultra/io/pimgr.o"
include "$(BUILD_DIR)/src/libultra/os/kdebugserver.o"
include "$(BUILD_DIR)/src/libultra/io/epirawdma.o"
include "$(BUILD_DIR)/src/libultra/io/epiread.o"
include "$(BUILD_DIR)/src/libultra/io/epidma.o"

View file

@ -19,6 +19,7 @@
include "$(BUILD_DIR)/src/libultra/os/writebackdcache.o"
include "$(BUILD_DIR)/src/libultra/io/vigetnextframebuf.o"
include "$(BUILD_DIR)/src/libultra/io/pimgr.o"
include "$(BUILD_DIR)/src/libultra/os/kdebugserver.o"
include "$(BUILD_DIR)/src/libultra/io/devmgr.o"
include "$(BUILD_DIR)/src/libultra/io/pirawdma.o"
include "$(BUILD_DIR)/src/libultra/os/virtualtophysical.o"

View file

@ -17,6 +17,12 @@ endseg
beginseg
name "boot"
#if PLATFORM_IQUE
include "*$(BUILD_DIR)/boot_bss_1.o"
include "*$(BUILD_DIR)/boot_bss_boot_main.o"
include "*$(BUILD_DIR)/boot_bss_idle.o"
include "*$(BUILD_DIR)/boot_bss_viconfig.o"
#endif
include "$(BUILD_DIR)/src/boot/boot_main.o"
include "$(BUILD_DIR)/src/boot/idle.o"
#if OOT_VERSION >= PAL_1_0
@ -24,6 +30,9 @@ beginseg
#endif
include "$(BUILD_DIR)/src/boot/carthandle.o"
include "$(BUILD_DIR)/src/boot/z_std_dma.o"
#if PLATFORM_IQUE
include "*$(BUILD_DIR)/boot_bss_z_std_dma.o"
#endif
#if !PLATFORM_IQUE
include "$(BUILD_DIR)/src/boot/yaz0.o"
#else
@ -60,11 +69,11 @@ beginseg
// libultra
#if PLATFORM_N64
#include "spec_includes/boot_libultra_n64.inc"
#include "boot_libultra_n64.inc"
#elif PLATFORM_GC
#include "spec_includes/boot_libultra_gc.inc"
#include "boot_libultra_gc.inc"
#elif PLATFORM_IQUE
#include "spec_includes/boot_libultra_ique.inc"
#include "boot_libultra_ique.inc"
#endif
// libgcc
@ -101,6 +110,10 @@ beginseg
include "$(BUILD_DIR)/src/libultra/libc/xprintf.o"
#endif
#if PLATFORM_IQUE
include "*$(BUILD_DIR)/boot_bss_2.o"
#endif
// Functions that GCC-compiled code may depend on, placed in boot so they will always be loaded
#ifdef COMPILER_GCC
include "$(BUILD_DIR)/src/libultra/libc/string.o"
@ -505,6 +518,9 @@ beginseg
after "dmadata"
align 0x20
#if PLATFORM_IQUE
include "*$(BUILD_DIR)/code_bss_1.o"
#endif
include "$(BUILD_DIR)/src/code/z_en_a_keep.o"
include "$(BUILD_DIR)/src/code/z_en_item00.o"
include "$(BUILD_DIR)/src/code/z_eff_blure.o"
@ -518,6 +534,9 @@ beginseg
include "$(BUILD_DIR)/src/code/flg_set.o"
include "$(BUILD_DIR)/src/code/z_DLF.o"
include "$(BUILD_DIR)/src/code/z_actor.o"
#if PLATFORM_IQUE
include "*$(BUILD_DIR)/code_bss_z_actor.o"
#endif
include "$(BUILD_DIR)/src/code/z_actor_dlftbls.o"
include "$(BUILD_DIR)/src/code/z_bgcheck.o"
include "$(BUILD_DIR)/src/code/z_bg_collect.o"
@ -752,11 +771,11 @@ beginseg
// libultra
#if PLATFORM_N64
#include "spec_includes/code_libultra_n64.inc"
#include "code_libultra_n64.inc"
#elif PLATFORM_GC
#include "spec_includes/code_libultra_gc.inc"
#include "code_libultra_gc.inc"
#elif PLATFORM_IQUE
#include "spec_includes/code_libultra_ique.inc"
#include "code_libultra_ique.inc"
#endif
// libc
@ -778,6 +797,11 @@ beginseg
include "$(BUILD_DIR)/src/libc/sqrt.o"
#endif
#if PLATFORM_IQUE
include "*$(BUILD_DIR)/code_bss_2.o"
include "*$(BUILD_DIR)/code_bss_3.o"
#endif
// For some reason, the data sections of z_message and z_game_over are
// placed near the rodata sections of other files, so we first build this
// combined object before the final link.
@ -816,7 +840,6 @@ beginseg
include "$(BUILD_DIR)/src/libultra/mgu/mtxl2f.o"
#endif
#endif
endseg
beginseg
@ -965,9 +988,9 @@ endseg
// Overlays for most actors and effects are reordered between versions. On N64 and iQue,
// the overlays are in some arbitrary order, while on GameCube they are sorted alphabetically.
#if !PLATFORM_GC
#include "spec_includes/overlays_n64_ique.inc"
#include "overlays_n64_ique.inc"
#else
#include "spec_includes/overlays_gc.inc"
#include "overlays_gc.inc"
#endif
beginseg
@ -4891,9 +4914,9 @@ endseg
// Scene files are reordered between versions. On GameCube and iQue, dungeon scenes
// have been moved to the beginning.
#if PLATFORM_N64
#include "spec_includes/scenes_n64.inc"
#include "scenes_n64.inc"
#else
#include "spec_includes/scenes_gc_ique.inc"
#include "scenes_gc_ique.inc"
#endif
beginseg

View file

@ -41,7 +41,7 @@
* DPad-Down disables sending fault pages over osSyncPrintf.
*/
#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-eu-mq-dbg:144 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160" \
"gc-us-mq:160"
"gc-us-mq:160 ique-cn:160"
#include "global.h"
#include "alloca.h"

View file

@ -5,7 +5,7 @@
extern uintptr_t gSegments[NUM_SEGMENTS];
#pragma increment_block_number "gc-eu:252 gc-eu-mq:252 gc-jp:252 gc-jp-ce:252 gc-jp-mq:252 gc-us:252 gc-us-mq:252" \
"ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
"ique-cn:252 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
extern struct PreNmiBuff* gAppNmiBufferPtr;
extern struct Scheduler gScheduler;
@ -24,7 +24,7 @@ extern struct IrqMgr gIrqMgr;
#endif
#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:122 ntsc-1.1:122 ntsc-1.2:122 pal-1.0:120 pal-1.1:120"
"ique-cn:128 ntsc-1.0:122 ntsc-1.1:122 ntsc-1.2:122 pal-1.0:120 pal-1.1:120"
extern u8 _buffersSegmentEnd[];

View file

@ -5,7 +5,7 @@
#include "macros.h"
#include "sys_math3d.h"
#pragma increment_block_number "gc-eu:97 gc-eu-mq:97 gc-jp:97 gc-jp-ce:97 gc-jp-mq:97 gc-us:97 gc-us-mq:97" \
#pragma increment_block_number "gc-eu:97 gc-eu-mq:97 gc-jp:97 gc-jp-ce:97 gc-jp-mq:97 gc-us:97 gc-us-mq:97 ique-cn:97" \
"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,

View file

@ -15,8 +15,8 @@
#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:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
static CollisionPoly* sCurCeilingPoly;
static s32 sCurCeilingBgId;
CollisionPoly* sCurCeilingPoly;
s32 sCurCeilingBgId;
#if DEBUG_FEATURES
#define ACTOR_DEBUG_PRINTF \
@ -265,7 +265,10 @@ typedef struct AttentionColor {
/* 0x04 */ Color_RGBA8 secondary; // Used for Navi's outer color
} AttentionColor; // size = 0x8
AttentionColor sAttentionColors[ACTORCAT_MAX + 1] = {
// Needs to be static to work around an EGCS codegen bug in Attention_SetNaviState on iQue builds.
// If this isn't static, accessing the element at offset 4 into the struct (secondary.r) will not
// be offset correctly in the compiled code.
static AttentionColor sAttentionColors[ACTORCAT_MAX + 1] = {
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_SWITCH
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_BG
{ { 255, 255, 255, 255 }, { 0, 0, 255, 0 } }, // ACTORCAT_PLAYER

View file

@ -5,7 +5,7 @@
#include "overlays/actors/ovl_En_Horse/z_en_horse.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:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
"ique-cn: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);
s32 Camera_RequestModeImpl(Camera* camera, s16 requestedMode, u8 forceModeChange);
@ -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:124 ntsc-1.1:124 ntsc-1.2:124 pal-1.0:122 pal-1.1:122"
"ique-cn:128 ntsc-1.0:124 ntsc-1.1:124 ntsc-1.2:124 pal-1.0:122 pal-1.1:122"
s32 Camera_KeepOn4(Camera* camera) {
static Vec3f D_8015BD50;

View file

@ -16,7 +16,7 @@
#include "z_lib.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:96 ntsc-1.1:96 ntsc-1.2:96 pal-1.0:96 pal-1.1:96"
"ique-cn:128 ntsc-1.0:96 ntsc-1.1:96 ntsc-1.2:96 pal-1.0:96 pal-1.1:96"
typedef s32 (*ColChkResetFunc)(PlayState*, Collider*);
typedef void (*ColChkApplyFunc)(PlayState*, CollisionCheckContext*, Collider*);
@ -2225,7 +2225,7 @@ void CollisionCheck_ATTrisVsACCyl(PlayState* play, CollisionCheckContext* colChk
}
#pragma increment_block_number "gc-eu:252 gc-eu-mq:252 gc-jp:252 gc-jp-ce:252 gc-jp-mq:252 gc-us:252 gc-us-mq:252" \
"ntsc-1.0:252 ntsc-1.1:252 ntsc-1.2:252 pal-1.0:252 pal-1.1:252"
"ique-cn:252 ntsc-1.0:252 ntsc-1.1:252 ntsc-1.2:252 pal-1.0:252 pal-1.1:252"
void CollisionCheck_ATCylVsACQuad(PlayState* play, CollisionCheckContext* colChkCtx, Collider* atCol, Collider* acCol) {
static TriNorm tri1;

View file

@ -6,6 +6,10 @@
"ntsc-1.0:176 ntsc-1.1:176 ntsc-1.2:176 pal-1.0:160 pal-1.1:160"
ALIGNED(16) SaveContext gSaveContext;
#if PLATFORM_IQUE
// Unknown bss padding, placed here for matching
char sUnknownBssPadding[0x20];
#endif
u32 D_8015FA88;
u32 D_8015FA8C;

View file

@ -13,7 +13,7 @@ typedef struct InputCombo {
} InputCombo; // size = 0x4
#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:160 ntsc-1.1:160 ntsc-1.2:160 pal-1.0:160 pal-1.1:160"
"ique-cn:128 ntsc-1.0:160 ntsc-1.1:160 ntsc-1.2:160 pal-1.0:160 pal-1.1:160"
RegEditor* gRegEditor;

View file

@ -1,5 +1,5 @@
#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" \
"ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:192 pal-1.1:192"
"ique-cn:192 ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:192 pal-1.1:192"
#include "global.h"
#include "terminal.h"

View file

@ -1,5 +1,5 @@
#pragma increment_block_number "gc-eu:208 gc-eu-mq:208 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
"ntsc-1.0:208 ntsc-1.1:208 ntsc-1.2:208 pal-1.0:220 pal-1.1:220"
"ique-cn:192 ntsc-1.0:208 ntsc-1.1:208 ntsc-1.2:208 pal-1.0:220 pal-1.1:220"
#include "global.h"
#include "ultra64.h"
@ -215,7 +215,7 @@ s16 sSunDepthTestX;
s16 sSunDepthTestY;
#pragma increment_block_number "gc-eu:240 gc-eu-mq:240 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:240 pal-1.1:240"
"ique-cn:224 ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:240 pal-1.1:240"
LightNode* sNGameOverLightNode;
LightInfo sNGameOverLightInfo;

View file

@ -4129,6 +4129,8 @@ void Message_Update(PlayState* play) {
};
#if OOT_VERSION < GC_US
static s32 sUnknown = 0;
#elif PLATFORM_IQUE
static u16 sUnknown = 0;
#endif
static char D_80153D74 = 0;
MessageContext* msgCtx = &play->msgCtx;

View file

@ -4,7 +4,9 @@ OSPifRam __osContPifRam;
u8 __osContLastCmd;
u8 __osMaxControllers; // always 4
#ifndef BBPLAYER
OSTimer __osEepromTimer;
#endif
OSMesgQueue __osEepromTimerMsgQueue;
OSMesg __osEepromTimerMsg;

View file

@ -1,7 +1,7 @@
#include "global.h"
u32 __osPiAccessQueueEnabled = false;
OSMesg piAccessBuf[1];
static OSMesg piAccessBuf[1];
OSMesgQueue __osPiAccessQueue;
void __osPiCreateAccessQueue(void) {

View file

@ -6,11 +6,10 @@ OSDevMgr __osPiDevMgr = { 0 };
OSPiHandle __Dom1SpeedParam;
OSPiHandle __Dom2SpeedParam;
OSThread piThread;
STACK(piStackThread, 0x1000);
OSMesgQueue piEventQueue;
OSMesg piEventBuf[2];
OSThread __osThreadSave;
static OSThread piThread;
static STACK(piThreadStack, 0x1000);
static OSMesgQueue piEventQueue;
static OSMesg piEventBuf[2];
OSPiHandle* __osPiTable = NULL;
OSPiHandle* __osCurrentHandle[] = {
@ -47,7 +46,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQueue, OSMesg* cmdBuf, s32 cmd
__osPiDevMgr.dma = __osPiRawStartDma;
__osPiDevMgr.edma = __osEPiRawStartDma;
osCreateThread(&piThread, 0, __osDevMgrMain, (void*)&__osPiDevMgr, STACK_TOP(piStackThread), pri);
osCreateThread(&piThread, 0, __osDevMgrMain, (void*)&__osPiDevMgr, STACK_TOP(piThreadStack), pri);
osStartThread(&piThread);
__osRestoreInt(prevInt);

View file

@ -1,6 +1,6 @@
#include "global.h"
OSMesg siAccessBuf[1];
static OSMesg siAccessBuf[1];
OSMesgQueue __osSiAccessQueue;
u32 __osSiAccessQueueEnabled = false;

View file

@ -2,12 +2,12 @@
#include "stack.h"
#include "ultra64/internal.h"
OSThread viThread;
STACK(viThreadStack, 0x1000);
OSMesgQueue viEventQueue;
OSMesg viEventBuf[5];
OSIoMesg viRetraceMsg;
OSIoMesg viCounterMsg;
static OSThread viThread;
static STACK(viThreadStack, 0x1000);
static OSMesgQueue viEventQueue;
static OSMesg viEventBuf[5];
static OSIoMesg viRetraceMsg;
static OSIoMesg viCounterMsg;
OSDevMgr __osViDevMgr = { 0 };
u32 __additional_scanline = 0;

View file

@ -0,0 +1,3 @@
#include "ultra64.h"
OSThread __osThreadSave;

View file

@ -125,22 +125,22 @@ static ColliderCylinderInit sLightBallCylinderInit = {
static u8 D_808E4C58[] = { 0, 12, 10, 12, 14, 16, 12, 14, 16, 12, 14, 16, 12, 14, 16, 10, 16, 14 };
static Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f };
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.0:0" \
"ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ique-cn:0" \
"ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
static EnGanonMant* sCape;
// 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" \
"ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
"ique-cn:128 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
static s32 sSeed1;
static s32 sSeed2;
static s32 sSeed3;
#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" \
"ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
"ique-cn:192 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
static BossGanon* sGanondorf;

View file

@ -7,7 +7,7 @@
#include "assets/objects/object_toki_objects/object_toki_objects.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:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
"ique-cn:128 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)

View file

@ -14,8 +14,8 @@
#include "assets/scenes/dungeons/ice_doukutu/ice_doukutu_scene.h"
#include "terminal.h"
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.0:0" \
"ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ique-cn:128" \
"ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
@ -1397,7 +1397,7 @@ void func_80B3F3D8(void) {
}
#pragma increment_block_number "gc-eu:64 gc-eu-mq:64 gc-jp:64 gc-jp-ce:64 gc-jp-mq:64 gc-us:64 gc-us-mq:64" \
"ntsc-1.0:64 ntsc-1.1:64 ntsc-1.2:64 pal-1.0:64 pal-1.1:64"
"ique-cn:128 ntsc-1.0:64 ntsc-1.1:64 ntsc-1.2:64 pal-1.0:64 pal-1.1:64"
void EnXc_PlayDiveSFX(Vec3f* src, PlayState* play) {
static Vec3f D_80B42DA0;

View file

@ -454,7 +454,6 @@ static f32 sFishGroupAngle1;
static f32 sFishGroupAngle2;
static f32 sFishGroupAngle3;
static FishingEffect sEffects[FISHING_EFFECT_COUNT];
static Vec3f sStreamSfxProjectedPos;
void Fishing_SetColliderElement(s32 index, ColliderJntSph* collider, Vec3f* pos, f32 scale) {
collider->elements[index].dim.worldSphere.center.x = pos->x;
@ -5139,6 +5138,7 @@ static Vec3s sSinkingLureLocations[] = {
};
void Fishing_UpdateOwner(Actor* thisx, PlayState* play2) {
static Vec3f sStreamSfxProjectedPos;
PlayState* play = play2;
Fishing* this = (Fishing*)thisx;
Vec3f multiVecSrc;

View file

@ -332,21 +332,21 @@ void Player_Action_CsAction(Player* this, PlayState* play);
// .bss part 1
#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:64 ntsc-1.1:64 ntsc-1.2:64 pal-1.0:64 pal-1.1:64"
"ique-cn:128 ntsc-1.0:64 ntsc-1.1:64 ntsc-1.2:64 pal-1.0:64 pal-1.1:64"
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: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"
"ique-cn: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: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"
"ique-cn:192 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
// .data

View file

@ -1140,7 +1140,7 @@ static s16 sQuestItemFlags[] = {
QUEST_MEDALLION_WATER, QUEST_MEDALLION_SPIRIT, QUEST_MEDALLION_SHADOW, QUEST_MEDALLION_LIGHT,
};
#if OOT_NTSC && OOT_VERSION < GC_JP_CE
#if (OOT_NTSC && OOT_VERSION < GC_JP_CE) || PLATFORM_IQUE
static void* sSaveXTextures[] = { gFileSelSaveXJPNTex, gFileSelSaveXENGTex };
#endif

File diff suppressed because it is too large Load diff

View file

@ -902,9 +902,14 @@ static void* sPromptChoiceTexs[][2] = {
#endif
};
//! @bug On the iQue version, kaleido bss is reported to be just 0x10 bytes large in the relocation section. This is
//! likely due to not counting the size of COMMON symbols in the overlay. sPlayerPreRender was likely originally
//! non-static, but we make it static here to match the bss order and patch the relocation section later in the build
//! as our relocation generator does count COMMON symbols.
static u8 D_808321A8[5];
static PreRender sPlayerPreRender;
static void* sPreRenderCvg;
void* sPreRenderCvg;
void KaleidoScope_SetupPlayerPreRender(PlayState* play) {
Gfx* gfx;

View file

@ -38,6 +38,7 @@ all: $(PROGRAMS) $(IDO_RECOMP_5_3_DIR) $(IDO_RECOMP_7_1_DIR) $(EGCS_DIR)
$(MAKE) -C ZAPD
$(MAKE) -C fado
$(MAKE) -C audio
$(MAKE) -C com-plugin
$(MAKE) -C assets
clean:
@ -46,6 +47,7 @@ clean:
$(MAKE) -C ZAPD clean
$(MAKE) -C fado clean
$(MAKE) -C audio clean
$(MAKE) -C com-plugin clean
$(MAKE) -C assets clean
distclean: clean

3
tools/com-plugin/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
*.d
*.o
*.so

12
tools/com-plugin/.gitrepo Normal file
View file

@ -0,0 +1,12 @@
; DO NOT EDIT (unless you know what you are doing)
;
; This subdirectory is a git "subrepo", and this file is maintained by the
; git-subrepo command. See https://github.com/ingydotnet/git-subrepo#readme
;
[subrepo]
remote = git@github.com:Thar0/com-plugin.git
branch = main
commit = 81595ed1ca40d22846064537ba5fa8147b9f7068
parent = a1632bcbfc04672f21866f11bf074b420dea9693
method = merge
cmdver = 0.4.6

674
tools/com-plugin/LICENSE Normal file
View file

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program 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 3 of the License, or
(at your option) any later version.
This program 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, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

19
tools/com-plugin/Makefile Normal file
View file

@ -0,0 +1,19 @@
TARGET := common-plugin.so
SOURCES := plugin.c
CC := gcc
CFLAGS := -Wall -Wextra -std=gnu11 -O2 -fPIC -DHAVE_STDINT_H
DEP_FILES := $(TARGET:.so=.d)
.PHONY: all clean
all: $(TARGET)
clean:
$(RM) $(TARGET) $(DEP_FILES)
$(TARGET): $(SOURCES)
$(CC) -shared $(CFLAGS) -MMD -o $@ $^
-include $(DEP_FILES)

View file

@ -0,0 +1,31 @@
# COMMON symbol ordering linker plugin
This repository contains a plugin for linkers that support the External Linker Plugin API that allows providing a manual specification for COMMON symbol ordering, intended to support matching decompilations that must reproduce an order for COMMON symbols whose names are unknown. Currently only 32-bit Big-Endian MIPS ELF object files are supported.
## How it works
The plugin expects a symbol order txt file listing the COMMON symbols in order on each line. The plugin searches each input file for the symbol definitions for these and emits a new ELF file containing BSS definitions for each COMMON symbol found with the appropriate size and alignment. This ELF file is then added as an extra input file to the linker, overriding the COMMON definitions in the other input files.
## Usage
Add `-plugin common-plugin.so -plugin-opt order=bss_order.txt` to the linker invocation, replacing `bss_order.txt` with an alternative path if desired.
Also add any bss output files mentioned in the order file to the linker script (e.g. `bss.o` would be added as `*bss.o(.bss*)`) so that the additional input file is not discarded, if required.
### **Symbol order file syntax**
```
<ofile> {
<sym1>;
<sym2>;
<sym3>;
[...]
}
[...]
```
The order file supports 2 styles of single-line comments (`//` and `#`) and C-style multi-line comments and ignores whitespace.
## Building
Run `make` to build `common-plugin.so`.

3148
tools/com-plugin/elf.h Normal file

File diff suppressed because it is too large Load diff

67
tools/com-plugin/endian.h Normal file
View file

@ -0,0 +1,67 @@
#ifndef ENDIAN_H
#define ENDIAN_H
#if defined(__linux__) || defined(__CYGWIN__)
#include <endian.h>
#elif defined(__APPLE__)
#include <libkern/OSByteOrder.h>
#define htobe16(x) OSSwapHostToBigInt16(x)
#define htole16(x) OSSwapHostToLittleInt16(x)
#define be16toh(x) OSSwapBigToHostInt16(x)
#define le16toh(x) OSSwapLittleToHostInt16(x)
#define htobe32(x) OSSwapHostToBigInt32(x)
#define htole32(x) OSSwapHostToLittleInt32(x)
#define be32toh(x) OSSwapBigToHostInt32(x)
#define le32toh(x) OSSwapLittleToHostInt32(x)
#define htobe64(x) OSSwapHostToBigInt64(x)
#define htole64(x) OSSwapHostToLittleInt64(x)
#define be64toh(x) OSSwapBigToHostInt64(x)
#define le64toh(x) OSSwapLittleToHostInt64(x)
#else
#if !defined(__BYTE_ORDER__)
#error "No endian define provided by compiler"
#endif
#if (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
#define htobe16(x) (x)
#define htole16(x) __builtin_bswap16(x)
#define be16toh(x) (x)
#define le16toh(x) __builtin_bswap16(x)
#define htobe32(x) (x)
#define htole32(x) __builtin_bswap32(x)
#define be32toh(x) (x)
#define le32toh(x) __builtin_bswap32(x)
#define htobe64(x) (x)
#define htole64(x) __builtin_bswap64(x)
#define be64toh(x) (x)
#define le64toh(x) __builtin_bswap64(x)
#else
#define htobe16(x) __builtin_bswap16(x)
#define htole16(x) (x)
#define be16toh(x) __builtin_bswap16(x)
#define le16toh(x) (x)
#define htobe32(x) __builtin_bswap32(x)
#define htole32(x) (x)
#define be32toh(x) __builtin_bswap32(x)
#define le32toh(x) (x)
#define htobe64(x) __builtin_bswap64(x)
#define htole64(x) (x)
#define be64toh(x) __builtin_bswap64(x)
#define le64toh(x) (x)
#endif
#endif
#endif

View file

@ -0,0 +1,622 @@
/* plugin-api.h -- External linker plugin API. */
/* Copyright (C) 2009-2023 Free Software Foundation, Inc.
Written by Cary Coutant <ccoutant@google.com>.
This file is part of binutils.
This program 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 3 of the License, or
(at your option) any later version.
This program 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., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
/* This file defines the interface for writing a linker plugin, which is
described at < http://gcc.gnu.org/wiki/whopr/driver >. */
#ifndef PLUGIN_API_H
#define PLUGIN_API_H
#ifdef HAVE_STDINT_H
#include <stdint.h>
#elif defined(HAVE_INTTYPES_H)
#include <inttypes.h>
#endif
#include <sys/types.h>
#if !defined(HAVE_STDINT_H) && !defined(HAVE_INTTYPES_H) && \
!defined(UINT64_MAX) && !defined(uint64_t)
#error cannot find uint64_t type
#endif
/* Detect endianess based on gcc's (>=4.6.0) __BYTE_ORDER__ macro. */
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \
defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_PDP_ENDIAN__)
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
#define PLUGIN_LITTLE_ENDIAN 1
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
#define PLUGIN_BIG_ENDIAN 1
#elif __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__
#define PLUGIN_PDP_ENDIAN 1
#endif
#else
/* Include header files to define endian macros. */
#if defined(__GLIBC__) || defined(__GNU_LIBRARY__) || defined(__ANDROID__)
#include <endian.h>
#elif defined(__SVR4) && defined(__sun)
#include <sys/byteorder.h>
#elif defined(__FreeBSD__) || defined(__NetBSD__) || \
defined(__DragonFly__) || defined(__minix)
#include <sys/endian.h>
#elif defined(__OpenBSD__)
#include <machine/endian.h>
#endif
/* Detect endianess based on __BYTE_ORDER. */
#ifdef __BYTE_ORDER
#if __BYTE_ORDER == __LITTLE_ENDIAN
#define PLUGIN_LITTLE_ENDIAN 1
#elif __BYTE_ORDER == __BIG_ENDIAN
#define PLUGIN_BIG_ENDIAN 1
#endif
/* Detect endianess based on _BYTE_ORDER. */
#elif defined _BYTE_ORDER
#if _BYTE_ORDER == _LITTLE_ENDIAN
#define PLUGIN_LITTLE_ENDIAN 1
#elif _BYTE_ORDER == _BIG_ENDIAN
#define PLUGIN_BIG_ENDIAN 1
#endif
/* Detect based on _WIN32. */
#elif defined _WIN32
#define PLUGIN_LITTLE_ENDIAN 1
/* Detect based on __BIG_ENDIAN__ and __LITTLE_ENDIAN__ */
#elif defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN
#define PLUGIN_LITTLE_ENDIAN 1
#elif defined __BIG_ENDIAN__ || defined _BIG_ENDIAN
#define PLUGIN_BIG_ENDIAN 1
#endif
#endif
#ifdef __cplusplus
extern "C"
{
#endif
/* Status code returned by most API routines. */
enum ld_plugin_status
{
LDPS_OK = 0,
LDPS_NO_SYMS, /* Attempt to get symbols that haven't been added. */
LDPS_BAD_HANDLE, /* No claimed object associated with given handle. */
LDPS_ERR
/* Additional Error codes TBD. */
};
/* The version of the API specification. */
enum ld_plugin_api_version
{
LD_PLUGIN_API_VERSION = 1
};
/* The type of output file being generated by the linker. */
enum ld_plugin_output_file_type
{
LDPO_REL,
LDPO_EXEC,
LDPO_DYN,
LDPO_PIE
};
/* An input file managed by the plugin library. */
struct ld_plugin_input_file
{
const char *name;
int fd;
off_t offset;
off_t filesize;
void *handle;
};
/* A symbol belonging to an input file managed by the plugin library. */
struct ld_plugin_symbol
{
char *name;
char *version;
/* This is for compatibility with older ABIs. The older ABI defined
only 'def' field. */
#if PLUGIN_BIG_ENDIAN == 1
char unused;
char section_kind;
char symbol_type;
char def;
#elif PLUGIN_LITTLE_ENDIAN == 1
char def;
char symbol_type;
char section_kind;
char unused;
#elif PLUGIN_PDP_ENDIAN == 1
char symbol_type;
char def;
char unused;
char section_kind;
#else
#error "Could not detect architecture endianess"
#endif
int visibility;
uint64_t size;
char *comdat_key;
int resolution;
};
/* An object's section. */
struct ld_plugin_section
{
const void* handle;
unsigned int shndx;
};
/* Whether the symbol is a definition, reference, or common, weak or not. */
enum ld_plugin_symbol_kind
{
LDPK_DEF,
LDPK_WEAKDEF,
LDPK_UNDEF,
LDPK_WEAKUNDEF,
LDPK_COMMON
};
/* The visibility of the symbol. */
enum ld_plugin_symbol_visibility
{
LDPV_DEFAULT,
LDPV_PROTECTED,
LDPV_INTERNAL,
LDPV_HIDDEN
};
/* The type of the symbol. */
enum ld_plugin_symbol_type
{
LDST_UNKNOWN,
LDST_FUNCTION,
LDST_VARIABLE
};
enum ld_plugin_symbol_section_kind
{
LDSSK_DEFAULT,
LDSSK_BSS
};
/* How a symbol is resolved. */
enum ld_plugin_symbol_resolution
{
LDPR_UNKNOWN = 0,
/* Symbol is still undefined at this point. */
LDPR_UNDEF,
/* This is the prevailing definition of the symbol, with references from
regular object code. */
LDPR_PREVAILING_DEF,
/* This is the prevailing definition of the symbol, with no
references from regular objects. It is only referenced from IR
code. */
LDPR_PREVAILING_DEF_IRONLY,
/* This definition was pre-empted by a definition in a regular
object file. */
LDPR_PREEMPTED_REG,
/* This definition was pre-empted by a definition in another IR file. */
LDPR_PREEMPTED_IR,
/* This symbol was resolved by a definition in another IR file. */
LDPR_RESOLVED_IR,
/* This symbol was resolved by a definition in a regular object
linked into the main executable. */
LDPR_RESOLVED_EXEC,
/* This symbol was resolved by a definition in a shared object. */
LDPR_RESOLVED_DYN,
/* This is the prevailing definition of the symbol, with no
references from regular objects. It is only referenced from IR
code, but the symbol is exported and may be referenced from
a dynamic object (not seen at link time). */
LDPR_PREVAILING_DEF_IRONLY_EXP
};
/* The plugin library's "claim file" handler. */
typedef
enum ld_plugin_status
(*ld_plugin_claim_file_handler) (
const struct ld_plugin_input_file *file, int *claimed);
/* The plugin library's "claim file" handler, version 2. */
typedef
enum ld_plugin_status
(*ld_plugin_claim_file_handler_v2) (
const struct ld_plugin_input_file *file, int *claimed, int known_used);
/* The plugin library's "all symbols read" handler. */
typedef
enum ld_plugin_status
(*ld_plugin_all_symbols_read_handler) (void);
/* The plugin library's cleanup handler. */
typedef
enum ld_plugin_status
(*ld_plugin_cleanup_handler) (void);
/* The linker's interface for registering the "claim file" handler. */
typedef
enum ld_plugin_status
(*ld_plugin_register_claim_file) (ld_plugin_claim_file_handler handler);
/* The linker's interface for registering the "claim file" handler,
version 2. */
typedef
enum ld_plugin_status
(*ld_plugin_register_claim_file_v2) (ld_plugin_claim_file_handler_v2 handler);
/* The linker's interface for registering the "all symbols read" handler. */
typedef
enum ld_plugin_status
(*ld_plugin_register_all_symbols_read) (
ld_plugin_all_symbols_read_handler handler);
/* The linker's interface for registering the cleanup handler. */
typedef
enum ld_plugin_status
(*ld_plugin_register_cleanup) (ld_plugin_cleanup_handler handler);
/* The linker's interface for adding symbols from a claimed input file. */
typedef
enum ld_plugin_status
(*ld_plugin_add_symbols) (void *handle, int nsyms,
const struct ld_plugin_symbol *syms);
/* The linker's interface for getting the input file information with
an open (possibly re-opened) file descriptor. */
typedef
enum ld_plugin_status
(*ld_plugin_get_input_file) (const void *handle,
struct ld_plugin_input_file *file);
typedef
enum ld_plugin_status
(*ld_plugin_get_view) (const void *handle, const void **viewp);
/* The linker's interface for releasing the input file. */
typedef
enum ld_plugin_status
(*ld_plugin_release_input_file) (const void *handle);
/* The linker's interface for retrieving symbol resolution information. */
typedef
enum ld_plugin_status
(*ld_plugin_get_symbols) (const void *handle, int nsyms,
struct ld_plugin_symbol *syms);
/* The linker's interface for adding a compiled input file. */
typedef
enum ld_plugin_status
(*ld_plugin_add_input_file) (const char *pathname);
/* The linker's interface for adding a library that should be searched. */
typedef
enum ld_plugin_status
(*ld_plugin_add_input_library) (const char *libname);
/* The linker's interface for adding a library path that should be searched. */
typedef
enum ld_plugin_status
(*ld_plugin_set_extra_library_path) (const char *path);
/* The linker's interface for issuing a warning or error message. */
typedef
enum ld_plugin_status
(*ld_plugin_message) (int level, const char *format, ...);
/* The linker's interface for retrieving the number of sections in an object.
The handle is obtained in the claim_file handler. This interface should
only be invoked in the claim_file handler. This function sets *COUNT to
the number of sections in the object. */
typedef
enum ld_plugin_status
(*ld_plugin_get_input_section_count) (const void* handle, unsigned int *count);
/* The linker's interface for retrieving the section type of a specific
section in an object. This interface should only be invoked in the
claim_file handler. This function sets *TYPE to an ELF SHT_xxx value. */
typedef
enum ld_plugin_status
(*ld_plugin_get_input_section_type) (const struct ld_plugin_section section,
unsigned int *type);
/* The linker's interface for retrieving the name of a specific section in
an object. This interface should only be invoked in the claim_file handler.
This function sets *SECTION_NAME_PTR to a null-terminated buffer allocated
by malloc. The plugin must free *SECTION_NAME_PTR. */
typedef
enum ld_plugin_status
(*ld_plugin_get_input_section_name) (const struct ld_plugin_section section,
char **section_name_ptr);
/* The linker's interface for retrieving the contents of a specific section
in an object. This interface should only be invoked in the claim_file
handler. This function sets *SECTION_CONTENTS to point to a buffer that is
valid until clam_file handler returns. It sets *LEN to the size of the
buffer. */
typedef
enum ld_plugin_status
(*ld_plugin_get_input_section_contents) (const struct ld_plugin_section section,
const unsigned char **section_contents,
size_t* len);
/* The linker's interface for specifying the desired order of sections.
The sections should be specifed using the array SECTION_LIST in the
order in which they should appear in the final layout. NUM_SECTIONS
specifies the number of entries in each array. This should be invoked
in the all_symbols_read handler. */
typedef
enum ld_plugin_status
(*ld_plugin_update_section_order) (const struct ld_plugin_section *section_list,
unsigned int num_sections);
/* The linker's interface for specifying that reordering of sections is
desired so that the linker can prepare for it. This should be invoked
before update_section_order, preferably in the claim_file handler. */
typedef
enum ld_plugin_status
(*ld_plugin_allow_section_ordering) (void);
/* The linker's interface for specifying that a subset of sections is
to be mapped to a unique segment. If the plugin wants to call
unique_segment_for_sections, it must call this function from a
claim_file_handler or when it is first loaded. */
typedef
enum ld_plugin_status
(*ld_plugin_allow_unique_segment_for_sections) (void);
/* The linker's interface for specifying that a specific set of sections
must be mapped to a unique segment. ELF segments do not have names
and the NAME is used as the name of the newly created output section
that is then placed in the unique PT_LOAD segment. FLAGS is used to
specify if any additional segment flags need to be set. For instance,
a specific segment flag can be set to identify this segment. Unsetting
segment flags that would be set by default is not possible. The
parameter SEGMENT_ALIGNMENT when non-zero will override the default. */
typedef
enum ld_plugin_status
(*ld_plugin_unique_segment_for_sections) (
const char* segment_name,
uint64_t segment_flags,
uint64_t segment_alignment,
const struct ld_plugin_section * section_list,
unsigned int num_sections);
/* The linker's interface for retrieving the section alignment requirement
of a specific section in an object. This interface should only be invoked in the
claim_file handler. This function sets *ADDRALIGN to the ELF sh_addralign
value of the input section. */
typedef
enum ld_plugin_status
(*ld_plugin_get_input_section_alignment) (const struct ld_plugin_section section,
unsigned int *addralign);
/* The linker's interface for retrieving the section size of a specific section
in an object. This interface should only be invoked in the claim_file handler.
This function sets *SECSIZE to the ELF sh_size
value of the input section. */
typedef
enum ld_plugin_status
(*ld_plugin_get_input_section_size) (const struct ld_plugin_section section,
uint64_t *secsize);
typedef
enum ld_plugin_status
(*ld_plugin_new_input_handler) (const struct ld_plugin_input_file *file);
/* The linker's interface for registering the "new_input" handler. This handler
will be notified when a new input file has been added after the
all_symbols_read event, allowing the plugin to, for example, set a unique
segment for sections in plugin-generated input files. */
typedef
enum ld_plugin_status
(*ld_plugin_register_new_input) (ld_plugin_new_input_handler handler);
/* The linker's interface for getting the list of wrapped symbols using the
--wrap option. This sets *NUM_SYMBOLS to number of wrapped symbols and
*WRAP_SYMBOL_LIST to the list of wrapped symbols. */
typedef
enum ld_plugin_status
(*ld_plugin_get_wrap_symbols) (uint64_t *num_symbols,
const char ***wrap_symbol_list);
enum ld_plugin_level
{
LDPL_INFO,
LDPL_WARNING,
LDPL_ERROR,
LDPL_FATAL
};
/* Contract between a plug-in and a linker. */
enum linker_api_version
{
/* The linker/plugin do not implement any of the API levels below, the API
is determined solely via the transfer vector. */
LAPI_V0,
/* API level v1. The linker provides get_symbols_v3, add_symbols_v2,
the plugin will use that and not any lower versions.
claim_file is thread-safe on the plugin side and
add_symbols on the linker side. */
LAPI_V1
};
/* The linker's interface for API version negotiation. A plug-in calls
the function (with its IDENTIFIER and VERSION), plus minimal and maximal
version of linker_api_version is provided. Linker then returns selected
API version and provides its IDENTIFIER and VERSION. The returned value
by linker must be in range [MINIMAL_API_SUPPORTED, MAXIMAL_API_SUPPORTED].
Identifier pointers remain valid as long as the plugin is loaded. */
typedef
int
(*ld_plugin_get_api_version) (const char *plugin_identifier,
const char *plugin_version,
int minimal_api_supported,
int maximal_api_supported,
const char **linker_identifier,
const char **linker_version);
/* Values for the tv_tag field of the transfer vector. */
enum ld_plugin_tag
{
LDPT_NULL,
LDPT_API_VERSION,
LDPT_GOLD_VERSION,
LDPT_LINKER_OUTPUT,
LDPT_OPTION,
LDPT_REGISTER_CLAIM_FILE_HOOK,
LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK,
LDPT_REGISTER_CLEANUP_HOOK,
LDPT_ADD_SYMBOLS,
LDPT_GET_SYMBOLS,
LDPT_ADD_INPUT_FILE,
LDPT_MESSAGE,
LDPT_GET_INPUT_FILE,
LDPT_RELEASE_INPUT_FILE,
LDPT_ADD_INPUT_LIBRARY,
LDPT_OUTPUT_NAME,
LDPT_SET_EXTRA_LIBRARY_PATH,
LDPT_GNU_LD_VERSION,
LDPT_GET_VIEW,
LDPT_GET_INPUT_SECTION_COUNT,
LDPT_GET_INPUT_SECTION_TYPE,
LDPT_GET_INPUT_SECTION_NAME,
LDPT_GET_INPUT_SECTION_CONTENTS,
LDPT_UPDATE_SECTION_ORDER,
LDPT_ALLOW_SECTION_ORDERING,
LDPT_GET_SYMBOLS_V2,
LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS,
LDPT_UNIQUE_SEGMENT_FOR_SECTIONS,
LDPT_GET_SYMBOLS_V3,
LDPT_GET_INPUT_SECTION_ALIGNMENT,
LDPT_GET_INPUT_SECTION_SIZE,
LDPT_REGISTER_NEW_INPUT_HOOK,
LDPT_GET_WRAP_SYMBOLS,
LDPT_ADD_SYMBOLS_V2,
LDPT_GET_API_VERSION,
LDPT_REGISTER_CLAIM_FILE_HOOK_V2
};
/* The plugin transfer vector. */
struct ld_plugin_tv
{
enum ld_plugin_tag tv_tag;
union
{
int tv_val;
const char *tv_string;
ld_plugin_register_claim_file tv_register_claim_file;
ld_plugin_register_claim_file_v2 tv_register_claim_file_v2;
ld_plugin_register_all_symbols_read tv_register_all_symbols_read;
ld_plugin_register_cleanup tv_register_cleanup;
ld_plugin_add_symbols tv_add_symbols;
ld_plugin_get_symbols tv_get_symbols;
ld_plugin_add_input_file tv_add_input_file;
ld_plugin_message tv_message;
ld_plugin_get_input_file tv_get_input_file;
ld_plugin_get_view tv_get_view;
ld_plugin_release_input_file tv_release_input_file;
ld_plugin_add_input_library tv_add_input_library;
ld_plugin_set_extra_library_path tv_set_extra_library_path;
ld_plugin_get_input_section_count tv_get_input_section_count;
ld_plugin_get_input_section_type tv_get_input_section_type;
ld_plugin_get_input_section_name tv_get_input_section_name;
ld_plugin_get_input_section_contents tv_get_input_section_contents;
ld_plugin_update_section_order tv_update_section_order;
ld_plugin_allow_section_ordering tv_allow_section_ordering;
ld_plugin_allow_unique_segment_for_sections tv_allow_unique_segment_for_sections;
ld_plugin_unique_segment_for_sections tv_unique_segment_for_sections;
ld_plugin_get_input_section_alignment tv_get_input_section_alignment;
ld_plugin_get_input_section_size tv_get_input_section_size;
ld_plugin_register_new_input tv_register_new_input;
ld_plugin_get_wrap_symbols tv_get_wrap_symbols;
ld_plugin_get_api_version tv_get_api_version;
} tv_u;
};
/* The plugin library's "onload" entry point. */
typedef
enum ld_plugin_status
(*ld_plugin_onload) (struct ld_plugin_tv *tv);
#ifdef __cplusplus
}
#endif
#endif /* !defined(PLUGIN_API_H) */

831
tools/com-plugin/plugin.c Normal file
View file

@ -0,0 +1,831 @@
/**
* COMMON symbol ordering plugin for linkers supporting the External Linker Plugin API.
*
* Copyright (C) 2025 Tharo
*
* This program 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 3 of the License, or
* (at your option) any later version.
*
* This program 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, see <http://www.gnu.org/licenses/>.
*/
#include <assert.h>
#include <ctype.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include "endian.h"
#include "elf.h"
#include "plugin-api.h"
#define ELF32_IDENT_VALID(ehdr) \
((ehdr)->e_ident[EI_MAG0] == ELFMAG0 && (ehdr)->e_ident[EI_MAG1] == ELFMAG1 && \
(ehdr)->e_ident[EI_MAG2] == ELFMAG2 && (ehdr)->e_ident[EI_MAG3] == ELFMAG3)
#define ELF32_IS_32(ehdr) ((ehdr)->e_ident[EI_CLASS] == ELFCLASS32)
#define ELF32_IS_BE(ehdr) ((ehdr)->e_ident[EI_DATA] == ELFDATA2MSB)
#define iswhitespace(c) (isblank(c) || ((c) == '\n'))
#define GLUE2(a,b) a##b
#define GLUE(a,b) GLUE2(a,b)
#define ARRLEN(a) (sizeof(a) / sizeof((a)[0]))
#define BITSET_TYPE uint64_t
#define BITSET_MASK (8 * sizeof(BITSET_TYPE) - 1)
#define BITSET_SHIFT (__builtin_ctz((uint32_t)~BITSET_MASK))
#define BITSET_SIZE_BYTES(n) ((((n) + 8 * sizeof(BITSET_TYPE) - 1) & ~(8 * sizeof(BITSET_TYPE) - 1)) >> 3)
#define BITSET_ALLOC(size) calloc(1, BITSET_SIZE_BYTES(size))
#define BITSET_FREE(set) free(set)
#define BITSET_GET(set, key) ((set)[(key) >> BITSET_SHIFT] & ((BITSET_TYPE)1 << ((key) & BITSET_MASK)))
#define BITSET_SET(set, key) ((set)[(key) >> BITSET_SHIFT] |= ((BITSET_TYPE)1 << ((key) & BITSET_MASK)))
#define strequ(s1, s2const) (strncmp(s1, s2const, sizeof(s2const) - 1) == 0)
struct bss_ofile {
char *path;
size_t num_symbols;
char **symbol_names;
Elf32_Sym *symbols;
BITSET_TYPE *symbols_found;
};
static struct {
// Our state
char *string_pool;
struct bss_ofile *ofiles;
size_t num_ofiles;
// Our options
char *order_path;
// LD plugin
int api_version;
int gnu_ld_version;
int linker_output;
const char *output_name;
ld_plugin_message message;
ld_plugin_add_symbols add_symbols;
ld_plugin_get_symbols get_symbols;
ld_plugin_get_symbols get_symbols_v2;
ld_plugin_add_input_file add_input_file;
ld_plugin_get_input_file get_input_file;
ld_plugin_register_cleanup register_cleanup;
ld_plugin_register_claim_file register_claim_file;
ld_plugin_register_all_symbols_read register_all_symbols_read;
} pl;
#define ltell(fd) lseek((fd), 0, SEEK_CUR)
static int read_s_(int fd, void *buf, size_t nbyte, int line)
{
ssize_t result = read(fd, buf, nbyte);
if ((size_t)result != nbyte) {
pl.message(LDPL_FATAL, "[%d] Could not read %lu bytes from input file [%ld]", line, nbyte, result);
return 1;
}
return 0;
}
#define read_s(fd, buf, nbyte) \
do { if (read_s_(fd, buf, nbyte, __LINE__)) return LDPS_ERR; } while (0)
#define SEEKF(file, pos) \
lseek((file)->fd, (file)->offset + (pos), SEEK_SET)
#define WITH_NEW_FILE_POS(file, pos) \
for (off_t GLUE(_o_,__LINE__) = ltell((file)->fd),GLUE(_b_,__LINE__)=(SEEKF(file, pos), 1); \
GLUE(_b_,__LINE__); \
GLUE(_b_,__LINE__)=0,lseek((file)->fd, GLUE(_o_,__LINE__), SEEK_SET))
static bool
elf_syms_equal(Elf32_Sym *sym1, Elf32_Sym *sym2)
{
return (sym1->st_value == sym2->st_value) &&
(sym1->st_size == sym2->st_size) &&
(sym1->st_info == sym2->st_info) &&
(sym1->st_other == sym2->st_other) &&
(sym1->st_shndx == sym2->st_shndx);
}
static enum ld_plugin_status
claim_file(const struct ld_plugin_input_file *file, int *claimed)
{
*claimed = false;
// Read the input file for COMMON symbol definitions
// The input is assumed to be a Big-Endian 32-bit ELF file
bool error = false;
WITH_NEW_FILE_POS(file, 0) {
Elf32_Ehdr ehdr;
read_s(file->fd, &ehdr, sizeof(ehdr));
if (!ELF32_IDENT_VALID(&ehdr) || !ELF32_IS_32(&ehdr) || !ELF32_IS_BE(&ehdr)) {
pl.message(LDPL_FATAL, "Input file %s is not a 32-bit Big-Endian ELF file", file->name);
return LDPS_ERR;
}
uint32_t e_shoff = be32toh(ehdr.e_shoff);
uint16_t e_shentsize = be16toh(ehdr.e_shentsize);
uint16_t e_shnum = be16toh(ehdr.e_shnum);
if (e_shentsize != sizeof(Elf32_Shdr)) {
pl.message(LDPL_FATAL, "e_shentsize unexpected size");
return LDPS_ERR;
}
Elf32_Shdr strtab;
char *strtab_data = NULL;
size_t last_strtab_ind = (size_t)-1;
// Look for symbol tables to search for COMMON symbols in
SEEKF(file, e_shoff);
for (size_t i = 0; i < e_shnum; i++) {
Elf32_Shdr shdr;
read_s(file->fd, &shdr, sizeof(shdr));
uint32_t sh_type = be32toh(shdr.sh_type);
if (sh_type != SHT_SYMTAB)
continue;
// Found a symtab
uint32_t sh_offset = be32toh(shdr.sh_offset);
uint32_t sh_size = be32toh(shdr.sh_size);
// Read strtab for this symtab, cache it
size_t strtab_ind = be32toh(shdr.sh_link);
if (strtab_ind != last_strtab_ind) {
if (strtab_data != NULL)
free(strtab_data);
// Read strtab header
WITH_NEW_FILE_POS(file, e_shoff + strtab_ind * sizeof(Elf32_Shdr)) {
read_s(file->fd, &strtab, sizeof(strtab));
}
// Read strtab contents
uint32_t strtab_offset = be32toh(strtab.sh_offset);
uint32_t strtab_size = be32toh(strtab.sh_size);
strtab_data = malloc(strtab_size);
WITH_NEW_FILE_POS(file, strtab_offset) {
read_s(file->fd, strtab_data, strtab_size);
}
last_strtab_ind = strtab_ind;
}
// Read each symbol, save the COMMON symbols into a list
WITH_NEW_FILE_POS(file, sh_offset) {
size_t nsym = sh_size / sizeof(Elf32_Sym);
for (size_t j = 0; j < nsym; j++) {
Elf32_Sym elfsym;
read_s(file->fd, &elfsym, sizeof(elfsym));
if (be16toh(elfsym.st_shndx) != SHN_COMMON)
continue; // Skip non-COMMON symbols
const char *sym_name = &strtab_data[be32toh(elfsym.st_name)];
// Try to find this symbol in one of the specified bss output files
for (size_t f = 0; f < pl.num_ofiles; f++) {
struct bss_ofile *ofile = &pl.ofiles[f];
for (size_t k = 0; k < ofile->num_symbols; k++) {
if (strcmp(sym_name, ofile->symbol_names[k]) == 0) {
if (BITSET_GET(ofile->symbols_found, k)) {
// Already occupied, check equivalence
if (!elf_syms_equal(&ofile->symbols[k], &elfsym)) {
pl.message(LDPL_ERROR, "Found distinct COMMON symbols with the same name: %s",
ofile->symbol_names[k]);
error = true;
}
} else {
BITSET_SET(ofile->symbols_found, k);
ofile->symbols[k] = elfsym;
}
goto found;
}
}
}
pl.message(LDPL_WARNING,
"Found COMMON symbol %s in input file %s not mentioned in the order spec",
sym_name, file->name);
found:;
}
}
}
if (strtab_data != NULL)
free(strtab_data);
}
return (error) ? LDPS_ERR : LDPS_OK;
}
static enum ld_plugin_status
all_symbols_read(void)
{
for (size_t f = 0; f < pl.num_ofiles; f++) {
struct bss_ofile *ofile = &pl.ofiles[f];
// Make sure we got every symbol mentioned
bool error = false;
for (size_t i = 0; i < ofile->num_symbols; i++) {
if (!BITSET_GET(ofile->symbols_found, i)) {
pl.message(LDPL_ERROR, "Did not find symbol %s mentioned in the order specification in any input file",
ofile->symbol_names[i]);
error = true;
}
}
if (error)
return LDPS_ERR;
// Create a dummy ELF file full of bss definitions generated from the COMMON defs and add it as an input file.
// TODO look into replacing all this with pl.add_symbols? Seems like it's not possible
// to add symbols at this stage though, since pl.add_symbols requires a file handle..
// ELF layout:
// Elf32_Ehdr ehdr
// char symbol_names[sum of name lengths]
// Elf32_Sym symbols[nsyms]
// char section_names[sum of name lengths]
// Elf32_Shdr NULL
// Elf32_Shdr .bss
// Elf32_Shdr symtab
// Elf32_Shdr strtab
// Elf32_Shdr shstrtab
FILE *elf = fopen(ofile->path, "wb");
if (elf == NULL) {
pl.message(LDPL_FATAL, "Could not open bss output file \"%s\" for writing", ofile->path);
return LDPS_ERR;
}
// Skip the ELF header, we'll write it at the end.
fseek(elf, sizeof(Elf32_Ehdr), SEEK_SET);
// First write the strtab
uint32_t *string_offsets = malloc((2 + ofile->num_symbols) * sizeof(uint32_t));
size_t strtab_offset = ftell(elf);
size_t n = 0;
string_offsets[n++] = ftell(elf) - strtab_offset;
fprintf(elf, "%c", '\0');
string_offsets[n++] = ftell(elf) - strtab_offset;
fprintf(elf, "%s%c", ".bss", '\0');
for (size_t i = 0; i < ofile->num_symbols; i++) {
string_offsets[n++] = ftell(elf) - strtab_offset;
fprintf(elf, "%s%c", ofile->symbol_names[i], '\0');
}
size_t strtab_size = ftell(elf) - strtab_offset;
// Align to 4 for symbols
fwrite("\0\0\0\0", 4 - (ftell(elf) & 3), 1, elf);
// Record greatest alignment for the overall section alignment
size_t greatest_align = 0;
// Now write symbols
uint32_t symtab_offset = ftell(elf);
n = 0;
Elf32_Sym null_sym = {
.st_name = htobe32(string_offsets[n++]),
.st_value = 0,
.st_size = 0,
.st_info = ELF32_ST_INFO(STB_LOCAL, STT_NOTYPE),
.st_other = ELF32_ST_VISIBILITY(STV_DEFAULT),
.st_shndx = htobe16(SHN_UNDEF),
};
fwrite(&null_sym, sizeof(null_sym), 1, elf);
Elf32_Sym bss_sym = {
.st_name = htobe32(string_offsets[n++]),
.st_value = 0,
.st_size = 0,
.st_info = ELF32_ST_INFO(STB_LOCAL, STT_SECTION),
.st_other = ELF32_ST_VISIBILITY(STV_DEFAULT),
.st_shndx = htobe16(1), /* .bss */
};
fwrite(&bss_sym, sizeof(bss_sym), 1, elf);
size_t sym_offset = 0;
for (size_t i = 0; i < ofile->num_symbols; i++) {
Elf32_Sym *sym = &ofile->symbols[i];
uint32_t align = be32toh(sym->st_value);
sym_offset = (sym_offset + align - 1) & ~(align - 1);
if (align > greatest_align)
greatest_align = align;
Elf32_Sym outsym = {
.st_name = htobe32(string_offsets[n++]),
.st_value = htobe32(sym_offset),
.st_size = sym->st_size,
.st_info = sym->st_info,
.st_other = sym->st_other,
.st_shndx = htobe16(1), /* .bss */
};
fwrite(&outsym, sizeof(outsym), 1, elf);
sym_offset += be32toh(sym->st_size);
}
sym_offset = (sym_offset + greatest_align - 1) & ~(greatest_align - 1);
size_t symtab_size = ftell(elf) - symtab_offset;
free(string_offsets);
const uint32_t shdr_name_offsets[5] = { 0, 1, 6, 13, 20 };
size_t shstrtab_offset = ftell(elf);
// Write shstrtab
fwrite(
/* NULL [ 0] */ "\0"
/* .bss [ 1] */ ".bss\0"
/* symtab [ 6] */ "symtab\0"
/* strtab [13] */ "strtab\0"
/* shstrtab [20] */ "shstrtab\0"
/* [29] */ "\0\0\0",
32, 1, elf
);
size_t shstrtab_size = ftell(elf) - shstrtab_offset;
// We need: { NULL, .bss, symtab, strtab, shstrtab }
Elf32_Shdr shdrs[5] = {
/* NULL */ {
.sh_name = htobe32(shdr_name_offsets[0]),
.sh_type = htobe32(SHT_NULL),
.sh_flags = htobe32(0),
.sh_addr = htobe32(0x00000000),
.sh_offset = htobe32(0x00000000),
.sh_size = htobe32(0x00000000),
.sh_link = htobe32(0), /* No Link */
.sh_info = htobe32(0),
.sh_addralign = htobe32(0),
.sh_entsize = htobe32(0), /* Not a fixed-length array */
},
/* .bss */ {
.sh_name = htobe32(shdr_name_offsets[1]),
.sh_type = htobe32(SHT_NOBITS),
.sh_flags = htobe32(SHF_WRITE | SHF_ALLOC),
.sh_addr = htobe32(0x00000000),
.sh_offset = htobe32(sizeof(Elf32_Ehdr)),
.sh_size = htobe32(sym_offset),
.sh_link = htobe32(0), /* No Link */
.sh_info = htobe32(0),
.sh_addralign = htobe32(greatest_align),
.sh_entsize = htobe32(0), /* Not a fixed-length array */
},
/* symtab */ {
.sh_name = htobe32(shdr_name_offsets[2]),
.sh_type = htobe32(SHT_SYMTAB),
.sh_flags = htobe32(0),
.sh_addr = htobe32(0),
.sh_offset = htobe32(symtab_offset),
.sh_size = htobe32(symtab_size),
.sh_link = htobe32(3), /* strtab */
.sh_info = htobe32(2),
.sh_addralign = htobe32(4),
.sh_entsize = htobe32(sizeof(Elf32_Sym)),
},
/* strtab */ {
.sh_name = htobe32(shdr_name_offsets[3]),
.sh_type = htobe32(SHT_STRTAB),
.sh_flags = htobe32(0),
.sh_addr = htobe32(0),
.sh_offset = htobe32(strtab_offset),
.sh_size = htobe32(strtab_size),
.sh_link = htobe32(0), /* No Link */
.sh_info = htobe32(0),
.sh_addralign = htobe32(1),
.sh_entsize = htobe32(0), /* Not a fixed-length array */
},
/* shstrtab */ {
.sh_name = htobe32(shdr_name_offsets[4]),
.sh_type = htobe32(SHT_STRTAB),
.sh_flags = htobe32(0),
.sh_addr = htobe32(0),
.sh_offset = htobe32(shstrtab_offset),
.sh_size = htobe32(shstrtab_size),
.sh_link = htobe32(0), /* No Link */
.sh_info = htobe32(0),
.sh_addralign = htobe32(1),
.sh_entsize = htobe32(0), /* Not a fixed-length array */
},
};
size_t shdrs_offset = ftell(elf);
fwrite(shdrs, sizeof(shdrs), 1, elf);
// TODO some of these fields should change based on the properties of the input files, or even better
// it should be based on the current output format but that might not be visible to us with the limited
// plugin api...
Elf32_Ehdr ehdr = {
.e_ident = {
[EI_MAG0] = ELFMAG0,
[EI_MAG1] = ELFMAG1,
[EI_MAG2] = ELFMAG2,
[EI_MAG3] = ELFMAG3,
[EI_CLASS] = ELFCLASS32,
[EI_DATA] = ELFDATA2MSB,
[EI_VERSION] = 1,
[EI_OSABI] = ELFOSABI_SYSV,
[EI_ABIVERSION] = 0,
},
.e_type = htobe16(ET_REL),
.e_machine = htobe16(EM_MIPS),
.e_version = htobe32(EV_CURRENT),
.e_entry = htobe32(0x00000000),
.e_phoff = htobe32(0x00000000),
.e_shoff = htobe32(shdrs_offset),
.e_flags = htobe32(EF_MIPS_ARCH_3 | EF_MIPS_32BITMODE | EF_MIPS_NOREORDER),
.e_ehsize = htobe16(sizeof(Elf32_Ehdr)),
.e_phentsize = htobe16(0x0000),
.e_phnum = htobe16(0),
.e_shentsize = htobe16(sizeof(Elf32_Shdr)),
.e_shnum = htobe16(ARRLEN(shdrs)),
.e_shstrndx = htobe16(4), /* shstrtab */
};
fseek(elf, 0, SEEK_SET);
fwrite(&ehdr, sizeof(ehdr), 1, elf);
fflush(elf);
fclose(elf);
// Add it as an additional input file
enum ld_plugin_status ps = pl.add_input_file(ofile->path);
if (ps != LDPS_OK) {
pl.message(LDPL_ERROR, "error adding %s as an additional input file\n", ofile->path);
return ps;
}
}
return LDPS_OK;
}
static enum ld_plugin_status
cleanup(void)
{
free(pl.string_pool);
free(pl.order_path);
for (size_t f = 0; f < pl.num_ofiles; f++) {
struct bss_ofile *ofile = &pl.ofiles[f];
free(ofile->symbol_names);
free(ofile->symbols);
BITSET_FREE(ofile->symbols_found);
}
free(pl.ofiles);
return LDPS_OK;
}
static enum ld_plugin_status
parse_order_file(const char *order_file)
{
// Read the entire bss order file and null-terminate it
FILE *bss_order = fopen(order_file, "rb");
if (bss_order == NULL) {
pl.message(LDPL_FATAL, "Could not open bss order file %s for reading: %s", bss_order, strerror(errno));
return LDPS_ERR;
}
fseek(bss_order, 0, SEEK_END);
size_t fsize = ftell(bss_order);
fseek(bss_order, 0, SEEK_SET);
pl.string_pool = malloc((fsize + 1) * sizeof(char));
if (fread(pl.string_pool, fsize, 1, bss_order) != 1) {
pl.message(LDPL_FATAL, "Failed to read bss order file %s: %s", order_file, strerror(errno));
free(pl.string_pool);
fclose(bss_order);
return LDPS_ERR;
}
pl.string_pool[fsize] = '\0';
fclose(bss_order);
// Strip comments -> spaces, leaving newlines alone for correct error reporting
int line = 1;
bool comment = false;
bool oneline = false;
char *s = pl.string_pool;
while (*s != '\0') {
if (*s == '\n')
line++;
if (*s == '#' || (*s == '/' && s[1] == '/'))
comment = true, oneline = true;
else if (*s == '/' && s[1] == '*')
comment = true, oneline = false;
if (oneline && *s == '\n')
comment = false;
if (comment && !oneline && *s == '*' && s[1] == '/')
comment = false, s[0] = s[1] = ' ';
if (comment && (*s != '\n'))
*s = ' ';
s++;
}
const char *errmsg = "?";
#define SYNTAX_ERR(msg) do { errmsg = msg; goto syntaxerror; } while (0)
if (comment && !oneline)
SYNTAX_ERR("Unclosed multi-line comment");
// Before any detailed parsing, allocate memory based on upper bounds for the number of output files and symbols
size_t total_file_count = 0;
s = pl.string_pool;
for (size_t i = 0; i < fsize; i++, s++) {
if (*s == '{')
total_file_count++;
}
pl.num_ofiles = total_file_count;
pl.ofiles = malloc(total_file_count * sizeof(struct bss_ofile));
size_t cur_ofile = (size_t)-1;
size_t cur_symbol = 0;
s = pl.string_pool;
for (size_t i = 0; i < fsize; i++, s++) {
if (*s == '{') {
if (cur_ofile != (size_t)-1) {
assert (cur_ofile < total_file_count);
pl.ofiles[cur_ofile].num_symbols = cur_symbol;
pl.ofiles[cur_ofile].symbols = malloc(cur_symbol * sizeof(Elf32_Sym));
pl.ofiles[cur_ofile].symbol_names = malloc(cur_symbol * sizeof(char *));
pl.ofiles[cur_ofile].symbols_found = BITSET_ALLOC(cur_symbol);
cur_symbol = 0;
}
cur_ofile++;
} else if (*s == ';') {
cur_symbol++;
}
}
assert (cur_ofile < total_file_count);
pl.ofiles[cur_ofile].num_symbols = cur_symbol;
pl.ofiles[cur_ofile].symbols = malloc(cur_symbol * sizeof(Elf32_Sym));
pl.ofiles[cur_ofile].symbol_names = malloc(cur_symbol * sizeof(char *));
pl.ofiles[cur_ofile].symbols_found = BITSET_ALLOC(cur_symbol);
bool quote = false;
bool eof_ok = false;
char *start = NULL;
char *end = NULL;
void *next = &&fpath;
line = 1;
cur_ofile = (size_t)-1;
cur_symbol = 0;
s = pl.string_pool;
whitespace:
// Skip whitespace, count newlines for syntax error messages
while (iswhitespace(*s)) {
if (*s == '\n') line++;
s++;
};
// If we're at EOF, check if that's OK or whether it's a syntax error
if (*s == '\0') {
if (eof_ok) goto eof;
SYNTAX_ERR("Unexpected EOF");
}
goto *next;
fpath:
// We're looking for a file path now, up until an opening brace {.
// If the file path is unquoted, the first whitespace encountered cuts this short, but if the file path
// is quoted whitespace will be included in the path up until the closing quote. If quoted, newlines will
// cause a syntax error if used between the quotes.
eof_ok = false;
// Check quote immediately, it's only allowed at the start
if (*s == '"') s++, quote = true;
// Consume the path
start = s;
while (*s != '{') {
if (*s == '\0') SYNTAX_ERR("Unexpected EOF");
if (!quote && iswhitespace(*s)) break; // Unquoted whitespace cuts this short
if (quote && *s == '\n') SYNTAX_ERR("Quoted string spanning multiple lines");
if (quote && *s == '"') break; // Ending quotes cuts this short
s++;
}
end = s;
// Check for closing quote
if (*s == '"') {
if (!quote) SYNTAX_ERR("Found a closing quote with no opening quote");
quote = false;
s++;
}
// Consume any whitespace up to {
next = &&obrace;
goto whitespace;
obrace:
// We're looking for an opening brace character {, anything else is a fail
if (*s++ != '{') SYNTAX_ERR("Expected an {");
// NULL-terminate the file path in-place and save it
*end = '\0';
cur_ofile++;
cur_symbol = 0;
assert(cur_ofile < total_file_count);
pl.ofiles[cur_ofile].path = start;
// Consume whitespace up to the first symbol name
next = &&sym;
goto whitespace;
sym:
// Symbol names are similar to the file path, but we're looking to end on a semicolon ;
// If the symbol name is unquoted, the first whitespace encountered cuts this short, but if the symbol name
// is quoted whitespace will be included in the name up until the closing quote. If quoted, newlines will
// cause a syntax error if used between the quotes.
// Check quote immediately, it's only allowed at the start
if (*s == '"') quote = true, s++;
// Consume the symbol name
start = s;
while (*s != ';') {
if (*s == '\0') SYNTAX_ERR("Unexpected EOF");
if (quote && *s == '\n') SYNTAX_ERR("Quoted string spanning multiple lines");
// Unlike file paths, we're not friendly to whitespace between the end of the symbol and the semicolon
// TODO we could be though?
if (!quote && iswhitespace(*s)) SYNTAX_ERR("Whitespace in unquoted symbol name");
if (quote && *s == '"') {
// It's tempting to allow whitespace here but it would be inconsistent with the above, but if the above
// changes this should similarly allow whitespace
if (s[1] != ';') SYNTAX_ERR("Expected ;");
break;
}
s++;
}
end = s;
// Check for end quote
if (*s == '"') {
if (!quote) SYNTAX_ERR("Found a closing quote with no opening quote");
quote = false;
s++;
}
// This assertion should always be true unless the above logic is wrong, it's
// not meant to be caused by a syntax error.
assert(*s++ == ';');
// NULL-terminate
*end = '\0';
assert(cur_symbol < pl.ofiles[cur_ofile].num_symbols);
pl.ofiles[cur_ofile].symbol_names[cur_symbol++] = start;
// Consume any whitespace following the semicolon
next = &&cbrace;
goto whitespace;
cbrace:
// If the first non-whitespace character after a semicolon isn't }, assume it's another
// symbol in the list. If it is }, this is the end of the list.
if (*s != '}') goto sym;
s++;
// This might be a valid end of file (after any trailing whitespace) if this is the last
// output file in the specification.
pl.ofiles[cur_ofile].num_symbols = cur_symbol;
eof_ok = true;
next = &&fpath;
goto whitespace;
eof:
// Reached end of file, we must have all output files and their symbols at this point.
assert(cur_ofile < pl.num_ofiles);
// Reduce the number of files to the actual number from the upper bound
pl.num_ofiles = cur_ofile + 1;
return LDPS_OK;
syntaxerror:
pl.message(LDPL_FATAL, "%s(%d): Syntax error: %s", pl.order_path, line, errmsg);
return LDPS_ERR;
}
static enum ld_plugin_status
parse_option(const char *opt)
{
if (strequ(opt, "order=")) {
pl.order_path = strdup(opt + sizeof("order=") - 1);
return LDPS_OK;
}
fprintf(stderr, "Unknown option: %s\n", opt);
return LDPS_ERR;
}
enum ld_plugin_status
onload(struct ld_plugin_tv *tv)
{
enum ld_plugin_status ps;
// Initialize our state
memset(&pl, 0, sizeof(pl));
pl.api_version = -1;
pl.gnu_ld_version = -1;
pl.linker_output = -1;
// Parse the transfer vector
for (struct ld_plugin_tv *ptv = tv; ptv->tv_tag != LDPT_NULL; ptv++) {
switch (ptv->tv_tag) {
case LDPT_OPTION:
if (ps = parse_option(ptv->tv_u.tv_string), ps != LDPS_OK)
return ps;
break;
case LDPT_MESSAGE:
pl.message = ptv->tv_u.tv_message;
break;
case LDPT_API_VERSION:
pl.api_version = ptv->tv_u.tv_val;
break;
case LDPT_GNU_LD_VERSION:
pl.gnu_ld_version = ptv->tv_u.tv_val;
break;
case LDPT_LINKER_OUTPUT:
pl.linker_output = ptv->tv_u.tv_val;
break;
case LDPT_OUTPUT_NAME:
pl.output_name = ptv->tv_u.tv_string;
break;
case LDPT_REGISTER_CLAIM_FILE_HOOK:
pl.register_claim_file = ptv->tv_u.tv_register_claim_file;
break;
case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK:
pl.register_all_symbols_read = ptv->tv_u.tv_register_all_symbols_read;
break;
case LDPT_REGISTER_CLEANUP_HOOK:
pl.register_cleanup = ptv->tv_u.tv_register_cleanup;
break;
case LDPT_ADD_SYMBOLS:
pl.add_symbols = ptv->tv_u.tv_add_symbols;
break;
case LDPT_GET_INPUT_FILE:
pl.get_input_file = ptv->tv_u.tv_get_input_file;
break;
case LDPT_GET_SYMBOLS:
pl.get_symbols = ptv->tv_u.tv_get_symbols;
break;
case LDPT_GET_SYMBOLS_V2:
pl.get_symbols_v2 = ptv->tv_u.tv_get_symbols;
break;
case LDPT_ADD_INPUT_FILE:
pl.add_input_file = ptv->tv_u.tv_add_input_file;
break;
default:
break;
}
}
// Check pl.message
if (pl.message == NULL) {
fprintf(stderr, "No message() provided to plugin");
return LDPS_ERR;
}
// Check args
if (pl.order_path == NULL) {
pl.message(LDPL_ERROR, "Missing option -plugin-opt order=<order.txt>");
return LDPS_ERR;
}
// Read the order file
if (ps = parse_order_file(pl.order_path), ps != LDPS_OK)
return ps;
// Register callbacks
pl.register_claim_file(claim_file);
pl.register_all_symbols_read(all_symbols_read);
pl.register_cleanup(cleanup);
return LDPS_OK;
}

View file

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
set -eu -o pipefail
if [ "${VERBOSE-}" ]

View file

@ -1,472 +0,0 @@
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
1 name vrom_start vrom_end rom_start rom_end vram_start overlay_dir
2 boot 1050 B7A0 1050 0 80000450
3 code AB0000 BB8FA0 A890F0 B08080 80018FA0
4 ovl_title BB8FA0 BB98D0 B08080 B08650 80800000 gamestates
5 ovl_select BB98D0 BBC550 B08650 B09C90 80800930 gamestates
6 ovl_opening BBC550 BBC6A0 B09C90 B09DA0 808035B0 gamestates
7 ovl_file_choose BBC6A0 BCD170 B09DA0 B114B0 80803700 gamestates
8 ovl_kaleido_scope BCD170 BE91A0 B114B0 B1CE20 808141F0 misc
9 ovl_player_actor BE91A0 C0F8B0 B1CE20 B318E0 80830290 actors
10 ovl_map_mark_data C0F8B0 C16410 B318E0 B31C00 80856A70 misc
11 ovl_En_Test C16410 C1BCC0 B31C00 B34720 8085D5D0 actors
12 ovl_En_GirlA C1BCC0 C1E5E0 B34720 B357F0 80862E80 actors
13 ovl_En_Part C1E5E0 C1FC40 B357F0 B36580 808657A0 actors
14 ovl_En_Light C1FC40 C20A40 B36580 B36DD0 80866E00 actors
15 ovl_En_Door C20A40 C21880 B36DD0 B37790 80867C00 actors
16 ovl_En_Box C21880 C233D0 B37790 B387B0 80868A40 actors
17 ovl_En_Poh C233D0 C275C0 B387B0 B3AB60 8086A5A0 actors
18 ovl_En_Okuta C275C0 C29BA0 B3AB60 B3C1B0 8086E790 actors
19 ovl_En_Bom C29BA0 C2AA70 B3C1B0 B3CB60 80870D70 actors
20 ovl_En_Wallmas C2AA70 C2C480 B3CB60 B3DA80 80871C40 actors
21 ovl_En_Dodongo C2C480 C2F220 B3DA80 B3F4D0 80873650 actors
22 ovl_En_Firefly C2F220 C31390 B3F4D0 B40800 808763F0 actors
23 ovl_En_Horse C31390 C3D5F0 B40800 B46B20 80878560 actors
24 ovl_En_Arrow C3D5F0 C3ECF0 B46B20 B47900 808847C0 actors
25 ovl_En_Elf C3ECF0 C436B0 B47900 B4A170 80885EC0 actors
26 ovl_En_Niw C436B0 C469E0 B4A170 B4C040 8088A880 actors
27 ovl_En_Tite C469E0 C49780 B4C040 B4D800 8088DBB0 actors
28 ovl_En_Reeba C49780 C4B1F0 B4D800 B4E810 80890950 actors
29 ovl_En_Peehat C4B1F0 C4E8F0 B4E810 B505B0 808923C0 actors
30 ovl_En_Holl C4E8F0 C4F8C0 B505B0 B50F90 80895AC0 actors
31 ovl_En_Scene_Change C4F8C0 C4F9F0 B50F90 B51060 80896A90 actors
32 ovl_En_Zf C4F9F0 C564D0 B51060 B548E0 80896BC0 actors
33 ovl_En_Hata C564D0 C56A60 B548E0 B54D00 8089D6B0 actors
34 ovl_Boss_Dodongo C56A60 C60560 B54D00 B5A160 8089DC40 actors
35 ovl_Boss_Goma C60560 C66500 B5A160 B5D240 808A7740 actors
36 ovl_En_Zl1 C66500 C6A310 B5D240 B5ED00 808AD6E0 actors
37 ovl_En_Viewer C6A310 C6D1B0 B5ED00 B607E0 808B14F0 actors
38 ovl_En_Goma C6D1B0 C6FE60 B607E0 B62130 808B43B0 actors
39 ovl_Bg_Pushbox C6FE60 C70160 B62130 B62350 808B7060 actors
40 ovl_En_Bubble C70160 C71580 B62350 B63030 808B7360 actors
41 ovl_Door_Shutter C71580 C73840 B63030 B64550 808B8780 actors
42 ovl_En_Dodojr C73840 C756E0 B64550 B65760 808BAA40 actors
43 ovl_En_Bdfire C756E0 C76280 B65760 B65EF0 808BC8E0 actors
44 ovl_En_Boom C76280 C76B50 B65EF0 B664F0 808BD480 actors
45 ovl_En_Torch2 C76B50 C792B0 B664F0 B67D50 808BDD50 actors
46 ovl_En_Bili C792B0 C7B580 B67D50 B691C0 808C04F0 actors
47 ovl_En_Tp C7B580 C7D3F0 B691C0 B6A490 808C27C0 actors
48 ovl_En_St C7D3F0 C80060 B6A490 B6BEB0 808C4630 actors
49 ovl_En_Bw C80060 C833F0 B6BEB0 B6DC30 808C72A0 actors
50 ovl_En_Eiyer C833F0 C85050 B6DC30 B6ED50 808CA630 actors
51 ovl_En_River_Sound C85050 C859E0 B6ED50 B6F3D0 808CC290 actors
52 ovl_En_Horse_Normal C859E0 C88000 B6F3D0 B708B0 808CCC20 actors
53 ovl_En_Ossan C88000 C8E5E0 B708B0 B73780 808CF240 actors
54 ovl_Bg_Treemouth C8E5E0 C8FC40 B73780 B741C0 808D5820 actors
55 ovl_Bg_Dodoago C8FC40 C90980 B741C0 B74A60 808D6E80 actors
56 ovl_Bg_Hidan_Dalm C90980 C911D0 B74A60 B74FB0 808D7C30 actors
57 ovl_Bg_Hidan_Hrock C911D0 C91A00 B74FB0 B75510 808D8480 actors
58 ovl_En_Horse_Ganon C91A00 C92780 B75510 B75DD0 808D8CB0 actors
59 ovl_Bg_Hidan_Rock C92780 C93880 B75DD0 B76880 808D9A30 actors
60 ovl_Bg_Hidan_Rsekizou C93880 C94460 B76880 B76FC0 808DAB30 actors
61 ovl_Bg_Hidan_Sekizou C94460 C958B0 B76FC0 B77C90 808DB710 actors
62 ovl_Bg_Hidan_Sima C958B0 C967B0 B77C90 B78660 808DCB60 actors
63 ovl_Bg_Hidan_Syoku C967B0 C96C10 B78660 B78900 808DDA60 actors
64 ovl_En_Xc C96C10 C9D370 B78900 B7B400 808DDEC0 actors
65 ovl_Bg_Hidan_Curtain C9D370 C9DE10 B7B400 B7BAE0 808E4650 actors
66 ovl_Bg_Spot00_Hanebasi C9DE10 C9EF20 B7BAE0 B7C670 808E50F0 actors
67 ovl_En_Mb C9EF20 CA3150 B7C670 B7EAB0 808E6200 actors
68 ovl_En_Bombf CA3150 CA45E0 B7EAB0 B7F820 808EA430 actors
69 ovl_Bg_Hidan_Firewall CA45E0 CA4D40 B7F820 B7FD30 808EB8C0 actors
70 ovl_Bg_Dy_Yoseizo CA4D40 CA7B30 B7FD30 B817E0 808EC020 actors
71 ovl_En_Zl2 CA7B30 CAC230 B817E0 B834B0 808EEE10 actors
72 ovl_Bg_Hidan_Fslift CAC230 CAC700 B834B0 B837B0 808F3510 actors
73 ovl_En_OE2 CAC700 CAC7E0 B837B0 B83830 808F39E0 actors
74 ovl_Bg_Ydan_Hasi CAC7E0 CACF90 B83830 B83D40 808F3AC0 actors
75 ovl_Bg_Ydan_Maruta CACF90 CAD670 B83D40 B841D0 808F4270 actors
76 ovl_Boss_Ganondrof CAD670 CB2400 B841D0 B86CE0 808F4950 actors
77 ovl_En_Am CB2400 CB4800 B86CE0 B88160 808F96E0 actors
78 ovl_En_Dekubaba CB4800 CB82B0 B88160 B8A190 808FBAE0 actors
79 ovl_En_M_Fire1 CB82B0 CB8450 B8A190 B8A2C0 808FF590 actors
80 ovl_En_M_Thunder CB8450 CB9A50 B8A2C0 B8B070 808FF730 actors
81 ovl_Bg_Ddan_Jd CB9A50 CBA0A0 B8B070 B8B4A0 80900D30 actors
82 ovl_Bg_Breakwall CBA0A0 CBAF10 B8B4A0 B8BE10 80901380 actors
83 ovl_En_Jj CBAF10 CBC4E0 B8BE10 B8C890 809021F0 actors
84 ovl_En_Horse_Zelda CBC4E0 CBCFD0 B8C890 B8CFF0 809037C0 actors
85 ovl_Bg_Ddan_Kd CBCFD0 CBD8C0 B8CFF0 B8D5A0 809042B0 actors
86 ovl_Door_Warp1 CBD8C0 CC1BC0 B8D5A0 B8F6A0 80904BA0 actors
87 ovl_Obj_Syokudai CC1BC0 CC2800 B8F6A0 B8FF20 80908EB0 actors
88 ovl_Item_B_Heart CC2800 CC2C10 B8FF20 B90200 80909B00 actors
89 ovl_En_Dekunuts CC2C10 CC4410 B90200 B90F60 80909F10 actors
90 ovl_Bg_Menkuri_Kaiten CC4410 CC45A0 B90F60 B91090 8090B710 actors
91 ovl_Bg_Menkuri_Eye CC45A0 CC4A30 B91090 B913C0 8090B8A0 actors
92 ovl_En_Vali CC4A30 CC70F0 B913C0 B92A60 8090BD40 actors
93 ovl_Bg_Mizu_Movebg CC70F0 CC8270 B92A60 B934F0 8090E400 actors
94 ovl_Bg_Mizu_Water CC8270 CC8F40 B934F0 B93C70 8090F590 actors
95 ovl_Arms_Hook CC8F40 CC9CB0 B93C70 B94520 80910260 actors
96 ovl_En_fHG CC9CB0 CCC5E0 B94520 B95C80 80910FD0 actors
97 ovl_Bg_Mori_Hineri CCC5E0 CCD330 B95C80 B964C0 80913900 actors
98 ovl_En_Bb CCD330 CD1010 B964C0 B98950 80914650 actors
99 ovl_Bg_Toki_Hikari CD1010 CD1DB0 B98950 B99070 80918330 actors
100 ovl_En_Yukabyun CD1DB0 CD23C0 B99070 B994E0 809190D0 actors
101 ovl_Bg_Toki_Swd CD23C0 CD3A10 B994E0 B99DB0 809196E0 actors
102 ovl_En_Fhg_Fire CD3A10 CD60B0 B99DB0 B9B520 8091AD30 actors
103 ovl_Bg_Mjin CD60B0 CD64A0 B9B520 B9B7F0 8091D3D0 actors
104 ovl_Bg_Hidan_Kousi CD64A0 CD6A30 B9B7F0 B9BB80 8091D7C0 actors
105 ovl_Door_Toki CD6A30 CD6B90 B9BB80 B9BC80 8091DD50 actors
106 ovl_Bg_Hidan_Hamstep CD6B90 CD7A40 B9BC80 B9C5E0 8091DEB0 actors
107 ovl_En_Bird CD7A40 CD7F00 B9C5E0 B9C920 8091ED60 actors
108 ovl_En_Wood02 CD7F00 CD90D0 B9C920 B9D4C0 8091F220 actors
109 ovl_En_Lightbox CD90D0 CD9550 B9D4C0 B9D800 80920400 actors
110 ovl_En_Pu_box CD9550 CD9890 B9D800 B9DA60 80920880 actors
111 ovl_En_Trap CD9890 CDAB30 B9DA60 B9E4B0 80920BC0 actors
112 ovl_En_Arow_Trap CDAB30 CDAC80 B9E4B0 B9E5D0 80921E60 actors
113 ovl_En_Vase CDAC80 CDAD80 B9E5D0 B9E690 80921FB0 actors
114 ovl_En_Ta CDAD80 CDE740 B9E690 BA0470 809220B0 actors
115 ovl_En_Tk CDE740 CE0570 BA0470 BA1710 80925A70 actors
116 ovl_Bg_Mori_Bigst CE0570 CE0EA0 BA1710 BA1C80 809278A0 actors
117 ovl_Bg_Mori_Elevator CE0EA0 CE1990 BA1C80 BA22B0 809281D0 actors
118 ovl_Bg_Mori_Kaitenkabe CE1990 CE2000 BA22B0 BA2720 80928CC0 actors
119 ovl_Bg_Mori_Rakkatenjo CE2000 CE2980 BA2720 BA2CD0 80929330 actors
120 ovl_En_Vm CE2980 CE4240 BA2CD0 BA3BB0 80929CB0 actors
121 ovl_Demo_Effect CE4240 CE9DE0 BA3BB0 BA6D90 8092B570 actors
122 ovl_Demo_Kankyo CE9DE0 CEDA80 BA6D90 BA8C80 80931110 actors
123 ovl_Bg_Hidan_Fwbig CEDA80 CEE760 BA8C80 BA9520 80934E00 actors
124 ovl_En_Floormas CEE760 CF1B40 BA9520 BAB060 80935AE0 actors
125 ovl_En_Heishi1 CF1B40 CF3050 BAB060 BABC80 80938EC0 actors
126 ovl_En_Rd CF3050 CF5910 BABC80 BAD2A0 8093A3D0 actors
127 ovl_En_Po_Sisters CF5910 CFA600 BAD2A0 BAFCF0 8093CC90 actors
128 ovl_Bg_Heavy_Block CFA600 CFBEF0 BAFCF0 BB0C40 80941980 actors
129 ovl_Bg_Po_Event CFBEF0 CFDD20 BB0C40 BB1F30 80943270 actors
130 ovl_Obj_Mure CFDD20 CFED30 BB1F30 BB2890 809450B0 actors
131 ovl_En_Sw CFED30 D024A0 BB2890 BB4A40 809460C0 actors
132 ovl_Boss_Fd D024A0 D09800 BB4A40 BB8AF0 809498B0 actors
133 ovl_Object_Kankyo D09800 D0CA80 BB8AF0 BBA8B0 80950C10 actors
134 ovl_En_Du D0CA80 D0E510 BBA8B0 BBB820 80953E90 actors
135 ovl_En_Fd D0E510 D111B0 BBB820 BBD3D0 80955920 actors
136 ovl_En_Horse_Link_Child D111B0 D12FB0 BBD3D0 BBE350 809585C0 actors
137 ovl_Door_Ana D12FB0 D13620 BBE350 BBE7D0 8095A3C0 actors
138 ovl_Bg_Spot02_Objects D13620 D14980 BBE7D0 BBF3A0 8095AA30 actors
139 ovl_Bg_Haka D14980 D15040 BBF3A0 BBF860 8095BD90 actors
140 ovl_Magic_Wind D15040 D16D40 BBF860 BC0F20 8095C450 actors
141 ovl_Magic_Fire D16D40 D19040 BC0F20 BC2B20 8095E150 actors
142 ovl_En_Ru1 D19040 D206E0 BC2B20 BC5F20 80960450 actors
143 ovl_Boss_Fd2 D206E0 D24410 BC5F20 BC83D0 80967AF0 actors
144 ovl_En_Fd_Fire D24410 D25120 BC83D0 BC8CD0 8096B820 actors
145 ovl_En_Dh D25120 D26C00 BC8CD0 BC9D70 8096C530 actors
146 ovl_En_Dha D26C00 D27C00 BC9D70 BCA750 8096E010 actors
147 ovl_En_Rl D27C00 D28AE0 BCA750 BCAEE0 8096F010 actors
148 ovl_En_Encount1 D28AE0 D29640 BCAEE0 BCB6B0 8096FEF0 actors
149 ovl_Demo_Du D29640 D2CE20 BCB6B0 BCCE20 80970A50 actors
150 ovl_Demo_Im D2CE20 D30D90 BCCE20 BCE8A0 80974230 actors
151 ovl_Demo_Tre_Lgt D30D90 D314A0 BCE8A0 BCED80 809781A0 actors
152 ovl_En_Fw D314A0 D32C60 BCED80 BCFD90 809788B0 actors
153 ovl_Bg_Vb_Sima D32C60 D33380 BCFD90 BD02B0 8097A070 actors
154 ovl_En_Vb_Ball D33380 D34530 BD02B0 BD0DF0 8097A790 actors
155 ovl_Bg_Haka_Megane D34530 D34930 BD0DF0 BD10B0 8097B940 actors
156 ovl_Bg_Haka_MeganeBG D34930 D34FF0 BD10B0 BD1510 8097BD40 actors
157 ovl_Bg_Haka_Ship D34FF0 D35A40 BD1510 BD1BE0 8097C400 actors
158 ovl_Bg_Haka_Sgami D35A40 D36660 BD1BE0 BD23D0 8097CE50 actors
159 ovl_En_Heishi2 D36660 D38860 BD23D0 BD3570 8097DA70 actors
160 ovl_En_Encount2 D38860 D39A90 BD3570 BD4140 8097FC70 actors
161 ovl_En_Fire_Rock D39A90 D3ABA0 BD4140 BD4BB0 80980EA0 actors
162 ovl_En_Brob D3ABA0 D3BC90 BD4BB0 BD5610 80981FB0 actors
163 ovl_Mir_Ray D3BC90 D3D540 BD5610 BD66B0 809830A0 actors
164 ovl_Bg_Spot09_Obj D3D540 D3DA60 BD66B0 BD69E0 80984950 actors
165 ovl_Bg_Spot18_Obj D3DA60 D3E330 BD69E0 BD6F20 80984E70 actors
166 ovl_Boss_Va D3E330 D4CBC0 BD6F20 BDEBF0 80985740 actors
167 ovl_Bg_Haka_Tubo D4CBC0 D4D5E0 BDEBF0 BDF2D0 8099C9D0 actors
168 ovl_Bg_Haka_Trap D4D5E0 D4EBB0 BDF2D0 BE0060 8099D3F0 actors
169 ovl_Bg_Haka_Huta D4EBB0 D4F650 BE0060 BE0760 8099E9C0 actors
170 ovl_Bg_Haka_Zou D4F650 D50840 BE0760 BE12E0 8099F460 actors
171 ovl_Bg_Spot17_Funen D50840 D50A90 BE12E0 BE14A0 809A0650 actors
172 ovl_En_Syateki_Itm D50A90 D51830 BE14A0 BE1D30 809A08A0 actors
173 ovl_En_Syateki_Man D51830 D525F0 BE1D30 BE25B0 809A1640 actors
174 ovl_En_Tana D525F0 D528A0 BE25B0 BE2790 809A2400 actors
175 ovl_En_Nb D528A0 D56E70 BE2790 BE4570 809A26B0 actors
176 ovl_Boss_Mo D56E70 D62940 BE4570 BEB300 809A6C80 actors
177 ovl_En_Sb D62940 D63D80 BEB300 BEBE70 809B7260 actors
178 ovl_En_Bigokuta D63D80 D66880 BEBE70 BED740 809B86A0 actors
179 ovl_En_Karebaba D66880 D68170 BED740 BEE610 809BB1A0 actors
180 ovl_Bg_Bdan_Objects D68170 D69440 BEE610 BEF150 809BCA90 actors
181 ovl_Demo_Sa D69440 D6BF60 BEF150 BF03C0 809BDD60 actors
182 ovl_Demo_Go D6BF60 D6CCB0 BF03C0 BF0B70 809C0880 actors
183 ovl_En_In D6CCB0 D6FA50 BF0B70 BF2750 809C15D0 actors
184 ovl_En_Tr D6FA50 D71350 BF2750 BF3690 809C4370 actors
185 ovl_Bg_Spot16_Bombstone D71350 D728A0 BF3690 BF4490 809C5C70 actors
186 ovl_Bg_Hidan_Kowarerukabe D728A0 D73780 BF4490 BF4CE0 809C71C0 actors
187 ovl_Bg_Bombwall D73780 D74040 BF4CE0 BF52A0 809C80A0 actors
188 ovl_En_Ru2 D74040 D76DC0 BF52A0 BF65C0 809C8960 actors
189 ovl_Obj_Dekujr D76DC0 D77400 BF65C0 BF6A10 809CB6E0 actors
190 ovl_Bg_Mizu_Uzu D77400 D775D0 BF6A10 BF6B70 809CBD20 actors
191 ovl_Bg_Spot06_Objects D775D0 D789D0 BF6B70 BF7840 809CBEF0 actors
192 ovl_Bg_Ice_Objects D789D0 D79910 BF7840 BF80C0 809CD2F0 actors
193 ovl_Bg_Haka_Water D79910 D7A110 BF80C0 BF85A0 809CE230 actors
194 ovl_En_Ma2 D7A110 D7B170 BF85A0 BF9020 809CEA30 actors
195 ovl_En_Bom_Chu D7B170 D7C810 BF9020 BF9F10 809CFA90 actors
196 ovl_En_Horse_Game_Check D7C810 D7D8E0 BF9F10 BFA960 809D1130 actors
197 ovl_Boss_Tw D7D8E0 D90A30 BFA960 C04CE0 809D2200 actors
198 ovl_En_Rr D90A30 D92F60 C04CE0 C06350 809E7DD0 actors
199 ovl_En_Ba D92F60 D94E30 C06350 C07490 809EA300 actors
200 ovl_En_Bx D94E30 D95930 C07490 C07C60 809EC1D0 actors
201 ovl_En_Anubice D95930 D96BE0 C07C60 C08810 809ECCD0 actors
202 ovl_En_Anubice_Fire D96BE0 D979A0 C08810 C09180 809EDF80 actors
203 ovl_Bg_Mori_Hashigo D979A0 D98260 C09180 C09700 809EED40 actors
204 ovl_Bg_Mori_Hashira4 D98260 D987E0 C09700 C09AA0 809EF600 actors
205 ovl_Bg_Mori_Idomizu D987E0 D98E20 C09AA0 C09EC0 809EFB90 actors
206 ovl_Bg_Spot16_Doughnut D98E20 D993E0 C09EC0 C0A2C0 809F01D0 actors
207 ovl_Bg_Bdan_Switch D993E0 D9A810 C0A2C0 C0ACC0 809F0790 actors
208 ovl_En_Ma1 D9A810 D9BAF0 C0ACC0 C0B870 809F1BC0 actors
209 ovl_Boss_Ganon D9BAF0 DBDDA0 C0B870 C1E5A0 809F2EA0 actors
210 ovl_Boss_Sst DBDDA0 DCA330 C1E5A0 C24DB0 80A18CD0 actors
211 ovl_En_Ny DCA330 DCBC70 C24DB0 C25D40 80A252A0 actors
212 ovl_En_Fr DCBC70 DCE700 C25D40 C276B0 80A26BE0 actors
213 ovl_Item_Shield DCE700 DCF110 C276B0 C27D70 80A29670 actors
214 ovl_Bg_Ice_Shelter DCF110 DD0350 C27D70 C28900 80A2A080 actors
215 ovl_En_Ice_Hono DD0350 DD1540 C28900 C293E0 80A2B2C0 actors
216 ovl_Item_Ocarina DD1540 DD1D10 C293E0 C298C0 80A2C4B0 actors
217 ovl_Magic_Dark DD1D10 DD3560 C298C0 C2A9A0 80A2CC80 actors
218 ovl_Demo_6K DD3560 DD62C0 C2A9A0 C2C5E0 80A2E4D0 actors
219 ovl_En_Anubice_Tag DD62C0 DD6590 C2C5E0 C2C7F0 80A31230 actors
220 ovl_Bg_Haka_Gate DD6590 DD7620 C2C7F0 C2D290 80A31500 actors
221 ovl_Bg_Spot15_Saku DD7620 DD7960 C2D290 C2D4F0 80A325A0 actors
222 ovl_Bg_Jya_Goroiwa DD7960 DD80E0 C2D4F0 C2DA20 80A328E0 actors
223 ovl_Bg_Jya_Zurerukabe DD80E0 DD8790 C2DA20 C2DE80 80A33060 actors
224 ovl_Bg_Jya_Cobra DD8790 DDA4D0 C2DE80 C2F0B0 80A33710 actors
225 ovl_Bg_Jya_Kanaami DDA4D0 DDA880 C2F0B0 C2F330 80A35450 actors
226 ovl_Fishing DDA880 DECD10 C2F330 C38420 80A35800 actors
227 ovl_Obj_Oshihiki DECD10 DEE7C0 C38420 C393D0 80A4ED40 actors
228 ovl_Bg_Gate_Shutter DEE7C0 DEEC50 C393D0 C396C0 80A507F0 actors
229 ovl_Eff_Dust DEEC50 DF0020 C396C0 C3A0E0 80A50C80 actors
230 ovl_Bg_Spot01_Fusya DF0020 DF02C0 C3A0E0 C3A2E0 80A52050 actors
231 ovl_Bg_Spot01_Idohashira DF02C0 DF0EC0 C3A2E0 C3AA70 80A522F0 actors
232 ovl_Bg_Spot01_Idomizu DF0EC0 DF11E0 C3AA70 C3ACD0 80A52EF0 actors
233 ovl_Bg_Po_Syokudai DF11E0 DF1B50 C3ACD0 C3B320 80A53210 actors
234 ovl_Bg_Ganon_Otyuka DF1B50 DF4190 C3B320 C3CCA0 80A53B80 actors
235 ovl_Bg_Spot15_Rrbox DF4190 DF4F70 C3CCA0 C3D500 80A561C0 actors
236 ovl_Bg_Umajump DF4F70 DF5100 C3D500 C3D630 80A56FA0 actors
237 ovl_En_Insect DF5100 DF7620 C3D630 C3EB20 80A57130 actors
238 ovl_En_Butte DF7620 DF8BF0 C3EB20 C3F870 80A59650 actors
239 ovl_En_Fish DF8BF0 DFAD00 C3F870 C40A30 80A5AC20 actors
240 ovl_Bg_Spot08_Iceblock DFAD00 DFBD40 C40A30 C413B0 80A5CD30 actors
241 ovl_Item_Etcetera DFBD40 DFC610 C413B0 C41920 80A5DD70 actors
242 ovl_Arrow_Fire DFC610 DFE4F0 C41920 C430F0 80A5E640 actors
243 ovl_Arrow_Ice DFE4F0 E003F0 C430F0 C446A0 80A60520 actors
244 ovl_Arrow_Light E003F0 E02300 C446A0 C45CD0 80A62420 actors
245 ovl_Obj_Kibako E02300 E03000 C45CD0 C46440 80A64330 actors
246 ovl_Obj_Tsubo E03000 E03FF0 C46440 C46DD0 80A65030 actors
247 ovl_En_Wonder_Item E03FF0 E04C40 C46DD0 C47520 80A66020 actors
248 ovl_En_Ik E04C40 E09290 C47520 C497E0 80A66D50 actors
249 ovl_Demo_Ik E09290 E0A7A0 C497E0 C4A2D0 80A6B3B0 actors
250 ovl_En_Skj E0A7A0 E0E0E0 C4A2D0 C4C0E0 80A6C8C0 actors
251 ovl_En_Skjneedle E0E0E0 E0E3F0 C4C0E0 C4C320 80A70210 actors
252 ovl_En_G_Switch E0E3F0 E0FC10 C4C320 C4D2D0 80A70520 actors
253 ovl_Demo_Ext E0FC10 E10560 C4D2D0 C4D8D0 80A71D40 actors
254 ovl_Demo_Shd E10560 E12970 C4D8D0 C4EE30 80A72690 actors
255 ovl_En_Dns E12970 E13D00 C4EE30 C4F900 80A74AA0 actors
256 ovl_Elf_Msg E13D00 E142F0 C4F900 C4FCB0 80A75E30 actors
257 ovl_En_Honotrap E142F0 E15850 C4FCB0 C50A20 80A76420 actors
258 ovl_En_Tubo_Trap E15850 E164F0 C50A20 C511C0 80A77980 actors
259 ovl_Obj_Ice_Poly E164F0 E16EA0 C511C0 C51850 80A78620 actors
260 ovl_Bg_Spot03_Taki E16EA0 E177C0 C51850 C51E00 80A78FD0 actors
261 ovl_Bg_Spot07_Taki E177C0 E17DB0 C51E00 C521C0 80A798F0 actors
262 ovl_En_Fz E17DB0 E19DC0 C521C0 C534E0 80A79EE0 actors
263 ovl_En_Po_Relay E19DC0 E1B4D0 C534E0 C543A0 80A7BEF0 actors
264 ovl_Bg_Relay_Objects E1B4D0 E1BC80 C543A0 C548B0 80A7D600 actors
265 ovl_En_Diving_Game E1BC80 E1D630 C548B0 C55800 80A7DDB0 actors
266 ovl_En_Kusa E1D630 E1EB10 C55800 C564E0 80A7F760 actors
267 ovl_Obj_Bean E1EB10 E212A0 C564E0 C57A00 80A80C40 actors
268 ovl_Obj_Bombiwa E212A0 E21810 C57A00 C57DF0 80A833D0 actors
269 ovl_Obj_Switch E21810 E235F0 C57DF0 C58DF0 80A83940 actors
270 ovl_Obj_Elevator E235F0 E239B0 C58DF0 C59070 80A85720 actors
271 ovl_Obj_Lift E239B0 E243D0 C59070 C59750 80A85AE0 actors
272 ovl_Obj_Hsblock E243D0 E249A0 C59750 C59B30 80A86500 actors
273 ovl_En_Okarina_Tag E249A0 E25EA0 C59B30 C5A570 80A86AD0 actors
274 ovl_En_Yabusame_Mark E25EA0 E26570 C5A570 C5A9D0 80A87FD0 actors
275 ovl_En_Goroiwa E26570 E28930 C5A9D0 C5BF50 80A886A0 actors
276 ovl_En_Ex_Ruppy E28930 E299F0 C5BF50 C5C9F0 80A8AA60 actors
277 ovl_En_Toryo E299F0 E2A680 C5C9F0 C5D1A0 80A8BB20 actors
278 ovl_En_Daiku E2A680 E2BDC0 C5D1A0 C5E0C0 80A8C7B0 actors
279 ovl_En_Nwc E2BDC0 E2C7E0 C5E0C0 C5E7E0 80A8DEF0 actors
280 ovl_En_Blkobj E2C7E0 E2CD40 C5E7E0 C5EBA0 80A8E910 actors
281 ovl_Item_Inbox E2CD40 E2CEA0 C5EBA0 C5EC90 80A8EE70 actors
282 ovl_En_Ge1 E2CEA0 E2EED0 C5EC90 C5FDC0 80A8EFD0 actors
283 ovl_Obj_Blockstop E2EED0 E2F070 C5FDC0 C5FF00 80A91000 actors
284 ovl_En_Sda E2F070 E306A0 C5FF00 C60BA0 80A911A0 actors
285 ovl_En_Clear_Tag E306A0 E39210 C60BA0 C64720 80A92890 actors
286 ovl_En_Niw_Lady E39210 E3AB10 C64720 C65630 80A9DE30 actors
287 ovl_En_Gm E3AB10 E3B840 C65630 C65EB0 80A9F730 actors
288 ovl_En_Ms E3B840 E3BF30 C65EB0 C66370 80AA0460 actors
289 ovl_En_Hs E3BF30 E3CAD0 C66370 C66A60 80AA0B50 actors
290 ovl_Bg_Ingate E3CAD0 E3CE60 C66A60 C66CF0 80AA16F0 actors
291 ovl_En_Kanban E3CE60 E3FFB0 C66CF0 C68660 80AA1A80 actors
292 ovl_En_Heishi3 E3FFB0 E40980 C68660 C68C60 80AA4BD0 actors
293 ovl_En_Syateki_Niw E40980 E42A10 C68C60 C6A060 80AA55A0 actors
294 ovl_En_Attack_Niw E42A10 E43C70 C6A060 C6ABA0 80AA7630 actors
295 ovl_Bg_Spot01_Idosoko E43C70 E43E80 C6ABA0 C6AD20 80AA8890 actors
296 ovl_En_Sa E43E80 E460F0 C6AD20 C6BFE0 80AA8AA0 actors
297 ovl_En_Wonder_Talk E460F0 E46780 C6BFE0 C6C450 80AAAD10 actors
298 ovl_Bg_Gjyo_Bridge E46780 E46C70 C6C450 C6C7E0 80AAB3A0 actors
299 ovl_En_Ds E46C70 E47890 C6C7E0 C6CF10 80AAB890 actors
300 ovl_En_Mk E47890 E48720 C6CF10 C6D770 80AAC4B0 actors
301 ovl_En_Bom_Bowl_Man E48720 E49C60 C6D770 C6E4B0 80AAD340 actors
302 ovl_En_Bom_Bowl_Pit E49C60 E4A5D0 C6E4B0 C6EAD0 80AAE880 actors
303 ovl_En_Owl E4A5D0 E4E170 C6EAD0 C707E0 80AAF1F0 actors
304 ovl_En_Ishi E4E170 E572C0 C707E0 C717A0 80AB2D90 actors
305 ovl_Obj_Hana E572C0 E575D0 C717A0 C719C0 80ABBEE0 actors
306 ovl_Obj_Lightswitch E575D0 E58A00 C719C0 C72570 80ABC1F0 actors
307 ovl_Obj_Mure2 E58A00 E59420 C72570 C72BB0 80ABD620 actors
308 ovl_En_Go E59420 E5DA60 C72BB0 C75160 80ABE040 actors
309 ovl_En_Fu E5DA60 E5E7A0 C75160 C75A10 80AC2680 actors
310 ovl_En_Changer E5E7A0 E5F180 C75A10 C76020 80AC33D0 actors
311 ovl_Bg_Jya_Megami E5F180 E60370 C76020 C76CA0 80AC3DB0 actors
312 ovl_Bg_Jya_Lift E60370 E608C0 C76CA0 C77040 80AC4FA0 actors
313 ovl_Bg_Jya_Bigmirror E608C0 E61110 C77040 C77610 80AC54F0 actors
314 ovl_Bg_Jya_Bombchuiwa E61110 E61C50 C77610 C77D40 80AC5D40 actors
315 ovl_Bg_Jya_Amishutter E61C50 E61FE0 C77D40 C77F40 80AC6880 actors
316 ovl_Bg_Jya_Bombiwa E61FE0 E625A0 C77F40 C78350 80AC6C10 actors
317 ovl_Bg_Spot18_Basket E625A0 E63590 C78350 C78D60 80AC71D0 actors
318 ovl_En_Ganon_Organ E63590 E6A5D0 C78D60 C7BCA0 80AC81C0 actors
319 ovl_En_Siofuki E6A5D0 E6B380 C7BCA0 C7C530 80ACF200 actors
320 ovl_En_Stream E6B380 E6B910 C7C530 C7C920 80ACFFB0 actors
321 ovl_En_Mm E6B910 E6CF70 C7C920 C7D770 80AD0540 actors
322 ovl_En_Ko E6CF70 E710B0 C7D770 C7F6F0 80AD1BA0 actors
323 ovl_En_Kz E710B0 E72650 C7F6F0 C80480 80AD5CE0 actors
324 ovl_En_Weather_Tag E72650 E73540 C80480 C80AA0 80AD7280 actors
325 ovl_Bg_Sst_Floor E73540 E73AA0 C80AA0 C80EB0 80AD8170 actors
326 ovl_En_Ani E73AA0 E74810 C80EB0 C816C0 80AD86D0 actors
327 ovl_En_Ex_Item E74810 E75990 C816C0 C82120 80AD9440 actors
328 ovl_Bg_Jya_Ironobj E75990 E76740 C82120 C82910 80ADA5C0 actors
329 ovl_En_Js E76740 E77110 C82910 C82F00 80ADB370 actors
330 ovl_En_Jsjutan E77110 E7BEE0 C82F00 C847E0 80ADBD40 actors
331 ovl_En_Cs E7BEE0 E7D110 C847E0 C85380 80AE1670 actors
332 ovl_En_Md E7D110 E7F780 C85380 C866E0 80AE28A0 actors
333 ovl_En_Hy E7F780 E830C0 C866E0 C88530 80AE4F10 actors
334 ovl_En_Ganon_Mant E830C0 E872F0 C88530 C89E00 80AE8850 actors
335 ovl_En_Okarina_Effect E872F0 E876B0 C89E00 C8A080 80AECA80 actors
336 ovl_En_Mag E876B0 E8A6F0 C8A080 C8B630 80AECE40 actors
337 ovl_Door_Gerudo E8A6F0 E8ACE0 C8B630 C8BA60 80AF1E80 actors
338 ovl_Elf_Msg2 E8ACE0 E8B150 C8BA60 C8BCE0 80AF2470 actors
339 ovl_Demo_Gt E8B150 E90760 C8BCE0 C8E1A0 80AF28E0 actors
340 ovl_En_Po_Field E90760 E94160 C8E1A0 C903D0 80AF7EF0 actors
341 ovl_Efc_Erupc E94160 E94C50 C903D0 C90B40 80AFB980 actors
342 ovl_Bg_Zg E94C50 E950A0 C90B40 C90E20 80AFC470 actors
343 ovl_En_Heishi4 E950A0 E95FA0 C90E20 C91710 80AFC8C0 actors
344 ovl_En_Zl3 E95FA0 E9DDF0 C91710 C94CC0 80AFD7C0 actors
345 ovl_Boss_Ganon2 E9DDF0 EAF140 C94CC0 C9DC80 80B05610 actors
346 ovl_En_Kakasi EAF140 EAFE80 C9DC80 C9E500 80B18480 actors
347 ovl_En_Takara_Man EAFE80 EB0740 C9E500 C9EB20 80B191C0 actors
348 ovl_Obj_Makeoshihiki EB0740 EB0BD0 C9EB20 C9EE50 80B19A80 actors
349 ovl_Oceff_Spot EB0BD0 EB1B00 C9EE50 C9F9C0 80B19F10 actors
350 ovl_End_Title EB1B00 EB7540 C9F9C0 CA1670 80B1AE40 actors
351 ovl_En_Torch EB7540 EB7630 CA1670 CA1740 80B20880 actors
352 ovl_Demo_Ec EB7630 EBAE90 CA1740 CA2A30 80B20970 actors
353 ovl_Shot_Sun EBAE90 EBB550 CA2A30 CA2EF0 80B241D0 actors
354 ovl_En_Dy_Extra EBB550 EBBAF0 CA2EF0 CA3300 80B24890 actors
355 ovl_En_Wonder_Talk2 EBBAF0 EBC190 CA3300 CA37A0 80B24E30 actors
356 ovl_En_Ge2 EBC190 EBDB30 CA37A0 CA4690 80B254D0 actors
357 ovl_Obj_Roomtimer EBDB30 EBDD80 CA4690 CA4850 80B26E70 actors
358 ovl_En_Ssh EBDD80 EC0370 CA4850 CA5EA0 80B270C0 actors
359 ovl_En_Sth EC0370 EC4430 CA5EA0 CA8540 80B296B0 actors
360 ovl_Oceff_Wipe EC4430 EC51B0 CA8540 CA8FA0 80B2D770 actors
361 ovl_Effect_Ss_Dust EC51B0 EC59F0 CA8FA0 CA9530 80B2E4F0 effects
362 ovl_Effect_Ss_KiraKira EC59F0 EC6060 CA9530 CA99D0 80B2ED30 effects
363 ovl_Effect_Ss_Bomb EC6060 EC6490 CA99D0 CA9D00 80B2F3A0 effects
364 ovl_Effect_Ss_Bomb2 EC6490 EC6D90 CA9D00 CAA290 80B2F7D0 effects
365 ovl_Effect_Ss_Blast EC6D90 EC7120 CAA290 CAA560 80B300D0 effects
366 ovl_Effect_Ss_G_Spk EC7120 EC76D0 CAA560 CAA990 80B30460 effects
367 ovl_Effect_Ss_D_Fire EC76D0 EC7BC0 CAA990 CAAD60 80B30A10 effects
368 ovl_Effect_Ss_Bubble EC7BC0 EC8040 CAAD60 CAB0B0 80B30F00 effects
369 ovl_Effect_Ss_G_Ripple EC8040 EC85A0 CAB0B0 CAB4B0 80B31380 effects
370 ovl_Effect_Ss_G_Splash EC85A0 EC8A50 CAB4B0 CAB7C0 80B318E0 effects
371 ovl_Effect_Ss_G_Magma EC8A50 EC8CB0 CAB7C0 CAB9A0 80B31D90 effects
372 ovl_Effect_Ss_G_Fire EC8CB0 EC8F40 CAB9A0 CABB90 80B31FF0 effects
373 ovl_Effect_Ss_Lightning EC8F40 EC9610 CABB90 CAC0C0 80B32280 effects
374 ovl_Effect_Ss_Dt_Bubble EC9610 EC9BA0 CAC0C0 CAC4C0 80B32950 effects
375 ovl_Effect_Ss_Hahen EC9BA0 ECA1E0 CAC4C0 CAC8E0 80B32EE0 effects
376 ovl_Effect_Ss_Stick ECA1E0 ECA580 CAC8E0 CACB90 80B33520 effects
377 ovl_Effect_Ss_Sibuki ECA580 ECAC50 CACB90 CAD080 80B338C0 effects
378 ovl_Effect_Ss_Sibuki2 ECAC50 ECAF80 CAD080 CAD300 80B33F90 effects
379 ovl_Effect_Ss_G_Magma2 ECAF80 ECB490 CAD300 CAD6E0 80B342C0 effects
380 ovl_Effect_Ss_Stone1 ECB490 ECB810 CAD6E0 CAD990 80B347D0 effects
381 ovl_Effect_Ss_HitMark ECB810 ECBD60 CAD990 CADD60 80B34B50 effects
382 ovl_Effect_Ss_Fhg_Flash ECBD60 ECCCE0 CADD60 CAE5E0 80B350A0 effects
383 ovl_Effect_Ss_K_Fire ECCCE0 ECD120 CAE5E0 CAE930 80B36020 effects
384 ovl_Effect_Ss_Solder_Srch_Ball ECD120 ECD2D0 CAE930 CAEA90 80B36460 effects
385 ovl_Effect_Ss_Kakera ECD2D0 ECE360 CAEA90 CAF4C0 80B36610 effects
386 ovl_Effect_Ss_Ice_Piece ECE360 ECE7A0 CAF4C0 CAF810 80B376A0 effects
387 ovl_Effect_Ss_En_Ice ECE7A0 ECF060 CAF810 CAFE60 80B37AE0 effects
388 ovl_Effect_Ss_Fire_Tail ECF060 ECF760 CAFE60 CB0390 80B383A0 effects
389 ovl_Effect_Ss_En_Fire ECF760 ECFEB0 CB0390 CB08F0 80B38AA0 effects
390 ovl_Effect_Ss_Extra ECFEB0 ED0270 CB08F0 CB0BE0 80B391F0 effects
391 ovl_Effect_Ss_Fcircle ED0270 ED0720 CB0BE0 CB0F80 80B395B0 effects
392 ovl_Effect_Ss_Dead_Db ED0720 ED0C00 CB0F80 CB1360 80B39A60 effects
393 ovl_Effect_Ss_Dead_Dd ED0C00 ED1190 CB1360 CB1780 80B39F40 effects
394 ovl_Effect_Ss_Dead_Ds ED1190 ED1610 CB1780 CB1AF0 80B3A4D0 effects
395 ovl_Effect_Ss_Dead_Sound ED1610 ED1750 CB1AF0 CB1C00 80B3A950 effects
396 ovl_Oceff_Storm ED1750 ED3300 CB1C00 CB33A0 80B3AA90 actors
397 ovl_En_Weiyer ED3300 ED4D00 CB33A0 CB4250 80B3C640 actors
398 ovl_Bg_Spot05_Soko ED4D00 ED5020 CB4250 CB4480 80B3E040 actors
399 ovl_Bg_Jya_1flift ED5020 ED56B0 CB4480 CB48B0 80B3E360 actors
400 ovl_Bg_Jya_Haheniron ED56B0 ED5EA0 CB48B0 CB4E10 80B3E9F0 actors
401 ovl_Bg_Spot12_Gate ED5EA0 ED62B0 CB4E10 CB50C0 80B3F1E0 actors
402 ovl_Bg_Spot12_Saku ED62B0 ED6770 CB50C0 CB53F0 80B3F5F0 actors
403 ovl_En_Hintnuts ED6770 ED81A0 CB53F0 CB62E0 80B3FAB0 actors
404 ovl_En_Nutsball ED81A0 ED87C0 CB62E0 CB6760 80B414E0 actors
405 ovl_Bg_Spot00_Break ED87C0 ED8960 CB6760 CB68A0 80B41B00 actors
406 ovl_En_Shopnuts ED8960 ED9870 CB68A0 CB7170 80B41CA0 actors
407 ovl_En_It ED9870 ED9A00 CB7170 CB7280 80B42BB0 actors
408 ovl_En_GeldB ED9A00 EDEDB0 CB7280 CB9DA0 80B42D40 actors
409 ovl_Oceff_Wipe2 EDEDB0 EE0520 CB9DA0 CBA9E0 80B480F0 actors
410 ovl_Oceff_Wipe3 EE0520 EE1C70 CBA9E0 CBBA20 80B49860 actors
411 ovl_En_Niw_Girl EE1C70 EE2740 CBBA20 CBC1D0 80B4AFB0 actors
412 ovl_En_Dog EE2740 EE38F0 CBC1D0 CBCC50 80B4BA80 actors
413 ovl_En_Si EE38F0 EE3DF0 CBCC50 CBCFC0 80B4CC30 actors
414 ovl_Bg_Spot01_Objects2 EE3DF0 EE42B0 CBCFC0 CBD330 80B4D130 actors
415 ovl_Obj_Comb EE42B0 EE4B10 CBD330 CBD940 80B4D5F0 actors
416 ovl_Bg_Spot11_Bakudankabe EE4B10 EE5150 CBD940 CBDDB0 80B4DE50 actors
417 ovl_Obj_Kibako2 EE5150 EE5810 CBDDB0 CBE260 80B4E490 actors
418 ovl_En_Dnt_Demo EE5810 EE6530 CBE260 CBEB10 80B4EB50 actors
419 ovl_En_Dnt_Jiji EE6530 EE7A50 CBEB10 CBF5F0 80B4F870 actors
420 ovl_En_Dnt_Nomal EE7A50 EEA850 CBF5F0 CC0D90 80B50D90 actors
421 ovl_En_Guest EEA850 EEB1F0 CC0D90 CC1440 80B53B90 actors
422 ovl_Bg_Bom_Guard EEB1F0 EEB410 CC1440 CC15F0 80B54530 actors
423 ovl_En_Hs2 EEB410 EEB9F0 CC15F0 CC19F0 80B54750 actors
424 ovl_Demo_Kekkai EEB9F0 EECCE0 CC19F0 CC2630 80B54D30 actors
425 ovl_Bg_Spot08_Bakudankabe EECCE0 EED380 CC2630 CC2AE0 80B56020 actors
426 ovl_Bg_Spot17_Bakudankabe EED380 EEDA70 CC2AE0 CC2FC0 80B566C0 actors
427 ovl_Obj_Mure3 EEDA70 EEE240 CC2FC0 CC34F0 80B56DB0 actors
428 ovl_En_Tg EEE240 EEE920 CC34F0 CC39A0 80B57580 actors
429 ovl_En_Mu EEE920 EEF240 CC39A0 CC4000 80B57C60 actors
430 ovl_En_Go2 EEF240 EF5280 CC4000 CC7460 80B58580 actors
431 ovl_En_Wf EF5280 EF9590 CC7460 CC97F0 80B5E5C0 actors
432 ovl_En_Skb EF9590 EFAE80 CC97F0 CCA720 80B628D0 actors
433 ovl_Demo_Gj EFAE80 EFEB30 CCA720 CCBEA0 80B641C0 actors
434 ovl_Demo_Geff EFEB30 EFF350 CCBEA0 CCC380 80B67E70 actors
435 ovl_Bg_Gnd_Firemeiro EFF350 EFF8A0 CCC380 CCC720 80B68690 actors
436 ovl_Bg_Gnd_Darkmeiro EFF8A0 F00060 CCC720 CCCC00 80B68BE0 actors
437 ovl_Bg_Gnd_Soulmeiro F00060 F008C0 CCCC00 CCD1D0 80B693A0 actors
438 ovl_Bg_Gnd_Nisekabe F008C0 F00A30 CCD1D0 CCD2F0 80B69C00 actors
439 ovl_Bg_Gnd_Iceblock F00A30 F01B20 CCD2F0 CCDC00 80B69D70 actors
440 ovl_Bg_Ydan_Sp F01B20 F03240 CCDC00 CCEA50 80B6AE70 actors
441 ovl_En_Gb F03240 F04970 CCEA50 CCF8E0 80B6C590 actors
442 ovl_En_Gs F04970 F067E0 CCF8E0 CD0BD0 80B6DCC0 actors
443 ovl_Bg_Mizu_Bwall F067E0 F07CB0 CD0BD0 CD1780 80B6FB30 actors
444 ovl_Bg_Mizu_Shutter F07CB0 F084B0 CD1780 CD1CB0 80B71000 actors
445 ovl_En_Daiku_Kakariko F084B0 F09870 CD1CB0 CD2940 80B71800 actors
446 ovl_Bg_Bowl_Wall F09870 F0A1F0 CD2940 CD3000 80B72BC0 actors
447 ovl_En_Wall_Tubo F0A1F0 F0A6E0 CD3000 CD3370 80B73540 actors
448 ovl_En_Po_Desert F0A6E0 F0B4A0 CD3370 CD3CD0 80B73A30 actors
449 ovl_En_Crow F0B4A0 F0CB40 CD3CD0 CD4B00 80B747F0 actors
450 ovl_Door_Killer F0CB40 F0E0B0 CD4B00 CD58C0 80B75E90 actors
451 ovl_Bg_Spot11_Oasis F0E0B0 F0E7E0 CD58C0 CD5DE0 80B77400 actors
452 ovl_Bg_Spot18_Futa F0E7E0 F0E980 CD5DE0 CD5F20 80B77B30 actors
453 ovl_Bg_Spot18_Shutter F0E980 F0EED0 CD5F20 CD62A0 80B77CD0 actors
454 ovl_En_Ma3 F0EED0 F0FE80 CD62A0 CD6CA0 80B78220 actors
455 ovl_En_Cow F0FE80 F112E0 CD6CA0 CD77D0 80B791D0 actors
456 ovl_Bg_Ice_Turara F112E0 F11B10 CD77D0 CD7D70 80B7A630 actors
457 ovl_Bg_Ice_Shutter F11B10 F11F80 CD7D70 CD8040 80B7AE60 actors
458 ovl_En_Kakasi2 F11F80 F126A0 CD8040 CD84E0 80B7B2D0 actors
459 ovl_En_Kakasi3 F126A0 F13780 CD84E0 CD8F40 80B7B9F0 actors
460 ovl_Oceff_Wipe4 F13780 F14760 CD8F40 CD9970 80B7CAD0 actors
461 ovl_En_Eg F14760 F14910 CD9970 CD9AB0 80B7DAB0 actors
462 ovl_Bg_Menkuri_Nisekabe F14910 F14A60 CD9AB0 CD9BB0 80B7DC60 actors
463 ovl_En_Zo F14A60 F17020 CD9BB0 CDB1A0 80B7DDB0 actors
464 ovl_Effect_Ss_Ice_Smoke F17020 F17500 CDB1A0 CDB530 80B80370 effects
465 ovl_Obj_Makekinsuta F17500 F17650 CDB530 CDB650 80B80850 actors
466 ovl_En_Ge3 F17650 F18290 CDB650 CDBDE0 80B809A0 actors
467 ovl_Obj_Timeblock F18290 F18EE0 CDBDE0 CDC570 80B815E0 actors
468 ovl_Obj_Hamishi F18EE0 F19730 CDC570 CDCB40 80B82230 actors
469 ovl_En_Zl4 F19730 F1E160 CDCB40 CDEB30 80B82A80 actors
470 ovl_En_Mm2 F1E160 F1EF20 CDEB30 CDF3F0 80B874B0 actors
471 ovl_Bg_Jya_Block F1EF20 F1F190 CDF3F0 CDF5F0 80B88270 actors
472 ovl_Obj_Warp2block F1F190 F1FCC0 CDF5F0 CDFD50 80B884E0 actors

View file

@ -1,141 +0,0 @@
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
1 offset vram .text
2 0 80000450 src/boot/boot_main
3 140 80000590 src/boot/idle
4 390 800007E0 src/boot/viconfig
5 4D0 80000920 src/boot/z_std_dma
6 B50 80000FA0 src/boot/inflate
7 2830 80002C80 src/boot/z_locale
8 2870 80002CC0 src/boot/is_debug_ique
9 2890 80002CE0 src/boot/driverominit
10 2A70 80002EC0 src/boot/mio0
11 2B20 80002F70 src/libu64/stackcheck
12 2D70 800031C0 src/libultra/os/invaldcache
13 2E20 80003270 src/libultra/os/invalicache
14 2EA0 800032F0 src/libultra/libc/bcmp
15 2FB0 80003400 src/libultra/libc/bzero
16 3050 800034A0 src/libultra/os/createmesgqueue
17 30C0 80003510 src/libultra/os/recvmesg
18 3230 80003680 src/libultra/os/sendmesg
19 33A0 800037F0 src/libultra/os/getfpccsr
20 33B0 80003800 src/libultra/os/getsr
21 33C0 80003810 src/libultra/os/setfpccsr
22 33D0 80003820 src/libultra/os/setsr
23 33E0 80003830 src/libultra/os/createthread
24 3550 800039A0 src/libultra/os/setthreadpri
25 3660 80003AB0 src/libultra/os/startthread
26 37F0 80003C40 src/libultra/os/stopthread
27 38E0 80003D30 src/libultra/os/thread
28 3940 80003D90 src/libultra/os/gettime
29 39F0 80003E40 src/libultra/os/timerintr
30 3F10 80004360 src/libultra/io/vigetnextframebuf
31 3F50 800043A0 src/libultra/io/vimgr
32 4250 800046A0 src/libultra/io/visetmode
33 42D0 80004720 src/libultra/io/visetspecial
34 4450 800048A0 src/libultra/io/visetxscale
35 4510 80004960 src/libultra/io/visetyscale
36 4560 800049B0 src/libultra/io/viswapbuf
37 45B0 80004A00 src/libultra/io/viswapcontext
38 48C0 80004D10 src/libultra/io/viblack
39 4920 80004D70 src/libultra/io/viextendvstart
40 4930 80004D80 src/libultra/os/exceptasm
41 53B0 80005800 src/libultra/os/interrupt
42 5440 80005890 src/libultra/os/setintmask
43 54F0 80005940 src/libultra/os/sethwintrroutine
44 5580 800059D0 src/libultra/os/gethwintrroutine
45 55F0 80005A40 src/libultra/io/pimgr
46 5770 80005BC0 src/libultra/io/epirawdma
47 5B30 80005F80 src/libultra/io/epiread
48 5B90 80005FE0 src/libultra/io/epidma
49 5C30 80006080 src/libultra/io/cartrominit
50 5D90 800061E0 src/libultra/io/devmgr
51 6230 80006680 src/libultra/io/piacs
52 62F0 80006740 src/libultra/os/parameters
53 6360 800067B0 src/libultra/os/getmemsize
54 6390 800067E0 src/libultra/os/initialize
55 6920 80006D70 src/libultra/os/writebackdcache
56 69A0 80006DF0 src/libultra/os/virtualtophysical
57 6A70 80006EC0 src/libultra/libc/bcopy
58 6D90 800071E0 src/libultra/os/jammesg
59 6F10 80007360 src/libultra/os/seteventmesg
60 6FE0 80007430 src/libultra/os/getcause
61 6FF0 80007440 src/libultra/os/setwatchlo
62 7000 80007450 src/libultra/reg/_getcount
63 7100 80007550 src/libultra/reg/_setcompare
64 71B0 80007600 src/libultra/io/sirawread
65 7200 80007650 src/libultra/io/sirawwrite
66 7250 800076A0 src/libultra/os/destroythread
67 7380 800077D0 src/libultra/os/getthreadpri
68 73D0 80007820 src/libultra/os/yieldthread
69 7430 80007880 src/libultra/os/probetlb
70 74F0 80007940 src/libultra/os/maptlbrdb
71 7550 800079A0 src/libultra/os/unmaptlball
72 75A0 800079F0 src/libultra/io/vi
73 76A0 80007AF0 src/libultra/io/vigetcurrcontext
74 76B0 80007B00 src/libultra/os/setglobalintmask
75 7710 80007B60 src/libultra/os/resetglobalintmask
76 7780 80007BD0 src/libultra/io/pirawdma
77 7860 80007CB0 src/libultra/io/pigetcmdq
78 7890 80007CE0 src/libultra/io/epirawread
79 7A10 80007E60 src/libultra/io/epirawwrite
80 7B90 80007FE0 src/libultra/io/si
81 7BC0 80008010 src/libgcc/__divdi3
82 81A0 800085F0 src/libgcc/__moddi3
83 8730 80008B80 src/libgcc/__udivdi3
84 8CA0 800090F0 src/libgcc/__umoddi3
85 91B0 80009600 src/libgcc/__cmpdi2
86 9200 80009650 src/libgcc/__floatdidf
87 9250 800096A0 src/libgcc/__floatdisf
88 9310 80009760 src/libgcc/__fixunsdfdi
89 9510 80009960 src/libgcc/__fixdfdi
90 9580 800099D0 src/libgcc/__fixunssfdi
91 9780 80009BD0 src/libgcc/__fixsfdi
92 97E0 80009C30 data/rsp_boot
93 offset vram .data
94 98D0 80009D20 src/boot/idle
95 98F0 80009D40 src/boot/viconfig
96 9910 80009D60 src/boot/carthandle
97 9920 80009D70 src/boot/z_std_dma
98 9930 80009D80 src/boot/inflate
99 9AB0 80009F00 src/boot/z_locale
100 9AC0 80009F10 src/boot/driverominit
101 9AD0 80009F20 src/libu64/stackcheck
102 9AE0 80009F30 src/libultra/os/thread
103 9B00 80009F50 src/libultra/os/timerintr
104 9B10 80009F60 src/libultra/io/vimgr
105 9B30 80009F80 src/libultra/io/vimodentsclan1
106 9B80 80009FD0 src/libultra/io/vimodepallan1
107 9BD0 8000A020 src/libultra/io/vimodempallan1
108 9C20 8000A070 src/libultra/os/exceptasm
109 9C50 8000A0A0 src/libultra/io/pimgr
110 9C80 8000A0D0 src/libultra/io/cartrominit
111 9C90 8000A0E0 src/libultra/io/piacs
112 9CA0 8000A0F0 src/libultra/os/initialize
113 9CC0 8000A110 src/libultra/os/seteventmesg
114 9CD0 8000A120 src/libultra/io/vi
115 offset vram .rodata
116 9D40 8000A190 src/boot/boot_main
117 9D50 8000A1A0 src/boot/idle
118 9FA0 8000A3F0 src/boot/z_std_dma
119 A210 8000A660 src/libu64/stackcheck
120 A220 8000A670 src/libultra/os/exceptasm
121 A270 8000A6C0 src/libultra/os/setintmask
122 A2F0 8000A740 src/libultra/io/devmgr
123 A310 8000A760 src/libgcc/__divdi3
124 A410 8000A860 src/libgcc/__moddi3
125 A510 8000A960 src/libgcc/__udivdi3
126 A610 8000AA60 src/libgcc/__umoddi3
127 A710 8000AA70 src/boot/build
128 offset vram .bss
129 A750 8000ABA0 data/boot_common_8000ABA0
130 A7A0 8000ABF0 src/boot/boot_main
131 B190 8000B5E0 src/boot/idle
132 BD90 8000C1E0 src/boot/z_std_dma
133 C500 8000C950 src/boot/inflate
134 10310 80010760 src/boot/driverominit
135 10390 800107E0 src/libultra/io/vimgr
136 115B0 80011A00 src/libultra/io/pimgr
137 12940 80012D90 data/boot_common_80012D90
138 12BF0 80013040 .end

View file

@ -1,528 +0,0 @@
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
1 offset vram .text
2 0 80018FA0 src/code/z_en_a_keep
3 AA0 80019A40 src/code/z_en_item00
4 2EA0 8001BE40 src/code/z_eff_blure
5 62D0 8001F270 src/code/z_eff_shield_particle
6 7930 800208D0 src/code/z_eff_spark
7 8FE0 80021F80 src/code/z_eff_ss_dead
8 9790 80022730 src/code/z_effect
9 9F10 80022EB0 src/code/z_effect_soft_sprite
10 A9B0 80023950 src/code/z_effect_soft_sprite_old_init
11 D4D0 80026470 src/code/flg_set
12 D8F0 80026890 src/code/z_DLF
13 DB40 80026AE0 src/code/z_actor
14 18ED0 80031E70 src/code/z_actor_dlftbls
15 19020 80031FC0 src/code/z_bgcheck
16 22C00 8003BBA0 src/code/z_bg_collect
17 22F20 8003BEC0 src/code/z_bg_item
18 232B0 8003C250 src/code/z_camera
19 378E0 80050880 src/code/z_collision_btltbls
20 37940 800508E0 src/code/z_collision_check
21 3F5C0 80058560 src/code/z_common_data
22 3F670 80058610 src/code/z_debug
23 3F980 80058920 src/code/z_debug_display
24 3FE40 80058DE0 src/code/z_demo
25 44B20 8005DAC0 src/code/z_memory_utils
26 44BB0 8005DB50 src/code/z_draw
27 46AB0 8005FA50 src/code/z_sfx_source
28 46C70 8005FC10 src/code/z_elf_message
29 47350 800602F0 src/code/z_face_reaction
30 473A0 80060340 src/code/z_env_flags
31 47520 800604C0 src/code/z_fcurve_data
32 47760 80060700 src/code/z_fcurve_data_skelanime
33 47F70 80060F10 src/code/z_horse
34 48C50 80061BF0 src/code/z_jpeg
35 49410 800623B0 src/code/z_kaleido_setup
36 497E0 80062780 src/code/z_kanfont
37 499E0 80062980 src/code/z_kankyo
38 511F0 8006A190 src/code/z_lib
39 52390 8006B330 src/code/z_lifemeter
40 53730 8006C6D0 src/code/z_lights
41 547D0 8006D770 src/code/z_malloc
42 549B0 8006D950 src/code/z_map_mark
43 54FB0 8006DF50 src/code/z_prenmi_buff
44 55070 8006E010 src/code/z_nulltask
45 550F0 8006E090 src/code/z_olib
46 557E0 8006E780 src/code/z_onepointdemo
47 59780 80072720 src/code/z_map_exp
48 5B320 800742C0 src/code/z_parameter
49 66080 8007F020 src/code/z_path
50 66250 8007F1F0 src/code/z_frame_advance
51 66300 8007F2A0 src/code/z_player_lib
52 69D70 80082D10 src/code/z_prenmi
53 69F10 80082EB0 src/code/z_quake
54 6AD80 80083D20 src/code/z_rcp
55 6C640 800855E0 src/code/z_room
56 6DE30 80086DD0 src/code/z_sample
57 6E230 800871D0 src/code/z_inventory
58 6E3F0 80087390 src/code/z_scene
59 6F8A0 80088840 src/code/z_scene_table
60 760A0 8008F040 src/code/z_skelanime
61 7AA90 80093A30 src/code/z_skin
62 7B630 800945D0 src/code/z_skin_awb
63 7BF40 80094EE0 src/code/z_skin_matrix
64 7D2E0 80096280 src/code/z_sram
65 7E690 80097630 src/code/z_ss_sram
66 7E860 80097800 src/code/z_rumble
67 7EAE0 80097A80 src/code/z_view
68 801E0 80099180 src/code/z_vimode
69 80D50 80099CF0 src/code/z_viscvg
70 80EF0 80099E90 src/code/z_vismono
71 81710 8009A6B0 src/code/z_viszbuf
72 819A0 8009A940 src/code/z_vr_box
73 84270 8009D210 src/code/z_vr_box_draw
74 84950 8009D8F0 src/code/z_player_call
75 84AC0 8009DA60 src/code/z_fbdemo
76 854E0 8009E480 src/code/z_fbdemo_triforce
77 85AA0 8009EA40 src/code/z_fbdemo_wipe1
78 85F10 8009EEB0 src/code/z_fbdemo_circle
79 865D0 8009F570 src/code/z_fbdemo_fade
80 86930 8009F8D0 src/code/shrink_window
81 86AA0 8009FA40 src/code/z_cutscene_spline
82 86F70 8009FF10 src/code/z_kaleido_manager
83 871A0 800A0140 src/code/z_kaleido_scope_call
84 87480 800A0420 src/code/z_play
85 8AEA0 800A3E40 src/code/PreRender
86 8CF90 800A5F30 src/code/TwoHeadGfxArena
87 8D1A0 800A6140 src/code/TwoHeadArena
88 8D360 800A6300 src/code/audio_stop_all_sfx
89 8D3B0 800A6350 src/code/audio_thread_manager
90 8D7C0 800A6760 src/code/title_setup
91 8D830 800A67D0 src/code/game
92 8DFB0 800A6F50 src/code/gamealloc
93 8E0F0 800A7090 src/code/graph
94 8EA90 800A7A30 src/code/gfxalloc
95 8EAF0 800A7A90 src/code/listalloc
96 8EC40 800A7BE0 src/code/main
97 8EFA0 800A7F40 src/code/padmgr
98 8FAA0 800A8A40 src/code/sched
99 90720 800A96C0 src/code/speed_meter
100 91160 800AA100 src/code/sys_cfb
101 91280 800AA220 src/code/sys_math
102 91520 800AA4C0 src/code/sys_math3d
103 972F0 800B0290 src/code/sys_math_atan
104 97520 800B04C0 src/code/sys_matrix
105 99920 800B28C0 src/code/sys_ucode
106 99970 800B2910 src/code/sys_rumble
107 99CD0 800B2C70 src/code/sys_freeze
108 99D00 800B2CA0 src/code/irqmgr
109 9A320 800B32C0 src/code/fault_gc
110 9CB70 800B5B10 src/code/fault_gc_drawer
111 9D5F0 800B6590 src/code/kanread
112 9E0E0 800B7080 src/audio/lib/synthesis
113 A1240 800BA1E0 src/audio/lib/heap
114 A4610 800BD5B0 src/audio/lib/load
115 A8400 800C13A0 src/audio/lib/thread
116 A9C60 800C2C00 src/audio/lib/dcache
117 A9CE0 800C2C80 src/audio/lib/aisetnextbuf
118 A9D60 800C2D00 src/audio/lib/playback
119 ABCE0 800C4C80 src/audio/lib/effects
120 AC760 800C5700 src/audio/lib/seqplayer
121 AFD80 800C8D20 src/audio/general
122 B5F10 800CEEB0 src/audio/sfx
123 B7D70 800D0D10 src/audio/sequence
124 B9990 800D2930 src/libu64/system_heap
125 B9CD0 800D2C70 src/libu64/debug
126 B9D30 800D2CD0 src/libu64/gfxprint
127 BAAA0 800D3A40 src/libu64/relocation_gc
128 BACE0 800D3C80 src/libu64/loadfragment2_gc
129 BAD40 800D3CE0 src/libu64/load_gc
130 BAE10 800D3DB0 src/libu64/padsetup
131 BAF50 800D3EF0 src/libu64/pad
132 BB140 800D40E0 src/libu64/rcp_utils
133 BB1A0 800D4140 src/libc64/__osMalloc_gc
134 BBF50 800D4EF0 src/libc64/aprintf
135 BBFB0 800D4F50 src/libc64/malloc
136 BC180 800D5120 src/libc64/math64
137 BC690 800D5630 src/libc64/fp
138 BC7F0 800D5790 src/libc64/qrand
139 BC9B0 800D5950 src/libc64/sleep
140 BCB50 800D5AF0 src/libc64/sprintf
141 BCC20 800D5BC0 src/code/jpegutils
142 BD130 800D60D0 src/code/jpegdecoder
143 BD720 800D66C0 src/libultra/io/aigetlen
144 BD730 800D66D0 src/libultra/io/aisetfreq
145 BD830 800D67D0 src/libultra/audio/sl
146 BD8E0 800D6880 src/libultra/audio/synthesizer
147 BDF50 800D6EF0 src/libultra/audio/syndelete
148 BDF60 800D6F00 src/libultra/audio/synallocfx
149 BE000 800D6FA0 src/libultra/os/writebackdcacheall
150 BE030 800D6FD0 src/libultra/io/contquery
151 BE0E0 800D7080 src/libultra/io/contreaddata
152 BE360 800D7300 src/libultra/io/controller
153 BE730 800D76D0 src/libultra/io/contsetch
154 BE790 800D7730 src/libultra/gu/sqrtf
155 BE7A0 800D7740 src/libultra/gu/cosf
156 BE8D0 800D7870 src/libultra/gu/coss
157 BE8F0 800D7890 src/libultra/gu/lookat
158 BEC20 800D7BC0 src/libultra/gu/lookathil
159 BF4F0 800D8490 src/libultra/gu/ortho
160 BF660 800D8600 src/libultra/gu/perspective
161 BF860 800D8800 src/libultra/gu/position
162 BFA40 800D89E0 src/libultra/gu/sinf
163 BFBC0 800D8B60 src/libultra/gu/sins
164 BFC10 800D8BB0 src/libultra/gu/us2dex
165 BFD30 800D8CD0 src/libultra/libc/ll
166 C02B0 800D9250 src/libultra/libc/llcvt
167 C05C0 800D9560 src/libultra/libc/string
168 C0640 800D95E0 src/libultra/libc/xprintf
169 C1020 800D9FC0 src/libultra/io/dpgetstat
170 C1030 800D9FD0 src/libultra/io/dpsetstat
171 C1040 800D9FE0 src/libultra/io/spgetstat
172 C1050 800D9FF0 src/libultra/io/spsetstat
173 C1060 800DA000 src/libultra/io/sptask
174 C1270 800DA210 src/libultra/io/sptaskyield
175 C1290 800DA230 src/libultra/io/sptaskyielded
176 C12E0 800DA280 src/libultra/io/sirawdma
177 C13C0 800DA360 src/libultra/io/siacs
178 C1480 800DA420 src/libultra/os/getthreadid
179 C14D0 800DA470 src/libultra/os/getactivequeue
180 C1500 800DA4A0 src/libultra/os/settimer
181 C16C0 800DA660 src/libultra/os/stoptimer
182 C17E0 800DA780 src/libultra/io/vigetcurrframebuf
183 C1820 800DA7C0 src/libultra/io/visetevent
184 C1880 800DA820 src/libultra/mgu/mtxident
185 C18E0 800DA880 src/libultra/mgu/mtxidentf
186 C1940 800DA8E0 src/libultra/mgu/mtxf2l
187 C19C0 800DA960 src/libultra/mgu/scale
188 C1A60 800DAA00 src/libultra/mgu/translate
189 C1B30 800DAAD0 src/libultra/gu/rotate
190 C1CC0 800DAC60 src/libultra/os/getcurrfaultedthread
191 C1CF0 800DAC90 src/libultra/bb/sk/skapi
192 C1F40 800DAEE0 src/libultra/bb/sa/common
193 C2030 800DAFD0 src/libultra/io/motor
194 C2040 800DAFE0 src/libultra/os/afterprenmi
195 C2080 800DB020 src/libultra/audio/drvrnew
196 C2830 800DB7D0 src/libultra/audio/load
197 C32C0 800DC260 src/libultra/audio/auxbus
198 C33D0 800DC370 src/libultra/audio/env
199 C3F40 800DCEE0 src/libultra/audio/filter
200 C3F60 800DCF00 src/libultra/audio/mainbus
201 C40D0 800DD070 src/libultra/audio/resample
202 C4370 800DD310 src/libultra/audio/reverb
203 C4EE0 800DDE80 src/libultra/audio/save
204 C4FC0 800DDF60 src/libultra/audio/heapalloc
205 C5010 800DDFB0 src/libultra/audio/copy
206 C5040 800DDFE0 src/libultra/libc/xlitob
207 C5270 800DE210 src/libultra/libc/xldtob
208 C5C70 800DEC10 src/libultra/io/sp
209 C5CA0 800DEC40 src/libultra/io/spsetpc
210 C5CD0 800DEC70 src/libultra/io/sprawdma
211 C5D60 800DED00 src/libultra/mgu/normalize
212 C5DC0 800DED60 src/libultra/libc/ldiv
213 C5F80 800DEF20 src/libc/fmodf
214 C5FC0 800DEF60 src/libc/memmove
215 C6050 800DEFF0 src/libc/absf
216 C6060 800DF000 src/libc/sqrt
217 C6070 800DF010 src/code/z_message_z_game_over
218 D20D0 800EB070 src/code/z_construct
219 D2FD0 800EBF70 data/rsp.text
220 offset vram .data
221 D6330 800EF2D0 src/code/z_en_a_keep
222 D63D0 800EF370 src/code/z_en_item00
223 D6670 800EF610 src/code/z_eff_blure
224 D6720 800EF6C0 src/code/z_eff_shield_particle
225 D6770 800EF710 src/code/z_effect
226 D67C0 800EF760 src/code/z_effect_soft_sprite
227 D67D0 800EF770 src/code/z_effect_soft_sprite_old_init
228 D68C0 800EF860 src/code/z_effect_soft_sprite_dlftbls
229 D6CD0 800EFC70 src/code/flg_set
230 D6E90 800EFE30 src/code/z_actor
231 D7180 800F0120 src/code/z_actor_dlftbls
232 DAC70 800F3C10 src/code/z_bgcheck
233 DADC0 800F3D60 src/code/z_camera
234 DE310 800F72B0 src/code/z_collision_btltbls
235 DE5F0 800F7590 src/code/z_collision_check
236 DE8A0 800F7840 src/code/z_debug
237 DE8D0 800F7870 src/code/z_debug_display
238 DE920 800F78C0 src/code/z_demo
239 DEA80 800F7A20 src/code/z_draw
240 DFB00 800F8AA0 src/code/z_elf_message
241 DFB50 800F8AF0 src/code/z_face_reaction
242 DFF90 800F8F30 src/code/z_game_dlftbls
243 E00B0 800F9050 src/code/z_horse
244 E01C0 800F9160 src/code/z_jpeg
245 E0200 800F91A0 src/code/z_kaleido_setup
246 E0250 800F91F0 src/code/z_kankyo
247 E0640 800F95E0 src/code/z_lib
248 E0670 800F9610 src/code/z_lifemeter
249 E0790 800F9730 src/code/z_lights
250 E07A0 800F9740 src/code/z_map_mark
251 E0860 800F9800 src/code/z_onepointdemo
252 E4180 800FD120 src/code/z_map_exp
253 E41A0 800FD140 src/code/z_map_data
254 E5FA0 800FEF40 src/code/z_parameter
255 E6280 800FF220 src/code/z_player_lib
256 E6960 800FF900 src/code/z_quake
257 E6990 800FF930 src/code/z_rcp
258 E77B0 80100750 src/code/z_room
259 E7830 801007D0 src/code/z_inventory
260 E7BB0 80100B50 src/code/z_scene
261 E7C30 80100BD0 src/code/object_table
262 E88D0 80101870 src/code/z_scene_table
263 EAAE0 80103A80 src/code/z_skelanime
264 EAB00 80103AA0 src/code/z_skin_matrix
265 EAB40 80103AE0 src/code/z_sram
266 EACF0 80103C90 src/code/z_ss_sram
267 EADA0 80103D40 data/unk_8012ABC0.data
268 EADD0 80103D70 src/code/z_view
269 EADE0 80103D80 src/code/z_viscvg
270 EAE70 80103E10 src/code/z_vr_box
271 EB170 80104110 src/code/z_player_call
272 EB190 80104130 src/code/z_fbdemo
273 EB210 801041B0 src/code/z_fbdemo_triforce
274 EB2E0 80104280 src/code/z_fbdemo_wipe1
275 EBD80 80104D20 src/code/z_fbdemo_circle
276 ED080 80106020 src/code/z_fbdemo_fade
277 ED0B0 80106050 src/code/shrink_window
278 ED0C0 80106060 src/code/z_kaleido_manager
279 ED110 801060B0 src/code/z_play
280 ED120 801060C0 src/code/audio_stop_all_sfx
281 ED130 801060D0 src/code/graph
282 ED140 801060E0 src/code/main
283 ED150 801060F0 src/code/padmgr
284 ED160 80106100 src/code/speed_meter
285 ED190 80106130 src/code/sys_math
286 ED1D0 80106170 src/code/sys_math_atan
287 ED9E0 80106980 src/code/sys_matrix
288 EDA60 80106A00 src/code/sys_ucode
289 EDA70 80106A10 src/code/sys_rumble
290 EDA80 80106A20 src/code/irqmgr
291 EDAA0 80106A40 src/code/fault_gc
292 EDB00 80106AA0 src/code/fault_gc_drawer
293 EDB40 80106AE0 src/audio/lib/data
294 EFF50 80108EF0 src/audio/lib/synthesis
295 EFF80 80108F20 src/audio/lib/load
296 EFF90 80108F30 src/audio/lib/thread
297 EFFB0 80108F50 src/audio/lib/aisetnextbuf
298 EFFC0 80108F60 src/audio/lib/effects
299 EFFD0 80108F70 src/audio/lib/seqplayer
300 F0020 80108FC0 src/audio/general
301 F1740 8010A6E0 src/audio/sfx_params
302 F2B10 8010BAB0 src/audio/data
303 F2B80 8010BB20 src/audio/session_config
304 F3320 8010C2C0 src/libu64/system_heap
305 F3330 8010C2D0 src/libu64/gfxprint
306 F3BE0 8010CB80 src/libu64/logseverity_gc
307 F3BF0 8010CB90 src/libc64/__osMalloc_gc
308 F3C00 8010CBA0 src/libc64/fp
309 F3C20 8010CBC0 src/libc64/qrand
310 F3C30 8010CBD0 src/libultra/audio/sl
311 F3C40 8010CBE0 src/libultra/io/controller
312 F3C50 8010CBF0 src/libultra/gu/position
313 F3C60 8010CC00 src/libultra/gu/sins
314 F4460 8010D400 src/libultra/libc/xprintf
315 F44B0 8010D450 src/libultra/io/siacs
316 F44C0 8010D460 src/libultra/io/vitbl
317 F5640 8010E5E0 src/libultra/io/vimodentsclpn1
318 F5690 8010E630 src/libultra/io/vimodentsclpf1
319 F56E0 8010E680 src/libultra/io/vimodentsclaf1
320 F5730 8010E6D0 src/libultra/io/vimodentsclpn2
321 F5780 8010E720 src/libultra/io/vimodentsclpf2
322 F57D0 8010E770 src/libultra/io/vimodentsclan2
323 F5820 8010E7C0 src/libultra/io/vimodentsclaf2
324 F5870 8010E810 src/libultra/io/vimodentschpn1
325 F58C0 8010E860 src/libultra/io/vimodentschpf1
326 F5910 8010E8B0 src/libultra/io/vimodentschan1
327 F5960 8010E900 src/libultra/io/vimodentschaf1
328 F59B0 8010E950 src/libultra/io/vimodentschpn2
329 F5A00 8010E9A0 src/libultra/io/vimodentschpf2
330 F5A50 8010E9F0 src/libultra/io/vimodepallpn1
331 F5AA0 8010EA40 src/libultra/io/vimodepallpf1
332 F5AF0 8010EA90 src/libultra/io/vimodepallaf1
333 F5B40 8010EAE0 src/libultra/io/vimodepallpn2
334 F5B90 8010EB30 src/libultra/io/vimodepallpf2
335 F5BE0 8010EB80 src/libultra/io/vimodepallan2
336 F5C30 8010EBD0 src/libultra/io/vimodepallaf2
337 F5C80 8010EC20 src/libultra/io/vimodepalhpn1
338 F5CD0 8010EC70 src/libultra/io/vimodepalhpf1
339 F5D20 8010ECC0 src/libultra/io/vimodepalhan1
340 F5D70 8010ED10 src/libultra/io/vimodepalhaf1
341 F5DC0 8010ED60 src/libultra/io/vimodepalhpn2
342 F5E10 8010EDB0 src/libultra/io/vimodepalhpf2
343 F5E60 8010EE00 src/libultra/io/vimodempallpn1
344 F5EB0 8010EE50 src/libultra/io/vimodempallpf1
345 F5F00 8010EEA0 src/libultra/io/vimodempallaf1
346 F5F50 8010EEF0 src/libultra/io/vimodempallpn2
347 F5FA0 8010EF40 src/libultra/io/vimodempallpf2
348 F5FF0 8010EF90 src/libultra/io/vimodempallan2
349 F6040 8010EFE0 src/libultra/io/vimodempallaf2
350 F6090 8010F030 src/libultra/io/vimodempalhpn1
351 F60E0 8010F080 src/libultra/io/vimodempalhpf1
352 F6130 8010F0D0 src/libultra/io/vimodempalhan1
353 F6180 8010F120 src/libultra/io/vimodempalhaf1
354 F61D0 8010F170 src/libultra/io/vimodempalhpn2
355 F6220 8010F1C0 src/libultra/io/vimodempalhpf2
356 F6270 8010F210 src/libultra/io/vimodefpallpn1
357 F62C0 8010F260 src/libultra/io/vimodefpallpf1
358 F6310 8010F2B0 src/libultra/io/vimodefpallan1
359 F6360 8010F300 src/libultra/io/vimodefpallaf1
360 F63B0 8010F350 src/libultra/io/vimodefpallpn2
361 F6400 8010F3A0 src/libultra/io/vimodefpallpf2
362 F6450 8010F3F0 src/libultra/io/vimodefpallan2
363 F64A0 8010F440 src/libultra/io/vimodefpallaf2
364 F64F0 8010F490 src/libultra/io/vimodefpalhpn1
365 F6540 8010F4E0 src/libultra/io/vimodefpalhpf1
366 F6590 8010F530 src/libultra/io/vimodefpalhan1
367 F65E0 8010F580 src/libultra/io/vimodefpalhaf1
368 F6630 8010F5D0 src/libultra/io/vimodefpalhpn2
369 F6680 8010F620 src/libultra/io/vimodefpalhpf2
370 F66D0 8010F670 src/libultra/gu/rotate
371 F66E0 8010F680 src/libultra/audio/drvrnew
372 F6870 8010F810 src/libultra/audio/env
373 F6970 8010F910 src/libultra/libc/xlitob
374 offset vram .rodata
375 F69A0 8010F940 src/code/z_en_a_keep
376 F69F0 8010F990 src/code/z_en_item00
377 F6C60 8010FC00 src/code/z_eff_blure
378 F6C90 8010FC30 src/code/z_eff_shield_particle
379 F6CA0 8010FC40 src/code/z_eff_spark
380 F6CB0 8010FC50 src/code/z_eff_ss_dead
381 F6CC0 8010FC60 src/code/z_effect_soft_sprite_old_init
382 F6CE0 8010FC80 src/code/flg_set
383 F7070 80110010 src/code/z_actor
384 F7790 80110730 src/code/z_actor_dlftbls
385 F77E0 80110780 src/code/z_bgcheck
386 F7880 80110820 src/code/z_bg_item
387 F7890 80110830 src/code/z_camera
388 F8010 80110FB0 src/code/z_collision_check
389 F8060 80111000 src/code/z_debug
390 F8070 80111010 src/code/z_demo
391 F8550 801114F0 src/code/z_draw
392 F8560 80111500 src/code/z_elf_message
393 F8680 80111620 src/code/z_fcurve_data
394 F8690 80111630 src/code/z_fcurve_data_skelanime
395 F86A0 80111640 src/code/z_horse
396 F86B0 80111650 src/code/z_jpeg
397 F8740 801116E0 src/code/z_kanfont
398 F87A0 80111740 src/code/z_kankyo
399 F8850 801117F0 src/code/z_lib
400 F8860 80111800 src/code/z_lifemeter
401 F8880 80111820 src/code/z_lights
402 F8890 80111830 src/code/z_map_mark
403 F88F0 80111890 src/code/z_olib
404 F8910 801118B0 src/code/z_onepointdemo
405 F91D0 80112170 src/code/z_map_exp
406 F94F0 80112490 src/code/z_parameter
407 F9BF0 80112B90 src/code/z_path
408 F9C00 80112BA0 src/code/z_player_lib
409 F9C60 80112C00 src/code/z_quake
410 F9CF0 80112C90 src/code/z_room
411 F9D30 80112CD0 src/code/z_sample
412 F9D40 80112CE0 src/code/z_scene_table
413 F9D80 80112D20 src/code/z_skelanime
414 F9DA0 80112D40 src/code/z_skin
415 F9DB0 80112D50 src/code/z_skin_matrix
416 F9DC0 80112D60 src/code/z_sram
417 FA460 80113400 src/code/z_rumble
418 FA470 80113410 src/code/z_view
419 FA480 80113420 src/code/z_vr_box
420 FA570 80113510 src/code/z_fbdemo_triforce
421 FA580 80113520 src/code/z_fbdemo_wipe1
422 FA590 80113530 src/code/z_fbdemo_circle
423 FA5A0 80113540 src/code/z_cutscene_spline
424 FA5B0 80113550 src/code/z_kaleido_manager
425 FA5D0 80113570 src/code/z_play
426 FA690 80113630 src/code/game
427 FA6B0 80113650 src/code/graph
428 FA700 801136A0 src/code/main
429 FA730 801136D0 src/code/padmgr
430 FA740 801136E0 src/code/sys_cfb
431 FA750 801136F0 src/code/sys_math
432 FA760 80113700 src/code/sys_math3d
433 FA7F0 80113790 src/code/sys_math_atan
434 FA800 801137A0 src/code/sys_matrix
435 FA830 801137D0 src/code/irqmgr
436 FA850 801137F0 src/code/fault_gc
437 FB260 80114200 src/code/fault_gc_drawer
438 FB690 80114630 src/audio/lib/synthesis
439 FB6B0 80114650 src/audio/lib/heap
440 FB6E0 80114680 src/audio/lib/load
441 FB750 801146F0 src/audio/lib/thread
442 FB880 80114820 src/audio/lib/playback
443 FB8B0 80114850 src/audio/lib/effects
444 FB8E0 80114880 src/audio/lib/seqplayer
445 FBF20 80114EC0 src/audio/general
446 FC0B0 80115050 src/audio/sfx
447 FC0D0 80115070 src/audio/sequence
448 FC150 801150F0 src/audio/session_init
449 FC160 80115100 src/libu64/debug
450 FC170 80115110 src/libu64/gfxprint
451 FC190 80115130 src/libc64/__osMalloc_gc
452 FC450 801153F0 src/libc64/math64
453 FC4A0 80115440 src/libultra/audio/synthesizer
454 FC4B0 80115450 src/libultra/gu/cosf
455 FC500 801154A0 src/libultra/gu/lookathil
456 FC510 801154B0 src/libultra/gu/perspective
457 FC520 801154C0 src/libultra/gu/sinf
458 FC570 80115510 src/libultra/libc/xprintf
459 FC6F0 80115690 src/libultra/audio/drvrnew
460 FC710 801156B0 src/libultra/audio/env
461 FC7B0 80115750 src/libultra/audio/resample
462 FC7E0 80115780 src/libultra/audio/reverb
463 FC810 801157B0 src/libultra/gu/libm_vals
464 FC820 801157C0 src/libultra/libc/xldtob
465 FC880 80115820 src/code/z_message_z_game_over
466 106130 8011F0D0 src/code/z_construct
467 1062E0 8011F280 data/audio_tables.rodata
468 106E80 8011FE20 data/rsp.rodata
469 offset vram .bss
470 108FA0 80121F40 data/code_common_80121F40
471 108FC0 80121F60 src/code/z_en_item00
472 108FD0 80121F70 src/code/z_effect
473 10CDC0 80125D60 src/code/flg_set
474 10CDD0 80125D70 src/code/z_actor
475 10CE50 80125DF0 src/code/z_actor_dlftbls
476 10CE60 80125E00 src/code/z_bgcheck
477 10CF80 80125F20 src/code/z_camera
478 10D060 80126000 src/code/z_collision_check
479 10E7C0 80127760 src/code/z_debug
480 10E9E0 80127980 src/code/z_debug_display
481 10E9F0 80127990 src/code/z_demo
482 10EA20 801279C0 src/code/z_kankyo
483 10EAF0 80127A90 src/code/z_lifemeter
484 10EB20 80127AC0 src/code/z_lights
485 10ECB0 80127C50 src/code/z_malloc
486 10ECE0 80127C80 src/code/z_map_mark
487 10ECF0 80127C90 src/code/z_map_exp
488 10ED00 80127CA0 src/code/z_parameter
489 10ED20 80127CC0 src/code/z_player_lib
490 10ED40 80127CE0 src/code/z_quake
491 10EDD0 80127D70 src/code/z_skelanime
492 10EDE0 80127D80 src/code/z_skin
493 10FCF0 80128C90 src/code/z_rumble
494 10FE00 80128DA0 src/code/z_vr_box_draw
495 10FE10 80128DB0 src/code/z_player_call
496 10FE20 80128DC0 src/code/z_kaleido_scope_call
497 10FE40 80128DE0 src/code/z_play
498 10FF50 80128EF0 src/code/game
499 110030 80128FD0 src/code/graph
500 1100A0 80129040 src/code/main
501 113F30 8012CED0 src/code/padmgr
502 113F40 8012CEE0 src/code/sched
503 113F60 8012CF00 src/code/speed_meter
504 113FD0 8012CF70 src/code/sys_cfb
505 113FE0 8012CF80 src/code/sys_math3d
506 114200 8012D1A0 src/code/sys_matrix
507 114210 8012D1B0 src/code/fault_gc
508 115090 8012E030 src/code/fault_gc_drawer
509 1150F0 8012E090 src/audio/lib/load
510 1151B0 8012E150 src/audio/general
511 1153B0 8012E350 src/audio/sfx
512 117BC0 80130B60 src/audio/sequence
513 118980 80131920 src/audio/data
514 118A20 801319C0 src/audio/session_config
515 11EE90 80137E30 src/libu64/gfxprint
516 11EEA0 80137E40 src/libc64/__osMalloc_gc
517 11EEB0 80137E50 src/libc64/malloc
518 11EEE0 80137E80 src/libc64/math64
519 11EEF0 80137E90 src/libc64/qrand
520 11EF00 80137EA0 src/code/jpegdecoder
521 11EF10 80137EB0 src/libultra/io/sptask
522 11EF50 80137EF0 src/libultra/io/siacs
523 11EF60 80137F00 data/code_common_80137F00
524 120420 801393C0 src/code/z_message_z_game_over
525 120440 801393E0 .end

View file

@ -1,23 +0,0 @@
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
1 offset vram .text
2 0 80803700 src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
3 3AE0 808071E0 src/overlays/gamestates/ovl_file_choose/z_file_nameset
4 8F30 8080C630 src/overlays/gamestates/ovl_file_choose/z_file_choose
5 offset vram .data
6 F6E0 80812DE0 src/overlays/gamestates/ovl_file_choose/z_file_nameset_data
7 FDC0 808134C0 src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
8 FE00 80813500 src/overlays/gamestates/ovl_file_choose/z_file_nameset
9 FFA0 808136A0 src/overlays/gamestates/ovl_file_choose/z_file_choose
10 offset vram .rodata
11 10280 80813980 src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
12 102B0 808139B0 src/overlays/gamestates/ovl_file_choose/z_file_nameset
13 102C0 808139C0 src/overlays/gamestates/ovl_file_choose/z_file_choose
14 offset vram .ovl
15 102E0 808139E0 src/overlays/gamestates/ovl_file_choose/ovl_file_choose_reloc
16 offset vram .bss
17 10AD0 808141D0 src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
18 10AE0 808141E0 src/overlays/gamestates/ovl_file_choose/z_file_nameset
19 10AF0 808141F0 .end

View file

@ -1,35 +0,0 @@
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
1C0A0,80830290,.end
1 offset vram .text
2 0 808141F0 src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect
3 2400 808165F0 src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug
4 43B0 808185A0 src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment
5 5E30 8081A020 src/overlays/misc/ovl_kaleido_scope/z_kaleido_item
6 7E20 8081C010 src/overlays/misc/ovl_kaleido_scope/z_kaleido_map
7 B3F0 8081F5E0 src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt
8 B5F0 8081F7E0 src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope
9 149E0 80828BD0 src/overlays/misc/ovl_kaleido_scope/z_lmap_mark
10 offset vram .data
11 150A0 80829290 src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect
12 15250 80829440 src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug
13 15420 80829610 src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment
14 15450 80829640 src/overlays/misc/ovl_kaleido_scope/z_kaleido_item
15 154C0 808296B0 src/overlays/misc/ovl_kaleido_scope/z_kaleido_map
16 15700 808298F0 src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt
17 15710 80829900 src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope
18 160A0 8082A290 src/overlays/misc/ovl_kaleido_scope/z_lmap_mark
19 160F0 8082A2E0 src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data
20 offset vram .rodata
21 1A250 8082E440 src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug
22 1A330 8082E520 src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment
23 1A340 8082E530 src/overlays/misc/ovl_kaleido_scope/z_kaleido_map
24 1A380 8082E570 src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope
25 1A5F0 8082E7E0 src/overlays/misc/ovl_kaleido_scope/z_lmap_mark
26 1A6A0 8082E890 src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data
27 offset vram .ovl
28 1A720 8082E910 src/overlays/misc/ovl_kaleido_scope/ovl_kaleido_scope_reloc
29 offset vram .bss
30 1C030 80830220 src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope
31 1C0A0 80830290 .end

File diff suppressed because it is too large Load diff

View file

@ -1,23 +0,0 @@
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

View file

@ -91,6 +91,11 @@ def read_relocs(object_path: Path, section_name: str) -> list[Reloc]:
with open(object_path, "rb") as f:
elffile = elftools.elf.elffile.ELFFile(f)
symtab = elffile.get_section_by_name(".symtab")
section = elffile.get_section_by_name(section_name)
if section is None:
return []
data = elffile.get_section_by_name(section_name).data()
reloc_section = elffile.get_section_by_name(f".rel{section_name}")
@ -698,6 +703,12 @@ def process_file(
raise FixBssException(f"Could not determine compiler command line for {file}")
output(f"Compiler command: {shlex.join(command_line)}")
if any(s.startswith("tools/egcs/") for s in command_line):
raise FixBssException(
"Can't automatically fix BSS ordering for EGCS-compiled files"
)
symbol_table, ucode = run_cfe(command_line, keep_files=False)
bss_variables = find_bss_variables(symbol_table, ucode)

View file

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
set -euo pipefail
PATCH=$(git diff | base64 -w 0)

View file

@ -0,0 +1,13 @@
#!/usr/bin/env python3
#
# Patches kaleido bss size in relocations for matching builds.
#
import sys
with open(sys.argv[1], "r+") as reloc_sfile:
contents = reloc_sfile.read()
contents = contents.replace(".word _ovl_kaleido_scopeSegmentBssSize\n", ".word 0x10\n")
reloc_sfile.seek(0)
reloc_sfile.write(contents)
reloc_sfile.truncate()