thumb_func_start ResetBgs
@ void ResetBgs()
ResetBgs: @ 80012F0
	push {lr}
	bl ResetBgControlStructs
	ldr r1, =0x030008e0
	movs r0, 0
	strh r0, [r1, 0x10]
	bl SetTextModeAndHideBgs
	pop {r0}
	bx r0
	.pool
	thumb_func_end ResetBgs

	thumb_func_start SetBgModeInternal
@ void SetBgModeInternal(u8 bgMode)
SetBgModeInternal: @ 8001308
	lsls r0, 24
	lsrs r0, 24
	ldr r3, =0x030008e0
	ldrh r2, [r3, 0x10]
	ldr r1, =0x0000fff8
	ands r1, r2
	orrs r1, r0
	strh r1, [r3, 0x10]
	bx lr
	.pool
	thumb_func_end SetBgModeInternal

	thumb_func_start GetBgMode
@ u8 GetBgMode()
GetBgMode: @ 8001324
	ldr r0, =0x030008e0
	ldrb r1, [r0, 0x10]
	movs r0, 0x7
	ands r0, r1
	bx lr
	.pool
	thumb_func_end GetBgMode

	thumb_func_start ResetBgControlStructs
@ void ResetBgControlStructs()
ResetBgControlStructs: @ 8001334
	push {lr}
	ldr r2, =0x030008e0
	ldr r0, =gZeroedBgControlStruct
	ldr r0, [r0]
	adds r1, r2, 0
	adds r1, 0xC
_08001340:
	str r0, [r1]
	subs r1, 0x4
	cmp r1, r2
	bge _08001340
	pop {r0}
	bx r0
	.pool
	thumb_func_end ResetBgControlStructs

	thumb_func_start Unused_ResetBgControlStruct
@ void Unused_ResetBgControlStruct(u8 bg)
Unused_ResetBgControlStruct: @ 8001354
	push {r4,lr}
	lsls r0, 24
	lsrs r4, r0, 24
	adds r0, r4, 0
	bl IsInvalidBg
	lsls r0, 24
	cmp r0, 0
	bne _08001372
	ldr r1, =0x030008e0
	lsls r0, r4, 2
	adds r0, r1
	ldr r1, =gZeroedBgControlStruct
	ldr r1, [r1]
	str r1, [r0]
_08001372:
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end Unused_ResetBgControlStruct

	thumb_func_start SetBgControlAttributes
@ void SetBgControlAttributes(u8 bg, u8 tilesBaseBlock, u8 tileMapBaseBlock, u8 screenSize, u8 paletteMode, u8 priority, u8 mosaic, u8 wraparound)
SetBgControlAttributes: @ 8001380
	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 _08001498
	ldr r2, =0x030008e0
	mov r8, r2
	mov r0, r10
	cmp r0, 0xFF
	beq _080013F4
	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]
_080013F4:
	cmp r6, 0xFF
	beq _0800140C
	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]
_0800140C:
	mov r1, r9
	cmp r1, 0xFF
	beq _08001428
	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]
_08001428:
	ldr r6, [sp, 0x4]
	cmp r6, 0xFF
	beq _0800143E
	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]
_0800143E:
	cmp r5, 0xFF
	beq _08001456
	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]
_08001456:
	cmp r4, 0xFF
	beq _0800146E
	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]
_0800146E:
	ldr r0, [sp, 0xC]
	cmp r0, 0xFF
	beq _08001484
	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]
_08001484:
	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]
_08001498:
	add sp, 0x10
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end SetBgControlAttributes

	thumb_func_start GetBgControlAttribute
@ u8 GetBgControlAttribute(u8 bg, u8 attributeId)
GetBgControlAttribute: @ 80014AC
	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 _08001558
	ldr r1, =0x030008e0
	lsls r2, r4, 2
	adds r0, r2, r1
	ldrb r0, [r0]
	lsls r0, 31
	adds r3, r1, 0
	cmp r0, 0
	beq _08001558
	subs r0, r5, 0x1
	cmp r0, 0x7
	bhi _08001558
	lsls r0, 2
	ldr r1, =_080014EC
	adds r0, r1
	ldr r0, [r0]
	mov pc, r0
	.pool
	.align 2, 0
_080014EC:
	.4byte _0800150C
	.4byte _08001516
	.4byte _08001520
	.4byte _0800152A
	.4byte _08001534
	.4byte _0800153C
	.4byte _08001546
	.4byte _08001550
_0800150C:
	adds r0, r2, r3
	ldrb r0, [r0]
	lsls r0, 31
	lsrs r0, 31
	b _0800155A
_08001516:
	adds r0, r2, r3
	ldrb r0, [r0, 0x1]
	lsls r0, 30
	lsrs r0, 30
	b _0800155A
_08001520:
	adds r0, r2, r3
	ldrb r0, [r0, 0x1]
	lsls r0, 25
	lsrs r0, 27
	b _0800155A
_0800152A:
	adds r0, r2, r3
	ldrb r0, [r0]
	lsls r0, 28
	lsrs r0, 30
	b _0800155A
_08001534:
	adds r0, r2, r3
	ldrb r0, [r0, 0x1]
	lsrs r0, 7
	b _0800155A
_0800153C:
	adds r0, r2, r3
	ldrb r0, [r0]
	lsls r0, 26
	lsrs r0, 30
	b _0800155A
_08001546:
	adds r0, r2, r3
	ldrb r0, [r0]
	lsls r0, 25
	lsrs r0, 31
	b _0800155A
_08001550:
	adds r0, r2, r3
	ldrb r0, [r0]
	lsrs r0, 7
	b _0800155A
_08001558:
	movs r0, 0xFF
_0800155A:
	pop {r4,r5}
	pop {r1}
	bx r1
	thumb_func_end GetBgControlAttribute

	thumb_func_start LoadBgVram
@ u8 LoadBgVram(u8, void *src, u16 size, u16 destOffset, u8 mode)
LoadBgVram: @ 8001560
	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 _080015D8
	ldr r1, =0x030008e0
	lsls r0, r4, 2
	adds r1, r0, r1
	ldrb r0, [r1]
	lsls r0, 31
	cmp r0, 0
	beq _080015D8
	cmp r5, 0x1
	beq _080015A4
	cmp r5, 0x2
	beq _080015AC
	movs r2, 0xFF
	b _080015DC
	.pool
_080015A4:
	ldrb r0, [r1, 0x1]
	lsls r0, 30
	lsrs r0, 16
	b _080015B4
_080015AC:
	ldrb r0, [r1, 0x1]
	lsls r0, 25
	lsrs r0, 27
	lsls r0, 11
_080015B4:
	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 _080015DC
_080015D8:
	movs r0, 0xFF
	b _080015DE
_080015DC:
	adds r0, r2, 0
_080015DE:
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end LoadBgVram

	thumb_func_start ShowBgInternal
