From 643fd53bcfa102407221af8093e49b33c262f859 Mon Sep 17 00:00:00 2001 From: cecilarmitais Date: Mon, 17 Aug 2026 02:28:23 -0700 Subject: [PATCH] Decomp GetWindowContents, GetWindowRectangle and SetBothScreensWindowsColor Decompile from asm: SetBothScreensWindowsColor 0x02027A80 GetWindowRectangle 0x02028284 GetWindowContents 0x0202833C GetWindowContents is the function the menu accessors landed over the last several commits all call. It reads the pointer at 0xC of a WINDOW_LIST entry, and its callers cast that to whichever menu layout they use. struct Window gains the fields these two touch: bytes at 0x4, 0x5, 0x7 and 0x8 around the existing width at 0x6, and the pointer at 0xC. The trailing padding shrinks to keep the entry at 0xE0, which is the stride GetWindow indexes by. GetWindowRectangle converts four of those bytes into a rectangle in pixels, multiplying each by 8, writing top and bottom from 0x5 and 0x7 and left and right from 0x4 and width. Its out parameter has no existing type and becomes struct unk_02028284. GetWindowContents needed the entry address bound to a pointer local. Returning WINDOW_LIST[window_id].field_0xC folds the field offset into the literal pool entry, giving a .word WINDOW_LIST+0xc and an indexed load; the target keeps WINDOW_LIST as the literal and reaches the field with mla plus ldr [r1, #0xc]. SetScreenWindowsColor is still asm and had no declaration in the tree, so its prototype is provisional. No comments are added to any pmd-sky file. 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 --- asm/include/main_0202760C.inc | 59 +- asm/include/main_02027AA0.inc | 21 + asm/include/main_020282C8.inc | 4 + asm/include/main_02028354.inc | 62 + asm/main_0202760C.s | 2561 --------------------------------- asm/main_02027AA0.s | 627 ++++++++ asm/main_020282C8.s | 53 + asm/main_02028354.s | 1848 ++++++++++++++++++++++++ include/main_02027A80.h | 6 + include/main_02028284.h | 16 + include/main_0202833C.h | 6 + include/window.h | 11 +- main.lsf | 6 + src/main_02027A80.c | 9 + src/main_02028284.c | 15 + src/main_0202833C.c | 9 + 16 files changed, 2694 insertions(+), 2619 deletions(-) create mode 100644 asm/include/main_02027AA0.inc create mode 100644 asm/include/main_020282C8.inc create mode 100644 asm/include/main_02028354.inc create mode 100644 asm/main_02027AA0.s create mode 100644 asm/main_020282C8.s create mode 100644 asm/main_02028354.s create mode 100644 include/main_02027A80.h create mode 100644 include/main_02028284.h create mode 100644 include/main_0202833C.h create mode 100644 src/main_02027A80.c create mode 100644 src/main_02028284.c create mode 100644 src/main_0202833C.c diff --git a/asm/include/main_0202760C.inc b/asm/include/main_0202760C.inc index 88750fc7..273a8fc5 100644 --- a/asm/include/main_0202760C.inc +++ b/asm/include/main_0202760C.inc @@ -1,72 +1,19 @@ #pragma once -.public CURSOR_16_ANIMATION_CONTROL -.public CURSOR_16_SPRITE_ID -.public CURSOR_ANIMATION_CONTROL -.public GetPageItemYOffset -.public InitAnimationControlWithSet__0201C0B0 .public InitRender3dElement64 -.public LoadWanTableEntry +.public InitWindowTrailer .public MemAlloc -.public MemFree -.public Memcpy32 -.public PREV_MENU_ITEMS -.public SetAnimationForAnimationControl -.public SetSpriteIdForAnimationControl -.public WAN_TABLE .public WINDOW_LIST -.public _0209AC64 -.public _0209AC78 -.public _0209ACA8 -.public _0209ACAC -.public _0209ADF0 -.public _0209AE08 .public _020AFC70 .public _020AFD4C -.public _020AFD94 .public _020AFD98 -.public _020AFD9C .public _022A7A6C .public _022A7A74 -.public _022A7A78 -.public _022A7A8C -.public _022A7AA0 -.public _022A7AC8 -.public _022A7AE4 -.public _022A7B00 .public _022A7B1C -.public _022A7EDC .public _022A88E4 .public _022A88F0 -.public _022A88F8 .public _022A88FC -.public _022A8908 .public _022A8990 .public _022A8991 -.public _022A8992 -.public _022A8994 -.public _022A9A5C -.public _022AA35C -.public memset -.public sub_0200302C -.public sub_020030FC -.public sub_0200A174 -.public sub_0200A184 -.public sub_0200B330 -.public sub_0200B340 -.public sub_0200B3C0 -.public sub_0200B3FC -.public sub_0201C108 -.public sub_0201D9C8 -.public sub_0201F2A0 +.public sub_02027B1C +.public sub_02027B88 .public sub_02029A50 -.public sub_02029A68 -.public sub_02029B0C -.public sub_02029EC4 -.public sub_02029FE8 -.public sub_0202A2C8 -.public sub_0202A388 -.public sub_02032918 -.public sub_0203293C -.public sub_02033350 -.public sub_02033390 -.public sub_020333B4 diff --git a/asm/include/main_02027AA0.inc b/asm/include/main_02027AA0.inc new file mode 100644 index 00000000..f78d9864 --- /dev/null +++ b/asm/include/main_02027AA0.inc @@ -0,0 +1,21 @@ +#pragma once +.public InitWindowTrailer +.public MemFree +.public WINDOW_LIST +.public _0209AC64 +.public _0209ACAC +.public _020AFD4C +.public _020AFD94 +.public _020AFD98 +.public _020AFD9C +.public _022A7A6C +.public _022A7A74 +.public _022A7AE4 +.public _022A88E4 +.public _022A88F0 +.public _022A88F8 +.public _022A8992 +.public memset +.public sub_0200B3FC +.public sub_02027974 +.public sub_0202836C diff --git a/asm/include/main_020282C8.inc b/asm/include/main_020282C8.inc new file mode 100644 index 00000000..c7e0fc86 --- /dev/null +++ b/asm/include/main_020282C8.inc @@ -0,0 +1,4 @@ +#pragma once +.public WINDOW_LIST +.public _022A88E4 +.public _022A8994 diff --git a/asm/include/main_02028354.inc b/asm/include/main_02028354.inc new file mode 100644 index 00000000..24825b89 --- /dev/null +++ b/asm/include/main_02028354.inc @@ -0,0 +1,62 @@ +#pragma once +.public CURSOR_16_ANIMATION_CONTROL +.public CURSOR_16_SPRITE_ID +.public CURSOR_ANIMATION_CONTROL +.public GetPageItemYOffset +.public GetPaletteBaseAddress__020278A8 +.public InitAnimationControlWithSet__0201C0B0 +.public LoadWanTableEntry +.public Memcpy32 +.public PREV_MENU_ITEMS +.public SetAnimationForAnimationControl +.public SetSpriteIdForAnimationControl +.public WAN_TABLE +.public WINDOW_LIST +.public _0209AC64 +.public _0209AC78 +.public _0209ACA8 +.public _0209ADF0 +.public _0209AE08 +.public _020AFD4C +.public _020AFD94 +.public _020AFD98 +.public _020AFD9C +.public _022A7A6C +.public _022A7A78 +.public _022A7A8C +.public _022A7AA0 +.public _022A7AC8 +.public _022A7AE4 +.public _022A7B00 +.public _022A7B1C +.public _022A7EDC +.public _022A8908 +.public _022A8992 +.public _022A9A5C +.public _022AA35C +.public memset +.public sub_0200302C +.public sub_020030FC +.public sub_0200A174 +.public sub_0200A184 +.public sub_0200B330 +.public sub_0200B340 +.public sub_0200B3C0 +.public sub_0200B3FC +.public sub_0201C108 +.public sub_0201D9C8 +.public sub_0201F2A0 +.public sub_02027AA0 +.public sub_02027E30 +.public sub_02029A50 +.public sub_02029A68 +.public sub_02029B0C +.public sub_02029EC4 +.public sub_02029FE8 +.public sub_0202A2C8 +.public sub_0202A388 +.public sub_02032918 +.public sub_0203293C +.public sub_02033350 +.public sub_02033390 +.public sub_020333B4 diff --git a/asm/main_0202760C.s b/asm/main_0202760C.s index 51f791ef..5355f586 100644 --- a/asm/main_0202760C.s +++ b/asm/main_0202760C.s @@ -386,2564 +386,3 @@ SetScreenWindowsColor: ; 0x02027A68 .align 2, 0 _02027A7C: .word _020AFD98 arm_func_end SetScreenWindowsColor - - arm_func_start SetBothScreensWindowsColor -SetBothScreensWindowsColor: ; 0x02027A80 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r1, #0 - bl SetScreenWindowsColor - mov r0, r4 - mov r1, #1 - bl SetScreenWindowsColor - ldmia sp!, {r4, pc} - arm_func_end SetBothScreensWindowsColor - - arm_func_start sub_02027AA0 -sub_02027AA0: ; 0x02027AA0 - cmp r0, #1 - ldreq r0, _02027AE4 ; =_020AFD4C - moveq r1, #1 -#ifdef JAPAN - streqb r1, [r0, #3] -#else - streqb r1, [r0] -#endif - bxeq lr - cmp r0, #2 - ldreq r0, _02027AE4 ; =_020AFD4C - moveq r1, #1 -#ifdef JAPAN - streqb r1, [r0] -#else - streqb r1, [r0, #3] -#endif - bxeq lr - ldr r0, _02027AE8 ; =_020AFD9C - ldr r1, _02027AEC ; =_020AFD94 - ldrh r0, [r0] - mov r2, #1 - eor r0, r0, #1 - strb r2, [r1, r0] - bx lr - .align 2, 0 -_02027AE4: .word _020AFD4C -_02027AE8: .word _020AFD9C -_02027AEC: .word _020AFD94 - arm_func_end sub_02027AA0 - - arm_func_start UpdateWindow -UpdateWindow: ; 0x02027AF0 - ldr r2, _02027B18 ; =WINDOW_LIST - mov r1, #0xe0 - mla r1, r0, r1, r2 - ldr r0, [r1, #0x14] - str r0, [r1, #0x24] - ldr r0, [r1, #0x18] - str r0, [r1, #0x28] - ldr r0, [r1, #0x1c] - str r0, [r1, #0x2c] - bx lr - .align 2, 0 -_02027B18: .word WINDOW_LIST - arm_func_end UpdateWindow - - arm_func_start sub_02027B1C -sub_02027B1C: ; 0x02027B1C - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0xe0 - mul r2, r4, r0 - ldr r0, _02027B50 ; =_022A88F0 - ldr r1, _02027B54 ; =_022A88F8 - ldr r0, [r0, r2] - ldr r2, [r1, r2] - mov r1, #0 - bl memset - mov r0, r4 - bl UpdateWindow - ldmia sp!, {r4, pc} - .align 2, 0 -_02027B50: .word _022A88F0 -_02027B54: .word _022A88F8 - arm_func_end sub_02027B1C - - arm_func_start ClearWindow -ClearWindow: ; 0x02027B58 - mov r1, #0xe0 - mul r2, r0, r1 - ldr r0, _02027B7C ; =_022A88F0 - ldr r1, _02027B80 ; =_022A88F8 - ldr r0, [r0, r2] - ldr r2, [r1, r2] - ldr ip, _02027B84 ; =memset - mov r1, #0 - bx ip - .align 2, 0 -_02027B7C: .word _022A88F0 -_02027B80: .word _022A88F8 -_02027B84: .word memset - arm_func_end ClearWindow - - arm_func_start sub_02027B88 -sub_02027B88: ; 0x02027B88 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #8 - ldr r0, _02027E14 ; =_022A7A6C -#ifdef JAPAN - ldrsb r2, [r0, #1] -#else - ldrsb r2, [r0, #3] -#endif - b _02027E00 -_02027B9C: - ldr r1, _02027E18 ; =WINDOW_LIST - mov r0, #0xe0 - mla r4, r2, r0, r1 - ldrb r0, [r4, #8] - cmp r0, #1 - ldreqsb r0, [r4, #0xb6] - cmpeq r0, #2 - bne _02027DFC - ldrsb r1, [r4, #9] - ldr r0, _02027E1C ; =_0209AC64 - rsb r1, r1, #0 - mov r1, r1, lsl #1 - ldrsb r0, [r0, r1] - cmp r0, #0 - bne _02027DF0 - ldr r0, _02027E20 ; =_020AFD98 - ldrb r1, [r4, #4] - ldrb r3, [r0, #1] - ldr r2, _02027E24 ; =_0209ACAC - sub r6, r1, #1 - ldrb r2, [r2, r3] - ldrb r0, [r4, #5] - add r1, sp, #0 - mov r5, r2, lsl #0xc - sub r3, r0, #1 - orr r0, r5, #2 - mov r2, r0, lsl #0x10 - ldr r0, _02027E28 ; =_022A7AE4 - str r6, [sp] - mov r2, r2, lsr #0x10 - str r3, [sp, #4] - bl sub_0200B3FC - ldr r1, [sp] - orr r0, r5, #3 - add r1, r1, #1 - mov r0, r0, lsl #0x10 - str r1, [sp] - mov r6, r0, lsr #0x10 - ldr r8, _02027E28 ; =_022A7AE4 - add r7, sp, #0 - b _02027C5C -_02027C40: - mov r0, r8 - mov r1, r7 - mov r2, r6 - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_02027C5C: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - ldr r2, [sp] - add r0, r1, r0 - cmp r2, r0 - blt _02027C40 - orr r0, r5, #4 - mov r2, r0, lsl #0x10 - ldr r0, _02027E28 ; =_022A7AE4 - add r1, sp, #0 - mov r2, r2, lsr #0x10 - bl sub_0200B3FC - ldr r0, [sp, #4] - orr r1, r5, #5 - add r0, r0, #1 - str r0, [sp, #4] - orr r0, r5, #1 - orr r2, r5, #6 - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r2, r2, lsl #0x10 - mov r7, r0, lsr #0x10 - mov r8, r1, lsr #0x10 - mov r6, r2, lsr #0x10 - ldr sl, _02027E28 ; =_022A7AE4 - add sb, sp, #0 - b _02027D44 -_02027CC8: - ldrb r2, [r4, #4] - mov r0, sl - mov r1, sb - sub r3, r2, #1 - mov r2, r8 - str r3, [sp] - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] - b _02027D10 -_02027CF4: - mov r0, sl - mov r1, sb - mov r2, r7 - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_02027D10: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - ldr r2, [sp] - add r0, r1, r0 - cmp r2, r0 - blt _02027CF4 - mov r0, sl - mov r1, sb - mov r2, r6 - bl sub_0200B3FC - ldr r0, [sp, #4] - add r0, r0, #1 - str r0, [sp, #4] -_02027D44: - ldrb r1, [r4, #5] - ldrb r0, [r4, #7] - ldr r2, [sp, #4] - add r0, r1, r0 - cmp r2, r0 - blt _02027CC8 - ldrb r1, [r4, #4] - orr r0, r5, #7 - mov r2, r0, lsl #0x10 - sub r3, r1, #1 - ldr r0, _02027E28 ; =_022A7AE4 - add r1, sp, #0 - str r3, [sp] - mov r2, r2, lsr #0x10 - bl sub_0200B3FC - ldr r1, [sp] - orr r0, r5, #8 - add r1, r1, #1 - mov r0, r0, lsl #0x10 - str r1, [sp] - mov r6, r0, lsr #0x10 - ldr r8, _02027E28 ; =_022A7AE4 - add r7, sp, #0 - b _02027DC0 -_02027DA4: - mov r0, r8 - mov r1, r7 - mov r2, r6 - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_02027DC0: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - ldr r2, [sp] - add r0, r1, r0 - cmp r2, r0 - blt _02027DA4 - orr r0, r5, #9 - mov r2, r0, lsl #0x10 - ldr r0, _02027E28 ; =_022A7AE4 - add r1, sp, #0 - mov r2, r2, lsr #0x10 - bl sub_0200B3FC -_02027DF0: - ldr r0, _02027E2C ; =_020AFD4C - mov r1, #1 -#ifdef JAPAN - strb r1, [r0] -#else - strb r1, [r0, #3] -#endif -_02027DFC: - ldrsb r2, [r4, #0xb5] -_02027E00: - mvn r0, #1 - cmp r2, r0 - bne _02027B9C - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02027E14: .word _022A7A6C -_02027E18: .word WINDOW_LIST -_02027E1C: .word _0209AC64 -_02027E20: .word _020AFD98 -_02027E24: .word _0209ACAC -_02027E28: .word _022A7AE4 -_02027E2C: .word _020AFD4C - arm_func_end sub_02027B88 - - arm_func_start sub_02027E30 -sub_02027E30: ; 0x02027E30 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #8 - ldr r3, _02028070 ; =WINDOW_LIST - mov r2, #0xe0 - mla r7, r0, r2, r3 - ldrsb r0, [r7, #9] - ldr r2, _02028074 ; =_0209AC64 - cmp r1, #0 - rsb r0, r0, #0 - add r4, r2, r0, lsl #1 - movne r0, #2 - moveq r0, #3 - strb r0, [r7, #0xb6] - ldrb r0, [r7, #8] - cmp r0, #1 - bne _02027F34 - cmp r1, #0 - bne _02027F20 - ldrsb r1, [r7, #0x10] - ldr r2, _02028070 ; =WINDOW_LIST - mov r0, #0xe0 - mla r0, r1, r0, r2 - add r0, r0, #0xbc - bl InitWindowTrailer - ldrsb r0, [r4] - cmp r0, #0 - blt _02027F20 - ldrb r0, [r7, #5] - ldr r6, _02028078 ; =_022A7AE4 - add r5, sp, #0 - sub r0, r0, #1 - str r0, [sp, #4] - mov r4, #0 - b _02027F08 -_02027EB8: - ldrb r0, [r7, #4] - sub r0, r0, #1 - str r0, [sp] - b _02027EE4 -_02027EC8: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_02027EE4: - ldrb r1, [r7, #4] - ldrb r0, [r7, #6] - ldr r2, [sp] - add r0, r1, r0 - cmp r2, r0 - ble _02027EC8 - ldr r0, [sp, #4] - add r0, r0, #1 - str r0, [sp, #4] -_02027F08: - ldrb r1, [r7, #5] - ldrb r0, [r7, #7] - ldr r2, [sp, #4] - add r0, r1, r0 - cmp r2, r0 - ble _02027EB8 -_02027F20: - bl sub_02027B88 - ldr r0, _0202807C ; =_020AFD4C - mov r1, #1 -#ifdef JAPAN - strb r1, [r0] -#else - strb r1, [r0, #3] -#endif - b _02028064 -_02027F34: - cmp r1, #0 - beq _0202801C - ldrb r1, [r7, #4] - mvn r0, #3 - mov r1, r1, lsl #3 - strh r1, [r7, #0x34] - ldrb r1, [r7, #5] - mov r1, r1, lsl #3 - strh r1, [r7, #0x36] - ldrb r1, [r7, #6] - mov r1, r1, lsl #3 - strh r1, [r7, #0x38] - ldrb r1, [r7, #7] - mov r1, r1, lsl #3 - strh r1, [r7, #0x3a] - ldrh r1, [r7, #0x34] - strh r1, [r7, #0x74] - ldrh r1, [r7, #0x36] - strh r1, [r7, #0x76] - ldrh r1, [r7, #0x38] - strh r1, [r7, #0x78] - ldrh r1, [r7, #0x3a] - strh r1, [r7, #0x7a] - ldrsh r1, [r7, #0x74] - sub r1, r1, #8 - strh r1, [r7, #0x74] - ldrsh r1, [r7, #0x76] - sub r1, r1, #8 - strh r1, [r7, #0x76] - ldrsh r1, [r7, #0x78] - add r1, r1, #0x10 - strh r1, [r7, #0x78] - ldrsh r1, [r7, #0x7a] - add r1, r1, #0x10 - strh r1, [r7, #0x7a] - ldrsb r1, [r7, #9] - cmp r1, r0 - beq _02027FFC - ldrsh r0, [r7, #0x34] - sub r0, r0, #1 - strh r0, [r7, #0x34] - ldrsh r0, [r7, #0x36] - sub r0, r0, #2 - strh r0, [r7, #0x36] - ldrsh r0, [r7, #0x38] - add r0, r0, #2 - strh r0, [r7, #0x38] - ldrsh r0, [r7, #0x3a] - add r0, r0, #6 - strh r0, [r7, #0x3a] -_02027FFC: - ldr r0, _0202807C ; =_020AFD4C - ldrb r0, [r0, #1] - cmp r0, #0 - movne r0, #0x90 - strneb r0, [r7, #0x63] - moveq r0, #0xff - streqb r0, [r7, #0x63] - b _02028064 -_0202801C: - ldrsb r1, [r7, #0x10] - ldr r2, _02028070 ; =WINDOW_LIST - mov r0, #0xe0 - mla r0, r1, r0, r2 - add r0, r0, #0xbc - bl InitWindowTrailer - mov r0, #0 - strh r0, [r7, #0x3a] - strh r0, [r7, #0x38] - strh r0, [r7, #0x36] - strh r0, [r7, #0x34] - strh r0, [r7, #0x74] - ldrh r0, [r7, #0x36] - strh r0, [r7, #0x76] - ldrh r0, [r7, #0x38] - strh r0, [r7, #0x78] - ldrh r0, [r7, #0x3a] - strh r0, [r7, #0x7a] -_02028064: - mov r0, #1 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02028070: .word WINDOW_LIST -_02028074: .word _0209AC64 -_02028078: .word _022A7AE4 -_0202807C: .word _020AFD4C - arm_func_end sub_02027E30 - - arm_func_start sub_02028080 -sub_02028080: ; 0x02028080 - stmdb sp!, {r4, lr} - ldr r3, _020280B8 ; =WINDOW_LIST - mov r2, #0xe0 - mla r4, r0, r2, r3 - strb r1, [r4, #9] - ldrsb r0, [r4, #0x10] - bl UpdateWindow - ldr r0, _020280BC ; =_020AFD4C - ldrb r1, [r4, #8] - ldr r3, [r0, #8] - mov r2, #1 - orr r1, r3, r2, lsl r1 - str r1, [r0, #8] - ldmia sp!, {r4, pc} - .align 2, 0 -_020280B8: .word WINDOW_LIST -_020280BC: .word _020AFD4C - arm_func_end sub_02028080 - - arm_func_start sub_020280C0 -sub_020280C0: ; 0x020280C0 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #1 - mov r5, r0 - bl sub_02027E30 - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r1, #0xe0 - mul r3, r5, r1 - ldr r2, _02028104 ; =_022A88E4 - ldr r1, _02028108 ; =_020AFD4C - ldrb r2, [r2, r3] - ldr ip, [r1, #8] - mov r3, #1 - orr r2, ip, r3, lsl r2 - str r2, [r1, #8] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02028104: .word _022A88E4 -_02028108: .word _020AFD4C - arm_func_end sub_020280C0 - - arm_func_start sub_0202810C -sub_0202810C: ; 0x0202810C - ldr ip, _02028118 ; =sub_020280C0 - mov r1, #1 - bx ip - .align 2, 0 -_02028118: .word sub_020280C0 - arm_func_end sub_0202810C - - arm_func_start sub_0202811C -sub_0202811C: ; 0x0202811C - ldr ip, _02028128 ; =sub_02027E30 - mov r1, #1 - bx ip - .align 2, 0 -_02028128: .word sub_02027E30 - arm_func_end sub_0202811C - - arm_func_start sub_0202812C -sub_0202812C: ; 0x0202812C - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r1, #0xe0 - mul r5, r6, r1 - ldr r1, _02028188 ; =_022A8992 - ldrsb r1, [r1, r5] - cmp r1, #3 - moveq r0, #1 - ldmeqia sp!, {r4, r5, r6, pc} - mov r1, #0 - bl sub_02027E30 - mov r4, r0 - mov r0, r6 - bl sub_0202836C - ldr r0, _0202818C ; =_022A88E4 - ldr r1, _02028190 ; =_020AFD4C - ldrb r0, [r0, r5] - ldr r3, [r1, #8] - mov r2, #1 - orr r2, r3, r2, lsl r0 - mov r0, r4 - str r2, [r1, #8] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02028188: .word _022A8992 -_0202818C: .word _022A88E4 -_02028190: .word _020AFD4C - arm_func_end sub_0202812C - - arm_func_start DeleteWindow -DeleteWindow: ; 0x02028194 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _02028224 ; =WINDOW_LIST - mov r1, #0xe0 - mla r4, r0, r1, r2 - bl sub_0202812C - ldrb r5, [r4, #8] - ldr lr, _02028224 ; =WINDOW_LIST - mov ip, #1 - mov r3, #0 -_020281B8: - cmp lr, r4 - ldrnesb r0, [lr, #0xb6] - cmpne r0, #0 - beq _020281EC - ldrb r0, [lr, #8] - cmp r5, r0 - bne _020281EC - ldrh r2, [lr, #0x12] - ldrb r1, [lr, #6] - ldrb r0, [lr, #7] - mla r0, r1, r0, r2 - cmp ip, r0 - movlt ip, r0 -_020281EC: - add r3, r3, #1 - cmp r3, #0x14 - add lr, lr, #0xe0 - blt _020281B8 - ldr r0, [r4, #0x14] - ldr r1, _02028228 ; =_022A7A74 - mov r2, r5, lsl #1 - strh ip, [r1, r2] - bl MemFree - ldrsb r0, [r4, #0x10] - bl sub_02027974 - mov r0, #0 - strb r0, [r4, #0xb6] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02028224: .word WINDOW_LIST -_02028228: .word _022A7A74 - arm_func_end DeleteWindow - - arm_func_start sub_0202822C -sub_0202822C: ; 0x0202822C - stmdb sp!, {r4, lr} - ldr r2, _02028258 ; =WINDOW_LIST - mov r1, #0xe0 - mla r4, r0, r1, r2 - ldr r0, [r4, #0x14] - bl MemFree - ldrsb r0, [r4, #0x10] - bl sub_02027974 - mov r0, #0 - strb r0, [r4, #0xb6] - ldmia sp!, {r4, pc} - .align 2, 0 -_02028258: .word WINDOW_LIST - arm_func_end sub_0202822C - - arm_func_start sub_0202825C -sub_0202825C: ; 0x0202825C - ldr r2, _0202826C ; =_022A7A74 - mov r0, r0, lsl #1 - strh r1, [r2, r0] - bx lr - .align 2, 0 -_0202826C: .word _022A7A74 - arm_func_end sub_0202825C - - arm_func_start sub_02028270 -sub_02028270: ; 0x02028270 - ldr r1, _02028280 ; =_022A7A74 - mov r0, r0, lsl #1 - ldrh r0, [r1, r0] - bx lr - .align 2, 0 -_02028280: .word _022A7A74 - arm_func_end sub_02028270 - - arm_func_start GetWindowRectangle -GetWindowRectangle: ; 0x02028284 - ldr r3, _020282C4 ; =WINDOW_LIST - mov r2, #0xe0 - mla r3, r0, r2, r3 - ldrb r0, [r3, #5] - mov r2, r0, lsl #3 - str r2, [r1] - ldrb r0, [r3, #7] - add r0, r2, r0, lsl #3 - str r0, [r1, #4] - ldrb r0, [r3, #4] - mov r2, r0, lsl #3 - str r2, [r1, #8] - ldrb r0, [r3, #6] - add r0, r2, r0, lsl #3 - str r0, [r1, #0xc] - bx lr - .align 2, 0 -_020282C4: .word WINDOW_LIST - arm_func_end GetWindowRectangle - - arm_func_start sub_020282C8 -sub_020282C8: ; 0x020282C8 - ldr r3, _020282F0 ; =WINDOW_LIST - mov r2, #0xe0 - mla r2, r0, r2, r3 - ldrb r0, [r2, #7] - mov r0, r0, lsl #3 - str r0, [r1, #4] - ldrb r0, [r2, #6] - mov r0, r0, lsl #3 - str r0, [r1] - bx lr - .align 2, 0 -_020282F0: .word WINDOW_LIST - arm_func_end sub_020282C8 - - arm_func_start sub_020282F4 -sub_020282F4: ; 0x020282F4 - mov r1, #0xe0 - mul r1, r0, r1 - ldr r0, _02028308 ; =_022A8994 - ldr r0, [r0, r1] - bx lr - .align 2, 0 -_02028308: .word _022A8994 - arm_func_end sub_020282F4 - - arm_func_start sub_0202830C -sub_0202830C: ; 0x0202830C - mov r2, #0xe0 - mul r2, r0, r2 - ldr r0, _02028320 ; =_022A8994 - str r1, [r0, r2] - bx lr - .align 2, 0 -_02028320: .word _022A8994 - arm_func_end sub_0202830C - - arm_func_start sub_02028324 -sub_02028324: ; 0x02028324 - mov r1, #0xe0 - mul r1, r0, r1 - ldr r0, _02028338 ; =_022A88E4 - ldrb r0, [r0, r1] - bx lr - .align 2, 0 -_02028338: .word _022A88E4 - arm_func_end sub_02028324 - - arm_func_start GetWindowContents -GetWindowContents: ; 0x0202833C - ldr r2, _02028350 ; =WINDOW_LIST - mov r1, #0xe0 - mla r1, r0, r1, r2 - ldr r0, [r1, #0xc] - bx lr - .align 2, 0 -_02028350: .word WINDOW_LIST - arm_func_end GetWindowContents - - arm_func_start sub_02028354 -sub_02028354: ; 0x02028354 - mov r1, #0xe0 - mul r1, r0, r1 - ldr r0, _02028368 ; =_022A8992 - ldrsb r0, [r0, r1] - bx lr - .align 2, 0 -_02028368: .word _022A8992 - arm_func_end sub_02028354 - - arm_func_start sub_0202836C -sub_0202836C: ; 0x0202836C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #8 - ldr r2, _02028438 ; =WINDOW_LIST - mov r1, #0xe0 - mla r6, r0, r1, r2 - ldrb r0, [r6, #8] - cmp r0, #0 - bne _020283A4 - ldrb r0, [r6, #4] - ldrb r1, [r6, #5] - ldrb r2, [r6, #6] - ldrb r3, [r6, #7] - bl sub_02029154 - b _02028428 -_020283A4: - ldrb r0, [r6, #8] - bl sub_0202843C - ldrb r1, [r6, #5] - mov r7, r0 - add r5, sp, #0 - str r1, [sp, #4] - mov r4, #0 - b _02028410 -_020283C4: - ldrb r0, [r6, #4] - str r0, [sp] - b _020283EC -_020283D0: - mov r0, r7 - mov r1, r5 - mov r2, r4 - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_020283EC: - ldrb r1, [r6, #4] - ldrb r0, [r6, #6] - ldr r2, [sp] - add r0, r1, r0 - cmp r2, r0 - blt _020283D0 - ldr r0, [sp, #4] - add r0, r0, #1 - str r0, [sp, #4] -_02028410: - ldrb r1, [r6, #5] - ldrb r0, [r6, #7] - ldr r2, [sp, #4] - add r0, r1, r0 - cmp r2, r0 - blt _020283C4 -_02028428: - ldrb r0, [r6, #8] - bl sub_02027AA0 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02028438: .word WINDOW_LIST - arm_func_end sub_0202836C - - arm_func_start sub_0202843C -sub_0202843C: ; 0x0202843C - cmp r0, #1 - ldreq r0, _02028458 ; =_022A7B00 - bxeq lr - cmp r0, #2 - ldreq r0, _0202845C ; =_022A7AE4 - ldrne r0, _02028460 ; =_022A7AC8 - bx lr - .align 2, 0 -_02028458: .word _022A7B00 -_0202845C: .word _022A7AE4 -_02028460: .word _022A7AC8 - arm_func_end sub_0202843C - - arm_func_start sub_02028464 -sub_02028464: ; 0x02028464 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x14 - ldr r3, _02028768 ; =WINDOW_LIST - mov r2, #0xe0 - mla r4, r0, r2, r3 - ldrsb r0, [r4, #9] - ldrb r5, [r4, #8] - ldr r7, _0202876C ; =_0209AC64 - rsb r2, r0, #0 - mov r0, r5 - mov r6, r2, lsl #1 - mov r8, r1 - bl sub_0202843C - ldrsb r1, [r7, r6] - mov r6, r0 - cmp r1, #0 - movlt r8, #0 - cmp r5, #0 - bne _020284D8 - ldrh r0, [r4, #0x30] - str r0, [sp] - ldrb r0, [r4, #0x11] - stmib sp, {r0, r8} - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - ldrb r2, [r4, #6] - ldrb r3, [r4, #7] - bl sub_020291FC - b _02028758 -_020284D8: - ldrb r0, [r4, #0x11] - cmp r0, #0 - beq _0202857C - ldrh r0, [r4, #0x30] - ldrb r1, [r4, #5] - add r7, sp, #0xc - orr r0, r0, #0x400 - mov r0, r0, lsl #0x10 - str r1, [sp, #0x10] - mov sb, r0, lsr #0x10 - b _02028560 -_02028504: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - add r0, r1, r0 - sub r0, r0, #1 - str r0, [sp, #0xc] - b _02028544 -_0202851C: - add r0, sb, #1 - mov r2, sb - mov r3, r0, lsl #0x10 - mov r0, r6 - mov r1, r7 - mov sb, r3, lsr #0x10 - bl sub_0200B3FC - ldr r0, [sp, #0xc] - sub r0, r0, #1 - str r0, [sp, #0xc] -_02028544: - ldrb r0, [r4, #4] - ldr r1, [sp, #0xc] - cmp r1, r0 - bge _0202851C - ldr r0, [sp, #0x10] - add r0, r0, #1 - str r0, [sp, #0x10] -_02028560: - ldrb r0, [r4, #5] - ldrb r1, [r4, #7] - ldr r2, [sp, #0x10] - add r1, r0, r1 - cmp r2, r1 - blt _02028504 - b _02028600 -_0202857C: - ldrh r7, [r4, #0x30] - ldrb sl, [r4, #5] - add sb, sp, #0xc - b _020285EC -_0202858C: - mov r1, sl, lsr #0x1f - ldrb r2, [r4, #4] - rsb r0, r1, sl, lsl #27 - add r0, r1, r0, ror #27 - str r0, [sp, #0x10] - str r2, [sp, #0xc] - b _020285D0 -_020285A8: - add r0, r7, #1 - mov r2, r7 - mov r3, r0, lsl #0x10 - mov r0, r6 - mov r1, sb - mov r7, r3, lsr #0x10 - bl sub_0200B3FC - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] -_020285D0: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - ldr r2, [sp, #0xc] - add r0, r1, r0 - cmp r2, r0 - blt _020285A8 - add sl, sl, #1 -_020285EC: - ldrb r0, [r4, #5] - ldrb r1, [r4, #7] - add r1, r0, r1 - cmp sl, r1 - blt _0202858C -_02028600: - cmp r8, #0 - beq _02028758 - subs r0, r0, #1 - str r0, [sp, #0x10] - bmi _02028670 - ldrb r0, [r4, #4] - add r8, sp, #0xc - mov r7, #0 - sub r0, r0, #1 - str r0, [sp, #0xc] - b _02028658 -_0202862C: - cmp r2, #0 - blt _0202864C - cmp r2, #0x20 - bge _0202864C - mov r0, r6 - mov r1, r8 - mov r2, r7 - bl sub_0200B3FC -_0202864C: - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] -_02028658: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - ldr r2, [sp, #0xc] - add r0, r1, r0 - cmp r2, r0 - ble _0202862C -_02028670: - ldrb r0, [r4, #5] - mov r8, #0 - add sb, sp, #0xc - str r0, [sp, #0x10] - mov r7, r8 - b _020286DC -_02028688: - ldrb r0, [r4, #4] - subs r0, r0, #1 - str r0, [sp, #0xc] - bmi _020286A8 - mov r0, r6 - mov r1, sb - mov r2, r8 - bl sub_0200B3FC -_020286A8: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - add r0, r1, r0 - str r0, [sp, #0xc] - cmp r0, #0x20 - bge _020286D0 - mov r0, r6 - mov r1, sb - mov r2, r7 - bl sub_0200B3FC -_020286D0: - ldr r0, [sp, #0x10] - add r0, r0, #1 - str r0, [sp, #0x10] -_020286DC: - ldrb r1, [r4, #5] - ldrb r0, [r4, #7] - ldr r2, [sp, #0x10] - add r0, r1, r0 - cmp r2, r0 - blt _02028688 - cmp r2, #0x18 - bge _02028758 - ldrb r0, [r4, #4] - add r8, sp, #0xc - mov r7, #0 - sub r0, r0, #1 - str r0, [sp, #0xc] - b _02028740 -_02028714: - cmp r2, #0 - blt _02028734 - cmp r2, #0x20 - bge _02028734 - mov r0, r6 - mov r1, r8 - mov r2, r7 - bl sub_0200B3FC -_02028734: - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] -_02028740: - ldrb r1, [r4, #4] - ldrb r0, [r4, #6] - ldr r2, [sp, #0xc] - add r0, r1, r0 - cmp r2, r0 - ble _02028714 -_02028758: - mov r0, r5 - bl sub_02027AA0 - add sp, sp, #0x14 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02028768: .word WINDOW_LIST -_0202876C: .word _0209AC64 - arm_func_end sub_02028464 - - arm_func_start sub_02028770 -sub_02028770: ; 0x02028770 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _020287C0 ; =WINDOW_LIST - mov r5, r0 - mov r1, #0xe0 - mla r4, r5, r1, r2 - bl sub_0202836C - ldr r0, [sp, #0x14] - ldr r2, [sp, #0x18] - strb r0, [r4, #4] - mov r0, r5 - mov r1, #1 - strb r2, [r4, #5] - bl sub_02027E30 - mov r0, r5 - mov r1, #1 - bl sub_02028464 - ldmia sp!, {r3, r4, r5, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_020287C0: .word WINDOW_LIST - arm_func_end sub_02028770 - - arm_func_start sub_020287C4 -sub_020287C4: ; 0x020287C4 - ldr r1, _020287DC ; =_020AFD4C - mov r2, #1 - ldr r3, [r1, #8] - orr r0, r3, r2, lsl r0 - str r0, [r1, #8] - bx lr - .align 2, 0 -_020287DC: .word _020AFD4C - arm_func_end sub_020287C4 - - arm_func_start sub_020287E0 -sub_020287E0: ; 0x020287E0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r1, _02028840 ; =_022A7A6C - mov r6, r0 -#ifdef JAPAN - ldrsb r0, [r1, #1] -#else - ldrsb r0, [r1, #3] -#endif - mov r1, #0 - mov sb, #1 - ldr r4, _02028844 ; =WINDOW_LIST - mov r8, #0xe0 - mvn r7, #1 - b _0202882C -_02028808: - mla r5, r0, r8, r4 - ldrsb r2, [r5, #0xb6] - cmp r2, #2 - ldreqb r2, [r5, #8] - cmpeq r6, r2 - bne _02028828 - bl sub_02028464 - mov r1, sb -_02028828: - ldrsb r0, [r5, #0xb5] -_0202882C: - cmp r0, r7 - bne _02028808 - mov r0, r6 - bl sub_02027AA0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02028840: .word _022A7A6C -_02028844: .word WINDOW_LIST - arm_func_end sub_020287E0 - - arm_func_start sub_02028848 -sub_02028848: ; 0x02028848 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r0, _020288D0 ; =_022A7A6C - ldr r6, _020288D4 ; =WINDOW_LIST -#ifdef JAPAN - ldrsb r0, [r0, #1] -#else - ldrsb r0, [r0, #3] -#endif - mov r5, #0xe0 - mvn r4, #1 - b _02028888 -_02028864: - mla r7, r0, r5, r6 - ldrsb r0, [r7, #0xb6] - cmp r0, #0 - ldrne r1, [r7] - cmpne r1, #0 - beq _02028884 - mov r0, r7 - blx r1 -_02028884: - ldrsb r0, [r7, #0xb5] -_02028888: - cmp r0, r4 - bne _02028864 - ldr r0, _020288D8 ; =_020AFD4C - ldr r0, [r0, #8] - tst r0, #1 - beq _020288A8 - mov r0, #0 - bl sub_020287E0 -_020288A8: - ldr r0, _020288D8 ; =_020AFD4C - ldr r0, [r0, #8] - tst r0, #2 - beq _020288C0 - mov r0, #1 - bl sub_020287E0 -_020288C0: - ldr r0, _020288D8 ; =_020AFD4C - mov r1, #0 - str r1, [r0, #8] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_020288D0: .word _022A7A6C -_020288D4: .word WINDOW_LIST -_020288D8: .word _020AFD4C - arm_func_end sub_02028848 - - arm_func_start sub_020288DC -sub_020288DC: ; 0x020288DC - ldr r2, _020288F4 ; =WINDOW_LIST - mov r1, #0xe0 - mla r1, r0, r1, r2 - ldr ip, _020288F8 ; =InitWindowTrailer - add r0, r1, #0xbc - bx ip - .align 2, 0 -_020288F4: .word WINDOW_LIST -_020288F8: .word InitWindowTrailer - arm_func_end sub_020288DC - - arm_func_start sub_020288FC -sub_020288FC: ; 0x020288FC - stmdb sp!, {r4, lr} - sub sp, sp, #8 - ldr lr, _02028944 ; =WINDOW_LIST - mov ip, #0xe0 - mla r4, r0, ip, lr - ldr lr, [r4, #0xb8] - sub r0, ip, #0xe1 - cmp lr, r0 - moveq ip, #1 - stmia sp, {r2, r3} - movne ip, #0 - mov r2, r1 - add r0, r4, #0xbc - and r3, ip, #0xff - mov r1, #0 - bl sub_02029688 - add sp, sp, #8 - ldmia sp!, {r4, pc} - .align 2, 0 -_02028944: .word WINDOW_LIST - arm_func_end sub_020288FC - - arm_func_start sub_02028948 -sub_02028948: ; 0x02028948 - stmdb sp!, {r3, lr} - ldr r3, _0202897C ; =WINDOW_LIST - mov r2, #0xe0 - mla ip, r0, r2, r3 - ldr r3, [ip, #0xb8] - sub r0, r2, #0xe1 - cmp r3, r0 - moveq r2, #1 - movne r2, #0 - add r0, ip, #0xbc - and r2, r2, #0xff - bl sub_02029758 - ldmia sp!, {r3, pc} - .align 2, 0 -_0202897C: .word WINDOW_LIST - arm_func_end sub_02028948 - - arm_func_start sub_02028980 -sub_02028980: ; 0x02028980 - stmdb sp!, {r3, lr} - ldr r3, _020289B4 ; =WINDOW_LIST - mov r2, #0xe0 - mla ip, r0, r2, r3 - ldr r3, [ip, #0xb8] - sub r0, r2, #0xe1 - cmp r3, r0 - moveq r2, #1 - movne r2, #0 - add r0, ip, #0xbc - and r2, r2, #0xff - bl sub_02029828 - ldmia sp!, {r3, pc} - .align 2, 0 -_020289B4: .word WINDOW_LIST - arm_func_end sub_02028980 - - arm_func_start sub_020289B8 -sub_020289B8: ; 0x020289B8 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - ldr lr, _02028A04 ; =WINDOW_LIST - mov ip, #0xe0 - mla r4, r0, ip, lr - ldr lr, [r4, #0xb8] - sub r0, ip, #0xe1 - cmp lr, r0 - moveq lr, #1 - str r3, [sp] - ldr ip, [sp, #0x10] - movne lr, #0 - mov r3, r2 - add r0, r4, #0xbc - and r2, lr, #0xff - str ip, [sp, #4] - bl sub_020298F8 - add sp, sp, #8 - ldmia sp!, {r4, pc} - .align 2, 0 -_02028A04: .word WINDOW_LIST - arm_func_end sub_020289B8 - - arm_func_start sub_02028A08 -sub_02028A08: ; 0x02028A08 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - ldr lr, _02028A60 ; =WINDOW_LIST - mov ip, #0xe0 - mla r4, r0, ip, lr - sub r0, ip, #0xe1 - ldr lr, [r4, #0xb8] - ldr ip, [sp, #0x18] - cmp lr, r0 - stmia sp, {r3, ip} - moveq lr, #1 - ldr r0, [sp, #0x1c] - movne lr, #0 - str r0, [sp, #8] - ldr ip, [sp, #0x20] - mov r3, r2 - add r0, r4, #0xbc - and r2, lr, #0xff - str ip, [sp, #0xc] - bl sub_02029998 - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_02028A60: .word WINDOW_LIST - arm_func_end sub_02028A08 - - arm_func_start sub_02028A64 -sub_02028A64: ; 0x02028A64 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr r1, _02028DE8 ; =_020AFD4C - movs r4, r0 -#ifdef JAPAN - strb r4, [r1, #2] -#else - strb r4, [r1, #4] -#endif - mov r5, #8 - beq _02028D58 - ldr r0, _02028DEC ; =_022A7A6C - mov r1, #0 -#ifdef JAPAN - ldrsb r3, [r0, #1] -#else - ldrsb r3, [r0, #3] - strb r3, [r0, #5] -#endif - strh r1, [r0, #6] - b _02028BF4 -_02028A94: - ldr r1, _02028DF0 ; =WINDOW_LIST - mov r0, #0xe0 - mla r6, r3, r0, r1 - ldrsb r1, [r6, #0xb6] - ldr r2, _02028DF4 ; =_022A7B1C -#ifdef JAPAN - mov r0, #0x2c -#else - mov r0, #0x30 -#endif - mla r7, r3, r0, r2 - cmp r1, #0 -#ifdef JAPAN - mov r0, #0 - beq _02028BDC -#else - beq _02028BDC - mov r0, #0 -#endif - strb r0, [r6, #0xb7] - ldrb r0, [r6, #8] - mov r1, #1 - strb r1, [r7] - cmp r0, #0 - bne _02028BC4 - ldr r0, _02028DF8 ; =_020AFD98 - ldrsb r3, [r6, #9] - ldrb r2, [r0] - ldr r0, _02028DEC ; =_022A7A6C - ldr r1, _02028DFC ; =_0209ACA8 - ldrsh r0, [r0, #0x58] - rsb r3, r3, #0 - ldrb r1, [r1, r2] - ldr r2, _02028E00 ; =_0209AC64 - mov r3, r3, lsl #1 - ldrsb r8, [r2, r3] - bl GetPaletteBaseAddress__020278A8 - mov r1, r5, lsl #1 - str r0, [r6, #0x98] - add r0, r1, #9 - strh r0, [r6, #0x9e] - add r0, r1, #0xa - strh r0, [r6, #0x5e] - cmp r8, #0 - sub r5, r5, #1 - blt _02028BC4 - ldrsh r0, [r6, #0x38] - cmp r0, #0 - beq _02028BC4 - ldr r0, _02028E04 ; =_0209AC78 - mov r1, r8, lsl #3 - add r3, r0, r8, lsl #3 - ldrsh r1, [r0, r1] - ldr r0, _02028DEC ; =_022A7A6C - ldrsh r2, [r3, #2] - strh r1, [r6, #0x8a] - ldrsh r8, [r0, #6] - ldrsh r1, [r3, #4] - strh r2, [r6, #0x8c] - ldrsh r0, [r3, #6] - strh r1, [r6, #0x8e] - cmp r8, #0x14 - strh r0, [r6, #0x90] - bge _02028BC4 - ldr r0, _02028E08 ; =_022A7EDC - add ip, r6, #0x34 - add sl, r0, r8, lsl #7 - mov sb, #4 -_02028B80: - ldmia ip!, {r0, r1, r2, r3} - stmia sl!, {r0, r1, r2, r3} - subs sb, sb, #1 - bne _02028B80 - ldr r0, _02028E08 ; =_022A7EDC - add sl, r6, #0x74 - add r0, r0, r8, lsl #7 - add sb, r0, #0x40 - mov r8, #4 -_02028BA4: - ldmia sl!, {r0, r1, r2, r3} - stmia sb!, {r0, r1, r2, r3} - subs r8, r8, #1 - bne _02028BA4 - ldr r0, _02028DEC ; =_022A7A6C - ldrsh r1, [r0, #6] - add r1, r1, #1 - strh r1, [r0, #6] -_02028BC4: - add r0, r7, #4 - add r1, r6, #0xbc - bl sub_02029A68 - add r0, r7, #4 - bl sub_02029B0C - b _02028BEC -_02028BDC: -#ifdef JAPAN - strb r0, [r7] -#else - mov r1, #0 - add r0, r7, #4 - strb r1, [r7] - bl sub_02029A50 -#endif -_02028BEC: - ldrsb r3, [r6, #0xb5] -#ifndef JAPAN - strb r3, [r7, #0x2c] -#endif -_02028BF4: - mvn r0, #1 - cmp r3, r0 - bne _02028A94 - ldr r1, _02028DEC ; =_022A7A6C -#ifdef JAPAN - ldrb r0, [r1] -#else - ldrb r0, [r1, #4] -#endif - cmp r0, #0 - beq _02028C20 - ldr r0, _02028E0C ; =_022A7AA0 - mov r2, #0 -#ifdef JAPAN - strb r2, [r1] -#else - strb r2, [r1, #4] -#endif - bl sub_0200A174 -_02028C20: - ldr r1, _02028DEC ; =_022A7A6C -#ifdef JAPAN - ldrb r0, [r1, #4] -#else - ldrb r0, [r1] -#endif - cmp r0, #0 - beq _02028C40 - ldr r0, _02028E10 ; =_022A7A8C - mov r2, #0 -#ifdef JAPAN - strb r2, [r1, #4] -#else - strb r2, [r1] -#endif - bl sub_0200A174 -_02028C40: - ldr r1, _02028DEC ; =_022A7A6C -#ifdef JAPAN - ldrb r0, [r1, #2] -#else - ldrb r0, [r1, #1] -#endif - cmp r0, #0 - beq _02028C60 - ldr r0, _02028E14 ; =_022A7A78 - mov r2, #0 -#ifdef JAPAN - strb r2, [r1, #2] -#else - strb r2, [r1, #1] -#endif - bl sub_0200A174 -_02028C60: - mov r8, #0 - ldr r7, _02028DF0 ; =WINDOW_LIST - mov r6, r8 - mov r5, #0xe0 -_02028C70: - mla sl, r8, r5, r7 - ldrsb r0, [sl, #0xb6] - cmp r0, #0 - ldrne sb, [sl, #0x2c] - cmpne sb, #0 - beq _02028CB8 - ldr r0, [sl, #0x28] - ldr r1, [sl, #0x24] - mov r2, sb - bl Memcpy32 - ldr r0, [sl, #0x24] - bic r1, sb, #3 - add r0, r0, r1 - str r0, [sl, #0x24] - ldr r0, [sl, #0x28] - add r0, r0, r1 - str r0, [sl, #0x28] - str r6, [sl, #0x2c] -_02028CB8: - add r0, r8, #1 - mov r0, r0, lsl #0x18 - mov r8, r0, asr #0x18 - cmp r8, #0x14 - blt _02028C70 - ldr r0, _02028E18 ; =_020AFD9C - ldr r1, _02028E1C ; =_020AFD94 - ldrh r0, [r0] - ldrb r0, [r1, r0] - cmp r0, #0 - beq _02028D08 - ldr r0, _02028E20 ; =_022A7AC8 - bl sub_02029054 - ldr r0, _02028E20 ; =_022A7AC8 - bl sub_0200B330 - ldr r0, _02028E18 ; =_020AFD9C - ldr r1, _02028E1C ; =_020AFD94 - ldrh r0, [r0] - mov r2, #0 - strb r2, [r1, r0] -_02028D08: - bl sub_02028FC8 - ldr r0, _02028DE8 ; =_020AFD4C -#ifdef JAPAN - ldrb r0, [r0, #3] -#else - ldrb r0, [r0] -#endif - cmp r0, #0 - beq _02028D30 - ldr r0, _02028E24 ; =_022A7B00 - bl sub_0200B330 - ldr r0, _02028DE8 ; =_020AFD4C - mov r1, #0 -#ifdef JAPAN - strb r1, [r0, #3] -#else - strb r1, [r0] -#endif -_02028D30: - ldr r0, _02028DE8 ; =_020AFD4C -#ifdef JAPAN - ldrb r0, [r0] -#else - ldrb r0, [r0, #3] -#endif - cmp r0, #0 - beq _02028DD4 - ldr r0, _02028E28 ; =_022A7AE4 - bl sub_0200B330 - ldr r0, _02028DE8 ; =_020AFD4C - mov r1, #0 -#ifdef JAPAN - strb r1, [r0] -#else - strb r1, [r0, #3] -#endif - b _02028DD4 -_02028D58: - ldr r0, _02028DEC ; =_022A7A6C -#ifdef JAPAN - ldr r6, _02028DF0 ; =WINDOW_LIST - ldrsb r2, [r0, #1] - ldr r5, _02028DF4 ; =_022A7B1C - mov sb, #0xe0 - mov sl, #0x2c - mvn r8, #1 - b _02028D90 -_02028D70: - mul r1, r2, sl - ldrb r0, [r5, r1] - mla r7, r2, sb, r6 - cmp r0, #0 - add r0, r5, r1 - beq _02028D8C - add r0, r0, #4 - bl sub_02029B0C -_02028D8C: - ldrsb r2, [r7, #0xb5] -_02028D90: - cmp r2, r8 -#else - ldr r7, _02028DF4 ; =_022A7B1C - ldrsb r0, [r0, #5] - mov r6, #0x30 - mvn r5, #1 - b _02028D90 -_02028D70: - mul r1, r0, r6 - ldrb r0, [r7, r1] - add r8, r7, r1 - cmp r0, #0 - beq _02028D8C - add r0, r8, #4 - bl sub_02029B0C -_02028D8C: - ldrsb r0, [r8, #0x2c] -_02028D90: - cmp r0, r5 -#endif - bne _02028D70 - ldr r0, _02028E18 ; =_020AFD9C - ldr r1, _02028E1C ; =_020AFD94 - ldrh r0, [r0] - ldrb r0, [r1, r0] - cmp r0, #0 - beq _02028DD4 - ldr r0, _02028E20 ; =_022A7AC8 - bl sub_02029054 - ldr r0, _02028E20 ; =_022A7AC8 - bl sub_0200B330 - ldr r0, _02028E18 ; =_020AFD9C - ldr r1, _02028E1C ; =_020AFD94 - ldrh r0, [r0] - mov r2, #0 - strb r2, [r1, r0] -_02028DD4: - bl sub_02029EC4 - bl sub_02029FE8 - mov r0, r4 - bl sub_0202A2C8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02028DE8: .word _020AFD4C -_02028DEC: .word _022A7A6C -_02028DF0: .word WINDOW_LIST -_02028DF4: .word _022A7B1C -_02028DF8: .word _020AFD98 -_02028DFC: .word _0209ACA8 -_02028E00: .word _0209AC64 -_02028E04: .word _0209AC78 -_02028E08: .word _022A7EDC -_02028E0C: .word _022A7AA0 -_02028E10: .word _022A7A8C -_02028E14: .word _022A7A78 -_02028E18: .word _020AFD9C -_02028E1C: .word _020AFD94 -_02028E20: .word _022A7AC8 -_02028E24: .word _022A7B00 -_02028E28: .word _022A7AE4 - arm_func_end sub_02028A64 - - arm_func_start sub_02028E2C -sub_02028E2C: ; 0x02028E2C - ldr r0, _02028E3C ; =_022A7A6C - mov r1, #0 - strh r1, [r0, #6] - bx lr - .align 2, 0 -_02028E3C: .word _022A7A6C - arm_func_end sub_02028E2C - - arm_func_start sub_02028E40 -sub_02028E40: ; 0x02028E40 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, #0 - ldr r5, _02028E80 ; =_022A7EDC - ldr r4, _02028E84 ; =_022A7A6C - b _02028E6C -_02028E54: - add r7, r5, r6, lsl #7 - mov r0, r7 - bl sub_0201F2A0 - add r0, r7, #0x40 - bl sub_0201F2A0 - add r6, r6, #1 -_02028E6C: - ldrsh r0, [r4, #6] - cmp r6, r0 - blt _02028E54 - bl sub_0202A388 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02028E80: .word _022A7EDC -_02028E84: .word _022A7A6C - arm_func_end sub_02028E40 - - arm_func_start sub_02028E88 -sub_02028E88: ; 0x02028E88 - stmdb sp!, {r3, lr} - mov r0, #8 - bl sub_0200302C - ldr r0, _02028ED0 ; =_022A7AC8 - bl sub_0200B340 - ldr r0, _02028ED4 ; =_022A7B00 - bl sub_0200B340 - ldr r0, _02028ED8 ; =_022A7AE4 - bl sub_0200B340 - ldr r0, _02028EDC ; =_022A7AA0 - bl sub_0200A184 - ldr r0, _02028EE0 ; =_022A7A8C - bl sub_0200A184 - ldr r0, _02028EE4 ; =_022A7A78 - bl sub_0200A184 - mov r0, #8 - bl sub_020030FC - ldmia sp!, {r3, pc} - .align 2, 0 -_02028ED0: .word _022A7AC8 -_02028ED4: .word _022A7B00 -_02028ED8: .word _022A7AE4 -_02028EDC: .word _022A7AA0 -_02028EE0: .word _022A7A8C -_02028EE4: .word _022A7A78 - arm_func_end sub_02028E88 - - arm_func_start sub_02028EE8 -sub_02028EE8: ; 0x02028EE8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - mov sb, r1 - mov sl, r0 - mov r8, r2 - mov r7, r3 - bl sub_0202843C - mov r5, r0 - ldr r6, [sb, #4] - add r4, sp, #0 - mov fp, #0 - b _02028F68 -_02028F18: - mov r1, r6, lsr #0x1f - rsb r0, r1, r6, lsl #27 - add r0, r1, r0, ror #27 - str r0, [sp, #4] - ldr r0, [sb] - str r0, [sp] - b _02028F50 -_02028F34: - mov r0, r5 - mov r1, r4 - mov r2, fp - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_02028F50: - ldr r0, [sb] - ldr r1, [sp] - add r0, r0, r8 - cmp r1, r0 - blt _02028F34 - add r6, r6, #1 -_02028F68: - ldr r0, [sb, #4] - add r0, r0, r7 - cmp r6, r0 - blt _02028F18 - mov r0, sl - bl sub_02027AA0 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end sub_02028EE8 - - arm_func_start sub_02028F88 -sub_02028F88: ; 0x02028F88 - stmdb sp!, {r4, lr} - mov r4, r1 - bl sub_0202843C - mov r1, r4 - bl sub_0200B3C0 - ldmia sp!, {r4, pc} - arm_func_end sub_02028F88 - - arm_func_start sub_02028FA0 -sub_02028FA0: ; 0x02028FA0 - mov r1, #0xe0 - mul r1, r0, r1 - ldr r0, _02028FC4 ; =_022A8908 - ldr r0, [r0, r1] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_02028FC4: .word _022A8908 - arm_func_end sub_02028FA0 - - arm_func_start sub_02028FC8 -sub_02028FC8: ; 0x02028FC8 - ldr r0, _02028FDC ; =_020AFD9C - ldrh r1, [r0] - eor r1, r1, #1 - strh r1, [r0] - bx lr - .align 2, 0 -_02028FDC: .word _020AFD9C - arm_func_end sub_02028FC8 - - arm_func_start sub_02028FE0 -sub_02028FE0: ; 0x02028FE0 - ldr r1, _02028FF8 ; =0x00000904 - ldr r2, _02028FFC ; =_022A9A5C - mov r3, #0 - smlabb r0, r0, r1, r2 - str r3, [r0, #0x900] - bx lr - .align 2, 0 -_02028FF8: .word 0x00000904 -_02028FFC: .word _022A9A5C - arm_func_end sub_02028FE0 - - arm_func_start sub_02029000 -sub_02029000: ; 0x02029000 - ldr r2, _02029034 ; =_022A9A5C - ldr r1, _02029038 ; =0x00000904 - smlabb r2, r0, r1, r2 - ldr r0, [r2, #0x900] - add r1, r0, #1 - mov r0, r0, lsl #0x10 - str r1, [r2, #0x900] - cmp r1, #0x10 - mov r1, r0, asr #0x10 - movge r0, #0x10 - strge r0, [r2, #0x900] - add r0, r2, r1, lsl #4 - bx lr - .align 2, 0 -_02029034: .word _022A9A5C -_02029038: .word 0x00000904 - arm_func_end sub_02029000 - - arm_func_start sub_0202903C -sub_0202903C: ; 0x0202903C - ldr r0, _0202904C ; =_020AFD9C - ldr ip, _02029050 ; =sub_02028FE0 - ldrsh r0, [r0] - bx ip - .align 2, 0 -_0202904C: .word _020AFD9C -_02029050: .word sub_02028FE0 - arm_func_end sub_0202903C - - arm_func_start sub_02029054 -sub_02029054: ; 0x02029054 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - ldr r2, _02029144 ; =_020AFD9C - ldr r1, _02029148 ; =0x00000904 - ldrh sl, [r2] - ldr r6, _0202914C ; =_022A9A5C - ldr r2, _02029150 ; =_022AA35C - mul r3, sl, r1 - smlabb r4, sl, r1, r6 - ldr r1, [r2, r3] - add r5, r4, #0x100 - mov fp, r0 - mov r4, r1, lsl #0x10 - add sb, r6, r3 - mov r7, #0 - b _02029120 -_02029094: - add r8, sb, r7, lsl #4 - ldr r6, [r8, #4] - b _02029100 -_020290A0: - mov r1, r6, lsr #0x1f - rsb r0, r1, r6, lsl #27 - ldr r2, [r8] - add r0, r1, r0, ror #27 - str r0, [sp, #4] - str r2, [sp] - b _020290E4 -_020290BC: - ldr r0, [sp, #4] - mov r1, r2, lsl #1 - add r0, r5, r0, lsl #6 - ldrh r2, [r1, r0] - mov r0, fp - add r1, sp, #0 - bl sub_0200B3FC - ldr r0, [sp] - add r0, r0, #1 - str r0, [sp] -_020290E4: - ldr r1, [r8] - ldr r0, [r8, #8] - ldr r2, [sp] - add r0, r1, r0 - cmp r2, r0 - blt _020290BC - add r6, r6, #1 -_02029100: - ldr r1, [r8, #4] - ldr r0, [r8, #0xc] - add r0, r1, r0 - cmp r6, r0 - blt _020290A0 - add r0, r7, #1 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 -_02029120: - cmp r7, r4, asr #16 - blt _02029094 - ldr r0, _02029148 ; =0x00000904 - ldr r1, _0202914C ; =_022A9A5C - mov r2, #0 - smlabb r0, sl, r0, r1 - str r2, [r0, #0x900] - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02029144: .word _020AFD9C -_02029148: .word 0x00000904 -_0202914C: .word _022A9A5C -_02029150: .word _022AA35C - arm_func_end sub_02029054 - - arm_func_start sub_02029154 -sub_02029154: ; 0x02029154 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r4, _020291F0 ; =_020AFD9C - mov r7, r0 - ldrh r0, [r4] - mov r6, r1 - mov r5, r2 - eor r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r4, r3 - bl sub_02029000 - ldr r1, _020291F0 ; =_020AFD9C - ldr ip, _020291F4 ; =_022A9A5C - ldrh r3, [r1] - ldr r2, _020291F8 ; =0x00000904 - add r1, r7, r5 - str r7, [r0] - eor r3, r3, #1 - smlabb r2, r3, r2, ip - str r6, [r0, #4] - str r5, [r0, #8] - str r4, [r0, #0xc] - add r5, r2, #0x100 - add ip, r6, r4 - mov r3, #0 - b _020291E4 -_020291BC: - mov r0, r6, lsl #5 - mov r4, r7 - add r0, r5, r0, lsl #1 - b _020291D8 -_020291CC: - mov r2, r4, lsl #1 - strh r3, [r2, r0] - add r4, r4, #1 -_020291D8: - cmp r4, r1 - blt _020291CC - add r6, r6, #1 -_020291E4: - cmp r6, ip - blt _020291BC - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_020291F0: .word _020AFD9C -_020291F4: .word _022A9A5C -_020291F8: .word 0x00000904 - arm_func_end sub_02029154 - - arm_func_start sub_020291FC -sub_020291FC: ; 0x020291FC - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r4, _0202946C ; =_020AFD9C - mov r5, r0 - ldrh r0, [r4] - mov r4, r1 - mov r8, r2 - eor r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r7, r3 - ldr r6, [sp, #0x18] - bl sub_02029000 - ldr r1, _0202946C ; =_020AFD9C - ldr ip, _02029470 ; =_022A9A5C - ldrh r3, [r1] - ldr r1, _02029474 ; =0x00000904 - ldrb r2, [sp, #0x1c] - str r5, [r0] - eor r3, r3, #1 - smlabb r1, r3, r1, ip - stmib r0, {r4, r8} - str r7, [r0, #0xc] - cmp r2, #0 - add r1, r1, #0x100 - beq _020292BC - orr r2, r6, #0x400 - mov r2, r2, lsl #0x10 - add r3, r5, r8 - mov r6, r2, lsr #0x10 - sub ip, r3, #1 - add lr, r4, r7 - b _020292B0 -_0202927C: - mov r2, r4, lsl #5 - mov r8, ip - add r3, r1, r2, lsl #1 - b _020292A4 -_0202928C: - add r2, r6, #1 - mov r7, r8, lsl #1 - mov r2, r2, lsl #0x10 - strh r6, [r7, r3] - mov r6, r2, lsr #0x10 - sub r8, r8, #1 -_020292A4: - cmp r8, r5 - bge _0202928C - add r4, r4, #1 -_020292B0: - cmp r4, lr - blt _0202927C - b _02029310 -_020292BC: - add r2, r5, r8 - add r3, r4, r7 - b _02029308 -_020292C8: - mov r8, r4, lsr #0x1f - rsb r7, r8, r4, lsl #27 - add r7, r8, r7, ror #27 - mov r7, r7, lsl #5 - mov ip, r5 - add r8, r1, r7, lsl #1 - b _020292FC -_020292E4: - add r7, r6, #1 - mov lr, ip, lsl #1 - mov r7, r7, lsl #0x10 - strh r6, [lr, r8] - mov r6, r7, lsr #0x10 - add ip, ip, #1 -_020292FC: - cmp ip, r2 - blt _020292E4 - add r4, r4, #1 -_02029308: - cmp r4, r3 - blt _020292C8 -_02029310: - ldrb r2, [sp, #0x20] - cmp r2, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - ldr r2, [r0] - subs r2, r2, #1 - str r2, [r0] - movmi r2, #0 - strmi r2, [r0] - ldr r2, [r0, #4] - subs r2, r2, #1 - str r2, [r0, #4] - movmi r2, #0 - strmi r2, [r0, #4] - ldr r2, [r0, #8] - add r2, r2, #1 - str r2, [r0, #8] - cmp r2, #0x20 - movgt r2, #0x20 - strgt r2, [r0, #8] - ldr r2, [r0, #0xc] - add r2, r2, #1 - str r2, [r0, #0xc] - cmp r2, #0x20 - movgt r2, #0x20 - strgt r2, [r0, #0xc] - ldr r5, [r0, #0xc] - ldmia r0, {r2, r3, r6} - mov r0, r3, lsl #0x10 - mov r4, r2, lsl #0x10 - mov r5, r5, lsl #0x10 - mov r3, r6, lsl #0x10 - movs r2, r0, asr #0x10 - mov r4, r4, asr #0x10 - bmi _020293D8 - mov r0, r2, lsl #5 - mov r8, r4 - add ip, r4, r3, asr #16 - add r6, r1, r0, lsl #1 - mov r7, #0 - b _020293D0 -_020293B0: - cmp r8, #0 - blt _020293C4 - cmp r8, #0x20 - movlt r0, r8, lsl #1 - strlth r7, [r0, r6] -_020293C4: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 -_020293D0: - cmp r8, ip - ble _020293B0 -_020293D8: - add r3, r4, r3, asr #16 - add r0, r2, r5, asr #16 - mov r5, r3, lsl #0x10 - mov r8, r5, asr #0x10 - mov lr, #0 - mov ip, r4, lsl #1 - mov r6, r8, lsl #1 - mov r7, lr - b _02029420 -_020293FC: - cmp r4, #0 - addge r5, r1, r2, lsl #6 - strgeh lr, [ip, r5] - cmp r8, #0x20 - addlt r5, r1, r2, lsl #6 - add r2, r2, #1 - mov r2, r2, lsl #0x10 - strlth r7, [r6, r5] - mov r2, r2, asr #0x10 -_02029420: - cmp r2, r0 - blt _020293FC - cmp r2, #0x18 - ldmgeia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r2, lsl #5 - add r1, r1, r0, lsl #1 - mov r2, #0 - b _02029460 -_02029440: - cmp r4, #0 - blt _02029454 - cmp r4, #0x20 - movlt r0, r4, lsl #1 - strlth r2, [r0, r1] -_02029454: - add r0, r4, #1 - mov r0, r0, lsl #0x10 - mov r4, r0, asr #0x10 -_02029460: - cmp r4, r3 - ble _02029440 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0202946C: .word _020AFD9C -_02029470: .word _022A9A5C -_02029474: .word 0x00000904 - arm_func_end sub_020291FC - - arm_func_start sub_02029478 -sub_02029478: ; 0x02029478 - stmdb sp!, {r3, lr} - sub sp, sp, #0x10 - mvn r2, #0 - cmp r1, r2 - ldrnesh r2, [r0, #0x24] - cmpne r1, r2 - beq _020294FC - ldrb r0, [r0, #0x26] - cmp r0, #0 - bne _020294D0 - mov r0, #0xf - str r0, [sp] - mov r0, #4 - str r0, [sp, #4] - mov r2, #1 - ldr r0, _02029504 ; =CURSOR_ANIMATION_CONTROL - str r2, [sp, #8] - mov r2, #0 - mov r3, #0x3f8 - str r2, [sp, #0xc] - bl SetAnimationForAnimationControl - b _020294FC -_020294D0: - mov r0, #0xe - str r0, [sp] - mov r0, #4 - str r0, [sp, #4] - mov ip, #1 - str ip, [sp, #8] - ldr r0, _02029508 ; =CURSOR_16_ANIMATION_CONTROL - mov r2, #0 - mov r3, #0x7c - str ip, [sp, #0xc] - bl SetAnimationForAnimationControl -_020294FC: - add sp, sp, #0x10 - ldmia sp!, {r3, pc} - .align 2, 0 -_02029504: .word CURSOR_ANIMATION_CONTROL -_02029508: .word CURSOR_16_ANIMATION_CONTROL - arm_func_end sub_02029478 - - arm_func_start LoadCursors -LoadCursors: ; 0x0202950C - stmdb sp!, {r3, lr} - sub sp, sp, #0x10 - ldr r0, _02029654 ; =PREV_MENU_ITEMS - mov r1, #0 - mov r2, #0x15 - bl memset - ldr r0, _02029658 ; =WAN_TABLE - ldr r1, _0202965C ; =_0209ADF0 - ldr r0, [r0] - mov r2, #0 - bl LoadWanTableEntry - ldr r2, _02029660 ; =CURSOR_16_SPRITE_ID - ldr r1, _02029658 ; =WAN_TABLE - strh r0, [r2, #2] - ldr r0, [r1] - ldr r1, _02029664 ; =_0209AE08 - mov r2, #0 - bl LoadWanTableEntry - ldr r1, _02029660 ; =CURSOR_16_SPRITE_ID - mov r3, #1 - strh r0, [r1] - str r3, [sp] - mov r0, #0 - str r0, [sp, #4] - ldrsh r0, [r1, #2] - mov r1, #0x3f8 - mov r2, #0xf - bl sub_0201D9C8 - mov r3, #1 - str r3, [sp] - str r3, [sp, #4] - ldr r0, _02029660 ; =CURSOR_16_SPRITE_ID - mov r1, #0x7c - ldrsh r0, [r0] - mov r2, #0xe - bl sub_0201D9C8 - ldr r0, _02029668 ; =CURSOR_ANIMATION_CONTROL - bl InitAnimationControlWithSet__0201C0B0 - ldr r0, _02029668 ; =CURSOR_ANIMATION_CONTROL - ldr r1, _02029660 ; =CURSOR_16_SPRITE_ID - ldrsh r1, [r1, #2] - bl SetSpriteIdForAnimationControl - mov r0, #0xf - str r0, [sp] - mov r0, #4 - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r1, #0 - str r1, [sp, #0xc] - ldr r0, _02029668 ; =CURSOR_ANIMATION_CONTROL - mov r2, r1 - mov r3, #0x3f8 - bl SetAnimationForAnimationControl - mov r1, #0 - ldr r0, _02029668 ; =CURSOR_ANIMATION_CONTROL - strh r1, [r0, #0x38] - bl sub_0201C108 - ldr r0, _0202966C ; =CURSOR_16_ANIMATION_CONTROL - bl InitAnimationControlWithSet__0201C0B0 - ldr r0, _0202966C ; =CURSOR_16_ANIMATION_CONTROL - ldr r1, _02029660 ; =CURSOR_16_SPRITE_ID - ldrsh r1, [r1] - bl SetSpriteIdForAnimationControl - mov r0, #0xe - str r0, [sp] - mov r0, #4 - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - str r0, [sp, #0xc] - ldr r0, _0202966C ; =CURSOR_16_ANIMATION_CONTROL - mov r1, #0 - mov r2, r1 - mov r3, #0x7c - bl SetAnimationForAnimationControl - ldr r0, _0202966C ; =CURSOR_16_ANIMATION_CONTROL - mov r1, #0 - strh r1, [r0, #0x38] - bl sub_0201C108 - add sp, sp, #0x10 - ldmia sp!, {r3, pc} - .align 2, 0 -_02029654: .word PREV_MENU_ITEMS -_02029658: .word WAN_TABLE -_0202965C: .word _0209ADF0 -_02029660: .word CURSOR_16_SPRITE_ID -_02029664: .word _0209AE08 -_02029668: .word CURSOR_ANIMATION_CONTROL -_0202966C: .word CURSOR_16_ANIMATION_CONTROL - arm_func_end LoadCursors - - arm_func_start InitWindowTrailer -InitWindowTrailer: ; 0x02029670 - mov r1, #0 - str r1, [r0] - strb r1, [r0, #4] - strb r1, [r0, #0x19] - strb r1, [r0, #0x18] - bx lr - arm_func_end InitWindowTrailer - - arm_func_start sub_02029688 -sub_02029688: ; 0x02029688 - cmp r2, #1 - cmpeq r3, #0 - moveq r2, #2 - cmp r1, #0 - ldreq r1, [r0] - cmpeq r1, r2 - ldreq r3, [r0, #8] - ldreq r1, [sp] - cmpeq r3, r1 - ldreq r3, [r0, #0xc] - ldreq r1, [sp, #4] - cmpeq r3, r1 - bxeq lr - str r2, [r0] - mov r1, #1 - ldr r2, [sp] - strb r1, [r0, #4] - ldr r1, [sp, #4] - str r2, [r0, #8] - str r1, [r0, #0xc] - mov r1, #0 - str r1, [r0, #0x10] - str r1, [r0, #0x14] - bx lr - arm_func_end sub_02029688 - - arm_func_start sub_020296E8 -sub_020296E8: ; 0x020296E8 - cmp r1, #0 - ldreq r1, [r0] - cmpeq r1, r2 - ldreq r3, [r0, #8] - ldreq r1, [sp] - cmpeq r3, r1 - ldreq r3, [r0, #0xc] - ldreq r1, [sp, #4] - cmpeq r3, r1 - ldreq r3, [r0, #0x10] - ldreq r1, [sp, #8] - cmpeq r3, r1 - ldreq r3, [r0, #0x14] - ldreq r1, [sp, #0xc] - cmpeq r3, r1 - bxeq lr - str r2, [r0] - mov r1, #1 - ldr r2, [sp] - strb r1, [r0, #4] - ldr r1, [sp, #4] - str r2, [r0, #8] - ldr r2, [sp, #8] - str r1, [r0, #0xc] - ldr r1, [sp, #0xc] - str r2, [r0, #0x10] - str r1, [r0, #0x14] - bx lr - arm_func_end sub_020296E8 - - arm_func_start sub_02029758 -sub_02029758: ; 0x02029758 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - mov r4, r1 - ldr r1, [r4, #0xc0] - mov r5, r0 - mov r6, r2 - cmp r1, #0 - ble _0202980C - ldr r0, [r4, #0x10] - tst r0, #0x4000000 - bne _020297C8 - ldr r1, [r4, #0xbc] - mov r0, r4 - bl GetPageItemYOffset - ldr r2, [r4, #8] - ldr r1, [r4, #0xb0] - mov r3, r6 - add r1, r2, r1 - str r1, [sp] - ldr r1, [r4] - mov r2, #1 - add r0, r1, r0 - str r0, [sp, #4] - ldrb r1, [r4, #0xd4] - mov r0, r5 - bl sub_02029688 - mov r0, #0 - strb r0, [r4, #0xd4] -_020297C8: - mov r0, r4 - bl sub_0203293C - strb r0, [r5, #0x18] - mov r0, r4 - bl sub_02032918 - strb r0, [r5, #0x19] - tst r0, #0xff - ldreqb r0, [r5, #0x18] - cmpeq r0, #0 - beq _02029820 - ldr r0, [r4, #0xc] - sub r0, r0, #2 - str r0, [r5, #0x1c] - ldr r0, [r4] - sub r0, r0, #2 - str r0, [r5, #0x20] - b _02029820 -_0202980C: - mov r0, #0 - str r0, [r5] - strb r0, [r5, #4] - strb r0, [r5, #0x19] - strb r0, [r5, #0x18] -_02029820: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_02029758 - - arm_func_start sub_02029828 -sub_02029828: ; 0x02029828 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - mov r4, r1 - ldr r1, [r4, #0xc0] - mov r5, r0 - mov r6, r2 - cmp r1, #0 - ble _020298DC - ldr r0, [r4, #0x10] - tst r0, #0x4000000 - bne _02029898 - ldr r1, [r4, #0xbc] - mov r0, r4 - bl sub_02033350 - ldr r2, [r4, #8] - ldr r1, [r4, #0xb0] - mov r3, r6 - add r1, r2, r1 - str r1, [sp] - ldr r1, [r4] - mov r2, #1 - add r0, r1, r0 - str r0, [sp, #4] - ldrb r1, [r4, #0xd4] - mov r0, r5 - bl sub_02029688 - mov r0, #0 - strb r0, [r4, #0xd4] -_02029898: - mov r0, r4 - bl sub_020333B4 - strb r0, [r5, #0x18] - mov r0, r4 - bl sub_02033390 - strb r0, [r5, #0x19] - tst r0, #0xff - ldreqb r0, [r5, #0x18] - cmpeq r0, #0 - beq _020298F0 - ldr r0, [r4, #0xc] - sub r0, r0, #2 - str r0, [r5, #0x1c] - ldr r0, [r4] - sub r0, r0, #2 - str r0, [r5, #0x20] - b _020298F0 -_020298DC: - mov r0, #0 - str r0, [r5] - strb r0, [r5, #4] - strb r0, [r5, #0x19] - strb r0, [r5, #0x18] -_020298F0: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_02029828 - - arm_func_start sub_020298F8 -sub_020298F8: ; 0x020298F8 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #8 - mov r4, r1 - ldr r1, [r4, #0x10] - mov r5, r0 - mov lr, r2 - tst r1, #0x4000000 - bne _02029950 - ldr ip, [r4, #8] - ldr r1, [sp, #0x18] - mov r2, r3 - add r1, ip, r1 - str r1, [sp] - ldr ip, [r4] - ldr r1, [sp, #0x1c] - mov r3, lr - add r1, ip, r1 - str r1, [sp, #4] - ldrb r1, [r4, #0xd4] - bl sub_02029688 - mov r0, #0 - strb r0, [r4, #0xd4] -_02029950: - mov r0, r4 - bl sub_0203293C - strb r0, [r5, #0x18] - mov r0, r4 - bl sub_02032918 - strb r0, [r5, #0x19] - tst r0, #0xff - ldreqb r0, [r5, #0x18] - cmpeq r0, #0 - beq _02029990 - ldr r0, [r4, #0xc] - sub r0, r0, #2 - str r0, [r5, #0x1c] - ldr r0, [r4] - sub r0, r0, #2 - str r0, [r5, #0x20] -_02029990: - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_020298F8 - - arm_func_start sub_02029998 -sub_02029998: ; 0x02029998 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x10 - mov r4, r1 - ldr r1, [r4, #0x10] - mov r5, r0 - mov lr, r2 - tst r1, #0x4000000 - bne _02029A08 - ldr r1, [r4, #8] - ldr r6, [sp, #0x28] - ldr r7, [sp, #0x30] - ldr ip, [r4] - ldr r2, [sp, #0x2c] - add r8, r1, r6 - ldr r6, [sp, #0x34] - str r8, [sp] - add r8, ip, r2 - mov r2, r3 - str r8, [sp, #4] - add r1, r1, r7 - str r1, [sp, #8] - add r1, ip, r6 - str r1, [sp, #0xc] - ldrb r1, [r4, #0xd4] - mov r3, lr - bl sub_020296E8 - mov r0, #0 - strb r0, [r4, #0xd4] -_02029A08: - mov r0, r4 - bl sub_0203293C - strb r0, [r5, #0x18] - mov r0, r4 - bl sub_02032918 - strb r0, [r5, #0x19] - tst r0, #0xff - ldreqb r0, [r5, #0x18] - cmpeq r0, #0 - beq _02029A48 - ldr r0, [r4, #0xc] - sub r0, r0, #2 - str r0, [r5, #0x1c] - ldr r0, [r4] - sub r0, r0, #2 - str r0, [r5, #0x20] -_02029A48: - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - arm_func_end sub_02029998 diff --git a/asm/main_02027AA0.s b/asm/main_02027AA0.s new file mode 100644 index 00000000..22746859 --- /dev/null +++ b/asm/main_02027AA0.s @@ -0,0 +1,627 @@ + .include "asm/macros.inc" + .include "main_02027AA0.inc" + + .text + + arm_func_start sub_02027AA0 +sub_02027AA0: ; 0x02027AA0 + cmp r0, #1 + ldreq r0, _02027AE4 ; =_020AFD4C + moveq r1, #1 +#ifdef JAPAN + streqb r1, [r0, #3] +#else + streqb r1, [r0] +#endif + bxeq lr + cmp r0, #2 + ldreq r0, _02027AE4 ; =_020AFD4C + moveq r1, #1 +#ifdef JAPAN + streqb r1, [r0] +#else + streqb r1, [r0, #3] +#endif + bxeq lr + ldr r0, _02027AE8 ; =_020AFD9C + ldr r1, _02027AEC ; =_020AFD94 + ldrh r0, [r0] + mov r2, #1 + eor r0, r0, #1 + strb r2, [r1, r0] + bx lr + .align 2, 0 +_02027AE4: .word _020AFD4C +_02027AE8: .word _020AFD9C +_02027AEC: .word _020AFD94 + arm_func_end sub_02027AA0 + + arm_func_start UpdateWindow +UpdateWindow: ; 0x02027AF0 + ldr r2, _02027B18 ; =WINDOW_LIST + mov r1, #0xe0 + mla r1, r0, r1, r2 + ldr r0, [r1, #0x14] + str r0, [r1, #0x24] + ldr r0, [r1, #0x18] + str r0, [r1, #0x28] + ldr r0, [r1, #0x1c] + str r0, [r1, #0x2c] + bx lr + .align 2, 0 +_02027B18: .word WINDOW_LIST + arm_func_end UpdateWindow + + arm_func_start sub_02027B1C +sub_02027B1C: ; 0x02027B1C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0xe0 + mul r2, r4, r0 + ldr r0, _02027B50 ; =_022A88F0 + ldr r1, _02027B54 ; =_022A88F8 + ldr r0, [r0, r2] + ldr r2, [r1, r2] + mov r1, #0 + bl memset + mov r0, r4 + bl UpdateWindow + ldmia sp!, {r4, pc} + .align 2, 0 +_02027B50: .word _022A88F0 +_02027B54: .word _022A88F8 + arm_func_end sub_02027B1C + + arm_func_start ClearWindow +ClearWindow: ; 0x02027B58 + mov r1, #0xe0 + mul r2, r0, r1 + ldr r0, _02027B7C ; =_022A88F0 + ldr r1, _02027B80 ; =_022A88F8 + ldr r0, [r0, r2] + ldr r2, [r1, r2] + ldr ip, _02027B84 ; =memset + mov r1, #0 + bx ip + .align 2, 0 +_02027B7C: .word _022A88F0 +_02027B80: .word _022A88F8 +_02027B84: .word memset + arm_func_end ClearWindow + + arm_func_start sub_02027B88 +sub_02027B88: ; 0x02027B88 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + ldr r0, _02027E14 ; =_022A7A6C +#ifdef JAPAN + ldrsb r2, [r0, #1] +#else + ldrsb r2, [r0, #3] +#endif + b _02027E00 +_02027B9C: + ldr r1, _02027E18 ; =WINDOW_LIST + mov r0, #0xe0 + mla r4, r2, r0, r1 + ldrb r0, [r4, #8] + cmp r0, #1 + ldreqsb r0, [r4, #0xb6] + cmpeq r0, #2 + bne _02027DFC + ldrsb r1, [r4, #9] + ldr r0, _02027E1C ; =_0209AC64 + rsb r1, r1, #0 + mov r1, r1, lsl #1 + ldrsb r0, [r0, r1] + cmp r0, #0 + bne _02027DF0 + ldr r0, _02027E20 ; =_020AFD98 + ldrb r1, [r4, #4] + ldrb r3, [r0, #1] + ldr r2, _02027E24 ; =_0209ACAC + sub r6, r1, #1 + ldrb r2, [r2, r3] + ldrb r0, [r4, #5] + add r1, sp, #0 + mov r5, r2, lsl #0xc + sub r3, r0, #1 + orr r0, r5, #2 + mov r2, r0, lsl #0x10 + ldr r0, _02027E28 ; =_022A7AE4 + str r6, [sp] + mov r2, r2, lsr #0x10 + str r3, [sp, #4] + bl sub_0200B3FC + ldr r1, [sp] + orr r0, r5, #3 + add r1, r1, #1 + mov r0, r0, lsl #0x10 + str r1, [sp] + mov r6, r0, lsr #0x10 + ldr r8, _02027E28 ; =_022A7AE4 + add r7, sp, #0 + b _02027C5C +_02027C40: + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_02027C5C: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + ldr r2, [sp] + add r0, r1, r0 + cmp r2, r0 + blt _02027C40 + orr r0, r5, #4 + mov r2, r0, lsl #0x10 + ldr r0, _02027E28 ; =_022A7AE4 + add r1, sp, #0 + mov r2, r2, lsr #0x10 + bl sub_0200B3FC + ldr r0, [sp, #4] + orr r1, r5, #5 + add r0, r0, #1 + str r0, [sp, #4] + orr r0, r5, #1 + orr r2, r5, #6 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r2, r2, lsl #0x10 + mov r7, r0, lsr #0x10 + mov r8, r1, lsr #0x10 + mov r6, r2, lsr #0x10 + ldr sl, _02027E28 ; =_022A7AE4 + add sb, sp, #0 + b _02027D44 +_02027CC8: + ldrb r2, [r4, #4] + mov r0, sl + mov r1, sb + sub r3, r2, #1 + mov r2, r8 + str r3, [sp] + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] + b _02027D10 +_02027CF4: + mov r0, sl + mov r1, sb + mov r2, r7 + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_02027D10: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + ldr r2, [sp] + add r0, r1, r0 + cmp r2, r0 + blt _02027CF4 + mov r0, sl + mov r1, sb + mov r2, r6 + bl sub_0200B3FC + ldr r0, [sp, #4] + add r0, r0, #1 + str r0, [sp, #4] +_02027D44: + ldrb r1, [r4, #5] + ldrb r0, [r4, #7] + ldr r2, [sp, #4] + add r0, r1, r0 + cmp r2, r0 + blt _02027CC8 + ldrb r1, [r4, #4] + orr r0, r5, #7 + mov r2, r0, lsl #0x10 + sub r3, r1, #1 + ldr r0, _02027E28 ; =_022A7AE4 + add r1, sp, #0 + str r3, [sp] + mov r2, r2, lsr #0x10 + bl sub_0200B3FC + ldr r1, [sp] + orr r0, r5, #8 + add r1, r1, #1 + mov r0, r0, lsl #0x10 + str r1, [sp] + mov r6, r0, lsr #0x10 + ldr r8, _02027E28 ; =_022A7AE4 + add r7, sp, #0 + b _02027DC0 +_02027DA4: + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_02027DC0: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + ldr r2, [sp] + add r0, r1, r0 + cmp r2, r0 + blt _02027DA4 + orr r0, r5, #9 + mov r2, r0, lsl #0x10 + ldr r0, _02027E28 ; =_022A7AE4 + add r1, sp, #0 + mov r2, r2, lsr #0x10 + bl sub_0200B3FC +_02027DF0: + ldr r0, _02027E2C ; =_020AFD4C + mov r1, #1 +#ifdef JAPAN + strb r1, [r0] +#else + strb r1, [r0, #3] +#endif +_02027DFC: + ldrsb r2, [r4, #0xb5] +_02027E00: + mvn r0, #1 + cmp r2, r0 + bne _02027B9C + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02027E14: .word _022A7A6C +_02027E18: .word WINDOW_LIST +_02027E1C: .word _0209AC64 +_02027E20: .word _020AFD98 +_02027E24: .word _0209ACAC +_02027E28: .word _022A7AE4 +_02027E2C: .word _020AFD4C + arm_func_end sub_02027B88 + + arm_func_start sub_02027E30 +sub_02027E30: ; 0x02027E30 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #8 + ldr r3, _02028070 ; =WINDOW_LIST + mov r2, #0xe0 + mla r7, r0, r2, r3 + ldrsb r0, [r7, #9] + ldr r2, _02028074 ; =_0209AC64 + cmp r1, #0 + rsb r0, r0, #0 + add r4, r2, r0, lsl #1 + movne r0, #2 + moveq r0, #3 + strb r0, [r7, #0xb6] + ldrb r0, [r7, #8] + cmp r0, #1 + bne _02027F34 + cmp r1, #0 + bne _02027F20 + ldrsb r1, [r7, #0x10] + ldr r2, _02028070 ; =WINDOW_LIST + mov r0, #0xe0 + mla r0, r1, r0, r2 + add r0, r0, #0xbc + bl InitWindowTrailer + ldrsb r0, [r4] + cmp r0, #0 + blt _02027F20 + ldrb r0, [r7, #5] + ldr r6, _02028078 ; =_022A7AE4 + add r5, sp, #0 + sub r0, r0, #1 + str r0, [sp, #4] + mov r4, #0 + b _02027F08 +_02027EB8: + ldrb r0, [r7, #4] + sub r0, r0, #1 + str r0, [sp] + b _02027EE4 +_02027EC8: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_02027EE4: + ldrb r1, [r7, #4] + ldrb r0, [r7, #6] + ldr r2, [sp] + add r0, r1, r0 + cmp r2, r0 + ble _02027EC8 + ldr r0, [sp, #4] + add r0, r0, #1 + str r0, [sp, #4] +_02027F08: + ldrb r1, [r7, #5] + ldrb r0, [r7, #7] + ldr r2, [sp, #4] + add r0, r1, r0 + cmp r2, r0 + ble _02027EB8 +_02027F20: + bl sub_02027B88 + ldr r0, _0202807C ; =_020AFD4C + mov r1, #1 +#ifdef JAPAN + strb r1, [r0] +#else + strb r1, [r0, #3] +#endif + b _02028064 +_02027F34: + cmp r1, #0 + beq _0202801C + ldrb r1, [r7, #4] + mvn r0, #3 + mov r1, r1, lsl #3 + strh r1, [r7, #0x34] + ldrb r1, [r7, #5] + mov r1, r1, lsl #3 + strh r1, [r7, #0x36] + ldrb r1, [r7, #6] + mov r1, r1, lsl #3 + strh r1, [r7, #0x38] + ldrb r1, [r7, #7] + mov r1, r1, lsl #3 + strh r1, [r7, #0x3a] + ldrh r1, [r7, #0x34] + strh r1, [r7, #0x74] + ldrh r1, [r7, #0x36] + strh r1, [r7, #0x76] + ldrh r1, [r7, #0x38] + strh r1, [r7, #0x78] + ldrh r1, [r7, #0x3a] + strh r1, [r7, #0x7a] + ldrsh r1, [r7, #0x74] + sub r1, r1, #8 + strh r1, [r7, #0x74] + ldrsh r1, [r7, #0x76] + sub r1, r1, #8 + strh r1, [r7, #0x76] + ldrsh r1, [r7, #0x78] + add r1, r1, #0x10 + strh r1, [r7, #0x78] + ldrsh r1, [r7, #0x7a] + add r1, r1, #0x10 + strh r1, [r7, #0x7a] + ldrsb r1, [r7, #9] + cmp r1, r0 + beq _02027FFC + ldrsh r0, [r7, #0x34] + sub r0, r0, #1 + strh r0, [r7, #0x34] + ldrsh r0, [r7, #0x36] + sub r0, r0, #2 + strh r0, [r7, #0x36] + ldrsh r0, [r7, #0x38] + add r0, r0, #2 + strh r0, [r7, #0x38] + ldrsh r0, [r7, #0x3a] + add r0, r0, #6 + strh r0, [r7, #0x3a] +_02027FFC: + ldr r0, _0202807C ; =_020AFD4C + ldrb r0, [r0, #1] + cmp r0, #0 + movne r0, #0x90 + strneb r0, [r7, #0x63] + moveq r0, #0xff + streqb r0, [r7, #0x63] + b _02028064 +_0202801C: + ldrsb r1, [r7, #0x10] + ldr r2, _02028070 ; =WINDOW_LIST + mov r0, #0xe0 + mla r0, r1, r0, r2 + add r0, r0, #0xbc + bl InitWindowTrailer + mov r0, #0 + strh r0, [r7, #0x3a] + strh r0, [r7, #0x38] + strh r0, [r7, #0x36] + strh r0, [r7, #0x34] + strh r0, [r7, #0x74] + ldrh r0, [r7, #0x36] + strh r0, [r7, #0x76] + ldrh r0, [r7, #0x38] + strh r0, [r7, #0x78] + ldrh r0, [r7, #0x3a] + strh r0, [r7, #0x7a] +_02028064: + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02028070: .word WINDOW_LIST +_02028074: .word _0209AC64 +_02028078: .word _022A7AE4 +_0202807C: .word _020AFD4C + arm_func_end sub_02027E30 + + arm_func_start sub_02028080 +sub_02028080: ; 0x02028080 + stmdb sp!, {r4, lr} + ldr r3, _020280B8 ; =WINDOW_LIST + mov r2, #0xe0 + mla r4, r0, r2, r3 + strb r1, [r4, #9] + ldrsb r0, [r4, #0x10] + bl UpdateWindow + ldr r0, _020280BC ; =_020AFD4C + ldrb r1, [r4, #8] + ldr r3, [r0, #8] + mov r2, #1 + orr r1, r3, r2, lsl r1 + str r1, [r0, #8] + ldmia sp!, {r4, pc} + .align 2, 0 +_020280B8: .word WINDOW_LIST +_020280BC: .word _020AFD4C + arm_func_end sub_02028080 + + arm_func_start sub_020280C0 +sub_020280C0: ; 0x020280C0 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r1, #1 + mov r5, r0 + bl sub_02027E30 + cmp r4, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r1, #0xe0 + mul r3, r5, r1 + ldr r2, _02028104 ; =_022A88E4 + ldr r1, _02028108 ; =_020AFD4C + ldrb r2, [r2, r3] + ldr ip, [r1, #8] + mov r3, #1 + orr r2, ip, r3, lsl r2 + str r2, [r1, #8] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02028104: .word _022A88E4 +_02028108: .word _020AFD4C + arm_func_end sub_020280C0 + + arm_func_start sub_0202810C +sub_0202810C: ; 0x0202810C + ldr ip, _02028118 ; =sub_020280C0 + mov r1, #1 + bx ip + .align 2, 0 +_02028118: .word sub_020280C0 + arm_func_end sub_0202810C + + arm_func_start sub_0202811C +sub_0202811C: ; 0x0202811C + ldr ip, _02028128 ; =sub_02027E30 + mov r1, #1 + bx ip + .align 2, 0 +_02028128: .word sub_02027E30 + arm_func_end sub_0202811C + + arm_func_start sub_0202812C +sub_0202812C: ; 0x0202812C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r1, #0xe0 + mul r5, r6, r1 + ldr r1, _02028188 ; =_022A8992 + ldrsb r1, [r1, r5] + cmp r1, #3 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} + mov r1, #0 + bl sub_02027E30 + mov r4, r0 + mov r0, r6 + bl sub_0202836C + ldr r0, _0202818C ; =_022A88E4 + ldr r1, _02028190 ; =_020AFD4C + ldrb r0, [r0, r5] + ldr r3, [r1, #8] + mov r2, #1 + orr r2, r3, r2, lsl r0 + mov r0, r4 + str r2, [r1, #8] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02028188: .word _022A8992 +_0202818C: .word _022A88E4 +_02028190: .word _020AFD4C + arm_func_end sub_0202812C + + arm_func_start DeleteWindow +DeleteWindow: ; 0x02028194 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _02028224 ; =WINDOW_LIST + mov r1, #0xe0 + mla r4, r0, r1, r2 + bl sub_0202812C + ldrb r5, [r4, #8] + ldr lr, _02028224 ; =WINDOW_LIST + mov ip, #1 + mov r3, #0 +_020281B8: + cmp lr, r4 + ldrnesb r0, [lr, #0xb6] + cmpne r0, #0 + beq _020281EC + ldrb r0, [lr, #8] + cmp r5, r0 + bne _020281EC + ldrh r2, [lr, #0x12] + ldrb r1, [lr, #6] + ldrb r0, [lr, #7] + mla r0, r1, r0, r2 + cmp ip, r0 + movlt ip, r0 +_020281EC: + add r3, r3, #1 + cmp r3, #0x14 + add lr, lr, #0xe0 + blt _020281B8 + ldr r0, [r4, #0x14] + ldr r1, _02028228 ; =_022A7A74 + mov r2, r5, lsl #1 + strh ip, [r1, r2] + bl MemFree + ldrsb r0, [r4, #0x10] + bl sub_02027974 + mov r0, #0 + strb r0, [r4, #0xb6] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02028224: .word WINDOW_LIST +_02028228: .word _022A7A74 + arm_func_end DeleteWindow + + arm_func_start sub_0202822C +sub_0202822C: ; 0x0202822C + stmdb sp!, {r4, lr} + ldr r2, _02028258 ; =WINDOW_LIST + mov r1, #0xe0 + mla r4, r0, r1, r2 + ldr r0, [r4, #0x14] + bl MemFree + ldrsb r0, [r4, #0x10] + bl sub_02027974 + mov r0, #0 + strb r0, [r4, #0xb6] + ldmia sp!, {r4, pc} + .align 2, 0 +_02028258: .word WINDOW_LIST + arm_func_end sub_0202822C + + arm_func_start sub_0202825C +sub_0202825C: ; 0x0202825C + ldr r2, _0202826C ; =_022A7A74 + mov r0, r0, lsl #1 + strh r1, [r2, r0] + bx lr + .align 2, 0 +_0202826C: .word _022A7A74 + arm_func_end sub_0202825C + + arm_func_start sub_02028270 +sub_02028270: ; 0x02028270 + ldr r1, _02028280 ; =_022A7A74 + mov r0, r0, lsl #1 + ldrh r0, [r1, r0] + bx lr + .align 2, 0 +_02028280: .word _022A7A74 + arm_func_end sub_02028270 diff --git a/asm/main_020282C8.s b/asm/main_020282C8.s new file mode 100644 index 00000000..9325ef94 --- /dev/null +++ b/asm/main_020282C8.s @@ -0,0 +1,53 @@ + .include "asm/macros.inc" + .include "main_020282C8.inc" + + .text + + arm_func_start sub_020282C8 +sub_020282C8: ; 0x020282C8 + ldr r3, _020282F0 ; =WINDOW_LIST + mov r2, #0xe0 + mla r2, r0, r2, r3 + ldrb r0, [r2, #7] + mov r0, r0, lsl #3 + str r0, [r1, #4] + ldrb r0, [r2, #6] + mov r0, r0, lsl #3 + str r0, [r1] + bx lr + .align 2, 0 +_020282F0: .word WINDOW_LIST + arm_func_end sub_020282C8 + + arm_func_start sub_020282F4 +sub_020282F4: ; 0x020282F4 + mov r1, #0xe0 + mul r1, r0, r1 + ldr r0, _02028308 ; =_022A8994 + ldr r0, [r0, r1] + bx lr + .align 2, 0 +_02028308: .word _022A8994 + arm_func_end sub_020282F4 + + arm_func_start sub_0202830C +sub_0202830C: ; 0x0202830C + mov r2, #0xe0 + mul r2, r0, r2 + ldr r0, _02028320 ; =_022A8994 + str r1, [r0, r2] + bx lr + .align 2, 0 +_02028320: .word _022A8994 + arm_func_end sub_0202830C + + arm_func_start sub_02028324 +sub_02028324: ; 0x02028324 + mov r1, #0xe0 + mul r1, r0, r1 + ldr r0, _02028338 ; =_022A88E4 + ldrb r0, [r0, r1] + bx lr + .align 2, 0 +_02028338: .word _022A88E4 + arm_func_end sub_02028324 diff --git a/asm/main_02028354.s b/asm/main_02028354.s new file mode 100644 index 00000000..629bb0e4 --- /dev/null +++ b/asm/main_02028354.s @@ -0,0 +1,1848 @@ + .include "asm/macros.inc" + .include "main_02028354.inc" + + .text + + arm_func_start sub_02028354 +sub_02028354: ; 0x02028354 + mov r1, #0xe0 + mul r1, r0, r1 + ldr r0, _02028368 ; =_022A8992 + ldrsb r0, [r0, r1] + bx lr + .align 2, 0 +_02028368: .word _022A8992 + arm_func_end sub_02028354 + + arm_func_start sub_0202836C +sub_0202836C: ; 0x0202836C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #8 + ldr r2, _02028438 ; =WINDOW_LIST + mov r1, #0xe0 + mla r6, r0, r1, r2 + ldrb r0, [r6, #8] + cmp r0, #0 + bne _020283A4 + ldrb r0, [r6, #4] + ldrb r1, [r6, #5] + ldrb r2, [r6, #6] + ldrb r3, [r6, #7] + bl sub_02029154 + b _02028428 +_020283A4: + ldrb r0, [r6, #8] + bl sub_0202843C + ldrb r1, [r6, #5] + mov r7, r0 + add r5, sp, #0 + str r1, [sp, #4] + mov r4, #0 + b _02028410 +_020283C4: + ldrb r0, [r6, #4] + str r0, [sp] + b _020283EC +_020283D0: + mov r0, r7 + mov r1, r5 + mov r2, r4 + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_020283EC: + ldrb r1, [r6, #4] + ldrb r0, [r6, #6] + ldr r2, [sp] + add r0, r1, r0 + cmp r2, r0 + blt _020283D0 + ldr r0, [sp, #4] + add r0, r0, #1 + str r0, [sp, #4] +_02028410: + ldrb r1, [r6, #5] + ldrb r0, [r6, #7] + ldr r2, [sp, #4] + add r0, r1, r0 + cmp r2, r0 + blt _020283C4 +_02028428: + ldrb r0, [r6, #8] + bl sub_02027AA0 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02028438: .word WINDOW_LIST + arm_func_end sub_0202836C + + arm_func_start sub_0202843C +sub_0202843C: ; 0x0202843C + cmp r0, #1 + ldreq r0, _02028458 ; =_022A7B00 + bxeq lr + cmp r0, #2 + ldreq r0, _0202845C ; =_022A7AE4 + ldrne r0, _02028460 ; =_022A7AC8 + bx lr + .align 2, 0 +_02028458: .word _022A7B00 +_0202845C: .word _022A7AE4 +_02028460: .word _022A7AC8 + arm_func_end sub_0202843C + + arm_func_start sub_02028464 +sub_02028464: ; 0x02028464 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x14 + ldr r3, _02028768 ; =WINDOW_LIST + mov r2, #0xe0 + mla r4, r0, r2, r3 + ldrsb r0, [r4, #9] + ldrb r5, [r4, #8] + ldr r7, _0202876C ; =_0209AC64 + rsb r2, r0, #0 + mov r0, r5 + mov r6, r2, lsl #1 + mov r8, r1 + bl sub_0202843C + ldrsb r1, [r7, r6] + mov r6, r0 + cmp r1, #0 + movlt r8, #0 + cmp r5, #0 + bne _020284D8 + ldrh r0, [r4, #0x30] + str r0, [sp] + ldrb r0, [r4, #0x11] + stmib sp, {r0, r8} + ldrb r0, [r4, #4] + ldrb r1, [r4, #5] + ldrb r2, [r4, #6] + ldrb r3, [r4, #7] + bl sub_020291FC + b _02028758 +_020284D8: + ldrb r0, [r4, #0x11] + cmp r0, #0 + beq _0202857C + ldrh r0, [r4, #0x30] + ldrb r1, [r4, #5] + add r7, sp, #0xc + orr r0, r0, #0x400 + mov r0, r0, lsl #0x10 + str r1, [sp, #0x10] + mov sb, r0, lsr #0x10 + b _02028560 +_02028504: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + add r0, r1, r0 + sub r0, r0, #1 + str r0, [sp, #0xc] + b _02028544 +_0202851C: + add r0, sb, #1 + mov r2, sb + mov r3, r0, lsl #0x10 + mov r0, r6 + mov r1, r7 + mov sb, r3, lsr #0x10 + bl sub_0200B3FC + ldr r0, [sp, #0xc] + sub r0, r0, #1 + str r0, [sp, #0xc] +_02028544: + ldrb r0, [r4, #4] + ldr r1, [sp, #0xc] + cmp r1, r0 + bge _0202851C + ldr r0, [sp, #0x10] + add r0, r0, #1 + str r0, [sp, #0x10] +_02028560: + ldrb r0, [r4, #5] + ldrb r1, [r4, #7] + ldr r2, [sp, #0x10] + add r1, r0, r1 + cmp r2, r1 + blt _02028504 + b _02028600 +_0202857C: + ldrh r7, [r4, #0x30] + ldrb sl, [r4, #5] + add sb, sp, #0xc + b _020285EC +_0202858C: + mov r1, sl, lsr #0x1f + ldrb r2, [r4, #4] + rsb r0, r1, sl, lsl #27 + add r0, r1, r0, ror #27 + str r0, [sp, #0x10] + str r2, [sp, #0xc] + b _020285D0 +_020285A8: + add r0, r7, #1 + mov r2, r7 + mov r3, r0, lsl #0x10 + mov r0, r6 + mov r1, sb + mov r7, r3, lsr #0x10 + bl sub_0200B3FC + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] +_020285D0: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + ldr r2, [sp, #0xc] + add r0, r1, r0 + cmp r2, r0 + blt _020285A8 + add sl, sl, #1 +_020285EC: + ldrb r0, [r4, #5] + ldrb r1, [r4, #7] + add r1, r0, r1 + cmp sl, r1 + blt _0202858C +_02028600: + cmp r8, #0 + beq _02028758 + subs r0, r0, #1 + str r0, [sp, #0x10] + bmi _02028670 + ldrb r0, [r4, #4] + add r8, sp, #0xc + mov r7, #0 + sub r0, r0, #1 + str r0, [sp, #0xc] + b _02028658 +_0202862C: + cmp r2, #0 + blt _0202864C + cmp r2, #0x20 + bge _0202864C + mov r0, r6 + mov r1, r8 + mov r2, r7 + bl sub_0200B3FC +_0202864C: + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] +_02028658: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + ldr r2, [sp, #0xc] + add r0, r1, r0 + cmp r2, r0 + ble _0202862C +_02028670: + ldrb r0, [r4, #5] + mov r8, #0 + add sb, sp, #0xc + str r0, [sp, #0x10] + mov r7, r8 + b _020286DC +_02028688: + ldrb r0, [r4, #4] + subs r0, r0, #1 + str r0, [sp, #0xc] + bmi _020286A8 + mov r0, r6 + mov r1, sb + mov r2, r8 + bl sub_0200B3FC +_020286A8: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + add r0, r1, r0 + str r0, [sp, #0xc] + cmp r0, #0x20 + bge _020286D0 + mov r0, r6 + mov r1, sb + mov r2, r7 + bl sub_0200B3FC +_020286D0: + ldr r0, [sp, #0x10] + add r0, r0, #1 + str r0, [sp, #0x10] +_020286DC: + ldrb r1, [r4, #5] + ldrb r0, [r4, #7] + ldr r2, [sp, #0x10] + add r0, r1, r0 + cmp r2, r0 + blt _02028688 + cmp r2, #0x18 + bge _02028758 + ldrb r0, [r4, #4] + add r8, sp, #0xc + mov r7, #0 + sub r0, r0, #1 + str r0, [sp, #0xc] + b _02028740 +_02028714: + cmp r2, #0 + blt _02028734 + cmp r2, #0x20 + bge _02028734 + mov r0, r6 + mov r1, r8 + mov r2, r7 + bl sub_0200B3FC +_02028734: + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] +_02028740: + ldrb r1, [r4, #4] + ldrb r0, [r4, #6] + ldr r2, [sp, #0xc] + add r0, r1, r0 + cmp r2, r0 + ble _02028714 +_02028758: + mov r0, r5 + bl sub_02027AA0 + add sp, sp, #0x14 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02028768: .word WINDOW_LIST +_0202876C: .word _0209AC64 + arm_func_end sub_02028464 + + arm_func_start sub_02028770 +sub_02028770: ; 0x02028770 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _020287C0 ; =WINDOW_LIST + mov r5, r0 + mov r1, #0xe0 + mla r4, r5, r1, r2 + bl sub_0202836C + ldr r0, [sp, #0x14] + ldr r2, [sp, #0x18] + strb r0, [r4, #4] + mov r0, r5 + mov r1, #1 + strb r2, [r4, #5] + bl sub_02027E30 + mov r0, r5 + mov r1, #1 + bl sub_02028464 + ldmia sp!, {r3, r4, r5, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_020287C0: .word WINDOW_LIST + arm_func_end sub_02028770 + + arm_func_start sub_020287C4 +sub_020287C4: ; 0x020287C4 + ldr r1, _020287DC ; =_020AFD4C + mov r2, #1 + ldr r3, [r1, #8] + orr r0, r3, r2, lsl r0 + str r0, [r1, #8] + bx lr + .align 2, 0 +_020287DC: .word _020AFD4C + arm_func_end sub_020287C4 + + arm_func_start sub_020287E0 +sub_020287E0: ; 0x020287E0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r1, _02028840 ; =_022A7A6C + mov r6, r0 +#ifdef JAPAN + ldrsb r0, [r1, #1] +#else + ldrsb r0, [r1, #3] +#endif + mov r1, #0 + mov sb, #1 + ldr r4, _02028844 ; =WINDOW_LIST + mov r8, #0xe0 + mvn r7, #1 + b _0202882C +_02028808: + mla r5, r0, r8, r4 + ldrsb r2, [r5, #0xb6] + cmp r2, #2 + ldreqb r2, [r5, #8] + cmpeq r6, r2 + bne _02028828 + bl sub_02028464 + mov r1, sb +_02028828: + ldrsb r0, [r5, #0xb5] +_0202882C: + cmp r0, r7 + bne _02028808 + mov r0, r6 + bl sub_02027AA0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02028840: .word _022A7A6C +_02028844: .word WINDOW_LIST + arm_func_end sub_020287E0 + + arm_func_start sub_02028848 +sub_02028848: ; 0x02028848 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r0, _020288D0 ; =_022A7A6C + ldr r6, _020288D4 ; =WINDOW_LIST +#ifdef JAPAN + ldrsb r0, [r0, #1] +#else + ldrsb r0, [r0, #3] +#endif + mov r5, #0xe0 + mvn r4, #1 + b _02028888 +_02028864: + mla r7, r0, r5, r6 + ldrsb r0, [r7, #0xb6] + cmp r0, #0 + ldrne r1, [r7] + cmpne r1, #0 + beq _02028884 + mov r0, r7 + blx r1 +_02028884: + ldrsb r0, [r7, #0xb5] +_02028888: + cmp r0, r4 + bne _02028864 + ldr r0, _020288D8 ; =_020AFD4C + ldr r0, [r0, #8] + tst r0, #1 + beq _020288A8 + mov r0, #0 + bl sub_020287E0 +_020288A8: + ldr r0, _020288D8 ; =_020AFD4C + ldr r0, [r0, #8] + tst r0, #2 + beq _020288C0 + mov r0, #1 + bl sub_020287E0 +_020288C0: + ldr r0, _020288D8 ; =_020AFD4C + mov r1, #0 + str r1, [r0, #8] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_020288D0: .word _022A7A6C +_020288D4: .word WINDOW_LIST +_020288D8: .word _020AFD4C + arm_func_end sub_02028848 + + arm_func_start sub_020288DC +sub_020288DC: ; 0x020288DC + ldr r2, _020288F4 ; =WINDOW_LIST + mov r1, #0xe0 + mla r1, r0, r1, r2 + ldr ip, _020288F8 ; =InitWindowTrailer + add r0, r1, #0xbc + bx ip + .align 2, 0 +_020288F4: .word WINDOW_LIST +_020288F8: .word InitWindowTrailer + arm_func_end sub_020288DC + + arm_func_start sub_020288FC +sub_020288FC: ; 0x020288FC + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr lr, _02028944 ; =WINDOW_LIST + mov ip, #0xe0 + mla r4, r0, ip, lr + ldr lr, [r4, #0xb8] + sub r0, ip, #0xe1 + cmp lr, r0 + moveq ip, #1 + stmia sp, {r2, r3} + movne ip, #0 + mov r2, r1 + add r0, r4, #0xbc + and r3, ip, #0xff + mov r1, #0 + bl sub_02029688 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02028944: .word WINDOW_LIST + arm_func_end sub_020288FC + + arm_func_start sub_02028948 +sub_02028948: ; 0x02028948 + stmdb sp!, {r3, lr} + ldr r3, _0202897C ; =WINDOW_LIST + mov r2, #0xe0 + mla ip, r0, r2, r3 + ldr r3, [ip, #0xb8] + sub r0, r2, #0xe1 + cmp r3, r0 + moveq r2, #1 + movne r2, #0 + add r0, ip, #0xbc + and r2, r2, #0xff + bl sub_02029758 + ldmia sp!, {r3, pc} + .align 2, 0 +_0202897C: .word WINDOW_LIST + arm_func_end sub_02028948 + + arm_func_start sub_02028980 +sub_02028980: ; 0x02028980 + stmdb sp!, {r3, lr} + ldr r3, _020289B4 ; =WINDOW_LIST + mov r2, #0xe0 + mla ip, r0, r2, r3 + ldr r3, [ip, #0xb8] + sub r0, r2, #0xe1 + cmp r3, r0 + moveq r2, #1 + movne r2, #0 + add r0, ip, #0xbc + and r2, r2, #0xff + bl sub_02029828 + ldmia sp!, {r3, pc} + .align 2, 0 +_020289B4: .word WINDOW_LIST + arm_func_end sub_02028980 + + arm_func_start sub_020289B8 +sub_020289B8: ; 0x020289B8 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr lr, _02028A04 ; =WINDOW_LIST + mov ip, #0xe0 + mla r4, r0, ip, lr + ldr lr, [r4, #0xb8] + sub r0, ip, #0xe1 + cmp lr, r0 + moveq lr, #1 + str r3, [sp] + ldr ip, [sp, #0x10] + movne lr, #0 + mov r3, r2 + add r0, r4, #0xbc + and r2, lr, #0xff + str ip, [sp, #4] + bl sub_020298F8 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02028A04: .word WINDOW_LIST + arm_func_end sub_020289B8 + + arm_func_start sub_02028A08 +sub_02028A08: ; 0x02028A08 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr lr, _02028A60 ; =WINDOW_LIST + mov ip, #0xe0 + mla r4, r0, ip, lr + sub r0, ip, #0xe1 + ldr lr, [r4, #0xb8] + ldr ip, [sp, #0x18] + cmp lr, r0 + stmia sp, {r3, ip} + moveq lr, #1 + ldr r0, [sp, #0x1c] + movne lr, #0 + str r0, [sp, #8] + ldr ip, [sp, #0x20] + mov r3, r2 + add r0, r4, #0xbc + and r2, lr, #0xff + str ip, [sp, #0xc] + bl sub_02029998 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_02028A60: .word WINDOW_LIST + arm_func_end sub_02028A08 + + arm_func_start sub_02028A64 +sub_02028A64: ; 0x02028A64 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r1, _02028DE8 ; =_020AFD4C + movs r4, r0 +#ifdef JAPAN + strb r4, [r1, #2] +#else + strb r4, [r1, #4] +#endif + mov r5, #8 + beq _02028D58 + ldr r0, _02028DEC ; =_022A7A6C + mov r1, #0 +#ifdef JAPAN + ldrsb r3, [r0, #1] +#else + ldrsb r3, [r0, #3] + strb r3, [r0, #5] +#endif + strh r1, [r0, #6] + b _02028BF4 +_02028A94: + ldr r1, _02028DF0 ; =WINDOW_LIST + mov r0, #0xe0 + mla r6, r3, r0, r1 + ldrsb r1, [r6, #0xb6] + ldr r2, _02028DF4 ; =_022A7B1C +#ifdef JAPAN + mov r0, #0x2c +#else + mov r0, #0x30 +#endif + mla r7, r3, r0, r2 + cmp r1, #0 +#ifdef JAPAN + mov r0, #0 + beq _02028BDC +#else + beq _02028BDC + mov r0, #0 +#endif + strb r0, [r6, #0xb7] + ldrb r0, [r6, #8] + mov r1, #1 + strb r1, [r7] + cmp r0, #0 + bne _02028BC4 + ldr r0, _02028DF8 ; =_020AFD98 + ldrsb r3, [r6, #9] + ldrb r2, [r0] + ldr r0, _02028DEC ; =_022A7A6C + ldr r1, _02028DFC ; =_0209ACA8 + ldrsh r0, [r0, #0x58] + rsb r3, r3, #0 + ldrb r1, [r1, r2] + ldr r2, _02028E00 ; =_0209AC64 + mov r3, r3, lsl #1 + ldrsb r8, [r2, r3] + bl GetPaletteBaseAddress__020278A8 + mov r1, r5, lsl #1 + str r0, [r6, #0x98] + add r0, r1, #9 + strh r0, [r6, #0x9e] + add r0, r1, #0xa + strh r0, [r6, #0x5e] + cmp r8, #0 + sub r5, r5, #1 + blt _02028BC4 + ldrsh r0, [r6, #0x38] + cmp r0, #0 + beq _02028BC4 + ldr r0, _02028E04 ; =_0209AC78 + mov r1, r8, lsl #3 + add r3, r0, r8, lsl #3 + ldrsh r1, [r0, r1] + ldr r0, _02028DEC ; =_022A7A6C + ldrsh r2, [r3, #2] + strh r1, [r6, #0x8a] + ldrsh r8, [r0, #6] + ldrsh r1, [r3, #4] + strh r2, [r6, #0x8c] + ldrsh r0, [r3, #6] + strh r1, [r6, #0x8e] + cmp r8, #0x14 + strh r0, [r6, #0x90] + bge _02028BC4 + ldr r0, _02028E08 ; =_022A7EDC + add ip, r6, #0x34 + add sl, r0, r8, lsl #7 + mov sb, #4 +_02028B80: + ldmia ip!, {r0, r1, r2, r3} + stmia sl!, {r0, r1, r2, r3} + subs sb, sb, #1 + bne _02028B80 + ldr r0, _02028E08 ; =_022A7EDC + add sl, r6, #0x74 + add r0, r0, r8, lsl #7 + add sb, r0, #0x40 + mov r8, #4 +_02028BA4: + ldmia sl!, {r0, r1, r2, r3} + stmia sb!, {r0, r1, r2, r3} + subs r8, r8, #1 + bne _02028BA4 + ldr r0, _02028DEC ; =_022A7A6C + ldrsh r1, [r0, #6] + add r1, r1, #1 + strh r1, [r0, #6] +_02028BC4: + add r0, r7, #4 + add r1, r6, #0xbc + bl sub_02029A68 + add r0, r7, #4 + bl sub_02029B0C + b _02028BEC +_02028BDC: +#ifdef JAPAN + strb r0, [r7] +#else + mov r1, #0 + add r0, r7, #4 + strb r1, [r7] + bl sub_02029A50 +#endif +_02028BEC: + ldrsb r3, [r6, #0xb5] +#ifndef JAPAN + strb r3, [r7, #0x2c] +#endif +_02028BF4: + mvn r0, #1 + cmp r3, r0 + bne _02028A94 + ldr r1, _02028DEC ; =_022A7A6C +#ifdef JAPAN + ldrb r0, [r1] +#else + ldrb r0, [r1, #4] +#endif + cmp r0, #0 + beq _02028C20 + ldr r0, _02028E0C ; =_022A7AA0 + mov r2, #0 +#ifdef JAPAN + strb r2, [r1] +#else + strb r2, [r1, #4] +#endif + bl sub_0200A174 +_02028C20: + ldr r1, _02028DEC ; =_022A7A6C +#ifdef JAPAN + ldrb r0, [r1, #4] +#else + ldrb r0, [r1] +#endif + cmp r0, #0 + beq _02028C40 + ldr r0, _02028E10 ; =_022A7A8C + mov r2, #0 +#ifdef JAPAN + strb r2, [r1, #4] +#else + strb r2, [r1] +#endif + bl sub_0200A174 +_02028C40: + ldr r1, _02028DEC ; =_022A7A6C +#ifdef JAPAN + ldrb r0, [r1, #2] +#else + ldrb r0, [r1, #1] +#endif + cmp r0, #0 + beq _02028C60 + ldr r0, _02028E14 ; =_022A7A78 + mov r2, #0 +#ifdef JAPAN + strb r2, [r1, #2] +#else + strb r2, [r1, #1] +#endif + bl sub_0200A174 +_02028C60: + mov r8, #0 + ldr r7, _02028DF0 ; =WINDOW_LIST + mov r6, r8 + mov r5, #0xe0 +_02028C70: + mla sl, r8, r5, r7 + ldrsb r0, [sl, #0xb6] + cmp r0, #0 + ldrne sb, [sl, #0x2c] + cmpne sb, #0 + beq _02028CB8 + ldr r0, [sl, #0x28] + ldr r1, [sl, #0x24] + mov r2, sb + bl Memcpy32 + ldr r0, [sl, #0x24] + bic r1, sb, #3 + add r0, r0, r1 + str r0, [sl, #0x24] + ldr r0, [sl, #0x28] + add r0, r0, r1 + str r0, [sl, #0x28] + str r6, [sl, #0x2c] +_02028CB8: + add r0, r8, #1 + mov r0, r0, lsl #0x18 + mov r8, r0, asr #0x18 + cmp r8, #0x14 + blt _02028C70 + ldr r0, _02028E18 ; =_020AFD9C + ldr r1, _02028E1C ; =_020AFD94 + ldrh r0, [r0] + ldrb r0, [r1, r0] + cmp r0, #0 + beq _02028D08 + ldr r0, _02028E20 ; =_022A7AC8 + bl sub_02029054 + ldr r0, _02028E20 ; =_022A7AC8 + bl sub_0200B330 + ldr r0, _02028E18 ; =_020AFD9C + ldr r1, _02028E1C ; =_020AFD94 + ldrh r0, [r0] + mov r2, #0 + strb r2, [r1, r0] +_02028D08: + bl sub_02028FC8 + ldr r0, _02028DE8 ; =_020AFD4C +#ifdef JAPAN + ldrb r0, [r0, #3] +#else + ldrb r0, [r0] +#endif + cmp r0, #0 + beq _02028D30 + ldr r0, _02028E24 ; =_022A7B00 + bl sub_0200B330 + ldr r0, _02028DE8 ; =_020AFD4C + mov r1, #0 +#ifdef JAPAN + strb r1, [r0, #3] +#else + strb r1, [r0] +#endif +_02028D30: + ldr r0, _02028DE8 ; =_020AFD4C +#ifdef JAPAN + ldrb r0, [r0] +#else + ldrb r0, [r0, #3] +#endif + cmp r0, #0 + beq _02028DD4 + ldr r0, _02028E28 ; =_022A7AE4 + bl sub_0200B330 + ldr r0, _02028DE8 ; =_020AFD4C + mov r1, #0 +#ifdef JAPAN + strb r1, [r0] +#else + strb r1, [r0, #3] +#endif + b _02028DD4 +_02028D58: + ldr r0, _02028DEC ; =_022A7A6C +#ifdef JAPAN + ldr r6, _02028DF0 ; =WINDOW_LIST + ldrsb r2, [r0, #1] + ldr r5, _02028DF4 ; =_022A7B1C + mov sb, #0xe0 + mov sl, #0x2c + mvn r8, #1 + b _02028D90 +_02028D70: + mul r1, r2, sl + ldrb r0, [r5, r1] + mla r7, r2, sb, r6 + cmp r0, #0 + add r0, r5, r1 + beq _02028D8C + add r0, r0, #4 + bl sub_02029B0C +_02028D8C: + ldrsb r2, [r7, #0xb5] +_02028D90: + cmp r2, r8 +#else + ldr r7, _02028DF4 ; =_022A7B1C + ldrsb r0, [r0, #5] + mov r6, #0x30 + mvn r5, #1 + b _02028D90 +_02028D70: + mul r1, r0, r6 + ldrb r0, [r7, r1] + add r8, r7, r1 + cmp r0, #0 + beq _02028D8C + add r0, r8, #4 + bl sub_02029B0C +_02028D8C: + ldrsb r0, [r8, #0x2c] +_02028D90: + cmp r0, r5 +#endif + bne _02028D70 + ldr r0, _02028E18 ; =_020AFD9C + ldr r1, _02028E1C ; =_020AFD94 + ldrh r0, [r0] + ldrb r0, [r1, r0] + cmp r0, #0 + beq _02028DD4 + ldr r0, _02028E20 ; =_022A7AC8 + bl sub_02029054 + ldr r0, _02028E20 ; =_022A7AC8 + bl sub_0200B330 + ldr r0, _02028E18 ; =_020AFD9C + ldr r1, _02028E1C ; =_020AFD94 + ldrh r0, [r0] + mov r2, #0 + strb r2, [r1, r0] +_02028DD4: + bl sub_02029EC4 + bl sub_02029FE8 + mov r0, r4 + bl sub_0202A2C8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02028DE8: .word _020AFD4C +_02028DEC: .word _022A7A6C +_02028DF0: .word WINDOW_LIST +_02028DF4: .word _022A7B1C +_02028DF8: .word _020AFD98 +_02028DFC: .word _0209ACA8 +_02028E00: .word _0209AC64 +_02028E04: .word _0209AC78 +_02028E08: .word _022A7EDC +_02028E0C: .word _022A7AA0 +_02028E10: .word _022A7A8C +_02028E14: .word _022A7A78 +_02028E18: .word _020AFD9C +_02028E1C: .word _020AFD94 +_02028E20: .word _022A7AC8 +_02028E24: .word _022A7B00 +_02028E28: .word _022A7AE4 + arm_func_end sub_02028A64 + + arm_func_start sub_02028E2C +sub_02028E2C: ; 0x02028E2C + ldr r0, _02028E3C ; =_022A7A6C + mov r1, #0 + strh r1, [r0, #6] + bx lr + .align 2, 0 +_02028E3C: .word _022A7A6C + arm_func_end sub_02028E2C + + arm_func_start sub_02028E40 +sub_02028E40: ; 0x02028E40 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, #0 + ldr r5, _02028E80 ; =_022A7EDC + ldr r4, _02028E84 ; =_022A7A6C + b _02028E6C +_02028E54: + add r7, r5, r6, lsl #7 + mov r0, r7 + bl sub_0201F2A0 + add r0, r7, #0x40 + bl sub_0201F2A0 + add r6, r6, #1 +_02028E6C: + ldrsh r0, [r4, #6] + cmp r6, r0 + blt _02028E54 + bl sub_0202A388 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02028E80: .word _022A7EDC +_02028E84: .word _022A7A6C + arm_func_end sub_02028E40 + + arm_func_start sub_02028E88 +sub_02028E88: ; 0x02028E88 + stmdb sp!, {r3, lr} + mov r0, #8 + bl sub_0200302C + ldr r0, _02028ED0 ; =_022A7AC8 + bl sub_0200B340 + ldr r0, _02028ED4 ; =_022A7B00 + bl sub_0200B340 + ldr r0, _02028ED8 ; =_022A7AE4 + bl sub_0200B340 + ldr r0, _02028EDC ; =_022A7AA0 + bl sub_0200A184 + ldr r0, _02028EE0 ; =_022A7A8C + bl sub_0200A184 + ldr r0, _02028EE4 ; =_022A7A78 + bl sub_0200A184 + mov r0, #8 + bl sub_020030FC + ldmia sp!, {r3, pc} + .align 2, 0 +_02028ED0: .word _022A7AC8 +_02028ED4: .word _022A7B00 +_02028ED8: .word _022A7AE4 +_02028EDC: .word _022A7AA0 +_02028EE0: .word _022A7A8C +_02028EE4: .word _022A7A78 + arm_func_end sub_02028E88 + + arm_func_start sub_02028EE8 +sub_02028EE8: ; 0x02028EE8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + mov sb, r1 + mov sl, r0 + mov r8, r2 + mov r7, r3 + bl sub_0202843C + mov r5, r0 + ldr r6, [sb, #4] + add r4, sp, #0 + mov fp, #0 + b _02028F68 +_02028F18: + mov r1, r6, lsr #0x1f + rsb r0, r1, r6, lsl #27 + add r0, r1, r0, ror #27 + str r0, [sp, #4] + ldr r0, [sb] + str r0, [sp] + b _02028F50 +_02028F34: + mov r0, r5 + mov r1, r4 + mov r2, fp + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_02028F50: + ldr r0, [sb] + ldr r1, [sp] + add r0, r0, r8 + cmp r1, r0 + blt _02028F34 + add r6, r6, #1 +_02028F68: + ldr r0, [sb, #4] + add r0, r0, r7 + cmp r6, r0 + blt _02028F18 + mov r0, sl + bl sub_02027AA0 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end sub_02028EE8 + + arm_func_start sub_02028F88 +sub_02028F88: ; 0x02028F88 + stmdb sp!, {r4, lr} + mov r4, r1 + bl sub_0202843C + mov r1, r4 + bl sub_0200B3C0 + ldmia sp!, {r4, pc} + arm_func_end sub_02028F88 + + arm_func_start sub_02028FA0 +sub_02028FA0: ; 0x02028FA0 + mov r1, #0xe0 + mul r1, r0, r1 + ldr r0, _02028FC4 ; =_022A8908 + ldr r0, [r0, r1] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_02028FC4: .word _022A8908 + arm_func_end sub_02028FA0 + + arm_func_start sub_02028FC8 +sub_02028FC8: ; 0x02028FC8 + ldr r0, _02028FDC ; =_020AFD9C + ldrh r1, [r0] + eor r1, r1, #1 + strh r1, [r0] + bx lr + .align 2, 0 +_02028FDC: .word _020AFD9C + arm_func_end sub_02028FC8 + + arm_func_start sub_02028FE0 +sub_02028FE0: ; 0x02028FE0 + ldr r1, _02028FF8 ; =0x00000904 + ldr r2, _02028FFC ; =_022A9A5C + mov r3, #0 + smlabb r0, r0, r1, r2 + str r3, [r0, #0x900] + bx lr + .align 2, 0 +_02028FF8: .word 0x00000904 +_02028FFC: .word _022A9A5C + arm_func_end sub_02028FE0 + + arm_func_start sub_02029000 +sub_02029000: ; 0x02029000 + ldr r2, _02029034 ; =_022A9A5C + ldr r1, _02029038 ; =0x00000904 + smlabb r2, r0, r1, r2 + ldr r0, [r2, #0x900] + add r1, r0, #1 + mov r0, r0, lsl #0x10 + str r1, [r2, #0x900] + cmp r1, #0x10 + mov r1, r0, asr #0x10 + movge r0, #0x10 + strge r0, [r2, #0x900] + add r0, r2, r1, lsl #4 + bx lr + .align 2, 0 +_02029034: .word _022A9A5C +_02029038: .word 0x00000904 + arm_func_end sub_02029000 + + arm_func_start sub_0202903C +sub_0202903C: ; 0x0202903C + ldr r0, _0202904C ; =_020AFD9C + ldr ip, _02029050 ; =sub_02028FE0 + ldrsh r0, [r0] + bx ip + .align 2, 0 +_0202904C: .word _020AFD9C +_02029050: .word sub_02028FE0 + arm_func_end sub_0202903C + + arm_func_start sub_02029054 +sub_02029054: ; 0x02029054 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + ldr r2, _02029144 ; =_020AFD9C + ldr r1, _02029148 ; =0x00000904 + ldrh sl, [r2] + ldr r6, _0202914C ; =_022A9A5C + ldr r2, _02029150 ; =_022AA35C + mul r3, sl, r1 + smlabb r4, sl, r1, r6 + ldr r1, [r2, r3] + add r5, r4, #0x100 + mov fp, r0 + mov r4, r1, lsl #0x10 + add sb, r6, r3 + mov r7, #0 + b _02029120 +_02029094: + add r8, sb, r7, lsl #4 + ldr r6, [r8, #4] + b _02029100 +_020290A0: + mov r1, r6, lsr #0x1f + rsb r0, r1, r6, lsl #27 + ldr r2, [r8] + add r0, r1, r0, ror #27 + str r0, [sp, #4] + str r2, [sp] + b _020290E4 +_020290BC: + ldr r0, [sp, #4] + mov r1, r2, lsl #1 + add r0, r5, r0, lsl #6 + ldrh r2, [r1, r0] + mov r0, fp + add r1, sp, #0 + bl sub_0200B3FC + ldr r0, [sp] + add r0, r0, #1 + str r0, [sp] +_020290E4: + ldr r1, [r8] + ldr r0, [r8, #8] + ldr r2, [sp] + add r0, r1, r0 + cmp r2, r0 + blt _020290BC + add r6, r6, #1 +_02029100: + ldr r1, [r8, #4] + ldr r0, [r8, #0xc] + add r0, r1, r0 + cmp r6, r0 + blt _020290A0 + add r0, r7, #1 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 +_02029120: + cmp r7, r4, asr #16 + blt _02029094 + ldr r0, _02029148 ; =0x00000904 + ldr r1, _0202914C ; =_022A9A5C + mov r2, #0 + smlabb r0, sl, r0, r1 + str r2, [r0, #0x900] + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02029144: .word _020AFD9C +_02029148: .word 0x00000904 +_0202914C: .word _022A9A5C +_02029150: .word _022AA35C + arm_func_end sub_02029054 + + arm_func_start sub_02029154 +sub_02029154: ; 0x02029154 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r4, _020291F0 ; =_020AFD9C + mov r7, r0 + ldrh r0, [r4] + mov r6, r1 + mov r5, r2 + eor r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r4, r3 + bl sub_02029000 + ldr r1, _020291F0 ; =_020AFD9C + ldr ip, _020291F4 ; =_022A9A5C + ldrh r3, [r1] + ldr r2, _020291F8 ; =0x00000904 + add r1, r7, r5 + str r7, [r0] + eor r3, r3, #1 + smlabb r2, r3, r2, ip + str r6, [r0, #4] + str r5, [r0, #8] + str r4, [r0, #0xc] + add r5, r2, #0x100 + add ip, r6, r4 + mov r3, #0 + b _020291E4 +_020291BC: + mov r0, r6, lsl #5 + mov r4, r7 + add r0, r5, r0, lsl #1 + b _020291D8 +_020291CC: + mov r2, r4, lsl #1 + strh r3, [r2, r0] + add r4, r4, #1 +_020291D8: + cmp r4, r1 + blt _020291CC + add r6, r6, #1 +_020291E4: + cmp r6, ip + blt _020291BC + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_020291F0: .word _020AFD9C +_020291F4: .word _022A9A5C +_020291F8: .word 0x00000904 + arm_func_end sub_02029154 + + arm_func_start sub_020291FC +sub_020291FC: ; 0x020291FC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r4, _0202946C ; =_020AFD9C + mov r5, r0 + ldrh r0, [r4] + mov r4, r1 + mov r8, r2 + eor r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r7, r3 + ldr r6, [sp, #0x18] + bl sub_02029000 + ldr r1, _0202946C ; =_020AFD9C + ldr ip, _02029470 ; =_022A9A5C + ldrh r3, [r1] + ldr r1, _02029474 ; =0x00000904 + ldrb r2, [sp, #0x1c] + str r5, [r0] + eor r3, r3, #1 + smlabb r1, r3, r1, ip + stmib r0, {r4, r8} + str r7, [r0, #0xc] + cmp r2, #0 + add r1, r1, #0x100 + beq _020292BC + orr r2, r6, #0x400 + mov r2, r2, lsl #0x10 + add r3, r5, r8 + mov r6, r2, lsr #0x10 + sub ip, r3, #1 + add lr, r4, r7 + b _020292B0 +_0202927C: + mov r2, r4, lsl #5 + mov r8, ip + add r3, r1, r2, lsl #1 + b _020292A4 +_0202928C: + add r2, r6, #1 + mov r7, r8, lsl #1 + mov r2, r2, lsl #0x10 + strh r6, [r7, r3] + mov r6, r2, lsr #0x10 + sub r8, r8, #1 +_020292A4: + cmp r8, r5 + bge _0202928C + add r4, r4, #1 +_020292B0: + cmp r4, lr + blt _0202927C + b _02029310 +_020292BC: + add r2, r5, r8 + add r3, r4, r7 + b _02029308 +_020292C8: + mov r8, r4, lsr #0x1f + rsb r7, r8, r4, lsl #27 + add r7, r8, r7, ror #27 + mov r7, r7, lsl #5 + mov ip, r5 + add r8, r1, r7, lsl #1 + b _020292FC +_020292E4: + add r7, r6, #1 + mov lr, ip, lsl #1 + mov r7, r7, lsl #0x10 + strh r6, [lr, r8] + mov r6, r7, lsr #0x10 + add ip, ip, #1 +_020292FC: + cmp ip, r2 + blt _020292E4 + add r4, r4, #1 +_02029308: + cmp r4, r3 + blt _020292C8 +_02029310: + ldrb r2, [sp, #0x20] + cmp r2, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r2, [r0] + subs r2, r2, #1 + str r2, [r0] + movmi r2, #0 + strmi r2, [r0] + ldr r2, [r0, #4] + subs r2, r2, #1 + str r2, [r0, #4] + movmi r2, #0 + strmi r2, [r0, #4] + ldr r2, [r0, #8] + add r2, r2, #1 + str r2, [r0, #8] + cmp r2, #0x20 + movgt r2, #0x20 + strgt r2, [r0, #8] + ldr r2, [r0, #0xc] + add r2, r2, #1 + str r2, [r0, #0xc] + cmp r2, #0x20 + movgt r2, #0x20 + strgt r2, [r0, #0xc] + ldr r5, [r0, #0xc] + ldmia r0, {r2, r3, r6} + mov r0, r3, lsl #0x10 + mov r4, r2, lsl #0x10 + mov r5, r5, lsl #0x10 + mov r3, r6, lsl #0x10 + movs r2, r0, asr #0x10 + mov r4, r4, asr #0x10 + bmi _020293D8 + mov r0, r2, lsl #5 + mov r8, r4 + add ip, r4, r3, asr #16 + add r6, r1, r0, lsl #1 + mov r7, #0 + b _020293D0 +_020293B0: + cmp r8, #0 + blt _020293C4 + cmp r8, #0x20 + movlt r0, r8, lsl #1 + strlth r7, [r0, r6] +_020293C4: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 +_020293D0: + cmp r8, ip + ble _020293B0 +_020293D8: + add r3, r4, r3, asr #16 + add r0, r2, r5, asr #16 + mov r5, r3, lsl #0x10 + mov r8, r5, asr #0x10 + mov lr, #0 + mov ip, r4, lsl #1 + mov r6, r8, lsl #1 + mov r7, lr + b _02029420 +_020293FC: + cmp r4, #0 + addge r5, r1, r2, lsl #6 + strgeh lr, [ip, r5] + cmp r8, #0x20 + addlt r5, r1, r2, lsl #6 + add r2, r2, #1 + mov r2, r2, lsl #0x10 + strlth r7, [r6, r5] + mov r2, r2, asr #0x10 +_02029420: + cmp r2, r0 + blt _020293FC + cmp r2, #0x18 + ldmgeia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r2, lsl #5 + add r1, r1, r0, lsl #1 + mov r2, #0 + b _02029460 +_02029440: + cmp r4, #0 + blt _02029454 + cmp r4, #0x20 + movlt r0, r4, lsl #1 + strlth r2, [r0, r1] +_02029454: + add r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 +_02029460: + cmp r4, r3 + ble _02029440 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0202946C: .word _020AFD9C +_02029470: .word _022A9A5C +_02029474: .word 0x00000904 + arm_func_end sub_020291FC + + arm_func_start sub_02029478 +sub_02029478: ; 0x02029478 + stmdb sp!, {r3, lr} + sub sp, sp, #0x10 + mvn r2, #0 + cmp r1, r2 + ldrnesh r2, [r0, #0x24] + cmpne r1, r2 + beq _020294FC + ldrb r0, [r0, #0x26] + cmp r0, #0 + bne _020294D0 + mov r0, #0xf + str r0, [sp] + mov r0, #4 + str r0, [sp, #4] + mov r2, #1 + ldr r0, _02029504 ; =CURSOR_ANIMATION_CONTROL + str r2, [sp, #8] + mov r2, #0 + mov r3, #0x3f8 + str r2, [sp, #0xc] + bl SetAnimationForAnimationControl + b _020294FC +_020294D0: + mov r0, #0xe + str r0, [sp] + mov r0, #4 + str r0, [sp, #4] + mov ip, #1 + str ip, [sp, #8] + ldr r0, _02029508 ; =CURSOR_16_ANIMATION_CONTROL + mov r2, #0 + mov r3, #0x7c + str ip, [sp, #0xc] + bl SetAnimationForAnimationControl +_020294FC: + add sp, sp, #0x10 + ldmia sp!, {r3, pc} + .align 2, 0 +_02029504: .word CURSOR_ANIMATION_CONTROL +_02029508: .word CURSOR_16_ANIMATION_CONTROL + arm_func_end sub_02029478 + + arm_func_start LoadCursors +LoadCursors: ; 0x0202950C + stmdb sp!, {r3, lr} + sub sp, sp, #0x10 + ldr r0, _02029654 ; =PREV_MENU_ITEMS + mov r1, #0 + mov r2, #0x15 + bl memset + ldr r0, _02029658 ; =WAN_TABLE + ldr r1, _0202965C ; =_0209ADF0 + ldr r0, [r0] + mov r2, #0 + bl LoadWanTableEntry + ldr r2, _02029660 ; =CURSOR_16_SPRITE_ID + ldr r1, _02029658 ; =WAN_TABLE + strh r0, [r2, #2] + ldr r0, [r1] + ldr r1, _02029664 ; =_0209AE08 + mov r2, #0 + bl LoadWanTableEntry + ldr r1, _02029660 ; =CURSOR_16_SPRITE_ID + mov r3, #1 + strh r0, [r1] + str r3, [sp] + mov r0, #0 + str r0, [sp, #4] + ldrsh r0, [r1, #2] + mov r1, #0x3f8 + mov r2, #0xf + bl sub_0201D9C8 + mov r3, #1 + str r3, [sp] + str r3, [sp, #4] + ldr r0, _02029660 ; =CURSOR_16_SPRITE_ID + mov r1, #0x7c + ldrsh r0, [r0] + mov r2, #0xe + bl sub_0201D9C8 + ldr r0, _02029668 ; =CURSOR_ANIMATION_CONTROL + bl InitAnimationControlWithSet__0201C0B0 + ldr r0, _02029668 ; =CURSOR_ANIMATION_CONTROL + ldr r1, _02029660 ; =CURSOR_16_SPRITE_ID + ldrsh r1, [r1, #2] + bl SetSpriteIdForAnimationControl + mov r0, #0xf + str r0, [sp] + mov r0, #4 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r1, #0 + str r1, [sp, #0xc] + ldr r0, _02029668 ; =CURSOR_ANIMATION_CONTROL + mov r2, r1 + mov r3, #0x3f8 + bl SetAnimationForAnimationControl + mov r1, #0 + ldr r0, _02029668 ; =CURSOR_ANIMATION_CONTROL + strh r1, [r0, #0x38] + bl sub_0201C108 + ldr r0, _0202966C ; =CURSOR_16_ANIMATION_CONTROL + bl InitAnimationControlWithSet__0201C0B0 + ldr r0, _0202966C ; =CURSOR_16_ANIMATION_CONTROL + ldr r1, _02029660 ; =CURSOR_16_SPRITE_ID + ldrsh r1, [r1] + bl SetSpriteIdForAnimationControl + mov r0, #0xe + str r0, [sp] + mov r0, #4 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + str r0, [sp, #0xc] + ldr r0, _0202966C ; =CURSOR_16_ANIMATION_CONTROL + mov r1, #0 + mov r2, r1 + mov r3, #0x7c + bl SetAnimationForAnimationControl + ldr r0, _0202966C ; =CURSOR_16_ANIMATION_CONTROL + mov r1, #0 + strh r1, [r0, #0x38] + bl sub_0201C108 + add sp, sp, #0x10 + ldmia sp!, {r3, pc} + .align 2, 0 +_02029654: .word PREV_MENU_ITEMS +_02029658: .word WAN_TABLE +_0202965C: .word _0209ADF0 +_02029660: .word CURSOR_16_SPRITE_ID +_02029664: .word _0209AE08 +_02029668: .word CURSOR_ANIMATION_CONTROL +_0202966C: .word CURSOR_16_ANIMATION_CONTROL + arm_func_end LoadCursors + + arm_func_start InitWindowTrailer +InitWindowTrailer: ; 0x02029670 + mov r1, #0 + str r1, [r0] + strb r1, [r0, #4] + strb r1, [r0, #0x19] + strb r1, [r0, #0x18] + bx lr + arm_func_end InitWindowTrailer + + arm_func_start sub_02029688 +sub_02029688: ; 0x02029688 + cmp r2, #1 + cmpeq r3, #0 + moveq r2, #2 + cmp r1, #0 + ldreq r1, [r0] + cmpeq r1, r2 + ldreq r3, [r0, #8] + ldreq r1, [sp] + cmpeq r3, r1 + ldreq r3, [r0, #0xc] + ldreq r1, [sp, #4] + cmpeq r3, r1 + bxeq lr + str r2, [r0] + mov r1, #1 + ldr r2, [sp] + strb r1, [r0, #4] + ldr r1, [sp, #4] + str r2, [r0, #8] + str r1, [r0, #0xc] + mov r1, #0 + str r1, [r0, #0x10] + str r1, [r0, #0x14] + bx lr + arm_func_end sub_02029688 + + arm_func_start sub_020296E8 +sub_020296E8: ; 0x020296E8 + cmp r1, #0 + ldreq r1, [r0] + cmpeq r1, r2 + ldreq r3, [r0, #8] + ldreq r1, [sp] + cmpeq r3, r1 + ldreq r3, [r0, #0xc] + ldreq r1, [sp, #4] + cmpeq r3, r1 + ldreq r3, [r0, #0x10] + ldreq r1, [sp, #8] + cmpeq r3, r1 + ldreq r3, [r0, #0x14] + ldreq r1, [sp, #0xc] + cmpeq r3, r1 + bxeq lr + str r2, [r0] + mov r1, #1 + ldr r2, [sp] + strb r1, [r0, #4] + ldr r1, [sp, #4] + str r2, [r0, #8] + ldr r2, [sp, #8] + str r1, [r0, #0xc] + ldr r1, [sp, #0xc] + str r2, [r0, #0x10] + str r1, [r0, #0x14] + bx lr + arm_func_end sub_020296E8 + + arm_func_start sub_02029758 +sub_02029758: ; 0x02029758 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r4, r1 + ldr r1, [r4, #0xc0] + mov r5, r0 + mov r6, r2 + cmp r1, #0 + ble _0202980C + ldr r0, [r4, #0x10] + tst r0, #0x4000000 + bne _020297C8 + ldr r1, [r4, #0xbc] + mov r0, r4 + bl GetPageItemYOffset + ldr r2, [r4, #8] + ldr r1, [r4, #0xb0] + mov r3, r6 + add r1, r2, r1 + str r1, [sp] + ldr r1, [r4] + mov r2, #1 + add r0, r1, r0 + str r0, [sp, #4] + ldrb r1, [r4, #0xd4] + mov r0, r5 + bl sub_02029688 + mov r0, #0 + strb r0, [r4, #0xd4] +_020297C8: + mov r0, r4 + bl sub_0203293C + strb r0, [r5, #0x18] + mov r0, r4 + bl sub_02032918 + strb r0, [r5, #0x19] + tst r0, #0xff + ldreqb r0, [r5, #0x18] + cmpeq r0, #0 + beq _02029820 + ldr r0, [r4, #0xc] + sub r0, r0, #2 + str r0, [r5, #0x1c] + ldr r0, [r4] + sub r0, r0, #2 + str r0, [r5, #0x20] + b _02029820 +_0202980C: + mov r0, #0 + str r0, [r5] + strb r0, [r5, #4] + strb r0, [r5, #0x19] + strb r0, [r5, #0x18] +_02029820: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_02029758 + + arm_func_start sub_02029828 +sub_02029828: ; 0x02029828 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r4, r1 + ldr r1, [r4, #0xc0] + mov r5, r0 + mov r6, r2 + cmp r1, #0 + ble _020298DC + ldr r0, [r4, #0x10] + tst r0, #0x4000000 + bne _02029898 + ldr r1, [r4, #0xbc] + mov r0, r4 + bl sub_02033350 + ldr r2, [r4, #8] + ldr r1, [r4, #0xb0] + mov r3, r6 + add r1, r2, r1 + str r1, [sp] + ldr r1, [r4] + mov r2, #1 + add r0, r1, r0 + str r0, [sp, #4] + ldrb r1, [r4, #0xd4] + mov r0, r5 + bl sub_02029688 + mov r0, #0 + strb r0, [r4, #0xd4] +_02029898: + mov r0, r4 + bl sub_020333B4 + strb r0, [r5, #0x18] + mov r0, r4 + bl sub_02033390 + strb r0, [r5, #0x19] + tst r0, #0xff + ldreqb r0, [r5, #0x18] + cmpeq r0, #0 + beq _020298F0 + ldr r0, [r4, #0xc] + sub r0, r0, #2 + str r0, [r5, #0x1c] + ldr r0, [r4] + sub r0, r0, #2 + str r0, [r5, #0x20] + b _020298F0 +_020298DC: + mov r0, #0 + str r0, [r5] + strb r0, [r5, #4] + strb r0, [r5, #0x19] + strb r0, [r5, #0x18] +_020298F0: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_02029828 + + arm_func_start sub_020298F8 +sub_020298F8: ; 0x020298F8 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #8 + mov r4, r1 + ldr r1, [r4, #0x10] + mov r5, r0 + mov lr, r2 + tst r1, #0x4000000 + bne _02029950 + ldr ip, [r4, #8] + ldr r1, [sp, #0x18] + mov r2, r3 + add r1, ip, r1 + str r1, [sp] + ldr ip, [r4] + ldr r1, [sp, #0x1c] + mov r3, lr + add r1, ip, r1 + str r1, [sp, #4] + ldrb r1, [r4, #0xd4] + bl sub_02029688 + mov r0, #0 + strb r0, [r4, #0xd4] +_02029950: + mov r0, r4 + bl sub_0203293C + strb r0, [r5, #0x18] + mov r0, r4 + bl sub_02032918 + strb r0, [r5, #0x19] + tst r0, #0xff + ldreqb r0, [r5, #0x18] + cmpeq r0, #0 + beq _02029990 + ldr r0, [r4, #0xc] + sub r0, r0, #2 + str r0, [r5, #0x1c] + ldr r0, [r4] + sub r0, r0, #2 + str r0, [r5, #0x20] +_02029990: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_020298F8 + + arm_func_start sub_02029998 +sub_02029998: ; 0x02029998 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r4, r1 + ldr r1, [r4, #0x10] + mov r5, r0 + mov lr, r2 + tst r1, #0x4000000 + bne _02029A08 + ldr r1, [r4, #8] + ldr r6, [sp, #0x28] + ldr r7, [sp, #0x30] + ldr ip, [r4] + ldr r2, [sp, #0x2c] + add r8, r1, r6 + ldr r6, [sp, #0x34] + str r8, [sp] + add r8, ip, r2 + mov r2, r3 + str r8, [sp, #4] + add r1, r1, r7 + str r1, [sp, #8] + add r1, ip, r6 + str r1, [sp, #0xc] + ldrb r1, [r4, #0xd4] + mov r3, lr + bl sub_020296E8 + mov r0, #0 + strb r0, [r4, #0xd4] +_02029A08: + mov r0, r4 + bl sub_0203293C + strb r0, [r5, #0x18] + mov r0, r4 + bl sub_02032918 + strb r0, [r5, #0x19] + tst r0, #0xff + ldreqb r0, [r5, #0x18] + cmpeq r0, #0 + beq _02029A48 + ldr r0, [r4, #0xc] + sub r0, r0, #2 + str r0, [r5, #0x1c] + ldr r0, [r4] + sub r0, r0, #2 + str r0, [r5, #0x20] +_02029A48: + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + arm_func_end sub_02029998 diff --git a/include/main_02027A80.h b/include/main_02027A80.h new file mode 100644 index 00000000..a56f95a1 --- /dev/null +++ b/include/main_02027A80.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_02027A80_H +#define PMDSKY_MAIN_02027A80_H + +void SetBothScreensWindowsColor(s32 color); + +#endif diff --git a/include/main_02028284.h b/include/main_02028284.h new file mode 100644 index 00000000..be8fec6d --- /dev/null +++ b/include/main_02028284.h @@ -0,0 +1,16 @@ +#ifndef PMDSKY_MAIN_02028284_H +#define PMDSKY_MAIN_02028284_H + +#include "util.h" + +struct unk_02028284 { + s32 field_0x0; + s32 field_0x4; + s32 field_0x8; + s32 field_0xC; +}; + + +void GetWindowRectangle(s32 window_id, struct unk_02028284* out); + +#endif diff --git a/include/main_0202833C.h b/include/main_0202833C.h new file mode 100644 index 00000000..c88a2dba --- /dev/null +++ b/include/main_0202833C.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0202833C_H +#define PMDSKY_MAIN_0202833C_H + +void* GetWindowContents(s32 window_id); + +#endif diff --git a/include/window.h b/include/window.h index 087e1a8a..3c463a4c 100644 --- a/include/window.h +++ b/include/window.h @@ -21,13 +21,20 @@ typedef struct { #include "util.h" struct Window { - u8 PAD[6]; + u8 PAD[4]; + u8 field_0x4; + u8 field_0x5; u8 width; - u8 pad2[0xD9]; + u8 field_0x7; + u8 field_0x8; + u8 field_0x9[3]; + void *field_0xC; + u8 field_0x10[0xD0]; }; extern struct Window WINDOW_LIST[]; struct Window *GetWindow(s32 window_id); +void *GetWindowContents(s32 window_id); #endif //PMDSKY_WINDOW_H diff --git a/main.lsf b/main.lsf index fbe6bc4a..2861ef9b 100644 --- a/main.lsf +++ b/main.lsf @@ -142,6 +142,12 @@ Static main Object asm/main_0202676C.o Object src/main_020275F8.o Object asm/main_0202760C.o + Object src/main_02027A80.o + Object asm/main_02027AA0.o + Object src/main_02028284.o + Object asm/main_020282C8.o + Object src/main_0202833C.o + Object asm/main_02028354.o Object src/main_02029A50.o Object asm/main_02029A68.o Object src/main_02029EC8.o diff --git a/src/main_02027A80.c b/src/main_02027A80.c new file mode 100644 index 00000000..0512ba0c --- /dev/null +++ b/src/main_02027A80.c @@ -0,0 +1,9 @@ +#include "main_02027A80.h" + +void SetScreenWindowsColor(s32 color, s32 screen); + +void SetBothScreensWindowsColor(s32 color) +{ + SetScreenWindowsColor(color, 0); + SetScreenWindowsColor(color, 1); +} diff --git a/src/main_02028284.c b/src/main_02028284.c new file mode 100644 index 00000000..9b83bcb8 --- /dev/null +++ b/src/main_02028284.c @@ -0,0 +1,15 @@ +#include "main_02028284.h" +#include "window.h" + +void GetWindowRectangle(s32 window_id, struct unk_02028284* out) +{ + struct Window *w = &WINDOW_LIST[window_id]; + s32 top = w->field_0x5 << 3; + s32 left; + + out->field_0x0 = top; + out->field_0x4 = top + (w->field_0x7 << 3); + left = w->field_0x4 << 3; + out->field_0x8 = left; + out->field_0xC = left + (w->width << 3); +} diff --git a/src/main_0202833C.c b/src/main_0202833C.c new file mode 100644 index 00000000..a2ffbd6c --- /dev/null +++ b/src/main_0202833C.c @@ -0,0 +1,9 @@ +#include "main_0202833C.h" +#include "window.h" + +void* GetWindowContents(s32 window_id) +{ + struct Window *w = &WINDOW_LIST[window_id]; + + return w->field_0xC; +}