Merge branch 'master' of github.com:pret/pokediamond

This commit is contained in:
who-knows-who
2021-02-27 15:29:36 +00:00
313 changed files with 7386 additions and 6264 deletions
+5 -4
View File
@@ -1,18 +1,19 @@
#!/bin/bash -ex
# Only run this script if it's the master branch build.
if [[ "$TRAVIS_BRANCH" != "master" || "$TRAVIS_PULL_REQUEST" != "false" ]]; then
if [[ "$GITHUB_REF" != "refs/heads/master" || "$GITHUB_EVENT_NAME" != "push" ]]; then
exit 0
fi
build_name=$1
url=$2
map_file=$(dirname "$0")/../../arm9/build/diamond.us/arm9.elf.xMAP
if [ ! -f $map_file ]; then
echo "$map_file does not exist!"
exit 1
fi
make -C ${TRAVIS_BUILD_DIR}/.travis/calcrom
output=$(${TRAVIS_BUILD_DIR}/.travis/calcrom/calcrom ${TRAVIS_BUILD_DIR} | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g')
curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $CALCROM_DISCORD_WEBHOOK_URL
make -C ${GITHUB_WORKSPACE}/.github/calcrom
output=$(${GITHUB_WORKSPACE}/.github/calcrom/calcrom ${GITHUB_WORKSPACE} | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g')
curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $url
popd
+52
View File
@@ -0,0 +1,52 @@
name: build
on: [push, pull_request]
env:
LM_LICENSE_FILE: "$GITHUB_WORKSPACE/tools/mwccarm/license.dat"
CC: gcc-8
CXX: g++-8
CALCROM_DISCORD_WEBHOOK_AVATAR_URL: "https://i.imgur.com/38BQHdd.png"
CALCROM_DISCORD_WEBHOOK_USERNAME: OK
CALCROM_WEBHOOK_URL: ${{ secrets.WEBHOOKURL }}
jobs:
build:
runs-on: ubuntu-18.04
steps:
- name: Update and Install Software
run: |
sudo apt update
sudo apt -y --fix-missing upgrade
sudo apt -y install g++-8-multilib linux-libc-dev binutils-arm-none-eabi
sudo dpkg --add-architecture i386
wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
sudo add-apt-repository ppa:cybermax-dexter/sdl2-backport
sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu $(lsb_release -cs) main"
sudo apt install --install-recommends winehq-stable
- name: Checkout Repo
uses: actions/checkout@v2
- name: Setup Repo
run: |
mkdir -p ~/download
cd ~/download
wget http://private.martmists.com/mwccarm.zip
wget http://private.martmists.com/nitro.tar.gz
unzip mwccarm.zip
mv mwccarm $GITHUB_WORKSPACE/tools
tar xzf nitro.tar.gz
mv tools/bin $GITHUB_WORKSPACE/tools
mv include/nitro/specfiles/ARM7-TS.lcf.template $GITHUB_WORKSPACE/arm7
mv include/nitro/specfiles/ARM9-TS.lcf.template $GITHUB_WORKSPACE/arm9
working-directory: ~
- name: Build Diamond
run: make diamond
- name: Build Pearl
run: make pearl
- name: Webhook
run: |
sudo chmod 755 $GITHUB_WORKSPACE/.github/calcrom/webhook.sh
$GITHUB_WORKSPACE/.github/calcrom/webhook.sh pokediamond "$CALCROM_WEBHOOK_URL"
continue-on-error: true
-41
View File
@@ -1,41 +0,0 @@
dist: bionic
os: linux
language: c
env:
global:
- LM_LICENSE_FILE="$TRAVIS_BUILD_DIR/tools/mwccarm/license.dat"
- CC=gcc-8
- CXX=g++-8
addons:
apt:
packages:
- g++-8-multilib
- linux-libc-dev
- binutils-arm-none-eabi
- wine32
- wine-stable
cache:
apt: true
install:
# These files are only accessible from Travis CI IP Addresses to prevent piracy.
- mkdir -p $HOME/download
- pushd $HOME/download
- wget http://private.martmists.com/mwccarm.zip
- wget http://private.martmists.com/nitro.tar.gz
- unzip mwccarm.zip
- mv mwccarm $TRAVIS_BUILD_DIR/tools
- tar xzf nitro.tar.gz
- mv tools/bin $TRAVIS_BUILD_DIR/tools
- mv include/nitro/specfiles/ARM7-TS.lcf.template $TRAVIS_BUILD_DIR/arm7
- mv include/nitro/specfiles/ARM9-TS.lcf.template $TRAVIS_BUILD_DIR/arm9
- popd
script:
- travis_retry make
- travis_retry make pearl
notifications:
email: false
after_success:
- .travis/calcrom/webhook.sh pokediamond
+2 -2
View File
@@ -16,9 +16,9 @@ add_compile_options(-fms-extensions)
file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c" "*.cpp")
add_executable(PokeDiamond ${SOURCES})
target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/63/include)
target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/05/include arm9/modules/21/include arm9/modules/59/include arm9/modules/63/include)
add_executable(calcrom .travis/calcrom/calcrom.cpp)
add_executable(calcrom .github/calcrom/calcrom.cpp)
target_include_directories(calcrom PRIVATE /usr/local/include)
add_executable(knarc tools/knarc/Source.cpp tools/knarc/Narc.cpp tools/knarc/fnmatch.c)
+44 -1
View File
@@ -48,12 +48,55 @@ Install them using either the Cygwin package manager or using pacman on Msys2.
**NOTE FOR MSYS2:** You will need to compile and install [libpng](https://www.libpng.org/pub/png/libpng.html) from source.
#### macOS
**macOS 10.14 Mojave or older is required**. macOS 10.15 Catalina is not supported due to missing support for 32-bit binaries (thus making wine emulation unfeasible). You will also require the following packages:
* GNU make
* LLVM 8 clang compiler
* gcc@5 (for mwasmarm_patcher)
* arm-gcc-bin
* git
* libpng
* wine-stable and xquartz dependency
They can be installed with the following commands:
```console
$ brew tap osx-cross/homebrew-arm
$ brew tap homebrew/cask-versions
$ brew install make llvm@8 gcc@5 arm-gcc-bin libpng git
$ brew install --cask xquartz
$ brew install --cask --no-quarantine wine-stable
```
### 4. Build ROM
Run `make` to build the ROM. The ROM will be output as `build/diamond.us/pokediamond.us.nds`
To build Pokemon Pearl, run `make pearl`. You do not need to clean your working tree in between compiling. Pokemon Pearl will be built as `build/pearl.us/pokepearl.us.nds`.
Windows Users:
#### Windows
If you get an error in saving configuration settings when specifying the license file, you need to add a system environment variable called LM_LICENSE_FILE and point it to the license.dat file. Alternatively, run mwccarm.exe from an Administrator command prompt, PowerShell, or WSL session.
#### Docker
If you find issues building the ROMs with the above methods, you can try the Docker-specific build script. It will build an Alpine-based Docker image with the system requirements above, and run the `make` scripts (any specified parameter will be passed to the `make` command):
```console
$ make clean
$ ./contrib/docker/build_docker.sh # build pokediamond
$ ./contrib/docker/build_docker.sh pearl # build pokepearl
```
Note: Docker may not run at a full performance if its underlying Linux kernel is being virtualized (mainly Windows and macOS hosts).
#### macOS
To avoid issues run the build as shown below. This avoids issues with missing features (i.e. "introduced in macOS 10.15" errors) and Apple's make not following standards.
```console
$ export PATH=/usr/local/opt/llvm@8/bin:$PATH CC=clang CXX=clang++
$ gmake
```
+5 -1
View File
@@ -109,7 +109,11 @@ LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start
# DS TOOLS
TOOLS_DIR = tools
ifeq ($(UNAME_S),Darwin)
SHA1SUM = shasum
else
SHA1SUM = sha1sum
endif
CSV2BIN = $(TOOLS_DIR)/csv2bin/csv2bin$(EXE)
JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc$(EXE)
O2NARC = $(TOOLS_DIR)/o2narc/o2narc$(EXE)
@@ -120,7 +124,7 @@ MAKEROM = $(WINE) $(TOOLS_DIR)/bin/makerom.exe
FIXROM = $(TOOLS_DIR)/fixrom/fixrom$(EXE)
NTRCOMP = $(WINE) $(TOOLS_DIR)/bin/ntrcomp.exe
TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
TOOLDIRS = $(filter-out $(TOOLS_DIR)/asm_processor $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%)
TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE))
+1 -2
View File
@@ -1,7 +1,6 @@
# Pokémon Diamond
[![Build Status](https://travis-ci.org/pret/pokediamond.svg?branch=master)](https://travis-ci.org/pret/pokediamond)
![Docker Image CI](https://github.com/pret/pokediamond/workflows/Docker%20Image%20CI/badge.svg)
[![Build Status](https://travis-ci.com/pret/pokediamond.svg?branch=master)](https://travis-ci.com/pret/pokediamond)
This is a decompilation of Pokémon Diamond.
+6 -1
View File
@@ -96,13 +96,18 @@ LDFLAGS = -map -nodead -w off -proc v4t -interworking -map -symtab -m _start
####################### Other Tools #########################
# DS TOOLS
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
SHA1SUM = shasum
else
SHA1SUM = sha1sum
endif
JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc
GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx
SCANINC = $(TOOLS_DIR)/scaninc/scaninc$(EXE)
MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) -q
TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
TOOLDIRS = $(filter-out $(TOOLS_DIR)/asm_processor $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%)
TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE))
+17 -2
View File
@@ -69,6 +69,9 @@ LIBS_OBJS = $(LIBS_FILES:%.s=$(BUILD_DIR)/%.o)
# Object files
O_FILES := $(C_OBJS) $(CXX_OBJS) $(S_OBJS)
GLOBAL_ASM_C_FILES != grep -rl 'GLOBAL_ASM(' $(C_FILES)
GLOBAL_ASM_O_FILES = $(addprefix $(BUILD_DIR)/,$(GLOBAL_ASM_C_FILES:.c=.o))
# Overlay modules
OVERLAYS := $(shell grep -oE "Overlay \w+" $(LD_SPEC) | cut -d' ' -f2)
@@ -102,6 +105,9 @@ AR := $(CROSS)ar
OBJDUMP := $(CROSS)objdump
OBJCOPY := $(CROSS)objcopy
ASM_PROCESSOR_DIR := ../tools/asm_processor
ASM_PROCESSOR := $(ASM_PROCESSOR_DIR)/compile.sh
# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o
ASFLAGS = -proc arm5te -i ../include -i .. -D$(GAME_VERSION) -D$(GAME_LANGUAGE)
CFLAGS = -O4,p -gccext,on -proc arm946e -fp soft -lang c99 -Cpp_exceptions off $(foreach dir,$(INCLUDE_DIRS),-i $(dir)) $(foreach dir,$(INCLUDE_RECURSIVE_DIRS),-ir $(dir)) -interworking -DFS_IMPLEMENT -enum int -W all -D$(GAME_VERSION) -D$(GAME_LANGUAGE)
@@ -114,17 +120,22 @@ STATIC_LIBS := $(addprefix $(BUILD_DIR)/lib/,libsyscall.a)
####################### Other Tools #########################
# DS TOOLS
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
SHA1SUM = shasum
else
ifndef BUSYBOX
SHA1SUM = sha1sum --quiet
else
SHA1SUM = sha1sum
endif
endif
JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc$(EXE)
GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx$(EXE)
SCANINC = $(TOOLS_DIR)/scaninc/scaninc$(EXE)
MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) -q
TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
TOOLDIRS = $(filter-out $(TOOLS_DIR)/asm_processor $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%)
TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE))
@@ -190,8 +201,12 @@ else
$(BUILD_DIR)/%.o: dep :=
endif
# Cpp asm processor is not supported at this time.
$(GLOBAL_ASM_O_FILES): BUILD_C := $(ASM_PROCESSOR) "$(CC) $(CFLAGS)" "$(AS) $(ASFLAGS)"
BUILD_C ?= $(CC) -c $(CFLAGS) -o
$(C_OBJS): $(BUILD_DIR)/%.o: %.c $$(dep)
$(CC) -c $(CFLAGS) -o $@ $<
$(BUILD_C) $@ $<
$(CXX_OBJS): $(BUILD_DIR)/%.o: %.cpp $$(dep)
$(CXX) -c $(CXXFLAGS) -o $@ $<
+15 -5
View File
@@ -19,7 +19,7 @@ Static arm9
Object unk_02005CFC.o
Object poke_overlay.o
Object unk_020061E8.o
Object unk_02006234.o
Object overlay_manager.o
Object filesystem.o
Object unk_02006864.o
Object unk_02006D98.o
@@ -452,11 +452,13 @@ Static arm9
Object WM_ds.o
Object WM_ks.o
Object WM_etc.o
Object CTRDG.o
Object CTRDG_common.o
Object CTRDG_proc.o
Object CTRDG_backup.o
Object CTRDG_flash_common.o
Object CTRDG_flash_AT29LV512_asm.o
Object CTRDG_flash_AT29LV512.o
Object CTRDG_flash_LE26FV10N1TS-10.o
Object CTRDG_flash_LE39FW512.o
Object CTRDG_flash_MX29L010.o
Object CTRDG_flash_MX29L512.o
@@ -554,6 +556,12 @@ Overlay MODULE_05
Object mod05_021E5C8C.o
Object mod05_021E5E10.o
Object mod05_021E5FD8.o
Object mod05_021E72FC.o
Object mod05_021E7504.o
Object mod05_021E779C.o
Object mod05_021E7C00.o
Object mod05_021E80F8.o
Object mod05_021E8310.o
Object module_05.o
}
@@ -661,8 +669,8 @@ Overlay MODULE_21
{
##Pokétch Clock##
After MODULE_20
Object module_21_sinit.o
Object module_21.o
Object mod21_02254854.o
Object mod21_02254A6C.o
}
Overlay MODULE_22
@@ -937,7 +945,9 @@ Overlay MODULE_59
{
##Rowan's intro##
After arm9
Object module_59.o
Object mod59_021D74E0_src.o
Object mod59_021D74E0_asm.o
Object mod59_021D9868.o
}
Overlay MODULE_60
-670
View File
@@ -1,670 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global UNK_021D6940
UNK_021D6940: ; 0x021D6940
.space 0x4
.global UNK_021D6944
UNK_021D6944: ; 0x021D6944
.space 0x4
.text
arm_func_start CTRDG_CheckEnabled
CTRDG_CheckEnabled:
stmdb sp!, {lr}
sub sp, sp, #0x4
bl CTRDG_IsOptionCartridge
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {lr}
bxne lr
bl CTRDG_IsEnabled
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {lr}
bxne lr
bl OS_Terminate
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
arm_func_start CTRDG_Enable
CTRDG_Enable: ; 0x020DB15C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
bl OS_DisableInterrupts
ldr r1, _020DB1AC ; =UNK_021D6940
mov r4, r0
str r5, [r1, #0x0]
bl CTRDG_IsOptionCartridge
cmp r0, #0x0
bne _020DB198
cmp r5, #0x0
movne r1, #0x1000
moveq r1, #0x5000
mov r0, #0xf000
bl OS_SetDPermissionsForProtectionRegion
_020DB198:
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020DB1AC: .word UNK_021D6940
arm_func_start CTRDG_IsEnabled
CTRDG_IsEnabled:
ldr r0, _020DB1BC ; =UNK_021D6940
ldr r0, [r0, #0x0]
bx lr
.balign 4
_020DB1BC: .word UNK_021D6940
arm_func_start CTRDGi_AccessCommon
CTRDGi_AccessCommon: ; 0x020DB1C0
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
mov r5, r2
mov r4, r3
bl CTRDG_IsExisting
cmp r0, #0x0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r7,lr}
bxeq lr
bl CTRDG_CheckEnabled
ldr r0, _020DB2BC ; =UNK_021D6944
ldrh r0, [r0, #0x2]
bl OS_LockCartridge
cmp r4, #0x21
bhi _020DB240
cmp r4, #0x21
bhs _020DB270
cmp r4, #0x11
bhi _020DB234
cmp r4, #0x10
blo _020DB294
cmp r4, #0x10
beq _020DB290
cmp r4, #0x11
beq _020DB260
b _020DB294
_020DB234:
cmp r4, #0x20
streqh r6, [r7, #0x0]
b _020DB294
_020DB240:
cmp r4, #0x40
bhi _020DB254
cmp r4, #0x40
streq r6, [r7, #0x0]
b _020DB294
_020DB254:
cmp r4, #0x41
beq _020DB280
b _020DB294
_020DB260:
cmp r5, #0x0
ldrneb r0, [r7, #0x0]
strneb r0, [r5, #0x0]
b _020DB294
_020DB270:
cmp r5, #0x0
ldrneh r0, [r7, #0x0]
strneh r0, [r5, #0x0]
b _020DB294
_020DB280:
cmp r5, #0x0
ldrne r0, [r7, #0x0]
strne r0, [r5, #0x0]
b _020DB294
_020DB290:
strb r6, [r7, #0x0]
_020DB294:
ldr r0, _020DB2BC ; =UNK_021D6944
ldrh r0, [r0, #0x2]
bl OS_UnLockCartridge
bl CTRDG_IsExisting
cmp r0, #0x0
movne r0, #0x1
moveq r0, #0x0
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020DB2BC: .word UNK_021D6944
arm_func_start CTRDG_Read32
CTRDG_Read32: ; 0x020DB2C0
ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon
mov r2, r1
mov r1, #0x0
mov r3, #0x41
bx r12
.balign 4
_020DB2D4: .word CTRDGi_AccessCommon
arm_func_start CTRDGi_CopyCommon
CTRDGi_CopyCommon: ; 0x020DB2D8
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
mov r5, r2
mov r4, r3
bl CTRDG_IsExisting
cmp r0, #0x0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r7,lr}
bxeq lr
bl CTRDG_CheckEnabled
ldr r0, _020DB42C ; =UNK_021D6944
ldrh r0, [r0, #0x2]
bl OS_LockCartridge
ldr r0, [sp, #0x18]
ands r0, r0, #0x1
bne _020DB338
mov r0, r7
bl MI_StopDma
mov r0, r5
mov r1, r4
bl DC_FlushRange
_020DB338:
ldr r0, [sp, #0x18]
cmp r0, #0x11
bhi _020DB36C
cmp r0, #0x10
blo _020DB360
cmp r0, #0x10
beq _020DB38C
cmp r0, #0x11
beq _020DB3BC
b _020DB404
_020DB360:
cmp r0, #0x1
beq _020DB3E4
b _020DB404
_020DB36C:
cmp r0, #0x20
bhi _020DB380
cmp r0, #0x20
beq _020DB3A4
b _020DB404
_020DB380:
cmp r0, #0x21
beq _020DB3D0
b _020DB404
_020DB38C:
mov r0, r7
mov r1, r6
mov r2, r5
mov r3, r4
bl MI_DmaCopy16
b _020DB404
_020DB3A4:
mov r0, r7
mov r1, r6
mov r2, r5
mov r3, r4
bl MI_DmaCopy32
b _020DB404
_020DB3BC:
mov r0, r6
mov r1, r5
mov r2, r4
bl MIi_CpuCopy16
b _020DB404
_020DB3D0:
mov r0, r6
mov r1, r5
mov r2, r4
bl MIi_CpuCopy32
b _020DB404
_020DB3E4:
cmp r4, #0x0
mov r1, #0x0
bls _020DB404
_020DB3F0:
ldrb r0, [r6], #0x1
add r1, r1, #0x1
cmp r1, r4
strb r0, [r5], #0x1
blo _020DB3F0
_020DB404:
ldr r0, _020DB42C ; =UNK_021D6944
ldrh r0, [r0, #0x2]
bl OS_UnLockCartridge
bl CTRDG_IsExisting
cmp r0, #0x0
movne r0, #0x1
moveq r0, #0x0
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020DB42C: .word UNK_021D6944
arm_func_start CTRDG_CpuCopy32
CTRDG_CpuCopy32: ; 0x020DB430
stmdb sp!, {lr}
sub sp, sp, #0x4
mov lr, r1
mov r3, r2
mov r12, #0x21
mov r1, r0
mov r2, lr
mov r0, #0x0
str r12, [sp, #0x0]
bl CTRDGi_CopyCommon
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
arm_func_start CTRDG_CpuCopy16
CTRDG_CpuCopy16: ; 0x020DB464
stmdb sp!, {lr}
sub sp, sp, #0x4
mov lr, r1
mov r3, r2
mov r12, #0x11
mov r1, r0
mov r2, lr
mov r0, #0x0
str r12, [sp, #0x0]
bl CTRDGi_CopyCommon
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
arm_func_start CTRDG_CpuCopy8
CTRDG_CpuCopy8: ; 0x020DB498
stmdb sp!, {lr}
sub sp, sp, #0x4
mov lr, r1
mov r3, r2
cmp lr, #0x8000000
blo _020DB4DC
ldr r2, _020DB500 ; =0x0A010000
cmp lr, r2
bhs _020DB4DC
mov r12, #0x1
mov r2, r0
mov r0, #0x0
str r12, [sp, #0x0]
bl CTRDGi_CopyCommon
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020DB4DC:
mov r12, #0x1
mov r1, r0
mov r2, lr
mov r0, #0x0
str r12, [sp, #0x0]
bl CTRDGi_CopyCommon
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020DB500: .word 0x0A010000
arm_func_start CTRDGi_SendtoPxi
CTRDGi_SendtoPxi: ; 0x020DB504
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r1, r7
mov r0, #0xd
mov r2, #0x0
bl PXI_SendWordByFifo
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,lr}
bxeq lr
mov r6, #0x1
mov r5, #0xd
mov r4, #0x0
_020DB53C:
mov r0, r6
bl SVC_WaitByLoop
mov r0, r5
mov r1, r7
mov r2, r4
bl PXI_SendWordByFifo
cmp r0, #0x0
bne _020DB53C
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
arm_func_start CTRDGi_UnlockByProcessor
CTRDGi_UnlockByProcessor: ; 0x020DB568
stmdb sp!, {r4,lr}
mov r4, r1
ldr r1, [r4, #0x0]
cmp r1, #0x0
bne _020DB580
bl OS_UnLockCartridge
_020DB580:
ldr r0, [r4, #0x4]
bl OS_RestoreInterrupts
ldmia sp!, {r4,lr}
bx lr
arm_func_start CTRDGi_LockByProcessor
CTRDGi_LockByProcessor: ; 0x020DB590
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
ldr r5, _020DB60C ; =0x027FFFE8
mov r4, #0x1
_020DB5A8:
bl OS_DisableInterrupts
str r0, [r6, #0x4]
mov r0, r5
bl OS_ReadOwnerOfLockWord
and r0, r0, #0x40
str r0, [r6, #0x0]
ldr r0, [r6, #0x0]
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {r4-r7,lr}
bxne lr
mov r0, r7
bl OS_TryLockCartridge
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,lr}
bxeq lr
ldr r0, [r6, #0x4]
bl OS_RestoreInterrupts
mov r0, r4
bl SVC_WaitByLoop
b _020DB5A8
_020DB600: ; 0x020DB600
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020DB60C: .word 0x027FFFE8
arm_func_start CTRDGi_RestoreAccessCycle
CTRDGi_RestoreAccessCycle: ; 0x020DB610
ldr r3, _020DB640 ; =0x04000204
ldr r2, [r0, #0x0]
ldrh r1, [r3, #0x0]
bic r1, r1, #0xc
orr r1, r1, r2, lsl #0x2
strh r1, [r3, #0x0]
ldrh r1, [r3, #0x0]
ldr r2, [r0, #0x4]
bic r0, r1, #0x10
orr r0, r0, r2, lsl #0x4
strh r0, [r3, #0x0]
bx lr
.balign 4
_020DB640: .word 0x04000204
arm_func_start CTRDGi_ChangeLatestAccessCycle
CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644
ldr r2, _020DB688 ; =0x04000204
ldrh r1, [r2, #0x0]
and r1, r1, #0xc
mov r1, r1, asr #0x2
str r1, [r0, #0x0]
ldrh r1, [r2, #0x0]
and r1, r1, #0x10
mov r1, r1, asr #0x4
str r1, [r0, #0x4]
ldrh r0, [r2, #0x0]
bic r0, r0, #0xc
orr r0, r0, #0xc
strh r0, [r2, #0x0]
ldrh r0, [r2, #0x0]
bic r0, r0, #0x10
strh r0, [r2, #0x0]
bx lr
.balign 4
_020DB688: .word 0x04000204
arm_func_start CTRDG_IsExisting
CTRDG_IsExisting:
stmdb sp!, {r4,lr}
sub sp, sp, #0x10
ldr r2, _020DB798 ; =0x027FFC30
ldr r0, _020DB79C ; =0x0000FFFF
ldrh r1, [r2, #0x0]
mov r4, #0x1
cmp r1, r0
addeq sp, sp, #0x10
moveq r0, #0x0
ldmeqia sp!, {r4,lr}
bxeq lr
ldrb r0, [r2, #0x5]
mov r0, r0, lsl #0x1e
mov r0, r0, lsr #0x1f
cmp r0, #0x1
addeq sp, sp, #0x10
moveq r0, #0x0
ldmeqia sp!, {r4,lr}
bxeq lr
ldr r0, _020DB7A0 ; =UNK_021D6944
add r1, sp, #0x0
ldrh r0, [r0, #0x2]
bl CTRDGi_LockByProcessor
add r0, sp, #0x8
bl CTRDGi_ChangeLatestAccessCycle
mov r0, #0x8000000
ldrb r2, [r0, #0xb2]
cmp r2, #0x96
bne _020DB714
ldr r1, _020DB798 ; =0x027FFC30
ldrh r0, [r0, #0xbe]
ldrh r1, [r1, #0x0]
cmp r1, r0
bne _020DB75C
_020DB714:
cmp r2, #0x96
beq _020DB734
ldr r1, _020DB798 ; =0x027FFC30
ldr r0, _020DB7A4 ; =0x0801FFFE
ldrh r1, [r1, #0x0]
ldrh r0, [r0, #0x0]
cmp r1, r0
bne _020DB75C
_020DB734:
ldr r2, _020DB798 ; =0x027FFC30
mov r0, #0x8000000
ldr r1, [r2, #0x8]
ldr r0, [r0, #0xac]
cmp r1, r0
beq _020DB770
ldrb r0, [r2, #0x5]
mov r0, r0, lsl #0x1f
movs r0, r0, lsr #0x1f
beq _020DB770
_020DB75C:
ldr r1, _020DB798 ; =0x027FFC30
mov r4, #0x0
ldrb r0, [r1, #0x5]
orr r0, r0, #0x2
strb r0, [r1, #0x5]
_020DB770:
add r0, sp, #0x8
bl CTRDGi_RestoreAccessCycle
ldr r0, _020DB7A0 ; =UNK_021D6944
add r1, sp, #0x0
ldrh r0, [r0, #0x2]
bl CTRDGi_UnlockByProcessor
mov r0, r4
add sp, sp, #0x10
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020DB798: .word 0x027FFC30
_020DB79C: .word 0x0000FFFF
_020DB7A0: .word UNK_021D6944
_020DB7A4: .word 0x0801FFFE
arm_func_start CTRDG_IsPulledOut
CTRDG_IsPulledOut: ; 0x020DB7A8
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, _020DB800 ; =0x027FFC30
ldr r0, _020DB804 ; =0x0000FFFF
ldrh r1, [r2, #0x0]
cmp r1, r0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {lr}
bxeq lr
ldrb r0, [r2, #0x5]
mov r0, r0, lsl #0x1e
movs r0, r0, lsr #0x1f
bne _020DB7E4
bl CTRDG_IsExisting
_020DB7E4:
ldr r0, _020DB800 ; =0x027FFC30
ldrb r0, [r0, #0x5]
mov r0, r0, lsl #0x1e
mov r0, r0, lsr #0x1f
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020DB800: .word 0x027FFC30
_020DB804: .word 0x0000FFFF
arm_func_start CTRDGi_GetAgbMakerCodeAtInit
CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808
stmdb sp!, {r4,lr}
mov r4, #0x0
bl CTRDGi_IsAgbCartridgeAtInit
cmp r0, #0x0
ldrne r0, _020DB82C ; =0x027FFC30
ldrneh r4, [r0, #0x6]
mov r0, r4
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020DB82C: .word 0x027FFC30
arm_func_start CTRDG_GetAgbMakerCode
CTRDG_GetAgbMakerCode: ; 0x020DB830
stmdb sp!, {r4,lr}
mov r4, #0x0
bl CTRDG_IsExisting
cmp r0, #0x0
beq _020DB84C
bl CTRDGi_GetAgbMakerCodeAtInit
mov r4, r0
_020DB84C:
mov r0, r4
ldmia sp!, {r4,lr}
bx lr
arm_func_start CTRDGi_GetAgbGameCodeAtInit
CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858
stmdb sp!, {r4,lr}
mov r4, #0x0
bl CTRDGi_IsAgbCartridgeAtInit
cmp r0, #0x0
ldrne r0, _020DB87C ; =0x027FFC30
ldrne r4, [r0, #0x8]
mov r0, r4
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020DB87C: .word 0x027FFC30
arm_func_start CTRDG_GetAgbGameCode
CTRDG_GetAgbGameCode: ; 0x020DB880
stmdb sp!, {r4,lr}
mov r4, #0x0
bl CTRDG_IsExisting
cmp r0, #0x0
beq _020DB89C
bl CTRDGi_GetAgbGameCodeAtInit
mov r4, r0
_020DB89C:
mov r0, r4
ldmia sp!, {r4,lr}
bx lr
arm_func_start CTRDGi_IsAgbCartridgeAtInit
CTRDGi_IsAgbCartridgeAtInit:
ldr r0, _020DB8BC ; =0x027FFC30
ldrb r0, [r0, #0x5]
mov r0, r0, lsl #0x1f
mov r0, r0, lsr #0x1f
bx lr
.balign 4
_020DB8BC: .word 0x027FFC30
arm_func_start CTRDG_IsOptionCartridge
CTRDG_IsOptionCartridge:
stmdb sp!, {lr}
sub sp, sp, #0x4
bl CTRDG_IsExisting
cmp r0, #0x0
beq _020DB8EC
bl CTRDGi_IsAgbCartridgeAtInit
cmp r0, #0x0
addeq sp, sp, #0x4
moveq r0, #0x1
ldmeqia sp!, {lr}
bxeq lr
_020DB8EC:
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
arm_func_start CTRDG_IsAgbCartridge
CTRDG_IsAgbCartridge: ; 0x020DB8FC
stmdb sp!, {lr}
sub sp, sp, #0x4
bl CTRDG_IsExisting
cmp r0, #0x0
beq _020DB928
bl CTRDGi_IsAgbCartridgeAtInit
cmp r0, #0x0
addne sp, sp, #0x4
movne r0, #0x1
ldmneia sp!, {lr}
bxne lr
_020DB928:
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
arm_func_start CTRDGi_InitCommon
CTRDGi_InitCommon: ; 0x020DB938
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020DB970 ; =UNK_021D6944
mov r3, #0x0
ldr r2, _020DB974 ; =0x05000001
add r0, sp, #0x0
str r3, [sp, #0x0]
bl SVC_CpuSet
bl OS_GetLockID
ldr r1, _020DB970 ; =UNK_021D6944
strh r0, [r1, #0x2]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020DB970: .word UNK_021D6944
_020DB974: .word 0x05000001
-306
View File
@@ -1,306 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.extern CTRDGi_EraseFlash4KBAT
.extern CTRDGi_EraseFlash4KBAsyncAT
.extern CTRDGi_EraseFlashChipAT
.extern CTRDGi_EraseFlashChipAsyncAT
.extern CTRDGi_EraseFlashChipAsyncLE
.extern CTRDGi_EraseFlashChipAsyncMX
.extern CTRDGi_EraseFlashChipLE
.extern CTRDGi_EraseFlashChipMX
.extern CTRDGi_EraseFlashSectorAT
.extern CTRDGi_EraseFlashSectorAsyncAT
.extern CTRDGi_EraseFlashSectorAsyncLE
.extern CTRDGi_EraseFlashSectorAsyncMX
.extern CTRDGi_EraseFlashSectorMX
.extern CTRDGi_PollingSR1MCOMMON
.extern CTRDGi_PollingSR512kCOMMON
.extern CTRDGi_WriteFlash4KBAT
.extern CTRDGi_WriteFlash4KBAsyncAT
.extern CTRDGi_WriteFlashSectorAT
.extern CTRDGi_WriteFlashSectorAsyncAT
.extern CTRDGi_WriteFlashSectorAsyncLE
.extern CTRDGi_WriteFlashSectorAsyncMX
.extern CTRDGi_WriteFlashSectorLE
.extern CTRDGi_WriteFlashSectorMX
.extern CTRDGi_WriteFlashSectorAsyncMX5
.extern CTRDGi_WriteFlashSectorMX5
.extern UNK_021D6B14
.extern UNK_021D6B30
.extern UNK_021D6B28
.extern UNK_021D6B1C
.extern UNK_021D6B24
.extern UNK_021D6B20
.extern UNK_021D6B0C
.extern UNK_021D6B34
.extern UNK_021D6B2C
.extern UNK_021D6B4C
.extern UNK_021D6B18
.section .rodata
.global UNK_02103FE4
UNK_02103FE4: ; 0x02103FE4
.byte 0x14, 0x00, 0x00, 0x00
.global UNK_02103FE8
UNK_02103FE8: ; 0x02103FE8
.word UNK_02104150
.word UNK_0210408C
.word UNK_0210418C
.global UNK_02103FF4
UNK_02103FF4: ; 0x02103FF4
.word UNK_0210410C
.word UNK_0210400C
.word UNK_021041D0
.word UNK_021040D0
.global UNK_02104004
UNK_02104004: ; 0x02104004
.byte 0x0A, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00
.global UNK_0210400C
UNK_0210400C: ; 0x0210400C
.word CTRDGi_WriteFlash4KBAT
.word CTRDGi_EraseFlashChipAT
.word CTRDGi_EraseFlash4KBAT
.word CTRDGi_WriteFlash4KBAsyncAT
.word CTRDGi_EraseFlashChipAsyncAT
.word CTRDGi_EraseFlash4KBAsyncAT
.word CTRDGi_PollingSR512kCOMMON
.word UNK_02104004
.byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3D, 0x00
.global UNK_02104048
UNK_02104048: ; 0x02104048
.word CTRDGi_WriteFlashSectorAT
.word CTRDGi_EraseFlashChipAT
.word CTRDGi_EraseFlashSectorAT
.word CTRDGi_WriteFlashSectorAsyncAT
.word CTRDGi_EraseFlashChipAsyncAT
.word CTRDGi_EraseFlashSectorAsyncAT
.word CTRDGi_PollingSR512kCOMMON
.word UNK_02104004
.byte 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3D, 0x00
.global UNK_02104084
UNK_02104084: ; 0x02104084
.byte 0x0A, 0x00, 0x0A, 0x00, 0xD0, 0x07, 0x88, 0x13
.global UNK_0210408C
UNK_0210408C: ; 0x0210408C
.word CTRDGi_WriteFlashSectorMX
.word CTRDGi_EraseFlashChipMX
.word CTRDGi_EraseFlashSectorMX
.word CTRDGi_WriteFlashSectorAsyncMX
.word CTRDGi_EraseFlashChipAsyncMX
.word CTRDGi_EraseFlashSectorAsyncMX
.word CTRDGi_PollingSR1MCOMMON
.word UNK_02104084
.byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x00, 0x13, 0x00
.global UNK_021040C8
UNK_021040C8: ; 0x021040C8
.byte 0x0A, 0x00, 0x0A, 0x00, 0x28, 0x00, 0xC8, 0x00
.global UNK_021040D0
UNK_021040D0: ; 0x021040D0
.word CTRDGi_WriteFlashSectorLE
.word CTRDGi_EraseFlashChipLE
.word CTRDGi_EraseFlashSectorLE
.word CTRDGi_WriteFlashSectorAsyncLE
.word CTRDGi_EraseFlashChipAsyncLE
.word CTRDGi_EraseFlashSectorAsyncLE
.word CTRDGi_PollingSR512kCOMMON
.word UNK_021040C8
.byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global UNK_0210410C
UNK_0210410C: ; 0x0210410C
.word CTRDGi_WriteFlashSectorLE
.word CTRDGi_EraseFlashChipLE
.word CTRDGi_EraseFlashSectorLE
.word CTRDGi_WriteFlashSectorAsyncLE
.word CTRDGi_EraseFlashChipAsyncLE
.word CTRDGi_EraseFlashSectorAsyncLE
.word CTRDGi_PollingSR512kCOMMON
.word UNK_021040C8
.byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xBF, 0x00, 0xD4, 0x00
.global UNK_02104148
UNK_02104148: ; 0x02104148
.byte 0x0A, 0x00, 0x0A, 0x00, 0xD0, 0x07, 0xD0, 0x07
.global UNK_02104150
UNK_02104150: ; 0x02104150
.word CTRDGi_WriteFlashSectorMX
.word CTRDGi_EraseFlashChipMX
.word CTRDGi_EraseFlashSectorMX
.word CTRDGi_WriteFlashSectorAsyncMX
.word CTRDGi_EraseFlashChipAsyncMX
.word CTRDGi_EraseFlashSectorAsyncMX
.word CTRDGi_PollingSR1MCOMMON
.word UNK_02104148
.byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x09, 0x00
.global UNK_0210418C
UNK_0210418C: ; 0x0210418C
.word CTRDGi_WriteFlashSectorMX
.word CTRDGi_EraseFlashChipMX
.word CTRDGi_EraseFlashSectorMX
.word CTRDGi_WriteFlashSectorAsyncMX
.word CTRDGi_EraseFlashChipAsyncMX
.word CTRDGi_EraseFlashSectorAsyncMX
.word CTRDGi_PollingSR1MCOMMON
.word UNK_02104148
.byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global UNK_021041C8
UNK_021041C8: ; 0x021041C8
.byte 0x0A, 0x00, 0x0A, 0x00, 0xF4, 0x01, 0xF4, 0x01
.global UNK_021041D0
UNK_021041D0: ; 0x021041D0
.word CTRDGi_WriteFlashSectorMX5
.word CTRDGi_EraseFlashChipLE
.word CTRDGi_EraseFlashSectorLE
.word CTRDGi_WriteFlashSectorAsyncMX5
.word CTRDGi_EraseFlashChipAsyncLE
.word CTRDGi_EraseFlashSectorAsyncLE
.word CTRDGi_PollingSR512kCOMMON
.word UNK_021041C8
.byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x1B, 0x00
.section .bss
.text
arm_func_start CTRDG_IdentifyAgbBackup
CTRDG_IdentifyAgbBackup: ; 0x020DBD50
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
cmp r7, #0x1
mov r0, #0x1
bhi _020DBEAC
bl OS_GetLockID
ldr r1, _020DBED8 ; =UNK_021D6B0C
strh r0, [r1, #0x0]
ldrh r0, [r1, #0x0]
bl OS_LockCartridge
ldr r6, _020DBEDC ; =0x04000204
ldr r1, _020DBEE0 ; =UNK_02103FE4
ldrh r3, [r6, #0x0]
ldrh r2, [r6, #0x0]
ldr r0, _020DBEE4 ; =UNK_021D6B28
and r4, r3, #0x3
bic r2, r2, #0x3
orr r2, r2, #0x3
strh r2, [r6, #0x0]
str r1, [r0, #0x0]
bl CTRDGi_ReadFlashID
ldr r2, _020DBEDC ; =0x04000204
mov r6, r0
ldrh r1, [r2, #0x0]
cmp r7, #0x0
ldreq r5, _020DBEE8 ; =UNK_02103FF4
bic r1, r1, #0x3
orr r1, r1, r4
cmp r7, #0x1
ldr r0, _020DBED8 ; =UNK_021D6B0C
strh r1, [r2, #0x0]
ldrh r0, [r0, #0x0]
ldreq r5, _020DBEEC ; =UNK_02103FE8
bl OS_UnlockCartridge
ldr r2, [r5, #0x0]
mov r0, #0x1
ldrh r1, [r2, #0x38]
cmp r1, #0x0
beq _020DBE14
and r3, r6, #0xff
_020DBDF4:
ldrh r1, [r2, #0x38]
cmp r3, r1
moveq r0, #0x0
beq _020DBE14
ldr r2, [r5, #0x4]!
ldrh r1, [r2, #0x38]
cmp r1, #0x0
bne _020DBDF4
_020DBE14:
ldr r2, [r2, #0x0]
ldr r1, _020DBEF0 ; =UNK_021D6B14
ldr r3, _020DBEF4 ; =UNK_021D6B34
str r2, [r1, #0x0]
ldr r1, [r5, #0x0]
ldr r2, _020DBEF8 ; =UNK_021D6B2C
ldr r4, [r1, #0x4]
ldr r1, _020DBEFC ; =UNK_021D6B18
str r4, [r3, #0x0]
ldr r3, [r5, #0x0]
ldr r6, _020DBF00 ; =UNK_021D6B1C
ldr r3, [r3, #0x8]
ldr r4, _020DBF04 ; =UNK_021D6B30
str r3, [r2, #0x0]
ldr r2, [r5, #0x0]
ldr r3, _020DBF08 ; =UNK_021D6B24
ldr r7, [r2, #0xc]
ldr r2, _020DBEE4 ; =UNK_021D6B28
str r7, [r1, #0x0]
ldr r7, [r5, #0x0]
ldr r1, _020DBF0C ; =UNK_021D6B20
ldr r7, [r7, #0x10]
add sp, sp, #0x4
str r7, [r6, #0x0]
ldr r6, [r5, #0x0]
ldr r6, [r6, #0x14]
str r6, [r4, #0x0]
ldr r4, [r5, #0x0]
ldr r4, [r4, #0x18]
str r4, [r3, #0x0]
ldr r3, [r5, #0x0]
ldr r3, [r3, #0x1c]
str r3, [r2, #0x0]
ldr r2, [r5, #0x0]
add r2, r2, #0x20
str r2, [r1, #0x0]
ldmia sp!, {r4-r7,lr}
bx lr
_020DBEAC:
cmp r7, #0x2
addne sp, sp, #0x4
ldmneia sp!, {r4-r7,lr}
bxne lr
bl OS_GetLockID
ldr r1, _020DBF10 ; =UNK_021D6B4C
strh r0, [r1, #0x0]
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020DBED8: .word UNK_021D6B0C
_020DBEDC: .word 0x04000204
_020DBEE0: .word UNK_02103FE4
_020DBEE4: .word UNK_021D6B28
_020DBEE8: .word UNK_02103FF4
_020DBEEC: .word UNK_02103FE8
_020DBEF0: .word UNK_021D6B14
_020DBEF4: .word UNK_021D6B34
_020DBEF8: .word UNK_021D6B2C
_020DBEFC: .word UNK_021D6B18
_020DBF00: .word UNK_021D6B1C
_020DBF04: .word UNK_021D6B30
_020DBF08: .word UNK_021D6B24
_020DBF0C: .word UNK_021D6B20
_020DBF10: .word UNK_021D6B4C
@@ -1,13 +1,15 @@
.include "asm/macros.inc"
.include "global.inc"
.extern UNK_0210400C
.extern UNK_021D6B20
.extern UNK_021D6B24
.extern UNK_021D6B0C
.extern UNK_021D6B38
.extern UNK_02104048
.extern CTRDGi_PollingSR512kCOMMON
.extern AgbFlash
.extern CTRDGi_PollingSR
.extern ctrdgi_flash_lock_id
.extern UNK_021D6B08
.extern CTRDGi_EraseFlashChipCoreAT
.extern CTRDGi_EraseFlashSectorCoreAT
.extern AT29LV512_org
.extern AT29LV512_lib
.text
@@ -170,7 +172,7 @@ CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780
ldrhs r0, _020DC85C ; =0x000080FF
ldmcsia sp!, {r4-r9,lr}
bxcs lr
ldr r1, _020DC860 ; =UNK_0210400C
ldr r1, _020DC860 ; =AT29LV512_lib
mov r0, r0, lsl #0x15
ldr r1, [r1, #0x24]
ldr r4, _020DC864 ; =UNK_021D6B08
@@ -179,7 +181,7 @@ CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780
ldrh r0, [r4, #0x0]
cmp r0, #0x0
beq _020DC84C
ldr r0, _020DC868 ; =UNK_02104048
ldr r0, _020DC868 ; =AT29LV512_org
ldr r6, [r0, #0x24]
mov r5, #0x2
_020DC7F4:
@@ -214,9 +216,9 @@ _020DC84C:
bx lr
.balign 4
_020DC85C: .word 0x000080FF
_020DC860: .word UNK_0210400C
_020DC860: .word AT29LV512_lib
_020DC864: .word UNK_021D6B08
_020DC868: .word UNK_02104048
_020DC868: .word AT29LV512_org
arm_func_start CTRDGi_WriteFlashSectorCoreAT
CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C
@@ -228,19 +230,19 @@ CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
ldr r0, _020DC984 ; =UNK_021D6B0C
ldr r0, _020DC984 ; =ctrdgi_flash_lock_id
ldr r1, [r5, #0x0]
ldrh r0, [r0, #0x0]
str r1, [r4, #0x0]
ldr r4, [sp, #0xc]
bl OS_LockCartridge
ldr r5, _020DC988 ; =0x04000204
ldr r1, _020DC98C ; =UNK_021D6B20
ldr r1, _020DC98C ; =AgbFlash
ldrh r0, [r5, #0x0]
ldr r1, [r1, #0x0]
ldrh r2, [r5, #0x0]
ldr r3, [r1, #0x10]
ldr r1, _020DC990 ; =UNK_02104048
ldr r1, _020DC990 ; =AT29LV512_org
bic r2, r2, #0x3
orr r2, r2, r3
strh r2, [r5, #0x0]
@@ -271,7 +273,7 @@ _020DC91C:
bne _020DC91C
_020DC92C:
ldr ip, _020DC994 ; =0x04000208
ldr r3, _020DC9A0 ; =UNK_021D6B24
ldr r3, _020DC9A0 ; =CTRDGi_PollingSR
ldrh r0, [r12, #0x0]
sub r1, r1, #0x1
mov r0, #0x1
@@ -280,7 +282,7 @@ _020DC92C:
ldr r3, [r3, #0x0]
blx r3
ldr r3, _020DC988 ; =0x04000204
ldr r1, _020DC984 ; =UNK_021D6B0C
ldr r1, _020DC984 ; =ctrdgi_flash_lock_id
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
@@ -293,14 +295,14 @@ _020DC92C:
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020DC984: .word UNK_021D6B0C
_020DC984: .word ctrdgi_flash_lock_id
_020DC988: .word 0x04000204
_020DC98C: .word UNK_021D6B20
_020DC990: .word UNK_02104048
_020DC98C: .word AgbFlash
_020DC990: .word AT29LV512_org
_020DC994: .word 0x04000208
_020DC998: .word 0x0A005555
_020DC99C: .word 0x0A002AAA
_020DC9A0: .word UNK_021D6B24
_020DC9A0: .word CTRDGi_PollingSR
arm_func_start CTRDGi_EraseFlash4KBCoreAT
CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4
@@ -354,158 +356,3 @@ _020DCA18:
bx lr
.balign 4
_020DCA54: .word 0x000080FF
arm_func_start CTRDGi_EraseFlashSectorCoreAT
CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x24
mov r5, r0
ldmia r5!, {r0-r3}
add r4, sp, #0x0
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
ldr r0, [r5, #0x0]
ldr r1, _020DCB80 ; =UNK_02104048
str r0, [r4, #0x0]
ldr r0, _020DCB84 ; =UNK_021D6B0C
ldrh r2, [sp, #0x20]
ldrh r1, [r1, #0x28]
ldrh r0, [r0, #0x0]
mov r1, r2, lsl r1
add r5, r1, #0xa000000
bl OS_LockCartridge
ldr r4, _020DCB88 ; =0x04000204
ldr r1, _020DCB8C ; =UNK_021D6B20
ldrh r0, [r4, #0x0]
ldr r2, [r1, #0x0]
ldrh r1, [r4, #0x0]
ldr r2, [r2, #0x10]
ldr r3, _020DCB90 ; =0x04000208
bic r1, r1, #0x3
orr r1, r1, r2
strh r1, [r4, #0x0]
ldrh r2, [r3, #0x0]
mov r1, #0x0
ldr r4, _020DCB94 ; =0x0A005555
strh r1, [r3, #0x0]
mov r3, #0xaa
strb r3, [r4, #0x0]
ldr r1, _020DCB98 ; =0x0A002AAA
mov r3, #0x55
strb r3, [r1, #0x0]
mov r3, #0xa0
strb r3, [r4, #0x0]
ldr r1, _020DCB80 ; =UNK_02104048
and r4, r0, #0x3
ldr r1, [r1, #0x24]
cmp r1, #0x0
beq _020DCB18
mov r0, #0xff
_020DCB0C:
strb r0, [r5], #0x1
subs r1, r1, #0x1
bne _020DCB0C
_020DCB18:
ldr ip, _020DCB90 ; =0x04000208
ldr r3, _020DCB9C ; =UNK_021D6B24
ldrh r0, [r12, #0x0]
sub r1, r5, #0x1
strh r2, [r12, #0x0]
ldr r3, [r3, #0x0]
mov r0, #0x1
mov r2, #0xff
blx r3
ldr r2, _020DCB88 ; =0x04000204
movs r5, r0
ldrh r1, [r2, #0x0]
andne r0, r5, #0xff00
orrne r0, r0, #0x2
movne r0, r0, lsl #0x10
bic r1, r1, #0x3
movne r5, r0, lsr #0x10
orr r1, r1, r4
ldr r0, _020DCB84 ; =UNK_021D6B0C
strh r1, [r2, #0x0]
ldrh r0, [r0, #0x0]
bl OS_UnlockCartridge
mov r0, r5
add sp, sp, #0x24
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020DCB80: .word UNK_02104048
_020DCB84: .word UNK_021D6B0C
_020DCB88: .word 0x04000204
_020DCB8C: .word UNK_021D6B20
_020DCB90: .word 0x04000208
_020DCB94: .word 0x0A005555
_020DCB98: .word 0x0A002AAA
_020DCB9C: .word UNK_021D6B24
arm_func_start CTRDGi_EraseFlashChipCoreAT
CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r0, _020DCC7C ; =UNK_021D6B0C
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r4, _020DCC80 ; =0x04000204
ldr r0, _020DCC84 ; =UNK_021D6B20
ldrh r3, [r4, #0x0]
ldr r0, [r0, #0x0]
ldrh r1, [r4, #0x0]
ldr r2, [r0, #0x10]
ldr r0, _020DCC88 ; =0x04000208
bic r1, r1, #0x3
orr r1, r1, r2
strh r1, [r4, #0x0]
ldrh r4, [r0, #0x0]
mov r2, #0x0
ldr r1, _020DCC8C ; =UNK_021D6B38
strh r2, [r0, #0x0]
ldr lr, _020DCC90 ; =0x0A005555
str r4, [r1, #0x0]
mov r5, #0xaa
ldr r4, _020DCC94 ; =0x0A002AAA
strb r5, [lr, #0x0]
mov r12, #0x55
strb r12, [r4, #0x0]
mov r2, #0x80
strb r2, [lr, #0x0]
strb r5, [lr, #0x0]
strb r12, [r4, #0x0]
mov r2, #0x10
strb r2, [lr, #0x0]
ldrh r2, [r0, #0x0]
ldr r2, [r1, #0x0]
ldr r1, _020DCC98 ; =UNK_021D6B24
strh r2, [r0, #0x0]
ldr r4, [r1, #0x0]
mov r0, #0x3
mov r1, #0xa000000
mov r2, #0xff
and r5, r3, #0x3
blx r4
ldr r3, _020DCC80 ; =0x04000204
ldr r1, _020DCC7C ; =UNK_021D6B0C
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
orr r0, r0, r5
strh r0, [r3, #0x0]
ldrh r0, [r1, #0x0]
bl OS_UnlockCartridge
mov r0, r4
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020DCC7C: .word UNK_021D6B0C
_020DCC80: .word 0x04000204
_020DCC84: .word UNK_021D6B20
_020DCC88: .word 0x04000208
_020DCC8C: .word UNK_021D6B38
_020DCC90: .word 0x0A005555
_020DCC94: .word 0x0A002AAA
_020DCC98: .word UNK_021D6B24
+29
View File
@@ -0,0 +1,29 @@
.include "asm/macros.inc"
.include "global.inc"
.extern CTRDGi_EraseFlashChipAsyncMX
.extern CTRDGi_EraseFlashChipMX
.extern CTRDGi_EraseFlashSectorAsyncMX
.extern CTRDGi_EraseFlashSectorMX
.extern CTRDGi_PollingSR1MCOMMON
.extern CTRDGi_WriteFlashSectorAsyncMX
.extern CTRDGi_WriteFlashSectorMX
.section .rodata
.global LeMaxTime
LeMaxTime: ; 0x02104084
.short 10, 10, 2000, 5000
.global LE26FV10N1TS_10
LE26FV10N1TS_10: ; 0x0210408C
.word CTRDGi_WriteFlashSectorMX
.word CTRDGi_EraseFlashChipMX
.word CTRDGi_EraseFlashSectorMX
.word CTRDGi_WriteFlashSectorAsyncMX
.word CTRDGi_EraseFlashChipAsyncMX
.word CTRDGi_EraseFlashSectorAsyncMX
.word CTRDGi_PollingSR1MCOMMON
.word LeMaxTime
.byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x00, 0x13, 0x00
+73 -40
View File
@@ -1,12 +1,45 @@
.include "asm/macros.inc"
.include "global.inc"
.extern UNK_021D6B20
.extern UNK_021D6B24
.extern UNK_021D6B0C
.extern UNK_021D6B38
.extern CTRDGi_PollingSR512kCOMMON
.extern AgbFlash
.extern CTRDGi_PollingSR
.extern ctrdgi_flash_lock_id
.extern ctrdgi_backup_irq
.extern UNK_021D6B08
.section .rodata
.global leMaxTime
leMaxTime: ; 0x021040C8
.byte 0x0A, 0x00, 0x0A, 0x00, 0x28, 0x00, 0xC8, 0x00
.global defaultFlash512
defaultFlash512: ; 0x021040D0
.word CTRDGi_WriteFlashSectorLE
.word CTRDGi_EraseFlashChipLE
.word CTRDGi_EraseFlashSectorLE
.word CTRDGi_WriteFlashSectorAsyncLE
.word CTRDGi_EraseFlashChipAsyncLE
.word CTRDGi_EraseFlashSectorAsyncLE
.word CTRDGi_PollingSR512kCOMMON
.word leMaxTime
.byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LE39FW512
LE39FW512: ; 0x0210410C
.word CTRDGi_WriteFlashSectorLE
.word CTRDGi_EraseFlashChipLE
.word CTRDGi_EraseFlashSectorLE
.word CTRDGi_WriteFlashSectorAsyncLE
.word CTRDGi_EraseFlashChipAsyncLE
.word CTRDGi_EraseFlashSectorAsyncLE
.word CTRDGi_PollingSR512kCOMMON
.word leMaxTime
.byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xBF, 0x00, 0xD4, 0x00
.text
arm_func_start CTRDGi_WriteFlashSectorAsyncLE
@@ -95,13 +128,13 @@ CTRDGi_EraseFlashChipLE: ; 0x020DCD70
arm_func_start CTRDGi_VerifyFlashErase
CTRDGi_VerifyFlashErase: ; 0x020DCD94
stmdb sp!, {r4-r6,lr}
ldr r2, _020DCE14 ; =UNK_021D6B0C
ldr r2, _020DCE14 ; =ctrdgi_flash_lock_id
mov r4, r0
ldrh r0, [r2, #0x0]
mov r5, r1
bl OS_LockCartridge
ldr ip, _020DCE18 ; =0x04000204
ldr r0, _020DCE1C ; =UNK_021D6B20
ldr r0, _020DCE1C ; =AgbFlash
ldrh r3, [r12, #0x0]
ldr r0, [r0, #0x0]
ldrh r1, [r12, #0x0]
@@ -115,7 +148,7 @@ CTRDGi_VerifyFlashErase: ; 0x020DCD94
blx r5
cmp r0, #0x0
ldr r2, _020DCE18 ; =0x04000204
ldr r0, _020DCE14 ; =UNK_021D6B0C
ldr r0, _020DCE14 ; =ctrdgi_flash_lock_id
ldrh r1, [r2, #0x0]
ldrne r4, _020DCE20 ; =0x00008004
bic r1, r1, #0x3
@@ -127,14 +160,14 @@ CTRDGi_VerifyFlashErase: ; 0x020DCD94
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020DCE14: .word UNK_021D6B0C
_020DCE14: .word ctrdgi_flash_lock_id
_020DCE18: .word 0x04000204
_020DCE1C: .word UNK_021D6B20
_020DCE1C: .word AgbFlash
_020DCE20: .word 0x00008004
arm_func_start CTRDGi_VerifyFlashCoreFF
CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24
ldr r1, _020DCE54 ; =UNK_021D6B20
ldr r1, _020DCE54 ; =AgbFlash
ldr r1, [r1, #0x0]
ldr r2, [r1, #0x4]
cmp r2, #0x0
@@ -149,7 +182,7 @@ _020DCE4C:
mov r0, r2
bx lr
.balign 4
_020DCE54: .word UNK_021D6B20
_020DCE54: .word AgbFlash
arm_func_start CTRDGi_WriteFlashSectorCoreLE
CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58
@@ -170,7 +203,7 @@ CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58
ldrhs r0, _020DD018 ; =0x000080FF
ldmcsia sp!, {r4-r9,lr}
bxcs lr
ldr r0, _020DD01C ; =UNK_021D6B20
ldr r0, _020DD01C ; =AgbFlash
mov r9, #0x0
ldr r0, [r0, #0x0]
ldrh r0, [r0, #0x8]
@@ -214,11 +247,11 @@ _020DCF1C:
cmp r9, r5
bls _020DCF1C
_020DCF38:
ldr r0, _020DD024 ; =UNK_021D6B0C
ldr r0, _020DD024 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r5, _020DD028 ; =0x04000204
ldr r1, _020DD01C ; =UNK_021D6B20
ldr r1, _020DD01C ; =AgbFlash
ldrh r0, [r5, #0x0]
ldr r3, [r1, #0x0]
ldrh r2, [r5, #0x0]
@@ -233,7 +266,7 @@ _020DCF38:
mov r2, #0x0
strh r1, [r7, #0x0]
ldrh r3, [r9, #0x0]
ldr r1, _020DD034 ; =UNK_021D6B38
ldr r1, _020DD034 ; =ctrdgi_backup_irq
and r5, r0, #0x3
strh r2, [r9, #0x0]
ldrh r0, [r7, #0x0]
@@ -256,13 +289,13 @@ _020DCFA0:
bne _020DCFA0
_020DCFD4:
ldr r3, _020DD030 ; =0x04000208
ldr r0, _020DD034 ; =UNK_021D6B38
ldr r0, _020DD034 ; =ctrdgi_backup_irq
ldrh r1, [r3, #0x0]
ldr r0, [r0, #0x0]
ldr r2, _020DD028 ; =0x04000204
strh r0, [r3, #0x0]
ldrh r1, [r2, #0x0]
ldr r0, _020DD024 ; =UNK_021D6B0C
ldr r0, _020DD024 ; =ctrdgi_flash_lock_id
bic r1, r1, #0x3
orr r1, r1, r5
strh r1, [r2, #0x0]
@@ -274,13 +307,13 @@ _020DCFD4:
bx lr
.balign 4
_020DD018: .word 0x000080FF
_020DD01C: .word UNK_021D6B20
_020DD01C: .word AgbFlash
_020DD020: .word CTRDGi_VerifyFlashCoreFF
_020DD024: .word UNK_021D6B0C
_020DD024: .word ctrdgi_flash_lock_id
_020DD028: .word 0x04000204
_020DD02C: .word UNK_021D6B08
_020DD030: .word 0x04000208
_020DD034: .word UNK_021D6B38
_020DD034: .word ctrdgi_backup_irq
arm_func_start CTRDGi_ProgramFlashByteLE
CTRDGi_ProgramFlashByteLE: ; 0x020DD038
@@ -296,7 +329,7 @@ CTRDGi_ProgramFlashByteLE: ; 0x020DD038
mov r0, #0xa0
strb r0, [r12, #0x0]
ldrb r2, [lr, #0x0]
ldr r3, _020DD094 ; =UNK_021D6B24
ldr r3, _020DD094 ; =CTRDGi_PollingSR
mov r0, #0x1
strb r2, [r1, #0x0]
ldrb r2, [lr, #0x0]
@@ -308,7 +341,7 @@ CTRDGi_ProgramFlashByteLE: ; 0x020DD038
.balign 4
_020DD08C: .word 0x0A005555
_020DD090: .word 0x0A002AAA
_020DD094: .word UNK_021D6B24
_020DD094: .word CTRDGi_PollingSR
arm_func_start CTRDGi_EraseFlashSectorCoreLE
CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
@@ -328,11 +361,11 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
ldrhs r0, _020DD1B8 ; =0x000080FF
ldmcsia sp!, {r4-r6,lr}
bxcs lr
ldr r0, _020DD1BC ; =UNK_021D6B0C
ldr r0, _020DD1BC ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r6, _020DD1C0 ; =0x04000204
ldr r1, _020DD1C4 ; =UNK_021D6B20
ldr r1, _020DD1C4 ; =AgbFlash
ldrh r3, [r6, #0x0]
ldr r0, [r1, #0x0]
ldrh r2, [r6, #0x0]
@@ -345,7 +378,7 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
ldrh r5, [r0, #0x0]
ldrh r12, [r1, #0x8]
mov r1, #0x0
ldr r2, _020DD1CC ; =UNK_021D6B38
ldr r2, _020DD1CC ; =ctrdgi_backup_irq
strh r1, [r0, #0x0]
mov r6, r4, lsl r12
ldr lr, _020DD1D0 ; =0x0A005555
@@ -364,7 +397,7 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
strb r4, [r1, #0x0]
ldrh r4, [r0, #0x0]
ldr r4, [r2, #0x0]
ldr r2, _020DD1D8 ; =UNK_021D6B24
ldr r2, _020DD1D8 ; =CTRDGi_PollingSR
strh r4, [r0, #0x0]
ldr r4, [r2, #0x0]
mov r0, #0x2
@@ -372,7 +405,7 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
and r5, r3, #0x3
blx r4
ldr r3, _020DD1C0 ; =0x04000204
ldr r1, _020DD1BC ; =UNK_021D6B0C
ldr r1, _020DD1BC ; =ctrdgi_flash_lock_id
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
@@ -386,24 +419,24 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
bx lr
.balign 4
_020DD1B8: .word 0x000080FF
_020DD1BC: .word UNK_021D6B0C
_020DD1BC: .word ctrdgi_flash_lock_id
_020DD1C0: .word 0x04000204
_020DD1C4: .word UNK_021D6B20
_020DD1C4: .word AgbFlash
_020DD1C8: .word 0x04000208
_020DD1CC: .word UNK_021D6B38
_020DD1CC: .word ctrdgi_backup_irq
_020DD1D0: .word 0x0A005555
_020DD1D4: .word 0x0A002AAA
_020DD1D8: .word UNK_021D6B24
_020DD1D8: .word CTRDGi_PollingSR
arm_func_start CTRDGi_EraseFlashChipCoreLE
CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r0, _020DD2B8 ; =UNK_021D6B0C
ldr r0, _020DD2B8 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r4, _020DD2BC ; =0x04000204
ldr r0, _020DD2C0 ; =UNK_021D6B20
ldr r0, _020DD2C0 ; =AgbFlash
ldrh r3, [r4, #0x0]
ldr r0, [r0, #0x0]
ldrh r1, [r4, #0x0]
@@ -414,7 +447,7 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
strh r1, [r4, #0x0]
ldrh r4, [r0, #0x0]
mov r2, #0x0
ldr r1, _020DD2C8 ; =UNK_021D6B38
ldr r1, _020DD2C8 ; =ctrdgi_backup_irq
strh r2, [r0, #0x0]
ldr lr, _020DD2CC ; =0x0A005555
str r4, [r1, #0x0]
@@ -431,7 +464,7 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
strb r2, [lr, #0x0]
ldrh r2, [r0, #0x0]
ldr r2, [r1, #0x0]
ldr r1, _020DD2D4 ; =UNK_021D6B24
ldr r1, _020DD2D4 ; =CTRDGi_PollingSR
strh r2, [r0, #0x0]
ldr r4, [r1, #0x0]
mov r0, #0x3
@@ -440,7 +473,7 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
and r5, r3, #0x3
blx r4
ldr r3, _020DD2BC ; =0x04000204
ldr r1, _020DD2B8 ; =UNK_021D6B0C
ldr r1, _020DD2B8 ; =ctrdgi_flash_lock_id
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
@@ -453,11 +486,11 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020DD2B8: .word UNK_021D6B0C
_020DD2B8: .word ctrdgi_flash_lock_id
_020DD2BC: .word 0x04000204
_020DD2C0: .word UNK_021D6B20
_020DD2C0: .word AgbFlash
_020DD2C4: .word 0x04000208
_020DD2C8: .word UNK_021D6B38
_020DD2C8: .word ctrdgi_backup_irq
_020DD2CC: .word 0x0A005555
_020DD2D0: .word 0x0A002AAA
_020DD2D4: .word UNK_021D6B24
_020DD2D4: .word CTRDGi_PollingSR
+70 -37
View File
@@ -1,12 +1,45 @@
.include "asm/macros.inc"
.include "global.inc"
.extern UNK_021D6B20
.extern UNK_021D6B24
.extern UNK_021D6B0C
.extern UNK_021D6B38
.extern CTRDGi_PollingSR1MCOMMON
.extern AgbFlash
.extern CTRDGi_PollingSR
.extern ctrdgi_flash_lock_id
.extern ctrdgi_backup_irq
.extern UNK_021D6B08
.section .rodata
.global MxMaxTime
MxMaxTime: ; 0x02104148
.short 10, 10, 2000, 2000
.global MX29L010
MX29L010: ; 0x02104150
.word CTRDGi_WriteFlashSectorMX
.word CTRDGi_EraseFlashChipMX
.word CTRDGi_EraseFlashSectorMX
.word CTRDGi_WriteFlashSectorAsyncMX
.word CTRDGi_EraseFlashChipAsyncMX
.word CTRDGi_EraseFlashSectorAsyncMX
.word CTRDGi_PollingSR1MCOMMON
.word MxMaxTime
.byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x09, 0x00
.global defaultFlash1M
defaultFlash1M: ; 0x0210418C
.word CTRDGi_WriteFlashSectorMX
.word CTRDGi_EraseFlashChipMX
.word CTRDGi_EraseFlashSectorMX
.word CTRDGi_WriteFlashSectorAsyncMX
.word CTRDGi_EraseFlashChipAsyncMX
.word CTRDGi_EraseFlashSectorAsyncMX
.word CTRDGi_PollingSR1MCOMMON
.word MxMaxTime
.byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.text
arm_func_start CTRDGi_WriteFlashSectorAsyncMX
@@ -102,7 +135,7 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
ldr r0, _020DD540 ; =UNK_021D6B20
ldr r0, _020DD540 ; =AgbFlash
ldr r1, [r5, #0x0]
ldr r0, [r0, #0x0]
str r1, [r4, #0x0]
@@ -120,11 +153,11 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
addne sp, sp, #0x28
ldmneia sp!, {r4-r8,lr}
bxne lr
ldr r0, _020DD548 ; =UNK_021D6B0C
ldr r0, _020DD548 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r7, _020DD54C ; =0x04000204
ldr r0, _020DD540 ; =UNK_021D6B20
ldr r0, _020DD540 ; =AgbFlash
ldrh r3, [r7, #0x0]
ldr r2, [r0, #0x0]
ldrh r1, [r7, #0x0]
@@ -136,7 +169,7 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
strh r1, [r7, #0x0]
and r7, r3, #0x3
bl CTRDGi_SetFlashBankMx
ldr r0, _020DD540 ; =UNK_021D6B20
ldr r0, _020DD540 ; =AgbFlash
and r1, r5, #0xf
ldr r3, [r0, #0x0]
mov r0, r1, lsl #0x10
@@ -151,7 +184,7 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
mov r3, r5, lsl r3
strh r0, [r1, #0x0]
ldrh r1, [r8, #0x0]
ldr r0, _020DD558 ; =UNK_021D6B38
ldr r0, _020DD558 ; =ctrdgi_backup_irq
add r5, r3, #0xa000000
str r2, [r0, #0x0]
cmp r1, #0x0
@@ -172,13 +205,13 @@ _020DD4C8:
bne _020DD4C8
_020DD4FC:
ldr r3, _020DD554 ; =0x04000208
ldr r0, _020DD558 ; =UNK_021D6B38
ldr r0, _020DD558 ; =ctrdgi_backup_irq
ldrh r1, [r3, #0x0]
ldr r0, [r0, #0x0]
ldr r2, _020DD54C ; =0x04000204
strh r0, [r3, #0x0]
ldrh r1, [r2, #0x0]
ldr r0, _020DD548 ; =UNK_021D6B0C
ldr r0, _020DD548 ; =ctrdgi_flash_lock_id
bic r1, r1, #0x3
orr r1, r1, r7
strh r1, [r2, #0x0]
@@ -189,13 +222,13 @@ _020DD4FC:
ldmia sp!, {r4-r8,lr}
bx lr
.balign 4
_020DD540: .word UNK_021D6B20
_020DD540: .word AgbFlash
_020DD544: .word 0x000080FF
_020DD548: .word UNK_021D6B0C
_020DD548: .word ctrdgi_flash_lock_id
_020DD54C: .word 0x04000204
_020DD550: .word UNK_021D6B08
_020DD554: .word 0x04000208
_020DD558: .word UNK_021D6B38
_020DD558: .word ctrdgi_backup_irq
arm_func_start CTRDGi_ProgramFlashByteMX
CTRDGi_ProgramFlashByteMX: ; 0x020DD55C
@@ -211,7 +244,7 @@ CTRDGi_ProgramFlashByteMX: ; 0x020DD55C
mov r0, #0xa0
strb r0, [r12, #0x0]
ldrb r2, [lr, #0x0]
ldr r3, _020DD5B8 ; =UNK_021D6B24
ldr r3, _020DD5B8 ; =CTRDGi_PollingSR
mov r0, #0x1
strb r2, [r1, #0x0]
ldrb r2, [lr, #0x0]
@@ -223,7 +256,7 @@ CTRDGi_ProgramFlashByteMX: ; 0x020DD55C
.balign 4
_020DD5B0: .word 0x0A005555
_020DD5B4: .word 0x0A002AAA
_020DD5B8: .word UNK_021D6B24
_020DD5B8: .word CTRDGi_PollingSR
arm_func_start CTRDGi_EraseFlashSectorCoreMX
CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
@@ -235,7 +268,7 @@ CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
ldr r0, _020DD748 ; =UNK_021D6B20
ldr r0, _020DD748 ; =AgbFlash
ldr r1, [r5, #0x0]
ldr r0, [r0, #0x0]
str r1, [r4, #0x0]
@@ -246,11 +279,11 @@ CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
ldrhs r0, _020DD74C ; =0x000080FF
ldmcsia sp!, {r4-r11,lr}
bxcs lr
ldr r0, _020DD750 ; =UNK_021D6B0C
ldr r0, _020DD750 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r5, _020DD754 ; =0x04000204
ldr r0, _020DD748 ; =UNK_021D6B20
ldr r0, _020DD748 ; =AgbFlash
ldrh r3, [r5, #0x0]
ldr r2, [r0, #0x0]
ldrh r1, [r5, #0x0]
@@ -278,10 +311,10 @@ CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
mov r4, #0x30
str r0, [sp, #0xc]
_020DD684:
ldr r0, _020DD748 ; =UNK_021D6B20
ldr r0, _020DD748 ; =AgbFlash
ldrh r12, [r8, #0x0]
ldr r0, [r0, #0x0]
ldr r3, _020DD75C ; =UNK_021D6B38
ldr r3, _020DD75C ; =ctrdgi_backup_irq
ldrh r1, [r0, #0x8]
ldr r0, [sp, #0x8]
ldr r2, [sp, #0xc]
@@ -300,10 +333,10 @@ _020DD684:
strb r6, [r3, #0x0]
strb r4, [r1, #0x0]
ldrh r3, [r8, #0x0]
ldr r3, _020DD75C ; =UNK_021D6B38
ldr r3, _020DD75C ; =ctrdgi_backup_irq
ldr r3, [r3, #0x0]
strh r3, [r8, #0x0]
ldr r3, _020DD768 ; =UNK_021D6B24
ldr r3, _020DD768 ; =CTRDGi_PollingSR
ldr r3, [r3, #0x0]
blx r3
str r0, [sp, #0x4]
@@ -316,7 +349,7 @@ _020DD684:
beq _020DD684
_020DD714:
ldr r2, _020DD754 ; =0x04000204
ldr r1, _020DD750 ; =UNK_021D6B0C
ldr r1, _020DD750 ; =ctrdgi_flash_lock_id
ldrh r0, [r2, #0x0]
bic r3, r0, #0x3
ldr r0, [sp, #0x0]
@@ -329,25 +362,25 @@ _020DD714:
ldmia sp!, {r4-r11,lr}
bx lr
.balign 4
_020DD748: .word UNK_021D6B20
_020DD748: .word AgbFlash
_020DD74C: .word 0x000080FF
_020DD750: .word UNK_021D6B0C
_020DD750: .word ctrdgi_flash_lock_id
_020DD754: .word 0x04000204
_020DD758: .word 0x04000208
_020DD75C: .word UNK_021D6B38
_020DD75C: .word ctrdgi_backup_irq
_020DD760: .word 0x0A005555
_020DD764: .word 0x0A002AAA
_020DD768: .word UNK_021D6B24
_020DD768: .word CTRDGi_PollingSR
arm_func_start CTRDGi_EraseFlashChipCoreMX
CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r0, _020DD848 ; =UNK_021D6B0C
ldr r0, _020DD848 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r4, _020DD84C ; =0x04000204
ldr r0, _020DD850 ; =UNK_021D6B20
ldr r0, _020DD850 ; =AgbFlash
ldrh r3, [r4, #0x0]
ldr r0, [r0, #0x0]
ldrh r1, [r4, #0x0]
@@ -358,7 +391,7 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
strh r1, [r4, #0x0]
ldrh r4, [r0, #0x0]
mov r2, #0x0
ldr r1, _020DD858 ; =UNK_021D6B38
ldr r1, _020DD858 ; =ctrdgi_backup_irq
strh r2, [r0, #0x0]
ldr lr, _020DD85C ; =0x0A005555
str r4, [r1, #0x0]
@@ -375,7 +408,7 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
strb r2, [lr, #0x0]
ldrh r2, [r0, #0x0]
ldr r2, [r1, #0x0]
ldr r1, _020DD864 ; =UNK_021D6B24
ldr r1, _020DD864 ; =CTRDGi_PollingSR
strh r2, [r0, #0x0]
ldr r4, [r1, #0x0]
mov r0, #0x3
@@ -384,7 +417,7 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
and r5, r3, #0x3
blx r4
ldr r3, _020DD84C ; =0x04000204
ldr r1, _020DD848 ; =UNK_021D6B0C
ldr r1, _020DD848 ; =ctrdgi_flash_lock_id
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
@@ -397,11 +430,11 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020DD848: .word UNK_021D6B0C
_020DD848: .word ctrdgi_flash_lock_id
_020DD84C: .word 0x04000204
_020DD850: .word UNK_021D6B20
_020DD850: .word AgbFlash
_020DD854: .word 0x04000208
_020DD858: .word UNK_021D6B38
_020DD858: .word ctrdgi_backup_irq
_020DD85C: .word 0x0A005555
_020DD860: .word 0x0A002AAA
_020DD864: .word UNK_021D6B24
_020DD864: .word CTRDGi_PollingSR
+31 -8
View File
@@ -1,9 +1,32 @@
.include "asm/macros.inc"
.include "global.inc"
.extern CTRDGi_EraseFlashChipAsyncLE
.extern CTRDGi_EraseFlashChipLE
.extern CTRDGi_EraseFlashSectorAsyncLE
.extern CTRDGi_PollingSR512kCOMMON
.extern UNK_021D6B08
.extern UNK_021D6B20
.extern UNK_021D6B0C
.extern AgbFlash
.extern ctrdgi_flash_lock_id
.section .rodata
.global PaMaxTime
PaMaxTime: ; 0x021041C8
.byte 0x0A, 0x00, 0x0A, 0x00, 0xF4, 0x01, 0xF4, 0x01
.global MN63F805MNP
MN63F805MNP: ; 0x021041D0
.word CTRDGi_WriteFlashSectorMX5
.word CTRDGi_EraseFlashChipLE
.word CTRDGi_EraseFlashSectorLE
.word CTRDGi_WriteFlashSectorAsyncMX5
.word CTRDGi_EraseFlashChipAsyncLE
.word CTRDGi_EraseFlashSectorAsyncLE
.word CTRDGi_PollingSR512kCOMMON
.word PaMaxTime
.byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x1B, 0x00
.text
@@ -46,7 +69,7 @@ CTRDGi_WriteFlashSectorCoreMX5: ; 0x020DD8C0
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
ldr r0, _020DD9E8 ; =UNK_021D6B20
ldr r0, _020DD9E8 ; =AgbFlash
ldr r1, [r5, #0x0]
ldr r0, [r0, #0x0]
str r1, [r4, #0x0]
@@ -64,11 +87,11 @@ CTRDGi_WriteFlashSectorCoreMX5: ; 0x020DD8C0
addne sp, sp, #0x28
ldmneia sp!, {r4-r8,lr}
bxne lr
ldr r0, _020DD9F0 ; =UNK_021D6B0C
ldr r0, _020DD9F0 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r7, _020DD9F4 ; =0x04000204
ldr r0, _020DD9E8 ; =UNK_021D6B20
ldr r0, _020DD9E8 ; =AgbFlash
ldrh r3, [r7, #0x0]
ldr r2, [r0, #0x0]
ldrh r1, [r7, #0x0]
@@ -103,7 +126,7 @@ _020DD984:
bne _020DD984
_020DD9B8:
ldr r2, _020DD9F4 ; =0x04000204
ldr r0, _020DD9F0 ; =UNK_021D6B0C
ldr r0, _020DD9F0 ; =ctrdgi_flash_lock_id
ldrh r1, [r2, #0x0]
bic r1, r1, #0x3
orr r1, r1, r7
@@ -115,8 +138,8 @@ _020DD9B8:
ldmia sp!, {r4-r8,lr}
bx lr
.balign 4
_020DD9E8: .word UNK_021D6B20
_020DD9E8: .word AgbFlash
_020DD9EC: .word 0x000080FF
_020DD9F0: .word UNK_021D6B0C
_020DD9F0: .word ctrdgi_flash_lock_id
_020DD9F4: .word 0x04000204
_020DD9F8: .word UNK_021D6B08
+45 -45
View File
@@ -7,52 +7,52 @@
UNK_021D6B08: ; 0x021D6B08
.space 0x4
.global UNK_021D6B0C
UNK_021D6B0C: ; 0x021D6B0C
.global ctrdgi_flash_lock_id
ctrdgi_flash_lock_id: ; 0x021D6B0C
.space 0x4
.global UNK_021D6B10
UNK_021D6B10: ; 0x021D6B10
.space 0x4
.global UNK_021D6B14
UNK_021D6B14: ; 0x021D6B14
.global CTRDGi_WriteAgbFlashSector
CTRDGi_WriteAgbFlashSector: ; 0x021D6B14
.space 0x4
.global UNK_021D6B18
UNK_021D6B18: ; 0x021D6B18
.global CTRDGi_WriteAgbFlashSectorAsync
CTRDGi_WriteAgbFlashSectorAsync: ; 0x021D6B18
.space 0x4
.global UNK_021D6B1C
UNK_021D6B1C: ; 0x021D6B1C
.global CTRDGi_EraseAgbFlashChipAsync
CTRDGi_EraseAgbFlashChipAsync: ; 0x021D6B1C
.space 0x4
.global UNK_021D6B20
UNK_021D6B20: ; 0x021D6B20
.global AgbFlash
AgbFlash: ; 0x021D6B20
.space 0x4
.global UNK_021D6B24
UNK_021D6B24: ; 0x021D6B24
.global CTRDGi_PollingSR
CTRDGi_PollingSR: ; 0x021D6B24
.space 0x4
.global UNK_021D6B28
UNK_021D6B28: ; 0x021D6B28
.global ctrdgi_fl_maxtime
ctrdgi_fl_maxtime: ; 0x021D6B28
.space 0x4
.global UNK_021D6B2C
UNK_021D6B2C: ; 0x021D6B2C
.global CTRDGi_EraseAgbFlashSector
CTRDGi_EraseAgbFlashSector: ; 0x021D6B2C
.space 0x4
.global UNK_021D6B30
UNK_021D6B30: ; 0x021D6B30
.global CTRDGi_EraseAgbFlashSectorAsync
CTRDGi_EraseAgbFlashSectorAsync: ; 0x021D6B30
.space 0x4
.global UNK_021D6B34
UNK_021D6B34: ; 0x021D6B34
.global CTRDGi_EraseAgbFlashChip
CTRDGi_EraseAgbFlashChip: ; 0x021D6B34
.space 0x4
.global UNK_021D6B38
UNK_021D6B38: ; 0x021D6B38
.global ctrdgi_backup_irq
ctrdgi_backup_irq: ; 0x021D6B38
.space 0x4
.global UNK_021D6B3C
@@ -63,8 +63,8 @@ UNK_021D6B3C: ; 0x021D6B3C
UNK_021D6B44: ; 0x021D6B44
.space 0x8
.global UNK_021D6B4C
UNK_021D6B4C: ; 0x021D6B4C
.global ctrdgi_sram_lock_id
ctrdgi_sram_lock_id: ; 0x021D6B4C
.space 0x4
.text
@@ -103,14 +103,14 @@ CTRDG_VerifyAgbFlash:
CTRDG_WriteAgbFlashSector:
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, _020DBF90 ; =UNK_021D6B14
ldr r2, _020DBF90 ; =CTRDGi_WriteAgbFlashSector
ldr r2, [r2, #0x0]
blx r2
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020DBF90: .word UNK_021D6B14
_020DBF90: .word CTRDGi_WriteAgbFlashSector
arm_func_start CTRDG_ReadAgbFlash
CTRDG_ReadAgbFlash: ; 0x020DBF94
@@ -178,7 +178,7 @@ CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
ldr r0, _020DC128 ; =UNK_021D6B0C
ldr r0, _020DC128 ; =ctrdgi_flash_lock_id
ldr r1, [r5, #0x0]
ldrh r0, [r0, #0x0]
str r1, [r4, #0x0]
@@ -187,7 +187,7 @@ CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C
ldr r4, [sp, #0x18]
bl OS_LockCartridge
ldr r3, _020DC12C ; =0x04000204
ldr r0, _020DC130 ; =UNK_021D6B20
ldr r0, _020DC130 ; =AgbFlash
ldrh r2, [r3, #0x0]
ldrh r1, [r3, #0x0]
and r7, r2, #0x3
@@ -205,7 +205,7 @@ CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C
mov r0, r0, lsl #0x10
mov r6, r0, lsr #0x10
_020DC0D4:
ldr r1, _020DC130 ; =UNK_021D6B20
ldr r1, _020DC130 ; =AgbFlash
mov r0, r5
ldr r1, [r1, #0x0]
mov r2, r4
@@ -214,7 +214,7 @@ _020DC0D4:
add r1, r1, #0xa000000
bl CTRDGi_VerifyFlashSectorCore
ldr r3, _020DC12C ; =0x04000204
ldr r1, _020DC128 ; =UNK_021D6B0C
ldr r1, _020DC128 ; =ctrdgi_flash_lock_id
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
@@ -227,9 +227,9 @@ _020DC0D4:
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020DC128: .word UNK_021D6B0C
_020DC128: .word ctrdgi_flash_lock_id
_020DC12C: .word 0x04000204
_020DC130: .word UNK_021D6B20
_020DC130: .word AgbFlash
arm_func_start CTRDGi_VerifyFlashSectorCore
CTRDGi_VerifyFlashSectorCore: ; 0x020DC134
@@ -259,7 +259,7 @@ CTRDGi_ReadAgbFlashCore: ; 0x020DC168
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
ldr r0, _020DC25C ; =UNK_021D6B0C
ldr r0, _020DC25C ; =ctrdgi_flash_lock_id
ldr r1, [r5, #0x0]
ldrh r0, [r0, #0x0]
str r1, [r4, #0x0]
@@ -269,7 +269,7 @@ CTRDGi_ReadAgbFlashCore: ; 0x020DC168
ldr r4, [sp, #0x18]
bl OS_LockCartridge
ldr r3, _020DC260 ; =0x04000204
ldr r0, _020DC264 ; =UNK_021D6B20
ldr r0, _020DC264 ; =AgbFlash
ldrh r2, [r3, #0x0]
ldrh r1, [r3, #0x0]
and r8, r2, #0x3
@@ -287,7 +287,7 @@ CTRDGi_ReadAgbFlashCore: ; 0x020DC168
mov r0, r0, lsl #0x10
mov r7, r0, lsr #0x10
_020DC1F4:
ldr r0, _020DC264 ; =UNK_021D6B20
ldr r0, _020DC264 ; =AgbFlash
cmp r4, #0x0
ldr r0, [r0, #0x0]
sub r4, r4, #0x1
@@ -304,7 +304,7 @@ _020DC218:
bne _020DC218
_020DC22C:
ldr r2, _020DC260 ; =0x04000204
ldr r0, _020DC25C ; =UNK_021D6B0C
ldr r0, _020DC25C ; =ctrdgi_flash_lock_id
ldrh r1, [r2, #0x0]
bic r1, r1, #0x3
orr r1, r1, r8
@@ -316,9 +316,9 @@ _020DC22C:
ldmia sp!, {r4-r8,lr}
bx lr
.balign 4
_020DC25C: .word UNK_021D6B0C
_020DC25C: .word ctrdgi_flash_lock_id
_020DC260: .word 0x04000204
_020DC264: .word UNK_021D6B20
_020DC264: .word AgbFlash
arm_func_start CTRDGi_PollingSR1MCOMMON
CTRDGi_PollingSR1MCOMMON: ; 0x020DC268
@@ -398,7 +398,7 @@ _020DC33C:
_020DC360: ; 0x020DC360
cmp r7, r0
beq _020DC390
ldr r0, _020DC3AC ; =UNK_021D6B20
ldr r0, _020DC3AC ; =AgbFlash
ldr r0, [r0, #0x0]
ldrh r0, [r0, #0x18]
cmp r0, #0xc2
@@ -418,7 +418,7 @@ _020DC394: ; 0x020DC394
bx lr
.balign 4
_020DC3A8: .word UNK_021D6B10
_020DC3AC: .word UNK_021D6B20
_020DC3AC: .word AgbFlash
_020DC3B0: .word 0x0A005555
arm_func_start CTRDGi_ReadSrFunc
@@ -463,7 +463,7 @@ _020DC42C: .word UNK_021D6B10
StartFlashTimer: ; 0x020DC430
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020DC47C ; =UNK_021D6B28
ldr r1, _020DC47C ; =ctrdgi_fl_maxtime
ldr r2, _020DC480 ; =UNK_021D6B10
mov r3, #0x0
ldr r1, [r1, #0x0]
@@ -481,7 +481,7 @@ StartFlashTimer: ; 0x020DC430
ldmia sp!, {lr}
bx lr
.balign 4
_020DC47C: .word UNK_021D6B28
_020DC47C: .word ctrdgi_fl_maxtime
_020DC480: .word UNK_021D6B10
_020DC484: .word UNK_021D6B3C
_020DC488: .word UNK_021D6B44
@@ -493,7 +493,7 @@ CTRDGi_ReadFlashID: ; 0x020DC48C
ldr r5, _020DC590 ; =0x04000208
mov r0, #0x0
ldrh r2, [r5, #0x0]
ldr r1, _020DC594 ; =UNK_021D6B38
ldr r1, _020DC594 ; =ctrdgi_backup_irq
ldr r4, _020DC598 ; =0x0A005555
strh r0, [r5, #0x0]
str r2, [r1, #0x0]
@@ -527,7 +527,7 @@ _020DC4FC:
orr r4, r0, r4, lsr #0x10
ldrh r2, [r12, #0x0]
mov r0, #0x0
ldr r1, _020DC594 ; =UNK_021D6B38
ldr r1, _020DC594 ; =ctrdgi_backup_irq
strh r0, [r12, #0x0]
ldr r5, _020DC598 ; =0x0A005555
str r2, [r1, #0x0]
@@ -559,7 +559,7 @@ _020DC580:
bx lr
.balign 4
_020DC590: .word 0x04000208
_020DC594: .word UNK_021D6B38
_020DC594: .word ctrdgi_backup_irq
_020DC598: .word 0x0A005555
_020DC59C: .word 0x0A002AAA
_020DC5A0: .word UNK_021D6B10
+7 -7
View File
@@ -1,7 +1,7 @@
.include "asm/macros.inc"
.include "global.inc"
.extern UNK_021D6944
.extern CTRDGi_Work
.section .bss
@@ -104,7 +104,7 @@ CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C
sub sp, sp, #0x4
and r0, r1, #0x3f
cmp r0, #0x1
ldreq r0, _020DBA64 ; =UNK_021D6944
ldreq r0, _020DBA64 ; =CTRDGi_Work
moveq r1, #0x1
streqh r1, [r0, #0x0]
addeq sp, sp, #0x4
@@ -115,7 +115,7 @@ CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C
ldmia sp!, {lr}
bx lr
.balign 4
_020DBA64: .word UNK_021D6944
_020DBA64: .word CTRDGi_Work
arm_func_start CTRDGi_InitModuleInfo
CTRDGi_InitModuleInfo: ; 0x020DBA68
@@ -140,7 +140,7 @@ CTRDGi_InitModuleInfo: ; 0x020DBA68
ldr r3, _020DBC58 ; =0x04000208
mov r2, #0x1
ldrh r4, [r3, #0x0]
ldr r1, _020DBC5C ; =UNK_021D6944
ldr r1, _020DBC5C ; =CTRDGi_Work
mov r6, r0
strh r2, [r3, #0x0]
ldrh r0, [r1, #0x2]
@@ -173,7 +173,7 @@ CTRDGi_InitModuleInfo: ; 0x020DBA68
orr r1, r1, r5, lsl #0xf
strh r1, [r2, #0x0]
bl CTRDGi_RestoreAccessCycle
ldr r0, _020DBC5C ; =UNK_021D6944
ldr r0, _020DBC5C ; =CTRDGi_Work
add r1, sp, #0x0
ldrh r0, [r0, #0x2]
bl CTRDGi_UnlockByProcessor
@@ -227,7 +227,7 @@ _020DBBDC:
mov r0, r0, lsl #0x6
orr r0, r0, #0x1
bl CTRDGi_SendtoPxi
ldr r5, _020DBC5C ; =UNK_021D6944
ldr r5, _020DBC5C ; =CTRDGi_Work
ldrh r0, [r5, #0x0]
cmp r0, #0x1
beq _020DBC30
@@ -251,7 +251,7 @@ _020DBC30:
_020DBC50: .word UNK_021D6948
_020DBC54: .word 0x04000300
_020DBC58: .word 0x04000208
_020DBC5C: .word UNK_021D6944
_020DBC5C: .word CTRDGi_Work
_020DBC60: .word 0x04000204
_020DBC64: .word UNK_021D6960
_020DBC68: .word 0x08000080
-269
View File
@@ -1,269 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global UNK_021D5364
UNK_021D5364: ; 0x021D5364
.space 0x4
.global UNK_021D5368
UNK_021D5368: ; 0x021D5368
.space 0x80
.text
arm_func_start PXIi_HandlerRecvFifoNotEmpty
PXIi_HandlerRecvFifoNotEmpty: ; 0x020CFBBC
stmdb sp!, {r4-r10,lr}
sub sp, sp, #0x8
ldr sl, _020CFCD4 ; =0x04000184
ldr r5, _020CFCD8 ; =UNK_021D5368
ldr r4, _020CFCDC ; =0x04000188
mov r7, #0x4100000
mov r6, #0x0
mvn r8, #0x3
mvn r9, #0x2
_020CFBE0:
ldrh r0, [r10, #0x0]
ands r0, r0, #0x4000
ldrneh r0, [r10, #0x0]
movne r1, r9
orrne r0, r0, #0xc000
strneh r0, [r10, #0x0]
bne _020CFC28
bl OS_DisableInterrupts
ldrh r1, [r10, #0x0]
ands r1, r1, #0x100
beq _020CFC18
bl OS_RestoreInterrupts
mov r1, r8
b _020CFC28
_020CFC18:
ldr r1, [r7, #0x0]
str r1, [sp, #0x0]
bl OS_RestoreInterrupts
mov r1, r6
_020CFC28:
cmp r1, r8
addeq sp, sp, #0x8
ldmeqia sp!, {r4-r10,lr}
bxeq lr
mvn r0, #0x2
cmp r1, r0
beq _020CFBE0
ldr r1, [sp, #0x0]
mov r0, r1, lsl #0x1b
movs r0, r0, lsr #0x1b
beq _020CFBE0
ldr r3, [r5, r0, lsl #0x2]
cmp r3, #0x0
beq _020CFC74
mov r2, r1, lsl #0x1a
mov r1, r1, lsr #0x6
mov r2, r2, lsr #0x1f
blx r3
b _020CFBE0
_020CFC74:
mov r0, r1, lsl #0x1a
movs r0, r0, lsr #0x1f
bne _020CFBE0
orr r0, r1, #0x20
str r0, [sp, #0x0]
ldrh r0, [r10, #0x0]
ands r0, r0, #0x4000
ldrneh r0, [r10, #0x0]
orrne r0, r0, #0xc000
strneh r0, [r10, #0x0]
bne _020CFBE0
bl OS_DisableInterrupts
ldrh r1, [r10, #0x0]
ands r1, r1, #0x2
beq _020CFCB8
bl OS_RestoreInterrupts
b _020CFBE0
_020CFCB8:
ldr r1, [sp, #0x0]
str r1, [r4, #0x0]
bl OS_RestoreInterrupts
b _020CFBE0
_020CFCC8:
add sp, sp, #0x8
ldmia sp!, {r4-r10, lr}
bx lr
_020CFCD4: .word 0x04000184
_020CFCD8: .word UNK_021D5368
_020CFCDC: .word 0x04000188
arm_func_start PXI_SendWordByFifo
PXI_SendWordByFifo:
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r3, [sp, #0x0]
and r0, r0, #0x1f
bic r3, r3, #0x1f
orr r12, r3, r0
bic r3, r12, #0x20
and r0, r2, #0x1
orr r3, r3, r0, lsl #0x5
str r12, [sp, #0x0]
and r2, r3, #0x3f
bic r0, r1, #0xfc000000
orr r0, r2, r0, lsl #0x6
str r3, [sp, #0x0]
ldr r2, _020CFD8C ; =0x04000184
str r0, [sp, #0x0]
ldrh r0, [r2, #0x0]
ands r0, r0, #0x4000
ldrneh r1, [r2, #0x0]
addne sp, sp, #0x4
mvnne r0, #0x0
orrne r1, r1, #0xc000
strneh r1, [r2, #0x0]
ldmneia sp!, {lr}
bxne lr
bl OS_DisableInterrupts
ldr r1, _020CFD8C ; =0x04000184
ldrh r1, [r1, #0x0]
ands r1, r1, #0x2
beq _020CFD6C
bl OS_RestoreInterrupts
add sp, sp, #0x4
mvn r0, #0x1
ldmia sp!, {lr}
bx lr
_020CFD6C:
ldr r2, [sp, #0x0]
ldr r1, _020CFD90 ; =0x04000188
str r2, [r1, #0x0]
bl OS_RestoreInterrupts
_020CFD7C:
mov r0, #0x0
add sp, sp, #0x4
ldmfd sp!, {lr}
bx lr
_020CFD8C: .word 0x04000184
_020CFD90: .word 0x04000188
arm_func_start PXI_IsCallbackReady
PXI_IsCallbackReady:
ldr r2, _020CFDB8 ; =0x027FFC00
mov r3, #0x1
add r1, r2, r1, lsl #0x2
mov r2, r3, lsl r0
ldr r0, [r1, #0x388]
ands r0, r2, r0
moveq r3, #0x0
mov r0, r3
bx lr
.balign 4
_020CFDB8: .word 0x027FFC00
arm_func_start PXI_SetFifoRecvCallback
PXI_SetFifoRecvCallback: ; 0x020CFDBC
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r0
mov r5, r1
bl OS_DisableInterrupts
ldr r1, _020CFE20 ; =UNK_021D5368
cmp r5, #0x0
str r5, [r1, r4, lsl #0x2]
beq _020CFDF8
ldr r3, _020CFE24 ; =0x027FFC00
mov r1, #0x1
ldr r2, [r3, #0x388]
orr r1, r2, r1, lsl r4
str r1, [r3, #0x388]
b _020CFE10
_020CFDF8:
ldr r3, _020CFE24 ; =0x027FFC00
mov r1, #0x1
mvn r1, r1, lsl r4
ldr r2, [r3, #0x388]
and r1, r2, r1
str r1, [r3, #0x388]
_020CFE10:
bl OS_RestoreInterrupts
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020CFE20: .word UNK_021D5368
_020CFE24: .word 0x027FFC00
arm_func_start PXI_InitFifo
PXI_InitFifo: ; 0x020CFE28
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
bl OS_DisableInterrupts
ldr r1, _020CFF18 ; =UNK_021D5364
mov r4, r0
ldrh r0, [r1, #0x0]
cmp r0, #0x0
bne _020CFF04
mov r2, #0x1
ldr r0, _020CFF1C ; =0x027FFC00
strh r2, [r1, #0x0]
mov r2, #0x0
str r2, [r0, #0x388]
ldr r0, _020CFF20 ; =UNK_021D5368
mov r1, r2
_020CFE64:
str r1, [r0, r2, lsl #0x2]
add r2, r2, #0x1
cmp r2, #0x20
blt _020CFE64
ldr r2, _020CFF24 ; =0x0000C408
ldr r1, _020CFF28 ; =0x04000184
mov r0, #0x40000
strh r2, [r1, #0x0]
bl OS_ResetRequestIrqMask
ldr r1, _020CFF2C ; =PXIi_HandlerRecvFifoNotEmpty
mov r0, #0x40000
bl OS_SetIrqFunction
mov r0, #0x40000
bl OS_EnableIrqMask
mov r12, #0x0
ldr r3, _020CFF30 ; =0x04000180
mov r1, r12
mov r2, #0x3e8
_020CFEAC:
ldrh r0, [r3, #0x0]
ands lr, r0, #0xf
mov r0, lr, lsl #0x8
strh r0, [r3, #0x0]
bne _020CFEC8
cmp r12, #0x4
bgt _020CFF04
_020CFEC8:
ldrh r0, [r3, #0x0]
mov r5, r2
and r0, r0, #0xf
cmp r0, lr
bne _020CFEFC
_020CFEDC:
cmp r5, #0x0
movle r12, r1
ble _020CFEFC
ldrh r0, [r3, #0x0]
sub r5, r5, #0x1
and r0, r0, #0xf
cmp r0, lr
beq _020CFEDC
_020CFEFC:
add r12, r12, #0x1
b _020CFEAC
_020CFF04:
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020CFF18: .word UNK_021D5364
_020CFF1C: .word 0x027FFC00
_020CFF20: .word UNK_021D5368
_020CFF24: .word 0x0000C408
_020CFF28: .word 0x04000184
_020CFF2C: .word PXIi_HandlerRecvFifoNotEmpty
_020CFF30: .word 0x04000180
-239
View File
@@ -1,239 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.extern gMain
.text
thumb_func_start FUN_02024F30
FUN_02024F30: ; 0x02024F30
push {r4, lr}
mov r1, #0x2
bl AllocFromHeap
add r4, r0, #0x0
bl Options_init
add r0, r4, #0x0
pop {r4, pc}
.balign 4
thumb_func_start FUN_02024F44
FUN_02024F44: ; 0x02024F44
ldr r3, _02024F4C ; =MI_CpuCopy8
mov r2, #0x2
bx r3
nop
_02024F4C: .word MI_CpuCopy8
thumb_func_start Options_init
Options_init: ; 0x02024F50
push {r4, lr}
add r4, r0, #0x0
mov r1, #0x0
mov r2, #0x2
bl MI_CpuFill8
ldrh r1, [r4, #0x0]
mov r0, #0xf
bic r1, r0
mov r0, #0x1
orr r0, r1
strh r0, [r4, #0x0]
ldrh r1, [r4, #0x0]
mov r0, #0x30
bic r1, r0
strh r1, [r4, #0x0]
ldrh r1, [r4, #0x0]
mov r0, #0x40
bic r1, r0
strh r1, [r4, #0x0]
ldrh r1, [r4, #0x0]
mov r0, #0x80
bic r1, r0
strh r1, [r4, #0x0]
ldrh r1, [r4, #0x0]
ldr r0, _02024F94 ; =0xFFFFFCFF
and r0, r1
strh r0, [r4, #0x0]
ldrh r1, [r4, #0x0]
ldr r0, _02024F98 ; =0xFFFF83FF
and r0, r1
strh r0, [r4, #0x0]
pop {r4, pc}
nop
_02024F94: .word 0xFFFFFCFF
_02024F98: .word 0xFFFF83FF
thumb_func_start FUN_02024F9C
FUN_02024F9C: ; 0x02024F9C
push {r3, lr}
cmp r0, #0x0
beq _02024FAC
bl Sav2_PlayerData_GetOptionsAddr
bl FUN_02025064
add r1, r0, #0x0
_02024FAC:
cmp r1, #0x0
beq _02024FCA
cmp r1, #0x1
beq _02024FBA
cmp r1, #0x2
beq _02024FC2
b _02024FCA
_02024FBA:
ldr r0, _02024FD4 ; =gMain
mov r1, #0x1
str r1, [r0, #0x34]
pop {r3, pc}
_02024FC2:
ldr r0, _02024FD4 ; =gMain
mov r1, #0x3
str r1, [r0, #0x34]
pop {r3, pc}
_02024FCA:
ldr r0, _02024FD4 ; =gMain
mov r1, #0x0
str r1, [r0, #0x34]
pop {r3, pc}
nop
_02024FD4: .word gMain
thumb_func_start FUN_02024FD8
FUN_02024FD8: ; 0x02024FD8
ldrh r0, [r0, #0x0]
lsl r0, r0, #0x1c
lsr r0, r0, #0x1c
bx lr
thumb_func_start FUN_02024FE0
FUN_02024FE0: ; 0x02024FE0
ldrh r3, [r0, #0x0]
mov r2, #0xf
lsl r1, r1, #0x10
bic r3, r2
lsr r2, r1, #0x10
mov r1, #0xf
and r1, r2
orr r1, r3
strh r1, [r0, #0x0]
bx lr
thumb_func_start FUN_02024FF4
FUN_02024FF4: ; 0x02024FF4
push {r3, lr}
bl FUN_02024FD8
cmp r0, #0x0
bne _02025002
mov r0, #0x8
pop {r3, pc}
_02025002:
cmp r0, #0x1
bne _0202500A
mov r0, #0x4
pop {r3, pc}
_0202500A:
mov r0, #0x1
pop {r3, pc}
.balign 4
thumb_func_start FUN_02025010
FUN_02025010: ; 0x02025010
ldrh r0, [r0, #0x0]
lsl r0, r0, #0x1a
lsr r0, r0, #0x1e
bx lr
thumb_func_start FUN_02025018
FUN_02025018: ; 0x02025018
lsl r1, r1, #0x10
lsr r1, r1, #0x10
lsl r1, r1, #0x1e
ldrh r3, [r0, #0x0]
mov r2, #0x30
lsr r1, r1, #0x1a
bic r3, r2
orr r1, r3
strh r1, [r0, #0x0]
bx lr
thumb_func_start FUN_0202502C
FUN_0202502C: ; 0x0202502C
ldrh r0, [r0, #0x0]
lsl r0, r0, #0x18
lsr r0, r0, #0x1f
bx lr
thumb_func_start FUN_02025034
FUN_02025034: ; 0x02025034
lsl r1, r1, #0x10
lsr r1, r1, #0x10
lsl r1, r1, #0x1f
ldrh r3, [r0, #0x0]
mov r2, #0x80
lsr r1, r1, #0x18
bic r3, r2
orr r1, r3
strh r1, [r0, #0x0]
bx lr
thumb_func_start FUN_02025048
FUN_02025048: ; 0x02025048
ldrh r0, [r0, #0x0]
lsl r0, r0, #0x19
lsr r0, r0, #0x1f
bx lr
thumb_func_start FUN_02025050
FUN_02025050: ; 0x02025050
lsl r1, r1, #0x10
lsr r1, r1, #0x10
lsl r1, r1, #0x1f
ldrh r3, [r0, #0x0]
mov r2, #0x40
lsr r1, r1, #0x19
bic r3, r2
orr r1, r3
strh r1, [r0, #0x0]
bx lr
thumb_func_start FUN_02025064
FUN_02025064: ; 0x02025064
ldrh r0, [r0, #0x0]
lsl r0, r0, #0x16
lsr r0, r0, #0x1e
bx lr
thumb_func_start FUN_0202506C
FUN_0202506C: ; 0x0202506C
lsl r1, r1, #0x10
lsr r1, r1, #0x10
lsl r1, r1, #0x1e
ldrh r3, [r0, #0x0]
ldr r2, _02025080 ; =0xFFFFFCFF
lsr r1, r1, #0x16
and r2, r3
orr r1, r2
strh r1, [r0, #0x0]
bx lr
.balign 4
_02025080: .word 0xFFFFFCFF
thumb_func_start FUN_02025084
FUN_02025084: ; 0x02025084
ldrh r0, [r0, #0x0]
lsl r0, r0, #0x11
lsr r0, r0, #0x1b
bx lr
thumb_func_start FUN_0202508C
FUN_0202508C: ; 0x0202508C
lsl r1, r1, #0x10
lsr r1, r1, #0x10
lsl r1, r1, #0x1b
ldrh r3, [r0, #0x0]
ldr r2, _020250A0 ; =0xFFFF83FF
lsr r1, r1, #0x11
and r2, r3
orr r1, r2
strh r1, [r0, #0x0]
bx lr
.balign 4
_020250A0: .word 0xFFFF83FF
+1 -1
View File
@@ -2248,7 +2248,7 @@ FUN_0203AAA0: ; 0x0203AAA0
ldr r1, _0203AAF8 ; =UNK_020F34E0
ldr r2, _0203AAF4 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r6, #0x0]
ldr r1, _0203AAFC ; =FUN_0203AB00
add r0, r5, #0x0
+3 -3
View File
@@ -366,7 +366,7 @@ FUN_02041970: ; 0x02041970
add r5, r0, #0x0
ldrh r0, [r4, #0x0]
bl FUN_020395F4
bl FUN_0203962C
bl Field_TrainerIsDoubleBattle
lsl r0, r0, #0x10
lsr r0, r0, #0x10
bne _020419D2
@@ -430,7 +430,7 @@ FUN_020419F8: ; 0x020419F8
add r5, r0, #0x0
ldrh r0, [r4, #0x0]
bl FUN_020395F4
bl FUN_0203962C
bl Field_TrainerIsDoubleBattle
lsl r0, r0, #0x10
lsr r0, r0, #0x10
bne _02041A5A
@@ -478,7 +478,7 @@ FUN_02041A80: ; 0x02041A80
add r5, r0, #0x0
ldrh r0, [r4, #0x0]
bl FUN_020395F4
bl FUN_0203962C
bl Field_TrainerIsDoubleBattle
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
+7 -7
View File
@@ -755,8 +755,8 @@ FUN_020020B0: ; 0x020020B0
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_020020EC
FUN_020020EC: ; 0x020020EC
thumb_func_start CreateYesNoMenu
CreateYesNoMenu: ; 0x020020EC
push {r3-r7, lr}
sub sp, #0x20
ldr r5, [sp, #0x3c]
@@ -777,13 +777,13 @@ FUN_020020EC: ; 0x020020EC
mov r2, #0x29
mov r3, #0x0
add r6, r0, #0x0
bl ListMenu_ItemFromMsgData
bl ListMenu_ItemFromMsgData ; YES
mov r3, #0x2a
add r2, r3, #0x0
add r0, r6, #0x0
add r1, r4, #0x0
sub r3, #0x2c
bl ListMenu_ItemFromMsgData
bl ListMenu_ItemFromMsgData ; NO
add r0, r4, #0x0
bl DestroyMsgData
add r0, r5, #0x0
@@ -834,15 +834,15 @@ FUN_020020EC: ; 0x020020EC
nop
_02002194: .word 0x00000141
thumb_func_start FUN_02002198
FUN_02002198: ; 0x02002198
thumb_func_start Std_CreateYesNoMenu
Std_CreateYesNoMenu: ; 0x02002198
push {r4, lr}
sub sp, #0x8
mov r4, #0x0
str r4, [sp, #0x0]
ldr r4, [sp, #0x10]
str r4, [sp, #0x4]
bl FUN_020020EC
bl CreateYesNoMenu
add sp, #0x8
pop {r4, pc}
+1 -1
View File
@@ -2478,7 +2478,7 @@ FUN_020389CC: ; 0x020389CC
mov r0, #0x0
str r0, [r4, #0x18]
ldr r0, [sp, #0x0]
bl FUN_02025084
bl Options_GetFrame
str r0, [r4, #0x1c]
lsl r1, r6, #0x18
ldr r0, [r5, #0xc]
+18 -18
View File
@@ -879,7 +879,7 @@ FUN_02038C78: ; 0x02038C78
add r5, r0, #0x0
add r6, r1, #0x0
add r7, r2, #0x0
bl FUN_02038E20
bl CreateFieldContext
add r4, r0, #0x0
mov r0, #0x0
str r0, [sp, #0x0]
@@ -932,7 +932,7 @@ FUN_02038CD8: ; 0x02038CD8
add r5, r3, #0x0
bl FUN_02046528
str r0, [sp, #0x8]
bl FUN_02038E20
bl CreateFieldContext
add r4, r0, #0x0
ldr r0, [sp, #0x8]
ldr r3, [sp, #0x4]
@@ -958,7 +958,7 @@ FUN_02038D10: ; 0x02038D10
add r7, r2, #0x0
bl FUN_02046528
str r0, [sp, #0x4]
bl FUN_02038E20
bl CreateFieldContext
add r4, r0, #0x0
mov r0, #0x0
str r0, [sp, #0x0]
@@ -1031,7 +1031,7 @@ _02038DA8:
cmp r0, #0x0
bne _02038DD2
add r0, r6, #0x0
bl FUN_02038E48
bl DeleteScriptContext
ldrb r0, [r4, #0x9]
cmp r0, #0x0
bne _02038DC8
@@ -1081,8 +1081,8 @@ _02038E1A:
add sp, #0x8
pop {r3-r7, pc}
thumb_func_start FUN_02038E20
FUN_02038E20: ; 0x02038E20
thumb_func_start CreateFieldContext
CreateFieldContext: ; 0x02038E20
push {r4, lr}
mov r0, #0xb
mov r1, #0xdc
@@ -1102,8 +1102,8 @@ _02038E32:
.balign 4
_02038E44: .word 0x0003643F
thumb_func_start FUN_02038E48
FUN_02038E48: ; 0x02038E48
thumb_func_start DeleteScriptContext
DeleteScriptContext: ; 0x02038E48
push {r4, lr}
add r4, r0, #0x0
ldr r0, [r4, #0x78]
@@ -2139,8 +2139,8 @@ _02039622:
nop
_02039628: .word 0x00001388
thumb_func_start FUN_0203962C
FUN_0203962C: ; 0x0203962C
thumb_func_start Field_TrainerIsDoubleBattle
Field_TrainerIsDoubleBattle: ; 0x0203962C
push {r3, lr}
mov r1, #0x9
bl TrainerData_GetAttr
@@ -2443,17 +2443,17 @@ _02039856:
nop
_02039870: .word 0x0000FFFF
thumb_func_start FUN_02039874
FUN_02039874: ; 0x02039874
ldr r3, _0203987C ; =FUN_02039880
thumb_func_start RunPokemonCenterScriptsInNewContext
RunPokemonCenterScriptsInNewContext: ; 0x02039874
ldr r3, _0203987C ; =RunScriptInNewContext
mov r1, #0x96
lsl r1, r1, #0x6
bx r3
.balign 4
_0203987C: .word FUN_02039880
_0203987C: .word RunScriptInNewContext
thumb_func_start FUN_02039880
FUN_02039880: ; 0x02039880
thumb_func_start RunScriptInNewContext
RunScriptInNewContext: ; 0x02039880
push {r4, lr}
bl CreateScriptContext
add r4, r0, #0x0
@@ -2463,7 +2463,7 @@ _02039888:
cmp r0, #0x1
beq _02039888
add r0, r4, #0x0
bl FUN_02038E48
bl DeleteScriptContext
pop {r4, pc}
.balign 4
@@ -2503,7 +2503,7 @@ _020398CE:
b _020398E2
_020398DC:
add r0, r5, #0x0
bl FUN_02039880
bl RunScriptInNewContext
_020398E2:
mov r0, #0x1
pop {r3-r5, pc}
+5 -5
View File
@@ -116,7 +116,7 @@ _02047774:
lsl r1, r1, #0x4
str r0, [r7, r1]
add r0, r5, #0x0
bl FUN_02024F30
bl Options_new
mov r1, #0x13
lsl r1, r1, #0x4
str r0, [r7, r1]
@@ -237,7 +237,7 @@ FUN_02047814: ; 0x02047814
lsl r1, r1, #0x4
ldr r0, [sp, #0x14]
ldr r1, [r4, r1]
bl FUN_02024F44
bl Options_copy
add r0, r5, #0x0
bl Script_GetTimeOfDay
mov r1, #0x16
@@ -513,7 +513,7 @@ FUN_02047A78: ; 0x02047A78
lsl r1, r1, #0x4
ldr r0, [sp, #0xc]
ldr r1, [r5, r1]
bl FUN_02024F44
bl Options_copy
ldr r1, [sp, #0x8]
add r0, r5, #0x0
mov r2, #0x0
@@ -712,7 +712,7 @@ _02047C98:
lsl r1, r1, #0x4
ldr r0, [sp, #0x4]
ldr r1, [r6, r1]
bl FUN_02024F44
bl Options_copy
ldr r1, [sp, #0x8]
add r0, r6, #0x0
mov r2, #0x0
@@ -896,7 +896,7 @@ _02047E2C:
lsl r1, r1, #0x4
ldr r0, [sp, #0x10]
ldr r1, [r5, r1]
bl FUN_02024F44
bl Options_copy
ldr r1, [sp, #0x14]
add r0, r5, #0x0
mov r2, #0x0
+2 -2
View File
@@ -599,7 +599,7 @@ FUN_02048D90: ; 0x02048D90
add r4, r0, #0x0
mov r1, #0x0
str r1, [r4, #0x6c]
bl FUN_02039874
bl RunPokemonCenterScriptsInNewContext
ldr r1, _02048DA8 ; =FUN_02048D34
add r0, r4, #0x0
mov r2, #0x0
@@ -2040,7 +2040,7 @@ _020498DC:
ldr r0, [r5, #0x8]
ldr r1, _02049ABC ; =UNK_020F46D8
ldr r2, _02049AB8 ; =0x000003D9
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x3c]
mov r0, #0x2
str r0, [r4, #0x0]
+4 -4
View File
@@ -74,7 +74,7 @@ FUN_02054608: ; 0x02054608
bl FUN_0201AB08
add r6, r0, #0x0
add r0, r4, #0x0
bl FUN_02025084
bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x0]
@@ -119,7 +119,7 @@ FUN_02054658: ; 0x02054658
mov r0, #0x0
bl FUN_02002BB8
add r0, r6, #0x0
bl FUN_02024FF4
bl Options_GetTextFrameDelay
mov r3, #0x0
str r3, [sp, #0x0]
str r0, [sp, #0x4]
@@ -131,8 +131,8 @@ FUN_02054658: ; 0x02054658
add sp, #0xc
pop {r3-r6, pc}
thumb_func_start FUN_02054690
FUN_02054690: ; 0x02054690
thumb_func_start DrawFieldMessage
DrawFieldMessage: ; 0x02054690
push {r4-r7, lr}
sub sp, #0xc
add r5, r0, #0x0
+1 -1
View File
@@ -241,7 +241,7 @@ FUN_0205C73C: ; 0x0205C73C
str r0, [r5, #0xc]
lsl r0, r0, #0x10
lsr r0, r0, #0x10
bl FUN_0203962C
bl Field_TrainerIsDoubleBattle
str r0, [r5, #0x10]
str r4, [r5, #0x14]
pop {r3-r5, pc}
+3 -3
View File
@@ -101,11 +101,11 @@ FUN_020625EC: ; 0x020625EC
str r0, [r4, r1]
add r0, r6, #0x0
bl Sav2_PlayerData_GetOptionsAddr
bl FUN_02024FF4
bl Options_GetTextFrameDelay
strh r0, [r4, #0x1a]
add r0, r6, #0x0
bl Sav2_PlayerData_GetOptionsAddr
bl FUN_02025084
bl Options_GetFrame
strh r0, [r4, #0x1c]
str r4, [r7, #0x8]
mov r0, #0x1
@@ -430,7 +430,7 @@ FUN_020628BC: ; 0x020628BC
ldr r0, [r0, #0x0]
ldr r2, _020628E4 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
add r4, #0xc8
str r0, [r4, #0x0]
add sp, #0x4
+3 -3
View File
@@ -67,11 +67,11 @@ FUN_020653EC: ; 0x020653EC
add r6, r0, #0x0
strb r1, [r4, #0x1a]
bl Sav2_PlayerData_GetOptionsAddr
bl FUN_02024FF4
bl Options_GetTextFrameDelay
strb r0, [r4, #0x16]
add r0, r6, #0x0
bl Sav2_PlayerData_GetOptionsAddr
bl FUN_02025084
bl Options_GetFrame
strh r0, [r4, #0x14]
add r0, r4, #0x0
ldr r2, [r4, #0x0]
@@ -2192,7 +2192,7 @@ FUN_02066520: ; 0x02066520
ldr r0, [r4, r0]
ldr r2, _02066548 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
mov r1, #0x5a
lsl r1, r1, #0x2
str r0, [r4, r1]
+4 -4
View File
@@ -1314,7 +1314,7 @@ _0206D1F0:
ldr r0, [r4, #0x0]
mov r2, #0x1
mov r3, #0x8
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x40]
add r0, r4, #0x0
add r0, #0x64
@@ -1537,7 +1537,7 @@ _0206D3CC:
ldr r0, [r4, #0x0]
mov r2, #0x1
mov r3, #0x8
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x40]
add r0, r4, #0x0
add r0, #0x64
@@ -2343,7 +2343,7 @@ _0206DA26:
mov r1, #0x4
bl FUN_02018744
ldr r0, [r5, #0x2c]
bl FUN_02025084
bl Options_GetFrame
add r6, r0, #0x0
lsl r0, r6, #0x18
lsr r0, r0, #0x18
@@ -2675,7 +2675,7 @@ FUN_0206DD6C: ; 0x0206DD6C
mov r1, #0xff
bl FUN_02019620
ldr r0, [r4, #0x2c]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
mov r3, #0x0
str r3, [sp, #0x0]
str r0, [sp, #0x4]
+1 -1
View File
@@ -1310,7 +1310,7 @@ FUN_0206FD24: ; 0x0206FD24
ldr r0, _0206FE70 ; =0x000005A4
ldr r0, [r5, r0]
ldr r0, [r0, #0xc]
bl FUN_02025084
bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x0]
+2 -2
View File
@@ -1664,7 +1664,7 @@ FUN_0207322C: ; 0x0207322C
ldr r0, _0207326C ; =0x000005A4
ldr r0, [r4, r0]
ldr r0, [r0, #0xc]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
mov r3, #0x0
str r3, [sp, #0x0]
str r0, [sp, #0x4]
@@ -1741,7 +1741,7 @@ FUN_020732CC: ; 0x020732CC
ldr r1, _020732EC ; =UNK_020F96EC
mov r2, #0x1
mov r3, #0xe
bl FUN_02002198
bl Std_CreateYesNoMenu
ldr r1, _020732F0 ; =0x000006FC
str r0, [r4, r1]
add sp, #0x4
+1 -1
View File
@@ -2355,7 +2355,7 @@ FUN_02077FE8: ; 0x02077FE8
mov r2, #0x12
bl FUN_02002EEC
ldr r0, [r5, #0x18]
bl FUN_02025084
bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x0]
+2 -2
View File
@@ -1660,7 +1660,7 @@ _0207A99E:
lsl r0, r0, #0x2
ldr r0, [r5, r0]
ldr r0, [r0, #0x4]
bl FUN_02025084
bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x0]
@@ -4738,7 +4738,7 @@ FUN_0207C23C: ; 0x0207C23C
lsl r0, r0, #0x2
ldr r0, [r4, r0]
ldr r0, [r0, #0x4]
bl FUN_02025084
bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x0]
+1 -1
View File
@@ -32,7 +32,7 @@ FUN_02085338: ; 0x02085338
add r0, r6, #0x0
strb r1, [r4, #0x3]
bl Sav2_PlayerData_GetOptionsAddr
bl FUN_02025084
bl Options_GetFrame
str r0, [r4, #0x8]
cmp r5, #0x2
bne _02085390
+1 -1
View File
@@ -348,7 +348,7 @@ _02085A9A:
str r0, [r4, r1]
ldr r0, [r4, #0x0]
ldr r0, [r0, #0x24]
bl FUN_02025084
bl Options_GetFrame
add r5, r0, #0x0
add r0, r4, #0x0
add r1, r4, #0x0
+2 -2
View File
@@ -36,11 +36,11 @@ FUN_02086084: ; 0x02086084
bl OverlayManager_GetField18
str r0, [r4, #0x0]
ldr r0, [r0, #0x10]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
str r0, [r4, #0x10]
ldr r0, [r4, #0x0]
ldr r0, [r0, #0x10]
bl FUN_02025084
bl Options_GetFrame
str r0, [r4, #0x14]
bl FUN_02086468
str r0, [r4, #0x38]
+1 -1
View File
@@ -5,7 +5,7 @@
.global UNK_020FD144
UNK_020FD144: ; 0x020FD144
.word MOD59_021D74E0, MOD59_021D7564, MOD59_021D76C0, SDK_OVERLAY_MODULE_59_ID
.word MOD59_Init, MOD59_021D7564, MOD59_021D76C0, SDK_OVERLAY_MODULE_59_ID
.text
+2 -2
View File
@@ -544,11 +544,11 @@ FUN_020880A0: ; 0x020880A0
str r0, [r4, #0x0]
ldr r0, [r5, #0xc]
ldr r0, [r0, #0x18]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
strb r0, [r4, #0xa]
ldr r0, [r5, #0xc]
ldr r0, [r0, #0x18]
bl FUN_02025084
bl Options_GetFrame
strb r0, [r4, #0xb]
ldr r0, _02088108 ; =UNK_020FD16C
ldr r2, [r5, #0x0]
+2 -2
View File
@@ -415,7 +415,7 @@ _020897B8:
ldr r0, [r4, #0x14]
ldr r2, _02089894 ; =0x000001D9
mov r3, #0x3
bl FUN_020020EC
bl CreateYesNoMenu
str r0, [r4, #0x2c]
mov r0, #0x1
str r0, [r4, #0x4]
@@ -453,7 +453,7 @@ _02089802:
ldr r0, [r4, #0x14]
ldr r2, _02089894 ; =0x000001D9
mov r3, #0x3
bl FUN_020020EC
bl CreateYesNoMenu
str r0, [r4, #0x2c]
mov r0, #0x3
str r0, [r4, #0x4]
+37 -22
View File
@@ -212,8 +212,8 @@
.extern FUN_02001DDC
.extern FUN_02001E5C
.extern FUN_02001E60
.extern FUN_020020EC
.extern FUN_02002198
.extern CreateYesNoMenu
.extern Std_CreateYesNoMenu
.extern FUN_020021AC
.extern FUN_020021CC
.extern FUN_020021EC
@@ -1586,23 +1586,23 @@
.extern FUN_02024EF4
.extern FUN_02024F0C
.extern FUN_02024F18
.extern FUN_02024F30
.extern FUN_02024F44
.extern Options_new
.extern Options_copy
.extern Options_init
.extern FUN_02024F9C
.extern FUN_02024FD8
.extern FUN_02024FE0
.extern FUN_02024FF4
.extern FUN_02025010
.extern FUN_02025018
.extern FUN_0202502C
.extern FUN_02025034
.extern FUN_02025048
.extern FUN_02025050
.extern FUN_02025064
.extern FUN_0202506C
.extern FUN_02025084
.extern FUN_0202508C
.extern Options_SetButtonModeOnMain
.extern Options_GetTextSpeed
.extern Options_SetTextSpeed
.extern Options_GetTextFrameDelay
.extern Options_GetSoundMethod
.extern Options_SetSoundMethod
.extern Options_GetBattleScene
.extern Options_SetBattleScene
.extern Options_GetBattleStyle
.extern Options_SetBattleStyle
.extern Options_GetButtonMode
.extern Options_SetButtonMode
.extern Options_GetFrame
.extern Options_SetFrame
.extern FUN_020250A4
.extern FUN_020250C4
.extern FUN_02025128
@@ -2691,13 +2691,13 @@
.extern FUN_020395BC
.extern FUN_020395F4
.extern FUN_02039618
.extern FUN_0203962C
.extern Field_TrainerIsDoubleBattle
.extern TrainerFlagCheck
.extern TrainerFlagSet
.extern TrainerFlagClear
.extern FUN_02039694
.extern FUN_02039754
.extern FUN_02039874
.extern RunPokemonCenterScriptsInNewContext
.extern FUN_0203989C
.extern ScrCmd_nop
.extern ScrCmd_nop2
@@ -3804,7 +3804,7 @@
.extern FUN_02054608
.extern FUN_0205464C
.extern FUN_02054658
.extern FUN_02054690
.extern DrawFieldMessage
.extern FUN_020546C8
.extern FUN_020546E0
.extern FUN_02054744
@@ -6509,13 +6509,18 @@
.extern MOD05_021E7184
.extern MOD05_021E71E8
.extern MOD05_021E72FC
.extern MOD05_021E7358
.extern MOD05_021E7750
.extern MOD05_021E779C
.extern MOD05_021E77B0
.extern MOD05_021E799C
.extern MOD05_021E7AC0
.extern MOD05_021E7C00
.extern MOD05_021E7C14
.extern MOD05_021E7C1C
.extern MOD05_021E7C80
.extern MOD05_021E7CD8
.extern MOD05_021E7DD8
.extern MOD05_021E7E9C
.extern MOD05_021E7EA0
.extern MOD05_021E7EB0
@@ -6676,8 +6681,10 @@
.extern MOD05_021F4BF8
.extern MOD05_021F4C74
.extern MOD05_021F4C88
.extern MOD05_021F4C9C
.extern MOD05_021F4CBC
.extern MOD05_021F4CD4
.extern MOD05_021F4CE4
.extern MOD05_021F4CF8
.extern MOD05_021F4D1C
.extern MOD05_021F4D2C
@@ -7434,6 +7441,11 @@
.extern MOD20_02254420
.extern MOD20_02254460
.extern MOD20_02254488
.extern MOD21_02254A6C
.extern MOD21_02254B04
.extern MOD21_02254B10
.extern MOD21_02254B34
.extern MOD21_02254B40
.extern MOD51_02254A68
.extern MOD51_02254AB8
.extern MOD52_021D76C8
@@ -7466,9 +7478,12 @@
.extern MOD58_021D9A20
.extern MOD58_021D9B8C
.extern MOD58_021D9BF0
.extern MOD59_021D74E0
.extern MOD59_Init
.extern MOD59_021D7564
.extern MOD59_021D76C0
.extern MOD59_021D9868
.extern MOD59_021D9898
.extern MOD59_021D99F8
.extern MOD60_021D74E0
.extern MOD60_021D76B8
.extern MOD60_021D75B0
-2
View File
@@ -224,8 +224,6 @@ void CARD_UnlockBackup(u16 lock_id);
#define CARD_RETRY_COUNT_MAX 10
extern BOOL PXI_SendWordByFifo(u32 param1, u32 data, u32 param2);
static inline void CARDi_SendPxi(u32 data)
{
while (PXI_SendWordByFifo(PXI_FIFO_TAG_FS, data, TRUE) < 0)
+45
View File
@@ -0,0 +1,45 @@
#ifndef POKEDIAMOND_CTRDG_BACKUP_H
#define POKEDIAMOND_CTRDG_BACKUP_H
#include "nitro/types.h"
#include "CTRDG_flash.h"
#include "CTRDG_task.h"
#define CTRDG_BACKUP_PHASE_PROGRAM 0x0001
#define CTRDG_BACKUP_PHASE_SECTOR_ERASE 0x0002
#define CTRDG_BACKUP_PHASE_CHIP_ERASE 0x0003
typedef struct CTRDGiFlashTypePlusTag
{
u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src);
u16 (*CTRDGi_EraseAgbFlashChip)(void);
u16 (*CTRDGi_EraseAgbFlashSector)(u16 secNo);
void (*CTRDGi_WriteAgbFlashSectorAsync)(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback);
void (*CTRDGi_EraseAgbFlashChipAsync)(CTRDG_TASK_FUNC callback);
void (*CTRDGi_EraseAgbFlashSectorAsync)(u16 secNo, CTRDG_TASK_FUNC callback);
u16 (*CTRDGi_PollingSR)(u16 phase, u8 *adr, u16 lastData);
const u16 (*maxtime);
CTRDGFlashType type;
} CTRDGiFlashTypePlus;
typedef enum
{
CTRDG_BACKUP_TYPE_FLASH_512K,
CTRDG_BACKUP_TYPE_FLASH_1M,
CTRDG_BACKUP_TYPE_SRAM
} CTRDGBackupType;
extern const u16 (*ctrdgi_fl_maxtime);
extern u16 (*CTRDGi_PollingSR)(u16 phase, u8 *adr, u16 lastData);
extern const CTRDGFlashType *AgbFlash;
extern u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src);
extern u16 (*CTRDGi_EraseAgbFlashChip)(void);
extern u16 (*CTRDGi_EraseAgbFlashSector)(u16 secNo);
extern void (*CTRDGi_WriteAgbFlashSectorAsync)(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback);
extern void (*CTRDGi_EraseAgbFlashChipAsync)(CTRDG_TASK_FUNC callback);
extern void (*CTRDGi_EraseAgbFlashSectorAsync)(u16 secNo, CTRDG_TASK_FUNC callback);
u16 CTRDG_IdentifyAgbBackup(CTRDGBackupType type);
#endif //POKEDIAMOND_CTRDG_BACKUP_H
+133 -4
View File
@@ -1,8 +1,137 @@
#ifndef NITRO_CTRDG_COMMON_H_
#define NITRO_CTRDG_COMMON_H_
#ifndef POKEDIAMOND_CTRDG_COMMON_H
#define POKEDIAMOND_CTRDG_COMMON_H
#include "nitro/types.h"
#include "consts.h"
#include "OS_spinLock.h"
#include "OS_system.h"
#include "MI_exMemory.h"
typedef struct CTRDGWork
{
vu16 subpInitialized;
u16 lockID;
} CTRDGWork;
typedef struct CTRDGModuleID
{
union
{
struct
{
u8 bitID;
u8 numberID:5;
u8 :2;
u8 disableExLsiID:1;
};
u16 raw;
};
} CTRDGModuleID;
typedef struct CTRDGModuleInfo
{
CTRDGModuleID moduleID;
u8 exLsiID[3];
u8 isAgbCartridge:1;
u8 detectPullOut:1;
u8 :0; //??
u16 makerCode;
u32 gameCode;
} CTRDGModuleInfo;
typedef struct CTRDGLockByProc
{
BOOL locked;
OSIntrMode irq;
} CTRDGLockByProc;
typedef struct CTRDGHeader
{
u32 startAddress;
u8 nintendoLogo[0x9c];
u8 titleName[12];
u32 gameCode;
u16 makerCode;
u8 isRomCode;
u8 machineCode;
u8 deviceType;
u8 exLsiID[3];
u8 reserved[4];
u8 softVersion;
u8 complement;
u16 moduleID;
} CTRDGHeader;
typedef struct CTRDGRomCycle
{
MICartridgeRomCycle1st c1;
MICartridgeRomCycle2nd c2;
} CTRDGRomCycle;
#define CTRDGi_GetModuleInfoAddr() ((CTRDGModuleInfo *)HW_CTRDG_MODULE_INFO_BUF)
#define CTRDGi_GetHeaderAddr() ((CTRDGHeader *)HW_CTRDG_ROM)
#define CTRDGi_GetModuleIDImageAddr() ((u16 *)(HW_CTRDG_ROM + 0x0001fffe))
#define CTRDG_IS_ROM_CODE 0x96
#define CTRDG_LOCKED_BY_MYPROC_FLAG OS_MAINP_LOCKED_FLAG
#define CTRDGi_FORWARD_TYPE_DMA 0x00000000
#define CTRDGi_FORWARD_TYPE_CPU 0x00000001
#define CTRDGi_FORWARD_TYPE_MASK 0x00000001
#define CTRDGi_FORWARD_WIDTH_8 0x00000000
#define CTRDGi_FORWARD_WIDTH_16 0x00000010
#define CTRDGi_FORWARD_WIDTH_32 0x00000020
#define CTRDGi_FORWARD_DMA16 (CTRDGi_FORWARD_TYPE_DMA | CTRDGi_FORWARD_WIDTH_16)
#define CTRDGi_FORWARD_DMA32 (CTRDGi_FORWARD_TYPE_DMA | CTRDGi_FORWARD_WIDTH_32)
#define CTRDGi_FORWARD_CPU8 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_8)
#define CTRDGi_FORWARD_CPU16 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_16)
#define CTRDGi_FORWARD_CPU32 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_32)
#define CTRDGi_ACCESS_DIR_WRITE 0x00000000
#define CTRDGi_ACCESS_DIR_READ 0x00000001
#define CTRDGi_ACCESS_WIDTH_8 0x00000010
#define CTRDGi_ACCESS_WIDTH_16 0x00000020
#define CTRDGi_ACCESS_WIDTH_32 0x00000040
#define CTRDGi_ACCESS_WRITE8 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_8)
#define CTRDGi_ACCESS_WRITE16 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_16)
#define CTRDGi_ACCESS_WRITE32 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_32)
#define CTRDGi_ACCESS_READ8 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_8)
#define CTRDGi_ACCESS_READ16 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_16)
#define CTRDGi_ACCESS_READ32 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_32)
void CTRDGi_InitCommon(void);
BOOL CTRDG_IsAgbCartridge(void);
BOOL CTRDG_IsOptionCartridge(void);
BOOL CTRDGi_IsAgbCartridgeAtInit(void);
u32 CTRDG_GetAgbGameCode(void);
u32 CTRDGi_GetAgbGameCodeAtInit(void);
u16 CTRDG_GetAgbMakerCode(void);
u16 CTRDGi_GetAgbMakerCodeAtInit(void);
BOOL CTRDG_IsPulledOut(void);
BOOL CTRDG_IsExisting(void);
void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r);
void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r);
void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info);
void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info);
void CTRDGi_SendtoPxi(u32 data);
BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size);
BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size);
BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size);
BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType);
BOOL CTRDG_Read32(const u32 *address, u32 *rdata);
BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType);
BOOL CTRDG_IsEnabled(void);
void CTRDG_Enable(BOOL enable);
void CTRDG_CheckEnabled(void);
#endif //NITRO_CTRDG_COMMON_H_
#endif //POKEDIAMOND_CTRDG_COMMON_H
+27
View File
@@ -0,0 +1,27 @@
#ifndef POKEDIAMOND_CTRDG_FLASH_H
#define POKEDIAMOND_CTRDG_FLASH_H
#include "nitro/types.h"
#include "MI_exMemory.h"
#define CTRDG_AGB_FLASH_ADR 0x0A000000
typedef struct CTRDGiFlashSectorTag
{
u32 size;
u16 shift;
u16 count;
u16 top;
u8 reserved[2];
} CTRDGiFlashSector;
typedef struct CTRDGFlashTypeTag
{
u32 romSize;
CTRDGiFlashSector sector;
MICartridgeRamCycle agbWait[2];
u16 makerID;
u16 deviceID;
} CTRDGFlashType;
#endif //POKEDIAMOND_CTRDG_FLASH_H
+10
View File
@@ -0,0 +1,10 @@
#ifndef POKEDIAMOND_CTRDG_FLASH_AT29LV512_H
#define POKEDIAMOND_CTRDG_FLASH_AT29LV512_H
#include "nitro/types.h"
#include "CTRDG_task.h"
u32 CTRDGi_EraseFlashChipCoreAT(CTRDGTaskInfo *arg);
u32 CTRDGi_EraseFlashSectorCoreAT(CTRDGTaskInfo *arg);
#endif //POKEDIAMOND_CTRDG_FLASH_AT29LV512_H
+25
View File
@@ -0,0 +1,25 @@
#ifndef POKEDIAMOND_CTRDG_TASK_H
#define POKEDIAMOND_CTRDG_TASK_H
#include "nitro/types.h"
struct CTRDGTaskInfo_tag;
typedef u32 (*CTRDG_TASK_FUNC) (struct CTRDGTaskInfo_tag *);
typedef struct CTRDGTaskInfo_tag
{
CTRDG_TASK_FUNC task;
CTRDG_TASK_FUNC callback;
u32 result;
u8 *data;
u8 *adr;
u32 offset;
u32 size;
u8 *dst;
u16 sec_num;
u8 busy;
u8 param[1];
} CTRDGTaskInfo;
#endif //POKEDIAMOND_CTRDG_TASK_H
+3
View File
@@ -21,6 +21,9 @@ typedef void (*MIDmaCallback)(void *);
#define MI_DMA_SRC_FIX (2UL << 23)
#define MI_DMA_SRC_INC (0UL << 23)
#define MI_DMA_16BIT_BUS (0UL << 26)
#define MI_DMA_32BIT_BUS (1UL << 26)
#define MIi_DMA_TIMING_ANY (u32)(~0)
#define MI_DMA_TIMING_H_BLANK (2UL << 27)
+55 -3
View File
@@ -1,5 +1,5 @@
#ifndef NITRO_MI_EXMEMORY_H_
#define NITRO_MI_EXMEMORY_H_
#ifndef POKEDIAMOND_MI_EXMEMORY_H
#define POKEDIAMOND_MI_EXMEMORY_H
#include "consts.h"
@@ -8,6 +8,28 @@ typedef enum {
MI_PROCESSOR_ARM7 = 1
} MIProcessor;
typedef enum
{
MI_CTRDG_ROMCYCLE1_10 = 0,
MI_CTRDG_ROMCYCLE1_8 = 1,
MI_CTRDG_ROMCYCLE1_6 = 2,
MI_CTRDG_ROMCYCLE1_18 = 3
} MICartridgeRomCycle1st;
typedef enum
{
MI_CTRDG_ROMCYCLE2_6 = 0,
MI_CTRDG_ROMCYCLE2_4 = 1
} MICartridgeRomCycle2nd;
typedef enum
{
MI_CTRDG_RAMCYCLE_10 = 0,
MI_CTRDG_RAMCYCLE_8 = 1,
MI_CTRDG_RAMCYCLE_6 = 2,
MI_CTRDG_RAMCYCLE_18 = 3
} MICartridgeRamCycle;
static inline void MIi_SetCardProcessor(MIProcessor proc)
{
reg_MI_EXMEMCNT =
@@ -20,4 +42,34 @@ static inline void MIi_SetCartridgeProcessor(MIProcessor proc)
(u16)((reg_MI_EXMEMCNT & ~0x0080) | (proc << 7));
}
#endif //NITRO_MI_EXMEMORY_H_
static inline MICartridgeRomCycle1st MI_GetCartridgeRomCycle1st(void)
{
return (MICartridgeRomCycle1st)((reg_MI_EXMEMCNT & 0xc) >> 2);
}
static inline MICartridgeRomCycle2nd MI_GetCartridgeRomCycle2nd(void)
{
return (MICartridgeRomCycle2nd)((reg_MI_EXMEMCNT & 0x10) >> 4);
}
static inline void MI_SetCartridgeRomCycle1st(MICartridgeRomCycle1st c1)
{
reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0xc) | (c1 << 2));
}
static inline void MI_SetCartridgeRomCycle2nd(MICartridgeRomCycle2nd c2)
{
reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0x10) | (c2 << 4));
}
static inline void MI_SetCartridgeRamCycle(MICartridgeRamCycle c)
{
reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~3) | (c << 0));
}
static inline MICartridgeRamCycle MI_GetCartridgeRamCycle(void)
{
return (MICartridgeRamCycle)((reg_MI_EXMEMCNT & 3) >> 0);
}
#endif //POKEDIAMOND_MI_EXMEMORY_H
+5
View File
@@ -45,6 +45,11 @@ static inline void MI_CpuCopy16(const void *src, void *dest, u32 size)
MIi_CpuCopy16(src, dest, size);
}
static inline void MI_CpuCopy32(const void *src, void *dest, u32 size)
{
MIi_CpuCopy32(src, dest, size);
}
static inline void MI_CpuFillFast(void *dest, u32 data, u32 size)
{
MIi_CpuClearFast(data, dest, size);
+8
View File
@@ -12,6 +12,7 @@
#define OS_IE_V_COUNT (1UL << REG_OS_IE_VE_SHIFT)
#define OS_IE_TIMER0 (1UL << REG_OS_IE_T0_SHIFT)
#define OS_IE_TIMER1 (1UL << REG_OS_IE_T1_SHIFT)
#define OS_IE_SPFIFO_RECV (1UL << REG_OS_IE_IFN_SHIFT)
#define OS_IE_CARD_DATA (1UL << REG_OS_IE_MC_SHIFT)
extern OSIrqFunction OS_IRQTable[];
@@ -42,6 +43,13 @@ static inline BOOL OS_EnableIrq(void)
return (BOOL)prep;
}
static inline BOOL OS_RestoreIrq(BOOL enable)
{
u16 prep = reg_OS_IME;
reg_OS_IME = (u16)enable;
return (BOOL)prep;
}
static inline OSIrqMask OS_GetIrqMask(void)
{
return reg_OS_IE;
+4
View File
@@ -41,4 +41,8 @@ static inline u32 OSi_CalcPRParam(u32 address, u32 size, OSiProtectionRegionBase
OS_SetProtectionRegion##regionNo(OSi_CalcPRParam(address, HW_C6_PR_##sizeStr, OSi_PR_BASE_MASK_##sizeStr) \
| 1)
#define OS_PR3_ACCESS_MASK (HW_C5_PERMIT_MASK << HW_C5_PR3_SFT)
#define OS_PR3_ACCESS_RW (HW_C5_PERMIT_RW << HW_C5_PR3_SFT)
#define OS_PR3_ACCESS_RO (HW_C5_PERMIT_RO << HW_C5_PR3_SFT)
#endif //POKEDIAMOND_OS_PROTECTIONREGION_H
+5 -1
View File
@@ -5,7 +5,11 @@
#include "nitro/OS_spinLock_shared.h"
#include "syscall.h"
#define OS_LOCK_ID_ERROR (-3)
#define OS_ReadOwnerOfLockCartridge() OS_ReadOwnerOfLockWord( (OSLockWord *)HW_CTRDG_LOCK_BUF )
#define OS_MAINP_LOCKED_FLAG 0x40
#define OS_LOCK_SUCCESS 0
#define OS_LOCK_ID_ERROR (-3)
static inline void OSi_WaitByLoop(void)
{
+20
View File
@@ -2,6 +2,7 @@
#define POKEDIAMOND_ARM9_PXI_FIFO_H
#include "nitro/PXI_fifo_shared.h"
#include "nitro/types.h"
typedef enum
{
@@ -13,4 +14,23 @@ typedef enum
PXI_FIFO_NO_CALLBACK_ENTRY = -5
} PXIFifoStatus;
typedef void (*PXIFifoCallback) (PXIFifoTag tag, u32 data, BOOL err);
typedef union
{
struct
{
u32 tag:5;
u32 err:1;
u32 data:26;
} e;
u32 raw;
} PXIFifoMessage;
void PXI_InitFifo(void);
void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback);
BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc);
s32 PXI_SendWordByFifo(s32 fifotag, u32 data, BOOL err);
void PXIi_HandlerRecvFifoNotEmpty(void);
#endif //POKEDIAMOND_ARM9_PXI_FIFO_H
+14 -2
View File
@@ -6,6 +6,13 @@
#include "registers.h"
#include "systemWork.h"
#define HW_C5_PERMIT_MASK 0xf
#define HW_C5_PERMIT_RO 5
#define HW_C5_PERMIT_RW 1
#define HW_C5_PR3_SFT 12
#define HW_C6_PR_4KB 0x16
#define HW_C6_PR_8KB 0x18
#define HW_C6_PR_16KB 0x1a
@@ -35,8 +42,6 @@
#define HW_CACHE_LINE_SIZE 32
#define PXI_PROC_ARM7 0x01
#define OSi_CONSOLE_NOT_DETECT 0xffffffff
#define OS_CONSOLE_NITRO 0x80000000
@@ -50,4 +55,11 @@
#define HW_CPU_CLOCK_ARM9 67027964
#define REG_PXI_SUBP_FIFO_CNT_E_MASK 0x8000
#define REG_PXI_SUBP_FIFO_CNT_ERR_MASK 0x4000
#define REG_PXI_SUBP_FIFO_CNT_RECV_RI_MASK 0x0400
#define REG_PXI_SUBP_FIFO_CNT_RECV_EMP_MASK 0x0100
#define REG_PXI_SUBP_FIFO_CNT_SEND_CL_MASK 0x0008
#define REG_PXI_SUBP_FIFO_CNT_SEND_FULL_MASK 0x0002
#endif //POKEDIAMOND_ARM9_CONSTS_H
+3
View File
@@ -34,6 +34,7 @@ extern u32 SDK_AUTOLOAD_DTCM_START[];
#define HW_BOOT_CHECK_INFO_BUF (HW_MAIN_MEM + 0x007ffc00)
#define HW_RESET_PARAMETER_BUF (HW_MAIN_MEM + 0x007ffc20)
#define HW_ROM_BASE_OFFSET_BUF (HW_MAIN_MEM + 0x007ffc2c)
#define HW_CTRDG_MODULE_INFO_BUF (HW_MAIN_MEM + 0x007ffc30)
#define HW_ROM_HEADER_BUF (HW_MAIN_MEM + 0x007ffe00) // ROM registration area data buffer
#define HW_RED_RESERVED (HW_MAIN_MEM + 0x007ff800) // Some kind of reserved data for shared memory
#define HW_MAIN_MEM_EX_END (HW_MAIN_MEM + HW_MAIN_MEM_EX_SIZE)
@@ -93,6 +94,8 @@ extern u32 SDK_AUTOLOAD_DTCM_START[];
#define HW_DB_OAM_END 0x07000800
#define HW_DB_OAM_SIZE (HW_DB_OAM_END-HW_DB_OAM)
#define HW_CTRDG_RAM_END 0x0a010000
#define HW_DTCM_SYSRV_OFS_INTR_VECTOR 0x3c
#define HW_RESET_VECTOR 0xffff0000
+1
View File
@@ -350,6 +350,7 @@
#define REG_OS_IE_VE_SHIFT 2
#define REG_OS_IE_T0_SHIFT 3
#define REG_OS_IE_T1_SHIFT 4
#define REG_OS_IE_IFN_SHIFT 18
#define REG_OS_IE_MC_SHIFT 19
#define REG_OS_TM0CNT_H_I_MASK 0x0040
+13
View File
@@ -1,6 +1,19 @@
#ifndef POKEDIAMOND_ARM9_SYSCALL_H
#define POKEDIAMOND_ARM9_SYSCALL_H
#include "consts.h"
#include "MI_dma.h"
void SVC_CpuSet(const void *srcp, void *destp, u32 dmaCntData);
#define SVC_CpuClear( data, destp, size, bit ) \
do{ \
vu##bit tmp = (vu##bit )(data); \
SVC_CpuSet((u8 *)&(tmp), (u8 *)(destp), ( \
MI_DMA_SRC_FIX | \
MI_DMA_##bit##BIT_BUS | ((size)/((bit)/8) & 0x1fffff))); \
} while(0)
void SVC_WaitByLoop(u32 ct);
#endif //POKEDIAMOND_ARM9_SYSCALL_H
-2
View File
@@ -14,8 +14,6 @@ static CARDiCommandArg cardi_arg ALIGN(32);
u8 cardi_thread_stack[0x400] ALIGN(4);
extern void PXI_SetFifoRecvCallback(u32 param1, void* callback);
static void CARDi_LockResource(CARDiOwner owner, CARDTargetMode target);
static void CARDi_UnlockResource(CARDiOwner owner, CARDTargetMode target);
-3
View File
@@ -12,9 +12,6 @@
static CARDPulledOutCallback CARD_UserCallback;
static BOOL CARDi_IsPulledOutFlag = FALSE;
extern void PXI_SetFifoRecvCallback(u32 param1, void* callback);
extern BOOL PXI_SendWordByFifo(u32 param1, u32 data, u32 param2);
static void CARDi_PulledOutCallback(PXIFifoTag tag, u32 data, BOOL err);
static void CARDi_SendtoPxi(u32 data, u32 wait);
-2
View File
@@ -6,8 +6,6 @@
extern CARDiCommon cardi_common;
extern u32 PXI_IsCallbackReady(u32 param1, u32 param2);
ARM_FUNC void CARDi_OnFifoRecv(PXIFifoTag tag, u32 data, BOOL err)
{
#pragma unused (data)
+1
View File
@@ -1,6 +1,7 @@
#include "function_target.h"
#include "nitro/types.h"
#include "CARD_common.h"
#include "CARD_spi.h"
#include "MI_memory.h"
extern CARDiCommon cardi_common;
+94
View File
@@ -0,0 +1,94 @@
#include "CTRDG_backup.h"
#include "function_target.h"
#include "OS_spinLock.h"
extern u16 ctrdgi_flash_lock_id;
extern u16 ctrdgi_sram_lock_id;
extern u16 CTRDGi_ReadFlashID(void);
extern const CTRDGiFlashTypePlus defaultFlash1M;
extern const CTRDGiFlashTypePlus MX29L010;
extern const CTRDGiFlashTypePlus LE26FV10N1TS_10;
extern const CTRDGiFlashTypePlus defaultFlash512;
extern const CTRDGiFlashTypePlus LE39FW512;
extern const CTRDGiFlashTypePlus AT29LV512_lib;
extern const CTRDGiFlashTypePlus MN63F805MNP;
static const CTRDGiFlashTypePlus *const flash1M_list[] = {
&MX29L010,
&LE26FV10N1TS_10,
&defaultFlash1M
};
static const CTRDGiFlashTypePlus *const flash512_list[] = {
&LE39FW512,
&AT29LV512_lib,
&MN63F805MNP,
&defaultFlash512
};
static const u16 readidtime[] = {
20
};
ARM_FUNC u16 CTRDG_IdentifyAgbBackup(CTRDGBackupType type)
{
u16 result = 1;
u16 flashID;
const CTRDGiFlashTypePlus *const *flp;
MICartridgeRamCycle ram_cycle;
if (type == CTRDG_BACKUP_TYPE_FLASH_512K || type == CTRDG_BACKUP_TYPE_FLASH_1M)
{
ctrdgi_flash_lock_id = (u16)OS_GetLockID();
(void)OS_LockCartridge(ctrdgi_flash_lock_id);
ram_cycle = MI_GetCartridgeRamCycle();
MI_SetCartridgeRamCycle(MI_CTRDG_RAMCYCLE_18);
ctrdgi_fl_maxtime = readidtime;
flashID = CTRDGi_ReadFlashID();
if (type == CTRDG_BACKUP_TYPE_FLASH_512K)
{
flp = flash512_list;
}
if (type == CTRDG_BACKUP_TYPE_FLASH_1M)
{
flp = flash1M_list;
}
MI_SetCartridgeRamCycle(ram_cycle);
(void)OS_UnlockCartridge(ctrdgi_flash_lock_id);
result = 1;
while ((*flp)->type.makerID != 0)
{
if ((flashID & 0xff) == *(u16 *)&((*flp)->type.makerID))
{
result = 0;
break;
}
flp++;
}
CTRDGi_WriteAgbFlashSector = (*flp)->CTRDGi_WriteAgbFlashSector;
CTRDGi_EraseAgbFlashChip = (*flp)->CTRDGi_EraseAgbFlashChip;
CTRDGi_EraseAgbFlashSector = (*flp)->CTRDGi_EraseAgbFlashSector;
CTRDGi_WriteAgbFlashSectorAsync = (*flp)->CTRDGi_WriteAgbFlashSectorAsync;
CTRDGi_EraseAgbFlashChipAsync = (*flp)->CTRDGi_EraseAgbFlashChipAsync;
CTRDGi_EraseAgbFlashSectorAsync = (*flp)->CTRDGi_EraseAgbFlashSectorAsync;
CTRDGi_PollingSR = (*flp)->CTRDGi_PollingSR;
ctrdgi_fl_maxtime = (*flp)->maxtime;
AgbFlash = &(*flp)->type;
}
else if (type == CTRDG_BACKUP_TYPE_SRAM)
{
ctrdgi_sram_lock_id = (u16)OS_GetLockID();
result = 0;
}
return result;
}
+349
View File
@@ -0,0 +1,349 @@
#include "CTRDG_common.h"
#include "function_target.h"
#include "syscall.h"
#include "OS_cache.h"
#include "OS_protectionRegion.h"
#include "OS_terminate_proc.h"
#include "PXI_fifo.h"
#include "MI_dma.h"
#include "MI_memory.h"
CTRDGWork CTRDGi_Work;
static BOOL CTRDGi_EnableFlag = FALSE;
ARM_FUNC void CTRDGi_InitCommon(void)
{
SVC_CpuClear(0, &CTRDGi_Work, sizeof(CTRDGi_Work), 32);
CTRDGi_Work.lockID = (u16)OS_GetLockID();
}
ARM_FUNC BOOL CTRDG_IsAgbCartridge(void)
{
return (CTRDG_IsExisting() && CTRDGi_IsAgbCartridgeAtInit());
}
ARM_FUNC BOOL CTRDG_IsOptionCartridge(void)
{
return (CTRDG_IsExisting() && !CTRDGi_IsAgbCartridgeAtInit());
}
ARM_FUNC BOOL CTRDGi_IsAgbCartridgeAtInit(void)
{
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
return cip->isAgbCartridge;
}
ARM_FUNC u32 CTRDG_GetAgbGameCode(void)
{
u32 ret = 0;
if (CTRDG_IsExisting())
{
ret = CTRDGi_GetAgbGameCodeAtInit();
}
return ret;
}
ARM_FUNC u32 CTRDGi_GetAgbGameCodeAtInit(void)
{
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
u32 ret = 0;
if (CTRDGi_IsAgbCartridgeAtInit())
{
ret = cip->gameCode;
}
return ret;
}
ARM_FUNC u16 CTRDG_GetAgbMakerCode(void)
{
u16 ret = 0;
if (CTRDG_IsExisting())
{
ret = CTRDGi_GetAgbMakerCodeAtInit();
}
return ret;
}
ARM_FUNC u16 CTRDGi_GetAgbMakerCodeAtInit(void)
{
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
u16 ret = 0;
if (CTRDGi_IsAgbCartridgeAtInit())
{
ret = cip->makerCode;
}
return ret;
}
ARM_FUNC BOOL CTRDG_IsPulledOut(void)
{
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
if (cip->moduleID.raw == 0xffff)
{
return FALSE;
}
if (!cip->detectPullOut)
{
(void)CTRDG_IsExisting();
}
return cip->detectPullOut;
}
ARM_FUNC BOOL CTRDG_IsExisting(void)
{
BOOL ret = TRUE;
CTRDGLockByProc lockInfo;
CTRDGHeader *chp = CTRDGi_GetHeaderAddr();
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
if (cip->moduleID.raw == 0xffff)
{
return FALSE;
}
if (cip->detectPullOut == TRUE)
{
return FALSE;
}
CTRDGi_LockByProcessor(CTRDGi_Work.lockID, &lockInfo);
CTRDGRomCycle rc;
CTRDGi_ChangeLatestAccessCycle(&rc);
u8 isRomCode = chp->isRomCode;
if ((isRomCode == CTRDG_IS_ROM_CODE && cip->moduleID.raw != chp->moduleID)
|| (isRomCode != CTRDG_IS_ROM_CODE && cip->moduleID.raw != *CTRDGi_GetModuleIDImageAddr())
|| ((cip->gameCode != chp->gameCode) && cip->isAgbCartridge))
{
cip->detectPullOut = TRUE;
ret = FALSE;
}
CTRDGi_RestoreAccessCycle(&rc);
CTRDGi_UnlockByProcessor(CTRDGi_Work.lockID, &lockInfo);
return ret;
}
ARM_FUNC void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r)
{
r->c1 = MI_GetCartridgeRomCycle1st();
r->c2 = MI_GetCartridgeRomCycle2nd();
MI_SetCartridgeRomCycle1st(MI_CTRDG_ROMCYCLE1_18);
MI_SetCartridgeRomCycle2nd(MI_CTRDG_ROMCYCLE2_6);
}
ARM_FUNC void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r)
{
MI_SetCartridgeRomCycle1st(r->c1);
MI_SetCartridgeRomCycle2nd(r->c2);
}
ARM_FUNC void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info)
{
while (TRUE)
{
info->irq = OS_DisableInterrupts();
if (((info->locked = OS_ReadOwnerOfLockCartridge() & CTRDG_LOCKED_BY_MYPROC_FLAG) != 0)
|| (OS_TryLockCartridge(lockID) == OS_LOCK_SUCCESS))
{
break;
}
(void)OS_RestoreInterrupts(info->irq);
SVC_WaitByLoop(1);
}
}
ARM_FUNC void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info)
{
if (!info->locked)
{
(void)OS_UnLockCartridge(lockID);
}
(void)OS_RestoreInterrupts(info->irq);
}
ARM_FUNC void CTRDGi_SendtoPxi(u32 data)
{
while (PXI_SendWordByFifo(PXI_FIFO_TAG_CTRDG, data, FALSE) != PXI_FIFO_SUCCESS)
{
SVC_WaitByLoop(1);
}
}
ARM_FUNC BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size)
{
if (HW_CTRDG_ROM <= (u32)dest && (u32)dest < HW_CTRDG_RAM_END)
{
return CTRDGi_CopyCommon(0, (const void *)dest, (void *)src, size, CTRDGi_FORWARD_CPU8);
}
else
{
return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU8);
}
}
ARM_FUNC BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size)
{
return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU16);
}
ARM_FUNC BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size)
{
return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU32);
}
ARM_FUNC BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType)
{
if (!CTRDG_IsExisting())
{
return FALSE;
}
CTRDG_CheckEnabled();
(void)OS_LockCartridge(CTRDGi_Work.lockID);
if ((forwardType & CTRDGi_FORWARD_TYPE_MASK) == CTRDGi_FORWARD_TYPE_DMA)
{
MI_StopDma(dmaNo);
DC_FlushRange(dest, size);
}
switch (forwardType)
{
case CTRDGi_FORWARD_DMA16:
MI_DmaCopy16(dmaNo, src, dest, size);
break;
case CTRDGi_FORWARD_DMA32:
MI_DmaCopy32(dmaNo, src, dest, size);
break;
case CTRDGi_FORWARD_CPU16:
MI_CpuCopy16(src, dest, size);
break;
case CTRDGi_FORWARD_CPU32:
MI_CpuCopy32(src, dest, size);
break;
case CTRDGi_FORWARD_CPU8:
u8 *dest8 = (u8 *)dest;
u8 *src8 = (u8 *)src;
for (s32 n = 0; n < size; n++)
{
*dest8++ = *src8++;
}
break;
}
(void)OS_UnLockCartridge(CTRDGi_Work.lockID);
if (!CTRDG_IsExisting())
{
return FALSE;
}
return TRUE;
}
ARM_FUNC BOOL CTRDG_Read32(const u32 *address, u32 *rdata)
{
return CTRDGi_AccessCommon((void *)address, 0, rdata, CTRDGi_ACCESS_READ32);
}
ARM_FUNC BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType)
{
if (!CTRDG_IsExisting())
{
return FALSE;
}
CTRDG_CheckEnabled();
(void)OS_LockCartridge(CTRDGi_Work.lockID);
switch (accessType)
{
case CTRDGi_ACCESS_READ8:
if (rdata)
{
*(u8 *)rdata = *(u8 *)address;
}
break;
case CTRDGi_ACCESS_READ16:
if (rdata)
{
*(u16 *)rdata = *(u16 *)address;
}
break;
case CTRDGi_ACCESS_READ32:
if (rdata)
{
*(u32 *)rdata = *(u32 *)address;
}
break;
case CTRDGi_ACCESS_WRITE8:
*(u8 *)address = (u8)data;
break;
case CTRDGi_ACCESS_WRITE16:
*(u16 *)address = (u16)data;
break;
case CTRDGi_ACCESS_WRITE32:
*(u32 *)address = (u32)data;
break;
}
(void)OS_UnLockCartridge(CTRDGi_Work.lockID);
if (!CTRDG_IsExisting())
{
return FALSE;
}
return TRUE;
}
ARM_FUNC BOOL CTRDG_IsEnabled(void)
{
return CTRDGi_EnableFlag;
}
ARM_FUNC void CTRDG_Enable(BOOL enable)
{
OSIntrMode bak_cpsr = OS_DisableInterrupts();
CTRDGi_EnableFlag = enable;
if (!CTRDG_IsOptionCartridge())
{
u32 acc = (u32)(enable ? OS_PR3_ACCESS_RW : OS_PR3_ACCESS_RO);
(void)OS_SetDPermissionsForProtectionRegion(OS_PR3_ACCESS_MASK, acc);
}
(void)OS_RestoreInterrupts(bak_cpsr);
}
ARM_FUNC void CTRDG_CheckEnabled(void)
{
if (!CTRDG_IsOptionCartridge() && !CTRDG_IsEnabled())
{
OS_Terminate();
}
}
+143
View File
@@ -0,0 +1,143 @@
#include "CTRDG_flash_AT29LV512.h"
#include "function_target.h"
#include "CTRDG_backup.h"
#include "CTRDG_flash.h"
#include "MI_exMemory.h"
#include "OS_interrupt.h"
#include "OS_spinLock.h"
#define CTRDG_BACKUP_COM_ADR1 (CTRDG_AGB_FLASH_ADR+0x00005555)
#define CTRDG_BACKUP_COM_ADR2 (CTRDG_AGB_FLASH_ADR+0x00002aaa)
extern u16 ctrdgi_flash_lock_id;
extern BOOL ctrdgi_backup_irq;
extern u16 CTRDGi_PollingSR512kCOMMON(u16 phase, u8 *adr, u16 lastData);
extern u16 CTRDGi_EraseFlashChipAT(void);
extern u16 CTRDGi_EraseFlashSectorAT(u16 p_secNo);
extern u16 CTRDGi_EraseFlash4KBAT(u16 l_secNo);
extern u16 CTRDGi_WriteFlashSectorAT(u16 p_secNo, u8 *src);
extern u16 CTRDGi_WriteFlash4KBAT(u16 l_secNo, u8 *src);
extern void CTRDGi_EraseFlashChipAsyncAT(CTRDG_TASK_FUNC callback);
extern void CTRDGi_EraseFlash4KBAsyncAT(u16 secNo, CTRDG_TASK_FUNC callback);
extern void CTRDGi_WriteFlash4KBAsyncAT(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback);
extern void CTRDGi_EraseFlashSectorAsyncAT(u16 secNo, CTRDG_TASK_FUNC callback);
extern void CTRDGi_WriteFlashSectorAsyncAT(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback);
static const u16 atMaxTime[] = {
10, 40, 0, 40
};
const CTRDGiFlashTypePlus AT29LV512_lib = {
CTRDGi_WriteFlash4KBAT,
CTRDGi_EraseFlashChipAT,
CTRDGi_EraseFlash4KBAT,
CTRDGi_WriteFlash4KBAsyncAT,
CTRDGi_EraseFlashChipAsyncAT,
CTRDGi_EraseFlash4KBAsyncAT,
CTRDGi_PollingSR512kCOMMON,
atMaxTime,
{
0x00010000, //ROM size
{0x00001000, 12, 16, 0}, //sector
{MI_CTRDG_RAMCYCLE_18, MI_CTRDG_RAMCYCLE_18}, //read cycle and write cycle
0x1f, //maker ID
0x3d, //device ID
}
};
const CTRDGiFlashTypePlus AT29LV512_org = {
CTRDGi_WriteFlashSectorAT,
CTRDGi_EraseFlashChipAT,
CTRDGi_EraseFlashSectorAT,
CTRDGi_WriteFlashSectorAsyncAT,
CTRDGi_EraseFlashChipAsyncAT,
CTRDGi_EraseFlashSectorAsyncAT,
CTRDGi_PollingSR512kCOMMON,
atMaxTime,
{
0x00010000, //ROM size
{0x00000080, 7, 512, 0}, //sector
{MI_CTRDG_RAMCYCLE_18, MI_CTRDG_RAMCYCLE_18}, //read cycle and write cycle
0x1f, //maker ID
0x3d, //device ID
}
};
ARM_FUNC u32 CTRDGi_EraseFlashChipCoreAT(CTRDGTaskInfo *arg)
{
MICartridgeRamCycle ram_cycle;
u32 result;
(void)arg;
(void)OS_LockCartridge(ctrdgi_flash_lock_id);
ram_cycle = MI_GetCartridgeRamCycle();
MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]);
ctrdgi_backup_irq = OS_DisableIrq();
*(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa;
*(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55;
*(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0x80;
*(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa;
*(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55;
*(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0x10;
(void)OS_RestoreIrq(ctrdgi_backup_irq);
result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_CHIP_ERASE, (u8 *)CTRDG_AGB_FLASH_ADR, 0xff);
MI_SetCartridgeRamCycle(ram_cycle);
(void)OS_UnlockCartridge(ctrdgi_flash_lock_id);
return result;
}
ARM_FUNC u32 CTRDGi_EraseFlashSectorCoreAT(CTRDGTaskInfo *arg)
{
u32 i;
u8 *dst;
BOOL shlet_ime;
MICartridgeRamCycle ram_cycle;
u32 result;
CTRDGTaskInfo p = *arg;
u16 p_secNo = p.sec_num;
dst = (u8 *)(CTRDG_AGB_FLASH_ADR + (p_secNo << AT29LV512_org.type.sector.shift));
(void)OS_LockCartridge(ctrdgi_flash_lock_id);
ram_cycle = MI_GetCartridgeRamCycle();
MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]);
shlet_ime = OS_DisableIrq();
*(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa;
*(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55;
*(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xa0;
for (i = AT29LV512_org.type.sector.size; i > 0; i--)
{
*dst++ = 0xff;
}
dst--;
(void)OS_RestoreIrq(shlet_ime);
result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_PROGRAM, dst, 0xff);
if (result)
{
result = (u16)((result & 0xff00) | CTRDG_BACKUP_PHASE_SECTOR_ERASE);
}
MI_SetCartridgeRamCycle(ram_cycle);
(void)OS_UnlockCartridge(ctrdgi_flash_lock_id);
return result;
}
+1 -4
View File
@@ -10,14 +10,11 @@
#include "MI_dma.h"
#include "CARD_common.h"
#include "PXI_init.h"
#include "PXI_fifo.h"
static u16 OSi_IsInitReset = 0;
vu16 OSi_IsResetOccurred = 0;
extern u32 PXI_IsCallbackReady(u32 param1, u32 param2);
extern void PXI_SetFifoRecvCallback(u32 param1, void* callback);
extern BOOL PXI_SendWordByFifo(u32 param1, u32 data, u32 param2);
static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err);
static void OSi_SendToPxi(u16 data);
static void OSi_DoResetSystem(void);
+185
View File
@@ -0,0 +1,185 @@
#include "function_target.h"
#include "consts.h"
#include "OS_interrupt.h"
#include "OS_system.h"
#include "PXI_fifo.h"
#include "systemWork.h"
static u16 FifoCtrlInit = 0;
static PXIFifoCallback FifoRecvCallbackTable[PXI_MAX_FIFO_TAG];
static inline PXIFifoStatus PXIi_SetToFifo(u32 data);
ARM_FUNC void PXI_InitFifo(void)
{
OSSystemWork *p = OS_GetSystemWork();
OSIntrMode enabled = OS_DisableInterrupts();
s32 i;
if (!FifoCtrlInit)
{
FifoCtrlInit = TRUE;
p->pxiHandleChecker[PXI_PROC_ARM9] = 0UL;
for (i = 0; i < PXI_MAX_FIFO_TAG; i++)
{
FifoRecvCallbackTable[i] = NULL;
}
reg_PXI_SUBP_FIFO_CNT = (REG_PXI_SUBP_FIFO_CNT_SEND_CL_MASK
| REG_PXI_SUBP_FIFO_CNT_RECV_RI_MASK | REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK);
(void)OS_ResetRequestIrqMask(OS_IE_SPFIFO_RECV);
(void)OS_SetIrqFunction(OS_IE_SPFIFO_RECV, PXIi_HandlerRecvFifoNotEmpty);
(void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV);
{
s32 timeout;
s32 c;
for (i = 0; ; i++)
{
c = reg_PXI_SUBPINTF & 15;
reg_PXI_SUBPINTF = (u16)(c << 8);
if (c == 0 && i > 4)
{
break;
}
for (timeout = 1000; (reg_PXI_SUBPINTF & 15) == c; timeout--)
{
if (timeout == 0)
{
i = 0;
break;
}
}
}
}
}
(void)OS_RestoreInterrupts(enabled);
}
ARM_FUNC void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback)
{
OSSystemWork *p = OS_GetSystemWork();
OSIntrMode enabled = OS_DisableInterrupts();
FifoRecvCallbackTable[fifotag] = callback;
if (callback)
{
p->pxiHandleChecker[PXI_PROC_ARM9] |= (1UL << fifotag);
}
else
{
p->pxiHandleChecker[PXI_PROC_ARM9] &= ~(1UL << fifotag);
}
(void)OS_RestoreInterrupts(enabled);
}
ARM_FUNC BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc)
{
OSSystemWork *p = OS_GetSystemWork();
return (p->pxiHandleChecker[proc] & (1UL << fifotag)) ? TRUE : FALSE;
}
ARM_FUNC s32 PXI_SendWordByFifo(s32 fifotag, u32 data, BOOL err)
{
PXIFifoMessage fifomsg;
fifomsg.e.tag = (PXIFifoTag)fifotag;
fifomsg.e.err = (u32)err;
fifomsg.e.data = data;
return PXIi_SetToFifo(fifomsg.raw);
}
static inline PXIFifoStatus PXIi_SetToFifo(u32 data)
{
if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_ERR_MASK)
{
reg_PXI_SUBP_FIFO_CNT |= (REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK);
return PXI_FIFO_FAIL_SEND_ERR;
}
OSIntrMode enabled = OS_DisableInterrupts();
if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_SEND_FULL_MASK)
{
(void)OS_RestoreInterrupts(enabled);
return PXI_FIFO_FAIL_SEND_FULL;
}
reg_PXI_SEND_FIFO = data;
(void)OS_RestoreInterrupts(enabled);
return PXI_FIFO_SUCCESS;
}
static inline PXIFifoStatus PXIi_GetFromFifo(u32 *data_buf)
{
if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_ERR_MASK)
{
reg_PXI_SUBP_FIFO_CNT |= (REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK);
return PXI_FIFO_FAIL_RECV_ERR;
}
OSIntrMode enabled = OS_DisableInterrupts();
if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_RECV_EMP_MASK)
{
(void)OS_RestoreInterrupts(enabled);
return PXI_FIFO_FAIL_RECV_EMPTY;
}
*data_buf = reg_PXI_RECV_FIFO;
(void)OS_RestoreInterrupts(enabled);
return PXI_FIFO_SUCCESS;
}
ARM_FUNC void PXIi_HandlerRecvFifoNotEmpty(void)
{
PXIFifoMessage fifomsg;
PXIFifoStatus ret_code;
PXIFifoTag tag;
while (TRUE)
{
ret_code = PXIi_GetFromFifo(&fifomsg.raw);
if (ret_code == PXI_FIFO_FAIL_RECV_EMPTY)
{
break;
}
if (ret_code == PXI_FIFO_FAIL_RECV_ERR)
{
continue;
}
tag = (PXIFifoTag)fifomsg.e.tag;
if (tag)
{
if (FifoRecvCallbackTable[tag])
{
(FifoRecvCallbackTable[tag])(tag, fifomsg.e.data, (BOOL)fifomsg.e.err);
}
else
{
if (fifomsg.e.err)
{
}
else
{
fifomsg.e.err = TRUE;
(void)PXIi_SetToFifo(fifomsg.raw);
}
}
}
else
{
}
}
}
+1 -2
View File
@@ -1,8 +1,7 @@
#include "PXI_init.h"
#include "PXI_fifo.h"
#include "function_target.h"
extern void PXI_InitFifo(void);
ARM_FUNC void PXI_Init(void)
{
PXI_InitFifo();
+6 -11
View File
@@ -18,11 +18,6 @@ static u32 sCurrentTag;
static u32 sFinishedTag;
static struct SNDCommand *sFreeList;
// TODO remove these function declarations once they are in the headers
extern s32 PXI_SendWordByFifo(u32, u32, u32);
extern void PXI_SetFifoRecvCallback(u32, void (*)(s32, s32));
extern BOOL PXI_IsCallbackReady(u32, u32);
static void InitPXI(void);
static void RequestCommandProc(void);
static struct SNDCommand *AllocCommand(void);
@@ -280,25 +275,25 @@ ARM_FUNC s32 SND_CountWaitingCommand(void) {
return SND_CMD_COUNT - SND_CountFreeCommand() - SND_CountReservedCommand();
}
ARM_FUNC static void PxiFifoCallback(s32 a, s32 b) {
#pragma unused (a)
ARM_FUNC static void PxiFifoCallback(PXIFifoTag tag, u32 data, BOOL) {
#pragma unused (tag)
OSIntrMode oldirq = OS_DisableInterrupts();
SNDi_CallAlarmHandler(b);
SNDi_CallAlarmHandler((s32)data);
(void)OS_RestoreInterrupts(oldirq);
}
ARM_FUNC static void InitPXI(void) {
PXI_SetFifoRecvCallback(7, PxiFifoCallback);
PXI_SetFifoRecvCallback(PXI_FIFO_TAG_SOUND, PxiFifoCallback);
if (!IsCommandAvailable())
return;
if (PXI_IsCallbackReady(7, 1))
if (PXI_IsCallbackReady(PXI_FIFO_TAG_SOUND, PXI_PROC_ARM7))
return;
do {
OS_SpinWait(100);
} while (!PXI_IsCallbackReady(7, 1));
} while (!PXI_IsCallbackReady(PXI_FIFO_TAG_SOUND, PXI_PROC_ARM7));
}
ARM_FUNC static void RequestCommandProc(void) {
+1 -1
View File
@@ -915,7 +915,7 @@ MOD05_021E1A30: ; 0x021E1A30
str r0, [sp, #0xc]
bl FUN_020395F4
str r0, [sp, #8]
bl FUN_0203962C
bl Field_TrainerIsDoubleBattle
cmp r0, #0
bne _021E1A60
add sp, #0x10
+31 -31
View File
@@ -42,7 +42,7 @@ MOD05_021E2BB8: ; 0x021E2BB8
push {r4, lr}
add r4, r0, #0
add r0, r1, #0
bl MOD05_021E2D00
bl MOD05_ScriptContext_GetTextFrameDelay
strb r0, [r4]
mov r0, #0
strb r0, [r4, #1]
@@ -68,15 +68,15 @@ MOD05_021E2BD0: ; 0x021E2BD0
add r0, #0x80
ldr r0, [r0]
add r1, sp, #8
bl MOD05_021E2D9C
bl MOD05_CreateMessageBox
add r0, sp, #8
add r1, r6, #0
add r2, r7, #0
bl MOD05_021E2DD4
bl MOD05_ReadAndExpandMsgDataViaBuffer
cmp r4, #0
bne _021E2C10
add r0, r5, #0
bl MOD05_021E2D00
bl MOD05_ScriptContext_GetTextFrameDelay
add r2, r0, #0
mov r0, #0
mov r1, #1
@@ -89,7 +89,7 @@ _021E2C16:
str r0, [sp]
ldr r3, [sp, #4]
add r0, sp, #8
bl MOD05_021E2E40
bl MOD05_DrawFieldMessage
add sp, #0x20
pop {r3, r4, r5, r6, r7, pc}
@@ -107,14 +107,14 @@ MOD05_ShowMessageInField: ; 0x021E2C24
add r5, #0x80
ldr r0, [r5]
add r1, sp, #0
bl MOD05_021E2D9C
bl MOD05_CreateMessageBox
add r0, sp, #0
add r1, r4, #0
add r2, r6, #0
bl MOD05_021E2DD4
bl MOD05_ReadAndExpandMsgDataViaBuffer
add r0, sp, #0
mov r1, #1
bl MOD05_021E2E68
bl MOD05_AddTextPrinterParameterized
add sp, #0x18
pop {r4, r5, r6, pc}
@@ -134,7 +134,7 @@ MOD05_021E2C58: ; 0x021E2C58
add r0, #0x80
ldr r0, [r0]
add r1, sp, #4
bl MOD05_021E2D9C
bl MOD05_CreateMessageBox
add r0, sp, #0x20
ldrh r0, [r0, #0x10]
add r1, r4, #0
@@ -142,13 +142,13 @@ MOD05_021E2C58: ; 0x021E2C58
str r0, [sp]
add r0, sp, #4
add r3, r7, #0
bl MOD05_021E2DF0
bl MOD05_ExpandEasyChatMessage
add r0, sp, #0x20
ldrb r0, [r0, #0x14]
cmp r0, #0xff
beq _021E2CB0
add r0, r5, #0
bl MOD05_021E2D00
bl MOD05_ScriptContext_GetTextFrameDelay
add r2, r0, #0
mov r0, #0
str r0, [sp]
@@ -156,13 +156,13 @@ MOD05_021E2C58: ; 0x021E2C58
ldrb r3, [r3, #0x14]
add r0, sp, #4
mov r1, #1
bl MOD05_021E2E40
bl MOD05_DrawFieldMessage
add sp, #0x1c
pop {r4, r5, r6, r7, pc}
_021E2CB0:
add r0, sp, #4
mov r1, #1
bl MOD05_021E2E68
bl MOD05_AddTextPrinterParameterized
add sp, #0x1c
pop {r4, r5, r6, r7, pc}
@@ -181,31 +181,31 @@ MOD05_021E2CBC: ; 0x021E2CBC
add r0, #0x80
ldr r0, [r0]
add r1, sp, #4
bl MOD05_021E2D9C
bl MOD05_CreateMessageBox
ldr r1, [r5, #0x78]
add r0, sp, #4
add r2, r4, #0
bl MOD05_021E2DD4
bl MOD05_ReadAndExpandMsgDataViaBuffer
add r0, r5, #0
bl MOD05_021E2D00
bl MOD05_ScriptContext_GetTextFrameDelay
add r2, r0, #0
mov r0, #0
str r0, [sp]
add r0, sp, #4
mov r1, #1
add r3, r6, #0
bl MOD05_021E2E40
bl MOD05_DrawFieldMessage
add sp, #0x1c
pop {r3, r4, r5, r6, pc}
thumb_func_start MOD05_021E2D00
MOD05_021E2D00: ; 0x021E2D00
thumb_func_start MOD05_ScriptContext_GetTextFrameDelay
MOD05_ScriptContext_GetTextFrameDelay: ; 0x021E2D00
push {r3, lr}
add r0, #0x80
ldr r0, [r0]
ldr r0, [r0, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
bl FUN_02024FF4
bl Options_GetTextFrameDelay
pop {r3, pc}
.balign 4, 0
@@ -272,8 +272,8 @@ MOD05_021E2D5C: ; 0x021E2D5C
str r0, [r4, #0x14]
pop {r4, r5, r6, pc}
thumb_func_start MOD05_021E2D9C
MOD05_021E2D9C: ; 0x021E2D9C
thumb_func_start MOD05_CreateMessageBox
MOD05_CreateMessageBox: ; 0x021E2D9C
push {r3, r4, r5, lr}
add r4, r1, #0
add r5, r0, #0
@@ -300,8 +300,8 @@ _021E2DC8:
pop {r3, r4, r5, pc}
.balign 4, 0
thumb_func_start MOD05_021E2DD4
MOD05_021E2DD4: ; 0x021E2DD4
thumb_func_start MOD05_ReadAndExpandMsgDataViaBuffer
MOD05_ReadAndExpandMsgDataViaBuffer: ; 0x021E2DD4
push {r4, lr}
add r4, r0, #0
add r0, r1, #0
@@ -315,8 +315,8 @@ MOD05_021E2DD4: ; 0x021E2DD4
pop {r4, pc}
.balign 4, 0
thumb_func_start MOD05_021E2DF0
MOD05_021E2DF0: ; 0x021E2DF0
thumb_func_start MOD05_ExpandEasyChatMessage
MOD05_ExpandEasyChatMessage: ; 0x021E2DF0
push {r3, r4, r5, r6, r7, lr}
sub sp, #8
add r5, r0, #0
@@ -351,8 +351,8 @@ MOD05_021E2DF0: ; 0x021E2DF0
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
thumb_func_start MOD05_021E2E40
MOD05_021E2E40: ; 0x021E2E40
thumb_func_start MOD05_DrawFieldMessage
MOD05_DrawFieldMessage: ; 0x021E2E40
push {r4, r5, r6, lr}
sub sp, #8
add r4, r0, #0
@@ -367,14 +367,14 @@ MOD05_021E2E40: ; 0x021E2E40
ldr r1, [r4]
add r2, r6, #0
add r3, r5, #0
bl FUN_02054690
bl DrawFieldMessage
ldr r1, [r4, #0x14]
strb r0, [r1]
add sp, #8
pop {r4, r5, r6, pc}
thumb_func_start MOD05_021E2E68
MOD05_021E2E68: ; 0x021E2E68
thumb_func_start MOD05_AddTextPrinterParameterized
MOD05_AddTextPrinterParameterized: ; 0x021E2E68
push {r3, r4, lr}
sub sp, #0xc
mov r3, #0
+316
View File
@@ -0,0 +1,316 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
.balign 4, 0
thumb_func_start MOD05_021E7504
MOD05_021E7504: ; 0x021E7504
add r1, r0, #0
ldr r0, [r1, #0x10]
cmp r0, #3
bhi _021E7536
add r0, r0, r0
add r0, pc
ldrh r0, [r0, #6]
lsl r0, r0, #0x10
asr r0, r0, #0x10
add pc, r0
_021E7518: ; jump table
.short _021E7520 - _021E7518 - 2 ; case 0
.short _021E752C - _021E7518 - 2 ; case 1
.short _021E7526 - _021E7518 - 2 ; case 2
.short _021E7532 - _021E7518 - 2 ; case 3
_021E7520:
mov r0, #2
str r0, [r1, #0x10]
b _021E7536
_021E7526:
mov r0, #1
str r0, [r1, #0x10]
b _021E7536
_021E752C:
mov r0, #3
str r0, [r1, #0x10]
b _021E7536
_021E7532:
mov r0, #0
str r0, [r1, #0x10]
_021E7536:
ldr r0, [r1]
ldr r3, _021E7540 ; =FUN_02055304
ldr r0, [r0, #0x38]
ldr r1, [r1, #0x10]
bx r3
.balign 4, 0
_021E7540: .word FUN_02055304
thumb_func_start MOD05_021E7544
MOD05_021E7544: ; 0x021E7544
push {r4, r5, r6, r7, lr}
sub sp, #0x24
add r5, r1, #0
add r7, r0, #0
ldr r0, [r5]
ldr r0, [r0, #0x38]
bl FUN_020553A0
add r6, r0, #0
ldr r0, [r5, #8]
cmp r0, #0
beq _021E7564
cmp r0, #1
beq _021E756E
add sp, #0x24
pop {r4, r5, r6, r7, pc}
_021E7564:
mov r0, #1
str r0, [r5, #8]
ldr r0, _021E760C ; =0x0000064F
bl FUN_020054C8
_021E756E:
ldr r0, [r5, #0xc]
lsr r2, r0, #0x1f
lsl r1, r0, #0x1f
sub r1, r1, r2
mov r0, #0x1f
ror r1, r0
add r0, r2, r1
beq _021E7584
add r0, r5, #0
bl MOD05_021E7504
_021E7584:
add r0, r6, #0
add r1, sp, #0x18
bl FUN_02058BA4
ldr r4, [r5, #0xc]
add r0, r4, #0
bl _dflt
str r0, [sp, #0x14]
lsl r0, r4, #0xb
str r1, [sp, #0x10]
bl _dflt
add r2, r0, #0
add r3, r1, #0
ldr r0, _021E7610 ; =0x9999999A
ldr r1, _021E7614 ; =0x40C19999
bl _dadd
add r2, r0, #0
add r3, r1, #0
ldr r0, [sp, #0x14]
ldr r1, [sp, #0x10]
bl _dmul
bl _dfix
str r0, [sp, #0x1c]
add r0, r6, #0
add r1, sp, #0x18
bl FUN_02058BB4
ldr r0, [r5, #0xc]
add r0, r0, #1
str r0, [r5, #0xc]
cmp r0, #0x14
bne _021E75EA
mov r0, #6
str r0, [sp]
mov r1, #0
mov r0, #1
str r0, [sp, #4]
mov r0, #4
str r0, [sp, #8]
mov r0, #2
add r2, r1, #0
add r3, r1, #0
bl FUN_0200E1D0
add sp, #0x24
pop {r4, r5, r6, r7, pc}
_021E75EA:
ble _021E7606
bl FUN_0200E308
cmp r0, #0
beq _021E7606
ldr r0, [r5, #4]
mov r1, #1
str r1, [r0]
add r0, r5, #0
bl FreeToHeap
add r0, r7, #0
bl FUN_0200CAB4
_021E7606:
add sp, #0x24
pop {r4, r5, r6, r7, pc}
nop
_021E760C: .word 0x0000064F
_021E7610: .word 0x9999999A
_021E7614: .word 0x40C19999
thumb_func_start MOD05_021E7618
MOD05_021E7618: ; 0x021E7618
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x20
add r5, r1, #0
add r6, r0, #0
ldr r0, [r5]
ldr r0, [r0, #0x38]
bl FUN_020553A0
ldr r1, [r5, #8]
add r4, r0, #0
cmp r1, #0
beq _021E763C
cmp r1, #1
beq _021E7694
cmp r1, #2
beq _021E771C
add sp, #0x20
pop {r3, r4, r5, r6, r7, pc}
_021E763C:
bl FUN_02058914
add r0, r4, #0
add r1, sp, #0x14
bl FUN_02058BA4
ldr r1, [r5, #0xc]
mov r0, #0x14
sub r6, r0, r1
add r0, r6, #0
bl _dflt
str r0, [sp, #0xc]
lsl r0, r6, #0xb
add r7, r1, #0
bl _dflt
add r2, r0, #0
add r3, r1, #0
ldr r0, _021E7744 ; =0x9999999A
ldr r1, _021E7748 ; =0x40C19999
bl _dadd
add r2, r0, #0
add r3, r1, #0
ldr r0, [sp, #0xc]
add r1, r7, #0
bl _dmul
bl _dfix
str r0, [sp, #0x18]
add r0, r4, #0
add r1, sp, #0x14
bl FUN_02058BB4
add r0, r4, #0
bl MOD05_021F1D8C
ldr r0, _021E774C ; =0x0000064F
bl FUN_020054C8
mov r0, #1
str r0, [r5, #8]
_021E7694:
ldr r0, [r5, #0xc]
lsr r2, r0, #0x1f
lsl r1, r0, #0x1f
sub r1, r1, r2
mov r0, #0x1f
ror r1, r0
add r0, r2, r1
beq _021E76AA
add r0, r5, #0
bl MOD05_021E7504
_021E76AA:
add r0, r4, #0
add r1, sp, #0x14
bl FUN_02058BA4
ldr r1, [r5, #0xc]
mov r0, #0x14
sub r6, r0, r1
add r0, r6, #0
bl _dflt
str r0, [sp, #0x10]
lsl r0, r6, #0xb
add r7, r1, #0
bl _dflt
add r2, r0, #0
add r3, r1, #0
ldr r0, _021E7744 ; =0x9999999A
ldr r1, _021E7748 ; =0x40C19999
bl _dadd
add r2, r0, #0
add r3, r1, #0
ldr r0, [sp, #0x10]
add r1, r7, #0
bl _dmul
bl _dfix
str r0, [sp, #0x18]
add r0, r4, #0
add r1, sp, #0x14
bl FUN_02058BB4
ldr r0, [r5, #0xc]
add r0, r0, #1
str r0, [r5, #0xc]
cmp r0, #2
bne _021E770E
mov r0, #6
str r0, [sp]
mov r0, #1
str r0, [sp, #4]
mov r1, #4
str r1, [sp, #8]
add r1, r0, #0
add r2, r0, #0
mov r3, #0
bl FUN_0200E1D0
_021E770E:
ldr r0, [r5, #0xc]
cmp r0, #0x14
ble _021E7740
mov r0, #2
add sp, #0x20
str r0, [r5, #8]
pop {r3, r4, r5, r6, r7, pc}
_021E771C:
bl FUN_0200E308
cmp r0, #0
beq _021E7740
ldr r0, [r5]
mov r1, #1
ldr r0, [r0, #0x38]
bl FUN_02055304
ldr r0, [r5, #4]
mov r1, #1
str r1, [r0]
add r0, r5, #0
bl FreeToHeap
add r0, r6, #0
bl FUN_0200CAB4
_021E7740:
add sp, #0x20
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
_021E7744: .word 0x9999999A
_021E7748: .word 0x40C19999
_021E774C: .word 0x0000064F
thumb_func_start MOD05_021E7750
MOD05_021E7750: ; 0x021E7750
push {r3, r4, r5, r6, r7, lr}
add r5, r0, #0
add r6, r1, #0
mov r0, #4
mov r1, #0x14
add r7, r2, #0
bl AllocFromHeapAtEnd
add r4, r0, #0
mov r1, #0
mov r2, #0x14
bl MI_CpuFill8
str r5, [r4]
str r7, [r4, #4]
ldr r0, [r5, #0x38]
bl FUN_020552F8
str r0, [r4, #0x10]
cmp r6, #0
beq _021E7786
ldr r0, _021E7794 ; =MOD05_021E7544
add r1, r4, #0
mov r2, #0x64
bl FUN_0200CA44
pop {r3, r4, r5, r6, r7, pc}
_021E7786:
ldr r0, _021E7798 ; =MOD05_021E7618
add r1, r4, #0
mov r2, #0x64
bl FUN_0200CA44
pop {r3, r4, r5, r6, r7, pc}
nop
_021E7794: .word MOD05_021E7544
_021E7798: .word MOD05_021E7618
+621
View File
@@ -0,0 +1,621 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
.balign 4, 0
thumb_func_start MOD05_021E779C
MOD05_021E779C: ; 0x021E779C
push {r4, lr}
mov r2, #0
mov r1, #0x14
add r3, r2, #0
add r4, r0, #0
bl MOD05_021E4BE8
str r4, [r0, #0x10]
pop {r4, pc}
.balign 4, 0
thumb_func_start MOD05_021E77B0
MOD05_021E77B0: ; 0x021E77B0
push {r4, lr}
add r4, r0, #0
bl MOD05_021E78B4
add r0, r4, #0
bl MOD05_021E4C00
pop {r4, pc}
thumb_func_start MOD05_021E77C0
MOD05_021E77C0: ; 0x021E77C0
ldr r1, [r0]
add r1, r1, #1
str r1, [r0]
bx lr
thumb_func_start MOD05_021E77C8
MOD05_021E77C8: ; 0x021E77C8
push {r3, lr}
ldr r1, [r0]
sub r1, r1, #1
str r1, [r0]
bpl _021E77D6
bl ErrorHandling
_021E77D6:
pop {r3, pc}
thumb_func_start MOD05_021E77D8
MOD05_021E77D8: ; 0x021E77D8
ldr r1, [r0, #4]
add r1, r1, #1
str r1, [r0, #4]
bx lr
thumb_func_start MOD05_021E77E0
MOD05_021E77E0: ; 0x021E77E0
push {r3, lr}
ldr r1, [r0, #4]
sub r1, r1, #1
str r1, [r0, #4]
bpl _021E77EE
bl ErrorHandling
_021E77EE:
pop {r3, pc}
thumb_func_start MOD05_021E77F0
MOD05_021E77F0: ; 0x021E77F0
push {r3, lr}
cmp r1, #0
bne _021E77FC
bl MOD05_021E77C0
pop {r3, pc}
_021E77FC:
bl MOD05_021E77D8
pop {r3, pc}
.balign 4, 0
thumb_func_start MOD05_021E7804
MOD05_021E7804: ; 0x021E7804
push {r3, lr}
cmp r1, #0
bne _021E7810
bl MOD05_021E77C8
pop {r3, pc}
_021E7810:
bl MOD05_021E77E0
pop {r3, pc}
.balign 4, 0
thumb_func_start MOD05_021E7818
MOD05_021E7818: ; 0x021E7818
push {r3, r4, lr}
sub sp, #0xc
add r4, r0, #0
ldr r0, [r4, #8]
cmp r0, #0
bne _021E785C
mov r1, #1
str r1, [r4, #8]
ldr r0, [r4, #0x10]
mov r2, #0x55
bl MOD05_021E5078
ldr r0, [r4, #0x10]
mov r1, #1
mov r2, #0x75
bl MOD05_021E50AC
mov r1, #1
ldr r0, [r4, #0x10]
mov r2, #4
add r3, r1, #0
bl MOD05_021E50D4
mov r1, #1
str r1, [sp]
mov r0, #0
str r0, [sp, #4]
ldr r0, _021E7860 ; =UNK05_021F7854
add r2, r1, #0
str r0, [sp, #8]
ldr r0, [r4, #0x10]
add r3, r1, #0
bl MOD05_021E4EFC
_021E785C:
add sp, #0xc
pop {r3, r4, pc}
.balign 4, 0
_021E7860: .word UNK05_021F7854
thumb_func_start MOD05_021E7864
MOD05_021E7864: ; 0x021E7864
push {r3, r4, lr}
sub sp, #0xc
add r4, r0, #0
ldr r0, [r4, #0xc]
cmp r0, #0
bne _021E78AC
mov r0, #1
str r0, [r4, #0xc]
ldr r0, [r4, #0x10]
mov r1, #0xa
mov r2, #0x6c
bl MOD05_021E5078
ldr r0, [r4, #0x10]
mov r1, #0xa
mov r2, #0x75
bl MOD05_021E50AC
ldr r0, [r4, #0x10]
mov r1, #0xb
mov r2, #0xd
mov r3, #1
bl MOD05_021E50D4
mov r0, #0xb
str r0, [sp]
mov r0, #0
str r0, [sp, #4]
ldr r0, _021E78B0 ; =UNK05_021F7854
mov r2, #0xa
str r0, [sp, #8]
ldr r0, [r4, #0x10]
mov r1, #0xc
add r3, r2, #0
bl MOD05_021E4EFC
_021E78AC:
add sp, #0xc
pop {r3, r4, pc}
.balign 4, 0
_021E78B0: .word UNK05_021F7854
thumb_func_start MOD05_021E78B4
MOD05_021E78B4: ; 0x021E78B4
push {r4, lr}
add r4, r0, #0
ldr r0, [r4, #8]
cmp r0, #1
bne _021E78E2
mov r0, #0
str r0, [r4, #8]
ldr r0, [r4, #0x10]
mov r1, #1
bl MOD05_021E50A0
ldr r0, [r4, #0x10]
mov r1, #1
bl MOD05_021E50C8
ldr r0, [r4, #0x10]
mov r1, #1
bl MOD05_021E5114
ldr r0, [r4, #0x10]
mov r1, #1
bl MOD05_021E506C
_021E78E2:
pop {r4, pc}
thumb_func_start MOD05_021E78E4
MOD05_021E78E4: ; 0x021E78E4
push {r4, lr}
add r4, r0, #0
ldr r0, [r4, #0xc]
cmp r0, #1
bne _021E7912
mov r0, #0
str r0, [r4, #0xc]
ldr r0, [r4, #0x10]
mov r1, #0xa
bl MOD05_021E50A0
ldr r0, [r4, #0x10]
mov r1, #0xa
bl MOD05_021E50C8
ldr r0, [r4, #0x10]
mov r1, #0xb
bl MOD05_021E5114
ldr r0, [r4, #0x10]
mov r1, #0xc
bl MOD05_021E506C
_021E7912:
pop {r4, pc}
thumb_func_start MOD05_021E7914
MOD05_021E7914: ; 0x021E7914
push {r3, lr}
ldr r1, [r0]
cmp r1, #0
bne _021E7920
bl MOD05_021E7818
_021E7920:
pop {r3, pc}
.balign 4, 0
thumb_func_start MOD05_021E7924
MOD05_021E7924: ; 0x021E7924
push {r3, lr}
ldr r1, [r0, #4]
cmp r1, #0
bne _021E7930
bl MOD05_021E7864
_021E7930:
pop {r3, pc}
.balign 4, 0
thumb_func_start MOD05_021E7934
MOD05_021E7934: ; 0x021E7934
push {r3, lr}
ldr r1, [r0]
cmp r1, #0
bne _021E7940
bl MOD05_021E78B4
_021E7940:
pop {r3, pc}
.balign 4, 0
thumb_func_start MOD05_021E7944
MOD05_021E7944: ; 0x021E7944
push {r3, lr}
ldr r1, [r0, #4]
cmp r1, #0
bne _021E7950
bl MOD05_021E78E4
_021E7950:
pop {r3, pc}
.balign 4, 0
thumb_func_start MOD05_021E7954
MOD05_021E7954: ; 0x021E7954
push {r3, lr}
cmp r1, #0
bne _021E7960
bl MOD05_021E7914
pop {r3, pc}
_021E7960:
bl MOD05_021E7924
pop {r3, pc}
.balign 4, 0
thumb_func_start MOD05_021E7968
MOD05_021E7968: ; 0x021E7968
push {r3, lr}
cmp r1, #0
bne _021E7974
bl MOD05_021E7934
pop {r3, pc}
_021E7974:
bl MOD05_021E7944
pop {r3, pc}
.balign 4, 0
thumb_func_start MOD05_021E797C
MOD05_021E797C: ; 0x021E797C
push {r3, r4, r5, lr}
sub sp, #8
ldr r3, _021E7998 ; =UNK05_021F7824
add r4, sp, #0
ldr r5, [r3]
ldr r3, [r3, #4]
str r5, [sp]
str r3, [sp, #4]
lsl r1, r1, #2
ldr r1, [r4, r1]
bl MOD05_021E4EE4
add sp, #8
pop {r3, r4, r5, pc}
.balign 4, 0
_021E7998: .word UNK05_021F7824
thumb_func_start MOD05_021E799C
MOD05_021E799C: ; 0x021E799C
push {r3, lr}
bl FUN_02064738
ldr r0, [r0, #0x14]
pop {r3, pc}
.balign 4, 0
thumb_func_start MOD05_021E79A8
MOD05_021E79A8: ; 0x021E79A8
push {r4, r5, lr}
sub sp, #0xc
add r4, r1, #0
add r5, r0, #0
bl FUN_0206475C
add r2, r4, #0
add r3, r0, #0
add r2, #0x30
ldmia r3!, {r0, r1}
stmia r2!, {r0, r1}
ldmia r3!, {r0, r1}
stmia r2!, {r0, r1}
mov r0, #6
lsl r0, r0, #0xc
str r0, [r4, #0x28]
ldr r0, [r4, #0x38]
ldr r1, [r4, #0x30]
bl MOD05_021E7954
add r0, r5, #0
add r1, sp, #0
bl FUN_0206477C
ldr r0, [r4, #0x34]
ldr r1, [r4, #0x30]
add r2, sp, #0
bl MOD05_021E797C
str r0, [r4, #0x40]
ldr r0, [r4, #0x38]
ldr r1, [r4, #0x30]
bl MOD05_021E77F0
add r0, r5, #0
bl FUN_02064754
cmp r0, #1
bne _021E79FC
ldr r0, _021E7A04 ; =0x000005DD
bl FUN_020054C8
_021E79FC:
mov r0, #1
add sp, #0xc
pop {r4, r5, pc}
nop
_021E7A04: .word 0x000005DD
thumb_func_start MOD05_021E7A08
MOD05_021E7A08: ; 0x021E7A08
push {r4, r5, lr}
sub sp, #0xc
add r4, r1, #0
add r1, sp, #0
add r5, r0, #0
bl FUN_0206477C
ldr r0, [r4]
cmp r0, #0
beq _021E7A24
cmp r0, #1
beq _021E7A46
cmp r0, #2
b _021E7A5E
_021E7A24:
ldr r1, [r4, #0x1c]
ldr r0, [r4, #0x28]
add r0, r1, r0
str r0, [r4, #0x1c]
beq _021E7A3A
mov r0, #2
ldr r1, [r4, #0x28]
lsl r0, r0, #0xc
sub r0, r1, r0
str r0, [r4, #0x28]
b _021E7A5E
_021E7A3A:
mov r0, #0
str r0, [r4, #0x28]
ldr r0, [r4]
add r0, r0, #1
str r0, [r4]
b _021E7A5E
_021E7A46:
ldr r0, [r4, #4]
add r0, r0, #1
str r0, [r4, #4]
cmp r0, #0x1e
blt _021E7A5E
ldr r0, [r4]
add r0, r0, #1
str r0, [r4]
mov r0, #0
str r0, [r4, #4]
mov r0, #1
str r0, [r4, #0x14]
_021E7A5E:
add r0, r5, #0
add r1, sp, #0
bl FUN_0206476C
add sp, #0xc
pop {r4, r5, pc}
.balign 4, 0
thumb_func_start MOD05_021E7A6C
MOD05_021E7A6C: ; 0x021E7A6C
push {r4, lr}
add r4, r1, #0
ldr r0, [r4, #0x40]
bl FUN_0201F744
ldr r0, [r4, #0x38]
ldr r1, [r4, #0x30]
bl MOD05_021E7804
ldr r0, [r4, #0x38]
ldr r1, [r4, #0x30]
bl MOD05_021E7968
pop {r4, pc}
thumb_func_start MOD05_021E7A88
MOD05_021E7A88: ; 0x021E7A88
push {r3, r4, lr}
sub sp, #0xc
add r4, r1, #0
ldr r1, [r4, #0x10]
cmp r1, #1
beq _021E7ABA
add r1, sp, #0
bl FUN_0206477C
ldr r1, [sp]
ldr r0, [r4, #0x18]
add r0, r1, r0
str r0, [sp]
ldr r1, [sp, #4]
ldr r0, [r4, #0x1c]
add r0, r1, r0
str r0, [sp, #4]
ldr r1, [sp, #8]
ldr r0, [r4, #0x20]
add r0, r1, r0
str r0, [sp, #8]
ldr r0, [r4, #0x40]
add r1, sp, #0
bl FUN_0201F7C8
_021E7ABA:
add sp, #0xc
pop {r3, r4, pc}
.balign 4, 0
thumb_func_start MOD05_021E7AC0
MOD05_021E7AC0: ; 0x021E7AC0
push {r4, r5, r6, r7, lr}
sub sp, #0x24
add r5, r0, #0
add r6, r1, #0
add r7, r2, #0
bl MOD05_021E4C24
add r4, r0, #0
mov r1, #0x16
str r6, [sp, #0x14]
str r4, [sp, #0x18]
bl MOD05_021E4C08
str r0, [sp, #0x1c]
add r0, r5, #0
add r1, sp, #8
str r5, [sp, #0x20]
bl FUN_02058B5C
add r0, r5, #0
bl FUN_02058744
add r1, r0, #1
add r0, sp, #0x14
str r0, [sp]
str r1, [sp, #4]
ldr r1, _021E7B04 ; =UNK05_021F7840
add r0, r4, #0
add r2, sp, #8
add r3, r7, #0
bl MOD05_021E4DC4
add sp, #0x24
pop {r4, r5, r6, r7, pc}
.balign 4, 0
_021E7B04: .word UNK05_021F7840
thumb_func_start MOD05_021E7B08
MOD05_021E7B08: ; 0x021E7B08
push {r4, r5, lr}
sub sp, #0xc
add r4, r1, #0
add r5, r0, #0
bl FUN_0206475C
add r2, r4, #0
add r3, r0, #0
add r2, #0x30
ldmia r3!, {r0, r1}
stmia r2!, {r0, r1}
ldmia r3!, {r0, r1}
stmia r2!, {r0, r1}
ldr r0, [r4, #0x3c]
bl FUN_02058448
str r0, [r4, #8]
ldr r0, [r4, #0x3c]
bl FUN_02058450
str r0, [r4, #0xc]
mov r0, #6
lsl r0, r0, #0xc
str r0, [r4, #0x28]
ldr r0, [r4, #0x38]
ldr r1, [r4, #0x30]
bl MOD05_021E7954
add r0, r5, #0
add r1, sp, #0
bl FUN_0206477C
ldr r0, [r4, #0x34]
ldr r1, [r4, #0x30]
add r2, sp, #0
bl MOD05_021E797C
str r0, [r4, #0x40]
ldr r0, [r4, #0x38]
ldr r1, [r4, #0x30]
bl MOD05_021E77F0
add r0, r5, #0
bl FUN_02064754
cmp r0, #1
bne _021E7B6C
ldr r0, _021E7B74 ; =0x000005DD
bl FUN_020054C8
_021E7B6C:
mov r0, #1
add sp, #0xc
pop {r4, r5, pc}
nop
_021E7B74: .word 0x000005DD
thumb_func_start MOD05_021E7B78
MOD05_021E7B78: ; 0x021E7B78
push {r3, r4, r5, r6, lr}
sub sp, #0xc
add r4, r1, #0
ldr r6, [r4, #0x3c]
ldr r1, [r4, #8]
add r5, r0, #0
ldr r2, [r4, #0xc]
add r0, r6, #0
bl FUN_020582A8
cmp r0, #0
bne _021E7B94
bl ErrorHandling
_021E7B94:
add r0, r6, #0
add r1, sp, #0
bl MOD05_021F1E64
mov r0, #2
ldr r1, [sp, #4]
lsl r0, r0, #0x10
add r1, r1, r0
str r1, [sp, #4]
ldr r2, [sp, #8]
lsr r1, r0, #5
add r1, r2, r1
str r1, [sp, #8]
ldr r1, [r4]
cmp r1, #0
beq _021E7BBC
cmp r1, #1
beq _021E7BDC
cmp r1, #2
b _021E7BF4
_021E7BBC:
ldr r2, [r4, #0x1c]
ldr r1, [r4, #0x28]
add r1, r2, r1
str r1, [r4, #0x1c]
beq _021E7BD0
ldr r1, [r4, #0x28]
lsr r0, r0, #4
sub r0, r1, r0
str r0, [r4, #0x28]
b _021E7BF4
_021E7BD0:
mov r0, #0
str r0, [r4, #0x28]
ldr r0, [r4]
add r0, r0, #1
str r0, [r4]
b _021E7BF4
_021E7BDC:
ldr r0, [r4, #4]
add r0, r0, #1
str r0, [r4, #4]
cmp r0, #0x1e
blt _021E7BF4
ldr r0, [r4]
add r0, r0, #1
str r0, [r4]
mov r0, #0
str r0, [r4, #4]
mov r0, #1
str r0, [r4, #0x14]
_021E7BF4:
add r0, r5, #0
add r1, sp, #0
bl FUN_0206476C
add sp, #0xc
pop {r3, r4, r5, r6, pc}
.section .rodata
.global UNK05_021F7824
UNK05_021F7824: ; 0x021F7824
.word 0x00000001, 0x0000000C, 0x00000044, MOD05_021E79A8
.word MOD05_021E7A6C, MOD05_021E7A08, MOD05_021E7A88
.global UNK05_021F7840
UNK05_021F7840: ; 0x021F7840
.word 0x00000044, MOD05_021E7B08, MOD05_021E7A6C, MOD05_021E7B78
.word MOD05_021E7A88
.global UNK05_021F7854
UNK05_021F7854: ; 0x021F7854
.word 0x00000000, 0x00000001, 0x00000000, 0x00000000
.word 0x00000000, 0x00000002
+708
View File
@@ -0,0 +1,708 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
.balign 4, 0
thumb_func_start MOD05_021E7C00
MOD05_021E7C00: ; 0x021E7C00
push {r4, lr}
mov r1, #0x46
lsl r1, r1, #6
bl AllocFromHeap
add r4, r0, #0
bl MOD05_021E7C1C
add r0, r4, #0
pop {r4, pc}
thumb_func_start MOD05_021E7C14
MOD05_021E7C14: ; 0x021E7C14
ldr r3, _021E7C18 ; =FreeToHeap
bx r3
.balign 4, 0
_021E7C18: .word FreeToHeap
thumb_func_start MOD05_021E7C1C
MOD05_021E7C1C: ; 0x021E7C1C
push {r3, r4, r5, r6, r7}
sub sp, #0xc
mov r4, #0
mov ip, r0
add r7, sp, #0
add r3, r4, #0
_021E7C28:
str r3, [r7]
str r3, [r7, #4]
mov r0, #0x8c
add r1, r4, #0
mul r1, r0
mov r0, ip
add r2, r0, r1
add r5, r2, #0
str r3, [r7, #8]
mov r0, ip
str r3, [r0, r1]
str r3, [r2, #4]
str r3, [r2, #8]
str r3, [r2, #0xc]
add r6, r7, #0
ldmia r6!, {r0, r1}
add r5, #0x68
stmia r5!, {r0, r1}
ldr r0, [r6]
add r6, r7, #0
str r0, [r5]
add r5, r2, #0
ldmia r6!, {r0, r1}
add r5, #0x74
stmia r5!, {r0, r1}
ldr r0, [r6]
add r6, r7, #0
str r0, [r5]
add r5, r2, #0
ldmia r6!, {r0, r1}
add r5, #0x80
stmia r5!, {r0, r1}
ldr r0, [r6]
str r0, [r5]
add r0, r4, #1
lsl r0, r0, #0x18
lsr r4, r0, #0x18
str r3, [r2, #0x64]
cmp r4, #0x20
blo _021E7C28
add sp, #0xc
pop {r3, r4, r5, r6, r7}
bx lr
.balign 4, 0
thumb_func_start MOD05_021E7C80
MOD05_021E7C80: ; 0x021E7C80
push {r3, r4, r5, r6, lr}
sub sp, #0xc
add r5, r0, #0
add r4, r1, #0
cmp r5, #0x20
blt _021E7C90
bl ErrorHandling
_021E7C90:
add r6, sp, #0
mov r3, #0
str r3, [r6]
str r3, [r6, #4]
mov r0, #0x8c
mul r0, r5
str r3, [r6, #8]
str r3, [r4, r0]
add r2, r4, r0
str r3, [r2, #4]
str r3, [r2, #8]
add r4, r2, #0
str r3, [r2, #0xc]
add r5, r6, #0
ldmia r5!, {r0, r1}
add r4, #0x68
stmia r4!, {r0, r1}
ldr r0, [r5]
add r5, r6, #0
str r0, [r4]
add r4, r2, #0
ldmia r5!, {r0, r1}
add r4, #0x74
stmia r4!, {r0, r1}
ldr r0, [r5]
str r0, [r4]
add r4, r2, #0
ldmia r6!, {r0, r1}
add r4, #0x80
stmia r4!, {r0, r1}
ldr r0, [r6]
str r0, [r4]
str r3, [r2, #0x64]
add sp, #0xc
pop {r3, r4, r5, r6, pc}
.balign 4, 0
thumb_func_start MOD05_021E7CD8
MOD05_021E7CD8: ; 0x021E7CD8
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r6, r0, #0
ldr r0, [sp, #0x28]
add r4, r1, #0
str r0, [sp, #0x28]
mov r0, #0
add r7, r2, #0
add r5, r3, #0
str r0, [sp, #4]
cmp r4, #0
beq _021E7D0E
mov r0, #4
bl AllocFromHeapAtEnd
str r0, [sp, #4]
ldr r2, [sp, #4]
add r0, r6, #0
add r1, r4, #0
bl NARC_ReadFile
add r0, r4, #0
mov r1, #0x30
bl _u32_div_f
str r0, [sp]
b _021E7D10
_021E7D0E:
str r0, [sp]
_021E7D10:
ldr r4, [sp, #4]
mov r6, #0
_021E7D14:
ldr r0, [sp]
cmp r6, r0
bhs _021E7D82
ldr r0, [r4]
add r2, r5, #0
str r0, [r5]
mov r0, #1
str r0, [r5, #4]
mov r0, #0
add r3, r4, #4
str r0, [r5, #0xc]
ldmia r3!, {r0, r1}
add r2, #0x68
stmia r2!, {r0, r1}
ldr r0, [r3]
add r3, r4, #0
str r0, [r2]
add r3, #0x10
add r2, r5, #0
ldmia r3!, {r0, r1}
add r2, #0x74
stmia r2!, {r0, r1}
ldr r0, [r3]
add r3, r4, #0
str r0, [r2]
add r3, #0x1c
add r2, r5, #0
ldmia r3!, {r0, r1}
add r2, #0x80
stmia r2!, {r0, r1}
ldr r0, [r3]
add r3, r5, #0
str r0, [r2]
add r2, r5, #0
ldr r0, [r5]
add r1, r7, #0
add r2, #0x10
add r3, #0x64
bl MOD05_021E7F10
ldr r1, [r5]
add r0, r7, #0
bl MOD05_021F4CE4
cmp r0, #0
bne _021E7D74
mov r0, #0
str r0, [r5]
_021E7D74:
add r1, r5, #0
ldr r0, [r5]
ldr r2, [sp, #0x28]
add r1, #0x10
bl MOD05_021D9E80
b _021E7DBE
_021E7D82:
mov r1, #0
add r0, sp, #8
str r1, [r0]
str r1, [r0, #4]
str r1, [r0, #8]
add r0, r1, #0
str r0, [r5]
str r0, [r5, #4]
add r2, r5, #0
add r3, sp, #8
str r0, [r5, #0xc]
ldmia r3!, {r0, r1}
add r2, #0x68
stmia r2!, {r0, r1}
ldr r0, [r3]
add r3, sp, #8
str r0, [r2]
add r2, r5, #0
ldmia r3!, {r0, r1}
add r2, #0x74
stmia r2!, {r0, r1}
ldr r0, [r3]
add r3, sp, #8
str r0, [r2]
add r2, r5, #0
ldmia r3!, {r0, r1}
add r2, #0x80
stmia r2!, {r0, r1}
ldr r0, [r3]
str r0, [r2]
_021E7DBE:
add r6, r6, #1
add r5, #0x8c
add r4, #0x30
cmp r6, #0x20
blt _021E7D14
ldr r0, [sp, #4]
cmp r0, #0
beq _021E7DD2
bl FreeToHeap
_021E7DD2:
add sp, #0x14
pop {r4, r5, r6, r7, pc}
.balign 4, 0
thumb_func_start MOD05_021E7DD8
MOD05_021E7DD8: ; 0x021E7DD8
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x48
ldr r4, _021E7E94 ; =UNK05_021F7878
str r2, [sp, #0xc]
str r3, [sp, #0x10]
add r6, r0, #0
str r1, [sp, #8]
add r3, sp, #0x18
mov r2, #4
_021E7DEA:
ldmia r4!, {r0, r1}
stmia r3!, {r0, r1}
sub r2, r2, #1
bne _021E7DEA
ldr r0, [r4]
ldr r5, [sp, #0x60]
str r0, [r3]
mov r7, #0
_021E7DFA:
ldr r0, [r5, #4]
cmp r0, #0
beq _021E7E86
ldr r0, [r5, #8]
cmp r0, #0
bne _021E7E86
add r4, r5, #0
add r4, #0x68
ldmia r4!, {r0, r1}
add r3, sp, #0x3c
add r2, r3, #0
stmia r3!, {r0, r1}
ldr r0, [r4]
str r0, [r3]
ldr r1, [sp, #0x3c]
ldr r0, [r6]
add r3, r5, #0
add r0, r1, r0
str r0, [sp, #0x3c]
ldr r1, [sp, #0x44]
ldr r0, [r6, #8]
add r3, #0x80
add r0, r1, r0
str r0, [sp, #0x44]
add r1, r2, #0
ldr r0, [r5, #0x64]
add r2, sp, #0x18
bl FUN_0201B6D0
cmp r0, #0
beq _021E7E86
ldr r0, [sp, #8]
bl MOD05_021F4C9C
add r4, r0, #0
ldr r0, [sp, #0xc]
cmp r0, #1
bne _021E7E50
ldr r0, [sp, #0x10]
ldr r1, [r5, #0x64]
ldr r2, _021E7E98 ; =0x00000F33
bl MOD05_021DBB8C
_021E7E50:
ldr r0, [r5]
add r1, r4, #0
add r2, sp, #0x14
bl MOD05_021DB9D4
add r0, sp, #0x14
ldrh r0, [r0]
add r1, sp, #0x3c
cmp r0, #0
bne _021E7E74
add r0, r5, #0
add r3, r5, #0
add r0, #0x10
add r2, sp, #0x18
add r3, #0x80
bl FUN_0201B26C
b _021E7E86
_021E7E74:
str r4, [sp]
ldr r0, [r5]
add r3, r5, #0
str r0, [sp, #4]
ldr r0, [r5, #0x64]
add r2, sp, #0x18
add r3, #0x80
bl MOD05_021E7F34
_021E7E86:
add r7, r7, #1
add r5, #0x8c
cmp r7, #0x20
blt _021E7DFA
add sp, #0x48
pop {r3, r4, r5, r6, r7, pc}
nop
_021E7E94: .word UNK05_021F7878
_021E7E98: .word 0x00000F33
thumb_func_start MOD05_021E7E9C
MOD05_021E7E9C: ; 0x021E7E9C
add r0, #0x74
bx lr
thumb_func_start MOD05_021E7EA0
MOD05_021E7EA0: ; 0x021E7EA0
add r2, r1, #0
add r2, #0x68
add r3, r0, #0
ldmia r2!, {r0, r1}
stmia r3!, {r0, r1}
ldr r0, [r2]
str r0, [r3]
bx lr
thumb_func_start MOD05_021E7EB0
MOD05_021E7EB0: ; 0x021E7EB0
add r3, r1, #0
add r2, r0, #0
ldmia r3!, {r0, r1}
add r2, #0x68
stmia r2!, {r0, r1}
ldr r0, [r3]
str r0, [r2]
bx lr
thumb_func_start MOD05_021E7EC0
MOD05_021E7EC0: ; 0x021E7EC0
str r1, [r0, #8]
bx lr
thumb_func_start MOD05_021E7EC4
MOD05_021E7EC4: ; 0x021E7EC4
ldr r0, [r0]
bx lr
thumb_func_start MOD05_021E7EC8
MOD05_021E7EC8: ; 0x021E7EC8
add r0, #0x10
bx lr
thumb_func_start MOD05_021E7ECC
MOD05_021E7ECC: ; 0x021E7ECC
ldr r0, [r0, #0x64]
bx lr
thumb_func_start MOD05_021E7ED0
MOD05_021E7ED0: ; 0x021E7ED0
mov r2, #0x8c
mul r2, r1
add r0, r0, r2
bx lr
thumb_func_start MOD05_021E7ED8
MOD05_021E7ED8: ; 0x021E7ED8
mov r3, #0
_021E7EDA:
ldr r2, [r0]
cmp r2, r1
beq _021E7EEA
add r3, r3, #1
add r0, #0x8c
cmp r3, #0x20
blt _021E7EDA
mov r0, #0
_021E7EEA:
bx lr
thumb_func_start MOD05_021E7EEC
MOD05_021E7EEC: ; 0x021E7EEC
push {r3, r4, r5, lr}
add r4, r1, #0
add r5, r0, #0
cmp r4, #0x20
blt _021E7EFA
bl ErrorHandling
_021E7EFA:
mov r0, #0x8c
mul r0, r4
add r4, r5, r0
ldr r0, [r4, #4]
cmp r0, #0
bne _021E7F0A
bl ErrorHandling
_021E7F0A:
add r0, r4, #0
pop {r3, r4, r5, pc}
.balign 4, 0
thumb_func_start MOD05_021E7F10
MOD05_021E7F10: ; 0x021E7F10
push {r3, r4, r5, lr}
add r5, r2, #0
add r4, r3, #0
bl MOD05_021F4BD0
ldr r0, [r0]
bl FUN_020BC13C
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
add r1, r0, r1
add r0, r5, #0
str r1, [r4]
bl FUN_020B80B4
pop {r3, r4, r5, pc}
.balign 4, 0
thumb_func_start MOD05_021E7F34
MOD05_021E7F34: ; 0x021E7F34
push {r3, r4, r5, r6, r7, lr}
add r7, r0, #0
add r0, r1, #0
add r4, r2, #0
add r5, r3, #0
bl FUN_020B8474
ldr r1, _021E7FB4 ; =UNK_021CEDD4
add r0, r4, #0
bl MI_Copy36B
ldr r1, _021E7FB8 ; =UNK_021CED98
mov r0, #0xa4
ldr r2, [r1, #0x7c]
bic r2, r0
add r0, r5, #0
str r2, [r1, #0x7c]
bl FUN_020B844C
bl FUN_020B849C
add r2, sp, #0
ldr r0, [sp, #0x1c]
ldr r1, [sp, #0x18]
add r2, #2
add r3, sp, #0
bl MOD05_021DB9E0
add r0, sp, #0
ldrh r0, [r0]
ldr r1, [sp, #0x18]
bl MOD05_021DB9F8
add r6, r0, #0
add r0, sp, #0
ldrh r0, [r0, #2]
mov r5, #0xff
mov r4, #0
cmp r0, #0
ble _021E7FB0
_021E7F84:
lsl r0, r4, #2
add r2, r6, r0
ldrh r0, [r6, r0]
cmp r5, r0
beq _021E7F96
lsl r0, r0, #0x18
lsr r5, r0, #0x18
mov r3, #1
b _021E7F98
_021E7F96:
mov r3, #0
_021E7F98:
ldrh r2, [r2, #2]
add r0, r7, #0
add r1, r5, #0
bl FUN_020BAFB8
add r0, r4, #1
lsl r0, r0, #0x18
lsr r4, r0, #0x18
add r0, sp, #0
ldrh r0, [r0, #2]
cmp r4, r0
blt _021E7F84
_021E7FB0:
pop {r3, r4, r5, r6, r7, pc}
nop
_021E7FB4: .word UNK_021CEDD4
_021E7FB8: .word UNK_021CED98
thumb_func_start MOD05_021E7FBC
MOD05_021E7FBC: ; 0x021E7FBC
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x10
ldr r5, _021E8058 ; =UNK05_021F786C
add r6, r0, #0
add r7, r1, #0
ldmia r5!, {r0, r1}
add r4, sp, #4
stmia r4!, {r0, r1}
ldr r0, [r5]
str r0, [r4]
mov r4, #0
mov r0, #0x8c
_021E7FD4:
add r1, r4, #0
mul r1, r0
add r5, r6, r1
ldr r1, [r5, #4]
cmp r1, #0
bne _021E8044
mov r0, #1
str r0, [r5, #4]
add r6, r5, #0
ldmia r3!, {r0, r1}
add r6, #0x68
stmia r6!, {r0, r1}
ldr r0, [r3]
str r0, [r6]
ldr r6, [sp, #0x28]
cmp r6, #0
beq _021E8008
mov r0, #1
str r0, [r5, #0xc]
add r3, r5, #0
ldmia r6!, {r0, r1}
add r3, #0x74
stmia r3!, {r0, r1}
ldr r0, [r6]
str r0, [r3]
b _021E800C
_021E8008:
mov r0, #0
str r0, [r5, #0xc]
_021E800C:
add r6, sp, #4
add r3, r5, #0
ldmia r6!, {r0, r1}
add r3, #0x80
stmia r3!, {r0, r1}
ldr r0, [r6]
add r1, r7, #0
str r0, [r3]
add r3, r5, #0
str r2, [r5]
add r0, r2, #0
add r2, r5, #0
add r2, #0x10
add r3, #0x64
bl MOD05_021E7F10
ldr r0, [sp, #0x2c]
mov r1, #0
str r0, [sp]
ldr r0, [r5]
add r5, #0x10
add r2, r1, #0
add r3, r5, #0
bl MOD05_021D9DC0
add sp, #0x10
add r0, r4, #0
pop {r3, r4, r5, r6, r7, pc}
_021E8044:
add r1, r4, #1
lsl r1, r1, #0x18
lsr r4, r1, #0x18
cmp r4, #0x20
blo _021E7FD4
bl ErrorHandling
mov r0, #0x20
add sp, #0x10
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
_021E8058: .word UNK05_021F786C
thumb_func_start MOD05_021E805C
MOD05_021E805C: ; 0x021E805C
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x38
ldr r4, _021E80F4 ; =UNK05_021F789C
str r0, [sp, #8]
str r1, [sp, #0xc]
add r3, sp, #0x14
mov r2, #4
_021E806A:
ldmia r4!, {r0, r1}
stmia r3!, {r0, r1}
sub r2, r2, #1
bne _021E806A
ldr r0, [r4]
mov r4, #0
str r0, [r3]
add r7, sp, #0x14
_021E807A:
mov r0, #0x8c
add r1, r4, #0
mul r1, r0
ldr r0, [sp, #8]
add r5, r0, r1
ldr r0, [r5, #4]
cmp r0, #0
beq _021E80E4
ldr r0, [r5, #8]
cmp r0, #0
bne _021E80E4
ldr r0, [sp, #0xc]
bl MOD05_021F4C9C
add r6, r0, #0
ldr r0, [r5]
add r1, r6, #0
add r2, sp, #0x10
bl MOD05_021DB9D4
ldr r0, [r5, #0xc]
cmp r0, #0
beq _021E80B2
add r1, r5, #0
add r0, r7, #0
add r1, #0x74
bl FUN_0201CAA8
_021E80B2:
add r0, sp, #0x10
ldrh r0, [r0]
cmp r0, #0
bne _021E80CE
add r0, r5, #0
add r1, r5, #0
add r5, #0x80
add r0, #0x10
add r1, #0x68
add r2, r7, #0
add r3, r5, #0
bl FUN_0201B26C
b _021E80E4
_021E80CE:
str r6, [sp]
ldr r0, [r5]
add r1, r5, #0
str r0, [sp, #4]
ldr r0, [r5, #0x64]
add r5, #0x80
add r1, #0x68
add r2, r7, #0
add r3, r5, #0
bl MOD05_021E7F34
_021E80E4:
add r0, r4, #1
lsl r0, r0, #0x18
lsr r4, r0, #0x18
cmp r4, #0x20
blo _021E807A
add sp, #0x38
pop {r3, r4, r5, r6, r7, pc}
nop
_021E80F4: .word UNK05_021F789C
.section .rodata
.global UNK05_021F786C
UNK05_021F786C: ; 0x021F786C
.word 0x00001000, 0x00001000, 0x00001000
.global UNK05_021F7878
UNK05_021F7878: ; 0x021F7878
.byte 0x00, 0x10, 0x00, 0x00 ;word
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
.global UNK05_021F789C
UNK05_021F789C: ; 0x021F789C
.byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ;word
.byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x10, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00
+303
View File
@@ -0,0 +1,303 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
.balign 4, 0
thumb_func_start MOD05_021E80F8
MOD05_021E80F8: ; 0x021E80F8
push {r3, lr}
mov r1, #0x14
bl AllocFromHeap
add r3, r0, #0
mov r2, #0x14
mov r1, #0
_021E8106:
strb r1, [r3]
add r3, r3, #1
sub r2, r2, #1
bne _021E8106
pop {r3, pc}
thumb_func_start MOD05_021E8110
MOD05_021E8110: ; 0x021E8110
push {r4, lr}
add r4, r0, #0
ldrb r1, [r4, #0x13]
lsl r1, r1, #0x18
lsr r1, r1, #0x1f
beq _021E8120
bl FUN_02019178
_021E8120:
add r0, r4, #0
bl FreeToHeap
pop {r4, pc}
thumb_func_start MOD05_021E8128
MOD05_021E8128: ; 0x021E8128
strb r1, [r0, #0x12]
strh r2, [r0, #0x10]
bx lr
.balign 4, 0
thumb_func_start MOD05_021E8130
MOD05_021E8130: ; 0x021E8130
ldrb r3, [r0, #0x13]
mov r2, #0x7f
bic r3, r2
mov r2, #0x7f
and r1, r2
orr r1, r3
strb r1, [r0, #0x13]
bx lr
thumb_func_start MOD05_021E8140
MOD05_021E8140: ; 0x021E8140
bx lr
.balign 4, 0
thumb_func_start MOD05_021E8144
MOD05_021E8144: ; 0x021E8144
ldrb r0, [r0, #0x12]
bx lr
thumb_func_start MOD05_021E8148
MOD05_021E8148: ; 0x021E8148
ldrb r0, [r0, #0x13]
lsl r0, r0, #0x19
lsr r0, r0, #0x19
bne _021E8154
mov r0, #1
bx lr
_021E8154:
mov r0, #0
bx lr
thumb_func_start MOD05_021E8158
MOD05_021E8158: ; 0x021E8158
push {r4, lr}
ldr r4, [r0, #0x60]
ldrb r1, [r4, #0x13]
lsl r1, r1, #0x19
lsr r1, r1, #0x19
cmp r1, #4
bhi _021E81BA
add r1, r1, r1
add r1, pc
ldrh r1, [r1, #6]
lsl r1, r1, #0x10
asr r1, r1, #0x10
add pc, r1
_021E8172: ; jump table
.short _021E81BA - _021E8172 - 2 ; case 0
.short _021E817C - _021E8172 - 2 ; case 1
.short _021E818A - _021E8172 - 2 ; case 2
.short _021E819C - _021E8172 - 2 ; case 3
.short _021E81AE - _021E8172 - 2 ; case 4
_021E817C:
bl MOD05_021E81D0
ldrb r1, [r4, #0x13]
mov r0, #0x7f
bic r1, r0
strb r1, [r4, #0x13]
pop {r4, pc}
_021E818A:
bl MOD05_021E82A0
cmp r0, #1
bne _021E81BA
ldrb r1, [r4, #0x13]
mov r0, #0x7f
bic r1, r0
strb r1, [r4, #0x13]
pop {r4, pc}
_021E819C:
bl MOD05_021E8260
cmp r0, #1
bne _021E81BA
ldrb r1, [r4, #0x13]
mov r0, #0x7f
bic r1, r0
strb r1, [r4, #0x13]
pop {r4, pc}
_021E81AE:
bl MOD05_021E820C
ldrb r1, [r4, #0x13]
mov r0, #0x7f
bic r1, r0
strb r1, [r4, #0x13]
_021E81BA:
pop {r4, pc}
thumb_func_start MOD05_021E81BC
MOD05_021E81BC: ; 0x021E81BC
push {r4, lr}
add r4, r0, #0
ldr r0, [r4, #0x60]
bl MOD05_021E8130
add r0, r4, #0
bl MOD05_021E8158
pop {r4, pc}
.balign 4, 0
thumb_func_start MOD05_021E81D0
MOD05_021E81D0: ; 0x021E81D0
push {r4, lr}
mov r1, #3
add r4, r0, #0
add r3, r1, #0
ldr r0, [r4, #8]
add r2, r1, #0
sub r3, #0x33
bl FUN_020179E0
ldr r1, [r4, #0x60]
ldrb r0, [r1, #0x13]
lsl r0, r0, #0x18
lsr r0, r0, #0x1f
bne _021E8200
ldrb r2, [r1, #0x12]
ldr r0, [r4, #8]
mov r3, #3
bl FUN_020546E0
ldr r2, [r4, #0x60]
mov r0, #0x80
ldrb r1, [r2, #0x13]
orr r0, r1
strb r0, [r2, #0x13]
_021E8200:
ldr r0, [r4, #0x60]
ldrb r1, [r0, #0x12]
ldrh r2, [r0, #0x10]
bl FUN_02054744
pop {r4, pc}
thumb_func_start MOD05_021E820C
MOD05_021E820C: ; 0x021E820C
push {r4, lr}
sub sp, #0x10
add r4, r0, #0
ldr r0, [r4, #0x60]
ldrb r1, [r0, #0x13]
lsl r1, r1, #0x18
lsr r1, r1, #0x1f
beq _021E825A
bl FUN_02019178
mov r0, #0x12
str r0, [sp]
mov r0, #0x20
str r0, [sp, #4]
mov r0, #6
str r0, [sp, #8]
mov r0, #0x10
str r0, [sp, #0xc]
mov r2, #0
ldr r0, [r4, #8]
mov r1, #3
add r3, r2, #0
bl FUN_02018540
ldr r0, [r4, #8]
mov r1, #3
bl FUN_02017CD0
mov r1, #3
ldr r0, [r4, #8]
add r2, r1, #0
mov r3, #0
bl FUN_020179E0
ldr r2, [r4, #0x60]
mov r0, #0x80
ldrb r1, [r2, #0x13]
bic r1, r0
strb r1, [r2, #0x13]
_021E825A:
add sp, #0x10
pop {r4, pc}
.balign 4, 0
thumb_func_start MOD05_021E8260
MOD05_021E8260: ; 0x021E8260
push {r4, lr}
add r4, r0, #0
ldr r0, [r4, #8]
mov r1, #3
bl FUN_02017B54
cmp r0, #0
bne _021E8274
mov r0, #1
pop {r4, pc}
_021E8274:
mov r1, #0x2f
mvn r1, r1
cmp r0, r1
ble _021E8280
cmp r0, #0
blt _021E828E
_021E8280:
mov r1, #3
add r3, r1, #0
ldr r0, [r4, #8]
add r2, r1, #0
sub r3, #0x33
bl FUN_020179E0
_021E828E:
ldr r0, [r4, #8]
mov r1, #3
mov r2, #4
mov r3, #0x10
bl FUN_020179E0
mov r0, #0
pop {r4, pc}
.balign 4, 0
thumb_func_start MOD05_021E82A0
MOD05_021E82A0: ; 0x021E82A0
push {r4, lr}
sub sp, #0x10
add r4, r0, #0
ldr r0, [r4, #8]
mov r1, #3
bl FUN_02017B54
mov r1, #0x2f
mvn r1, r1
cmp r0, r1
bne _021E82EC
mov r0, #0x12
str r0, [sp]
mov r0, #0x20
str r0, [sp, #4]
mov r0, #6
str r0, [sp, #8]
mov r0, #0x10
str r0, [sp, #0xc]
mov r2, #0
ldr r0, [r4, #8]
mov r1, #3
add r3, r2, #0
bl FUN_02018540
ldr r0, [r4, #8]
mov r1, #3
bl FUN_02017CD0
mov r1, #3
ldr r0, [r4, #8]
add r2, r1, #0
mov r3, #0
bl FUN_020179E0
add sp, #0x10
mov r0, #1
pop {r4, pc}
_021E82EC:
ble _021E82F2
cmp r0, #0
blt _021E82FE
_021E82F2:
mov r1, #3
ldr r0, [r4, #8]
add r2, r1, #0
mov r3, #0
bl FUN_020179E0
_021E82FE:
ldr r0, [r4, #8]
mov r1, #3
mov r2, #5
mov r3, #0x10
bl FUN_020179E0
mov r0, #0
add sp, #0x10
pop {r4, pc}
+409
View File
@@ -0,0 +1,409 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
.balign 4, 0
thumb_func_start MOD05_021E8310
MOD05_021E8310: ; 0x021E8310
push {r3, r4, r5, r6, r7, lr}
ldr r4, [r1, #0xc]
add r5, r0, #0
add r0, r4, #0
bl FUN_02034E30
bl FUN_02034DC0
add r6, r0, #0
add r0, r4, #0
bl Sav2_Pokedex_get
add r7, r0, #0
ldr r0, [r6]
bl FUN_02034824
str r0, [r5, #4]
add r0, r7, #0
bl Pokedex_GetSinnohDexFlag
cmp r0, #0
beq _021E8344
add r0, r7, #0
bl Pokedex_CountSeenMons
b _021E8346
_021E8344:
mov r0, #0
_021E8346:
str r0, [r5]
add r0, r4, #0
bl Sav2_PlayerData_GetProfileAddr
str r0, [r5, #8]
add r0, r4, #0
bl Sav2_PlayerData_GetIGTAddr
str r0, [r5, #0xc]
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
thumb_func_start MOD05_021E835C
MOD05_021E835C: ; 0x021E835C
push {r3, r4, r5, lr}
sub sp, #8
add r4, r1, #0
ldr r2, [r4, #4]
mov r1, #0
add r5, r0, #0
bl BufferLandmarkName
ldr r2, [r4, #8]
add r0, r5, #0
mov r1, #1
bl BufferPlayersName
ldr r0, [r4, #8]
bl PlayerProfile_CountBadges
add r2, r0, #0
mov r0, #0
str r0, [sp]
mov r3, #1
str r3, [sp, #4]
add r0, r5, #0
mov r1, #2
bl BufferIntegerAsString
ldr r2, [r4]
cmp r2, #0x64
blt _021E839A
mov r3, #3
mov r0, #0
b _021E83A8
_021E839A:
cmp r2, #0xa
blt _021E83A4
mov r3, #3
mov r0, #1
b _021E83A8
_021E83A4:
mov r3, #2
mov r0, #1
_021E83A8:
str r0, [sp]
mov r0, #1
str r0, [sp, #4]
add r0, r5, #0
mov r1, #3
bl BufferIntegerAsString
ldr r0, [r4, #0xc]
bl GetIGTHours
add r2, r0, #0
cmp r2, #0x64
blt _021E83C8
mov r3, #3
mov r0, #0
b _021E83D6
_021E83C8:
cmp r2, #0xa
blt _021E83D2
mov r3, #3
mov r0, #1
b _021E83D6
_021E83D2:
mov r3, #2
mov r0, #1
_021E83D6:
str r0, [sp]
mov r0, #1
str r0, [sp, #4]
add r0, r5, #0
mov r1, #4
bl BufferIntegerAsString
ldr r0, [r4, #0xc]
bl GetIGTMinutes
mov r3, #2
add r2, r0, #0
str r3, [sp]
mov r0, #1
str r0, [sp, #4]
add r0, r5, #0
mov r1, #5
bl BufferIntegerAsString
add sp, #8
pop {r3, r4, r5, pc}
thumb_func_start MOD05_021E8400
MOD05_021E8400: ; 0x021E8400
ldr r0, [r0]
cmp r0, #0
beq _021E840A
mov r0, #0xa
bx lr
_021E840A:
mov r0, #8
bx lr
.balign 4, 0
thumb_func_start MOD05_021E8410
MOD05_021E8410: ; 0x021E8410
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x18
add r5, r0, #0
mov r0, #0
mov r1, #1
bl FUN_02002E4C
add r4, r0, #0
mov r0, #0
mov r1, #3
bl FUN_02002E4C
add r0, r4, r0
str r0, [sp, #0x14]
mov r4, #0
ldr r0, [r5, #0x14]
ldr r1, [r5, #0x18]
ldr r3, [r5, #4]
add r2, r4, #0
bl ReadMsgData_ExpandPlaceholders
add r1, r4, #0
add r6, r0, #0
str r1, [sp]
mov r0, #0xff
str r0, [sp, #4]
str r1, [sp, #8]
ldr r0, [r5, #0x10]
add r2, r6, #0
add r3, r1, #0
bl AddTextPrinterParameterized
add r0, r6, #0
bl String_dtor
mov r0, #1
str r0, [sp, #0x10]
ldr r0, _021E84EC ; =UNK05_021F78D4
ldr r7, _021E84F0 ; =UNK05_021F78C4
str r0, [sp, #0xc]
_021E8460:
ldr r0, [sp, #0xc]
ldr r1, [r0]
cmp r1, #3
bne _021E846E
ldr r0, [r5, #0x1c]
cmp r0, #0
beq _021E84D6
_021E846E:
ldr r0, [sp, #0x14]
add r4, r4, r0
ldr r0, [r5, #0x18]
bl NewString_ReadMsgData
add r6, r0, #0
mov r1, #0
str r4, [sp]
mov r0, #0xff
str r0, [sp, #4]
mov r0, #0
str r0, [sp, #8]
ldr r0, [r5, #0x10]
add r2, r6, #0
add r3, r1, #0
bl AddTextPrinterParameterized
add r0, r6, #0
bl String_dtor
sub r2, r7, #4
ldr r0, [r5, #0x14]
ldr r1, [r5, #0x18]
ldr r2, [r2]
ldr r3, [r5, #4]
bl ReadMsgData_ExpandPlaceholders
add r6, r0, #0
mov r0, #0
mov r1, #2
bl FUN_02002E4C
add r2, r0, #0
mov r0, #0
add r1, r6, #0
bl FUN_02002E14
mov r1, #0x68
sub r3, r1, r0
str r4, [sp]
mov r0, #0xff
str r0, [sp, #4]
mov r0, #0
str r0, [sp, #8]
ldr r0, [r5, #0x10]
mov r1, #0
add r2, r6, #0
bl AddTextPrinterParameterized
add r0, r6, #0
bl String_dtor
_021E84D6:
ldr r0, [sp, #0xc]
add r7, r7, #4
add r0, r0, #4
str r0, [sp, #0xc]
ldr r0, [sp, #0x10]
add r0, r0, #1
str r0, [sp, #0x10]
cmp r0, #5
blo _021E8460
add sp, #0x18
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
_021E84EC: .word UNK05_021F78D4
_021E84F0: .word UNK05_021F78C4
thumb_func_start MOD05_021E84F4
MOD05_021E84F4: ; 0x021E84F4
push {r3, r4, lr}
sub sp, #0x14
add r4, r0, #0
ldr r0, [r4, #4]
mov r1, #0x10
bl AllocFromHeap
str r0, [r4, #0x10]
mov r3, #1
str r3, [sp]
ldr r0, [r4, #0x2c]
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #4]
ldr r0, [r4, #0x30]
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #8]
mov r0, #0xd
str r0, [sp, #0xc]
ldr r0, _021E8564 ; =0x0000027F
str r0, [sp, #0x10]
ldrb r2, [r4, #8]
ldr r0, [r4, #0xc]
ldr r1, [r4, #0x10]
bl FUN_02019064
mov r0, #0
str r0, [sp]
ldr r0, [r4, #4]
ldr r2, _021E8568 ; =0x000003D9
str r0, [sp, #4]
ldrb r1, [r4, #8]
ldr r0, [r4, #0xc]
mov r3, #0xb
bl FUN_0200CB00
mov r0, #0
mov r1, #6
bl FUN_02002E4C
add r1, r0, #0
ldr r0, [r4, #0x10]
bl FUN_02019620
add r0, r4, #0
bl MOD05_021E8410
ldr r0, [r4, #0x10]
ldr r2, _021E8568 ; =0x000003D9
mov r1, #0
mov r3, #0xb
bl FUN_0200CCA4
add sp, #0x14
pop {r3, r4, pc}
.balign 4, 0
_021E8564: .word 0x0000027F
_021E8568: .word 0x000003D9
thumb_func_start MOD05_021E856C
MOD05_021E856C: ; 0x021E856C
push {r4, lr}
add r4, r0, #0
ldr r0, [r4, #0x10]
mov r1, #0
bl FUN_0200CCF8
ldr r0, [r4, #0x10]
bl FUN_02019178
ldr r0, [r4, #0x10]
bl FreeToHeap
pop {r4, pc}
.balign 4, 0
thumb_func_start MOD05_021E8588
MOD05_021E8588: ; 0x021E8588
push {r3, r4, r5, r6, r7, lr}
add r5, r1, #0
add r6, r0, #0
add r0, r5, #0
mov r1, #0x34
add r7, r2, #0
bl AllocFromHeap
add r4, r0, #0
str r6, [r4]
str r5, [r4, #4]
strb r7, [r4, #8]
ldr r0, [r6, #8]
str r0, [r4, #0xc]
add r0, r5, #0
bl ScrStrBufs_new
str r0, [r4, #0x14]
ldr r2, _021E85E0 ; =0x000001E3
mov r0, #1
mov r1, #0x1a
add r3, r5, #0
bl NewMsgDataFromNarc
str r0, [r4, #0x18]
add r0, r4, #0
ldr r1, [r4]
add r0, #0x1c
bl MOD05_021E8310
add r1, r4, #0
ldr r0, [r4, #0x14]
add r1, #0x1c
bl MOD05_021E835C
mov r0, #0xd
str r0, [r4, #0x2c]
add r0, r4, #0
add r0, #0x1c
bl MOD05_021E8400
str r0, [r4, #0x30]
add r0, r4, #0
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
_021E85E0: .word 0x000001E3
thumb_func_start MOD05_021E85E4
MOD05_021E85E4: ; 0x021E85E4
push {r4, lr}
add r4, r0, #0
ldr r0, [r4, #0x18]
bl DestroyMsgData
ldr r0, [r4, #0x14]
bl ScrStrBufs_delete
add r0, r4, #0
bl FreeToHeap
pop {r4, pc}
thumb_func_start MOD05_021E85FC
MOD05_021E85FC: ; 0x021E85FC
push {r4, lr}
add r4, r0, #0
bl FUN_02034E48
add r0, r4, #0
mov r1, #4
mov r2, #0
bl MOD05_021EFA9C
ldr r0, [r4, #0x38]
bl FUN_02055320
ldr r1, [r4, #0x1c]
str r0, [r1, #8]
ldr r0, [r4, #0x38]
bl FUN_0205532C
ldr r1, [r4, #0x1c]
str r0, [r1, #0xc]
mov r1, #0
ldr r0, [r4, #0x1c]
mvn r1, r1
str r1, [r0, #4]
ldr r0, [r4, #0x38]
bl FUN_020552F8
ldr r1, [r4, #0x1c]
str r0, [r1, #0x10]
ldr r0, [r4, #0xc]
bl FUN_02022720
cmp r0, #2
bne _021E8642
mov r0, #1
pop {r4, pc}
_021E8642:
mov r0, #0
pop {r4, pc}
.balign 4, 0
.section .rodata
.global UNK05_021F78C4
UNK05_021F78C4: ; 0x021F78C4
.word 0x00000006, 0x00000007, 0x00000008, 0x00000000
.global UNK05_021F78D4
UNK05_021F78D4: ; 0x021F78D4
.word 0x00000001, 0x00000002, 0x00000003, 0x00000004
File diff suppressed because it is too large Load Diff
+23
View File
@@ -0,0 +1,23 @@
#ifndef POKEDIAMOND_MOD05_021E72FC_H
#define POKEDIAMOND_MOD05_021E72FC_H
#include "nitro/types.h"
typedef struct UnkStruct021E7358
{
u32 Unk00;
u32 Unk04;
u32 Unk08;
u32 Unk0C;
u32 Unk10;
} UnkStruct021E7358;
BOOL MOD05_021E72FC(u32 param0, u32 param1);
void MOD05_021E7358(u32 param0, u32 param1, u32 param2);
u32 MOD05_021E7388(u32 param0);
BOOL MOD05_021E73B4(UnkStruct021E7358 *param0);
UnkStruct021E7358 *MOD05_021E74D4(u32 param0);
void MOD05_021E74F8(UnkStruct021E7358 *param0);
#endif //POKEDIAMOND_MOD05_021E72FC_H
+160
View File
@@ -0,0 +1,160 @@
#include "global.h"
#include "mod05_021E72FC.h"
#include "heap.h"
extern void FUN_020054C8(u32 param0);
extern void FUN_020463CC(u32 param0, void *func, UnkStruct021E7358 *param2);
extern u32 FUN_020553A0(u32 param0);
extern u32 FUN_02058720(u32 param0);
extern BOOL FUN_02054B30(u8 param0);
extern BOOL FUN_02054B3C(u8 param0);
extern BOOL FUN_02054B48(u8 param0);
extern BOOL FUN_02054B54(u8 param0);
extern UnkStruct021E7358 *FUN_0204652C(UnkStruct021E7358 *param0);
extern void FUN_02058410(u32 param0, u32 param1);
extern BOOL FUN_02057254(u32 param0);
extern u32 FUN_0205AFDC(u32 param0, u32 param1);
extern void FUN_02057260(u32 param0, u32 param1);
extern void FUN_02055304(u32 param0, u32 param1);
extern BOOL FUN_02056B74(u32 param0, u32 param1, u32 param2);
extern void FUN_02058418(u32 param0, u32 param1);
extern void FUN_020054F0(u32 param0, u32 param1);
extern void FUN_02016A8C(u32 param0, void *param1);
THUMB_FUNC BOOL MOD05_021E72FC(u32 param0, u32 param1)
{
u8 res = (u8)FUN_02058720(FUN_020553A0(param1));
u32 r2;
if (FUN_02054B30(res) == TRUE)
{
r2 = 3;
goto label;
}
else if (FUN_02054B3C(res) == TRUE)
{
r2 = 2;
goto label;
}
else if (FUN_02054B48(res) == TRUE)
{
r2 = 0;
goto label;
}
else if (FUN_02054B54(res) == TRUE)
{
r2 = 1;
goto label;
}
return FALSE;
label:
MOD05_021E7358(param0, param1, r2);
return TRUE;
}
THUMB_FUNC void MOD05_021E7358(u32 param0, u32 param1, u32 param2)
{
UnkStruct021E7358 *res = MOD05_021E74D4(24);
res->Unk0C = param0;
res->Unk10 = param1;
res->Unk00 = param2;
FUN_020054C8(1624);
FUN_020463CC(param0, MOD05_021E73B4, res);
}
THUMB_FUNC u32 MOD05_021E7388(u32 param0)
{
switch (param0)
{
case 0:
return 2;
case 2:
return 1;
case 1:
return 3;
case 3:
return 0;
}
return 0;
}
THUMB_FUNC BOOL MOD05_021E73B4(UnkStruct021E7358 *param0)
{
UnkStruct021E7358 *strct = FUN_0204652C(param0);
u32 res = FUN_020553A0(strct->Unk10);
u8 res2 = (u8)FUN_02058720(res);
switch (strct->Unk08)
{
case 0:
FUN_02058410(res, 1 << 8);
strct->Unk08++;
break;
case 1:
if (!FUN_02057254(strct->Unk10))
{
break;
}
FUN_02057260(strct->Unk10, FUN_0205AFDC(strct->Unk00, 12));
FUN_02055304(strct->Unk10, strct->Unk00);
strct->Unk08++;
strct->Unk04 = 7;
break;
case 2:
if (strct->Unk04 == 2 || strct->Unk04 == 4 || strct->Unk04 == 6)
{
strct->Unk00 = MOD05_021E7388(strct->Unk00);
FUN_02055304(strct->Unk10, strct->Unk00);
}
if (--(strct->Unk04))
{
break;
}
if (FUN_02054B30(res2) == TRUE)
{
strct->Unk00 = 3;
}
else if (FUN_02054B3C(res2) == TRUE)
{
strct->Unk00 = 2;
}
else if (FUN_02054B48(res2) == TRUE)
{
strct->Unk00 = 0;
}
else if (FUN_02054B54(res2) == TRUE)
{
strct->Unk00 = 1;
}
else
{
strct->Unk00 = MOD05_021E7388(strct->Unk00);
}
if (FUN_02056B74(strct->Unk10, res, strct->Unk00) == FALSE)
{
strct->Unk08 = 1;
break;
}
FUN_02058418(res, 0x80);
FUN_02058418(res, 1 << 8);
FUN_02055304(strct->Unk10, strct->Unk00);
MOD05_021E74F8(strct);
FUN_020054F0(1624, 0);
return TRUE;
}
return FALSE;
}
THUMB_FUNC UnkStruct021E7358 *MOD05_021E74D4(u32 param0)
{
UnkStruct021E7358 *res = (UnkStruct021E7358 *)AllocFromHeapAtEnd(4, param0);
if (res == NULL)
{
ErrorHandling();
}
memset((void *)res, 0, param0);
return res;
}
THUMB_FUNC void MOD05_021E74F8(UnkStruct021E7358 *param0)
{
FUN_02016A8C(4, param0);
}
+10 -10
View File
@@ -8929,7 +8929,7 @@ _0223DA3E:
mov r0, #0x85
lsl r0, r0, #2
ldr r0, [r4, r0]
bl FUN_02025084
bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -10293,7 +10293,7 @@ _0223E5FE:
ldr r0, [r4]
ldr r1, _0223E618 ; =0x0224F348
mov r2, #0x1f
bl FUN_02002198
bl Std_CreateYesNoMenu
add r4, #0x80
str r0, [r4]
mov r0, #8
@@ -12384,7 +12384,7 @@ MOD06_0223F720: ; 0x0223F720
ldr r0, [r0, #0x68]
mov r3, #0xb
ldr r0, [r0, #8]
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x60]
ldr r0, _0223F76C ; =MOD06_0223F770
bl MOD06_0223F8BC
@@ -13438,7 +13438,7 @@ MOD06_0223FFD4: ; 0x0223FFD4
ldr r0, [r0, #0x68]
mov r3, #0xb
ldr r0, [r0, #8]
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x60]
ldr r0, _0224002C ; =MOD06_02240030
bl MOD06_0223F8BC
@@ -13698,7 +13698,7 @@ MOD06_02240204: ; 0x02240204
ldr r0, [r0, #0x68]
mov r3, #0xb
ldr r0, [r0, #8]
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x60]
ldr r0, _02240254 ; =MOD06_02240258
bl MOD06_0223F8BC
@@ -13821,7 +13821,7 @@ MOD06_02240310: ; 0x02240310
ldr r0, [r0, #0x68]
mov r3, #0xb
ldr r0, [r0, #8]
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x60]
ldr r0, _02240360 ; =MOD06_0223FD08
bl MOD06_0223F8BC
@@ -19372,7 +19372,7 @@ _02242FA6:
ldr r0, [r0, #8]
ldr r2, _02242FE8 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x64]
add r0, r4, #0
mov r1, #0x24
@@ -41696,12 +41696,12 @@ MOD06_0224DBA8: ; 0x0224DBA8
ldr r0, [r5, #8]
bl Sav2_PlayerData_GetOptionsAddr
add r4, r0, #0
bl FUN_02025084
bl Options_GetFrame
mov r1, #0x53
lsl r1, r1, #2
str r0, [r5, r1]
add r0, r4, #0
bl FUN_02024FF4
bl Options_GetTextFrameDelay
mov r1, #0x15
lsl r1, r1, #4
str r0, [r5, r1]
@@ -42800,7 +42800,7 @@ MOD06_0224E470: ; 0x0224E470
mov r2, #0x1f
mov r3, #0xb
str r4, [sp]
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r5, #4]
str r4, [r5, #8]
mov r0, #1
+7 -7
View File
@@ -120,7 +120,7 @@ _0222F30E:
mov r0, #0x13
lsl r0, r0, #4
ldr r0, [r4, r0]
bl FUN_02025084
bl Options_GetFrame
add r4, r0, #0
lsl r0, r4, #0x18
lsr r0, r0, #0x18
@@ -3600,7 +3600,7 @@ _02230E2E:
mov r1, #0x6d
lsl r1, r1, #2
ldr r0, [r0, r1]
bl FUN_0202502C
bl Options_GetBattleScene
cmp r0, #0
bne _02230E40
mov r0, #1
@@ -3613,11 +3613,11 @@ _02230E40:
MOD11_02230E44: ; 0x02230E44
mov r1, #0x6d
lsl r1, r1, #2
ldr r3, _02230E50 ; =FUN_02025084
ldr r3, _02230E50 ; =Options_GetFrame
ldr r0, [r0, r1]
bx r3
nop
_02230E50: .word FUN_02025084
_02230E50: .word Options_GetFrame
thumb_func_start MOD11_02230E54
MOD11_02230E54: ; 0x02230E54
@@ -3632,7 +3632,7 @@ _02230E62:
mov r1, #0x6d
lsl r1, r1, #2
ldr r0, [r0, r1]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
pop {r3, pc}
.align 2, 0
@@ -3640,11 +3640,11 @@ _02230E62:
MOD11_02230E70: ; 0x02230E70
mov r1, #0x6d
lsl r1, r1, #2
ldr r3, _02230E7C ; =FUN_02025048
ldr r3, _02230E7C ; =Options_GetBattleStyle
ldr r0, [r0, r1]
bx r3
nop
_02230E7C: .word FUN_02025048
_02230E7C: .word Options_GetBattleStyle
thumb_func_start MOD11_02230E80
MOD11_02230E80: ; 0x02230E80
+8 -8
View File
@@ -4224,7 +4224,7 @@ MOD12_0222F834: ; 0x0222F834
ldr r1, [r5]
ldr r0, _0222F930 ; =0x00001988
ldr r0, [r1, r0]
bl FUN_02025084
bl Options_GetFrame
add r4, r0, #0
lsl r0, r4, #0x18
lsr r0, r0, #0x18
@@ -6224,7 +6224,7 @@ MOD12_022308F0: ; 0x022308F0
ldr r1, [r5]
ldr r0, _022309C4 ; =0x00001988
ldr r0, [r1, r0]
bl FUN_02025084
bl Options_GetFrame
add r4, r0, #0
lsl r0, r4, #0x18
lsr r0, r0, #0x18
@@ -15253,7 +15253,7 @@ _02234F2A:
bne _02234F40
ldr r0, _02234FAC ; =0x00001988
ldr r0, [r1, r0]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
add r4, r0, #0
b _02234F42
_02234F40:
@@ -25497,7 +25497,7 @@ MOD12_02239AD0: ; 0x02239AD0
bne _02239AF2
ldr r0, _02239B44 ; =0x00001988
ldr r0, [r1, r0]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
add r4, r0, #0
b _02239AF4
_02239AF2:
@@ -34742,7 +34742,7 @@ MOD12_0223E1EC: ; 0x0223E1EC
bne _0223E20E
ldr r0, _0223E26C ; =0x00001988
ldr r0, [r1, r0]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
add r4, r0, #0
b _0223E210
_0223E20E:
@@ -43529,7 +43529,7 @@ MOD12_022425F4: ; 0x022425F4
bne _02242616
ldr r0, _02242674 ; =0x00001988
ldr r0, [r1, r0]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
add r4, r0, #0
b _02242618
_02242616:
@@ -43673,7 +43673,7 @@ MOD12_022426BC: ; 0x022426BC
ldr r1, [r5]
ldr r0, _02242784 ; =0x00001988
ldr r0, [r1, r0]
bl FUN_02025084
bl Options_GetFrame
add r4, r0, #0
lsl r0, r4, #0x18
lsr r0, r0, #0x18
@@ -43843,7 +43843,7 @@ MOD12_02242804: ; 0x02242804
ldr r1, [r6]
ldr r0, _022429D0 ; =0x00001988
ldr r0, [r1, r0]
bl FUN_02025084
bl Options_GetFrame
add r4, r0, #0
lsl r0, r4, #0x18
lsr r0, r0, #0x18
+2 -2
View File
@@ -9849,11 +9849,11 @@ MOD14_021DC3AC: ; 0x021DC3AC
MOD14_021DC3B4: ; 0x021DC3B4
mov r1, #0x69
lsl r1, r1, #2
ldr r3, _021DC3C0 ; =FUN_02025084
ldr r3, _021DC3C0 ; =Options_GetFrame
ldr r0, [r0, r1]
bx r3
nop
_021DC3C0: .word FUN_02025084
_021DC3C0: .word Options_GetFrame
thumb_func_start MOD14_021DC3C4
MOD14_021DC3C4: ; 0x021DC3C4
+5 -5
View File
@@ -4666,7 +4666,7 @@ MOD17_021D9918: ; 0x021D9918
ldr r0, [r5, r0]
add r7, r2, #0
add r4, r3, #0
bl FUN_02025084
bl Options_GetFrame
add r6, r0, #0
mov r0, #0
mov r1, #0xe0
@@ -4847,7 +4847,7 @@ _021D9A7E:
bne _021D9ACE
add r0, r0, #4
ldr r0, [r5, r0]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
b _021D9AD0
_021D9ACE:
mov r0, #1
@@ -11480,12 +11480,12 @@ _021DCA42:
ldr r1, [r4, #0xc]
bl MOD17_021DCC38
ldr r0, [r4, #0xc]
bl FUN_02025084
bl Options_GetFrame
mov r1, #0x4f
lsl r1, r1, #2
str r0, [r5, r1]
ldr r0, [r4, #0xc]
bl FUN_02024FF4
bl Options_GetTextFrameDelay
mov r1, #5
lsl r1, r1, #6
str r0, [r5, r1]
@@ -11760,7 +11760,7 @@ MOD17_021DCC38: ; 0x021DCC38
sub sp, #8
add r4, r0, #0
add r0, r1, #0
bl FUN_02025084
bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
+15 -15
View File
@@ -1223,7 +1223,7 @@ MOD18_02239F98: ; 0x02239F98
ldr r0, [r0]
mov r3, #0xb
ldr r0, [r0, #8]
bl FUN_02002198
bl Std_CreateYesNoMenu
ldr r2, _0223A044 ; =0x02251380
ldr r1, _0223A050 ; =0x000007E4
ldr r3, [r2]
@@ -7963,7 +7963,7 @@ MOD18_0223D414: ; 0x0223D414
add r6, r0, #0
ldr r0, [r5, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
bl FUN_02024FF4
bl Options_GetTextFrameDelay
add r4, r0, #0
ldr r0, _0223D580 ; =0x02251388
mov r2, #0x15
@@ -25227,7 +25227,7 @@ _02245898:
ldr r1, _022459E0 ; =0x022504F8
ldr r2, _022459E4 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #4]
mov r0, #2
str r0, [r4, #0xc]
@@ -25262,7 +25262,7 @@ _022458D4:
ldr r1, _022459E0 ; =0x022504F8
ldr r2, _022459E4 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #4]
mov r0, #4
str r0, [r4, #0xc]
@@ -25302,7 +25302,7 @@ _0224592A:
ldr r1, _022459E0 ; =0x022504F8
ldr r2, _022459E4 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #4]
mov r0, #6
str r0, [r4, #0xc]
@@ -25669,7 +25669,7 @@ _02245C14:
ldr r1, _02245E08 ; =0x022504F8
ldr r2, _02245E0C ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #4]
mov r0, #2
str r0, [r4, #0xc]
@@ -25715,7 +25715,7 @@ _02245C7C:
ldr r1, _02245E08 ; =0x022504F8
ldr r2, _02245E0C ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #4]
mov r0, #5
str r0, [r4, #0xc]
@@ -27379,7 +27379,7 @@ _022469E0:
ldr r1, _02246AD8 ; =0x022504F8
ldr r2, _02246ADC ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #8]
mov r0, #6
str r0, [r4, #0xc]
@@ -30583,7 +30583,7 @@ _0224830C:
ldr r0, [r0, #8]
ldr r2, _022484D4 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x24]
add r0, r4, #0
mov r1, #0x14
@@ -31535,7 +31535,7 @@ _02248AAE:
ldr r0, [r0, #8]
ldr r2, _02248D94 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x20]
b _02248DB6
_02248AD8:
@@ -31664,7 +31664,7 @@ _02248BC2:
ldr r0, [r0, #8]
ldr r2, _02248D94 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x20]
b _02248DB6
_02248BEC:
@@ -35073,7 +35073,7 @@ MOD18_0224A710: ; 0x0224A710
ldr r0, [r0, #8]
ldr r2, _0224A744 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x5c]
ldr r0, _0224A748 ; =0x00000246
mov r1, #0xc
@@ -35224,7 +35224,7 @@ MOD18_0224A844: ; 0x0224A844
ldr r0, [r0, #8]
ldr r2, _0224A878 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x5c]
ldr r0, _0224A87C ; =0x00000246
mov r1, #1
@@ -37895,7 +37895,7 @@ _0224BE0A:
ldr r0, [r0, #8]
ldr r2, _0224BE80 ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #8]
mov r0, #1
str r0, [r4]
@@ -40208,7 +40208,7 @@ _0224D0DA:
ldr r0, [r0, #8]
ldr r2, _0224D1EC ; =0x000003D9
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
str r0, [r4, #0x5c]
ldr r0, _0224D1D8 ; =0x00000246
mov r1, #0xe
-733
View File
@@ -1,733 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
.balign 4, 0
thumb_func_start MOD21_02254854
MOD21_02254854: ; 0x02254854
push {r3, r4, r5, r6, r7, lr}
add r5, r0, #0
add r6, r1, #0
mov r0, #8
mov r1, #0x2c
add r7, r2, #0
str r3, [sp]
bl AllocFromHeap
add r4, r0, #0
beq _02254892
ldr r3, [sp]
add r1, r6, #0
add r2, r7, #0
bl MOD21_0225489C
cmp r0, #0
beq _0225488C
ldr r0, _02254898 ; =MOD21_02254930
add r1, r4, #0
mov r2, #1
bl FUN_0200CA44
cmp r0, #0
beq _0225488C
str r4, [r5]
mov r0, #1
pop {r3, r4, r5, r6, r7, pc}
_0225488C:
add r0, r4, #0
bl FreeToHeap
_02254892:
mov r0, #0
pop {r3, r4, r5, r6, r7, pc}
nop
_02254898: .word MOD21_02254930
thumb_func_end MOD21_02254854
thumb_func_start MOD21_0225489C
MOD21_0225489C: ; 0x0225489C
push {r3, r4, r5, lr}
add r5, r0, #0
add r4, r1, #0
add r1, r5, #0
add r0, #0x24
add r1, #0x14
bl MOD21_02254A6C
cmp r0, #0
beq _0225490A
mov r1, #0
strb r1, [r5]
strb r1, [r5, #1]
strb r1, [r5, #2]
mov r0, #1
strb r0, [r5, #3]
strb r1, [r5, #6]
add r0, r5, #0
str r1, [r5, #0x20]
add r0, #0x14
bl GF_RTC_CopyTime
ldr r0, [r5, #0x14]
cmp r0, #0x18
blo _022548D6
mov r1, #0x18
bl _u32_div_f
str r1, [r5, #0x14]
_022548D6:
ldr r0, [r5, #0x18]
cmp r0, #0x3c
blo _022548E6
ldr r0, [r5, #0x14]
mov r1, #0x3c
bl _u32_div_f
str r1, [r5, #0x14]
_022548E6:
ldr r0, [r5, #0x18]
ldr r2, _02254910 ; =MOD21_02254974
strb r0, [r5, #5]
mov r0, #8
str r0, [sp]
ldr r0, _02254914 ; =MOD21_02254D80
mov r1, #1
add r3, r5, #0
bl MOD20_02254130
str r0, [r5, #0x10]
cmp r0, #0
bne _02254904
mov r0, #0
pop {r3, r4, r5, pc}
_02254904:
str r4, [r5, #0x28]
mov r0, #1
pop {r3, r4, r5, pc}
_0225490A:
mov r0, #0
pop {r3, r4, r5, pc}
nop
_02254910: .word MOD21_02254974
_02254914: .word MOD21_02254D80
thumb_func_end MOD21_0225489C
thumb_func_start MOD21_02254918
MOD21_02254918: ; 0x02254918
push {r4, lr}
add r4, r0, #0
ldr r0, [r4, #0x24]
bl MOD21_02254B04
ldr r0, [r4, #0x10]
bl MOD20_02254198
add r0, r4, #0
bl FreeToHeap
pop {r4, pc}
thumb_func_end MOD21_02254918
thumb_func_start MOD21_02254930
MOD21_02254930: ; 0x02254930
push {r3, r4, r5, lr}
add r4, r1, #0
add r5, r0, #0
ldrb r0, [r4]
cmp r0, #3
bhs _02254966
ldr r0, [r4, #0x28]
ldr r1, [r4, #0x10]
bl MOD20_02252C14
ldrb r1, [r4]
add r0, r4, #0
lsl r2, r1, #2
ldr r1, _02254968 ; =MOD21_02254D84
ldr r1, [r1, r2]
blx r1
cmp r0, #0
beq _02254966
add r0, r4, #0
bl MOD21_02254918
add r0, r5, #0
bl FUN_0200CAB4
ldr r0, [r4, #0x28]
bl MOD20_022529A0
_02254966:
pop {r3, r4, r5, pc}
.align 2, 0
_02254968: .word MOD21_02254D84
thumb_func_end MOD21_02254930
thumb_func_start MOD21_0225496C
MOD21_0225496C: ; 0x0225496C
mov r1, #1
strb r1, [r0, #2]
bx lr
.align 2, 0
thumb_func_end MOD21_0225496C
thumb_func_start MOD21_02254974
MOD21_02254974: ; 0x02254974
cmp r2, #0
beq _02254984
cmp r2, #1
bne _0225498C
mov r0, #1
str r0, [r3, #0x20]
strb r0, [r3, #6]
bx lr
_02254984:
mov r0, #0
str r0, [r3, #0x20]
mov r0, #1
strb r0, [r3, #6]
_0225498C:
bx lr
.align 2, 0
thumb_func_end MOD21_02254974
thumb_func_start MOD21_02254990
MOD21_02254990: ; 0x02254990
ldrb r2, [r0, #2]
cmp r2, #0
bne _02254998
b _0225499A
_02254998:
mov r1, #2
_0225499A:
strb r1, [r0]
mov r1, #0
strb r1, [r0, #1]
bx lr
.align 2, 0
thumb_func_end MOD21_02254990
thumb_func_start MOD21_022549A4
MOD21_022549A4: ; 0x022549A4
push {r4, lr}
add r4, r0, #0
ldrb r0, [r4, #1]
cmp r0, #0
beq _022549B4
cmp r0, #1
beq _022549C4
b _022549DE
_022549B4:
ldr r0, [r4, #0x24]
mov r1, #0
bl MOD21_02254B10
ldrb r0, [r4, #1]
add r0, r0, #1
strb r0, [r4, #1]
b _022549DE
_022549C4:
ldr r0, [r4, #0x24]
mov r1, #0
bl MOD21_02254B34
cmp r0, #0
beq _022549DE
ldr r0, [r4, #0x28]
bl MOD20_0225298C
add r0, r4, #0
mov r1, #1
bl MOD21_02254990
_022549DE:
mov r0, #0
pop {r4, pc}
.align 2, 0
thumb_func_end MOD21_022549A4
thumb_func_start MOD21_022549E4
MOD21_022549E4: ; 0x022549E4
push {r4, lr}
add r4, r0, #0
ldrb r1, [r4, #2]
cmp r1, #0
beq _022549F8
mov r1, #2
bl MOD21_02254990
mov r0, #0
pop {r4, pc}
_022549F8:
ldrb r0, [r4, #6]
cmp r0, #0
beq _02254A0A
mov r0, #0
strb r0, [r4, #6]
ldr r0, [r4, #0x24]
mov r1, #2
bl MOD21_02254B10
_02254A0A:
ldr r0, [r4, #0x24]
mov r1, #1
bl MOD21_02254B34
cmp r0, #0
beq _02254A32
ldr r0, [r4, #0x18]
strb r0, [r4, #5]
add r0, r4, #0
add r0, #0x14
bl GF_RTC_CopyTime
ldrb r1, [r4, #5]
ldr r0, [r4, #0x18]
cmp r1, r0
beq _02254A32
ldr r0, [r4, #0x24]
mov r1, #1
bl MOD21_02254B10
_02254A32:
mov r0, #0
pop {r4, pc}
.align 2, 0
thumb_func_end MOD21_022549E4
thumb_func_start MOD21_02254A38
MOD21_02254A38: ; 0x02254A38
push {r4, lr}
add r4, r0, #0
ldrb r0, [r4, #1]
cmp r0, #0
beq _02254A48
cmp r0, #1
beq _02254A58
b _02254A66
_02254A48:
ldr r0, [r4, #0x24]
mov r1, #3
bl MOD21_02254B10
ldrb r0, [r4, #1]
add r0, r0, #1
strb r0, [r4, #1]
b _02254A66
_02254A58:
ldr r0, [r4, #0x24]
bl MOD21_02254B40
cmp r0, #0
beq _02254A66
mov r0, #1
pop {r4, pc}
_02254A66:
mov r0, #0
pop {r4, pc}
.align 2, 0
thumb_func_end MOD21_02254A38
thumb_func_start MOD21_02254A6C
MOD21_02254A6C: ; 0x02254A6C
push {r4, r5, r6, lr}
sub sp, #8
add r6, r1, #0
mov r1, #3
add r5, r0, #0
mov r0, #8
lsl r1, r1, #8
bl AllocFromHeap
add r4, r0, #0
beq _02254ACC
add r0, #8
mov r1, #8
bl MOD20_022536F4
str r6, [r4]
bl MOD20_02252D34
str r0, [r4, #4]
mov r0, #8
str r0, [sp]
mov r0, #0xc
mov r1, #0x19
mov r2, #1
add r3, sp, #4
bl FUN_02006BDC
add r6, r0, #0
bne _02254AB2
add r0, r4, #0
bl FreeToHeap
add sp, #8
mov r0, #0
pop {r4, r5, r6, pc}
_02254AB2:
ldr r0, [sp, #4]
add r1, r4, #0
add r0, #0xc
add r1, #0x30
bl MOD21_02254AD4
add r0, r6, #0
bl FreeToHeap
add sp, #8
str r4, [r5]
mov r0, #1
pop {r4, r5, r6, pc}
_02254ACC:
mov r0, #0
add sp, #8
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_end MOD21_02254A6C
thumb_func_start MOD21_02254AD4
MOD21_02254AD4: ; 0x02254AD4
push {r3, r4, r5, r6, r7, lr}
mov r6, #9
add r5, r0, #0
add r4, r1, #0
mov r7, #0
lsl r6, r6, #6
_02254AE0:
add r0, r5, #0
add r1, r4, #0
mov r2, #0x40
bl MIi_CpuCopy16
add r1, r4, #0
add r0, r5, r6
add r1, #0x40
mov r2, #0x10
bl MIi_CpuCopy16
add r7, r7, #1
add r5, #0x40
add r4, #0x50
sub r6, #0x30
cmp r7, #9
blt _02254AE0
pop {r3, r4, r5, r6, r7, pc}
thumb_func_end MOD21_02254AD4
thumb_func_start MOD21_02254B04
MOD21_02254B04: ; 0x02254B04
push {r3, lr}
cmp r0, #0
beq _02254B0E
bl FreeToHeap
_02254B0E:
pop {r3, pc}
thumb_func_end MOD21_02254B04
thumb_func_start MOD21_02254B10
MOD21_02254B10: ; 0x02254B10
push {lr}
sub sp, #0xc
add r2, r0, #0
add r0, #8
str r0, [sp]
mov r0, #2
str r0, [sp, #4]
mov r0, #8
str r0, [sp, #8]
ldr r0, _02254B30 ; =MOD21_02254DAC
ldr r3, [r2]
bl MOD20_022537E0
add sp, #0xc
pop {pc}
nop
_02254B30: .word MOD21_02254DAC
thumb_func_end MOD21_02254B10
thumb_func_start MOD21_02254B34
MOD21_02254B34: ; 0x02254B34
ldr r3, _02254B3C ; =MOD20_02253794
add r0, #8
bx r3
nop
_02254B3C: .word MOD20_02253794
thumb_func_end MOD21_02254B34
thumb_func_start MOD21_02254B40
MOD21_02254B40: ; 0x02254B40
ldr r3, _02254B48 ; =MOD20_022537B8
add r0, #8
bx r3
nop
_02254B48: .word MOD20_022537B8
thumb_func_end MOD21_02254B40
thumb_func_start MOD21_02254B4C
MOD21_02254B4C: ; 0x02254B4C
push {r4, lr}
add r4, r0, #0
bl MOD20_022538A0
add r0, #8
add r1, r4, #0
bl MOD20_02253888
pop {r4, pc}
.align 2, 0
thumb_func_end MOD21_02254B4C
thumb_func_start MOD21_02254B60
MOD21_02254B60: ; 0x02254B60
push {r4, r5, lr}
sub sp, #0x14
add r4, r1, #0
add r0, r4, #0
bl MOD20_022538A0
add r5, r0, #0
ldr r0, [r5, #4]
ldr r2, _02254BE8 ; =MOD21_02254D90
mov r1, #6
mov r3, #0
bl FUN_02016C18
mov r0, #0
str r0, [sp]
str r0, [sp, #4]
mov r0, #1
str r0, [sp, #8]
mov r0, #8
str r0, [sp, #0xc]
ldr r2, [r5, #4]
mov r0, #0xc
mov r1, #0x17
mov r3, #6
bl FUN_0200687C
mov r0, #0
str r0, [sp]
str r0, [sp, #4]
mov r0, #1
str r0, [sp, #8]
mov r0, #8
str r0, [sp, #0xc]
ldr r2, [r5, #4]
mov r0, #0xc
mov r1, #0x18
mov r3, #6
bl FUN_020068C8
mov r0, #0
add r1, r0, #0
bl MOD20_02252D7C
add r0, r5, #0
bl MOD21_02254C5C
ldr r0, [r5, #4]
mov r1, #6
bl FUN_02017CD0
ldr r1, _02254BEC ; =0x04001000
ldr r0, _02254BF0 ; =0xFFFFE0FF
ldr r3, [r1]
ldr r2, [r1]
str r3, [sp, #0x10]
and r0, r2
lsl r2, r3, #0x13
lsr r3, r2, #0x1b
mov r2, #4
orr r2, r3
lsl r2, r2, #8
orr r0, r2
str r0, [r1]
add r0, r4, #0
bl MOD21_02254B4C
add sp, #0x14
pop {r4, r5, pc}
.align 2, 0
_02254BE8: .word MOD21_02254D90
_02254BEC: .word 0x04001000
_02254BF0: .word 0xFFFFE0FF
thumb_func_end MOD21_02254B60
thumb_func_start MOD21_02254BF4
MOD21_02254BF4: ; 0x02254BF4
push {r3, r4, r5, lr}
add r5, r1, #0
add r0, r5, #0
bl MOD20_022538A0
add r4, r0, #0
bl MOD21_02254C5C
ldr r0, [r4, #4]
mov r1, #6
bl FUN_02017CD0
add r0, r5, #0
bl MOD21_02254B4C
pop {r3, r4, r5, pc}
thumb_func_end MOD21_02254BF4
thumb_func_start MOD21_02254C14
MOD21_02254C14: ; 0x02254C14
push {r4, lr}
add r4, r1, #0
add r0, r4, #0
bl MOD20_022538A0
ldr r0, [r0]
ldr r0, [r0, #0xc]
cmp r0, #0
beq _02254C30
mov r0, #0
add r1, r0, #0
bl MOD11_02252DB4
b _02254C38
_02254C30:
mov r0, #0
add r1, r0, #0
bl MOD20_02252D7C
_02254C38:
add r0, r4, #0
bl MOD21_02254B4C
pop {r4, pc}
thumb_func_end MOD21_02254C14
thumb_func_start MOD21_02254C40
MOD21_02254C40: ; 0x02254C40
push {r4, lr}
add r4, r1, #0
add r0, r4, #0
bl MOD20_022538A0
ldr r0, [r0, #4]
mov r1, #6
bl FUN_020178A0
add r0, r4, #0
bl MOD21_02254B4C
pop {r4, pc}
.align 2, 0
thumb_func_end MOD21_02254C40
thumb_func_start MOD21_02254C5C
MOD21_02254C5C: ; 0x02254C5C
push {r4, r5, lr}
sub sp, #0x1c
add r4, r0, #0
ldr r0, [r4]
ldr r2, _02254D74 ; =0x04000280
ldr r0, [r0]
mov r3, #0
strh r3, [r2]
str r0, [r2, #0x10]
add r0, r2, #0
mov r1, #0xa
add r0, #0x18
str r1, [r0]
str r3, [r0, #4]
lsr r0, r2, #0xb
_02254C7A:
ldrh r1, [r2]
tst r1, r0
bne _02254C7A
ldr r0, _02254D78 ; =0x040002A0
add r3, r0, #0
ldr r1, [r0]
sub r3, #0x20
lsr r0, r0, #0xb
_02254C8A:
ldrh r2, [r3]
tst r2, r0
bne _02254C8A
ldr r0, _02254D7C ; =0x040002A8
add r2, r4, #0
ldr r5, [r0]
mov r0, #4
str r0, [sp]
mov r0, #9
lsl r1, r1, #0x1a
str r0, [sp, #4]
add r2, #0x30
str r2, [sp, #8]
lsr r1, r1, #0x18
str r1, [sp, #0xc]
mov r1, #0
str r1, [sp, #0x10]
mov r1, #0x28
str r1, [sp, #0x14]
str r0, [sp, #0x18]
ldr r0, [r4, #4]
mov r1, #6
mov r2, #3
mov r3, #7
bl FUN_02018170
mov r0, #4
str r0, [sp]
mov r0, #9
add r1, r4, #0
str r0, [sp, #4]
add r1, #0x30
str r1, [sp, #8]
lsl r1, r5, #0x1a
lsr r1, r1, #0x18
str r1, [sp, #0xc]
mov r1, #0
str r1, [sp, #0x10]
mov r1, #0x28
str r1, [sp, #0x14]
str r0, [sp, #0x18]
ldr r0, [r4, #4]
mov r1, #6
mov r2, #8
mov r3, #7
bl FUN_02018170
ldr r0, [r4]
ldr r2, _02254D74 ; =0x04000280
ldr r0, [r0, #4]
mov r3, #0
strh r3, [r2]
str r0, [r2, #0x10]
add r0, r2, #0
mov r1, #0xa
add r0, #0x18
str r1, [r0]
str r3, [r0, #4]
lsr r0, r2, #0xb
_02254D00:
ldrh r1, [r2]
tst r1, r0
bne _02254D00
ldr r0, _02254D78 ; =0x040002A0
add r3, r0, #0
ldr r1, [r0]
sub r3, #0x20
lsr r0, r0, #0xb
_02254D10:
ldrh r2, [r3]
tst r2, r0
bne _02254D10
ldr r0, _02254D7C ; =0x040002A8
add r2, r4, #0
ldr r5, [r0]
mov r0, #4
str r0, [sp]
mov r0, #9
lsl r1, r1, #0x1a
str r0, [sp, #4]
add r2, #0x30
str r2, [sp, #8]
lsr r1, r1, #0x18
str r1, [sp, #0xc]
mov r1, #0
str r1, [sp, #0x10]
mov r1, #0x28
str r1, [sp, #0x14]
str r0, [sp, #0x18]
ldr r0, [r4, #4]
mov r1, #6
mov r2, #0xf
mov r3, #7
bl FUN_02018170
mov r0, #4
str r0, [sp]
mov r0, #9
add r1, r4, #0
str r0, [sp, #4]
add r1, #0x30
str r1, [sp, #8]
lsl r1, r5, #0x1a
lsr r1, r1, #0x18
str r1, [sp, #0xc]
mov r1, #0
str r1, [sp, #0x10]
mov r1, #0x28
str r1, [sp, #0x14]
str r0, [sp, #0x18]
ldr r0, [r4, #4]
mov r1, #6
mov r2, #0x14
mov r3, #7
bl FUN_02018170
add sp, #0x1c
pop {r4, r5, pc}
nop
_02254D74: .word 0x04000280
_02254D78: .word 0x040002A0
_02254D7C: .word 0x040002A8
thumb_func_end MOD21_02254C5C
.section .rodata
.global MOD21_02254D80
MOD21_02254D80: ; 0x02254D80
.byte 0x10, 0xAF, 0x10, 0xCF
.global MOD21_02254D84
MOD21_02254D84: ; 0x02254D84
.word MOD21_022549A4, MOD21_022549E4, MOD21_02254A38
.global MOD21_02254D90
MOD21_02254D90: ; 0x02254D90
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global MOD21_02254DAC
MOD21_02254DAC: ; 0x02254DAC
.word 0x00, MOD21_02254B60, 0x00
.word 0x01, MOD21_02254BF4, 0x00
.word 0x02, MOD21_02254C14, 0x00
.word 0x03, MOD21_02254C40, 0x00
.word 0x00, 0x00000000, 0x00
+36
View File
@@ -0,0 +1,36 @@
#ifndef POKEDIAMOND_MOD21_02254854_H
#define POKEDIAMOND_MOD21_02254854_H
#include "nitro/types.h"
#include "mod21_02254A6C.h"
typedef struct Time
{
u32 hour;
u32 minute;
} Time;
typedef struct UnkStruct02254854
{
u8 bytearray[8];
u8 padding0[8];
BOOL Unk10;
Time time;
u8 padding1[4];
u32 Unk20;
void *Unk24;
u32 Unk28;
} UnkStruct02254854;
BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3);
BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3);
void MOD21_02254918(UnkStruct02254854 *param0);
void MOD21_02254930(u32 param0, UnkStruct02254854 *param1);
void MOD21_0225496C(UnkStruct02254854 *param0);
void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3);
void MOD21_02254990(UnkStruct02254854 * param0, u8 param1);
BOOL MOD21_022549A4(UnkStruct02254854 * param0);
BOOL MOD21_022549E4(UnkStruct02254854 * param0);
BOOL MOD21_02254A38(UnkStruct02254854 * param0);
#endif //POKEDIAMOND_MOD21_02254854_H
+38
View File
@@ -0,0 +1,38 @@
#ifndef POKEDIAMOND_MOD21_02254A6C_H
#define POKEDIAMOND_MOD21_02254A6C_H
#include "nitro/types.h"
typedef struct UnkStruct02254A6C UnkStruct02254A6C;
struct UnkStruct02254A6C
{
UnkStruct02254A6C *Unk00;
u32 Unk04;
u32 Unk08[1];
u32 Unk0C;
u8 padding0[0x20];
u32 Unk30[1];
};
typedef struct UnkOverlayStruct1
{
u32 number;
BOOL (*func)(u32 param0, void *param1);
u32 Unk08;
} UnkOverlayStruct1; //todo should probably be in mod 20 header
BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1);
void MOD21_02254AD4(void *param0, void *param1);
void MOD21_02254B04(void *param0);
void MOD21_02254B10(u32 *param0, u32 param1);
BOOL MOD21_02254B34(void *param0, u32 param1);
BOOL MOD21_02254B40(void *param0);
BOOL MOD21_02254B4C(void *param0);
BOOL MOD21_02254B60(u32 param0, void *param1);
BOOL MOD21_02254BF4(u32 param0, void *param1);
BOOL MOD21_02254C14(u32 param0, void *param1);
BOOL MOD21_02254C40(u32 param0, void *param1);
void MOD21_02254C5C(UnkStruct02254A6C *param0);
#endif //POKEDIAMOND_MOD21_02254A6C_H
+199
View File
@@ -0,0 +1,199 @@
#include "global.h"
#include "heap.h"
#include "unk_0200CA44.h"
#include "mod21_02254854.h"
extern void GF_RTC_CopyTime(Time *param0);
u8 const MOD21_02254D80[] = { 0x10, 0xAF, 0x10, 0xCF };
extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4);
extern void MOD20_02252C14(u32 param0, BOOL param1);
extern void MOD20_02254198(BOOL param0);
extern void MOD20_022529A0(u32 param0);
extern void MOD20_0225298C(u32 param0);
extern void Poketch_InitApp(void *func1, void *func2);
THUMB_FUNC static void MOD21_02254840(void)
{
Poketch_InitApp(MOD21_02254854, MOD21_0225496C);
}
#define NitroStaticInit MOD21_02254840
#include "sinit.h"
THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3)
{
UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854));
if (alloced != NULL)
{
if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, void *))MOD21_02254930, alloced, (void *)1))
{
*param0 = alloced;
return TRUE;
}
FreeToHeap(alloced);
}
return FALSE;
}
THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3)
{
#pragma unused (param2, param3) //not sure, please check
if (MOD21_02254A6C((UnkStruct02254A6C *)&param0->Unk24, &param0->time)) //todo fix
{
param0->bytearray[0] = 0;
param0->bytearray[1] = 0;
param0->bytearray[2] = 0;
param0->bytearray[3] = 1;
param0->bytearray[6] = 0;
param0->Unk20 = 0;
GF_RTC_CopyTime(&param0->time);
if (param0->time.hour >= 0x18)
{
param0->time.hour = param0->time.hour % 0x18;
}
if (param0->time.minute >= 0x3c)
{
param0->time.hour = param0->time.hour % 0x3c;
}
param0->bytearray[5] = (u8)param0->time.minute;
param0->Unk10 = MOD20_02254130((void *)MOD21_02254D80, TRUE, MOD21_02254974, param0, 8);
if (param0->Unk10 == FALSE)
{
return FALSE;
}
param0->Unk28 = param1;
return TRUE;
}
return FALSE;
}
BOOL (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 };
THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0)
{
MOD21_02254B04(param0->Unk24);
MOD20_02254198(param0->Unk10);
FreeToHeap((void *)param0);
}
THUMB_FUNC void MOD21_02254930(u32 param0, UnkStruct02254854 *param1)
{
if (param1->bytearray[0] >= 3)
{
return;
}
MOD20_02252C14(param1->Unk28, param1->Unk10);
if (!MOD21_02254D84[param1->bytearray[0]](param1))
{
return;
}
MOD21_02254918(param1);
FUN_0200CAB4((s32)param0);
MOD20_022529A0(param1->Unk28);
}
THUMB_FUNC void MOD21_0225496C(UnkStruct02254854 *param0)
{
param0->bytearray[2] = 1;
}
THUMB_FUNC void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3)
{
#pragma unused (param0, param1)
switch (param2)
{
case 1:
param3->Unk20 = 1;
param3->bytearray[6] = 1;
return;
case 0:
param3->Unk20 = 0;
param3->bytearray[6] = 1;
return;
default:
return;
}
}
THUMB_FUNC void MOD21_02254990(UnkStruct02254854 * param0, u8 param1)
{
if (param0->bytearray[2] == 0)
{
param0->bytearray[0] = param1;
}
else
{
param0->bytearray[0] = 2;
}
param0->bytearray[1] = 0;
}
THUMB_FUNC BOOL MOD21_022549A4(UnkStruct02254854 * param0)
{
switch (param0->bytearray[1])
{
case 0:
MOD21_02254B10(param0->Unk24, 0);
param0->bytearray[1]++;
break;
case 1:
if (MOD21_02254B34(param0->Unk24, 0) == FALSE)
{
break;
}
MOD20_0225298C(param0->Unk28);
MOD21_02254990(param0, 1);
break;
default:
break;
}
return FALSE;
}
THUMB_FUNC BOOL MOD21_022549E4(UnkStruct02254854 * param0)
{
if (param0->bytearray[2])
{
MOD21_02254990(param0, 2);
return FALSE;
}
if (param0->bytearray[6])
{
param0->bytearray[6] = 0;
MOD21_02254B10(param0->Unk24, 2);
}
if (MOD21_02254B34(param0->Unk24, 1))
{
param0->bytearray[5] = (u8)param0->time.minute;
GF_RTC_CopyTime(&param0->time);
if (param0->bytearray[5] != param0->time.minute)
{
MOD21_02254B10(param0->Unk24, 1);
}
}
return FALSE;
}
THUMB_FUNC BOOL MOD21_02254A38(UnkStruct02254854 * param0)
{
switch (param0->bytearray[1])
{
case 0:
MOD21_02254B10(param0->Unk24, 3);
param0->bytearray[1]++;
break;
case 1:
if (MOD21_02254B40(param0->Unk24))
{
return TRUE;
}
break;
default:
break;
}
return FALSE;
}
+187
View File
@@ -0,0 +1,187 @@
#include "global.h"
#include "heap.h"
#include "mod21_02254A6C.h"
#include "MI_memory.h"
extern void MOD20_022536F4(u32 *param0, u32 param1);
extern u32 MOD20_02252D34(void);
extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4);
extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, void *param4, u32 param5, u32 param6);
UnkOverlayStruct1 const MOD21_02254DAC[] = {
{ 0, MOD21_02254B60, 0 },
{ 1, MOD21_02254BF4, 0 },
{ 2, MOD21_02254C14, 0 },
{ 3, MOD21_02254C40, 0 },
{ 0, NULL, 0 }
};
extern BOOL MOD20_02253794(void *param0, u32 param1);
extern BOOL MOD20_022537B8(void *param0);
extern UnkStruct02254A6C *MOD20_022538A0(void *param0);
extern BOOL MOD20_02253888(void *param0, void *param1);
//todo datatype
u8 const MOD21_02254D90[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
extern void FUN_02016C18(u32 param0, u32 param1, void *param2, u32 param3);
extern void FUN_0200687C(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7);
extern void FUN_020068C8(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7);
extern void MOD20_02252D7C(u32 param0, u32 param1);
extern void FUN_02017CD0(u32 param0, u32 param1);
extern void FUN_020178A0(u32 param0, u32 param1);
extern void FUN_02018170(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 *param6, u8 param7, u32 param8, u32 param9, u32 param10);
extern void MOD11_02252DB4(u32 param0, u32 param1);
THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1)
{
UnkStruct02254A6C *strct = (UnkStruct02254A6C *)AllocFromHeap(8, 3 << 8);
u32 sp4;
if (strct != NULL)
{
MOD20_022536F4(strct->Unk08, 8);
strct->Unk00 = param1;
strct->Unk04 = MOD20_02252D34();
void *res = FUN_02006BDC(12, 0x19, 1, &sp4, 8);
if (res == 0)
{
FreeToHeap(strct);
return FALSE;
}
MOD21_02254AD4((void *)(sp4 + 0xc), strct->Unk30);
FreeToHeap(res);
param0->Unk00 = strct;
return TRUE;
}
return FALSE;
}
THUMB_FUNC void MOD21_02254AD4(void *param0, void *param1)
{
s32 i = 0;
for (u32 r6 = 9 << 6; i < 9; r6 -= 0x30)
{
MI_CpuCopy16(param0, param1, 0x40);
MI_CpuCopy16((void *)((u32)param0 + r6), (void *)((u32)param1 + 0x40), 0x10);
i++;
param0 = (void *)((u32)param0 + 0x40);
param1 = (void *)((u32)param1 + 0x50);
}
}
THUMB_FUNC void MOD21_02254B04(void *param0)
{
if (param0 != NULL)
{
FreeToHeap(param0);
}
}
THUMB_FUNC void MOD21_02254B10(u32 *param0, u32 param1)
{
MOD20_022537E0(MOD21_02254DAC, param1, param0, *param0, (void *)(param0 + 2), 2, 8);
}
THUMB_FUNC BOOL MOD21_02254B34(void *param0, u32 param1)
{
return MOD20_02253794((void *)((u32)param0 + 8), param1);
}
THUMB_FUNC BOOL MOD21_02254B40(void *param0)
{
return MOD20_022537B8((void *)((u32)param0 + 8));
}
THUMB_FUNC BOOL MOD21_02254B4C(void *param0)
{
return MOD20_02253888((void *)((u32)MOD20_022538A0(param0) + 8), param0);
}
THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1)
{
#pragma unused (param0)
UnkStruct02254A6C *strct = MOD20_022538A0(param1);
FUN_02016C18(strct->Unk04, 6, MOD21_02254D90, 0);
FUN_0200687C(12, 23, strct->Unk04, 6, 0, 0, 1, 8);
FUN_020068C8(12, 24, strct->Unk04, 6, 0, 0, 1, 8);
MOD20_02252D7C(0, 0);
MOD21_02254C5C(strct);
FUN_02017CD0(strct->Unk04, 6);
u32 r3 = reg_GXS_DB_DISPCNT;
u32 r2 = reg_GXS_DB_DISPCNT;
vu32 tmp = r3; //unused? wtf
u32 r0 = ~0x1F00 & r2;
r2 = r3 << 19; //cast with shift? can't replicate both though
r3 = r2 >> 27;
r2 = 4 | r3;
r2 <<= 8;
r0 |= r2;
reg_GXS_DB_DISPCNT = r0;
return MOD21_02254B4C(param1);
}
THUMB_FUNC BOOL MOD21_02254BF4(u32 param0, void *param1)
{
#pragma unused (param0)
UnkStruct02254A6C *strct = MOD20_022538A0(param1);
MOD21_02254C5C(strct);
FUN_02017CD0(strct->Unk04, 6);
return MOD21_02254B4C(param1);
}
THUMB_FUNC BOOL MOD21_02254C14(u32 param0, void *param1)
{
#pragma unused (param0)
UnkStruct02254A6C *strct = MOD20_022538A0(param1);
if (strct->Unk00->Unk0C)
{
MOD11_02252DB4(0, 0);
}
else
{
MOD20_02252D7C(0, 0);
}
return MOD21_02254B4C(param1);
}
THUMB_FUNC BOOL MOD21_02254C40(u32 param0, void *param1)
{
#pragma unused (param0)
UnkStruct02254A6C *strct = MOD20_022538A0(param1);
FUN_020178A0(strct->Unk04, 6);
return MOD21_02254B4C(param1);
}
THUMB_FUNC void MOD21_02254C5C(UnkStruct02254A6C *param0)
{
u32 tmp = (u32)param0->Unk00->Unk00;
reg_CP_DIVCNT = 0;
(*(vu32 *)REG_DIV_NUMER_ADDR) = tmp;
reg_CP_DIV_DENOM = 10;
while (reg_CP_DIVCNT & ((u32)&reg_CP_DIVCNT >> 0xb)) { }
u32 regaddr = (u32)&reg_CP_DIV_RESULT_L;
u32 divResult = *(u32 *)regaddr;
while (reg_CP_DIVCNT & (regaddr >> 0xb)) { }
u32 divRemRes = reg_CP_DIVREM_RESULT_L;
FUN_02018170(param0->Unk04, 6, 3, 7, 4, 9, param0->Unk30, (u8)(divResult << 2), 0, 40, 9);
FUN_02018170(param0->Unk04, 6, 8, 7, 4, 9, param0->Unk30, (u8)(divRemRes << 2), 0, 40, 9);
tmp = param0->Unk00->Unk04;
reg_CP_DIVCNT = 0;
(*(vu32 *)REG_DIV_NUMER_ADDR) = tmp;
reg_CP_DIV_DENOM = 10;
while (reg_CP_DIVCNT & ((u32)&reg_CP_DIVCNT >> 0xb)) { }
divResult = *(u32 *)regaddr;
while (reg_CP_DIVCNT & (regaddr >> 0xb)) { }
divRemRes = reg_CP_DIVREM_RESULT_L;
FUN_02018170(param0->Unk04, 6, 15, 7, 4, 9, param0->Unk30, (u8)(divResult << 2), 0, 40, 9);
FUN_02018170(param0->Unk04, 6, 20, 7, 4, 9, param0->Unk30, (u8)(divRemRes << 2), 0, 40, 9);
}
-13
View File
@@ -1,13 +0,0 @@
#include "global.h"
extern void Poketch_InitApp(void *func1, void *func2);
extern void MOD21_02254854();
extern void MOD21_0225496C();
THUMB_FUNC static void MOD21_02254840(void)
{
Poketch_InitApp(MOD21_02254854, MOD21_0225496C);
}
#define NitroStaticInit MOD21_02254840
#include "sinit.h"
+1 -1
View File
@@ -116,7 +116,7 @@ MOD52_021D7594: ; 0x021D7594
bl MOD52_021D7688
add r0, r4, #0
mov r1, #0
bl FUN_02024F9C
bl Options_SetButtonModeOnMain
add r0, r5, #0
bl Sav2_SysInfo_MacAddressIsMine
cmp r0, #0
+1 -1
View File
@@ -846,7 +846,7 @@ MOD53_021D7B60: ; 0x021D7B60
bl FUN_020068C8
ldr r0, [r5, #8]
ldr r0, [r0, #8]
bl FUN_02025084
bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
+4 -4
View File
@@ -766,7 +766,7 @@ MOD54_021D7AA0: ; 0x021D7AA0
bl FUN_020068C8
ldr r0, [r5, #8]
ldr r0, [r0, #8]
bl FUN_02025084
bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -1502,7 +1502,7 @@ MOD54_021D8120: ; 0x021D8120
ldr r1, _021D814C ; =0x021D9678
mov r2, #0x1f
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
mov r1, #0x32
lsl r1, r1, #4
str r0, [r5, r1]
@@ -1767,7 +1767,7 @@ MOD54_021D8340: ; 0x021D8340
ldr r1, _021D836C ; =0x021D9678
mov r2, #0x1f
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
mov r1, #0x32
lsl r1, r1, #4
str r0, [r5, r1]
@@ -2128,7 +2128,7 @@ MOD54_021D8600: ; 0x021D8600
ldr r1, _021D862C ; =0x021D9678
mov r2, #0x1f
mov r3, #0xb
bl FUN_02002198
bl Std_CreateYesNoMenu
mov r1, #0x32
lsl r1, r1, #4
str r0, [r5, r1]

Some files were not shown because too many files have changed in this diff Show More