@ void ShowBgInternal(u8 bg)
ShowBgInternal: @ 80015E8
	push {r4,r5,lr}
	lsls r0, 24
	lsrs r4, r0, 24
	adds r0, r4, 0
	bl IsInvalidBg
	lsls r0, 24
	cmp r0, 0
	bne _08001656
	ldr r5, =0x030008e0
	lsls r0, r4, 2
	adds r2, r0, r5
	ldrb r3, [r2]
	lsls r0, r3, 31
	cmp r0, 0
	beq _08001656
	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, =0x00000f07
	ands r0, r1
	strh r0, [r5, 0x10]
_08001656:
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end ShowBgInternal

	thumb_func_start HideBgInternal
@ void HideBgInternal(u8 bg)
HideBgInternal: @ 8001664
	push {r4,lr}
	lsls r0, 24
	lsrs r4, r0, 24
	adds r0, r4, 0
	bl IsInvalidBg
	lsls r0, 24
	cmp r0, 0
	bne _0800168A
	ldr r2, =0x030008e0
	adds r0, r4, 0
	adds r0, 0x8
	movs r1, 0x1
	lsls r1, r0
	ldrh r0, [r2, 0x10]
	bics r0, r1
	ldr r1, =0x00000f07
	ands r0, r1
	strh r0, [r2, 0x10]
_0800168A:
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end HideBgInternal

	thumb_func_start SyncBgVisibilityAndMode
@ void SyncBgVisibilityAndMode()
SyncBgVisibilityAndMode: @ 8001698
	push {lr}
	movs r0, 0
	bl GetGpuReg
	ldr r1, =0x0000f0f8
	ands r1, r0
	ldr r0, =0x030008e0
	ldrh r0, [r0, 0x10]
	orrs r1, r0
	movs r0, 0
	bl SetGpuReg
	pop {r0}
	bx r0
	.pool
	thumb_func_end SyncBgVisibilityAndMode

	thumb_func_start SetTextModeAndHideBgs
@ void SetTextModeAndHideBgs()
SetTextModeAndHideBgs: @ 80016BC
	push {lr}
	movs r0, 0
	bl GetGpuReg
	ldr r1, =0x0000f0f8
	ands r1, r0
	movs r0, 0
	bl SetGpuReg
	pop {r0}
	bx r0
	.pool
	thumb_func_end SetTextModeAndHideBgs

	thumb_func_start SetBgAffineInternal
@ void SetBgAffineInternal(u8 bg, u16 srcCenterX, u16 srcCenterY, u16 dispCenterX, u16 dispCenterY, u16 scaleX, u16 scaleY, u16 rotationAngle)
SetBgAffineInternal: @ 80016D8
	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, =0x030008e0
	ldrh r0, [r0, 0x10]
	movs r1, 0x7
	ands r1, r0
	cmp r1, 0x1
	beq _08001720
	cmp r1, 0x1
	ble _08001796
	cmp r1, 0x2
	beq _08001726
	b _08001796
	.pool
_08001720:
	cmp r6, 0x2
	bne _08001796
	b _08001730
_08001726:
	subs r0, r6, 0x2
	lsls r0, 24
	lsrs r0, 24
	cmp r0, 0x1
	bhi _08001796
_08001730:
	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
_08001796:
	add sp, 0x24
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end SetBgAffineInternal

	thumb_func_start IsInvalidBg
@ bool8 IsInvalidBg(u8 bg)
IsInvalidBg: @ 80017A4
	push {lr}
	lsls r0, 24
	lsrs r0, 24
	cmp r0, 0x3
	bhi _080017B2
	movs r0, 0
	b _080017B4
_080017B2:
	movs r0, 0x1
_080017B4:
	pop {r1}
	bx r1
	thumb_func_end IsInvalidBg

	thumb_func_start DummiedOutFireRedLeafGreenTileAllocFunc
@ int DummiedOutFireRedLeafGreenTileAllocFunc()
DummiedOutFireRedLeafGreenTileAllocFunc: @ 80017B8
	movs r0, 0
	bx lr
	thumb_func_end DummiedOutFireRedLeafGreenTileAllocFunc

	thumb_func_start ResetBgsAndClearDma3BusyFlags
@ void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable)
ResetBgsAndClearDma3BusyFlags: @ 80017BC
	push {r4,lr}
	adds r4, r0, 0
	bl ResetBgs
	ldr r1, =0x03000938
	movs r2, 0
	adds r0, r1, 0
	adds r0, 0xC
_080017CC:
	str r2, [r0]
	subs r0, 0x4
	cmp r0, r1
	bge _080017CC
	ldr r0, =0x03002f54
	str r4, [r0]
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end ResetBgsAndClearDma3BusyFlags

	thumb_func_start InitBgsFromTemplates
@ void InitBgsFromTemplates(u8 bgMode, struct BgTemplate *templates, u8 numTemplates)
InitBgsFromTemplates: @ 80017E8
	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 _08001894
	movs r7, 0
	ldr r0, =0x030008f8
	mov r9, r0
	movs r2, 0xC
	add r2, r9
	mov r10, r2
	adds r6, r5, 0
	mov r8, r4
_0800181A:
	ldr r4, [r6]
	lsls r0, r4, 30
	lsrs r5, r0, 30
	cmp r5, 0x3
	bhi _08001886
	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, =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, =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]
	add r4, r10
	str r7, [r4]
_08001886:
	adds r6, 0x4
	movs r5, 0x1
	negs r5, r5
	add r8, r5
	mov r0, r8
	cmp r0, 0
	bne _0800181A
_08001894:
	add sp, 0x10
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end InitBgsFromTemplates

	thumb_func_start InitBgFromTemplate
@ void InitBgFromTemplate(struct BgTemplate *templates)
InitBgFromTemplate: @ 80018B0
	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 _08001920
	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, =0x030008f8
	lsls r5, 4
	adds r3, r5, r4
	ldr r1, [r7]
	lsls r1, 8
	lsrs r1, 22
	ldrh r2, [r3]
	ldr r0, =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, =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]
_08001920:
	add sp, 0x10
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end InitBgFromTemplate

	thumb_func_start SetBgMode
@ void SetBgMode(u8 bgMode)
SetBgMode: @ 8001934
	push {lr}
	lsls r0, 24
	lsrs r0, 24
	bl SetBgModeInternal
	pop {r0}
	bx r0
	thumb_func_end SetBgMode

	thumb_func_start LoadBgTiles
@ u8 LoadBgTiles(u8 bg, void *src, u16 size, u16 destOffset)
LoadBgTiles: @ 8001944
	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 _08001980
	ldr r1, =0x030008f8
	lsls r0, r5, 4
	adds r0, r1
	ldrh r0, [r0]
	lsls r0, 22
	lsrs r0, 22
	adds r0, r4
	lsls r0, 21
	b _08001990
	.pool
_08001980:
	ldr r1, =0x030008f8
	lsls r0, r5, 4
	adds r0, r1
	ldrh r0, [r0]
	lsls r0, 22
	lsrs r0, 22
	adds r0, r4
	lsls r0, 22
