├── .gitattributes ├── .gitignore ├── Makefile ├── README.md ├── apploader-update ├── data.s ├── header.s ├── loader │ ├── bss.s │ ├── ctors.s │ ├── data.s │ ├── dtors.s │ ├── extab.s │ ├── extabindex.s │ ├── header.s │ ├── init.s │ ├── rodata.s │ ├── sbss.s │ ├── sbss2.s │ ├── sdata.s │ ├── sdata2.s │ └── text.s ├── memset.s └── text.s ├── apploader ├── data.s ├── header.s ├── loader │ ├── bss.s │ ├── ctors.s │ ├── data.s │ ├── dtors.s │ ├── extab.s │ ├── extabindex.s │ ├── header.s │ ├── init.s │ ├── rodata.s │ ├── sbss.s │ ├── sbss2.s │ ├── sdata.s │ ├── sdata2.s │ └── text.s ├── memset.s └── text.s ├── global ├── DolphinGlobals.s ├── DolphinGlobals2.s ├── gct.s └── gecko_codehandler.s ├── include ├── limits.h ├── stdint.h └── types.h ├── ldscript_appl.txt ├── ldscript_dol.txt ├── ldscript_dol_mkc.txt ├── ldscript_dol_mkc_installer.txt ├── ldscript_dol_upd.txt ├── ldscript_mkc_nandloader.txt ├── ldscript_rel.txt ├── macros.inc ├── maindol-mkc-installer ├── bss.s ├── ctors.s ├── data.s ├── dtors.s ├── extab.s ├── extabindex.s ├── header.s ├── init.s ├── rodata.s ├── sbss.s ├── sbss2.s ├── sdata.s ├── sdata2.s └── text.s ├── maindol-mkc ├── bss.s ├── ctors.s ├── data.s ├── dtors.s ├── extab.s ├── extabindex.s ├── header.s ├── init.s ├── rodata.s ├── sbss.s ├── sbss2.s ├── sdata.s ├── sdata2.s └── text.s ├── maindol-update ├── data.s ├── dolheader.s └── text.s ├── maindol ├── CheckGCPad4.s ├── RMCE01.gct ├── TRK_Exception.s ├── bss.s ├── crt.s ├── ctors.s ├── data.s ├── dolheader.s ├── dtors.s ├── extab.s ├── extabindex.s ├── init.s ├── memset.s ├── rodata.s ├── sbss.s ├── sbss2.s ├── sdata.s ├── sdata2.s ├── text.s ├── text_1a940.s ├── text_1ab10.s ├── text_1ab30.s ├── text_1ac20.s ├── text_1ad80.s ├── text_1ae60.s ├── text_1b310.s ├── text_1b750.s ├── text_1b7d0.s ├── text_1bb80.s ├── text_1bc60.s ├── text_1bdf0.s ├── text_1e9a0.s ├── text_1ea60.s ├── text_1eb10.s ├── text_1ec50.s ├── text_1ecf0.s ├── text_44980.s ├── text_44a60.s ├── text_44a90.s ├── text_44b30.s ├── text_44c10.s ├── text_44cf0.s ├── text_44d70.s ├── text_44de0.s ├── text_45180.s ├── text_b2a30.s ├── text_b2e30.s ├── text_b34c0.s ├── text_b34d0.s └── unk_data_120.brfnt ├── mkc-nandloader ├── bss.s ├── ctors.s ├── data.s ├── dtors.s ├── extab.s ├── extabindex.s ├── header.s ├── init.s ├── loader_stub.s ├── sbss.s ├── sbss2.s └── text.s ├── sha1sums.txt ├── staticr ├── RelHeader.s ├── RelocTable.s ├── RelocTableMainDol.s ├── StaticImp.s ├── ctors.s ├── data.s ├── dtors.s ├── rodata.s └── text.s └── tools ├── configuration.py ├── filehandler.py ├── ppcdisassem.py └── util ├── __init__.py ├── attr.py ├── binary.py ├── cache.py └── io.py /.gitattributes: -------------------------------------------------------------------------------- 1 | *.inc linguist-language=Assembly 2 | *.s linguist-language=Assembly 3 | *.txt linguist-language=Linker Script 4 | sha1sums.txt linguist-language=Text 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Output files 2 | Build/*.i 3 | Build/*.s 4 | Build/*.ld 5 | *.o 6 | *.elf 7 | *.dol 8 | *.rel 9 | *.img 10 | *.wad 11 | *.map 12 | *.yaz0 13 | *.szs 14 | *.bmg 15 | *.lz 16 | 17 | # Tools 18 | # tools/* 19 | *.exe 20 | *.pyc 21 | 22 | # Various other detritus that doesn't need to be tracked 23 | Thumbs.db 24 | *.dump 25 | 26 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | #### Tools #### 2 | 3 | #YAZ0 := tools/wszst/wszst compress --yaz0 4 | CC1 := $(DEVKITPPC)/bin/powerpc-eabi-gcc 5 | CPP := $(DEVKITPPC)/bin/powerpc-eabi-cpp 6 | AS := $(DEVKITPPC)/bin/powerpc-eabi-as 7 | LD := $(DEVKITPPC)/bin/powerpc-eabi-ld 8 | OBJCOPY := $(DEVKITPPC)/bin/powerpc-eabi-objcopy 9 | 10 | CC1FLAGS := -O2 -S -Wall 11 | CPPFLAGS := -iquote include -I include -nostdinc -undef 12 | ASFLAGS := -I include 13 | 14 | ifeq ($(USE_GECKO), 1) 15 | ASFLAGS += --defsym USE_GECKO=1 16 | CPPFLAGS += -DUSE_GECKO=1 17 | endif 18 | ifeq ($(CTGP_CODE), 1) 19 | ASFLAGS += --defsym CTGP_CODE=1 20 | CPPFLAGS += -DCTGP_CODE=1 21 | endif 22 | ifeq ($(CODEHANDLERONLY), 1) 23 | ASFLAGS += --defsym CODEHANDLERONLY=1 24 | CPPFLAGS += -DCODEHANDLERONLY=1 25 | endif 26 | 27 | BUILD_DIR := build 28 | 29 | #### Files #### 30 | 31 | # Main files 32 | 33 | APL0 := apploader-update.img 34 | DOL0 := main-update.dol 35 | APL1 := apploader.img 36 | DOL1 := main.dol 37 | REL := StaticR.rel 38 | DOL2 := main-mkc-installer.dol 39 | APLC := mkc-nandloader.dol 40 | DOLC := main-mkc.dol 41 | 42 | APL0_ELF := $(APL0:.img=.elf) 43 | APL0_MAP = $(APL0).map 44 | APL0_LDSCRIPT:= $(BUILD_DIR)/apploader-update/ld_script.ld 45 | DOL0_ELF := $(DOL0:.dol=.elf) 46 | DOL0_MAP := $(DOL0).map 47 | DOL0_LDSCRIPT := $(BUILD_DIR)/maindol-update/ld_script.ld 48 | APL1_ELF := $(APL1:.img=.elf) 49 | APL1_MAP = $(APL1).map 50 | APL1_LDSCRIPT:= $(BUILD_DIR)/apploader/ld_script.ld 51 | DOL1_ELF := $(DOL1:.dol=.elf) 52 | DOL1_MAP := $(DOL1).map 53 | DOL1_LDSCRIPT := $(BUILD_DIR)/maindol/ld_script.ld 54 | REL_ELF := $(REL:.rel=.elf) 55 | REL_MAP := $(REL).map 56 | REL_LDSCRIPT := $(BUILD_DIR)/staticr/ld_script.ld 57 | DOL2_ELF := $(DOL2:.dol=.elf) 58 | DOL2_MAP := $(DOL2).map 59 | DOL2_LDSCRIPT := $(BUILD_DIR)/maindol-mkc-installer/ld_script.ld 60 | APLC_ELF := $(APLC:.dol=.elf) 61 | APLC_MAP := $(APLC).map 62 | APLC_LDSCRIPT := $(BUILD_DIR)/mkc-nandloader/ld_script.ld 63 | DOLC_ELF := $(DOLC:.dol=.elf) 64 | DOLC_MAP := $(DOLC).map 65 | DOLC_LDSCRIPT := $(BUILD_DIR)/maindol-mkc/ld_script.ld 66 | 67 | # Source List 68 | 69 | GLBL_CSOURCES := $(wildcard global/*.c) 70 | GLBL_ASMSOURCES := $(wildcard global/*.s) 71 | GLBL_COBJECTS := $(addprefix $(BUILD_DIR)/, $(GLBL_CSOURCES:%.c=%.o)) 72 | GLBL_ASMOBJECTS := $(addprefix $(BUILD_DIR)/, $(GLBL_ASMSOURCES:%.s=%.o)) 73 | APL0_CSOURCES := $(wildcard apploader-update/*.c apploader-update/loader/*.c) 74 | APL0_ASMSOURCES := $(wildcard apploader-update/*.s apploader-update/loader/*.s) 75 | APL0_COBJECTS := $(addprefix $(BUILD_DIR)/, $(APL0_CSOURCES:%.c=%.o)) 76 | APL0_ASMOBJECTS := $(addprefix $(BUILD_DIR)/, $(APL0_ASMSOURCES:%.s=%.o)) 77 | # DOL0 only uses ASM 78 | DOL0_ASMSOURCES := $(wildcard maindol-update/*.s) 79 | DOL0_ASMOBJECTS := $(addprefix $(BUILD_DIR)/, $(DOL0_ASMSOURCES:%.s=%.o)) 80 | APL1_CSOURCES := $(wildcard apploader/*.c apploader/loader/*.c) 81 | APL1_ASMSOURCES := $(wildcard apploader/*.s apploader/loader/*.s) 82 | APL1_COBJECTS := $(addprefix $(BUILD_DIR)/, $(APL1_CSOURCES:%.c=%.o)) 83 | APL1_ASMOBJECTS := $(addprefix $(BUILD_DIR)/, $(APL1_ASMSOURCES:%.s=%.o)) 84 | DOL1_CSOURCES := $(wildcard maindol/*.c) 85 | DOL1_ASMSOURCES := $(wildcard maindol/*.s) 86 | DOL1_COBJECTS := $(addprefix $(BUILD_DIR)/, $(DOL1_CSOURCES:%.c=%.o)) 87 | DOL1_ASMOBJECTS := $(addprefix $(BUILD_DIR)/, $(DOL1_ASMSOURCES:%.s=%.o)) 88 | REL_CSOURCES := $(wildcard staticr/*.c) 89 | REL_ASMSOURCES := $(wildcard staticr/*.s) 90 | REL_COBJECTS := $(addprefix $(BUILD_DIR)/, $(REL_CSOURCES:%.c=%.o)) 91 | REL_ASMOBJECTS := $(addprefix $(BUILD_DIR)/, $(REL_ASMSOURCES:%.s=%.o)) 92 | DOL2_CSOURCES := $(wildcard maindol-mkc-installer/*.c) 93 | DOL2_ASMSOURCES := $(wildcard maindol-mkc-installer/*.s) 94 | DOL2_COBJECTS := $(addprefix $(BUILD_DIR)/, $(DOL2_CSOURCES:%.c=%.o)) 95 | DOL2_ASMOBJECTS := $(addprefix $(BUILD_DIR)/, $(DOL2_ASMSOURCES:%.s=%.o)) 96 | APLC_CSOURCES := $(wildcard mkc-nandloader/*.c) 97 | APLC_ASMSOURCES := $(wildcard mkc-nandloader/*.s) 98 | APLC_COBJECTS := $(addprefix $(BUILD_DIR)/, $(APLC_CSOURCES:%.c=%.o)) 99 | APLC_ASMOBJECTS := $(addprefix $(BUILD_DIR)/, $(APLC_ASMSOURCES:%.s=%.o)) 100 | DOLC_CSOURCES := $(wildcard maindol-mkc/*.c) 101 | DOLC_ASMSOURCES := $(wildcard maindol-mkc/*.s) 102 | DOLC_COBJECTS := $(addprefix $(BUILD_DIR)/, $(DOLC_CSOURCES:%.c=%.o)) 103 | DOLC_ASMOBJECTS := $(addprefix $(BUILD_DIR)/, $(DOLC_ASMSOURCES:%.s=%.o)) 104 | 105 | # All objects from each file 106 | 107 | GLBL_OFILES := $(GLBL_COBJECTS) $(GLBL_ASMOBJECTS) 108 | APL0_OFILES := $(APL0_COBJECTS) $(APL0_ASMOBJECTS) 109 | DOL0_OFILES := $(DOL0_ASMOBJECTS) 110 | APL1_OFILES := $(APL1_COBJECTS) $(APL1_ASMOBJECTS) 111 | DOL1_OFILES := $(DOL1_COBJECTS) $(DOL1_ASMOBJECTS) 112 | REL_OFILES := $(REL_COBJECTS) $(REL_ASMOBJECTS) 113 | DOL2_OFILES := $(DOL2_COBJECTS) $(DOL2_ASMOBJECTS) 114 | APLC_OFILES := $(APLC_COBJECTS) $(APLC_ASMOBJECTS) 115 | DOLC_OFILES := $(DOLC_COBJECTS) $(DOLC_ASMOBJECTS) 116 | 117 | # Combined lists of objects 118 | 119 | C_OBJECTS := $(GLBL_COBJECTS) $(APL0_COBJECTS) $(APL1_COBJECTS) $(DOL1_COBJECTS) $(REL_COBJECTS) $(DOL2_COBJECTS) $(APLC_COBJECTS) $(DOLC_COBJECTS) 120 | ASM_OBJECTS := $(GLBL_ASMOBJECTS) $(APL0_ASMOBJECTS) $(DOL0_ASMOBJECTS) $(APL1_ASMOBJECTS) $(DOL1_ASMOBJECTS) $(REL_ASMOBJECTS) $(DOL2_ASMOBJECTS) $(APLC_ASMOBJECTS) $(DOLC_ASMOBJECTS) 121 | 122 | ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS) 123 | 124 | SUBDIRS := $(sort $(dir $(ALL_OBJECTS))) 125 | 126 | $(shell mkdir -p $(SUBDIRS)) 127 | 128 | #### Main Targets #### 129 | 130 | # Get rid of the idiotic built-in rules 131 | .SUFFIXES: 132 | 133 | .PHONY: all clean compare main dol dol0 dol1 dol2 staticr rel appldr appldr0 appldr1 appldr2 upd mkw chan mkc apploader-mkc-installer.img 134 | 135 | all: $(DOL1) $(REL) 136 | 137 | compare: $(APL0) $(DOL0) $(APL1) $(DOL1) $(REL) $(DOL2) $(APLC) $(DOLC) 138 | sha1sum -c sha1sums.txt 139 | 140 | clean: 141 | $(RM) $(APL0) $(APL0_ELF) $(APL0_MAP) $(APL0_LDSCRIPT) $(DOL0) $(DOL0_ELF) $(DOL0_MAP) $(DOL0_LDSCRIPT) $(APL1) $(APL1_ELF) $(APL1_MAP) $(APL1_LDSCRIPT) $(DOL1) $(DOL1_ELF) $(DOL1_MAP) $(DOL1_LDSCRIPT) $(REL) $(REL_ELF) $(REL_MAP) $(REL_LDSCRIPT) $(DOL2) $(DOL2_ELF) $(DOL2_MAP) $(DOL2_LDSCRIPT) $(APLC) $(APLC_ELF) $(APLC_MAP) $(APLC_LDSCRIPT) $(DOLC) $(DOLC_ELF) $(DOLC_MAP) $(DOLC_LDSCRIPT) $(ALL_OBJECTS) 142 | 143 | #### Recipes #### 144 | 145 | #TODO: $<, $@ 146 | 147 | $(APL0_LDSCRIPT): ldscript_appl.txt 148 | cp $< $@ 149 | 150 | $(APL0): $(APL0_ELF) 151 | $(OBJCOPY) -O binary $< $@ 152 | 153 | $(APL0_ELF): $(APL0_LDSCRIPT) $(GLBL_OFILES) $(APL0_OFILES) 154 | cd $(BUILD_DIR)/apploader-update && $(LD) -T ld_script.ld -Map ../../$(APL0_MAP) -o ../../$@ 155 | 156 | $(DOL0_LDSCRIPT): ldscript_dol_upd.txt 157 | cp $< $@ 158 | 159 | $(DOL0_ELF): $(DOL0_LDSCRIPT) $(GLBL_OFILES) $(DOL0_OFILES) 160 | cd $(BUILD_DIR)/maindol-update && $(LD) -T ld_script.ld -Map ../../$(DOL0_MAP) -o ../../$@ 161 | 162 | $(DOL0): $(DOL0_ELF) 163 | $(OBJCOPY) -O binary $< $@ 164 | 165 | $(APL1_LDSCRIPT): ldscript_appl.txt 166 | cp $< $@ 167 | 168 | $(APL1_ELF): $(APL1_LDSCRIPT) $(GLBL_OFILES) $(APL1_OFILES) 169 | cd $(BUILD_DIR)/apploader && $(LD) -T ld_script.ld -Map ../../$(APL1_MAP) -o ../../$@ 170 | 171 | $(APL1): $(APL1_ELF) 172 | $(OBJCOPY) -O binary $< $@ 173 | 174 | $(DOL1_LDSCRIPT): ldscript_dol.txt 175 | cp $< $@ 176 | 177 | #TODO: StaticR.rel relocation table 178 | $(DOL1_ELF): $(DOL1_LDSCRIPT) $(GLBL_OFILES) $(DOL1_OFILES) 179 | cd $(BUILD_DIR)/maindol && $(LD) -T ld_script.ld -Map ../../$(DOL1_MAP) -o ../../$@ 180 | 181 | $(DOL1): $(DOL1_ELF) 182 | $(OBJCOPY) -O binary $< $@ 183 | 184 | $(REL_LDSCRIPT): ldscript_rel.txt 185 | cp $< $@ 186 | 187 | $(REL_ELF): $(REL_LDSCRIPT) $(GLBL_OFILES) $(REL_OFILES) 188 | cd $(BUILD_DIR)/staticr && $(LD) -T ld_script.ld -Map ../../$(REL_MAP) -o ../../$@ 189 | 190 | $(REL): $(REL_ELF) 191 | $(OBJCOPY) -O binary $< $@ 192 | 193 | $(DOL2_LDSCRIPT): ldscript_dol_mkc_installer.txt 194 | cp $< $@ 195 | 196 | $(DOL2_ELF): $(DOL2_LDSCRIPT) $(GLBL_OFILES) $(DOL2_OFILES) 197 | cd $(BUILD_DIR)/maindol-mkc-installer && $(LD) -T ld_script.ld -Map ../../$(DOL2_MAP) -o ../../$@ 198 | 199 | $(DOL2): $(DOL2_ELF) 200 | $(OBJCOPY) -O binary $< $@ 201 | 202 | $(APLC_LDSCRIPT): ldscript_mkc_nandloader.txt 203 | cp $< $@ 204 | 205 | $(APLC_ELF): $(APLC_LDSCRIPT) $(GLBL_OFILES) $(APLC_OFILES) 206 | cd $(BUILD_DIR)/mkc-nandloader && $(LD) -T ld_script.ld -Map ../../$(APLC_MAP) -o ../../$@ 207 | 208 | $(APLC): $(APLC_ELF) 209 | $(OBJCOPY) -O binary $< $@ 210 | 211 | $(DOLC_LDSCRIPT): ldscript_dol_mkc.txt 212 | cp $< $@ 213 | 214 | $(DOLC_ELF): $(DOLC_LDSCRIPT) $(GLBL_OFILES) $(DOLC_OFILES) 215 | cd $(BUILD_DIR)/maindol-mkc && $(LD) -T ld_script.ld -Map ../../$(DOLC_MAP) -o ../../$@ 216 | 217 | $(DOLC): $(DOLC_ELF) 218 | $(OBJCOPY) -O binary $< $@ 219 | 220 | $(C_OBJECTS): $(BUILD_DIR)/%.o: %.c 221 | $(CPP) $(CPPFLAGS) $< -o $(BUILD_DIR)/$*.i 222 | $(CC1) $(CC1FLAGS) $(BUILD_DIR)/$*.i -o $(BUILD_DIR)/$*.s 223 | @printf ".text\n\t.align\t2, 0\n" >> $(BUILD_DIR)/$*.s 224 | $(AS) $(ASFLAGS) -o $@ $(BUILD_DIR)/$*.s 225 | 226 | $(BUILD_DIR)/%.o: %.s 227 | $(AS) $(ASFLAGS) $< -o $@ 228 | 229 | # Aliases 230 | 231 | main : $(DOL1) 232 | dol : $(DOL1) 233 | dol0 : $(DOL0) 234 | dol1 : $(DOL1) 235 | dol2 : $(DOL2) 236 | all-dol: $(DOL0) $(DOL1) $(DOL2) $(DOLC) 237 | staticr : $(REL) 238 | rel : $(REL) 239 | appldr : $(APL1) 240 | appldr0 : $(APL0) 241 | appldr1 : $(APL1) 242 | appldr2 : $(APL1) 243 | all-appldr: $(APL0) $(APL1) $(APLC) 244 | apploader-mkc-installer.img: $(APL1) 245 | upd : $(APL0) $(DOL0) 246 | mkw : $(APL1) $(DOL1) $(REL) 247 | chan : $(APL1) $(DOL2) 248 | mkc : $(APLC) $(DOLC) 249 | 250 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DisMKW 2 | pret-style disassembly of Mario Kart Wii. 3 | 4 | This is a work in progress and far from production-ready. 5 | 6 | Currently, all PPC code within the game (including the Mario Kart Channel) is buildable. Only the NTSC-U version is disassembled at the moment. 7 | 8 | ### Common patches to main.dol and StaticR.rel that are included: 9 | 10 | - [ ] Wiimmfi 11 | - [x] Gecko hooktype 12 | * Note: The GCT data is stored in D9 instead of T3. 13 | - [ ] XeR's CTWW patch 14 | - [x] CTGP-Code (more info: http://github.com/Chadderz121/wii-ct-code) 15 | * Note: Only the MOD0 parts are included. MOD1 and MOD2 are to be built seperately. 16 | * Note: In the future, modifications to main.dol and StaticR.rel will be included inline, removing the need for CTGP-Code. 17 | 18 | ## How to use 19 | 20 | Install [**devkitPPC**](http://devkitpro.org/wiki/Getting_Started/devkitPPC) to assemble/compile this project. 21 | 22 | Obtain the NTSC-U **main.dol** and **StaticR.rel** from a USA (NTSC-U) copy of Mario Kart Wii. Ensure they are named **basemain.dol** and **baseStaticR.rel**. Note that this repository does not contain, use, or assemble any other game files, though that may change in the future. 23 | 24 | For Mac OS X, run this command in **Terminal**. 25 | 26 | ```sh 27 | xcode-select --install 28 | ``` 29 | 30 | For Windows, download [**Cygwin**](http://cygwin.com/install.html): **setup-x86_64.exe** for 64-bit Windows, **setup-x86.exe** for 32-bit. 31 | 32 | Run the Cygwin setup and leave the default settings. At "Select Packages", set the view to "Full" and choose to install the following: 33 | 34 | - `make` 35 | - `git` 36 | - `gcc-core` 37 | - `gcc-g++` 38 | - `libpng-devel` 39 | 40 | Next, run these commands to set up your enviornment. (Replace **/opt/devkitPro** with where you installed devkitPro to.) 41 | 42 | ```sh 43 | export DEVKITPRO=/opt/devkitPro 44 | echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc 45 | export DEVKITARM=$DEVKITPRO/devkitPPC 46 | echo "export DEVKITPPC=$DEVKITPPC" >> ~/.bashrc 47 | 48 | git clone https://github.com/aplumafreak500/DisMKW 49 | 50 | cd DisMKW 51 | ``` 52 | 53 | To build **main.dol** and **StaticR.rel**: 54 | ```sh 55 | make 56 | ``` 57 | 58 | ## Disassembly Progress 59 | 60 | (Also known as: What currently requires incbin calls) 61 | 62 | - [ ] Partiton 1 main.dol 63 | - [x] T0 64 | - [ ] T1 65 | * First incbin call at T1 0x400 66 | - [ ] D0 67 | * Currently disassembled up to D0 0x2c0 68 | - [ ] D1 69 | - [x] D2 70 | - [x] D3 71 | - [ ] D4 72 | * Currently disassembled up to D4 0x6180 (first incbin call at D4 0x560) 73 | - [ ] D5 74 | - [ ] D6 75 | - [ ] D7 76 | * Currently only D7 0x60-0x68 77 | - [ ] StaticR.rel 78 | - [ ] T0 79 | - [x] D0 80 | - [x] D1 81 | - [ ] D2 82 | - [ ] D3 83 | - [x] Imp 84 | - [ ] Reloc 85 | - [ ] Reloc (main.dol) 86 | - [ ] Partiton 0 Apploader.img 87 | - [ ] .text 88 | - [ ] .data 89 | - [ ] .loader 90 | - [ ] .text 91 | - [ ] .data 92 | - [ ] Partition 1 & 2 Apploader.img 93 | - [x] .text 94 | - [x] .data 95 | - [ ] .loader 96 | - [ ] .text 97 | - [ ] .data 98 | - [x] Partition 0 main.dol 99 | - [ ] Partition 2 main.dol 100 | - [ ] .text 101 | - [ ] .data 102 | - [ ] Mario Kart Channel main.dol 103 | - [ ] .text 104 | - [ ] .data 105 | - [ ] Mario Kart Channel NAND loader 106 | - [ ] .text 107 | - [ ] .data 108 | -------------------------------------------------------------------------------- /apploader-update/data.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "baseapploader-update.img", 0x12e0, 0x87c 3 | -------------------------------------------------------------------------------- /apploader-update/header.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global ApploaderHeader 3 | ApploaderHeader: 4 | .ascii "2007/09/26" # Build date 5 | .space 6 6 | .4byte apl_entrypoint 7 | .4byte Section0Size 8 | .4byte Section1Size 9 | .4byte 0 10 | -------------------------------------------------------------------------------- /apploader-update/loader/bss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0xb8d8 3 | -------------------------------------------------------------------------------- /apploader-update/loader/ctors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x81353c68 3 | .space 28 4 | -------------------------------------------------------------------------------- /apploader-update/loader/data.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "baseapploader-update.img", 0x2a5bc, 0x10f00 3 | -------------------------------------------------------------------------------- /apploader-update/loader/dtors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x81353ca4 3 | .space 28 4 | -------------------------------------------------------------------------------- /apploader-update/loader/extab.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global extab_entry0 3 | extab_entry0: 4 | .4byte 0x18080000, 0 5 | .global extab_entry1 6 | extab_entry1: 7 | .4byte 0x18080000, 0 8 | .global extab_entry2 9 | extab_entry2: 10 | .4byte 0x10080000, 0 11 | .global extab_entry3 12 | extab_entry3: 13 | .4byte 0x18480000, 0 14 | .global extab_entry4 15 | extab_entry4: 16 | .4byte 0x10080000, 0 17 | .global extab_entry5 18 | extab_entry5: 19 | .4byte 0x30080000, 0 20 | .global extab_entry6 21 | extab_entry6: 22 | .4byte 0x8080000, 0 23 | .global extab_entry7 24 | extab_entry7: 25 | .4byte 0x80000, 0 26 | .global extab_entry8 27 | extab_entry8: 28 | .4byte 0x80000, 0 29 | .global extab_entry9 30 | extab_entry9: 31 | .4byte 0x18080000, 0 32 | .global extab_entry10 33 | extab_entry10: 34 | .4byte 0x50080000, 0 35 | .global extab_entry11 36 | extab_entry11: 37 | .4byte 0x204a0000, 0 38 | .global extab_entry12 39 | extab_entry12: 40 | .4byte 0x20480000, 0 41 | .global extab_entry13 42 | extab_entry13: 43 | .4byte 0x80080000, 0 44 | .global extab_entry14 45 | extab_entry14: 46 | .4byte 0x10080000, 0 47 | .global extab_entry15 48 | extab_entry15: 49 | .4byte 0x18080000, 0 50 | .global extab_entry16 51 | extab_entry16: 52 | .4byte 0x28080000, 0 53 | .global extab_entry17 54 | extab_entry17: 55 | .4byte 0x28080000, 0 56 | .global extab_entry18 57 | extab_entry18: 58 | .4byte 0x80080000, 0 59 | .global extab_entry19 60 | extab_entry19: 61 | .4byte 0x8080000, 0 62 | 63 | -------------------------------------------------------------------------------- /apploader-update/loader/extabindex.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x81353d3c, 0xdc 3 | .4byte extab_entry0, 0x81353e18, 0x288 4 | .4byte extab_entry1, 0x8135418c, 0x36c 5 | .4byte extab_entry2, 0x813544f8, 0x164 6 | .4byte extab_entry3, 0x8135465c, 0x1a0 7 | .4byte extab_entry4, 0x81354864, 0xb8 8 | .4byte extab_entry5, 0x8135491c, 0xcc 9 | .4byte extab_entry6, 0x81354d30, 0x18 10 | .4byte extab_entry7, 0x81354d48, 0x80 11 | .4byte extab_entry8, 0x81354dc8, 0x5fc 12 | .4byte extab_entry9, 0x813555ec, 0x2a0 13 | .4byte extab_entry10, 0x8135588c, 0x3c8 14 | .4byte extab_entry11, 0x81355d7c, 0x7d0 15 | .4byte extab_entry12, 0x8135654c, 0x85c 16 | .4byte extab_entry13, 0x81356da8, 0x6c 17 | .4byte extab_entry14, 0x81356e14, 0x84 18 | .4byte extab_entry15, 0x81356e98, 0xd8 19 | .4byte extab_entry16, 0x81356f70, 0xd0 20 | .4byte extab_entry17, 0x81357360, 0x430 21 | .4byte extab_entry18, 0x81357790, 0xc4 22 | .4byte extab_entry19 23 | .global extab_index_table_end 24 | extab_index_table_end: 25 | .4byte extab_end 26 | .4byte extab_index_table_end, 0x81353d3c, 0x3b18 27 | 28 | .space 32 29 | -------------------------------------------------------------------------------- /apploader-update/loader/header.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global DolHeader 3 | DolHeader: 4 | .4byte init_offset 5 | .4byte text_offset 6 | .space 20 7 | .4byte extab_offset 8 | .4byte extab_index_offset 9 | .4byte ctors_offset 10 | .4byte dtors_offset 11 | .4byte rodata_offset 12 | .4byte data_offset 13 | .4byte sdata_offset 14 | .4byte sdata2_offset 15 | .space 12 16 | .4byte init_start 17 | .4byte text_start 18 | .space 20 19 | .4byte extab_start 20 | .4byte extab_index_start 21 | .4byte ctors_start 22 | .4byte dtors_start 23 | .4byte rodata_start 24 | .4byte data_start 25 | .4byte sdata_start 26 | .4byte sdata2_start 27 | .space 12 28 | .4byte init_size 29 | .4byte text_size 30 | .space 20 31 | .4byte extab_size 32 | .4byte extab_index_size 33 | .4byte ctors_size 34 | .4byte dtors_size 35 | .4byte rodata_size 36 | .4byte data_size 37 | .4byte sdata_size 38 | .4byte sdata2_size 39 | .space 12 40 | .4byte bss_start 41 | .4byte bssTotalSize 42 | .4byte dol_entrypoint 43 | .space 28 44 | 45 | -------------------------------------------------------------------------------- /apploader-update/loader/init.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global dol_entrypoint 3 | dol_entrypoint: 4 | .incbin "baseapploader-update.img", 0x1b5c + 0x100, 0x3a0 5 | -------------------------------------------------------------------------------- /apploader-update/loader/rodata.s: -------------------------------------------------------------------------------- 1 | .data 2 | 3 | # table of pointers, all in .data 4 | 5 | .global gUnknown_0 6 | gUnknown_0: 7 | .4byte 0x81367928, 0x813679b8, 0x81367a58, 0x81367b10 8 | .4byte 0x81367bb4, 0x81367c60, 0x81367d0c, 0x81367928 9 | .4byte 0x81367d9c, 0x81367a58, 0x81367b10, 0x81367bb4 10 | .4byte 0x81367c60, 0x81367d0c, 0x81367e38, 0x81367e74 11 | .4byte 0x81367eac, 0x81367eec, 0x81367f28, 0x81367f64 12 | .4byte 0x81367fa0 13 | 14 | .space 12 15 | 16 | # idk 17 | 18 | .global gUnknown_94 19 | gUnknown_94: 20 | .incbin "baseapploader-update.img", 0x297fc, 0x140 21 | 22 | .global SysconfStr 23 | SysconfStr: 24 | .ascii "/shared2/sys/SYSCONF" 25 | .4byte 0 26 | 27 | .global SettingTxtStr 28 | SettingTxtStr: 29 | .asciz "/title/00000001/00000002/data/setting.txt" 30 | 31 | .space 14 32 | 33 | .4byte 0x41f00000, 0, 0x41e00000, 0 34 | 35 | # Powers of 5 36 | .asciz "542101086242752217003726400434970855712890625" 37 | .asciz "11102230246251565404236316680908203125" 38 | .asciz "23283064365386962890625" 39 | .asciz "152587890625" 40 | .asciz "390625" 41 | .asciz "78125" 42 | .asciz "15625" 43 | .asciz "3125" 44 | .asciz "625" 45 | .asciz "125" 46 | .asciz "25" 47 | .asciz "5" 48 | 49 | # Powers of 2 50 | .asciz "1" 51 | .asciz "2" 52 | .asciz "4" 53 | .asciz "8" 54 | .asciz "16" 55 | .asciz "32" 56 | .asciz "64" 57 | .asciz "128" 58 | .asciz "256" 59 | 60 | .ascii "179769313486231580793728714053034151" 61 | 62 | .4byte 0 63 | 64 | .incbin "baseapploader-update.img", 0x29a7c, 0x100 65 | 66 | .space 256 67 | 68 | # bytes 0x00 - 0xff repeated 69 | .incbin "baseapploader-update.img", 0x29c7c, 0x200 70 | 71 | # format strings for dates/times 72 | .asciz "%a %b %e %T %Y\0" 73 | .asciz "%I:%M:%S %p" 74 | .ascii "%m/%d/%y" 75 | .4byte 0 76 | 77 | # days of the week 78 | .ascii "Sun|Sunday|Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday" 79 | .4byte 0 80 | 81 | # months of the year 82 | .asciz "Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December" 83 | .2byte 0 84 | 85 | .asciz "0x0p0" 86 | 87 | .asciz "-INF" 88 | .asciz "-inf" 89 | .asciz "INF" 90 | .asciz "inf" 91 | .asciz "-NAN" 92 | .asciz "-nan" 93 | .asciz "NAN" 94 | .asciz "nan" 95 | 96 | .space 6 97 | 98 | .incbin "baseapploader-update.img", 0x29fb4, 0x100 99 | 100 | .space 256 101 | 102 | # UTF16-BE 0x00-0xff 103 | 104 | .incbin "baseapploader-update.img", 0x2a1b4, 0x400 105 | 106 | # eof 107 | 108 | .space 8 109 | 110 | -------------------------------------------------------------------------------- /apploader-update/loader/sbss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x0 3 | -------------------------------------------------------------------------------- /apploader-update/loader/sbss2.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x0 3 | -------------------------------------------------------------------------------- /apploader-update/loader/sdata.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0xffffff00, 0, 0x3f000000, 0x41800000 3 | .4byte 0x3dc8b439, 0x3e839581, 0x3f010625, 0x43000000 4 | .4byte 0x3ee0c49c, 0xbe178d50, 0x3e94fdf4, 0x3ebc6a7f 5 | .4byte 0x3d916873, 0x436b0000, 0x43700000, 0 6 | .4byte 0x43300000, 0, 0x2abe003d, 0x3d003d 7 | .4byte 0x3f7eb852, 0, 0x43300000, GameID 8 | .4byte 0x8136b620, 0, 0x3f000000, 0x43ab0000 # points to .bss 9 | .4byte 0xffffff00, 0, 0, 0 10 | .4byte 0x2e000000, 0, 0x414d7c50, 0x4d000000 11 | .4byte 0x25540000, 0, 0, 0 12 | .4byte 0x43500000, 0, 0, 0 13 | .4byte 0x43500000, 0, 0x1a56e1f, 0xc2f8f359 14 | .4byte 0x7e37e43c, 0x8800759c, 0x3c900000, 0 15 | .space 16 16 | 17 | -------------------------------------------------------------------------------- /apploader-update/loader/sdata2.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x81358a00 # .data 3 | .asciz "RVA 1\n\0" 4 | .asciz "%08x\n\0\0" 5 | .asciz "%s\n" 6 | .asciz "OS.c\0\0\0" 7 | .4byte 0xffffffff, 0xffffffff, 0xf8, 0xa000000 8 | .asciz "%016llx" 9 | .asciz "%s\n" 10 | .4byte 0, 0xffff0000, 0, 0, 0 11 | .4byte 0x8133951c # .text 12 | .4byte 0, 0xffffffff, 0, 9, 0, 0xffffffff, 0 13 | .asciz "Expired" # ssl? 14 | .4byte 0x81366938, 0 15 | .4byte 0x81366980, 0 16 | .4byte 0x81366aa0, 1 17 | .4byte 0x3e7, 0x3e7, 1, 1 18 | .ascii "vi.c" 19 | .4byte 0, 1, 0, 0xff 20 | .4byte 0xffffffff, 0xffffffff, 0xffffffff 21 | .4byte 0x40102, 0x80102, 0xc0102, 0 22 | .4byte 1, 0 23 | .4byte 0x81367588, 1 24 | .4byte 0x8134511c 25 | .asciz "dvd.c" 26 | .2byte 0 27 | .4byte 0xffffffff, 1, 0xffffff00, 0xffffffff, 0 28 | .asciz "/dev/di" 29 | .4byte 0x81368ea0 30 | .asciz "/" 31 | .2byte 0 32 | .4byte 0 33 | .asciz "." 34 | .2byte 0 35 | .asciz "..\0" 36 | .asciz "/%s" 37 | .asciz "%s/%s" 38 | .2byte 0 39 | .4byte 0xffffff01, 0 40 | .4byte 0x81369038 41 | 42 | # Sysconf 43 | 44 | .asciz "IPL.CB\0" 45 | .asciz "IPL.AR\0" 46 | .4byte 0 47 | .asciz "IPL.ARN" 48 | .asciz "IPL.CD\0" 49 | .asciz "IPL.CD2" 50 | .asciz "IPL.DH\0" 51 | .asciz "IPL.E60" 52 | .asciz "IPL.FRC" 53 | .asciz "IPL.IDL" 54 | .asciz "IPL.INC" 55 | .asciz "IPL.LNG" 56 | .asciz "IPL.NIK" 57 | .asciz "IPL.PC\0" 58 | .asciz "IPL.PGS" 59 | .asciz "IPL.SSV" 60 | .asciz "IPL.SND" 61 | .asciz "IPL.UPT" 62 | .asciz "NET.CNF" 63 | .asciz "DEV.BTM" 64 | .asciz "DEV.VIM" 65 | .asciz "DEV.CTC" 66 | .asciz "DEV.DSM" 67 | .asciz "BT.DINF" 68 | .asciz "BT.CDIF" 69 | .asciz "BT.SENS" 70 | .asciz "BT.SPKV" 71 | .asciz "BT.MOT\0" 72 | .asciz "BT.BAR\0" 73 | .asciz "DVD.CNF" 74 | .asciz "WWW.RST" 75 | .ascii "SCv0" 76 | .4byte 0 77 | .ascii "SCed" 78 | .4byte 0 79 | .ascii "AREA" 80 | .4byte 0 81 | .ascii "GAME" 82 | .4byte 0 83 | .4byte 0xffffffff, 0 84 | .asciz "/dev/es" # tickets 85 | .4byte 1, 0xffffffff, 0xffffffff, 0 86 | .asciz "/dev/fs" # nand 87 | .4byte 0xfffffffe 88 | 89 | # eof 90 | 91 | .space 12 92 | 93 | -------------------------------------------------------------------------------- /apploader-update/loader/text.s: -------------------------------------------------------------------------------- 1 | .text 2 | .incbin "baseapploader-update.img", 0x1b5c + 0x4a0, 0x275a0 3 | 4 | -------------------------------------------------------------------------------- /apploader-update/memset.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global memcpy 3 | memcpy: 4 | cmplw %r4, %r3 5 | blt- _2c 6 | subi %r4, %r4, 0x1 7 | subi %r6, %r3, 0x1 8 | addi %r5, %r5, 0x1 9 | b _20 10 | _18: 11 | lbzu %r0, 0x1(%r4) 12 | stbu %r0, 0x1(%r6) 13 | _20: 14 | subic. %r5, %r5, 0x1 15 | bne+ _18 16 | blr 17 | _2c: 18 | add %r4, %r4, %r5 19 | add %r6, %r3, %r5 20 | addi %r5, %r5, 0x1 21 | b _44 22 | _3c: 23 | lbzu %r0, -0x1(%r4) 24 | stbu %r0, -0x1(%r6) 25 | _44: 26 | subic. %r5, %r5, 0x1 27 | bne+ _3c 28 | blr 29 | 30 | .global sub_50 31 | sub_50: 32 | cmplwi %r5, 0x20 33 | clrlwi %r7, %r4, 24 34 | subi %r6, %r3, 0x1 35 | blt- _ec 36 | not %r0, %r6 37 | clrlwi. %r0, %r0, 30 38 | beq- _7c 39 | subf %r5, %r0, %r5 40 | _70: 41 | subic. %r0, %r0, 0x1 42 | stbu %r7, 0x1(%r6) 43 | bne+ _70 44 | _7c: 45 | cmpwi %r7, 0x0 46 | beq- _9c 47 | slwi %r4, %r7, 8 48 | slwi %r3, %r7, 24 49 | slwi %r0, %r7, 16 50 | or %r4, %r7, %r4 51 | or %r0, %r3, %r0 52 | or %r7, %r4, %r0 53 | _9c: 54 | srwi. %r0, %r5, 5 55 | subi %r3, %r6, 0x3 56 | beq- _d0 57 | _a8: 58 | stw %r7, 0x4(%r3) 59 | subic. %r0, %r0, 0x1 60 | stw %r7, 0x8(%r3) 61 | stw %r7, 0xc(%r3) 62 | stw %r7, 0x10(%r3) 63 | stw %r7, 0x14(%r3) 64 | stw %r7, 0x18(%r3) 65 | stw %r7, 0x1c(%r3) 66 | stwu %r7, 0x20(%r3) 67 | bne+ _a8 68 | _d0: 69 | extrwi. %r0, %r5, 3, 27 70 | beq- _e4 71 | _d8: 72 | subic. %r0, %r0, 0x1 73 | stwu %r7, 0x4(%r3) 74 | bne+ _d8 75 | _e4: 76 | addi %r6, %r3, 0x3 77 | clrlwi %r5, %r5, 30 78 | _ec: 79 | cmpwi %r5, 0x0 80 | beqlr- 81 | _f4: 82 | subic. %r5, %r5, 0x1 83 | stbu %r7, 0x1(%r6) 84 | bne+ _f4 85 | blr 86 | 87 | .global memset 88 | memset: 89 | stwu %r1, -0x10(%r1) 90 | mflr %r0 91 | stw %r0, 0x14(%r1) 92 | stw %r31, 0xc(%r1) 93 | mr %r31, %r3 94 | bl sub_50 95 | mr %r3, %r31 96 | lwz %r31, 0xc(%r1) 97 | lwz %r0, 0x14(%r1) 98 | mtlr %r0 99 | addi %r1, %r1, 0x10 100 | blr 101 | -------------------------------------------------------------------------------- /apploader-update/text.s: -------------------------------------------------------------------------------- 1 | .text 2 | .incbin "baseapploader-update.img", 0x160, 0x154 3 | .global apl_entrypoint 4 | apl_entrypoint: 5 | .incbin "baseapploader-update.img", 0x2b4, 0x102c 6 | -------------------------------------------------------------------------------- /apploader/data.s: -------------------------------------------------------------------------------- 1 | .data 2 | 3 | .global FailedAssertStr 4 | FailedAssertStr: 5 | .asciz "Failed assertion len <= RETURNFUNC_MAXSIZE\0" 6 | .global ApploaderInitializedStr 7 | ApploaderInitializedStr: 8 | .asciz "\nApploader Initialized.\n\0" 9 | .2byte 0 10 | .global ApploaderBuiltStr 11 | ApploaderBuiltStr: 12 | .asciz "This Apploader built %s %s for RVL\n" 13 | .global BuildDate 14 | BuildDate: 15 | .asciz "Dec 6 2007" 16 | .global BuildTime 17 | BuildTime: 18 | .asciz "12:45:59\0" 19 | .2byte 0 20 | .4byte 0 21 | .global OldVersionStr 22 | OldVersionStr: 23 | .ascii "\nAPPLOADER WARNING >>> Older version of DEVKIT BOOT PROGRAM.\n" 24 | .global OldVersionStr 25 | OldVersionStr2: 26 | .asciz "APPLOADER WARNING >>> Use v1.07 or later.\n" 27 | .global FSTLengthStr 28 | FSTLengthStr: 29 | .asciz "APPLOADER ERROR >>> FSTLength(%d) in BB2 is greater than FSTMaxLength(%d)\n\0" 30 | .4byte 0 31 | .global DebugMonitorSizeStr 32 | DebugMonitorSizeStr: 33 | .asciz "APPLOADER ERROR >>> Debug monitor size (%d) should be a multiple of 32\n" 34 | .global SimMemSizeStr 35 | SimMemSizeStr: 36 | .asciz "APPLOADER ERROR >>> Simulated memory size (%d) should be a multiple of 32\n\0" 37 | .global MemSizeStr 38 | MemSizeStr: 39 | .ascii "APPLOADER ERROR >>> [Physical memory size(0x%x)] - [Console simulated memory size(0x%x)]\n" 40 | .asciz "APPLOADER ERROR >>> must be greater than debug monitor size(0x%x)\n" 41 | .global PhysMemSizeStr 42 | PhysMemSizeStr: 43 | .ascii "APPLOADER WARNING >>> Physical memory size is 0x%x bytes.\n" 44 | .global ConsoleMemSizeStr 45 | ConsoleMemSizeStr: 46 | .ascii "APPLOADER WARNING >>> Console simulated memory size (0x%x) must be smaller than or equal to the Physical memory size\n" 47 | .global UsePhysMemSizeStr 48 | UsePhysMemSizeStr: 49 | .asciz "APPLOADER WARNING >>> Use physical memory size as the console simulated memory size.....\n\0" 50 | .2byte 0 51 | .global IllegalFSTDestAddrStr 52 | IllegalFSTDestAddrStr: 53 | .asciz "APPLOADER ERROR >>> Illegal FST destination address! (0x%x)\n\0" 54 | .2byte 0 55 | .global SectionSizeTooBigStr 56 | SectionSizeTooBigStr: 57 | .asciz "APPLOADER ERROR >>> Total size of text/data sections of the dol file are too big (%d(0x%08x) bytes). Currently the limit is set as %d(0x%08x) bytes\n\0" 58 | .2byte 0 59 | .global DolSectionExceedsStr 60 | DolSectionExceedsStr: 61 | .asciz "APPLOADER ERROR >>> One of the sections in the dol file exceeded its boundary. All the sections should not exceed 0x%08x (production mode)\n" 62 | .global DolSectionExceedsStr2 63 | DolSectionExceedsStr2: 64 | .asciz "\n\nAPPLOADER WARNING >>> One of the sections in the dol file exceeded its boundary. All the sections should not exceed 0x%08x in production mode.\n\n\0" 65 | .global DolSectionExceedsStr3 66 | DolSectionExceedsStr3: 67 | .asciz "APPLOADER ERROR >>> One of the sections in the dol file exceeded its boundary. All the sections should not exceed 0x%08x (development mode).\n" 68 | .2byte 0 69 | .global TooBigTextSectionStr 70 | TooBigTextSectionStr: 71 | .asciz "APPLOADER ERROR >>> Too big text segment! (0x%x - 0x%x)\n\0" 72 | .2byte 0 73 | .global TooBigDataSectionStr 74 | TooBigDataSectionStr: 75 | .asciz "APPLOADER ERROR >>> Too big data segment! (0x%x - 0x%x)\n\0" 76 | .2byte 0 77 | .global FailedAssertStr2 78 | FailedAssertStr2: 79 | .asciz "Failed assertion SecondTimeForThePart == TRUE" 80 | .2byte 0 81 | .global gUnknown_196c 82 | gUnknown_196c: 83 | .4byte sub_658, sub_658, sub_698, sub_704 84 | .4byte sub_8a0, sub_a78, sub_aa8, sub_d00 85 | .4byte sub_e28, sub_f50, sub_fe4, sub_1054 86 | .4byte sub_10b8 87 | 88 | .global gUnknown_19a0 89 | gUnknown_19a0: 90 | .space 24 91 | 92 | .global gUnknown_19b8 93 | gUnknown_19b8: 94 | .space 40 95 | 96 | .global gUnknown_19e0 97 | gUnknown_19e0: 98 | .space 348 99 | 100 | -------------------------------------------------------------------------------- /apploader/header.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global ApploaderHeader 3 | ApploaderHeader: 4 | .ascii "2007/12/06" # Build date 5 | .space 6 6 | .4byte apl_entrypoint 7 | .4byte Section0Size 8 | .4byte Section1Size 9 | .4byte 0 10 | -------------------------------------------------------------------------------- /apploader/loader/bss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0xb8d8 3 | -------------------------------------------------------------------------------- /apploader/loader/ctors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x81353de8 3 | .space 28 4 | -------------------------------------------------------------------------------- /apploader/loader/data.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "baseapploader.img", 0x1b5c + 0x28be0, 0x10d20 3 | -------------------------------------------------------------------------------- /apploader/loader/dtors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x81353e24 3 | .space 28 4 | -------------------------------------------------------------------------------- /apploader/loader/extab.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global extab_entry0 3 | extab_entry0: 4 | .4byte 0x18080000, 0 5 | .global extab_entry1 6 | extab_entry1: 7 | .4byte 0x18080000, 0 8 | .global extab_entry2 9 | extab_entry2: 10 | .4byte 0x10080000, 0 11 | .global extab_entry3 12 | extab_entry3: 13 | .4byte 0x18480000, 0 14 | .global extab_entry4 15 | extab_entry4: 16 | .4byte 0x10080000, 0 17 | .global extab_entry5 18 | extab_entry5: 19 | .4byte 0x30080000, 0 20 | .global extab_entry6 21 | extab_entry6: 22 | .4byte 0x8080000, 0 23 | .global extab_entry7 24 | extab_entry7: 25 | .4byte 0x80000, 0 26 | .global extab_entry8 27 | extab_entry8: 28 | .4byte 0x80000, 0 29 | .global extab_entry9 30 | extab_entry9: 31 | .4byte 0x18080000, 0 32 | .global extab_entry10 33 | extab_entry10: 34 | .4byte 0x50080000, 0 35 | .global extab_entry11 36 | extab_entry11: 37 | .4byte 0x204a0000, 0 38 | .global extab_entry12 39 | extab_entry12: 40 | .4byte 0x20480000, 0 41 | .global extab_entry13 42 | extab_entry13: 43 | .4byte 0x80080000, 0 44 | .global extab_entry14 45 | extab_entry14: 46 | .4byte 0x10080000, 0 47 | .global extab_entry15 48 | extab_entry15: 49 | .4byte 0x18080000, 0 50 | .global extab_entry16 51 | extab_entry16: 52 | .4byte 0x28080000, 0 53 | .global extab_entry17 54 | extab_entry17: 55 | .4byte 0x28080000, 0 56 | .global extab_entry18 57 | extab_entry18: 58 | .4byte 0x80080000, 0 59 | .global extab_entry19 60 | extab_entry19: 61 | .4byte 0x8080000, 0 62 | 63 | -------------------------------------------------------------------------------- /apploader/loader/extabindex.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x81353ebc, 0xdc 3 | .4byte extab_entry0, 0x81353f98, 0x288 4 | .4byte extab_entry1, 0x8135430c, 0x36c 5 | .4byte extab_entry2, 0x81354678, 0x164 6 | .4byte extab_entry3, 0x813547dc, 0x1a0 7 | .4byte extab_entry4, 0x813549e4, 0xb8 8 | .4byte extab_entry5, 0x81354a9c, 0xcc 9 | .4byte extab_entry6, 0x81354eb0, 0x18 10 | .4byte extab_entry7, 0x81354ec8, 0x80 11 | .4byte extab_entry8, 0x81354f48, 0x5fc 12 | .4byte extab_entry9, 0x8135576c, 0x2a0 13 | .4byte extab_entry10, 0x81355a0c, 0x3c8 14 | .4byte extab_entry11, 0x81355efc, 0x7d0 15 | .4byte extab_entry12, 0x813566cc, 0x85c 16 | .4byte extab_entry13, 0x81356f28, 0x6c 17 | .4byte extab_entry14, 0x81356f94, 0x84 18 | .4byte extab_entry15, 0x81357018, 0xd8 19 | .4byte extab_entry16, 0x813570f0, 0xd0 20 | .4byte extab_entry17, 0x813574e0, 0x430 21 | .4byte extab_entry18, 0x81357910, 0xc4 22 | .4byte extab_entry19 23 | .global extab_index_table_end 24 | extab_index_table_end: 25 | .4byte extab_end 26 | .4byte extab_index_table_end, 0x81353ebc, 0x3b18 27 | 28 | .space 32 29 | -------------------------------------------------------------------------------- /apploader/loader/header.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global DolHeader 3 | DolHeader: 4 | .4byte init_offset 5 | .4byte text_offset 6 | .space 20 7 | .4byte extab_offset 8 | .4byte extab_index_offset 9 | .4byte ctors_offset 10 | .4byte dtors_offset 11 | .4byte rodata_offset 12 | .4byte data_offset 13 | .4byte sdata_offset 14 | .4byte sdata2_offset 15 | .space 12 16 | .4byte init_start 17 | .4byte text_start 18 | .space 20 19 | .4byte extab_start 20 | .4byte extab_index_start 21 | .4byte ctors_start 22 | .4byte dtors_start 23 | .4byte rodata_start 24 | .4byte data_start 25 | .4byte sdata_start 26 | .4byte sdata2_start 27 | .space 12 28 | .4byte init_size 29 | .4byte text_size 30 | .space 20 31 | .4byte extab_size 32 | .4byte extab_index_size 33 | .4byte ctors_size 34 | .4byte dtors_size 35 | .4byte rodata_size 36 | .4byte data_size 37 | .4byte sdata_size 38 | .4byte sdata2_size 39 | .space 12 40 | .4byte bss_start 41 | .4byte bssTotalSize 42 | .4byte dol_entrypoint 43 | .space 28 44 | 45 | -------------------------------------------------------------------------------- /apploader/loader/init.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global dol_entrypoint 3 | dol_entrypoint: 4 | .incbin "baseapploader.img", 0x1b5c + 0x100, 0x80 5 | .global ldr_80 6 | ldr_80: 7 | .incbin "baseapploader.img", 0x1b5c + 0x180, 0x320 8 | -------------------------------------------------------------------------------- /apploader/loader/rodata.s: -------------------------------------------------------------------------------- 1 | .data 2 | 3 | # table of pointers, all in .data 4 | 5 | .global gUnknown_0 6 | gUnknown_0: 7 | .4byte 0x813678c8, 0x81367958, 0x813679f8, 0x81367ab0 8 | .4byte 0x81367b54, 0x81367c00, 0x81367cac, 0x813678c8 9 | .4byte 0x81367d3c, 0x813679f8, 0x81367ab0, 0x81367b54 10 | .4byte 0x81367c00, 0x81367cac, 0x81367dd8, 0x81367e14 11 | .4byte 0x81367e4c, 0x81367e8c, 0x81367ec8, 0x81367f04 12 | .4byte 0x81367f40 13 | 14 | .space 12 15 | 16 | # idk 17 | 18 | .global gUnknown_94 19 | gUnknown_94: 20 | .incbin "baseapploader.img", 0x2997c, 0x140 21 | 22 | .global SysconfStr 23 | SysconfStr: 24 | .ascii "/shared2/sys/SYSCONF" 25 | .4byte 0 26 | 27 | .global SettingTxtStr 28 | SettingTxtStr: 29 | .asciz "/title/00000001/00000002/data/setting.txt" 30 | 31 | .space 14 32 | 33 | .4byte 0x41f00000, 0, 0x41e00000, 0 34 | 35 | # Powers of 5 36 | .asciz "542101086242752217003726400434970855712890625" 37 | .asciz "11102230246251565404236316680908203125" 38 | .asciz "23283064365386962890625" 39 | .asciz "152587890625" 40 | .asciz "390625" 41 | .asciz "78125" 42 | .asciz "15625" 43 | .asciz "3125" 44 | .asciz "625" 45 | .asciz "125" 46 | .asciz "25" 47 | .asciz "5" 48 | 49 | # Powers of 2 50 | .asciz "1" 51 | .asciz "2" 52 | .asciz "4" 53 | .asciz "8" 54 | .asciz "16" 55 | .asciz "32" 56 | .asciz "64" 57 | .asciz "128" 58 | .asciz "256" 59 | 60 | .ascii "179769313486231580793728714053034151" 61 | 62 | .4byte 0 63 | 64 | .incbin "baseapploader.img", 0x29bfc, 0x100 65 | 66 | .space 256 67 | 68 | # bytes 0x00 - 0xff repeated 69 | .incbin "baseapploader.img", 0x29dfc, 0x200 70 | 71 | # format strings for dates/times 72 | .asciz "%a %b %e %T %Y\0" 73 | .asciz "%I:%M:%S %p" 74 | .ascii "%m/%d/%y" 75 | .4byte 0 76 | 77 | # days of the week 78 | .ascii "Sun|Sunday|Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday" 79 | .4byte 0 80 | 81 | # months of the year 82 | .asciz "Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December" 83 | .2byte 0 84 | 85 | .asciz "0x0p0" 86 | 87 | .asciz "-INF" 88 | .asciz "-inf" 89 | .asciz "INF" 90 | .asciz "inf" 91 | .asciz "-NAN" 92 | .asciz "-nan" 93 | .asciz "NAN" 94 | .asciz "nan" 95 | 96 | .space 6 97 | 98 | .incbin "baseapploader.img", 0x2a134, 0x100 99 | 100 | .space 256 101 | 102 | # UTF16-BE 0x00-0xff 103 | 104 | .incbin "baseapploader.img", 0x2a334, 0x400 105 | 106 | # eof 107 | 108 | .space 8 109 | 110 | -------------------------------------------------------------------------------- /apploader/loader/sbss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x0 3 | -------------------------------------------------------------------------------- /apploader/loader/sbss2.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x0 3 | -------------------------------------------------------------------------------- /apploader/loader/sdata.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0xffffff00, 0, 0x3f000000, 0x41800000 3 | .4byte 0x3dc8b439, 0x3e839581, 0x3f010625, 0x43000000 4 | .4byte 0x3ee0c49c, 0xbe178d50, 0x3e94fdf4, 0x3ebc6a7f 5 | .4byte 0x3d916873, 0x436b0000, 0x43700000, 0 6 | .4byte 0x43300000, 0, 0x2abe003d, 0x3d003d 7 | .4byte 0x3f7eb852, 0, 0x43300000, GameID 8 | .4byte 0x8136b5e0, 0, 0x3f000000, 0x43ab0000 # points to .bss 9 | .4byte 0xffffff00, 0, 0, 0 10 | .4byte 0x2e000000, 0, 0x414d7c50, 0x4d000000 11 | .4byte 0x25540000, 0, 0, 0 12 | .4byte 0x43500000, 0, 0, 0 13 | .4byte 0x43500000, 0, 0x1a56e1f, 0xc2f8f359 14 | .4byte 0x7e37e43c, 0x8800759c, 0x3c900000, 0 15 | .space 16 16 | 17 | -------------------------------------------------------------------------------- /apploader/loader/sdata2.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x81358b80 # .data 3 | .asciz "RVA 1\n\0" 4 | .asciz "%08x\n\0\0" 5 | .asciz "%s\n" 6 | .asciz "OS.c\0\0\0" 7 | .4byte 0xffffffff, 0xffffffff, 0xf8, 0xa000000 8 | .asciz "%016llx" 9 | .asciz "%s\n" 10 | .4byte 0, 0xffff0000, 0, 0, 0 11 | .4byte 0x81338ae8 # .text 12 | .4byte 0, 0xffffffff, 0, 9, 0, 0xffffffff, 0 13 | .asciz "Expired" # ssl? 14 | .asciz "%016llx" 15 | .4byte 0x813668d8, 0 # .data 16 | .4byte 0x81366920, 0 17 | .4byte 0x81366a40, 1 18 | .4byte 0x3e7, 0x3e7, 1, 1 19 | .ascii "vi.c" 20 | .4byte 0, 1, 0, 0xffffffff 21 | .4byte 0xffffffff, 0xffffff00, 0xff, 0xff000000, 0 22 | .4byte 0x40102, 0x80102, 0xc0102, 0 23 | .4byte 1, 0 24 | .4byte 0x81367528, 1 25 | .4byte 0x8134529c 26 | .asciz "dvd.c" 27 | .2byte 0 28 | .4byte 0xffffffff, 1, 0xffffff00, 0xffffffff, 0 29 | .asciz "/dev/di" 30 | .4byte 0x81368e40 31 | .asciz "/" 32 | .2byte 0 33 | .4byte 0 34 | .asciz "." 35 | .2byte 0 36 | .asciz "..\0" 37 | .asciz "/%s" 38 | .asciz "%s/%s" 39 | .2byte 0 40 | .4byte 0xffffff01, 0 41 | .4byte 0x81368fd8 42 | 43 | # Sysconf 44 | 45 | .asciz "IPL.CB\0" 46 | .asciz "IPL.AR\0" 47 | .4byte 0 48 | .asciz "IPL.ARN" 49 | .asciz "IPL.CD\0" 50 | .asciz "IPL.CD2" 51 | .asciz "IPL.DH\0" 52 | .asciz "IPL.E60" 53 | .asciz "IPL.FRC" 54 | .asciz "IPL.IDL" 55 | .asciz "IPL.INC" 56 | .asciz "IPL.LNG" 57 | .asciz "IPL.NIK" 58 | .asciz "IPL.PC\0" 59 | .asciz "IPL.PGS" 60 | .asciz "IPL.SSV" 61 | .asciz "IPL.SND" 62 | .asciz "IPL.UPT" 63 | .asciz "NET.CNF" 64 | .asciz "DEV.BTM" 65 | .asciz "DEV.VIM" 66 | .asciz "DEV.CTC" 67 | .asciz "DEV.DSM" 68 | .asciz "BT.DINF" 69 | .asciz "BT.CDIF" 70 | .asciz "BT.SENS" 71 | .asciz "BT.SPKV" 72 | .asciz "BT.MOT\0" 73 | .asciz "BT.BAR\0" 74 | .asciz "DVD.CNF" 75 | .asciz "WWW.RST" 76 | .ascii "SCv0" 77 | .4byte 0 78 | .ascii "SCed" 79 | .4byte 0 80 | .ascii "AREA" 81 | .4byte 0 82 | .ascii "GAME" 83 | .4byte 0 84 | .4byte 0xffffffff, 0 85 | .asciz "/dev/es" # tickets 86 | .4byte 1, 0xffffffff, 0xffffffff, 0 87 | .asciz "/dev/fs" # nand 88 | .4byte 0xfffffffe 89 | 90 | # eof 91 | 92 | .space 28 93 | 94 | -------------------------------------------------------------------------------- /apploader/loader/text.s: -------------------------------------------------------------------------------- 1 | .text 2 | .incbin "baseapploader.img", 0x1b5c + 0x4a0, 0xfa20 3 | 4 | .global ldr_ff80 5 | ldr_ff80: 6 | .incbin "baseapploader.img", 0x1b5c + 0xfec0, 0x17d00 7 | 8 | -------------------------------------------------------------------------------- /apploader/memset.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global memcpy 3 | memcpy: 4 | cmplw %r4, %r3 5 | blt- _2c 6 | subi %r4, %r4, 0x1 7 | subi %r6, %r3, 0x1 8 | addi %r5, %r5, 0x1 9 | b _20 10 | _18: 11 | lbzu %r0, 0x1(%r4) 12 | stbu %r0, 0x1(%r6) 13 | _20: 14 | subic. %r5, %r5, 0x1 15 | bne+ _18 16 | blr 17 | _2c: 18 | add %r4, %r4, %r5 19 | add %r6, %r3, %r5 20 | addi %r5, %r5, 0x1 21 | b _44 22 | _3c: 23 | lbzu %r0, -0x1(%r4) 24 | stbu %r0, -0x1(%r6) 25 | _44: 26 | subic. %r5, %r5, 0x1 27 | bne+ _3c 28 | blr 29 | 30 | .global sub_50 31 | sub_50: 32 | cmplwi %r5, 0x20 33 | clrlwi %r7, %r4, 24 34 | subi %r6, %r3, 0x1 35 | blt- _ec 36 | not %r0, %r6 37 | clrlwi. %r0, %r0, 30 38 | beq- _7c 39 | subf %r5, %r0, %r5 40 | _70: 41 | subic. %r0, %r0, 0x1 42 | stbu %r7, 0x1(%r6) 43 | bne+ _70 44 | _7c: 45 | cmpwi %r7, 0x0 46 | beq- _9c 47 | slwi %r4, %r7, 8 48 | slwi %r3, %r7, 24 49 | slwi %r0, %r7, 16 50 | or %r4, %r7, %r4 51 | or %r0, %r3, %r0 52 | or %r7, %r4, %r0 53 | _9c: 54 | srwi. %r0, %r5, 5 55 | subi %r3, %r6, 0x3 56 | beq- _d0 57 | _a8: 58 | stw %r7, 0x4(%r3) 59 | subic. %r0, %r0, 0x1 60 | stw %r7, 0x8(%r3) 61 | stw %r7, 0xc(%r3) 62 | stw %r7, 0x10(%r3) 63 | stw %r7, 0x14(%r3) 64 | stw %r7, 0x18(%r3) 65 | stw %r7, 0x1c(%r3) 66 | stwu %r7, 0x20(%r3) 67 | bne+ _a8 68 | _d0: 69 | extrwi. %r0, %r5, 3, 27 70 | beq- _e4 71 | _d8: 72 | subic. %r0, %r0, 0x1 73 | stwu %r7, 0x4(%r3) 74 | bne+ _d8 75 | _e4: 76 | addi %r6, %r3, 0x3 77 | clrlwi %r5, %r5, 30 78 | _ec: 79 | cmpwi %r5, 0x0 80 | beqlr- 81 | _f4: 82 | subic. %r5, %r5, 0x1 83 | stbu %r7, 0x1(%r6) 84 | bne+ _f4 85 | blr 86 | 87 | .global memset 88 | memset: 89 | stwu %r1, -0x10(%r1) 90 | mflr %r0 91 | stw %r0, 0x14(%r1) 92 | stw %r31, 0xc(%r1) 93 | mr %r31, %r3 94 | bl sub_50 95 | mr %r3, %r31 96 | lwz %r31, 0xc(%r1) 97 | lwz %r0, 0x14(%r1) 98 | mtlr %r0 99 | addi %r1, %r1, 0x10 100 | blr 101 | -------------------------------------------------------------------------------- /global/DolphinGlobals.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .global GameID 3 | GameID: # RMCE 4 | .space 4 5 | .global LicenseCode 6 | LicenseCode: # 01 7 | .space 2 8 | .global DiscNumber 9 | DiscNumber: 10 | .space 1 11 | .global DiscVersion 12 | DiscVersion: 13 | .space 1 14 | .global DiscStreaming 15 | DiscStreaming: 16 | .space 1 17 | .global DiscStreamingBufferSize 18 | DiscStreamingBufferSize: 19 | .space 1 20 | .global DiscHeaderPadding 21 | DiscHeaderPadding: 22 | .space 14 23 | .global DiscMagic 24 | DiscMagic: # 0x5d1c9ea300000000 25 | .space 8 26 | .global BootType 27 | BootType: # 0xd15ea5e 28 | .space 4 29 | .global Version 30 | Version: # Set by apploader.img 31 | .space 4 32 | .global Mem1Size 33 | Mem1Size: # 0x1800000 34 | .space 4 35 | .global BoardModel 36 | BoardModel: 37 | .space 4 38 | .global ArenaLow 39 | ArenaLow: 40 | .space 4 41 | .global ArenaHigh 42 | ArenaHigh: 43 | .space 4 44 | .global FSTOffset 45 | FSTOffset: 46 | .space 4 47 | .global FSTSize 48 | FSTSize: 49 | .space 4 50 | .global DebugEnabled 51 | DebugEnabled: 52 | .space 4 53 | .global DebugMask 54 | DebugMask: 55 | .space 4 56 | .global DebugDestination 57 | DebugDestination: 58 | .space 4 59 | .global DebugTempArea 60 | DebugTempArea: 61 | .space 0x14 62 | .global DebugHook 63 | DebugHook: 64 | .space 0x24 65 | .global DebugPadding 66 | DebugPadding: 67 | .space 0x40 68 | .global current_context_phy 69 | current_context_phy: 70 | .space 4 71 | .global previous_interrupt_mask 72 | previous_interrupt_mask: 73 | .space 4 74 | .global TV_Mode 75 | TV_Mode: 76 | .space 4 77 | .global ARAM_Size 78 | ARAM_Size: 79 | .space 4 80 | .global current_context 81 | current_context: 82 | .space 4 83 | .global default_thread 84 | default_thread: 85 | .space 4 86 | .global thread_queue_head 87 | thread_queue_head: 88 | .space 4 89 | .global thread_queue_tail 90 | thread_queue_tail: 91 | .space 4 92 | .global current_thread 93 | current_thread: 94 | .space 4 95 | .global DevDebuggerMonitorSize 96 | DevDebuggerMonitorSize: 97 | .space 4 98 | .global DevDebuggerMonitorAddress 99 | DevDebuggerMonitorAddress: 100 | .space 4 101 | .global SimulatedMemSize 102 | SimulatedMemSize: 103 | .space 4 104 | .global Bi2Offset 105 | Bi2Offset: 106 | .space 4 107 | .global BusSpeed 108 | BusSpeed: 109 | .space 4 110 | .global CpuSpeed 111 | CpuSpeed: 112 | .space 4 113 | .global SystemResetInterrupt 114 | SystemResetInterrupt: 115 | .space 0x100 116 | .global MachineCheckInterrupt 117 | MachineCheckInterrupt: 118 | .space 0x100 119 | .global DSI_Interrupt 120 | DSI_Interrupt: 121 | .space 0x100 122 | .global ISI_Interrupt 123 | ISI_Interrupt: 124 | .space 0x100 125 | .global ExtInterrupt 126 | ExtInterrupt: 127 | .space 0x100 128 | .global AlignmentInterrupt 129 | AlignmentInterrupt: 130 | .space 0x100 131 | .global ProgramInterrupt 132 | ProgramInterrupt: 133 | .space 0x100 134 | .global FPInterrupt 135 | FPInterrupt: 136 | .space 0x100 137 | .global DecrementerInterrupt 138 | DecrementerInterrupt: 139 | .space 0x100 140 | .global UnusedInterruptA00 141 | UnusedInterruptA00: 142 | .space 0x100 143 | .global UnusedInterruptB00 144 | UnusedInterruptB00: 145 | .space 0x100 146 | .global SyscallInterrupt 147 | SyscallInterrupt: 148 | .space 0x100 149 | .global TraceInterrupt 150 | TraceInterrupt: 151 | .space 0x100 152 | .global UnusedInterruptE00 153 | UnusedInterruptE00: 154 | .space 0x100 155 | .global PerformanceMonitorInterrupt 156 | PerformanceMonitorInterrupt: 157 | .space 0x100 158 | .global UnusedInterrupt1000 159 | UnusedInterrupt1000: 160 | .space 0x100 161 | .global UnusedInterrupt1100 162 | UnusedInterrupt1100: 163 | .space 0x100 164 | .global UnusedInterrupt1200 165 | UnusedInterrupt1200: 166 | .space 0x100 167 | .global IABR_Interrupt 168 | IABR_Interrupt: 169 | .space 0x100 170 | .global ReservedInterrupt 171 | ReservedInterrupt: 172 | .space 0x100 173 | .global UnusedInterrupt1500 174 | UnusedInterrupt1500: 175 | .space 0x100 176 | .global UnusedInterrupt1600 177 | UnusedInterrupt1600: 178 | .space 0x100 179 | .global ThermalInterrupt 180 | ThermalInterrupt: 181 | .space 0x100 182 | -------------------------------------------------------------------------------- /global/DolphinGlobals2.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .global ExceptionHandlers 3 | ExceptionHandlers: 4 | .space 0x10 5 | .global IRQHandlers 6 | IRQHandlers: 7 | .space 0x20 8 | .global Unk3030 9 | Unk3030: 10 | .space 0xa8 11 | .global UnkNandTitleValue 12 | UnkNandTitleValue: 13 | .space 4 14 | .global Unk30DC 15 | Unk30DC: 16 | .space 8 17 | .global GCNPort4DebugState 18 | GCNPort4DebugState: 19 | .space 4 20 | .global Unk30E8 21 | Unk30E8: 22 | .space 8 23 | .global DolParams 24 | DolParams: 25 | .space 4 26 | .global Unk30F4 27 | Unk30F4: 28 | .space 0xc 29 | .global Mem1Size_2 30 | Mem1Size_2: 31 | .space 4 32 | .global SimulatedMemSize_2 33 | SimulatedMemSize_2: 34 | .space 4 35 | .global Mem1End 36 | Mem1End: 37 | .space 4 38 | .global Unk310C 39 | Unk310C: 40 | .space 0x4 41 | .global FSTOffset2 42 | FSTOffset2: 43 | .space 4 44 | .global Unk3114 45 | Unk3114: 46 | .space 4 47 | .global Mem2Size 48 | Mem2Size: 49 | .space 4 50 | .global SimulatedMem2Size 51 | SimulatedMem2Size: 52 | .space 4 53 | .global Unk3120 54 | Unk3120: 55 | .space 0x10 56 | .global IOSHeapRange 57 | IOSHeapRange: 58 | .space 8 59 | .global HollywoodVersion 60 | HollywoodVersion: 61 | .space 4 62 | .global Unk313C 63 | Unk313C: 64 | .space 4 65 | .global IOSVersion 66 | IOSVersion: 67 | .space 4 68 | .global IOSBuildDate 69 | IOSBuildDate: 70 | .space 4 71 | .global Unk3148 72 | Unk3148: 73 | .space 0x10 74 | .global GDDRVendorCode 75 | GDDRVendorCode: 76 | .space 4 77 | .global Unk315C 78 | Unk315C: 79 | .space 1 80 | .global EnableLegacyDI 81 | EnableLegacyDI: 82 | .space 1 83 | .global DevkitBootProgramVersion 84 | DevkitBootProgramVersion: 85 | .space 2 86 | .global InitSemaphore 87 | InitSemaphore: 88 | .space 4 89 | .global MiosFlags 90 | MiosFlags: 91 | .space 4 92 | .global Unk3168 93 | Unk3168: 94 | .space 0x18 95 | .global NWC24GameID 96 | NWC24GameID: 97 | .space 4 98 | .global AppType 99 | AppType: 100 | .space 2 101 | .global Unk3186 102 | Unk3186: 103 | .space 2 104 | .global MinIOSVersion 105 | MinIOSVersion: 106 | .space 4 107 | .global NandLaunchCode 108 | NandLaunchCode: 109 | .space 4 110 | .global NandLaunchReturnCode 111 | NandLaunchReturnCode: 112 | .space 4 113 | .global PartitionType 114 | PartitionType: 115 | .space 4 116 | .global PartitionOffset 117 | PartitionOffset: 118 | .space 4 119 | .global Unk319C 120 | Unk319C: 121 | .space 0x264 122 | -------------------------------------------------------------------------------- /global/gct.s: -------------------------------------------------------------------------------- 1 | .data 2 | .ifdef USE_GECKO 3 | .global GCT_Codelist 4 | GCT_Codelist: 5 | .incbin "maindol/RMCE01.gct" # TODO: Disassemble this too 6 | .endif 7 | -------------------------------------------------------------------------------- /include/limits.h: -------------------------------------------------------------------------------- 1 | #ifndef _LIMITS_H___ 2 | #define _LIMITS_H___ 3 | 4 | /* Number of bits in a `char'. */ 5 | #undef CHAR_BIT 6 | #define CHAR_BIT 8 7 | 8 | /* Maximum length of a multibyte character. */ 9 | #ifndef MB_LEN_MAX 10 | #define MB_LEN_MAX 1 11 | #endif 12 | 13 | /* Minimum and maximum values a `signed char' can hold. */ 14 | #undef SCHAR_MIN 15 | #define SCHAR_MIN (-128) 16 | #undef SCHAR_MAX 17 | #define SCHAR_MAX 127 18 | 19 | /* Maximum value an `unsigned char' can hold. (Minimum is 0). */ 20 | #undef UCHAR_MAX 21 | #define UCHAR_MAX 255 22 | 23 | /* Minimum and maximum values a `char' can hold. */ 24 | #undef CHAR_MIN 25 | #define CHAR_MIN 0 26 | #undef CHAR_MAX 27 | #define CHAR_MAX 255 28 | 29 | /* Minimum and maximum values a `signed short int' can hold. */ 30 | #undef SHRT_MIN 31 | #define SHRT_MIN -32768 32 | #undef SHRT_MAX 33 | #define SHRT_MAX 32767 34 | 35 | /* Maximum value an `unsigned short int' can hold. (Minimum is 0). */ 36 | #undef USHRT_MAX 37 | #define USHRT_MAX 65535 38 | 39 | /* Minimum and maximum values a `signed int' can hold. */ 40 | #undef INT_MIN 41 | #define INT_MIN (-INT_MAX-1) 42 | #undef INT_MAX 43 | #define INT_MAX 2147483647 44 | 45 | /* Maximum value an `unsigned int' can hold. (Minimum is 0). */ 46 | #undef UINT_MAX 47 | #define UINT_MAX (INT_MAX * 2U + 1) 48 | 49 | /* Minimum and maximum values a `signed long int' can hold. 50 | (Same as `int'). */ 51 | #undef LONG_MIN 52 | #define LONG_MIN (-LONG_MAX-1) 53 | #undef LONG_MAX 54 | #define LONG_MAX 2147483647L 55 | 56 | /* Maximum value an `unsigned long int' can hold. (Minimum is 0). */ 57 | #undef ULONG_MAX 58 | #define ULONG_MAX (LONG_MAX * 2UL + 1) 59 | 60 | /* Minimum and maximum values a `signed long long int' can hold. */ 61 | #undef LONG_LONG_MIN 62 | #define LONG_LONG_MIN (-LONG_LONG_MAX-1) 63 | #undef LONG_LONG_MAX 64 | #define LONG_LONG_MAX 9223372036854775807LL 65 | 66 | /* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */ 67 | #undef ULONG_LONG_MAX 68 | #define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1) 69 | 70 | #endif /* _LIMITS_H___ */ 71 | -------------------------------------------------------------------------------- /include/stdint.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2008-2016 Free Software Foundation, Inc. 2 | 3 | This file is part of GCC. 4 | 5 | GCC is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 3, or (at your option) 8 | any later version. 9 | 10 | GCC is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | Under Section 7 of GPL version 3, you are granted additional 16 | permissions described in the GCC Runtime Library Exception, version 17 | 3.1, as published by the Free Software Foundation. 18 | 19 | You should have received a copy of the GNU General Public License and 20 | a copy of the GCC Runtime Library Exception along with this program; 21 | see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 22 | . */ 23 | 24 | /* 25 | * ISO C Standard: 7.18 Integer types 26 | */ 27 | 28 | #ifndef _STDINT_H 29 | #define _STDINT_H 30 | 31 | #include "limits.h" 32 | 33 | /* 7.8.1.1 Exact-width integer types */ 34 | 35 | typedef signed char int8_t; 36 | typedef short int16_t; 37 | typedef int int32_t; 38 | typedef long long int64_t; 39 | typedef unsigned char uint8_t; 40 | typedef unsigned short uint16_t; 41 | typedef unsigned int uint32_t; 42 | typedef unsigned long long uint64_t; 43 | 44 | /* 7.8.1.2 Minimum-width integer types */ 45 | 46 | typedef signed char int_least8_t; 47 | typedef short int_least16_t; 48 | typedef int int_least32_t; 49 | typedef long long int_least64_t; 50 | typedef unsigned char uint_least8_t; 51 | typedef unsigned short uint_least16_t; 52 | typedef unsigned int uint_least32_t; 53 | typedef unsigned long long uint_least64_t; 54 | 55 | /* 7.8.1.3 Fastest minimum-width integer types */ 56 | 57 | typedef int int_fast8_t; 58 | typedef int int_fast16_t; 59 | typedef int int_fast32_t; 60 | typedef long long int_fast64_t; 61 | typedef unsigned int uint_fast8_t; 62 | typedef unsigned int uint_fast16_t; 63 | typedef unsigned int uint_fast32_t; 64 | typedef unsigned long long uint_fast64_t; 65 | 66 | /* 7.8.1.4 Integer types capable of holding object pointers */ 67 | 68 | typedef int intptr_t; 69 | typedef unsigned int uintptr_t; 70 | 71 | /* 7.8.1.5 Greatest-width integer types */ 72 | 73 | typedef long long intmax_t; 74 | typedef unsigned long long uintmax_t; 75 | 76 | /* 7.18.2 Limits of specified-width integer types */ 77 | 78 | #undef INT8_MIN 79 | #define INT8_MIN SCHAR_MIN 80 | #undef INT8_MAX 81 | #define INT8_MAX SCHAR_MAX 82 | #undef UINT8_MAX 83 | #define UINT8_MAX UCHAR_MAX 84 | 85 | #undef INT16_MIN 86 | #define INT16_MIN SHRT_MIN 87 | #undef INT16_MAX 88 | #define INT16_MAX SHRT_MAX 89 | #undef UINT16_MAX 90 | #define UINT16_MAX USHRT_MAX 91 | 92 | #undef INT32_MIN 93 | #define INT32_MIN INT_MIN 94 | #undef INT32_MAX 95 | #define INT32_MAX INT_MAX 96 | #undef UINT32_MAX 97 | #define UINT32_MAX UINT_MAX 98 | 99 | #undef INT64_MIN 100 | #define INT64_MIN LONG_LONG_MIN 101 | #undef INT64_MAX 102 | #define INT64_MAX LONG_LONG_MAX 103 | #undef UINT64_MAX 104 | #define UINT64_MAX ULONG_LONG_MAX 105 | 106 | #undef INT_LEAST8_MIN 107 | #define INT_LEAST8_MIN SCHAR_MIN 108 | #undef INT_LEAST8_MAX 109 | #define INT_LEAST8_MAX SCHAR_MAX 110 | #undef UINT_LEAST8_MAX 111 | #define UINT_LEAST8_MAX UCHAR_MAX 112 | 113 | #undef INT_LEAST16_MIN 114 | #define INT_LEAST16_MIN SHRT_MIN 115 | #undef INT_LEAST16_MAX 116 | #define INT_LEAST16_MAX SHRT_MAX 117 | #undef UINT_LEAST16_MAX 118 | #define UINT_LEAST16_MAX USHRT_MAX 119 | 120 | #undef INT_LEAST32_MIN 121 | #define INT_LEAST32_MIN INT_MIN 122 | #undef INT_LEAST32_MAX 123 | #define INT_LEAST32_MAX INT_MAX 124 | #undef UINT_LEAST32_MAX 125 | #define UINT_LEAST32_MAX UINT_MAX 126 | 127 | #undef INT_LEAST64_MIN 128 | #define INT_LEAST64_MIN LONG_LONG_MIN 129 | #undef INT_LEAST64_MAX 130 | #define INT_LEAST64_MAX LONG_LONG_MAX 131 | #undef UINT_LEAST64_MAX 132 | #define UINT_LEAST64_MAX ULONG_LONG_MAX 133 | 134 | #undef INT_FAST8_MIN 135 | #define INT_FAST8_MIN INT_MIN 136 | #undef INT_FAST8_MAX 137 | #define INT_FAST8_MAX INT_MAX 138 | #undef UINT_FAST8_MAX 139 | #define UINT_FAST8_MAX UINT_MAX 140 | 141 | #undef INT_FAST16_MIN 142 | #define INT_FAST16_MIN INT_MIN 143 | #undef INT_FAST16_MAX 144 | #define INT_FAST16_MAX INT_MAX 145 | #undef UINT_FAST16_MAX 146 | #define UINT_FAST16_MAX UINT_MAX 147 | 148 | #undef INT_FAST32_MIN 149 | #define INT_FAST32_MIN INT_MIN 150 | #undef INT_FAST32_MAX 151 | #define INT_FAST32_MAX INT_MAX 152 | #undef UINT_FAST32_MAX 153 | #define UINT_FAST32_MAX UINT_MAX 154 | 155 | #undef INT_FAST64_MIN 156 | #define INT_FAST64_MIN LONG_LONG_MIN 157 | #undef INT_FAST64_MAX 158 | #define INT_FAST64_MAX LONG_LONG_MAX 159 | #undef UINT_FAST64_MAX 160 | #define UINT_FAST64_MAX ULONG_LONG_MAX 161 | 162 | #undef INTPTR_MIN 163 | #define INTPTR_MIN INT_MIN 164 | #undef INTPTR_MAX 165 | #define INTPTR_MAX INT_MAX 166 | #undef UINTPTR_MAX 167 | #define UINTPTR_MAX UINT_MAX 168 | 169 | #undef INTMAX_MIN 170 | #define INTMAX_MIN LONG_LONG_MIN 171 | #undef INTMAX_MAX 172 | #define INTMAX_MAX LONG_LONG_MAX 173 | #undef UINTMAX_MAX 174 | #define UINTMAX_MAX ULONG_LONG_MAX 175 | 176 | /* 7.18.3 Limits of other integer types */ 177 | 178 | #undef PTRDIFF_MIN 179 | #define PTRDIFF_MIN INT_MIN 180 | #undef PTRDIFF_MAX 181 | #define PTRDIFF_MAX INT_MAX 182 | 183 | #undef SIZE_MAX 184 | #define SIZE_MAX UINT_MAX 185 | 186 | #undef WCHAR_MIN 187 | #define WCHAR_MIN INT_MIN 188 | #undef WCHAR_MAX 189 | #define WCHAR_MAX INT_MAX 190 | 191 | #endif /* _STDINT_H */ 192 | -------------------------------------------------------------------------------- /include/types.h: -------------------------------------------------------------------------------- 1 | #ifndef GUARD_RVL_TYPES_H 2 | #define GUARD_RVL_TYPES_H 3 | 4 | #include 5 | 6 | typedef uint8_t u8; 7 | typedef uint16_t u16; 8 | typedef uint32_t u32; 9 | typedef uint64_t u64; 10 | typedef int8_t s8; 11 | typedef int16_t s16; 12 | typedef int32_t s32; 13 | typedef int64_t s64; 14 | 15 | typedef volatile u8 vu8; 16 | typedef volatile u16 vu16; 17 | typedef volatile u32 vu32; 18 | typedef volatile u64 vu64; 19 | typedef volatile s8 vs8; 20 | typedef volatile s16 vs16; 21 | typedef volatile s32 vs32; 22 | typedef volatile s64 vs64; 23 | 24 | typedef float f32; 25 | typedef double f64; 26 | 27 | typedef u8 bool8; 28 | typedef u16 bool16; 29 | typedef u32 bool32; 30 | 31 | #endif // GUARD_RVL_TYPES_H 32 | -------------------------------------------------------------------------------- /ldscript_appl.txt: -------------------------------------------------------------------------------- 1 | OUTPUT_ARCH(powerpc) 2 | ENTRY(apl_entrypoint) 3 | Section0Size = init_data_end - init_text_start; 4 | Section1Size = (sdata2_end - init_start) + 0x100; 5 | init_text = ADDR(.header) + SIZEOF(.header); 6 | init_data = init_text + (init_text_end - init_text_start); 7 | loader = init_data + (init_data_end - init_data_start); 8 | 9 | /* loader.dol */ 10 | init_size = init_end - init_start; 11 | extab_size = extab_end - extab_start; 12 | extab_index_size = extab_index_end - extab_index_start; 13 | text_size = text_end - text_start; 14 | ctors_size = ctors_end - ctors_start; 15 | dtors_size = dtors_end - dtors_start; 16 | rodata_size = rodata_end - rodata_start; 17 | data_size = data_end - data_start; 18 | bss_size = bss_end - bss_start; 19 | sdata_size = sdata_end - sdata_start; 20 | sbss_size = sbss_end - sbss_start; 21 | sdata2_size = sdata2_end - sdata2_start; 22 | sbss2_size = sbss2_end - sbss2_start; 23 | init_offset = 0x100; 24 | text_offset = init_offset + init_size; 25 | extab_offset = text_offset + text_size; 26 | extab_index_offset = extab_offset + extab_size; 27 | ctors_offset = extab_index_offset + extab_index_size; 28 | dtors_offset = ctors_offset + ctors_size; 29 | rodata_offset = dtors_offset + dtors_size; 30 | data_offset = rodata_offset + rodata_size; 31 | sdata_offset = data_offset + data_size; 32 | sdata2_offset = sdata_offset + sdata_size; 33 | bssTotalSize = sbss2_end - bss_start; /* main.dol header */ 34 | 35 | SECTIONS { 36 | .globalsLow 0x80000000 (NOLOAD): 37 | ALIGN(4) { 38 | ../global/DolphinGlobals.o(.bss); 39 | } = 0 40 | .globalsHigh 0x80003000 (NOLOAD): 41 | ALIGN(4) { 42 | ../global/DolphinGlobals2.o(.bss); 43 | } = 0 44 | .header 0x0: 45 | ALIGN(4) { 46 | header.o(.data); 47 | } 48 | .text 0x81200000: 49 | AT(init_text) 50 | ALIGN(4) { 51 | init_text_start = .; 52 | memset.o(.text); 53 | . += 0xc; 54 | text.o(.text); 55 | init_text_end = .; 56 | } 57 | .data : 58 | AT(init_data) 59 | ALIGN(4) { 60 | init_data_start = .; 61 | data.o(.data); 62 | init_data_end = .; 63 | } 64 | .loader.header 0x0: 65 | AT(loader) 66 | ALIGN(4) { 67 | loader/header.o(.data); 68 | } 69 | .loader.init 0x81330000: 70 | AT(loader + init_offset) 71 | ALIGN(4) { 72 | init_start = .; 73 | loader/init.o(.text); 74 | init_end = .; 75 | } 76 | .loader.extab : 77 | AT(loader + extab_offset) 78 | ALIGN(4) { 79 | extab_start = .; 80 | loader/extab.o(.data); 81 | extab_end = .; 82 | } 83 | .loader.extab_index : 84 | AT(loader + extab_index_offset) 85 | ALIGN(4) { 86 | extab_index_start = .; 87 | loader/extabindex.o(.data); 88 | extab_index_end = .; 89 | } 90 | .loader.text : 91 | AT(loader + text_offset) 92 | ALIGN(4) { 93 | text_start = .; 94 | loader/text.o(.text); 95 | text_end = .; 96 | } 97 | .loader.ctors : 98 | AT(loader + ctors_offset) 99 | ALIGN(4) { 100 | ctors_start = .; 101 | loader/ctors.o(.data); 102 | ctors_end = .; 103 | } 104 | .loader.dtors : 105 | AT(loader + dtors_offset) 106 | ALIGN(4) { 107 | dtors_start = .; 108 | loader/dtors.o(.data); 109 | dtors_end = .; 110 | } 111 | .loader.rodata : 112 | AT(loader + rodata_offset) 113 | ALIGN(4) { 114 | rodata_start = .; 115 | loader/rodata.o(.data); 116 | rodata_end = .; 117 | } 118 | .loader.data : 119 | AT(loader + data_offset) 120 | ALIGN(4) { 121 | data_start = .; 122 | loader/data.o(.data); 123 | data_end = .; 124 | } 125 | .loader.sdata : 126 | AT(loader + sdata_offset) 127 | ALIGN(4) { 128 | sdata_start = .; 129 | loader/sdata.o(.data); 130 | sdata_end = .; 131 | } 132 | .loader.sdata2 : 133 | AT(loader + sdata2_offset) 134 | ALIGN(4) { 135 | sdata2_start = .; 136 | loader/sdata2.o(.data); 137 | sdata2_end = .; 138 | } 139 | .loader.bss (NOLOAD) : 140 | ALIGN(4) { 141 | bss_start = .; 142 | loader/bss.o(.bss); 143 | bss_end = .; 144 | } = 0 145 | .loader.sbss (NOLOAD) : 146 | ALIGN(4) { 147 | sbss_start = .; 148 | loader/sbss.o(.bss); 149 | sbss_end = .; 150 | } = 0 151 | .loader.sbss2 (NOLOAD) : 152 | ALIGN(4) { 153 | sbss2_start = .; 154 | loader/sbss2.o(.bss); 155 | sbss2_end = .; 156 | } = 0 157 | .bss (NOLOAD) : /* Does apploader.img really use a .bss portion? */ 158 | ALIGN(4) { 159 | } = 0 160 | /* Discard everything not specifically mentioned above. */ 161 | /DISCARD/ : { 162 | *(*); 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /ldscript_dol.txt: -------------------------------------------------------------------------------- 1 | OUTPUT_ARCH(powerpc) 2 | ENTRY(dol_entrypoint) 3 | init_size = init_end - init_start; 4 | extab_size = extab_end - extab_start; 5 | extab_index_size = extab_index_end - extab_index_start; 6 | text_size = text_end - text_start; 7 | ctors_size = ctors_end - ctors_start; 8 | dtors_size = dtors_end - dtors_start; 9 | rodata_size = rodata_end - rodata_start; 10 | data_size = data_end - data_start; 11 | bss_size = bss_end - bss_start; 12 | sdata_size = sdata_end - sdata_start; 13 | sbss_size = sbss_end - sbss_start; 14 | sdata2_size = sdata2_end - sdata2_start; 15 | sbss2_size = sbss2_end - sbss2_start; 16 | init_offset = ADDR(.header) + SIZEOF(.header); 17 | text_offset = init_offset + init_size; 18 | extab_offset = text_offset + text_size; 19 | extab_index_offset = extab_offset + extab_size; 20 | ctors_offset = extab_index_offset + extab_index_size; 21 | dtors_offset = ctors_offset + ctors_size; 22 | rodata_offset = dtors_offset + dtors_size; 23 | data_offset = rodata_offset + rodata_size; 24 | sdata_offset = data_offset + data_size; 25 | sdata2_offset = sdata_offset + sdata_size; 26 | bssTotalSize = sbss2_end - bss_start; /* main.dol header */ 27 | codehandler_size = codehandler_end - codehandler_start; 28 | gct_size = gct_end - gct_start; 29 | codehandler_offset = sdata2_offset + sdata2_size; 30 | gct_offset = codehandler_offset + codehandler_size; 31 | SECTIONS { 32 | .header : 33 | ALIGN(4) { 34 | dolheader.o(.data); 35 | } 36 | .globalsLow 0x80000000 (NOLOAD): 37 | ALIGN(4) { 38 | ../global/DolphinGlobals.o(.bss); 39 | } = 0 40 | /* Gecko */ 41 | .codehandler 0x80001800 : 42 | AT(codehandler_offset) 43 | ALIGN(4) { 44 | codehandler_start = .; 45 | ../global/gecko_codehandler.o(.text); 46 | codehandler_end = .; 47 | } 48 | /* TODO: Conditionally move to end of apploader */ 49 | .gctdata : 50 | AT(gct_offset) 51 | ALIGN(4) { 52 | gct_start = .; 53 | ../global/gct.o(.data); 54 | gct_end = .; 55 | } 56 | .globalsHigh 0x80003000 (NOLOAD): 57 | ALIGN(4) { 58 | ../global/DolphinGlobals2.o(.bss); 59 | } = 0 60 | .init 0x80004000 : 61 | AT(init_offset) 62 | ALIGN(4) { 63 | init_start = .; 64 | TRK_Exception.o(.text); 65 | memset.o(.text); 66 | CheckGCPad4.o(.text); 67 | crt.o(.text); 68 | init.o(.text); 69 | init.o(.data); 70 | init_end = .; 71 | } 72 | .extab : 73 | AT(extab_offset) 74 | ALIGN(4) { 75 | extab_start = .; 76 | extab.o(.data); 77 | extab_end = .; 78 | } 79 | .extab_index : 80 | AT(extab_index_offset) 81 | ALIGN(4) { 82 | extab_index_start = .; 83 | extabindex.o(.data); 84 | extab_index_end = .; 85 | } 86 | .text : 87 | AT(text_offset) 88 | ALIGN(4) { 89 | text_start = .; 90 | text.o(.text); 91 | . += 8; 92 | text_1a940.o(.text); 93 | . += 12; 94 | text_1ab10.o(.text); 95 | . += 12; 96 | text_1ab30.o(.text); 97 | . += 12; 98 | text_1ac20.o(.text); 99 | . += 12; 100 | text_1ad80.o(.text); 101 | . += 4; 102 | text_1ae60.o(.text); 103 | . += 4; 104 | text_1b310.o(.text); 105 | . += 12; 106 | text_1b750.o(.text); 107 | . += 4; 108 | text_1b7d0.o(.text); 109 | . += 12; 110 | text_1bb80.o(.text); 111 | . += 8; 112 | text_1bc60.o(.text); 113 | . += 4; 114 | text_1bdf0.o(.text); 115 | . += 4; 116 | text_1e9a0.o(.text); 117 | . += 8; 118 | text_1ea60.o(.text); 119 | . += 4; 120 | text_1eb10.o(.text); 121 | . += 12; 122 | text_1ec50.o(.text); 123 | . += 12; 124 | text_1ecf0.o(.text); 125 | . += 4; 126 | text_44980.o(.text); 127 | . += 8; 128 | text_44a60.o(.text); 129 | . += 4; 130 | text_44a90.o(.text); 131 | . += 12; 132 | text_44b30.o(.text); 133 | . += 8; 134 | text_44c10.o(.text); 135 | . += 8; 136 | text_44cf0.o(.text); 137 | . += 4; 138 | text_44d70.o(.text); 139 | . += 8; 140 | text_44de0.o(.text); 141 | . += 12; 142 | text_45180.o(.text); 143 | . += 12; 144 | text_b2a30.o(.text); 145 | . += 4; 146 | text_b2e30.o(.text); 147 | . += 12; 148 | text_b34c0.o(.text); 149 | . += 8; 150 | text_b34d0.o(.text); 151 | . += 12; 152 | text_end = .; 153 | } 154 | .ctors : 155 | AT(ctors_offset) 156 | ALIGN(4) { 157 | ctors_start = .; 158 | ctors.o(.data); 159 | ctors_end = .; 160 | } 161 | .dtors : 162 | AT(dtors_offset) 163 | ALIGN(4) { 164 | dtors_start = .; 165 | dtors.o(.data); 166 | dtors_end = .; 167 | } 168 | . += 0x20; 169 | .rodata : 170 | AT(rodata_offset) 171 | ALIGN(4) { 172 | rodata_start = .; 173 | rodata.o(.data); 174 | rodata_end = .; 175 | } 176 | .data : 177 | AT(data_offset) 178 | ALIGN(4) { 179 | data_start = .; 180 | data.o(.data); 181 | data_end = .; 182 | } 183 | .bss (NOLOAD) : 184 | ALIGN(4) { 185 | bss_start = .; 186 | bss.o(.bss); 187 | bss_end = .; 188 | } = 0 189 | .sdata (bss_end + 0x10) : 190 | AT(sdata_offset) 191 | ALIGN(4) { 192 | sdata_start = .; 193 | sdata.o(.data); 194 | sdata_end = .; 195 | } 196 | .sbss (NOLOAD) : 197 | ALIGN(4) { 198 | sbss_start = .; 199 | sbss.o(.bss); 200 | sbss_end = .; 201 | } = 0 202 | . += 0x14; 203 | .sdata2 : 204 | AT(sdata2_offset) 205 | ALIGN(4) { 206 | sdata2_start = .; 207 | sdata2.o(.data); 208 | sdata2_end = .; 209 | } 210 | .sbss2 (NOLOAD) : 211 | ALIGN(4) { 212 | sbss2_start = .; 213 | sbss2.o(.bss); 214 | sbss2_end = .; 215 | } = 0 216 | /* TODO: StaticR.rel relocation table */ 217 | /* Discard everything not specifically mentioned above. */ 218 | /DISCARD/ : { 219 | *(*); 220 | } 221 | } 222 | 223 | -------------------------------------------------------------------------------- /ldscript_dol_mkc.txt: -------------------------------------------------------------------------------- 1 | OUTPUT_ARCH(powerpc) 2 | ENTRY(dol_entrypoint) 3 | init_size = init_end - init_start; 4 | extab_size = extab_end - extab_start; 5 | extab_index_size = extab_index_end - extab_index_start; 6 | text_size = text_end - text_start; 7 | ctors_size = ctors_end - ctors_start; 8 | dtors_size = dtors_end - dtors_start; 9 | rodata_size = rodata_end - rodata_start; 10 | data_size = data_end - data_start; 11 | bss_size = bss_end - bss_start; 12 | sdata_size = sdata_end - sdata_start; 13 | sbss_size = sbss_end - sbss_start; 14 | sdata2_size = sdata2_end - sdata2_start; 15 | sbss2_size = sbss2_end - sbss2_start; 16 | init_offset = ADDR(.header) + SIZEOF(.header); 17 | text_offset = init_offset + init_size; 18 | extab_offset = text_offset + text_size; 19 | extab_index_offset = extab_offset + extab_size; 20 | ctors_offset = extab_index_offset + extab_index_size; 21 | dtors_offset = ctors_offset + ctors_size; 22 | rodata_offset = dtors_offset + dtors_size; 23 | data_offset = rodata_offset + rodata_size; 24 | sdata_offset = data_offset + data_size; 25 | sdata2_offset = sdata_offset + sdata_size; 26 | bssTotalSize = sbss2_end - bss_start; /* main.dol header */ 27 | SECTIONS { 28 | .header : 29 | ALIGN(4) { 30 | header.o(.data); 31 | } 32 | .globalsLow 0x80000000 (NOLOAD): 33 | ALIGN(4) { 34 | ../global/DolphinGlobals.o(.bss); 35 | } = 0 36 | .globalsHigh 0x80003000 (NOLOAD): 37 | ALIGN(4) { 38 | ../global/DolphinGlobals2.o(.bss); 39 | } = 0 40 | .init 0x80004000 : 41 | AT(init_offset) 42 | ALIGN(4) { 43 | init_start = .; 44 | init.o(.text); 45 | init_end = .; 46 | } 47 | .extab : 48 | AT(extab_offset) 49 | ALIGN(4) { 50 | extab_start = .; 51 | extab.o(.data); 52 | extab_end = .; 53 | } 54 | .extab_index : 55 | AT(extab_index_offset) 56 | ALIGN(4) { 57 | extab_index_start = .; 58 | extabindex.o(.data); 59 | extab_index_end = .; 60 | } 61 | .text : 62 | AT(text_offset) 63 | ALIGN(4) { 64 | text_start = .; 65 | text.o(.text); 66 | text_end = .; 67 | } 68 | .ctors : 69 | AT(ctors_offset) 70 | ALIGN(4) { 71 | ctors_start = .; 72 | ctors.o(.data); 73 | ctors_end = .; 74 | } 75 | .dtors : 76 | AT(dtors_offset) 77 | ALIGN(4) { 78 | dtors_start = .; 79 | dtors.o(.data); 80 | dtors_end = .; 81 | } 82 | . += 0x20; 83 | .rodata : 84 | AT(rodata_offset) 85 | ALIGN(4) { 86 | rodata_start = .; 87 | rodata.o(.data); 88 | rodata_end = .; 89 | } 90 | .data : 91 | AT(data_offset) 92 | ALIGN(4) { 93 | data_start = .; 94 | data.o(.data); 95 | data_end = .; 96 | } 97 | .bss (NOLOAD) : 98 | ALIGN(4) { 99 | bss_start = .; 100 | bss.o(.bss); 101 | bss_end = .; 102 | } = 0 103 | . += 0x18; 104 | .sdata : 105 | AT(sdata_offset) 106 | ALIGN(4) { 107 | sdata_start = .; 108 | sdata.o(.data); 109 | sdata_end = .; 110 | } 111 | .sbss (NOLOAD) : 112 | ALIGN(4) { 113 | sbss_start = .; 114 | sbss.o(.bss); 115 | sbss_end = .; 116 | } = 0 117 | .sdata2 : 118 | AT(sdata2_offset) 119 | ALIGN(4) { 120 | sdata2_start = .; 121 | sdata2.o(.data); 122 | sdata2_end = .; 123 | } 124 | .sbss2 (NOLOAD) : 125 | ALIGN(4) { 126 | sbss2_start = .; 127 | sbss2.o(.bss); 128 | sbss2_end = .; 129 | } = 0 130 | /* Discard everything not specifically mentioned above. */ 131 | /DISCARD/ : { 132 | *(*); 133 | } 134 | } 135 | 136 | -------------------------------------------------------------------------------- /ldscript_dol_mkc_installer.txt: -------------------------------------------------------------------------------- 1 | OUTPUT_ARCH(powerpc) 2 | ENTRY(dol_entrypoint) 3 | init_size = init_end - init_start; 4 | extab_size = extab_end - extab_start; 5 | extab_index_size = extab_index_end - extab_index_start; 6 | text_size = text_end - text_start; 7 | ctors_size = ctors_end - ctors_start; 8 | dtors_size = dtors_end - dtors_start; 9 | rodata_size = rodata_end - rodata_start; 10 | data_size = data_end - data_start; 11 | bss_size = bss_end - bss_start; 12 | sdata_size = sdata_end - sdata_start; 13 | sbss_size = sbss_end - sbss_start; 14 | sdata2_size = sdata2_end - sdata2_start; 15 | sbss2_size = sbss2_end - sbss2_start; 16 | init_offset = ADDR(.header) + SIZEOF(.header); 17 | text_offset = init_offset + init_size; 18 | extab_offset = text_offset + text_size; 19 | extab_index_offset = extab_offset + extab_size; 20 | ctors_offset = extab_index_offset + extab_index_size; 21 | dtors_offset = ctors_offset + ctors_size; 22 | rodata_offset = dtors_offset + dtors_size; 23 | data_offset = rodata_offset + rodata_size; 24 | sdata_offset = data_offset + data_size; 25 | sdata2_offset = sdata_offset + sdata_size; 26 | bssTotalSize = sbss2_end - bss_start; /* main.dol header */ 27 | SECTIONS { 28 | .header : 29 | ALIGN(4) { 30 | header.o(.data); 31 | } 32 | .globalsLow 0x80000000 (NOLOAD): 33 | ALIGN(4) { 34 | ../global/DolphinGlobals.o(.bss); 35 | } = 0 36 | .globalsHigh 0x80003000 (NOLOAD): 37 | ALIGN(4) { 38 | ../global/DolphinGlobals2.o(.bss); 39 | } = 0 40 | .init 0x80004000 : 41 | AT(init_offset) 42 | ALIGN(4) { 43 | init_start = .; 44 | init.o(.text); 45 | init_end = .; 46 | } 47 | .extab : 48 | AT(extab_offset) 49 | ALIGN(4) { 50 | extab_start = .; 51 | extab.o(.data); 52 | extab_end = .; 53 | } 54 | .extab_index : 55 | AT(extab_index_offset) 56 | ALIGN(4) { 57 | extab_index_start = .; 58 | extabindex.o(.data); 59 | extab_index_end = .; 60 | } 61 | .text : 62 | AT(text_offset) 63 | ALIGN(4) { 64 | text_start = .; 65 | text.o(.text); 66 | text_end = .; 67 | } 68 | .ctors : 69 | AT(ctors_offset) 70 | ALIGN(4) { 71 | ctors_start = .; 72 | ctors.o(.data); 73 | ctors_end = .; 74 | } 75 | .dtors : 76 | AT(dtors_offset) 77 | ALIGN(4) { 78 | dtors_start = .; 79 | dtors.o(.data); 80 | dtors_end = .; 81 | } 82 | .rodata : 83 | AT(rodata_offset) 84 | ALIGN(4) { 85 | rodata_start = .; 86 | rodata.o(.data); 87 | rodata_end = .; 88 | } 89 | .data : 90 | AT(data_offset) 91 | ALIGN(4) { 92 | data_start = .; 93 | data.o(.data); 94 | data_end = .; 95 | } 96 | .bss (NOLOAD) : 97 | ALIGN(4) { 98 | bss_start = .; 99 | bss.o(.bss); 100 | bss_end = .; 101 | } = 0 102 | . += 0xc; 103 | .sdata : 104 | AT(sdata_offset) 105 | ALIGN(4) { 106 | sdata_start = .; 107 | sdata.o(.data); 108 | sdata_end = .; 109 | } 110 | .sbss (NOLOAD) : 111 | ALIGN(4) { 112 | sbss_start = .; 113 | sbss.o(.bss); 114 | sbss_end = .; 115 | } = 0 116 | . += 0x14; 117 | .sdata2 : 118 | AT(sdata2_offset) 119 | ALIGN(4) { 120 | sdata2_start = .; 121 | sdata2.o(.data); 122 | sdata2_end = .; 123 | } 124 | .sbss2 (NOLOAD) : 125 | ALIGN(4) { 126 | sbss2_start = .; 127 | sbss2.o(.bss); 128 | sbss2_end = .; 129 | } = 0 130 | /* Discard everything not specifically mentioned above. */ 131 | /DISCARD/ : { 132 | *(*); 133 | } 134 | } 135 | 136 | -------------------------------------------------------------------------------- /ldscript_dol_upd.txt: -------------------------------------------------------------------------------- 1 | OUTPUT_ARCH(powerpc) 2 | ENTRY(dol_entrypoint) 3 | text_size = text_end - text_start; 4 | data_size = data_end - data_start; 5 | bss_size = bss_end - bss_start; 6 | text_offset = ADDR(.header) + SIZEOF(.header); 7 | data_offset = text_offset + text_size; 8 | SECTIONS { 9 | .header : 10 | ALIGN(4) { 11 | dolheader.o(.data); 12 | } 13 | .text 0x80004000 : 14 | AT(text_offset) 15 | ALIGN(4) { 16 | text_start = .; 17 | text.o(.text); 18 | text_end = .; 19 | } 20 | .bss (text_end + 0x20) (NOLOAD) : 21 | ALIGN(4) { 22 | bss_start = .; 23 | . += 4; 24 | bss_end = .; 25 | } = 0 26 | .data (text_end + 0x40) : 27 | AT(data_offset) 28 | ALIGN(4) { 29 | data_start = .; 30 | data.o(.data); 31 | data_end = .; 32 | } 33 | /* Discard everything not specifically mentioned above. */ 34 | /DISCARD/ : { 35 | *(*); 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /ldscript_mkc_nandloader.txt: -------------------------------------------------------------------------------- 1 | OUTPUT_ARCH(powerpc) 2 | ENTRY(dol_entrypoint) 3 | init_size = init_end - init_start; 4 | loader_size = loader_end - loader_start; 5 | bss_size = 0x10000; /* bss_end - bss_start; */ 6 | init_offset = 0x100; 7 | loader_offset = init_offset + init_size; 8 | 9 | SECTIONS { 10 | .header 0x0 : 11 | ALIGN(4) { 12 | header.o(.data); 13 | } 14 | .globalsLow 0x80000000 (NOLOAD) : 15 | ALIGN(4) { 16 | ../global/DolphinGlobals.o(.bss); 17 | } = 0 18 | .globalsHigh 0x80003000 (NOLOAD) : 19 | ALIGN(4) { 20 | ../global/DolphinGlobals2.o(.bss); 21 | } = 0 22 | .stub 0x80003400 : 23 | AT(init_offset) 24 | ALIGN(4) { 25 | init_start = .; 26 | loader_stub.o(.text); 27 | init_end = .; 28 | } 29 | .init 0x81330000 : 30 | AT(loader_offset) 31 | ALIGN(4) { 32 | loader_start = .; 33 | init.o(.text); 34 | } 35 | .extab : 36 | ALIGN(4) { 37 | extab.o(.data); 38 | } 39 | .extab_index : 40 | ALIGN(4) { 41 | extabindex.o(.data);; 42 | } 43 | .text : 44 | ALIGN(4) { 45 | text.o(.text); 46 | } 47 | .ctors : 48 | ALIGN(4) { 49 | ctors.o(.data); 50 | } 51 | .dtors : 52 | ALIGN(4) { 53 | dtors.o(.data); 54 | } 55 | .data : 56 | ALIGN(4) { 57 | data.o(.data); 58 | . += 0xc280; 59 | loader_end = .; 60 | /* extra padding at the end which for some reason isn't tracked in the dol's header */ 61 | . += 0x500; 62 | } 63 | /* The header specifies .bss to be at 0x81340000, but this address is in the middle of .text, so here's a hacky way to get the header to match. */ 64 | bss_start = 0x81340000; 65 | /* 66 | .bss 0x81340000 (NOLOAD) : 67 | ALIGN(4) { 68 | bss_start = .; 69 | bss.o(.bss); 70 | bss_end = .; 71 | } = 0 72 | */ 73 | /* Discard everything not specifically mentioned above. */ 74 | /DISCARD/ : { 75 | *(*); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /ldscript_rel.txt: -------------------------------------------------------------------------------- 1 | OUTPUT_ARCH(powerpc) 2 | text_size = text_end - text_start; 3 | ctors_size = ctors_end - ctors_start; 4 | dtors_size = dtors_end - dtors_start; 5 | rodata_size = rodata_end - rodata_start; 6 | data_size = data_end - data_start; 7 | ImpTableSize = ImpTableEnd - ImpTable; 8 | SECTIONS { 9 | .header : 10 | ALIGN(4) { 11 | RelHeader.o(.data); 12 | } 13 | .text : 14 | ALIGN(4) { 15 | text_start = .; 16 | text.o(.text); 17 | text_end = .; 18 | } 19 | .ctors : 20 | ALIGN(4) { 21 | ctors_start = .; 22 | ctors.o(.data); 23 | ctors_end = .; 24 | } 25 | .dtors : 26 | ALIGN(4) { 27 | dtors_start = .; 28 | dtors.o(.data); 29 | dtors_end = .; 30 | } 31 | .rodata : 32 | ALIGN(4) { 33 | rodata_start = .; 34 | rodata.o(.data); 35 | rodata_end = .; 36 | } 37 | .data : 38 | ALIGN(4) { 39 | data_start = .; 40 | data.o(.data); 41 | data_end = .; 42 | } 43 | .imp : 44 | ALIGN(4) { 45 | ImpTable = .; 46 | StaticImp.o(.data); 47 | ImpTableEnd = .; 48 | } 49 | .reloc : 50 | ALIGN(4) { 51 | RelocTable.o(.data); 52 | RelocTableMainDol.o(.data); 53 | } 54 | .bss (NOLOAD) : 55 | ALIGN(4) { 56 | . += 0x78b0; 57 | } = 0 58 | /* Discard everything not specifically mentioned above. */ 59 | /DISCARD/ : { 60 | *(*); 61 | } 62 | } 63 | 64 | -------------------------------------------------------------------------------- /macros.inc: -------------------------------------------------------------------------------- 1 | # I have absolutely no idea why devkitPPC powerpc-none-eabi-as doesn't like these particular instructions. 2 | .macro psq_st reg, val, reg2, unk1, unk2 3 | .4byte (60 << 26) | ((\reg & 0x1f) << 21) | ((\reg2 & 0x1f) << 16) | ((\unk1 & 0x1) << 15) | ((\unk2 & 0x7) << 12) | (\val & 0xfff) 4 | .endm 5 | 6 | .macro psq_l reg, val, reg2, unk1, unk2 7 | .4byte (56 << 26) | ((\reg & 0x1f) << 21) | ((\reg2 & 0x1f) << 16) | ((\unk1 & 0x1) << 15) | ((\unk2 & 0x7) << 12) | (\val & 0xfff) 8 | .endm 9 | -------------------------------------------------------------------------------- /maindol-mkc-installer/bss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0xa1614 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/ctors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc-installer.dol", 0xda780, 0x80 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/data.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc-installer.dol", 0xde1a0, 0x785e0 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/dtors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc-installer.dol", 0xda800, 0x20 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/extab.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc-installer.dol", 0xda420, 0x160 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/extabindex.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc-installer.dol", 0xda580, 0x200 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/header.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global DolHeader 3 | DolHeader: 4 | .4byte init_offset 5 | .4byte text_offset 6 | .space 20 7 | .4byte extab_offset 8 | .4byte extab_index_offset 9 | .4byte ctors_offset 10 | .4byte dtors_offset 11 | .4byte rodata_offset 12 | .4byte data_offset 13 | .4byte sdata_offset 14 | .4byte sdata2_offset 15 | .space 12 16 | .4byte init_start 17 | .4byte text_start 18 | .space 20 19 | .4byte extab_start 20 | .4byte extab_index_start 21 | .4byte ctors_start 22 | .4byte dtors_start 23 | .4byte rodata_start 24 | .4byte data_start 25 | .4byte sdata_start 26 | .4byte sdata2_start 27 | .space 12 28 | .4byte init_size 29 | .4byte text_size 30 | .space 20 31 | .4byte extab_size 32 | .4byte extab_index_size 33 | .4byte ctors_size 34 | .4byte dtors_size 35 | .4byte rodata_size 36 | .4byte data_size 37 | .4byte sdata_size 38 | .4byte sdata2_size 39 | .space 12 40 | .4byte bss_start 41 | .4byte bssTotalSize 42 | .4byte dol_entrypoint 43 | .space 28 44 | 45 | -------------------------------------------------------------------------------- /maindol-mkc-installer/init.s: -------------------------------------------------------------------------------- 1 | .text 2 | .incbin "basemain-mkc-installer.dol", 0x100, 0x3c 3 | .global dol_entrypoint 4 | dol_entrypoint: 5 | .incbin "basemain-mkc-installer.dol", 0x13c, 0x24a4 6 | -------------------------------------------------------------------------------- /maindol-mkc-installer/rodata.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc-installer.dol", 0xda820, 0x3980 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/sbss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x8cc 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/sbss2.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x28 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/sdata.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc-installer.dol", 0x156780, 0x640 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/sdata2.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc-installer.dol", 0x156dc0, 0xc00 3 | -------------------------------------------------------------------------------- /maindol-mkc-installer/text.s: -------------------------------------------------------------------------------- 1 | .text 2 | .incbin "basemain-mkc-installer.dol", 0x25e0, 0xd7e40 3 | 4 | -------------------------------------------------------------------------------- /maindol-mkc/bss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0xe6148 3 | -------------------------------------------------------------------------------- /maindol-mkc/ctors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc.dol", 0x3125a0, 0x1e0 3 | -------------------------------------------------------------------------------- /maindol-mkc/data.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc.dol", 0x32b180, 0x5b5e0 3 | -------------------------------------------------------------------------------- /maindol-mkc/dtors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc.dol", 0x312780, 0x20 3 | -------------------------------------------------------------------------------- /maindol-mkc/extab.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc.dol", 0x311840, 0x560 3 | -------------------------------------------------------------------------------- /maindol-mkc/extabindex.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc.dol", 0x311da0, 0x800 3 | -------------------------------------------------------------------------------- /maindol-mkc/header.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global DolHeader 3 | DolHeader: 4 | .4byte init_offset 5 | .4byte text_offset 6 | .space 20 7 | .4byte extab_offset 8 | .4byte extab_index_offset 9 | .4byte ctors_offset 10 | .4byte dtors_offset 11 | .4byte rodata_offset 12 | .4byte data_offset 13 | .4byte sdata_offset 14 | .4byte sdata2_offset 15 | .space 12 16 | .4byte init_start 17 | .4byte text_start 18 | .space 20 19 | .4byte extab_start 20 | .4byte extab_index_start 21 | .4byte ctors_start 22 | .4byte dtors_start 23 | .4byte rodata_start 24 | .4byte data_start 25 | .4byte sdata_start 26 | .4byte sdata2_start 27 | .space 12 28 | .4byte init_size 29 | .4byte text_size 30 | .space 20 31 | .4byte extab_size 32 | .4byte extab_index_size 33 | .4byte ctors_size 34 | .4byte dtors_size 35 | .4byte rodata_size 36 | .4byte data_size 37 | .4byte sdata_size 38 | .4byte sdata2_size 39 | .space 12 40 | .4byte bss_start 41 | .4byte bssTotalSize 42 | .4byte dol_entrypoint 43 | .space 28 44 | 45 | -------------------------------------------------------------------------------- /maindol-mkc/init.s: -------------------------------------------------------------------------------- 1 | .text 2 | .incbin "basemain-mkc.dol", 0x100, 0x3c 3 | .global dol_entrypoint 4 | dol_entrypoint: 5 | .incbin "basemain-mkc.dol", 0x13c, 0x2424 6 | -------------------------------------------------------------------------------- /maindol-mkc/rodata.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc.dol", 0x3127a0, 0x189e0 3 | -------------------------------------------------------------------------------- /maindol-mkc/sbss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x15e0 3 | -------------------------------------------------------------------------------- /maindol-mkc/sbss2.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x48 3 | -------------------------------------------------------------------------------- /maindol-mkc/sdata.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc.dol", 0x386760, 0x16e0 3 | -------------------------------------------------------------------------------- /maindol-mkc/sdata2.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain-mkc.dol", 0x387e40, 0x3600 3 | -------------------------------------------------------------------------------- /maindol-mkc/text.s: -------------------------------------------------------------------------------- 1 | .text 2 | .incbin "basemain-mkc.dol", 0x2560, 0x30f2e0 3 | 4 | -------------------------------------------------------------------------------- /maindol-update/data.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 1 3 | .space 28 4 | -------------------------------------------------------------------------------- /maindol-update/dolheader.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global DolHeader 3 | DolHeader: 4 | .4byte text_offset 5 | .space 24 6 | .4byte data_offset 7 | .space 40 8 | .4byte text_start 9 | .space 24 10 | .4byte data_start 11 | .space 40 12 | .4byte text_size 13 | .space 24 14 | .4byte data_size 15 | .space 40 16 | .4byte bss_start 17 | .4byte bss_size 18 | .4byte dol_entrypoint 19 | .space 28 20 | 21 | -------------------------------------------------------------------------------- /maindol-update/text.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global dol_entrypoint 3 | dol_entrypoint: 4 | li %r0, 0 5 | stw %r0, -0x8000(%r13) 6 | blr 7 | .space 20 8 | -------------------------------------------------------------------------------- /maindol/CheckGCPad4.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global CheckGCPort4State 3 | CheckGCPort4State: 4 | lis %r3, GCNPort4DebugState@h 5 | lhz %r0, GCNPort4DebugState@l(%r3) 6 | andi. %r0, %r0, 0xeef 7 | cmpwi %r0, 0xeef 8 | bnelr 9 | li %r3, 0 10 | li %r4, 0 11 | li %r5, 0 12 | b t1_1a1720 13 | blr 14 | -------------------------------------------------------------------------------- /maindol/RMCE01.gct: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aplumafreak500/DisMKW/7c7c5e90b9bce70a48f9c6c67a0242829e93dfcb/maindol/RMCE01.gct -------------------------------------------------------------------------------- /maindol/TRK_Exception.s: -------------------------------------------------------------------------------- 1 | .text 2 | .asciz "Metrowerks Target Resident Kernel for PowerPC" 3 | .space 18 4 | .global mod0_mod_start 5 | mod0_mod_start: 6 | .ifdef CTGP_CODE 7 | stwu %r1, -256(%r1) 8 | stmw %r0, 8(%r1) 9 | mflr %r0 10 | stw %r0, 260(%r1) 11 | lwz %r12, 76(%r3) 12 | add %r12, %r3, %r12 13 | mtlr %r12 14 | blrl 15 | lis %r0, 0x4800 16 | ori %r0, %r0,0x0008 17 | lis %r3, mod_mod0_entry_addr@h 18 | ori %r3, %r3, mod_mod0_entry_addr@l 19 | stw %r0, 0(%r3) 20 | li %r4, 0 21 | icbi %r3, %r4 22 | lwz %r0, 260(%r1) 23 | mtlr %r0 24 | lmw %r2, 16(%r1) 25 | lwz %r0, 8(%r1) 26 | addi %r1, %r1, 256 27 | b _44d54 28 | .space 108 29 | .else 30 | .space 192 31 | .endif 32 | 33 | .global TRK_Exceptions 34 | TRK_Exceptions: 35 | b t1_14840 36 | 37 | .space 252 38 | 39 | mtspr 0x111, %r2 40 | mfspr %r2, 0x1a 41 | icbi 0, %r2 42 | mfdar %r2 43 | dcbi 0, %r2 44 | mfspr %r2, 0x111 45 | mtspr 0x111, %r2 46 | mtspr 0x112, %r3 47 | mtspr 0x113, %r4 48 | mfspr %r2, 0x1a 49 | mfspr %r4, 0x1b 50 | mfmsr %r3 51 | ori %r3, %r3, 0x30 52 | mtspr 0x1b, %r3 53 | lis %r3, t1_17fcc@h 54 | ori %r3, %r3, t1_17fcc@l 55 | mtspr 0x1a, %r3 56 | li %r3, 0x200 57 | rfi 58 | 59 | .space 180 60 | 61 | mtspr 0x111, %r2 62 | mtspr 0x112, %r3 63 | mtspr 0x113, %r4 64 | mfspr %r2, 0x1a 65 | mfspr %r4, 0x1b 66 | mfmsr %r3 67 | ori %r3, %r3, 0x30 68 | mtspr 0x1b, %r3 69 | lis %r3, t1_17fcc@h 70 | ori %r3, %r3, t1_17fcc@l 71 | mtspr 0x1a, %r3 72 | li %r3, 0x300 73 | rfi 74 | 75 | .space 204 76 | 77 | mtspr 0x111, %r2 78 | mtspr 0x112, %r3 79 | mtspr 0x113, %r4 80 | mfspr %r2, 0x1a 81 | mfspr %r4, 0x1b 82 | mfmsr %r3 83 | ori %r3, %r3, 0x30 84 | mtspr 0x1b, %r3 85 | lis %r3, t1_17fcc@h 86 | ori %r3, %r3, t1_17fcc@l 87 | mtspr 0x1a, %r3 88 | li %r3, 0x400 89 | rfi 90 | 91 | .space 204 92 | 93 | mtspr 0x111, %r2 94 | mtspr 0x112, %r3 95 | mtspr 0x113, %r4 96 | mfspr %r2, 0x1a 97 | mfspr %r4, 0x1b 98 | mfmsr %r3 99 | ori %r3, %r3, 0x30 100 | mtspr 0x1b, %r3 101 | lis %r3, t1_17fcc@h 102 | ori %r3, %r3, t1_17fcc@l 103 | mtspr 0x1a, %r3 104 | li %r3, 0x500 105 | rfi 106 | 107 | .space 204 108 | 109 | mtspr 0x111, %r2 110 | mtspr 0x112, %r3 111 | mtspr 0x113, %r4 112 | mfspr %r2, 0x1a 113 | mfspr %r4, 0x1b 114 | mfmsr %r3 115 | ori %r3, %r3, 0x30 116 | mtspr 0x1b, %r3 117 | lis %r3, t1_17fcc@h 118 | ori %r3, %r3, t1_17fcc@l 119 | mtspr 0x1a, %r3 120 | li %r3, 0x600 121 | rfi 122 | 123 | .space 204 124 | 125 | mtspr 0x111, %r2 126 | mtspr 0x112, %r3 127 | mtspr 0x113, %r4 128 | mfspr %r2, 0x1a 129 | mfspr %r4, 0x1b 130 | mfmsr %r3 131 | ori %r3, %r3, 0x30 132 | mtspr 0x1b, %r3 133 | lis %r3, t1_17fcc@h 134 | ori %r3, %r3, t1_17fcc@l 135 | mtspr 0x1a, %r3 136 | li %r3, 0x700 137 | rfi 138 | 139 | .space 204 140 | 141 | mtspr 0x111, %r2 142 | mtspr 0x112, %r3 143 | mtspr 0x113, %r4 144 | mfspr %r2, 0x1a 145 | mfspr %r4, 0x1b 146 | mfmsr %r3 147 | ori %r3, %r3, 0x30 148 | mtspr 0x1b, %r3 149 | lis %r3, t1_17fcc@h 150 | ori %r3, %r3, t1_17fcc@l 151 | mtspr 0x1a, %r3 152 | li %r3, 0x800 153 | rfi 154 | 155 | .space 204 156 | 157 | mtspr 0x111, %r2 158 | mtspr 0x112, %r3 159 | mtspr 0x113, %r4 160 | mfspr %r2, 0x1a 161 | mfspr %r4, 0x1b 162 | mfmsr %r3 163 | ori %r3, %r3, 0x30 164 | mtspr 0x1b, %r3 165 | lis %r3, t1_17fcc@h 166 | ori %r3, %r3, t1_17fcc@l 167 | mtspr 0x1a, %r3 168 | li %r3, 0x900 169 | rfi 170 | 171 | .space 716 172 | 173 | mtspr 0x111, %r2 174 | mtspr 0x112, %r3 175 | mtspr 0x113, %r4 176 | mfspr %r2, 0x1a 177 | mfspr %r4, 0x1b 178 | mfmsr %r3 179 | ori %r3, %r3, 0x30 180 | mtspr 0x1b, %r3 181 | lis %r3, t1_17fcc@h 182 | ori %r3, %r3, t1_17fcc@l 183 | mtspr 0x1a, %r3 184 | li %r3, 0xc00 185 | rfi 186 | 187 | .space 204 188 | 189 | mtspr 0x111, %r2 190 | mtspr 0x112, %r3 191 | mtspr 0x113, %r4 192 | mfspr %r2, 0x1a 193 | mfspr %r4, 0x1b 194 | mfmsr %r3 195 | ori %r3, %r3, 0x30 196 | mtspr 0x1b, %r3 197 | lis %r3, t1_17fcc@h 198 | ori %r3, %r3, t1_17fcc@l 199 | mtspr 0x1a, %r3 200 | li %r3, 0xd00 201 | rfi 202 | 203 | .space 204 204 | 205 | mtspr 0x111, %r2 206 | mtspr 0x112, %r3 207 | mtspr 0x113, %r4 208 | mfspr %r2, 0x1a 209 | mfspr %r4, 0x1b 210 | mfmsr %r3 211 | ori %r3, %r3, 0x30 212 | mtspr 0x1b, %r3 213 | lis %r3, t1_17fcc@h 214 | ori %r3, %r3, t1_17fcc@l 215 | mtspr 0x1a, %r3 216 | li %r3, 0xe00 217 | rfi 218 | 219 | .space 204 220 | 221 | b _f54 222 | 223 | .space 28 224 | 225 | mtspr 0x111, %r2 226 | mtspr 0x112, %r3 227 | mtspr 0x113, %r4 228 | mfspr %r2, 0x1a 229 | mfspr %r4, 0x1b 230 | mfmsr %r3 231 | ori %r3, %r3, 0x30 232 | mtspr 0x1b, %r3 233 | lis %r3, t1_17fcc@h 234 | ori %r3, %r3, t1_17fcc@l 235 | mtspr 0x1a, %r3 236 | li %r3, 0xf20 237 | rfi 238 | _f54: 239 | mtspr 0x111, %r2 240 | mtspr 0x112, %r3 241 | mtspr 0x113, %r4 242 | mfspr %r2, 0x1a 243 | mfspr %r4, 0x1b 244 | mfmsr %r3 245 | ori %r3, %r3, 0x30 246 | mtspr 0x1b, %r3 247 | lis %r3, t1_17fcc@h 248 | ori %r3, %r3, t1_17fcc@l 249 | mtspr 0x1a, %r3 250 | li %r3, 0xf00 251 | rfi 252 | 253 | .space 120 254 | 255 | mtspr 0x111, %r2 256 | mfcr %r2 257 | mtspr 0x112, %r2 258 | mfmsr %r2 259 | andis. %r2, %r2, 2 260 | beq _1030 261 | mfmsr %r2 262 | xoris %r2, %r2, 2 263 | sync 0 264 | mtmsr %r2 265 | sync 0 266 | mtspr 0x111, %r2 267 | _1030: 268 | mfspr %r2, 0x112 269 | mtcrf 0xff, %r2 270 | mfspr %r2, 0x111 271 | mtspr 0x111, %r2 272 | mtspr 0x112, %r3 273 | mtspr 0x113, %r4 274 | mfspr %r2, 0x1a 275 | mfspr %r4, 0x1b 276 | mfmsr %r3 277 | ori %r3, %r3, 0x30 278 | mtspr 0x1b, %r3 279 | lis %r3, t1_17fcc@h 280 | ori %r3, %r3, t1_17fcc@l 281 | mtspr 0x1a, %r3 282 | li %r3, 0x1000 283 | rfi 284 | 285 | .space 144 286 | 287 | mtspr 0x111, %r2 288 | mfcr %r2 289 | mtspr 0x112, %r2 290 | mfmsr %r2 291 | andis. %r2, %r2, 2 292 | beq _1130 293 | mfmsr %r2 294 | xoris %r2, %r2, 2 295 | sync 0 296 | mtmsr %r2 297 | sync 0 298 | mtspr 0x111, %r2 299 | _1130: 300 | mfspr %r2, 0x112 301 | mtcrf 0xff, %r2 302 | mfspr %r2, 0x111 303 | mtspr 0x111, %r2 304 | mtspr 0x112, %r3 305 | mtspr 0x113, %r4 306 | mfspr %r2, 0x1a 307 | mfspr %r4, 0x1b 308 | mfmsr %r3 309 | ori %r3, %r3, 0x30 310 | mtspr 0x1b, %r3 311 | lis %r3, t1_17fcc@h 312 | ori %r3, %r3, t1_17fcc@l 313 | mtspr 0x1a, %r3 314 | li %r3, 0x1100 315 | rfi 316 | 317 | .space 144 318 | 319 | mtspr 0x111, %r2 320 | mfcr %r2 321 | mtspr 0x112, %r2 322 | mfmsr %r2 323 | andis. %r2, %r2, 2 324 | beq _1230 325 | mfmsr %r2 326 | xoris %r2, %r2, 2 327 | sync 0 328 | mtmsr %r2 329 | sync 0 330 | mtspr 0x111, %r2 331 | _1230: 332 | mfspr %r2, 0x112 333 | mtcrf 0xff, %r2 334 | mfspr %r2, 0x111 335 | mtspr 0x111, %r2 336 | mtspr 0x112, %r3 337 | mtspr 0x113, %r4 338 | mfspr %r2, 0x1a 339 | mfspr %r4, 0x1b 340 | mfmsr %r3 341 | ori %r3, %r3, 0x30 342 | mtspr 0x1b, %r3 343 | lis %r3, t1_17fcc@h 344 | ori %r3, %r3, t1_17fcc@l 345 | mtspr 0x1a, %r3 346 | li %r3, 0x1200 347 | rfi 348 | 349 | .space 144 350 | 351 | mtspr 0x111, %r2 352 | mtspr 0x112, %r3 353 | mtspr 0x113, %r4 354 | mfspr %r2, 0x1a 355 | mfspr %r4, 0x1b 356 | mfmsr %r3 357 | ori %r3, %r3, 0x30 358 | mtspr 0x1b, %r3 359 | lis %r3, t1_17fcc@h 360 | ori %r3, %r3, t1_17fcc@l 361 | mtspr 0x1a, %r3 362 | li %r3, 0x1300 363 | rfi 364 | 365 | .space 204 366 | 367 | mtspr 0x111, %r2 368 | mtspr 0x112, %r3 369 | mtspr 0x113, %r4 370 | mfspr %r2, 0x1a 371 | mfspr %r4, 0x1b 372 | mfmsr %r3 373 | ori %r3, %r3, 0x30 374 | mtspr 0x1b, %r3 375 | lis %r3, t1_17fcc@h 376 | ori %r3, %r3, t1_17fcc@l 377 | mtspr 0x1a, %r3 378 | li %r3, 0x1400 379 | rfi 380 | 381 | .space 460 382 | 383 | mtspr 0x111, %r2 384 | mtspr 0x112, %r3 385 | mtspr 0x113, %r4 386 | mfspr %r2, 0x1a 387 | mfspr %r4, 0x1b 388 | mfmsr %r3 389 | ori %r3, %r3, 0x30 390 | mtspr 0x1b, %r3 391 | lis %r3, t1_17fcc@h 392 | ori %r3, %r3, t1_17fcc@l 393 | mtspr 0x1a, %r3 394 | li %r3, 0x1600 395 | rfi 396 | 397 | .space 204 398 | 399 | mtspr 0x111, %r2 400 | mtspr 0x112, %r3 401 | mtspr 0x113, %r4 402 | mfspr %r2, 0x1a 403 | mfspr %r4, 0x1b 404 | mfmsr %r3 405 | ori %r3, %r3, 0x30 406 | mtspr 0x1b, %r3 407 | lis %r3, t1_17fcc@h 408 | ori %r3, %r3, t1_17fcc@l 409 | mtspr 0x1a, %r3 410 | li %r3, 0x1700 411 | rfi 412 | 413 | .space 1228 414 | 415 | mtspr 0x111, %r2 416 | mtspr 0x112, %r3 417 | mtspr 0x113, %r4 418 | mfspr %r2, 0x1a 419 | mfspr %r4, 0x1b 420 | mfmsr %r3 421 | ori %r3, %r3, 0x30 422 | mtspr 0x1b, %r3 423 | lis %r3, t1_17fcc@h 424 | ori %r3, %r3, t1_17fcc@l 425 | mtspr 0x1a, %r3 426 | li %r3, 0x1c00 427 | rfi 428 | 429 | .space 204 430 | 431 | mtspr 0x111, %r2 432 | mtspr 0x112, %r3 433 | mtspr 0x113, %r4 434 | mfspr %r2, 0x1a 435 | mfspr %r4, 0x1b 436 | mfmsr %r3 437 | ori %r3, %r3, 0x30 438 | mtspr 0x1b, %r3 439 | lis %r3, t1_17fcc@h 440 | ori %r3, %r3, t1_17fcc@l 441 | mtspr 0x1a, %r3 442 | li %r3, 0x1d00 443 | rfi 444 | 445 | .space 204 446 | 447 | mtspr 0x111, %r2 448 | mtspr 0x112, %r3 449 | mtspr 0x113, %r4 450 | mfspr %r2, 0x1a 451 | mfspr %r4, 0x1b 452 | mfmsr %r3 453 | ori %r3, %r3, 0x30 454 | mtspr 0x1b, %r3 455 | lis %r3, t1_17fcc@h 456 | ori %r3, %r3, t1_17fcc@l 457 | mtspr 0x1a, %r3 458 | li %r3, 0x1e00 459 | rfi 460 | 461 | .space 204 462 | 463 | mtspr 0x111, %r2 464 | mtspr 0x112, %r3 465 | mtspr 0x113, %r4 466 | mfspr %r2, 0x1a 467 | mfspr %r4, 0x1b 468 | mfmsr %r3 469 | ori %r3, %r3, 0x30 470 | mtspr 0x1b, %r3 471 | lis %r3, t1_17fcc@h 472 | ori %r3, %r3, t1_17fcc@l 473 | mtspr 0x1a, %r3 474 | li %r3, 0x1f00 475 | rfi 476 | -------------------------------------------------------------------------------- /maindol/bss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0xe0b70 3 | -------------------------------------------------------------------------------- /maindol/crt.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_2090 3 | sub_2090: 4 | li %r0, 1 5 | stb %r0, -0x62b0(%r13) 6 | blr 7 | 8 | .global sub_209c 9 | sub_209c: 10 | lbz %r3, -0x62b0(%r13) 11 | blr 12 | 13 | .global dol_entrypoint 14 | dol_entrypoint: 15 | bl InitRegs 16 | bl InitHardware 17 | li %r0, -1 18 | stwu %r1, -8(%r1) 19 | stw %r0, 4(%r1) 20 | stw %r0, 0(%r1) 21 | bl InitData 22 | li %r0, 0 23 | lis %r6, DebugMask@h 24 | addi %r6, %r6, DebugMask@l 25 | stw %r0, 0(%r6) 26 | lis %r6, Bi2Offset@h 27 | addi %r6, %r6, Bi2Offset@l 28 | lwz %r6, 0(%r6) 29 | cmplwi %r6, 0 30 | beq _20ec 31 | lwz %r7, 0xc(%r6) 32 | b _210c 33 | _20ec: 34 | lis %r5, ArenaHigh@h 35 | addi %r5, %r5, ArenaHigh@l 36 | lwz %r5, 0(%r5) 37 | cmplwi %r5, 0 38 | beq _2148 39 | lis %r7, Unk30E8@h 40 | addi %r7, %r7, Unk30E8@l 41 | lwz %r7, 0(%r7) 42 | _210c: 43 | li %r5, 0 44 | cmplwi %r7, 2 45 | beq _2138 46 | cmplwi %r7, 3 47 | li %r5, 1 48 | beq _2138 49 | cmplwi %r7, 4 50 | bne _2148 51 | li %r5, 2 52 | bl sub_2090 53 | b _2148 54 | _2138: 55 | lis %r6, t1_2452c@h # InitMetroTRK 56 | addi %r6, %r6, t1_2452c@l 57 | mtlr %r6 58 | blrl 59 | _2148: 60 | lis %r6, Bi2Offset@h 61 | addi %r6, %r6, Bi2Offset@l 62 | lwz %r5, 0(%r6) 63 | cmplwi %r5, 0 64 | beq+ _21b8 65 | lwz %r6, 8(%r5) 66 | cmplwi %r6, 0 67 | beq+ _21b8 68 | add %r6, %r5, %r6 69 | lwz %r14, 0(%r6) 70 | cmplwi %r14, 0 71 | beq _21b8 72 | addi %r15, %r6, 4 73 | mtctr %r14 74 | _2180: 75 | addi %r6, %r6, 4 76 | lwz %r7, 0(%r6) 77 | add %r7, %r7, %r5 78 | stw %r7, 0(%r6) 79 | bdnz _2180 80 | lis %r5, ArenaHigh@h 81 | addi %r5, %r5, ArenaHigh@l 82 | rlwinm %r7, %r15, 0, 0, 0x1a 83 | stw %r7, 0(%r5) 84 | lis %r5, FSTOffset2@h 85 | addi %r5, %r5, FSTOffset2@l 86 | rlwinm %r7, %r15, 0, 0, 0x1a 87 | stw %r7, 0(%r5) 88 | b _21c0 89 | _21b8: 90 | li %r14, 0 91 | li %r15, 0 92 | _21c0: 93 | bl t1_155fb4 # DBInit 94 | bl t1_198908 # OSInit 95 | lis %r4, GCNPort4DebugState@h 96 | addi %r4, %r4, GCNPort4DebugState@l+2 97 | lhz %r3, 0(%r4) 98 | andi. %r5, %r3, 0x8000 99 | beq _21e8 100 | andi. %r3, %r3, 0x7fff 101 | cmplwi %r3, 1 102 | bne _21ec 103 | _21e8: 104 | bl CheckGCPort4State 105 | _21ec: 106 | bl sub_209c 107 | cmplwi %r3, 1 108 | bne _21fc 109 | bl t1_145c4 110 | _21fc: 111 | bl t1_1a71c4 112 | mr %r3, %r14 113 | mr %r4, %r15 114 | bl t1_4350 # main 115 | b t1_1a722c # exit 116 | -------------------------------------------------------------------------------- /maindol/ctors.s: -------------------------------------------------------------------------------- 1 | .data 2 | # some sort of table 3 | .4byte 0x80020684 # t1_193c4 4 | .4byte 0x8000998c # t1_26cc 5 | .4byte 0x80027a10 # t1_20750 6 | .4byte 0x80035890 # t1_2e5d0 7 | .4byte 0x800364e0 # t1_2f220 8 | .4byte 0x80038010 # t1_30d50 9 | .4byte 0x8003e180 10 | .4byte 0x80064820 11 | .4byte 0x80079860 12 | .4byte 0x8007b270 13 | .4byte 0x8007cb80 14 | .4byte 0x8007f190 15 | .4byte 0x8007f260 16 | .4byte 0x8008f8c0 17 | .4byte 0x8009ac00 18 | .4byte 0x8009db00 19 | .4byte 0x800a4440 20 | .4byte 0x800a8d30 21 | .4byte 0x800ad7b0 22 | .4byte 0x800afe40 23 | .4byte 0x800affc0 24 | .4byte 0x800b0600 25 | .4byte 0x800b09f0 26 | .4byte 0x800b16e0 27 | .4byte 0x800b18b0 28 | .4byte 0x800bba50 29 | .4byte 0x80180658 30 | .4byte 0x801868ac 31 | .4byte 0x80186de0 32 | .4byte 0x801884cc 33 | .4byte 0x8018a97c 34 | .4byte 0x8018f618 35 | .4byte 0x80212f98 36 | .4byte 0x80214510 37 | .4byte 0x802179a0 38 | .4byte 0x8021c23c 39 | .4byte 0x802242a0 40 | .4byte 0x80227fb0 41 | .4byte 0x802291b8 42 | .4byte 0x80230090 43 | .4byte 0x8023e37c 44 | .4byte 0x8023e3b8 45 | .4byte 0x80242d2c 46 | .space 20 47 | -------------------------------------------------------------------------------- /maindol/data.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global gUnknown_0 3 | gUnknown_0: 4 | .4byte 0x80244e40 5 | .4byte 0x80244e5c 6 | .4byte 0x80244e78 7 | .4byte 0x80244e94 8 | .4byte 0x80244eb0 9 | .4byte 0x80244ed0 10 | .4byte 0x80244eec 11 | .4byte 0 12 | .4byte 0x80244f08 13 | .4byte 0x80244f1c 14 | .4byte 0x80244f2c 15 | .4byte 0x80244f40 16 | .4byte 0 17 | .4byte 0 18 | .4byte sub_188 19 | .4byte 0x800079d0 20 | .4byte 0x80007bc8 21 | .4byte sub_218 22 | .4byte 0x80007f2c 23 | .4byte 0x80007f3c 24 | .4byte 0x80007f38 25 | .4byte 0x80007f34 26 | .4byte 0 27 | .4byte 0 28 | .4byte sub_130 29 | .4byte 0x80007f4c 30 | .4byte 0x80007f48 31 | .4byte 0x80007f44 32 | .4byte 0x80007f40 33 | .4byte 0x80007f3c 34 | .4byte 0x80007f38 35 | .4byte 0x80007f34 36 | 37 | .global ObjectNotValidStr 38 | ObjectNotValidStr: 39 | .asciz "%s::%s: Object not valid." 40 | .2byte 0 41 | 42 | .4byte 0 43 | 44 | .global G3DRestexACStr 45 | G3DRestexACStr: 46 | .asciz "g3d_restex_ac.h" 47 | 48 | .global ObjectNotValidStr2 49 | ObjectNotValidStr2: 50 | .asciz "%s::%s: Object not valid." 51 | .2byte 0 52 | 53 | .4byte 0 54 | 55 | .global G3DRestexACStr2 56 | G3DRestexACStr2: 57 | .asciz "g3d_restex_ac.h" 58 | 59 | .global NW4RFailedAssertion 60 | NW4RFailedAssertion: 61 | .asciz "NW4R:Failed assertion !((u32)p & 0x1f)\0" 62 | 63 | .global G3DResfileACStr 64 | G3DResfileACStr: 65 | .ascii "g3d_resfile_ac.h" 66 | 67 | .4byte 0 68 | .4byte 0 69 | 70 | .global UnkBRFNT_120 71 | UnkBRFNT_120: 72 | .incbin "maindol/unk_data_120.brfnt" 73 | 74 | # sub_218 accesses the middle of this BRFNT for some reason. 75 | # Maybe it's accessing the individual character images? I don't know. 76 | 77 | .global gUnknown_10000 78 | .set gUnknown_10000, UnkBRFNT_120 + 0xfee0 79 | 80 | .global gUnknown_10020 81 | .set gUnknown_10020, UnkBRFNT_120 + 0xff00 82 | 83 | .global gUnknown_10030 84 | .set gUnknown_10030, UnkBRFNT_120 + 0xff10 85 | 86 | .global gUnknown_10058 87 | .set gUnknown_10058, UnkBRFNT_120 + 0xff38 88 | 89 | .global gUnknown_10080 90 | .set gUnknown_10080, UnkBRFNT_120 + 0xff60 91 | 92 | .global gUnknown_100a0 93 | .set gUnknown_100a0, UnkBRFNT_120 + 0xff80 94 | 95 | .global gUnknown_100b0 96 | .set gUnknown_100b0, UnkBRFNT_120 + 0xff90 97 | 98 | .global gUnknown_100d0 99 | .set gUnknown_100d0, UnkBRFNT_120 + 0xffb0 100 | 101 | .global gUnknown_100e0 102 | .set gUnknown_100e0, UnkBRFNT_120 + 0xffc0 103 | 104 | .global gUnknown_10108 105 | .set gUnknown_10108, UnkBRFNT_120 + 0xffe8 106 | 107 | .global NW4RPointerErrorStr 108 | NW4RPointerErrorStr: 109 | .asciz "NW4R:Pointer Error\nstr(=%p) is not valid pointer." 110 | .2byte 0 111 | 112 | .global TextWriterBaseStr 113 | TextWriterBaseStr: 114 | .ascii "TextWriterBase.h" 115 | .4byte 0 116 | 117 | .global NW4RPointerErrorStr2 118 | NW4RPointerErrorStr2: 119 | .asciz "NW4R:Pointer Error\nthis(=%p) is not valid pointer.\0" 120 | 121 | .global TextWriterBaseStr2 122 | TextWriterBaseStr2: 123 | .ascii "TextWriterBase.h" 124 | .4byte 0 125 | 126 | .global NW4RPointerErrorStr3 127 | NW4RPointerErrorStr3: 128 | .asciz "NW4R:Pointer Error\nstr(=%p) is not valid pointer." 129 | .2byte 0 130 | 131 | .global TextWriterBaseStr3 132 | TextWriterBaseStr3: 133 | .ascii "TextWriterBase.h" 134 | .4byte 0 135 | 136 | .global NW4RPointerErrorStr4 137 | NW4RPointerErrorStr4: 138 | .asciz "NW4R:Pointer Error\nthis(=%p) is not valid pointer.\0" 139 | 140 | .global TextWriterBaseStr4 141 | TextWriterBaseStr4: 142 | .ascii "TextWriterBase.h" 143 | .4byte 0 144 | 145 | .global NW4RPointerErrorStr5 146 | NW4RPointerErrorStr5: 147 | .asciz "NW4R:Pointer Error\nstr(=%p) is not valid pointer." 148 | .2byte 0 149 | 150 | .global TextWriterBaseStr5 151 | TextWriterBaseStr5: 152 | .ascii "TextWriterBase.h" 153 | .4byte 0 154 | 155 | .global NW4RPointerErrorStr6 156 | NW4RPointerErrorStr6: 157 | .asciz "NW4R:Pointer Error\nthis(=%p) is not valid pointer.\0" 158 | 159 | .global TextWriterBaseStr7 160 | TextWriterBaseStr7: 161 | .ascii "TextWriterBase.h" 162 | .4byte 0 163 | 164 | .global NW4RPointerErrorStr7 165 | NW4RPointerErrorStr7: 166 | .ascii "NW4R:Pointer Error\nthis(=%p) is not valid pointer." 167 | .2byte 0 168 | 169 | .global TextWriterBaseStr8 170 | TextWriterBaseStr8: 171 | .ascii "TextWriterBase.h" 172 | .4byte 0 173 | 174 | .global NW4RPointerErrorStr8 175 | NW4RPointerErrorStr8: 176 | .ascii "NW4R:Pointer Error\nthis(=%p) is not valid pointer." 177 | .2byte 0 178 | 179 | .global TextWriterBaseStr9 180 | TextWriterBaseStr9: 181 | .ascii "TextWriterBase.h" 182 | .4byte 0 183 | 184 | .global NW4RPointerErrorStr9 185 | NW4RPointerErrorStr9: 186 | .ascii "NW4R:Pointer Error\n& font(=%p) is not valid pointer." 187 | .4byte 0 188 | 189 | .global CharWriterStr 190 | CharWriterStr: 191 | .ascii "CharWriter.h" 192 | .4byte 0 193 | 194 | .global NW4RPointerErrorStr10 195 | NW4RPointerErrorStr10: 196 | .asciz "NW4R:Pointer Error\nthis(=%p) is not valid pointer.\0" 197 | 198 | .global CharWriterStr2 199 | CharWriterStr2: 200 | .ascii "CharWriter.h" 201 | .4byte 0 202 | 203 | .global NW4RPointerErrorStr11 204 | NW4RPointerErrorStr11: 205 | .asciz "NW4R:Pointer Error\nthis(=%p) is not valid pointer.\0" 206 | 207 | .global CharWriterStr3 208 | CharWriterStr3: 209 | .ascii "CharWriter.h" 210 | .4byte 0 211 | 212 | .global NW4RPointerErrorStr12 213 | NW4RPointerErrorStr12: 214 | .asciz "NW4R:Pointer Error\nthis(=%p) is not valid pointer.\0" 215 | 216 | .global CharWriterStr4 217 | CharWriterStr4: 218 | .ascii "CharWriter.h" 219 | 220 | .4byte 0 221 | .4byte 0 222 | .4byte 0 223 | .4byte 0 224 | 225 | .global d5_14628 226 | d5_14628: 227 | .incbin "basemain.dol", 0x268968, 0x33478 228 | 229 | -------------------------------------------------------------------------------- /maindol/dolheader.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global DolHeader 3 | DolHeader: 4 | .4byte init_offset 5 | .4byte text_offset 6 | .ifdef USE_GECKO 7 | .4byte codehandler_offset 8 | .space 16 9 | .else 10 | .space 20 11 | .endif 12 | .4byte extab_offset 13 | .4byte extab_index_offset 14 | .4byte ctors_offset 15 | .4byte dtors_offset 16 | .4byte rodata_offset 17 | .4byte data_offset 18 | .4byte sdata_offset 19 | .4byte sdata2_offset 20 | .ifdef USE_GECKO 21 | .4byte gct_offset 22 | .space 8 23 | .else 24 | .space 12 25 | .endif 26 | .4byte init_start 27 | .4byte text_start 28 | .ifdef USE_GECKO 29 | .4byte codehandler_start 30 | .space 16 31 | .else 32 | .space 20 33 | .endif 34 | .4byte extab_start 35 | .4byte extab_index_start 36 | .4byte ctors_start 37 | .4byte dtors_start 38 | .4byte rodata_start 39 | .4byte data_start 40 | .4byte sdata_start 41 | .4byte sdata2_start 42 | .ifdef USE_GECKO 43 | .4byte gct_start 44 | .space 8 45 | .else 46 | .space 12 47 | .endif 48 | .4byte init_size 49 | .4byte text_size 50 | .ifdef USE_GECKO 51 | .4byte codehandler_size 52 | .space 16 53 | .else 54 | .space 20 55 | .endif 56 | .4byte extab_size 57 | .4byte extab_index_size 58 | .4byte ctors_size 59 | .4byte dtors_size 60 | .4byte rodata_size 61 | .4byte data_size 62 | .4byte sdata_size 63 | .4byte sdata2_size 64 | .ifdef USE_GECKO 65 | .4byte gct_size 66 | .space 8 67 | .else 68 | .space 12 69 | .endif 70 | .4byte bss_start 71 | .4byte bssTotalSize 72 | .4byte dol_entrypoint 73 | .space 28 74 | 75 | -------------------------------------------------------------------------------- /maindol/dtors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x800207f0 # t1_19530 3 | .4byte 0x800206c0 # t1_19400 4 | .space 24 5 | -------------------------------------------------------------------------------- /maindol/extab.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x28080000, 0x70, 0x10, 0, 0x82000008, 0x800203d8, 0x18080000, 0 3 | .4byte 0x20080000, 0x5c, 0x10, 0, 0x82000008, 0x800203d8, 0x20080000, 0 4 | .4byte 0x30080000, 0 5 | .4byte 0x28080000, 0 6 | .4byte 0x80000, 0, 0x80000, 0, 0x80000, 0 7 | .4byte 0x80000, 0, 0x80000, 0, 0x80000, 0 8 | .4byte 0x10080000, 0 9 | .4byte 0x18080000, 0, 0x18080000, 0 10 | .4byte 0x8080000, 0, 0x80000, 0, 0x80000, 0 11 | .4byte 0x30080000, 0, 0x20080000, 0 12 | .4byte 0x28080000, 0, 0x20080000, 0 13 | .4byte 0x28080000, 0, 0x20080000, 0 14 | .4byte 0x28080000, 0, 0x80000, 0 15 | .4byte 0x80000, 0, 0x18080000, 0 16 | .4byte 0x8080000, 0, 0x10080000, 0 17 | .4byte 0x18080000, 0, 0x10080000, 0 18 | .4byte 0x8080000, 0, 0x28080000, 0 19 | .4byte 0x28080000, 0, 0x28080000, 0 20 | .4byte 0x38080000, 0, 0x28080000, 0 21 | .4byte 0x28080000, 0, 0x48080000, 0 22 | .4byte 0x20080000, 0, 0x28080000, 0 23 | .4byte 0x18080000, 0, 0x30080000, 0 24 | .4byte 0x48080000, 0, 0x20080000, 0 25 | .4byte 0x28080000, 0, 0x20080000, 0 26 | .4byte 0x30080000, 0, 0x20080000, 0 27 | .4byte 0x28080000, 0, 0x20080000, 0 28 | .4byte 0x20080000, 0, 0x20080000, 0 29 | .4byte 0x8080000, 0, 0x28080000, 0 30 | .4byte 0x484a0000, 0, 0x10080000, 0 31 | .4byte 0x8080000, 0, 0x8080000, 0 32 | .4byte 0x8080000, 0, 0x20080000, 0 33 | .4byte 0x18080000, 0, 0x504a0000, 0 34 | .4byte 0x400a0000, 0, 0x280a0000, 0 35 | .4byte 0x280a0000, 0, 0x904a0000, 0 36 | .4byte 0xa0000, 0, 0x8080000, 0 37 | .4byte 0x10080000, 0, 0xc4a0000, 0 38 | .4byte 0x380a0000, 0, 0x114a0000, 0 39 | .4byte 0x20080000, 0, 0x404a0000, 0 40 | .4byte 0x80000, 0, 0x80000, 0 41 | .4byte 0x10080000, 0, 0x10080000, 0 42 | .4byte 0x20080000, 0, 0x20080000, 0 43 | .4byte 0x40080000, 0, 0x20080000, 0 44 | .incbin "basemain.dol", 0x2402a0, 0x300 45 | -------------------------------------------------------------------------------- /maindol/extabindex.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain.dol", 0x2405a0, 0x8a0 3 | -------------------------------------------------------------------------------- /maindol/init.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global InitRegs 3 | InitRegs: 4 | li %r0, 0 5 | li %r3, 0 6 | li %r4, 0 7 | li %r5, 0 8 | li %r6, 0 9 | li %r7, 0 10 | li %r8, 0 11 | li %r9, 0 12 | li %r10, 0 13 | li %r11, 0 14 | li %r12, 0 15 | li %r14, 0 16 | li %r15, 0 17 | li %r16, 0 18 | li %r17, 0 19 | li %r18, 0 20 | li %r19, 0 21 | li %r20, 0 22 | li %r21, 0 23 | li %r22, 0 24 | li %r23, 0 25 | li %r24, 0 26 | li %r25, 0 27 | li %r26, 0 28 | li %r27, 0 29 | li %r28, 0 30 | li %r29, 0 31 | li %r30, 0 32 | li %r31, 0 33 | lis %r1, sbss2_end@h+0x10000 34 | ori %r1, %r1, sbss2_end@l+4 # 0x80394e00, offset to the default/initial heap 35 | # These are different in European version 36 | lis %r2, sbss2_end@h 37 | ori %r2, %r2, sbss2_end@l+0x5e24 # 0x8038ac20 38 | lis %r13, sbss2_end@h 39 | ori %r13, %r13, sbss2_end@l+0x3a84 # 0x80388880 40 | blr 41 | 42 | .global InitData 43 | InitData: 44 | stwu %r1, -0x20(%r1) 45 | mflr %r0 46 | stw %r0, 0x24(%r1) 47 | stw %r31, 0x1c(%r1) 48 | stw %r30, 0x18(%r1) 49 | stw %r29, 0x14(%r1) 50 | lis %r29, gUnknown_23a0@h 51 | addi %r29, %r29, gUnknown_23a0@l 52 | _22c0: 53 | lwz %r30, 8(%r29) 54 | cmpwi %r30, 0 55 | beq _2300 56 | lwz %r4, 0(%r29) 57 | lwz %r31, 4(%r29) 58 | beq _22f8 59 | cmplw %r31, %r4 60 | beq _22f8 61 | mr %r3, %r31 62 | mr %r5, %r30 63 | bl memcpy 64 | mr %r3, %r31 65 | mr %r4, %r30 66 | bl FlushCache 67 | _22f8: 68 | addi %r29, %r29, 0xc 69 | b _22c0 70 | _2300: 71 | lis %r29, gUnknown_2424@h 72 | addi %r29, %r29, gUnknown_2424@l 73 | _2308: 74 | lwz %r5, 4(%r29) 75 | cmpwi %r5, 0 76 | beq _232c 77 | lwz %r3, 0(%r29) 78 | beq _2324 79 | li %r4, 0 80 | bl memset 81 | _2324: 82 | addi %r29, %r29, 8 83 | b _2308 84 | _232c: 85 | lwz %r0, 0x24(%r1) 86 | lwz %r31, 0x1c(%r1) 87 | lwz %r30, 0x18(%r1) 88 | lwz %r29, 0x14(%r1) 89 | mtlr %r0 90 | addi %r1, %r1, 0x20 91 | blr 92 | 93 | .global InitHardware 94 | InitHardware: 95 | mfmsr %r0 96 | ori %r0, %r0, 0x2000 97 | mtmsr %r0 98 | mflr %r31 99 | bl t1_199140 # __OSPSInit 100 | bl t1_197e48 # __OSCacheInit 101 | bl t1_19a784 102 | mtlr %r31 103 | blr 104 | 105 | .global FlushCache 106 | FlushCache: 107 | lis %r5, -1 108 | ori %r5, %r5, 0xfff1 109 | and %r5, %r5, %r3 110 | subf %r3, %r5, %r3 111 | add %r4, %r4, %r3 112 | _2380: 113 | dcbst 0, %r5 114 | sync 0 115 | icbi 0, %r5 116 | addic %r5, %r5, 8 117 | addic. %r4, %r4, -8 118 | bge _2380 119 | isync 120 | blr 121 | 122 | .data 123 | .global gUnknown_23a0 124 | gUnknown_23a0: 125 | # Some kind of reloc table? 126 | .4byte init_start 127 | .4byte init_start 128 | .4byte init_size-0x1c 129 | .4byte extab_start 130 | .4byte extab_start 131 | .4byte extab_size 132 | .4byte extab_index_start 133 | .4byte extab_index_start 134 | .4byte extab_index_size-0x10 135 | .4byte text_start 136 | .4byte text_start 137 | .4byte text_size-0xc 138 | .4byte ctors_start 139 | .4byte ctors_start 140 | .4byte ctors_size-0x10 141 | .4byte dtors_start 142 | .4byte dtors_start 143 | .4byte dtors_size-0x14 144 | .4byte rodata_start 145 | .4byte rodata_start 146 | .4byte rodata_size-0x14 147 | .4byte data_start 148 | .4byte data_start 149 | .4byte data_size 150 | .4byte sdata_start 151 | .4byte sdata_start 152 | .4byte sdata_size 153 | .4byte sdata2_start 154 | .4byte sdata2_start 155 | .4byte sdata2_size 156 | .4byte 0x00000000 157 | .4byte 0x00000000 158 | .4byte 0x00000000 159 | 160 | .global gUnknown_2424 161 | gUnknown_2424: 162 | .4byte bss_start 163 | .4byte bss_size 164 | .4byte sbss_start 165 | .4byte sbss_size 166 | .4byte sbss2_start 167 | .4byte sbss2_size 168 | .4byte 0 169 | .4byte 0 170 | .space 28 171 | -------------------------------------------------------------------------------- /maindol/memset.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global memcpy 3 | memcpy: 4 | cmplw %r4, %r3 5 | blt _1f60 6 | addi %r4, %r4, -1 7 | addi %r6, %r3, -1 8 | addi %r5, %r5, 1 9 | b _1f54 10 | _1f4c: 11 | lbzu %r0, 1(%r4) 12 | stbu %r0, 1(%r6) 13 | _1f54: 14 | addic. %r5, %r5, -1 15 | bne _1f4c 16 | blr 17 | _1f60: 18 | add %r4, %r4, %r5 19 | add %r6, %r3, %r5 20 | addi %r5, %r5, 1 21 | b _1f78 22 | _1f70: 23 | lbzu %r0, -1(%r4) 24 | stbu %r0, -1(%r6) 25 | _1f78: 26 | addic. %r5, %r5, -1 27 | bne _1f70 28 | blr 29 | 30 | .global sub_1f84 31 | sub_1f84: 32 | cmplwi %r5, 0x20 33 | clrlwi %r7, %r4, 0x18 34 | addi %r6, %r3, -1 35 | blt _2020 36 | nor %r0, %r6, %r6 37 | clrlwi. %r0, %r0, 0x1e 38 | beq _1fb0 39 | subf %r5, %r0, %r5 40 | _1fa4: 41 | addic. %r0, %r0, -1 42 | stbu %r7, 1(%r6) 43 | bne _1fa4 44 | _1fb0: 45 | cmpwi %r7, 0 46 | beq _1fd0 47 | slwi %r4, %r7, 8 48 | slwi %r3, %r7, 0x18 49 | slwi %r0, %r7, 0x10 50 | or %r4, %r7, %r4 51 | or %r0, %r3, %r0 52 | or %r7, %r4, %r0 53 | _1fd0: 54 | rlwinm. %r0, %r5, 0x1b, 5, 0x1f 55 | addi %r3, %r6, -3 56 | beq _2004 57 | _1fdc: 58 | stw %r7, 4(%r3) 59 | addic. %r0, %r0, -1 60 | stw %r7, 8(%r3) 61 | stw %r7, 0xc(%r3) 62 | stw %r7, 0x10(%r3) 63 | stw %r7, 0x14(%r3) 64 | stw %r7, 0x18(%r3) 65 | stw %r7, 0x1c(%r3) 66 | stwu %r7, 0x20(%r3) 67 | bne _1fdc 68 | _2004: 69 | rlwinm. %r0, %r5, 0x1e, 0x1d, 0x1f 70 | beq _2018 71 | _200c: 72 | addic. %r0, %r0, -1 73 | stwu %r7, 4(%r3) 74 | bne _200c 75 | _2018: 76 | addi %r6, %r3, 3 77 | clrlwi %r5, %r5, 0x1e 78 | _2020: 79 | cmpwi %r5, 0 80 | beqlr 81 | _2028: 82 | addic. %r5, %r5, -1 83 | stbu %r7, 1(%r6) 84 | bne _2028 85 | blr 86 | 87 | .global memset 88 | memset: 89 | stwu %r1, -0x10(%r1) 90 | mflr %r0 91 | stw %r0, 0x14(%r1) 92 | stw %r31, 0xc(%r1) 93 | mr %r31, %r3 94 | bl sub_1f84 95 | mr %r3, %r31 96 | lwz %r31, 0xc(%r1) 97 | lwz %r0, 0x14(%r1) 98 | mtlr %r0 99 | addi %r1, %r1, 0x10 100 | blr 101 | -------------------------------------------------------------------------------- /maindol/rodata.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global StrapStrings 3 | StrapStrings: 4 | .asciz "/Boot/Strap/us/English.szs\0" 5 | .asciz "/Boot/Strap/us/English.szs\0" 6 | .asciz "/Boot/Strap/us/English.szs\0" 7 | .asciz "/Boot/Strap/us/French.szs\0\0" 8 | .asciz "/Boot/Strap/us/Spanish_US.szs\0\0" 9 | .asciz "/Boot/Strap/us/English.szs\0" 10 | .asciz "/Boot/Strap/us/English.szs\0" 11 | .global mod_mod0_texture_addr 12 | mod_mod0_texture_addr: 13 | .global StrapImageStrings 14 | StrapImageStrings: 15 | .ifdef CTGP_CODE 16 | .asciz "CTGP_CODE\0\0\0\0\0\0\0\0\0\0" 17 | .asciz "CTGP_CODE\0\0\0\0\0\0" 18 | .asciz "CTGP_CODE\0\0\0\0\0\0\0\0\0\0" 19 | .asciz "CTGP_CODE\0\0\0\0\0\0" 20 | .else 21 | .asciz "strapA_16_9_832x456" 22 | .asciz "strapA_608x456\0" 23 | .asciz "strapB_16_9_832x456" 24 | .asciz "strapB_608x456\0" 25 | .endif 26 | .global gUnknown_110 27 | gUnknown_110: 28 | .4byte 0x80000000, 0x40000000, 0x20000000, 0x10000000 29 | .global NWC24TrySuspendSchedulerStr 30 | NWC24TrySuspendSchedulerStr: 31 | .ascii "[Boot] NWC24TrySuspendScheduler: errcode=%d\n" 32 | .4byte 0 33 | .global RFLRes01Str 34 | RFLRes01Str: 35 | .asciz "/contents/RFLRes01.arc\0" 36 | .global HomeButtonStr 37 | HomeButtonStr: 38 | .ascii "/contents/HomeButton.arc" 39 | .4byte 0 40 | .global HomeButtonSeStr 41 | HomeButtonSeStr: 42 | .asciz "/contents/HomeButtonSe.arc\0" 43 | .global GlobeStr 44 | GlobeStr: 45 | .asciz "/contents/globe.arc" 46 | .global RKChResStr 47 | RKChResStr: 48 | .ascii "/RKChRes.arc" # Mario Kart Channel? 49 | 50 | .4byte 0, 0 51 | 52 | .global ContentsStrTable 53 | ContentsStrTable: 54 | .4byte RFLRes01Str, 4 55 | .4byte HomeButtonStr, 5 56 | .4byte HomeButtonSeStr, 6 57 | .4byte GlobeStr, 7 58 | .4byte RKChResStr, 8 59 | 60 | # U16-LE: "Please insert the\r\nMario Kart Wii Game Disc." 61 | 62 | .global PleaseInsertGameDiscStr 63 | PleaseInsertGameDiscStr: 64 | .2byte 0x50, 0x6C, 0x65,0x61, 0x73, 0x65, 0x20, 0x69, 0x6E, 0x73, 0x65, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x0D, 0x0A, 0x4D, 0x61, 0x72, 0x69, 0x6F, 0x20, 0x4B, 0x61, 0x72, 0x74, 0x20, 0x57, 0x69, 0x69, 0x20, 0x47, 0x61, 0x6D, 0x65, 0x20, 0x44, 0x69, 0x73, 0x63, 0x2E 65 | .4byte 0 66 | 67 | # "The Game Disc could not be\r\nread. Refer to the Wii Operations Manual for\r\ndetails." 68 | 69 | .global GameDiscCouldntBeReadStr 70 | GameDiscCouldntBeReadStr: 71 | .2byte 0x54, 0x68, 0x65, 0x20, 0x47, 0x61, 0x6D, 0x65, 0x20, 0x44, 0x69, 0x73, 0x63, 0x20, 0x63, 0x6F, 0x75, 0x6C, 0x64, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x62, 0x65, 0x0D, 0x0A, 0x72, 0x65, 0x61, 0x64, 0x2E, 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x69, 0x69, 0x0D, 0x0A, 0x4F, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x20, 0x4D, 0x61, 0x6E, 0x75, 0x61, 0x6C, 0x20, 0x66, 0x6F, 0x72, 0x0D, 0x0A, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6C, 0x73, 0x2E 72 | .4byte 0 73 | 74 | .2byte 0 75 | 76 | # "Veuillez insérer le disque\r\nMario Kart Wii." 77 | 78 | .global PleaseInsertGameDiscStrFR 79 | PleaseInsertGameDiscStrFR: 80 | .2byte 0x56, 0x65, 0x75, 0x69, 0x6C, 0x6C, 0x65, 0x7A, 0x20, 0x69, 0x6E, 0x73, 0xE9, 0x72, 0x65, 0x72, 0x20, 0x6C, 0x65, 0x20, 0x64, 0x69, 0x73, 0x71, 0x75, 0x65, 0x0D, 0x0A, 0x4D, 0x61, 0x72, 0x69, 0x6F, 0x20, 0x4B, 0x61, 0x72, 0x74, 0x20, 0x57, 0x69, 0x69, 0x2E 81 | .4byte 0 82 | 83 | .2byte 0 84 | 85 | # "Impossible de lire le disque\r\nVeuillez vous référer au Mode\r\nd'Emploi Wii pour plus de détails." 86 | 87 | .global GameDiscCouldntBeReadStrFR 88 | GameDiscCouldntBeReadStrFR: 89 | .2byte 0x49, 0x6D, 0x70, 0x6F, 0x73, 0x73, 0x69, 0x62, 0x6C, 0x65, 0x20, 0x64, 0x65, 0x20, 0x6C, 0x69, 0x72, 0x65, 0x20, 0x6C, 0x65, 0x20, 0x64, 0x69, 0x73, 0x71, 0x75, 0x65, 0x2E, 0x0D, 0x0A, 0x56, 0x65, 0x75, 0x69, 0x6C, 0x6C, 0x65, 0x7A, 0x20, 0x76, 0x6F, 0x75, 0x73, 0x20, 0x72, 0xE9, 0x66, 0xE9, 0x72, 0x65, 0x72, 0x20, 0x61, 0x75, 0x20, 0x4D, 0x6F, 0x64, 0x65, 0x0D, 0x0A, 0x64, 0x27, 0x45, 0x6D, 0x70, 0x6C, 0x6F, 0x69, 0x20, 0x57, 0x69, 0x69, 0x20, 0x70, 0x6F, 0x75, 0x72, 0x20, 0x70, 0x6C, 0x75, 0x73, 0x20, 0x64, 0x65, 0x20, 0x64, 0xE9, 0x74, 0x61, 0x69, 0x6C, 0x73, 0x2E 90 | 91 | .4byte 0 92 | 93 | # "Por favor inserta el\r\ndisco de Mario Kart Wii." 94 | 95 | .global PleaseInsertGameDiscStrES 96 | PleaseInsertGameDiscStrES: 97 | .2byte 0x50, 0x6F, 0x72, 0x20, 0x66, 0x61, 0x76, 0x6F, 0x72, 0x20, 0x69, 0x6E, 0x73, 0x65, 0x72, 0x74, 0x61, 0x20, 0x65, 0x6C, 0x0D, 0x0A, 0x64, 0x69, 0x73, 0x63, 0x6F, 0x20, 0x64, 0x65, 0x20, 0x4D, 0x61, 0x72, 0x69, 0x6F, 0x20, 0x4B, 0x61, 0x72, 0x74, 0x20, 0x57, 0x69, 0x69, 0x2E 98 | 99 | .4byte 0, 0 100 | 101 | # "No se puede leer el disco\r\nConsulta el manual de\r\noperaciones de la consola Wii\r\npara obtener más información." 102 | 103 | .global GameDiscCouldntBeReadStrES 104 | GameDiscCouldntBeReadStrES: 105 | .2byte 0x4E, 0x6F, 0x20, 0x73, 0x65, 0x20, 0x70, 0x75, 0x65, 0x64, 0x65, 0x20, 0x6C, 0x65, 0x65, 0x72, 0x20, 0x65, 0x6C, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6F, 0x2E, 0x0D, 0x0A, 0x43, 0x6F, 0x6E, 0x73, 0x75, 0x6C, 0x74, 0x61, 0x20, 0x65, 0x6C, 0x20, 0x6D, 0x61, 0x6E, 0x75, 0x61, 0x6C, 0x20, 0x64, 0x65, 0x0D, 0x0A, 0x6F, 0x70, 0x65, 0x72, 0x61, 0x63, 0x69, 0x6F, 0x6E, 0x65, 0x73, 0x20, 0x64, 0x65, 0x20, 0x6C, 0x61, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x6F, 0x6C, 0x61, 0x20, 0x57, 0x69, 0x69, 0x0D, 0x0A, 0x70, 0x61, 0x72, 0x61, 0x20, 0x6F, 0x62, 0x74, 0x65, 0x6E, 0x65, 0x72, 0x20, 0x6D, 0xE1, 0x73, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x63, 0x69, 0xF3, 0x6E, 0x2E 106 | .4byte 0 107 | 108 | .2byte 0 109 | 110 | .global gUnknown_560 111 | gUnknown_560: 112 | .incbin "basemain.dol", 0x241480, 0x3c 113 | .global gUnknown_5ac 114 | gUnknown_5ac: 115 | .incbin "basemain.dol", 0x2414bc, 0x3c 116 | .global gUnknown_5e8 117 | gUnknown_5e8: 118 | .incbin "basemain.dol", 0x2414f8, 0x3c 119 | .global gUnknown_624 120 | gUnknown_624: 121 | .incbin "basemain.dol", 0x241534, 0x3c 122 | .global gUnknown_660 123 | gUnknown_660: 124 | .incbin "basemain.dol", 0x241570, 0x3c 125 | .global gUnknown_69c 126 | gUnknown_69c: 127 | .incbin "basemain.dol", 0x2415ac, 0x3c 128 | .global gUnknown_6d8 129 | gUnknown_6d8: 130 | .incbin "basemain.dol", 0x2415e8, 0x3c 131 | .global gUnknown_714 132 | gUnknown_714: 133 | .incbin "basemain.dol", 0x241624, 0x3c 134 | .global gUnknown_750 135 | gUnknown_750: 136 | .incbin "basemain.dol", 0x241660, 0x3c 137 | .global gUnknown_78c 138 | gUnknown_78c: 139 | .incbin "basemain.dol", 0x24169c, 0x3c 140 | 141 | .global gUnknown_7b8 142 | gUnknown_7b8: 143 | .4byte gUnknown_560 144 | .4byte gUnknown_5ac 145 | .4byte gUnknown_5e8 146 | .4byte gUnknown_624 147 | .4byte gUnknown_660 148 | .4byte gUnknown_69c 149 | .4byte gUnknown_6d8 150 | .4byte gUnknown_714 151 | .4byte gUnknown_750 152 | .4byte gUnknown_78c 153 | 154 | .global Pal50Str 155 | Pal50Str: 156 | .asciz "***********************************\n" 157 | .asciz "* PAL50 mode *\n" 158 | .asciz "***********************************\n" 159 | 160 | .global NTSCStr 161 | NTSCStr: 162 | .asciz "***********************************\n" 163 | .asciz "* NTSC/Progressive/PAL60 mode *\n" 164 | .asciz "***********************************\n" 165 | 166 | .2byte 0 167 | 168 | .global StaticRRelStr 169 | StaticRRelStr: 170 | .ascii "/rel/StaticR.rel" 171 | 172 | .4byte 0 173 | 174 | .global StaticRSmapStr 175 | StaticRSmapStr: 176 | .asciz "/rel/StaticR.SMAP" # memory map? 177 | 178 | .2byte 0 179 | 180 | .global gUnknown_8e8 181 | gUnknown_8e8: 182 | .4byte gUnknown_60 183 | .4byte gUnknown_64 184 | .4byte StaticRRelStr 185 | .4byte StaticRSmapStr 186 | 187 | # Related to StaticR.rel? 188 | .asciz "bssSize %d\n" 189 | .asciz "relOffset %08xh\n" 190 | .asciz "impOffset %08xh\n" 191 | .asciz "impSize %08xh\n" 192 | .asciz "prolog %08xh\n" 193 | .asciz "epilog %08xh\n" 194 | .asciz "unresolved %08xh\n" 195 | .asciz "align %08xh\n" 196 | .asciz "bssAlign %08xh\n" 197 | .asciz "fixSize %08xh\n" 198 | .asciz "\n" 199 | .asciz "[Rel] Load Module[%d]: size=%dBytes time=%dmsec\n" 200 | .asciz "[Rel] Load Module[%d] fail(filename=%s)\n" 201 | .asciz "id %d\n" 202 | .asciz "numSections %d\n" 203 | .asciz "sectionInfoOffset %08xh\n" 204 | .asciz "nameOffset %08xh [%s]\n" 205 | .asciz "nameSize %d\n" 206 | .asciz "version %d\n" 207 | .asciz "\n" 208 | .asciz "offset%d 0x%08x - 0x%08x\n" 209 | .asciz "\n" 210 | .asciz "bssSize %d\n" 211 | .asciz "relOffset %08xh\n" 212 | .asciz "impOffset %08xh\n" 213 | .asciz "impSize %08xh\n" 214 | .asciz "prolog %08xh\n" 215 | .asciz "epilog %08xh\n" 216 | .asciz "unresolved %08xh\n" 217 | .asciz "align %08xh\n" 218 | .asciz "bssAlign %08xh\n" 219 | .asciz "fixSize %08xh\n" 220 | .ascii "\n" 221 | 222 | .2byte 0 223 | .4byte 0 224 | 225 | .asciz "SceneCreatorStatic.cpp" 226 | .asciz "Undefined Scene." 227 | .asciz "SceneCreatorStatic.cpp" 228 | .asciz "Undefined Scene\0" 229 | 230 | .4byte 0x1020000, 0x19606363, 0x31020000, 0x1ba8c937 231 | .4byte 0x4e020000, 0x25590988, 0x41020000, 0xe6dc69fc 232 | .4byte 0x80020000, 0x11cd5667, 0x88020000, 0x1aaa5a4f 233 | .4byte 0xa0020000, 0x1c6252cc, 0x31020000, 0x1ba8c937 234 | 235 | .space 0x40 236 | 237 | .asciz "/rel/RevoKartR.SMAP" # MKC? 238 | .asciz "[SYS] isNdev: %s returnCode: 0x%08x launchCode: 0x%08x\n" 239 | .asciz "TRUE" 240 | .asciz "FALSE" 241 | .asciz "[SYS] \"%s\"->0x%08x, 0x%08x\n" 242 | .asciz "[SYS] illigal length argument for invitation.\n" 243 | .asciz "[SYS] LaunchType: %d\n" 244 | .asciz "[SYS] Argument=\"%s\"\n" 245 | .asciz "[SYS] Load MapFile \"%s\" success.\n" 246 | .asciz "[SYS] Load MapFile \"%s\" fail.\n" 247 | .asciz "[SYS] Static .text: 0x%08x-0x%08x(%dKBytes)\n" 248 | .asciz "[SYS] Warning! Illegal language type=%d. Change to English.\n" 249 | .asciz "[SYS] Can't get SimpleAddressData.\n" 250 | .asciz "[SYS] Get SimpleAddressData. ID=0x%x latitude=0x%x, longitude=0x%x\n" 251 | .ascii "[SYS] Matching Area: %d\n" 252 | 253 | .4byte 0, 0, 4, 0xc, 0x14, 0x24, 0x34, 0x44 254 | 255 | # Powers of 5 256 | .asciz "542101086242752217003726400434970855712890625" 257 | .asciz "11102230246251565404236316680908203125" 258 | .asciz "23283064365386962890625" 259 | .asciz "152587890625" 260 | .asciz "390625" 261 | .asciz "78125" 262 | .asciz "15625" 263 | .asciz "3125" 264 | .asciz "625" 265 | .asciz "125" 266 | .asciz "25" 267 | .asciz "5" 268 | 269 | # Powers of 2 270 | .asciz "1" 271 | .asciz "2" 272 | .asciz "4" 273 | .asciz "8" 274 | .asciz "16" 275 | .asciz "32" 276 | .asciz "64" 277 | .asciz "128" 278 | .asciz "256" 279 | 280 | .ascii "179769313486231580793728714053034151" 281 | 282 | .incbin "basemain.dol", 0x241ee4, 0x204 283 | 284 | # bytes 0x00-0xff, repeated 285 | .incbin "basemain.dol", 0x2420e8, 0x200 286 | 287 | # format string for date 288 | .asciz "%a %b %e %T %Y\0" 289 | 290 | # format string for time 291 | .asciz "%I:%M:%S %p" 292 | 293 | # another format string for date 294 | .ascii "%m/%d/%y" 295 | .4byte 0 296 | 297 | # days of the week 298 | .ascii "Sun|Sunday|Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday" 299 | .4byte 0 300 | 301 | # months 302 | .asciz "Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December" 303 | .2byte 0 304 | 305 | .asciz "-INF" 306 | .asciz "-inf" 307 | .asciz "INF" 308 | .asciz "inf" 309 | .asciz "-NAN" 310 | .asciz "-nan" 311 | .asciz "NAN" 312 | .asciz "nan" 313 | 314 | .4byte 0, 0, 0x7fffffff 315 | 316 | .space 0x20 317 | 318 | .ascii "INFINITY" 319 | .4byte 0, 0 320 | 321 | .incbin "basemain.dol", 0x242450, 0x100 322 | 323 | .space 0x100 324 | 325 | # bytes 0x00-0xff in U16LE, repeated 326 | .incbin "basemain.dol", 0x242650, 0x400 327 | 328 | .space 0x10 329 | 330 | .4byte 0x80000000, 0, 0x3ff00000, 0 331 | .4byte 0x3ff80000, 0, 0, 0 332 | .4byte 0x3fe2b803, 0x40000000, 0, 0 333 | 334 | # i have no idea what this is 335 | .incbin "basemain.dol", 0x242a90, 0x2e0 336 | 337 | .4byte 0, 0xffffffff, 1, 1 338 | 339 | # What is this? 340 | .4byte 0x60000000, 0x60000000, 0x60000000, 0x60000000 341 | .4byte 0x60000000, 0x60000000, 0x60000000, 0x60000000 342 | .4byte 0x60000000, 0x60000000, 0x60000000, 0x60000000 343 | .4byte 0x60000000, 0x60000000, 0x60000000, 0x60000000 344 | .4byte 0x60000000, 0x60000000, 0x60000000, 0x60000000 345 | .4byte 0x60000000, 0x60000000, 0x60000000, 0x60000000 346 | .4byte 0x60000000, 0x60000000, 0x60000000, 0x60000000 347 | .4byte 0x60000000, 0x60000000 348 | 349 | .asciz "GCN_Mem_Alloc.c : InitDefaultHeap. No Heap Available\n" 350 | .asciz "Metrowerks CW runtime library initializing default heap\n\0" 351 | .space 0x18 352 | 353 | .incbin "basemain.dol", 0x242e80, 0x408 354 | 355 | # BRRES stuff 356 | # byte before the string is the length of said string plus a null byte 357 | .4byte 0xa 358 | .asciz "AnmObjVis" 359 | .2byte 0 360 | .4byte 0xd 361 | .ascii "AnmObjMatClr" 362 | .4byte 0, 0, 0x11 363 | .ascii "AnmObjMatClrNode" 364 | .4byte 0, 0x15 365 | .ascii "AnmObjMatClrOverride" 366 | .4byte 0, 0, 0x10 367 | .asciz "AnmObjMatClrRes" 368 | .4byte 0, 0xd 369 | .ascii "AnmObjTexPat" 370 | .4byte 0, 0, 0x11 371 | .ascii "AnmObjTexPatNode" 372 | .4byte 0, 0x15 373 | .ascii "AnmObjTexPatOverride" 374 | .4byte 0, 0, 0x10 375 | .asciz "AnmObjTexPatRes" 376 | .4byte 0, 0xd 377 | .ascii "AnmObjTexSrt" 378 | .4byte 0, 0, 0x11 379 | .ascii "AnmObjTexSrtNode" 380 | .4byte 0, 0x15 381 | .ascii "AnmObjTexSrtOverride" 382 | .4byte 0, 0, 0x10 383 | .asciz "AnmObjTexSrtRes" 384 | .4byte 0, 0xa 385 | .asciz "AnmObjChr" 386 | .2byte 0 387 | .4byte 0xe 388 | .asciz "AnmObjChrNode" 389 | .2byte 0 390 | .4byte 0xf 391 | .ascii "AnmObjChrBlend" 392 | .2byte 0 393 | .4byte 0xd 394 | .ascii "AnmObjChrRes" 395 | .4byte 0, 0, 0xa 396 | .asciz "AnmObjShp" 397 | .2byte 0 398 | .4byte 0xe 399 | .asciz "AnmObjShpNode" 400 | .2byte 0 401 | .4byte 0xf 402 | .ascii "AnmObjShpBlend" 403 | .2byte 0 404 | .4byte 0xd 405 | .ascii "AnmObjShpRes" 406 | .4byte 0, 0, 7 407 | .ascii "AnmScn" 408 | .2byte 0 409 | .4byte 0, 0xa 410 | .asciz "AnmScnRes" 411 | .2byte 0 412 | .4byte 7 413 | .ascii "G3dObj" 414 | .2byte 0 415 | .4byte 0, 7 416 | .ascii "AnmObj" 417 | .2byte 0 418 | .4byte 0 419 | 420 | .incbin "basemain.dol", 0x2434b0, 0x888 421 | 422 | .4byte 7 423 | .ascii "ScnObj" 424 | .2byte 0 425 | .4byte 0, 8 426 | .asciz "ScnLeaf" 427 | .4byte 0, 9 428 | .ascii "ScnGroup" 429 | .4byte 0, 8 430 | .asciz "ScnRoot" 431 | .4byte 0, 0xd 432 | .ascii "ScnMdlSimple" 433 | .4byte 0, 0, 7 434 | .ascii "ScnMdl" 435 | .2byte 0 436 | .4byte 0, 0xb 437 | .ascii "ScnGroupEx" 438 | .2byte 0 439 | .4byte 0xf 440 | .ascii "ScnMdl1Mat1Shp" 441 | .2byte 0 442 | .4byte 0, 8 443 | .asciz "ScnProc" 444 | .4byte 0, 0 445 | 446 | # Long list of floats 447 | .incbin "basemain.dol", 0x243ddc, 0x1308 448 | 449 | .4byte 0 450 | .4byte 0x60c13 451 | .4byte 0x191f252b 452 | .4byte 0x31363c41 453 | .4byte 0x474c5155 454 | .4byte 0x5a5e6266 455 | .4byte 0x6a6d7073 456 | .4byte 0x75787a7b 457 | .4byte 0x7d7e7e7f 458 | .4byte 0x7f000000 459 | 460 | .space 0x20 461 | 462 | .4byte 0x8009bb70 # T1 0x948b0 463 | 464 | .space 0x18 465 | 466 | .4byte 0x28, 0 467 | 468 | # Another long list of floats 469 | .incbin "basemain.dol", 0x245150, 0x1f4c 470 | 471 | .4byte 0 472 | 473 | .incbin "basemain.dol", 0x2470a0, 0xd2a0 474 | 475 | -------------------------------------------------------------------------------- /maindol/sbss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0xfcc 3 | -------------------------------------------------------------------------------- /maindol/sbss2.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x3c 3 | -------------------------------------------------------------------------------- /maindol/sdata.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain.dol", 0x29bde0, 0x13c0 3 | -------------------------------------------------------------------------------- /maindol/sdata2.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemain.dol", 0x29d1a0, 0x60 3 | .global gUnknown_60 4 | gUnknown_60: 5 | .4byte 0 6 | .global gUnknown_64 7 | gUnknown_64: 8 | .4byte 0 9 | .incbin "basemain.dol", 0x29d208, 0x2138 10 | .global sdata2_end 11 | sdata2_end: 12 | -------------------------------------------------------------------------------- /maindol/text_1a940.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1a940 3 | sub_1a940: # 0x80021c00 4 | lis %r7, 0x802a 5 | lwz %r0, 0x28f8(%r7) 6 | cmpwi %r0, 0x0 7 | beqlr- 8 | addi %r8, %r7, 0x28f8 9 | li %r7, 0x190 10 | lhz %r9, 0x8(%r8) 11 | subfc %r7, %r7, %r9 12 | subfe %r7, %r7, %r7 13 | addi %r7, %r7, 0x2 14 | cmpwi %r7, 0x2 15 | bne- _1a978 16 | slwi %r3, %r3, 1 17 | slwi %r5, %r5, 1 18 | _1a978: 19 | add %r7, %r3, %r5 20 | srwi %r5, %r3, 31 21 | cmpw %r7, %r9 22 | subi %r5, %r5, 0x1 23 | and %r8, %r3, %r5 24 | bgt- _1a994 25 | mr %r9, %r7 26 | _1a994: 27 | lis %r7, 0x802a 28 | li %r3, 0x12c 29 | addi %r7, %r7, 0x28f8 30 | subf %r5, %r8, %r9 31 | lhz %r11, 0xa(%r7) 32 | subfc %r3, %r3, %r11 33 | subfe %r3, %r3, %r3 34 | addi %r3, %r3, 0x2 35 | cmpwi %r3, 0x2 36 | bne- _1a9c4 37 | slwi %r4, %r4, 1 38 | slwi %r6, %r6, 1 39 | _1a9c4: 40 | add %r6, %r4, %r6 41 | srwi %r3, %r4, 31 42 | cmpw %r6, %r11 43 | subi %r3, %r3, 0x1 44 | and %r10, %r4, %r3 45 | bgt- _1a9e0 46 | mr %r11, %r6 47 | _1a9e0: 48 | lis %r9, 0x802a 49 | subf %r6, %r10, %r11 50 | addi %r9, %r9, 0x28f8 51 | slwi %r7, %r8, 1 52 | lhz %r4, 0xc(%r9) 53 | li %r11, 0x0 54 | li %r3, 0x1080 55 | mullw %r8, %r4, %r10 56 | lis %r4, 0x8000 57 | slwi %r8, %r8, 1 58 | add %r0, %r0, %r8 59 | add %r10, %r7, %r0 60 | b _1aac4 61 | nop # What??? 62 | _1aa18: 63 | cmpwi %cr1, %r5, 0x0 64 | li %r12, 0x0 65 | ble- cr1, _1aab0 66 | cmpwi %r5, 0x8 67 | subi %r7, %r5, 0x8 68 | ble- _1aa90 69 | li %r8, 0x0 70 | blt- cr1, _1aa48 71 | subi %r0, %r4, 0x2 72 | cmpw %r5, %r0 73 | bgt- _1aa48 74 | li %r8, 0x1 75 | _1aa48: 76 | cmpwi %r8, 0x0 77 | beq- _1aa90 78 | addi %r0, %r7, 0x7 79 | srwi %r0, %r0, 3 80 | mtctr %r0 81 | cmpwi %r7, 0x0 82 | ble- _1aa90 83 | _1aa64: 84 | sth %r3, 0x0(%r10) 85 | addi %r12, %r12, 0x8 86 | sth %r3, 0x2(%r10) 87 | sth %r3, 0x4(%r10) 88 | sth %r3, 0x6(%r10) 89 | sth %r3, 0x8(%r10) 90 | sth %r3, 0xa(%r10) 91 | sth %r3, 0xc(%r10) 92 | sth %r3, 0xe(%r10) 93 | addi %r10, %r10, 0x10 94 | bdnz+ _1aa64 95 | _1aa90: 96 | subf %r0, %r12, %r5 97 | mtctr %r0 98 | cmpw %r12, %r5 99 | bge- _1aab0 100 | _1aaa0: 101 | sth %r3, 0x0(%r10) 102 | addi %r10, %r10, 0x2 103 | addi %r12, %r12, 0x1 104 | bdnz+ _1aaa0 105 | _1aab0: 106 | lhz %r0, 0xc(%r9) 107 | addi %r11, %r11, 0x1 108 | subf %r0, %r5, %r0 109 | slwi %r0, %r0, 1 110 | add %r10, %r10, %r0 111 | _1aac4: 112 | cmpw %r11, %r6 113 | blt+ _1aa18 114 | blr 115 | 116 | .global t1_1aad0 117 | t1_1aad0: 118 | .incbin "basemain.dol", 0x1d030, 0x34 119 | 120 | -------------------------------------------------------------------------------- /maindol/text_1ab10.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1ab10 3 | sub_1ab10: # 0x80021dd0 4 | lis %r3, 0x802a 5 | addi %r4, %r3, 0x28f8 6 | lwz %r3, 0x28f8(%r3) 7 | lwz %r4, 0x4(%r4) 8 | b sub_19a2fc 9 | -------------------------------------------------------------------------------- /maindol/text_1ab30.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1ab30 3 | sub_1ab30: # 0x80021df0 4 | stwu %r1, -0x190(%r1) 5 | mflr %r0 6 | mr %r12, %r6 7 | stw %r0, 0x194(%r1) 8 | stw %r31, 0x18c(%r1) 9 | mr %r31, %r5 10 | stw %r30, 0x188(%r1) 11 | mr %r30, %r4 12 | stw %r29, 0x184(%r1) 13 | mr %r29, %r3 14 | bne- cr1, _1ab7c 15 | stfd %f1, 0x28(%r1) 16 | stfd %f2, 0x30(%r1) 17 | stfd %f3, 0x38(%r1) 18 | stfd %f4, 0x40(%r1) 19 | stfd %f5, 0x48(%r1) 20 | stfd %f6, 0x50(%r1) 21 | stfd %f7, 0x58(%r1) 22 | stfd %f8, 0x60(%r1) 23 | _1ab7c: 24 | lis %r11, 0x802a 25 | stw %r3, 0x8(%r1) 26 | lwz %r0, 0x28f8(%r11) 27 | stw %r4, 0xc(%r1) 28 | cmpwi %r0, 0x0 29 | stw %r5, 0x10(%r1) 30 | stw %r6, 0x14(%r1) 31 | stw %r7, 0x18(%r1) 32 | stw %r8, 0x1c(%r1) 33 | stw %r9, 0x20(%r1) 34 | stw %r10, 0x24(%r1) 35 | beq- _1abf8 36 | addi %r4, %r1, 0x198 37 | addi %r0, %r1, 0x8 38 | lis %r3, 0x400 39 | stw %r3, 0x68(%r1) 40 | addi %r6, %r1, 0x68 41 | mr %r5, %r12 42 | stw %r4, 0x6c(%r1) 43 | addi %r3, %r1, 0x78 44 | li %r4, 0x100 45 | stw %r0, 0x70(%r1) 46 | bl sub_9a0c 47 | cmpwi %r3, 0x0 48 | ble- _1abf8 49 | mr %r3, %r29 50 | mr %r4, %r30 51 | mr %r6, %r31 52 | addi %r5, %r1, 0x78 53 | li %r7, 0x0 54 | bl sub_1ac20 55 | _1abf8: 56 | lwz %r0, 0x194(%r1) 57 | lwz %r31, 0x18c(%r1) 58 | lwz %r30, 0x188(%r1) 59 | lwz %r29, 0x184(%r1) 60 | mtlr %r0 61 | addi %r1, %r1, 0x190 62 | blr 63 | 64 | -------------------------------------------------------------------------------- /maindol/text_1ac20.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1ac20 3 | sub_1ac20: # 0x80021ee0 4 | stwu %r1, -0x30(%r1) 5 | mflr %r0 6 | stw %r0, 0x34(%r1) 7 | addi %r11, %r1, 0x30 8 | bl sub_19774 9 | lis %r8, 0x802a 10 | mr %r25, %r3 11 | addi %r8, %r8, 0x28f8 12 | lis %r3, 0x2aab 13 | lhz %r8, 0x8(%r8) 14 | li %r0, 0x190 15 | mr %r26, %r4 16 | mr %r27, %r5 17 | subfc %r0, %r0, %r8 18 | mr %r28, %r6 19 | subfe %r4, %r0, %r0 20 | mr %r29, %r7 21 | addi %r0, %r4, 0x2 22 | mr %r31, %r25 23 | divw %r30, %r8, %r0 24 | subi %r24, %r3, 0x5555 25 | b _1ad50 26 | _1ac78: 27 | cmpwi %r29, 0x0 28 | beq- _1acd4 29 | mr %r3, %r27 30 | li %r4, 0x0 31 | _1ac88: 32 | lbz %r0, 0x0(%r3) 33 | addi %r3, %r3, 0x1 34 | extsb. %r0, %r0 35 | beq- _1acbc 36 | cmpwi %r0, 0xa 37 | beq- _1acbc 38 | cmpwi %r0, 0x9 39 | bne- _1acb4 40 | addi %r0, %r4, 0x4 41 | clrrwi %r4, %r0, 2 42 | b _1ac88 43 | _1acb4: 44 | addi %r4, %r4, 0x1 45 | b _1ac88 46 | _1acbc: 47 | addi %r0, %r4, 0x2 48 | subi %r3, %r25, 0x6 49 | mulli %r5, %r0, 0x6 50 | subi %r4, %r26, 0x3 51 | li %r6, 0xd 52 | bl sub_1a940 53 | _1acd4: 54 | subf %r0, %r25, %r30 55 | mr %r3, %r25 56 | mulhw %r6, %r24, %r0 57 | mr %r4, %r26 58 | mr %r5, %r27 59 | srwi %r0, %r6, 31 60 | add %r6, %r6, %r0 61 | bl sub_1ad80 62 | lbz %r0, 0x0(%r3) 63 | mr %r27, %r3 64 | addi %r26, %r26, 0xa 65 | extsb %r0, %r0 66 | cmpwi %r0, 0xa 67 | bne- _1ad18 68 | mr %r25, %r31 69 | addi %r27, %r3, 0x1 70 | b _1ad50 71 | _1ad18: 72 | cmpwi %r0, 0x0 73 | beq- _1ad50 74 | cmpwi %r28, 0x0 75 | addi %r27, %r3, 0x1 76 | bne- _1ad4c 77 | mr %r3, %r27 78 | li %r4, 0xa 79 | bl sub_b5d8 80 | cmpwi %r3, 0x0 81 | beq- _1ad5c 82 | mr %r25, %r31 83 | addi %r27, %r3, 0x1 84 | b _1ad50 85 | _1ad4c: 86 | li %r25, 0x0 87 | _1ad50: 88 | lbz %r0, 0x0(%r27) 89 | extsb. %r0, %r0 90 | bne+ _1ac78 91 | _1ad5c: 92 | addi %r11, %r1, 0x30 93 | bl sub_197c0 94 | lwz %r0, 0x34(%r1) 95 | mtlr %r0 96 | addi %r1, %r1, 0x30 97 | blr 98 | 99 | -------------------------------------------------------------------------------- /maindol/text_1ad80.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1ad80 3 | sub_1ad80: # 0x80022040 4 | stwu %r1, -0x20(%r1) 5 | mflr %r0 6 | stw %r0, 0x24(%r1) 7 | addi %r11, %r1, 0x20 8 | bl sub_1977c 9 | lis %r31, 0x8024 10 | mr %r26, %r3 11 | mr %r27, %r4 12 | mr %r28, %r5 13 | mr %r29, %r6 14 | addi %r31, %r31, 0x6db0 15 | li %r30, 0x0 16 | b _1ae34 17 | _1adb4: 18 | cmpwi %r0, 0xa 19 | beq- _1adc4 20 | cmpwi %r0, 0x0 21 | bne- _1adcc 22 | _1adc4: 23 | mr %r3, %r28 24 | b _1ae44 25 | _1adcc: 26 | clrlwi %r0, %r0, 25 27 | lbzx %r5, %r31, %r0 28 | cmpwi %r5, 0xfd 29 | bne- _1adf4 30 | clrlwi %r0, %r30, 30 31 | subfic %r3, %r0, 0x4 32 | mulli %r0, %r3, 0x6 33 | add %r30, %r30, %r3 34 | add %r26, %r26, %r0 35 | b _1ae10 36 | _1adf4: 37 | cmpwi %r5, 0xff 38 | beq- _1ae08 39 | mr %r3, %r26 40 | mr %r4, %r27 41 | bl sub_1ae60 42 | _1ae08: 43 | addi %r26, %r26, 0x6 44 | addi %r30, %r30, 0x1 45 | _1ae10: 46 | cmpw %r30, %r29 47 | blt- _1ae30 48 | lbz %r0, 0x1(%r28) 49 | cmpwi %r0, 0xa 50 | bne- _1ae28 51 | addi %r28, %r28, 0x1 52 | _1ae28: 53 | mr %r3, %r28 54 | b _1ae44 55 | _1ae30: 56 | addi %r28, %r28, 0x1 57 | _1ae34: 58 | lbz %r0, 0x0(%r28) 59 | extsb. %r0, %r0 60 | bne+ _1adb4 61 | mr %r3, %r28 62 | _1ae44: 63 | addi %r11, %r1, 0x20 64 | bl sub_197c8 65 | lwz %r0, 0x24(%r1) 66 | mtlr %r0 67 | addi %r1, %r1, 0x20 68 | blr 69 | 70 | -------------------------------------------------------------------------------- /maindol/text_1ae60.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1ae60 3 | sub_1ae60: # 0x80022120 4 | stwu %r1, -0x20(%r1) 5 | mflr %r0 6 | stw %r0, 0x24(%r1) 7 | addi %r11, %r1, 0x20 8 | bl sub_1977c 9 | cmpwi %r5, 0x64 10 | mr %r8, %r5 11 | blt- _1ae84 12 | subi %r8, %r5, 0x64 13 | _1ae84: 14 | lis %r7, 0x6666 15 | lis %r6, 0x8024 16 | addi %r0, %r7, 0x6667 17 | cmpwi %r5, 0x64 18 | mulhw %r0, %r0, %r8 19 | addi %r6, %r6, 0x6f30 20 | srawi %r5, %r0, 1 21 | srwi %r7, %r5, 31 22 | srawi %r0, %r0, 1 23 | add %r5, %r5, %r7 24 | mulli %r7, %r5, 0x5 25 | srwi %r5, %r0, 31 26 | add %r5, %r0, %r5 27 | subf %r7, %r7, %r8 28 | slwi %r0, %r5, 3 29 | subf %r0, %r5, %r0 30 | slwi %r0, %r0, 2 31 | mulli %r9, %r7, 0x6 32 | add %r10, %r6, %r0 33 | bge- _1aee0 34 | lis %r5, 0x8024 35 | addi %r5, %r5, 0x6e30 36 | add %r10, %r5, %r0 37 | _1aee0: 38 | lis %r12, 0x802a 39 | li %r6, 0x190 40 | addi %r5, %r12, 0x28f8 41 | li %r0, 0x12c 42 | lhz %r28, 0x8(%r5) 43 | cmpwi %r4, 0x0 44 | lhz %r7, 0xa(%r5) 45 | subfc %r6, %r6, %r28 46 | lhz %r8, 0xc(%r5) 47 | subfe %r11, %r6, %r6 48 | lwz %r12, 0x28f8(%r12) 49 | subfc %r0, %r0, %r7 50 | subfe %r6, %r0, %r0 51 | addi %r6, %r6, 0x2 52 | addi %r0, %r11, 0x2 53 | mullw %r11, %r6, %r4 54 | mullw %r8, %r11, %r8 55 | mullw %r11, %r3, %r0 56 | slwi %r8, %r8, 1 57 | add %r8, %r12, %r8 58 | slwi %r11, %r11, 1 59 | add %r11, %r11, %r8 60 | blt- _1b108 61 | cmpwi %r3, 0x0 62 | bge- _1af48 63 | b _1b108 64 | _1af48: 65 | addi %r3, %r3, 0x6 66 | mullw %r3, %r0, %r3 67 | cmpw %r28, %r3 68 | ble- _1b108 69 | addi %r3, %r4, 0x7 70 | mullw %r3, %r6, %r3 71 | cmpw %r7, %r3 72 | bgt- _1af6c 73 | b _1b108 74 | _1af6c: 75 | mulli %r7, %r0, 0x6 76 | lis %r3, 0x802a 77 | lis %r4, 0x8027 78 | addi %r3, %r3, 0x2908 79 | subi %r4, %r4, 0x2788 80 | li %r12, 0x0 81 | ori %r0, %r0, 0x0 82 | _1af88: 83 | lwz %r8, 0x0(%r10) 84 | cmpwi %r0, 0x1 85 | addi %r10, %r10, 0x4 86 | slw %r26, %r8, %r9 87 | bne- _1afa4 88 | rlwinm %r8, %r26, 31, 1, 6 89 | b _1afd0 90 | _1afa4: 91 | rlwinm %r8, %r26, 6, 28, 29 92 | rlwinm %r31, %r26, 4, 28, 29 93 | rlwinm %r30, %r26, 8, 28, 29 94 | lwzx %r8, %r4, %r8 95 | lwzx %r31, %r4, %r31 96 | lwzx %r30, %r4, %r30 97 | slwi %r8, %r8, 4 98 | slwi %r31, %r31, 8 99 | or %r8, %r30, %r8 100 | or %r8, %r31, %r8 101 | slwi %r8, %r8, 19 102 | _1afd0: 103 | addi %r31, %r7, 0x1 104 | srwi %r31, %r31, 1 105 | mtctr %r31 106 | cmpwi %r7, 0x0 107 | ble- _1b0e8 108 | ori %r0, %r0, 0x0 109 | _1afe8: 110 | rlwinm. %r27, %r8, 0, 1, 1 111 | beq- _1aff8 112 | lhz %r29, 0x8(%r3) 113 | b _1affc 114 | _1aff8: 115 | li %r29, 0x40 116 | _1affc: 117 | clrrwi. %r30, %r8, 31 118 | beq- _1b00c 119 | lhz %r30, 0xa(%r3) 120 | b _1b010 121 | _1b00c: 122 | li %r30, 0x20 123 | _1b010: 124 | rlwinm. %r26, %r8, 0, 2, 2 125 | beq- _1b020 126 | lhz %r28, 0xa(%r3) 127 | b _1b024 128 | _1b020: 129 | li %r28, 0x20 130 | _1b024: 131 | cmpwi %r27, 0x0 132 | beq- _1b034 133 | lhz %r31, 0x4(%r3) 134 | b _1b038 135 | _1b034: 136 | li %r31, 0x0 137 | _1b038: 138 | add %r30, %r28, %r30 139 | cmpwi %r6, 0x1 140 | add %r30, %r29, %r30 141 | or %r30, %r31, %r30 142 | sth %r30, 0x0(%r11) 143 | clrlwi %r28, %r30, 16 144 | ble- _1b060 145 | lhz %r30, 0xc(%r5) 146 | slwi %r30, %r30, 1 147 | sthx %r28, %r11, %r30 148 | _1b060: 149 | cmpwi %r26, 0x0 150 | beq- _1b070 151 | lhz %r28, 0xe(%r3) 152 | b _1b074 153 | _1b070: 154 | li %r28, 0x40 155 | _1b074: 156 | cmpwi %r27, 0x0 157 | beq- _1b084 158 | lhz %r29, 0x10(%r3) 159 | b _1b088 160 | _1b084: 161 | li %r29, 0x20 162 | _1b088: 163 | rlwinm. %r30, %r8, 0, 3, 3 164 | beq- _1b098 165 | lhz %r31, 0x10(%r3) 166 | b _1b09c 167 | _1b098: 168 | li %r31, 0x20 169 | _1b09c: 170 | cmpwi %r26, 0x0 171 | beq- _1b0ac 172 | lhz %r30, 0x4(%r3) 173 | b _1b0b0 174 | _1b0ac: 175 | li %r30, 0x0 176 | _1b0b0: 177 | add %r31, %r31, %r29 178 | cmpwi %r6, 0x1 179 | add %r31, %r28, %r31 180 | or %r31, %r30, %r31 181 | sth %r31, 0x2(%r11) 182 | clrlwi %r26, %r31, 16 183 | ble- _1b0dc 184 | lhz %r31, 0xc(%r5) 185 | slwi %r31, %r31, 1 186 | add %r31, %r11, %r31 187 | sth %r26, 0x2(%r31) 188 | _1b0dc: 189 | slwi %r8, %r8, 2 190 | addi %r11, %r11, 0x4 191 | bdnz+ _1afe8 192 | _1b0e8: 193 | lhz %r8, 0xc(%r5) 194 | addi %r12, %r12, 0x1 195 | cmpwi %r12, 0x7 196 | mullw %r8, %r8, %r6 197 | subf %r8, %r7, %r8 198 | slwi %r8, %r8, 1 199 | add %r11, %r11, %r8 200 | blt+ _1af88 201 | _1b108: 202 | addi %r11, %r1, 0x20 203 | bl sub_197c8 204 | lwz %r0, 0x24(%r1) 205 | mtlr %r0 206 | addi %r1, %r1, 0x20 207 | blr 208 | 209 | .global sub_1b120 210 | sub_1b120: # 0x800223e0 211 | stwu %r1, -0x20(%r1) 212 | mflr %r0 213 | stw %r0, 0x24(%r1) 214 | stw %r31, 0x1c(%r1) 215 | mr %r31, %r3 216 | stw %r30, 0x18(%r1) 217 | stw %r29, 0x14(%r1) 218 | stw %r28, 0x10(%r1) 219 | lwz %r0, -0x6b50(%r13) 220 | cmpwi %r0, 0x0 221 | bne- _1b1d0 222 | li %r30, 0x280 223 | li %r11, 0x1e0 224 | mullw %r0, %r30, %r11 225 | lis %r29, 0x802a 226 | lis %r8, 0x802a 227 | addi %r12, %r29, 0x28f8 228 | lis %r6, 0x1 229 | sth %r30, 0x8(%r12) 230 | slwi %r10, %r0, 1 231 | li %r28, 0x0 232 | li %r9, 0xff 233 | addi %r7, %r8, 0x2908 234 | li %r5, 0x7f 235 | li %r4, 0x3f 236 | li %r3, 0x1f 237 | subi %r6, %r6, 0x1500 238 | li %r0, 0x1 239 | stw %r28, 0x28f8(%r29) 240 | sth %r11, 0xa(%r12) 241 | sth %r30, 0xc(%r12) 242 | stw %r10, 0x4(%r12) 243 | stb %r9, 0x2908(%r8) 244 | stb %r9, 0x1(%r7) 245 | stb %r9, 0x2(%r7) 246 | stb %r9, 0x3(%r7) 247 | sth %r6, 0x4(%r7) 248 | sth %r5, 0x6(%r7) 249 | sth %r4, 0x8(%r7) 250 | sth %r3, 0xa(%r7) 251 | sth %r5, 0xc(%r7) 252 | sth %r4, 0xe(%r7) 253 | sth %r3, 0x10(%r7) 254 | stw %r0, -0x6b50(%r13) 255 | _1b1d0: 256 | bl sub_1b37c4 257 | cmpwi %r3, 0x0 258 | mr %r29, %r3 259 | bne- _1b270 260 | cmpwi %r31, 0x0 261 | bne- _1b23c 262 | bl sub_1b3978 263 | cmpwi %r3, 0x0 264 | beq- _1b210 265 | cmplwi %r3, 0x1 266 | beq- _1b21c 267 | cmplwi %r3, 0x5 268 | beq- _1b228 269 | cmplwi %r3, 0x2 270 | beq- _1b234 271 | b _1b23c 272 | _1b210: 273 | lis %r31, 0x8028 274 | addi %r31, %r31, 0x5f08 275 | b _1b23c 276 | _1b21c: 277 | lis %r31, 0x8028 278 | addi %r31, %r31, 0x5fbc 279 | b _1b23c 280 | _1b228: 281 | lis %r31, 0x8028 282 | addi %r31, %r31, 0x5ff8 283 | b _1b23c 284 | _1b234: 285 | lis %r31, 0x8028 286 | addi %r31, %r31, 0x5f80 287 | _1b23c: 288 | bl sub_199d54 289 | lhz %r4, 0x4(%r31) 290 | lhz %r0, 0x8(%r31) 291 | addi %r4, %r4, 0xf 292 | rlwinm %r4, %r4, 0, 16, 27 293 | mullw %r0, %r4, %r0 294 | slwi %r0, %r0, 1 295 | subf %r0, %r0, %r3 296 | mr %r3, %r31 297 | clrrwi %r29, %r0, 5 298 | bl sub_1b2c0c 299 | mr %r3, %r29 300 | bl sub_1b3758 301 | _1b270: 302 | li %r3, 0x0 303 | bl sub_1b37cc 304 | bl sub_1b3644 305 | bl sub_19f260 306 | mr %r28, %r3 307 | bl sub_1b3844 308 | mr %r30, %r3 309 | _1b28c: 310 | bl sub_1b3844 311 | cmplw %r30, %r3 312 | beq+ _1b28c 313 | mr %r3, %r28 314 | bl sub_19f274 315 | cmpwi %r31, 0x0 316 | beq- _1b2e0 317 | lhz %r6, 0x4(%r31) 318 | lis %r5, 0x802a 319 | lhz %r7, 0x8(%r31) 320 | addi %r4, %r5, 0x28f8 321 | addi %r0, %r6, 0xf 322 | sth %r7, 0xa(%r4) 323 | rlwinm %r3, %r0, 0, 16, 27 324 | mullw %r0, %r3, %r7 325 | stw %r29, 0x28f8(%r5) 326 | sth %r6, 0x8(%r4) 327 | sth %r3, 0xc(%r4) 328 | slwi %r0, %r0, 1 329 | stw %r0, 0x4(%r4) 330 | b _1b2e8 331 | _1b2e0: 332 | lis %r3, 0x802a 333 | stw %r29, 0x28f8(%r3) 334 | _1b2e8: 335 | lwz %r31, 0x1c(%r1) 336 | mr %r3, %r29 337 | lwz %r30, 0x18(%r1) 338 | lwz %r29, 0x14(%r1) 339 | lwz %r28, 0x10(%r1) 340 | lwz %r0, 0x24(%r1) 341 | mtlr %r0 342 | addi %r1, %r1, 0x20 343 | blr 344 | 345 | -------------------------------------------------------------------------------- /maindol/text_1b310.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global t1_1b30c 3 | t1_1b30c: 4 | .incbin "basemain.dol", 0x1d870, 0x290 5 | 6 | .global sub_1b5a0 7 | sub_1b5a0: # 0x80022860 8 | stwu %r1, -0x20(%r1) 9 | mflr %r0 10 | stw %r0, 0x24(%r1) 11 | addi %r11, %r1, 0x20 12 | bl sub_19780 13 | mr %r27, %r3 14 | mr %r28, %r4 15 | bl sub_1a2550 16 | cmpwi %r3, 0x0 17 | beq- _1b5d4 18 | lis %r3, 0x802a 19 | addi %r3, %r3, 0x2920 20 | bl sub_1a0b84 21 | _1b5d4: 22 | lwz %r3, 0x14(%r27) 23 | li %r30, 0x0 24 | lwz %r0, 0x18(%r27) 25 | subf. %r4, %r3, %r0 26 | bge- _1b5f0 27 | li %r4, 0x0 28 | b _1b628 29 | _1b5f0: 30 | lhz %r3, 0x10(%r27) 31 | lhz %r0, 0xc(%r27) 32 | subf. %r3, %r3, %r0 33 | bge- _1b608 34 | lhz %r0, 0x6(%r27) 35 | add %r3, %r3, %r0 36 | _1b608: 37 | lhz %r0, 0xe(%r27) 38 | clrlwi %r3, %r3, 16 39 | cmpwi %r0, 0x0 40 | beq- _1b620 41 | addi %r0, %r3, 0x1 42 | clrlwi %r3, %r0, 16 43 | _1b620: 44 | cmpw %r4, %r3 45 | bgt- _1b714 46 | _1b628: 47 | lhz %r0, 0x10(%r27) 48 | lhz %r5, 0x6(%r27) 49 | add %r0, %r0, %r4 50 | clrlwi %r31, %r0, 16 51 | cmplw %r31, %r5 52 | blt- _1b648 53 | subf %r0, %r5, %r31 54 | clrlwi %r31, %r0, 16 55 | _1b648: 56 | lhz %r3, 0xe(%r27) 57 | lhz %r4, 0xc(%r27) 58 | neg %r0, %r3 59 | or %r0, %r0, %r3 60 | srwi %r0, %r0, 31 61 | add %r0, %r4, %r0 62 | clrlwi %r29, %r0, 16 63 | cmplw %r29, %r5 64 | bne- _1b708 65 | li %r29, 0x0 66 | b _1b708 67 | _1b674: 68 | lhz %r3, 0x4(%r27) 69 | clrlwi %r0, %r31, 16 70 | cmpwi %r28, 0x0 71 | lwz %r4, 0x0(%r27) 72 | addi %r3, %r3, 0x1 73 | mullw %r0, %r3, %r0 74 | add %r5, %r4, %r0 75 | beq- _1b6a8 76 | mr %r3, %r28 77 | subi %r4, %r13, 0x7fb0 78 | crxor 6, 6, 6 79 | bl sub_ae720 80 | b _1b6d0 81 | _1b6a8: 82 | clrlwi %r0, %r30, 16 83 | mr %r7, %r5 84 | mulli %r0, %r0, 0xa 85 | lha %r4, 0x1e(%r27) 86 | lha %r3, 0x1c(%r27) 87 | li %r5, 0x0 88 | subi %r6, %r13, 0x7fb0 89 | add %r4, %r4, %r0 90 | crxor 6, 6, 6 91 | bl sub_1ab30 92 | _1b6d0: 93 | addi %r31, %r31, 0x1 94 | lhz %r0, 0x6(%r27) 95 | clrlwi %r3, %r31, 16 96 | addi %r30, %r30, 0x1 97 | cmplw %r3, %r0 98 | bne- _1b6f8 99 | lhz %r0, 0xa(%r27) 100 | rlwinm. %r0, %r0, 0, 30, 30 101 | bne- _1b714 102 | li %r31, 0x0 103 | _1b6f8: 104 | lhz %r0, 0x20(%r27) 105 | clrlwi %r3, %r30, 16 106 | cmplw %r3, %r0 107 | bge- _1b714 108 | _1b708: 109 | clrlwi %r0, %r31, 16 110 | cmplw %r0, %r29 111 | bne+ _1b674 112 | _1b714: 113 | bl sub_1a2550 114 | cmpwi %r3, 0x0 115 | beq- _1b72c 116 | lis %r3, 0x802a 117 | addi %r3, %r3, 0x2920 118 | bl sub_1a0c60 119 | _1b72c: 120 | addi %r11, %r1, 0x20 121 | bl sub_197cc 122 | lwz %r0, 0x24(%r1) 123 | mtlr %r0 124 | addi %r1, %r1, 0x20 125 | blr 126 | 127 | -------------------------------------------------------------------------------- /maindol/text_1b750.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1b750 3 | sub_1b750: # 0x80022a10 4 | stwu %r1, -0x10(%r1) 5 | mflr %r0 6 | stw %r0, 0x14(%r1) 7 | stw %r31, 0xc(%r1) 8 | mr %r31, %r3 9 | bl sub_1a910 10 | cmpwi %r3, 0x0 11 | beq- _1b7b8 12 | lbz %r0, 0x22(%r31) 13 | cmpwi %r0, 0x0 14 | beq- _1b7b8 15 | lhz %r3, 0x4(%r31) 16 | lhz %r0, 0x20(%r31) 17 | mulli %r5, %r3, 0x6 18 | lha %r3, 0x1c(%r31) 19 | lha %r4, 0x1e(%r31) 20 | subi %r3, %r3, 0x6 21 | mulli %r6, %r0, 0xa 22 | subi %r4, %r4, 0x3 23 | addi %r5, %r5, 0xc 24 | addi %r6, %r6, 0x4 25 | bl sub_1a940 26 | mr %r3, %r31 27 | li %r4, 0x0 28 | bl sub_1b5a0 29 | bl sub_1ab10 30 | _1b7b8: 31 | lwz %r0, 0x14(%r1) 32 | lwz %r31, 0xc(%r1) 33 | mtlr %r0 34 | addi %r1, %r1, 0x10 35 | blr 36 | 37 | -------------------------------------------------------------------------------- /maindol/text_1b7d0.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1b7d0 3 | sub_1b7d0: # 0x80022a90 4 | stwu %r1, -0x20(%r1) 5 | mflr %r0 6 | stw %r0, 0x24(%r1) 7 | stw %r31, 0x1c(%r1) 8 | mr %r31, %r4 9 | stw %r30, 0x18(%r1) 10 | mr %r30, %r3 11 | stw %r29, 0x14(%r1) 12 | bl sub_19f24c 13 | lhz %r5, 0x4(%r30) 14 | li %r4, 0x20 15 | lhz %r0, 0xc(%r30) 16 | li %r10, 0x0 17 | addi %r5, %r5, 0x1 18 | lwz %r6, 0x0(%r30) 19 | mullw %r7, %r5, %r0 20 | lhz %r0, 0xe(%r30) 21 | li %r5, 0x2 22 | add %r6, %r6, %r0 23 | li %r0, 0x81 24 | add %r6, %r7, %r6 25 | b _1bb48 26 | _1b828: 27 | lhz %r7, 0xa(%r30) 28 | rlwinm. %r7, %r7, 0, 30, 30 29 | beq- _1bb3c 30 | lhz %r8, 0xc(%r30) 31 | lhz %r7, 0x6(%r30) 32 | cmplw %r8, %r7 33 | beq- _1bb54 34 | b _1bb3c 35 | _1b848: 36 | cmpwi %r9, 0xa 37 | li %r7, 0x0 38 | bne- _1b8fc 39 | lhz %r7, 0x4(%r30) 40 | addi %r31, %r31, 0x1 41 | lhz %r6, 0xc(%r30) 42 | addi %r7, %r7, 0x1 43 | lwz %r8, 0x0(%r30) 44 | mullw %r7, %r7, %r6 45 | lhz %r6, 0xe(%r30) 46 | add %r6, %r8, %r6 47 | stbx %r10, %r7, %r6 48 | lhz %r7, 0xc(%r30) 49 | lhz %r6, 0x6(%r30) 50 | addi %r8, %r7, 0x1 51 | sth %r10, 0xe(%r30) 52 | clrlwi %r7, %r8, 16 53 | cmplw %r7, %r6 54 | sth %r8, 0xc(%r30) 55 | bne- _1b8a8 56 | lhz %r6, 0xa(%r30) 57 | rlwinm. %r6, %r6, 0, 30, 30 58 | bne- _1b8a8 59 | sth %r10, 0xc(%r30) 60 | _1b8a8: 61 | lhz %r7, 0xc(%r30) 62 | lhz %r6, 0x10(%r30) 63 | cmplw %r7, %r6 64 | bne- _1b8e0 65 | addi %r8, %r6, 0x1 66 | lhz %r6, 0x6(%r30) 67 | clrlwi %r7, %r8, 16 68 | lwz %r9, 0x14(%r30) 69 | cmplw %r7, %r6 70 | sth %r8, 0x10(%r30) 71 | addi %r6, %r9, 0x1 72 | stw %r6, 0x14(%r30) 73 | bne- _1b8e0 74 | sth %r10, 0x10(%r30) 75 | _1b8e0: 76 | lhz %r7, 0x4(%r30) 77 | lhz %r6, 0xc(%r30) 78 | addi %r7, %r7, 0x1 79 | lwz %r8, 0x0(%r30) 80 | mullw %r6, %r7, %r6 81 | add %r6, %r8, %r6 82 | b _1bb48 83 | _1b8fc: 84 | cmpwi %r9, 0x9 85 | bne- _1b948 86 | lhz %r8, 0xa(%r30) 87 | addi %r31, %r31, 0x1 88 | extrwi %r8, %r8, 2, 28 89 | slw %r8, %r5, %r8 90 | subi %r9, %r8, 0x1 91 | _1b918: 92 | stb %r4, 0x0(%r6) 93 | addi %r6, %r6, 0x1 94 | lhz %r11, 0xe(%r30) 95 | lhz %r8, 0x4(%r30) 96 | addi %r11, %r11, 0x1 97 | sth %r11, 0xe(%r30) 98 | clrlwi %r11, %r11, 16 99 | cmplw %r11, %r8 100 | bge- _1ba24 101 | and. %r8, %r11, %r9 102 | bne+ _1b918 103 | b _1ba24 104 | _1b948: 105 | subi %r8, %r9, 0x81 106 | .4byte 0x7d2b0338 107 | srwi %r8, %r8, 1 108 | lhz %r9, 0xe(%r30) 109 | subf %r11, %r8, %r11 110 | lhz %r8, 0x4(%r30) 111 | srwi %r11, %r11, 31 112 | mr %r12, %r6 113 | addi %r29, %r11, 0x1 114 | add %r9, %r9, %r29 115 | mr %r11, %r31 116 | cmplw %r9, %r8 117 | ble- _1b984 118 | li %r29, 0x0 119 | b _1ba0c 120 | _1b984: 121 | cmpwi %r29, 0x0 122 | sth %r9, 0xe(%r30) 123 | mr %r9, %r29 124 | beq- _1ba0c 125 | srwi. %r8, %r29, 3 126 | mtctr %r8 127 | beq- _1b9f4 128 | _1b9a0: 129 | lbz %r8, 0x0(%r11) 130 | stb %r8, 0x0(%r12) 131 | lbz %r8, 0x1(%r11) 132 | stb %r8, 0x1(%r12) 133 | lbz %r8, 0x2(%r11) 134 | stb %r8, 0x2(%r12) 135 | lbz %r8, 0x3(%r11) 136 | stb %r8, 0x3(%r12) 137 | lbz %r8, 0x4(%r11) 138 | stb %r8, 0x4(%r12) 139 | lbz %r8, 0x5(%r11) 140 | stb %r8, 0x5(%r12) 141 | lbz %r8, 0x6(%r11) 142 | stb %r8, 0x6(%r12) 143 | lbz %r8, 0x7(%r11) 144 | addi %r11, %r11, 0x8 145 | stb %r8, 0x7(%r12) 146 | addi %r12, %r12, 0x8 147 | bdnz+ _1b9a0 148 | andi. %r9, %r29, 0x7 149 | beq- _1ba0c 150 | _1b9f4: 151 | mtctr %r9 152 | _1b9f8: 153 | lbz %r8, 0x0(%r11) 154 | addi %r11, %r11, 0x1 155 | stb %r8, 0x0(%r12) 156 | addi %r12, %r12, 0x1 157 | bdnz+ _1b9f8 158 | _1ba0c: 159 | cmpwi %r29, 0x0 160 | beq- _1ba20 161 | add %r31, %r31, %r29 162 | add %r6, %r6, %r29 163 | b _1ba24 164 | _1ba20: 165 | li %r7, 0x1 166 | _1ba24: 167 | lhz %r8, 0x4(%r30) 168 | lhz %r11, 0xe(%r30) 169 | cmplw %r11, %r8 170 | blt- _1ba38 171 | li %r7, 0x1 172 | _1ba38: 173 | cmpwi %r7, 0x0 174 | beq- _1bb18 175 | lhz %r7, 0xa(%r30) 176 | clrlwi. %r7, %r7, 31 177 | beq- _1ba6c 178 | b _1ba54 179 | _1ba50: 180 | addi %r31, %r31, 0x1 181 | _1ba54: 182 | lbz %r7, 0x0(%r31) 183 | cmpwi %r7, 0xa 184 | beq- _1bb48 185 | cmpwi %r7, 0x0 186 | bne+ _1ba50 187 | b _1bb48 188 | _1ba6c: 189 | lbz %r6, 0x0(%r31) 190 | cmpwi %r6, 0xa 191 | bne- _1ba7c 192 | addi %r31, %r31, 0x1 193 | _1ba7c: 194 | lhz %r6, 0xc(%r30) 195 | addi %r7, %r8, 0x1 196 | lwz %r8, 0x0(%r30) 197 | mullw %r7, %r7, %r6 198 | add %r6, %r8, %r11 199 | stbx %r10, %r7, %r6 200 | lhz %r7, 0xc(%r30) 201 | lhz %r6, 0x6(%r30) 202 | addi %r8, %r7, 0x1 203 | sth %r10, 0xe(%r30) 204 | clrlwi %r7, %r8, 16 205 | cmplw %r7, %r6 206 | sth %r8, 0xc(%r30) 207 | bne- _1bac4 208 | lhz %r6, 0xa(%r30) 209 | rlwinm. %r6, %r6, 0, 30, 30 210 | bne- _1bac4 211 | sth %r10, 0xc(%r30) 212 | _1bac4: 213 | lhz %r7, 0xc(%r30) 214 | lhz %r6, 0x10(%r30) 215 | cmplw %r7, %r6 216 | bne- _1bafc 217 | addi %r8, %r6, 0x1 218 | lhz %r6, 0x6(%r30) 219 | clrlwi %r7, %r8, 16 220 | lwz %r9, 0x14(%r30) 221 | cmplw %r7, %r6 222 | sth %r8, 0x10(%r30) 223 | addi %r6, %r9, 0x1 224 | stw %r6, 0x14(%r30) 225 | bne- _1bafc 226 | sth %r10, 0x10(%r30) 227 | _1bafc: 228 | lhz %r7, 0x4(%r30) 229 | lhz %r6, 0xc(%r30) 230 | addi %r7, %r7, 0x1 231 | lwz %r8, 0x0(%r30) 232 | mullw %r6, %r7, %r6 233 | add %r6, %r8, %r6 234 | b _1bb48 235 | _1bb18: 236 | lbz %r7, 0x0(%r31) 237 | cmpwi %r7, 0x0 238 | bne- _1bb3c 239 | lhz %r7, 0xc(%r30) 240 | addi %r8, %r8, 0x1 241 | lwz %r9, 0x0(%r30) 242 | mullw %r8, %r8, %r7 243 | add %r7, %r9, %r11 244 | stbx %r10, %r8, %r7 245 | _1bb3c: 246 | lbz %r9, 0x0(%r31) 247 | cmpwi %r9, 0x0 248 | bne+ _1b848 249 | _1bb48: 250 | lbz %r7, 0x0(%r31) 251 | cmpwi %r7, 0x0 252 | bne+ _1b828 253 | _1bb54: 254 | bl sub_19f274 255 | lwz %r0, 0x24(%r1) 256 | lwz %r31, 0x1c(%r1) 257 | lwz %r30, 0x18(%r1) 258 | lwz %r29, 0x14(%r1) 259 | mtlr %r0 260 | addi %r1, %r1, 0x20 261 | blr 262 | 263 | -------------------------------------------------------------------------------- /maindol/text_1bb80.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1bb80 3 | sub_1bb80: # 0x80022e40 4 | stwu %r1, -0x20(%r1) 5 | mflr %r0 6 | stw %r0, 0x24(%r1) 7 | addi %r11, %r1, 0x20 8 | bl sub_19780 9 | mr %r27, %r3 10 | mr %r28, %r4 11 | mr %r29, %r5 12 | mr %r30, %r6 13 | bl sub_1a2550 14 | cmpwi %r3, 0x0 15 | beq- _1bbc4 16 | lis %r3, 0x802a 17 | addi %r3, %r3, 0x2920 18 | bl sub_1a0b84 19 | li %r0, 0x1 20 | b _1bbd8 21 | _1bbc4: 22 | lis %r3, 0x802a 23 | addi %r3, %r3, 0x2920 24 | lwz %r0, 0x8(%r3) 25 | cntlzw %r0, %r0 26 | srwi %r0, %r0, 5 27 | _1bbd8: 28 | cmpwi %r0, 0x0 29 | beq- _1bc40 30 | lis %r31, 0x802a 31 | mr %r5, %r29 32 | mr %r6, %r30 33 | li %r4, 0x400 34 | addi %r3, %r31, 0x2938 35 | bl sub_9a0c 36 | rlwinm. %r0, %r27, 0, 30, 30 37 | beq- _1bc10 38 | addi %r4, %r31, 0x2938 39 | subi %r3, %r13, 0x7fac 40 | crxor 6, 6, 6 41 | bl sub_19b270 42 | _1bc10: 43 | clrlwi. %r0, %r27, 31 44 | beq- _1bc28 45 | lis %r4, 0x802a 46 | mr %r3, %r28 47 | addi %r4, %r4, 0x2938 48 | bl sub_1b7d0 49 | _1bc28: 50 | bl sub_1a2550 51 | cmpwi %r3, 0x0 52 | beq- _1bc40 53 | lis %r3, 0x802a 54 | addi %r3, %r3, 0x2920 55 | bl sub_1a0c60 56 | _1bc40: 57 | addi %r11, %r1, 0x20 58 | bl sub_197cc 59 | lwz %r0, 0x24(%r1) 60 | mtlr %r0 61 | addi %r1, %r1, 0x20 62 | blr 63 | 64 | -------------------------------------------------------------------------------- /maindol/text_1bc60.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1bc60 3 | sub_1bc60: # 0x80022f20 4 | stwu %r1, -0x90(%r1) 5 | mflr %r0 6 | stw %r0, 0x94(%r1) 7 | stw %r31, 0x8c(%r1) 8 | stw %r30, 0x88(%r1) 9 | mr %r30, %r4 10 | stw %r29, 0x84(%r1) 11 | mr %r29, %r3 12 | bne- cr1, _1bca4 13 | stfd %f1, 0x28(%r1) 14 | stfd %f2, 0x30(%r1) 15 | stfd %f3, 0x38(%r1) 16 | stfd %f4, 0x40(%r1) 17 | stfd %f5, 0x48(%r1) 18 | stfd %f6, 0x50(%r1) 19 | stfd %f7, 0x58(%r1) 20 | stfd %f8, 0x60(%r1) 21 | _1bca4: 22 | addi %r11, %r1, 0x98 23 | addi %r0, %r1, 0x8 24 | lis %r12, 0x200 25 | stw %r3, 0x8(%r1) 26 | stw %r4, 0xc(%r1) 27 | stw %r5, 0x10(%r1) 28 | stw %r6, 0x14(%r1) 29 | stw %r7, 0x18(%r1) 30 | stw %r8, 0x1c(%r1) 31 | stw %r9, 0x20(%r1) 32 | stw %r10, 0x24(%r1) 33 | stw %r12, 0x68(%r1) 34 | stw %r11, 0x6c(%r1) 35 | stw %r0, 0x70(%r1) 36 | bl sub_1a2550 37 | cmpwi %r3, 0x0 38 | beq- _1bcfc 39 | lis %r3, 0x802a 40 | addi %r3, %r3, 0x2920 41 | bl sub_1a0b84 42 | li %r0, 0x1 43 | b _1bd10 44 | _1bcfc: 45 | lis %r3, 0x802a 46 | addi %r3, %r3, 0x2920 47 | lwz %r0, 0x8(%r3) 48 | cntlzw %r0, %r0 49 | srwi %r0, %r0, 5 50 | _1bd10: 51 | cmpwi %r0, 0x0 52 | beq- _1bd64 53 | lis %r31, 0x802a 54 | mr %r5, %r30 55 | addi %r3, %r31, 0x2938 56 | addi %r6, %r1, 0x68 57 | li %r4, 0x400 58 | bl sub_9a0c 59 | addi %r4, %r31, 0x2938 60 | subi %r3, %r13, 0x7fac 61 | crxor 6, 6, 6 62 | bl sub_19b270 63 | mr %r3, %r29 64 | addi %r4, %r31, 0x2938 65 | bl sub_1b7d0 66 | bl sub_1a2550 67 | cmpwi %r3, 0x0 68 | beq- _1bd64 69 | lis %r3, 0x802a 70 | addi %r3, %r3, 0x2920 71 | bl sub_1a0c60 72 | _1bd64: 73 | lwz %r0, 0x94(%r1) 74 | lwz %r31, 0x8c(%r1) 75 | lwz %r30, 0x88(%r1) 76 | lwz %r29, 0x84(%r1) 77 | mtlr %r0 78 | addi %r1, %r1, 0x90 79 | blr 80 | 81 | .global sub_1bd80 82 | sub_1bd80: # 0x80023040 83 | stwu %r1, -0x10(%r1) 84 | mflr %r0 85 | stw %r0, 0x14(%r1) 86 | stw %r31, 0xc(%r1) 87 | mr %r31, %r3 88 | bl sub_19f24c 89 | lhz %r4, 0x10(%r31) 90 | lhz %r0, 0xc(%r31) 91 | subf. %r4, %r4, %r0 92 | bge- _1bdb0 93 | lhz %r0, 0x6(%r31) 94 | add %r4, %r4, %r0 95 | _1bdb0: 96 | lhz %r0, 0xe(%r31) 97 | clrlwi %r4, %r4, 16 98 | cmpwi %r0, 0x0 99 | beq- _1bdc8 100 | addi %r0, %r4, 0x1 101 | clrlwi %r4, %r0, 16 102 | _1bdc8: 103 | lwz %r0, 0x14(%r31) 104 | add %r31, %r0, %r4 105 | bl sub_19f274 106 | mr %r3, %r31 107 | lwz %r31, 0xc(%r1) 108 | lwz %r0, 0x14(%r1) 109 | mtlr %r0 110 | addi %r1, %r1, 0x10 111 | blr 112 | 113 | -------------------------------------------------------------------------------- /maindol/text_1bdf0.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global t1_1bdf0 3 | t1_1bdf0: 4 | .incbin "basemain.dol", 0x1e350, 0x2bac 5 | 6 | -------------------------------------------------------------------------------- /maindol/text_1e9a0.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1e9a0 3 | sub_1e9a0: # 0x80025c60 4 | stwu %r1, -0x80(%r1) 5 | mflr %r0 6 | stw %r0, 0x84(%r1) 7 | stw %r31, 0x7c(%r1) 8 | stw %r30, 0x78(%r1) 9 | bne- cr1, _1e9d8 10 | stfd %f1, 0x28(%r1) 11 | stfd %f2, 0x30(%r1) 12 | stfd %f3, 0x38(%r1) 13 | stfd %f4, 0x40(%r1) 14 | stfd %f5, 0x48(%r1) 15 | stfd %f6, 0x50(%r1) 16 | stfd %f7, 0x58(%r1) 17 | stfd %f8, 0x60(%r1) 18 | _1e9d8: 19 | lwz %r30, -0x6b24(%r13) 20 | addi %r11, %r1, 0x88 21 | addi %r0, %r1, 0x8 22 | lis %r12, 0x100 23 | cmpwi %r30, 0x0 24 | stw %r3, 0x8(%r1) 25 | addi %r31, %r1, 0x68 26 | stw %r4, 0xc(%r1) 27 | stw %r5, 0x10(%r1) 28 | stw %r6, 0x14(%r1) 29 | stw %r7, 0x18(%r1) 30 | stw %r8, 0x1c(%r1) 31 | stw %r9, 0x20(%r1) 32 | stw %r10, 0x24(%r1) 33 | stw %r12, 0x68(%r1) 34 | stw %r11, 0x6c(%r1) 35 | stw %r0, 0x70(%r1) 36 | beq- _1ea38 37 | mr %r5, %r3 38 | mr %r4, %r30 39 | mr %r6, %r31 40 | li %r3, 0x3 41 | bl sub_1bb80 42 | b _1ea40 43 | _1ea38: 44 | mr %r4, %r31 45 | bl sub_19b2fc 46 | _1ea40: 47 | lwz %r0, 0x84(%r1) 48 | lwz %r31, 0x7c(%r1) 49 | lwz %r30, 0x78(%r1) 50 | mtlr %r0 51 | addi %r1, %r1, 0x80 52 | blr 53 | 54 | -------------------------------------------------------------------------------- /maindol/text_1ea60.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1ea60 3 | sub_1ea60: # 0x80025d20 4 | stwu %r1, -0x20(%r1) 5 | mflr %r0 6 | stw %r0, 0x24(%r1) 7 | stw %r31, 0x1c(%r1) 8 | lis %r31, 0x8027 9 | subi %r31, %r31, 0x2180 10 | stw %r30, 0x18(%r1) 11 | stw %r29, 0x14(%r1) 12 | mr %r29, %r3 13 | addi %r3, %r31, 0x0 14 | crxor 6, 6, 6 15 | bl sub_1e9a0 16 | addi %r3, %r31, 0x28 17 | crxor 6, 6, 6 18 | bl sub_1e9a0 19 | li %r30, 0x0 20 | _1eaa0: 21 | cmpwi %r29, 0x0 22 | beq- _1eaf0 23 | addis %r0, %r29, 0x1 24 | cmplwi %r0, 0xffff 25 | beq- _1eaf0 26 | clrrwi. %r0, %r29, 31 27 | beq- _1eaf0 28 | lwz %r5, 0x0(%r29) 29 | mr %r4, %r29 30 | lwz %r6, 0x4(%r29) 31 | addi %r3, %r31, 0x48 32 | crxor 6, 6, 6 33 | bl sub_1e9a0 34 | subi %r3, %r13, 0x7f6c 35 | crxor 6, 6, 6 36 | bl sub_1e9a0 37 | addi %r30, %r30, 0x1 38 | lwz %r29, 0x0(%r29) 39 | cmplwi %r30, 0x10 40 | blt+ _1eaa0 41 | _1eaf0: 42 | lwz %r0, 0x24(%r1) 43 | lwz %r31, 0x1c(%r1) 44 | lwz %r30, 0x18(%r1) 45 | lwz %r29, 0x14(%r1) 46 | mtlr %r0 47 | addi %r1, %r1, 0x20 48 | blr 49 | 50 | -------------------------------------------------------------------------------- /maindol/text_1eb10.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1eb10 3 | sub_1eb10: # 0x80025dd0 4 | stwu %r1, -0x20(%r1) 5 | mflr %r0 6 | stw %r0, 0x24(%r1) 7 | addi %r11, %r1, 0x20 8 | bl sub_1977c 9 | lwz %r30, 0x0(%r1) 10 | mr %r26, %r3 11 | mr %r27, %r4 12 | mr %r28, %r5 13 | mr %r31, %r6 14 | mr %r29, %r7 15 | bl sub_19f24c 16 | bl sub_1a2588 17 | li %r3, 0x0 18 | bl sub_1b1d94 19 | li %r3, 0x0 20 | bl sub_1b1dd8 21 | lwz %r0, -0x6b24(%r13) 22 | cmpwi %r0, 0x0 23 | beq- _1eb68 24 | li %r3, 0x0 25 | bl sub_1b120 26 | _1eb68: 27 | mr %r3, %r30 28 | bl sub_1ea60 29 | lwz %r3, -0x6b24(%r13) 30 | cmpwi %r3, 0x0 31 | beq- _1ebf0 32 | lis %r4, 0x8027 33 | mr %r5, %r26 34 | mr %r6, %r27 35 | subi %r4, %r4, 0x2120 36 | crxor 6, 6, 6 37 | bl sub_1bc60 38 | lwz %r4, -0x6b24(%r13) 39 | mr %r5, %r28 40 | mr %r6, %r31 41 | li %r3, 0x3 42 | bl sub_1bb80 43 | lwz %r3, -0x6b24(%r13) 44 | subi %r4, %r13, 0x7f6c 45 | crxor 6, 6, 6 46 | bl sub_1bc60 47 | lwz %r30, -0x6b24(%r13) 48 | lhz %r31, 0x20(%r30) 49 | mr %r3, %r30 50 | bl sub_1bd80 51 | subf. %r0, %r31, %r3 52 | bge- _1ebd4 53 | li %r0, 0x0 54 | _1ebd4: 55 | stw %r0, 0x18(%r30) 56 | li %r0, 0x1 57 | lwz %r3, -0x6b24(%r13) 58 | stb %r0, 0x22(%r3) 59 | lwz %r3, -0x6b24(%r13) 60 | bl sub_1b750 61 | b _1ec20 62 | _1ebf0: 63 | lis %r3, 0x8027 64 | mr %r4, %r26 65 | mr %r5, %r27 66 | subi %r3, %r3, 0x2120 67 | crxor 6, 6, 6 68 | bl sub_19b270 69 | mr %r3, %r28 70 | mr %r4, %r31 71 | bl sub_19b2fc 72 | subi %r3, %r13, 0x7f6c 73 | crxor 6, 6, 6 74 | bl sub_19b270 75 | _1ec20: 76 | cmpwi %r29, 0x0 77 | beq- _1ec2c 78 | bl sub_127244 79 | _1ec2c: 80 | addi %r11, %r1, 0x20 81 | bl sub_197c8 82 | lwz %r0, 0x24(%r1) 83 | mtlr %r0 84 | addi %r1, %r1, 0x20 85 | blr 86 | 87 | -------------------------------------------------------------------------------- /maindol/text_1ec50.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_1ec50 3 | sub_1ec50: # 0x80025f10 4 | stwu %r1, -0x80(%r1) 5 | mflr %r0 6 | stw %r0, 0x84(%r1) 7 | stw %r31, 0x7c(%r1) 8 | bne- cr1, _1ec84 9 | stfd %f1, 0x28(%r1) 10 | stfd %f2, 0x30(%r1) 11 | stfd %f3, 0x38(%r1) 12 | stfd %f4, 0x40(%r1) 13 | stfd %f5, 0x48(%r1) 14 | stfd %f6, 0x50(%r1) 15 | stfd %f7, 0x58(%r1) 16 | stfd %f8, 0x60(%r1) 17 | _1ec84: 18 | addi %r11, %r1, 0x88 19 | addi %r0, %r1, 0x8 20 | lis %r12, 0x300 21 | stw %r7, 0x18(%r1) 22 | addi %r31, %r1, 0x68 23 | li %r7, 0x1 24 | stw %r6, 0x14(%r1) 25 | mr %r6, %r31 26 | stw %r3, 0x8(%r1) 27 | stw %r4, 0xc(%r1) 28 | stw %r5, 0x10(%r1) 29 | stw %r8, 0x1c(%r1) 30 | stw %r9, 0x20(%r1) 31 | stw %r10, 0x24(%r1) 32 | stw %r12, 0x68(%r1) 33 | stw %r11, 0x6c(%r1) 34 | stw %r0, 0x70(%r1) 35 | bl sub_1eb10 36 | bl sub_127244 37 | lwz %r0, 0x84(%r1) 38 | lwz %r31, 0x7c(%r1) 39 | mtlr %r0 40 | addi %r1, %r1, 0x80 41 | blr 42 | 43 | -------------------------------------------------------------------------------- /maindol/text_1ecf0.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global t1_1ecf0 3 | t1_1ecf0: 4 | .incbin "basemain.dol", 0x21250, 0x583c 5 | 6 | .global t1_2452c 7 | t1_2452c: 8 | .incbin "basemain.dol", 0x26a8c, 0x20450 9 | 10 | -------------------------------------------------------------------------------- /maindol/text_44980.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_44980 3 | sub_44980: # 0x8004bc40 4 | stwu %r1, -0x10(%r1) 5 | mflr %r0 6 | lwz %r4, 0x0(%r4) 7 | stw %r0, 0x14(%r1) 8 | lwz %r5, 0x0(%r3) 9 | lwz %r0, 0x0(%r4) 10 | lwz %r3, 0x0(%r5) 11 | cmplw %r3, %r0 12 | bne- _449bc 13 | addi %r3, %r5, 0x4 14 | addi %r4, %r4, 0x4 15 | bl sub_b47c 16 | cntlzw %r0, %r3 17 | srwi %r3, %r0, 5 18 | b _449c0 19 | _449bc: 20 | li %r3, 0x0 21 | _449c0: 22 | lwz %r0, 0x14(%r1) 23 | mtlr %r0 24 | addi %r1, %r1, 0x10 25 | blr 26 | 27 | .global t1_449d0 28 | t1_449d0: 29 | .incbin "basemain.dol", 0x46f30, 0x88 30 | 31 | -------------------------------------------------------------------------------- /maindol/text_44a60.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_44a60 3 | sub_44a60: # 0x8004bd20 4 | srwi %r7, %r5, 24 5 | extrwi %r6, %r5, 8, 8 6 | extrwi %r0, %r5, 8, 16 7 | li %r8, 0x8 8 | stb %r8, 0x0(%r3) 9 | stb %r4, 0x1(%r3) 10 | stb %r7, 0x2(%r3) 11 | stb %r6, 0x3(%r3) 12 | stb %r0, 0x4(%r3) 13 | stb %r5, 0x5(%r3) 14 | blr 15 | 16 | -------------------------------------------------------------------------------- /maindol/text_44a90.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global t1_44a90 3 | t1_44a90: 4 | .incbin "basemain.dol", 0x46ff0, 0x94 5 | 6 | -------------------------------------------------------------------------------- /maindol/text_44b30.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_44b30 3 | sub_44b30: # 0x8004bdf0 4 | stwu %r1, -0x20(%r1) 5 | mflr %r0 6 | lwz %r5, 0x0(%r3) 7 | stw %r0, 0x24(%r1) 8 | addi %r8, %r5, 0x8 9 | stw %r31, 0x1c(%r1) 10 | lhz %r0, 0xc(%r5) 11 | lwz %r3, 0x0(%r4) 12 | slwi %r0, %r0, 4 13 | addi %r7, %r3, 0x4 14 | lwz %r6, 0x0(%r3) 15 | add %r3, %r5, %r0 16 | addi %r31, %r3, 0x8 17 | b _44bb4 18 | _44b68: 19 | extrwi %r0, %r3, 13, 16 20 | mr %r8, %r31 21 | cmplw %r0, %r6 22 | clrlwi %r3, %r3, 29 23 | bge- _44ba4 24 | lbzx %r0, %r7, %r0 25 | extsb %r0, %r0 26 | sraw %r0, %r0, %r3 27 | clrlwi. %r0, %r0, 31 28 | beq- _44ba4 29 | lhz %r0, 0x6(%r31) 30 | slwi %r0, %r0, 4 31 | add %r3, %r5, %r0 32 | addi %r31, %r3, 0x8 33 | b _44bb4 34 | _44ba4: 35 | lhz %r0, 0x4(%r31) 36 | slwi %r0, %r0, 4 37 | add %r3, %r5, %r0 38 | addi %r31, %r3, 0x8 39 | _44bb4: 40 | lhz %r3, 0x0(%r31) 41 | lhz %r0, 0x0(%r8) 42 | cmplw %r0, %r3 43 | bgt+ _44b68 44 | lwz %r0, 0x8(%r31) 45 | mr %r3, %r4 46 | addi %r4, %r1, 0x8 47 | add %r5, %r5, %r0 48 | subi %r0, %r5, 0x4 49 | stw %r0, 0x8(%r1) 50 | bl sub_44980 51 | cmpwi %r3, 0x0 52 | beq- _44bf0 53 | mr %r3, %r31 54 | b _44bf4 55 | _44bf0: 56 | li %r3, 0x0 57 | _44bf4: 58 | lwz %r0, 0x24(%r1) 59 | lwz %r31, 0x1c(%r1) 60 | mtlr %r0 61 | addi %r1, %r1, 0x20 62 | blr 63 | 64 | -------------------------------------------------------------------------------- /maindol/text_44c10.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_44c10 3 | sub_44c10: # 0x8004bed0 4 | stwu %r1, -0x10(%r1) 5 | mflr %r0 6 | lwz %r6, 0x0(%r3) 7 | stw %r0, 0x14(%r1) 8 | addi %r7, %r6, 0x8 9 | stw %r31, 0xc(%r1) 10 | lhz %r0, 0xc(%r6) 11 | slwi %r0, %r0, 4 12 | add %r3, %r6, %r0 13 | addi %r31, %r3, 0x8 14 | b _44c8c 15 | nop # what? 16 | _44c40: 17 | extrwi %r0, %r3, 13, 16 18 | mr %r7, %r31 19 | cmplw %r0, %r5 20 | clrlwi %r3, %r3, 29 21 | bge- _44c7c 22 | lbzx %r0, %r4, %r0 23 | extsb %r0, %r0 24 | sraw %r0, %r0, %r3 25 | clrlwi. %r0, %r0, 31 26 | beq- _44c7c 27 | lhz %r0, 0x6(%r31) 28 | slwi %r0, %r0, 4 29 | add %r3, %r6, %r0 30 | addi %r31, %r3, 0x8 31 | b _44c8c 32 | _44c7c: 33 | lhz %r0, 0x4(%r31) 34 | slwi %r0, %r0, 4 35 | add %r3, %r6, %r0 36 | addi %r31, %r3, 0x8 37 | _44c8c: 38 | lhz %r3, 0x0(%r31) 39 | lhz %r0, 0x0(%r7) 40 | cmplw %r0, %r3 41 | bgt+ _44c40 42 | lwz %r0, 0x8(%r31) 43 | cmpwi %r0, 0x0 44 | beq- _44cd0 45 | mr %r3, %r4 46 | beq- _44cb8 47 | add %r4, %r6, %r0 48 | b _44cbc 49 | _44cb8: 50 | li %r4, 0x0 51 | _44cbc: 52 | bl sub_b47c 53 | cmpwi %r3, 0x0 54 | bne- _44cd0 55 | mr %r3, %r31 56 | b _44cd4 57 | _44cd0: 58 | li %r3, 0x0 59 | _44cd4: 60 | lwz %r0, 0x14(%r1) 61 | lwz %r31, 0xc(%r1) 62 | mtlr %r0 63 | addi %r1, %r1, 0x10 64 | blr 65 | 66 | -------------------------------------------------------------------------------- /maindol/text_44cf0.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_44cf0 3 | sub_44cf0: # 0x8004bfb0 4 | stwu %r1, -0x10(%r1) 5 | mflr %r0 6 | stw %r0, 0x14(%r1) 7 | stw %r31, 0xc(%r1) 8 | mr %r31, %r4 9 | stw %r30, 0x8(%r1) 10 | mr %r30, %r3 11 | lwz %r0, 0x0(%r3) 12 | cmpwi %r0, 0x0 13 | beq- _44d50 14 | cmpwi %r4, 0x0 15 | beq- _44d50 16 | mr %r3, %r31 17 | bl sub_19434 18 | mr %r5, %r3 19 | mr %r3, %r30 20 | mr %r4, %r31 21 | bl sub_44c10 22 | cmpwi %r3, 0x0 23 | beq- _44d50 24 | lwz %r4, 0x0(%r30) 25 | lwz %r0, 0xc(%r3) 26 | add %r3, %r4, %r0 27 | .global mod_mod0_entry_addr 28 | mod_mod0_entry_addr: 29 | .ifdef CTGP_CODE 30 | b mod0_mod_start 31 | .else 32 | b _44d54 33 | .endif 34 | _44d50: 35 | li %r3, 0x0 36 | .global _44d54 37 | _44d54: 38 | lwz %r0, 0x14(%r1) 39 | lwz %r31, 0xc(%r1) 40 | lwz %r30, 0x8(%r1) 41 | mtlr %r0 42 | addi %r1, %r1, 0x10 43 | blr 44 | 45 | -------------------------------------------------------------------------------- /maindol/text_44d70.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global sub_44d70 3 | sub_44d70: # 0x8004c030 4 | stwu %r1, -0x20(%r1) 5 | mflr %r0 6 | stw %r0, 0x24(%r1) 7 | stw %r31, 0x1c(%r1) 8 | mr %r31, %r3 9 | lwz %r0, 0x0(%r3) 10 | cmpwi %r0, 0x0 11 | beq- _44dc0 12 | lwz %r0, 0x0(%r4) 13 | cmpwi %r0, 0x0 14 | beq- _44dc0 15 | stw %r0, 0x8(%r1) 16 | addi %r4, %r1, 0x8 17 | bl sub_44b30 18 | cmpwi %r3, 0x0 19 | beq- _44dc0 20 | lwz %r4, 0x0(%r31) 21 | lwz %r0, 0xc(%r3) 22 | add %r3, %r4, %r0 23 | b _44dc4 24 | _44dc0: 25 | li %r3, 0x0 26 | _44dc4: 27 | lwz %r0, 0x24(%r1) 28 | lwz %r31, 0x1c(%r1) 29 | mtlr %r0 30 | addi %r1, %r1, 0x20 31 | blr 32 | 33 | -------------------------------------------------------------------------------- /maindol/text_44de0.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global t1_44de0 3 | t1_44de0: 4 | .incbin "basemain.dol", 0x47340, 0x394 5 | -------------------------------------------------------------------------------- /maindol/text_b2a30.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global t1_b2a30 3 | t1_b2a30: 4 | .incbin "basemain.dol", 0xb4f90, 0x3fc 5 | 6 | -------------------------------------------------------------------------------- /maindol/text_b2e30.s: -------------------------------------------------------------------------------- 1 | .text 2 | .include "macros.inc" 3 | .global sub_b2e30 4 | sub_b2e30: # 0x800ba0f0 5 | stwu %r1, -0x1e0(%r1) 6 | mflr %r0 7 | stw %r0, 0x1e4(%r1) 8 | stfd %f31, 0x1d0(%r1) 9 | psq_st 31, 0x1d8, 1, 0, 0 10 | stfd %f30, 0x1c0(%r1) 11 | psq_st 30, 0x1c8, 1, 0, 0 12 | stfd %f29, 0x1b0(%r1) 13 | psq_st 29, 0x1b8, 1, 0, 0 14 | stfd %f28, 0x1a0(%r1) 15 | psq_st 28, 0x1a8, 1, 0, 0 16 | stfd %f27, 0x190(%r1) 17 | psq_st 27, 0x198, 1, 0, 0 18 | addi %r11, %r1, 0x190 19 | bl sub_19764 20 | lfs %f1, 0x4c(%r3) 21 | slwi %r31, %r6, 1 22 | lfs %f0, -0x6ca0(%r2) 23 | mr %r22, %r3 24 | lwz %r21, 0x0(%r5) 25 | mr %r23, %r4 26 | fcmpo %cr0, %f1, %f0 27 | mr %r24, %r5 28 | add %r30, %r21, %r31 29 | mfcr %r29 30 | lfs %f31, -0x6c9c(%r2) 31 | li %r20, 0x0 32 | stw %r3, 0xcc(%r1) 33 | srwi %r29, %r29, 31 34 | addi %r3, %r1, 0x98 35 | stw %r20, 0xd4(%r1) 36 | li %r28, 0x0 37 | li %r27, 0x0 38 | stw %r20, 0xd8(%r1) 39 | stw %r20, 0xdc(%r1) 40 | stw %r21, 0xd0(%r1) 41 | stfs %f31, 0xa8(%r1) 42 | lwz %r4, 0x48(%r22) 43 | stfs %f31, 0xc(%r1) 44 | stfs %f31, 0x20(%r1) 45 | stfs %f31, 0x34(%r1) 46 | bl sub_74fd0 47 | lfs %f0, -0x6c9c(%r2) 48 | stfs %f0, 0x0(%r23) 49 | stfs %f0, 0x8(%r23) 50 | lwz %r3, 0x48(%r22) 51 | cmpwi %r3, 0x0 52 | beq- _b2f04 53 | lwz %r12, 0x0(%r3) 54 | lwz %r12, 0x34(%r12) 55 | mtctr %r12 56 | bctrl 57 | b _b2f08 58 | _b2f04: 59 | mr %r3, %r20 60 | _b2f08: 61 | xoris %r3, %r3, 0x8000 62 | lis %r0, 0x4330 63 | stw %r3, 0x14c(%r1) 64 | lfd %f2, -0x6c98(%r2) 65 | stw %r0, 0x148(%r1) 66 | lfs %f3, 0x28(%r22) 67 | lfd %f0, 0x148(%r1) 68 | lfs %f1, 0x54(%r22) 69 | fsubs %f2, %f0, %f2 70 | lfs %f0, -0x6c9c(%r2) 71 | fmuls %f2, %f2, %f3 72 | fadds %f1, %f1, %f2 73 | fcmpo %cr0, %f0, %f1 74 | ble- _b2f44 75 | b _b2f48 76 | _b2f44: 77 | fmr %f1, %f0 78 | _b2f48: 79 | stfs %f1, 0x4(%r23) 80 | lwz %r3, 0x48(%r22) 81 | cmpwi %r3, 0x0 82 | beq- _b2f6c 83 | lwz %r12, 0x0(%r3) 84 | lwz %r12, 0x34(%r12) 85 | mtctr %r12 86 | bctrl 87 | b _b2f70 88 | _b2f6c: 89 | li %r3, 0x0 90 | _b2f70: 91 | xoris %r3, %r3, 0x8000 92 | lis %r0, 0x4330 93 | stw %r3, 0x154(%r1) 94 | lfd %f2, -0x6c98(%r2) 95 | stw %r0, 0x150(%r1) 96 | lfs %f3, 0x28(%r22) 97 | lfd %f0, 0x150(%r1) 98 | lfs %f1, 0x54(%r22) 99 | fsubs %f2, %f0, %f2 100 | lfs %f0, -0x6c9c(%r2) 101 | fmuls %f2, %f2, %f3 102 | fadds %f4, %f1, %f2 103 | fcmpo %cr0, %f0, %f4 104 | bge- _b2fac 105 | b _b2fb0 106 | _b2fac: 107 | fmr %f4, %f0 108 | _b2fb0: 109 | frsp %f0, %f4 110 | lfs %f3, 0x0(%r23) 111 | lfs %f2, 0x4(%r23) 112 | addi %r3, %r1, 0x98 113 | lfs %f1, 0x8(%r23) 114 | addi %r12, %r1, 0x9c 115 | stfs %f4, 0xc(%r23) 116 | li %r26, 0x0 117 | stfs %f3, 0x38(%r1) 118 | stfs %f2, 0x4c(%r1) 119 | stfs %f1, 0x60(%r1) 120 | stfs %f0, 0x74(%r1) 121 | stw %r21, 0x98(%r1) 122 | bl sub_19630 123 | ori %r0, %r0, 0x0 124 | lfs %f29, -0x6c9c(%r2) 125 | mr %r25, %r3 126 | lfd %f30, -0x6c98(%r2) 127 | addi %r20, %r1, 0xe0 128 | lis %r21, 0x4330 129 | b _b345c 130 | _b3004: 131 | clrlwi %r5, %r25, 16 132 | cmpwi %r5, 0x20 133 | bge- _b3378 134 | cntlzw %r0, %r28 135 | stfs %f29, 0x8c(%r1) 136 | srwi %r0, %r0, 5 137 | cmpwi %r29, 0x0 138 | stfs %f29, 0x90(%r1) 139 | stfs %f29, 0x94(%r1) 140 | stw %r3, 0xd0(%r1) 141 | stw %r0, 0xdc(%r1) 142 | stfs %f31, 0x88(%r1) 143 | stfs %f31, 0x2c(%r22) 144 | beq- _b3294 145 | cmpwi %r5, 0xa 146 | beq- _b3294 147 | cmpwi %r26, 0x0 148 | beq- _b3294 149 | lwz %r7, 0xcc(%r1) 150 | lwz %r6, 0xd0(%r1) 151 | lwz %r4, 0xd4(%r1) 152 | lwz %r3, 0xd8(%r1) 153 | lwz %r0, 0xdc(%r1) 154 | stw %r7, 0xb8(%r1) 155 | stw %r6, 0xbc(%r1) 156 | stw %r4, 0xc0(%r1) 157 | stw %r3, 0xc4(%r1) 158 | stw %r0, 0xc8(%r1) 159 | lbz %r0, 0x0(%r22) 160 | stb %r0, 0xe0(%r1) 161 | lbz %r0, 0x1(%r22) 162 | stb %r0, 0xe1(%r1) 163 | lbz %r0, 0x2(%r22) 164 | stb %r0, 0xe2(%r1) 165 | lbz %r0, 0x3(%r22) 166 | stb %r0, 0xe3(%r1) 167 | lbz %r0, 0x4(%r22) 168 | stb %r0, 0xe4(%r1) 169 | lbz %r0, 0x5(%r22) 170 | stb %r0, 0xe5(%r1) 171 | lbz %r0, 0x6(%r22) 172 | stb %r0, 0xe6(%r1) 173 | lbz %r0, 0x7(%r22) 174 | stb %r0, 0xe7(%r1) 175 | lbz %r0, 0x8(%r22) 176 | stb %r0, 0xe8(%r1) 177 | lbz %r0, 0x9(%r22) 178 | stb %r0, 0xe9(%r1) 179 | lbz %r0, 0xa(%r22) 180 | stb %r0, 0xea(%r1) 181 | lbz %r0, 0xb(%r22) 182 | stb %r0, 0xeb(%r1) 183 | lbz %r0, 0xc(%r22) 184 | stb %r0, 0xec(%r1) 185 | lbz %r0, 0xd(%r22) 186 | stb %r0, 0xed(%r1) 187 | lbz %r0, 0xe(%r22) 188 | stb %r0, 0xee(%r1) 189 | lbz %r0, 0xf(%r22) 190 | stb %r0, 0xef(%r1) 191 | lbz %r0, 0x10(%r22) 192 | stb %r0, 0xf0(%r1) 193 | lbz %r0, 0x11(%r22) 194 | stb %r0, 0xf1(%r1) 195 | lbz %r0, 0x12(%r22) 196 | stb %r0, 0xf2(%r1) 197 | lbz %r0, 0x13(%r22) 198 | stb %r0, 0xf3(%r1) 199 | lbz %r0, 0x14(%r22) 200 | stb %r0, 0xf4(%r1) 201 | lbz %r0, 0x15(%r22) 202 | stb %r0, 0xf5(%r1) 203 | lbz %r0, 0x16(%r22) 204 | stb %r0, 0xf6(%r1) 205 | lbz %r0, 0x17(%r22) 206 | stb %r0, 0xf7(%r1) 207 | lbz %r0, 0x18(%r22) 208 | stb %r0, 0xf8(%r1) 209 | lbz %r0, 0x19(%r22) 210 | stb %r0, 0xf9(%r1) 211 | lbz %r0, 0x1a(%r22) 212 | stb %r0, 0xfa(%r1) 213 | lbz %r0, 0x1b(%r22) 214 | stb %r0, 0xfb(%r1) 215 | lbz %r0, 0x1c(%r22) 216 | stb %r0, 0xfc(%r1) 217 | lbz %r0, 0x1d(%r22) 218 | stb %r0, 0xfd(%r1) 219 | lbz %r0, 0x1e(%r22) 220 | stb %r0, 0xfe(%r1) 221 | lbz %r0, 0x1f(%r22) 222 | stb %r0, 0xff(%r1) 223 | lwz %r0, 0x20(%r22) 224 | stw %r0, 0x100(%r1) 225 | lwz %r3, 0x24(%r22) 226 | lwz %r0, 0x28(%r22) 227 | stw %r0, 0x108(%r1) 228 | stw %r3, 0x104(%r1) 229 | lwz %r3, 0x2c(%r22) 230 | lwz %r0, 0x30(%r22) 231 | stw %r0, 0x110(%r1) 232 | stw %r3, 0x10c(%r1) 233 | lwz %r0, 0x34(%r22) 234 | stw %r0, 0x114(%r1) 235 | lwz %r3, 0x38(%r22) 236 | lwz %r0, 0x3c(%r22) 237 | stw %r0, 0x11c(%r1) 238 | stw %r3, 0x118(%r1) 239 | lbz %r0, 0x40(%r22) 240 | stb %r0, 0x120(%r1) 241 | lbz %r0, 0x41(%r22) 242 | stb %r0, 0x121(%r1) 243 | lbz %r0, 0x42(%r22) 244 | stb %r0, 0x122(%r1) 245 | lbz %r0, 0x43(%r22) 246 | stb %r0, 0x123(%r1) 247 | lfs %f0, 0x44(%r22) 248 | stfs %f0, 0x124(%r1) 249 | lwz %r0, 0x48(%r22) 250 | addi %r4, %r1, 0x78 251 | stw %r0, 0x128(%r1) 252 | addi %r6, %r1, 0xb8 253 | lfs %f0, 0x4c(%r22) 254 | stfs %f0, 0x12c(%r1) 255 | lfs %f0, 0x50(%r22) 256 | stfs %f0, 0x130(%r1) 257 | lfs %f0, 0x54(%r22) 258 | stfs %f0, 0x134(%r1) 259 | lwz %r0, 0x58(%r22) 260 | stw %r0, 0x138(%r1) 261 | lwz %r0, 0x5c(%r22) 262 | stw %r0, 0x13c(%r1) 263 | lwz %r3, 0x60(%r22) 264 | stw %r3, 0x140(%r1) 265 | stfs %f29, 0x78(%r1) 266 | stfs %f29, 0x7c(%r1) 267 | stfs %f29, 0x80(%r1) 268 | stfs %f29, 0x84(%r1) 269 | stw %r20, 0xb8(%r1) 270 | lwz %r12, 0x0(%r3) 271 | lwz %r12, 0x10(%r12) 272 | mtctr %r12 273 | bctrl 274 | lfs %f1, 0x80(%r1) 275 | lfs %f0, 0x78(%r1) 276 | fsubs %f0, %f1, %f0 277 | fcmpo %cr0, %f0, %f29 278 | ble- _b3288 279 | lfs %f2, 0x10c(%r1) 280 | lfs %f1, 0xd4(%r1) 281 | lfs %f0, 0x4c(%r22) 282 | fsubs %f1, %f2, %f1 283 | fcmpo %cr0, %f1, %f0 284 | ble- _b3288 285 | stw %r26, 0x98(%r1) 286 | mr %r3, %r20 287 | li %r27, 0x1 288 | li %r25, 0xa 289 | li %r4, 0x0 290 | bl sub_abb50 291 | b _b345c 292 | _b3288: 293 | addi %r3, %r1, 0xe0 294 | li %r4, 0x0 295 | bl sub_abb50 296 | _b3294: 297 | lwz %r3, 0x60(%r22) 298 | addi %r4, %r1, 0x88 299 | clrlwi %r5, %r25, 16 300 | addi %r6, %r1, 0xcc 301 | lwz %r12, 0x0(%r3) 302 | lwz %r12, 0x10(%r12) 303 | mtctr %r12 304 | bctrl 305 | lwz %r0, 0xd0(%r1) 306 | stw %r0, 0x98(%r1) 307 | lfs %f1, 0x88(%r1) 308 | lfs %f0, 0x0(%r23) 309 | fcmpo %cr0, %f0, %f1 310 | ble- _b32d0 311 | b _b32d4 312 | _b32d0: 313 | fmr %f1, %f0 314 | _b32d4: 315 | stfs %f1, 0x0(%r23) 316 | lfs %f0, 0x4(%r23) 317 | lfs %f1, 0x8c(%r1) 318 | fcmpo %cr0, %f0, %f1 319 | ble- _b32ec 320 | b _b32f0 321 | _b32ec: 322 | fmr %f1, %f0 323 | _b32f0: 324 | stfs %f1, 0x4(%r23) 325 | lfs %f0, 0x8(%r23) 326 | lfs %f1, 0x90(%r1) 327 | fcmpo %cr0, %f0, %f1 328 | bge- _b3308 329 | b _b330c 330 | _b3308: 331 | fmr %f1, %f0 332 | _b330c: 333 | stfs %f1, 0x8(%r23) 334 | lfs %f0, 0xc(%r23) 335 | lfs %f1, 0x94(%r1) 336 | fcmpo %cr0, %f0, %f1 337 | bge- _b3324 338 | b _b3328 339 | _b3324: 340 | fmr %f1, %f0 341 | _b3328: 342 | stfs %f1, 0xc(%r23) 343 | cmpwi %r3, 0x4 344 | lfs %f31, 0x2c(%r22) 345 | bne- _b334c 346 | lwz %r0, 0x0(%r24) 347 | li %r3, 0x0 348 | add %r0, %r0, %r31 349 | stw %r0, 0x0(%r24) 350 | b _b3474 351 | _b334c: 352 | cmpwi %r3, 0x1 353 | bne- _b335c 354 | li %r28, 0x0 355 | b _b343c 356 | _b335c: 357 | cmpwi %r3, 0x2 358 | bne- _b336c 359 | li %r28, 0x1 360 | b _b343c 361 | _b336c: 362 | cmpwi %r3, 0x3 363 | beq- _b3468 364 | b _b343c 365 | _b3378: 366 | cmpwi %r28, 0x0 367 | lfs %f27, -0x6c9c(%r2) 368 | beq- _b338c 369 | lfs %f0, 0x50(%r22) 370 | fadds %f27, %f27, %f0 371 | _b338c: 372 | lbz %r0, 0x43(%r22) 373 | cmpwi %r0, 0x0 374 | beq- _b33a4 375 | lfs %f0, 0x44(%r22) 376 | fadds %f27, %f27, %f0 377 | b _b33dc 378 | _b33a4: 379 | lwz %r3, 0x48(%r22) 380 | clrlwi %r4, %r25, 16 381 | lfs %f28, 0x24(%r22) 382 | lwz %r12, 0x0(%r3) 383 | lwz %r12, 0x48(%r12) 384 | mtctr %r12 385 | bctrl 386 | xoris %r0, %r3, 0x8000 387 | stw %r0, 0x154(%r1) 388 | stw %r21, 0x150(%r1) 389 | lfd %f0, 0x150(%r1) 390 | fsubs %f0, %f0, %f30 391 | fmuls %f0, %f0, %f28 392 | fadds %f27, %f27, %f0 393 | _b33dc: 394 | cmpwi %r29, 0x0 395 | beq- _b340c 396 | cmpwi %r26, 0x0 397 | beq- _b340c 398 | fadds %f1, %f31, %f27 399 | lfs %f0, 0x4c(%r22) 400 | fcmpo %cr0, %f1, %f0 401 | ble- _b340c 402 | stw %r26, 0x98(%r1) 403 | li %r27, 0x1 404 | li %r25, 0xa 405 | b _b345c 406 | _b340c: 407 | fadds %f31, %f31, %f27 408 | lfs %f0, 0x0(%r23) 409 | fcmpo %cr0, %f0, %f31 410 | ble- _b3420 411 | fmr %f0, %f31 412 | _b3420: 413 | lfs %f1, 0x8(%r23) 414 | stfs %f0, 0x0(%r23) 415 | fcmpo %cr0, %f1, %f31 416 | bge- _b3434 417 | fmr %f1, %f31 418 | _b3434: 419 | stfs %f1, 0x8(%r23) 420 | li %r28, 0x1 421 | _b343c: 422 | cmpwi %r29, 0x0 423 | beq- _b3448 424 | lwz %r26, 0x98(%r1) 425 | _b3448: 426 | addi %r3, %r1, 0x98 427 | addi %r12, %r1, 0x9c 428 | bl sub_19630 429 | ori %r0, %r0, 0x0 430 | mr %r25, %r3 431 | _b345c: 432 | lwz %r3, 0x98(%r1) 433 | cmplw %r3, %r30 434 | ble+ _b3004 435 | _b3468: 436 | lwz %r0, 0x98(%r1) 437 | mr %r3, %r27 438 | stw %r0, 0x0(%r24) 439 | _b3474: 440 | psq_l 31, 0x1d8, 1, 0, 0 441 | lfd %f31, 0x1d0(%r1) 442 | psq_l 30, 0x1c8, 1, 0, 0 443 | lfd %f30, 0x1c0(%r1) 444 | psq_l 29, 0x1b8, 1, 0, 0 445 | lfd %f29, 0x1b0(%r1) 446 | psq_l 28, 0x1a8, 1, 0, 0 447 | lfd %f28, 0x1a0(%r1) 448 | psq_l 27, 0x198, 1, 0, 0 449 | addi %r11, %r1, 0x190 450 | lfd %f27, 0x190(%r1) 451 | bl sub_197b0 452 | lwz %r0, 0x1e4(%r1) 453 | mtlr %r0 454 | addi %r1, %r1, 0x1e0 455 | blr 456 | 457 | -------------------------------------------------------------------------------- /maindol/text_b34c0.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global t1_b34c0 3 | t1_b34c0: 4 | .incbin "basemain.dol", 0xb5a20, 0x8 5 | -------------------------------------------------------------------------------- /maindol/unk_data_120.brfnt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aplumafreak500/DisMKW/7c7c5e90b9bce70a48f9c6c67a0242829e93dfcb/maindol/unk_data_120.brfnt -------------------------------------------------------------------------------- /mkc-nandloader/bss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x10000 3 | -------------------------------------------------------------------------------- /mkc-nandloader/ctors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x81353d98 3 | .space 28 4 | -------------------------------------------------------------------------------- /mkc-nandloader/data.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemkc-nandloader.dol", 0x29f80, 0x11e00 3 | -------------------------------------------------------------------------------- /mkc-nandloader/dtors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 0x81353dd4 3 | .space 28 4 | -------------------------------------------------------------------------------- /mkc-nandloader/extab.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemkc-nandloader.dol", 0x8f0, 0x170 3 | -------------------------------------------------------------------------------- /mkc-nandloader/extabindex.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "basemkc-nandloader.dol", 0xa60, 0x200 3 | -------------------------------------------------------------------------------- /mkc-nandloader/header.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global DolHeader 3 | DolHeader: 4 | .4byte init_offset 5 | .space 24 6 | .4byte loader_offset 7 | .space 40 8 | .4byte init_start 9 | .space 24 10 | .4byte loader_start 11 | .space 40 12 | .4byte init_size 13 | .space 24 14 | .4byte loader_size 15 | .space 40 16 | .4byte bss_start 17 | .4byte bss_size 18 | .4byte dol_entrypoint - 0x80000000 19 | .space 28 20 | 21 | -------------------------------------------------------------------------------- /mkc-nandloader/init.s: -------------------------------------------------------------------------------- 1 | .text 2 | .incbin "basemkc-nandloader.dol", 0x500, 0x3f0 3 | -------------------------------------------------------------------------------- /mkc-nandloader/loader_stub.s: -------------------------------------------------------------------------------- 1 | .text 2 | .global dol_entrypoint 3 | dol_entrypoint: 4 | .incbin "basemkc-nandloader.dol", 0x100, 0x400 5 | -------------------------------------------------------------------------------- /mkc-nandloader/sbss.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x0 3 | -------------------------------------------------------------------------------- /mkc-nandloader/sbss2.s: -------------------------------------------------------------------------------- 1 | .section .bss 2 | .space 0x0 3 | -------------------------------------------------------------------------------- /mkc-nandloader/text.s: -------------------------------------------------------------------------------- 1 | .text 2 | .incbin "basemkc-nandloader.dol", 0xc60, 0x292e0 3 | -------------------------------------------------------------------------------- /sha1sums.txt: -------------------------------------------------------------------------------- 1 | 39ddb78f3670c6a74901bad0385db6ee064b9f4c apploader-update.img 2 | b136d5f35909e682b1a15352f429edb412f0b247 main-update.dol 3 | 9af6302d15b21e140e8a43afd511f3e4897a1eeb apploader.img 4 | 1b367209919fcc225c74a155dc46f29c5d64b9a2 main.dol 5 | 072ba44382fdca9bf5c0ec9d1e9b922cafd99260 StaticR.rel 6 | 751a4e61e85df6c0a243e8ffde3f9246a28ff8dc main-mkc-installer.dol 7 | 6f4c46e3c5723a778a16c61b9089b37f9d70f7d5 mkc-nandloader.dol 8 | eaef5493ce3231f9137ab40b8eb4599d60051f2c main-mkc.dol 9 | -------------------------------------------------------------------------------- /staticr/RelHeader.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global StaticRRel 3 | StaticRRel: 4 | .4byte 1 # ID 5 | .4byte 0 # Next module 6 | .4byte 0 # Prev module 7 | .4byte 0x11 # num of sections 8 | .4byte gSectionTable 9 | .4byte 0 # Name offset, not used in MKW but is used in Brawl 10 | .4byte 0x3A # Size of the name. Why is this even set if the name is absent? 11 | .4byte 3 # Version of the format 12 | .4byte 0x78b0 # Size of .bss section 13 | .4byte gRelocTable 14 | .4byte ImpTable 15 | .4byte ImpTableSize 16 | .byte 1 # Index into section table which prolog is relative to. Skip if this field is 0. 17 | .byte 1 # Index into section table which epilog is relative to. Skip if this field is 0. 18 | .byte 1 # Index into section table which unresolved is relative to. Skip if this field is 0. 19 | .byte 0 20 | .4byte 0x432c8 21 | .4byte 0x43314 22 | .4byte 0x4335c 23 | .4byte 0x20 # Alignment 24 | .4byte 0x20 # Alignment of .bss 25 | .4byte 0x3ccd2c # FixSize, unknown 26 | .global gSectionTable 27 | gSectionTable: 28 | .4byte 0, 0 # .init? 29 | .4byte text_start + 1, text_size # +1 is for bit 32, which marks the section as executable 30 | .4byte ctors_start, ctors_size 31 | .4byte dtors_start, dtors_size 32 | .4byte rodata_start, rodata_size 33 | .4byte data_start, data_size 34 | .4byte 0, 0x78b0 # Size of .bss 35 | # .sdata, .sbss, .sdata2, .sbss2 all 0 36 | # .extab, .extab_index absent 37 | # 4 more sections according to header 38 | .space 80 39 | 40 | -------------------------------------------------------------------------------- /staticr/RelocTable.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global gRelocTable 3 | gRelocTable: 4 | .incbin "baseStaticR.rel", 0x3ccd2c, 0xb4fb0 5 | -------------------------------------------------------------------------------- /staticr/RelocTableMainDol.s: -------------------------------------------------------------------------------- 1 | .data 2 | .global gRelocTableMainDol 3 | gRelocTableMainDol: 4 | .incbin "baseStaticR.rel", 0x481cdc, 0x2b2b8 5 | -------------------------------------------------------------------------------- /staticr/StaticImp.s: -------------------------------------------------------------------------------- 1 | .data 2 | .4byte 1 # StaticR.rel 3 | .4byte gRelocTable 4 | .4byte 0 # main.dol 5 | .4byte gRelocTableMainDol 6 | -------------------------------------------------------------------------------- /staticr/ctors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .space 772 # modified by relocation table 3 | -------------------------------------------------------------------------------- /staticr/data.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "baseStaticR.rel", 0x3a25c0, 0x2a75c 3 | -------------------------------------------------------------------------------- /staticr/dtors.s: -------------------------------------------------------------------------------- 1 | .data 2 | .space 12 # modified by relocation table 3 | -------------------------------------------------------------------------------- /staticr/rodata.s: -------------------------------------------------------------------------------- 1 | .data 2 | .incbin "baseStaticR.rel", 0x37f380, 0x23240 3 | -------------------------------------------------------------------------------- /staticr/text.s: -------------------------------------------------------------------------------- 1 | .text 2 | .incbin "baseStaticR.rel", 0xd4, 0x37ef9c 3 | -------------------------------------------------------------------------------- /tools/configuration.py: -------------------------------------------------------------------------------- 1 | """ 2 | Configuration 3 | """ 4 | 5 | import os 6 | 7 | class ConfigException(Exception): 8 | """ 9 | Configuration error. Maybe a missing config variable. 10 | """ 11 | 12 | class Config(object): 13 | """ 14 | The Config class handles all configuration for pokemontools. Other classes 15 | and functions use a Config object to determine where expected files can be 16 | located. 17 | """ 18 | 19 | def __init__(self, **kwargs): 20 | """ 21 | Store all parameters. 22 | """ 23 | self._config = {} 24 | 25 | for (key, value) in kwargs.items(): 26 | if key not in self.__dict__: 27 | self._config[key] = value 28 | else: 29 | raise ConfigException( 30 | "Can't store \"{0}\" in configuration because the key conflicts with an existing property." 31 | .format(key) 32 | ) 33 | 34 | if "path" not in self._config: 35 | self._config["path"] = os.getcwd() 36 | 37 | # vba save states go into ./save-states/ 38 | if "save_state_path" not in self._config: 39 | self._config["save_state_path"] = os.path.join(self._config["path"], "save-states/") 40 | 41 | # assume rom is at ./baserom.gbc 42 | if "rom" not in self._config: 43 | self._config["rom_path"] = os.path.join(self._config["path"], "baserom.gbc") 44 | 45 | def __getattr__(self, key): 46 | """ 47 | Grab the value from the class properties, then check the configuration, 48 | and raise an exception if nothing works. 49 | """ 50 | if key in self.__dict__: 51 | return self.__dict__[key] 52 | elif key in self._config: 53 | return self._config[key] 54 | else: 55 | raise ConfigException( 56 | "no config found for \"{0}\"".format(key) 57 | ) 58 | -------------------------------------------------------------------------------- /tools/filehandler.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import sys 5 | from ctypes import c_int8 6 | from util.io import BinaryIO 7 | 8 | # https://docs.python.org/2/tutorial/inputoutput.html 9 | 10 | 11 | class FileHandler(object): 12 | file = None 13 | base_address = 0 14 | filename = "" 15 | filesize = 0 16 | 17 | def __init__(self): 18 | return 19 | 20 | def init(self, filename, base_address): 21 | self.filename = filename 22 | self.file = open(filename, "rb+") 23 | self.base_address = base_address 24 | self.filesize = self.GetFileSize() 25 | 26 | def GetFileName(self): 27 | return self.filename 28 | 29 | def GetBaseAddress(self): 30 | return self.base_address 31 | 32 | def GetFileSize(self): 33 | self.file.seek(0, os.SEEK_END) 34 | return self.file.tell() 35 | 36 | def AdrInRange(self, adr, debug=False): 37 | if (adr < self.base_address) | (adr >= (self.base_address+self.filesize)): 38 | if debug: 39 | print("AdrInRange: " + hex(self.base_address) + " - " + hex(adr) + " - " + hex((self.base_address+self.filesize))) 40 | return False 41 | return True 42 | 43 | def ReadDWord(self, address): 44 | if not self.AdrInRange(address): 45 | return 0 46 | 47 | address = (address & 0xffffffff) - self.base_address 48 | self.file.seek(address) 49 | word = bytearray(self.file.read(8)) 50 | return (word[0] << 56) | (word[1] << 48) | (word[2] << 40) | (word[3] << 32) | (word[4] << 24) | (word[5] << 16) | (word[6] << 8) | (word[7] << 0) 51 | 52 | def ReadWord(self, address): 53 | if not self.AdrInRange(address): 54 | return 0 55 | 56 | address = (address & 0xffffffff) - self.base_address 57 | self.file.seek(address) 58 | word = bytearray(self.file.read(4)) 59 | return (word[0] << 24) | (word[1] << 16) | (word[2] << 8) | (word[3] << 0) 60 | 61 | def ReadHWord(self, address): 62 | if not self.AdrInRange(address): 63 | return 0 64 | 65 | address = (address & 0xffffffff) - self.base_address 66 | self.file.seek(address) 67 | hword = bytearray(self.file.read(2)) 68 | return (hword[0] << 8) | (hword[1] << 0) 69 | 70 | def ReadByte(self, address): 71 | if not self.AdrInRange(address): 72 | return 0 73 | 74 | address = (address & 0xffffffff) - self.base_address 75 | self.file.seek(address) 76 | byte = bytearray(self.file.read(1)) 77 | return (byte[0] << 0) 78 | 79 | def Read(self, address, size): 80 | if not self.AdrInRange(address): 81 | return 0 82 | 83 | address = (address & 0xffffffff) - self.base_address 84 | self.file.seek(address) 85 | return bytearray(self.file.read(size)) 86 | 87 | def ReadString(self, address, size): 88 | if not self.AdrInRange(address): 89 | return 0 90 | 91 | address = (address & 0xffffffff) - self.base_address 92 | self.file.seek(address) 93 | string = "" 94 | for i in range(size): 95 | byte = bytearray(self.file.read(1)) 96 | if(byte[0] != 0): 97 | string += chr(byte[0]) 98 | return string 99 | 100 | def ReadString0(self, address, size): 101 | if not self.AdrInRange(address): 102 | return 0 103 | 104 | address = (address & 0xffffffff) - self.base_address 105 | self.file.seek(address) 106 | string = "" 107 | bytes = bytearray(self.file.read(size)) 108 | for i in range(size): 109 | if(bytes[i] != 0): 110 | string += chr(bytes[i]) 111 | else: 112 | break 113 | return string 114 | 115 | def ReadUnicodeString(self, address, size): 116 | if not self.AdrInRange(address): 117 | return 0 118 | 119 | address = (address & 0xffffffff) - self.base_address 120 | self.file.seek(address) 121 | string = "" 122 | for i in range(size): 123 | word = bytearray(self.file.read(2)) 124 | if(word[0] != 0): 125 | string += unichr(word[0]) 126 | return string 127 | 128 | def ReadHexString(self, address, size): 129 | if not self.AdrInRange(address): 130 | return 0 131 | 132 | address = (address & 0xffffffff) - self.base_address 133 | self.file.seek(address) 134 | string = "" 135 | for i in range(size): 136 | byte = bytearray(self.file.read(1)) 137 | string += ("%02x" % byte[0]) # {:02x}'.format(byte[0]) 138 | return string 139 | 140 | def WriteSectionInFile(self, filename, addr, size): 141 | if size == 0: return None 142 | 143 | if not os.path.exists(os.path.dirname(filename)): 144 | os.makedirs(os.path.dirname(filename)) 145 | 146 | f = open(filename, 'wb') 147 | fByteArray = self.Read(addr, size) 148 | f.write(fByteArray) 149 | return None 150 | 151 | def write_array_in_file(self, array, infile): 152 | #if size == 0: return None 153 | if not os.path.exists(os.path.dirname(infile)): 154 | os.makedirs(os.path.dirname(infile)) 155 | f = open(infile, 'wb') 156 | 157 | fByteArray = bytearray(array) 158 | f.write(fByteArray) 159 | f.close() 160 | return None 161 | -------------------------------------------------------------------------------- /tools/util/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | import re 3 | 4 | from attr import temporary_attr, AttrDict 5 | from cache import cached_property 6 | from util.io import BinaryIO 7 | 8 | 9 | def lget(lst, idx, default=None): 10 | """Gets an item from a list if the list supports it. Otherwise it returns 11 | the default value. 12 | 13 | Parameters 14 | ---------- 15 | lst : list 16 | Target list 17 | idx : int 18 | Index of list to get 19 | default : mixed 20 | Value to return if idx isn't in lst 21 | 22 | Returns 23 | ------- 24 | value : mixed 25 | lst[idx] if available, else default. 26 | """ 27 | try: 28 | return lst[idx] 29 | except IndexError: 30 | return default 31 | 32 | 33 | def gcf(a, b): 34 | """Return the Greatest Common Factor of two numbers 35 | 36 | Parameters 37 | ---------- 38 | a : int 39 | b : int 40 | 41 | Returns 42 | ------- 43 | gcf : int 44 | """ 45 | while b: 46 | a, b = b, a % b 47 | return a 48 | 49 | 50 | def lcm(a, b): 51 | """Return the Least Common Multiple of two numbers 52 | 53 | Parameters 54 | ---------- 55 | a : int 56 | b : int 57 | 58 | Returns 59 | ------- 60 | lcm : int 61 | """ 62 | return a*b / gcf(a, b) 63 | 64 | 65 | def subclasses(cls, recursive=False): 66 | """Get all subclasses of a class. 67 | 68 | Parameters 69 | ---------- 70 | cls : class 71 | Target class 72 | recursive : Bool, optional 73 | Get subclasses of subclasses as well 74 | """ 75 | subs = cls.__subclasses__() 76 | if recursive: 77 | for subcls in subs[:]: 78 | subs += subclasses(subcls, True) 79 | return subs 80 | 81 | 82 | def natsort_key(key): 83 | """Produce a natural key for sorting 84 | 85 | Returns 86 | ------- 87 | key : list 88 | Sortable key 89 | 90 | Examples 91 | -------- 92 | >>> lst = ['2.png', '1.png', '10.png'] 93 | >>> sorted(lst, key=natsort_key) 94 | ['1.png', '2.png', '10.png'] 95 | """ 96 | def get_val(chunk): 97 | try: 98 | return int(chunk) 99 | except: 100 | return chunk 101 | return [get_val(chunk) for chunk in re.split('([0-9]+)', key)] 102 | 103 | 104 | __all__ = ['cached_property', 'temporary_attr', 'AttrDict', 'BinaryIO', 105 | 'lget', 'gcf', 'lcm', 'natsort_key'] 106 | -------------------------------------------------------------------------------- /tools/util/attr.py: -------------------------------------------------------------------------------- 1 | 2 | __all__ = ['temporary_attr'] 3 | 4 | 5 | class TemporaryAttr(object): 6 | def __init__(self, inst, attr, value, skip_magic=False): 7 | self.inst = inst 8 | self.attr = attr 9 | self.value = value 10 | self.old = None 11 | if skip_magic: 12 | self.setattr = object.__setattr__ 13 | self.getattr = object.__getattribute__ 14 | else: 15 | self.setattr = setattr 16 | self.getattr = getattr 17 | 18 | def __enter__(self): 19 | self.old = self.getattr(self.inst, self.attr) 20 | self.setattr(self.inst, self.attr, self.value) 21 | 22 | def __exit__(self, type_, value, traceback): 23 | self.setattr(self.inst, self.attr, self.old) 24 | 25 | 26 | temporary_attr = TemporaryAttr # Export as function 27 | 28 | 29 | def getattr_override(target, name): 30 | return object.__getattribute__(target, name) 31 | 32 | 33 | def setattr_override(target, name, value): 34 | return object.__setattr__(target, name, value) 35 | 36 | 37 | def detattr_override(target, name): 38 | return object.__delattr__(target, name) 39 | 40 | 41 | def de_attr(*args, **kwargs): 42 | raise AttributeError 43 | 44 | 45 | class AttrClone(object): 46 | """Wrapper that serves as a modifiable copy of an existing valence 47 | 48 | It will get any attribute not set to it specifically from its base 49 | 50 | It will set any attribute on itself. 51 | """ 52 | def __init__(self, base): 53 | setattr_override(self, '_base_copy', base) 54 | setattr_override(self, '__repr__', de_attr) 55 | setattr_override(self, '__str__', de_attr) 56 | 57 | def __getattr__(self, name): 58 | return getattr(getattr_override(self, '_base_copy'), name) 59 | 60 | def __setattr__(self, name, value): 61 | return getattr(getattr_override(self, '_base_copy'), name, value) 62 | 63 | 64 | class AttrDict(dict): 65 | def __init__(self, *args, **kwargs): 66 | super(AttrDict, self).__init__(*args, **kwargs) 67 | self.__dict__ = self 68 | -------------------------------------------------------------------------------- /tools/util/binary.py: -------------------------------------------------------------------------------- 1 | 2 | import struct 3 | from six import StringIO 4 | 5 | class BinaryIO(StringIO): 6 | """Reader and Writer for binary data. 7 | 8 | This provides useful methods for reading and writing specific binary 9 | types. 10 | 11 | To use a file handle, use BinaryIO.adapter(handle) 12 | 13 | Parameters 14 | ---------- 15 | data : string 16 | Binary string to be used 17 | """ 18 | def __init__(self, data=''): 19 | StringIO.__init__(self, data) 20 | 21 | def readUInt8(self): 22 | return StructReaders.uint8.unpack(self.read(1))[0] 23 | 24 | def writeUInt8(self, value): 25 | self.write(StructReaders.uint8.pack(value)) 26 | 27 | def readInt8(self): 28 | return StructReaders.int8.unpack(self.read(1))[0] 29 | 30 | def writeInt8(self, value): 31 | self.write(StructReaders.int8.pack(value)) 32 | 33 | def readUInt16(self): 34 | return StructReaders.uint16.unpack(self.read(2))[0] 35 | 36 | def writeUInt16(self, value): 37 | self.write(StructReaders.uint16.pack(value)) 38 | 39 | def readInt16(self): 40 | return StructReaders.int16.unpack(self.read(2))[0] 41 | 42 | def writeInt16(self, value): 43 | self.write(StructReaders.int16.pack(value)) 44 | 45 | def readUInt32(self): 46 | return StructReaders.uint32.unpack(self.read(4))[0] 47 | 48 | def writeUInt32(self, value): 49 | self.write(StructReaders.uint32.pack(value)) 50 | 51 | def readInt32(self): 52 | return StructReaders.int32.unpack(self.read(4))[0] 53 | 54 | def writeInt32(self, value): 55 | self.write(StructReaders.int32.pack(value)) 56 | 57 | def writeAlign(self, alignment=4, char='\x00'): 58 | """Writes char multiple times to align the writer 59 | 60 | Parameters 61 | ---------- 62 | alignment : int 63 | Positive number to align with. The write buffer will 64 | be filled until it is divisible by this number exactly 65 | char : string 66 | String that will be written to the space. If multiple 67 | characters, it will get truncated the last time. 68 | """ 69 | position = self.tell() 70 | offset = position+((-position) % alignment) 71 | self.writePadding(offset, char) 72 | 73 | def writePadding(self, offset, char='\x00'): 74 | """Writes char multiple times until offset is met 75 | 76 | Parameters 77 | ---------- 78 | offset : int 79 | Destination offset. The buffer will be here upon 80 | completion of the write. 81 | char : string 82 | String that will be written to the space. If multiple 83 | characters, it will get truncated the last time. 84 | """ 85 | position = self.tell() 86 | if offset <= position: 87 | return 88 | data = char*((offset-position)/len(char)+1) 89 | self.write(data[:offset-position]) 90 | 91 | def readString(self): 92 | """Read a null terminated string 93 | 94 | Returns 95 | ------- 96 | chars : string 97 | String with no nul character 98 | """ 99 | chars = '' 100 | while True: 101 | char = self.read(1) 102 | if char == NUL: 103 | break 104 | chars += char 105 | return chars 106 | 107 | def writeString(self, chars): 108 | """Write a null terminated string. If the input has a null byte in 109 | it, it will not write past that byte. Null bytes will be added if 110 | not provided. 111 | 112 | Parameters 113 | ---------- 114 | chars : string 115 | String to write 116 | """ 117 | nullidx = chars.find(NUL) 118 | if nullidx == -1: 119 | self.write(chars) 120 | self.write(NUL) 121 | else: 122 | self.write(chars[:nullidx+1]) 123 | 124 | def seek(self, offset, whence=0): 125 | """Seeks to the given offset 126 | 127 | If used in a with statement, it returns to the previous position 128 | after the context exits. 129 | """ 130 | position = self.tell() 131 | StringIO.seek(self, offset, whence) 132 | return SeekReturn(self, position) 133 | 134 | def peek(self): 135 | """Returns a seek context to its current position. When the context 136 | exists, it will return back to its original position. 137 | 138 | Returns 139 | ------- 140 | SeekReturn 141 | """ 142 | return self.seek(self.tell()) 143 | 144 | @staticmethod 145 | def adapter(handle): 146 | """Create a BinaryIOAdapter around a file handle""" 147 | return BinaryIOAdapter(handle) 148 | 149 | @staticmethod 150 | def reader(target): 151 | """Creates a new reader for appropriate type 152 | 153 | Parameters 154 | ---------- 155 | target : unknown 156 | Reader available 157 | 158 | Returns 159 | ------- 160 | reader : BinaryIO 161 | """ 162 | if isinstance(target, BinaryIO): 163 | return target 164 | elif hasattr(target, 'read'): 165 | return BinaryIO.adapter(target) 166 | elif not target: 167 | return BinaryIO() 168 | else: 169 | return BinaryIO(target) 170 | writer = reader 171 | 172 | class BinaryIOAdapter(BinaryIO): 173 | """Adapter for file handles 174 | 175 | Allows all of the BinaryIO methods to be used without a stringio object 176 | """ 177 | def __init__(self, handle): 178 | BinaryIO.__init__(self) 179 | self.handle = handle 180 | 181 | def read(self, size=-1): 182 | return self.handle.read(size) 183 | 184 | def write(self, value): 185 | self.handle.write(value) 186 | 187 | def readline(self): 188 | # Faster to use underlying method 189 | return self.handle.readline() 190 | 191 | def seek(self, offset, whence=0): 192 | position = self.tell() 193 | self.handle.seek(offset, whence) 194 | return SeekReturn(self, position) 195 | 196 | def tell(self): 197 | return self.handle.tell() 198 | -------------------------------------------------------------------------------- /tools/util/cache.py: -------------------------------------------------------------------------------- 1 | 2 | class cached_property(property): 3 | def __get__(self, instance, owner): 4 | try: 5 | return instance._cached_props[self] 6 | except AttributeError: 7 | instance._cached_props = {} 8 | instance._cached_props[self] = super(cached_property, 9 | self).__get__(instance, owner) 10 | return instance._cached_props[self] 11 | except KeyError: 12 | instance._cached_props[self] = super(cached_property, 13 | self).__get__(instance, owner) 14 | return instance._cached_props[self] 15 | -------------------------------------------------------------------------------- /tools/util/io.py: -------------------------------------------------------------------------------- 1 | 2 | import struct 3 | from six import StringIO 4 | 5 | __all__ = ['BinaryIO'] 6 | 7 | NUL = chr(0) 8 | 9 | 10 | class StructReaders: 11 | """Cached built structs 12 | """ 13 | int8 = struct.Struct('b') 14 | uint8 = struct.Struct('B') 15 | int16 = struct.Struct('h') 16 | uint16 = struct.Struct('H') 17 | int32 = struct.Struct('i') 18 | uint32 = struct.Struct('I') 19 | 20 | 21 | class SeekReturn(object): 22 | """Context for returning to a position after seeking to it 23 | 24 | Example 25 | ------- 26 | >>> writer = BinaryIO() 27 | >>> writer.writeUInt32(0) 28 | >>> writer.writeUInt32(0) 29 | >>> with writer.seek(0): 30 | ... writer.writeUInt8(0xFF) 31 | ... 32 | >>> writer.writeUInt8(0xEE) 33 | >>> writer.getvalue() 34 | '\xff\x00\x00\x00\x00\x00\x00\x00\xee' 35 | """ 36 | def __init__(self, handle, position): 37 | self.handle = handle 38 | self.position = position 39 | 40 | def __enter__(self): 41 | pass 42 | 43 | def __exit__(self, type_, value, traceback): 44 | self.handle.seek(self.position) 45 | 46 | 47 | class BinaryIO(StringIO): 48 | """Reader and Writer for binary data. 49 | 50 | This provides useful methods for reading and writing specific binary 51 | types. 52 | 53 | To use a file handle, use BinaryIO.adapter(handle) 54 | 55 | Parameters 56 | ---------- 57 | data : string 58 | Binary string to be used 59 | """ 60 | def __init__(self, data=''): 61 | StringIO.__init__(self, data) 62 | 63 | def readUInt8(self): 64 | return StructReaders.uint8.unpack(self.read(1))[0] 65 | 66 | def writeUInt8(self, value): 67 | self.write(StructReaders.uint8.pack(value)) 68 | 69 | def readInt8(self): 70 | return StructReaders.int8.unpack(self.read(1))[0] 71 | 72 | def writeInt8(self, value): 73 | self.write(StructReaders.int8.pack(value)) 74 | 75 | def readUInt16(self): 76 | return StructReaders.uint16.unpack(self.read(2))[0] 77 | 78 | def writeUInt16(self, value): 79 | self.write(StructReaders.uint16.pack(value)) 80 | 81 | def readInt16(self): 82 | return StructReaders.int16.unpack(self.read(2))[0] 83 | 84 | def writeInt16(self, value): 85 | self.write(StructReaders.int16.pack(value)) 86 | 87 | def readUInt32(self): 88 | return StructReaders.uint32.unpack(self.read(4))[0] 89 | 90 | def writeUInt32(self, value): 91 | self.write(StructReaders.uint32.pack(value)) 92 | 93 | def readInt32(self): 94 | return StructReaders.int32.unpack(self.read(4))[0] 95 | 96 | def writeInt32(self, value): 97 | self.write(StructReaders.int32.pack(value)) 98 | 99 | def writeAlign(self, alignment=4, char='\x00'): 100 | """Writes char multiple times to align the writer 101 | 102 | Parameters 103 | ---------- 104 | alignment : int 105 | Positive number to align with. The write buffer will 106 | be filled until it is divisible by this number exactly 107 | char : string 108 | String that will be written to the space. If multiple 109 | characters, it will get truncated the last time. 110 | """ 111 | position = self.tell() 112 | offset = position+((-position) % alignment) 113 | self.writePadding(offset, char) 114 | 115 | def writePadding(self, offset, char='\x00'): 116 | """Writes char multiple times until offset is met 117 | 118 | Parameters 119 | ---------- 120 | offset : int 121 | Destination offset. The buffer will be here upon 122 | completion of the write. 123 | char : string 124 | String that will be written to the space. If multiple 125 | characters, it will get truncated the last time. 126 | """ 127 | position = self.tell() 128 | if offset <= position: 129 | return 130 | data = char*((offset-position)/len(char)+1) 131 | self.write(data[:offset-position]) 132 | 133 | def readString(self): 134 | """Read a null terminated string 135 | 136 | Returns 137 | ------- 138 | chars : string 139 | String with no nul character 140 | """ 141 | chars = '' 142 | while True: 143 | char = self.read(1) 144 | if char == NUL: 145 | break 146 | chars += char 147 | return chars 148 | 149 | def writeString(self, chars): 150 | """Write a null terminated string. If the input has a null byte in 151 | it, it will not write past that byte. Null bytes will be added if 152 | not provided. 153 | 154 | Parameters 155 | ---------- 156 | chars : string 157 | String to write 158 | """ 159 | nullidx = chars.find(NUL) 160 | if nullidx == -1: 161 | self.write(chars) 162 | self.write(NUL) 163 | else: 164 | self.write(chars[:nullidx+1]) 165 | 166 | def seek(self, offset, whence=0): 167 | """Seeks to the given offset 168 | 169 | If used in a with statement, it returns to the previous position 170 | after the context exits. 171 | """ 172 | position = self.tell() 173 | StringIO.seek(self, offset, whence) 174 | return SeekReturn(self, position) 175 | 176 | def peek(self): 177 | """Returns a seek context to its current position. When the context 178 | exists, it will return back to its original position. 179 | 180 | Returns 181 | ------- 182 | SeekReturn 183 | """ 184 | return self.seek(self.tell()) 185 | 186 | @staticmethod 187 | def adapter(handle): 188 | """Create a BinaryIOAdapter around a file handle""" 189 | return BinaryIOAdapter(handle) 190 | 191 | @staticmethod 192 | def reader(target): 193 | """Creates a new reader for appropriate type 194 | 195 | Parameters 196 | ---------- 197 | target : unknown 198 | Reader available 199 | 200 | Returns 201 | ------- 202 | reader : BinaryIO 203 | """ 204 | if isinstance(target, BinaryIO): 205 | return target 206 | elif hasattr(target, 'read'): 207 | return BinaryIO.adapter(target) 208 | elif not target: 209 | return BinaryIO() 210 | else: 211 | return BinaryIO(target) 212 | writer = reader 213 | 214 | 215 | class BinaryIOAdapter(BinaryIO): 216 | """Adapter for file handles 217 | 218 | Allows all of the BinaryIO methods to be used without a stringio object 219 | """ 220 | def __init__(self, handle): 221 | BinaryIO.__init__(self) 222 | self.handle = handle 223 | 224 | def read(self, size=-1): 225 | return self.handle.read(size) 226 | 227 | def write(self, value): 228 | self.handle.write(value) 229 | 230 | def readline(self): 231 | # Faster to use underlying method 232 | return self.handle.readline() 233 | 234 | def seek(self, offset, whence=0): 235 | position = self.tell() 236 | self.handle.seek(offset, whence) 237 | return SeekReturn(self, position) 238 | 239 | def tell(self): 240 | return self.handle.tell() 241 | 242 | 243 | class BoundIO(object): 244 | """Binds a binary_io to an object so that all of its functions use obj 245 | directly""" 246 | def __init__(self, obj, binary_io): 247 | self.handle = binary_io 248 | self.obj = obj 249 | 250 | def __getattr__(self, name): 251 | attr = super(BoundIO, self).__getattr__(name) 252 | if name[:4] == 'read': 253 | def bound_read_wrapper(target, *args, **kwargs): 254 | setattr(self.obj, target, attr(*args, **kwargs)) 255 | return bound_read_wrapper 256 | elif name[:5] == 'write': 257 | def bound_write_wrapper(target, *args, **kwargs): 258 | attr(getattr(self.obj, target), *args, **kwargs) 259 | return bound_write_wrapper 260 | else: 261 | return attr 262 | --------------------------------------------------------------------------------