summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiegoisawesome <diego@domoreaweso.me>2017-03-08 14:44:44 -0600
committerDiegoisawesome <diego@domoreaweso.me>2017-03-08 14:44:44 -0600
commit1d95689766932d2b8f1ecc5d992ec8ece0b4b2ed (patch)
tree254d3a339f83f666f0b4797c4177403145b982f8
parentc47e109fbf6de6c3848c3a4fef1e9d931a536e89 (diff)
Continue disassembling text.s
-rw-r--r--asm/text.s807
-rw-r--r--include/text.h4
-rw-r--r--src/text.c864
-rw-r--r--sym_bss.txt8
4 files changed, 863 insertions, 820 deletions
diff --git a/asm/text.s b/asm/text.s
index 92d3bb40a..659b4c622 100644
--- a/asm/text.s
+++ b/asm/text.s
@@ -5,811 +5,6 @@
.text
- thumb_func_start RunTextPrinters
-@ void RunTextPrinters()
-RunTextPrinters: @ 8004778
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, =gUnknown_03002F84
- ldrb r0, [r0]
- cmp r0, 0
- bne _080047F6
- ldr r0, =gTextPrinters
- movs r6, 0
- adds r5, r0, 0x4
- mov r8, r0
- movs r7, 0x1F
-_08004790:
- ldrb r0, [r5, 0x17]
- cmp r0, 0
- beq _080047E8
- mov r0, r8
- bl RenderFont
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- beq _080047E4
- cmp r4, 0x1
- bgt _080047B8
- cmp r4, 0
- beq _080047BE
- b _080047E8
- .pool
-_080047B8:
- cmp r4, 0x3
- beq _080047C6
- b _080047E8
-_080047BE:
- ldrb r0, [r5]
- movs r1, 0x2
- bl CopyWindowToVram
-_080047C6:
- ldr r1, =gTextPrinters
- adds r0, r1, 0
- adds r0, 0x10
- adds r0, r6, r0
- ldr r2, [r0]
- cmp r2, 0
- beq _080047E8
- adds r0, r6, r1
- adds r1, r4, 0
- bl _call_via_r2
- b _080047E8
- .pool
-_080047E4:
- movs r0, 0
- strb r0, [r5, 0x17]
-_080047E8:
- adds r6, 0x24
- adds r5, 0x24
- movs r0, 0x24
- add r8, r0
- subs r7, 0x1
- cmp r7, 0
- bge _08004790
-_080047F6:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end RunTextPrinters
-
- thumb_func_start IsTextPrinterActive
-@ bool8 IsTextPrinterActive(u8 id)
-IsTextPrinterActive: @ 8004800
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTextPrinters
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x1B]
- bx lr
- .pool
- thumb_func_end IsTextPrinterActive
-
- thumb_func_start RenderFont
-@ u16 RenderFont(struct TextPrinter *textPrinter)
-RenderFont: @ 8004818
- push {r4,lr}
- adds r4, r0, 0
-_0800481C:
- ldrb r1, [r4, 0x5]
- ldr r0, =gFonts
- ldr r2, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- beq _0800481C
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end RenderFont
-
- thumb_func_start GenerateFontHalfRowLookupTable
-@ void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
-GenerateFontHalfRowLookupTable: @ 8004844
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r3, =gUnknown_03000948
- ldr r4, =gUnknown_030009EA
- strh r1, [r4]
- ldr r4, =gUnknown_030009EC
- strh r0, [r4]
- ldr r4, =gUnknown_030009EE
- strh r2, [r4]
- lsls r5, r1, 12
- lsls r6, r0, 12
- lsls r4, r2, 12
- mov r8, r4
- lsls r7, r1, 8
- str r7, [sp]
- lsls r4, r1, 4
- mov r9, r4
- orrs r7, r4
- str r7, [sp, 0x4]
- orrs r7, r1
- adds r4, r5, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- adds r4, r6, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- mov r4, r8
- orrs r7, r4
- strh r7, [r3]
- adds r3, 0x2
- lsls r7, r0, 8
- mov r10, r7
- mov r4, r10
- mov r7, r9
- orrs r4, r7
- str r4, [sp, 0x8]
- adds r7, r4, 0
- orrs r7, r1
- adds r4, r5, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- adds r4, r6, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- mov r4, r8
- orrs r7, r4
- strh r7, [r3]
- adds r3, 0x2
- lsls r7, r2, 8
- mov r12, r7
- mov r4, r12
- mov r7, r9
- orrs r4, r7
- str r4, [sp, 0xC]
- adds r7, r4, 0
- orrs r7, r1
- adds r4, r5, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- adds r4, r6, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- mov r4, r8
- orrs r7, r4
- strh r7, [r3]
- adds r3, 0x2
- lsls r7, r0, 4
- mov r9, r7
- ldr r4, [sp]
- orrs r4, r7
- str r4, [sp, 0x10]
- adds r7, r4, 0
- orrs r7, r1
- adds r4, r5, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- adds r4, r6, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- mov r4, r8
- orrs r7, r4
- strh r7, [r3]
- adds r3, 0x2
- mov r7, r10
- adds r4, r7, 0
- mov r7, r9
- orrs r4, r7
- str r4, [sp, 0x14]
- adds r7, r4, 0
- orrs r7, r1
- adds r4, r5, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- adds r4, r6, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- mov r4, r8
- orrs r7, r4
- strh r7, [r3]
- adds r3, 0x2
- mov r7, r12
- adds r4, r7, 0
- mov r7, r9
- orrs r4, r7
- str r4, [sp, 0x18]
- adds r7, r4, 0
- orrs r7, r1
- adds r4, r5, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- adds r4, r6, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- mov r4, r8
- orrs r7, r4
- strh r7, [r3]
- adds r3, 0x2
- lsls r7, r2, 4
- mov r9, r7
- mov r4, r9
- ldr r7, [sp]
- orrs r7, r4
- str r7, [sp, 0x1C]
- orrs r7, r1
- adds r4, r5, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- adds r4, r6, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- mov r4, r8
- orrs r7, r4
- strh r7, [r3]
- adds r3, 0x2
- mov r7, r9
- mov r4, r10
- orrs r4, r7
- str r4, [sp, 0x20]
- adds r7, r4, 0
- orrs r7, r1
- adds r4, r5, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- adds r4, r6, 0
- orrs r4, r7
- strh r4, [r3]
- adds r3, 0x2
- mov r4, r8
- orrs r7, r4
- strh r7, [r3]
- adds r3, 0x2
- mov r4, r12
- mov r7, r9
- orrs r4, r7
- adds r7, r4, 0
- orrs r7, r1
- adds r1, r5, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- adds r1, r6, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- mov r1, r8
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- ldr r7, [sp, 0x4]
- orrs r7, r0
- adds r1, r5, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- adds r1, r6, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- mov r1, r8
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- ldr r7, [sp, 0x8]
- orrs r7, r0
- adds r1, r5, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- adds r1, r6, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- mov r1, r8
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- ldr r7, [sp, 0xC]
- orrs r7, r0
- adds r1, r5, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- adds r1, r6, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- mov r1, r8
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- ldr r7, [sp, 0x10]
- orrs r7, r0
- adds r1, r5, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- adds r1, r6, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- mov r1, r8
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- ldr r7, [sp, 0x14]
- orrs r7, r0
- adds r1, r5, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- adds r1, r6, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- mov r1, r8
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- ldr r7, [sp, 0x18]
- orrs r7, r0
- adds r1, r5, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- adds r1, r6, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- mov r1, r8
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- ldr r7, [sp, 0x1C]
- orrs r7, r0
- adds r1, r5, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- adds r1, r6, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- mov r1, r8
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- ldr r7, [sp, 0x20]
- orrs r7, r0
- adds r1, r5, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- adds r1, r6, 0
- orrs r1, r7
- strh r1, [r3]
- adds r3, 0x2
- mov r1, r8
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- adds r7, r4, 0
- orrs r7, r0
- adds r0, r5, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- adds r0, r6, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- adds r7, r2, 0
- ldr r0, [sp, 0x4]
- orrs r7, r0
- adds r0, r5, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- adds r0, r6, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- orrs r7, r1
- strh r7, [r3]
- adds r3, 0x2
- adds r7, r2, 0
- ldr r1, [sp, 0x8]
- orrs r7, r1
- adds r0, r5, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- adds r0, r6, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- mov r0, r8
- orrs r7, r0
- strh r7, [r3]
- adds r3, 0x2
- adds r7, r2, 0
- ldr r1, [sp, 0xC]
- orrs r7, r1
- adds r0, r5, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- adds r0, r6, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- mov r0, r8
- orrs r7, r0
- strh r7, [r3]
- adds r3, 0x2
- adds r7, r2, 0
- ldr r1, [sp, 0x10]
- orrs r7, r1
- adds r0, r5, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- adds r0, r6, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- mov r0, r8
- orrs r7, r0
- strh r7, [r3]
- adds r3, 0x2
- adds r7, r2, 0
- ldr r1, [sp, 0x14]
- orrs r7, r1
- adds r0, r5, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- adds r0, r6, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- mov r0, r8
- orrs r7, r0
- strh r7, [r3]
- adds r3, 0x2
- adds r7, r2, 0
- ldr r1, [sp, 0x18]
- orrs r7, r1
- adds r0, r5, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- adds r0, r6, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- mov r0, r8
- orrs r7, r0
- strh r7, [r3]
- adds r3, 0x2
- adds r7, r2, 0
- ldr r1, [sp, 0x1C]
- orrs r7, r1
- adds r0, r5, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- adds r0, r6, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- mov r0, r8
- orrs r7, r0
- strh r7, [r3]
- adds r3, 0x2
- adds r7, r2, 0
- ldr r1, [sp, 0x20]
- orrs r7, r1
- adds r0, r5, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- adds r0, r6, 0
- orrs r0, r7
- strh r0, [r3]
- adds r3, 0x2
- mov r0, r8
- orrs r7, r0
- strh r7, [r3]
- adds r3, 0x2
- adds r7, r2, 0
- orrs r7, r4
- orrs r5, r7
- strh r5, [r3]
- adds r3, 0x2
- orrs r6, r7
- strh r6, [r3]
- orrs r0, r7
- strh r0, [r3, 0x2]
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end GenerateFontHalfRowLookupTable
-
- thumb_func_start SaveTextColors
-@ void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor)
-SaveTextColors: @ 8004BE0
- ldr r3, =gUnknown_030009EA
- ldrh r3, [r3]
- strb r3, [r1]
- ldr r1, =gUnknown_030009EC
- ldrh r1, [r1]
- strb r1, [r0]
- ldr r0, =gUnknown_030009EE
- ldrh r0, [r0]
- strb r0, [r2]
- bx lr
- .pool
- thumb_func_end SaveTextColors
-
- thumb_func_start RestoreTextColors
-@ void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor)
-RestoreTextColors: @ 8004C00
- push {lr}
- ldrb r0, [r0]
- ldrb r1, [r1]
- ldrb r2, [r2]
- bl GenerateFontHalfRowLookupTable
- pop {r0}
- bx r0
- thumb_func_end RestoreTextColors
-
- thumb_func_start DecompressGlyphTile
-@ void DecompressGlyphTile(u16 *src, u32 *dest)
-DecompressGlyphTile: @ 8004C10
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldrh r7, [r0]
- ldr r5, =gUnknown_03000948
- ldr r4, =gFontHalfRowOffsets
- movs r2, 0xFF
- mov r8, r2
- adds r2, r7, 0
- mov r3, r8
- ands r2, r3
- adds r2, r4
- ldrb r2, [r2]
- lsls r2, 1
- adds r2, r5
- ldrh r3, [r2]
- lsls r3, 16
- lsrs r2, r7, 8
- adds r2, r4
- ldrb r2, [r2]
- lsls r2, 1
- adds r2, r5
- ldrh r2, [r2]
- orrs r3, r2
- adds r6, r1, 0
- stm r6!, {r3}
- ldrh r7, [r0, 0x2]
- adds r0, 0x4
- adds r2, r7, 0
- mov r3, r8
- ands r2, r3
- adds r2, r4
- ldrb r2, [r2]
- lsls r2, 1
- adds r2, r5
- ldrh r3, [r2]
- lsls r3, 16
- lsrs r2, r7, 8
- adds r2, r4
- ldrb r2, [r2]
- lsls r2, 1
- adds r2, r5
- ldrh r2, [r2]
- orrs r3, r2
- str r3, [r1, 0x4]
- adds r6, 0x4
- ldrh r7, [r0]
- adds r0, 0x2
- adds r1, r7, 0
- mov r2, r8
- ands r1, r2
- adds r1, r4
- ldrb r1, [r1]
- lsls r1, 1
- adds r1, r5
- ldrh r2, [r1]
- lsls r2, 16
- lsrs r1, r7, 8
- adds r1, r4
- ldrb r1, [r1]
- lsls r1, 1
- adds r1, r5
- ldrh r1, [r1]
- orrs r2, r1
- stm r6!, {r2}
- ldrh r7, [r0]
- adds r0, 0x2
- adds r1, r7, 0
- mov r3, r8
- ands r1, r3
- adds r1, r4
- ldrb r1, [r1]
- lsls r1, 1
- adds r1, r5
- ldrh r2, [r1]
- lsls r2, 16
- lsrs r1, r7, 8
- adds r1, r4
- ldrb r1, [r1]
- lsls r1, 1
- adds r1, r5
- ldrh r1, [r1]
- orrs r2, r1
- stm r6!, {r2}
- ldrh r7, [r0]
- adds r0, 0x2
- adds r1, r7, 0
- ands r1, r3
- adds r1, r4
- ldrb r1, [r1]
- lsls r1, 1
- adds r1, r5
- ldrh r2, [r1]
- lsls r2, 16
- lsrs r1, r7, 8
- adds r1, r4
- ldrb r1, [r1]
- lsls r1, 1
- adds r1, r5
- ldrh r1, [r1]
- orrs r2, r1
- stm r6!, {r2}
- ldrh r7, [r0]
- adds r0, 0x2
- adds r1, r7, 0
- ands r1, r3
- adds r1, r4
- ldrb r1, [r1]
- lsls r1, 1
- adds r1, r5
- ldrh r2, [r1]
- lsls r2, 16
- lsrs r1, r7, 8
- adds r1, r4
- ldrb r1, [r1]
- lsls r1, 1
- adds r1, r5
- ldrh r1, [r1]
- orrs r2, r1
- stm r6!, {r2}
- ldrh r7, [r0]
- adds r1, r7, 0
- ands r1, r3
- adds r1, r4
- ldrb r1, [r1]
- lsls r1, 1
- adds r1, r5
- ldrh r2, [r1]
- lsls r2, 16
- lsrs r1, r7, 8
- adds r1, r4
- ldrb r1, [r1]
- lsls r1, 1
- adds r1, r5
- ldrh r1, [r1]
- orrs r2, r1
- stm r6!, {r2}
- ldrh r7, [r0, 0x2]
- adds r0, r7, 0
- ands r0, r3
- adds r0, r4
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 16
- lsrs r0, r7, 8
- adds r0, r4
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- orrs r1, r0
- str r1, [r6]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end DecompressGlyphTile
-
- thumb_func_start GetLastTextColor
-@ u8 GetLastTextColor(u8 colorType)
-GetLastTextColor: @ 8004D58
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0x1
- beq _08004D8C
- cmp r0, 0x1
- bgt _08004D6E
- cmp r0, 0
- beq _08004D74
- b _08004D98
-_08004D6E:
- cmp r1, 0x2
- beq _08004D80
- b _08004D98
-_08004D74:
- ldr r0, =gUnknown_030009EC
- ldrb r0, [r0]
- b _08004D9A
- .pool
-_08004D80:
- ldr r0, =gUnknown_030009EA
- ldrb r0, [r0]
- b _08004D9A
- .pool
-_08004D8C:
- ldr r0, =gUnknown_030009EE
- ldrb r0, [r0]
- b _08004D9A
- .pool
-_08004D98:
- movs r0, 0
-_08004D9A:
- pop {r1}
- bx r1
- thumb_func_end GetLastTextColor
-
thumb_func_start CopyGlyphToWindow
@ int CopyGlyphToWindow(struct TextPrinter *x)
CopyGlyphToWindow: @ 8004DA0
@@ -1520,7 +715,7 @@ ClearTextSpan: @ 80052C8
sub sp, 0x10
adds r4, r0, 0
adds r6, r1, 0
- ldr r0, =gUnknown_030009EA
+ ldr r0, =gLastTextBgColor
ldrh r5, [r0]
cmp r5, 0
beq _0800531E
diff --git a/include/text.h b/include/text.h
index 75699144c..b977b429f 100644
--- a/include/text.h
+++ b/include/text.h
@@ -33,7 +33,7 @@ struct TextPrinter
{
struct TextWindow window;
- void (*callback)(u16, struct TextWindow *); // 0x10
+ void (*callback)(struct TextWindow *, u16); // 0x10
union {
struct
@@ -45,7 +45,7 @@ struct TextPrinter
u8 field_4; // 0x18
u8 field_5;
u8 field_6;
- u8 field_7;
+ u8 active;
} sub;
u8 sub_fields[8];
} sub_union;
diff --git a/src/text.c b/src/text.c
index 69ae21809..248ba3b96 100644
--- a/src/text.c
+++ b/src/text.c
@@ -8,11 +8,17 @@
EWRAM_DATA struct TextPrinter gTempTextPrinter;
EWRAM_DATA struct TextPrinter gTextPrinters[NUM_TEXT_PRINTERS];
-extern u8 gUnknown_03002F84[];
+extern u16 gFontHalfRowLookupTable[];
+extern u16 gLastTextBgColor;
+extern u16 gLastTextFgColor;
+extern u16 gLastTextShadowColor;
extern struct FontInfo *gFonts;
+extern u8 gUnknown_03002F84[];
+
+extern u8 gFontHalfRowOffsets[];
-u16 AddTextPrinter(struct TextWindow *textWindow, u8 speed, void (*callback)(u16, struct TextWindow *));
+u16 AddTextPrinter(struct TextWindow *textWindow, u8 speed, void (*callback)(struct TextWindow *, u16));
void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor);
u32 RenderFont(struct TextPrinter *textPrinter);
void CopyWindowToVram(u8 windowId, u8 mode);
@@ -26,10 +32,10 @@ void DeactivateAllTextPrinters (void)
{
int printer;
for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer)
- gTextPrinters[printer].sub_union.sub.field_7 = 0;
+ gTextPrinters[printer].sub_union.sub.active = 0;
}
-u16 Print(u8 windowId, u8 fontId, u8 *str, u8 x, u8 y, u8 speed, void (*callback)(u16, struct TextWindow *))
+u16 Print(u8 windowId, u8 fontId, u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextWindow *, u16))
{
struct TextWindow window;
@@ -49,7 +55,7 @@ u16 Print(u8 windowId, u8 fontId, u8 *str, u8 x, u8 y, u8 speed, void (*callback
return AddTextPrinter(&window, speed, callback);
}
-u16 AddTextPrinter(struct TextWindow *textWindow, u8 speed, void (*callback)(u16, struct TextWindow *))
+u16 AddTextPrinter(struct TextWindow *textWindow, u8 speed, void (*callback)(struct TextWindow *, u16))
{
int i;
u16 j;
@@ -57,7 +63,7 @@ u16 AddTextPrinter(struct TextWindow *textWindow, u8 speed, void (*callback)(u16
if (!gFonts)
return FALSE;
- gTempTextPrinter.sub_union.sub.field_7 = 1;
+ gTempTextPrinter.sub_union.sub.active = 1;
gTempTextPrinter.state = 0;
gTempTextPrinter.text_speed = speed;
gTempTextPrinter.delayCounter = 0;
@@ -84,16 +90,858 @@ u16 AddTextPrinter(struct TextWindow *textWindow, u8 speed, void (*callback)(u16
gTempTextPrinter.text_speed = 0;
for (j = 0; j < 0x400; ++j)
{
- if (RenderFont(&gTempTextPrinter) == 1)
+ if ((u32)RenderFont(&gTempTextPrinter) == 1)
break;
}
if (speed != 0xFF)
CopyWindowToVram(gTempTextPrinter.window.windowId, 2);
- gTextPrinters[textWindow->windowId].sub_union.sub.field_7 = 0;
+ gTextPrinters[textWindow->windowId].sub_union.sub.active = 0;
}
gUnknown_03002F84[0] = 0;
return TRUE;
}
+void RunTextPrinters(void)
+{
+ int i;
+ u16 temp;
+
+ if (gUnknown_03002F84[0] == 0)
+ {
+ for (i = 0; i < 0x20; ++i)
+ {
+ if (gTextPrinters[i].sub_union.sub.active != 0)
+ {
+ temp = RenderFont(&gTextPrinters[i]);
+ switch (temp) {
+ case 0:
+ CopyWindowToVram(gTextPrinters[i].window.windowId, 2);
+ case 3:
+ if (gTextPrinters[i].callback != 0)
+ gTextPrinters[i].callback(&gTextPrinters[i].window, temp);
+ break;
+ case 1:
+ gTextPrinters[i].sub_union.sub.active = 0;
+ break;
+ }
+ }
+ }
+ }
+}
+
+bool8 IsTextPrinterActive(u8 id)
+{
+ return gTextPrinters[id].sub_union.sub.active;
+}
+
+
+u32 RenderFont(struct TextPrinter *textPrinter)
+{
+ u32 ret;
+ while (TRUE)
+ {
+ ret = gFonts[textPrinter->window.fontId].fontFunction(textPrinter);
+ if (ret != 2)
+ return ret;
+ }
+}
+
+#ifdef NONMATCHING
+void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
+{
+ u16* current = gFontHalfRowLookupTable;
+
+ gLastTextBgColor = bgColor;
+ gLastTextFgColor = fgColor;
+ gLastTextShadowColor = shadowColor;
+
+ *(current++) = (bgColor << 12) | (bgColor << 8) | (bgColor << 4) | bgColor;
+ *(current++) = (fgColor << 12) | (bgColor << 8) | (bgColor << 4) | bgColor;
+ *(current++) = (shadowColor << 12) | (bgColor << 8) | (bgColor << 4) | bgColor;
+
+ *(current++) = (bgColor << 12) | (fgColor << 8) | (bgColor << 4) | bgColor;
+ *(current++) = (fgColor << 12) | (fgColor << 8) | (bgColor << 4) | bgColor;
+ *(current++) = (shadowColor << 12) | (fgColor << 8) | (bgColor << 4) | bgColor;
+
+ *(current++) = (bgColor << 12) | (shadowColor << 8) | (bgColor << 4) | bgColor;
+ *(current++) = (fgColor << 12) | (shadowColor << 8) | (bgColor << 4) | bgColor;
+ *(current++) = (shadowColor << 12) | (shadowColor << 8) | (bgColor << 4) | bgColor;
+
+ *(current++) = (bgColor << 12) | (bgColor << 8) | (fgColor << 4) | bgColor;
+ *(current++) = (fgColor << 12) | (bgColor << 8) | (fgColor << 4) | bgColor;
+ *(current++) = (shadowColor << 12) | (bgColor << 8) | (fgColor << 4) | bgColor;
+
+ *(current++) = (bgColor << 12) | (fgColor << 8) | (fgColor << 4) | bgColor;
+ *(current++) = (fgColor << 12) | (fgColor << 8) | (fgColor << 4) | bgColor;
+ *(current++) = (shadowColor << 12) | (fgColor << 8) | (fgColor << 4) | bgColor;
+
+ *(current++) = (bgColor << 12) | (shadowColor << 8) | (fgColor << 4) | bgColor;
+ *(current++) = (fgColor << 12) | (shadowColor << 8) | (fgColor << 4) | bgColor;
+ *(current++) = (shadowColor << 12) | (shadowColor << 8) | (fgColor << 4) | bgColor;
+
+ *(current++) = (bgColor << 12) | (bgColor << 8) | (shadowColor << 4) | bgColor;
+ *(current++) = (fgColor << 12) | (bgColor << 8) | (shadowColor << 4) | bgColor;
+ *(current++) = (shadowColor << 12) | (bgColor << 8) | (shadowColor << 4) | bgColor;
+
+ *(current++) = (bgColor << 12) | (fgColor << 8) | (shadowColor << 4) | bgColor;
+ *(current++) = (fgColor << 12) | (fgColor << 8) | (shadowColor << 4) | bgColor;
+ *(current++) = (shadowColor << 12) | (fgColor << 8) | (shadowColor << 4) | bgColor;
+
+ *(current++) = (bgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | bgColor;
+ *(current++) = (fgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | bgColor;
+ *(current++) = (shadowColor << 12) | (shadowColor << 8) | (shadowColor << 4) | bgColor;
+
+ *(current++) = (bgColor << 12) | (bgColor << 8) | (bgColor << 4) | fgColor;
+ *(current++) = (fgColor << 12) | (bgColor << 8) | (bgColor << 4) | fgColor;
+ *(current++) = (shadowColor << 12) | (bgColor << 8) | (bgColor << 4) | fgColor;
+
+ *(current++) = (bgColor << 12) | (fgColor << 8) | (bgColor << 4) | fgColor;
+ *(current++) = (fgColor << 12) | (fgColor << 8) | (bgColor << 4) | fgColor;
+ *(current++) = (shadowColor << 12) | (fgColor << 8) | (bgColor << 4) | fgColor;
+
+ *(current++) = (bgColor << 12) | (shadowColor << 8) | (bgColor << 4) | fgColor;
+ *(current++) = (fgColor << 12) | (shadowColor << 8) | (bgColor << 4) | fgColor;
+ *(current++) = (shadowColor << 12) | (shadowColor << 8) | (bgColor << 4) | fgColor;
+
+ *(current++) = (bgColor << 12) | (bgColor << 8) | (fgColor << 4) | fgColor;
+ *(current++) = (fgColor << 12) | (bgColor << 8) | (fgColor << 4) | fgColor;
+ *(current++) = (shadowColor << 12) | (bgColor << 8) | (fgColor << 4) | fgColor;
+
+ *(current++) = (bgColor << 12) | (fgColor << 8) | (fgColor << 4) | fgColor;
+ *(current++) = (fgColor << 12) | (fgColor << 8) | (fgColor << 4) | fgColor;
+ *(current++) = (shadowColor << 12) | (fgColor << 8) | (fgColor << 4) | fgColor;
+
+ *(current++) = (bgColor << 12) | (shadowColor << 8) | (fgColor << 4) | fgColor;
+ *(current++) = (fgColor << 12) | (shadowColor << 8) | (fgColor << 4) | fgColor;
+ *(current++) = (shadowColor << 12) | (shadowColor << 8) | (fgColor << 4) | fgColor;
+
+ *(current++) = (bgColor << 12) | (bgColor << 8) | (shadowColor << 4) | fgColor;
+ *(current++) = (fgColor << 12) | (bgColor << 8) | (shadowColor << 4) | fgColor;
+ *(current++) = (shadowColor << 12) | (bgColor << 8) | (shadowColor << 4) | fgColor;
+
+ *(current++) = (bgColor << 12) | (fgColor << 8) | (shadowColor << 4) | fgColor;
+ *(current++) = (fgColor << 12) | (fgColor << 8) | (shadowColor << 4) | fgColor;
+ *(current++) = (shadowColor << 12) | (fgColor << 8) | (shadowColor << 4) | fgColor;
+
+ *(current++) = (bgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | fgColor;
+ *(current++) = (fgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | fgColor;
+ *(current++) = (shadowColor << 12) | (shadowColor << 8) | (shadowColor << 4) | fgColor;
+
+ *(current++) = (bgColor << 12) | (bgColor << 8) | (bgColor << 4) | shadowColor;
+ *(current++) = (fgColor << 12) | (bgColor << 8) | (bgColor << 4) | shadowColor;
+ *(current++) = (shadowColor << 12) | (bgColor << 8) | (bgColor << 4) | shadowColor;
+
+ *(current++) = (bgColor << 12) | (fgColor << 8) | (bgColor << 4) | shadowColor;
+ *(current++) = (fgColor << 12) | (fgColor << 8) | (bgColor << 4) | shadowColor;
+ *(current++) = (shadowColor << 12) | (fgColor << 8) | (bgColor << 4) | shadowColor;
+
+ *(current++) = (bgColor << 12) | (shadowColor << 8) | (bgColor << 4) | shadowColor;
+ *(current++) = (fgColor << 12) | (shadowColor << 8) | (bgColor << 4) | shadowColor;
+ *(current++) = (shadowColor << 12) | (shadowColor << 8) | (bgColor << 4) | shadowColor;
+
+ *(current++) = (bgColor << 12) | (bgColor << 8) | (fgColor << 4) | shadowColor;
+ *(current++) = (fgColor << 12) | (bgColor << 8) | (fgColor << 4) | shadowColor;
+ *(current++) = (shadowColor << 12) | (bgColor << 8) | (fgColor << 4) | shadowColor;
+
+ *(current++) = (bgColor << 12) | (fgColor << 8) | (fgColor << 4) | shadowColor;
+ *(current++) = (fgColor << 12) | (fgColor << 8) | (fgColor << 4) | shadowColor;
+ *(current++) = (shadowColor << 12) | (fgColor << 8) | (fgColor << 4) | shadowColor;
+
+ *(current++) = (bgColor << 12) | (shadowColor << 8) | (fgColor << 4) | shadowColor;
+ *(current++) = (fgColor << 12) | (shadowColor << 8) | (fgColor << 4) | shadowColor;
+ *(current++) = (shadowColor << 12) | (shadowColor << 8) | (fgColor << 4) | shadowColor;
+
+ *(current++) = (bgColor << 12) | (bgColor << 8) | (shadowColor << 4) | shadowColor;
+ *(current++) = (fgColor << 12) | (bgColor << 8) | (shadowColor << 4) | shadowColor;
+ *(current++) = (shadowColor << 12) | (bgColor << 8) | (shadowColor << 4) | shadowColor;
+
+ *(current++) = (bgColor << 12) | (fgColor << 8) | (shadowColor << 4) | shadowColor;
+ *(current++) = (fgColor << 12) | (fgColor << 8) | (shadowColor << 4) | shadowColor;
+ *(current++) = (shadowColor << 12) | (fgColor << 8) | (shadowColor << 4) | shadowColor;
+
+ *(current++) = (bgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | shadowColor;
+ *(current++) = (fgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | shadowColor;
+ *(current++) = (shadowColor << 12) | (shadowColor << 8) | (shadowColor << 4) | shadowColor;
+}
+#else
+__attribute__((naked))
+void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
+{
+ asm(" push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, #0x24\n\
+ lsl r0, #24\n\
+ lsr r0, #24\n\
+ lsl r1, #24\n\
+ lsr r1, #24\n\
+ lsl r2, #24\n\
+ lsr r2, #24\n\
+ ldr r3, =gFontHalfRowLookupTable\n\
+ ldr r4, =gLastTextBgColor\n\
+ strh r1, [r4]\n\
+ ldr r4, =gLastTextFgColor\n\
+ strh r0, [r4]\n\
+ ldr r4, =gLastTextShadowColor\n\
+ strh r2, [r4]\n\
+ lsl r5, r1, #12\n\
+ lsl r6, r0, #12\n\
+ lsl r4, r2, #12\n\
+ mov r8, r4\n\
+ lsl r7, r1, #8\n\
+ str r7, [sp]\n\
+ lsl r4, r1, #4\n\
+ mov r9, r4\n\
+ orr r7, r4\n\
+ str r7, [sp, #0x4]\n\
+ orr r7, r1\n\
+ add r4, r5, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ add r4, r6, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ mov r4, r8\n\
+ orr r7, r4\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ lsl r7, r0, #8\n\
+ mov r10, r7\n\
+ mov r4, r10\n\
+ mov r7, r9\n\
+ orr r4, r7\n\
+ str r4, [sp, #0x8]\n\
+ add r7, r4, #0\n\
+ orr r7, r1\n\
+ add r4, r5, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ add r4, r6, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ mov r4, r8\n\
+ orr r7, r4\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ lsl r7, r2, #8\n\
+ mov r12, r7\n\
+ mov r4, r12\n\
+ mov r7, r9\n\
+ orr r4, r7\n\
+ str r4, [sp, #0xC]\n\
+ add r7, r4, #0\n\
+ orr r7, r1\n\
+ add r4, r5, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ add r4, r6, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ mov r4, r8\n\
+ orr r7, r4\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ lsl r7, r0, #4\n\
+ mov r9, r7\n\
+ ldr r4, [sp]\n\
+ orr r4, r7\n\
+ str r4, [sp, #0x10]\n\
+ add r7, r4, #0\n\
+ orr r7, r1\n\
+ add r4, r5, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ add r4, r6, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ mov r4, r8\n\
+ orr r7, r4\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ mov r7, r10\n\
+ add r4, r7, #0\n\
+ mov r7, r9\n\
+ orr r4, r7\n\
+ str r4, [sp, #0x14]\n\
+ add r7, r4, #0\n\
+ orr r7, r1\n\
+ add r4, r5, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ add r4, r6, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ mov r4, r8\n\
+ orr r7, r4\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ mov r7, r12\n\
+ add r4, r7, #0\n\
+ mov r7, r9\n\
+ orr r4, r7\n\
+ str r4, [sp, #0x18]\n\
+ add r7, r4, #0\n\
+ orr r7, r1\n\
+ add r4, r5, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ add r4, r6, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ mov r4, r8\n\
+ orr r7, r4\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ lsl r7, r2, #4\n\
+ mov r9, r7\n\
+ mov r4, r9\n\
+ ldr r7, [sp]\n\
+ orr r7, r4\n\
+ str r7, [sp, #0x1C]\n\
+ orr r7, r1\n\
+ add r4, r5, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ add r4, r6, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ mov r4, r8\n\
+ orr r7, r4\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ mov r7, r9\n\
+ mov r4, r10\n\
+ orr r4, r7\n\
+ str r4, [sp, #0x20]\n\
+ add r7, r4, #0\n\
+ orr r7, r1\n\
+ add r4, r5, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ add r4, r6, #0\n\
+ orr r4, r7\n\
+ strh r4, [r3]\n\
+ add r3, #0x2\n\
+ mov r4, r8\n\
+ orr r7, r4\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ mov r4, r12\n\
+ mov r7, r9\n\
+ orr r4, r7\n\
+ add r7, r4, #0\n\
+ orr r7, r1\n\
+ add r1, r5, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ add r1, r6, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ mov r1, r8\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ ldr r7, [sp, #0x4]\n\
+ orr r7, r0\n\
+ add r1, r5, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ add r1, r6, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ mov r1, r8\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ ldr r7, [sp, #0x8]\n\
+ orr r7, r0\n\
+ add r1, r5, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ add r1, r6, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ mov r1, r8\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ ldr r7, [sp, #0xC]\n\
+ orr r7, r0\n\
+ add r1, r5, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ add r1, r6, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ mov r1, r8\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ ldr r7, [sp, #0x10]\n\
+ orr r7, r0\n\
+ add r1, r5, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ add r1, r6, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ mov r1, r8\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ ldr r7, [sp, #0x14]\n\
+ orr r7, r0\n\
+ add r1, r5, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ add r1, r6, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ mov r1, r8\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ ldr r7, [sp, #0x18]\n\
+ orr r7, r0\n\
+ add r1, r5, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ add r1, r6, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ mov r1, r8\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ ldr r7, [sp, #0x1C]\n\
+ orr r7, r0\n\
+ add r1, r5, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ add r1, r6, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ mov r1, r8\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ ldr r7, [sp, #0x20]\n\
+ orr r7, r0\n\
+ add r1, r5, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ add r1, r6, #0\n\
+ orr r1, r7\n\
+ strh r1, [r3]\n\
+ add r3, #0x2\n\
+ mov r1, r8\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ add r7, r4, #0\n\
+ orr r7, r0\n\
+ add r0, r5, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ add r0, r6, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ add r7, r2, #0\n\
+ ldr r0, [sp, #0x4]\n\
+ orr r7, r0\n\
+ add r0, r5, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ add r0, r6, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ orr r7, r1\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ add r7, r2, #0\n\
+ ldr r1, [sp, #0x8]\n\
+ orr r7, r1\n\
+ add r0, r5, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ add r0, r6, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ mov r0, r8\n\
+ orr r7, r0\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ add r7, r2, #0\n\
+ ldr r1, [sp, #0xC]\n\
+ orr r7, r1\n\
+ add r0, r5, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ add r0, r6, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ mov r0, r8\n\
+ orr r7, r0\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ add r7, r2, #0\n\
+ ldr r1, [sp, #0x10]\n\
+ orr r7, r1\n\
+ add r0, r5, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ add r0, r6, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ mov r0, r8\n\
+ orr r7, r0\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ add r7, r2, #0\n\
+ ldr r1, [sp, #0x14]\n\
+ orr r7, r1\n\
+ add r0, r5, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ add r0, r6, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ mov r0, r8\n\
+ orr r7, r0\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ add r7, r2, #0\n\
+ ldr r1, [sp, #0x18]\n\
+ orr r7, r1\n\
+ add r0, r5, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ add r0, r6, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ mov r0, r8\n\
+ orr r7, r0\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ add r7, r2, #0\n\
+ ldr r1, [sp, #0x1C]\n\
+ orr r7, r1\n\
+ add r0, r5, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ add r0, r6, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ mov r0, r8\n\
+ orr r7, r0\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ add r7, r2, #0\n\
+ ldr r1, [sp, #0x20]\n\
+ orr r7, r1\n\
+ add r0, r5, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ add r0, r6, #0\n\
+ orr r0, r7\n\
+ strh r0, [r3]\n\
+ add r3, #0x2\n\
+ mov r0, r8\n\
+ orr r7, r0\n\
+ strh r7, [r3]\n\
+ add r3, #0x2\n\
+ add r7, r2, #0\n\
+ orr r7, r4\n\
+ orr r5, r7\n\
+ strh r5, [r3]\n\
+ add r3, #0x2\n\
+ orr r6, r7\n\
+ strh r6, [r3]\n\
+ orr r0, r7\n\
+ strh r0, [r3, #0x2]\n\
+ add sp, #0x24\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");
+}
+#endif
+
+void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor)
+{
+ *bgColor = gLastTextBgColor;
+ *fgColor = gLastTextFgColor;
+ *shadowColor = gLastTextShadowColor;
+}
+
+void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor)
+{
+ GenerateFontHalfRowLookupTable(*fgColor, *bgColor, *shadowColor);
+}
+
// struct means TextWindow, no struct means TextPrinter
+
+//#ifdef NONMATCHING
+void DecompressGlyphTile(u16 *src, u32 *dest)
+{
+ u32 temp;
+
+ temp = src[0];
+ *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
+ temp = src[1];
+ src += 2;
+ dest[1] = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
+ dest++;
+ temp = *(src++);
+ *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
+ temp = *(src++);
+ *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
+ temp = *(src++);
+ *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
+ temp = *(src++);
+ *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
+ *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[src[0] & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[src[0] >> 8]];
+ *(dest) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[src[1] & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[src[1] >> 8]];
+}
+/*#else
+__attribute__((naked))
+void DecompressGlyphTile(u16 *src, u32 *dest)
+{
+ asm("push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ ldrh r7, [r0]\n\
+ ldr r5, =gFontHalfRowLookupTable\n\
+ ldr r4, =gFontHalfRowOffsets\n\
+ mov r2, #0xFF\n\
+ mov r8, r2\n\
+ add r2, r7, #0\n\
+ mov r3, r8\n\
+ and r2, r3\n\
+ add r2, r4\n\
+ ldrb r2, [r2]\n\
+ lsl r2, #1\n\
+ add r2, r5\n\
+ ldrh r3, [r2]\n\
+ lsl r3, #16\n\
+ lsr r2, r7, #8\n\
+ add r2, r4\n\
+ ldrb r2, [r2]\n\
+ lsl r2, #1\n\
+ add r2, r5\n\
+ ldrh r2, [r2]\n\
+ orr r3, r2\n\
+ add r6, r1, #0\n\
+ stmia r6!, {r3}\n\
+ ldrh r7, [r0, #0x2]\n\
+ add r0, #0x4\n\
+ add r2, r7, #0\n\
+ mov r3, r8\n\
+ and r2, r3\n\
+ add r2, r4\n\
+ ldrb r2, [r2]\n\
+ lsl r2, #1\n\
+ add r2, r5\n\
+ ldrh r3, [r2]\n\
+ lsl r3, #16\n\
+ lsr r2, r7, #8\n\
+ add r2, r4\n\
+ ldrb r2, [r2]\n\
+ lsl r2, #1\n\
+ add r2, r5\n\
+ ldrh r2, [r2]\n\
+ orr r3, r2\n\
+ str r3, [r1, #0x4]\n\
+ add r6, #0x4\n\
+ ldrh r7, [r0]\n\
+ add r0, #0x2\n\
+ add r1, r7, #0\n\
+ mov r2, r8\n\
+ and r1, r2\n\
+ add r1, r4\n\
+ ldrb r1, [r1]\n\
+ lsl r1, #1\n\
+ add r1, r5\n\
+ ldrh r2, [r1]\n\
+ lsl r2, #16\n\
+ lsr r1, r7, #8\n\
+ add r1, r4\n\
+ ldrb r1, [r1]\n\
+ lsl r1, #1\n\
+ add r1, r5\n\
+ ldrh r1, [r1]\n\
+ orr r2, r1\n\
+ stmia r6!, {r2}\n\
+ ldrh r7, [r0]\n\
+ add r0, #0x2\n\
+ add r1, r7, #0\n\
+ mov r3, r8\n\
+ and r1, r3\n\
+ add r1, r4\n\
+ ldrb r1, [r1]\n\
+ lsl r1, #1\n\
+ add r1, r5\n\
+ ldrh r2, [r1]\n\
+ lsl r2, #16\n\
+ lsr r1, r7, #8\n\
+ add r1, r4\n\
+ ldrb r1, [r1]\n\
+ lsl r1, #1\n\
+ add r1, r5\n\
+ ldrh r1, [r1]\n\
+ orr r2, r1\n\
+ stmia r6!, {r2}\n\
+ ldrh r7, [r0]\n\
+ add r0, #0x2\n\
+ add r1, r7, #0\n\
+ and r1, r3\n\
+ add r1, r4\n\
+ ldrb r1, [r1]\n\
+ lsl r1, #1\n\
+ add r1, r5\n\
+ ldrh r2, [r1]\n\
+ lsl r2, #16\n\
+ lsr r1, r7, #8\n\
+ add r1, r4\n\
+ ldrb r1, [r1]\n\
+ lsl r1, #1\n\
+ add r1, r5\n\
+ ldrh r1, [r1]\n\
+ orr r2, r1\n\
+ stmia r6!, {r2}\n\
+ ldrh r7, [r0]\n\
+ add r0, #0x2\n\
+ add r1, r7, #0\n\
+ and r1, r3\n\
+ add r1, r4\n\
+ ldrb r1, [r1]\n\
+ lsl r1, #1\n\
+ add r1, r5\n\
+ ldrh r2, [r1]\n\
+ lsl r2, #16\n\
+ lsr r1, r7, #8\n\
+ add r1, r4\n\
+ ldrb r1, [r1]\n\
+ lsl r1, #1\n\
+ add r1, r5\n\
+ ldrh r1, [r1]\n\
+ orr r2, r1\n\
+ stmia r6!, {r2}\n\
+ ldrh r7, [r0]\n\
+ add r1, r7, #0\n\
+ and r1, r3\n\
+ add r1, r4\n\
+ ldrb r1, [r1]\n\
+ lsl r1, #1\n\
+ add r1, r5\n\
+ ldrh r2, [r1]\n\
+ lsl r2, #16\n\
+ lsr r1, r7, #8\n\
+ add r1, r4\n\
+ ldrb r1, [r1]\n\
+ lsl r1, #1\n\
+ add r1, r5\n\
+ ldrh r1, [r1]\n\
+ orr r2, r1\n\
+ stmia r6!, {r2}\n\
+ ldrh r7, [r0, #0x2]\n\
+ add r0, r7, #0\n\
+ and r0, r3\n\
+ add r0, r4\n\
+ ldrb r0, [r0]\n\
+ lsl r0, #1\n\
+ add r0, r5\n\
+ ldrh r1, [r0]\n\
+ lsl r1, #16\n\
+ lsr r0, r7, #8\n\
+ add r0, r4\n\
+ ldrb r0, [r0]\n\
+ lsl r0, #1\n\
+ add r0, r5\n\
+ ldrh r0, [r0]\n\
+ orr r1, r0\n\
+ str r1, [r6]\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool");
+}
+#endif*/
+
+u8 GetLastTextColor(u8 colorType)
+{
+ switch (colorType)
+ {
+ case 0:
+ return gLastTextFgColor;
+ case 2:
+ return gLastTextBgColor;
+ case 1:
+ return gLastTextShadowColor;
+ default:
+ return 0;
+ }
+}
+
+
diff --git a/sym_bss.txt b/sym_bss.txt
index e10bd14ba..185ee931c 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -37,16 +37,16 @@ gUnknown_030008FC: @ 30008FC
gUnknown_03000938: @ 3000938
.space 0x10
-gUnknown_03000948: @ 3000948
+gFontHalfRowLookupTable: @ 3000948
.space 0xA2
-gUnknown_030009EA: @ 30009EA
+gLastTextBgColor: @ 30009EA
.space 0x2
-gUnknown_030009EC: @ 30009EC
+gLastTextFgColor: @ 30009EC
.space 0x2
-gUnknown_030009EE: @ 30009EE
+gLastTextShadowColor: @ 30009EE
.space 0x2
gUnknown_030009F0: @ 30009F0