_08001990:
	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 _080019B8
	ldr r0, =0x0000ffff
	b _080019E6
	.pool
_080019B8:
	ldr r0, =0x03000938
	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, =0x03002f54
	ldr r0, [r0]
	cmp r0, 0x1
	bne _080019E4
	lsrs r1, r4, 5
	mov r0, r8
	lsrs r2, r0, 5
	adds r0, r5, 0
	movs r3, 0x1
	bl DummiedOutFireRedLeafGreenTileAllocFunc
_080019E4:
	adds r0, r7, 0
_080019E6:
	add sp, 0x4
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r1}
	bx r1
	.pool
	thumb_func_end LoadBgTiles

	thumb_func_start LoadBgTilemap
@ u8 LoadBgTilemap(u8 bg, void *src, u16 size, u16 destOffset)
LoadBgTilemap: @ 80019FC
	push {r4,lr}
	sub sp, 0x4
	lsls r0, 24
	lsrs r0, 24
	lsls r2, 16
	lsrs r2, 16
	lsls r3, 17
	lsrs r3, 16
	movs r4, 0x2
	str r4, [sp]
	bl LoadBgVram
	lsls r2, r0, 24
	lsrs r3, r2, 24
	cmp r3, 0xFF
	beq _08001A3C
	ldr r0, =0x03000938
	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 _08001A3E
	.pool
_08001A3C:
	ldr r0, =0x0000ffff
_08001A3E:
	add sp, 0x4
	pop {r4}
	pop {r1}
	bx r1
	.pool
	thumb_func_end LoadBgTilemap

	thumb_func_start Unused_LoadBgPalette
@ u8 Unused_LoadBgPalette(u8 bg, void *src, u16 size, u16 destOffset)
Unused_LoadBgPalette: @ 8001A4C
	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 IsInvalidBg_
	cmp r0, 0
	bne _08001A98
	ldr r1, =0x030008f8
	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 _08001AA4
_08001A98:
	ldr r0, =0x0000ffff
	b _08001AC8
	.pool
_08001AA4:
	ldr r4, =0x03000938
	adds r0, r1, 0
	cmp r1, 0
	bge _08001AAE
	adds r0, 0x1F
_08001AAE:
	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
_08001AC8:
	pop {r4-r7}
	pop {r1}
	bx r1
	.pool
	thumb_func_end Unused_LoadBgPalette

	thumb_func_start IsDma3ManagerBusyWithBgCopy
@ bool8 IsDma3ManagerBusyWithBgCopy()
IsDma3ManagerBusyWithBgCopy: @ 8001AD4
	push {r4-r7,lr}
	movs r5, 0
	movs r7, 0x1
	negs r7, r7
_08001ADC:
	adds r0, r5, 0
	cmp r5, 0
	bge _08001AE4
	adds r0, 0x1F
_08001AE4:
	asrs r0, 5
	lsls r2, r0, 24
	lsls r0, 5
	subs r0, r5, r0
	lsls r0, 24
	lsrs r0, 24
	ldr r1, =0x03000938
	lsrs r2, 22
	adds r4, r2, r1
	movs r6, 0x1
	lsls r6, r0
	ldr r0, [r4]
	ands r0, r6
	cmp r0, 0
	beq _08001B22
	lsls r0, r5, 16
	asrs r0, 16
	bl CheckForSpaceForDma3Request
	lsls r0, 24
	asrs r0, 24
	cmp r0, r7
	bne _08001B1C
	movs r0, 0x1
	b _08001B2A
	.pool
_08001B1C:
	ldr r0, [r4]
	bics r0, r6
	str r0, [r4]
_08001B22:
	adds r5, 0x1
	cmp r5, 0x7F
	ble _08001ADC
	movs r0, 0
_08001B2A:
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end IsDma3ManagerBusyWithBgCopy

	thumb_func_start ShowBg
@ void ShowBg(u8 bg)
ShowBg: @ 8001B30
	push {lr}
	lsls r0, 24
	lsrs r0, 24
	bl ShowBgInternal
	bl SyncBgVisibilityAndMode
	pop {r0}
	bx r0
	thumb_func_end ShowBg

	thumb_func_start HideBg
@ void HideBg(u8 bg)
HideBg: @ 8001B44
	push {lr}
	lsls r0, 24
	lsrs r0, 24
	bl HideBgInternal
	bl SyncBgVisibilityAndMode
	pop {r0}
	bx r0
	thumb_func_end HideBg

	thumb_func_start SetBgAttribute
@ void SetBgAttribute(u8 bg, u8 attributeId, u8 value)
SetBgAttribute: @ 8001B58
	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 _08001C12
	lsls r0, 2
	ldr r1, =_08001B7C
	adds r0, r1
	ldr r0, [r0]
	mov pc, r0
	.pool
	.align 2, 0
_08001B7C:
	.4byte _08001B98
	.4byte _08001BA8
	.4byte _08001BBA
	.4byte _08001BD0
	.4byte _08001BE4
	.4byte _08001BFC
	.4byte _08001BDA
_08001B98:
	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 _08001BF2
_08001BA8:
	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 _08001BF4
_08001BBA:
	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 _08001C12
_08001BD0:
	str r3, [sp]
	movs r0, 0xFF
	str r0, [sp, 0x4]
	str r0, [sp, 0x8]
	b _08001BEC
_08001BDA:
	movs r0, 0xFF
	str r0, [sp]
	str r3, [sp, 0x4]
	str r0, [sp, 0x8]
	b _08001BEC
_08001BE4:
	movs r0, 0xFF
	str r0, [sp]
	str r0, [sp, 0x4]
	str r3, [sp, 0x8]
_08001BEC:
	str r0, [sp, 0xC]
	adds r0, r4, 0
	movs r1, 0xFF
_08001BF2:
	movs r2, 0xFF
_08001BF4:
	movs r3, 0xFF
	bl SetBgControlAttributes
	b _08001C12
_08001BFC:
	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
_08001C12:
	add sp, 0x10
	pop {r4}
	pop {r0}
	bx r0
	thumb_func_end SetBgAttribute

	thumb_func_start GetBgAttribute
@ u8 GetBgAttribute(u8 bg, u8 attributeId)
GetBgAttribute: @ 8001C1C
	push {r4,lr}
	lsls r0, 24
	lsrs r4, r0, 24
	lsls r1, 24
	lsrs r1, 24
	subs r0, r1, 0x1
	cmp r0, 0x9
	bhi _08001CF8
	lsls r0, 2
	ldr r1, =_08001C3C
	adds r0, r1
	ldr r0, [r0]
	mov pc, r0
	.pool
	.align 2, 0
_08001C3C:
	.4byte _08001C64
	.4byte _08001C6E
	.4byte _08001C78
	.4byte _08001C82
	.4byte _08001C96
	.4byte _08001CA0
	.4byte _08001C8C
	.4byte _08001CAA
	.4byte _08001CD8
	.4byte _08001CE4
