diff options
author | Demki <mordbz@gmail.com> | 2020-05-11 03:03:25 +0300 |
---|---|---|
committer | Demki <mordbz@gmail.com> | 2020-05-11 03:06:27 +0300 |
commit | bc005e7d2537150516119f7074bb767c054de722 (patch) | |
tree | 83e127100c7af68c6e92fcd4d0419a8a5c73b8bb | |
parent | 8f09b9e7138325b4ec2255a1c0a58f385e586f1b (diff) | |
parent | 49e14283e13c146018f2a2785dfc77e0e1ff5368 (diff) |
Merge from upstream
64 files changed, 6423 insertions, 1550 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index d7525783..f2537aad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ project(PokeDiamond) enable_language(ASM) -file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c") +file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c" "*.cpp") add_executable(PokeDiamond ${SOURCES}) target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include) diff --git a/arm9/Makefile b/arm9/Makefile index bc8c8491..f792c5bf 100644 --- a/arm9/Makefile +++ b/arm9/Makefile @@ -23,9 +23,9 @@ endif ifeq ($(OS),Windows_NT) EXE := .exe -WINE := +WINE := else -EXE := +EXE := WINE := wine endif @@ -49,16 +49,109 @@ LD_TEMPLATE := ARM9-TS.lcf.template SRC_DIRS := src lib lib/src $(wildcard modules/*/src) ASM_DIRS := asm data files $(wildcard modules/*/asm) -C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) -S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s)) +C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) +CXX_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.cpp)) +S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s)) + +C_OBJS = $(C_FILES:%.c=$(BUILD_DIR)/%.o) +CXX_OBJS = $(CXX_FILES:%.cpp=$(BUILD_DIR)/%.o) +S_OBJS = $(S_FILES:%.s=$(BUILD_DIR)/%.o) # Object files -O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \ - $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \ +O_FILES := $(C_OBJS) $(CXX_OBJS) $(S_OBJS) # Overlay modules # FIXME: lcf doesn't like this # BIN_FILES := $(wildcard files/*.__AT_*) +OVERLAYS := \ + MODULE_00 \ + MODULE_01 \ + MODULE_02 \ + MODULE_03 \ + MODULE_04 \ + MODULE_05 \ + MODULE_06 \ + MODULE_07 \ + MODULE_08 \ + MODULE_09 \ + MODULE_10 \ + MODULE_11 \ + MODULE_12 \ + MODULE_13 \ + MODULE_14 \ + MODULE_15 \ + MODULE_16 \ + MODULE_17 \ + MODULE_18 \ + MODULE_19 \ + MODULE_20 \ + MODULE_21 \ + MODULE_22 \ + MODULE_23 \ + MODULE_24 \ + MODULE_25 \ + MODULE_26 \ + MODULE_27 \ + MODULE_28 \ + MODULE_29 \ + MODULE_30 \ + MODULE_31 \ + MODULE_32 \ + MODULE_33 \ + MODULE_34 \ + MODULE_35 \ + MODULE_36 \ + MODULE_37 \ + MODULE_38 \ + MODULE_39 \ + MODULE_40 \ + MODULE_41 \ + MODULE_42 \ + MODULE_43 \ + MODULE_44 \ + MODULE_45 \ + MODULE_46 \ + MODULE_47 \ + MODULE_48 \ + MODULE_49 \ + MODULE_50 \ + MODULE_51 \ + MODULE_52 \ + MODULE_53 \ + MODULE_54 \ + MODULE_55 \ + MODULE_56 \ + MODULE_57 \ + MODULE_58 \ + MODULE_59 \ + MODULE_60 \ + MODULE_61 \ + MODULE_62 \ + MODULE_63 \ + MODULE_64 \ + MODULE_65 \ + MODULE_66 \ + MODULE_67 \ + MODULE_68 \ + MODULE_69 \ + MODULE_70 \ + MODULE_71 \ + MODULE_72 \ + MODULE_73 \ + MODULE_74 \ + MODULE_75 \ + MODULE_76 \ + MODULE_77 \ + MODULE_78 \ + MODULE_79 \ + MODULE_80 \ + MODULE_81 \ + MODULE_82 \ + MODULE_83 \ + MODULE_84 \ + MODULE_85 \ + MODULE_86 \ + .SECONDARY: .DELETE_ON_ERROR: .SECONDEXPANSION: @@ -79,10 +172,10 @@ MWCCARM = $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwccarm.exe MWLDARM = $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwldarm.exe MWASMARM = $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwasmarm.exe MAKELSF := $(WINE) $(TOOLS_DIR)/bin/makelcf.exe -MAKELSF_FLAGS := -DCONST_34=0x34 -DCONST_3F=0x3F AS = $(WINE) $(MWASMARM) CC = $(WINE) $(MWCCARM) +CXX = $(WINE) $(MWCCARM) CPP := cpp -P LD = $(WINE) $(MWLDARM) AR := $(CROSS)ar @@ -92,6 +185,7 @@ OBJCOPY := $(CROSS)objcopy # ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o ASFLAGS = -proc arm5te -i .. CFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -ir ../include -ir ../include-mw -ir lib/include -interworking -DFS_IMPLEMENT -enum int +CXXFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -ir ../include -ir ../include-mw -ir lib/include -interworking -DFS_IMPLEMENT -enum int LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start ####################### Other Tools ######################### @@ -157,15 +251,18 @@ build/src/FUN_020910A4.o: MWCCVERSION = 1.2/sp2p3 ####################### Everything Else ###################### ifeq (,$(NODEP)) -$(BUILD_DIR)/%.o: dep = $(shell $(SCANINC) -I ../include -I ../include-mw -I lib/include $*.[cs]) +$(BUILD_DIR)/%.o: dep = $(shell $(SCANINC) -I ../include -I ../include-mw -I lib/include $(filter $*.c,$(C_FILES)) $(filter $*.cpp,$(CXX_FILES)) $(filter $*.s,$(S_FILES))) else $(BUILD_DIR)/%.o: dep := endif -$(BUILD_DIR)/%.o: %.c $$(dep) +$(C_OBJS): $(BUILD_DIR)/%.o: %.c $$(dep) $(CC) -c $(CFLAGS) -o $@ $< -$(BUILD_DIR)/%.o: %.s $$(dep) +$(CXX_OBJS): $(BUILD_DIR)/%.o: %.cpp $$(dep) + $(CXX) -c $(CXXFLAGS) -o $@ $< + +$(S_OBJS): $(BUILD_DIR)/%.o: %.s $$(dep) $(AS) $(ASFLAGS) -o $@ $< $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) $(LD_TEMPLATE) undefined_syms.txt macros.lcf.inc @@ -174,7 +271,7 @@ $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) $(LD_TEMPLATE) undefined_syms.txt macros $(ROM): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(BIN_FILES) $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) $(BIN_FILES) - + $(OBJCOPY) --update-section arm9=$@ -j arm9 $(foreach ov,$(OVERLAYS),--update-section $(ov)=$(BUILD_DIR)/$(ov).sbin -j $(ov)) $(ELF) 2>/dev/null # Make sure build directory exists before compiling anything DUMMY != mkdir -p $(ALL_DIRS) diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 68347ea4..9af9503f 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -120,7 +120,6 @@ SECTIONS { crt0.o (.rodata) * (.version) main.o (.text) - FUN_02000DF4.o (.text) unk_02000E0C.o (.text) string_util.o (.text) unk_020023C0.o (.text) @@ -211,7 +210,9 @@ SECTIONS { FS_file.o (.text) FS_rom.o (.text) FS_overlay.o (.text) - libdgt.o (.text) + DGT_hash1.o (.text) + DGT_hash2.o (.text) + DGT_sha1s_arm4cw.o (.text) libcp.o (.text) libspi.o (.text) libpm.o (.text) @@ -407,112 +408,184 @@ SECTIONS { .MODULE.00 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_00.START = .; module_00_dummy.o (.text) + module_00_dummy.o (.rodata) + module_00_dummy.o (.init) + SDK_OVERLAY.MODULE_00.SINIT_START = .; + module_00_dummy.o (.ctor) + module_00_dummy.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_00.SINIT_END = .; + . = ALIGN(32); module_00_dummy.o (.sdata) module_00_dummy.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_00.END = .; SDK_OVERLAY.MODULE_00.SIZE = SDK_OVERLAY.MODULE_00.END - SDK_OVERLAY.MODULE_00.START; } > MODULE_00 .MODULE.00.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_00.BSS_START = .; module_00_dummy.o (.sbss) module_00_dummy.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_00.BSS_END = .; SDK_OVERLAY.MODULE_00.BSS_SIZE = SDK_OVERLAY.MODULE_00.BSS_END - SDK_OVERLAY.MODULE_00.BSS_START; } >> MODULE_00 .MODULE.01 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_01.START = .; module_01.o (.text) + module_01.o (.rodata) + module_01.o (.init) + SDK_OVERLAY.MODULE_01.SINIT_START = .; + module_01.o (.ctor) + module_01.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_01.SINIT_END = .; + . = ALIGN(32); module_01.o (.sdata) module_01.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_01.END = .; SDK_OVERLAY.MODULE_01.SIZE = SDK_OVERLAY.MODULE_01.END - SDK_OVERLAY.MODULE_01.START; } > MODULE_01 .MODULE.01.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_01.BSS_START = .; module_01.o (.sbss) module_01.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_01.BSS_END = .; SDK_OVERLAY.MODULE_01.BSS_SIZE = SDK_OVERLAY.MODULE_01.BSS_END - SDK_OVERLAY.MODULE_01.BSS_START; } >> MODULE_01 .MODULE.02 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_02.START = .; module_02_dummy.o (.text) + module_02_dummy.o (.rodata) + SDK_OVERLAY.MODULE_02.SINIT_START = .; + module_02_dummy.o (.ctor) + module_02_dummy.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_02.SINIT_END = .; + . = ALIGN(32); module_02_dummy.o (.sdata) module_02_dummy.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_02.END = .; SDK_OVERLAY.MODULE_02.SIZE = SDK_OVERLAY.MODULE_02.END - SDK_OVERLAY.MODULE_02.START; } > MODULE_02 .MODULE.02.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_02.BSS_START = .; module_02_dummy.o (.sbss) module_02_dummy.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_02.BSS_END = .; SDK_OVERLAY.MODULE_02.BSS_SIZE = SDK_OVERLAY.MODULE_02.BSS_END - SDK_OVERLAY.MODULE_02.BSS_START; } >> MODULE_02 .MODULE.03 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_03.START = .; module_03_dummy.o (.text) + module_03_dummy.o (.rodata) + module_03_dummy.o (.init) + SDK_OVERLAY.MODULE_03.SINIT_START = .; + module_03_dummy.o (.ctor) + module_03_dummy.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_03.SINIT_END = .; + . = ALIGN(32); module_03_dummy.o (.sdata) module_03_dummy.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_03.END = .; SDK_OVERLAY.MODULE_03.SIZE = SDK_OVERLAY.MODULE_03.END - SDK_OVERLAY.MODULE_03.START; } > MODULE_03 .MODULE.03.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_03.BSS_START = .; module_03_dummy.o (.sbss) module_03_dummy.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_03.BSS_END = .; SDK_OVERLAY.MODULE_03.BSS_SIZE = SDK_OVERLAY.MODULE_03.BSS_END - SDK_OVERLAY.MODULE_03.BSS_START; } >> MODULE_03 .MODULE.04 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_04.START = .; thumb_04.o (.text) arm_04.o (.text) - thumb_04.o (.sdata) - arm_04.o (.sdata) thumb_04.o (.rodata) arm_04.o (.rodata) + thumb_04.o (.init) + arm_04.o (.init) + SDK_OVERLAY.MODULE_04.SINIT_START = .; + thumb_04.o (.ctor) + arm_04.o (.ctor) + thumb_04.o (.sinit) + arm_04.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_04.SINIT_END = .; + . = ALIGN(32); + thumb_04.o (.sdata) + arm_04.o (.sdata) thumb_04.o (.data) arm_04.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_04.END = .; SDK_OVERLAY.MODULE_04.SIZE = SDK_OVERLAY.MODULE_04.END - SDK_OVERLAY.MODULE_04.START; } > MODULE_04 .MODULE.04.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_04.BSS_START = .; thumb_04.o (.sbss) arm_04.o (.sbss) thumb_04.o (.bss) arm_04.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_04.BSS_END = .; SDK_OVERLAY.MODULE_04.BSS_SIZE = SDK_OVERLAY.MODULE_04.BSS_END - SDK_OVERLAY.MODULE_04.BSS_START; } >> MODULE_04 .MODULE.05 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_05.START = .; module_05.o (.text) + module_05.o (.rodata) + module_05.o (.init) + SDK_OVERLAY.MODULE_05.SINIT_START = .; + module_05.o (.ctor) + module_05.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_05.SINIT_END = .; + . = ALIGN(32); module_05.o (.sdata) module_05.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_05.END = .; SDK_OVERLAY.MODULE_05.SIZE = SDK_OVERLAY.MODULE_05.END - SDK_OVERLAY.MODULE_05.START; } > MODULE_05 .MODULE.05.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_05.BSS_START = .; module_05.o (.sbss) module_05.o (.bss) @@ -522,143 +595,248 @@ SECTIONS { .MODULE.06 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_06.START = .; module_06.o (.text) + module_06.o (.rodata) + module_06.o (.init) + SDK_OVERLAY.MODULE_06.SINIT_START = .; + module_06.o (.ctor) + module_06.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_06.SINIT_END = .; + . = ALIGN(32); module_06.o (.sdata) module_06.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_06.END = .; SDK_OVERLAY.MODULE_06.SIZE = SDK_OVERLAY.MODULE_06.END - SDK_OVERLAY.MODULE_06.START; } > MODULE_06 .MODULE.06.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_06.BSS_START = .; module_06.o (.sbss) module_06.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_06.BSS_END = .; SDK_OVERLAY.MODULE_06.BSS_SIZE = SDK_OVERLAY.MODULE_06.BSS_END - SDK_OVERLAY.MODULE_06.BSS_START; } >> MODULE_06 .MODULE.07 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_07.START = .; module_07.o (.text) + module_07.o (.rodata) + module_07.o (.init) + SDK_OVERLAY.MODULE_07.SINIT_START = .; + module_07.o (.ctor) + module_07.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_07.SINIT_END = .; + . = ALIGN(32); module_07.o (.sdata) module_07.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_07.END = .; SDK_OVERLAY.MODULE_07.SIZE = SDK_OVERLAY.MODULE_07.END - SDK_OVERLAY.MODULE_07.START; } > MODULE_07 .MODULE.07.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_07.BSS_START = .; module_07.o (.sbss) module_07.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_07.BSS_END = .; SDK_OVERLAY.MODULE_07.BSS_SIZE = SDK_OVERLAY.MODULE_07.BSS_END - SDK_OVERLAY.MODULE_07.BSS_START; } >> MODULE_07 .MODULE.08 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_08.START = .; module_08.o (.text) + module_08.o (.rodata) + module_08.o (.init) + SDK_OVERLAY.MODULE_08.SINIT_START = .; + module_08.o (.ctor) + module_08.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_08.SINIT_END = .; + . = ALIGN(32); module_08.o (.sdata) module_08.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_08.END = .; SDK_OVERLAY.MODULE_08.SIZE = SDK_OVERLAY.MODULE_08.END - SDK_OVERLAY.MODULE_08.START; } > MODULE_08 .MODULE.08.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_08.BSS_START = .; module_08.o (.sbss) module_08.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_08.BSS_END = .; SDK_OVERLAY.MODULE_08.BSS_SIZE = SDK_OVERLAY.MODULE_08.BSS_END - SDK_OVERLAY.MODULE_08.BSS_START; } >> MODULE_08 .MODULE.09 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_09.START = .; module_09.o (.text) + module_09.o (.rodata) + module_09.o (.init) + SDK_OVERLAY.MODULE_09.SINIT_START = .; + module_09.o (.ctor) + module_09.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_09.SINIT_END = .; + . = ALIGN(32); module_09.o (.sdata) module_09.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_09.END = .; SDK_OVERLAY.MODULE_09.SIZE = SDK_OVERLAY.MODULE_09.END - SDK_OVERLAY.MODULE_09.START; } > MODULE_09 .MODULE.09.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_09.BSS_START = .; module_09.o (.sbss) module_09.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_09.BSS_END = .; SDK_OVERLAY.MODULE_09.BSS_SIZE = SDK_OVERLAY.MODULE_09.BSS_END - SDK_OVERLAY.MODULE_09.BSS_START; } >> MODULE_09 .MODULE.10 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_10.START = .; module_10_dummy.o (.text) + module_10_dummy.o (.rodata) + module_10_dummy.o (.init) + SDK_OVERLAY.MODULE_10.SINIT_START = .; + module_10_dummy.o (.ctor) + module_10_dummy.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_10.SINIT_END = .; + . = ALIGN(32); module_10_dummy.o (.sdata) module_10_dummy.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_10.END = .; SDK_OVERLAY.MODULE_10.SIZE = SDK_OVERLAY.MODULE_10.END - SDK_OVERLAY.MODULE_10.START; } > MODULE_10 .MODULE.10.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_10.BSS_START = .; module_10_dummy.o (.sbss) module_10_dummy.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_10.BSS_END = .; SDK_OVERLAY.MODULE_10.BSS_SIZE = SDK_OVERLAY.MODULE_10.BSS_END - SDK_OVERLAY.MODULE_10.BSS_START; } >> MODULE_10 .MODULE.11 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_11.START = .; module_11.o (.text) + module_11.o (.rodata) + module_11.o (.init) + // SDK_OVERLAY.MODULE_11.SINIT_START = .; + module_11.o (.ctor) + module_11.o (.sinit) + // SDK_OVERLAY.MODULE_11.SINIT_END = .; + // WRITEW 0; + . = ALIGN(32); module_11.o (.sdata) module_11.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_11.END = .; SDK_OVERLAY.MODULE_11.SIZE = SDK_OVERLAY.MODULE_11.END - SDK_OVERLAY.MODULE_11.START; } > MODULE_11 .MODULE.11.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_11.BSS_START = .; module_11.o (.sbss) module_11.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_11.BSS_END = .; SDK_OVERLAY.MODULE_11.BSS_SIZE = SDK_OVERLAY.MODULE_11.BSS_END - SDK_OVERLAY.MODULE_11.BSS_START; } >> MODULE_11 .MODULE.12 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_12.START = .; module_12.o (.text) + module_12.o (.rodata) + module_12.o (.init) + SDK_OVERLAY.MODULE_12.SINIT_START = .; + module_12.o (.ctor) + module_12.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_12.SINIT_END = .; + . = ALIGN(32); module_12.o (.sdata) module_12.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_12.END = .; SDK_OVERLAY.MODULE_12.SIZE = SDK_OVERLAY.MODULE_12.END - SDK_OVERLAY.MODULE_12.START; } > MODULE_12 .MODULE.12.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_12.BSS_START = .; module_12.o (.sbss) module_12.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_12.BSS_END = .; SDK_OVERLAY.MODULE_12.BSS_SIZE = SDK_OVERLAY.MODULE_12.BSS_END - SDK_OVERLAY.MODULE_12.BSS_START; } >> MODULE_12 .MODULE.13 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_13.START = .; module_13_init.o (.text) module_13_arm1.o (.text) module_13_thumb.o (.text) module_13_arm2.o (.text) + module_13_init.o (.rodata) + module_13_arm1.o (.rodata) + module_13_thumb.o (.rodata) + module_13_arm2.o (.rodata) + module_13_init.o (.init) + module_13_arm1.o (.init) + module_13_thumb.o (.init) + module_13_arm2.o (.init) + SDK_OVERLAY.MODULE_13.SINIT_START = .; + module_13_init.o (.ctor) + module_13_arm1.o (.ctor) + module_13_thumb.o (.ctor) + module_13_arm2.o (.ctor) + module_13_init.o (.sinit) + module_13_arm1.o (.sinit) + module_13_thumb.o (.sinit) + module_13_arm2.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_13.SINIT_END = .; + . = ALIGN(32); module_13_init.o (.sdata) module_13_arm1.o (.sdata) module_13_thumb.o (.sdata) @@ -667,12 +845,14 @@ SECTIONS { module_13_arm1.o (.data) module_13_thumb.o (.data) module_13_arm2.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_13.END = .; SDK_OVERLAY.MODULE_13.SIZE = SDK_OVERLAY.MODULE_13.END - SDK_OVERLAY.MODULE_13.START; } > MODULE_13 .MODULE.13.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_13.BSS_START = .; module_13_init.o (.sbss) module_13_arm1.o (.sbss) @@ -682,375 +862,615 @@ SECTIONS { module_13_arm1.o (.bss) module_13_thumb.o (.bss) module_13_arm2.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_13.BSS_END = .; SDK_OVERLAY.MODULE_13.BSS_SIZE = SDK_OVERLAY.MODULE_13.BSS_END - SDK_OVERLAY.MODULE_13.BSS_START; } >> MODULE_13 .MODULE.14 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_14.START = .; module_14.o (.text) + module_14.o (.rodata) + module_14.o (.init) + SDK_OVERLAY.MODULE_14.SINIT_START = .; + module_14.o (.ctor) + module_14.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_14.SINIT_END = .; + . = ALIGN(32); module_14.o (.sdata) module_14.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_14.END = .; SDK_OVERLAY.MODULE_14.SIZE = SDK_OVERLAY.MODULE_14.END - SDK_OVERLAY.MODULE_14.START; } > MODULE_14 .MODULE.14.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_14.BSS_START = .; module_14.o (.sbss) module_14.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_14.BSS_END = .; SDK_OVERLAY.MODULE_14.BSS_SIZE = SDK_OVERLAY.MODULE_14.BSS_END - SDK_OVERLAY.MODULE_14.BSS_START; } >> MODULE_14 .MODULE.15 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_15.START = .; module_15.o (.text) + module_15.o (.rodata) + module_15.o (.init) + SDK_OVERLAY.MODULE_15.SINIT_START = .; + module_15.o (.ctor) + module_15.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_15.SINIT_END = .; + . = ALIGN(32); module_15.o (.sdata) module_15.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_15.END = .; SDK_OVERLAY.MODULE_15.SIZE = SDK_OVERLAY.MODULE_15.END - SDK_OVERLAY.MODULE_15.START; } > MODULE_15 .MODULE.15.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_15.BSS_START = .; module_15.o (.sbss) module_15.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_15.BSS_END = .; SDK_OVERLAY.MODULE_15.BSS_SIZE = SDK_OVERLAY.MODULE_15.BSS_END - SDK_OVERLAY.MODULE_15.BSS_START; } >> MODULE_15 .MODULE.16 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_16.START = .; module_16.o (.text) + module_16.o (.rodata) + module_16.o (.init) + SDK_OVERLAY.MODULE_16.SINIT_START = .; + module_16.o (.ctor) + module_16.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_16.SINIT_END = .; + . = ALIGN(32); module_16.o (.sdata) module_16.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_16.END = .; SDK_OVERLAY.MODULE_16.SIZE = SDK_OVERLAY.MODULE_16.END - SDK_OVERLAY.MODULE_16.START; } > MODULE_16 .MODULE.16.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_16.BSS_START = .; module_16.o (.sbss) module_16.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_16.BSS_END = .; SDK_OVERLAY.MODULE_16.BSS_SIZE = SDK_OVERLAY.MODULE_16.BSS_END - SDK_OVERLAY.MODULE_16.BSS_START; } >> MODULE_16 .MODULE.17 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_17.START = .; module_17.o (.text) + module_17.o (.rodata) + module_17.o (.init) + SDK_OVERLAY.MODULE_17.SINIT_START = .; + module_17.o (.ctor) + module_17.o (.init) + WRITEW 0; + SDK_OVERLAY.MODULE_17.SINIT_END = .; + . = ALIGN(32); module_17.o (.sdata) module_17.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_17.END = .; SDK_OVERLAY.MODULE_17.SIZE = SDK_OVERLAY.MODULE_17.END - SDK_OVERLAY.MODULE_17.START; } > MODULE_17 .MODULE.17.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_17.BSS_START = .; module_17.o (.sbss) module_17.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_17.BSS_END = .; SDK_OVERLAY.MODULE_17.BSS_SIZE = SDK_OVERLAY.MODULE_17.BSS_END - SDK_OVERLAY.MODULE_17.BSS_START; } >> MODULE_17 .MODULE.18 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_18.START = .; module_18.o (.text) + module_18.o (.rodata) + module_18.o (.init) + SDK_OVERLAY.MODULE_18.SINIT_START = .; + module_18.o (.ctor) + module_18.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_18.SINIT_END = .; + . = ALIGN(32); module_18.o (.sdata) module_18.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_18.END = .; SDK_OVERLAY.MODULE_18.SIZE = SDK_OVERLAY.MODULE_18.END - SDK_OVERLAY.MODULE_18.START; } > MODULE_18 .MODULE.18.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_18.BSS_START = .; module_18.o (.sbss) module_18.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_18.BSS_END = .; SDK_OVERLAY.MODULE_18.BSS_SIZE = SDK_OVERLAY.MODULE_18.BSS_END - SDK_OVERLAY.MODULE_18.BSS_START; } >> MODULE_18 .MODULE.19 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_19.START = .; module_19.o (.text) + module_19.o (.rodata) + module_19.o (.init) + SDK_OVERLAY.MODULE_19.SINIT_START = .; + module_19.o (.ctor) + module_19.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_19.SINIT_END = .; + . = ALIGN(32); module_19.o (.sdata) module_19.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_19.END = .; SDK_OVERLAY.MODULE_19.SIZE = SDK_OVERLAY.MODULE_19.END - SDK_OVERLAY.MODULE_19.START; } > MODULE_19 .MODULE.19.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_19.BSS_START = .; module_19.o (.sbss) module_19.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_19.BSS_END = .; SDK_OVERLAY.MODULE_19.BSS_SIZE = SDK_OVERLAY.MODULE_19.BSS_END - SDK_OVERLAY.MODULE_19.BSS_START; } >> MODULE_19 .MODULE.20 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_20.START = .; module_20.o (.text) + module_20.o (.rodata) + module_20.o (.init) + SDK_OVERLAY.MODULE_20.SINIT_START = .; + module_20.o (.ctor) + module_20.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_20.SINIT_END = .; + . = ALIGN(32); module_20.o (.sdata) module_20.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_20.END = .; SDK_OVERLAY.MODULE_20.SIZE = SDK_OVERLAY.MODULE_20.END - SDK_OVERLAY.MODULE_20.START; } > MODULE_20 .MODULE.20.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_20.BSS_START = .; module_20.o (.sbss) module_20.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_20.BSS_END = .; SDK_OVERLAY.MODULE_20.BSS_SIZE = SDK_OVERLAY.MODULE_20.BSS_END - SDK_OVERLAY.MODULE_20.BSS_START; } >> MODULE_20 .MODULE.21 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_21.START = .; module_21.o (.text) + module_21.o (.rodata) + module_21.o (.init) + // SDK_OVERLAY.MODULE_21.SINIT_START = .; + module_21.o (.ctor) + module_21.o (.sinit) + // WRITEW 0; + // SDK_OVERLAY.MODULE_21.SINIT_END = ; + . = ALIGN(32); module_21.o (.sdata) module_21.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_21.END = .; SDK_OVERLAY.MODULE_21.SIZE = SDK_OVERLAY.MODULE_21.END - SDK_OVERLAY.MODULE_21.START; } > MODULE_21 .MODULE.21.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_21.BSS_START = .; module_21.o (.sbss) module_21.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_21.BSS_END = .; SDK_OVERLAY.MODULE_21.BSS_SIZE = SDK_OVERLAY.MODULE_21.BSS_END - SDK_OVERLAY.MODULE_21.BSS_START; } >> MODULE_21 .MODULE.22 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_22.START = .; module_22.o (.text) + module_22.o (.rodata) + module_22.o (.init) + SDK_OVERLAY.MODULE_22.SINIT_START = .; + module_22.o (.ctor) + module_22.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_22.SINIT_END = .; + . = ALIGN(32); module_22.o (.sdata) module_22.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_22.END = .; SDK_OVERLAY.MODULE_22.SIZE = SDK_OVERLAY.MODULE_22.END - SDK_OVERLAY.MODULE_22.START; } > MODULE_22 .MODULE.22.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_22.BSS_START = .; module_22.o (.sbss) module_22.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_22.BSS_END = .; SDK_OVERLAY.MODULE_22.BSS_SIZE = SDK_OVERLAY.MODULE_22.BSS_END - SDK_OVERLAY.MODULE_22.BSS_START; } >> MODULE_22 .MODULE.23 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_23.START = .; module_23.o (.text) + module_23.o (.rodata) + module_23.o (.init) + // SDK_OVERLAY.MODULE_23.SINIT_START = .; + module_23.o (.ctor) + module_23.o (.sinit) + // WRITEW 0; + // SDK_OVERLAY.MODULE_23.SINIT_END = .; + . = ALIGN(32); module_23.o (.sdata) module_23.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_23.END = .; SDK_OVERLAY.MODULE_23.SIZE = SDK_OVERLAY.MODULE_23.END - SDK_OVERLAY.MODULE_23.START; } > MODULE_23 .MODULE.23.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_23.BSS_START = .; module_23.o (.sbss) module_23.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_23.BSS_END = .; SDK_OVERLAY.MODULE_23.BSS_SIZE = SDK_OVERLAY.MODULE_23.BSS_END - SDK_OVERLAY.MODULE_23.BSS_START; } >> MODULE_23 .MODULE.24 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_24.START = .; module_24.o (.text) + module_24.o (.rodata) + module_24.o (.init) + SDK_OVERLAY.MODULE_24.SINIT_START = .; + module_24.o (.ctor) + module_24.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_24.SINIT_END = .; + . = ALIGN(32); module_24.o (.sdata) module_24.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_24.END = .; SDK_OVERLAY.MODULE_24.SIZE = SDK_OVERLAY.MODULE_24.END - SDK_OVERLAY.MODULE_24.START; } > MODULE_24 .MODULE.24.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_24.BSS_START = .; module_24.o (.sbss) module_24.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_24.BSS_END = .; SDK_OVERLAY.MODULE_24.BSS_SIZE = SDK_OVERLAY.MODULE_24.BSS_END - SDK_OVERLAY.MODULE_24.BSS_START; } >> MODULE_24 .MODULE.25 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_25.START = .; module_25.o (.text) + module_25.o (.rodata) + module_25.o (.init) + SDK_OVERLAY.MODULE_25.SINIT_START = .; + module_25.o (.ctor) + module_25.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_25.SINIT_END = .; + . = ALIGN(32); module_25.o (.sdata) module_25.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_25.END = .; SDK_OVERLAY.MODULE_25.SIZE = SDK_OVERLAY.MODULE_25.END - SDK_OVERLAY.MODULE_25.START; } > MODULE_25 .MODULE.25.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_25.BSS_START = .; module_25.o (.sbss) module_25.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_25.BSS_END = .; SDK_OVERLAY.MODULE_25.BSS_SIZE = SDK_OVERLAY.MODULE_25.BSS_END - SDK_OVERLAY.MODULE_25.BSS_START; } >> MODULE_25 .MODULE.26 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_26.START = .; module_26.o (.text) + module_26.o (.rodata) + module_26.o (.init) + SDK_OVERLAY.MODULE_26.SINIT_START = .; + module_26.o (.ctor) + module_26.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_26.SINIT_END = .; + . = ALIGN(32); module_26.o (.sdata) module_26.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_26.END = .; SDK_OVERLAY.MODULE_26.SIZE = SDK_OVERLAY.MODULE_26.END - SDK_OVERLAY.MODULE_26.START; } > MODULE_26 .MODULE.26.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_26.BSS_START = .; module_26.o (.sbss) module_26.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_26.BSS_END = .; SDK_OVERLAY.MODULE_26.BSS_SIZE = SDK_OVERLAY.MODULE_26.BSS_END - SDK_OVERLAY.MODULE_26.BSS_START; } >> MODULE_26 .MODULE.27 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_27.START = .; module_27.o (.text) + module_27.o (.rodata) + module_27.o (.init) + // SDK_OVERLAY.MODULE_27.SINIT_START = .; + module_27.o (.ctor) + module_27.o (.sinit) + // WRITEW 0; + // SDK_OVERLAY.MODULE_27.SINIT_END = .; + . = ALIGN(32); module_27.o (.sdata) module_27.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_27.END = .; SDK_OVERLAY.MODULE_27.SIZE = SDK_OVERLAY.MODULE_27.END - SDK_OVERLAY.MODULE_27.START; } > MODULE_27 .MODULE.27.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_27.BSS_START = .; module_27.o (.sbss) module_27.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_27.BSS_END = .; SDK_OVERLAY.MODULE_27.BSS_SIZE = SDK_OVERLAY.MODULE_27.BSS_END - SDK_OVERLAY.MODULE_27.BSS_START; } >> MODULE_27 .MODULE.28 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_28.START = .; module_28.o (.text) + module_28.o (.rodata) + module_28.o (.init) + // SDK_OVERLAY.MODULE_28.SINIT_START = .; + module_28.o (.ctor) + module_28.o (.sinit) + // WRITEW 0; + // SDK_OVERLAY.MODULE_28.SINIT_END = .; + . = ALIGN(32); module_28.o (.sdata) module_28.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_28.END = .; SDK_OVERLAY.MODULE_28.SIZE = SDK_OVERLAY.MODULE_28.END - SDK_OVERLAY.MODULE_28.START; } > MODULE_28 .MODULE.28.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_28.BSS_START = .; module_28.o (.sbss) module_28.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_28.BSS_END = .; SDK_OVERLAY.MODULE_28.BSS_SIZE = SDK_OVERLAY.MODULE_28.BSS_END - SDK_OVERLAY.MODULE_28.BSS_START; } >> MODULE_28 .MODULE.29 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_29.START = .; module_29.o (.text) + module_29.o (.rodata) + module_29.o (.init) + // SDK_OVERLAY.MODULE_29.SINIT_START = .; + module_29.o (.ctor) + module_29.o (.sinit) + // WRITEW 0; + // SDK_OVERLAY.MODULE_29.SINIT_END = .; + . = ALIGN(32); module_29.o (.sdata) module_29.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_29.END = .; SDK_OVERLAY.MODULE_29.SIZE = SDK_OVERLAY.MODULE_29.END - SDK_OVERLAY.MODULE_29.START; } > MODULE_29 .MODULE.29.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_29.BSS_START = .; module_29.o (.sbss) module_29.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_29.BSS_END = .; SDK_OVERLAY.MODULE_29.BSS_SIZE = SDK_OVERLAY.MODULE_29.BSS_END - SDK_OVERLAY.MODULE_29.BSS_START; } >> MODULE_29 .MODULE.30 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_30.START = .; module_30.o (.text) + module_30.o (.rodata) + module_30.o (.init) + // SDK_OVERLAY.MODULE_30.SINIT_START = .; + module_30.o (.ctor) + module_30.o (.sinit) + // WRITEW 0; + // SDK_OVERLAY.MODULE_30.SINIT_END = .; + . = ALIGN(32); module_30.o (.sdata) module_30.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_30.END = .; SDK_OVERLAY.MODULE_30.SIZE = SDK_OVERLAY.MODULE_30.END - SDK_OVERLAY.MODULE_30.START; } > MODULE_30 .MODULE.30.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_30.BSS_START = .; module_30.o (.sbss) module_30.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_30.BSS_END = .; SDK_OVERLAY.MODULE_30.BSS_SIZE = SDK_OVERLAY.MODULE_30.BSS_END - SDK_OVERLAY.MODULE_30.BSS_START; } >> MODULE_30 .MODULE.31 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_31.START = .; module_31.o (.text) + module_31.o (.rodata) + module_31.o (.init) + SDK_OVERLAY.MODULE_31.SINIT_START = .; + module_31.o (.ctor) + module_31.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_31.SINIT_END = .; + . = ALIGN(32); module_31.o (.sdata) module_31.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_31.END = .; SDK_OVERLAY.MODULE_31.SIZE = SDK_OVERLAY.MODULE_31.END - SDK_OVERLAY.MODULE_31.START; } > MODULE_31 .MODULE.31.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_31.BSS_START = .; module_31.o (.sbss) module_31.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_31.BSS_END = .; SDK_OVERLAY.MODULE_31.BSS_SIZE = SDK_OVERLAY.MODULE_31.BSS_END - SDK_OVERLAY.MODULE_31.BSS_START; } >> MODULE_31 .MODULE.32 : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_32.START = .; module_32.o (.text) + module_32.o (.rodata) + module_32.o (.init) + // SDK_OVERLAY.MODULE_32.SINIT_START = .; + module_32.o (.ctor) + module_32.o (.sinit) + // WRITEW 0; + // SDK_OVERLAY.MODULE_32.SINIT_END = .; + . = ALIGN(32); module_32.o (.sdata) module_32.o (.data) + . = ALIGN(32); SDK_OVERLAY.MODULE_32.END = .; SDK_OVERLAY.MODULE_32.SIZE = SDK_OVERLAY.MODULE_32.END - SDK_OVERLAY.MODULE_32.START; } > MODULE_32 .MODULE.32.bss : { + ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_32.BSS_START = .; module_32.o (.sbss) module_32.o (.bss) + . = ALIGN(32); SDK_OVERLAY.MODULE_32.BSS_END = .; SDK_OVERLAY.MODULE_32.BSS_SIZE = SDK_OVERLAY.MODULE_32.BSS_END - SDK_OVERLAY.MODULE_32.BSS_START; } >> MODULE_32 - .MODULE.33: { + .MODULE.33 : + { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_33.START = .; - FILE_28DE00.o (.text) /* 0x289E00 */ + module_33.o (.text) + module_33.o (.rodata) + module_33.o (.init) + SDK_OVERLAY.MODULE_33.SINIT_START = .; + module_33.o (.ctor) + module_33.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_33.SINIT_END = .; + . = ALIGN(32); + module_33.o (.sdata) + module_33.o (.data) . = ALIGN(32); SDK_OVERLAY.MODULE_33.END = .; SDK_OVERLAY.MODULE_33.SIZE = SDK_OVERLAY.MODULE_33.END - SDK_OVERLAY.MODULE_33.START; @@ -1060,16 +1480,28 @@ SECTIONS { { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_33.BSS_START = .; - FILE_28DE00.o (.bss) + module_33.o (.sbss) + module_33.o (.bss) . = ALIGN(32); SDK_OVERLAY.MODULE_33.BSS_END = .; SDK_OVERLAY.MODULE_33.BSS_SIZE = SDK_OVERLAY.MODULE_33.BSS_END - SDK_OVERLAY.MODULE_33.BSS_START; } >> MODULE_33 - .MODULE.34: { + .MODULE.34 : + { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_34.START = .; - FILE_28E200.o (.text) /* 0x28A200 */ + module_34.o (.text) + module_34.o (.rodata) + module_34.o (.init) + // SDK_OVERLAY.MODULE_34.SINIT_START = .; + module_34.o (.ctor) + module_34.o (.sinit) + // WRITEW 0; + // SDK_OVERLAY.MODULE_34.SINIT_END = .; + . = ALIGN(32); + module_34.o (.sdata) + module_34.o (.data) . = ALIGN(32); SDK_OVERLAY.MODULE_34.END = .; SDK_OVERLAY.MODULE_34.SIZE = SDK_OVERLAY.MODULE_34.END - SDK_OVERLAY.MODULE_34.START; @@ -1079,16 +1511,28 @@ SECTIONS { { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_34.BSS_START = .; - FILE_28E200.o (.bss) + module_34.o (.sbss) + module_34.o (.bss) . = ALIGN(32); SDK_OVERLAY.MODULE_34.BSS_END = .; SDK_OVERLAY.MODULE_34.BSS_SIZE = SDK_OVERLAY.MODULE_34.BSS_END - SDK_OVERLAY.MODULE_34.BSS_START; } >> MODULE_34 - .MODULE.35: { + .MODULE.35 : + { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_35.START = .; - FILE_28E800.o (.text) /* 0x28A800 */ + module_35.o (.text) + module_35.o (.rodata) + module_35.o (.init) + SDK_OVERLAY.MODULE_35.SINIT_START = .; + module_35.o (.ctor) + module_35.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_35.SINIT_END = .; + . = ALIGN(32); + module_35.o (.sdata) + module_35.o (.data) . = ALIGN(32); SDK_OVERLAY.MODULE_35.END = .; SDK_OVERLAY.MODULE_35.SIZE = SDK_OVERLAY.MODULE_35.END - SDK_OVERLAY.MODULE_35.START; @@ -1098,16 +1542,28 @@ SECTIONS { { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_35.BSS_START = .; - FILE_28E800.o (.bss) + module_35.o (.sbss) + module_35.o (.bss) . = ALIGN(32); SDK_OVERLAY.MODULE_35.BSS_END = .; SDK_OVERLAY.MODULE_35.BSS_SIZE = SDK_OVERLAY.MODULE_35.BSS_END - SDK_OVERLAY.MODULE_35.BSS_START; } >> MODULE_35 - .MODULE.36: { + .MODULE.36 : + { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_36.START = .; - FILE_28F200.o (.text) /* 0x28B200 */ + module_36.o (.text) + module_36.o (.rodata) + module_36.o (.init) + // SDK_OVERLAY.MODULE_36.SINIT_START = .; + module_36.o (.ctor) + module_36.o (.sinit) + // WRITEW 0; + // SDK_OVERLAY.MODULE_36.SINIT_END = .; + . = ALIGN(32); + module_36.o (.sdata) + module_36.o (.data) . = ALIGN(32); SDK_OVERLAY.MODULE_36.END = .; SDK_OVERLAY.MODULE_36.SIZE = SDK_OVERLAY.MODULE_36.END - SDK_OVERLAY.MODULE_36.START; @@ -1117,7 +1573,8 @@ SECTIONS { { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_36.BSS_START = .; - FILE_28F200.o (.bss) + module_36.o (.sbss) + module_36.o (.bss) . = ALIGN(32); SDK_OVERLAY.MODULE_36.BSS_END = .; SDK_OVERLAY.MODULE_36.BSS_SIZE = SDK_OVERLAY.MODULE_36.BSS_END - SDK_OVERLAY.MODULE_36.BSS_START; @@ -2196,43 +2653,339 @@ SECTIONS { } > arm9_defs .arm9_table : { - OVERLAY_TABLE(MODULE_00, 0) - OVERLAY_TABLE(MODULE_01, 1) - OVERLAY_TABLE(MODULE_02, 2) - OVERLAY_TABLE(MODULE_03, 3) - OVERLAY_TABLE(MODULE_04, 4) - OVERLAY_TABLE(MODULE_05, 5) - OVERLAY_TABLE(MODULE_06, 6) - OVERLAY_TABLE(MODULE_07, 7) - OVERLAY_TABLE(MODULE_08, 8) - OVERLAY_TABLE(MODULE_09, 9) - OVERLAY_TABLE(MODULE_10, 10) - OVERLAY_TABLE(MODULE_11, 11) - OVERLAY_TABLE(MODULE_12, 12) - OVERLAY_TABLE(MODULE_13, 13) - OVERLAY_TABLE(MODULE_14, 14) - OVERLAY_TABLE(MODULE_15, 15) - OVERLAY_TABLE(MODULE_16, 16) - OVERLAY_TABLE(MODULE_17, 17) - OVERLAY_TABLE(MODULE_18, 18) - OVERLAY_TABLE(MODULE_19, 19) - OVERLAY_TABLE(MODULE_20, 20) - OVERLAY_TABLE(MODULE_21, 21) - OVERLAY_TABLE(MODULE_22, 22) - OVERLAY_TABLE(MODULE_23, 23) - OVERLAY_TABLE(MODULE_24, 24) - OVERLAY_TABLE(MODULE_25, 25) - OVERLAY_TABLE(MODULE_26, 26) - OVERLAY_TABLE(MODULE_27, 27) - OVERLAY_TABLE(MODULE_28, 28) - OVERLAY_TABLE(MODULE_29, 29) - OVERLAY_TABLE(MODULE_30, 30) - OVERLAY_TABLE(MODULE_31, 31) - OVERLAY_TABLE(MODULE_32, 32) - OVERLAY_TABLE(MODULE_33, 33) - OVERLAY_TABLE(MODULE_34, 34) - OVERLAY_TABLE(MODULE_35, 35) - OVERLAY_TABLE(MODULE_36, 36) + WRITEW SDK_OVERLAY_MODULE_00_ID; + WRITEW SDK_OVERLAY.MODULE_00.START; + WRITEW SDK_OVERLAY.MODULE_00.SIZE; + WRITEW SDK_OVERLAY.MODULE_00.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_00.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_00.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_00_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_01_ID; + WRITEW SDK_OVERLAY.MODULE_01.START; + WRITEW SDK_OVERLAY.MODULE_01.SIZE; + WRITEW SDK_OVERLAY.MODULE_01.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_01.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_01.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_01_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_02_ID; + WRITEW SDK_OVERLAY.MODULE_02.START; + WRITEW SDK_OVERLAY.MODULE_02.SIZE; + WRITEW SDK_OVERLAY.MODULE_02.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_02.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_02.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_02_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_03_ID; + WRITEW SDK_OVERLAY.MODULE_03.START; + WRITEW SDK_OVERLAY.MODULE_03.SIZE; + WRITEW SDK_OVERLAY.MODULE_03.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_03.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_03.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_03_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_04_ID; + WRITEW SDK_OVERLAY.MODULE_04.START; + WRITEW SDK_OVERLAY.MODULE_04.SIZE; + WRITEW SDK_OVERLAY.MODULE_04.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_04.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_04.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_04_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_05_ID; + WRITEW SDK_OVERLAY.MODULE_05.START; + WRITEW SDK_OVERLAY.MODULE_05.SIZE; + WRITEW SDK_OVERLAY.MODULE_05.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_05.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_05.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_05_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_06_ID; + WRITEW SDK_OVERLAY.MODULE_06.START; + WRITEW SDK_OVERLAY.MODULE_06.SIZE; + WRITEW SDK_OVERLAY.MODULE_06.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_06.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_06.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_06_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_07_ID; + WRITEW SDK_OVERLAY.MODULE_07.START; + WRITEW SDK_OVERLAY.MODULE_07.SIZE; + WRITEW SDK_OVERLAY.MODULE_07.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_07.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_07.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_07_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_08_ID; + WRITEW SDK_OVERLAY.MODULE_08.START; + WRITEW SDK_OVERLAY.MODULE_08.SIZE; + WRITEW SDK_OVERLAY.MODULE_08.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_08.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_08.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_08_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_09_ID; + WRITEW SDK_OVERLAY.MODULE_09.START; + WRITEW SDK_OVERLAY.MODULE_09.SIZE; + WRITEW SDK_OVERLAY.MODULE_09.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_09.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_09.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_09_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_10_ID; + WRITEW SDK_OVERLAY.MODULE_10.START; + WRITEW SDK_OVERLAY.MODULE_10.SIZE; + WRITEW SDK_OVERLAY.MODULE_10.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_10.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_10.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_10_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_11_ID; + WRITEW SDK_OVERLAY.MODULE_11.START; + WRITEW SDK_OVERLAY.MODULE_11.SIZE; + WRITEW SDK_OVERLAY.MODULE_11.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_11.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_11.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_11_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_12_ID; + WRITEW SDK_OVERLAY.MODULE_12.START; + WRITEW SDK_OVERLAY.MODULE_12.SIZE; + WRITEW SDK_OVERLAY.MODULE_12.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_12.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_12.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_12_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_13_ID; + WRITEW SDK_OVERLAY.MODULE_13.START; + WRITEW SDK_OVERLAY.MODULE_13.SIZE; + WRITEW SDK_OVERLAY.MODULE_13.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_13.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_13.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_13_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_14_ID; + WRITEW SDK_OVERLAY.MODULE_14.START; + WRITEW SDK_OVERLAY.MODULE_14.SIZE; + WRITEW SDK_OVERLAY.MODULE_14.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_14.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_14.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_14_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_15_ID; + WRITEW SDK_OVERLAY.MODULE_15.START; + WRITEW SDK_OVERLAY.MODULE_15.SIZE; + WRITEW SDK_OVERLAY.MODULE_15.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_15.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_15.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_15_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_16_ID; + WRITEW SDK_OVERLAY.MODULE_16.START; + WRITEW SDK_OVERLAY.MODULE_16.SIZE; + WRITEW SDK_OVERLAY.MODULE_16.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_16.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_16.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_16_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_17_ID; + WRITEW SDK_OVERLAY.MODULE_17.START; + WRITEW SDK_OVERLAY.MODULE_17.SIZE; + WRITEW SDK_OVERLAY.MODULE_17.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_17.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_17.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_17_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_18_ID; + WRITEW SDK_OVERLAY.MODULE_18.START; + WRITEW SDK_OVERLAY.MODULE_18.SIZE; + WRITEW SDK_OVERLAY.MODULE_18.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_18.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_18.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_18_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_19_ID; + WRITEW SDK_OVERLAY.MODULE_19.START; + WRITEW SDK_OVERLAY.MODULE_19.SIZE; + WRITEW SDK_OVERLAY.MODULE_19.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_19.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_19.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_19_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_20_ID; + WRITEW SDK_OVERLAY.MODULE_20.START; + WRITEW SDK_OVERLAY.MODULE_20.SIZE; + WRITEW SDK_OVERLAY.MODULE_20.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_20.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_20.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_20_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_21_ID; + WRITEW SDK_OVERLAY.MODULE_21.START; + WRITEW SDK_OVERLAY.MODULE_21.SIZE; + WRITEW SDK_OVERLAY.MODULE_21.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_21.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_21.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_21_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_22_ID; + WRITEW SDK_OVERLAY.MODULE_22.START; + WRITEW SDK_OVERLAY.MODULE_22.SIZE; + WRITEW SDK_OVERLAY.MODULE_22.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_22.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_22.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_22_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_23_ID; + WRITEW SDK_OVERLAY.MODULE_23.START; + WRITEW SDK_OVERLAY.MODULE_23.SIZE; + WRITEW SDK_OVERLAY.MODULE_23.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_23.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_23.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_23_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_24_ID; + WRITEW SDK_OVERLAY.MODULE_24.START; + WRITEW SDK_OVERLAY.MODULE_24.SIZE; + WRITEW SDK_OVERLAY.MODULE_24.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_24.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_24.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_24_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_25_ID; + WRITEW SDK_OVERLAY.MODULE_25.START; + WRITEW SDK_OVERLAY.MODULE_25.SIZE; + WRITEW SDK_OVERLAY.MODULE_25.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_25.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_25.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_25_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_26_ID; + WRITEW SDK_OVERLAY.MODULE_26.START; + WRITEW SDK_OVERLAY.MODULE_26.SIZE; + WRITEW SDK_OVERLAY.MODULE_26.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_26.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_26.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_26_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_27_ID; + WRITEW SDK_OVERLAY.MODULE_27.START; + WRITEW SDK_OVERLAY.MODULE_27.SIZE; + WRITEW SDK_OVERLAY.MODULE_27.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_27.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_27.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_27_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_28_ID; + WRITEW SDK_OVERLAY.MODULE_28.START; + WRITEW SDK_OVERLAY.MODULE_28.SIZE; + WRITEW SDK_OVERLAY.MODULE_28.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_28.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_28.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_28_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_29_ID; + WRITEW SDK_OVERLAY.MODULE_29.START; + WRITEW SDK_OVERLAY.MODULE_29.SIZE; + WRITEW SDK_OVERLAY.MODULE_29.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_29.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_29.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_29_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_30_ID; + WRITEW SDK_OVERLAY.MODULE_30.START; + WRITEW SDK_OVERLAY.MODULE_30.SIZE; + WRITEW SDK_OVERLAY.MODULE_30.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_30.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_30.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_30_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_31_ID; + WRITEW SDK_OVERLAY.MODULE_31.START; + WRITEW SDK_OVERLAY.MODULE_31.SIZE; + WRITEW SDK_OVERLAY.MODULE_31.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_31.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_31.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_31_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_32_ID; + WRITEW SDK_OVERLAY.MODULE_32.START; + WRITEW SDK_OVERLAY.MODULE_32.SIZE; + WRITEW SDK_OVERLAY.MODULE_32.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_32.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_32.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_32_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_33_ID; + WRITEW SDK_OVERLAY.MODULE_33.START; + WRITEW SDK_OVERLAY.MODULE_33.SIZE; + WRITEW SDK_OVERLAY.MODULE_33.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_33.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_33.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_33_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_34_ID; + WRITEW SDK_OVERLAY.MODULE_34.START; + WRITEW SDK_OVERLAY.MODULE_34.SIZE; + WRITEW SDK_OVERLAY.MODULE_34.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_34.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_34.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_34_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_35_ID; + WRITEW SDK_OVERLAY.MODULE_35.START; + WRITEW SDK_OVERLAY.MODULE_35.SIZE; + WRITEW SDK_OVERLAY.MODULE_35.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_35.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_35.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_35_ID; + WRITEW 0; + + WRITEW SDK_OVERLAY_MODULE_36_ID; + WRITEW SDK_OVERLAY.MODULE_36.START; + WRITEW SDK_OVERLAY.MODULE_36.SIZE; + WRITEW SDK_OVERLAY.MODULE_36.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_36.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_36.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_36_ID; + WRITEW 0; + OVERLAY_TABLE(MODULE_37, 37) OVERLAY_TABLE(MODULE_38, 38) OVERLAY_TABLE(MODULE_39, 39) diff --git a/arm9/asm/DGT_hash1.s b/arm9/asm/DGT_hash1.s new file mode 100644 index 00000000..a9d6778d --- /dev/null +++ b/arm9/asm/DGT_hash1.s @@ -0,0 +1,404 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start ProcessBlock +ProcessBlock: ; 0x020D2798 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + add r3, r0, #0x18 + ldr r5, [r0, #0x0] + ldr r4, [r0, #0x4] + ldr lr, [r0, #0x8] + ldr r12, [r0, #0xc] + ldr r2, _020D2B78 ; =0x02106900 + mov r8, r3 + mov r7, #0x0 +_020D27C0: + mvn r1, r4 + and r6, r4, lr + and r1, r1, r12 + orr r1, r6, r1 + ldr r6, [r8, #0x0] + add r1, r5, r1 + ldr r5, [r2, #0x0] + add r1, r6, r1 + add r5, r5, r1 + mov r1, r5, lsl #0x7 + orr r1, r1, r5, lsr #0x19 + add r5, r4, r1 + mvn r1, r5 + and r6, r5, r4 + and r1, r1, lr + orr r1, r6, r1 + ldr r6, [r8, #0x4] + add r1, r12, r1 + ldr r9, [r2, #0x4] + add r1, r6, r1 + add r6, r9, r1 + mov r1, r6, lsl #0xc + orr r1, r1, r6, lsr #0x14 + add r12, r5, r1 + mvn r1, r12 + and r6, r12, r5 + and r1, r1, r4 + orr r6, r6, r1 + add r1, r8, #0xc + ldr r9, [r8, #0x8] + add r6, lr, r6 + add r6, r9, r6 + ldr r9, [r2, #0x8] + ldr r1, [r1, #0x0] + add r10, r9, r6 + add r6, r2, #0xc + ldr r6, [r6, #0x0] + mov r9, r10, lsl #0x11 + orr r9, r9, r10, lsr #0xf + add lr, r12, r9 + add r2, r2, #0x10 + add r8, r8, #0x10 + and r10, lr, r12 + mvn r9, lr + and r9, r9, r5 + orr r9, r10, r9 + add r4, r4, r9 + add r1, r1, r4 + add r4, r6, r1 + mov r1, r4, lsl #0x16 + orr r1, r1, r4, lsr #0xa + add r4, lr, r1 + add r7, r7, #0x1 + cmp r7, #0x4 + blt _020D27C0 + ldr r6, _020D2B7C ; =0x02106840 + mov r1, #0x0 +_020D28A4: + mvn r7, r12 + ldr r9, [r6, #0x0] + and r8, r4, r12 + and r7, lr, r7 + orr r7, r8, r7 + ldr r8, [r3, r9, lsl #0x2] + add r5, r5, r7 + ldr r7, [r2, #0x0] + add r5, r8, r5 + add r7, r7, r5 + mov r5, r7, lsl #0x5 + orr r5, r5, r7, lsr #0x1b + add r5, r4, r5 + mvn r8, lr + ldr r7, [r6, #0x4] + and r9, r5, lr + and r8, r4, r8 + orr r10, r9, r8 + mvn r8, r4 + ldr r9, [r6, #0x8] + ldr r11, [r3, r7, lsl #0x2] + add r7, r12, r10 + add r10, r11, r7 + add r7, r6, #0xc + ldr r9, [r3, r9, lsl #0x2] + and r8, r5, r8 + ldr r7, [r7, #0x0] + ldr r11, [r2, #0x4] + ldr r7, [r3, r7, lsl #0x2] + add r11, r11, r10 + mov r10, r11, lsl #0x9 + orr r10, r10, r11, lsr #0x17 + add r12, r5, r10 + ldr r10, [r2, #0x8] + and r11, r12, r4 + orr r8, r11, r8 + add r8, lr, r8 + add r8, r9, r8 + add r10, r10, r8 + add r8, r2, #0xc + ldr r8, [r8, #0x0] + mov r9, r10, lsl #0xe + orr r9, r9, r10, lsr #0x12 + add lr, r12, r9 + add r2, r2, #0x10 + add r6, r6, #0x10 + and r10, lr, r5 + mvn r9, r5 + and r9, r12, r9 + orr r9, r10, r9 + add r4, r4, r9 + add r4, r7, r4 + add r7, r8, r4 + mov r4, r7, lsl #0x14 + orr r4, r4, r7, lsr #0xc + add r4, lr, r4 + add r1, r1, #0x1 + cmp r1, #0x4 + blt _020D28A4 + mov r7, #0x0 +_020D2994: + ldr r8, [r6, #0x0] + eor r1, r4, lr + eor r1, r12, r1 + add r1, r5, r1 + ldr r8, [r3, r8, lsl #0x2] + ldr r5, [r2, #0x0] + add r1, r8, r1 + add r5, r5, r1 + mov r1, r5, lsl #0x4 + orr r1, r1, r5, lsr #0x1c + add r5, r4, r1 + ldr r8, [r6, #0x4] + eor r1, r5, r4 + eor r1, lr, r1 + ldr r8, [r3, r8, lsl #0x2] + add r1, r12, r1 + ldr r9, [r6, #0x8] + ldr r10, [r2, #0x4] + add r1, r8, r1 + add r8, r10, r1 + mov r1, r8, lsl #0xb + orr r1, r1, r8, lsr #0x15 + add r12, r5, r1 + eor r8, r12, r5 + eor r8, r4, r8 + ldr r9, [r3, r9, lsl #0x2] + add r8, lr, r8 + add r9, r9, r8 + ldr r10, [r2, #0x8] + add r1, r2, #0xc + ldr r8, [r6, #0xc] + add r10, r10, r9 + ldr r9, [r3, r8, lsl #0x2] + mov r8, r10, lsl #0x10 + orr r8, r8, r10, lsr #0x10 + add lr, r12, r8 + eor r8, lr, r12 + eor r8, r5, r8 + add r4, r4, r8 + add r7, r7, #0x1 + ldr r1, [r1, #0x0] + add r4, r9, r4 + add r4, r1, r4 + mov r1, r4, lsl #0x17 + orr r1, r1, r4, lsr #0x9 + add r2, r2, #0x10 + add r6, r6, #0x10 + add r4, lr, r1 + cmp r7, #0x4 + blt _020D2994 + mov r10, #0x0 +_020D2A60: + mvn r1, r12 + ldr r7, [r6, #0x0] + orr r1, r4, r1 + eor r1, lr, r1 + ldr r7, [r3, r7, lsl #0x2] + add r1, r5, r1 + ldr r5, [r2, #0x0] + add r1, r7, r1 + add r5, r5, r1 + mov r1, r5, lsl #0x6 + orr r1, r1, r5, lsr #0x1a + add r5, r4, r1 + mvn r1, lr + ldr r7, [r6, #0x4] + orr r1, r5, r1 + eor r1, r4, r1 + ldr r8, [r6, #0x8] + ldr r7, [r3, r7, lsl #0x2] + add r1, r12, r1 + ldr r9, [r2, #0x4] + add r1, r7, r1 + add r9, r9, r1 + mov r7, r9, lsl #0xa + add r1, r6, #0xc + orr r9, r7, r9, lsr #0x16 + ldr r1, [r1, #0x0] + add r7, r2, #0xc + add r12, r5, r9 + ldr r8, [r3, r8, lsl #0x2] + ldr r7, [r7, #0x0] + ldr r1, [r3, r1, lsl #0x2] + ldr r9, [r2, #0x8] + mvn r11, r4 + orr r11, r12, r11 + eor r11, r5, r11 + add r11, lr, r11 + add r8, r8, r11 + add r9, r9, r8 + mov r8, r9, lsl #0xf + orr r8, r8, r9, lsr #0x11 + add lr, r12, r8 + add r2, r2, #0x10 + add r6, r6, #0x10 + mvn r8, r5 + orr r8, lr, r8 + eor r8, r12, r8 + add r4, r4, r8 + add r1, r1, r4 + add r4, r7, r1 + mov r1, r4, lsl #0x15 + orr r1, r1, r4, lsr #0xb + add r4, lr, r1 + add r10, r10, #0x1 + cmp r10, #0x4 + blt _020D2A60 + ldr r1, [r0, #0x0] + add r1, r1, r5 + str r1, [r0, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, r4 + str r1, [r0, #0x4] + ldr r1, [r0, #0x8] + add r1, r1, lr + str r1, [r0, #0x8] + ldr r1, [r0, #0xc] + add r1, r1, r12 + str r1, [r0, #0xc] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D2B78: .word Unk_02106900 ; = 0x02106900 +_020D2B7C: .word Unk_02106840 ; = 0x02106840 + + arm_func_start DGT_Hash1GetDigest_R +DGT_Hash1GetDigest_R: ; 0x020D2B80 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r1 + ldr r1, [r6, #0x14] + ldr r3, [r6, #0x10] + mov r7, r0 + mov r4, r1, lsl #0x3 + ldr r1, _020D2C40 ; =0x0210683C + mov r0, r6 + mov r2, #0x1 + orr r4, r4, r3, lsr #0x1d + mov r5, r3, lsl #0x3 + bl DGT_Hash1SetSource + ldr r0, [r6, #0x10] + mov r1, #0x0 + and r3, r0, #0x3f + rsb r2, r3, #0x40 + cmp r2, #0x8 + bhs _020D2BE8 + add r0, r6, #0x18 + add r0, r0, r3 + bl MI_CpuFill8 + mov r0, r6 + bl ProcessBlock + mov r3, #0x0 + mov r2, #0x40 +_020D2BE8: + cmp r2, #0x8 + bls _020D2C04 + add r0, r6, #0x18 + add r0, r0, r3 + sub r2, r2, #0x8 + mov r1, #0x0 + bl MI_CpuFill8 +_020D2C04: + str r5, [r6, #0x50] + mov r0, r6 + str r4, [r6, #0x54] + bl ProcessBlock + mov r0, r6 + mov r1, r7 + mov r2, #0x10 + bl MI_CpuCopy8 + mov r0, r6 + mov r1, #0x0 + mov r2, #0x58 + bl MI_CpuFill8 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D2C40: .word Unk_0210683C ; = 0x0210683C + + arm_func_start DGT_Hash1SetSource +DGT_Hash1SetSource: ; 0x020D2C44 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r8, r0 + add r12, r8, #0x10 + ldr r4, [r8, #0x10] + mov r6, r2 + and r3, r4, #0x3f + ldr r0, [r12, #0x4] + adds r4, r4, r6 + str r4, [r8, #0x10] + adc r0, r0, #0x0 + rsb r5, r3, #0x40 + mov r7, r1 + str r0, [r12, #0x4] + cmp r5, r6 + bls _020D2CB0 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + add r1, r8, #0x18 + mov r0, r7 + add r1, r1, r3 + bl MI_CpuCopy8 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr +_020D2CB0: + add r1, r8, #0x18 + mov r0, r7 + mov r2, r5 + add r1, r1, r3 + bl MI_CpuCopy8 + mov r0, r8 + bl ProcessBlock + sub r6, r6, r5 + mov r4, r6, lsr #0x6 + cmp r4, #0x0 + add r9, r7, r5 + ble _020D2D10 + add r7, r8, #0x18 + mov r5, #0x40 +_020D2CE8: + mov r0, r9 + mov r1, r7 + mov r2, r5 + bl MI_CpuCopy8 + mov r0, r8 + add r9, r9, #0x40 + bl ProcessBlock + sub r4, r4, #0x1 + cmp r4, #0x0 + bgt _020D2CE8 +_020D2D10: + ands r2, r6, #0x3f + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + mov r0, r9 + add r1, r8, #0x18 + bl MI_CpuCopy8 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start DGT_Hash1Reset +DGT_Hash1Reset: ; 0x020D2D38 + ldr r2, _020D2D68 ; =0x67452301 + ldr r1, _020D2D6C ; =0xEFCDAB89 + str r2, [r0, #0x0] + ldr r2, _020D2D70 ; =0x98BADCFE + str r1, [r0, #0x4] + ldr r1, _020D2D74 ; =0x10325476 + str r2, [r0, #0x8] + str r1, [r0, #0xc] + mov r1, #0x0 + str r1, [r0, #0x10] + str r1, [r0, #0x14] + bx lr + .balign 4 +_020D2D68: .word 0x67452301 +_020D2D6C: .word 0xEFCDAB89 +_020D2D70: .word 0x98BADCFE +_020D2D74: .word 0x10325476 diff --git a/arm9/asm/DGT_hash2.s b/arm9/asm/DGT_hash2.s new file mode 100644 index 00000000..614d700d --- /dev/null +++ b/arm9/asm/DGT_hash2.s @@ -0,0 +1,443 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start DGT_Hash2CalcHmac +DGT_Hash2CalcHmac: ; 0x020D2D78 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0xa0 + ldr lr, _020D2E00 ; =0x02106A04 + add r12, sp, #0x1c + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + mov r4, r12 + ldmia lr!, {r0-r3} + stmia r12!, {r0-r3} + ldmia lr, {r0-r2} + stmia r12, {r0-r2} + add lr, sp, #0x38 + add r12, sp, #0x8 + str lr, [sp, #0x24] + ldr lr, _020D2E04 ; =DGT_Hash2Reset + str r12, [sp, #0x28] + ldr ip, _020D2E08 ; =DGT_Hash2SetSource + str lr, [sp, #0x2c] + ldr lr, _020D2E0C ; =DGT_Hash2GetDigest + str r12, [sp, #0x30] + ldr r12, [sp, #0xb8] + str lr, [sp, #0x34] + str r12, [sp, #0x0] + mov r3, r5 + mov r0, r8 + mov r1, r7 + mov r2, r6 + str r4, [sp, #0x4] + bl DGTi_Hash2CalcHmac + add sp, sp, #0xa0 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D2E00: .word Unk_02106A04 ; = 0x02106A04 +_020D2E04: .word DGT_Hash2Reset +_020D2E08: .word DGT_Hash2SetSource +_020D2E0C: .word DGT_Hash2GetDigest + + arm_func_start DGT_Hash2GetDigest +DGT_Hash2GetDigest: ; 0x020D2E10 + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r6,lr} + ldr r0, [sp, #0x10] + mov r6, r1 + ldr r3, [r0, #0x1c] + add r5, r0, #0x20 + ands r1, r3, #0x3 + mov r0, r3, asr #0x2 + moveq r1, #0x0 + streq r1, [r5, r0, lsl #0x2] + ldr r2, [sp, #0x10] + mov r1, #0x80 + add r4, r2, #0x20 + strb r1, [r4, r3] + add r3, r3, #0x1 + ands r1, r3, #0x3 + beq _020D2E68 + mov r2, #0x0 +_020D2E58: + strb r2, [r4, r3] + add r3, r3, #0x1 + ands r1, r3, #0x3 + bne _020D2E58 +_020D2E68: + ldr r1, [sp, #0x10] + add r0, r0, #0x1 + ldr r1, [r1, #0x1c] + cmp r1, #0x38 + blt _020D2EB4 + cmp r0, #0x10 + bge _020D2E98 + mov r1, #0x0 +_020D2E88: + str r1, [r5, r0, lsl #0x2] + add r0, r0, #0x1 + cmp r0, #0x10 + blt _020D2E88 +_020D2E98: + ldr r1, _020D3008 ; =0x02106A00 + ldr r0, [sp, #0x10] + ldr r3, [r1, #0x0] + mov r1, r5 + mov r2, #0x40 + blx r3 + mov r0, #0x0 +_020D2EB4: + cmp r0, #0xe + bge _020D2ED0 + mov r1, #0x0 +_020D2EC0: + str r1, [r5, r0, lsl #0x2] + add r0, r0, #0x1 + cmp r0, #0xe + blt _020D2EC0 +_020D2ED0: + ldr r0, [sp, #0x10] + mov r1, r5 + ldr r2, [r0, #0x14] + ldr r3, _020D3008 ; =0x02106A00 + strb r2, [r4, #0x3f] + mov r0, r2, lsr #0x8 + strb r0, [r4, #0x3e] + mov r0, r2, lsr #0x10 + strb r0, [r4, #0x3d] + mov r0, r2, lsr #0x18 + strb r0, [r4, #0x3c] + ldr r0, [sp, #0x10] + mov r2, #0x40 + ldr r5, [r0, #0x18] + strb r5, [r4, #0x3b] + mov r0, r5, lsr #0x8 + strb r0, [r4, #0x3a] + mov r0, r5, lsr #0x10 + strb r0, [r4, #0x39] + mov r0, r5, lsr #0x18 + strb r0, [r4, #0x38] + ldr r0, [sp, #0x10] + ldr r3, [r3, #0x0] + blx r3 + ldr r0, [sp, #0x10] + add r1, sp, #0x10 + ldr r3, [r0, #0x0] + mov r0, #0x0 + mov r2, r3, lsr #0x18 + strb r2, [r6, #0x0] + mov r2, r3, lsr #0x10 + strb r2, [r6, #0x1] + mov r2, r3, lsr #0x8 + strb r2, [r6, #0x2] + strb r3, [r6, #0x3] + ldr r3, [sp, #0x10] + mov r2, #0x4 + ldr r4, [r3, #0x4] + mov r3, r4, lsr #0x18 + strb r3, [r6, #0x4] + mov r3, r4, lsr #0x10 + strb r3, [r6, #0x5] + mov r3, r4, lsr #0x8 + strb r3, [r6, #0x6] + strb r4, [r6, #0x7] + ldr r3, [sp, #0x10] + ldr r4, [r3, #0x8] + mov r3, r4, lsr #0x18 + strb r3, [r6, #0x8] + mov r3, r4, lsr #0x10 + strb r3, [r6, #0x9] + mov r3, r4, lsr #0x8 + strb r3, [r6, #0xa] + strb r4, [r6, #0xb] + ldr r3, [sp, #0x10] + ldr r4, [r3, #0xc] + mov r3, r4, lsr #0x18 + strb r3, [r6, #0xc] + mov r3, r4, lsr #0x10 + strb r3, [r6, #0xd] + mov r3, r4, lsr #0x8 + strb r3, [r6, #0xe] + strb r4, [r6, #0xf] + ldr r3, [sp, #0x10] + ldr r4, [r3, #0x10] + mov r3, r4, lsr #0x18 + strb r3, [r6, #0x10] + mov r3, r4, lsr #0x10 + strb r3, [r6, #0x11] + mov r3, r4, lsr #0x8 + strb r3, [r6, #0x12] + strb r4, [r6, #0x13] + ldr r3, [sp, #0x10] + str r0, [r3, #0x1c] + bl MIi_CpuClear32 + ldmia sp!, {r4-r6,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020D3008: .word Unk_02106A00 ; = 0x02106A00 + + arm_func_start DGT_Hash2SetSource +DGT_Hash2SetSource: ; 0x020D300C + stmdb sp!, {r4-r8,lr} + mov r8, r0 + movs r6, r2 + mov r7, r1 + add r5, r8, #0x20 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, [r8, #0x14] + add r1, r0, r6, lsl #0x3 + cmp r1, r0 + ldrcc r0, [r8, #0x18] + addcc r0, r0, #0x1 + strcc r0, [r8, #0x18] + ldr r0, [r8, #0x18] + add r0, r0, r6, lsr #0x1d + str r0, [r8, #0x18] + str r1, [r8, #0x14] + ldr r1, [r8, #0x1c] + cmp r1, #0x0 + beq _020D30CC + add r0, r1, r6 + cmp r0, #0x40 + blo _020D30A8 + rsb r4, r1, #0x40 + mov r0, r7 + mov r2, r4 + add r1, r5, r1 + bl MI_CpuCopy8 + ldr r1, _020D3164 ; =0x02106A00 + mov r0, r8 + ldr r3, [r1, #0x0] + mov r1, r5 + mov r2, #0x40 + sub r6, r6, r4 + add r7, r7, r4 + blx r3 + mov r0, #0x0 + str r0, [r8, #0x1c] + b _020D30CC +_020D30A8: + mov r0, r7 + mov r2, r6 + add r1, r5, r1 + bl MI_CpuCopy8 + ldr r0, [r8, #0x1c] + add r0, r0, r6 + str r0, [r8, #0x1c] + ldmia sp!, {r4-r8,lr} + bx lr +_020D30CC: + cmp r6, #0x40 + blo _020D313C + bic r4, r6, #0x3f + sub r6, r6, r4 + ands r0, r7, #0x3 + bne _020D3104 + ldr r1, _020D3164 ; =0x02106A00 + mov r0, r8 + ldr r3, [r1, #0x0] + mov r1, r7 + mov r2, r4 + blx r3 + add r7, r7, r4 + b _020D313C +_020D3104: + mov r0, r7 + mov r1, r5 + mov r2, #0x40 + bl MI_CpuCopy8 + ldr r1, _020D3164 ; =0x02106A00 + mov r0, r8 + ldr r3, [r1, #0x0] + mov r1, r5 + mov r2, #0x40 + add r7, r7, #0x40 + blx r3 + sub r4, r4, #0x40 + cmp r4, #0x0 + bgt _020D3104 +_020D313C: + str r6, [r8, #0x1c] + cmp r6, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + mov r0, r7 + mov r1, r5 + mov r2, r6 + bl MI_CpuCopy8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D3164: .word Unk_02106A00 ; = 0x02106A00 + + arm_func_start DGT_Hash2Reset +DGT_Hash2Reset: ; 0x020D3168 + ldr r1, _020D31A4 ; =0x67452301 + ldr r2, _020D31A8 ; =0xEFCDAB89 + str r1, [r0, #0x0] + ldr r1, _020D31AC ; =0x98BADCFE + str r2, [r0, #0x4] + ldr r2, _020D31B0 ; =0x10325476 + str r1, [r0, #0x8] + ldr r1, _020D31B4 ; =0xC3D2E1F0 + str r2, [r0, #0xc] + str r1, [r0, #0x10] + mov r1, #0x0 + str r1, [r0, #0x14] + str r1, [r0, #0x18] + str r1, [r0, #0x1c] + bx lr + .balign 4 +_020D31A4: .word 0x67452301 +_020D31A8: .word 0xEFCDAB89 +_020D31AC: .word 0x98BADCFE +_020D31B0: .word 0x10325476 +_020D31B4: .word 0xC3D2E1F0 + + arm_func_start DGTi_Hash2CalcHmac +DGTi_Hash2CalcHmac: ; 0x020D31B8 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0xc4 + ldr r5, [sp, #0xe0] + ldr r4, [sp, #0xe4] + movs r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r8, #0x0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r7, #0x0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r6, #0x0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r5, #0x0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r4, #0x0 + addeq sp, sp, #0xc4 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ldr r0, [r4, #0x4] + cmp r5, r0 + ble _020D3278 + ldr r0, [r4, #0x8] + ldr r1, [r4, #0x10] + blx r1 + ldr r0, [r4, #0x8] + ldr r3, [r4, #0x14] + mov r1, r6 + mov r2, r5 + blx r3 + ldr r0, [r4, #0x8] + ldr r2, [r4, #0x18] + add r1, sp, #0x0 + blx r2 + ldr r5, [r4, #0x0] + add r6, sp, #0x0 +_020D3278: + cmp r5, #0x0 + mov r0, #0x0 + ble _020D32A0 + add r2, sp, #0x40 +_020D3288: + ldrb r1, [r6, r0] + add r0, r0, #0x1 + cmp r0, r5 + eor r1, r1, #0x36 + strb r1, [r2], #0x1 + blt _020D3288 +_020D32A0: + ldr r1, [r4, #0x4] + cmp r0, r1 + bge _020D32CC + add r1, sp, #0x40 + add r3, r1, r0 + mov r2, #0x36 +_020D32B8: + strb r2, [r3], #0x1 + ldr r1, [r4, #0x4] + add r0, r0, #0x1 + cmp r0, r1 + blt _020D32B8 +_020D32CC: + ldr r0, [r4, #0x8] + ldr r1, [r4, #0x10] + blx r1 + ldr r0, [r4, #0x8] + ldr r2, [r4, #0x4] + ldr r3, [r4, #0x14] + add r1, sp, #0x40 + blx r3 + ldr r0, [r4, #0x8] + ldr r3, [r4, #0x14] + mov r1, r8 + mov r2, r7 + blx r3 + ldr r0, [r4, #0x8] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x18] + blx r2 + cmp r5, #0x0 + mov r2, #0x0 + ble _020D3338 + add r1, sp, #0x80 +_020D3320: + ldrb r0, [r6, r2] + add r2, r2, #0x1 + cmp r2, r5 + eor r0, r0, #0x5c + strb r0, [r1], #0x1 + blt _020D3320 +_020D3338: + ldr r0, [r4, #0x4] + cmp r2, r0 + bge _020D3364 + add r0, sp, #0x80 + add r3, r0, r2 + mov r1, #0x5c +_020D3350: + strb r1, [r3], #0x1 + ldr r0, [r4, #0x4] + add r2, r2, #0x1 + cmp r2, r0 + blt _020D3350 +_020D3364: + ldr r0, [r4, #0x8] + ldr r1, [r4, #0x10] + blx r1 + ldr r0, [r4, #0x8] + ldr r2, [r4, #0x4] + ldr r3, [r4, #0x14] + add r1, sp, #0x80 + blx r3 + ldr r0, [r4, #0x8] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x0] + ldr r3, [r4, #0x14] + blx r3 + ldr r0, [r4, #0x8] + ldr r2, [r4, #0x18] + mov r1, r9 + blx r2 + add sp, sp, #0xc4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 diff --git a/arm9/asm/DGT_sha1s_arm4cw.s b/arm9/asm/DGT_sha1s_arm4cw.s new file mode 100644 index 00000000..1f110a72 --- /dev/null +++ b/arm9/asm/DGT_sha1s_arm4cw.s @@ -0,0 +1,179 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + +_020D33B4: .word 0x00FF00FF +_020D33B8: .word 0x5A827999 +_020D33BC: .word 0x6ED9EBA1 +_020D33C0: .word 0x8F1BBCDC +_020D33C4: .word 0xCA62C1D6 + + arm_func_start DGTi_hash2_arm4_small +DGTi_hash2_arm4_small: ; 0x020D33C8 + stmdb sp!, {r4-r12,lr} + ldmia r0, {r3,r9-r12} + sub sp, sp, #0x84 + str r2, [sp, #0x80] +_020D33D8: + ldr r8, _020D33B8 ; =0x5A827999 + ldr r7, _020D33B4 ; =0x00FF00FF + mov r6, sp + mov r5, #0x0 +_020D33E8: + ldr r4, [r1], #0x4 + add r2, r8, r12 + add r2, r2, r3, ror #0x1B + and lr, r4, r7 + and r4, r7, r4, ror #0x18 + orr r4, r4, lr, ror #0x8 + str r4, [r6, #0x40] + str r4, [r6], #0x4 + add r2, r2, r4 + eor r4, r10, r11 + and r4, r4, r9 + eor r4, r4, r11 + add r2, r2, r4 + mov r9, r9, ror #0x2 + mov r12, r11 + mov r11, r10 + mov r10, r9 + mov r9, r3 + mov r3, r2 + add r5, r5, #0x4 + cmp r5, #0x40 + blt _020D33E8 + mov r7, #0x0 + mov r6, sp +_020D3448: + ldr r2, [r6, #0x0] + ldr r5, [r6, #0x8] + ldr r4, [r6, #0x20] + ldr lr, [r6, #0x34] + eor r2, r2, r5 + eor r4, r4, lr + eor r2, r2, r4 + mov r2, r2, ror #0x1F + str r2, [r6, #0x40] + str r2, [r6], #0x4 + add r2, r2, r12 + add r2, r2, r8 + add r2, r2, r3, ror #0x1B + eor r4, r10, r11 + and r4, r4, r9 + eor r4, r4, r11 + add r2, r2, r4 + mov r9, r9, ror #0x2 + mov r12, r11 + mov r11, r10 + mov r10, r9 + mov r9, r3 + mov r3, r2 + add r7, r7, #0x4 + cmp r7, #0x10 + blt _020D3448 + ldr r8, _020D33BC ; =0x6ED9EBA1 + mov r7, #0x0 +_020D34B8: + ldr r2, [r6, #0x0] + ldr r4, [r6, #0x8] + ldr lr, [r6, #0x20] + ldr r5, [r6, #0x34] + eor r2, r2, r4 + eor lr, lr, r5 + eor r2, r2, lr + mov r2, r2, ror #0x1F + str r2, [r6, #0x40] + str r2, [r6], #0x4 + add r2, r2, r12 + add r2, r2, r8 + add r2, r2, r3, ror #0x1B + eor lr, r9, r10 + eor lr, lr, r11 + add r2, r2, lr + mov r9, r9, ror #0x2 + mov r12, r11 + mov r11, r10 + mov r10, r9 + mov r9, r3 + mov r3, r2 + add r7, r7, #0x1 + cmp r7, #0xc + moveq r6, sp + cmp r7, #0x14 + blt _020D34B8 + ldr r8, _020D33C0 ; =0x8F1BBCDC + mov r7, #0x0 +_020D352C: + ldr r2, [r6, #0x0] + ldr lr, [r6, #0x8] + ldr r5, [r6, #0x20] + ldr r4, [r6, #0x34] + eor r2, r2, lr + eor r5, r5, r4 + eor r2, r2, r5 + mov r2, r2, ror #0x1F + str r2, [r6, #0x40] + str r2, [r6], #0x4 + add r2, r2, r12 + add r2, r2, r8 + add r2, r2, r3, ror #0x1B + orr r5, r9, r10 + and r5, r5, r11 + and r4, r9, r10 + orr r5, r5, r4 + add r2, r2, r5 + mov r9, r9, ror #0x2 + mov r12, r11 + mov r11, r10 + mov r10, r9 + mov r9, r3 + mov r3, r2 + add r7, r7, #0x1 + cmp r7, #0x8 + moveq r6, sp + cmp r7, #0x14 + blt _020D352C + ldr r8, _020D33C4 ; =0xCA62C1D6 + mov r7, #0x0 +_020D35A8: + ldr r2, [r6, #0x0] + ldr r5, [r6, #0x8] + ldr r4, [r6, #0x20] + ldr lr, [r6, #0x34] + eor r2, r2, r5 + eor r4, r4, lr + eor r2, r2, r4 + mov r2, r2, ror #0x1F + str r2, [r6, #0x40] + str r2, [r6], #0x4 + add r2, r2, r12 + add r2, r2, r8 + add r2, r2, r3, ror #0x1B + eor r4, r9, r10 + eor r4, r4, r11 + add r2, r2, r4 + mov r9, r9, ror #0x2 + mov r12, r11 + mov r11, r10 + mov r10, r9 + mov r9, r3 + mov r3, r2 + add r7, r7, #0x1 + cmp r7, #0x4 + moveq r6, sp + cmp r7, #0x14 + blt _020D35A8 + ldmia r0, {r2,r4,r6-r7,lr} + add r3, r3, r2 + add r9, r9, r4 + add r10, r10, r6 + add r11, r11, r7 + add r12, r12, lr + stmia r0, {r3,r9-r12} + ldr lr, [sp, #0x80] + subs lr, lr, #0x40 + str lr, [sp, #0x80] + bgt _020D33D8 + add sp, sp, #0x84 + ldmia sp!, {r4-r12,pc} diff --git a/arm9/asm/libdgt.s b/arm9/asm/libdgt.s deleted file mode 100644 index 02a3293f..00000000 --- a/arm9/asm/libdgt.s +++ /dev/null @@ -1,1017 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start ProcessBlock -ProcessBlock: ; 0x020D2798 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - add r3, r0, #0x18 - ldr r5, [r0, #0x0] - ldr r4, [r0, #0x4] - ldr lr, [r0, #0x8] - ldr r12, [r0, #0xc] - ldr r2, _020D2B78 ; =0x02106900 - mov r8, r3 - mov r7, #0x0 -_020D27C0: - mvn r1, r4 - and r6, r4, lr - and r1, r1, r12 - orr r1, r6, r1 - ldr r6, [r8, #0x0] - add r1, r5, r1 - ldr r5, [r2, #0x0] - add r1, r6, r1 - add r5, r5, r1 - mov r1, r5, lsl #0x7 - orr r1, r1, r5, lsr #0x19 - add r5, r4, r1 - mvn r1, r5 - and r6, r5, r4 - and r1, r1, lr - orr r1, r6, r1 - ldr r6, [r8, #0x4] - add r1, r12, r1 - ldr r9, [r2, #0x4] - add r1, r6, r1 - add r6, r9, r1 - mov r1, r6, lsl #0xc - orr r1, r1, r6, lsr #0x14 - add r12, r5, r1 - mvn r1, r12 - and r6, r12, r5 - and r1, r1, r4 - orr r6, r6, r1 - add r1, r8, #0xc - ldr r9, [r8, #0x8] - add r6, lr, r6 - add r6, r9, r6 - ldr r9, [r2, #0x8] - ldr r1, [r1, #0x0] - add r10, r9, r6 - add r6, r2, #0xc - ldr r6, [r6, #0x0] - mov r9, r10, lsl #0x11 - orr r9, r9, r10, lsr #0xf - add lr, r12, r9 - add r2, r2, #0x10 - add r8, r8, #0x10 - and r10, lr, r12 - mvn r9, lr - and r9, r9, r5 - orr r9, r10, r9 - add r4, r4, r9 - add r1, r1, r4 - add r4, r6, r1 - mov r1, r4, lsl #0x16 - orr r1, r1, r4, lsr #0xa - add r4, lr, r1 - add r7, r7, #0x1 - cmp r7, #0x4 - blt _020D27C0 - ldr r6, _020D2B7C ; =0x02106840 - mov r1, #0x0 -_020D28A4: - mvn r7, r12 - ldr r9, [r6, #0x0] - and r8, r4, r12 - and r7, lr, r7 - orr r7, r8, r7 - ldr r8, [r3, r9, lsl #0x2] - add r5, r5, r7 - ldr r7, [r2, #0x0] - add r5, r8, r5 - add r7, r7, r5 - mov r5, r7, lsl #0x5 - orr r5, r5, r7, lsr #0x1b - add r5, r4, r5 - mvn r8, lr - ldr r7, [r6, #0x4] - and r9, r5, lr - and r8, r4, r8 - orr r10, r9, r8 - mvn r8, r4 - ldr r9, [r6, #0x8] - ldr r11, [r3, r7, lsl #0x2] - add r7, r12, r10 - add r10, r11, r7 - add r7, r6, #0xc - ldr r9, [r3, r9, lsl #0x2] - and r8, r5, r8 - ldr r7, [r7, #0x0] - ldr r11, [r2, #0x4] - ldr r7, [r3, r7, lsl #0x2] - add r11, r11, r10 - mov r10, r11, lsl #0x9 - orr r10, r10, r11, lsr #0x17 - add r12, r5, r10 - ldr r10, [r2, #0x8] - and r11, r12, r4 - orr r8, r11, r8 - add r8, lr, r8 - add r8, r9, r8 - add r10, r10, r8 - add r8, r2, #0xc - ldr r8, [r8, #0x0] - mov r9, r10, lsl #0xe - orr r9, r9, r10, lsr #0x12 - add lr, r12, r9 - add r2, r2, #0x10 - add r6, r6, #0x10 - and r10, lr, r5 - mvn r9, r5 - and r9, r12, r9 - orr r9, r10, r9 - add r4, r4, r9 - add r4, r7, r4 - add r7, r8, r4 - mov r4, r7, lsl #0x14 - orr r4, r4, r7, lsr #0xc - add r4, lr, r4 - add r1, r1, #0x1 - cmp r1, #0x4 - blt _020D28A4 - mov r7, #0x0 -_020D2994: - ldr r8, [r6, #0x0] - eor r1, r4, lr - eor r1, r12, r1 - add r1, r5, r1 - ldr r8, [r3, r8, lsl #0x2] - ldr r5, [r2, #0x0] - add r1, r8, r1 - add r5, r5, r1 - mov r1, r5, lsl #0x4 - orr r1, r1, r5, lsr #0x1c - add r5, r4, r1 - ldr r8, [r6, #0x4] - eor r1, r5, r4 - eor r1, lr, r1 - ldr r8, [r3, r8, lsl #0x2] - add r1, r12, r1 - ldr r9, [r6, #0x8] - ldr r10, [r2, #0x4] - add r1, r8, r1 - add r8, r10, r1 - mov r1, r8, lsl #0xb - orr r1, r1, r8, lsr #0x15 - add r12, r5, r1 - eor r8, r12, r5 - eor r8, r4, r8 - ldr r9, [r3, r9, lsl #0x2] - add r8, lr, r8 - add r9, r9, r8 - ldr r10, [r2, #0x8] - add r1, r2, #0xc - ldr r8, [r6, #0xc] - add r10, r10, r9 - ldr r9, [r3, r8, lsl #0x2] - mov r8, r10, lsl #0x10 - orr r8, r8, r10, lsr #0x10 - add lr, r12, r8 - eor r8, lr, r12 - eor r8, r5, r8 - add r4, r4, r8 - add r7, r7, #0x1 - ldr r1, [r1, #0x0] - add r4, r9, r4 - add r4, r1, r4 - mov r1, r4, lsl #0x17 - orr r1, r1, r4, lsr #0x9 - add r2, r2, #0x10 - add r6, r6, #0x10 - add r4, lr, r1 - cmp r7, #0x4 - blt _020D2994 - mov r10, #0x0 -_020D2A60: - mvn r1, r12 - ldr r7, [r6, #0x0] - orr r1, r4, r1 - eor r1, lr, r1 - ldr r7, [r3, r7, lsl #0x2] - add r1, r5, r1 - ldr r5, [r2, #0x0] - add r1, r7, r1 - add r5, r5, r1 - mov r1, r5, lsl #0x6 - orr r1, r1, r5, lsr #0x1a - add r5, r4, r1 - mvn r1, lr - ldr r7, [r6, #0x4] - orr r1, r5, r1 - eor r1, r4, r1 - ldr r8, [r6, #0x8] - ldr r7, [r3, r7, lsl #0x2] - add r1, r12, r1 - ldr r9, [r2, #0x4] - add r1, r7, r1 - add r9, r9, r1 - mov r7, r9, lsl #0xa - add r1, r6, #0xc - orr r9, r7, r9, lsr #0x16 - ldr r1, [r1, #0x0] - add r7, r2, #0xc - add r12, r5, r9 - ldr r8, [r3, r8, lsl #0x2] - ldr r7, [r7, #0x0] - ldr r1, [r3, r1, lsl #0x2] - ldr r9, [r2, #0x8] - mvn r11, r4 - orr r11, r12, r11 - eor r11, r5, r11 - add r11, lr, r11 - add r8, r8, r11 - add r9, r9, r8 - mov r8, r9, lsl #0xf - orr r8, r8, r9, lsr #0x11 - add lr, r12, r8 - add r2, r2, #0x10 - add r6, r6, #0x10 - mvn r8, r5 - orr r8, lr, r8 - eor r8, r12, r8 - add r4, r4, r8 - add r1, r1, r4 - add r4, r7, r1 - mov r1, r4, lsl #0x15 - orr r1, r1, r4, lsr #0xb - add r4, lr, r1 - add r10, r10, #0x1 - cmp r10, #0x4 - blt _020D2A60 - ldr r1, [r0, #0x0] - add r1, r1, r5 - str r1, [r0, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, r4 - str r1, [r0, #0x4] - ldr r1, [r0, #0x8] - add r1, r1, lr - str r1, [r0, #0x8] - ldr r1, [r0, #0xc] - add r1, r1, r12 - str r1, [r0, #0xc] - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D2B78: .word Unk_02106900 ; = 0x02106900 -_020D2B7C: .word Unk_02106840 ; = 0x02106840 - - arm_func_start DGT_Hash1GetDigest_R -DGT_Hash1GetDigest_R: ; 0x020D2B80 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r1 - ldr r1, [r6, #0x14] - ldr r3, [r6, #0x10] - mov r7, r0 - mov r4, r1, lsl #0x3 - ldr r1, _020D2C40 ; =0x0210683C - mov r0, r6 - mov r2, #0x1 - orr r4, r4, r3, lsr #0x1d - mov r5, r3, lsl #0x3 - bl DGT_Hash1SetSource - ldr r0, [r6, #0x10] - mov r1, #0x0 - and r3, r0, #0x3f - rsb r2, r3, #0x40 - cmp r2, #0x8 - bhs _020D2BE8 - add r0, r6, #0x18 - add r0, r0, r3 - bl MI_CpuFill8 - mov r0, r6 - bl ProcessBlock - mov r3, #0x0 - mov r2, #0x40 -_020D2BE8: - cmp r2, #0x8 - bls _020D2C04 - add r0, r6, #0x18 - add r0, r0, r3 - sub r2, r2, #0x8 - mov r1, #0x0 - bl MI_CpuFill8 -_020D2C04: - str r5, [r6, #0x50] - mov r0, r6 - str r4, [r6, #0x54] - bl ProcessBlock - mov r0, r6 - mov r1, r7 - mov r2, #0x10 - bl MI_CpuCopy8 - mov r0, r6 - mov r1, #0x0 - mov r2, #0x58 - bl MI_CpuFill8 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D2C40: .word Unk_0210683C ; = 0x0210683C - - arm_func_start DGT_Hash1SetSource -DGT_Hash1SetSource: ; 0x020D2C44 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r8, r0 - add r12, r8, #0x10 - ldr r4, [r8, #0x10] - mov r6, r2 - and r3, r4, #0x3f - ldr r0, [r12, #0x4] - adds r4, r4, r6 - str r4, [r8, #0x10] - adc r0, r0, #0x0 - rsb r5, r3, #0x40 - mov r7, r1 - str r0, [r12, #0x4] - cmp r5, r6 - bls _020D2CB0 - cmp r6, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - add r1, r8, #0x18 - mov r0, r7 - add r1, r1, r3 - bl MI_CpuCopy8 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr -_020D2CB0: - add r1, r8, #0x18 - mov r0, r7 - mov r2, r5 - add r1, r1, r3 - bl MI_CpuCopy8 - mov r0, r8 - bl ProcessBlock - sub r6, r6, r5 - mov r4, r6, lsr #0x6 - cmp r4, #0x0 - add r9, r7, r5 - ble _020D2D10 - add r7, r8, #0x18 - mov r5, #0x40 -_020D2CE8: - mov r0, r9 - mov r1, r7 - mov r2, r5 - bl MI_CpuCopy8 - mov r0, r8 - add r9, r9, #0x40 - bl ProcessBlock - sub r4, r4, #0x1 - cmp r4, #0x0 - bgt _020D2CE8 -_020D2D10: - ands r2, r6, #0x3f - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - mov r0, r9 - add r1, r8, #0x18 - bl MI_CpuCopy8 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr - - arm_func_start DGT_Hash1Reset -DGT_Hash1Reset: ; 0x020D2D38 - ldr r2, _020D2D68 ; =0x67452301 - ldr r1, _020D2D6C ; =0xEFCDAB89 - str r2, [r0, #0x0] - ldr r2, _020D2D70 ; =0x98BADCFE - str r1, [r0, #0x4] - ldr r1, _020D2D74 ; =0x10325476 - str r2, [r0, #0x8] - str r1, [r0, #0xc] - mov r1, #0x0 - str r1, [r0, #0x10] - str r1, [r0, #0x14] - bx lr - .balign 4 -_020D2D68: .word 0x67452301 -_020D2D6C: .word 0xEFCDAB89 -_020D2D70: .word 0x98BADCFE -_020D2D74: .word 0x10325476 - - arm_func_start DGT_Hash2CalcHmac -DGT_Hash2CalcHmac: ; 0x020D2D78 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0xa0 - ldr lr, _020D2E00 ; =0x02106A04 - add r12, sp, #0x1c - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - mov r4, r12 - ldmia lr!, {r0-r3} - stmia r12!, {r0-r3} - ldmia lr, {r0-r2} - stmia r12, {r0-r2} - add lr, sp, #0x38 - add r12, sp, #0x8 - str lr, [sp, #0x24] - ldr lr, _020D2E04 ; =MATH_SHA1Init - str r12, [sp, #0x28] - ldr ip, _020D2E08 ; =MATH_SHA1Update - str lr, [sp, #0x2c] - ldr lr, _020D2E0C ; =MATH_SHA1GetHash - str r12, [sp, #0x30] - ldr r12, [sp, #0xb8] - str lr, [sp, #0x34] - str r12, [sp, #0x0] - mov r3, r5 - mov r0, r8 - mov r1, r7 - mov r2, r6 - str r4, [sp, #0x4] - bl MATHi_CalcHMAC - add sp, sp, #0xa0 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D2E00: .word Unk_02106A04 ; = 0x02106A04 -_020D2E04: .word MATH_SHA1Init -_020D2E08: .word MATH_SHA1Update -_020D2E0C: .word MATH_SHA1GetHash - - arm_func_start MATH_SHA1GetHash -MATH_SHA1GetHash: ; 0x020D2E10 - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r6,lr} - ldr r0, [sp, #0x10] - mov r6, r1 - ldr r3, [r0, #0x1c] - add r5, r0, #0x20 - ands r1, r3, #0x3 - mov r0, r3, asr #0x2 - moveq r1, #0x0 - streq r1, [r5, r0, lsl #0x2] - ldr r2, [sp, #0x10] - mov r1, #0x80 - add r4, r2, #0x20 - strb r1, [r4, r3] - add r3, r3, #0x1 - ands r1, r3, #0x3 - beq _020D2E68 - mov r2, #0x0 -_020D2E58: - strb r2, [r4, r3] - add r3, r3, #0x1 - ands r1, r3, #0x3 - bne _020D2E58 -_020D2E68: - ldr r1, [sp, #0x10] - add r0, r0, #0x1 - ldr r1, [r1, #0x1c] - cmp r1, #0x38 - blt _020D2EB4 - cmp r0, #0x10 - bge _020D2E98 - mov r1, #0x0 -_020D2E88: - str r1, [r5, r0, lsl #0x2] - add r0, r0, #0x1 - cmp r0, #0x10 - blt _020D2E88 -_020D2E98: - ldr r1, _020D3008 ; =0x02106A00 - ldr r0, [sp, #0x10] - ldr r3, [r1, #0x0] - mov r1, r5 - mov r2, #0x40 - blx r3 - mov r0, #0x0 -_020D2EB4: - cmp r0, #0xe - bge _020D2ED0 - mov r1, #0x0 -_020D2EC0: - str r1, [r5, r0, lsl #0x2] - add r0, r0, #0x1 - cmp r0, #0xe - blt _020D2EC0 -_020D2ED0: - ldr r0, [sp, #0x10] - mov r1, r5 - ldr r2, [r0, #0x14] - ldr r3, _020D3008 ; =0x02106A00 - strb r2, [r4, #0x3f] - mov r0, r2, lsr #0x8 - strb r0, [r4, #0x3e] - mov r0, r2, lsr #0x10 - strb r0, [r4, #0x3d] - mov r0, r2, lsr #0x18 - strb r0, [r4, #0x3c] - ldr r0, [sp, #0x10] - mov r2, #0x40 - ldr r5, [r0, #0x18] - strb r5, [r4, #0x3b] - mov r0, r5, lsr #0x8 - strb r0, [r4, #0x3a] - mov r0, r5, lsr #0x10 - strb r0, [r4, #0x39] - mov r0, r5, lsr #0x18 - strb r0, [r4, #0x38] - ldr r0, [sp, #0x10] - ldr r3, [r3, #0x0] - blx r3 - ldr r0, [sp, #0x10] - add r1, sp, #0x10 - ldr r3, [r0, #0x0] - mov r0, #0x0 - mov r2, r3, lsr #0x18 - strb r2, [r6, #0x0] - mov r2, r3, lsr #0x10 - strb r2, [r6, #0x1] - mov r2, r3, lsr #0x8 - strb r2, [r6, #0x2] - strb r3, [r6, #0x3] - ldr r3, [sp, #0x10] - mov r2, #0x4 - ldr r4, [r3, #0x4] - mov r3, r4, lsr #0x18 - strb r3, [r6, #0x4] - mov r3, r4, lsr #0x10 - strb r3, [r6, #0x5] - mov r3, r4, lsr #0x8 - strb r3, [r6, #0x6] - strb r4, [r6, #0x7] - ldr r3, [sp, #0x10] - ldr r4, [r3, #0x8] - mov r3, r4, lsr #0x18 - strb r3, [r6, #0x8] - mov r3, r4, lsr #0x10 - strb r3, [r6, #0x9] - mov r3, r4, lsr #0x8 - strb r3, [r6, #0xa] - strb r4, [r6, #0xb] - ldr r3, [sp, #0x10] - ldr r4, [r3, #0xc] - mov r3, r4, lsr #0x18 - strb r3, [r6, #0xc] - mov r3, r4, lsr #0x10 - strb r3, [r6, #0xd] - mov r3, r4, lsr #0x8 - strb r3, [r6, #0xe] - strb r4, [r6, #0xf] - ldr r3, [sp, #0x10] - ldr r4, [r3, #0x10] - mov r3, r4, lsr #0x18 - strb r3, [r6, #0x10] - mov r3, r4, lsr #0x10 - strb r3, [r6, #0x11] - mov r3, r4, lsr #0x8 - strb r3, [r6, #0x12] - strb r4, [r6, #0x13] - ldr r3, [sp, #0x10] - str r0, [r3, #0x1c] - bl MIi_CpuClear32 - ldmia sp!, {r4-r6,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020D3008: .word Unk_02106A00 ; = 0x02106A00 - - arm_func_start MATH_SHA1Update -MATH_SHA1Update: ; 0x020D300C - stmdb sp!, {r4-r8,lr} - mov r8, r0 - movs r6, r2 - mov r7, r1 - add r5, r8, #0x20 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - ldr r0, [r8, #0x14] - add r1, r0, r6, lsl #0x3 - cmp r1, r0 - ldrcc r0, [r8, #0x18] - addcc r0, r0, #0x1 - strcc r0, [r8, #0x18] - ldr r0, [r8, #0x18] - add r0, r0, r6, lsr #0x1d - str r0, [r8, #0x18] - str r1, [r8, #0x14] - ldr r1, [r8, #0x1c] - cmp r1, #0x0 - beq _020D30CC - add r0, r1, r6 - cmp r0, #0x40 - blo _020D30A8 - rsb r4, r1, #0x40 - mov r0, r7 - mov r2, r4 - add r1, r5, r1 - bl MI_CpuCopy8 - ldr r1, _020D3164 ; =0x02106A00 - mov r0, r8 - ldr r3, [r1, #0x0] - mov r1, r5 - mov r2, #0x40 - sub r6, r6, r4 - add r7, r7, r4 - blx r3 - mov r0, #0x0 - str r0, [r8, #0x1c] - b _020D30CC -_020D30A8: - mov r0, r7 - mov r2, r6 - add r1, r5, r1 - bl MI_CpuCopy8 - ldr r0, [r8, #0x1c] - add r0, r0, r6 - str r0, [r8, #0x1c] - ldmia sp!, {r4-r8,lr} - bx lr -_020D30CC: - cmp r6, #0x40 - blo _020D313C - bic r4, r6, #0x3f - sub r6, r6, r4 - ands r0, r7, #0x3 - bne _020D3104 - ldr r1, _020D3164 ; =0x02106A00 - mov r0, r8 - ldr r3, [r1, #0x0] - mov r1, r7 - mov r2, r4 - blx r3 - add r7, r7, r4 - b _020D313C -_020D3104: - mov r0, r7 - mov r1, r5 - mov r2, #0x40 - bl MI_CpuCopy8 - ldr r1, _020D3164 ; =0x02106A00 - mov r0, r8 - ldr r3, [r1, #0x0] - mov r1, r5 - mov r2, #0x40 - add r7, r7, #0x40 - blx r3 - sub r4, r4, #0x40 - cmp r4, #0x0 - bgt _020D3104 -_020D313C: - str r6, [r8, #0x1c] - cmp r6, #0x0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - mov r0, r7 - mov r1, r5 - mov r2, r6 - bl MI_CpuCopy8 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D3164: .word Unk_02106A00 ; = 0x02106A00 - - arm_func_start MATH_SHA1Init -MATH_SHA1Init: ; 0x020D3168 - ldr r1, _020D31A4 ; =0x67452301 - ldr r2, _020D31A8 ; =0xEFCDAB89 - str r1, [r0, #0x0] - ldr r1, _020D31AC ; =0x98BADCFE - str r2, [r0, #0x4] - ldr r2, _020D31B0 ; =0x10325476 - str r1, [r0, #0x8] - ldr r1, _020D31B4 ; =0xC3D2E1F0 - str r2, [r0, #0xc] - str r1, [r0, #0x10] - mov r1, #0x0 - str r1, [r0, #0x14] - str r1, [r0, #0x18] - str r1, [r0, #0x1c] - bx lr - .balign 4 -_020D31A4: .word 0x67452301 -_020D31A8: .word 0xEFCDAB89 -_020D31AC: .word 0x98BADCFE -_020D31B0: .word 0x10325476 -_020D31B4: .word 0xC3D2E1F0 - - arm_func_start MATHi_CalcHMAC -MATHi_CalcHMAC: ; 0x020D31B8 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0xc4 - ldr r5, [sp, #0xe0] - ldr r4, [sp, #0xe4] - movs r9, r0 - mov r8, r1 - mov r7, r2 - mov r6, r3 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r8, #0x0 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r7, #0x0 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r6, #0x0 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r5, #0x0 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r4, #0x0 - addeq sp, sp, #0xc4 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - ldr r0, [r4, #0x4] - cmp r5, r0 - ble _020D3278 - ldr r0, [r4, #0x8] - ldr r1, [r4, #0x10] - blx r1 - ldr r0, [r4, #0x8] - ldr r3, [r4, #0x14] - mov r1, r6 - mov r2, r5 - blx r3 - ldr r0, [r4, #0x8] - ldr r2, [r4, #0x18] - add r1, sp, #0x0 - blx r2 - ldr r5, [r4, #0x0] - add r6, sp, #0x0 -_020D3278: - cmp r5, #0x0 - mov r0, #0x0 - ble _020D32A0 - add r2, sp, #0x40 -_020D3288: - ldrb r1, [r6, r0] - add r0, r0, #0x1 - cmp r0, r5 - eor r1, r1, #0x36 - strb r1, [r2], #0x1 - blt _020D3288 -_020D32A0: - ldr r1, [r4, #0x4] - cmp r0, r1 - bge _020D32CC - add r1, sp, #0x40 - add r3, r1, r0 - mov r2, #0x36 -_020D32B8: - strb r2, [r3], #0x1 - ldr r1, [r4, #0x4] - add r0, r0, #0x1 - cmp r0, r1 - blt _020D32B8 -_020D32CC: - ldr r0, [r4, #0x8] - ldr r1, [r4, #0x10] - blx r1 - ldr r0, [r4, #0x8] - ldr r2, [r4, #0x4] - ldr r3, [r4, #0x14] - add r1, sp, #0x40 - blx r3 - ldr r0, [r4, #0x8] - ldr r3, [r4, #0x14] - mov r1, r8 - mov r2, r7 - blx r3 - ldr r0, [r4, #0x8] - ldr r1, [r4, #0xc] - ldr r2, [r4, #0x18] - blx r2 - cmp r5, #0x0 - mov r2, #0x0 - ble _020D3338 - add r1, sp, #0x80 -_020D3320: - ldrb r0, [r6, r2] - add r2, r2, #0x1 - cmp r2, r5 - eor r0, r0, #0x5c - strb r0, [r1], #0x1 - blt _020D3320 -_020D3338: - ldr r0, [r4, #0x4] - cmp r2, r0 - bge _020D3364 - add r0, sp, #0x80 - add r3, r0, r2 - mov r1, #0x5c -_020D3350: - strb r1, [r3], #0x1 - ldr r0, [r4, #0x4] - add r2, r2, #0x1 - cmp r2, r0 - blt _020D3350 -_020D3364: - ldr r0, [r4, #0x8] - ldr r1, [r4, #0x10] - blx r1 - ldr r0, [r4, #0x8] - ldr r2, [r4, #0x4] - ldr r3, [r4, #0x14] - add r1, sp, #0x80 - blx r3 - ldr r0, [r4, #0x8] - ldr r1, [r4, #0xc] - ldr r2, [r4, #0x0] - ldr r3, [r4, #0x14] - blx r3 - ldr r0, [r4, #0x8] - ldr r2, [r4, #0x18] - mov r1, r9 - blx r2 - add sp, sp, #0xc4 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020D33B4: .word 0x00FF00FF -_020D33B8: .word 0x5A827999 -_020D33BC: .word 0x6ED9EBA1 -_020D33C0: .word 0x8F1BBCDC -_020D33C4: .word 0xCA62C1D6 - - arm_func_start DGTi_hash2_arm4_small -DGTi_hash2_arm4_small: ; 0x020D33C8 - stmdb sp!, {r4-r12,lr} - ldmia r0, {r3,r9-r12} - sub sp, sp, #0x84 - str r2, [sp, #0x80] -_020D33D8: - ldr r8, _020D33B8 ; =0x5A827999 - ldr r7, _020D33B4 ; =0x00FF00FF - mov r6, sp - mov r5, #0x0 -_020D33E8: - ldr r4, [r1], #0x4 - add r2, r8, r12 - add r2, r2, r3, ror #0x1B - and lr, r4, r7 - and r4, r7, r4, ror #0x18 - orr r4, r4, lr, ror #0x8 - str r4, [r6, #0x40] - str r4, [r6], #0x4 - add r2, r2, r4 - eor r4, r10, r11 - and r4, r4, r9 - eor r4, r4, r11 - add r2, r2, r4 - mov r9, r9, ror #0x2 - mov r12, r11 - mov r11, r10 - mov r10, r9 - mov r9, r3 - mov r3, r2 - add r5, r5, #0x4 - cmp r5, #0x40 - blt _020D33E8 - mov r7, #0x0 - mov r6, sp -_020D3448: - ldr r2, [r6, #0x0] - ldr r5, [r6, #0x8] - ldr r4, [r6, #0x20] - ldr lr, [r6, #0x34] - eor r2, r2, r5 - eor r4, r4, lr - eor r2, r2, r4 - mov r2, r2, ror #0x1F - str r2, [r6, #0x40] - str r2, [r6], #0x4 - add r2, r2, r12 - add r2, r2, r8 - add r2, r2, r3, ror #0x1B - eor r4, r10, r11 - and r4, r4, r9 - eor r4, r4, r11 - add r2, r2, r4 - mov r9, r9, ror #0x2 - mov r12, r11 - mov r11, r10 - mov r10, r9 - mov r9, r3 - mov r3, r2 - add r7, r7, #0x4 - cmp r7, #0x10 - blt _020D3448 - ldr r8, _020D33BC ; =0x6ED9EBA1 - mov r7, #0x0 -_020D34B8: - ldr r2, [r6, #0x0] - ldr r4, [r6, #0x8] - ldr lr, [r6, #0x20] - ldr r5, [r6, #0x34] - eor r2, r2, r4 - eor lr, lr, r5 - eor r2, r2, lr - mov r2, r2, ror #0x1F - str r2, [r6, #0x40] - str r2, [r6], #0x4 - add r2, r2, r12 - add r2, r2, r8 - add r2, r2, r3, ror #0x1B - eor lr, r9, r10 - eor lr, lr, r11 - add r2, r2, lr - mov r9, r9, ror #0x2 - mov r12, r11 - mov r11, r10 - mov r10, r9 - mov r9, r3 - mov r3, r2 - add r7, r7, #0x1 - cmp r7, #0xc - moveq r6, sp - cmp r7, #0x14 - blt _020D34B8 - ldr r8, _020D33C0 ; =0x8F1BBCDC - mov r7, #0x0 -_020D352C: - ldr r2, [r6, #0x0] - ldr lr, [r6, #0x8] - ldr r5, [r6, #0x20] - ldr r4, [r6, #0x34] - eor r2, r2, lr - eor r5, r5, r4 - eor r2, r2, r5 - mov r2, r2, ror #0x1F - str r2, [r6, #0x40] - str r2, [r6], #0x4 - add r2, r2, r12 - add r2, r2, r8 - add r2, r2, r3, ror #0x1B - orr r5, r9, r10 - and r5, r5, r11 - and r4, r9, r10 - orr r5, r5, r4 - add r2, r2, r5 - mov r9, r9, ror #0x2 - mov r12, r11 - mov r11, r10 - mov r10, r9 - mov r9, r3 - mov r3, r2 - add r7, r7, #0x1 - cmp r7, #0x8 - moveq r6, sp - cmp r7, #0x14 - blt _020D352C - ldr r8, _020D33C4 ; =0xCA62C1D6 - mov r7, #0x0 -_020D35A8: - ldr r2, [r6, #0x0] - ldr r5, [r6, #0x8] - ldr r4, [r6, #0x20] - ldr lr, [r6, #0x34] - eor r2, r2, r5 - eor r4, r4, lr - eor r2, r2, r4 - mov r2, r2, ror #0x1F - str r2, [r6, #0x40] - str r2, [r6], #0x4 - add r2, r2, r12 - add r2, r2, r8 - add r2, r2, r3, ror #0x1B - eor r4, r9, r10 - eor r4, r4, r11 - add r2, r2, r4 - mov r9, r9, ror #0x2 - mov r12, r11 - mov r11, r10 - mov r10, r9 - mov r9, r3 - mov r3, r2 - add r7, r7, #0x1 - cmp r7, #0x4 - moveq r6, sp - cmp r7, #0x14 - blt _020D35A8 - ldmia r0, {r2,r4,r6-r7,lr} - add r3, r3, r2 - add r9, r9, r4 - add r10, r10, r6 - add r11, r11, r7 - add r12, r12, lr - stmia r0, {r3,r9-r12} - ldr lr, [sp, #0x80] - subs lr, lr, #0x40 - str lr, [sp, #0x80] - bgt _020D33D8 - add sp, sp, #0x84 - ldmia sp!, {r4-r12,pc} diff --git a/arm9/asm/libmath.s b/arm9/asm/libmath.s index 02dcfbcf..e841f5da 100644 --- a/arm9/asm/libmath.s +++ b/arm9/asm/libmath.s @@ -32,16 +32,16 @@ MATH_CalcSHA1: ; 0x020DDCA0 add r0, sp, #0x0 mov r5, r1 mov r4, r2 - bl MATH_SHA1Init + bl DGT_Hash2Reset _020DDCBC: ; 0x020DDCBC add r0, sp, #0x0 mov r1, r5 mov r2, r4 - bl MATH_SHA1Update + bl DGT_Hash2SetSource _020DDCCC: ; 0x020DDCCC add r0, sp, #0x0 mov r1, r6 - bl MATH_SHA1GetHash + bl DGT_Hash2GetDigest add sp, sp, #0x68 ldmia sp!, {r4-r6,lr} bx lr diff --git a/arm9/asm/unk_02000E0C.s b/arm9/asm/unk_02000E0C.s index 9c67c9fd..b13ce736 100644 --- a/arm9/asm/unk_02000E0C.s +++ b/arm9/asm/unk_02000E0C.s @@ -2,337 +2,8 @@ .include "global.inc" .text - - thumb_func_start FUN_02000E0C -FUN_02000E0C: ; 0x02000E0C - push {r3, lr} - ldr r0, _02000E74 ; =0x02106FA0 - ldr r1, [r0, #0xc] - cmp r1, #0x0 - bne _02000E4A - ldr r1, [r0, #0x14] - cmp r1, #0x0 - beq _02000E70 - mov r1, #0x0 - ldr r0, [r0, #0x10] - mvn r1, r1 - cmp r0, r1 - beq _02000E2C - mov r1, #0x0 - bl HandleLoadOverlay -_02000E2C: - ldr r0, _02000E74 ; =0x02106FA0 - mov r2, #0x0 - ldr r1, [r0, #0x10] - str r1, [r0, #0x8] - ldr r0, [r0, #0x14] - ldr r1, _02000E78 ; =0x02106FB8 - bl FUN_02006234 - ldr r1, _02000E74 ; =0x02106FA0 - str r0, [r1, #0xc] - mov r0, #0x0 - mvn r0, r0 - str r0, [r1, #0x10] - mov r0, #0x0 - str r0, [r1, #0x14] -_02000E4A: - ldr r0, _02000E74 ; =0x02106FA0 - ldr r0, [r0, #0xc] - bl FUN_02006290 - cmp r0, #0x0 - beq _02000E70 - ldr r0, _02000E74 ; =0x02106FA0 - ldr r0, [r0, #0xc] - bl FUN_02006260 - ldr r0, _02000E74 ; =0x02106FA0 - mov r1, #0x0 - str r1, [r0, #0xc] - ldr r0, [r0, #0x8] - sub r1, r1, #0x1 - cmp r0, r1 - beq _02000E70 - bl UnloadOverlayByID -_02000E70: - pop {r3, pc} - nop -_02000E74: .word 0x02106FA0 -_02000E78: .word 0x02106FB8 - - thumb_func_start FUN_02000E7C -FUN_02000E7C: ; 0x02000E7C - push {r3-r5, lr} - add r5, r0, #0x0 - ldr r0, _02000E98 ; =0x02106FA0 - add r4, r1, #0x0 - ldr r0, [r0, #0x14] - cmp r0, #0x0 - beq _02000E8E - bl ErrorHandling -_02000E8E: - ldr r0, _02000E98 ; =0x02106FA0 - str r5, [r0, #0x10] - str r4, [r0, #0x14] - pop {r3-r5, pc} - nop -_02000E98: .word 0x02106FA0 - - thumb_func_start FUN_02000E9C -FUN_02000E9C: ; 0x02000E9C - push {r3, lr} - bl FUN_0202FB80 - mov r0, #0x1 - add r1, r0, #0x0 - blx OS_WaitIrq - ldr r0, _02000EC4 ; =0x021C48B8 - ldr r1, [r0, #0x2c] - add r1, r1, #0x1 - str r1, [r0, #0x2c] - mov r1, #0x0 - str r1, [r0, #0x30] - ldr r1, [r0, #0x0] - cmp r1, #0x0 - beq _02000EC0 - ldr r0, [r0, #0x4] - blx r1 -_02000EC0: - pop {r3, pc} - nop -_02000EC4: .word 0x021C48B8 - - thumb_func_start FUN_02000EC8 -FUN_02000EC8: ; 0x02000EC8 - push {r4, lr} - add r4, r0, #0x0 - bl FUN_02033678 - cmp r0, #0x0 - beq _02000EE2 - blx CARD_TryWaitBackupAsync - cmp r0, #0x1 - bne _02000EE2 - add r0, r4, #0x0 - blx OS_ResetSystem -_02000EE2: - bl FUN_02000E9C - pop {r4, pc} - - thumb_func_start FUN_02000EE8 -FUN_02000EE8: ; 0x02000EE8 - push {r3, lr} - bl FUN_020335B8 - add r1, r0, #0x0 - cmp r1, #0x1 - beq _02000EFE - cmp r1, #0x2 - beq _02000F06 - cmp r1, #0x3 - beq _02000F0E - pop {r3, pc} -_02000EFE: - mov r0, #0x1 - bl FUN_02000F4C - pop {r3, pc} -_02000F06: - mov r0, #0x0 - bl FUN_02000F4C - pop {r3, pc} -_02000F0E: - mov r0, #0x1 - bl FUN_02000F4C - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02000F18 -FUN_02000F18: ; 0x02000F18 - push {r4, lr} - ldr r1, _02000F48 ; =0x00007FFF - add r4, r0, #0x0 - mov r0, #0x0 - bl FUN_0200E3A0 - ldr r1, _02000F48 ; =0x00007FFF - mov r0, #0x1 - bl FUN_0200E3A0 - bl FUN_02032DAC - cmp r0, #0x0 - beq _02000F3C - bl FUN_020225F8 - bl FUN_0202287C -_02000F3C: - bl FUN_02000FE8 - add r0, r4, #0x0 - bl FUN_02000EC8 - b _02000F3C - .balign 4 -_02000F48: .word 0x00007FFF - - thumb_func_start FUN_02000F4C -FUN_02000F4C: ; 0x02000F4C - push {r4-r6, lr} - add r6, r0, #0x0 - cmp r1, #0x3 - bne _02000F60 - mov r0, #0x0 - mov r1, #0x3 - add r2, r0, #0x0 - bl FUN_02033F70 - b _02000F7A -_02000F60: - cmp r6, #0x0 - bne _02000F70 - mov r0, #0x0 - mov r1, #0x2 - add r2, r0, #0x0 - bl FUN_02033F70 - b _02000F7A -_02000F70: - mov r0, #0x0 - add r1, r0, #0x0 - add r2, r0, #0x0 - bl FUN_02033F70 -_02000F7A: - bl FUN_02032DAC - ldr r5, _02000FA0 ; =0x021C48B8 - mov r4, #0x1 -_02000F82: - bl FUN_02000FE8 - bl FUN_02016464 - ldr r0, [r5, #0x48] - tst r0, r4 - bne _02000F96 - bl FUN_02000E9C - b _02000F82 -_02000F96: - add r0, r6, #0x0 - bl FUN_02000F18 - pop {r4-r6, pc} - nop -_02000FA0: .word 0x021C48B8 - - thumb_func_start FUN_02000FA4 -FUN_02000FA4: ; 0x02000FA4 - push {r4-r5, lr} - sub sp, #0x1c - add r0, sp, #0xc - add r1, sp, #0x0 - bl FUN_0201265C - ldr r0, _02000FE4 ; =0x021C48B8 - ldr r3, [sp, #0x10] - ldr r4, [r0, #0x2c] - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x8] - ldr r5, [sp, #0x14] - add r0, r1, r0 - lsl r2, r0, #0x18 - ldr r0, [sp, #0x0] - lsl r3, r3, #0x8 - lsl r1, r0, #0x10 - mul r3, r5 - ldr r0, [sp, #0xc] - lsl r3, r3, #0x10 - add r0, r0, r3 - add r0, r1, r0 - add r5, r2, r0 - add r0, r4, r5 - bl FUN_0201BA1C - add r0, r4, r5 - bl FUN_0201B9E0 - add sp, #0x1c - pop {r4-r5, pc} - nop -_02000FE4: .word 0x021C48B8 - - thumb_func_start FUN_02000FE8 -FUN_02000FE8: ; 0x02000FE8 - push {r3-r7, lr} - sub sp, #0x8 - ldr r0, _0200109C ; =0x027FFFA8 - ldrh r1, [r0, #0x0] - mov r0, #0x2 - lsl r0, r0, #0xe - and r0, r1 - asr r0, r0, #0xf - beq _0200107E - ldr r0, _020010A0 ; =0x021C4918 - ldrb r0, [r0, #0x7] - cmp r0, #0x0 - bne _02001064 - bl FUN_0201CE04 - blx CTRDG_IsPulledOut - cmp r0, #0x1 - bne _02001014 - ldr r0, _020010A4 ; =0x02106FA0 - mov r1, #0x1 - str r1, [r0, #0x4] -_02001014: - ldr r6, _020010A4 ; =0x02106FA0 - mov r0, #0xc - ldr r1, [r6, #0x4] - ldr r4, _0200109C ; =0x027FFFA8 - mov r2, #0x10 - add r5, r0, #0x0 - ldr r7, _020010A0 ; =0x021C4918 - orr r5, r2 -_02001024: - ldrb r2, [r7, #0x6] - mov r0, #0xc - cmp r2, #0x0 - beq _02001032 - cmp r1, #0x0 - bne _02001032 - add r0, r5, #0x0 -_02001032: - mov r1, #0x0 - add r2, r1, #0x0 - blx PM_GoSleepMode - blx CARD_IsPulledOut - cmp r0, #0x0 - beq _02001048 - blx PM_ForceToPowerOff - b _0200105C -_02001048: - ldrh r1, [r4, #0x0] - mov r0, #0x2 - lsl r0, r0, #0xe - and r0, r1 - asr r0, r0, #0xf - beq _0200105C - mov r0, #0x1 - str r0, [r6, #0x4] - add r1, r0, #0x0 - b _02001024 -_0200105C: - bl FUN_0201CDD0 - add sp, #0x8 - pop {r3-r7, pc} -_02001064: - add r0, sp, #0x4 - add r1, sp, #0x0 - blx PM_GetBackLight - ldr r0, [sp, #0x4] - cmp r0, #0x1 - bne _02001096 - mov r0, #0x2 - mov r1, #0x0 - blx PM_SetBackLight - add sp, #0x8 - pop {r3-r7, pc} -_0200107E: - add r0, sp, #0x4 - add r1, sp, #0x0 - blx PM_GetBackLight - ldr r0, [sp, #0x4] - cmp r0, #0x0 - bne _02001096 - ldr r1, _020010A4 ; =0x02106FA0 - mov r0, #0x2 - ldr r1, [r1, #0x0] - blx PM_SetBackLight -_02001096: - add sp, #0x8 - pop {r3-r7, pc} - nop -_0200109C: .word 0x027FFFA8 -_020010A0: .word 0x021C4918 -_020010A4: .word 0x02106FA0 + .extern FUN_02000E9C + .extern FUN_02000EC8 thumb_func_start FUN_020010A8 FUN_020010A8: ; 0x020010A8 diff --git a/arm9/global.inc b/arm9/global.inc index 508f71de..aa4d2a1b 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -28,6 +28,9 @@ .extern DGT_Hash1GetDigest_R
.extern DGT_Hash1Reset
.extern DGT_Hash1SetSource
+.extern DGT_Hash2GetDigest
+.extern DGT_Hash2Reset
+.extern DGT_Hash2SetSource
.extern DGTi_hash2_arm4_small
.extern ErrorHandling
.extern FS_CloseFile
@@ -2654,6 +2657,11 @@ .extern FUN_020C39CC
.extern FUN_020C6034
.extern FUN_020C605C
+.extern MOD05_021EC464
+.extern MOD05_021EC7B4
+.extern MOD20_02253A04
+.extern MOD20_02253FAC
+.extern MOD20_02253FB4
.extern MOD05_021D74E0
.extern FUN_021D7660
.extern FUN_021D76AC
@@ -3322,14 +3330,11 @@ .extern MATH_MD5GetHash
.extern MATH_MD5Init
.extern MATH_MD5Update
-.extern MATH_SHA1GetHash
-.extern MATH_SHA1Init
-.extern MATH_SHA1Update
.extern MATHi_CRC16InitTable
.extern MATHi_CRC16InitTableRev
.extern MATHi_CRC32InitTableRev
.extern MATHi_CRC8InitTable
-.extern MATHi_CalcHMAC
+.extern DGTi_Hash2CalcHmac
.extern MIC_DoSamplingAsync
.extern MIC_GetLastSamplingAddress
.extern MIC_Init
@@ -5409,7 +5414,6 @@ .extern FUN_02006C88
.extern FUN_02020A6C
.extern FUN_02012690
-.extern MOD20_02252978
.extern FUN_02020BF4
.extern FUN_02020BFC
.extern FUN_020893F0
@@ -5417,6 +5421,8 @@ .extern FUN_02069B60
.extern FUN_02089444
.extern FUN_0208946C
+.extern MOD20_02252978
+.extern MOD20_02253AA4
.extern MOD20_02252B68
.extern MOD20_02252C08
.extern MOD20_02253794
diff --git a/arm9/lib/include/CARD_backup.h b/arm9/lib/include/CARD_backup.h new file mode 100644 index 00000000..de594beb --- /dev/null +++ b/arm9/lib/include/CARD_backup.h @@ -0,0 +1,6 @@ +#ifndef NITRO_CARD_BACKUP_H_ +#define NITRO_CARD_BACKUP_H_ + +BOOL CARD_TryWaitBackupAsync(void); + +#endif //NITRO_CARD_BACKUP_H_ diff --git a/arm9/lib/include/CTRDG_common.h b/arm9/lib/include/CTRDG_common.h new file mode 100644 index 00000000..c83602b8 --- /dev/null +++ b/arm9/lib/include/CTRDG_common.h @@ -0,0 +1,6 @@ +#ifndef NITRO_CTRDG_COMMON_H_ +#define NITRO_CTRDG_COMMON_H_ + +BOOL CTRDG_IsPulledOut(void); + +#endif //NITRO_CTRDG_COMMON_H_ diff --git a/arm9/lib/include/FS_overlay.h b/arm9/lib/include/FS_overlay.h index 6025d04a..14c7ce66 100644 --- a/arm9/lib/include/FS_overlay.h +++ b/arm9/lib/include/FS_overlay.h @@ -1,6 +1,10 @@ #ifndef NITRO_FS_OVERLAY_H_ #define NITRO_FS_OVERLAY_H_ +#if defined(__cplusplus) +extern "C" { +#endif + #include "nitro.h" #include "MI_exMemory.h" #include "FS_file.h" @@ -8,7 +12,10 @@ typedef u32 FSOverlayID; -typedef void (*FSOverlayInitFunc) (void); +#define FS_EXTERN_OVERLAY(name) extern u32 SDK_OVERLAY_ ## name ## _ID[1] +#define FS_OVERLAY_ID(name) ((u32)&(SDK_OVERLAY_ ## name ## _ID)) + +typedef void (*FSOverlayInitFunc)(void); typedef struct FSOverlayInfoHeader { @@ -19,8 +26,8 @@ typedef struct FSOverlayInfoHeader FSOverlayInitFunc *sinit_init; FSOverlayInitFunc *sinit_init_end; u32 file_id; - u32 compressed:24; - u32 flag:8; + u32 compressed: 24; + u32 flag: 8; } FSOverlayInfoHeader; typedef struct FSOverlayInfo @@ -30,26 +37,35 @@ typedef struct FSOverlayInfo CARDRomRegion file_pos; } FSOverlayInfo; -static inline u8 *const FS_GetOverlayAddress(FSOverlayInfo * p_ovi) +static inline u8 *const FS_GetOverlayAddress(FSOverlayInfo *p_ovi) { return p_ovi->header.ram_address; } -static inline u32 const FS_GetOverlayImageSize(FSOverlayInfo * p_ovi) +static inline u32 const FS_GetOverlayImageSize(FSOverlayInfo *p_ovi) { return p_ovi->header.ram_size; } -static inline u32 const FS_GetOverlayTotalSize(FSOverlayInfo * p_ovi) +static inline u32 const FS_GetOverlayTotalSize(FSOverlayInfo *p_ovi) { return p_ovi->header.ram_size + p_ovi->header.bss_size; } BOOL FS_LoadOverlayInfo(FSOverlayInfo *p_ovi, MIProcessor target, FSOverlayID id); + BOOL FS_LoadOverlay(MIProcessor target, FSOverlayID id); + BOOL FS_UnloadOverlay(MIProcessor target, FSOverlayID id); + BOOL FS_LoadOverlayImage(FSOverlayInfo *p_ovi); + void FS_StartOverlay(FSOverlayInfo *p_ovi); + BOOL FS_LoadOverlayImageAsync(FSOverlayInfo *p_ovi, FSFile *p_file); +#if defined(__cplusplus) +}; +#endif + #endif //NITRO_FS_OVERLAY_H_ diff --git a/arm9/lib/include/PAD_pad.h b/arm9/lib/include/PAD_pad.h new file mode 100644 index 00000000..0cb8a6f0 --- /dev/null +++ b/arm9/lib/include/PAD_pad.h @@ -0,0 +1,38 @@ +#ifndef NITRO_PAD_PAD_H_ +#define NITRO_PAD_PAD_H_ + + +//================================================================================ +// BUTTONS + +//---- masked value +#define PAD_PLUS_KEY_MASK 0x00f0 // mask : cross keys +#define PAD_BUTTON_MASK 0x2f0f // mask : buttons +#define PAD_DEBUG_BUTTON_MASK 0x2000 // mask : debug button +#define PAD_ALL_MASK 0x2fff // mask : all buttons +#define PAD_RCNTPORT_MASK 0x2c00 // mask : factors ARM7 can read from RCNT register +#define PAD_KEYPORT_MASK 0x03ff // mask : factors ARM7/9 can read from KEY register + +#define PAD_DETECT_FOLD_MASK 0x8000 // mask : folding + +//---- button and key +#define PAD_BUTTON_A 0x0001 // A +#define PAD_BUTTON_B 0x0002 // B +#define PAD_BUTTON_SELECT 0x0004 // SELECT +#define PAD_BUTTON_START 0x0008 // START +#define PAD_KEY_RIGHT 0x0010 // RIGHT of cross key +#define PAD_KEY_LEFT 0x0020 // LEFT of cross key +#define PAD_KEY_UP 0x0040 // UP of cross key +#define PAD_KEY_DOWN 0x0080 // DOWN of cross key +#define PAD_BUTTON_R 0x0100 // R +#define PAD_BUTTON_L 0x0200 // L +#define PAD_BUTTON_X 0x0400 // X +#define PAD_BUTTON_Y 0x0800 // Y +#define PAD_BUTTON_DEBUG 0x2000 // Debug button + +static inline BOOL PAD_DetectFold(void) +{ + return (BOOL)((*(vu16 *)HW_BUTTON_XY_BUF & PAD_DETECT_FOLD_MASK) >> 15); +} + +#endif //NITRO_PAD_PAD_H_ diff --git a/arm9/lib/include/SPI_pm.h b/arm9/lib/include/SPI_pm.h new file mode 100644 index 00000000..b5063ed8 --- /dev/null +++ b/arm9/lib/include/SPI_pm.h @@ -0,0 +1,38 @@ +#ifndef NITRO_SPI_PM_H_ +#define NITRO_SPI_PM_H_ + +ENUMS_ALWAYS_INT_ON + +#define PM_TRIGGER_KEY (1 << 0) +#define PM_TRIGGER_RTC_ALARM (1 << 1) +#define PM_TRIGGER_COVER_OPEN (1 << 2) +#define PM_TRIGGER_CARD (1 << 3) +#define PM_TRIGGER_CARTRIDGE (1 << 4) +typedef u32 PMWakeUpTrigger; + +#define PM_PAD_LOGIC_OR (0 << REG_PAD_KEYCNT_LOGIC_SHIFT) +#define PM_PAD_LOGIC_AND (1 << REG_PAD_KEYCNT_LOGIC_SHIFT) +typedef u32 PMLogic; + +typedef enum +{ + PM_BACKLIGHT_OFF = 0, + PM_BACKLIGHT_ON = 1 +} PMBackLightSwitch; + +typedef enum +{ + PM_LCD_TOP = 0, + PM_LCD_BOTTOM = 1, + PM_LCD_ALL = 2 +} +PMLCDTarget; + +void PM_GetBackLight(PMBackLightSwitch * top, PMBackLightSwitch * bottom); +void PM_GoSleepMode(PMWakeUpTrigger trigger, PMLogic logic, u16 keyPattern); +u32 PM_SetBackLight(PMLCDTarget target, PMBackLightSwitch status); +void PM_ForceToPowerOff(void); + +ENUMS_ALWAYS_INT_RESET + +#endif //NITRO_SPI_PM_H_ diff --git a/arm9/lib/include/registers.h b/arm9/lib/include/registers.h index 45b36334..d59411e6 100644 --- a/arm9/lib/include/registers.h +++ b/arm9/lib/include/registers.h @@ -52,4 +52,124 @@ #define REG_GXSTAT_ADDR (HW_REG_BASE + REG_GXSTAT_OFFSET) #define reg_G3X_GXSTAT (*(REGType32v *)REG_GXSTAT_ADDR) +#define REG_PAD_KEYINPUT_L_SHIFT 9 +#define REG_PAD_KEYINPUT_L_SIZE 1 +#define REG_PAD_KEYINPUT_L_MASK 0x0200 + +#define REG_PAD_KEYINPUT_R_SHIFT 8 +#define REG_PAD_KEYINPUT_R_SIZE 1 +#define REG_PAD_KEYINPUT_R_MASK 0x0100 + +#define REG_PAD_KEYINPUT_DOWN_SHIFT 7 +#define REG_PAD_KEYINPUT_DOWN_SIZE 1 +#define REG_PAD_KEYINPUT_DOWN_MASK 0x0080 + +#define REG_PAD_KEYINPUT_UP_SHIFT 6 +#define REG_PAD_KEYINPUT_UP_SIZE 1 +#define REG_PAD_KEYINPUT_UP_MASK 0x0040 + +#define REG_PAD_KEYINPUT_LEFT_SHIFT 5 +#define REG_PAD_KEYINPUT_LEFT_SIZE 1 +#define REG_PAD_KEYINPUT_LEFT_MASK 0x0020 + +#define REG_PAD_KEYINPUT_RIGHT_SHIFT 4 +#define REG_PAD_KEYINPUT_RIGHT_SIZE 1 +#define REG_PAD_KEYINPUT_RIGHT_MASK 0x0010 + +#define REG_PAD_KEYINPUT_START_SHIFT 3 +#define REG_PAD_KEYINPUT_START_SIZE 1 +#define REG_PAD_KEYINPUT_START_MASK 0x0008 + +#define REG_PAD_KEYINPUT_SEL_SHIFT 2 +#define REG_PAD_KEYINPUT_SEL_SIZE 1 +#define REG_PAD_KEYINPUT_SEL_MASK 0x0004 + +#define REG_PAD_KEYINPUT_B_SHIFT 1 +#define REG_PAD_KEYINPUT_B_SIZE 1 +#define REG_PAD_KEYINPUT_B_MASK 0x0002 + +#define REG_PAD_KEYINPUT_A_SHIFT 0 +#define REG_PAD_KEYINPUT_A_SIZE 1 +#define REG_PAD_KEYINPUT_A_MASK 0x0001 + +#ifndef SDK_ASM +#define REG_PAD_KEYINPUT_FIELD( l, r, down, up, left, right, start, sel, b, a ) \ + (u16)( \ + ((u32)(l) << REG_PAD_KEYINPUT_L_SHIFT) | \ + ((u32)(r) << REG_PAD_KEYINPUT_R_SHIFT) | \ + ((u32)(down) << REG_PAD_KEYINPUT_DOWN_SHIFT) | \ + ((u32)(up) << REG_PAD_KEYINPUT_UP_SHIFT) | \ + ((u32)(left) << REG_PAD_KEYINPUT_LEFT_SHIFT) | \ + ((u32)(right) << REG_PAD_KEYINPUT_RIGHT_SHIFT) | \ + ((u32)(start) << REG_PAD_KEYINPUT_START_SHIFT) | \ + ((u32)(sel) << REG_PAD_KEYINPUT_SEL_SHIFT) | \ + ((u32)(b) << REG_PAD_KEYINPUT_B_SHIFT) | \ + ((u32)(a) << REG_PAD_KEYINPUT_A_SHIFT)) +#endif + +#define REG_PAD_KEYCNT_LOGIC_SHIFT 15 +#define REG_PAD_KEYCNT_LOGIC_SIZE 1 +#define REG_PAD_KEYCNT_LOGIC_MASK 0x8000 + +#define REG_PAD_KEYCNT_INTR_SHIFT 14 +#define REG_PAD_KEYCNT_INTR_SIZE 1 +#define REG_PAD_KEYCNT_INTR_MASK 0x4000 + +#define REG_PAD_KEYCNT_L_SHIFT 9 +#define REG_PAD_KEYCNT_L_SIZE 1 +#define REG_PAD_KEYCNT_L_MASK 0x0200 + +#define REG_PAD_KEYCNT_R_SHIFT 8 +#define REG_PAD_KEYCNT_R_SIZE 1 +#define REG_PAD_KEYCNT_R_MASK 0x0100 + +#define REG_PAD_KEYCNT_DOWN_SHIFT 7 +#define REG_PAD_KEYCNT_DOWN_SIZE 1 +#define REG_PAD_KEYCNT_DOWN_MASK 0x0080 + +#define REG_PAD_KEYCNT_UP_SHIFT 6 +#define REG_PAD_KEYCNT_UP_SIZE 1 +#define REG_PAD_KEYCNT_UP_MASK 0x0040 + +#define REG_PAD_KEYCNT_LEFT_SHIFT 5 +#define REG_PAD_KEYCNT_LEFT_SIZE 1 +#define REG_PAD_KEYCNT_LEFT_MASK 0x0020 + +#define REG_PAD_KEYCNT_RIGHT_SHIFT 4 +#define REG_PAD_KEYCNT_RIGHT_SIZE 1 +#define REG_PAD_KEYCNT_RIGHT_MASK 0x0010 + +#define REG_PAD_KEYCNT_START_SHIFT 3 +#define REG_PAD_KEYCNT_START_SIZE 1 +#define REG_PAD_KEYCNT_START_MASK 0x0008 + +#define REG_PAD_KEYCNT_SEL_SHIFT 2 +#define REG_PAD_KEYCNT_SEL_SIZE 1 +#define REG_PAD_KEYCNT_SEL_MASK 0x0004 + +#define REG_PAD_KEYCNT_B_SHIFT 1 +#define REG_PAD_KEYCNT_B_SIZE 1 +#define REG_PAD_KEYCNT_B_MASK 0x0002 + +#define REG_PAD_KEYCNT_A_SHIFT 0 +#define REG_PAD_KEYCNT_A_SIZE 1 +#define REG_PAD_KEYCNT_A_MASK 0x0001 + +#ifndef SDK_ASM +#define REG_PAD_KEYCNT_FIELD( logic, intr, l, r, down, up, left, right, start, sel, b, a ) \ + (u16)( \ + ((u32)(logic) << REG_PAD_KEYCNT_LOGIC_SHIFT) | \ + ((u32)(intr) << REG_PAD_KEYCNT_INTR_SHIFT) | \ + ((u32)(l) << REG_PAD_KEYCNT_L_SHIFT) | \ + ((u32)(r) << REG_PAD_KEYCNT_R_SHIFT) | \ + ((u32)(down) << REG_PAD_KEYCNT_DOWN_SHIFT) | \ + ((u32)(up) << REG_PAD_KEYCNT_UP_SHIFT) | \ + ((u32)(left) << REG_PAD_KEYCNT_LEFT_SHIFT) | \ + ((u32)(right) << REG_PAD_KEYCNT_RIGHT_SHIFT) | \ + ((u32)(start) << REG_PAD_KEYCNT_START_SHIFT) | \ + ((u32)(sel) << REG_PAD_KEYCNT_SEL_SHIFT) | \ + ((u32)(b) << REG_PAD_KEYCNT_B_SHIFT) | \ + ((u32)(a) << REG_PAD_KEYCNT_A_SHIFT)) +#endif + #endif //POKEDIAMOND_REGISTERS_H diff --git a/arm9/modules/00/asm/module_00_dummy.s b/arm9/modules/00/asm/module_00_dummy.s index e8a42167..8b137891 100644 --- a/arm9/modules/00/asm/module_00_dummy.s +++ b/arm9/modules/00/asm/module_00_dummy.s @@ -1,2 +1 @@ - .section .data - .space 32 + diff --git a/arm9/modules/01/src/module_01.c b/arm9/modules/01/src/module_01.c deleted file mode 100644 index ae2e9d1f..00000000 --- a/arm9/modules/01/src/module_01.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "global.h" - -u32 UNK_021D7500[8]; - -THUMB_FUNC void MOD01_021D74E0(void) -{ - UNK_021D7500[1]++; -} - -THUMB_FUNC void (*UNK_021D74F0[4])(void) = { - MOD01_021D74E0 -}; diff --git a/arm9/modules/01/src/module_01.cpp b/arm9/modules/01/src/module_01.cpp new file mode 100644 index 00000000..21b371e0 --- /dev/null +++ b/arm9/modules/01/src/module_01.cpp @@ -0,0 +1,11 @@ +#include "global.h" +#include "FS_overlay.h" + +class Unk021D7500 { + u32 unk0; + u32 unk4; +public: + THUMB_FUNC Unk021D7500() { unk4++; } +}; + +static class Unk021D7500 UNK_021D7500; diff --git a/arm9/modules/02/asm/module_02_dummy.s b/arm9/modules/02/asm/module_02_dummy.s index e8a42167..8b137891 100644 --- a/arm9/modules/02/asm/module_02_dummy.s +++ b/arm9/modules/02/asm/module_02_dummy.s @@ -1,2 +1 @@ - .section .data - .space 32 + diff --git a/arm9/modules/03/asm/module_03_dummy.s b/arm9/modules/03/asm/module_03_dummy.s index e8a42167..8b137891 100644 --- a/arm9/modules/03/asm/module_03_dummy.s +++ b/arm9/modules/03/asm/module_03_dummy.s @@ -1,2 +1 @@ - .section .data - .space 32 + diff --git a/arm9/modules/04/asm/arm_04.s b/arm9/modules/04/asm/arm_04.s index 8d1d699b..9928ef16 100644 --- a/arm9/modules/04/asm/arm_04.s +++ b/arm9/modules/04/asm/arm_04.s @@ -58938,9 +58938,12 @@ _0220BAB8: mov r0, r2 bx lr - .section .data + .section .rodata ; 0x0220BAC0 - .incbin "baserom.nds", 0x1411e0, 0x4100 + .incbin "baserom.nds", 0x1411e0, 0x3D4 + + .section .data + .incbin "baserom.nds", 0x1415C0, 0x3D20 .section .bss ; 0x0220FBC0 diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index 085ce35d..2588e8a9 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -63948,9 +63948,13 @@ _021F6424: .align 2, 0 _021F6428: .word MOD05_021F57F0 - .section .data + .section .rodata ; 0x021F642C - .incbin "baserom.nds", 0x16434c, 0x7254 + .incbin "baserom.nds", 0x16434c, 0x6d9c + + .section .data + ; 0x021FD1E0 + .incbin "baserom.nds", 0x16b100, 0x4A0 .section .bss ; 0x021FD680 diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index ac7d6b48..a12da563 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -44468,9 +44468,13 @@ _0224F144: _0224F16C: .word 0x02252210 _0224F170: .word MOD06_0224F0D8 - .section .data + .section .rodata ; 0x0224F174 - .incbin "baserom.nds", 0x1810D4, 0x32AC + .incbin "baserom.nds", 0x1810D4, 0x30B4 + + .section .data + ; 0x022252240 + .incbin "baserom.nds", 0x1841a0, 0x1e0 .section .bss ; 0x02252420 diff --git a/arm9/modules/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s index 39869410..0afcff05 100644 --- a/arm9/modules/07/asm/module_07.s +++ b/arm9/modules/07/asm/module_07.s @@ -5270,6 +5270,6 @@ _0221494A: pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 - .section .data + .section .rodata ; 0x02214950 - .incbin "baserom.nds", 0x186EF0, 0x7F0 + .incbin "baserom.nds", 0x186EF0, 0x7E4 diff --git a/arm9/modules/08/asm/module_08.s b/arm9/modules/08/asm/module_08.s index 50ed884f..f1281f99 100644 --- a/arm9/modules/08/asm/module_08.s +++ b/arm9/modules/08/asm/module_08.s @@ -49976,6 +49976,9 @@ _0222A758: .align 2, 0
_0222A75C: .word 0x0000013B
- .section .data
+ .section .rodata
; 0x0222A760
- .incbin "baserom.nds", 0x1A0100, 0x2E60
+ .incbin "baserom.nds", 0x1A0100, 0x2E38
+
+ .section .data
+ .incbin "baserom.nds", 0x1A2F40, 0x20
diff --git a/arm9/modules/09/asm/module_09.s b/arm9/modules/09/asm/module_09.s index 7e5ad9c1..efa63611 100644 --- a/arm9/modules/09/asm/module_09.s +++ b/arm9/modules/09/asm/module_09.s @@ -17658,6 +17658,6 @@ _0221AEBC: .word 0x021C48B8 _0221AEC0: .word 0x000005DC
_0221AEC4: .word 0x000005DD
- .section .data
+ .section .rodata
; 0x0221AEC8
- .incbin "baserom.nds", 0x1AC068, 0x1138
+ .incbin "baserom.nds", 0x1AC068, 0x1120
diff --git a/arm9/modules/10/asm/module_10_dummy.s b/arm9/modules/10/asm/module_10_dummy.s index bae0dc2d..8b137891 100644 --- a/arm9/modules/10/asm/module_10_dummy.s +++ b/arm9/modules/10/asm/module_10_dummy.s @@ -1,5 +1 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .data - .balign 4, 0 - .space 32 + diff --git a/arm9/modules/11/asm/module_11.s b/arm9/modules/11/asm/module_11.s index 8288a770..21746e52 100644 --- a/arm9/modules/11/asm/module_11.s +++ b/arm9/modules/11/asm/module_11.s @@ -3379,7 +3379,7 @@ _0222F27C: _0222F280: .word 0x00002434
thumb_func_start MOD11_0222F284
-MOD11_0222F284: ; 0x0222F284
+MOD11_0222F284: ; 0x0222F284 __sinit
push {r3, lr}
bl FUN_02033590
cmp r0, #0
@@ -98632,6 +98632,20 @@ MOD11_0225D98C: ; 0x0225D98C strb r1, [r0, #0x1e]
bx lr
- .section .data
+ .section .rodata
; 0x0225D998
- .incbin "baserom.nds", 0x1dd7d8, 0x2608
+ .incbin "baserom.nds", 0x1dd7d8, 0x2580
+
+ ; Stupid hack to override alignment
+ ; .section .sinit
+ ; 0x0225FF18
+ .global SDK_OVERLAY.MODULE_11.SINIT_START
+ .global SDK_OVERLAY.MODULE_11.SINIT_END
+SDK_OVERLAY.MODULE_11.SINIT_START:
+ .word MOD11_0222F284
+ .word 0
+SDK_OVERLAY.MODULE_11.SINIT_END:
+
+ .section .data
+ ; 0x0225FF20
+ .incbin "baserom.nds", 0x1dfd60, 0x80
diff --git a/arm9/modules/12/asm/module_12.s b/arm9/modules/12/asm/module_12.s index 36381bcf..b2e41348 100644 --- a/arm9/modules/12/asm/module_12.s +++ b/arm9/modules/12/asm/module_12.s @@ -7445,7 +7445,7 @@ _022312B4: .word 0x00001158 _022312B8: .word 0x00000127 thumb_func_start MOD12_022312BC -MOD12_022312BC: ; 0x022312BC +MOD12_022312BC: ; 0x022312BC __sinit push {r3, lr} ldr r0, _022312D0 ; =SDK_OVERLAY_MODULE_08_ID mov r1, #2 @@ -48103,6 +48103,9 @@ _0224496A: _02244988: pop {r4, r5, r6, pc} - .section .data + .section .rodata ; 0x0224498C - .incbin "baserom.nds", 0x1F71CC, 0x1E94 + .incbin "baserom.nds", 0x1F71CC, 0x1E84 + + .section .sinit + .word MOD12_022312BC diff --git a/arm9/modules/13/asm/module_13_arm1.s b/arm9/modules/13/asm/module_13_arm1.s index edb71ead..ffde9a27 100644 --- a/arm9/modules/13/asm/module_13_arm1.s +++ b/arm9/modules/13/asm/module_13_arm1.s @@ -6049,3 +6049,15 @@ MOD13_022172A0: ; 0x022172A0 bx lr .align 2, 0 _022172D8: .word 0x02240B28 + + .section .rodata + ; 0x0223C420 + .incbin "baserom.nds", 0x2237C0, 0x24 + + .section .data + ; 0x0223F780 + .incbin "baserom.nds", 0x226B20, 0x38 + + .section .bss + ; 0x02240A40 + .space 0xF4 diff --git a/arm9/modules/13/asm/module_13_arm2.s b/arm9/modules/13/asm/module_13_arm2.s index 7910e1a0..2e9dd8b5 100644 --- a/arm9/modules/13/asm/module_13_arm2.s +++ b/arm9/modules/13/asm/module_13_arm2.s @@ -35364,10 +35364,14 @@ _0223C330: _0223C418: .word 0x0224320C _0223C41C: .word 0x0223F764 + .section .rodata + ; 0x0223EC6C + .incbin "baserom.nds", 0x22600C, 0xafc + .section .data ; 0x0223C420 - .incbin "baserom.nds", 0x2237C0, 0x4620 + .incbin "baserom.nds", 0x226CD4, 0x110C .section .bss - ; 0x02240A40 - .space 0x27E0 + ; 0x02242FE4 + .space 0x23C diff --git a/arm9/modules/13/asm/module_13_thumb.s b/arm9/modules/13/asm/module_13_thumb.s index b180ff6b..c231800c 100644 --- a/arm9/modules/13/asm/module_13_thumb.s +++ b/arm9/modules/13/asm/module_13_thumb.s @@ -14777,3 +14777,15 @@ _0221E556: bx r3 .align 2, 0 _0221E55C: .word 0x02241B30 + + .section .rodata + ; 0x0223C444 + .incbin "baserom.nds", 0x2237e4, 0x2828 + + .section .data + ; 0x0223F7B8 + .incbin "baserom.nds", 0x226B58, 0x17C + + .section .bss + ; 0x02240B34 + .space 0x24B0 diff --git a/arm9/modules/14/asm/module_14.s b/arm9/modules/14/asm/module_14.s index 42e1c73b..1ace4733 100644 --- a/arm9/modules/14/asm/module_14.s +++ b/arm9/modules/14/asm/module_14.s @@ -30394,9 +30394,13 @@ MOD14_021E6220: ; 0x021E6220 ldr r0, [r0, #0x74] bx lr - .section .data + .section .rodata ; 0x021E6224 - .incbin "baserom.nds", 0x236b44, 0x7dc + .incbin "baserom.nds", 0x236b44, 0x7a4 + + .section .data + ; 0x021E69E0 + .incbin "baserom.nds", 0x237300, 0x1C .section .bss ; 0x021E69FC diff --git a/arm9/modules/15/asm/module_15.s b/arm9/modules/15/asm/module_15.s index bd9eb99a..8659bfeb 100644 --- a/arm9/modules/15/asm/module_15.s +++ b/arm9/modules/15/asm/module_15.s @@ -8748,6 +8748,6 @@ _021DB85C: .align 2, 0
_021DB868: .word 0x021DBA55
- .section .data
+ .section .rodata
; 0x021DB86C
- .incbin "baserom.nds", 0x23B78C, 0x2F4
+ .incbin "baserom.nds", 0x23B78C, 0x2F0
diff --git a/arm9/modules/16/asm/module_16.s b/arm9/modules/16/asm/module_16.s index 7d62c0f0..551ab8e1 100644 --- a/arm9/modules/16/asm/module_16.s +++ b/arm9/modules/16/asm/module_16.s @@ -63320,6 +63320,6 @@ _021F4E2C: .word 0x000003D1 _021F4E30: .word 0x000003D6 thumb_func_end MOD16_021F4A40 - .section .data + .section .rodata ; 0x021F4E34 - .incbin "baserom.nds", 0x259554, 0xABAC + .incbin "baserom.nds", 0x259554, 0xAB90 diff --git a/arm9/modules/17/asm/module_17.s b/arm9/modules/17/asm/module_17.s index 884302f2..b839403b 100644 --- a/arm9/modules/17/asm/module_17.s +++ b/arm9/modules/17/asm/module_17.s @@ -14601,6 +14601,6 @@ _021DE24C: .word 0x00000151 _021DE250: .word 0x00010200 thumb_func_end MOD17_021DE0F4 - .section .data + .section .rodata ; 0x021DE254 - .incbin "baserom.nds", 0x26AF74, 0x10C + .incbin "baserom.nds", 0x26AF74, 0x100 diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s index 767c2f6c..e73fc56e 100644 --- a/arm9/modules/18/asm/module_18.s +++ b/arm9/modules/18/asm/module_18.s @@ -46251,9 +46251,13 @@ _0224FFDC: .word 0x02250834 _0224FFE0: .word 0x022507F0 thumb_func_end MOD18_0224FFA0 - .section .data + .section .rodata ; 0x0224FFE4 - .incbin "baserom.nds", 0x281B44, 0x139C + .incbin "baserom.nds", 0x281B44, 0x874 + + .section .data + ; 0x02250860 + .incbin "baserom.nds", 0x2823C0, 0xB20 .section .bss ; 0x02251380 diff --git a/arm9/modules/19/asm/module_19.s b/arm9/modules/19/asm/module_19.s index 76dad3e4..52c045cc 100644 --- a/arm9/modules/19/asm/module_19.s +++ b/arm9/modules/19/asm/module_19.s @@ -101,6 +101,6 @@ MOD19_02252504: ; 0x02252504 bx lr thumb_func_end MOD19_02252504 - .section .data + .section .rodata ; 0x02252508 - .incbin "baserom.nds", 0x2830C8, 0x38 + .incbin "baserom.nds", 0x2830C8, 0x1c diff --git a/arm9/modules/20/asm/module_20.s b/arm9/modules/20/asm/module_20.s index afe8646c..1c3ba821 100644 --- a/arm9/modules/20/asm/module_20.s +++ b/arm9/modules/20/asm/module_20.s @@ -4565,6 +4565,6 @@ _022544BC: .word 0x022547C4 _022544C0: .word 0x022547C5 thumb_func_end MOD20_02254488 - .section .data + .section .rodata ; 0x022544C4 - .incbin "baserom.nds", 0x285284, 0x37C + .incbin "baserom.nds", 0x285284, 0x374 diff --git a/arm9/modules/21/asm/module_21.s b/arm9/modules/21/asm/module_21.s index cea8f6e8..0c30eb9a 100644 --- a/arm9/modules/21/asm/module_21.s +++ b/arm9/modules/21/asm/module_21.s @@ -721,6 +721,15 @@ _02254D78: .word 0x040002A0 _02254D7C: .word 0x040002A8 thumb_func_end MOD21_02254C5C - .section .data + .section .rodata ; 0x02254D80 - .incbin "baserom.nds", 0x285B40, 0x80 + .incbin "baserom.nds", 0x285B40, 0x68 + + ; Dumb hack because the compiler aligns to 16 instead of 8 + ;.section .sinit + .global SDK_OVERLAY.MODULE_21.SINIT_START + .global SDK_OVERLAY.MODULE_21.SINIT_END +SDK_OVERLAY.MODULE_21.SINIT_START: + .word MOD21_02254840 + .word 0 +SDK_OVERLAY.MODULE_21.SINIT_END: diff --git a/arm9/modules/22/asm/module_22.s b/arm9/modules/22/asm/module_22.s index 77e6bff4..610d0a55 100644 --- a/arm9/modules/22/asm/module_22.s +++ b/arm9/modules/22/asm/module_22.s @@ -1840,6 +1840,9 @@ _02255604: .align 2, 0 thumb_func_end MOD22_022555FC - .section .data + .section .rodata ; 0x02255618 - .incbin "baserom.nds", 0x2869D8, 0x128 + .incbin "baserom.nds", 0x2869D8, 0x118 + + .section .sinit + .word MOD22_02254840 diff --git a/arm9/modules/23/asm/module_23.s b/arm9/modules/23/asm/module_23.s index 6688578e..a5adabbb 100644 --- a/arm9/modules/23/asm/module_23.s +++ b/arm9/modules/23/asm/module_23.s @@ -2789,6 +2789,14 @@ _02255C96: _02255CB8: .word 0x022560D0 thumb_func_end MOD23_02255C6C - .section .data + .section .rodata ; 0x02255CBC - .incbin "baserom.nds", 0x28807C, 0x484 + .incbin "baserom.nds", 0x28807C, 0x46C + + ; .section .sinit + .global SDK_OVERLAY.MODULE_23.SINIT_START + .global SDK_OVERLAY.MODULE_23.SINIT_END +SDK_OVERLAY.MODULE_23.SINIT_START: + .word MOD23_02254840 + .word 0 +SDK_OVERLAY.MODULE_23.SINIT_END: diff --git a/arm9/modules/24/asm/module_24.s b/arm9/modules/24/asm/module_24.s index e3b9a327..ba2c3f32 100644 --- a/arm9/modules/24/asm/module_24.s +++ b/arm9/modules/24/asm/module_24.s @@ -1179,6 +1179,9 @@ _022550DC: .align 2, 0 thumb_func_end MOD24_022550D4 - .section .data + .section .rodata ; 0x022550F8 - .incbin "baserom.nds", 0x288EB8, 0xE8 + .incbin "baserom.nds", 0x288EB8, 0xC8 + + .section .sinit + .word MOD24_02254840 diff --git a/arm9/modules/25/asm/module_25.s b/arm9/modules/25/asm/module_25.s index 6df522da..e1d7b555 100644 --- a/arm9/modules/25/asm/module_25.s +++ b/arm9/modules/25/asm/module_25.s @@ -658,6 +658,9 @@ _02254CE6: pop {r4, r5, r6, pc} thumb_func_end MOD25_02254CD8 - .section .data + .section .rodata ; 0x02254CF8 - .incbin "baserom.nds", 0x2894B8, 0xA8 + .incbin "baserom.nds", 0x2894B8, 0x88 + + .section .sinit + .word MOD25_02254840 diff --git a/arm9/modules/26/asm/module_26.s b/arm9/modules/26/asm/module_26.s index 2511101e..0b8d99df 100644 --- a/arm9/modules/26/asm/module_26.s +++ b/arm9/modules/26/asm/module_26.s @@ -788,6 +788,9 @@ _02254DC2: _02254DE0: .word 0x02254FD0 thumb_func_end MOD26_02254DAC - .section .data + .section .rodata ; 0x02254DE4 - .incbin "baserom.nds", 0x289BA4, 0x25C + .incbin "baserom.nds", 0x289BA4, 0x23C + + .section .sinit + .word MOD26_02254840 diff --git a/arm9/modules/27/asm/module_27.s b/arm9/modules/27/asm/module_27.s index b9a2d1ca..13a97851 100644 --- a/arm9/modules/27/asm/module_27.s +++ b/arm9/modules/27/asm/module_27.s @@ -1448,6 +1448,14 @@ MOD27_022552D0: ; 0x022552D0 _02255338: .word 0x00000669 thumb_func_end MOD27_022552D0 - .section .data + .section .rodata ; 0x0225533C - .incbin "baserom.nds", 0x28A8FC, 0xA4 + .incbin "baserom.nds", 0x28A8FC, 0x88 + + ; .section .sinit + .global SDK_OVERLAY.MODULE_27.SINIT_START + .global SDK_OVERLAY.MODULE_27.SINIT_END +SDK_OVERLAY.MODULE_27.SINIT_START: + .word MOD27_02254840 + .word 0 +SDK_OVERLAY.MODULE_27.SINIT_END: diff --git a/arm9/modules/28/asm/module_28.s b/arm9/modules/28/asm/module_28.s index 0ad10077..e1a1d741 100644 --- a/arm9/modules/28/asm/module_28.s +++ b/arm9/modules/28/asm/module_28.s @@ -2963,5 +2963,19 @@ _02255E6E: nop _02255E74: .word 0x00000163 thumb_func_end MOD28_02255920 + + .section .rodata ; 0x02255E78 - .incbin "baserom.nds", 0x28C038, 0x148 + .incbin "baserom.nds", 0x28C038, 0xa0 + + ; .section .sinit + .global SDK_OVERLAY.MODULE_28.SINIT_START + .global SDK_OVERLAY.MODULE_28.SINIT_END +SDK_OVERLAY.MODULE_28.SINIT_START: + .word MOD28_02254840 + .word 0 +SDK_OVERLAY.MODULE_28.SINIT_END: + + .section .data + ; 0x02255F20 + .incbin "baserom.nds", 0x28C0E0, 0xa0 diff --git a/arm9/modules/29/asm/module_29.s b/arm9/modules/29/asm/module_29.s index 818f41aa..db3f5ab8 100644 --- a/arm9/modules/29/asm/module_29.s +++ b/arm9/modules/29/asm/module_29.s @@ -1121,6 +1121,14 @@ MOD29_0225508C: ; 0x0225508C .align 2, 0 thumb_func_end MOD29_0225508C - .section .data + .section .rodata ; 0x0225509C - .incbin "baserom.nds", 0x28CA5C, 0xA4 + .incbin "baserom.nds", 0x28CA5C, 0x90 + + ; .section .sinit + .global SDK_OVERLAY.MODULE_29.SINIT_START + .global SDK_OVERLAY.MODULE_29.SINIT_END +SDK_OVERLAY.MODULE_29.SINIT_START: + .word MOD29_02254840 + .word 0 +SDK_OVERLAY.MODULE_29.SINIT_END: diff --git a/arm9/modules/30/asm/module_30.s b/arm9/modules/30/asm/module_30.s index 36581e76..924f7ad0 100644 --- a/arm9/modules/30/asm/module_30.s +++ b/arm9/modules/30/asm/module_30.s @@ -731,4 +731,12 @@ _02254D9C: .word 0x040002A8 .section .data ; 0x02254DA0 - .incbin "baserom.nds", 0x28D160, 0xA0 + .incbin "baserom.nds", 0x28D160, 0x88 + + ; .section .sinit + .global SDK_OVERLAY.MODULE_30.SINIT_START + .global SDK_OVERLAY.MODULE_30.SINIT_END +SDK_OVERLAY.MODULE_30.SINIT_START: + .word MOD30_02254840 + .word 0 +SDK_OVERLAY.MODULE_30.SINIT_END: diff --git a/arm9/modules/31/asm/module_31.s b/arm9/modules/31/asm/module_31.s index cdf3282a..e9c70424 100644 --- a/arm9/modules/31/asm/module_31.s +++ b/arm9/modules/31/asm/module_31.s @@ -719,6 +719,9 @@ _02254D90: .word 0x040002A0 _02254D94: .word 0x040002A8 thumb_func_end MOD31_02254D1C - .section .data + .section .rodata ; 0x02254D98 - .incbin "baserom.nds", 0x28D758, 0xA8 + .incbin "baserom.nds", 0x28D758, 0x88 + + .section .sinit + .word MOD31_02254840 diff --git a/arm9/modules/32/asm/module_32.s b/arm9/modules/32/asm/module_32.s index 135a9b15..299432f1 100644 --- a/arm9/modules/32/asm/module_32.s +++ b/arm9/modules/32/asm/module_32.s @@ -571,6 +571,14 @@ _02254C48: _02254C50: .word 0x00000663 thumb_func_end MOD32_02254C08 - .section .data + .section .rodata ; 0x02254C54 - .incbin "baserom.nds", 0x28DC14, 0x8C + .incbin "baserom.nds", 0x28DC14, 0x70 + + ; .section .sinit + .global SDK_OVERLAY.MODULE_32.SINIT_START + .global SDK_OVERLAY.MODULE_32.SINIT_END +SDK_OVERLAY.MODULE_32.SINIT_START: + .word MOD32_02254840 + .word 0 +SDK_OVERLAY.MODULE_32.SINIT_END: diff --git a/arm9/modules/33/asm/module_33.s b/arm9/modules/33/asm/module_33.s new file mode 100644 index 00000000..67ec554d --- /dev/null +++ b/arm9/modules/33/asm/module_33.s @@ -0,0 +1,399 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD33_02254840 +MOD33_02254840: ; 0x02254840 + ldr r3, _02254848 ; =MOD20_02252978 + ldr r0, _0225484C ; =MOD33_02254854 + ldr r1, _02254850 ; =MOD33_02254908 + bx r3 + .align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD33_02254854 +_02254850: .word MOD33_02254908 + thumb_func_end MOD33_02254840 + + thumb_func_start MOD33_02254854 +MOD33_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x10 + add r7, r2, #0 + str r3, [sp] + bl FUN_02016998 + add r4, r0, #0 + beq _02254892 + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD33_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD33_022548D4 + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _0225488C + str r4, [r5] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0225488C: + add r0, r4, #0 + bl FUN_02016A18 +_02254892: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254898: .word MOD33_022548D4 + thumb_func_end MOD33_02254854 + + thumb_func_start MOD33_0225489C +MOD33_0225489C: ; 0x0225489C + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + add r0, #8 + add r1, r5, #4 + bl MOD33_022549AC + cmp r0, #0 + beq _022548BC + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + str r4, [r5, #0xc] + mov r0, #1 + pop {r3, r4, r5, pc} +_022548BC: + mov r0, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD33_0225489C + + thumb_func_start MOD33_022548C0 +MOD33_022548C0: ; 0x022548C0 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #8] + bl MOD33_022549DC + add r0, r4, #0 + bl FUN_02016A18 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD33_022548C0 + + thumb_func_start MOD33_022548D4 +MOD33_022548D4: ; 0x022548D4 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldrb r1, [r4] + add r5, r0, #0 + cmp r1, #3 + bhs _02254900 + lsl r2, r1, #2 + ldr r1, _02254904 ; =0x02254AF4 + add r0, r4, #0 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254900 + add r0, r4, #0 + bl MOD33_022548C0 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0xc] + bl MOD20_022529A0 +_02254900: + pop {r3, r4, r5, pc} + nop +_02254904: .word 0x02254AF4 + thumb_func_end MOD33_022548D4 + + thumb_func_start MOD33_02254908 +MOD33_02254908: ; 0x02254908 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD33_02254908 + + thumb_func_start MOD33_02254910 +MOD33_02254910: ; 0x02254910 + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254918 + b _0225491A +_02254918: + mov r1, #2 +_0225491A: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD33_02254910 + + thumb_func_start MOD33_02254924 +MOD33_02254924: ; 0x02254924 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254934 + cmp r0, #1 + beq _02254944 + b _0225495E +_02254934: + ldr r0, [r4, #8] + mov r1, #0 + bl MOD33_022549E8 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _0225495E +_02254944: + ldr r0, [r4, #8] + mov r1, #0 + bl MOD33_02254A0C + cmp r0, #0 + beq _0225495E + ldr r0, [r4, #0xc] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD33_02254910 +_0225495E: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD33_02254924 + + thumb_func_start MOD33_02254964 +MOD33_02254964: ; 0x02254964 + push {r3, lr} + ldrb r1, [r0, #2] + cmp r1, #0 + beq _02254972 + mov r1, #2 + bl MOD33_02254910 +_02254972: + mov r0, #0 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD33_02254964 + + thumb_func_start MOD33_02254978 +MOD33_02254978: ; 0x02254978 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254988 + cmp r0, #1 + beq _02254998 + b _022549A6 +_02254988: + ldr r0, [r4, #8] + mov r1, #1 + bl MOD33_022549E8 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549A6 +_02254998: + ldr r0, [r4, #8] + bl MOD33_02254A18 + cmp r0, #0 + beq _022549A6 + mov r0, #1 + pop {r4, pc} +_022549A6: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD33_02254978 + + thumb_func_start MOD33_022549AC +MOD33_022549AC: ; 0x022549AC + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x30 + bl FUN_02016998 + add r4, r0, #0 + beq _022549D8 + add r0, #8 + mov r1, #8 + bl MOD20_022536F4 + str r6, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + cmp r0, #0 + beq _022549D8 + str r4, [r5] + mov r0, #1 + pop {r4, r5, r6, pc} +_022549D8: + mov r0, #0 + pop {r4, r5, r6, pc} + thumb_func_end MOD33_022549AC + + thumb_func_start MOD33_022549DC +MOD33_022549DC: ; 0x022549DC + push {r3, lr} + cmp r0, #0 + beq _022549E6 + bl FUN_02016A18 +_022549E6: + pop {r3, pc} + thumb_func_end MOD33_022549DC + + thumb_func_start MOD33_022549E8 +MOD33_022549E8: ; 0x022549E8 + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #8 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254A08 ; =0x02254B1C + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254A08: .word 0x02254B1C + thumb_func_end MOD33_022549E8 + + thumb_func_start MOD33_02254A0C +MOD33_02254A0C: ; 0x02254A0C + ldr r3, _02254A14 ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254A14: .word MOD20_02253794 + thumb_func_end MOD33_02254A0C + + thumb_func_start MOD33_02254A18 +MOD33_02254A18: ; 0x02254A18 + ldr r3, _02254A20 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254A20: .word MOD20_022537B8 + thumb_func_end MOD33_02254A18 + + thumb_func_start MOD33_02254A24 +MOD33_02254A24: ; 0x02254A24 + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #8 + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD33_02254A24 + + thumb_func_start MOD33_02254A38 +MOD33_02254A38: ; 0x02254A38 + push {r4, r5, lr} + sub sp, #0x14 + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r5, r0, #0 + ldr r0, [r5, #4] + ldr r2, _02254ACC ; =0x02254B00 + mov r1, #6 + mov r3, #0 + bl FUN_02016C18 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + mov r1, #8 + str r1, [sp, #0xc] + ldr r2, [r5, #4] + mov r0, #0xc + mov r3, #6 + bl FUN_0200687C + mov r2, #0 + str r2, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x18 + str r0, [sp, #8] + str r2, [sp, #0xc] + ldr r0, [r5, #4] + mov r1, #6 + add r3, r2, #0 + bl FUN_02018540 + mov r0, #0x20 + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + mov r0, #0xc + mov r1, #9 + mov r2, #4 + mov r3, #0 + bl FUN_02006930 + ldr r0, [r5, #4] + mov r1, #0xc + mov r2, #6 + bl MOD20_02253AA4 + ldr r0, [r5, #4] + mov r1, #6 + bl FUN_02017CD0 + ldr r1, _02254AD0 ; =0x04001000 + ldr r0, _02254AD4 ; =0xFFFFE0FF + ldr r3, [r1] + ldr r2, [r1] + str r3, [sp, #0x10] + and r0, r2 + lsl r2, r3, #0x13 + lsr r3, r2, #0x1b + mov r2, #4 + orr r2, r3 + lsl r2, r2, #8 + orr r0, r2 + str r0, [r1] + add r0, r4, #0 + bl MOD33_02254A24 + add sp, #0x14 + pop {r4, r5, pc} + nop +_02254ACC: .word 0x02254B00 +_02254AD0: .word 0x04001000 +_02254AD4: .word 0xFFFFE0FF + thumb_func_end MOD33_02254A38 + + thumb_func_start MOD33_02254AD8 +MOD33_02254AD8: ; 0x02254AD8 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + ldr r0, [r0, #4] + mov r1, #6 + bl FUN_020178A0 + add r0, r4, #0 + bl MOD33_02254A24 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD33_02254AD8 + + .section .rodata + ; 0x02254AF4 + .incbin "baserom.nds", 0x28E0B4, 0x4C + + .section .sinit + .word MOD33_02254840 diff --git a/arm9/modules/34/asm/module_34.s b/arm9/modules/34/asm/module_34.s new file mode 100644 index 00000000..a12d1a4a --- /dev/null +++ b/arm9/modules/34/asm/module_34.s @@ -0,0 +1,601 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD34_02254840 +MOD34_02254840: ; 0x02254840 + ldr r3, _02254848 ; =MOD20_02252978 + ldr r0, _0225484C ; =MOD34_02254854 + ldr r1, _02254850 ; =MOD34_02254948 + bx r3 + .align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD34_02254854 +_02254850: .word MOD34_02254948 + thumb_func_end MOD34_02254840 + + thumb_func_start MOD34_02254854 +MOD34_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x38 + add r7, r2, #0 + str r3, [sp] + bl FUN_02016998 + add r4, r0, #0 + beq _02254892 + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD34_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD34_0225490C + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _0225488C + str r4, [r5] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0225488C: + add r0, r4, #0 + bl FUN_02016A18 +_02254892: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254898: .word MOD34_0225490C + thumb_func_end MOD34_02254854 + + thumb_func_start MOD34_0225489C +MOD34_0225489C: ; 0x0225489C + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + add r0, #0x24 + add r1, r5, #4 + bl MOD34_02254A5C + cmp r0, #0 + beq _022548DC + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + str r4, [r5, #0x28] + mov r0, #8 + str r0, [sp] + ldr r0, _022548E0 ; =0x02254C7C + ldr r2, _022548E4 ; =MOD34_02254904 + mov r1, #6 + add r3, r5, #0 + bl MOD20_02254130 + str r0, [r5, #0x2c] + mov r1, #0 + str r1, [r5, #0x30] + mov r0, #1 +_022548D0: + add r1, r1, #1 + str r0, [r5, #8] + add r5, r5, #4 + cmp r1, #6 + blt _022548D0 + pop {r3, r4, r5, pc} +_022548DC: + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 +_022548E0: .word 0x02254C7C +_022548E4: .word MOD34_02254904 + thumb_func_end MOD34_0225489C + + thumb_func_start MOD34_022548E8 +MOD34_022548E8: ; 0x022548E8 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x2c] + cmp r0, #0 + beq _022548F6 + bl MOD20_02254198 +_022548F6: + ldr r0, [r4, #0x24] + bl MOD34_02254A8C + add r0, r4, #0 + bl FUN_02016A18 + pop {r4, pc} + thumb_func_end MOD34_022548E8 + + thumb_func_start MOD34_02254904 +MOD34_02254904: ; 0x02254904 + str r1, [r3, #0x30] + str r0, [r3, #0x34] + bx lr + .align 2, 0 + thumb_func_end MOD34_02254904 + + thumb_func_start MOD34_0225490C +MOD34_0225490C: ; 0x0225490C + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldrb r0, [r4] + cmp r0, #3 + bhs _02254942 + ldr r0, [r4, #0x28] + ldr r1, [r4, #0x2c] + bl MOD20_02252C14 + ldrb r1, [r4] + add r0, r4, #0 + lsl r2, r1, #2 + ldr r1, _02254944 ; =0x02254C70 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254942 + add r0, r4, #0 + bl MOD34_022548E8 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0x28] + bl MOD20_022529A0 +_02254942: + pop {r3, r4, r5, pc} + .align 2, 0 +_02254944: .word 0x02254C70 + thumb_func_end MOD34_0225490C + + thumb_func_start MOD34_02254948 +MOD34_02254948: ; 0x02254948 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD34_02254948 + + thumb_func_start MOD34_02254950 +MOD34_02254950: ; 0x02254950 + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254958 + b _0225495A +_02254958: + mov r1, #2 +_0225495A: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD34_02254950 + + thumb_func_start MOD34_02254964 +MOD34_02254964: ; 0x02254964 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254974 + cmp r0, #1 + beq _02254984 + b _0225499E +_02254974: + ldr r0, [r4, #0x24] + mov r1, #0 + bl MOD34_02254A98 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _0225499E +_02254984: + ldr r0, [r4, #0x24] + mov r1, #0 + bl MOD34_02254ABC + cmp r0, #0 + beq _0225499E + ldr r0, [r4, #0x28] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD34_02254950 +_0225499E: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD34_02254964 + + thumb_func_start MOD34_022549A4 +MOD34_022549A4: ; 0x022549A4 + push {r4, lr} + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _022549B8 + mov r1, #2 + bl MOD34_02254950 + mov r0, #0 + pop {r4, pc} +_022549B8: + ldrb r0, [r4, #1] + cmp r0, #0 + beq _022549C4 + cmp r0, #1 + beq _022549F6 + b _02254A1A +_022549C4: + ldr r0, [r4, #0x30] + cmp r0, #1 + bne _02254A1A + ldr r1, [r4, #0x34] + lsl r0, r1, #2 + add r0, r4, r0 + ldr r0, [r0, #8] + cmp r0, #0 + beq _022549EE + strh r1, [r4, #0x20] + ldr r0, [r4, #0x24] + mov r1, #2 + bl MOD34_02254A98 + ldr r0, _02254A20 ; =0x00000663 + bl MOD20_02252B28 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A1A +_022549EE: + ldr r0, _02254A24 ; =0x0000066E + bl MOD20_02252B28 + b _02254A1A +_022549F6: + ldr r0, [r4, #0x30] + cmp r0, #2 + bne _02254A0A + ldr r0, [r4, #0x24] + mov r1, #3 + bl MOD34_02254A98 + mov r0, #0 + strb r0, [r4, #1] + b _02254A1A +_02254A0A: + cmp r0, #3 + bne _02254A1A + ldr r0, [r4, #0x24] + mov r1, #3 + bl MOD34_02254A98 + mov r0, #0 + strb r0, [r4, #1] +_02254A1A: + mov r0, #0 + pop {r4, pc} + nop +_02254A20: .word 0x00000663 +_02254A24: .word 0x0000066E + thumb_func_end MOD34_022549A4 + + thumb_func_start MOD34_02254A28 +MOD34_02254A28: ; 0x02254A28 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254A38 + cmp r0, #1 + beq _02254A48 + b _02254A56 +_02254A38: + ldr r0, [r4, #0x24] + mov r1, #1 + bl MOD34_02254A98 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A56 +_02254A48: + ldr r0, [r4, #0x24] + bl MOD34_02254AC8 + cmp r0, #0 + beq _02254A56 + mov r0, #1 + pop {r4, pc} +_02254A56: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD34_02254A28 + + thumb_func_start MOD34_02254A5C +MOD34_02254A5C: ; 0x02254A5C + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x20 + bl FUN_02016998 + add r4, r0, #0 + beq _02254A88 + add r0, #8 + mov r1, #4 + bl MOD20_022536F4 + str r6, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + cmp r0, #0 + beq _02254A88 + str r4, [r5] + mov r0, #1 + pop {r4, r5, r6, pc} +_02254A88: + mov r0, #0 + pop {r4, r5, r6, pc} + thumb_func_end MOD34_02254A5C + + thumb_func_start MOD34_02254A8C +MOD34_02254A8C: ; 0x02254A8C + push {r3, lr} + cmp r0, #0 + beq _02254A96 + bl FUN_02016A18 +_02254A96: + pop {r3, pc} + thumb_func_end MOD34_02254A8C + + thumb_func_start MOD34_02254A98 +MOD34_02254A98: ; 0x02254A98 + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #8 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254AB8 ; =0x02254CBC + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254AB8: .word 0x02254CBC + thumb_func_end MOD34_02254A98 + + thumb_func_start MOD34_02254ABC +MOD34_02254ABC: ; 0x02254ABC + ldr r3, _02254AC4 ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254AC4: .word MOD20_02253794 + thumb_func_end MOD34_02254ABC + + thumb_func_start MOD34_02254AC8 +MOD34_02254AC8: ; 0x02254AC8 + ldr r3, _02254AD0 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254AD0: .word MOD20_022537B8 + thumb_func_end MOD34_02254AC8 + + thumb_func_start MOD34_02254AD4 +MOD34_02254AD4: ; 0x02254AD4 + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #8 + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD34_02254AD4 + + thumb_func_start MOD34_02254AE8 +MOD34_02254AE8: ; 0x02254AE8 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + str r1, [sp, #0x10] + add r0, r1, #0 + bl MOD20_022538A0 + add r6, r0, #0 + ldr r0, [sp, #0x10] + bl MOD20_022538A4 + add r5, r0, #0 + ldr r0, [r6, #4] + ldr r2, _02254B8C ; =0x02254CA0 + mov r1, #6 + mov r3, #0 + bl FUN_02016C18 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #8 + str r0, [sp, #0xc] + ldr r2, [r6, #4] + mov r0, #0xc + mov r1, #0x3b + mov r3, #6 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #8 + str r0, [sp, #0xc] + ldr r2, [r6, #4] + mov r0, #0xc + mov r1, #0x3a + mov r3, #6 + bl FUN_020068C8 + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C + mov r4, #0 + add r7, r4, #0 +_02254B4A: + ldr r2, [r5, #4] + add r0, r6, #0 + add r1, r4, #0 + add r3, r7, #0 + bl MOD34_02254C1C + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #6 + blt _02254B4A + ldr r0, [r6, #4] + mov r1, #6 + bl FUN_02017CD0 + ldr r0, _02254B90 ; =0x04001000 + ldr r1, _02254B94 ; =0xFFFFE0FF + ldr r2, [r0] + ldr r4, [r0] + add r3, r2, #0 + and r3, r1 + lsl r1, r4, #0x13 + lsr r2, r1, #0x1b + mov r1, #4 + orr r1, r2 + lsl r1, r1, #8 + orr r1, r3 + str r1, [r0] + ldr r0, [sp, #0x10] + str r4, [sp, #0x14] + bl MOD34_02254AD4 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02254B8C: .word 0x02254CA0 +_02254B90: .word 0x04001000 +_02254B94: .word 0xFFFFE0FF + thumb_func_end MOD34_02254AE8 + + thumb_func_start MOD34_02254B98 +MOD34_02254B98: ; 0x02254B98 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + ldr r0, [r0, #4] + mov r1, #6 + bl FUN_020178A0 + add r0, r4, #0 + bl MOD34_02254AD4 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD34_02254B98 + + thumb_func_start MOD34_02254BB4 +MOD34_02254BB4: ; 0x02254BB4 + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r5, #0 + bl MOD20_022538A4 + add r3, r0, #0 + ldrh r1, [r3, #0x1c] + add r0, r4, #0 + lsl r2, r1, #2 + add r2, r3, r2 + ldr r2, [r2, #4] + mov r3, #1 + bl MOD34_02254C1C + ldr r0, [r4, #4] + mov r1, #6 + bl FUN_02017CD0 + add r0, r5, #0 + bl MOD34_02254AD4 + pop {r3, r4, r5, pc} + thumb_func_end MOD34_02254BB4 + + thumb_func_start MOD34_02254BE8 +MOD34_02254BE8: ; 0x02254BE8 + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r5, #0 + bl MOD20_022538A4 + add r3, r0, #0 + ldrh r1, [r3, #0x1c] + add r0, r4, #0 + lsl r2, r1, #2 + add r2, r3, r2 + ldr r2, [r2, #4] + mov r3, #0 + bl MOD34_02254C1C + ldr r0, [r4, #4] + mov r1, #6 + bl FUN_02017CD0 + add r0, r5, #0 + bl MOD34_02254AD4 + pop {r3, r4, r5, pc} + thumb_func_end MOD34_02254BE8 + + thumb_func_start MOD34_02254C1C +MOD34_02254C1C: ; 0x02254C1C + push {r4, r5, r6, lr} + ldr r0, [r0, #4] + add r5, r1, #0 + mov r1, #6 + add r4, r2, #0 + add r6, r3, #0 + bl FUN_0201886C + ldr r1, _02254C6C ; =0x02254C94 + lsl r2, r5, #1 + ldrh r1, [r1, r2] + lsl r1, r1, #1 + add r2, r0, r1 + cmp r4, #0 + beq _02254C44 + add r1, r5, #1 + mov r0, #0x48 + add r5, r1, #0 + mul r5, r0 + b _02254C46 +_02254C44: + mov r5, #0 +_02254C46: + cmp r6, #0 + beq _02254C4C + add r5, #0x24 +_02254C4C: + mov r3, #0 + add r0, r3, #0 +_02254C50: + add r1, r0, #0 + add r4, r2, #0 +_02254C54: + add r1, r1, #1 + strh r5, [r4] + add r5, r5, #1 + add r4, r4, #2 + cmp r1, #6 + blt _02254C54 + add r3, r3, #1 + add r2, #0x40 + cmp r3, #6 + blt _02254C50 + pop {r4, r5, r6, pc} + nop +_02254C6C: .word 0x02254C94 + thumb_func_end MOD34_02254C1C + + .section .rodata + ; 0x02254C70 + .incbin "baserom.nds", 0x28e630, 0x88 + + ; .section .sinit + .global SDK_OVERLAY.MODULE_34.SINIT_START + .global SDK_OVERLAY.MODULE_34.SINIT_END +SDK_OVERLAY.MODULE_34.SINIT_START: + .word MOD34_02254840 + .word 0 +SDK_OVERLAY.MODULE_34.SINIT_END: diff --git a/arm9/modules/35/asm/module_35.s b/arm9/modules/35/asm/module_35.s new file mode 100644 index 00000000..fe5b7b14 --- /dev/null +++ b/arm9/modules/35/asm/module_35.s @@ -0,0 +1,1142 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD35_02254840 +MOD35_02254840: ; 0x02254840 + ldr r3, _02254848 ; =MOD20_02252978 + ldr r0, _0225484C ; =MOD35_02254854 + ldr r1, _02254850 ; =MOD35_02254924 + bx r3 + .align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD35_02254854 +_02254850: .word MOD35_02254924 + thumb_func_end MOD35_02254840 + + thumb_func_start MOD35_02254854 +MOD35_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x34 + add r7, r2, #0 + str r3, [sp] + bl FUN_02016998 + add r4, r0, #0 + beq _02254892 + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD35_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD35_022548F0 + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _0225488C + str r4, [r5] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0225488C: + add r0, r4, #0 + bl FUN_02016A18 +_02254892: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254898: .word MOD35_022548F0 + thumb_func_end MOD35_02254854 + + thumb_func_start MOD35_0225489C +MOD35_0225489C: ; 0x0225489C + push {r4, r5, r6, lr} + add r4, r1, #0 + add r5, r0, #0 + add r0, r4, #0 + add r6, r2, #0 + bl MOD20_02252C40 + bl FUN_02023D58 + str r0, [r5, #0x30] + ldr r1, [r5, #0x30] + add r0, r5, #4 + bl MOD35_02254A50 + add r0, r5, #0 + add r0, #0x28 + add r1, r5, #4 + add r2, r6, #0 + bl MOD35_02254ADC + cmp r0, #0 + beq _022548D6 + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + str r4, [r5, #0x2c] + mov r0, #1 + pop {r4, r5, r6, pc} +_022548D6: + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD35_0225489C + + thumb_func_start MOD35_022548DC +MOD35_022548DC: ; 0x022548DC + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x28] + bl MOD35_02254B38 + add r0, r4, #0 + bl FUN_02016A18 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD35_022548DC + + thumb_func_start MOD35_022548F0 +MOD35_022548F0: ; 0x022548F0 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldrb r1, [r4] + add r5, r0, #0 + cmp r1, #3 + bhs _0225491C + lsl r2, r1, #2 + ldr r1, _02254920 ; =0x022550B8 + add r0, r4, #0 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _0225491C + add r0, r4, #0 + bl MOD35_022548DC + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0x2c] + bl MOD20_022529A0 +_0225491C: + pop {r3, r4, r5, pc} + nop +_02254920: .word 0x022550B8 + thumb_func_end MOD35_022548F0 + + thumb_func_start MOD35_02254924 +MOD35_02254924: ; 0x02254924 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD35_02254924 + + thumb_func_start MOD35_0225492C +MOD35_0225492C: ; 0x0225492C + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254934 + b _02254936 +_02254934: + mov r1, #2 +_02254936: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD35_0225492C + + thumb_func_start MOD35_02254940 +MOD35_02254940: ; 0x02254940 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254950 + cmp r0, #1 + beq _02254960 + b _0225497A +_02254950: + ldr r0, [r4, #0x28] + mov r1, #0 + bl MOD35_02254C48 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _0225497A +_02254960: + ldr r0, [r4, #0x28] + mov r1, #0 + bl MOD35_02254C6C + cmp r0, #0 + beq _0225497A + ldr r0, [r4, #0x2c] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD35_0225492C +_0225497A: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD35_02254940 + + thumb_func_start MOD35_02254980 +MOD35_02254980: ; 0x02254980 + push {r4, lr} + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _02254994 + mov r1, #2 + bl MOD35_0225492C + mov r0, #0 + pop {r4, pc} +_02254994: + ldrb r1, [r4, #1] + cmp r1, #0 + beq _022549A0 + cmp r1, #1 + beq _022549C0 + b _022549D0 +_022549A0: + bl MOD35_02254A08 + cmp r0, #0 + beq _022549D0 + ldr r1, [r4, #0x30] + add r0, r4, #4 + bl MOD35_02254A50 + ldr r0, [r4, #0x28] + mov r1, #2 + bl MOD35_02254C48 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549D0 +_022549C0: + ldr r0, [r4, #0x28] + mov r1, #2 + bl MOD35_02254C6C + cmp r0, #0 + beq _022549D0 + mov r0, #0 + strb r0, [r4, #1] +_022549D0: + mov r0, #0 + pop {r4, pc} + thumb_func_end MOD35_02254980 + + thumb_func_start MOD35_022549D4 +MOD35_022549D4: ; 0x022549D4 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _022549E4 + cmp r0, #1 + beq _022549F4 + b _02254A02 +_022549E4: + ldr r0, [r4, #0x28] + mov r1, #1 + bl MOD35_02254C48 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A02 +_022549F4: + ldr r0, [r4, #0x28] + bl MOD35_02254C78 + cmp r0, #0 + beq _02254A02 + mov r0, #1 + pop {r4, pc} +_02254A02: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD35_022549D4 + + thumb_func_start MOD35_02254A08 +MOD35_02254A08: ; 0x02254A08 + push {r3, lr} + sub sp, #8 + ldr r0, [r0, #0x2c] + bl MOD20_02252C08 + cmp r0, #0 + bne _02254A48 + add r0, sp, #4 + add r1, sp, #0 + bl FUN_02020ACC + cmp r0, #0 + beq _02254A48 + ldr r0, [sp, #4] + sub r0, #0x10 + cmp r0, #0xbf + bhs _02254A2E + mov r1, #1 + b _02254A30 +_02254A2E: + mov r1, #0 +_02254A30: + ldr r0, [sp] + sub r0, #0x10 + cmp r0, #0x9f + bhs _02254A3C + mov r0, #1 + b _02254A3E +_02254A3C: + mov r0, #0 +_02254A3E: + tst r0, r1 + beq _02254A48 + add sp, #8 + mov r0, #1 + pop {r3, pc} +_02254A48: + mov r0, #0 + add sp, #8 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD35_02254A08 + + thumb_func_start MOD35_02254A50 +MOD35_02254A50: ; 0x02254A50 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + str r0, [sp] + add r0, r1, #0 + str r1, [sp, #4] + bl MOD05_021EC464 + ldr r1, [sp] + strb r0, [r1] + ldr r0, [sp, #4] + bl FUN_02023C90 + ldr r1, [sp] + mov r7, #0 + strb r0, [r1, #1] + add r0, r1, #0 + ldrb r0, [r0] + cmp r0, #0 + ble _02254AD6 + add r5, r1, #0 + add r6, r1, #0 +_02254A7A: + ldr r0, [sp, #4] + add r1, r7, #0 + bl FUN_02023C74 + str r0, [sp, #8] + bl FUN_02023C7C + add r4, r0, #0 + bl FUN_02066A6C + str r0, [sp, #0xc] + add r0, r4, #0 + bl FUN_0206B688 + str r0, [r5, #4] + add r0, r4, #0 + mov r1, #5 + mov r2, #0 + bl FUN_020672BC + strh r0, [r6, #0x1c] + add r0, r4, #0 + mov r1, #0x70 + mov r2, #0 + bl FUN_020672BC + strh r0, [r6, #0x20] + ldr r0, [sp, #8] + bl MOD05_021EC7B4 + str r0, [r5, #0xc] + add r0, r4, #0 + bl FUN_020689E8 + str r0, [r5, #0x14] + ldr r1, [sp, #0xc] + add r0, r4, #0 + bl FUN_02066A94 + ldr r0, [sp] + add r7, r7, #1 + ldrb r0, [r0] + add r5, r5, #4 + add r6, r6, #2 + cmp r7, r0 + blt _02254A7A +_02254AD6: + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD35_02254A50 + + thumb_func_start MOD35_02254ADC +MOD35_02254ADC: ; 0x02254ADC + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + mov r0, #8 + mov r1, #0x90 + bl FUN_02016998 + add r4, r0, #0 + beq _02254B2E + add r0, #8 + mov r1, #4 + bl MOD20_022536F4 + str r5, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + bl MOD20_02252D24 + str r0, [r4, #0x20] + add r0, r4, #0 + mov r2, #0 + add r0, #0x88 + str r2, [r0] + ldr r0, _02254B34 ; =MOD35_02254E60 + add r1, r4, #0 + bl FUN_0200CA98 + add r1, r4, #0 + add r1, #0x8c + str r0, [r1] + add r0, r4, #0 + add r1, r5, #0 + bl MOD35_02254B54 + ldr r0, [r4, #4] + cmp r0, #0 + beq _02254B2E + str r4, [r6] + mov r0, #1 + pop {r4, r5, r6, pc} +_02254B2E: + mov r0, #0 + pop {r4, r5, r6, pc} + nop +_02254B34: .word MOD35_02254E60 + thumb_func_end MOD35_02254ADC + + thumb_func_start MOD35_02254B38 +MOD35_02254B38: ; 0x02254B38 + push {r4, lr} + add r4, r0, #0 + beq _02254B52 + bl MOD35_02254C18 + add r0, r4, #0 + add r0, #0x8c + ldr r0, [r0] + bl FUN_0200CAB4 + add r0, r4, #0 + bl FUN_02016A18 +_02254B52: + pop {r4, pc} + thumb_func_end MOD35_02254B38 + + thumb_func_start MOD35_02254B54 +MOD35_02254B54: ; 0x02254B54 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x20 + add r7, r0, #0 + mov r0, #1 + str r1, [sp, #0xc] + bl MOD20_022539C4 + mov r3, #0 + str r3, [sp] + mov r2, #1 + str r2, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r0, #0xc + mov r1, #0x54 + bl FUN_02006A34 + mov r1, #0x14 + bl _u32_div_f + ldr r1, [sp, #0xc] + str r0, [sp, #0x14] + str r0, [r7, #0x78] + bl MOD35_02254E88 + mov r0, #8 + str r0, [sp] + add r0, r7, #0 + add r0, #0x50 + mov r1, #0xc + mov r2, #0x52 + mov r3, #0x53 + bl MOD20_02253FBC + mov r0, #8 + str r0, [sp] + add r0, r7, #0 + add r0, #0x64 + mov r1, #0xc + mov r2, #5 + mov r3, #6 + bl MOD20_02253FBC + add r0, r7, #0 + str r0, [sp, #0x1c] + add r0, #0x50 + str r0, [sp, #0x1c] + add r0, r7, #0 + mov r4, #0 + str r0, [sp, #0x18] + add r0, #0x64 + ldr r6, _02254C14 ; =0x02255110 + add r5, r7, #0 + str r4, [sp, #0x10] + str r0, [sp, #0x18] +_02254BC2: + cmp r4, #0 + blt _02254BE2 + cmp r4, #2 + bgt _02254BE2 + ldr r0, [r7, #0x20] + ldr r2, [sp, #0x18] + add r1, r6, #0 + bl MOD20_02253E74 + ldr r2, [sp, #0x14] + ldr r1, [sp, #0x10] + str r0, [r5, #0x24] + add r1, r2, r1 + bl MOD20_02253FA4 + b _02254BEE +_02254BE2: + ldr r0, [r7, #0x20] + ldr r2, [sp, #0x1c] + add r1, r6, #0 + bl MOD20_02253E74 + str r0, [r5, #0x24] +_02254BEE: + ldr r0, [r5, #0x24] + mov r1, #1 + bl MOD20_02253FAC + ldr r0, [sp, #0x10] + add r4, r4, #1 + add r0, #0x20 + add r6, #0x10 + add r5, r5, #4 + str r0, [sp, #0x10] + cmp r4, #0xb + blt _02254BC2 + ldr r1, [sp, #0xc] + add r0, r7, #0 + bl MOD35_02254EC8 + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254C14: .word 0x02255110 + thumb_func_end MOD35_02254B54 + + thumb_func_start MOD35_02254C18 +MOD35_02254C18: ; 0x02254C18 + push {r4, r5, r6, lr} + add r6, r0, #0 + mov r4, #0 + add r5, r6, #0 +_02254C20: + ldr r1, [r5, #0x24] + cmp r1, #0 + beq _02254C2C + ldr r0, [r6, #0x20] + bl MOD20_02253F14 +_02254C2C: + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #0xb + blt _02254C20 + add r0, r6, #0 + add r0, #0x64 + bl MOD20_02254014 + add r6, #0x50 + add r0, r6, #0 + bl MOD20_02254014 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD35_02254C18 + + thumb_func_start MOD35_02254C48 +MOD35_02254C48: ; 0x02254C48 + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #8 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254C68 ; =0x022550E0 + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254C68: .word 0x022550E0 + thumb_func_end MOD35_02254C48 + + thumb_func_start MOD35_02254C6C +MOD35_02254C6C: ; 0x02254C6C + ldr r3, _02254C74 ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254C74: .word MOD20_02253794 + thumb_func_end MOD35_02254C6C + + thumb_func_start MOD35_02254C78 +MOD35_02254C78: ; 0x02254C78 + ldr r3, _02254C80 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254C80: .word MOD20_022537B8 + thumb_func_end MOD35_02254C78 + + thumb_func_start MOD35_02254C84 +MOD35_02254C84: ; 0x02254C84 + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #8 + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD35_02254C84 + + thumb_func_start MOD35_02254C98 +MOD35_02254C98: ; 0x02254C98 + push {r4, r5, lr} + sub sp, #0x14 + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r5, r0, #0 + ldr r0, [r5, #4] + ldr r2, _02254D24 ; =0x022550C4 + mov r1, #6 + mov r3, #0 + bl FUN_02016C18 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #8 + str r0, [sp, #0xc] + ldr r2, [r5, #4] + mov r0, #0xc + mov r1, #0x51 + mov r3, #6 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #8 + str r0, [sp, #0xc] + ldr r2, [r5, #4] + mov r0, #0xc + mov r1, #0x50 + mov r3, #6 + bl FUN_020068C8 + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C + ldr r0, [r5, #4] + mov r1, #6 + bl FUN_02017CD0 + ldr r1, _02254D28 ; =0x0400104C + mov r0, #0 + strb r0, [r1] + strb r0, [r1, #1] + sub r1, #0x4c + ldr r3, [r1] + ldr r2, [r1] + ldr r0, _02254D2C ; =0xFFFFE0FF + str r3, [sp, #0x10] + and r0, r2 + lsl r2, r3, #0x13 + lsr r3, r2, #0x1b + mov r2, #4 + orr r2, r3 + lsl r2, r2, #8 + orr r0, r2 + str r0, [r1] + add r0, r4, #0 + bl MOD35_02254C84 + add sp, #0x14 + pop {r4, r5, pc} + nop +_02254D24: .word 0x022550C4 +_02254D28: .word 0x0400104C +_02254D2C: .word 0xFFFFE0FF + thumb_func_end MOD35_02254C98 + + thumb_func_start MOD35_02254D30 +MOD35_02254D30: ; 0x02254D30 + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r5, #0 + bl MOD20_022538AC + cmp r0, #0 + beq _02254D4C + cmp r0, #1 + beq _02254D5A + pop {r3, r4, r5, pc} +_02254D4C: + mov r0, #1 + add r4, #0x84 + str r0, [r4] + add r0, r5, #0 + bl MOD20_022538B0 + pop {r3, r4, r5, pc} +_02254D5A: + add r0, r4, #0 + mov r1, #2 + bl MOD35_02254C6C + cmp r0, #0 + beq _02254D7C + ldr r0, _02254D80 ; =0x0400104C + mov r1, #0 + strb r1, [r0] + strb r1, [r0, #1] + ldr r0, [r4, #4] + mov r1, #6 + bl FUN_020178A0 + add r0, r5, #0 + bl MOD35_02254C84 +_02254D7C: + pop {r3, r4, r5, pc} + nop +_02254D80: .word 0x0400104C + thumb_func_end MOD35_02254D30 + + thumb_func_start MOD35_02254D84 +MOD35_02254D84: ; 0x02254D84 + push {r4, r5, r6, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r5, #0 + bl MOD20_022538A4 + add r6, r0, #0 + add r0, r5, #0 + bl MOD20_022538AC + cmp r0, #3 + bhi _02254E50 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02254DAE: ; jump table + .short _02254DB6 - _02254DAE - 2 ; case 0 + .short _02254DDC - _02254DAE - 2 ; case 1 + .short _02254DF4 - _02254DAE - 2 ; case 2 + .short _02254E4A - _02254DAE - 2 ; case 3 +_02254DB6: + add r0, r4, #0 + mov r1, #0 + add r0, #0x84 + str r1, [r0] + add r0, r4, #0 + add r0, #0x80 + str r1, [r0] + mov r0, #0xa + str r0, [r4, #0x7c] + add r0, r4, #0 + bl MOD35_02254E58 + ldr r0, _02254E54 ; =0x00000678 + bl MOD20_02252B28 + add r0, r5, #0 + bl MOD20_022538B0 + pop {r4, r5, r6, pc} +_02254DDC: + ldr r0, [r4, #0x78] + add r1, r6, #0 + bl MOD35_02254E88 + add r0, r4, #0 + add r1, r6, #0 + bl MOD35_02254EC8 + add r0, r5, #0 + bl MOD20_022538B0 + pop {r4, r5, r6, pc} +_02254DF4: + add r0, r4, #0 + add r0, #0x84 + ldr r0, [r0] + cmp r0, #0 + beq _02254E10 + mov r0, #0 + str r0, [r4, #0x7c] + add r0, r4, #0 + bl MOD35_02254E58 + add r0, r5, #0 + bl MOD20_022538B0 + pop {r4, r5, r6, pc} +_02254E10: + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + add r1, r0, #1 + add r0, r4, #0 + add r0, #0x80 + str r1, [r0] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #4 + blo _02254E50 + add r0, r4, #0 + mov r1, #0 + add r0, #0x80 + str r1, [r0] + ldr r0, [r4, #0x7c] + sub r0, r0, #1 + str r0, [r4, #0x7c] + add r0, r4, #0 + bl MOD35_02254E58 + ldr r0, [r4, #0x7c] + cmp r0, #0 + bne _02254E50 + add r0, r5, #0 + bl MOD20_022538B0 + pop {r4, r5, r6, pc} +_02254E4A: + add r0, r5, #0 + bl MOD35_02254C84 +_02254E50: + pop {r4, r5, r6, pc} + nop +_02254E54: .word 0x00000678 + thumb_func_end MOD35_02254D84 + + thumb_func_start MOD35_02254E58 +MOD35_02254E58: ; 0x02254E58 + mov r1, #1 + add r0, #0x88 + str r1, [r0] + bx lr + thumb_func_end MOD35_02254E58 + + thumb_func_start MOD35_02254E60 +MOD35_02254E60: ; 0x02254E60 + add r0, r1, #0 + add r0, #0x88 + ldr r0, [r0] + cmp r0, #0 + beq _02254E82 + ldr r2, [r1, #0x7c] + ldr r3, _02254E84 ; =0x0400104C + lsl r0, r2, #4 + orr r0, r2 + strb r0, [r3] + ldr r2, [r1, #0x7c] + add r1, #0x88 + lsl r0, r2, #4 + orr r0, r2 + strb r0, [r3, #1] + mov r0, #0 + str r0, [r1] +_02254E82: + bx lr + .align 2, 0 +_02254E84: .word 0x0400104C + thumb_func_end MOD35_02254E60 + + thumb_func_start MOD35_02254E88 +MOD35_02254E88: ; 0x02254E88 + push {r4, r5, lr} + sub sp, #0xc + add r5, r0, #0 + mov r0, #1 + add r4, r1, #0 + add r1, r0, #0 + mov r2, #0 + bl FUN_0206B6D4 + ldrb r1, [r4] + cmp r1, #0 + beq _02254EA4 + ldr r1, [r4, #4] + b _02254EA6 +_02254EA4: + add r1, r0, #0 +_02254EA6: + str r1, [sp] + ldrb r1, [r4] + cmp r1, #1 + bls _02254EB2 + ldr r1, [r4, #8] + b _02254EB4 +_02254EB2: + add r1, r0, #0 +_02254EB4: + str r1, [sp, #4] + str r0, [sp, #8] + add r0, r5, #0 + add r1, sp, #0 + mov r2, #3 + mov r3, #1 + bl MOD20_02253A04 + add sp, #0xc + pop {r4, r5, pc} + thumb_func_end MOD35_02254E88 + + thumb_func_start MOD35_02254EC8 +MOD35_02254EC8: ; 0x02254EC8 + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + mov r0, #0 + add r6, r1, #0 + str r0, [sp] + ldrb r0, [r6] + cmp r0, #0 + ble _02254F00 + add r4, r6, #0 + add r5, r7, #0 +_02254EDC: + ldrh r0, [r4, #0x1c] + ldrh r1, [r4, #0x20] + mov r2, #0 + bl FUN_0206B7BC + add r1, r0, #0 + ldr r0, [r5, #0x24] + add r1, r1, #1 + bl MOD20_02253F9C + ldr r0, [sp] + ldrb r1, [r6] + add r0, r0, #1 + add r4, r4, #2 + add r5, r5, #4 + str r0, [sp] + cmp r0, r1 + blt _02254EDC +_02254F00: + mov r0, #1 + mov r1, #0 + add r2, r0, #0 + bl FUN_0206B7BC + add r1, r0, #0 + ldr r0, [r7, #0x2c] + add r1, r1, #1 + bl MOD20_02253F9C + ldrb r0, [r6] + cmp r0, #0 + beq _02254F36 + ldrh r0, [r6, #0x1c] + mov r1, #0x1c + bl FUN_02068678 + cmp r0, #0 + ldr r0, [r7, #0x24] + beq _02254F30 + mov r1, #6 + bl MOD20_02253F28 + b _02254F36 +_02254F30: + mov r1, #7 + bl MOD20_02253F28 +_02254F36: + add r0, r7, #0 + ldr r1, [r6, #0xc] + add r0, #0x30 + bl MOD35_02254FD8 + add r0, r7, #0 + ldr r1, [r6, #0x10] + add r0, #0x3c + bl MOD35_02254FD8 + ldr r0, [r7, #0x48] + ldr r1, [r6, #0x14] + bl MOD35_02255094 + ldr r0, [r7, #0x4c] + ldr r1, [r6, #0x18] + bl MOD35_02255094 + ldrb r0, [r6] + cmp r0, #0 + bne _02254F64 + mov r4, #1 + b _02254F66 +_02254F64: + mov r4, #0 +_02254F66: + ldr r0, [r7, #0x24] + add r1, r4, #0 + bl MOD20_02253F78 + ldr r0, [r7, #0x30] + add r1, r4, #0 + bl MOD20_02253F78 + ldr r0, [r7, #0x34] + add r1, r4, #0 + bl MOD20_02253F78 + ldr r0, [r7, #0x38] + add r1, r4, #0 + bl MOD20_02253F78 + ldr r0, [r7, #0x48] + add r1, r4, #0 + bl MOD20_02253F78 + ldrb r0, [r6] + cmp r0, #1 + bhi _02254F98 + mov r4, #1 + b _02254F9A +_02254F98: + mov r4, #0 +_02254F9A: + ldr r0, [r7, #0x28] + add r1, r4, #0 + bl MOD20_02253F78 + ldr r0, [r7, #0x3c] + add r1, r4, #0 + bl MOD20_02253F78 + ldr r0, [r7, #0x40] + add r1, r4, #0 + bl MOD20_02253F78 + ldr r0, [r7, #0x44] + add r1, r4, #0 + bl MOD20_02253F78 + ldr r0, [r7, #0x4c] + add r1, r4, #0 + bl MOD20_02253F78 + ldrb r0, [r6, #1] + cmp r0, #0 + bne _02254FCC + mov r1, #1 + b _02254FCE +_02254FCC: + mov r1, #0 +_02254FCE: + ldr r0, [r7, #0x2c] + bl MOD20_02253F78 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD35_02254EC8 + + thumb_func_start MOD35_02254FD8 +MOD35_02254FD8: ; 0x02254FD8 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r7, r1, #0 + str r0, [sp] + cmp r7, #0x64 + bls _02254FE6 + mov r7, #0x64 +_02254FE6: + ldr r2, _02255088 ; =0x04000280 + mov r3, #0 + strh r3, [r2] + add r0, r2, #0 + str r7, [r2, #0x10] + mov r1, #0x64 + add r0, #0x18 + str r1, [r0] + str r3, [r0, #4] + lsr r0, r2, #0xb +_02254FFA: + ldrh r1, [r2] + tst r1, r0 + bne _02254FFA + ldr r0, _0225508C ; =0x040002A0 + ldr r4, _02255088 ; =0x04000280 + ldr r0, [r0] + str r0, [sp, #4] + lsr r0, r4, #0xb +_0225500A: + ldrh r1, [r4] + tst r1, r0 + bne _0225500A + ldr r3, _02255090 ; =0x040002A8 + mov r1, #0 + ldr r2, [r3] + add r0, r3, #0 + strh r1, [r4] + sub r0, #0x18 + str r2, [r0] + mov r0, #0xa + sub r3, #0x10 + str r0, [r3] + ldr r2, _02255088 ; =0x04000280 + str r1, [r3, #4] + lsr r0, r2, #0xb +_0225502A: + ldrh r1, [r2] + tst r1, r0 + bne _0225502A + ldr r0, _0225508C ; =0x040002A0 + ldr r2, _02255088 ; =0x04000280 + ldr r0, [r0] + str r0, [sp, #8] + lsr r0, r2, #0xb +_0225503A: + ldrh r1, [r2] + tst r1, r0 + bne _0225503A + ldr r0, _02255090 ; =0x040002A8 + ldr r5, [sp] + ldr r0, [r0] + mov r6, #0 + str r0, [sp, #0xc] + add r4, sp, #4 +_0225504C: + ldr r0, [r5] + ldr r1, [r4] + bl MOD20_02253F28 + add r6, r6, #1 + add r4, r4, #4 + add r5, r5, #4 + cmp r6, #3 + blt _0225504C + cmp r7, #0x64 + bhs _02255066 + mov r1, #1 + b _02255068 +_02255066: + mov r1, #0 +_02255068: + ldr r0, [sp] + ldr r0, [r0] + bl MOD20_02253F78 + cmp r7, #0xa + bhs _02255078 + mov r1, #1 + b _0225507A +_02255078: + mov r1, #0 +_0225507A: + ldr r0, [sp] + ldr r0, [r0, #4] + bl MOD20_02253F78 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + nop +_02255088: .word 0x04000280 +_0225508C: .word 0x040002A0 +_02255090: .word 0x040002A8 + thumb_func_end MOD35_02254FD8 + + thumb_func_start MOD35_02255094 +MOD35_02255094: ; 0x02255094 + push {r3, lr} + cmp r1, #0 + beq _022550A0 + cmp r1, #1 + beq _022550A8 + b _022550B0 +_022550A0: + mov r1, #0xa + bl MOD20_02253F28 + pop {r3, pc} +_022550A8: + mov r1, #0xb + bl MOD20_02253F28 + pop {r3, pc} +_022550B0: + mov r1, #0xc + bl MOD20_02253F28 + pop {r3, pc} + thumb_func_end MOD35_02255094 + + .section .rodata + ; 0x022550B8 + .incbin "baserom.nds", 0x28f078, 0x108 + + .section .sinit + .word MOD35_02254840 diff --git a/arm9/modules/36/asm/module_36.s b/arm9/modules/36/asm/module_36.s new file mode 100644 index 00000000..d15b1d72 --- /dev/null +++ b/arm9/modules/36/asm/module_36.s @@ -0,0 +1,1571 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD36_02254840 +MOD36_02254840: ; 0x02254840 + ldr r3, _02254848 ; =MOD20_02252978 + ldr r0, _0225484C ; =MOD36_02254854 + ldr r1, _02254850 ; =MOD36_02254990 + bx r3 + .align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD36_02254854 +_02254850: .word MOD36_02254990 + thumb_func_end MOD36_02254840 + + thumb_func_start MOD36_02254854 +MOD36_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r6, r1, #0 + add r5, r0, #0 + ldr r1, _02254898 ; =0x00005B90 + mov r0, #8 + add r7, r2, #0 + str r3, [sp] + bl FUN_02016998 + add r4, r0, #0 + beq _02254892 + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD36_022548A0 + cmp r0, #0 + beq _0225488C + ldr r0, _0225489C ; =MOD36_02254938 + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _0225488C + str r4, [r5] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0225488C: + add r0, r4, #0 + bl FUN_02016A18 +_02254892: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254898: .word 0x00005B90 +_0225489C: .word MOD36_02254938 + thumb_func_end MOD36_02254854 + + thumb_func_start MOD36_022548A0 +MOD36_022548A0: ; 0x022548A0 + push {r3, r4, r5, r6, lr} + sub sp, #4 + add r5, r0, #0 + add r4, r1, #0 + ldr r1, _02254904 ; =0x00005B78 + str r3, [r5, #0xc] + mov r0, #0 + strb r0, [r5, r1] + mov r6, #1 + add r3, r1, #1 + strb r6, [r5, r3] + add r3, r1, #2 + strb r0, [r5, r3] + add r0, r1, #4 + add r0, r5, r0 + add r1, r5, #4 + bl MOD36_02254E30 + cmp r0, #0 + beq _022548FC + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + strb r0, [r5, #3] + add r0, r5, #4 + bl MOD36_02254E10 + mov r0, #8 + str r0, [sp] + ldr r0, _02254908 ; =0x022553E8 + ldr r2, _0225490C ; =MOD36_02254980 + mov r1, #3 + add r3, r5, #0 + bl MOD20_02254130 + ldr r1, _02254910 ; =0x00005B84 + mov r2, #0 + str r0, [r5, r1] + add r0, r1, #4 + str r2, [r5, r0] + sub r0, r1, #4 + str r4, [r5, r0] + add sp, #4 + add r0, r6, #0 + pop {r3, r4, r5, r6, pc} +_022548FC: + mov r0, #0 + add sp, #4 + pop {r3, r4, r5, r6, pc} + nop +_02254904: .word 0x00005B78 +_02254908: .word 0x022553E8 +_0225490C: .word MOD36_02254980 +_02254910: .word 0x00005B84 + thumb_func_end MOD36_022548A0 + + thumb_func_start MOD36_02254914 +MOD36_02254914: ; 0x02254914 + push {r4, lr} + add r4, r0, #0 + ldr r0, _02254930 ; =0x00005B84 + ldr r0, [r4, r0] + bl MOD20_02254198 + ldr r0, _02254934 ; =0x00005B7C + ldr r0, [r4, r0] + bl MOD36_02254E78 + add r0, r4, #0 + bl FUN_02016A18 + pop {r4, pc} + .align 2, 0 +_02254930: .word 0x00005B84 +_02254934: .word 0x00005B7C + thumb_func_end MOD36_02254914 + + thumb_func_start MOD36_02254938 +MOD36_02254938: ; 0x02254938 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldrb r0, [r4] + cmp r0, #3 + bhs _02254974 + ldr r1, _02254978 ; =0x00005B80 + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + bl MOD20_02252C14 + ldrb r1, [r4] + add r0, r4, #0 + lsl r2, r1, #2 + ldr r1, _0225497C ; =0x022553F4 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254974 + add r0, r4, #0 + bl MOD36_02254914 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, _02254978 ; =0x00005B80 + ldr r0, [r4, r0] + bl MOD20_022529A0 +_02254974: + pop {r3, r4, r5, pc} + nop +_02254978: .word 0x00005B80 +_0225497C: .word 0x022553F4 + thumb_func_end MOD36_02254938 + + thumb_func_start MOD36_02254980 +MOD36_02254980: ; 0x02254980 + ldr r2, _0225498C ; =0x00005B88 + str r1, [r3, r2] + add r1, r2, #4 + str r0, [r3, r1] + bx lr + nop +_0225498C: .word 0x00005B88 + thumb_func_end MOD36_02254980 + + thumb_func_start MOD36_02254990 +MOD36_02254990: ; 0x02254990 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD36_02254990 + + thumb_func_start MOD36_02254998 +MOD36_02254998: ; 0x02254998 + ldrb r2, [r0, #2] + cmp r2, #0 + bne _022549A0 + b _022549A2 +_022549A0: + mov r1, #2 +_022549A2: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD36_02254998 + + thumb_func_start MOD36_022549AC +MOD36_022549AC: ; 0x022549AC + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _022549BC + cmp r0, #1 + beq _022549CE + b _022549EC +_022549BC: + ldr r0, _022549F0 ; =0x00005B7C + mov r1, #0 + ldr r0, [r4, r0] + bl MOD36_02254F0C + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549EC +_022549CE: + ldr r0, _022549F0 ; =0x00005B7C + mov r1, #0 + ldr r0, [r4, r0] + bl MOD36_02254F30 + cmp r0, #0 + beq _022549EC + ldr r0, _022549F4 ; =0x00005B80 + ldr r0, [r4, r0] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD36_02254998 +_022549EC: + mov r0, #0 + pop {r4, pc} + .align 2, 0 +_022549F0: .word 0x00005B7C +_022549F4: .word 0x00005B80 + thumb_func_end MOD36_022549AC + + thumb_func_start MOD36_022549F8 +MOD36_022549F8: ; 0x022549F8 + push {r3, r4, r5, r6, lr} + sub sp, #4 + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _02254A0A + mov r1, #2 + bl MOD36_02254998 +_02254A0A: + ldrb r0, [r4, #1] + cmp r0, #3 + bhi _02254A30 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02254A1C: ; jump table + .short _02254A24 - _02254A1C - 2 ; case 0 + .short _02254AF4 - _02254A1C - 2 ; case 1 + .short _02254B4E - _02254A1C - 2 ; case 2 + .short _02254B7C - _02254A1C - 2 ; case 3 +_02254A24: + ldr r0, _02254BCC ; =0x00005B80 + ldr r0, [r4, r0] + bl MOD20_02252C08 + cmp r0, #0 + beq _02254A32 +_02254A30: + b _02254BC4 +_02254A32: + ldr r1, _02254BD0 ; =0x00005B88 + ldr r0, [r4, r1] + cmp r0, #1 + bne _02254AAE + add r0, r1, #4 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02254A4C + cmp r0, #1 + beq _02254A82 + cmp r0, #2 + beq _02254A8A + b _02254AA6 +_02254A4C: + add r0, r1, #0 + mov r3, #1 + sub r0, #0x10 + strb r3, [r4, r0] + add r0, r1, #0 + mov r2, #0 + sub r0, #0xf + strb r2, [r4, r0] + add r0, r1, #0 + sub r0, #0xe + sub r1, #0xc + strb r3, [r4, r0] + ldr r0, [r4, r1] + mov r1, #5 + bl MOD36_02254F0C + ldr r0, _02254BD4 ; =0x00005B7C + mov r1, #7 + ldr r0, [r4, r0] + bl MOD36_02254F0C + ldr r0, _02254BD8 ; =0x00000663 + bl MOD20_02252B28 + mov r0, #1 + strb r0, [r4, #1] + b _02254AA6 +_02254A82: + ldr r0, _02254BDC ; =0x0000066E + bl MOD20_02252B28 + b _02254AA6 +_02254A8A: + add r0, r1, #0 + mov r2, #1 + sub r0, #0xe + sub r1, #0xc + strb r2, [r4, r0] + ldr r0, [r4, r1] + mov r1, #5 + bl MOD36_02254F0C + ldr r0, _02254BD8 ; =0x00000663 + bl MOD20_02252B28 + mov r0, #3 + strb r0, [r4, #1] +_02254AA6: + ldr r0, _02254BD0 ; =0x00005B88 + mov r1, #0 + str r1, [r4, r0] + b _02254BC4 +_02254AAE: + ldrb r0, [r4, #3] + cmp r0, #0 + beq _02254ADA + add r0, r4, #0 + ldr r6, [r4, #4] + ldr r5, [r4, #8] + bl MOD36_02254C44 + cmp r0, #0 + beq _02254AD4 + ldr r0, [r4, #8] + add r1, r6, #0 + str r0, [sp] + ldr r3, [r4, #4] + add r0, r4, #0 + add r2, r5, #0 + bl MOD36_02254C90 + b _02254BC4 +_02254AD4: + mov r0, #0 + strb r0, [r4, #3] + b _02254BC4 +_02254ADA: + add r0, r4, #0 + bl MOD36_02254BE4 + cmp r0, #0 + beq _02254BC4 + ldr r0, _02254BD4 ; =0x00005B7C + mov r1, #3 + ldr r0, [r4, r0] + bl MOD36_02254F0C + mov r0, #1 + strb r0, [r4, #3] + b _02254BC4 +_02254AF4: + ldr r1, _02254BD0 ; =0x00005B88 + ldr r0, [r4, r1] + cmp r0, #1 + bne _02254BC4 + add r0, r1, #4 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02254B0C + cmp r0, #1 + beq _02254B14 + cmp r0, #2 + bne _02254B46 +_02254B0C: + ldr r0, _02254BDC ; =0x0000066E + bl MOD20_02252B28 + b _02254B46 +_02254B14: + add r0, r1, #0 + mov r2, #1 + sub r0, #0x10 + strb r2, [r4, r0] + add r0, r1, #0 + sub r0, #0xf + strb r2, [r4, r0] + add r0, r1, #0 + sub r0, #0xe + sub r1, #0xc + strb r2, [r4, r0] + ldr r0, [r4, r1] + mov r1, #5 + bl MOD36_02254F0C + ldr r0, _02254BD4 ; =0x00005B7C + mov r1, #8 + ldr r0, [r4, r0] + bl MOD36_02254F0C + ldr r0, _02254BD8 ; =0x00000663 + bl MOD20_02252B28 + mov r0, #2 + strb r0, [r4, #1] +_02254B46: + ldr r0, _02254BD0 ; =0x00005B88 + mov r1, #0 + str r1, [r4, r0] + b _02254BC4 +_02254B4E: + ldr r0, _02254BD4 ; =0x00005B7C + mov r1, #8 + ldr r0, [r4, r0] + bl MOD36_02254F30 + cmp r0, #0 + beq _02254BC4 + ldr r0, _02254BE0 ; =0x00005B78 + mov r3, #0 + strb r3, [r4, r0] + mov r2, #1 + add r1, r0, #1 + strb r2, [r4, r1] + add r1, r0, #2 + strb r3, [r4, r1] + add r0, r0, #4 + ldr r0, [r4, r0] + mov r1, #5 + bl MOD36_02254F0C + mov r0, #0 + strb r0, [r4, #1] + b _02254BC4 +_02254B7C: + ldr r1, _02254BD0 ; =0x00005B88 + ldr r0, [r4, r1] + cmp r0, #2 + bne _02254B9C + add r0, r1, #0 + mov r2, #0 + sub r0, #0xe + sub r1, #0xc + strb r2, [r4, r0] + ldr r0, [r4, r1] + mov r1, #5 + bl MOD36_02254F0C + mov r0, #0 + strb r0, [r4, #1] + b _02254BC4 +_02254B9C: + cmp r0, #3 + bne _02254BC4 + mov r0, #0 + sub r1, #0xe + strb r0, [r4, r1] + add r0, r4, #4 + bl MOD36_02254E10 + ldr r0, _02254BD4 ; =0x00005B7C + mov r1, #5 + ldr r0, [r4, r0] + bl MOD36_02254F0C + ldr r0, _02254BD4 ; =0x00005B7C + mov r1, #6 + ldr r0, [r4, r0] + bl MOD36_02254F0C + mov r0, #0 + strb r0, [r4, #1] +_02254BC4: + mov r0, #0 + add sp, #4 + pop {r3, r4, r5, r6, pc} + nop +_02254BCC: .word 0x00005B80 +_02254BD0: .word 0x00005B88 +_02254BD4: .word 0x00005B7C +_02254BD8: .word 0x00000663 +_02254BDC: .word 0x0000066E +_02254BE0: .word 0x00005B78 + thumb_func_end MOD36_022549F8 + + thumb_func_start MOD36_02254BE4 +MOD36_02254BE4: ; 0x02254BE4 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + add r0, sp, #4 + add r1, sp, #0 + bl MOD20_02252B68 + cmp r0, #0 + beq _02254C3E + ldr r1, [sp, #4] + ldr r2, [sp] + sub r1, #0x10 + sub r2, #0x10 + cmp r1, #0x9b + bhs _02254C06 + mov r0, #1 + b _02254C08 +_02254C06: + mov r0, #0 +_02254C08: + cmp r2, #0x95 + bhs _02254C10 + mov r3, #1 + b _02254C12 +_02254C10: + mov r3, #0 +_02254C12: + tst r0, r3 + beq _02254C3E + lsr r3, r1, #1 + lsr r1, r2, #1 + add r2, r4, #0 + mov r0, #0x96 + add r2, #0x10 + mul r0, r3 + str r3, [sp, #4] + str r1, [sp] + add r2, r2, r0 + ldrb r0, [r2, r1] + cmp r0, #0 + bne _02254C3E + mov r0, #1 + strb r0, [r2, r1] + ldr r1, [sp, #4] + str r1, [r4, #4] + ldr r1, [sp] + add sp, #8 + str r1, [r4, #8] + pop {r4, pc} +_02254C3E: + mov r0, #0 + add sp, #8 + pop {r4, pc} + thumb_func_end MOD36_02254BE4 + + thumb_func_start MOD36_02254C44 +MOD36_02254C44: ; 0x02254C44 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + add r0, sp, #4 + add r1, sp, #0 + bl MOD20_02252B68 + cmp r0, #0 + beq _02254C8A + ldr r1, [sp, #4] + ldr r2, [sp] + sub r1, #0x10 + sub r2, #0x10 + cmp r1, #0x9b + bhs _02254C66 + mov r0, #1 + b _02254C68 +_02254C66: + mov r0, #0 +_02254C68: + cmp r2, #0x95 + bhs _02254C70 + mov r3, #1 + b _02254C72 +_02254C70: + mov r3, #0 +_02254C72: + tst r0, r3 + beq _02254C8A + lsr r1, r1, #1 + lsr r0, r2, #1 + str r1, [sp, #4] + str r0, [sp] + str r1, [r4, #4] + ldr r0, [sp] + add sp, #8 + str r0, [r4, #8] + mov r0, #1 + pop {r4, pc} +_02254C8A: + mov r0, #0 + add sp, #8 + pop {r4, pc} + thumb_func_end MOD36_02254C44 + + thumb_func_start MOD36_02254C90 +MOD36_02254C90: ; 0x02254C90 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r6, r0, #0 + ldr r0, [sp, #0x28] + add r4, r2, #0 + add r5, r1, #0 + str r3, [sp] + str r0, [sp, #0x28] + cmp r4, r0 + bne _02254CAC + add r0, r3, #0 + cmp r5, r0 + bne _02254CAC + b _02254DCC +_02254CAC: + ldr r0, [sp] + cmp r0, r5 + bls _02254CB6 + sub r1, r0, r5 + b _02254CB8 +_02254CB6: + sub r1, r5, r0 +_02254CB8: + ldr r0, [sp, #0x28] + cmp r0, r4 + bls _02254CC2 + sub r2, r0, r4 + b _02254CC4 +_02254CC2: + sub r2, r4, r0 +_02254CC4: + cmp r1, r2 + bls _02254D46 + ldr r0, [sp] + cmp r0, r5 + bls _02254CD4 + mov r0, #1 + str r0, [sp, #4] + b _02254CDA +_02254CD4: + mov r0, #0 + mvn r0, r0 + str r0, [sp, #4] +_02254CDA: + cmp r1, #0 + beq _02254CEC + ldr r0, [sp, #0x28] + sub r0, r0, r4 + lsl r0, r0, #0xc + blx _s32_div_f + str r0, [sp, #0x10] + b _02254CF0 +_02254CEC: + mov r0, #0 + str r0, [sp, #0x10] +_02254CF0: + ldr r0, [sp, #0x10] + lsl r1, r4, #0xc + add r7, r1, r0 + ldr r0, [sp, #4] + add r5, r5, r0 + ldr r0, [sp] + cmp r5, r0 + beq _02254DB0 + mov r1, #0x96 + add r0, r5, #0 + mul r0, r1 + add r4, r6, r0 + ldr r0, [sp, #4] + mul r1, r0 + str r1, [sp, #0xc] +_02254D0E: + asr r1, r7, #0xc + cmp r5, #0x9c + bhs _02254D32 + cmp r1, #0x96 + bhs _02254D32 + add r0, r4, r1 + ldrb r2, [r0, #0x10] + cmp r2, #0 + bne _02254D32 + mov r2, #0 + strb r2, [r0, #0x10] + str r5, [r6, #4] + str r1, [r6, #8] + ldr r0, _02254DD0 ; =0x00005B7C + mov r1, #3 + ldr r0, [r6, r0] + bl MOD36_02254F0C +_02254D32: + ldr r0, [sp, #0xc] + add r4, r4, r0 + ldr r0, [sp, #4] + add r5, r5, r0 + ldr r0, [sp, #0x10] + add r7, r7, r0 + ldr r0, [sp] + cmp r5, r0 + bne _02254D0E + b _02254DB0 +_02254D46: + ldr r0, [sp, #0x28] + cmp r0, r4 + bls _02254D50 + mov r7, #1 + b _02254D54 +_02254D50: + mov r7, #0 + mvn r7, r7 +_02254D54: + cmp r2, #0 + beq _02254D68 + ldr r0, [sp] + add r1, r2, #0 + sub r0, r0, r5 + lsl r0, r0, #0xc + blx _s32_div_f + str r0, [sp, #8] + b _02254D6C +_02254D68: + mov r0, #0 + str r0, [sp, #8] +_02254D6C: + ldr r0, [sp, #8] + lsl r1, r5, #0xc + add r5, r1, r0 + ldr r0, [sp, #0x28] + add r4, r4, r7 + cmp r4, r0 + beq _02254DB0 +_02254D7A: + asr r1, r5, #0xc + cmp r4, #0x96 + bhs _02254DA4 + cmp r1, #0x9c + bhs _02254DA4 + mov r0, #0x96 + mul r0, r1 + add r0, r6, r0 + add r0, r0, r4 + ldrb r2, [r0, #0x10] + cmp r2, #0 + bne _02254DA4 + mov r2, #1 + strb r2, [r0, #0x10] + str r1, [r6, #4] + ldr r0, _02254DD0 ; =0x00005B7C + str r4, [r6, #8] + ldr r0, [r6, r0] + mov r1, #3 + bl MOD36_02254F0C +_02254DA4: + ldr r0, [sp, #8] + add r4, r4, r7 + add r5, r5, r0 + ldr r0, [sp, #0x28] + cmp r4, r0 + bne _02254D7A +_02254DB0: + ldr r0, [sp, #0x28] + cmp r0, #0x96 + bhs _02254DCC + ldr r0, [sp] + cmp r0, #0x9c + bhs _02254DCC + str r0, [r6, #4] + ldr r0, [sp, #0x28] + mov r1, #3 + str r0, [r6, #8] + ldr r0, _02254DD0 ; =0x00005B7C + ldr r0, [r6, r0] + bl MOD36_02254F0C +_02254DCC: + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_02254DD0: .word 0x00005B7C + thumb_func_end MOD36_02254C90 + + thumb_func_start MOD36_02254DD4 +MOD36_02254DD4: ; 0x02254DD4 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254DE4 + cmp r0, #1 + beq _02254DF6 + b _02254E06 +_02254DE4: + ldr r0, _02254E0C ; =0x00005B7C + mov r1, #1 + ldr r0, [r4, r0] + bl MOD36_02254F0C + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254E06 +_02254DF6: + ldr r0, _02254E0C ; =0x00005B7C + ldr r0, [r4, r0] + bl MOD36_02254F3C + cmp r0, #0 + beq _02254E06 + mov r0, #1 + pop {r4, pc} +_02254E06: + mov r0, #0 + pop {r4, pc} + nop +_02254E0C: .word 0x00005B7C + thumb_func_end MOD36_02254DD4 + + thumb_func_start MOD36_02254E10 +MOD36_02254E10: ; 0x02254E10 + push {r4, r5} + mov r4, #0 + add r2, r4, #0 + add r3, r4, #0 +_02254E18: + add r5, r3, #0 +_02254E1A: + add r1, r0, r5 + add r5, r5, #1 + strb r2, [r1, #0xc] + cmp r5, #0x96 + blt _02254E1A + add r4, r4, #1 + add r0, #0x96 + cmp r4, #0x9c + blt _02254E18 + pop {r4, r5} + bx lr + thumb_func_end MOD36_02254E10 + + thumb_func_start MOD36_02254E30 +MOD36_02254E30: ; 0x02254E30 + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + mov r0, #8 + mov r1, #0x70 + bl FUN_02016998 + add r4, r0, #0 + beq _02254E74 + add r0, #8 + mov r1, #4 + bl MOD20_022536F4 + str r5, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + bl MOD20_02252D24 + str r0, [r4, #0x20] + add r0, r4, #0 + mov r1, #0 + add r0, #0x68 + strh r1, [r0] + add r0, r4, #0 + add r1, r5, #0 + bl MOD36_02254E8C + ldr r0, [r4, #4] + cmp r0, #0 + beq _02254E74 + str r4, [r6] + mov r0, #1 + pop {r4, r5, r6, pc} +_02254E74: + mov r0, #0 + pop {r4, r5, r6, pc} + thumb_func_end MOD36_02254E30 + + thumb_func_start MOD36_02254E78 +MOD36_02254E78: ; 0x02254E78 + push {r4, lr} + add r4, r0, #0 + beq _02254E88 + bl MOD36_02254EE4 + add r0, r4, #0 + bl FUN_02016A18 +_02254E88: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD36_02254E78 + + thumb_func_start MOD36_02254E8C +MOD36_02254E8C: ; 0x02254E8C + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + mov r3, #0 + str r3, [sp] + mov r2, #1 + add r7, r0, #0 + str r2, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r0, #0xc + mov r1, #0x59 + bl FUN_02006A34 + mov r0, #8 + str r0, [sp] + add r0, r7, #0 + add r0, #0x34 + mov r1, #0xc + mov r2, #0x57 + mov r3, #0x58 + bl MOD20_02253FBC + add r0, r7, #0 + str r0, [sp, #0xc] + add r0, #0x34 + ldr r4, _02254EE0 ; =0x02255440 + mov r6, #0 + add r5, r7, #0 + str r0, [sp, #0xc] +_02254EC6: + ldr r0, [r7, #0x20] + ldr r2, [sp, #0xc] + add r1, r4, #0 + bl MOD20_02253E74 + str r0, [r5, #0x24] + add r6, r6, #1 + add r4, #0x10 + add r5, r5, #4 + cmp r6, #4 + blt _02254EC6 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02254EE0: .word 0x02255440 + thumb_func_end MOD36_02254E8C + + thumb_func_start MOD36_02254EE4 +MOD36_02254EE4: ; 0x02254EE4 + push {r4, r5, r6, lr} + add r6, r0, #0 + mov r4, #0 + add r5, r6, #0 +_02254EEC: + ldr r1, [r5, #0x24] + cmp r1, #0 + beq _02254EF8 + ldr r0, [r6, #0x20] + bl MOD20_02253F14 +_02254EF8: + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #4 + blt _02254EEC + add r6, #0x34 + add r0, r6, #0 + bl MOD20_02254014 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD36_02254EE4 + + thumb_func_start MOD36_02254F0C +MOD36_02254F0C: ; 0x02254F0C + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #8 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254F2C ; =0x02255480 + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254F2C: .word 0x02255480 + thumb_func_end MOD36_02254F0C + + thumb_func_start MOD36_02254F30 +MOD36_02254F30: ; 0x02254F30 + ldr r3, _02254F38 ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254F38: .word MOD20_02253794 + thumb_func_end MOD36_02254F30 + + thumb_func_start MOD36_02254F3C +MOD36_02254F3C: ; 0x02254F3C + ldr r3, _02254F44 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254F44: .word MOD20_022537B8 + thumb_func_end MOD36_02254F3C + + thumb_func_start MOD36_02254F48 +MOD36_02254F48: ; 0x02254F48 + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #8 + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD36_02254F48 + + thumb_func_start MOD36_02254F5C +MOD36_02254F5C: ; 0x02254F5C + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + mov r0, #8 + add r5, r1, #0 + bl FUN_02016B90 + cmp r0, #0 + bne _02254F70 + bl ErrorHandling +_02254F70: + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + ldr r0, [r4, #4] + ldr r2, _0225502C ; =0x02255408 + mov r1, #6 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #4] + ldr r2, _02255030 ; =0x02255424 + mov r1, #7 + mov r3, #0 + bl FUN_02016C18 + mov r0, #8 + bl FUN_02016B90 + cmp r0, #0 + bne _02254F9E + bl ErrorHandling +_02254F9E: + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #8 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0xc + mov r1, #0x56 + mov r3, #6 + bl FUN_0200687C + add r6, r0, #0 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #8 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0xc + mov r1, #0x55 + mov r3, #6 + bl FUN_020068C8 + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C + mov r0, #8 + bl FUN_02016B90 + cmp r0, #0 + bne _02254FEA + bl ErrorHandling +_02254FEA: + add r0, r4, #0 + lsr r1, r6, #5 + bl MOD36_0225503C + ldr r0, [r4, #4] + mov r1, #7 + bl FUN_02017CD0 + ldr r1, _02255034 ; =0x04001000 + ldr r0, _02255038 ; =0xFFFFE0FF + ldr r3, [r1] + ldr r2, [r1] + str r3, [sp, #0x10] + and r0, r2 + lsl r2, r3, #0x13 + lsr r3, r2, #0x1b + mov r2, #0x14 + orr r2, r3 + lsl r2, r2, #8 + orr r0, r2 + str r0, [r1] + add r0, r5, #0 + bl MOD36_02254F48 + mov r0, #8 + bl FUN_02016B90 + cmp r0, #0 + bne _02255028 + bl ErrorHandling +_02255028: + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 +_0225502C: .word 0x02255408 +_02255030: .word 0x02255424 +_02255034: .word 0x04001000 +_02255038: .word 0xFFFFE0FF + thumb_func_end MOD36_02254F5C + + thumb_func_start MOD36_0225503C +MOD36_0225503C: ; 0x0225503C + push {r3, r4, r5, lr} + sub sp, #8 + ldr r3, _02255098 ; =0x02255400 + add r4, r0, #0 + ldrh r5, [r3] + add r0, sp, #0 + add r2, sp, #0 + strh r5, [r0] + ldrh r5, [r3, #2] + strh r5, [r0, #2] + ldrh r5, [r3, #4] + ldrh r3, [r3, #6] + strh r5, [r0, #4] + strh r3, [r0, #6] + str r1, [r4, #0x58] + strh r1, [r0, #6] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + bl FUN_02019150 + ldr r0, [r4] + mov r2, #0xbe + ldr r0, [r0, #8] + ldr r1, [r4, #0x54] + lsl r2, r2, #6 + bl FUN_0208946C + cmp r0, #0 + bne _02255082 + add r0, r4, #0 + add r0, #0x48 + mov r1, #4 + bl FUN_02019620 +_02255082: + add r0, r4, #0 + add r0, #0x48 + bl FUN_02019270 + add r4, #0x48 + add r0, r4, #0 + bl FUN_02019548 + add sp, #8 + pop {r3, r4, r5, pc} + nop +_02255098: .word 0x02255400 + thumb_func_end MOD36_0225503C + + thumb_func_start MOD36_0225509C +MOD36_0225509C: ; 0x0225509C + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r5, #0 + bl MOD20_022538AC + cmp r0, #0 + beq _022550B8 + cmp r0, #1 + beq _022550C4 + pop {r3, r4, r5, pc} +_022550B8: + mov r0, #1 + str r0, [r4, #0x5c] + add r0, r5, #0 + bl MOD20_022538B0 + pop {r3, r4, r5, pc} +_022550C4: + ldr r0, [r4] + mov r2, #0xbe + ldr r0, [r0, #8] + ldr r1, [r4, #0x54] + lsl r2, r2, #6 + bl FUN_02089444 + add r0, r4, #0 + add r0, #0x48 + bl FUN_02019178 + ldr r0, [r4, #4] + mov r1, #6 + bl FUN_020178A0 + ldr r0, [r4, #4] + mov r1, #7 + bl FUN_020178A0 + add r0, r5, #0 + bl MOD36_02254F48 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD36_0225509C + + thumb_func_start MOD36_022550F4 +MOD36_022550F4: ; 0x022550F4 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r0, #0x48 + bl FUN_02019548 + add r0, r4, #0 + bl MOD36_02254F48 + pop {r4, pc} + thumb_func_end MOD36_022550F4 + + thumb_func_start MOD36_0225510C +MOD36_0225510C: ; 0x0225510C + push {r4, r5, r6, lr} + sub sp, #8 + add r6, r1, #0 + add r0, r6, #0 + bl MOD20_022538A0 + add r4, r0, #0 + ldr r1, [r4] + ldr r0, [r1] + lsl r2, r0, #1 + ldr r0, [r1, #4] + mov r1, #0x14 + lsl r3, r0, #1 + asr r5, r3, #3 + asr r0, r2, #3 + mul r1, r5 + add r5, r0, r1 + mov r0, #2 + str r0, [sp] + str r0, [sp, #4] + add r0, r4, #0 + lsl r2, r2, #0x10 + lsl r3, r3, #0x10 + add r0, #0x48 + mov r1, #1 + lsr r2, r2, #0x10 + lsr r3, r3, #0x10 + bl FUN_020196F4 + ldr r1, [r4, #0x54] + lsl r0, r5, #5 + add r0, r1, r0 + ldr r1, [r4, #0x58] + mov r2, #0x20 + add r1, r1, r5 + lsl r1, r1, #5 + blx GXS_LoadBG3Char + add r0, r6, #0 + bl MOD36_02254F48 + add sp, #8 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD36_0225510C + + thumb_func_start MOD36_02255164 +MOD36_02255164: ; 0x02255164 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r0, #0x48 + bl FUN_02019548 + add r0, r4, #0 + bl MOD36_02254F48 + pop {r4, pc} + thumb_func_end MOD36_02255164 + + thumb_func_start MOD36_0225517C +MOD36_0225517C: ; 0x0225517C + push {r4, r5, r6, lr} + add r6, r1, #0 + add r0, r6, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r6, #0 + bl MOD20_022538A4 + add r5, r0, #0 + ldr r0, _022551D4 ; =0x00005B74 + ldrb r0, [r5, r0] + cmp r0, #0 + beq _0225519C + mov r1, #2 + b _0225519E +_0225519C: + mov r1, #1 +_0225519E: + ldr r0, [r4, #0x28] + bl MOD20_02253F28 + ldr r0, _022551D8 ; =0x00005B75 + ldrb r0, [r5, r0] + cmp r0, #0 + beq _022551B0 + mov r1, #4 + b _022551B2 +_022551B0: + mov r1, #3 +_022551B2: + ldr r0, [r4, #0x2c] + bl MOD20_02253F28 + ldr r0, _022551DC ; =0x00005B76 + ldrb r0, [r5, r0] + cmp r0, #0 + beq _022551C4 + mov r1, #6 + b _022551C6 +_022551C4: + mov r1, #5 +_022551C6: + ldr r0, [r4, #0x30] + bl MOD20_02253F28 + add r0, r6, #0 + bl MOD36_02254F48 + pop {r4, r5, r6, pc} + .align 2, 0 +_022551D4: .word 0x00005B74 +_022551D8: .word 0x00005B75 +_022551DC: .word 0x00005B76 + thumb_func_end MOD36_0225517C + + thumb_func_start MOD36_022551E0 +MOD36_022551E0: ; 0x022551E0 + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r5, #0 + bl MOD20_022538A4 + add r0, r4, #0 + add r0, #0x48 + mov r1, #4 + bl FUN_02019620 + add r4, #0x48 + add r0, r4, #0 + bl FUN_02019548 + add r0, r5, #0 + bl MOD36_02254F48 + pop {r3, r4, r5, pc} + thumb_func_end MOD36_022551E0 + + thumb_func_start MOD36_0225520C +MOD36_0225520C: ; 0x0225520C + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r5, #0 + bl MOD20_022538A4 + add r0, r5, #0 + bl MOD20_022538AC + cmp r0, #0 + beq _02255236 + ldr r1, [r4, #0x5c] + cmp r1, #0 + beq _02255236 + add r0, r5, #0 + bl MOD36_02254F48 + pop {r3, r4, r5, pc} +_02255236: + cmp r0, #4 + bls _0225523C + b _0225539A +_0225523C: + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02255248: ; jump table + .short _02255252 - _02255248 - 2 ; case 0 + .short _02255286 - _02255248 - 2 ; case 1 + .short _022552D8 - _02255248 - 2 ; case 2 + .short _02255322 - _02255248 - 2 ; case 3 + .short _02255356 - _02255248 - 2 ; case 4 +_02255252: + add r0, r4, #0 + add r0, #0x68 + ldrh r0, [r0] + mov r1, #0x15 + lsl r1, r1, #4 + add r2, r0, r1 + add r0, r4, #0 + add r0, #0x68 + strh r2, [r0] + add r0, r4, #0 + add r0, #0x6a + strh r1, [r0] + add r1, r4, #0 + add r1, #0x68 + ldrh r1, [r1] + ldr r0, [r4, #0x24] + bl MOD20_02253FB4 + mov r0, #0 + str r0, [r4, #0x64] + str r0, [r4, #0x60] + str r0, [r4, #0x5c] + add r0, r5, #0 + bl MOD20_022538B0 + pop {r3, r4, r5, pc} +_02255286: + add r0, r4, #0 + add r0, #0x68 + ldrh r1, [r0] + add r0, r4, #0 + add r0, #0x6a + ldrh r0, [r0] + add r1, r1, r0 + add r0, r4, #0 + add r0, #0x68 + strh r1, [r0] + add r1, r4, #0 + add r1, #0x68 + ldrh r1, [r1] + ldr r0, [r4, #0x24] + bl MOD20_02253FB4 + add r0, r4, #0 + add r0, #0x6a + ldrh r1, [r0] + mov r0, #0x15 + lsl r0, r0, #4 + add r1, r1, r0 + add r0, r4, #0 + add r0, #0x6a + strh r1, [r0] + add r0, r4, #0 + add r0, #0x6a + mov r1, #3 + ldrh r0, [r0] + lsl r1, r1, #0xc + cmp r0, r1 + blo _0225539A + add r0, r4, #0 + add r0, #0x6a + strh r1, [r0] + mov r0, #1 + str r0, [r4, #0x64] + add r0, r5, #0 + bl MOD20_022538B0 + pop {r3, r4, r5, pc} +_022552D8: + add r0, r4, #0 + add r0, #0x68 + ldrh r1, [r0] + add r0, r4, #0 + add r0, #0x6a + ldrh r0, [r0] + add r1, r1, r0 + add r0, r4, #0 + add r0, #0x68 + strh r1, [r0] + add r1, r4, #0 + add r1, #0x68 + ldrh r1, [r1] + ldr r0, [r4, #0x24] + bl MOD20_02253FB4 + ldr r0, [r4, #0x60] + cmp r0, #0 + beq _0225539A + bl FUN_0201BA60 + mov r1, #7 + and r0, r1 + str r0, [r4, #0x6c] + add r0, r4, #0 + add r0, #0x6a + ldrh r1, [r0] + mov r0, #0x1a + lsl r0, r0, #8 + cmp r1, r0 + bls _0225531A + add r4, #0x6a + strh r0, [r4] +_0225531A: + add r0, r5, #0 + bl MOD20_022538B0 + pop {r3, r4, r5, pc} +_02255322: + add r0, r4, #0 + add r0, #0x68 + ldrh r1, [r0] + add r0, r4, #0 + add r0, #0x6a + ldrh r0, [r0] + add r1, r1, r0 + add r0, r4, #0 + add r0, #0x68 + strh r1, [r0] + add r1, r4, #0 + add r1, #0x68 + ldrh r1, [r1] + ldr r0, [r4, #0x24] + bl MOD20_02253FB4 + ldr r0, [r4, #0x6c] + cmp r0, #0 + bne _0225534E + sub r0, r0, #1 + str r0, [r4, #0x6c] + pop {r3, r4, r5, pc} +_0225534E: + add r0, r5, #0 + bl MOD20_022538B0 + pop {r3, r4, r5, pc} +_02255356: + add r0, r4, #0 + add r0, #0x6a + ldrh r0, [r0] + cmp r0, #0x50 + bls _0225538E + add r0, r4, #0 + add r0, #0x6a + ldrh r1, [r0] + add r0, r4, #0 + add r0, #0x6a + sub r1, #0x50 + strh r1, [r0] + add r0, r4, #0 + add r0, #0x68 + ldrh r1, [r0] + add r0, r4, #0 + add r0, #0x6a + ldrh r0, [r0] + add r1, r1, r0 + add r0, r4, #0 + add r0, #0x68 + strh r1, [r0] + ldr r0, [r4, #0x24] + add r4, #0x68 + ldrh r1, [r4] + bl MOD20_02253FB4 + pop {r3, r4, r5, pc} +_0225538E: + mov r0, #0 + add r4, #0x6a + strh r0, [r4] + add r0, r5, #0 + bl MOD36_02254F48 +_0225539A: + pop {r3, r4, r5, pc} + thumb_func_end MOD36_0225520C + + thumb_func_start MOD36_0225539C +MOD36_0225539C: ; 0x0225539C + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r5, #0 + bl MOD20_022538A4 + add r0, r5, #0 + bl MOD20_022538AC + cmp r0, #0 + beq _022553BE + cmp r0, #1 + beq _022553CA + pop {r3, r4, r5, pc} +_022553BE: + mov r0, #1 + str r0, [r4, #0x60] + add r0, r5, #0 + bl MOD20_022538B0 + pop {r3, r4, r5, pc} +_022553CA: + add r0, r4, #0 + mov r1, #7 + bl MOD36_02254F30 + cmp r0, #0 + beq _022553E2 + ldr r0, _022553E4 ; =0x0000066A + bl MOD20_02252B28 + add r0, r5, #0 + bl MOD36_02254F48 +_022553E2: + pop {r3, r4, r5, pc} + .align 2, 0 +_022553E4: .word 0x0000066A + thumb_func_end MOD36_0225539C + + .section .rodata + ; 0x022553E8 + .incbin "baserom.nds", 0x28fda8, 0x110 + + ; .section .sinit + .global SDK_OVERLAY.MODULE_36.SINIT_START + .global SDK_OVERLAY.MODULE_36.SINIT_END +SDK_OVERLAY.MODULE_36.SINIT_START: + .word MOD36_02254840 + .word 0 +SDK_OVERLAY.MODULE_36.SINIT_END: diff --git a/arm9/src/FUN_02000DF4.c b/arm9/src/FUN_02000DF4.c deleted file mode 100644 index 80e80b30..00000000 --- a/arm9/src/FUN_02000DF4.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "global.h" -#include "main.h" - -extern struct Unk2106FA0 gBacklightTop; - -THUMB_FUNC void FUN_02000DF4(void) -{ - gBacklightTop.unk8 = -1; - gBacklightTop.unkC = 0; - gBacklightTop.unk10 = -1; - gBacklightTop.unk14 = 0; -} diff --git a/arm9/src/main.c b/arm9/src/main.c index 73b63332..f16b16ff 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -1,23 +1,70 @@ #include "global.h" #include "main.h" +#include "PAD_pad.h" +#include "CARD_pullOut.h" +#include "CARD_backup.h" +#include "CTRDG_common.h" +#include "poke_overlay.h" + +FS_EXTERN_OVERLAY(MODULE_52); +FS_EXTERN_OVERLAY(MODULE_63); + +#define SOFT_RESET_KEY (PAD_BUTTON_L | PAD_BUTTON_R | PAD_BUTTON_START | PAD_BUTTON_SELECT) -extern struct Unk2106FA0 gBacklightTop; -extern struct Unk2106FA0 gBacklightTop_2; // same as the first one, it's referenced twice in the constant pool... extern struct Unk21C48B8 gUnknown21C48B8; -extern s32 gUnk027FFC20; extern struct { s32 unk0; - s32 unk4; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; u8 unk8; } gUnk021C4918; -extern void PM_GetBackLight(); extern void OS_WaitIrq(); extern void FUN_02016438(s32); - -extern const s32 CONST_3F; // 0x0000003F -extern const s32 CONST_34; // 0x00000034 +extern void InitSystemForTheGame(void); +extern void InitGraphicMemory(void); +extern void FUN_020163BC(void); +extern void FUN_02022294(void); +extern void FUN_0201259C(void); +extern void FUN_02000DF4(void); +extern void FUN_02002C14(void); +extern void FUN_02002C50(int, int); +extern int FUN_0202254C(void); +extern void FUN_02003B98(int, int); +extern int FUN_02029EF8(int); +extern int LoadPlayerDataAddress(int); +extern void FUN_02020AFC(void); +extern int FUN_020337E8(int); +extern void FUN_02034188(int, int); +extern int FUN_020227FC(int); +extern void FUN_02089D90(int); +extern void FUN_02000E7C(FSOverlayID, struct Unk21DBE18 *); +extern void ErrorHandling(void); +extern void FUN_02000FA4(void); +extern void FUN_0200A2AC(void); +extern void FUN_02015E30(void); +extern void FUN_02000EE8(void); +extern void FUN_02000FE8(void); +extern void FUN_02016464(void); +void DoSoftReset(u32 parameter); +extern BOOL FUN_0202FB80(void); +extern void FUN_02000E0C(void); +extern void FUN_0201B5CC(int); +extern void FUN_020125D4(void); +extern void FUN_02015E60(void); +extern void FUN_020222C4(void); +extern void FUN_0200A318(void); +extern void FUN_0200E2D8(void); +extern void FUN_02003C10(void); +void FUN_02000F4C(int arg0, int arg1); +extern BOOL FUN_02006234(struct Unk21DBE18 *, s32 *, int); +extern BOOL FUN_02006290(int); +extern void FUN_02006260(int); +int FUN_02033678(void); +BOOL FUN_020335B8(void); extern struct Unk21DBE18 gUnk021DBE18; extern struct Unk21DBE18 gUnk021D76C8; @@ -30,7 +77,7 @@ THUMB_FUNC void NitroMain(void) FUN_020163BC(); FUN_02016438(0); - PM_GetBackLight(&gBacklightTop_2, 0); + PM_GetBackLight(&gBacklightTop_2.unk0, NULL); FUN_02022294(); FUN_0201259C(); @@ -51,15 +98,15 @@ THUMB_FUNC void NitroMain(void) } else { - switch (gUnk027FFC20) + switch (*((s32 *)HW_RESET_PARAMETER_BUF)) { case 0: gBacklightTop.unk1C = 0; - FUN_02000E7C(&CONST_3F, &gUnk021DBE18); + FUN_02000E7C(FS_OVERLAY_ID(MODULE_63), &gUnk021DBE18); break; case 1: gBacklightTop.unk1C = 1; - FUN_02000E7C(&CONST_34, &gUnk021D76C8); + FUN_02000E7C(FS_OVERLAY_ID(MODULE_52), &gUnk021D76C8); break; default: ErrorHandling(); @@ -77,9 +124,9 @@ THUMB_FUNC void NitroMain(void) FUN_02000EE8(); FUN_02000FE8(); FUN_02016464(); - if ((gUnknown21C48B8.unk38 & 0x30C) == 0x30C && !gUnk021C4918.unk8) // soft reset? + if ((gUnknown21C48B8.unk38 & SOFT_RESET_KEY) == SOFT_RESET_KEY && !gUnk021C4918.unk8) // soft reset? { - FUN_02000F18(0); // soft reset? + DoSoftReset(0); // soft reset? } if (FUN_0202FB80()) { @@ -106,4 +153,199 @@ THUMB_FUNC void NitroMain(void) FUN_02003C10(); FUN_0201B5CC(gUnknown21C48B8.unk20); } -}
\ No newline at end of file +} + +THUMB_FUNC void FUN_02000DF4(void) +{ + gBacklightTop.unk8 = -1; + gBacklightTop.unkC = 0; + gBacklightTop.unk10 = -1; // overlay invalid + gBacklightTop.unk14 = NULL; +} + +THUMB_FUNC void FUN_02000E0C(void) +{ + if (!gBacklightTop.unkC) + { + if (gBacklightTop.unk14 == NULL) + return; + if (gBacklightTop.unk10 != -1u) + HandleLoadOverlay(gBacklightTop.unk10, 0); + gBacklightTop.unk8 = gBacklightTop.unk10; + gBacklightTop.unkC = FUN_02006234(gBacklightTop.unk14, &gBacklightTop.unk18, 0); + gBacklightTop.unk10 = -1u; + gBacklightTop.unk14 = NULL; + } + if (FUN_02006290(gBacklightTop.unkC)) + { + FUN_02006260(gBacklightTop.unkC); + gBacklightTop.unkC = 0; + if (gBacklightTop.unk8 != -1u) + UnloadOverlayByID(gBacklightTop.unk8); + } +} + +THUMB_FUNC void FUN_02000E7C(FSOverlayID id, struct Unk21DBE18 * arg1) +{ + if (gBacklightTop.unk14 != NULL) + ErrorHandling(); + gBacklightTop.unk10 = id; + gBacklightTop.unk14 = arg1; +} + +THUMB_FUNC void FUN_02000E9C(void) +{ + FUN_0202FB80(); + OS_WaitIrq(1, 1); + gUnknown21C48B8.unk2C++; + gUnknown21C48B8.unk30 = 0; + if (gUnknown21C48B8.unk0 != NULL) + gUnknown21C48B8.unk0(gUnknown21C48B8.unk4); +} + +THUMB_FUNC void FUN_02000EC8(u32 parameter) +{ + if (FUN_02033678() && CARD_TryWaitBackupAsync() == TRUE) + { + OS_ResetSystem(parameter); + } + FUN_02000E9C(); +} + +THUMB_FUNC void FUN_02000EE8(void) +{ + int r1 = FUN_020335B8(); + switch (r1) + { + case 1: + FUN_02000F4C(1, r1); + break; + case 2: + FUN_02000F4C(0, r1); + break; + case 3: + FUN_02000F4C(1, r1); + break; + } +} + +extern void FUN_0200E3A0(int, int); +extern BOOL FUN_02032DAC(void); +extern void FUN_020225F8(void); +extern void FUN_0202287C(void); + +// No Return +THUMB_FUNC void DoSoftReset(u32 parameter) +{ + FUN_0200E3A0(0, 0x7FFF); + FUN_0200E3A0(1, 0x7FFF); + if (FUN_02032DAC()) + { + FUN_020225F8(); + FUN_0202287C(); + } + do + { + FUN_02000FE8(); + FUN_02000EC8(parameter); + } while (1); +} + +extern void FUN_02033F70(int, int, int); + +THUMB_FUNC void FUN_02000F4C(int arg0, int arg1) +{ + if (arg1 == 3) + { + FUN_02033F70(0, 3, 0); + } + else if (arg0 == 0) + { + FUN_02033F70(0, 2, 0); + } + else + { + FUN_02033F70(0, 0, 0); + } + FUN_02032DAC(); + while (1) + { + FUN_02000FE8(); + FUN_02016464(); + if (gUnknown21C48B8.unk48 & 1) + break; + FUN_02000E9C(); + } + DoSoftReset(arg0); +} + +extern void FUN_0201265C(struct Unk21C4818 *, struct Unk21C4828 *); +extern void FUN_0201BA1C(int); +extern void FUN_0201B9E0(int); + +void FUN_02000FA4(void) +{ + struct Unk21C4818 spC; + struct Unk21C4828 sp0; + FUN_0201265C(&spC, &sp0); + { + int r4 = gUnknown21C48B8.unk2C; + int r5 = ((sp0.unk4 + sp0.unk8) << 24) + (spC.unk0 + ((256 * spC.unk4 * spC.unk8) << 16) + (sp0.unk0 << 16)); + FUN_0201BA1C(r4 + r5); + FUN_0201B9E0(r4 + r5); + } +} + +extern void FUN_0201CE04(void); +extern void FUN_0201CDD0(void); + +void FUN_02000FE8(void) +{ + PMBackLightSwitch top, bottom; + if (PAD_DetectFold()) + { + if (!gUnk021C4918.unk7) + { + FUN_0201CE04(); + if (CTRDG_IsPulledOut() == TRUE) + { + gBacklightTop.unk4 = 1; + } + { + int r1 = gBacklightTop.unk4; + while (1) + { + PMWakeUpTrigger trigger = PM_TRIGGER_COVER_OPEN | PM_TRIGGER_CARD; + if (gUnk021C4918.unk6 && !r1) + trigger |= PM_TRIGGER_CARTRIDGE; + PM_GoSleepMode(trigger, PM_PAD_LOGIC_OR, 0); + if (CARD_IsPulledOut()) + { + PM_ForceToPowerOff(); + break; + } + else if (PAD_DetectFold()) + { + r1 = gBacklightTop.unk4 = 1; + } + else + break; + } + FUN_0201CDD0(); + return; + } + } + else + { + PM_GetBackLight(&top, &bottom); + if (top == PM_BACKLIGHT_ON) + PM_SetBackLight(PM_LCD_ALL, PM_BACKLIGHT_OFF); + } + } + else + { + PM_GetBackLight(&top, &bottom); + if (top == PM_BACKLIGHT_OFF) + PM_SetBackLight(PM_LCD_ALL, gBacklightTop.unk0); + } +} diff --git a/arm9/src/poke_overlay.c b/arm9/src/poke_overlay.c index 105881d8..4cf1ea67 100644 --- a/arm9/src/poke_overlay.c +++ b/arm9/src/poke_overlay.c @@ -1,11 +1,7 @@ #include "global.h" #include "nitro.h" #include "FS_file.h" -#include "FS_overlay.h" - -#define OVERLAY_LOAD_WRAM 0 -#define OVERLAY_LOAD_ITCM 1 -#define OVERLAY_LOAD_DTCM 2 +#include "poke_overlay.h" extern void ErrorHandling(void); diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 930bffec..697a790a 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -1,6 +1,4 @@ SDK_SYS_STACKSIZE = 0x00000000; -CONST_34 = 0x00000034; -CONST_3F = 0x0000003F; SDK_IRQ_STACKSIZE = 0x00000400; // .data @@ -28,6 +28,9 @@ .extern DGT_Hash1GetDigest_R
.extern DGT_Hash1Reset
.extern DGT_Hash1SetSource
+.extern DGT_Hash2GetDigest
+.extern DGT_Hash2Reset
+.extern DGT_Hash2SetSource
.extern DGTi_hash2_arm4_small
.extern ErrorHandling
.extern FS_CloseFile
@@ -3129,14 +3132,11 @@ .extern MATH_MD5GetHash
.extern MATH_MD5Init
.extern MATH_MD5Update
-.extern MATH_SHA1GetHash
-.extern MATH_SHA1Init
-.extern MATH_SHA1Update
.extern MATHi_CRC16InitTable
.extern MATHi_CRC16InitTableRev
.extern MATHi_CRC32InitTableRev
.extern MATHi_CRC8InitTable
-.extern MATHi_CalcHMAC
+.extern DGTi_Hash2CalcHmac
.extern MIC_DoSamplingAsync
.extern MIC_Init
.extern MIC_StartAutoSampling
diff --git a/include/main.h b/include/main.h index 0df94795..23059702 100644 --- a/include/main.h +++ b/include/main.h @@ -1,19 +1,42 @@ #ifndef GUARD_MAIN_H #define GUARD_MAIN_H +#include "FS_overlay.h" +#include "SPI_pm.h" + +struct Unk21DBE18 +{ + u8 filler_00[16]; +}; + struct Unk2106FA0 { - s32 unk0; + PMBackLightSwitch unk0; s32 unk4; - s32 unk8; + FSOverlayID unk8; s32 unkC; - s32 unk10; - s32 unk14; + FSOverlayID unk10; + struct Unk21DBE18 * unk14; s32 unk18; s32 unk1C; s32 unk20; }; +struct Unk21C4818 +{ + u32 unk0; + u32 unk4; + u32 unk8; + u32 unkC; +}; + +struct Unk21C4828 +{ + u32 unk0; + u32 unk4; + u32 unk8; +}; + struct Unk21C48B8 { void (*unk0)(s32); @@ -37,4 +60,7 @@ struct Unk21C48B8 s32 unk6C; }; +extern struct Unk2106FA0 gBacklightTop; +extern struct Unk2106FA0 gBacklightTop_2; // same as the first one, it's referenced twice in the constant pool... + #endif //GUARD_MAIN_H diff --git a/include/poke_overlay.h b/include/poke_overlay.h new file mode 100644 index 00000000..5ee9073a --- /dev/null +++ b/include/poke_overlay.h @@ -0,0 +1,13 @@ +#ifndef GUARD_POKE_OVERLAY_H +#define GUARD_POKE_OVERLAY_H + +#include "FS_overlay.h" + +#define OVERLAY_LOAD_WRAM 0 +#define OVERLAY_LOAD_ITCM 1 +#define OVERLAY_LOAD_DTCM 2 + +void UnloadOverlayByID(FSOverlayID id); +BOOL HandleLoadOverlay(FSOverlayID id, int a1); + +#endif //GUARD_POKE_OVERLAY_H diff --git a/tools/scaninc/source_file.cpp b/tools/scaninc/source_file.cpp index f23ff6db..5d0281a4 100644 --- a/tools/scaninc/source_file.cpp +++ b/tools/scaninc/source_file.cpp @@ -31,7 +31,7 @@ SourceFileType GetFileType(std::string& path) std::string extension = path.substr(pos + 1); - if (extension == "c") + if (extension == "c" || extension == "cpp") return SourceFileType::Cpp; else if (extension == "s") return SourceFileType::Asm; |