From a3a353a83f54cd30ff0adbc5ea486020e780534e Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Sun, 26 Apr 2026 23:30:17 -0400 Subject: [PATCH] Decomped sub_0200B330 Decomped by @JesusArcasCarrera --- asm/include/main_0200A124.inc | 31 +- asm/include/main_0200B33C.inc | 39 ++ asm/main_0200A124.s | 780 +--------------------------------- asm/main_0200B33C.s | 775 +++++++++++++++++++++++++++++++++ include/main_0200B330.h | 12 + main.lsf | 2 + src/main_0200B330.c | 6 + 7 files changed, 836 insertions(+), 809 deletions(-) create mode 100644 asm/include/main_0200B33C.inc create mode 100644 asm/main_0200B33C.s create mode 100644 include/main_0200B330.h create mode 100644 src/main_0200B330.c diff --git a/asm/include/main_0200A124.inc b/asm/include/main_0200A124.inc index 9b09c116..1ce6f39b 100644 --- a/asm/include/main_0200A124.inc +++ b/asm/include/main_0200A124.inc @@ -1,49 +1,20 @@ #pragma once -.public ArrayFill32Fast -.public CART_REMOVED_IMG_DATA .public DC_FlushRange -.public DecompressAtFromMemoryPointer .public GXS_BeginLoadBGExtPltt .public GXS_BeginLoadOBJExtPltt .public GXS_EndLoadBGExtPltt .public GXS_EndLoadOBJExtPltt -.public GXS_SetGraphicsMode .public GX_BeginLoadBGExtPltt .public GX_BeginLoadOBJExtPltt -.public GX_DisableBankForBG -.public GX_DisableBankForBGExtPltt -.public GX_DisableBankForOBJ -.public GX_DisableBankForOBJExtPltt -.public GX_DisableBankForSubBG -.public GX_DisableBankForSubBGExtPltt -.public GX_DisableBankForSubOBJ -.public GX_DisableBankForTex -.public GX_DisableBankForTexPltt -.public GX_DispOff -.public GX_DispOn .public GX_EndLoadBGExtPltt .public GX_EndLoadOBJExtPltt -.public GX_SetBankForLCDC -.public GX_SetGraphicsMode -.public GXx_SetMasterBrightness_ -.public GetLanguage -.public LoadFileFromRom -.public MI_StopDma .public MemAlloc .public MemFree .public Memcpy32 -.public MemcpySimple .public Rgb8ToRgb5 -.public UnloadFile .public _0200A314 .public _0200A344 .public _02092AD8 -.public _02094AE8 -.public _02094AF0 -.public _020AFF38_EU -.public _020AFF3C_EU .public _s32_div_f .public sub_02004FF8 -.public sub_02005D30 -.public sub_02005E10 -.public sub_02019304 +.public sub_0200B3D4 diff --git a/asm/include/main_0200B33C.inc b/asm/include/main_0200B33C.inc new file mode 100644 index 00000000..5c94d947 --- /dev/null +++ b/asm/include/main_0200B33C.inc @@ -0,0 +1,39 @@ +#pragma once +.public ArrayFill32Fast +.public CART_REMOVED_IMG_DATA +.public DC_FlushRange +.public DecompressAtFromMemoryPointer +.public GXS_SetGraphicsMode +.public GX_DisableBankForBG +.public GX_DisableBankForBGExtPltt +.public GX_DisableBankForOBJ +.public GX_DisableBankForOBJExtPltt +.public GX_DisableBankForSubBG +.public GX_DisableBankForSubBGExtPltt +.public GX_DisableBankForSubOBJ +.public GX_DisableBankForTex +.public GX_DisableBankForTexPltt +.public GX_DispOff +.public GX_DispOn +.public GX_SetBankForLCDC +.public GX_SetGraphicsMode +.public GXx_SetMasterBrightness_ +.public GetLanguage +.public LoadFileFromRom +.public MI_StopDma +.public MemAlloc +.public Memcpy32 +.public MemcpySimple +.public UnloadFile +.public _0200A314 +.public _0200A344 +.public _02094AE8 +.public _02094AF0 +.public _020AFF38_EU +.public _020AFF3C_EU +.public _s32_div_f +.public sub_02005D30 +.public sub_02005E10 +.public sub_0200A2CC +.public sub_0200A2F4 +.public sub_02019304 diff --git a/asm/main_0200A124.s b/asm/main_0200A124.s index bf5d4cbf..976e49f2 100644 --- a/asm/main_0200A124.s +++ b/asm/main_0200A124.s @@ -177,7 +177,6 @@ _0200A2F8: movne r0, r2 bne _0200A2F8 bx lr - arm_func_end sub_0200A2F4 _0200A314: ldr r2, [r0, #0x24] cmp r2, #0 @@ -207,6 +206,7 @@ _0200A344: str r0, [r1, #0x20] str r0, [r1, #0x24] bx lr + arm_func_end sub_0200A2F4 arm_func_start sub_0200A37C sub_0200A37C: ; 0x0200A37C @@ -1413,781 +1413,3 @@ sub_0200B314: ; 0x0200B314 str r0, [r4, #0x18] ldmia sp!, {r4, pc} arm_func_end sub_0200B314 - - arm_func_start sub_0200B330 -sub_0200B330: ; 0x0200B330 - mov r1, #1 - strb r1, [r0, #1] - bx lr - arm_func_end sub_0200B330 - - arm_func_start sub_0200B33C -sub_0200B33C: ; 0x0200B33C - bx lr - arm_func_end sub_0200B33C - - arm_func_start sub_0200B340 -sub_0200B340: ; 0x0200B340 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r4, r0 - ldr r0, _0200B3BC ; =0x000001FF - ldmib r4, {r1, r2} - and r1, r1, r0 - mov r2, r2, lsl #0x17 - ldr r0, [r4, #0xc] - orr r1, r1, r2, lsr #7 - str r1, [r0] - ldrb r0, [r4, #1] - cmp r0, #0 - beq _0200B3B4 - ldr r5, [r4, #0x18] - ldr r1, [r4, #0x14] - mov r0, r5 - ldr r6, [r4, #0x10] - bl DC_FlushRange - ldr ip, [r4, #0x14] - mov r2, r6 - mov r3, r5 - mov r0, #3 - mov r1, #1 - str ip, [sp] - bl sub_02005E10 - mov r0, #3 - bl sub_02005D30 - mov r0, #0 - strb r0, [r4, #1] -_0200B3B4: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_0200B3BC: .word 0x000001FF - arm_func_end sub_0200B340 - - arm_func_start sub_0200B3C0 -sub_0200B3C0: ; 0x0200B3C0 - ldr r2, [r1] - ldr r1, [r1, #4] - str r2, [r0, #4] - str r1, [r0, #8] - bx lr - arm_func_end sub_0200B3C0 - - arm_func_start sub_0200B3D4 -sub_0200B3D4: ; 0x0200B3D4 - mov r3, #0 - ldr ip, [r0, #0x18] - mov r2, r3 - b _0200B3EC -_0200B3E4: - strh r2, [ip], #2 - add r3, r3, #1 -_0200B3EC: - ldr r1, [r0, #0x14] - cmp r3, r1, lsr #1 - blo _0200B3E4 - bx lr - arm_func_end sub_0200B3D4 - - arm_func_start sub_0200B3FC -sub_0200B3FC: ; 0x0200B3FC - ldrb r3, [r0] - cmp r3, #3 - addls pc, pc, r3, lsl #2 - bx lr -_0200B40C: ; jump table - b _0200B41C ; case 0 - b _0200B438 ; case 1 - b _0200B470 ; case 2 - b _0200B48C ; case 3 -_0200B41C: - ldr ip, [r0, #0x18] - ldr r0, [r1, #4] - ldr r3, [r1] - add r0, ip, r0, lsl #6 - mov r1, r3, lsl #1 - strh r2, [r1, r0] - bx lr -_0200B438: - ldr ip, [r1] - ldr r3, [r0, #0x18] - cmp ip, #0x20 - ldrlt r0, [r1, #4] - movlt r1, ip, lsl #1 - addlt r0, r3, r0, lsl #6 - strlth r2, [r1, r0] - bxlt lr - ldr r0, [r1, #4] - add r0, r3, r0, lsl #6 - add r0, r0, ip, lsl #1 - add r0, r0, #0x700 - strh r2, [r0, #0xc0] - bx lr -_0200B470: - ldr ip, [r0, #0x18] - ldr r0, [r1, #4] - ldr r3, [r1] - add r0, ip, r0, lsl #6 - mov r1, r3, lsl #1 - strh r2, [r1, r0] - bx lr -_0200B48C: - ldr ip, [r1, #4] - cmp ip, #0x40 - bge _0200B4C4 - ldr r1, [r1] - ldr r0, [r0, #0x18] - cmp r1, #0x20 - movlt r1, r1, lsl #1 - addlt r0, r0, ip, lsl #6 - strlth r2, [r1, r0] - addge r0, r0, ip, lsl #6 - addge r0, r0, r1, lsl #1 - addge r0, r0, #0x700 - strgeh r2, [r0, #0xc0] - bx lr -_0200B4C4: - ldr r3, [r1] - ldr r1, [r0, #0x18] - cmp r3, #0x20 - subge r0, ip, #0x20 - addge r0, r1, r0, lsl #6 - addge r0, r0, r3, lsl #1 - addge r0, r0, #0x1700 - strgeh r2, [r0, #0xc0] - bxge lr - sub r0, ip, #0x20 - add r0, r1, r0, lsl #6 - add r0, r0, r3, lsl #1 - add r0, r0, #0x1000 - strh r2, [r0] - bx lr - arm_func_end sub_0200B3FC - - arm_func_start sub_0200B500 -sub_0200B500: ; 0x0200B500 - ldr r0, [r0, #0x18] - bx lr - arm_func_end sub_0200B500 - - arm_func_start sub_0200B508 -sub_0200B508: ; 0x0200B508 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - str r4, [r5] - str r2, [r5, #4] - mov r0, #0 - strb r0, [r5, #0x14] - str r3, [r5, #0x18] - cmp r2, #0 - strle r0, [r5, #0xc] - ble _0200B550 - ldr r1, [sp, #0x10] - mov r0, r2, lsl #1 - bl MemAlloc - str r0, [r5, #0xc] - ldr r1, [sp, #0x10] - mov r0, r4, lsl #3 - bl MemAlloc -_0200B550: - ldr r1, [sp, #0x10] - str r0, [r5, #0x10] - mov r0, r4, lsl #3 - bl MemAlloc - str r0, [r5, #0x1c] - mov r0, r5 - bl sub_0200B67C - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0200B508 - - arm_func_start sub_0200B570 -sub_0200B570: ; 0x0200B570 - mov r1, #1 - strb r1, [r0, #0x14] - bx lr - arm_func_end sub_0200B570 - - arm_func_start sub_0200B57C -sub_0200B57C: ; 0x0200B57C - stmdb sp!, {r3, r4, r5, lr} - ldr ip, [r0, #8] - cmp ip, #0 - ldmleia sp!, {r3, r4, r5, pc} - ldr r3, [r0] - ldr r2, [r0, #0x1c] - sub r1, r3, #1 - add lr, r2, r1, lsl #3 - sub r3, r3, ip - ldr r4, [r0, #0xc] - mov r2, #0x200 - mov r1, #0 - b _0200B5C4 -_0200B5B0: - strh r2, [lr] - strh r1, [lr, #2] - strh r1, [lr, #4] - sub lr, lr, #8 - sub r3, r3, #1 -_0200B5C4: - cmp r3, #0 - bgt _0200B5B0 - ldr r5, [r0, #4] - mvn r3, #0 - b _0200B61C -_0200B5D8: - ldrsh ip, [r4] - strh r3, [r4], #2 - b _0200B610 -_0200B5E4: - ldr r2, [r0, #0x10] - mov r1, ip, lsl #3 - ldrh r1, [r2, r1] - add r2, r2, ip, lsl #3 - strh r1, [lr] - ldrh r1, [r2, #2] - strh r1, [lr, #2] - ldrh r1, [r2, #4] - strh r1, [lr, #4] - ldrsh ip, [r2, #6] - sub lr, lr, #8 -_0200B610: - cmp ip, #0 - bge _0200B5E4 - sub r5, r5, #1 -_0200B61C: - cmp r5, #0 - bgt _0200B5D8 - mov r1, #0 - str r1, [r0, #8] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0200B57C - - arm_func_start sub_0200B630 -sub_0200B630: ; 0x0200B630 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - ldrb r0, [r6, #0x14] - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - ldr r4, [r6, #0x1c] - ldr r1, [r6] - mov r0, r4 - mov r1, r1, lsl #3 - ldr r5, [r6, #0x18] - bl DC_FlushRange - ldr r2, [r6] - mov r0, r5 - mov r1, r4 - mov r2, r2, lsl #3 - bl Memcpy32 - mov r0, #0 - strb r0, [r6, #0x14] - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_0200B630 - - arm_func_start sub_0200B67C -sub_0200B67C: ; 0x0200B67C - stmdb sp!, {r3, lr} - ldr ip, [r0, #0x1c] - mov lr, #0 - str lr, [r0, #8] - mov r3, #0x200 - mov r2, lr - b _0200B6B0 -_0200B698: - strh r3, [ip] - strh r2, [ip, #2] - strh r2, [ip, #4] - strh r2, [ip, #6] - add ip, ip, #8 - add lr, lr, #1 -_0200B6B0: - ldr r1, [r0] - cmp lr, r1 - blt _0200B698 - ldr r1, [r0, #4] - cmp r1, #0 - ldmleia sp!, {r3, pc} - ldr r3, [r0, #0xc] - mov ip, #0 - mvn r2, #0 - b _0200B6E0 -_0200B6D8: - strh r2, [r3], #2 - add ip, ip, #1 -_0200B6E0: - ldr r1, [r0, #4] - cmp ip, r1 - blt _0200B6D8 - ldmia sp!, {r3, pc} - arm_func_end sub_0200B67C - - arm_func_start sub_0200B6F0 -sub_0200B6F0: ; 0x0200B6F0 - stmdb sp!, {r4, lr} - ldr r4, [r0, #8] - ldr r3, [r0] - cmp r4, r3 - ldmgeia sp!, {r4, pc} - cmp r2, #0 - movlt r2, #0 - blt _0200B71C - ldr r3, [r0, #4] - cmp r2, r3 - subge r2, r3, #1 -_0200B71C: - ldrh r3, [r1] - ldr lr, [r0, #0x10] - mov ip, r4, lsl #3 - strh r3, [lr, ip] - ldrh ip, [r1, #2] - add lr, lr, r4, lsl #3 - mov r3, r2, lsl #1 - strh ip, [lr, #2] - ldrh r1, [r1, #4] - strh r1, [lr, #4] - ldr r1, [r0, #0xc] - ldrsh r1, [r1, r3] - strh r1, [lr, #6] - ldr r2, [r0, #8] - add r1, r2, #1 - str r1, [r0, #8] - ldr r0, [r0, #0xc] - strh r2, [r0, r3] - ldmia sp!, {r4, pc} - arm_func_end sub_0200B6F0 - - arm_func_start sub_0200B768 -sub_0200B768: ; 0x0200B768 -#ifdef EUROPE - stmdb sp!, {r4, lr} - sub sp, sp, #8 - bl GetLanguage - ldr r1, _0200B7E4 ; =_020AFF38_EU - mov r4, r0 - ldrsb r0, [r1] - cmp r0, r4 - beq _0200B7DC - ldr r1, _0200B7E8 ; =_020AFF3C_EU - add r0, sp, #0 - ldr r1, [r1, r4, lsl #2] - mov r2, #1 - bl LoadFileFromRom - ldr r2, _0200B7EC ; =0x04000208 - mov r1, #0 - ldrh r0, [r2] - strh r1, [r2] - ldr r0, _0200B7F0 ; =CART_REMOVED_IMG_DATA - ldr r1, [sp] - ldr r2, [sp, #4] - bl MemcpySimple - ldr r2, _0200B7EC ; =0x04000208 - add r0, sp, #0 - ldrh r1, [r2] - mov r1, #1 - strh r1, [r2] - bl UnloadFile - ldr r0, _0200B7E4 ; =_020AFF38_EU - strb r4, [r0] -_0200B7DC: - add sp, sp, #8 - ldmia sp!, {r4, pc} - .align 2, 0 -_0200B7E4: .word _020AFF38_EU -_0200B7E8: .word _020AFF3C_EU -_0200B7EC: .word 0x04000208 -_0200B7F0: .word CART_REMOVED_IMG_DATA -#else - bx lr -#endif - arm_func_end sub_0200B768 - - arm_func_start sub_0200B76C -sub_0200B76C: ; 0x0200B76C - stmdb sp!, {r4, lr} - bl GX_DispOff - ldr r2, _0200B874 ; =0x04001000 - mov r0, #3 - ldr r1, [r2] - bic r1, r1, #0x10000 - str r1, [r2] - bl MI_StopDma - bl GX_DisableBankForBG - bl GX_DisableBankForOBJ - bl GX_DisableBankForBGExtPltt - bl GX_DisableBankForOBJExtPltt - bl GX_DisableBankForTex - bl GX_DisableBankForTexPltt - bl GX_DisableBankForSubBG - bl GX_DisableBankForSubOBJ - bl GX_DisableBankForSubBGExtPltt - ldr r0, _0200B878 ; =0x000001FF - bl GX_SetBankForLCDC - mov r0, #0 - mov r1, #0x6800000 - mov r2, #0xa4000 - bl ArrayFill32Fast - mov r0, #0xc0 - mov r1, #0x7000000 - mov r2, #0x400 - bl ArrayFill32Fast - mov r0, #0 - mov r1, #0x5000000 - mov r2, #0x400 - bl ArrayFill32Fast - mov r0, #0xc0 - ldr r1, _0200B87C ; =0x07000400 - mov r2, #0x400 - bl ArrayFill32Fast - mov r0, #0 - ldr r1, _0200B880 ; =0x05000400 - mov r2, #0x400 - bl ArrayFill32Fast - bl sub_02019304 - mov r4, r0 - ldr r1, _0200B884 ; =CART_REMOVED_IMG_DATA - mov r2, #0xc000 - bl MemcpySimple - mov r2, r4 - ldr r0, _0200B888 ; =0x06806000 - mov r1, #0xc000 - bl DecompressAtFromMemoryPointer - mov r0, #2 - mov r1, #0 - mov r2, r1 - bl GX_SetGraphicsMode - mov r0, #0 - bl GXS_SetGraphicsMode - ldr r0, _0200B88C ; =0x0400006C - mov r1, #0 - bl GXx_SetMasterBrightness_ - ldr r0, _0200B890 ; =0x0400106C - mov r1, #0 - bl GXx_SetMasterBrightness_ - bl GX_DispOn - ldr r1, _0200B874 ; =0x04001000 - ldr r0, [r1] - orr r0, r0, #0x10000 - str r0, [r1] - ldmia sp!, {r4, pc} - .align 2, 0 -_0200B874: .word 0x04001000 -_0200B878: .word 0x000001FF -_0200B87C: .word 0x07000400 -_0200B880: .word 0x05000400 -_0200B884: .word CART_REMOVED_IMG_DATA -_0200B888: .word 0x06806000 -_0200B88C: .word 0x0400006C -_0200B890: .word 0x0400106C - arm_func_end sub_0200B76C - - arm_func_start sub_0200B894 -sub_0200B894: ; 0x0200B894 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - add r0, r5, #0x1c - bl sub_0200A2CC - mov r0, r5 - mov r1, r4 - bl sub_0200B8D4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0200B894 - - arm_func_start sub_0200B8B8 -sub_0200B8B8: ; 0x0200B8B8 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r1, #0 - bl sub_0200B8D4 - add r0, r4, #0x1c - bl sub_0200A2F4 - ldmia sp!, {r4, pc} - arm_func_end sub_0200B8B8 - - arm_func_start sub_0200B8D4 -sub_0200B8D4: ; 0x0200B8D4 - ldr r2, _0200B904 ; =_02094AE8 - mov r1, r1, lsl #1 - mov r3, #0 - ldrsh r1, [r2, r1] - str r3, [r0] - mov r2, #1 - str r2, [r0, #4] - strh r1, [r0, #0x10] - strh r1, [r0, #0x14] - str r3, [r0, #8] - str r3, [r0, #0xc] - bx lr - .align 2, 0 -_0200B904: .word _02094AE8 - arm_func_end sub_0200B8D4 - - arm_func_start sub_0200B908 -sub_0200B908: ; 0x0200B908 - ldr ip, _0200B914 ; =_0200A314 - add r0, r0, #0x1c - bx ip - .align 2, 0 -_0200B914: .word _0200A314 - arm_func_end sub_0200B908 - - arm_func_start sub_0200B918 -sub_0200B918: ; 0x0200B918 - ldr ip, _0200B924 ; =_0200A344 - add r0, r0, #0x1c - bx ip - .align 2, 0 -_0200B924: .word _0200A344 - arm_func_end sub_0200B918 - - arm_func_start sub_0200B928 -sub_0200B928: ; 0x0200B928 - mov r2, #0 - strh r2, [r0, #0x10] - cmp r1, #0 - ldrnesh r2, [r0, #0x14] - cmpne r2, #0 - bne _0200B958 - mov r2, #0 - strh r2, [r0, #0x14] - mov r1, #1 - stmib r0, {r1, r2} - str r2, [r0, #0xc] - bx lr -_0200B958: - cmp r1, #0 - movlt r1, #0x1e - cmp r2, #0 - movlt r2, #2 - strlt r2, [r0, #4] - ldrltsh r2, [r0, #0x14] - rsblt r2, r2, #0 - movge r2, #3 - strge r2, [r0, #4] - ldrgesh r2, [r0, #0x14] - strh r2, [r0, #0x12] - str r1, [r0, #8] - str r1, [r0, #0xc] - bx lr - arm_func_end sub_0200B928 - - arm_func_start UpdateFadeStatus -UpdateFadeStatus: ; 0x0200B990 - ldr r3, _0200BA00 ; =_02094AE8 - mov ip, r1, lsl #1 - ldrsh r3, [r3, ip] - cmp r2, #0 - strh r3, [r0, #0x10] - ldrnesh r3, [r0, #0x10] - ldrnesh ip, [r0, #0x14] - cmpne ip, r3 - bne _0200B9D4 - ldrsh r3, [r0, #0x10] - mov r2, #1 - mov r1, #0 - strh r3, [r0, #0x14] - str r2, [r0, #4] - str r1, [r0, #8] - str r1, [r0, #0xc] - bx lr -_0200B9D4: - cmp r2, #0 - movlt r2, #0x1e - cmp r3, #0 - sublt r3, ip, r3 - subge r3, r3, ip - strh r3, [r0, #0x12] - ldr r3, _0200BA04 ; =_02094AF0 - ldr r1, [r3, r1, lsl #2] - stmib r0, {r1, r2} - str r2, [r0, #0xc] - bx lr - .align 2, 0 -_0200BA00: .word _02094AE8 -_0200BA04: .word _02094AF0 - arm_func_end UpdateFadeStatus - - arm_func_start HandleFades -HandleFades: ; 0x0200BA08 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, [r4, #4] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0200BB58 -_0200BA20: ; jump table - b _0200BB50 ; case 0 - b _0200BB40 ; case 1 - b _0200BA38 ; case 2 - b _0200BA80 ; case 3 - b _0200BAC8 ; case 4 - b _0200BB04 ; case 5 -_0200BA38: - ldr r0, [r4, #8] - sub r2, r0, #1 - str r2, [r4, #8] - cmp r2, #0 - ldrlesh r1, [r4, #0x10] - movle r0, #0 - strleh r1, [r4, #0x14] - strle r0, [r4, #4] - ble _0200BA78 - ldrsh r0, [r4, #0x12] - ldr r1, [r4, #0xc] - mul r0, r2, r0 - bl _s32_div_f - ldrsh r1, [r4, #0x10] - sub r0, r1, r0 - strh r0, [r4, #0x14] -_0200BA78: - mov r0, #1 - ldmia sp!, {r4, pc} -_0200BA80: - ldr r0, [r4, #8] - sub r2, r0, #1 - str r2, [r4, #8] - cmp r2, #0 - ldrlesh r1, [r4, #0x10] - movle r0, #0 - strleh r1, [r4, #0x14] - strle r0, [r4, #4] - ble _0200BAC0 - ldrsh r0, [r4, #0x12] - ldr r1, [r4, #0xc] - mul r0, r2, r0 - bl _s32_div_f - ldrsh r1, [r4, #0x10] - add r0, r1, r0 - strh r0, [r4, #0x14] -_0200BAC0: - mov r0, #1 - ldmia sp!, {r4, pc} -_0200BAC8: - ldr r0, [r4, #8] - sub r2, r0, #1 - str r2, [r4, #8] - cmp r2, #0 - ldrlesh r0, [r4, #0x10] - ble _0200BAF8 - ldrsh r0, [r4, #0x12] - ldr r1, [r4, #0xc] - mul r0, r2, r0 - bl _s32_div_f - ldrsh r1, [r4, #0x10] - sub r0, r1, r0 -_0200BAF8: - strh r0, [r4, #0x14] - mov r0, #1 - ldmia sp!, {r4, pc} -_0200BB04: - ldr r0, [r4, #8] - sub r2, r0, #1 - str r2, [r4, #8] - cmp r2, #0 - ldrlesh r0, [r4, #0x10] - ble _0200BB34 - ldrsh r0, [r4, #0x12] - ldr r1, [r4, #0xc] - mul r0, r2, r0 - bl _s32_div_f - ldrsh r1, [r4, #0x10] - add r0, r1, r0 -_0200BB34: - strh r0, [r4, #0x14] - mov r0, #1 - ldmia sp!, {r4, pc} -_0200BB40: - mov r0, #0 - str r0, [r4, #4] - mov r0, #1 - ldmia sp!, {r4, pc} -_0200BB50: - mov r0, #0 - ldmia sp!, {r4, pc} -_0200BB58: - mov r0, #0 - ldmia sp!, {r4, pc} - arm_func_end HandleFades - - arm_func_start sub_0200BB60 -sub_0200BB60: ; 0x0200BB60 - ldr ip, _0200BB70 ; =sub_0200B928 - mov r2, #1 - str r2, [r0] - bx ip - .align 2, 0 -_0200BB70: .word sub_0200B928 - arm_func_end sub_0200BB60 - - arm_func_start sub_0200BB74 -sub_0200BB74: ; 0x0200BB74 - ldr ip, _0200BB84 ; =UpdateFadeStatus - mov r3, #1 - str r3, [r0] - bx ip - .align 2, 0 -_0200BB84: .word UpdateFadeStatus - arm_func_end sub_0200BB74 - - arm_func_start sub_0200BB88 -sub_0200BB88: ; 0x0200BB88 - mov r2, #1 - str r2, [r0] - mov r2, #0 - strh r2, [r0, #0x10] - cmp r1, #0 - ldrnesh r2, [r0, #0x14] - cmpne r2, #0 - bne _0200BBC0 - mov r2, #0 - strh r2, [r0, #0x14] - mov r1, #1 - stmib r0, {r1, r2} - str r2, [r0, #0xc] - bx lr -_0200BBC0: - cmp r1, #0 - movlt r1, #0x1e - cmp r2, #0 - movlt r2, #4 - strlt r2, [r0, #4] - ldrltsh r2, [r0, #0x14] - rsblt r2, r2, #0 - movge r2, #5 - strge r2, [r0, #4] - ldrgesh r2, [r0, #0x14] - strh r2, [r0, #0x12] - str r1, [r0, #8] - str r1, [r0, #0xc] - bx lr - arm_func_end sub_0200BB88 - - arm_func_start sub_0200BBF8 -sub_0200BBF8: ; 0x0200BBF8 - mov ip, #1 - cmp r1, #0 - movlt r1, #0x1e - str ip, [r0] - cmp r2, r3 - movgt ip, #3 - strgt ip, [r0, #4] - subgt ip, r2, r3 - strgth ip, [r0, #0x12] - bgt _0200BC40 - movlt ip, #2 - strlt ip, [r0, #4] - sublt ip, r3, r2 - strlth ip, [r0, #0x12] - movge ip, #1 - strge ip, [r0, #4] - movge ip, #0 - strgeh ip, [r0, #0x12] -_0200BC40: - str r1, [r0, #8] - str r1, [r0, #0xc] - strh r2, [r0, #0x14] - strh r3, [r0, #0x10] - bx lr - arm_func_end sub_0200BBF8 diff --git a/asm/main_0200B33C.s b/asm/main_0200B33C.s new file mode 100644 index 00000000..80038157 --- /dev/null +++ b/asm/main_0200B33C.s @@ -0,0 +1,775 @@ + .include "asm/macros.inc" + .include "main_0200B33C.inc" + + .text + + arm_func_start sub_0200B33C +sub_0200B33C: ; 0x0200B33C + bx lr + arm_func_end sub_0200B33C + + arm_func_start sub_0200B340 +sub_0200B340: ; 0x0200B340 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r4, r0 + ldr r0, _0200B3BC ; =0x000001FF + ldmib r4, {r1, r2} + and r1, r1, r0 + mov r2, r2, lsl #0x17 + ldr r0, [r4, #0xc] + orr r1, r1, r2, lsr #7 + str r1, [r0] + ldrb r0, [r4, #1] + cmp r0, #0 + beq _0200B3B4 + ldr r5, [r4, #0x18] + ldr r1, [r4, #0x14] + mov r0, r5 + ldr r6, [r4, #0x10] + bl DC_FlushRange + ldr ip, [r4, #0x14] + mov r2, r6 + mov r3, r5 + mov r0, #3 + mov r1, #1 + str ip, [sp] + bl sub_02005E10 + mov r0, #3 + bl sub_02005D30 + mov r0, #0 + strb r0, [r4, #1] +_0200B3B4: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_0200B3BC: .word 0x000001FF + arm_func_end sub_0200B340 + + arm_func_start sub_0200B3C0 +sub_0200B3C0: ; 0x0200B3C0 + ldr r2, [r1] + ldr r1, [r1, #4] + str r2, [r0, #4] + str r1, [r0, #8] + bx lr + arm_func_end sub_0200B3C0 + + arm_func_start sub_0200B3D4 +sub_0200B3D4: ; 0x0200B3D4 + mov r3, #0 + ldr ip, [r0, #0x18] + mov r2, r3 + b _0200B3EC +_0200B3E4: + strh r2, [ip], #2 + add r3, r3, #1 +_0200B3EC: + ldr r1, [r0, #0x14] + cmp r3, r1, lsr #1 + blo _0200B3E4 + bx lr + arm_func_end sub_0200B3D4 + + arm_func_start sub_0200B3FC +sub_0200B3FC: ; 0x0200B3FC + ldrb r3, [r0] + cmp r3, #3 + addls pc, pc, r3, lsl #2 + bx lr +_0200B40C: ; jump table + b _0200B41C ; case 0 + b _0200B438 ; case 1 + b _0200B470 ; case 2 + b _0200B48C ; case 3 +_0200B41C: + ldr ip, [r0, #0x18] + ldr r0, [r1, #4] + ldr r3, [r1] + add r0, ip, r0, lsl #6 + mov r1, r3, lsl #1 + strh r2, [r1, r0] + bx lr +_0200B438: + ldr ip, [r1] + ldr r3, [r0, #0x18] + cmp ip, #0x20 + ldrlt r0, [r1, #4] + movlt r1, ip, lsl #1 + addlt r0, r3, r0, lsl #6 + strlth r2, [r1, r0] + bxlt lr + ldr r0, [r1, #4] + add r0, r3, r0, lsl #6 + add r0, r0, ip, lsl #1 + add r0, r0, #0x700 + strh r2, [r0, #0xc0] + bx lr +_0200B470: + ldr ip, [r0, #0x18] + ldr r0, [r1, #4] + ldr r3, [r1] + add r0, ip, r0, lsl #6 + mov r1, r3, lsl #1 + strh r2, [r1, r0] + bx lr +_0200B48C: + ldr ip, [r1, #4] + cmp ip, #0x40 + bge _0200B4C4 + ldr r1, [r1] + ldr r0, [r0, #0x18] + cmp r1, #0x20 + movlt r1, r1, lsl #1 + addlt r0, r0, ip, lsl #6 + strlth r2, [r1, r0] + addge r0, r0, ip, lsl #6 + addge r0, r0, r1, lsl #1 + addge r0, r0, #0x700 + strgeh r2, [r0, #0xc0] + bx lr +_0200B4C4: + ldr r3, [r1] + ldr r1, [r0, #0x18] + cmp r3, #0x20 + subge r0, ip, #0x20 + addge r0, r1, r0, lsl #6 + addge r0, r0, r3, lsl #1 + addge r0, r0, #0x1700 + strgeh r2, [r0, #0xc0] + bxge lr + sub r0, ip, #0x20 + add r0, r1, r0, lsl #6 + add r0, r0, r3, lsl #1 + add r0, r0, #0x1000 + strh r2, [r0] + bx lr + arm_func_end sub_0200B3FC + + arm_func_start sub_0200B500 +sub_0200B500: ; 0x0200B500 + ldr r0, [r0, #0x18] + bx lr + arm_func_end sub_0200B500 + + arm_func_start sub_0200B508 +sub_0200B508: ; 0x0200B508 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + str r4, [r5] + str r2, [r5, #4] + mov r0, #0 + strb r0, [r5, #0x14] + str r3, [r5, #0x18] + cmp r2, #0 + strle r0, [r5, #0xc] + ble _0200B550 + ldr r1, [sp, #0x10] + mov r0, r2, lsl #1 + bl MemAlloc + str r0, [r5, #0xc] + ldr r1, [sp, #0x10] + mov r0, r4, lsl #3 + bl MemAlloc +_0200B550: + ldr r1, [sp, #0x10] + str r0, [r5, #0x10] + mov r0, r4, lsl #3 + bl MemAlloc + str r0, [r5, #0x1c] + mov r0, r5 + bl sub_0200B67C + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0200B508 + + arm_func_start sub_0200B570 +sub_0200B570: ; 0x0200B570 + mov r1, #1 + strb r1, [r0, #0x14] + bx lr + arm_func_end sub_0200B570 + + arm_func_start sub_0200B57C +sub_0200B57C: ; 0x0200B57C + stmdb sp!, {r3, r4, r5, lr} + ldr ip, [r0, #8] + cmp ip, #0 + ldmleia sp!, {r3, r4, r5, pc} + ldr r3, [r0] + ldr r2, [r0, #0x1c] + sub r1, r3, #1 + add lr, r2, r1, lsl #3 + sub r3, r3, ip + ldr r4, [r0, #0xc] + mov r2, #0x200 + mov r1, #0 + b _0200B5C4 +_0200B5B0: + strh r2, [lr] + strh r1, [lr, #2] + strh r1, [lr, #4] + sub lr, lr, #8 + sub r3, r3, #1 +_0200B5C4: + cmp r3, #0 + bgt _0200B5B0 + ldr r5, [r0, #4] + mvn r3, #0 + b _0200B61C +_0200B5D8: + ldrsh ip, [r4] + strh r3, [r4], #2 + b _0200B610 +_0200B5E4: + ldr r2, [r0, #0x10] + mov r1, ip, lsl #3 + ldrh r1, [r2, r1] + add r2, r2, ip, lsl #3 + strh r1, [lr] + ldrh r1, [r2, #2] + strh r1, [lr, #2] + ldrh r1, [r2, #4] + strh r1, [lr, #4] + ldrsh ip, [r2, #6] + sub lr, lr, #8 +_0200B610: + cmp ip, #0 + bge _0200B5E4 + sub r5, r5, #1 +_0200B61C: + cmp r5, #0 + bgt _0200B5D8 + mov r1, #0 + str r1, [r0, #8] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0200B57C + + arm_func_start sub_0200B630 +sub_0200B630: ; 0x0200B630 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldrb r0, [r6, #0x14] + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r4, [r6, #0x1c] + ldr r1, [r6] + mov r0, r4 + mov r1, r1, lsl #3 + ldr r5, [r6, #0x18] + bl DC_FlushRange + ldr r2, [r6] + mov r0, r5 + mov r1, r4 + mov r2, r2, lsl #3 + bl Memcpy32 + mov r0, #0 + strb r0, [r6, #0x14] + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_0200B630 + + arm_func_start sub_0200B67C +sub_0200B67C: ; 0x0200B67C + stmdb sp!, {r3, lr} + ldr ip, [r0, #0x1c] + mov lr, #0 + str lr, [r0, #8] + mov r3, #0x200 + mov r2, lr + b _0200B6B0 +_0200B698: + strh r3, [ip] + strh r2, [ip, #2] + strh r2, [ip, #4] + strh r2, [ip, #6] + add ip, ip, #8 + add lr, lr, #1 +_0200B6B0: + ldr r1, [r0] + cmp lr, r1 + blt _0200B698 + ldr r1, [r0, #4] + cmp r1, #0 + ldmleia sp!, {r3, pc} + ldr r3, [r0, #0xc] + mov ip, #0 + mvn r2, #0 + b _0200B6E0 +_0200B6D8: + strh r2, [r3], #2 + add ip, ip, #1 +_0200B6E0: + ldr r1, [r0, #4] + cmp ip, r1 + blt _0200B6D8 + ldmia sp!, {r3, pc} + arm_func_end sub_0200B67C + + arm_func_start sub_0200B6F0 +sub_0200B6F0: ; 0x0200B6F0 + stmdb sp!, {r4, lr} + ldr r4, [r0, #8] + ldr r3, [r0] + cmp r4, r3 + ldmgeia sp!, {r4, pc} + cmp r2, #0 + movlt r2, #0 + blt _0200B71C + ldr r3, [r0, #4] + cmp r2, r3 + subge r2, r3, #1 +_0200B71C: + ldrh r3, [r1] + ldr lr, [r0, #0x10] + mov ip, r4, lsl #3 + strh r3, [lr, ip] + ldrh ip, [r1, #2] + add lr, lr, r4, lsl #3 + mov r3, r2, lsl #1 + strh ip, [lr, #2] + ldrh r1, [r1, #4] + strh r1, [lr, #4] + ldr r1, [r0, #0xc] + ldrsh r1, [r1, r3] + strh r1, [lr, #6] + ldr r2, [r0, #8] + add r1, r2, #1 + str r1, [r0, #8] + ldr r0, [r0, #0xc] + strh r2, [r0, r3] + ldmia sp!, {r4, pc} + arm_func_end sub_0200B6F0 + + arm_func_start sub_0200B768 +sub_0200B768: ; 0x0200B768 +#ifdef EUROPE + stmdb sp!, {r4, lr} + sub sp, sp, #8 + bl GetLanguage + ldr r1, _0200B7E4 ; =_020AFF38_EU + mov r4, r0 + ldrsb r0, [r1] + cmp r0, r4 + beq _0200B7DC + ldr r1, _0200B7E8 ; =_020AFF3C_EU + add r0, sp, #0 + ldr r1, [r1, r4, lsl #2] + mov r2, #1 + bl LoadFileFromRom + ldr r2, _0200B7EC ; =0x04000208 + mov r1, #0 + ldrh r0, [r2] + strh r1, [r2] + ldr r0, _0200B7F0 ; =CART_REMOVED_IMG_DATA + ldr r1, [sp] + ldr r2, [sp, #4] + bl MemcpySimple + ldr r2, _0200B7EC ; =0x04000208 + add r0, sp, #0 + ldrh r1, [r2] + mov r1, #1 + strh r1, [r2] + bl UnloadFile + ldr r0, _0200B7E4 ; =_020AFF38_EU + strb r4, [r0] +_0200B7DC: + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_0200B7E4: .word _020AFF38_EU +_0200B7E8: .word _020AFF3C_EU +_0200B7EC: .word 0x04000208 +_0200B7F0: .word CART_REMOVED_IMG_DATA +#else + bx lr +#endif + arm_func_end sub_0200B768 + + arm_func_start sub_0200B76C +sub_0200B76C: ; 0x0200B76C + stmdb sp!, {r4, lr} + bl GX_DispOff + ldr r2, _0200B874 ; =0x04001000 + mov r0, #3 + ldr r1, [r2] + bic r1, r1, #0x10000 + str r1, [r2] + bl MI_StopDma + bl GX_DisableBankForBG + bl GX_DisableBankForOBJ + bl GX_DisableBankForBGExtPltt + bl GX_DisableBankForOBJExtPltt + bl GX_DisableBankForTex + bl GX_DisableBankForTexPltt + bl GX_DisableBankForSubBG + bl GX_DisableBankForSubOBJ + bl GX_DisableBankForSubBGExtPltt + ldr r0, _0200B878 ; =0x000001FF + bl GX_SetBankForLCDC + mov r0, #0 + mov r1, #0x6800000 + mov r2, #0xa4000 + bl ArrayFill32Fast + mov r0, #0xc0 + mov r1, #0x7000000 + mov r2, #0x400 + bl ArrayFill32Fast + mov r0, #0 + mov r1, #0x5000000 + mov r2, #0x400 + bl ArrayFill32Fast + mov r0, #0xc0 + ldr r1, _0200B87C ; =0x07000400 + mov r2, #0x400 + bl ArrayFill32Fast + mov r0, #0 + ldr r1, _0200B880 ; =0x05000400 + mov r2, #0x400 + bl ArrayFill32Fast + bl sub_02019304 + mov r4, r0 + ldr r1, _0200B884 ; =CART_REMOVED_IMG_DATA + mov r2, #0xc000 + bl MemcpySimple + mov r2, r4 + ldr r0, _0200B888 ; =0x06806000 + mov r1, #0xc000 + bl DecompressAtFromMemoryPointer + mov r0, #2 + mov r1, #0 + mov r2, r1 + bl GX_SetGraphicsMode + mov r0, #0 + bl GXS_SetGraphicsMode + ldr r0, _0200B88C ; =0x0400006C + mov r1, #0 + bl GXx_SetMasterBrightness_ + ldr r0, _0200B890 ; =0x0400106C + mov r1, #0 + bl GXx_SetMasterBrightness_ + bl GX_DispOn + ldr r1, _0200B874 ; =0x04001000 + ldr r0, [r1] + orr r0, r0, #0x10000 + str r0, [r1] + ldmia sp!, {r4, pc} + .align 2, 0 +_0200B874: .word 0x04001000 +_0200B878: .word 0x000001FF +_0200B87C: .word 0x07000400 +_0200B880: .word 0x05000400 +_0200B884: .word CART_REMOVED_IMG_DATA +_0200B888: .word 0x06806000 +_0200B88C: .word 0x0400006C +_0200B890: .word 0x0400106C + arm_func_end sub_0200B76C + + arm_func_start sub_0200B894 +sub_0200B894: ; 0x0200B894 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + add r0, r5, #0x1c + bl sub_0200A2CC + mov r0, r5 + mov r1, r4 + bl sub_0200B8D4 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0200B894 + + arm_func_start sub_0200B8B8 +sub_0200B8B8: ; 0x0200B8B8 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r1, #0 + bl sub_0200B8D4 + add r0, r4, #0x1c + bl sub_0200A2F4 + ldmia sp!, {r4, pc} + arm_func_end sub_0200B8B8 + + arm_func_start sub_0200B8D4 +sub_0200B8D4: ; 0x0200B8D4 + ldr r2, _0200B904 ; =_02094AE8 + mov r1, r1, lsl #1 + mov r3, #0 + ldrsh r1, [r2, r1] + str r3, [r0] + mov r2, #1 + str r2, [r0, #4] + strh r1, [r0, #0x10] + strh r1, [r0, #0x14] + str r3, [r0, #8] + str r3, [r0, #0xc] + bx lr + .align 2, 0 +_0200B904: .word _02094AE8 + arm_func_end sub_0200B8D4 + + arm_func_start sub_0200B908 +sub_0200B908: ; 0x0200B908 + ldr ip, _0200B914 ; =_0200A314 + add r0, r0, #0x1c + bx ip + .align 2, 0 +_0200B914: .word _0200A314 + arm_func_end sub_0200B908 + + arm_func_start sub_0200B918 +sub_0200B918: ; 0x0200B918 + ldr ip, _0200B924 ; =_0200A344 + add r0, r0, #0x1c + bx ip + .align 2, 0 +_0200B924: .word _0200A344 + arm_func_end sub_0200B918 + + arm_func_start sub_0200B928 +sub_0200B928: ; 0x0200B928 + mov r2, #0 + strh r2, [r0, #0x10] + cmp r1, #0 + ldrnesh r2, [r0, #0x14] + cmpne r2, #0 + bne _0200B958 + mov r2, #0 + strh r2, [r0, #0x14] + mov r1, #1 + stmib r0, {r1, r2} + str r2, [r0, #0xc] + bx lr +_0200B958: + cmp r1, #0 + movlt r1, #0x1e + cmp r2, #0 + movlt r2, #2 + strlt r2, [r0, #4] + ldrltsh r2, [r0, #0x14] + rsblt r2, r2, #0 + movge r2, #3 + strge r2, [r0, #4] + ldrgesh r2, [r0, #0x14] + strh r2, [r0, #0x12] + str r1, [r0, #8] + str r1, [r0, #0xc] + bx lr + arm_func_end sub_0200B928 + + arm_func_start UpdateFadeStatus +UpdateFadeStatus: ; 0x0200B990 + ldr r3, _0200BA00 ; =_02094AE8 + mov ip, r1, lsl #1 + ldrsh r3, [r3, ip] + cmp r2, #0 + strh r3, [r0, #0x10] + ldrnesh r3, [r0, #0x10] + ldrnesh ip, [r0, #0x14] + cmpne ip, r3 + bne _0200B9D4 + ldrsh r3, [r0, #0x10] + mov r2, #1 + mov r1, #0 + strh r3, [r0, #0x14] + str r2, [r0, #4] + str r1, [r0, #8] + str r1, [r0, #0xc] + bx lr +_0200B9D4: + cmp r2, #0 + movlt r2, #0x1e + cmp r3, #0 + sublt r3, ip, r3 + subge r3, r3, ip + strh r3, [r0, #0x12] + ldr r3, _0200BA04 ; =_02094AF0 + ldr r1, [r3, r1, lsl #2] + stmib r0, {r1, r2} + str r2, [r0, #0xc] + bx lr + .align 2, 0 +_0200BA00: .word _02094AE8 +_0200BA04: .word _02094AF0 + arm_func_end UpdateFadeStatus + + arm_func_start HandleFades +HandleFades: ; 0x0200BA08 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #4] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _0200BB58 +_0200BA20: ; jump table + b _0200BB50 ; case 0 + b _0200BB40 ; case 1 + b _0200BA38 ; case 2 + b _0200BA80 ; case 3 + b _0200BAC8 ; case 4 + b _0200BB04 ; case 5 +_0200BA38: + ldr r0, [r4, #8] + sub r2, r0, #1 + str r2, [r4, #8] + cmp r2, #0 + ldrlesh r1, [r4, #0x10] + movle r0, #0 + strleh r1, [r4, #0x14] + strle r0, [r4, #4] + ble _0200BA78 + ldrsh r0, [r4, #0x12] + ldr r1, [r4, #0xc] + mul r0, r2, r0 + bl _s32_div_f + ldrsh r1, [r4, #0x10] + sub r0, r1, r0 + strh r0, [r4, #0x14] +_0200BA78: + mov r0, #1 + ldmia sp!, {r4, pc} +_0200BA80: + ldr r0, [r4, #8] + sub r2, r0, #1 + str r2, [r4, #8] + cmp r2, #0 + ldrlesh r1, [r4, #0x10] + movle r0, #0 + strleh r1, [r4, #0x14] + strle r0, [r4, #4] + ble _0200BAC0 + ldrsh r0, [r4, #0x12] + ldr r1, [r4, #0xc] + mul r0, r2, r0 + bl _s32_div_f + ldrsh r1, [r4, #0x10] + add r0, r1, r0 + strh r0, [r4, #0x14] +_0200BAC0: + mov r0, #1 + ldmia sp!, {r4, pc} +_0200BAC8: + ldr r0, [r4, #8] + sub r2, r0, #1 + str r2, [r4, #8] + cmp r2, #0 + ldrlesh r0, [r4, #0x10] + ble _0200BAF8 + ldrsh r0, [r4, #0x12] + ldr r1, [r4, #0xc] + mul r0, r2, r0 + bl _s32_div_f + ldrsh r1, [r4, #0x10] + sub r0, r1, r0 +_0200BAF8: + strh r0, [r4, #0x14] + mov r0, #1 + ldmia sp!, {r4, pc} +_0200BB04: + ldr r0, [r4, #8] + sub r2, r0, #1 + str r2, [r4, #8] + cmp r2, #0 + ldrlesh r0, [r4, #0x10] + ble _0200BB34 + ldrsh r0, [r4, #0x12] + ldr r1, [r4, #0xc] + mul r0, r2, r0 + bl _s32_div_f + ldrsh r1, [r4, #0x10] + add r0, r1, r0 +_0200BB34: + strh r0, [r4, #0x14] + mov r0, #1 + ldmia sp!, {r4, pc} +_0200BB40: + mov r0, #0 + str r0, [r4, #4] + mov r0, #1 + ldmia sp!, {r4, pc} +_0200BB50: + mov r0, #0 + ldmia sp!, {r4, pc} +_0200BB58: + mov r0, #0 + ldmia sp!, {r4, pc} + arm_func_end HandleFades + + arm_func_start sub_0200BB60 +sub_0200BB60: ; 0x0200BB60 + ldr ip, _0200BB70 ; =sub_0200B928 + mov r2, #1 + str r2, [r0] + bx ip + .align 2, 0 +_0200BB70: .word sub_0200B928 + arm_func_end sub_0200BB60 + + arm_func_start sub_0200BB74 +sub_0200BB74: ; 0x0200BB74 + ldr ip, _0200BB84 ; =UpdateFadeStatus + mov r3, #1 + str r3, [r0] + bx ip + .align 2, 0 +_0200BB84: .word UpdateFadeStatus + arm_func_end sub_0200BB74 + + arm_func_start sub_0200BB88 +sub_0200BB88: ; 0x0200BB88 + mov r2, #1 + str r2, [r0] + mov r2, #0 + strh r2, [r0, #0x10] + cmp r1, #0 + ldrnesh r2, [r0, #0x14] + cmpne r2, #0 + bne _0200BBC0 + mov r2, #0 + strh r2, [r0, #0x14] + mov r1, #1 + stmib r0, {r1, r2} + str r2, [r0, #0xc] + bx lr +_0200BBC0: + cmp r1, #0 + movlt r1, #0x1e + cmp r2, #0 + movlt r2, #4 + strlt r2, [r0, #4] + ldrltsh r2, [r0, #0x14] + rsblt r2, r2, #0 + movge r2, #5 + strge r2, [r0, #4] + ldrgesh r2, [r0, #0x14] + strh r2, [r0, #0x12] + str r1, [r0, #8] + str r1, [r0, #0xc] + bx lr + arm_func_end sub_0200BB88 + + arm_func_start sub_0200BBF8 +sub_0200BBF8: ; 0x0200BBF8 + mov ip, #1 + cmp r1, #0 + movlt r1, #0x1e + str ip, [r0] + cmp r2, r3 + movgt ip, #3 + strgt ip, [r0, #4] + subgt ip, r2, r3 + strgth ip, [r0, #0x12] + bgt _0200BC40 + movlt ip, #2 + strlt ip, [r0, #4] + sublt ip, r3, r2 + strlth ip, [r0, #0x12] + movge ip, #1 + strge ip, [r0, #4] + movge ip, #0 + strgeh ip, [r0, #0x12] +_0200BC40: + str r1, [r0, #8] + str r1, [r0, #0xc] + strh r2, [r0, #0x14] + strh r3, [r0, #0x10] + bx lr + arm_func_end sub_0200BBF8 diff --git a/include/main_0200B330.h b/include/main_0200B330.h new file mode 100644 index 00000000..2d71a4ea --- /dev/null +++ b/include/main_0200B330.h @@ -0,0 +1,12 @@ +#ifndef PMDSKY_MAIN_0200B330_H +#define PMDSKY_MAIN_0200B330_H + +typedef struct +{ + u8 unk0; + u8 unk1; +} unkStruct_0200B330; + +void sub_0200B330(unkStruct_0200B330 *arg0); + +#endif //PMDSKY_MAIN_0200B330_H diff --git a/main.lsf b/main.lsf index 77beb4bc..030358c1 100644 --- a/main.lsf +++ b/main.lsf @@ -36,6 +36,8 @@ Static main Object asm/main_02009DCC.o Object src/main_02009F9C.o Object asm/main_0200A124.o + Object src/main_0200B330.o + Object asm/main_0200B33C.o Object src/main_0200BC54.o Object asm/main_0200BC60.o Object src/main_0200BD2C.o diff --git a/src/main_0200B330.c b/src/main_0200B330.c new file mode 100644 index 00000000..f0990e3b --- /dev/null +++ b/src/main_0200B330.c @@ -0,0 +1,6 @@ +#include "main_0200B330.h" + +void sub_0200B330(unkStruct_0200B330 *arg0) +{ + arg0->unk1 = 1; +}