_08001C64:
	adds r0, r4, 0
	movs r1, 0x2
	bl GetBgControlAttribute
	b _08001CDE
_08001C6E:
	adds r0, r4, 0
	movs r1, 0x3
	bl GetBgControlAttribute
	b _08001CDE
_08001C78:
	adds r0, r4, 0
	movs r1, 0x4
	bl GetBgControlAttribute
	b _08001CDE
_08001C82:
	adds r0, r4, 0
	movs r1, 0x5
	bl GetBgControlAttribute
	b _08001CDE
_08001C8C:
	adds r0, r4, 0
	movs r1, 0x6
	bl GetBgControlAttribute
	b _08001CDE
_08001C96:
	adds r0, r4, 0
	movs r1, 0x7
	bl GetBgControlAttribute
	b _08001CDE
_08001CA0:
	adds r0, r4, 0
	movs r1, 0x8
	bl GetBgControlAttribute
	b _08001CDE
_08001CAA:
	adds r0, r4, 0
	bl GetBgType
	cmp r0, 0
	beq _08001CBC
	cmp r0, 0x1
	beq _08001CCA
	movs r0, 0
	b _08001CFA
_08001CBC:
	adds r0, r4, 0
	movs r1, 0
	bl GetBgMetricTextMode
	lsls r0, 27
	lsrs r0, 16
	b _08001CFA
_08001CCA:
	adds r0, r4, 0
	movs r1, 0
	bl GetBgMetricAffineMode
	lsls r0, 24
	lsrs r0, 16
	b _08001CFA
_08001CD8:
	adds r0, r4, 0
	bl GetBgType
_08001CDE:
	lsls r0, 16
	lsrs r0, 16
	b _08001CFA
_08001CE4:
	ldr r0, =0x030008f8
	lsls r1, r4, 4
	adds r1, r0
	ldrh r0, [r1]
	lsls r0, 22
	lsrs r0, 22
	b _08001CFA
	.pool
_08001CF8:
	ldr r0, =0x0000ffff
_08001CFA:
	pop {r4}
	pop {r1}
	bx r1
	.pool
	thumb_func_end GetBgAttribute

	thumb_func_start ChangeBgX
@ u32 ChangeBgX(u8 bg, u32 value, u8 op)
ChangeBgX: @ 8001D04
	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 IsInvalidBg_
	cmp r0, 0
	bne _08001D28
	adds r0, r4, 0
	movs r1, 0x1
	bl GetBgControlAttribute
	lsls r0, 16
	cmp r0, 0
	bne _08001D2E
_08001D28:
	movs r0, 0x1
	negs r0, r0
	b _08001E34
_08001D2E:
	cmp r5, 0x1
	beq _08001D4C
	cmp r5, 0x1
	ble _08001D3A
	cmp r5, 0x2
	beq _08001D60
_08001D3A:
	ldr r0, =0x030008f8
	lsls r1, r4, 4
	adds r0, 0x8
	adds r0, r1, r0
	str r6, [r0]
	adds r5, r1, 0
	b _08001D70
	.pool
_08001D4C:
	ldr r0, =0x030008f8
	lsls r2, r4, 4
	adds r0, 0x8
	adds r0, r2, r0
	ldr r1, [r0]
	adds r1, r6
	b _08001D6C
	.pool
_08001D60:
	ldr r0, =0x030008f8
	lsls r2, r4, 4
	adds r0, 0x8
	adds r0, r2, r0
	ldr r1, [r0]
	subs r1, r6
_08001D6C:
	str r1, [r0]
	adds r5, r2, 0
_08001D70:
	bl GetBgMode
	lsls r0, 24
	lsrs r0, 24
	cmp r4, 0x1
	beq _08001DAC
	cmp r4, 0x1
	bgt _08001D8C
	cmp r4, 0
	beq _08001D96
	b _08001E2C
	.pool
_08001D8C:
	cmp r4, 0x2
	beq _08001DC0
	cmp r4, 0x3
	beq _08001DF8
	b _08001E2C
_08001D96:
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x8]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x10
	bl SetGpuReg
	b _08001E2C
	.pool
_08001DAC:
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x18]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x14
	bl SetGpuReg
	b _08001E2C
	.pool
_08001DC0:
	cmp r0, 0
	bne _08001DD8
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x28]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x18
	bl SetGpuReg
	b _08001E2C
	.pool
_08001DD8:
	ldr r0, =0x030008f8
	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 _08001E2C
	.pool
_08001DF8:
	cmp r0, 0
	bne _08001E10
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x38]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x1C
	bl SetGpuReg
	b _08001E2C
	.pool
_08001E10:
	cmp r0, 0x2
	bne _08001E2C
	ldr r0, =0x030008f8
	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
_08001E2C:
	ldr r0, =0x030008f8
	adds r0, 0x8
	adds r0, r5, r0
	ldr r0, [r0]
_08001E34:
	pop {r4-r6}
	pop {r1}
	bx r1
	.pool
	thumb_func_end ChangeBgX

	thumb_func_start GetBgX
@ u32 GetBgX(u8 bg)
GetBgX: @ 8001E40
	push {r4,lr}
	lsls r0, 24
	lsrs r0, 24
	adds r4, r0, 0
	bl IsInvalidBg_
	cmp r0, 0
	bne _08001E70
	adds r0, r4, 0
	movs r1, 0x1
	bl GetBgControlAttribute
	lsls r0, 16
	cmp r0, 0
	beq _08001E70
	ldr r0, =0x030008f8
	lsls r1, r4, 4
	adds r0, 0x8
	adds r1, r0
	ldr r0, [r1]
	b _08001E74
	.pool
_08001E70:
	movs r0, 0x1
	negs r0, r0
_08001E74:
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end GetBgX

	thumb_func_start ChangeBgY
@ u32 ChangeBgY(u8 bg, u32 value, u8 op)
ChangeBgY: @ 8001E7C
	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 IsInvalidBg_
	cmp r0, 0
	bne _08001EA0
	adds r0, r4, 0
	movs r1, 0x1
	bl GetBgControlAttribute
	lsls r0, 16
	cmp r0, 0
	bne _08001EA6
_08001EA0:
	movs r0, 0x1
	negs r0, r0
	b _08001FAC
_08001EA6:
	cmp r5, 0x1
	beq _08001EC4
	cmp r5, 0x1
	ble _08001EB2
	cmp r5, 0x2
	beq _08001ED8
_08001EB2:
	ldr r0, =0x030008f8
	lsls r1, r4, 4
	adds r0, 0xC
	adds r0, r1, r0
	str r6, [r0]
	adds r5, r1, 0
	b _08001EE8
	.pool
_08001EC4:
	ldr r0, =0x030008f8
	lsls r2, r4, 4
	adds r0, 0xC
	adds r0, r2, r0
	ldr r1, [r0]
	adds r1, r6
	b _08001EE4
	.pool
_08001ED8:
	ldr r0, =0x030008f8
	lsls r2, r4, 4
	adds r0, 0xC
	adds r0, r2, r0
	ldr r1, [r0]
	subs r1, r6
