Merge branch 'master' into 0202A1E0

This commit is contained in:
Akira Akashi
2021-06-02 22:13:57 +01:00
committed by GitHub
582 changed files with 62102 additions and 63762 deletions

View File

@@ -12,14 +12,14 @@ env:
jobs:
build:
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
steps:
- name: Update and Install Software
run: |
sudo apt update
sudo ACCEPT_EULA=Y apt -y --fix-missing --allow-downgrades upgrade
sudo apt -y --allow-downgrades install g++-8-multilib linux-libc-dev binutils-arm-none-eabi
sudo apt -y --allow-downgrades install g++-8-multilib linux-libc-dev binutils-arm-none-eabi p7zip-full
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
@@ -31,19 +31,19 @@ jobs:
run: |
mkdir -p ~/download
cd ~/download
wget http://private.martmists.com/mwccarm.zip
wget http://private.martmists.com/nitro.tar.gz
wget https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip
wget https://cdn.discordapp.com/attachments/698589325620936736/722822401963851797/NitroSDK-3_2-060901.7z
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
7z x NitroSDK-3_2-060901.7z
mv NitroSDK-3_2-060901/tools/bin $GITHUB_WORKSPACE/tools
mv NitroSDK-3_2-060901/include/nitro/specfiles/ARM7-TS.lcf.template $GITHUB_WORKSPACE/arm7
mv NitroSDK-3_2-060901/include/nitro/specfiles/ARM9-TS.lcf.template $GITHUB_WORKSPACE/arm9
working-directory: ~
- name: Build Diamond
run: make diamond
- name: Build Pearl
run: make pearl
run: make pearl
- name: Webhook
run: |
sudo chmod 755 $GITHUB_WORKSPACE/.github/calcrom/webhook.sh

1
.gitignore vendored
View File

@@ -49,3 +49,4 @@ symbols.csv
*.arc
files/**/*.c
*.o
*.naix

View File

@@ -1,4 +1,6 @@
cmake_minimum_required (VERSION 2.8.11)
cmake_minimum_required (VERSION 3.15)
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
project(PokeDiamond)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)
@@ -13,10 +15,7 @@ endif(APPLE)
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/05/include arm9/modules/21/include arm9/modules/59/include arm9/modules/63/include)
add_subdirectory(arm9)
add_executable(calcrom .github/calcrom/calcrom.cpp)
target_include_directories(calcrom PRIVATE /usr/local/include)

View File

@@ -1,6 +1,6 @@
# Contributing guide for Pokémon Diamond
**As the repository is in a volatile state, contribution is closed to the public until further notice.**
**The repository is in a volatile state.**
This is a living document which lays out the procedure for decompiling the game code of Pokémon Diamond Version (5.0-US) for the Nintendo DS.

View File

@@ -162,6 +162,7 @@ clean: mostlyclean clean-fs clean-tools
clean-fs:
$(RM) $(filter %.narc %.arc,$(HOSTFS_FILES))
$(RM) $(patsubst %.narc,%.naix,$(patsubst %.arc,%.naix,$(filter %.narc %.arc,$(HOSTFS_FILES))))
$(RM) $(NCGR_CLEAN_LIST) $(NCLR_CLEAN_LIST) $(NCER_CLEAN_LIST) $(NSCR_CLEAN_LIST)
find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' \) -exec $(RM) {} +
$(RM) files/msgdata/msg/narc_*.bin
@@ -204,7 +205,7 @@ $(BUILD_DIR)/%.o: %.c $$(dep)
$(BUILD_DIR)/%.o: %.s $$(dep)
$(AS) $(ASFLAGS) $< -o $@
arm9:
arm9: filesystem
$(MAKE) -C arm9 $(MAKE_VARS)
arm7:
@@ -214,7 +215,7 @@ include filesystem.mk
# TODO: Rules for Pearl
# FIXME: Computed secure area CRC in header is incorrect due to first 8 bytes of header not actually being "encryObj"
$(ROM): rom.rsf arm9 arm7 filesystem $(BNR) tools/bin/rom_header.template.sbin
$(ROM): rom.rsf arm9 arm7 $(BNR) tools/bin/rom_header.template.sbin
$(MAKEROM) -DBUILD_DIR="$(BUILD_DIR)" -DBNR="$(BNR)" -DTITLE_NAME="$(TITLE_NAME)" -DNITROFS_FILES="$(NITROFS_FILES)" $< $@
ifeq ($(SHIFTED),0)
$(FIXROM) $@ --secure-crc $(SECURE_CRC) --game-code $(GAME_CODE)

19
arm9/CMakeLists.txt Normal file
View File

@@ -0,0 +1,19 @@
cmake_minimum_required (VERSION 3.15)
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
project(DP_Arm9)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)
# TODO: Add commands
enable_language(ASM)
add_compile_options(-fms-extensions)
file(GLOB_RECURSE SOURCES "*.c" "*.cpp")
file(GLOB MODULE_INC modules/*/include)
add_executable(DP_Arm9 ${SOURCES})
target_include_directories(DP_Arm9 PRIVATE ../include ../include-mw lib/include ${MODULE_INC} ../files)
target_compile_definitions(DP_Arm9 PUBLIC __CLION_IDE__)

View File

@@ -54,7 +54,7 @@ SRC_DIRS := src lib lib/src $(sort $(wildcard modules/*/src))
ASM_DIRS := asm data files $(sort $(wildcard modules/*/asm))
LIBASM_DIRS := lib/syscall
INCLUDE_RECURSIVE_DIRS := ../include-mw lib/include
INCLUDE_DIRS := ../include $(sort $(wildcard modules/*/include))
INCLUDE_DIRS := ../include $(sort $(wildcard modules/*/include)) ../files
C_FILES := $(foreach dir,$(SRC_DIRS),$(sort $(wildcard $(dir)/*.c)))
CXX_FILES := $(foreach dir,$(SRC_DIRS),$(sort $(wildcard $(dir)/*.cpp)))
@@ -110,7 +110,7 @@ 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)
CFLAGS = -O4,p -gccext,on -proc arm946e -ipa file -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)
CXXFLAGS = -O4,p -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)
LDFLAGS = -nodead -w off -proc v5te -interworking -map closure,unused -symtab sort -m _start
LIBS := -Llib -lsyscall
@@ -192,6 +192,10 @@ ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS) $(LIB
# TODO: Move out to lib/Makefile
$(BUILD_DIR)/lib/%.o: MWCCVERSION = 1.2/sp2p3
$(BUILD_DIR)/lib/%.o: CFLAGS = -O4,p -gccext,on -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -interworking -DFS_IMPLEMENT -enum int -W all -i ../include -ir ../include-mw -ir lib/include
# FIXME: Using -ipa file breaks .rodata alignment
$(BUILD_DIR)/src/math_util.o: 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)
####################### Everything Else ######################

View File

@@ -6,7 +6,7 @@ Static arm9
{
Address 0x02000000
Object main.o
Object unk_020010A8.o
Object list_menu.o
Object unk_02001B80.o
Object string_util.o
Object unk_020023C0.o
@@ -21,7 +21,7 @@ Static arm9
Object unk_020061E8.o
Object overlay_manager.o
Object filesystem.o
Object unk_02006864.o
Object gf_gfx_loader.o
Object unk_02006D98.o
Object unk_02008AA4.o
Object unk_02008DEC.o
@@ -36,6 +36,10 @@ Static arm9
Object unk_0200E850.o
Object unk_0201137C.o
Object unk_02011744.o
Object unk_02012004.o
Object gf_rtc.o
Object list_menu_items.o
Object unk_02012944.o
Object unk_02012CC8.o
Object mail_message.o
Object unk_020139D8.o
@@ -107,7 +111,7 @@ Static arm9
Object seal_case.o
Object unk_02029CEC.o
Object igt.o
Object unk_02029EC4.o
Object sav_chatot.o
Object unk_02029FB0.o
Object unk_0202A1E0.o
Object unk_0202A8F4.o
@@ -153,16 +157,16 @@ Static arm9
Object unk_02038C78.o
Object scrcmd.o
Object scrcmd_asm.o
Object scrcmd_2.o
Object scrcmd_mart.o
Object scrcmd_3.o
Object scrcmd_names.o
Object scrcmd_5.o
Object scrcmd_6.o
Object scrcmd_sound.o
Object scrcmd_7.o
Object scrcmd_8.o
Object scrcmd_9.o
Object scrcmd_10.o
Object scrcmd_11.o
Object scrcmd_berry_trees.o
Object scrcmd_12.o
Object scrcmd_13.o
Object scrcmd_coins.o
@@ -171,11 +175,11 @@ Static arm9
Object scrcmd_17.o
Object scrcmd_18_c.o
Object scrcmd_18.o
Object scrcmd_19.o
Object scrcmd_20.o
Object scrcmd_21.o
Object scrcmd_fossils.o
Object scrcmd_prizes.o
Object scrcmd_flags.o
Object scrcmd_items.o
Object scrcmd_23.o
Object scrcmd_underground.o
Object scrcmd_24.o
Object scrcmd_25.o
Object unk_02046030.o
@@ -352,8 +356,81 @@ Static arm9
Object WCM_util.o
Object WIFI_stubsmd5_dummy.o
Object libVCT.o
Object unk_020ADA84.o
Object sndlib.o
### Nitro System SDK ###
Object NNS_FND_list.o
Object NNS_FND_heapcommon.o
Object NNS_FND_expheap.o
Object NNS_FND_frameheap.o
Object NNS_FND_allocator.o
Object NNS_GFD_gfd_texvramman.o
Object NNS_GFD_gfd_plttvramman.o
Object NNS_GFD_gfd_frametexvra.o
Object NNS_GFD_gfd_frameplttvr.o
Object NNS_GFD_gfd_vramtransfe.o
Object NNS_GFD_gfdi_linkedlist.o
Object NNS_GFD_gfd_linkedlistt.o
Object NNS_GFD_gfd_linkedlistp.o
Object NNS_G2D_g2d_nan_load.o
Object NNS_G2D_g2d_nob_load.o
Object NNS_G2D_g2d_nmc_load.o
Object NNS_G2D_g2d_ncg_load.o
Object NNS_G2D_g2d_ncl_load.o
Object NNS_G2D_g2d_nsc_load.o
Object NNS_G2D_g2d_load.o
Object NNS_G2D_g2d_softsprite.o
Object NNS_G2D_g2d_animation.o
Object NNS_G2D_g2d_oam.o
Object NNS_G2D_g2d_palettetabl.o
Object NNS_G2D_g2d_image.o
Object NNS_G2D_g2d_srtcontrol.o
Object NNS_G2D_g2d_node.o
Object NNS_G2D_g2d_cellanimati.o
Object NNS_G2D_g2d_multicellan.o
Object NNS_G2D_g2d_renderer.o
Object NNS_G2D_g2di_mtx32.o
Object NNS_G2D_g2d_celltransfe.o
Object NNS_G2D_g2d_oamsoftware.o
Object NNS_G2D_g2d_renderercor.o
Object NNS_G2D_g2d_font.o
Object NNS_G2D_g2d_charcanvas.o
Object NNS_G2D_g2d_textcanvas.o
Object NNS_G2D_g2d_nft_load.o
Object NNS_G2D_g2di_bitreader.o
Object NNS_G2D_g2di_splitchar.o
Object NNS_G3D_kernel.o
Object NNS_G3D_glbstate.o
Object NNS_G3D_anm.o
Object NNS_G3D_cgtool.o
Object NNS_G3D_sbc.o
Object NNS_G3D_1mat1shp.o
Object NNS_G3D_gecom.o
Object NNS_G3D_util.o
Object NNS_G3D_mem.o
Object NNS_G3D_model.o
Object NNS_G3D_res_struct_acce.o
Object NNS_G3D_nsbca.o
Object NNS_G3D_nsbma.o
Object NNS_G3D_nsbta.o
Object NNS_G3D_nsbtp.o
Object NNS_G3D_nsbva.o
Object NNS_G3D_basic.o
Object NNS_G3D_maya.o
Object NNS_G3D_si3d.o
Object NNS_G3D_3dsmax.o
Object NNS_G3D_xsi.o
Object NNS_SND_main.o
Object NNS_SND_resource_mgr.o
Object NNS_SND_waveout.o
Object NNS_SND_player.o
Object NNS_SND_stream.o
Object NNS_SND_capture.o
Object NNS_SND_sndarc.o
Object NNS_SND_heap.o
Object NNS_SND_sndarc_loader.o
Object NNS_SND_sndarc_player.o
Object NNS_SND_sndarc_stream.o
Object NNS_SND_seqdata.o
Object NNS_SND_fader.o
### Nitro SDK ###
Object FX_mtx22.o
Object FX_mtx33.o
@@ -361,6 +438,7 @@ Static arm9
Object FX_mtx44.o
Object FX_cp.o
Object FX_vec.o
Object FX_sincos.o
Object FX_atan.o
Object FX.o
Object GX.o

View File

@@ -0,0 +1,65 @@
.include "asm/macros.inc"
.include "global.inc"
.rodata
; static const in function
.global sAllocatorFunc$7864
sAllocatorFunc$7864: ; 0x020FF7CC
.word AllocatorAllocForExpHeap
.word AllocatorFreeForExpHeap
.text
arm_func_start NNS_FndInitAllocatorForExpHeap
NNS_FndInitAllocatorForExpHeap: ; 0x020AE82C
ldr ip, _020AE848 ; =sAllocatorFunc$7864
mov r3, #0x0
str r12, [r0, #0x0]
str r1, [r0, #0x4]
str r2, [r0, #0x8]
str r3, [r0, #0xc]
bx lr
.balign 4
_020AE848: .word sAllocatorFunc$7864
arm_func_end NNS_FndInitAllocatorForExpHeap
arm_func_start NNS_FndFreeToAllocator
NNS_FndFreeToAllocator: ; 0x020AE84C
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, [r0, #0x0]
ldr r2, [r2, #0x4]
blx r2
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_FndFreeToAllocator
arm_func_start NNS_FndAllocFromAllocator
NNS_FndAllocFromAllocator: ; 0x020AE868
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, [r0, #0x0]
ldr r2, [r2, #0x0]
blx r2
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_FndAllocFromAllocator
arm_func_start AllocatorFreeForExpHeap
AllocatorFreeForExpHeap: ; 0x020AE884
ldr ip, _020AE890 ; =NNS_FndFreeToExpHeap
ldr r0, [r0, #0x4]
bx r12
.balign 4
_020AE890: .word NNS_FndFreeToExpHeap
arm_func_end AllocatorFreeForExpHeap
arm_func_start AllocatorAllocForExpHeap
AllocatorAllocForExpHeap: ; 0x020AE894
ldr ip, _020AE8A8 ; =NNS_FndAllocFromExpHeapEx
mov r2, r0
ldr r0, [r2, #0x4]
ldr r2, [r2, #0x8]
bx r12
.balign 4
_020AE8A8: .word NNS_FndAllocFromExpHeapEx
arm_func_end AllocatorAllocForExpHeap

583
arm9/asm/NNS_FND_expheap.s Normal file
View File

@@ -0,0 +1,583 @@
.include "asm/macros.inc"
.include "global.inc"
.extern NNSi_FndInitHeapHead
.extern NNSi_FndFinalizeHeap
.text
arm_func_start NNS_FndGetSizeForMBlockExpHeap
NNS_FndGetSizeForMBlockExpHeap: ; 0x020ADDC0
ldr r0, [r0, #-0xc]
bx lr
arm_func_end NNS_FndGetSizeForMBlockExpHeap
arm_func_start NNS_FndGetTotalFreeSizeForExpHeap
NNS_FndGetTotalFreeSizeForExpHeap: ; 0x020ADDC8
ldr r2, [r0, #0x24]
mov r0, #0x0
cmp r2, #0x0
bxeq lr
_020ADDD8:
ldr r1, [r2, #0x4]
ldr r2, [r2, #0xc]
add r0, r0, r1
cmp r2, #0x0
bne _020ADDD8
bx lr
arm_func_end NNS_FndGetTotalFreeSizeForExpHeap
arm_func_start NNS_FndFreeToExpHeap
NNS_FndFreeToExpHeap: ; 0x020ADDF0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0xc
sub r4, r1, #0x10
add r5, r0, #0x24
add r0, sp, #0x0
mov r1, r4
bl GetRegionOfMBlock
mov r1, r4
add r0, r5, #0x8
bl RemoveMBlock
add r1, sp, #0x0
mov r0, r5
bl RecycleRegion
add sp, sp, #0xc
ldmia sp!, {r4-r5,pc}
arm_func_end NNS_FndFreeToExpHeap
arm_func_start NNS_FndResizeForMBlockExpHeap
NNS_FndResizeForMBlockExpHeap: ; 0x020ADE2C
stmdb sp!, {r4-r10,lr}
sub sp, sp, #0x10
mov r4, r1
mov r10, r2
sub r6, r4, #0x10
add r1, r10, #0x3
mov r5, r0
ldr r8, [r6, #0x4]
bic r10, r1, #0x3
cmp r10, r8
add r7, r5, #0x24
addeq sp, sp, #0x10
moveq r0, r10
ldmeqia sp!, {r4-r10,pc}
cmp r10, r8
bls _020ADF60
ldr r9, [r7, #0x0]
add r0, r6, #0x10
cmp r9, #0x0
add r0, r8, r0
beq _020ADE94
_020ADE80:
cmp r9, r0
beq _020ADE94
ldr r9, [r9, #0xc]
cmp r9, #0x0
bne _020ADE80
_020ADE94:
cmp r9, #0x0
beq _020ADEB0
ldr r0, [r9, #0x4]
add r1, r8, #0x10
add r0, r1, r0
cmp r10, r0
bls _020ADEBC
_020ADEB0:
add sp, sp, #0x10
mov r0, #0x0
ldmia sp!, {r4-r10,pc}
_020ADEBC:
add r0, sp, #0x0
mov r1, r9
bl GetRegionOfMBlock
mov r0, r7
mov r1, r9
bl RemoveMBlock
ldr r2, [sp, #0x4]
add r3, r10, r4
ldr r9, [sp, #0x0]
sub r1, r2, r3
str r3, [sp, #0x0]
cmp r1, #0x10
strcc r2, [sp, #0x0]
mov r8, r0
ldr r0, [sp, #0x0]
sub r0, r0, r4
str r0, [r6, #0x4]
ldr r1, [sp, #0x4]
ldr r0, [sp, #0x0]
sub r0, r1, r0
cmp r0, #0x10
blo _020ADF30
ldr r1, _020ADF9C ; =0x00004652
add r0, sp, #0x0
bl InitMBlock
mov r1, r0
mov r0, r7
mov r2, r8
bl InsertMBlock
_020ADF30:
ldr r0, [r5, #0x20]
ldr r1, [sp, #0x0]
and r0, r0, #0xff
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
sub r2, r1, r9
ands r0, r0, #0x1
beq _020ADF90
mov r1, r9
mov r0, #0x0
bl MIi_CpuClear32
b _020ADF90
_020ADF60:
add r0, r10, r4
str r0, [sp, #0x8]
ldr r1, [r6, #0x4]
add r0, r6, #0x10
add r0, r1, r0
str r0, [sp, #0xc]
add r1, sp, #0x8
mov r0, r7
str r10, [r6, #0x4]
bl RecycleRegion
cmp r0, #0x0
streq r8, [r6, #0x4]
_020ADF90:
ldr r0, [r6, #0x4]
add sp, sp, #0x10
ldmia sp!, {r4-r10,pc}
.balign 4
_020ADF9C: .word 0x00004652
arm_func_end NNS_FndResizeForMBlockExpHeap
arm_func_start NNS_FndAllocFromExpHeapEx
NNS_FndAllocFromExpHeapEx: ; 0x020ADFA0
stmdb sp!, {lr}
sub sp, sp, #0x4
cmp r1, #0x0
moveq r1, #0x1
add r1, r1, #0x3
cmp r2, #0x0
bic r1, r1, #0x3
blt _020ADFCC
bl AllocFromHead
add sp, sp, #0x4
ldmia sp!, {pc}
_020ADFCC:
rsb r2, r2, #0x0
bl AllocFromTail
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_FndAllocFromExpHeapEx
arm_func_start NNS_FndDestroyExpHeap
NNS_FndDestroyExpHeap: ; 0x020ADFDC
ldr ip, _020ADFE4 ; =NNSi_FndFinalizeHeap
bx r12
.balign 4
_020ADFE4: .word NNSi_FndFinalizeHeap
arm_func_end NNS_FndDestroyExpHeap
arm_func_start NNS_FndCreateExpHeapEx
NNS_FndCreateExpHeapEx: ; 0x020ADFE8
stmdb sp!, {lr}
sub sp, sp, #0x4
add r1, r1, r0
add r0, r0, #0x3
bic r1, r1, #0x3
bic r0, r0, #0x3
cmp r0, r1
bhi _020AE014
sub r3, r1, r0
cmp r3, #0x4c
bhs _020AE020
_020AE014:
add sp, sp, #0x4
mov r0, #0x0
ldmia sp!, {pc}
_020AE020:
bl InitExpHeap
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_FndCreateExpHeapEx
arm_func_start RecycleRegion
RecycleRegion:
stmdb sp!, {r4-r6,lr}
sub sp, sp, #0x8
mov r5, r1
ldr r2, [r5, #0x0]
ldr r1, [r5, #0x4]
mov r6, r0
str r2, [sp, #0x0]
str r1, [sp, #0x4]
ldr r1, [r6, #0x0]
mov r4, #0x0
cmp r1, #0x0
beq _020AE0A0
ldr r0, [r5, #0x0]
_020AE060:
cmp r1, r0
movcc r4, r1
blo _020AE094
ldr r0, [r5, #0x4]
cmp r1, r0
bne _020AE0A0
ldr r2, [r1, #0x4]
add r0, r1, #0x10
add r2, r2, r0
mov r0, r6
str r2, [sp, #0x4]
bl RemoveMBlock
b _020AE0A0
_020AE094:
ldr r1, [r1, #0xc]
cmp r1, #0x0
bne _020AE060
_020AE0A0:
cmp r4, #0x0
beq _020AE0D4
ldr r2, [r4, #0x4]
add r1, r4, #0x10
ldr r0, [r5, #0x0]
add r1, r2, r1
cmp r1, r0
bne _020AE0D4
mov r0, r6
mov r1, r4
str r4, [sp, #0x0]
bl RemoveMBlock
mov r4, r0
_020AE0D4:
ldr r1, [sp, #0x4]
ldr r0, [sp, #0x0]
sub r0, r1, r0
cmp r0, #0x10
addcc sp, sp, #0x8
movcc r0, #0x0
ldmccia sp!, {r4-r6,pc}
ldr r1, _020AE118 ; =0x00004652
add r0, sp, #0x0
bl InitMBlock
mov r1, r0
mov r0, r6
mov r2, r4
bl InsertMBlock
mov r0, #0x1
add sp, sp, #0x8
ldmia sp!, {r4-r6,pc}
.balign 4
_020AE118: .word 0x00004652
arm_func_end RecycleRegion
local_arm_func_start AllocFromTail
AllocFromTail: ; 0x020AE11C
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
add r0, r0, #0x24
ldrh r4, [r0, #0x12]
mov r3, r1
mvn lr, #0x0
and r1, r4, #0x1
mov r1, r1, lsl #0x10
movs r1, r1, lsr #0x10
moveq r5, #0x1
mov r1, #0x0
ldr r4, [r0, #0x4]
movne r5, #0x0
mov r12, r1
cmp r4, #0x0
beq _020AE1B0
sub r2, r2, #0x1
mvn r2, r2
_020AE164:
ldr r8, [r4, #0x4]
add r9, r4, #0x10
add r6, r8, r9
sub r6, r6, r3
and r7, r2, r6
subs r6, r7, r9
bmi _020AE1A4
cmp lr, r8
bls _020AE1A4
mov r1, r4
mov lr, r8
mov r12, r7
cmp r5, #0x0
bne _020AE1B0
cmp r8, r3
beq _020AE1B0
_020AE1A4:
ldr r4, [r4, #0x8]
cmp r4, #0x0
bne _020AE164
_020AE1B0:
cmp r1, #0x0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r9,pc}
mov r4, #0x1
mov r2, r12
str r4, [sp, #0x0]
bl AllocUsedBlockFromFreeBlock
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
arm_func_end AllocFromTail
local_arm_func_start AllocFromHead
AllocFromHead: ; 0x020AE1D8
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
add r0, r0, #0x24
ldrh r4, [r0, #0x12]
mov r3, r1
ldr r5, [r0, #0x0]
and r1, r4, #0x1
mov r1, r1, lsl #0x10
movs r1, r1, lsr #0x10
moveq r6, #0x1
mov r1, #0x0
movne r6, #0x0
mov lr, r1
cmp r5, #0x0
mvn r4, #0x0
beq _020AE270
sub r12, r2, #0x1
mvn r2, r12
_020AE220:
add r8, r5, #0x10
add r7, r12, r8
and r9, r2, r7
sub r7, r9, r8
ldr r8, [r5, #0x4]
add r7, r3, r7
cmp r8, r7
blo _020AE264
cmp r4, r8
bls _020AE264
mov r1, r5
mov r4, r8
mov lr, r9
cmp r6, #0x0
bne _020AE270
cmp r8, r3
beq _020AE270
_020AE264:
ldr r5, [r5, #0xc]
cmp r5, #0x0
bne _020AE220
_020AE270:
cmp r1, #0x0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r9,pc}
mov r4, #0x0
mov r2, lr
str r4, [sp, #0x0]
bl AllocUsedBlockFromFreeBlock
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
arm_func_end AllocFromHead
arm_func_start AllocUsedBlockFromFreeBlock
AllocUsedBlockFromFreeBlock: ; 0x020AE298
stmdb sp!, {r4-r8,lr}
sub sp, sp, #0x18
mov r7, r0
add r0, sp, #0x0
mov r8, r1
mov r6, r2
mov r5, r3
bl GetRegionOfMBlock
ldr r3, [sp, #0x4]
sub r4, r6, #0x10
add r2, r5, r6
mov r0, r7
mov r1, r8
str r4, [sp, #0x4]
str r3, [sp, #0xc]
str r2, [sp, #0x8]
bl RemoveMBlock
ldr r2, [sp, #0x0]
ldr r1, [sp, #0x4]
mov r5, r0
sub r0, r1, r2
cmp r0, #0x10
strcc r2, [sp, #0x4]
blo _020AE318
ldr r1, _020AE418 ; =0x00004652
add r0, sp, #0x0
bl InitMBlock
mov r1, r0
mov r0, r7
mov r2, r5
bl InsertMBlock
mov r5, r0
_020AE318:
ldr r1, [sp, #0xc]
ldr r0, [sp, #0x8]
sub r0, r1, r0
cmp r0, #0x10
strcc r1, [sp, #0x8]
blo _020AE34C
ldr r1, _020AE418 ; =0x00004652
add r0, sp, #0x8
bl InitMBlock
mov r1, r0
mov r0, r7
mov r2, r5
bl InsertMBlock
_020AE34C:
ldr r0, [r7, #-0x4]
ldr r1, [sp, #0x4]
and r0, r0, #0xff
mov r0, r0, lsl #0x10
ldr r2, [sp, #0x8]
mov r0, r0, lsr #0x10
sub r2, r2, r1
ands r0, r0, #0x1
beq _020AE378
mov r0, #0x0
bl MIi_CpuClear32
_020AE378:
ldr r2, [sp, #0x8]
ldr r1, _020AE41C ; =0x00005544
add r0, sp, #0x10
str r4, [sp, #0x10]
str r2, [sp, #0x14]
bl InitMBlock
mov r1, r0
ldrh r3, [r1, #0x2]
ldrh r2, [sp, #0x30]
add r0, r7, #0x8
bic r3, r3, #0x8000
strh r3, [r1, #0x2]
ldrh r3, [r1, #0x2]
and r2, r2, #0x1
orr r2, r3, r2, lsl #0xf
strh r2, [r1, #0x2]
ldrh r2, [r1, #0x2]
ldr r3, [sp, #0x4]
bic r2, r2, #0x7f00
strh r2, [r1, #0x2]
sub r2, r1, r3
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
ldrh r3, [r1, #0x2]
and r2, r2, #0x7f
orr r2, r3, r2, lsl #0x8
strh r2, [r1, #0x2]
ldrh r2, [r1, #0x2]
ldrh r3, [r7, #0x10]
bic r2, r2, #0xff
strh r2, [r1, #0x2]
ldrh r2, [r1, #0x2]
and r3, r3, #0xff
orr r2, r2, r3
strh r2, [r1, #0x2]
ldr r2, [r7, #0xc]
bl InsertMBlock
mov r0, r6
add sp, sp, #0x18
ldmia sp!, {r4-r8,pc}
.balign 4
_020AE418: .word 0x00004652
_020AE41C: .word 0x00005544
arm_func_end AllocUsedBlockFromFreeBlock
arm_func_start InitExpHeap
InitExpHeap: ; 0x020AE420
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0xc
mov r5, r0
mov r3, r1
add r4, r5, #0x24
str r2, [sp, #0x0]
ldr r1, _020AE498 ; =0x45585048
add r2, r4, #0x14
bl NNSi_FndInitHeapHead
mov r0, #0x0
strh r0, [r4, #0x10]
strh r0, [r4, #0x12]
ldrh r2, [r4, #0x12]
ldr r1, _020AE49C ; =0x00004652
add r0, sp, #0x4
bic r2, r2, #0x1
strh r2, [r4, #0x12]
ldr r2, [r5, #0x18]
str r2, [sp, #0x4]
ldr r2, [r5, #0x1c]
str r2, [sp, #0x8]
bl InitMBlock
str r0, [r5, #0x24]
str r0, [r4, #0x4]
mov r1, #0x0
str r1, [r4, #0x8]
mov r0, r5
str r1, [r4, #0xc]
add sp, sp, #0xc
ldmia sp!, {r4-r5,pc}
.balign 4
_020AE498: .word 0x45585048
_020AE49C: .word 0x00004652
arm_func_end InitExpHeap
arm_func_start InitMBlock
InitMBlock: ; 0x020AE4A0
ldr r3, [r0, #0x0]
mov r2, #0x0
strh r1, [r3, #0x0]
strh r2, [r3, #0x2]
ldr r1, [r0, #0x4]
add r0, r3, #0x10
sub r0, r1, r0
str r0, [r3, #0x4]
str r2, [r3, #0x8]
mov r0, r3
str r2, [r3, #0xc]
bx lr
arm_func_end InitMBlock
arm_func_start InsertMBlock
InsertMBlock: ; 0x020AE4D0
str r2, [r1, #0x8]
cmp r2, #0x0
ldrne r3, [r2, #0xc]
strne r1, [r2, #0xc]
ldreq r3, [r0, #0x0]
streq r1, [r0, #0x0]
str r3, [r1, #0xc]
cmp r3, #0x0
strne r1, [r3, #0x8]
streq r1, [r0, #0x4]
mov r0, r1
bx lr
arm_func_end InsertMBlock
arm_func_start RemoveMBlock
RemoveMBlock: ; 0x020AE500
ldr r2, [r1, #0x8]
ldr r1, [r1, #0xc]
cmp r2, #0x0
strne r1, [r2, #0xc]
streq r1, [r0, #0x0]
cmp r1, #0x0
strne r2, [r1, #0x8]
streq r2, [r0, #0x4]
mov r0, r2
bx lr
arm_func_end RemoveMBlock
arm_func_start GetRegionOfMBlock
GetRegionOfMBlock: ; 0x020AE528
ldrh r2, [r1, #0x2]
add r3, r1, #0x10
mov r2, r2, asr #0x8
and r2, r2, #0x7f
mov r2, r2, lsl #0x10
sub r2, r1, r2, lsr #0x10
str r2, [r0, #0x0]
ldr r1, [r1, #0x4]
add r1, r1, r3
str r1, [r0, #0x4]
bx lr
arm_func_end GetRegionOfMBlock

View File

@@ -0,0 +1,243 @@
.include "asm/macros.inc"
.include "global.inc"
.extern NNSi_FndInitHeapHead
.extern NNSi_FndFinalizeHeap
.text
arm_func_start NNS_FndFreeByStateToFrmHeap
NNS_FndFreeByStateToFrmHeap: ; 0x020AE554
add r2, r0, #0x24
cmp r1, #0x0
ldr r3, [r2, #0x8]
beq _020AE584
cmp r3, #0x0
beq _020AE584
_020AE56C:
ldr r0, [r3, #0x0]
cmp r0, r1
beq _020AE584
ldr r3, [r3, #0xc]
cmp r3, #0x0
bne _020AE56C
_020AE584:
cmp r3, #0x0
moveq r0, #0x0
bxeq lr
ldr r1, [r3, #0x4]
mov r0, #0x1
str r1, [r2, #0x0]
ldr r1, [r3, #0x8]
str r1, [r2, #0x4]
ldr r1, [r3, #0xc]
str r1, [r2, #0x8]
bx lr
arm_func_end NNS_FndFreeByStateToFrmHeap
arm_func_start NNS_FndRecordStateForFrmHeap
NNS_FndRecordStateForFrmHeap: ; 0x020AE5B0
stmdb sp!, {r4-r6,lr}
add r4, r0, #0x24
ldr r5, [r0, #0x24]
mov r6, r1
mov r0, r4
mov r1, #0x10
mov r2, #0x4
bl AllocFromHead
cmp r0, #0x0
moveq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
str r6, [r0, #0x0]
str r5, [r0, #0x4]
ldr r1, [r4, #0x4]
str r1, [r0, #0x8]
ldr r1, [r4, #0x8]
str r1, [r0, #0xc]
str r0, [r4, #0x8]
mov r0, #0x1
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_FndRecordStateForFrmHeap
arm_func_start NNS_FndFreeToFrmHeap
NNS_FndFreeToFrmHeap: ; 0x020AE600
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r1
mov r5, r0
ands r1, r4, #0x1
beq _020AE61C
bl FreeHead
_020AE61C:
ands r0, r4, #0x2
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,pc}
mov r0, r5
bl FreeTail
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end NNS_FndFreeToFrmHeap
arm_func_start NNS_FndAllocFromFrmHeapEx
NNS_FndAllocFromFrmHeapEx: ; 0x020AE638
stmdb sp!, {lr}
sub sp, sp, #0x4
cmp r1, #0x0
moveq r1, #0x1
add r1, r1, #0x3
add r0, r0, #0x24
cmp r2, #0x0
bic r1, r1, #0x3
blt _020AE668
bl AllocFromHead
add sp, sp, #0x4
ldmia sp!, {pc}
_020AE668:
rsb r2, r2, #0x0
bl AllocFromTail
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_FndAllocFromFrmHeapEx
arm_func_start NNS_FndDestroyFrmHeap
NNS_FndDestroyFrmHeap: ; 0x020AE678
ldr ip, _020AE680 ; =NNSi_FndFinalizeHeap
bx r12
.balign 4
_020AE680: .word NNSi_FndFinalizeHeap
arm_func_end NNS_FndDestroyFrmHeap
arm_func_start NNS_FndCreateFrmHeapEx
NNS_FndCreateFrmHeapEx: ; 0x020AE684
stmdb sp!, {lr}
sub sp, sp, #0x4
add r1, r1, r0
add r0, r0, #0x3
bic r1, r1, #0x3
bic r0, r0, #0x3
cmp r0, r1
bhi _020AE6B0
sub r3, r1, r0
cmp r3, #0x30
bhs _020AE6BC
_020AE6B0:
add sp, sp, #0x4
mov r0, #0x0
ldmia sp!, {pc}
_020AE6BC:
bl InitFrameHeap
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_FndCreateFrmHeapEx
arm_func_start FreeTail
FreeTail: ; 0x020AE6C8
add r2, r0, #0x24
ldr r3, [r2, #0x8]
cmp r3, #0x0
beq _020AE6EC
_020AE6D8:
ldr r1, [r0, #0x1c]
str r1, [r3, #0x8]
ldr r3, [r3, #0xc]
cmp r3, #0x0
bne _020AE6D8
_020AE6EC:
ldr r0, [r0, #0x1c]
str r0, [r2, #0x4]
bx lr
arm_func_end FreeTail
arm_func_start FreeHead
FreeHead: ; 0x020AE6F8
ldr r1, [r0, #0x18]
add r2, r0, #0x24
str r1, [r0, #0x24]
mov r0, #0x0
str r0, [r2, #0x8]
bx lr
arm_func_end FreeHead
local_arm_func_start AllocFromTail
AllocFromTail: ; 0x020AE710
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
ldr r3, [r5, #0x4]
sub r0, r2, #0x1
mvn r2, r0
sub r1, r3, r1
ldr r0, [r5, #0x0]
and r4, r2, r1
cmp r4, r0
addcc sp, sp, #0x4
movcc r0, #0x0
ldmccia sp!, {r4-r5,pc}
ldr r0, [r5, #-0x4]
sub r2, r3, r4
and r0, r0, #0xff
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
ands r0, r0, #0x1
beq _020AE76C
mov r1, r4
mov r0, #0x0
bl MIi_CpuClear32
_020AE76C:
mov r0, r4
str r4, [r5, #0x4]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end AllocFromTail
local_arm_func_start AllocFromHead
AllocFromHead:
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldr r0, [r6, #0x0]
sub r2, r2, #0x1
mvn r3, r2
add r2, r2, r0
and r5, r3, r2
ldr r2, [r6, #0x4]
add r4, r1, r5
cmp r4, r2
movhi r0, #0x0
ldmhiia sp!, {r4-r6,pc}
ldr r1, [r6, #-0x4]
sub r2, r4, r0
and r1, r1, #0xff
mov r1, r1, lsl #0x10
mov r1, r1, lsr #0x10
ands r1, r1, #0x1
beq _020AE7D4
mov r1, r0
mov r0, #0x0
bl MIi_CpuClear32
_020AE7D4:
mov r0, r5
str r4, [r6, #0x0]
ldmia sp!, {r4-r6,pc}
arm_func_end AllocFromHead
arm_func_start InitFrameHeap
InitFrameHeap: ; 0x020AE7E0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r3, r1
add r4, r5, #0x24
str r2, [sp, #0x0]
ldr r1, _020AE828 ; =0x46524D48
add r2, r4, #0xc
bl NNSi_FndInitHeapHead
ldr r0, [r5, #0x18]
mov r1, #0x0
str r0, [r5, #0x24]
ldr r2, [r5, #0x1c]
mov r0, r5
str r2, [r4, #0x4]
str r1, [r4, #0x8]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020AE828: .word 0x46524D48
arm_func_end InitFrameHeap

View File

@@ -0,0 +1,112 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global sRootListInitialized
sRootListInitialized: ; 0x021CCD38
.space 0x4
.global sRootList
sRootList: ; 0x021CCD3C
.space 0xc
.text
arm_func_start NNSi_FndFinalizeHeap
NNSi_FndFinalizeHeap: ; 0x020ADC8C
stmdb sp!, {r4,lr}
mov r4, r0
bl FindListContainHeap
mov r1, r4
bl NNS_FndRemoveListObject
ldmia sp!, {r4,pc}
arm_func_end NNSi_FndFinalizeHeap
arm_func_start NNSi_FndInitHeapHead
NNSi_FndInitHeapHead:
stmdb sp!, {r4,lr}
mov r4, r0
str r1, [r4, #0x0]
str r2, [r4, #0x18]
str r3, [r4, #0x1c]
mov r0, #0x0
str r0, [r4, #0x20]
ldr r1, [r4, #0x20]
ldrh r0, [sp, #0x8]
bic r1, r1, #0xff
str r1, [r4, #0x20]
ldr r1, [r4, #0x20]
and r0, r0, #0xff
orr r2, r1, r0
add r0, r4, #0xc
mov r1, #0x4
str r2, [r4, #0x20]
bl NNS_FndInitList
ldr r0, _020ADD28 ; =sRootListInitialized
ldr r0, [r0, #0x0]
cmp r0, #0x0
bne _020ADD14
ldr r0, _020ADD2C ; =sRootList
mov r1, #0x4
bl NNS_FndInitList
ldr r0, _020ADD28 ; =sRootListInitialized
mov r1, #0x1
str r1, [r0, #0x0]
_020ADD14:
mov r0, r4
bl FindListContainHeap
mov r1, r4
bl NNS_FndAppendListObject
ldmia sp!, {r4,pc}
.balign 4
_020ADD28: .word sRootListInitialized
_020ADD2C: .word sRootList
arm_func_end NNSi_FndInitHeapHead
arm_func_start FindListContainHeap
FindListContainHeap: ; 0x020ADD30
stmdb sp!, {r4,lr}
ldr r4, _020ADD54 ; =sRootList
mov r1, r0
mov r0, r4
bl FindContainHeap
cmp r0, #0x0
addne r4, r0, #0xc
mov r0, r4
ldmia sp!, {r4,pc}
.balign 4
_020ADD54: .word sRootList
arm_func_end FindListContainHeap
arm_func_start FindContainHeap
FindContainHeap:
stmdb sp!, {r4-r6,lr}
mov r5, r1
mov r1, #0x0
mov r6, r0
bl NNS_FndGetNextListObject
movs r4, r0
beq _020ADDB8
_020ADD74:
ldr r0, [r4, #0x18]
cmp r0, r5
bhi _020ADDA4
ldr r0, [r4, #0x1c]
cmp r5, r0
bhs _020ADDA4
mov r1, r5
add r0, r4, #0xc
bl FindContainHeap
cmp r0, #0x0
moveq r0, r4
ldmia sp!, {r4-r6,pc}
_020ADDA4:
mov r0, r6
mov r1, r4
bl NNS_FndGetNextListObject
movs r4, r0
bne _020ADD74
_020ADDB8:
mov r0, #0x0
ldmia sp!, {r4-r6,pc}
arm_func_end FindContainHeap

169
arm9/asm/NNS_FND_list.s Normal file
View File

@@ -0,0 +1,169 @@
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start NNS_FndGetPrevListObject
NNS_FndGetPrevListObject: ; 0x020ADA84
cmp r1, #0x0
ldreq r0, [r0, #0x4]
ldrneh r0, [r0, #0xa]
ldrne r0, [r1, r0]
bx lr
arm_func_end NNS_FndGetPrevListObject
arm_func_start NNS_FndGetNextListObject
NNS_FndGetNextListObject: ; 0x020ADA98
cmp r1, #0x0
ldreq r0, [r0, #0x0]
ldrneh r0, [r0, #0xa]
addne r0, r1, r0
ldrne r0, [r0, #0x4]
bx lr
arm_func_end NNS_FndGetNextListObject
arm_func_start NNS_FndRemoveListObject
NNS_FndRemoveListObject: ; 0x020ADAB0
stmdb sp!, {lr}
sub sp, sp, #0x4
ldrh r12, [r0, #0xa]
ldr r3, [r1, r12]
add lr, r1, r12
cmp r3, #0x0
ldreq r1, [lr, #0x4]
streq r1, [r0, #0x0]
ldrne r2, [lr, #0x4]
addne r1, r3, r12
strne r2, [r1, #0x4]
ldr r3, [lr, #0x4]
cmp r3, #0x0
ldreq r1, [lr, #0x0]
streq r1, [r0, #0x4]
ldrneh r1, [r0, #0xa]
ldrne r2, [lr, #0x0]
strne r2, [r3, r1]
mov r1, #0x0
str r1, [lr, #0x0]
str r1, [lr, #0x4]
ldrh r1, [r0, #0x8]
sub r1, r1, #0x1
strh r1, [r0, #0x8]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_FndRemoveListObject
arm_func_start NNS_FndInsertListObject
NNS_FndInsertListObject: ; 0x020ADB18
stmdb sp!, {lr}
sub sp, sp, #0x4
cmp r1, #0x0
bne _020ADB38
mov r1, r2
bl NNS_FndAppendListObject
add sp, sp, #0x4
ldmia sp!, {pc}
_020ADB38:
ldr r3, [r0, #0x0]
cmp r1, r3
bne _020ADB54
mov r1, r2
bl NNS_FndPrependListObject
add sp, sp, #0x4
ldmia sp!, {pc}
_020ADB54:
ldrh lr, [r0, #0xa]
ldr r3, [r1, lr]
add r12, r2, lr
str r3, [r2, lr]
str r1, [r12, #0x4]
add r3, r3, lr
str r2, [r3, #0x4]
ldrh r3, [r0, #0xa]
str r2, [r1, r3]
ldrh r1, [r0, #0x8]
add r1, r1, #0x1
strh r1, [r0, #0x8]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_FndInsertListObject
arm_func_start NNS_FndPrependListObject
NNS_FndPrependListObject: ; 0x020ADB8C
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, [r0, #0x0]
cmp r2, #0x0
bne _020ADBAC
bl SetFirstObject
add sp, sp, #0x4
ldmia sp!, {pc}
_020ADBAC:
ldrh r3, [r0, #0xa]
mov r2, #0x0
str r2, [r1, r3]
ldr r2, [r0, #0x0]
add r3, r1, r3
str r2, [r3, #0x4]
ldrh r2, [r0, #0xa]
ldr r3, [r0, #0x0]
str r1, [r3, r2]
str r1, [r0, #0x0]
ldrh r1, [r0, #0x8]
add r1, r1, #0x1
strh r1, [r0, #0x8]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_FndPrependListObject
arm_func_start NNS_FndAppendListObject
NNS_FndAppendListObject: ; 0x020ADBE8
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, [r0, #0x0]
cmp r2, #0x0
bne _020ADC08
bl SetFirstObject
add sp, sp, #0x4
ldmia sp!, {pc}
_020ADC08:
ldrh r12, [r0, #0xa]
ldr r3, [r0, #0x4]
mov r2, #0x0
str r3, [r1, r12]
add r3, r1, r12
str r2, [r3, #0x4]
ldrh r2, [r0, #0xa]
ldr r3, [r0, #0x4]
add r2, r3, r2
str r1, [r2, #0x4]
str r1, [r0, #0x4]
ldrh r1, [r0, #0x8]
add r1, r1, #0x1
strh r1, [r0, #0x8]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_FndAppendListObject
arm_func_start SetFirstObject
SetFirstObject: ; 0x020ADC48
ldrh r3, [r0, #0xa]
mov r2, #0x0
add r12, r1, r3
str r2, [r12, #0x4]
str r2, [r1, r3]
str r1, [r0, #0x0]
str r1, [r0, #0x4]
ldrh r1, [r0, #0x8]
add r1, r1, #0x1
strh r1, [r0, #0x8]
bx lr
arm_func_end SetFirstObject
arm_func_start NNS_FndInitList
NNS_FndInitList: ; 0x020ADC74
mov r2, #0x0
str r2, [r0, #0x0]
str r2, [r0, #0x4]
strh r2, [r0, #0x8]
strh r1, [r0, #0xa]
bx lr
arm_func_end NNS_FndInitList

View File

@@ -0,0 +1,336 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dIsAnimCtrlLoopAnim
NNSi_G2dIsAnimCtrlLoopAnim: ; 0x020B0408
ldr r1, [r0, #0x14]
cmp r1, #0x0
ldreq r0, [r0, #0x18]
ldreq r1, [r0, #0x8]
cmp r1, #0x2
beq _020B0428
cmp r1, #0x4
bne _020B0430
_020B0428:
mov r0, #0x1
bx lr
_020B0430:
mov r0, #0x0
bx lr
arm_func_end NNSi_G2dIsAnimCtrlLoopAnim
arm_func_start NNS_G2dBindAnimCtrl
NNS_G2dBindAnimCtrl: ; 0x020B0438
ldr ip, _020B0444 ; =NNS_G2dResetAnimCtrlState
str r1, [r0, #0x18]
bx r12
.balign 4
_020B0444: .word NNS_G2dResetAnimCtrlState
arm_func_end NNS_G2dBindAnimCtrl
arm_func_start NNS_G2dResetAnimCtrlState
NNS_G2dResetAnimCtrlState: ; 0x020B0448
ldr r1, [r0, #0x10]
cmp r1, #0x0
movgt r2, #0x1
ldr r1, [r0, #0x4]
movle r2, #0x0
eors r1, r2, r1
beq _020B047C
ldr r2, [r0, #0x18]
ldrh r1, [r2, #0x2]
ldr r2, [r2, #0xc]
add r1, r2, r1, lsl #0x3
str r1, [r0, #0x0]
b _020B0494
_020B047C:
ldr r2, [r0, #0x18]
ldrh r1, [r2, #0x0]
ldr r2, [r2, #0xc]
add r1, r2, r1, lsl #0x3
sub r1, r1, #0x8
str r1, [r0, #0x0]
_020B0494:
ldr ip, _020B04A4 ; =NNS_G2dTickAnimCtrl
mov r1, #0x0
str r1, [r0, #0xc]
bx r12
.balign 4
_020B04A4: .word NNS_G2dTickAnimCtrl
arm_func_end NNS_G2dResetAnimCtrlState
arm_func_start NNS_G2dInitAnimCallBackFunctor
NNS_G2dInitAnimCallBackFunctor: ; 0x020B04A8
mov r1, #0x0
str r1, [r0, #0x0]
str r1, [r0, #0x4]
str r1, [r0, #0x8]
strh r1, [r0, #0xc]
bx lr
arm_func_end NNS_G2dInitAnimCallBackFunctor
arm_func_start NNS_G2dInitAnimCtrl
NNS_G2dInitAnimCtrl: ; 0x020B04C0
stmdb sp!, {r4,lr}
mov r4, r0
add r0, r4, #0x1c
bl NNS_G2dInitAnimCallBackFunctor
mov r1, #0x0
str r1, [r4, #0x0]
str r1, [r4, #0x4]
mov r0, #0x1
str r0, [r4, #0x8]
str r1, [r4, #0xc]
mov r0, #0x1000
str r0, [r4, #0x10]
str r1, [r4, #0x14]
str r1, [r4, #0x18]
ldmia sp!, {r4,pc}
arm_func_end NNS_G2dInitAnimCtrl
arm_func_start NNS_G2dGetAnimCtrlCurrentFrame
NNS_G2dGetAnimCtrlCurrentFrame: ; 0x020B04FC
ldr r1, [r0, #0x18]
ldr r2, [r0, #0x0]
ldr r0, [r1, #0xc]
sub r0, r2, r0
mov r0, r0, lsl #0xd
mov r0, r0, lsr #0x10
bx lr
arm_func_end NNS_G2dGetAnimCtrlCurrentFrame
arm_func_start NNS_G2dSetAnimCtrlCurrentFrame
NNS_G2dSetAnimCtrlCurrentFrame: ; 0x020B0518
stmdb sp!, {r4,lr}
mov r4, r0
bl SetAnimCtrlCurrentFrameImpl_
cmp r0, #0x0
movne r1, #0x0
strne r1, [r4, #0xc]
ldmia sp!, {r4,pc}
arm_func_end NNS_G2dSetAnimCtrlCurrentFrame
arm_func_start NNS_G2dTickAnimCtrl
NNS_G2dTickAnimCtrl: ; 0x020B0534
stmdb sp!, {r4-r8,lr}
mov r8, r0
ldr r0, [r8, #0x8]
mov r7, #0x0
cmp r0, #0x1
movne r0, r7
ldmneia sp!, {r4-r8,pc}
ldr r2, [r8, #0x10]
mov r0, #0x800
smull r3, r1, r2, r1
adds r0, r3, r0
adc r1, r1, r7
mov r0, r0, lsr #0xc
orr r0, r0, r1, lsl #0x14
bl abs
ldr r1, [r8, #0xc]
add r6, r8, #0xc
add r0, r1, r0
str r0, [r8, #0xc]
mov r4, r7
mov r5, #0x1
b _020B06A8
_020B058C:
ldr r0, [r8, #0x0]
ldr r1, [r6, #0x0]
ldrh r0, [r0, #0x4]
mov r7, r5
sub r0, r1, r0, lsl #0xc
str r0, [r6, #0x0]
ldr r0, [r8, #0x10]
cmp r0, #0x0
movgt r1, r5
ldr r0, [r8, #0x4]
movle r1, r4
eors r0, r1, r0
ldrne r0, [r8, #0x0]
addne r0, r0, #0x8
strne r0, [r8, #0x0]
ldreq r0, [r8, #0x0]
subeq r0, r0, #0x8
streq r0, [r8, #0x0]
ldr r1, [r8, #0x10]
ldr r0, [r8, #0x0]
cmp r1, #0x0
movgt r2, r5
ldr r1, [r8, #0x4]
movle r2, r4
eors r1, r2, r1
beq _020B0614
ldr r2, [r8, #0x18]
ldrh r1, [r2, #0x0]
ldr r2, [r2, #0xc]
add r1, r2, r1, lsl #0x3
cmp r0, r1
movcs r0, r5
movcc r0, r4
b _020B0634
_020B0614:
ldr r2, [r8, #0x18]
ldrh r1, [r2, #0x2]
ldr r2, [r2, #0xc]
add r1, r2, r1, lsl #0x3
sub r1, r1, #0x8
cmp r0, r1
movls r0, r5
movhi r0, r4
_020B0634:
cmp r0, #0x0
beq _020B0644
mov r0, r8
bl SequenceEdgeHandle_
_020B0644:
ldr r0, [r8, #0x1c]
cmp r0, #0x0
beq _020B06A8
ldr r0, [r8, #0x18]
ldr r2, [r8, #0x1c]
ldr r1, [r8, #0x0]
ldr r0, [r0, #0xc]
cmp r2, #0x2
sub r0, r1, r0
mov r0, r0, lsl #0xd
mov r1, r0, lsr #0x10
beq _020B0680
cmp r2, #0x3
beq _020B069C
b _020B06A8
_020B0680:
ldrh r0, [r8, #0x28]
cmp r1, r0
bne _020B06A8
ldr r0, [r8, #0x20]
ldr r2, [r8, #0x24]
blx r2
b _020B06A8
_020B069C:
ldr r0, [r8, #0x20]
ldr r2, [r8, #0x24]
blx r2
_020B06A8:
ldr r0, [r8, #0x8]
cmp r0, #0x0
beq _020B06CC
ldr r0, [r8, #0x0]
ldr r1, [r8, #0xc]
ldrh r0, [r0, #0x4]
cmp r1, r0, lsl #0xc
movge r0, r5
bge _020B06D0
_020B06CC:
mov r0, r4
_020B06D0:
cmp r0, #0x0
bne _020B058C
mov r0, r7
ldmia sp!, {r4-r8,pc}
arm_func_end NNS_G2dTickAnimCtrl
arm_func_start NNS_G2dGetAnimCtrlCurrentElement
NNS_G2dGetAnimCtrlCurrentElement: ; 0x020B06E0
ldr r0, [r0, #0x0]
ldr r0, [r0, #0x0]
bx lr
arm_func_end NNS_G2dGetAnimCtrlCurrentElement
arm_func_start SetAnimCtrlCurrentFrameImpl_
SetAnimCtrlCurrentFrameImpl_: ; 0x020B06EC
ldr r3, [r0, #0x18]
ldrh r2, [r3, #0x0]
cmp r1, r2
ldrcc r2, [r3, #0xc]
addcc r1, r2, r1, lsl #0x3
strcc r1, [r0, #0x0]
movcc r0, #0x1
movcs r0, #0x0
bx lr
arm_func_end SetAnimCtrlCurrentFrameImpl_
arm_func_start SequenceEdgeHandle_
SequenceEdgeHandle_: ; 0x020B0710
stmdb sp!, {r4,lr}
mov r4, r0
ldr r0, [r4, #0x14]
cmp r0, #0x0
ldreq r0, [r4, #0x18]
ldreq r0, [r0, #0x8]
cmp r0, #0x3
beq _020B0738
cmp r0, #0x4
bne _020B07B4
_020B0738:
ldr r0, [r4, #0x4]
eor r0, r0, #0x1
str r0, [r4, #0x4]
ldr r1, [r4, #0x18]
ldr r2, [r4, #0x0]
ldrh r0, [r1, #0x2]
ldr r1, [r1, #0xc]
add r0, r1, r0, lsl #0x3
sub r0, r0, #0x8
cmp r2, r0
bhi _020B0800
ldr r0, [r4, #0x1c]
cmp r0, #0x1
bne _020B0780
ldr r0, [r4, #0x20]
ldr r1, [r4, #0xc]
ldr r2, [r4, #0x24]
blx r2
_020B0780:
ldr r0, [r4, #0x14]
cmp r0, #0x0
ldreq r0, [r4, #0x18]
ldreq r0, [r0, #0x8]
cmp r0, #0x2
beq _020B07A8
cmp r0, #0x4
movne r0, #0x0
strne r0, [r4, #0x8]
bne _020B0800
_020B07A8:
mov r0, r4
bl NNS_G2dResetAnimCtrlState
b _020B0800
_020B07B4:
ldr r0, [r4, #0x1c]
cmp r0, #0x1
bne _020B07D0
ldr r0, [r4, #0x20]
ldr r1, [r4, #0xc]
ldr r2, [r4, #0x24]
blx r2
_020B07D0:
ldr r0, [r4, #0x14]
cmp r0, #0x0
ldreq r0, [r4, #0x18]
ldreq r0, [r0, #0x8]
cmp r0, #0x2
beq _020B07F8
cmp r0, #0x4
movne r0, #0x0
strne r0, [r4, #0x8]
bne _020B0800
_020B07F8:
mov r0, r4
bl NNS_G2dResetAnimCtrlState
_020B0800:
ldr r1, [r4, #0x18]
ldr r2, [r4, #0x0]
ldrh r0, [r1, #0x0]
ldr r1, [r1, #0xc]
add r0, r1, r0, lsl #0x3
sub r0, r0, #0x8
cmp r2, r0
strhi r0, [r4, #0x0]
ldmhiia sp!, {r4,pc}
cmp r2, r1
strcc r1, [r4, #0x0]
ldmia sp!, {r4,pc}
arm_func_end SequenceEdgeHandle_

View File

@@ -0,0 +1,417 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G2dMakeCellToOams
NNS_G2dMakeCellToOams: ; 0x020B1AF8
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x34
ldrh r5, [r2, #0x0]
ldr r4, [sp, #0x60]
ldr r10, [sp, #0x58]
str r4, [sp, #0x60]
cmp r1, r5
movcs r1, r5
mov r4, #0x0
cmp r1, #0x0
str r4, [sp, #0x0]
bls _020B1E7C
ldrh r4, [sp, #0x5c]
mov r4, r4, lsl #0x19
str r4, [sp, #0x4]
ldr r4, [sp, #0x0]
str r4, [sp, #0x14]
mov r4, #0x100
str r4, [sp, #0xc]
mov r4, #0x300
str r4, [sp, #0x8]
mov r4, #0x1
str r4, [sp, #0x10]
_020B1B54:
ldr r5, [sp, #0x0]
mov r6, #0x6
mul r6, r5, r6
ldr r8, [r2, #0x4]
ldr r4, [sp, #0x0]
add r7, r0, r5, lsl #0x3
ldrh r5, [r8, r6]
mov r4, r4, lsl #0x3
add r9, r8, r6
strh r5, [r0, r4]
ldrh r4, [r9, #0x2]
cmp r3, #0x0
strh r4, [r7, #0x2]
ldrh r4, [r9, #0x4]
strh r4, [r7, #0x4]
bne _020B1B9C
cmp r10, #0x0
beq _020B1E60
_020B1B9C:
ldr r5, [r7, #0x0]
ldr r4, _020B1E88 ; =0x01FF0000
and r4, r5, r4
mov r4, r4, lsr #0x10
mov r4, r4, lsl #0x10
mov r4, r4, asr #0x10
cmp r4, #0xff
orrgt r4, r4, #0xff00
movgt r4, r4, lsl #0x10
movgt r4, r4, asr #0x10
mov r4, r4, lsl #0xc
str r4, [sp, #0x20]
ldr r4, [r7, #0x0]
and r4, r4, #0xff
mov r4, r4, lsl #0x10
mov r4, r4, asr #0x10
cmp r4, #0x7f
orrgt r4, r4, #0xff00
movgt r4, r4, lsl #0x10
movgt r4, r4, asr #0x10
mov r4, r4, lsl #0xc
str r4, [sp, #0x24]
cmp r3, #0x0
beq _020B1E00
ldr r5, [r7, #0x0]
and r6, r5, #0x300
cmp r6, #0x100
beq _020B1C1C
cmp r6, #0x300
beq _020B1C1C
and r4, r5, #0x30000000
orr r6, r6, r4
_020B1C1C:
cmp r6, #0x300
bne _020B1C70
ldr r4, _020B1E8C ; =0xC000C000
ldr r8, _020B1E90 ; =NNSi_objSizeWTbl
and r5, r5, r4
and r4, r5, #0xc000
mov r6, r4, asr #0xe
and r4, r5, #0xc0000000
mov r4, r4, lsr #0x1e
mov r4, r4, lsl #0x1
add r8, r8, r6, lsl #0x3
ldrh r9, [r4, r8]
ldr r8, _020B1E94 ; =NNSi_objSizeHTbl
ldr r5, [sp, #0x20]
add r6, r8, r6, lsl #0x3
add r5, r5, r9, lsl #0xb
str r5, [sp, #0x20]
ldrh r4, [r4, r6]
ldr r5, [sp, #0x24]
add r4, r5, r4, lsl #0xb
str r4, [sp, #0x24]
_020B1C70:
ldr r4, [sp, #0x60]
ldr r5, [r3, #0x8]
cmp r4, #0x0
ldrne r8, [sp, #0x8]
add r4, sp, #0x20
ldreq r8, [sp, #0xc]
mov r6, r4
cmp r8, #0x300
ldreq r9, [sp, #0x10]
mov r12, #0x1000
ldrne r9, [sp, #0x14]
cmp r4, r4
ldr r4, [sp, #0x24]
addeq r6, sp, #0x28
smull r11, r4, r5, r4
adds r5, r11, r12
adc r11, r4, #0x0
ldr r4, [r3, #0x0]
ldr lr, [sp, #0x20]
smlal r5, r11, r4, lr
mov r4, r5, lsr #0xc
orr r4, r4, r11, lsl #0x14
str r4, [r6, #0x0]
ldr r4, [r3, #0xc]
ldr r5, [sp, #0x24]
ldr lr, [r3, #0x4]
smull r11, r5, r4, r5
adds r11, r11, r12
adc r4, r5, #0x0
add r5, sp, #0x28
cmp r6, r5
ldr r5, [sp, #0x20]
smlal r11, r4, lr, r5
mov r5, r11, lsr #0xc
orr r5, r5, r4, lsl #0x14
str r5, [r6, #0x4]
ldreq r5, [sp, #0x28]
ldreq r4, [sp, #0x2c]
streq r5, [sp, #0x20]
streq r4, [sp, #0x24]
cmp r8, #0x100
beq _020B1D38
cmp r8, #0x300
beq _020B1D38
ldr r5, [r7, #0x0]
ldr r4, _020B1E98 ; =0xC1FFFCFF
and r4, r5, r4
orr r4, r4, r8
str r4, [r7, #0x0]
b _020B1D54
_020B1D38:
ldr r5, [r7, #0x0]
ldr r4, _020B1E98 ; =0xC1FFFCFF
and r4, r5, r4
orr r5, r4, r8
ldr r4, [sp, #0x4]
orr r4, r4, r5
str r4, [r7, #0x0]
_020B1D54:
ldr r6, [r7, #0x0]
ldr r5, _020B1E8C ; =0xC000C000
cmp r9, #0x0
and r8, r6, r5
and r5, r8, #0xc000
mov r6, r5, asr #0xe
and r5, r8, #0xc0000000
ldr r8, _020B1E90 ; =NNSi_objSizeWTbl
mov r5, r5, lsr #0x1e
mov r5, r5, lsl #0x1
add r8, r8, r6, lsl #0x3
ldrh r9, [r5, r8]
ldr r8, _020B1E94 ; =NNSi_objSizeHTbl
ldr r4, [sp, #0x20]
add r6, r8, r6, lsl #0x3
mov r11, r9, asr #0x1
ldrh r5, [r5, r6]
mov r8, r11, lsl #0xc
ldr r6, [r3, #0x0]
rsb r12, r8, #0x0
mov r9, r5, asr #0x1
mla r12, r6, r11, r12
ldr r5, [r3, #0x8]
mla r6, r5, r9, r12
add r6, r4, r6
str r6, [sp, #0x20]
ldr r12, [r3, #0x4]
mov r5, r9, lsl #0xc
str r12, [sp, #0x1c]
ldr r12, [r3, #0xc]
rsb lr, r5, #0x0
str r12, [sp, #0x18]
ldr r12, [sp, #0x1c]
ldr r4, [sp, #0x24]
mla r11, r12, r11, lr
ldr r12, [sp, #0x18]
subne r6, r6, r8
mla r9, r12, r9, r11
add r4, r4, r9
str r4, [sp, #0x24]
subne r4, r4, r5
strne r6, [sp, #0x20]
strne r4, [sp, #0x24]
_020B1E00:
cmp r10, #0x0
beq _020B1E28
ldr r6, [sp, #0x20]
ldr r4, [r10, #0x0]
ldr r5, [sp, #0x24]
add r4, r6, r4
str r4, [sp, #0x20]
ldr r4, [r10, #0x4]
add r4, r5, r4
str r4, [sp, #0x24]
_020B1E28:
ldr r4, [sp, #0x20]
ldr r6, [r7, #0x0]
add r5, r4, #0x800
ldr r4, _020B1E9C ; =0x000001FF
and r4, r4, r5, asr #0xc
ldr r5, _020B1EA0 ; =0xFE00FF00
and r6, r6, r5
ldr r5, [sp, #0x24]
add r5, r5, #0x800
mov r5, r5, asr #0xc
and r5, r5, #0xff
orr r5, r6, r5
orr r4, r5, r4, lsl #0x10
str r4, [r7, #0x0]
_020B1E60:
ldr r4, [sp, #0x0]
add r4, r4, #0x1
mov r4, r4, lsl #0x10
mov r4, r4, lsr #0x10
str r4, [sp, #0x0]
cmp r4, r1
blo _020B1B54
_020B1E7C:
mov r0, r1
add sp, sp, #0x34
ldmia sp!, {r4-r11,pc}
.balign 4
_020B1E88: .word 0x01FF0000
_020B1E8C: .word 0xC000C000
_020B1E90: .word NNSi_objSizeWTbl
_020B1E94: .word NNSi_objSizeHTbl
_020B1E98: .word 0xC1FFFCFF
_020B1E9C: .word 0x000001FF
_020B1EA0: .word 0xFE00FF00
arm_func_end NNS_G2dMakeCellToOams
arm_func_start NNS_G2dSetCellAnimationCurrentFrame
NNS_G2dSetCellAnimationCurrentFrame: ; 0x020B1EA4
stmdb sp!, {r4,lr}
mov r4, r0
bl NNS_G2dSetAnimCtrlCurrentFrame
cmp r0, #0x0
ldmeqia sp!, {r4,pc}
mov r0, r4
bl ApplyCurrentAnimResult_
ldmia sp!, {r4,pc}
arm_func_end NNS_G2dSetCellAnimationCurrentFrame
arm_func_start NNS_G2dTickCellAnimation
NNS_G2dTickCellAnimation: ; 0x020B1EC4
stmdb sp!, {r4,lr}
mov r4, r0
bl NNS_G2dTickAnimCtrl
cmp r0, #0x0
ldmeqia sp!, {r4,pc}
mov r0, r4
bl ApplyCurrentAnimResult_
ldmia sp!, {r4,pc}
arm_func_end NNS_G2dTickCellAnimation
arm_func_start NNS_G2dSetCellAnimationSequence
NNS_G2dSetCellAnimationSequence: ; 0x020B1EE4
stmdb sp!, {r4,lr}
mov r4, r0
bl NNS_G2dBindAnimCtrl
mov r0, r4
bl ApplyCurrentAnimResult_
ldmia sp!, {r4,pc}
arm_func_end NNS_G2dSetCellAnimationSequence
arm_func_start NNS_G2dInitCellAnimationVramTransfered
NNS_G2dInitCellAnimationVramTransfered: ; 0x020B1EFC
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x14
mov r4, r2
ldr r2, [r4, #0xc]
mov r5, r1
ldr r1, [r2, #0x0]
ldr r2, [sp, #0x34]
str r1, [sp, #0x0]
ldr r1, [sp, #0x38]
str r2, [sp, #0x4]
mov r6, r3
mov r7, r0
ldr r12, [sp, #0x3c]
str r1, [sp, #0x8]
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x2c]
ldr r3, [sp, #0x30]
mov r0, r6
str r12, [sp, #0xc]
bl NNSi_G2dInitCellTransferState
str r6, [r7, #0x34]
str r4, [r7, #0x30]
add r0, r7, #0x38
mov r1, #0x1
str r6, [r7, #0x34]
bl NNSi_G2dSrtcInitControl
mov r0, r7
bl NNS_G2dInitAnimCtrl
mov r0, r7
mov r1, r5
bl NNS_G2dSetCellAnimationSequence
add sp, sp, #0x14
ldmia sp!, {r4-r7,pc}
arm_func_end NNS_G2dInitCellAnimationVramTransfered
arm_func_start NNS_G2dInitCellAnimation
NNS_G2dInitCellAnimation: ; 0x020B1F80
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r1
str r2, [r5, #0x30]
mvn r2, #0x0
add r0, r5, #0x38
mov r1, #0x1
str r2, [r5, #0x34]
bl NNSi_G2dSrtcInitControl
mov r0, r5
bl NNS_G2dInitAnimCtrl
mov r0, r5
mov r1, r4
bl NNS_G2dSetCellAnimationSequence
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end NNS_G2dInitCellAnimation
arm_func_start ApplyCurrentAnimResult_
ApplyCurrentAnimResult_: ; 0x020B1FC4
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r5, r0
ldr r1, [r5, #0x0]
ldrh r1, [r1, #0x4]
cmp r1, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,pc}
bl NNS_G2dGetAnimCtrlCurrentElement
mov r4, r0
ldr r7, [r5, #0x30]
ldrh r1, [r4, #0x0]
mov r0, r7
bl NNS_G2dGetCellDataByIdx
str r0, [r5, #0x2c]
ldr r1, [r5, #0x18]
add r0, r5, #0x38
ldr r2, [r1, #0x4]
mov r1, #0x1
and r6, r2, #0xff
bl NNSi_G2dSrtcInitControl
cmp r6, #0x0
beq _020B2068
cmp r6, #0x2
bne _020B203C
ldrsh r1, [r4, #0x4]
ldrsh r2, [r4, #0x6]
add r0, r5, #0x38
bl NNSi_G2dSrtcSetTrans
b _020B2068
_020B203C:
ldr r1, [r4, #0x4]
ldr r2, [r4, #0x8]
add r0, r5, #0x38
bl NNSi_G2dSrtcSetSRTScale
ldrh r1, [r4, #0x2]
add r0, r5, #0x38
bl NNSi_G2dSrtcSetSRTRotZ
ldrsh r1, [r4, #0xc]
ldrsh r2, [r4, #0xe]
add r0, r5, #0x38
bl NNSi_G2dSrtcSetTrans
_020B2068:
ldr r2, [r7, #0xc]
cmp r2, #0x0
movne r0, #0x1
moveq r0, #0x0
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,pc}
ldr r1, [r5, #0x34]
mvn r0, #0x0
cmp r1, r0
movne r0, #0x1
moveq r0, #0x0
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,pc}
ldrh r1, [r4, #0x0]
ldr r2, [r2, #0x4]
ldr r0, [r5, #0x34]
add r3, r2, r1, lsl #0x3
ldr r1, [r2, r1, lsl #0x3]
ldr r2, [r3, #0x4]
bl NNS_G2dSetCellTransferStateRequested
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end ApplyCurrentAnimResult_

View File

@@ -0,0 +1,286 @@
.include "asm/macros.inc"
.include "global.inc"
.section .rodata
.global cvtTbl$7926
cvtTbl$7926: ; 0x020FF8C4
.byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00
; static const in function
.section .bss
.global s_pTaskRegisterFunc
s_pTaskRegisterFunc: ; 0x021CECFC
.space 0x4
.global s_numCellState
s_numCellState: ; 0x021CED00
.space 0x4
.global s_pCellStateArray
s_pCellStateArray: ; 0x021CED04
.space 0x4
.section .text
arm_func_start NNS_G2dFreeCellTransferStateHandle
NNS_G2dFreeCellTransferStateHandle: ; 0x020B4358
stmdb sp!, {r4,lr}
ldr r2, _020B43A0 ; =s_pCellStateArray
mov r1, #0x30
ldr r2, [r2, #0x0]
mla r4, r0, r1, r2
mov r0, r4
bl NNSi_G2dInitializeVRamLocation
mov r0, #0x0
str r0, [r4, #0xc]
str r0, [r4, #0x10]
str r0, [r4, #0x14]
str r0, [r4, #0x18]
str r0, [r4, #0x1c]
str r0, [r4, #0x20]
str r0, [r4, #0x24]
str r0, [r4, #0x28]
str r0, [r4, #0x2c]
ldmia sp!, {r4,pc}
.balign 4
_020B43A0: .word s_pCellStateArray
arm_func_end NNS_G2dFreeCellTransferStateHandle
arm_func_start NNS_G2dGetNewCellTransferStateHandle
NNS_G2dGetNewCellTransferStateHandle: ; 0x020B43A4
ldr r1, _020B43F8 ; =s_numCellState
mov r0, #0x0
ldr r3, [r1, #0x0]
cmp r3, #0x0
bls _020B43F0
ldr r1, _020B43FC ; =s_pCellStateArray
ldr r2, [r1, #0x0]
mov r12, r2
_020B43C4:
ldr r1, [r12, #0x1c]
cmp r1, #0x1
movne r1, #0x30
mlane r1, r0, r1, r2
movne r2, #0x1
strne r2, [r1, #0x1c]
bxne lr
add r0, r0, #0x1
cmp r0, r3
add r12, r12, #0x30
blo _020B43C4
_020B43F0:
mvn r0, #0x0
bx lr
.balign 4
_020B43F8: .word s_numCellState
_020B43FC: .word s_pCellStateArray
arm_func_end NNS_G2dGetNewCellTransferStateHandle
arm_func_start NNS_G2dSetCellTransferStateRequested
NNS_G2dSetCellTransferStateRequested: ; 0x020B4400
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r1
mov r4, r2
bl NNSi_G2dGetCellTransferState
mvn r1, #0x0
str r1, [r0, #0x24]
str r5, [r0, #0x28]
str r4, [r0, #0x2c]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end NNS_G2dSetCellTransferStateRequested
arm_func_start NNS_G2dUpdateCellTransferStateManager
NNS_G2dUpdateCellTransferStateManager: ; 0x020B442C
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x14
mov r0, #0x0
str r0, [sp, #0x0]
ldr r0, _020B4558 ; =s_numCellState
ldr r0, [r0, #0x0]
cmp r0, #0x0
addls sp, sp, #0x14
ldmlsia sp!, {r4-r11,pc}
ldr r0, [sp, #0x0]
mov r5, #0x1
str r0, [sp, #0x4]
mov r11, r0
str r0, [sp, #0x8]
str r0, [sp, #0xc]
_020B4468:
ldr r0, _020B455C ; =s_pCellStateArray
ldr r1, [r0, #0x0]
ldr r0, [sp, #0x4]
add r8, r1, r0
ldr r0, [r8, #0x1c]
cmp r0, #0x0
beq _020B4528
ldr r9, [sp, #0x8]
mov r0, r9
cmp r0, #0x3
bge _020B4520
add r4, r8, #0x24
_020B4498:
mov r6, r5, lsl r9
mov r1, r11
ldr r0, [r8, #0x24]
ands r0, r0, r6
beq _020B44B8
ldr r0, [r8, #0x20]
ands r0, r0, r6
movne r1, r5
_020B44B8:
cmp r1, #0x0
beq _020B4514
ldr r0, _020B4560 ; =cvtTbl$7926
cmp r9, #0x0
ldr r7, [r0, r9, lsl #0x2]
ldreq r10, [r8, #0x14]
mov r0, r8
mov r1, r9
ldrne r10, [r8, #0x10]
bl NNSi_G2dGetVramLocation
mov r1, r0
mov r0, r7
ldr r7, _020B4564 ; =s_pTaskRegisterFunc
ldr r2, [r8, #0x28]
ldr r3, [r8, #0x2c]
ldr r7, [r7, #0x0]
add r2, r10, r2
blx r7
cmp r0, #0x0
ldrne r1, [r4, #0x0]
mvnne r0, r6
andne r0, r1, r0
strne r0, [r4, #0x0]
_020B4514:
add r9, r9, #0x1
cmp r9, #0x3
blt _020B4498
_020B4520:
ldr r0, [sp, #0xc]
str r0, [r8, #0x20]
_020B4528:
ldr r0, _020B4558 ; =s_numCellState
ldr r1, [r0, #0x0]
ldr r0, [sp, #0x0]
add r0, r0, #0x1
str r0, [sp, #0x0]
cmp r0, r1
ldr r0, [sp, #0x4]
add r0, r0, #0x30
str r0, [sp, #0x4]
blo _020B4468
add sp, sp, #0x14
ldmia sp!, {r4-r11,pc}
.balign 4
_020B4558: .word s_numCellState
_020B455C: .word s_pCellStateArray
_020B4560: .word cvtTbl$7926
_020B4564: .word s_pTaskRegisterFunc
arm_func_end NNS_G2dUpdateCellTransferStateManager
arm_func_start NNS_G2dInitCellTransferStateManager
NNS_G2dInitCellTransferStateManager: ; 0x020B4568
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr ip, _020B45E4 ; =s_pTaskRegisterFunc
movs r6, r1
ldr r1, _020B45E8 ; =s_numCellState
ldr r3, _020B45EC ; =s_pCellStateArray
mov r7, r0
str r2, [r12, #0x0]
mov r5, #0x0
addeq sp, sp, #0x4
str r7, [r3, #0x0]
str r6, [r1, #0x0]
ldmeqia sp!, {r4-r7,pc}
mov r4, r5
_020B45A0:
mov r0, r7
bl NNSi_G2dInitializeVRamLocation
str r4, [r7, #0xc]
str r4, [r7, #0x10]
str r4, [r7, #0x14]
str r4, [r7, #0x18]
str r4, [r7, #0x1c]
str r4, [r7, #0x20]
str r4, [r7, #0x24]
str r4, [r7, #0x28]
add r5, r5, #0x1
str r4, [r7, #0x2c]
cmp r5, r6
add r7, r7, #0x30
blo _020B45A0
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020B45E4: .word s_pTaskRegisterFunc
_020B45E8: .word s_numCellState
_020B45EC: .word s_pCellStateArray
arm_func_end NNS_G2dInitCellTransferStateManager
arm_func_start NNSi_G2dInitCellTransferState
NNSi_G2dInitCellTransferState: ; 0x020B45F0
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr ip, _020B4698 ; =s_pCellStateArray
mov r4, #0x30
ldr r12, [r12, #0x0]
mov r7, r1
mla r4, r0, r4, r12
mov r0, r4
mov r6, r2
mov r5, r3
bl NNSi_G2dInitializeVRamLocation
mvn r0, #0x0
cmp r7, r0
beq _020B4638
mov r0, r4
mov r2, r7
mov r1, #0x0
bl NNSi_G2dSetVramLocation
_020B4638:
mvn r0, #0x0
cmp r6, r0
beq _020B4654
mov r0, r4
mov r2, r6
mov r1, #0x1
bl NNSi_G2dSetVramLocation
_020B4654:
mvn r0, #0x0
cmp r5, r0
beq _020B4670
mov r0, r4
mov r2, r5
mov r1, #0x2
bl NNSi_G2dSetVramLocation
_020B4670:
ldr r1, [sp, #0x18]
ldr r0, [sp, #0x1c]
str r1, [r4, #0xc]
ldr r1, [sp, #0x20]
str r0, [r4, #0x10]
ldr r0, [sp, #0x24]
str r1, [r4, #0x14]
str r0, [r4, #0x18]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020B4698: .word s_pCellStateArray
arm_func_end NNSi_G2dInitCellTransferState
arm_func_start NNSi_G2dGetCellTransferState
NNSi_G2dGetCellTransferState: ; 0x020B469C
ldr r2, _020B46B0 ; =s_pCellStateArray
mov r1, #0x30
ldr r2, [r2, #0x0]
mla r0, r1, r0, r2
bx lr
.balign 4
_020B46B0: .word s_pCellStateArray
arm_func_end NNSi_G2dGetCellTransferState

File diff suppressed because it is too large Load Diff

284
arm9/asm/NNS_G2D_g2d_font.s Normal file
View File

@@ -0,0 +1,284 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dFontGetTextRect
NNSi_G2dFontGetTextRect: ; 0x020B5ABC
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0xc
add r5, sp, #0x0
mov r4, #0x0
str r4, [r5, #0x0]
str r4, [r5, #0x4]
mov r8, r2
ldr r2, [sp, #0x28]
mov r5, r0
mov r9, r1
mov r4, r3
cmp r2, #0x0
mov r7, #0x1
beq _020B5B24
add r6, sp, #0x28
_020B5AF8:
mov r0, r9
mov r1, r8
mov r3, r6
bl NNSi_G2dFontGetStringWidth
ldr r1, [sp, #0x0]
ldr r2, [sp, #0x28]
cmp r0, r1
strgt r0, [sp, #0x0]
add r7, r7, #0x1
cmp r2, #0x0
bne _020B5AF8
_020B5B24:
ldr r0, [r9, #0x0]
sub r2, r7, #0x1
ldrsb r1, [r0, #0x1]
ldr r0, [sp, #0x0]
add r1, r4, r1
mul r1, r2, r1
sub r1, r1, r4
str r1, [sp, #0x4]
str r0, [r5, #0x0]
str r1, [r5, #0x4]
add sp, sp, #0xc
ldmia sp!, {r4-r9,pc}
arm_func_end NNSi_G2dFontGetTextRect
arm_func_start NNSi_G2dFontGetTextHeight
NNSi_G2dFontGetTextHeight: ; 0x020B5B54
stmdb sp!, {r4-r8,lr}
sub sp, sp, #0x10
str r2, [sp, #0x0]
add r3, sp, #0x4
mov r2, #0x0
str r2, [r3, #0x0]
mov r8, r0
str r2, [r3, #0x4]
ldr r7, [r8, #0x4]
add r0, sp, #0x0
mov r5, r1
mov r4, #0x1
blx r7
cmp r0, #0x0
beq _020B5BAC
add r6, sp, #0x0
_020B5B94:
cmp r0, #0xa
mov r0, r6
addeq r4, r4, #0x1
blx r7
cmp r0, #0x0
bne _020B5B94
_020B5BAC:
ldr r0, [r8, #0x0]
ldrsb r0, [r0, #0x1]
add r0, r5, r0
mul r0, r4, r0
sub r0, r0, r5
add sp, sp, #0x10
ldmia sp!, {r4-r8,pc}
arm_func_end NNSi_G2dFontGetTextHeight
arm_func_start NNSi_G2dFontGetStringWidth
NNSi_G2dFontGetStringWidth: ; 0x020B5BC8
stmdb sp!, {r4-r10,lr}
sub sp, sp, #0x8
mov r8, r0
str r2, [sp, #0x0]
ldr r4, [r8, #0x4]
add r0, sp, #0x0
mov r7, r1
mov r6, r3
mov r5, #0x0
blx r4
movs r1, r0
beq _020B5C58
ldr sb, _020B5C84 ; =0x0000FFFF
add r10, sp, #0x0
_020B5C00:
cmp r1, #0xa
beq _020B5C58
mov r0, r8
bl NNS_G2dFontFindGlyphIndex
mov r1, r0
cmp r1, r9
ldreq r0, [r8, #0x0]
ldreqh r1, [r0, #0x2]
mov r0, r8
bl NNS_G2dFontGetCharWidthsFromIndex
ldrh r1, [r8, #0x8]
cmp r1, #0x0
ldrnesb r1, [r0, #0x0]
ldrneb r0, [r0, #0x1]
addne r0, r1, r0
ldreqsb r0, [r0, #0x2]
add r1, r7, r0
mov r0, r10
add r5, r5, r1
blx r4
movs r1, r0
bne _020B5C00
_020B5C58:
cmp r6, #0x0
beq _020B5C70
cmp r1, #0xa
ldreq r0, [sp, #0x0]
movne r0, #0x0
str r0, [r6, #0x0]
_020B5C70:
cmp r5, #0x0
subgt r5, r5, r7
mov r0, r5
add sp, sp, #0x8
ldmia sp!, {r4-r10,pc}
.balign 4
_020B5C84: .word 0x0000FFFF
arm_func_end NNSi_G2dFontGetStringWidth
arm_func_start NNS_G2dFontGetCharWidthsFromIndex
NNS_G2dFontGetCharWidthsFromIndex: ; 0x020B5C88
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r3, [r0, #0x0]
ldr lr, [r3, #0xc]
cmp lr, #0x0
beq _020B5CD8
_020B5CA0:
ldrh r12, [lr, #0x0]
cmp r12, r1
bhi _020B5CCC
ldrh r2, [lr, #0x2]
cmp r1, r2
ldrlsh r2, [r0, #0xa]
addls r3, lr, #0x8
subls r0, r1, r12
mlals r0, r2, r0, r3
addls sp, sp, #0x4
ldmlsia sp!, {pc}
_020B5CCC:
ldr lr, [lr, #0x4]
cmp lr, #0x0
bne _020B5CA0
_020B5CD8:
add r0, r3, #0x4
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_G2dFontGetCharWidthsFromIndex
arm_func_start NNS_G2dFontFindGlyphIndex
NNS_G2dFontFindGlyphIndex: ; 0x020B5CE4
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, [r0, #0x0]
ldr r0, [r0, #0x10]
cmp r0, #0x0
beq _020B5D2C
_020B5CFC:
ldrh r2, [r0, #0x0]
cmp r2, r1
bhi _020B5D20
ldrh r2, [r0, #0x2]
cmp r1, r2
bhi _020B5D20
bl GetGlyphIndex
add sp, sp, #0x4
ldmia sp!, {pc}
_020B5D20:
ldr r0, [r0, #0x8]
cmp r0, #0x0
bne _020B5CFC
_020B5D2C:
ldr r0, _020B5D38 ; =0x0000FFFF
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020B5D38: .word 0x0000FFFF
arm_func_end NNS_G2dFontFindGlyphIndex
arm_func_start NNS_G2dFontInitUTF16
NNS_G2dFontInitUTF16: ; 0x020B5D3C
stmdb sp!, {r4,lr}
mov r4, r0
mov r0, r1
mov r1, r4
bl NNSi_G2dGetUnpackedFont
sub r0, r0, #0x1
strh r0, [r4, #0x8]
ldrh r0, [r4, #0x8]
cmp r0, #0x0
movne r1, #0x2
moveq r1, #0x3
ldr r0, _020B5D78 ; =NNSi_G2dSplitCharUTF16
strh r1, [r4, #0xa]
str r0, [r4, #0x4]
ldmia sp!, {r4,pc}
.balign 4
_020B5D78: .word NNSi_G2dSplitCharUTF16
arm_func_end NNS_G2dFontInitUTF16
arm_func_start GetGlyphIndex
GetGlyphIndex: ; 0x020B5D7C
stmdb sp!, {lr}
sub sp, sp, #0x4
ldrh r3, [r0, #0x4]
ldr r2, _020B5E4C ; =0x0000FFFF
cmp r3, #0x0
beq _020B5DA8
cmp r3, #0x1
beq _020B5DC4
cmp r3, #0x2
beq _020B5DD8
b _020B5E40
_020B5DA8:
ldrh r2, [r0, #0x0]
ldrh r3, [r0, #0xc]
sub r0, r1, r2
add r0, r3, r0
mov r0, r0, lsl #0x10
mov r2, r0, lsr #0x10
b _020B5E40
_020B5DC4:
ldrh r2, [r0, #0x0]
sub r1, r1, r2
add r0, r0, r1, lsl #0x1
ldrh r2, [r0, #0xc]
b _020B5E40
_020B5DD8:
ldrh r3, [r0, #0xc]
add r0, r0, #0xc
add r0, r0, #0x2
sub r3, r3, #0x1
add lr, r0, r3, lsl #0x2
cmp r0, lr
bhi _020B5E40
_020B5DF4:
sub r12, lr, r0
mov r3, r12, asr #0x1
add r3, r12, r3, lsr #0x1e
mov r3, r3, asr #0x2
add r3, r3, r3, lsr #0x1f
mov r12, r3, asr #0x1
mov r3, r12, lsl #0x2
ldrh r3, [r0, r3]
add r12, r0, r12, lsl #0x2
cmp r3, r1
addcc r0, r12, #0x4
blo _020B5E38
cmp r1, r3
subcc lr, r12, #0x4
blo _020B5E38
ldrh r2, [r12, #0x2]
b _020B5E40
_020B5E38:
cmp r0, lr
bls _020B5DF4
_020B5E40:
mov r0, r2
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020B5E4C: .word 0x0000FFFF
arm_func_end GetGlyphIndex

View File

@@ -0,0 +1,780 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dGetVramLocation
NNSi_G2dGetVramLocation: ; 0x020B10BC
ldr r0, [r0, r1, lsl #0x2]
bx lr
arm_func_end NNSi_G2dGetVramLocation
arm_func_start NNSi_G2dSetVramLocation
NNSi_G2dSetVramLocation: ; 0x020B10C4
str r2, [r0, r1, lsl #0x2]
bx lr
arm_func_end NNSi_G2dSetVramLocation
arm_func_start NNSi_G2dInitializeVRamLocation
NNSi_G2dInitializeVRamLocation: ; 0x020B10CC
mov r2, #0x0
mvn r1, #0x0
_020B10D4:
str r1, [r0, r2, lsl #0x2]
add r2, r2, #0x1
cmp r2, #0x3
blt _020B10D4
bx lr
arm_func_end NNSi_G2dInitializeVRamLocation
arm_func_start NNS_G2dLoadPaletteEx
NNS_G2dLoadPaletteEx: ; 0x020B10E8
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x4
mov r10, r0
ldr r0, [r10, #0x0]
mov r9, r1
cmp r0, #0x3
ldr r0, [sp, #0x28]
moveq r7, #0x20
str r0, [sp, #0x28]
ldrh r0, [r9, #0x0]
movne r7, #0x200
mov r11, r2
mov r8, r3
str r0, [sp, #0x0]
mov r6, #0x0
cmp r0, #0x0
bls _020B1210
_020B112C:
ldr r1, [r9, #0x4]
mov r0, r6, lsl #0x1
ldrh r2, [r1, r0]
ldr r0, [r10, #0xc]
ldr r1, [r10, #0x8]
mla r5, r7, r2, r11
mla r4, r7, r6, r0
bl DC_FlushRange
cmp r8, #0x0
beq _020B11E0
cmp r8, #0x1
beq _020B1168
cmp r8, #0x2
beq _020B11A4
b _020B11F8
_020B1168:
ldr r0, [r10, #0x4]
cmp r0, #0x0
beq _020B1190
bl GX_BeginLoadOBJExtPltt
mov r0, r4
mov r1, r5
mov r2, r7
bl GX_LoadOBJExtPltt
bl GX_EndLoadOBJExtPltt
b _020B11F8
_020B1190:
mov r0, r4
mov r1, r5
mov r2, r7
bl GX_LoadOBJPltt
b _020B11F8
_020B11A4:
ldr r0, [r10, #0x4]
cmp r0, #0x0
beq _020B11CC
bl GXS_BeginLoadOBJExtPltt
mov r0, r4
mov r1, r5
mov r2, r7
bl GXS_LoadOBJExtPltt
bl GXS_EndLoadOBJExtPltt
b _020B11F8
_020B11CC:
mov r0, r4
mov r1, r5
mov r2, r7
bl GXS_LoadOBJPltt
b _020B11F8
_020B11E0:
bl GX_BeginLoadTexPltt
mov r0, r4
mov r1, r5
mov r2, r7
bl GX_LoadTexPltt
bl GX_EndLoadTexPltt
_020B11F8:
add r0, r6, #0x1
mov r0, r0, lsl #0x10
mov r6, r0, lsr #0x10
ldr r0, [sp, #0x0]
cmp r6, r0
blo _020B112C
_020B1210:
ldr r0, [sp, #0x28]
ldr r2, [r10, #0x0]
mov r1, r0
str r2, [r1, #0x0]
ldr r4, [r10, #0x4]
mov r3, r0
mov r1, r8
mov r2, r11
str r4, [r3, #0x4]
bl NNS_G2dSetImagePaletteLocation
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
arm_func_end NNS_G2dLoadPaletteEx
arm_func_start NNS_G2dLoadPalette
NNS_G2dLoadPalette: ; 0x020B1240
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
mov r9, r0
ldr r5, [r9, #0xc]
ldr r4, [r9, #0x8]
mov r8, r1
mov r7, r2
mov r0, r5
mov r1, r4
mov r6, r3
bl DC_FlushRange
cmp r7, #0x0
beq _020B1300
cmp r7, #0x1
beq _020B1288
cmp r7, #0x2
beq _020B12C4
b _020B1318
_020B1288:
ldr r0, [r9, #0x4]
cmp r0, #0x0
beq _020B12B0
bl GX_BeginLoadOBJExtPltt
mov r0, r5
mov r1, r8
mov r2, r4
bl GX_LoadOBJExtPltt
bl GX_EndLoadOBJExtPltt
b _020B1318
_020B12B0:
mov r0, r5
mov r1, r8
mov r2, r4
bl GX_LoadOBJPltt
b _020B1318
_020B12C4:
ldr r0, [r9, #0x4]
cmp r0, #0x0
beq _020B12EC
bl GXS_BeginLoadOBJExtPltt
mov r0, r5
mov r1, r8
mov r2, r4
bl GXS_LoadOBJExtPltt
bl GXS_EndLoadOBJExtPltt
b _020B1318
_020B12EC:
mov r0, r5
mov r1, r8
mov r2, r4
bl GXS_LoadOBJPltt
b _020B1318
_020B1300:
bl GX_BeginLoadTexPltt
mov r0, r5
mov r1, r8
mov r2, r4
bl GX_LoadTexPltt
bl GX_EndLoadTexPltt
_020B1318:
ldr r1, [r9, #0x0]
mov r0, r6
str r1, [r6, #0x0]
ldr r3, [r9, #0x4]
mov r1, r7
mov r2, r8
str r3, [r6, #0x4]
bl NNS_G2dSetImagePaletteLocation
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
arm_func_end NNS_G2dLoadPalette
arm_func_start NNS_G2dLoadImageVramTransfer
NNS_G2dLoadImageVramTransfer: ; 0x020B1340
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
ldr r0, [r7, #0x14]
ldr r1, [r7, #0x10]
mov r5, r2
mov r4, r3
bl DC_FlushRange
cmp r5, #0x0
ldr r0, [r7, #0x8]
beq _020B13B8
cmp r5, #0x1
beq _020B1384
cmp r5, #0x2
beq _020B13A0
b _020B13B8
_020B1384:
mov r3, #0x4000000
ldr r2, [r3, #0x0]
ldr r1, _020B1520 ; =0xFFCFFFEF
and r1, r2, r1
orr r0, r1, r0
str r0, [r3, #0x0]
b _020B13B8
_020B13A0:
ldr r3, _020B1524 ; =0x04001000
ldr r1, _020B1520 ; =0xFFCFFFEF
ldr r2, [r3, #0x0]
and r1, r2, r1
orr r0, r1, r0
str r0, [r3, #0x0]
_020B13B8:
ldr r0, [r7, #0x8]
cmp r0, #0x0
bne _020B14D8
ldrh r0, [r7, #0x2]
cmp r0, #0x10
bgt _020B1408
cmp r0, #0x10
bge _020B1434
cmp r0, #0x8
addls pc, pc, r0, lsl #0x2
b _020B1444
; Jump table
b _020B1444 ; case 0
b _020B1414 ; case 1
b _020B141C ; case 2
b _020B1444 ; case 3
b _020B1424 ; case 4
b _020B1444 ; case 5
b _020B1444 ; case 6
b _020B1444 ; case 7
b _020B142C ; case 8
_020B1408:
cmp r0, #0x20
beq _020B143C
b _020B1444
_020B1414:
mov r0, #0x0
b _020B1448
_020B141C:
mov r0, #0x1
b _020B1448
_020B1424:
mov r0, #0x2
b _020B1448
_020B142C:
mov r0, #0x3
b _020B1448
_020B1434:
mov r0, #0x4
b _020B1448
_020B143C:
mov r0, #0x5
b _020B1448
_020B1444:
mov r0, #0x0
_020B1448:
str r0, [r4, #0xc]
ldrh r0, [r7, #0x0]
cmp r0, #0x10
bgt _020B1490
cmp r0, #0x10
bge _020B14BC
cmp r0, #0x8
addls pc, pc, r0, lsl #0x2
b _020B14CC
; Jump table
b _020B14CC ; case 0
b _020B149C ; case 1
b _020B14A4 ; case 2
b _020B14CC ; case 3
b _020B14AC ; case 4
b _020B14CC ; case 5
b _020B14CC ; case 6
b _020B14CC ; case 7
b _020B14B4 ; case 8
_020B1490:
cmp r0, #0x20
beq _020B14C4
b _020B14CC
_020B149C:
mov r0, #0x0
b _020B14D0
_020B14A4:
mov r0, #0x1
b _020B14D0
_020B14AC:
mov r0, #0x2
b _020B14D0
_020B14B4:
mov r0, #0x3
b _020B14D0
_020B14BC:
mov r0, #0x4
b _020B14D0
_020B14C4:
mov r0, #0x5
b _020B14D0
_020B14CC:
mov r0, #0x0
_020B14D0:
str r0, [r4, #0x10]
b _020B14E8
_020B14D8:
ldrh r0, [r7, #0x2]
str r0, [r4, #0xc]
ldrh r0, [r7, #0x0]
str r0, [r4, #0x10]
_020B14E8:
ldr r1, [r7, #0x4]
mov r0, #0x0
str r1, [r4, #0x14]
str r0, [r4, #0x18]
mov r0, #0x1
str r0, [r4, #0x1c]
ldr r3, [r7, #0x8]
mov r0, r4
mov r1, r5
mov r2, r6
str r3, [r4, #0x20]
bl NNS_G2dSetImageLocation
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020B1520: .word 0xFFCFFFEF
_020B1524: .word 0x04001000
arm_func_end NNS_G2dLoadImageVramTransfer
arm_func_start NNS_G2dLoadImage2DMapping
NNS_G2dLoadImage2DMapping: ; 0x020B1528
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
movs r5, r2
mov r6, r1
mov r4, r3
ldr r0, [r7, #0x8]
beq _020B1590
cmp r5, #0x1
beq _020B155C
cmp r5, #0x2
beq _020B1578
b _020B1590
_020B155C:
mov r3, #0x4000000
ldr r2, [r3, #0x0]
ldr r1, _020B1760 ; =0xFFCFFFEF
and r1, r2, r1
orr r0, r1, r0
str r0, [r3, #0x0]
b _020B1590
_020B1578:
ldr r3, _020B1764 ; =0x04001000
ldr r1, _020B1760 ; =0xFFCFFFEF
ldr r2, [r3, #0x0]
and r1, r2, r1
orr r0, r1, r0
str r0, [r3, #0x0]
_020B1590:
ldr r0, [r7, #0x14]
ldr r1, [r7, #0x10]
bl DC_FlushRange
cmp r5, #0x0
beq _020B15B8
cmp r5, #0x1
beq _020B15D4
cmp r5, #0x2
beq _020B15E8
b _020B15F8
_020B15B8:
bl GX_BeginLoadTex
ldr r0, [r7, #0x14]
ldr r2, [r7, #0x10]
mov r1, r6
bl GX_LoadTex
bl GX_EndLoadTex
b _020B15F8
_020B15D4:
ldr r0, [r7, #0x14]
ldr r2, [r7, #0x10]
mov r1, r6
bl GX_LoadOBJ
b _020B15F8
_020B15E8:
ldr r0, [r7, #0x14]
ldr r2, [r7, #0x10]
mov r1, r6
bl GXS_LoadOBJ
_020B15F8:
ldr r0, [r7, #0x8]
cmp r0, #0x0
bne _020B1718
ldrh r0, [r7, #0x2]
cmp r0, #0x10
bgt _020B1648
cmp r0, #0x10
bge _020B1674
cmp r0, #0x8
addls pc, pc, r0, lsl #0x2
b _020B1684
; Jump table
b _020B1684 ; case 0
b _020B1654 ; case 1
b _020B165C ; case 2
b _020B1684 ; case 3
b _020B1664 ; case 4
b _020B1684 ; case 5
b _020B1684 ; case 6
b _020B1684 ; case 7
b _020B166C ; case 8
_020B1648:
cmp r0, #0x20
beq _020B167C
b _020B1684
_020B1654:
mov r0, #0x0
b _020B1688
_020B165C:
mov r0, #0x1
b _020B1688
_020B1664:
mov r0, #0x2
b _020B1688
_020B166C:
mov r0, #0x3
b _020B1688
_020B1674:
mov r0, #0x4
b _020B1688
_020B167C:
mov r0, #0x5
b _020B1688
_020B1684:
mov r0, #0x0
_020B1688:
str r0, [r4, #0xc]
ldrh r0, [r7, #0x0]
cmp r0, #0x10
bgt _020B16D0
cmp r0, #0x10
bge _020B16FC
cmp r0, #0x8
addls pc, pc, r0, lsl #0x2
b _020B170C
; Jump table
b _020B170C ; case 0
b _020B16DC ; case 1
b _020B16E4 ; case 2
b _020B170C ; case 3
b _020B16EC ; case 4
b _020B170C ; case 5
b _020B170C ; case 6
b _020B170C ; case 7
b _020B16F4 ; case 8
_020B16D0:
cmp r0, #0x20
beq _020B1704
b _020B170C
_020B16DC:
mov r0, #0x0
b _020B1710
_020B16E4:
mov r0, #0x1
b _020B1710
_020B16EC:
mov r0, #0x2
b _020B1710
_020B16F4:
mov r0, #0x3
b _020B1710
_020B16FC:
mov r0, #0x4
b _020B1710
_020B1704:
mov r0, #0x5
b _020B1710
_020B170C:
mov r0, #0x0
_020B1710:
str r0, [r4, #0x10]
b _020B1728
_020B1718:
ldrh r0, [r7, #0x2]
str r0, [r4, #0xc]
ldrh r0, [r7, #0x0]
str r0, [r4, #0x10]
_020B1728:
ldr r1, [r7, #0x4]
mov r0, #0x0
str r1, [r4, #0x14]
str r0, [r4, #0x18]
mov r0, #0x1
str r0, [r4, #0x1c]
ldr r3, [r7, #0x8]
mov r0, r4
mov r1, r5
mov r2, r6
str r3, [r4, #0x20]
bl NNS_G2dSetImageLocation
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020B1760: .word 0xFFCFFFEF
_020B1764: .word 0x04001000
arm_func_end NNS_G2dLoadImage2DMapping
arm_func_start NNS_G2dLoadImage1DMapping
NNS_G2dLoadImage1DMapping: ; 0x020B1768
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
movs r5, r2
mov r6, r1
mov r4, r3
ldr r0, [r7, #0x8]
beq _020B17D0
cmp r5, #0x1
beq _020B179C
cmp r5, #0x2
beq _020B17B8
b _020B17D0
_020B179C:
mov r3, #0x4000000
ldr r2, [r3, #0x0]
ldr r1, _020B19A0 ; =0xFFCFFFEF
and r1, r2, r1
orr r0, r1, r0
str r0, [r3, #0x0]
b _020B17D0
_020B17B8:
ldr r3, _020B19A4 ; =0x04001000
ldr r1, _020B19A0 ; =0xFFCFFFEF
ldr r2, [r3, #0x0]
and r1, r2, r1
orr r0, r1, r0
str r0, [r3, #0x0]
_020B17D0:
ldr r0, [r7, #0x14]
ldr r1, [r7, #0x10]
bl DC_FlushRange
cmp r5, #0x0
beq _020B17F8
cmp r5, #0x1
beq _020B1814
cmp r5, #0x2
beq _020B1828
b _020B1838
_020B17F8:
bl GX_BeginLoadTex
ldr r0, [r7, #0x14]
ldr r2, [r7, #0x10]
mov r1, r6
bl GX_LoadTex
bl GX_EndLoadTex
b _020B1838
_020B1814:
ldr r0, [r7, #0x14]
ldr r2, [r7, #0x10]
mov r1, r6
bl GX_LoadOBJ
b _020B1838
_020B1828:
ldr r0, [r7, #0x14]
ldr r2, [r7, #0x10]
mov r1, r6
bl GXS_LoadOBJ
_020B1838:
ldr r0, [r7, #0x8]
cmp r0, #0x0
bne _020B1958
ldrh r0, [r7, #0x2]
cmp r0, #0x10
bgt _020B1888
cmp r0, #0x10
bge _020B18B4
cmp r0, #0x8
addls pc, pc, r0, lsl #0x2
b _020B18C4
; Jump table
b _020B18C4 ; case 0
b _020B1894 ; case 1
b _020B189C ; case 2
b _020B18C4 ; case 3
b _020B18A4 ; case 4
b _020B18C4 ; case 5
b _020B18C4 ; case 6
b _020B18C4 ; case 7
b _020B18AC ; case 8
_020B1888:
cmp r0, #0x20
beq _020B18BC
b _020B18C4
_020B1894:
mov r0, #0x0
b _020B18C8
_020B189C:
mov r0, #0x1
b _020B18C8
_020B18A4:
mov r0, #0x2
b _020B18C8
_020B18AC:
mov r0, #0x3
b _020B18C8
_020B18B4:
mov r0, #0x4
b _020B18C8
_020B18BC:
mov r0, #0x5
b _020B18C8
_020B18C4:
mov r0, #0x0
_020B18C8:
str r0, [r4, #0xc]
ldrh r0, [r7, #0x0]
cmp r0, #0x10
bgt _020B1910
cmp r0, #0x10
bge _020B193C
cmp r0, #0x8
addls pc, pc, r0, lsl #0x2
b _020B194C
; Jump table
b _020B194C ; case 0
b _020B191C ; case 1
b _020B1924 ; case 2
b _020B194C ; case 3
b _020B192C ; case 4
b _020B194C ; case 5
b _020B194C ; case 6
b _020B194C ; case 7
b _020B1934 ; case 8
_020B1910:
cmp r0, #0x20
beq _020B1944
b _020B194C
_020B191C:
mov r0, #0x0
b _020B1950
_020B1924:
mov r0, #0x1
b _020B1950
_020B192C:
mov r0, #0x2
b _020B1950
_020B1934:
mov r0, #0x3
b _020B1950
_020B193C:
mov r0, #0x4
b _020B1950
_020B1944:
mov r0, #0x5
b _020B1950
_020B194C:
mov r0, #0x0
_020B1950:
str r0, [r4, #0x10]
b _020B1968
_020B1958:
ldrh r0, [r7, #0x2]
str r0, [r4, #0xc]
ldrh r0, [r7, #0x0]
str r0, [r4, #0x10]
_020B1968:
ldr r1, [r7, #0x4]
mov r0, #0x0
str r1, [r4, #0x14]
str r0, [r4, #0x18]
mov r0, #0x1
str r0, [r4, #0x1c]
ldr r3, [r7, #0x8]
mov r0, r4
mov r1, r5
mov r2, r6
str r3, [r4, #0x20]
bl NNS_G2dSetImageLocation
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020B19A0: .word 0xFFCFFFEF
_020B19A4: .word 0x04001000
arm_func_end NNS_G2dLoadImage1DMapping
arm_func_start NNS_G2dIsImagePaletteReadyToUse
NNS_G2dIsImagePaletteReadyToUse: ; 0x020B19A8
add r0, r0, r1, lsl #0x2
ldr r1, [r0, #0x8]
mvn r0, #0x0
cmp r1, r0
movne r0, #0x1
moveq r0, #0x0
bx lr
arm_func_end NNS_G2dIsImagePaletteReadyToUse
arm_func_start NNS_G2dGetImagePaletteLocation
NNS_G2dGetImagePaletteLocation: ; 0x020B19C4
add r0, r0, r1, lsl #0x2
ldr r0, [r0, #0x8]
bx lr
arm_func_end NNS_G2dGetImagePaletteLocation
arm_func_start NNS_G2dSetImagePaletteLocation
NNS_G2dSetImagePaletteLocation: ; 0x020B19D0
add r0, r0, r1, lsl #0x2
str r2, [r0, #0x8]
bx lr
arm_func_end NNS_G2dSetImagePaletteLocation
arm_func_start NNS_G2dInitImagePaletteProxy
NNS_G2dInitImagePaletteProxy: ; 0x020B19DC
mov r3, #0x0
mvn r2, #0x0
_020B19E4:
add r1, r0, r3, lsl #0x2
add r3, r3, #0x1
str r2, [r1, #0x8]
cmp r3, #0x3
blt _020B19E4
bx lr
arm_func_end NNS_G2dInitImagePaletteProxy
arm_func_start NNS_G2dIsImageReadyToUse
NNS_G2dIsImageReadyToUse: ; 0x020B19FC
ldr r1, [r0, r1, lsl #0x2]
mvn r0, #0x0
cmp r1, r0
movne r0, #0x1
moveq r0, #0x0
bx lr
arm_func_end NNS_G2dIsImageReadyToUse
arm_func_start NNS_G2dGetImageLocation
NNS_G2dGetImageLocation: ; 0x020B1A14
ldr r0, [r0, r1, lsl #0x2]
bx lr
arm_func_end NNS_G2dGetImageLocation
arm_func_start NNS_G2dSetImageLocation
NNS_G2dSetImageLocation: ; 0x020B1A1C
str r2, [r0, r1, lsl #0x2]
bx lr
arm_func_end NNS_G2dSetImageLocation
arm_func_start NNS_G2dInitImageProxy
NNS_G2dInitImageProxy: ; 0x020B1A24
mov r2, #0x0
mvn r1, #0x0
_020B1A2C:
str r1, [r0, r2, lsl #0x2]
add r2, r2, #0x1
cmp r2, #0x3
blt _020B1A2C
bx lr
arm_func_end NNS_G2dInitImageProxy

View File

@@ -0,0 +1,55 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dUnpackUserExCellAttrBank
NNSi_G2dUnpackUserExCellAttrBank: ; 0x020B01B0
ldr r1, [r0, #0x4]
mov r12, #0x0
add r1, r1, r0
str r1, [r0, #0x4]
ldrh r1, [r0, #0x0]
cmp r1, #0x0
bxls lr
_020B01CC:
ldr r3, [r0, #0x4]
add r1, r12, #0x1
ldr r2, [r3, r12, lsl #0x2]
mov r1, r1, lsl #0x10
add r2, r0, r2
str r2, [r3, r12, lsl #0x2]
ldrh r2, [r0, #0x0]
mov r12, r1, lsr #0x10
cmp r12, r2
blo _020B01CC
bx lr
arm_func_end NNSi_G2dUnpackUserExCellAttrBank
arm_func_start NNS_G2dFindBinaryBlock
NNS_G2dFindBinaryBlock: ; 0x020B01F8
stmdb sp!, {lr}
sub sp, sp, #0x4
ldrh r2, [r0, #0xc]
ldrh r12, [r0, #0xe]
mov lr, #0x0
add r0, r0, r2
cmp r12, #0x0
bls _020B0244
_020B0218:
ldr r2, [r0, #0x0]
cmp r2, r1
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
add r2, lr, #0x1
mov r2, r2, lsl #0x10
ldr r3, [r0, #0x4]
mov lr, r2, lsr #0x10
cmp lr, r12
add r0, r0, r3
blo _020B0218
_020B0244:
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_G2dFindBinaryBlock

View File

@@ -0,0 +1,490 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G2dInitMCAnimation
NNS_G2dInitMCAnimation: ; 0x020B20C8
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0xc
mov r6, #0x0
str r6, [r0, #0x38]
ldr r7, [sp, #0x30]
str r6, [r0, #0x30]
mov r10, r1
str r7, [r0, #0x34]
str r0, [sp, #0x0]
movs r8, r3
mov r9, r2
str r10, [r0, #0x3c]
ldr r11, [sp, #0x34]
beq _020B215C
mov r0, #0x1
str r6, [sp, #0x8]
str r0, [sp, #0x4]
_020B210C:
mov r0, #0x28
mul r4, r6, r0
ldr r1, [sp, #0x4]
add r0, r10, r4
bl NNSi_G2dInitializeNode
mov r0, #0x54
mla r5, r6, r0, r9
ldr r1, [sp, #0x8]
mov r0, r7
str r5, [r10, r4]
bl NNS_G2dGetAnimSequenceByIdx
mov r1, r0
mov r0, r5
mov r2, r11
bl NNS_G2dInitCellAnimation
add r0, r6, #0x1
mov r0, r0, lsl #0x10
mov r6, r0, lsr #0x10
cmp r6, r8
blo _020B210C
_020B215C:
ldr r0, [sp, #0x0]
bl NNS_G2dInitAnimCtrl
ldr r0, [sp, #0x0]
ldr r3, [sp, #0x38]
ldr r2, [sp, #0x0]
add r0, r0, #0x44
mov r1, #0x1
str r3, [r2, #0x40]
bl NNSi_G2dSrtcInitControl
ldr r0, [sp, #0x0]
mov r1, #0x0
strh r1, [r0, #0x2c]
add sp, sp, #0xc
ldmia sp!, {r4-r11,pc}
arm_func_end NNS_G2dInitMCAnimation
arm_func_start NNS_G2dSetMCAnimationCurrentFrame
NNS_G2dSetMCAnimationCurrentFrame: ; 0x020B2194
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
bl NNS_G2dSetAnimCtrlCurrentFrame
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,pc}
mov r0, r7
bl NNS_G2dGetAnimCtrlCurrentElement
mov r4, r0
ldrh r1, [r4, #0x0]
ldr r0, [r7, #0x40]
bl NNS_G2dGetMultiCellDataByIdx
ldr r1, [r7, #0x18]
mov r6, r0
ldr r1, [r1, #0x4]
add r0, r7, #0x44
and r5, r1, #0xff
mov r1, #0x1
bl NNSi_G2dSrtcInitControl
cmp r5, #0x0
beq _020B2234
cmp r5, #0x2
bne _020B2208
ldrsh r1, [r4, #0x4]
ldrsh r2, [r4, #0x6]
add r0, r7, #0x44
bl NNSi_G2dSrtcSetTrans
b _020B2234
_020B2208:
ldr r1, [r4, #0x4]
ldr r2, [r4, #0x8]
add r0, r7, #0x44
bl NNSi_G2dSrtcSetSRTScale
ldrh r1, [r4, #0x2]
add r0, r7, #0x44
bl NNSi_G2dSrtcSetSRTRotZ
ldrsh r1, [r4, #0xc]
ldrsh r2, [r4, #0xe]
add r0, r7, #0x44
bl NNSi_G2dSrtcSetTrans
_020B2234:
ldrh r2, [r7, #0x2c]
mov r1, r6
add r0, r7, #0x30
bl SetMCDataToMCInstanceImpl_
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end NNS_G2dSetMCAnimationCurrentFrame
arm_func_start NNS_G2dTickMCAnimation
NNS_G2dTickMCAnimation: ; 0x020B224C
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r4, r0
ldr r2, [r4, #0x0]
mov r6, r1
ldrh r5, [r2, #0x4]
bl NNS_G2dTickAnimCtrl
cmp r0, #0x0
beq _020B2318
ldrh r1, [r4, #0x2c]
mov r0, r4
add r1, r1, r5
strh r1, [r4, #0x2c]
bl NNS_G2dGetAnimCtrlCurrentElement
mov r5, r0
ldrh r1, [r5, #0x0]
ldr r0, [r4, #0x40]
bl NNS_G2dGetMultiCellDataByIdx
ldr r1, [r4, #0x18]
mov r7, r0
ldr r1, [r1, #0x4]
add r0, r4, #0x44
and r6, r1, #0xff
mov r1, #0x1
bl NNSi_G2dSrtcInitControl
cmp r6, #0x0
beq _020B2300
cmp r6, #0x2
bne _020B22D4
ldrsh r1, [r5, #0x4]
ldrsh r2, [r5, #0x6]
add r0, r4, #0x44
bl NNSi_G2dSrtcSetTrans
b _020B2300
_020B22D4:
ldr r1, [r5, #0x4]
ldr r2, [r5, #0x8]
add r0, r4, #0x44
bl NNSi_G2dSrtcSetSRTScale
ldrh r1, [r5, #0x2]
add r0, r4, #0x44
bl NNSi_G2dSrtcSetSRTRotZ
ldrsh r1, [r5, #0xc]
ldrsh r2, [r5, #0xe]
add r0, r4, #0x44
bl NNSi_G2dSrtcSetTrans
_020B2300:
ldrh r2, [r4, #0x2c]
mov r1, r7
add r0, r4, #0x30
bl SetMCDataToMCInstanceImpl_
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
_020B2318:
mov r1, r6
add r0, r4, #0x30
bl NNS_G2dTickMCInstance
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end NNS_G2dTickMCAnimation
arm_func_start NNS_G2dTickMCInstance
NNS_G2dTickMCInstance: ; 0x020B232C
stmdb sp!, {r4-r8,lr}
mov r7, r0
ldr r0, [r7, #0x8]
mov r6, r1
cmp r0, #0x1
bne _020B238C
ldr r0, [r7, #0x0]
ldr r4, [r7, #0xc]
ldrh r0, [r0, #0x2]
mov r5, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r8,pc}
mov r8, #0x58
_020B2360:
mla r0, r5, r8, r4
mov r1, r6
bl NNS_G2dTickCellAnimation
ldr r1, [r7, #0x0]
add r0, r5, #0x1
mov r0, r0, lsl #0x10
ldrh r1, [r1, #0x2]
mov r5, r0, lsr #0x10
cmp r5, r1
blo _020B2360
ldmia sp!, {r4-r8,pc}
_020B238C:
ldr r0, [r7, #0x0]
ldr r4, [r7, #0xc]
ldrh r0, [r0, #0x0]
mov r5, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r8,pc}
mov r8, #0x28
_020B23A8:
mul r0, r5, r8
ldr r0, [r4, r0]
mov r1, r6
bl NNS_G2dTickCellAnimation
ldr r1, [r7, #0x0]
add r0, r5, #0x1
mov r0, r0, lsl #0x10
ldrh r1, [r1, #0x0]
mov r5, r0, lsr #0x10
cmp r5, r1
blo _020B23A8
ldmia sp!, {r4-r8,pc}
arm_func_end NNS_G2dTickMCInstance
arm_func_start NNS_G2dGetMCBankNumNodesRequired
NNS_G2dGetMCBankNumNodesRequired: ; 0x020B23D8
stmdb sp!, {r4-r6,lr}
mov r5, r0
ldrh r0, [r5, #0x0]
mov r4, #0x0
mov r6, r4
cmp r0, #0x0
bls _020B2424
_020B23F4:
mov r0, r5
mov r1, r6
bl NNS_G2dGetMultiCellDataByIdx
ldrh r0, [r0, #0x0]
ldrh r1, [r5, #0x0]
cmp r0, r4
movhi r4, r0
add r0, r6, #0x1
mov r0, r0, lsl #0x10
mov r6, r0, lsr #0x10
cmp r6, r1
blo _020B23F4
_020B2424:
mov r0, r4
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G2dGetMCBankNumNodesRequired
arm_func_start NNS_G2dSetAnimSequenceToMCAnimation
NNS_G2dSetAnimSequenceToMCAnimation: ; 0x020B242C
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
bl NNS_G2dBindAnimCtrl
mov r1, #0x0
mov r0, r7
strh r1, [r7, #0x2c]
bl NNS_G2dGetAnimCtrlCurrentElement
mov r4, r0
ldrh r1, [r4, #0x0]
ldr r0, [r7, #0x40]
bl NNS_G2dGetMultiCellDataByIdx
ldr r1, [r7, #0x18]
mov r6, r0
ldr r1, [r1, #0x4]
add r0, r7, #0x44
and r5, r1, #0xff
mov r1, #0x1
bl NNSi_G2dSrtcInitControl
cmp r5, #0x0
beq _020B24C8
cmp r5, #0x2
bne _020B249C
ldrsh r1, [r4, #0x4]
ldrsh r2, [r4, #0x6]
add r0, r7, #0x44
bl NNSi_G2dSrtcSetTrans
b _020B24C8
_020B249C:
ldr r1, [r4, #0x4]
ldr r2, [r4, #0x8]
add r0, r7, #0x44
bl NNSi_G2dSrtcSetSRTScale
ldrh r1, [r4, #0x2]
add r0, r7, #0x44
bl NNSi_G2dSrtcSetSRTRotZ
ldrsh r1, [r4, #0xc]
ldrsh r2, [r4, #0xe]
add r0, r7, #0x44
bl NNSi_G2dSrtcSetTrans
_020B24C8:
ldrh r2, [r7, #0x2c]
mov r1, r6
add r0, r7, #0x30
bl SetMCDataToMCInstanceImpl_
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end NNS_G2dSetAnimSequenceToMCAnimation
arm_func_start SetMCDataToMCInstanceImpl_
SetMCDataToMCInstanceImpl_: ; 0x020B24E0
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x14
mov r10, r1
str r0, [sp, #0x0]
str r10, [r0, #0x0]
ldr r0, [r0, #0x8]
mov r9, r2
cmp r0, #0x1
bne _020B2654
ldrh r1, [r10, #0x2]
ldr r0, [sp, #0x0]
mov r4, #0x0
ldr r8, [r0, #0xc]
cmp r1, #0x0
bls _020B2544
mov r3, r4
mov r0, #0x58
_020B2524:
mla r1, r4, r0, r8
str r3, [r1, #0x54]
add r1, r4, #0x1
mov r1, r1, lsl #0x10
ldrh r2, [r10, #0x2]
mov r4, r1, lsr #0x10
cmp r4, r2
blo _020B2524
_020B2544:
ldrh r0, [r10, #0x0]
mov r5, #0x0
cmp r0, #0x0
addls sp, sp, #0x14
ldmlsia sp!, {r4-r11,pc}
str r5, [sp, #0x4]
mov r11, #0x1
_020B2560:
ldr r0, [r10, #0x4]
mov r1, #0x58
add r7, r0, r5, lsl #0x3
ldrh r0, [r7, #0x6]
and r0, r0, #0xff00
mov r0, r0, lsl #0x8
mov r0, r0, lsr #0x10
mla r6, r0, r1, r8
ldr r0, [r6, #0x54]
cmp r0, #0x0
bne _020B2634
ldr r0, [sp, #0x0]
ldrh r1, [r7, #0x0]
ldr r0, [r0, #0x4]
bl NNS_G2dGetAnimSequenceByIdx
mov r4, r0
mov r0, r6
mov r1, r4
bl NNS_G2dSetCellAnimationSequence
str r11, [r6, #0x8]
ldrh r0, [r7, #0x6]
and r0, r0, #0xf
cmp r0, #0x1
bne _020B2630
ldrh r1, [r4, #0x0]
ldr r7, [sp, #0x4]
mov r3, r7
cmp r1, #0x0
bls _020B25F0
ldr r2, [r4, #0xc]
_020B25D8:
add r0, r2, r3, lsl #0x3
ldrh r0, [r0, #0x4]
add r3, r3, #0x1
cmp r3, r1
add r7, r7, r0
blo _020B25D8
_020B25F0:
mov r0, r6
bl NNSi_G2dIsAnimCtrlLoopAnim
cmp r0, #0x0
beq _020B261C
mov r0, r9
mov r1, r7
bl _u32_div_f
mov r0, r6
mov r1, r1, lsl #0xc
bl NNS_G2dTickCellAnimation
b _020B2630
_020B261C:
cmp r9, r7
movcc r7, r9
mov r0, r6
mov r1, r7, lsl #0xc
bl NNS_G2dTickCellAnimation
_020B2630:
str r11, [r6, #0x54]
_020B2634:
add r0, r5, #0x1
mov r0, r0, lsl #0x10
ldrh r1, [r10, #0x0]
mov r5, r0, lsr #0x10
cmp r5, r1
blo _020B2560
add sp, sp, #0x14
ldmia sp!, {r4-r11,pc}
_020B2654:
ldrh r1, [r10, #0x0]
ldr r0, [sp, #0x0]
mov r4, #0x0
cmp r1, #0x0
ldr r11, [r0, #0xc]
addls sp, sp, #0x14
ldmlsia sp!, {r4-r11,pc}
mov r0, #0x1
str r4, [sp, #0xc]
str r0, [sp, #0x8]
_020B267C:
mov r0, #0x28
mul r2, r4, r0
ldr r3, [r10, #0x4]
mov r0, r4, lsl #0x3
ldrh r1, [r3, r0]
ldr r0, [sp, #0x0]
ldr r6, [r11, r2]
ldr r0, [r0, #0x4]
add r7, r3, r4, lsl #0x3
bl NNS_G2dGetAnimSequenceByIdx
mov r5, r0
mov r0, r6
mov r1, r5
bl NNS_G2dSetCellAnimationSequence
ldr r0, [sp, #0x8]
str r0, [r6, #0x8]
ldrh r0, [r7, #0x6]
and r0, r0, #0xf
cmp r0, #0x1
bne _020B2740
ldrh r1, [r5, #0x0]
ldr r8, [sp, #0xc]
mov r0, r8
cmp r1, #0x0
bls _020B2700
ldr r3, [r5, #0xc]
_020B26E4:
add r1, r3, r0, lsl #0x3
ldrh r2, [r1, #0x4]
add r0, r0, #0x1
ldrh r1, [r5, #0x0]
add r8, r8, r2
cmp r0, r1
blo _020B26E4
_020B2700:
mov r0, r6
bl NNSi_G2dIsAnimCtrlLoopAnim
cmp r0, #0x0
beq _020B272C
mov r0, r9
mov r1, r8
bl _u32_div_f
mov r0, r6
mov r1, r1, lsl #0xc
bl NNS_G2dTickCellAnimation
b _020B2740
_020B272C:
cmp r9, r8
movcc r8, r9
mov r0, r6
mov r1, r8, lsl #0xc
bl NNS_G2dTickCellAnimation
_020B2740:
mov r0, #0x28
mla r3, r4, r0, r11
ldr r0, [sp, #0x8]
str r0, [r3, #0x8]
ldrsh r1, [r7, #0x2]
ldrsh r2, [r7, #0x4]
add r0, r3, #0xc
bl NNSi_G2dSrtcSetTrans
add r0, r4, #0x1
mov r0, r0, lsl #0x10
ldrh r1, [r10, #0x0]
mov r4, r0, lsr #0x10
cmp r4, r1
blo _020B267C
add sp, sp, #0x14
ldmia sp!, {r4-r11,pc}
arm_func_end SetMCDataToMCInstanceImpl_

View File

@@ -0,0 +1,155 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G2dGetAnimSequenceByIdx
NNS_G2dGetAnimSequenceByIdx: ; 0x020AFC04
ldrh r2, [r0, #0x0]
cmp r2, r1
ldrhi r0, [r0, #0x4]
addhi r0, r0, r1, lsl #0x4
movls r0, #0x0
bx lr
arm_func_end NNS_G2dGetAnimSequenceByIdx
arm_func_start NNS_G2dUnpackNAN
NNS_G2dUnpackNAN: ; 0x020AFC1C
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
ldr r1, [r0, #0x4]
mov r6, #0x0
add r1, r1, r0
str r1, [r0, #0x4]
ldr r1, [r0, #0x8]
add r1, r1, r0
str r1, [r0, #0x8]
ldr r1, [r0, #0xc]
add r1, r1, r0
str r1, [r0, #0xc]
ldrh r1, [r0, #0x0]
ldr r4, [r0, #0x4]
ldr lr, [r0, #0x8]
cmp r1, #0x0
ldr r12, [r0, #0xc]
bls _020AFCCC
mov r1, r6
_020AFC68:
add r2, r4, r6, lsl #0x4
ldr r5, [r2, #0xc]
mov r3, r6, lsl #0x4
add r5, lr, r5
str r5, [r2, #0xc]
ldrh r7, [r4, r3]
mov r5, r1
cmp r7, #0x0
bls _020AFCB4
_020AFC8C:
ldr r9, [r2, #0xc]
add r7, r5, #0x1
ldr r8, [r9, r5, lsl #0x3]
mov r7, r7, lsl #0x10
add r8, r12, r8
str r8, [r9, r5, lsl #0x3]
ldrh r8, [r4, r3]
mov r5, r7, lsr #0x10
cmp r5, r8
blo _020AFC8C
_020AFCB4:
add r2, r6, #0x1
mov r2, r2, lsl #0x10
ldrh r3, [r0, #0x0]
mov r6, r2, lsr #0x10
cmp r6, r3
blo _020AFC68
_020AFCCC:
ldr r1, [r0, #0x14]
cmp r1, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r9,pc}
add r1, r1, r0
str r1, [r0, #0x14]
ldr r1, [r0, #0x14]
mov r12, #0x0
add r2, r1, #0x8
ldr r0, [r2, #0x4]
add r0, r0, r2
str r0, [r2, #0x4]
ldrh r0, [r1, #0x8]
cmp r0, #0x0
addls sp, sp, #0x4
ldmlsia sp!, {r4-r9,pc}
mov r0, r12
mov r6, r12
_020AFD14:
ldr r5, [r2, #0x4]
mov r3, r6
add r1, r5, r0
ldr r4, [r1, #0x4]
add r4, r4, r2
str r4, [r1, #0x4]
ldr r4, [r1, #0x8]
add r4, r4, r2
str r4, [r1, #0x8]
ldrh r4, [r5, r0]
cmp r4, #0x0
bls _020AFD6C
mov r7, r6
_020AFD48:
ldr r5, [r1, #0x8]
add r3, r3, #0x1
ldr r4, [r5, r7]
add r4, r4, r2
str r4, [r5, r7]
ldrh r4, [r1, #0x0]
add r7, r7, #0x4
cmp r3, r4
blo _020AFD48
_020AFD6C:
ldrh r1, [r2, #0x0]
add r12, r12, #0x1
add r0, r0, #0xc
cmp r12, r1
blo _020AFD14
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
arm_func_end NNS_G2dUnpackNAN
arm_func_start NNS_G2dGetUnpackedMCAnimBank
NNS_G2dGetUnpackedMCAnimBank: ; 0x020AFD88
ldr ip, _020AFD90 ; =GetUnpackedAnimBankImpl_
bx r12
.balign 4
_020AFD90: .word GetUnpackedAnimBankImpl_
arm_func_end NNS_G2dGetUnpackedMCAnimBank
arm_func_start NNS_G2dGetUnpackedAnimBank
NNS_G2dGetUnpackedAnimBank: ; 0x020AFD94
ldr ip, _020AFD9C ; =GetUnpackedAnimBankImpl_
bx r12
.balign 4
_020AFD9C: .word GetUnpackedAnimBankImpl_
arm_func_end NNS_G2dGetUnpackedAnimBank
arm_func_start GetUnpackedAnimBankImpl_
GetUnpackedAnimBankImpl_: ; 0x020AFDA0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r1
ldr r1, _020AFDE4 ; =0x41424E4B
bl NNS_G2dFindBinaryBlock
movs r4, r0
moveq r0, #0x0
addeq sp, sp, #0x4
streq r0, [r5, #0x0]
ldmeqia sp!, {r4-r5,pc}
add r0, r4, #0x8
bl NNS_G2dUnpackNAN
add r0, r4, #0x8
str r0, [r5, #0x0]
mov r0, #0x1
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020AFDE4: .word 0x41424E4B
arm_func_end GetUnpackedAnimBankImpl_

View File

@@ -0,0 +1,66 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G2dUnpackBGNCG
NNS_G2dUnpackBGNCG: ; 0x020B0020
ldr r1, [r0, #0x14]
add r1, r1, r0
str r1, [r0, #0x14]
bx lr
arm_func_end NNS_G2dUnpackBGNCG
arm_func_start NNS_G2dGetUnpackedBGCharacterData
NNS_G2dGetUnpackedBGCharacterData: ; 0x020B0030
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r1
ldr r1, _020B0074 ; =0x43484152
bl NNS_G2dFindBinaryBlock
movs r4, r0
moveq r0, #0x0
addeq sp, sp, #0x4
streq r0, [r5, #0x0]
ldmeqia sp!, {r4-r5,pc}
add r0, r4, #0x8
bl NNS_G2dUnpackBGNCG
add r0, r4, #0x8
str r0, [r5, #0x0]
mov r0, #0x1
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020B0074: .word 0x43484152
arm_func_end NNS_G2dGetUnpackedBGCharacterData
arm_func_start NNS_G2dUnpackNCG
NNS_G2dUnpackNCG: ; 0x020B0078
ldr r1, [r0, #0x14]
add r1, r1, r0
str r1, [r0, #0x14]
bx lr
arm_func_end NNS_G2dUnpackNCG
arm_func_start NNS_G2dGetUnpackedCharacterData
NNS_G2dGetUnpackedCharacterData: ; 0x020B0088
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r1
ldr r1, _020B00CC ; =0x43484152
bl NNS_G2dFindBinaryBlock
movs r4, r0
moveq r0, #0x0
addeq sp, sp, #0x4
streq r0, [r5, #0x0]
ldmeqia sp!, {r4-r5,pc}
add r0, r4, #0x8
bl NNS_G2dUnpackNCG
add r0, r4, #0x8
str r0, [r5, #0x0]
mov r0, #0x1
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020B00CC: .word 0x43484152
arm_func_end NNS_G2dGetUnpackedCharacterData

View File

@@ -0,0 +1,66 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G2dUnpackNCL
NNS_G2dUnpackNCL: ; 0x020B00D0
ldr r1, [r0, #0xc]
add r1, r1, r0
str r1, [r0, #0xc]
bx lr
arm_func_end NNS_G2dUnpackNCL
arm_func_start NNSi_G2dUnpackNCLCmpInfo
NNSi_G2dUnpackNCLCmpInfo: ; 0x020B00E0
ldr r1, [r0, #0x4]
add r1, r1, r0
str r1, [r0, #0x4]
bx lr
arm_func_end NNSi_G2dUnpackNCLCmpInfo
arm_func_start NNS_G2dGetUnpackedPaletteCompressInfo
NNS_G2dGetUnpackedPaletteCompressInfo: ; 0x020B00F0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r1
ldr r1, _020B0134 ; =0x50434D50
bl NNS_G2dFindBinaryBlock
movs r4, r0
moveq r0, #0x0
addeq sp, sp, #0x4
streq r0, [r5, #0x0]
ldmeqia sp!, {r4-r5,pc}
add r0, r4, #0x8
bl NNSi_G2dUnpackNCLCmpInfo
add r0, r4, #0x8
str r0, [r5, #0x0]
mov r0, #0x1
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020B0134: .word 0x50434D50
arm_func_end NNS_G2dGetUnpackedPaletteCompressInfo
arm_func_start NNS_G2dGetUnpackedPaletteData
NNS_G2dGetUnpackedPaletteData: ; 0x020B0138
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r1
ldr r1, _020B017C ; =0x504C5454
bl NNS_G2dFindBinaryBlock
movs r4, r0
moveq r0, #0x0
addeq sp, sp, #0x4
streq r0, [r5, #0x0]
ldmeqia sp!, {r4-r5,pc}
add r0, r4, #0x8
bl NNS_G2dUnpackNCL
add r0, r4, #0x8
str r0, [r5, #0x0]
mov r0, #0x1
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020B017C: .word 0x504C5454
arm_func_end NNS_G2dGetUnpackedPaletteData

View File

@@ -0,0 +1,180 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dUnpackNFT
NNSi_G2dUnpackNFT: ; 0x020B7468
stmdb sp!, {r4-r6,lr}
ldrh r2, [r0, #0xc]
ldrh r3, [r0, #0xe]
mov r1, #0x0
add r2, r0, r2
cmp r3, #0x0
ldmleia sp!, {r4-r6,pc}
ldr r3, _020B7548 ; =0x46494E46
ldr ip, _020B754C ; =0x43574448
ldr r4, _020B7550 ; =0x434D4150
ldr lr, _020B7554 ; =0x43474C50
_020B7494:
ldr r5, [r2, #0x0]
cmp r5, r4
bhi _020B74B0
cmp r5, r4
bhs _020B7518
cmp r5, lr
b _020B752C
_020B74B0:
cmp r5, r12
bhi _020B74C4
cmp r5, r12
beq _020B7500
b _020B752C
_020B74C4:
cmp r5, r3
bne _020B752C
add r6, r2, #0x8
ldr r5, [r6, #0x8]
add r5, r5, r0
str r5, [r6, #0x8]
ldr r5, [r6, #0xc]
cmp r5, #0x0
addne r5, r5, r0
strne r5, [r6, #0xc]
ldr r5, [r6, #0x10]
cmp r5, #0x0
addne r5, r5, r0
strne r5, [r6, #0x10]
b _020B752C
_020B7500:
add r6, r2, #0x8
ldr r5, [r6, #0x4]
cmp r5, #0x0
addne r5, r5, r0
strne r5, [r6, #0x4]
b _020B752C
_020B7518:
add r6, r2, #0x8
ldr r5, [r6, #0x8]
cmp r5, #0x0
addne r5, r5, r0
strne r5, [r6, #0x8]
_020B752C:
ldrh r5, [r0, #0xe]
ldr r6, [r2, #0x4]
add r1, r1, #0x1
cmp r1, r5
add r2, r2, r6
blt _020B7494
ldmia sp!, {r4-r6,pc}
.balign 4
_020B7548: .word 0x46494E46
_020B754C: .word 0x43574448
_020B7550: .word 0x434D4150
_020B7554: .word 0x43474C50
arm_func_end NNSi_G2dUnpackNFT
arm_func_start NNSi_G2dGetUnpackedFont
NNSi_G2dGetUnpackedFont: ; 0x020B7558
stmdb sp!, {r4-r6,lr}
movs r6, r0
mov r5, r1
beq _020B75C8
cmp r6, #0x0
beq _020B7584
ldr r1, [r6, #0x0]
ldr r0, _020B76A8 ; =0x4E465452
cmp r1, r0
moveq r0, #0x1
beq _020B7588
_020B7584:
mov r0, #0x0
_020B7588:
cmp r0, #0x0
movne r0, #0x1
moveq r0, #0x0
cmp r0, #0x0
beq _020B75CC
cmp r6, #0x0
beq _020B75B4
ldrh r0, [r6, #0x6]
cmp r0, #0x100
movcs r0, #0x1
bhs _020B75B8
_020B75B4:
mov r0, #0x0
_020B75B8:
cmp r0, #0x0
movne r0, #0x1
moveq r0, #0x0
b _020B75CC
_020B75C8:
mov r0, #0x0
_020B75CC:
cmp r0, #0x0
movne r4, #0x0
bne _020B7654
cmp r6, #0x0
beq _020B7640
cmp r6, #0x0
beq _020B75FC
ldr r1, [r6, #0x0]
ldr r0, _020B76A8 ; =0x4E465452
cmp r1, r0
moveq r0, #0x1
beq _020B7600
_020B75FC:
mov r0, #0x0
_020B7600:
cmp r0, #0x0
movne r0, #0x1
moveq r0, #0x0
cmp r0, #0x0
beq _020B7644
cmp r6, #0x0
beq _020B762C
ldrh r0, [r6, #0x6]
cmp r0, #0x1
movcs r0, #0x1
bhs _020B7630
_020B762C:
mov r0, #0x0
_020B7630:
cmp r0, #0x0
movne r0, #0x1
moveq r0, #0x0
b _020B7644
_020B7640:
mov r0, #0x0
_020B7644:
cmp r0, #0x0
movne r4, #0x1
bne _020B7654
bl OS_Terminate
_020B7654:
mov r0, r6
bl NNSi_G2dUnpackNFT
ldr r1, _020B76AC ; =0x46494E46
mov r0, r6
bl NNS_G2dFindBinaryBlock
cmp r0, #0x0
moveq r0, #0x0
streq r0, [r5, #0x0]
ldmeqia sp!, {r4-r6,pc}
add r0, r0, #0x8
str r0, [r5, #0x0]
cmp r4, #0x0
beq _020B76A0
ldr r2, [r5, #0x0]
mov r1, #0x0
ldrsb r0, [r2, #0x6]
strb r0, [r2, #0x7]
ldr r0, [r5, #0x0]
strb r1, [r0, #0x6]
_020B76A0:
add r0, r4, #0x1
ldmia sp!, {r4-r6,pc}
.balign 4
_020B76A8: .word 0x4E465452
_020B76AC: .word 0x46494E46
arm_func_end NNSi_G2dGetUnpackedFont

View File

@@ -0,0 +1,83 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G2dGetMultiCellDataByIdx
NNS_G2dGetMultiCellDataByIdx: ; 0x020AFF34
ldrh r2, [r0, #0x0]
cmp r1, r2
ldrcc r0, [r0, #0x4]
addcc r0, r0, r1, lsl #0x3
movcs r0, #0x0
bx lr
arm_func_end NNS_G2dGetMultiCellDataByIdx
arm_func_start NNS_G2dUnpackNMC
NNS_G2dUnpackNMC: ; 0x020AFF4C
stmdb sp!, {r4,lr}
ldr r1, [r0, #0x4]
mov r4, #0x0
add r1, r1, r0
str r1, [r0, #0x4]
ldr r1, [r0, #0x8]
add r1, r1, r0
str r1, [r0, #0x8]
ldrh r1, [r0, #0x0]
ldr lr, [r0, #0x4]
cmp r1, #0x0
bls _020AFFA8
_020AFF7C:
add r3, lr, r4, lsl #0x3
ldr r12, [r0, #0x8]
ldr r2, [r3, #0x4]
add r1, r4, #0x1
add r2, r12, r2
str r2, [r3, #0x4]
mov r1, r1, lsl #0x10
ldrh r2, [r0, #0x0]
mov r4, r1, lsr #0x10
cmp r4, r2
blo _020AFF7C
_020AFFA8:
ldr r1, [r0, #0x10]
cmp r1, #0x0
ldmeqia sp!, {r4,pc}
add r1, r1, r0
str r1, [r0, #0x10]
ldr r0, [r0, #0x10]
bl UnpackExtendedData_
ldmia sp!, {r4,pc}
arm_func_end NNS_G2dUnpackNMC
arm_func_start UnpackExtendedData_
UnpackExtendedData_: ; 0x020AFFC8
ldr ip, _020AFFD4 ; =NNSi_G2dUnpackUserExCellAttrBank
add r0, r0, #0x8
bx r12
.balign 4
_020AFFD4: .word NNSi_G2dUnpackUserExCellAttrBank
arm_func_end UnpackExtendedData_
arm_func_start NNS_G2dGetUnpackedMultiCellBank
NNS_G2dGetUnpackedMultiCellBank: ; 0x020AFFD8
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r1
ldr r1, _020B001C ; =0x4D43424B
bl NNS_G2dFindBinaryBlock
movs r4, r0
moveq r0, #0x0
addeq sp, sp, #0x4
streq r0, [r5, #0x0]
ldmeqia sp!, {r4-r5,pc}
add r0, r4, #0x8
bl NNS_G2dUnpackNMC
add r0, r4, #0x8
str r0, [r5, #0x0]
mov r0, #0x1
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020B001C: .word 0x4D43424B
arm_func_end NNS_G2dGetUnpackedMultiCellBank

View File

@@ -0,0 +1,112 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G2dUnpackNCE
NNS_G2dUnpackNCE: ; 0x020AFDE8
stmdb sp!, {r4-r6,lr}
mov r5, r0
ldr r1, [r5, #0x4]
add r1, r1, r5
str r1, [r5, #0x4]
bl GetPtrOamArrayHead_
ldrh r1, [r5, #0x0]
mov r4, r0
mov r6, #0x0
cmp r1, #0x0
bls _020AFE44
_020AFE14:
mov r0, r5
mov r1, r6
bl NNS_G2dGetCellDataByIdx
ldr r2, [r0, #0x4]
add r1, r6, #0x1
add r2, r2, r4
str r2, [r0, #0x4]
mov r0, r1, lsl #0x10
ldrh r1, [r5, #0x0]
mov r6, r0, lsr #0x10
cmp r6, r1
blo _020AFE14
_020AFE44:
ldr r0, [r5, #0xc]
cmp r0, #0x0
beq _020AFE6C
add r0, r0, r5
str r0, [r5, #0xc]
ldr r1, [r5, #0xc]
ldr r0, [r1, #0x4]
add r0, r0, r1
str r0, [r1, #0x4]
str r1, [r5, #0xc]
_020AFE6C:
ldr r0, [r5, #0x14]
cmp r0, #0x0
ldmeqia sp!, {r4-r6,pc}
add r0, r0, r5
str r0, [r5, #0x14]
ldr r0, [r5, #0x14]
bl UnPackExtendedData_
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G2dUnpackNCE
arm_func_start NNS_G2dGetCellDataByIdx
NNS_G2dGetCellDataByIdx: ; 0x020AFE8C
ldrh r2, [r0, #0x0]
cmp r1, r2
movcs r0, #0x0
bxcs lr
ldrh r2, [r0, #0x2]
ands r2, r2, #0x1
ldrne r0, [r0, #0x4]
addne r0, r0, r1, lsl #0x4
ldreq r0, [r0, #0x4]
addeq r0, r0, r1, lsl #0x3
bx lr
arm_func_end NNS_G2dGetCellDataByIdx
arm_func_start NNS_G2dGetUnpackedCellBank
NNS_G2dGetUnpackedCellBank: ; 0x020AFEB8
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r1
ldr r1, _020AFEFC ; =0x4345424B
bl NNS_G2dFindBinaryBlock
movs r4, r0
moveq r0, #0x0
addeq sp, sp, #0x4
streq r0, [r5, #0x0]
ldmeqia sp!, {r4-r5,pc}
add r0, r4, #0x8
bl NNS_G2dUnpackNCE
add r0, r4, #0x8
str r0, [r5, #0x0]
mov r0, #0x1
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020AFEFC: .word 0x4345424B
arm_func_end NNS_G2dGetUnpackedCellBank
arm_func_start UnPackExtendedData_
UnPackExtendedData_: ; 0x020AFF00
ldr ip, _020AFF0C ; =NNSi_G2dUnpackUserExCellAttrBank
add r0, r0, #0x8
bx r12
.balign 4
_020AFF0C: .word NNSi_G2dUnpackUserExCellAttrBank
arm_func_end UnPackExtendedData_
arm_func_start GetPtrOamArrayHead_
GetPtrOamArrayHead_: ; 0x020AFF10
ldrh r1, [r0, #0x2]
ands r1, r1, #0x1
ldrneh r1, [r0, #0x0]
ldrne r0, [r0, #0x4]
addne r0, r0, r1, lsl #0x4
ldreqh r1, [r0, #0x0]
ldreq r0, [r0, #0x4]
addeq r0, r0, r1, lsl #0x3
bx lr
arm_func_end GetPtrOamArrayHead_

View File

@@ -0,0 +1,18 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dInitializeNode
NNSi_G2dInitializeNode: ; 0x020B1AD4
mov r2, #0x0
str r2, [r0, #0x0]
str r1, [r0, #0x4]
mov r1, #0x1
str r1, [r0, #0x8]
ldr ip, _020B1AF4 ; =NNSi_G2dSrtcInitControl
add r0, r0, #0xc
bx r12
.balign 4
_020B1AF4: .word NNSi_G2dSrtcInitControl
arm_func_end NNSi_G2dInitializeNode

View File

@@ -0,0 +1,21 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G2dGetUnpackedScreenData
NNS_G2dGetUnpackedScreenData: ; 0x020B0180
stmdb sp!, {r4,lr}
mov r4, r1
ldr r1, _020B01AC ; =0x5343524E
bl NNS_G2dFindBinaryBlock
cmp r0, #0x0
addne r0, r0, #0x8
strne r0, [r4, #0x0]
movne r0, #0x1
moveq r0, #0x0
streq r0, [r4, #0x0]
ldmia sp!, {r4,pc}
.balign 4
_020B01AC: .word 0x5343524E
arm_func_end NNS_G2dGetUnpackedScreenData

667
arm9/asm/NNS_G2D_g2d_oam.s Normal file
View File

@@ -0,0 +1,667 @@
.include "asm/macros.inc"
.include "global.inc"
.section .rodata
.global NNSi_objSizeHTbl
NNSi_objSizeHTbl: ; 0x020FF894
.byte 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00
.byte 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00
.global NNSi_objSizeWTbl
NNSi_objSizeWTbl: ; 0x020FF8AC
.byte 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00
.byte 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00
; static const in function
.section .data
.global funcTbl$8497
funcTbl$8497: ; 0x0210655C
.word CpuLoadOAMMain_
.word CpuLoadOAMSub_
.word 0
.word 0
.word 0
.section .bss
.global numRegisterdInstance_
numRegisterdInstance_: ; 0x021CCD9C
.space 0x4
.global oamCache_
oamCache_: ; 0x021CCDA0
.space 0xFC0
.section .text
arm_func_start NNS_G2dGetOamManagerOamCapacity
NNS_G2dGetOamManagerOamCapacity: ; 0x020B0830
ldrh r3, [r0, #0x6]
ldrh r2, [r0, #0x8]
mov r12, #0x0
add r1, r3, #0x1
cmp r2, r1
bgt _020B0854
ldrh r0, [r0, #0x4]
cmp r0, r3
movls r12, #0x1
_020B0854:
cmp r12, #0x0
subne r0, r3, r2
addne r0, r0, #0x1
movne r0, r0, lsl #0x10
movne r0, r0, lsr #0x10
moveq r0, #0x0
bx lr
arm_func_end NNS_G2dGetOamManagerOamCapacity
arm_func_start NNS_G2dApplyAndResetOamManagerBuffer
NNS_G2dApplyAndResetOamManagerBuffer: ; 0x020B0870
stmdb sp!, {r4,lr}
mov r4, r0
bl NNS_G2dApplyOamManagerToHW
mov r0, r4
bl NNS_G2dResetOamManagerBuffer
ldmia sp!, {r4,pc}
arm_func_end NNS_G2dApplyAndResetOamManagerBuffer
arm_func_start NNS_G2dResetOamManagerBuffer
NNS_G2dResetOamManagerBuffer: ; 0x020B0888
stmdb sp!, {r4-r6,lr}
mov r5, r0
ldr r0, [r5, #0x14]
cmp r0, #0x0
beq _020B0944
ldrh r2, [r5, #0x6]
ldrh r1, [r5, #0x8]
mov r3, #0x0
add r0, r2, #0x1
cmp r1, r0
bgt _020B08C0
ldrh r0, [r5, #0x4]
cmp r0, r2
movls r3, #0x1
_020B08C0:
cmp r3, #0x0
moveq r4, #0x0
beq _020B08E0
ldrh r0, [r5, #0x4]
sub r0, r2, r0
add r0, r0, #0x1
mov r0, r0, lsl #0x10
mov r4, r0, lsr #0xd
_020B08E0:
ldr r2, [r5, #0x0]
ldr r1, _020B09AC ; =oamCache_
mov r0, #0x540
mla r1, r2, r0, r1
ldrh r0, [r5, #0x4]
add r2, r1, #0x100
mov r1, r4
add r6, r2, r0, lsl #0x3
mov r0, r6
bl DC_InvalidateRange
ldr r0, _020B09B0 ; =GXi_DmaId
mvn r1, #0x0
ldr r0, [r0, #0x0]
cmp r0, r1
beq _020B0930
mov r1, r6
mov r3, r4
mov r2, #0xc0
bl MI_DmaFill32
b _020B0998
_020B0930:
mov r1, r6
mov r2, r4
mov r0, #0xc0
bl MIi_CpuClear32
b _020B0998
_020B0944:
ldr r2, [r5, #0x0]
ldr r1, _020B09AC ; =oamCache_
mov r0, #0x540
mla r1, r2, r0, r1
ldrh r2, [r5, #0x4]
ldrh r0, [r5, #0x6]
add r1, r1, #0x100
add r3, r1, r2, lsl #0x3
sub r0, r0, r2
add r0, r0, #0x1
mov r0, r0, lsl #0x10
movs r2, r0, lsr #0x10
mov r0, #0x0
beq _020B0998
mov r1, #0xc0
_020B0980:
add r0, r0, #0x1
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
cmp r0, r2
strh r1, [r3], #0x8
blo _020B0980
_020B0998:
ldrh r0, [r5, #0x4]
strh r0, [r5, #0x8]
ldrh r0, [r5, #0xa]
strh r0, [r5, #0xe]
ldmia sp!, {r4-r6,pc}
.balign 4
_020B09AC: .word oamCache_
_020B09B0: .word GXi_DmaId
arm_func_end NNS_G2dResetOamManagerBuffer
arm_func_start NNS_G2dApplyOamManagerToHW
NNS_G2dApplyOamManagerToHW: ; 0x020B09B4
stmdb sp!, {r4-r10,lr}
mov r7, r0
ldr r0, [r7, #0x14]
cmp r0, #0x0
beq _020B0A48
ldr r5, [r7, #0x0]
ldr r1, _020B0BA8 ; =oamCache_
mov r0, #0x540
mla r1, r5, r0, r1
ldrh r2, [r7, #0x4]
ldrh r0, [r7, #0x6]
add r1, r1, #0x100
add r4, r1, r2, lsl #0x3
sub r0, r0, r2
add r0, r0, #0x1
mov r0, r0, lsl #0x13
mov r6, r0, lsr #0x10
mov r2, r2, lsl #0x13
mov r0, r4
mov r1, r6
mov r7, r2, lsr #0x10
bl DC_FlushRange
cmp r5, #0x0
beq _020B0A20
cmp r5, #0x1
beq _020B0A34
ldmia sp!, {r4-r10,pc}
_020B0A20:
mov r0, r4
mov r1, r7
mov r2, r6
bl GX_LoadOAM
ldmia sp!, {r4-r10,pc}
_020B0A34:
mov r0, r4
mov r1, r7
mov r2, r6
bl GXS_LoadOAM
ldmia sp!, {r4-r10,pc}
_020B0A48:
ldr r0, [r7, #0x0]
ldr r2, _020B0BA8 ; =oamCache_
mov r1, #0x540
mla r2, r0, r1, r2
ldrh r5, [r7, #0x4]
ldrh r1, [r7, #0x6]
ldr r3, _020B0BAC ; =funcTbl$8497
add r4, r2, #0x100
sub r1, r1, r5
add r1, r1, #0x1
mov r1, r1, lsl #0x10
mov r2, r5, lsl #0x13
add r6, r4, r5, lsl #0x3
movs r5, r1, lsr #0x10
mov r4, r2, lsr #0x10
ldr r9, [r3, r0, lsl #0x2]
mov r10, #0x0
beq _020B0AC8
mov r8, #0x6
_020B0A94:
mov r0, r6
mov r1, r4
mov r2, r8
blx r9
add r0, r10, #0x1
add r2, r4, #0x8
mov r1, r0, lsl #0x10
mov r0, r2, lsl #0x10
mov r10, r1, lsr #0x10
cmp r10, r5
mov r4, r0, lsr #0x10
add r6, r6, #0x8
blo _020B0A94
_020B0AC8:
ldrh r2, [r7, #0xc]
ldrh r1, [r7, #0xe]
mov r3, #0x0
add r0, r2, #0x1
cmp r1, r0
bgt _020B0AEC
ldrh r0, [r7, #0xa]
cmp r0, r2
movls r3, #0x1
_020B0AEC:
cmp r3, #0x0
ldmeqia sp!, {r4-r10,pc}
ldr r0, [r7, #0x0]
ldr r2, _020B0BA8 ; =oamCache_
mov r1, #0x540
mla r2, r0, r1, r2
ldrh r5, [r7, #0xa]
add r4, r2, #0x100
ldrh r1, [r7, #0xc]
mov r2, r5, lsl #0x15
ldr r3, _020B0BAC ; =funcTbl$8497
sub r1, r1, r5
add r1, r1, #0x1
mov r1, r1, lsl #0x10
add r9, r4, r5, lsl #0x5
ldr r5, [r3, r0, lsl #0x2]
movs r8, r1, lsr #0x10
mov r7, r2, lsr #0x10
mov r6, #0x0
ldmeqia sp!, {r4-r10,pc}
mov r4, #0x2
_020B0B40:
mov r2, r4
add r0, r9, #0x6
add r1, r7, #0x6
blx r5
mov r2, r4
add r0, r9, #0xe
add r1, r7, #0xe
blx r5
mov r2, r4
add r0, r9, #0x16
add r1, r7, #0x16
blx r5
add r0, r9, #0x1e
add r1, r7, #0x1e
mov r2, r4
blx r5
add r0, r7, #0x20
mov r0, r0, lsl #0x10
mov r7, r0, lsr #0x10
add r9, r9, #0x20
add r0, r6, #0x1
mov r0, r0, lsl #0x10
mov r6, r0, lsr #0x10
cmp r6, r8
blo _020B0B40
ldmia sp!, {r4-r10,pc}
.balign 4
_020B0BA8: .word oamCache_
_020B0BAC: .word funcTbl$8497
arm_func_end NNS_G2dApplyOamManagerToHW
arm_func_start NNS_G2dEntryOamManagerAffine
NNS_G2dEntryOamManagerAffine: ; 0x020B0BB0
stmdb sp!, {lr}
sub sp, sp, #0x4
ldrh r12, [r0, #0xc]
ldrh r3, [r0, #0xe]
mov lr, #0x0
add r2, r12, #0x1
cmp r3, r2
bgt _020B0BDC
ldrh r2, [r0, #0xa]
cmp r2, r12
movls lr, #0x1
_020B0BDC:
cmp lr, #0x0
subne r2, r12, r3
addne r2, r2, #0x1
movne r2, r2, lsl #0x10
movne r2, r2, lsr #0x10
moveq r2, #0x0
cmp r2, #0x1
movcs r2, #0x1
movcc r2, #0x0
cmp r2, #0x0
addeq sp, sp, #0x4
ldreq r0, _020B0C74 ; =0x0000FFFE
ldmeqia sp!, {pc}
ldr lr, [r0, #0x0]
ldr r3, _020B0C78 ; =oamCache_
mov r2, #0x540
mla r12, lr, r2, r3
ldr r3, [r1, #0x0]
ldrh r2, [r0, #0xe]
add r12, r12, #0x100
mov r3, r3, asr #0x4
add r12, r12, r2, lsl #0x5
strh r3, [r12, #0x6]
ldr r3, [r1, #0x4]
mov r3, r3, asr #0x4
strh r3, [r12, #0xe]
ldr r3, [r1, #0x8]
mov r3, r3, asr #0x4
strh r3, [r12, #0x16]
ldr r1, [r1, #0xc]
mov r1, r1, asr #0x4
strh r1, [r12, #0x1e]
ldrh r1, [r0, #0xe]
add r1, r1, #0x1
strh r1, [r0, #0xe]
mov r0, r2
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020B0C74: .word 0x0000FFFE
_020B0C78: .word oamCache_
arm_func_end NNS_G2dEntryOamManagerAffine
arm_func_start NNS_G2dEntryOamManagerOamWithAffineIdx
NNS_G2dEntryOamManagerOamWithAffineIdx: ; 0x020B0C7C
stmdb sp!, {r4,lr}
ldrh r12, [r0, #0x6]
ldrh r4, [r0, #0x8]
mov lr, #0x0
add r3, r12, #0x1
cmp r4, r3
bgt _020B0CA4
ldrh r3, [r0, #0x4]
cmp r3, r12
movls lr, #0x1
_020B0CA4:
cmp lr, #0x0
subne r3, r12, r4
addne r3, r3, #0x1
movne r3, r3, lsl #0x10
movne r3, r3, lsr #0x10
moveq r3, #0x0
cmp r3, #0x1
movcs r3, #0x1
movcc r3, #0x0
cmp r3, #0x0
beq _020B0D48
ldr r4, [r0, #0x0]
ldr ip, _020B0D50 ; =oamCache_
mov r3, #0x540
mla r12, r4, r3, r12
ldrh r3, [r0, #0x8]
add r4, r12, #0x100
ldrh r12, [r1, #0x0]
mov lr, r3, lsl #0x3
add r3, r4, r3, lsl #0x3
strh r12, [r4, lr]
ldrh lr, [r1, #0x2]
ldr ip, _020B0D54 ; =0x0000FFFE
strh lr, [r3, #0x2]
ldrh r1, [r1, #0x4]
cmp r2, r12
strh r1, [r3, #0x4]
beq _020B0D34
ldr r1, [r3, #0x0]
mov r12, r1, lsl #0x16
mov r12, r12, lsr #0x1e
ands r12, r12, #0x1
bicne r12, r1, #0x3e000000
andne r1, r2, #0x1f
orrne r1, r12, r1, lsl #0x19
strne r1, [r3, #0x0]
_020B0D34:
ldrh r1, [r0, #0x8]
add r1, r1, #0x1
strh r1, [r0, #0x8]
mov r0, #0x1
ldmia sp!, {r4,pc}
_020B0D48:
mov r0, #0x0
ldmia sp!, {r4,pc}
.balign 4
_020B0D50: .word oamCache_
_020B0D54: .word 0x0000FFFE
arm_func_end NNS_G2dEntryOamManagerOamWithAffineIdx
arm_func_start NNS_G2dEntryOamManagerOam
NNS_G2dEntryOamManagerOam: ; 0x020B0D58
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldrh lr, [r0, #0x6]
ldrh r12, [r0, #0x8]
mov r4, #0x0
add r3, lr, #0x1
cmp r12, r3
bgt _020B0D84
ldrh r3, [r0, #0x4]
cmp r3, lr
movls r4, #0x1
_020B0D84:
cmp r4, #0x0
subne r3, lr, r12
addne r3, r3, #0x1
movne r3, r3, lsl #0x10
movne r3, r3, lsr #0x10
moveq r3, #0x0
cmp r3, r2
movcs r3, #0x1
movcc r3, #0x0
cmp r3, #0x0
beq _020B0E24
ldr lr, [r0, #0x0]
ldr ip, _020B0E30 ; =oamCache_
mov r3, #0x540
mla r12, lr, r3, r12
ldrh r3, [r0, #0x8]
add r12, r12, #0x100
cmp r2, #0x0
add r4, r12, r3, lsl #0x3
mov r5, #0x0
ble _020B0E18
add r3, r0, #0x8
_020B0DDC:
ldrh lr, [r1, #0x0]
mov r0, r5, lsl #0x3
add r12, r4, r5, lsl #0x3
strh lr, [r4, r0]
ldrh r0, [r1, #0x2]
add r5, r5, #0x1
cmp r5, r2
strh r0, [r12, #0x2]
ldrh r0, [r1, #0x4]
add r1, r1, #0x8
strh r0, [r12, #0x4]
ldrh r0, [r3, #0x0]
add r0, r0, #0x1
strh r0, [r3, #0x0]
blt _020B0DDC
_020B0E18:
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r5,pc}
_020B0E24:
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020B0E30: .word oamCache_
arm_func_end NNS_G2dEntryOamManagerOam
arm_func_start NNS_G2dGetNewOamManagerInstance
NNS_G2dGetNewOamManagerInstance: ; 0x020B0E34
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr r5, [sp, #0x1c]
ldr r6, _020B0FB4 ; =oamCache_
mov r4, #0x540
mla r4, r5, r4, r6
mov lr, r1
sub r1, r2, #0x1
add r1, lr, r1
mov r1, r1, lsl #0x10
mov r12, r1, lsr #0x10
add r7, r4, lr, lsl #0x1
add r2, r4, r12, lsl #0x1
mov r6, r0
mov r5, r3
cmp r7, r2
mov r3, lr, lsl #0x1
bhi _020B0E9C
ldr r0, _020B0FB8 ; =0x0000FFFF
_020B0E80:
ldrh r1, [r7, #0x0]
cmp r1, r0
movne r0, #0x0
bne _020B0EA0
add r7, r7, #0x2
cmp r7, r2
bls _020B0E80
_020B0E9C:
mov r0, #0x1
_020B0EA0:
cmp r0, #0x0
beq _020B0EE0
ldr r0, _020B0FBC ; =numRegisterdInstance_
sub r2, r12, lr
ldrh r7, [r0, #0x0]
add r1, r4, r3
mov r2, r2, lsl #0x1
add r3, r7, #0x1
strh r3, [r0, #0x0]
strh r7, [r6, #0x10]
strh lr, [r6, #0x4]
strh r12, [r6, #0x6]
strh lr, [r6, #0x8]
ldrh r0, [r6, #0x10]
bl MIi_CpuClear16
b _020B0EEC
_020B0EE0:
add sp, sp, #0x4
mov r0, #0x0
ldmia sp!, {r4-r7,pc}
_020B0EEC:
ldrh r0, [sp, #0x18]
add r4, r4, #0x500
cmp r0, #0x0
bne _020B0F18
mov r0, #0x20
strh r0, [r6, #0xa]
mov r0, #0x0
strh r0, [r6, #0xc]
ldrh r0, [r6, #0xa]
strh r0, [r6, #0xe]
b _020B0F98
_020B0F18:
sub r0, r0, #0x1
add r0, r5, r0
mov r0, r0, lsl #0x10
mov r12, r0, lsr #0x10
add r7, r4, r5, lsl #0x1
add r2, r4, r12, lsl #0x1
cmp r7, r2
mov r3, r5, lsl #0x1
bhi _020B0F5C
ldr r0, _020B0FB8 ; =0x0000FFFF
_020B0F40:
ldrh r1, [r7, #0x0]
cmp r1, r0
movne r0, #0x0
bne _020B0F60
add r7, r7, #0x2
cmp r7, r2
bls _020B0F40
_020B0F5C:
mov r0, #0x1
_020B0F60:
cmp r0, #0x0
beq _020B0F8C
strh r5, [r6, #0xa]
strh r12, [r6, #0xc]
strh r5, [r6, #0xe]
ldrh r0, [r6, #0x10]
sub r2, r12, r5
add r1, r4, r3
mov r2, r2, lsl #0x1
bl MIi_CpuClear16
b _020B0F98
_020B0F8C:
add sp, sp, #0x4
mov r0, #0x0
ldmia sp!, {r4-r7,pc}
_020B0F98:
mov r1, #0x0
ldr r0, [sp, #0x1c]
str r1, [r6, #0x14]
str r0, [r6, #0x0]
mov r0, #0x1
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020B0FB4: .word oamCache_
_020B0FB8: .word 0x0000FFFF
_020B0FBC: .word numRegisterdInstance_
arm_func_end NNS_G2dGetNewOamManagerInstance
arm_func_start NNS_G2dInitOamManagerModule
NNS_G2dInitOamManagerModule: ; 0x020B0FC0
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020B1060 ; =oamCache_ + 0x100
mov r0, #0xc0
mov r2, #0x400
bl MIi_CpuClear16
ldr r1, _020B1064 ; =oamCache_ + 0x640
mov r0, #0xc0
mov r2, #0x400
bl MIi_CpuClear16
ldr r1, _020B1068 ; =oamCache_ + 0xB80
mov r0, #0xc0
mov r2, #0x400
bl MIi_CpuClear16
ldr r0, _020B106C ; =0x0000FFFF
ldr r1, _020B1070 ; =oamCache_
mov r2, #0x100
bl MIi_CpuClear16
ldr r0, _020B106C ; =0x0000FFFF
ldr r1, _020B1074 ; =oamCache_ + 0x540
mov r2, #0x100
bl MIi_CpuClear16
ldr r0, _020B106C ; =0x0000FFFF
ldr r1, _020B1078 ; =oamCache_ + 0xA80
mov r2, #0x100
bl MIi_CpuClear16
ldr r0, _020B106C ; =0x0000FFFF
ldr r1, _020B107C ; =oamCache_ + 0x500
mov r2, #0x40
bl MIi_CpuClear16
ldr r0, _020B106C ; =0x0000FFFF
ldr r1, _020B1080 ; =oamCache_ + 0xA40
mov r2, #0x40
bl MIi_CpuClear16
ldr r0, _020B106C ; =0x0000FFFF
ldr r1, _020B1084 ; =oamCache_ + 0xF80
mov r2, #0x40
bl MIi_CpuClear16
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020B1060: .word oamCache_ + 0x100
_020B1064: .word oamCache_ + 0x640
_020B1068: .word oamCache_ + 0xB80
_020B106C: .word 0x0000FFFF
_020B1070: .word oamCache_
_020B1074: .word oamCache_ + 0x540
_020B1078: .word oamCache_ + 0xA80
_020B107C: .word oamCache_ + 0x500
_020B1080: .word oamCache_ + 0xA40
_020B1084: .word oamCache_ + 0xF80
arm_func_end NNS_G2dInitOamManagerModule
arm_func_start CpuLoadOAMMain_
CpuLoadOAMMain_: ; 0x020B1088
ldr ip, _020B1094 ; =MIi_CpuCopy16
add r1, r1, #0x7000000
bx r12
.balign 4
_020B1094: .word MIi_CpuCopy16
arm_func_end CpuLoadOAMMain_
arm_func_start CpuLoadOAMSub_
CpuLoadOAMSub_: ; 0x020B1098
ldr r3, _020B10A8 ; =0x07000400
ldr ip, _020B10AC ; =MIi_CpuCopy16
add r1, r1, r3
bx r12
.balign 4
_020B10A8: .word 0x07000400
_020B10AC: .word MIi_CpuCopy16
arm_func_end CpuLoadOAMSub_

View File

@@ -0,0 +1,421 @@
.include "asm/macros.inc"
.include "global.inc"
.section .rodata
.global pltFmtTbl$8430
pltFmtTbl$8430: ; 0x020FF8D0
.byte 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
; static const in function
.global texSize_$8337
texSize_$8337: ; 0x020FF8D8
.byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
.byte 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00
.global gxTexSizeSTbl
gxTexSizeSTbl: ; 0x020FF8F8
.byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
.global gxTexSizeTTbl
gxTexSizeTTbl: ; 0x020FF928
.byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
.section .data
.global zOffsetStep_
zOffsetStep_: ; 0x02106590
.byte 0x00, 0xF0, 0xFF, 0xFF
.section .bss
.global bAutoZOffsetAdd_
bAutoZOffsetAdd_: ; 0x021CED08
.space 0x4
.global s_pUVFlipCorrectFunc
s_pUVFlipCorrectFunc: ; 0x021CED0C
.space 0x4
.global zOffset_
zOffset_: ; 0x021CED10
.space 0x4
.section .text
arm_func_start NNS_G2dDrawOneOam3DDirectWithPosFast
NNS_G2dDrawOneOam3DDirectWithPosFast: ; 0x020B46B4
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x1c
add r12, sp, #0x4
mov r5, r1
mov r4, r2
mov r7, r3
mov r6, r0
ldr r1, [sp, #0x30]
ldr r2, [sp, #0x34]
ldr r3, [sp, #0x38]
mov r0, r7
str r12, [sp, #0x0]
bl CalcSpriteParams_
ldr r2, [r7, #0x0]
and r1, r2, #0x300
cmp r1, #0x100
beq _020B4708
cmp r1, #0x300
beq _020B4708
and r0, r2, #0x30000000
orr r1, r1, r0
_020B4708:
cmp r1, #0x300
bne _020B478C
ldr r0, _020B4914 ; =0xC000C000
ldr r1, _020B4918 ; =bAutoZOffsetAdd_
and r0, r2, r0
and r2, r0, #0xc0000000
mov r12, r2, lsr #0x1e
and r0, r0, #0xc000
mov lr, r0, asr #0xe
ldr r3, _020B491C ; =NNSi_objSizeWTbl
ldr r0, [r1, #0x0]
ldr r2, _020B4920 ; =NNSi_objSizeHTbl
cmp r0, #0x0
ldrne r0, _020B4924 ; =zOffset_
mov r12, r12, lsl #0x1
add r1, r2, lr, lsl #0x3
add r3, r3, lr, lsl #0x3
ldrh r2, [r12, r3]
ldrh r1, [r12, r1]
ldrne r0, [r0, #0x0]
mov r2, r2, asr #0x1
addne r3, r0, r4, lsl #0xc
mov r1, r1, asr #0x1
add r0, r5, r1
add r2, r6, r2
ldr r1, _020B4928 ; =0x04000470
mov r2, r2, lsl #0xc
str r2, [r1, #0x0]
mov r0, r0, lsl #0xc
moveq r3, r4, lsl #0xc
str r0, [r1, #0x0]
str r3, [r1, #0x0]
b _020B47C0
_020B478C:
ldr r0, _020B4918 ; =bAutoZOffsetAdd_
ldr r1, _020B4928 ; =0x04000470
ldr r0, [r0, #0x0]
cmp r0, #0x0
ldrne r0, _020B4924 ; =zOffset_
ldrne r0, [r0, #0x0]
addne r2, r0, r4, lsl #0xc
mov r0, r6, lsl #0xc
str r0, [r1, #0x0]
mov r0, r5, lsl #0xc
moveq r2, r4, lsl #0xc
str r0, [r1, #0x0]
str r2, [r1, #0x0]
_020B47C0:
ldr r0, [sp, #0x14]
ldr r1, [sp, #0x18]
ldr r2, _020B492C ; =0x0400046C
mov r0, r0, lsl #0xc
str r0, [r2, #0x0]
mov r0, r1, lsl #0xc
str r0, [r2, #0x0]
mov r1, #0x1000
str r1, [r2, #0x0]
ldr r0, _020B4930 ; =0x04000500
mov r1, #0x1
str r1, [r0, #0x0]
ldr r0, [sp, #0x4]
ldr r1, [sp, #0x10]
mov r0, r0, lsl #0x8
mov r1, r1, lsl #0x8
mov r0, r0, asr #0x10
mov r1, r1, asr #0x10
mov r0, r0, lsl #0x10
mov r1, r1, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, r1, lsr #0x10
orr r2, r2, r0, lsl #0x10
ldr r1, _020B4934 ; =0x04000488
ldr r0, _020B4938 ; =0x04000490
str r2, [r1, #0x0]
mov r2, #0x10000
str r2, [r0, #0x0]
ldr r2, [sp, #0xc]
ldr r3, [sp, #0x10]
mov r2, r2, lsl #0x8
mov r3, r3, lsl #0x8
mov r2, r2, asr #0x10
mov r3, r3, asr #0x10
mov r2, r2, lsl #0x10
mov r3, r3, lsl #0x10
mov r4, r2, lsr #0x10
mov r2, r3, lsr #0x10
orr r3, r4, r2, lsl #0x10
ldr r2, _020B493C ; =0x00010040
str r3, [r1, #0x0]
str r2, [r0, #0x0]
ldr r2, [sp, #0xc]
ldr r3, [sp, #0x8]
mov r2, r2, lsl #0x8
mov r3, r3, lsl #0x8
mov r2, r2, asr #0x10
mov r3, r3, asr #0x10
mov r2, r2, lsl #0x10
mov r3, r3, lsl #0x10
mov r4, r2, lsr #0x10
mov r2, r3, lsr #0x10
orr r2, r4, r2, lsl #0x10
str r2, [r1, #0x0]
mov r2, #0x40
str r2, [r0, #0x0]
ldr r2, [sp, #0x4]
ldr r3, [sp, #0x8]
mov r2, r2, lsl #0x8
mov r3, r3, lsl #0x8
mov r2, r2, asr #0x10
mov r3, r3, asr #0x10
mov r2, r2, lsl #0x10
mov r3, r3, lsl #0x10
mov r4, r2, lsr #0x10
mov r2, r3, lsr #0x10
orr r2, r4, r2, lsl #0x10
str r2, [r1, #0x0]
mov r2, #0x0
str r2, [r0, #0x0]
ldr r1, _020B4940 ; =0x04000504
ldr r0, _020B4918 ; =bAutoZOffsetAdd_
str r2, [r1, #0x0]
ldr r0, [r0, #0x0]
cmp r0, #0x0
addeq sp, sp, #0x1c
ldmeqia sp!, {r4-r7,pc}
ldr r1, _020B4924 ; =zOffset_
ldr r0, _020B4944 ; =zOffsetStep_
ldr r2, [r1, #0x0]
ldr r0, [r0, #0x0]
add r0, r2, r0
str r0, [r1, #0x0]
add sp, sp, #0x1c
ldmia sp!, {r4-r7,pc}
.balign 4
_020B4914: .word 0xC000C000
_020B4918: .word bAutoZOffsetAdd_
_020B491C: .word NNSi_objSizeWTbl
_020B4920: .word NNSi_objSizeHTbl
_020B4924: .word zOffset_
_020B4928: .word 0x04000470
_020B492C: .word 0x0400046C
_020B4930: .word 0x04000500
_020B4934: .word 0x04000488
_020B4938: .word 0x04000490
_020B493C: .word 0x00010040
_020B4940: .word 0x04000504
_020B4944: .word zOffsetStep_
arm_func_end NNS_G2dDrawOneOam3DDirectWithPosFast
arm_func_start NNSi_G2dGetOamSoftEmuAutoZOffsetStep
NNSi_G2dGetOamSoftEmuAutoZOffsetStep: ; 0x020B4948
ldr r0, _020B4954 ; =zOffsetStep_
ldr r0, [r0, #0x0]
bx lr
.balign 4
_020B4954: .word zOffsetStep_
arm_func_end NNSi_G2dGetOamSoftEmuAutoZOffsetStep
arm_func_start NNSi_G2dSetOamSoftEmuAutoZOffsetStep
NNSi_G2dSetOamSoftEmuAutoZOffsetStep: ; 0x020B4958
ldr r1, _020B4964 ; =zOffsetStep_
str r0, [r1, #0x0]
bx lr
.balign 4
_020B4964: .word zOffsetStep_
arm_func_end NNSi_G2dSetOamSoftEmuAutoZOffsetStep
arm_func_start NNSi_G2dResetOamSoftEmuAutoZOffset
NNSi_G2dResetOamSoftEmuAutoZOffset: ; 0x020B4968
ldr r0, _020B4978 ; =zOffset_
mov r1, #0x0
str r1, [r0, #0x0]
bx lr
.balign 4
_020B4978: .word zOffset_
arm_func_end NNSi_G2dResetOamSoftEmuAutoZOffset
arm_func_start NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
NNSi_G2dSetOamSoftEmuAutoZOffsetFlag: ; 0x020B497C
ldr r1, _020B4988 ; =bAutoZOffsetAdd_
str r0, [r1, #0x0]
bx lr
.balign 4
_020B4988: .word bAutoZOffsetAdd_
arm_func_end NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
arm_func_start CalcSpriteParams_
CalcSpriteParams_: ; 0x020B498C
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0xc
mov r6, r0
ldr r4, [r6, #0x0]
ldr r0, _020B4BCC ; =0xC000C000
ldr r5, [r6, #0x4]
and r4, r4, r0
and r0, r4, #0xc0000000
and r4, r4, #0xc000
mov lr, r0, lsr #0x1e
ldr r0, _020B4BD0 ; =NNSi_objSizeWTbl
mov r12, r4, asr #0xe
ldr r8, _020B4BD4 ; =NNSi_objSizeHTbl
mov r4, lr, lsl #0x1
add r0, r0, r12, lsl #0x3
ldrh r9, [r4, r0]
ldr r0, [sp, #0x28]
mov r5, r5, lsl #0x16
mov r5, r5, lsr #0x16
mov r7, r5, lsl #0x10
str r9, [r0, #0x10]
add r5, r8, r12, lsl #0x3
ldrh r8, [r4, r5]
mov r5, r1
mov r4, r3
str r8, [r0, #0x14]
ldr r1, [r5, #0x14]
mov r7, r7, lsr #0x10
cmp r1, #0x0
bne _020B4A74
ldr r1, [r5, #0x8]
mov r2, r2, lsr #0x3
orr r1, r2, r1, lsl #0x1a
ldr r2, [r5, #0x0]
orr r1, r1, #0x40000000
ldr r3, [r5, #0x4]
orr r1, r1, r2, lsl #0x14
orr r2, r1, r3, lsl #0x17
ldr r8, [r5, #0x10]
ldr r1, _020B4BD8 ; =0x040004A8
orr r2, r2, r8, lsl #0x1d
str r2, [r1, #0x0]
ldr r1, [r5, #0x8]
ldr r2, [r5, #0x0]
cmp r1, #0x4
moveq r1, r7, lsl #0xf
moveq r7, r1, lsr #0x10
ldr r1, _020B4BDC ; =texSize_$8337
ldr r1, [r1, r2, lsl #0x2]
sub r1, r1, #0x1
and r1, r7, r1
mov r1, r1, lsl #0xf
str r1, [r0, #0x0]
ldr r1, [r5, #0x0]
mov r1, r7, asr r1
mov r1, r1, lsl #0xf
str r1, [r0, #0x4]
b _020B4AE0
_020B4A74:
and r1, r1, #0x700000
mov r1, r1, asr #0x14
mov r12, r12, lsl #0x10
add r1, r1, #0x5
ldr r3, [r5, #0x8]
mov lr, lr, lsl #0x10
ldr sb, _020B4BE0 ; =gxTexSizeSTbl
mov r12, r12, lsr #0x10
ldr r8, _020B4BE4 ; =gxTexSizeTTbl
add r1, r2, r7, lsl r1
mov r2, r3, lsl #0x1a
orr r3, r2, r1, lsr #0x3
mov r7, lr, lsr #0x10
add r2, r9, r12, lsl #0x4
add r1, r8, r12, lsl #0x4
ldr r2, [r2, r7, lsl #0x2]
orr r3, r3, #0x40000000
ldr r1, [r1, r7, lsl #0x2]
orr r2, r3, r2, lsl #0x14
ldr r3, [r5, #0x10]
orr r2, r2, r1, lsl #0x17
ldr r1, _020B4BD8 ; =0x040004A8
orr r2, r2, r3, lsl #0x1d
str r2, [r1, #0x0]
mov r1, #0x0
str r1, [r0, #0x0]
str r1, [r0, #0x4]
_020B4AE0:
ldr r2, [r0, #0x0]
ldr r1, [r0, #0x10]
add r1, r2, r1, lsl #0xc
str r1, [r0, #0x8]
ldr r2, [r0, #0x4]
ldr r1, [r0, #0x14]
add r1, r2, r1, lsl #0xc
str r1, [r0, #0xc]
ldr r1, [r6, #0x0]
mov r2, r1, lsl #0x2
mov r1, r1, lsl #0x3
movs r3, r1, lsr #0x1f
mov r12, r2, lsr #0x1f
ldrne r2, [r0, #0x0]
ldrne r1, [r0, #0x8]
strne r1, [r0, #0x0]
strne r2, [r0, #0x8]
cmp r12, #0x0
ldrne r2, [r0, #0x4]
ldrne r1, [r0, #0xc]
strne r1, [r0, #0x4]
ldr r1, _020B4BE8 ; =s_pUVFlipCorrectFunc
strne r2, [r0, #0xc]
ldr r7, [r1, #0x0]
cmp r7, #0x0
beq _020B4B60
str r3, [sp, #0x0]
add r1, r0, #0x4
add r2, r0, #0x8
add r3, r0, #0xc
str r12, [sp, #0x4]
blx r7
_020B4B60:
ldr r0, [r6, #0x4]
ldr r1, [r6, #0x0]
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x1c
mov r3, r1, lsl #0x12
ldr r1, [r5, #0xc]
mov r0, r0, lsl #0x10
ldr r2, _020B4BEC ; =pltFmtTbl$8430
mov r3, r3, lsr #0x1f
cmp r1, #0x0
mov r0, r0, lsr #0x10
ldr r1, [r2, r3, lsl #0x2]
movne r0, r0, lsl #0x9
bne _020B4BA4
cmp r1, #0x4
moveq r0, #0x0
movne r0, r0, lsl #0x5
_020B4BA4:
cmp r1, #0x2
moveq r2, #0x1
movne r2, #0x0
add r1, r4, r0
rsb r0, r2, #0x4
mov r1, r1, lsr r0
ldr r0, _020B4BF0 ; =0x040004AC
str r1, [r0, #0x0]
add sp, sp, #0xc
ldmia sp!, {r4-r9,pc}
.balign 4
_020B4BCC: .word 0xC000C000
_020B4BD0: .word NNSi_objSizeWTbl
_020B4BD4: .word NNSi_objSizeHTbl
_020B4BD8: .word 0x040004A8
_020B4BDC: .word texSize_$8337
_020B4BE0: .word gxTexSizeSTbl
_020B4BE4: .word gxTexSizeTTbl
_020B4BE8: .word s_pUVFlipCorrectFunc
_020B4BEC: .word pltFmtTbl$8430
_020B4BF0: .word 0x040004AC
arm_func_end CalcSpriteParams_

View File

@@ -0,0 +1,11 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G2dGetPaletteTableValue
NNS_G2dGetPaletteTableValue: ; 0x020B10B0
mov r1, r1, lsl #0x1
ldrh r0, [r0, r1]
bx lr
arm_func_end NNS_G2dGetPaletteTableValue

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,129 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G2dDrawSpriteFast
NNS_G2dDrawSpriteFast: ; 0x020B0250
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r5, _020B02C0 ; =0x04000470
mov r0, r0, lsl #0xc
str r0, [r5, #0x0]
mov r4, r1, lsl #0xc
ldr r12, [sp, #0x10]
ldr r0, [sp, #0x14]
ldr r1, [sp, #0x1c]
str r4, [r5, #0x0]
mov r4, r2, lsl #0xc
ldr r2, [sp, #0x18]
ldr lr, _020B02C4 ; =0x0400046C
str r4, [r5, #0x0]
mov r4, r3, lsl #0xc
ldr r3, [sp, #0x20]
str r4, [lr, #0x0]
mov r12, r12, lsl #0xc
str r12, [lr, #0x0]
mov r12, #0x1000
mov r0, r0, lsl #0xc
mov r1, r1, lsl #0xc
mov r2, r2, lsl #0xc
mov r3, r3, lsl #0xc
str r12, [lr, #0x0]
bl DrawOneQuad_
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020B02C0: .word 0x04000470
_020B02C4: .word 0x0400046C
arm_func_end NNS_G2dDrawSpriteFast
arm_func_start NNS_G2dSetupSoftwareSpriteCamera
NNS_G2dSetupSoftwareSpriteCamera: ; 0x020B02C8
stmdb sp!, {lr}
sub sp, sp, #0x14
ldr r2, _020B0330 ; =0xBFFF0000
ldr r0, _020B0334 ; =0x04000580
mov r1, #0x400000
str r2, [r0, #0x0]
rsb r0, r1, #0x0
str r0, [sp, #0x0]
str r1, [sp, #0x4]
mov r0, #0x0
str r1, [sp, #0x8]
mov r1, #0x1
str r1, [sp, #0xc]
mov r2, r0
mov r1, #0xc0000
mov r3, #0x100000
str r0, [sp, #0x10]
bl G3i_OrthoW_
ldr r1, _020B0338 ; =0x0400044C
mov r2, #0x0
ldr r0, _020B033C ; =0x04000440
str r2, [r1, #0x0]
mov r1, #0x1
str r1, [r0, #0x0]
add sp, sp, #0x14
ldmia sp!, {pc}
.balign 4
_020B0330: .word 0xBFFF0000
_020B0334: .word 0x04000580
_020B0338: .word 0x0400044C
_020B033C: .word 0x04000440
arm_func_end NNS_G2dSetupSoftwareSpriteCamera
arm_func_start DrawOneQuad_
DrawOneQuad_: ; 0x020B0340
stmdb sp!, {r4-r6,lr}
mov r3, r3, lsl #0x8
mov r0, r0, lsl #0x8
mov r4, r3, asr #0x10
mov r3, r0, asr #0x10
mov r0, r4, lsl #0x10
mov r3, r3, lsl #0x10
mov r1, r1, lsl #0x8
mov r1, r1, asr #0x10
mov r1, r1, lsl #0x10
mov r2, r2, lsl #0x8
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
ldr ip, _020B03F4 ; =0x04000500
mov lr, #0x1
mov r6, r0, lsr #0x10
mov r5, r3, lsr #0x10
mov r3, r1, lsr #0x10
mov r1, r2, lsr #0x10
ldr r4, _020B03F8 ; =0x04000488
str lr, [r12, #0x0]
orr r0, r5, r6, lsl #0x10
ldr lr, _020B03FC ; =0x0400048C
str r0, [r4, #0x0]
mov r0, #0x10000000
str r0, [lr, #0x0]
mov r12, #0x0
str r12, [lr, #0x0]
orr r2, r3, r6, lsl #0x10
ldr r0, _020B0400 ; =0x10001000
str r2, [r4, #0x0]
str r0, [lr, #0x0]
str r12, [lr, #0x0]
orr r0, r3, r1, lsl #0x10
str r0, [r4, #0x0]
mov r0, #0x1000
str r0, [lr, #0x0]
str r12, [lr, #0x0]
orr r0, r5, r1, lsl #0x10
str r0, [r4, #0x0]
str r12, [lr, #0x0]
ldr r0, _020B0404 ; =0x04000504
str r12, [lr, #0x0]
str r12, [r0, #0x0]
ldmia sp!, {r4-r6,pc}
.balign 4
_020B03F4: .word 0x04000500
_020B03F8: .word 0x04000488
_020B03FC: .word 0x0400048C
_020B0400: .word 0x10001000
_020B0404: .word 0x04000504
arm_func_end DrawOneQuad_

View File

@@ -0,0 +1,62 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dSrtcSetInitialValue
NNSi_G2dSrtcSetInitialValue: ; 0x020B1A40
stmdb sp!, {r4,lr}
mov r4, r0
add r1, r4, #0x4
mov r0, #0x0
mov r2, #0x18
bl MIi_CpuClear16
mov r0, #0x1000
str r0, [r4, #0x4]
str r0, [r4, #0x8]
ldmia sp!, {r4,pc}
arm_func_end NNSi_G2dSrtcSetInitialValue
arm_func_start NNSi_G2dSrtcInitControl
NNSi_G2dSrtcInitControl: ; 0x020B1A68
ldr ip, _020B1A74 ; =NNSi_G2dSrtcSetInitialValue
str r1, [r0, #0x0]
bx r12
.balign 4
_020B1A74: .word NNSi_G2dSrtcSetInitialValue
arm_func_end NNSi_G2dSrtcInitControl
arm_func_start NNSi_G2dSrtcSetSRTScale
NNSi_G2dSrtcSetSRTScale: ; 0x020B1A78
ldr r3, [r0, #0x0]
cmp r3, #0x1
ldreqh r3, [r0, #0x12]
orreq r3, r3, #0x2
streqh r3, [r0, #0x12]
streq r1, [r0, #0x4]
streq r2, [r0, #0x8]
bx lr
arm_func_end NNSi_G2dSrtcSetSRTScale
arm_func_start NNSi_G2dSrtcSetSRTRotZ
NNSi_G2dSrtcSetSRTRotZ: ; 0x020B1A98
ldr r2, [r0, #0x0]
cmp r2, #0x1
ldreqh r2, [r0, #0x12]
orreq r2, r2, #0x4
streqh r2, [r0, #0x12]
streqh r1, [r0, #0x10]
bx lr
arm_func_end NNSi_G2dSrtcSetSRTRotZ
arm_func_start NNSi_G2dSrtcSetTrans
NNSi_G2dSrtcSetTrans: ; 0x020B1AB4
ldr r3, [r0, #0x0]
cmp r3, #0x1
ldreqh r3, [r0, #0x12]
orreq r3, r3, #0x8
streqh r3, [r0, #0x12]
streqh r1, [r0, #0xc]
streqh r2, [r0, #0xe]
bx lr
arm_func_end NNSi_G2dSrtcSetTrans

View File

@@ -0,0 +1,221 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dTextCanvasDrawTextRect
NNSi_G2dTextCanvasDrawTextRect: ; 0x020B7168
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0xc
ldr r12, [sp, #0x28]
mov r7, r0
mov r6, r1
mov r5, r2
mov r4, r3
ands r0, r12, #0x100
beq _020B71AC
ldr r0, [r7, #0x4]
ldr r1, [r7, #0xc]
ldr r2, [sp, #0x2c]
bl NNSi_G2dFontGetTextHeight
ldr r1, [sp, #0x20]
sub r0, r1, r0
add r5, r5, r0
b _020B71E4
_020B71AC:
ands r0, r12, #0x80
beq _020B71E4
ldr r0, [r7, #0x4]
ldr r1, [r7, #0xc]
ldr r2, [sp, #0x2c]
bl NNSi_G2dFontGetTextHeight
ldr r2, [sp, #0x20]
add r1, r0, #0x1
add r0, r2, #0x1
add r0, r0, r0, lsr #0x1f
mov r2, r0, asr #0x1
add r0, r1, r1, lsr #0x1f
sub r0, r2, r0, asr #0x1
add r5, r5, r0
_020B71E4:
ldr r1, [sp, #0x24]
ldr r0, [sp, #0x28]
str r1, [sp, #0x0]
ldr r12, [sp, #0x2c]
str r0, [sp, #0x4]
mov r0, r7
mov r1, r6
mov r2, r5
mov r3, r4
str r12, [sp, #0x8]
bl NNSi_G2dTextCanvasDrawTextAlign
add sp, sp, #0xc
ldmia sp!, {r4-r7,pc}
arm_func_end NNSi_G2dTextCanvasDrawTextRect
arm_func_start NNSi_G2dTextCanvasDrawText
NNSi_G2dTextCanvasDrawText: ; 0x020B7218
stmdb sp!, {r4-r8,lr}
sub sp, sp, #0x18
ldr r4, [sp, #0x34]
mov r8, r0
str r4, [sp, #0x0]
mov r7, r1
mov r6, r2
mov r5, r3
ldr r4, [sp, #0x30]
ldr r1, [r8, #0x4]
ldr r2, [r8, #0x8]
ldr r3, [r8, #0xc]
add r0, sp, #0xc
bl NNSi_G2dFontGetTextRect
ands r0, r4, #0x10
ldrne r0, [sp, #0xc]
addne r0, r0, #0x1
addne r0, r0, r0, lsr #0x1f
subne r7, r7, r0, asr #0x1
bne _020B7274
ands r0, r4, #0x20
ldrne r0, [sp, #0xc]
subne r7, r7, r0
_020B7274:
ands r0, r4, #0x2
ldrne r0, [sp, #0x10]
addne r0, r0, #0x1
addne r0, r0, r0, lsr #0x1f
subne r6, r6, r0, asr #0x1
bne _020B7298
ands r0, r4, #0x4
ldrne r0, [sp, #0x10]
subne r6, r6, r0
_020B7298:
str r5, [sp, #0x0]
ldr r0, [sp, #0x34]
str r4, [sp, #0x4]
str r0, [sp, #0x8]
ldr r3, [sp, #0xc]
mov r0, r8
mov r1, r7
mov r2, r6
bl NNSi_G2dTextCanvasDrawTextAlign
add sp, sp, #0x18
ldmia sp!, {r4-r8,pc}
arm_func_end NNSi_G2dTextCanvasDrawText
arm_func_start NNSi_G2dTextCanvasDrawTextAlign
NNSi_G2dTextCanvasDrawTextAlign: ; 0x020B72C4
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x14
mov r10, r0
ldr r4, [r10, #0x4]
ldr r0, [sp, #0x40]
ldr r4, [r4, #0x0]
ldr r5, [r10, #0xc]
ldrsb r4, [r4, #0x1]
cmp r0, #0x0
mov r9, r1
str r0, [sp, #0xc]
ldr r0, [sp, #0x38]
mov r8, r2
str r0, [sp, #0x38]
mov r7, r3
add r6, r5, r4
addeq sp, sp, #0x14
ldmeqia sp!, {r4-r11,pc}
add r0, r7, #0x1
ldr r1, [sp, #0x3c]
add r0, r0, r0, lsr #0x1f
mov r0, r0, asr #0x1
and r5, r1, #0x800
and r11, r1, #0x400
str r0, [sp, #0x8]
mov r4, #0x0
_020B732C:
mov r1, r9
cmp r5, #0x0
beq _020B7358
ldr r0, [r10, #0x4]
ldr r1, [r10, #0x8]
ldr r2, [sp, #0xc]
mov r3, r4
bl NNSi_G2dFontGetStringWidth
sub r0, r7, r0
add r1, r9, r0
b _020B7388
_020B7358:
cmp r11, #0x0
beq _020B7388
ldr r0, [r10, #0x4]
ldr r1, [r10, #0x8]
ldr r2, [sp, #0xc]
mov r3, r4
bl NNSi_G2dFontGetStringWidth
add r0, r0, #0x1
add r1, r0, r0, lsr #0x1f
ldr r0, [sp, #0x8]
sub r0, r0, r1, asr #0x1
add r1, r9, r0
_020B7388:
ldr r2, [sp, #0xc]
add r3, sp, #0xc
str r2, [sp, #0x0]
str r3, [sp, #0x4]
ldr r3, [sp, #0x38]
mov r0, r10
mov r2, r8
bl NNSi_G2dTextCanvasDrawString
ldr r0, [sp, #0xc]
add r8, r8, r6
cmp r0, #0x0
bne _020B732C
add sp, sp, #0x14
ldmia sp!, {r4-r11,pc}
arm_func_end NNSi_G2dTextCanvasDrawTextAlign
arm_func_start NNSi_G2dTextCanvasDrawString
NNSi_G2dTextCanvasDrawString: ; 0x020B73C0
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0xc
mov r10, r0
ldr r6, [r10, #0x8]
ldr r5, [r10, #0x4]
ldr r4, [sp, #0x30]
add r0, sp, #0x8
str r4, [sp, #0x8]
ldr r4, [r5, #0x4]
mov r9, r1
mov r8, r2
mov r7, r3
blx r4
cmp r0, #0x0
beq _020B743C
add r11, sp, #0x8
_020B7400:
cmp r0, #0xa
beq _020B743C
str r7, [sp, #0x0]
str r0, [sp, #0x4]
ldr r0, [r10, #0x0]
mov r1, r5
mov r2, r9
mov r3, r8
bl NNS_G2dCharCanvasDrawChar
add r1, r9, r0
mov r0, r11
add r9, r1, r6
blx r4
cmp r0, #0x0
bne _020B7400
_020B743C:
ldr r1, [sp, #0x34]
cmp r1, #0x0
addeq sp, sp, #0xc
ldmeqia sp!, {r4-r11,pc}
cmp r0, #0xa
ldreq r1, [sp, #0x8]
ldr r0, [sp, #0x34]
movne r1, #0x0
str r1, [r0, #0x0]
add sp, sp, #0xc
ldmia sp!, {r4-r11,pc}
arm_func_end NNSi_G2dTextCanvasDrawString

View File

@@ -0,0 +1,35 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dBitReaderRead
NNSi_G2dBitReaderRead: ; 0x020B76B0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldrsb r2, [r0, #0x4]
ldrb r12, [r0, #0x5]
mov r4, r1
cmp r2, r4
subge r1, r2, r4
movge r5, r12, lsr r1
strgeb r1, [r0, #0x4]
bge _020B7704
ldr r3, [r0, #0x0]
sub r1, r4, r2
add r2, r3, #0x1
str r2, [r0, #0x0]
ldrb r2, [r3, #0x0]
mov r5, r12, lsl r1
strb r2, [r0, #0x5]
mov r2, #0x8
strb r2, [r0, #0x4]
bl NNSi_G2dBitReaderRead
orr r5, r0, r5
_020B7704:
rsb r0, r4, #0x8
mov r1, #0xff
and r0, r5, r1, asr r0
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end NNSi_G2dBitReaderRead

View File

@@ -0,0 +1,79 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dMtxConcat32
NNSi_G2dMtxConcat32: ; 0x020B423C
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x1c
ldr r4, [r0, #0x4]
ldr r3, [r1, #0x8]
mov r12, r2
smull r6, r5, r4, r3
ldr r4, [r0, #0x0]
ldr r3, [r1, #0x0]
cmp r12, r1
smlal r6, r5, r4, r3
mov r3, r6, lsr #0xc
addeq r2, sp, #0x0
orr r3, r3, r5, lsl #0x14
str r3, [r2, #0x0]
ldr r4, [r0, #0x4]
ldr r3, [r1, #0xc]
ldr r5, [r0, #0x0]
smull r7, r6, r4, r3
ldr r3, [r1, #0x4]
add lr, sp, #0x0
smlal r7, r6, r5, r3
mov r3, r7, lsr #0xc
orr r3, r3, r6, lsl #0x14
str r3, [r2, #0x4]
ldr r4, [r0, #0xc]
ldr r3, [r1, #0x8]
ldr r5, [r0, #0x8]
smull r7, r6, r4, r3
ldr r3, [r1, #0x0]
cmp r2, lr
smlal r7, r6, r5, r3
mov r3, r7, lsr #0xc
orr r3, r3, r6, lsl #0x14
str r3, [r2, #0x8]
ldr r4, [r0, #0xc]
ldr r3, [r1, #0xc]
ldr r5, [r0, #0x8]
smull r7, r6, r4, r3
ldr r3, [r1, #0x4]
smlal r7, r6, r5, r3
mov r3, r7, lsr #0xc
orr r3, r3, r6, lsl #0x14
str r3, [r2, #0xc]
ldr r4, [r0, #0x14]
ldr r3, [r1, #0x8]
ldr r5, [r0, #0x10]
smull r7, r6, r4, r3
ldr r3, [r1, #0x0]
ldr r4, [r1, #0x10]
smlal r7, r6, r5, r3
mov r3, r7, lsr #0xc
orr r3, r3, r6, lsl #0x14
add r3, r4, r3
str r3, [r2, #0x10]
ldr r4, [r0, #0x14]
ldr r3, [r1, #0xc]
ldr r5, [r0, #0x10]
ldr r0, [r1, #0x4]
smull r6, r3, r4, r3
smlal r6, r3, r5, r0
mov r0, r6, lsr #0xc
ldr r1, [r1, #0x14]
orr r0, r0, r3, lsl #0x14
add r0, r1, r0
str r0, [r2, #0x14]
ldmeqia lr!, {r0-r3}
stmeqia r12!, {r0-r3}
ldmeqia lr, {r0-r1}
stmeqia r12, {r0-r1}
add sp, sp, #0x1c
ldmia sp!, {r4-r7,pc}
arm_func_end NNSi_G2dMtxConcat32

View File

@@ -0,0 +1,13 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G2dSplitCharUTF16
NNSi_G2dSplitCharUTF16: ; 0x020B7718
ldr r1, [r0, #0x0]
ldrh r2, [r1], #0x2
str r1, [r0, #0x0]
mov r0, r2
bx lr
arm_func_end NNSi_G2dSplitCharUTF16

143
arm9/asm/NNS_G3D_1mat1shp.s Normal file
View File

@@ -0,0 +1,143 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G3dDraw1Mat1Shp
NNS_G3dDraw1Mat1Shp: ; 0x020BAFB8
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x6c
mov r6, r0
ldr r12, [r6, #0x1c]
mov r4, r1
mov r5, r2
mov r7, r3
cmp r12, #0x1000
beq _020BAFF8
add r1, sp, #0x54
mov r0, #0x1b
mov r2, #0x3
str r12, [sp, #0x54]
str r12, [sp, #0x58]
str r12, [sp, #0x5c]
bl NNS_G3dGeBufferOP_N
_020BAFF8:
cmp r7, #0x0
beq _020BB150
ldr r0, [r6, #0x8]
add r3, r6, r0
ldrh r0, [r3, #0xa]
add r2, r3, #0x4
ldrh r1, [r2, r0]
add r0, r2, r0
mla r0, r1, r4, r0
ldr r0, [r0, #0x4]
add r4, r3, r0
ldr r0, [r4, #0xc]
ands r0, r0, #0x1f0000
addeq sp, sp, #0x6c
ldmeqia sp!, {r4-r7,pc}
ldr r0, _020BB1B4 ; =0x00293130
str r0, [sp, #0x0]
ldr r0, [r4, #0x4]
str r0, [sp, #0x4]
ldr r0, [r4, #0x8]
str r0, [sp, #0x8]
ldr r1, [r4, #0xc]
str r1, [sp, #0xc]
ldrh r0, [r4, #0x1e]
ands r0, r0, #0x20
bicne r0, r1, #0x1f0000
ldr r1, _020BB1B8 ; =0x00002B2A
strne r0, [sp, #0xc]
str r1, [sp, #0x10]
ldr r2, [r4, #0x14]
ldr r0, [sp, #0x0]
str r2, [sp, #0x14]
ldrh r3, [r4, #0x1c]
add r1, sp, #0x4
mov r2, #0x6
str r3, [sp, #0x18]
bl NNS_G3dGeBufferOP_N
ldrh r0, [r4, #0x1e]
ands r0, r0, #0x1
beq _020BB150
ldrb r12, [r6, #0x16]
mov r3, #0x8
ldr r1, _020BB1BC ; =NNS_G3dSendTexSRT_FuncArray
str r3, [sp, #0x1c]
ldrh r2, [r4, #0x20]
add r0, r4, #0x2c
ldr r1, [r1, r12, lsl #0x2]
strh r2, [sp, #0x48]
ldrh r2, [r4, #0x22]
strh r2, [sp, #0x4a]
ldr r2, [r4, #0x24]
str r2, [sp, #0x4c]
ldr r2, [r4, #0x28]
str r2, [sp, #0x50]
ldrh r2, [r4, #0x1e]
ands r2, r2, #0x2
orrne r2, r3, #0x1
strne r2, [sp, #0x1c]
bne _020BB0F8
ldr r2, [r0, #0x0]
str r2, [sp, #0x34]
ldr r2, [r0, #0x4]
add r0, r0, #0x8
str r2, [sp, #0x38]
_020BB0F8:
ldrh r2, [r4, #0x1e]
ands r2, r2, #0x4
ldrne r2, [sp, #0x1c]
orrne r2, r2, #0x2
strne r2, [sp, #0x1c]
bne _020BB124
ldrsh r2, [r0, #0x0]
strh r2, [sp, #0x3c]
ldrsh r2, [r0, #0x2]
add r0, r0, #0x4
strh r2, [sp, #0x3e]
_020BB124:
ldrh r2, [r4, #0x1e]
ands r2, r2, #0x8
ldreq r2, [r0, #0x0]
streq r2, [sp, #0x40]
ldreq r0, [r0, #0x4]
streq r0, [sp, #0x44]
ldrne r0, [sp, #0x1c]
orrne r0, r0, #0x4
strne r0, [sp, #0x1c]
add r0, sp, #0x1c
blx r1
_020BB150:
ldr r0, [r6, #0xc]
add r2, r6, r0
ldrh r0, [r2, #0x6]
ldrh r1, [r2, r0]
add r0, r2, r0
mla r0, r1, r5, r0
ldr r0, [r0, #0x4]
add r2, r2, r0
ldr r0, [r2, #0x8]
ldr r1, [r2, #0xc]
add r0, r2, r0
bl NNS_G3dGeSendDL
ldr r3, [r6, #0x20]
cmp r3, #0x1000
addeq sp, sp, #0x6c
ldmeqia sp!, {r4-r7,pc}
add r1, sp, #0x60
mov r0, #0x1b
mov r2, #0x3
str r3, [sp, #0x60]
str r3, [sp, #0x64]
str r3, [sp, #0x68]
bl NNS_G3dGeBufferOP_N
add sp, sp, #0x6c
ldmia sp!, {r4-r7,pc}
.balign 4
_020BB1B4: .word 0x00293130
_020BB1B8: .word 0x00002B2A
_020BB1BC: .word NNS_G3dSendTexSRT_FuncArray
arm_func_end NNS_G3dDraw1Mat1Shp

466
arm9/asm/NNS_G3D_3dsmax.s Normal file
View File

@@ -0,0 +1,466 @@
.include "asm/macros.inc"
.include "global.inc"
.section .data
calcTexMtx_: ; 0x021067D0
.word texmtxCalc_flag_
.word texmtxCalc_flagS_
.word texmtxCalc_flagR_
.word texmtxCalc_flagRS_
.word texmtxCalc_flagT_
.word texmtxCalc_flagTS_
.word texmtxCalc_flagTR_
.word texmtxCalc_flagTRS_
.section .text
arm_func_start NNSi_G3dSendTexSRT3dsMax
NNSi_G3dSendTexSRT3dsMax: ; 0x020BF42C
stmdb sp!, {r4,lr}
sub sp, sp, #0x50
mov r4, r0
ldr r0, [r4, #0x0]
mov r1, #0x0
ands r0, r0, #0x8
ldrne r0, _020BF568 ; =0x00101610
mov r3, #0x3
strne r0, [sp, #0x0]
ldreq r0, _020BF56C ; =0x00101810
mov r2, #0x2
streq r0, [sp, #0x0]
mov r0, #0x1000
str r0, [sp, #0x44]
str r3, [sp, #0x4]
str r2, [sp, #0x48]
str r1, [sp, #0x40]
str r1, [sp, #0x34]
str r1, [sp, #0x30]
str r1, [sp, #0x2c]
str r1, [sp, #0x28]
str r1, [sp, #0x24]
str r1, [sp, #0x20]
str r1, [sp, #0x14]
str r1, [sp, #0x10]
ldr r1, [r4, #0x0]
ldr r0, _020BF570 ; =calcTexMtx_
and r1, r1, #0x7
ldr r2, [r0, r1, lsl #0x2]
add r0, sp, #0x8
mov r1, r4
blx r2
ldr r3, [r4, #0x30]
cmp r3, #0x1000
beq _020BF4FC
ldr r0, [sp, #0x8]
ldr r1, [sp, #0xc]
smull r2, r0, r3, r0
mov r2, r2, lsr #0xc
orr r2, r2, r0, lsl #0x14
str r2, [sp, #0x8]
ldr r2, [r4, #0x30]
ldr r0, [sp, #0x38]
smull r3, r1, r2, r1
mov r2, r3, lsr #0xc
orr r2, r2, r1, lsl #0x14
str r2, [sp, #0xc]
ldr r1, [r4, #0x30]
smull r2, r0, r1, r0
mov r1, r2, lsr #0xc
orr r1, r1, r0, lsl #0x14
str r1, [sp, #0x38]
_020BF4FC:
ldr r3, [r4, #0x34]
cmp r3, #0x1000
beq _020BF54C
ldr r0, [sp, #0x18]
ldr r1, [sp, #0x1c]
smull r2, r0, r3, r0
mov r2, r2, lsr #0xc
orr r2, r2, r0, lsl #0x14
str r2, [sp, #0x18]
ldr r2, [r4, #0x34]
ldr r0, [sp, #0x3c]
smull r3, r1, r2, r1
mov r2, r3, lsr #0xc
orr r2, r2, r1, lsl #0x14
str r2, [sp, #0x1c]
ldr r1, [r4, #0x34]
smull r2, r0, r1, r0
mov r1, r2, lsr #0xc
orr r1, r1, r0, lsl #0x14
str r1, [sp, #0x3c]
_020BF54C:
add r1, sp, #0x0
ldr r0, [sp, #0x0]
add r1, r1, #0x4
mov r2, #0x12
bl NNS_G3dGeBufferOP_N
add sp, sp, #0x50
ldmia sp!, {r4,pc}
.balign 4
_020BF568: .word 0x00101610
_020BF56C: .word 0x00101810
_020BF570: .word calcTexMtx_
arm_func_end NNSi_G3dSendTexSRT3dsMax
local_arm_func_start texmtxCalc_flagTRS_
texmtxCalc_flagTRS_: ; 0x020BF574
mov r2, #0x1000
str r2, [r0, #0x0]
mov r1, #0x0
str r1, [r0, #0x4]
str r1, [r0, #0x10]
str r2, [r0, #0x14]
str r1, [r0, #0x30]
str r1, [r0, #0x34]
bx lr
arm_func_end texmtxCalc_flagTRS_
local_arm_func_start texmtxCalc_flagTR_
texmtxCalc_flagTR_: ; 0x020BF598
ldr r2, [r1, #0x18]
mov r12, #0x0
str r2, [r0, #0x0]
ldr r2, [r1, #0x1c]
str r2, [r0, #0x14]
str r12, [r0, #0x4]
ldr r3, [r1, #0x18]
ldrh r2, [r1, #0x2c]
rsb r3, r3, #0x1000
mul r2, r3, r2
mov r2, r2, lsl #0x3
str r2, [r0, #0x30]
ldr r2, [r1, #0x1c]
ldrh r1, [r1, #0x2e]
rsb r2, r2, #0x1000
mul r1, r2, r1
mov r1, r1, lsl #0x3
str r1, [r0, #0x34]
str r12, [r0, #0x10]
bx lr
arm_func_end texmtxCalc_flagTR_
local_arm_func_start texmtxCalc_flagTS_
texmtxCalc_flagTS_: ; 0x020BF5E8
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r5, r1
ldrh r2, [r5, #0x2c]
ldrh r1, [r5, #0x2e]
mov r6, r0
mov r4, r2, lsl #0xc
mov r7, r1, lsl #0xc
mov r0, r7
mov r1, r4
bl FX_DivAsync
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x0]
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x14]
bl FX_GetDivResult
ldrsh r2, [r5, #0x20]
mov r1, r7
mul r0, r2, r0
mov r2, r0, asr #0xc
mov r0, r4
str r2, [r6, #0x4]
bl FX_DivAsync
ldrh r2, [r5, #0x2c]
ldrh r1, [r5, #0x2e]
ldrsh r4, [r5, #0x22]
rsb r0, r2, #0x0
rsb r1, r1, #0x0
mov r0, r0, lsl #0xb
ldrsh r3, [r5, #0x20]
mov r1, r1, lsl #0xb
smull r7, lr, r4, r0
smull r12, r4, r3, r1
subs r7, r7, r12
sbc r3, lr, r4
mov r4, r7, lsr #0x8
orr r4, r4, r3, lsl #0x18
add r2, r4, r2, lsl #0xf
str r2, [r6, #0x30]
ldrsh r2, [r5, #0x22]
ldrsh r3, [r5, #0x20]
ldrh r12, [r5, #0x2e]
smull r4, r1, r2, r1
smlal r4, r1, r3, r0
mov r0, r4, lsr #0x8
orr r0, r0, r1, lsl #0x18
add r0, r0, r12, lsl #0xf
str r0, [r6, #0x34]
bl FX_GetDivResult
ldrsh r1, [r5, #0x20]
rsb r1, r1, #0x0
mul r0, r1, r0
mov r0, r0, asr #0xc
str r0, [r6, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end texmtxCalc_flagTS_
local_arm_func_start texmtxCalc_flagT_
texmtxCalc_flagT_: ; 0x020BF6C8
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x4
mov r9, r1
ldrh r2, [r9, #0x2c]
ldrh r1, [r9, #0x2e]
mov r10, r0
mov r8, r2, lsl #0xc
mov r11, r1, lsl #0xc
mov r0, r11
mov r1, r8
bl FX_DivAsync
ldrsh r0, [r9, #0x22]
ldr r3, [r9, #0x18]
ldrsh r5, [r9, #0x20]
ldr r4, [r9, #0x1c]
smull r2, r1, r3, r0
mov r7, r2, lsr #0xc
orr r7, r7, r1, lsl #0x14
smull r2, r1, r3, r5
mov r6, r2, lsr #0xc
orr r6, r6, r1, lsl #0x14
smull r3, r2, r4, r0
smull r1, r0, r4, r5
mov r5, r3, lsr #0xc
orr r5, r5, r2, lsl #0x14
mov r4, r1, lsr #0xc
orr r4, r4, r0, lsl #0x14
str r7, [r10, #0x0]
str r5, [r10, #0x14]
bl FX_GetDivResult
mov r1, r11
mul r0, r4, r0
mov r0, r0, asr #0xc
str r0, [r10, #0x4]
mov r0, r8
bl FX_DivAsync
ldrh r3, [r9, #0x2c]
ldrh r1, [r9, #0x2e]
rsb r0, r3, #0x0
rsb r1, r1, #0x0
mov r2, r1, lsl #0xb
mov r11, r0, lsl #0xb
smull r1, r0, r7, r11
smull r8, r7, r5, r2
smlal r8, r7, r4, r11
mov r4, r8, lsr #0x8
orr r4, r4, r7, lsl #0x18
smull r5, r2, r6, r2
subs r1, r1, r5
sbc r0, r0, r2
mov r1, r1, lsr #0x8
orr r1, r1, r0, lsl #0x18
add r0, r1, r3, lsl #0xf
str r0, [r10, #0x30]
ldrh r0, [r9, #0x2e]
add r0, r4, r0, lsl #0xf
str r0, [r10, #0x34]
bl FX_GetDivResult
rsb r1, r6, #0x0
mul r0, r1, r0
mov r0, r0, asr #0xc
str r0, [r10, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
arm_func_end texmtxCalc_flagT_
local_arm_func_start texmtxCalc_flagRS_
texmtxCalc_flagRS_: ; 0x020BF7C8
mov r2, #0x1000
str r2, [r0, #0x0]
str r2, [r0, #0x14]
mov r12, #0x0
str r12, [r0, #0x4]
ldr r3, [r1, #0x24]
ldrh r2, [r1, #0x2c]
rsb r3, r3, #0x0
mul r2, r3, r2
mov r2, r2, lsl #0x4
str r2, [r0, #0x30]
ldrh r2, [r1, #0x2e]
ldr r1, [r1, #0x28]
mul r2, r1, r2
mov r1, r2, lsl #0x4
str r1, [r0, #0x34]
str r12, [r0, #0x10]
bx lr
arm_func_end texmtxCalc_flagRS_
local_arm_func_start texmtxCalc_flagR_
texmtxCalc_flagR_: ; 0x020BF810
stmdb sp!, {r4-r6,lr}
ldr r2, [r1, #0x18]
mov r3, #0x0
str r2, [r0, #0x0]
ldr r2, [r1, #0x1c]
str r2, [r0, #0x14]
str r3, [r0, #0x4]
ldrh r5, [r1, #0x2c]
ldr r12, [r1, #0x24]
ldrh r2, [r1, #0x2e]
mul lr, r12, r5
rsb r12, r5, #0x0
mov r12, r12, lsl #0xb
ldr r4, [r1, #0x18]
sub r12, r12, lr
smull lr, r12, r4, r12
ldr r6, [r1, #0x28]
mov r4, lr, lsr #0x8
orr r4, r4, r12, lsl #0x18
add r4, r4, r5, lsl #0xf
str r4, [r0, #0x30]
mul r4, r6, r2
rsb r5, r2, #0x0
ldr r2, [r1, #0x1c]
add r4, r4, r5, lsl #0xb
smull lr, r12, r2, r4
mov r2, lr, lsr #0x8
ldrh r1, [r1, #0x2e]
orr r2, r2, r12, lsl #0x18
add r1, r2, r1, lsl #0xf
str r1, [r0, #0x34]
str r3, [r0, #0x10]
ldmia sp!, {r4-r6,pc}
arm_func_end texmtxCalc_flagR_
local_arm_func_start texmtxCalc_flagS_
texmtxCalc_flagS_: ; 0x020BF894
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r5, r1
ldrh r2, [r5, #0x2c]
ldrh r1, [r5, #0x2e]
mov r6, r0
mov r4, r2, lsl #0xc
mov r7, r1, lsl #0xc
mov r0, r7
mov r1, r4
bl FX_DivAsync
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x0]
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x14]
bl FX_GetDivResult
ldrsh r2, [r5, #0x20]
mov r1, r7
mul r0, r2, r0
mov r2, r0, asr #0xc
mov r0, r4
str r2, [r6, #0x4]
bl FX_DivAsync
ldrh r2, [r5, #0x2c]
ldrh r7, [r5, #0x2e]
ldr r1, [r5, #0x28]
ldr r0, [r5, #0x24]
rsb r4, r2, #0x0
mul r3, r1, r7
rsb r1, r7, #0x0
add r1, r3, r1, lsl #0xb
ldrsh r3, [r5, #0x20]
mov r7, r4, lsl #0xb
mul r4, r0, r2
sub r0, r7, r4
ldrsh lr, [r5, #0x22]
smull r12, r4, r3, r1
smull r7, r3, lr, r0
subs r7, r7, r12
sbc r3, r3, r4
mov r4, r7, lsr #0x8
orr r4, r4, r3, lsl #0x18
add r2, r4, r2, lsl #0xf
str r2, [r6, #0x30]
ldrsh r2, [r5, #0x22]
ldrsh r3, [r5, #0x20]
ldrh r12, [r5, #0x2e]
smull r4, r1, r2, r1
smlal r4, r1, r3, r0
mov r0, r4, lsr #0x8
orr r0, r0, r1, lsl #0x18
add r0, r0, r12, lsl #0xf
str r0, [r6, #0x34]
bl FX_GetDivResult
ldrsh r1, [r5, #0x20]
rsb r1, r1, #0x0
mul r0, r1, r0
mov r0, r0, asr #0xc
str r0, [r6, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end texmtxCalc_flagS_
local_arm_func_start texmtxCalc_flag_
texmtxCalc_flag_: ; 0x020BF988
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x4
mov r9, r1
ldrh r2, [r9, #0x2c]
ldrh r1, [r9, #0x2e]
mov r10, r0
mov r8, r2, lsl #0xc
mov r11, r1, lsl #0xc
mov r0, r11
mov r1, r8
bl FX_DivAsync
ldrsh r0, [r9, #0x22]
ldr r3, [r9, #0x18]
ldrsh r5, [r9, #0x20]
ldr r4, [r9, #0x1c]
smull r2, r1, r3, r0
mov r7, r2, lsr #0xc
orr r7, r7, r1, lsl #0x14
smull r2, r1, r3, r5
mov r6, r2, lsr #0xc
orr r6, r6, r1, lsl #0x14
smull r3, r2, r4, r0
smull r1, r0, r4, r5
mov r5, r3, lsr #0xc
orr r5, r5, r2, lsl #0x14
mov r4, r1, lsr #0xc
orr r4, r4, r0, lsl #0x14
str r7, [r10, #0x0]
str r5, [r10, #0x14]
bl FX_GetDivResult
mov r1, r11
mul r0, r4, r0
mov r0, r0, asr #0xc
str r0, [r10, #0x4]
mov r0, r8
bl FX_DivAsync
ldrh r1, [r9, #0x2c]
ldrh r8, [r9, #0x2e]
ldr r2, [r9, #0x28]
rsb r0, r1, #0x0
mul r3, r2, r8
rsb r2, r8, #0x0
add r8, r3, r2, lsl #0xb
mov r0, r0, lsl #0xb
smull r3, r2, r5, r8
smull r8, r5, r6, r8
ldr r11, [r9, #0x24]
mul r12, r11, r1
sub r0, r0, r12
smlal r3, r2, r4, r0
smull r4, r0, r7, r0
subs r4, r4, r8
sbc r0, r0, r5
mov r4, r4, lsr #0x8
orr r4, r4, r0, lsl #0x18
add r0, r4, r1, lsl #0xf
str r0, [r10, #0x30]
ldrh r1, [r9, #0x2e]
mov r0, r3, lsr #0x8
orr r0, r0, r2, lsl #0x18
add r0, r0, r1, lsl #0xf
str r0, [r10, #0x34]
bl FX_GetDivResult
rsb r1, r6, #0x0
mul r0, r1, r0
mov r0, r0, asr #0xc
str r0, [r10, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
arm_func_end texmtxCalc_flag_

352
arm9/asm/NNS_G3D_anm.s Normal file
View File

@@ -0,0 +1,352 @@
.include "asm/macros.inc"
.include "global.inc"
.section .data
.global NNS_G3dAnmFmtNum
NNS_G3dAnmFmtNum: ; 0x02106594
.byte 0x05, 0x00, 0x00, 0x00
.global NNS_G3dFuncAnmVisNsBvaDefault
NNS_G3dFuncAnmVisNsBvaDefault: ; 0x02106598
.word NNSi_G3dAnmCalcNsBva
.global NNS_G3dFuncAnmJntNsBcaDefault
NNS_G3dFuncAnmJntNsBcaDefault: ; 0x0210659C
.word NNSi_G3dAnmCalcNsBca
.global NNS_G3dFuncAnmMatNsBtaDefault
NNS_G3dFuncAnmMatNsBtaDefault: ; 0x021065A0
.word NNSi_G3dAnmCalcNsBta
.global NNS_G3dFuncAnmMatNsBtpDefault
NNS_G3dFuncAnmMatNsBtpDefault: ; 0x021065A4
.word NNSi_G3dAnmCalcNsBtp
.global NNS_G3dFuncAnmMatNsBmaDefault
NNS_G3dFuncAnmMatNsBmaDefault: ; 0x021065A8
.word NNSi_G3dAnmCalcNsBma
.global NNS_G3dFuncBlendVisDefault
NNS_G3dFuncBlendVisDefault: ; 0x021065AC
.word NNSi_G3dAnmBlendVis
.global NNS_G3dFuncBlendJntDefault
NNS_G3dFuncBlendJntDefault: ; 0x021065B0
.word NNSi_G3dAnmBlendJnt
.global NNS_G3dFuncBlendMatDefault
NNS_G3dFuncBlendMatDefault: ; 0x021065B4
.word NNSi_G3dAnmBlendMat
.global NNS_G3dAnmObjInitFuncArray
NNS_G3dAnmObjInitFuncArray: ; 0x021065B8
.byte 0x4D, 0x00, 0x41, 0x4D
.word NNSi_G3dAnmObjInitNsBma
.byte 0x4D, 0x00, 0x50, 0x54
.word NNSi_G3dAnmObjInitNsBtp
.byte 0x4D, 0x00, 0x41, 0x54
.word NNSi_G3dAnmObjInitNsBta
.byte 0x56, 0x00, 0x41, 0x56
.word NNSi_G3dAnmObjInitNsBva
.byte 0x4A, 0x00, 0x41, 0x43
.word NNSi_G3dAnmObjInitNsBca
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.section .text
arm_func_start NNSi_G3dAnmBlendVis
NNSi_G3dAnmBlendVis: ; 0x020B8640
stmdb sp!, {r4-r8,lr}
sub sp, sp, #0x8
mov r7, r0
mov r0, #0x0
mov r6, r1
str r0, [r7, #0x0]
add r4, sp, #0x0
mov r5, r2, lsl #0x1
mov r8, #0x1
_020B8664:
add r1, r5, r6
ldrh r2, [r1, #0x1a]
ands r1, r2, #0x100
beq _020B869C
ldr r3, [r6, #0xc]
mov r0, r4
mov r1, r6
and r2, r2, #0xff
blx r3
ldr r2, [r7, #0x0]
ldr r1, [sp, #0x0]
mov r0, r8
orr r1, r2, r1
str r1, [r7, #0x0]
_020B869C:
ldr r6, [r6, #0x10]
cmp r6, #0x0
bne _020B8664
add sp, sp, #0x8
ldmia sp!, {r4-r8,pc}
arm_func_end NNSi_G3dAnmBlendVis
arm_func_start NNSi_G3dAnmBlendJnt
NNSi_G3dAnmBlendJnt: ; 0x020B86B0
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x5c
mov r9, r1
ldr r3, [r9, #0x10]
mov r10, r0
mov r8, r2
cmp r3, #0x0
bne _020B8704
add r2, r9, r8, lsl #0x1
ldrh r4, [r2, #0x1a]
and r2, r4, #0x300
cmp r2, #0x100
addne sp, sp, #0x5c
movne r0, #0x0
ldmneia sp!, {r4-r11,pc}
ldr r3, [r9, #0xc]
and r2, r4, #0xff
blx r3
add sp, sp, #0x5c
mov r0, #0x1
ldmia sp!, {r4-r11,pc}
_020B8704:
mov r7, #0x0
mov r3, r7
mov r4, r9
mov r2, r8, lsl #0x1
_020B8714:
add r0, r2, r4
ldrh r0, [r0, #0x1a]
and r0, r0, #0x300
cmp r0, #0x100
ldreq r0, [r4, #0x4]
moveq r1, r4
ldr r4, [r4, #0x10]
addeq r7, r7, r0
addeq r3, r3, #0x1
cmp r4, #0x0
bne _020B8714
cmp r7, #0x0
addeq sp, sp, #0x5c
moveq r0, #0x0
ldmeqia sp!, {r4-r11,pc}
cmp r3, #0x1
bne _020B877C
add r0, r1, r8, lsl #0x1
ldrh r2, [r0, #0x1a]
ldr r3, [r1, #0xc]
mov r0, r10
and r2, r2, #0xff
blx r3
add sp, sp, #0x5c
mov r0, #0x1
ldmia sp!, {r4-r11,pc}
_020B877C:
mov r1, r10
mov r0, #0x0
mov r2, #0x58
bl MIi_CpuClearFast
mvn r0, #0x0
str r0, [r10, #0x0]
add r5, sp, #0x0
add r4, sp, #0x4
add r11, sp, #0x10
_020B87A0:
add r0, r9, r8, lsl #0x1
ldrh r2, [r0, #0x1a]
and r0, r2, #0x300
cmp r0, #0x100
bne _020B8948
ldr r0, [r9, #0x4]
cmp r0, #0x0
ble _020B8948
ldr r3, [r9, #0xc]
mov r0, r5
mov r1, r9
and r2, r2, #0xff
blx r3
cmp r7, #0x1000
ldreq r6, [r9, #0x4]
beq _020B87F0
ldr r0, [r9, #0x4]
mov r1, r7
bl FX_Div
mov r6, r0
_020B87F0:
ldr r3, [sp, #0x0]
mov r1, r4
mov r2, r6
add r0, r10, #0x4
and r3, r3, #0x1
bl blendScaleVec_
ldr r1, [sp, #0x0]
add r0, r10, #0x10
and r3, r1, #0x8
mov r1, r11
mov r2, r6
bl blendScaleVec_
ldr r3, [sp, #0x0]
add r0, r10, #0x1c
add r1, sp, #0x1c
mov r2, r6
and r3, r3, #0x10
bl blendScaleVec_
ldr r0, [sp, #0x0]
ands r0, r0, #0x4
bne _020B8898
ldr r0, [sp, #0x4c]
ldr r2, [r10, #0x4c]
smull r1, r0, r6, r0
mov r1, r1, lsr #0xc
orr r1, r1, r0, lsl #0x14
add r0, r2, r1
str r0, [r10, #0x4c]
ldr r0, [sp, #0x50]
ldr r2, [r10, #0x50]
smull r1, r0, r6, r0
mov r1, r1, lsr #0xc
orr r1, r1, r0, lsl #0x14
add r0, r2, r1
str r0, [r10, #0x50]
ldr r0, [sp, #0x54]
ldr r2, [r10, #0x54]
smull r1, r0, r6, r0
mov r1, r1, lsr #0xc
orr r1, r1, r0, lsl #0x14
add r0, r2, r1
str r0, [r10, #0x54]
_020B8898:
ldr r0, [sp, #0x0]
ands r0, r0, #0x2
bne _020B8920
ldr r0, [sp, #0x28]
ldr r1, [r10, #0x28]
mul r0, r6, r0
add r0, r1, r0, asr #0xc
str r0, [r10, #0x28]
ldr r0, [sp, #0x2c]
ldr r1, [r10, #0x2c]
mul r0, r6, r0
add r0, r1, r0, asr #0xc
str r0, [r10, #0x2c]
ldr r0, [sp, #0x30]
ldr r1, [r10, #0x30]
mul r0, r6, r0
add r0, r1, r0, asr #0xc
str r0, [r10, #0x30]
ldr r0, [sp, #0x34]
ldr r1, [r10, #0x34]
mul r0, r6, r0
add r0, r1, r0, asr #0xc
str r0, [r10, #0x34]
ldr r0, [sp, #0x38]
ldr r1, [r10, #0x38]
mul r0, r6, r0
add r0, r1, r0, asr #0xc
str r0, [r10, #0x38]
ldr r0, [sp, #0x3c]
ldr r1, [r10, #0x3c]
mul r0, r6, r0
add r0, r1, r0, asr #0xc
str r0, [r10, #0x3c]
b _020B8938
_020B8920:
ldr r0, [r10, #0x28]
add r0, r0, r6
str r0, [r10, #0x28]
ldr r0, [r10, #0x38]
add r0, r0, r6
str r0, [r10, #0x38]
_020B8938:
ldr r1, [r10, #0x0]
ldr r0, [sp, #0x0]
and r0, r1, r0
str r0, [r10, #0x0]
_020B8948:
ldr r9, [r9, #0x10]
cmp r9, #0x0
bne _020B87A0
add r0, r10, #0x28
add r1, r10, #0x34
add r2, r10, #0x40
bl VEC_CrossProduct
add r0, r10, #0x28
mov r1, r0
bl VEC_Normalize
add r0, r10, #0x40
mov r1, r0
bl VEC_Normalize
add r0, r10, #0x40
add r1, r10, #0x28
add r2, r10, #0x34
bl VEC_CrossProduct
mov r0, #0x1
add sp, sp, #0x5c
ldmia sp!, {r4-r11,pc}
arm_func_end NNSi_G3dAnmBlendJnt
arm_func_start blendScaleVec_
blendScaleVec_: ; 0x020B8998
cmp r3, #0x0
beq _020B89C8
ldr r1, [r0, #0x0]
add r1, r1, r2
str r1, [r0, #0x0]
ldr r1, [r0, #0x4]
add r1, r1, r2
str r1, [r0, #0x4]
ldr r1, [r0, #0x8]
add r1, r1, r2
str r1, [r0, #0x8]
bx lr
_020B89C8:
ldr r3, [r1, #0x0]
ldr r12, [r0, #0x0]
mul r3, r2, r3
add r3, r12, r3, asr #0xc
str r3, [r0, #0x0]
ldr r3, [r1, #0x4]
ldr r12, [r0, #0x4]
mul r3, r2, r3
add r3, r12, r3, asr #0xc
str r3, [r0, #0x4]
ldr r1, [r1, #0x8]
ldr r3, [r0, #0x8]
mul r1, r2, r1
add r1, r3, r1, asr #0xc
str r1, [r0, #0x8]
bx lr
arm_func_end blendScaleVec_
arm_func_start NNSi_G3dAnmBlendMat
NNSi_G3dAnmBlendMat: ; 0x020B8A08
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r6, r0
mov r5, r1
mov r0, #0x0
mov r4, r2, lsl #0x1
mov r7, #0x1
_020B8A24:
add r1, r4, r5
ldrh r2, [r1, #0x1a]
ands r1, r2, #0x100
beq _020B8A4C
ldr r3, [r5, #0xc]
mov r0, r6
mov r1, r5
and r2, r2, #0xff
blx r3
mov r0, r7
_020B8A4C:
ldr r5, [r5, #0x10]
cmp r5, #0x0
bne _020B8A24
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end NNSi_G3dAnmBlendMat

62
arm9/asm/NNS_G3D_basic.s Normal file
View File

@@ -0,0 +1,62 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G3dGetJointScaleBasic
NNSi_G3dGetJointScaleBasic: ; 0x020BE62C
ands r2, r3, #0x4
ldrne r1, [r0, #0x0]
orrne r1, r1, #0x1
strne r1, [r0, #0x0]
bne _020BE658
ldr r2, [r1, #0x0]
str r2, [r0, #0x4]
ldr r2, [r1, #0x4]
str r2, [r0, #0x8]
ldr r1, [r1, #0x8]
str r1, [r0, #0xc]
_020BE658:
ldr r1, [r0, #0x0]
orr r1, r1, #0x18
str r1, [r0, #0x0]
bx lr
arm_func_end NNSi_G3dGetJointScaleBasic
arm_func_start NNSi_G3dSendJointSRTBasic
NNSi_G3dSendJointSRTBasic: ; 0x020BE668
stmdb sp!, {r4,lr}
mov r4, r0
ldr r1, [r4, #0x0]
ands r0, r1, #0x4
bne _020BE6AC
ands r0, r1, #0x2
bne _020BE698
add r1, r4, #0x28
mov r0, #0x19
mov r2, #0xc
bl NNS_G3dGeBufferOP_N
b _020BE6C4
_020BE698:
add r1, r4, #0x4c
mov r0, #0x1c
mov r2, #0x3
bl NNS_G3dGeBufferOP_N
b _020BE6C4
_020BE6AC:
ands r0, r1, #0x2
bne _020BE6C4
add r1, r4, #0x28
mov r0, #0x1a
mov r2, #0x9
bl NNS_G3dGeBufferOP_N
_020BE6C4:
ldr r0, [r4, #0x0]
ands r0, r0, #0x1
ldmneia sp!, {r4,pc}
add r1, r4, #0x4
mov r0, #0x1b
mov r2, #0x3
bl NNS_G3dGeBufferOP_N
ldmia sp!, {r4,pc}
arm_func_end NNSi_G3dSendJointSRTBasic

23
arm9/asm/NNS_G3D_cgtool.s Normal file
View File

@@ -0,0 +1,23 @@
.include "asm/macros.inc"
.include "global.inc"
.section .data
.global NNS_G3dSendJointSRT_FuncArray
NNS_G3dSendJointSRT_FuncArray: ; 0x02106608
.word NNSi_G3dSendJointSRTBasic
.word NNSi_G3dSendJointSRTMaya
.word NNSi_G3dSendJointSRTSi3d
.global NNS_G3dGetJointScale_FuncArray
NNS_G3dGetJointScale_FuncArray: ; 0x02106614
.word NNSi_G3dGetJointScaleBasic
.word NNSi_G3dGetJointScaleMaya
.word NNSi_G3dGetJointScaleSi3d
.global NNS_G3dSendTexSRT_FuncArray
NNS_G3dSendTexSRT_FuncArray: ; 0x02106620
.word NNSi_G3dSendTexSRTMaya
.word NNSi_G3dSendTexSRTSi3d
.word NNSi_G3dSendTexSRT3dsMax
.word NNSi_G3dSendTexSRTXsi

197
arm9/asm/NNS_G3D_gecom.s Normal file
View File

@@ -0,0 +1,197 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global NNS_G3dGeBuffer
NNS_G3dGeBuffer: ; 0x021D1C80
.space 0x4
.global NNS_G3dFlagGXDmaAsync
NNS_G3dFlagGXDmaAsync: ; 0x021D1C84
.space 0x4
.global NNS_G3dFlagUseFastDma
NNS_G3dFlagUseFastDma: ; 0x021D1C88
.space 0x4
.section .text
arm_func_start NNS_G3dGeBufferOP_N
NNS_G3dGeBufferOP_N: ; 0x020BB1C0
stmdb sp!, {r4-r6,lr}
ldr r3, _020BB2A4 ; =NNS_G3dGeBuffer
mov r6, r0
ldr r12, [r3, #0x0]
mov r5, r1
mov r4, r2
cmp r12, #0x0
beq _020BB278
ldr r0, _020BB2A8 ; =NNS_G3dFlagGXDmaAsync
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _020BB24C
ldr r2, [r12, #0x0]
add r0, r2, #0x1
add r1, r0, r4
cmp r1, #0xc0
bhi _020BB24C
str r0, [r12, #0x0]
ldr r0, [r3, #0x0]
cmp r4, #0x0
add r0, r0, r2, lsl #0x2
str r6, [r0, #0x4]
ldmeqia sp!, {r4-r6,pc}
ldr r2, [r3, #0x0]
mov r0, r5
ldr r1, [r2], #0x4
add r1, r2, r1, lsl #0x2
mov r2, r4, lsl #0x2
bl MIi_CpuCopyFast
ldr r0, _020BB2A4 ; =NNS_G3dGeBuffer
ldr r1, [r0, #0x0]
ldr r0, [r1, #0x0]
add r0, r0, r4
str r0, [r1, #0x0]
ldmia sp!, {r4-r6,pc}
_020BB24C:
ldr r0, [r12, #0x0]
cmp r0, #0x0
beq _020BB260
bl NNS_G3dGeFlushBuffer
b _020BB28C
_020BB260:
ldr r0, _020BB2A8 ; =NNS_G3dFlagGXDmaAsync
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _020BB28C
bl NNS_G3dGeWaitSendDL
b _020BB28C
_020BB278:
ldr r0, _020BB2A8 ; =NNS_G3dFlagGXDmaAsync
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _020BB28C
bl NNS_G3dGeWaitSendDL
_020BB28C:
ldr r1, _020BB2AC ; =0x04000400
mov r0, r5
mov r2, r4, lsl #0x2
str r6, [r1, #0x0]
bl MIi_CpuSend32
ldmia sp!, {r4-r6,pc}
.balign 4
_020BB2A4: .word NNS_G3dGeBuffer
_020BB2A8: .word NNS_G3dFlagGXDmaAsync
_020BB2AC: .word 0x04000400
arm_func_end NNS_G3dGeBufferOP_N
arm_func_start NNS_G3dGeSendDL
NNS_G3dGeSendDL: ; 0x020BB2B0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r1
mov r5, r0
cmp r4, #0x100
blo _020BB2DC
ldr r1, _020BB360 ; =GXi_DmaId
mvn r0, #0x0
ldr r1, [r1, #0x0]
cmp r1, r0
bne _020BB2F8
_020BB2DC:
mov r2, r4, lsr #0x2
ldr r0, [r5, #0x0]
add r1, r5, #0x4
sub r2, r2, #0x1
bl NNS_G3dGeBufferOP_N
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
_020BB2F8:
bl NNS_G3dGeFlushBuffer
ldr r0, _020BB364 ; =NNS_G3dFlagUseFastDma
ldr r1, _020BB368 ; =NNS_G3dFlagGXDmaAsync
ldr r0, [r0, #0x0]
mov r2, #0x1
str r2, [r1, #0x0]
cmp r0, #0x0
beq _020BB33C
ldr r0, _020BB360 ; =GXi_DmaId
str r1, [sp, #0x0]
ldr r0, [r0, #0x0]
ldr r3, _020BB36C ; =simpleUnlock_
mov r1, r5
mov r2, r4
bl MI_SendGXCommandAsyncFast
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
_020BB33C:
ldr r0, _020BB360 ; =GXi_DmaId
str r1, [sp, #0x0]
ldr r0, [r0, #0x0]
ldr r3, _020BB36C ; =simpleUnlock_
mov r1, r5
mov r2, r4
bl MI_SendGXCommandAsync
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020BB360: .word GXi_DmaId
_020BB364: .word NNS_G3dFlagUseFastDma
_020BB368: .word NNS_G3dFlagGXDmaAsync
_020BB36C: .word simpleUnlock_
arm_func_end NNS_G3dGeSendDL
arm_func_start simpleUnlock_
simpleUnlock_: ; 0x020BB370
mov r1, #0x0
str r1, [r0, #0x0]
bx lr
arm_func_end simpleUnlock_
arm_func_start NNS_G3dGeWaitSendDL
NNS_G3dGeWaitSendDL: ; 0x020BB37C
ldr r0, _020BB390 ; =NNS_G3dFlagGXDmaAsync
_020BB380:
ldr r1, [r0, #0x0]
cmp r1, #0x0
bne _020BB380
bx lr
.balign 4
_020BB390: .word NNS_G3dFlagGXDmaAsync
arm_func_end NNS_G3dGeWaitSendDL
arm_func_start NNS_G3dGeFlushBuffer
NNS_G3dGeFlushBuffer: ; 0x020BB394
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020BB3FC ; =NNS_G3dFlagGXDmaAsync
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _020BB3B0
bl NNS_G3dGeWaitSendDL
_020BB3B0:
ldr r0, _020BB400 ; =NNS_G3dGeBuffer
ldr r0, [r0, #0x0]
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldr r2, [r0, #0x0]
cmp r2, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldr r1, _020BB404 ; =0x04000400
add r0, r0, #0x4
mov r2, r2, lsl #0x2
bl MIi_CpuSend32
ldr r0, _020BB400 ; =NNS_G3dGeBuffer
mov r1, #0x0
ldr r0, [r0, #0x0]
str r1, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020BB3FC: .word NNS_G3dFlagGXDmaAsync
_020BB400: .word NNS_G3dGeBuffer
_020BB404: .word 0x04000400
arm_func_end NNS_G3dGeFlushBuffer

355
arm9/asm/NNS_G3D_glbstate.s Normal file
View File

@@ -0,0 +1,355 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global NNS_G3dGlb
NNS_G3dGlb: ; 0x021CED18
.space 0x264
.section .text
arm_func_start NNS_G3dGlbGetViewPort
NNS_G3dGlbGetViewPort: ; 0x020B8200
cmp r0, #0x0
ldrne ip, _020B8260 ; =NNS_G3dGlb
ldrne r12, [r12, #0xa0]
andne r12, r12, #0xff
strne r12, [r0, #0x0]
cmp r1, #0x0
ldrne r0, _020B8260 ; =NNS_G3dGlb
ldrne r0, [r0, #0xa0]
movne r0, r0, lsr #0x8
andne r0, r0, #0xff
strne r0, [r1, #0x0]
cmp r2, #0x0
ldrne r0, _020B8260 ; =NNS_G3dGlb
ldrne r0, [r0, #0xa0]
movne r0, r0, lsr #0x10
andne r0, r0, #0xff
strne r0, [r2, #0x0]
cmp r3, #0x0
ldrne r0, _020B8260 ; =NNS_G3dGlb
ldrne r0, [r0, #0xa0]
movne r0, r0, lsr #0x18
andne r0, r0, #0xff
strne r0, [r3, #0x0]
bx lr
.balign 4
_020B8260: .word NNS_G3dGlb
arm_func_end NNS_G3dGlbGetViewPort
arm_func_start NNS_G3dGlbGetInvWV
NNS_G3dGlbGetInvWV: ; 0x020B8264
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020B829C ; =NNS_G3dGlb
ldr r0, [r0, #0xfc]
ands r0, r0, #0x80
bne _020B8290
bl calcSrtCameraMtx_
ldr r0, _020B829C ; =NNS_G3dGlb
ldr r1, [r0, #0xfc]
orr r1, r1, #0x80
str r1, [r0, #0xfc]
_020B8290:
ldr r0, _020B82A0 ; =NNS_G3dGlb + 0x160
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020B829C: .word NNS_G3dGlb
_020B82A0: .word NNS_G3dGlb + 0x160
arm_func_end NNS_G3dGlbGetInvWV
arm_func_start NNS_G3dGlbGetWV
NNS_G3dGlbGetWV: ; 0x020B82A4
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020B82DC ; =NNS_G3dGlb
ldr r0, [r0, #0xfc]
ands r0, r0, #0x80
bne _020B82D0
bl calcSrtCameraMtx_
ldr r0, _020B82DC ; =NNS_G3dGlb
ldr r1, [r0, #0xfc]
orr r1, r1, #0x80
str r1, [r0, #0xfc]
_020B82D0:
ldr r0, _020B82E0 ; =NNS_G3dGlb + 0x130
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020B82DC: .word NNS_G3dGlb
_020B82E0: .word NNS_G3dGlb + 0x130
arm_func_end NNS_G3dGlbGetWV
arm_func_start calcSrtCameraMtx_
calcSrtCameraMtx_: ; 0x020B82E4
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020B8330 ; =NNS_G3dGlb + 0xBC
ldr r1, _020B8334 ; =NNS_G3dGlb + 0x4C
ldr r2, _020B8338 ; =NNS_G3dGlb + 0x130
bl MTX_Concat43
ldr r3, _020B833C ; =NNS_G3dGlb
ldr r0, _020B8338 ; =NNS_G3dGlb + 0x130
ldr r2, [r3, #0xf4]
mov r1, r0
str r2, [sp, #0x0]
ldr r2, [r3, #0xec]
ldr r3, [r3, #0xf0]
bl MTX_ScaleApply43
ldr r0, _020B8338 ; =NNS_G3dGlb + 0x130
ldr r1, _020B8340 ; =NNS_G3dGlb + 0x160
bl MTX_Inverse43
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020B8330: .word NNS_G3dGlb + 0xBC
_020B8334: .word NNS_G3dGlb + 0x4C
_020B8338: .word NNS_G3dGlb + 0x130
_020B833C: .word NNS_G3dGlb
_020B8340: .word NNS_G3dGlb + 0x160
arm_func_end calcSrtCameraMtx_
arm_func_start NNS_G3dGlbGetInvV
NNS_G3dGlbGetInvV: ; 0x020B8344
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020B8384 ; =NNS_G3dGlb
ldr r0, [r0, #0xfc]
ands r0, r0, #0x8
bne _020B8378
ldr r0, _020B8388 ; =NNS_G3dGlb + 0x4C
ldr r1, _020B838C ; =NNS_G3dGlb + 0x100
bl MTX_Inverse43
ldr r0, _020B8384 ; =NNS_G3dGlb
ldr r1, [r0, #0xfc]
orr r1, r1, #0x8
str r1, [r0, #0xfc]
_020B8378:
ldr r0, _020B838C ; =NNS_G3dGlb + 0x100
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020B8384: .word NNS_G3dGlb
_020B8388: .word NNS_G3dGlb + 0x4C
_020B838C: .word NNS_G3dGlb + 0x100
arm_func_end NNS_G3dGlbGetInvV
arm_func_start NNS_G3dGlbPolygonAttr
NNS_G3dGlbPolygonAttr: ; 0x020B8390
orr r0, r0, r1, lsl #0x4
ldr r1, [sp, #0x4]
orr r0, r0, r2, lsl #0x6
orr r0, r1, r0
ldr r2, [sp, #0x0]
orr r1, r0, r3, lsl #0x18
ldr r0, _020B83B8 ; =NNS_G3dGlb
orr r1, r1, r2, lsl #0x10
str r1, [r0, #0x9c]
bx lr
.balign 4
_020B83B8: .word NNS_G3dGlb
arm_func_end NNS_G3dGlbPolygonAttr
arm_func_start NNS_G3dGlbMaterialColorSpecEmi
NNS_G3dGlbMaterialColorSpecEmi: ; 0x020B83BC
cmp r2, #0x0
movne r2, #0x1
orr r1, r0, r1, lsl #0x10
moveq r2, #0x0
ldr r0, _020B83DC ; =NNS_G3dGlb
orr r1, r1, r2, lsl #0xf
str r1, [r0, #0x98]
bx lr
.balign 4
_020B83DC: .word NNS_G3dGlb
arm_func_end NNS_G3dGlbMaterialColorSpecEmi
arm_func_start NNS_G3dGlbMaterialColorDiffAmb
NNS_G3dGlbMaterialColorDiffAmb: ; 0x020B83E0
cmp r2, #0x0
movne r2, #0x1
orr r1, r0, r1, lsl #0x10
moveq r2, #0x0
ldr r0, _020B8400 ; =NNS_G3dGlb
orr r1, r1, r2, lsl #0xf
str r1, [r0, #0x94]
bx lr
.balign 4
_020B8400: .word NNS_G3dGlb
arm_func_end NNS_G3dGlbMaterialColorDiffAmb
arm_func_start NNS_G3dGlbLightColor
NNS_G3dGlbLightColor: ; 0x020B8404
ldr r2, _020B8414 ; =NNS_G3dGlb + 0xA8
orr r1, r1, r0, lsl #0x1e
str r1, [r2, r0, lsl #0x2]
bx lr
.balign 4
_020B8414: .word NNS_G3dGlb + 0xA8
arm_func_end NNS_G3dGlbLightColor
arm_func_start NNS_G3dGlbLightVector
NNS_G3dGlbLightVector: ; 0x020B8418
stmdb sp!, {r4,lr}
ldr ip, _020B8444 ; =0x000003FF
ldr lr, _020B8448 ; =NNS_G3dGlb + 0x80
and r4, r12, r1, asr #0x3
and r1, r12, r2, asr #0x3
and r2, r12, r3, asr #0x3
orr r1, r4, r1, lsl #0xa
orr r1, r1, r2, lsl #0x14
orr r1, r1, r0, lsl #0x1e
str r1, [lr, r0, lsl #0x2]
ldmia sp!, {r4,pc}
.balign 4
_020B8444: .word 0x000003FF
_020B8448: .word NNS_G3dGlb + 0x80
arm_func_end NNS_G3dGlbLightVector
arm_func_start NNS_G3dGlbSetBaseScale
NNS_G3dGlbSetBaseScale: ; 0x020B844C
ldr r3, _020B846C ; =NNS_G3dGlb + 0xEC
ldmia r0, {r0-r2}
stmia r3, {r0-r2}
ldr r0, _020B8470 ; =NNS_G3dGlb
ldr r1, [r0, #0xfc]
bic r1, r1, #0xa4
str r1, [r0, #0xfc]
bx lr
.balign 4
_020B846C: .word NNS_G3dGlb + 0xEC
_020B8470: .word NNS_G3dGlb
arm_func_end NNS_G3dGlbSetBaseScale
arm_func_start NNS_G3dGlbSetBaseTrans
NNS_G3dGlbSetBaseTrans: ; 0x020B8474
ldr r3, _020B8494 ; =NNS_G3dGlb + 0xE0
ldmia r0, {r0-r2}
stmia r3, {r0-r2}
ldr r0, _020B8498 ; =NNS_G3dGlb
ldr r1, [r0, #0xfc]
bic r1, r1, #0xa4
str r1, [r0, #0xfc]
bx lr
.balign 4
_020B8494: .word NNS_G3dGlb + 0xE0
_020B8498: .word NNS_G3dGlb
arm_func_end NNS_G3dGlbSetBaseTrans
arm_func_start NNS_G3dGlbFlushP
NNS_G3dGlbFlushP: ; 0x020B849C
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020B84D4 ; =NNS_G3dGlb
mov r2, #0x3e
ldr r0, [r1], #0x4
bl NNS_G3dGeBufferOP_N
ldr r0, _020B84D4 ; =NNS_G3dGlb
ldr r1, [r0, #0xfc]
bic r1, r1, #0x1
str r1, [r0, #0xfc]
bic r1, r1, #0x2
str r1, [r0, #0xfc]
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020B84D4: .word NNS_G3dGlb
arm_func_end NNS_G3dGlbFlushP
arm_func_start NNS_G3dGlbInit
NNS_G3dGlbInit: ; 0x020B84D8
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
ldr r8, _020B85F4 ; =0x17101610
ldr r1, _020B85F8 ; =NNS_G3dGlb
ldr r5, _020B85FC ; =0x32323232
ldr r4, _020B8600 ; =0x60293130
ldr r3, _020B8604 ; =0x33333333
ldr r2, _020B8608 ; =0x002A1B19
mov r7, #0x0
mov r6, #0x2
ldr r0, _020B860C ; =NNS_G3dGlb + 0x4C
str r8, [r1, #0x0]
str r7, [r1, #0x4]
str r6, [r1, #0x48]
str r5, [r1, #0x7c]
str r4, [r1, #0x90]
str r3, [r1, #0xa4]
str r2, [r1, #0xb8]
bl MTX_Identity43_
ldr r0, _020B8610 ; =NNS_G3dGlb + 0x8
bl MTX_Identity44_
mov r2, r7
ldr r1, _020B85F8 ; =NNS_G3dGlb
ldr r7, _020B8614 ; =0x4210C210
ldr r0, _020B8618 ; =0x40000200
ldr lr, _020B861C ; =0x2D8B62D8
ldr sb, _020B8620 ; =0x800001FF
ldr r8, _020B8624 ; =0xC0080000
ldr r6, _020B8628 ; =0x001F008F
ldr r5, _020B862C ; =0xBFFF0000
ldr r4, _020B8630 ; =0x00007FFF
ldr ip, _020B8634 ; =0x800003E0
ldr r3, _020B8638 ; =0xC0007C00
str r0, [r1, #0x84]
str lr, [r1, #0x80]
mov lr, #0x4000001f
ldr r0, _020B863C ; =NNS_G3dGlb + 0xBC
str r9, [r1, #0x88]
str r8, [r1, #0x8c]
str r7, [r1, #0x94]
str r7, [r1, #0x98]
str r6, [r1, #0x9c]
str r5, [r1, #0xa0]
str r4, [r1, #0xa8]
str lr, [r1, #0xac]
str r12, [r1, #0xb0]
str r3, [r1, #0xb4]
str r2, [r1, #0xe0]
str r2, [r1, #0xe4]
str r2, [r1, #0xe8]
bl MTX_Identity33_
mov r3, #0x1000
ldr r0, _020B85F8 ; =NNS_G3dGlb
mov r2, #0x0
rsb r1, r3, #0x0
str r3, [r0, #0xec]
str r3, [r0, #0xf0]
str r3, [r0, #0xf4]
str r2, [r0, #0xf8]
str r2, [r0, #0xfc]
str r2, [r0, #0x248]
str r2, [r0, #0x244]
str r2, [r0, #0x240]
str r2, [r0, #0x254]
str r2, [r0, #0x24c]
str r3, [r0, #0x250]
str r2, [r0, #0x25c]
str r2, [r0, #0x258]
str r1, [r0, #0x260]
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
.balign 4
_020B85F4: .word 0x17101610
_020B85F8: .word NNS_G3dGlb
_020B85FC: .word 0x32323232
_020B8600: .word 0x60293130
_020B8604: .word 0x33333333
_020B8608: .word 0x002A1B19
_020B860C: .word NNS_G3dGlb + 0x4C
_020B8610: .word NNS_G3dGlb + 0x8
_020B8614: .word 0x4210C210
_020B8618: .word 0x40000200
_020B861C: .word 0x2D8B62D8
_020B8620: .word 0x800001FF
_020B8624: .word 0xC0080000
_020B8628: .word 0x001F008F
_020B862C: .word 0xBFFF0000
_020B8630: .word 0x00007FFF
_020B8634: .word 0x800003E0
_020B8638: .word 0xC0007C00
_020B863C: .word NNS_G3dGlb + 0xBC
arm_func_end NNS_G3dGlbInit

858
arm9/asm/NNS_G3D_kernel.s Normal file
View File

@@ -0,0 +1,858 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G3dReleaseMdlSet
NNS_G3dReleaseMdlSet: ; 0x020B772C
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r6, r0
ldrb r0, [r6, #0x9]
mov r5, #0x0
cmp r0, #0x0
addls sp, sp, #0x4
ldmlsia sp!, {r4-r7,pc}
add r4, r6, #0x8
_020B7750:
ldrh r0, [r6, #0xe]
ldrh r1, [r4, r0]
add r0, r4, r0
mla r0, r1, r5, r0
ldr r0, [r0, #0x4]
add r7, r6, r0
mov r0, r7
bl NNS_G3dReleaseMdlTex
mov r0, r7
bl NNS_G3dReleaseMdlPltt
ldrb r0, [r6, #0x9]
add r5, r5, #0x1
cmp r5, r0
blo _020B7750
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end NNS_G3dReleaseMdlSet
arm_func_start NNS_G3dBindMdlSet
NNS_G3dBindMdlSet: ; 0x020B7790
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
mov r8, r0
ldrb r0, [r8, #0x9]
mov r7, r1
mov r5, #0x1
cmp r0, #0x0
mov r6, #0x0
bls _020B7800
add r4, r8, #0x8
_020B77B8:
ldrh r0, [r8, #0xe]
mov r1, r7
ldrh r2, [r4, r0]
add r0, r4, r0
mla r0, r2, r6, r0
ldr r0, [r0, #0x4]
add r9, r8, r0
mov r0, r9
bl NNS_G3dBindMdlTex
and r5, r5, r0
mov r0, r9
mov r1, r7
bl NNS_G3dBindMdlPltt
ldrb r1, [r8, #0x9]
add r6, r6, #0x1
and r5, r5, r0
cmp r6, r1
blo _020B77B8
_020B7800:
mov r0, r5
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
arm_func_end NNS_G3dBindMdlSet
arm_func_start NNS_G3dReleaseMdlPltt
NNS_G3dReleaseMdlPltt: ; 0x020B780C
ldr r2, [r0, #0x8]
mov r1, #0x0
add r2, r0, r2
ldrh r0, [r2, #0x2]
add r12, r2, r0
ldrb r0, [r12, #0x1]
cmp r0, #0x0
bxls lr
_020B782C:
ldrh r2, [r12, #0x6]
ldrh r0, [r12, r2]
add r2, r12, r2
add r2, r2, #0x4
mla r3, r0, r1, r2
ldrb r0, [r3, #0x3]
add r1, r1, #0x1
ands r2, r0, #0x1
bicne r0, r0, #0x1
strneb r0, [r3, #0x3]
ldrb r0, [r12, #0x1]
cmp r1, r0
blo _020B782C
bx lr
arm_func_end NNS_G3dReleaseMdlPltt
arm_func_start NNS_G3dBindMdlPltt
NNS_G3dBindMdlPltt: ; 0x020B7864
stmdb sp!, {r4-r10,lr}
ldr r2, [r0, #0x8]
mov r10, r1
add r9, r0, r2
ldrh r0, [r9, #0x2]
mov r6, #0x1
mov r7, #0x0
add r8, r9, r0
ldrb r0, [r8, #0x1]
cmp r0, #0x0
bls _020B7908
mov r5, r7
mov r4, r7
_020B7898:
ldrh r1, [r8, #0x6]
ldrh r0, [r10, #0x34]
add r2, r8, r1
ldrh r1, [r2, #0x2]
add r0, r10, r0
add r1, r2, r1
add r1, r1, r5
bl NNS_G3dGetResDataByName
movs r3, r0
beq _020B78F0
ldrh r1, [r8, #0x6]
ldrh r0, [r8, r1]
add r1, r8, r1
add r1, r1, #0x4
mla r1, r0, r7, r1
ldrb r0, [r1, #0x3]
ands r0, r0, #0x1
bne _020B78F4
mov r0, r9
mov r2, r10
bl bindMdlPltt_Internal_
b _020B78F4
_020B78F0:
mov r6, r4
_020B78F4:
ldrb r0, [r8, #0x1]
add r7, r7, #0x1
add r5, r5, #0x10
cmp r7, r0
blo _020B7898
_020B7908:
mov r0, r6
ldmia sp!, {r4-r10,pc}
arm_func_end NNS_G3dBindMdlPltt
arm_func_start bindMdlPltt_Internal_
bindMdlPltt_Internal_: ; 0x020B7910
stmdb sp!, {r4-r6,lr}
ldrh r5, [r1, #0x0]
ldr r2, [r2, #0x2c]
ldrh r4, [r3, #0x2]
mov r2, r2, lsl #0x10
add r12, r0, r5
mov r5, r2, lsr #0x10
ands r2, r4, #0x1
ldrh r4, [r3, #0x0]
moveq r3, r5, lsl #0xf
moveq r5, r3, lsr #0x10
moveq r2, r4, lsl #0xf
moveq r4, r2, lsr #0x10
ldrb r3, [r1, #0x2]
mov r2, #0x0
cmp r3, #0x0
bls _020B7994
add r3, r4, r5
mov r3, r3, lsl #0x10
add r6, r0, #0x4
mov r4, r3, lsr #0x10
_020B7964:
ldrh r5, [r0, #0xa]
ldrb r3, [r12, r2]
add r2, r2, #0x1
ldrh lr, [r6, r5]
add r5, r6, r5
mla r3, lr, r3, r5
ldr r3, [r3, #0x4]
add r3, r0, r3
strh r4, [r3, #0x1c]
ldrb r3, [r1, #0x2]
cmp r2, r3
blo _020B7964
_020B7994:
ldrb r0, [r1, #0x3]
orr r0, r0, #0x1
strb r0, [r1, #0x3]
ldmia sp!, {r4-r6,pc}
arm_func_end bindMdlPltt_Internal_
arm_func_start NNS_G3dReleaseMdlTex
NNS_G3dReleaseMdlTex: ; 0x020B79A4
stmdb sp!, {r4-r6,lr}
ldr r2, [r0, #0x8]
mov r4, #0x0
ldrh r1, [r0, r2]
add r6, r0, r2
add r5, r6, r1
ldrb r0, [r5, #0x1]
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020B79C8:
ldrh r1, [r5, #0x6]
ldrh r0, [r5, r1]
add r1, r5, r1
add r1, r1, #0x4
mla r1, r0, r4, r1
ldrb r0, [r1, #0x3]
ands r0, r0, #0x1
beq _020B79F0
mov r0, r6
bl releaseMdlTex_Internal_
_020B79F0:
ldrb r0, [r5, #0x1]
add r4, r4, #0x1
cmp r4, r0
blo _020B79C8
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dReleaseMdlTex
arm_func_start NNS_G3dBindMdlTex
NNS_G3dBindMdlTex: ; 0x020B7A04
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x4
ldr r2, [r0, #0x8]
mov r10, r1
ldrh r1, [r0, r2]
add r9, r0, r2
mov r11, #0x1
add r8, r9, r1
ldrb r0, [r8, #0x1]
mov r7, #0x0
cmp r0, #0x0
bls _020B7AAC
mov r6, r7
mov r4, r7
add r5, r10, #0x3c
_020B7A40:
ldrh r1, [r8, #0x6]
mov r0, r5
add r2, r8, r1
ldrh r1, [r2, #0x2]
add r1, r2, r1
add r1, r1, r6
bl NNS_G3dGetResDataByName
movs r3, r0
beq _020B7A94
ldrh r1, [r8, #0x6]
ldrh r0, [r8, r1]
add r1, r8, r1
add r1, r1, #0x4
mla r1, r0, r7, r1
ldrb r0, [r1, #0x3]
ands r0, r0, #0x1
bne _020B7A98
mov r0, r9
mov r2, r10
bl bindMdlTex_Internal_
b _020B7A98
_020B7A94:
mov r11, r4
_020B7A98:
ldrb r0, [r8, #0x1]
add r7, r7, #0x1
add r6, r6, #0x10
cmp r7, r0
blo _020B7A40
_020B7AAC:
mov r0, r11
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
arm_func_end NNS_G3dBindMdlTex
arm_func_start releaseMdlTex_Internal_
releaseMdlTex_Internal_: ; 0x020B7AB8
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldrh r4, [r1, #0x0]
ldrb r2, [r1, #0x2]
mov r3, #0x0
add r12, r0, r4
cmp r2, #0x0
bls _020B7B28
add r2, r0, #0x4
mov r5, #0x1000
ldr lr, _020B7B3C ; =0xC00F0000
_020B7AE4:
ldrh r7, [r0, #0xa]
ldrb r4, [r12, r3]
add r3, r3, #0x1
ldrh r6, [r2, r7]
add r7, r2, r7
mla r4, r6, r4, r7
ldr r4, [r4, #0x4]
add r6, r0, r4
ldr r4, [r6, #0x14]
and r4, r4, lr
str r4, [r6, #0x14]
str r5, [r6, #0x24]
ldr r4, [r6, #0x24]
str r4, [r6, #0x28]
ldrb r4, [r1, #0x2]
cmp r3, r4
blo _020B7AE4
_020B7B28:
ldrb r0, [r1, #0x3]
bic r0, r0, #0x1
strb r0, [r1, #0x3]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020B7B3C: .word 0xC00F0000
arm_func_end releaseMdlTex_Internal_
arm_func_start bindMdlTex_Internal_
bindMdlTex_Internal_: ; 0x020B7B40
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0xc
mov r11, r1
mov r9, r3
ldr r1, [r9, #0x0]
mov r10, r0
and r0, r1, #0x1c000000
cmp r0, #0x14000000
ldrh r3, [r11, #0x0]
ldrne r1, [r2, #0x8]
mov r8, #0x0
add r0, r10, r3
str r0, [sp, #0x4]
ldrne r0, _020B7C50 ; =0x0000FFFF
andne r0, r1, r0
strne r0, [sp, #0x0]
ldreq r1, [r2, #0x18]
ldreq r0, _020B7C50 ; =0x0000FFFF
andeq r0, r1, r0
streq r0, [sp, #0x0]
ldrb r0, [r11, #0x2]
cmp r0, #0x0
bls _020B7C3C
mov r4, #0x1000
add r5, r10, #0x4
_020B7BA4:
ldrh r6, [r10, #0xa]
ldr r0, [sp, #0x4]
ldr r1, [r9, #0x0]
ldrb r2, [r0, r8]
ldrh r3, [r5, r6]
ldr r0, [sp, #0x0]
add r6, r5, r6
add r0, r1, r0
mla r1, r3, r2, r6
ldr r1, [r1, #0x4]
add r6, r10, r1
ldr r1, [r6, #0x14]
orr r0, r1, r0
str r0, [r6, #0x14]
ldr r3, [r9, #0x4]
ldr r0, _020B7C54 ; =0x000007FF
ldrh r1, [r6, #0x20]
and r2, r3, r0
and r7, r0, r3, lsr #0xb
cmp r2, r1
moveq r0, r4
beq _020B7C08
mov r0, r2, lsl #0xc
mov r1, r1, lsl #0xc
bl FX_Div
_020B7C08:
str r0, [r6, #0x24]
ldrh r1, [r6, #0x22]
cmp r7, r1
moveq r0, r4
beq _020B7C28
mov r0, r7, lsl #0xc
mov r1, r1, lsl #0xc
bl FX_Div
_020B7C28:
str r0, [r6, #0x28]
ldrb r0, [r11, #0x2]
add r8, r8, #0x1
cmp r8, r0
blo _020B7BA4
_020B7C3C:
ldrb r0, [r11, #0x3]
orr r0, r0, #0x1
strb r0, [r11, #0x3]
add sp, sp, #0xc
ldmia sp!, {r4-r11,pc}
.balign 4
_020B7C50: .word 0x0000FFFF
_020B7C54: .word 0x000007FF
arm_func_end bindMdlTex_Internal_
arm_func_start NNS_G3dPlttReleasePlttKey
NNS_G3dPlttReleasePlttKey: ; 0x020B7C58
ldrh r2, [r0, #0x32]
mov r1, #0x0
bic r2, r2, #0x1
strh r2, [r0, #0x32]
ldr r2, [r0, #0x2c]
str r1, [r0, #0x2c]
mov r0, r2
bx lr
arm_func_end NNS_G3dPlttReleasePlttKey
arm_func_start NNS_G3dPlttLoad
NNS_G3dPlttLoad: ; 0x020B7C78
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
movs r4, r1
mov r5, r0
beq _020B7C90
bl GX_BeginLoadTexPltt
_020B7C90:
ldrh r2, [r5, #0x30]
ldr r0, [r5, #0x38]
ldr r3, [r5, #0x2c]
ldr r1, _020B7CD8 ; =0x0000FFFF
add r0, r5, r0
and r1, r3, r1
mov r1, r1, lsl #0x3
mov r2, r2, lsl #0x3
bl GX_LoadTexPltt
ldrh r0, [r5, #0x32]
cmp r4, #0x0
addeq sp, sp, #0x4
orr r0, r0, #0x1
strh r0, [r5, #0x32]
ldmeqia sp!, {r4-r5,pc}
bl GX_EndLoadTexPltt
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020B7CD8: .word 0x0000FFFF
arm_func_end NNS_G3dPlttLoad
arm_func_start NNS_G3dPlttSetPlttKey
NNS_G3dPlttSetPlttKey: ; 0x020B7CDC
str r1, [r0, #0x2c]
bx lr
arm_func_end NNS_G3dPlttSetPlttKey
arm_func_start NNS_G3dPlttGetRequiredSize
NNS_G3dPlttGetRequiredSize: ; 0x020B7CE4
ldrh r0, [r0, #0x30]
mov r0, r0, lsl #0x3
bx lr
arm_func_end NNS_G3dPlttGetRequiredSize
arm_func_start NNS_G3dTexReleaseTexKey
NNS_G3dTexReleaseTexKey: ; 0x020B7CF0
ldrh r12, [r0, #0x10]
mov r3, #0x0
bic r12, r12, #0x1
strh r12, [r0, #0x10]
ldrh r12, [r0, #0x20]
bic r12, r12, #0x1
strh r12, [r0, #0x20]
ldr r12, [r0, #0x8]
str r12, [r1, #0x0]
str r3, [r0, #0x8]
ldr r1, [r0, #0x18]
str r1, [r2, #0x0]
str r3, [r0, #0x18]
bx lr
arm_func_end NNS_G3dTexReleaseTexKey
arm_func_start NNS_G3dTexLoad
NNS_G3dTexLoad: ; 0x020B7D28
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
movs r8, r1
mov r9, r0
beq _020B7D40
bl GX_BeginLoadTex
_020B7D40:
ldrh r0, [r9, #0xc]
movs r2, r0, lsl #0x3
beq _020B7D74
ldr r1, [r9, #0x8]
ldr r0, _020B7DF4 ; =0x0000FFFF
ldr r3, [r9, #0x14]
and r1, r1, r0
add r0, r9, r3
mov r1, r1, lsl #0x3
bl GX_LoadTex
ldrh r0, [r9, #0x10]
orr r0, r0, #0x1
strh r0, [r9, #0x10]
_020B7D74:
ldrh r0, [r9, #0x1c]
movs r7, r0, lsl #0x3
beq _020B7DDC
ldr r1, [r9, #0x18]
ldr r0, _020B7DF4 ; =0x0000FFFF
ldr r3, [r9, #0x24]
and r4, r1, r0
mov r5, r4, lsl #0x3
ldr r6, [r9, #0x28]
mov r1, r5
mov r2, r7
add r0, r9, r3
add r6, r9, r6
bl GX_LoadTex
ldr r0, _020B7DF8 ; =0x0001FFFF
and r1, r5, #0x40000
and r0, r0, r4, lsl #0x3
mov r0, r0, lsr #0x1
add r2, r0, #0x20000
mov r0, r6
add r1, r2, r1, lsr #0x2
mov r2, r7, lsr #0x1
bl GX_LoadTex
ldrh r0, [r9, #0x20]
orr r0, r0, #0x1
strh r0, [r9, #0x20]
_020B7DDC:
cmp r8, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r9,pc}
bl GX_EndLoadTex
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
.balign 4
_020B7DF4: .word 0x0000FFFF
_020B7DF8: .word 0x0001FFFF
arm_func_end NNS_G3dTexLoad
arm_func_start NNS_G3dTexSetTexKey
NNS_G3dTexSetTexKey: ; 0x020B7DFC
cmp r1, #0x0
strne r1, [r0, #0x8]
cmp r2, #0x0
strne r2, [r0, #0x18]
bx lr
arm_func_end NNS_G3dTexSetTexKey
arm_func_start NNS_G3dTex4x4GetRequiredSize
NNS_G3dTex4x4GetRequiredSize: ; 0x020B7E10
ldrh r0, [r0, #0x1c]
mov r0, r0, lsl #0x3
bx lr
arm_func_end NNS_G3dTex4x4GetRequiredSize
arm_func_start NNS_G3dTexGetRequiredSize
NNS_G3dTexGetRequiredSize: ; 0x020B7E1C
ldrh r0, [r0, #0xc]
mov r0, r0, lsl #0x3
bx lr
arm_func_end NNS_G3dTexGetRequiredSize
arm_func_start NNS_G3dRenderObjRemoveAnmObj
NNS_G3dRenderObjRemoveAnmObj: ; 0x020B7E28
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
add r0, r5, #0x8
mov r4, r1
bl removeLink_
cmp r0, #0x0
bne _020B7E74
mov r1, r4
add r0, r5, #0x10
bl removeLink_
cmp r0, #0x0
bne _020B7E74
mov r1, r4
add r0, r5, #0x18
bl removeLink_
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,pc}
_020B7E74:
ldr r0, [r5, #0x0]
orr r0, r0, #0x10
str r0, [r5, #0x0]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end NNS_G3dRenderObjRemoveAnmObj
arm_func_start removeLink_
removeLink_: ; 0x020B7E88
ldr r2, [r0, #0x0]
cmp r2, #0x0
moveq r0, #0x0
bxeq lr
cmp r2, r1
bne _020B7EB8
ldr r3, [r2, #0x10]
mov r2, #0x0
str r3, [r0, #0x0]
str r2, [r1, #0x10]
mov r0, #0x1
bx lr
_020B7EB8:
ldr r3, [r2, #0x10]
cmp r3, #0x0
beq _020B7EF4
_020B7EC4:
cmp r3, r1
bne _020B7EE4
ldr r1, [r3, #0x10]
mov r0, #0x0
str r1, [r2, #0x10]
str r0, [r3, #0x10]
mov r0, #0x1
bx lr
_020B7EE4:
mov r2, r3
ldr r3, [r3, #0x10]
cmp r3, #0x0
bne _020B7EC4
_020B7EF4:
mov r0, #0x0
bx lr
arm_func_end removeLink_
arm_func_start NNS_G3dRenderObjAddAnmObj
NNS_G3dRenderObjAddAnmObj: ; 0x020B7EFC
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r1
ldr r2, [r4, #0x8]
mov r5, r0
ldrb r0, [r2, #0x0]
cmp r0, #0x4a
beq _020B7F50
cmp r0, #0x4d
beq _020B7F34
cmp r0, #0x56
beq _020B7F6C
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
_020B7F34:
add r0, r5, #0x3c
bl updateHintVec_
mov r1, r4
add r0, r5, #0x8
bl addLink_
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
_020B7F50:
add r0, r5, #0x44
bl updateHintVec_
mov r1, r4
add r0, r5, #0x10
bl addLink_
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
_020B7F6C:
add r0, r5, #0x4c
bl updateHintVec_
mov r1, r4
add r0, r5, #0x18
bl addLink_
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end NNS_G3dRenderObjAddAnmObj
local_arm_func_start updateHintVec_
updateHintVec_: ; 0x020B7F88
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
cmp r1, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,pc}
mov r3, #0x1
mov r4, #0x0
_020B7FA4:
ldrb r2, [r1, #0x19]
mov r5, r4
cmp r2, #0x0
ble _020B7FE4
_020B7FB4:
add r2, r1, r5, lsl #0x1
ldrh r2, [r2, #0x1a]
ands r2, r2, #0x100
movne lr, r5, asr #0x5
andne r2, r5, #0x1f
ldrne r12, [r0, lr, lsl #0x2]
add r5, r5, #0x1
orrne r2, r12, r3, lsl r2
strne r2, [r0, lr, lsl #0x2]
ldrb r2, [r1, #0x19]
cmp r5, r2
blt _020B7FB4
_020B7FE4:
ldr r1, [r1, #0x10]
cmp r1, #0x0
bne _020B7FA4
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end updateHintVec_
arm_func_start addLink_
addLink_: ; 0x020B7FF8
ldr r12, [r0, #0x0]
cmp r12, #0x0
streq r1, [r0, #0x0]
bxeq lr
ldr r3, [r12, #0x10]
cmp r3, #0x0
bne _020B8058
ldrb r3, [r12, #0x18]
ldrb r2, [r1, #0x18]
cmp r3, r2
bls _020B8050
ldr r2, [r1, #0x10]
mov r3, r1
cmp r2, #0x0
beq _020B8044
_020B8034:
ldr r3, [r3, #0x10]
ldr r2, [r3, #0x10]
cmp r2, #0x0
bne _020B8034
_020B8044:
str r12, [r3, #0x10]
str r1, [r0, #0x0]
bx lr
_020B8050:
str r1, [r12, #0x10]
bx lr
_020B8058:
cmp r3, #0x0
beq _020B80AC
ldrb r2, [r1, #0x18]
_020B8064:
ldrb r0, [r3, #0x18]
cmp r0, r2
blo _020B809C
ldr r0, [r1, #0x10]
mov r2, r1
cmp r0, #0x0
beq _020B8090
_020B8080:
ldr r2, [r2, #0x10]
ldr r0, [r2, #0x10]
cmp r0, #0x0
bne _020B8080
_020B8090:
str r1, [r12, #0x10]
str r3, [r2, #0x10]
bx lr
_020B809C:
mov r12, r3
ldr r3, [r3, #0x10]
cmp r3, #0x0
bne _020B8064
_020B80AC:
str r1, [r12, #0x10]
bx lr
arm_func_end addLink_
arm_func_start NNS_G3dRenderObjInit
NNS_G3dRenderObjInit: ; 0x020B80B4
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r1
mov r1, r5
mov r0, #0x0
mov r2, #0x54
bl MIi_CpuClear32
ldr r0, _020B8104 ; =NNS_G3dFuncBlendMatDefault
ldr r1, _020B8108 ; =NNS_G3dFuncBlendJntDefault
ldr r2, [r0, #0x0]
ldr r0, _020B810C ; =NNS_G3dFuncBlendVisDefault
str r2, [r5, #0xc]
ldr r1, [r1, #0x0]
str r1, [r5, #0x14]
ldr r0, [r0, #0x0]
str r0, [r5, #0x1c]
str r4, [r5, #0x4]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020B8104: .word NNS_G3dFuncBlendMatDefault
_020B8108: .word NNS_G3dFuncBlendJntDefault
_020B810C: .word NNS_G3dFuncBlendVisDefault
arm_func_end NNS_G3dRenderObjInit
arm_func_start NNS_G3dAnmObjInit
NNS_G3dAnmObjInit: ; 0x020B8110
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r12, #0x0
str r12, [r0, #0x0]
str r1, [r0, #0x8]
str r12, [r0, #0x10]
mov r4, #0x7f
strb r4, [r0, #0x18]
mov r4, #0x1000
str r4, [r0, #0x4]
ldr lr, _020B81A4 ; =NNS_G3dAnmFmtNum
str r3, [r0, #0x14]
ldr r6, [lr, #0x0]
cmp r6, #0x0
addls sp, sp, #0x4
ldmlsia sp!, {r4-r7,pc}
ldrb r7, [r1, #0x0]
ldr r4, _020B81A8 ; =NNS_G3dAnmObjInitFuncArray
_020B8158:
ldrb r3, [r4, r12, lsl #0x3]
mov r5, r12, lsl #0x3
cmp r7, r3
bne _020B8190
add r3, r4, r5
ldrh lr, [r1, #0x2]
ldrh r3, [r3, #0x2]
cmp lr, r3
bne _020B8190
ldr r3, _020B81AC ; =NNS_G3dAnmObjInitFuncArray + 0x4
ldr r3, [r3, r5]
blx r3
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
_020B8190:
add r12, r12, #0x1
cmp r12, r6
blo _020B8158
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020B81A4: .word NNS_G3dAnmFmtNum
_020B81A8: .word NNS_G3dAnmObjInitFuncArray
_020B81AC: .word NNS_G3dAnmObjInitFuncArray + 0x4
arm_func_end NNS_G3dAnmObjInit
arm_func_start NNS_G3dAnmObjCalcSizeRequired
NNS_G3dAnmObjCalcSizeRequired: ; 0x020B81B0
ldrb r0, [r0, #0x0]
cmp r0, #0x4a
beq _020B81E4
cmp r0, #0x4d
beq _020B81D0
cmp r0, #0x56
beq _020B81E4
b _020B81F8
_020B81D0:
ldrb r0, [r1, #0x18]
mov r0, r0, lsl #0x1
add r0, r0, #0x1c
bic r0, r0, #0x3
bx lr
_020B81E4:
ldrb r0, [r1, #0x17]
mov r0, r0, lsl #0x1
add r0, r0, #0x1c
bic r0, r0, #0x3
bx lr
_020B81F8:
mov r0, #0x0
bx lr
arm_func_end NNS_G3dAnmObjCalcSizeRequired

594
arm9/asm/NNS_G3D_maya.s Normal file
View File

@@ -0,0 +1,594 @@
.include "asm/macros.inc"
.include "global.inc"
.section .data
calcTexMtx_: ; 0x021067B0
.word texmtxCalc_flag_
.word texmtxCalc_flagS_
.word texmtxCalc_flagR_
.word texmtxCalc_flagRS_
.word texmtxCalc_flagT_
.word texmtxCalc_flagTS_
.word texmtxCalc_flagTR_
.word texmtxCalc_flagTRS_
.section .text
arm_func_start NNSi_G3dSendTexSRTMaya
NNSi_G3dSendTexSRTMaya: ; 0x020BE6E4
stmdb sp!, {r4,lr}
sub sp, sp, #0x50
mov r4, r0
ldr r0, [r4, #0x0]
mov r1, #0x0
ands r0, r0, #0x8
ldrne r0, _020BE820 ; =0x00101610
mov r3, #0x3
strne r0, [sp, #0x0]
ldreq r0, _020BE824 ; =0x00101810
mov r2, #0x2
streq r0, [sp, #0x0]
mov r0, #0x1000
str r0, [sp, #0x44]
str r3, [sp, #0x4]
str r2, [sp, #0x48]
str r1, [sp, #0x40]
str r1, [sp, #0x34]
str r1, [sp, #0x30]
str r1, [sp, #0x2c]
str r1, [sp, #0x28]
str r1, [sp, #0x24]
str r1, [sp, #0x20]
str r1, [sp, #0x14]
str r1, [sp, #0x10]
ldr r1, [r4, #0x0]
ldr r0, _020BE828 ; =calcTexMtx_
and r1, r1, #0x7
ldr r2, [r0, r1, lsl #0x2]
add r0, sp, #0x8
mov r1, r4
blx r2
ldr r3, [r4, #0x30]
cmp r3, #0x1000
beq _020BE7B4
ldr r0, [sp, #0x8]
ldr r1, [sp, #0xc]
smull r2, r0, r3, r0
mov r2, r2, lsr #0xc
orr r2, r2, r0, lsl #0x14
str r2, [sp, #0x8]
ldr r2, [r4, #0x30]
ldr r0, [sp, #0x38]
smull r3, r1, r2, r1
mov r2, r3, lsr #0xc
orr r2, r2, r1, lsl #0x14
str r2, [sp, #0xc]
ldr r1, [r4, #0x30]
smull r2, r0, r1, r0
mov r1, r2, lsr #0xc
orr r1, r1, r0, lsl #0x14
str r1, [sp, #0x38]
_020BE7B4:
ldr r3, [r4, #0x34]
cmp r3, #0x1000
beq _020BE804
ldr r0, [sp, #0x18]
ldr r1, [sp, #0x1c]
smull r2, r0, r3, r0
mov r2, r2, lsr #0xc
orr r2, r2, r0, lsl #0x14
str r2, [sp, #0x18]
ldr r2, [r4, #0x34]
ldr r0, [sp, #0x3c]
smull r3, r1, r2, r1
mov r2, r3, lsr #0xc
orr r2, r2, r1, lsl #0x14
str r2, [sp, #0x1c]
ldr r1, [r4, #0x34]
smull r2, r0, r1, r0
mov r1, r2, lsr #0xc
orr r1, r1, r0, lsl #0x14
str r1, [sp, #0x3c]
_020BE804:
add r1, sp, #0x0
ldr r0, [sp, #0x0]
add r1, r1, #0x4
mov r2, #0x12
bl NNS_G3dGeBufferOP_N
add sp, sp, #0x50
ldmia sp!, {r4,pc}
.balign 4
_020BE820: .word 0x00101610
_020BE824: .word 0x00101810
_020BE828: .word calcTexMtx_
arm_func_end NNSi_G3dSendTexSRTMaya
local_arm_func_start texmtxCalc_flagTRS_
texmtxCalc_flagTRS_: ; 0x020BE82C
mov r2, #0x1000
str r2, [r0, #0x0]
mov r1, #0x0
str r1, [r0, #0x4]
str r1, [r0, #0x10]
str r2, [r0, #0x14]
str r1, [r0, #0x30]
str r1, [r0, #0x34]
bx lr
arm_func_end texmtxCalc_flagTRS_
local_arm_func_start texmtxCalc_flagTR_
texmtxCalc_flagTR_: ; 0x020BE850
ldr r2, [r1, #0x18]
mov r12, #0x0
str r2, [r0, #0x0]
ldr r2, [r1, #0x1c]
str r2, [r0, #0x14]
str r12, [r0, #0x4]
str r12, [r0, #0x30]
ldr r2, [r1, #0x1c]
ldrh r3, [r1, #0x2e]
mov r1, r2, lsl #0x1
rsb r1, r1, #0x0
add r1, r1, #0x2000
mul r1, r3, r1
mov r1, r1, lsl #0x3
str r1, [r0, #0x34]
str r12, [r0, #0x10]
bx lr
arm_func_end texmtxCalc_flagTR_
local_arm_func_start texmtxCalc_flagTS_
texmtxCalc_flagTS_: ; 0x020BE894
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r5, r1
ldrh r2, [r5, #0x2c]
ldrh r1, [r5, #0x2e]
mov r6, r0
mov r4, r2, lsl #0xc
mov r7, r1, lsl #0xc
mov r0, r7
mov r1, r4
bl FX_DivAsync
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x0]
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x14]
bl FX_GetDivResult
ldrsh r2, [r5, #0x20]
mov r1, r7
rsb r2, r2, #0x0
mul r0, r2, r0
mov r2, r0, asr #0xc
mov r0, r4
str r2, [r6, #0x4]
bl FX_DivAsync
ldrsh r1, [r5, #0x20]
ldrsh r0, [r5, #0x22]
ldrh r2, [r5, #0x2c]
add r0, r1, r0
rsb r0, r0, #0x0
add r0, r0, #0x1000
mul r0, r2, r0
mov r0, r0, lsl #0x3
str r0, [r6, #0x30]
ldrsh r1, [r5, #0x20]
ldrsh r0, [r5, #0x22]
ldrh r2, [r5, #0x2e]
sub r0, r1, r0
add r0, r0, #0x1000
mul r0, r2, r0
mov r0, r0, lsl #0x3
str r0, [r6, #0x34]
bl FX_GetDivResult
ldrsh r1, [r5, #0x20]
mul r0, r1, r0
mov r0, r0, asr #0xc
str r0, [r6, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end texmtxCalc_flagTS_
local_arm_func_start texmtxCalc_flagT_
texmtxCalc_flagT_: ; 0x020BE954
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x4
mov r9, r1
ldrh r2, [r9, #0x2c]
ldrh r1, [r9, #0x2e]
mov r10, r0
mov r8, r2, lsl #0xc
mov r11, r1, lsl #0xc
mov r0, r11
mov r1, r8
bl FX_DivAsync
ldrsh r5, [r9, #0x22]
ldr r3, [r9, #0x18]
ldrsh r0, [r9, #0x20]
ldr r4, [r9, #0x1c]
smull r2, r1, r3, r5
mov r6, r2, lsr #0xc
orr r6, r6, r1, lsl #0x14
smull r2, r1, r3, r0
mov r7, r2, lsr #0xc
orr r7, r7, r1, lsl #0x14
smull r3, r2, r4, r0
smull r1, r0, r4, r5
mov r5, r3, lsr #0xc
orr r5, r5, r2, lsl #0x14
mov r4, r1, lsr #0xc
orr r4, r4, r0, lsl #0x14
str r6, [r10, #0x0]
str r4, [r10, #0x14]
bl FX_GetDivResult
mov r1, r11
rsb r2, r5, #0x0
mul r0, r2, r0
mov r0, r0, asr #0xc
str r0, [r10, #0x4]
mov r0, r8
bl FX_DivAsync
sub r1, r5, r4
add r0, r7, r6
ldrh r3, [r9, #0x2c]
ldr r2, [r9, #0x18]
sub r0, r2, r0
mul r0, r3, r0
mov r0, r0, lsl #0x3
str r0, [r10, #0x30]
ldrh r2, [r9, #0x2e]
ldr r0, [r9, #0x1c]
sub r0, r1, r0
add r0, r0, #0x2000
mul r0, r2, r0
mov r0, r0, lsl #0x3
str r0, [r10, #0x34]
bl FX_GetDivResult
mul r0, r7, r0
mov r0, r0, asr #0xc
str r0, [r10, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
arm_func_end texmtxCalc_flagT_
local_arm_func_start texmtxCalc_flagRS_
texmtxCalc_flagRS_: ; 0x020BEA3C
mov r2, #0x1000
str r2, [r0, #0x0]
str r2, [r0, #0x14]
mov r12, #0x0
str r12, [r0, #0x4]
ldrh r2, [r1, #0x2c]
ldr r3, [r1, #0x24]
mul r2, r3, r2
rsb r2, r2, #0x0
mov r2, r2, lsl #0x4
str r2, [r0, #0x30]
ldrh r2, [r1, #0x2e]
ldr r1, [r1, #0x28]
mul r2, r1, r2
mov r1, r2, lsl #0x4
str r1, [r0, #0x34]
str r12, [r0, #0x10]
bx lr
arm_func_end texmtxCalc_flagRS_
local_arm_func_start texmtxCalc_flagR_
texmtxCalc_flagR_: ; 0x020BEA84
stmdb sp!, {r4,lr}
ldr r3, [r1, #0x18]
mov r2, #0x0
str r3, [r0, #0x0]
ldr r3, [r1, #0x1c]
str r3, [r0, #0x14]
str r2, [r0, #0x4]
ldr r4, [r1, #0x18]
ldr r3, [r1, #0x24]
ldrh lr, [r1, #0x2c]
smull r12, r3, r4, r3
mov r4, r12, lsr #0x8
orr r4, r4, r3, lsl #0x18
rsb r3, r4, #0x0
mul r3, lr, r3
str r3, [r0, #0x30]
ldr r4, [r1, #0x1c]
ldr r12, [r1, #0x28]
mov r3, r4, lsl #0x1
smull lr, r12, r4, r12
rsb r4, r3, #0x0
mov r3, lr, lsr #0x8
ldrh lr, [r1, #0x2e]
add r1, r4, #0x2000
orr r3, r3, r12, lsl #0x18
mul r4, lr, r1
mul r1, lr, r3
add r1, r1, r4, lsl #0x3
str r1, [r0, #0x34]
str r2, [r0, #0x10]
ldmia sp!, {r4,pc}
arm_func_end texmtxCalc_flagR_
local_arm_func_start texmtxCalc_flagS_
texmtxCalc_flagS_: ; 0x020BEB00
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r5, r1
ldrh r2, [r5, #0x2c]
ldrh r1, [r5, #0x2e]
mov r6, r0
mov r4, r2, lsl #0xc
mov r7, r1, lsl #0xc
mov r0, r7
mov r1, r4
bl FX_DivAsync
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x0]
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x14]
bl FX_GetDivResult
ldrsh r2, [r5, #0x20]
mov r1, r7
rsb r2, r2, #0x0
mul r0, r2, r0
mov r2, r0, asr #0xc
mov r0, r4
str r2, [r6, #0x4]
bl FX_DivAsync
ldrsh r2, [r5, #0x20]
ldrsh r1, [r5, #0x22]
ldrh r3, [r5, #0x2c]
ldr r0, [r5, #0x24]
add r1, r2, r1
rsb r1, r1, #0x0
add r1, r1, #0x1000
mul r2, r3, r1
mul r1, r0, r3
mov r0, r2, lsl #0x3
sub r0, r0, r1, lsl #0x4
str r0, [r6, #0x30]
ldrsh r2, [r5, #0x20]
ldrsh r1, [r5, #0x22]
ldrh r3, [r5, #0x2e]
ldr r0, [r5, #0x28]
sub r1, r2, r1
add r1, r1, #0x1000
mul r2, r3, r1
mul r1, r0, r3
mov r0, r2, lsl #0x3
add r0, r0, r1, lsl #0x4
str r0, [r6, #0x34]
bl FX_GetDivResult
ldrsh r1, [r5, #0x20]
mul r0, r1, r0
mov r0, r0, asr #0xc
str r0, [r6, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end texmtxCalc_flagS_
local_arm_func_start texmtxCalc_flag_
texmtxCalc_flag_: ; 0x020BEBD8
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x4
mov r9, r1
ldrh r2, [r9, #0x2c]
ldrh r1, [r9, #0x2e]
mov r10, r0
mov r8, r2, lsl #0xc
mov r11, r1, lsl #0xc
mov r0, r11
mov r1, r8
bl FX_DivAsync
ldrsh r5, [r9, #0x22]
ldr r3, [r9, #0x18]
ldrsh r0, [r9, #0x20]
ldr r4, [r9, #0x1c]
smull r2, r1, r3, r5
mov r6, r2, lsr #0xc
orr r6, r6, r1, lsl #0x14
smull r2, r1, r3, r0
mov r7, r2, lsr #0xc
orr r7, r7, r1, lsl #0x14
smull r3, r2, r4, r0
smull r1, r0, r4, r5
mov r5, r3, lsr #0xc
orr r5, r5, r2, lsl #0x14
mov r4, r1, lsr #0xc
orr r4, r4, r0, lsl #0x14
str r6, [r10, #0x0]
str r4, [r10, #0x14]
bl FX_GetDivResult
mov r1, r11
rsb r2, r5, #0x0
mul r0, r2, r0
mov r0, r0, asr #0xc
str r0, [r10, #0x4]
mov r0, r8
bl FX_DivAsync
sub r1, r5, r4
add r2, r7, r6
ldr r5, [r9, #0x18]
ldrh r0, [r9, #0x2c]
sub r3, r5, r2
ldr r2, [r9, #0x24]
mul r4, r0, r3
smull r3, r2, r5, r2
mov r4, r4, lsl #0x3
mov r3, r3, lsr #0x8
orr r3, r3, r2, lsl #0x18
mul r2, r0, r3
sub r0, r4, r2
str r0, [r10, #0x30]
ldr r4, [r9, #0x1c]
ldrh r3, [r9, #0x2e]
sub r0, r1, r4
add r0, r0, #0x2000
mul r2, r3, r0
ldr r0, [r9, #0x28]
smull r1, r0, r4, r0
mov r1, r1, lsr #0x8
orr r1, r1, r0, lsl #0x18
mul r0, r3, r1
add r0, r0, r2, lsl #0x3
str r0, [r10, #0x34]
bl FX_GetDivResult
mul r0, r7, r0
mov r0, r0, asr #0xc
str r0, [r10, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
arm_func_end texmtxCalc_flag_
arm_func_start NNSi_G3dGetJointScaleMaya
NNSi_G3dGetJointScaleMaya: ; 0x020BECEC
stmdb sp!, {r4-r8,lr}
mov r12, r0
ands r0, r3, #0x4
ldrb r3, [r2, #0x3]
beq _020BED40
ldr r1, [r12, #0x0]
ands r0, r3, #0x2
orr r0, r1, #0x1
str r0, [r12, #0x0]
beq _020BEDB8
ldr r0, _020BEE2C ; =NNS_G3dRS
ldrb r7, [r2, #0x1]
ldr r0, [r0, #0x0]
mov r1, #0x1
add r6, r0, #0xc4
mov r5, r7, lsr #0x5
ldr r4, [r6, r5, lsl #0x2]
and r0, r7, #0x1f
orr r0, r4, r1, lsl r0
str r0, [r6, r5, lsl #0x2]
b _020BEDB8
_020BED40:
ldr r4, [r1, #0x0]
ands r0, r3, #0x2
str r4, [r12, #0x4]
ldr r0, [r1, #0x4]
str r0, [r12, #0x8]
ldr r0, [r1, #0x8]
str r0, [r12, #0xc]
beq _020BEDB8
ldr lr, _020BEE2C ; =NNS_G3dRS
ldrb r0, [r2, #0x1]
ldr r4, [lr, #0x0]
mov lr, #0x18
add r8, r4, #0xc4
mov r7, r0, lsr #0x5
and r4, r0, #0x1f
mov r5, #0x1
mvn r4, r5, lsl r4
ldr r6, [r8, r7, lsl #0x2]
mul r5, r0, lr
and r0, r6, r4
str r0, [r8, r7, lsl #0x2]
ldr r4, [r1, #0xc]
ldr r0, _020BEE30 ; =NNS_G3dRSOnGlb + 0xE0C
ldr lr, _020BEE34 ; =NNS_G3dRSOnGlb + 0xE10
str r4, [r0, r5]
ldr r4, [r1, #0x10]
ldr r0, _020BEE38 ; =NNS_G3dRSOnGlb + 0xE14
str r4, [lr, r5]
ldr r1, [r1, #0x14]
str r1, [r0, r5]
_020BEDB8:
ands r0, r3, #0x1
beq _020BEE1C
ldrb r0, [r2, #0x2]
ldr r2, [r12, #0x0]
ldr r1, _020BEE2C ; =NNS_G3dRS
orr r2, r2, #0x20
str r2, [r12, #0x0]
ldr r2, [r1, #0x0]
mov r1, r0, lsr #0x5
add r1, r2, r1, lsl #0x2
and r2, r0, #0x1f
mov r3, #0x1
mov r2, r3, lsl r2
ldr r1, [r1, #0xc4]
ands r1, r2, r1
ldrne r0, [r12, #0x0]
orrne r0, r0, #0x8
strne r0, [r12, #0x0]
bne _020BEE1C
ldr r2, _020BEE30 ; =NNS_G3dRSOnGlb + 0xE0C
mov r1, #0x18
mla r1, r0, r1, r2
add r3, r12, #0x10
ldmia r1, {r0-r2}
stmia r3, {r0-r2}
_020BEE1C:
ldr r0, [r12, #0x0]
orr r0, r0, #0x10
str r0, [r12, #0x0]
ldmia sp!, {r4-r8,pc}
.balign 4
_020BEE2C: .word NNS_G3dRS
_020BEE30: .word NNS_G3dRSOnGlb + 0xE0C
_020BEE34: .word NNS_G3dRSOnGlb + 0xE10
_020BEE38: .word NNS_G3dRSOnGlb + 0xE14
arm_func_end NNSi_G3dGetJointScaleMaya
arm_func_start NNSi_G3dSendJointSRTMaya
NNSi_G3dSendJointSRTMaya: ; 0x020BEE3C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
ldr r1, [r5, #0x0]
mov r4, #0x0
ands r0, r1, #0x4
moveq r4, #0x1
ands r0, r1, #0x20
beq _020BEE94
ands r0, r1, #0x8
bne _020BEE94
cmp r4, #0x0
beq _020BEE84
add r1, r5, #0x4c
mov r0, #0x1c
mov r2, #0x3
bl NNS_G3dGeBufferOP_N
mov r4, #0x0
_020BEE84:
add r1, r5, #0x10
mov r0, #0x1b
mov r2, #0x3
bl NNS_G3dGeBufferOP_N
_020BEE94:
ldr r0, [r5, #0x0]
ands r0, r0, #0x2
bne _020BEED0
cmp r4, #0x0
beq _020BEEBC
add r1, r5, #0x28
mov r0, #0x19
mov r2, #0xc
bl NNS_G3dGeBufferOP_N
b _020BEEE8
_020BEEBC:
add r1, r5, #0x28
mov r0, #0x1a
mov r2, #0x9
bl NNS_G3dGeBufferOP_N
b _020BEEE8
_020BEED0:
cmp r4, #0x0
beq _020BEEE8
add r1, r5, #0x4c
mov r0, #0x1c
mov r2, #0x3
bl NNS_G3dGeBufferOP_N
_020BEEE8:
ldr r0, [r5, #0x0]
ands r0, r0, #0x1
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,pc}
add r1, r5, #0x4
mov r0, #0x1b
mov r2, #0x3
bl NNS_G3dGeBufferOP_N
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end NNSi_G3dSendJointSRTMaya

25
arm9/asm/NNS_G3D_mem.s Normal file
View File

@@ -0,0 +1,25 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G3dFreeAnmObj
NNS_G3dFreeAnmObj: ; 0x020BB8C4
ldr ip, _020BB8CC ; =NNS_FndFreeToAllocator
bx r12
.balign 4
_020BB8CC: .word NNS_FndFreeToAllocator
arm_func_end NNS_G3dFreeAnmObj
arm_func_start NNS_G3dAllocAnmObj
NNS_G3dAllocAnmObj: ; 0x020BB8D0
stmdb sp!, {r4,lr}
mov r4, r0
mov r0, r1
mov r1, r2
bl NNS_G3dAnmObjCalcSizeRequired
mov r1, r0
mov r0, r4
bl NNS_FndAllocFromAllocator
ldmia sp!, {r4,pc}
arm_func_end NNS_G3dAllocAnmObj

656
arm9/asm/NNS_G3D_model.s Normal file
View File

@@ -0,0 +1,656 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G3dMdlSetMdlXLDepthUpdateAll
NNS_G3dMdlSetMdlXLDepthUpdateAll: ; 0x020BB8F4
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BB910:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlXLDepthUpdate
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BB910
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlXLDepthUpdateAll
arm_func_start NNS_G3dMdlSetMdlFarClipAll
NNS_G3dMdlSetMdlFarClipAll: ; 0x020BB934
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BB950:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlFarClip
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BB950
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlFarClipAll
arm_func_start NNS_G3dMdlSetMdl1DotAll
NNS_G3dMdlSetMdl1DotAll: ; 0x020BB974
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BB990:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdl1Dot
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BB990
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdl1DotAll
arm_func_start NNS_G3dMdlSetMdlDepthTestCondAll
NNS_G3dMdlSetMdlDepthTestCondAll: ; 0x020BB9B4
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BB9D0:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlDepthTestCond
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BB9D0
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlDepthTestCondAll
arm_func_start NNS_G3dMdlSetMdlFogEnableFlagAll
NNS_G3dMdlSetMdlFogEnableFlagAll: ; 0x020BB9F4
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BBA10:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlFogEnableFlag
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BBA10
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlFogEnableFlagAll
arm_func_start NNS_G3dMdlSetMdlAlphaAll
NNS_G3dMdlSetMdlAlphaAll: ; 0x020BBA34
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BBA50:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlAlpha
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BBA50
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlAlphaAll
arm_func_start NNS_G3dMdlSetMdlPolygonIDAll
NNS_G3dMdlSetMdlPolygonIDAll: ; 0x020BBA74
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BBA90:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlPolygonID
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BBA90
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlPolygonIDAll
arm_func_start NNS_G3dMdlSetMdlCullModeAll
NNS_G3dMdlSetMdlCullModeAll: ; 0x020BBAB4
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BBAD0:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlCullMode
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BBAD0
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlCullModeAll
arm_func_start NNS_G3dMdlSetMdlPolygonModeAll
NNS_G3dMdlSetMdlPolygonModeAll: ; 0x020BBAF4
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BBB10:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlPolygonMode
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BBB10
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlPolygonModeAll
arm_func_start NNS_G3dMdlSetMdlLightEnableFlagAll
NNS_G3dMdlSetMdlLightEnableFlagAll: ; 0x020BBB34
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BBB50:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlLightEnableFlag
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BBB50
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlLightEnableFlagAll
arm_func_start NNS_G3dMdlSetMdlEmiAll
NNS_G3dMdlSetMdlEmiAll: ; 0x020BBB74
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BBB90:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlEmi
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BBB90
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlEmiAll
arm_func_start NNS_G3dMdlSetMdlSpecAll
NNS_G3dMdlSetMdlSpecAll: ; 0x020BBBB4
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BBBD0:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlSpec
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BBBD0
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlSpecAll
arm_func_start NNS_G3dMdlSetMdlAmbAll
NNS_G3dMdlSetMdlAmbAll: ; 0x020BBBF4
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BBC10:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlAmb
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BBC10
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlAmbAll
arm_func_start NNS_G3dMdlSetMdlDiffAll
NNS_G3dMdlSetMdlDiffAll: ; 0x020BBC34
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldrb r0, [r6, #0x18]
mov r5, r1
mov r4, #0x0
cmp r0, #0x0
ldmlsia sp!, {r4-r6,pc}
_020BBC50:
mov r0, r6
mov r1, r4
mov r2, r5
bl NNS_G3dMdlSetMdlDiff
ldrb r0, [r6, #0x18]
add r4, r4, #0x1
cmp r4, r0
blo _020BBC50
ldmia sp!, {r4-r6,pc}
arm_func_end NNS_G3dMdlSetMdlDiffAll
arm_func_start NNS_G3dMdlSetMdlXLDepthUpdate
NNS_G3dMdlSetMdlXLDepthUpdate: ; 0x020BBC74
ldr r3, [r0, #0x8]
cmp r2, #0x0
add r12, r0, r3
ldrh r0, [r12, #0xa]
add r3, r12, #0x4
ldrh r2, [r3, r0]
add r0, r3, r0
mla r0, r2, r1, r0
ldr r0, [r0, #0x4]
add r1, r12, r0
ldrne r0, [r1, #0xc]
orrne r0, r0, #0x800
strne r0, [r1, #0xc]
ldreq r0, [r1, #0xc]
biceq r0, r0, #0x800
streq r0, [r1, #0xc]
bx lr
arm_func_end NNS_G3dMdlSetMdlXLDepthUpdate
arm_func_start NNS_G3dMdlSetMdlFarClip
NNS_G3dMdlSetMdlFarClip: ; 0x020BBCB8
ldr r3, [r0, #0x8]
cmp r2, #0x0
add r12, r0, r3
ldrh r0, [r12, #0xa]
add r3, r12, #0x4
ldrh r2, [r3, r0]
add r0, r3, r0
mla r0, r2, r1, r0
ldr r0, [r0, #0x4]
add r1, r12, r0
ldrne r0, [r1, #0xc]
orrne r0, r0, #0x1000
strne r0, [r1, #0xc]
ldreq r0, [r1, #0xc]
biceq r0, r0, #0x1000
streq r0, [r1, #0xc]
bx lr
arm_func_end NNS_G3dMdlSetMdlFarClip
arm_func_start NNS_G3dMdlSetMdl1Dot
NNS_G3dMdlSetMdl1Dot: ; 0x020BBCFC
ldr r3, [r0, #0x8]
cmp r2, #0x0
add r12, r0, r3
ldrh r0, [r12, #0xa]
add r3, r12, #0x4
ldrh r2, [r3, r0]
add r0, r3, r0
mla r0, r2, r1, r0
ldr r0, [r0, #0x4]
add r1, r12, r0
ldrne r0, [r1, #0xc]
orrne r0, r0, #0x2000
strne r0, [r1, #0xc]
ldreq r0, [r1, #0xc]
biceq r0, r0, #0x2000
streq r0, [r1, #0xc]
bx lr
arm_func_end NNS_G3dMdlSetMdl1Dot
arm_func_start NNS_G3dMdlSetMdlDepthTestCond
NNS_G3dMdlSetMdlDepthTestCond: ; 0x020BBD40
ldr r3, [r0, #0x8]
cmp r2, #0x0
add r12, r0, r3
ldrh r0, [r12, #0xa]
add r3, r12, #0x4
ldrh r2, [r3, r0]
add r0, r3, r0
mla r0, r2, r1, r0
ldr r0, [r0, #0x4]
add r1, r12, r0
ldrne r0, [r1, #0xc]
orrne r0, r0, #0x4000
strne r0, [r1, #0xc]
ldreq r0, [r1, #0xc]
biceq r0, r0, #0x4000
streq r0, [r1, #0xc]
bx lr
arm_func_end NNS_G3dMdlSetMdlDepthTestCond
arm_func_start NNS_G3dMdlSetMdlFogEnableFlag
NNS_G3dMdlSetMdlFogEnableFlag: ; 0x020BBD84
ldr r3, [r0, #0x8]
cmp r2, #0x0
add r12, r0, r3
ldrh r0, [r12, #0xa]
add r3, r12, #0x4
ldrh r2, [r3, r0]
add r0, r3, r0
mla r0, r2, r1, r0
ldr r0, [r0, #0x4]
add r1, r12, r0
ldrne r0, [r1, #0xc]
orrne r0, r0, #0x8000
strne r0, [r1, #0xc]
ldreq r0, [r1, #0xc]
biceq r0, r0, #0x8000
streq r0, [r1, #0xc]
bx lr
arm_func_end NNS_G3dMdlSetMdlFogEnableFlag
arm_func_start NNS_G3dMdlSetMdlAlpha
NNS_G3dMdlSetMdlAlpha: ; 0x020BBDC8
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r3, [r0, #0x8]
add lr, r0, r3
ldrh r0, [lr, #0xa]
add r12, lr, #0x4
ldrh r3, [r12, r0]
add r0, r12, r0
mla r0, r3, r1, r0
ldr r0, [r0, #0x4]
add r1, lr, r0
ldr r0, [r1, #0xc]
bic r0, r0, #0x1f0000
orr r0, r0, r2, lsl #0x10
str r0, [r1, #0xc]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_G3dMdlSetMdlAlpha
arm_func_start NNS_G3dMdlSetMdlPolygonID
NNS_G3dMdlSetMdlPolygonID: ; 0x020BBE0C
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r3, [r0, #0x8]
add lr, r0, r3
ldrh r0, [lr, #0xa]
add r12, lr, #0x4
ldrh r3, [r12, r0]
add r0, r12, r0
mla r0, r3, r1, r0
ldr r0, [r0, #0x4]
add r1, lr, r0
ldr r0, [r1, #0xc]
bic r0, r0, #0x3f000000
orr r0, r0, r2, lsl #0x18
str r0, [r1, #0xc]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_G3dMdlSetMdlPolygonID
arm_func_start NNS_G3dMdlSetMdlCullMode
NNS_G3dMdlSetMdlCullMode: ; 0x020BBE50
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r3, [r0, #0x8]
add lr, r0, r3
ldrh r0, [lr, #0xa]
add r12, lr, #0x4
ldrh r3, [r12, r0]
add r0, r12, r0
mla r0, r3, r1, r0
ldr r0, [r0, #0x4]
add r1, lr, r0
ldr r0, [r1, #0xc]
bic r0, r0, #0xc0
orr r0, r0, r2, lsl #0x6
str r0, [r1, #0xc]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_G3dMdlSetMdlCullMode
arm_func_start NNS_G3dMdlSetMdlPolygonMode
NNS_G3dMdlSetMdlPolygonMode: ; 0x020BBE94
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r3, [r0, #0x8]
add lr, r0, r3
ldrh r0, [lr, #0xa]
add r12, lr, #0x4
ldrh r3, [r12, r0]
add r0, r12, r0
mla r0, r3, r1, r0
ldr r0, [r0, #0x4]
add r1, lr, r0
ldr r0, [r1, #0xc]
bic r0, r0, #0x30
orr r0, r0, r2, lsl #0x4
str r0, [r1, #0xc]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_G3dMdlSetMdlPolygonMode
arm_func_start NNS_G3dMdlSetMdlLightEnableFlag
NNS_G3dMdlSetMdlLightEnableFlag: ; 0x020BBED8
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r3, [r0, #0x8]
add lr, r0, r3
ldrh r0, [lr, #0xa]
add r12, lr, #0x4
ldrh r3, [r12, r0]
add r0, r12, r0
mla r0, r3, r1, r0
ldr r0, [r0, #0x4]
add r1, lr, r0
ldr r0, [r1, #0xc]
bic r0, r0, #0xf
orr r0, r0, r2
str r0, [r1, #0xc]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNS_G3dMdlSetMdlLightEnableFlag
arm_func_start NNS_G3dMdlSetMdlEmi
NNS_G3dMdlSetMdlEmi: ; 0x020BBF1C
stmdb sp!, {r4,lr}
ldr r12, [r0, #0x8]
ldr r3, _020BBF5C ; =0x8000FFFF
add r4, r0, r12
ldrh r0, [r4, #0xa]
add lr, r4, #0x4
ldrh r12, [lr, r0]
add r0, lr, r0
mla r0, r12, r1, r0
ldr r0, [r0, #0x4]
add r1, r4, r0
ldr r0, [r1, #0x8]
and r0, r0, r3
orr r0, r0, r2, lsl #0x10
str r0, [r1, #0x8]
ldmia sp!, {r4,pc}
.balign 4
_020BBF5C: .word 0x8000FFFF
arm_func_end NNS_G3dMdlSetMdlEmi
arm_func_start NNS_G3dMdlSetMdlSpec
NNS_G3dMdlSetMdlSpec: ; 0x020BBF60
stmdb sp!, {r4,lr}
ldr r12, [r0, #0x8]
mov r3, #0x8000
add r4, r0, r12
ldrh r12, [r4, #0xa]
add lr, r4, #0x4
rsb r0, r3, #0x0
ldrh r3, [lr, r12]
add r12, lr, r12
mla r1, r3, r1, r12
ldr r1, [r1, #0x4]
add r3, r4, r1
ldr r1, [r3, #0x8]
and r0, r1, r0
orr r0, r0, r2
str r0, [r3, #0x8]
ldmia sp!, {r4,pc}
arm_func_end NNS_G3dMdlSetMdlSpec
arm_func_start NNS_G3dMdlSetMdlAmb
NNS_G3dMdlSetMdlAmb: ; 0x020BBFA4
stmdb sp!, {r4,lr}
ldr r12, [r0, #0x8]
ldr r3, _020BBFE4 ; =0x8000FFFF
add r4, r0, r12
ldrh r0, [r4, #0xa]
add lr, r4, #0x4
ldrh r12, [lr, r0]
add r0, lr, r0
mla r0, r12, r1, r0
ldr r0, [r0, #0x4]
add r1, r4, r0
ldr r0, [r1, #0x4]
and r0, r0, r3
orr r0, r0, r2, lsl #0x10
str r0, [r1, #0x4]
ldmia sp!, {r4,pc}
.balign 4
_020BBFE4: .word 0x8000FFFF
arm_func_end NNS_G3dMdlSetMdlAmb
arm_func_start NNS_G3dMdlSetMdlDiff
NNS_G3dMdlSetMdlDiff: ; 0x020BBFE8
stmdb sp!, {r4,lr}
ldr r12, [r0, #0x8]
mov r3, #0x8000
add r4, r0, r12
ldrh r12, [r4, #0xa]
add lr, r4, #0x4
rsb r0, r3, #0x0
ldrh r3, [lr, r12]
add r12, lr, r12
mla r1, r3, r1, r12
ldr r1, [r1, #0x4]
add r3, r4, r1
ldr r1, [r3, #0x4]
and r0, r1, r0
orr r0, r0, r2
str r0, [r3, #0x4]
ldmia sp!, {r4,pc}
arm_func_end NNS_G3dMdlSetMdlDiff
arm_func_start NNSi_G3dModifyPolygonAttrMask
NNSi_G3dModifyPolygonAttrMask: ; 0x020BC02C
stmdb sp!, {r4-r6,lr}
ldrb r4, [r0, #0x18]
ldr r3, [r0, #0x8]
mov lr, #0x0
cmp r4, #0x0
add r12, r0, r3
ldmlsia sp!, {r4-r6,pc}
mvn r3, r2
add r0, r12, #0x4
_020BC050:
ldrh r5, [r12, #0xa]
cmp r1, #0x0
ldrh r6, [r0, r5]
add r5, r0, r5
mla r5, r6, lr, r5
ldr r5, [r5, #0x4]
add lr, lr, #0x1
add r6, r12, r5
ldrne r5, [r6, #0x10]
orrne r5, r5, r2
strne r5, [r6, #0x10]
ldreq r5, [r6, #0x10]
andeq r5, r5, r3
streq r5, [r6, #0x10]
cmp lr, r4
blo _020BC050
ldmia sp!, {r4-r6,pc}
arm_func_end NNSi_G3dModifyPolygonAttrMask
arm_func_start NNSi_G3dModifyMatFlag
NNSi_G3dModifyMatFlag: ; 0x020BC094
stmdb sp!, {r4-r6,lr}
ldrb r4, [r0, #0x18]
ldr r3, [r0, #0x8]
mov lr, #0x0
cmp r4, #0x0
add r12, r0, r3
ldmlsia sp!, {r4-r6,pc}
mvn r3, r2
add r0, r12, #0x4
_020BC0B8:
ldrh r5, [r12, #0xa]
cmp r1, #0x0
ldrh r6, [r0, r5]
add r5, r0, r5
mla r5, r6, lr, r5
ldr r5, [r5, #0x4]
add lr, lr, #0x1
add r6, r12, r5
ldrneh r5, [r6, #0x1e]
orrne r5, r5, r2
strneh r5, [r6, #0x1e]
ldreqh r5, [r6, #0x1e]
andeq r5, r5, r3
streqh r5, [r6, #0x1e]
cmp lr, r4
blo _020BC0B8
ldmia sp!, {r4-r6,pc}
arm_func_end NNSi_G3dModifyMatFlag

1591
arm9/asm/NNS_G3D_nsbca.s Normal file

File diff suppressed because it is too large Load Diff

287
arm9/asm/NNS_G3D_nsbma.s Normal file
View File

@@ -0,0 +1,287 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G3dAnmCalcNsBma
NNSi_G3dAnmCalcNsBma: ; 0x020BDB40
stmdb sp!, {r4-r8,lr}
ldr r7, [r1, #0x8]
mov r2, r2, lsl #0x10
ldrh r4, [r7, #0xe]
add r5, r7, #0x8
ldr r6, [r1, #0x0]
ldrh r3, [r5, r4]
mov r1, r2, lsr #0x10
add r2, r5, r4
mul r4, r3, r1
add r3, r2, #0x4
mov r6, r6, asr #0xc
mov r8, r0
ldr r1, [r3, r4]
mov r0, r7
mov r2, r6
add r5, r3, r4
bl GetMatColAnmValue_
mov r4, r0
ldr r1, [r5, #0x4]
mov r0, r7
mov r2, r6
bl GetMatColAnmValue_
ldr r1, [r8, #0x4]
mov r2, r6
and r1, r1, #0x8000
orr r1, r1, r4
orr r0, r1, r0, lsl #0x10
str r0, [r8, #0x4]
mov r0, r7
ldr r1, [r5, #0xc]
bl GetMatColAnmValue_
mov r4, r0
mov r0, r7
ldr r1, [r5, #0x8]
mov r2, r6
bl GetMatColAnmValue_
mov r2, r6
ldr r1, [r8, #0x8]
and r1, r1, #0x8000
orr r0, r1, r0
orr r0, r0, r4, lsl #0x10
str r0, [r8, #0x8]
mov r0, r7
ldr r1, [r5, #0x10]
bl GetMatColAnmuAlphaValue_
ldr r1, [r8, #0xc]
bic r1, r1, #0x1f0000
orr r0, r1, r0, lsl #0x10
str r0, [r8, #0xc]
ldmia sp!, {r4-r8,pc}
arm_func_end NNSi_G3dAnmCalcNsBma
arm_func_start NNSi_G3dAnmObjInitNsBma
NNSi_G3dAnmObjInitNsBma: ; 0x020BDC0C
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
ldr r3, _020BDCB4 ; =NNS_G3dFuncAnmMatNsBmaDefault
ldr r4, [r2, #0x8]
ldr r3, [r3, #0x0]
mov r9, r0
str r3, [r9, #0xc]
ldrb r0, [r2, #0x18]
mov r8, r1
add r4, r2, r4
strb r0, [r9, #0x19]
ldrb r2, [r9, #0x19]
add r1, r9, #0x1a
mov r0, #0x0
mov r2, r2, lsl #0x1
bl MIi_CpuClear16
ldrb r0, [r8, #0x9]
mov r7, #0x0
cmp r0, #0x0
addls sp, sp, #0x4
ldmlsia sp!, {r4-r9,pc}
mov r6, r7
add r5, r8, #0x8
add r4, r4, #0x4
_020BDC6C:
ldrh r1, [r8, #0xe]
mov r0, r4
add r2, r5, r1
ldrh r1, [r2, #0x2]
add r1, r2, r1
add r1, r1, r6
bl NNS_G3dGetResDictIdxByName
cmp r0, #0x0
orrge r1, r7, #0x100
addge r0, r9, r0, lsl #0x1
strgeh r1, [r0, #0x1a]
ldrb r0, [r8, #0x9]
add r7, r7, #0x1
add r6, r6, #0x10
cmp r7, r0
blo _020BDC6C
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
.balign 4
_020BDCB4: .word NNS_G3dFuncAnmMatNsBmaDefault
arm_func_end NNSi_G3dAnmObjInitNsBma
arm_func_start GetMatColAnmuAlphaValue_
GetMatColAnmuAlphaValue_: ; 0x020BDCB8
ands r3, r1, #0x20000000
movne r0, r1, lsl #0x10
movne r0, r0, lsr #0x10
bxne lr
ldr r3, _020BDDA4 ; =0x0000FFFF
ands r12, r1, #0xc0000000
and r3, r1, r3
add r0, r0, r3
ldreqb r0, [r0, r2]
bxeq lr
ldr r3, _020BDDA8 ; =0x1FFF0000
ands r12, r1, #0x40000000
and r1, r1, r3
mov r3, r1, lsr #0x10
beq _020BDD30
ands r1, r2, #0x1
beq _020BDD28
cmp r2, r3
addhi r0, r0, r3, lsr #0x1
ldrhib r0, [r0, #0x1]
bxhi lr
add r1, r0, r2, lsr #0x1
ldrb r2, [r0, r2, lsr #0x1]
ldrb r0, [r1, #0x1]
add r0, r2, r0
mov r0, r0, lsl #0xf
mov r0, r0, lsr #0x10
bx lr
_020BDD28:
ldrb r0, [r0, r2, lsr #0x1]
bx lr
_020BDD30:
ands r1, r2, #0x3
beq _020BDD9C
cmp r2, r3
addhi r0, r0, r3, lsr #0x2
ldrhib r0, [r1, r0]
bxhi lr
ands r1, r2, #0x1
beq _020BDD80
ands r1, r2, #0x2
movne r1, r2, lsr #0x2
addne r2, r1, #0x1
moveq r2, r2, lsr #0x2
addeq r1, r2, #0x1
ldrb r2, [r0, r2]
ldrb r1, [r0, r1]
mov r0, #0x3
mla r0, r2, r0, r1
mov r0, r0, lsl #0xe
mov r0, r0, lsr #0x10
bx lr
_020BDD80:
add r1, r0, r2, lsr #0x2
ldrb r2, [r0, r2, lsr #0x2]
ldrb r0, [r1, #0x1]
add r0, r2, r0
mov r0, r0, lsl #0xf
mov r0, r0, lsr #0x10
bx lr
_020BDD9C:
ldrb r0, [r0, r2, lsr #0x2]
bx lr
.balign 4
_020BDDA4: .word 0x0000FFFF
_020BDDA8: .word 0x1FFF0000
arm_func_end GetMatColAnmuAlphaValue_
arm_func_start GetMatColAnmValue_
GetMatColAnmValue_: ; 0x020BDDAC
stmdb sp!, {lr}
sub sp, sp, #0x4
ands r3, r1, #0x20000000
movne r0, r1, lsl #0x10
addne sp, sp, #0x4
movne r0, r0, lsr #0x10
ldmneia sp!, {pc}
ldr r3, _020BDF2C ; =0x0000FFFF
ands r12, r1, #0xc0000000
and r3, r1, r3
add r0, r0, r3
moveq r1, r2, lsl #0x1
addeq sp, sp, #0x4
ldreqh r0, [r0, r1]
ldmeqia sp!, {pc}
ldr r3, _020BDF30 ; =0x1FFF0000
ands r12, r1, #0x40000000
and r1, r1, r3
mov r3, r1, lsr #0x10
beq _020BDE34
ands r1, r2, #0x1
beq _020BDE24
cmp r2, r3
bichi r1, r3, #0x1
addhi r0, r0, r1
addhi sp, sp, #0x4
ldrhih r0, [r0, #0x2]
ldmhiia sp!, {pc}
mov r1, r2, lsr #0x1
b _020BDEE0
_020BDE24:
bic r1, r2, #0x1
add sp, sp, #0x4
ldrh r0, [r0, r1]
ldmia sp!, {pc}
_020BDE34:
ands r1, r2, #0x3
beq _020BDECC
cmp r2, r3
movhi r2, r3, lsr #0x2
movhi r1, r1, lsl #0x1
addhi r0, r0, r2, lsl #0x1
addhi sp, sp, #0x4
ldrhih r0, [r1, r0]
ldmhiia sp!, {pc}
ands r1, r2, #0x1
beq _020BDEC4
ands r1, r2, #0x2
movne r1, r2, lsr #0x2
addne r2, r1, #0x1
moveq r2, r2, lsr #0x2
addeq r1, r2, #0x1
mov r2, r2, lsl #0x1
mov r1, r1, lsl #0x1
ldrh r12, [r0, r2]
ldrh lr, [r0, r1]
ldr r0, _020BDF34 ; =0x00007C1F
and r3, r12, #0x3e0
and r2, lr, #0x3e0
mov r1, #0x3
mla r2, r3, r1, r2
and r12, r12, r0
and r3, lr, r0
mla r1, r12, r1, r3
mov r2, r2, lsr #0x2
and r1, r0, r1, lsr #0x2
and r0, r2, #0x3e0
orr r0, r1, r0
mov r0, r0, lsl #0x10
add sp, sp, #0x4
mov r0, r0, lsr #0x10
ldmia sp!, {pc}
_020BDEC4:
mov r1, r2, lsr #0x2
b _020BDEE0
_020BDECC:
mov r1, r2, lsr #0x2
mov r1, r1, lsl #0x1
add sp, sp, #0x4
ldrh r0, [r0, r1]
ldmia sp!, {pc}
_020BDEE0:
mov r2, r1, lsl #0x1
add r1, r0, r1, lsl #0x1
ldrh r3, [r0, r2]
ldrh r12, [r1, #0x2]
ldr r0, _020BDF34 ; =0x00007C1F
and r2, r3, #0x3e0
and r1, r12, #0x3e0
add r1, r2, r1
mov r1, r1, lsr #0x1
and r3, r3, r0
and r2, r12, r0
add r2, r3, r2
and r2, r0, r2, lsr #0x1
and r0, r1, #0x3e0
orr r0, r2, r0
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020BDF2C: .word 0x0000FFFF
_020BDF30: .word 0x1FFF0000
_020BDF34: .word 0x00007C1F
arm_func_end GetMatColAnmValue_

299
arm9/asm/NNS_G3D_nsbta.s Normal file
View File

@@ -0,0 +1,299 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G3dAnmCalcNsBta
NNSi_G3dAnmCalcNsBta: ; 0x020BDF38
stmdb sp!, {r4,lr}
ldr r12, [r1, #0x0]
mov r4, r0
mov r2, r2, lsl #0x10
ldr r0, [r1, #0x8]
mov r1, r2, lsr #0x10
mov r3, r4
mov r2, r12, asr #0xc
bl GetTexSRTAnm_
ldr r0, [r4, #0x10]
bic r0, r0, #0xc0000000
str r0, [r4, #0x10]
ldr r0, [r4, #0x10]
orr r0, r0, #0x40000000
str r0, [r4, #0x10]
ldr r0, [r4, #0x0]
orr r0, r0, #0x8
str r0, [r4, #0x0]
ldmia sp!, {r4,pc}
arm_func_end NNSi_G3dAnmCalcNsBta
arm_func_start NNSi_G3dAnmObjInitNsBta
NNSi_G3dAnmObjInitNsBta: ; 0x020BDF84
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
ldr r3, _020BE02C ; =NNS_G3dFuncAnmMatNsBtaDefault
ldr r4, [r2, #0x8]
ldr r3, [r3, #0x0]
mov r9, r0
str r3, [r9, #0xc]
ldrb r0, [r2, #0x18]
mov r8, r1
add r4, r2, r4
strb r0, [r9, #0x19]
ldrb r2, [r9, #0x19]
add r1, r9, #0x1a
mov r0, #0x0
mov r2, r2, lsl #0x1
bl MIi_CpuClear16
ldrb r0, [r8, #0x9]
mov r7, #0x0
cmp r0, #0x0
addls sp, sp, #0x4
ldmlsia sp!, {r4-r9,pc}
mov r6, r7
add r5, r8, #0x8
add r4, r4, #0x4
_020BDFE4:
ldrh r1, [r8, #0xe]
mov r0, r4
add r2, r5, r1
ldrh r1, [r2, #0x2]
add r1, r2, r1
add r1, r1, r6
bl NNS_G3dGetResDictIdxByName
cmp r0, #0x0
orrge r1, r7, #0x100
addge r0, r9, r0, lsl #0x1
strgeh r1, [r0, #0x1a]
ldrb r0, [r8, #0x9]
add r7, r7, #0x1
add r6, r6, #0x10
cmp r7, r0
blo _020BDFE4
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
.balign 4
_020BE02C: .word NNS_G3dFuncAnmMatNsBtaDefault
arm_func_end NNSi_G3dAnmObjInitNsBta
arm_func_start GetTexSRTAnm_
GetTexSRTAnm_: ; 0x020BE030
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
mov r8, r0
ldrh r4, [r8, #0xe]
add r5, r8, #0x8
mov r6, r3
ldrh r3, [r5, r4]
add r4, r5, r4
add r4, r4, #0x4
mla r5, r3, r1, r4
mov r7, r2
ldr r1, [r5, #0x18]
ldr r2, [r5, #0x1c]
mov r3, r7
ldr r4, [r6, #0x0]
bl GetTexSRTAnmVectorVal_
mov r9, r0
ldr r1, [r5, #0x20]
mov r0, r8
ldr r2, [r5, #0x24]
mov r3, r7
bl GetTexSRTAnmVectorVal_
cmp r9, #0x0
bne _020BE09C
cmp r0, #0x0
orreq r4, r4, #0x4
beq _020BE0A8
_020BE09C:
str r9, [r6, #0x24]
str r0, [r6, #0x28]
bic r4, r4, #0x4
_020BE0A8:
ldr r1, [r5, #0x10]
ldr r2, [r5, #0x14]
mov r0, r8
mov r3, r7
bl GetTexSRTAnmSinCosVal_
cmp r0, #0x10000000
strneh r0, [r6, #0x20]
movne r0, r0, lsr #0x10
strneh r0, [r6, #0x22]
orreq r4, r4, #0x2
ldr r1, [r5, #0x0]
ldr r2, [r5, #0x4]
mov r0, r8
mov r3, r7
bicne r4, r4, #0x2
bl GetTexSRTAnmVectorVal_
mov r9, r0
ldr r1, [r5, #0x8]
ldr r2, [r5, #0xc]
mov r0, r8
mov r3, r7
bl GetTexSRTAnmVectorVal_
cmp r9, #0x1000
bne _020BE114
cmp r0, #0x1000
orreq r4, r4, #0x1
beq _020BE120
_020BE114:
str r9, [r6, #0x18]
str r0, [r6, #0x1c]
bic r4, r4, #0x1
_020BE120:
str r4, [r6, #0x0]
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
arm_func_end GetTexSRTAnm_
arm_func_start GetTexSRTAnmSinCosVal_
GetTexSRTAnmSinCosVal_: ; 0x020BE12C
ands r12, r1, #0x20000000
movne r0, r2
bxne lr
add r0, r0, r2
ands r2, r1, #0xc0000000
beq _020BE1F8
ldr r2, _020BE234 ; =0x0000FFFF
ands r12, r1, #0x40000000
and r2, r1, r2
beq _020BE17C
ands r1, r3, #0x1
beq _020BE174
cmp r3, r2
movhi r1, r2, lsr #0x1
addhi r3, r1, #0x1
bhi _020BE1F8
mov r2, r3, lsr #0x1
b _020BE200
_020BE174:
mov r3, r3, lsr #0x1
b _020BE1F8
_020BE17C:
ands r1, r3, #0x3
beq _020BE1F4
cmp r3, r2
addhi r3, r1, r2, lsr #0x2
bhi _020BE1F8
ands r1, r3, #0x1
beq _020BE1EC
ands r1, r3, #0x2
movne r1, r3, lsr #0x2
addne r2, r1, #0x1
moveq r2, r3, lsr #0x2
addeq r1, r2, #0x1
mov r12, r2, lsl #0x2
add r3, r0, r2, lsl #0x2
mov r2, r1, lsl #0x2
add r1, r0, r1, lsl #0x2
ldrsh r12, [r0, r12]
ldrsh r2, [r0, r2]
mov r0, #0x3
ldrsh r3, [r3, #0x2]
ldrsh r1, [r1, #0x2]
mla r2, r12, r0, r2
mla r1, r3, r0, r1
ldr r0, _020BE234 ; =0x0000FFFF
mov r1, r1, asr #0x2
and r0, r0, r2, asr #0x2
orr r0, r0, r1, lsl #0x10
bx lr
_020BE1EC:
mov r2, r3, lsr #0x2
b _020BE200
_020BE1F4:
mov r3, r3, lsr #0x2
_020BE1F8:
ldr r0, [r0, r3, lsl #0x2]
bx lr
_020BE200:
add r1, r0, r2, lsl #0x2
mov r2, r2, lsl #0x2
ldrsh r12, [r0, r2]
ldrsh r3, [r1, #0x4]
ldrsh r2, [r1, #0x2]
ldrsh r1, [r1, #0x6]
ldr r0, _020BE234 ; =0x0000FFFF
add r3, r12, r3
add r1, r2, r1
and r2, r0, r3, asr #0x1
mov r0, r1, asr #0x1
orr r0, r2, r0, lsl #0x10
bx lr
.balign 4
_020BE234: .word 0x0000FFFF
arm_func_end GetTexSRTAnmSinCosVal_
arm_func_start GetTexSRTAnmVectorVal_
GetTexSRTAnmVectorVal_: ; 0x020BE238
ands r12, r1, #0x20000000
movne r0, r2
bxne lr
add r0, r0, r2
ands r2, r1, #0xc0000000
beq _020BE2F0
ldr r2, _020BE330 ; =0x0000FFFF
ands r12, r1, #0x40000000
and r12, r1, r2
beq _020BE288
ands r2, r3, #0x1
beq _020BE280
cmp r3, r12
movhi r2, r12, lsr #0x1
addhi r3, r2, #0x1
bhi _020BE2F0
mov r3, r3, lsr #0x1
b _020BE304
_020BE280:
mov r3, r3, lsr #0x1
b _020BE2F0
_020BE288:
ands r2, r3, #0x3
beq _020BE2EC
cmp r3, r12
addhi r3, r2, r12, lsr #0x2
bhi _020BE2F0
ands r2, r3, #0x1
beq _020BE2E4
ands r2, r3, #0x2
movne r3, r3, lsr #0x2
addne r2, r3, #0x1
moveq r2, r3, lsr #0x2
addeq r3, r2, #0x1
ands r1, r1, #0x10000000
movne r2, r2, lsl #0x1
movne r1, r3, lsl #0x1
ldrnesh r2, [r0, r2]
ldrnesh r1, [r0, r1]
ldreq r2, [r0, r2, lsl #0x2]
ldreq r1, [r0, r3, lsl #0x2]
mov r0, #0x3
mla r0, r2, r0, r1
mov r0, r0, asr #0x2
bx lr
_020BE2E4:
mov r3, r3, lsr #0x2
b _020BE304
_020BE2EC:
mov r3, r3, lsr #0x2
_020BE2F0:
ands r1, r1, #0x10000000
movne r1, r3, lsl #0x1
ldrnesh r0, [r0, r1]
ldreq r0, [r0, r3, lsl #0x2]
bx lr
_020BE304:
ands r1, r1, #0x10000000
movne r2, r3, lsl #0x1
addne r1, r0, r3, lsl #0x1
ldrnesh r2, [r0, r2]
ldrnesh r0, [r1, #0x2]
addeq r1, r0, r3, lsl #0x2
ldreq r2, [r0, r3, lsl #0x2]
ldreq r0, [r1, #0x4]
add r0, r2, r0
mov r0, r0, asr #0x1
bx lr
.balign 4
_020BE330: .word 0x0000FFFF
arm_func_end GetTexSRTAnmVectorVal_

180
arm9/asm/NNS_G3D_nsbtp.s Normal file
View File

@@ -0,0 +1,180 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G3dAnmCalcNsBtp
NNSi_G3dAnmCalcNsBtp: ; 0x020BE334
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r6, r1
ldr r3, [r6, #0x0]
ldr r5, [r6, #0x8]
mov r1, r2, lsl #0x10
mov r2, r3, lsl #0x4
mov r7, r0
mov r0, r5
mov r1, r1, lsr #0x10
mov r2, r2, lsr #0x10
bl NNSi_G3dGetTexPatAnmFV
mov r4, r0
ldrb r1, [r4, #0x2]
mov r0, r5
bl NNSi_G3dGetTexPatAnmTexNameByIdx
mov r1, r0
ldr r0, [r6, #0x14]
mov r2, r7
bl SetTexParamaters_
ldrb r1, [r4, #0x3]
cmp r1, #0xff
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,pc}
mov r0, r5
bl NNSi_G3dGetTexPatAnmPlttNameByIdx
mov r1, r0
ldr r0, [r6, #0x14]
mov r2, r7
bl SetPlttParamaters_
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end NNSi_G3dAnmCalcNsBtp
arm_func_start SetPlttParamaters_
SetPlttParamaters_: ; 0x020BE3B4
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
ldrh r0, [r5, #0x34]
mov r4, r2
add r0, r5, r0
bl NNS_G3dGetResDataByName
ldr r1, [r5, #0x2c]
ldrh r2, [r0, #0x2]
mov r1, r1, lsl #0x10
mov r3, r1, lsr #0x10
ands r1, r2, #0x1
ldrh r0, [r0, #0x0]
moveq r1, r3, lsl #0xf
moveq r3, r1, lsr #0x10
moveq r0, r0, lsl #0xf
moveq r0, r0, lsr #0x10
add r0, r0, r3
str r0, [r4, #0x14]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end SetPlttParamaters_
arm_func_start SetTexParamaters_
SetTexParamaters_: ; 0x020BE408
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
add r0, r5, #0x3c
mov r4, r2
bl NNS_G3dGetResDataByName
ldr r1, [r0, #0x0]
ldr r3, [r4, #0x10]
and r1, r1, #0x1c000000
cmp r1, #0x14000000
ldrne r2, [r5, #0x8]
ldrne r1, _020BE4E0 ; =0x0000FFFF
andne r5, r2, r1
ldreq r2, [r5, #0x18]
ldreq r1, _020BE4E0 ; =0x0000FFFF
andeq r5, r2, r1
ldr r1, _020BE4E4 ; =0xC00F0000
ldr r2, _020BE4E8 ; =0x000007FF
and r1, r3, r1
str r1, [r4, #0x10]
ldr r1, [r0, #0x0]
ldr r3, [r4, #0x10]
add r1, r1, r5
orr r1, r3, r1
str r1, [r4, #0x10]
ldr r3, [r0, #0x4]
ldr r1, _020BE4EC ; =0x003FF800
and r3, r3, r2
strh r3, [r4, #0x2c]
ldr r3, [r0, #0x4]
and r1, r3, r1
mov r1, r1, lsr #0xb
strh r1, [r4, #0x2e]
ldr r3, [r0, #0x4]
ldrh r1, [r4, #0x2c]
and r0, r3, r2
and r5, r2, r3, lsr #0xb
cmp r0, r1
moveq r0, #0x1000
beq _020BE4B4
mov r0, r0, lsl #0xc
mov r1, r1, lsl #0xc
bl FX_Div
_020BE4B4:
str r0, [r4, #0x30]
ldrh r1, [r4, #0x2e]
cmp r5, r1
moveq r0, #0x1000
beq _020BE4D4
mov r0, r5, lsl #0xc
mov r1, r1, lsl #0xc
bl FX_Div
_020BE4D4:
str r0, [r4, #0x34]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020BE4E0: .word 0x0000FFFF
_020BE4E4: .word 0xC00F0000
_020BE4E8: .word 0x000007FF
_020BE4EC: .word 0x003FF800
arm_func_end SetTexParamaters_
arm_func_start NNSi_G3dAnmObjInitNsBtp
NNSi_G3dAnmObjInitNsBtp: ; 0x020BE4F0
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
ldr r3, _020BE59C ; =NNS_G3dFuncAnmMatNsBtpDefault
ldr r4, [r2, #0x8]
ldr r3, [r3, #0x0]
mov r9, r0
str r3, [r9, #0xc]
ldrb r0, [r2, #0x18]
mov r8, r1
add r4, r2, r4
strb r0, [r9, #0x19]
str r8, [r9, #0x8]
ldrb r2, [r9, #0x19]
add r1, r9, #0x1a
mov r0, #0x0
mov r2, r2, lsl #0x1
bl MIi_CpuClear16
ldrb r0, [r8, #0xd]
mov r7, #0x0
cmp r0, #0x0
addls sp, sp, #0x4
ldmlsia sp!, {r4-r9,pc}
mov r6, r7
add r5, r8, #0xc
add r4, r4, #0x4
_020BE554:
ldrh r1, [r8, #0x12]
mov r0, r4
add r2, r5, r1
ldrh r1, [r2, #0x2]
add r1, r2, r1
add r1, r1, r6
bl NNS_G3dGetResDictIdxByName
cmp r0, #0x0
orrge r1, r7, #0x100
addge r0, r9, r0, lsl #0x1
strgeh r1, [r0, #0x1a]
ldrb r0, [r8, #0xd]
add r7, r7, #0x1
add r6, r6, #0x10
cmp r7, r0
blo _020BE554
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
.balign 4
_020BE59C: .word NNS_G3dFuncAnmMatNsBtpDefault
arm_func_end NNSi_G3dAnmObjInitNsBtp

49
arm9/asm/NNS_G3D_nsbva.s Normal file
View File

@@ -0,0 +1,49 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G3dAnmCalcNsBva
NNSi_G3dAnmCalcNsBva: ; 0x020BE5A0
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr lr, [r1, #0x8]
ldr r3, [r1, #0x0]
ldrh r1, [lr, #0x6]
mov r12, r3, asr #0xc
mov r3, #0x1
mla r2, r12, r1, r2
mov r1, r2, lsr #0x5
add r1, lr, r1, lsl #0x2
ldr r1, [r1, #0xc]
and r2, r2, #0x1f
and r1, r1, r3, lsl r2
str r1, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNSi_G3dAnmCalcNsBva
arm_func_start NNSi_G3dAnmObjInitNsBva
NNSi_G3dAnmObjInitNsBva: ; 0x020BE5E0
ldr r3, _020BE628 ; =NNS_G3dFuncAnmVisNsBvaDefault
mov r12, #0x0
ldr r3, [r3, #0x0]
str r3, [r0, #0xc]
ldrb r2, [r2, #0x17]
strb r2, [r0, #0x19]
str r1, [r0, #0x8]
ldrb r1, [r0, #0x19]
cmp r1, #0x0
bxls lr
_020BE608:
orr r2, r12, #0x100
add r1, r0, r12, lsl #0x1
strh r2, [r1, #0x1a]
ldrb r1, [r0, #0x19]
add r12, r12, #0x1
cmp r12, r1
blo _020BE608
bx lr
.balign 4
_020BE628: .word NNS_G3dFuncAnmVisNsBvaDefault
arm_func_end NNSi_G3dAnmObjInitNsBva

View File

@@ -0,0 +1,317 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G3dGetTex
NNS_G3dGetTex: ; 0x020BC0FC
ldrh r2, [r0, #0xc]
ldrh r1, [r0, #0xe]
add r3, r0, r2
cmp r1, #0x1
bne _020BC12C
ldr r2, [r0, #0x0]
ldr r1, _020BC138 ; =0x30585442
cmp r2, r1
ldreq r1, [r3, #0x0]
addeq r0, r0, r1
movne r0, #0x0
bx lr
_020BC12C:
ldr r1, [r3, #0x4]
add r0, r0, r1
bx lr
.balign 4
_020BC138: .word 0x30585442
arm_func_end NNS_G3dGetTex
arm_func_start NNS_G3dGetMdlSet
NNS_G3dGetMdlSet: ; 0x020BC13C
ldrh r1, [r0, #0xc]
ldr r1, [r0, r1]
add r0, r0, r1
bx lr
arm_func_end NNS_G3dGetMdlSet
arm_func_start NNS_G3dGetResDictIdxByName
NNS_G3dGetResDictIdxByName: ; 0x020BC14C
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldrb r2, [r0, #0x1]
cmp r2, #0x10
bhs _020BC1E4
cmp r2, #0x0
ldr lr, [r1, #0x0]
ldr r12, [r1, #0x4]
ldr r3, [r1, #0x8]
ldr r2, [r1, #0xc]
mov r4, #0x0
bls _020BC294
ldrh r5, [r0, #0x6]
mov r1, r4
add r6, r0, r5
ldrh r5, [r6, #0x2]
add r6, r6, r5
_020BC190:
ldr r5, [r6, r1]
add r7, r6, r1
cmp r5, lr
bne _020BC1CC
ldr r5, [r7, #0x4]
cmp r5, r12
bne _020BC1CC
ldr r5, [r7, #0x8]
cmp r5, r3
bne _020BC1CC
ldr r5, [r7, #0xc]
cmp r5, r2
addeq sp, sp, #0x4
moveq r0, r4
ldmeqia sp!, {r4-r7,pc}
_020BC1CC:
ldrb r5, [r0, #0x1]
add r4, r4, #0x1
add r1, r1, #0x10
cmp r4, r5
blo _020BC190
b _020BC294
_020BC1E4:
add r3, r0, #0x8
ldrb r2, [r3, #0x1]
cmp r2, #0x0
beq _020BC294
ldrb r5, [r3, r2, lsl #0x2]
ldrb r4, [r3, #0x0]
add r2, r3, r2, lsl #0x2
cmp r4, r5
bls _020BC238
_020BC208:
mov r4, r5, asr #0x5
ldr r12, [r1, r4, lsl #0x2]
and r4, r5, #0x1f
mov r4, r12, lsr r4
and r4, r4, #0x1
add r4, r2, r4
ldrb r12, [r4, #0x1]
ldrb r4, [r2, #0x0]
ldrb r5, [r3, r12, lsl #0x2]
add r2, r3, r12, lsl #0x2
cmp r4, r5
bhi _020BC208
_020BC238:
ldrh r4, [r0, #0x6]
ldr r3, [r1, #0x0]
add r12, r0, r4
ldrh r4, [r12, #0x2]
ldrb r0, [r2, #0x3]
add r4, r12, r4
ldr r2, [r4, r0, lsl #0x4]
add r4, r4, r0, lsl #0x4
cmp r2, r3
bne _020BC294
ldr r3, [r4, #0x4]
ldr r2, [r1, #0x4]
cmp r3, r2
bne _020BC294
ldr r3, [r4, #0x8]
ldr r2, [r1, #0x8]
cmp r3, r2
bne _020BC294
ldr r2, [r4, #0xc]
ldr r1, [r1, #0xc]
cmp r2, r1
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,pc}
_020BC294:
mvn r0, #0x0
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end NNS_G3dGetResDictIdxByName
arm_func_start NNS_G3dGetResDataByName
NNS_G3dGetResDataByName: ; 0x020BC2A0
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldrb r2, [r0, #0x1]
cmp r2, #0x10
bhs _020BC34C
cmp r2, #0x0
ldr lr, [r1, #0x0]
ldr r12, [r1, #0x4]
ldr r3, [r1, #0x8]
ldr r2, [r1, #0xc]
mov r4, #0x0
bls _020BC404
ldrh r5, [r0, #0x6]
mov r1, r4
add r6, r0, r5
ldrh r5, [r6, #0x2]
add r6, r6, r5
_020BC2E4:
ldr r5, [r6, r1]
add r7, r6, r1
cmp r5, lr
bne _020BC334
ldr r5, [r7, #0x4]
cmp r5, r12
bne _020BC334
ldr r5, [r7, #0x8]
cmp r5, r3
bne _020BC334
ldr r5, [r7, #0xc]
cmp r5, r2
bne _020BC334
ldrh r2, [r0, #0x6]
add sp, sp, #0x4
ldrh r1, [r0, r2]
add r0, r0, r2
add r0, r0, #0x4
mla r0, r1, r4, r0
ldmia sp!, {r4-r7,pc}
_020BC334:
ldrb r5, [r0, #0x1]
add r4, r4, #0x1
add r1, r1, #0x10
cmp r4, r5
blo _020BC2E4
b _020BC404
_020BC34C:
add r3, r0, #0x8
ldrb r2, [r3, #0x1]
cmp r2, #0x0
beq _020BC404
ldrb r5, [r3, r2, lsl #0x2]
ldrb r4, [r3, #0x0]
add r2, r3, r2, lsl #0x2
cmp r4, r5
bls _020BC3A0
_020BC370:
mov r4, r5, asr #0x5
ldr r12, [r1, r4, lsl #0x2]
and r4, r5, #0x1f
mov r4, r12, lsr r4
and r4, r4, #0x1
add r4, r2, r4
ldrb r12, [r4, #0x1]
ldrb r4, [r2, #0x0]
ldrb r5, [r3, r12, lsl #0x2]
add r2, r3, r12, lsl #0x2
cmp r4, r5
bhi _020BC370
_020BC3A0:
ldrh r4, [r0, #0x6]
ldrb r2, [r2, #0x3]
ldr r3, [r1, #0x0]
add r0, r0, r4
ldrh r4, [r0, #0x2]
add r12, r0, r4
ldr r4, [r12, r2, lsl #0x4]
add r12, r12, r2, lsl #0x4
cmp r4, r3
bne _020BC404
ldr r4, [r12, #0x4]
ldr r3, [r1, #0x4]
cmp r4, r3
bne _020BC404
ldr r4, [r12, #0x8]
ldr r3, [r1, #0x8]
cmp r4, r3
bne _020BC404
ldr r3, [r12, #0xc]
ldr r1, [r1, #0xc]
cmp r3, r1
ldreqh r1, [r0], #0x4
addeq sp, sp, #0x4
mlaeq r0, r1, r2, r0
ldmeqia sp!, {r4-r7,pc}
_020BC404:
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end NNS_G3dGetResDataByName
arm_func_start NNSi_G3dGetTexPatAnmDataByIdx
NNSi_G3dGetTexPatAnmDataByIdx: ; 0x020BC410
ldrh r3, [r0, #0x12]
add r0, r0, #0xc
ldrh r2, [r0, r3]
add r0, r0, r3
add r0, r0, #0x4
mla r0, r2, r1, r0
bx lr
arm_func_end NNSi_G3dGetTexPatAnmDataByIdx
arm_func_start NNSi_G3dGetTexPatAnmFV
NNSi_G3dGetTexPatAnmFV: ; 0x020BC42C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r2
bl NNSi_G3dGetTexPatAnmDataByIdx
ldrsh r1, [r0, #0x4]
ldrh r3, [r0, #0x6]
mul r2, r1, r4
add r3, r5, r3
mov r2, r2, lsr #0xc
b _020BC45C
_020BC458:
sub r2, r2, #0x1
_020BC45C:
cmp r2, #0x0
beq _020BC474
mov r1, r2, lsl #0x2
ldrh r1, [r3, r1]
cmp r1, r4
bhs _020BC458
_020BC474:
ldrh r1, [r0, #0x0]
b _020BC480
_020BC47C:
add r2, r2, #0x1
_020BC480:
add r0, r2, #0x1
cmp r0, r1
bhs _020BC49C
add r0, r3, r2, lsl #0x2
ldrh r0, [r0, #0x4]
cmp r0, r4
bls _020BC47C
_020BC49C:
add r0, r3, r2, lsl #0x2
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end NNSi_G3dGetTexPatAnmFV
arm_func_start NNSi_G3dGetTexPatAnmPlttNameByIdx
NNSi_G3dGetTexPatAnmPlttNameByIdx: ; 0x020BC4A8
ldrh r2, [r0, #0xa]
add r0, r0, r2
add r0, r0, r1, lsl #0x4
bx lr
arm_func_end NNSi_G3dGetTexPatAnmPlttNameByIdx
arm_func_start NNSi_G3dGetTexPatAnmTexNameByIdx
NNSi_G3dGetTexPatAnmTexNameByIdx: ; 0x020BC4B8
ldrh r2, [r0, #0x8]
add r0, r0, r2
add r0, r0, r1, lsl #0x4
bx lr
arm_func_end NNSi_G3dGetTexPatAnmTexNameByIdx
arm_func_start NNS_G3dGetAnmByIdx
NNS_G3dGetAnmByIdx: ; 0x020BC4C8
ldrh r2, [r0, #0xc]
ldr r2, [r0, r2]
add r12, r0, r2
ldrh r2, [r12, #0xe]
add r3, r12, #0x8
ldrh r0, [r3, r2]
add r2, r3, r2
add r2, r2, #0x4
mul r1, r0, r1
adds r0, r2, r1
ldrne r0, [r0, #0x0]
addne r0, r12, r0
moveq r0, #0x0
bx lr
arm_func_end NNS_G3dGetAnmByIdx

2738
arm9/asm/NNS_G3D_sbc.s Normal file

File diff suppressed because it is too large Load Diff

359
arm9/asm/NNS_G3D_si3d.s Normal file
View File

@@ -0,0 +1,359 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_G3dSendTexSRTSi3d
NNSi_G3dSendTexSRTSi3d: ; 0x020BEF10
stmdb sp!, {lr}
sub sp, sp, #0x3c
ldr r1, [r0, #0x0]
mov r3, #0x0
ands r1, r1, #0x8
ldrne r1, _020BF0CC ; =0x00101710
mov r2, #0x3
strne r1, [sp, #0x0]
ldreq r1, _020BF0D0 ; =0x00101910
str r3, [sp, #0x34]
streq r1, [sp, #0x0]
mov r1, #0x2
str r1, [sp, #0x38]
str r3, [sp, #0x28]
str r3, [sp, #0x24]
str r3, [sp, #0x20]
str r3, [sp, #0x1c]
str r3, [sp, #0x14]
str r3, [sp, #0x10]
str r3, [sp, #0xc]
str r2, [sp, #0x4]
ldr r2, [r0, #0x0]
ands r1, r2, #0x4
beq _020BEFA0
str r3, [sp, #0x2c]
str r3, [sp, #0x30]
ldr r1, [r0, #0x0]
ands r1, r1, #0x1
movne r1, #0x1000
strne r1, [sp, #0x8]
strne r1, [sp, #0x18]
ldreq r1, [r0, #0x18]
streq r1, [sp, #0x8]
ldreq r1, [r0, #0x1c]
streq r1, [sp, #0x18]
b _020BF040
_020BEFA0:
ands r1, r2, #0x1
beq _020BEFE8
ldr r2, [r0, #0x24]
ldrh r1, [r0, #0x2c]
mov r2, r2, lsl #0x4
rsb r2, r2, #0x0
mul r1, r2, r1
str r1, [sp, #0x2c]
ldr r2, [r0, #0x28]
ldrh r1, [r0, #0x2e]
mov r2, r2, lsl #0x4
rsb r2, r2, #0x0
mul r3, r2, r1
mov r1, #0x1000
str r3, [sp, #0x30]
str r1, [sp, #0x8]
str r1, [sp, #0x18]
b _020BF040
_020BEFE8:
ldr r2, [r0, #0x18]
ldr r1, [r0, #0x24]
ldrh r12, [r0, #0x2c]
smull r3, r1, r2, r1
mov r2, r3, lsr #0x8
orr r2, r2, r1, lsl #0x18
rsb r1, r2, #0x0
mul r1, r12, r1
str r1, [sp, #0x2c]
ldr r2, [r0, #0x1c]
ldr r1, [r0, #0x28]
ldrh r12, [r0, #0x2e]
smull r3, r1, r2, r1
mov r2, r3, lsr #0x8
orr r2, r2, r1, lsl #0x18
rsb r1, r2, #0x0
mul r1, r12, r1
str r1, [sp, #0x30]
ldr r1, [r0, #0x18]
str r1, [sp, #0x8]
ldr r1, [r0, #0x1c]
str r1, [sp, #0x18]
_020BF040:
ldr r12, [r0, #0x30]
cmp r12, #0x1000
beq _020BF078
ldr r2, [sp, #0x8]
ldr r1, [sp, #0x2c]
smull r3, r2, r12, r2
mov r3, r3, lsr #0xc
orr r3, r3, r2, lsl #0x14
str r3, [sp, #0x8]
ldr r2, [r0, #0x30]
smull r3, r1, r2, r1
mov r2, r3, lsr #0xc
orr r2, r2, r1, lsl #0x14
str r2, [sp, #0x2c]
_020BF078:
ldr r12, [r0, #0x34]
cmp r12, #0x1000
beq _020BF0B0
ldr r2, [sp, #0x18]
ldr r1, [sp, #0x30]
smull r3, r2, r12, r2
mov r3, r3, lsr #0xc
orr r3, r3, r2, lsl #0x14
str r3, [sp, #0x18]
ldr r0, [r0, #0x34]
smull r2, r1, r0, r1
mov r0, r2, lsr #0xc
orr r0, r0, r1, lsl #0x14
str r0, [sp, #0x30]
_020BF0B0:
add r1, sp, #0x0
ldr r0, [sp, #0x0]
add r1, r1, #0x4
mov r2, #0xe
bl NNS_G3dGeBufferOP_N
add sp, sp, #0x3c
ldmia sp!, {pc}
.balign 4
_020BF0CC: .word 0x00101710
_020BF0D0: .word 0x00101910
arm_func_end NNSi_G3dSendTexSRTSi3d
arm_func_start NNSi_G3dGetJointScaleSi3d
NNSi_G3dGetJointScaleSi3d: ; 0x020BF0D4
stmdb sp!, {r4-r8,lr}
mov r5, r0
ands r0, r3, #0x4
ldrb r4, [r2, #0x1]
ldrb r0, [r2, #0x2]
beq _020BF174
ldr r2, [r5, #0x0]
ldr r1, _020BF2E0 ; =NNS_G3dRS
orr r2, r2, #0x1
str r2, [r5, #0x0]
ldr r3, [r1, #0x0]
mov r1, r0, lsr #0x5
add r1, r3, r1, lsl #0x2
and r2, r0, #0x1f
mov r6, #0x1
mov r2, r6, lsl r2
ldr r1, [r1, #0xc4]
ands r1, r2, r1
beq _020BF148
add r3, r3, #0xc4
mov r2, r4, lsr #0x5
ldr r1, [r3, r2, lsl #0x2]
and r0, r4, #0x1f
orr r0, r1, r6, lsl r0
str r0, [r3, r2, lsl #0x2]
ldr r0, [r5, #0x0]
orr r0, r0, #0x18
str r0, [r5, #0x0]
ldmia sp!, {r4-r8,pc}
_020BF148:
ldr r1, _020BF2E4 ; =NNS_G3dRSOnGlb + 0xE00
mov r2, #0x18
mla r6, r0, r2, r1
mla r1, r4, r2, r1
mov r0, r6
bl MIi_CpuCopy32
mov r0, r6
add r1, r5, #0x10
mov r2, #0x18
bl MIi_CpuCopy32
ldmia sp!, {r4-r8,pc}
_020BF174:
ldr r3, [r1, #0x0]
ldr r2, _020BF2E0 ; =NNS_G3dRS
str r3, [r5, #0x4]
ldr r3, [r1, #0x4]
mov r7, r0, lsr #0x5
str r3, [r5, #0x8]
ldr r3, [r1, #0x8]
and r8, r0, #0x1f
str r3, [r5, #0xc]
ldr r6, [r2, #0x0]
mov r3, #0x1
add r2, r6, r7, lsl #0x2
mov r7, r3, lsl r8
ldr r2, [r2, #0xc4]
ands r2, r7, r2
beq _020BF200
ldr r3, _020BF2E4 ; =NNS_G3dRSOnGlb + 0xE00
mov r2, #0x18
mov r0, r1
mla r1, r4, r2, r3
bl MIi_CpuCopy32
ldr r0, _020BF2E0 ; =NNS_G3dRS
mov r2, r4, lsr #0x5
ldr r1, [r0, #0x0]
and r0, r4, #0x1f
add r3, r1, #0xc4
mov r1, #0x1
mvn r0, r1, lsl r0
ldr r1, [r3, r2, lsl #0x2]
and r0, r1, r0
str r0, [r3, r2, lsl #0x2]
ldr r0, [r5, #0x0]
orr r0, r0, #0x18
str r0, [r5, #0x0]
ldmia sp!, {r4-r8,pc}
_020BF200:
mov r2, #0x18
mul r12, r0, r2
and r7, r4, #0x1f
ldr r0, _020BF2E4 ; =NNS_G3dRSOnGlb + 0xE00
add r6, r6, #0xc4
mov lr, r4, lsr #0x5
mvn r7, r3, lsl r7
ldr r8, [r6, lr, lsl #0x2]
mul r3, r4, r2
and r4, r8, r7
str r4, [r6, lr, lsl #0x2]
ldr r7, [r1, #0x0]
ldr r4, [r0, r12]
ldr r6, _020BF2E8 ; =NNS_G3dRSOnGlb + 0xE04
smull r8, r4, r7, r4
mov r7, r8, lsr #0xc
orr r7, r7, r4, lsl #0x14
str r7, [r0, r3]
ldr r8, [r1, #0x4]
ldr r4, [r6, r12]
ldr r7, _020BF2EC ; =NNS_G3dRSOnGlb + 0xE08
smull lr, r4, r8, r4
mov r8, lr, lsr #0xc
orr r8, r8, r4, lsl #0x14
str r8, [r6, r3]
ldr r8, [r1, #0x8]
ldr r4, [r7, r12]
ldr r6, _020BF2F0 ; =NNS_G3dRSOnGlb + 0xE0C
smull lr, r4, r8, r4
mov r8, lr, lsr #0xc
orr r8, r8, r4, lsl #0x14
str r8, [r7, r3]
ldr r7, [r1, #0xc]
ldr r4, [r6, r12]
ldr lr, _020BF2F4 ; =NNS_G3dRSOnGlb + 0xE10
smull r8, r4, r7, r4
mov r7, r8, lsr #0xc
orr r7, r7, r4, lsl #0x14
str r7, [r6, r3]
ldr r7, [r1, #0x10]
ldr r4, [lr, r12]
ldr r6, _020BF2F8 ; =NNS_G3dRSOnGlb + 0xE14
smull r8, r4, r7, r4
add r0, r0, r12
mov r7, r8, lsr #0xc
orr r7, r7, r4, lsl #0x14
str r7, [lr, r3]
ldr lr, [r1, #0x14]
ldr r4, [r6, r12]
add r1, r5, #0x10
smull r5, r4, lr, r4
mov r5, r5, lsr #0xc
orr r5, r5, r4, lsl #0x14
str r5, [r6, r3]
bl MIi_CpuCopy32
ldmia sp!, {r4-r8,pc}
.balign 4
_020BF2E0: .word NNS_G3dRS
_020BF2E4: .word NNS_G3dRSOnGlb + 0xE00
_020BF2E8: .word NNS_G3dRSOnGlb + 0xE04
_020BF2EC: .word NNS_G3dRSOnGlb + 0xE08
_020BF2F0: .word NNS_G3dRSOnGlb + 0xE0C
_020BF2F4: .word NNS_G3dRSOnGlb + 0xE10
_020BF2F8: .word NNS_G3dRSOnGlb + 0xE14
arm_func_end NNSi_G3dGetJointScaleSi3d
arm_func_start NNSi_G3dSendJointSRTSi3d
NNSi_G3dSendJointSRTSi3d: ; 0x020BF2FC
stmdb sp!, {r4-r6,lr}
sub sp, sp, #0x10
mov r6, r0
ldr r0, [r6, #0x0]
mov r5, #0x0
ands r4, r0, #0x18
bne _020BF328
add r1, r6, #0x1c
mov r0, #0x1b
mov r2, #0x3
bl NNS_G3dGeBufferOP_N
_020BF328:
ldr r0, [r6, #0x0]
ands r0, r0, #0x4
bne _020BF398
cmp r4, #0x0
movne r5, #0x1
bne _020BF398
ldr r2, [r6, #0x4c]
ldr r0, [r6, #0x10]
add r1, sp, #0x0
smull r3, r0, r2, r0
mov r2, r3, lsr #0xc
orr r2, r2, r0, lsl #0x14
str r2, [sp, #0x0]
ldr r3, [r6, #0x50]
ldr r2, [r6, #0x14]
mov r0, #0x1c
smull r12, r2, r3, r2
mov r3, r12, lsr #0xc
orr r3, r3, r2, lsl #0x14
str r3, [sp, #0x4]
ldr r12, [r6, #0x54]
ldr r3, [r6, #0x18]
mov r2, #0x3
smull lr, r3, r12, r3
mov r12, lr, lsr #0xc
orr r12, r12, r3, lsl #0x14
str r12, [sp, #0x8]
bl NNS_G3dGeBufferOP_N
_020BF398:
ldr r0, [r6, #0x0]
ands r0, r0, #0x2
bne _020BF3D4
cmp r5, #0x0
beq _020BF3C0
add r1, r6, #0x28
mov r0, #0x19
mov r2, #0xc
bl NNS_G3dGeBufferOP_N
b _020BF3EC
_020BF3C0:
add r1, r6, #0x28
mov r0, #0x1a
mov r2, #0x9
bl NNS_G3dGeBufferOP_N
b _020BF3EC
_020BF3D4:
cmp r5, #0x0
beq _020BF3EC
add r1, r6, #0x4c
mov r0, #0x1c
mov r2, #0x3
bl NNS_G3dGeBufferOP_N
_020BF3EC:
cmp r4, #0x0
bne _020BF404
add r1, r6, #0x10
mov r0, #0x1b
mov r2, #0x3
bl NNS_G3dGeBufferOP_N
_020BF404:
ldr r0, [r6, #0x0]
ands r0, r0, #0x1
addne sp, sp, #0x10
ldmneia sp!, {r4-r6,pc}
add r1, r6, #0x4
mov r0, #0x1b
mov r2, #0x3
bl NNS_G3dGeBufferOP_N
add sp, sp, #0x10
ldmia sp!, {r4-r6,pc}
arm_func_end NNSi_G3dSendJointSRTSi3d

349
arm9/asm/NNS_G3D_util.s Normal file
View File

@@ -0,0 +1,349 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNS_G3dWorldPosToScrPos
NNS_G3dWorldPosToScrPos: ; 0x020BB408
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x1c
mov r5, r1
mov r4, r2
ldr r6, _020BB594 ; =NNS_G3dGlb + 0x8
ldr r1, _020BB598 ; =NNS_G3dGlb + 0x4C
add r2, sp, #0x10
bl MTX_MultVec43
ldr r1, [sp, #0x14]
ldr r0, [r6, #0x1c]
ldr r2, [sp, #0x10]
smull r8, r7, r1, r0
ldr r0, [r6, #0xc]
ldr r3, [sp, #0x18]
smlal r8, r7, r2, r0
ldr r1, [r6, #0x2c]
ldr r0, [r6, #0x3c]
smlal r8, r7, r3, r1
mov r1, r8, lsr #0xc
orr r1, r1, r7, lsl #0x14
add r0, r1, r0
bl FX_InvAsync
ldr r2, [sp, #0x14]
ldr r1, [r6, #0x10]
ldr r0, [r6, #0x14]
smull lr, r8, r2, r1
smull r12, r9, r2, r0
ldr r1, [sp, #0x10]
ldr r3, [r6, #0x0]
ldr r0, [sp, #0x18]
smlal lr, r8, r1, r3
ldr r7, [r6, #0x20]
ldr r2, [r6, #0x30]
smlal lr, r8, r0, r7
mov r3, lr, lsr #0xc
orr r3, r3, r8, lsl #0x14
add r7, r3, r2
ldr r3, [r6, #0x4]
ldr r8, [r6, #0x24]
smlal r12, r9, r1, r3
smlal r12, r9, r0, r8
mov r0, r12, lsr #0xc
ldr r2, [r6, #0x34]
orr r0, r0, r9, lsl #0x14
add r6, r0, r2
bl FX_GetDivResultFx64c
mov r2, r7, asr #0x1f
umull r9, lr, r0, r7
mla lr, r0, r2, lr
mov r3, #0x80000000
mla lr, r1, r7, lr
adds r9, r9, r3
adc r2, lr, #0x0
add r2, r2, #0x1000
add r2, r2, r2, lsr #0x1f
mov r7, r2, asr #0x1
umull lr, r2, r0, r6
mov r12, r6, asr #0x1f
mla r2, r0, r12, r2
mla r2, r1, r6, r2
adds r3, lr, r3
adc r0, r2, #0x0
add r0, r0, #0x1000
add r0, r0, r0, lsr #0x1f
mov r8, #0x0
mov r6, r0, asr #0x1
cmp r7, #0x0
blt _020BB530
cmp r6, #0x0
blt _020BB530
cmp r7, #0x1000
bgt _020BB530
cmp r6, #0x1000
ble _020BB534
_020BB530:
mvn r8, #0x0
_020BB534:
add r0, sp, #0x0
add r1, sp, #0x4
add r2, sp, #0x8
add r3, sp, #0xc
bl NNS_G3dGlbGetViewPort
ldr r2, [sp, #0x0]
ldr r0, [sp, #0x8]
ldr r12, [sp, #0xc]
sub r0, r0, r2
mul r0, r7, r0
add r1, r0, #0x800
ldr r3, [sp, #0x4]
add r1, r2, r1, asr #0xc
sub r0, r12, r3
mul r0, r6, r0
str r1, [r5, #0x0]
ldr r1, [sp, #0x4]
add r0, r0, #0x800
rsb r1, r1, #0xbf
sub r1, r1, r0, asr #0xc
mov r0, r8
str r1, [r4, #0x0]
add sp, sp, #0x1c
ldmia sp!, {r4-r9,pc}
.balign 4
_020BB594: .word NNS_G3dGlb + 0x8
_020BB598: .word NNS_G3dGlb + 0x4C
arm_func_end NNS_G3dWorldPosToScrPos
arm_func_start NNS_G3dResDefaultSetup
NNS_G3dResDefaultSetup: ; 0x020BB59C
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x4
mov r5, r0
ldr r1, [r5, #0x0]
ldr r0, _020BB7C8 ; =0x30415642
cmp r1, r0
bhi _020BB5F4
cmp r1, r0
bhs _020BB7B0
ldr r0, _020BB7CC ; =0x30414D42
cmp r1, r0
bhi _020BB5E4
cmp r1, r0
bhs _020BB7B0
ldr r0, _020BB7D0 ; =0x30414342
cmp r1, r0
beq _020BB7B0
b _020BB7BC
_020BB5E4:
ldr r0, _020BB7D4 ; =0x30415442
cmp r1, r0
beq _020BB7B0
b _020BB7BC
_020BB5F4:
ldr r0, _020BB7D8 ; =0x30505442
cmp r1, r0
bhi _020BB618
cmp r1, r0
bhs _020BB7B0
ldr r0, _020BB7DC ; =0x30444D42
cmp r1, r0
beq _020BB624
b _020BB7BC
_020BB618:
ldr r0, _020BB7E0 ; =0x30585442
cmp r1, r0
bne _020BB7BC
_020BB624:
mov r11, #0x1
mov r0, r5
mov r9, r11
mov r8, r11
bl NNS_G3dGetTex
movs r4, r0
beq _020BB77C
bl NNS_G3dTexGetRequiredSize
mov r7, r0
mov r0, r4
bl NNS_G3dTex4x4GetRequiredSize
mov r6, r0
mov r0, r4
bl NNS_G3dPlttGetRequiredSize
mov r10, r0
cmp r7, #0x0
beq _020BB68C
ldr r0, _020BB7E4 ; =NNS_GfdDefaultFuncAllocTexVram
mov r1, #0x0
ldr r3, [r0, #0x0]
mov r0, r7
mov r2, r1
blx r3
movs r7, r0
moveq r11, #0x0
b _020BB690
_020BB68C:
mov r7, #0x0
_020BB690:
cmp r6, #0x0
beq _020BB6BC
ldr r1, _020BB7E4 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, r6
ldr r3, [r1, #0x0]
mov r1, #0x1
mov r2, #0x0
blx r3
movs r6, r0
moveq r9, #0x0
b _020BB6C0
_020BB6BC:
mov r6, #0x0
_020BB6C0:
cmp r10, #0x0
beq _020BB6F0
ldr r1, _020BB7E8 ; =NNS_GfdDefaultFuncAllocPlttVram
ldrh r2, [r4, #0x20]
ldr r3, [r1, #0x0]
mov r0, r10
and r1, r2, #0x8000
mov r2, #0x0
blx r3
movs r10, r0
moveq r8, #0x0
b _020BB6F4
_020BB6F0:
mov r10, #0x0
_020BB6F4:
cmp r11, #0x0
beq _020BB70C
cmp r9, #0x0
beq _020BB70C
cmp r8, #0x0
bne _020BB748
_020BB70C:
ldr r1, _020BB7EC ; =NNS_GfdDefaultFuncFreePlttVram
mov r0, r10
ldr r1, [r1, #0x0]
blx r1
ldr r1, _020BB7F0 ; =NNS_GfdDefaultFuncFreeTexVram
mov r0, r6
ldr r1, [r1, #0x0]
blx r1
ldr r1, _020BB7F0 ; =NNS_GfdDefaultFuncFreeTexVram
mov r0, r7
ldr r1, [r1, #0x0]
blx r1
add sp, sp, #0x4
mov r0, #0x0
ldmia sp!, {r4-r11,pc}
_020BB748:
mov r0, r4
mov r1, r7
mov r2, r6
bl NNS_G3dTexSetTexKey
mov r0, r4
mov r1, r10
bl NNS_G3dPlttSetPlttKey
mov r0, r4
mov r1, #0x1
bl NNS_G3dTexLoad
mov r0, r4
mov r1, #0x1
bl NNS_G3dPlttLoad
_020BB77C:
ldr r1, [r5, #0x0]
ldr r0, _020BB7DC ; =0x30444D42
cmp r1, r0
bne _020BB7A4
mov r0, r5
bl NNS_G3dGetMdlSet
cmp r4, #0x0
beq _020BB7A4
mov r1, r4
bl NNS_G3dBindMdlSet
_020BB7A4:
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r11,pc}
_020BB7B0:
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r11,pc}
_020BB7BC:
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
.balign 4
_020BB7C8: .word 0x30415642
_020BB7CC: .word 0x30414D42
_020BB7D0: .word 0x30414342
_020BB7D4: .word 0x30415442
_020BB7D8: .word 0x30505442
_020BB7DC: .word 0x30444D42
_020BB7E0: .word 0x30585442
_020BB7E4: .word NNS_GfdDefaultFuncAllocTexVram
_020BB7E8: .word NNS_GfdDefaultFuncAllocPlttVram
_020BB7EC: .word NNS_GfdDefaultFuncFreePlttVram
_020BB7F0: .word NNS_GfdDefaultFuncFreeTexVram
arm_func_end NNS_G3dResDefaultSetup
arm_func_start NNS_G3dInit
NNS_G3dInit: ; 0x020BB7F4
stmdb sp!, {lr}
sub sp, sp, #0x4
bl G3X_Init
bl NNS_G3dGlbInit
ldr r1, _020BB820 ; =0x04000600
ldr r0, [r1, #0x0]
bic r0, r0, #0xc0000000
orr r0, r0, #0x80000000
str r0, [r1, #0x0]
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020BB820: .word 0x04000600
arm_func_end NNS_G3dInit
arm_func_start NNS_G3dGetCurrentMtx
NNS_G3dGetCurrentMtx: ; 0x020BB824
stmdb sp!, {r4-r6,lr}
sub sp, sp, #0x40
mov r6, r0
mov r5, r1
bl NNS_G3dGeFlushBuffer
ldr r0, _020BB8B4 ; =0x04000440
mov r2, #0x0
ldr r1, _020BB8B8 ; =0x04000444
str r2, [r0, #0x0]
ldr r0, _020BB8BC ; =0x04000454
str r2, [r1, #0x0]
str r2, [r0, #0x0]
cmp r6, #0x0
beq _020BB87C
add r4, sp, #0x0
_020BB860:
mov r0, r4
bl G3X_GetClipMtx
cmp r0, #0x0
bne _020BB860
add r0, sp, #0x0
mov r1, r6
bl MTX_Copy44To43_
_020BB87C:
cmp r5, #0x0
beq _020BB894
_020BB884:
mov r0, r5
bl G3X_GetVectorMtx
cmp r0, #0x0
bne _020BB884
_020BB894:
ldr r1, _020BB8C0 ; =0x04000448
mov r2, #0x1
ldr r0, _020BB8B4 ; =0x04000440
str r2, [r1, #0x0]
mov r1, #0x2
str r1, [r0, #0x0]
add sp, sp, #0x40
ldmia sp!, {r4-r6,pc}
.balign 4
_020BB8B4: .word 0x04000440
_020BB8B8: .word 0x04000444
_020BB8BC: .word 0x04000454
_020BB8C0: .word 0x04000448
arm_func_end NNS_G3dGetCurrentMtx

477
arm9/asm/NNS_G3D_xsi.s Normal file
View File

@@ -0,0 +1,477 @@
.include "asm/macros.inc"
.include "global.inc"
.section .data
.global calcTexMtx_
calcTexMtx_: ; 0x021067F0
.word texmtxCalc_flag_
.word texmtxCalc_flagS_
.word texmtxCalc_flagR_
.word texmtxCalc_flagRS_
.word texmtxCalc_flagT_
.word texmtxCalc_flagTS_
.word texmtxCalc_flagTR_
.word texmtxCalc_flagTRS_
.section .text
arm_func_start NNSi_G3dSendTexSRTXsi
NNSi_G3dSendTexSRTXsi: ; 0x020BFA9C
stmdb sp!, {r4,lr}
sub sp, sp, #0x50
mov r4, r0
ldr r0, [r4, #0x0]
mov r3, #0x3
ands r0, r0, #0x8
ldrne r0, _020BFC1C ; =0x00101610
mov r2, #0x2
strne r0, [sp, #0x0]
ldreq r0, _020BFC20 ; =0x00101810
mov r1, #0x1000
streq r0, [sp, #0x0]
mov r0, #0x0
str r3, [sp, #0x4]
str r2, [sp, #0x48]
str r1, [sp, #0x44]
str r0, [sp, #0x40]
str r0, [sp, #0x34]
str r0, [sp, #0x30]
str r0, [sp, #0x2c]
str r0, [sp, #0x28]
str r0, [sp, #0x24]
str r0, [sp, #0x20]
str r0, [sp, #0x14]
str r0, [sp, #0x10]
ldr r0, [r4, #0x0]
ands r0, r0, #0x1
strne r1, [r4, #0x1c]
ldrne r0, [r4, #0x1c]
strne r0, [r4, #0x18]
ldr r0, [r4, #0x0]
ands r0, r0, #0x2
movne r0, #0x1000
strneh r0, [r4, #0x22]
movne r0, #0x0
strneh r0, [r4, #0x20]
ldr r0, [r4, #0x0]
ands r0, r0, #0x4
movne r0, #0x0
strne r0, [r4, #0x28]
ldrne r0, [r4, #0x28]
strne r0, [r4, #0x24]
ldr r1, [r4, #0x0]
ldr r0, _020BFC24 ; =calcTexMtx_
and r1, r1, #0x7
ldr r2, [r0, r1, lsl #0x2]
add r0, sp, #0x8
mov r1, r4
blx r2
ldr r3, [r4, #0x30]
cmp r3, #0x1000
beq _020BFBB0
ldr r0, [sp, #0x8]
ldr r1, [sp, #0xc]
smull r2, r0, r3, r0
mov r2, r2, lsr #0xc
orr r2, r2, r0, lsl #0x14
str r2, [sp, #0x8]
ldr r2, [r4, #0x30]
ldr r0, [sp, #0x38]
smull r3, r1, r2, r1
mov r2, r3, lsr #0xc
orr r2, r2, r1, lsl #0x14
str r2, [sp, #0xc]
ldr r1, [r4, #0x30]
smull r2, r0, r1, r0
mov r1, r2, lsr #0xc
orr r1, r1, r0, lsl #0x14
str r1, [sp, #0x38]
_020BFBB0:
ldr r3, [r4, #0x34]
cmp r3, #0x1000
beq _020BFC00
ldr r0, [sp, #0x18]
ldr r1, [sp, #0x1c]
smull r2, r0, r3, r0
mov r2, r2, lsr #0xc
orr r2, r2, r0, lsl #0x14
str r2, [sp, #0x18]
ldr r2, [r4, #0x34]
ldr r0, [sp, #0x3c]
smull r3, r1, r2, r1
mov r2, r3, lsr #0xc
orr r2, r2, r1, lsl #0x14
str r2, [sp, #0x1c]
ldr r1, [r4, #0x34]
smull r2, r0, r1, r0
mov r1, r2, lsr #0xc
orr r1, r1, r0, lsl #0x14
str r1, [sp, #0x3c]
_020BFC00:
add r1, sp, #0x0
ldr r0, [sp, #0x0]
add r1, r1, #0x4
mov r2, #0x12
bl NNS_G3dGeBufferOP_N
add sp, sp, #0x50
ldmia sp!, {r4,pc}
.balign 4
_020BFC1C: .word 0x00101610
_020BFC20: .word 0x00101810
_020BFC24: .word calcTexMtx_
arm_func_end NNSi_G3dSendTexSRTXsi
arm_func_start texmtxCalc_flagTRS_
texmtxCalc_flagTRS_: ; 0x020BFC28
mov r2, #0x1000
str r2, [r0, #0x0]
mov r1, #0x0
str r1, [r0, #0x4]
str r1, [r0, #0x10]
str r2, [r0, #0x14]
str r1, [r0, #0x30]
str r1, [r0, #0x34]
bx lr
arm_func_end texmtxCalc_flagTRS_
arm_func_start texmtxCalc_flagTR_
texmtxCalc_flagTR_: ; 0x020BFC4C
ldr r2, [r1, #0x18]
mov r3, #0x0
str r2, [r0, #0x0]
ldr r2, [r1, #0x1c]
str r2, [r0, #0x14]
str r3, [r0, #0x4]
str r3, [r0, #0x30]
ldrh r2, [r1, #0x2e]
ldr r1, [r1, #0x1c]
rsb r2, r2, #0x0
sub r1, r1, #0x1000
mul r1, r2, r1
mov r1, r1, lsl #0x4
str r1, [r0, #0x34]
str r3, [r0, #0x10]
bx lr
arm_func_end texmtxCalc_flagTR_
arm_func_start texmtxCalc_flagTS_
texmtxCalc_flagTS_: ; 0x020BFC8C
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r5, r1
ldrh r2, [r5, #0x2c]
ldrh r1, [r5, #0x2e]
mov r6, r0
mov r4, r2, lsl #0xc
mov r7, r1, lsl #0xc
mov r0, r7
mov r1, r4
bl FX_DivAsync
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x0]
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x14]
bl FX_GetDivResult
ldrsh r2, [r5, #0x20]
mov r1, r7
mul r0, r2, r0
mov r2, r0, asr #0xc
mov r0, r4
str r2, [r6, #0x4]
bl FX_DivAsync
ldrh r1, [r5, #0x2c]
ldrsh r0, [r5, #0x20]
mul r0, r1, r0
mov r0, r0, lsl #0x4
str r0, [r6, #0x30]
ldrh r1, [r5, #0x2e]
ldrsh r0, [r5, #0x22]
rsb r1, r1, #0x0
sub r0, r0, #0x1000
mul r0, r1, r0
mov r0, r0, lsl #0x4
str r0, [r6, #0x34]
bl FX_GetDivResult
ldrsh r1, [r5, #0x20]
rsb r1, r1, #0x0
mul r0, r1, r0
mov r0, r0, asr #0xc
str r0, [r6, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end texmtxCalc_flagTS_
arm_func_start texmtxCalc_flagT_
texmtxCalc_flagT_: ; 0x020BFD38
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x4
mov r9, r1
ldrh r2, [r9, #0x2c]
ldrh r1, [r9, #0x2e]
mov r10, r0
mov r8, r2, lsl #0xc
mov r11, r1, lsl #0xc
mov r0, r11
mov r1, r8
bl FX_DivAsync
ldrsh r3, [r9, #0x22]
ldr r0, [r9, #0x18]
ldrsh r7, [r9, #0x20]
ldr r5, [r9, #0x1c]
smull r2, r1, r0, r3
mov r2, r2, lsr #0xc
orr r2, r2, r1, lsl #0x14
str r2, [r10, #0x0]
smull r2, r1, r5, r3
mov r4, r2, lsr #0xc
orr r4, r4, r1, lsl #0x14
smull r2, r1, r0, r7
mov r6, r2, lsr #0xc
orr r6, r6, r1, lsl #0x14
str r4, [r10, #0x14]
bl FX_GetDivResult
smull r2, r1, r5, r7
mov r2, r2, lsr #0xc
orr r2, r2, r1, lsl #0x14
mul r0, r2, r0
mov r0, r0, asr #0xc
str r0, [r10, #0x4]
mov r0, r8
mov r1, r11
bl FX_DivAsync
sub r0, r4, #0x1000
ldrh r1, [r9, #0x2c]
mul r2, r1, r6
mov r1, r2, lsl #0x4
str r1, [r10, #0x30]
ldrh r1, [r9, #0x2e]
rsb r1, r1, #0x0
mul r0, r1, r0
mov r0, r0, lsl #0x4
str r0, [r10, #0x34]
bl FX_GetDivResult
rsb r1, r6, #0x0
mul r0, r1, r0
mov r0, r0, asr #0xc
str r0, [r10, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
arm_func_end texmtxCalc_flagT_
arm_func_start texmtxCalc_flagRS_
texmtxCalc_flagRS_: ; 0x020BFE0C
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r2, #0x1000
str r2, [r0, #0x0]
str r2, [r0, #0x14]
mov lr, #0x0
str lr, [r0, #0x4]
ldr r2, [r1, #0x24]
ldrh r3, [r1, #0x2c]
rsb r2, r2, #0x0
ldr r12, [r1, #0x28]
mul r2, r3, r2
mov r2, r2, lsl #0x4
str r2, [r0, #0x30]
ldrh r1, [r1, #0x2e]
rsb r2, r12, #0x0
rsb r1, r1, #0x0
mul r2, r1, r2
mov r1, r2, lsl #0x4
str r1, [r0, #0x34]
str lr, [r0, #0x10]
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end texmtxCalc_flagRS_
arm_func_start texmtxCalc_flagR_
texmtxCalc_flagR_: ; 0x020BFE68
stmdb sp!, {r4,lr}
ldr r3, [r1, #0x18]
mov r2, #0x0
str r3, [r0, #0x0]
ldr r3, [r1, #0x1c]
str r3, [r0, #0x14]
str r2, [r0, #0x4]
ldr r12, [r1, #0x24]
ldr r3, [r1, #0x18]
ldr r4, [r1, #0x28]
smull lr, r3, r12, r3
mov r12, lr, lsr #0xc
orr r12, r12, r3, lsl #0x14
ldrh lr, [r1, #0x2c]
rsb r3, r12, #0x0
ldr r12, [r1, #0x1c]
rsb r4, r4, #0x0
mul r3, lr, r3
smull lr, r12, r4, r12
mov r3, r3, lsl #0x4
str r3, [r0, #0x30]
mov r4, lr, lsr #0xc
ldrh r3, [r1, #0x2e]
ldr r1, [r1, #0x1c]
orr r4, r4, r12, lsl #0x14
add r1, r1, r4
rsb r3, r3, #0x0
sub r1, r1, #0x1000
mul r1, r3, r1
mov r1, r1, lsl #0x4
str r1, [r0, #0x34]
str r2, [r0, #0x10]
ldmia sp!, {r4,pc}
arm_func_end texmtxCalc_flagR_
arm_func_start texmtxCalc_flagS_
texmtxCalc_flagS_: ; 0x020BFEEC
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r5, r1
ldrh r2, [r5, #0x2c]
ldrh r1, [r5, #0x2e]
mov r6, r0
mov r4, r2, lsl #0xc
mov r7, r1, lsl #0xc
mov r0, r7
mov r1, r4
bl FX_DivAsync
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x0]
ldrsh r0, [r5, #0x22]
str r0, [r6, #0x14]
bl FX_GetDivResult
ldrsh r2, [r5, #0x20]
mov r1, r7
mul r0, r2, r0
mov r2, r0, asr #0xc
mov r0, r4
str r2, [r6, #0x4]
bl FX_DivAsync
ldrsh lr, [r5, #0x20]
ldr r4, [r5, #0x28]
ldrsh r0, [r5, #0x22]
ldr r12, [r5, #0x24]
smull r3, r2, r4, lr
smlal r3, r2, r12, r0
smull r1, r0, r4, r0
mov r3, r3, lsr #0xc
orr r3, r3, r2, lsl #0x14
sub r4, lr, r3
smull r3, r2, r12, lr
subs r1, r3, r1
sbc r0, r2, r0
ldrh r2, [r5, #0x2c]
mov r1, r1, lsr #0xc
orr r1, r1, r0, lsl #0x14
mul r0, r2, r4
mov r0, r0, lsl #0x4
str r0, [r6, #0x30]
ldrsh r0, [r5, #0x22]
ldrh r2, [r5, #0x2e]
add r0, r0, r1
rsb r1, r2, #0x0
sub r0, r0, #0x1000
mul r0, r1, r0
mov r0, r0, lsl #0x4
str r0, [r6, #0x34]
bl FX_GetDivResult
ldrsh r1, [r5, #0x20]
rsb r1, r1, #0x0
mul r0, r1, r0
mov r0, r0, asr #0xc
str r0, [r6, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_end texmtxCalc_flagS_
arm_func_start texmtxCalc_flag_
texmtxCalc_flag_: ; 0x020BFFD4
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x4
mov r6, r1
ldrh r2, [r6, #0x2c]
ldrh r1, [r6, #0x2e]
mov r7, r0
mov r10, r2, lsl #0xc
mov r11, r1, lsl #0xc
mov r0, r11
mov r1, r10
bl FX_DivAsync
ldrsh r3, [r6, #0x22]
ldr r0, [r6, #0x18]
ldrsh r9, [r6, #0x20]
smull r2, r1, r0, r3
mov r2, r2, lsr #0xc
ldr r8, [r6, #0x1c]
orr r2, r2, r1, lsl #0x14
str r2, [r7, #0x0]
smull r2, r1, r8, r3
mov r4, r2, lsr #0xc
orr r4, r4, r1, lsl #0x14
smull r2, r1, r0, r9
mov r5, r2, lsr #0xc
orr r5, r5, r1, lsl #0x14
str r4, [r7, #0x14]
bl FX_GetDivResult
smull r2, r1, r8, r9
mov r2, r2, lsr #0xc
orr r2, r2, r1, lsl #0x14
mul r0, r2, r0
mov r0, r0, asr #0xc
str r0, [r7, #0x4]
mov r0, r10
mov r1, r11
bl FX_DivAsync
ldr lr, [r6, #0x1c]
ldrsh r2, [r6, #0x20]
ldr r8, [r6, #0x24]
ldr r0, [r6, #0x28]
smull r10, r9, r8, r2
ldrh r1, [r6, #0x2c]
smull r3, r2, r0, r2
ldrsh r12, [r6, #0x22]
str r1, [sp, #0x0]
mov r11, lr, asr #0x1f
smlal r3, r2, r8, r12
smull r8, r12, r0, r12
subs r8, r10, r8
sbc r0, r9, r12
mov r9, r8, lsr #0xc
mov r12, r3, lsr #0xc
orr r9, r9, r0, lsl #0x14
mov r3, r2, asr #0xc
orr r12, r12, r2, lsl #0x14
umull r10, r2, r9, lr
mla r2, r9, r11, r2
mov r8, r0, asr #0xc
mla r2, r8, lr, r2
ldr r1, [r6, #0x18]
mov r8, r10, lsr #0xc
orr r8, r8, r2, lsl #0x14
add r2, r4, r8
mov r0, r1, asr #0x1f
umull r8, r4, r12, r1
mla r4, r12, r0, r4
mla r4, r3, r1, r4
mov r0, r8, lsr #0xc
orr r0, r0, r4, lsl #0x14
sub r1, r5, r0
ldr r0, [sp, #0x0]
sub r2, r2, #0x1000
mul r1, r0, r1
mov r0, r1, lsl #0x4
str r0, [r7, #0x30]
ldrh r0, [r6, #0x2e]
rsb r0, r0, #0x0
mul r1, r0, r2
mov r0, r1, lsl #0x4
str r0, [r7, #0x34]
bl FX_GetDivResult
rsb r1, r5, #0x0
mul r0, r1, r0
mov r0, r0, asr #0xc
str r0, [r7, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
arm_func_end texmtxCalc_flag_

View File

@@ -0,0 +1,165 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global s_managerState_
s_managerState_: ; 0x021CCD4C
.space 0xc
.section .text
arm_func_start NNS_GfdResetFrmPlttVramState
NNS_GfdResetFrmPlttVramState: ; 0x020AEC60
ldr r0, _020AEC78 ; =s_managerState_
mov r2, #0x0
ldr r1, [r0, #0x8]
str r2, [r0, #0x0]
str r1, [r0, #0x4]
bx lr
.balign 4
_020AEC78: .word s_managerState_
arm_func_end NNS_GfdResetFrmPlttVramState
arm_func_start NNS_GfdSetFrmPlttVramState
NNS_GfdSetFrmPlttVramState: ; 0x020AEC7C
ldr r2, [r0, #0x0]
ldr r1, _020AEC94 ; =s_managerState_
str r2, [r1, #0x0]
ldr r0, [r0, #0x4]
str r0, [r1, #0x4]
bx lr
.balign 4
_020AEC94: .word s_managerState_
arm_func_end NNS_GfdSetFrmPlttVramState
arm_func_start NNS_GfdGetFrmPlttVramState
NNS_GfdGetFrmPlttVramState: ; 0x020AEC98
ldr r1, _020AECB0 ; =s_managerState_
ldr r2, [r1, #0x0]
str r2, [r0, #0x0]
ldr r1, [r1, #0x4]
str r1, [r0, #0x4]
bx lr
.balign 4
_020AECB0: .word s_managerState_
arm_func_end NNS_GfdGetFrmPlttVramState
arm_func_start NNS_GfdFreeFrmPlttVram
NNS_GfdFreeFrmPlttVram: ; 0x020AECB4
mov r0, #0x0
bx lr
arm_func_end NNS_GfdFreeFrmPlttVram
arm_func_start NNS_GfdAllocFrmPlttVram
NNS_GfdAllocFrmPlttVram: ; 0x020AECBC
stmdb sp!, {r4,lr}
cmp r0, #0x0
moveq r0, #0x8
addne r0, r0, #0x7
ldr ip, _020AEDE8 ; =0x0007FFF8
bicne r0, r0, #0x7
cmp r0, r12
mov r3, #0x0
movcs r0, #0x0
ldmcsia sp!, {r4,pc}
cmp r2, #0x1
bne _020AED64
ldr r2, _020AEDEC ; =s_managerState_
cmp r1, #0x0
ldr r12, [r2, #0x0]
andne r2, r12, #0x7
rsbne r2, r2, #0x8
andne r4, r2, #0x7
andeq r2, r12, #0xf
rsbeq r2, r2, #0x10
andeq r4, r2, #0xf
ldr r2, _020AEDEC ; =s_managerState_
add lr, r0, r4
ldr r2, [r2, #0x4]
sub r2, r2, r12
cmp r2, lr
blo _020AED5C
cmp r1, #0x0
add r1, r12, lr
beq _020AED40
cmp r1, #0x10000
movhi r12, #0x0
bhi _020AEDCC
_020AED40:
ldr r1, _020AEDEC ; =s_managerState_
add r3, r12, r4
ldr r2, [r1, #0x0]
mov r12, #0x1
add r2, r2, lr
str r2, [r1, #0x0]
b _020AEDCC
_020AED5C:
mov r12, #0x0
b _020AEDCC
_020AED64:
ldr r2, _020AEDEC ; =s_managerState_
ldr r12, [r2, #0x4]
cmp r12, r0
blo _020AEDC8
sub r2, r12, r0
cmp r1, #0x0
andne r4, r2, #0x7
andeq r4, r2, #0xf
ldr r2, _020AEDEC ; =s_managerState_
add lr, r0, r4
ldr r2, [r2, #0x0]
sub r2, r12, r2
cmp r2, lr
blo _020AEDC8
cmp r1, #0x0
beq _020AEDB0
cmp r12, #0x10000
movhi r12, #0x0
bhi _020AEDCC
_020AEDB0:
ldr r1, _020AEDEC ; =s_managerState_
mov r12, #0x1
ldr r2, [r1, #0x4]
sub r3, r2, lr
str r3, [r1, #0x4]
b _020AEDCC
_020AEDC8:
mov r12, #0x0
_020AEDCC:
cmp r12, #0x0
ldrne r1, _020AEDF0 ; =0x0000FFFF
movne r2, r0, lsr #0x3
andne r0, r1, r3, lsr #0x3
orrne r0, r0, r2, lsl #0x10
moveq r0, #0x0
ldmia sp!, {r4,pc}
.balign 4
_020AEDE8: .word 0x0007FFF8
_020AEDEC: .word s_managerState_
_020AEDF0: .word 0x0000FFFF
arm_func_end NNS_GfdAllocFrmPlttVram
arm_func_start NNS_GfdInitFrmPlttVramManager
NNS_GfdInitFrmPlttVramManager: ; 0x020AEDF4
stmdb sp!, {r4,lr}
ldr r2, _020AEE2C ; =s_managerState_
mov r4, r1
str r0, [r2, #0x8]
bl NNS_GfdResetFrmPlttVramState
cmp r4, #0x0
ldmeqia sp!, {r4,pc}
ldr r3, _020AEE30 ; =NNS_GfdAllocFrmPlttVram
ldr r1, _020AEE34 ; =NNS_GfdDefaultFuncAllocPlttVram
ldr r2, _020AEE38 ; =NNS_GfdFreeFrmPlttVram
ldr r0, _020AEE3C ; =NNS_GfdDefaultFuncFreePlttVram
str r3, [r1, #0x0]
str r2, [r0, #0x0]
ldmia sp!, {r4,pc}
.balign 4
_020AEE2C: .word s_managerState_
_020AEE30: .word NNS_GfdAllocFrmPlttVram
_020AEE34: .word NNS_GfdDefaultFuncAllocPlttVram
_020AEE38: .word NNS_GfdFreeFrmPlttVram
_020AEE3C: .word NNS_GfdDefaultFuncFreePlttVram
arm_func_end NNS_GfdInitFrmPlttVramManager

View File

@@ -0,0 +1,316 @@
.include "asm/macros.inc"
.include "global.inc"
.section .data
.global tex4x4SearchArray_
tex4x4SearchArray_: ; 0x021064C8
.word vramRegions_
.word vramRegions_ + 0x48
.global texNrmSearchArray_
texNrmSearchArray_: ; 0x021064D0
.word vramRegions_ + 0x60
.word vramRegions_ + 0x48
.word vramRegions_
.word vramRegions_ + 0x30
.word vramRegions_ + 0x18
.global vramRegions_
vramRegions_: ; 0x021064E4
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x00
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
.byte 0x02, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x00
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x04, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x06, 0x00
.section .bss
.global frmExVramMan_
frmExVramMan_: ; 0x021CCD48
.space 0x4
.section .text
arm_func_start NNS_GfdSetFrmTexVramState
NNS_GfdSetFrmTexVramState: ; 0x020AE8CC
stmdb sp!, {lr}
sub sp, sp, #0x4
mov lr, #0x0
ldr r3, _020AE914 ; =vramRegions_
mov r12, lr
mov r2, #0x1
_020AE8E4:
ldr r1, [r0, r12, lsl #0x2]
add lr, lr, #0x1
str r1, [r3, #0x0]
ldr r1, [r0, r2, lsl #0x2]
cmp lr, #0x5
str r1, [r3, #0x4]
add r12, r12, #0x2
add r3, r3, #0x18
add r2, r2, #0x2
blt _020AE8E4
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020AE914: .word vramRegions_
arm_func_end NNS_GfdSetFrmTexVramState
arm_func_start NNS_GfdGetFrmTexVramState
NNS_GfdGetFrmTexVramState: ; 0x020AE918
stmdb sp!, {lr}
sub sp, sp, #0x4
mov lr, #0x0
ldr ip, _020AE960 ; =vramRegions_
mov r3, lr
mov r2, #0x1
_020AE930:
ldr r1, [r12, #0x0]
add lr, lr, #0x1
str r1, [r0, r3, lsl #0x2]
ldr r1, [r12, #0x4]
cmp lr, #0x5
str r1, [r0, r2, lsl #0x2]
add r12, r12, #0x18
add r3, r3, #0x2
add r2, r2, #0x2
blt _020AE930
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020AE960: .word vramRegions_
arm_func_end NNS_GfdGetFrmTexVramState
arm_func_start NNS_GfdFreeFrmTexVram
NNS_GfdFreeFrmTexVram: ; 0x020AE964
mov r0, #0x0
bx lr
arm_func_end NNS_GfdFreeFrmTexVram
arm_func_start NNS_GfdAllocFrmTexVram
NNS_GfdAllocFrmTexVram: ; 0x020AE96C
stmdb sp!, {r4-r10,lr}
cmp r0, #0x0
moveq r7, #0x10
addne r0, r0, #0xf
bicne r7, r0, #0xf
ldr r0, _020AEADC ; =0x0007FFF0
cmp r7, r0
movcs r0, #0x0
ldmcsia sp!, {r4-r10,pc}
cmp r1, #0x0
beq _020AEA5C
mov lr, r7, lsr #0x1
mov r6, #0x0
ldr r2, _020AEAE0 ; =vramRegions_ + 0x30
ldr r3, _020AEAE4 ; =vramRegions_ + 0x18
ldr ip, _020AEAE8 ; =tex4x4SearchArray_
mov r0, r6
_020AE9B0:
ldr r5, [r12, r6, lsl #0x2]
ldr r4, [r5, #0x8]
cmp r4, #0x0
beq _020AEA48
ldr r9, [r5, #0x4]
ldr r4, [r5, #0x0]
sub r4, r9, r4
cmp r4, r7
blo _020AEA48
ldrh r4, [r5, #0x10]
cmp r4, #0x0
beq _020AE9EC
cmp r4, #0x3
beq _020AE9F4
b _020AE9FC
_020AE9EC:
mov r4, r3
b _020AEA00
_020AE9F4:
mov r4, r2
b _020AEA00
_020AE9FC:
mov r4, r0
_020AEA00:
ldr r9, [r4, #0x8]
cmp r9, #0x0
beq _020AEA48
ldr r10, [r4, #0x4]
ldr r9, [r4, #0x0]
sub r9, r10, r9
cmp r9, lr
blo _020AEA48
ldr r3, [r5, #0x0]
mov r0, #0x1
add r2, r3, r7
str r2, [r5, #0x0]
ldr r2, [r4, #0x0]
add r2, r2, lr
str r2, [r4, #0x0]
ldr r2, [r5, #0x14]
add r8, r3, r2
b _020AEAB8
_020AEA48:
add r6, r6, #0x1
cmp r6, #0x2
blt _020AE9B0
mov r0, #0x0
b _020AEAB8
_020AEA5C:
ldr r3, _020AEAEC ; =texNrmSearchArray_
mov r5, #0x0
_020AEA64:
ldr r4, [r3, r5, lsl #0x2]
ldr r0, [r4, #0x8]
cmp r0, #0x0
beq _020AEAA8
ldr r2, [r4, #0x4]
ldr r0, [r4, #0x0]
sub r0, r2, r0
cmp r0, r7
blo _020AEAA8
ldr r2, [r4, #0x4]
mov r0, #0x1
sub r2, r2, r7
str r2, [r4, #0x4]
ldr r3, [r4, #0x4]
ldr r2, [r4, #0x14]
add r8, r3, r2
b _020AEAB8
_020AEAA8:
add r5, r5, #0x1
cmp r5, #0x5
blt _020AEA64
mov r0, #0x0
_020AEAB8:
cmp r0, #0x0
moveq r0, #0x0
ldmeqia sp!, {r4-r10,pc}
ldr r0, _020AEAF0 ; =0x0000FFFF
mov r2, r7, lsr #0x4
and r0, r0, r8, lsr #0x3
orr r0, r0, r2, lsl #0x10
orr r0, r0, r1, lsl #0x1f
ldmia sp!, {r4-r10,pc}
.balign 4
_020AEADC: .word 0x0007FFF0
_020AEAE0: .word vramRegions_ + 0x30
_020AEAE4: .word vramRegions_ + 0x18
_020AEAE8: .word tex4x4SearchArray_
_020AEAEC: .word texNrmSearchArray_
_020AEAF0: .word 0x0000FFFF
arm_func_end NNS_GfdAllocFrmTexVram
arm_func_start NNS_GfdResetFrmTexVramState
NNS_GfdResetFrmTexVramState: ; 0x020AEAF4
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr r0, _020AEB68 ; =frmExVramMan_
mov r6, #0x0
ldrh r7, [r0, #0x0]
ldr r5, _020AEB6C ; =vramRegions_
mov lr, r6
cmp r7, #0x1
addhi r7, r7, #0x1
mov r1, r6
mov r3, r6
mov r4, #0x1
mov r0, #0x20000
mov r2, #0x10000
_020AEB2C:
cmp r6, r7
strlt r4, [r5, #0x8]
strge lr, [r5, #0x8]
ldr r12, [r5, #0xc]
add r6, r6, #0x1
cmp r12, #0x0
strne r3, [r5, #0x0]
strne r2, [r5, #0x4]
streq r1, [r5, #0x0]
streq r0, [r5, #0x4]
cmp r6, #0x5
add r5, r5, #0x18
blt _020AEB2C
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020AEB68: .word frmExVramMan_
_020AEB6C: .word vramRegions_
arm_func_end NNS_GfdResetFrmTexVramState
arm_func_start NNS_GfdInitFrmTexVramManager
NNS_GfdInitFrmTexVramManager: ; 0x020AEB70
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r1
cmp r5, #0x2
bhi _020AEBA8
mov r12, #0x1
mov r0, #0x4
mov r1, #0x3
mov r2, #0x2
mov r3, #0x0
str r12, [sp, #0x0]
bl NNSi_GfdSetTexNrmSearchArray
b _020AEBC4
_020AEBA8:
mov r12, #0x1
mov r0, #0x4
mov r1, #0x3
mov r2, #0x0
mov r3, #0x2
str r12, [sp, #0x0]
bl NNSi_GfdSetTexNrmSearchArray
_020AEBC4:
ldr r0, _020AEBFC ; =frmExVramMan_
strh r5, [r0, #0x0]
bl NNS_GfdResetFrmTexVramState
cmp r4, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,pc}
ldr r3, _020AEC00 ; =NNS_GfdAllocFrmTexVram
ldr r1, _020AEC04 ; =NNS_GfdDefaultFuncAllocTexVram
ldr r2, _020AEC08 ; =NNS_GfdFreeFrmTexVram
ldr r0, _020AEC0C ; =NNS_GfdDefaultFuncFreeTexVram
str r3, [r1, #0x0]
str r2, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020AEBFC: .word frmExVramMan_
_020AEC00: .word NNS_GfdAllocFrmTexVram
_020AEC04: .word NNS_GfdDefaultFuncAllocTexVram
_020AEC08: .word NNS_GfdFreeFrmTexVram
_020AEC0C: .word NNS_GfdDefaultFuncFreeTexVram
arm_func_end NNS_GfdInitFrmTexVramManager
arm_func_start NNSi_GfdSetTexNrmSearchArray
NNSi_GfdSetTexNrmSearchArray: ; 0x020AEC10
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr lr, [sp, #0x18]
ldr r6, _020AEC58 ; =vramRegions_
mov r12, #0x18
mla r7, r0, r12, r6
ldr r0, _020AEC5C ; =texNrmSearchArray_
mla r5, r1, r12, r6
mla r4, r2, r12, r6
mla r2, r3, r12, r6
mla r1, lr, r12, r6
str r7, [r0, #0x0]
str r5, [r0, #0x4]
str r4, [r0, #0x8]
str r2, [r0, #0xc]
str r1, [r0, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020AEC58: .word vramRegions_
_020AEC5C: .word texNrmSearchArray_
arm_func_end NNSi_GfdSetTexNrmSearchArray

View File

@@ -0,0 +1,152 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
mgr_: ; 0x021CCD88
.space 0x14
.section .text
arm_func_start NNS_GfdResetLnkPlttVramState
NNS_GfdResetLnkPlttVramState: ; 0x020AFA30
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020AFA78 ; =mgr_
ldr r1, [r0, #0x10]
ldr r0, [r0, #0xc]
mov r1, r1, lsr #0x4
bl NNSi_GfdInitLnkVramBlockPool
ldr r1, _020AFA78 ; =mgr_
str r0, [r1, #0x4]
mov r0, r1
bl NNSi_GfdInitLnkVramMan
ldr r0, _020AFA78 ; =mgr_
ldr r1, _020AFA7C ; =mgr_ + 0x4
ldr r3, [r0, #0x8]
mov r2, #0x0
bl NNSi_GfdAddNewFreeBlock
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020AFA78: .word mgr_
_020AFA7C: .word mgr_ + 0x4
arm_func_end NNS_GfdResetLnkPlttVramState
arm_func_start NNS_GfdFreeLnkPlttVram
NNS_GfdFreeLnkPlttVram: ; 0x020AFA80
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r1, #0x10000
rsb r2, r1, #0x0
ldr r1, _020AFAC8 ; =0x0000FFFF
and r2, r0, r2
and r12, r0, r1
mov r3, r2, lsr #0x10
ldr r0, _020AFACC ; =mgr_
ldr r1, _020AFAD0 ; =mgr_ + 0x4
mov r2, r12, lsl #0x3
mov r3, r3, lsl #0x3
bl NNSi_GfdFreeLnkVram
cmp r0, #0x0
moveq r0, #0x1
movne r0, #0x0
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020AFAC8: .word 0x0000FFFF
_020AFACC: .word mgr_
_020AFAD0: .word mgr_ + 0x4
arm_func_end NNS_GfdFreeLnkPlttVram
arm_func_start NNS_GfdAllocLnkPlttVram
NNS_GfdAllocLnkPlttVram: ; 0x020AFAD4
stmdb sp!, {r4,lr}
sub sp, sp, #0x8
cmp r0, #0x0
moveq r4, #0x8
addne r0, r0, #0x7
bicne r4, r0, #0x7
ldr r0, _020AFB98 ; =0x0007FFF8
cmp r4, r0
addcs sp, sp, #0x8
movcs r0, #0x0
ldmcsia sp!, {r4,pc}
cmp r1, #0x0
beq _020AFB50
mov r12, #0x8
ldr r0, _020AFB9C ; =mgr_
ldr r1, _020AFBA0 ; =mgr_ + 0x4
add r2, sp, #0x4
mov r3, r4
str r12, [sp, #0x0]
bl NNSi_GfdAllocLnkVramAligned
ldr r2, [sp, #0x4]
add r1, r2, r4
cmp r1, #0x10000
bls _020AFB6C
ldr r0, _020AFB9C ; =mgr_
ldr r1, _020AFBA0 ; =mgr_ + 0x4
mov r3, r4
bl NNSi_GfdFreeLnkVram
add sp, sp, #0x8
mov r0, #0x0
ldmia sp!, {r4,pc}
_020AFB50:
ldr r0, _020AFB9C ; =mgr_
mov r12, #0x10
ldr r1, _020AFBA0 ; =mgr_ + 0x4
add r2, sp, #0x4
mov r3, r4
str r12, [sp, #0x0]
bl NNSi_GfdAllocLnkVramAligned
_020AFB6C:
cmp r0, #0x0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4,pc}
ldr r1, [sp, #0x4]
ldr r0, _020AFBA4 ; =0x0000FFFF
mov r2, r4, lsr #0x3
and r0, r0, r1, lsr #0x3
orr r0, r0, r2, lsl #0x10
add sp, sp, #0x8
ldmia sp!, {r4,pc}
.balign 4
_020AFB98: .word 0x0007FFF8
_020AFB9C: .word mgr_
_020AFBA0: .word mgr_ + 0x4
_020AFBA4: .word 0x0000FFFF
arm_func_end NNS_GfdAllocLnkPlttVram
arm_func_start NNS_GfdInitLnkPlttVramManager
NNS_GfdInitLnkPlttVramManager: ; 0x020AFBA8
stmdb sp!, {r4,lr}
ldr ip, _020AFBE8 ; =mgr_
mov r4, r3
str r0, [r12, #0x8]
str r1, [r12, #0xc]
str r2, [r12, #0x10]
bl NNS_GfdResetLnkPlttVramState
cmp r4, #0x0
ldmeqia sp!, {r4,pc}
ldr r3, _020AFBEC ; =NNS_GfdAllocLnkPlttVram
ldr r1, _020AFBF0 ; =NNS_GfdDefaultFuncAllocPlttVram
ldr r2, _020AFBF4 ; =NNS_GfdFreeLnkPlttVram
ldr r0, _020AFBF8 ; =NNS_GfdDefaultFuncFreePlttVram
str r3, [r1, #0x0]
str r2, [r0, #0x0]
ldmia sp!, {r4,pc}
.balign 4
_020AFBE8: .word mgr_
_020AFBEC: .word NNS_GfdAllocLnkPlttVram
_020AFBF0: .word NNS_GfdDefaultFuncAllocPlttVram
_020AFBF4: .word NNS_GfdFreeLnkPlttVram
_020AFBF8: .word NNS_GfdDefaultFuncFreePlttVram
arm_func_end NNS_GfdInitLnkPlttVramManager
arm_func_start NNS_GfdGetLnkPlttVramManagerWorkSize
NNS_GfdGetLnkPlttVramManagerWorkSize: ; 0x020AFBFC
mov r0, r0, lsl #0x4
bx lr
arm_func_end NNS_GfdGetLnkPlttVramManagerWorkSize

View File

@@ -0,0 +1,283 @@
.include "asm/macros.inc"
.include "global.inc"
.section .rodata
.global __LOCAL_LABEL__$7929
__LOCAL_LABEL__$7929: ; 0x020FF864
.byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.section .bss
mgr_: ; 0x021CCD6C
.space 0x1C
.section .text
arm_func_start NNS_GfdResetLnkTexVramState
NNS_GfdResetLnkTexVramState: ; 0x020AF6A4
stmdb sp!, {r4-r6,lr}
sub sp, sp, #0x30
ldr r6, _020AF884 ; =__LOCAL_LABEL__$7929
add r5, sp, #0x0
ldmia r6!, {r0-r3}
mov r12, r5
stmia r5!, {r0-r3}
ldmia r6!, {r0-r3}
stmia r5!, {r0-r3}
ldr r4, _020AF888 ; =mgr_
ldmia r6, {r0-r3}
stmia r5, {r0-r3}
ldr lr, [r4, #0x10]
ldr r1, [r4, #0xc]
add r0, lr, lr, lsr #0x1
mov r4, lr, lsr #0x1
sub r0, r1, r0
mov r3, #0x0
_020AF6EC:
cmp r3, #0x0
beq _020AF6FC
cmp r3, #0x2
bne _020AF734
_020AF6FC:
ldr r2, [r12, #0x0]
cmp r2, #0x0
beq _020AF734
cmp lr, #0x0
beq _020AF734
ldr r1, [r12, #0x8]
cmp r2, lr
movhi r2, lr
add r1, r1, r2
str r1, [r12, #0x8]
ldr r1, [r12, #0x0]
sub lr, lr, r2
sub r1, r1, r2
str r1, [r12, #0x0]
_020AF734:
add r3, r3, #0x1
cmp r3, #0x4
add r12, r12, #0xc
blo _020AF6EC
ldr r1, [sp, #0xc]
add r5, sp, #0x0
sub r1, r1, r4
str r1, [sp, #0xc]
mov r3, #0x0
_020AF758:
ldr r2, [r5, #0x0]
cmp r2, #0x0
beq _020AF790
cmp r0, #0x0
beq _020AF790
ldr r1, [r5, #0x4]
cmp r2, r0
movhi r2, r0
add r1, r1, r2
str r1, [r5, #0x4]
ldr r1, [r5, #0x0]
sub r0, r0, r2
sub r1, r1, r2
str r1, [r5, #0x0]
_020AF790:
add r3, r3, #0x1
cmp r3, #0x4
add r5, r5, #0xc
blo _020AF758
ldr r0, _020AF888 ; =mgr_
bl NNSi_GfdInitLnkVramMan
ldr r0, _020AF88C ; =mgr_ + 0x4
bl NNSi_GfdInitLnkVramMan
ldr r0, _020AF888 ; =mgr_
ldr r1, [r0, #0x18]
ldr r0, [r0, #0x14]
mov r1, r1, lsr #0x4
bl NNSi_GfdInitLnkVramBlockPool
ldr r3, [sp, #0x8]
ldr r1, _020AF888 ; =mgr_
cmp r3, #0x0
str r0, [r1, #0x8]
beq _020AF7E8
ldr r0, _020AF88C ; =mgr_ + 0x4
ldr r1, _020AF890 ; =mgr_ + 0x8
mov r2, #0x0
bl NNSi_GfdAddNewFreeBlock
_020AF7E8:
ldr r3, [sp, #0x4]
ldr r2, [sp, #0x8]
cmp r3, #0x0
beq _020AF804
ldr r0, _020AF888 ; =mgr_
ldr r1, _020AF890 ; =mgr_ + 0x8
bl NNSi_GfdAddNewFreeBlock
_020AF804:
ldr r3, [sp, #0x20]
cmp r3, #0x0
beq _020AF820
ldr r0, _020AF88C ; =mgr_ + 0x4
ldr r1, _020AF890 ; =mgr_ + 0x8
mov r2, #0x40000
bl NNSi_GfdAddNewFreeBlock
_020AF820:
ldr r3, [sp, #0x1c]
ldr r0, [sp, #0x20]
cmp r3, #0x0
add r2, r0, #0x40000
beq _020AF840
ldr r0, _020AF888 ; =mgr_
ldr r1, _020AF890 ; =mgr_ + 0x8
bl NNSi_GfdAddNewFreeBlock
_020AF840:
ldr r3, [sp, #0x28]
cmp r3, #0x0
beq _020AF85C
ldr r0, _020AF888 ; =mgr_
ldr r1, _020AF890 ; =mgr_ + 0x8
mov r2, #0x60000
bl NNSi_GfdAddNewFreeBlock
_020AF85C:
ldr r3, [sp, #0x10]
cmp r3, #0x0
addeq sp, sp, #0x30
ldmeqia sp!, {r4-r6,pc}
ldr r0, _020AF888 ; =mgr_
ldr r1, _020AF890 ; =mgr_ + 0x8
add r2, r4, #0x20000
bl NNSi_GfdAddNewFreeBlock
add sp, sp, #0x30
ldmia sp!, {r4-r6,pc}
.balign 4
_020AF884: .word __LOCAL_LABEL__$7929
_020AF888: .word mgr_
_020AF88C: .word mgr_ + 0x4
_020AF890: .word mgr_ + 0x8
arm_func_end NNS_GfdResetLnkTexVramState
arm_func_start NNS_GfdFreeLnkTexVram
NNS_GfdFreeLnkTexVram: ; 0x020AF894
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, _020AF908 ; =0x7FFF0000
ldr r1, _020AF90C ; =0x0000FFFF
and r2, r0, r2
and r3, r0, r1
mov r1, r2, lsr #0x10
and r0, r0, #0x80000000
mov r2, r3, lsl #0x3
movs r3, r1, lsl #0x4
mov r0, r0, lsr #0x1f
beq _020AF8FC
cmp r0, #0x0
beq _020AF8DC
ldr r0, _020AF910 ; =mgr_ + 0x4
ldr r1, _020AF914 ; =mgr_ + 0x8
bl NNSi_GfdFreeLnkVram
b _020AF8E8
_020AF8DC:
ldr r0, _020AF918 ; =mgr_
ldr r1, _020AF914 ; =mgr_ + 0x8
bl NNSi_GfdFreeLnkVram
_020AF8E8:
cmp r0, #0x0
movne r0, #0x0
add sp, sp, #0x4
moveq r0, #0x1
ldmia sp!, {pc}
_020AF8FC:
mov r0, #0x2
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020AF908: .word 0x7FFF0000
_020AF90C: .word 0x0000FFFF
_020AF910: .word mgr_ + 0x4
_020AF914: .word mgr_ + 0x8
_020AF918: .word mgr_
arm_func_end NNS_GfdFreeLnkTexVram
arm_func_start NNS_GfdAllocLnkTexVram
NNS_GfdAllocLnkTexVram: ; 0x020AF91C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
cmp r0, #0x0
moveq r5, #0x10
addne r0, r0, #0xf
bicne r5, r0, #0xf
ldr r0, _020AF9B0 ; =0x0007FFF0
mov r4, r1
cmp r5, r0
addcs sp, sp, #0x4
movcs r0, #0x0
ldmcsia sp!, {r4-r5,pc}
cmp r4, #0x0
beq _020AF96C
ldr r0, _020AF9B4 ; =mgr_ + 0x4
ldr r1, _020AF9B8 ; =mgr_ + 0x8
add r2, sp, #0x0
mov r3, r5
bl NNSi_GfdAllocLnkVram
b _020AF980
_020AF96C:
ldr r0, _020AF9BC ; =mgr_
ldr r1, _020AF9B8 ; =mgr_ + 0x8
add r2, sp, #0x0
mov r3, r5
bl NNSi_GfdAllocLnkVram
_020AF980:
cmp r0, #0x0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r5,pc}
ldr r1, [sp, #0x0]
ldr r0, _020AF9C0 ; =0x0000FFFF
mov r2, r5, lsr #0x4
and r0, r0, r1, lsr #0x3
orr r0, r0, r2, lsl #0x10
orr r0, r0, r4, lsl #0x1f
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020AF9B0: .word 0x0007FFF0
_020AF9B4: .word mgr_ + 0x4
_020AF9B8: .word mgr_ + 0x8
_020AF9BC: .word mgr_
_020AF9C0: .word 0x0000FFFF
arm_func_end NNS_GfdAllocLnkTexVram
arm_func_start NNS_GfdInitLnkTexVramManager
NNS_GfdInitLnkTexVramManager: ; 0x020AF9C4
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr ip, _020AFA14 ; =mgr_
str r0, [r12, #0xc]
str r1, [r12, #0x10]
str r2, [r12, #0x14]
str r3, [r12, #0x18]
bl NNS_GfdResetLnkTexVramState
ldr r0, [sp, #0x8]
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldr r3, _020AFA18 ; =NNS_GfdAllocLnkTexVram
ldr r1, _020AFA1C ; =NNS_GfdDefaultFuncAllocTexVram
ldr r2, _020AFA20 ; =NNS_GfdFreeLnkTexVram
ldr r0, _020AFA24 ; =NNS_GfdDefaultFuncFreeTexVram
str r3, [r1, #0x0]
str r2, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020AFA14: .word mgr_
_020AFA18: .word NNS_GfdAllocLnkTexVram
_020AFA1C: .word NNS_GfdDefaultFuncAllocTexVram
_020AFA20: .word NNS_GfdFreeLnkTexVram
_020AFA24: .word NNS_GfdDefaultFuncFreeTexVram
arm_func_end NNS_GfdInitLnkTexVramManager
arm_func_start NNS_GfdGetLnkTexVramManagerWorkSize
NNS_GfdGetLnkTexVramManagerWorkSize: ; 0x020AFA28
mov r0, r0, lsl #0x4
bx lr
arm_func_end NNS_GfdGetLnkTexVramManagerWorkSize

View File

@@ -0,0 +1,26 @@
.include "asm/macros.inc"
.include "global.inc"
.section .data
.global NNS_GfdDefaultFuncAllocPlttVram
NNS_GfdDefaultFuncAllocPlttVram: ; 0x021064C0
.word AllocPlttVram_
.global NNS_GfdDefaultFuncFreePlttVram
NNS_GfdDefaultFuncFreePlttVram: ; 0x021064C4
.word FreePlttVram_
.section .text
arm_func_start FreePlttVram_
FreePlttVram_: ; 0x020AE8BC
mvn r0, #0x0
bx lr
arm_func_end FreePlttVram_
arm_func_start AllocPlttVram_
AllocPlttVram_: ; 0x020AE8C4
mov r0, #0x0
bx lr
arm_func_end AllocPlttVram_

View File

@@ -0,0 +1,26 @@
.include "asm/macros.inc"
.include "global.inc"
.section .data
.global NNS_GfdDefaultFuncAllocTexVram
NNS_GfdDefaultFuncAllocTexVram: ; 0x021064B8
.word AllocTexVram_
.global NNS_GfdDefaultFuncFreeTexVram
NNS_GfdDefaultFuncFreeTexVram: ; 0x021064BC
.word FreeTexVram_
.section .text
arm_func_start FreeTexVram_
FreeTexVram_: ; 0x020AE8AC
mvn r0, #0x0
bx lr
arm_func_end FreeTexVram_
arm_func_start AllocTexVram_
AllocTexVram_: ; 0x020AE8B4
mov r0, #0x0
bx lr
arm_func_end AllocTexVram_

View File

@@ -0,0 +1,592 @@
.include "asm/macros.inc"
.include "global.inc"
.section .rodata
.global transFunc$7934
transFunc$7934: ; 0x020FF7D4
.word DoTransfer3dTex
.word DoTransfer3dTexPltt
.word DoTransfer3dClearImageColor
.word DoTransfer3dClearImageDepth
.word DoTransfer2dBG0CharMain
.word DoTransfer2dBG1CharMain
.word DoTransfer2dBG2CharMain
.word DoTransfer2dBG3CharMain
.word DoTransfer2dBG0ScrMain
.word DoTransfer2dBG1ScrMain
.word DoTransfer2dBG2ScrMain
.word DoTransfer2dBG3ScrMain
.word DoTransfer2dBG2BmpMain
.word DoTransfer2dBG3BmpMain
.word DoTransfer2dObjPlttMain
.word DoTransfer2dBGPlttMain
.word DoTransfer2dObjExtPlttMain
.word DoTransfer2dBGExtPlttMain
.word DoTransfer2dObjOamMain
.word DoTransfer2dObjCharMain
.word DoTransfer2dBG0CharSub
.word DoTransfer2dBG1CharSub
.word DoTransfer2dBG2CharSub
.word DoTransfer2dBG3CharSub
.word DoTransfer2dBG0ScrSub
.word DoTransfer2dBG1ScrSub
.word DoTransfer2dBG2ScrSub
.word DoTransfer2dBG3ScrSub
.word DoTransfer2dBG2BmpSub
.word DoTransfer2dBG3BmpSub
.word DoTransfer2dObjPlttSub
.word DoTransfer2dBGPlttSub
.word DoTransfer2dObjExtPlttSub
.word DoTransfer2dBGExtPlttSub
.word DoTransfer2dObjOamSub
.word DoTransfer2dObjCharSub
; const initializer
.section .bss
.global s_VramTransferManager
s_VramTransferManager: ; 0x021CCD58
.space 0x14
.section .text
arm_func_start NNS_GfdRegisterNewVramTransferTask
NNS_GfdRegisterNewVramTransferTask: ; 0x020AEE40
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
ldr r5, _020AEEB4 ; =s_VramTransferManager
mov r9, r0
mov r0, r5
mov r8, r1
mov r7, r2
mov r6, r3
bl IsVramTransferTaskQueueFull_
cmp r0, #0x0
addne sp, sp, #0x4
movne r0, #0x0
ldmneia sp!, {r4-r9,pc}
mov r0, r5
bl NNSi_GfdGetEndVramTransferTaskQueue
mov r4, r0
str r9, [r4, #0x0]
str r7, [r4, #0x4]
str r8, [r4, #0x8]
mov r0, r5
str r6, [r4, #0xc]
bl NNSi_GfdPushVramTransferTaskQueue
ldr r2, [r5, #0x10]
ldr r1, [r4, #0xc]
mov r0, #0x1
add r1, r2, r1
str r1, [r5, #0x10]
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
.balign 4
_020AEEB4: .word s_VramTransferManager
arm_func_end NNS_GfdRegisterNewVramTransferTask
arm_func_start NNS_GfdDoVramTransfer
NNS_GfdDoVramTransfer: ; 0x020AEEB8
stmdb sp!, {r4-r6,lr}
ldr r6, _020AEF18 ; =s_VramTransferManager
mov r0, r6
bl NNSi_GfdGetFrontVramTransferTaskQueue
mov r5, r0
mov r0, r6
bl NNSi_GfdPopVramTransferTaskQueue
cmp r0, #0x0
ldmeqia sp!, {r4-r6,pc}
add r4, r6, #0x10
_020AEEE0:
mov r0, r5
bl DoTransfer_
ldr r2, [r4, #0x0]
ldr r1, [r5, #0xc]
mov r0, r6
sub r1, r2, r1
str r1, [r4, #0x0]
bl NNSi_GfdGetFrontVramTransferTaskQueue
mov r5, r0
mov r0, r6
bl NNSi_GfdPopVramTransferTaskQueue
cmp r0, #0x0
bne _020AEEE0
ldmia sp!, {r4-r6,pc}
.balign 4
_020AEF18: .word s_VramTransferManager
arm_func_end NNS_GfdDoVramTransfer
arm_func_start NNS_GfdInitVramTransferManager
NNS_GfdInitVramTransferManager: ; 0x020AEF1C
ldr r2, _020AEF34 ; =s_VramTransferManager
ldr ip, _020AEF38 ; =ResetTaskQueue_
str r0, [r2, #0x0]
mov r0, r2
str r1, [r2, #0x4]
bx r12
.balign 4
_020AEF34: .word s_VramTransferManager
_020AEF38: .word ResetTaskQueue_
arm_func_end NNS_GfdInitVramTransferManager
arm_func_start NNSi_GfdPopVramTransferTaskQueue
NNSi_GfdPopVramTransferTaskQueue: ; 0x020AEF3C
stmdb sp!, {r4,lr}
mov r4, r0
bl IsVramTransferTaskQueueEmpty_
cmp r0, #0x0
movne r0, #0x0
ldmneia sp!, {r4,pc}
ldrh r1, [r4, #0x8]
mov r0, r4
bl GetNextIndex_
strh r0, [r4, #0x8]
ldrh r1, [r4, #0xc]
mov r0, #0x1
sub r1, r1, #0x1
strh r1, [r4, #0xc]
ldmia sp!, {r4,pc}
arm_func_end NNSi_GfdPopVramTransferTaskQueue
arm_func_start NNSi_GfdGetEndVramTransferTaskQueue
NNSi_GfdGetEndVramTransferTaskQueue: ; 0x020AEF78
ldrh r1, [r0, #0xa]
ldr r0, [r0, #0x0]
add r0, r0, r1, lsl #0x4
bx lr
arm_func_end NNSi_GfdGetEndVramTransferTaskQueue
arm_func_start NNSi_GfdGetFrontVramTransferTaskQueue
NNSi_GfdGetFrontVramTransferTaskQueue: ; 0x020AEF88
ldrh r1, [r0, #0x8]
ldr r0, [r0, #0x0]
add r0, r0, r1, lsl #0x4
bx lr
arm_func_end NNSi_GfdGetFrontVramTransferTaskQueue
arm_func_start NNSi_GfdPushVramTransferTaskQueue
NNSi_GfdPushVramTransferTaskQueue: ; 0x020AEF98
stmdb sp!, {r4,lr}
mov r4, r0
bl IsVramTransferTaskQueueFull_
cmp r0, #0x0
movne r0, #0x0
ldmneia sp!, {r4,pc}
ldrh r1, [r4, #0xa]
mov r0, r4
bl GetNextIndex_
strh r0, [r4, #0xa]
ldrh r1, [r4, #0xc]
mov r0, #0x1
add r1, r1, #0x1
strh r1, [r4, #0xc]
ldmia sp!, {r4,pc}
arm_func_end NNSi_GfdPushVramTransferTaskQueue
arm_func_start ResetTaskQueue_
ResetTaskQueue_: ; 0x020AEFD4
mov r2, #0x0
strh r2, [r0, #0xa]
ldrh r1, [r0, #0xa]
strh r1, [r0, #0x8]
strh r2, [r0, #0xc]
str r2, [r0, #0x10]
bx lr
arm_func_end ResetTaskQueue_
arm_func_start DoTransfer_
DoTransfer_: ; 0x020AEFF0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
ldr r3, [r5, #0x0]
ldr r2, _020AF02C ; =transFunc$7934
ldr r0, [r5, #0x4]
ldr r1, [r5, #0xc]
ldr r4, [r2, r3, lsl #0x2]
bl DC_FlushRange
ldr r0, [r5, #0x4]
ldr r1, [r5, #0x8]
ldr r2, [r5, #0xc]
blx r4
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020AF02C: .word transFunc$7934
arm_func_end DoTransfer_
DoTransfer2dObjCharSub:
ldr ip, _020AF038 ; =GXS_LoadOBJ
bx r12
.balign 4
_020AF038: .word GXS_LoadOBJ
arm_func_end DoTransfer2dObjCharSub
arm_func_start DoTransfer2dObjOamSub
DoTransfer2dObjOamSub: ; 0x020AF03C
ldr ip, _020AF044 ; =GXS_LoadOAM
bx r12
.balign 4
_020AF044: .word GXS_LoadOAM
arm_func_end DoTransfer2dObjOamSub
arm_func_start DoTransfer2dBGExtPlttSub
DoTransfer2dBGExtPlttSub: ; 0x020AF048
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
mov r4, r2
bl GXS_BeginLoadBGExtPltt
mov r0, r6
mov r1, r5
mov r2, r4
bl GXS_LoadBGExtPltt
bl GXS_EndLoadBGExtPltt
ldmia sp!, {r4-r6,pc}
arm_func_end DoTransfer2dBGExtPlttSub
arm_func_start DoTransfer2dObjExtPlttSub
DoTransfer2dObjExtPlttSub: ; 0x020AF074
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
mov r4, r2
bl GXS_BeginLoadOBJExtPltt
mov r0, r6
mov r1, r5
mov r2, r4
bl GXS_LoadOBJExtPltt
bl GXS_EndLoadOBJExtPltt
ldmia sp!, {r4-r6,pc}
arm_func_end DoTransfer2dObjExtPlttSub
arm_func_start DoTransfer2dBGPlttSub
DoTransfer2dBGPlttSub: ; 0x020AF0A0
ldr ip, _020AF0A8 ; =GXS_LoadBGPltt
bx r12
.balign 4
_020AF0A8: .word GXS_LoadBGPltt
arm_func_end DoTransfer2dBGPlttSub
arm_func_start DoTransfer2dObjPlttSub
DoTransfer2dObjPlttSub: ; 0x020AF0AC
ldr ip, _020AF0B4 ; =GXS_LoadOBJPltt
bx r12
.balign 4
_020AF0B4: .word GXS_LoadOBJPltt
arm_func_end DoTransfer2dObjPlttSub
arm_func_start DoTransfer2dBG3BmpSub
DoTransfer2dBG3BmpSub: ; 0x020AF0B8
ldr ip, _020AF0C0 ; =GXS_LoadBG3Scr
bx r12
.balign 4
_020AF0C0: .word GXS_LoadBG3Scr
arm_func_end DoTransfer2dBG3BmpSub
arm_func_start DoTransfer2dBG2BmpSub
DoTransfer2dBG2BmpSub: ; 0x020AF0C4
ldr ip, _020AF0CC ; =GXS_LoadBG2Scr
bx r12
.balign 4
_020AF0CC: .word GXS_LoadBG2Scr
arm_func_end DoTransfer2dBG2BmpSub
arm_func_start DoTransfer2dBG3ScrSub
DoTransfer2dBG3ScrSub: ; 0x020AF0D0
ldr ip, _020AF0D8 ; =GXS_LoadBG3Scr
bx r12
.balign 4
_020AF0D8: .word GXS_LoadBG3Scr
arm_func_end DoTransfer2dBG3ScrSub
arm_func_start DoTransfer2dBG2ScrSub
DoTransfer2dBG2ScrSub: ; 0x020AF0DC
ldr ip, _020AF0E4 ; =GXS_LoadBG2Scr
bx r12
.balign 4
_020AF0E4: .word GXS_LoadBG2Scr
arm_func_end DoTransfer2dBG2ScrSub
arm_func_start DoTransfer2dBG1ScrSub
DoTransfer2dBG1ScrSub: ; 0x020AF0E8
ldr ip, _020AF0F0 ; =GXS_LoadBG1Scr
bx r12
.balign 4
_020AF0F0: .word GXS_LoadBG1Scr
arm_func_end DoTransfer2dBG1ScrSub
arm_func_start DoTransfer2dBG0ScrSub
DoTransfer2dBG0ScrSub: ; 0x020AF0F4
ldr ip, _020AF0FC ; =GXS_LoadBG0Scr
bx r12
.balign 4
_020AF0FC: .word GXS_LoadBG0Scr
arm_func_end DoTransfer2dBG0ScrSub
arm_func_start DoTransfer2dBG3CharSub
DoTransfer2dBG3CharSub: ; 0x020AF100
ldr ip, _020AF108 ; =GXS_LoadBG3Char
bx r12
.balign 4
_020AF108: .word GXS_LoadBG3Char
arm_func_end DoTransfer2dBG3CharSub
arm_func_start DoTransfer2dBG2CharSub
DoTransfer2dBG2CharSub: ; 0x020AF10C
ldr ip, _020AF114 ; =GXS_LoadBG2Char
bx r12
.balign 4
_020AF114: .word GXS_LoadBG2Char
arm_func_end DoTransfer2dBG2CharSub
arm_func_start DoTransfer2dBG1CharSub
DoTransfer2dBG1CharSub: ; 0x020AF118
ldr ip, _020AF120 ; =GXS_LoadBG1Char
bx r12
.balign 4
_020AF120: .word GXS_LoadBG1Char
arm_func_end DoTransfer2dBG1CharSub
arm_func_start DoTransfer2dBG0CharSub
DoTransfer2dBG0CharSub: ; 0x020AF124
ldr ip, _020AF12C ; =GXS_LoadBG0Char
bx r12
.balign 4
_020AF12C: .word GXS_LoadBG0Char
arm_func_end DoTransfer2dBG0CharSub
arm_func_start DoTransfer2dObjCharMain
DoTransfer2dObjCharMain: ; 0x020AF130
ldr ip, _020AF138 ; =GX_LoadOBJ
bx r12
.balign 4
_020AF138: .word GX_LoadOBJ
arm_func_end DoTransfer2dObjCharMain
arm_func_start DoTransfer2dObjOamMain
DoTransfer2dObjOamMain: ; 0x020AF13C
ldr ip, _020AF144 ; =GX_LoadOAM
bx r12
.balign 4
_020AF144: .word GX_LoadOAM
arm_func_end DoTransfer2dObjOamMain
arm_func_start DoTransfer2dBGExtPlttMain
DoTransfer2dBGExtPlttMain: ; 0x020AF148
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
mov r4, r2
bl GX_BeginLoadBGExtPltt
mov r0, r6
mov r1, r5
mov r2, r4
bl GX_LoadBGExtPltt
bl GX_EndLoadBGExtPltt
ldmia sp!, {r4-r6,pc}
arm_func_end DoTransfer2dBGExtPlttMain
arm_func_start DoTransfer2dObjExtPlttMain
DoTransfer2dObjExtPlttMain: ; 0x020AF174
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
mov r4, r2
bl GX_BeginLoadOBJExtPltt
mov r0, r6
mov r1, r5
mov r2, r4
bl GX_LoadOBJExtPltt
bl GX_EndLoadOBJExtPltt
ldmia sp!, {r4-r6,pc}
arm_func_end DoTransfer2dObjExtPlttMain
arm_func_start DoTransfer2dBGPlttMain
DoTransfer2dBGPlttMain: ; 0x020AF1A0
ldr ip, _020AF1A8 ; =GX_LoadBGPltt
bx r12
.balign 4
_020AF1A8: .word GX_LoadBGPltt
arm_func_end DoTransfer2dBGPlttMain
arm_func_start DoTransfer2dObjPlttMain
DoTransfer2dObjPlttMain: ; 0x020AF1AC
ldr ip, _020AF1B4 ; =GX_LoadOBJPltt
bx r12
.balign 4
_020AF1B4: .word GX_LoadOBJPltt
arm_func_end DoTransfer2dObjPlttMain
arm_func_start DoTransfer2dBG3BmpMain
DoTransfer2dBG3BmpMain: ; 0x020AF1B8
ldr ip, _020AF1C0 ; =GX_LoadBG3Scr
bx r12
.balign 4
_020AF1C0: .word GX_LoadBG3Scr
arm_func_end DoTransfer2dBG3BmpMain
arm_func_start DoTransfer2dBG2BmpMain
DoTransfer2dBG2BmpMain: ; 0x020AF1C4
ldr ip, _020AF1CC ; =GX_LoadBG2Scr
bx r12
.balign 4
_020AF1CC: .word GX_LoadBG2Scr
arm_func_end DoTransfer2dBG2BmpMain
arm_func_start DoTransfer2dBG3ScrMain
DoTransfer2dBG3ScrMain: ; 0x020AF1D0
ldr ip, _020AF1D8 ; =GX_LoadBG3Scr
bx r12
.balign 4
_020AF1D8: .word GX_LoadBG3Scr
arm_func_end DoTransfer2dBG3ScrMain
arm_func_start DoTransfer2dBG2ScrMain
DoTransfer2dBG2ScrMain: ; 0x020AF1DC
ldr ip, _020AF1E4 ; =GX_LoadBG2Scr
bx r12
.balign 4
_020AF1E4: .word GX_LoadBG2Scr
arm_func_end DoTransfer2dBG2ScrMain
arm_func_start DoTransfer2dBG1ScrMain
DoTransfer2dBG1ScrMain: ; 0x020AF1E8
ldr ip, _020AF1F0 ; =GX_LoadBG1Scr
bx r12
.balign 4
_020AF1F0: .word GX_LoadBG1Scr
arm_func_end DoTransfer2dBG1ScrMain
arm_func_start DoTransfer2dBG0ScrMain
DoTransfer2dBG0ScrMain: ; 0x020AF1F4
ldr ip, _020AF1FC ; =GX_LoadBG0Scr
bx r12
.balign 4
_020AF1FC: .word GX_LoadBG0Scr
arm_func_end DoTransfer2dBG0ScrMain
arm_func_start DoTransfer2dBG3CharMain
DoTransfer2dBG3CharMain: ; 0x020AF200
ldr ip, _020AF208 ; =GX_LoadBG3Char
bx r12
.balign 4
_020AF208: .word GX_LoadBG3Char
arm_func_end DoTransfer2dBG3CharMain
arm_func_start DoTransfer2dBG2CharMain
DoTransfer2dBG2CharMain: ; 0x020AF20C
ldr ip, _020AF214 ; =GX_LoadBG2Char
bx r12
.balign 4
_020AF214: .word GX_LoadBG2Char
arm_func_end DoTransfer2dBG2CharMain
arm_func_start DoTransfer2dBG1CharMain
DoTransfer2dBG1CharMain: ; 0x020AF218
ldr ip, _020AF220 ; =GX_LoadBG1Char
bx r12
.balign 4
_020AF220: .word GX_LoadBG1Char
arm_func_end DoTransfer2dBG1CharMain
arm_func_start DoTransfer2dBG0CharMain
DoTransfer2dBG0CharMain: ; 0x020AF224
ldr ip, _020AF22C ; =GX_LoadBG0Char
bx r12
.balign 4
_020AF22C: .word GX_LoadBG0Char
arm_func_end DoTransfer2dBG0CharMain
arm_func_start DoTransfer3dClearImageDepth
DoTransfer3dClearImageDepth: ; 0x020AF230
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r2
bl GX_BeginLoadClearImage
mov r0, r5
mov r1, r4
bl GX_LoadClearImageDepth
bl GX_EndLoadClearImage
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end DoTransfer3dClearImageDepth
arm_func_start DoTransfer3dClearImageColor
DoTransfer3dClearImageColor: ; 0x020AF25C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r2
bl GX_BeginLoadClearImage
mov r0, r5
mov r1, r4
bl GX_LoadClearImageColor
bl GX_EndLoadClearImage
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_end DoTransfer3dClearImageColor
arm_func_start DoTransfer3dTexPltt
DoTransfer3dTexPltt: ; 0x020AF288
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
mov r4, r2
bl GX_BeginLoadTexPltt
mov r0, r6
mov r1, r5
mov r2, r4
bl GX_LoadTexPltt
bl GX_EndLoadTexPltt
ldmia sp!, {r4-r6,pc}
arm_func_end DoTransfer3dTexPltt
arm_func_start DoTransfer3dTex
DoTransfer3dTex: ; 0x020AF2B4
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
mov r4, r2
bl GX_BeginLoadTex
mov r0, r6
mov r1, r5
mov r2, r4
bl GX_LoadTex
bl GX_EndLoadTex
ldmia sp!, {r4-r6,pc}
arm_func_end DoTransfer3dTex
arm_func_start IsVramTransferTaskQueueEmpty_
IsVramTransferTaskQueueEmpty_: ; 0x020AF2E0
ldrh r0, [r0, #0xc]
cmp r0, #0x0
moveq r0, #0x1
movne r0, #0x0
bx lr
arm_func_end IsVramTransferTaskQueueEmpty_
arm_func_start IsVramTransferTaskQueueFull_
IsVramTransferTaskQueueFull_: ; 0x020AF2F4
ldrh r1, [r0, #0xc]
ldr r0, [r0, #0x4]
cmp r1, r0
moveq r0, #0x1
movne r0, #0x0
bx lr
arm_func_end IsVramTransferTaskQueueFull_
arm_func_start GetNextIndex_
GetNextIndex_: ; 0x020AF30C
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r2, r0
add r0, r1, #0x1
ldr r1, [r2, #0x4]
bl _u32_div_f
mov r0, r1, lsl #0x10
mov r0, r0, lsr #0x10
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end GetNextIndex_

View File

@@ -0,0 +1,261 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_GfdFreeLnkVram
NNSi_GfdFreeLnkVram: ; 0x020AF334
stmdb sp!, {r4-r6,lr}
sub sp, sp, #0x10
add r3, r2, r3
str r2, [sp, #0x0]
str r2, [sp, #0x8]
str r3, [sp, #0x4]
str r3, [sp, #0xc]
ldr r3, [r0, #0x0]
add r12, sp, #0x0
cmp r3, #0x0
beq _020AF418
mov r6, #0x0
_020AF364:
ldr r5, [r3, #0x0]
ldr r4, [r12, #0x4]
ldr r2, [r3, #0xc]
cmp r5, r4
bne _020AF3B8
ldr r4, [r3, #0x4]
add r4, r5, r4
str r4, [sp, #0xc]
ldr r4, [r3, #0x8]
cmp r4, #0x0
strne r2, [r4, #0xc]
streq r2, [r0, #0x0]
cmp r2, #0x0
strne r4, [r2, #0x8]
ldr r4, [r1, #0x0]
cmp r4, #0x0
strne r3, [r4, #0x8]
ldr r4, [r1, #0x0]
str r4, [r3, #0xc]
str r6, [r3, #0x8]
str r3, [r1, #0x0]
_020AF3B8:
ldr r5, [r3, #0x0]
ldr lr, [r3, #0x4]
ldr r4, [r12, #0x0]
add lr, r5, lr
cmp r4, lr
bne _020AF40C
str r5, [sp, #0x8]
ldr r5, [r3, #0x8]
ldr r4, [r3, #0xc]
cmp r5, #0x0
strne r4, [r5, #0xc]
streq r4, [r0, #0x0]
cmp r4, #0x0
strne r5, [r4, #0x8]
ldr lr, [r1, #0x0]
cmp lr, #0x0
strne r3, [lr, #0x8]
ldr lr, [r1, #0x0]
str lr, [r3, #0xc]
str r6, [r3, #0x8]
str r3, [r1, #0x0]
_020AF40C:
mov r3, r2
cmp r2, #0x0
bne _020AF364
_020AF418:
ldr r4, [r1, #0x0]
cmp r4, #0x0
ldrne r2, [r4, #0xc]
strne r2, [r1, #0x0]
cmp r4, #0x0
addeq sp, sp, #0x10
moveq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
ldr r2, [sp, #0x8]
mov r1, #0x0
str r2, [r4, #0x0]
ldr r3, [sp, #0xc]
ldr r2, [sp, #0x8]
sub r2, r3, r2
str r2, [r4, #0x4]
str r1, [r4, #0x8]
str r1, [r4, #0xc]
ldr r1, [r0, #0x0]
cmp r1, #0x0
strne r4, [r1, #0x8]
ldr r2, [r0, #0x0]
mov r1, #0x0
str r2, [r4, #0xc]
str r1, [r4, #0x8]
str r4, [r0, #0x0]
mov r0, #0x1
add sp, sp, #0x10
ldmia sp!, {r4-r6,pc}
arm_func_end NNSi_GfdFreeLnkVram
arm_func_start NNSi_GfdAllocLnkVramAligned
NNSi_GfdAllocLnkVramAligned: ; 0x020AF488
stmdb sp!, {r4-r10,lr}
ldr r4, [r0, #0x0]
ldr r9, [sp, #0x20]
cmp r4, #0x0
mov r5, #0x0
beq _020AF4EC
sub r12, r9, #0x1
mvn lr, r12
_020AF4A8:
cmp r9, #0x1
ldrls r8, [r4, #0x0]
movls r6, r5
movls r7, r3
bls _020AF4D0
ldr r7, [r4, #0x0]
add r6, r7, r12
and r8, lr, r6
sub r6, r8, r7
add r7, r3, r6
_020AF4D0:
ldr r10, [r4, #0x4]
cmp r10, r7
movcs r5, r4
bhs _020AF4EC
ldr r4, [r4, #0xc]
cmp r4, #0x0
bne _020AF4A8
_020AF4EC:
cmp r5, #0x0
beq _020AF5B8
cmp r6, #0x0
beq _020AF54C
ldr r9, [r1, #0x0]
cmp r9, #0x0
ldrne r3, [r9, #0xc]
strne r3, [r1, #0x0]
cmp r9, #0x0
beq _020AF5B8
ldr r4, [r5, #0x0]
mov r3, #0x0
str r4, [r9, #0x0]
str r6, [r9, #0x4]
str r3, [r9, #0x8]
str r3, [r9, #0xc]
ldr r3, [r0, #0x0]
cmp r3, #0x0
strne r9, [r3, #0x8]
ldr r4, [r0, #0x0]
mov r3, #0x0
str r4, [r9, #0xc]
str r3, [r9, #0x8]
str r9, [r0, #0x0]
_020AF54C:
ldr r3, [r5, #0x4]
sub r3, r3, r7
str r3, [r5, #0x4]
ldr r3, [r5, #0x0]
add r3, r3, r7
str r3, [r5, #0x0]
ldr r3, [r5, #0x4]
cmp r3, #0x0
bne _020AF5AC
ldr r4, [r5, #0x8]
ldr r3, [r5, #0xc]
cmp r4, #0x0
strne r3, [r4, #0xc]
streq r3, [r0, #0x0]
cmp r3, #0x0
strne r4, [r3, #0x8]
ldr r0, [r1, #0x0]
cmp r0, #0x0
strne r5, [r0, #0x8]
ldr r3, [r1, #0x0]
mov r0, #0x0
str r3, [r5, #0xc]
str r0, [r5, #0x8]
str r5, [r1, #0x0]
_020AF5AC:
str r8, [r2, #0x0]
mov r0, #0x1
ldmia sp!, {r4-r10,pc}
_020AF5B8:
mov r0, #0x0
str r0, [r2, #0x0]
ldmia sp!, {r4-r10,pc}
arm_func_end NNSi_GfdAllocLnkVramAligned
arm_func_start NNSi_GfdAllocLnkVram
NNSi_GfdAllocLnkVram: ; 0x020AF5C4
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r12, #0x0
str r12, [sp, #0x0]
bl NNSi_GfdAllocLnkVramAligned
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNSi_GfdAllocLnkVram
arm_func_start NNSi_GfdAddNewFreeBlock
NNSi_GfdAddNewFreeBlock: ; 0x020AF5E0
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr lr, [r1, #0x0]
cmp lr, #0x0
ldrne r12, [lr, #0xc]
strne r12, [r1, #0x0]
cmp lr, #0x0
beq _020AF640
str r2, [lr, #0x0]
str r3, [lr, #0x4]
mov r1, #0x0
str r1, [lr, #0x8]
str r1, [lr, #0xc]
ldr r1, [r0, #0x0]
add sp, sp, #0x4
cmp r1, #0x0
strne lr, [r1, #0x8]
ldr r2, [r0, #0x0]
mov r1, #0x0
str r2, [lr, #0xc]
str r1, [lr, #0x8]
str lr, [r0, #0x0]
mov r0, #0x1
ldmia sp!, {pc}
_020AF640:
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_end NNSi_GfdAddNewFreeBlock
arm_func_start NNSi_GfdInitLnkVramBlockPool
NNSi_GfdInitLnkVramBlockPool: ; 0x020AF64C
stmdb sp!, {r4,lr}
subs lr, r1, #0x1
mov r2, #0x0
beq _020AF684
mov r4, r0
_020AF660:
add r12, r2, #0x1
add r2, r0, r2, lsl #0x4
add r3, r0, r12, lsl #0x4
str r3, [r2, #0xc]
str r4, [r3, #0x8]
mov r2, r12
cmp r12, lr
add r4, r4, #0x10
blo _020AF660
_020AF684:
mov r2, #0x0
str r2, [r0, #0x8]
add r1, r0, r1, lsl #0x4
str r2, [r1, #-0x4]
ldmia sp!, {r4,pc}
arm_func_end NNSi_GfdInitLnkVramBlockPool
arm_func_start NNSi_GfdInitLnkVramMan
NNSi_GfdInitLnkVramMan: ; 0x020AF698
mov r1, #0x0
str r1, [r0, #0x0]
bx lr
arm_func_end NNSi_GfdInitLnkVramMan

680
arm9/asm/NNS_SND_capture.s Normal file
View File

@@ -0,0 +1,680 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global sIsThreadCreated
sIsThreadCreated: ; 0x021D27A4
.space 0x4
.global sCurEffectInfo
sCurEffectInfo: ; 0x021D27A8
.space 0x4
.global sMesgQ
sMesgQ: ; 0x021D27AC
.space 0x20
.global sCapParam
sCapParam: ; 0x021D27CC
.space 0x54
.global sEffectInfoBuffer
sEffectInfoBuffer: ; 0x021D2820
.space 0xa0
.section .text
local_arm_func_start AlarmCallback
AlarmCallback: ; 0x020C177C
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
ldr r4, [r7, #0x18]
ldr r0, [r7, #0x1c]
ldr r1, _020C186C ; =sIsThreadCreated
mul r0, r4, r0
ldr r3, [r7, #0xc]
ldr r2, [r7, #0x10]
ldr r1, [r1, #0x0]
add r6, r3, r0
cmp r1, #0x0
add r5, r2, r0
beq _020C180C
ldr r2, _020C1870 ; =sCurEffectInfo
mov r1, #0x14
ldr r2, [r2, #0x0]
ldr r3, _020C1874 ; =sEffectInfoBuffer
mul r1, r2, r1
str r7, [r3, r1]
add r1, r3, r1
str r4, [r1, #0x4]
str r0, [r1, #0x8]
str r6, [r1, #0xc]
ldr r0, _020C1878 ; =sMesgQ
mov r2, #0x0
str r5, [r1, #0x10]
bl OS_SendMessage
ldr r0, _020C1870 ; =sCurEffectInfo
ldr r1, [r0, #0x0]
add r1, r1, #0x1
str r1, [r0, #0x0]
cmp r1, #0x8
movge r1, #0x0
strge r1, [r0, #0x0]
b _020C1844
_020C180C:
mov r0, r6
mov r1, r4
bl DC_InvalidateRange
mov r0, r5
mov r1, r4
bl DC_InvalidateRange
ldr r1, [r7, #0x38]
mov r0, r6
str r1, [sp, #0x0]
ldr r3, [r7, #0x8]
ldr r6, [r7, #0x34]
mov r1, r5
mov r2, r4
blx r6
_020C1844:
ldr r0, [r7, #0x1c]
add r0, r0, #0x1
str r0, [r7, #0x1c]
ldr r1, [r7, #0x1c]
ldr r0, [r7, #0x30]
cmp r1, r0
movge r0, #0x0
strge r0, [r7, #0x1c]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020C186C: .word sIsThreadCreated
_020C1870: .word sCurEffectInfo
_020C1874: .word sEffectInfoBuffer
_020C1878: .word sMesgQ
arm_func_start NNSi_SndCaptureEndSleep
NNSi_SndCaptureEndSleep: ; 0x020C187C
stmdb sp!, {r4,lr}
ldr r4, _020C18F4 ; =sCapParam
ldr r0, [r4, #0x0]
cmp r0, #0x0
ldmeqia sp!, {r4,pc}
mov r0, #0x0
str r0, [r4, #0x1c]
ldr r1, [r4, #0xc]
ldr r2, [r4, #0x14]
bl MIi_CpuClear32
ldr r1, [r4, #0x10]
ldr r2, [r4, #0x14]
mov r0, #0x0
bl MIi_CpuClear32
ldr r0, [r4, #0xc]
ldr r1, [r4, #0x14]
bl DC_FlushRange
ldr r0, [r4, #0x10]
ldr r1, [r4, #0x14]
bl DC_FlushRange
ldr r1, [r4, #0x2c]
mov r3, #0x0
cmp r1, #0x0
movge r0, #0x1
movge r2, r0, lsl r1
ldr r0, [r4, #0x24]
ldr r1, [r4, #0x28]
movlt r2, #0x0
bl SND_StartTimer
ldmia sp!, {r4,pc}
.balign 4
_020C18F4: .word sCapParam
arm_func_start NNSi_SndCaptureBeginSleep
NNSi_SndCaptureBeginSleep: ; 0x020C18F8
stmdb sp!, {r4,lr}
ldr r3, _020C194C ; =sCapParam
ldr r0, [r3, #0x0]
cmp r0, #0x0
ldmeqia sp!, {r4,pc}
ldr r1, [r3, #0x2c]
cmp r1, #0x0
movge r0, #0x1
movge r2, r0, lsl r1
ldr r0, [r3, #0x24]
ldr r1, [r3, #0x28]
movlt r2, #0x0
mov r3, #0x0
bl SND_StopTimer
bl SND_GetCurrentCommandTag
mov r4, r0
mov r0, #0x1
bl SND_FlushCommand
mov r0, r4
bl SND_WaitForCommandProc
ldmia sp!, {r4,pc}
.balign 4
_020C194C: .word sCapParam
arm_func_start NNSi_SndCaptureStop
NNSi_SndCaptureStop: ; 0x020C1950
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr r4, _020C1A3C ; =sCapParam
ldr r0, [r4, #0x0]
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,pc}
ldr r1, [r4, #0x2c]
mov r3, #0x0
cmp r1, #0x0
movge r7, #0x1
movlt r7, #0x0
cmp r7, #0x0
movne r0, #0x1
movne r2, r0, lsl r1
ldr r0, [r4, #0x24]
ldr r1, [r4, #0x28]
moveq r2, #0x0
bl SND_StopTimer
cmp r7, #0x0
beq _020C19DC
bl SND_GetCurrentCommandTag
mov r5, r0
mov r0, #0x1
bl SND_FlushCommand
mov r0, r5
bl SND_WaitForCommandProc
ldr r6, _020C1A40 ; =sMesgQ
mov r5, #0x0
_020C19C4:
mov r0, r6
mov r1, r5
mov r2, r5
bl OS_ReceiveMessage
cmp r0, #0x0
bne _020C19C4
_020C19DC:
ldr r0, [r4, #0x28]
cmp r0, #0x0
beq _020C19EC
bl NNS_SndUnlockCapture
_020C19EC:
ldr r0, [r4, #0x20]
cmp r0, #0x0
beq _020C19FC
bl NNS_SndUnlockChannel
_020C19FC:
cmp r7, #0x0
beq _020C1A0C
ldr r0, [r4, #0x2c]
bl NNS_SndFreeAlarm
_020C1A0C:
ldr r0, [r4, #0x4]
cmp r0, #0x1
bne _020C1A2C
mov r0, #0x0
mov r1, r0
mov r2, r0
mov r3, r0
bl SND_SetOutputSelector
_020C1A2C:
mov r0, #0x0
str r0, [r4, #0x0]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020C1A3C: .word sCapParam
_020C1A40: .word sMesgQ
arm_func_start NNSi_SndCaptureStart
NNSi_SndCaptureStart: ; 0x020C1A44
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x3c
mov r10, r3
str r0, [sp, #0x18]
str r2, [sp, #0x20]
mov r2, #0x0
str r1, [sp, #0x1c]
mov r0, r1
mov r1, r10
ldr r9, [sp, #0x6c]
ldr r8, [sp, #0x74]
str r2, [sp, #0x2c]
mvn r6, #0x0
ldr r4, _020C1D90 ; =sCapParam
bl DC_FlushRange
ldr r0, [sp, #0x20]
mov r1, r10
bl DC_FlushRange
ldr r0, [sp, #0x60]
ldr r1, [sp, #0x70]
cmp r0, #0x1
moveq r7, #0x1
ldr r0, _020C1D94 ; =0x00FFB0FF
movne r7, #0x0
bl _s32_div_f
ldr r1, [sp, #0x84]
mov r11, r0
cmp r1, #0x0
beq _020C1B00
add r1, r11, #0x10
bic r11, r1, #0x1f
mov r2, r11, asr #0x5
mov r0, r10
cmp r7, #0x0
ldr r1, [sp, #0x80]
moveq r0, r10, lsr #0x1
str r2, [sp, #0x34]
bl _u32_div_f
ldr r1, [sp, #0x34]
mov r5, #0x20
mul r0, r1, r0
str r0, [sp, #0x30]
cmp r7, #0x0
ldr r0, [sp, #0x34]
moveq r5, r5, lsr #0x1
mul r0, r5, r0
mov r5, r0
_020C1B00:
cmp r7, #0x0
movne r0, #0x0
strne r0, [sp, #0x28]
moveq r0, #0x1
streq r0, [sp, #0x28]
cmp r7, #0x0
movne r0, #0x1
strne r0, [sp, #0x24]
moveq r0, #0x0
streq r0, [sp, #0x24]
ldr r0, [sp, #0x18]
cmp r0, #0x2
movne r0, #0xa
strne r0, [sp, #0x2c]
ldr r0, [sp, #0x84]
cmp r0, #0x0
beq _020C1B58
bl NNS_SndAllocAlarm
movs r6, r0
addmi sp, sp, #0x3c
movmi r0, #0x0
ldmmiia sp!, {r4-r11,pc}
_020C1B58:
mov r0, #0x3
bl NNS_SndLockCapture
cmp r0, #0x0
bne _020C1B84
cmp r6, #0x0
blt _020C1B78
mov r0, r6
bl NNS_SndFreeAlarm
_020C1B78:
add sp, sp, #0x3c
mov r0, #0x0
ldmia sp!, {r4-r11,pc}
_020C1B84:
mov r0, #0xa
bl NNS_SndLockChannel
cmp r0, #0x0
bne _020C1BB8
cmp r6, #0x0
blt _020C1BA4
mov r0, r6
bl NNS_SndFreeAlarm
_020C1BA4:
mov r0, #0x3
bl NNS_SndUnlockCapture
add sp, sp, #0x3c
mov r0, #0x0
ldmia sp!, {r4-r11,pc}
_020C1BB8:
mov r0, #0x0
mov r7, r10, lsr #0x2
str r0, [sp, #0x0]
str r7, [sp, #0x4]
str r8, [sp, #0x8]
str r0, [sp, #0xc]
cmp r9, #0x0
movne r3, #0x1
ldr r1, [sp, #0x78]
str r11, [sp, #0x10]
str r1, [sp, #0x14]
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x1c]
moveq r3, #0x2
mov r0, #0x1
bl SND_SetupChannelPcm
ldr r1, [sp, #0x64]
str r9, [sp, #0x0]
str r1, [sp, #0x4]
ldr r0, [sp, #0x68]
ldr r1, [sp, #0x24]
str r0, [sp, #0x8]
ldr r2, [sp, #0x1c]
mov r0, #0x0
mov r3, r7
bl SND_SetupCapture
mov r0, #0x0
str r0, [sp, #0x0]
str r7, [sp, #0x4]
str r8, [sp, #0x8]
str r0, [sp, #0xc]
cmp r9, #0x0
movne r3, #0x1
ldr r2, [sp, #0x7c]
str r11, [sp, #0x10]
str r2, [sp, #0x14]
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x20]
moveq r3, #0x2
mov r0, #0x3
bl SND_SetupChannelPcm
ldr r2, [sp, #0x64]
str r9, [sp, #0x0]
str r2, [sp, #0x4]
ldr r0, [sp, #0x68]
ldr r1, [sp, #0x24]
str r0, [sp, #0x8]
ldr r2, [sp, #0x20]
mov r3, r7
mov r0, #0x1
bl SND_SetupCapture
cmp r6, #0x0
blt _020C1CA8
ldr r2, [sp, #0x30]
ldr r3, _020C1D98 ; =AlarmCallback
mov r1, r2
mov r0, r6
add r1, r1, r5
str r4, [sp, #0x0]
bl SND_SetupAlarm
_020C1CA8:
ldr r0, [sp, #0x18]
cmp r0, #0x1
bne _020C1CC8
mov r0, #0x1
mov r2, r0
mov r3, r0
mov r1, #0x2
bl SND_SetOutputSelector
_020C1CC8:
cmp r6, #0x0
movge r0, #0x1
movge r2, r0, lsl r6
ldr r0, [sp, #0x2c]
movlt r2, #0x0
mov r1, #0x3
mov r3, #0x0
bl SND_StartTimer
mov r0, #0x1
str r0, [r4, #0x0]
ldr r0, [sp, #0x18]
ldr r1, [sp, #0x80]
str r0, [r4, #0x4]
mov r0, #0xa
str r0, [r4, #0x20]
ldr r0, [sp, #0x2c]
str r0, [r4, #0x24]
mov r0, #0x3
str r0, [r4, #0x28]
ldr r0, [sp, #0x60]
str r6, [r4, #0x2c]
str r0, [r4, #0x8]
ldr r0, [sp, #0x1c]
str r0, [r4, #0xc]
ldr r0, [sp, #0x20]
str r0, [r4, #0x10]
mov r0, r10
str r10, [r4, #0x14]
bl _u32_div_f
str r0, [r4, #0x18]
mov r1, #0x0
str r1, [r4, #0x1c]
ldr r0, [sp, #0x80]
ldr r1, [sp, #0x84]
str r0, [r4, #0x30]
ldr r0, [sp, #0x88]
str r1, [r4, #0x34]
str r0, [r4, #0x38]
add r0, r4, #0x3c
str r8, [r4, #0x50]
bl NNSi_SndFaderInit
add r0, r4, #0x3c
mov r1, r8, lsl #0x8
mov r2, #0x1
bl NNSi_SndFaderSet
mov r0, #0x0
str r0, [r4, #0x4c]
mov r0, #0x1
add sp, sp, #0x3c
ldmia sp!, {r4-r11,pc}
.balign 4
_020C1D90: .word sCapParam
_020C1D94: .word 0x00FFB0FF
_020C1D98: .word AlarmCallback
arm_func_start NNSi_SndCaptureMain
NNSi_SndCaptureMain: ; 0x020C1D9C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r5, _020C1E34 ; =sCapParam
ldr r0, [r5, #0x0]
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,pc}
ldr r0, [r5, #0x4]
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,pc}
add r4, r5, #0x3c
mov r0, r4
bl NNSi_SndFaderUpdate
ldr r0, [r5, #0x4c]
cmp r0, #0x0
beq _020C1DFC
mov r0, r4
bl NNSi_SndFaderIsFinished
cmp r0, #0x0
beq _020C1DFC
bl NNSi_SndCaptureStop
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
_020C1DFC:
mov r0, r4
bl NNSi_SndFaderGet
ldr r1, [r5, #0x50]
mov r4, r0, asr #0x8
cmp r4, r1
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,pc}
ldr r0, [r5, #0x24]
mov r1, r4
mov r2, #0x0
bl SND_SetChannelVolume
str r4, [r5, #0x50]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020C1E34: .word sCapParam
arm_func_start NNSi_SndCaptureInit
NNSi_SndCaptureInit: ; 0x020C1E38
ldr r1, _020C1E50 ; =sIsThreadCreated
mov r2, #0x0
ldr r0, _020C1E54 ; =sCapParam
str r2, [r1, #0x0]
str r2, [r0, #0x0]
bx lr
.balign 4
_020C1E50: .word sIsThreadCreated
_020C1E54: .word sCapParam
arm_func_start NNS_SndCaptureIsActive
NNS_SndCaptureIsActive: ; 0x020C1E58
ldr r0, _020C1E64 ; =sCapParam
ldr r0, [r0, #0x0]
bx lr
.balign 4
_020C1E64: .word sCapParam
arm_func_start NNS_SndCaptureStopEffect
NNS_SndCaptureStopEffect: ; 0x020C1E68
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020C1EA0 ; =sCapParam
ldr r1, [r0, #0x0]
cmp r1, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldr r0, [r0, #0x4]
cmp r0, #0x1
addne sp, sp, #0x4
ldmneia sp!, {pc}
bl NNSi_SndCaptureStop
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020C1EA0: .word sCapParam
arm_func_start NNS_SndCaptureStartEffect
NNS_SndCaptureStartEffect: ; 0x020C1EA4
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x2c
mov r5, r0
mov r4, r1
mov r7, r2
mov r6, r3
bl NNS_SndCaptureStopEffect
ldr r0, _020C1F50 ; =sCapParam
ldr r0, [r0, #0x0]
cmp r0, #0x0
addne sp, sp, #0x2c
movne r0, #0x0
ldmneia sp!, {r4-r7,pc}
mov r1, r5
mov r2, r4
mov r0, #0x0
bl MIi_CpuClear32
mov r0, r5
mov r1, r4
bl DC_FlushRange
str r7, [sp, #0x0]
mov r2, #0x0
str r2, [sp, #0x4]
str r2, [sp, #0x8]
mov r0, #0x1
str r0, [sp, #0xc]
str r6, [sp, #0x10]
mov r1, #0x7f
str r1, [sp, #0x14]
str r2, [sp, #0x18]
ldr r2, [sp, #0x40]
str r1, [sp, #0x1c]
ldr r1, [sp, #0x44]
str r2, [sp, #0x20]
ldr r12, [sp, #0x48]
str r1, [sp, #0x24]
mov r1, r5
mov r3, r4, lsr #0x1
add r2, r5, r4, lsr #0x1
str r12, [sp, #0x28]
bl NNSi_SndCaptureStart
add sp, sp, #0x2c
ldmia sp!, {r4-r7,pc}
.balign 4
_020C1F50: .word sCapParam
arm_func_start NNS_SndCaptureStopReverb
NNS_SndCaptureStopReverb: ; 0x020C1F54
stmdb sp!, {r4,lr}
ldr r4, _020C1FA0 ; =sCapParam
mov r2, r0
ldr r0, [r4, #0x0]
cmp r0, #0x0
ldmeqia sp!, {r4,pc}
ldr r0, [r4, #0x4]
cmp r0, #0x0
ldmneia sp!, {r4,pc}
cmp r2, #0x0
bne _020C1F88
bl NNSi_SndCaptureStop
ldmia sp!, {r4,pc}
_020C1F88:
add r0, r4, #0x3c
mov r1, #0x0
bl NNSi_SndFaderSet
mov r0, #0x1
str r0, [r4, #0x4c]
ldmia sp!, {r4,pc}
.balign 4
_020C1FA0: .word sCapParam
arm_func_start NNS_SndCaptureSetReverbVolume
NNS_SndCaptureSetReverbVolume: ; 0x020C1FA4
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r3, _020C1FEC ; =sCapParam
mov r12, r0
ldr r0, [r3, #0x0]
mov r2, r1
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldr r0, [r3, #0x4]
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {pc}
add r0, r3, #0x3c
mov r1, r12, lsl #0x8
bl NNSi_SndFaderSet
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020C1FEC: .word sCapParam
arm_func_start NNS_SndCaptureStartReverb
NNS_SndCaptureStartReverb: ; 0x020C1FF0
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x2c
mov r5, r0
mov r0, #0x0
mov r4, r1
mov r7, r2
mov r6, r3
bl NNS_SndCaptureStopReverb
ldr r0, _020C2098 ; =sCapParam
ldr r0, [r0, #0x0]
cmp r0, #0x0
addne sp, sp, #0x2c
movne r0, #0x0
ldmneia sp!, {r4-r7,pc}
mov r1, r5
mov r2, r4
mov r0, #0x0
bl MIi_CpuClear32
mov r0, r5
mov r1, r4
bl DC_FlushRange
str r7, [sp, #0x0]
mov r0, #0x0
str r0, [sp, #0x4]
str r0, [sp, #0x8]
mov r1, #0x1
str r1, [sp, #0xc]
ldr r1, [sp, #0x40]
str r6, [sp, #0x10]
str r1, [sp, #0x14]
str r0, [sp, #0x18]
mov r1, #0x7f
str r1, [sp, #0x1c]
str r0, [sp, #0x20]
str r0, [sp, #0x24]
mov r1, r5
mov r3, r4, lsr #0x1
add r2, r5, r4, lsr #0x1
str r0, [sp, #0x28]
bl NNSi_SndCaptureStart
add sp, sp, #0x2c
ldmia sp!, {r4-r7,pc}
.balign 4
_020C2098: .word sCapParam

63
arm9/asm/NNS_SND_fader.s Normal file
View File

@@ -0,0 +1,63 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_SndFaderIsFinished
NNSi_SndFaderIsFinished: ; 0x020C3DDC
ldr r1, [r0, #0x8]
ldr r0, [r0, #0xc]
cmp r1, r0
movge r0, #0x1
movlt r0, #0x0
bx lr
arm_func_start NNSi_SndFaderUpdate
NNSi_SndFaderUpdate: ; 0x020C3DF4
ldr r2, [r0, #0x8]
ldr r1, [r0, #0xc]
cmp r2, r1
addlt r1, r2, #0x1
strlt r1, [r0, #0x8]
bx lr
arm_func_start NNSi_SndFaderGet
NNSi_SndFaderGet: ; 0x020C3E0C
stmdb sp!, {r4,lr}
ldr r1, [r0, #0xc]
ldr r2, [r0, #0x8]
cmp r2, r1
ldrge r0, [r0, #0x4]
ldmgeia sp!, {r4,pc}
ldr r4, [r0, #0x0]
ldr r0, [r0, #0x4]
sub r0, r0, r4
mul r0, r2, r0
bl _s32_div_f
add r0, r4, r0
ldmia sp!, {r4,pc}
arm_func_start NNSi_SndFaderSet
NNSi_SndFaderSet: ; 0x020C3E40
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
mov r4, r2
bl NNSi_SndFaderGet
str r0, [r6, #0x0]
str r5, [r6, #0x4]
str r4, [r6, #0xc]
mov r0, #0x0
str r0, [r6, #0x8]
ldmia sp!, {r4-r6,pc}
arm_func_start NNSi_SndFaderInit
NNSi_SndFaderInit: ; 0x020C3E6C
mov r2, #0x0
str r2, [r0, #0x4]
ldr r1, [r0, #0x4]
str r1, [r0, #0x0]
str r2, [r0, #0xc]
ldr r1, [r0, #0xc]
str r1, [r0, #0x8]
bx lr

282
arm9/asm/NNS_SND_heap.s Normal file
View File

@@ -0,0 +1,282 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start EraseSync
EraseSync: ; 0x020C2774
stmdb sp!, {r4,lr}
bl SND_GetCurrentCommandTag
mov r4, r0
mov r0, #0x1
bl SND_FlushCommand
mov r0, r4
bl SND_WaitForCommandProc
ldmia sp!, {r4,pc}
arm_func_start NewSection
NewSection: ; 0x020C2794
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
ldr r0, [r5, #0x0]
mov r1, #0x14
mov r2, #0x4
bl NNS_FndAllocFromFrmHeapEx
movs r4, r0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r5,pc}
bl InitHeapSection
mov r1, r4
add r0, r5, #0x4
bl NNS_FndAppendListObject
mov r0, #0x1
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_start InitHeap
InitHeap: ; 0x020C27DC
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r1
add r0, r5, #0x4
mov r1, #0xc
bl NNS_FndInitList
mov r0, r5
str r4, [r5, #0x0]
bl NewSection
cmp r0, #0x0
movne r0, #0x1
moveq r0, #0x0
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_start InitHeapSection
InitHeapSection: ; 0x020C2818
ldr ip, _020C2824 ; =NNS_FndInitList
mov r1, #0x0
bx r12
.balign 4
_020C2824: .word NNS_FndInitList
arm_func_start NNS_SndHeapLoadState
NNS_SndHeapLoadState: ; 0x020C2828
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x4
mov r7, #0x0
movs r9, r1
mov r10, r0
mov r6, r7
bne _020C2850
bl NNS_SndHeapClear
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
_020C2850:
ldrh r0, [r10, #0xc]
cmp r9, r0
bge _020C28D8
mov r11, r7
add r5, r10, #0x4
mov r4, #0x1
_020C2868:
mov r0, r5
mov r1, r11
bl NNS_FndGetPrevListObject
mov r1, r7
mov r8, r0
bl NNS_FndGetPrevListObject
movs r7, r0
beq _020C28C0
_020C2888:
ldr r12, [r7, #0xc]
cmp r12, #0x0
beq _020C28AC
ldr r1, [r7, #0x8]
ldr r2, [r7, #0x10]
ldr r3, [r7, #0x14]
add r0, r7, #0x20
blx r12
mov r6, r4
_020C28AC:
mov r0, r8
mov r1, r7
bl NNS_FndGetPrevListObject
movs r7, r0
bne _020C2888
_020C28C0:
mov r0, r5
mov r1, r8
bl NNS_FndRemoveListObject
ldrh r0, [r10, #0xc]
cmp r9, r0
blt _020C2868
_020C28D8:
ldr r0, [r10, #0x0]
mov r1, r9
bl NNS_FndFreeByStateToFrmHeap
cmp r6, #0x0
beq _020C28F0
bl EraseSync
_020C28F0:
ldrh r1, [r10, #0xc]
ldr r0, [r10, #0x0]
bl NNS_FndRecordStateForFrmHeap
mov r0, r10
bl NewSection
add sp, sp, #0x4
ldmia sp!, {r4-r11,pc}
arm_func_start NNS_SndHeapSaveState
NNS_SndHeapSaveState: ; 0x020C290C
stmdb sp!, {r4,lr}
mov r4, r0
ldrh r1, [r4, #0xc]
ldr r0, [r4, #0x0]
bl NNS_FndRecordStateForFrmHeap
cmp r0, #0x0
mvneq r0, #0x0
ldmeqia sp!, {r4,pc}
mov r0, r4
bl NewSection
cmp r0, #0x0
ldrneh r0, [r4, #0xc]
subne r0, r0, #0x1
ldmneia sp!, {r4,pc}
ldr r0, [r4, #0x0]
mov r1, #0x0
bl NNS_FndFreeByStateToFrmHeap
mvn r0, #0x0
ldmia sp!, {r4,pc}
arm_func_start NNS_SndHeapAlloc
NNS_SndHeapAlloc: ; 0x020C2958
stmdb sp!, {r4-r8,lr}
mov r7, r1
mov r8, r0
add r0, r7, #0x1f
bic r1, r0, #0x1f
mov r6, r2
ldr r0, [r8, #0x0]
add r1, r1, #0x20
mov r2, #0x20
mov r5, r3
bl NNS_FndAllocFromFrmHeapEx // some allocator?
movs r4, r0
moveq r0, #0x0
ldmeqia sp!, {r4-r8,pc}
add r0, r8, #0x4
mov r1, #0x0
bl NNS_FndGetPrevListObject
str r7, [r4, #0x8]
str r6, [r4, #0xc]
ldr r2, [sp, #0x18]
str r5, [r4, #0x10]
mov r1, r4
str r2, [r4, #0x14]
bl NNS_FndAppendListObject
add r0, r4, #0x20
ldmia sp!, {r4-r8,pc}
arm_func_start NNS_SndHeapClear
NNS_SndHeapClear: ; 0x020C29C0
stmdb sp!, {r4-r10,lr}
mov r8, r0
mov r5, #0x0
mov r1, r5
add r0, r8, #0x4
bl NNS_FndGetPrevListObject
movs r7, r0
beq _020C2A58
add r9, r8, #0x4
mov r10, #0x1
mov r4, r5
_020C29EC:
mov r0, r7
mov r1, r4
bl NNS_FndGetPrevListObject
movs r6, r0
beq _020C2A38
_020C2A00:
ldr r12, [r6, #0xc]
cmp r12, #0x0
beq _020C2A24
ldr r1, [r6, #0x8]
ldr r2, [r6, #0x10]
ldr r3, [r6, #0x14]
add r0, r6, #0x20
blx r12
mov r5, r10
_020C2A24:
mov r0, r7
mov r1, r6
bl NNS_FndGetPrevListObject
movs r6, r0
bne _020C2A00
_020C2A38:
mov r0, r9
mov r1, r7
bl NNS_FndRemoveListObject
mov r0, r9
mov r1, r4
bl NNS_FndGetPrevListObject
movs r7, r0
bne _020C29EC
_020C2A58:
ldr r0, [r8, #0x0]
mov r1, #0x3
bl NNS_FndFreeToFrmHeap
cmp r5, #0x0
beq _020C2A70
bl EraseSync
_020C2A70:
mov r0, r8
bl NewSection
ldmia sp!, {r4-r10,pc}
arm_func_start NNS_SndHeapDestroy
NNS_SndHeapDestroy: ; 0x020C2A7C
stmdb sp!, {r4,lr}
mov r4, r0
bl NNS_SndHeapClear
ldr r0, [r4, #0x0]
bl NNS_FndDestroyFrmHeap
ldmia sp!, {r4,pc}
arm_func_start NNS_SndHeapCreate
NNS_SndHeapCreate: ; 0x020C2A94
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
add r2, r0, #0x3
add r0, r0, r1
bic r5, r2, #0x3
cmp r5, r0
addhi sp, sp, #0x4
movhi r0, #0x0
ldmhiia sp!, {r4-r5,pc}
sub r1, r0, r5
cmp r1, #0x10
addcc sp, sp, #0x4
movcc r0, #0x0
ldmccia sp!, {r4-r5,pc}
add r0, r5, #0x10
sub r1, r1, #0x10
mov r2, #0x0
bl NNS_FndCreateFrmHeapEx
movs r4, r0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r5,pc}
mov r0, r5
mov r1, r4
bl InitHeap
cmp r0, #0x0
addne sp, sp, #0x4
movne r0, r5
ldmneia sp!, {r4-r5,pc}
mov r0, r4
bl NNS_FndDestroyFrmHeap
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}

125
arm9/asm/NNS_SND_main.s Normal file
View File

@@ -0,0 +1,125 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global sCurDriverInfo
sCurDriverInfo: ; 0x021D1C8C
.space 0x4
.global sDriverInfoFirstFlag
sDriverInfoFirstFlag: ; 0x021D1C90
.space 0x4
.global initialized$8127
initialized$8127: ; 0x021D1C94
.space 0x4
.global sPreSleepCallback
sPreSleepCallback: ; 0x021D1C98
.space 0xc
.global sPostSleepCallback
sPostSleepCallback: ; 0x021D1CA4
.space 0xc
.section .text
local_arm_func_start EndSleep
EndSleep: ; 0x020C0130
ldr ip, _020C0138 ; =NNSi_SndCaptureEndSleep
bx r12
.balign 4
_020C0138: .word NNSi_SndCaptureEndSleep
local_arm_func_start BeginSleep
BeginSleep: ; 0x020C013C
stmdb sp!, {r4,lr}
bl NNSi_SndCaptureBeginSleep
mov r0, #0x0
mov r1, r0
mov r2, r0
mov r3, r0
bl SND_StopTimer
bl SND_GetCurrentCommandTag
mov r4, r0
mov r0, #0x1
bl SND_FlushCommand
mov r0, r4
bl SND_WaitForCommandProc
ldmia sp!, {r4,pc}
arm_func_start NNS_SndSetMonoFlag
NNS_SndSetMonoFlag: ; 0x020C0174
stmdb sp!, {lr}
sub sp, sp, #0x4
cmp r0, #0x0
beq _020C0194
mov r0, #0x40
bl SND_SetMasterPan
add sp, sp, #0x4
ldmia sp!, {pc}
_020C0194:
bl SND_ResetMasterPan
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndMain
NNS_SndMain: ; 0x020C01A0
stmdb sp!, {r4,lr}
mov r4, #0x0
_020C01A8:
mov r0, r4
bl SND_RecvCommandReply
cmp r0, #0x0
bne _020C01A8
bl NNSi_SndPlayerMain
bl NNSi_SndCaptureMain
bl NNSi_SndArcStrmMain
mov r0, #0x0
bl SND_FlushCommand
ldmia sp!, {r4,pc}
arm_func_start NNS_SndInit
NNS_SndInit: ; 0x020C01D0
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020C0254 ; =initialized$8127
ldr r1, [r0, #0x0]
cmp r1, #0x0
addne sp, sp, #0x4
ldmneia sp!, {pc}
mov r1, #0x1
str r1, [r0, #0x0]
bl SND_Init
ldr ip, _020C0258 ; =BeginSleep
ldr r0, _020C025C ; =sPreSleepCallback
mov r3, #0x0
ldr r1, _020C0260 ; =sPostSleepCallback
ldr r2, _020C0264 ; =EndSleep
str r12, [r0, #0x0]
str r3, [r0, #0x4]
str r2, [r1, #0x0]
str r3, [r1, #0x4]
bl PM_PrependPreSleepCallback
ldr r0, _020C0260 ; =sPostSleepCallback
bl PM_AppendPostSleepCallback
bl NNSi_SndInitResourceMgr
bl NNSi_SndCaptureInit
bl NNSi_SndPlayerInit
ldr r1, _020C0268 ; =sCurDriverInfo
mvn r3, #0x0
ldr r0, _020C026C ; =sDriverInfoFirstFlag
mov r2, #0x1
strb r3, [r1, #0x0]
str r2, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {pc}
.balign 4
_020C0254: .word initialized$8127
_020C0258: .word BeginSleep
_020C025C: .word sPreSleepCallback
_020C0260: .word sPostSleepCallback
_020C0264: .word EndSleep
_020C0268: .word sCurDriverInfo
_020C026C: .word sDriverInfoFirstFlag

877
arm9/asm/NNS_SND_player.s Normal file
View File

@@ -0,0 +1,877 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global sFreeList
sFreeList: ; 0x021D1DFC
.space 0xc
.global sPrioList
sPrioList: ; 0x021D1E08
.space 0xc
.global sSeqPlayer
sSeqPlayer: ; 0x021D1E14
.space 0x440
.global sPlayer
sPlayer: ; 0x021D2254
.space 0x480
.section .text
arm_func_start SetPlayerPriority
SetPlayerPriority: ; 0x020C06CC
stmdb sp!, {r4-r6,lr}
mov r6, r0
ldr r4, [r6, #0x4]
mov r5, r1
cmp r4, #0x0
beq _020C06F8
mov r0, r4
mov r1, r6
bl NNS_FndRemoveListObject
mov r0, #0x0
str r0, [r6, #0x4]
_020C06F8:
ldr r0, _020C0728 ; =sPrioList
mov r1, r6
bl NNS_FndRemoveListObject
strb r5, [r6, #0x3d]
cmp r4, #0x0
beq _020C071C
mov r0, r4
mov r1, r6
bl InsertPlayerList
_020C071C:
mov r0, r6
bl InsertPrioList
ldmia sp!, {r4-r6,pc}
.balign 4
_020C0728: .word sPrioList
arm_func_start PlayerHeapDisposeCallback
PlayerHeapDisposeCallback: ; 0x020C072C
stmdb sp!, {r4,lr}
mov r4, r0
ldr r0, [r4, #0x8]
cmp r0, #0x0
ldmeqia sp!, {r4,pc}
bl NNS_SndHeapDestroy
ldr r1, [r4, #0xc]
cmp r1, #0x0
movne r0, #0x0
strne r0, [r1, #0x8]
ldmneia sp!, {r4,pc}
ldr r1, [r4, #0x10]
ldr r2, _020C0778 ; =sPlayer
mov r0, #0x24
mla r0, r1, r0, r2
mov r1, r4
add r0, r0, #0xc
bl NNS_FndRemoveListObject
ldmia sp!, {r4,pc}
.balign 4
_020C0778: .word sPlayer
local_arm_func_start ShutdownPlayer
ShutdownPlayer: ; 0x020C077C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r0
ldr r1, [r4, #0x0]
cmp r1, #0x0
movne r0, #0x0
strne r0, [r1, #0x0]
strne r0, [r4, #0x0]
ldr r5, [r4, #0x4]
mov r1, r4
mov r0, r5
bl NNS_FndRemoveListObject
mov r0, #0x0
str r0, [r4, #0x4]
ldr r1, [r4, #0x8]
cmp r1, #0x0
beq _020C07D8
add r0, r5, #0xc
bl NNS_FndAppendListObject
ldr r0, [r4, #0x8]
mov r1, #0x0
str r1, [r0, #0xc]
str r1, [r4, #0x8]
_020C07D8:
ldr r0, _020C0800 ; =sPrioList
mov r1, r4
bl NNS_FndRemoveListObject
ldr r0, _020C0804 ; =sFreeList
mov r1, r4
bl NNS_FndAppendListObject
mov r0, #0x0
strb r0, [r4, #0x2c]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020C0800: .word sPrioList
_020C0804: .word sFreeList
arm_func_start AllocSeqPlayer
AllocSeqPlayer: ; 0x020C0808
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
ldr r0, _020C0874 ; =sFreeList
mov r1, #0x0
bl NNS_FndGetNextListObject
movs r4, r0
bne _020C0850
ldr r0, _020C0878 ; =sPrioList
mov r1, #0x0
bl NNS_FndGetNextListObject
mov r4, r0
ldrb r1, [r4, #0x3d]
cmp r5, r1
addlt sp, sp, #0x4
movlt r0, #0x0
ldmltia sp!, {r4-r5,pc}
bl ForceStopSeq
_020C0850:
ldr r0, _020C0874 ; =sFreeList
mov r1, r4
bl NNS_FndRemoveListObject
mov r0, r4
strb r5, [r4, #0x3d]
bl InsertPrioList
mov r0, r4
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020C0874: .word sFreeList
_020C0878: .word sPrioList
arm_func_start ForceStopSeq
ForceStopSeq: ; 0x020C087C
stmdb sp!, {r4,lr}
mov r4, r0
ldrb r0, [r4, #0x2c]
cmp r0, #0x2
bne _020C089C
ldrb r0, [r4, #0x3c]
ldr r1, _020C08B0 ; =0xFFFFFD2D
bl SND_SetPlayerVolume
_020C089C:
ldrb r0, [r4, #0x3c]
bl SND_StopSeq
mov r0, r4
bl ShutdownPlayer
ldmia sp!, {r4,pc}
.balign 4
_020C08B0: .word 0xFFFFFD2D
arm_func_start InsertPrioList
InsertPrioList: ; 0x020C08B4
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
ldr r0, _020C090C ; =sPrioList
mov r1, #0x0
bl NNS_FndGetNextListObject
movs r1, r0
beq _020C08F8
ldr r4, _020C090C ; =sPrioList
_020C08D8:
ldrb r2, [r5, #0x3d]
ldrb r0, [r1, #0x3d]
cmp r2, r0
blo _020C08F8
mov r0, r4
bl NNS_FndGetNextListObject
movs r1, r0
bne _020C08D8
_020C08F8:
ldr r0, _020C090C ; =sPrioList
mov r2, r5
bl NNS_FndInsertListObject
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020C090C: .word sPrioList
arm_func_start InsertPlayerList
InsertPlayerList: ; 0x020C0910
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r1
mov r1, #0x0
mov r5, r0
bl NNS_FndGetNextListObject
movs r1, r0
beq _020C0950
_020C0930:
ldrb r2, [r4, #0x3d]
ldrb r0, [r1, #0x3d]
cmp r2, r0
blo _020C0950
mov r0, r5
bl NNS_FndGetNextListObject
movs r1, r0
bne _020C0930
_020C0950:
mov r0, r5
mov r2, r4
bl NNS_FndInsertListObject
str r5, [r4, #0x4]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_start InitPlayer
InitPlayer: ; 0x020C0968
stmdb sp!, {r4,lr}
mov r4, r0
mov r0, #0x0
strb r0, [r4, #0x2e]
strb r0, [r4, #0x2d]
strb r0, [r4, #0x2f]
strh r0, [r4, #0x34]
strh r0, [r4, #0x3e]
mov r1, #0x7f
strb r1, [r4, #0x40]
add r0, r4, #0x1c
strb r1, [r4, #0x41]
bl NNSi_SndFaderInit
add r0, r4, #0x1c
mov r1, #0x7f00
mov r2, #0x1
bl NNSi_SndFaderSet
ldmia sp!, {r4,pc}
arm_func_start NNSi_SndPlayerAllocHeap
NNSi_SndPlayerAllocHeap: ; 0x020C09B0
stmdb sp!, {r4-r6,lr}
ldr r3, _020C0A00 ; =sPlayer
mov r2, #0x24
mla r5, r0, r2, r3
mov r6, r1
add r0, r5, #0xc
mov r1, #0x0
bl NNS_FndGetNextListObject
movs r4, r0
moveq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
mov r1, r4
add r0, r5, #0xc
bl NNS_FndRemoveListObject
str r6, [r4, #0xc]
str r4, [r6, #0x8]
ldr r0, [r4, #0x8]
bl NNS_SndHeapClear
ldr r0, [r4, #0x8]
ldmia sp!, {r4-r6,pc}
.balign 4
_020C0A00: .word sPlayer
arm_func_start NNSi_SndPlayerPause
NNSi_SndPlayerPause: ; 0x020C0A04
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
movs r5, r0
mov r4, r1
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,pc}
ldrb r0, [r5, #0x2e]
cmp r4, r0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,pc}
ldrb r0, [r5, #0x3c]
bl SND_PauseSeq
strb r4, [r5, #0x2e]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_start NNSi_SndPlayerStopSeq
NNSi_SndPlayerStopSeq: ; 0x020C0A40
stmdb sp!, {r4,lr}
movs r4, r0
mov r2, r1
ldmeqia sp!, {r4,pc}
ldrb r1, [r4, #0x2c]
cmp r1, #0x0
ldmeqia sp!, {r4,pc}
cmp r2, #0x0
bne _020C0A6C
bl ForceStopSeq
ldmia sp!, {r4,pc}
_020C0A6C:
add r0, r4, #0x1c
mov r1, #0x0
bl NNSi_SndFaderSet
mov r0, r4
mov r1, #0x0
bl SetPlayerPriority
mov r0, #0x2
strb r0, [r4, #0x2c]
ldmia sp!, {r4,pc}
arm_func_start NNSi_SndPlayerStartSeq
NNSi_SndPlayerStartSeq: ; 0x020C0A90
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
ldrb r0, [r5, #0x3c]
ldr r4, [r5, #0x4]
bl SND_PrepareSeq
ldr r2, [r4, #0x1c]
cmp r2, #0x0
beq _020C0AC0
ldrb r0, [r5, #0x3c]
ldr r1, _020C0AE4 ; =0x0000FFFF
bl SND_SetTrackAllocatableChannel
_020C0AC0:
mov r0, r5
bl InitPlayer
bl SND_GetCurrentCommandTag
str r0, [r5, #0x30]
mov r0, #0x1
strb r0, [r5, #0x2f]
strb r0, [r5, #0x2c]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020C0AE4: .word 0x0000FFFF
arm_func_start NNSi_SndPlayerFreeSeqPlayer
NNSi_SndPlayerFreeSeqPlayer: ; 0x020C0AE8
ldr ip, _020C0AF0 ; =ShutdownPlayer
bx r12
.balign 4
_020C0AF0: .word ShutdownPlayer
arm_func_start NNSi_SndPlayerAllocSeqPlayer
NNSi_SndPlayerAllocSeqPlayer: ; 0x020C0AF4
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr ip, _020C0B9C ; =sPlayer
mov r3, #0x24
mov r4, r0
ldr r5, [r4, #0x0]
mla r6, r1, r3, r12
mov r7, r2
cmp r5, #0x0
beq _020C0B20
bl NNS_SndHandleReleaseSeq
_020C0B20:
ldrh r1, [r6, #0x8]
ldr r0, [r6, #0x18]
cmp r1, r0
blo _020C0B64
mov r0, r6
mov r1, #0x0
bl NNS_FndGetNextListObject
cmp r0, #0x0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r7,pc}
ldrb r1, [r0, #0x3d]
cmp r7, r1
addlt sp, sp, #0x4
movlt r0, #0x0
ldmltia sp!, {r4-r7,pc}
bl ForceStopSeq
_020C0B64:
mov r0, r7
bl AllocSeqPlayer
movs r5, r0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r7,pc}
mov r0, r6
mov r1, r5
bl InsertPlayerList
str r4, [r5, #0x0]
mov r0, r5
str r5, [r4, #0x0]
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020C0B9C: .word sPlayer
arm_func_start NNSi_SndPlayerMain
NNSi_SndPlayerMain: ; 0x020C0BA0
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0xc
bl SND_GetPlayerStatus
str r0, [sp, #0x0]
ldr r0, _020C0D14 ; =sPrioList
mov r1, #0x0
bl NNS_FndGetNextListObject
movs r10, r0
addeq sp, sp, #0xc
ldmeqia sp!, {r4-r11,pc}
mov r0, #0x8000
rsb r0, r0, #0x0
ldr r4, _020C0D18 ; =SNDi_DecibelTable
str r0, [sp, #0x4]
mov r5, #0x1
mov r11, #0x0
_020C0BE0:
ldr r0, _020C0D14 ; =sPrioList
mov r1, r10
bl NNS_FndGetNextListObject
ldrb r1, [r10, #0x2d]
mov r9, r0
cmp r1, #0x0
bne _020C0C0C
ldr r0, [r10, #0x30]
bl SND_IsFinishedCommandTag
cmp r0, #0x0
strneb r5, [r10, #0x2d]
_020C0C0C:
ldrb r0, [r10, #0x2d]
cmp r0, #0x0
beq _020C0C38
ldrb r0, [r10, #0x3c]
mov r1, r5, lsl r0
ldr r0, [sp, #0x0]
ands r0, r0, r1
bne _020C0C38
mov r0, r10
bl ShutdownPlayer
b _020C0D00
_020C0C38:
add r0, r10, #0x1c
bl NNSi_SndFaderUpdate
ldr r0, [r10, #0x4]
ldrb r2, [r10, #0x41]
ldrb r1, [r10, #0x40]
ldrb r0, [r0, #0x20]
mov r3, r2, lsl #0x1
mov r2, r1, lsl #0x1
mov r1, r0, lsl #0x1
add r0, r10, #0x1c
ldrsh r8, [r4, r3]
ldrsh r7, [r4, r2]
ldrsh r6, [r4, r1]
bl NNSi_SndFaderGet
mov r0, r0, asr #0x8
mov r2, r0, lsl #0x1
add r1, r7, r8
mov r0, #0x8000
ldrsh r2, [r4, r2]
add r1, r6, r1
rsb r0, r0, #0x0
add r6, r2, r1
cmp r6, r0
ldrlt r6, [sp, #0x4]
blt _020C0CA8
ldr r0, _020C0D1C ; =0x00007FFF
cmp r6, r0
movgt r6, r0
_020C0CA8:
ldrsh r0, [r10, #0x3e]
cmp r6, r0
beq _020C0CC4
ldrb r0, [r10, #0x3c]
mov r1, r6
bl SND_SetPlayerVolume
strh r6, [r10, #0x3e]
_020C0CC4:
ldrb r0, [r10, #0x2c]
cmp r0, #0x2
bne _020C0CE8
add r0, r10, #0x1c
bl NNSi_SndFaderIsFinished
cmp r0, #0x0
beq _020C0CE8
mov r0, r10
bl ForceStopSeq
_020C0CE8:
ldrb r0, [r10, #0x2f]
cmp r0, #0x0
beq _020C0D00
ldrb r0, [r10, #0x3c]
bl SND_StartPreparedSeq
strb r11, [r10, #0x2f]
_020C0D00:
mov r10, r9
cmp r9, #0x0
bne _020C0BE0
add sp, sp, #0xc
ldmia sp!, {r4-r11,pc}
.balign 4
_020C0D14: .word sPrioList
_020C0D18: .word SNDi_DecibelTable
_020C0D1C: .word 0x00007FFF
arm_func_start NNSi_SndPlayerInit
NNSi_SndPlayerInit: ; 0x020C0D20
stmdb sp!, {r4-r10,lr}
ldr r0, _020C0DC4 ; =sPrioList
mov r1, #0x14
bl NNS_FndInitList
ldr r0, _020C0DC8 ; =sFreeList
mov r1, #0x14
bl NNS_FndInitList
ldr r6, _020C0DCC ; =sSeqPlayer
mov r7, #0x0
ldr r4, _020C0DC8 ; =sFreeList
mov r5, r7
_020C0D4C:
strb r5, [r6, #0x2c]
mov r0, r4
mov r1, r6
strb r7, [r6, #0x3c]
bl NNS_FndAppendListObject
add r7, r7, #0x1
cmp r7, #0x10
add r6, r6, #0x44
blt _020C0D4C
ldr sl, _020C0DD0 ; =sPlayer
mov r9, #0x0
mov r7, r9
mov r4, r9
mov r8, #0xc
mov r6, #0x7f
mov r5, #0x1
_020C0D8C:
mov r0, r10
mov r1, r8
bl NNS_FndInitList
mov r1, r7
add r0, r10, #0xc
bl NNS_FndInitList
strb r6, [r10, #0x20]
str r5, [r10, #0x18]
add r9, r9, #0x1
str r4, [r10, #0x1c]
cmp r9, #0x20
add r10, r10, #0x24
blt _020C0D8C
ldmia sp!, {r4-r10,pc}
.balign 4
_020C0DC4: .word sPrioList
_020C0DC8: .word sFreeList
_020C0DCC: .word sSeqPlayer
_020C0DD0: .word sPlayer
arm_func_start NNS_SndPlayerGetTick
NNS_SndPlayerGetTick: ; 0x020C0DD4
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, [r0, #0x0]
cmp r1, #0x0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {pc}
ldrb r0, [r1, #0x2d]
cmp r0, #0x0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {pc}
ldrb r0, [r1, #0x3c]
bl SND_GetPlayerTickCounter
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndPlayerGetSeqNo
NNS_SndPlayerGetSeqNo: ; 0x020C0E14
ldr r1, [r0, #0x0]
cmp r1, #0x0
mvneq r0, #0x0
bxeq lr
ldrh r0, [r1, #0x34]
cmp r0, #0x1
mvnne r0, #0x0
ldreqh r0, [r1, #0x38]
bx lr
arm_func_start NNS_SndPlayerSetSeqArcNo
NNS_SndPlayerSetSeqArcNo: ; 0x020C0E38
ldr r12, [r0, #0x0]
cmp r12, #0x0
bxeq lr
mov r3, #0x2
strh r3, [r12, #0x34]
ldr r3, [r0, #0x0]
strh r1, [r3, #0x38]
ldr r0, [r0, #0x0]
strh r2, [r0, #0x3a]
bx lr
arm_func_start NNS_SndPlayerSetSeqNo
NNS_SndPlayerSetSeqNo: ; 0x020C0E60
ldr r3, [r0, #0x0]
cmp r3, #0x0
movne r2, #0x1
strneh r2, [r3, #0x34]
ldrne r0, [r0, #0x0]
strneh r1, [r0, #0x38]
bx lr
arm_func_start NNS_SndPlayerSetTrackPan
NNS_SndPlayerSetTrackPan: ; 0x020C0E7C
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, [r0, #0x0]
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldrb r0, [r0, #0x3c]
bl SND_SetTrackPan
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndPlayerSetTrackPitch
NNS_SndPlayerSetTrackPitch: ; 0x020C0EA4
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, [r0, #0x0]
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldrb r0, [r0, #0x3c]
bl SND_SetTrackPitch
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndPlayerSetChannelPriority
NNS_SndPlayerSetChannelPriority: ; 0x020C0ECC
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, [r0, #0x0]
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldrb r0, [r0, #0x3c]
bl SND_SetPlayerChannelPriority
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndPlayerMoveVolume
NNS_SndPlayerMoveVolume: ; 0x020C0EF4
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r3, [r0, #0x0]
cmp r3, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldrb r0, [r3, #0x2c]
cmp r0, #0x2
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
add r0, r3, #0x1c
mov r1, r1, lsl #0x8
bl NNSi_SndFaderSet
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndPlayerSetInitialVolume
NNS_SndPlayerSetInitialVolume: ; 0x020C0F30
ldr r0, [r0, #0x0]
cmp r0, #0x0
strneb r1, [r0, #0x40]
bx lr
arm_func_start NNS_SndPlayerSetVolume
NNS_SndPlayerSetVolume: ; 0x020C0F40
ldr r0, [r0, #0x0]
cmp r0, #0x0
strneb r1, [r0, #0x41]
bx lr
arm_func_start NNS_SndPlayerCountPlayingSeqByPlayerNo
NNS_SndPlayerCountPlayingSeqByPlayerNo: ; 0x020C0F50
mov r1, #0x24
mul r1, r0, r1
ldr r0, _020C0F64 ; =sPlayer + 0x8
ldrh r0, [r0, r1]
bx lr
.balign 4
_020C0F64: .word sPlayer + 0x8
arm_func_start NNS_SndHandleReleaseSeq
NNS_SndHandleReleaseSeq: ; 0x020C0F68
ldr r2, [r0, #0x0]
cmp r2, #0x0
movne r1, #0x0
strne r1, [r2, #0x0]
strne r1, [r0, #0x0]
bx lr
arm_func_start NNS_SndHandleInit
NNS_SndHandleInit: ; 0x020C0F80
mov r1, #0x0
str r1, [r0, #0x0]
bx lr
arm_func_start NNS_SndPlayerPause
NNS_SndPlayerPause: ; 0x020C0F8C
ldr ip, _020C0F98 ; =NNSi_SndPlayerPause
ldr r0, [r0, #0x0]
bx r12
.balign 4
_020C0F98: .word NNSi_SndPlayerPause
arm_func_start NNS_SndPlayerStopSeqAll
NNS_SndPlayerStopSeqAll: ; 0x020C0F9C
stmdb sp!, {r4-r6,lr}
ldr r4, _020C0FD8 ; =sSeqPlayer
mov r6, r0
mov r5, #0x0
_020C0FAC:
ldrb r0, [r4, #0x2c]
cmp r0, #0x0
beq _020C0FC4
mov r0, r4
mov r1, r6
bl NNSi_SndPlayerStopSeq
_020C0FC4:
add r5, r5, #0x1
cmp r5, #0x10
add r4, r4, #0x44
blt _020C0FAC
ldmia sp!, {r4-r6,pc}
.balign 4
_020C0FD8: .word sSeqPlayer
arm_func_start NNS_SndPlayerStopSeqBySeqNo
NNS_SndPlayerStopSeqBySeqNo: ; 0x020C0FDC
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr r4, _020C103C ; =sSeqPlayer
mov r7, r0
mov r6, r1
mov r5, #0x0
_020C0FF4:
ldrb r0, [r4, #0x2c]
cmp r0, #0x0
beq _020C1024
ldrh r0, [r4, #0x34]
cmp r0, #0x1
bne _020C1024
ldrh r0, [r4, #0x38]
cmp r0, r7
bne _020C1024
mov r0, r4
mov r1, r6
bl NNSi_SndPlayerStopSeq
_020C1024:
add r5, r5, #0x1
cmp r5, #0x10
add r4, r4, #0x44
blt _020C0FF4
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020C103C: .word sSeqPlayer
arm_func_start NNS_SndPlayerStopSeqByPlayerNo
NNS_SndPlayerStopSeqByPlayerNo: ; 0x020C1040
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr r3, _020C109C ; =sPlayer
mov r2, #0x24
mla r4, r0, r2, r3
ldr r5, _020C10A0 ; =sSeqPlayer
mov r7, r1
mov r6, #0x0
_020C1060:
ldrb r0, [r5, #0x2c]
cmp r0, #0x0
beq _020C1084
ldr r0, [r5, #0x4]
cmp r0, r4
bne _020C1084
mov r0, r5
mov r1, r7
bl NNSi_SndPlayerStopSeq
_020C1084:
add r6, r6, #0x1
cmp r6, #0x10
add r5, r5, #0x44
blt _020C1060
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020C109C: .word sPlayer
_020C10A0: .word sSeqPlayer
arm_func_start NNS_SndPlayerStopSeq
NNS_SndPlayerStopSeq: ; 0x020C10A4
ldr ip, _020C10B0 ; =NNSi_SndPlayerStopSeq
ldr r0, [r0, #0x0]
bx r12
.balign 4
_020C10B0: .word NNSi_SndPlayerStopSeq
arm_func_start NNS_SndPlayerCreateHeap
NNS_SndPlayerCreateHeap: ; 0x020C10B4
stmdb sp!, {r4-r6,lr}
sub sp, sp, #0x8
mov r5, r2
mov r6, r0
mov r0, r1
mov r3, #0x0
ldr r2, _020C1140 ; =PlayerHeapDisposeCallback
add r1, r5, #0x14
str r3, [sp, #0x0]
bl NNS_SndHeapAlloc
movs r4, r0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
mov r2, #0x0
str r2, [r4, #0xc]
str r6, [r4, #0x10]
mov r1, r5
add r0, r4, #0x14
str r2, [r4, #0x8]
bl NNS_SndHeapCreate
cmp r0, #0x0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
ldr r2, _020C1144 ; =sPlayer
mov r1, #0x24
mla r2, r6, r1, r2
str r0, [r4, #0x8]
mov r1, r4
add r0, r2, #0xc
bl NNS_FndAppendListObject
mov r0, #0x1
add sp, sp, #0x8
ldmia sp!, {r4-r6,pc}
.balign 4
_020C1140: .word PlayerHeapDisposeCallback
_020C1144: .word sPlayer
arm_func_start NNS_SndPlayerSetAllocatableChannel
NNS_SndPlayerSetAllocatableChannel: ; 0x020C1148
mov r2, #0x24
mul r2, r0, r2
ldr r0, _020C115C ; =sPlayer + 0x1C
str r1, [r0, r2]
bx lr
.balign 4
_020C115C: .word sPlayer + 0x1C
arm_func_start NNS_SndPlayerSetPlayableSeqCount
NNS_SndPlayerSetPlayableSeqCount: ; 0x020C1160
mov r2, #0x24
mul r2, r0, r2
mov r0, r1, lsl #0x10
ldr r1, _020C117C ; =sPlayer + 0x18
mov r0, r0, lsr #0x10
str r0, [r1, r2]
bx lr
.balign 4
_020C117C: .word sPlayer + 0x18
arm_func_start NNS_SndPlayerSetPlayerVolume
NNS_SndPlayerSetPlayerVolume: ; 0x020C1180
mov r2, #0x24
mul r2, r0, r2
ldr r0, _020C1194 ; =sPlayer + 0x20
strb r1, [r0, r2]
bx lr
.balign 4
_020C1194: .word sPlayer + 0x20

View File

@@ -0,0 +1,129 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global sCaptureLock
sCaptureLock: ; 0x021D1CB0
.space 0x4
.global sAlarmLock
sAlarmLock: ; 0x021D1CB4
.space 0x4
.global sChannelLock
sChannelLock: ; 0x021D1CB8
.space 0x4
.section .text
arm_func_start NNSi_SndInitResourceMgr
NNSi_SndInitResourceMgr: ; 0x020C0270
ldr r2, _020C0290 ; =sChannelLock
mov r3, #0x0
ldr r1, _020C0294 ; =sCaptureLock
ldr r0, _020C0298 ; =sAlarmLock
str r3, [r2, #0x0]
str r3, [r1, #0x0]
str r3, [r0, #0x0]
bx lr
.balign 4
_020C0290: .word sChannelLock
_020C0294: .word sCaptureLock
_020C0298: .word sAlarmLock
arm_func_start NNS_SndFreeAlarm
NNS_SndFreeAlarm: ; 0x020C029C
ldr r1, _020C02B8 ; =sAlarmLock
mov r2, #0x1
mvn r0, r2, lsl r0
ldr r2, [r1, #0x0]
and r0, r2, r0
str r0, [r1, #0x0]
bx lr
.balign 4
_020C02B8: .word sAlarmLock
arm_func_start NNS_SndAllocAlarm
NNS_SndAllocAlarm: ; 0x020C02BC
ldr r0, _020C02FC ; =sAlarmLock
mov r3, #0x1
ldr r2, [r0, #0x0]
mov r0, #0x0
_020C02CC:
ands r1, r2, r3
ldreq r1, _020C02FC ; =sAlarmLock
ldreq r2, [r1, #0x0]
orreq r2, r2, r3
streq r2, [r1, #0x0]
bxeq lr
add r0, r0, #0x1
cmp r0, #0x8
mov r3, r3, lsl #0x1
blt _020C02CC
mvn r0, #0x0
bx lr
.balign 4
_020C02FC: .word sAlarmLock
arm_func_start NNS_SndUnlockCapture
NNS_SndUnlockCapture: ; 0x020C0300
ldr r1, _020C0318 ; =sCaptureLock
mvn r0, r0
ldr r2, [r1, #0x0]
and r0, r2, r0
str r0, [r1, #0x0]
bx lr
.balign 4
_020C0318: .word sCaptureLock
arm_func_start NNS_SndLockCapture
NNS_SndLockCapture: ; 0x020C031C
ldr r1, _020C033C ; =sCaptureLock
ldr r2, [r1, #0x0]
ands r3, r0, r2
movne r0, #0x0
orreq r0, r2, r0
streq r0, [r1, #0x0]
moveq r0, #0x1
bx lr
.balign 4
_020C033C: .word sCaptureLock
arm_func_start NNS_SndUnlockChannel
NNS_SndUnlockChannel: ; 0x020C0340
stmdb sp!, {r4,lr}
movs r4, r0
ldmeqia sp!, {r4,pc}
mov r1, #0x0
bl SND_UnlockChannel
ldr r0, _020C036C ; =sChannelLock
mvn r1, r4
ldr r2, [r0, #0x0]
and r1, r2, r1
str r1, [r0, #0x0]
ldmia sp!, {r4,pc}
.balign 4
_020C036C: .word sChannelLock
arm_func_start NNS_SndLockChannel
NNS_SndLockChannel: ; 0x020C0370
stmdb sp!, {r4,lr}
movs r4, r0
moveq r0, #0x1
ldmeqia sp!, {r4,pc}
ldr r1, _020C03B4 ; =sChannelLock
ldr r1, [r1, #0x0]
ands r1, r4, r1
movne r0, #0x0
ldmneia sp!, {r4,pc}
mov r1, #0x0
bl SND_LockChannel
ldr r1, _020C03B4 ; =sChannelLock
mov r0, #0x1
ldr r2, [r1, #0x0]
orr r2, r2, r4
str r2, [r1, #0x0]
ldmia sp!, {r4,pc}
.balign 4
_020C03B4: .word sChannelLock

View File

@@ -0,0 +1,23 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start NNSi_SndSeqArcGetSeqInfo
NNSi_SndSeqArcGetSeqInfo: ; 0x020C3D9C
cmp r1, #0x0
movlt r0, #0x0
bxlt lr
ldr r2, [r0, #0x1c]
cmp r1, r2
movcs r0, #0x0
bxcs lr
mov r2, #0xc
mul r2, r1, r2
add r3, r0, #0x20
ldr r1, [r3, r2]
mvn r0, #0x0
cmp r1, r0
add r0, r3, r2
moveq r0, #0x0
bx lr

525
arm9/asm/NNS_SND_sndarc.s Normal file
View File

@@ -0,0 +1,525 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global sCurrent
sCurrent: ; 0x021D28C0
.space 0x4
.section .text
arm_func_start SymbolDisposeCallback
SymbolDisposeCallback: ; 0x020C209C
mov r0, #0x0
str r0, [r2, #0x88]
bx lr
arm_func_start FatDisposeCallback
FatDisposeCallback: ; 0x020C20A8
mov r0, #0x0
str r0, [r2, #0x84]
bx lr
arm_func_start InfoDisposeCallback
InfoDisposeCallback: ; 0x020C20B4
mov r0, #0x0
str r0, [r2, #0x8c]
bx lr
arm_func_start NNS_SndArcSetFileAddress
NNS_SndArcSetFileAddress: ; 0x020C20C0
ldr r2, _020C20D8 ; =sCurrent
ldr r2, [r2, #0x0]
ldr r2, [r2, #0x84]
add r0, r2, r0, lsl #0x4
str r1, [r0, #0x14]
bx lr
.balign 4
_020C20D8: .word sCurrent
arm_func_start NNS_SndArcGetFileAddress
NNS_SndArcGetFileAddress: ; 0x020C20DC
ldr r1, _020C2100 ; =sCurrent
ldr r1, [r1, #0x0]
ldr r2, [r1, #0x84]
ldr r1, [r2, #0x8]
cmp r0, r1
movcs r0, #0x0
addcc r0, r2, r0, lsl #0x4
ldrcc r0, [r0, #0x14]
bx lr
.balign 4
_020C2100: .word sCurrent
arm_func_start NNS_SndArcReadFile
NNS_SndArcReadFile: ; 0x020C2104
stmdb sp!, {r4-r6,lr}
ldr r4, _020C2178 ; =sCurrent
mov r5, r2
ldr r4, [r4, #0x0]
mov r6, r1
ldr r2, [r4, #0x84]
ldr r1, [r2, #0x8]
cmp r0, r1
mvncs r0, #0x0
ldmcsia sp!, {r4-r6,pc}
add r1, r2, #0xc
add r1, r1, r0, lsl #0x4
ldr r0, [r1, #0x4]
ldr r1, [r1, #0x0]
sub r0, r0, r3
cmp r5, r0
movhi r5, r0
add r0, r4, #0x34
add r1, r1, r3
mov r2, #0x0
bl FS_SeekFile
cmp r0, #0x0
mvneq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
mov r1, r6
mov r2, r5
add r0, r4, #0x34
bl FS_ReadFile
ldmia sp!, {r4-r6,pc}
.balign 4
_020C2178: .word sCurrent
arm_func_start NNS_SndArcGetFileSize
NNS_SndArcGetFileSize: ; 0x020C217C
ldr r1, _020C21A0 ; =sCurrent
ldr r1, [r1, #0x0]
ldr r2, [r1, #0x84]
ldr r1, [r2, #0x8]
cmp r0, r1
movcs r0, #0x0
addcc r0, r2, r0, lsl #0x4
ldrcc r0, [r0, #0x10]
bx lr
.balign 4
_020C21A0: .word sCurrent
arm_func_start NNS_SndArcGetGroupInfo
NNS_SndArcGetGroupInfo: ; 0x020C21A4
ldr r1, _020C2204 ; =sCurrent
ldr r3, [r1, #0x0]
ldr r2, [r3, #0x8c]
ldr r1, [r2, #0x1c]
cmp r1, #0x0
moveq r2, #0x0
addne r2, r2, r1
cmp r2, #0x0
moveq r0, #0x0
bxeq lr
cmp r0, #0x0
movlt r0, #0x0
bxlt lr
ldr r1, [r2, #0x0]
cmp r0, r1
movcs r0, #0x0
bxcs lr
add r0, r2, r0, lsl #0x2
ldr r1, [r0, #0x4]
ldr r0, [r3, #0x8c]
cmp r1, #0x0
moveq r0, #0x0
addne r0, r0, r1
bx lr
.balign 4
_020C2204: .word sCurrent
arm_func_start NNS_SndArcGetPlayerInfo
NNS_SndArcGetPlayerInfo: ; 0x020C2208
ldr r1, _020C2268 ; =sCurrent
ldr r3, [r1, #0x0]
ldr r2, [r3, #0x8c]
ldr r1, [r2, #0x18]
cmp r1, #0x0
moveq r2, #0x0
addne r2, r2, r1
cmp r2, #0x0
moveq r0, #0x0
bxeq lr
cmp r0, #0x0
movlt r0, #0x0
bxlt lr
ldr r1, [r2, #0x0]
cmp r0, r1
movcs r0, #0x0
bxcs lr
add r0, r2, r0, lsl #0x2
ldr r1, [r0, #0x4]
ldr r0, [r3, #0x8c]
cmp r1, #0x0
moveq r0, #0x0
addne r0, r0, r1
bx lr
.balign 4
_020C2268: .word sCurrent
arm_func_start NNS_SndArcGetWaveArcInfo
NNS_SndArcGetWaveArcInfo: ; 0x020C226C
ldr r1, _020C22CC ; =sCurrent
ldr r3, [r1, #0x0]
ldr r2, [r3, #0x8c]
ldr r1, [r2, #0x14]
cmp r1, #0x0
moveq r2, #0x0
addne r2, r2, r1
cmp r2, #0x0
moveq r0, #0x0
bxeq lr
cmp r0, #0x0
movlt r0, #0x0
bxlt lr
ldr r1, [r2, #0x0]
cmp r0, r1
movcs r0, #0x0
bxcs lr
add r0, r2, r0, lsl #0x2
ldr r1, [r0, #0x4]
ldr r0, [r3, #0x8c]
cmp r1, #0x0
moveq r0, #0x0
addne r0, r0, r1
bx lr
.balign 4
_020C22CC: .word sCurrent
arm_func_start NNS_SndArcGetBankInfo
NNS_SndArcGetBankInfo: ; 0x020C22D0
ldr r1, _020C2330 ; =sCurrent
ldr r3, [r1, #0x0]
ldr r2, [r3, #0x8c]
ldr r1, [r2, #0x10]
cmp r1, #0x0
moveq r2, #0x0
addne r2, r2, r1
cmp r2, #0x0
moveq r0, #0x0
bxeq lr
cmp r0, #0x0
movlt r0, #0x0
bxlt lr
ldr r1, [r2, #0x0]
cmp r0, r1
movcs r0, #0x0
bxcs lr
add r0, r2, r0, lsl #0x2
ldr r1, [r0, #0x4]
ldr r0, [r3, #0x8c]
cmp r1, #0x0
moveq r0, #0x0
addne r0, r0, r1
bx lr
.balign 4
_020C2330: .word sCurrent
arm_func_start NNS_SndArcGetSeqArcInfo
NNS_SndArcGetSeqArcInfo: ; 0x020C2334
ldr r1, _020C2394 ; =sCurrent
ldr r3, [r1, #0x0]
ldr r2, [r3, #0x8c]
ldr r1, [r2, #0xc]
cmp r1, #0x0
moveq r2, #0x0
addne r2, r2, r1
cmp r2, #0x0
moveq r0, #0x0
bxeq lr
cmp r0, #0x0
movlt r0, #0x0
bxlt lr
ldr r1, [r2, #0x0]
cmp r0, r1
movcs r0, #0x0
bxcs lr
add r0, r2, r0, lsl #0x2
ldr r1, [r0, #0x4]
ldr r0, [r3, #0x8c]
cmp r1, #0x0
moveq r0, #0x0
addne r0, r0, r1
bx lr
.balign 4
_020C2394: .word sCurrent
arm_func_start NNS_SndArcGetSeqInfo
NNS_SndArcGetSeqInfo: ; 0x020C2398
ldr r1, _020C23F8 ; =sCurrent
ldr r3, [r1, #0x0]
ldr r2, [r3, #0x8c]
ldr r1, [r2, #0x8]
cmp r1, #0x0
moveq r2, #0x0
addne r2, r2, r1
cmp r2, #0x0
moveq r0, #0x0
bxeq lr
cmp r0, #0x0
movlt r0, #0x0
bxlt lr
ldr r1, [r2, #0x0]
cmp r0, r1
movcs r0, #0x0
bxcs lr
add r0, r2, r0, lsl #0x2
ldr r1, [r0, #0x4]
ldr r0, [r3, #0x8c]
cmp r1, #0x0
moveq r0, #0x0
addne r0, r0, r1
bx lr
.balign 4
_020C23F8: .word sCurrent
arm_func_start NNS_SndArcGetSeqParam
NNS_SndArcGetSeqParam: ; 0x020C23FC
stmdb sp!, {lr}
sub sp, sp, #0x4
bl NNS_SndArcGetSeqInfo
cmp r0, #0x0
moveq r0, #0x0
addne r0, r0, #0x4
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndArcGetCurrent
NNS_SndArcGetCurrent: ; 0x020C241C
ldr r0, _020C2428 ; =sCurrent
ldr r0, [r0, #0x0]
bx lr
.balign 4
_020C2428: .word sCurrent
arm_func_start NNS_SndArcSetCurrent
NNS_SndArcSetCurrent: ; 0x020C242C
ldr r1, _020C2440 ; =sCurrent
ldr r2, [r1, #0x0]
str r0, [r1, #0x0]
mov r0, r2
bx lr
.balign 4
_020C2440: .word sCurrent
arm_func_start NNS_SndArcInitOnMemory
NNS_SndArcInitOnMemory: ; 0x020C2444
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r1
mov r0, r4
mov r1, r5
mov r2, #0x30
bl MIi_CpuCopy32
ldr r0, [r5, #0x18]
mov r12, #0x0
cmp r0, #0x0
moveq r0, #0x0
addne r0, r4, r0
str r0, [r5, #0x8c]
ldr r0, [r5, #0x20]
cmp r0, #0x0
moveq r0, #0x0
addne r0, r4, r0
str r0, [r5, #0x84]
ldr r0, [r5, #0x10]
cmp r0, #0x0
moveq r0, #0x0
addne r0, r4, r0
str r0, [r5, #0x88]
ldr r2, [r5, #0x84]
ldr r0, [r2, #0x8]
cmp r0, #0x0
bls _020C24F0
mov r3, r12
mov r1, r12
_020C24BC:
add r2, r2, #0xc
ldr r0, [r2, r3]
add r2, r2, r3
cmp r0, #0x0
moveq r0, r1
addne r0, r4, r0
str r0, [r2, #0x8]
ldr r2, [r5, #0x84]
add r12, r12, #0x1
ldr r0, [r2, #0x8]
add r3, r3, #0x10
cmp r12, r0
blo _020C24BC
_020C24F0:
mov r1, #0x0
ldr r0, _020C2508 ; =sCurrent
str r1, [r5, #0x30]
str r5, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020C2508: .word sCurrent
SDATi_ReadHeaders:
stmdb sp!, {r4-r6,lr}
sub sp, sp, #0x8
mov r6, r0
mov r5, r1
mov r1, #0x0
mov r4, r2
mov r2, r1
add r0, r6, #0x34
bl FS_SeekFile
cmp r0, #0x0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
mov r1, r6
add r0, r6, #0x34
mov r2, #0x30
bl FS_ReadFile
cmp r0, #0x30
addne sp, sp, #0x8
movne r0, #0x0
ldmneia sp!, {r4-r6,pc}
cmp r5, #0x0
beq _020C26E0
mov r0, #0x0
str r0, [sp, #0x0]
ldr r1, [r6, #0x1c]
ldr r2, _020C26EC ; =InfoDisposeCallback
mov r0, r5
mov r3, r6
bl NNS_SndHeapAlloc
str r0, [r6, #0x8c]
ldr r0, [r6, #0x8c]
cmp r0, #0x0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
ldr r1, [r6, #0x18]
add r0, r6, #0x34
mov r2, #0x0
bl FS_SeekFile
cmp r0, #0x0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
ldr r1, [r6, #0x8c]
ldr r2, [r6, #0x1c]
add r0, r6, #0x34
bl FS_ReadFile
ldr r1, [r6, #0x1c]
cmp r0, r1
addne sp, sp, #0x8
movne r0, #0x0
ldmneia sp!, {r4-r6,pc}
mov r0, #0x0
str r0, [sp, #0x0]
ldr r1, [r6, #0x24]
ldr r2, _020C26F0 ; =FatDisposeCallback
mov r0, r5
mov r3, r6
bl NNS_SndHeapAlloc
str r0, [r6, #0x84]
ldr r0, [r6, #0x84]
cmp r0, #0x0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
ldr r1, [r6, #0x20]
add r0, r6, #0x34
mov r2, #0x0
bl FS_SeekFile
cmp r0, #0x0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r6,pc}
ldr r1, [r6, #0x84]
ldr r2, [r6, #0x24]
add r0, r6, #0x34
bl FS_ReadFile
ldr r1, [r6, #0x24]
cmp r0, r1
addne sp, sp, #0x8
movne r0, #0x0
ldmneia sp!, {r4-r6,pc}
cmp r4, #0x0
beq _020C26E0
ldr r1, [r6, #0x14]
cmp r1, #0x0
beq _020C26E0
mov r4, #0x0
ldr r2, _020C26F4 ; =SymbolDisposeCallback
mov r0, r5
mov r3, r6
str r4, [sp, #0x0]
bl NNS_SndHeapAlloc
str r0, [r6, #0x88]
ldr r0, [r6, #0x88]
cmp r0, #0x0
addeq sp, sp, #0x8
moveq r0, r4
ldmeqia sp!, {r4-r6,pc}
ldr r1, [r6, #0x10]
add r0, r6, #0x34
mov r2, r4
bl FS_SeekFile
cmp r0, #0x0
addeq sp, sp, #0x8
moveq r0, r4
ldmeqia sp!, {r4-r6,pc}
ldr r1, [r6, #0x88]
ldr r2, [r6, #0x14]
add r0, r6, #0x34
bl FS_ReadFile
ldr r1, [r6, #0x14]
cmp r0, r1
addne sp, sp, #0x8
movne r0, r4
ldmneia sp!, {r4-r6,pc}
_020C26E0:
mov r0, #0x1
add sp, sp, #0x8
ldmia sp!, {r4-r6,pc}
.balign 4
_020C26EC: .word InfoDisposeCallback
_020C26F0: .word FatDisposeCallback
_020C26F4: .word SymbolDisposeCallback
arm_func_start NNS_SndArcInit
NNS_SndArcInit: ; 0x020C26F8
; r0: &sSoundDataBuffer
; r1: char* filename
; r2: (&sSoundDataBuffer)->unk_0090
; r3: 0
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r12, #0x0
str r12, [r6, #0x8c]
str r12, [r6, #0x84]
add r0, r6, #0x7c
mov r5, r2
mov r4, r3
str r12, [r6, #0x88]
bl FS_ConvertPathToFileID
cmp r0, #0x0
ldmeqia sp!, {r4-r6,pc}
add r0, r6, #0x34
bl FS_InitFile
add r1, r6, #0x7c
add r0, r6, #0x34
ldmia r1, {r1-r2}
bl FS_OpenFileFast
cmp r0, #0x0
ldmeqia sp!, {r4-r6,pc}
mov r3, #0x1
mov r0, r6
mov r1, r5
mov r2, r4
str r3, [r6, #0x30]
bl SDATi_ReadHeaders
cmp r0, #0x0
ldrne r0, _020C2770 ; =sCurrent
strne r6, [r0, #0x0]
ldmia sp!, {r4-r6,pc}
.balign 4
_020C2770: .word sCurrent

View File

@@ -0,0 +1,872 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global waveArcHeader$8213
waveArcHeader$8213: ; 0x021D28C4
.space 0x3c
.section .text
arm_func_start LoadSingleWaves
LoadSingleWaves: ; 0x020C2B1C
stmdb sp!, {r4-r10,lr}
sub sp, sp, #0x20
mov r8, r0
add r0, sp, #0x8
mov r7, r1
mov r6, r2
mov r5, r3
ldr r4, [sp, #0x40]
bl SND_GetFirstInstDataPos
ldr r1, [sp, #0x8]
ldr r0, [sp, #0xc]
str r1, [sp, #0x0]
str r0, [sp, #0x4]
cmp r7, #0x0
add r2, sp, #0x0
addeq sp, sp, #0x20
moveq r0, #0x0
ldmeqia sp!, {r4-r10,pc}
add r1, sp, #0x10
mov r0, r7
bl SND_GetNextInstData
cmp r0, #0x0
beq _020C2BD4
add r10, sp, #0x10
add r9, sp, #0x0
_020C2B80:
ldrb r0, [sp, #0x10]
cmp r0, #0x1
bne _020C2BBC
ldrh r0, [sp, #0x14]
cmp r6, r0
bne _020C2BBC
ldrh r1, [sp, #0x12]
mov r0, r8
mov r2, r5
mov r3, r4
bl LoadSingleWave
cmp r0, #0x0
addeq sp, sp, #0x20
moveq r0, #0x0
ldmeqia sp!, {r4-r10,pc}
_020C2BBC:
mov r0, r7
mov r1, r10
mov r2, r9
bl SND_GetNextInstData
cmp r0, #0x0
bne _020C2B80
_020C2BD4:
mov r0, #0x1
add sp, sp, #0x20
ldmia sp!, {r4-r10,pc}
arm_func_start LoadSingleWave
LoadSingleWave: ; 0x020C2BE0
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
mov r5, r2
mov r4, r3
bl SND_GetWaveDataAddress
cmp r0, #0x0
addne sp, sp, #0x4
movne r0, #0x1
ldmneia sp!, {r4-r9,pc}
mov r0, r7
bl SND_GetWaveDataCount
ldr r1, [r7, #0x38]
sub r0, r0, #0x1
add r1, r1, r6
add r1, r7, r1, lsl #0x2
cmp r6, r0
ldrcc r0, [r1, #0x40]
ldr r8, [r1, #0x3c]
ldrcs r0, [r7, #0x8]
cmp r4, #0x0
sub r9, r0, r8
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r9,pc}
ldr r2, _020C2CBC ; =SingleWaveDisposeCallback
mov r0, r4
mov r3, r7
add r1, r9, #0x20
str r6, [sp, #0x0]
bl NNS_SndHeapAlloc
movs r4, r0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r9,pc}
mov r0, r5
mov r1, r4
mov r2, r9
mov r3, r8
bl NNS_SndArcReadFile
cmp r9, r0
addne sp, sp, #0x4
movne r0, #0x0
ldmneia sp!, {r4-r9,pc}
mov r0, r4
mov r1, r9
bl DC_StoreRange
mov r0, r7
mov r1, r6
mov r2, r4
bl SND_SetWaveDataAddress
mov r0, #0x1
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
.balign 4
_020C2CBC: .word SingleWaveDisposeCallback
arm_func_start SingleWaveDisposeCallback
SingleWaveDisposeCallback: ; 0x020C2CC0
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r5, r2
mov r7, r0
mov r4, r3
mov r6, r1
mov r0, r5
mov r1, r4
bl SND_GetWaveDataAddress
cmp r7, r0
bne _020C2CFC
mov r0, r5
mov r1, r4
mov r2, #0x0
bl SND_SetWaveDataAddress
_020C2CFC:
mov r0, r7
add r1, r7, r6
bl SND_InvalidateWaveData
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_start WaveArcTableDisposeCallback
WaveArcTableDisposeCallback: ; 0x020C2D10
stmdb sp!, {r4,lr}
mov r1, r2
mov r4, r0
mov r2, r3
bl DisposeCallback
mov r0, r4
bl SND_DestroyWaveArc
ldmia sp!, {r4,pc}
arm_func_start WaveArcDisposeCallback
WaveArcDisposeCallback: ; 0x020C2D30
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r1
mov r1, r2
mov r5, r0
mov r2, r3
bl DisposeCallback
mov r0, r5
add r1, r5, r4
bl SND_InvalidateWaveData
mov r0, r5
bl SND_DestroyWaveArc
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_start BankDisposeCallback
BankDisposeCallback: ; 0x020C2D68
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r1
mov r1, r2
mov r5, r0
mov r2, r3
bl DisposeCallback
mov r0, r5
add r1, r5, r4
bl SND_InvalidateBankData
mov r0, r5
bl SND_DestroyBank
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_start SeqDisposeCallback
SeqDisposeCallback: ; 0x020C2DA0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r1
mov r1, r2
mov r5, r0
mov r2, r3
bl DisposeCallback
mov r0, r5
add r1, r5, r4
bl SND_InvalidateSeqData
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_start DisposeCallback
DisposeCallback: ; 0x020C2DD0
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
movs r5, r1
mov r7, r0
mov r6, r2
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r7,pc}
bl OS_DisableInterrupts
mov r4, r0
mov r0, r5
bl NNS_SndArcSetCurrent
mov r5, r0
mov r0, r6
bl NNS_SndArcGetFileAddress
cmp r7, r0
bne _020C2E1C
mov r0, r6
mov r1, #0x0
bl NNS_SndArcSetFileAddress
_020C2E1C:
mov r0, r5
bl NNS_SndArcSetCurrent
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_start LoadWaveArcTable
LoadWaveArcTable: ; 0x020C2E34
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x4
mov r9, r0
mov r8, r1
mov r7, r2
bl NNS_SndArcGetFileAddress
movs r6, r0
bne _020C2F40
ldr r1, _020C2F4C ; =waveArcHeader$8213
mov r0, r9
mov r2, #0x3c
mov r3, #0x0
bl NNS_SndArcReadFile
cmp r0, #0x3c
addne sp, sp, #0x4
movne r0, #0x0
ldmneia sp!, {r4-r9,pc}
ldr r0, _020C2F4C ; =waveArcHeader$8213
cmp r8, #0x0
ldr r0, [r0, #0x38]
addeq sp, sp, #0x4
mov r4, r0, lsl #0x2
mov r0, r4, lsl #0x1
add r5, r0, #0x3c
moveq r0, #0x0
ldmeqia sp!, {r4-r9,pc}
cmp r7, #0x0
moveq r3, #0x0
beq _020C2EB0
bl NNS_SndArcGetCurrent
mov r3, r0
_020C2EB0:
ldr r2, _020C2F50 ; =WaveArcTableDisposeCallback
mov r0, r8
add r1, r5, #0x20
str r9, [sp, #0x0]
bl NNS_SndHeapAlloc
movs r6, r0
addeq sp, sp, #0x4
moveq r0, #0x0
ldmeqia sp!, {r4-r9,pc}
mov r0, r9
mov r1, r6
add r2, r4, #0x3c
mov r3, #0x0
bl NNS_SndArcReadFile
add r1, r4, #0x3c
cmp r0, r1
addne sp, sp, #0x4
movne r0, #0x0
ldmneia sp!, {r4-r9,pc}
ldr r1, [r6, #0x38]
add r0, r6, #0x3c
mov r2, r4
add r1, r0, r1, lsl #0x2
bl MI_CpuCopy8
mov r2, r4
add r0, r6, #0x3c
mov r1, #0x0
bl MI_CpuFill8
mov r0, r6
mov r1, r5
bl DC_StoreRange
cmp r7, #0x0
beq _020C2F40
mov r0, r9
mov r1, r6
bl NNS_SndArcSetFileAddress
_020C2F40:
mov r0, r6
add sp, sp, #0x4
ldmia sp!, {r4-r9,pc}
.balign 4
_020C2F4C: .word waveArcHeader$8213
_020C2F50: .word WaveArcTableDisposeCallback
arm_func_start LoadWaveArc
LoadWaveArc: ; 0x020C2F54
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
mov r5, r2
bl NNS_SndArcGetFileAddress
movs r4, r0
bne _020C2FBC
cmp r5, #0x0
moveq r2, #0x0
beq _020C2F88
bl NNS_SndArcGetCurrent
mov r2, r0
_020C2F88:
ldr r1, _020C2FC8 ; =WaveArcDisposeCallback
mov r0, r7
mov r3, r7
str r6, [sp, #0x0]
bl NNSi_SndArcLoadFile
mov r4, r0
cmp r5, #0x0
beq _020C2FBC
cmp r4, #0x0
beq _020C2FBC
mov r0, r7
mov r1, r4
bl NNS_SndArcSetFileAddress
_020C2FBC:
mov r0, r4
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020C2FC8: .word WaveArcDisposeCallback
arm_func_start LoadBank
LoadBank: ; 0x020C2FCC
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
mov r5, r2
bl NNS_SndArcGetFileAddress
movs r4, r0
bne _020C3034
cmp r5, #0x0
moveq r2, #0x0
beq _020C3000
bl NNS_SndArcGetCurrent
mov r2, r0
_020C3000:
ldr r1, _020C3040 ; =BankDisposeCallback
mov r0, r7
mov r3, r7
str r6, [sp, #0x0]
bl NNSi_SndArcLoadFile
mov r4, r0
cmp r5, #0x0
beq _020C3034
cmp r4, #0x0
beq _020C3034
mov r0, r7
mov r1, r4
bl NNS_SndArcSetFileAddress
_020C3034:
mov r0, r4
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020C3040: .word BankDisposeCallback
arm_func_start LoadSeqArc
LoadSeqArc: ; 0x020C3044
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
mov r5, r2
bl NNS_SndArcGetFileAddress
movs r4, r0
bne _020C30AC
cmp r5, #0x0
moveq r2, #0x0
beq _020C3078
bl NNS_SndArcGetCurrent
mov r2, r0
_020C3078:
ldr r1, _020C30B8 ; =SeqDisposeCallback
mov r0, r7
mov r3, r7
str r6, [sp, #0x0]
bl NNSi_SndArcLoadFile
mov r4, r0
cmp r5, #0x0
beq _020C30AC
cmp r4, #0x0
beq _020C30AC
mov r0, r7
mov r1, r4
bl NNS_SndArcSetFileAddress
_020C30AC:
mov r0, r4
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020C30B8: .word SeqDisposeCallback
arm_func_start LoadSeq
LoadSeq: ; 0x020C30BC
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
mov r5, r2
bl NNS_SndArcGetFileAddress
movs r4, r0
bne _020C3124
cmp r5, #0x0
moveq r2, #0x0
beq _020C30F0
bl NNS_SndArcGetCurrent
mov r2, r0
_020C30F0:
ldr r1, _020C3130 ; =SeqDisposeCallback
mov r0, r7
mov r3, r7
str r6, [sp, #0x0]
bl NNSi_SndArcLoadFile
mov r4, r0
cmp r5, #0x0
beq _020C3124
cmp r4, #0x0
beq _020C3124
mov r0, r7
mov r1, r4
bl NNS_SndArcSetFileAddress
_020C3124:
mov r0, r4
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020C3130: .word SeqDisposeCallback
arm_func_start NNSi_SndArcLoadFile
NNSi_SndArcLoadFile: ; 0x020C3134
stmdb sp!, {r4-r8,lr}
sub sp, sp, #0x8
mov r8, r0
mov r7, r1
mov r6, r2
mov r4, r3
bl NNS_SndArcGetFileSize
movs r5, r0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r8,pc}
ldr r0, [sp, #0x20]
cmp r0, #0x0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r8,pc}
mov r2, r7
mov r3, r6
add r1, r5, #0x20
str r4, [sp, #0x0]
bl NNS_SndHeapAlloc
movs r4, r0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r8,pc}
mov r0, r8
mov r1, r4
mov r2, r5
mov r3, #0x0
bl NNS_SndArcReadFile
cmp r5, r0
addne sp, sp, #0x8
movne r0, #0x0
ldmneia sp!, {r4-r8,pc}
mov r0, r4
mov r1, r5
bl DC_StoreRange
mov r0, r4
add sp, sp, #0x8
ldmia sp!, {r4-r8,pc}
arm_func_start NNSi_SndArcLoadWaveArc
NNSi_SndArcLoadWaveArc: ; 0x020C31D4
stmdb sp!, {r4-r6,lr}
mov r6, r1
mov r5, r2
mov r4, r3
bl NNS_SndArcGetWaveArcInfo
cmp r0, #0x0
moveq r0, #0x5
ldmeqia sp!, {r4-r6,pc}
ands r1, r6, #0x4
beq _020C324C
ldrb r1, [r0, #0x3]
ands r1, r1, #0x1
beq _020C3224
ldr r0, [r0, #0x0]
mov r1, r5
mov r0, r0, lsl #0x8
mov r2, r4
mov r0, r0, lsr #0x8
bl LoadWaveArcTable
b _020C323C
_020C3224:
ldr r0, [r0, #0x0]
mov r1, r5
mov r0, r0, lsl #0x8
mov r2, r4
mov r0, r0, lsr #0x8
bl LoadWaveArc
_020C323C:
cmp r0, #0x0
bne _020C325C
mov r0, #0x9
ldmia sp!, {r4-r6,pc}
_020C324C:
ldr r0, [r0, #0x0]
mov r0, r0, lsl #0x8
mov r0, r0, lsr #0x8
bl NNS_SndArcGetFileAddress
_020C325C:
ldr r1, [sp, #0x10]
cmp r1, #0x0
strne r0, [r1, #0x0]
mov r0, #0x0
ldmia sp!, {r4-r6,pc}
arm_func_start NNSi_SndArcLoadBank
NNSi_SndArcLoadBank: ; 0x020C3270
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0xc
mov r10, r1
mov r9, r2
mov r11, r3
bl NNS_SndArcGetBankInfo
movs r8, r0
addeq sp, sp, #0xc
moveq r0, #0x4
ldmeqia sp!, {r4-r11,pc}
ands r0, r10, #0x2
beq _020C32C4
ldr r0, [r8, #0x0]
mov r1, r9
mov r2, r11
bl LoadBank
movs r7, r0
bne _020C32D0
add sp, sp, #0xc
mov r0, #0x8
ldmia sp!, {r4-r11,pc}
_020C32C4:
ldr r0, [r8, #0x0]
bl NNS_SndArcGetFileAddress
mov r7, r0
_020C32D0:
and r5, r10, #0x4
mov r6, #0x0
_020C32D8:
add r0, r8, r6, lsl #0x1
ldrh r0, [r0, #0x4]
ldr r1, _020C33B4 ; =0x0000FFFF
cmp r0, r1
beq _020C3390
bl NNS_SndArcGetWaveArcInfo
movs r4, r0
addeq sp, sp, #0xc
moveq r0, #0x5
ldmeqia sp!, {r4-r11,pc}
add r0, sp, #0x4
str r0, [sp, #0x0]
add r0, r8, r6, lsl #0x1
ldrh r0, [r0, #0x4]
mov r1, r10
mov r2, r9
mov r3, r11
bl NNSi_SndArcLoadWaveArc
cmp r0, #0x0
addne sp, sp, #0xc
ldmneia sp!, {r4-r11,pc}
ldrb r0, [r4, #0x3]
ands r0, r0, #0x1
beq _020C3370
cmp r5, #0x0
beq _020C3370
str r9, [sp, #0x0]
ldr r1, [r4, #0x0]
ldr r0, [sp, #0x4]
mov r3, r1, lsl #0x8
mov r1, r7
mov r2, r6
mov r3, r3, lsr #0x8
bl LoadSingleWaves
cmp r0, #0x0
addeq sp, sp, #0xc
moveq r0, #0x9
ldmeqia sp!, {r4-r11,pc}
_020C3370:
cmp r7, #0x0
beq _020C3390
ldr r2, [sp, #0x4]
cmp r2, #0x0
beq _020C3390
mov r0, r7
mov r1, r6
bl SND_AssignWaveArc
_020C3390:
add r6, r6, #0x1
cmp r6, #0x4
blt _020C32D8
ldr r0, [sp, #0x30]
cmp r0, #0x0
strne r7, [r0, #0x0]
mov r0, #0x0
add sp, sp, #0xc
ldmia sp!, {r4-r11,pc}
.balign 4
_020C33B4: .word 0x0000FFFF
arm_func_start NNSi_SndArcLoadSeqArc
NNSi_SndArcLoadSeqArc: ; 0x020C33B8
stmdb sp!, {r4-r6,lr}
mov r6, r1
mov r5, r2
mov r4, r3
bl NNS_SndArcGetSeqArcInfo
cmp r0, #0x0
moveq r0, #0x3
ldmeqia sp!, {r4-r6,pc}
ands r1, r6, #0x8
beq _020C3400
ldr r0, [r0, #0x0]
mov r1, r5
mov r2, r4
bl LoadSeqArc
cmp r0, #0x0
bne _020C3408
mov r0, #0x7
ldmia sp!, {r4-r6,pc}
_020C3400:
ldr r0, [r0, #0x0]
bl NNS_SndArcGetFileAddress
_020C3408:
ldr r1, [sp, #0x10]
cmp r1, #0x0
strne r0, [r1, #0x0]
mov r0, #0x0
ldmia sp!, {r4-r6,pc}
arm_func_start NNSi_SndArcLoadSeq
NNSi_SndArcLoadSeq: ; 0x020C341C
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r1
mov r6, r2
mov r5, r3
bl NNS_SndArcGetSeqInfo
movs r4, r0
addeq sp, sp, #0x4
moveq r0, #0x2
ldmeqia sp!, {r4-r7,pc}
mov r0, #0x0
str r0, [sp, #0x0]
ldrh r0, [r4, #0x4]
mov r1, r7
mov r2, r6
mov r3, r5
bl NNSi_SndArcLoadBank
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {r4-r7,pc}
ands r0, r7, #0x1
beq _020C3498
ldr r0, [r4, #0x0]
mov r1, r6
mov r2, r5
bl LoadSeq
cmp r0, #0x0
bne _020C34A0
add sp, sp, #0x4
mov r0, #0x6
ldmia sp!, {r4-r7,pc}
_020C3498:
ldr r0, [r4, #0x0]
bl NNS_SndArcGetFileAddress
_020C34A0:
ldr r1, [sp, #0x18]
cmp r1, #0x0
strne r0, [r1, #0x0]
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
arm_func_start NNSi_SndArcLoadGroup
NNSi_SndArcLoadGroup: ; 0x020C34B8
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0xc
mov r9, r1
bl NNS_SndArcGetGroupInfo
movs r8, r0
addeq sp, sp, #0xc
moveq r0, #0x1
ldmeqia sp!, {r4-r11,pc}
ldr r0, [r8, #0x0]
mov r7, #0x0
cmp r0, #0x0
bls _020C35D4
add r6, r8, #0x4
str r7, [sp, #0x4]
mov r11, r7
mov r10, r7
mov r5, r7
mov r4, #0x1
_020C3500:
ldrb r0, [r6, #0x0]
cmp r0, #0x3
addls pc, pc, r0, lsl #0x2
b _020C35C0
; Jump table
b _020C3520 ; case 0
b _020C3570 ; case 1
b _020C3598 ; case 2
b _020C3548 ; case 3
_020C3520:
str r5, [sp, #0x0]
ldrb r1, [r6, #0x1]
ldr r0, [r6, #0x4]
mov r2, r9
mov r3, r4
bl NNSi_SndArcLoadSeq
cmp r0, #0x0
beq _020C35C0
add sp, sp, #0xc
ldmia sp!, {r4-r11,pc}
_020C3548:
str r10, [sp, #0x0]
ldrb r1, [r6, #0x1]
ldr r0, [r6, #0x4]
mov r2, r9
mov r3, r4
bl NNSi_SndArcLoadSeqArc
cmp r0, #0x0
beq _020C35C0
add sp, sp, #0xc
ldmia sp!, {r4-r11,pc}
_020C3570:
str r11, [sp, #0x0]
ldrb r1, [r6, #0x1]
ldr r0, [r6, #0x4]
mov r2, r9
mov r3, r4
bl NNSi_SndArcLoadBank
cmp r0, #0x0
beq _020C35C0
add sp, sp, #0xc
ldmia sp!, {r4-r11,pc}
_020C3598:
ldr r0, [sp, #0x4]
mov r2, r9
str r0, [sp, #0x0]
ldrb r1, [r6, #0x1]
ldr r0, [r6, #0x4]
mov r3, r4
bl NNSi_SndArcLoadWaveArc
cmp r0, #0x0
addne sp, sp, #0xc
ldmneia sp!, {r4-r11,pc}
_020C35C0:
ldr r0, [r8, #0x0]
add r7, r7, #0x1
cmp r7, r0
add r6, r6, #0x8
blo _020C3500
_020C35D4:
mov r0, #0x0
add sp, sp, #0xc
ldmia sp!, {r4-r11,pc}
arm_func_start NNS_SndArcLoadSeqEx
NNS_SndArcLoadSeqEx: ; 0x020C35E0
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r12, #0x0
mov r3, #0x1
str r12, [sp, #0x0]
bl NNSi_SndArcLoadSeq
cmp r0, #0x0
moveq r0, #0x1
movne r0, #0x0
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndArcLoadWaveArc
NNS_SndArcLoadWaveArc: ; 0x020C360C
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r2, r1
mov r12, #0x0
mov r1, #0xff
mov r3, #0x1
str r12, [sp, #0x0]
bl NNSi_SndArcLoadWaveArc
cmp r0, #0x0
moveq r0, #0x1
movne r0, #0x0
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndArcLoadBank
NNS_SndArcLoadBank: ; 0x020C3640
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r2, r1
mov r12, #0x0
mov r1, #0xff
mov r3, #0x1
str r12, [sp, #0x0]
bl NNSi_SndArcLoadBank
cmp r0, #0x0
moveq r0, #0x1
movne r0, #0x0
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndArcLoadSeq
NNS_SndArcLoadSeq: ; 0x020C3674
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r2, r1
mov r12, #0x0
mov r1, #0xff
mov r3, #0x1
str r12, [sp, #0x0]
bl NNSi_SndArcLoadSeq
cmp r0, #0x0
moveq r0, #0x1
movne r0, #0x0
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndArcLoadGroup
NNS_SndArcLoadGroup: ; 0x020C36A8
stmdb sp!, {lr}
sub sp, sp, #0x4
bl NNSi_SndArcLoadGroup
cmp r0, #0x0
moveq r0, #0x1
movne r0, #0x0
add sp, sp, #0x4
ldmia sp!, {pc}

View File

@@ -0,0 +1,261 @@
.include "asm/macros.inc"
.include "global.inc"
.section .text
arm_func_start StartSeqArc
StartSeqArc: ; 0x020C36C8
stmdb sp!, {r4-r8,lr}
sub sp, sp, #0x8
mov r7, r2
mov r2, r3
ldr r6, [sp, #0x20]
mov r4, r0
mov r8, r1
bl NNSi_SndPlayerAllocSeqPlayer
movs r5, r0
addeq sp, sp, #0x8
moveq r0, #0x0
ldmeqia sp!, {r4-r8,pc}
mov r0, r8
mov r1, r5
bl NNSi_SndPlayerAllocHeap
add r12, sp, #0x4
mov r2, r0
mov r0, r7
mov r1, #0x6
mov r3, #0x0
str r12, [sp, #0x0]
bl NNSi_SndArcLoadBank
cmp r0, #0x0
beq _020C373C
mov r0, r5
bl NNSi_SndPlayerFreeSeqPlayer
add sp, sp, #0x8
mov r0, #0x0
ldmia sp!, {r4-r8,pc}
_020C373C:
ldr r12, [sp, #0x24]
ldr r2, [r6, #0x0]
ldr r1, [r12, #0x18]
ldr r3, [sp, #0x4]
mov r0, r5
add r1, r12, r1
bl NNSi_SndPlayerStartSeq
ldrb r1, [r6, #0x6]
mov r0, r4
bl NNS_SndPlayerSetInitialVolume
ldrb r1, [r6, #0x7]
mov r0, r4
bl NNS_SndPlayerSetChannelPriority
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x2c]
mov r0, r4
bl NNS_SndPlayerSetSeqArcNo
mov r0, #0x1
add sp, sp, #0x8
ldmia sp!, {r4-r8,pc}
arm_func_start StartSeq
StartSeq: ; 0x020C378C
stmdb sp!, {r4-r8,lr}
sub sp, sp, #0x10
mov r8, r2
mov r2, r3
ldr r5, [sp, #0x28]
mov r6, r0
mov r7, r1
bl NNSi_SndPlayerAllocSeqPlayer
movs r4, r0
addeq sp, sp, #0x10
moveq r0, #0x0
ldmeqia sp!, {r4-r8,pc}
mov r0, r7
mov r1, r4
bl NNSi_SndPlayerAllocHeap
mov r7, r0
add r12, sp, #0x8
mov r0, r8
mov r2, r7
mov r1, #0x6
mov r3, #0x0
str r12, [sp, #0x0]
bl NNSi_SndArcLoadBank
cmp r0, #0x0
beq _020C3804
mov r0, r4
bl NNSi_SndPlayerFreeSeqPlayer
add sp, sp, #0x10
mov r0, #0x0
ldmia sp!, {r4-r8,pc}
_020C3804:
ldr r0, [sp, #0x2c]
add r12, sp, #0x4
mov r2, r7
mov r1, #0x1
mov r3, #0x0
str r12, [sp, #0x0]
bl NNSi_SndArcLoadSeq
cmp r0, #0x0
beq _020C383C
mov r0, r4
bl NNSi_SndPlayerFreeSeqPlayer
add sp, sp, #0x10
mov r0, #0x0
ldmia sp!, {r4-r8,pc}
_020C383C:
ldr r2, [sp, #0x4]
ldr r3, [sp, #0x8]
ldr r1, [r2, #0x18]
mov r0, r4
add r1, r2, r1
mov r2, #0x0
bl NNSi_SndPlayerStartSeq
ldrb r1, [r5, #0x6]
mov r0, r6
bl NNS_SndPlayerSetInitialVolume
ldrb r1, [r5, #0x7]
mov r0, r6
bl NNS_SndPlayerSetChannelPriority
ldr r1, [sp, #0x2c]
mov r0, r6
bl NNS_SndPlayerSetSeqNo
mov r0, #0x1
add sp, sp, #0x10
ldmia sp!, {r4-r8,pc}
arm_func_start NNS_SndArcPlayerStartSeqArc
NNS_SndArcPlayerStartSeqArc: ; 0x020C3888
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x14
mov r6, r1
mov r7, r0
mov r0, r6
mov r5, r2
bl NNS_SndArcGetSeqArcInfo
cmp r0, #0x0
addeq sp, sp, #0x14
moveq r0, #0x0
ldmeqia sp!, {r4-r7,pc}
ldr r0, [r0, #0x0]
bl NNS_SndArcGetFileAddress
movs r4, r0
addeq sp, sp, #0x14
moveq r0, #0x0
ldmeqia sp!, {r4-r7,pc}
mov r1, r5
bl NNSi_SndSeqArcGetSeqInfo
cmp r0, #0x0
addeq sp, sp, #0x14
moveq r0, #0x0
ldmeqia sp!, {r4-r7,pc}
str r0, [sp, #0x0]
str r4, [sp, #0x4]
str r6, [sp, #0x8]
str r5, [sp, #0xc]
ldrb r1, [r0, #0x9]
ldrh r2, [r0, #0x4]
ldrb r3, [r0, #0x8]
mov r0, r7
bl StartSeqArc
add sp, sp, #0x14
ldmia sp!, {r4-r7,pc}
arm_func_start NNS_SndArcPlayerStartSeqEx
NNS_SndArcPlayerStartSeqEx: ; 0x020C3910
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0xc
mov r7, r0
ldr r0, [sp, #0x20]
mov r6, r1
mov r5, r2
mov r4, r3
bl NNS_SndArcGetSeqInfo
cmp r0, #0x0
addeq sp, sp, #0xc
moveq r0, #0x0
ldmeqia sp!, {r4-r7,pc}
cmp r4, #0x0
ldrltb r4, [r0, #0x8]
cmp r5, #0x0
ldrlth r5, [r0, #0x4]
cmp r6, #0x0
ldrltb r6, [r0, #0x9]
ldr r12, [sp, #0x20]
mov r2, r5
str r0, [sp, #0x0]
mov r0, r7
mov r1, r6
mov r3, r4
str r12, [sp, #0x4]
bl StartSeq
add sp, sp, #0xc
ldmia sp!, {r4-r7,pc}
arm_func_start NNS_SndArcPlayerStartSeq
NNS_SndArcPlayerStartSeq: ; 0x020C3980
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0xc
mov r4, r1
mov r5, r0
mov r0, r4
bl NNS_SndArcGetSeqInfo
cmp r0, #0x0
addeq sp, sp, #0xc
moveq r0, #0x0
ldmeqia sp!, {r4-r5,pc}
str r0, [sp, #0x0]
str r4, [sp, #0x4]
ldrb r1, [r0, #0x9]
ldrh r2, [r0, #0x4]
ldrb r3, [r0, #0x8]
mov r0, r5
bl StartSeq
add sp, sp, #0xc
ldmia sp!, {r4-r5,pc}
arm_func_start NNS_SndArcPlayerSetup
NNS_SndArcPlayerSetup: ; 0x020C39CC
stmdb sp!, {r4-r8,lr}
mov r6, r0
bl NNS_SndArcGetCurrent
mov r5, #0x0
mov r7, r5
_020C39E0:
mov r0, r5
bl NNS_SndArcGetPlayerInfo
movs r4, r0
beq _020C3A58
ldrb r1, [r4, #0x0]
mov r0, r5
bl NNS_SndPlayerSetPlayableSeqCount
ldrh r1, [r4, #0x2]
mov r0, r5
bl NNS_SndPlayerSetAllocatableChannel
ldr r0, [r4, #0x4]
cmp r0, #0x0
beq _020C3A58
cmp r6, #0x0
beq _020C3A58
ldrb r0, [r4, #0x0]
mov r8, r7
cmp r0, #0x0
ble _020C3A58
_020C3A2C:
ldr r2, [r4, #0x4]
mov r0, r5
mov r1, r6
bl NNS_SndPlayerCreateHeap
cmp r0, #0x0
moveq r0, #0x0
ldmeqia sp!, {r4-r8,pc}
ldrb r0, [r4, #0x0]
add r8, r8, #0x1
cmp r8, r0
blt _020C3A2C
_020C3A58:
add r5, r5, #0x1
cmp r5, #0x20
blt _020C39E0
mov r0, #0x1
ldmia sp!, {r4-r8,pc}

View File

@@ -0,0 +1,263 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global sPrepareThread
sPrepareThread: ; 0x021D2900
.space 0x4
.global sFreeCommandList
sFreeCommandList: ; 0x021D2904
.space 0xC
; sStrmThread
.global sStrmThread
sStrmThread: ; 0x021D2910
.space 0x4EC
.global sStrmPlayer
sStrmPlayer: ; 0x021D2DFC
.space 0x5c0
.section .text
arm_func_start FreeCommandBuffer
FreeCommandBuffer: ; 0x020C3A6C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
bl OS_DisableInterrupts
mov r4, r0
ldr r0, _020C3A9C ; =sFreeCommandList
mov r1, r5
bl NNS_FndAppendListObject
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020C3A9C: .word sFreeCommandList
arm_func_start RemoveCommandByPlayer
RemoveCommandByPlayer: ; 0x020C3AA0
stmdb sp!, {r4-r8,lr}
mov r8, r0
mov r7, r1
bl OS_DisableInterrupts
mov r6, r0
mov r0, r8
mov r1, #0x0
bl NNS_FndGetNextListObject
movs r5, r0
beq _020C3B04
_020C3AC8:
mov r0, r8
mov r1, r5
bl NNS_FndGetNextListObject
ldr r1, [r5, #0x8]
mov r4, r0
cmp r1, r7
bne _020C3AF8
mov r0, r8
mov r1, r5
bl NNS_FndRemoveListObject
mov r0, r5
bl FreeCommandBuffer
_020C3AF8:
mov r5, r4
cmp r4, #0x0
bne _020C3AC8
_020C3B04:
mov r0, r6
bl OS_RestoreInterrupts
ldmia sp!, {r4-r8,pc}
arm_func_start FreeChannel
FreeChannel: ; 0x020C3B10
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, [r0, #0x120]
cmp r1, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
sub r1, r1, #0x1
str r1, [r0, #0x120]
ldr r1, [r0, #0x120]
cmp r1, #0x0
addne sp, sp, #0x4
ldmneia sp!, {pc}
bl NNS_SndStrmFreeChannel
add sp, sp, #0x4
ldmia sp!, {pc}
local_arm_func_start ShutdownPlayer
ShutdownPlayer: ; 0x020C3B4C
stmdb sp!, {r4,lr}
mov r4, r0
ldr r1, [r4, #0x110]
mov r1, r1, lsl #0x1f
movs r1, r1, asr #0x1f
ldmeqia sp!, {r4,pc}
bl FreeChannel
ldr r1, [r4, #0x164]
mov r0, r4
blx r1
ldr r0, _020C3BA8 ; =sStrmThread + 0x4E0
mov r1, r4
bl RemoveCommandByPlayer
ldr r0, _020C3BAC ; =sPrepareThread
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _020C3B9C
mov r1, r4
add r0, r0, #0x4e0
bl RemoveCommandByPlayer
_020C3B9C:
mov r0, r4
bl FreePlayer
ldmia sp!, {r4,pc}
.balign 4
_020C3BA8: .word sStrmThread + 0x4E0
_020C3BAC: .word sPrepareThread
local_arm_func_start ForceStopStrm
ForceStopStrm: ; 0x020C3BB0
stmdb sp!, {r4,lr}
mov r4, r0
ldr r0, _020C3C40 ; =sStrmThread + 0x4C8
bl OS_LockMutex
ldr r0, _020C3C44 ; =sPrepareThread
ldr r1, [r0, #0x0]
cmp r1, #0x0
beq _020C3BDC
ldr r0, _020C3C48 ; =0x000004C8
add r0, r1, r0
bl OS_LockMutex
_020C3BDC:
ldr r0, [r4, #0x110]
mov r0, r0, lsl #0x1e
movs r0, r0, asr #0x1f
beq _020C3BF4
mov r0, r4
bl NNS_SndStrmStop
_020C3BF4:
ldr r0, [r4, #0x110]
mov r0, r0, lsl #0x1f
movs r0, r0, asr #0x1f
beq _020C3C10
ldr r1, [r4, #0x16c]
mov r0, r4
blx r1
_020C3C10:
mov r0, r4
bl ShutdownPlayer
ldr r0, _020C3C40 ; =sStrmThread + 0x4C8
bl OS_UnlockMutex
ldr r0, _020C3C44 ; =sPrepareThread
ldr r1, [r0, #0x0]
cmp r1, #0x0
ldmeqia sp!, {r4,pc}
ldr r0, _020C3C48 ; =0x000004C8
add r0, r1, r0
bl OS_UnlockMutex
ldmia sp!, {r4,pc}
.balign 4
_020C3C40: .word sStrmThread + 0x4C8
_020C3C44: .word sPrepareThread
_020C3C48: .word 0x000004C8
arm_func_start FreePlayer
FreePlayer: ; 0x020C3C4C
ldr r2, [r0, #0x14c]
cmp r2, #0x0
movne r1, #0x0
strne r1, [r2, #0x0]
strne r1, [r0, #0x14c]
ldr r1, [r0, #0x110]
bic r1, r1, #0x1
str r1, [r0, #0x110]
ldr r1, [r0, #0x110]
bic r1, r1, #0x4
str r1, [r0, #0x110]
ldr r1, [r0, #0x110]
bic r1, r1, #0x2
str r1, [r0, #0x110]
bx lr
arm_func_start NNSi_SndArcStrmMain
NNSi_SndArcStrmMain: ; 0x020C3C88
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr r5, _020C3D94 ; =sStrmPlayer
mov r7, #0x0
ldr r4, _020C3D98 ; =SNDi_DecibelTable
_020C3C9C:
ldr r1, [r5, #0x110]
mov r0, r1, lsl #0x1f
movs r0, r0, asr #0x1f
beq _020C3D7C
ldr r0, [r5, #0x114]
cmp r0, #0x0
bne _020C3CC4
mov r0, r5
bl ForceStopStrm
b _020C3D7C
_020C3CC4:
mov r0, r1, lsl #0x1d
movs r0, r0, asr #0x1f
beq _020C3CFC
ldr r0, [r5, #0x118]
cmp r0, #0x0
beq _020C3CFC
mov r0, r5
bl NNS_SndStrmStart
ldr r0, [r5, #0x110]
orr r0, r0, #0x2
str r0, [r5, #0x110]
ldr r0, [r5, #0x110]
bic r0, r0, #0x4
str r0, [r5, #0x110]
_020C3CFC:
ldr r0, [r5, #0x110]
mov r0, r0, lsl #0x1e
movs r0, r0, asr #0x1f
beq _020C3D7C
add r0, r5, #0xe8
bl NNSi_SndFaderUpdate
ldr r1, [r5, #0x154]
add r0, r5, #0xe8
mov r1, r1, lsl #0x1
ldrsh r6, [r4, r1]
bl NNSi_SndFaderGet
mov r0, r0, asr #0x8
mov r0, r0, lsl #0x1
ldrsh r1, [r4, r0]
ldr r0, [r5, #0x158]
add r6, r1, r6
cmp r6, r0
beq _020C3D54
mov r0, r5
mov r1, r6
bl NNS_SndStrmSetVolume
str r6, [r5, #0x158]
_020C3D54:
ldr r0, [r5, #0x110]
mov r0, r0, lsl #0x1c
movs r0, r0, asr #0x1f
beq _020C3D7C
add r0, r5, #0xe8
bl NNSi_SndFaderIsFinished
cmp r0, #0x0
beq _020C3D7C
mov r0, r5
bl ForceStopStrm
_020C3D7C:
add r7, r7, #0x1
cmp r7, #0x4
add r5, r5, #0x170
blt _020C3C9C
add sp, sp, #0x4
ldmia sp!, {r4-r7,pc}
.balign 4
_020C3D94: .word sStrmPlayer
_020C3D98: .word SNDi_DecibelTable

456
arm9/asm/NNS_SND_stream.s Normal file
View File

@@ -0,0 +1,456 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global bInitialized$7761
bInitialized$7761: ; 0x021D26D4
.space 0x4
.global sStrmList
sStrmList: ; 0x021D26D8
.space 0xc
.global buffer$7877
buffer$7877: ; 0x021D26E4
.space 0x40
.global sStrmChannel
sStrmChannel: ; 0x021D2724
.space 0x80
.section .text
local_arm_func_start EndSleep
EndSleep: ; 0x020C1198
stmdb sp!, {r4-r6,lr}
mov r4, r0
ldr r0, [r4, #0x24]
mov r0, r0, lsl #0x1e
movs r0, r0, asr #0x1f
ldmeqia sp!, {r4-r6,pc}
ldr r0, [r4, #0x38]
cmp r0, #0x0
beq _020C11E8
mov r5, #0x1
_020C11C0:
bl OS_DisableInterrupts
mov r6, r0
mov r0, r4
mov r1, r5
bl StrmCallback
mov r0, r6
bl OS_RestoreInterrupts
ldr r0, [r4, #0x38]
cmp r0, #0x0
bne _020C11C0
_020C11E8:
ldr r0, [r4, #0x40]
mov r2, #0x1
mov r1, #0x0
mov r2, r2, lsl r0
ldr r0, [r4, #0x44]
mov r3, r1
bl SND_StartTimer
ldmia sp!, {r4-r6,pc}
local_arm_func_start BeginSleep
BeginSleep: ; 0x020C1208
stmdb sp!, {r4,lr}
ldr r1, [r0, #0x24]
mov r1, r1, lsl #0x1e
movs r1, r1, asr #0x1f
ldmeqia sp!, {r4,pc}
ldr r2, [r0, #0x40]
mov r3, #0x1
mov r1, #0x0
mov r2, r3, lsl r2
ldr r0, [r0, #0x44]
mov r3, r1
bl SND_StopTimer
bl SND_GetCurrentCommandTag
mov r4, r0
mov r0, #0x1
bl SND_FlushCommand
mov r0, r4
bl SND_WaitForCommandProc
ldmia sp!, {r4,pc}
arm_func_start StrmCallback
StrmCallback: ; 0x020C1254
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0xc
mov r5, r0
mov r4, r1
ldr r0, [r5, #0x28]
ldr r1, [r5, #0x2c]
bl _u32_div_f
ldr r1, [r5, #0x48]
ldr r2, [r5, #0x38]
mov r3, r0
mul lr, r3, r2
cmp r1, #0x0
mov r12, #0x0
ble _020C12B8
ldr r2, _020C1300 ; =sStrmChannel
ldr r0, _020C1304 ; =buffer$7877
_020C1294:
add r1, r5, r12
ldrb r1, [r1, #0x4c]
ldr r1, [r2, r1, lsl #0x3]
add r1, r1, lr
str r1, [r0, r12, lsl #0x2]
ldr r1, [r5, #0x48]
add r12, r12, #0x1
cmp r12, r1
blt _020C1294
_020C12B8:
ldr r0, [r5, #0x20]
ldr r2, _020C1304 ; =buffer$7877
str r0, [sp, #0x0]
ldr r12, [r5, #0x34]
mov r0, r4
str r12, [sp, #0x4]
ldr r4, [r5, #0x30]
blx r4
ldr r0, [r5, #0x38]
add r0, r0, #0x1
str r0, [r5, #0x38]
ldr r1, [r5, #0x38]
ldr r0, [r5, #0x2c]
cmp r1, r0
movge r0, #0x0
strge r0, [r5, #0x38]
add sp, sp, #0xc
ldmia sp!, {r4-r5,pc}
.balign 4
_020C1300: .word sStrmChannel
_020C1304: .word buffer$7877
local_arm_func_start AlarmCallback
AlarmCallback: ; 0x020C1308
ldr ip, _020C1314 ; =StrmCallback
mov r1, #0x1
bx r12
.balign 4
_020C1314: .word StrmCallback
arm_func_start ShutdownStrm
ShutdownStrm: ; 0x020C1318
stmdb sp!, {r4,lr}
mov r4, r0
ldr r0, [r4, #0x40]
bl NNS_SndFreeAlarm
ldr r0, _020C1344 ; =sStrmList
mov r1, r4
bl NNS_FndRemoveListObject
ldr r0, [r4, #0x24]
bic r0, r0, #0x1
str r0, [r4, #0x24]
ldmia sp!, {r4,pc}
.balign 4
_020C1344: .word sStrmList
local_arm_func_start ForceStopStrm
ForceStopStrm: ; 0x020C1348
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r0
ldr r0, [r4, #0x24]
mov r0, r0, lsl #0x1e
movs r0, r0, asr #0x1f
beq _020C13B4
ldr r0, [r4, #0x40]
mov r2, #0x1
mov r1, #0x0
mov r2, r2, lsl r0
ldr r0, [r4, #0x44]
mov r3, r1
bl SND_StopTimer
add r0, r4, #0x8
bl PM_DeletePreSleepCallback
add r0, r4, #0x14
bl PM_DeletePostSleepCallback
ldr r0, [r4, #0x24]
bic r0, r0, #0x2
str r0, [r4, #0x24]
bl SND_GetCurrentCommandTag
mov r5, r0
mov r0, #0x1
bl SND_FlushCommand
mov r0, r5
bl SND_WaitForCommandProc
_020C13B4:
mov r0, r4
bl ShutdownStrm
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
arm_func_start NNS_SndStrmSetVolume
NNS_SndStrmSetVolume: ; 0x020C13C4
stmdb sp!, {r4-r8,lr}
mov r7, r0
str r1, [r7, #0x3c]
ldr r0, [r7, #0x48]
mov r5, #0x0
cmp r0, #0x0
ldmleia sp!, {r4-r8,pc}
ldr r4, _020C142C ; =sStrmChannel
mov r8, #0x1
_020C13E8:
add r0, r7, r5
ldrb r6, [r0, #0x4c]
ldr r1, [r7, #0x3c]
add r0, r4, r6, lsl #0x3
ldr r0, [r0, #0x4]
add r0, r1, r0
bl SND_CalcChannelVolume
mov r2, r0
mov r0, r8, lsl r6
and r1, r2, #0xff
mov r2, r2, asr #0x8
bl SND_SetChannelVolume
ldr r0, [r7, #0x48]
add r5, r5, #0x1
cmp r5, r0
blt _020C13E8
ldmia sp!, {r4-r8,pc}
.balign 4
_020C142C: .word sStrmChannel
arm_func_start NNS_SndStrmStop
NNS_SndStrmStop: ; 0x020C1430
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, [r0, #0x24]
mov r1, r1, lsl #0x1f
movs r1, r1, asr #0x1f
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
bl ForceStopStrm
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndStrmStart
NNS_SndStrmStart: ; 0x020C1458
stmdb sp!, {r4,lr}
mov r4, r0
ldr r0, [r4, #0x40]
mov r2, #0x1
mov r1, #0x0
mov r2, r2, lsl r0
ldr r0, [r4, #0x44]
mov r3, r1
bl SND_StartTimer
ldr r0, [r4, #0x24]
mov r0, r0, lsl #0x1e
movs r0, r0, asr #0x1f
ldmneia sp!, {r4,pc}
add r0, r4, #0x8
bl PM_PrependPreSleepCallback
add r0, r4, #0x14
bl PM_AppendPostSleepCallback
ldr r0, [r4, #0x24]
orr r0, r0, #0x2
str r0, [r4, #0x24]
ldmia sp!, {r4,pc}
arm_func_start NNS_SndStrmSetup
NNS_SndStrmSetup: ; 0x020C14AC
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x24
mov r10, r0
ldr r4, [r10, #0x24]
mov r9, r1
mov r1, r4, lsl #0x1f
movs r1, r1, asr #0x1f
ldr r1, [sp, #0x4c]
str r2, [sp, #0x18]
mov r4, r3
str r1, [sp, #0x4c]
beq _020C14E0
bl NNS_SndStrmStop
_020C14E0:
ldr r0, [sp, #0x4c]
ldr r2, [r10, #0x48]
mov r0, r0, lsl #0x5
mul r1, r2, r0
mov r0, r4
bl _u32_div_f
ldr r1, [sp, #0x4c]
ldr r2, [sp, #0x48]
mul r1, r0, r1
mov r0, r1, lsl #0x5
str r0, [r10, #0x28]
ldr r0, [r10, #0x28]
cmp r9, #0x1
moveq r0, r0, lsr #0x1
mul r0, r2, r0
ldr r1, [sp, #0x4c]
bl _u32_div_f
str r0, [sp, #0x1c]
bl NNS_SndAllocAlarm
str r0, [r10, #0x40]
ldr r0, [r10, #0x40]
cmp r0, #0x0
addlt sp, sp, #0x24
movlt r0, #0x0
ldmltia sp!, {r4-r11,pc}
ldr r0, [r10, #0x48]
mov r8, #0x0
cmp r0, #0x0
ble _020C15D4
ldr r0, [sp, #0x48]
mov r7, r0, lsl #0x5
ldr r6, _020C1668 ; =sStrmChannel
mov r5, r8
mov r4, #0x7f
mov r11, #0x40
mov r0, #0x1
str r0, [sp, #0x20]
_020C1574:
ldr r2, [r10, #0x28]
ldr r1, [sp, #0x18]
add r0, r10, r8
mla r1, r2, r8, r1
ldrb r0, [r0, #0x4c]
ldr r3, [sp, #0x20]
str r1, [r6, r0, lsl #0x3]
add r1, r6, r0, lsl #0x3
str r5, [r1, #0x4]
str r5, [sp, #0x0]
ldr r2, [r10, #0x28]
mov r1, r9
mov r2, r2, lsr #0x2
str r2, [sp, #0x4]
str r4, [sp, #0x8]
str r5, [sp, #0xc]
str r7, [sp, #0x10]
str r11, [sp, #0x14]
ldr r2, [r6, r0, lsl #0x3]
bl SND_SetupChannelPcm
ldr r0, [r10, #0x48]
add r8, r8, #0x1
cmp r8, r0
blt _020C1574
_020C15D4:
str r10, [sp, #0x0]
ldr r1, [sp, #0x1c]
ldr r0, [r10, #0x40]
ldr r3, _020C166C ; =AlarmCallback
mov r2, r1
bl SND_SetupAlarm
ldr r0, _020C1670 ; =sStrmList
mov r1, r10
bl NNS_FndAppendListObject
ldr r0, [sp, #0x4c]
str r9, [r10, #0x20]
str r0, [r10, #0x2c]
ldr r1, [sp, #0x50]
ldr r0, [sp, #0x54]
str r1, [r10, #0x30]
str r0, [r10, #0x34]
mov r0, #0x0
str r0, [r10, #0x38]
str r0, [r10, #0x3c]
ldr r0, [r10, #0x24]
bic r0, r0, #0x1
orr r0, r0, #0x1
str r0, [r10, #0x24]
bl OS_DisableInterrupts
mov r4, r0
mov r2, #0x1
mov r0, r10
mov r1, #0x0
str r2, [r10, #0x2c]
bl StrmCallback
ldr r1, [sp, #0x4c]
mov r0, r4
str r1, [r10, #0x2c]
bl OS_RestoreInterrupts
mov r0, #0x1
add sp, sp, #0x24
ldmia sp!, {r4-r11,pc}
.balign 4
_020C1668: .word sStrmChannel
_020C166C: .word AlarmCallback
_020C1670: .word sStrmList
arm_func_start NNS_SndStrmFreeChannel
NNS_SndStrmFreeChannel: ; 0x020C1674
stmdb sp!, {r4,lr}
mov r4, r0
ldr r0, [r4, #0x44]
cmp r0, #0x0
ldmeqia sp!, {r4,pc}
bl NNS_SndUnlockChannel
mov r0, #0x0
str r0, [r4, #0x44]
str r0, [r4, #0x48]
ldmia sp!, {r4,pc}
arm_func_start NNS_SndStrmAllocChannel
NNS_SndStrmAllocChannel: ; 0x020C169C
stmdb sp!, {r4-r6,lr}
mov r5, r1
mov r4, #0x0
mov r6, r0
mov r12, r4
cmp r5, #0x0
ble _020C16DC
mov r1, #0x1
_020C16BC:
ldrb r3, [r2, r12]
add r0, r6, r12
strb r3, [r0, #0x4c]
ldrb r0, [r2, r12]
add r12, r12, #0x1
cmp r12, r5
orr r4, r4, r1, lsl r0
blt _020C16BC
_020C16DC:
mov r0, r4
bl NNS_SndLockChannel
cmp r0, #0x0
moveq r0, #0x0
strne r5, [r6, #0x48]
strne r4, [r6, #0x44]
movne r0, #0x1
ldmia sp!, {r4-r6,pc}
arm_func_start NNS_SndStrmInit
NNS_SndStrmInit: ; 0x020C16FC
stmdb sp!, {r4,lr}
ldr r1, _020C176C ; =bInitialized$7761
mov r4, r0
ldr r0, [r1, #0x0]
cmp r0, #0x0
bne _020C172C
ldr r0, _020C1770 ; =sStrmList
mov r1, #0x0
bl NNS_FndInitList
ldr r0, _020C176C ; =bInitialized$7761
mov r1, #0x1
str r1, [r0, #0x0]
_020C172C:
ldr r1, _020C1774 ; =BeginSleep
ldr r0, _020C1778 ; =EndSleep
str r1, [r4, #0x8]
str r4, [r4, #0xc]
str r0, [r4, #0x14]
str r4, [r4, #0x18]
mov r0, #0x0
str r0, [r4, #0x44]
str r0, [r4, #0x48]
ldr r0, [r4, #0x24]
bic r0, r0, #0x1
str r0, [r4, #0x24]
ldr r0, [r4, #0x24]
bic r0, r0, #0x2
str r0, [r4, #0x24]
ldmia sp!, {r4,pc}
.balign 4
_020C176C: .word bInitialized$7761
_020C1770: .word sStrmList
_020C1774: .word BeginSleep
_020C1778: .word EndSleep

240
arm9/asm/NNS_SND_waveout.s Normal file
View File

@@ -0,0 +1,240 @@
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global sWaveOut
sWaveOut: ; 0x021D1CBC
.space 0x140
.section .text
arm_func_start NNS_SndWaveOutIsPlaying
NNS_SndWaveOutIsPlaying: ; 0x020C03B8
stmdb sp!, {r4,lr}
mov r4, r0
ldr r0, [r4, #0x8]
cmp r0, #0x0
moveq r0, #0x0
ldmeqia sp!, {r4,pc}
ldr r0, [r4, #0xc]
cmp r0, #0x0
bne _020C03F8
ldr r0, [r4, #0x10]
bl SND_IsFinishedCommandTag
cmp r0, #0x0
moveq r0, #0x1
ldmeqia sp!, {r4,pc}
mov r0, #0x1
str r0, [r4, #0xc]
_020C03F8:
bl SND_GetChannelStatus
ldr r1, [r4, #0x0]
mov r2, #0x1
mov r1, r2, lsl r1
ands r0, r1, r0
movne r0, r2
moveq r0, #0x0
streq r0, [r4, #0x8]
ldmia sp!, {r4,pc}
arm_func_start NNS_SndWaveOutSetPan
NNS_SndWaveOutSetPan: ; 0x020C041C
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, [r0, #0x8]
cmp r2, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldr r0, [r0, #0x0]
mov r2, #0x1
mov r0, r2, lsl r0
bl SND_SetChannelPan
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndWaveOutSetSpeed
NNS_SndWaveOutSetSpeed: ; 0x020C044C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
ldr r0, [r5, #0x8]
mov r4, r1
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,pc}
ldr r2, [r5, #0x4]
ldr r0, _020C04D4 ; =0xD87F8000
mov r3, r2, asr #0x1f
mov r1, #0x7f
bl _ll_udiv
mov r2, r4
mov r3, r4, asr #0x1f
bl _ll_udiv
mov r2, #0x0
mov r3, r0
mov r0, #0x10
cmp r1, r2
cmpeq r3, r0
movcc r3, r0
blo _020C04B8
ldr r0, _020C04D8 ; =0x0000FFFF
cmp r1, r2
cmpeq r3, r0
movhi r3, r0
_020C04B8:
ldr r0, [r5, #0x0]
mov r1, #0x1
mov r0, r1, lsl r0
mov r1, r3
bl SND_SetChannelTimer
add sp, sp, #0x4
ldmia sp!, {r4-r5,pc}
.balign 4
_020C04D4: .word 0xD87F8000
_020C04D8: .word 0x0000FFFF
arm_func_start NNS_SndWaveOutSetVolume
NNS_SndWaveOutSetVolume: ; 0x020C04DC
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, [r0, #0x8]
cmp r2, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {pc}
ldr r0, [r0, #0x0]
mov r2, #0x1
mov r0, r2, lsl r0
mov r2, #0x0
bl SND_SetChannelVolume
add sp, sp, #0x4
ldmia sp!, {pc}
arm_func_start NNS_SndWaveOutStop
NNS_SndWaveOutStop: ; 0x020C0510
stmdb sp!, {r4,lr}
mov r4, r0
ldr r0, [r4, #0x8]
cmp r0, #0x0
ldmeqia sp!, {r4,pc}
ldr r0, [r4, #0x0]
mov r2, #0x1
mov r1, #0x0
mov r0, r2, lsl r0
mov r2, r1
mov r3, r1
bl SND_StopTimer
mov r0, #0x0
str r0, [r4, #0x8]
ldmia sp!, {r4,pc}
arm_func_start NNS_SndWaveOutStart
NNS_SndWaveOutStart: ; 0x020C054C
stmdb sp!, {r4-r9,lr}
sub sp, sp, #0x1c
movs r8, r1
mov r9, r0
mov r7, r2
mov r6, r3
beq _020C0584
cmp r8, #0x1
ldreq r0, [sp, #0x3c]
ldreq r1, [sp, #0x38]
moveq r0, r0, asr #0x1
moveq r5, r1, asr #0x1
subeq r4, r0, r1, asr #0x1
b _020C0598
_020C0584:
ldr r0, [sp, #0x3c]
ldr r1, [sp, #0x38]
mov r0, r0, asr #0x2
mov r5, r1, asr #0x2
sub r4, r0, r1, asr #0x2
_020C0598:
ldr r2, [sp, #0x40]
ldr r0, _020C0668 ; =0xD87F8000
mov r3, r2, asr #0x1f
mov r1, #0x7f
bl _ll_udiv
ldr r2, [sp, #0x48]
mov r3, r2, asr #0x1f
bl _ll_udiv
mov r3, #0x0
mov r2, #0x10
cmp r1, r3
cmpeq r0, r2
movcc r0, r2
blo _020C05E0
ldr r2, _020C066C ; =0x0000FFFF
cmp r1, r3
cmpeq r0, r2
movhi r0, r2
_020C05E0:
str r5, [sp, #0x0]
ldr r1, [sp, #0x44]
str r4, [sp, #0x4]
str r1, [sp, #0x8]
mov r1, #0x0
str r1, [sp, #0xc]
cmp r6, #0x0
movne r3, #0x1
ldr r1, [sp, #0x4c]
str r0, [sp, #0x10]
str r1, [sp, #0x14]
ldr r0, [r9, #0x0]
moveq r3, #0x2
mov r1, r8
mov r2, r7
bl SND_SetupChannelPcm
mov r1, #0x0
ldr r0, [r9, #0x0]
mov r2, #0x1
mov r0, r2, lsl r0
mov r2, r1
mov r3, r1
bl SND_StartTimer
mov r0, #0x1
str r0, [r9, #0x8]
mov r0, #0x0
str r0, [r9, #0xc]
bl SND_GetCurrentCommandTag
str r0, [r9, #0x10]
ldr r1, [sp, #0x40]
mov r0, #0x1
str r1, [r9, #0x4]
add sp, sp, #0x1c
ldmia sp!, {r4-r9,pc}
.balign 4
_020C0668: .word 0xD87F8000
_020C066C: .word 0x0000FFFF
arm_func_start NNS_SndWaveOutFreeChannel
NNS_SndWaveOutFreeChannel: ; 0x020C0670
ldr r0, [r0, #0x0]
mov r1, #0x1
ldr ip, _020C0684 ; =NNS_SndUnlockChannel
mov r0, r1, lsl r0
bx r12
.balign 4
_020C0684: .word NNS_SndUnlockChannel
arm_func_start NNS_SndWaveOutAllocChannel
NNS_SndWaveOutAllocChannel: ; 0x020C0688
stmdb sp!, {r4,lr}
mov r4, r0
mov r0, #0x1
mov r0, r0, lsl r4
bl NNS_SndLockChannel
cmp r0, #0x0
moveq r0, #0x0
ldmeqia sp!, {r4,pc}
mov r0, #0x14
mul r0, r4, r0
ldr r2, _020C06C8 ; =sWaveOut
mov r1, #0x0
str r4, [r2, r0]
add r0, r2, r0
str r1, [r0, #0x8]
ldmia sp!, {r4,pc}
.balign 4
_020C06C8: .word sWaveOut

View File

@@ -1,53 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start RtcSendPxiCommand
RtcSendPxiCommand: ; 0x020D61D4
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r0, r0, lsl #0x8
and r1, r0, #0x7f00
mov r0, #0x5
mov r2, #0x0
bl PXI_SendWordByFifo
_020D61F0: ; 0x020D61F0
cmp r0, #0x0
movge r0, #0x1
movlt r0, #0x0
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
arm_func_start RTCi_WriteRawStatus2Async
RTCi_WriteRawStatus2Async:
ldr ip, _020D6214 ; =RtcSendPxiCommand
mov r0, #0x27
bx r12
.balign 4
_020D6214: .word RtcSendPxiCommand
arm_func_start RTCi_ReadRawTimeAsync
RTCi_ReadRawTimeAsync:
ldr ip, _020D6224 ; =RtcSendPxiCommand
mov r0, #0x12
bx r12
.balign 4
_020D6224: .word RtcSendPxiCommand
arm_func_start RTCi_ReadRawDateAsync
RTCi_ReadRawDateAsync:
ldr ip, _020D6234 ; =RtcSendPxiCommand
mov r0, #0x11
bx r12
.balign 4
_020D6234: .word RtcSendPxiCommand
arm_func_start RTCi_ReadRawDateTimeAsync
RTCi_ReadRawDateTimeAsync:
ldr ip, _020D6244 ; =RtcSendPxiCommand
mov r0, #0x10
bx r12
.balign 4
_020D6244: .word RtcSendPxiCommand

View File

@@ -1,25 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start MD5Final
MD5Final: ; 0x020A8BA4
ldr ip, _020A8BAC ; =DGT_Hash1GetDigest_R
bx r12
.balign 4
_020A8BAC: .word DGT_Hash1GetDigest_R
arm_func_start MD5Update
MD5Update: ; 0x020A8BB0
ldr ip, _020A8BB8 ; =DGT_Hash1SetSource
bx r12
.balign 4
_020A8BB8: .word DGT_Hash1SetSource
arm_func_start MD5Init
MD5Init: ; 0x020A8BBC
ldr ip, _020A8BC4 ; =DGT_Hash1Reset
bx r12
.balign 4
_020A8BC4: .word DGT_Hash1Reset

View File

@@ -4,6 +4,11 @@
.arm
.endm
.macro local_arm_func_start name
.balign 4, 0
.arm
.endm
.macro arm_func_end name
.size \name, .-\name
.endm

View File

@@ -1,92 +0,0 @@
.section .text
glabel GenerateFontHalfRowLookupTable
.extern UNK_021C570C
.extern UNK_021C5734
push {r3-r7, lr}
sub sp, #0x30
ldr r3, _0201C0F8 ; =UNK_021C570C
mov r5, #0x0
str r5, [sp, #0x20]
str r0, [sp, #0x24]
str r2, [sp, #0x28]
str r1, [sp, #0x2c]
strh r1, [r3, #0x6]
strh r0, [r3, #0x2]
add r0, sp, #0x20
strh r2, [r3, #0x4]
str r5, [sp, #0x14]
str r0, [sp, #0x8]
mov r12, r0
mov lr, r0
str r0, [sp, #0x18]
_0201C07E:
mov r0, #0x0
str r0, [sp, #0x10]
ldr r0, [sp, #0x18]
str r0, [sp, #0x4]
ldr r0, [sp, #0x8]
ldr r0, [r0, #0x0]
str r0, [sp, #0x1c]
_0201C08C:
mov r0, #0x0
str r0, [sp, #0xc]
mov r0, lr
str r0, [sp, #0x0]
ldr r0, [sp, #0x4]
ldr r0, [r0, #0x0]
lsl r7, r0, #0x4
_0201C09A:
ldr r0, [sp, #0x0]
mov r3, #0x0
ldr r0, [r0, #0x0]
mov r4, r12
lsl r6, r0, #0x8
_0201C0A4:
ldr r0, [r4, #0x0]
add r1, r7, #0x0
lsl r0, r0, #0xc
orr r0, r6
orr r1, r0
ldr r0, [sp, #0x1c]
add r3, r3, #0x1
add r2, r0, #0x0
orr r2, r1
lsl r1, r5, #0x1
ldr r0, _0201C0FC ; =UNK_021C5734
add r5, r5, #0x1
add r4, r4, #0x4
strh r2, [r0, r1]
cmp r3, #0x4
blt _0201C0A4
ldr r0, [sp, #0x0]
add r0, r0, #0x4
str r0, [sp, #0x0]
ldr r0, [sp, #0xc]
add r0, r0, #0x1
str r0, [sp, #0xc]
cmp r0, #0x4
blt _0201C09A
ldr r0, [sp, #0x4]
add r0, r0, #0x4
str r0, [sp, #0x4]
ldr r0, [sp, #0x10]
add r0, r0, #0x1
str r0, [sp, #0x10]
cmp r0, #0x4
blt _0201C08C
ldr r0, [sp, #0x8]
add r0, r0, #0x4
str r0, [sp, #0x8]
ldr r0, [sp, #0x14]
add r0, r0, #0x1
str r0, [sp, #0x14]
cmp r0, #0x4
blt _0201C07E
add sp, #0x30
pop {r3-r7, pc}
.balign 4
_0201C0F8: .word UNK_021C570C
_0201C0FC: .word UNK_021C5734

View File

@@ -27,8 +27,8 @@ UNK_020F4340: ; 0x020F4340
.text
thumb_func_start FUN_02042354
FUN_02042354: ; 0x02042354
thumb_func_start ScrCmd_Unk01DA
ScrCmd_Unk01DA: ; 0x02042354
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
@@ -37,8 +37,8 @@ FUN_02042354: ; 0x02042354
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_02042364
FUN_02042364: ; 0x02042364
thumb_func_start ScrCmd_Unk01DB
ScrCmd_Unk01DB: ; 0x02042364
push {r4-r6, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -60,8 +60,8 @@ FUN_02042364: ; 0x02042364
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_02042394
FUN_02042394: ; 0x02042394
thumb_func_start ScrCmd_Unk01DC
ScrCmd_Unk01DC: ; 0x02042394
push {r4, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -76,8 +76,8 @@ FUN_02042394: ; 0x02042394
str r0, [r1, #0x0]
pop {r4, pc}
thumb_func_start FUN_020423B0
FUN_020423B0: ; 0x020423B0
thumb_func_start ScrCmd_Unk01DD
ScrCmd_Unk01DD: ; 0x020423B0
push {r3-r7, lr}
sub sp, #0x8
add r7, r0, #0x0
@@ -502,8 +502,8 @@ _020426FA:
add sp, #0x8
pop {r3-r7, pc}
thumb_func_start FUN_02042700
FUN_02042700: ; 0x02042700
thumb_func_start ScrCmd_Unk01DE
ScrCmd_Unk01DE: ; 0x02042700
push {r3-r7, lr}
add r5, r0, #0x0
add r1, r5, #0x0
@@ -561,8 +561,8 @@ FUN_02042700: ; 0x02042700
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02042780
FUN_02042780: ; 0x02042780
thumb_func_start ScrCmd_Unk01DF
ScrCmd_Unk01DF: ; 0x02042780
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -581,8 +581,8 @@ FUN_02042780: ; 0x02042780
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_020427A8
FUN_020427A8: ; 0x020427A8
thumb_func_start ScrCmd_Unk01E0
ScrCmd_Unk01E0: ; 0x020427A8
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -601,8 +601,8 @@ FUN_020427A8: ; 0x020427A8
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_020427D0
FUN_020427D0: ; 0x020427D0
thumb_func_start ScrCmd_Unk01E1
ScrCmd_Unk01E1: ; 0x020427D0
push {r3-r7, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -671,8 +671,8 @@ _0204284C:
_0204285C: .word 0x00000884
_02042860: .word 0x0000083E
thumb_func_start FUN_02042864
FUN_02042864: ; 0x02042864
thumb_func_start ScrCmd_Unk01E2
ScrCmd_Unk01E2: ; 0x02042864
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -694,8 +694,8 @@ FUN_02042864: ; 0x02042864
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02042894
FUN_02042894: ; 0x02042894
thumb_func_start ScrCmd_Unk01E3
ScrCmd_Unk01E3: ; 0x02042894
push {r3-r6, lr}
sub sp, #0x4
add r5, r0, #0x0
@@ -729,8 +729,8 @@ FUN_02042894: ; 0x02042894
add sp, #0x4
pop {r3-r6, pc}
thumb_func_start FUN_020428E0
FUN_020428E0: ; 0x020428E0
thumb_func_start ScrCmd_Unk01E4
ScrCmd_Unk01E4: ; 0x020428E0
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -792,8 +792,8 @@ _02042948:
.balign 4
_0204294C: .word UNK_020F4334
thumb_func_start FUN_02042950
FUN_02042950: ; 0x02042950
thumb_func_start ScrCmd_Unk0294
ScrCmd_Unk0294: ; 0x02042950
push {r3-r7, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -817,8 +817,8 @@ FUN_02042950: ; 0x02042950
mov r0, #0x0
pop {r3-r7, pc}
thumb_func_start FUN_02042980
FUN_02042980: ; 0x02042980
thumb_func_start ScrCmd_Unk0295
ScrCmd_Unk0295: ; 0x02042980
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
@@ -830,8 +830,8 @@ FUN_02042980: ; 0x02042980
pop {r3, pc}
.balign 4
thumb_func_start FUN_02042998
FUN_02042998: ; 0x02042998
thumb_func_start ScrCmd_Unk0296
ScrCmd_Unk0296: ; 0x02042998
push {r4, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -847,8 +847,8 @@ FUN_02042998: ; 0x02042998
pop {r4, pc}
.balign 4
thumb_func_start FUN_020429B8
FUN_020429B8: ; 0x020429B8
thumb_func_start ScrCmd_Unk0297
ScrCmd_Unk0297: ; 0x020429B8
push {r3-r5, lr}
add r5, r0, #0x0
add r1, r5, #0x0
@@ -870,8 +870,8 @@ FUN_020429B8: ; 0x020429B8
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start FUN_020429E8
FUN_020429E8: ; 0x020429E8
thumb_func_start ScrCmd_Unk0298
ScrCmd_Unk0298: ; 0x020429E8
push {r3-r5, lr}
add r5, r0, #0x0
add r1, r5, #0x0
@@ -893,8 +893,8 @@ FUN_020429E8: ; 0x020429E8
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02042A18
FUN_02042A18: ; 0x02042A18
thumb_func_start ScrCmd_Unk0299
ScrCmd_Unk0299: ; 0x02042A18
push {r3-r5, lr}
add r5, r0, #0x0
add r1, r5, #0x0
@@ -916,8 +916,8 @@ FUN_02042A18: ; 0x02042A18
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02042A48
FUN_02042A48: ; 0x02042A48
thumb_func_start ScrCmd_Unk029A
ScrCmd_Unk029A: ; 0x02042A48
push {r4-r6, lr}
add r4, r0, #0x0
add r1, r4, #0x0
@@ -955,8 +955,8 @@ _02042A90:
pop {r4-r6, pc}
.balign 4
thumb_func_start FUN_02042A98
FUN_02042A98: ; 0x02042A98
thumb_func_start ScrCmd_Unk029B
ScrCmd_Unk029B: ; 0x02042A98
push {r3-r7, lr}
add r5, r0, #0x0
bl ScriptReadHalfword

View File

@@ -47,8 +47,8 @@ FUN_02042D10: ; 0x02042D10
bl FUN_0202B020
pop {r3, pc}
thumb_func_start FUN_02042D1C
FUN_02042D1C: ; 0x02042D1C
thumb_func_start ScrCmd_Unk023E
ScrCmd_Unk023E: ; 0x02042D1C
push {r3-r7, lr}
sub sp, #0x20
add r4, r0, #0x0

View File

@@ -16,8 +16,8 @@ UNK_020F4494: ; 0x020F4494
.text
thumb_func_start FUN_02044158
FUN_02044158: ; 0x02044158
thumb_func_start ScrCmd_Unk0215
ScrCmd_Unk0215: ; 0x02044158
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
@@ -27,8 +27,8 @@ FUN_02044158: ; 0x02044158
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_0204416C
FUN_0204416C: ; 0x0204416C
thumb_func_start ScrCmd_Unk0216
ScrCmd_Unk0216: ; 0x0204416C
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -48,8 +48,8 @@ FUN_0204416C: ; 0x0204416C
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02044198
FUN_02044198: ; 0x02044198
thumb_func_start ScrCmd_Unk0217
ScrCmd_Unk0217: ; 0x02044198
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword

View File

@@ -3,8 +3,8 @@
.text
thumb_func_start ScrCmd_getpartyspecies
ScrCmd_getpartyspecies: ; 0x0204434C
thumb_func_start ScrCmd_GetPartySpecies
ScrCmd_GetPartySpecies: ; 0x0204434C
; getpartyspecies XXXX, YYYY
; Sets var YYYY to species of mon in party slot XXXX.
; If mon is an egg, the value is SPECIES_NONE.
@@ -49,8 +49,8 @@ _020443A2:
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start ScrCmd_checkpartymonotid
ScrCmd_checkpartymonotid: ; 0x020443A8
thumb_func_start ScrCmd_CheckPartyMonOTID
ScrCmd_CheckPartyMonOTID: ; 0x020443A8
push {r3-r7, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -98,8 +98,8 @@ _0204440E:
mov r0, #0x0
pop {r3-r7, pc}
thumb_func_start ScrCmd_giveegg
ScrCmd_giveegg: ; 0x02044414
thumb_func_start ScrCmd_GiveEgg
ScrCmd_GiveEgg: ; 0x02044414
push {r4-r7, lr}
sub sp, #0xc
add r5, r0, #0x0
@@ -157,8 +157,8 @@ _02044494:
pop {r4-r7, pc}
.balign 4
thumb_func_start ScrCmd_setpartymonmove
ScrCmd_setpartymonmove: ; 0x0204449C
thumb_func_start ScrCmd_SetPartyMonMove
ScrCmd_SetPartyMonMove: ; 0x0204449C
push {r3-r7, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -196,8 +196,8 @@ ScrCmd_setpartymonmove: ; 0x0204449C
pop {r3-r7, pc}
.balign 4
thumb_func_start ScrCmd_partymonhasmove
ScrCmd_partymonhasmove: ; 0x020444F4
thumb_func_start ScrCmd_PartyMonHasMove
ScrCmd_PartyMonHasMove: ; 0x020444F4
push {r3-r7, lr}
add r4, r0, #0x0
add r1, r4, #0x0
@@ -271,8 +271,8 @@ _02044592:
pop {r3-r7, pc}
.balign 4
thumb_func_start ScrCmd_findpartymonwithmove
ScrCmd_findpartymonwithmove: ; 0x02044598
thumb_func_start ScrCmd_FindPartyMonWithMove
ScrCmd_FindPartyMonWithMove: ; 0x02044598
push {r3-r7, lr}
sub sp, #0x8
add r4, r0, #0x0
@@ -359,8 +359,8 @@ _02044648:
_02044650: .word 0x00000006
_02044654: .word 0x00000000
thumb_func_start ScrCmd_survivepsn
ScrCmd_survivepsn: ; 0x02044658
thumb_func_start ScrCmd_SurvivePsn
ScrCmd_SurvivePsn: ; 0x02044658
push {r4-r6, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -389,8 +389,8 @@ ScrCmd_survivepsn: ; 0x02044658
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start ScrCmd_countpartymonsatorbelowlevel
ScrCmd_countpartymonsatorbelowlevel: ; 0x0204469C
thumb_func_start ScrCmd_CountPartyMonsAtOrBelowLevel
ScrCmd_CountPartyMonsAtOrBelowLevel: ; 0x0204469C
push {r4-r7, lr}
sub sp, #0xc
add r4, r0, #0x0
@@ -459,8 +459,8 @@ _02044726:
add sp, #0xc
pop {r4-r7, pc}
thumb_func_start ScrCmd_getpartymonlevel
ScrCmd_getpartymonlevel: ; 0x02044730
thumb_func_start ScrCmd_GetPartyMonLevel
ScrCmd_GetPartyMonLevel: ; 0x02044730
push {r4-r6, lr}
add r5, r0, #0x0
add r1, r5, #0x0
@@ -501,8 +501,8 @@ _02044786:
pop {r4-r6, pc}
.balign 4
thumb_func_start ScrCmd_getpartymonnature
ScrCmd_getpartymonnature: ; 0x0204478C
thumb_func_start ScrCmd_GetPartyMonNature
ScrCmd_GetPartyMonNature: ; 0x0204478C
push {r4-r6, lr}
add r6, r0, #0x0
add r1, r6, #0x0
@@ -554,8 +554,8 @@ _020447F2:
pop {r4-r6, pc}
.balign 4
thumb_func_start ScrCmd_findpartymonwithnature
ScrCmd_findpartymonwithnature: ; 0x02044800
thumb_func_start ScrCmd_FindPartyMonWithNature
ScrCmd_FindPartyMonWithNature: ; 0x02044800
push {r3-r7, lr}
sub sp, #0x8
add r4, r0, #0x0
@@ -619,8 +619,8 @@ _0204487E:
_02044884: .word 0x000000FF
_02044888: .word 0x00000000
thumb_func_start ScrCmd_getpartymonfriendship
ScrCmd_getpartymonfriendship: ; 0x0204488C
thumb_func_start ScrCmd_GetPartyMonFriendship
ScrCmd_GetPartyMonFriendship: ; 0x0204488C
push {r4-r6, lr}
add r5, r0, #0x0
add r1, r5, #0x0
@@ -651,8 +651,8 @@ ScrCmd_getpartymonfriendship: ; 0x0204488C
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_020448D4
FUN_020448D4: ; 0x020448D4
thumb_func_start ScrCmd_Unk01BA
ScrCmd_Unk01BA: ; 0x020448D4
push {r3-r7, lr}
sub sp, #0x8
add r5, r0, #0x0
@@ -748,8 +748,8 @@ _02044994:
add sp, #0x8
pop {r3-r7, pc}
thumb_func_start FUN_020449A4
FUN_020449A4: ; 0x020449A4
thumb_func_start ScrCmd_Unk01BB
ScrCmd_Unk01BB: ; 0x020449A4
push {r3-r6, lr}
sub sp, #0x4
add r5, r0, #0x0
@@ -797,8 +797,8 @@ _020449FA:
add sp, #0x4
pop {r3-r6, pc}
thumb_func_start FUN_02044A0C
FUN_02044A0C: ; 0x02044A0C
thumb_func_start ScrCmd_Unk0281
ScrCmd_Unk0281: ; 0x02044A0C
push {r3-r7, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -839,8 +839,8 @@ FUN_02044A0C: ; 0x02044A0C
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02044A6C
FUN_02044A6C: ; 0x02044A6C
thumb_func_start ScrCmd_Unk0247
ScrCmd_Unk0247: ; 0x02044A6C
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -859,8 +859,8 @@ FUN_02044A6C: ; 0x02044A6C
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02044A94
FUN_02044A94: ; 0x02044A94
thumb_func_start ScrCmd_Unk0248
ScrCmd_Unk0248: ; 0x02044A94
push {r3-r7, lr}
add r5, r0, #0x0
add r1, r5, #0x0
@@ -906,8 +906,8 @@ FUN_02044A94: ; 0x02044A94
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02044B00
FUN_02044B00: ; 0x02044B00
thumb_func_start ScrCmd_Unk0177
ScrCmd_Unk0177: ; 0x02044B00
push {r3-r5, lr}
add r5, r0, #0x0
add r1, r5, #0x0
@@ -927,8 +927,8 @@ FUN_02044B00: ; 0x02044B00
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02044B2C
FUN_02044B2C: ; 0x02044B2C
thumb_func_start ScrCmd_Unk019A
ScrCmd_Unk019A: ; 0x02044B2C
push {r3-r7, lr}
add r4, r0, #0x0
add r1, r4, #0x0
@@ -970,8 +970,8 @@ _02044B7A:
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02044B84
FUN_02044B84: ; 0x02044B84
thumb_func_start ScrCmd_Unk019B
ScrCmd_Unk019B: ; 0x02044B84
push {r4-r7, lr}
sub sp, #0xc
add r4, r0, #0x0
@@ -1034,8 +1034,8 @@ _02044C00:
pop {r4-r7, pc}
.balign 4
thumb_func_start FUN_02044C0C
FUN_02044C0C: ; 0x02044C0C
thumb_func_start ScrCmd_Unk019C
ScrCmd_Unk019C: ; 0x02044C0C
push {r4-r7, lr}
sub sp, #0xc
add r4, r0, #0x0
@@ -1092,8 +1092,8 @@ _02044C76:
add sp, #0xc
pop {r4-r7, pc}
thumb_func_start FUN_02044C88
FUN_02044C88: ; 0x02044C88
thumb_func_start ScrCmd_Unk019D
ScrCmd_Unk019D: ; 0x02044C88
push {r3-r7, lr}
add r4, r0, #0x0
add r1, r4, #0x0
@@ -1135,8 +1135,8 @@ _02044CD6:
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02044CE0
FUN_02044CE0: ; 0x02044CE0
thumb_func_start ScrCmd_Unk0119
ScrCmd_Unk0119: ; 0x02044CE0
push {r3-r7, lr}
add r4, r0, #0x0
add r1, r4, #0x0
@@ -1184,8 +1184,8 @@ _02044D3C:
.balign 4
_02044D40: .word 0x00000000
thumb_func_start FUN_02044D44
FUN_02044D44: ; 0x02044D44
thumb_func_start ScrCmd_Unk011A
ScrCmd_Unk011A: ; 0x02044D44
push {r4-r6, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -1216,8 +1216,8 @@ FUN_02044D44: ; 0x02044D44
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_02044D8C
FUN_02044D8C: ; 0x02044D8C
thumb_func_start ScrCmd_Unk01C8
ScrCmd_Unk01C8: ; 0x02044D8C
push {r4-r6, lr}
add r4, r0, #0x0
add r1, r4, #0x0
@@ -1297,8 +1297,8 @@ _02044E2C:
pop {r4-r6, pc}
.balign 4
thumb_func_start FUN_02044E34
FUN_02044E34: ; 0x02044E34
thumb_func_start ScrCmd_Unk01C9
ScrCmd_Unk01C9: ; 0x02044E34
push {r4-r6, lr}
add r4, r0, #0x0
add r1, r4, #0x0
@@ -1327,8 +1327,8 @@ FUN_02044E34: ; 0x02044E34
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_02044E78
FUN_02044E78: ; 0x02044E78
thumb_func_start ScrCmd_Unk01CA
ScrCmd_Unk01CA: ; 0x02044E78
push {r3-r7, lr}
add r4, r0, #0x0
add r1, r4, #0x0
@@ -1369,8 +1369,8 @@ FUN_02044E78: ; 0x02044E78
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02044ED8
FUN_02044ED8: ; 0x02044ED8
thumb_func_start ScrCmd_Unk01EE
ScrCmd_Unk01EE: ; 0x02044ED8
push {r4-r6, lr}
add r5, r0, #0x0
add r1, r5, #0x0
@@ -1401,8 +1401,8 @@ FUN_02044ED8: ; 0x02044ED8
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_02044F20
FUN_02044F20: ; 0x02044F20
thumb_func_start ScrCmd_Unk01F0
ScrCmd_Unk01F0: ; 0x02044F20
push {r3-r5, lr}
add r5, r0, #0x0
add r1, r5, #0x0
@@ -1427,8 +1427,8 @@ FUN_02044F20: ; 0x02044F20
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start FUN_02044F58
FUN_02044F58: ; 0x02044F58
thumb_func_start ScrCmd_Unk01C0
ScrCmd_Unk01C0: ; 0x02044F58
push {r3-r7, lr}
sub sp, #0x8
add r4, r0, #0x0
@@ -1495,8 +1495,8 @@ _02044FDE:
.balign 4
_02044FE4: .word 0x00000000
thumb_func_start FUN_02044FE8
FUN_02044FE8: ; 0x02044FE8
thumb_func_start ScrCmd_Unk022E
ScrCmd_Unk022E: ; 0x02044FE8
push {r3-r7, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -1550,8 +1550,8 @@ _02045048:
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_0204505C
FUN_0204505C: ; 0x0204505C
thumb_func_start ScrCmd_Unk022F
ScrCmd_Unk022F: ; 0x0204505C
push {r3-r7, lr}
sub sp, #0x10
add r4, r0, #0x0
@@ -1632,8 +1632,8 @@ _020450E8:
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02045104
FUN_02045104: ; 0x02045104
thumb_func_start ScrCmd_Unk0230
ScrCmd_Unk0230: ; 0x02045104
push {r3-r7, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -1679,8 +1679,8 @@ FUN_02045104: ; 0x02045104
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02045170
FUN_02045170: ; 0x02045170
thumb_func_start ScrCmd_Unk0231
ScrCmd_Unk0231: ; 0x02045170
push {r3-r6, lr}
sub sp, #0x4
add r5, r0, #0x0
@@ -1722,8 +1722,8 @@ FUN_02045170: ; 0x02045170
pop {r3-r6, pc}
.balign 4
thumb_func_start FUN_020451D0
FUN_020451D0: ; 0x020451D0
thumb_func_start ScrCmd_Unk02B7
ScrCmd_Unk02B7: ; 0x020451D0
push {r3-r7, lr}
sub sp, #0x8
add r4, r0, #0x0
@@ -1795,7 +1795,7 @@ _0204524C:
add sp, #0x8
pop {r3-r7, pc}
thumb_func_start FUN_02045264
FUN_02045264: ; 0x02045264
thumb_func_start ScrCmd_Unk00A0
ScrCmd_Unk00A0: ; 0x02045264
mov r0, #0x0
bx lr

View File

@@ -1,391 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.section .rodata
.global UNK_020F40A0
UNK_020F40A0: ; 0x020F40A0
.byte 0x8E, 0x00, 0x0B, 0x00, 0xFF, 0xFF
.global UNK_020F40A6
UNK_020F40A6: ; 0x020F40A6
.byte 0x92, 0x00, 0x0E, 0x00, 0xFF, 0xFF
.global UNK_020F40AC
UNK_020F40AC: ; 0x020F40AC
.byte 0x8C, 0x00, 0x0E, 0x00, 0x06, 0x00, 0xFF, 0xFF
.global UNK_020F40B4
UNK_020F40B4: ; 0x020F40B4
.byte 0x8D, 0x00, 0x0E, 0x00, 0x06, 0x00, 0xFF, 0xFF
.global UNK_020F40BC
UNK_020F40BC: ; 0x020F40BC
.byte 0x92, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x08, 0x00, 0xFF, 0xFF
.global UNK_020F40C6
UNK_020F40C6: ; 0x020F40C6
.byte 0x24, 0x00, 0x22, 0x00, 0x23, 0x00, 0x25, 0x00, 0xFF, 0xFF
.global UNK_020F40D0
UNK_020F40D0: ; 0x020F40D0
.byte 0x90, 0x00, 0x0D, 0x00, 0x0F, 0x00, 0x0A, 0x00, 0xFF, 0xFF
.global UNK_020F40DA
UNK_020F40DA: ; 0x020F40DA
.byte 0x92, 0x00, 0x06, 0x00, 0x08, 0x00, 0x0D, 0x00, 0xFF, 0xFF
.global UNK_020F40E4
UNK_020F40E4: ; 0x020F40E4
.byte 0x92, 0x00, 0x08, 0x00, 0x0D, 0x00, 0x0F, 0x00, 0xFF, 0xFF
.global UNK_020F40EE
UNK_020F40EE: ; 0x020F40EE
.byte 0x92, 0x00, 0x0D, 0x00, 0x0F, 0x00, 0x0A, 0x00, 0xFF, 0xFF
.global UNK_020F40F8
UNK_020F40F8: ; 0x020F40F8
.byte 0x8F, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x08, 0x00, 0xFF, 0xFF
.global UNK_020F4102
UNK_020F4102: ; 0x020F4102
.byte 0x92, 0x00, 0x0F, 0x00, 0x0A, 0x00, 0x09, 0x00, 0xFF, 0xFF
.global UNK_020F410C
UNK_020F410C: ; 0x020F410C
.byte 0x07, 0x00, 0x16, 0x00, 0x19, 0x00, 0x1A, 0x00, 0x1B, 0x00, 0xFF, 0xFF
.global UNK_020F4118
UNK_020F4118: ; 0x020F4118
.byte 0x73, 0x00, 0x74, 0x00, 0x75, 0x00, 0x77, 0x00, 0x78, 0x00, 0x79, 0x00, 0xFF, 0xFF
.global UNK_020F4126
UNK_020F4126: ; 0x020F4126
.byte 0x2E, 0x00, 0x2F, 0x00, 0x31, 0x00, 0x34, 0x00, 0x30, 0x00, 0x2D, 0x00, 0xFF, 0xFF
.global UNK_020F4134
UNK_020F4134: ; 0x020F4134
.byte 0x6D, 0x01, 0x60, 0x01, 0x55, 0x01, 0x5D, 0x01, 0x7B, 0x01, 0x56, 0x01, 0xFF, 0xFF
.global UNK_020F4142
UNK_020F4142: ; 0x020F4142
.byte 0x02, 0x00, 0x09, 0x00, 0x1E, 0x00, 0x25, 0x00, 0x2C, 0x00, 0x10, 0x00, 0x17, 0x00, 0xFF, 0xFF
.global UNK_020F4152
UNK_020F4152: ; 0x020F4152
.byte 0x1B, 0x00, 0x22, 0x00, 0x29, 0x00, 0x30, 0x00, 0x06, 0x00, 0x0D, 0x00, 0x14, 0x00, 0xFF, 0xFF
.global UNK_020F4162
UNK_020F4162: ; 0x020F4162
.byte 0x03, 0x00, 0x0A, 0x00, 0x1F, 0x00, 0x26, 0x00, 0x2D, 0x00, 0x11, 0x00, 0x18, 0x00, 0xFF, 0xFF
.global UNK_020F4172
UNK_020F4172: ; 0x020F4172
.byte 0x04, 0x00, 0x19, 0x00, 0x20, 0x00, 0x27, 0x00, 0x2E, 0x00, 0x0B, 0x00, 0x12, 0x00, 0xFF, 0xFF
.global UNK_020F4182
UNK_020F4182: ; 0x020F4182
.byte 0x9A, 0x01, 0x58, 0x01, 0x7D, 0x01, 0x5B, 0x01, 0x68, 0x01, 0x57, 0x01, 0x8D, 0x01, 0xFF, 0xFF
.global UNK_020F4192
UNK_020F4192: ; 0x020F4192
.byte 0x01, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x2B, 0x00, 0x0F, 0x00, 0x16, 0x00, 0x24, 0x00, 0xFF, 0xFF
.global UNK_020F41A2
UNK_020F41A2: ; 0x020F41A2
.byte 0x1A, 0x00, 0x21, 0x00, 0x28, 0x00, 0x2F, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x13, 0x00, 0xFF, 0xFF
.global UNK_020F41B2
UNK_020F41B2: ; 0x020F41B2
.byte 0x07, 0x00, 0x31, 0x00, 0x1C, 0x00, 0x2A, 0x00, 0x0E, 0x00, 0x15, 0x00, 0x23, 0x00, 0xFF, 0xFF
.global UNK_020F41C2
UNK_020F41C2: ; 0x020F41C2
.byte 0x0E, 0x00, 0x06, 0x00, 0x08, 0x00, 0x0D, 0x00, 0x0F, 0x00, 0x0A, 0x00, 0x09, 0x00, 0x0B, 0x00
.byte 0xFF, 0xFF
.global UNK_020F41D4
UNK_020F41D4: ; 0x020F41D4
.byte 0x3B, 0x00, 0x39, 0x00, 0x3A, 0x00, 0x37, 0x00, 0x38, 0x00, 0x3C, 0x00, 0x3D, 0x00, 0x3E, 0x00
.byte 0xFF, 0xFF
.global UNK_020F41E6
UNK_020F41E6: ; 0x020F41E6
.byte 0x11, 0x00, 0x1A, 0x00, 0x19, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x12, 0x00, 0x16, 0x00, 0x13, 0x00
.byte 0x14, 0x00, 0x15, 0x00, 0x1B, 0x00, 0xFF, 0xFF
.global UNK_020F41FE
UNK_020F41FE: ; 0x020F41FE
.byte 0x04, 0x00, 0x03, 0x00, 0x02, 0x00, 0x4E, 0x00, 0x3F, 0x00, 0x4F, 0x00, 0x4C, 0x00, 0x4D, 0x00
.byte 0x89, 0x00, 0x8A, 0x00, 0x8B, 0x00, 0x91, 0x00, 0xFF, 0xFF
.global UNK_020F4218
UNK_020F4218: ; 0x020F4218
.byte 0x04, 0x00, 0x01, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x04, 0x00, 0x11, 0x00, 0x01, 0x00
.byte 0x1A, 0x00, 0x02, 0x00, 0x19, 0x00, 0x04, 0x00, 0x18, 0x00, 0x05, 0x00, 0x17, 0x00, 0x06, 0x00
.byte 0x1C, 0x00, 0x03, 0x00, 0x12, 0x00, 0x01, 0x00, 0x16, 0x00, 0x01, 0x00, 0x15, 0x00, 0x02, 0x00
.byte 0x13, 0x00, 0x02, 0x00, 0x14, 0x00, 0x02, 0x00, 0x1B, 0x00, 0x04, 0x00, 0x4E, 0x00, 0x02, 0x00
.byte 0x4F, 0x00, 0x02, 0x00, 0x4C, 0x00, 0x03, 0x00, 0x4D, 0x00, 0x04, 0x00
.section .data
.balign 4, 0
.global UNK_02105DEC
UNK_02105DEC: ; 0x02105DEC
.word UNK_020F410C
.word UNK_020F4118
.global UNK_02105DF4
UNK_02105DF4: ; 0x02105DF4
.word UNK_020F4192
.word UNK_020F4142
.word UNK_020F4162
.word UNK_020F4172
.word UNK_020F41A2
.word UNK_020F4152
.word UNK_020F41B2
.global UNK_02105E10
UNK_02105E10: ; 0x02105E10
.word UNK_020F40A6
.word UNK_020F40B4
.word UNK_020F40AC
.word UNK_020F40BC
.word UNK_020F40C6
.word UNK_020F40F8
.word UNK_020F40DA
.word UNK_020F40E4
.word UNK_020F41E6
.word UNK_020F41FE
.word UNK_020F41D4
.word UNK_020F4126
.word UNK_020F4182
.word UNK_020F4134
.word UNK_020F40EE
.word UNK_020F40D0
.word UNK_020F4102
.word UNK_020F40A0
.word UNK_020F41C2
.text
thumb_func_start FUN_0203FCF4
FUN_0203FCF4: ; 0x0203FCF4
push {r4-r7, lr}
sub sp, #0x84
add r7, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r7, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
mov r4, #0x0
add r6, r4, #0x0
add r5, r4, #0x0
_0203FD10:
add r0, r7, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl Sav2_PlayerData_GetProfileAddr
add r1, r5, #0x0
bl PlayerProfile_TestBadgeFlag
cmp r0, #0x1
bne _0203FD2C
add r0, r6, #0x1
lsl r0, r0, #0x18
lsr r6, r0, #0x18
_0203FD2C:
add r0, r5, #0x1
lsl r0, r0, #0x18
lsr r5, r0, #0x18
cmp r5, #0x8
blo _0203FD10
cmp r6, #0x8
bhi _0203FD70
add r0, r6, r6
add r0, pc
ldrh r0, [r0, #0x6]
lsl r0, r0, #0x10
asr r0, r0, #0x10
add pc, r0
_0203FD46: ; jump table (using 16-bit offset)
.short _0203FD58 - _0203FD46 - 2; case 0
.short _0203FD5C - _0203FD46 - 2; case 1
.short _0203FD5C - _0203FD46 - 2; case 2
.short _0203FD60 - _0203FD46 - 2; case 3
.short _0203FD60 - _0203FD46 - 2; case 4
.short _0203FD64 - _0203FD46 - 2; case 5
.short _0203FD64 - _0203FD46 - 2; case 6
.short _0203FD68 - _0203FD46 - 2; case 7
.short _0203FD6C - _0203FD46 - 2; case 8
_0203FD58:
mov r1, #0x1
b _0203FD72
_0203FD5C:
mov r1, #0x2
b _0203FD72
_0203FD60:
mov r1, #0x3
b _0203FD72
_0203FD64:
mov r1, #0x4
b _0203FD72
_0203FD68:
mov r1, #0x5
b _0203FD72
_0203FD6C:
mov r1, #0x6
b _0203FD72
_0203FD70:
mov r1, #0x1
_0203FD72:
ldr r0, _0203FDB4 ; =UNK_020F4218
mov r2, #0x0
add r6, sp, #0x4
_0203FD78:
lsl r3, r2, #0x2
add r5, r0, r3
ldrh r3, [r5, #0x2]
cmp r1, r3
blt _0203FD8E
ldrh r5, [r5, #0x0]
lsl r3, r4, #0x1
strh r5, [r6, r3]
add r3, r4, #0x1
lsl r3, r3, #0x18
lsr r4, r3, #0x18
_0203FD8E:
add r2, r2, #0x1
lsl r2, r2, #0x18
lsr r2, r2, #0x18
cmp r2, #0x13
blo _0203FD78
ldr r1, _0203FDB8 ; =0x0000FFFF
lsl r0, r4, #0x1
add r2, sp, #0x4
strh r1, [r2, r0]
mov r3, #0x0
str r3, [sp, #0x0]
ldr r0, [r7, #0x74]
add r7, #0x80
ldr r1, [r7, #0x0]
bl MOD06_0223D3D0
mov r0, #0x1
add sp, #0x84
pop {r4-r7, pc}
.balign 4
_0203FDB4: .word UNK_020F4218
_0203FDB8: .word 0x0000FFFF
thumb_func_start FUN_0203FDBC
FUN_0203FDBC: ; 0x0203FDBC
push {r3-r4, lr}
sub sp, #0x4
add r4, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r2, r0, #0x0
ldr r0, _0203FE00 ; =0x0000FFF8
add r0, r2, r0
lsl r0, r0, #0x10
lsr r0, r0, #0x10
cmp r0, #0x5
bhi _0203FDE4
mov r0, #0x1
b _0203FDE6
_0203FDE4:
mov r0, #0x0
_0203FDE6:
lsl r3, r2, #0x2
str r0, [sp, #0x0]
ldr r2, _0203FE04 ; =UNK_02105E10
ldr r0, [r4, #0x74]
add r4, #0x80
ldr r2, [r2, r3]
ldr r1, [r4, #0x0]
mov r3, #0x0
bl MOD06_0223D3D0
mov r0, #0x1
add sp, #0x4
pop {r3-r4, pc}
.balign 4
_0203FE00: .word 0x0000FFF8
_0203FE04: .word UNK_02105E10
thumb_func_start FUN_0203FE08
FUN_0203FE08: ; 0x0203FE08
push {r3-r4, lr}
sub sp, #0x4
add r4, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r2, r0, #0x0
cmp r2, #0x1
bhi _0203FE28
mov r0, #0x1
b _0203FE2A
_0203FE28:
mov r0, #0x0
_0203FE2A:
lsl r3, r2, #0x2
str r0, [sp, #0x0]
ldr r2, _0203FE44 ; =UNK_02105DEC
ldr r0, [r4, #0x74]
add r4, #0x80
ldr r2, [r2, r3]
ldr r1, [r4, #0x0]
mov r3, #0x1
bl MOD06_0223D3D0
mov r0, #0x1
add sp, #0x4
pop {r3-r4, pc}
.balign 4
_0203FE44: .word UNK_02105DEC
thumb_func_start FUN_0203FE48
FUN_0203FE48: ; 0x0203FE48
push {r3-r4, lr}
sub sp, #0x4
add r4, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r2, r0, #0x0
mov r0, #0x0
lsl r3, r2, #0x2
str r0, [sp, #0x0]
ldr r2, _0203FE7C ; =UNK_02105DF4
ldr r0, [r4, #0x74]
add r4, #0x80
ldr r2, [r2, r3]
ldr r1, [r4, #0x0]
mov r3, #0x2
bl MOD06_0223D3D0
mov r0, #0x1
add sp, #0x4
pop {r3-r4, pc}
.balign 4
_0203FE7C: .word UNK_02105DF4
thumb_func_start FUN_0203FE80
FUN_0203FE80: ; 0x0203FE80
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0x10]
bl FUN_02038AD0
mov r0, #0x1
pop {r3, pc}

View File

@@ -1,465 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.section .rodata
.global UNK_020F4574
UNK_020F4574: ; 0x020F4574
.byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
.text
thumb_func_start FUN_020453F4
FUN_020453F4: ; 0x020453F4
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl Sav2_Pokedex_get
add r4, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
add r5, #0x80
add r1, r0, #0x0
ldr r0, [r5, #0x0]
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
bl Pokedex_GetSinnohDexFlag
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02045424
FUN_02045424: ; 0x02045424
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl Sav2_Pokedex_get
bl Pokedex_SetSinnohDexFlag
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_02045438
FUN_02045438: ; 0x02045438
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r5, #0x80
add r4, r0, #0x0
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
bl FUN_02034E30
bl FUN_02034E20
bl FUN_02055474
strh r0, [r4, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02045468
FUN_02045468: ; 0x02045468
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl FUN_02034E30
bl FUN_02034E20
mov r1, #0x1
bl FUN_02055488
mov r0, #0x0
pop {r3, pc}
.balign 4
thumb_func_start FUN_02045484
FUN_02045484: ; 0x02045484
push {r4-r6, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r4, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r6, r0, #0x0
cmp r4, #0x8
blo _020454B6
bl ErrorHandling
_020454B6:
add r5, #0x80
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
bl Sav2_PlayerData_GetProfileAddr
add r1, r4, #0x0
bl PlayerProfile_TestBadgeFlag
strh r0, [r6, #0x0]
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_020454CC
FUN_020454CC: ; 0x020454CC
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r4, r0, #0x0
cmp r4, #0x8
blo _020454EA
bl ErrorHandling
_020454EA:
add r5, #0x80
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
bl Sav2_PlayerData_GetProfileAddr
add r1, r4, #0x0
bl PlayerProfile_SetBadgeFlag
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02045500
FUN_02045500: ; 0x02045500
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r5, #0x80
add r4, r0, #0x0
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
bl FUN_0205ECE0
strh r0, [r4, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_0204552C
FUN_0204552C: ; 0x0204552C
push {r3-r7, lr}
add r6, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r6, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
mov r4, #0x0
ldr r7, _02045578 ; =UNK_020F4574
str r0, [sp, #0x0]
add r5, r4, #0x0
_02045548:
add r0, r6, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl Sav2_PlayerData_GetProfileAddr
ldrb r1, [r7, r4]
bl PlayerProfile_TestBadgeFlag
cmp r0, #0x1
bne _02045564
add r0, r5, #0x1
lsl r0, r0, #0x10
lsr r5, r0, #0x10
_02045564:
add r0, r4, #0x1
lsl r0, r0, #0x10
lsr r4, r0, #0x10
cmp r4, #0x8
blo _02045548
ldr r0, [sp, #0x0]
strh r5, [r0, #0x0]
mov r0, #0x0
pop {r3-r7, pc}
nop
_02045578: .word UNK_020F4574
thumb_func_start FUN_0204557C
FUN_0204557C: ; 0x0204557C
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
bl FUN_0205ECD4
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_02045590
FUN_02045590: ; 0x02045590
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r5, #0x80
add r4, r0, #0x0
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
bl FUN_0205ED3C
strh r0, [r4, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_020455BC
FUN_020455BC: ; 0x020455BC
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
bl FUN_0205ED1C
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_020455D0
FUN_020455D0: ; 0x020455D0
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
bl FUN_0205ED2C
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_020455E4
FUN_020455E4: ; 0x020455E4
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r5, #0x80
add r4, r0, #0x0
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
bl FUN_0205ED6C
strh r0, [r4, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02045610
FUN_02045610: ; 0x02045610
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
bl FUN_0205ED4C
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_02045624
FUN_02045624: ; 0x02045624
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
bl FUN_0205ED5C
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_02045638
FUN_02045638: ; 0x02045638
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r5, #0x80
add r4, r0, #0x0
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
bl FUN_0205ED0C
strh r0, [r4, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02045664
FUN_02045664: ; 0x02045664
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
bl FUN_0205ECFC
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_02045678
FUN_02045678: ; 0x02045678
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
ldr r2, [r5, #0x8]
add r4, r0, #0x0
add r1, r2, #0x1
str r1, [r5, #0x8]
ldrb r1, [r2, #0x0]
cmp r1, #0x0
beq _020456A6
cmp r1, #0x1
beq _0204569E
cmp r1, #0x2
beq _020456AE
b _020456CC
_0204569E:
mov r1, #0x1
bl FUN_0205F264
b _020456D0
_020456A6:
mov r1, #0x0
bl FUN_0205F264
b _020456D0
_020456AE:
add r0, r5, #0x0
bl ScriptReadHalfword
add r5, #0x80
add r1, r0, #0x0
ldr r0, [r5, #0x0]
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
mov r1, #0x2
bl FUN_0205F264
strh r0, [r5, #0x0]
b _020456D0
_020456CC:
bl ErrorHandling
_020456D0:
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start FUN_020456D4
FUN_020456D4: ; 0x020456D4
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
ldr r2, [r5, #0x8]
add r4, r0, #0x0
add r1, r2, #0x1
str r1, [r5, #0x8]
ldrb r1, [r2, #0x0]
cmp r1, #0x0
beq _02045700
cmp r1, #0x1
beq _020456FA
cmp r1, #0x2
beq _02045706
b _02045722
_020456FA:
bl FUN_0205F274
b _02045726
_02045700:
bl FUN_0205F284
b _02045726
_02045706:
add r0, r5, #0x0
bl ScriptReadHalfword
add r5, #0x80
add r1, r0, #0x0
ldr r0, [r5, #0x0]
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
bl FUN_0205F294
strh r0, [r5, #0x0]
b _02045726
_02045722:
bl ErrorHandling
_02045726:
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_0204572C
FUN_0204572C: ; 0x0204572C
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_Flags_get
ldr r2, [r5, #0x8]
add r4, r0, #0x0
add r1, r2, #0x1
str r1, [r5, #0x8]
ldrb r1, [r2, #0x0]
cmp r1, #0x0
beq _02045758
cmp r1, #0x1
beq _02045752
cmp r1, #0x2
beq _0204575E
b _0204577A
_02045752:
bl FUN_0205F2A4
b _0204577E
_02045758:
bl FUN_0205F2B4
b _0204577E
_0204575E:
add r0, r5, #0x0
bl ScriptReadHalfword
add r5, #0x80
add r1, r0, #0x0
ldr r0, [r5, #0x0]
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
bl FUN_0205F2C4
strh r0, [r5, #0x0]
b _0204577E
_0204577A:
bl ErrorHandling
_0204577E:
mov r0, #0x0
pop {r3-r5, pc}
.balign 4

View File

@@ -1,316 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
thumb_func_start FUN_02045D88
FUN_02045D88: ; 0x02045D88
push {r4-r6, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r4, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
mov r1, #0x13
bl FUN_02039438
add r1, r5, #0x0
add r1, #0x80
lsl r2, r4, #0x18
add r6, r0, #0x0
ldr r1, [r1, #0x0]
mov r0, #0x20
lsr r2, r2, #0x18
bl FUN_02037CF0
str r0, [r6, #0x0]
ldr r1, _02045DCC ; =FUN_0203BC04
add r0, r5, #0x0
bl SetupNativeScript
mov r0, #0x1
pop {r4-r6, pc}
nop
_02045DCC: .word FUN_0203BC04
thumb_func_start FUN_02045DD0
FUN_02045DD0: ; 0x02045DD0
push {r3-r5, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r4, #0x80
add r5, r0, #0x0
ldr r0, [r4, #0x0]
mov r1, #0x13
bl FUN_02039438
add r4, r0, #0x0
ldr r0, [r4, #0x0]
cmp r0, #0x0
bne _02045DFC
bl ErrorHandling
_02045DFC:
ldr r0, [r4, #0x0]
bl FUN_02037D5C
strh r0, [r5, #0x0]
ldrh r0, [r5, #0x0]
cmp r0, #0x4
bne _02045E0E
mov r0, #0xff
strh r0, [r5, #0x0]
_02045E0E:
ldr r0, [r4, #0x0]
bl FreeToHeap
mov r0, #0x0
str r0, [r4, #0x0]
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02045E1C
FUN_02045E1C: ; 0x02045E1C
mov r0, #0x0
bx lr
thumb_func_start FUN_02045E20
FUN_02045E20: ; 0x02045E20
push {r4-r6, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r4, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r5, #0x80
add r6, r0, #0x0
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_PlayerParty_get
add r1, r6, #0x0
bl GetPartyMonByIndex
mov r1, #0x20
bl FUN_02088DF8
add r5, r0, #0x0
bl FUN_02088EF8
strh r0, [r4, #0x0]
add r0, r5, #0x0
bl FreeToHeap
mov r0, #0x0
pop {r4-r6, pc}
.balign 4
thumb_func_start FUN_02045E74
FUN_02045E74: ; 0x02045E74
push {r3-r7, lr}
sub sp, #0x8
add r5, r0, #0x0
add r0, #0x80
add r7, r1, #0x0
ldr r0, [r0, #0x0]
mov r1, #0x13
str r2, [sp, #0x0]
add r6, r3, #0x0
bl FUN_02039438
str r0, [sp, #0x4]
mov r0, #0x20
bl FUN_02088DD8
add r4, r0, #0x0
ldr r0, [sp, #0x4]
str r4, [r0, #0x0]
ldr r0, [sp, #0x0]
str r0, [r4, #0x0]
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl ScriptEnvironment_GetSav2Ptr
bl Sav2_PlayerData_GetProfileAddr
str r0, [r4, #0x4]
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
str r0, [r4, #0x8]
str r6, [r4, #0xc]
add r0, r5, #0x0
strb r7, [r4, #0x15]
add r0, #0x80
ldr r0, [r0, #0x0]
add r1, r4, #0x0
bl FUN_02038864
ldr r1, _02045EDC ; =FUN_0203BC04
add r0, r5, #0x0
bl SetupNativeScript
add r0, r6, #0x0
bl FreeToHeap
add sp, #0x8
pop {r3-r7, pc}
.balign 4
_02045EDC: .word FUN_0203BC04
thumb_func_start FUN_02045EE0
FUN_02045EE0: ; 0x02045EE0
mov r0, #0x1
bx lr
thumb_func_start FUN_02045EE4
FUN_02045EE4: ; 0x02045EE4
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r4, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_PlayerParty_get
add r1, r4, #0x0
bl GetPartyMonByIndex
add r4, r0, #0x0
mov r1, #0x20
bl FUN_02088DF8
add r3, r0, #0x0
add r0, r5, #0x0
mov r1, #0x1
add r2, r4, #0x0
bl FUN_02045E74
mov r0, #0x1
pop {r3-r5, pc}
thumb_func_start FUN_02045F24
FUN_02045F24: ; 0x02045F24
push {r4-r6, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r6, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r4, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl SavArray_PlayerParty_get
add r1, r6, #0x0
bl GetPartyMonByIndex
add r6, r0, #0x0
mov r0, #0x20
mov r1, #0x4
bl AllocFromHeap
add r3, r0, #0x0
ldr r0, _02045F80 ; =0x0000FFFF
strh r4, [r3, #0x0]
strh r0, [r3, #0x2]
add r0, r5, #0x0
mov r1, #0x0
add r2, r6, #0x0
bl FUN_02045E74
mov r0, #0x1
pop {r4-r6, pc}
.balign 4
_02045F80: .word 0x0000FFFF
thumb_func_start FUN_02045F84
FUN_02045F84: ; 0x02045F84
mov r0, #0x0
bx lr
thumb_func_start FUN_02045F88
FUN_02045F88: ; 0x02045F88
push {r3-r5, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r4, #0x80
add r5, r0, #0x0
ldr r0, [r4, #0x0]
mov r1, #0x13
bl FUN_02039438
ldr r4, [r0, #0x0]
cmp r4, #0x0
bne _02045FB2
bl ErrorHandling
_02045FB2:
ldrb r0, [r4, #0x16]
cmp r0, #0x0
bne _02045FBC
mov r0, #0x0
b _02045FBE
_02045FBC:
mov r0, #0xff
_02045FBE:
strh r0, [r5, #0x0]
add r0, r4, #0x0
bl FUN_02088DF0
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02045FCC
FUN_02045FCC: ; 0x02045FCC
push {r3-r5, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r4, #0x80
add r5, r0, #0x0
ldr r0, [r4, #0x0]
mov r1, #0x13
bl FUN_02039438
ldr r4, [r0, #0x0]
cmp r4, #0x0
bne _02045FF6
bl ErrorHandling
_02045FF6:
ldrb r0, [r4, #0x16]
cmp r0, #0x0
bne _02046000
mov r0, #0x0
b _02046002
_02046000:
mov r0, #0xff
_02046002:
strh r0, [r5, #0x0]
add r0, r4, #0x0
bl FUN_02088DF0
mov r0, #0x0
pop {r3-r5, pc}
.balign 4

View File

@@ -3,8 +3,8 @@
.text
thumb_func_start FUN_0203FE90
FUN_0203FE90: ; 0x0203FE90
thumb_func_start ScrCmd_Unk00F8
ScrCmd_Unk00F8: ; 0x0203FE90
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -26,8 +26,8 @@ FUN_0203FE90: ; 0x0203FE90
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start FUN_0203FEC0
FUN_0203FEC0: ; 0x0203FEC0
thumb_func_start ScrCmd_Unk00F9
ScrCmd_Unk00F9: ; 0x0203FEC0
push {r4, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -65,8 +65,8 @@ FUN_0203FEF4: ; 0x0203FEF4
bl FUN_02082158
pop {r4, pc}
thumb_func_start FUN_0203FF10
FUN_0203FF10: ; 0x0203FF10
thumb_func_start ScrCmd_Unk00FA
ScrCmd_Unk00FA: ; 0x0203FF10
push {r3-r7, lr}
sub sp, #0x38
add r5, r0, #0x0
@@ -173,7 +173,7 @@ FUN_0203FF10: ; 0x0203FF10
str r0, [sp, #0x30]
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
bl FUN_02029EF8
bl Sav2_Chatot_get
str r0, [sp, #0x34]
add r0, sp, #0x14
bl FUN_02081214
@@ -185,8 +185,8 @@ FUN_0203FF10: ; 0x0203FF10
add sp, #0x38
pop {r3-r7, pc}
thumb_func_start FUN_02040028
FUN_02040028: ; 0x02040028
thumb_func_start ScrCmd_Unk00FB
ScrCmd_Unk00FB: ; 0x02040028
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -220,8 +220,8 @@ FUN_02040028: ; 0x02040028
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start FUN_02040074
FUN_02040074: ; 0x02040074
thumb_func_start ScrCmd_Unk00FC
ScrCmd_Unk00FC: ; 0x02040074
push {r3-r7, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -258,8 +258,8 @@ FUN_02040074: ; 0x02040074
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_020400C8
FUN_020400C8: ; 0x020400C8
thumb_func_start ScrCmd_Unk00FD
ScrCmd_Unk00FD: ; 0x020400C8
push {r3-r7, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -296,8 +296,8 @@ FUN_020400C8: ; 0x020400C8
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_0204011C
FUN_0204011C: ; 0x0204011C
thumb_func_start ScrCmd_Unk00FE
ScrCmd_Unk00FE: ; 0x0204011C
push {r3-r7, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -334,8 +334,8 @@ FUN_0204011C: ; 0x0204011C
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02040170
FUN_02040170: ; 0x02040170
thumb_func_start ScrCmd_Unk00FF
ScrCmd_Unk00FF: ; 0x02040170
push {r4-r6, lr}
sub sp, #0x8
add r5, r0, #0x0
@@ -376,8 +376,8 @@ FUN_02040170: ; 0x02040170
pop {r4-r6, pc}
.balign 4
thumb_func_start FUN_020401CC
FUN_020401CC: ; 0x020401CC
thumb_func_start ScrCmd_Unk0100
ScrCmd_Unk0100: ; 0x020401CC
push {r4, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -405,8 +405,8 @@ FUN_020401F0: ; 0x020401F0
bl FUN_02081EB8
pop {r3, pc}
thumb_func_start FUN_02040204
FUN_02040204: ; 0x02040204
thumb_func_start ScrCmd_Unk0101
ScrCmd_Unk0101: ; 0x02040204
push {r4, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -420,8 +420,8 @@ FUN_02040204: ; 0x02040204
mov r0, #0x1
pop {r4, pc}
thumb_func_start FUN_02040220
FUN_02040220: ; 0x02040220
thumb_func_start ScrCmd_Unk0102
ScrCmd_Unk0102: ; 0x02040220
push {r4-r6, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -448,8 +448,8 @@ FUN_02040220: ; 0x02040220
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_0204025C
FUN_0204025C: ; 0x0204025C
thumb_func_start ScrCmd_Unk0103
ScrCmd_Unk0103: ; 0x0204025C
push {r4-r6, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -476,8 +476,8 @@ FUN_0204025C: ; 0x0204025C
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_02040298
FUN_02040298: ; 0x02040298
thumb_func_start ScrCmd_Unk0104
ScrCmd_Unk0104: ; 0x02040298
push {r4-r6, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -504,8 +504,8 @@ FUN_02040298: ; 0x02040298
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_020402D4
FUN_020402D4: ; 0x020402D4
thumb_func_start ScrCmd_Unk0105
ScrCmd_Unk0105: ; 0x020402D4
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -527,8 +527,8 @@ FUN_020402D4: ; 0x020402D4
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02040304
FUN_02040304: ; 0x02040304
thumb_func_start ScrCmd_Unk0106
ScrCmd_Unk0106: ; 0x02040304
push {r4-r6, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -555,8 +555,8 @@ FUN_02040304: ; 0x02040304
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_02040340
FUN_02040340: ; 0x02040340
thumb_func_start ScrCmd_Unk0107
ScrCmd_Unk0107: ; 0x02040340
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -578,8 +578,8 @@ FUN_02040340: ; 0x02040340
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02040370
FUN_02040370: ; 0x02040370
thumb_func_start ScrCmd_Unk0108
ScrCmd_Unk0108: ; 0x02040370
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -601,8 +601,8 @@ FUN_02040370: ; 0x02040370
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_020403A0
FUN_020403A0: ; 0x020403A0
thumb_func_start ScrCmd_Unk0109
ScrCmd_Unk0109: ; 0x020403A0
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -624,8 +624,8 @@ FUN_020403A0: ; 0x020403A0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_020403D0
FUN_020403D0: ; 0x020403D0
thumb_func_start ScrCmd_Unk010A
ScrCmd_Unk010A: ; 0x020403D0
push {r4-r6, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -655,8 +655,8 @@ FUN_020403D0: ; 0x020403D0
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_02040414
FUN_02040414: ; 0x02040414
thumb_func_start ScrCmd_Unk010B
ScrCmd_Unk010B: ; 0x02040414
push {r4-r6, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -686,8 +686,8 @@ FUN_02040414: ; 0x02040414
mov r0, #0x0
pop {r4-r6, pc}
thumb_func_start FUN_02040458
FUN_02040458: ; 0x02040458
thumb_func_start ScrCmd_Unk010C
ScrCmd_Unk010C: ; 0x02040458
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -709,8 +709,8 @@ FUN_02040458: ; 0x02040458
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02040488
FUN_02040488: ; 0x02040488
thumb_func_start ScrCmd_Unk0110
ScrCmd_Unk0110: ; 0x02040488
push {r3-r7, lr}
sub sp, #0x8
add r5, r0, #0x0
@@ -760,8 +760,8 @@ FUN_02040488: ; 0x02040488
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_020404FC
FUN_020404FC: ; 0x020404FC
thumb_func_start ScrCmd_Unk010D
ScrCmd_Unk010D: ; 0x020404FC
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -783,8 +783,8 @@ FUN_020404FC: ; 0x020404FC
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_0204052C
FUN_0204052C: ; 0x0204052C
thumb_func_start ScrCmd_Unk010E
ScrCmd_Unk010E: ; 0x0204052C
push {r4-r6, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -813,8 +813,8 @@ FUN_0204052C: ; 0x0204052C
pop {r4-r6, pc}
.balign 4
thumb_func_start FUN_0204056C
FUN_0204056C: ; 0x0204056C
thumb_func_start ScrCmd_Unk010F
ScrCmd_Unk010F: ; 0x0204056C
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -836,8 +836,8 @@ FUN_0204056C: ; 0x0204056C
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_0204059C
FUN_0204059C: ; 0x0204059C
thumb_func_start ScrCmd_Unk0117
ScrCmd_Unk0117: ; 0x0204059C
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
@@ -849,8 +849,8 @@ FUN_0204059C: ; 0x0204059C
pop {r3, pc}
.balign 4
thumb_func_start FUN_020405B4
FUN_020405B4: ; 0x020405B4
thumb_func_start ScrCmd_Unk0118
ScrCmd_Unk0118: ; 0x020405B4
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
@@ -862,8 +862,8 @@ FUN_020405B4: ; 0x020405B4
pop {r3, pc}
.balign 4
thumb_func_start FUN_020405CC
FUN_020405CC: ; 0x020405CC
thumb_func_start ScrCmd_Unk0111
ScrCmd_Unk0111: ; 0x020405CC
push {r3-r5, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -883,8 +883,8 @@ FUN_020405CC: ; 0x020405CC
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start FUN_020405F8
FUN_020405F8: ; 0x020405F8
thumb_func_start ScrCmd_Unk0112
ScrCmd_Unk0112: ; 0x020405F8
push {r4, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -917,8 +917,8 @@ _02040632:
pop {r3, pc}
.balign 4
thumb_func_start FUN_02040638
FUN_02040638: ; 0x02040638
thumb_func_start ScrCmd_Unk0113
ScrCmd_Unk0113: ; 0x02040638
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
@@ -929,8 +929,8 @@ FUN_02040638: ; 0x02040638
pop {r3, pc}
.balign 4
thumb_func_start FUN_0204064C
FUN_0204064C: ; 0x0204064C
thumb_func_start ScrCmd_Unk0114
ScrCmd_Unk0114: ; 0x0204064C
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
@@ -941,8 +941,8 @@ FUN_0204064C: ; 0x0204064C
pop {r3, pc}
.balign 4
thumb_func_start FUN_02040660
FUN_02040660: ; 0x02040660
thumb_func_start ScrCmd_Unk0115
ScrCmd_Unk0115: ; 0x02040660
push {r4-r5, lr}
sub sp, #0x1c
add r5, r0, #0x0
@@ -991,8 +991,8 @@ _020406BA:
add sp, #0x1c
pop {r4-r5, pc}
thumb_func_start FUN_020406C0
FUN_020406C0: ; 0x020406C0
thumb_func_start ScrCmd_Unk0116
ScrCmd_Unk0116: ; 0x020406C0
push {r3, lr}
ldr r0, [r0, #0x74]
bl MOD06_0224D3E8

View File

@@ -9,8 +9,8 @@ UNK_021C5A10: ; 0x021C5A10
.text
thumb_func_start FUN_02041194
FUN_02041194: ; 0x02041194
thumb_func_start ScrCmd_Unk024E
ScrCmd_Unk024E: ; 0x02041194
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -32,8 +32,8 @@ FUN_02041194: ; 0x02041194
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_020411C4
FUN_020411C4: ; 0x020411C4
thumb_func_start ScrCmd_Unk024F
ScrCmd_Unk024F: ; 0x020411C4
push {r4-r7, lr}
sub sp, #0x24
add r4, r0, #0x0
@@ -213,8 +213,8 @@ _02041336:
.balign 4
_0204133C: .word 0x00000000
thumb_func_start FUN_02041340
FUN_02041340: ; 0x02041340
thumb_func_start ScrCmd_Unk0250
ScrCmd_Unk0250: ; 0x02041340
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]

View File

@@ -1,399 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
thumb_func_start FUN_020413C0
FUN_020413C0: ; 0x020413C0
push {r3-r5, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r5, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl GetVarPointer
add r4, r0, #0x0
add r0, r5, #0x0
bl FUN_02005410
strh r0, [r4, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start FUN_020413E8
FUN_020413E8: ; 0x020413E8
push {r3, lr}
bl ScriptReadHalfword
bl FUN_0200521C
mov r0, #0x0
pop {r3, pc}
.balign 4
thumb_func_start FUN_020413F8
FUN_020413F8: ; 0x020413F8
push {r3, lr}
bl ScriptReadHalfword
bl FUN_02004124
mov r1, #0x0
bl FUN_02005350
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_0204140C
FUN_0204140C: ; 0x0204140C
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r1, [r0, #0x1c]
ldr r1, [r1, #0x0]
bl FUN_0204ABA8
bl FUN_0200521C
mov r0, #0x0
pop {r3, pc}
.balign 4
thumb_func_start FUN_02041424
FUN_02041424: ; 0x02041424
push {r4, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl FUN_0204AB20
mov r0, #0x0
pop {r4, pc}
.balign 4
thumb_func_start FUN_0204143C
FUN_0204143C: ; 0x0204143C
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r4, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
bl FUN_020053CC
ldr r1, _02041460 ; =FUN_02041464
add r0, r5, #0x0
bl SetupNativeScript
mov r0, #0x1
pop {r3-r5, pc}
.balign 4
_02041460: .word FUN_02041464
thumb_func_start FUN_02041464
FUN_02041464: ; 0x02041464
push {r3, lr}
bl FUN_02005404
cmp r0, #0x0
bne _02041472
mov r0, #0x1
pop {r3, pc}
_02041472:
mov r0, #0x0
pop {r3, pc}
.balign 4
thumb_func_start FUN_02041478
FUN_02041478: ; 0x02041478
push {r4, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
mov r0, #0x7f
mov r2, #0x0
bl FUN_0200538C
ldr r1, _02041498 ; =FUN_02041464
add r0, r4, #0x0
bl SetupNativeScript
mov r0, #0x1
pop {r4, pc}
nop
_02041498: .word FUN_02041464
thumb_func_start FUN_0204149C
FUN_0204149C: ; 0x0204149C
push {r3, lr}
ldr r1, [r0, #0x8]
add r3, r1, #0x1
str r3, [r0, #0x8]
ldrb r2, [r1, #0x0]
add r1, r3, #0x1
str r1, [r0, #0x8]
ldrb r1, [r3, #0x0]
add r0, r2, #0x0
bl FUN_020047C8
mov r0, #0x0
pop {r3, pc}
.balign 4
thumb_func_start FUN_020414B8
FUN_020414B8: ; 0x020414B8
push {r3, lr}
bl ScriptReadHalfword
add r1, r0, #0x0
mov r0, #0x4
bl FUN_02005308
mov r0, #0x0
pop {r3, pc}
.balign 4
thumb_func_start FUN_020414CC
FUN_020414CC: ; 0x020414CC
push {r3, lr}
ldr r2, [r0, #0x8]
add r1, r2, #0x1
str r1, [r0, #0x8]
ldrb r0, [r2, #0x0]
bl FUN_020040F4
mov r0, #0x0
pop {r3, pc}
.balign 4
thumb_func_start FUN_020414E0
FUN_020414E0: ; 0x020414E0
push {r4, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl VarGet
bl FUN_020054C8
mov r0, #0x0
pop {r4, pc}
.balign 4
thumb_func_start FUN_020414FC
FUN_020414FC: ; 0x020414FC
push {r4, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl VarGet
mov r1, #0x0
bl FUN_020054F0
mov r0, #0x0
pop {r4, pc}
thumb_func_start FUN_02041518
FUN_02041518: ; 0x02041518
push {r4, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
str r0, [r4, #0x64]
ldr r1, _0204153C ; =FUN_02041540
add r0, r4, #0x0
bl SetupNativeScript
mov r0, #0x1
pop {r4, pc}
nop
_0204153C: .word FUN_02041540
thumb_func_start FUN_02041540
FUN_02041540: ; 0x02041540
push {r3, lr}
ldr r0, [r0, #0x64]
lsl r0, r0, #0x10
lsr r0, r0, #0x10
bl FUN_02005508
cmp r0, #0x0
bne _02041554
mov r0, #0x1
pop {r3, pc}
_02041554:
mov r0, #0x0
pop {r3, pc}
thumb_func_start FUN_02041558
FUN_02041558: ; 0x02041558
push {r3-r5, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r5, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl VarGet
add r0, r5, #0x0
bl FUN_02005578
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start ScrCmd_waitcry
ScrCmd_waitcry: ; 0x02041588
push {r3, lr}
ldr r1, _02041594 ; =FUN_02041598
bl SetupNativeScript
mov r0, #0x1
pop {r3, pc}
.balign 4
_02041594: .word FUN_02041598
thumb_func_start FUN_02041598
FUN_02041598: ; 0x02041598
push {r3, lr}
bl FUN_02005670
cmp r0, #0x0
bne _020415A6
mov r0, #0x1
pop {r3, pc}
_020415A6:
mov r0, #0x0
pop {r3, pc}
.balign 4
thumb_func_start ScrCmd_playbgm
ScrCmd_playbgm: ; 0x020415AC
push {r3, lr}
bl ScriptReadHalfword
bl PlayBGM
mov r0, #0x0
pop {r3, pc}
.balign 4
thumb_func_start FUN_020415BC
FUN_020415BC: ; 0x020415BC
push {r3, lr}
ldr r1, _020415C8 ; =FUN_020415CC
bl SetupNativeScript
mov r0, #0x1
pop {r3, pc}
.balign 4
_020415C8: .word FUN_020415CC
thumb_func_start FUN_020415CC
FUN_020415CC: ; 0x020415CC
push {r3, lr}
bl FUN_02005CBC
cmp r0, #0x0
bne _020415DA
mov r0, #0x1
pop {r3, pc}
_020415DA:
mov r0, #0x0
pop {r3, pc}
.balign 4
thumb_func_start FUN_020415E0
FUN_020415E0: ; 0x020415E0
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
add r5, #0x80
add r4, r0, #0x0
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
bl FUN_02029EF8
bl FUN_02005D20
cmp r0, #0x1
bne _02041610
mov r0, #0x1
strh r0, [r4, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
_02041610:
mov r0, #0x0
strh r0, [r4, #0x0]
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02041618
FUN_02041618: ; 0x02041618
push {r4, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl GetVarPointer
add r4, r0, #0x0
bl FUN_02005E28
cmp r0, #0x0
bne _0204163C
mov r0, #0x1
strh r0, [r4, #0x0]
mov r0, #0x0
pop {r4, pc}
_0204163C:
mov r0, #0x0
strh r0, [r4, #0x0]
pop {r4, pc}
.balign 4
thumb_func_start FUN_02041644
FUN_02041644: ; 0x02041644
push {r3, lr}
bl FUN_02005E64
mov r0, #0x1
pop {r3, pc}
.balign 4
thumb_func_start FUN_02041650
FUN_02041650: ; 0x02041650
push {r3, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl FUN_02029EF8
bl FUN_02005E6C
mov r0, #0x1
pop {r3, pc}
thumb_func_start FUN_02041664
FUN_02041664: ; 0x02041664
push {r3, lr}
mov r1, #0x0
mov r0, #0x3f
add r2, r1, #0x0
bl FUN_0200433C
mov r0, #0x1
pop {r3, pc}
thumb_func_start FUN_02041674
FUN_02041674: ; 0x02041674
push {r3-r5, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r5, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl VarGet
add r1, r0, #0x0
add r0, r5, #0x0
bl FUN_0200488C
mov r0, #0x0
pop {r3-r5, pc}
.balign 4

View File

@@ -3,8 +3,8 @@
.text
thumb_func_start FUN_020416A8
FUN_020416A8: ; 0x020416A8
thumb_func_start ScrCmd_Unk00B6
ScrCmd_Unk00B6: ; 0x020416A8
push {r3-r7, lr}
sub sp, #0x18
add r5, r0, #0x0
@@ -91,8 +91,8 @@ _02041748:
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02041770
FUN_02041770: ; 0x02041770
thumb_func_start ScrCmd_Unk00B7
ScrCmd_Unk00B7: ; 0x02041770
push {r4-r6, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -146,8 +146,8 @@ _020417DC:
mov r0, #0x1
pop {r4-r6, pc}
thumb_func_start FUN_020417E0
FUN_020417E0: ; 0x020417E0
thumb_func_start ScrCmd_Unk00B8
ScrCmd_Unk00B8: ; 0x020417E0
push {r3-r5, lr}
add r4, r0, #0x0
add r0, #0x80
@@ -166,8 +166,8 @@ FUN_020417E0: ; 0x020417E0
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start FUN_02041808
FUN_02041808: ; 0x02041808
thumb_func_start ScrCmd_Unk00B9
ScrCmd_Unk00B9: ; 0x02041808
push {r3-r7, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -207,8 +207,8 @@ _02041854:
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_0204185C
FUN_0204185C: ; 0x0204185C
thumb_func_start ScrCmd_Unk00E4
ScrCmd_Unk00E4: ; 0x0204185C
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -230,8 +230,8 @@ FUN_0204185C: ; 0x0204185C
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_0204188C
FUN_0204188C: ; 0x0204188C
thumb_func_start ScrCmd_Unk00E5
ScrCmd_Unk00E5: ; 0x0204188C
push {r3-r7, lr}
sub sp, #0x10
add r5, r0, #0x0
@@ -287,8 +287,8 @@ _020418F2:
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_0204190C
FUN_0204190C: ; 0x0204190C
thumb_func_start ScrCmd_Unk02A0
ScrCmd_Unk02A0: ; 0x0204190C
push {r3-r7, lr}
sub sp, #0x8
add r5, r0, #0x0
@@ -332,8 +332,8 @@ FUN_0204190C: ; 0x0204190C
add sp, #0x8
pop {r3-r7, pc}
thumb_func_start FUN_02041970
FUN_02041970: ; 0x02041970
thumb_func_start ScrCmd_Unk00E7
ScrCmd_Unk00E7: ; 0x02041970
push {r3-r7, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -396,8 +396,8 @@ _020419EC:
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_020419F8
FUN_020419F8: ; 0x020419F8
thumb_func_start ScrCmd_Unk00E8
ScrCmd_Unk00E8: ; 0x020419F8
push {r3-r7, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -460,8 +460,8 @@ _02041A74:
pop {r3-r7, pc}
.balign 4
thumb_func_start FUN_02041A80
FUN_02041A80: ; 0x02041A80
thumb_func_start ScrCmd_Unk00E9
ScrCmd_Unk00E9: ; 0x02041A80
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -484,8 +484,8 @@ FUN_02041A80: ; 0x02041A80
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02041AB4
FUN_02041AB4: ; 0x02041AB4
thumb_func_start ScrCmd_Unk00EA
ScrCmd_Unk00EA: ; 0x02041AB4
push {r4, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
@@ -499,16 +499,16 @@ FUN_02041AB4: ; 0x02041AB4
pop {r4, pc}
.balign 4
thumb_func_start FUN_02041AD4
FUN_02041AD4: ; 0x02041AD4
thumb_func_start ScrCmd_Unk00EB
ScrCmd_Unk00EB: ; 0x02041AD4
push {r3, lr}
ldr r0, [r0, #0x74]
bl FUN_02048498
mov r0, #0x1
pop {r3, pc}
thumb_func_start FUN_02041AE0
FUN_02041AE0: ; 0x02041AE0
thumb_func_start ScrCmd_Unk00EC
ScrCmd_Unk00EC: ; 0x02041AE0
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -530,8 +530,8 @@ FUN_02041AE0: ; 0x02041AE0
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02041B10
FUN_02041B10: ; 0x02041B10
thumb_func_start ScrCmd_Unk00ED
ScrCmd_Unk00ED: ; 0x02041B10
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -553,8 +553,8 @@ FUN_02041B10: ; 0x02041B10
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02041B40
FUN_02041B40: ; 0x02041B40
thumb_func_start ScrCmd_Unk02BC
ScrCmd_Unk02BC: ; 0x02041B40
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -576,8 +576,8 @@ FUN_02041B40: ; 0x02041B40
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02041B70
FUN_02041B70: ; 0x02041B70
thumb_func_start ScrCmd_Unk00EE
ScrCmd_Unk00EE: ; 0x02041B70
push {r3-r5, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -597,8 +597,8 @@ FUN_02041B70: ; 0x02041B70
pop {r3-r5, pc}
.balign 4
thumb_func_start FUN_02041B9C
FUN_02041B9C: ; 0x02041B9C
thumb_func_start ScrCmd_Unk00EF
ScrCmd_Unk00EF: ; 0x02041B9C
push {r4, lr}
sub sp, #0x8
add r4, r0, #0x0
@@ -618,8 +618,8 @@ FUN_02041B9C: ; 0x02041B9C
add sp, #0x8
pop {r4, pc}
thumb_func_start FUN_02041BC4
FUN_02041BC4: ; 0x02041BC4
thumb_func_start ScrCmd_Unk00F0
ScrCmd_Unk00F0: ; 0x02041BC4
push {r3-r5, lr}
add r0, #0x80
ldr r0, [r0, #0x0]
@@ -639,8 +639,8 @@ FUN_02041BC4: ; 0x02041BC4
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start FUN_02041BF0
FUN_02041BF0: ; 0x02041BF0
thumb_func_start ScrCmd_Unk00F1
ScrCmd_Unk00F1: ; 0x02041BF0
push {r3-r7, lr}
add r6, r0, #0x0
add r0, #0x80

View File

@@ -1,234 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
thumb_func_start FUN_02041C38
FUN_02041C38: ; 0x02041C38
push {r4-r7, lr}
sub sp, #0xc
add r4, r0, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
mov r1, #0xf
bl FUN_02039438
add r6, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl FUN_0202881C
add r5, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r7, [r0, #0xc]
add r0, r4, #0x0
bl ScriptReadHalfword
cmp r0, #0x6
bls _02041C6C
b _02041E38
_02041C6C:
add r0, r0, r0
add r0, pc
ldrh r0, [r0, #0x6]
lsl r0, r0, #0x10
asr r0, r0, #0x10
add pc, r0
_02041C78: ; jump table (using 16-bit offset)
.short _02041C86 - _02041C78 - 2; case 0
.short _02041CBC - _02041C78 - 2; case 1
.short _02041CF2 - _02041C78 - 2; case 2
.short _02041D28 - _02041C78 - 2; case 3
.short _02041D5E - _02041C78 - 2; case 4
.short _02041D94 - _02041C78 - 2; case 5
.short _02041DCE - _02041C78 - 2; case 6
_02041C86:
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r6, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl GetVarPointer
add r4, r0, #0x0
add r0, r5, #0x0
add r1, r6, #0x0
bl FUN_02028828
strh r0, [r4, #0x0]
add sp, #0xc
mov r0, #0x0
pop {r4-r7, pc}
_02041CBC:
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r6, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl GetVarPointer
add r4, r0, #0x0
add r0, r5, #0x0
add r1, r6, #0x0
bl FUN_02028840
strh r0, [r4, #0x0]
add sp, #0xc
mov r0, #0x0
pop {r4-r7, pc}
_02041CF2:
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r5, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl VarGet
add r3, r0, #0x0
mov r0, #0x0
str r0, [sp, #0x0]
ldr r0, [r6, #0x0]
add r1, r7, #0x0
add r2, r5, #0x0
bl BufferEasyChatWord
b _02041E38
_02041D28:
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r5, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl VarGet
add r3, r0, #0x0
mov r0, #0x1
str r0, [sp, #0x0]
ldr r0, [r6, #0x0]
add r1, r7, #0x0
add r2, r5, #0x0
bl BufferEasyChatWord
b _02041E38
_02041D5E:
mov r1, #0x0
add r0, r5, #0x0
add r2, r1, #0x0
bl FUN_020287A8
add r5, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl GetVarPointer
mov r2, #0x0
str r2, [sp, #0x0]
str r5, [sp, #0x4]
str r0, [sp, #0x8]
ldr r0, [r4, #0x74]
mov r1, #0x5
mov r3, #0x7
bl FUN_020385CC
add sp, #0xc
mov r0, #0x1
pop {r4-r7, pc}
_02041D94:
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r7, r0, #0x0
add r0, r5, #0x0
mov r1, #0x1
bl FUN_02028828
add r6, r0, #0x0
add r0, r5, #0x0
add r1, r7, #0x0
mov r2, #0x1
bl FUN_02028700
cmp r6, #0x0
beq _02041DC8
add r4, #0x80
ldr r0, [r4, #0x0]
bl FUN_020612F8
_02041DC8:
add sp, #0xc
mov r0, #0x0
pop {r4-r7, pc}
_02041DCE:
mov r0, #0x40
mov r1, #0x20
bl String_ctor
add r6, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl Sav2_PlayerData_GetProfileAddr
add r1, r6, #0x0
add r7, r0, #0x0
bl PlayerName_FlatToString
add r0, r5, #0x0
mov r1, #0x0
mov r2, #0x1
add r3, r6, #0x0
bl FUN_020287C0
add r0, r7, #0x0
bl PlayerProfile_GetTrainerGender
add r2, r0, #0x0
add r0, r5, #0x0
mov r1, #0x0
bl FUN_020287EC
add r0, r5, #0x0
mov r1, #0x0
mov r2, #0x2
bl FUN_02028810
bl MTRandom
add r2, r0, #0x0
add r0, r5, #0x0
mov r1, #0x0
bl FUN_02028788
add r0, r6, #0x0
bl String_dtor
add r0, r5, #0x0
mov r1, #0x0
mov r2, #0x1
bl FUN_02028700
add r4, #0x80
ldr r0, [r4, #0x0]
bl FUN_020612EC
_02041E38:
mov r0, #0x0
add sp, #0xc
pop {r4-r7, pc}
.balign 4

View File

@@ -33,8 +33,8 @@ UNK_020F4270: ; 0x020F4270
.text
thumb_func_start FUN_02041E40
FUN_02041E40: ; 0x02041E40
thumb_func_start ScrCmd_Unk0235
ScrCmd_Unk0235: ; 0x02041E40
push {r3-r7, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
@@ -217,8 +217,8 @@ _02041FD2:
nop
_02041FD8: .word 0x00000233
thumb_func_start FUN_02041FDC
FUN_02041FDC: ; 0x02041FDC
thumb_func_start ScrCmd_Unk0236
ScrCmd_Unk0236: ; 0x02041FDC
push {r4, lr}
add r4, r0, #0x0
bl ScriptReadHalfword
@@ -235,8 +235,8 @@ FUN_02041FDC: ; 0x02041FDC
pop {r4, pc}
.balign 4
thumb_func_start FUN_02042000
FUN_02042000: ; 0x02042000
thumb_func_start ScrCmd_Unk02B8
ScrCmd_Unk02B8: ; 0x02042000
push {r3-r5, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -261,8 +261,8 @@ FUN_02042000: ; 0x02042000
mov r0, #0x0
pop {r3-r5, pc}
thumb_func_start FUN_02042038
FUN_02042038: ; 0x02042038
thumb_func_start ScrCmd_Unk0237
ScrCmd_Unk0237: ; 0x02042038
push {r3-r7, lr}
add r5, r0, #0x0
add r0, #0x80
@@ -356,8 +356,8 @@ _02042106:
nop
_0204210C: .word 0x00000232
thumb_func_start FUN_02042110
FUN_02042110: ; 0x02042110
thumb_func_start ScrCmd_Unk0238
ScrCmd_Unk0238: ; 0x02042110
push {r4-r6, lr}
add r5, r0, #0x0
bl ScriptReadHalfword
@@ -384,8 +384,8 @@ FUN_02042110: ; 0x02042110
pop {r4-r6, pc}
.balign 4
thumb_func_start FUN_0204214C
FUN_0204214C: ; 0x0204214C
thumb_func_start ScrCmd_Unk027C
ScrCmd_Unk027C: ; 0x0204214C
push {r4-r6, lr}
add r5, r0, #0x0
add r0, #0x80

File diff suppressed because it is too large Load Diff

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