From 8ffb100497f15042aca8bed2b198e4a90e737d77 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 17 Jul 2025 22:05:15 -0400 Subject: [PATCH] Decomped sub_0200383C Decomped by TiredPeanut and taxicat1 --- asm/include/main_02003328.inc | 36 +-- asm/include/main_020038D8.inc | 35 +++ asm/main_02003328.s | 408 ---------------------------------- asm/main_020038D8.s | 366 ++++++++++++++++++++++++++++++ include/main_0200383C.h | 6 + main.lsf | 2 + src/main_0200383C.c | 44 ++++ 7 files changed, 465 insertions(+), 432 deletions(-) create mode 100644 asm/include/main_020038D8.inc create mode 100644 asm/main_020038D8.s create mode 100644 include/main_0200383C.h create mode 100644 src/main_0200383C.c diff --git a/asm/include/main_02003328.inc b/asm/include/main_02003328.inc index 9ed123a0..f683d1ed 100644 --- a/asm/include/main_02003328.inc +++ b/asm/include/main_02003328.inc @@ -1,7 +1,15 @@ #pragma once +.public Debug_Print0 +.public GX_VBlankIntr +.public GetHeldButtons +.public GetReleasedStylus +.public HaltProcessDisp +.public KeyWaitInit +.public MainLoop +.public OS_IRQTable +.public Rand16Bit +.public WaitForever .public _020924D8 -.public _020924E8 -.public _020924F8 .public _020AEF7C .public _020AEFB4 .public _020AEFC8 @@ -11,24 +19,12 @@ .public _020AF050 .public _020AF078 .public _020AF154 -.public _0229B21C .public _0229B220 .public _0229B248 .public _0229F248 .public _fadd .public _fflt .public _fmul -.public Debug_Print0 -.public GetHeldButtons -.public GetReleasedStylus -.public GX_VBlankIntr -.public HaltProcessDisp -.public KeyWaitInit -.public MainLoop -.public OS_IRQTable -.public PlayBgmById -.public Rand16Bit -.public StopBgmCommand .public sub_02002580 .public sub_020025F8 .public sub_02002628 @@ -39,25 +35,19 @@ .public sub_020027E8 .public sub_020027F8 .public sub_02002858 -.public sub_02002860 .public sub_02002950 .public sub_020029A0 .public sub_020029B8 .public sub_02002A44 .public sub_02002C40 +.public sub_02003A40 +.public sub_02003B5C .public sub_02005EAC .public sub_02006098 .public sub_02006D4C .public sub_02006DEC -.public sub_020081C8 .public sub_020082E0 .public sub_02017D20 -.public sub_02017DB4 -.public sub_02017FF0 -.public sub_02018024 -.public sub_02018118 -.public sub_02018278 -.public sub_02018428 .public sub_0201849C .public sub_02078A98 .public sub_02078C68 @@ -66,7 +56,5 @@ .public sub_0207B370 .public sub_0207B4A4 .public sub_0207B4B8 -.public sub_0207B584 .public sub_020820E8 .public sub_02082420 -.public WaitForever diff --git a/asm/include/main_020038D8.inc b/asm/include/main_020038D8.inc new file mode 100644 index 00000000..eee804d6 --- /dev/null +++ b/asm/include/main_020038D8.inc @@ -0,0 +1,35 @@ +#pragma once +.public Debug_Print0 +.public DisableAllInterrupts +.public EnableAllInterrupts +.public PlayBgmById +.public StopBgmCommand +.public _020924E8 +.public _020924F8 +.public _020AEF7C +.public _020AF000 +.public _020AF028 +.public _020AF050 +.public _0229B21C +.public _0229B220 +.public sub_02002580 +.public sub_020025F8 +.public sub_02002628 +.public sub_0200265C +.public sub_02002670 +.public sub_020026B8 +.public sub_020027F8 +.public sub_02002860 +.public sub_020029A0 +.public sub_02002A44 +.public sub_020081C8 +.public sub_02017DB4 +.public sub_02017FF0 +.public sub_02018024 +.public sub_02018118 +.public sub_02018278 +.public sub_02018428 +.public sub_02078A98 +.public sub_02079888 +.public sub_02079940 +.public sub_0207B584 diff --git a/asm/main_02003328.s b/asm/main_02003328.s index d25eaeb5..bc85a5af 100644 --- a/asm/main_02003328.s +++ b/asm/main_02003328.s @@ -390,411 +390,3 @@ DisableAllInterrupts: ; 0x02003824 .align 2, 0 _02003838: .word 0x04000208 arm_func_end DisableAllInterrupts - - arm_func_start sub_0200383C -sub_0200383C: ; 0x0200383C - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #8 - mov r5, r0 - add r0, sp, #0 - mov r1, #0xb - bl sub_02002628 - bl sub_02002670 - ldr r0, _020038CC ; =_020AEF7C - mov r1, #1 - strb r1, [r0, #2] - ldr r4, [r0, #0x10] - str r5, [r0, #0x10] - bl sub_020026B8 - cmp r5, #0 - bne _02003898 - cmp r4, #0 - beq _020038BC - ldr r1, _020038CC ; =_020AEF7C - mov r2, #0 - ldr r0, _020038D0 ; =_020AF028 - strb r2, [r1, #3] - bl sub_020029A0 - b _020038BC -_02003898: - cmp r4, #0 - bne _020038BC - ldr r1, _020038CC ; =_020AEF7C - mov r2, #1 - ldr r0, _020038D0 ; =_020AF028 - strb r2, [r1] - bl sub_020029A0 - ldr r0, _020038D4 ; =_020AF000 - bl sub_02002A44 -_020038BC: - add r0, sp, #0 - bl sub_0200265C - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020038CC: .word _020AEF7C -_020038D0: .word _020AF028 -_020038D4: .word _020AF000 - arm_func_end sub_0200383C - - arm_func_start sub_020038D8 -sub_020038D8: ; 0x020038D8 - ldr r0, _020038E4 ; =_020AEF7C - ldrb r0, [r0, #3] - bx lr - .align 2, 0 -_020038E4: .word _020AEF7C - arm_func_end sub_020038D8 - - arm_func_start sub_020038E8 -sub_020038E8: ; 0x020038E8 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - add r0, sp, #0 - mov r1, #0xb - bl sub_02002628 - bl sub_02002670 - ldr r0, _02003988 ; =_020AEF7C - ldr r4, [r0, #0x18] - bl sub_020026B8 - cmp r4, #0 - beq _02003944 - ldr r0, _02003988 ; =_020AEF7C - mov r1, #1 - strb r1, [r0] - ldrb r1, [r0, #7] - cmp r1, #0 - beq _02003938 - ldr r0, [r0, #0x34] - ldr r0, [r0] - bl sub_02079940 -_02003938: - ldr r0, _0200398C ; =_020AF000 - bl sub_02002A44 - b _02003950 -_02003944: - ldr r0, _02003988 ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #7] -_02003950: - ldr r1, _02003988 ; =_020AEF7C - add r0, sp, #0 - ldr r2, [r1, #0x2c] - add r2, r2, #1 - str r2, [r1, #0x2c] - bl sub_0200265C - ldr r0, _02003988 ; =_020AEF7C - ldrb r0, [r0, #0xd] - cmp r0, #0 - beq _02003980 - mov r0, #0 - bl sub_020025F8 -_02003980: - add sp, sp, #8 - ldmia sp!, {r4, pc} - .align 2, 0 -_02003988: .word _020AEF7C -_0200398C: .word _020AF000 - arm_func_end sub_020038E8 - - arm_func_start sub_02003990 -sub_02003990: ; 0x02003990 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr r0, _020039DC ; =_020AEF7C - ldrb r0, [r0, #3] - cmp r0, #0 - beq _020039D4 - add r0, sp, #0 - mov r1, #0xb - bl sub_02002628 - ldr r1, _020039DC ; =_020AEF7C - mov r2, #0 - strb r2, [r1, #3] - ldr r0, _020039E0 ; =_020AF000 - strb r2, [r1, #6] - bl sub_020029A0 - add r0, sp, #0 - bl sub_0200265C -_020039D4: - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_020039DC: .word _020AEF7C -_020039E0: .word _020AF000 - arm_func_end sub_02003990 - - arm_func_start sub_020039E4 -sub_020039E4: ; 0x020039E4 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr r0, _02003A34 ; =_020AEF7C - ldrb r0, [r0, #3] - cmp r0, #0 - beq _02003A2C - add r0, sp, #0 - mov r1, #0xb - bl sub_02002628 - ldr r1, _02003A34 ; =_020AEF7C - mov r2, #0 - ldr r0, _02003A38 ; =_020AF028 - strb r2, [r1, #6] - bl sub_020029A0 - ldr r0, _02003A3C ; =_020AF000 - bl sub_02002A44 - add r0, sp, #0 - bl sub_0200265C -_02003A2C: - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_02003A34: .word _020AEF7C -_02003A38: .word _020AF028 -_02003A3C: .word _020AF000 - arm_func_end sub_020039E4 - - arm_func_start sub_02003A40 -sub_02003A40: ; 0x02003A40 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - add r0, sp, #0 - mov r1, #0xb - bl sub_02002628 - ldr r1, _02003AAC ; =_020AEF7C - mov r2, #1 - ldrb r0, [r1, #0xa] - cmp r0, #0 - mov r0, #0 - beq _02003A7C - strb r0, [r1, #0xa] - strb r2, [r1, #7] - bl sub_02079888 - b _02003A90 -_02003A7C: - strb r2, [r1, #9] - bl sub_02079888 - ldr r0, _02003AAC ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #9] -_02003A90: - ldr r1, _02003AAC ; =_020AEF7C - add r0, sp, #0 - ldrb r4, [r1] - bl sub_0200265C - mov r0, r4 - add sp, sp, #8 - ldmia sp!, {r4, pc} - .align 2, 0 -_02003AAC: .word _020AEF7C - arm_func_end sub_02003A40 - - arm_func_start sub_02003AB0 -sub_02003AB0: ; 0x02003AB0 - stmdb sp!, {r3, lr} - ldr r0, _02003AC8 ; =_020AF050 - bl sub_02002A44 - ldr r0, _02003ACC ; =_020AEF7C - ldr r0, [r0, #0x28] - ldmia sp!, {r3, pc} - .align 2, 0 -_02003AC8: .word _020AF050 -_02003ACC: .word _020AEF7C - arm_func_end sub_02003AB0 - - arm_func_start sub_02003AD0 -sub_02003AD0: ; 0x02003AD0 - stmdb sp!, {r3, lr} - ldr r0, _02003B50 ; =_020AEF7C - ldrb r0, [r0, #5] - cmp r0, #0 - ldmneia sp!, {r3, pc} - bl sub_02002580 - mov r1, #1 - bl sub_020027F8 - bl sub_02002580 - bl sub_02002860 - cmp r0, #0 - beq _02003B10 - ldr r0, _02003B54 ; =_020AF050 - bl sub_02002A44 - ldr r0, _02003B50 ; =_020AEF7C - ldr r0, [r0, #0x28] -_02003B10: - ldr r0, _02003B50 ; =_020AEF7C - mov r2, #1 - strb r2, [r0, #5] - ldrb r1, [r0, #0xf] - cmp r1, #0 - bne _02003B30 - strb r2, [r0, #0xf] - bl sub_020081C8 -_02003B30: - bl DisableAllInterrupts - ldr r0, _02003B58 ; =_0229B220 - bl sub_0207B584 - mov r0, #1 - mov r1, #0 - bl sub_02078A98 - bl EnableAllInterrupts - ldmia sp!, {r3, pc} - .align 2, 0 -_02003B50: .word _020AEF7C -_02003B54: .word _020AF050 -_02003B58: .word _0229B220 - arm_func_end sub_02003AD0 - - arm_func_start sub_02003B5C -sub_02003B5C: ; 0x02003B5C - ldr r0, _02003B8C ; =_020AEF7C - mov r1, #1 - ldrb r0, [r0, #0xb] - cmp r0, #0 - bne _02003B84 - ldr r0, _02003B90 ; =0x027FFFA8 - ldrh r0, [r0] - and r0, r0, #0x8000 - movs r0, r0, asr #0xf - moveq r1, #0 -_02003B84: - and r0, r1, #0xff - bx lr - .align 2, 0 -_02003B8C: .word _020AEF7C -_02003B90: .word 0x027FFFA8 - arm_func_end sub_02003B5C - - arm_func_start sub_02003B94 -sub_02003B94: ; 0x02003B94 - ldr r0, _02003BA8 ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #1] - strb r1, [r0, #8] - bx lr - .align 2, 0 -_02003BA8: .word _020AEF7C - arm_func_end sub_02003B94 - - arm_func_start sub_02003BAC -sub_02003BAC: ; 0x02003BAC - ldr r0, _02003BC4 ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #1] - mov r1, #1 - strb r1, [r0, #8] - bx lr - .align 2, 0 -_02003BC4: .word _020AEF7C - arm_func_end sub_02003BAC - - arm_func_start sub_02003BC8 -sub_02003BC8: ; 0x02003BC8 - stmdb sp!, {r3, lr} - bl SoundResume - ldr r0, _02003BE8 ; =_020AEF7C - mov r1, #1 - strb r1, [r0, #1] - mov r1, #0 - strb r1, [r0, #8] - ldmia sp!, {r3, pc} - .align 2, 0 -_02003BE8: .word _020AEF7C - arm_func_end sub_02003BC8 - - arm_func_start sub_02003BEC -sub_02003BEC: ; 0x02003BEC - ldr r0, _02003BF8 ; =_020AEF7C - ldrb r0, [r0, #1] - bx lr - .align 2, 0 -_02003BF8: .word _020AEF7C - arm_func_end sub_02003BEC - - arm_func_start sub_02003BFC -sub_02003BFC: ; 0x02003BFC - stmdb sp!, {r3, lr} - ldr r0, _02003CB4 ; =_020AEF7C - ldrb r1, [r0, #1] - cmp r1, #0 - bne _02003CAC - ldrb r0, [r0, #4] - cmp r0, #0 - beq _02003C5C - bl sub_02003B5C - cmp r0, #0 - bne _02003C54 - ldr r0, _02003CB8 ; =_020924E8 - bl Debug_Print0 - ldr r0, _02003CBC ; =_0229B21C - ldrh r0, [r0, #2] - bl PlayBgmById - ldr r0, _02003CBC ; =_0229B21C - ldrh r0, [r0] - bl sub_02018024 - ldr r0, _02003CB4 ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #4] -_02003C54: - mov r0, #1 - ldmia sp!, {r3, pc} -_02003C5C: - bl sub_02003B5C - cmp r0, #0 - beq _02003CAC - ldr r0, _02003CC0 ; =_020924F8 - bl Debug_Print0 - bl sub_02017DB4 - ldr r1, _02003CBC ; =_0229B21C - strh r0, [r1, #2] - bl sub_02017FF0 - ldr r1, _02003CBC ; =_0229B21C - strh r0, [r1] - bl StopBgmCommand - bl sub_02018118 - bl sub_02018278 - mov r0, #0x3f00 - bl sub_02018428 - ldr r1, _02003CB4 ; =_020AEF7C - mov r0, #1 - strb r0, [r1, #4] - ldmia sp!, {r3, pc} -_02003CAC: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02003CB4: .word _020AEF7C -_02003CB8: .word _020924E8 -_02003CBC: .word _0229B21C -_02003CC0: .word _020924F8 - arm_func_end sub_02003BFC - - arm_func_start SoundResume -SoundResume: ; 0x02003CC4 - stmdb sp!, {r3, lr} - ldr r0, _02003D20 ; =_020AEF7C - ldrb r1, [r0, #1] - cmp r1, #0 - bne _02003D18 - ldrb r0, [r0, #4] - cmp r0, #0 - beq _02003D18 - ldr r0, _02003D24 ; =_020924E8 - bl Debug_Print0 - ldr r0, _02003D28 ; =_0229B21C - ldrh r0, [r0, #2] - bl PlayBgmById - ldr r0, _02003D28 ; =_0229B21C - ldrh r0, [r0] - bl sub_02018024 - ldr r0, _02003D20 ; =_020AEF7C - mov r1, #0 - strb r1, [r0, #4] - mov r0, #1 - ldmia sp!, {r3, pc} -_02003D18: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02003D20: .word _020AEF7C -_02003D24: .word _020924E8 -_02003D28: .word _0229B21C - arm_func_end SoundResume diff --git a/asm/main_020038D8.s b/asm/main_020038D8.s new file mode 100644 index 00000000..93b8bf0c --- /dev/null +++ b/asm/main_020038D8.s @@ -0,0 +1,366 @@ + .include "asm/macros.inc" + .include "main_020038D8.inc" + + .text + + arm_func_start sub_020038D8 +sub_020038D8: ; 0x020038D8 + ldr r0, _020038E4 ; =_020AEF7C + ldrb r0, [r0, #3] + bx lr + .align 2, 0 +_020038E4: .word _020AEF7C + arm_func_end sub_020038D8 + + arm_func_start sub_020038E8 +sub_020038E8: ; 0x020038E8 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + add r0, sp, #0 + mov r1, #0xb + bl sub_02002628 + bl sub_02002670 + ldr r0, _02003988 ; =_020AEF7C + ldr r4, [r0, #0x18] + bl sub_020026B8 + cmp r4, #0 + beq _02003944 + ldr r0, _02003988 ; =_020AEF7C + mov r1, #1 + strb r1, [r0] + ldrb r1, [r0, #7] + cmp r1, #0 + beq _02003938 + ldr r0, [r0, #0x34] + ldr r0, [r0] + bl sub_02079940 +_02003938: + ldr r0, _0200398C ; =_020AF000 + bl sub_02002A44 + b _02003950 +_02003944: + ldr r0, _02003988 ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #7] +_02003950: + ldr r1, _02003988 ; =_020AEF7C + add r0, sp, #0 + ldr r2, [r1, #0x2c] + add r2, r2, #1 + str r2, [r1, #0x2c] + bl sub_0200265C + ldr r0, _02003988 ; =_020AEF7C + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _02003980 + mov r0, #0 + bl sub_020025F8 +_02003980: + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02003988: .word _020AEF7C +_0200398C: .word _020AF000 + arm_func_end sub_020038E8 + + arm_func_start sub_02003990 +sub_02003990: ; 0x02003990 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr r0, _020039DC ; =_020AEF7C + ldrb r0, [r0, #3] + cmp r0, #0 + beq _020039D4 + add r0, sp, #0 + mov r1, #0xb + bl sub_02002628 + ldr r1, _020039DC ; =_020AEF7C + mov r2, #0 + strb r2, [r1, #3] + ldr r0, _020039E0 ; =_020AF000 + strb r2, [r1, #6] + bl sub_020029A0 + add r0, sp, #0 + bl sub_0200265C +_020039D4: + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_020039DC: .word _020AEF7C +_020039E0: .word _020AF000 + arm_func_end sub_02003990 + + arm_func_start sub_020039E4 +sub_020039E4: ; 0x020039E4 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr r0, _02003A34 ; =_020AEF7C + ldrb r0, [r0, #3] + cmp r0, #0 + beq _02003A2C + add r0, sp, #0 + mov r1, #0xb + bl sub_02002628 + ldr r1, _02003A34 ; =_020AEF7C + mov r2, #0 + ldr r0, _02003A38 ; =_020AF028 + strb r2, [r1, #6] + bl sub_020029A0 + ldr r0, _02003A3C ; =_020AF000 + bl sub_02002A44 + add r0, sp, #0 + bl sub_0200265C +_02003A2C: + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_02003A34: .word _020AEF7C +_02003A38: .word _020AF028 +_02003A3C: .word _020AF000 + arm_func_end sub_020039E4 + + arm_func_start sub_02003A40 +sub_02003A40: ; 0x02003A40 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + add r0, sp, #0 + mov r1, #0xb + bl sub_02002628 + ldr r1, _02003AAC ; =_020AEF7C + mov r2, #1 + ldrb r0, [r1, #0xa] + cmp r0, #0 + mov r0, #0 + beq _02003A7C + strb r0, [r1, #0xa] + strb r2, [r1, #7] + bl sub_02079888 + b _02003A90 +_02003A7C: + strb r2, [r1, #9] + bl sub_02079888 + ldr r0, _02003AAC ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #9] +_02003A90: + ldr r1, _02003AAC ; =_020AEF7C + add r0, sp, #0 + ldrb r4, [r1] + bl sub_0200265C + mov r0, r4 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02003AAC: .word _020AEF7C + arm_func_end sub_02003A40 + + arm_func_start sub_02003AB0 +sub_02003AB0: ; 0x02003AB0 + stmdb sp!, {r3, lr} + ldr r0, _02003AC8 ; =_020AF050 + bl sub_02002A44 + ldr r0, _02003ACC ; =_020AEF7C + ldr r0, [r0, #0x28] + ldmia sp!, {r3, pc} + .align 2, 0 +_02003AC8: .word _020AF050 +_02003ACC: .word _020AEF7C + arm_func_end sub_02003AB0 + + arm_func_start sub_02003AD0 +sub_02003AD0: ; 0x02003AD0 + stmdb sp!, {r3, lr} + ldr r0, _02003B50 ; =_020AEF7C + ldrb r0, [r0, #5] + cmp r0, #0 + ldmneia sp!, {r3, pc} + bl sub_02002580 + mov r1, #1 + bl sub_020027F8 + bl sub_02002580 + bl sub_02002860 + cmp r0, #0 + beq _02003B10 + ldr r0, _02003B54 ; =_020AF050 + bl sub_02002A44 + ldr r0, _02003B50 ; =_020AEF7C + ldr r0, [r0, #0x28] +_02003B10: + ldr r0, _02003B50 ; =_020AEF7C + mov r2, #1 + strb r2, [r0, #5] + ldrb r1, [r0, #0xf] + cmp r1, #0 + bne _02003B30 + strb r2, [r0, #0xf] + bl sub_020081C8 +_02003B30: + bl DisableAllInterrupts + ldr r0, _02003B58 ; =_0229B220 + bl sub_0207B584 + mov r0, #1 + mov r1, #0 + bl sub_02078A98 + bl EnableAllInterrupts + ldmia sp!, {r3, pc} + .align 2, 0 +_02003B50: .word _020AEF7C +_02003B54: .word _020AF050 +_02003B58: .word _0229B220 + arm_func_end sub_02003AD0 + + arm_func_start sub_02003B5C +sub_02003B5C: ; 0x02003B5C + ldr r0, _02003B8C ; =_020AEF7C + mov r1, #1 + ldrb r0, [r0, #0xb] + cmp r0, #0 + bne _02003B84 + ldr r0, _02003B90 ; =0x027FFFA8 + ldrh r0, [r0] + and r0, r0, #0x8000 + movs r0, r0, asr #0xf + moveq r1, #0 +_02003B84: + and r0, r1, #0xff + bx lr + .align 2, 0 +_02003B8C: .word _020AEF7C +_02003B90: .word 0x027FFFA8 + arm_func_end sub_02003B5C + + arm_func_start sub_02003B94 +sub_02003B94: ; 0x02003B94 + ldr r0, _02003BA8 ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #1] + strb r1, [r0, #8] + bx lr + .align 2, 0 +_02003BA8: .word _020AEF7C + arm_func_end sub_02003B94 + + arm_func_start sub_02003BAC +sub_02003BAC: ; 0x02003BAC + ldr r0, _02003BC4 ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #1] + mov r1, #1 + strb r1, [r0, #8] + bx lr + .align 2, 0 +_02003BC4: .word _020AEF7C + arm_func_end sub_02003BAC + + arm_func_start sub_02003BC8 +sub_02003BC8: ; 0x02003BC8 + stmdb sp!, {r3, lr} + bl SoundResume + ldr r0, _02003BE8 ; =_020AEF7C + mov r1, #1 + strb r1, [r0, #1] + mov r1, #0 + strb r1, [r0, #8] + ldmia sp!, {r3, pc} + .align 2, 0 +_02003BE8: .word _020AEF7C + arm_func_end sub_02003BC8 + + arm_func_start sub_02003BEC +sub_02003BEC: ; 0x02003BEC + ldr r0, _02003BF8 ; =_020AEF7C + ldrb r0, [r0, #1] + bx lr + .align 2, 0 +_02003BF8: .word _020AEF7C + arm_func_end sub_02003BEC + + arm_func_start sub_02003BFC +sub_02003BFC: ; 0x02003BFC + stmdb sp!, {r3, lr} + ldr r0, _02003CB4 ; =_020AEF7C + ldrb r1, [r0, #1] + cmp r1, #0 + bne _02003CAC + ldrb r0, [r0, #4] + cmp r0, #0 + beq _02003C5C + bl sub_02003B5C + cmp r0, #0 + bne _02003C54 + ldr r0, _02003CB8 ; =_020924E8 + bl Debug_Print0 + ldr r0, _02003CBC ; =_0229B21C + ldrh r0, [r0, #2] + bl PlayBgmById + ldr r0, _02003CBC ; =_0229B21C + ldrh r0, [r0] + bl sub_02018024 + ldr r0, _02003CB4 ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #4] +_02003C54: + mov r0, #1 + ldmia sp!, {r3, pc} +_02003C5C: + bl sub_02003B5C + cmp r0, #0 + beq _02003CAC + ldr r0, _02003CC0 ; =_020924F8 + bl Debug_Print0 + bl sub_02017DB4 + ldr r1, _02003CBC ; =_0229B21C + strh r0, [r1, #2] + bl sub_02017FF0 + ldr r1, _02003CBC ; =_0229B21C + strh r0, [r1] + bl StopBgmCommand + bl sub_02018118 + bl sub_02018278 + mov r0, #0x3f00 + bl sub_02018428 + ldr r1, _02003CB4 ; =_020AEF7C + mov r0, #1 + strb r0, [r1, #4] + ldmia sp!, {r3, pc} +_02003CAC: + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02003CB4: .word _020AEF7C +_02003CB8: .word _020924E8 +_02003CBC: .word _0229B21C +_02003CC0: .word _020924F8 + arm_func_end sub_02003BFC + + arm_func_start SoundResume +SoundResume: ; 0x02003CC4 + stmdb sp!, {r3, lr} + ldr r0, _02003D20 ; =_020AEF7C + ldrb r1, [r0, #1] + cmp r1, #0 + bne _02003D18 + ldrb r0, [r0, #4] + cmp r0, #0 + beq _02003D18 + ldr r0, _02003D24 ; =_020924E8 + bl Debug_Print0 + ldr r0, _02003D28 ; =_0229B21C + ldrh r0, [r0, #2] + bl PlayBgmById + ldr r0, _02003D28 ; =_0229B21C + ldrh r0, [r0] + bl sub_02018024 + ldr r0, _02003D20 ; =_020AEF7C + mov r1, #0 + strb r1, [r0, #4] + mov r0, #1 + ldmia sp!, {r3, pc} +_02003D18: + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02003D20: .word _020AEF7C +_02003D24: .word _020924E8 +_02003D28: .word _0229B21C + arm_func_end SoundResume diff --git a/include/main_0200383C.h b/include/main_0200383C.h new file mode 100644 index 00000000..1e1cb52e --- /dev/null +++ b/include/main_0200383C.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0200383C_H +#define PMDSKY_MAIN_0200383C_H + +void sub_0200383C(s32 arg); + +#endif //PMDSKY_MAIN_0200383C_H diff --git a/main.lsf b/main.lsf index 3c35bfe6..71f982f1 100644 --- a/main.lsf +++ b/main.lsf @@ -13,6 +13,8 @@ Static main Object asm/main_02000DE0.o Object src/main_0200330C.o Object asm/main_02003328.o + Object src/main_0200383C.o + Object asm/main_020038D8.o Object src/main_02003D2C.o Object asm/main_02003DB8.o Object src/main_02008210.o diff --git a/src/main_0200383C.c b/src/main_0200383C.c new file mode 100644 index 00000000..fb777253 --- /dev/null +++ b/src/main_0200383C.c @@ -0,0 +1,44 @@ +#include "main_0200383C.h" + +extern vu8 _020AEF7C[]; +extern void *_020AF028; +extern void *_020AF000; + +extern void sub_02002628(void*, u32); +extern void sub_02002670(); +extern void sub_020026B8(); +extern void sub_020029A0(void*); +extern void sub_02002A44(void*); +extern void sub_0200265C(void*); + +void sub_0200383C(s32 arg) +{ + u32 temp[2]; // allocate 8 bytes on stack + s32 r5 = arg; + + sub_02002628((void *)temp, 0xB); + sub_02002670(); + + vu8 *state = _020AEF7C; + state[2] = 1; + + u32 r4 = *((vu32 *)(state + 0x10)); + *((vu32 *)(state + 0x10)) = (u32)r5; + + sub_020026B8(); + + if (r5 == 0) { + if (r4 != 0) { + _020AEF7C[3] = 0; + sub_020029A0(&_020AF028); + } + } else { + if (r4 == 0) { + _020AEF7C[0] = 1; + sub_020029A0(&_020AF028); + sub_02002A44(&_020AF000); + } + } + + sub_0200265C((void *)temp); +}