Decomp 50 functions in five groups

Sixth 5x10 batch; all fifty matched at score 0 and landed.

  overlay_29_022DC694  HEAD  team-stats forwarders, a 10-argument forwarder,
                             and a 22-entry table search
  overlay_29_022E4714  HEAD  PlayEffectAnimationEntity wrappers
  overlay_29_022E37DC  TAIL  same family, merging into overlay_29_022E406C.c
  overlay_18           mid   LINK_SHOP_PTR state setters
  main_020022C4        mid   Nitro OS thread and mutex wrappers

New placeholder structs: unk_022DC694, unk_02353518, unk_0238C950,
unk_020027E8, unk_0229B0E0. The OS wrappers use nitro's own OSThread and
OSMutex types, which every translation unit already has through the prefix
header, rather than private tags.

Two spellings a reviewer should weigh, both recorded in the note:
_0229B0E0 is declared volatile because the target reloads it where any
ordinary spelling is common-subexpression-eliminated, and ov29_022DC78C
matches in byte-offset form rather than array indexing because the target
keeps the offset live in a separate mul.

Group selection now rejects malformed disassembly: 0.4% of asm blocks end
without a return (a .global mid-body split one function in two) and 6.5% are
several functions merged into one block (no .global marks the later entry
points). Neither is decompilable as written.

Authored by Claude (Opus 5) under human direction. Confirmed by a matching
build: build/pmdsky.us/pmdsky.us.nds: OK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
cecilarmitais
2026-08-20 15:09:01 -07:00
parent 1dea0a2571
commit 090d9f3159
24 changed files with 2309 additions and 2353 deletions

View File

@@ -1,45 +1,26 @@
#pragma once
.public CardPullOut
.public Card_SetPulledOutCallback
.public Debug_Print0
.public GX_DispOff
.public OS_CreateThread
.public OS_DisableScheduler
.public OS_GetThreadPriority
.public OS_InitMutex
.public OS_LockMutex
.public OS_ResetSystem
.public OS_SetThreadPriority
.public OS_SleepThread
.public OS_SleepThreadDirect
.public OS_UnlockMutex
.public OSi_ThreadInfo
.public Rand16Bit
.public WaitForInterrupt
.public _02092464
.public _020AEF30
.public _020AEF58
.public _0229AFC0
.public _0229AFCC
.public _0229AFE4
.public _0229B004
.public _0229B0E0
.public _0229B0E8
.public _0229B0F0
.public _0229B0F8
.public _0229B110
.public _0229B114
.public Card_LockBackup
.public Card_LockRom
.public Card_SetPulledOutCallback
.public Card_UnlockBackup
.public Card_UnlockRom
.public CardPullOut
.public Debug_Print0
.public GX_DispOff
.public InitMemAllocTable
.public MemAlloc
.public OS_CreateThread
.public OS_DisableScheduler
.public OS_GetLockID
.public OS_GetThreadPriority
.public OS_InitMessageQueue
.public OS_InitMutex
.public OS_LockMutex
.public OS_ReceiveMessage
.public OS_ResetSystem
.public OS_SendMessage
.public OS_SetThreadPriority
.public OS_SleepThread
.public OS_SleepThreadDirect
.public OS_TryLockMutex
.public OS_UnlockMutex
.public OS_WakeupThreadDirect
.public OSi_ThreadInfo
.public Rand16Bit
.public sub_020027F8
.public sub_02003AD0
.public sub_020059A8
.public WaitForInterrupt

View File

@@ -0,0 +1,32 @@
#pragma once
.public Card_LockBackup
.public Card_LockRom
.public Card_UnlockBackup
.public Card_UnlockRom
.public InitMemAllocTable
.public MemAlloc
.public OS_GetLockID
.public OS_GetThreadPriority
.public OS_InitMessageQueue
.public OS_InitMutex
.public OS_LockMutex
.public OS_ReceiveMessage
.public OS_SendMessage
.public OS_SetThreadPriority
.public OS_TryLockMutex
.public OS_UnlockMutex
.public OSi_ThreadInfo
.public _020AEF58
.public _0229B0E8
.public _0229B0F0
.public _0229B0F8
.public _0229B110
.public _0229B114
.public sub_02002580
.public sub_02002670
.public sub_020026B8
.public sub_020027F8
.public sub_020028B0
.public sub_020028F8
.public sub_02002904
.public sub_020059A8

View File

@@ -14,8 +14,6 @@
.public CreateSimpleMenuFromStringIds
.public CreateTextBox
.public DrawTextInWindow
.public GetAdvancedMenuCurrentOption
.public GetAdvancedMenuResult
.public GetEncodedHalfword
.public GetEvoFamily
.public GetMoneyCarried
@@ -32,16 +30,35 @@
.public IsScrollBoxActive
.public IsSimpleMenuActive
.public IsTextBoxActive
.public LINK_SHOP_MAIN_MENU_ITEMS
.public LINK_SHOP_MENU_ITEMS_CONFIRM
.public LINK_SHOP_PTR
.public LINK_SHOP_SUBMENU_ITEMS_1
.public LINK_SHOP_SUBMENU_ITEMS_2
.public LINK_SHOP_SUBMENU_ITEMS_3
.public LINK_SHOP_SUBMENU_ITEMS_4
.public LINK_SHOP_SUBMENU_ITEMS_5
.public LINK_SHOP_SUBMENU_ITEMS_6
.public LINK_SHOP_SUBMENU_ITEMS_7
.public LINK_SHOP_WINDOW_PARAMS_1
.public LINK_SHOP_WINDOW_PARAMS_10
.public LINK_SHOP_WINDOW_PARAMS_11
.public LINK_SHOP_WINDOW_PARAMS_2
.public LINK_SHOP_WINDOW_PARAMS_3
.public LINK_SHOP_WINDOW_PARAMS_4
.public LINK_SHOP_WINDOW_PARAMS_5
.public LINK_SHOP_WINDOW_PARAMS_6
.public LINK_SHOP_WINDOW_PARAMS_7
.public LINK_SHOP_WINDOW_PARAMS_8
.public LINK_SHOP_WINDOW_PARAMS_9
.public MemAlloc
.public memcpy
.public MemFree
.public ov11_0238A090
.public OVERLAY18_FUNCTION_POINTER_TABLE
.public PlaySeByIdVolumeWrapper
.public PlaySeVolumeWrapper
.public PortraitBoxNeedsUpdate
.public PreprocessString
.public PrintIqSkillsMenu
.public ResumeAdvancedMenu
.public ReturnScriptMenuResultZero
.public SetAdvancedTextBoxState5
.public SetPortraitEmotion
@@ -51,10 +68,14 @@
.public ShowPortraitInPortraitBox
.public ShowStringIdInDialogueBox
.public StrncpySimpleNoPadSafe
.public TEAM_MEMBER_TABLE_PTR
.public UpdateWindow
.public ov11_0238A090
.public ov18_0238D5F8
.public ov18_0238D608
.public sub_02017C74
.public sub_02027B1C
.public sub_0202BC60
.public sub_0202C1E4
.public sub_0202F334
.public sub_0202F954
.public sub_020307EC
@@ -73,8 +94,6 @@
.public sub_0203F398
.public sub_0203F990
.public sub_0203FA64
.public sub_0203FD14
.public sub_0203FD2C
.public sub_0203FD38
.public sub_0203FD80
.public sub_0204018C
@@ -94,9 +113,6 @@
.public sub_02041414
.public sub_02041424
.public sub_02041484
.public sub_0204159C
.public sub_020415BC
.public sub_02041614
.public sub_020416BC
.public sub_020416DC
.public sub_020417A8
@@ -110,6 +126,4 @@
.public sub_020572EC
.public sub_020573A0
.public sub_0205B028
.public TEAM_MEMBER_TABLE_PTR
.public UpdateWindow
.public vsprintf

View File

@@ -0,0 +1,80 @@
#pragma once
.public GetAdvancedMenuCurrentOption
.public GetAdvancedMenuResult
.public GetPressedButtons
.public GetSimpleMenuResult__0202B870
.public IsAdvancedMenuActive2
.public IsSimpleMenuActive
.public LINK_SHOP_PTR
.public ResumeAdvancedMenu
.public memcpy
.public ov18_0238ADA8
.public ov18_0238BE28
.public ov18_0238BE48
.public ov18_0238BE6C
.public ov18_0238BE90
.public ov18_0238BF0C
.public ov18_0238BF30
.public ov18_0238BF60
.public ov18_0238BF84
.public ov18_0238BFA8
.public ov18_0238C03C
.public ov18_0238C060
.public ov18_0238C078
.public ov18_0238C09C
.public ov18_0238C0C0
.public ov18_0238C0D8
.public ov18_0238C0FC
.public ov18_0238C114
.public ov18_0238C13C
.public ov18_0238C164
.public ov18_0238C21C
.public ov18_0238C240
.public ov18_0238C258
.public ov18_0238C27C
.public ov18_0238C340
.public ov18_0238C364
.public ov18_0238C398
.public ov18_0238C3C0
.public ov18_0238C428
.public ov18_0238C47C
.public ov18_0238C4A0
.public ov18_0238C4E8
.public ov18_0238C504
.public ov18_0238C528
.public ov18_0238C720
.public ov18_0238C78C
.public ov18_0238C7B0
.public ov18_0238C7C0
.public ov18_0238C7E4
.public ov18_0238C808
.public ov18_0238C888
.public ov18_0238C8AC
.public ov18_0238C8D0
.public ov18_0238C950
.public ov18_0238C974
.public ov18_0238C984
.public ov18_0238C9A8
.public ov18_0238C9B8
.public ov18_0238CA18
.public ov18_0238CA3C
.public ov18_0238CA4C
.public ov18_0238CA70
.public ov18_0238CA80
.public ov18_0238D208
.public ov18_0238D22C
.public ov18_0238D23C
.public ov18_0238D260
.public sub_0202C1E4
.public sub_0203FD14
.public sub_0203FD2C
.public sub_0203FD38
.public sub_0203FD80
.public sub_020407EC
.public sub_02041094
.public sub_02041154
.public sub_02041364
.public sub_02041484
.public sub_020415BC
.public sub_02041614
.public sub_02041A18

View File

@@ -3,10 +3,7 @@
.public ChangeSimpleObjTexture
.public DUNGEON_PTR
.public DirectoryFileMngr_OpenDirectoryFile
.public DrawTeamStats
.public FillPaletteInitInfo
.public FreeMapAndTeam
.public FreeTeamStats
.public GetDefaultTileTextureId
.public HandleSir0Translation
.public IsBackgroundTileset
@@ -16,15 +13,8 @@
.public MemZero
.public OBJ_GRAPHICS_CONTROLS_PTR
.public UnloadFile
.public UpdateTeamStats
.public _s32_div_f
.public ov10_022C0814
.public ov10_022C096C
.public ov10_022C0F6C
.public ov10_022C11D8
.public ov10_022C14D0
.public ov10_022C159C
.public ov10_022C22A0
.public ov29_022DC78C
.public ov29_02350F88
.public ov29_02350F8C
.public ov29_02350F90

View File

@@ -1,5 +1,4 @@
#pragma once
.public GetEffectAnimationField0x19
.public MonsterIsType
.public PlayEffectAnimationEntity
.public PlaySeByIdIfShouldDisplayEntity

View File

