mirror of https://github.com/zeldaret/mm.git
Dump current status
This commit is contained in:
parent
d3a5a2f29d
commit
cc9baa93a8
|
@ -0,0 +1,79 @@
|
||||||
|
# TODO think about how to split this up
|
||||||
|
|
||||||
|
MIPS_BINUTILS := mips-linux-gnu-
|
||||||
|
|
||||||
|
AS := $(MIPS_BINUTILS)as
|
||||||
|
LD := $(MIPS_BINUTILS)ld
|
||||||
|
|
||||||
|
QEMU_IRIX := ~/irixemu/mips-linux-user/qemu-mips
|
||||||
|
IRIX_ROOT := ./ido/
|
||||||
|
CC := $(QEMU_IRIX) -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc
|
||||||
|
|
||||||
|
CFLAGS := -G 0 -non_shared -Xfullwarn -Xcpluscomm
|
||||||
|
|
||||||
|
MIPS_VERSION := -mips2
|
||||||
|
OPTIMIZATION := -O2 -g3
|
||||||
|
|
||||||
|
build/src/libultra/os/%: OPTIMIZATION := -O1
|
||||||
|
build/src/libultra/io/%: OPTIMIZATION := -O2
|
||||||
|
build/src/libultra/libc/%: OPTIMIZATION := -O2
|
||||||
|
test.txt: OPTIMIZATION := -O2
|
||||||
|
test.txt: MIPS_VERSION := -mips2
|
||||||
|
|
||||||
|
BASEROM_FILES := $(wildcard baserom/*)
|
||||||
|
BASEROM_O_FILES := $(BASEROM_FILES:baserom/%=build/baserom/%.o)
|
||||||
|
S_FILES := $(wildcard asm/*)
|
||||||
|
S_O_FILES = $(S_FILES:asm/%.asm=build/asm/%.o)
|
||||||
|
C_FILES := $(wildcard src/*) $(wildcard src/libultra/*) $(wildcard src/libultra/os/*) $(wildcard src/libultra/io/*) $(wildcard src/libultra/libc/*) $(wildcard src/code/*)
|
||||||
|
C_O_FILES = $(C_FILES:src/%.c=build/src/%.o)
|
||||||
|
O_FILES := $(BASEROM_O_FILES) $(S_O_FILES)
|
||||||
|
|
||||||
|
|
||||||
|
ROM := rom.z64
|
||||||
|
ELF := build/rom.elf
|
||||||
|
|
||||||
|
# make build directories
|
||||||
|
$(shell mkdir -p build/asm)
|
||||||
|
$(shell mkdir -p build/baserom)
|
||||||
|
$(shell mkdir -p build/src)
|
||||||
|
$(shell mkdir -p build/src/libultra)
|
||||||
|
$(shell mkdir -p build/src/libultra/os)
|
||||||
|
$(shell mkdir -p build/src/libultra/io)
|
||||||
|
$(shell mkdir -p build/src/libultra/libc)
|
||||||
|
$(shell mkdir -p build/src/code)
|
||||||
|
|
||||||
|
check: $(ROM) code.bin boot.bin
|
||||||
|
@md5sum -c checksum.md5
|
||||||
|
|
||||||
|
$(ROM): $(ELF)
|
||||||
|
@python3 elf2rom.py
|
||||||
|
|
||||||
|
$(ELF): $(O_FILES) ldscript.txt
|
||||||
|
$(LD) -T ldscript.txt --no-check-sections --accept-unknown-input-arch -o $@
|
||||||
|
|
||||||
|
boot.bin: code.elf
|
||||||
|
$(MIPS_BINUTILS)objcopy --dump-section boot=$@ $<
|
||||||
|
|
||||||
|
code.bin: code.elf
|
||||||
|
$(MIPS_BINUTILS)objcopy --dump-section code=$@ $<
|
||||||
|
|
||||||
|
code.elf: $(S_O_FILES) $(C_O_FILES) codescript.txt undef.txt
|
||||||
|
$(LD) -T codescript.txt -T undef.txt --no-check-sections --accept-unknown-input-arch -o $@
|
||||||
|
|
||||||
|
test.txt: build/src/test.o
|
||||||
|
$(MIPS_BINUTILS)objdump -d --adjust-vma=0x8008F1A0 $< > test.txt
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm $(ROM) $(ELF) code.elf code.bin boot.bin -r build
|
||||||
|
|
||||||
|
# Recipes
|
||||||
|
|
||||||
|
build/baserom/%.o: baserom/%
|
||||||
|
$(MIPS_BINUTILS)objcopy -I binary -O elf32-big $< $@
|
||||||
|
|
||||||
|
build/asm/%.o: asm/%.asm
|
||||||
|
$(AS) -march=vr4300 -32 $^ -o $@
|
||||||
|
|
||||||
|
build/src/%.o: src/%.c include/*
|
||||||
|
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTIMIZATION) -Iinclude $< -o $@
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
WIP Majora's Mask decomp, proper docs and README will be made later.
|
||||||
|
|
||||||
|
Basic steps (assuming you already have IDO and irixqemu):
|
||||||
|
Run extract_rom.py with a USA Majora's Mask ROM named baserom.z64 (will need to get libyaz0 first, I'll set up the dependency file eventually)
|
||||||
|
Run disasm.py
|
||||||
|
Run Make (edit the makefile with the paths to ido, etc. I'll make it use evironment variables eventually)
|
|
@ -0,0 +1,3 @@
|
||||||
|
2a0a8acb61538235bc1094d297fb6556 rom.z64
|
||||||
|
4e8afbb44e6a4b9bc00eaa318bb1650c code.bin
|
||||||
|
b0145fad4be13d63d5d7aa75062db400 boot.bin
|
|
@ -0,0 +1,302 @@
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
boot 0x80080060:
|
||||||
|
{
|
||||||
|
build/asm/boot_0x80080060.o(.text)
|
||||||
|
build/asm/boot_0x800805E0.o(.text)
|
||||||
|
build/asm/boot_0x80080790.o(.text)
|
||||||
|
build/asm/boot_0x80080E30.o(.text)
|
||||||
|
build/asm/boot_0x80081820.o(.text)
|
||||||
|
build/asm/boot_0x80081920.o(.text)
|
||||||
|
build/asm/boot_0x80081980.o(.text)
|
||||||
|
build/asm/boot_0x80083EB0.o(.text)
|
||||||
|
build/asm/boot_0x80084940.o(.text)
|
||||||
|
build/asm/boot_0x80085130.o(.text)
|
||||||
|
build/asm/boot_0x80085320.o(.text)
|
||||||
|
build/asm/boot_0x80085570.o(.text)
|
||||||
|
build/asm/boot_0x80086110.o(.text)
|
||||||
|
build/asm/boot_0x80086280.o(.text)
|
||||||
|
build/asm/boot_0x800862E0.o(.text)
|
||||||
|
build/asm/boot_0x80086760.o(.text)
|
||||||
|
build/asm/boot_0x80087160.o(.text)
|
||||||
|
build/asm/boot_0x80087830.o(.text)
|
||||||
|
build/asm/boot_0x80087900.o(.text)
|
||||||
|
build/asm/setcause.o(.text)
|
||||||
|
build/src/libultra/os/sendmesg.o(.text)
|
||||||
|
build/asm/boot_0x80087C60.o(.text)
|
||||||
|
build/asm/boot_0x80087E00.o(.text)
|
||||||
|
build/src/libultra/os/stopthread.o(.text)
|
||||||
|
build/src/libultra/os/recvmesg.o(.text)
|
||||||
|
build/asm/setintmask.o(.text)
|
||||||
|
build/asm/getintmask.o(.text)
|
||||||
|
build/asm/boot_0x80088110.o(.text)
|
||||||
|
build/asm/boot_0x800882A0.o(.text)
|
||||||
|
build/asm/sinf.o(.text)
|
||||||
|
build/asm/sins.o(.text)
|
||||||
|
build/asm/sptask.o(.text)
|
||||||
|
build/asm/ll.o(.text)
|
||||||
|
build/asm/exceptasm.o(.text)
|
||||||
|
build/src/libultra/os/thread.o(.text)
|
||||||
|
build/src/libultra/os/destroythread.o(.text)
|
||||||
|
build/asm/boot_0x80089580.o(.text)
|
||||||
|
build/asm/bzero.o(.text)
|
||||||
|
build/asm/boot_0x800896D0.o(.text)
|
||||||
|
build/asm/siacs.o(.text)
|
||||||
|
build/asm/controller.o(.text)
|
||||||
|
build/src/libultra/os/createthread.o(.text)
|
||||||
|
build/asm/contreaddata.o(.text)
|
||||||
|
build/asm/boot_0x8008A170.o(.text)
|
||||||
|
build/src/libultra/os/virtualtophysical.o(.text)
|
||||||
|
build/asm/getsr.o(.text)
|
||||||
|
build/asm/setsr.o(.text)
|
||||||
|
build/asm/writebackdcache.o(.text)
|
||||||
|
build/asm/boot_0x8008A660.o(.text)
|
||||||
|
build/asm/boot_0x8008AA10.o(.text)
|
||||||
|
build/asm/perspective.o(.text)
|
||||||
|
build/asm/boot_0x8008ACE0.o(.text)
|
||||||
|
build/asm/sirawdma.o(.text)
|
||||||
|
build/asm/boot_0x8008AE20.o(.text)
|
||||||
|
build/asm/boot_0x8008AE70.o(.text)
|
||||||
|
build/asm/boot_0x8008AEE0.o(.text)
|
||||||
|
build/src/libultra/os/getthreadid.o(.text)
|
||||||
|
build/asm/sptaskyield.o(.text)
|
||||||
|
build/asm/boot_0x8008AF70.o(.text)
|
||||||
|
build/asm/boot_0x8008B3C0.o(.text)
|
||||||
|
build/asm/boot_0x8008B600.o(.text)
|
||||||
|
build/asm/boot_0x8008B650.o(.text)
|
||||||
|
build/asm/getconfig.o(.text)
|
||||||
|
build/asm/setconfig.o(.text)
|
||||||
|
build/asm/boot_0x8008B6D0.o(.text)
|
||||||
|
build/asm/boot_0x8008B9F0.o(.text)
|
||||||
|
build/src/libultra/os/stoptimer.o(.text)
|
||||||
|
build/asm/probetlb.o(.text)
|
||||||
|
build/asm/pimgr.o(.text)
|
||||||
|
build/asm/piacs.o(.text)
|
||||||
|
build/asm/boot_0x8008C260.o(.text)
|
||||||
|
build/asm/boot_0x8008C740.o(.text)
|
||||||
|
build/asm/getcount.o(.text)
|
||||||
|
build/asm/boot_0x8008D2E0.o(.text)
|
||||||
|
build/asm/boot_0x8008D350.o(.text)
|
||||||
|
build/asm/boot_0x8008D470.o(.text)
|
||||||
|
build/src/libultra/os/seteventmesg.o(.text)
|
||||||
|
build/asm/sqrtf.o(.text)
|
||||||
|
build/asm/boot_0x8008D710.o(.text)
|
||||||
|
build/src/libultra/io/contquery.o(.text)
|
||||||
|
build/asm/boot_0x8008D7D0.o(.text)
|
||||||
|
build/asm/xprintf.o(.text)
|
||||||
|
build/asm/boot_0x8008ED30.o(.text)
|
||||||
|
build/asm/unmaptlball.o(.text)
|
||||||
|
build/asm/pidma.o(.text)
|
||||||
|
build/asm/boot_0x8008EED0.o(.text)
|
||||||
|
build/asm/boot_0x8008F100.o(.text)
|
||||||
|
build/src/libultra/libc/string.o(.text)
|
||||||
|
build/asm/createmesgqueue.o(.text)
|
||||||
|
build/asm/invalicache.o(.text)
|
||||||
|
build/asm/invaldcache.o(.text)
|
||||||
|
build/asm/timerintr.o(.text)
|
||||||
|
build/asm/boot_0x8008F7D0.o(.text)
|
||||||
|
build/asm/boot_0x8008FA00.o(.text)
|
||||||
|
build/asm/si.o(.text)
|
||||||
|
build/asm/boot_0x8008FA60.o(.text)
|
||||||
|
build/src/libultra/os/jammesg.o(.text)
|
||||||
|
build/asm/setthreadpri.o(.text)
|
||||||
|
build/asm/getthreadpri.o(.text)
|
||||||
|
build/asm/boot_0x8008FD00.o(.text)
|
||||||
|
build/asm/boot_0x8008FE60.o(.text)
|
||||||
|
build/asm/boot_0x8008FEB0.o(.text)
|
||||||
|
build/asm/boot_0x800900C0.o(.text)
|
||||||
|
build/asm/sptaskyielded.o(.text)
|
||||||
|
build/asm/memcmp.o(.text)
|
||||||
|
build/asm/gettime.o(.text)
|
||||||
|
build/asm/boot_0x800904B0.o(.text)
|
||||||
|
build/asm/setglobalintmask.o(.text)
|
||||||
|
build/asm/boot_0x800906D0.o(.text)
|
||||||
|
build/asm/boot_0x80090810.o(.text)
|
||||||
|
build/asm/boot_0x80090900.o(.text)
|
||||||
|
build/asm/boot_0x80090AF0.o(.text)
|
||||||
|
build/asm/boot_0x80090C40.o(.text)
|
||||||
|
build/asm/boot_0x80090E70.o(.text)
|
||||||
|
build/asm/boot_0x800910A0.o(.text)
|
||||||
|
build/asm/boot_0x80091210.o(.text)
|
||||||
|
build/asm/boot_0x80091220.o(.text)
|
||||||
|
build/asm/setcompare.o(.text)
|
||||||
|
build/asm/getcompare.o(.text)
|
||||||
|
build/asm/dpgetstat.o(.text)
|
||||||
|
build/asm/dpsetstat.o(.text)
|
||||||
|
build/asm/bcopy.o(.text)
|
||||||
|
build/asm/resetglobalintmask.o(.text)
|
||||||
|
build/asm/boot_0x80091630.o(.text)
|
||||||
|
build/asm/ortho.o(.text)
|
||||||
|
build/asm/interrupt.o(.text)
|
||||||
|
build/asm/vi.o(.text)
|
||||||
|
build/asm/viswapcontext.o(.text)
|
||||||
|
build/asm/pigetcmdq.o(.text)
|
||||||
|
build/asm/cosf.o(.text)
|
||||||
|
build/asm/boot_0x800920B0.o(.text)
|
||||||
|
build/asm/boot_0x80092100.o(.text)
|
||||||
|
build/asm/coss.o(.text)
|
||||||
|
build/asm/settime.o(.text)
|
||||||
|
build/asm/boot_0x800922C0.o(.text)
|
||||||
|
build/asm/boot_0x80092440.o(.text)
|
||||||
|
build/asm/boot_0x80092730.o(.text)
|
||||||
|
build/asm/boot_0x80092920.o(.text)
|
||||||
|
build/asm/boot_0x80092A80.o(.text)
|
||||||
|
build/asm/boot_0x80092C00.o(.text)
|
||||||
|
build/asm/contsetch.o(.text)
|
||||||
|
build/asm/setfpccsr.o(.text)
|
||||||
|
build/asm/getfpccsr.o(.text)
|
||||||
|
build/asm/boot_0x80092D00.o(.text)
|
||||||
|
build/asm/boot_0x80092EE0.o(.text)
|
||||||
|
build/asm/boot_0x800931F0.o(.text)
|
||||||
|
build/asm/aigetlen.o(.text)
|
||||||
|
build/asm/boot_0x80093BB0.o(.text)
|
||||||
|
build/asm/maptlbrdb.o(.text)
|
||||||
|
build/asm/yieldthread.o(.text)
|
||||||
|
build/asm/boot_0x80093CC0.o(.text)
|
||||||
|
build/asm/getcause.o(.text)
|
||||||
|
build/asm/boot_0x80093DA0.o(.text)
|
||||||
|
build/asm/boot_0x80093FF0.o(.text)
|
||||||
|
build/asm/settimer.o(.text)
|
||||||
|
build/asm/xldtob.o(.text)
|
||||||
|
build/asm/ldiv.o(.text)
|
||||||
|
build/asm/xlitob.o(.text)
|
||||||
|
build/asm/sirawread.o(.text)
|
||||||
|
build/asm/spgetstat.o(.text)
|
||||||
|
build/asm/spsetstat.o(.text)
|
||||||
|
build/asm/vimgr.o(.text)
|
||||||
|
build/asm/vigetcurrcontext.o(.text)
|
||||||
|
build/asm/writebackdcacheall.o(.text)
|
||||||
|
build/src/libultra/os/getcurrfaultthread.o(.text)
|
||||||
|
build/asm/boot_0x80095600.o(.text)
|
||||||
|
build/asm/boot_0x80095740.o(.text)
|
||||||
|
build/src/libultra/os/startthread.o(.text)
|
||||||
|
build/asm/boot_0x80095900.o(.text)
|
||||||
|
build/asm/boot_0x80095950.o(.text)
|
||||||
|
build/asm/llcvt.o(.text)
|
||||||
|
build/asm/boot_0x80095C70.o(.text)
|
||||||
|
build/asm/boot_0x80096360.o(.text)
|
||||||
|
build/asm/boot_0x80096410.o(.text)
|
||||||
|
build/asm/boot_0x800964D0.o(.text)
|
||||||
|
build/asm/spsetpc.o(.text)
|
||||||
|
build/asm/boot_0x80096540.o(.text)
|
||||||
|
build/asm/boot_0x80096770.o(.text)
|
||||||
|
build/asm/boot_0x800967A0.o(.text)
|
||||||
|
build/asm/boot_0x80096810.o(.text)
|
||||||
|
build/asm/boot_0x80096820.o(.text)
|
||||||
|
build/asm/boot_0x80096880.o(.text)
|
||||||
|
build/asm/boot_0x800968B0.o(.text)
|
||||||
|
build/asm/boot_0x800968F0.o(.text)
|
||||||
|
build/asm/boot_0x80096930.o(.text)
|
||||||
|
}
|
||||||
|
|
||||||
|
code 0x800A5AC0:
|
||||||
|
{
|
||||||
|
build/asm/code_0x800A5AC0.o(.text)
|
||||||
|
build/asm/code_0x800A5D00.o(.text)
|
||||||
|
build/asm/code_0x800A81F0.o(.text)
|
||||||
|
build/asm/code_0x800ACBF0.o(.text)
|
||||||
|
build/asm/code_0x800B32D0.o(.text)
|
||||||
|
build/asm/code_0x800B3AD0.o(.text)
|
||||||
|
build/asm/code_0x800BF9A0.o(.text)
|
||||||
|
build/asm/code_0x800BFB80.o(.text)
|
||||||
|
build/asm/code_0x800CAAD0.o(.text)
|
||||||
|
build/asm/code_0x800CAE10.o(.text)
|
||||||
|
build/asm/code_0x800E03A0.o(.text)
|
||||||
|
build/asm/code_0x800E0410.o(.text)
|
||||||
|
build/asm/code_0x800E8EA0.o(.text)
|
||||||
|
build/asm/code_0x800E9360.o(.text)
|
||||||
|
build/asm/code_0x800E9C90.o(.text)
|
||||||
|
build/asm/code_0x800EE320.o(.text)
|
||||||
|
build/asm/code_0x800EFE60.o(.text)
|
||||||
|
build/asm/code_0x800F0390.o(.text)
|
||||||
|
build/asm/code_0x800F05C0.o(.text)
|
||||||
|
build/asm/code_0x800F07C0.o(.text)
|
||||||
|
build/asm/code_0x800F1250.o(.text)
|
||||||
|
build/asm/code_0x800F1460.o(.text)
|
||||||
|
build/asm/code_0x800F2620.o(.text)
|
||||||
|
build/asm/code_0x800F2D30.o(.text)
|
||||||
|
build/asm/code_0x800F42A0.o(.text)
|
||||||
|
build/asm/code_0x800F4F40.o(.text)
|
||||||
|
build/asm/code_0x800F5090.o(.text)
|
||||||
|
build/asm/code_0x800FEC90.o(.text)
|
||||||
|
build/asm/code_0x801005C0.o(.text)
|
||||||
|
build/asm/code_0x80102C60.o(.text)
|
||||||
|
build/asm/code_0x80102E40.o(.text)
|
||||||
|
build/asm/code_0x8010A000.o(.text)
|
||||||
|
build/asm/code_0x8010A760.o(.text)
|
||||||
|
build/asm/code_0x8010C0C0.o(.text)
|
||||||
|
build/asm/code_0x8010C230.o(.text)
|
||||||
|
build/asm/code_0x8010CB80.o(.text)
|
||||||
|
build/asm/code_0x80122660.o(.text)
|
||||||
|
build/asm/code_0x801226E0.o(.text)
|
||||||
|
build/asm/code_0x8012BC50.o(.text)
|
||||||
|
build/asm/code_0x8012D510.o(.text)
|
||||||
|
build/asm/code_0x8012EC80.o(.text)
|
||||||
|
build/asm/code_0x8012F2E0.o(.text)
|
||||||
|
build/asm/code_0x801307C0.o(.text)
|
||||||
|
build/asm/code_0x801322C0.o(.text)
|
||||||
|
build/asm/code_0x801323D0.o(.text)
|
||||||
|
build/asm/code_0x80137970.o(.text)
|
||||||
|
build/asm/code_0x80138410.o(.text)
|
||||||
|
build/asm/code_0x80138BA0.o(.text)
|
||||||
|
build/asm/code_0x8013A240.o(.text)
|
||||||
|
build/asm/code_0x8013A7C0.o(.text)
|
||||||
|
build/asm/code_0x8013EC10.o(.text)
|
||||||
|
build/asm/code_0x8013EE60.o(.text)
|
||||||
|
build/asm/code_0x80140260.o(.text)
|
||||||
|
build/asm/code_0x80140E80.o(.text)
|
||||||
|
build/asm/code_0x801418B0.o(.text)
|
||||||
|
build/asm/code_0x801420C0.o(.text)
|
||||||
|
build/asm/code_0x80142440.o(.text)
|
||||||
|
build/asm/code_0x80147520.o(.text)
|
||||||
|
build/asm/code_0x801588D0.o(.text)
|
||||||
|
build/asm/code_0x8015E750.o(.text)
|
||||||
|
build/asm/code_0x80160A90.o(.text)
|
||||||
|
build/asm/code_0x80161180.o(.text)
|
||||||
|
build/asm/code_0x801639A0.o(.text)
|
||||||
|
build/asm/code_0x80163C90.o(.text)
|
||||||
|
build/asm/code_0x80163DC0.o(.text)
|
||||||
|
build/asm/code_0x801647D0.o(.text)
|
||||||
|
build/asm/code_0x80164AF0.o(.text)
|
||||||
|
build/asm/code_0x801651B0.o(.text)
|
||||||
|
build/asm/code_0x8016AC10.o(.text)
|
||||||
|
build/asm/code_0x801727F0.o(.text)
|
||||||
|
build/asm/code_0x80172A00.o(.text)
|
||||||
|
build/asm/code_0x80172BC0.o(.text)
|
||||||
|
build/asm/code_0x80172C30.o(.text)
|
||||||
|
build/asm/code_0x80173130.o(.text)
|
||||||
|
build/asm/code_0x80173BF0.o(.text)
|
||||||
|
build/asm/code_0x80173D30.o(.text)
|
||||||
|
build/asm/code_0x80174A40.o(.text)
|
||||||
|
build/asm/code_0x80174AA0.o(.text)
|
||||||
|
build/asm/code_0x80174BF0.o(.text)
|
||||||
|
build/asm/code_0x80174F10.o(.text)
|
||||||
|
build/asm/code_0x80176280.o(.text)
|
||||||
|
build/asm/code_0x80177390.o(.text)
|
||||||
|
build/asm/code_0x80178750.o(.text)
|
||||||
|
build/asm/code_0x80178F30.o(.text)
|
||||||
|
build/asm/code_0x801795F0.o(.text)
|
||||||
|
build/asm/code_0x80180160.o(.text)
|
||||||
|
build/asm/code_0x80182CE0.o(.text)
|
||||||
|
build/asm/code_0x80183070.o(.text)
|
||||||
|
build/asm/code_0x801830A0.o(.text)
|
||||||
|
build/asm/code_0x80185F90.o(.text)
|
||||||
|
build/asm/code_0x801877D0.o(.text)
|
||||||
|
build/asm/code_0x8018B0F0.o(.text)
|
||||||
|
build/asm/code_0x8018EB60.o(.text)
|
||||||
|
build/asm/code_0x80192BE0.o(.text)
|
||||||
|
build/asm/code_0x80194710.o(.text)
|
||||||
|
build/asm/code_0x80194930.o(.text)
|
||||||
|
build/asm/code_0x801974D0.o(.text)
|
||||||
|
build/asm/code_0x8019AE40.o(.text)
|
||||||
|
build/asm/code_0x8019AEC0.o(.text)
|
||||||
|
build/asm/code_0x8019AF00.o(.text)
|
||||||
|
build/asm/code_0x801A51F0.o(.text)
|
||||||
|
build/asm/code_0x801A5BD0.o(.text)
|
||||||
|
build/asm/code_0x801A7B10.o(.text)
|
||||||
|
build/asm/code_0x801AA020.o(.text)
|
||||||
|
build/asm/code_0x801AA610.o(.text)
|
||||||
|
build/asm/code_0x801AAAA0.o(.text)
|
||||||
|
build/asm/code_0x801AAAB0.o(.text)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,629 @@
|
||||||
|
import os
|
||||||
|
import struct
|
||||||
|
|
||||||
|
SPLIT_FILES = True
|
||||||
|
GENERATE_HEADERS = True
|
||||||
|
|
||||||
|
loadHighRefs = {}
|
||||||
|
loadLowRefs = {}
|
||||||
|
|
||||||
|
from objects import *
|
||||||
|
from functions import *
|
||||||
|
from variables import *
|
||||||
|
from files import *
|
||||||
|
|
||||||
|
regs = {
|
||||||
|
0:"$zero", 1:"$at", 2:"$v0", 3:"$v1", 4:"$a0", 5:"$a1", 6:"$a2", 7:"$a3",
|
||||||
|
8:"$t0", 9:"$t1", 10:"$t2", 11:"$t3", 12:"$t4", 13:"$t5", 14:"$t6", 15:"$t7",
|
||||||
|
16:"$s0", 17:"$s1", 18:"$s2", 19:"$s3", 20:"$s4", 21:"$s5", 22:"$s6", 23:"$s7",
|
||||||
|
24:"$t8", 25:"$t9", 26:"$k0", 27:"$k1", 28:"$gp", 29:"$sp", 30:"$fp", 31:"$ra",
|
||||||
|
}
|
||||||
|
|
||||||
|
ops = {
|
||||||
|
2:"j", 3:"jal", 4:"beq", 5:"bne", 6:"blez", 7:"bgtz",
|
||||||
|
8:"addi", 9:"addiu", 10:"slti", 11:"sltiu", 12:"andi", 13:"ori", 14:"xori", 15:"lui",
|
||||||
|
20:"beql", 21:"bnel", 22:"blezl", 23:"bgtzl",
|
||||||
|
24:"daddi", 25:"daddiu",
|
||||||
|
32:"lb", 33:"lh", 34:"lwl", 35:"lw", 36:"lbu", 37:"lhu", 38:"lwr",
|
||||||
|
40:"sb", 41:"sh", 42:"swl", 43:"sw", 46:"swr", 47:"cache",
|
||||||
|
48:"ll", 49:"lwc1", 50:"lwc2", 51:"pref", 53:"ldc1", 54:"ldc2", 55:"ld",
|
||||||
|
56:"sc", 57:"swc1", 58:"swc2", 61:"sdc1", 62:"sdc2", 63:"sd",
|
||||||
|
}
|
||||||
|
|
||||||
|
funcs = {
|
||||||
|
0:"sll", 2:"srl", 3:"sra", 4:"sllv", 6:"srlv", 7:"srav",
|
||||||
|
8:"jr", 9:"jalr", 10:"movz", 11:"movn", 12:"syscall", 13:"break", 15:"sync",
|
||||||
|
16:"mfhi", 17:"mthi", 18:"mflo", 19:"mtlo", 20:"dsllv", 22:"dsrlv", 23:"dsrav",
|
||||||
|
24:"mult", 25:"multu", 26:"div", 27:"divu", 28:"dmult", 29:"dmultu", 30:"ddiv", 31:"ddivu",
|
||||||
|
32:"add", 33:"addu", 34:"sub", 35:"subu", 36:"and", 37:"or", 38:"xor", 39:"nor",
|
||||||
|
42:"slt", 43:"sltu", 44:"dadd", 45:"daddu",
|
||||||
|
48:"tge", 49:"tgeu", 50:"tlt", 51:"tltu", 52:"teq", 54:"tne",
|
||||||
|
56:"dsll", 59:"dsra", 60:"dsll32", 63:"dsra32",
|
||||||
|
}
|
||||||
|
|
||||||
|
branch1reg = {
|
||||||
|
0:"bltz", 1:"bgez", 2:"bltzl", 3:"bgezl",
|
||||||
|
8:"tgei", 9:"tgeiu", 10:"tlti", 11:"tltiu", 12:"tegi", 14:"tnei",
|
||||||
|
16:"bltzal", 17:"bgezal", 18:"bltall", 19:"bgczall",
|
||||||
|
}
|
||||||
|
|
||||||
|
floats = {
|
||||||
|
0:"add", 1:"sub", 2:"mul", 3:"div", 4:"sqrt", 5:"abs", 6:"mov", 7:"neg",
|
||||||
|
8:"round.l", 9:"trunc.l", 10:"ceil.l", 11:"floor.l", 12:"round.w", 13:"trunc.w", 14:"ceil.w", 15:"floor.w",
|
||||||
|
18:"movz", 19:"movn",
|
||||||
|
32:"cvt.s", 33:"cvt.d", 36:"cvt.w", 37:"cvt.l",
|
||||||
|
48:"c.f", 49:"c.un", 50:"c.eq", 51:"c.ueq", 52:"c.olt", 53:"c.ult", 54:"c.ole", 55:"c.ule",
|
||||||
|
56:"c.sf", 57:"c.ngle", 58:"c.seq", 59:"c.ngl", 60:"c.lt", 61:"c.nge", 62:"c.le", 63:"c.ngt",
|
||||||
|
}
|
||||||
|
|
||||||
|
def read_file(name):
|
||||||
|
file_data=[]
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(name, 'rb') as f:
|
||||||
|
file_data = f.read()
|
||||||
|
except IOError:
|
||||||
|
print('failed to read file ' + name)
|
||||||
|
return file_data
|
||||||
|
|
||||||
|
|
||||||
|
def float_reg(num):
|
||||||
|
if num == 31:
|
||||||
|
return "$31"
|
||||||
|
return "$f%d" % num
|
||||||
|
|
||||||
|
|
||||||
|
def get_op(inst):
|
||||||
|
return (inst & 0b11111100000000000000000000000000) >> 26
|
||||||
|
|
||||||
|
|
||||||
|
def get_func(inst):
|
||||||
|
return (inst & 0b00000000000000000000000000111111)
|
||||||
|
|
||||||
|
|
||||||
|
def get_rs(inst):
|
||||||
|
return (inst & 0b00000011111000000000000000000000) >> 21
|
||||||
|
|
||||||
|
|
||||||
|
def get_rt(inst):
|
||||||
|
return (inst & 0b00000000000111110000000000000000) >> 16
|
||||||
|
|
||||||
|
|
||||||
|
def get_rd(inst):
|
||||||
|
return (inst & 0b00000000000000001111100000000000) >> 11
|
||||||
|
|
||||||
|
|
||||||
|
def get_shift(inst):
|
||||||
|
return (inst & 0b00000000000000000000011111000000) >> 6
|
||||||
|
|
||||||
|
|
||||||
|
def get_ft(inst):
|
||||||
|
return (inst & 0b00000000000111110000000000000000) >> 16
|
||||||
|
|
||||||
|
|
||||||
|
def get_fs(inst):
|
||||||
|
return (inst & 0b00000000000000001111100000000000) >> 11
|
||||||
|
|
||||||
|
|
||||||
|
def get_fd(inst):
|
||||||
|
return (inst & 0b00000000000000000000011111000000) >> 6
|
||||||
|
|
||||||
|
|
||||||
|
def get_imm(inst):
|
||||||
|
return inst & 0b00000000000000001111111111111111
|
||||||
|
|
||||||
|
|
||||||
|
def get_signed_imm(inst):
|
||||||
|
imm = get_imm(inst)
|
||||||
|
if (imm & (1 << 15)) != 0:
|
||||||
|
imm = -2**15 + (imm & 0b00000000000000000111111111111111)
|
||||||
|
return imm
|
||||||
|
|
||||||
|
|
||||||
|
def is_load(inst):
|
||||||
|
return get_op(inst) > 31
|
||||||
|
|
||||||
|
|
||||||
|
def get_func_name(addr):
|
||||||
|
if addr in known_funcs:
|
||||||
|
return known_funcs[addr][0]
|
||||||
|
else:
|
||||||
|
return "func_%08X" % addr
|
||||||
|
|
||||||
|
|
||||||
|
def get_symbol_name(addr):
|
||||||
|
if addr in known_vars and known_vars[addr][0] != "":
|
||||||
|
return known_vars[addr][0]
|
||||||
|
else:
|
||||||
|
return "D_%08X" % addr
|
||||||
|
|
||||||
|
|
||||||
|
def write_header(file):
|
||||||
|
file.write(".set noat # allow use of $at\n.set noreorder # don't insert nops after branches\n.set gp=64 # allow use of 64bit registers\n\n");
|
||||||
|
|
||||||
|
|
||||||
|
# TODO add code_regions?
|
||||||
|
class Disassembler:
|
||||||
|
|
||||||
|
class File:
|
||||||
|
def __init__(self, name, data, vaddr):
|
||||||
|
self.name = name
|
||||||
|
self.data = data
|
||||||
|
self.vaddr = vaddr
|
||||||
|
self.size = len(data)
|
||||||
|
|
||||||
|
def get_inst(self, num):
|
||||||
|
offset = num*4
|
||||||
|
return struct.unpack('>I', self.data[offset:offset+4])[0]
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.files = list()
|
||||||
|
self.objects = set()
|
||||||
|
self.functions = set()
|
||||||
|
self.labels = set()
|
||||||
|
self.vars = set()
|
||||||
|
self.data_regions = list()
|
||||||
|
|
||||||
|
self.is_data_cache = {}
|
||||||
|
self.is_code_cache = {}
|
||||||
|
|
||||||
|
def load_defaults(self):
|
||||||
|
for file in known_files:
|
||||||
|
self.add_file(file[0], file[1], file[2])
|
||||||
|
self.add_object(file[2]) # assume every file starts with a object and function
|
||||||
|
self.add_function(file[2])
|
||||||
|
for region in file[3]:
|
||||||
|
self.add_data_region(region[0], region[1])
|
||||||
|
|
||||||
|
for addr in known_funcs:
|
||||||
|
self.add_function(addr)
|
||||||
|
|
||||||
|
for addr in known_objects:
|
||||||
|
self.add_object(addr)
|
||||||
|
self.add_function(addr) # assume every object starts with a function
|
||||||
|
|
||||||
|
for addr in known_vars:
|
||||||
|
self.add_variable(addr)
|
||||||
|
|
||||||
|
def add_file(self, path, name, vaddr):
|
||||||
|
self.files.append(self.File(name, read_file(path), vaddr))
|
||||||
|
self.is_data_cache = {}
|
||||||
|
self.is_code_cache = {}
|
||||||
|
|
||||||
|
def add_object(self, addr):
|
||||||
|
self.objects.add(addr)
|
||||||
|
|
||||||
|
def add_function(self, addr):
|
||||||
|
self.functions.add(addr)
|
||||||
|
|
||||||
|
def add_variable(self, addr):
|
||||||
|
self.vars.add(addr)
|
||||||
|
|
||||||
|
def add_label(self, addr):
|
||||||
|
self.labels.add(addr)
|
||||||
|
|
||||||
|
def add_data_region(self, start, end):
|
||||||
|
self.data_regions.append((start, end))
|
||||||
|
self.is_data_cache = {}
|
||||||
|
self.is_code_cache = {}
|
||||||
|
|
||||||
|
def is_in_data(self, addr):
|
||||||
|
if addr in self.is_data_cache:
|
||||||
|
return self.is_data_cache[addr]
|
||||||
|
|
||||||
|
start = 0;
|
||||||
|
last = len(self.data_regions) - 1
|
||||||
|
while start <= last:
|
||||||
|
midpoint = (start + last) // 2
|
||||||
|
if addr >= self.data_regions[midpoint][0]:
|
||||||
|
if addr <= self.data_regions[midpoint][1]:
|
||||||
|
self.is_data_cache[addr] = True
|
||||||
|
return True;
|
||||||
|
else:
|
||||||
|
start = midpoint + 1
|
||||||
|
else:
|
||||||
|
last = midpoint - 1
|
||||||
|
|
||||||
|
self.is_data_cache[addr] = False
|
||||||
|
return False
|
||||||
|
|
||||||
|
def is_in_code(self, addr):
|
||||||
|
if addr in self.is_code_cache:
|
||||||
|
return self.is_code_cache[addr]
|
||||||
|
|
||||||
|
start = 0;
|
||||||
|
last = len(self.files) - 1
|
||||||
|
while start <= last:
|
||||||
|
midpoint = (start + last) // 2
|
||||||
|
if addr >= self.files[midpoint].vaddr:
|
||||||
|
if addr < (self.files[midpoint].vaddr + self.files[midpoint].size):
|
||||||
|
self.is_code_cache[addr] = not self.is_in_data(addr)
|
||||||
|
return self.is_code_cache[addr];
|
||||||
|
else:
|
||||||
|
start = midpoint + 1
|
||||||
|
else:
|
||||||
|
last = midpoint - 1
|
||||||
|
|
||||||
|
self.is_code_cache[addr] = False
|
||||||
|
return False
|
||||||
|
|
||||||
|
def is_in_data_or_undef(self, addr):
|
||||||
|
# return true if it is in a defined data region
|
||||||
|
if self.is_in_data(addr):
|
||||||
|
return True
|
||||||
|
|
||||||
|
# otherwise return false if it is in a file's bounds
|
||||||
|
if self.is_in_code(addr):
|
||||||
|
return False
|
||||||
|
|
||||||
|
# otherwise it is undefined (return true)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def make_label(self, imm, cur):
|
||||||
|
addr = (imm*4) + cur + 4
|
||||||
|
self.add_label(addr)
|
||||||
|
return ".L_%08X" % addr
|
||||||
|
|
||||||
|
def make_func(self, imm, cur):
|
||||||
|
addr = (imm*4) + (cur & 0xF0000000)
|
||||||
|
self.add_function(addr)
|
||||||
|
return get_func_name(addr)
|
||||||
|
|
||||||
|
def make_load(self, addr):
|
||||||
|
if self.is_in_data_or_undef(addr):
|
||||||
|
return get_symbol_name(addr)
|
||||||
|
else:
|
||||||
|
return get_func_name(addr)
|
||||||
|
|
||||||
|
# TODO refactor to remove file_addr
|
||||||
|
def get_object_name(self, addr, file_addr):
|
||||||
|
filename = "";
|
||||||
|
|
||||||
|
for file in self.files:
|
||||||
|
if file_addr == file.vaddr:
|
||||||
|
filename = file.name
|
||||||
|
|
||||||
|
if filename == "":
|
||||||
|
print("Bad file_addr passed to get_object_name: 0x%0X" % addr)
|
||||||
|
return
|
||||||
|
|
||||||
|
if SPLIT_FILES:
|
||||||
|
if addr in known_objects and known_objects[addr] != "": # no name means object boundary is known but not the name
|
||||||
|
return known_objects[addr]
|
||||||
|
else:
|
||||||
|
return '%s_0x%08X' % (filename, addr)
|
||||||
|
else:
|
||||||
|
return "%s" % filename
|
||||||
|
|
||||||
|
def guess_functions_from_data(self):
|
||||||
|
for file in self.files:
|
||||||
|
for i in range(0, file.size // 4):
|
||||||
|
word = file.get_inst(i)
|
||||||
|
addr = file.vaddr + i*4
|
||||||
|
if self.is_in_data(addr) and self.is_in_code(word):
|
||||||
|
self.add_function(word)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def disassemble(self, path):
|
||||||
|
# TODO keep sorted
|
||||||
|
self.files = sorted(self.files, key = lambda file: file.vaddr)
|
||||||
|
self.data_regions = sorted(self.data_regions, key = lambda region: region[0])
|
||||||
|
|
||||||
|
self.__first_pass()
|
||||||
|
self.guess_functions_from_data()
|
||||||
|
self.__second_pass(path)
|
||||||
|
|
||||||
|
def __first_pass(self):
|
||||||
|
for file in self.files:
|
||||||
|
for i in range(0, file.size // 4):
|
||||||
|
inst = file.get_inst(i)
|
||||||
|
addr = file.vaddr + i*4
|
||||||
|
if not self.is_in_data_or_undef(addr):
|
||||||
|
self.disassemble_inst(inst, addr, i, file)
|
||||||
|
|
||||||
|
if inst == 0x03E00008: # jr $ra
|
||||||
|
next_index = i+2
|
||||||
|
if file.get_inst(next_index) == 0: # nop
|
||||||
|
while file.get_inst(next_index) == 0:
|
||||||
|
next_index += 1
|
||||||
|
|
||||||
|
new_object_start = file.vaddr + next_index*4 + 15
|
||||||
|
new_object_start -= new_object_start % 16
|
||||||
|
|
||||||
|
# don't split if it's the start of a data section, it's probably the same object
|
||||||
|
if not self.is_in_data_or_undef(new_object_start):
|
||||||
|
self.add_object(new_object_start)
|
||||||
|
|
||||||
|
def __second_pass(self, path):
|
||||||
|
for file in self.files:
|
||||||
|
filename = path + '/%s.asm' % self.get_object_name(file.vaddr, file.vaddr);
|
||||||
|
|
||||||
|
with open(filename, 'w') as f:
|
||||||
|
write_header(f)
|
||||||
|
|
||||||
|
for i in range(0, file.size // 4):
|
||||||
|
inst = file.get_inst(i)
|
||||||
|
addr = file.vaddr + i*4
|
||||||
|
|
||||||
|
if addr in self.objects and SPLIT_FILES:
|
||||||
|
f.close();
|
||||||
|
filename = path + '/%s.asm' % self.get_object_name(addr, file.vaddr);
|
||||||
|
f = open(filename, 'w')
|
||||||
|
write_header(f)
|
||||||
|
|
||||||
|
if addr in self.labels:
|
||||||
|
f.write(".L_%08X:\n" % addr)
|
||||||
|
if addr in self.functions:
|
||||||
|
name = get_func_name(addr)
|
||||||
|
f.write("\n.global %s\n%s:\n" % (name, name))
|
||||||
|
if addr in self.vars:
|
||||||
|
name = self.make_load(addr)
|
||||||
|
f.write(".global %s\n%s:\n" % (name, name))
|
||||||
|
|
||||||
|
if not self.is_in_data_or_undef(addr):
|
||||||
|
f.write("/* %06d 0x%08X %08X */ %s\n" % (i, addr, inst, self.disassemble_inst(inst, addr, i, file)))
|
||||||
|
else:
|
||||||
|
f.write("/* %06d 0x%08X */ .word\t0x%08X\n" % (i, addr, inst))
|
||||||
|
|
||||||
|
def determine_load_ref(self, file, inst_i):
|
||||||
|
# TODO better detect when the register gets dirty
|
||||||
|
pc = file.vaddr + inst_i*4
|
||||||
|
cur_inst = file.get_inst(inst_i)
|
||||||
|
|
||||||
|
if get_op(cur_inst) != 15:
|
||||||
|
return
|
||||||
|
|
||||||
|
prev_was_jump = False
|
||||||
|
|
||||||
|
for i in range(1, 7): # TODO find a good limit
|
||||||
|
next_inst = file.get_inst(inst_i + i)
|
||||||
|
|
||||||
|
if get_op(next_inst) == 15 and get_rt(cur_inst) == get_rt(next_inst):
|
||||||
|
return # return if another lui overwrites reg
|
||||||
|
|
||||||
|
if (get_op(next_inst) == 9) and (get_rt(cur_inst) == get_rt(next_inst) == get_rs(next_inst)): # lui + addiu (move pointer)
|
||||||
|
addr = (get_imm(cur_inst) << 16) + get_signed_imm(next_inst)
|
||||||
|
if self.is_in_data_or_undef(addr):
|
||||||
|
self.add_variable(addr)
|
||||||
|
else:
|
||||||
|
self.add_function(addr)
|
||||||
|
loadHighRefs[pc] = addr
|
||||||
|
loadLowRefs[pc + 4*i] = addr
|
||||||
|
return
|
||||||
|
|
||||||
|
elif is_load(next_inst) and (get_rt(cur_inst) == get_rs(next_inst)): # lui + load (load pointer)
|
||||||
|
addr = (get_imm(cur_inst) << 16) + get_signed_imm(next_inst)
|
||||||
|
if self.is_in_data_or_undef(addr):
|
||||||
|
self.add_variable(addr)
|
||||||
|
else:
|
||||||
|
print("Warning: Pointer load location is in code 0x%08X" % addr)
|
||||||
|
self.add_variable(addr)
|
||||||
|
loadHighRefs[pc] = addr
|
||||||
|
loadLowRefs[pc + 4*i] = addr
|
||||||
|
return
|
||||||
|
|
||||||
|
# if this is a jump, mark to return after we evaluate the following instruction
|
||||||
|
if prev_was_jump:
|
||||||
|
return
|
||||||
|
if get_op(next_inst) == 2 or get_op(next_inst) == 3:
|
||||||
|
prev_was_jump = True
|
||||||
|
|
||||||
|
def disassemble_inst(self, inst, addr, i, file):
|
||||||
|
if inst == 0:
|
||||||
|
return "nop"
|
||||||
|
|
||||||
|
dis = ""
|
||||||
|
op_num = get_op(inst)
|
||||||
|
|
||||||
|
if op_num == 0:
|
||||||
|
func = get_func(inst)
|
||||||
|
if func == 1:
|
||||||
|
cc = (inst & (7 << 18)) >> 18
|
||||||
|
if (inst & (1 << 16)) == 0:
|
||||||
|
dis += "movf\t%s, %s, %d" % (regs[get_rd(inst)], regs[get_rs(inst)], cc)
|
||||||
|
else:
|
||||||
|
dis += "movt\t%s, %s, %d" % (regs[get_rd(inst)], regs[get_rs(inst)], cc)
|
||||||
|
else:
|
||||||
|
if func not in funcs:
|
||||||
|
dis += "func_error: %d" % func
|
||||||
|
else:
|
||||||
|
if func == 37 and get_rt(inst) == 0: # or with zero reg is move
|
||||||
|
return "move\t%s, %s" % (regs[get_rd(inst)], regs[get_rs(inst)])
|
||||||
|
dis += "%s\t" % funcs[func]
|
||||||
|
if func == 0 or func == 2 or func == 3 or func == 56 or func == 59 or func == 60 or func == 63: # sll, srl, sra, dsll, dsra dsll32, dsra32
|
||||||
|
dis += "%s, %s, %d" % (regs[get_rd(inst)], regs[get_rt(inst)], get_shift(inst))
|
||||||
|
elif func == 4 or func == 6 or func == 7: # sllv, srlv, srav
|
||||||
|
dis += "%s, %s, %s" % (regs[get_rd(inst)], regs[get_rt(inst)], regs[get_rs(inst)])
|
||||||
|
elif func == 8 or func == 9: # jr, jalr
|
||||||
|
dis += "%s" % regs[get_rs(inst)]
|
||||||
|
elif func == 13: # break
|
||||||
|
dis += "0x%05X" % ((inst & (0xFFFFF << 6)) >> 16) # TODO the error code is 20 bits in the manual, why does gas want something else?
|
||||||
|
elif func == 16 or func == 18: # mfhi, mflo
|
||||||
|
dis += "%s" % regs[get_rd(inst)]
|
||||||
|
elif func == 17 or func == 19: # mthi, mtlo
|
||||||
|
dis += "%s" % regs[get_rs(inst)]
|
||||||
|
elif func == 24 or func == 25 or func == 28 or func == 29: # mult, multu, dmult, dmultu
|
||||||
|
dis += "%s, %s" % (regs[get_rs(inst)], regs[get_rt(inst)])
|
||||||
|
elif func == 26 or func == 27 or func == 30 or func == 31: # div, divu, ddiv, ddivu
|
||||||
|
dis += "$zero, %s, %s" % (regs[get_rs(inst)], regs[get_rt(inst)]) # TODO why does this need $zero for gas to not think it's a macro?
|
||||||
|
elif func == 34 and get_rs(inst) == 0: # sub with $zero is neg
|
||||||
|
dis = "neg\t%s, %s" % (regs[get_rd(inst)], regs[get_rt(inst)])
|
||||||
|
elif func == 35 and get_rs(inst) == 0: # subu with $zero is negu
|
||||||
|
dis = "negu\t%s, %s" % (regs[get_rd(inst)], regs[get_rt(inst)])
|
||||||
|
elif func == 20 or func == 22 or func == 23: # doubleword ops
|
||||||
|
dis += "%s, %s, %s" % (regs[get_rd(inst)], regs[get_rt(inst)], regs[get_rs(inst)])
|
||||||
|
else: # add, sub, logical, etc.
|
||||||
|
dis += "%s, %s, %s" % (regs[get_rd(inst)], regs[get_rs(inst)], regs[get_rt(inst)])
|
||||||
|
# TODO traps
|
||||||
|
|
||||||
|
elif op_num == 1:
|
||||||
|
rt = get_rt(inst)
|
||||||
|
if rt not in branch1reg:
|
||||||
|
dis += "branch1reg_erro: %d" % rt
|
||||||
|
else:
|
||||||
|
# TODO traps
|
||||||
|
dis += "%s\t%s, %s" % (branch1reg[rt], regs[get_rs(inst)], self.make_label(get_signed_imm(inst), addr))
|
||||||
|
|
||||||
|
elif op_num == 16 or op_num == 17 or op_num == 18:
|
||||||
|
z = op_num - 16
|
||||||
|
rs = get_rs(inst)
|
||||||
|
if rs == 0:
|
||||||
|
dis += "mfc%d\t%s, %s" % (z, regs[get_rt(inst)], float_reg(get_rd(inst)) if z != 0 else "$%d" % get_rd(inst))
|
||||||
|
elif rs == 1:
|
||||||
|
dis += "dmfc%d\t%s, %s" % (z, regs[get_rt(inst)], float_reg(get_rd(inst)) if z != 0 else "$%d" % get_rd(inst))
|
||||||
|
elif rs == 2:
|
||||||
|
dis += "cfc%d\t%s, %s" % (z, regs[get_rt(inst)], float_reg(get_rd(inst)) if z != 0 else "$%d" % get_rd(inst))
|
||||||
|
elif rs == 4:
|
||||||
|
dis += "mtc%d\t%s, %s" % (z, regs[get_rt(inst)], float_reg(get_rd(inst)) if z != 0 else "$%d" % get_rd(inst))
|
||||||
|
elif rs == 5:
|
||||||
|
dis += "dmtc%d\t%s, %s" % (z, regs[get_rt(inst)], float_reg(get_rd(inst)) if z != 0 else "$%d" % get_rd(inst))
|
||||||
|
elif rs == 6:
|
||||||
|
dis += "ctc%d\t%s, %s" % (z, regs[get_rt(inst)], float_reg(get_rd(inst)) if z != 0 else "$%d" % get_rd(inst))
|
||||||
|
elif rs == 8:
|
||||||
|
dis += "bc%d%s%s %s" % (z, "f" if ((inst & (1 << 16)) == 0) else "t", "" if ((inst & (1 << 17)) == 0) else "l", self.make_label(get_signed_imm(inst), addr))
|
||||||
|
elif rs == 16 or rs == 17 or rs == 20 or rs == 21:
|
||||||
|
if z == 0:
|
||||||
|
func = get_func(inst)
|
||||||
|
if func == 1:
|
||||||
|
dis += "tlbr"
|
||||||
|
elif func == 2:
|
||||||
|
dis += "tlbwi"
|
||||||
|
elif func == 6:
|
||||||
|
dis += "tlbwr"
|
||||||
|
elif func == 8:
|
||||||
|
dis += "tlbp"
|
||||||
|
elif func == 24:
|
||||||
|
dis += "eret"
|
||||||
|
else:
|
||||||
|
# TODO deret?
|
||||||
|
dis += "cop0_error: %d" % func
|
||||||
|
elif z != 1:
|
||||||
|
dis += "cop_error: %d" % z
|
||||||
|
else:
|
||||||
|
if rs == 16:
|
||||||
|
f = "s"
|
||||||
|
elif rs == 17:
|
||||||
|
f = "d"
|
||||||
|
elif rs == 20:
|
||||||
|
f = "w"
|
||||||
|
elif rs == 21:
|
||||||
|
f = "l"
|
||||||
|
func = get_func(inst)
|
||||||
|
if func not in floats:
|
||||||
|
dis += "float_error: %d" % func
|
||||||
|
else:
|
||||||
|
dis += "%s.%s\t" % (floats[func], f)
|
||||||
|
if func == 0 or func == 1 or func == 2 or func == 3 or func == 18 or func == 19: # 3 op
|
||||||
|
dis += "%s, %s, %s" % (float_reg(get_fd(inst)), float_reg(get_fs(inst)), float_reg(get_ft(inst)))
|
||||||
|
elif (func == 4 or func == 5 or func == 6 or func == 7 or func == 8 or func == 9 or func == 10 or func == 11 or func == 12
|
||||||
|
or func == 13 or func == 14 or func == 15 or func == 32 or func == 33 or func == 36 or func == 37): # 2 op
|
||||||
|
dis += "%s, %s" % (float_reg(get_fd(inst)), float_reg(get_fs(inst)))
|
||||||
|
elif func == 50 or func == 60 or func == 62: # c.eq, c.lt, c.le
|
||||||
|
dis += "%s, %s" % (float_reg(get_fs(inst)), float_reg(get_ft(inst)))
|
||||||
|
else:
|
||||||
|
dis += "coproc_error: %d" % rs
|
||||||
|
|
||||||
|
elif op_num not in ops:
|
||||||
|
dis += "error: %d" % op_num
|
||||||
|
|
||||||
|
else:
|
||||||
|
dis += "%s\t" % ops[op_num]
|
||||||
|
if op_num == 2 or op_num == 3: # j, jal
|
||||||
|
dis += "%s" % self.make_func(inst & 0x3FFFFFF, addr);
|
||||||
|
elif op_num == 4 or op_num == 5 or op_num == 20 or op_num == 21: # beq, bne, beql, bnel
|
||||||
|
if op_num == 4 and get_rs(inst) == get_rt(inst) == 0: # beq with both zero regs is a branch always (b %label)
|
||||||
|
dis = "b\t%s" % self.make_label(get_signed_imm(inst), addr)
|
||||||
|
else:
|
||||||
|
if get_rt(inst) == 0: # branchs comparing to 0 have a shorthand
|
||||||
|
dis = "%s\t" % ("beqz" if op_num == 4 else "bnez" if op_num == 5 else "beqzl" if op_num == 20 else "bnezl")
|
||||||
|
dis += "%s, %s" % (regs[get_rs(inst)], self.make_label(get_signed_imm(inst), addr))
|
||||||
|
else:
|
||||||
|
dis += "%s, %s, %s" % (regs[get_rs(inst)], regs[get_rt(inst)], self.make_label(get_signed_imm(inst), addr))
|
||||||
|
elif op_num == 6 or op_num == 7 or op_num == 22 or op_num == 23: # blez, bgtz, blezl, bgtzl
|
||||||
|
dis += "%s, %s" % (regs[get_rs(inst)], self.make_label(get_signed_imm(inst), addr))
|
||||||
|
elif op_num == 8 or op_num == 9 or op_num == 10 or op_num == 11 or op_num == 24 or op_num == 25: # addi, addiu, slti, sltiu, daddi, daddiu
|
||||||
|
if op_num == 9 and get_rs(inst) == 0: # addiu with reg 0 is load immediate (li)
|
||||||
|
dis = "li\t%s, %d" % (regs[get_rt(inst)], get_signed_imm(inst))
|
||||||
|
elif op_num == 9 and addr in loadLowRefs: # addiu loading the lower half of a pointer
|
||||||
|
dis += "%s, %%lo(%s)" % (regs[get_rt(inst)], self.make_load(loadLowRefs[addr]))
|
||||||
|
else:
|
||||||
|
dis += "%s, %s, %d" % (regs[get_rt(inst)], regs[get_rs(inst)], get_signed_imm(inst))
|
||||||
|
elif op_num == 12 or op_num == 13 or op_num == 14: # andi, ori, xori
|
||||||
|
dis += "%s, %s, 0x%X" % (regs[get_rt(inst)], regs[get_rs(inst)], get_imm(inst))
|
||||||
|
elif op_num == 15: # lui
|
||||||
|
self.determine_load_ref(file, i)
|
||||||
|
if addr in loadHighRefs: # lui loading the higher half of a pointer
|
||||||
|
dis += "%s, %%hi(%s)" % (regs[get_rt(inst)], self.make_load(loadHighRefs[addr]))
|
||||||
|
else:
|
||||||
|
dis += "%s, 0x%04X" % (regs[get_rt(inst)], get_imm(inst))
|
||||||
|
elif (op_num == 32 or op_num == 33 or op_num == 34 or op_num == 35 or op_num == 38 or op_num == 40 or op_num == 41 or
|
||||||
|
op_num == 42 or op_num == 42 or op_num == 43 or op_num == 46 or op_num == 55 or op_num == 63): # load/stores
|
||||||
|
if addr in loadLowRefs: # loading with immediate forming lower half of pointer
|
||||||
|
dis += "%s, %%lo(%s)(%s)" % (regs[get_rt(inst)], self.make_load(loadLowRefs[addr]), regs[get_rs(inst)])
|
||||||
|
else:
|
||||||
|
dis += "%s, %d(%s)" % (regs[get_rt(inst)], get_signed_imm(inst), regs[get_rs(inst)])
|
||||||
|
elif op_num == 36 or op_num == 37: # lbu, lhu
|
||||||
|
if addr in loadLowRefs: # loading with immediate forming lower half of pointer
|
||||||
|
dis += "%s, %%lo(%s)(%s)" % (regs[get_rt(inst)], self.make_load(loadLowRefs[addr]), regs[get_rs(inst)])
|
||||||
|
else:
|
||||||
|
dis += "%s, %d(%s)" % (regs[get_rt(inst)], get_signed_imm(inst), regs[get_rs(inst)])
|
||||||
|
elif (op_num == 49 or op_num == 50 or op_num == 53 or op_num == 54 or op_num == 57 or op_num == 58 or
|
||||||
|
op_num == 61 or op_num == 62): # load/store between co-processors
|
||||||
|
if addr in loadLowRefs: # loading with immediate forming lower half of pointer
|
||||||
|
dis += "%s, %%lo(%s)(%s)" % (float_reg(get_rt(inst)), self.make_load(loadLowRefs[addr]), regs[get_rs(inst)])
|
||||||
|
else:
|
||||||
|
dis += "%s, %d(%s)" % (float_reg(get_rt(inst)), get_signed_imm(inst), regs[get_rs(inst)])
|
||||||
|
elif op_num == 47: # cache
|
||||||
|
if addr in loadLowRefs: # cache op with immediate forming lower half of pointer
|
||||||
|
dis += "0x%02X, %%lo(%s)(%s)" % (get_rt(inst), self.make_load(loadLowRefs[addr]), regs[get_rs(inst)])
|
||||||
|
else:
|
||||||
|
dis += "0x%02X, %d(%s)" % (get_rt(inst), get_signed_imm(inst), regs[get_rs(inst)])
|
||||||
|
|
||||||
|
return dis
|
||||||
|
|
||||||
|
def generate_headers(self, path):
|
||||||
|
with open(path + "functions.h", 'w', newline='\n') as f:
|
||||||
|
f.write("#ifndef _FUNCTIONS_H_\n#define _FUNCTIONS_H_\n\n");
|
||||||
|
|
||||||
|
f.write('#include <PR/ultratypes.h>\n#include <osint.h>\n#include <unk.h>\n#include <structs.h>\n\n');
|
||||||
|
|
||||||
|
for addr in sorted(self.functions):
|
||||||
|
if addr in known_funcs:
|
||||||
|
f.write("%s %s(%s); // func_%08X\n" % (known_funcs[addr][1], get_func_name(addr), known_funcs[addr][2], addr));
|
||||||
|
else:
|
||||||
|
f.write("// UNK_RET %s(UNK_ARGS);\n" % get_func_name(addr));
|
||||||
|
|
||||||
|
f.write("\n#endif\n");
|
||||||
|
|
||||||
|
with open(path + "variables.h", 'w', newline='\n') as f:
|
||||||
|
f.write("#ifndef _VARIABLES_H_\n#define _VARIABLES_H_\n\n");
|
||||||
|
|
||||||
|
f.write('#include <PR/ultratypes.h>\n#include <osint.h>\n#include <unk.h>\n#include <structs.h>\n\n');
|
||||||
|
|
||||||
|
for addr in sorted(self.vars):
|
||||||
|
if addr in known_vars:
|
||||||
|
f.write("extern %s %s%s; // D_%08X\n" % (known_vars[addr][1], self.make_load(addr), "[]" if known_vars[addr][2] else "", addr));
|
||||||
|
else:
|
||||||
|
f.write("//extern UNK_TYPE %s;\n" % self.make_load(addr));
|
||||||
|
|
||||||
|
f.write("\n// extra variables needed for one reason or another\n\n");
|
||||||
|
for (name, var_type) in extra_vars:
|
||||||
|
f.write("extern %s %s;\n" % (var_type, name));
|
||||||
|
|
||||||
|
f.write("\n#endif\n");
|
||||||
|
|
||||||
|
with open("undef.txt", 'w', newline='\n') as f:
|
||||||
|
for addr in sorted(self.vars):
|
||||||
|
f.write("%s = 0x%08X;\n" % (self.make_load(addr), addr));
|
||||||
|
|
||||||
|
# TODO not hard code
|
||||||
|
f.write("func_84001B0C = 0x84001B0C;\nfunc_840010CC = 0x840010CC;\nfunc_84001060 = 0x84001060;\nD_80920340 = 0x80920340;\nD_80922430 = 0x80922430;\n")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
dis = Disassembler()
|
||||||
|
dis.load_defaults()
|
||||||
|
dis.disassemble('./asm/')
|
||||||
|
dis.generate_headers('./')
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
import os
|
||||||
|
import struct
|
||||||
|
|
||||||
|
FILENAME = 'build/rom.elf'
|
||||||
|
OUT = 'rom.z64'
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(FILENAME, 'rb') as f:
|
||||||
|
fileData = f.read()
|
||||||
|
except IOError:
|
||||||
|
print('failed to read file ' + FILENAME)
|
||||||
|
|
||||||
|
def read_uint32_be(offset):
|
||||||
|
return struct.unpack('>I', fileData[offset:offset+4])[0]
|
||||||
|
|
||||||
|
def read_uint16_be(offset):
|
||||||
|
return struct.unpack('>H', fileData[offset:offset+2])[0]
|
||||||
|
|
||||||
|
with open(OUT, 'wb') as w:
|
||||||
|
sht_off = read_uint32_be(0x20)
|
||||||
|
sh_size = read_uint16_be(0x2E)
|
||||||
|
num_sections = read_uint16_be(0x30)
|
||||||
|
|
||||||
|
total_size = 0
|
||||||
|
for i in range(0, num_sections):
|
||||||
|
type_ = read_uint32_be(sht_off + i*sh_size + 0x04)
|
||||||
|
offset = read_uint32_be(sht_off + i*sh_size + 0x10)
|
||||||
|
size = read_uint32_be(sht_off + i*sh_size + 0x14)
|
||||||
|
if type_ == 1:# SHT_PROGBITS
|
||||||
|
total_size += size
|
||||||
|
w.write(fileData[offset:offset+size])
|
||||||
|
|
||||||
|
while total_size < 0x2000000:
|
||||||
|
w.write((total_size % 256).to_bytes(1,"big"))
|
||||||
|
total_size += 1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,177 @@
|
||||||
|
import struct;
|
||||||
|
from tkinter import *;
|
||||||
|
from tkinter.ttk import *
|
||||||
|
from PIL import Image, ImageTk, ImageDraw
|
||||||
|
|
||||||
|
import png;
|
||||||
|
|
||||||
|
#FILE_NAME = 'baserom/jpn_font_static'
|
||||||
|
FILE_NAME = 'decomp/object_boss03'
|
||||||
|
|
||||||
|
data = []
|
||||||
|
image_data = [];
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(FILE_NAME, 'rb') as f:
|
||||||
|
data = f.read()
|
||||||
|
except IOError:
|
||||||
|
print('failed to read file ' + FILE_NAME)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
#size = 0x80
|
||||||
|
height = 32
|
||||||
|
width = 32
|
||||||
|
pixel_width = 2
|
||||||
|
size = height*width*pixel_width
|
||||||
|
scale = 4
|
||||||
|
|
||||||
|
window = Tk()
|
||||||
|
|
||||||
|
window.title("MM Texture viewer")
|
||||||
|
window.geometry('500x500')
|
||||||
|
|
||||||
|
def load_file():
|
||||||
|
print('load')
|
||||||
|
update_image()
|
||||||
|
|
||||||
|
def read_i4_image(data, image_data):
|
||||||
|
for i in range(0, len(data)):
|
||||||
|
byte = data[i]
|
||||||
|
color1 = ((byte >> 4) & 0xF) * 17
|
||||||
|
color2 = (byte & 0xF) * 17
|
||||||
|
image_data.append(color1)
|
||||||
|
image_data.append(color1)
|
||||||
|
image_data.append(color1)
|
||||||
|
image_data.append(255)
|
||||||
|
image_data.append(color2)
|
||||||
|
image_data.append(color2)
|
||||||
|
image_data.append(color2)
|
||||||
|
image_data.append(255)
|
||||||
|
|
||||||
|
def read_i8_image(data, image_data):
|
||||||
|
for i in range(0, len(data)):
|
||||||
|
byte = data[i]
|
||||||
|
image_data.append(byte)
|
||||||
|
image_data.append(byte)
|
||||||
|
image_data.append(byte)
|
||||||
|
image_data.append(255)
|
||||||
|
|
||||||
|
def read_ia4_image(data, image_data):
|
||||||
|
None
|
||||||
|
|
||||||
|
def read_ia8_image(data, image_data):
|
||||||
|
None
|
||||||
|
|
||||||
|
def read_ia16_image(data, image_data):
|
||||||
|
None
|
||||||
|
|
||||||
|
def read_rbg5a1_image(data, image_data):
|
||||||
|
for i in range(0, len(data) // 2):
|
||||||
|
byte1 = data[i*2]
|
||||||
|
byte2 = data[i*2 + 1]
|
||||||
|
red = (byte1 >> 3)*8
|
||||||
|
green = (((byte1&0x7)<<2) | ((byte2>>6)&0x3))*8
|
||||||
|
blue = ((byte2 >> 1) & 0x1F)*8
|
||||||
|
alpha = (byte2&0x1)*0xFF
|
||||||
|
image_data.append(red)
|
||||||
|
image_data.append(green)
|
||||||
|
image_data.append(blue)
|
||||||
|
image_data.append(alpha)
|
||||||
|
|
||||||
|
def read_rbga32_image(data, image_data):
|
||||||
|
for i in range(0, len(data)):
|
||||||
|
byte = data[i]
|
||||||
|
image_data.append(byte)
|
||||||
|
|
||||||
|
def read_ci4_image(data, image_data):
|
||||||
|
None
|
||||||
|
|
||||||
|
def read_ci8_image(data, image_data):
|
||||||
|
None
|
||||||
|
|
||||||
|
def update_image(*args):
|
||||||
|
global image_label
|
||||||
|
global image_data
|
||||||
|
global data
|
||||||
|
|
||||||
|
image_data = []
|
||||||
|
|
||||||
|
texture_type = texture_type_combo.get()
|
||||||
|
if texture_type == 'i4':
|
||||||
|
read_i4_image(data, image_data)
|
||||||
|
elif texture_type == 'i8':
|
||||||
|
read_i8_image(data, image_data)
|
||||||
|
elif texture_type == 'ia4':
|
||||||
|
read_ia4_image(data, image_data)
|
||||||
|
elif texture_type == 'ia8':
|
||||||
|
read_ia8_image(data, image_data)
|
||||||
|
elif texture_type == 'ia16':
|
||||||
|
read_ia16_image(data, image_data)
|
||||||
|
elif texture_type == 'rbg5a1':
|
||||||
|
read_rbg5a1_image(data, image_data)
|
||||||
|
elif texture_type == 'rbga32':
|
||||||
|
read_rbga32_image(data, image_data)
|
||||||
|
elif texture_type == 'ci4':
|
||||||
|
read_ci4_image(data, image_data)
|
||||||
|
elif texture_type == 'ci8':
|
||||||
|
read_ci8_image(data, image_data)
|
||||||
|
else:
|
||||||
|
print('other type')
|
||||||
|
|
||||||
|
offset = int(offset_spinbox.get())
|
||||||
|
|
||||||
|
image = Image.frombytes("RGBA", (width, height), bytes(image_data[offset*4:])).resize((width*scale, height*scale))
|
||||||
|
image_tk = ImageTk.PhotoImage(image=image)
|
||||||
|
image_label.configure(image=image_tk)
|
||||||
|
image_label.image = image_tk # prevent GC?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
load_button = Button(window, text='Load File', command=load_file)
|
||||||
|
load_button.pack()
|
||||||
|
|
||||||
|
texture_type_combo = Combobox(window)
|
||||||
|
texture_type_combo['values'] = ('i4', 'i8', 'ia4', 'ia8', 'ia16', 'rbg5a1', 'rbga32', 'ci4', 'ci8')
|
||||||
|
texture_type_combo.current(5)
|
||||||
|
texture_type_combo.bind("<<ComboboxSelected>>", update_image)
|
||||||
|
texture_type_combo.pack()
|
||||||
|
|
||||||
|
# TODO textures should be able to only take a few discret values, find them
|
||||||
|
width_default = StringVar(window)
|
||||||
|
width_default.set("32")
|
||||||
|
width_spinbox = Spinbox(window, from_=1, to=48, textvariable=width_default, command=update_image)
|
||||||
|
width_spinbox.pack();
|
||||||
|
|
||||||
|
offset_default = StringVar(window)
|
||||||
|
offset_default.set("0")
|
||||||
|
offset_spinbox = Spinbox(window, from_=0, to=len(data), textvariable=offset_default, command=update_image)
|
||||||
|
offset_spinbox.pack();
|
||||||
|
|
||||||
|
image_label = Label(window)
|
||||||
|
image_label.pack()
|
||||||
|
|
||||||
|
update_image()
|
||||||
|
|
||||||
|
window.mainloop()
|
||||||
|
|
||||||
|
#for i in range(0, len(data) // size):
|
||||||
|
# texture_data = data[(i * size):((i + 1) * size)]
|
||||||
|
#
|
||||||
|
# with open('font_test2/' + str(i) + '.png', 'wb') as f:
|
||||||
|
# w = png.Writer(width, height, alpha=True)#, greyscale=True)#
|
||||||
|
# png_data = [];
|
||||||
|
# for y in range(0, height):
|
||||||
|
# row = []
|
||||||
|
# '''
|
||||||
|
# for x in range(0, 16//2):
|
||||||
|
# byte = texture_data[8*y + x]
|
||||||
|
# row.append(((byte >> 4) & 0xF) * 17)
|
||||||
|
# row.append((byte & 0xF) * 17)
|
||||||
|
# '''
|
||||||
|
# '''
|
||||||
|
# for x in range(0, width*pixel_width):
|
||||||
|
# byte = texture_data[width*pixel_width*y + x]
|
||||||
|
# row.append(byte)
|
||||||
|
# '''
|
||||||
|
# png_data.append(row)
|
||||||
|
# w.write(f, png_data)
|
|
@ -0,0 +1,578 @@
|
||||||
|
known_files = {
|
||||||
|
# TODO the data starts for the overlays are guesses based on the actor init vars location, should check
|
||||||
|
('baserom/boot', 'boot', 0x80080060, ((0x800969C0, 0x800A5ABF),)),
|
||||||
|
('decomp/code', 'code', 0x800A5AC0, ((0x80186028, 0x80186A6F),(0x801AAC04, 0x801E3F9C),)),
|
||||||
|
('decomp/ovl_En_Test', 'ovl_En_Test', 0x80862B70, ((0x808637B0, 0x8086386F),)),
|
||||||
|
('decomp/ovl_En_GirlA', 'ovl_En_GirlA', 0x80863870, ((0x80864A30, 0x8086536F),)),
|
||||||
|
('decomp/ovl_En_Part', 'ovl_En_Part', 0x80865370, ((0x808658E0, 0x8086598F),)),
|
||||||
|
('decomp/ovl_En_Light', 'ovl_En_Light', 0x80865990, ((0x808666B0, 0x808667FF),)),
|
||||||
|
('decomp/ovl_En_Door', 'ovl_En_Door', 0x80866800, ((0x808674B0, 0x80867BCF),)),
|
||||||
|
('decomp/ovl_En_Box', 'ovl_En_Box', 0x80867BD0, ((0x80869B30, 0x80869D8F),)),
|
||||||
|
('decomp/ovl_En_Pametfrog', 'ovl_En_Pametfrog', 0x80869D90, ((0x8086D940, 0x8086DE1F),)),
|
||||||
|
('decomp/ovl_En_Okuta', 'ovl_En_Okuta', 0x8086DE20, ((0x80870870, 0x80870DAF),)),
|
||||||
|
('decomp/ovl_En_Bom', 'ovl_En_Bom', 0x80870DB0, ((0x80872DA0, 0x8087480F),)),
|
||||||
|
('decomp/ovl_En_Wallmas', 'ovl_En_Wallmas', 0x80874810, ((0x80876340, 0x8087666F),)),
|
||||||
|
('decomp/ovl_En_Dodongo', 'ovl_En_Dodongo', 0x80876670, ((0x808790B0, 0x808796EF),)),
|
||||||
|
('decomp/ovl_En_Firefly', 'ovl_En_Firefly', 0x808796F0, ((0x8087B450, 0x8087B72F),)),
|
||||||
|
('decomp/ovl_En_Horse', 'ovl_En_Horse', 0x8087B730, ((0x80888EC0, 0x8088A23F),)),
|
||||||
|
('decomp/ovl_En_Arrow', 'ovl_En_Arrow', 0x8088A240, ((0x8088C1C0, 0x8088C50F),)),
|
||||||
|
('decomp/ovl_En_Elf', 'ovl_En_Elf', 0x8088C510, ((0x808909C0, 0x8089105F),)),
|
||||||
|
('decomp/ovl_En_Niw', 'ovl_En_Niw', 0x80891060, ((0x80893460, 0x808937EF),)),
|
||||||
|
('decomp/ovl_En_Tite', 'ovl_En_Tite', 0x808937F0, ((0x80896AB0, 0x80896F2F),)),
|
||||||
|
('decomp/ovl_En_Peehat', 'ovl_En_Peehat', 0x80896F30, ((0x80899410, 0x8089995F),)),
|
||||||
|
('decomp/ovl_En_Holl', 'ovl_En_Holl', 0x80899960, ((0x8089A530, 0x8089A6DF),)),
|
||||||
|
('decomp/ovl_En_Dinofos', 'ovl_En_Dinofos', 0x8089A6E0, ((0x8089E150, 0x8089E8DF),)),
|
||||||
|
('decomp/ovl_En_Hata', 'ovl_En_Hata', 0x8089E8E0, ((0x8089ED10, 0x8089ED8F),)),
|
||||||
|
('decomp/ovl_En_Zl1', 'ovl_En_Zl1', 0x8089ED90, ((0x8089EDD0, 0x8089EE1F),)),
|
||||||
|
('decomp/ovl_En_Viewer', 'ovl_En_Viewer', 0x8089EE20, ((0x8089F3E0, 0x8089F4DF),)),
|
||||||
|
('decomp/ovl_En_Bubble', 'ovl_En_Bubble', 0x8089F4E0, ((0x808A06E0, 0x808A08EF),)),
|
||||||
|
('decomp/ovl_Door_Shutter', 'ovl_Door_Shutter', 0x808A08F0, ((0x808A2160, 0x808A24CF),)),
|
||||||
|
('decomp/ovl_En_Boom', 'ovl_En_Boom', 0x808A24D0, ((0x808A2FF0, 0x808A31AF),)),
|
||||||
|
('decomp/ovl_En_Torch2', 'ovl_En_Torch2', 0x808A31B0, ((0x808A35B0, 0x808A366F),)),
|
||||||
|
('decomp/ovl_En_Minifrog', 'ovl_En_Minifrog', 0x808A3670, ((0x808A4D20, 0x808A504F),)),
|
||||||
|
('decomp/ovl_En_St', 'ovl_En_St', 0x808A5050, ((0x808A7590, 0x808A792F),)),
|
||||||
|
('decomp/ovl_Obj_Wturn', 'ovl_Obj_Wturn', 0x808A7930, ((0x808A7DA0, 0x808A7E2F),)),
|
||||||
|
('decomp/ovl_En_River_Sound', 'ovl_En_River_Sound', 0x808A7E30, ((0x808A8040, 0x808A809F),)),
|
||||||
|
('decomp/ovl_En_Ossan', 'ovl_En_Ossan', 0x808A80A0, ((0x808AC010, 0x808AC91F),)),
|
||||||
|
('decomp/ovl_En_Famos', 'ovl_En_Famos', 0x808AC920, ((0x808AE5E0, 0x808AE8BF),)),
|
||||||
|
('decomp/ovl_En_Bombf', 'ovl_En_Bombf', 0x808AE8C0, ((0x808AFB00, 0x808AFCCF),)),
|
||||||
|
('decomp/ovl_En_Am', 'ovl_En_Am', 0x808AFCD0, ((0x808B1050, 0x808B132F),)),
|
||||||
|
('decomp/ovl_En_Dekubaba', 'ovl_En_Dekubaba', 0x808B1330, ((0x808B4D40, 0x808B522F),)),
|
||||||
|
('decomp/ovl_En_M_Fire1', 'ovl_En_M_Fire1', 0x808B5230, ((0x808B5340, 0x808B53BF),)),
|
||||||
|
('decomp/ovl_En_M_Thunder', 'ovl_En_M_Thunder', 0x808B53C0, ((0x808B7100, 0x808B735F),)),
|
||||||
|
('decomp/ovl_Bg_Breakwall', 'ovl_Bg_Breakwall', 0x808B7360, ((0x808B8120, 0x808B848F),)),
|
||||||
|
('decomp/ovl_Door_Warp1', 'ovl_Door_Warp1', 0x808B8490, ((0x808BBB20, 0x808BC00F),)),
|
||||||
|
('decomp/ovl_Obj_Syokudai', 'ovl_Obj_Syokudai', 0x808BC010, ((0x808BCCA0, 0x808BCDEF),)),
|
||||||
|
('decomp/ovl_Item_B_Heart', 'ovl_Item_B_Heart', 0x808BCDF0, ((0x808BD160, 0x808BD1DF),)),
|
||||||
|
('decomp/ovl_En_Dekunuts', 'ovl_En_Dekunuts', 0x808BD1E0, ((0x808BEF10, 0x808BF21F),)),
|
||||||
|
('decomp/ovl_En_Bbfall', 'ovl_En_Bbfall', 0x808BF220, ((0x808C0D10, 0x808C102F),)),
|
||||||
|
('decomp/ovl_Arms_Hook', 'ovl_Arms_Hook', 0x808C1030, ((0x808C1BA0, 0x808C1D3F),)),
|
||||||
|
('decomp/ovl_En_Bb', 'ovl_En_Bb', 0x808C1D40, ((0x808C3780, 0x808C3A4F),)),
|
||||||
|
('decomp/ovl_Bg_Keikoku_Spr', 'ovl_Bg_Keikoku_Spr', 0x808C3A50, ((0x808C3BA0, 0x808C3BFF),)),
|
||||||
|
('decomp/ovl_En_Wood02', 'ovl_En_Wood02', 0x808C3C00, ((0x808C4CE0, 0x808C4F7F),)),
|
||||||
|
('decomp/ovl_En_Death', 'ovl_En_Death', 0x808C4F80, ((0x808C98C0, 0x808CA0AF),)),
|
||||||
|
('decomp/ovl_En_Minideath', 'ovl_En_Minideath', 0x808CA0B0, ((0x808CBF30, 0x808CC25F),)),
|
||||||
|
('decomp/ovl_En_Vm', 'ovl_En_Vm', 0x808CC260, ((0x808CD4A0, 0x808CD73F),)),
|
||||||
|
('decomp/ovl_Demo_Effect', 'ovl_Demo_Effect', 0x808CD740, ((0x808CE290, 0x808CE44F),)),
|
||||||
|
('decomp/ovl_Demo_Kankyo', 'ovl_Demo_Kankyo', 0x808CE450, ((0x808D03C0, 0x808D067F),)),
|
||||||
|
('decomp/ovl_En_Floormas', 'ovl_En_Floormas', 0x808D0680, ((0x808D3880, 0x808D3E1F),)),
|
||||||
|
('decomp/ovl_En_Rd', 'ovl_En_Rd', 0x808D3E20, ((0x808D70C0, 0x808D754F),)),
|
||||||
|
('decomp/ovl_Bg_F40_Flift', 'ovl_Bg_F40_Flift', 0x808D7550, ((0x808D7810, 0x808D78CF),)),
|
||||||
|
# ('decomp/ovl_Obj_Mure', 'ovl_Obj_Mure', 0x808D78D0, ((0x808D8760, 0x808D893F),)), # TODO figure this one out
|
||||||
|
('decomp/ovl_En_Sw', 'ovl_En_Sw', 0x808D8940, ((0x808DB9C0, 0x808DBE7F),)),
|
||||||
|
('decomp/ovl_Object_Kankyo', 'ovl_Object_Kankyo', 0x808DBE80, ((0x808DE320, 0x808DE5BF),)),
|
||||||
|
('decomp/ovl_En_Horse_Link_Child', 'ovl_En_Horse_Link_Child', 0x808DE5C0, ((0x808DFEA0, 0x808E019F),)),
|
||||||
|
('decomp/ovl_Door_Ana', 'ovl_Door_Ana', 0x808E01A0, ((0x808E0740, 0x808E082F),)),
|
||||||
|
('decomp/ovl_En_Encount1', 'ovl_En_Encount1', 0x808E0830, ((0x808E0DD0, 0x808E0E3F),)),
|
||||||
|
('decomp/ovl_Demo_Tre_Lgt', 'ovl_Demo_Tre_Lgt', 0x808E0E40, ((0x808E1490, 0x808E155F),)),
|
||||||
|
('decomp/ovl_En_Encount2', 'ovl_En_Encount2', 0x808E1560, ((0x808E1ED0, 0x808E1FDF),)),
|
||||||
|
('decomp/ovl_En_Fire_Rock', 'ovl_En_Fire_Rock', 0x808E1FE0, ((0x808E2020, 0x808E206F),)),
|
||||||
|
('decomp/ovl_Bg_Ctower_Rot', 'ovl_Bg_Ctower_Rot', 0x808E2070, ((0x808E2540, 0x808E25FF),)),
|
||||||
|
('decomp/ovl_Mir_Ray', 'ovl_Mir_Ray', 0x808E2600, ((0x808E3BD0, 0x808E3EEF),)),
|
||||||
|
('decomp/ovl_En_Sb', 'ovl_En_Sb', 0x808E3EF0, ((0x808E4DF0, 0x808E4FBF),)),
|
||||||
|
('decomp/ovl_En_Bigslime', 'ovl_En_Bigslime', 0x808E4FC0, ((0x808ED640, 0x808F11FF),)),
|
||||||
|
('decomp/ovl_En_Karebaba', 'ovl_En_Karebaba', 0x808F1200, ((0x808F2D80, 0x808F30AF),)),
|
||||||
|
('decomp/ovl_En_In', 'ovl_En_In', 0x808F30B0, ((0x808F6A40, 0x808F74AF),)),
|
||||||
|
('decomp/ovl_En_Bom_Chu', 'ovl_En_Bom_Chu', 0x808F74B0, ((0x808F88C0, 0x808F8A9F),)),
|
||||||
|
('decomp/ovl_En_Horse_Game_Check', 'ovl_En_Horse_Game_Check', 0x808F8AA0, ((0x808F9B00, 0x808F9DFF),)),
|
||||||
|
('decomp/ovl_En_Rr', 'ovl_En_Rr', 0x808F9E00, ((0x808FC130, 0x808FC54F),)),
|
||||||
|
('decomp/ovl_En_Fr', 'ovl_En_Fr', 0x808FC550, ((0x808FC670, 0x808FC6BF),)),
|
||||||
|
('decomp/ovl_Obj_Oshihiki', 'ovl_Obj_Oshihiki', 0x80917290, ((0x80918830, 0x80918B3F),)),
|
||||||
|
('decomp/ovl_Eff_Dust', 'ovl_Eff_Dust', 0x80918B40, ((0x80919D90, 0x80919F2F),)),
|
||||||
|
('decomp/ovl_Bg_Umajump', 'ovl_Bg_Umajump', 0x80919F30, ((0x8091A7F0, 0x8091A89F),)),
|
||||||
|
('decomp/ovl_En_Insect', 'ovl_En_Insect', 0x8091A8A0, ((0x8091BD60, 0x8091C09F),)),
|
||||||
|
('decomp/ovl_En_Butte', 'ovl_En_Butte', 0x8091C0A0, ((0x8091D2D0, 0x8091D62F),)),
|
||||||
|
('decomp/ovl_En_Fish', 'ovl_En_Fish', 0x8091D630, ((0x8091FA60, 0x8091FEEF),)),
|
||||||
|
('decomp/ovl_Item_Etcetera', 'ovl_Item_Etcetera', 0x8091FEF0, ((0x80920210, 0x8092033F),)),
|
||||||
|
('decomp/ovl_Arrow_Fire', 'ovl_Arrow_Fire', 0x80920340, ((0x80920DF0, 0x8092242F),)),
|
||||||
|
('decomp/ovl_Arrow_Ice', 'ovl_Arrow_Ice', 0x80922430, ((0x80922DB0, 0x809242FF),)),
|
||||||
|
('decomp/ovl_Arrow_Light', 'ovl_Arrow_Light', 0x80924300, ((0x80924C60, 0x809261AF),)),
|
||||||
|
('decomp/ovl_Obj_Kibako', 'ovl_Obj_Kibako', 0x809261B0, ((0x80927380, 0x809275BF),)),
|
||||||
|
('decomp/ovl_Obj_Tsubo', 'ovl_Obj_Tsubo', 0x809275C0, ((0x80929500, 0x8092990F),)),
|
||||||
|
('decomp/ovl_En_Ik', 'ovl_En_Ik', 0x80929910, ((0x8092BFA0, 0x8092C52F),)),
|
||||||
|
('decomp/ovl_Demo_Shd', 'ovl_Demo_Shd', 0x8092C530, ((0x8092C570, 0x8092C5BF),)),
|
||||||
|
('decomp/ovl_En_Dns', 'ovl_En_Dns', 0x8092C5C0, ((0x8092DCB0, 0x8092DF8F),)),
|
||||||
|
('decomp/ovl_Elf_Msg', 'ovl_Elf_Msg', 0x8092DF90, ((0x8092E450, 0x8092E50F),)),
|
||||||
|
('decomp/ovl_En_Honotrap', 'ovl_En_Honotrap', 0x8092E510, ((0x809303F0, 0x809307DF),)),
|
||||||
|
('decomp/ovl_En_Tubo_Trap', 'ovl_En_Tubo_Trap', 0x809307E0, ((0x80931410, 0x8093155F),)),
|
||||||
|
('decomp/ovl_Obj_Ice_Poly', 'ovl_Obj_Ice_Poly', 0x80931560, ((0x80932300, 0x8093248F),)),
|
||||||
|
('decomp/ovl_En_Fz', 'ovl_En_Fz', 0x80932490, ((0x809346D0, 0x809349DF),)),
|
||||||
|
('decomp/ovl_En_Kusa', 'ovl_En_Kusa', 0x809349E0, ((0x809366A0, 0x80936CEF),)),
|
||||||
|
('decomp/ovl_Obj_Bean', 'ovl_Obj_Bean', 0x80936CF0, ((0x80938F80, 0x809393AF),)),
|
||||||
|
('decomp/ovl_Obj_Bombiwa', 'ovl_Obj_Bombiwa', 0x809393B0, ((0x8093A920, 0x8093ABCF),)),
|
||||||
|
('decomp/ovl_Obj_Switch', 'ovl_Obj_Switch', 0x8093ABD0, ((0x8093CC60, 0x8093D3BF),)),
|
||||||
|
('decomp/ovl_Obj_Lift', 'ovl_Obj_Lift', 0x8093D3C0, ((0x8093DD30, 0x8093DE9F),)),
|
||||||
|
('decomp/ovl_Obj_Hsblock', 'ovl_Obj_Hsblock', 0x8093DEA0, ((0x8093E310, 0x8093E41F),)),
|
||||||
|
('decomp/ovl_En_Okarina_Tag', 'ovl_En_Okarina_Tag', 0x8093E420, ((0x8093E810, 0x8093E89F),)),
|
||||||
|
('decomp/ovl_En_Goroiwa', 'ovl_En_Goroiwa', 0x8093E8A0, ((0x80942DA0, 0x809434AF),)),
|
||||||
|
('decomp/ovl_En_Daiku', 'ovl_En_Daiku', 0x809434B0, ((0x80944040, 0x809441DF),)),
|
||||||
|
('decomp/ovl_En_Nwc', 'ovl_En_Nwc', 0x809441E0, ((0x80945370, 0x809454EF),)),
|
||||||
|
('decomp/ovl_Item_Inbox', 'ovl_Item_Inbox', 0x809454F0, ((0x80945600, 0x8094564F),)),
|
||||||
|
('decomp/ovl_En_Ge1', 'ovl_En_Ge1', 0x80945650, ((0x809464B0, 0x8094669F),)),
|
||||||
|
('decomp/ovl_Obj_Blockstop', 'ovl_Obj_Blockstop', 0x809466A0, ((0x80946880, 0x809468CF),)),
|
||||||
|
('decomp/ovl_En_Sda', 'ovl_En_Sda', 0x809468D0, ((0x80947A40, 0x80947F5F),)),
|
||||||
|
('decomp/ovl_En_Clear_Tag', 'ovl_En_Clear_Tag', 0x80947F60, ((0x8094AD40, 0x8094DEDF),)),
|
||||||
|
('decomp/ovl_En_Gm', 'ovl_En_Gm', 0x8094DEE0, ((0x80951820, 0x8095261F),)),
|
||||||
|
('decomp/ovl_En_Ms', 'ovl_En_Ms', 0x80952620, ((0x80952B80, 0x80952C4F),)),
|
||||||
|
('decomp/ovl_En_Hs', 'ovl_En_Hs', 0x80952C50, ((0x809538F0, 0x80953A8F),)),
|
||||||
|
('decomp/ovl_Bg_Ingate', 'ovl_Bg_Ingate', 0x80953A90, ((0x809548A0, 0x8095495F),)),
|
||||||
|
('decomp/ovl_En_Kanban', 'ovl_En_Kanban', 0x80954960, ((0x809572E0, 0x809580BF),)),
|
||||||
|
('decomp/ovl_En_Attack_Niw', 'ovl_En_Attack_Niw', 0x809580C0, ((0x80959100, 0x809592DF),)),
|
||||||
|
('decomp/ovl_En_Mk', 'ovl_En_Mk', 0x809592E0, ((0x8095A240, 0x8095A50F),)),
|
||||||
|
('decomp/ovl_En_Owl', 'ovl_En_Owl', 0x8095A510, ((0x8095D2D0, 0x8095D6DF),)),
|
||||||
|
('decomp/ovl_En_Ishi', 'ovl_En_Ishi', 0x8095D6E0, ((0x8095F690, 0x8095FB0F),)),
|
||||||
|
('decomp/ovl_Obj_Hana', 'ovl_Obj_Hana', 0x8095FB10, ((0x8095FB90, 0x8095FBEF),)),
|
||||||
|
('decomp/ovl_Obj_Lightswitch', 'ovl_Obj_Lightswitch', 0x8095FBF0, ((0x80960B70, 0x80960CEF),)),
|
||||||
|
('decomp/ovl_Obj_Mure2', 'ovl_Obj_Mure2', 0x80960CF0, ((0x80961570, 0x809616DF),)),
|
||||||
|
('decomp/ovl_En_Fu', 'ovl_En_Fu', 0x809616E0, ((0x80964AE0, 0x8096564F),)),
|
||||||
|
('decomp/ovl_En_Stream', 'ovl_En_Stream', 0x80965650, ((0x80965B00, 0x80965BAF),)),
|
||||||
|
('decomp/ovl_En_Mm', 'ovl_En_Mm', 0x80965BB0, ((0x80966320, 0x8096640F),)),
|
||||||
|
('decomp/ovl_En_Weather_Tag', 'ovl_En_Weather_Tag', 0x80966410, ((0x809677A0, 0x809679CF),)),
|
||||||
|
('decomp/ovl_En_Ani', 'ovl_En_Ani', 0x809679D0, ((0x80968650, 0x809687AF),)),
|
||||||
|
('decomp/ovl_En_Js', 'ovl_En_Js', 0x809687B0, ((0x8096AB80, 0x8096B09F),)),
|
||||||
|
('decomp/ovl_En_Okarina_Effect', 'ovl_En_Okarina_Effect', 0x8096B0A0, ((0x8096B290, 0x8096B30F),)),
|
||||||
|
('decomp/ovl_En_Mag', 'ovl_En_Mag', 0x8096B310, ((0x8096E910, 0x8096EC3F),)),
|
||||||
|
('decomp/ovl_Elf_Msg2', 'ovl_Elf_Msg2', 0x8096EC40, ((0x8096F090, 0x8096F15F),)),
|
||||||
|
('decomp/ovl_Bg_F40_Swlift', 'ovl_Bg_F40_Swlift', 0x8096F160, ((0x8096F510, 0x8096F5DF),)),
|
||||||
|
('decomp/ovl_En_Kakasi', 'ovl_En_Kakasi', 0x8096F5E0, ((0x80971D80, 0x8097234F),)),
|
||||||
|
('decomp/ovl_Obj_Makeoshihiki', 'ovl_Obj_Makeoshihiki', 0x80972350, ((0x80972630, 0x8097267F),)),
|
||||||
|
('decomp/ovl_Oceff_Spot', 'ovl_Oceff_Spot', 0x80972680, ((0x80972D80, 0x8097354F),)),
|
||||||
|
('decomp/ovl_En_Torch', 'ovl_En_Torch', 0x80973550, ((0x809735E0, 0x8097363F),)),
|
||||||
|
('decomp/ovl_Shot_Sun', 'ovl_Shot_Sun', 0x80973640, ((0x80973B80, 0x80973C4F),)),
|
||||||
|
('decomp/ovl_Obj_Roomtimer', 'ovl_Obj_Roomtimer', 0x80973C50, ((0x80973E90, 0x80973EEF),)),
|
||||||
|
('decomp/ovl_En_Ssh', 'ovl_En_Ssh', 0x80973EF0, ((0x80976010, 0x809764AF),)),
|
||||||
|
('decomp/ovl_Oceff_Wipe', 'ovl_Oceff_Wipe', 0x809764B0, ((0x80976980, 0x8097720F),)),
|
||||||
|
('decomp/ovl_Oceff_Storm', 'ovl_Oceff_Storm', 0x80981760, ((0x80981F70, 0x8098351F),)),
|
||||||
|
('decomp/ovl_Obj_Demo', 'ovl_Obj_Demo', 0x80983520, ((0x80983890, 0x809838EF),)),
|
||||||
|
('decomp/ovl_En_Minislime', 'ovl_En_Minislime', 0x809838F0, ((0x809857C0, 0x80985C3F),)),
|
||||||
|
('decomp/ovl_En_Nutsball', 'ovl_En_Nutsball', 0x80985C40, ((0x809861D0, 0x8098626F),)),
|
||||||
|
('decomp/ovl_Oceff_Wipe2', 'ovl_Oceff_Wipe2', 0x80986270, ((0x80986670, 0x809879DF),)),
|
||||||
|
('decomp/ovl_Oceff_Wipe3', 'ovl_Oceff_Wipe3', 0x809879E0, ((0x80987DF0, 0x8098913F),)),
|
||||||
|
('decomp/ovl_En_Dg', 'ovl_En_Dg', 0x80989140, ((0x8098C280, 0x8098CA1F),)),
|
||||||
|
('decomp/ovl_En_Si', 'ovl_En_Si', 0x8098CA20, ((0x8098CD60, 0x8098CE3F),)),
|
||||||
|
('decomp/ovl_Obj_Comb', 'ovl_Obj_Comb', 0x8098CE40, ((0x8098E420, 0x8098E5BF),)),
|
||||||
|
('decomp/ovl_Obj_Kibako2', 'ovl_Obj_Kibako2', 0x8098E5C0, ((0x8098EE40, 0x8098EF5F),)),
|
||||||
|
('decomp/ovl_En_Hs2', 'ovl_En_Hs2', 0x8098EF60, ((0x8098EFF0, 0x8098F03F),)),
|
||||||
|
('decomp/ovl_Obj_Mure3', 'ovl_Obj_Mure3', 0x8098F040, ((0x8098F720, 0x8098F7FF),)),
|
||||||
|
('decomp/ovl_En_Tg', 'ovl_En_Tg', 0x8098F800, ((0x809901A0, 0x8099030F),)),
|
||||||
|
('decomp/ovl_En_Wf', 'ovl_En_Wf', 0x80990310, ((0x80994150, 0x809947AF),)),
|
||||||
|
('decomp/ovl_En_Skb', 'ovl_En_Skb', 0x809947B0, ((0x80997330, 0x80997A8F),)),
|
||||||
|
('decomp/ovl_En_Gs', 'ovl_En_Gs', 0x80997A90, ((0x8099A380, 0x8099A91F),)),
|
||||||
|
('decomp/ovl_Obj_Sound', 'ovl_Obj_Sound', 0x8099A920, ((0x8099AAE0, 0x8099AB2F),)),
|
||||||
|
('decomp/ovl_En_Crow', 'ovl_En_Crow', 0x8099AB30, ((0x8099C050, 0x8099C28F),)),
|
||||||
|
('decomp/ovl_En_Cow', 'ovl_En_Cow', 0x8099C290, ((0x8099D5F0, 0x8099D77F),)),
|
||||||
|
('decomp/ovl_Oceff_Wipe4', 'ovl_Oceff_Wipe4', 0x8099D780, ((0x8099DB90, 0x8099E78F),)),
|
||||||
|
('decomp/ovl_En_Zo', 'ovl_En_Zo', 0x8099E790, ((0x8099F490, 0x8099F72F),)),
|
||||||
|
('decomp/ovl_Obj_Makekinsuta', 'ovl_Obj_Makekinsuta', 0x8099FA40, ((0x8099FE10, 0x8099FEAF),)),
|
||||||
|
('decomp/ovl_En_Ge3', 'ovl_En_Ge3', 0x8099FEB0, ((0x809A0D80, 0x809A0F1F),)),
|
||||||
|
('decomp/ovl_Obj_Hamishi', 'ovl_Obj_Hamishi', 0x809A0F20, ((0x809A1A80, 0x809A1BAF),)),
|
||||||
|
('decomp/ovl_En_Zl4', 'ovl_En_Zl4', 0x809A1BB0, ((0x809A1F60, 0x809A202F),)),
|
||||||
|
('decomp/ovl_En_Mm2', 'ovl_En_Mm2', 0x809A2030, ((0x809A2250, 0x809A2B5F),)),
|
||||||
|
('decomp/ovl_Door_Spiral', 'ovl_Door_Spiral', 0x809A2B60, ((0x809A3230, 0x809A33DF),)),
|
||||||
|
('decomp/ovl_Obj_Pzlblock', 'ovl_Obj_Pzlblock', 0x809A33E0, ((0x809A4030, 0x809A41BF),)),
|
||||||
|
('decomp/ovl_Obj_Toge', 'ovl_Obj_Toge', 0x809A41C0, ((0x809A4C90, 0x809A4DFF),)),
|
||||||
|
('decomp/ovl_Obj_Armos', 'ovl_Obj_Armos', 0x809A4E00, ((0x809A5B90, 0x809A5D0F),)),
|
||||||
|
('decomp/ovl_Obj_Boyo', 'ovl_Obj_Boyo', 0x809A5D10, ((0x809A6150, 0x809A627F),)),
|
||||||
|
('decomp/ovl_En_Grasshopper', 'ovl_En_Grasshopper', 0x809A6280, ((0x809A8C80, 0x809A910F),)),
|
||||||
|
('decomp/ovl_Obj_Grass', 'ovl_Obj_Grass', 0x809A9110, ((0x809AA9F0, 0x809AAE5F),)),
|
||||||
|
('decomp/ovl_Obj_Grass_Carry', 'ovl_Obj_Grass_Carry', 0x809AAE60, ((0x809ABBB0, 0x809ABDDF),)),
|
||||||
|
('decomp/ovl_Obj_Grass_Unit', 'ovl_Obj_Grass_Unit', 0x809ABDE0, ((0x809AC340, 0x809AC4AF),)),
|
||||||
|
('decomp/ovl_Bg_Fire_Wall', 'ovl_Bg_Fire_Wall', 0x809AC4B0, ((0x809ACC40, 0x809ACD8F),)),
|
||||||
|
('decomp/ovl_En_Bu', 'ovl_En_Bu', 0x809ACD90, ((0x809ACED0, 0x809ACF3F),)),
|
||||||
|
('decomp/ovl_En_Encount3', 'ovl_En_Encount3', 0x809ACF40, ((0x809AD7F0, 0x809AD8DF),)),
|
||||||
|
('decomp/ovl_En_Jso', 'ovl_En_Jso', 0x809AD8E0, ((0x809B0F40, 0x809B154F),)),
|
||||||
|
('decomp/ovl_Obj_Chikuwa', 'ovl_Obj_Chikuwa', 0x809B1550, ((0x809B1FA0, 0x809B20EF),)),
|
||||||
|
('decomp/ovl_En_Knight', 'ovl_En_Knight', 0x809B20F0, ((0x809BDAF0, 0x809C075F),)),
|
||||||
|
('decomp/ovl_En_Warp_tag', 'ovl_En_Warp_tag', 0x809C0760, ((0x809C0FE0, 0x809C10AF),)),
|
||||||
|
('decomp/ovl_En_Aob_01', 'ovl_En_Aob_01', 0x809C10B0, ((0x809C3770, 0x809C3D7F),)),
|
||||||
|
('decomp/ovl_En_Boj_01', 'ovl_En_Boj_01', 0x809C3D80, ((0x809C3DC0, 0x809C3E0F),)),
|
||||||
|
('decomp/ovl_En_Boj_02', 'ovl_En_Boj_02', 0x809C3E10, ((0x809C3E50, 0x809C3E9F),)),
|
||||||
|
('decomp/ovl_En_Boj_03', 'ovl_En_Boj_03', 0x809C3EA0, ((0x809C3EE0, 0x809C3F2F),)),
|
||||||
|
('decomp/ovl_En_Encount4', 'ovl_En_Encount4', 0x809C3F30, ((0x809C46B0, 0x809C478F),)),
|
||||||
|
('decomp/ovl_En_Bom_Bowl_Man', 'ovl_En_Bom_Bowl_Man', 0x809C4790, ((0x809C6100, 0x809C64BF),)),
|
||||||
|
('decomp/ovl_En_Syateki_Man', 'ovl_En_Syateki_Man', 0x809C64C0, ((0x809C9160, 0x809C9A5F),)),
|
||||||
|
('decomp/ovl_Bg_Icicle', 'ovl_Bg_Icicle', 0x809C9A60, ((0x809CA2B0, 0x809CA3EF),)),
|
||||||
|
('decomp/ovl_En_Syateki_Crow', 'ovl_En_Syateki_Crow', 0x809CA3F0, ((0x809CB050, 0x809CB1FF),)),
|
||||||
|
('decomp/ovl_En_Boj_04', 'ovl_En_Boj_04', 0x809CB200, ((0x809CB240, 0x809CB28F),)),
|
||||||
|
('decomp/ovl_En_Cne_01', 'ovl_En_Cne_01', 0x809CB290, ((0x809CBEE0, 0x809CC05F),)),
|
||||||
|
('decomp/ovl_En_Bba_01', 'ovl_En_Bba_01', 0x809CC060, ((0x809CCC60, 0x809CCDDF),)),
|
||||||
|
('decomp/ovl_En_Bji_01', 'ovl_En_Bji_01', 0x809CCDE0, ((0x809CDC30, 0x809CDEBF),)),
|
||||||
|
('decomp/ovl_Bg_Spdweb', 'ovl_Bg_Spdweb', 0x809CDEC0, ((0x809CF060, 0x809CF34F),)),
|
||||||
|
('decomp/ovl_En_Mt_tag', 'ovl_En_Mt_tag', 0x809CF350, ((0x809D0190, 0x809D052F),)),
|
||||||
|
('decomp/ovl_Boss_01', 'ovl_Boss_01', 0x809D0530, ((0x809D7980, 0x809DA1CF),)),
|
||||||
|
('decomp/ovl_Boss_02', 'ovl_Boss_02', 0x809DA1D0, ((0x809DF550, 0x809E275F),)),
|
||||||
|
('decomp/ovl_Boss_03', 'ovl_Boss_03', 0x809E2760, ((0x809E8EA0, 0x809EC03F),)),
|
||||||
|
('decomp/ovl_Boss_04', 'ovl_Boss_04', 0x809EC040, ((0x809EE150, 0x809EE4DF),)),
|
||||||
|
('decomp/ovl_Boss_05', 'ovl_Boss_05', 0x809EE4E0, ((0x809F1A20, 0x809F211F),)),
|
||||||
|
('decomp/ovl_Boss_06', 'ovl_Boss_06', 0x809F2120, ((0x809F4080, 0x809F497F),)),
|
||||||
|
('decomp/ovl_Boss_07', 'ovl_Boss_07', 0x809F4980, ((0x80A07950, 0x80A0A89F),)),
|
||||||
|
('decomp/ovl_Bg_Dy_Yoseizo', 'ovl_Bg_Dy_Yoseizo', 0x80A0A8A0, ((0x80A0C4A0, 0x80A0C77F),)),
|
||||||
|
('decomp/ovl_En_Boj_05', 'ovl_En_Boj_05', 0x80A0C780, ((0x80A0C7C0, 0x80A0C80F),)),
|
||||||
|
('decomp/ovl_En_Sob1', 'ovl_En_Sob1', 0x80A0C810, ((0x80A10860, 0x80A10FCF),)),
|
||||||
|
('decomp/ovl_En_Go', 'ovl_En_Go', 0x80A10FD0, ((0x80A16100, 0x80A16D3F),)),
|
||||||
|
('decomp/ovl_En_Raf', 'ovl_En_Raf', 0x80A16D40, ((0x80A18EC0, 0x80A1973F),)),
|
||||||
|
('decomp/ovl_Obj_Funen', 'ovl_Obj_Funen', 0x80A19740, ((0x80A198B0, 0x80A1990F),)),
|
||||||
|
('decomp/ovl_Obj_Raillift', 'ovl_Obj_Raillift', 0x80A19910, ((0x80A1A390, 0x80A1A4FF),)),
|
||||||
|
('decomp/ovl_Bg_Numa_Hana', 'ovl_Bg_Numa_Hana', 0x80A1A500, ((0x80A1B240, 0x80A1B3CF),)),
|
||||||
|
('decomp/ovl_Obj_Flowerpot', 'ovl_Obj_Flowerpot', 0x80A1B3D0, ((0x80A1D380, 0x80A1DA4F),)),
|
||||||
|
('decomp/ovl_Obj_Spinyroll', 'ovl_Obj_Spinyroll', 0x80A1DA50, ((0x80A1F020, 0x80A1F40F),)),
|
||||||
|
('decomp/ovl_Dm_Hina', 'ovl_Dm_Hina', 0x80A1F410, ((0x80A1FDB0, 0x80A1FE4F),)),
|
||||||
|
('decomp/ovl_En_Syateki_Wf', 'ovl_En_Syateki_Wf', 0x80A1FE50, ((0x80A20E50, 0x80A2114F),)),
|
||||||
|
('decomp/ovl_Obj_Skateblock', 'ovl_Obj_Skateblock', 0x80A21150, ((0x80A229F0, 0x80A22D3F),)),
|
||||||
|
('decomp/ovl_Obj_Iceblock', 'ovl_Obj_Iceblock', 0x80A23090, ((0x80A26E30, 0x80A2751F),)),
|
||||||
|
('decomp/ovl_En_Bigpamet', 'ovl_En_Bigpamet', 0x80A27520, ((0x80A296E0, 0x80A29A7F),)),
|
||||||
|
('decomp/ovl_Bg_Dblue_Movebg', 'ovl_Bg_Dblue_Movebg', 0x80A29A80, ((0x80A2B870, 0x80A2BBFF),)),
|
||||||
|
('decomp/ovl_En_Syateki_Dekunuts', 'ovl_En_Syateki_Dekunuts', 0x80A2BC00, ((0x80A2CA90, 0x80A2CD0F),)),
|
||||||
|
('decomp/ovl_Elf_Msg3', 'ovl_Elf_Msg3', 0x80A2CD10, ((0x80A2D1C0, 0x80A2D27F),)),
|
||||||
|
('decomp/ovl_En_Fg', 'ovl_En_Fg', 0x80A2D280, ((0x80A2E4E0, 0x80A2E79F),)),
|
||||||
|
('decomp/ovl_Dm_Ravine', 'ovl_Dm_Ravine', 0x80A2E7A0, ((0x80A2E910, 0x80A2E95F),)),
|
||||||
|
('decomp/ovl_Dm_Sa', 'ovl_Dm_Sa', 0x80A2E960, ((0x80A2ECE0, 0x80A2ED9F),)),
|
||||||
|
('decomp/ovl_En_Slime', 'ovl_En_Slime', 0x80A2EDA0, ((0x80A31AD0, 0x80A3220F),)),
|
||||||
|
('decomp/ovl_En_Pr', 'ovl_En_Pr', 0x80A32210, ((0x80A338A0, 0x80A33AFF),)),
|
||||||
|
('decomp/ovl_Obj_Toudai', 'ovl_Obj_Toudai', 0x80A33B00, ((0x80A34570, 0x80A346FF),)),
|
||||||
|
('decomp/ovl_Obj_Entotu', 'ovl_Obj_Entotu', 0x80A34700, ((0x80A353F0, 0x80A3550F),)),
|
||||||
|
('decomp/ovl_Obj_Bell', 'ovl_Obj_Bell', 0x80A35510, ((0x80A35E70, 0x80A35FEF),)),
|
||||||
|
('decomp/ovl_En_Syateki_Okuta', 'ovl_En_Syateki_Okuta', 0x80A35FF0, ((0x80A37550, 0x80A37ECF),)),
|
||||||
|
('decomp/ovl_Obj_Shutter', 'ovl_Obj_Shutter', 0x80A37ED0, ((0x80A38110, 0x80A3818F),)),
|
||||||
|
('decomp/ovl_Dm_Zl', 'ovl_Dm_Zl', 0x80A38190, ((0x80A387D0, 0x80A3899F),)),
|
||||||
|
('decomp/ovl_En_Ru', 'ovl_En_Ru', 0x80A389A0, ((0x80A39430, 0x80A396AF),)),
|
||||||
|
('decomp/ovl_En_Elfgrp', 'ovl_En_Elfgrp', 0x80A396B0, ((0x80A3AAD0, 0x80A3AC5F),)),
|
||||||
|
('decomp/ovl_Dm_Tsg', 'ovl_Dm_Tsg', 0x80A3AC60, ((0x80A3B010, 0x80A3B07F),)),
|
||||||
|
('decomp/ovl_En_Baguo', 'ovl_En_Baguo', 0x80A3B080, ((0x80A3C2D0, 0x80A3C4DF),)),
|
||||||
|
('decomp/ovl_Obj_Vspinyroll', 'ovl_Obj_Vspinyroll', 0x80A3C4E0, ((0x80A3D430, 0x80A3D67F),)),
|
||||||
|
('decomp/ovl_Obj_Smork', 'ovl_Obj_Smork', 0x80A3D680, ((0x80A3E270, 0x80A3E38F),)),
|
||||||
|
('decomp/ovl_En_Test2', 'ovl_En_Test2', 0x80A3E390, ((0x80A3E690, 0x80A3E7DF),)),
|
||||||
|
('decomp/ovl_En_Test3', 'ovl_En_Test3', 0x80A3E7E0, ((0x80A41530, 0x80A41D6F),)),
|
||||||
|
('decomp/ovl_En_Test4', 'ovl_En_Test4', 0x80A41D70, ((0x80A43320, 0x80A434DF),)),
|
||||||
|
('decomp/ovl_En_Bat', 'ovl_En_Bat', 0x80A434E0, ((0x80A449E0, 0x80A44C7F),)),
|
||||||
|
('decomp/ovl_En_Sekihi', 'ovl_En_Sekihi', 0x80A44C80, ((0x80A45250, 0x80A4535F),)),
|
||||||
|
('decomp/ovl_En_Wiz', 'ovl_En_Wiz', 0x80A45360, ((0x80A48B30, 0x80A48FDF),)),
|
||||||
|
('decomp/ovl_En_Wiz_Brock', 'ovl_En_Wiz_Brock', 0x80A48FE0, ((0x80A495B0, 0x80A4969F),)),
|
||||||
|
('decomp/ovl_En_Wiz_Fire', 'ovl_En_Wiz_Fire', 0x80A496A0, ((0x80A4C1C0, 0x80A4C48F),)),
|
||||||
|
('decomp/ovl_Eff_Change', 'ovl_Eff_Change', 0x80A4C490, ((0x80A4C900, 0x80A4C9AF),)),
|
||||||
|
('decomp/ovl_Dm_Statue', 'ovl_Dm_Statue', 0x80A4C9B0, ((0x80A4CA40, 0x80A4CA8F),)),
|
||||||
|
('decomp/ovl_Obj_Fireshield', 'ovl_Obj_Fireshield', 0x80A4CA90, ((0x80A4D800, 0x80A4D9EF),)),
|
||||||
|
('decomp/ovl_Bg_Ladder', 'ovl_Bg_Ladder', 0x80A4D9F0, ((0x80A4DE20, 0x80A4DECF),)),
|
||||||
|
('decomp/ovl_En_Mkk', 'ovl_En_Mkk', 0x80A4DED0, ((0x80A4F700, 0x80A4FA3F),)),
|
||||||
|
('decomp/ovl_Demo_Getitem', 'ovl_Demo_Getitem', 0x80A4FA40, ((0x80A4FD40, 0x80A4FDCF),)),
|
||||||
|
('decomp/ovl_En_Dnb', 'ovl_En_Dnb', 0x80A4FDD0, ((0x80A50C90, 0x80A50D3F),)),
|
||||||
|
('decomp/ovl_En_Dnh', 'ovl_En_Dnh', 0x80A50D40, ((0x80A51250, 0x80A514EF),)),
|
||||||
|
('decomp/ovl_En_Dnk', 'ovl_En_Dnk', 0x80A514F0, ((0x80A521A0, 0x80A5252F),)),
|
||||||
|
('decomp/ovl_En_Dnq', 'ovl_En_Dnq', 0x80A52530, ((0x80A53400, 0x80A537CF),)),
|
||||||
|
('decomp/ovl_Bg_Keikoku_Saku', 'ovl_Bg_Keikoku_Saku', 0x80A537D0, ((0x80A53B50, 0x80A53BDF),)),
|
||||||
|
('decomp/ovl_Obj_Hugebombiwa', 'ovl_Obj_Hugebombiwa', 0x80A53BE0, ((0x80A55CE0, 0x80A560BF),)),
|
||||||
|
('decomp/ovl_En_Firefly2', 'ovl_En_Firefly2', 0x80A560C0, ((0x80A56100, 0x80A5614F),)),
|
||||||
|
('decomp/ovl_En_Rat', 'ovl_En_Rat', 0x80A56150, ((0x80A583E0, 0x80A5879F),)),
|
||||||
|
('decomp/ovl_En_Water_Effect', 'ovl_En_Water_Effect', 0x80A587A0, ((0x80A5AF90, 0x80A5B15F),)),
|
||||||
|
('decomp/ovl_En_Kusa2', 'ovl_En_Kusa2', 0x80A5B160, ((0x80A5EAA0, 0x80A60B1F),)),
|
||||||
|
('decomp/ovl_Bg_Spout_Fire', 'ovl_Bg_Spout_Fire', 0x80A60B20, ((0x80A61140, 0x80A612AF),)),
|
||||||
|
('decomp/ovl_En_Dy_Extra', 'ovl_En_Dy_Extra', 0x80A612B0, ((0x80A61720, 0x80A6180F),)),
|
||||||
|
('decomp/ovl_En_Bal', 'ovl_En_Bal', 0x80A61810, ((0x80A63CC0, 0x80A6449F),)),
|
||||||
|
('decomp/ovl_En_Ginko_Man', 'ovl_En_Ginko_Man', 0x80A644A0, ((0x80A65D40, 0x80A6617F),)),
|
||||||
|
('decomp/ovl_En_Warp_Uzu', 'ovl_En_Warp_Uzu', 0x80A66180, ((0x80A664A0, 0x80A6656F),)),
|
||||||
|
('decomp/ovl_Obj_Driftice', 'ovl_Obj_Driftice', 0x80A66570, ((0x80A67600, 0x80A678AF),)),
|
||||||
|
('decomp/ovl_En_Look_Nuts', 'ovl_En_Look_Nuts', 0x80A678B0, ((0x80A685E0, 0x80A6879F),)),
|
||||||
|
('decomp/ovl_En_Mushi2', 'ovl_En_Mushi2', 0x80A687A0, ((0x80A6B930, 0x80A6BF8F),)),
|
||||||
|
('decomp/ovl_En_Fall', 'ovl_En_Fall', 0x80A6BF90, ((0x80A6E490, 0x80A6F09F),)),
|
||||||
|
('decomp/ovl_En_Mm3', 'ovl_En_Mm3', 0x80A6F0A0, ((0x80A703D0, 0x80A706EF),)),
|
||||||
|
('decomp/ovl_Bg_Crace_Movebg', 'ovl_Bg_Crace_Movebg', 0x80A706F0, ((0x80A71080, 0x80A711CF),)),
|
||||||
|
('decomp/ovl_En_Dno', 'ovl_En_Dno', 0x80A711D0, ((0x80A739A0, 0x80A73F9F),)),
|
||||||
|
('decomp/ovl_En_Pr2', 'ovl_En_Pr2', 0x80A73FA0, ((0x80A75BC0, 0x80A75DBF),)),
|
||||||
|
('decomp/ovl_En_Prz', 'ovl_En_Prz', 0x80A75DC0, ((0x80A771C0, 0x80A773BF),)),
|
||||||
|
('decomp/ovl_En_Jso2', 'ovl_En_Jso2', 0x80A773C0, ((0x80A7B4F0, 0x80A7BC6F),)),
|
||||||
|
('decomp/ovl_Obj_Etcetera', 'ovl_Obj_Etcetera', 0x80A7BC70, ((0x80A7C770, 0x80A7C98F),)),
|
||||||
|
('decomp/ovl_En_Egol', 'ovl_En_Egol', 0x80A7C990, ((0x80A80C40, 0x80A811CF),)),
|
||||||
|
('decomp/ovl_Obj_Mine', 'ovl_Obj_Mine', 0x80A811D0, ((0x80A84550, 0x80A84CCF),)),
|
||||||
|
('decomp/ovl_Obj_Purify', 'ovl_Obj_Purify', 0x80A84CD0, ((0x80A85460, 0x80A8561F),)),
|
||||||
|
('decomp/ovl_En_Tru', 'ovl_En_Tru', 0x80A85620, ((0x80A88910, 0x80A8B76F),)),
|
||||||
|
('decomp/ovl_En_Trt', 'ovl_En_Trt', 0x80A8B770, ((0x80A8FE10, 0x80A903AF),)),
|
||||||
|
('decomp/ovl_En_Test5', 'ovl_En_Test5', 0x80A903B0, ((0x80A906E0, 0x80A9072F),)),
|
||||||
|
('decomp/ovl_En_Test6', 'ovl_En_Test6', 0x80A90730, ((0x80A93E60, 0x80A94A2F),)),
|
||||||
|
('decomp/ovl_En_Az', 'ovl_En_Az', 0x80A94A30, ((0x80A99010, 0x80A99E9F),)),
|
||||||
|
('decomp/ovl_En_Estone', 'ovl_En_Estone', 0x80A99EA0, ((0x80A9AB50, 0x80A9ACCF),)),
|
||||||
|
('decomp/ovl_Bg_Hakugin_Post', 'ovl_Bg_Hakugin_Post', 0x80A9ACD0, ((0x80A9D860, 0x80A9F94F),)),
|
||||||
|
('decomp/ovl_Dm_Opstage', 'ovl_Dm_Opstage', 0x80A9F950, ((0x80A9FD10, 0x80A9FDAF),)),
|
||||||
|
('decomp/ovl_Dm_Stk', 'ovl_Dm_Stk', 0x80A9FDB0, ((0x80AA3580, 0x80AA557F),)),
|
||||||
|
('decomp/ovl_Dm_Char00', 'ovl_Dm_Char00', 0x80AA5580, ((0x80AA6F90, 0x80AA81DF),)),
|
||||||
|
('decomp/ovl_Dm_Char01', 'ovl_Dm_Char01', 0x80AA81E0, ((0x80AA9DC0, 0x80AAAE2F),)),
|
||||||
|
('decomp/ovl_Dm_Char02', 'ovl_Dm_Char02', 0x80AAAE30, ((0x80AAB390, 0x80AAB49F),)),
|
||||||
|
('decomp/ovl_Dm_Char03', 'ovl_Dm_Char03', 0x80AAB4A0, ((0x80AABB60, 0x80AABC3F),)),
|
||||||
|
('decomp/ovl_Dm_Char04', 'ovl_Dm_Char04', 0x80AABC40, ((0x80AAC440, 0x80AAC59F),)),
|
||||||
|
('decomp/ovl_Dm_Char05', 'ovl_Dm_Char05', 0x80AAC5A0, ((0x80AAE240, 0x80AAE67F),)),
|
||||||
|
('decomp/ovl_Dm_Char06', 'ovl_Dm_Char06', 0x80AAE680, ((0x80AAE960, 0x80AAE9BF),)),
|
||||||
|
('decomp/ovl_Dm_Char07', 'ovl_Dm_Char07', 0x80AAE9C0, ((0x80AAEFF0, 0x80AAF04F),)),
|
||||||
|
('decomp/ovl_Dm_Char08', 'ovl_Dm_Char08', 0x80AAF050, ((0x80AB1370, 0x80AB1E0F),)),
|
||||||
|
('decomp/ovl_Dm_Char09', 'ovl_Dm_Char09', 0x80AB1E10, ((0x80AB2690, 0x80AB278F),)),
|
||||||
|
('decomp/ovl_Obj_Tokeidai', 'ovl_Obj_Tokeidai', 0x80AB2790, ((0x80AB49C0, 0x80AB4D0F),)),
|
||||||
|
('decomp/ovl_En_Mnk', 'ovl_En_Mnk', 0x80AB4D10, ((0x80AB9CF0, 0x80ABA79F),)),
|
||||||
|
('decomp/ovl_En_Egblock', 'ovl_En_Egblock', 0x80ABA7A0, ((0x80ABB040, 0x80ABB0DF),)),
|
||||||
|
('decomp/ovl_En_Guard_Nuts', 'ovl_En_Guard_Nuts', 0x80ABB0E0, ((0x80ABBDD0, 0x80ABBFBF),)),
|
||||||
|
('decomp/ovl_Bg_Hakugin_Bombwall', 'ovl_Bg_Hakugin_Bombwall', 0x80ABBFC0, ((0x80ABCF60, 0x80ABD1CF),)),
|
||||||
|
('decomp/ovl_Obj_Tokei_Tobira', 'ovl_Obj_Tokei_Tobira', 0x80ABD1D0, ((0x80ABD730, 0x80ABD82F),)),
|
||||||
|
('decomp/ovl_Bg_Hakugin_Elvpole', 'ovl_Bg_Hakugin_Elvpole', 0x80ABD830, ((0x80ABDC50, 0x80ABDC9F),)),
|
||||||
|
('decomp/ovl_En_Ma4', 'ovl_En_Ma4', 0x80ABDCA0, ((0x80AC0090, 0x80AC082F),)),
|
||||||
|
('decomp/ovl_En_Twig', 'ovl_En_Twig', 0x80AC0830, ((0x80AC1090, 0x80AC126F),)),
|
||||||
|
('decomp/ovl_En_Po_Fusen', 'ovl_En_Po_Fusen', 0x80AC1270, ((0x80AC1D80, 0x80AC1ECF),)),
|
||||||
|
('decomp/ovl_En_Door_Etc', 'ovl_En_Door_Etc', 0x80AC1ED0, ((0x80AC2580, 0x80AC26EF),)),
|
||||||
|
('decomp/ovl_En_Bigokuta', 'ovl_En_Bigokuta', 0x80AC26F0, ((0x80AC4510, 0x80AC48EF),)),
|
||||||
|
('decomp/ovl_Bg_Icefloe', 'ovl_Bg_Icefloe', 0x80AC48F0, ((0x80AC4F10, 0x80AC506F),)),
|
||||||
|
('decomp/ovl_Obj_Ocarinalift', 'ovl_Obj_Ocarinalift', 0x80AC94C0, ((0x80AC9D50, 0x80AC9E9F),)),
|
||||||
|
('decomp/ovl_En_Time_Tag', 'ovl_En_Time_Tag', 0x80AC9EA0, ((0x80ACA9D0, 0x80ACAB0F),)),
|
||||||
|
('decomp/ovl_Bg_Open_Shutter', 'ovl_Bg_Open_Shutter', 0x80ACAB10, ((0x80ACB120, 0x80ACB1DF),)),
|
||||||
|
('decomp/ovl_Bg_Open_Spot', 'ovl_Bg_Open_Spot', 0x80ACB1E0, ((0x80ACB390, 0x80ACB3FF),)),
|
||||||
|
('decomp/ovl_Bg_Fu_Kaiten', 'ovl_Bg_Fu_Kaiten', 0x80ACB400, ((0x80ACB630, 0x80ACB69F),)),
|
||||||
|
('decomp/ovl_Obj_Aqua', 'ovl_Obj_Aqua', 0x80ACB6A0, ((0x80ACC2A0, 0x80ACC46F),)),
|
||||||
|
('decomp/ovl_En_Elforg', 'ovl_En_Elforg', 0x80ACC470, ((0x80ACDA10, 0x80ACDCCF),)),
|
||||||
|
('decomp/ovl_En_Elfbub', 'ovl_En_Elfbub', 0x80ACDCD0, ((0x80ACE250, 0x80ACE32F),)),
|
||||||
|
('decomp/ovl_En_Fu_Mato', 'ovl_En_Fu_Mato', 0x80ACE330, ((0x80ACF5F0, 0x80ACF77F),)),
|
||||||
|
('decomp/ovl_En_Fu_Kago', 'ovl_En_Fu_Kago', 0x80ACF780, ((0x80AD05D0, 0x80AD082F),)),
|
||||||
|
('decomp/ovl_En_Osn', 'ovl_En_Osn', 0x80AD0830, ((0x80AD22A0, 0x80AD2B6F),)),
|
||||||
|
('decomp/ovl_Bg_Ctower_Gear', 'ovl_Bg_Ctower_Gear', 0x80AD2B70, ((0x80AD3250, 0x80AD337F),)),
|
||||||
|
('decomp/ovl_En_Trt2', 'ovl_En_Trt2', 0x80AD3380, ((0x80AD57E0, 0x80AD5BAF),)),
|
||||||
|
('decomp/ovl_Obj_Tokei_Step', 'ovl_Obj_Tokei_Step', 0x80AD5BB0, ((0x80AD6600, 0x80AD675F),)),
|
||||||
|
('decomp/ovl_Bg_Lotus', 'ovl_Bg_Lotus', 0x80AD6760, ((0x80AD6CF0, 0x80AD6DCF),)),
|
||||||
|
('decomp/ovl_En_Kame', 'ovl_En_Kame', 0x80AD6DD0, ((0x80AD8DC0, 0x80AD923F),)),
|
||||||
|
('decomp/ovl_Obj_Takaraya_Wall', 'ovl_Obj_Takaraya_Wall', 0x80AD9240, ((0x80ADA280, 0x80ADAAEF),)),
|
||||||
|
('decomp/ovl_Bg_Fu_Mizu', 'ovl_Bg_Fu_Mizu', 0x80ADAAF0, ((0x80ADAD80, 0x80ADADCF),)),
|
||||||
|
('decomp/ovl_En_Sellnuts', 'ovl_En_Sellnuts', 0x80ADADD0, ((0x80ADD910, 0x80ADE22F),)),
|
||||||
|
('decomp/ovl_Bg_Dkjail_Ivy', 'ovl_Bg_Dkjail_Ivy', 0x80ADE230, ((0x80ADE930, 0x80ADEA6F),)),
|
||||||
|
('decomp/ovl_Obj_Visiblock', 'ovl_Obj_Visiblock', 0x80ADEA70, ((0x80ADEB30, 0x80ADEB8F),)),
|
||||||
|
('decomp/ovl_En_Takaraya', 'ovl_En_Takaraya', 0x80ADEB90, ((0x80ADFAE0, 0x80ADFC9F),)),
|
||||||
|
('decomp/ovl_En_Tsn', 'ovl_En_Tsn', 0x80ADFCA0, ((0x80AE1170, 0x80AE164F),)),
|
||||||
|
('decomp/ovl_En_Ds2n', 'ovl_En_Ds2n', 0x80AE1650, ((0x80AE1AB0, 0x80AE1B6F),)),
|
||||||
|
('decomp/ovl_En_Fsn', 'ovl_En_Fsn', 0x80AE1B70, ((0x80AE5B00, 0x80AE612F),)),
|
||||||
|
('decomp/ovl_En_Shn', 'ovl_En_Shn', 0x80AE6130, ((0x80AE6F00, 0x80AE739F),)),
|
||||||
|
('decomp/ovl_En_Stop_heishi', 'ovl_En_Stop_heishi', 0x80AE73A0, ((0x80AE8890, 0x80AE8B6F),)),
|
||||||
|
('decomp/ovl_Obj_Bigicicle', 'ovl_Obj_Bigicicle', 0x80AE8B70, ((0x80AE9800, 0x80AE9A1F),)),
|
||||||
|
('decomp/ovl_En_Lift_Nuts', 'ovl_En_Lift_Nuts', 0x80AE9A20, ((0x80AEBD30, 0x80AEC45F),)),
|
||||||
|
('decomp/ovl_En_Tk', 'ovl_En_Tk', 0x80AEC460, ((0x80AEF800, 0x80AF005F),)),
|
||||||
|
('decomp/ovl_Bg_Market_Step', 'ovl_Bg_Market_Step', 0x80AF0060, ((0x80AF00F0, 0x80AF016F),)),
|
||||||
|
('decomp/ovl_Obj_Lupygamelift', 'ovl_Obj_Lupygamelift', 0x80AF0170, ((0x80AF0720, 0x80AF081F),)),
|
||||||
|
('decomp/ovl_En_Test7', 'ovl_En_Test7', 0x80AF0820, ((0x80AF33F0, 0x80AF390F),)),
|
||||||
|
('decomp/ovl_Obj_Lightblock', 'ovl_Obj_Lightblock', 0x80AF3910, ((0x80AF3E80, 0x80AF3F6F),)),
|
||||||
|
('decomp/ovl_Mir_Ray2', 'ovl_Mir_Ray2', 0x80AF3F70, ((0x80AF4330, 0x80AF43EF),)),
|
||||||
|
('decomp/ovl_En_Wdhand', 'ovl_En_Wdhand', 0x80AF43F0, ((0x80AF63C0, 0x80AF675F),)),
|
||||||
|
('decomp/ovl_En_Gamelupy', 'ovl_En_Gamelupy', 0x80AF6760, ((0x80AF6CD0, 0x80AF6DDF),)),
|
||||||
|
('decomp/ovl_Bg_Danpei_Movebg', 'ovl_Bg_Danpei_Movebg', 0x80AF6DE0, ((0x80AF7510, 0x80AF763F),)),
|
||||||
|
('decomp/ovl_En_Snowwd', 'ovl_En_Snowwd', 0x80AF7640, ((0x80AF7A70, 0x80AF7B3F),)),
|
||||||
|
('decomp/ovl_En_Pm', 'ovl_En_Pm', 0x80AF7B40, ((0x80AFAD80, 0x80AFC95F),)),
|
||||||
|
('decomp/ovl_En_Gakufu', 'ovl_En_Gakufu', 0x80AFC960, ((0x80AFD1B0, 0x80AFD37F),)),
|
||||||
|
('decomp/ovl_Elf_Msg4', 'ovl_Elf_Msg4', 0x80AFD380, ((0x80AFD8D0, 0x80AFD98F),)),
|
||||||
|
('decomp/ovl_Elf_Msg5', 'ovl_Elf_Msg5', 0x80AFD990, ((0x80AFDBB0, 0x80AFDC3F),)),
|
||||||
|
('decomp/ovl_En_Col_Man', 'ovl_En_Col_Man', 0x80AFDC40, ((0x80AFE730, 0x80AFE89F),)),
|
||||||
|
('decomp/ovl_En_Talk_Gibud', 'ovl_En_Talk_Gibud', 0x80AFE8A0, ((0x80B011E0, 0x80B0198F),)),
|
||||||
|
('decomp/ovl_En_Giant', 'ovl_En_Giant', 0x80B01990, ((0x80B02930, 0x80B02CCF),)),
|
||||||
|
('decomp/ovl_Obj_Snowball', 'ovl_Obj_Snowball', 0x80B02CD0, ((0x80B04F30, 0x80B0528F),)),
|
||||||
|
('decomp/ovl_Boss_Hakugin', 'ovl_Boss_Hakugin', 0x80B05290, ((0x80B0E6E0, 0x80B0F5DF),)),
|
||||||
|
('decomp/ovl_En_Gb2', 'ovl_En_Gb2', 0x80B0F5E0, ((0x80B11990, 0x80B11E5F),)),
|
||||||
|
('decomp/ovl_En_Onpuman', 'ovl_En_Onpuman', 0x80B11E60, ((0x80B12370, 0x80B1242F),)),
|
||||||
|
('decomp/ovl_Bg_Tobira01', 'ovl_Bg_Tobira01', 0x80B12430, ((0x80B12800, 0x80B1286F),)),
|
||||||
|
('decomp/ovl_En_Tag_Obj', 'ovl_En_Tag_Obj', 0x80B12870, ((0x80B12900, 0x80B1297F),)),
|
||||||
|
('decomp/ovl_Obj_Dhouse', 'ovl_Obj_Dhouse', 0x80B12980, ((0x80B13E70, 0x80B1417F),)),
|
||||||
|
('decomp/ovl_Obj_Hakaisi', 'ovl_Obj_Hakaisi', 0x80B14180, ((0x80B15590, 0x80B1578F),)),
|
||||||
|
('decomp/ovl_Bg_Hakugin_Switch', 'ovl_Bg_Hakugin_Switch', 0x80B15790, ((0x80B16840, 0x80B16AFF),)),
|
||||||
|
('decomp/ovl_En_Snowman', 'ovl_En_Snowman', 0x80B16B00, ((0x80B199E0, 0x80B19F5F),)),
|
||||||
|
('decomp/ovl_TG_Sw', 'ovl_TG_Sw', 0x80B19F60, ((0x80B1A320, 0x80B1A3AF),)),
|
||||||
|
('decomp/ovl_En_Po_Sisters', 'ovl_En_Po_Sisters', 0x80B1A3B0, ((0x80B1DA30, 0x80B1DEAF),)),
|
||||||
|
('decomp/ovl_En_Pp', 'ovl_En_Pp', 0x80B1DEB0, ((0x80B21620, 0x80B21AFF),)),
|
||||||
|
('decomp/ovl_En_Hakurock', 'ovl_En_Hakurock', 0x80B21B00, ((0x80B22A60, 0x80B22BFF),)),
|
||||||
|
('decomp/ovl_En_Hanabi', 'ovl_En_Hanabi', 0x80B22C00, ((0x80B23A80, 0x80B23D4F),)),
|
||||||
|
('decomp/ovl_Obj_Dowsing', 'ovl_Obj_Dowsing', 0x80B23D50, ((0x80B23E80, 0x80B23ECF),)),
|
||||||
|
('decomp/ovl_Obj_Wind', 'ovl_Obj_Wind', 0x80B23ED0, ((0x80B24460, 0x80B2462F),)),
|
||||||
|
('decomp/ovl_En_Racedog', 'ovl_En_Racedog', 0x80B24630, ((0x80B25D20, 0x80B2629F),)),
|
||||||
|
('decomp/ovl_En_Kendo_Js', 'ovl_En_Kendo_Js', 0x80B262A0, ((0x80B27C10, 0x80B2807F),)),
|
||||||
|
('decomp/ovl_Bg_Botihasira', 'ovl_Bg_Botihasira', 0x80B28080, ((0x80B282D0, 0x80B2836F),)),
|
||||||
|
('decomp/ovl_En_Fish2', 'ovl_En_Fish2', 0x80B28370, ((0x80B2B2E0, 0x80B2B82F),)),
|
||||||
|
('decomp/ovl_En_Pst', 'ovl_En_Pst', 0x80B2B830, ((0x80B2C200, 0x80B2C6EF),)),
|
||||||
|
('decomp/ovl_En_Poh', 'ovl_En_Poh', 0x80B2C6F0, ((0x80B2F660, 0x80B2FB0F),)),
|
||||||
|
('decomp/ovl_Obj_Spidertent', 'ovl_Obj_Spidertent', 0x80B2FB10, ((0x80B31040, 0x80B3158F),)),
|
||||||
|
('decomp/ovl_En_Zoraegg', 'ovl_En_Zoraegg', 0x80B31590, ((0x80B33910, 0x80B33D2F),)),
|
||||||
|
('decomp/ovl_En_Kbt', 'ovl_En_Kbt', 0x80B33D30, ((0x80B34B20, 0x80B34F6F),)),
|
||||||
|
('decomp/ovl_En_Gg', 'ovl_En_Gg', 0x80B34F70, ((0x80B36BE0, 0x80B3707F),)),
|
||||||
|
('decomp/ovl_En_Maruta', 'ovl_En_Maruta', 0x80B37080, ((0x80B38680, 0x80B38E1F),)),
|
||||||
|
('decomp/ovl_Obj_Snowball2', 'ovl_Obj_Snowball2', 0x80B38E20, ((0x80B3A8C0, 0x80B3AC4F),)),
|
||||||
|
('decomp/ovl_En_Gg2', 'ovl_En_Gg2', 0x80B3AC50, ((0x80B3BEE0, 0x80B3C25F),)),
|
||||||
|
('decomp/ovl_Obj_Ghaka', 'ovl_Obj_Ghaka', 0x80B3C260, ((0x80B3C940, 0x80B3CA1F),)),
|
||||||
|
('decomp/ovl_En_Dnp', 'ovl_En_Dnp', 0x80B3CA20, ((0x80B3DC60, 0x80B3DFEF),)),
|
||||||
|
('decomp/ovl_En_Dai', 'ovl_En_Dai', 0x80B3DFF0, ((0x80B3FBD0, 0x80B4007F),)),
|
||||||
|
('decomp/ovl_Bg_Goron_Oyu', 'ovl_Bg_Goron_Oyu', 0x80B40080, ((0x80B40760, 0x80B407FF),)),
|
||||||
|
('decomp/ovl_En_Kgy', 'ovl_En_Kgy', 0x80B40800, ((0x80B43250, 0x80B439AF),)),
|
||||||
|
('decomp/ovl_En_Invadepoh', 'ovl_En_Invadepoh', 0x80B439B0, ((0x80B4E890, 0x80B5040F),)),
|
||||||
|
('decomp/ovl_En_Gk', 'ovl_En_Gk', 0x80B50410, ((0x80B531F0, 0x80B5383F),)),
|
||||||
|
('decomp/ovl_En_An', 'ovl_En_An', 0x80B53840, ((0x80B581D0, 0x80B5A71F),)),
|
||||||
|
('decomp/ovl_En_Bee', 'ovl_En_Bee', 0x80B5A720, ((0x80B5B1F0, 0x80B5B2DF),)),
|
||||||
|
('decomp/ovl_En_Ot', 'ovl_En_Ot', 0x80B5B2E0, ((0x80B5E380, 0x80B5E88F),)),
|
||||||
|
('decomp/ovl_En_Dragon', 'ovl_En_Dragon', 0x80B5E890, ((0x80B605D0, 0x80B60ACF),)),
|
||||||
|
('decomp/ovl_Obj_Dora', 'ovl_Obj_Dora', 0x80B60AD0, ((0x80B612F0, 0x80B615DF),)),
|
||||||
|
('decomp/ovl_En_Bigpo', 'ovl_En_Bigpo', 0x80B615E0, ((0x80B64FF0, 0x80B654BF),)),
|
||||||
|
('decomp/ovl_Obj_Kendo_Kanban', 'ovl_Obj_Kendo_Kanban', 0x80B654C0, ((0x80B66640, 0x80B66A1F),)),
|
||||||
|
('decomp/ovl_Obj_Hariko', 'ovl_Obj_Hariko', 0x80B66A20, ((0x80B66CB0, 0x80B66D2F),)),
|
||||||
|
('decomp/ovl_En_Sth', 'ovl_En_Sth', 0x80B66D30, ((0x80B685A0, 0x80B6D65F),)),
|
||||||
|
('decomp/ovl_Bg_Sinkai_Kabe', 'ovl_Bg_Sinkai_Kabe', 0x80B6D660, ((0x80B6DB50, 0x80B6DBDF),)),
|
||||||
|
('decomp/ovl_Bg_Haka_Curtain', 'ovl_Bg_Haka_Curtain', 0x80B6DBE0, ((0x80B6DF80, 0x80B6E01F),)),
|
||||||
|
('decomp/ovl_Bg_Kin2_Bombwall', 'ovl_Bg_Kin2_Bombwall', 0x80B6E020, ((0x80B6E6D0, 0x80B6E81F),)),
|
||||||
|
('decomp/ovl_Bg_Kin2_Fence', 'ovl_Bg_Kin2_Fence', 0x80B6E820, ((0x80B6EDC0, 0x80B6EF9F),)),
|
||||||
|
('decomp/ovl_Bg_Kin2_Picture', 'ovl_Bg_Kin2_Picture', 0x80B6EFA0, ((0x80B6F970, 0x80B6FB2F),)),
|
||||||
|
('decomp/ovl_Bg_Kin2_Shelf', 'ovl_Bg_Kin2_Shelf', 0x80B6FB30, ((0x80B70730, 0x80B708BF),)),
|
||||||
|
('decomp/ovl_En_Rail_Skb', 'ovl_En_Rail_Skb', 0x80B708C0, ((0x80B732B0, 0x80B73A8F),)),
|
||||||
|
('decomp/ovl_En_Jg', 'ovl_En_Jg', 0x80B73A90, ((0x80B75800, 0x80B7602F),)),
|
||||||
|
('decomp/ovl_En_Tru_Mt', 'ovl_En_Tru_Mt', 0x80B76030, ((0x80B774F0, 0x80B7776F),)),
|
||||||
|
('decomp/ovl_Obj_Um', 'ovl_Obj_Um', 0x80B77770, ((0x80B7C0F0, 0x80B7C88F),)),
|
||||||
|
('decomp/ovl_En_Neo_Reeba', 'ovl_En_Neo_Reeba', 0x80B7C890, ((0x80B7E4E0, 0x80B7E92F),)),
|
||||||
|
('decomp/ovl_Bg_Mbar_Chair', 'ovl_Bg_Mbar_Chair', 0x80B7E930, ((0x80B7EA00, 0x80B7EA5F),)),
|
||||||
|
('decomp/ovl_Bg_Ikana_Block', 'ovl_Bg_Ikana_Block', 0x80B7EA60, ((0x80B7F620, 0x80B7F72F),)),
|
||||||
|
('decomp/ovl_Bg_Ikana_Mirror', 'ovl_Bg_Ikana_Mirror', 0x80B7F730, ((0x80B7FF30, 0x80B802DF),)),
|
||||||
|
('decomp/ovl_Bg_Ikana_Rotaryroom', 'ovl_Bg_Ikana_Rotaryroom', 0x80B802E0, ((0x80B820C0, 0x80B823AF),)),
|
||||||
|
('decomp/ovl_Bg_Dblue_Balance', 'ovl_Bg_Dblue_Balance', 0x80B823B0, ((0x80B83A00, 0x80B83C7F),)),
|
||||||
|
('decomp/ovl_Bg_Dblue_Waterfall', 'ovl_Bg_Dblue_Waterfall', 0x80B83C80, ((0x80B85350, 0x80B8558F),)),
|
||||||
|
('decomp/ovl_En_Kaizoku', 'ovl_En_Kaizoku', 0x80B85590, ((0x80B8A8D0, 0x80B8B2CF),)),
|
||||||
|
('decomp/ovl_En_Ge2', 'ovl_En_Ge2', 0x80B8B2D0, ((0x80B8CE20, 0x80B8D02F),)),
|
||||||
|
('decomp/ovl_En_Ma_Yts', 'ovl_En_Ma_Yts', 0x80B8D030, ((0x80B8E150, 0x80B8E51F),)),
|
||||||
|
('decomp/ovl_En_Ma_Yto', 'ovl_En_Ma_Yto', 0x80B8E520, ((0x80B913F0, 0x80B91CBF),)),
|
||||||
|
('decomp/ovl_Obj_Tokei_Turret', 'ovl_Obj_Tokei_Turret', 0x80B91CC0, ((0x80B91EA0, 0x80B91F1F),)),
|
||||||
|
('decomp/ovl_Bg_Dblue_Elevator', 'ovl_Bg_Dblue_Elevator', 0x80B91F20, ((0x80B92940, 0x80B92B0F),)),
|
||||||
|
('decomp/ovl_Obj_Warpstone', 'ovl_Obj_Warpstone', 0x80B92B10, ((0x80B93200, 0x80B9330F),)),
|
||||||
|
('decomp/ovl_En_Zog', 'ovl_En_Zog', 0x80B93310, ((0x80B95860, 0x80B95E1F),)),
|
||||||
|
('decomp/ovl_Obj_Rotlift', 'ovl_Obj_Rotlift', 0x80B95E20, ((0x80B96140, 0x80B961DF),)),
|
||||||
|
('decomp/ovl_Obj_Jg_Gakki', 'ovl_Obj_Jg_Gakki', 0x80B961E0, ((0x80B963C0, 0x80B9640F),)),
|
||||||
|
('decomp/ovl_Bg_Inibs_Movebg', 'ovl_Bg_Inibs_Movebg', 0x80B96410, ((0x80B96540, 0x80B965CF),)),
|
||||||
|
('decomp/ovl_En_Zot', 'ovl_En_Zot', 0x80B965D0, ((0x80B998C0, 0x80B9A0AF),)),
|
||||||
|
('decomp/ovl_Obj_Tree', 'ovl_Obj_Tree', 0x80B9A0B0, ((0x80B9A550, 0x80B9A64F),)),
|
||||||
|
('decomp/ovl_Obj_Y2lift', 'ovl_Obj_Y2lift', 0x80B9A650, ((0x80B9A920, 0x80B9A97F),)),
|
||||||
|
('decomp/ovl_Obj_Y2shutter', 'ovl_Obj_Y2shutter', 0x80B9A980, ((0x80B9AE50, 0x80B9AF4F),)),
|
||||||
|
('decomp/ovl_Obj_Boat', 'ovl_Obj_Boat', 0x80B9AF50, ((0x80B9B660, 0x80B9B6DF),)),
|
||||||
|
('decomp/ovl_Obj_Taru', 'ovl_Obj_Taru', 0x80B9B6E0, ((0x80B9C320, 0x80B9C44F),)),
|
||||||
|
('decomp/ovl_Obj_Hunsui', 'ovl_Obj_Hunsui', 0x80B9C450, ((0x80B9DC70, 0x80B9DEDF),)),
|
||||||
|
('decomp/ovl_En_Jc_Mato', 'ovl_En_Jc_Mato', 0x80B9DEE0, ((0x80B9E1F0, 0x80B9E2BF),)),
|
||||||
|
('decomp/ovl_Mir_Ray3', 'ovl_Mir_Ray3', 0x80B9E2C0, ((0x80B9F400, 0x80B9F56F),)),
|
||||||
|
('decomp/ovl_En_Zob', 'ovl_En_Zob', 0x80B9F570, ((0x80BA10B0, 0x80BA159F),)),
|
||||||
|
('decomp/ovl_Elf_Msg6', 'ovl_Elf_Msg6', 0x80BA15A0, ((0x80BA22E0, 0x80BA241F),)),
|
||||||
|
('decomp/ovl_Obj_Nozoki', 'ovl_Obj_Nozoki', 0x80BA2420, ((0x80BA3490, 0x80BA36BF),)),
|
||||||
|
('decomp/ovl_En_Toto', 'ovl_En_Toto', 0x80BA36C0, ((0x80BA4FD0, 0x80BA53FF),)),
|
||||||
|
('decomp/ovl_En_Railgibud', 'ovl_En_Railgibud', 0x80BA5400, ((0x80BA80A0, 0x80BA881F),)),
|
||||||
|
('decomp/ovl_En_Baba', 'ovl_En_Baba', 0x80BA8820, ((0x80BAA380, 0x80BAA6CF),)),
|
||||||
|
('decomp/ovl_En_Suttari', 'ovl_En_Suttari', 0x80BAA6D0, ((0x80BAE6B0, 0x80BAEF6F),)),
|
||||||
|
('decomp/ovl_En_Zod', 'ovl_En_Zod', 0x80BAEF70, ((0x80BB0520, 0x80BB08DF),)),
|
||||||
|
('decomp/ovl_En_Kujiya', 'ovl_En_Kujiya', 0x80BB08E0, ((0x80BB1500, 0x80BB16CF),)),
|
||||||
|
('decomp/ovl_En_Geg', 'ovl_En_Geg', 0x80BB16D0, ((0x80BB3E50, 0x80BB46FF),)),
|
||||||
|
('decomp/ovl_Obj_Kinoko', 'ovl_Obj_Kinoko', 0x80BB4700, ((0x80BB4A70, 0x80BB4AEF),)),
|
||||||
|
('decomp/ovl_Obj_Yasi', 'ovl_Obj_Yasi', 0x80BB4AF0, ((0x80BB4D70, 0x80BB4DFF),)),
|
||||||
|
('decomp/ovl_En_Tanron1', 'ovl_En_Tanron1', 0x80BB4E00, ((0x80BB5E00, 0x80BB67CF),)),
|
||||||
|
('decomp/ovl_En_Tanron2', 'ovl_En_Tanron2', 0x80BB67D0, ((0x80BB8150, 0x80BB859F),)),
|
||||||
|
('decomp/ovl_En_Tanron3', 'ovl_En_Tanron3', 0x80BB85A0, ((0x80BB9720, 0x80BB98DF),)),
|
||||||
|
('decomp/ovl_Obj_Chan', 'ovl_Obj_Chan', 0x80BB98E0, ((0x80BBAB10, 0x80BBAC9F),)),
|
||||||
|
('decomp/ovl_En_Zos', 'ovl_En_Zos', 0x80BBACA0, ((0x80BBC6D0, 0x80BBCA7F),)),
|
||||||
|
('decomp/ovl_En_S_Goro', 'ovl_En_S_Goro', 0x80BBCA80, ((0x80BBF800, 0x80BBFDAF),)),
|
||||||
|
('decomp/ovl_En_Nb', 'ovl_En_Nb', 0x80BBFDB0, ((0x80BC13F0, 0x80BC18FF),)),
|
||||||
|
('decomp/ovl_En_Ja', 'ovl_En_Ja', 0x80BC1900, ((0x80BC35F0, 0x80BC397F),)),
|
||||||
|
('decomp/ovl_Bg_F40_Block', 'ovl_Bg_F40_Block', 0x80BC3980, ((0x80BC4600, 0x80BC47AF),)),
|
||||||
|
('decomp/ovl_Bg_F40_Switch', 'ovl_Bg_F40_Switch', 0x80BC47B0, ((0x80BC4DD0, 0x80BC4F2F),)),
|
||||||
|
('decomp/ovl_En_Po_Composer', 'ovl_En_Po_Composer', 0x80BC4F30, ((0x80BC6760, 0x80BC6BEF),)),
|
||||||
|
('decomp/ovl_En_Guruguru', 'ovl_En_Guruguru', 0x80BC6BF0, ((0x80BC7960, 0x80BC7ACF),)),
|
||||||
|
('decomp/ovl_Oceff_Wipe5', 'ovl_Oceff_Wipe5', 0x80BC7AD0, ((0x80BC7EF0, 0x80BC926F),)),
|
||||||
|
('decomp/ovl_En_Stone_heishi', 'ovl_En_Stone_heishi', 0x80BC9270, ((0x80BCA380, 0x80BCA59F),)),
|
||||||
|
('decomp/ovl_Oceff_Wipe6', 'ovl_Oceff_Wipe6', 0x80BCA5A0, ((0x80BCA8B0, 0x80BCABEF),)),
|
||||||
|
('decomp/ovl_En_Scopenuts', 'ovl_En_Scopenuts', 0x80BCABF0, ((0x80BCCB20, 0x80BCCFFF),)),
|
||||||
|
('decomp/ovl_En_Scopecrow', 'ovl_En_Scopecrow', 0x80BCD000, ((0x80BCDB50, 0x80BCDCAF),)),
|
||||||
|
('decomp/ovl_Oceff_Wipe7', 'ovl_Oceff_Wipe7', 0x80BCDCB0, ((0x80BCDFC0, 0x80BCEB1F),)),
|
||||||
|
('decomp/ovl_Eff_Kamejima_Wave', 'ovl_Eff_Kamejima_Wave', 0x80BCEB20, ((0x80BCF070, 0x80BCF1CF),)),
|
||||||
|
('decomp/ovl_En_Hg', 'ovl_En_Hg', 0x80BCF1D0, ((0x80BCFF90, 0x80BD02AF),)),
|
||||||
|
('decomp/ovl_En_Hgo', 'ovl_En_Hgo', 0x80BD02B0, ((0x80BD0E80, 0x80BD11DF),)),
|
||||||
|
('decomp/ovl_En_Zov', 'ovl_En_Zov', 0x80BD11E0, ((0x80BD26C0, 0x80BD2A2F),)),
|
||||||
|
('decomp/ovl_En_Ah', 'ovl_En_Ah', 0x80BD2A30, ((0x80BD3DB0, 0x80BD408F),)),
|
||||||
|
('decomp/ovl_Obj_Hgdoor', 'ovl_Obj_Hgdoor', 0x80BD4090, ((0x80BD4670, 0x80BD471F),)),
|
||||||
|
('decomp/ovl_Bg_Ikana_Bombwall', 'ovl_Bg_Ikana_Bombwall', 0x80BD4720, ((0x80BD5250, 0x80BD53BF),)),
|
||||||
|
('decomp/ovl_Bg_Ikana_Ray', 'ovl_Bg_Ikana_Ray', 0x80BD53C0, ((0x80BD55D0, 0x80BD568F),)),
|
||||||
|
('decomp/ovl_Bg_Ikana_Shutter', 'ovl_Bg_Ikana_Shutter', 0x80BD5690, ((0x80BD5CF0, 0x80BD5DFF),)),
|
||||||
|
('decomp/ovl_Bg_Haka_Bombwall', 'ovl_Bg_Haka_Bombwall', 0x80BD5E00, ((0x80BD6480, 0x80BD657F),)),
|
||||||
|
('decomp/ovl_Bg_Haka_Tomb', 'ovl_Bg_Haka_Tomb', 0x80BD6580, ((0x80BD6880, 0x80BD690F),)),
|
||||||
|
('decomp/ovl_En_Sc_Ruppe', 'ovl_En_Sc_Ruppe', 0x80BD6910, ((0x80BD6DF0, 0x80BD6F0F),)),
|
||||||
|
('decomp/ovl_Bg_Iknv_Doukutu', 'ovl_Bg_Iknv_Doukutu', 0x80BD6F10, ((0x80BD79C0, 0x80BD7AAF),)),
|
||||||
|
('decomp/ovl_Bg_Iknv_Obj', 'ovl_Bg_Iknv_Obj', 0x80BD7AB0, ((0x80BD81D0, 0x80BD82AF),)),
|
||||||
|
('decomp/ovl_En_Pamera', 'ovl_En_Pamera', 0x80BD82B0, ((0x80BDA460, 0x80BDAA2F),)),
|
||||||
|
('decomp/ovl_Obj_HsStump', 'ovl_Obj_HsStump', 0x80BDAA30, ((0x80BDAF60, 0x80BDB03F),)),
|
||||||
|
('decomp/ovl_En_Hidden_Nuts', 'ovl_En_Hidden_Nuts', 0x80BDB040, ((0x80BDC0B0, 0x80BDC26F),)),
|
||||||
|
('decomp/ovl_En_Zow', 'ovl_En_Zow', 0x80BDC270, ((0x80BDDCD0, 0x80BDDFDF),)),
|
||||||
|
('decomp/ovl_En_Talk', 'ovl_En_Talk', 0x80BDDFE0, ((0x80BDE140, 0x80BDE19F),)),
|
||||||
|
('decomp/ovl_En_Al', 'ovl_En_Al', 0x80BDE1A0, ((0x80BDFC70, 0x80BE04DF),)),
|
||||||
|
('decomp/ovl_En_Tab', 'ovl_En_Tab', 0x80BE04E0, ((0x80BE18D0, 0x80BE1C7F),)),
|
||||||
|
('decomp/ovl_En_Nimotsu', 'ovl_En_Nimotsu', 0x80BE1C80, ((0x80BE1F90, 0x80BE202F),)),
|
||||||
|
('decomp/ovl_En_Hit_Tag', 'ovl_En_Hit_Tag', 0x80BE2030, ((0x80BE21D0, 0x80BE225F),)),
|
||||||
|
('decomp/ovl_En_Ruppecrow', 'ovl_En_Ruppecrow', 0x80BE2260, ((0x80BE3990, 0x80BE3B7F),)),
|
||||||
|
('decomp/ovl_En_Tanron4', 'ovl_En_Tanron4', 0x80BE3B80, ((0x80BE4880, 0x80BE492F),)),
|
||||||
|
('decomp/ovl_En_Tanron5', 'ovl_En_Tanron5', 0x80BE4930, ((0x80BE5D80, 0x80BE603F),)),
|
||||||
|
('decomp/ovl_En_Tanron6', 'ovl_En_Tanron6', 0x80BE6040, ((0x80BE6150, 0x80BE61CF),)),
|
||||||
|
('decomp/ovl_En_Daiku2', 'ovl_En_Daiku2', 0x80BE61D0, ((0x80BE78D0, 0x80BE7AFF),)),
|
||||||
|
('decomp/ovl_En_Muto', 'ovl_En_Muto', 0x80BE7B00, ((0x80BE83F0, 0x80BE84EF),)),
|
||||||
|
('decomp/ovl_En_Baisen', 'ovl_En_Baisen', 0x80BE84F0, ((0x80BE8DF0, 0x80BE8F1F),)),
|
||||||
|
('decomp/ovl_En_Heishi', 'ovl_En_Heishi', 0x80BE8F20, ((0x80BE9430, 0x80BE950F),)),
|
||||||
|
('decomp/ovl_En_Demo_heishi', 'ovl_En_Demo_heishi', 0x80BE9510, ((0x80BE9A30, 0x80BE9B1F),)),
|
||||||
|
('decomp/ovl_En_Dt', 'ovl_En_Dt', 0x80BE9B20, ((0x80BEB1B0, 0x80BEB51F),)),
|
||||||
|
('decomp/ovl_En_Cha', 'ovl_En_Cha', 0x80BEB520, ((0x80BEB860, 0x80BEB93F),)),
|
||||||
|
('decomp/ovl_Obj_Dinner', 'ovl_Obj_Dinner', 0x80BEB940, ((0x80BEBA70, 0x80BEBABF),)),
|
||||||
|
('decomp/ovl_Eff_Lastday', 'ovl_Eff_Lastday', 0x80BEBAC0, ((0x80BEC190, 0x80BEC23F),)),
|
||||||
|
('decomp/ovl_Bg_Ikana_Dharma', 'ovl_Bg_Ikana_Dharma', 0x80BEC240, ((0x80BECAB0, 0x80BECBDF),)),
|
||||||
|
('decomp/ovl_En_Akindonuts', 'ovl_En_Akindonuts', 0x80BECBE0, ((0x80BF02D0, 0x80BF0D8F),)),
|
||||||
|
('decomp/ovl_Eff_Stk', 'ovl_Eff_Stk', 0x80BF0D90, ((0x80BF10C0, 0x80BF114F),)),
|
||||||
|
('decomp/ovl_En_Ig', 'ovl_En_Ig', 0x80BF1150, ((0x80BF3260, 0x80BF391F),)),
|
||||||
|
('decomp/ovl_En_Rg', 'ovl_En_Rg', 0x80BF3920, ((0x80BF5740, 0x80BF5C1F),)),
|
||||||
|
('decomp/ovl_En_Osk', 'ovl_En_Osk', 0x80BF5C20, ((0x80BF6F80, 0x80BF74DF),)),
|
||||||
|
('decomp/ovl_En_Sth2', 'ovl_En_Sth2', 0x80BF74E0, ((0x80BF7920, 0x80BFA0FF),)),
|
||||||
|
('decomp/ovl_En_Yb', 'ovl_En_Yb', 0x80BFA100, ((0x80BFB290, 0x80BFB47F),)),
|
||||||
|
('decomp/ovl_En_Rz', 'ovl_En_Rz', 0x80BFB480, ((0x80BFCCC0, 0x80BFCF9F),)),
|
||||||
|
('decomp/ovl_En_Scopecoin', 'ovl_En_Scopecoin', 0x80BFCFA0, ((0x80BFD260, 0x80BFD2DF),)),
|
||||||
|
('decomp/ovl_En_Bjt', 'ovl_En_Bjt', 0x80BFD2E0, ((0x80BFDEA0, 0x80BFE16F),)),
|
||||||
|
('decomp/ovl_En_Bomjima', 'ovl_En_Bomjima', 0x80BFE170, ((0x80C009F0, 0x80C00E9F),)),
|
||||||
|
('decomp/ovl_En_Bomjimb', 'ovl_En_Bomjimb', 0x80C00EA0, ((0x80C03170, 0x80C0352F),)),
|
||||||
|
('decomp/ovl_En_Bombers', 'ovl_En_Bombers', 0x80C03530, ((0x80C04750, 0x80C0492F),)),
|
||||||
|
('decomp/ovl_En_Bombers2', 'ovl_En_Bombers2', 0x80C04930, ((0x80C05880, 0x80C05A6F),)),
|
||||||
|
('decomp/ovl_En_Bombal', 'ovl_En_Bombal', 0x80C05A70, ((0x80C06440, 0x80C0650F),)),
|
||||||
|
('decomp/ovl_Obj_Moon_Stone', 'ovl_Obj_Moon_Stone', 0x80C06510, ((0x80C06A10, 0x80C06A9F),)),
|
||||||
|
('decomp/ovl_Obj_Mu_Pict', 'ovl_Obj_Mu_Pict', 0x80C06AA0, ((0x80C06FE0, 0x80C0710F),)),
|
||||||
|
('decomp/ovl_Bg_Ikninside', 'ovl_Bg_Ikninside', 0x80C07110, ((0x80C07680, 0x80C0773F),)),
|
||||||
|
('decomp/ovl_Eff_Zoraband', 'ovl_Eff_Zoraband', 0x80C07740, ((0x80C07AC0, 0x80C07B1F),)),
|
||||||
|
('decomp/ovl_Obj_Kepn_Koya', 'ovl_Obj_Kepn_Koya', 0x80C07B20, ((0x80C07C20, 0x80C07C7F),)),
|
||||||
|
('decomp/ovl_Obj_Usiyane', 'ovl_Obj_Usiyane', 0x80C07C80, ((0x80C08640, 0x80C0875F),)),
|
||||||
|
('decomp/ovl_En_Nnh', 'ovl_En_Nnh', 0x80C08760, ((0x80C089E0, 0x80C08A7F),)),
|
||||||
|
('decomp/ovl_Obj_Kzsaku', 'ovl_Obj_Kzsaku', 0x80C08A80, ((0x80C08DD0, 0x80C08E3F),)),
|
||||||
|
('decomp/ovl_Obj_Milk_Bin', 'ovl_Obj_Milk_Bin', 0x80C08E40, ((0x80C09030, 0x80C090CF),)),
|
||||||
|
('decomp/ovl_En_Kitan', 'ovl_En_Kitan', 0x80C090D0, ((0x80C09D30, 0x80C09ECF),)),
|
||||||
|
('decomp/ovl_Bg_Astr_Bombwall', 'ovl_Bg_Astr_Bombwall', 0x80C09ED0, ((0x80C0A600, 0x80C0A73F),)),
|
||||||
|
('decomp/ovl_Bg_Iknin_Susceil', 'ovl_Bg_Iknin_Susceil', 0x80C0A740, ((0x80C0B0C0, 0x80C0B28F),)),
|
||||||
|
('decomp/ovl_En_Bsb', 'ovl_En_Bsb', 0x80C0B290, ((0x80C0F8D0, 0x80C0FFCF),)),
|
||||||
|
('decomp/ovl_En_Recepgirl', 'ovl_En_Recepgirl', 0x80C0FFD0, ((0x80C10690, 0x80C1076F),)),
|
||||||
|
('decomp/ovl_En_Thiefbird', 'ovl_En_Thiefbird', 0x80C10770, ((0x80C135A0, 0x80C1392F),)),
|
||||||
|
('decomp/ovl_En_Jgame_Tsn', 'ovl_En_Jgame_Tsn', 0x80C13930, ((0x80C15010, 0x80C152EF),)),
|
||||||
|
('decomp/ovl_Obj_Jgame_Light', 'ovl_Obj_Jgame_Light', 0x80C152F0, ((0x80C15BA0, 0x80C161DF),)),
|
||||||
|
('decomp/ovl_Obj_Yado', 'ovl_Obj_Yado', 0x80C161E0, ((0x80C16400, 0x80C1647F),)),
|
||||||
|
('decomp/ovl_Demo_Syoten', 'ovl_Demo_Syoten', 0x80C16480, ((0x80C177B0, 0x80C17A0F),)),
|
||||||
|
('decomp/ovl_Demo_Moonend', 'ovl_Demo_Moonend', 0x80C17A10, ((0x80C18070, 0x80C1811F),)),
|
||||||
|
('decomp/ovl_Bg_Lbfshot', 'ovl_Bg_Lbfshot', 0x80C18120, ((0x80C181E0, 0x80C1823F),)),
|
||||||
|
('decomp/ovl_Bg_Last_Bwall', 'ovl_Bg_Last_Bwall', 0x80C18240, ((0x80C189A0, 0x80C18B8F),)),
|
||||||
|
('decomp/ovl_En_And', 'ovl_En_And', 0x80C18B90, ((0x80C19160, 0x80C1929F),)),
|
||||||
|
('decomp/ovl_En_Invadepoh_Demo', 'ovl_En_Invadepoh_Demo', 0x80C192A0, ((0x80C1AA40, 0x80C1ADBF),)),
|
||||||
|
('decomp/ovl_Obj_Danpeilift', 'ovl_Obj_Danpeilift', 0x80C1ADC0, ((0x80C1B520, 0x80C1B63F),)),
|
||||||
|
('decomp/ovl_En_Fall2', 'ovl_En_Fall2', 0x80C1B640, ((0x80C1BBE0, 0x80C1BD8F),)),
|
||||||
|
('decomp/ovl_Dm_Al', 'ovl_Dm_Al', 0x80C1BD90, ((0x80C1C250, 0x80C1C40F),)),
|
||||||
|
('decomp/ovl_Dm_An', 'ovl_Dm_An', 0x80C1C410, ((0x80C1D1A0, 0x80C1D40F),)),
|
||||||
|
('decomp/ovl_Dm_Ah', 'ovl_Dm_Ah', 0x80C1D410, ((0x80C1DDC0, 0x80C1DECF),)),
|
||||||
|
('decomp/ovl_Dm_Nb', 'ovl_Dm_Nb', 0x80C1DED0, ((0x80C1E1E0, 0x80C1E28F),)),
|
||||||
|
('decomp/ovl_En_Drs', 'ovl_En_Drs', 0x80C1E290, ((0x80C1E5C0, 0x80C1E68F),)),
|
||||||
|
('decomp/ovl_En_Ending_Hero', 'ovl_En_Ending_Hero', 0x80C1E690, ((0x80C1E950, 0x80C1E9DF),)),
|
||||||
|
('decomp/ovl_Dm_Bal', 'ovl_Dm_Bal', 0x80C1E9E0, ((0x80C1F150, 0x80C1F3CF),)),
|
||||||
|
('decomp/ovl_En_Paper', 'ovl_En_Paper', 0x80C1F3D0, ((0x80C1FC40, 0x80C1FCEF),)),
|
||||||
|
('decomp/ovl_En_Hint_Skb', 'ovl_En_Hint_Skb', 0x80C1FCF0, ((0x80C21C60, 0x80C2234F),)),
|
||||||
|
('decomp/ovl_Dm_Tag', 'ovl_Dm_Tag', 0x80C22350, ((0x80C22BD0, 0x80C22D3F),)),
|
||||||
|
('decomp/ovl_En_Bh', 'ovl_En_Bh', 0x80C22D40, ((0x80C231C0, 0x80C2322F),)),
|
||||||
|
('decomp/ovl_En_Ending_Hero2', 'ovl_En_Ending_Hero2', 0x80C23230, ((0x80C23400, 0x80C2345F),)),
|
||||||
|
('decomp/ovl_En_Ending_Hero3', 'ovl_En_Ending_Hero3', 0x80C23460, ((0x80C23630, 0x80C2368F),)),
|
||||||
|
('decomp/ovl_En_Ending_Hero4', 'ovl_En_Ending_Hero4', 0x80C23690, ((0x80C23860, 0x80C238BF),)),
|
||||||
|
('decomp/ovl_En_Ending_Hero5', 'ovl_En_Ending_Hero5', 0x80C238C0, ((0x80C23BD0, 0x80C23C8F),)),
|
||||||
|
('decomp/ovl_En_Ending_Hero6', 'ovl_En_Ending_Hero6', 0x80C23C90, ((0x80C241E0, 0x80C2435F),)),
|
||||||
|
('decomp/ovl_Dm_Gm', 'ovl_Dm_Gm', 0x80C24360, ((0x80C250F0, 0x80C2535F),)),
|
||||||
|
('decomp/ovl_Obj_Swprize', 'ovl_Obj_Swprize', 0x80C25360, ((0x80C257D0, 0x80C2589F),)),
|
||||||
|
('decomp/ovl_En_Invisible_Ruppe', 'ovl_En_Invisible_Ruppe', 0x80C258A0, ((0x80C25B30, 0x80C25BBF),)),
|
||||||
|
('decomp/ovl_Obj_Ending', 'ovl_Obj_Ending', 0x80C25BC0, ((0x80C25CC0, 0x80C25D3F),)),
|
||||||
|
('decomp/ovl_En_Rsn', 'ovl_En_Rsn', 0x80C25D40, ((0x80C25FF0, 0x80C2609F),)),
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,237 @@
|
||||||
|
known_funcs = {
|
||||||
|
0x80080060:("func_80080060","UNK_RET","void"),
|
||||||
|
0x80080150:("func_80080150","void","UNK_PTR, UNK_PTR"),
|
||||||
|
0x80080180:("func_80080180","void","UNK_TYPE*, UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x8008019C:("func_8008019C","UNK_RET","void"),
|
||||||
|
0x800801EC:("func_800801EC","UNK_RET","void"),
|
||||||
|
0x80080250:("func_80080250","UNK_RET","void"),
|
||||||
|
0x80080300:("func_80080300","UNK_RET","UNK_TYPE"),
|
||||||
|
0x8008038C:("func_8008038C","UNK_RET","void"),
|
||||||
|
0x80080514:("func_80080514","void","UNK_TYPE"),
|
||||||
|
0x800805E0:("func_800805E0","UNK_RET","UNK_TYPE"),
|
||||||
|
0x80080C04:("func_80080C04","UNK_RET","UNK_PTR, UNK_FUN_ARG, UNK_PTR, UNK_TYPE, UNK_TYPE, UNK_PTR, UNK_TYPE"),
|
||||||
|
0x80080D0C:("func_80080D0C","UNK_RET","void"),
|
||||||
|
0x80080E00:("func_80080E00","UNK_RET","void"),
|
||||||
|
0x80081754:("func_80081754","UNK_RET","UNK_PTR, struct s80085320*, UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x80081820:("func_80081820","void","void"),
|
||||||
|
0x80081828:("func_80081828","void","void"),
|
||||||
|
0x80081830:("func_80081830","void","void"),
|
||||||
|
0x8008189C:("func_8008189C","void","void"),
|
||||||
|
0x800818D0:("func_800818D0","void","void"),
|
||||||
|
0x800818F4:("func_800818F4","void","void"),
|
||||||
|
0x800819F0:("func_800819F0","UNK_RET","UNK_PTR, void(*)(UNK_TYPE, UNK_TYPE), UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x80081AD4:("func_80081AD4","UNK_RET","UNK_PTR"),
|
||||||
|
0x80081BCC:("func_80081BCC","UNK_RET","UNK_PTR, UNK_TYPE(*)(UNK_TYPE, UNK_TYPE), UNK_TYPE"),
|
||||||
|
0x80081CA4:("func_80081CA4","UNK_RET","UNK_PTR"),
|
||||||
|
0x8008439C:("func_8008439C","UNK_RET","UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x800847CC:("func_800847CC","UNK_RET","UNK_PTR, ..."), # printf?
|
||||||
|
0x8008481C:("func_8008481C","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_PTR, UNK_PTR"),
|
||||||
|
0x80085320:("func_80085320","void","struct s80085320*, UNK_PTR, UNK_PTR, UNK_TYPE, UNK_TYPE, UNK_PTR"),
|
||||||
|
0x800853F8:("func_800853F8","UNK_RET","struct s80085320*"),
|
||||||
|
0x80085468:("func_80085468","UNK_TYPE","struct s80085320*"),
|
||||||
|
0x800854E0:("func_800854E0","UNK_TYPE","UNK_ARGS"),
|
||||||
|
0x80085538:("func_80085538","UNK_RET","struct s80085320*"),
|
||||||
|
0x80087830:("func_80087830","UNK_TYPE","UNK_TYPE, UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x80087854:("func_80087854","UNK_TYPE","u8*, UNK_TYPE, UNK_PTR"),
|
||||||
|
0x800878A4:("func_800878A4","UNK_TYPE","u8*, UNK_TYPE, UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x80087B00:("__osSetCause","void","u32 value"),
|
||||||
|
0x80087B10:("osSendMesg","s32","OSMesgQueue* mq, OSMesg msg, s32 flags"),
|
||||||
|
0x80087E00:("func_80087E00","void","u32"),
|
||||||
|
0x80087E10:("osStopThread","void","OSThread* t"),
|
||||||
|
0x80087ED0:("osRecvMesg","s32","OSMesgQueue* mq, OSMesg* msg, s32 flags"),
|
||||||
|
0x80088010:("osSetIntMask","OSIntMask","OSIntMask im"),
|
||||||
|
0x800880B0:("osGetIntMask","OSIntMask","void"),
|
||||||
|
0x80088350:("__sinf","float","float x"), # multiple names? __sinf/fsin/sinf
|
||||||
|
0x80088510:("sins","short","unsigned short x"),
|
||||||
|
0x80088580:("_VirtualToPhysicalTask","OSTask*","OSTask* intp"), # Note: not exported
|
||||||
|
0x8008868C:("osSpTaskLoad","void","OSTask* intp"),
|
||||||
|
0x800887F4:("osSpTaskStartGo","void","OSTask* tp"),
|
||||||
|
0x80088840:("__ull_rshift","long long","unsigned long long left, long long right"),
|
||||||
|
0x8008886C:("__ull_rem","unsigned long long","unsigned long long left, unsigned long long right"),
|
||||||
|
0x800888A8:("__ull_div","unsigned long long","unsigned long long left, unsigned long long right"),
|
||||||
|
0x800888E4:("__ll_lshift","long long","long long left, long long right"),
|
||||||
|
0x80088910:("__ll_rem","long long","long long left, unsigned long long right"),
|
||||||
|
0x8008894C:("__ll_div","long long","long long left, long long right"),
|
||||||
|
0x800889A8:("__ll_mul","long long","long long left, long long right"),
|
||||||
|
0x800889D8:("__ull_divremi","void","unsigned long long* quotient, unsigned long long* remainder, unsigned long long dividend, unsigned short divisor"),
|
||||||
|
0x80088A38:("__ll_mod","long long","long long left, long long right"),
|
||||||
|
0x80088AD4:("__ll_rshift","long long","long long left, long long right"),
|
||||||
|
0x80088B00:("__osExceptionPreamble","UNK_RET","UNK_ARGS"),
|
||||||
|
0x80088B10:("__osException","UNK_RET","UNK_ARGS"),
|
||||||
|
0x8008905C:("send_mesg","UNK_RET","UNK_ARGS"),
|
||||||
|
0x80089110:("handle_CpU","UNK_RET","UNK_ARGS"),
|
||||||
|
0x80089144:("__osEnqueueAndYield","UNK_RET","OSThread**"),
|
||||||
|
0x80089244:("__osEnqueueThread","UNK_RET","UNK_PTR, OSThread*"),
|
||||||
|
0x8008928C:("__osPopThread","OSThread*","OSThread**"),
|
||||||
|
0x800892A4:("__osDispatchThread","UNK_RET","void"), # TODO is this really void?
|
||||||
|
0x80089420:("__osCleanupThread","UNK_RET","UNK_ARGS"),
|
||||||
|
0x80089430:("__osDequeueThread","UNK_RET","OSThread**, OSThread*"),
|
||||||
|
0x80089470:("osDestroyThread","void","OSThread* t"),
|
||||||
|
0x80089630:("_blkclr","UNK_RET","u8*, u32"), # multiple names? bzero/_bzero/blkclr/_blkclr
|
||||||
|
0x80089AA0:("__osSiCreateAccessQueue","void","void"),
|
||||||
|
0x80089AF0:("__osSiGetAccess","void","void"),
|
||||||
|
0x80089B34:("__osSiRelAccess","void","void"),
|
||||||
|
0x80089B60:("osContInit","s32","OSMesgQueue* mq, u8* bitpattern, OSContStatus* data"),
|
||||||
|
0x80089CBC:("__osContGetInitData","void","u8* pattern, OSContStatus* data"),
|
||||||
|
0x80089D68:("__osPackRequestData","void","u8 cmd"),
|
||||||
|
0x80089E40:("osCreateThread","void","OSThread* t, OSId id, void (*entry)(void*), void* arg, void* sp, OSPri p"),
|
||||||
|
0x80089F90:("osContStartReadData","s32","OSMesgQueue* mq"),
|
||||||
|
0x8008A014:("osContGetReadData","void","OSContPad* data"),
|
||||||
|
0x8008A540:("osVirtualToPhysical","u32","void* virtualAddress"),
|
||||||
|
0x8008A5C0:("__osGetSR","u32","void"),
|
||||||
|
0x8008A5D0:("__osSetSR","void","u32 value"),
|
||||||
|
0x8008A5E0:("osWritebackDCache","void","void *vaddr, s32 nbytes"),
|
||||||
|
0x8008A660:("func_8008A660","void","void"),
|
||||||
|
0x8008A6FC:("func_8008A6FC","void","void"),
|
||||||
|
0x8008A9A8:("func_8008A9A8","void","void"),
|
||||||
|
0x8008AA50:("guPerspectiveF","void","float* mf[4], u16* perspNorm, float fovy, float aspect, float near, float far, float scale"),
|
||||||
|
0x8008AC80:("guPerspective","void","Mtx* m, u16* perspNorm, float fovy, float aspect, float near, float far, float scale"),
|
||||||
|
0x8008ACE0:("__osSpRawStartDma","s32","s32 direction, u32 devAddr, void* dramAddr, u32 size"),
|
||||||
|
0x8008AD70:("__osSiRawStartDma","s32","s32 direction, void* dramAddr"),
|
||||||
|
0x8008AE70:("func_8008AE70","UNK_RET","UNK_TYPE"),
|
||||||
|
0x8008AEE0:("func_8008AEE0","UNK_TYPE","UNK_TYPE, UNK_PTR"),
|
||||||
|
0x8008AF30:("osGetThreadId","OSId","OSThread* t"),
|
||||||
|
0x8008AF50:("osSpTaskYield","void","void"),
|
||||||
|
0x8008B650:("func_8008B650","UNK_RET","UNK_PTR"),
|
||||||
|
0x8008B6B0:("__osGetConfig","u32 ","void "),
|
||||||
|
0x8008B6C0:("__osSetConfig","void ","u32 value"),
|
||||||
|
0x8008BE70:("osStopTimer","int","OSTimer* t"),
|
||||||
|
0x8008BF60:("__osProbeTLB","u32","void*"),
|
||||||
|
0x8008C020:("osCreatePiManager","void","OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt"),
|
||||||
|
0x8008C190:("__osPiCreateAccessQueue","void","void"),
|
||||||
|
0x8008C1E0:("__osPiGetAccess","void","void"),
|
||||||
|
0x8008C224:("__osPiRelAccess","void","void"),
|
||||||
|
0x8008D2C0:("osGetCount","u32","void"),
|
||||||
|
0x8008D350:("func_8008D350","UNK_TYPE","void"),
|
||||||
|
0x8008D640:("osSetEventMesg","void","OSEvent e, OSMesgQueue* mq, OSMesg m"),
|
||||||
|
0x8008D700:("sqrtf","UNK_RET","UNK_ARGS"),
|
||||||
|
0x8008D730:("osContStartQuery","s32","OSMesgQueue* mq"),
|
||||||
|
0x8008D7AC:("osContGetQuery","void","OSContStatus* data"),
|
||||||
|
0x8008E050:("_Printf","int","void* (*pfn)(void*), void* arg, const unsigned char* fmt, va_list ap"),
|
||||||
|
0x8008E698:("func_8008E698","UNK_RET","UNK_ARGS"), # this does not have a name? (maybe not exported idk) (_Putfld?)
|
||||||
|
0x8008EDE0:("osUnmapTLBAll","void","void"),
|
||||||
|
0x8008EE30:("osPiStartDma","s32","OSIoMesg* mb, s32 priority, s32 direction, u32 devAddr, void* dramAddr, u32 size, OSMesgQueue* mq"),
|
||||||
|
0x8008F1A0:("strchr","unsigned char*","const unsigned char* s, int c"),
|
||||||
|
0x8008F1E0:("strlen","size_t","const unsigned char* s"), # unsigned int == size_t
|
||||||
|
0x8008F208:("memcpy","void*","void* s1, const void* s2, size_t n"), # unsigned int == size_t
|
||||||
|
0x8008F240:("osCreateMesgQueue","void","OSMesgQueue* mq, OSMesg* msg, s32 msgCount"),
|
||||||
|
0x8008F270:("osInvalICache","void","void *vaddr, s32 nbytes"),
|
||||||
|
0x8008F2F0:("osInvalDCache","void","void *vaddr, s32 nbytes"),
|
||||||
|
0x8008F3A0:("__osTimerServicesInit","void","void"),
|
||||||
|
0x8008F42C:("__osTimerInterrupt","void","void"),
|
||||||
|
0x8008F5A4:("__osSetTimerIntr","void","OSTime tim"),
|
||||||
|
0x8008F644:("__osInsertTimer","OSTime","OSTimer* t"),
|
||||||
|
0x8008FA00:("__osSpDeviceBusy","int","void"),
|
||||||
|
0x8008FA30:("__osSiDeviceBusy","int","void"),
|
||||||
|
0x8008FAB0:("osJamMesg","s32","OSMesgQueue* mq, OSMesg msg, s32 flags"),
|
||||||
|
0x8008FC00:("osSetThreadPri","void","OSThread* t, OSPri p"),
|
||||||
|
0x8008FCE0:("osGetThreadPri","OSPri","OSThread* t"),
|
||||||
|
0x8008FE60:("func_8008FE60","UNK_RET","UNK_PTR"),
|
||||||
|
0x800902A0:("osSpTaskYielded","void","void"),
|
||||||
|
0x80090300:("memcmp","UNK_RET","UNK_ARGS"), # multiple names? memcmp/bcmp/_bcmp
|
||||||
|
0x80090420:("osGetTime","OSTime","void"),
|
||||||
|
0x80090680:("__osSetGlobalIntMask","UNK_RET","UNK_ARGS"),
|
||||||
|
0x80091280:("__osSetCompare","void","u32 value"),
|
||||||
|
0x80091290:("__osGetCompare","u32","void"),
|
||||||
|
0x800912A0:("osDpGetStatus","u32","void"),
|
||||||
|
0x800912B0:("osDpSetStatus","void","u32 data"),
|
||||||
|
0x800912C0:("_bcopy","void","const void* src, void* dst, size_t n"), # multiple names? bcopy/_bcopy
|
||||||
|
0x800915D0:("__osResetGlobalIntMask","UNK_RET","UNK_ARGS"),
|
||||||
|
0x800918A0:("guOrthoF","void","float* mf[4], float l, float r, float b, float t, float n, float f, float scale"),
|
||||||
|
0x800919F4:("guOrtho","void","Mtx* m, float l, float r, float b, float t, float n, float f, float scale"),
|
||||||
|
0x80091A60:("__osDisableInt","u32","void"),
|
||||||
|
0x80091AD0:("__osRestoreInt","void","u32"),
|
||||||
|
0x80091AF0:("__osViInit","void","void"),
|
||||||
|
0x80091C10:("__osViSwapContext","void","void"),
|
||||||
|
0x80091F10:("osPiGetCmdQueue","OSMesgQueue*","void"),
|
||||||
|
0x80091f40:("__cosf","float","float x"), # multiple names? __cosf/fcos/cosf
|
||||||
|
0x80092100:("func_80092100","UNK_RET","UNK_TYPE"),
|
||||||
|
0x80092260:("coss","short","unsigned short x"),
|
||||||
|
0x80092290:("osSetTime","void","OSTime ticks"),
|
||||||
|
0x80092920:("func_80092920","struct s80092920*","void"),
|
||||||
|
0x80092C80:("osContSetCh","s32","u8 ch"),
|
||||||
|
0x80092CE0:("__osSetFpcCsr","void","u32 value"),
|
||||||
|
0x80092CF0:("__osGetFpcCsr","u32","void"),
|
||||||
|
0x80093BA0:("osAiGetLength","u32","void"),
|
||||||
|
0x80093C00:("osMapTLBRdb","void","void"),
|
||||||
|
0x80093C60:("osYieldThread","void","void"),
|
||||||
|
0x80093D90:("__osGetCause","u32","void"),
|
||||||
|
0x80094150:("osSetTimer","int","OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg"),
|
||||||
|
0x800942E0:("_Ldtob","void","_Pft* px, unsigned char code"),
|
||||||
|
0x80094770:("func_80094770","UNK_RET","UNK_ARGS"), # this does not have a name? (maybe not exported idk) (_Ldunscale?)
|
||||||
|
0x80094828:("func_80094828","UNK_RET","UNK_ARGS"), # this does not have a name? (maybe not exported idk) (_Genld?)
|
||||||
|
0x80094DF0:("ldiv","ldiv_t","long numer, long denom"),
|
||||||
|
0x80094E74:("lldiv","lldiv_t","long long numer, long long denom"),
|
||||||
|
0x80094F80:("_Litob","void","_Pft* px, unsigned char code"),
|
||||||
|
0x80095220:("__osSiRawReadIo","s32","u32 devAddr, u32* data"),
|
||||||
|
0x80095270:("__osSpGetStatus","u32","void"),
|
||||||
|
0x80095280:("__osSpSetStatus","void","u32 data"),
|
||||||
|
0x800952A0:("osCreateViManager","void","OSPri pri"),
|
||||||
|
0x800955F0:("__osGetCurrFaultedThread","OSThread*","void"),
|
||||||
|
0x800955B0:("__osViGetCurrentContext","__OSViContext*","void"),
|
||||||
|
0x800955C0:("osWritebackDCacheAll","void","void"),
|
||||||
|
0x80095740:("guMtxF2L","void","float* mf[4], Mtx* m"),
|
||||||
|
0x800957B0:("osStartThread","void","OSThread* t"),
|
||||||
|
0x80095900:("func_80095900","void","f32"),
|
||||||
|
0x80095950:("func_80095950","UNK_RET","f32"),
|
||||||
|
0x80095A60:("__d_to_ll","long long","double d"),
|
||||||
|
0x80095A7C:("__f_to_ll","long long","float f"),
|
||||||
|
0x80095A98:("__d_to_ull","unsigned long long","double d"),
|
||||||
|
0x80095B38:("__f_to_ull","unsigned long long","float f"),
|
||||||
|
0x80095BD4:("__ll_to_d","double","long long l"),
|
||||||
|
0x80095BEC:("__ll_to_f","float","long long l"),
|
||||||
|
0x80095C04:("__ull_to_d","double","unsigned long long l"),
|
||||||
|
0x80095C38:("__ull_to_f","float","unsigned long long l"),
|
||||||
|
0x80096510:("__osSpSetPc","s32","u32 data"),
|
||||||
|
0x80096820:("func_80096820","UNK_RET","UNK_TYPE"),
|
||||||
|
0x800968B0:("func_800968B0","u32","const u8*, const u8*"),
|
||||||
|
0x80097540:("osViModeNtscHpf1","UNK_RET","UNK_ARGS"),
|
||||||
|
0x80097eb0:("osViModeNtscHpn1","UNK_RET","UNK_ARGS"),
|
||||||
|
0x80097fc0:("osViModeNtscLan1","UNK_RET","UNK_ARGS"),
|
||||||
|
0x80098010:("osViModeMpalLan1","UNK_RET","UNK_ARGS"),
|
||||||
|
0x800991a0:("__osRcpImTable","UNK_RET","UNK_ARGS"),
|
||||||
|
0x80099450:("__libm_qnan_f","UNK_RET","UNK_ARGS"),
|
||||||
|
0x800A5AC0:("func_800A5AC0","UNK_RET","void*, UNK_TYPE"), # guessing this is void* bc it's a thread entry point
|
||||||
|
0x800A5B6C:("func_800A5B6C","UNK_RET","struct s800A5AC0*, UNK_TYPE"),
|
||||||
|
0x800A5B98:("func_800A5B98","UNK_RET","struct s800A5AC0*, UNK_TYPE"),
|
||||||
|
0x800A5C28:("func_800A5C28","UNK_RET","struct s800A5AC0*, UNK_TYPE"),
|
||||||
|
0x800A5C60:("func_800A5C60","UNK_RET","struct s800A5AC0*, UNK_TYPE"),
|
||||||
|
0x800A5CB8:("func_800A5CB8","UNK_RET","struct s800A5AC0*, UNK_TYPE"),
|
||||||
|
0x800B3BA4:("func_800B3BA4","UNK_RET","UNK_PTR, UNK_TYPE, UNK_PTR, UNK_TYPE"),
|
||||||
|
0x800B3FC0:("func_800B3FC0","UNK_TYPE","UNK_TYPE"),
|
||||||
|
0x800B675C:("func_800B675C","UNK_RET","struct s800A5AC0*, UNK_TYPE"),
|
||||||
|
0x800B84D0:("func_800B84D0","UNK_TYPE","struct s800A5AC0*, UNK_TYPE"),
|
||||||
|
0x800B863C:("func_800B863C","UNK_RET","struct s800A5AC0*, UNK_TYPE"),
|
||||||
|
0x800B867C:("func_800B867C","UNK_TYPE","struct s800A5AC0*"),
|
||||||
|
0x800BDFC0:("func_800BDFC0","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_TYPE, struct s800A5AC0*"),
|
||||||
|
0x800C6024:("func_800C6024","UNK_TYPE","UNK_TYPE"),
|
||||||
|
0x800C6248:("func_800C6248","UNK_TYPE","UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x800CAAD0:("func_800CAAD0","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x800CAC0C:("func_800CAC0C","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x800CACA0:("func_800CACA0","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x800CAD2C:("func_800CAD2C","UNK_TYPE","UNK_TYPE, UNK_TYPE, UNK_TYPE"),
|
||||||
|
0x800CAE88:("func_800CAE88","UNK_RET","UNK_TYPE"),
|
||||||
|
0x800CAF24:("func_800CAF24","UNK_RET","UNK_TYPE"),
|
||||||
|
0x800CAF38:("func_800CAF38","UNK_RET","UNK_TYPE"),
|
||||||
|
0x800E11EC:("func_800E11EC","UNK_RET","UNK_TYPE, UNK_PTR"),
|
||||||
|
0x800E1374:("func_800E1374","UNK_RET","UNK_TYPE, UNK_PTR, struct s800A5AC0*, UNK_PTR"),
|
||||||
|
0x800E2928:("func_800E2928","UNK_RET","UNK_TYPE, UNK_TYPE, UNK_PTR"),
|
||||||
|
0x800E7DF8:("func_800E7DF8","UNK_RET","struct s800A5AC0*, UNK_PTR"),
|
||||||
|
0x800FFADC:("func_800FFADC","UNK_RET","struct s800A5AC0*, UNK_PTR"),
|
||||||
|
0x80138C88:("func_80138C88","UNK_RET","UNK_PTR, UNK_PTR, UNK_PTR"),
|
||||||
|
0x80139188:("func_80139188","UNK_TYPE","UNK_PTR, UNK_PTR"),
|
||||||
|
0x80139894:("func_80139894","UNK_RET","UNK_PTR, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, f32, f32, f32"),
|
||||||
|
0x80174BF0:("func_80174BF0","UNK_RET","UNK_TYPE"),
|
||||||
|
0x8018349C:("func_8018349C","UNK_RET","UNK_TYPE, UNK_TYPE"),
|
||||||
|
|
||||||
|
# ovl_En_Test
|
||||||
|
#0x80862B70:("func_80862B70","void","void* a0"),
|
||||||
|
#0x80862CBC:("func_80862CBC","UNK_RET","UNK_ARGS"),
|
||||||
|
#0x80862EDC:("func_80862EDC","UNK_RET","UNK_ARGS"),
|
||||||
|
#0x80863048:("func_80863048","UNK_RET","UNK_ARGS"),
|
||||||
|
#0x80863188:("func_80863188","UNK_RET","UNK_ARGS"),
|
||||||
|
#0x80863310:("func_80863310","UNK_RET","UNK_ARGS"),
|
||||||
|
#0x8086333C:("func_8086333C","UNK_RET","UNK_ARGS"),
|
||||||
|
#0x808634B8:("func_808634B8","UNK_RET","UNK_ARGS"),
|
||||||
|
#0x808636A8:("func_808636A8","UNK_RET","UNK_ARGS"),
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
#ifndef _ULTRATYPES_H_
|
||||||
|
#define _ULTRATYPES_H_
|
||||||
|
|
||||||
|
typedef unsigned char u8;
|
||||||
|
typedef unsigned short u16;
|
||||||
|
typedef unsigned long u32;
|
||||||
|
typedef unsigned long long u64;
|
||||||
|
typedef signed char s8;
|
||||||
|
typedef short s16;
|
||||||
|
typedef long s32;
|
||||||
|
typedef long long s64;
|
||||||
|
|
||||||
|
typedef volatile unsigned char vu8;
|
||||||
|
typedef volatile unsigned short vu16;
|
||||||
|
typedef volatile unsigned long vu32;
|
||||||
|
typedef volatile unsigned long long vu64;
|
||||||
|
typedef volatile signed char vs8;
|
||||||
|
typedef volatile short vs16;
|
||||||
|
typedef volatile long vs32;
|
||||||
|
typedef volatile long long vs64;
|
||||||
|
|
||||||
|
typedef float f32;
|
||||||
|
typedef double f64;
|
||||||
|
|
||||||
|
#define NULL ((void*)0)
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,4 @@
|
||||||
|
#ifndef _ASSERT_H_
|
||||||
|
#define _ASSERT_H_
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,4 @@
|
||||||
|
#ifndef _BSTRING_H_
|
||||||
|
#define _BSTRING_H_
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,8 @@
|
||||||
|
#ifndef _GLOBAL_H_
|
||||||
|
#define _GLOBAL_H_
|
||||||
|
|
||||||
|
#include "structs.h"
|
||||||
|
#include "functions.h"
|
||||||
|
#include "variables.h"
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,227 @@
|
||||||
|
#ifndef _OS_H_
|
||||||
|
#define _OS_H_
|
||||||
|
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
|
||||||
|
typedef s32 OSPri;
|
||||||
|
|
||||||
|
typedef s32 OSId;
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
/* 0 */ struct {
|
||||||
|
/* 0 */ f32 f_odd;
|
||||||
|
/* 4 */ f32 f_even;
|
||||||
|
} f;
|
||||||
|
/* 0 */ f64 d;
|
||||||
|
} __OSfp;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u64 at;
|
||||||
|
/* 8 */ u64 v0;
|
||||||
|
/* 16 */ u64 v1;
|
||||||
|
/* 24 */ u64 a0;
|
||||||
|
/* 32 */ u64 a1;
|
||||||
|
/* 40 */ u64 a2;
|
||||||
|
/* 48 */ u64 a3;
|
||||||
|
/* 56 */ u64 t0;
|
||||||
|
/* 64 */ u64 t1;
|
||||||
|
/* 72 */ u64 t2;
|
||||||
|
/* 80 */ u64 t3;
|
||||||
|
/* 88 */ u64 t4;
|
||||||
|
/* 96 */ u64 t5;
|
||||||
|
/* 104 */ u64 t6;
|
||||||
|
/* 112 */ u64 t7;
|
||||||
|
/* 120 */ u64 s0;
|
||||||
|
/* 128 */ u64 s1;
|
||||||
|
/* 136 */ u64 s2;
|
||||||
|
/* 144 */ u64 s3;
|
||||||
|
/* 152 */ u64 s4;
|
||||||
|
/* 160 */ u64 s5;
|
||||||
|
/* 168 */ u64 s6;
|
||||||
|
/* 176 */ u64 s7;
|
||||||
|
/* 184 */ u64 t8;
|
||||||
|
/* 192 */ u64 t9;
|
||||||
|
/* 200 */ u64 gp;
|
||||||
|
/* 208 */ u64 sp;
|
||||||
|
/* 216 */ u64 s8;
|
||||||
|
/* 224 */ u64 ra;
|
||||||
|
/* 232 */ u64 lo;
|
||||||
|
/* 240 */ u64 hi;
|
||||||
|
/* 248 */ u32 sr;
|
||||||
|
/* 252 */ u32 pc;
|
||||||
|
/* 256 */ u32 cause;
|
||||||
|
/* 260 */ u32 badvaddr;
|
||||||
|
/* 264 */ u32 rcp;
|
||||||
|
/* 268 */ u32 fpcsr;
|
||||||
|
/* 272 */ __OSfp fp0;
|
||||||
|
/* 280 */ __OSfp fp2;
|
||||||
|
/* 288 */ __OSfp fp4;
|
||||||
|
/* 296 */ __OSfp fp6;
|
||||||
|
/* 304 */ __OSfp fp8;
|
||||||
|
/* 312 */ __OSfp fp10;
|
||||||
|
/* 320 */ __OSfp fp12;
|
||||||
|
/* 328 */ __OSfp fp14;
|
||||||
|
/* 336 */ __OSfp fp16;
|
||||||
|
/* 344 */ __OSfp fp18;
|
||||||
|
/* 352 */ __OSfp fp20;
|
||||||
|
/* 360 */ __OSfp fp22;
|
||||||
|
/* 368 */ __OSfp fp24;
|
||||||
|
/* 376 */ __OSfp fp26;
|
||||||
|
/* 384 */ __OSfp fp28;
|
||||||
|
/* 392 */ __OSfp fp30;
|
||||||
|
} __OSThreadContext;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct OSThread_s {
|
||||||
|
/* 0 */ struct OSThread_s* next;
|
||||||
|
/* 4 */ OSPri priority;
|
||||||
|
/* 8 */ struct OSThread_s** queue;
|
||||||
|
/* 12 */ struct OSThread_s* tlnext;
|
||||||
|
/* 16 */ u16 state;
|
||||||
|
/* 18 */ u16 flags;
|
||||||
|
/* 20 */ OSId id;
|
||||||
|
/* 24 */ int fp;
|
||||||
|
/* 32 */ __OSThreadContext context;
|
||||||
|
} OSThread;
|
||||||
|
|
||||||
|
typedef u32 OSEvent;
|
||||||
|
|
||||||
|
typedef u32 OSIntMask;
|
||||||
|
|
||||||
|
typedef u32 OSPageMask;
|
||||||
|
|
||||||
|
typedef void* OSMesg;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ OSThread* mtqueue;
|
||||||
|
/* 4 */ OSThread* fullqueue;
|
||||||
|
/* 8 */ s32 validCount;
|
||||||
|
/* 12 */ s32 first;
|
||||||
|
/* 16 */ s32 msgCount;
|
||||||
|
/* 20 */ OSMesg* msg;
|
||||||
|
} OSMesgQueue;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u16 type;
|
||||||
|
/* 2 */ u8 pri;
|
||||||
|
/* 3 */ u8 status;
|
||||||
|
/* 4 */ OSMesgQueue* retQueue;
|
||||||
|
} OSIoMesgHdr;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ OSIoMesgHdr hdr;
|
||||||
|
/* 8 */ void* dramAddr;
|
||||||
|
/* 12 */ u32 devAddr;
|
||||||
|
/* 16 */ u32 size;
|
||||||
|
} OSIoMesg;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ s32 active;
|
||||||
|
/* 4 */ OSThread* thread;
|
||||||
|
/* 8 */ OSMesgQueue* cmdQueue;
|
||||||
|
/* 12 */ OSMesgQueue* evtQueue;
|
||||||
|
/* 16 */ OSMesgQueue* acsQueue;
|
||||||
|
/* 20 */ s32 (*dma)(... /* ECOFF does not store param types */);
|
||||||
|
} OSDevMgr;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u32 ctrl;
|
||||||
|
/* 4 */ u32 width;
|
||||||
|
/* 8 */ u32 burst;
|
||||||
|
/* 12 */ u32 vSync;
|
||||||
|
/* 16 */ u32 hSync;
|
||||||
|
/* 20 */ u32 leap;
|
||||||
|
/* 24 */ u32 hStart;
|
||||||
|
/* 28 */ u32 xScale;
|
||||||
|
/* 32 */ u32 vCurrent;
|
||||||
|
} OSViCommonRegs;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u32 origin;
|
||||||
|
/* 4 */ u32 yScale;
|
||||||
|
/* 8 */ u32 vStart;
|
||||||
|
/* 12 */ u32 vBurst;
|
||||||
|
/* 16 */ u32 vIntr;
|
||||||
|
} OSViFieldRegs;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u8 type;
|
||||||
|
/* 4 */ OSViCommonRegs comRegs;
|
||||||
|
/* 40 */ OSViFieldRegs fldRegs[2];
|
||||||
|
} OSViMode;
|
||||||
|
|
||||||
|
typedef u64 OSTime;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct OSTimer_s {
|
||||||
|
/* 0 */ struct OSTimer_s* next;
|
||||||
|
/* 4 */ struct OSTimer_s* prev;
|
||||||
|
/* 8 */ OSTime interval;
|
||||||
|
/* 16 */ OSTime value;
|
||||||
|
/* 24 */ OSMesgQueue* mq;
|
||||||
|
/* 28 */ OSMesg msg;
|
||||||
|
} OSTimer;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u16 type;
|
||||||
|
/* 2 */ u8 status;
|
||||||
|
/* 3 */ u8 errno;
|
||||||
|
} OSContStatus;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u16 button;
|
||||||
|
/* 2 */ s8 stick_x;
|
||||||
|
/* 3 */ s8 stick_y;
|
||||||
|
/* 4 */ u8 errno;
|
||||||
|
} OSContPad;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ void* address;
|
||||||
|
/* 4 */ u8 databuffer[32];
|
||||||
|
/* 36 */ u8 addressCrc;
|
||||||
|
/* 37 */ u8 dataCrc;
|
||||||
|
/* 38 */ u8 errno;
|
||||||
|
} OSContRamIo;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ int status;
|
||||||
|
/* 4 */ OSMesgQueue* queue;
|
||||||
|
/* 8 */ int channel;
|
||||||
|
/* 12 */ u8 id[32];
|
||||||
|
/* 44 */ u8 backup_id[32];
|
||||||
|
/* 76 */ u8 label[32];
|
||||||
|
/* 108 */ int pack_size;
|
||||||
|
/* 112 */ int version;
|
||||||
|
/* 116 */ int dir_size;
|
||||||
|
/* 120 */ int inode_start_page;
|
||||||
|
} OSPfs;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u32 file_size;
|
||||||
|
/* 4 */ u16 company_code;
|
||||||
|
/* 6 */ u16 game_code;
|
||||||
|
/* 8 */ unsigned char ext_name[4];
|
||||||
|
/* 12 */ unsigned char game_name[16];
|
||||||
|
} OSPfsState;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u16* histo_base;
|
||||||
|
/* 4 */ u32 histo_size;
|
||||||
|
/* 8 */ u32* text_start;
|
||||||
|
/* 12 */ u32* text_end;
|
||||||
|
} OSProf;
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,4 @@
|
||||||
|
#ifndef _OS_INTERNAL_H_
|
||||||
|
#define _OS_INTERNAL_H_
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,28 @@
|
||||||
|
#ifndef _OSINT_H_
|
||||||
|
#define _OSINT_H_
|
||||||
|
|
||||||
|
// TODO should be in libultra/os
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <os.h>
|
||||||
|
#include <os_internal.h>
|
||||||
|
#include <ultraerror.h>
|
||||||
|
#include <ultralog.h>
|
||||||
|
#include <sptask.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ OSMesgQueue* messageQueue;
|
||||||
|
/* 4 */ OSMesg message;
|
||||||
|
} __OSEventState;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ OSThread* next;
|
||||||
|
/* 4 */ OSPri priority;
|
||||||
|
} __OSThreadTail;
|
||||||
|
|
||||||
|
#include <variables.h> // TODO all variables should be moved to the file that logically defines them
|
||||||
|
// maybe put externs here?
|
||||||
|
#include <functions.h>
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,4 @@
|
||||||
|
#ifndef _RMON_H_
|
||||||
|
#define _RMON_H_
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,33 @@
|
||||||
|
#ifndef _SPTASK_H_
|
||||||
|
#define _SPTASK_H_
|
||||||
|
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u32 type;
|
||||||
|
/* 4 */ u32 flags;
|
||||||
|
/* 8 */ u64* ucode_boot;
|
||||||
|
/* 12 */ u32 ucode_boot_size;
|
||||||
|
/* 16 */ u64* ucode;
|
||||||
|
/* 20 */ u32 ucode_size;
|
||||||
|
/* 24 */ u64* ucode_data;
|
||||||
|
/* 28 */ u32 ucode_data_size;
|
||||||
|
/* 32 */ u64* dram_stack;
|
||||||
|
/* 36 */ u32 dram_stack_size;
|
||||||
|
/* 40 */ u64* output_buff;
|
||||||
|
/* 44 */ u64* output_buff_size;
|
||||||
|
/* 48 */ u64* data_ptr;
|
||||||
|
/* 52 */ u32 data_size;
|
||||||
|
/* 56 */ u64* yield_data_ptr;
|
||||||
|
/* 60 */ u32 yield_data_size;
|
||||||
|
} OSTask_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
/* 0 */ OSTask_t t;
|
||||||
|
/* 0 */ long long force_structure_alignment;
|
||||||
|
} OSTask;
|
||||||
|
|
||||||
|
typedef u32 OSYieldResult;
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _STDARG_H_
|
||||||
|
#define _STDARG_H_
|
||||||
|
|
||||||
|
typedef unsigned char* va_list;
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,7 @@
|
||||||
|
#ifndef _STRING_H_
|
||||||
|
#define _STRING_H_
|
||||||
|
|
||||||
|
#define NULL 0
|
||||||
|
typedef unsigned int size_t;
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,142 @@
|
||||||
|
#ifndef _STRUCTS_H_
|
||||||
|
#define _STRUCTS_H_
|
||||||
|
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
#include <unk.h>
|
||||||
|
|
||||||
|
struct s80085320 {
|
||||||
|
/* 00 */ struct s80085320* next;
|
||||||
|
/* 04 */ struct s80085320* prev;
|
||||||
|
/* 08 */ UNK_TYPE* unk8;
|
||||||
|
/* 12 */ UNK_TYPE* unk12;
|
||||||
|
/* 16 */ UNK_TYPE unk16;
|
||||||
|
/* 20 */ UNK_TYPE unk20;
|
||||||
|
/* 24 */ UNK_TYPE* unk24;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct s8008A6FC {
|
||||||
|
/* 00 */ UNK_TYPE unk0;
|
||||||
|
/* 04 */ UNK_TYPE unk4;
|
||||||
|
/* 08 */ UNK_TYPE unk8;
|
||||||
|
/* 12 */ UNK_TYPE unk12;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct s80092920 {
|
||||||
|
/* 00 */ struct s80092920* unk0;
|
||||||
|
/* 04 */ u8 unk4;
|
||||||
|
/* 05 */ u8 unk5;
|
||||||
|
/* 06 */ u8 unk6;
|
||||||
|
/* 07 */ u8 unk7;
|
||||||
|
/* 08 */ u8 unk8;
|
||||||
|
/* 09 */ u8 unk9;
|
||||||
|
/* 10 */ u8 unk10; // pad?
|
||||||
|
/* 11 */ u8 unk11; // pad?
|
||||||
|
/* 12 */ UNK_TYPE unk12;
|
||||||
|
/* 16 */ UNK_TYPE unk16;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct s800A5AC0 {
|
||||||
|
/* 000 */ u8 pad0[28];
|
||||||
|
/* 028 */ u16 unk28;
|
||||||
|
/* 030 */ u8 pad1[116];
|
||||||
|
/* 146 */ u16 unk146;
|
||||||
|
/* 148 */ u8 pad2[34];
|
||||||
|
/* 182 */ u8 unk182;
|
||||||
|
/* 183 */ u8 pad4[5];
|
||||||
|
/* 188 */ u16 unk188; // or char
|
||||||
|
/* 190 */ u16 unk190;
|
||||||
|
/* 192 */ u8 pad5[86];
|
||||||
|
/* 278 */ u16 unk278;
|
||||||
|
/* 280 */ u8 pad6[44];
|
||||||
|
/* 324 */ void(*unk324)(struct s800A5AC0*, UNK_TYPE);
|
||||||
|
/* 328 */ UNK_TYPE unk328;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct s800BF9A0_s {
|
||||||
|
/* 000 */ u8 pad0[8];
|
||||||
|
/* 008 */ UNK_TYPE unk8;
|
||||||
|
/* 012 */ UNK_TYPE unk12;
|
||||||
|
/* 016 */ UNK_TYPE unk16;
|
||||||
|
/* 020 */ u8 pad1[10];
|
||||||
|
/* 030 */ s8 unk30;
|
||||||
|
/* 031 */ u8 pad2[1];
|
||||||
|
} s800BF9A0_s;
|
||||||
|
|
||||||
|
typedef struct s800CAAD0_s {
|
||||||
|
/* 000 */ UNK_TYPE unk0;
|
||||||
|
/* 004 */ UNK_TYPE unk4;
|
||||||
|
/* 008 */ UNK_TYPE unk8;
|
||||||
|
/* 012 */ u8 pad0[92];
|
||||||
|
/* 104 */ UNK_TYPE unk104;
|
||||||
|
/* 108 */ UNK_TYPE unk108;
|
||||||
|
/* 112 */ UNK_TYPE unk112;
|
||||||
|
/* 116 */ u16 unk116;
|
||||||
|
/* 118 */ u16 unk118;
|
||||||
|
/* 120 */ u16 unk120;
|
||||||
|
/* 122 */ u8 pad1[2];
|
||||||
|
/* 124 */ f32 unk124;
|
||||||
|
/* 128 */ f32 unk128;
|
||||||
|
/* 132 */ f32 unk132;
|
||||||
|
/* 136 */ UNK_TYPE unk136;
|
||||||
|
/* 140 */ UNK_TYPE unk140;
|
||||||
|
/* 144 */ UNK_TYPE unk144;
|
||||||
|
/* 148 */ u16 unk148;
|
||||||
|
/* 150 */ u16 unk150;
|
||||||
|
/* 152 */ u16 unk152;
|
||||||
|
/* 154 */ u8 pad2[2];
|
||||||
|
/* 156 */ f32 unk156;
|
||||||
|
/* 160 */ f32 unk160;
|
||||||
|
/* 164 */ f32 unk164;
|
||||||
|
} s800CAAD0;
|
||||||
|
|
||||||
|
// TODO everything past here should be placed in an appropiate libultra header
|
||||||
|
|
||||||
|
typedef long Mtx_t[4][4];
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
/* 0 */ Mtx_t m;
|
||||||
|
/* 0 */ long long force_structure_alignment;
|
||||||
|
} Mtx;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ int quot;
|
||||||
|
/* 4 */ int rem;
|
||||||
|
} div_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ long quot;
|
||||||
|
/* 4 */ long rem;
|
||||||
|
} ldiv_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ long long quot;
|
||||||
|
/* 8 */ long long rem;
|
||||||
|
} lldiv_t;
|
||||||
|
|
||||||
|
typedef unsigned int size_t;
|
||||||
|
|
||||||
|
typedef double ldouble;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ union {
|
||||||
|
/* 0 */ long long ll;
|
||||||
|
/* 0 */ ldouble ld;
|
||||||
|
} v;
|
||||||
|
/* 8 */ unsigned char* s;
|
||||||
|
/* 12 */ int n0;
|
||||||
|
/* 16 */ int nz0;
|
||||||
|
/* 20 */ int n1;
|
||||||
|
/* 24 */ int nz1;
|
||||||
|
/* 28 */ int n2;
|
||||||
|
/* 32 */ int nz2;
|
||||||
|
/* 36 */ int prec;
|
||||||
|
/* 40 */ int width;
|
||||||
|
/* 44 */ size_t nchar;
|
||||||
|
/* 48 */ unsigned int flags;
|
||||||
|
/* 52 */ unsigned char qual;
|
||||||
|
} _Pft;
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,7 @@
|
||||||
|
#ifndef _ULTRA64_H_
|
||||||
|
#define _ULTRA64_H_
|
||||||
|
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
#include "unk.h"
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ULTRAERROR_H_
|
||||||
|
#define _ULTRAERROR_H_
|
||||||
|
|
||||||
|
typedef void (*OSErrorHandler)(... /* ECOFF does not store param types */);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,28 @@
|
||||||
|
#ifndef _ULTRALOG_H_
|
||||||
|
#define _ULTRALOG_H_
|
||||||
|
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u32 magic;
|
||||||
|
/* 4 */ u32 len;
|
||||||
|
/* 8 */ u32* base;
|
||||||
|
/* 12 */ s32 startCount;
|
||||||
|
/* 16 */ s32 writeOffset;
|
||||||
|
} OSLog;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u32 magic;
|
||||||
|
/* 4 */ u32 timeStamp;
|
||||||
|
/* 8 */ u16 argCount;
|
||||||
|
/* 10 */ u16 eventID;
|
||||||
|
} OSLogItem;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u32 magic;
|
||||||
|
/* 4 */ u32 version;
|
||||||
|
} OSLogFileHdr;
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,13 @@
|
||||||
|
#ifndef _UNK_H_
|
||||||
|
#define _UNK_H_
|
||||||
|
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
|
||||||
|
#define UNK_TYPE s32
|
||||||
|
#define UNK_PTR void*
|
||||||
|
#define UNK_RET void
|
||||||
|
#define UNK_FUN_ARG void(*)(void)
|
||||||
|
#define UNK_FUN_PTR(name) void(*name)(void)
|
||||||
|
#define UNK_ARGS void
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,28 @@
|
||||||
|
#ifndef _VIINT_H_
|
||||||
|
#define _VIINT_H_
|
||||||
|
|
||||||
|
// TODO should be in libultra/io
|
||||||
|
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
#include <os.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ f32 factor;
|
||||||
|
/* 4 */ u16 offset;
|
||||||
|
/* 8 */ u32 scale;
|
||||||
|
} __OSViScale;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u16 state;
|
||||||
|
/* 2 */ u16 retraceCount;
|
||||||
|
/* 4 */ void* framep;
|
||||||
|
/* 8 */ OSViMode* modep;
|
||||||
|
/* 12 */ u32 control;
|
||||||
|
/* 16 */ OSMesgQueue* msgq;
|
||||||
|
/* 20 */ OSMesg msg;
|
||||||
|
/* 24 */ __OSViScale x;
|
||||||
|
/* 36 */ __OSViScale y;
|
||||||
|
} __OSViContext;
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,93 @@
|
||||||
|
known_objects = {
|
||||||
|
0x80087b00:"setcause",
|
||||||
|
0x80087b10:"sendmesg",
|
||||||
|
0x80087e10:"stopthread",
|
||||||
|
0x80087ed0:"recvmesg",
|
||||||
|
0x80088010:"setintmask",
|
||||||
|
0x800880b0:"getintmask",
|
||||||
|
0x80088110:"",
|
||||||
|
0x80088350:"sinf",
|
||||||
|
0x80088510:"sins",
|
||||||
|
0x80088580:"sptask",
|
||||||
|
0x80088840:"ll",
|
||||||
|
0x80088b00:"exceptasm",
|
||||||
|
0x80089430:"thread",
|
||||||
|
0x80089470:"destroythread",
|
||||||
|
0x80089630:"bzero",
|
||||||
|
0x80089AA0:"siacs",
|
||||||
|
0x80089B60:"controller",
|
||||||
|
0x80089e40:"createthread",
|
||||||
|
0x80089F90:"contreaddata",
|
||||||
|
0x8008A540:"virtualtophysical",
|
||||||
|
0x8008A5C0:"getsr",
|
||||||
|
0x8008A5D0:"setsr",
|
||||||
|
0x8008A5E0:"writebackdcache",
|
||||||
|
0x8008AA50:"perspective",
|
||||||
|
0x8008AD70:"sirawdma",
|
||||||
|
0x8008af30:"getthreadid",
|
||||||
|
0x8008af50:"sptaskyield",
|
||||||
|
0x8008AF70:"",
|
||||||
|
0x8008B6B0:"getconfig",
|
||||||
|
0x8008B6C0:"setconfig",
|
||||||
|
0x8008BE70:"stoptimer",
|
||||||
|
0x8008BF60:"probetlb",
|
||||||
|
0x8008C020:"pimgr",
|
||||||
|
0x8008C190:"piacs",
|
||||||
|
0x8008D2C0:"getcount",
|
||||||
|
0x8008D640:"seteventmesg",
|
||||||
|
0x8008D700:"sqrtf",
|
||||||
|
0x8008D730:"contquery",
|
||||||
|
0x8008D7D0:"",
|
||||||
|
0x8008E050:"xprintf",
|
||||||
|
0x8008EDE0:"unmaptlball",
|
||||||
|
0x8008EE30:"pidma",
|
||||||
|
0x8008F1A0:"string",
|
||||||
|
0x8008F240:"createmesgqueue",
|
||||||
|
0x8008F270:"invalicache",
|
||||||
|
0x8008F2F0:"invaldcache",
|
||||||
|
0x8008F3A0:"timerintr",
|
||||||
|
0x8008FA30:"si",
|
||||||
|
0x8008fab0:"jammesg",
|
||||||
|
0x8008fc00:"setthreadpri",
|
||||||
|
0x8008fce0:"getthreadpri",
|
||||||
|
0x800902A0:"sptaskyielded",
|
||||||
|
0x80090300:"memcmp",
|
||||||
|
0x80090420:"gettime",
|
||||||
|
0x80090680:"setglobalintmask",
|
||||||
|
0x80091280:"setcompare",
|
||||||
|
0x80091290:"getcompare",
|
||||||
|
0x800912a0:"dpgetstat",
|
||||||
|
0x800912b0:"dpsetstat",
|
||||||
|
0x800912c0:"bcopy",
|
||||||
|
0x800915D0:"resetglobalintmask",
|
||||||
|
0x800918A0:"ortho",
|
||||||
|
0x80091A60:"interrupt",
|
||||||
|
0x80091AF0:"vi",
|
||||||
|
0x80091C10:"viswapcontext",
|
||||||
|
0x80091F10:"pigetcmdq",
|
||||||
|
0x80091f40:"cosf",
|
||||||
|
0x80092260:"coss",
|
||||||
|
0x80092290:"settime",
|
||||||
|
0x80092C80:"contsetch",
|
||||||
|
0x80092ce0:"setfpccsr",
|
||||||
|
0x80092cf0:"getfpccsr",
|
||||||
|
0x80093ba0:"aigetlen",
|
||||||
|
0x80093c00:"maptlbrdb",
|
||||||
|
0x80093c60:"yieldthread",
|
||||||
|
0x80093d90:"getcause",
|
||||||
|
0x80094150:"settimer",
|
||||||
|
0x800942E0:"xldtob",
|
||||||
|
0x80094DF0:"ldiv",
|
||||||
|
0x80094f80:"xlitob",
|
||||||
|
0x80095270:"spgetstat",
|
||||||
|
0x80095280:"spsetstat",
|
||||||
|
0x80095220:"sirawread",
|
||||||
|
0x800952A0:"vimgr",
|
||||||
|
0x800955B0:"vigetcurrcontext",
|
||||||
|
0x800955C0:"writebackdcacheall",
|
||||||
|
0x800955F0:"getcurrfaultthread",
|
||||||
|
0x800957b0:"startthread",
|
||||||
|
0x80095900:"",
|
||||||
|
0x80095a60:"llcvt",
|
||||||
|
0x80096510:"spsetpc",
|
||||||
|
}
|
|
@ -0,0 +1,485 @@
|
||||||
|
'''
|
||||||
|
Resources:
|
||||||
|
http://www.cs.unibo.it/~solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf
|
||||||
|
https://github.com/pathscale/binutils/blob/5c2c133020e41fc4aadd80a99156d2cea4754b96/include/coff/sym.h
|
||||||
|
https://github.com/pathscale/binutils/blob/5c2c133020e41fc4aadd80a99156d2cea4754b96/include/coff/symconst.h
|
||||||
|
https://github.com/pathscale/binutils/blob/5c2c133020e41fc4aadd80a99156d2cea4754b96/gas/ecoff.c
|
||||||
|
https://github.com/pathscale/binutils/blob/5c2c133020e41fc4aadd80a99156d2cea4754b96/bfd/ecoff.c
|
||||||
|
https://github.com/pathscale/absoft/blob/master/svn/trunk/ekopath-gcc/ekopath-gcc-4.2.0/gcc/mips-tdump.c
|
||||||
|
'''
|
||||||
|
|
||||||
|
import os
|
||||||
|
import struct
|
||||||
|
import collections
|
||||||
|
import sys
|
||||||
|
|
||||||
|
OFFSET = 0 # TODO why are the offsets in the symbolic header off by some amount?
|
||||||
|
|
||||||
|
indent_level = 0
|
||||||
|
is_comment = False
|
||||||
|
|
||||||
|
symbol_type_list = [
|
||||||
|
'stNil', 'stGlobal', 'stStatic', 'stParam', 'stLocal', 'stLabel', 'stProc', 'stBlock',
|
||||||
|
'stEnd', 'stMember', 'stTypedef', 'stFile', 'INVALID', 'INVALID', 'stStaticProc', 'stConstant',
|
||||||
|
'stStaParam', 'INVALID', 'INVALID', 'INVALID', 'INVALID', 'INVALID', 'INVALID', 'INVALID',
|
||||||
|
'INVALID', 'INVALID', 'stStruct', 'stUnion', 'stEnum', 'INVALID', 'INVALID', 'INVALID',
|
||||||
|
'INVALID', 'INVALID', 'stIndirect']
|
||||||
|
storage_class_list = ['scNil', 'scText', 'scData', 'scBss', 'scRegister', 'scAbs', 'scUndefined', 'reserved',
|
||||||
|
'scBits', 'scDbx', 'scRegImage', 'scInfo', 'scUserStruct', 'scSData', 'scSBss', 'scRData',
|
||||||
|
'scVar', 'scCommon', 'scSCommon', 'scVarRegister', 'scVariant', 'scUndefined', 'scInit']
|
||||||
|
basic_type_c_list = ['nil', 'addr', 'signed char', 'unsigned char', 'short', 'unsigned short', 'int', 'unsigned int',
|
||||||
|
'long', 'unsigned long', 'float', 'double', 'struct', 'union', 'enum', 'typedef',
|
||||||
|
'range', 'set', 'complex', 'double complex', 'indirect', 'fixed decimal', 'float decimal', 'string',
|
||||||
|
'bit', 'picture', 'void', 'long long', 'unsigned long long', 'INVALID', 'long', 'unsigned long',
|
||||||
|
'long long', 'unsigned long long', 'addr', 'int64', 'unsigned int64']
|
||||||
|
|
||||||
|
def increase_indent():
|
||||||
|
global indent_level
|
||||||
|
indent_level += 1
|
||||||
|
|
||||||
|
def decrease_indent():
|
||||||
|
global indent_level
|
||||||
|
indent_level -= 1
|
||||||
|
|
||||||
|
def set_is_comment(set_to):
|
||||||
|
global is_comment
|
||||||
|
old = is_comment
|
||||||
|
is_comment = set_to
|
||||||
|
return old
|
||||||
|
|
||||||
|
def get_indent():
|
||||||
|
global indent_level
|
||||||
|
global is_comment
|
||||||
|
ret = '//' if is_comment else ''
|
||||||
|
for i in range(indent_level):
|
||||||
|
ret += ' '
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def read_uint32_be(file_data, offset):
|
||||||
|
return struct.unpack('>I', file_data[offset:offset+4])[0]
|
||||||
|
|
||||||
|
def read_uint16_be(file_data, offset):
|
||||||
|
return struct.unpack('>H', file_data[offset:offset+2])[0]
|
||||||
|
|
||||||
|
def read_uint8_be(file_data, offset):
|
||||||
|
return struct.unpack('>B', file_data[offset:offset+1])[0]
|
||||||
|
|
||||||
|
def read_elf_header(file_data, offset):
|
||||||
|
Header = collections.namedtuple('ElfHeader',
|
||||||
|
'''e_magic e_class e_data e_version e_osabi e_abiversion e_pad
|
||||||
|
e_type e_machine e_version2 e_entry e_phoff e_shoff e_flags
|
||||||
|
e_ehsize e_phentsize e_phnum e_shentsize e_shnum e_shstrndx''')
|
||||||
|
return Header._make(struct.unpack('>I5B7s2H5I6H', file_data[offset:offset+52]))
|
||||||
|
|
||||||
|
def read_elf_section_header(file_data, offset):
|
||||||
|
Header = collections.namedtuple('SectionHeader',
|
||||||
|
'''sh_name sh_type sh_flags sh_addr sh_offset sh_size sh_link
|
||||||
|
sh_info sh_addralign sh_entsize''')
|
||||||
|
return Header._make(struct.unpack('>10I', file_data[offset:offset+40]))
|
||||||
|
|
||||||
|
def read_symbolic_header(file_data, offset):
|
||||||
|
Header = collections.namedtuple('SymbolicHeader',
|
||||||
|
'''magic vstamp ilineMax cbLine cbLineOffset idnMax cbDnOffset
|
||||||
|
ipdMax cbPdOffset isymMax cbSymOffset ioptMax cbOptOffset
|
||||||
|
iauxMax cbAuxOffset issMax cbSsOffset issExtMax cbSsExtOffset
|
||||||
|
ifdMax cbFdOffset crfd cbRfdOffset iextMax cbExtOffset''')
|
||||||
|
return Header._make(struct.unpack('>2H23I', file_data[offset:offset+96]))
|
||||||
|
|
||||||
|
# TODO find a better solution for the bitfield
|
||||||
|
def read_file_descriptor(file_data, offset):
|
||||||
|
if 'init' not in read_file_descriptor.__dict__:
|
||||||
|
read_file_descriptor.cache = {}
|
||||||
|
read_file_descriptor.header = collections.namedtuple('FileDescriptor',
|
||||||
|
'''adr rss issBase cbSs isymBase csym ilineBase cline ioptBase
|
||||||
|
copt ipdFirst cpd iauxBase caux rfdBase crfd XXX_bitfield
|
||||||
|
cbLineOffset cbLine''')
|
||||||
|
read_file_descriptor.init = True
|
||||||
|
if offset in read_file_descriptor.cache:
|
||||||
|
return read_file_descriptor.cache[offset]
|
||||||
|
read_file_descriptor.cache[offset] = read_file_descriptor.header._make(
|
||||||
|
struct.unpack('>I2iI6iHh4iI2I', file_data[offset:offset+72]))
|
||||||
|
return read_file_descriptor.cache[offset]
|
||||||
|
|
||||||
|
def read_procedure_descriptor(file_data, offset):
|
||||||
|
Header = collections.namedtuple('ProcedureDescriptor',
|
||||||
|
'''adr isym iline regmask regoffset iopt fregmask fregoffset
|
||||||
|
frameoffset framereg pcreg lnLow lnHigh cbLineOffset''')
|
||||||
|
return Header._make(struct.unpack('>I8i2h2iI', file_data[offset:offset+52]))
|
||||||
|
|
||||||
|
def read_symbol(file_data, offset):
|
||||||
|
if 'init' not in read_symbol.__dict__:
|
||||||
|
read_symbol.cache = {}
|
||||||
|
read_symbol.header = collections.namedtuple('Symbol', '''iss value st sc index''')
|
||||||
|
read_symbol.init = True
|
||||||
|
if offset in read_symbol.cache:
|
||||||
|
return read_symbol.cache[offset]
|
||||||
|
(word0, word1, word2) = struct.unpack('>iII', file_data[offset:offset+12])
|
||||||
|
read_symbol.cache[offset] = read_symbol.header._make((
|
||||||
|
word0, word1, (word2 >> 26) & 0x3F, (word2 >> 21) & 0x1F, word2 & 0xFFFFF))
|
||||||
|
return read_symbol.cache[offset]
|
||||||
|
|
||||||
|
def read_auxiliary_symbol(file_data, offset):
|
||||||
|
if 'init' not in read_auxiliary_symbol.__dict__:
|
||||||
|
read_auxiliary_symbol.cache = {}
|
||||||
|
read_auxiliary_symbol.header = collections.namedtuple('AuxSymbol',
|
||||||
|
'''ti rndx dnLow dnHigh isym iss width count''')
|
||||||
|
read_auxiliary_symbol.type_info = collections.namedtuple('TypeInfo',
|
||||||
|
'''fBitfield continued bt tq4 tq5 tq0 tq1 tq2 tq3''')
|
||||||
|
read_auxiliary_symbol.rel_sym = collections.namedtuple('RelativeSymbol', '''rfd index''')
|
||||||
|
read_auxiliary_symbol.init = True
|
||||||
|
if offset in read_auxiliary_symbol.cache:
|
||||||
|
return read_auxiliary_symbol.cache[offset]
|
||||||
|
word0 = struct.unpack('>I', file_data[offset:offset+4])[0]
|
||||||
|
read_auxiliary_symbol.cache[offset] = read_auxiliary_symbol.header._make((
|
||||||
|
read_auxiliary_symbol.type_info._make(((word0 >> 31) & 1, (word0 >> 30) & 1, (word0 >> 24) & 0x3F, (word0 >> 20) & 0xF, (word0 >> 16) & 0xF, (word0 >> 12) & 0xF, (word0 >> 8) & 0xF, (word0 >> 4) & 0xF, word0 & 0xF)),
|
||||||
|
read_auxiliary_symbol.rel_sym._make(((word0 >> 20) & 0xFFF, word0 & 0xFFFFF)),
|
||||||
|
word0, word0, word0, word0, word0, word0))
|
||||||
|
return read_auxiliary_symbol.cache[offset]
|
||||||
|
|
||||||
|
def read_string(file_data, offset):
|
||||||
|
current_offset = 0
|
||||||
|
current_string = b''
|
||||||
|
while True:
|
||||||
|
char = struct.unpack('c', file_data[offset+current_offset:offset+current_offset+1])[0]
|
||||||
|
if char == b'\0':
|
||||||
|
return current_string.decode('ascii')
|
||||||
|
else:
|
||||||
|
current_string += char
|
||||||
|
current_offset += 1
|
||||||
|
|
||||||
|
def get_symbol_name_from_aux(file_data, fd, symbolic_header, aux_num, search_for_typedef):
|
||||||
|
aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + aux_num)*4)
|
||||||
|
fd_num = aux.rndx.rfd
|
||||||
|
next_aux = aux_num+1
|
||||||
|
if fd_num == 4095:
|
||||||
|
aux2 = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + next_aux)*4)
|
||||||
|
fd_num = aux2.isym
|
||||||
|
next_aux = next_aux+1;
|
||||||
|
fd2 = read_file_descriptor(file_data, symbolic_header.cbFdOffset - OFFSET + fd_num*72)
|
||||||
|
sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + (fd2.isymBase + aux.rndx.index)*12)
|
||||||
|
ret = ''
|
||||||
|
#print('%r' % (aux,));
|
||||||
|
#print('%r' % (aux2,));
|
||||||
|
#print('%r' % (sym,));
|
||||||
|
if sym.st == 26 or sym.st == 27: #stStruct, stunion
|
||||||
|
ret = get_struct_or_union_string(file_data, fd2, symbolic_header, fd2.isymBase + aux.rndx.index, search_for_typedef)
|
||||||
|
elif sym.st == 28: #stEnum:
|
||||||
|
ret = get_enum_string(file_data, fd2, symbolic_header, fd2.isymBase + aux.rndx.index)
|
||||||
|
else:
|
||||||
|
ret = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd2.issBase + sym.iss)
|
||||||
|
return (ret, next_aux)
|
||||||
|
|
||||||
|
def get_type_string(file_data, fd, symbolic_header, aux_num, name, search_for_typedef):
|
||||||
|
ret = ''
|
||||||
|
aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + aux_num)*4)
|
||||||
|
#print('');
|
||||||
|
#print('%r' % (aux,));
|
||||||
|
next_aux = aux_num+1
|
||||||
|
has_bitfield = aux.ti.fBitfield == 1
|
||||||
|
bitwidth = 0
|
||||||
|
if has_bitfield:
|
||||||
|
bit_aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + next_aux)*4)
|
||||||
|
bitwidth = bit_aux.isym
|
||||||
|
next_aux = next_aux+1
|
||||||
|
if aux.ti.bt == 12: # btStruct
|
||||||
|
(ret, next_aux) = get_symbol_name_from_aux(file_data, fd, symbolic_header, next_aux, search_for_typedef)
|
||||||
|
elif aux.ti.bt == 13: # btUnion
|
||||||
|
(ret, next_aux) = get_symbol_name_from_aux(file_data, fd, symbolic_header, next_aux, search_for_typedef)
|
||||||
|
elif aux.ti.bt == 15: # btTypedef
|
||||||
|
(ret, next_aux) = get_symbol_name_from_aux(file_data, fd, symbolic_header, next_aux, search_for_typedef)
|
||||||
|
elif aux.ti.bt == 14: # btEnum
|
||||||
|
(ret, next_aux) = get_symbol_name_from_aux(file_data, fd, symbolic_header, next_aux, search_for_typedef)
|
||||||
|
else:
|
||||||
|
ret = basic_type_c_list[aux.ti.bt]
|
||||||
|
|
||||||
|
tq_list = (aux.ti.tq0, aux.ti.tq1, aux.ti.tq2, aux.ti.tq3, aux.ti.tq4, aux.ti.tq5)
|
||||||
|
|
||||||
|
# TODO this is very naive and probably does not work in a large amount of cases
|
||||||
|
last_was_proc = False # if we see a tqProc, assume the next will be a tqPtr
|
||||||
|
for tq in tq_list:
|
||||||
|
if tq == 0: # tqNil
|
||||||
|
break;
|
||||||
|
elif tq == 1: # tqPtr
|
||||||
|
if last_was_proc:
|
||||||
|
last_was_proc = False
|
||||||
|
continue
|
||||||
|
ret += '*'
|
||||||
|
elif tq == 2: # tqProc
|
||||||
|
last_was_proc = True
|
||||||
|
name = '(*%s)(... /* ECOFF does not store param types */)' % name
|
||||||
|
elif tq == 3: # tqArray
|
||||||
|
next_aux += 2 # todo what does this skip over? (Apparantly the type of the index, so always int for C)
|
||||||
|
array_low_aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + next_aux)*4)
|
||||||
|
array_high_aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + next_aux+1)*4)
|
||||||
|
stride_aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + next_aux+2)*4)
|
||||||
|
next_aux += 3
|
||||||
|
if array_high_aux.dnHigh == 0xFFFFFFFF:
|
||||||
|
name += '[]'
|
||||||
|
else:
|
||||||
|
name += '[%d]' % (array_high_aux.dnHigh + 1)
|
||||||
|
elif tq == 4: # tqFar
|
||||||
|
print('ERROR tqFar in get_type_name')
|
||||||
|
elif tq == 5: # tqVol
|
||||||
|
ret = 'volatile ' + ret
|
||||||
|
elif tq == 6: # tqConst
|
||||||
|
ret = 'const ' + ret
|
||||||
|
if has_bitfield:
|
||||||
|
name += ' : %d' % bitwidth
|
||||||
|
return ret + ' ' + name
|
||||||
|
|
||||||
|
def get_enum_string(file_data, fd, symbolic_header, enum_sym_num):
|
||||||
|
ret = ''
|
||||||
|
start_sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + enum_sym_num*12)
|
||||||
|
if start_sym.st != 28:
|
||||||
|
print('ERROR unkown type in get_enum_string start:%d' % start_sym.st)
|
||||||
|
return ret
|
||||||
|
ret += 'enum {\n'
|
||||||
|
increase_indent()
|
||||||
|
sym_num = enum_sym_num + 1
|
||||||
|
while sym_num < fd.isymBase + start_sym.index:
|
||||||
|
sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + sym_num*12)
|
||||||
|
if sym.st == 8: # stEnd
|
||||||
|
decrease_indent()
|
||||||
|
ret += get_indent()
|
||||||
|
ret += '}'
|
||||||
|
elif sym.st == 9: # stMember
|
||||||
|
name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + sym.iss)
|
||||||
|
ret += get_indent()
|
||||||
|
ret += '%s = %d,\n' % (name, sym.value)
|
||||||
|
else:
|
||||||
|
print('ERROR unkown type in get_enum_string:%d' % sym.st)
|
||||||
|
break
|
||||||
|
sym_num += 1
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def get_struct_or_union_string(file_data, fd, symbolic_header, union_sym_num, search_for_typedef):
|
||||||
|
ret = ''
|
||||||
|
start_sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + union_sym_num*12)
|
||||||
|
if search_for_typedef:
|
||||||
|
typedef_sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + (fd.isymBase + start_sym.index)*12)
|
||||||
|
if typedef_sym.st == 10: # stTypedef
|
||||||
|
return read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + typedef_sym.iss)
|
||||||
|
else:
|
||||||
|
name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + start_sym.iss)
|
||||||
|
if name != '':
|
||||||
|
return name
|
||||||
|
if start_sym.st == 26: # stStruct
|
||||||
|
ret += 'struct {\n'
|
||||||
|
increase_indent()
|
||||||
|
elif start_sym.st == 27: # stUnion
|
||||||
|
ret += 'union {\n'
|
||||||
|
increase_indent()
|
||||||
|
else:
|
||||||
|
print('ERROR unkown type in get_struct_or_union_string start:%d' % start_sym.st)
|
||||||
|
return ret
|
||||||
|
sym_num = union_sym_num + 1
|
||||||
|
while sym_num < fd.isymBase + start_sym.index:
|
||||||
|
sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + sym_num*12)
|
||||||
|
if sym.st == 8: # stEnd
|
||||||
|
decrease_indent()
|
||||||
|
ret += get_indent()
|
||||||
|
ret += '}'
|
||||||
|
elif sym.st == 9: # stMember
|
||||||
|
name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + sym.iss)
|
||||||
|
ret += get_indent()
|
||||||
|
ret += '/* %d */ %s;\n' % (sym.value / 8, get_type_string(file_data, fd, symbolic_header, sym.index, name, True))
|
||||||
|
elif sym.st == 26 or sym.st == 27: #stStruct, stUnion
|
||||||
|
sym_num = fd.isymBase + sym.index
|
||||||
|
continue
|
||||||
|
elif sym.st == 34: # stIndirect
|
||||||
|
# TODO what even is a stIndirect?
|
||||||
|
sym_num += 1
|
||||||
|
else:
|
||||||
|
print('ERROR unkown type in get_struct_or_union_string:%d' % sym.st)
|
||||||
|
break
|
||||||
|
sym_num += 1
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def print_typedef_symbols(file_data, fd, symbolic_header, typedef_sym_num):
|
||||||
|
typedef_sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + typedef_sym_num*12)
|
||||||
|
if typedef_sym.st != 10: # stTypedef
|
||||||
|
print('ERROR expected stTypedef symbol in print_typedef_symbols, found:%d' % typedef_sym.st)
|
||||||
|
return
|
||||||
|
name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + typedef_sym.iss)
|
||||||
|
print('typedef %s;' % get_type_string(file_data, fd, symbolic_header, typedef_sym.index, name, False))
|
||||||
|
|
||||||
|
def print_procedure(file_data, fd, symbolic_header, proc_sym_num):
|
||||||
|
proc_sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + proc_sym_num*12)
|
||||||
|
proc_name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + proc_sym.iss)
|
||||||
|
print('%s(' % get_type_string(file_data, fd, symbolic_header, proc_sym.index+1, proc_name, True), end='')
|
||||||
|
sym_num = proc_sym_num+1
|
||||||
|
param_sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + sym_num*12)
|
||||||
|
first = True
|
||||||
|
while param_sym.st == 3: # stParam
|
||||||
|
param_name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + param_sym.iss)
|
||||||
|
print('%s%s' % ('' if first else ', ',
|
||||||
|
get_type_string(file_data, fd, symbolic_header, param_sym.index, param_name, True)),
|
||||||
|
end='')
|
||||||
|
sym_num += 1
|
||||||
|
param_sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + sym_num*12)
|
||||||
|
first = False
|
||||||
|
|
||||||
|
print(');')
|
||||||
|
comment_old = set_is_comment(True)
|
||||||
|
while sym_num < fd.isymBase + fd.csym:
|
||||||
|
sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + sym_num*12)
|
||||||
|
sym_num += 1
|
||||||
|
if sym.st == 7: # stBlock
|
||||||
|
print('%s{' % get_indent())
|
||||||
|
increase_indent()
|
||||||
|
elif sym.st == 8: # stEnd
|
||||||
|
if proc_name == read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + sym.iss):
|
||||||
|
set_is_comment(comment_old)
|
||||||
|
return sym_num
|
||||||
|
decrease_indent()
|
||||||
|
print('%s}' % get_indent())
|
||||||
|
elif sym.st == 4: # stLocal
|
||||||
|
local_name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + sym.iss)
|
||||||
|
is_reg = sym.sc == 4 # scRegister
|
||||||
|
print('%s%s%s;' % (get_indent(),
|
||||||
|
'register ' if is_reg else '',
|
||||||
|
get_type_string(file_data, fd, symbolic_header, sym.index, local_name, True)))
|
||||||
|
elif sym.st == 2: # stStatic
|
||||||
|
static_name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + sym.iss)
|
||||||
|
print('%sstatic %s;' % (get_indent(),get_type_string(file_data, fd, symbolic_header, sym.index, static_name, True)))
|
||||||
|
elif sym.st == 5: # stLabel
|
||||||
|
static_name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + sym.iss)
|
||||||
|
print('%sLabel: %s @ %d;' % (get_indent(), static_name, sym.value))
|
||||||
|
elif sym.st == 6: # stProc
|
||||||
|
# multiple name for function?
|
||||||
|
sym_num = print_procedure(file_data, fd, symbolic_header, sym_num-1)
|
||||||
|
elif sym.st == 26 or sym.st == 27: #stStruct, stUnion
|
||||||
|
sym_num = fd.isymBase + sym.index
|
||||||
|
elif sym.st == 34: # stIndirect
|
||||||
|
# TODO what even is a stIndirect?
|
||||||
|
sym_num += 1
|
||||||
|
else:
|
||||||
|
print('ERROR unkown st in print_procedure: %d' % sym.st)
|
||||||
|
set_is_comment(comment_old)
|
||||||
|
return sym_num
|
||||||
|
|
||||||
|
def print_symbols(file_data, fd, symbolic_header):
|
||||||
|
sym_num = fd.isymBase
|
||||||
|
while sym_num < fd.isymBase + fd.csym:
|
||||||
|
root_sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + sym_num*12)
|
||||||
|
if root_sym.st == 11: # stFile
|
||||||
|
file_name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + root_sym.iss)
|
||||||
|
print('// begin file %s\n' % file_name)
|
||||||
|
sym_num += 1
|
||||||
|
leaf_sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + sym_num*12)
|
||||||
|
while leaf_sym.st != 8: # stEnd
|
||||||
|
if leaf_sym.st == 26 or leaf_sym.st == 27 or leaf_sym.st == 28: # stStruct, stUnion, stEnum
|
||||||
|
sym_num = fd.isymBase + leaf_sym.index
|
||||||
|
print('')
|
||||||
|
elif leaf_sym.st == 10: # stTypedef
|
||||||
|
print_typedef_symbols(file_data, fd, symbolic_header, sym_num)
|
||||||
|
sym_num += 1
|
||||||
|
print('')
|
||||||
|
elif leaf_sym.st == 6 or leaf_sym.st == 14: # stProc, stStaticProc
|
||||||
|
# TODO how do stProc and stStaticProc differ? stStaticProc isn't exported?
|
||||||
|
sym_num = print_procedure(file_data, fd, symbolic_header, sym_num)
|
||||||
|
print('')
|
||||||
|
elif leaf_sym.st == 2: # stStatic
|
||||||
|
static_name = read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + leaf_sym.iss)
|
||||||
|
if leaf_sym.sc == 2 or leaf_sym.sc == 3: # scData, scBss
|
||||||
|
print('static %s;\n' % get_type_string(file_data, fd, symbolic_header, leaf_sym.index, static_name, True))
|
||||||
|
else:
|
||||||
|
# TODO what do 'Load time only' symbols do?
|
||||||
|
print('// static %s; - Load time only\n' % static_name)
|
||||||
|
sym_num += 1
|
||||||
|
else:
|
||||||
|
print('ERROR unkown st in leaf_sym in print_symbols: %d' % leaf_sym.st)
|
||||||
|
sym_num += 1
|
||||||
|
leaf_sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + sym_num*12)
|
||||||
|
sym_num = fd.isymBase + root_sym.index
|
||||||
|
print('// end file %s' % file_name)
|
||||||
|
else:
|
||||||
|
print('ERROR expected st of stFile as only root type in print_symbols:%d' % root_sym.st)
|
||||||
|
return
|
||||||
|
|
||||||
|
def main():
|
||||||
|
global OFFSET
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
return # TODO print usage
|
||||||
|
|
||||||
|
filename = sys.argv[1]
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(filename, 'rb') as f:
|
||||||
|
file_data = f.read()
|
||||||
|
except IOError:
|
||||||
|
print('failed to read file ' + filename)
|
||||||
|
return
|
||||||
|
|
||||||
|
elf_header = read_elf_header(file_data, 0)
|
||||||
|
section_headers = []
|
||||||
|
debug_index = 0xFFFFFFFF
|
||||||
|
#print('%r' % (elf_header,))
|
||||||
|
for i in range(elf_header.e_shnum):
|
||||||
|
section_headers.append(read_elf_section_header(file_data, elf_header.e_shoff + i*40))
|
||||||
|
#print('%r' % (section_headers[i],))
|
||||||
|
if section_headers[i].sh_type == 0x70000005:
|
||||||
|
debug_index = i
|
||||||
|
|
||||||
|
if debug_index != 0xFFFFFFFF:
|
||||||
|
symbolic_header = read_symbolic_header(file_data, section_headers[debug_index].sh_offset)
|
||||||
|
file_descriptors = []
|
||||||
|
print('%r' % (symbolic_header,))
|
||||||
|
# Set offset by assuming that there are no optimization symbols so cbOptOffset points to the start of the symbolic header
|
||||||
|
OFFSET = symbolic_header.cbOptOffset - section_headers[debug_index].sh_offset
|
||||||
|
print('Using OFFSET of %d' % OFFSET)
|
||||||
|
#for sym_num in range(symbolic_header.isymMax):
|
||||||
|
#sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + sym_num*12)
|
||||||
|
#print('%d:%r' % (sym_num, (sym,)));
|
||||||
|
#for aux_num in range(symbolic_header.iauxMax):
|
||||||
|
#aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + aux_num*4)
|
||||||
|
#print('%d:%r' % (aux_num, (aux,)));
|
||||||
|
for file_num in range(symbolic_header.ifdMax):
|
||||||
|
fd = read_file_descriptor(file_data, symbolic_header.cbFdOffset - OFFSET + file_num*72)
|
||||||
|
file_descriptors.append(fd)
|
||||||
|
for file_num in range(symbolic_header.ifdMax):
|
||||||
|
fd = read_file_descriptor(file_data, symbolic_header.cbFdOffset - OFFSET + file_num*72)
|
||||||
|
print('%r' % (fd,))
|
||||||
|
print(' name:%s' % read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + fd.rss))
|
||||||
|
|
||||||
|
print(' procedures:')
|
||||||
|
for proc_num in range(fd.ipdFirst, fd.ipdFirst + fd.cpd):
|
||||||
|
pd = read_procedure_descriptor(file_data, symbolic_header.cbPdOffset - OFFSET + proc_num*52)
|
||||||
|
print(' %r' % ((pd,)))
|
||||||
|
|
||||||
|
print(' symbols:')
|
||||||
|
for sym_num in range(fd.isymBase, fd.isymBase + fd.csym):
|
||||||
|
sym = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + sym_num*12)
|
||||||
|
print(' %r' % ((sym,)))
|
||||||
|
print(' name:%s' % read_string(file_data, symbolic_header.cbSsOffset - OFFSET + fd.issBase + sym.iss))
|
||||||
|
print(' type:%s(%d)' % (symbol_type_list[sym.st], sym.st))
|
||||||
|
print(' storage class:%s(%d)' % (storage_class_list[sym.sc], sym.sc))
|
||||||
|
if sym.st == 3 or sym.st == 4 or sym.st == 9 or sym.st == 10 or sym.st == 28: # stParam, stLocal, stMember, stTypedef, stEnum
|
||||||
|
aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + sym.index)*4)
|
||||||
|
print(' %r' % ((aux,)))
|
||||||
|
offset = 0
|
||||||
|
if aux.ti.fBitfield == 1:
|
||||||
|
bitfield_aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + sym.index + 1)*4)
|
||||||
|
print(' %r' % ((bitfield_aux,)))
|
||||||
|
offset = 1
|
||||||
|
if aux.ti.bt == 12 or aux.ti.bt == 13 or aux.ti.bt == 14 or aux.ti.bt == 15: # btStruct, btUnion, btEnum, btTypedef
|
||||||
|
aux2 = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + sym.index + 1 + offset)*4)
|
||||||
|
print(' %r' % ((aux2,)))
|
||||||
|
if aux2.rndx.rfd == 4095:
|
||||||
|
aux3 = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + sym.index + 2 + offset)*4)
|
||||||
|
print(' %r' % ((aux3,)))
|
||||||
|
sym2 = read_symbol(file_data, symbolic_header.cbSymOffset - OFFSET + (file_descriptors[aux3.isym].isymBase + aux2.rndx.index)*12)
|
||||||
|
print(' %r' % (sym2,))
|
||||||
|
print(' name:%s' % read_string(file_data, symbolic_header.cbSsOffset - OFFSET + file_descriptors[aux3.isym].issBase + sym2.iss))
|
||||||
|
if sym.st == 6: # stProc
|
||||||
|
# TODO what is the first aux symbol for?
|
||||||
|
aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + sym.index)*4)
|
||||||
|
type_aux = read_auxiliary_symbol(file_data, symbolic_header.cbAuxOffset - OFFSET + (fd.iauxBase + sym.index+1)*4)
|
||||||
|
print(' %r' % ((aux,)))
|
||||||
|
print(' %r' % ((type_aux,)))
|
||||||
|
|
||||||
|
print(' pretty print:')
|
||||||
|
print_symbols(file_data, fd, symbolic_header)
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
|
@ -0,0 +1,128 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
UNK_RET func_80080060(void) {
|
||||||
|
func_80085320(&D_80099500, &D_80099AF0, &D_80099EF0, 0, -1, &D_80098190);
|
||||||
|
D_80000318 = func_8008D350();
|
||||||
|
func_800818F4();
|
||||||
|
func_8008A6FC();
|
||||||
|
func_8008EDE0();
|
||||||
|
D_80096B40 = func_80092920();
|
||||||
|
func_80085320(&D_80099AD0, &D_800996D0, &D_80099AD0_, 0, 256, &D_80098198);
|
||||||
|
osCreateThread(&D_80099520, 1, (void(*)(void*))func_80080514, 0, &D_80099AD0, 12);
|
||||||
|
func_800957B0(&D_80099520);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80080150(UNK_PTR a0, UNK_PTR a1) {
|
||||||
|
if (a0 < a1) {
|
||||||
|
func_80089630(a0, (u32)a1 - (u32)a0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80080180(UNK_TYPE* a0, UNK_TYPE a1, UNK_TYPE a2) {
|
||||||
|
for (; a1 != 0; a1 -= 4) {
|
||||||
|
*a0++ = a2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_8008019C(void) {
|
||||||
|
func_80080180(&D_80000500, 0x25800, 0x00010001);
|
||||||
|
func_800805E0(0);
|
||||||
|
func_8008FE60(&D_80000500);
|
||||||
|
func_8008AE70(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800801EC(void) {
|
||||||
|
func_80080150((void*)0x80000400, &D_80000500);
|
||||||
|
func_80080150(&D_80025D00, (int*)func_80080060);
|
||||||
|
func_80080150(&D_80208EA0, (UNK_PTR)(0x80000000 + D_80000318));
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80080250(void) {
|
||||||
|
UNK_PTR v0;
|
||||||
|
UNK_PTR v1;
|
||||||
|
UNK_PTR t7;
|
||||||
|
UNK_TYPE sp88;
|
||||||
|
UNK_TYPE sp84;
|
||||||
|
UNK_TYPE sp80;
|
||||||
|
UNK_TYPE sp76;
|
||||||
|
UNK_TYPE sp72;
|
||||||
|
UNK_TYPE sp68;
|
||||||
|
UNK_TYPE sp64;
|
||||||
|
UNK_TYPE sp60;
|
||||||
|
UNK_TYPE sp56;
|
||||||
|
UNK_TYPE sp52;
|
||||||
|
UNK_TYPE sp48;
|
||||||
|
UNK_TYPE sp44;
|
||||||
|
UNK_PTR sp40;
|
||||||
|
|
||||||
|
func_8008F240(&sp48, &sp44, 1);
|
||||||
|
|
||||||
|
v1 = &D_00B3C000;
|
||||||
|
t7 = &D_00C7A4E0;
|
||||||
|
sp40 = D_80096B50;
|
||||||
|
*(int*)sp40 = 0;
|
||||||
|
|
||||||
|
func_80080C04(&sp72, (UNK_FUN_ARG)func_800A5AC0, v1, (u32)t7 - (u32)v1, 0, &sp48, 0);
|
||||||
|
func_8008019C();
|
||||||
|
func_800801EC();
|
||||||
|
func_80087ED0(&sp48, 0, 1);
|
||||||
|
|
||||||
|
D_80096B50 = sp40;
|
||||||
|
|
||||||
|
func_80080150(&D_801E3FA0, &D_80208EA0);
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80080300(UNK_TYPE a0) {
|
||||||
|
func_80085320(&D_8009A670, &D_8009A170, &D_8009A670_, 0, 256, &D_800981A0);
|
||||||
|
func_80081754(&D_80099EF0, &D_8009A670, 18, 1);
|
||||||
|
func_80080D0C();
|
||||||
|
func_80080250();
|
||||||
|
func_80174BF0(a0);
|
||||||
|
func_80080E00();
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_8008038C(void) {
|
||||||
|
u32 i;
|
||||||
|
func_800952A0(254);
|
||||||
|
|
||||||
|
D_80096B2C = 66;
|
||||||
|
D_80096B30 = 1.0;
|
||||||
|
D_80096B34 = 1.0;
|
||||||
|
|
||||||
|
switch (osTvType) {
|
||||||
|
case 1:
|
||||||
|
D_8009B290 = 2;
|
||||||
|
for (i = 0; i < 20; i++) {
|
||||||
|
D_800980E0[i] = D_8009B240[i];
|
||||||
|
}
|
||||||
|
D_80096B34 = D_800981B0;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
D_8009B290 = 30;
|
||||||
|
for (i = 0; i < 20; i++) {
|
||||||
|
D_80098010[i] = D_8009B240[i];
|
||||||
|
}
|
||||||
|
D_80096B34 = D_800981B0;
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
D_8009B290 = 44;
|
||||||
|
for (i = 0; i < 20; i++) {
|
||||||
|
D_80097FC0[i] = D_8009B240[i];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
D_80096B20 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80080514(UNK_TYPE a0) {
|
||||||
|
func_8008038C();
|
||||||
|
func_8008C020(150, &D_8009B228, &D_8009B160, 50);
|
||||||
|
func_80085320(&D_8009B140, &D_8009A840, &D_8009B140_, 0, 1024, &D_800981A8);
|
||||||
|
func_80089E40(&D_8009A690, 3, func_80080300, a0, &D_8009B140, 12);
|
||||||
|
func_800957B0(&D_8009A690);
|
||||||
|
func_8008FC00(0, 0);
|
||||||
|
|
||||||
|
while(1);
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
UNK_RET func_800805E0(UNK_TYPE a0) {
|
||||||
|
if (a0 != 0) {
|
||||||
|
switch (osTvType) {
|
||||||
|
case 2:
|
||||||
|
func_8008B650(&D_80098010);
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
func_8008B650(&D_80097590);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
default:
|
||||||
|
func_8008B650(&D_80097FC0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (D_80096B2C != 0) {
|
||||||
|
func_80092100(D_80096B2C);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (D_80096B34 != 1) {
|
||||||
|
func_80095900(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
func_8008B650(&D_8009B240);
|
||||||
|
|
||||||
|
if (D_80096B28 != 0) {
|
||||||
|
func_80087E00(D_80096B28);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (D_80096B2C != 0) {
|
||||||
|
func_80092100(D_80096B2C);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (D_80096B30 != 1) {
|
||||||
|
func_80095950(D_80096B30);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (D_80096B34 != 1) {
|
||||||
|
func_80095900(D_80096B34);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*D_80096B24 = a0;
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80080748(void) {
|
||||||
|
if (*D_80096B24 != 0) {
|
||||||
|
func_8008AE70(1);
|
||||||
|
} else {
|
||||||
|
func_8008AE70(0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
void func_80081820(void) {}
|
||||||
|
|
||||||
|
void func_80081828(void) {}
|
||||||
|
|
||||||
|
void func_80081830(void) {
|
||||||
|
func_8008481C(80, 200, &D_80098280, (UNK_PTR)(*(u32*)0xA4040010));
|
||||||
|
func_8008481C(40, 184, &D_80098290, &D_800994D0);
|
||||||
|
func_8008481C(56, 192, &D_800982A4, &D_800994DC);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_8008189C(void) {
|
||||||
|
func_800819F0(&D_8009BE38, (void(*)(UNK_TYPE, UNK_TYPE))func_80081830, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_800818D0(void) {
|
||||||
|
func_80081AD4(&D_8009BE38);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_800818F4(void) {
|
||||||
|
D_8009BE30 = *(u32*)0xA02FB1F4;
|
||||||
|
D_8009BE34 = *(u32*)0xA02FE1C0;
|
||||||
|
}
|
|
@ -0,0 +1,104 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
void func_80085320(struct s80085320* a0, UNK_PTR a1, UNK_PTR a2, UNK_TYPE a3, UNK_TYPE sp16, UNK_PTR sp20) {
|
||||||
|
UNK_TYPE* i;
|
||||||
|
struct s80085320* v0;
|
||||||
|
|
||||||
|
if (a0 == NULL) {
|
||||||
|
g_s80085320_ListHead = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
a0->unk8 = a1;
|
||||||
|
a0->unk12 = a2;
|
||||||
|
a0->unk16 = a3;
|
||||||
|
a0->unk20 = sp16;
|
||||||
|
a0->unk24 = sp20;
|
||||||
|
|
||||||
|
v0 = g_s80085320_ListHead;
|
||||||
|
while (v0 != NULL) {
|
||||||
|
if (v0 == a0) return;
|
||||||
|
v0 = v0->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
a0->prev = g_s80085320_ListTail;
|
||||||
|
a0->next = NULL;
|
||||||
|
|
||||||
|
if (g_s80085320_ListTail != NULL) {
|
||||||
|
g_s80085320_ListTail->next = a0;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_s80085320_ListTail = a0;
|
||||||
|
|
||||||
|
if (g_s80085320_ListHead == NULL) {
|
||||||
|
g_s80085320_ListHead = a0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a0->unk20 != -1) {
|
||||||
|
for (i = a0->unk8; i < a0->unk12; i++) {
|
||||||
|
*i = a0->unk16;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800853F8(struct s80085320* a0) {
|
||||||
|
if (a0->prev == NULL) {
|
||||||
|
if (g_s80085320_ListHead == a0) {
|
||||||
|
g_s80085320_ListHead = a0->next;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
a0->prev->next = a0->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a0->next == NULL) {
|
||||||
|
if (g_s80085320_ListTail == a0) {
|
||||||
|
g_s80085320_ListTail = a0->prev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_TYPE func_80085468(struct s80085320* a0) {
|
||||||
|
UNK_TYPE* v1 = a0->unk8;
|
||||||
|
UNK_TYPE* a1 = a0->unk12;
|
||||||
|
UNK_TYPE* v0 = v1;
|
||||||
|
u32 x; // ptr_diff
|
||||||
|
|
||||||
|
while (v0 < a1) {
|
||||||
|
if (*v0++ != a0->unk16) break;
|
||||||
|
a1 = (UNK_TYPE*)((u32)v0 - (u32)v1);
|
||||||
|
}
|
||||||
|
|
||||||
|
x = v0 - v1;
|
||||||
|
|
||||||
|
if (x == 0) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((x < a0->unk20) && (a0->unk20 != -1)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_TYPE func_800854E0(UNK_ARGS) {
|
||||||
|
struct s80085320* s0 = g_s80085320_ListHead;
|
||||||
|
UNK_TYPE ret = 0;
|
||||||
|
while (s0 != NULL) {
|
||||||
|
if (func_80085468(s0) != 0) {
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
s0 = s0->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80085538(struct s80085320* a0) {
|
||||||
|
if (a0 == NULL) {
|
||||||
|
func_800854E0();
|
||||||
|
} else {
|
||||||
|
func_80085468(a0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
UNK_TYPE func_80087830(UNK_TYPE a0, UNK_TYPE a1, UNK_TYPE a2) {
|
||||||
|
return func_8008F208(a0, a1) + a2;
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_TYPE func_80087854(u8* a0, UNK_TYPE a1, UNK_PTR a2) {
|
||||||
|
UNK_TYPE v0 = func_8008E050(func_80087830, a0, a1, a2);
|
||||||
|
|
||||||
|
if (v0 >= 0) {
|
||||||
|
a0[v0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return v0;
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_TYPE func_800878A4(u8* a0, UNK_TYPE a1, UNK_TYPE a2, UNK_TYPE a3) {
|
||||||
|
UNK_TYPE v0 = func_8008E050(func_80087830, a0, a1, &a2);
|
||||||
|
|
||||||
|
if (v0 >= 0) {
|
||||||
|
a0[v0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return v0;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
UNK_RET func_80087900(UNK_PTR a0, UNK_TYPE a1, UNK_PTR a2) {
|
||||||
|
func_8008E050((UNK_TYPE(*)(UNK_TYPE, UNK_TYPE, UNK_TYPE))(*(u32*)a0), a0, a1, a2);
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80087934(UNK_PTR a0, UNK_TYPE a1, UNK_PTR a2, UNK_TYPE a3) {
|
||||||
|
func_80087900(a0, a1, &a2);
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80087960(u64 a0) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800879CC(u32 a0) {
|
||||||
|
func_80087960(func_800888A8(func_800889A8(a0, 3), 64));
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80087A1C(u32 a0) {
|
||||||
|
func_80087960(func_800888A8(func_800889A8(a0, 3000), 64));
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80087A6C(u32 a0) {
|
||||||
|
func_80087960(func_800888A8(func_800889A8(a0, 0x02CB4178), 1000));
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80087AC0(u32 a0) {
|
||||||
|
func_80087960(func_800889A8(a0, 0x02CB4178));
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
void func_80087E00(u32 a0) {
|
||||||
|
D_8009817C = a0;
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
void func_8008A660(void) {
|
||||||
|
D_8009D134 = 7;
|
||||||
|
D_8009D135 = *(u32*)0xA4600014;
|
||||||
|
D_8009D138 = *(u32*)0xA4600018;
|
||||||
|
D_8009D136 = *(u32*)0xA460001C;
|
||||||
|
D_8009D137 = *(u32*)0xA4600020;
|
||||||
|
D_8009D1AC = 7;
|
||||||
|
D_8009D1AD = *(u32*)0xA4600024;
|
||||||
|
D_8009D1B0 = *(u32*)0xA4600028;
|
||||||
|
D_8009D1AE = *(u32*)0xA460002C;
|
||||||
|
D_8009D1AF = *(u32*)0xA4600030;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 D_80097E50; // this has to be defined in this file for func_8008A6FC to match
|
||||||
|
|
||||||
|
void func_8008A6FC(void) {
|
||||||
|
UNK_TYPE sp44;
|
||||||
|
|
||||||
|
D_8009CF70 = 1;
|
||||||
|
|
||||||
|
func_8008A5D0(func_8008A5C0() | 0x20000000);
|
||||||
|
func_80092CE0(0x20000800);
|
||||||
|
func_80096820(0x04900000);
|
||||||
|
|
||||||
|
while (func_8008AEE0(0x1FC007FC, &sp44) != 0);
|
||||||
|
while (func_80095220(0x1FC007FC, sp44 | 8) != 0);
|
||||||
|
|
||||||
|
*(struct s8008A6FC*)0x80000000 = *((struct s8008A6FC*)__osExceptionPreamble);
|
||||||
|
*(struct s8008A6FC*)0x80000080 = *((struct s8008A6FC*)__osExceptionPreamble);
|
||||||
|
*(struct s8008A6FC*)0x80000100 = *((struct s8008A6FC*)__osExceptionPreamble);
|
||||||
|
*(struct s8008A6FC*)0x80000180 = *((struct s8008A6FC*)__osExceptionPreamble);
|
||||||
|
|
||||||
|
func_8008A5E0(0x80000000, 400);
|
||||||
|
func_8008F270(0x80000000, 400);
|
||||||
|
func_8008A660();
|
||||||
|
func_8008EDE0();
|
||||||
|
func_80093C00();
|
||||||
|
D_80097E50 = func_800888A8(func_800889A8(D_80097E50, 3), 4);
|
||||||
|
|
||||||
|
if (D_8000030C == 0) {
|
||||||
|
func_80089630(&D_8000031C, 64);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (osTvType == 0) {
|
||||||
|
D_80097E58 = 0x02F5B2D2;
|
||||||
|
} else if (osTvType == 2) {
|
||||||
|
D_80097E58 = 0x02E6025C;
|
||||||
|
} else {
|
||||||
|
D_80097E58 = 0x02E6D354;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((func_80093D90() & 0x1000) != 0) {
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
*(u32*)0xA4500008 = 1;
|
||||||
|
*(u32*)0xA4500010 = 16383;
|
||||||
|
*(u32*)0xA4500014 = 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_8008A9A8(void) {}
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
s32 __osSpRawStartDma(s32 direction, u32 devAddr , void* dramAddr, u32 size) {
|
||||||
|
if (__osSpDeviceBusy() != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(vu32*)0xA4040000 = devAddr;
|
||||||
|
*(vu32*)0xA4040004 = osVirtualToPhysical(dramAddr);
|
||||||
|
|
||||||
|
if (direction == 0) {
|
||||||
|
*(vu32*)0xA404000C = size - 1;
|
||||||
|
} else {
|
||||||
|
*(vu32*)0xA4040008 = size - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
UNK_TYPE func_8008D350(void) {
|
||||||
|
u32* sp12;
|
||||||
|
u32 sp8;
|
||||||
|
u32 sp4;
|
||||||
|
u32 sp0;
|
||||||
|
|
||||||
|
sp8 = 0x400000;
|
||||||
|
|
||||||
|
do {
|
||||||
|
sp12 = (u32*)(sp8 + 0xA0000000);
|
||||||
|
sp4 = *(u32*)(0xA0000000 + sp8);
|
||||||
|
sp0 = *(u32*)(0xA00FFFFC + sp8);
|
||||||
|
*(u32*)(0xA0000000 + sp8) = *(u32*)(0xA0000000 + sp8) ^ 0xFFFFFFFF;
|
||||||
|
sp12[0x000FFFFC/4] = sp12[0x000FFFFC/4] ^ 0xFFFFFFFF;
|
||||||
|
|
||||||
|
if ((sp12[0] != (sp4 ^ 0xFFFFFFFF)) ||
|
||||||
|
(sp12[0x000FFFFC/4] != (sp0 ^ 0xFFFFFFFF))) {
|
||||||
|
return sp8;
|
||||||
|
}
|
||||||
|
|
||||||
|
*sp12 = sp4;
|
||||||
|
sp12[0x000FFFFC/4] = sp0;
|
||||||
|
sp8 = sp8 + 0x100000;
|
||||||
|
} while(sp8 < 0x800000);
|
||||||
|
|
||||||
|
return sp8;
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
struct s80092920* func_80092920(void) {
|
||||||
|
u32 v0;
|
||||||
|
u32 temp;
|
||||||
|
u32 temp2;
|
||||||
|
u32 temp3;
|
||||||
|
u32 temp4;
|
||||||
|
UNK_TYPE func_ret;
|
||||||
|
|
||||||
|
func_8008C1E0();
|
||||||
|
|
||||||
|
if (D_800980D0 == 0) {
|
||||||
|
func_8008C224();
|
||||||
|
return &D_8009E610;
|
||||||
|
}
|
||||||
|
|
||||||
|
D_800980D0_ = 0;
|
||||||
|
|
||||||
|
D_8009E610.unk4 = 0;
|
||||||
|
D_8009E610.unk12 = 0xB0000000;
|
||||||
|
D_8009E610.unk9 = 0;
|
||||||
|
D_8009E610.unk16 = 0;
|
||||||
|
|
||||||
|
func_80089630(&D_8009E624, 96);
|
||||||
|
|
||||||
|
while ((*(vu32*)0xA4600010) & 0x3);
|
||||||
|
|
||||||
|
temp = *(vu32*)0xA4600014;
|
||||||
|
temp2 = *(vu32*)0xA460001C;
|
||||||
|
temp3 = *(vu32*)0xA4600020;
|
||||||
|
temp4 = *(vu32*)0xA4600018;
|
||||||
|
|
||||||
|
*(vu32*)0xA4600014 = 255;
|
||||||
|
*(vu32*)0xA460001C = 0;
|
||||||
|
*(vu32*)0xA4600020 = 3;
|
||||||
|
*(vu32*)0xA4600018 = 255;
|
||||||
|
|
||||||
|
v0 = *(u32*)(D_8009E610.unk12 | 0xA0000000);
|
||||||
|
D_8009E610.unk6 = (v0 >> 16) & 0xF;
|
||||||
|
D_8009E610.unk7 = (v0 >> 20) & 0xF;
|
||||||
|
D_8009E610.unk8 = v0 >> 8;
|
||||||
|
D_8009E610.unk5 = v0;
|
||||||
|
|
||||||
|
*(vu32*)0xA4600014 = temp;
|
||||||
|
*(vu32*)0xA460001C = temp2;
|
||||||
|
*(vu32*)0xA4600020 = temp3;
|
||||||
|
*(vu32*)0xA4600018 = temp4;
|
||||||
|
|
||||||
|
func_ret = func_80091A60();
|
||||||
|
|
||||||
|
D_8009E610.unk0 = D_80097E8C;
|
||||||
|
D_80097E8C = &D_8009E610;
|
||||||
|
|
||||||
|
func_80091AD0(func_ret);
|
||||||
|
|
||||||
|
func_8008C224();
|
||||||
|
|
||||||
|
return &D_8009E610;
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
void func_80095900(f32 f12) {
|
||||||
|
u32 oldInt;
|
||||||
|
|
||||||
|
oldInt = __osDisableInt();
|
||||||
|
|
||||||
|
*((f32*)__osViNext + 36 / 4) = f12;
|
||||||
|
|
||||||
|
*(u16*)__osViNext |= 0x4;
|
||||||
|
|
||||||
|
__osRestoreInt(oldInt);
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
u32 func_800968B0(const u8* a0, const u8* a1) {
|
||||||
|
u8 v0;
|
||||||
|
u8 v1;
|
||||||
|
do {
|
||||||
|
v0 = *a0++;
|
||||||
|
v1 = *a1++;
|
||||||
|
if (v0 != v1) {
|
||||||
|
return v0 - v1;
|
||||||
|
}
|
||||||
|
} while (v0 != 0);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
UNK_RET func_800A5AC0(void* a0, UNK_TYPE a1) {
|
||||||
|
struct s800A5AC0* s0 = (struct s800A5AC0*)a0;
|
||||||
|
s0->unk278 = ((s0->unk28 >> 8) & 0xFF) | 0x300;
|
||||||
|
s0->unk28 = (s0->unk28 & 0xFF) - 9;
|
||||||
|
func_800FFADC(s0, &D_801ADEAC);
|
||||||
|
func_800B3BA4(&s0->unk188, 0, (void*)&func_800B3FC0, 0x41400000);
|
||||||
|
func_800E1374(a1, &s0->unk328, s0, &D_801ADE80);
|
||||||
|
func_800E7DF8(s0, &s0->unk328);
|
||||||
|
s0->unk182 = 255;
|
||||||
|
s0->unk324 = func_800A5B98;
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800A5B6C(struct s800A5AC0* a0, UNK_TYPE a1) {
|
||||||
|
func_800E11EC(a1, &a0->unk328);
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800A5B98(struct s800A5AC0* a0, UNK_TYPE a1) {
|
||||||
|
s16 v0;
|
||||||
|
s32 v1;
|
||||||
|
if (func_800B84D0(a0, a1) != 0) {
|
||||||
|
a0->unk324 = func_800A5C28;
|
||||||
|
} else {
|
||||||
|
v0 = a0->unk146 - a0->unk190;
|
||||||
|
if (v0 < 0) {
|
||||||
|
v1 = -v0;
|
||||||
|
} else {
|
||||||
|
v1 = v0;
|
||||||
|
}
|
||||||
|
if ((v1 < 10240) || ((a0->unk28 == 1) && (v1 > 22528))) {
|
||||||
|
func_800B863C(a0, a1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800A5C28(struct s800A5AC0* a0, UNK_TYPE a1 /* unused */ ) {
|
||||||
|
if (func_800B867C(a0) != 0) {
|
||||||
|
a0->unk324 = func_800A5B98;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800A5C60(struct s800A5AC0* a0, UNK_TYPE a1) {
|
||||||
|
(a0->unk324)(a0, a1);
|
||||||
|
func_800B675C(a0, 0x42340000);
|
||||||
|
func_800E2928(a1, a1 + 0x18884, &a0->unk328);
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800A5CB8(struct s800A5AC0* a0, UNK_TYPE a1) {
|
||||||
|
func_800BDFC0(a1, D_801ADEB0[a0->unk28], a1, a0);
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
UNK_RET func_800BF9A0(UNK_TYPE a0, UNK_TYPE a1) {
|
||||||
|
s32 i;
|
||||||
|
s800BF9A0_s* s0;
|
||||||
|
|
||||||
|
func_8008439C(-2, 0);
|
||||||
|
func_800847CC(&D_801DCBB0, D_801B4610);
|
||||||
|
func_800847CC(&D_801DCBC4);
|
||||||
|
|
||||||
|
for (i = 0, s0 = D_801AEFD0; i < D_801B4610; i++, s0++) {
|
||||||
|
if (s0->unk16 == 0) continue;
|
||||||
|
func_800847CC(&D_801DCBE4, i, s0->unk16, s0->unk16 + (s0->unk12 - s0->unk8), s0->unk30, &D_801DCBFC);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_TYPE func_800BFA78(UNK_TYPE a0, UNK_TYPE a1) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800BFAE8(UNK_ARGS) {
|
||||||
|
D_801B4610 = 690;
|
||||||
|
func_800819F0(&D_801ED930, func_800BF9A0, 0, 0);
|
||||||
|
func_80081BCC(&D_801ED940, func_800BFA78, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800BFB40(UNK_ARGS) {
|
||||||
|
func_80081AD4(&D_801ED930);
|
||||||
|
func_80081CA4(&D_801ED940);
|
||||||
|
D_801B4610 = 0;
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
UNK_RET func_800CAAD0(UNK_TYPE a0, UNK_TYPE a1, UNK_TYPE a2) {
|
||||||
|
UNK_TYPE sp208;
|
||||||
|
UNK_TYPE sp144;
|
||||||
|
UNK_TYPE sp80;
|
||||||
|
UNK_TYPE sp68;
|
||||||
|
UNK_TYPE sp56;
|
||||||
|
UNK_TYPE sp36;
|
||||||
|
|
||||||
|
s800CAAD0* v1;
|
||||||
|
|
||||||
|
if (func_800C6024(a1) == 0) return;
|
||||||
|
|
||||||
|
v1 = (s800CAAD0*)(a0 + a1 * 100);
|
||||||
|
|
||||||
|
func_80139894(&sp208, v1->unk104, v1->unk108, v1->unk112, v1->unk116, v1->unk118,
|
||||||
|
v1->unk120, v1->unk124, v1->unk128, v1->unk132);
|
||||||
|
|
||||||
|
if (func_80139188(&sp208, &sp144) == 2) return;
|
||||||
|
|
||||||
|
func_80139894(&sp80, v1->unk136, v1->unk140, v1->unk144, v1->unk148, v1->unk150,
|
||||||
|
v1->unk152, v1->unk156, v1->unk160, v1->unk164);
|
||||||
|
|
||||||
|
func_80138C88(&sp144, (UNK_PTR)(a2 + 36), &sp36);
|
||||||
|
func_80138C88(&sp80, &sp56, &sp68);
|
||||||
|
|
||||||
|
v1->unk0 = *(UNK_TYPE*)((u8*)sp36 + 0);
|
||||||
|
v1->unk4 = *(UNK_TYPE*)((u8*)sp36 + 4);
|
||||||
|
v1->unk8 = *(UNK_TYPE*)((u8*)sp36 + 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800CAC0C(UNK_TYPE a0, UNK_TYPE a1, UNK_TYPE a2) {
|
||||||
|
UNK_TYPE v0;
|
||||||
|
s16 v1;
|
||||||
|
|
||||||
|
if (func_800C6024(a0) == 0) return;
|
||||||
|
|
||||||
|
v0 = a0 + a1 * 100;
|
||||||
|
|
||||||
|
v1 = *(s16*)(v0 + 150) - *(s16*)(v0 + 118);
|
||||||
|
|
||||||
|
if (*(s16*)a2 == 0) {
|
||||||
|
*(s16*)(a2 + 2772) += v1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(s16*)(a2 + 190) += v1;
|
||||||
|
*(s16*)(a2 + 50) += v1;
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_800CACA0(UNK_TYPE a0, UNK_TYPE a1, UNK_TYPE a2) {
|
||||||
|
UNK_TYPE sp28;
|
||||||
|
|
||||||
|
if (func_800C6024(a2) == 0) return;
|
||||||
|
|
||||||
|
sp28 = func_800C6248(a0, a2);
|
||||||
|
|
||||||
|
if (sp28 == 0) return;
|
||||||
|
|
||||||
|
func_800CAE88(sp28);
|
||||||
|
|
||||||
|
if ((*(u32*)(a1 + 4) & 0x04000000) == 0x0400) {
|
||||||
|
func_800CAF24(sp28);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((*(u32*)(a1 + 4) & 0x20000) == 0x20000) {
|
||||||
|
func_800CAF38(sp28);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_TYPE func_800CAD2C(UNK_TYPE a0, UNK_TYPE a1, UNK_TYPE a2) {
|
||||||
|
UNK_TYPE v1;
|
||||||
|
UNK_TYPE sp36 = 0;
|
||||||
|
|
||||||
|
if (func_800C6024(a1) == 0) return;
|
||||||
|
|
||||||
|
if (((*(u16*)(a0 + a1*2 + 5084) & 0x2) != 0) ||
|
||||||
|
((*(u16*)(a0 + a1*2 + 5084) & 0x1) == 0)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
v1 = func_800C6248(a0, a1);
|
||||||
|
if (v1 == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((*(u32*)(v1 + 340) & 0x1) != 0) {
|
||||||
|
func_800CAAD0(a0, a1, a2);
|
||||||
|
sp36 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((*(u32*)(v1 + 340) & 0x2) != 0) {
|
||||||
|
func_800CAC0C(a0, a1, a2);
|
||||||
|
sp36 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sp36;
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
#include "controller.h"
|
||||||
|
#include "siint.h"
|
||||||
|
|
||||||
|
s32 osContStartQuery(OSMesgQueue* mq)
|
||||||
|
{
|
||||||
|
s32 ret;
|
||||||
|
|
||||||
|
__osSiGetAccess();
|
||||||
|
|
||||||
|
if (__osContLastCmd != 0) {
|
||||||
|
__osPackRequestData(0);
|
||||||
|
__osSiRawStartDma(1, &__osContPifRam);
|
||||||
|
osRecvMesg(mq, NULL, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = __osSiRawStartDma(0, &__osContPifRam);
|
||||||
|
|
||||||
|
__osContLastCmd = 0;
|
||||||
|
|
||||||
|
__osSiRelAccess();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void osContGetQuery(OSContStatus* data)
|
||||||
|
{
|
||||||
|
u8 pattern;
|
||||||
|
|
||||||
|
__osContGetInitData(&pattern, data);
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
#ifndef _CONTROLLER_H_
|
||||||
|
#define _CONTROLLER_H_
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u32 ramarray[15];
|
||||||
|
/* 60 */ u32 pifstatus;
|
||||||
|
} OSPifRam;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u8 dummy;
|
||||||
|
/* 1 */ u8 txsize;
|
||||||
|
/* 2 */ u8 rxsize;
|
||||||
|
/* 3 */ u8 cmd;
|
||||||
|
/* 4 */ u16 button;
|
||||||
|
/* 6 */ s8 stick_x;
|
||||||
|
/* 7 */ s8 stick_y;
|
||||||
|
} __OSContReadFormat;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u8 dummy;
|
||||||
|
/* 1 */ u8 txsize;
|
||||||
|
/* 2 */ u8 rxsize;
|
||||||
|
/* 3 */ u8 cmd;
|
||||||
|
/* 4 */ u8 typeh;
|
||||||
|
/* 5 */ u8 typel;
|
||||||
|
/* 6 */ u8 status;
|
||||||
|
/* 7 */ u8 dummy1;
|
||||||
|
} __OSContRequesFormat;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u8 dummy;
|
||||||
|
/* 1 */ u8 txsize;
|
||||||
|
/* 2 */ u8 rxsize;
|
||||||
|
/* 3 */ u8 cmd;
|
||||||
|
/* 4 */ u16 address;
|
||||||
|
/* 6 */ u8 data[32];
|
||||||
|
/* 38 */ u8 datacrc;
|
||||||
|
} __OSContRamReadFormat;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u16 company_code;
|
||||||
|
/* 2 */ u16 game_code;
|
||||||
|
/* 4 */ u8 start_page;
|
||||||
|
/* 5 */ u8 status;
|
||||||
|
/* 6 */ u16 data_sum;
|
||||||
|
/* 8 */ unsigned char ext_name[4];
|
||||||
|
/* 12 */ unsigned char game_name[16];
|
||||||
|
/* 28 */ s32 reserved;
|
||||||
|
} __OSDir;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0 */ u8 inode_page[256];
|
||||||
|
} __OSInode;
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,4 @@
|
||||||
|
#ifndef _SIINT_H_
|
||||||
|
#define _SIINT_H_
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,12 @@
|
||||||
|
#include <osint.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
s32 __osSiRawReadIo(u32 devAddr, u32* data) {
|
||||||
|
if (__osSiDeviceBusy() != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(u32*)(devAddr | 0xA0000000) = (u32)data;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include <osint.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
u32 __osSpGetStatus() {
|
||||||
|
return *(vu32*)0xA4040010;
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include <osint.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
void __osSpSetStatus(u32 data) {
|
||||||
|
*(vu32*)0xA4040010 = data;
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
#include <bstring.h>
|
||||||
|
#include <sptask.h>
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
OSTask* _VirtualToPhysicalTask(OSTask* intp)
|
||||||
|
{
|
||||||
|
OSTask* tp = &tmp_task;
|
||||||
|
_bcopy((void*)intp, (void*)tp, sizeof(OSTask));
|
||||||
|
if (tp->t.ucode) {
|
||||||
|
tp->t.ucode = (u64*)osVirtualToPhysical(tp->t.ucode);
|
||||||
|
}
|
||||||
|
if (tp->t.ucode_data) {
|
||||||
|
tp->t.ucode_data = (u64*)osVirtualToPhysical(tp->t.ucode_data);
|
||||||
|
}
|
||||||
|
if (tp->t.dram_stack) {
|
||||||
|
tp->t.dram_stack = (u64*)osVirtualToPhysical(tp->t.dram_stack);
|
||||||
|
}
|
||||||
|
if (tp->t.output_buff) {
|
||||||
|
tp->t.output_buff = (u64*)osVirtualToPhysical(tp->t.output_buff);
|
||||||
|
}
|
||||||
|
if (tp->t.output_buff_size) {
|
||||||
|
tp->t.output_buff_size = (u64*)osVirtualToPhysical(tp->t.output_buff_size);
|
||||||
|
}
|
||||||
|
if (tp->t.data_ptr) {
|
||||||
|
tp->t.data_ptr = (u64*)osVirtualToPhysical(tp->t.data_ptr);
|
||||||
|
}
|
||||||
|
if (tp->t.yield_data_ptr) {
|
||||||
|
tp->t.yield_data_ptr = (u64*)osVirtualToPhysical(tp->t.yield_data_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return &tmp_task;
|
||||||
|
}
|
||||||
|
|
||||||
|
void osSpTaskLoad(OSTask* intp)
|
||||||
|
{
|
||||||
|
OSTask* tp;
|
||||||
|
|
||||||
|
tp = _VirtualToPhysicalTask(intp);
|
||||||
|
|
||||||
|
if ((tp->t.flags & 0x1) != 0) {
|
||||||
|
tp->t.ucode_data = tp->t.yield_data_ptr;
|
||||||
|
tp->t.ucode_data_size = tp->t.yield_data_size;
|
||||||
|
|
||||||
|
intp->t.flags = intp->t.flags & 0xFFFFFFFE;
|
||||||
|
|
||||||
|
if ((tp->t.flags & 0x4) != 0) {
|
||||||
|
tp->t.ucode = *(u64**)(((u32)intp->t.yield_data_ptr + 3068) | 0xA0000000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
osWritebackDCache((void*)tp, sizeof(OSTask));
|
||||||
|
|
||||||
|
__osSpSetStatus(11008);
|
||||||
|
|
||||||
|
while (__osSpSetPc(0x04001000) == -1);
|
||||||
|
while (__osSpRawStartDma(1, 0x04000FC0, (void*)tp, sizeof(OSTask)) == -1);
|
||||||
|
while (__osSpDeviceBusy());
|
||||||
|
while (__osSpRawStartDma(1, 0x04001000, (void*)tp->t.ucode_boot, tp->t.ucode_boot_size) == -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void osSpTaskStartGo(OSTask* tp)
|
||||||
|
{
|
||||||
|
while (__osSpDeviceBusy());
|
||||||
|
|
||||||
|
__osSpSetStatus(293);
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include <osint.h>
|
||||||
|
#include <viint.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
__OSViContext* __osViGetCurrentContext(void) {
|
||||||
|
return __osViCurr;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
unsigned char* strchr(const unsigned char* s, int c)
|
||||||
|
{
|
||||||
|
const unsigned char ch = c;
|
||||||
|
|
||||||
|
while ( *s != ch) {
|
||||||
|
if (*s == '\0') {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (unsigned char*)s;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t strlen(const unsigned char* s)
|
||||||
|
{
|
||||||
|
const unsigned char* sc = s;
|
||||||
|
|
||||||
|
while (*sc != '\0') sc++;
|
||||||
|
|
||||||
|
return (size_t)(sc - s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* memcpy(void* s1, const void* s2, size_t n)
|
||||||
|
{
|
||||||
|
unsigned char* su1 = (unsigned char*)s1;
|
||||||
|
const unsigned char* su2 = (const unsigned char*)s2;
|
||||||
|
|
||||||
|
while (n > 0) {
|
||||||
|
*su1 = *su2;
|
||||||
|
su1++;
|
||||||
|
su2++;
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s1;
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
void osCreateThread(OSThread* t, OSId id, void(*entry)(void*), void* arg, void* sp, OSPri p) {
|
||||||
|
register u32 saveMask;
|
||||||
|
OSIntMask mask;
|
||||||
|
|
||||||
|
t->id = id;
|
||||||
|
t->priority = p;
|
||||||
|
t->next = NULL;
|
||||||
|
t->queue = NULL;
|
||||||
|
t->context.pc = (u32)entry;
|
||||||
|
t->context.a0 = (u64)arg;
|
||||||
|
t->context.sp = (u64)sp - 16;
|
||||||
|
t->context.ra = (u64)__osCleanupThread;
|
||||||
|
|
||||||
|
mask = 0x3FFF01;
|
||||||
|
t->context.sr = 0xFF03;
|
||||||
|
t->context.rcp = (mask & 0x3F0000) >> 16;
|
||||||
|
t->context.fpcsr = 0x01000800;
|
||||||
|
t->fp = 0;
|
||||||
|
t->state = 1;
|
||||||
|
t->flags = 0;
|
||||||
|
|
||||||
|
saveMask = __osDisableInt();
|
||||||
|
t->tlnext = __osActiveQueue;
|
||||||
|
__osActiveQueue = t;
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
void osDestroyThread(OSThread* t)
|
||||||
|
{
|
||||||
|
register u32 saveMask;
|
||||||
|
register OSThread* pred;
|
||||||
|
register OSThread* succ;
|
||||||
|
|
||||||
|
saveMask = __osDisableInt();
|
||||||
|
|
||||||
|
if (t == NULL) {
|
||||||
|
t = __osRunningThread;
|
||||||
|
} else if (t->state != 1) {
|
||||||
|
__osDequeueThread(t->queue, t);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (__osActiveQueue == t) {
|
||||||
|
__osActiveQueue = __osActiveQueue->tlnext;
|
||||||
|
} else {
|
||||||
|
pred = __osActiveQueue;
|
||||||
|
while (pred->priority != -1) {
|
||||||
|
succ = pred->tlnext;
|
||||||
|
if (succ == t) {
|
||||||
|
pred->tlnext = t->tlnext;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pred = succ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (t == __osRunningThread) {
|
||||||
|
__osDispatchThread();
|
||||||
|
}
|
||||||
|
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
OSThread* __osGetCurrFaultedThread(void) {
|
||||||
|
return __osFaultedThread;
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
OSId osGetThreadId(OSThread* t) {
|
||||||
|
if (t == NULL) {
|
||||||
|
t = __osRunningThread;
|
||||||
|
}
|
||||||
|
return t->id;
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag) {
|
||||||
|
register u32 saveMask;
|
||||||
|
|
||||||
|
saveMask = __osDisableInt();
|
||||||
|
|
||||||
|
while (mq->validCount >= mq->msgCount) {
|
||||||
|
if (flag == 1) {
|
||||||
|
__osRunningThread->state = 8;
|
||||||
|
__osEnqueueAndYield(&mq->fullqueue);
|
||||||
|
} else {
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mq->first = (mq->first + mq->msgCount - 1) % mq->msgCount;
|
||||||
|
|
||||||
|
mq->msg[mq->first] = msg;
|
||||||
|
mq->validCount++;
|
||||||
|
|
||||||
|
if (mq->mtqueue->next != NULL) {
|
||||||
|
osStartThread(__osPopThread(&mq->mtqueue));
|
||||||
|
}
|
||||||
|
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags) {
|
||||||
|
register u32 saveMask;
|
||||||
|
|
||||||
|
saveMask = __osDisableInt();
|
||||||
|
|
||||||
|
while (mq->validCount == 0)
|
||||||
|
{
|
||||||
|
if (flags == 0)
|
||||||
|
{
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
__osRunningThread->state = 8;
|
||||||
|
__osEnqueueAndYield(&mq->mtqueue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg != NULL) {
|
||||||
|
*msg = mq->msg[mq->first];
|
||||||
|
}
|
||||||
|
|
||||||
|
mq->first = (mq->first + 1) % mq->msgCount;
|
||||||
|
mq->validCount--;
|
||||||
|
|
||||||
|
if (mq->fullqueue->next != NULL) {
|
||||||
|
osStartThread(__osPopThread(&mq->fullqueue));
|
||||||
|
}
|
||||||
|
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
s32 osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flags) {
|
||||||
|
register u32 saveMask;
|
||||||
|
register s32 last;
|
||||||
|
|
||||||
|
saveMask = __osDisableInt();
|
||||||
|
|
||||||
|
while (mq->validCount >= mq->msgCount) {
|
||||||
|
if (flags == 1) {
|
||||||
|
__osRunningThread->state = 8;
|
||||||
|
__osEnqueueAndYield(&mq->fullqueue);
|
||||||
|
} else {
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
last = (mq->first + mq->validCount) % mq->msgCount;
|
||||||
|
|
||||||
|
mq->msg[last] = msg;
|
||||||
|
mq->validCount++;
|
||||||
|
|
||||||
|
if (mq->mtqueue->next != NULL) {
|
||||||
|
osStartThread(__osPopThread(&mq->mtqueue));
|
||||||
|
}
|
||||||
|
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m) {
|
||||||
|
register u32 saveMask;
|
||||||
|
__OSEventState* es;
|
||||||
|
|
||||||
|
saveMask = __osDisableInt();
|
||||||
|
|
||||||
|
es = &__osEventStateTab[e];
|
||||||
|
|
||||||
|
es->messageQueue = mq;
|
||||||
|
es->message = m;
|
||||||
|
|
||||||
|
if (e == 14) {
|
||||||
|
if (__osShutdown != 0 && D_80097F10 == 0) {
|
||||||
|
osSendMesg(mq, m, 0);
|
||||||
|
}
|
||||||
|
D_80097F10 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
void osStartThread(OSThread* t) {
|
||||||
|
register u32 saveMask;
|
||||||
|
|
||||||
|
saveMask = __osDisableInt();
|
||||||
|
|
||||||
|
switch (t->state) {
|
||||||
|
case 8:
|
||||||
|
t->state = 2;
|
||||||
|
__osEnqueueThread(&__osRunQueue, t);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if ((t->queue == NULL) || (t->queue == &__osRunQueue)) {
|
||||||
|
t->state = 2;
|
||||||
|
__osEnqueueThread(&__osRunQueue, t);
|
||||||
|
} else {
|
||||||
|
t->state = 8;
|
||||||
|
__osEnqueueThread(t->queue, t);
|
||||||
|
__osEnqueueThread(&__osRunQueue, __osPopThread(t->queue));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (__osRunningThread == NULL) {
|
||||||
|
__osDispatchThread();
|
||||||
|
} else {
|
||||||
|
if (__osRunningThread->priority < __osRunQueue->priority) {
|
||||||
|
__osRunningThread->state = 2;
|
||||||
|
__osEnqueueAndYield(&__osRunQueue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
void osStopThread(OSThread* t) {
|
||||||
|
register u32 saveMask;
|
||||||
|
register u16 state;
|
||||||
|
|
||||||
|
saveMask = __osDisableInt();
|
||||||
|
|
||||||
|
if (t == NULL) {
|
||||||
|
state = 4;
|
||||||
|
} else {
|
||||||
|
state = t->state;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case 4:
|
||||||
|
__osRunningThread->state = 1;
|
||||||
|
__osEnqueueAndYield(NULL);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
case 8:
|
||||||
|
t->state = 1;
|
||||||
|
__osDequeueThread(t->queue, t);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
__osRestoreInt(saveMask);
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
#include <rmon.h>
|
||||||
|
#include <osint.h>
|
||||||
|
#include <viint.h>
|
||||||
|
|
||||||
|
int osStopTimer(OSTimer* t)
|
||||||
|
{
|
||||||
|
register u32 savedMask;
|
||||||
|
OSTimer* timep;
|
||||||
|
|
||||||
|
if (t->next == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
savedMask = __osDisableInt();
|
||||||
|
|
||||||
|
timep = t->next;
|
||||||
|
|
||||||
|
if (timep != __osTimerList) {
|
||||||
|
timep->value += t->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
t->prev->next = t->next;
|
||||||
|
t->next->prev = t->prev;
|
||||||
|
t->next = NULL;
|
||||||
|
t->prev = NULL;
|
||||||
|
|
||||||
|
if (__osTimerList->next == __osTimerList) {
|
||||||
|
__osSetCompare(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
__osRestoreInt(savedMask);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
void __osDequeueThread(OSThread** queue, OSThread* t)
|
||||||
|
{
|
||||||
|
register OSThread* pred;
|
||||||
|
register OSThread* succ;
|
||||||
|
|
||||||
|
pred = (OSThread*)queue; //! This seems questionable, but the function matches...
|
||||||
|
succ = pred->next;
|
||||||
|
while (succ != NULL) {
|
||||||
|
if (succ == t) {
|
||||||
|
pred->next = t->next;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pred = succ;
|
||||||
|
succ = pred->next;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
#include <PR/ultratypes.h>
|
||||||
|
#include <osint.h>
|
||||||
|
|
||||||
|
u32 osVirtualToPhysical(void* virtualAddress) {
|
||||||
|
if (((u32)virtualAddress >= 0x80000000) && ((u32)virtualAddress < 0xA0000000)) {
|
||||||
|
return (u32)virtualAddress & 0x1FFFFFFF;
|
||||||
|
} else if (((u32)virtualAddress >= 0xA0000000) && ((u32)virtualAddress < 0xC0000000)) {
|
||||||
|
return (u32)virtualAddress & 0x1FFFFFFF;
|
||||||
|
} else {
|
||||||
|
return __osProbeTLB(virtualAddress);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,164 @@
|
||||||
|
#include <ultra64.h>
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
typedef struct s80862B70_s {
|
||||||
|
/* 0 */ u32 unk0;
|
||||||
|
/* 4 */ u32 unk4;
|
||||||
|
/* 8 */ f32 unk8;
|
||||||
|
/* 12 */ f32 unk12;
|
||||||
|
/* 16 */ f32 unk16;
|
||||||
|
/* 20 */ f32 unk20;
|
||||||
|
/* 24 */ f32 unk24;
|
||||||
|
/* 28 */ f32 unk28;
|
||||||
|
/* 32 */ f32 unk32;
|
||||||
|
/* 36 */ f32 unk36;
|
||||||
|
/* 40 */ f32 unk40;
|
||||||
|
/* 44 */ f32 unk44;
|
||||||
|
/* 48 */ u16 unk48;
|
||||||
|
/* 50 */ u16 unk50;
|
||||||
|
/* 52 */ u16 unk52;
|
||||||
|
/* 54 */ u16 unk54;
|
||||||
|
/* 56 */ u16 unk56;
|
||||||
|
/* 58 */ u16 unk58;
|
||||||
|
} s80862B70;
|
||||||
|
|
||||||
|
static const f32 D_808637D0 = 1.0;
|
||||||
|
|
||||||
|
void func_80862B70(void* a0) {
|
||||||
|
u32 i;
|
||||||
|
s80862B70* s;
|
||||||
|
f32 f = D_808637D0;
|
||||||
|
for (i = 0; i < 20; ++i) {
|
||||||
|
s = &((s80862B70*)a0)[i];
|
||||||
|
s->unk0 = 0;
|
||||||
|
s->unk4 = 0;
|
||||||
|
s->unk8 = 0.0;
|
||||||
|
s->unk12 = 0.0;
|
||||||
|
s->unk16 = 0.0;
|
||||||
|
s->unk20 = 0.0;
|
||||||
|
s->unk24 = 0.0;
|
||||||
|
s->unk28 = 0.0;
|
||||||
|
s->unk32 = 0.0;
|
||||||
|
s->unk36 = 0.0;
|
||||||
|
s->unk40 = 0.0;
|
||||||
|
s->unk44 = f;
|
||||||
|
s->unk48 = 0;
|
||||||
|
s->unk50 = 0;
|
||||||
|
s->unk52 = 0;
|
||||||
|
s->unk54 = 0;
|
||||||
|
s->unk56 = 0;
|
||||||
|
s->unk58 = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80862CBC(UNK_ARGS) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80862EDC(UNK_ARGS) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_80863048(UNK_ARGS) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct s80863188_t {
|
||||||
|
u8 pad0[28];
|
||||||
|
/* 28 */ s16 unk28;
|
||||||
|
u8 pad1[6];
|
||||||
|
/* 36 */ UNK_TYPE unk36;
|
||||||
|
/* 40 */ f32 unk40;
|
||||||
|
/* 44 */ UNK_TYPE unk44;
|
||||||
|
/* 48 */ UNK_TYPE unk48;
|
||||||
|
/* 52 */ u16 unk52;
|
||||||
|
u8 pad2[74];
|
||||||
|
/* 128 */ UNK_TYPE unk128;
|
||||||
|
u8 pad3[4];
|
||||||
|
/* 136 */ f32 unk136;
|
||||||
|
u8 pad8[48];
|
||||||
|
/* 188 */ UNK_TYPE unk188;
|
||||||
|
u8 pad9[132];
|
||||||
|
/* 324 */ UNK_TYPE unk324;
|
||||||
|
u8 pad4[12];
|
||||||
|
/* 340 */ f32 unk340;
|
||||||
|
u8 pad5[28];
|
||||||
|
/* 372 */ UNK_TYPE unk372;
|
||||||
|
/* 376 */ UNK_TYPE unk376;
|
||||||
|
u8 pad6[68];
|
||||||
|
/* 448 */ UNK_TYPE unk448;
|
||||||
|
u8 pad10[69];
|
||||||
|
/* 521 */ u8 unk521;
|
||||||
|
/* 522 */ u8 unk522;
|
||||||
|
u8 pad7[1];
|
||||||
|
/* 524 */ UNK_TYPE unk524;
|
||||||
|
} s80863188;
|
||||||
|
|
||||||
|
// En_Test Init
|
||||||
|
UNK_RET func_80863188(UNK_TYPE a0, UNK_TYPE a1) {
|
||||||
|
s80863188* actor = (s80863188*)a0;
|
||||||
|
UNK_TYPE sp56;
|
||||||
|
UNK_TYPE sp52;
|
||||||
|
UNK_TYPE* sp48;
|
||||||
|
UNK_TYPE sp40;
|
||||||
|
UNK_TYPE sp20;
|
||||||
|
UNK_TYPE* sp16;
|
||||||
|
f32 f0;
|
||||||
|
|
||||||
|
actor->unk521 = 0;
|
||||||
|
actor->unk372 = 0;
|
||||||
|
if (actor->unk28 > 0) {
|
||||||
|
func_800B67E0(a0, ((f32)actor->unk28)/D_808637E8);
|
||||||
|
actor->unk522 = 0;
|
||||||
|
} else {
|
||||||
|
actor->unk40 = actor->unk40 + 10.0f;
|
||||||
|
actor->unk128 = 0;
|
||||||
|
sp40 = a1 + 2096;
|
||||||
|
func_800C40B4(sp40, &actor->unk128, &sp52, &actor->unk36);
|
||||||
|
|
||||||
|
f0 = actor->unk136;
|
||||||
|
if ((actor->unk128 == 0) || (f0 != -32000)) {
|
||||||
|
func_800B670C(a0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
actor->unk40 = f0;
|
||||||
|
|
||||||
|
sp16 = &sp56;
|
||||||
|
sp48 = &actor->unk188;
|
||||||
|
func_800C0094(actor->unk128, actor->unk36, f0, actor->unk44);
|
||||||
|
func_8018219C(&sp56, sp48, 1, sp48);
|
||||||
|
|
||||||
|
actor->unk52 = sp48[1];
|
||||||
|
actor->unk522 = func_800C9BB8(sp40, actor->unk128, sp52, sp48);
|
||||||
|
}
|
||||||
|
|
||||||
|
sp16 = &actor->unk448;
|
||||||
|
sp48 = &actor->unk324;
|
||||||
|
sp20 = 0;
|
||||||
|
func_80183430(&actor->unk324, D_0406EB70, D_0406BB0C, &actor->unk376);
|
||||||
|
|
||||||
|
func_801834A8(sp48, D_0406BB0C);
|
||||||
|
|
||||||
|
actor->unk340 = 9.0;
|
||||||
|
func_80862B70((void*)actor->unk524);
|
||||||
|
}
|
||||||
|
|
||||||
|
// En_Test Dest
|
||||||
|
UNK_RET func_80863310(UNK_TYPE a0, UNK_TYPE a1) {
|
||||||
|
func_8018349C(a0+324, a0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// En_Test Main
|
||||||
|
UNK_RET func_8086333C(UNK_ARGS) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
UNK_RET func_808634B8(UNK_ARGS) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// En_Test Draw
|
||||||
|
UNK_RET func_808636A8(UNK_ARGS) {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
unsigned char* strchr(const unsigned char* s, int c)
|
||||||
|
{
|
||||||
|
const unsigned char ch = c;
|
||||||
|
|
||||||
|
while ( *s != ch) {
|
||||||
|
if (*s == '\0') {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (unsigned char*)s;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t strlen(const unsigned char* s)
|
||||||
|
{
|
||||||
|
const unsigned char* sc = s;
|
||||||
|
|
||||||
|
while (*sc != '\0') sc++;
|
||||||
|
|
||||||
|
return (size_t)(sc - s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* memcpy(void* s1, const void* s2, size_t n)
|
||||||
|
{
|
||||||
|
unsigned char* su1 = (unsigned char*)s1;
|
||||||
|
const unsigned char* su2 = (const unsigned char*)s2;
|
||||||
|
|
||||||
|
while (n > 0) {
|
||||||
|
*su1 = *su2;
|
||||||
|
su1++;
|
||||||
|
su2++;
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s1;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,127 @@
|
||||||
|
known_vars = {
|
||||||
|
0x00B3C000:("","UNK_TYPE",False), # this seems low
|
||||||
|
0x00C7A4E0:("","UNK_TYPE",False), # this seems low
|
||||||
|
0x80000300:("osTvType","UNK_TYPE",False), # this seems low, but maybe it's set on boot?
|
||||||
|
0x8000030C:("","UNK_TYPE",False), # this seems low
|
||||||
|
0x80000318:("","UNK_TYPE",False), # this seems low
|
||||||
|
0x8000031C:("","UNK_TYPE",False), # this seems low
|
||||||
|
0x80000500:("","UNK_TYPE",False), # this seems low
|
||||||
|
0x80025D00:("","UNK_TYPE",False),
|
||||||
|
0x80096B20:("","u8",False),
|
||||||
|
0x80096B24:("","u8*",False),
|
||||||
|
0x80096B28:("","u32",False),
|
||||||
|
0x80096B2C:("","u32",False),
|
||||||
|
0x80096B30:("","f32",False),
|
||||||
|
0x80096B34:("","f32",False),
|
||||||
|
0x80096B40:("","struct s80092920*",False),
|
||||||
|
0x80096B50:("","UNK_PTR",False),
|
||||||
|
0x80096C40:("g_s80085320_ListHead","struct s80085320*",False), # TODO rename?
|
||||||
|
0x80096C44:("g_s80085320_ListTail","struct s80085320*",False), # TODO rename?
|
||||||
|
0x80097590:("","UNK_TYPE",False),
|
||||||
|
0x80097E10:("__osThreadTail","OSThread*",False),
|
||||||
|
0x80097E18:("__osRunQueue","OSThread*",False),
|
||||||
|
0x80097E1C:("__osActiveQueue","OSThread*",False),
|
||||||
|
0x80097E20:("__osRunningThread","OSThread*",False),
|
||||||
|
0x80097E24:("__osFaultedThread","OSThread*",False),
|
||||||
|
0x80097E30:("__osSiAccessQueueEnabled","UNK_TYPE",False),
|
||||||
|
0x80097E50:("osClockRate","u64",False),
|
||||||
|
# 0x80097E54:("osClockRate","u64",False),
|
||||||
|
0x80097E58:("","UNK_TYPE",False),
|
||||||
|
0x80097E5C:("__osShutdown","UNK_TYPE",False),
|
||||||
|
0x80097E60:("__OSGlobalIntMask","UNK_TYPE",False),
|
||||||
|
0x80097E70:("__osPiDevMgr","UNK_TYPE",False),
|
||||||
|
0x80097E8C:("","struct s80092920*",False),
|
||||||
|
0x80097EA0:("__osPiAccessQueueEnabled","UNK_TYPE",False),
|
||||||
|
0x80097F10:("","UNK_TYPE",False),
|
||||||
|
0x80097F70:("__osTimerList","OSTimer*",False),
|
||||||
|
0x80097FC0:("","u32*",False),
|
||||||
|
0x80098010:("","u32*",False),
|
||||||
|
0x800980C0:("__osViCurr","__OSViContext*",False),
|
||||||
|
0x800980C4:("__osViNext","UNK_TYPE",False), # some struct pointer used in func_80095900
|
||||||
|
0x800980D0:("","UNK_PTR",False),
|
||||||
|
0x800980E0:("","u32*",False),
|
||||||
|
0x80098130:("","UNK_TYPE",False), # ldigs in https:github.com/vocho/openqnx/blob/cc95df3543a1c481d4f8ad387e29f0d1ff0c87fe/trunk/lib/c/stdio/xlitob.c
|
||||||
|
0x80098144:("","UNK_TYPE",False), # udigs in https:github.com/vocho/openqnx/blob/cc95df3543a1c481d4f8ad387e29f0d1ff0c87fe/trunk/lib/c/stdio/xlitob.c
|
||||||
|
0x80098160:("__osViDevMgr","UNK_TYPE",False),
|
||||||
|
0x8009817C:("","UNK_TYPE",False),
|
||||||
|
0x80098190:("","UNK_TYPE",False),
|
||||||
|
0x80098198:("","UNK_TYPE",False),
|
||||||
|
0x800981A0:("","UNK_TYPE",False),
|
||||||
|
0x800981A8:("","UNK_TYPE",False),
|
||||||
|
0x800981B0:("","float",False),
|
||||||
|
0x80098280:("","UNK_TYPE",False),
|
||||||
|
0x80098290:("","UNK_TYPE",False),
|
||||||
|
0x800982A4:("","UNK_TYPE",False),
|
||||||
|
0x80099270:("__osHwIntTable","UNK_TYPE",False),
|
||||||
|
0x80099290:("leoDiskStack","UNK_TYPE",False),
|
||||||
|
0x800994D0:("","UNK_TYPE",False),
|
||||||
|
0x800994DC:("","UNK_TYPE",False),
|
||||||
|
0x80099500:("","struct s80085320",False),
|
||||||
|
0x80099520:("","OSThread",False),
|
||||||
|
0x800996D0:("","UNK_TYPE",False),
|
||||||
|
0x80099AD0:("","struct s80085320",False),
|
||||||
|
0x80099AF0:("","UNK_TYPE",False),
|
||||||
|
0x80099EF0:("","UNK_TYPE",False),
|
||||||
|
0x8009A170:("","UNK_TYPE",False),
|
||||||
|
0x8009A670:("","struct s80085320",False),
|
||||||
|
0x8009A690:("","UNK_TYPE",False),
|
||||||
|
0x8009A840:("","UNK_TYPE",False),
|
||||||
|
0x8009B140:("","struct s80085320",False),
|
||||||
|
0x8009B160:("","UNK_TYPE",False),
|
||||||
|
0x8009B228:("","UNK_TYPE",False),
|
||||||
|
0x8009B240:("","u32*",False),
|
||||||
|
0x8009B290:("","u8",False),
|
||||||
|
0x8009BE30:("","UNK_TYPE",False),
|
||||||
|
0x8009BE34:("","UNK_TYPE",False),
|
||||||
|
0x8009BE38:("","UNK_TYPE",False),
|
||||||
|
0x8009CD70:("tmp_task","OSTask",False), # static OSTask tmp_task in ../io/sptask.c
|
||||||
|
0x8009CEB8:("__osSiAccessQueue","UNK_TYPE",False),
|
||||||
|
0x8009CED0:("__osContPifRam","UNK_TYPE",False),
|
||||||
|
0x8009CF10:("__osContLastCmd","u8",False),
|
||||||
|
0x8009CF11:("__osMaxControllers","UNK_TYPE",False),
|
||||||
|
0x8009CF70:("","UNK_TYPE",False),
|
||||||
|
0x8009CF80:("__osThreadSave","UNK_TYPE",False),
|
||||||
|
0x8009D134:("","u8",False),
|
||||||
|
0x8009D135:("","u8",False),
|
||||||
|
0x8009D136:("","u8",False),
|
||||||
|
0x8009D137:("","u8",False),
|
||||||
|
0x8009D138:("","u8",False),
|
||||||
|
0x8009D1AC:("","u8",False),
|
||||||
|
0x8009D1AD:("","u8",False),
|
||||||
|
0x8009D1AE:("","u8",False),
|
||||||
|
0x8009D1AF:("","u8",False),
|
||||||
|
0x8009D1B0:("","u8",False),
|
||||||
|
0x8009E3F8:("__osPiAccessQueue","UNK_TYPE",False),
|
||||||
|
0x8009E510:("__osEventStateTab","__OSEventState",True), # TODO better array representation TODO size
|
||||||
|
0x8009E5B0:("__osCurrentTime","UNK_TYPE",False),
|
||||||
|
# 0x8009E5B4:("__osCurrentTime","UNK_TYPE",False),
|
||||||
|
0x8009E5B8:("__osBaseCounter","UNK_TYPE",False),
|
||||||
|
0x8009E5BC:("__osViIntrCount","UNK_TYPE",False),
|
||||||
|
0x8009E5C0:("__osTimerCounter","UNK_TYPE",False),
|
||||||
|
0x8009E610:("","struct s80092920",False),
|
||||||
|
0x8009E624:("","UNK_TYPE",False),
|
||||||
|
0x801ADE80:("","UNK_TYPE",False),
|
||||||
|
0x801ADEAC:("","UNK_TYPE",False),
|
||||||
|
0x801ADEB0:("D_801ADEB0","int",True), # TODO better array representation
|
||||||
|
0x801AEFD0:("","s800BF9A0_s*",False),
|
||||||
|
0x801B4610:("","UNK_TYPE",False),
|
||||||
|
0x801DCBB0:("","UNK_TYPE",False),
|
||||||
|
0x801DCBC4:("","UNK_TYPE",False),
|
||||||
|
0x801DCBE4:("","UNK_TYPE",False),
|
||||||
|
0x801DCBFC:("","UNK_TYPE",False),
|
||||||
|
0x801E3FA0:("","UNK_TYPE",False),
|
||||||
|
0x801ED930:("","UNK_TYPE",False),
|
||||||
|
0x801ED940:("","UNK_TYPE",False),
|
||||||
|
0x80208EA0:("","UNK_TYPE",False),
|
||||||
|
|
||||||
|
# En_Test
|
||||||
|
0x808637D0:("","f32",False)
|
||||||
|
}
|
||||||
|
|
||||||
|
# these are extra variables needed for one reason or another, they should probably be deleted if possible
|
||||||
|
extra_vars = (
|
||||||
|
("D_800980D0_","UNK_PTR"), # needed to match?
|
||||||
|
("D_80099AD0_","UNK_TYPE"), # needed to match?
|
||||||
|
("D_8009A670_","UNK_TYPE"), # needed to match?
|
||||||
|
("D_8009B140_","UNK_TYPE"), # needed to match?
|
||||||
|
)
|
Loading…
Reference in New Issue