mirror of
https://github.com/HackerN64/HackerOoT.git
synced 2026-01-21 10:37:37 -08:00
Rework disassembly: out of makefile, separate sections, relocs (#1728)
* Rework disassembly: out of makefile, separate sections, relocs * another nice print * fix type hints for python 3.8 dinosaurs * reencode from utf-8 to euc-jp (iconv) before assemble * Add "include guards" to macro.inc * For producing the expected file object files, assemble sections together instead of linking together the individually assembled sections * review * fixup * require spimdisasm >=1.21.0 * remove assembling sections individually (for now) * uppercase encoding names (standard)
This commit is contained in:
20
Makefile
20
Makefile
@@ -181,10 +181,6 @@ endif
|
||||
|
||||
OBJDUMP_FLAGS := -d -r -z -Mreg-names=32
|
||||
|
||||
DISASM_DATA_DIR := tools/disasm/$(VERSION)
|
||||
DISASM_FLAGS += --custom-suffix _unknown --sequential-label-names --no-use-fpccsr --no-cop0-named-registers
|
||||
DISASM_FLAGS += --config-dir $(DISASM_DATA_DIR) --symbol-addrs $(DISASM_DATA_DIR)/functions.txt --symbol-addrs $(DISASM_DATA_DIR)/variables.txt
|
||||
|
||||
#### Files ####
|
||||
|
||||
# ROM image
|
||||
@@ -223,11 +219,6 @@ O_FILES := $(foreach f,$(S_FILES:.s=.o),$(BUILD_DIR)/$f) \
|
||||
|
||||
OVL_RELOC_FILES := $(shell $(CPP) $(CPPFLAGS) $(SPEC) | $(SPEC_REPLACE_VARS) | grep -o '[^"]*_reloc.o' )
|
||||
|
||||
DISASM_BASEROM := $(BASEROM_DIR)/baserom-decompressed.z64
|
||||
DISASM_DATA_FILES := $(wildcard $(DISASM_DATA_DIR)/*.csv) $(wildcard $(DISASM_DATA_DIR)/*.txt)
|
||||
DISASM_S_FILES := $(shell test -e $(PYTHON) && $(PYTHON) tools/disasm/list_generated_files.py -o $(EXPECTED_DIR) --config-dir $(DISASM_DATA_DIR))
|
||||
DISASM_O_FILES := $(DISASM_S_FILES:.s=.o)
|
||||
|
||||
# Automatic dependency files
|
||||
# (Only asm_processor dependencies and reloc dependencies are handled for now)
|
||||
DEP_FILES := $(O_FILES:.o=.asmproc.d) $(OVL_RELOC_FILES:.o=.d)
|
||||
@@ -373,7 +364,9 @@ ifeq ($(VERSION),gc-eu-mq-dbg)
|
||||
$(PYTHON) tools/msgdis.py --text-out assets/text/message_data.h --staff-text-out assets/text/message_data_staff.h
|
||||
endif
|
||||
|
||||
disasm: $(DISASM_O_FILES)
|
||||
disasm:
|
||||
$(RM) -r $(EXPECTED_DIR)
|
||||
VERSION=$(VERSION) DISASM_BASEROM=$(BASEROM_DIR)/baserom-decompressed.z64 DISASM_DIR=$(EXPECTED_DIR) PYTHON=$(PYTHON) AS_CMD='$(AS) $(ASFLAGS)' LD=$(LD) ./tools/disasm/do_disasm.sh
|
||||
|
||||
run: $(ROM)
|
||||
ifeq ($(N64_EMULATOR),)
|
||||
@@ -495,13 +488,6 @@ $(BUILD_DIR)/assets/%.bin.inc.c: assets/%.bin
|
||||
$(BUILD_DIR)/assets/%.jpg.inc.c: assets/%.jpg
|
||||
$(ZAPD) bren -eh -i $< -o $@
|
||||
|
||||
$(EXPECTED_DIR)/.disasm: $(DISASM_DATA_FILES)
|
||||
$(PYTHON) tools/disasm/disasm.py $(DISASM_FLAGS) $(DISASM_BASEROM) -o $(EXPECTED_DIR) --split-functions $(EXPECTED_DIR)/functions
|
||||
touch $@
|
||||
|
||||
$(EXPECTED_DIR)/%.o: $(EXPECTED_DIR)/.disasm
|
||||
iconv --from UTF-8 --to EUC-JP $(@:.o=.s) | $(AS) $(ASFLAGS) -o $@
|
||||
|
||||
-include $(DEP_FILES)
|
||||
|
||||
# Print target for debugging
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
# Evaluate this file only once in case it's included more than once
|
||||
.ifndef _MACRO_INC_GUARD
|
||||
.internal _MACRO_INC_GUARD
|
||||
.set _MACRO_INC_GUARD, 1
|
||||
|
||||
.macro glabel label
|
||||
.global \label
|
||||
\label:
|
||||
@@ -47,3 +52,5 @@
|
||||
.set $fs4f, $f29
|
||||
.set $fs5, $f30
|
||||
.set $fs5f, $f31
|
||||
|
||||
.endif
|
||||
|
||||
@@ -16,4 +16,4 @@ toml
|
||||
# tools
|
||||
mapfile-parser>=1.2.1,<2.0.0
|
||||
rabbitizer>=1.0.0,<2.0.0
|
||||
spimdisasm>=1.20.0,<2.0.0
|
||||
spimdisasm>=1.21.0,<2.0.0
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
# SPDX-FileCopyrightText: © 2024 ZeldaRET
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import collections
|
||||
from pathlib import Path
|
||||
from typing import BinaryIO
|
||||
|
||||
import spimdisasm
|
||||
from spimdisasm import frontendCommon as fec
|
||||
|
||||
from file_addresses import DmaFile, parse_file_addresses, get_z_name_for_overlay
|
||||
|
||||
@@ -23,18 +23,18 @@ def load_file_splits(
|
||||
# Assume that we're reading from a decompressed ROM where the DMA file is
|
||||
# now located at the same ROM offset as the VROM start
|
||||
f.seek(dma_file.vrom_start)
|
||||
data = bytearray(f.read(dma_file.vrom_end - dma_file.vrom_start))
|
||||
data = f.read(dma_file.vrom_end - dma_file.vrom_start)
|
||||
|
||||
file_splits_path = config_dir / f"files_{dma_file.name}.csv"
|
||||
if file_splits_path.exists():
|
||||
default_filename = ""
|
||||
default_filename = dma_file.name
|
||||
splits_data = spimdisasm.common.FileSplitFormat()
|
||||
splits_data.readCsvFile(file_splits_path)
|
||||
reloc_section = None
|
||||
elif dma_file.overlay_dir is not None:
|
||||
z_name = get_z_name_for_overlay(dma_file.name)
|
||||
default_filename = (
|
||||
f"src/overlays/{dma_file.overlay_dir}/{dma_file.name}/{z_name}.s"
|
||||
f"src/overlays/{dma_file.overlay_dir}/{dma_file.name}/{z_name}"
|
||||
)
|
||||
splits_data = None
|
||||
reloc_section = spimdisasm.mips.sections.SectionRelocZ64(
|
||||
@@ -42,7 +42,7 @@ def load_file_splits(
|
||||
vromStart=0,
|
||||
vromEnd=len(data),
|
||||
vram=dma_file.vram_start,
|
||||
filename=default_filename,
|
||||
filename=f"src/overlays/{dma_file.overlay_dir}/{dma_file.name}/{dma_file.name}",
|
||||
array_of_bytes=data,
|
||||
segmentVromStart=0,
|
||||
overlayCategory=None,
|
||||
@@ -94,62 +94,85 @@ def main():
|
||||
spimdisasm.mips.InstructionConfig.parseArgs(args)
|
||||
spimdisasm.common.GlobalConfig.parseArgs(args)
|
||||
|
||||
spimdisasm.common.GlobalConfig.ASM_USE_PRELUDE = False
|
||||
spimdisasm.common.GlobalConfig.PRODUCE_SYMBOLS_PLUS_OFFSET = True
|
||||
spimdisasm.common.GlobalConfig.TRUST_USER_FUNCTIONS = True
|
||||
|
||||
dma_files = parse_file_addresses(args.config_dir / "file_addresses.csv")
|
||||
|
||||
output_files = collections.defaultdict(list)
|
||||
print("Loading disasm info...")
|
||||
all_file_splits: list[spimdisasm.mips.FileSplits] = []
|
||||
with open(args.rom, "rb") as f:
|
||||
for dma_file in dma_files:
|
||||
file_splits = load_file_splits(context, args.config_dir, dma_file, f)
|
||||
all_file_splits.append(file_splits)
|
||||
|
||||
for section_type, files in file_splits.sectionsDict.items():
|
||||
# TODO: disassemble overlay reloc sections?
|
||||
if section_type == spimdisasm.common.FileSectionType.Reloc:
|
||||
continue
|
||||
print("Analyzing...")
|
||||
for i, file_splits in enumerate(all_file_splits):
|
||||
f = i / len(all_file_splits)
|
||||
spimdisasm.common.Utils.printQuietless(
|
||||
f"{f*100:3.0f}%", "Analyzing", file_splits.name, end=" \r"
|
||||
)
|
||||
file_splits.analyze()
|
||||
print()
|
||||
print("Analyzing done.")
|
||||
|
||||
for path, section in files.items():
|
||||
output_files[path].append(section)
|
||||
print("Writing disassembled sections...")
|
||||
output_dir: Path = args.output_dir
|
||||
output_dir.mkdir(parents=True, exist_ok=True)
|
||||
for i, file_splits in enumerate(all_file_splits):
|
||||
f = i / len(all_file_splits)
|
||||
spimdisasm.common.Utils.printQuietless(
|
||||
f"{f*100:3.0f}%", "Writing", file_splits.name, end=" \r"
|
||||
)
|
||||
for sectDict in file_splits.sectionsDict.values():
|
||||
for name, section in sectDict.items():
|
||||
basepath = output_dir / name
|
||||
basepath.parent.mkdir(parents=True, exist_ok=True)
|
||||
if section.sectionType == spimdisasm.common.FileSectionType.Reloc:
|
||||
# basepath is like
|
||||
# .../ovl_Overlay_Name/z_overlay_name
|
||||
# and we want to write relocs to
|
||||
# .../ovl_Overlay_Name/ovl_Overlay_Name_reloc.s
|
||||
path = basepath.parent / f"{basepath.parent.name}_reloc.s"
|
||||
with path.open("w", encoding="UTF-8") as f:
|
||||
section.disassembleToFile(f)
|
||||
else:
|
||||
section.saveToFile(str(basepath))
|
||||
print()
|
||||
print("Writing sections done.")
|
||||
|
||||
for path, sections in sorted(output_files.items()):
|
||||
spimdisasm.common.Utils.printQuietless(f"Analyzing {path} ...")
|
||||
for section in sections:
|
||||
section.analyze()
|
||||
if args.split_functions is not None:
|
||||
print("Writing disassembled functions individually...")
|
||||
for i, file_splits in enumerate(all_file_splits):
|
||||
f = i / len(all_file_splits)
|
||||
spimdisasm.common.Utils.printQuietless(
|
||||
f"{f*100:3.0f}%", "Writing", file_splits.name, end=" \r"
|
||||
)
|
||||
|
||||
for path, sections in sorted(output_files.items()):
|
||||
spimdisasm.common.Utils.printQuietless(f"Writing {path} ...")
|
||||
output_path = args.output_dir / path
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(output_path, "w") as f:
|
||||
f.write('.include "macro.inc"\n')
|
||||
f.write("\n")
|
||||
f.write(".set noat\n")
|
||||
f.write(".set noreorder\n")
|
||||
f.write(".set gp=64\n")
|
||||
for section in sections:
|
||||
f.write("\n")
|
||||
f.write(f".section {section.sectionType.toStr()}\n")
|
||||
f.write("\n")
|
||||
f.write(f".align 4\n")
|
||||
f.write("\n")
|
||||
section.disassembleToFile(f)
|
||||
|
||||
if args.split_functions is not None:
|
||||
rodata_list = []
|
||||
for section in sections:
|
||||
if section.sectionType == spimdisasm.common.FileSectionType.Rodata:
|
||||
rodata_list.append(section)
|
||||
|
||||
for section in sections:
|
||||
if section.sectionType != spimdisasm.common.FileSectionType.Text:
|
||||
continue
|
||||
output_dir = (args.split_functions / section.name).with_suffix("")
|
||||
for func in section.symbolList:
|
||||
spimdisasm.mips.FilesHandlers.writeSplitedFunction(
|
||||
output_dir, func, rodata_list
|
||||
for section_name, text_section in file_splits.sectionsDict[
|
||||
spimdisasm.common.FileSectionType.Text
|
||||
].items():
|
||||
rodata_section = file_splits.sectionsDict[
|
||||
spimdisasm.common.FileSectionType.Rodata
|
||||
].get(section_name)
|
||||
# FunctionRodataEntry represents a function,
|
||||
# plus any associated rodata (strings, floats, jump tables...)
|
||||
# It can also be rodata that hasn't been associated to any function
|
||||
for (
|
||||
func_rodata_entry
|
||||
) in spimdisasm.mips.FunctionRodataEntry.getAllEntriesFromSections(
|
||||
text_section, rodata_section
|
||||
):
|
||||
output_dir = (
|
||||
args.split_functions
|
||||
/ section_name
|
||||
/ f"{func_rodata_entry.getName()}.s"
|
||||
)
|
||||
output_dir.parent.mkdir(parents=True, exist_ok=True)
|
||||
with output_dir.open("w", encoding="UTF-8") as f:
|
||||
func_rodata_entry.writeToFile(f, writeFunction=True)
|
||||
print()
|
||||
print("Writing functions done.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
55
tools/disasm/do_disasm.sh
Executable file
55
tools/disasm/do_disasm.sh
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
set -eu -o pipefail
|
||||
|
||||
if [ "${VERBOSE-}" ]
|
||||
then
|
||||
echo "$VERSION"
|
||||
echo "$DISASM_DIR"
|
||||
echo "$DISASM_BASEROM"
|
||||
echo "$PYTHON"
|
||||
echo "$AS_CMD"
|
||||
echo "$LD"
|
||||
set -x
|
||||
fi
|
||||
|
||||
DISASM_DATA_DIR="tools/disasm/$VERSION"
|
||||
DISASM_FLAGS="--custom-suffix _unknown --sequential-label-names --no-use-fpccsr --no-cop0-named-registers"
|
||||
DISASM_FLAGS="$DISASM_FLAGS --config-dir $DISASM_DATA_DIR --symbol-addrs $DISASM_DATA_DIR/functions.txt --symbol-addrs $DISASM_DATA_DIR/variables.txt"
|
||||
|
||||
echo Disassembling...
|
||||
cmd="$PYTHON tools/disasm/disasm.py $DISASM_FLAGS $DISASM_BASEROM -o $DISASM_DIR --split-functions $DISASM_DIR/functions"
|
||||
echo "$cmd"
|
||||
$cmd || (
|
||||
echo
|
||||
echo Error on disassembling.
|
||||
false
|
||||
)
|
||||
echo Disassembling done.
|
||||
|
||||
echo Assembling text,data,rodata,bss sections together for each file...
|
||||
for filebase in `find $DISASM_DIR -name '*.s' | sed -E -n 's/\.(text|data|rodata|bss)\.s$//p' | sort | uniq`
|
||||
do
|
||||
printf '%s \r' "$filebase"
|
||||
files=
|
||||
for section in text data rodata bss
|
||||
do
|
||||
file="$filebase.$section.s"
|
||||
if [ -e $file ]
|
||||
then
|
||||
files="$files $file"
|
||||
fi
|
||||
done
|
||||
iconv_cmd="iconv -f UTF-8 -t EUC-JP $files"
|
||||
asfile_cmd="$AS_CMD -o $filebase.o --"
|
||||
( $iconv_cmd | $asfile_cmd ) || (
|
||||
echo
|
||||
echo Error on assembling:
|
||||
echo "$filebase"
|
||||
echo Command line:
|
||||
echo "$iconv_cmd | $asfile_cmd"
|
||||
false
|
||||
)
|
||||
done
|
||||
echo
|
||||
|
||||
echo All done!
|
||||
@@ -1,135 +1,135 @@
|
||||
offset,vram,.text
|
||||
0,80000460,src/boot/boot_main.s
|
||||
140,800005A0,src/boot/idle.s
|
||||
3D0,80000830,src/boot/viconfig.s
|
||||
520,80000980,src/boot/z_std_dma.s
|
||||
B60,80000FC0,src/boot/yaz0.s
|
||||
EA0,80001300,src/boot/z_locale.s
|
||||
F60,800013C0,src/boot/is_debug.s
|
||||
FC0,80001420,src/libultra/io/driverominit.s
|
||||
11A0,80001600,src/boot/mio0.s
|
||||
1250,800016B0,src/boot/stackcheck.s
|
||||
14A0,80001900,src/boot/logutils.s
|
||||
1500,80001960,src/libultra/io/piacs.s
|
||||
15C0,80001A20,src/libultra/os/sendmesg.s
|
||||
1710,80001B70,src/libultra/os/stopthread.s
|
||||
17D0,80001C30,src/libultra/io/viextendvstart.s
|
||||
17E0,80001C40,src/libultra/os/recvmesg.s
|
||||
1920,80001D80,src/libultra/os/initialize.s
|
||||
1C70,800020D0,src/libultra/libc/ll.s
|
||||
1F30,80002390,src/libultra/os/exceptasm.s
|
||||
2860,80002CC0,src/libultra/os/thread.s
|
||||
28A0,80002D00,src/libultra/os/destroythread.s
|
||||
29B0,80002E10,src/libultra/libc/bzero.s
|
||||
2A50,80002EB0,src/libultra/os/parameters.s
|
||||
2AB0,80002F10,src/libultra/os/createthread.s
|
||||
2C00,80003060,src/libultra/os/setsr.s
|
||||
2C10,80003070,src/libultra/os/getsr.s
|
||||
2C20,80003080,src/libultra/os/writebackdcache.s
|
||||
2CA0,80003100,src/libultra/io/vigetnextframebuf.s
|
||||
2CE0,80003140,src/libultra/io/pimgr.s
|
||||
2E60,800032C0,src/libultra/io/devmgr.s
|
||||
3270,800036D0,src/libultra/io/pirawdma.s
|
||||
3340,800037A0,src/libultra/os/virtualtophysical.s
|
||||
33C0,80003820,src/libultra/io/viblack.s
|
||||
3430,80003890,src/libultra/io/sirawread.s
|
||||
3480,800038E0,src/libultra/os/getthreadid.s
|
||||
34A0,80003900,src/libultra/os/setintmask.s
|
||||
3540,800039A0,src/libultra/io/visetmode.s
|
||||
35A0,80003A00,src/libultra/os/probetlb.s
|
||||
3660,80003AC0,src/libultra/os/getmemsize.s
|
||||
3780,80003BE0,src/libultra/os/seteventmesg.s
|
||||
3840,80003CA0,src/libultra/os/unmaptlball.s
|
||||
3890,80003CF0,src/libultra/io/epidma.s
|
||||
3930,80003D90,src/libultra/os/invalicache.s
|
||||
39B0,80003E10,src/libultra/os/createmesgqueue.s
|
||||
39E0,80003E40,src/libultra/os/invaldcache.s
|
||||
3A90,80003EF0,src/libultra/io/si.s
|
||||
3AC0,80003F20,src/libultra/os/jammesg.s
|
||||
3C10,80004070,src/libultra/os/setthreadpri.s
|
||||
3CF0,80004150,src/libultra/os/getthreadpri.s
|
||||
3D10,80004170,src/libultra/io/epirawread.s
|
||||
3E70,800042D0,src/libultra/io/viswapbuf.s
|
||||
3EC0,80004320,src/libultra/io/epirawdma.s
|
||||
40A0,80004500,src/libultra/libc/bcmp.s
|
||||
41C0,80004620,src/libultra/os/gettime.s
|
||||
4250,800046B0,src/libultra/os/timerintr.s
|
||||
4680,80004AE0,src/libultra/os/getcount.s
|
||||
4690,80004AF0,src/libultra/os/setglobalintmask.s
|
||||
46E0,80004B40,src/libultra/os/setcompare.s
|
||||
46F0,80004B50,src/libultra/libc/bcopy.s
|
||||
4A00,80004E60,src/libultra/os/resetglobalintmask.s
|
||||
4A60,80004EC0,src/libultra/os/interrupt.s
|
||||
4AF0,80004F50,src/libultra/io/vi.s
|
||||
4C10,80005070,src/libultra/io/viswapcontext.s
|
||||
4F10,80005370,src/libultra/io/pigetcmdq.s
|
||||
4F40,800053A0,src/libultra/io/epiread.s
|
||||
4F90,800053F0,src/libultra/io/visetspecial.s
|
||||
50F0,80005550,src/libultra/io/cartrominit.s
|
||||
5250,800056B0,src/libultra/os/setfpccsr.s
|
||||
5260,800056C0,src/libultra/os/getfpccsr.s
|
||||
5270,800056D0,src/libultra/os/maptlbrdb.s
|
||||
52D0,80005730,src/libultra/os/yieldthread.s
|
||||
5320,80005780,src/libultra/os/getcause.s
|
||||
5330,80005790,src/libultra/io/epirawwrite.s
|
||||
5490,800058F0,src/libultra/io/sirawwrite.s
|
||||
54E0,80005940,src/libultra/io/vimgr.s
|
||||
57F0,80005C50,src/libultra/io/vigetcurrcontext.s
|
||||
5800,80005C60,src/libultra/os/startthread.s
|
||||
5950,80005DB0,src/libultra/io/visetyscale.s
|
||||
59A0,80005E00,src/libultra/io/visetxscale.s
|
||||
5AB0,80005F10,src/libultra/os/sethwintrroutine.s
|
||||
5B20,80005F80,src/libultra/os/gethwintrroutine.s
|
||||
5B50,80005FB0,src/libultra/os/setwatchlo.s
|
||||
5B60,80005FC0,data/rsp_boot.text.s
|
||||
0,80000460,src/boot/boot_main
|
||||
140,800005A0,src/boot/idle
|
||||
3D0,80000830,src/boot/viconfig
|
||||
520,80000980,src/boot/z_std_dma
|
||||
B60,80000FC0,src/boot/yaz0
|
||||
EA0,80001300,src/boot/z_locale
|
||||
F60,800013C0,src/boot/is_debug
|
||||
FC0,80001420,src/libultra/io/driverominit
|
||||
11A0,80001600,src/boot/mio0
|
||||
1250,800016B0,src/boot/stackcheck
|
||||
14A0,80001900,src/boot/logutils
|
||||
1500,80001960,src/libultra/io/piacs
|
||||
15C0,80001A20,src/libultra/os/sendmesg
|
||||
1710,80001B70,src/libultra/os/stopthread
|
||||
17D0,80001C30,src/libultra/io/viextendvstart
|
||||
17E0,80001C40,src/libultra/os/recvmesg
|
||||
1920,80001D80,src/libultra/os/initialize
|
||||
1C70,800020D0,src/libultra/libc/ll
|
||||
1F30,80002390,src/libultra/os/exceptasm
|
||||
2860,80002CC0,src/libultra/os/thread
|
||||
28A0,80002D00,src/libultra/os/destroythread
|
||||
29B0,80002E10,src/libultra/libc/bzero
|
||||
2A50,80002EB0,src/libultra/os/parameters
|
||||
2AB0,80002F10,src/libultra/os/createthread
|
||||
2C00,80003060,src/libultra/os/setsr
|
||||
2C10,80003070,src/libultra/os/getsr
|
||||
2C20,80003080,src/libultra/os/writebackdcache
|
||||
2CA0,80003100,src/libultra/io/vigetnextframebuf
|
||||
2CE0,80003140,src/libultra/io/pimgr
|
||||
2E60,800032C0,src/libultra/io/devmgr
|
||||
3270,800036D0,src/libultra/io/pirawdma
|
||||
3340,800037A0,src/libultra/os/virtualtophysical
|
||||
33C0,80003820,src/libultra/io/viblack
|
||||
3430,80003890,src/libultra/io/sirawread
|
||||
3480,800038E0,src/libultra/os/getthreadid
|
||||
34A0,80003900,src/libultra/os/setintmask
|
||||
3540,800039A0,src/libultra/io/visetmode
|
||||
35A0,80003A00,src/libultra/os/probetlb
|
||||
3660,80003AC0,src/libultra/os/getmemsize
|
||||
3780,80003BE0,src/libultra/os/seteventmesg
|
||||
3840,80003CA0,src/libultra/os/unmaptlball
|
||||
3890,80003CF0,src/libultra/io/epidma
|
||||
3930,80003D90,src/libultra/os/invalicache
|
||||
39B0,80003E10,src/libultra/os/createmesgqueue
|
||||
39E0,80003E40,src/libultra/os/invaldcache
|
||||
3A90,80003EF0,src/libultra/io/si
|
||||
3AC0,80003F20,src/libultra/os/jammesg
|
||||
3C10,80004070,src/libultra/os/setthreadpri
|
||||
3CF0,80004150,src/libultra/os/getthreadpri
|
||||
3D10,80004170,src/libultra/io/epirawread
|
||||
3E70,800042D0,src/libultra/io/viswapbuf
|
||||
3EC0,80004320,src/libultra/io/epirawdma
|
||||
40A0,80004500,src/libultra/libc/bcmp
|
||||
41C0,80004620,src/libultra/os/gettime
|
||||
4250,800046B0,src/libultra/os/timerintr
|
||||
4680,80004AE0,src/libultra/os/getcount
|
||||
4690,80004AF0,src/libultra/os/setglobalintmask
|
||||
46E0,80004B40,src/libultra/os/setcompare
|
||||
46F0,80004B50,src/libultra/libc/bcopy
|
||||
4A00,80004E60,src/libultra/os/resetglobalintmask
|
||||
4A60,80004EC0,src/libultra/os/interrupt
|
||||
4AF0,80004F50,src/libultra/io/vi
|
||||
4C10,80005070,src/libultra/io/viswapcontext
|
||||
4F10,80005370,src/libultra/io/pigetcmdq
|
||||
4F40,800053A0,src/libultra/io/epiread
|
||||
4F90,800053F0,src/libultra/io/visetspecial
|
||||
50F0,80005550,src/libultra/io/cartrominit
|
||||
5250,800056B0,src/libultra/os/setfpccsr
|
||||
5260,800056C0,src/libultra/os/getfpccsr
|
||||
5270,800056D0,src/libultra/os/maptlbrdb
|
||||
52D0,80005730,src/libultra/os/yieldthread
|
||||
5320,80005780,src/libultra/os/getcause
|
||||
5330,80005790,src/libultra/io/epirawwrite
|
||||
5490,800058F0,src/libultra/io/sirawwrite
|
||||
54E0,80005940,src/libultra/io/vimgr
|
||||
57F0,80005C50,src/libultra/io/vigetcurrcontext
|
||||
5800,80005C60,src/libultra/os/startthread
|
||||
5950,80005DB0,src/libultra/io/visetyscale
|
||||
59A0,80005E00,src/libultra/io/visetxscale
|
||||
5AB0,80005F10,src/libultra/os/sethwintrroutine
|
||||
5B20,80005F80,src/libultra/os/gethwintrroutine
|
||||
5B50,80005FB0,src/libultra/os/setwatchlo
|
||||
5B60,80005FC0,data/rsp_boot.text
|
||||
|
||||
offset,vram,.data
|
||||
5C30,80006090,data/unk_800093F0.data.s
|
||||
5C50,800060B0,data/unk_80009410.data.s
|
||||
5C70,800060D0,src/boot/idle.s
|
||||
5C90,800060F0,src/boot/viconfig.s
|
||||
5CA0,80006100,src/boot/z_std_dma.s
|
||||
5CB0,80006110,src/boot/z_locale.s
|
||||
5CC0,80006120,src/libultra/io/driverominit.s
|
||||
5CD0,80006130,src/boot/stackcheck.s
|
||||
5CE0,80006140,src/libultra/io/piacs.s
|
||||
5CF0,80006150,src/libultra/io/vimodepallan1.s
|
||||
5D40,800061A0,src/libultra/os/initialize.s
|
||||
5D60,800061C0,src/libultra/os/exceptasm.s
|
||||
5D90,800061F0,src/libultra/os/thread.s
|
||||
5DB0,80006210,src/libultra/io/pimgr.s
|
||||
5DE0,80006240,src/libultra/os/seteventmesg.s
|
||||
5DF0,80006250,src/libultra/os/timerintr.s
|
||||
5E00,80006260,src/libultra/io/vimodentsclan1.s
|
||||
5E50,800062B0,src/libultra/io/vimodempallan1.s
|
||||
5EA0,80006300,src/libultra/io/vi.s
|
||||
5F10,80006370,src/libultra/io/cartrominit.s
|
||||
5F20,80006380,src/libultra/io/vimgr.s
|
||||
5C30,80006090,data/unk_800093F0.data
|
||||
5C50,800060B0,data/unk_80009410.data
|
||||
5C70,800060D0,src/boot/idle
|
||||
5C90,800060F0,src/boot/viconfig
|
||||
5CA0,80006100,src/boot/z_std_dma
|
||||
5CB0,80006110,src/boot/z_locale
|
||||
5CC0,80006120,src/libultra/io/driverominit
|
||||
5CD0,80006130,src/boot/stackcheck
|
||||
5CE0,80006140,src/libultra/io/piacs
|
||||
5CF0,80006150,src/libultra/io/vimodepallan1
|
||||
5D40,800061A0,src/libultra/os/initialize
|
||||
5D60,800061C0,src/libultra/os/exceptasm
|
||||
5D90,800061F0,src/libultra/os/thread
|
||||
5DB0,80006210,src/libultra/io/pimgr
|
||||
5DE0,80006240,src/libultra/os/seteventmesg
|
||||
5DF0,80006250,src/libultra/os/timerintr
|
||||
5E00,80006260,src/libultra/io/vimodentsclan1
|
||||
5E50,800062B0,src/libultra/io/vimodempallan1
|
||||
5EA0,80006300,src/libultra/io/vi
|
||||
5F10,80006370,src/libultra/io/cartrominit
|
||||
5F20,80006380,src/libultra/io/vimgr
|
||||
|
||||
offset,vram,.rodata
|
||||
5F40,800063A0,src/boot/boot_main.s
|
||||
5F50,800063B0,src/boot/idle.s
|
||||
5F60,800063C0,src/boot/z_std_dma.s
|
||||
5FC0,80006420,src/boot/z_locale.s
|
||||
5FD0,80006430,src/boot/stackcheck.s
|
||||
5FE0,80006440,src/boot/logutils.s
|
||||
5FF0,80006450,src/libultra/os/exceptasm.s
|
||||
6040,800064A0,src/libultra/io/devmgr.s
|
||||
6060,800064C0,src/libultra/os/setintmask.s
|
||||
60E0,80006540,src/boot/build.s
|
||||
5F40,800063A0,src/boot/boot_main
|
||||
5F50,800063B0,src/boot/idle
|
||||
5F60,800063C0,src/boot/z_std_dma
|
||||
5FC0,80006420,src/boot/z_locale
|
||||
5FD0,80006430,src/boot/stackcheck
|
||||
5FE0,80006440,src/boot/logutils
|
||||
5FF0,80006450,src/libultra/os/exceptasm
|
||||
6040,800064A0,src/libultra/io/devmgr
|
||||
6060,800064C0,src/libultra/os/setintmask
|
||||
60E0,80006540,src/boot/build
|
||||
|
||||
offset,vram,.bss
|
||||
6110,80006570,src/boot/boot_main.s
|
||||
6B00,80006F60,src/boot/idle.s
|
||||
7710,80007B70,src/boot/z_std_dma.s
|
||||
7E80,800082E0,src/boot/yaz0.s
|
||||
8290,800086F0,src/boot/z_locale.s
|
||||
82B0,80008710,src/libultra/io/driverominit.s
|
||||
8330,80008790,src/libultra/io/piacs.s
|
||||
8350,800087B0,src/libultra/os/initialize.s
|
||||
8360,800087C0,src/libultra/io/pimgr.s
|
||||
97D0,80009C30,src/libultra/os/seteventmesg.s
|
||||
9850,80009CB0,src/libultra/os/timerintr.s
|
||||
9890,80009CF0,src/libultra/io/cartrominit.s
|
||||
9910,80009D70,src/libultra/io/vimgr.s
|
||||
6110,80006570,src/boot/boot_main
|
||||
6B00,80006F60,src/boot/idle
|
||||
7710,80007B70,src/boot/z_std_dma
|
||||
7E80,800082E0,src/boot/yaz0
|
||||
8290,800086F0,src/boot/z_locale
|
||||
82B0,80008710,src/libultra/io/driverominit
|
||||
8330,80008790,src/libultra/io/piacs
|
||||
8350,800087B0,src/libultra/os/initialize
|
||||
8360,800087C0,src/libultra/io/pimgr
|
||||
97D0,80009C30,src/libultra/os/seteventmesg
|
||||
9850,80009CB0,src/libultra/os/timerintr
|
||||
9890,80009CF0,src/libultra/io/cartrominit
|
||||
9910,80009D70,src/libultra/io/vimgr
|
||||
AB30,8000AF90,.end
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,22 +1,22 @@
|
||||
offset,vram,.text
|
||||
0,80803630,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.s
|
||||
3040,80806670,src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL.s
|
||||
6F60,8080A590,src/overlays/gamestates/ovl_file_choose/z_file_choose.s
|
||||
0,80803630,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
|
||||
3040,80806670,src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL
|
||||
6F60,8080A590,src/overlays/gamestates/ovl_file_choose/z_file_choose
|
||||
|
||||
offset,vram,.data
|
||||
D740,80810D70,src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.s
|
||||
E010,80811640,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.s
|
||||
E050,80811680,src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL.s
|
||||
E2B0,808118E0,src/overlays/gamestates/ovl_file_choose/z_file_choose.s
|
||||
D740,80810D70,src/overlays/gamestates/ovl_file_choose/z_file_nameset_data
|
||||
E010,80811640,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
|
||||
E050,80811680,src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL
|
||||
E2B0,808118E0,src/overlays/gamestates/ovl_file_choose/z_file_choose
|
||||
|
||||
offset,vram,.rodata
|
||||
E5F0,80811C20,src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL.s
|
||||
E600,80811C30,src/overlays/gamestates/ovl_file_choose/z_file_choose.s
|
||||
E5F0,80811C20,src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL
|
||||
E600,80811C30,src/overlays/gamestates/ovl_file_choose/z_file_choose
|
||||
|
||||
offset,vram,.ovl
|
||||
E620,80811C50,src/overlays/gamestates/ovl_file_choose/ovl_file_choose_reloc.s
|
||||
E620,80811C50,src/overlays/gamestates/ovl_file_choose/ovl_file_choose_reloc
|
||||
|
||||
offset,vram,.bss
|
||||
EC10,80812240,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.s
|
||||
EC20,80812250,src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL.s
|
||||
EC10,80812240,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase
|
||||
EC20,80812250,src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL
|
||||
EC30,80812260,.end
|
||||
|
||||
|
@@ -1,34 +1,34 @@
|
||||
offset,vram,.text
|
||||
0,80812260,src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.s
|
||||
2400,80814660,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.s
|
||||
43B0,80816610,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.s
|
||||
5E30,80818090,src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.s
|
||||
7E20,8081A080,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.s
|
||||
B100,8081D360,src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt.s
|
||||
B300,8081D560,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.s
|
||||
15350,808275B0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark.s
|
||||
0,80812260,src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect
|
||||
2400,80814660,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug
|
||||
43B0,80816610,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment
|
||||
5E30,80818090,src/overlays/misc/ovl_kaleido_scope/z_kaleido_item
|
||||
7E20,8081A080,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL
|
||||
B100,8081D360,src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt
|
||||
B300,8081D560,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL
|
||||
15350,808275B0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark
|
||||
|
||||
offset,vram,.data
|
||||
15A10,80827C70,src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.s
|
||||
15BC0,80827E20,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.s
|
||||
15D90,80827FF0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.s
|
||||
15DC0,80828020,src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.s
|
||||
15E30,80828090,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.s
|
||||
16080,808282E0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt.s
|
||||
16090,808282F0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.s
|
||||
16C10,80828E70,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark.s
|
||||
16C60,80828EC0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data.s
|
||||
15A10,80827C70,src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect
|
||||
15BC0,80827E20,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug
|
||||
15D90,80827FF0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment
|
||||
15DC0,80828020,src/overlays/misc/ovl_kaleido_scope/z_kaleido_item
|
||||
15E30,80828090,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL
|
||||
16080,808282E0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt
|
||||
16090,808282F0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL
|
||||
16C10,80828E70,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark
|
||||
16C60,80828EC0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data
|
||||
|
||||
offset,vram,.rodata
|
||||
1ADC0,8082D020,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.s
|
||||
1AEA0,8082D100,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.s
|
||||
1AEB0,8082D110,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.s
|
||||
1B190,8082D3F0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark.s
|
||||
1B240,8082D4A0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data.s
|
||||
1ADC0,8082D020,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug
|
||||
1AEA0,8082D100,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment
|
||||
1AEB0,8082D110,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL
|
||||
1B190,8082D3F0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark
|
||||
1B240,8082D4A0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data
|
||||
|
||||
offset,vram,.ovl
|
||||
1B2C0,8082D560,src/overlays/misc/ovl_kaleido_scope/ovl_kaleido_scope_reloc.s
|
||||
1B2C0,8082D560,src/overlays/misc/ovl_kaleido_scope/ovl_kaleido_scope_reloc
|
||||
|
||||
offset,vram,.bss
|
||||
1C9C0,8082EC20,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.s
|
||||
1C9C0,8082EC20,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL
|
||||
1CA30,8082EC90,.end
|
||||
|
||||
|
@@ -1,62 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# SPDX-FileCopyrightText: © 2024 ZeldaRET
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
from pathlib import Path
|
||||
|
||||
from file_addresses import parse_file_addresses, get_z_name_for_overlay
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="List generated files for the Makefile."
|
||||
)
|
||||
parser.add_argument(
|
||||
"-o", "--output-dir", help="Output directory", type=Path, required=True
|
||||
)
|
||||
parser.add_argument(
|
||||
"--config-dir", help="Config directory", type=Path, required=True
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.config_dir.exists(): # disassembly is not set up for this version
|
||||
return
|
||||
|
||||
file_addresses = parse_file_addresses(args.config_dir / "file_addresses.csv")
|
||||
|
||||
generated_files = set()
|
||||
for dma_file in file_addresses:
|
||||
file_splits_path = args.config_dir / f"files_{dma_file.name}.csv"
|
||||
if file_splits_path.exists():
|
||||
with open(file_splits_path) as f:
|
||||
reader = csv.reader(f)
|
||||
for row in reader:
|
||||
if (
|
||||
not row # blank line
|
||||
or row[2].startswith(".") # section name or .end
|
||||
or row[2].endswith(
|
||||
"_reloc.s"
|
||||
) # TODO: disassemble overlay reloc sections?
|
||||
):
|
||||
continue
|
||||
generated_files.add(row[2])
|
||||
elif dma_file.overlay_dir is not None:
|
||||
z_name = get_z_name_for_overlay(dma_file.name)
|
||||
generated_files.add(
|
||||
f"src/overlays/{dma_file.overlay_dir}/{dma_file.name}/{z_name}.s"
|
||||
)
|
||||
else:
|
||||
raise Exception(
|
||||
f"DMA file {dma_file.name} is not an overlay but has no file splits"
|
||||
)
|
||||
|
||||
for filename in sorted(generated_files):
|
||||
print(args.output_dir / filename)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user