@@ -461,901 +461,3 @@ sub_02002778: ; 0x02002778
add sp, sp, #8
ldmia sp!, {r4, r5, r6, pc}
arm_func_end sub_02002778
arm_func_start sub_020027E8
sub_020027E8: ; 0x020027E8
ldr ip, _020027F4 ; =OS_WakeupThreadDirect
ldr r0, [r0]
bx ip
.align 2, 0
_020027F4: .word OS_WakeupThreadDirect
arm_func_end sub_020027E8
arm_func_start sub_020027F8
sub_020027F8: ; 0x020027F8
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
ldr r0, [r6]
mov r5, r1
bl OS_GetThreadPriority
mov r4, r0
ldr r0, [r6]
mov r1, r5
bl OS_SetThreadPriority
mov r0, r4
ldmia sp!, {r4, r5, r6, pc}
arm_func_end sub_020027F8
arm_func_start sub_02002824
sub_02002824: ; 0x02002824
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _02002854 ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
mov r4, r0
mov r0, r5
mov r1, r6
bl OS_SetThreadPriority
mov r0, r4
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02002854: .word OSi_ThreadInfo
arm_func_end sub_02002824
arm_func_start sub_02002858
sub_02002858: ; 0x02002858
str r1, [r0, #0x14]
bx lr
arm_func_end sub_02002858
arm_func_start sub_02002860
sub_02002860: ; 0x02002860
cmp r0, #0
ldrne r1, [r0]
cmpne r1, #0
ldrne r0, [r0, #0x14]
moveq r0, #0
bx lr
arm_func_end sub_02002860
arm_func_start sub_02002878
sub_02002878: ; 0x02002878
stmdb sp!, {r4, lr}
mov r4, r0
bl sub_02002580
cmp r0, #0
beq _020028A4
ldr r0, [r0, #0x14]
cmp r0, r4
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
ldmia sp!, {r4, pc}
_020028A4:
mov r0, #0
ldmia sp!, {r4, pc}
arm_func_end sub_02002878
arm_func_start sub_020028AC
sub_020028AC: ; 0x020028AC
bx lr
arm_func_end sub_020028AC
arm_func_start sub_020028B0
sub_020028B0: ; 0x020028B0
stmdb sp!, {r4, lr}
mov r4, r0
bl OS_InitMutex
mov r0, r4
bl OS_LockMutex
bl sub_02002670
ldr r0, _020028F4 ; =_0229B0E0
ldr r1, [r0]
add r1, r1, #1
str r1, [r0]
ldr r2, [r0]
ldr r1, [r0, #4]
cmp r2, r1
ldrgt r1, [r0]
strgt r1, [r0, #4]
bl sub_020026B8
ldmia sp!, {r4, pc}
.align 2, 0
_020028F4: .word _0229B0E0
arm_func_end sub_020028B0
arm_func_start sub_020028F8
sub_020028F8: ; 0x020028F8
ldr ip, _02002900 ; =OS_UnlockMutex
bx ip
.align 2, 0
_02002900: .word OS_UnlockMutex
arm_func_end sub_020028F8
arm_func_start sub_02002904
sub_02002904: ; 0x02002904
ldr ip, _0200290C ; =OS_LockMutex
bx ip
.align 2, 0
_0200290C: .word OS_LockMutex
arm_func_end sub_02002904
arm_func_start sub_02002910
sub_02002910: ; 0x02002910
stmdb sp!, {r4, lr}
mov r4, r0
bl OS_TryLockMutex
tst r0, #0xff
beq _02002944
ldr r0, [r4, #0xc]
cmp r0, #1
movle r0, #1
ldmleia sp!, {r4, pc}
mov r0, r4
bl OS_UnlockMutex
mov r0, #0
ldmia sp!, {r4, pc}
_02002944:
mov r0, #0
ldmia sp!, {r4, pc}
arm_func_end sub_02002910
arm_func_start sub_0200294C
sub_0200294C: ; 0x0200294C
bx lr
arm_func_end sub_0200294C
arm_func_start sub_02002950
sub_02002950: ; 0x02002950
stmdb sp!, {r3, lr}
mov r3, r0
add r1, r3, #4
add r0, r3, #8
mov r2, #1
str r1, [r3]
bl OS_InitMessageQueue
bl sub_02002670
ldr r0, _0200299C ; =_0229B0E8
ldr r1, [r0]
add r1, r1, #1
str r1, [r0]
ldr r2, [r0]
ldr r1, [r0, #4]
cmp r2, r1
ldrgt r1, [r0]
strgt r1, [r0, #4]
bl sub_020026B8
ldmia sp!, {r3, pc}
.align 2, 0
_0200299C: .word _0229B0E8
arm_func_end sub_02002950
arm_func_start sub_020029A0
sub_020029A0: ; 0x020029A0
ldr ip, _020029B4 ; =OS_SendMessage
mov r1, #0
mov r2, r1
add r0, r0, #8
bx ip
.align 2, 0
_020029B4: .word OS_SendMessage
arm_func_end sub_020029A0
arm_func_start sub_020029B8
sub_020029B8: ; 0x020029B8
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r1, _02002A40 ; =OSi_ThreadInfo
mov r4, r0
ldr sb, [r1, #4]
mov r7, #0
mov r0, sb
bl OS_GetThreadPriority
mov r8, r0
mov r0, sb
mov r1, #7
bl OS_SetThreadPriority
mov r5, r7
b _020029F0
_020029EC:
add r7, r7, #1
_020029F0:
mov r1, r5
mov r2, r5
add r0, r4, #8
bl OS_SendMessage
cmp r0, #0
bne _020029EC
add r6, sp, #0
mov r5, #0
_02002A10:
mov r1, r6
mov r2, r5
add r0, r4, #8
bl OS_ReceiveMessage
cmp r0, #0
subne r7, r7, #1
bne _02002A10
mov r0, sb
mov r1, r8
bl OS_SetThreadPriority
mov r0, r7
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_02002A40: .word OSi_ThreadInfo
arm_func_end sub_020029B8
arm_func_start sub_02002A44
sub_02002A44: ; 0x02002A44
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
ldr r1, _02002A94 ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
mov r4, r0
mov r0, r5
mov r1, #6
bl OS_SetThreadPriority
add r1, sp, #0
add r0, r6, #8
mov r2, #1
bl OS_ReceiveMessage
mov r0, r5
mov r1, r4
bl OS_SetThreadPriority
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
.align 2, 0
_02002A94: .word OSi_ThreadInfo
arm_func_end sub_02002A44
arm_func_start sub_02002A98
sub_02002A98: ; 0x02002A98
bx lr
arm_func_end sub_02002A98
arm_func_start sub_02002A9C
sub_02002A9C: ; 0x02002A9C
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
str r1, [r6, #0xa4]
add r1, r6, #4
str r2, [r6, #0xa8]
str r1, [r6]
ldr r2, [r6, #0xa4]
add r0, r6, #0x84
bl OS_InitMessageQueue
mov r5, #0
mov r4, r5
b _02002AE0
_02002ACC:
mov r1, r4
mov r2, r4
add r0, r6, #0x84
bl OS_SendMessage
add r5, r5, #1
_02002AE0:
ldr r0, [r6, #0xa8]
cmp r5, r0
blt _02002ACC
bl sub_02002670
ldr r0, _02002B1C ; =_0229B0F0
ldr r1, [r0]
add r1, r1, #1
str r1, [r0]
ldr r2, [r0]
ldr r1, [r0, #4]
cmp r2, r1
ldrgt r1, [r0]
strgt r1, [r0, #4]
bl sub_020026B8
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02002B1C: .word _0229B0F0
arm_func_end sub_02002A9C
arm_func_start sub_02002B20
sub_02002B20: ; 0x02002B20
ldr ip, _02002B34 ; =OS_SendMessage
mov r1, #0
mov r2, r1
add r0, r0, #0x84
bx ip
.align 2, 0
_02002B34: .word OS_SendMessage
arm_func_end sub_02002B20
arm_func_start sub_02002B38
sub_02002B38: ; 0x02002B38
ldr ip, _02002B4C ; =OS_SendMessage
mov r1, #0
mov r2, r1
add r0, r0, #0x84
bx ip
.align 2, 0
_02002B4C: .word OS_SendMessage
arm_func_end sub_02002B38
arm_func_start sub_02002B50
sub_02002B50: ; 0x02002B50
stmdb sp!, {r3, lr}
ldr r1, [r0, #0x98]
cmp r1, #0
movne r0, #0
ldmneia sp!, {r3, pc}
mov r1, #0
mov r2, r1
add r0, r0, #0x84
bl OS_SendMessage
mov r0, #1
ldmia sp!, {r3, pc}
arm_func_end sub_02002B50
arm_func_start sub_02002B7C
sub_02002B7C: ; 0x02002B7C
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
ldr r1, _02002BCC ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
mov r4, r0
mov r0, r5
mov r1, #6
bl OS_SetThreadPriority
add r1, sp, #0
add r0, r6, #0x84
mov r2, #1
bl OS_ReceiveMessage
mov r0, r5
mov r1, r4
bl OS_SetThreadPriority
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
.align 2, 0
_02002BCC: .word OSi_ThreadInfo
arm_func_end sub_02002B7C
arm_func_start sub_02002BD0
sub_02002BD0: ; 0x02002BD0
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
ldr r1, _02002C28 ; =OSi_ThreadInfo
mov r5, r0
ldr r6, [r1, #4]
mov r0, r6
bl OS_GetThreadPriority
mov r4, r0
mov r0, r6
mov r1, #6
bl OS_SetThreadPriority
add r1, sp, #0
add r0, r5, #0x84
mov r2, #0
bl OS_ReceiveMessage
and r5, r0, #0xff
mov r0, r6
mov r1, r4
bl OS_SetThreadPriority
mov r0, r5
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
.align 2, 0
_02002C28: .word OSi_ThreadInfo
arm_func_end sub_02002BD0
arm_func_start sub_02002C2C
sub_02002C2C: ; 0x02002C2C
ldr ip, _02002C38 ; =OS_InitMutex
ldr r0, _02002C3C ; =_0229B0F8
bx ip
.align 2, 0
_02002C38: .word OS_InitMutex
_02002C3C: .word _0229B0F8
arm_func_end sub_02002C2C
arm_func_start sub_02002C40
sub_02002C40: ; 0x02002C40
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _02002CA4 ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
mov r4, r0
mov r0, r5
mov r1, #7
bl OS_SetThreadPriority
ldr r0, _02002CA8 ; =_0229B0F8
bl OS_LockMutex
mov r0, r6
bl sub_020028B0
bl sub_02002580
str r0, [r6, #0x18]
mov r0, #0
str r0, [r6, #0x20]
str r0, [r6, #0x1c]
ldr r0, _02002CA8 ; =_0229B0F8
bl OS_UnlockMutex
mov r0, r5
mov r1, r4
bl OS_SetThreadPriority
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02002CA4: .word OSi_ThreadInfo
_02002CA8: .word _0229B0F8
arm_func_end sub_02002C40
arm_func_start sub_02002CAC
sub_02002CAC: ; 0x02002CAC
str r1, [r0, #0x20]
bx lr
arm_func_end sub_02002CAC
arm_func_start sub_02002CB4
sub_02002CB4: ; 0x02002CB4
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _02002D10 ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
ldr r1, [r6, #0x20]
mov r4, r0
cmp r1, #0
beq _02002CF4
cmp r1, r4
movhs r4, #0
bhs _02002CF8
mov r0, r5
bl OS_SetThreadPriority
b _02002CF8
_02002CF4:
mov r4, #0
_02002CF8:
mov r0, r6
bl sub_02002904
str r4, [r6, #0x1c]
bl sub_02002580
str r0, [r6, #0x18]
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02002D10: .word OSi_ThreadInfo
arm_func_end sub_02002CB4
arm_func_start sub_02002D14
sub_02002D14: ; 0x02002D14
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r2, _02002D7C ; =OSi_ThreadInfo
mov r7, r0
ldr r5, [r2, #4]
mov r6, r1
mov r0, r5
bl OS_GetThreadPriority
ldr r1, [r7, #0x20]
mov r4, r0
cmp r1, #0
beq _02002D58
cmp r1, r4
movhs r4, #0
bhs _02002D5C
mov r0, r5
bl OS_SetThreadPriority
b _02002D5C
_02002D58:
mov r4, #0
_02002D5C:
mov r0, r6
bl sub_02002B7C
mov r0, r7
bl sub_02002904
str r4, [r7, #0x1c]
bl sub_02002580
str r0, [r7, #0x18]
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_02002D7C: .word OSi_ThreadInfo
arm_func_end sub_02002D14
arm_func_start sub_02002D80
sub_02002D80: ; 0x02002D80
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
bl sub_02002580
mov r4, r0
ldr r0, [r4]
bl OS_GetThreadPriority
ldr r1, [r7, #0x20]
mov r5, r0
cmp r1, #0
beq _02002DC4
cmp r1, r5
movhs r5, #0
bhs _02002DC8
ldr r0, [r4]
bl OS_SetThreadPriority
b _02002DC8
_02002DC4:
mov r5, #0
_02002DC8:
mov r0, r6
bl sub_02002BD0
cmp r0, #0
beq _02002DF4
mov r0, r7
bl sub_02002904
str r5, [r7, #0x1c]
bl sub_02002580
str r0, [r7, #0x18]
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_02002DF4:
cmp r5, #0
beq _02002E08
mov r0, r4
mov r1, r5
bl sub_020027F8
_02002E08:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end sub_02002D80
arm_func_start sub_02002E10
sub_02002E10: ; 0x02002E10
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _02002E94 ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
ldr r1, [r6, #0x20]
mov r4, r0
cmp r1, #0
beq _02002E50
cmp r1, r4
movhs r4, #0
bhs _02002E54
mov r0, r5
bl OS_SetThreadPriority
b _02002E54
_02002E50:
mov r4, #0
_02002E54:
mov r0, r6
bl sub_02002910
cmp r0, #0
beq _02002E78
str r4, [r6, #0x1c]
bl sub_02002580
str r0, [r6, #0x18]
mov r0, #1
ldmia sp!, {r4, r5, r6, pc}
_02002E78:
cmp r4, #0
beq _02002E8C
mov r0, r5
mov r1, r4
bl OS_SetThreadPriority
_02002E8C:
mov r0, #0
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02002E94: .word OSi_ThreadInfo
arm_func_end sub_02002E10
arm_func_start sub_02002E98
sub_02002E98: ; 0x02002E98
stmdb sp!, {r3, r4, r5, lr}
ldr r4, [r0, #0x1c]
ldr r5, [r0, #0x18]
mov r1, #0
str r1, [r0, #0x1c]
str r1, [r0, #0x18]
bl sub_020028F8
cmp r4, #0
ldmeqia sp!, {r3, r4, r5, pc}
mov r0, r5
mov r1, r4
bl sub_020027F8
ldmia sp!, {r3, r4, r5, pc}
arm_func_end sub_02002E98
arm_func_start sub_02002ECC
sub_02002ECC: ; 0x02002ECC
stmdb sp!, {r4, r5, r6, lr}
ldr r4, [r0, #0x1c]
ldr r5, [r0, #0x18]
mov r2, #0
str r2, [r0, #0x18]
mov r6, r1
str r2, [r0, #0x1c]
bl sub_020028F8
mov r0, r6
bl sub_02002B20
cmp r4, #0
ldmeqia sp!, {r4, r5, r6, pc}
mov r0, r5
mov r1, r4
bl sub_020027F8
ldmia sp!, {r4, r5, r6, pc}
arm_func_end sub_02002ECC
arm_func_start sub_02002F0C
sub_02002F0C: ; 0x02002F0C
stmdb sp!, {r3, lr}
ldr r0, _02002F30 ; =_020AEF58
bl sub_02002C40
ldr r0, _02002F30 ; =_020AEF58
mov r1, #7
bl sub_02002CAC
ldr r0, _02002F30 ; =_020AEF58
bl sub_02002E98
ldmia sp!, {r3, pc}
.align 2, 0
_02002F30: .word _020AEF58
arm_func_end sub_02002F0C
arm_func_start sub_02002F34
sub_02002F34: ; 0x02002F34
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
ldr r0, _02002F78 ; =_020AEF58
mov r4, r1
bl sub_02002CB4
mov r0, r4, lsl #2
mov r1, #1
bl MemAlloc
str r0, [r5, #0x20]
str r4, [r5, #0x24]
ldr r1, [r5, #0x20]
mov r0, r5
mov r2, r4
bl OS_InitMessageQueue
ldr r0, _02002F78 ; =_020AEF58
bl sub_02002E98
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_02002F78: .word _020AEF58
arm_func_end sub_02002F34
arm_func_start sub_02002F7C
sub_02002F7C: ; 0x02002F7C
stmdb sp!, {r3, lr}
cmp r2, #0
movne r2, #1
moveq r2, #0
bl OS_SendMessage
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end sub_02002F7C
arm_func_start sub_02002F98
sub_02002F98: ; 0x02002F98
stmdb sp!, {r3, lr}
cmp r2, #0
movne r2, #1
moveq r2, #0
bl OS_ReceiveMessage
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end sub_02002F98
arm_func_start sub_02002FB4
sub_02002FB4: ; 0x02002FB4
bx lr
arm_func_end sub_02002FB4
arm_func_start sub_02002FB8
sub_02002FB8: ; 0x02002FB8
stmdb sp!, {r4, r5, r6, lr}
ldr r0, _02003024 ; =_0229B110
mov r6, #0
strh r6, [r0]
cmp r6, #6
ldr r5, _02003028 ; =_0229B114
bge _0200301C
mov r4, r6
b _02003014
_02002FDC:
mov r0, r5
bl sub_02002C40
cmp r6, #4
str r4, [r5, #0x24]
cmpne r6, #5
bne _02003000
bl OS_GetLockID
strh r0, [r5, #0x28]
b _02003004
_02003000:
strh r4, [r5, #0x28]
_02003004:
mov r0, r5
bl sub_02002E98
add r6, r6, #1
add r5, r5, #0x2c
_02003014:
cmp r6, #6
blt _02002FDC
_0200301C:
bl sub_020059A8
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02003024: .word _0229B110
_02003028: .word _0229B114
arm_func_end sub_02002FB8
arm_func_start sub_0200302C
sub_0200302C: ; 0x0200302C
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
movs r8, r0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
bl sub_02002580
mov r7, r0
mov r6, #0
ldr r5, _020030C4 ; =_0229B114
mov r4, #1
ldr sl, _020030C8 ; =_0229B110
b _020030B8
_02003054:
mov r0, r4, lsl r6
mov sb, r0, lsl #0x10
tst r8, sb, lsr #16
beq _020030B0
mov r0, r5
bl sub_02002CB4
bl InterruptMasterDisable
ldrh r0, [sl]
ldrh r0, [sl]
str r7, [r5, #0x24]
orr r0, r0, sb, lsr #16
strh r0, [sl]
bl InterruptMasterEnable
cmp r6, #4
beq _0200309C
cmp r6, #5
beq _020030A8
b _020030B0
_0200309C:
ldrh r0, [r5, #0x28]
bl Card_LockRom
b _020030B0
_020030A8:
ldrh r0, [r5, #0x28]
bl Card_LockBackup
_020030B0:
add r6, r6, #1
add r5, r5, #0x2c
_020030B8:
cmp r6, #6
blt _02003054
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_020030C4: .word _0229B114
_020030C8: .word _0229B110
arm_func_end sub_0200302C
arm_func_start InterruptMasterDisable
InterruptMasterDisable: ; 0x020030CC
ldr r2, _020030E0 ; =0x04000208
mov r1, #0
ldrh r0, [r2]
strh r1, [r2]
bx lr
.align 2, 0
_020030E0: .word 0x04000208
arm_func_end InterruptMasterDisable
arm_func_start InterruptMasterEnable
InterruptMasterEnable: ; 0x020030E4
ldr r2, _020030F8 ; =0x04000208
mov r1, #1
ldrh r0, [r2]
strh r1, [r2]
bx lr
.align 2, 0
_020030F8: .word 0x04000208
arm_func_end InterruptMasterEnable
arm_func_start sub_020030FC
sub_020030FC: ; 0x020030FC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
movs sl, r0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
bl sub_02002580
mov r1, #7
mov r8, r0
bl sub_020027F8
mov sb, r0
mov r7, #0
ldr r6, _020031B8 ; =_0229B114
mov fp, #1
ldr r5, _020031BC ; =_0229B110
b _020031A0
_02003130:
mov r0, fp, lsl r7
mov r4, r0, lsl #0x10
tst sl, r4, lsr #16
beq _02003198
cmp r7, #4
beq _02003154
cmp r7, #5
beq _02003160
b _02003168
_02003154:
ldrh r0, [r6, #0x28]
bl Card_UnlockRom
b _02003168
_02003160:
ldrh r0, [r6, #0x28]
bl Card_UnlockBackup
_02003168:
bl InterruptMasterDisable
ldrh r0, [r5]
mvn r1, r4, lsr #16
ldrh r0, [r5]
ldrh r2, [r5]
mov r0, #0
str r0, [r6, #0x24]
and r0, r2, r1
strh r0, [r5]
bl InterruptMasterEnable
mov r0, r6
bl sub_02002E98
_02003198:
add r7, r7, #1
add r6, r6, #0x2c
_020031A0:
cmp r7, #6
blt _02003130
mov r0, r8
mov r1, sb
bl sub_020027F8
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020031B8: .word _0229B114
_020031BC: .word _0229B110
arm_func_end sub_020030FC
arm_func_start sub_020031C0
sub_020031C0: ; 0x020031C0
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
bl sub_02002580
mov r5, #0
mov lr, r5
cmp r5, #6
ldr ip, _02003218 ; =_0229B114
bge _02003210
mov r3, #1
b _02003208
_020031E8:
mov r1, r3, lsl lr
mov r1, r1, lsl #0x10
tst r4, r1, lsr #16
ldrne r2, [ip, #0x24]
add lr, lr, #1
cmpne r2, r0
orrne r5, r5, r1, lsr #16
add ip, ip, #0x2c
_02003208:
cmp lr, #6
blt _020031E8
_02003210:
mov r0, r5
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_02003218: .word _0229B114
arm_func_end sub_020031C0
arm_func_start InitMemAllocTableVeneer
InitMemAllocTableVeneer: ; 0x0200321C
ldr ip, _02003224 ; =InitMemAllocTable
bx ip
.align 2, 0
_02003224: .word InitMemAllocTable
arm_func_end InitMemAllocTableVeneer

782
asm/main_02002910.s Normal file
View File

@@ -0,0 +1,782 @@
.include "asm/macros.inc"
.include "main_02002910.inc"
.text
arm_func_start sub_02002910
sub_02002910: ; 0x02002910
stmdb sp!, {r4, lr}
mov r4, r0
bl OS_TryLockMutex
tst r0, #0xff
beq _02002944
ldr r0, [r4, #0xc]
cmp r0, #1
movle r0, #1
ldmleia sp!, {r4, pc}
mov r0, r4
bl OS_UnlockMutex
mov r0, #0
ldmia sp!, {r4, pc}
_02002944:
mov r0, #0
ldmia sp!, {r4, pc}
arm_func_end sub_02002910
arm_func_start sub_0200294C
sub_0200294C: ; 0x0200294C
bx lr
arm_func_end sub_0200294C
arm_func_start sub_02002950
sub_02002950: ; 0x02002950
stmdb sp!, {r3, lr}
mov r3, r0
add r1, r3, #4
add r0, r3, #8
mov r2, #1
str r1, [r3]
bl OS_InitMessageQueue
bl sub_02002670
ldr r0, _0200299C ; =_0229B0E8
ldr r1, [r0]
add r1, r1, #1
str r1, [r0]
ldr r2, [r0]
ldr r1, [r0, #4]
cmp r2, r1
ldrgt r1, [r0]
strgt r1, [r0, #4]
bl sub_020026B8
ldmia sp!, {r3, pc}
.align 2, 0
_0200299C: .word _0229B0E8
arm_func_end sub_02002950
arm_func_start sub_020029A0
sub_020029A0: ; 0x020029A0
ldr ip, _020029B4 ; =OS_SendMessage
mov r1, #0
mov r2, r1
add r0, r0, #8
bx ip
.align 2, 0
_020029B4: .word OS_SendMessage
arm_func_end sub_020029A0
arm_func_start sub_020029B8
sub_020029B8: ; 0x020029B8
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r1, _02002A40 ; =OSi_ThreadInfo
mov r4, r0
ldr sb, [r1, #4]
mov r7, #0
mov r0, sb
bl OS_GetThreadPriority
mov r8, r0
mov r0, sb
mov r1, #7
bl OS_SetThreadPriority
mov r5, r7
b _020029F0
_020029EC:
add r7, r7, #1
_020029F0:
mov r1, r5
mov r2, r5
add r0, r4, #8
bl OS_SendMessage
cmp r0, #0
bne _020029EC
add r6, sp, #0
mov r5, #0
_02002A10:
mov r1, r6
mov r2, r5
add r0, r4, #8
bl OS_ReceiveMessage
cmp r0, #0
subne r7, r7, #1
bne _02002A10
mov r0, sb
mov r1, r8
bl OS_SetThreadPriority
mov r0, r7
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_02002A40: .word OSi_ThreadInfo
arm_func_end sub_020029B8
arm_func_start sub_02002A44
sub_02002A44: ; 0x02002A44
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
ldr r1, _02002A94 ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
mov r4, r0
mov r0, r5
mov r1, #6
bl OS_SetThreadPriority
add r1, sp, #0
add r0, r6, #8
mov r2, #1
bl OS_ReceiveMessage
mov r0, r5
mov r1, r4
bl OS_SetThreadPriority
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
.align 2, 0
_02002A94: .word OSi_ThreadInfo
arm_func_end sub_02002A44
arm_func_start sub_02002A98
sub_02002A98: ; 0x02002A98
bx lr
arm_func_end sub_02002A98
arm_func_start sub_02002A9C
sub_02002A9C: ; 0x02002A9C
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
str r1, [r6, #0xa4]
add r1, r6, #4
str r2, [r6, #0xa8]
str r1, [r6]
ldr r2, [r6, #0xa4]
add r0, r6, #0x84
bl OS_InitMessageQueue
mov r5, #0
mov r4, r5
b _02002AE0
_02002ACC:
mov r1, r4
mov r2, r4
add r0, r6, #0x84
bl OS_SendMessage
add r5, r5, #1
_02002AE0:
ldr r0, [r6, #0xa8]
cmp r5, r0
blt _02002ACC
bl sub_02002670
ldr r0, _02002B1C ; =_0229B0F0
ldr r1, [r0]
add r1, r1, #1
str r1, [r0]
ldr r2, [r0]
ldr r1, [r0, #4]
cmp r2, r1
ldrgt r1, [r0]
strgt r1, [r0, #4]
bl sub_020026B8
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02002B1C: .word _0229B0F0
arm_func_end sub_02002A9C
arm_func_start sub_02002B20
sub_02002B20: ; 0x02002B20
ldr ip, _02002B34 ; =OS_SendMessage
mov r1, #0
mov r2, r1
add r0, r0, #0x84
bx ip
.align 2, 0
_02002B34: .word OS_SendMessage
arm_func_end sub_02002B20
arm_func_start sub_02002B38
sub_02002B38: ; 0x02002B38
ldr ip, _02002B4C ; =OS_SendMessage
mov r1, #0
mov r2, r1
add r0, r0, #0x84
bx ip
.align 2, 0
_02002B4C: .word OS_SendMessage
arm_func_end sub_02002B38
arm_func_start sub_02002B50
sub_02002B50: ; 0x02002B50
stmdb sp!, {r3, lr}
ldr r1, [r0, #0x98]
cmp r1, #0
movne r0, #0
ldmneia sp!, {r3, pc}
mov r1, #0
mov r2, r1
add r0, r0, #0x84
bl OS_SendMessage
mov r0, #1
ldmia sp!, {r3, pc}
arm_func_end sub_02002B50
arm_func_start sub_02002B7C
sub_02002B7C: ; 0x02002B7C
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
ldr r1, _02002BCC ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
mov r4, r0
mov r0, r5
mov r1, #6
bl OS_SetThreadPriority
add r1, sp, #0
add r0, r6, #0x84
mov r2, #1
bl OS_ReceiveMessage
mov r0, r5
mov r1, r4
bl OS_SetThreadPriority
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
.align 2, 0
_02002BCC: .word OSi_ThreadInfo
arm_func_end sub_02002B7C
arm_func_start sub_02002BD0
sub_02002BD0: ; 0x02002BD0
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
ldr r1, _02002C28 ; =OSi_ThreadInfo
mov r5, r0
ldr r6, [r1, #4]
mov r0, r6
bl OS_GetThreadPriority
mov r4, r0
mov r0, r6
mov r1, #6
bl OS_SetThreadPriority
add r1, sp, #0
add r0, r5, #0x84
mov r2, #0
bl OS_ReceiveMessage
and r5, r0, #0xff
mov r0, r6
mov r1, r4
bl OS_SetThreadPriority
mov r0, r5
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
.align 2, 0
_02002C28: .word OSi_ThreadInfo
arm_func_end sub_02002BD0
arm_func_start sub_02002C2C
sub_02002C2C: ; 0x02002C2C
ldr ip, _02002C38 ; =OS_InitMutex
ldr r0, _02002C3C ; =_0229B0F8
bx ip
.align 2, 0
_02002C38: .word OS_InitMutex
_02002C3C: .word _0229B0F8
arm_func_end sub_02002C2C
arm_func_start sub_02002C40
sub_02002C40: ; 0x02002C40
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _02002CA4 ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
mov r4, r0
mov r0, r5
mov r1, #7
bl OS_SetThreadPriority
ldr r0, _02002CA8 ; =_0229B0F8
bl OS_LockMutex
mov r0, r6
bl sub_020028B0
bl sub_02002580
str r0, [r6, #0x18]
mov r0, #0
str r0, [r6, #0x20]
str r0, [r6, #0x1c]
ldr r0, _02002CA8 ; =_0229B0F8
bl OS_UnlockMutex
mov r0, r5
mov r1, r4
bl OS_SetThreadPriority
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02002CA4: .word OSi_ThreadInfo
_02002CA8: .word _0229B0F8
arm_func_end sub_02002C40
arm_func_start sub_02002CAC
sub_02002CAC: ; 0x02002CAC
str r1, [r0, #0x20]
bx lr
arm_func_end sub_02002CAC
arm_func_start sub_02002CB4
sub_02002CB4: ; 0x02002CB4
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _02002D10 ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
ldr r1, [r6, #0x20]
mov r4, r0
cmp r1, #0
beq _02002CF4
cmp r1, r4
movhs r4, #0
bhs _02002CF8
mov r0, r5
bl OS_SetThreadPriority
b _02002CF8
_02002CF4:
mov r4, #0
_02002CF8:
mov r0, r6
bl sub_02002904
str r4, [r6, #0x1c]
bl sub_02002580
str r0, [r6, #0x18]
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02002D10: .word OSi_ThreadInfo
arm_func_end sub_02002CB4
arm_func_start sub_02002D14
sub_02002D14: ; 0x02002D14
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r2, _02002D7C ; =OSi_ThreadInfo
mov r7, r0
ldr r5, [r2, #4]
mov r6, r1
mov r0, r5
bl OS_GetThreadPriority
ldr r1, [r7, #0x20]
mov r4, r0
cmp r1, #0
beq _02002D58
cmp r1, r4
movhs r4, #0
bhs _02002D5C
mov r0, r5
bl OS_SetThreadPriority
b _02002D5C
_02002D58:
mov r4, #0
_02002D5C:
mov r0, r6
bl sub_02002B7C
mov r0, r7
bl sub_02002904
str r4, [r7, #0x1c]
bl sub_02002580
str r0, [r7, #0x18]
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_02002D7C: .word OSi_ThreadInfo
arm_func_end sub_02002D14
arm_func_start sub_02002D80
sub_02002D80: ; 0x02002D80
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
bl sub_02002580
mov r4, r0
ldr r0, [r4]
bl OS_GetThreadPriority
ldr r1, [r7, #0x20]
mov r5, r0
cmp r1, #0
beq _02002DC4
cmp r1, r5
movhs r5, #0
bhs _02002DC8
ldr r0, [r4]
bl OS_SetThreadPriority
b _02002DC8
_02002DC4:
mov r5, #0
_02002DC8:
mov r0, r6
bl sub_02002BD0
cmp r0, #0
beq _02002DF4
mov r0, r7
bl sub_02002904
str r5, [r7, #0x1c]
bl sub_02002580
str r0, [r7, #0x18]
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_02002DF4:
cmp r5, #0
beq _02002E08
mov r0, r4
mov r1, r5
bl sub_020027F8
_02002E08:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end sub_02002D80
arm_func_start sub_02002E10
sub_02002E10: ; 0x02002E10
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _02002E94 ; =OSi_ThreadInfo
mov r6, r0
ldr r5, [r1, #4]
mov r0, r5
bl OS_GetThreadPriority
ldr r1, [r6, #0x20]
mov r4, r0
cmp r1, #0
beq _02002E50
cmp r1, r4
movhs r4, #0
bhs _02002E54
mov r0, r5
bl OS_SetThreadPriority
b _02002E54
_02002E50:
mov r4, #0
_02002E54:
mov r0, r6
bl sub_02002910
cmp r0, #0
beq _02002E78
str r4, [r6, #0x1c]
bl sub_02002580
str r0, [r6, #0x18]
mov r0, #1
ldmia sp!, {r4, r5, r6, pc}
_02002E78:
cmp r4, #0
beq _02002E8C
mov r0, r5
mov r1, r4
bl OS_SetThreadPriority
_02002E8C:
mov r0, #0
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02002E94: .word OSi_ThreadInfo
arm_func_end sub_02002E10
arm_func_start sub_02002E98
sub_02002E98: ; 0x02002E98
stmdb sp!, {r3, r4, r5, lr}
ldr r4, [r0, #0x1c]
ldr r5, [r0, #0x18]
mov r1, #0
str r1, [r0, #0x1c]
str r1, [r0, #0x18]
bl sub_020028F8
cmp r4, #0
ldmeqia sp!, {r3, r4, r5, pc}
mov r0, r5
mov r1, r4
bl sub_020027F8
ldmia sp!, {r3, r4, r5, pc}
arm_func_end sub_02002E98
arm_func_start sub_02002ECC
sub_02002ECC: ; 0x02002ECC
stmdb sp!, {r4, r5, r6, lr}
ldr r4, [r0, #0x1c]
ldr r5, [r0, #0x18]
mov r2, #0
str r2, [r0, #0x18]
mov r6, r1
str r2, [r0, #0x1c]
bl sub_020028F8
mov r0, r6
bl sub_02002B20
cmp r4, #0
ldmeqia sp!, {r4, r5, r6, pc}
mov r0, r5
mov r1, r4
bl sub_020027F8
ldmia sp!, {r4, r5, r6, pc}
arm_func_end sub_02002ECC
arm_func_start sub_02002F0C
sub_02002F0C: ; 0x02002F0C
stmdb sp!, {r3, lr}
ldr r0, _02002F30 ; =_020AEF58
bl sub_02002C40
ldr r0, _02002F30 ; =_020AEF58
mov r1, #7
bl sub_02002CAC
ldr r0, _02002F30 ; =_020AEF58
bl sub_02002E98
ldmia sp!, {r3, pc}
.align 2, 0
_02002F30: .word _020AEF58
arm_func_end sub_02002F0C
arm_func_start sub_02002F34
sub_02002F34: ; 0x02002F34
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
ldr r0, _02002F78 ; =_020AEF58
mov r4, r1
bl sub_02002CB4
mov r0, r4, lsl #2
mov r1, #1
bl MemAlloc
str r0, [r5, #0x20]
str r4, [r5, #0x24]
ldr r1, [r5, #0x20]
mov r0, r5
mov r2, r4
bl OS_InitMessageQueue
ldr r0, _02002F78 ; =_020AEF58
bl sub_02002E98
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_02002F78: .word _020AEF58
arm_func_end sub_02002F34
arm_func_start sub_02002F7C
sub_02002F7C: ; 0x02002F7C
stmdb sp!, {r3, lr}
cmp r2, #0
movne r2, #1
moveq r2, #0
bl OS_SendMessage
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end sub_02002F7C
arm_func_start sub_02002F98
sub_02002F98: ; 0x02002F98
stmdb sp!, {r3, lr}
cmp r2, #0
movne r2, #1
moveq r2, #0
bl OS_ReceiveMessage
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end sub_02002F98
arm_func_start sub_02002FB4
sub_02002FB4: ; 0x02002FB4
bx lr
arm_func_end sub_02002FB4
arm_func_start sub_02002FB8
sub_02002FB8: ; 0x02002FB8
stmdb sp!, {r4, r5, r6, lr}
ldr r0, _02003024 ; =_0229B110
mov r6, #0
strh r6, [r0]
cmp r6, #6
ldr r5, _02003028 ; =_0229B114
bge _0200301C
mov r4, r6
b _02003014
_02002FDC:
mov r0, r5
bl sub_02002C40
cmp r6, #4
str r4, [r5, #0x24]
cmpne r6, #5
bne _02003000
bl OS_GetLockID
strh r0, [r5, #0x28]
b _02003004
_02003000:
strh r4, [r5, #0x28]
_02003004:
mov r0, r5
bl sub_02002E98
add r6, r6, #1
add r5, r5, #0x2c
_02003014:
cmp r6, #6
blt _02002FDC
_0200301C:
bl sub_020059A8
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_02003024: .word _0229B110
_02003028: .word _0229B114
arm_func_end sub_02002FB8
arm_func_start sub_0200302C
sub_0200302C: ; 0x0200302C
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
movs r8, r0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
bl sub_02002580
mov r7, r0
mov r6, #0
ldr r5, _020030C4 ; =_0229B114
mov r4, #1
ldr sl, _020030C8 ; =_0229B110
b _020030B8
_02003054:
mov r0, r4, lsl r6
mov sb, r0, lsl #0x10
tst r8, sb, lsr #16
beq _020030B0
mov r0, r5
bl sub_02002CB4
bl InterruptMasterDisable
ldrh r0, [sl]
ldrh r0, [sl]
str r7, [r5, #0x24]
orr r0, r0, sb, lsr #16
strh r0, [sl]
bl InterruptMasterEnable
cmp r6, #4
beq _0200309C
cmp r6, #5
beq _020030A8
b _020030B0
_0200309C:
ldrh r0, [r5, #0x28]
bl Card_LockRom
b _020030B0
_020030A8:
ldrh r0, [r5, #0x28]
bl Card_LockBackup
_020030B0:
add r6, r6, #1
add r5, r5, #0x2c
_020030B8:
cmp r6, #6
blt _02003054
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_020030C4: .word _0229B114
_020030C8: .word _0229B110
arm_func_end sub_0200302C
arm_func_start InterruptMasterDisable
InterruptMasterDisable: ; 0x020030CC
ldr r2, _020030E0 ; =0x04000208
mov r1, #0
ldrh r0, [r2]
strh r1, [r2]
bx lr
.align 2, 0
_020030E0: .word 0x04000208
arm_func_end InterruptMasterDisable
arm_func_start InterruptMasterEnable
InterruptMasterEnable: ; 0x020030E4
ldr r2, _020030F8 ; =0x04000208
mov r1, #1
ldrh r0, [r2]
strh r1, [r2]
bx lr
.align 2, 0
_020030F8: .word 0x04000208
arm_func_end InterruptMasterEnable
arm_func_start sub_020030FC
sub_020030FC: ; 0x020030FC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
movs sl, r0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
bl sub_02002580
mov r1, #7
mov r8, r0
bl sub_020027F8
mov sb, r0
mov r7, #0
ldr r6, _020031B8 ; =_0229B114
mov fp, #1
ldr r5, _020031BC ; =_0229B110
b _020031A0
_02003130:
mov r0, fp, lsl r7
mov r4, r0, lsl #0x10
tst sl, r4, lsr #16
beq _02003198
cmp r7, #4
beq _02003154
cmp r7, #5
beq _02003160
b _02003168
_02003154:
ldrh r0, [r6, #0x28]
bl Card_UnlockRom
b _02003168
_02003160:
ldrh r0, [r6, #0x28]
bl Card_UnlockBackup
_02003168:
bl InterruptMasterDisable
ldrh r0, [r5]
mvn r1, r4, lsr #16
ldrh r0, [r5]
ldrh r2, [r5]
mov r0, #0
str r0, [r6, #0x24]
and r0, r2, r1
strh r0, [r5]
bl InterruptMasterEnable
mov r0, r6
bl sub_02002E98
_02003198:
add r7, r7, #1
add r6, r6, #0x2c
_020031A0:
cmp r7, #6
blt _02003130
mov r0, r8
mov r1, sb
bl sub_020027F8
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020031B8: .word _0229B114
_020031BC: .word _0229B110
arm_func_end sub_020030FC
arm_func_start sub_020031C0
sub_020031C0: ; 0x020031C0
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
bl sub_02002580
mov r5, #0
mov lr, r5
cmp r5, #6
ldr ip, _02003218 ; =_0229B114
bge _02003210
mov r3, #1
b _02003208
_020031E8:
mov r1, r3, lsl lr
mov r1, r1, lsl #0x10
tst r4, r1, lsr #16
ldrne r2, [ip, #0x24]
add lr, lr, #1
cmpne r2, r0
orrne r5, r5, r1, lsr #16
add ip, ip, #0x2c
_02003208:
cmp lr, #6
blt _020031E8
_02003210:
mov r0, r5
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_02003218: .word _0229B114
arm_func_end sub_020031C0
arm_func_start InitMemAllocTableVeneer
InitMemAllocTableVeneer: ; 0x0200321C
ldr ip, _02003224 ; =InitMemAllocTable
bx ip
.align 2, 0
_02003224: .word InitMemAllocTable
arm_func_end InitMemAllocTableVeneer

File diff suppressed because it is too large Load Diff

871
asm/overlay_18_0238CAB0.s Normal file
View File

@@ -0,0 +1,871 @@
.include "asm/macros.inc"
.include "overlay_18_0238CAB0.inc"
.text
arm_func_start ov18_0238CAB0
ov18_0238CAB0: ; 0x0238CAB0
ldr r0, _0238CAD0 ; =LINK_SHOP_PTR
mov r3, #0x1000
ldr r2, [r0]
mov r1, #0x35
str r3, [r2, #0x88]
ldr r0, [r0]
str r1, [r0, #0x80]
bx lr
.align 2, 0
_0238CAD0: .word LINK_SHOP_PTR
arm_func_end ov18_0238CAB0
arm_func_start ov18_0238CAD4
ov18_0238CAD4: ; 0x0238CAD4
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
add r1, sp, #0
mov r0, #0
bl GetPressedButtons
ldr r0, _0238CBD8 ; =LINK_SHOP_PTR
ldr r0, [r0]
ldrsb r0, [r0, #0xb]
bl GetAdvancedMenuCurrentOption
ldr r1, _0238CBD8 ; =LINK_SHOP_PTR
ldr r2, [r1]
strh r0, [r2, #0x8c]
ldrh r0, [sp]
tst r0, #8
beq _0238CB8C
ldr r1, [r1]
ldrsb r0, [r1, #0xb]
ldrsh r4, [r1, #0x8c]
bl sub_0202C1E4
ldr r0, _0238CBD8 ; =LINK_SHOP_PTR
mov r1, r4
ldr r0, [r0]
add r0, r0, #0x300
ldrsh r0, [r0, #0x8c]
bl ov18_0238ADA8
ldr r2, _0238CBD8 ; =LINK_SHOP_PTR
mov lr, #0
ldr r1, [r2]
mov ip, #1
str lr, [r1, #0x3a0]
ldr r1, [r2]
mov r3, #0x38
add r1, r1, #0x300
strh r0, [r1, #0xaa]
ldr r0, [r2]
strb ip, [r0, #0x3a6]
ldr r0, [r2]
add r0, r0, #0x300
strh lr, [r0, #0xa8]
ldr r0, [r2]
strb ip, [r0, #0x3ac]
ldr r0, [r2]
strb lr, [r0, #0x3ad]
ldr r0, [r2]
str r3, [r0, #0x80]
b _0238CBD0
_0238CB8C:
ldr r0, [r1]
ldrsb r0, [r0, #0xb]
bl IsAdvancedMenuActive2
cmp r0, #0
bne _0238CBD0
ldr r0, _0238CBD8 ; =LINK_SHOP_PTR
ldr r0, [r0]
ldrsb r0, [r0, #0xb]
bl GetAdvancedMenuResult
mvn r1, #0
cmp r0, r1
bne _0238CBC8
mov r0, #0x11
bl ov18_0238BE28
b _0238CBD0
_0238CBC8:
mov r0, #0x36
bl ov18_0238BE28
_0238CBD0:
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
.align 2, 0
_0238CBD8: .word LINK_SHOP_PTR
arm_func_end ov18_0238CAD4
arm_func_start ov18_0238CBDC
ov18_0238CBDC: ; 0x0238CBDC
ldr r0, _0238CBFC ; =LINK_SHOP_PTR
mov r3, #0x3000
ldr r2, [r0]
mov r1, #0x37
str r3, [r2, #0x88]
ldr r0, [r0]
str r1, [r0, #0x80]
bx lr
.align 2, 0
_0238CBFC: .word LINK_SHOP_PTR
arm_func_end ov18_0238CBDC
arm_func_start ov18_0238CC00
ov18_0238CC00: ; 0x0238CC00
stmdb sp!, {r4, lr}
ldr r0, _0238CD84 ; =LINK_SHOP_PTR
ldr r0, [r0]
ldrsb r0, [r0, #0xb]
bl GetAdvancedMenuResult
ldr r1, _0238CD84 ; =LINK_SHOP_PTR
mov r4, r0
ldr r0, [r1]
ldrsb r0, [r0, #0xc]
bl IsSimpleMenuActive
cmp r0, #0
ldmneia sp!, {r4, pc}
ldr r0, _0238CD84 ; =LINK_SHOP_PTR
ldr r0, [r0]
ldrsb r0, [r0, #0xc]
bl GetSimpleMenuResult__0202B870
sub r0, r0, #4
cmp r0, #9
addls pc, pc, r0, lsl #2
b _0238CD5C
_0238CC50: ; jump table
b _0238CCF0 ; case 0
b _0238CD5C ; case 1
b _0238CD5C ; case 2
b _0238CD5C ; case 3
b _0238CD5C ; case 4
b _0238CD5C ; case 5
b _0238CD5C ; case 6
b _0238CD5C ; case 7
b _0238CD5C ; case 8
b _0238CC78 ; case 9
_0238CC78:
ldr r1, _0238CD84 ; =LINK_SHOP_PTR
mov r0, r4, lsl #0x10
ldr r2, [r1]
mov r1, r0, asr #0x10
add r0, r2, #0x300
ldrsh r0, [r0, #0x8c]
bl ov18_0238ADA8
ldr r1, _0238CD84 ; =LINK_SHOP_PTR
mov r4, r0
ldr r0, [r1]
str r4, [r0, #0x24]
bl sub_020415BC
cmp r0, #0
mov r0, r4
beq _0238CCCC
bl sub_0203FD14
ldr r0, _0238CD84 ; =LINK_SHOP_PTR
mov r1, #0x3c
ldr r0, [r0]
str r1, [r0, #0x80]
ldmia sp!, {r4, pc}
_0238CCCC:
bl sub_02041614
ldr r0, _0238CD84 ; =LINK_SHOP_PTR
ldr r0, [r0]
add r0, r0, #0x300
ldrsh r0, [r0, #0x8c]
bl sub_0203FD80
mov r0, #0x3a
bl ov18_0238BE28
ldmia sp!, {r4, pc}
_0238CCF0:
ldr r1, _0238CD84 ; =LINK_SHOP_PTR
mov r0, r4, lsl #0x10
ldr r2, [r1]
mov r1, r0, asr #0x10
add r0, r2, #0x300
ldrsh r0, [r0, #0x8c]
bl ov18_0238ADA8
ldr r2, _0238CD84 ; =LINK_SHOP_PTR
mov r4, #0
ldr r1, [r2]
mov r3, #1
str r4, [r1, #0x3a0]
ldr r1, [r2]
add r1, r1, #0x300
strh r0, [r1, #0xaa]
ldr r1, [r2]
mov r0, #0x38
strb r3, [r1, #0x3a6]
ldr r1, [r2]
add r1, r1, #0x300
strh r4, [r1, #0xa8]
ldr r1, [r2]
strb r3, [r1, #0x3ac]
ldr r1, [r2]
strb r4, [r1, #0x3ad]
bl ov18_0238BE28
ldmia sp!, {r4, pc}
_0238CD5C:
ldr r0, _0238CD84 ; =LINK_SHOP_PTR
mvn r1, #1
ldr r0, [r0]
ldrsb r0, [r0, #0xb]
cmp r0, r1
beq _0238CD78
bl ResumeAdvancedMenu
_0238CD78:
mov r0, #0x34
bl ov18_0238BE28
ldmia sp!, {r4, pc}
.align 2, 0
_0238CD84: .word LINK_SHOP_PTR
arm_func_end ov18_0238CC00
arm_func_start ov18_0238CD88
ov18_0238CD88: ; 0x0238CD88
ldr r0, _0238CDA8 ; =LINK_SHOP_PTR
mov r3, #0x400
ldr r2, [r0]
mov r1, #0x39
str r3, [r2, #0x88]
ldr r0, [r0]
str r1, [r0, #0x80]
bx lr
.align 2, 0
_0238CDA8: .word LINK_SHOP_PTR
arm_func_end ov18_0238CD88
arm_func_start ov18_0238CDAC
ov18_0238CDAC: ; 0x0238CDAC
stmdb sp!, {r3, lr}
bl sub_02041A18
cmp r0, #0
ldmeqia sp!, {r3, pc}
mov r0, #0x34
bl ov18_0238BE28
ldmia sp!, {r3, pc}
arm_func_end ov18_0238CDAC
arm_func_start ov18_0238CDC8
ov18_0238CDC8: ; 0x0238CDC8
ldr r0, _0238CDE8 ; =LINK_SHOP_PTR
mov r3, #3
ldr r2, [r0]
mov r1, #0x3b
str r3, [r2, #0x88]
ldr r0, [r0]
str r1, [r0, #0x80]
bx lr
.align 2, 0
_0238CDE8: .word LINK_SHOP_PTR
arm_func_end ov18_0238CDC8
arm_func_start ov18_0238CDEC
ov18_0238CDEC: ; 0x0238CDEC
ldr ip, _0238CDF8 ; =ov18_0238BE28
mov r0, #0x11
bx ip
.align 2, 0
_0238CDF8: .word ov18_0238BE28
arm_func_end ov18_0238CDEC
arm_func_start ov18_0238CDFC
ov18_0238CDFC: ; 0x0238CDFC
ldr r0, _0238CE1C ; =LINK_SHOP_PTR
mov r3, #0x14000
ldr r2, [r0]
mov r1, #0x3d
str r3, [r2, #0x88]
ldr r0, [r0]
str r1, [r0, #0x80]
bx lr
.align 2, 0
_0238CE1C: .word LINK_SHOP_PTR
arm_func_end ov18_0238CDFC
arm_func_start ov18_0238CE20
ov18_0238CE20: ; 0x0238CE20
stmdb sp!, {r4, lr}
bl sub_020407EC
movs r4, r0
beq _0238CE44
ldr r0, _0238CE84 ; =LINK_SHOP_PTR
ldr r0, [r0]
add r0, r0, #0x300
ldrsh r0, [r0, #0x8c]
bl sub_0203FD80
_0238CE44:
cmp r4, #1
beq _0238CE6C
cmp r4, #2
beq _0238CE60
cmp r4, #7
beq _0238CE78
ldmia sp!, {r4, pc}
_0238CE60:
mov r0, #0x3e
bl ov18_0238BE28
ldmia sp!, {r4, pc}
_0238CE6C:
mov r0, #0x11
bl ov18_0238BE28
ldmia sp!, {r4, pc}
_0238CE78:
mov r0, #0x40
bl ov18_0238BE28
ldmia sp!, {r4, pc}
.align 2, 0
_0238CE84: .word LINK_SHOP_PTR
arm_func_end ov18_0238CE20
arm_func_start ov18_0238CE88
ov18_0238CE88: ; 0x0238CE88
stmdb sp!, {r3, lr}
ldr r0, _0238CED4 ; =LINK_SHOP_PTR
mov r1, #0xc000
ldr r0, [r0]
str r1, [r0, #0x88]
bl sub_02041094
bl sub_02041154
ldr r1, _0238CED4 ; =LINK_SHOP_PTR
ldr r1, [r1]
str r0, [r1, #0x24]
mov r0, #4
bl sub_02041154
ldr r1, _0238CED4 ; =LINK_SHOP_PTR
mov r2, #0x3f
ldr r3, [r1]
str r0, [r3, #0x28]
ldr r0, [r1]
str r2, [r0, #0x80]
ldmia sp!, {r3, pc}
.align 2, 0
_0238CED4: .word LINK_SHOP_PTR
arm_func_end ov18_0238CE88
arm_func_start ov18_0238CED8
ov18_0238CED8: ; 0x0238CED8
stmdb sp!, {r3, lr}
bl sub_02041094
ldr r0, _0238CF94 ; =LINK_SHOP_PTR
ldr r0, [r0]
ldrsb r0, [r0, #0xe]
bl IsSimpleMenuActive
cmp r0, #0
ldmneia sp!, {r3, pc}
bl sub_0203FD38
ldr r0, _0238CF94 ; =LINK_SHOP_PTR
ldr r0, [r0]
ldrsb r0, [r0, #0xe]
bl GetSimpleMenuResult__0202B870
sub r0, r0, #4
cmp r0, #6
addls pc, pc, r0, lsl #2
b _0238CF6C
_0238CF1C: ; jump table
b _0238CF60 ; case 0
b _0238CF6C ; case 1
b _0238CF6C ; case 2
b _0238CF6C ; case 3
b _0238CF6C ; case 4
b _0238CF6C ; case 5
b _0238CF38 ; case 6
_0238CF38:
bl sub_02041094
bl sub_02041364
cmp r0, #0
beq _0238CF54
mov r0, #0x42
bl ov18_0238BE28
ldmia sp!, {r3, pc}
_0238CF54:
mov r0, #0x45
bl ov18_0238BE28
ldmia sp!, {r3, pc}
_0238CF60:
mov r0, #0x40
bl ov18_0238BE28
ldmia sp!, {r3, pc}
_0238CF6C:
ldr r0, _0238CF94 ; =LINK_SHOP_PTR
mvn r1, #1
ldr r0, [r0]
ldrsb r0, [r0, #0xb]
cmp r0, r1
beq _0238CF88
bl ResumeAdvancedMenu
_0238CF88:
mov r0, #0x3c
bl ov18_0238BE28
ldmia sp!, {r3, pc}
.align 2, 0
_0238CF94: .word LINK_SHOP_PTR
arm_func_end ov18_0238CED8
arm_func_start ov18_0238CF98
ov18_0238CF98: ; 0x0238CF98
stmdb sp!, {r4, lr}
bl sub_0203FD38
mov r4, r0
bl sub_02041094
cmp r0, #4
blt _0238CFF0
bl sub_0203FD2C
ldr r2, _0238D030 ; =LINK_SHOP_PTR
mov r1, r0
ldr r0, [r2]
mov r2, #8
add r0, r0, #0xa6
add r0, r0, #0x300
bl memcpy
ldr r0, _0238D030 ; =LINK_SHOP_PTR
mov r2, #0
ldr r1, [r0]
str r2, [r1, #0x3a0]
ldr r0, [r0]
add r0, r0, #0x300
strh r2, [r0, #0xa4]
b _0238D010
_0238CFF0:
ldr r0, _0238D030 ; =LINK_SHOP_PTR
ldr r0, [r0]
str r4, [r0, #0x3a0]
bl sub_02041094
ldr r1, _0238D030 ; =LINK_SHOP_PTR
ldr r1, [r1]
add r1, r1, #0x300
strh r0, [r1, #0xa4]
_0238D010:
ldr r0, _0238D030 ; =LINK_SHOP_PTR
mov r3, #0x400
ldr r2, [r0]
mov r1, #0x41
str r3, [r2, #0x88]
ldr r0, [r0]
str r1, [r0, #0x80]
ldmia sp!, {r4, pc}
.align 2, 0
_0238D030: .word LINK_SHOP_PTR
arm_func_end ov18_0238CF98
arm_func_start ov18_0238D034
ov18_0238D034: ; 0x0238D034
stmdb sp!, {r3, lr}
bl sub_02041A18
cmp r0, #0
ldmeqia sp!, {r3, pc}
mov r0, #0x3c
bl ov18_0238BE28
ldmia sp!, {r3, pc}
arm_func_end ov18_0238D034
arm_func_start ov18_0238D050
ov18_0238D050: ; 0x0238D050
ldr r0, _0238D070 ; =LINK_SHOP_PTR
mov r3, #3
ldr r2, [r0]
mov r1, #0x43
str r3, [r2, #0x88]
ldr r0, [r0]
str r1, [r0, #0x80]
bx lr
.align 2, 0
_0238D070: .word LINK_SHOP_PTR
arm_func_end ov18_0238D050
arm_func_start ov18_0238D074
ov18_0238D074: ; 0x0238D074
ldr r0, _0238D094 ; =LINK_SHOP_PTR
mov r3, #0x43
ldr r2, [r0]
mov r1, #0x44
str r3, [r2, #0x88]
ldr r0, [r0]
str r1, [r0, #0x80]
bx lr
.align 2, 0
_0238D094: .word LINK_SHOP_PTR
arm_func_end ov18_0238D074
arm_func_start ov18_0238D098
ov18_0238D098: ; 0x0238D098
stmdb sp!, {r4, lr}
ldr r0, _0238D128 ; =LINK_SHOP_PTR
ldr r0, [r0]
ldrsb r0, [r0, #6]
bl IsSimpleMenuActive
cmp r0, #0
ldmneia sp!, {r4, pc}
bl sub_02041094
ldr r1, _0238D128 ; =LINK_SHOP_PTR
mov r4, r0
ldr r0, [r1]
ldrsb r0, [r0, #6]
bl GetSimpleMenuResult__0202B870
cmp r0, #0
beq _0238D0E0
cmp r0, #1
beq _0238D11C
ldmia sp!, {r4, pc}
_0238D0E0:
mov r0, r4
bl sub_02041484
bl sub_0203FD2C
ldrh r0, [r0, #4]
bl sub_02041614
ldr r0, _0238D128 ; =LINK_SHOP_PTR
ldr r0, [r0]
add r0, r0, #0x300
ldrsh r0, [r0, #0x8c]
bl sub_0203FD80
ldr r0, _0238D128 ; =LINK_SHOP_PTR
mov r1, #0x48
ldr r0, [r0]
str r1, [r0, #0x80]
ldmia sp!, {r4, pc}
_0238D11C:
mov r0, #0x3c
bl ov18_0238BE28
ldmia sp!, {r4, pc}
.align 2, 0
_0238D128: .word LINK_SHOP_PTR
arm_func_end ov18_0238D098
arm_func_start ov18_0238D12C
ov18_0238D12C: ; 0x0238D12C
ldr r0, _0238D14C ; =LINK_SHOP_PTR
mov r3, #3
ldr r2, [r0]
mov r1, #0x46
str r3, [r2, #0x88]
ldr r0, [r0]
str r1, [r0, #0x80]
bx lr
.align 2, 0
_0238D14C: .word LINK_SHOP_PTR
arm_func_end ov18_0238D12C
arm_func_start ov18_0238D150
ov18_0238D150: ; 0x0238D150
ldr r0, _0238D170 ; =LINK_SHOP_PTR
mov r3, #0x43
ldr r2, [r0]
mov r1, #0x47
str r3, [r2, #0x88]
ldr r0, [r0]
str r1, [r0, #0x80]
bx lr
.align 2, 0
_0238D170: .word LINK_SHOP_PTR
arm_func_end ov18_0238D150
arm_func_start ov18_0238D174
ov18_0238D174: ; 0x0238D174
stmdb sp!, {r4, lr}
ldr r0, _0238D204 ; =LINK_SHOP_PTR
ldr r0, [r0]
ldrsb r0, [r0, #6]
bl IsSimpleMenuActive
cmp r0, #0
ldmneia sp!, {r4, pc}
bl sub_02041094
ldr r1, _0238D204 ; =LINK_SHOP_PTR
mov r4, r0
ldr r0, [r1]
ldrsb r0, [r0, #6]
bl GetSimpleMenuResult__0202B870
cmp r0, #0
beq _0238D1BC
cmp r0, #1
beq _0238D1F8
ldmia sp!, {r4, pc}
_0238D1BC:
mov r0, r4
bl sub_02041484
bl sub_0203FD2C
ldrh r0, [r0, #4]
bl sub_02041614
ldr r0, _0238D204 ; =LINK_SHOP_PTR
ldr r0, [r0]
add r0, r0, #0x300
ldrsh r0, [r0, #0x8c]
bl sub_0203FD80
ldr r0, _0238D204 ; =LINK_SHOP_PTR
mov r1, #0x4a
ldr r0, [r0]
str r1, [r0, #0x80]
ldmia sp!, {r4, pc}
_0238D1F8:
mov r0, #0x3c
bl ov18_0238BE28
ldmia sp!, {r4, pc}
.align 2, 0
_0238D204: .word LINK_SHOP_PTR
arm_func_end ov18_0238D174
; 0x0238D208
.rodata
.global ov18_0238D208
ov18_0238D208:
.byte 0x18, 0x00, 0x9F, 0xE5, 0x03, 0x30, 0xA0, 0xE3, 0x00, 0x20, 0x90, 0xE5, 0x49, 0x10, 0xA0, 0xE3
.byte 0x88, 0x30, 0x82, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x80, 0x10, 0x80, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1
.word LINK_SHOP_PTR
.global ov18_0238D22C
ov18_0238D22C:
.byte 0x04, 0xC0, 0x9F, 0xE5, 0x11, 0x00, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1
.word ov18_0238BE28
.global ov18_0238D23C
ov18_0238D23C:
.byte 0x18, 0x00, 0x9F, 0xE5, 0x03, 0x30, 0xA0, 0xE3, 0x00, 0x20, 0x90, 0xE5
.byte 0x4B, 0x10, 0xA0, 0xE3, 0x88, 0x30, 0x82, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x80, 0x10, 0x80, 0xE5
.byte 0x1E, 0xFF, 0x2F, 0xE1
.word LINK_SHOP_PTR
.global ov18_0238D260
ov18_0238D260:
.byte 0x04, 0xC0, 0x9F, 0xE5, 0x11, 0x00, 0xA0, 0xE3
.byte 0x1C, 0xFF, 0x2F, 0xE1
.word ov18_0238BE28
.global LINK_SHOP_WINDOW_PARAMS_1
LINK_SHOP_WINDOW_PARAMS_1:
.byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x04
.byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_WINDOW_PARAMS_2
LINK_SHOP_WINDOW_PARAMS_2:
.byte 0x00, 0x00, 0x00, 0x00, 0x1E, 0x0F, 0x08, 0x00
.byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_WINDOW_PARAMS_3
LINK_SHOP_WINDOW_PARAMS_3:
.byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00
.byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_WINDOW_PARAMS_4
LINK_SHOP_WINDOW_PARAMS_4:
.byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00
.byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_WINDOW_PARAMS_5
LINK_SHOP_WINDOW_PARAMS_5:
.byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x08, 0x00
.byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_WINDOW_PARAMS_6
LINK_SHOP_WINDOW_PARAMS_6:
.byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x12, 0x00
.byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_WINDOW_PARAMS_7
LINK_SHOP_WINDOW_PARAMS_7:
.byte 0x00, 0x00, 0x00, 0x00, 0x1E, 0x0F, 0x0B, 0x00
.byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_WINDOW_PARAMS_8
LINK_SHOP_WINDOW_PARAMS_8:
.byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x02, 0x0B, 0x00
.byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_WINDOW_PARAMS_9
LINK_SHOP_WINDOW_PARAMS_9:
.byte 0x00, 0x00, 0x00, 0x00, 0x1E, 0x0F, 0x00, 0x00
.byte 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_WINDOW_PARAMS_10
LINK_SHOP_WINDOW_PARAMS_10:
.byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x12, 0x1C, 0x04
.byte 0x00, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_WINDOW_PARAMS_11
LINK_SHOP_WINDOW_PARAMS_11:
.byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x1C, 0x05
.byte 0x00, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global LINK_SHOP_MENU_ITEMS_CONFIRM
LINK_SHOP_MENU_ITEMS_CONFIRM:
#ifdef JAPAN
#define OV18_DATA_OFFSET 0x3926
#define OV18_DATA_OFFSET_2 -0x1C5
#else
#define OV18_DATA_OFFSET 0
#define OV18_DATA_OFFSET_2 0
#define OV18_DATA_OFFSET_2 0
#endif
.word 0x3E7 + OV18_DATA_OFFSET
.byte 0x00, 0x00, 0x00, 0x00
.word 0x3E8 + OV18_DATA_OFFSET
.byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
.global LINK_SHOP_SUBMENU_ITEMS_1
LINK_SHOP_SUBMENU_ITEMS_1:
.word 0x3F3 + OV18_DATA_OFFSET
.byte 0x0D, 0x00, 0x00, 0x00
.word 0x3EB + OV18_DATA_OFFSET
.byte 0x04, 0x00, 0x00, 0x00
.word 0x3EC + OV18_DATA_OFFSET
.byte 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00
.global LINK_SHOP_SUBMENU_ITEMS_2
LINK_SHOP_SUBMENU_ITEMS_2:
.word 0x3F0 + OV18_DATA_OFFSET
.byte 0x0A, 0x00, 0x00, 0x00
.word 0x3EB + OV18_DATA_OFFSET
.byte 0x04, 0x00, 0x00, 0x00
.word 0x3EC + OV18_DATA_OFFSET
.byte 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00
.global LINK_SHOP_MAIN_MENU_ITEMS
LINK_SHOP_MAIN_MENU_ITEMS:
.word 0x3EA + OV18_DATA_OFFSET
.byte 0x03, 0x00, 0x00, 0x00
.word 0x3EB + OV18_DATA_OFFSET
.byte 0x04, 0x00, 0x00, 0x00
.word 0x3EC + OV18_DATA_OFFSET
.byte 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00
.global LINK_SHOP_SUBMENU_ITEMS_3
LINK_SHOP_SUBMENU_ITEMS_3:
.word 0x3ED + OV18_DATA_OFFSET
.byte 0x07, 0x00, 0x00, 0x00
.word 0x3EE + OV18_DATA_OFFSET
.byte 0x08, 0x00, 0x00, 0x00
.word 0x3F3 + OV18_DATA_OFFSET
.byte 0x0D, 0x00, 0x00, 0x00
.word 0x3E9 + OV18_DATA_OFFSET
.byte 0x02, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
.global LINK_SHOP_SUBMENU_ITEMS_4
LINK_SHOP_SUBMENU_ITEMS_4:
.word 0x3F4 + OV18_DATA_OFFSET
.byte 0x0E, 0x00, 0x00, 0x00
.word 0x3F5 + OV18_DATA_OFFSET
.byte 0x0F, 0x00, 0x00, 0x00
.word 0x3F6 + OV18_DATA_OFFSET
.byte 0x10, 0x00, 0x00, 0x00
.word 0x3F3 + OV18_DATA_OFFSET
.byte 0x0D, 0x00, 0x00, 0x00
.word 0x3EC + OV18_DATA_OFFSET
.byte 0x05, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00
.global LINK_SHOP_SUBMENU_ITEMS_5
LINK_SHOP_SUBMENU_ITEMS_5:
.word 0x3ED + OV18_DATA_OFFSET
.byte 0x07, 0x00, 0x00, 0x00
.word 0x3EE + OV18_DATA_OFFSET
.byte 0x08, 0x00, 0x00, 0x00
.word 0x3EF + OV18_DATA_OFFSET
.byte 0x09, 0x00, 0x00, 0x00
.word 0xA3F + OV18_DATA_OFFSET_2
.byte 0x11, 0x00, 0x00, 0x00
.word 0xA40 + OV18_DATA_OFFSET_2
.byte 0x12, 0x00, 0x00, 0x00
.word 0x3F0 + OV18_DATA_OFFSET
.byte 0x0A, 0x00, 0x00, 0x00
.word 0x3EB + OV18_DATA_OFFSET
.byte 0x04, 0x00, 0x00, 0x00
.word 0x3EC + OV18_DATA_OFFSET
.byte 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00
.global LINK_SHOP_SUBMENU_ITEMS_6
LINK_SHOP_SUBMENU_ITEMS_6:
.word 0x3F1 + OV18_DATA_OFFSET
.byte 0x0B, 0x00, 0x00, 0x00
.word 0x3EE + OV18_DATA_OFFSET
.byte 0x08, 0x00, 0x00, 0x00
.word 0x3EF + OV18_DATA_OFFSET
.byte 0x09, 0x00, 0x00, 0x00
.word 0xA3F + OV18_DATA_OFFSET_2
.byte 0x11, 0x00, 0x00, 0x00
.word 0xA40 + OV18_DATA_OFFSET_2
.byte 0x12, 0x00, 0x00, 0x00
.word 0x3F0 + OV18_DATA_OFFSET
.byte 0x0A, 0x00, 0x00, 0x00
.word 0x3EB + OV18_DATA_OFFSET
.byte 0x04, 0x00, 0x00, 0x00
.word 0x3EC + OV18_DATA_OFFSET
.byte 0x05, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00
.global LINK_SHOP_SUBMENU_ITEMS_7
LINK_SHOP_SUBMENU_ITEMS_7:
.word 0x3F2 + OV18_DATA_OFFSET
.byte 0x0C, 0x00, 0x00, 0x00
.word 0x3EE + OV18_DATA_OFFSET
.byte 0x08, 0x00, 0x00, 0x00
.word 0x3EF + OV18_DATA_OFFSET
.byte 0x09, 0x00, 0x00, 0x00
.word 0xA3F + OV18_DATA_OFFSET_2
.byte 0x11, 0x00, 0x00, 0x00
.word 0xA40 + OV18_DATA_OFFSET_2
.byte 0x12, 0x00, 0x00, 0x00
.word 0x3F0 + OV18_DATA_OFFSET
.byte 0x0A, 0x00, 0x00, 0x00
.word 0x3EB + OV18_DATA_OFFSET
.byte 0x04, 0x00, 0x00, 0x00
.word 0x3EC + OV18_DATA_OFFSET
.byte 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00
.global OVERLAY18_FUNCTION_POINTER_TABLE
OVERLAY18_FUNCTION_POINTER_TABLE:
.word ov18_0238BE48
.word ov18_0238BE6C
.word ov18_0238BE90
.word ov18_0238BF0C
.word ov18_0238BF30
.word ov18_0238BF60
.word ov18_0238BF84
.word ov18_0238BFA8
.word ov18_0238C03C
.word ov18_0238C060
.word ov18_0238C078
.word ov18_0238C060
.word ov18_0238C09C
.word ov18_0238C0C0
.word ov18_0238C0D8
.word ov18_0238C0FC
.word ov18_0238C114
.word ov18_0238C13C
.word ov18_0238C164
.word ov18_0238C21C
.word ov18_0238C240
.word ov18_0238C258
.word ov18_0238C27C
.word ov18_0238C340
.word ov18_0238C364
.word ov18_0238C398
.word ov18_0238C3C0
.word ov18_0238C428
.word ov18_0238C47C
.word ov18_0238C4A0
.word ov18_0238C4E8
.word ov18_0238C504
.word ov18_0238C528
.word ov18_0238C720
.word ov18_0238C78C
.word ov18_0238C7B0
.word ov18_0238C7C0
.word ov18_0238C7E4
.word ov18_0238C808
.word ov18_0238C888
.word ov18_0238C8AC
.word ov18_0238C8D0
.word ov18_0238C950
.word ov18_0238C974
.word ov18_0238C984
.word ov18_0238C9A8
.word ov18_0238C9B8
.word ov18_0238CA18
.word ov18_0238CA3C
.word ov18_0238CA4C
.word ov18_0238CA70
.word ov18_0238CA80
.word ov18_0238CAB0
.word ov18_0238CAD4
.word ov18_0238CBDC
.word ov18_0238CC00
.word ov18_0238CD88
.word ov18_0238CDAC
.word ov18_0238CDC8
.word ov18_0238CDEC
.word ov18_0238CDFC
.word ov18_0238CE20
.word ov18_0238CE88
.word ov18_0238CED8
.word ov18_0238CF98
.word ov18_0238D034
.word ov18_0238D050
.word ov18_0238D074
.word ov18_0238D098
.word ov18_0238D12C
.word ov18_0238D150
.word ov18_0238D174
.word ov18_0238D208
.word ov18_0238D22C
.word ov18_0238D23C
.word ov18_0238D260
.global ov18_0238D5F8
ov18_0238D5F8:
.byte 0x5B, 0x43, 0x53, 0x3A, 0x25, 0x63, 0x5D, 0x25, 0x73, 0x5B, 0x43, 0x52, 0x5D, 0x00, 0x00, 0x00
.global ov18_0238D608
ov18_0238D608:
.byte 0x5B, 0x43, 0x53, 0x3A, 0x56, 0x5D, 0x5B, 0x67, 0x6F, 0x6C, 0x64, 0x3A, 0x30, 0x5D, 0x5B, 0x43
.byte 0x52, 0x5D, 0x00, 0x00
.data
.global LINK_SHOP_PTR
LINK_SHOP_PTR:
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

View File

@@ -1,139 +1,8 @@
.include "asm/macros.inc"
.include "overlay_29_022DC694.inc"
.include "overlay_29_022DC7E4.inc"
.text
arm_func_start ov29_022DC694
ov29_022DC694: ; 0x022DC694
stmdb sp!, {r4, r5, lr}
sub sp, sp, #0x14
mov r5, r0
add r0, sp, #0
mov r4, r1
bl ov10_022C22A0
add r0, sp, #0
mov r1, r4
bl ov10_022C0814
mov r0, r5
mov r1, #0
mov r2, #1
bl DrawTeamStats
add sp, sp, #0x14
ldmia sp!, {r4, r5, pc}
arm_func_end ov29_022DC694
arm_func_start ov29_022DC6D0
ov29_022DC6D0: ; 0x022DC6D0
ldr ip, _022DC6D8 ; =UpdateTeamStats
bx ip
.align 2, 0
_022DC6D8: .word UpdateTeamStats
arm_func_end ov29_022DC6D0
arm_func_start ov29_022DC6DC
ov29_022DC6DC: ; 0x022DC6DC
ldr ip, _022DC6E4 ; =ov10_022C11D8
bx ip
.align 2, 0
_022DC6E4: .word ov10_022C11D8
arm_func_end ov29_022DC6DC
arm_func_start ov29_022DC6E8
ov29_022DC6E8: ; 0x022DC6E8
stmdb sp!, {r4, lr}
sub sp, sp, #0x18
ldrb r4, [sp, #0x20]
ldrsh ip, [sp, #0x24]
ldrsh lr, [sp, #0x28]
stmia sp, {r4, ip}
str lr, [sp, #8]
ldrsh ip, [sp, #0x2c]
ldrsh lr, [sp, #0x30]
str ip, [sp, #0xc]
ldrb ip, [sp, #0x34]
str lr, [sp, #0x10]
str ip, [sp, #0x14]
bl ov10_022C0F6C
add sp, sp, #0x18
ldmia sp!, {r4, pc}
arm_func_end ov29_022DC6E8
arm_func_start ov29_022DC728
ov29_022DC728: ; 0x022DC728
stmdb sp!, {r3, lr}
bl FreeTeamStats
bl ov10_022C096C
ldmia sp!, {r3, pc}
arm_func_end ov29_022DC728
arm_func_start ov29_022DC738
ov29_022DC738: ; 0x022DC738
stmdb sp!, {r4, r5, lr}
sub sp, sp, #0x14
mov r5, r0
add r0, sp, #0
mov r4, r1
bl ov10_022C22A0
add r0, sp, #0
mov r1, r4
bl ov10_022C0814
mov r0, r5
bl ov10_022C14D0
add sp, sp, #0x14
ldmia sp!, {r4, r5, pc}
arm_func_end ov29_022DC738
arm_func_start ov29_022DC76C
ov29_022DC76C: ; 0x022DC76C
ldr ip, _022DC774 ; =ov10_022C159C
bx ip
.align 2, 0
_022DC774: .word ov10_022C159C
arm_func_end ov29_022DC76C
arm_func_start ov29_022DC778
ov29_022DC778: ; 0x022DC778
bx lr
arm_func_end ov29_022DC778
arm_func_start ov29_022DC77C
ov29_022DC77C: ; 0x022DC77C
stmdb sp!, {r3, lr}
bl FreeMapAndTeam
bl ov10_022C096C
ldmia sp!, {r3, pc}
arm_func_end ov29_022DC77C
arm_func_start ov29_022DC78C
ov29_022DC78C: ; 0x022DC78C
stmdb sp!, {r4, lr}
ldr r1, _022DC7E0 ; =ov29_02353518
mov lr, #0
ldr r4, [r1]
mov r1, #0x50
b _022DC7D0
_022DC7A4:
mul ip, lr, r1
add r3, r4, ip
ldrb r2, [r3, #4]
cmp r2, #0
beq _022DC7CC
ldr r2, [r3, #8]
cmp r0, r2
addeq r0, r4, #4
addeq r0, r0, ip
ldmeqia sp!, {r4, pc}
_022DC7CC:
add lr, lr, #1
_022DC7D0:
cmp lr, #0x16
blt _022DC7A4
mov r0, #0
ldmia sp!, {r4, pc}
.align 2, 0
_022DC7E0: .word ov29_02353518
arm_func_end ov29_022DC78C
; https://decomp.me/scratch/qiwjF
arm_func_start ov29_022DC7E4
ov29_022DC7E4: ; 0x022DC7E4

View File

@@ -559,128 +559,3 @@ PlayExclamationPointEffect__022E4880: ; 0x022E3ED0
.align 2, 0
_022E3F1C: .word 0x00000143
arm_func_end PlayExclamationPointEffect__022E4880
arm_func_start ov29_022E3F20
ov29_022E3F20: ; 0x022E3F20
bx lr
arm_func_end ov29_022E3F20
arm_func_start ov29_022E3F24
ov29_022E3F24: ; 0x022E3F24
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
mov r4, r0
ldr r0, _022E3F70 ; =0x00000141
bl GetEffectAnimationField0x19
mov r2, r0
and r3, r2, #0xff
mov r0, #2
mov ip, #0
stmia sp, {r0, ip}
sub r0, ip, #1
str r0, [sp, #8]
ldr r1, _022E3F70 ; =0x00000141
mov r0, r4
mov r2, #1
str ip, [sp, #0xc]
bl PlayEffectAnimationEntity
add sp, sp, #0x10
ldmia sp!, {r4, pc}
.align 2, 0
_022E3F70: .word 0x00000141
arm_func_end ov29_022E3F24
arm_func_start ov29_022E3F74
ov29_022E3F74: ; 0x022E3F74
bx lr
arm_func_end ov29_022E3F74
arm_func_start ov29_022E3F78
ov29_022E3F78: ; 0x022E3F78
bx lr
arm_func_end ov29_022E3F78
arm_func_start ov29_022E3F7C
ov29_022E3F7C: ; 0x022E3F7C
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
mov r4, r0
mov r0, #7
bl GetEffectAnimationField0x19
mov r1, r0
and r3, r1, #0xff
mov r0, #2
mov ip, #0
stmia sp, {r0, ip}
sub r0, ip, #1
str r0, [sp, #8]
mov r0, r4
mov r1, #7
mov r2, #1
str ip, [sp, #0xc]
bl PlayEffectAnimationEntity
add sp, sp, #0x10
ldmia sp!, {r4, pc}
arm_func_end ov29_022E3F7C
arm_func_start ov29_022E3FC8
ov29_022E3FC8: ; 0x022E3FC8
bx lr
arm_func_end ov29_022E3FC8
arm_func_start ov29_022E3FCC
ov29_022E3FCC: ; 0x022E3FCC
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
mov r4, r0
mov r0, #4
bl GetEffectAnimationField0x19
mov r1, r0
and r3, r1, #0xff
mov r0, #2
mov r2, #0
stmia sp, {r0, r2}
sub r0, r2, #1
str r0, [sp, #8]
mov r0, r4
mov r1, #4
str r2, [sp, #0xc]
bl PlayEffectAnimationEntity
add sp, sp, #0x10
ldmia sp!, {r4, pc}
arm_func_end ov29_022E3FCC
arm_func_start ov29_022E4014
ov29_022E4014: ; 0x022E4014
bx lr
arm_func_end ov29_022E4014
arm_func_start PlayEffectAnimation0x171Full
PlayEffectAnimation0x171Full: ; 0x022E4018
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
mov r4, r0
ldr r0, _022E4064 ; =0x00000171
bl GetEffectAnimationField0x19
mov r2, r0
and r3, r2, #0xff
mov r0, #2
mov ip, #0
stmia sp, {r0, ip}
sub r0, ip, #1
str r0, [sp, #8]
ldr r1, _022E4064 ; =0x00000171
mov r0, r4
mov r2, #1
str ip, [sp, #0xc]
bl PlayEffectAnimationEntity
add sp, sp, #0x10
ldmia sp!, {r4, pc}
.align 2, 0
_022E4064: .word 0x00000171
arm_func_end PlayEffectAnimation0x171Full
arm_func_start ov29_022E4068
ov29_022E4068: ; 0x022E4068
bx lr
arm_func_end ov29_022E4068

View File

@@ -1,136 +1,8 @@
.include "asm/macros.inc"
.include "overlay_29_022E4714.inc"
.include "overlay_29_022E4868.inc"
.text
arm_func_start ov29_022E4714
ov29_022E4714: ; 0x022E4714
bx lr
arm_func_end ov29_022E4714
arm_func_start ov29_022E4718
ov29_022E4718: ; 0x022E4718
bx lr
arm_func_end ov29_022E4718
arm_func_start ov29_022E471C
ov29_022E471C: ; 0x022E471C
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
mov r4, r0
ldr r0, _022E4768 ; =0x00000131
bl GetEffectAnimationField0x19
mov r2, r0
and r3, r2, #0xff
mov r0, #2
mov ip, #0
stmia sp, {r0, ip}
sub r0, ip, #1
str r0, [sp, #8]
ldr r1, _022E4768 ; =0x00000131
mov r0, r4
mov r2, #1
str ip, [sp, #0xc]
bl PlayEffectAnimationEntity
add sp, sp, #0x10
ldmia sp!, {r4, pc}
.align 2, 0
_022E4768: .word 0x00000131
arm_func_end ov29_022E471C
arm_func_start ov29_022E476C
ov29_022E476C: ; 0x022E476C
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
mov r4, r0
mov r0, #0x30
bl GetEffectAnimationField0x19
mov r1, r0
and r3, r1, #0xff
mov r0, #2
mov ip, #0
stmia sp, {r0, ip}
sub r0, ip, #1
str r0, [sp, #8]
mov r0, r4
mov r1, #0x30
mov r2, #1
str ip, [sp, #0xc]
bl PlayEffectAnimationEntity
add sp, sp, #0x10
ldmia sp!, {r4, pc}
arm_func_end ov29_022E476C
arm_func_start ov29_022E47B8
ov29_022E47B8: ; 0x022E47B8
bx lr
arm_func_end ov29_022E47B8
arm_func_start ov29_022E47BC
ov29_022E47BC: ; 0x022E47BC
bx lr
arm_func_end ov29_022E47BC
arm_func_start ov29_022E47C0
ov29_022E47C0: ; 0x022E47C0
bx lr
arm_func_end ov29_022E47C0
arm_func_start ov29_022E47C4
ov29_022E47C4: ; 0x022E47C4
bx lr
arm_func_end ov29_022E47C4
arm_func_start ov29_022E47C8
ov29_022E47C8: ; 0x022E47C8
bx lr
arm_func_end ov29_022E47C8
arm_func_start ov29_022E47CC
ov29_022E47CC: ; 0x022E47CC
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #0x10
mov r5, r1
mov r1, #0xe
mov r4, r0
bl MonsterIsType
cmp r0, #0
beq _022E4828
mov r0, r5
bl GetEffectAnimationField0x19
mov r2, r0
and r3, r2, #0xff
mov r0, #2
mov ip, #0
stmia sp, {r0, ip}
sub r0, ip, #1
str r0, [sp, #8]
mov r0, r4
mov r1, r5
mov r2, #1
str ip, [sp, #0xc]
bl PlayEffectAnimationEntity
b _022E4860
_022E4828:
mov r0, #0xe
bl GetEffectAnimationField0x19
mov r1, r0
and r3, r1, #0xff
mov r0, #2
mov ip, #0
stmia sp, {r0, ip}
sub r0, ip, #1
str r0, [sp, #8]
mov r0, r4
mov r1, #0xe
mov r2, #1
str ip, [sp, #0xc]
bl PlayEffectAnimationEntity
_022E4860:
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, pc}
arm_func_end ov29_022E47CC
arm_func_start ov29_022E4868
ov29_022E4868: ; 0x022E4868
bx lr

28
include/main_020027E8.h Normal file
View File

@@ -0,0 +1,28 @@
#ifndef PMDSKY_MAIN_020027E8_H
#define PMDSKY_MAIN_020027E8_H
#include "util.h"
struct unk_020027E8 {
OSThread *field_0x0;
u8 field_0x4[0x10];
s32 field_0x14;
};
struct unk_0229B0E0 {
s32 field_0x0;
s32 field_0x4;
};
void sub_020027E8(struct unk_020027E8 *p);
u32 sub_020027F8(struct unk_020027E8 *p, u32 prio);
u32 sub_02002824(u32 prio);
void sub_02002858(struct unk_020027E8 *p, s32 v);
s32 sub_02002860(struct unk_020027E8 *p);
bool8 sub_02002878(s32 v);
void sub_020028AC(void);
void sub_020028B0(OSMutex *mutex);
void sub_020028F8(OSMutex *mutex);
void sub_02002904(OSMutex *mutex);
#endif

View File

@@ -0,0 +1,25 @@
#ifndef PMDSKY_OVERLAY_18_0238C950_H
#define PMDSKY_OVERLAY_18_0238C950_H
struct unk_0238C950 {
u8 field_0x0[0x80];
s32 field_0x80;
s32 field_0x84;
s32 field_0x88;
s16 field_0x8C;
u8 field_0x8E[0x2FE];
s16 field_0x38C;
};
void ov18_0238C950(void);
void ov18_0238C974(void);
void ov18_0238C984(void);
void ov18_0238C9A8(void);
void ov18_0238C9B8(void);
void ov18_0238CA18(void);
void ov18_0238CA3C(void);
void ov18_0238CA4C(void);
void ov18_0238CA70(void);
void ov18_0238CA80(void);
#endif

View File

@@ -1,10 +1,32 @@
#ifndef PMDSKY_OVERLAY_29_022DC684_H
#define PMDSKY_OVERLAY_29_022DC684_H
struct unk_02353518 {
u8 field_0x0[4];
u8 field_0x4;
u8 field_0x5[3];
s32 field_0x8;
u8 field_0xC[0x44];
};
struct unk_022DC694 {
u32 field_0x0[5];
};
#include "dungeon_mode.h"
#include "item.h"
#include "move.h"
void ov29_022DC684(s32 a);
void ov29_022DC694(s32 a, s32 b);
void ov29_022DC6D0(void);
void ov29_022DC6DC(void);
void ov29_022DC6E8(s32 a, s32 b, s32 c, s32 d, u8 e, s16 f, s16 g, s16 h, s16 i, u8 j);
void ov29_022DC728(void);
void ov29_022DC738(s32 a, s32 b);
void ov29_022DC76C(void);
void ov29_022DC778(void);
void ov29_022DC77C(void);
u8 * ov29_022DC78C(s32 id);
#endif

View File

@@ -0,0 +1,17 @@
#ifndef PMDSKY_OVERLAY_29_022E3F20_H
#define PMDSKY_OVERLAY_29_022E3F20_H
#include "dungeon_mode.h"
void ov29_022E3F20(void);
void ov29_022E3F24(struct entity *entity);
void ov29_022E3F74(void);
void ov29_022E3F78(void);
void ov29_022E3F7C(struct entity *entity);
void ov29_022E3FC8(void);
void ov29_022E3FCC(struct entity *entity);
void ov29_022E4014(void);
void PlayEffectAnimation0x171Full(struct entity *entity);
void ov29_022E4068(void);
#endif

View File

@@ -6,5 +6,15 @@
#include "move.h"
void PlayInvisifySeIfShouldDisplayEntity(struct entity *entity);
void ov29_022E4714(void);
void ov29_022E4718(void);
void ov29_022E471C(struct entity *entity);
void ov29_022E476C(struct entity *entity);
void ov29_022E47B8(void);
void ov29_022E47BC(void);
void ov29_022E47C0(void);
void ov29_022E47C4(void);
void ov29_022E47C8(void);
void ov29_022E47CC(struct entity *entity, s32 id);
#endif

View File

@@ -24,6 +24,8 @@ Static main
Object asm/main_02001D68.o
Object src/main_0200224C.o
Object asm/main_020022C4.o
Object src/main_020027E8.o
Object asm/main_02002910.o
Object src/main_0200330C.o
Object asm/main_02003328.o
Object src/main_0200383C.o
@@ -701,6 +703,8 @@ Overlay OVY_18
{
After OVY_11
Object asm/overlay_18.o
Object src/overlay_18_0238C950.o
Object asm/overlay_18_0238CAB0.o
}
Overlay OVY_19
{
@@ -769,7 +773,7 @@ Overlay OVY_29
Object src/overlay_29_022DC61C.o
Object asm/overlay_29_022DC65C.o
Object src/overlay_29_022DC684.o
Object asm/overlay_29_022DC694.o
Object asm/overlay_29_022DC7E4.o
Object src/overlay_29_022DEAB0.o
Object asm/overlay_29_022DEBA4.o
Object src/dg.o
@@ -793,6 +797,7 @@ Overlay OVY_29
Object asm/overlay_29_022E335C.o
Object src/dg_effect.o
Object asm/overlay_29_022E37DC.o
Object src/overlay_29_022E3F20.o
Object src/overlay_29_022E406C.o
Object src/overlay_29_022E41CC.o
Object asm/overlay_29_022E41F0.o
@@ -802,7 +807,7 @@ Overlay OVY_29
Object src/overlay_29_022E46C0.o
Object asm/overlay_29_022E46D0.o
Object src/overlay_29_022E4704.o
Object asm/overlay_29_022E4714.o
Object asm/overlay_29_022E4868.o
Object src/overlay_29_022E4B8C.o
Object asm/overlay_29_022E4BB4.o
Object src/overlay_29_022E563C.o

90
src/main_020027E8.c Normal file
View File

@@ -0,0 +1,90 @@
#include "main_020027E8.h"
extern volatile struct unk_0229B0E0 _0229B0E0;
extern void sub_02002670(void);
extern void sub_020026B8(void);
extern struct unk_020027E8 *sub_02002580(void);
void sub_020027E8(struct unk_020027E8 *p)
{
OS_WakeupThreadDirect(p->field_0x0);
}
u32 sub_020027F8(struct unk_020027E8 *p, u32 prio)
{
u32 old;
old = OS_GetThreadPriority(p->field_0x0);
OS_SetThreadPriority(p->field_0x0, prio);
return old;
}
u32 sub_02002824(u32 prio)
{
OSThread *thread;
u32 old;
thread = OSi_ThreadInfo.current;
old = OS_GetThreadPriority(thread);
OS_SetThreadPriority(thread, prio);
return old;
}
void sub_02002858(struct unk_020027E8 *p, s32 v)
{
p->field_0x14 = v;
}
s32 sub_02002860(struct unk_020027E8 *p)
{
if (p != NULL && p->field_0x0 != NULL) {
return p->field_0x14;
}
return 0;
}
bool8 sub_02002878(s32 v)
{
struct unk_020027E8 *p;
p = sub_02002580();
if (p != NULL) {
return p->field_0x14 == v;
}
return 0;
}
void sub_020028AC(void)
{
}
void sub_020028B0(OSMutex *mutex)
{
OS_InitMutex(mutex);
OS_LockMutex(mutex);
sub_02002670();
_0229B0E0.field_0x0 += 1;
if (_0229B0E0.field_0x0 > _0229B0E0.field_0x4) {
_0229B0E0.field_0x4 = _0229B0E0.field_0x0;
}
sub_020026B8();
}
void sub_020028F8(OSMutex *mutex)
{
OS_UnlockMutex(mutex);
}
void sub_02002904(OSMutex *mutex)
{
OS_LockMutex(mutex);
}

74
src/overlay_18_0238C950.c Normal file
View File

@@ -0,0 +1,74 @@
#include "overlay_18_0238C950.h"
extern s32 sub_0204159C(void);
extern s32 ov18_0238ABB0(s16 a);
extern void ov18_0238BE28(s32 a);
extern struct unk_0238C950 *LINK_SHOP_PTR;
void ov18_0238C950(void)
{
LINK_SHOP_PTR->field_0x88 = 3;
LINK_SHOP_PTR->field_0x80 = 0x2B;
}
void ov18_0238C974(void)
{
ov18_0238BE28(0x19);
}
void ov18_0238C984(void)
{
LINK_SHOP_PTR->field_0x88 = 3;
LINK_SHOP_PTR->field_0x80 = 0x2D;
}
void ov18_0238C9A8(void)
{
ov18_0238BE28(0x19);
}
void ov18_0238C9B8(void)
{
if (sub_0204159C() == 0) {
LINK_SHOP_PTR->field_0x80 = 0x2F;
return;
}
if (ov18_0238ABB0(LINK_SHOP_PTR->field_0x38C) <= 0) {
LINK_SHOP_PTR->field_0x80 = 0x31;
} else {
LINK_SHOP_PTR->field_0x80 = 0x33;
}
}
void ov18_0238CA18(void)
{
LINK_SHOP_PTR->field_0x88 = 3;
LINK_SHOP_PTR->field_0x80 = 0x30;
}
void ov18_0238CA3C(void)
{
ov18_0238BE28(0x11);
}
void ov18_0238CA4C(void)
{
LINK_SHOP_PTR->field_0x88 = 3;
LINK_SHOP_PTR->field_0x80 = 0x32;
}
void ov18_0238CA70(void)
{
ov18_0238BE28(0x11);
}
void ov18_0238CA80(void)
{
LINK_SHOP_PTR->field_0x88 = 3;
LINK_SHOP_PTR->field_0x8C = 0;
LINK_SHOP_PTR->field_0x80 = 0x34;
}

View File

@@ -1,8 +1,106 @@
#include "overlay_29_022DC684.h"
extern struct unk_02353518 *ov29_02353518;
extern void FreeMapAndTeam(void);
extern void ov10_022C159C(void);
extern void ov10_022C14D0(s32 a);
extern void FreeTeamStats(void);
extern void ov10_022C096C(void);
extern void ov10_022C0F6C(s32 a, s32 b, s32 c, s32 d, s32 e, s32 f, s32 g, s32 h, s32 i, s32 j);
extern void ov10_022C11D8(void);
extern void UpdateTeamStats(void);
extern void ov10_022C22A0(struct unk_022DC694 *p);
extern void ov10_022C0814(struct unk_022DC694 *p, s32 a);
extern void DrawTeamStats(s32 a, s32 b, s32 c);
extern void ov10_022C0998(s32 a, s32 b);
void ov29_022DC684(s32 a)
{
ov10_022C0998(a, 1);
}
void ov29_022DC694(s32 a, s32 b)
{
struct unk_022DC694 s;
ov10_022C22A0(&s);
ov10_022C0814(&s, b);
DrawTeamStats(a, 0, 1);
}
void ov29_022DC6D0(void)
{
UpdateTeamStats();
}
void ov29_022DC6DC(void)
{
ov10_022C11D8();
}
void ov29_022DC6E8(s32 a, s32 b, s32 c, s32 d, u8 e, s16 f, s16 g, s16 h, s16 i, u8 j)
{
ov10_022C0F6C(a, b, c, d, e, f, g, h, i, j);
}
void ov29_022DC728(void)
{
FreeTeamStats();
ov10_022C096C();
}
void ov29_022DC738(s32 a, s32 b)
{
struct unk_022DC694 s;
ov10_022C22A0(&s);
ov10_022C0814(&s, b);
ov10_022C14D0(a);
}
void ov29_022DC76C(void)
{
ov10_022C159C();
}
void ov29_022DC778(void)
{
}
void ov29_022DC77C(void)
{
FreeMapAndTeam();
ov10_022C096C();
}
u8 * ov29_022DC78C(s32 id)
{
s32 i;
u8 *base;
s32 off;
base = (u8 *) ov29_02353518;
for (i = 0; i < 22; i++) {
off = i * 0x50;
if (base[off + 4] != 0 && *(s32 *) &base[off + 8] == id) {
return base + 4 + off;
}
}
return NULL;
}

60
src/overlay_29_022E3F20.c Normal file
View File

@@ -0,0 +1,60 @@
#include "overlay_29_022E3F20.h"
extern s32 GetEffectAnimationField0x19(s32 id);
extern void PlayEffectAnimationEntity(struct entity *entity, s32 id, s32 a, u8 b,
s32 c, s32 d, s32 e, s32 f);
void ov29_022E3F20(void)
{
}
void ov29_022E3F24(struct entity *entity)
{
PlayEffectAnimationEntity(entity, 0x141, 1, GetEffectAnimationField0x19(0x141),
2, 0, -1, 0);
}
void ov29_022E3F74(void)
{
}
void ov29_022E3F78(void)
{
}
void ov29_022E3F7C(struct entity *entity)
{
PlayEffectAnimationEntity(entity, 7, 1, GetEffectAnimationField0x19(7),
2, 0, -1, 0);
}
void ov29_022E3FC8(void)
{
}
void ov29_022E3FCC(struct entity *entity)
{
PlayEffectAnimationEntity(entity, 4, 0, GetEffectAnimationField0x19(4),
2, 0, -1, 0);
}
void ov29_022E4014(void)
{
}
void PlayEffectAnimation0x171Full(struct entity *entity)
{
PlayEffectAnimationEntity(entity, 0x171, 1, GetEffectAnimationField0x19(0x171),
2, 0, -1, 0);
}
void ov29_022E4068(void)
{
}

View File

@@ -1,8 +1,73 @@
#include "overlay_29_022E4704.h"
extern bool8 MonsterIsType(struct entity *entity, enum type_id type_id);
extern s32 GetEffectAnimationField0x19(s32 id);
extern void PlayEffectAnimationEntity(struct entity *entity, s32 id, s32 a, u8 b,
s32 c, s32 d, s32 e, s32 f);
extern void PlaySeByIdIfShouldDisplayEntity(struct entity *entity, s32 se_id);
void PlayInvisifySeIfShouldDisplayEntity(struct entity *entity)
{
PlaySeByIdIfShouldDisplayEntity(entity, 0x21C);
}
void ov29_022E4714(void)
{
}
void ov29_022E4718(void)
{
}
void ov29_022E471C(struct entity *entity)
{
PlayEffectAnimationEntity(entity, 0x131, 1, GetEffectAnimationField0x19(0x131),
2, 0, -1, 0);
}
void ov29_022E476C(struct entity *entity)
{
PlayEffectAnimationEntity(entity, 0x30, 1, GetEffectAnimationField0x19(0x30),
2, 0, -1, 0);
}
void ov29_022E47B8(void)
{
}
void ov29_022E47BC(void)
{
}
void ov29_022E47C0(void)
{
}
void ov29_022E47C4(void)
{
}
void ov29_022E47C8(void)
{
}
void ov29_022E47CC(struct entity *entity, s32 id)
{
if (MonsterIsType(entity, TYPE_GHOST)) {
PlayEffectAnimationEntity(entity, id, 1, GetEffectAnimationField0x19(id),
2, 0, -1, 0);
} else {
PlayEffectAnimationEntity(entity, 0xE, 1, GetEffectAnimationField0x19(0xE),
2, 0, -1, 0);
}
}