_08001EE4:
	str r1, [r0]
	adds r5, r2, 0
_08001EE8:
	bl GetBgMode
	lsls r0, 24
	lsrs r0, 24
	cmp r4, 0x1
	beq _08001F24
	cmp r4, 0x1
	bgt _08001F04
	cmp r4, 0
	beq _08001F0E
	b _08001FA4
	.pool
_08001F04:
	cmp r4, 0x2
	beq _08001F38
	cmp r4, 0x3
	beq _08001F70
	b _08001FA4
_08001F0E:
	ldr r0, =0x030008f8
	ldr r0, [r0, 0xC]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x12
	bl SetGpuReg
	b _08001FA4
	.pool
_08001F24:
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x1C]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x16
	bl SetGpuReg
	b _08001FA4
	.pool
_08001F38:
	cmp r0, 0
	bne _08001F50
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x2C]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x1A
	bl SetGpuReg
	b _08001FA4
	.pool
_08001F50:
	ldr r0, =0x030008f8
	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 _08001FA4
	.pool
_08001F70:
	cmp r0, 0
	bne _08001F88
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x3C]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x1E
	bl SetGpuReg
	b _08001FA4
	.pool
_08001F88:
	cmp r0, 0x2
	bne _08001FA4
	ldr r0, =0x030008f8
	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
_08001FA4:
	ldr r0, =0x030008f8
	adds r0, 0xC
	adds r0, r5, r0
	ldr r0, [r0]
_08001FAC:
	pop {r4-r6}
	pop {r1}
	bx r1
	.pool
	thumb_func_end ChangeBgY

	thumb_func_start ChangeBgY_ScreenOff
@ u32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op)
ChangeBgY_ScreenOff: @ 8001FB8
	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 IsInvalidBg_
	cmp r0, 0
	bne _08001FDC
	adds r0, r4, 0
	movs r1, 0x1
	bl GetBgControlAttribute
	lsls r0, 16
	cmp r0, 0
	bne _08001FE2
_08001FDC:
	movs r0, 0x1
	negs r0, r0
	b _080020E8
_08001FE2:
	cmp r5, 0x1
	beq _08002000
	cmp r5, 0x1
	ble _08001FEE
	cmp r5, 0x2
	beq _08002014
_08001FEE:
	ldr r0, =0x030008f8
	lsls r1, r4, 4
	adds r0, 0xC
	adds r0, r1, r0
	str r6, [r0]
	adds r5, r1, 0
	b _08002024
	.pool
_08002000:
	ldr r0, =0x030008f8
	lsls r2, r4, 4
	adds r0, 0xC
	adds r0, r2, r0
	ldr r1, [r0]
	adds r1, r6
	b _08002020
	.pool
_08002014:
	ldr r0, =0x030008f8
	lsls r2, r4, 4
	adds r0, 0xC
	adds r0, r2, r0
	ldr r1, [r0]
	subs r1, r6
_08002020:
	str r1, [r0]
	adds r5, r2, 0
_08002024:
	bl GetBgMode
	lsls r0, 24
	lsrs r0, 24
	cmp r4, 0x1
	beq _08002060
	cmp r4, 0x1
	bgt _08002040
	cmp r4, 0
	beq _0800204A
	b _080020E0
	.pool
_08002040:
	cmp r4, 0x2
	beq _08002074
	cmp r4, 0x3
	beq _080020AC
	b _080020E0
_0800204A:
	ldr r0, =0x030008f8
	ldr r0, [r0, 0xC]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x12
	bl SetGpuReg_ForcedBlank
	b _080020E0
	.pool
_08002060:
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x1C]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x16
	bl SetGpuReg_ForcedBlank
	b _080020E0
	.pool
_08002074:
	cmp r0, 0
	bne _0800208C
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x2C]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x1A
	bl SetGpuReg_ForcedBlank
	b _080020E0
	.pool
_0800208C:
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x2C]
	lsrs r1, r0, 16
	lsls r0, 16
	lsrs r4, r0, 16
	movs r0, 0x2E
	bl SetGpuReg_ForcedBlank
	movs r0, 0x2C
	adds r1, r4, 0
	bl SetGpuReg_ForcedBlank
	b _080020E0
	.pool
_080020AC:
	cmp r0, 0
	bne _080020C4
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x3C]
	lsls r0, 8
	lsrs r1, r0, 16
	movs r0, 0x1E
	bl SetGpuReg_ForcedBlank
	b _080020E0
	.pool
_080020C4:
	cmp r0, 0x2
	bne _080020E0
	ldr r0, =0x030008f8
	ldr r0, [r0, 0x3C]
	lsrs r1, r0, 16
	lsls r0, 16
	lsrs r4, r0, 16
	movs r0, 0x3E
	bl SetGpuReg_ForcedBlank
	movs r0, 0x3C
	adds r1, r4, 0
	bl SetGpuReg_ForcedBlank
_080020E0:
	ldr r0, =0x030008f8
	adds r0, 0xC
	adds r0, r5, r0
	ldr r0, [r0]
_080020E8:
	pop {r4-r6}
	pop {r1}
	bx r1
	.pool
	thumb_func_end ChangeBgY_ScreenOff

	thumb_func_start GetBgY
@ u32 GetBgY(u8 bg)
GetBgY: @ 80020F4
	push {r4,lr}
	lsls r0, 24
	lsrs r0, 24
	adds r4, r0, 0
	bl IsInvalidBg_
	cmp r0, 0
	bne _08002124
	adds r0, r4, 0
	movs r1, 0x1
	bl GetBgControlAttribute
	lsls r0, 16
	cmp r0, 0
	beq _08002124
	ldr r0, =0x030008f8
	lsls r1, r4, 4
	adds r0, 0xC
	adds r1, r0
	ldr r0, [r1]
	b _08002128
	.pool
_08002124:
	movs r0, 0x1
	negs r0, r0
_08002128:
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end GetBgY

	thumb_func_start SetBgAffine
@ void SetBgAffine(u8 bg, u16 srcCenterX, u16 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle)
SetBgAffine: @ 8002130
	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
@ u8 Unused_AdjustBgMosaic(u8 a1, u8 a2)
Unused_AdjustBgMosaic: @ 8002170
	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 _080021C4
	lsls r0, r6, 2
	ldr r1, =_080021A8
	adds r0, r1
	ldr r0, [r0]
	mov pc, r0
	.pool
	.align 2, 0
_080021A8:
	.4byte _080021C4
	.4byte _080021CC
	.4byte _080021D2
	.4byte _080021E4
	.4byte _080021FA
	.4byte _08002200
	.4byte _08002212
_080021C4:
	movs r3, 0xF
	ands r3, r4
	lsrs r2, r4, 4
	b _08002226
_080021CC:
	movs r3, 0xF
	ands r3, r4
	b _08002226
_080021D2:
	lsls r0, r3, 16
	asrs r0, 16
	adds r0, r4
	cmp r0, 0xF
	ble _080021E0
	movs r3, 0xF
	b _08002226
