diff options
Diffstat (limited to 'asm/window.s')
-rw-r--r-- | asm/window.s | 2619 |
1 files changed, 2619 insertions, 0 deletions
diff --git a/asm/window.s b/asm/window.s new file mode 100644 index 000000000..867a95f21 --- /dev/null +++ b/asm/window.s @@ -0,0 +1,2619 @@ + thumb_func_start nullsub_8 +nullsub_8: @ 80031BC + bx lr + thumb_func_end nullsub_8 + + thumb_func_start Window_InitFromTemplates +Window_InitFromTemplates: @ 80031C0 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x8 + adds r5, r0, 0 + movs r0, 0 + mov r8, r0 + ldr r4, =0x03002f70 +_080031D4: + mov r1, r8 + lsls r0, r1, 24 + lsrs r0, 24 + bl bg_get_tilemap + cmp r0, 0 + beq _080031E4 + ldr r0, =nullsub_8 + 1 +_080031E4: + str r0, [r4] + adds r4, 0x4 + movs r2, 0x1 + add r8, r2 + mov r0, r8 + cmp r0, 0x3 + ble _080031D4 + ldr r0, =0x082e9584 + ldr r2, [r0] + ldr r3, [r0, 0x4] + ldr r1, =0x02020004 + movs r0, 0 + movs r4, 0x1F + mov r8, r4 +_08003200: + str r2, [r1] + str r3, [r1, 0x4] + str r0, [r1, 0x8] + adds r1, 0xC + movs r4, 0x1 + negs r4, r4 + add r8, r4 + mov r4, r8 + cmp r4, 0 + bge _08003200 + movs r0, 0 + mov r8, r0 + movs r1, 0 + str r1, [sp] + ldrb r7, [r5] + cmp r7, 0xFF + bne _08003224 + b _0800335C +_08003224: + adds r6, r5, 0 + movs r2, 0 + str r2, [sp, 0x4] +_0800322A: + ldr r0, =0x03002f54 + ldr r0, [r0] + cmp r0, 0x1 + bne _08003268 + ldrb r1, [r6, 0x3] + ldrb r0, [r6, 0x4] + adds r2, r1, 0 + muls r2, r0 + adds r0, r7, 0 + movs r1, 0 + movs r3, 0 + bl do_nothing + str r0, [sp] + movs r0, 0x1 + negs r0, r0 + ldr r4, [sp] + cmp r4, r0 + bne _08003268 +_08003250: + movs r0, 0 + b _08003364 + .align 2, 0 + .pool +_08003268: + ldr r0, =0x03002f70 + mov r9, r0 + lsls r0, r7, 2 + mov r2, r9 + adds r1, r0, r2 + ldr r1, [r1] + mov r10, r0 + cmp r1, 0 + bne _080032CA + adds r0, r7, 0 + movs r1, 0x8 + bl bg_get_field + lsls r0, 16 + lsrs r5, r0, 16 + ldr r0, =0x0000ffff + cmp r5, r0 + beq _080032CA + adds r0, r5, 0 + bl malloc_and_clear + adds r4, r0, 0 + cmp r4, 0 + bne _080032A8 + bl Window_FreeMemory + b _08003250 + .align 2, 0 + .pool +_080032A8: + movs r1, 0 + mov r3, r9 + cmp r1, r5 + bge _080032BC + movs r2, 0 +_080032B2: + adds r0, r4, r1 + strb r2, [r0] + adds r1, 0x1 + cmp r1, r5 + blt _080032B2 +_080032BC: + mov r1, r10 + adds r0, r1, r3 + str r4, [r0] + adds r0, r7, 0 + adds r1, r4, 0 + bl bg_set_tilemap +_080032CA: + ldrb r1, [r6, 0x3] + ldrb r0, [r6, 0x4] + muls r0, r1 + lsls r0, 21 + lsrs r0, 16 + bl malloc_and_clear + adds r4, r0, 0 + cmp r4, 0 + bne _0800330C + adds r0, r7, 0 + bl GetNumActiveWindowsOnBg + lsls r0, 24 + cmp r0, 0 + bne _08003250 + ldr r0, =0x03002f70 + mov r2, r10 + adds r5, r2, r0 + ldr r1, [r5] + ldr r0, =nullsub_8 + 1 + cmp r1, r0 + beq _08003250 + adds r0, r1, 0 + bl free + str r4, [r5] + b _08003250 + .align 2, 0 + .pool +_0800330C: + ldr r1, =0x02020004 + adds r0, r1, 0 + adds r0, 0x8 + ldr r2, [sp, 0x4] + adds r0, r2, r0 + str r4, [r0] + adds r2, r1 + ldr r0, [r6] + ldr r1, [r6, 0x4] + str r0, [r2] + str r1, [r2, 0x4] + ldr r0, =0x03002f54 + ldr r0, [r0] + cmp r0, 0x1 + bne _08003342 + mov r4, sp + ldrh r4, [r4] + strh r4, [r2, 0x6] + ldrb r0, [r6, 0x3] + ldrb r1, [r6, 0x4] + adds r2, r0, 0 + muls r2, r1 + adds r0, r7, 0 + ldr r1, [sp] + movs r3, 0x1 + bl do_nothing +_08003342: + adds r6, 0x8 + ldr r0, [sp, 0x4] + adds r0, 0xC + str r0, [sp, 0x4] + movs r1, 0x1 + add r8, r1 + ldrb r7, [r6] + cmp r7, 0xFF + beq _0800335C + mov r2, r8 + cmp r2, 0x1F + bgt _0800335C + b _0800322A +_0800335C: + ldr r1, =0x03002f60 + movs r0, 0 + strb r0, [r1] + movs r0, 0x1 +_08003364: + add sp, 0x8 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end Window_InitFromTemplates + + thumb_func_start Window_AddFromTemplate +Window_AddFromTemplate: @ 8003380 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x4 + mov r8, r0 + movs r6, 0 + ldr r1, =0x02020004 + ldrb r0, [r1] + cmp r0, 0xFF + beq _080033B0 +_08003398: + adds r0, r6, 0x1 + lsls r0, 16 + lsrs r6, r0, 16 + cmp r6, 0x1F + bhi _080033B0 + lsls r0, r6, 1 + adds r0, r6 + lsls r0, 2 + adds r0, r1 + ldrb r0, [r0] + cmp r0, 0xFF + bne _08003398 +_080033B0: + cmp r6, 0x20 + beq _0800346A + mov r0, r8 + ldrb r7, [r0] + movs r1, 0 + mov r9, r1 + ldr r0, =0x03002f54 + ldr r0, [r0] + cmp r0, 0x1 + bne _080033E2 + mov r2, r8 + ldrb r1, [r2, 0x3] + ldrb r0, [r2, 0x4] + adds r2, r1, 0 + muls r2, r0 + adds r0, r7, 0 + movs r1, 0 + movs r3, 0 + bl do_nothing + mov r9, r0 + movs r0, 0x1 + negs r0, r0 + cmp r9, r0 + beq _0800346A +_080033E2: + ldr r3, =0x03002f70 + mov r10, r3 + lsls r0, r7, 2 + adds r1, r0, r3 + ldr r1, [r1] + str r0, [sp] + cmp r1, 0 + bne _08003432 + adds r0, r7, 0 + movs r1, 0x8 + bl bg_get_field + lsls r0, 16 + lsrs r5, r0, 16 + ldr r0, =0x0000ffff + cmp r5, r0 + beq _08003432 + adds r0, r5, 0 + bl malloc_and_clear + adds r4, r0, 0 + cmp r4, 0 + beq _0800346A + movs r1, 0 + mov r3, r10 + cmp r1, r5 + bge _08003424 + movs r2, 0 +_0800341A: + adds r0, r4, r1 + strb r2, [r0] + adds r1, 0x1 + cmp r1, r5 + blt _0800341A +_08003424: + ldr r1, [sp] + adds r0, r1, r3 + str r4, [r0] + adds r0, r7, 0 + adds r1, r4, 0 + bl bg_set_tilemap +_08003432: + mov r2, r8 + ldrb r1, [r2, 0x3] + ldrb r0, [r2, 0x4] + muls r0, r1 + lsls r0, 21 + lsrs r0, 16 + bl malloc_and_clear + adds r4, r0, 0 + cmp r4, 0 + bne _08003484 + adds r0, r7, 0 + bl GetNumActiveWindowsOnBg + lsls r0, 24 + cmp r0, 0 + bne _0800346A + ldr r0, =0x03002f70 + ldr r3, [sp] + adds r5, r3, r0 + ldr r1, [r5] + ldr r0, =nullsub_8 + 1 + cmp r1, r0 + beq _0800346A + adds r0, r1, 0 + bl free + str r4, [r5] +_0800346A: + movs r0, 0xFF + b _080034C0 + .align 2, 0 + .pool +_08003484: + ldr r2, =0x02020004 + lsls r1, r6, 1 + adds r1, r6 + lsls r1, 2 + adds r0, r2, 0 + adds r0, 0x8 + adds r0, r1, r0 + str r4, [r0] + adds r2, r1, r2 + mov r3, r8 + ldr r0, [r3] + ldr r1, [r3, 0x4] + str r0, [r2] + str r1, [r2, 0x4] + ldr r0, =0x03002f54 + ldr r0, [r0] + cmp r0, 0x1 + bne _080034BE + mov r0, r9 + strh r0, [r2, 0x6] + ldrb r0, [r2, 0x3] + ldrb r1, [r2, 0x4] + adds r2, r0, 0 + muls r2, r1 + adds r0, r7, 0 + mov r1, r9 + movs r3, 0x1 + bl do_nothing +_080034BE: + adds r0, r6, 0 +_080034C0: + add sp, 0x4 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end Window_AddFromTemplate + + thumb_func_start Window_AddFromTemplateWithoutAllocatingMemory +Window_AddFromTemplateWithoutAllocatingMemory: @ 80034D8 + push {r4-r6,lr} + adds r5, r0, 0 + movs r4, 0 + ldr r1, =0x02020004 + ldrb r0, [r1] + cmp r0, 0xFF + beq _080034FE +_080034E6: + adds r0, r4, 0x1 + lsls r0, 16 + lsrs r4, r0, 16 + cmp r4, 0x1F + bhi _080034FE + lsls r0, r4, 1 + adds r0, r4 + lsls r0, 2 + adds r0, r1 + ldrb r0, [r0] + cmp r0, 0xFF + bne _080034E6 +_080034FE: + cmp r4, 0x20 + beq _08003528 + ldrb r6, [r5] + movs r3, 0 + ldr r0, =0x03002f54 + ldr r0, [r0] + cmp r0, 0x1 + bne _08003534 + ldrb r1, [r5, 0x3] + ldrb r0, [r5, 0x4] + adds r2, r1, 0 + muls r2, r0 + adds r0, r6, 0 + movs r1, 0 + bl do_nothing + adds r3, r0, 0 + movs r0, 0x1 + negs r0, r0 + cmp r3, r0 + bne _08003534 +_08003528: + movs r0, 0xFF + b _08003564 + .align 2, 0 + .pool +_08003534: + ldr r1, =0x02020004 + lsls r0, r4, 1 + adds r0, r4 + lsls r0, 2 + adds r2, r0, r1 + ldr r0, [r5] + ldr r1, [r5, 0x4] + str r0, [r2] + str r1, [r2, 0x4] + ldr r0, =0x03002f54 + ldr r0, [r0] + cmp r0, 0x1 + bne _08003562 + strh r3, [r2, 0x6] + ldrb r0, [r2, 0x3] + ldrb r1, [r2, 0x4] + adds r2, r0, 0 + muls r2, r1 + adds r0, r6, 0 + adds r1, r3, 0 + movs r3, 0x1 + bl do_nothing +_08003562: + adds r0, r4, 0 +_08003564: + pop {r4-r6} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end Window_AddFromTemplateWithoutAllocatingMemory + + thumb_func_start Window_Remove +Window_Remove: @ 8003574 + push {r4-r7,lr} + lsls r0, 24 + lsrs r6, r0, 24 + ldr r1, =0x02020004 + lsls r0, r6, 1 + adds r0, r6 + lsls r0, 2 + adds r4, r0, r1 + ldrb r3, [r4] + adds r7, r3, 0 + ldr r0, =0x03002f54 + ldr r0, [r0] + cmp r0, 0x1 + bne _080035A0 + ldrh r1, [r4, 0x6] + ldrb r2, [r4, 0x3] + ldrb r0, [r4, 0x4] + muls r2, r0 + adds r0, r3, 0 + movs r3, 0x2 + bl do_nothing +_080035A0: + ldr r0, =0x082e9584 + ldr r1, [r0, 0x4] + ldr r0, [r0] + str r0, [r4] + str r1, [r4, 0x4] + adds r0, r7, 0 + bl GetNumActiveWindowsOnBg + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0 + bne _080035CE + ldr r0, =0x03002f70 + lsls r1, r7, 2 + adds r4, r1, r0 + ldr r1, [r4] + ldr r0, =nullsub_8 + 1 + cmp r1, r0 + beq _080035CE + adds r0, r1, 0 + bl free + str r5, [r4] +_080035CE: + ldr r1, =0x02020004 + lsls r0, r6, 1 + adds r0, r6 + lsls r0, 2 + adds r1, 0x8 + adds r4, r0, r1 + ldr r0, [r4] + cmp r0, 0 + beq _080035E8 + bl free + movs r0, 0 + str r0, [r4] +_080035E8: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_Remove + + thumb_func_start Window_FreeMemory +Window_FreeMemory: @ 8003604 + push {r4-r6,lr} + ldr r4, =0x03002f70 + movs r5, 0x3 +_0800360A: + ldr r1, [r4] + cmp r1, 0 + beq _08003620 + ldr r0, =nullsub_8 + 1 + cmp r1, r0 + beq _08003620 + adds r0, r1, 0 + bl free + movs r0, 0 + str r0, [r4] +_08003620: + adds r4, 0x4 + subs r5, 0x1 + cmp r5, 0 + bge _0800360A + ldr r0, =0x02020004 + adds r4, r0, 0 + adds r4, 0x8 + movs r6, 0 + movs r5, 0x1F +_08003632: + ldr r0, [r4] + cmp r0, 0 + beq _0800363E + bl free + str r6, [r4] +_0800363E: + adds r4, 0xC + subs r5, 0x1 + cmp r5, 0 + bge _08003632 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_FreeMemory + + thumb_func_start Window_CopyToVram +Window_CopyToVram: @ 8003658 + push {r4-r6,lr} + sub sp, 0xC + lsls r0, 24 + lsrs r0, 24 + lsls r1, 24 + lsrs r3, r1, 24 + adds r5, r3, 0 + ldr r2, =0x02020004 + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + mov r0, sp + adds r1, r2 + ldm r1!, {r2,r4,r6} + stm r0!, {r2,r4,r6} + mov r0, sp + ldrb r1, [r0, 0x3] + ldrb r0, [r0, 0x4] + muls r0, r1 + lsls r0, 21 + lsrs r4, r0, 16 + cmp r3, 0x2 + beq _080036A4 + cmp r3, 0x2 + bgt _08003694 + cmp r3, 0x1 + beq _0800369A + b _080036CE + .align 2, 0 + .pool +_08003694: + cmp r5, 0x3 + beq _080036B6 + b _080036CE +_0800369A: + mov r0, sp + ldrb r0, [r0] + bl gpu_copy_wram_bg_tilemap_to_vram + b _080036CE +_080036A4: + mov r0, sp + ldrb r0, [r0] + ldr r1, [sp, 0x8] + mov r2, sp + ldrh r3, [r2, 0x6] + adds r2, r4, 0 + bl gpu_copy_bg_tile_pattern_data_to_vram + b _080036CE +_080036B6: + mov r0, sp + ldrb r0, [r0] + ldr r1, [sp, 0x8] + mov r2, sp + ldrh r3, [r2, 0x6] + adds r2, r4, 0 + bl gpu_copy_bg_tile_pattern_data_to_vram + mov r0, sp + ldrb r0, [r0] + bl gpu_copy_wram_bg_tilemap_to_vram +_080036CE: + add sp, 0xC + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end Window_CopyToVram + + thumb_func_start Window_CopyRectToVram +Window_CopyRectToVram: @ 80036D8 + push {r4-r7,lr} + sub sp, 0xC + adds r6, r0, 0 + adds r5, r1, 0 + adds r4, r2, 0 + mov r12, r3 + ldr r3, [sp, 0x24] + ldr r0, [sp, 0x20] + cmp r0, 0 + beq _08003782 + cmp r3, 0 + beq _08003782 + ldr r2, =0x02020004 + lsls r0, r6, 1 + adds r0, r6 + lsls r0, 2 + mov r1, sp + adds r0, r2 + ldm r0!, {r2,r6,r7} + stm r1!, {r2,r6,r7} + subs r2, r3, 0x1 + mov r0, sp + ldrb r1, [r0, 0x3] + adds r3, r2, 0 + muls r3, r1 + subs r0, r1, r4 + adds r3, r0 + ldr r2, [sp, 0x20] + adds r0, r4, r2 + subs r0, r1, r0 + subs r3, r0 + lsls r3, 5 + mov r0, r12 + muls r0, r1 + adds r4, r0, r4 + cmp r5, 0x2 + beq _08003740 + cmp r5, 0x2 + bhi _08003730 + cmp r5, 0x1 + beq _08003736 + b _08003782 + .align 2, 0 + .pool +_08003730: + cmp r5, 0x3 + beq _0800375E + b _08003782 +_08003736: + mov r0, sp + ldrb r0, [r0] + bl gpu_copy_wram_bg_tilemap_to_vram + b _08003782 +_08003740: + mov r0, sp + ldrb r0, [r0] + lsls r2, r4, 5 + ldr r1, [sp, 0x8] + adds r1, r2 + lsls r2, r3, 16 + lsrs r2, 16 + mov r3, sp + ldrh r3, [r3, 0x6] + adds r3, r4 + lsls r3, 16 + lsrs r3, 16 + bl gpu_copy_bg_tile_pattern_data_to_vram + b _08003782 +_0800375E: + mov r0, sp + ldrb r0, [r0] + lsls r2, r4, 5 + ldr r1, [sp, 0x8] + adds r1, r2 + lsls r2, r3, 16 + lsrs r2, 16 + mov r3, sp + ldrh r3, [r3, 0x6] + adds r3, r4 + lsls r3, 16 + lsrs r3, 16 + bl gpu_copy_bg_tile_pattern_data_to_vram + mov r0, sp + ldrb r0, [r0] + bl gpu_copy_wram_bg_tilemap_to_vram +_08003782: + add sp, 0xC + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end Window_CopyRectToVram + + thumb_func_start Window_WriteStandardTileMap +Window_WriteStandardTileMap: @ 800378C + push {r4,lr} + sub sp, 0x1C + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x02020004 + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + add r0, sp, 0x10 + adds r1, r2 + ldm r1!, {r2-r4} + stm r0!, {r2-r4} + add r0, sp, 0x10 + ldrb r0, [r0] + movs r1, 0xA + bl bg_get_field + adds r1, r0, 0 + add r0, sp, 0x10 + ldrh r0, [r0, 0x6] + adds r1, r0 + lsls r1, 16 + lsrs r1, 16 + add r0, sp, 0x10 + ldrb r0, [r0] + add r2, sp, 0x10 + ldrb r2, [r2, 0x1] + add r3, sp, 0x10 + ldrb r3, [r3, 0x2] + add r4, sp, 0x10 + ldrb r4, [r4, 0x3] + str r4, [sp] + add r4, sp, 0x10 + ldrb r4, [r4, 0x4] + str r4, [sp, 0x4] + add r4, sp, 0x10 + ldrb r4, [r4, 0x5] + str r4, [sp, 0x8] + movs r4, 0x1 + str r4, [sp, 0xC] + bl bg_write_sequence_to_wram_tile_map_rect + add sp, 0x1C + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_WriteStandardTileMap + + thumb_func_start Window_WriteStandardTileMapRectOverridePalette +Window_WriteStandardTileMapRectOverridePalette: @ 80037EC + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x24 + ldr r4, [sp, 0x44] + ldr r5, [sp, 0x48] + lsls r0, 24 + lsrs r0, 24 + lsls r1, 24 + lsrs r1, 24 + mov r10, r1 + lsls r2, 24 + lsrs r2, 24 + mov r9, r2 + lsls r3, 24 + lsrs r3, 24 + str r3, [sp, 0x1C] + lsls r4, 24 + lsrs r4, 24 + mov r8, r4 + lsls r5, 24 + lsrs r5, 24 + str r5, [sp, 0x20] + ldr r2, =0x02020004 + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + add r0, sp, 0x10 + adds r1, r2 + ldm r1!, {r2-r4} + stm r0!, {r2-r4} + add r0, sp, 0x10 + ldrb r0, [r0] + movs r1, 0xA + bl bg_get_field + add r2, sp, 0x10 + adds r1, r2, 0 + ldrb r1, [r1, 0x3] + mov r3, r9 + muls r3, r1 + adds r1, r3, 0 + ldrh r2, [r2, 0x6] + adds r1, r2 + add r1, r10 + adds r0, r1 + lsls r0, 16 + lsrs r6, r0, 16 + movs r5, 0 + cmp r5, r8 + bge _0800388E + add r4, sp, 0x10 + movs r7, 0x1 +_0800385A: + ldrb r0, [r4] + ldrb r2, [r4, 0x1] + add r2, r10 + lsls r2, 24 + lsrs r2, 24 + ldrb r3, [r4, 0x2] + add r3, r9 + adds r3, r5 + lsls r3, 24 + lsrs r3, 24 + ldr r1, [sp, 0x1C] + str r1, [sp] + str r7, [sp, 0x4] + ldr r1, [sp, 0x20] + str r1, [sp, 0x8] + str r7, [sp, 0xC] + adds r1, r6, 0 + bl bg_write_sequence_to_wram_tile_map_rect + ldrb r0, [r4, 0x3] + adds r0, r6, r0 + lsls r0, 16 + lsrs r6, r0, 16 + adds r5, 0x1 + cmp r5, r8 + blt _0800385A +_0800388E: + add sp, 0x24 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_WriteStandardTileMapRectOverridePalette + + thumb_func_start Window_FillTileMap +Window_FillTileMap: @ 80038A4 + push {r4,lr} + sub sp, 0x18 + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x02020004 + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + add r0, sp, 0xC + adds r1, r2 + ldm r1!, {r2-r4} + stm r0!, {r2-r4} + add r0, sp, 0xC + ldrb r0, [r0] + ldr r1, =0x03002f60 + ldrb r1, [r1] + add r2, sp, 0xC + ldrb r2, [r2, 0x1] + add r3, sp, 0xC + ldrb r3, [r3, 0x2] + add r4, sp, 0xC + ldrb r4, [r4, 0x3] + str r4, [sp] + add r4, sp, 0xC + ldrb r4, [r4, 0x4] + str r4, [sp, 0x4] + add r4, sp, 0xC + ldrb r4, [r4, 0x5] + str r4, [sp, 0x8] + bl Bg_FillWramTileMapRectWithTileAndPalette + add sp, 0x18 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_FillTileMap + + thumb_func_start Window_WriteStandardTileMapRect +Window_WriteStandardTileMapRect: @ 80038F4 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x20 + ldr r4, [sp, 0x40] + lsls r0, 24 + lsrs r0, 24 + lsls r1, 24 + lsrs r1, 24 + mov r10, r1 + lsls r2, 24 + lsrs r2, 24 + mov r9, r2 + lsls r3, 24 + lsrs r3, 24 + str r3, [sp, 0x1C] + lsls r4, 24 + lsrs r4, 24 + mov r8, r4 + ldr r2, =0x02020004 + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + add r0, sp, 0x10 + adds r1, r2 + ldm r1!, {r2-r4} + stm r0!, {r2-r4} + add r0, sp, 0x10 + ldrb r0, [r0] + movs r1, 0xA + bl bg_get_field + add r2, sp, 0x10 + adds r1, r2, 0 + ldrb r1, [r1, 0x3] + mov r3, r9 + muls r3, r1 + adds r1, r3, 0 + ldrh r2, [r2, 0x6] + adds r1, r2 + add r1, r10 + adds r0, r1 + lsls r0, 16 + lsrs r6, r0, 16 + movs r5, 0 + cmp r5, r8 + bge _0800398E + add r4, sp, 0x10 + movs r7, 0x1 +_0800395A: + ldrb r0, [r4] + ldrb r2, [r4, 0x1] + add r2, r10 + lsls r2, 24 + lsrs r2, 24 + ldrb r3, [r4, 0x2] + add r3, r9 + adds r3, r5 + lsls r3, 24 + lsrs r3, 24 + ldr r1, [sp, 0x1C] + str r1, [sp] + str r7, [sp, 0x4] + ldrb r1, [r4, 0x5] + str r1, [sp, 0x8] + str r7, [sp, 0xC] + adds r1, r6, 0 + bl bg_write_sequence_to_wram_tile_map_rect + ldrb r0, [r4, 0x3] + adds r0, r6, r0 + lsls r0, 16 + lsrs r6, r0, 16 + adds r5, 0x1 + cmp r5, r8 + blt _0800395A +_0800398E: + add sp, 0x20 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_WriteStandardTileMapRect + + thumb_func_start Window_CopyWholePixelBlockToWindow +Window_CopyWholePixelBlockToWindow: @ 80039A4 + push {r4,r5,lr} + sub sp, 0x18 + ldr r4, [sp, 0x24] + ldr r5, [sp, 0x28] + lsls r0, 24 + lsrs r0, 24 + lsls r2, 16 + lsrs r2, 16 + lsls r3, 16 + lsrs r3, 16 + lsls r4, 16 + lsrs r4, 16 + lsls r5, 16 + lsrs r5, 16 + str r4, [sp] + str r5, [sp, 0x4] + str r2, [sp, 0x8] + str r3, [sp, 0xC] + str r4, [sp, 0x10] + str r5, [sp, 0x14] + movs r2, 0 + movs r3, 0 + bl Window_CopyPixelRectToWindow + add sp, 0x18 + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end Window_CopyWholePixelBlockToWindow + + thumb_func_start Window_CopyPixelRectToWindow +Window_CopyPixelRectToWindow: @ 80039DC + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x24 + ldr r4, [sp, 0x44] + ldr r5, [sp, 0x48] + ldr r6, [sp, 0x4C] + mov r8, r6 + ldr r6, [sp, 0x50] + mov r9, r6 + ldr r6, [sp, 0x54] + mov r10, r6 + ldr r6, [sp, 0x58] + mov r12, r6 + lsls r0, 24 + lsrs r0, 24 + lsls r2, 16 + lsrs r2, 16 + lsls r3, 16 + lsrs r3, 16 + lsls r4, 16 + mov r6, r8 + lsls r6, 16 + lsrs r6, 16 + mov r8, r6 + mov r6, r9 + lsls r6, 16 + lsrs r6, 16 + mov r9, r6 + mov r6, r10 + lsls r6, 16 + lsrs r6, 16 + mov r10, r6 + mov r6, r12 + lsls r6, 16 + lsrs r6, 16 + mov r12, r6 + str r1, [sp, 0x14] + ldr r7, =0xffff0000 + lsls r5, 16 + ldr r6, =0x0000ffff + lsrs r4, 16 + orrs r4, r5 + str r4, [sp, 0x18] + ldr r1, =0x02020004 + lsls r5, r0, 1 + adds r5, r0 + lsls r5, 2 + adds r0, r1, 0 + adds r0, 0x8 + adds r0, r5, r0 + ldr r0, [r0] + str r0, [sp, 0x1C] + adds r5, r1 + ldrb r0, [r5, 0x3] + lsls r0, 3 + add r1, sp, 0x1C + ldr r4, [r1, 0x4] + ands r4, r7 + orrs r4, r0 + str r4, [r1, 0x4] + ldrb r0, [r5, 0x4] + lsls r0, 19 + ands r6, r4 + orrs r6, r0 + str r6, [r1, 0x4] + mov r0, r8 + str r0, [sp] + mov r6, r9 + str r6, [sp, 0x4] + mov r0, r10 + str r0, [sp, 0x8] + mov r6, r12 + str r6, [sp, 0xC] + movs r0, 0 + str r0, [sp, 0x10] + add r0, sp, 0x14 + bl PixelBlock_CopyRect4Bpp + add sp, 0x24 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_CopyPixelRectToWindow + + thumb_func_start Window_copy_pixels_rect_3 +Window_copy_pixels_rect_3: @ 8003A9C + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x28 + ldr r4, [sp, 0x48] + ldr r5, [sp, 0x4C] + ldr r6, [sp, 0x50] + mov r8, r6 + ldr r7, [sp, 0x54] + mov r9, r7 + ldr r6, [sp, 0x58] + mov r10, r6 + ldr r7, [sp, 0x5C] + mov r12, r7 + ldr r6, [sp, 0x60] + lsls r0, 24 + lsrs r0, 24 + lsls r2, 16 + lsrs r2, 16 + lsls r3, 16 + lsrs r3, 16 + lsls r4, 16 + mov r7, r8 + lsls r7, 16 + lsrs r7, 16 + mov r8, r7 + mov r7, r9 + lsls r7, 16 + lsrs r7, 16 + mov r9, r7 + mov r7, r10 + lsls r7, 16 + lsrs r7, 16 + mov r10, r7 + mov r7, r12 + lsls r7, 16 + lsrs r7, 16 + mov r12, r7 + lsls r6, 24 + lsrs r6, 24 + str r6, [sp, 0x24] + str r1, [sp, 0x14] + lsls r5, 16 + ldr r6, =0x0000ffff + lsrs r4, 16 + orrs r4, r5 + str r4, [sp, 0x18] + ldr r1, =0x02020004 + lsls r5, r0, 1 + adds r5, r0 + lsls r5, 2 + adds r0, r1, 0 + adds r0, 0x8 + adds r0, r5, r0 + ldr r0, [r0] + str r0, [sp, 0x1C] + adds r5, r1 + ldrb r0, [r5, 0x3] + lsls r0, 3 + add r1, sp, 0x1C + ldr r4, [r1, 0x4] + ldr r7, =0xffff0000 + ands r4, r7 + orrs r4, r0 + str r4, [r1, 0x4] + ldrb r0, [r5, 0x4] + lsls r0, 19 + ands r6, r4 + orrs r6, r0 + str r6, [r1, 0x4] + mov r0, r8 + str r0, [sp] + mov r6, r9 + str r6, [sp, 0x4] + mov r7, r10 + str r7, [sp, 0x8] + mov r0, r12 + str r0, [sp, 0xC] + ldr r6, [sp, 0x24] + str r6, [sp, 0x10] + add r0, sp, 0x14 + bl PixelBlock_CopyRect4Bpp + add sp, 0x28 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_copy_pixels_rect_3 + + thumb_func_start Window_FillPixelRect +Window_FillPixelRect: @ 8003B64 + push {r4-r6,lr} + mov r6, r9 + mov r5, r8 + push {r5,r6} + sub sp, 0x10 + mov r9, r3 + ldr r3, [sp, 0x28] + ldr r4, [sp, 0x2C] + mov r8, r4 + lsls r0, 24 + lsrs r0, 24 + lsls r1, 24 + lsrs r1, 24 + lsls r2, 16 + lsrs r2, 16 + mov r4, r9 + lsls r4, 16 + lsrs r4, 16 + mov r9, r4 + lsls r3, 16 + lsrs r3, 16 + mov r4, r8 + lsls r4, 16 + lsrs r4, 16 + mov r8, r4 + ldr r5, =0x02020004 + lsls r4, r0, 1 + adds r4, r0 + lsls r4, 2 + adds r0, r5, 0 + adds r0, 0x8 + adds r0, r4, r0 + ldr r0, [r0] + str r0, [sp, 0x8] + adds r4, r5 + ldrb r0, [r4, 0x3] + lsls r0, 3 + ldr r6, =0xffff0000 + ldr r5, [sp, 0xC] + ands r5, r6 + orrs r5, r0 + str r5, [sp, 0xC] + ldrb r4, [r4, 0x4] + lsls r4, 19 + ldr r0, =0x0000ffff + ands r0, r5 + orrs r0, r4 + str r0, [sp, 0xC] + mov r0, r8 + str r0, [sp] + str r1, [sp, 0x4] + add r0, sp, 0x8 + adds r1, r2, 0 + mov r2, r9 + bl PixelBlock_FillRect4Bpp + add sp, 0x10 + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_FillPixelRect + + thumb_func_start Window_CopyToPixels +Window_CopyToPixels: @ 8003BF0 + push {r4-r6,lr} + adds r6, r1, 0 + lsls r0, 24 + lsrs r4, r0, 24 + lsls r5, r2, 16 + lsls r3, 16 + lsrs r2, r3, 16 + cmp r5, 0 + beq _08003C24 + ldr r1, =0x02020004 + lsls r0, r4, 1 + adds r0, r4 + lsls r0, 2 + adds r1, 0x8 + adds r0, r1 + lsls r2, 5 + ldr r1, [r0] + adds r1, r2 + lsrs r2, r5, 17 + adds r0, r6, 0 + bl CpuSet + b _08003C3C + .align 2, 0 + .pool +_08003C24: + ldr r1, =0x02020004 + lsls r0, r4, 1 + adds r0, r4 + lsls r0, 2 + adds r1, 0x8 + adds r0, r1 + lsls r2, 5 + ldr r1, [r0] + adds r1, r2 + adds r0, r6, 0 + bl LZ77UnCompWram +_08003C3C: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_CopyToPixels + + thumb_func_start Window_FastFillPixels +Window_FastFillPixels: @ 8003C48 + push {r4,r5,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r0, 24 + lsls r1, 24 + lsrs r1, 24 + ldr r5, =0x02020004 + lsls r4, r0, 1 + adds r4, r0 + lsls r4, 2 + adds r0, r4, r5 + ldrb r2, [r0, 0x3] + ldrb r0, [r0, 0x4] + muls r2, r0 + lsls r0, r1, 24 + lsls r3, r1, 16 + orrs r0, r3 + lsls r3, r1, 8 + orrs r0, r3 + orrs r0, r1 + str r0, [sp] + adds r5, 0x8 + adds r4, r5 + ldr r1, [r4] + lsls r2, 3 + movs r0, 0x80 + lsls r0, 17 + orrs r2, r0 + mov r0, sp + bl CpuFastSet + add sp, 0x4 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_FastFillPixels + + thumb_func_start Window_ScrollVertically +Window_ScrollVertically: @ 8003C94 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x8 + lsls r0, 24 + lsrs r0, 24 + lsls r1, 24 + lsrs r1, 24 + mov r8, r1 + lsls r2, 24 + lsrs r2, 24 + str r2, [sp] + lsls r3, 24 + lsrs r3, 24 + ldr r2, =0x02020004 + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + adds r4, r1, r2 + adds r2, 0x8 + adds r1, r2 + ldr r5, [r1] + lsls r7, r3, 24 + lsls r0, r3, 16 + orrs r7, r0 + lsls r0, r3, 8 + orrs r7, r0 + orrs r7, r3 + ldr r1, [r4] + ldr r2, [r4, 0x4] + ldrb r3, [r4, 0x4] + lsrs r0, r1, 24 + muls r0, r3 + lsls r6, r0, 5 + lsrs r1, 24 + mov r12, r1 + mov r0, r8 + cmp r0, 0x1 + bne _08003CE8 + b _08003E9E +_08003CE8: + cmp r0, 0x1 + ble _08003CEE + b _08004046 +_08003CEE: + cmp r0, 0 + beq _08003CF4 + b _08004046 +_08003CF4: + movs r4, 0 + cmp r4, r6 + blt _08003CFC + b _08004046 +_08003CFC: + movs r1, 0x8 + negs r1, r1 + mov r9, r1 + movs r2, 0x7 + mov r8, r2 + mov r10, r5 +_08003D08: + ldr r3, [sp] + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + adds r0, r3, 0 + mov r2, r8 + ands r0, r2 + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003D34 + adds r0, r5, r1 + ldr r0, [r0] + mov r1, r10 + str r0, [r1] + b _08003D38 + .align 2, 0 + .pool +_08003D34: + mov r2, r10 + str r7, [r2] +_08003D38: + adds r3, 0x1 + adds r2, r4, 0x4 + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003D64 + adds r0, r5, r2 + adds r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003D68 +_08003D64: + adds r0, r5, r2 + str r7, [r0] +_08003D68: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0x8 + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003D96 + adds r0, r5, r2 + adds r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003D9A +_08003D96: + adds r0, r5, r2 + str r7, [r0] +_08003D9A: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0xC + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003DC8 + adds r0, r5, r2 + adds r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003DCC +_08003DC8: + adds r0, r5, r2 + str r7, [r0] +_08003DCC: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0x10 + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003DFA + adds r0, r5, r2 + adds r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003DFE +_08003DFA: + adds r0, r5, r2 + str r7, [r0] +_08003DFE: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0x14 + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003E2C + adds r0, r5, r2 + adds r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003E30 +_08003E2C: + adds r0, r5, r2 + str r7, [r0] +_08003E30: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0x18 + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003E5E + adds r0, r5, r2 + adds r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003E62 +_08003E5E: + adds r0, r5, r2 + str r7, [r0] +_08003E62: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0x1C + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + adds r0, r1, 0 + mov r1, r8 + ands r3, r1 + orrs r0, r3 + lsls r0, 2 + adds r1, r4, r0 + cmp r1, r6 + bge _08003E8C + adds r0, r5, r2 + adds r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003E90 +_08003E8C: + adds r0, r5, r2 + str r7, [r0] +_08003E90: + movs r2, 0x20 + add r10, r2 + adds r4, 0x20 + cmp r4, r6 + bge _08003E9C + b _08003D08 +_08003E9C: + b _08004046 +_08003E9E: + subs r0, r6, 0x4 + adds r5, r0 + movs r4, 0 + cmp r4, r6 + blt _08003EAA + b _08004046 +_08003EAA: + movs r0, 0x8 + negs r0, r0 + mov r9, r0 + movs r1, 0x7 + mov r8, r1 + mov r10, r5 +_08003EB6: + ldr r3, [sp] + adds r0, r3, 0 + mov r2, r9 + ands r0, r2 + mov r1, r12 + muls r1, r0 + adds r0, r3, 0 + mov r2, r8 + ands r0, r2 + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003EDC + subs r0, r5, r1 + ldr r0, [r0] + mov r1, r10 + str r0, [r1] + b _08003EE0 +_08003EDC: + mov r2, r10 + str r7, [r2] +_08003EE0: + adds r3, 0x1 + adds r2, r4, 0x4 + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003F0C + subs r0, r5, r2 + subs r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003F10 +_08003F0C: + subs r0, r5, r2 + str r7, [r0] +_08003F10: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0x8 + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003F3E + subs r0, r5, r2 + subs r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003F42 +_08003F3E: + subs r0, r5, r2 + str r7, [r0] +_08003F42: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0xC + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003F70 + subs r0, r5, r2 + subs r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003F74 +_08003F70: + subs r0, r5, r2 + str r7, [r0] +_08003F74: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0x10 + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003FA2 + subs r0, r5, r2 + subs r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003FA6 +_08003FA2: + subs r0, r5, r2 + str r7, [r0] +_08003FA6: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0x14 + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08003FD4 + subs r0, r5, r2 + subs r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08003FD8 +_08003FD4: + subs r0, r5, r2 + str r7, [r0] +_08003FD8: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0x18 + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + str r1, [sp, 0x4] + adds r0, r3, 0 + mov r1, r8 + ands r0, r1 + ldr r1, [sp, 0x4] + orrs r1, r0 + lsls r1, 2 + adds r1, r4, r1 + cmp r1, r6 + bge _08004006 + subs r0, r5, r2 + subs r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _0800400A +_08004006: + subs r0, r5, r2 + str r7, [r0] +_0800400A: + adds r3, 0x1 + adds r2, r4, 0 + adds r2, 0x1C + adds r0, r3, 0 + mov r1, r9 + ands r0, r1 + mov r1, r12 + muls r1, r0 + adds r0, r1, 0 + mov r1, r8 + ands r3, r1 + orrs r0, r3 + lsls r0, 2 + adds r1, r4, r0 + cmp r1, r6 + bge _08004034 + subs r0, r5, r2 + subs r1, r5, r1 + ldr r1, [r1] + str r1, [r0] + b _08004038 +_08004034: + subs r0, r5, r2 + str r7, [r0] +_08004038: + movs r2, 0x20 + negs r2, r2 + add r10, r2 + adds r4, 0x20 + cmp r4, r6 + bge _08004046 + b _08003EB6 +_08004046: + add sp, 0x8 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end Window_ScrollVertically + + thumb_func_start CallWindowFunction +CallWindowFunction: @ 8004058 + push {r4-r6,lr} + mov r6, r8 + push {r6} + sub sp, 0x8 + mov r8, r1 + lsls r0, 24 + lsrs r0, 24 + ldr r2, =0x02020004 + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + adds r1, r2 + ldr r5, [r1] + ldr r6, [r1, 0x4] + ldrb r0, [r1] + lsrs r1, r5, 8 + lsls r1, 24 + lsrs r1, 24 + lsrs r2, r5, 16 + lsls r2, 24 + lsrs r2, 24 + lsrs r3, r5, 24 + lsls r4, r6, 24 + lsrs r4, 24 + str r4, [sp] + lsrs r4, r6, 8 + lsls r4, 24 + lsrs r4, 24 + str r4, [sp, 0x4] + bl _call_via_r8 + add sp, 0x8 + pop {r3} + mov r8, r3 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end CallWindowFunction + + thumb_func_start Window_SetField +Window_SetField: @ 80040A8 + push {lr} + lsls r0, 24 + lsrs r3, r0, 24 + lsls r1, 24 + lsrs r0, r1, 24 + cmp r0, 0x7 + bhi _08004142 + lsls r0, 2 + ldr r1, =_080040C4 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 + .pool + .align 2, 0 +_080040C4: + .4byte _08004142 + .4byte _080040E4 + .4byte _080040F8 + .4byte _08004142 + .4byte _08004142 + .4byte _0800410C + .4byte _08004120 + .4byte _08004134 +_080040E4: + ldr r1, =0x02020004 + lsls r0, r3, 1 + adds r0, r3 + lsls r0, 2 + adds r0, r1 + strb r2, [r0, 0x1] + movs r0, 0 + b _08004144 + .align 2, 0 + .pool +_080040F8: + ldr r1, =0x02020004 + lsls r0, r3, 1 + adds r0, r3 + lsls r0, 2 + adds r0, r1 + strb r2, [r0, 0x2] + movs r0, 0 + b _08004144 + .align 2, 0 + .pool +_0800410C: + ldr r1, =0x02020004 + lsls r0, r3, 1 + adds r0, r3 + lsls r0, 2 + adds r0, r1 + strb r2, [r0, 0x5] + movs r0, 0 + b _08004144 + .align 2, 0 + .pool +_08004120: + ldr r1, =0x02020004 + lsls r0, r3, 1 + adds r0, r3 + lsls r0, 2 + adds r0, r1 + strh r2, [r0, 0x6] + movs r0, 0 + b _08004144 + .align 2, 0 + .pool +_08004134: + ldr r1, =0x02020004 + lsls r0, r3, 1 + adds r0, r3 + lsls r0, 2 + adds r1, 0x8 + adds r0, r1 + str r2, [r0] +_08004142: + movs r0, 0x1 +_08004144: + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end Window_SetField + + thumb_func_start Window_GetField +Window_GetField: @ 800414C + push {lr} + lsls r0, 24 + lsrs r2, r0, 24 + lsls r1, 24 + lsrs r0, r1, 24 + cmp r0, 0x7 + bhi _08004228 + lsls r0, 2 + ldr r1, =_08004168 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 + .pool + .align 2, 0 +_08004168: + .4byte _08004188 + .4byte _0800419C + .4byte _080041B0 + .4byte _080041C4 + .4byte _080041D8 + .4byte _080041EC + .4byte _08004200 + .4byte _08004214 +_08004188: + ldr r0, =0x02020004 + lsls r1, r2, 1 + adds r1, r2 + lsls r1, 2 + adds r1, r0 + ldrb r0, [r1] + b _0800422A + .align 2, 0 + .pool +_0800419C: + ldr r0, =0x02020004 + lsls r1, r2, 1 + adds r1, r2 + lsls r1, 2 + adds r1, r0 + ldrb r0, [r1, 0x1] + b _0800422A + .align 2, 0 + .pool +_080041B0: + ldr r0, =0x02020004 + lsls r1, r2, 1 + adds r1, r2 + lsls r1, 2 + adds r1, r0 + ldrb r0, [r1, 0x2] + b _0800422A + .align 2, 0 + .pool +_080041C4: + ldr r0, =0x02020004 + lsls r1, r2, 1 + adds r1, r2 + lsls r1, 2 + adds r1, r0 + ldrb r0, [r1, 0x3] + b _0800422A + .align 2, 0 + .pool +_080041D8: + ldr r0, =0x02020004 + lsls r1, r2, 1 + adds r1, r2 + lsls r1, 2 + adds r1, r0 + ldrb r0, [r1, 0x4] + b _0800422A + .align 2, 0 + .pool +_080041EC: + ldr r0, =0x02020004 + lsls r1, r2, 1 + adds r1, r2 + lsls r1, 2 + adds r1, r0 + ldrb r0, [r1, 0x5] + b _0800422A + .align 2, 0 + .pool +_08004200: + ldr r0, =0x02020004 + lsls r1, r2, 1 + adds r1, r2 + lsls r1, 2 + adds r1, r0 + ldrh r0, [r1, 0x6] + b _0800422A + .align 2, 0 + .pool +_08004214: + ldr r0, =0x02020004 + lsls r1, r2, 1 + adds r1, r2 + lsls r1, 2 + adds r0, 0x8 + adds r1, r0 + ldr r0, [r1] + b _0800422A + .align 2, 0 + .pool +_08004228: + movs r0, 0 +_0800422A: + pop {r1} + bx r1 + thumb_func_end Window_GetField + + thumb_func_start GetNumActiveWindowsOnBg +GetNumActiveWindowsOnBg: @ 8004230 + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + movs r3, 0 + ldr r2, =0x02020004 + movs r1, 0x1F +_0800423C: + ldrb r0, [r2] + cmp r0, r4 + bne _08004248 + adds r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 +_08004248: + adds r2, 0xC + subs r1, 0x1 + cmp r1, 0 + bge _0800423C + adds r0, r3, 0 + pop {r4} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end GetNumActiveWindowsOnBg + + thumb_func_start nullsub_9 +nullsub_9: @ 800425C + bx lr + thumb_func_end nullsub_9 + + thumb_func_start Window_AddFromTemplate8Bpp +Window_AddFromTemplate8Bpp: @ 8004260 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + mov r9, r0 + movs r6, 0 + ldr r1, =0x02020004 + ldrb r0, [r1] + cmp r0, 0xFF + beq _0800428E +_08004276: + adds r0, r6, 0x1 + lsls r0, 16 + lsrs r6, r0, 16 + cmp r6, 0x1F + bhi _0800428E + lsls r0, r6, 1 + adds r0, r6 + lsls r0, 2 + adds r0, r1 + ldrb r0, [r0] + cmp r0, 0xFF + bne _08004276 +_0800428E: + cmp r6, 0x20 + beq _08004322 + mov r0, r9 + ldrb r7, [r0] + ldr r1, =0x03002f70 + mov r10, r1 + lsls r2, r7, 2 + mov r8, r2 + mov r0, r8 + add r0, r10 + ldr r0, [r0] + cmp r0, 0 + bne _080042EA + adds r0, r7, 0 + movs r1, 0x8 + bl bg_get_field + lsls r0, 16 + lsrs r5, r0, 16 + ldr r0, =0x0000ffff + cmp r5, r0 + beq _080042EA + adds r0, r5, 0 + bl malloc + adds r4, r0, 0 + cmp r4, 0 + beq _08004322 + movs r1, 0 + mov r12, r10 + mov r3, r8 + cmp r1, r5 + bge _080042DC + movs r2, 0 +_080042D2: + adds r0, r4, r1 + strb r2, [r0] + adds r1, 0x1 + cmp r1, r5 + blt _080042D2 +_080042DC: + mov r1, r12 + adds r0, r3, r1 + str r4, [r0] + adds r0, r7, 0 + adds r1, r4, 0 + bl bg_set_tilemap +_080042EA: + mov r2, r9 + ldrb r1, [r2, 0x3] + ldrb r0, [r2, 0x4] + muls r0, r1 + lsls r0, 22 + lsrs r0, 16 + bl malloc + adds r4, r0, 0 + cmp r4, 0 + bne _08004338 + adds r0, r7, 0 + bl GetNumActiveWindowsOnBgDuplicate + lsls r0, 24 + cmp r0, 0 + bne _08004322 + ldr r0, =0x03002f70 + lsls r1, r7, 2 + adds r5, r1, r0 + ldr r1, [r5] + ldr r0, =nullsub_9 + 1 + cmp r1, r0 + beq _08004322 + adds r0, r1, 0 + bl free + str r4, [r5] +_08004322: + movs r0, 0xFF + b _08004356 + .align 2, 0 + .pool +_08004338: + ldr r1, =0x02020004 + lsls r2, r6, 1 + adds r2, r6 + lsls r2, 2 + adds r0, r1, 0 + adds r0, 0x8 + adds r0, r2, r0 + str r4, [r0] + adds r2, r1 + mov r3, r9 + ldr r0, [r3] + ldr r1, [r3, 0x4] + str r0, [r2] + str r1, [r2, 0x4] + adds r0, r6, 0 +_08004356: + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end Window_AddFromTemplate8Bpp + + thumb_func_start Window_FillPixels8Bpp +Window_FillPixels8Bpp: @ 8004368 + push {r4-r6,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, 24 + lsrs r5, r1, 24 + ldr r6, =0x02020004 + lsls r1, r0, 1 + adds r1, r0 + lsls r4, r1, 2 + adds r0, r4, r6 + ldrb r1, [r0, 0x3] + ldrb r0, [r0, 0x4] + muls r0, r1 + lsls r0, 22 + lsrs r3, r0, 16 + movs r2, 0 + cmp r2, r3 + bge _0800439E + adds r0, r6, 0 + adds r0, 0x8 + adds r1, r4, r0 +_08004392: + ldr r0, [r1] + adds r0, r2 + strb r5, [r0] + adds r2, 0x1 + cmp r2, r3 + blt _08004392 +_0800439E: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_FillPixels8Bpp + + thumb_func_start Window_FillPixelRect8Bpp +Window_FillPixelRect8Bpp: @ 80043A8 + push {r4-r6,lr} + mov r6, r9 + mov r5, r8 + push {r5,r6} + sub sp, 0x10 + mov r9, r3 + ldr r3, [sp, 0x28] + ldr r4, [sp, 0x2C] + mov r8, r4 + lsls r0, 24 + lsrs r0, 24 + lsls r1, 24 + lsrs r1, 24 + lsls r2, 16 + lsrs r2, 16 + mov r4, r9 + lsls r4, 16 + lsrs r4, 16 + mov r9, r4 + lsls r3, 16 + lsrs r3, 16 + mov r4, r8 + lsls r4, 16 + lsrs r4, 16 + mov r8, r4 + ldr r5, =0x02020004 + lsls r4, r0, 1 + adds r4, r0 + lsls r4, 2 + adds r0, r5, 0 + adds r0, 0x8 + adds r0, r4, r0 + ldr r0, [r0] + str r0, [sp, 0x8] + adds r4, r5 + ldrb r0, [r4, 0x3] + lsls r0, 3 + ldr r6, =0xffff0000 + ldr r5, [sp, 0xC] + ands r5, r6 + orrs r5, r0 + str r5, [sp, 0xC] + ldrb r4, [r4, 0x4] + lsls r4, 19 + ldr r0, =0x0000ffff + ands r0, r5 + orrs r0, r4 + str r0, [sp, 0xC] + mov r0, r8 + str r0, [sp] + str r1, [sp, 0x4] + add r0, sp, 0x8 + adds r1, r2, 0 + mov r2, r9 + bl PixelBlock_FillRect8Bpp + add sp, 0x10 + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_FillPixelRect8Bpp + + thumb_func_start Window_CopyPixelRectToWindow4BppTo8Bpp +Window_CopyPixelRectToWindow4BppTo8Bpp: @ 8004434 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x2C + ldr r4, [sp, 0x4C] + ldr r5, [sp, 0x50] + ldr r6, [sp, 0x54] + mov r8, r6 + ldr r7, [sp, 0x58] + mov r9, r7 + ldr r6, [sp, 0x5C] + mov r10, r6 + ldr r7, [sp, 0x60] + mov r12, r7 + ldr r6, [sp, 0x64] + lsls r0, 24 + lsrs r0, 24 + lsls r2, 16 + lsrs r2, 16 + lsls r3, 16 + lsrs r3, 16 + lsls r4, 16 + mov r7, r8 + lsls r7, 16 + lsrs r7, 16 + mov r8, r7 + mov r7, r9 + lsls r7, 16 + lsrs r7, 16 + mov r9, r7 + mov r7, r10 + lsls r7, 16 + lsrs r7, 16 + mov r10, r7 + mov r7, r12 + lsls r7, 16 + lsrs r7, 16 + mov r12, r7 + lsls r6, 24 + lsrs r6, 24 + str r6, [sp, 0x28] + str r1, [sp, 0x18] + lsls r5, 16 + ldr r6, =0x0000ffff + lsrs r4, 16 + orrs r4, r5 + str r4, [sp, 0x1C] + ldr r1, =0x02020004 + lsls r5, r0, 1 + adds r5, r0 + lsls r5, 2 + adds r0, r1, 0 + adds r0, 0x8 + adds r0, r5, r0 + ldr r0, [r0] + str r0, [sp, 0x20] + adds r5, r1 + ldrb r0, [r5, 0x3] + lsls r0, 3 + add r1, sp, 0x20 + ldr r4, [r1, 0x4] + ldr r7, =0xffff0000 + ands r4, r7 + orrs r4, r0 + str r4, [r1, 0x4] + ldrb r0, [r5, 0x4] + lsls r0, 19 + ands r6, r4 + orrs r6, r0 + str r6, [r1, 0x4] + mov r0, r8 + str r0, [sp] + mov r6, r9 + str r6, [sp, 0x4] + mov r7, r10 + str r7, [sp, 0x8] + mov r0, r12 + str r0, [sp, 0xC] + movs r0, 0 + str r0, [sp, 0x10] + ldr r6, [sp, 0x28] + str r6, [sp, 0x14] + add r0, sp, 0x18 + bl PixelBlock_CopyRect4BppTo8Bpp + add sp, 0x2C + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end Window_CopyPixelRectToWindow4BppTo8Bpp + + thumb_func_start Window_CopyToVram8Bpp +Window_CopyToVram8Bpp: @ 8004500 + push {r4-r6,lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, 24 + lsrs r2, r1, 24 + adds r5, r2, 0 + ldr r6, =0x02020184 + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + ldr r0, =0x02020004 + adds r3, r1, r0 + str r3, [r6] + ldr r4, =0x02020188 + ldrb r1, [r3, 0x3] + ldrb r0, [r3, 0x4] + muls r0, r1 + lsls r0, 6 + strh r0, [r4] + cmp r2, 0x2 + beq _0800454E + cmp r2, 0x2 + bgt _08004540 + cmp r2, 0x1 + beq _08004546 + b _08004570 + .align 2, 0 + .pool +_08004540: + cmp r5, 0x3 + beq _0800455C + b _08004570 +_08004546: + ldrb r0, [r3] + bl gpu_copy_wram_bg_tilemap_to_vram + b _08004570 +_0800454E: + ldrb r0, [r3] + ldr r1, [r3, 0x8] + ldrh r2, [r4] + ldrh r3, [r3, 0x6] + bl gpu_copy_bg_tile_pattern_data_to_vram + b _08004570 +_0800455C: + ldrb r0, [r3] + ldr r1, [r3, 0x8] + ldrh r2, [r4] + ldrh r3, [r3, 0x6] + bl gpu_copy_bg_tile_pattern_data_to_vram + ldr r0, [r6] + ldrb r0, [r0] + bl gpu_copy_wram_bg_tilemap_to_vram +_08004570: + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end Window_CopyToVram8Bpp + + thumb_func_start GetNumActiveWindowsOnBgDuplicate +GetNumActiveWindowsOnBgDuplicate: @ 8004578 + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + movs r3, 0 + ldr r2, =0x02020004 + movs r1, 0x1F +_08004584: + ldrb r0, [r2] + cmp r0, r4 + bne _08004590 + adds r0, r3, 0x1 + lsls r0, 24 + lsrs r3, r0, 24 +_08004590: + adds r2, 0xC + subs r1, 0x1 + cmp r1, 0 + bge _08004584 + adds r0, r3, 0 + pop {r4} + pop {r1} + bx r1 + .align 2, 0 + .pool + thumb_func_end GetNumActiveWindowsOnBgDuplicate |