Files
2019-09-27 01:42:56 -04:00

2668 lines
44 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.text
.syntax unified
thumb_func_start nullsub_9
nullsub_9: @ 0x0800308C
bx lr
.align 2, 0
thumb_func_end nullsub_9
thumb_func_start InitWindows
InitWindows: @ 0x08003090
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
adds r5, r0, #0
movs r0, #0
mov r8, r0
ldr r4, _08003124
_080030A4:
mov r1, r8
lsls r0, r1, #0x18
lsrs r0, r0, #0x18
bl GetBgTilemapBuffer
cmp r0, #0
beq _080030B4
ldr r0, _08003128
_080030B4:
str r0, [r4]
adds r4, #4
movs r2, #1
add r8, r2
mov r0, r8
cmp r0, #3
ble _080030A4
ldr r0, _0800312C
ldr r2, [r0]
ldr r3, [r0, #4]
ldr r1, _08003130
movs r0, #0
movs r4, #0x1f
mov r8, r4
_080030D0:
str r2, [r1]
str r3, [r1, #4]
str r0, [r1, #8]
adds r1, #0xc
movs r4, #1
rsbs r4, r4, #0
add r8, r4
mov r4, r8
cmp r4, #0
bge _080030D0
movs r0, #0
mov r8, r0
movs r1, #0
str r1, [sp]
ldrb r7, [r5]
cmp r7, #0xff
bne _080030F4
b _0800322C
_080030F4:
adds r6, r5, #0
movs r2, #0
str r2, [sp, #4]
_080030FA:
ldr r0, _08003134
ldr r0, [r0]
cmp r0, #1
bne _08003138
ldrb r1, [r6, #3]
ldrb r0, [r6, #4]
adds r2, r1, #0
muls r2, r0, r2
adds r0, r7, #0
movs r1, #0
movs r3, #0
bl DummiedOutFireRedLeafGreenTileAllocFunc
str r0, [sp]
movs r0, #1
rsbs r0, r0, #0
ldr r4, [sp]
cmp r4, r0
bne _08003138
_08003120:
movs r0, #0
b _08003234
.align 2, 0
_08003124: .4byte 0x03003010
_08003128: .4byte 0x0800308D
_0800312C: .4byte 0x0829BEB0
_08003130: .4byte 0x02020004
_08003134: .4byte 0x03002FF4
_08003138:
ldr r0, _08003170
mov sb, r0
lsls r0, r7, #2
mov r2, sb
adds r1, r0, r2
ldr r1, [r1]
mov sl, r0
cmp r1, #0
bne _0800319A
adds r0, r7, #0
movs r1, #8
bl GetBgAttribute
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
ldr r0, _08003174
cmp r5, r0
beq _0800319A
adds r0, r5, #0
bl AllocZeroed
adds r4, r0, #0
cmp r4, #0
bne _08003178
bl FreeAllWindowBuffers
b _08003120
.align 2, 0
_08003170: .4byte 0x03003010
_08003174: .4byte 0x0000FFFF
_08003178:
movs r1, #0
mov r3, sb
cmp r1, r5
bge _0800318C
movs r2, #0
_08003182:
adds r0, r4, r1
strb r2, [r0]
adds r1, #1
cmp r1, r5
blt _08003182
_0800318C:
mov r1, sl
adds r0, r1, r3
str r4, [r0]
adds r0, r7, #0
adds r1, r4, #0
bl SetBgTilemapBuffer
_0800319A:
ldrb r1, [r6, #3]
ldrb r0, [r6, #4]
muls r0, r1, r0
lsls r0, r0, #0x15
lsrs r0, r0, #0x10
bl AllocZeroed
adds r4, r0, #0
cmp r4, #0
bne _080031DC
adds r0, r7, #0
bl GetNumActiveWindowsOnBg
lsls r0, r0, #0x18
cmp r0, #0
bne _08003120
ldr r0, _080031D4
mov r2, sl
adds r5, r2, r0
ldr r1, [r5]
ldr r0, _080031D8
cmp r1, r0
beq _08003120
adds r0, r1, #0
bl Free
str r4, [r5]
b _08003120
.align 2, 0
_080031D4: .4byte 0x03003010
_080031D8: .4byte 0x0800308D
_080031DC:
ldr r1, _08003244
adds r0, r1, #0
adds r0, #8
ldr r2, [sp, #4]
adds r0, r2, r0
str r4, [r0]
adds r2, r2, r1
ldr r0, [r6]
ldr r1, [r6, #4]
str r0, [r2]
str r1, [r2, #4]
ldr r0, _08003248
ldr r0, [r0]
cmp r0, #1
bne _08003212
mov r4, sp
ldrh r4, [r4]
strh r4, [r2, #6]
ldrb r0, [r6, #3]
ldrb r1, [r6, #4]
adds r2, r0, #0
muls r2, r1, r2
adds r0, r7, #0
ldr r1, [sp]
movs r3, #1
bl DummiedOutFireRedLeafGreenTileAllocFunc
_08003212:
adds r6, #8
ldr r0, [sp, #4]
adds r0, #0xc
str r0, [sp, #4]
movs r1, #1
add r8, r1
ldrb r7, [r6]
cmp r7, #0xff
beq _0800322C
mov r2, r8
cmp r2, #0x1f
bgt _0800322C
b _080030FA
_0800322C:
ldr r1, _0800324C
movs r0, #0
strb r0, [r1]
movs r0, #1
_08003234:
add sp, #8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_08003244: .4byte 0x02020004
_08003248: .4byte 0x03002FF4
_0800324C: .4byte 0x03003000
thumb_func_end InitWindows
thumb_func_start AddWindow
AddWindow: @ 0x08003250
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #4
mov r8, r0
movs r6, #0
ldr r1, _08003340
ldrb r0, [r1]
cmp r0, #0xff
beq _08003280
_08003268:
adds r0, r6, #1
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
cmp r6, #0x1f
bhi _08003280
lsls r0, r6, #1
adds r0, r0, r6
lsls r0, r0, #2
adds r0, r0, r1
ldrb r0, [r0]
cmp r0, #0xff
bne _08003268
_08003280:
cmp r6, #0x20
beq _0800333A
mov r0, r8
ldrb r7, [r0]
movs r1, #0
mov sb, r1
ldr r0, _08003344
ldr r0, [r0]
cmp r0, #1
bne _080032B2
mov r2, r8
ldrb r1, [r2, #3]
ldrb r0, [r2, #4]
adds r2, r1, #0
muls r2, r0, r2
adds r0, r7, #0
movs r1, #0
movs r3, #0
bl DummiedOutFireRedLeafGreenTileAllocFunc
mov sb, r0
movs r0, #1
rsbs r0, r0, #0
cmp sb, r0
beq _0800333A
_080032B2:
ldr r3, _08003348
mov sl, r3
lsls r0, r7, #2
adds r1, r0, r3
ldr r1, [r1]
str r0, [sp]
cmp r1, #0
bne _08003302
adds r0, r7, #0
movs r1, #8
bl GetBgAttribute
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
ldr r0, _0800334C
cmp r5, r0
beq _08003302
adds r0, r5, #0
bl AllocZeroed
adds r4, r0, #0
cmp r4, #0
beq _0800333A
movs r1, #0
mov r3, sl
cmp r1, r5
bge _080032F4
movs r2, #0
_080032EA:
adds r0, r4, r1
strb r2, [r0]
adds r1, #1
cmp r1, r5
blt _080032EA
_080032F4:
ldr r1, [sp]
adds r0, r1, r3
str r4, [r0]
adds r0, r7, #0
adds r1, r4, #0
bl SetBgTilemapBuffer
_08003302:
mov r2, r8
ldrb r1, [r2, #3]
ldrb r0, [r2, #4]
muls r0, r1, r0
lsls r0, r0, #0x15
lsrs r0, r0, #0x10
bl AllocZeroed
adds r4, r0, #0
cmp r4, #0
bne _08003354
adds r0, r7, #0
bl GetNumActiveWindowsOnBg
lsls r0, r0, #0x18
cmp r0, #0
bne _0800333A
ldr r0, _08003348
ldr r3, [sp]
adds r5, r3, r0
ldr r1, [r5]
ldr r0, _08003350
cmp r1, r0
beq _0800333A
adds r0, r1, #0
bl Free
str r4, [r5]
_0800333A:
movs r0, #0xff
b _08003390
.align 2, 0
_08003340: .4byte 0x02020004
_08003344: .4byte 0x03002FF4
_08003348: .4byte 0x03003010
_0800334C: .4byte 0x0000FFFF
_08003350: .4byte 0x0800308D
_08003354:
ldr r2, _080033A0
lsls r1, r6, #1
adds r1, r1, r6
lsls r1, r1, #2
adds r0, r2, #0
adds r0, #8
adds r0, r1, r0
str r4, [r0]
adds r2, r1, r2
mov r3, r8
ldr r0, [r3]
ldr r1, [r3, #4]
str r0, [r2]
str r1, [r2, #4]
ldr r0, _080033A4
ldr r0, [r0]
cmp r0, #1
bne _0800338E
mov r0, sb
strh r0, [r2, #6]
ldrb r0, [r2, #3]
ldrb r1, [r2, #4]
adds r2, r0, #0
muls r2, r1, r2
adds r0, r7, #0
mov r1, sb
movs r3, #1
bl DummiedOutFireRedLeafGreenTileAllocFunc
_0800338E:
adds r0, r6, #0
_08003390:
add sp, #4
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_080033A0: .4byte 0x02020004
_080033A4: .4byte 0x03002FF4
thumb_func_end AddWindow
thumb_func_start AddWindowWithoutTileMap
AddWindowWithoutTileMap: @ 0x080033A8
push {r4, r5, r6, lr}
adds r5, r0, #0
movs r4, #0
ldr r1, _080033FC
ldrb r0, [r1]
cmp r0, #0xff
beq _080033CE
_080033B6:
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
cmp r4, #0x1f
bhi _080033CE
lsls r0, r4, #1
adds r0, r0, r4
lsls r0, r0, #2
adds r0, r0, r1
ldrb r0, [r0]
cmp r0, #0xff
bne _080033B6
_080033CE:
cmp r4, #0x20
beq _080033F8
ldrb r6, [r5]
movs r3, #0
ldr r0, _08003400
ldr r0, [r0]
cmp r0, #1
bne _08003404
ldrb r1, [r5, #3]
ldrb r0, [r5, #4]
adds r2, r1, #0
muls r2, r0, r2
adds r0, r6, #0
movs r1, #0
bl DummiedOutFireRedLeafGreenTileAllocFunc
adds r3, r0, #0
movs r0, #1
rsbs r0, r0, #0
cmp r3, r0
bne _08003404
_080033F8:
movs r0, #0xff
b _08003434
.align 2, 0
_080033FC: .4byte 0x02020004
_08003400: .4byte 0x03002FF4
_08003404:
ldr r1, _0800343C
lsls r0, r4, #1
adds r0, r0, r4
lsls r0, r0, #2
adds r2, r0, r1
ldr r0, [r5]
ldr r1, [r5, #4]
str r0, [r2]
str r1, [r2, #4]
ldr r0, _08003440
ldr r0, [r0]
cmp r0, #1
bne _08003432
strh r3, [r2, #6]
ldrb r0, [r2, #3]
ldrb r1, [r2, #4]
adds r2, r0, #0
muls r2, r1, r2
adds r0, r6, #0
adds r1, r3, #0
movs r3, #1
bl DummiedOutFireRedLeafGreenTileAllocFunc
_08003432:
adds r0, r4, #0
_08003434:
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
_0800343C: .4byte 0x02020004
_08003440: .4byte 0x03002FF4
thumb_func_end AddWindowWithoutTileMap
thumb_func_start RemoveWindow
RemoveWindow: @ 0x08003444
push {r4, r5, r6, r7, lr}
lsls r0, r0, #0x18
lsrs r6, r0, #0x18
ldr r1, _080034C0
lsls r0, r6, #1
adds r0, r0, r6
lsls r0, r0, #2
adds r4, r0, r1
ldrb r3, [r4]
adds r7, r3, #0
ldr r0, _080034C4
ldr r0, [r0]
cmp r0, #1
bne _08003470
ldrh r1, [r4, #6]
ldrb r2, [r4, #3]
ldrb r0, [r4, #4]
muls r2, r0, r2
adds r0, r3, #0
movs r3, #2
bl DummiedOutFireRedLeafGreenTileAllocFunc
_08003470:
ldr r0, _080034C8
ldr r1, [r0, #4]
ldr r0, [r0]
str r0, [r4]
str r1, [r4, #4]
adds r0, r7, #0
bl GetNumActiveWindowsOnBg
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #0
bne _0800349E
ldr r0, _080034CC
lsls r1, r7, #2
adds r4, r1, r0
ldr r1, [r4]
ldr r0, _080034D0
cmp r1, r0
beq _0800349E
adds r0, r1, #0
bl Free
str r5, [r4]
_0800349E:
ldr r1, _080034C0
lsls r0, r6, #1
adds r0, r0, r6
lsls r0, r0, #2
adds r1, #8
adds r4, r0, r1
ldr r0, [r4]
cmp r0, #0
beq _080034B8
bl Free
movs r0, #0
str r0, [r4]
_080034B8:
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_080034C0: .4byte 0x02020004
_080034C4: .4byte 0x03002FF4
_080034C8: .4byte 0x0829BEB0
_080034CC: .4byte 0x03003010
_080034D0: .4byte 0x0800308D
thumb_func_end RemoveWindow
thumb_func_start FreeAllWindowBuffers
FreeAllWindowBuffers: @ 0x080034D4
push {r4, r5, r6, lr}
ldr r4, _0800351C
movs r5, #3
_080034DA:
ldr r1, [r4]
cmp r1, #0
beq _080034F0
ldr r0, _08003520
cmp r1, r0
beq _080034F0
adds r0, r1, #0
bl Free
movs r0, #0
str r0, [r4]
_080034F0:
adds r4, #4
subs r5, #1
cmp r5, #0
bge _080034DA
ldr r0, _08003524
adds r4, r0, #0
adds r4, #8
movs r6, #0
movs r5, #0x1f
_08003502:
ldr r0, [r4]
cmp r0, #0
beq _0800350E
bl Free
str r6, [r4]
_0800350E:
adds r4, #0xc
subs r5, #1
cmp r5, #0
bge _08003502
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_0800351C: .4byte 0x03003010
_08003520: .4byte 0x0800308D
_08003524: .4byte 0x02020004
thumb_func_end FreeAllWindowBuffers
thumb_func_start CopyWindowToVram
CopyWindowToVram: @ 0x08003528
push {r4, r5, r6, lr}
sub sp, #0xc
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r3, r1, #0x18
adds r5, r3, #0
ldr r2, _08003560
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
mov r0, sp
adds r1, r1, r2
ldm r1!, {r2, r4, r6}
stm r0!, {r2, r4, r6}
mov r0, sp
ldrb r1, [r0, #3]
ldrb r0, [r0, #4]
muls r0, r1, r0
lsls r0, r0, #0x15
lsrs r4, r0, #0x10
cmp r3, #2
beq _08003574
cmp r3, #2
bgt _08003564
cmp r3, #1
beq _0800356A
b _0800359E
.align 2, 0
_08003560: .4byte 0x02020004
_08003564:
cmp r5, #3
beq _08003586
b _0800359E
_0800356A:
mov r0, sp
ldrb r0, [r0]
bl CopyBgTilemapBufferToVram
b _0800359E
_08003574:
mov r0, sp
ldrb r0, [r0]
ldr r1, [sp, #8]
mov r2, sp
ldrh r3, [r2, #6]
adds r2, r4, #0
bl LoadBgTiles
b _0800359E
_08003586:
mov r0, sp
ldrb r0, [r0]
ldr r1, [sp, #8]
mov r2, sp
ldrh r3, [r2, #6]
adds r2, r4, #0
bl LoadBgTiles
mov r0, sp
ldrb r0, [r0]
bl CopyBgTilemapBufferToVram
_0800359E:
add sp, #0xc
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
thumb_func_end CopyWindowToVram
thumb_func_start CopyWindowRectToVram
CopyWindowRectToVram: @ 0x080035A8
push {r4, r5, r6, r7, lr}
sub sp, #0xc
adds r6, r0, #0
adds r5, r1, #0
adds r4, r2, #0
mov ip, r3
ldr r3, [sp, #0x24]
ldr r0, [sp, #0x20]
cmp r0, #0
beq _08003652
cmp r3, #0
beq _08003652
ldr r2, _080035FC
lsls r0, r6, #1
adds r0, r0, r6
lsls r0, r0, #2
mov r1, sp
adds r0, r0, r2
ldm r0!, {r2, r6, r7}
stm r1!, {r2, r6, r7}
subs r2, r3, #1
mov r0, sp
ldrb r1, [r0, #3]
adds r3, r2, #0
muls r3, r1, r3
subs r0, r1, r4
adds r3, r3, r0
ldr r2, [sp, #0x20]
adds r0, r4, r2
subs r0, r1, r0
subs r3, r3, r0
lsls r3, r3, #5
mov r0, ip
muls r0, r1, r0
adds r4, r0, r4
cmp r5, #2
beq _08003610
cmp r5, #2
bhi _08003600
cmp r5, #1
beq _08003606
b _08003652
.align 2, 0
_080035FC: .4byte 0x02020004
_08003600:
cmp r5, #3
beq _0800362E
b _08003652
_08003606:
mov r0, sp
ldrb r0, [r0]
bl CopyBgTilemapBufferToVram
b _08003652
_08003610:
mov r0, sp
ldrb r0, [r0]
lsls r2, r4, #5
ldr r1, [sp, #8]
adds r1, r1, r2
lsls r2, r3, #0x10
lsrs r2, r2, #0x10
mov r3, sp
ldrh r3, [r3, #6]
adds r3, r3, r4
lsls r3, r3, #0x10
lsrs r3, r3, #0x10
bl LoadBgTiles
b _08003652
_0800362E:
mov r0, sp
ldrb r0, [r0]
lsls r2, r4, #5
ldr r1, [sp, #8]
adds r1, r1, r2
lsls r2, r3, #0x10
lsrs r2, r2, #0x10
mov r3, sp
ldrh r3, [r3, #6]
adds r3, r3, r4
lsls r3, r3, #0x10
lsrs r3, r3, #0x10
bl LoadBgTiles
mov r0, sp
ldrb r0, [r0]
bl CopyBgTilemapBufferToVram
_08003652:
add sp, #0xc
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
thumb_func_end CopyWindowRectToVram
thumb_func_start PutWindowTilemap
PutWindowTilemap: @ 0x0800365C
push {r4, lr}
sub sp, #0x1c
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
ldr r2, _080036B8
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
add r0, sp, #0x10
adds r1, r1, r2
ldm r1!, {r2, r3, r4}
stm r0!, {r2, r3, r4}
add r0, sp, #0x10
ldrb r0, [r0]
movs r1, #0xa
bl GetBgAttribute
adds r1, r0, #0
add r0, sp, #0x10
ldrh r0, [r0, #6]
adds r1, r1, r0
lsls r1, r1, #0x10
lsrs r1, r1, #0x10
add r0, sp, #0x10
ldrb r0, [r0]
add r2, sp, #0x10
ldrb r2, [r2, #1]
add r3, sp, #0x10
ldrb r3, [r3, #2]
add r4, sp, #0x10
ldrb r4, [r4, #3]
str r4, [sp]
add r4, sp, #0x10
ldrb r4, [r4, #4]
str r4, [sp, #4]
add r4, sp, #0x10
ldrb r4, [r4, #5]
str r4, [sp, #8]
movs r4, #1
str r4, [sp, #0xc]
bl WriteSequenceToBgTilemapBuffer
add sp, #0x1c
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080036B8: .4byte 0x02020004
thumb_func_end PutWindowTilemap
thumb_func_start PutWindowRectTilemapOverridePalette
PutWindowRectTilemapOverridePalette: @ 0x080036BC
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x24
ldr r4, [sp, #0x44]
ldr r5, [sp, #0x48]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
mov sl, r1
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
mov sb, r2
lsls r3, r3, #0x18
lsrs r3, r3, #0x18
str r3, [sp, #0x1c]
lsls r4, r4, #0x18
lsrs r4, r4, #0x18
mov r8, r4
lsls r5, r5, #0x18
lsrs r5, r5, #0x18
str r5, [sp, #0x20]
ldr r2, _08003770
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
add r0, sp, #0x10
adds r1, r1, r2
ldm r1!, {r2, r3, r4}
stm r0!, {r2, r3, r4}
add r0, sp, #0x10
ldrb r0, [r0]
movs r1, #0xa
bl GetBgAttribute
add r2, sp, #0x10
adds r1, r2, #0
ldrb r1, [r1, #3]
mov r3, sb
muls r3, r1, r3
adds r1, r3, #0
ldrh r2, [r2, #6]
adds r1, r1, r2
add r1, sl
adds r0, r0, r1
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
movs r5, #0
cmp r5, r8
bge _0800375E
add r4, sp, #0x10
movs r7, #1
_0800372A:
ldrb r0, [r4]
ldrb r2, [r4, #1]
add r2, sl
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
ldrb r3, [r4, #2]
add r3, sb
adds r3, r3, r5
lsls r3, r3, #0x18
lsrs r3, r3, #0x18
ldr r1, [sp, #0x1c]
str r1, [sp]
str r7, [sp, #4]
ldr r1, [sp, #0x20]
str r1, [sp, #8]
str r7, [sp, #0xc]
adds r1, r6, #0
bl WriteSequenceToBgTilemapBuffer
ldrb r0, [r4, #3]
adds r0, r6, r0
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
adds r5, #1
cmp r5, r8
blt _0800372A
_0800375E:
add sp, #0x24
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08003770: .4byte 0x02020004
thumb_func_end PutWindowRectTilemapOverridePalette
thumb_func_start ClearWindowTilemap
ClearWindowTilemap: @ 0x08003774
push {r4, lr}
sub sp, #0x18
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
ldr r2, _080037BC
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
add r0, sp, #0xc
adds r1, r1, r2
ldm r1!, {r2, r3, r4}
stm r0!, {r2, r3, r4}
add r0, sp, #0xc
ldrb r0, [r0]
ldr r1, _080037C0
ldrb r1, [r1]
add r2, sp, #0xc
ldrb r2, [r2, #1]
add r3, sp, #0xc
ldrb r3, [r3, #2]
add r4, sp, #0xc
ldrb r4, [r4, #3]
str r4, [sp]
add r4, sp, #0xc
ldrb r4, [r4, #4]
str r4, [sp, #4]
add r4, sp, #0xc
ldrb r4, [r4, #5]
str r4, [sp, #8]
bl FillBgTilemapBufferRect
add sp, #0x18
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080037BC: .4byte 0x02020004
_080037C0: .4byte 0x03003000
thumb_func_end ClearWindowTilemap
thumb_func_start PutWindowRectTilemap
PutWindowRectTilemap: @ 0x080037C4
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x20
ldr r4, [sp, #0x40]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
mov sl, r1
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
mov sb, r2
lsls r3, r3, #0x18
lsrs r3, r3, #0x18
str r3, [sp, #0x1c]
lsls r4, r4, #0x18
lsrs r4, r4, #0x18
mov r8, r4
ldr r2, _08003870
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
add r0, sp, #0x10
adds r1, r1, r2
ldm r1!, {r2, r3, r4}
stm r0!, {r2, r3, r4}
add r0, sp, #0x10
ldrb r0, [r0]
movs r1, #0xa
bl GetBgAttribute
add r2, sp, #0x10
adds r1, r2, #0
ldrb r1, [r1, #3]
mov r3, sb
muls r3, r1, r3
adds r1, r3, #0
ldrh r2, [r2, #6]
adds r1, r1, r2
add r1, sl
adds r0, r0, r1
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
movs r5, #0
cmp r5, r8
bge _0800385E
add r4, sp, #0x10
movs r7, #1
_0800382A:
ldrb r0, [r4]
ldrb r2, [r4, #1]
add r2, sl
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
ldrb r3, [r4, #2]
add r3, sb
adds r3, r3, r5
lsls r3, r3, #0x18
lsrs r3, r3, #0x18
ldr r1, [sp, #0x1c]
str r1, [sp]
str r7, [sp, #4]
ldrb r1, [r4, #5]
str r1, [sp, #8]
str r7, [sp, #0xc]
adds r1, r6, #0
bl WriteSequenceToBgTilemapBuffer
ldrb r0, [r4, #3]
adds r0, r6, r0
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
adds r5, #1
cmp r5, r8
blt _0800382A
_0800385E:
add sp, #0x20
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08003870: .4byte 0x02020004
thumb_func_end PutWindowRectTilemap
thumb_func_start BlitBitmapToWindow
BlitBitmapToWindow: @ 0x08003874
push {r4, r5, lr}
sub sp, #0x18
ldr r4, [sp, #0x24]
ldr r5, [sp, #0x28]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r2, r2, #0x10
lsrs r2, r2, #0x10
lsls r3, r3, #0x10
lsrs r3, r3, #0x10
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
lsls r5, r5, #0x10
lsrs r5, r5, #0x10
str r4, [sp]
str r5, [sp, #4]
str r2, [sp, #8]
str r3, [sp, #0xc]
str r4, [sp, #0x10]
str r5, [sp, #0x14]
movs r2, #0
movs r3, #0
bl BlitBitmapRectToWindow
add sp, #0x18
pop {r4, r5}
pop {r0}
bx r0
thumb_func_end BlitBitmapToWindow
thumb_func_start BlitBitmapRectToWindow
BlitBitmapRectToWindow: @ 0x080038AC
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x24
ldr r4, [sp, #0x44]
ldr r5, [sp, #0x48]
ldr r6, [sp, #0x4c]
mov r8, r6
ldr r6, [sp, #0x50]
mov sb, r6
ldr r6, [sp, #0x54]
mov sl, r6
ldr r6, [sp, #0x58]
mov ip, r6
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r2, r2, #0x10
lsrs r2, r2, #0x10
lsls r3, r3, #0x10
lsrs r3, r3, #0x10
lsls r4, r4, #0x10
mov r6, r8
lsls r6, r6, #0x10
lsrs r6, r6, #0x10
mov r8, r6
mov r6, sb
lsls r6, r6, #0x10
lsrs r6, r6, #0x10
mov sb, r6
mov r6, sl
lsls r6, r6, #0x10
lsrs r6, r6, #0x10
mov sl, r6
mov r6, ip
lsls r6, r6, #0x10
lsrs r6, r6, #0x10
mov ip, r6
str r1, [sp, #0x14]
ldr r7, _08003960
lsls r5, r5, #0x10
ldr r6, _08003964
lsrs r4, r4, #0x10
orrs r4, r5
str r4, [sp, #0x18]
ldr r1, _08003968
lsls r5, r0, #1
adds r5, r5, r0
lsls r5, r5, #2
adds r0, r1, #0
adds r0, #8
adds r0, r5, r0
ldr r0, [r0]
str r0, [sp, #0x1c]
adds r5, r5, r1
ldrb r0, [r5, #3]
lsls r0, r0, #3
add r1, sp, #0x1c
ldr r4, [r1, #4]
ands r4, r7
orrs r4, r0
str r4, [r1, #4]
ldrb r0, [r5, #4]
lsls r0, r0, #0x13
ands r6, r4
orrs r6, r0
str r6, [r1, #4]
mov r0, r8
str r0, [sp]
mov r6, sb
str r6, [sp, #4]
mov r0, sl
str r0, [sp, #8]
mov r6, ip
str r6, [sp, #0xc]
movs r0, #0
str r0, [sp, #0x10]
add r0, sp, #0x14
bl BlitBitmapRect4Bit
add sp, #0x24
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08003960: .4byte 0xFFFF0000
_08003964: .4byte 0x0000FFFF
_08003968: .4byte 0x02020004
thumb_func_end BlitBitmapRectToWindow
thumb_func_start BlitBitmapRectToWindowWithColorKey
BlitBitmapRectToWindowWithColorKey: @ 0x0800396C
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x28
ldr r4, [sp, #0x48]
ldr r5, [sp, #0x4c]
ldr r6, [sp, #0x50]
mov r8, r6
ldr r7, [sp, #0x54]
mov sb, r7
ldr r6, [sp, #0x58]
mov sl, r6
ldr r7, [sp, #0x5c]
mov ip, r7
ldr r6, [sp, #0x60]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r2, r2, #0x10
lsrs r2, r2, #0x10
lsls r3, r3, #0x10
lsrs r3, r3, #0x10
lsls r4, r4, #0x10
mov r7, r8
lsls r7, r7, #0x10
lsrs r7, r7, #0x10
mov r8, r7
mov r7, sb
lsls r7, r7, #0x10
lsrs r7, r7, #0x10
mov sb, r7
mov r7, sl
lsls r7, r7, #0x10
lsrs r7, r7, #0x10
mov sl, r7
mov r7, ip
lsls r7, r7, #0x10
lsrs r7, r7, #0x10
mov ip, r7
lsls r6, r6, #0x18
lsrs r6, r6, #0x18
str r6, [sp, #0x24]
str r1, [sp, #0x14]
lsls r5, r5, #0x10
ldr r6, _08003A28
lsrs r4, r4, #0x10
orrs r4, r5
str r4, [sp, #0x18]
ldr r1, _08003A2C
lsls r5, r0, #1
adds r5, r5, r0
lsls r5, r5, #2
adds r0, r1, #0
adds r0, #8
adds r0, r5, r0
ldr r0, [r0]
str r0, [sp, #0x1c]
adds r5, r5, r1
ldrb r0, [r5, #3]
lsls r0, r0, #3
add r1, sp, #0x1c
ldr r4, [r1, #4]
ldr r7, _08003A30
ands r4, r7
orrs r4, r0
str r4, [r1, #4]
ldrb r0, [r5, #4]
lsls r0, r0, #0x13
ands r6, r4
orrs r6, r0
str r6, [r1, #4]
mov r0, r8
str r0, [sp]
mov r6, sb
str r6, [sp, #4]
mov r7, sl
str r7, [sp, #8]
mov r0, ip
str r0, [sp, #0xc]
ldr r6, [sp, #0x24]
str r6, [sp, #0x10]
add r0, sp, #0x14
bl BlitBitmapRect4Bit
add sp, #0x28
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08003A28: .4byte 0x0000FFFF
_08003A2C: .4byte 0x02020004
_08003A30: .4byte 0xFFFF0000
thumb_func_end BlitBitmapRectToWindowWithColorKey
thumb_func_start FillWindowPixelRect
FillWindowPixelRect: @ 0x08003A34
push {r4, r5, r6, lr}
mov r6, sb
mov r5, r8
push {r5, r6}
sub sp, #0x10
mov sb, r3
ldr r3, [sp, #0x28]
ldr r4, [sp, #0x2c]
mov r8, r4
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
lsls r2, r2, #0x10
lsrs r2, r2, #0x10
mov r4, sb
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
mov sb, r4
lsls r3, r3, #0x10
lsrs r3, r3, #0x10
mov r4, r8
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
mov r8, r4
ldr r5, _08003AB4
lsls r4, r0, #1
adds r4, r4, r0
lsls r4, r4, #2
adds r0, r5, #0
adds r0, #8
adds r0, r4, r0
ldr r0, [r0]
str r0, [sp, #8]
adds r4, r4, r5
ldrb r0, [r4, #3]
lsls r0, r0, #3
ldr r6, _08003AB8
ldr r5, [sp, #0xc]
ands r5, r6
orrs r5, r0
str r5, [sp, #0xc]
ldrb r4, [r4, #4]
lsls r4, r4, #0x13
ldr r0, _08003ABC
ands r0, r5
orrs r0, r4
str r0, [sp, #0xc]
mov r0, r8
str r0, [sp]
str r1, [sp, #4]
add r0, sp, #8
adds r1, r2, #0
mov r2, sb
bl FillBitmapRect4Bit
add sp, #0x10
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_08003AB4: .4byte 0x02020004
_08003AB8: .4byte 0xFFFF0000
_08003ABC: .4byte 0x0000FFFF
thumb_func_end FillWindowPixelRect
thumb_func_start CopyToWindowPixelBuffer
CopyToWindowPixelBuffer: @ 0x08003AC0
push {r4, r5, r6, lr}
adds r6, r1, #0
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
lsls r5, r2, #0x10
lsls r3, r3, #0x10
lsrs r2, r3, #0x10
cmp r5, #0
beq _08003AF4
ldr r1, _08003AF0
lsls r0, r4, #1
adds r0, r0, r4
lsls r0, r0, #2
adds r1, #8
adds r0, r0, r1
lsls r2, r2, #5
ldr r1, [r0]
adds r1, r1, r2
lsrs r2, r5, #0x11
adds r0, r6, #0
bl CpuSet
b _08003B0C
.align 2, 0
_08003AF0: .4byte 0x02020004
_08003AF4:
ldr r1, _08003B14
lsls r0, r4, #1
adds r0, r0, r4
lsls r0, r0, #2
adds r1, #8
adds r0, r0, r1
lsls r2, r2, #5
ldr r1, [r0]
adds r1, r1, r2
adds r0, r6, #0
bl LZ77UnCompWram
_08003B0C:
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_08003B14: .4byte 0x02020004
thumb_func_end CopyToWindowPixelBuffer
thumb_func_start FillWindowPixelBuffer
FillWindowPixelBuffer: @ 0x08003B18
push {r4, r5, lr}
sub sp, #4
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
ldr r5, _08003B60
lsls r4, r0, #1
adds r4, r4, r0
lsls r4, r4, #2
adds r0, r4, r5
ldrb r2, [r0, #3]
ldrb r0, [r0, #4]
muls r2, r0, r2
lsls r0, r1, #0x18
lsls r3, r1, #0x10
orrs r0, r3
lsls r3, r1, #8
orrs r0, r3
orrs r0, r1
str r0, [sp]
adds r5, #8
adds r4, r4, r5
ldr r1, [r4]
lsls r2, r2, #3
movs r0, #0x80
lsls r0, r0, #0x11
orrs r2, r0
mov r0, sp
bl CpuFastSet
add sp, #4
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_08003B60: .4byte 0x02020004
thumb_func_end FillWindowPixelBuffer
thumb_func_start ScrollWindow
ScrollWindow: @ 0x08003B64
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
mov r8, r1
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
str r2, [sp]
lsls r3, r3, #0x18
lsrs r3, r3, #0x18
ldr r2, _08003C00
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
adds r4, r1, r2
adds r2, #8
adds r1, r1, r2
ldr r5, [r1]
lsls r7, r3, #0x18
lsls r0, r3, #0x10
orrs r7, r0
lsls r0, r3, #8
orrs r7, r0
orrs r7, r3
ldr r1, [r4]
ldr r2, [r4, #4]
ldrb r3, [r4, #4]
lsrs r0, r1, #0x18
muls r0, r3, r0
lsls r6, r0, #5
lsrs r1, r1, #0x18
mov ip, r1
mov r0, r8
cmp r0, #1
bne _08003BB8
b _08003D6E
_08003BB8:
cmp r0, #1
ble _08003BBE
b _08003F16
_08003BBE:
cmp r0, #0
beq _08003BC4
b _08003F16
_08003BC4:
movs r4, #0
cmp r4, r6
blt _08003BCC
b _08003F16
_08003BCC:
movs r1, #8
rsbs r1, r1, #0
mov sb, r1
movs r2, #7
mov r8, r2
mov sl, r5
_08003BD8:
ldr r3, [sp]
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
adds r0, r3, #0
mov r2, r8
ands r0, r2
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003C04
adds r0, r5, r1
ldr r0, [r0]
mov r1, sl
str r0, [r1]
b _08003C08
.align 2, 0
_08003C00: .4byte 0x02020004
_08003C04:
mov r2, sl
str r7, [r2]
_08003C08:
adds r3, #1
adds r2, r4, #4
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003C34
adds r0, r5, r2
adds r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003C38
_08003C34:
adds r0, r5, r2
str r7, [r0]
_08003C38:
adds r3, #1
adds r2, r4, #0
adds r2, #8
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003C66
adds r0, r5, r2
adds r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003C6A
_08003C66:
adds r0, r5, r2
str r7, [r0]
_08003C6A:
adds r3, #1
adds r2, r4, #0
adds r2, #0xc
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003C98
adds r0, r5, r2
adds r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003C9C
_08003C98:
adds r0, r5, r2
str r7, [r0]
_08003C9C:
adds r3, #1
adds r2, r4, #0
adds r2, #0x10
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003CCA
adds r0, r5, r2
adds r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003CCE
_08003CCA:
adds r0, r5, r2
str r7, [r0]
_08003CCE:
adds r3, #1
adds r2, r4, #0
adds r2, #0x14
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003CFC
adds r0, r5, r2
adds r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003D00
_08003CFC:
adds r0, r5, r2
str r7, [r0]
_08003D00:
adds r3, #1
adds r2, r4, #0
adds r2, #0x18
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003D2E
adds r0, r5, r2
adds r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003D32
_08003D2E:
adds r0, r5, r2
str r7, [r0]
_08003D32:
adds r3, #1
adds r2, r4, #0
adds r2, #0x1c
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
adds r0, r1, #0
mov r1, r8
ands r3, r1
orrs r0, r3
lsls r0, r0, #2
adds r1, r4, r0
cmp r1, r6
bge _08003D5C
adds r0, r5, r2
adds r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003D60
_08003D5C:
adds r0, r5, r2
str r7, [r0]
_08003D60:
movs r2, #0x20
add sl, r2
adds r4, #0x20
cmp r4, r6
bge _08003D6C
b _08003BD8
_08003D6C:
b _08003F16
_08003D6E:
subs r0, r6, #4
adds r5, r5, r0
movs r4, #0
cmp r4, r6
blt _08003D7A
b _08003F16
_08003D7A:
movs r0, #8
rsbs r0, r0, #0
mov sb, r0
movs r1, #7
mov r8, r1
mov sl, r5
_08003D86:
ldr r3, [sp]
adds r0, r3, #0
mov r2, sb
ands r0, r2
mov r1, ip
muls r1, r0, r1
adds r0, r3, #0
mov r2, r8
ands r0, r2
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003DAC
subs r0, r5, r1
ldr r0, [r0]
mov r1, sl
str r0, [r1]
b _08003DB0
_08003DAC:
mov r2, sl
str r7, [r2]
_08003DB0:
adds r3, #1
adds r2, r4, #4
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003DDC
subs r0, r5, r2
subs r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003DE0
_08003DDC:
subs r0, r5, r2
str r7, [r0]
_08003DE0:
adds r3, #1
adds r2, r4, #0
adds r2, #8
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003E0E
subs r0, r5, r2
subs r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003E12
_08003E0E:
subs r0, r5, r2
str r7, [r0]
_08003E12:
adds r3, #1
adds r2, r4, #0
adds r2, #0xc
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003E40
subs r0, r5, r2
subs r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003E44
_08003E40:
subs r0, r5, r2
str r7, [r0]
_08003E44:
adds r3, #1
adds r2, r4, #0
adds r2, #0x10
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003E72
subs r0, r5, r2
subs r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003E76
_08003E72:
subs r0, r5, r2
str r7, [r0]
_08003E76:
adds r3, #1
adds r2, r4, #0
adds r2, #0x14
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003EA4
subs r0, r5, r2
subs r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003EA8
_08003EA4:
subs r0, r5, r2
str r7, [r0]
_08003EA8:
adds r3, #1
adds r2, r4, #0
adds r2, #0x18
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
str r1, [sp, #4]
adds r0, r3, #0
mov r1, r8
ands r0, r1
ldr r1, [sp, #4]
orrs r1, r0
lsls r1, r1, #2
adds r1, r4, r1
cmp r1, r6
bge _08003ED6
subs r0, r5, r2
subs r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003EDA
_08003ED6:
subs r0, r5, r2
str r7, [r0]
_08003EDA:
adds r3, #1
adds r2, r4, #0
adds r2, #0x1c
adds r0, r3, #0
mov r1, sb
ands r0, r1
mov r1, ip
muls r1, r0, r1
adds r0, r1, #0
mov r1, r8
ands r3, r1
orrs r0, r3
lsls r0, r0, #2
adds r1, r4, r0
cmp r1, r6
bge _08003F04
subs r0, r5, r2
subs r1, r5, r1
ldr r1, [r1]
str r1, [r0]
b _08003F08
_08003F04:
subs r0, r5, r2
str r7, [r0]
_08003F08:
movs r2, #0x20
rsbs r2, r2, #0
add sl, r2
adds r4, #0x20
cmp r4, r6
bge _08003F16
b _08003D86
_08003F16:
add sp, #8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
thumb_func_end ScrollWindow
thumb_func_start CallWindowFunction
CallWindowFunction: @ 0x08003F28
push {r4, r5, r6, lr}
mov r6, r8
push {r6}
sub sp, #8
mov r8, r1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
ldr r2, _08003F74
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
adds r1, r1, r2
ldr r5, [r1]
ldr r6, [r1, #4]
ldrb r0, [r1]
lsrs r1, r5, #8
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
lsrs r2, r5, #0x10
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
lsrs r3, r5, #0x18
lsls r4, r6, #0x18
lsrs r4, r4, #0x18
str r4, [sp]
lsrs r4, r6, #8
lsls r4, r4, #0x18
lsrs r4, r4, #0x18
str r4, [sp, #4]
bl _call_via_r8
add sp, #8
pop {r3}
mov r8, r3
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_08003F74: .4byte 0x02020004
thumb_func_end CallWindowFunction
thumb_func_start SetWindowAttribute
SetWindowAttribute: @ 0x08003F78
push {lr}
lsls r0, r0, #0x18
lsrs r3, r0, #0x18
lsls r1, r1, #0x18
lsrs r0, r1, #0x18
cmp r0, #7
bhi _08004012
lsls r0, r0, #2
ldr r1, _08003F90
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08003F90: .4byte 0x08003F94
_08003F94: @ jump table
.4byte _08004012 @ case 0
.4byte _08003FB4 @ case 1
.4byte _08003FC8 @ case 2
.4byte _08004012 @ case 3
.4byte _08004012 @ case 4
.4byte _08003FDC @ case 5
.4byte _08003FF0 @ case 6
.4byte _08004004 @ case 7
_08003FB4:
ldr r1, _08003FC4
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #2
adds r0, r0, r1
strb r2, [r0, #1]
movs r0, #0
b _08004014
.align 2, 0
_08003FC4: .4byte 0x02020004
_08003FC8:
ldr r1, _08003FD8
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #2
adds r0, r0, r1
strb r2, [r0, #2]
movs r0, #0
b _08004014
.align 2, 0
_08003FD8: .4byte 0x02020004
_08003FDC:
ldr r1, _08003FEC
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #2
adds r0, r0, r1
strb r2, [r0, #5]
movs r0, #0
b _08004014
.align 2, 0
_08003FEC: .4byte 0x02020004
_08003FF0:
ldr r1, _08004000
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #2
adds r0, r0, r1
strh r2, [r0, #6]
movs r0, #0
b _08004014
.align 2, 0
_08004000: .4byte 0x02020004
_08004004:
ldr r1, _08004018
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #2
adds r1, #8
adds r0, r0, r1
str r2, [r0]
_08004012:
movs r0, #1
_08004014:
pop {r1}
bx r1
.align 2, 0
_08004018: .4byte 0x02020004
thumb_func_end SetWindowAttribute
thumb_func_start GetWindowAttribute
GetWindowAttribute: @ 0x0800401C
push {lr}
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
lsls r1, r1, #0x18
lsrs r0, r1, #0x18
cmp r0, #7
bhi _080040F8
lsls r0, r0, #2
ldr r1, _08004034
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08004034: .4byte 0x08004038
_08004038: @ jump table
.4byte _08004058 @ case 0
.4byte _0800406C @ case 1
.4byte _08004080 @ case 2
.4byte _08004094 @ case 3
.4byte _080040A8 @ case 4
.4byte _080040BC @ case 5
.4byte _080040D0 @ case 6
.4byte _080040E4 @ case 7
_08004058:
ldr r0, _08004068
lsls r1, r2, #1
adds r1, r1, r2
lsls r1, r1, #2
adds r1, r1, r0
ldrb r0, [r1]
b _080040FA
.align 2, 0
_08004068: .4byte 0x02020004
_0800406C:
ldr r0, _0800407C
lsls r1, r2, #1
adds r1, r1, r2
lsls r1, r1, #2
adds r1, r1, r0
ldrb r0, [r1, #1]
b _080040FA
.align 2, 0
_0800407C: .4byte 0x02020004
_08004080:
ldr r0, _08004090
lsls r1, r2, #1
adds r1, r1, r2
lsls r1, r1, #2
adds r1, r1, r0
ldrb r0, [r1, #2]
b _080040FA
.align 2, 0
_08004090: .4byte 0x02020004
_08004094:
ldr r0, _080040A4
lsls r1, r2, #1
adds r1, r1, r2
lsls r1, r1, #2
adds r1, r1, r0
ldrb r0, [r1, #3]
b _080040FA
.align 2, 0
_080040A4: .4byte 0x02020004
_080040A8:
ldr r0, _080040B8
lsls r1, r2, #1
adds r1, r1, r2
lsls r1, r1, #2
adds r1, r1, r0
ldrb r0, [r1, #4]
b _080040FA
.align 2, 0
_080040B8: .4byte 0x02020004
_080040BC:
ldr r0, _080040CC
lsls r1, r2, #1
adds r1, r1, r2
lsls r1, r1, #2
adds r1, r1, r0
ldrb r0, [r1, #5]
b _080040FA
.align 2, 0
_080040CC: .4byte 0x02020004
_080040D0:
ldr r0, _080040E0
lsls r1, r2, #1
adds r1, r1, r2
lsls r1, r1, #2
adds r1, r1, r0
ldrh r0, [r1, #6]
b _080040FA
.align 2, 0
_080040E0: .4byte 0x02020004
_080040E4:
ldr r0, _080040F4
lsls r1, r2, #1
adds r1, r1, r2
lsls r1, r1, #2
adds r0, #8
adds r1, r1, r0
ldr r0, [r1]
b _080040FA
.align 2, 0
_080040F4: .4byte 0x02020004
_080040F8:
movs r0, #0
_080040FA:
pop {r1}
bx r1
.align 2, 0
thumb_func_end GetWindowAttribute
thumb_func_start GetNumActiveWindowsOnBg
GetNumActiveWindowsOnBg: @ 0x08004100
push {r4, lr}
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
movs r3, #0
ldr r2, _08004128
movs r1, #0x1f
_0800410C:
ldrb r0, [r2]
cmp r0, r4
bne _08004118
adds r0, r3, #1
lsls r0, r0, #0x18
lsrs r3, r0, #0x18
_08004118:
adds r2, #0xc
subs r1, #1
cmp r1, #0
bge _0800410C
adds r0, r3, #0
pop {r4}
pop {r1}
bx r1
.align 2, 0
_08004128: .4byte 0x02020004
thumb_func_end GetNumActiveWindowsOnBg
thumb_func_start nullsub_8
nullsub_8: @ 0x0800412C
bx lr
.align 2, 0
thumb_func_end nullsub_8
thumb_func_start AddWindow8Bit
AddWindow8Bit: @ 0x08004130
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
mov sb, r0
movs r6, #0
ldr r1, _080041F8
ldrb r0, [r1]
cmp r0, #0xff
beq _0800415E
_08004146:
adds r0, r6, #1
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
cmp r6, #0x1f
bhi _0800415E
lsls r0, r6, #1
adds r0, r0, r6
lsls r0, r0, #2
adds r0, r0, r1
ldrb r0, [r0]
cmp r0, #0xff
bne _08004146
_0800415E:
cmp r6, #0x20
beq _080041F2
mov r0, sb
ldrb r7, [r0]
ldr r1, _080041FC
mov sl, r1
lsls r2, r7, #2
mov r8, r2
mov r0, r8
add r0, sl
ldr r0, [r0]
cmp r0, #0
bne _080041BA
adds r0, r7, #0
movs r1, #8
bl GetBgAttribute
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
ldr r0, _08004200
cmp r5, r0
beq _080041BA
adds r0, r5, #0
bl Alloc
adds r4, r0, #0
cmp r4, #0
beq _080041F2
movs r1, #0
mov ip, sl
mov r3, r8
cmp r1, r5
bge _080041AC
movs r2, #0
_080041A2:
adds r0, r4, r1
strb r2, [r0]
adds r1, #1
cmp r1, r5
blt _080041A2
_080041AC:
mov r1, ip
adds r0, r3, r1
str r4, [r0]
adds r0, r7, #0
adds r1, r4, #0
bl SetBgTilemapBuffer
_080041BA:
mov r2, sb
ldrb r1, [r2, #3]
ldrb r0, [r2, #4]
muls r0, r1, r0
lsls r0, r0, #0x16
lsrs r0, r0, #0x10
bl Alloc
adds r4, r0, #0
cmp r4, #0
bne _08004208
adds r0, r7, #0
bl GetNumActiveWindowsOnBg8Bit
lsls r0, r0, #0x18
cmp r0, #0
bne _080041F2
ldr r0, _080041FC
lsls r1, r7, #2
adds r5, r1, r0
ldr r1, [r5]
ldr r0, _08004204
cmp r1, r0
beq _080041F2
adds r0, r1, #0
bl Free
str r4, [r5]
_080041F2:
movs r0, #0xff
b _08004226
.align 2, 0
_080041F8: .4byte 0x02020004
_080041FC: .4byte 0x03003010
_08004200: .4byte 0x0000FFFF
_08004204: .4byte 0x0800412D
_08004208:
ldr r1, _08004234
lsls r2, r6, #1
adds r2, r2, r6
lsls r2, r2, #2
adds r0, r1, #0
adds r0, #8
adds r0, r2, r0
str r4, [r0]
adds r2, r2, r1
mov r3, sb
ldr r0, [r3]
ldr r1, [r3, #4]
str r0, [r2]
str r1, [r2, #4]
adds r0, r6, #0
_08004226:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_08004234: .4byte 0x02020004
thumb_func_end AddWindow8Bit
thumb_func_start FillWindowPixelBuffer8Bit
FillWindowPixelBuffer8Bit: @ 0x08004238
push {r4, r5, r6, lr}
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r5, r1, #0x18
ldr r6, _08004274
lsls r1, r0, #1
adds r1, r1, r0
lsls r4, r1, #2
adds r0, r4, r6
ldrb r1, [r0, #3]
ldrb r0, [r0, #4]
muls r0, r1, r0
lsls r0, r0, #0x16
lsrs r3, r0, #0x10
movs r2, #0
cmp r2, r3
bge _0800426E
adds r0, r6, #0
adds r0, #8
adds r1, r4, r0
_08004262:
ldr r0, [r1]
adds r0, r0, r2
strb r5, [r0]
adds r2, #1
cmp r2, r3
blt _08004262
_0800426E:
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_08004274: .4byte 0x02020004
thumb_func_end FillWindowPixelBuffer8Bit
thumb_func_start FillWindowPixelRect8Bit
FillWindowPixelRect8Bit: @ 0x08004278
push {r4, r5, r6, lr}
mov r6, sb
mov r5, r8
push {r5, r6}
sub sp, #0x10
mov sb, r3
ldr r3, [sp, #0x28]
ldr r4, [sp, #0x2c]
mov r8, r4
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
lsls r2, r2, #0x10
lsrs r2, r2, #0x10
mov r4, sb
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
mov sb, r4
lsls r3, r3, #0x10
lsrs r3, r3, #0x10
mov r4, r8
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
mov r8, r4
ldr r5, _080042F8
lsls r4, r0, #1
adds r4, r4, r0
lsls r4, r4, #2
adds r0, r5, #0
adds r0, #8
adds r0, r4, r0
ldr r0, [r0]
str r0, [sp, #8]
adds r4, r4, r5
ldrb r0, [r4, #3]
lsls r0, r0, #3
ldr r6, _080042FC
ldr r5, [sp, #0xc]
ands r5, r6
orrs r5, r0
str r5, [sp, #0xc]
ldrb r4, [r4, #4]
lsls r4, r4, #0x13
ldr r0, _08004300
ands r0, r5
orrs r0, r4
str r0, [sp, #0xc]
mov r0, r8
str r0, [sp]
str r1, [sp, #4]
add r0, sp, #8
adds r1, r2, #0
mov r2, sb
bl FillBitmapRect8Bit
add sp, #0x10
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_080042F8: .4byte 0x02020004
_080042FC: .4byte 0xFFFF0000
_08004300: .4byte 0x0000FFFF
thumb_func_end FillWindowPixelRect8Bit
thumb_func_start BlitBitmapRectToWindow4BitTo8Bit
BlitBitmapRectToWindow4BitTo8Bit: @ 0x08004304
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x2c
ldr r4, [sp, #0x4c]
ldr r5, [sp, #0x50]
ldr r6, [sp, #0x54]
mov r8, r6
ldr r7, [sp, #0x58]
mov sb, r7
ldr r6, [sp, #0x5c]
mov sl, r6
ldr r7, [sp, #0x60]
mov ip, r7
ldr r6, [sp, #0x64]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r2, r2, #0x10
lsrs r2, r2, #0x10
lsls r3, r3, #0x10
lsrs r3, r3, #0x10
lsls r4, r4, #0x10
mov r7, r8
lsls r7, r7, #0x10
lsrs r7, r7, #0x10
mov r8, r7
mov r7, sb
lsls r7, r7, #0x10
lsrs r7, r7, #0x10
mov sb, r7
mov r7, sl
lsls r7, r7, #0x10
lsrs r7, r7, #0x10
mov sl, r7
mov r7, ip
lsls r7, r7, #0x10
lsrs r7, r7, #0x10
mov ip, r7
lsls r6, r6, #0x18
lsrs r6, r6, #0x18
str r6, [sp, #0x28]
str r1, [sp, #0x18]
lsls r5, r5, #0x10
ldr r6, _080043C4
lsrs r4, r4, #0x10
orrs r4, r5
str r4, [sp, #0x1c]
ldr r1, _080043C8
lsls r5, r0, #1
adds r5, r5, r0
lsls r5, r5, #2
adds r0, r1, #0
adds r0, #8
adds r0, r5, r0
ldr r0, [r0]
str r0, [sp, #0x20]
adds r5, r5, r1
ldrb r0, [r5, #3]
lsls r0, r0, #3
add r1, sp, #0x20
ldr r4, [r1, #4]
ldr r7, _080043CC
ands r4, r7
orrs r4, r0
str r4, [r1, #4]
ldrb r0, [r5, #4]
lsls r0, r0, #0x13
ands r6, r4
orrs r6, r0
str r6, [r1, #4]
mov r0, r8
str r0, [sp]
mov r6, sb
str r6, [sp, #4]
mov r7, sl
str r7, [sp, #8]
mov r0, ip
str r0, [sp, #0xc]
movs r0, #0
str r0, [sp, #0x10]
ldr r6, [sp, #0x28]
str r6, [sp, #0x14]
add r0, sp, #0x18
bl BlitBitmapRect4BitTo8Bit
add sp, #0x2c
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_080043C4: .4byte 0x0000FFFF
_080043C8: .4byte 0x02020004
_080043CC: .4byte 0xFFFF0000
thumb_func_end BlitBitmapRectToWindow4BitTo8Bit
thumb_func_start CopyWindowToVram8Bit
CopyWindowToVram8Bit: @ 0x080043D0
push {r4, r5, r6, lr}
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r2, r1, #0x18
adds r5, r2, #0
ldr r6, _08004404
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
ldr r0, _08004408
adds r3, r1, r0
str r3, [r6]
ldr r4, _0800440C
ldrb r1, [r3, #3]
ldrb r0, [r3, #4]
muls r0, r1, r0
lsls r0, r0, #6
strh r0, [r4]
cmp r2, #2
beq _0800441E
cmp r2, #2
bgt _08004410
cmp r2, #1
beq _08004416
b _08004440
.align 2, 0
_08004404: .4byte 0x02020184
_08004408: .4byte 0x02020004
_0800440C: .4byte 0x02020188
_08004410:
cmp r5, #3
beq _0800442C
b _08004440
_08004416:
ldrb r0, [r3]
bl CopyBgTilemapBufferToVram
b _08004440
_0800441E:
ldrb r0, [r3]
ldr r1, [r3, #8]
ldrh r2, [r4]
ldrh r3, [r3, #6]
bl LoadBgTiles
b _08004440
_0800442C:
ldrb r0, [r3]
ldr r1, [r3, #8]
ldrh r2, [r4]
ldrh r3, [r3, #6]
bl LoadBgTiles
ldr r0, [r6]
ldrb r0, [r0]
bl CopyBgTilemapBufferToVram
_08004440:
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
thumb_func_end CopyWindowToVram8Bit
thumb_func_start GetNumActiveWindowsOnBg8Bit
GetNumActiveWindowsOnBg8Bit: @ 0x08004448
push {r4, lr}
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
movs r3, #0
ldr r2, _08004470
movs r1, #0x1f
_08004454:
ldrb r0, [r2]
cmp r0, r4
bne _08004460
adds r0, r3, #1
lsls r0, r0, #0x18
lsrs r3, r0, #0x18
_08004460:
adds r2, #0xc
subs r1, #1
cmp r1, #0
bge _08004454
adds r0, r3, #0
pop {r4}
pop {r1}
bx r1
.align 2, 0
_08004470: .4byte 0x02020004
thumb_func_end GetNumActiveWindowsOnBg8Bit