_080021E0:
	adds r0, r3, r4
	b _080021F4
_080021E4:
	lsls r0, r3, 16
	asrs r0, 16
	subs r0, r4
	cmp r0, 0
	bge _080021F2
	movs r3, 0
	b _08002226
_080021F2:
	subs r0, r3, r4
_080021F4:
	lsls r0, 16
	lsrs r3, r0, 16
	b _08002226
_080021FA:
	movs r2, 0xF
	ands r2, r4
	b _08002226
_08002200:
	lsls r0, r2, 16
	asrs r0, 16
	adds r0, r4
	cmp r0, 0xF
	ble _0800220E
	movs r2, 0xF
	b _08002226
_0800220E:
	adds r0, r2, r4
	b _08002222
_08002212:
	lsls r0, r2, 16
	asrs r0, 16
	subs r0, r4
	cmp r0, 0
	bge _08002220
	movs r2, 0
	b _08002226
_08002220:
	subs r0, r2, r4
_08002222:
	lsls r0, 16
	lsrs r2, r0, 16
_08002226:
	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
@ void SetBgTilemapBuffer(u8 bg, void *tilemap)
SetBgTilemapBuffer: @ 8002250
	push {r4,r5,lr}
	adds r5, r1, 0
	lsls r0, 24
	lsrs r4, r0, 24
	adds r0, r4, 0
	bl IsInvalidBg_
	cmp r0, 0
	bne _0800227A
	adds r0, r4, 0
	movs r1, 0x1
	bl GetBgControlAttribute
	lsls r0, 16
	cmp r0, 0
	beq _0800227A
	ldr r0, =0x030008f8
	lsls r1, r4, 4
	adds r0, 0x4
	adds r1, r0
	str r5, [r1]
_0800227A:
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end SetBgTilemapBuffer

	thumb_func_start UnsetBgTilemapBuffer
@ void UnsetBgTilemapBuffer(u8 bg)
UnsetBgTilemapBuffer: @ 8002284
	push {r4,r5,lr}
	lsls r0, 24
	lsrs r4, r0, 24
	adds r0, r4, 0
	bl IsInvalidBg_
	adds r5, r0, 0
	cmp r5, 0
	bne _080022AE
	adds r0, r4, 0
	movs r1, 0x1
	bl GetBgControlAttribute
	lsls r0, 16
	cmp r0, 0
	beq _080022AE
	ldr r0, =0x030008f8
	lsls r1, r4, 4
	adds r0, 0x4
	adds r1, r0
	str r5, [r1]
_080022AE:
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end UnsetBgTilemapBuffer

	thumb_func_start GetBgTilemapBuffer
@ void *GetBgTilemapBuffer(u8 bg)
GetBgTilemapBuffer: @ 80022B8
	push {r4,lr}
	lsls r0, 24
	lsrs r0, 24
	adds r4, r0, 0
	bl IsInvalidBg_
	cmp r0, 0
	bne _080022E8
	adds r0, r4, 0
	movs r1, 0x1
	bl GetBgControlAttribute
	lsls r0, 16
	cmp r0, 0
	beq _080022E8
	ldr r0, =0x030008f8
	lsls r1, r4, 4
	adds r0, 0x4
	adds r1, r0
	ldr r0, [r1]
	b _080022EA
	.pool
_080022E8:
	movs r0, 0
_080022EA:
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end GetBgTilemapBuffer

	thumb_func_start CopyToBgTilemapBuffer
@ void CopyToBgTilemapBuffer(u8 bg, void *src, u16 mode, u16 destOffset)
CopyToBgTilemapBuffer: @ 80022F0
	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 IsInvalidBg_
	cmp r0, 0
	bne _08002358
	adds r0, r4, 0
	bl IsTileMapOutsideWram
	cmp r0, 0
	bne _08002358
	cmp r6, 0
	beq _08002340
	ldr r0, =0x030008f8
	lsls r1, r4, 4
	adds r0, 0x4
	adds r1, r0
	lsls r0, r5, 1
	ldr r1, [r1]
	adds r1, r0
	lsrs r2, r7, 17
	mov r0, r10
	bl CpuSet
	b _08002358
	.pool
_08002340:
	ldr r0, =0x030008f8
	mov r2, r9
	lsls r1, r2, 4
	adds r0, 0x4
	adds r1, r0
	mov r2, r8
	lsls r0, r2, 1
	ldr r1, [r1]
	adds r1, r0
	mov r0, r10
	bl LZ77UnCompWram
_08002358:
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end CopyToBgTilemapBuffer

	thumb_func_start CopyBgTilemapBufferToVram
@ void CopyBgTilemapBufferToVram(u8 bg)
CopyBgTilemapBufferToVram: @ 800236C
	push {r4,lr}
	sub sp, 0x4
	lsls r0, 24
	lsrs r4, r0, 24
	adds r0, r4, 0
	bl IsInvalidBg_
	cmp r0, 0
	bne _080023C8
	adds r0, r4, 0
	bl IsTileMapOutsideWram
	cmp r0, 0
	bne _080023C8
	adds r0, r4, 0
	bl GetBgType
	cmp r0, 0
	beq _0800239A
	cmp r0, 0x1
	beq _080023A6
	movs r2, 0
	b _080023B2
_0800239A:
	adds r0, r4, 0
	movs r1, 0
	bl GetBgMetricTextMode
	lsls r0, 27
	b _080023B0
_080023A6:
	adds r0, r4, 0
	movs r1, 0
	bl GetBgMetricAffineMode
	lsls r0, 24
_080023B0:
	lsrs r2, r0, 16
_080023B2:
	ldr r0, =0x030008f8
	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
_080023C8:
	add sp, 0x4
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end CopyBgTilemapBufferToVram

	thumb_func_start CopyToBgTilemapBufferRect
@ void CopyToBgTilemapBufferRect(u8 bg, void *src, u8 destX, u8 destY, u8 width, u8 height)
CopyToBgTilemapBufferRect: @ 80023D4
	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 IsInvalidBg_
	cmp r0, 0
	bne _080024C4
	adds r0, r5, 0
	bl IsTileMapOutsideWram
	cmp r0, 0
	bne _080024C4
	adds r0, r5, 0
	bl GetBgType
	cmp r0, 0
	beq _08002422
	cmp r0, 0x1
	beq _08002470
	b _080024C4
_08002422:
	mov r4, r8
	adds r3, r7, 0
	adds r0, r3, r6
	cmp r3, r0
	bge _080024C4
	mov r12, r0
	lsls r1, r5, 4
	ldr r0, =0x030008fc
	adds r1, r0
	mov r8, r1
_08002436:
	mov r2, r10
	mov r1, r9
	adds r0, r2, r1
	adds r7, r3, 0x1
	cmp r2, r0
	bge _08002460
	mov r1, r8
	ldr r6, [r1]
	lsls r5, r3, 5
	adds r3, r0, 0
_0800244A:
	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 _0800244A
