├── .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 |
--------------------------------------------------------------------------------