diff options
author | sceptillion <33798691+sceptillion@users.noreply.github.com> | 2017-12-17 23:53:55 -0800 |
---|---|---|
committer | sceptillion <33798691+sceptillion@users.noreply.github.com> | 2017-12-17 23:53:55 -0800 |
commit | 4265e3617426639577df510c6d659e6a9cd13b19 (patch) | |
tree | ca8f1c9d337935c62fb15d85e3939dd9ae706c7d | |
parent | 91b847440c34b6e977c86ffdf201f6a461cecb41 (diff) |
decompile bg
55 files changed, 1841 insertions, 3565 deletions
diff --git a/asm/battle_1.s b/asm/battle_1.s index e25330776..c31187f21 100644 --- a/asm/battle_1.s +++ b/asm/battle_1.s @@ -178,11 +178,11 @@ _0800F320: .4byte gUnknown_824EE34 sub_800F324: @ 800F324 push {lr} movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0800F344 @ =gUnknown_8248320 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r0, _0800F348 @ =gUnknown_8248330 bl InitWindows bl DeactivateAllTextPrinters diff --git a/asm/battle_records.s b/asm/battle_records.s index 4f7ed298b..239b59dd4 100644 --- a/asm/battle_records.s +++ b/asm/battle_records.s @@ -64,11 +64,11 @@ _080CD29A: bl AllocZeroed str r0, [r4] movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080CD2C8 @ =gUnknown_83F6C7C movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, [r4] movs r0, 0x3 bl SetBgTilemapBuffer diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index feb1333b0..02abba1df 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -395,11 +395,11 @@ sub_813D07C: @ 813D07C movs r1, 0 bl memset movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0813D0E0 @ =gUnknown_846434C movs r0, 0 movs r2, 0x3 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, [r4] adds r1, 0xC movs r0, 0x1 diff --git a/asm/bg.s b/asm/bg.s deleted file mode 100644 index 93bb880e2..000000000 --- a/asm/bg.s +++ /dev/null @@ -1,3421 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ResetBgs -ResetBgs: @ 8001028 - push {lr} - bl ResetBgControlStructs - ldr r1, _0800103C @ =gUnknown_30008D0 - movs r0, 0 - strh r0, [r1, 0x10] - bl SetTextModeAndHideBgs - pop {r0} - bx r0 - .align 2, 0 -_0800103C: .4byte gUnknown_30008D0 - thumb_func_end ResetBgs - - thumb_func_start SetBgModeInternal -SetBgModeInternal: @ 8001040 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _08001054 @ =gUnknown_30008D0 - ldrh r2, [r3, 0x10] - ldr r1, _08001058 @ =0x0000fff8 - ands r1, r2 - orrs r1, r0 - strh r1, [r3, 0x10] - bx lr - .align 2, 0 -_08001054: .4byte gUnknown_30008D0 -_08001058: .4byte 0x0000fff8 - thumb_func_end SetBgModeInternal - - thumb_func_start GetBgMode -GetBgMode: @ 800105C - ldr r0, _08001068 @ =gUnknown_30008D0 - ldrb r1, [r0, 0x10] - movs r0, 0x7 - ands r0, r1 - bx lr - .align 2, 0 -_08001068: .4byte gUnknown_30008D0 - thumb_func_end GetBgMode - - thumb_func_start ResetBgControlStructs -ResetBgControlStructs: @ 800106C - push {lr} - ldr r2, _08001084 @ =gUnknown_30008D0 - ldr r0, _08001088 @ =gUnknown_81E9F64 - ldr r0, [r0] - adds r1, r2, 0 - adds r1, 0xC -_08001078: - str r0, [r1] - subs r1, 0x4 - cmp r1, r2 - bge _08001078 - pop {r0} - bx r0 - .align 2, 0 -_08001084: .4byte gUnknown_30008D0 -_08001088: .4byte gUnknown_81E9F64 - thumb_func_end ResetBgControlStructs - - thumb_func_start Unused_ResetBgControlStruct -Unused_ResetBgControlStruct: @ 800108C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsInvalidBg - lsls r0, 24 - cmp r0, 0 - bne _080010AA - ldr r1, _080010B0 @ =gUnknown_30008D0 - lsls r0, r4, 2 - adds r0, r1 - ldr r1, _080010B4 @ =gUnknown_81E9F64 - ldr r1, [r1] - str r1, [r0] -_080010AA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080010B0: .4byte gUnknown_30008D0 -_080010B4: .4byte gUnknown_81E9F64 - thumb_func_end Unused_ResetBgControlStruct - - thumb_func_start SetBgControlAttributes -SetBgControlAttributes: @ 80010B8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - ldr r4, [sp, 0x30] - ldr r5, [sp, 0x34] - ldr r6, [sp, 0x38] - mov r12, r6 - ldr r6, [sp, 0x3C] - mov r8, r6 - lsls r0, 24 - lsrs r7, r0, 24 - str r7, [sp] - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - lsls r2, 24 - lsrs r6, r2, 24 - lsls r3, 24 - lsrs r3, 24 - mov r9, r3 - lsls r4, 24 - lsrs r4, 24 - str r4, [sp, 0x4] - lsls r5, 24 - lsrs r5, 24 - mov r0, r12 - lsls r0, 24 - lsrs r4, r0, 24 - mov r1, r8 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp, 0xC] - adds r0, r7, 0 - bl IsInvalidBg - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - cmp r0, 0 - bne _080011D0 - ldr r2, _080011E0 @ =gUnknown_30008D0 - mov r8, r2 - mov r0, r10 - cmp r0, 0xFF - beq _0800112C - lsls r2, r7, 2 - add r2, r8 - movs r1, 0x3 - ands r1, r0 - ldrb r3, [r2, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x1] -_0800112C: - cmp r6, 0xFF - beq _08001144 - lsls r1, r7, 2 - add r1, r8 - movs r0, 0x1F - ands r6, r0 - lsls r3, r6, 2 - ldrb r2, [r1, 0x1] - subs r0, 0x9C - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x1] -_08001144: - mov r1, r9 - cmp r1, 0xFF - beq _08001160 - lsls r1, r7, 2 - add r1, r8 - movs r0, 0x3 - mov r2, r9 - ands r2, r0 - lsls r3, r2, 2 - ldrb r2, [r1] - subs r0, 0x10 - ands r0, r2 - orrs r0, r3 - strb r0, [r1] -_08001160: - ldr r6, [sp, 0x4] - cmp r6, 0xFF - beq _08001176 - lsls r1, r7, 2 - add r1, r8 - lsls r3, r6, 7 - ldrb r2, [r1, 0x1] - movs r0, 0x7F - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x1] -_08001176: - cmp r5, 0xFF - beq _0800118E - lsls r1, r7, 2 - add r1, r8 - movs r0, 0x3 - ands r5, r0 - lsls r3, r5, 4 - ldrb r2, [r1] - subs r0, 0x34 - ands r0, r2 - orrs r0, r3 - strb r0, [r1] -_0800118E: - cmp r4, 0xFF - beq _080011A6 - lsls r1, r7, 2 - add r1, r8 - movs r0, 0x1 - ands r4, r0 - lsls r3, r4, 6 - ldrb r2, [r1] - subs r0, 0x42 - ands r0, r2 - orrs r0, r3 - strb r0, [r1] -_080011A6: - ldr r0, [sp, 0xC] - cmp r0, 0xFF - beq _080011BC - lsls r1, r7, 2 - add r1, r8 - lsls r3, r0, 7 - ldrb r2, [r1] - movs r0, 0x7F - ands r0, r2 - orrs r0, r3 - strb r0, [r1] -_080011BC: - ldr r1, [sp] - lsls r0, r1, 2 - add r0, r8 - mov r2, r12 - strb r2, [r0, 0x2] - strb r2, [r0, 0x3] - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] -_080011D0: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080011E0: .4byte gUnknown_30008D0 - thumb_func_end SetBgControlAttributes - - thumb_func_start GetBgControlAttribute -GetBgControlAttribute: @ 80011E4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - adds r0, r4, 0 - bl IsInvalidBg - lsls r0, 24 - cmp r0, 0 - bne _08001290 - ldr r1, _0800121C @ =gUnknown_30008D0 - lsls r2, r4, 2 - adds r0, r2, r1 - ldrb r0, [r0] - lsls r0, 31 - adds r3, r1, 0 - cmp r0, 0 - beq _08001290 - subs r0, r5, 0x1 - cmp r0, 0x7 - bhi _08001290 - lsls r0, 2 - ldr r1, _08001220 @ =_08001224 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0800121C: .4byte gUnknown_30008D0 -_08001220: .4byte _08001224 - .align 2, 0 -_08001224: - .4byte _08001244 - .4byte _0800124E - .4byte _08001258 - .4byte _08001262 - .4byte _0800126C - .4byte _08001274 - .4byte _0800127E - .4byte _08001288 -_08001244: - adds r0, r2, r3 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - b _08001292 -_0800124E: - adds r0, r2, r3 - ldrb r0, [r0, 0x1] - lsls r0, 30 - lsrs r0, 30 - b _08001292 -_08001258: - adds r0, r2, r3 - ldrb r0, [r0, 0x1] - lsls r0, 25 - lsrs r0, 27 - b _08001292 -_08001262: - adds r0, r2, r3 - ldrb r0, [r0] - lsls r0, 28 - lsrs r0, 30 - b _08001292 -_0800126C: - adds r0, r2, r3 - ldrb r0, [r0, 0x1] - lsrs r0, 7 - b _08001292 -_08001274: - adds r0, r2, r3 - ldrb r0, [r0] - lsls r0, 26 - lsrs r0, 30 - b _08001292 -_0800127E: - adds r0, r2, r3 - ldrb r0, [r0] - lsls r0, 25 - lsrs r0, 31 - b _08001292 -_08001288: - adds r0, r2, r3 - ldrb r0, [r0] - lsrs r0, 7 - b _08001292 -_08001290: - movs r0, 0xFF -_08001292: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end GetBgControlAttribute - - thumb_func_start LoadBgVram -LoadBgVram: @ 8001298 - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r1 - ldr r1, [sp, 0x18] - lsls r0, 24 - lsrs r4, r0, 24 - lsls r2, 16 - lsrs r7, r2, 16 - lsls r3, 16 - lsrs r6, r3, 16 - lsls r1, 24 - lsrs r5, r1, 24 - adds r0, r4, 0 - bl IsInvalidBg - lsls r0, 24 - cmp r0, 0 - bne _08001310 - ldr r1, _080012D8 @ =gUnknown_30008D0 - lsls r0, r4, 2 - adds r1, r0, r1 - ldrb r0, [r1] - lsls r0, 31 - cmp r0, 0 - beq _08001310 - cmp r5, 0x1 - beq _080012DC - cmp r5, 0x2 - beq _080012E4 - movs r2, 0xFF - b _08001314 - .align 2, 0 -_080012D8: .4byte gUnknown_30008D0 -_080012DC: - ldrb r0, [r1, 0x1] - lsls r0, 30 - lsrs r0, 16 - b _080012EC -_080012E4: - ldrb r0, [r1, 0x1] - lsls r0, 25 - lsrs r0, 27 - lsls r0, 11 -_080012EC: - adds r0, r6, r0 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xC0 - lsls r1, 19 - adds r1, r0, r1 - mov r0, r8 - adds r2, r7, 0 - movs r3, 0 - bl RequestDma3Copy - lsls r0, 24 - lsrs r2, r0, 24 - asrs r0, 24 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _08001314 -_08001310: - movs r0, 0xFF - b _08001316 -_08001314: - adds r0, r2, 0 -_08001316: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end LoadBgVram - - thumb_func_start ShowBgInternal -ShowBgInternal: @ 8001320 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsInvalidBg - lsls r0, 24 - cmp r0, 0 - bne _0800138E - ldr r5, _08001394 @ =gUnknown_30008D0 - lsls r0, r4, 2 - adds r2, r0, r5 - ldrb r3, [r2] - lsls r0, r3, 31 - cmp r0, 0 - beq _0800138E - lsls r1, r3, 26 - lsrs r1, 30 - ldrb r2, [r2, 0x1] - lsls r0, r2, 30 - lsrs r0, 28 - orrs r1, r0 - movs r0, 0x40 - ands r0, r3 - orrs r1, r0 - lsrs r0, r2, 7 - lsls r0, 7 - orrs r1, r0 - lsls r2, 25 - lsrs r2, 27 - lsls r2, 8 - orrs r1, r2 - lsrs r0, r3, 7 - lsls r0, 13 - orrs r1, r0 - lsls r0, r3, 28 - lsrs r0, 30 - lsls r0, 14 - orrs r1, r0 - lsls r0, r4, 25 - movs r2, 0x80 - lsls r2, 20 - adds r0, r2 - lsrs r0, 24 - bl SetGpuReg - adds r1, r4, 0 - adds r1, 0x8 - movs r0, 0x1 - lsls r0, r1 - ldrh r1, [r5, 0x10] - orrs r0, r1 - ldr r1, _08001398 @ =0x00000f07 - ands r0, r1 - strh r0, [r5, 0x10] -_0800138E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08001394: .4byte gUnknown_30008D0 -_08001398: .4byte 0x00000f07 - thumb_func_end ShowBgInternal - - thumb_func_start HideBgInternal -HideBgInternal: @ 800139C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsInvalidBg - lsls r0, 24 - cmp r0, 0 - bne _080013C2 - ldr r2, _080013C8 @ =gUnknown_30008D0 - adds r0, r4, 0 - adds r0, 0x8 - movs r1, 0x1 - lsls r1, r0 - ldrh r0, [r2, 0x10] - bics r0, r1 - ldr r1, _080013CC @ =0x00000f07 - ands r0, r1 - strh r0, [r2, 0x10] -_080013C2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080013C8: .4byte gUnknown_30008D0 -_080013CC: .4byte 0x00000f07 - thumb_func_end HideBgInternal - - thumb_func_start SyncBgVisibilityAndMode -SyncBgVisibilityAndMode: @ 80013D0 - push {lr} - movs r0, 0 - bl GetGpuReg - ldr r1, _080013EC @ =0x0000f0f8 - ands r1, r0 - ldr r0, _080013F0 @ =gUnknown_30008D0 - ldrh r0, [r0, 0x10] - orrs r1, r0 - movs r0, 0 - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_080013EC: .4byte 0x0000f0f8 -_080013F0: .4byte gUnknown_30008D0 - thumb_func_end SyncBgVisibilityAndMode - - thumb_func_start SetTextModeAndHideBgs -SetTextModeAndHideBgs: @ 80013F4 - push {lr} - movs r0, 0 - bl GetGpuReg - ldr r1, _0800140C @ =0x0000f0f8 - ands r1, r0 - movs r0, 0 - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_0800140C: .4byte 0x0000f0f8 - thumb_func_end SetTextModeAndHideBgs - - thumb_func_start SetBgAffineInternal -SetBgAffineInternal: @ 8001410 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x24 - mov r12, r1 - mov r8, r2 - ldr r1, [sp, 0x3C] - ldr r2, [sp, 0x40] - ldr r4, [sp, 0x44] - ldr r5, [sp, 0x48] - lsls r0, 24 - lsrs r6, r0, 24 - lsls r3, 16 - lsrs r3, 16 - lsls r1, 16 - lsrs r7, r1, 16 - lsls r2, 16 - lsrs r2, 16 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - ldr r0, _08001454 @ =gUnknown_30008D0 - ldrh r0, [r0, 0x10] - movs r1, 0x7 - ands r1, r0 - cmp r1, 0x1 - beq _08001458 - cmp r1, 0x1 - ble _080014CE - cmp r1, 0x2 - beq _0800145E - b _080014CE - .align 2, 0 -_08001454: .4byte gUnknown_30008D0 -_08001458: - cmp r6, 0x2 - bne _080014CE - b _08001468 -_0800145E: - subs r0, r6, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080014CE -_08001468: - mov r0, r12 - str r0, [sp] - mov r0, r8 - str r0, [sp, 0x4] - mov r0, sp - strh r3, [r0, 0x8] - strh r7, [r0, 0xA] - strh r2, [r0, 0xC] - strh r4, [r0, 0xE] - strh r5, [r0, 0x10] - add r4, sp, 0x14 - adds r1, r4, 0 - movs r2, 0x1 - bl BgAffineSet - ldrh r1, [r4] - movs r0, 0x20 - bl SetGpuReg - ldrh r1, [r4, 0x2] - movs r0, 0x22 - bl SetGpuReg - ldrh r1, [r4, 0x4] - movs r0, 0x24 - bl SetGpuReg - ldrh r1, [r4, 0x6] - movs r0, 0x26 - bl SetGpuReg - ldrh r1, [r4] - movs r0, 0x20 - bl SetGpuReg - ldrh r1, [r4, 0x8] - movs r0, 0x28 - bl SetGpuReg - ldrh r1, [r4, 0xA] - movs r0, 0x2A - bl SetGpuReg - ldrh r1, [r4, 0xC] - movs r0, 0x2C - bl SetGpuReg - ldrh r1, [r4, 0xE] - movs r0, 0x2E - bl SetGpuReg -_080014CE: - add sp, 0x24 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end SetBgAffineInternal - - thumb_func_start IsInvalidBg -IsInvalidBg: @ 80014DC - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bhi _080014EA - movs r0, 0 - b _080014EC -_080014EA: - movs r0, 0x1 -_080014EC: - pop {r1} - bx r1 - thumb_func_end IsInvalidBg - - thumb_func_start sub_80014F0 -sub_80014F0: @ 80014F0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r1, 0 - mov r8, r2 - cmp r3, 0x1 - beq _08001582 - cmp r3, 0x1 - bgt _08001508 - cmp r3, 0 - beq _0800150E - b _08001606 -_08001508: - cmp r3, 0x2 - beq _080015C8 - b _08001606 -_0800150E: - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl GetBgControlAttribute - lsls r0, 16 - lsrs r0, 7 - movs r1, 0x80 - lsls r1, 3 - adds r4, r0, r1 - movs r1, 0x80 - lsls r1, 4 - cmp r4, r1 - ble _0800152C - adds r4, r1, 0 -_0800152C: - movs r2, 0 - movs r6, 0 - adds r3, r0, 0 - movs r5, 0 - cmp r3, r4 - bge _0800157C - ldr r7, _08001568 @ =gUnknown_3000938 - mov r12, r7 -_0800153C: - adds r0, r3, 0 - cmp r3, 0 - bge _08001544 - adds r0, r3, 0x7 -_08001544: - asrs r0, 3 - mov r7, r12 - adds r1, r0, r7 - ldrb r1, [r1] - lsls r0, 3 - subs r0, r3, r0 - asrs r1, r0 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - bne _08001572 - cmp r2, 0 - beq _0800156C - adds r2, 0x1 - cmp r2, r8 - bne _08001574 - adds r0, r6, 0 - b _08001608 - .align 2, 0 -_08001568: .4byte gUnknown_3000938 -_0800156C: - adds r6, r5, 0 - movs r2, 0x1 - b _08001574 -_08001572: - movs r2, 0 -_08001574: - adds r3, 0x1 - adds r5, 0x1 - cmp r3, r4 - blt _0800153C -_0800157C: - movs r0, 0x1 - negs r0, r0 - b _08001608 -_08001582: - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl GetBgControlAttribute - lsls r0, 16 - lsrs r0, 7 - adds r0, r5 - mov r1, r8 - adds r4, r0, r1 - adds r3, r0, 0 - cmp r3, r4 - bge _08001606 - ldr r5, _080015C4 @ =gUnknown_3000938 - movs r6, 0x1 -_080015A0: - adds r1, r3, 0 - cmp r3, 0 - bge _080015A8 - adds r1, r3, 0x7 -_080015A8: - asrs r1, 3 - adds r2, r1, r5 - lsls r1, 3 - subs r1, r3, r1 - adds r0, r6, 0 - lsls r0, r1 - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - adds r3, 0x1 - cmp r3, r4 - blt _080015A0 - b _08001606 - .align 2, 0 -_080015C4: .4byte gUnknown_3000938 -_080015C8: - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl GetBgControlAttribute - lsls r0, 16 - lsrs r0, 7 - adds r0, r5 - mov r7, r8 - adds r4, r0, r7 - adds r3, r0, 0 - cmp r3, r4 - bge _08001606 - ldr r5, _08001614 @ =gUnknown_3000938 - movs r6, 0x1 -_080015E6: - adds r0, r3, 0 - cmp r3, 0 - bge _080015EE - adds r0, r3, 0x7 -_080015EE: - asrs r0, 3 - adds r2, r0, r5 - lsls r0, 3 - subs r0, r3, r0 - adds r1, r6, 0 - lsls r1, r0 - ldrb r0, [r2] - bics r0, r1 - strb r0, [r2] - adds r3, 0x1 - cmp r3, r4 - blt _080015E6 -_08001606: - movs r0, 0 -_08001608: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08001614: .4byte gUnknown_3000938 - thumb_func_end sub_80014F0 - - thumb_func_start sub_8001618 -sub_8001618: @ 8001618 - push {r4,lr} - adds r4, r0, 0 - bl ResetBgs - ldr r1, _0800164C @ =gUnknown_3000928 - movs r2, 0 - adds r0, r1, 0 - adds r0, 0xC -_08001628: - str r2, [r0] - subs r0, 0x4 - cmp r0, r1 - bge _08001628 - ldr r0, _08001650 @ =gUnknown_3003D8C - str r4, [r0] - ldr r1, _08001654 @ =gUnknown_3000938 - movs r2, 0 - adds r0, r1, 0 - adds r0, 0xFF -_0800163C: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _0800163C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800164C: .4byte gUnknown_3000928 -_08001650: .4byte gUnknown_3003D8C -_08001654: .4byte gUnknown_3000938 - thumb_func_end sub_8001618 - - thumb_func_start sub_8001658 -sub_8001658: @ 8001658 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - adds r5, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r2, 24 - lsrs r4, r2, 24 - bl SetBgModeInternal - bl ResetBgControlStructs - cmp r4, 0 - beq _08001712 - movs r7, 0 - ldr r0, _08001724 @ =gUnknown_30008E8 - mov r9, r0 - adds r6, r5, 0 - ldr r2, _08001728 @ =gUnknown_3000938 - mov r10, r2 - mov r8, r4 -_08001688: - ldr r4, [r6] - lsls r0, r4, 30 - lsrs r5, r0, 30 - cmp r5, 0x3 - bhi _08001704 - lsls r1, r4, 28 - lsrs r1, 30 - lsls r2, r4, 23 - lsrs r2, 27 - lsls r3, r4, 21 - lsrs r3, 30 - lsls r0, r4, 20 - lsrs r0, 31 - str r0, [sp] - lsls r0, r4, 18 - lsrs r0, 30 - str r0, [sp, 0x4] - str r7, [sp, 0x8] - str r7, [sp, 0xC] - adds r0, r5, 0 - bl SetBgControlAttributes - lsls r4, r5, 4 - mov r5, r9 - adds r3, r4, r5 - ldr r2, [r6] - lsls r2, 8 - lsrs r2, 22 - ldrh r0, [r3] - ldr r5, _0800172C @ =0xfffffc00 - adds r1, r5, 0 - ands r0, r1 - orrs r0, r2 - strh r0, [r3] - ldrb r0, [r3, 0x1] - movs r2, 0x3D - negs r2, r2 - adds r1, r2, 0 - ands r0, r1 - strb r0, [r3, 0x1] - ldr r0, [r3] - ldr r1, _08001730 @ =0x00003fff - ands r0, r1 - str r0, [r3] - mov r0, r9 - adds r0, 0x4 - adds r0, r4, r0 - str r7, [r0] - mov r0, r9 - adds r0, 0x8 - adds r0, r4, r0 - str r7, [r0] - ldr r5, _08001734 @ =gUnknown_30008F4 - adds r4, r5 - str r7, [r4] - ldr r0, [r6] - lsls r0, 28 - lsrs r0, 30 - lsls r0, 6 - add r0, r10 - movs r1, 0x1 - strb r1, [r0] -_08001704: - adds r6, 0x4 - movs r0, 0x1 - negs r0, r0 - add r8, r0 - mov r2, r8 - cmp r2, 0 - bne _08001688 -_08001712: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08001724: .4byte gUnknown_30008E8 -_08001728: .4byte gUnknown_3000938 -_0800172C: .4byte 0xfffffc00 -_08001730: .4byte 0x00003fff -_08001734: .4byte gUnknown_30008F4 - thumb_func_end sub_8001658 - - thumb_func_start sub_8001738 -sub_8001738: @ 8001738 - push {r4-r7,lr} - sub sp, 0x10 - adds r7, r0, 0 - ldr r4, [r7] - lsls r0, r4, 30 - lsrs r5, r0, 30 - cmp r5, 0x3 - bhi _080017B8 - lsls r1, r4, 28 - lsrs r1, 30 - lsls r2, r4, 23 - lsrs r2, 27 - lsls r3, r4, 21 - lsrs r3, 30 - lsls r0, r4, 20 - lsrs r0, 31 - str r0, [sp] - lsls r0, r4, 18 - lsrs r0, 30 - str r0, [sp, 0x4] - movs r6, 0 - str r6, [sp, 0x8] - str r6, [sp, 0xC] - adds r0, r5, 0 - bl SetBgControlAttributes - ldr r4, _080017C0 @ =gUnknown_30008E8 - lsls r5, 4 - adds r3, r5, r4 - ldr r1, [r7] - lsls r1, 8 - lsrs r1, 22 - ldrh r2, [r3] - ldr r0, _080017C4 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r3] - ldrb r1, [r3, 0x1] - movs r0, 0x3D - negs r0, r0 - ands r0, r1 - strb r0, [r3, 0x1] - ldr r0, [r3] - ldr r1, _080017C8 @ =0x00003fff - ands r0, r1 - str r0, [r3] - adds r0, r4, 0x4 - adds r0, r5, r0 - str r6, [r0] - adds r0, r4, 0 - adds r0, 0x8 - adds r0, r5, r0 - str r6, [r0] - adds r4, 0xC - adds r5, r4 - str r6, [r5] - ldr r1, _080017CC @ =gUnknown_3000938 - ldr r0, [r7] - lsls r0, 28 - lsrs r0, 30 - lsls r0, 6 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] -_080017B8: - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080017C0: .4byte gUnknown_30008E8 -_080017C4: .4byte 0xfffffc00 -_080017C8: .4byte 0x00003fff -_080017CC: .4byte gUnknown_3000938 - thumb_func_end sub_8001738 - - thumb_func_start LoadBgTiles -LoadBgTiles: @ 80017D0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r7, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r2, 16 - lsrs r2, 16 - mov r8, r2 - lsls r3, 16 - lsrs r4, r3, 16 - adds r0, r5, 0 - movs r1, 0x5 - bl GetBgControlAttribute - lsls r0, 16 - cmp r0, 0 - bne _0800180C - ldr r1, _08001808 @ =gUnknown_30008E8 - lsls r0, r5, 4 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 22 - lsrs r0, 22 - adds r0, r4 - lsls r0, 21 - b _0800181C - .align 2, 0 -_08001808: .4byte gUnknown_30008E8 -_0800180C: - ldr r1, _0800183C @ =gUnknown_30008E8 - lsls r0, r5, 4 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 22 - lsrs r0, 22 - adds r0, r4 - lsls r0, 22 -_0800181C: - lsrs r4, r0, 16 - movs r6, 0x1 - str r6, [sp] - adds r0, r5, 0 - adds r1, r7, 0 - mov r2, r8 - adds r3, r4, 0 - bl LoadBgVram - lsls r2, r0, 24 - lsrs r1, r2, 24 - adds r7, r1, 0 - cmp r1, 0xFF - bne _08001844 - ldr r0, _08001840 @ =0x0000ffff - b _08001872 - .align 2, 0 -_0800183C: .4byte gUnknown_30008E8 -_08001840: .4byte 0x0000ffff -_08001844: - ldr r0, _08001880 @ =gUnknown_3000928 - lsrs r2, 29 - lsls r2, 2 - adds r2, r0 - movs r0, 0x1F - ands r0, r1 - adds r1, r6, 0 - lsls r1, r0 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - ldr r0, _08001884 @ =gUnknown_3003D8C - ldr r0, [r0] - cmp r0, 0x1 - bne _08001870 - lsrs r1, r4, 5 - mov r0, r8 - lsrs r2, r0, 5 - adds r0, r5, 0 - movs r3, 0x1 - bl sub_80014F0 -_08001870: - adds r0, r7, 0 -_08001872: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08001880: .4byte gUnknown_3000928 -_08001884: .4byte gUnknown_3003D8C - thumb_func_end LoadBgTiles - - thumb_func_start LoadBgTilemap -LoadBgTilemap: @ 8001888 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 21 - lsrs r3, 16 - movs r4, 0x2 - str r4, [sp] - bl LoadBgVram - lsls r2, r0, 24 - lsrs r3, r2, 24 - cmp r3, 0xFF - beq _080018C8 - ldr r0, _080018C4 @ =gUnknown_3000928 - lsrs r2, 29 - lsls r2, 2 - adds r2, r0 - movs r0, 0x1F - ands r0, r3 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - adds r0, r3, 0 - b _080018CA - .align 2, 0 -_080018C4: .4byte gUnknown_3000928 -_080018C8: - ldr r0, _080018D4 @ =0x0000ffff -_080018CA: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080018D4: .4byte 0x0000ffff - thumb_func_end LoadBgTilemap - - thumb_func_start Unused_LoadBgPalette -Unused_LoadBgPalette: @ 80018D8 - push {r4-r7,lr} - adds r7, r1, 0 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r2, 16 - lsrs r6, r2, 16 - lsls r3, 16 - lsrs r5, r3, 16 - adds r0, r4, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _08001924 - ldr r1, _08001928 @ =gUnknown_30008E8 - lsls r0, r4, 4 - adds r0, r1 - ldrb r1, [r0, 0x1] - lsls r1, 26 - lsrs r1, 28 - lsls r1, 5 - lsls r0, r5, 1 - adds r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0xA0 - lsls r0, 19 - adds r1, r0 - adds r0, r7, 0 - adds r2, r6, 0 - movs r3, 0 - bl RequestDma3Copy - lsls r3, r0, 24 - asrs r1, r3, 24 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _08001930 -_08001924: - ldr r0, _0800192C @ =0x0000ffff - b _08001954 - .align 2, 0 -_08001928: .4byte gUnknown_30008E8 -_0800192C: .4byte 0x0000ffff -_08001930: - ldr r4, _0800195C @ =gUnknown_3000928 - adds r0, r1, 0 - cmp r1, 0 - bge _0800193A - adds r0, 0x1F -_0800193A: - asrs r0, 5 - lsls r2, r0, 2 - adds r2, r4 - lsls r0, 5 - subs r0, r1, r0 - lsls r0, 24 - asrs r0, 24 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - lsrs r0, r3, 24 -_08001954: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0800195C: .4byte gUnknown_3000928 - thumb_func_end Unused_LoadBgPalette - - thumb_func_start IsDma3ManagerBusyWithBgCopy -IsDma3ManagerBusyWithBgCopy: @ 8001960 - push {r4-r7,lr} - movs r5, 0 - movs r7, 0x1 - negs r7, r7 -_08001968: - adds r0, r5, 0 - cmp r5, 0 - bge _08001970 - adds r0, 0x1F -_08001970: - asrs r0, 5 - lsls r2, r0, 24 - lsls r0, 5 - subs r0, r5, r0 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080019A4 @ =gUnknown_3000928 - lsrs r2, 22 - adds r4, r2, r1 - movs r6, 0x1 - lsls r6, r0 - ldr r0, [r4] - ands r0, r6 - cmp r0, 0 - beq _080019AE - lsls r0, r5, 16 - asrs r0, 16 - bl CheckForSpaceForDma3Request - lsls r0, 24 - asrs r0, 24 - cmp r0, r7 - bne _080019A8 - movs r0, 0x1 - b _080019B6 - .align 2, 0 -_080019A4: .4byte gUnknown_3000928 -_080019A8: - ldr r0, [r4] - bics r0, r6 - str r0, [r4] -_080019AE: - adds r5, 0x1 - cmp r5, 0x7F - ble _08001968 - movs r0, 0 -_080019B6: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end IsDma3ManagerBusyWithBgCopy - - thumb_func_start ShowBg -ShowBg: @ 80019BC - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl ShowBgInternal - bl SyncBgVisibilityAndMode - pop {r0} - bx r0 - thumb_func_end ShowBg - - thumb_func_start HideBg -HideBg: @ 80019D0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl HideBgInternal - bl SyncBgVisibilityAndMode - pop {r0} - bx r0 - thumb_func_end HideBg - - thumb_func_start SetBgAttribute -SetBgAttribute: @ 80019E4 - push {r4,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r3, r2, 24 - subs r0, r1, 0x1 - cmp r0, 0x6 - bhi _08001A9E - lsls r0, 2 - ldr r1, _08001A04 @ =_08001A08 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08001A04: .4byte _08001A08 - .align 2, 0 -_08001A08: - .4byte _08001A24 - .4byte _08001A34 - .4byte _08001A46 - .4byte _08001A5C - .4byte _08001A70 - .4byte _08001A88 - .4byte _08001A66 -_08001A24: - movs r0, 0xFF - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r4, 0 - adds r1, r3, 0 - b _08001A7E -_08001A34: - movs r0, 0xFF - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r4, 0 - movs r1, 0xFF - adds r2, r3, 0 - b _08001A80 -_08001A46: - movs r0, 0xFF - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r4, 0 - movs r1, 0xFF - movs r2, 0xFF - bl SetBgControlAttributes - b _08001A9E -_08001A5C: - str r3, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - str r0, [sp, 0x8] - b _08001A78 -_08001A66: - movs r0, 0xFF - str r0, [sp] - str r3, [sp, 0x4] - str r0, [sp, 0x8] - b _08001A78 -_08001A70: - movs r0, 0xFF - str r0, [sp] - str r0, [sp, 0x4] - str r3, [sp, 0x8] -_08001A78: - str r0, [sp, 0xC] - adds r0, r4, 0 - movs r1, 0xFF -_08001A7E: - movs r2, 0xFF -_08001A80: - movs r3, 0xFF - bl SetBgControlAttributes - b _08001A9E -_08001A88: - movs r0, 0xFF - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r3, [sp, 0xC] - adds r0, r4, 0 - movs r1, 0xFF - movs r2, 0xFF - movs r3, 0xFF - bl SetBgControlAttributes -_08001A9E: - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - thumb_func_end SetBgAttribute - - thumb_func_start GetBgAttribute -GetBgAttribute: @ 8001AA8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r1, 24 - subs r0, r1, 0x1 - cmp r0, 0x9 - bhi _08001B84 - lsls r0, 2 - ldr r1, _08001AC4 @ =_08001AC8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08001AC4: .4byte _08001AC8 - .align 2, 0 -_08001AC8: - .4byte _08001AF0 - .4byte _08001AFA - .4byte _08001B04 - .4byte _08001B0E - .4byte _08001B22 - .4byte _08001B2C - .4byte _08001B18 - .4byte _08001B36 - .4byte _08001B64 - .4byte _08001B70 -_08001AF0: - adds r0, r4, 0 - movs r1, 0x2 - bl GetBgControlAttribute - b _08001B6A -_08001AFA: - adds r0, r4, 0 - movs r1, 0x3 - bl GetBgControlAttribute - b _08001B6A -_08001B04: - adds r0, r4, 0 - movs r1, 0x4 - bl GetBgControlAttribute - b _08001B6A -_08001B0E: - adds r0, r4, 0 - movs r1, 0x5 - bl GetBgControlAttribute - b _08001B6A -_08001B18: - adds r0, r4, 0 - movs r1, 0x6 - bl GetBgControlAttribute - b _08001B6A -_08001B22: - adds r0, r4, 0 - movs r1, 0x7 - bl GetBgControlAttribute - b _08001B6A -_08001B2C: - adds r0, r4, 0 - movs r1, 0x8 - bl GetBgControlAttribute - b _08001B6A -_08001B36: - adds r0, r4, 0 - bl GetBgType - cmp r0, 0 - beq _08001B48 - cmp r0, 0x1 - beq _08001B56 - movs r0, 0 - b _08001B86 -_08001B48: - adds r0, r4, 0 - movs r1, 0 - bl GetBgMetricTextMode - lsls r0, 27 - lsrs r0, 16 - b _08001B86 -_08001B56: - adds r0, r4, 0 - movs r1, 0 - bl GetBgMetricAffineMode - lsls r0, 24 - lsrs r0, 16 - b _08001B86 -_08001B64: - adds r0, r4, 0 - bl GetBgType -_08001B6A: - lsls r0, 16 - lsrs r0, 16 - b _08001B86 -_08001B70: - ldr r0, _08001B80 @ =gUnknown_30008E8 - lsls r1, r4, 4 - adds r1, r0 - ldrh r0, [r1] - lsls r0, 22 - lsrs r0, 22 - b _08001B86 - .align 2, 0 -_08001B80: .4byte gUnknown_30008E8 -_08001B84: - ldr r0, _08001B8C @ =0x0000ffff -_08001B86: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08001B8C: .4byte 0x0000ffff - thumb_func_end GetBgAttribute - - thumb_func_start ChangeBgX -ChangeBgX: @ 8001B90 - push {r4-r6,lr} - adds r6, r1, 0 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r2, 24 - lsrs r5, r2, 24 - adds r0, r4, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _08001BB4 - adds r0, r4, 0 - movs r1, 0x1 - bl GetBgControlAttribute - lsls r0, 16 - cmp r0, 0 - bne _08001BBA -_08001BB4: - movs r0, 0x1 - negs r0, r0 - b _08001CC0 -_08001BBA: - cmp r5, 0x1 - beq _08001BD8 - cmp r5, 0x1 - ble _08001BC6 - cmp r5, 0x2 - beq _08001BEC -_08001BC6: - ldr r0, _08001BD4 @ =gUnknown_30008E8 - lsls r1, r4, 4 - adds r0, 0x8 - adds r0, r1, r0 - str r6, [r0] - adds r5, r1, 0 - b _08001BFC - .align 2, 0 -_08001BD4: .4byte gUnknown_30008E8 -_08001BD8: - ldr r0, _08001BE8 @ =gUnknown_30008E8 - lsls r2, r4, 4 - adds r0, 0x8 - adds r0, r2, r0 - ldr r1, [r0] - adds r1, r6 - b _08001BF8 - .align 2, 0 -_08001BE8: .4byte gUnknown_30008E8 -_08001BEC: - ldr r0, _08001C14 @ =gUnknown_30008E8 - lsls r2, r4, 4 - adds r0, 0x8 - adds r0, r2, r0 - ldr r1, [r0] - subs r1, r6 -_08001BF8: - str r1, [r0] - adds r5, r2, 0 -_08001BFC: - bl GetBgMode - lsls r0, 24 - lsrs r0, 24 - cmp r4, 0x1 - beq _08001C38 - cmp r4, 0x1 - bgt _08001C18 - cmp r4, 0 - beq _08001C22 - b _08001CB8 - .align 2, 0 -_08001C14: .4byte gUnknown_30008E8 -_08001C18: - cmp r4, 0x2 - beq _08001C4C - cmp r4, 0x3 - beq _08001C84 - b _08001CB8 -_08001C22: - ldr r0, _08001C34 @ =gUnknown_30008E8 - ldr r0, [r0, 0x8] - lsls r0, 8 - lsrs r1, r0, 16 - movs r0, 0x10 - bl SetGpuReg - b _08001CB8 - .align 2, 0 -_08001C34: .4byte gUnknown_30008E8 -_08001C38: - ldr r0, _08001C48 @ =gUnknown_30008E8 - ldr r0, [r0, 0x18] - lsls r0, 8 - lsrs r1, r0, 16 - movs r0, 0x14 - bl SetGpuReg - b _08001CB8 - .align 2, 0 -_08001C48: .4byte gUnknown_30008E8 -_08001C4C: - cmp r0, 0 - bne _08001C64 - ldr r0, _08001C60 @ =gUnknown_30008E8 - ldr r0, [r0, 0x28] - lsls r0, 8 - lsrs r1, r0, 16 - movs r0, 0x18 - bl SetGpuReg - b _08001CB8 - .align 2, 0 -_08001C60: .4byte gUnknown_30008E8 -_08001C64: - ldr r0, _08001C80 @ =gUnknown_30008E8 - ldr r0, [r0, 0x28] - lsrs r1, r0, 16 - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0x2A - bl SetGpuReg - movs r0, 0x28 - adds r1, r4, 0 - bl SetGpuReg - b _08001CB8 - .align 2, 0 -_08001C80: .4byte gUnknown_30008E8 -_08001C84: - cmp r0, 0 - bne _08001C9C - ldr r0, _08001C98 @ =gUnknown_30008E8 - ldr r0, [r0, 0x38] - lsls r0, 8 - lsrs r1, r0, 16 - movs r0, 0x1C - bl SetGpuReg - b _08001CB8 - .align 2, 0 -_08001C98: .4byte gUnknown_30008E8 -_08001C9C: - cmp r0, 0x2 - bne _08001CB8 - ldr r0, _08001CC8 @ =gUnknown_30008E8 - ldr r0, [r0, 0x38] - lsrs r1, r0, 16 - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0x3A - bl SetGpuReg - movs r0, 0x38 - adds r1, r4, 0 - bl SetGpuReg -_08001CB8: - ldr r0, _08001CC8 @ =gUnknown_30008E8 - adds r0, 0x8 - adds r0, r5, r0 - ldr r0, [r0] -_08001CC0: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08001CC8: .4byte gUnknown_30008E8 - thumb_func_end ChangeBgX - - thumb_func_start GetBgX -GetBgX: @ 8001CCC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _08001CFC - adds r0, r4, 0 - movs r1, 0x1 - bl GetBgControlAttribute - lsls r0, 16 - cmp r0, 0 - beq _08001CFC - ldr r0, _08001CF8 @ =gUnknown_30008E8 - lsls r1, r4, 4 - adds r0, 0x8 - adds r1, r0 - ldr r0, [r1] - b _08001D00 - .align 2, 0 -_08001CF8: .4byte gUnknown_30008E8 -_08001CFC: - movs r0, 0x1 - negs r0, r0 -_08001D00: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetBgX - - thumb_func_start ChangeBgY -ChangeBgY: @ 8001D08 - push {r4-r6,lr} - adds r6, r1, 0 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r2, 24 - lsrs r5, r2, 24 - adds r0, r4, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _08001D2C - adds r0, r4, 0 - movs r1, 0x1 - bl GetBgControlAttribute - lsls r0, 16 - cmp r0, 0 - bne _08001D32 -_08001D2C: - movs r0, 0x1 - negs r0, r0 - b _08001E38 -_08001D32: - cmp r5, 0x1 - beq _08001D50 - cmp r5, 0x1 - ble _08001D3E - cmp r5, 0x2 - beq _08001D64 -_08001D3E: - ldr r0, _08001D4C @ =gUnknown_30008E8 - lsls r1, r4, 4 - adds r0, 0xC - adds r0, r1, r0 - str r6, [r0] - adds r5, r1, 0 - b _08001D74 - .align 2, 0 -_08001D4C: .4byte gUnknown_30008E8 -_08001D50: - ldr r0, _08001D60 @ =gUnknown_30008E8 - lsls r2, r4, 4 - adds r0, 0xC - adds r0, r2, r0 - ldr r1, [r0] - adds r1, r6 - b _08001D70 - .align 2, 0 -_08001D60: .4byte gUnknown_30008E8 -_08001D64: - ldr r0, _08001D8C @ =gUnknown_30008E8 - lsls r2, r4, 4 - adds r0, 0xC - adds r0, r2, r0 - ldr r1, [r0] - subs r1, r6 -_08001D70: - str r1, [r0] - adds r5, r2, 0 -_08001D74: - bl GetBgMode - lsls r0, 24 - lsrs r0, 24 - cmp r4, 0x1 - beq _08001DB0 - cmp r4, 0x1 - bgt _08001D90 - cmp r4, 0 - beq _08001D9A - b _08001E30 - .align 2, 0 -_08001D8C: .4byte gUnknown_30008E8 -_08001D90: - cmp r4, 0x2 - beq _08001DC4 - cmp r4, 0x3 - beq _08001DFC - b _08001E30 -_08001D9A: - ldr r0, _08001DAC @ =gUnknown_30008E8 - ldr r0, [r0, 0xC] - lsls r0, 8 - lsrs r1, r0, 16 - movs r0, 0x12 - bl SetGpuReg - b _08001E30 - .align 2, 0 -_08001DAC: .4byte gUnknown_30008E8 -_08001DB0: - ldr r0, _08001DC0 @ =gUnknown_30008E8 - ldr r0, [r0, 0x1C] - lsls r0, 8 - lsrs r1, r0, 16 - movs r0, 0x16 - bl SetGpuReg - b _08001E30 - .align 2, 0 -_08001DC0: .4byte gUnknown_30008E8 -_08001DC4: - cmp r0, 0 - bne _08001DDC - ldr r0, _08001DD8 @ =gUnknown_30008E8 - ldr r0, [r0, 0x2C] - lsls r0, 8 - lsrs r1, r0, 16 - movs r0, 0x1A - bl SetGpuReg - b _08001E30 - .align 2, 0 -_08001DD8: .4byte gUnknown_30008E8 -_08001DDC: - ldr r0, _08001DF8 @ =gUnknown_30008E8 - ldr r0, [r0, 0x2C] - lsrs r1, r0, 16 - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0x2E - bl SetGpuReg - movs r0, 0x2C - adds r1, r4, 0 - bl SetGpuReg - b _08001E30 - .align 2, 0 -_08001DF8: .4byte gUnknown_30008E8 -_08001DFC: - cmp r0, 0 - bne _08001E14 - ldr r0, _08001E10 @ =gUnknown_30008E8 - ldr r0, [r0, 0x3C] - lsls r0, 8 - lsrs r1, r0, 16 - movs r0, 0x1E - bl SetGpuReg - b _08001E30 - .align 2, 0 -_08001E10: .4byte gUnknown_30008E8 -_08001E14: - cmp r0, 0x2 - bne _08001E30 - ldr r0, _08001E40 @ =gUnknown_30008E8 - ldr r0, [r0, 0x3C] - lsrs r1, r0, 16 - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0x3E - bl SetGpuReg - movs r0, 0x3C - adds r1, r4, 0 - bl SetGpuReg -_08001E30: - ldr r0, _08001E40 @ =gUnknown_30008E8 - adds r0, 0xC - adds r0, r5, r0 - ldr r0, [r0] -_08001E38: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08001E40: .4byte gUnknown_30008E8 - thumb_func_end ChangeBgY - - thumb_func_start GetBgY -GetBgY: @ 8001E44 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _08001E74 - adds r0, r4, 0 - movs r1, 0x1 - bl GetBgControlAttribute - lsls r0, 16 - cmp r0, 0 - beq _08001E74 - ldr r0, _08001E70 @ =gUnknown_30008E8 - lsls r1, r4, 4 - adds r0, 0xC - adds r1, r0 - ldr r0, [r1] - b _08001E78 - .align 2, 0 -_08001E70: .4byte gUnknown_30008E8 -_08001E74: - movs r0, 0x1 - negs r0, r0 -_08001E78: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetBgY - - thumb_func_start SetBgAffine -SetBgAffine: @ 8001E80 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - ldr r4, [sp, 0x28] - ldr r5, [sp, 0x2C] - ldr r6, [sp, 0x30] - ldr r7, [sp, 0x34] - lsls r0, 24 - lsrs r0, 24 - lsls r7, 16 - lsrs r7, 16 - lsls r3, 16 - asrs r3, 16 - lsls r4, 16 - asrs r4, 16 - str r4, [sp] - lsls r5, 16 - asrs r5, 16 - str r5, [sp, 0x4] - lsls r6, 16 - asrs r6, 16 - str r6, [sp, 0x8] - str r7, [sp, 0xC] - bl SetBgAffineInternal - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end SetBgAffine - - thumb_func_start Unused_AdjustBgMosaic -Unused_AdjustBgMosaic: @ 8001EC0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - movs r0, 0x4C - bl GetGpuReg - lsls r0, 16 - lsrs r5, r0, 16 - movs r1, 0xF - movs r3, 0xF - ands r3, r5 - lsrs r2, r0, 20 - ands r2, r1 - movs r0, 0xFF - lsls r0, 8 - ands r5, r0 - cmp r6, 0x6 - bhi _08001F14 - lsls r0, r6, 2 - ldr r1, _08001EF4 @ =_08001EF8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08001EF4: .4byte _08001EF8 - .align 2, 0 -_08001EF8: - .4byte _08001F14 - .4byte _08001F1C - .4byte _08001F22 - .4byte _08001F34 - .4byte _08001F4A - .4byte _08001F50 - .4byte _08001F62 -_08001F14: - movs r3, 0xF - ands r3, r4 - lsrs r2, r4, 4 - b _08001F76 -_08001F1C: - movs r3, 0xF - ands r3, r4 - b _08001F76 -_08001F22: - lsls r0, r3, 16 - asrs r0, 16 - adds r0, r4 - cmp r0, 0xF - ble _08001F30 - movs r3, 0xF - b _08001F76 -_08001F30: - adds r0, r3, r4 - b _08001F44 -_08001F34: - lsls r0, r3, 16 - asrs r0, 16 - subs r0, r4 - cmp r0, 0 - bge _08001F42 - movs r3, 0 - b _08001F76 -_08001F42: - subs r0, r3, r4 -_08001F44: - lsls r0, 16 - lsrs r3, r0, 16 - b _08001F76 -_08001F4A: - movs r2, 0xF - ands r2, r4 - b _08001F76 -_08001F50: - lsls r0, r2, 16 - asrs r0, 16 - adds r0, r4 - cmp r0, 0xF - ble _08001F5E - movs r2, 0xF - b _08001F76 -_08001F5E: - adds r0, r2, r4 - b _08001F72 -_08001F62: - lsls r0, r2, 16 - asrs r0, 16 - subs r0, r4 - cmp r0, 0 - bge _08001F70 - movs r2, 0 - b _08001F76 -_08001F70: - subs r0, r2, r4 -_08001F72: - lsls r0, 16 - lsrs r2, r0, 16 -_08001F76: - lsls r0, r2, 16 - asrs r0, 12 - movs r1, 0xF0 - ands r0, r1 - orrs r5, r0 - lsls r0, r3, 16 - asrs r0, 16 - movs r1, 0xF - ands r0, r1 - orrs r5, r0 - lsls r0, r5, 16 - lsrs r5, r0, 16 - movs r0, 0x4C - adds r1, r5, 0 - bl SetGpuReg - lsls r0, r5, 24 - lsrs r0, 24 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end Unused_AdjustBgMosaic - - thumb_func_start SetBgTilemapBuffer -SetBgTilemapBuffer: @ 8001FA0 - push {r4,r5,lr} - adds r5, r1, 0 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _08001FCA - adds r0, r4, 0 - movs r1, 0x1 - bl GetBgControlAttribute - lsls r0, 16 - cmp r0, 0 - beq _08001FCA - ldr r0, _08001FD0 @ =gUnknown_30008E8 - lsls r1, r4, 4 - adds r0, 0x4 - adds r1, r0 - str r5, [r1] -_08001FCA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08001FD0: .4byte gUnknown_30008E8 - thumb_func_end SetBgTilemapBuffer - - thumb_func_start UnsetBgTilemapBuffer -UnsetBgTilemapBuffer: @ 8001FD4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsInvalidBg32 - adds r5, r0, 0 - cmp r5, 0 - bne _08001FFE - adds r0, r4, 0 - movs r1, 0x1 - bl GetBgControlAttribute - lsls r0, 16 - cmp r0, 0 - beq _08001FFE - ldr r0, _08002004 @ =gUnknown_30008E8 - lsls r1, r4, 4 - adds r0, 0x4 - adds r1, r0 - str r5, [r1] -_08001FFE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08002004: .4byte gUnknown_30008E8 - thumb_func_end UnsetBgTilemapBuffer - - thumb_func_start GetBgTilemapBuffer -GetBgTilemapBuffer: @ 8002008 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _08002038 - adds r0, r4, 0 - movs r1, 0x1 - bl GetBgControlAttribute - lsls r0, 16 - cmp r0, 0 - beq _08002038 - ldr r0, _08002034 @ =gUnknown_30008E8 - lsls r1, r4, 4 - adds r0, 0x4 - adds r1, r0 - ldr r0, [r1] - b _0800203A - .align 2, 0 -_08002034: .4byte gUnknown_30008E8 -_08002038: - movs r0, 0 -_0800203A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetBgTilemapBuffer - - thumb_func_start CopyToBgTilemapBuffer -CopyToBgTilemapBuffer: @ 8002040 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r10, r1 - lsls r0, 24 - lsrs r4, r0, 24 - mov r9, r4 - lsls r7, r2, 16 - lsrs r6, r7, 16 - lsls r3, 16 - lsrs r5, r3, 16 - mov r8, r5 - adds r0, r4, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _080020A8 - adds r0, r4, 0 - bl IsTileMapOutsideWram - cmp r0, 0 - bne _080020A8 - cmp r6, 0 - beq _08002090 - ldr r0, _0800208C @ =gUnknown_30008E8 - lsls r1, r4, 4 - adds r0, 0x4 - adds r1, r0 - lsls r0, r5, 5 - ldr r1, [r1] - adds r1, r0 - lsrs r2, r7, 17 - mov r0, r10 - bl CpuSet - b _080020A8 - .align 2, 0 -_0800208C: .4byte gUnknown_30008E8 -_08002090: - ldr r0, _080020B8 @ =gUnknown_30008E8 - mov r2, r9 - lsls r1, r2, 4 - adds r0, 0x4 - adds r1, r0 - mov r2, r8 - lsls r0, r2, 5 - ldr r1, [r1] - adds r1, r0 - mov r0, r10 - bl LZ77UnCompWram -_080020A8: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080020B8: .4byte gUnknown_30008E8 - thumb_func_end CopyToBgTilemapBuffer - - thumb_func_start CopyBgTilemapBufferToVram -CopyBgTilemapBufferToVram: @ 80020BC - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _08002118 - adds r0, r4, 0 - bl IsTileMapOutsideWram - cmp r0, 0 - bne _08002118 - adds r0, r4, 0 - bl GetBgType - cmp r0, 0 - beq _080020EA - cmp r0, 0x1 - beq _080020F6 - movs r2, 0 - b _08002102 -_080020EA: - adds r0, r4, 0 - movs r1, 0 - bl GetBgMetricTextMode - lsls r0, 27 - b _08002100 -_080020F6: - adds r0, r4, 0 - movs r1, 0 - bl GetBgMetricAffineMode - lsls r0, 24 -_08002100: - lsrs r2, r0, 16 -_08002102: - ldr r0, _08002120 @ =gUnknown_30008E8 - lsls r1, r4, 4 - adds r0, 0x4 - adds r1, r0 - ldr r1, [r1] - movs r0, 0x2 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0 - bl LoadBgVram -_08002118: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08002120: .4byte gUnknown_30008E8 - thumb_func_end CopyBgTilemapBufferToVram - - thumb_func_start CopyToBgTilemapBufferRect -CopyToBgTilemapBufferRect: @ 8002124 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r8, r1 - ldr r1, [sp, 0x24] - ldr r4, [sp, 0x28] - lsls r0, 24 - lsrs r5, r0, 24 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r4, 24 - lsrs r6, r4, 24 - adds r0, r5, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _08002214 - adds r0, r5, 0 - bl IsTileMapOutsideWram - cmp r0, 0 - bne _08002214 - adds r0, r5, 0 - bl GetBgType - cmp r0, 0 - beq _08002172 - cmp r0, 0x1 - beq _080021C0 - b _08002214 -_08002172: - mov r4, r8 - adds r3, r7, 0 - adds r0, r3, r6 - cmp r3, r0 - bge _08002214 - mov r12, r0 - lsls r1, r5, 4 - ldr r0, _080021BC @ =gUnknown_30008EC - adds r1, r0 - mov r8, r1 -_08002186: - mov r2, r10 - mov r1, r9 - adds r0, r2, r1 - adds r7, r3, 0x1 - cmp r2, r0 - bge _080021B0 - mov r1, r8 - ldr r6, [r1] - lsls r5, r3, 5 - adds r3, r0, 0 -_0800219A: - adds r0, r5, r2 - lsls r0, 1 - adds r0, r6 - ldrh r1, [r4] - strh r1, [r0] - adds r4, 0x2 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r3 - blt _0800219A -_080021B0: - lsls r0, r7, 16 - lsrs r3, r0, 16 - cmp r3, r12 - blt _08002186 - b _08002214 - .align 2, 0 -_080021BC: .4byte gUnknown_30008EC -_080021C0: - mov r4, r8 - adds r0, r5, 0 - movs r1, 0x1 - bl GetBgMetricAffineMode - lsls r0, 16 - lsrs r0, 16 - str r0, [sp] - adds r3, r7, 0 - adds r0, r3, r6 - cmp r3, r0 - bge _08002214 - mov r12, r0 - lsls r5, 4 - mov r8, r5 -_080021DE: - mov r2, r10 - mov r1, r9 - adds r0, r2, r1 - adds r7, r3, 0x1 - cmp r2, r0 - bge _0800220C - ldr r6, _08002224 @ =gUnknown_30008EC - add r6, r8 - ldr r1, [sp] - adds r5, r3, 0 - muls r5, r1 - adds r3, r0, 0 -_080021F6: - ldr r1, [r6] - adds r0, r5, r2 - adds r1, r0 - ldrb r0, [r4] - strb r0, [r1] - adds r4, 0x1 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r3 - blt _080021F6 -_0800220C: - lsls r0, r7, 16 - lsrs r3, r0, 16 - cmp r3, r12 - blt _080021DE -_08002214: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08002224: .4byte gUnknown_30008EC - thumb_func_end CopyToBgTilemapBufferRect - - thumb_func_start CopyToBgTilemapBufferRect_ChangePalette -CopyToBgTilemapBufferRect_ChangePalette: @ 8002228 - push {r4-r6,lr} - sub sp, 0x24 - ldr r4, [sp, 0x34] - ldr r5, [sp, 0x38] - ldr r6, [sp, 0x3C] - lsls r0, 24 - lsrs r0, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - str r4, [sp] - str r5, [sp, 0x4] - str r2, [sp, 0x8] - str r3, [sp, 0xC] - str r4, [sp, 0x10] - str r5, [sp, 0x14] - str r6, [sp, 0x18] - movs r2, 0 - str r2, [sp, 0x1C] - str r2, [sp, 0x20] - movs r3, 0 - bl CopyRectToBgTilemapBufferRect - add sp, 0x24 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end CopyToBgTilemapBufferRect_ChangePalette - - thumb_func_start CopyRectToBgTilemapBufferRect -CopyRectToBgTilemapBufferRect: @ 800226C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x40 - str r1, [sp, 0x8] - ldr r1, [sp, 0x60] - ldr r4, [sp, 0x68] - ldr r5, [sp, 0x6C] - ldr r6, [sp, 0x70] - ldr r7, [sp, 0x74] - mov r8, r7 - ldr r7, [sp, 0x78] - mov r9, r7 - ldr r7, [sp, 0x7C] - mov r10, r7 - ldr r7, [sp, 0x80] - mov r12, r7 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0xC] - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0x10] - lsls r1, 24 - lsrs r7, r1, 24 - lsls r4, 24 - lsrs r4, 24 - str r4, [sp, 0x14] - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - str r6, [sp, 0x18] - mov r0, r8 - lsls r0, 24 - lsrs r4, r0, 24 - mov r1, r9 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp, 0x1C] - mov r2, r10 - lsls r2, 16 - lsrs r2, 16 - str r2, [sp, 0x20] - mov r0, r12 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x24] - ldr r0, [sp, 0x4] - bl IsInvalidBg32 - cmp r0, 0 - beq _080022E2 - b _0800243E -_080022E2: - ldr r0, [sp, 0x4] - bl IsTileMapOutsideWram - cmp r0, 0 - beq _080022EE - b _0800243E -_080022EE: - ldr r0, [sp, 0x4] - movs r1, 0x4 - bl GetBgControlAttribute - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x30] - ldr r0, [sp, 0x4] - movs r1, 0x1 - bl GetBgMetricTextMode - lsls r0, 21 - lsrs r0, 16 - str r0, [sp, 0x28] - ldr r0, [sp, 0x4] - movs r1, 0x2 - bl GetBgMetricTextMode - lsls r0, 21 - lsrs r0, 16 - str r0, [sp, 0x2C] - ldr r0, [sp, 0x4] - bl GetBgType - cmp r0, 0 - beq _08002328 - cmp r0, 0x1 - beq _080023C4 - b _0800243E -_08002328: - ldr r1, [sp, 0x10] - adds r0, r1, 0 - muls r0, r7 - ldr r2, [sp, 0xC] - adds r0, r2 - lsls r0, 1 - ldr r1, [sp, 0x8] - adds r6, r1, r0 - adds r0, r5, r4 - cmp r5, r0 - blt _08002340 - b _0800243E -_08002340: - ldr r2, [sp, 0x18] - subs r2, r7, r2 - str r2, [sp, 0x34] - str r0, [sp, 0x38] -_08002348: - ldr r4, [sp, 0x14] - ldr r7, [sp, 0x18] - adds r0, r4, r7 - adds r1, r5, 0x1 - str r1, [sp, 0x3C] - cmp r4, r0 - bge _080023AA - ldr r2, [sp, 0x4] - lsls r0, r2, 4 - ldr r1, _080023C0 @ =gUnknown_30008EC - adds r0, r1 - mov r10, r0 - ldr r7, [sp, 0x20] - lsls r7, 16 - mov r9, r7 - ldr r1, [sp, 0x24] - lsls r0, r1, 16 - asrs r0, 16 - mov r8, r0 -_0800236E: - ldr r2, [sp, 0x2C] - str r2, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - ldr r2, [sp, 0x30] - ldr r3, [sp, 0x28] - bl GetTileMapIndexFromCoords - lsls r0, 16 - lsrs r0, 15 - mov r7, r10 - ldr r1, [r7] - adds r1, r0 - mov r0, r8 - str r0, [sp] - adds r0, r6, 0 - ldr r2, [sp, 0x1C] - mov r7, r9 - asrs r3, r7, 16 - bl CopyTileMapEntry - adds r6, 0x2 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r1, [sp, 0x14] - ldr r2, [sp, 0x18] - adds r0, r1, r2 - cmp r4, r0 - blt _0800236E -_080023AA: - ldr r5, [sp, 0x34] - lsls r0, r5, 1 - adds r6, r0 - ldr r7, [sp, 0x3C] - lsls r0, r7, 16 - lsrs r5, r0, 16 - ldr r0, [sp, 0x38] - cmp r5, r0 - blt _08002348 - b _0800243E - .align 2, 0 -_080023C0: .4byte gUnknown_30008EC -_080023C4: - ldr r1, [sp, 0x10] - adds r0, r1, 0 - muls r0, r7 - ldr r2, [sp, 0xC] - adds r0, r2 - ldr r1, [sp, 0x8] - adds r6, r1, r0 - ldr r0, [sp, 0x4] - movs r1, 0x1 - bl GetBgMetricAffineMode - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - adds r0, r5, r4 - cmp r5, r0 - bge _0800243E - ldr r2, [sp, 0x18] - subs r2, r7, r2 - str r2, [sp, 0x34] - str r0, [sp, 0x38] - ldr r7, _08002450 @ =gUnknown_30008EC - mov r10, r7 - ldr r0, [sp, 0x4] - lsls r0, 4 - mov r8, r0 -_080023F8: - ldr r4, [sp, 0x14] - ldr r1, [sp, 0x18] - adds r0, r4, r1 - adds r2, r5, 0x1 - str r2, [sp, 0x3C] - cmp r4, r0 - bge _0800242E - mov r3, r8 - add r3, r10 - mov r7, r9 - muls r7, r5 - mov r12, r7 - adds r2, r0, 0 -_08002412: - ldr r1, [r3] - mov r5, r12 - adds r0, r5, r4 - adds r1, r0 - ldrb r0, [r6] - ldr r7, [sp, 0x20] - adds r0, r7 - strb r0, [r1] - adds r6, 0x1 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r2 - blt _08002412 -_0800242E: - ldr r0, [sp, 0x34] - adds r6, r0 - ldr r1, [sp, 0x3C] - lsls r0, r1, 16 - lsrs r5, r0, 16 - ldr r2, [sp, 0x38] - cmp r5, r2 - blt _080023F8 -_0800243E: - add sp, 0x40 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08002450: .4byte gUnknown_30008EC - thumb_func_end CopyRectToBgTilemapBufferRect - - thumb_func_start FillBgTilemapBufferRect_Palette0 -FillBgTilemapBufferRect_Palette0: @ 8002454 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r4, [sp, 0x24] - ldr r5, [sp, 0x28] - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r4, 24 - lsrs r4, 24 - mov r9, r4 - lsls r5, 24 - lsrs r5, 24 - adds r0, r6, 0 - bl IsInvalidBg32 - cmp r0, 0 - bne _08002540 - adds r0, r6, 0 - bl IsTileMapOutsideWram - cmp r0, 0 - bne _08002540 - adds r0, r6, 0 - bl GetBgType - cmp r0, 0 - beq _080024A6 - cmp r0, 0x1 - beq _080024F0 - b _08002540 -_080024A6: - adds r3, r7, 0 - adds r5, r3, r5 - cmp r3, r5 - bge _08002540 - adds r7, r5, 0 - lsls r1, r6, 4 - ldr r0, _080024EC @ =gUnknown_30008EC - adds r1, r0 - mov r12, r1 -_080024B8: - mov r2, r10 - mov r1, r9 - adds r0, r2, r1 - adds r6, r3, 0x1 - cmp r2, r0 - bge _080024E0 - mov r5, r12 - ldr r4, [r5] - lsls r3, 5 - adds r1, r0, 0 -_080024CC: - adds r0, r3, r2 - lsls r0, 1 - adds r0, r4 - mov r5, r8 - strh r5, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r1 - blt _080024CC -_080024E0: - lsls r0, r6, 16 - lsrs r3, r0, 16 - cmp r3, r7 - blt _080024B8 - b _08002540 - .align 2, 0 -_080024EC: .4byte gUnknown_30008EC -_080024F0: - adds r0, r6, 0 - movs r1, 0x1 - bl GetBgMetricAffineMode - lsls r0, 16 - lsrs r0, 16 - str r0, [sp] - adds r3, r7, 0 - adds r5, r3, r5 - cmp r3, r5 - bge _08002540 - adds r7, r5, 0 - lsls r6, 4 - mov r12, r6 -_0800250C: - mov r2, r10 - mov r1, r9 - adds r0, r2, r1 - adds r6, r3, 0x1 - cmp r2, r0 - bge _08002538 - ldr r5, _08002550 @ =gUnknown_30008EC - add r5, r12 - ldr r1, [sp] - adds r4, r3, 0 - muls r4, r1 - adds r3, r0, 0 -_08002524: - ldr r0, [r5] - adds r1, r4, r2 - adds r0, r1 - mov r1, r8 - strb r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r3 - blt _08002524 -_08002538: - lsls r0, r6, 16 - lsrs r3, r0, 16 - cmp r3, r7 - blt _0800250C -_08002540: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08002550: .4byte gUnknown_30008EC - thumb_func_end FillBgTilemapBufferRect_Palette0 - - thumb_func_start FillBgTilemapBufferRect -FillBgTilemapBufferRect: @ 8002554 - push {r4-r6,lr} - sub sp, 0x10 - ldr r4, [sp, 0x20] - ldr r5, [sp, 0x24] - ldr r6, [sp, 0x28] - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - str r4, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r4, 0 - str r4, [sp, 0xC] - bl WriteSequenceToBgTilemapBuffer - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end FillBgTilemapBufferRect - - thumb_func_start WriteSequenceToBgTilemapBuffer -WriteSequenceToBgTilemapBuffer: @ 8002590 - 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] - ldr r7, [sp, 0x58] - mov r8, r7 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - add r0, sp, 0x4 - strh r1, [r0] - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x8] - lsls r3, 24 - lsrs r7, r3, 24 - lsls r4, 24 - lsrs r4, 24 - mov r10, r4 - lsls r5, 24 - lsrs r4, r5, 24 - lsls r6, 24 - lsrs r6, 24 - str r6, [sp, 0xC] - mov r0, r8 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x10] - mov r0, r9 - bl IsInvalidBg32 - cmp r0, 0 - beq _080025DE - b _08002724 -_080025DE: - mov r0, r9 - bl IsTileMapOutsideWram - cmp r0, 0 - beq _080025EA - b _08002724 -_080025EA: - mov r0, r9 - movs r1, 0x4 - bl GetBgControlAttribute - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x1C] - mov r0, r9 - movs r1, 0x1 - bl GetBgMetricTextMode - lsls r0, 21 - lsrs r0, 16 - str r0, [sp, 0x14] - mov r0, r9 - movs r1, 0x2 - bl GetBgMetricTextMode - lsls r0, 21 - lsrs r0, 16 - str r0, [sp, 0x18] - mov r0, r9 - bl GetBgType - cmp r0, 0 - beq _08002624 - cmp r0, 0x1 - beq _080026AC - b _08002724 -_08002624: - adds r5, r7, 0 - adds r0, r5, r4 - cmp r5, r0 - bge _08002724 - str r0, [sp, 0x24] - add r7, sp, 0x4 -_08002630: - ldr r4, [sp, 0x8] - mov r1, r10 - adds r0, r4, r1 - adds r2, r5, 0x1 - mov r8, r2 - cmp r4, r0 - bge _08002694 - mov r3, r9 - lsls r1, r3, 4 - ldr r0, _080026A4 @ =gUnknown_30008EC - adds r6, r1, r0 -_08002646: - ldr r0, [sp, 0x18] - str r0, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - ldr r2, [sp, 0x1C] - ldr r3, [sp, 0x14] - bl GetTileMapIndexFromCoords - lsls r0, 16 - lsrs r0, 15 - ldr r1, [r6] - adds r1, r0 - movs r0, 0 - str r0, [sp] - add r0, sp, 0x4 - ldr r2, [sp, 0xC] - movs r3, 0 - bl CopyTileMapEntry - ldrh r0, [r7] - movs r2, 0xFC - lsls r2, 8 - adds r1, r2, 0 - adds r2, r0, 0 - ands r2, r1 - ldr r3, [sp, 0x10] - adds r0, r3 - ldr r3, _080026A8 @ =0x000003ff - adds r1, r3, 0 - ands r0, r1 - adds r2, r0 - strh r2, [r7] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, [sp, 0x8] - add r0, r10 - cmp r4, r0 - blt _08002646 -_08002694: - mov r1, r8 - lsls r0, r1, 16 - lsrs r5, r0, 16 - ldr r2, [sp, 0x24] - cmp r5, r2 - blt _08002630 - b _08002724 - .align 2, 0 -_080026A4: .4byte gUnknown_30008EC -_080026A8: .4byte 0x000003ff -_080026AC: - mov r0, r9 - movs r1, 0x1 - bl GetBgMetricAffineMode - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x20] - adds r5, r7, 0 - adds r0, r5, r4 - cmp r5, r0 - bge _08002724 - str r0, [sp, 0x24] - mov r3, r9 - lsls r3, 4 - mov r12, r3 -_080026CA: - ldr r4, [sp, 0x8] - mov r7, r10 - adds r0, r4, r7 - adds r1, r5, 0x1 - mov r8, r1 - cmp r4, r0 - bge _08002718 - ldr r2, _08002734 @ =gUnknown_30008EC - add r2, r12 - str r2, [sp, 0x28] - ldr r7, [sp, 0x20] - adds r3, r5, 0 - muls r3, r7 - add r2, sp, 0x4 - movs r1, 0xFC - lsls r1, 8 - mov r9, r1 - ldr r7, _08002738 @ =0x000003ff - adds r5, r7, 0 - adds r6, r0, 0 -_080026F2: - ldr r0, [sp, 0x28] - ldr r1, [r0] - adds r0, r3, r4 - adds r1, r0 - ldrh r0, [r2] - strb r0, [r1] - ldrh r0, [r2] - mov r1, r9 - ands r1, r0 - ldr r7, [sp, 0x10] - adds r0, r7 - ands r0, r5 - adds r1, r0 - strh r1, [r2] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r6 - blt _080026F2 -_08002718: - mov r1, r8 - lsls r0, r1, 16 - lsrs r5, r0, 16 - ldr r2, [sp, 0x24] - cmp r5, r2 - blt _080026CA -_08002724: - 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 -_08002734: .4byte gUnknown_30008EC -_08002738: .4byte 0x000003ff - thumb_func_end WriteSequenceToBgTilemapBuffer - - thumb_func_start GetBgMetricTextMode -GetBgMetricTextMode: @ 800273C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - adds r5, r4, 0 - movs r1, 0x4 - bl GetBgControlAttribute - lsls r0, 24 - lsrs r0, 24 - cmp r4, 0x1 - beq _0800277C - cmp r4, 0x1 - bgt _08002760 - cmp r4, 0 - beq _08002766 - b _080027A2 -_08002760: - cmp r5, 0x2 - beq _0800278E - b _080027A2 -_08002766: - cmp r0, 0x2 - bgt _08002774 - cmp r0, 0x1 - bge _0800279E -_0800276E: - cmp r0, 0 - beq _08002796 - b _080027A2 -_08002774: - cmp r0, 0x3 - bne _080027A2 - movs r0, 0x4 - b _080027A4 -_0800277C: - cmp r0, 0x1 - beq _0800279E - cmp r0, 0x1 - ble _0800276E - cmp r0, 0x2 - beq _08002796 - cmp r0, 0x3 - bne _080027A2 - b _0800279E -_0800278E: - cmp r0, 0 - blt _080027A2 - cmp r0, 0x1 - bgt _0800279A -_08002796: - movs r0, 0x1 - b _080027A4 -_0800279A: - cmp r0, 0x3 - bgt _080027A2 -_0800279E: - movs r0, 0x2 - b _080027A4 -_080027A2: - movs r0, 0 -_080027A4: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end GetBgMetricTextMode - - thumb_func_start GetBgMetricAffineMode -GetBgMetricAffineMode: @ 80027AC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - movs r1, 0x4 - bl GetBgControlAttribute - lsls r0, 24 - lsrs r1, r0, 24 - adds r0, r1, 0 - cmp r4, 0 - beq _080027D4 - cmp r4, 0 - blt _080027FC - cmp r4, 0x2 - bgt _080027FC - movs r0, 0x10 - lsls r0, r1 - b _080027FE -_080027D4: - cmp r1, 0x1 - beq _080027F0 - cmp r1, 0x1 - bgt _080027E2 - cmp r1, 0 - beq _080027EC - b _080027FC -_080027E2: - cmp r0, 0x2 - beq _080027F4 - cmp r0, 0x3 - beq _080027F8 - b _080027FC -_080027EC: - movs r0, 0x1 - b _080027FE -_080027F0: - movs r0, 0x4 - b _080027FE -_080027F4: - movs r0, 0x10 - b _080027FE -_080027F8: - movs r0, 0x40 - b _080027FE -_080027FC: - movs r0, 0 -_080027FE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetBgMetricAffineMode - - thumb_func_start GetTileMapIndexFromCoords -GetTileMapIndexFromCoords: @ 8002804 - push {r4,lr} - adds r4, r0, 0 - ldr r0, [sp, 0x8] - subs r3, 0x1 - ands r4, r3 - subs r0, 0x1 - ands r1, r0 - cmp r2, 0x1 - beq _08002828 - cmp r2, 0x1 - ble _08002830 - cmp r2, 0x2 - beq _08002830 - cmp r2, 0x3 - bne _08002830 - cmp r1, 0x1F - ble _08002828 - adds r1, 0x20 -_08002828: - cmp r4, 0x1F - ble _08002830 - subs r4, 0x20 - adds r1, 0x20 -_08002830: - lsls r0, r1, 5 - adds r0, r4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetTileMapIndexFromCoords - - thumb_func_start CopyTileMapEntry -CopyTileMapEntry: @ 800283C - push {r4-r6,lr} - adds r4, r0, 0 - adds r6, r1, 0 - ldr r5, [sp, 0x10] - cmp r2, 0x10 - beq _08002864 - cmp r2, 0x10 - bgt _08002884 - cmp r2, 0 - blt _08002884 - ldrh r0, [r4] - adds r0, r3 - ldr r3, _08002860 @ =0x00000fff - adds r1, r3, 0 - ands r0, r1 - adds r1, r2, r5 - lsls r1, 12 - b _0800288A - .align 2, 0 -_08002860: .4byte 0x00000fff -_08002864: - ldrh r1, [r6] - movs r0, 0xFC - lsls r0, 8 - ands r1, r0 - lsls r2, r5, 12 - adds r2, r1, r2 - ldrh r0, [r4] - adds r0, r3 - ldr r3, _08002880 @ =0x000003ff - adds r1, r3, 0 - ands r0, r1 - orrs r0, r2 - b _0800288C - .align 2, 0 -_08002880: .4byte 0x000003ff -_08002884: - ldrh r0, [r4] - adds r0, r3 - lsls r1, r5, 12 -_0800288A: - adds r0, r1 -_0800288C: - lsls r0, 16 - lsrs r1, r0, 16 - strh r1, [r6] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end CopyTileMapEntry - - thumb_func_start GetBgType -GetBgType: @ 8002898 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - bl GetBgMode - lsls r0, 24 - lsrs r0, 24 - cmp r4, 0x2 - beq _080028C6 - cmp r4, 0x2 - ble _080028B6 - cmp r4, 0x3 - beq _080028D6 - b _080028DE -_080028B6: - cmp r5, 0 - blt _080028DE - cmp r0, 0x1 - bgt _080028DE - cmp r0, 0 - blt _080028DE -_080028C2: - movs r0, 0 - b _080028E0 -_080028C6: - cmp r0, 0 - beq _080028C2 - cmp r0, 0 - blt _080028DE - cmp r0, 0x2 - bgt _080028DE -_080028D2: - movs r0, 0x1 - b _080028E0 -_080028D6: - cmp r0, 0 - beq _080028C2 - cmp r0, 0x2 - beq _080028D2 -_080028DE: - ldr r0, _080028E8 @ =0x0000ffff -_080028E0: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080028E8: .4byte 0x0000ffff - thumb_func_end GetBgType - - thumb_func_start IsInvalidBg32 -IsInvalidBg32: @ 80028EC - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bhi _080028FA - movs r0, 0 - b _080028FC -_080028FA: - movs r0, 0x1 -_080028FC: - pop {r1} - bx r1 - thumb_func_end IsInvalidBg32 - - thumb_func_start IsTileMapOutsideWram -IsTileMapOutsideWram: @ 8002900 - push {lr} - lsls r0, 24 - ldr r1, _0800291C @ =gUnknown_30008E8 - lsrs r0, 20 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r0] - ldr r0, _08002920 @ =0x03008000 - cmp r1, r0 - bhi _08002924 - cmp r1, 0 - beq _08002924 - movs r0, 0 - b _08002926 - .align 2, 0 -_0800291C: .4byte gUnknown_30008E8 -_08002920: .4byte 0x03008000 -_08002924: - movs r0, 0x1 -_08002926: - pop {r1} - bx r1 - thumb_func_end IsTileMapOutsideWram - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/clear_save_data_screen.s b/asm/clear_save_data_screen.s index 33e7e386b..132d88a25 100644 --- a/asm/clear_save_data_screen.s +++ b/asm/clear_save_data_screen.s @@ -407,11 +407,11 @@ _080F5846: movs r1, 0 bl SetGpuReg movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080F5944 @ =gUnknown_841EE64 movs r0, 0 movs r2, 0x1 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/credits.s b/asm/credits.s index 5a7cbd9c0..a2c55239a 100644 --- a/asm/credits.s +++ b/asm/credits.s @@ -1225,11 +1225,11 @@ _080F4374: bl ResetSpriteData bl ResetTasks movs r0, 0x1 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080F44A8 @ =gUnknown_840C5A4 movs r0, 0x1 movs r2, 0x3 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0x80 lsls r0, 4 bl Alloc @@ -1594,11 +1594,11 @@ _080F46A0: bl ResetSpriteData bl ResetTasks movs r0, 0x1 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080F4778 @ =gUnknown_840C5A4 movs r0, 0 movs r2, 0x1 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/diploma.s b/asm/diploma.s index 3994b228d..f2dfa0785 100644 --- a/asm/diploma.s +++ b/asm/diploma.s @@ -357,11 +357,11 @@ _080F4E66: movs r1, 0 bl SetGpuReg movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080F4F90 @ =gUnknown_8415A08 movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s index 94e977b3a..f39bc39de 100644 --- a/asm/egg_hatch.s +++ b/asm/egg_hatch.s @@ -579,11 +579,11 @@ _08047090: strh r0, [r1] bl reset_temp_tile_data_buffers movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08047158 @ =gUnknown_826019C movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0x1 movs r1, 0 movs r2, 0 diff --git a/asm/fame_checker.s b/asm/fame_checker.s index e3559bcc1..68e2e1c49 100644 --- a/asm/fame_checker.s +++ b/asm/fame_checker.s @@ -122,11 +122,11 @@ _0812C456: bl AllocZeroed str r0, [r5] movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0812C4BC @ =gUnknown_845FBF4 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, [r6] movs r0, 0x3 bl SetBgTilemapBuffer diff --git a/asm/hall_of_fame.s b/asm/hall_of_fame.s index fc58fc678..0a9fbf98a 100644 --- a/asm/hall_of_fame.s +++ b/asm/hall_of_fame.s @@ -1407,7 +1407,7 @@ _080F28B6: movs r0, 0x3 bl UnsetBgTilemapBuffer movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags adds r0, r6, 0 bl DestroyTask ldr r4, _080F292C @ =gUnknown_203AB3C @@ -2305,7 +2305,7 @@ sub_80F3030: @ 80F3030 movs r0, 0x3 bl UnsetBgTilemapBuffer movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags adds r0, r5, 0 bl DestroyTask ldr r5, _080F309C @ =gUnknown_203AB3C @@ -3095,11 +3095,11 @@ _080F36F4: .4byte gUnknown_840C258 sub_80F36F8: @ 80F36F8 push {r4,lr} movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080F3764 @ =gUnknown_840C228 movs r0, 0 movs r2, 0x3 - bl sub_8001658 + bl InitBgsFromTemplates ldr r4, _080F3768 @ =gUnknown_203AB3C ldr r1, [r4] adds r1, 0x6 diff --git a/asm/hof_pc.s b/asm/hof_pc.s index 554db8992..48085bbd8 100644 --- a/asm/hof_pc.s +++ b/asm/hof_pc.s @@ -18,7 +18,7 @@ sub_80CA53C: @ 80CA53C bne _080CA564 bl FreeAllWindowBuffers movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags adds r0, r4, 0 bl DestroyTask ldr r0, _080CA570 @ =sub_80F2978 diff --git a/asm/intro.s b/asm/intro.s index 11e6128f0..cc3f1559d 100644 --- a/asm/intro.s +++ b/asm/intro.s @@ -420,11 +420,11 @@ _080EC8A0: movs r1, 0 bl FillPalette movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080EC940 @ =gUnknown_840BB80 movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates b _080EC9B8 .align 2, 0 _080EC928: .4byte gMain @@ -1137,7 +1137,7 @@ _080ECED8: ldr r1, _080ECF54 @ =gUnknown_840BB88 movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, _080ECF58 @ =gUnknown_84048EC movs r0, 0 str r0, [sp] @@ -1469,7 +1469,7 @@ _080ED1C4: ldr r1, _080ED208 @ =gUnknown_840BB90 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, _080ED20C @ =gUnknown_8405414 movs r0, 0 str r0, [sp] @@ -1841,7 +1841,7 @@ _080ED4E4: ldr r1, _080ED590 @ =gUnknown_840BBA0 movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, _080ED594 @ =gUnknown_8407470 str r4, [sp] movs r0, 0x1 diff --git a/asm/item_menu.s b/asm/item_menu.s index 241805a06..ce700b255 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -533,11 +533,11 @@ sub_81081D0: @ 81081D0 adds r2, r4, 0 bl memset movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08108234 @ =gUnknown_8452CF4 movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, [r5] movs r0, 0x1 bl SetBgTilemapBuffer diff --git a/asm/item_pc.s b/asm/item_pc.s index e0c626933..3d02d0d69 100644 --- a/asm/item_pc.s +++ b/asm/item_pc.s @@ -402,11 +402,11 @@ sub_810D71C: @ 810D71C adds r2, r4, 0 bl memset movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0810D780 @ =gUnknown_8453F6C movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, [r5] movs r0, 0x1 bl SetBgTilemapBuffer diff --git a/asm/learn_move.s b/asm/learn_move.s index 9f2629f6b..d726b3bf0 100644 --- a/asm/learn_move.s +++ b/asm/learn_move.s @@ -71,11 +71,11 @@ sub_80E469C: @ 80E469C push {r4,r5,lr} sub sp, 0xC movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080E4774 @ =gUnknown_83FFA3C movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates bl reset_temp_tile_data_buffers ldr r0, _080E4778 @ =gUnknown_83FFA44 bl InitWindows diff --git a/asm/link.s b/asm/link.s index 9d975387d..0dd52991a 100644 --- a/asm/link.s +++ b/asm/link.s @@ -3269,11 +3269,11 @@ _0800AD30: ldr r0, _0800ADF8 @ =sub_800978C bl SetVBlankCallback movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0800ADFC @ =gUnknown_82345E8 movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates ldr r4, _0800AE00 @ =gUnknown_2022860 movs r0, 0x80 lsls r0, 4 diff --git a/asm/link_rfu.s b/asm/link_rfu.s index 3bb3ca1bd..0cf9e7529 100644 --- a/asm/link_rfu.s +++ b/asm/link_rfu.s @@ -6036,11 +6036,11 @@ _080FFFBC: .4byte _081000B8 _080FFFD4: movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08100028 @ =gUnknown_843F8A0 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r4, _0810002C @ =gUnknown_203ACEC ldr r1, [r4] movs r0, 0xB0 diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index d194ed0dd..05e84a1cb 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -12930,11 +12930,11 @@ _0811C2C0: bl FreeAllSpritePalettes bl ResetTasks movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0811C354 @ =gUnknown_8457194 movs r0, 0 movs r2, 0x1 - bl sub_8001658 + bl InitBgsFromTemplates bl reset_temp_tile_data_buffers ldr r0, _0811C358 @ =gUnknown_8457198 bl InitWindows diff --git a/asm/mail.s b/asm/mail.s index 34fb68748..e00947a9b 100644 --- a/asm/mail.s +++ b/asm/mail.s @@ -274,11 +274,11 @@ _080BEDE6: b _080BF0F4 _080BEE40: movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080BEE6C @ =gUnknown_83EE998 movs r0, 0 movs r2, 0x3 - bl sub_8001658 + bl InitBgsFromTemplates ldr r4, _080BEE70 @ =gUnknown_20399C4 ldr r1, [r4] adds r1, 0xFC diff --git a/asm/main_menu.s b/asm/main_menu.s index 32563db7e..cd3a008f9 100644 --- a/asm/main_menu.s +++ b/asm/main_menu.s @@ -119,11 +119,11 @@ sub_800C318: @ 800C318 bl FreeAllSpritePalettes bl ResetPaletteFade movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0800C4B4 @ =gUnknown_8234690 movs r0, 0 movs r2, 0x1 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/map_preview_screen.s b/asm/map_preview_screen.s index 3b493fb66..345118304 100644 --- a/asm/map_preview_screen.s +++ b/asm/map_preview_screen.s @@ -103,7 +103,7 @@ sub_80F8180: @ 80F8180 ldr r1, _080F8198 @ =gUnknown_843EBB0 movs r0, 0 movs r2, 0x1 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 bl ShowBg pop {r0} diff --git a/asm/mystery_gift_menu.s b/asm/mystery_gift_menu.s index bfeea8b5a..34b6ed87d 100644 --- a/asm/mystery_gift_menu.s +++ b/asm/mystery_gift_menu.s @@ -66,11 +66,11 @@ _081420D6: bl ResetTasks bl remove_some_task movs r0, 0x1 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _081421E0 @ =gUnknown_8466D60 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/naming_screen.s b/asm/naming_screen.s index 2457798b4..60c81ba86 100644 --- a/asm/naming_screen.s +++ b/asm/naming_screen.s @@ -364,11 +364,11 @@ _0809DBD6: movs r1, 0 bl SetGpuReg movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0809DD4C @ =gUnknown_83E2290 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/oak_speech.s b/asm/oak_speech.s index 97726705d..ef204e879 100644 --- a/asm/oak_speech.s +++ b/asm/oak_speech.s @@ -416,11 +416,11 @@ _0812EC44: b _0812EE94 _0812EC8E: movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0812ECF0 @ =gUnknown_8462E58 movs r0, 0x1 movs r2, 0x3 - bl sub_8001658 + bl InitBgsFromTemplates ldr r4, _0812ECF4 @ =gUnknown_203B108 ldr r1, [r4] movs r0, 0xE1 @@ -4391,11 +4391,11 @@ _08130D10: .4byte 0x05000002 _08130D14: .4byte 0x810001ff _08130D18: movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08130D70 @ =gUnknown_8462E58 movs r0, 0x1 movs r2, 0x3 - bl sub_8001658 + bl InitBgsFromTemplates ldr r4, _08130D74 @ =gUnknown_203B108 ldr r1, [r4] movs r0, 0xE1 diff --git a/asm/option_menu.s b/asm/option_menu.s index 34768ce92..df5d187bc 100644 --- a/asm/option_menu.s +++ b/asm/option_menu.s @@ -309,11 +309,11 @@ _08088556: movs r1, 0 bl SetGpuReg movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08088678 @ =gUnknown_83CC2D8 movs r0, 0 movs r2, 0x3 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/overworld.s b/asm/overworld.s index 02b5e746f..f9422d297 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -3074,11 +3074,11 @@ sub_80562B0: @ 80562B0 bl MoveSaveBlocks_ResetHeap_ bl sub_8056E80 movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08056344 @ =gUnknown_826D320 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0x1 movs r1, 0x5 movs r2, 0x1 @@ -3138,11 +3138,11 @@ sub_8056354: @ 8056354 mov r6, r8 push {r6} movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080563E0 @ =gUnknown_826D320 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0x1 movs r1, 0x5 movs r2, 0x1 diff --git a/asm/party_menu.s b/asm/party_menu.s index 7ca4b3aa1..6bef97b0c 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -578,11 +578,11 @@ sub_811EECC: @ 811EECC adds r2, r4, 0 bl memset movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0811EF38 @ =gUnknown_8459EB8 movs r0, 0 movs r2, 0x3 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, [r5] movs r0, 0x1 bl SetBgTilemapBuffer diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s index d8114ea2b..77376e270 100644 --- a/asm/pokedex_screen.s +++ b/asm/pokedex_screen.s @@ -60,11 +60,11 @@ sub_810250C: @ 810250C bl ResetTasks bl remove_some_task movs r0, 0x1 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08102598 @ =gUnknown_8451EBC movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r4, 0x80 lsls r4, 4 adds r0, r4, 0 diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s index b1aaa452e..ad42d068b 100644 --- a/asm/pokemon_special_anim.s +++ b/asm/pokemon_special_anim.s @@ -1563,11 +1563,11 @@ sub_811D184: @ 811D184 movs r1, 0 bl SetGpuReg movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0811D270 @ =gUnknown_8459980 movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates ldr r0, _0811D274 @ =gUnknown_8459988 bl InitWindows movs r0, 0 diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 7eb81d847..7bc405b91 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -6717,7 +6717,7 @@ sub_808EFE4: @ 808EFE4 ldr r1, _0808F030 @ =gUnknown_83CEA50 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, _0808F034 @ =gUnknown_8E9C438 movs r0, 0 str r0, [sp] diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index f6e8dc3ad..28244b569 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -4645,11 +4645,11 @@ _08136BEA: movs r1, 0 bl SetGpuReg movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08136D40 @ =gUnknown_8463EFC movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/region_map.s b/asm/region_map.s index 4567e2bf7..fba9869de 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -1392,11 +1392,11 @@ _080C092A: movs r1, 0 bl SetGpuReg movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080C0A20 @ =gUnknown_83F1A50 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/seagallop.s b/asm/seagallop.s index 9e189c02e..ea7bd3536 100644 --- a/asm/seagallop.s +++ b/asm/seagallop.s @@ -65,11 +65,11 @@ _08146EEE: bl AllocZeroed str r0, [r4] movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08146F1C @ =gUnknown_846AEF8 movs r0, 0 movs r2, 0x1 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, [r4] movs r0, 0x3 bl SetBgTilemapBuffer diff --git a/asm/shop.s b/asm/shop.s index a99066578..a9e4ba047 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -644,11 +644,11 @@ _0809AFCA: sub_809AFD0: @ 809AFD0 push {lr} movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0809B070 @ =gUnknown_83DF0C4 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r0, _0809B074 @ =gUnknown_2039958 ldr r1, [r0] movs r0, 0x1 diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 105e2850f..489ddeee4 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -3474,11 +3474,11 @@ _081411D0: bl SetGpuReg bl sub_80F6C14 movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _081413A0 @ =gUnknown_8466B10 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r0, _081413A4 @ =gUnknown_8466B20 bl InitWindows ldr r1, _081413A8 @ =0x0000205c diff --git a/asm/start_menu.s b/asm/start_menu.s index 081f0eebf..fc3dea0a9 100644 --- a/asm/start_menu.s +++ b/asm/start_menu.s @@ -1771,11 +1771,11 @@ _0806FB00: b _0806FB64 _0806FB12: movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0806FB34 @ =gUnknown_83A73B8 movs r0, 0 movs r2, 0x1 - bl sub_8001658 + bl InitBgsFromTemplates ldr r0, _0806FB38 @ =gUnknown_83A73BC bl InitWindows movs r0, 0 diff --git a/asm/teachy_tv.s b/asm/teachy_tv.s index 9f250560e..9a6f9c115 100644 --- a/asm/teachy_tv.s +++ b/asm/teachy_tv.s @@ -239,11 +239,11 @@ sub_815AD88: @ 815AD88 push {r4,lr} bl sub_80BF7C8 movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0815AE20 @ =gUnknown_84792E0 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r4, _0815AE24 @ =gUnknown_203F450 ldr r1, [r4] adds r1, 0x4 diff --git a/asm/title_screen.s b/asm/title_screen.s index 0151bcba6..4dc0c43da 100644 --- a/asm/title_screen.s +++ b/asm/title_screen.s @@ -79,11 +79,11 @@ _08078946: str r0, [r1, 0x8] ldr r0, [r1, 0x8] movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080789E8 @ =gUnknown_83BFB74 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r1, 0x82 lsls r1, 5 movs r0, 0 diff --git a/asm/tm_case.s b/asm/tm_case.s index e727ee878..bf9163797 100644 --- a/asm/tm_case.s +++ b/asm/tm_case.s @@ -342,11 +342,11 @@ sub_8131AB8: @ 8131AB8 bl AllocZeroed str r0, [r4] movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08131B1C @ =gUnknown_8463134 movs r0, 0 movs r2, 0x3 - bl sub_8001658 + bl InitBgsFromTemplates ldr r1, [r4] movs r0, 0x2 bl SetBgTilemapBuffer diff --git a/asm/trade.s b/asm/trade.s index 6ebaf9948..406bbc88f 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -30,11 +30,11 @@ sub_804C600: @ 804C600 movs r2, 0x14 bl LoadPalette movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0804C704 @ =gUnknown_8261F1C movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r0, _0804C708 @ =gUnknown_2031DA8 ldr r1, [r0] movs r0, 0x8F @@ -7810,11 +7810,11 @@ sub_80504CC: @ 80504CC movs r1, 0 bl SetGpuReg movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _080505B4 @ =gUnknown_826D1D4 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/trainer_card.s b/asm/trainer_card.s index 2cc358510..b60bba1a5 100644 --- a/asm/trainer_card.s +++ b/asm/trainer_card.s @@ -1594,11 +1594,11 @@ sub_8089D0C: @ 8089D0C bl ResetSpriteData bl ResetPaletteFade movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08089D84 @ =gUnknown_83CD888 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s index a9b2bd82d..f463953c4 100644 --- a/asm/union_room_chat.s +++ b/asm/union_room_chat.s @@ -2992,11 +2992,11 @@ sub_8129B14: @ 8129B14 cmp r0, 0 beq _08129B70 movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08129B68 @ =gUnknown_845AA84 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r0, _08129B6C @ =gUnknown_845AA94 bl InitWindows bl reset_temp_tile_data_buffers diff --git a/asm/unk_8147AA8.s b/asm/unk_8147AA8.s index d0d6d3791..cd77e0c7d 100644 --- a/asm/unk_8147AA8.s +++ b/asm/unk_8147AA8.s @@ -4786,11 +4786,11 @@ _08149DEE: b _08149F5A _08149DF0: movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08149EE8 @ =gUnknown_846D8D4 movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates ldr r0, _08149EEC @ =gUnknown_846D8E4 bl InitWindows bl sub_80F6C14 diff --git a/asm/unk_814D5C8.s b/asm/unk_814D5C8.s index bbde70074..dc4f5ab52 100644 --- a/asm/unk_814D5C8.s +++ b/asm/unk_814D5C8.s @@ -75,11 +75,11 @@ _0814D660: b _0814D878 _0814D66E: movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0814D6F0 @ =gUnknown_846E3CC movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0xE0 lsls r0, 1 adds r1, r5, r0 diff --git a/asm/unk_81507FC.s b/asm/unk_81507FC.s index 381c4a092..a46ac1ef6 100644 --- a/asm/unk_81507FC.s +++ b/asm/unk_81507FC.s @@ -11239,11 +11239,11 @@ _08155EC6: movs r1, 0 bl SetGpuReg movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _08155FD8 @ =gUnknown_847565C movs r0, 0 movs r2, 0x4 - bl sub_8001658 + bl InitBgsFromTemplates movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/window.s b/asm/window.s index aaf823c12..670b96cc0 100644 --- a/asm/window.s +++ b/asm/window.s @@ -69,7 +69,7 @@ _08003B88: movs r2, 0 str r2, [sp, 0x4] _08003B8E: - ldr r0, _08003BC8 @ =gUnknown_3003D8C + ldr r0, _08003BC8 @ =gUnneededFireRedVariable ldr r0, [r0] cmp r0, 0x1 bne _08003BCC @@ -80,7 +80,7 @@ _08003B8E: adds r0, r7, 0 movs r1, 0 movs r3, 0 - bl sub_80014F0 + bl DummiedOutFireRedLeafGreenTileAllocFunc str r0, [sp] movs r0, 0x1 negs r0, r0 @@ -95,7 +95,7 @@ _08003BB8: .4byte gUnknown_3003E40 _08003BBC: .4byte nullsub_6 _08003BC0: .4byte gUnknown_81EA144 _08003BC4: .4byte gUnknown_20204B4 -_08003BC8: .4byte gUnknown_3003D8C +_08003BC8: .4byte gUnneededFireRedVariable _08003BCC: ldr r0, _08003C04 @ =gUnknown_3003E40 mov r9, r0 @@ -184,7 +184,7 @@ _08003C70: ldr r1, [r6, 0x4] str r0, [r2] str r1, [r2, 0x4] - ldr r0, _08003CDC @ =gUnknown_3003D8C + ldr r0, _08003CDC @ =gUnneededFireRedVariable ldr r0, [r0] cmp r0, 0x1 bne _08003CA6 @@ -198,7 +198,7 @@ _08003C70: adds r0, r7, 0 ldr r1, [sp] movs r3, 0x1 - bl sub_80014F0 + bl DummiedOutFireRedLeafGreenTileAllocFunc _08003CA6: adds r6, 0x8 ldr r0, [sp, 0x4] @@ -229,7 +229,7 @@ _08003CC8: bx r1 .align 2, 0 _08003CD8: .4byte gUnknown_20204B4 -_08003CDC: .4byte gUnknown_3003D8C +_08003CDC: .4byte gUnneededFireRedVariable _08003CE0: .4byte gUnknown_3003E30 thumb_func_end InitWindows @@ -267,7 +267,7 @@ _08003D14: ldrb r7, [r0] movs r1, 0 mov r9, r1 - ldr r0, _08003DD8 @ =gUnknown_3003D8C + ldr r0, _08003DD8 @ =gUnneededFireRedVariable ldr r0, [r0] cmp r0, 0x1 bne _08003D46 @@ -279,7 +279,7 @@ _08003D14: adds r0, r7, 0 movs r1, 0 movs r3, 0 - bl sub_80014F0 + bl DummiedOutFireRedLeafGreenTileAllocFunc mov r9, r0 movs r0, 0x1 negs r0, r0 @@ -356,7 +356,7 @@ _08003DCE: b _08003E24 .align 2, 0 _08003DD4: .4byte gUnknown_20204B4 -_08003DD8: .4byte gUnknown_3003D8C +_08003DD8: .4byte gUnneededFireRedVariable _08003DDC: .4byte gUnknown_3003E40 _08003DE0: .4byte 0x0000ffff _08003DE4: .4byte nullsub_6 @@ -375,7 +375,7 @@ _08003DE8: ldr r1, [r3, 0x4] str r0, [r2] str r1, [r2, 0x4] - ldr r0, _08003E38 @ =gUnknown_3003D8C + ldr r0, _08003E38 @ =gUnneededFireRedVariable ldr r0, [r0] cmp r0, 0x1 bne _08003E22 @@ -388,7 +388,7 @@ _08003DE8: adds r0, r7, 0 mov r1, r9 movs r3, 0x1 - bl sub_80014F0 + bl DummiedOutFireRedLeafGreenTileAllocFunc _08003E22: adds r0, r6, 0 _08003E24: @@ -402,7 +402,7 @@ _08003E24: bx r1 .align 2, 0 _08003E34: .4byte gUnknown_20204B4 -_08003E38: .4byte gUnknown_3003D8C +_08003E38: .4byte gUnneededFireRedVariable thumb_func_end AddWindow thumb_func_start RemoveWindow @@ -417,7 +417,7 @@ RemoveWindow: @ 8003E3C adds r4, r0, r1 ldrb r3, [r4] adds r7, r3, 0 - ldr r0, _08003EBC @ =gUnknown_3003D8C + ldr r0, _08003EBC @ =gUnneededFireRedVariable ldr r0, [r0] cmp r0, 0x1 bne _08003E68 @@ -427,7 +427,7 @@ RemoveWindow: @ 8003E3C muls r2, r0 adds r0, r3, 0 movs r3, 0x2 - bl sub_80014F0 + bl DummiedOutFireRedLeafGreenTileAllocFunc _08003E68: ldr r0, _08003EC0 @ =gUnknown_81EA144 ldr r1, [r0, 0x4] @@ -469,7 +469,7 @@ _08003EB0: bx r0 .align 2, 0 _08003EB8: .4byte gUnknown_20204B4 -_08003EBC: .4byte gUnknown_3003D8C +_08003EBC: .4byte gUnneededFireRedVariable _08003EC0: .4byte gUnknown_81EA144 _08003EC4: .4byte gUnknown_3003E40 _08003EC8: .4byte nullsub_6 diff --git a/asm/wireless_communication_status_screen.s b/asm/wireless_communication_status_screen.s index c6b667356..abac81dc1 100644 --- a/asm/wireless_communication_status_screen.s +++ b/asm/wireless_communication_status_screen.s @@ -57,11 +57,11 @@ sub_814F1E4: @ 814F1E4 movs r0, 0 bl SetVBlankCallback movs r0, 0 - bl sub_8001618 + bl ResetBgsAndClearDma3BusyFlags ldr r1, _0814F30C @ =gUnknown_846FA74 movs r0, 0 movs r2, 0x2 - bl sub_8001658 + bl InitBgsFromTemplates movs r4, 0x80 lsls r4, 4 adds r0, r4, 0 diff --git a/common_syms/bg.txt b/common_syms/bg.txt new file mode 100644 index 000000000..2495d1646 --- /dev/null +++ b/common_syms/bg.txt @@ -0,0 +1 @@ +gUnneededFireRedVariable diff --git a/data/data.s b/data/data.s index d98a49aca..bca0e3455 100644 --- a/data/data.s +++ b/data/data.s @@ -1,8 +1,5 @@ .section .rodata -gUnknown_81E9F64:: @ 81E9F64 - .incbin "baserom.gba", 0x1E9F64, 0x4 - gUnknown_81E9F68:: @ 81E9F68 .incbin "baserom.gba", 0x1E9F68, 0x38 diff --git a/include/bg.h b/include/bg.h index 0c6b4ac26..8f1eb787f 100644 --- a/include/bg.h +++ b/include/bg.h @@ -43,7 +43,7 @@ u16 GetBgControlAttribute(u8 bg, u8 attributeId); u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode); void SetTextModeAndHideBgs(void); bool8 IsInvalidBg(u8 bg); -int DummiedOutFireRedLeafGreenTileAllocFunc(int a1, int a2, int a3, int a4); +int DummiedOutFireRedLeafGreenTileAllocFunc(int bg, int offset, int count, int mode); void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable); void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates); void InitBgFromTemplate(const struct BgTemplate *template); diff --git a/include/gba/defines.h b/include/gba/defines.h index 7fd429d9e..b3fce2bfc 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -15,6 +15,11 @@ #define INTR_CHECK (*(u16 *)0x3007FF8) #define INTR_VECTOR (*(void **)0x3007FFC) +#define EWRAM_START 0x02000000 +#define EWRAM_END (EWRAM_START + 0x40000) +#define IWRAM_START 0x03000000 +#define IWRAM_END (IWRAM_START + 0x8000) + #define PLTT 0x5000000 #define PLTT_SIZE 0x400 @@ -29,9 +34,11 @@ #define BG_VRAM VRAM #define BG_VRAM_SIZE 0x10000 -#define BG_CHAR_ADDR(n) (void *)(BG_VRAM + (0x4000 * (n))) -#define BG_SCREEN_ADDR(n) (void *)(BG_VRAM + (0x800 * (n))) -#define BG_TILE_ADDR(n) (void *)(BG_VRAM + (0x80 * (n))) +#define BG_CHAR_SIZE 0x4000 +#define BG_SCREEN_SIZE 0x800 +#define BG_CHAR_ADDR(n) (void *)(BG_VRAM + (BG_CHAR_SIZE * (n))) +#define BG_SCREEN_ADDR(n) (void *)(BG_VRAM + (BG_SCREEN_SIZE * (n))) +#define BG_TILE_ADDR(n) (void *)(BG_VRAM + (0x80 * (n))) // text-mode BG #define OBJ_VRAM0 (void *)(VRAM + 0x10000) @@ -44,6 +51,8 @@ #define OAM 0x7000000 #define OAM_SIZE 0x400 +#define ROM_HEADER_SIZE 0xC0 + #define DISPLAY_WIDTH 240 #define DISPLAY_HEIGHT 160 diff --git a/ld_script.txt b/ld_script.txt index 432b55a78..18af439bd 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -85,7 +85,7 @@ SECTIONS { src/main.o(.text); src/gpu_regs.o(.text); src/dma3_manager.o(.text); - asm/bg.o(.text); + src/bg.o(.text); asm/malloc.o(.text); asm/text_printer.o(.text); asm/window.o(.text); @@ -392,6 +392,7 @@ SECTIONS { SUBALIGN(4) { src/main.o(.rodata); + src/bg.o(.rodata); data/data.o(.rodata); src/m4a_tables.o(.rodata); data/sound_data.o(.rodata); diff --git a/src/bg.c b/src/bg.c new file mode 100644 index 000000000..86c95b953 --- /dev/null +++ b/src/bg.c @@ -0,0 +1,1707 @@ +#include "global.h" +#include "bg.h" +#include "dma3.h" +#include "gpu_regs.h" + +#define DISPCNT_ALL_BG_AND_MODE_BITS (DISPCNT_BG_ALL_ON | 0x7) + +struct BgControl +{ + struct BgConfig { + u16 visible:1; + u16 unknown_1:1; + u16 screenSize:2; + u16 priority:2; + u16 mosaic:1; + u16 wraparound:1; + + u16 charBaseIndex:2; + u16 mapBaseIndex:5; + u16 paletteMode:1; + + u8 unknown_2; + u8 unknown_3; + } configs[4]; + + u16 bgVisibilityAndMode; +}; + +struct BgConfig2 +{ + u32 baseTile:10; + u32 basePalette:4; + u32 unk_3:18; + + void* tilemap; + u32 bg_x; + u32 bg_y; +}; + +static struct BgControl sGpuBgConfigs; +static struct BgConfig2 sGpuBgConfigs2[4]; +static u32 sDmaBusyBitfield[4]; +static u8 gpu_tile_allocation_map_bg[0x100]; + +u32 gUnneededFireRedVariable; + +static const struct BgConfig sZeroedBgControlStruct = { 0 }; + +void ResetBgs(void) +{ + ResetBgControlStructs(); + sGpuBgConfigs.bgVisibilityAndMode = 0; + SetTextModeAndHideBgs(); +} + +static void SetBgModeInternal(u8 bgMode) +{ + sGpuBgConfigs.bgVisibilityAndMode &= 0xFFF8; + sGpuBgConfigs.bgVisibilityAndMode |= bgMode; +} + +u8 GetBgMode(void) +{ + return sGpuBgConfigs.bgVisibilityAndMode & 0x7; +} + +void ResetBgControlStructs(void) +{ + struct BgConfig* bgConfigs = &sGpuBgConfigs.configs[0]; + struct BgConfig zeroedConfig = sZeroedBgControlStruct; + int i; + + for (i = 0; i < 4; i++) + { + bgConfigs[i] = zeroedConfig; + } +} + +void Unused_ResetBgControlStruct(u8 bg) +{ + if (IsInvalidBg(bg) == FALSE) + { + sGpuBgConfigs.configs[bg] = sZeroedBgControlStruct; + } +} + +void SetBgControlAttributes(u8 bg, u8 charBaseIndex, u8 mapBaseIndex, u8 screenSize, u8 paletteMode, u8 priority, u8 mosaic, u8 wraparound) +{ + if (IsInvalidBg(bg) == FALSE) + { + if (charBaseIndex != 0xFF) + { + sGpuBgConfigs.configs[bg].charBaseIndex = charBaseIndex & 0x3; + } + + if (mapBaseIndex != 0xFF) + { + sGpuBgConfigs.configs[bg].mapBaseIndex = mapBaseIndex & 0x1F; + } + + if (screenSize != 0xFF) + { + sGpuBgConfigs.configs[bg].screenSize = screenSize & 0x3; + } + + if (paletteMode != 0xFF) + { + sGpuBgConfigs.configs[bg].paletteMode = paletteMode; + } + + if (priority != 0xFF) + { + sGpuBgConfigs.configs[bg].priority = priority & 0x3; + } + + if (mosaic != 0xFF) + { + sGpuBgConfigs.configs[bg].mosaic = mosaic & 0x1; + } + + if (wraparound != 0xFF) + { + sGpuBgConfigs.configs[bg].wraparound = wraparound; + } + + sGpuBgConfigs.configs[bg].unknown_2 = 0; + sGpuBgConfigs.configs[bg].unknown_3 = 0; + + sGpuBgConfigs.configs[bg].visible = 1; + } +} + +u16 GetBgControlAttribute(u8 bg, u8 attributeId) +{ + if (IsInvalidBg(bg) == FALSE && sGpuBgConfigs.configs[bg].visible != FALSE) + { + switch (attributeId) + { + case BG_CTRL_ATTR_VISIBLE: + return sGpuBgConfigs.configs[bg].visible; + case BG_CTRL_ATTR_CHARBASEINDEX: + return sGpuBgConfigs.configs[bg].charBaseIndex; + case BG_CTRL_ATTR_MAPBASEINDEX: + return sGpuBgConfigs.configs[bg].mapBaseIndex; + case BG_CTRL_ATTR_SCREENSIZE: + return sGpuBgConfigs.configs[bg].screenSize; + case BG_CTRL_ATTR_PALETTEMODE: + return sGpuBgConfigs.configs[bg].paletteMode; + case BG_CTRL_ATTR_PRIORITY: + return sGpuBgConfigs.configs[bg].priority; + case BG_CTRL_ATTR_MOSAIC: + return sGpuBgConfigs.configs[bg].mosaic; + case BG_CTRL_ATTR_WRAPAROUND: + return sGpuBgConfigs.configs[bg].wraparound; + } + } + + return 0xFF; +} + +u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode) +{ + u16 offset; + s8 cursor; + + if (IsInvalidBg(bg) == FALSE && sGpuBgConfigs.configs[bg].visible != FALSE) + { + switch (mode) + { + case 0x1: + offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE; + break; + case 0x2: + offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE; + break; + default: + cursor = -1; + goto end; + } + + offset = destOffset + offset; + + cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0); + + if (cursor == -1) + { + return -1; + } + } + else + { + return -1; + } + +end: + return cursor; +} + +void ShowBgInternal(u8 bg) +{ + u16 value; + if (IsInvalidBg(bg) == FALSE && sGpuBgConfigs.configs[bg].visible != FALSE) + { + value = sGpuBgConfigs.configs[bg].priority | + (sGpuBgConfigs.configs[bg].charBaseIndex << 2) | + (sGpuBgConfigs.configs[bg].mosaic << 6) | + (sGpuBgConfigs.configs[bg].paletteMode << 7) | + (sGpuBgConfigs.configs[bg].mapBaseIndex << 8) | + (sGpuBgConfigs.configs[bg].wraparound << 13) | + (sGpuBgConfigs.configs[bg].screenSize << 14); + + SetGpuReg((bg << 1) + 0x8, value); + + sGpuBgConfigs.bgVisibilityAndMode |= 1 << (bg + 8); + sGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS; + } +} + +static void HideBgInternal(u8 bg) +{ + if (IsInvalidBg(bg) == FALSE) + { + sGpuBgConfigs.bgVisibilityAndMode &= ~(1 << (bg + 8)); + sGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS; + } +} + +static void SyncBgVisibilityAndMode(void) +{ + SetGpuReg(0, (GetGpuReg(0) & ~DISPCNT_ALL_BG_AND_MODE_BITS) | sGpuBgConfigs.bgVisibilityAndMode); +} + +void SetTextModeAndHideBgs(void) +{ + SetGpuReg(0, GetGpuReg(0) & ~DISPCNT_ALL_BG_AND_MODE_BITS); +} + +static void SetBgAffineInternal(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) +{ + struct BgAffineSrcData src; + struct BgAffineDstData dest; + + switch (sGpuBgConfigs.bgVisibilityAndMode & 0x7) + { + case 1: + if (bg != 2) + return; + break; + case 2: + if (bg < 2 || bg > 3) + return; + break; + case 0: + default: + return; + } + + src.texX = srcCenterX; + src.texY = srcCenterY; + src.scrX = dispCenterX; + src.scrY = dispCenterY; + src.sx = scaleX; + src.sy = scaleY; + src.alpha = rotationAngle; + + BgAffineSet(&src, &dest, 1); + + SetGpuReg(REG_OFFSET_BG2PA, dest.pa); + SetGpuReg(REG_OFFSET_BG2PB, dest.pb); + SetGpuReg(REG_OFFSET_BG2PC, dest.pc); + SetGpuReg(REG_OFFSET_BG2PD, dest.pd); + SetGpuReg(REG_OFFSET_BG2PA, dest.pa); + SetGpuReg(REG_OFFSET_BG2X_L, (s16)(dest.dx)); + SetGpuReg(REG_OFFSET_BG2X_H, (s16)(dest.dx >> 16)); + SetGpuReg(REG_OFFSET_BG2Y_L, (s16)(dest.dy)); + SetGpuReg(REG_OFFSET_BG2Y_H, (s16)(dest.dy >> 16)); +} + +bool8 IsInvalidBg(u8 bg) +{ + if (bg > 3) + return TRUE; + return FALSE; +} + +int DummiedOutFireRedLeafGreenTileAllocFunc(int bg, int offset, int count, int mode) +{ + int start, end; + int blockSize; + int blockStart; + int i; + + switch (mode) + { + case 0: + start = GetBgControlAttribute(bg, BG_CTRL_ATTR_CHARBASEINDEX) * (BG_CHAR_SIZE / TILE_SIZE_4BPP); + end = start + 0x400; + if (end > 0x800) + end = 0x800; + blockSize = 0; + blockStart = 0; + for (i = start, offset = 0; i < end; i++, offset++) + { + if (!((gpu_tile_allocation_map_bg[i / 8] >> (i % 8)) & 1)) + { + if (blockSize) + { + blockSize++; + if (blockSize == count) + return blockStart; + } + else + { + blockStart = offset; + blockSize = 1; + } + } + else + { + blockSize = 0; + } + } + return -1; + case 1: + start = GetBgControlAttribute(bg, BG_CTRL_ATTR_CHARBASEINDEX) * (BG_CHAR_SIZE / TILE_SIZE_4BPP) + offset; + end = start + count; + for (i = start; i < end; i++) + gpu_tile_allocation_map_bg[i / 8] |= 1 << (i % 8); + break; + case 2: + start = GetBgControlAttribute(bg, BG_CTRL_ATTR_CHARBASEINDEX) * (BG_CHAR_SIZE / TILE_SIZE_4BPP) + offset; + end = start + count; + for (i = start; i < end; i++) + gpu_tile_allocation_map_bg[i / 8] &= ~(1 << (i % 8)); + break; + } + + return 0; +} + +void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable) +{ + int i; + ResetBgs(); + + for (i = 0; i < 4; i++) + { + sDmaBusyBitfield[i] = 0; + } + + gUnneededFireRedVariable = leftoverFireRedLeafGreenVariable; + + for (i = 0; i < 0x100; i++) + { + gpu_tile_allocation_map_bg[i] = 0; + } +} + +#ifdef NONMATCHING +void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates) +{ + int i; + u8 bg; + + SetBgModeInternal(bgMode); + ResetBgControlStructs(); + + for (i = 0; i < numTemplates; i++) + { + bg = templates[i].bg; + if (bg < 4) { + SetBgControlAttributes(bg, + templates[i].charBaseIndex, + templates[i].mapBaseIndex, + templates[i].screenSize, + templates[i].paletteMode, + templates[i].priority, + 0, + 0); + + sGpuBgConfigs2[bg].baseTile = templates[i].baseTile; + sGpuBgConfigs2[bg].basePalette = 0; + sGpuBgConfigs2[bg].unk_3 = 0; + + sGpuBgConfigs2[bg].tilemap = NULL; + sGpuBgConfigs2[bg].bg_x = 0; + sGpuBgConfigs2[bg].bg_y = 0; + + gpu_tile_allocation_map_bg[(templates[i].charBaseIndex * (BG_CHAR_SIZE / TILE_SIZE_4BPP)) / 8] = 1; + } + } +} +#else +__attribute__((naked)) +void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x10\n\ + adds r5, r1, 0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r2, 24\n\ + lsrs r4, r2, 24\n\ + bl SetBgModeInternal\n\ + bl ResetBgControlStructs\n\ + cmp r4, 0\n\ + beq _08001712\n\ + movs r7, 0\n\ + ldr r0, _08001724 @ =sGpuBgConfigs2\n\ + mov r9, r0\n\ + adds r6, r5, 0\n\ + ldr r2, _08001728 @ =gpu_tile_allocation_map_bg\n\ + mov r10, r2\n\ + mov r8, r4\n\ +_08001688:\n\ + ldr r4, [r6]\n\ + lsls r0, r4, 30\n\ + lsrs r5, r0, 30\n\ + cmp r5, 0x3\n\ + bhi _08001704\n\ + lsls r1, r4, 28\n\ + lsrs r1, 30\n\ + lsls r2, r4, 23\n\ + lsrs r2, 27\n\ + lsls r3, r4, 21\n\ + lsrs r3, 30\n\ + lsls r0, r4, 20\n\ + lsrs r0, 31\n\ + str r0, [sp]\n\ + lsls r0, r4, 18\n\ + lsrs r0, 30\n\ + str r0, [sp, 0x4]\n\ + str r7, [sp, 0x8]\n\ + str r7, [sp, 0xC]\n\ + adds r0, r5, 0\n\ + bl SetBgControlAttributes\n\ + lsls r4, r5, 4\n\ + mov r5, r9\n\ + adds r3, r4, r5\n\ + ldr r2, [r6]\n\ + lsls r2, 8\n\ + lsrs r2, 22\n\ + ldrh r0, [r3]\n\ + ldr r5, _0800172C @ =0xfffffc00\n\ + adds r1, r5, 0\n\ + ands r0, r1\n\ + orrs r0, r2\n\ + strh r0, [r3]\n\ + ldrb r0, [r3, 0x1]\n\ + movs r2, 0x3D\n\ + negs r2, r2\n\ + adds r1, r2, 0\n\ + ands r0, r1\n\ + strb r0, [r3, 0x1]\n\ + ldr r0, [r3]\n\ + ldr r1, _08001730 @ =0x00003fff\n\ + ands r0, r1\n\ + str r0, [r3]\n\ + mov r0, r9\n\ + adds r0, 0x4\n\ + adds r0, r4, r0\n\ + str r7, [r0]\n\ + mov r0, r9\n\ + adds r0, 0x8\n\ + adds r0, r4, r0\n\ + str r7, [r0]\n\ + ldr r5, _08001734 @ =sGpuBgConfigs2 + 0xC\n\ + adds r4, r5\n\ + str r7, [r4]\n\ + ldr r0, [r6]\n\ + lsls r0, 28\n\ + lsrs r0, 30\n\ + lsls r0, 6\n\ + add r0, r10\n\ + movs r1, 0x1\n\ + strb r1, [r0]\n\ +_08001704:\n\ + adds r6, 0x4\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + add r8, r0\n\ + mov r2, r8\n\ + cmp r2, 0\n\ + bne _08001688\n\ +_08001712:\n\ + add sp, 0x10\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08001724: .4byte sGpuBgConfigs2\n\ +_08001728: .4byte gpu_tile_allocation_map_bg\n\ +_0800172C: .4byte 0xfffffc00\n\ +_08001730: .4byte 0x00003fff\n\ +_08001734: .4byte sGpuBgConfigs2 + 0xC\n\ +.syntax divided"); +} +#endif // NONMATCHING + +void InitBgFromTemplate(const struct BgTemplate *template) +{ + u8 bg = template->bg; + + if (bg < 4) + { + SetBgControlAttributes(bg, + template->charBaseIndex, + template->mapBaseIndex, + template->screenSize, + template->paletteMode, + template->priority, + 0, + 0); + + sGpuBgConfigs2[bg].baseTile = template->baseTile; + sGpuBgConfigs2[bg].basePalette = 0; + sGpuBgConfigs2[bg].unk_3 = 0; + + sGpuBgConfigs2[bg].tilemap = NULL; + sGpuBgConfigs2[bg].bg_x = 0; + sGpuBgConfigs2[bg].bg_y = 0; + + gpu_tile_allocation_map_bg[(template->charBaseIndex * (BG_CHAR_SIZE / TILE_SIZE_4BPP)) / 8] = 1; + } +} + +u16 LoadBgTiles(u8 bg, const void* src, u16 size, u16 destOffset) +{ + u16 tileOffset; + u8 cursor; + + if (GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE) == 0) + { + tileOffset = (sGpuBgConfigs2[bg].baseTile + destOffset) * 0x20; + } + else + { + tileOffset = (sGpuBgConfigs2[bg].baseTile + destOffset) * 0x40; + } + + cursor = LoadBgVram(bg, src, size, tileOffset, DISPCNT_MODE_1); + + if (cursor == 0xFF) + { + return -1; + } + + sDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20)); + + if (gUnneededFireRedVariable == 1) + { + DummiedOutFireRedLeafGreenTileAllocFunc(bg, tileOffset / 0x20, size / 0x20, 1); + } + + return cursor; +} + +u16 LoadBgTilemap(u8 bg, const void *src, u16 size, u16 destOffset) +{ + u8 cursor; + + cursor = LoadBgVram(bg, src, size, destOffset * 32, DISPCNT_MODE_2); + + if (cursor == 0xFF) + { + return -1; + } + + sDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20)); + + return cursor; +} + +u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset) +{ + u16 paletteOffset; + s8 cursor; + + if (IsInvalidBg32(bg) == FALSE) + { + paletteOffset = (sGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2); + cursor = RequestDma3Copy(src, (void*)(paletteOffset + BG_PLTT), size, 0); + + if (cursor == -1) + { + return -1; + } + } + else + { + return -1; + } + + sDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20)); + + return (u8)cursor; +} + +#ifdef NONMATCHING // Matches everything but r5 and r6 are flipped, rrr +bool8 IsDma3ManagerBusyWithBgCopy(void) +{ + u8 mod; + u8 div; + s8 reqSpace; + + int i; + + for (i = 0; i < 0x80; i++) + { + div = i / 0x20; + mod = i % 0x20; + + if ((sDmaBusyBitfield[div] & (1 << mod)) != FALSE) + { + reqSpace = CheckForSpaceForDma3Request(i); + if (reqSpace == -1) + { + return TRUE; + } + + sDmaBusyBitfield[div] &= ~(1 << mod); + } + } + + return FALSE; +} +#else +__attribute__((naked)) +bool8 IsDma3ManagerBusyWithBgCopy(void) +{ + asm("push {r4-r7,lr}\n\ + mov r5, #0\n\ + mov r7, #0x1\n\ + neg r7, r7\n\ +_08001ADC:\n\ + add r0, r5, #0\n\ + cmp r5, #0\n\ + bge _08001AE4\n\ + add r0, #0x1F\n\ +_08001AE4:\n\ + asr r0, #5\n\ + lsl r2, r0, #24\n\ + lsl r0, #5\n\ + sub r0, r5, r0\n\ + lsl r0, #24\n\ + lsr r0, #24\n\ + ldr r1, =sDmaBusyBitfield\n\ + lsr r2, #22\n\ + add r4, r2, r1\n\ + mov r6, #0x1\n\ + lsl r6, r0\n\ + ldr r0, [r4]\n\ + and r0, r6\n\ + cmp r0, #0\n\ + beq _08001B22\n\ + lsl r0, r5, #16\n\ + asr r0, #16\n\ + bl CheckForSpaceForDma3Request\n\ + lsl r0, #24\n\ + asr r0, #24\n\ + cmp r0, r7\n\ + bne _08001B1C\n\ + mov r0, #0x1\n\ + b _08001B2A\n\ + .pool\n\ +_08001B1C:\n\ + ldr r0, [r4]\n\ + bic r0, r6\n\ + str r0, [r4]\n\ +_08001B22:\n\ + add r5, #0x1\n\ + cmp r5, #0x7F\n\ + ble _08001ADC\n\ + mov r0, #0\n\ +_08001B2A:\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n"); +} +#endif // NONMATCHING + +void ShowBg(u8 bg) +{ + ShowBgInternal(bg); + SyncBgVisibilityAndMode(); +} + +void HideBg(u8 bg) +{ + HideBgInternal(bg); + SyncBgVisibilityAndMode(); +} + +void SetBgAttribute(u8 bg, u8 attributeId, u8 value) +{ + switch (attributeId) + { + case 1: + SetBgControlAttributes(bg, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF); + break; + case 2: + SetBgControlAttributes(bg, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF); + break; + case 3: + SetBgControlAttributes(bg, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF); + break; + case 4: + SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF); + break; + case 7: + SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF); + break; + case 5: + SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF); + break; + case 6: + SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value); + break; + } +} + +u16 GetBgAttribute(u8 bg, u8 attributeId) +{ + switch (attributeId) + { + case 1: + return GetBgControlAttribute(bg, BG_CTRL_ATTR_CHARBASEINDEX); + case 2: + return GetBgControlAttribute(bg, BG_CTRL_ATTR_MAPBASEINDEX); + case 3: + return GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); + case 4: + return GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE); + case 7: + return GetBgControlAttribute(bg, BG_CTRL_ATTR_PRIORITY); + case 5: + return GetBgControlAttribute(bg, BG_CTRL_ATTR_MOSAIC); + case 6: + return GetBgControlAttribute(bg, BG_CTRL_ATTR_WRAPAROUND); + case 8: + switch (GetBgType(bg)) + { + case 0: + return GetBgMetricTextMode(bg, 0) * 0x800; + case 1: + return GetBgMetricAffineMode(bg, 0) * 0x100; + default: + return 0; + } + case 9: + return GetBgType(bg); + case 10: + return sGpuBgConfigs2[bg].baseTile; + default: + return -1; + } +} + +u32 ChangeBgX(u8 bg, u32 value, u8 op) +{ + u8 mode; + u16 temp1; + u16 temp2; + + if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0) + { + return -1; + } + + switch (op) + { + case 0: + default: + sGpuBgConfigs2[bg].bg_x = value; + break; + case 1: + sGpuBgConfigs2[bg].bg_x += value; + break; + case 2: + sGpuBgConfigs2[bg].bg_x -= value; + break; + } + + mode = GetBgMode(); + + switch (bg) + { + case 0: + temp1 = sGpuBgConfigs2[0].bg_x >> 0x8; + SetGpuReg(REG_OFFSET_BG0HOFS, temp1); + break; + case 1: + temp1 = sGpuBgConfigs2[1].bg_x >> 0x8; + SetGpuReg(REG_OFFSET_BG1HOFS, temp1); + break; + case 2: + if (mode == 0) + { + temp1 = sGpuBgConfigs2[2].bg_x >> 0x8; + SetGpuReg(REG_OFFSET_BG2HOFS, temp1); + } + else + { + temp1 = sGpuBgConfigs2[2].bg_x >> 0x10; + temp2 = sGpuBgConfigs2[2].bg_x & 0xFFFF; + SetGpuReg(REG_OFFSET_BG2X_H, temp1); + SetGpuReg(REG_OFFSET_BG2X_L, temp2); + } + break; + case 3: + if (mode == 0) + { + temp1 = sGpuBgConfigs2[3].bg_x >> 0x8; + SetGpuReg(REG_OFFSET_BG3HOFS, temp1); + } + else if (mode == 2) + { + temp1 = sGpuBgConfigs2[3].bg_x >> 0x10; + temp2 = sGpuBgConfigs2[3].bg_x & 0xFFFF; + SetGpuReg(REG_OFFSET_BG3X_H, temp1); + SetGpuReg(REG_OFFSET_BG3X_L, temp2); + } + break; + } + + return sGpuBgConfigs2[bg].bg_x; +} + +u32 GetBgX(u8 bg) +{ + if (IsInvalidBg32(bg) != FALSE) + return -1; + if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0) + return -1; + return sGpuBgConfigs2[bg].bg_x; +} + +u32 ChangeBgY(u8 bg, u32 value, u8 op) +{ + u8 mode; + u16 temp1; + u16 temp2; + + if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0) + { + return -1; + } + + switch (op) + { + case 0: + default: + sGpuBgConfigs2[bg].bg_y = value; + break; + case 1: + sGpuBgConfigs2[bg].bg_y += value; + break; + case 2: + sGpuBgConfigs2[bg].bg_y -= value; + break; + } + + mode = GetBgMode(); + + switch (bg) + { + case 0: + temp1 = sGpuBgConfigs2[0].bg_y >> 0x8; + SetGpuReg(REG_OFFSET_BG0VOFS, temp1); + break; + case 1: + temp1 = sGpuBgConfigs2[1].bg_y >> 0x8; + SetGpuReg(REG_OFFSET_BG1VOFS, temp1); + break; + case 2: + if (mode == 0) + { + temp1 = sGpuBgConfigs2[2].bg_y >> 0x8; + SetGpuReg(REG_OFFSET_BG2VOFS, temp1); + } + else + { + temp1 = sGpuBgConfigs2[2].bg_y >> 0x10; + temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF; + SetGpuReg(REG_OFFSET_BG2Y_H, temp1); + SetGpuReg(REG_OFFSET_BG2Y_L, temp2); + } + break; + case 3: + if (mode == 0) + { + temp1 = sGpuBgConfigs2[3].bg_y >> 0x8; + SetGpuReg(REG_OFFSET_BG3VOFS, temp1); + } + else if (mode == 2) + { + temp1 = sGpuBgConfigs2[3].bg_y >> 0x10; + temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF; + SetGpuReg(REG_OFFSET_BG3Y_H, temp1); + SetGpuReg(REG_OFFSET_BG3Y_L, temp2); + } + break; + } + + return sGpuBgConfigs2[bg].bg_y; +} + +u32 GetBgY(u8 bg) +{ + if (IsInvalidBg32(bg) != FALSE) + return -1; + if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0) + return -1; + return sGpuBgConfigs2[bg].bg_y; +} + +void SetBgAffine(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) +{ + SetBgAffineInternal(bg, srcCenterX, srcCenterY, dispCenterX, dispCenterY, scaleX, scaleY, rotationAngle); +} + +u8 Unused_AdjustBgMosaic(u8 a1, u8 a2) +{ + u16 result; + s16 test1; + s16 test2; + + result = GetGpuReg(REG_OFFSET_MOSAIC); + + test1 = result & 0xF; + test2 = (result >> 4) & 0xF; + result &= 0xFF00; + + switch (a2) + { + case 0: + default: + test1 = a1 & 0xF; + test2 = a1 >> 0x4; + break; + case 1: + test1 = a1 & 0xF; + break; + case 2: + if ((test1 + a1) > 0xF) + { + test1 = 0xF; + } + else + { + test1 += a1; + } + break; + case 3: + if ((test1 - a1) < 0) + { + test1 = 0x0; + } + else + { + test1 -= a1; + } + break; + case 4: + test2 = a1 & 0xF; + break; + case 5: + if ((test2 + a1) > 0xF) + { + test2 = 0xF; + } + else + { + test2 += a1; + } + break; + case 6: + if ((test2 - a1) < 0) + { + test2 = 0x0; + } + else + { + test2 -= a1; + } + break; + } + + result |= ((test2 << 0x4) & 0xF0); + result |= (test1 & 0xF); + + SetGpuReg(REG_OFFSET_MOSAIC, result); + + return result; +} + +void SetBgTilemapBuffer(u8 bg, void *tilemap) +{ + if (IsInvalidBg32(bg) == FALSE && GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) != 0x0) + { + sGpuBgConfigs2[bg].tilemap = tilemap; + } +} + +void UnsetBgTilemapBuffer(u8 bg) +{ + if (IsInvalidBg32(bg) == FALSE && GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) != 0x0) + { + sGpuBgConfigs2[bg].tilemap = NULL; + } +} + +void* GetBgTilemapBuffer(u8 bg) +{ + if (IsInvalidBg32(bg) != FALSE) + return NULL; + if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0) + return NULL; + return sGpuBgConfigs2[bg].tilemap; +} + +void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset) +{ + if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE) + { + if (mode != 0) + { + CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 32)), mode); + } + else + { + LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 32))); + } + } +} + +void CopyBgTilemapBufferToVram(u8 bg) +{ + u16 sizeToLoad; + + if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE) + { + switch (GetBgType(bg)) + { + case 0: + sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800; + break; + case 1: + sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100; + break; + default: + sizeToLoad = 0; + break; + } + LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2); + } +} + +void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u8 height) +{ + void* srcCopy; + u16 destX16; + u16 destY16; + u16 mode; + + if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE) + { + switch (GetBgType(bg)) + { + case 0: + srcCopy = src; + for (destY16 = destY; destY16 < (destY + height); destY16++) + { + for (destX16 = destX; destX16 < (destX + width); destX16++) + { + ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *((u16*)srcCopy)++; + } + } + break; + case 1: + srcCopy = src; + mode = GetBgMetricAffineMode(bg, 0x1); + for (destY16 = destY; destY16 < (destY + height); destY16++) + { + for (destX16 = destX; destX16 < (destX + width); destX16++) + { + ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *((u8*)srcCopy)++; + } + } + break; + } + } +} + +void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette) +{ + CopyRectToBgTilemapBufferRect(bg, src, 0, 0, rectWidth, rectHeight, destX, destY, rectWidth, rectHeight, palette, 0, 0); +} +// Skipping for now, it probably uses structs passed by value +/* +void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2) +{ + u16 attribute; + u16 mode; + u16 mode2; + + void* srcCopy; + u16 destX16; + u16 destY16; + + if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE) + { + attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); + mode = GetBgMetricTextMode(bg, 0x1) * 0x20; + mode2 = GetBgMetricTextMode(bg, 0x2) * 0x20; + switch (GetBgType(bg)) + { + case 0: + srcCopy = src; + for (destY16 = destY; destY16 < (destY + rectHeight); destY16++) + { + for (destX16 = destX; destX16 < (destX + rectWidth); destX16++) + { + CopyTileMapEntry(&((u16*)srcCopy)[(srcY * rectWidth) + srcX], &((u16*)sGpuBgConfigs2[bg].tilemap)[GetTileMapIndexFromCoords(destX16, destY16, attribute, mode, mode2)], palette1, tileOffset, palette2); + } + } + break; + case 1: + srcCopy = src; + mode = GetBgMetricAffineMode(bg, 0x1); + for (destY16 = destY; destY16 < (destY + rectHeight); destY16++) + { + for (destX16 = destX; destX16 < (destX + rectWidth); destX16++) + { + CopyTileMapEntry(&((u16*)srcCopy)[(srcY * rectWidth) + srcX], &((u16*)sGpuBgConfigs2[bg].tilemap)[GetTileMapIndexFromCoords(destX16, destY16, attribute, mode, mode2)], palette1, tileOffset, palette2); + } + } + break; + } + } +}*/ +__attribute__((naked)) +void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2) +{ + asm("push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, #0x40\n\ + str r1, [sp, #0x8]\n\ + ldr r1, [sp, #0x60]\n\ + ldr r4, [sp, #0x68]\n\ + ldr r5, [sp, #0x6C]\n\ + ldr r6, [sp, #0x70]\n\ + ldr r7, [sp, #0x74]\n\ + mov r8, r7\n\ + ldr r7, [sp, #0x78]\n\ + mov r9, r7\n\ + ldr r7, [sp, #0x7C]\n\ + mov r10, r7\n\ + ldr r7, [sp, #0x80]\n\ + mov r12, r7\n\ + lsl r0, #24\n\ + lsr r0, #24\n\ + str r0, [sp, #0x4]\n\ + lsl r2, #24\n\ + lsr r2, #24\n\ + str r2, [sp, #0xC]\n\ + lsl r3, #24\n\ + lsr r3, #24\n\ + str r3, [sp, #0x10]\n\ + lsl r1, #24\n\ + lsr r7, r1, #24\n\ + lsl r4, #24\n\ + lsr r4, #24\n\ + str r4, [sp, #0x14]\n\ + lsl r5, #24\n\ + lsr r5, #24\n\ + lsl r6, #24\n\ + lsr r6, #24\n\ + str r6, [sp, #0x18]\n\ + mov r0, r8\n\ + lsl r0, #24\n\ + lsr r4, r0, #24\n\ + mov r1, r9\n\ + lsl r1, #24\n\ + lsr r1, #24\n\ + str r1, [sp, #0x1C]\n\ + mov r2, r10\n\ + lsl r2, #16\n\ + lsr r2, #16\n\ + str r2, [sp, #0x20]\n\ + mov r0, r12\n\ + lsl r0, #16\n\ + lsr r0, #16\n\ + str r0, [sp, #0x24]\n\ + ldr r0, [sp, #0x4]\n\ + bl IsInvalidBg32\n\ + cmp r0, #0\n\ + beq _08002592\n\ + b _080026EE\n\ +_08002592:\n\ + ldr r0, [sp, #0x4]\n\ + bl IsTileMapOutsideWram\n\ + cmp r0, #0\n\ + beq _0800259E\n\ + b _080026EE\n\ +_0800259E:\n\ + ldr r0, [sp, #0x4]\n\ + mov r1, #0x4\n\ + bl GetBgControlAttribute\n\ + lsl r0, #16\n\ + lsr r0, #16\n\ + str r0, [sp, #0x30]\n\ + ldr r0, [sp, #0x4]\n\ + mov r1, #0x1\n\ + bl GetBgMetricTextMode\n\ + lsl r0, #21\n\ + lsr r0, #16\n\ + str r0, [sp, #0x28]\n\ + ldr r0, [sp, #0x4]\n\ + mov r1, #0x2\n\ + bl GetBgMetricTextMode\n\ + lsl r0, #21\n\ + lsr r0, #16\n\ + str r0, [sp, #0x2C]\n\ + ldr r0, [sp, #0x4]\n\ + bl GetBgType\n\ + cmp r0, #0\n\ + beq _080025D8\n\ + cmp r0, #0x1\n\ + beq _08002674\n\ + b _080026EE\n\ +_080025D8:\n\ + ldr r1, [sp, #0x10]\n\ + add r0, r1, #0\n\ + mul r0, r7\n\ + ldr r2, [sp, #0xC]\n\ + add r0, r2\n\ + lsl r0, #1\n\ + ldr r1, [sp, #0x8]\n\ + add r6, r1, r0\n\ + add r0, r5, r4\n\ + cmp r5, r0\n\ + blt _080025F0\n\ + b _080026EE\n\ +_080025F0:\n\ + ldr r2, [sp, #0x18]\n\ + sub r2, r7, r2\n\ + str r2, [sp, #0x34]\n\ + str r0, [sp, #0x38]\n\ +_080025F8:\n\ + ldr r4, [sp, #0x14]\n\ + ldr r7, [sp, #0x18]\n\ + add r0, r4, r7\n\ + add r1, r5, #0x1\n\ + str r1, [sp, #0x3C]\n\ + cmp r4, r0\n\ + bge _0800265A\n\ + ldr r2, [sp, #0x4]\n\ + lsl r0, r2, #4\n\ + ldr r1, =sGpuBgConfigs2+4\n\ + add r0, r1\n\ + mov r10, r0\n\ + ldr r7, [sp, #0x20]\n\ + lsl r7, #16\n\ + mov r9, r7\n\ + ldr r1, [sp, #0x24]\n\ + lsl r0, r1, #16\n\ + asr r0, #16\n\ + mov r8, r0\n\ +_0800261E:\n\ + ldr r2, [sp, #0x2C]\n\ + str r2, [sp]\n\ + add r0, r4, #0\n\ + add r1, r5, #0\n\ + ldr r2, [sp, #0x30]\n\ + ldr r3, [sp, #0x28]\n\ + bl GetTileMapIndexFromCoords\n\ + lsl r0, #16\n\ + lsr r0, #15\n\ + mov r7, r10\n\ + ldr r1, [r7]\n\ + add r1, r0\n\ + mov r0, r8\n\ + str r0, [sp]\n\ + add r0, r6, #0\n\ + ldr r2, [sp, #0x1C]\n\ + mov r7, r9\n\ + asr r3, r7, #16\n\ + bl CopyTileMapEntry\n\ + add r6, #0x2\n\ + add r0, r4, #0x1\n\ + lsl r0, #16\n\ + lsr r4, r0, #16\n\ + ldr r1, [sp, #0x14]\n\ + ldr r2, [sp, #0x18]\n\ + add r0, r1, r2\n\ + cmp r4, r0\n\ + blt _0800261E\n\ +_0800265A:\n\ + ldr r5, [sp, #0x34]\n\ + lsl r0, r5, #1\n\ + add r6, r0\n\ + ldr r7, [sp, #0x3C]\n\ + lsl r0, r7, #16\n\ + lsr r5, r0, #16\n\ + ldr r0, [sp, #0x38]\n\ + cmp r5, r0\n\ + blt _080025F8\n\ + b _080026EE\n\ + .pool\n\ +_08002674:\n\ + ldr r1, [sp, #0x10]\n\ + add r0, r1, #0\n\ + mul r0, r7\n\ + ldr r2, [sp, #0xC]\n\ + add r0, r2\n\ + ldr r1, [sp, #0x8]\n\ + add r6, r1, r0\n\ + ldr r0, [sp, #0x4]\n\ + mov r1, #0x1\n\ + bl GetBgMetricAffineMode\n\ + lsl r0, #16\n\ + lsr r0, #16\n\ + mov r9, r0\n\ + add r0, r5, r4\n\ + cmp r5, r0\n\ + bge _080026EE\n\ + ldr r2, [sp, #0x18]\n\ + sub r2, r7, r2\n\ + str r2, [sp, #0x34]\n\ + str r0, [sp, #0x38]\n\ + ldr r7, =sGpuBgConfigs2+4\n\ + mov r10, r7\n\ + ldr r0, [sp, #0x4]\n\ + lsl r0, #4\n\ + mov r8, r0\n\ +_080026A8:\n\ + ldr r4, [sp, #0x14]\n\ + ldr r1, [sp, #0x18]\n\ + add r0, r4, r1\n\ + add r2, r5, #0x1\n\ + str r2, [sp, #0x3C]\n\ + cmp r4, r0\n\ + bge _080026DE\n\ + mov r3, r8\n\ + add r3, r10\n\ + mov r7, r9\n\ + mul r7, r5\n\ + mov r12, r7\n\ + add r2, r0, #0\n\ +_080026C2:\n\ + ldr r1, [r3]\n\ + mov r5, r12\n\ + add r0, r5, r4\n\ + add r1, r0\n\ + ldrb r0, [r6]\n\ + ldr r7, [sp, #0x20]\n\ + add r0, r7\n\ + strb r0, [r1]\n\ + add r6, #0x1\n\ + add r0, r4, #0x1\n\ + lsl r0, #16\n\ + lsr r4, r0, #16\n\ + cmp r4, r2\n\ + blt _080026C2\n\ +_080026DE:\n\ + ldr r0, [sp, #0x34]\n\ + add r6, r0\n\ + ldr r1, [sp, #0x3C]\n\ + lsl r0, r1, #16\n\ + lsr r5, r0, #16\n\ + ldr r2, [sp, #0x38]\n\ + cmp r5, r2\n\ + blt _080026A8\n\ +_080026EE:\n\ + add sp, #0x40\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n"); +} + +void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height) +{ + u16 x16; + u16 y16; + u16 mode; + + if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE) + { + switch (GetBgType(bg)) + { + case 0: + for (y16 = y; y16 < (y + height); y16++) + { + for (x16 = x; x16 < (x + width); x16++) + { + ((u16*)sGpuBgConfigs2[bg].tilemap)[((y16 * 0x20) + x16)] = tileNum; + } + } + break; + case 1: + mode = GetBgMetricAffineMode(bg, 0x1); + for (y16 = y; y16 < (y + height); y16++) + { + for (x16 = x; x16 < (x + width); x16++) + { + ((u8*)sGpuBgConfigs2[bg].tilemap)[((y16 * mode) + x16)] = tileNum; + } + } + break; + } + } +} + +void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette) +{ + WriteSequenceToBgTilemapBuffer(bg, tileNum, x, y, width, height, palette, 0); +} + +void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, s16 tileNumDelta) +{ + u16 mode; + u16 mode2; + u16 attribute; + u16 mode3; + + u16 x16; + u16 y16; + + if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE) + { + attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); + mode = GetBgMetricTextMode(bg, 0x1) * 0x20; + mode2 = GetBgMetricTextMode(bg, 0x2) * 0x20; + switch (GetBgType(bg)) + { + case 0: + for (y16 = y; y16 < (y + height); y16++) + { + for (x16 = x; x16 < (x + width); x16++) + { + CopyTileMapEntry(&firstTileNum, &((u16*)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(x16, y16, attribute, mode, mode2)], paletteSlot, 0, 0); + firstTileNum = (firstTileNum & 0xFC00) + ((firstTileNum + tileNumDelta) & 0x3FF); + } + } + break; + case 1: + mode3 = GetBgMetricAffineMode(bg, 0x1); + for (y16 = y; y16 < (y + height); y16++) + { + for (x16 = x; x16 < (x + width); x16++) + { + ((u8*)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum; + firstTileNum = (firstTileNum & 0xFC00) + ((firstTileNum + tileNumDelta) & 0x3FF); + } + } + break; + } + } +} + +u16 GetBgMetricTextMode(u8 bg, u8 whichMetric) +{ + u8 attribute; + + attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); + + switch (whichMetric) + { + case 0: + switch (attribute) + { + case 0: + return 1; + case 1: + case 2: + return 2; + case 3: + return 4; + } + break; + case 1: + switch (attribute) + { + case 0: + return 1; + case 1: + return 2; + case 2: + return 1; + case 3: + return 2; + } + break; + case 2: + switch (attribute) + { + case 0: + case 1: + return 1; + case 2: + case 3: + return 2; + } + break; + } + return 0; +} + +u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric) +{ + u8 attribute; + + attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); + + switch (whichMetric) + { + case 0: + switch (attribute) + { + case 0: + return 0x1; + case 1: + return 0x4; + case 2: + return 0x10; + case 3: + return 0x40; + } + break; + case 1: + case 2: + return 0x10 << attribute; + } + return 0; +} + +u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32 screenHeight) +{ + x = x & (screenWidth - 1); + y = y & (screenHeight - 1); + + switch (screenSize) + { + case 0: + case 2: + break; + case 3: + if (y >= 0x20) + y += 0x20; + case 1: + if (x >= 0x20) + { + x -= 0x20; + y += 0x20; + } + } + return (y * 0x20) + x; +} + +#ifdef NONMATCHING // This one has some weird switch statement cases that refuse to cooperate +void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2) +{ + u16 test; + switch (palette1) + { + default: + if (palette1 > 0x10 || palette1 < 0) + test = *src + tileOffset + (palette2 << 12); + else + test = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12); + break; + case 0x10: + test = ((*dest & 0xFC00) + (palette2 << 12)) | ((*src + tileOffset) & 0x3FF); + break; + } + + *dest = test; +} +#else +__attribute__((naked)) +void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2) +{ + asm("push {r4-r6,lr}\n\ + add r4, r0, #0\n\ + add r6, r1, #0\n\ + ldr r5, [sp, #0x10]\n\ + cmp r2, #0x10\n\ + beq _08002B14\n\ + cmp r2, #0x10\n\ + bgt _08002B34\n\ + cmp r2, #0\n\ + blt _08002B34\n\ + ldrh r0, [r4]\n\ + add r0, r3\n\ + ldr r3, =0x00000fff\n\ + add r1, r3, #0\n\ + and r0, r1\n\ + add r1, r2, r5\n\ + lsl r1, #12\n\ + b _08002B3A\n\ + .pool\n\ +_08002B14:\n\ + ldrh r1, [r6]\n\ + mov r0, #0xFC\n\ + lsl r0, #8\n\ + and r1, r0\n\ + lsl r2, r5, #12\n\ + add r2, r1, r2\n\ + ldrh r0, [r4]\n\ + add r0, r3\n\ + ldr r3, =0x000003ff\n\ + add r1, r3, #0\n\ + and r0, r1\n\ + orr r0, r2\n\ + b _08002B3C\n\ + .pool\n\ +_08002B34:\n\ + ldrh r0, [r4]\n\ + add r0, r3\n\ + lsl r1, r5, #12\n\ +_08002B3A:\n\ + add r0, r1\n\ +_08002B3C:\n\ + lsl r0, #16\n\ + lsr r1, r0, #16\n\ + strh r1, [r6]\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n"); +} +#endif // NONMATCHING + +u32 GetBgType(u8 bg) +{ + u8 mode; + + mode = GetBgMode(); + + + switch (bg) + { + case 0: + case 1: + switch (mode) + { + case 0: + case 1: + return 0; + } + break; + case 2: + switch (mode) + { + case 0: + return 0; + case 1: + case 2: + return 1; + } + break; + case 3: + switch (mode) + { + case 0: + return 0; + case 2: + return 1; + } + break; + } + + return 0xFFFF; +} + +bool32 IsInvalidBg32(u8 bg) +{ + if (bg > 3) + return TRUE; + return FALSE; +} + +bool32 IsTileMapOutsideWram(u8 bg) +{ + if (sGpuBgConfigs2[bg].tilemap > (void*)IWRAM_END) + return TRUE; + if (sGpuBgConfigs2[bg].tilemap == 0x0) + return TRUE; + return FALSE; +} diff --git a/sym_bss.txt b/sym_bss.txt index be1acb833..069cfff4d 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -6,25 +6,9 @@ .space 0x4 - .align 2 -gUnknown_30008D0: @ 30008D0 - .space 0x18 - -gUnknown_30008E8: @ 30008E8 - .space 0x4 - -gUnknown_30008EC: @ 30008EC - .space 0x8 - -gUnknown_30008F4: @ 30008F4 - .space 0x34 - -gUnknown_3000928: @ 3000928 - .space 0x10 - -gUnknown_3000938: @ 3000938 - .space 0x100 + .include "src/bg.o" + .align 2 gUnknown_3000A38: @ 3000A38 .space 0x4 diff --git a/sym_common.txt b/sym_common.txt index 2ebd71c33..4253c5d77 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -1,7 +1,5 @@ .include "main.o" - -gUnknown_3003D8C: @ 3003D8C - .space 0x4 + .include "bg.o" gUnknown_3003D90: @ 3003D90 .space 0x10 |