_08002460:
	lsls r0, r7, 16
	lsrs r3, r0, 16
	cmp r3, r12
	blt _08002436
	b _080024C4
	.pool
_08002470:
	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 _080024C4
	mov r12, r0
	lsls r5, 4
	mov r8, r5
_0800248E:
	mov r2, r10
	mov r1, r9
	adds r0, r2, r1
	adds r7, r3, 0x1
	cmp r2, r0
	bge _080024BC
	ldr r6, =0x030008fc
	add r6, r8
	ldr r1, [sp]
	adds r5, r3, 0
	muls r5, r1
	adds r3, r0, 0
_080024A6:
	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 _080024A6
_080024BC:
	lsls r0, r7, 16
	lsrs r3, r0, 16
	cmp r3, r12
	blt _0800248E
_080024C4:
	add sp, 0x4
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end CopyToBgTilemapBufferRect

	thumb_func_start CopyToBgTilemapBufferRect_ChangePalette
@ void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette)
CopyToBgTilemapBufferRect_ChangePalette: @ 80024D8
	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
@ 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)
CopyRectToBgTilemapBufferRect: @ 800251C
	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 IsInvalidBg_
	cmp r0, 0
	beq _08002592
	b _080026EE
_08002592:
	ldr r0, [sp, 0x4]
	bl IsTileMapOutsideWram
	cmp r0, 0
	beq _0800259E
	b _080026EE
_0800259E:
	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 _080025D8
	cmp r0, 0x1
	beq _08002674
	b _080026EE
_080025D8:
	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 _080025F0
	b _080026EE
_080025F0:
	ldr r2, [sp, 0x18]
	subs r2, r7, r2
	str r2, [sp, 0x34]
	str r0, [sp, 0x38]
_080025F8:
	ldr r4, [sp, 0x14]
	ldr r7, [sp, 0x18]
	adds r0, r4, r7
	adds r1, r5, 0x1
	str r1, [sp, 0x3C]
	cmp r4, r0
	bge _0800265A
	ldr r2, [sp, 0x4]
	lsls r0, r2, 4
	ldr r1, =0x030008fc
	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
_0800261E:
	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 _0800261E
_0800265A:
	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 _080025F8
	b _080026EE
	.pool
_08002674:
	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 _080026EE
	ldr r2, [sp, 0x18]
	subs r2, r7, r2
	str r2, [sp, 0x34]
	str r0, [sp, 0x38]
	ldr r7, =0x030008fc
	mov r10, r7
	ldr r0, [sp, 0x4]
	lsls r0, 4
	mov r8, r0
_080026A8:
	ldr r4, [sp, 0x14]
	ldr r1, [sp, 0x18]
	adds r0, r4, r1
	adds r2, r5, 0x1
	str r2, [sp, 0x3C]
	cmp r4, r0
	bge _080026DE
	mov r3, r8
	add r3, r10
	mov r7, r9
	muls r7, r5
	mov r12, r7
	adds r2, r0, 0
_080026C2:
	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 _080026C2
_080026DE:
	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 _080026A8
_080026EE:
	add sp, 0x40
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end CopyRectToBgTilemapBufferRect

	thumb_func_start FillBgTilemapBufferRect_Palette0
@ void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height)
FillBgTilemapBufferRect_Palette0: @ 8002704
	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 IsInvalidBg_
	cmp r0, 0
	bne _080027F0
	adds r0, r6, 0
	bl IsTileMapOutsideWram
	cmp r0, 0
	bne _080027F0
	adds r0, r6, 0
	bl GetBgType
	cmp r0, 0
	beq _08002756
	cmp r0, 0x1
	beq _080027A0
	b _080027F0
_08002756:
	adds r3, r7, 0
	adds r5, r3, r5
	cmp r3, r5
	bge _080027F0
	adds r7, r5, 0
	lsls r1, r6, 4
	ldr r0, =0x030008fc
	adds r1, r0
	mov r12, r1
_08002768:
	mov r2, r10
	mov r1, r9
	adds r0, r2, r1
	adds r6, r3, 0x1
	cmp r2, r0
	bge _08002790
	mov r5, r12
	ldr r4, [r5]
	lsls r3, 5
	adds r1, r0, 0
_0800277C:
	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 _0800277C
_08002790:
	lsls r0, r6, 16
	lsrs r3, r0, 16
	cmp r3, r7
	blt _08002768
	b _080027F0
	.pool
_080027A0:
	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 _080027F0
	adds r7, r5, 0
	lsls r6, 4
	mov r12, r6
_080027BC:
	mov r2, r10
	mov r1, r9
	adds r0, r2, r1
	adds r6, r3, 0x1
	cmp r2, r0
	bge _080027E8
	ldr r5, =0x030008fc
	add r5, r12
	ldr r1, [sp]
	adds r4, r3, 0
	muls r4, r1
	adds r3, r0, 0
_080027D4:
	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 _080027D4
_080027E8:
	lsls r0, r6, 16
	lsrs r3, r0, 16
	cmp r3, r7
	blt _080027BC
_080027F0:
	add sp, 0x4
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end FillBgTilemapBufferRect_Palette0

	thumb_func_start FillBgTilemapBufferRect
@ void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette)
FillBgTilemapBufferRect: @ 8002804
	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
@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, u16 tileNumDelta)
WriteSequenceToBgTilemapBuffer: @ 8002840
	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 IsInvalidBg_
	cmp r0, 0
	beq _0800288E
	b _080029D4
_0800288E:
	mov r0, r9
	bl IsTileMapOutsideWram
	cmp r0, 0
	beq _0800289A
	b _080029D4
_0800289A:
	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 _080028D4
	cmp r0, 0x1
	beq _0800295C
	b _080029D4
_080028D4:
	adds r5, r7, 0
	adds r0, r5, r4
	cmp r5, r0
	bge _080029D4
	str r0, [sp, 0x24]
	add r7, sp, 0x4
_080028E0:
	ldr r4, [sp, 0x8]
	mov r1, r10
	adds r0, r4, r1
	adds r2, r5, 0x1
	mov r8, r2
	cmp r4, r0
	bge _08002944
	mov r3, r9
	lsls r1, r3, 4
	ldr r0, =0x030008fc
	adds r6, r1, r0
_080028F6:
	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, =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 _080028F6
_08002944:
	mov r1, r8
	lsls r0, r1, 16
	lsrs r5, r0, 16
	ldr r2, [sp, 0x24]
	cmp r5, r2
	blt _080028E0
	b _080029D4
	.pool
_0800295C:
	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 _080029D4
	str r0, [sp, 0x24]
	mov r3, r9
	lsls r3, 4
	mov r12, r3
_0800297A:
	ldr r4, [sp, 0x8]
	mov r7, r10
	adds r0, r4, r7
	adds r1, r5, 0x1
	mov r8, r1
	cmp r4, r0
	bge _080029C8
	ldr r2, =0x030008fc
	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, =0x000003ff
	adds r5, r7, 0
	adds r6, r0, 0
_080029A2:
	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 _080029A2
_080029C8:
	mov r1, r8
	lsls r0, r1, 16
	lsrs r5, r0, 16
	ldr r2, [sp, 0x24]
	cmp r5, r2
	blt _0800297A
_080029D4:
	add sp, 0x2C
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end WriteSequenceToBgTilemapBuffer

	thumb_func_start GetBgMetricTextMode
@ u16 GetBgMetricTextMode(u8 bg, u8 whichMetric)
GetBgMetricTextMode: @ 80029EC
	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 _08002A2C
	cmp r4, 0x1
	bgt _08002A10
	cmp r4, 0
	beq _08002A16
	b _08002A52
_08002A10:
	cmp r5, 0x2
	beq _08002A3E
	b _08002A52
_08002A16:
	cmp r0, 0x2
	bgt _08002A24
	cmp r0, 0x1
	bge _08002A4E
_08002A1E:
	cmp r0, 0
	beq _08002A46
	b _08002A52
_08002A24:
	cmp r0, 0x3
	bne _08002A52
	movs r0, 0x4
	b _08002A54
_08002A2C:
	cmp r0, 0x1
	beq _08002A4E
	cmp r0, 0x1
	ble _08002A1E
	cmp r0, 0x2
	beq _08002A46
	cmp r0, 0x3
	bne _08002A52
	b _08002A4E
_08002A3E:
	cmp r0, 0
	blt _08002A52
	cmp r0, 0x1
	bgt _08002A4A
_08002A46:
	movs r0, 0x1
	b _08002A54
_08002A4A:
	cmp r0, 0x3
	bgt _08002A52
_08002A4E:
	movs r0, 0x2
	b _08002A54
_08002A52:
	movs r0, 0
_08002A54:
	pop {r4,r5}
	pop {r1}
	bx r1
	thumb_func_end GetBgMetricTextMode

	thumb_func_start GetBgMetricAffineMode
@ u16 GetBgMetricAffineMode(u8 bg, u8 whichMetric)
GetBgMetricAffineMode: @ 8002A5C
	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 _08002A84
	cmp r4, 0
	blt _08002AAC
	cmp r4, 0x2
	bgt _08002AAC
	movs r0, 0x10
	lsls r0, r1
	b _08002AAE
_08002A84:
	cmp r1, 0x1
	beq _08002AA0
	cmp r1, 0x1
	bgt _08002A92
	cmp r1, 0
	beq _08002A9C
	b _08002AAC
_08002A92:
	cmp r0, 0x2
	beq _08002AA4
	cmp r0, 0x3
	beq _08002AA8
	b _08002AAC
_08002A9C:
	movs r0, 0x1
	b _08002AAE
_08002AA0:
	movs r0, 0x4
	b _08002AAE
_08002AA4:
	movs r0, 0x10
	b _08002AAE
_08002AA8:
	movs r0, 0x40
	b _08002AAE
_08002AAC:
	movs r0, 0
_08002AAE:
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end GetBgMetricAffineMode

	thumb_func_start GetTileMapIndexFromCoords
@ u32 GetTileMapIndexFromCoords(u32 x, u32 y, u32 screenSize, u32 screenWidth, u32 screenHeight)
GetTileMapIndexFromCoords: @ 8002AB4
	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 _08002AD8
	cmp r2, 0x1
	ble _08002AE0
	cmp r2, 0x2
	beq _08002AE0
	cmp r2, 0x3
	bne _08002AE0
	cmp r1, 0x1F
	ble _08002AD8
	adds r1, 0x20
_08002AD8:
	cmp r4, 0x1F
	ble _08002AE0
	subs r4, 0x20
	adds r1, 0x20
_08002AE0:
	lsls r0, r1, 5
	adds r0, r4
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end GetTileMapIndexFromCoords

	thumb_func_start CopyTileMapEntry
@ void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u16 tileOffset, u32 palette2)
CopyTileMapEntry: @ 8002AEC
	push {r4-r6,lr}
	adds r4, r0, 0
	adds r6, r1, 0
	ldr r5, [sp, 0x10]
	cmp r2, 0x10
	beq _08002B14
	cmp r2, 0x10
	bgt _08002B34
	cmp r2, 0
	blt _08002B34
	ldrh r0, [r4]
	adds r0, r3
	ldr r3, =0x00000fff
	adds r1, r3, 0
	ands r0, r1
	adds r1, r2, r5
	lsls r1, 12
	b _08002B3A
	.pool
_08002B14:
	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, =0x000003ff
	adds r1, r3, 0
	ands r0, r1
	orrs r0, r2
	b _08002B3C
	.pool
_08002B34:
	ldrh r0, [r4]
	adds r0, r3
	lsls r1, r5, 12
_08002B3A:
	adds r0, r1
_08002B3C:
	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
@ u16 GetBgType(u8 bg)
GetBgType: @ 8002B48
	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 _08002B76
	cmp r4, 0x2
	ble _08002B66
	cmp r4, 0x3
	beq _08002B86
	b _08002B8E
_08002B66:
	cmp r5, 0
	blt _08002B8E
	cmp r0, 0x1
	bgt _08002B8E
	cmp r0, 0
	blt _08002B8E
_08002B72:
	movs r0, 0
	b _08002B90
_08002B76:
	cmp r0, 0
	beq _08002B72
	cmp r0, 0
	blt _08002B8E
	cmp r0, 0x2
	bgt _08002B8E
_08002B82:
	movs r0, 0x1
	b _08002B90
_08002B86:
	cmp r0, 0
	beq _08002B72
	cmp r0, 0x2
	beq _08002B82
_08002B8E:
	ldr r0, =0x0000ffff
_08002B90:
	pop {r4,r5}
	pop {r1}
	bx r1
	.pool
	thumb_func_end GetBgType

	thumb_func_start IsInvalidBg_
@ bool8 IsInvalidBg_(u8 bg)
IsInvalidBg_: @ 8002B9C
	push {lr}
	lsls r0, 24
	lsrs r0, 24
	cmp r0, 0x3
	bhi _08002BAA
	movs r0, 0
	b _08002BAC
_08002BAA:
	movs r0, 0x1
_08002BAC:
	pop {r1}
	bx r1
	thumb_func_end IsInvalidBg_

	thumb_func_start IsTileMapOutsideWram
@ bool8 IsTileMapOutsideWram(u8 bg)
IsTileMapOutsideWram: @ 8002BB0
	push {lr}
	lsls r0, 24
	ldr r1, =0x030008f8
	lsrs r0, 20
	adds r1, 0x4
	adds r0, r1
	ldr r1, [r0]
	ldr r0, =0x03008000
	cmp r1, r0
	bhi _08002BD4
	cmp r1, 0
	beq _08002BD4
	movs r0, 0
	b _08002BD6
	.pool
_08002BD4:
	movs r0, 0x1
_08002BD6:
	pop {r1}
	bx r1
	thumb_func_end IsTileMapOutsideWram