diff --git a/asm/non_matchings/unknown_0B8920/func_800C4170.s b/asm/non_matchings/font/func_800C4170.s similarity index 89% rename from asm/non_matchings/unknown_0B8920/func_800C4170.s rename to asm/non_matchings/font/func_800C4170.s index 97010dfd..6220e2eb 100644 --- a/asm/non_matchings/unknown_0B8920/func_800C4170.s +++ b/asm/non_matchings/font/func_800C4170.s @@ -1,7 +1,7 @@ glabel func_800C4170 /* 0C4D70 800C4170 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0C4D74 800C4174 3C0E8013 */ lui $t6, %hi(D_8012A7E0) # $t6, 0x8013 -/* 0C4D78 800C4178 8DCEA7E0 */ lw $t6, %lo(D_8012A7E0)($t6) +/* 0C4D74 800C4174 3C0E8013 */ lui $t6, %hi(gNumberOfFonts) # $t6, 0x8013 +/* 0C4D78 800C4178 8DCEA7E0 */ lw $t6, %lo(gNumberOfFonts)($t6) /* 0C4D7C 800C417C AFBF0024 */ sw $ra, 0x24($sp) /* 0C4D80 800C4180 008E082A */ slt $at, $a0, $t6 /* 0C4D84 800C4184 AFB30020 */ sw $s3, 0x20($sp) @@ -9,8 +9,8 @@ glabel func_800C4170 /* 0C4D8C 800C418C AFB10018 */ sw $s1, 0x18($sp) /* 0C4D90 800C4190 1020001F */ beqz $at, .L800C4210 /* 0C4D94 800C4194 AFB00014 */ sw $s0, 0x14($sp) -/* 0C4D98 800C4198 3C188013 */ lui $t8, %hi(D_8012A7E4) # $t8, 0x8013 -/* 0C4D9C 800C419C 8F18A7E4 */ lw $t8, %lo(D_8012A7E4)($t8) +/* 0C4D98 800C4198 3C188013 */ lui $t8, %hi(gFonts) # $t8, 0x8013 +/* 0C4D9C 800C419C 8F18A7E4 */ lw $t8, %lo(gFonts)($t8) /* 0C4DA0 800C41A0 00047A80 */ sll $t7, $a0, 0xa /* 0C4DA4 800C41A4 01F81021 */ addu $v0, $t7, $t8 /* 0C4DA8 800C41A8 90590028 */ lbu $t9, 0x28($v0) diff --git a/asm/non_matchings/unknown_0B8920/func_800C422C.s b/asm/non_matchings/font/func_800C422C.s similarity index 89% rename from asm/non_matchings/unknown_0B8920/func_800C422C.s rename to asm/non_matchings/font/func_800C422C.s index f6d78f75..20e2149f 100644 --- a/asm/non_matchings/unknown_0B8920/func_800C422C.s +++ b/asm/non_matchings/font/func_800C422C.s @@ -1,7 +1,7 @@ glabel func_800C422C /* 0C4E2C 800C422C 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0C4E30 800C4230 3C0E8013 */ lui $t6, %hi(D_8012A7E0) # $t6, 0x8013 -/* 0C4E34 800C4234 8DCEA7E0 */ lw $t6, %lo(D_8012A7E0)($t6) +/* 0C4E30 800C4230 3C0E8013 */ lui $t6, %hi(gNumberOfFonts) # $t6, 0x8013 +/* 0C4E34 800C4234 8DCEA7E0 */ lw $t6, %lo(gNumberOfFonts)($t6) /* 0C4E38 800C4238 AFBF0024 */ sw $ra, 0x24($sp) /* 0C4E3C 800C423C 008E082A */ slt $at, $a0, $t6 /* 0C4E40 800C4240 AFB30020 */ sw $s3, 0x20($sp) @@ -9,8 +9,8 @@ glabel func_800C422C /* 0C4E48 800C4248 AFB10018 */ sw $s1, 0x18($sp) /* 0C4E4C 800C424C 10200020 */ beqz $at, .L800C42D0 /* 0C4E50 800C4250 AFB00014 */ sw $s0, 0x14($sp) -/* 0C4E54 800C4254 3C188013 */ lui $t8, %hi(D_8012A7E4) # $t8, 0x8013 -/* 0C4E58 800C4258 8F18A7E4 */ lw $t8, %lo(D_8012A7E4)($t8) +/* 0C4E54 800C4254 3C188013 */ lui $t8, %hi(gFonts) # $t8, 0x8013 +/* 0C4E58 800C4258 8F18A7E4 */ lw $t8, %lo(gFonts)($t8) /* 0C4E5C 800C425C 00047A80 */ sll $t7, $a0, 0xa /* 0C4E60 800C4260 01F89021 */ addu $s2, $t7, $t8 /* 0C4E64 800C4264 92420028 */ lbu $v0, 0x28($s2) diff --git a/asm/non_matchings/unknown_0B8920/set_text_font.s b/asm/non_matchings/font/func_800C4318.s similarity index 56% rename from asm/non_matchings/unknown_0B8920/set_text_font.s rename to asm/non_matchings/font/func_800C4318.s index 5ef00c27..e3021158 100644 --- a/asm/non_matchings/unknown_0B8920/set_text_font.s +++ b/asm/non_matchings/font/func_800C4318.s @@ -1,25 +1,12 @@ -glabel set_text_font -/* 0C4EEC 800C42EC 3C0E8013 */ lui $t6, %hi(D_8012A7E0) # $t6, 0x8013 -/* 0C4EF0 800C42F0 8DCEA7E0 */ lw $t6, %lo(D_8012A7E0)($t6) -/* 0C4EF4 800C42F4 3C0F8013 */ lui $t7, %hi(D_8012A7E8) # $t7, 0x8013 -/* 0C4EF8 800C42F8 008E082A */ slt $at, $a0, $t6 -/* 0C4EFC 800C42FC 10200004 */ beqz $at, .L800C4310 -/* 0C4F00 800C4300 00000000 */ nop -/* 0C4F04 800C4304 8DEFA7E8 */ lw $t7, %lo(D_8012A7E8)($t7) -/* 0C4F08 800C4308 00000000 */ nop -/* 0C4F0C 800C430C A1E4001D */ sb $a0, 0x1d($t7) -.L800C4310: -/* 0C4F10 800C4310 03E00008 */ jr $ra -/* 0C4F14 800C4314 00000000 */ nop - -/* 0C4F18 800C4318 3C0F8013 */ lui $t7, %hi(D_8012A7E0) # $t7, 0x8013 -/* 0C4F1C 800C431C 8DEFA7E0 */ lw $t7, %lo(D_8012A7E0)($t7) +glabel func_800C4318 +/* 0C4F18 800C4318 3C0F8013 */ lui $t7, %hi(gNumberOfFonts) # $t7, 0x8013 +/* 0C4F1C 800C431C 8DEFA7E0 */ lw $t7, %lo(gNumberOfFonts)($t7) /* 0C4F20 800C4320 AFA50004 */ sw $a1, 4($sp) /* 0C4F24 800C4324 008F082A */ slt $at, $a0, $t7 /* 0C4F28 800C4328 10200014 */ beqz $at, .L800C437C /* 0C4F2C 800C432C 30AE00FF */ andi $t6, $a1, 0xff -/* 0C4F30 800C4330 3C198013 */ lui $t9, %hi(D_8012A7E4) # $t9, 0x8013 -/* 0C4F34 800C4334 8F39A7E4 */ lw $t9, %lo(D_8012A7E4)($t9) +/* 0C4F30 800C4330 3C198013 */ lui $t9, %hi(gFonts) # $t9, 0x8013 +/* 0C4F34 800C4334 8F39A7E4 */ lw $t9, %lo(gFonts)($t9) /* 0C4F38 800C4338 0004C280 */ sll $t8, $a0, 0xa /* 0C4F3C 800C433C 03191821 */ addu $v1, $t8, $t9 /* 0C4F40 800C4340 90680028 */ lbu $t0, 0x28($v1) @@ -37,7 +24,6 @@ glabel set_text_font /* 0C4F70 800C4370 8DA20080 */ lw $v0, 0x80($t5) /* 0C4F74 800C4374 03E00008 */ jr $ra /* 0C4F78 800C4378 00000000 */ nop - .L800C437C: /* 0C4F7C 800C437C 03E00008 */ jr $ra /* 0C4F80 800C4380 00000000 */ nop diff --git a/asm/non_matchings/unknown_0B8920/func_800C45A4.s b/asm/non_matchings/font/func_800C45A4.s similarity index 99% rename from asm/non_matchings/unknown_0B8920/func_800C45A4.s rename to asm/non_matchings/font/func_800C45A4.s index d284a76d..b81a234e 100644 --- a/asm/non_matchings/unknown_0B8920/func_800C45A4.s +++ b/asm/non_matchings/font/func_800C45A4.s @@ -20,8 +20,8 @@ glabel func_800C45A4 /* 0C51D8 800C45D8 10C001E8 */ beqz $a2, .L800C4D7C /* 0C51DC 800C45DC 2414FFFF */ li $s4, -1 /* 0C51E0 800C45E0 90AF001D */ lbu $t7, 0x1d($a1) -/* 0C51E4 800C45E4 3C198013 */ lui $t9, %hi(D_8012A7E4) # $t9, 0x8013 -/* 0C51E8 800C45E8 8F39A7E4 */ lw $t9, %lo(D_8012A7E4)($t9) +/* 0C51E4 800C45E4 3C198013 */ lui $t9, %hi(gFonts) # $t9, 0x8013 +/* 0C51E8 800C45E8 8F39A7E4 */ lw $t9, %lo(gFonts)($t9) /* 0C51EC 800C45EC 8C830000 */ lw $v1, ($a0) /* 0C51F0 800C45F0 000FC280 */ sll $t8, $t7, 0xa /* 0C51F4 800C45F4 84B00000 */ lh $s0, ($a1) diff --git a/asm/non_matchings/unknown_0B8920/func_800C4DA0.s b/asm/non_matchings/font/func_800C4DA0.s similarity index 96% rename from asm/non_matchings/unknown_0B8920/func_800C4DA0.s rename to asm/non_matchings/font/func_800C4DA0.s index d657ba41..80f22beb 100644 --- a/asm/non_matchings/unknown_0B8920/func_800C4DA0.s +++ b/asm/non_matchings/font/func_800C4DA0.s @@ -1,6 +1,6 @@ glabel func_800C4DA0 /* 0C59A0 800C4DA0 14800003 */ bnez $a0, .L800C4DB0 -/* 0C59A4 800C4DA4 3C188013 */ lui $t8, %hi(D_8012A7E4) # $t8, 0x8013 +/* 0C59A4 800C4DA4 3C188013 */ lui $t8, %hi(gFonts) # $t8, 0x8013 /* 0C59A8 800C4DA8 03E00008 */ jr $ra /* 0C59AC 800C4DAC 00001025 */ move $v0, $zero @@ -13,7 +13,7 @@ glabel func_800C4DA0 /* 0C59C4 800C4DC4 91C6001D */ lbu $a2, 0x1d($t6) /* 0C59C8 800C4DC8 00000000 */ nop .L800C4DCC: -/* 0C59CC 800C4DCC 8F18A7E4 */ lw $t8, %lo(D_8012A7E4)($t8) +/* 0C59CC 800C4DCC 8F18A7E4 */ lw $t8, %lo(gFonts)($t8) /* 0C59D0 800C4DD0 90990000 */ lbu $t9, ($a0) /* 0C59D4 800C4DD4 00067A80 */ sll $t7, $a2, 0xa /* 0C59D8 800C4DD8 1320003D */ beqz $t9, .L800C4ED0 diff --git a/asm/non_matchings/unknown_0B8920/func_800C5168.s b/asm/non_matchings/font/func_800C5168.s similarity index 98% rename from asm/non_matchings/unknown_0B8920/func_800C5168.s rename to asm/non_matchings/font/func_800C5168.s index 67eaf196..525737d3 100644 --- a/asm/non_matchings/unknown_0B8920/func_800C5168.s +++ b/asm/non_matchings/font/func_800C5168.s @@ -48,7 +48,7 @@ glabel func_800C5168 /* 0C5E10 800C5210 AFAE014C */ sw $t6, 0x14c($sp) .L800C5214: /* 0C5E14 800C5214 8FAF0150 */ lw $t7, 0x150($sp) -/* 0C5E18 800C5218 3C0B8013 */ lui $t3, %hi(D_8012A7E4) # $t3, 0x8013 +/* 0C5E18 800C5218 3C0B8013 */ lui $t3, %hi(gFonts) # $t3, 0x8013 /* 0C5E1C 800C521C 15E20005 */ bne $t7, $v0, .L800C5234 /* 0C5E20 800C5220 00000000 */ nop /* 0C5E24 800C5224 8518000E */ lh $t8, 0xe($t0) @@ -60,7 +60,7 @@ glabel func_800C5168 /* 0C5E38 800C5238 8FA3015C */ lw $v1, 0x15c($sp) /* 0C5E3C 800C523C 10A2002F */ beq $a1, $v0, .L800C52FC /* 0C5E40 800C5240 00025280 */ sll $t2, $v0, 0xa -/* 0C5E44 800C5244 8D6BA7E4 */ lw $t3, %lo(D_8012A7E4)($t3) +/* 0C5E44 800C5244 8D6BA7E4 */ lw $t3, %lo(gFonts)($t3) /* 0C5E48 800C5248 306C0005 */ andi $t4, $v1, 5 /* 0C5E4C 800C524C 1180001B */ beqz $t4, .L800C52BC /* 0C5E50 800C5250 014B4821 */ addu $t1, $t2, $t3 diff --git a/asm/non_matchings/unknown_0B8920/func_800C5494.s b/asm/non_matchings/font/func_800C5494.s similarity index 96% rename from asm/non_matchings/unknown_0B8920/func_800C5494.s rename to asm/non_matchings/font/func_800C5494.s index 9b7613a9..bfe3405e 100644 --- a/asm/non_matchings/unknown_0B8920/func_800C5494.s +++ b/asm/non_matchings/font/func_800C5494.s @@ -36,9 +36,9 @@ glabel func_800C5494 /* 0C610C 800C550C 240100FF */ li $at, 255 /* 0C6110 800C5510 10610036 */ beq $v1, $at, .L800C55EC /* 0C6114 800C5514 0003C280 */ sll $t8, $v1, 0xa -/* 0C6118 800C5518 3C198013 */ lui $t9, %hi(D_8012A7E4) # $t9, 0x8013 +/* 0C6118 800C5518 3C198013 */ lui $t9, %hi(gFonts) # $t9, 0x8013 /* 0C611C 800C551C 8FA60010 */ lw $a2, 0x10($sp) -/* 0C6120 800C5520 8F39A7E4 */ lw $t9, %lo(D_8012A7E4)($t9) +/* 0C6120 800C5520 8F39A7E4 */ lw $t9, %lo(gFonts)($t9) /* 0C6124 800C5524 24010004 */ li $at, 4 /* 0C6128 800C5528 10C1002E */ beq $a2, $at, .L800C55E4 /* 0C612C 800C552C 03192021 */ addu $a0, $t8, $t9 diff --git a/asm/non_matchings/unknown_0B8920/func_800C5B58.s b/asm/non_matchings/font/func_800C5B58.s similarity index 100% rename from asm/non_matchings/unknown_0B8920/func_800C5B58.s rename to asm/non_matchings/font/func_800C5B58.s diff --git a/asm/non_matchings/unknown_0B8920/s32_to_string.s b/asm/non_matchings/font/s32_to_string.s similarity index 100% rename from asm/non_matchings/unknown_0B8920/s32_to_string.s rename to asm/non_matchings/font/s32_to_string.s diff --git a/asm/non_matchings/unknown_06B2B0/func_8006C3E0.s b/asm/non_matchings/unknown_06B2B0/func_8006C3E0.s index 8026abd9..f9023e4b 100644 --- a/asm/non_matchings/unknown_06B2B0/func_8006C3E0.s +++ b/asm/non_matchings/unknown_06B2B0/func_8006C3E0.s @@ -87,7 +87,7 @@ glabel func_8006C3E0 /* 06D120 8006C520 00000000 */ nop /* 06D124 8006C524 0C01BBF7 */ jal func_8006EFDC /* 06D128 8006C528 00000000 */ nop -/* 06D12C 8006C52C 0C030F00 */ jal func_800C3C00 +/* 06D12C 8006C52C 0C030F00 */ jal load_fonts /* 06D130 8006C530 00000000 */ nop /* 06D134 8006C534 0C01D6C6 */ jal func_80075B18 /* 06D138 8006C538 00000000 */ nop diff --git a/asm/non_matchings/unknown_0B8920/func_800C3C00.s b/asm/non_matchings/unknown_0B8920/func_800C3C00.s deleted file mode 100644 index 220a6a88..00000000 --- a/asm/non_matchings/unknown_0B8920/func_800C3C00.s +++ /dev/null @@ -1,353 +0,0 @@ -glabel func_800C3C00 -/* 0C4800 800C3C00 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0C4804 800C3C04 AFBF0014 */ sw $ra, 0x14($sp) -/* 0C4808 800C3C08 0C01DB16 */ jal load_asset_section_from_rom -/* 0C480C 800C3C0C 2404002C */ li $a0, 44 -/* 0C4810 800C3C10 3C038013 */ lui $v1, %hi(D_8012A7E4) # $v1, 0x8013 -/* 0C4814 800C3C14 2463A7E4 */ addiu $v1, %lo(D_8012A7E4) # addiu $v1, $v1, -0x581c -/* 0C4818 800C3C18 AC620000 */ sw $v0, ($v1) -/* 0C481C 800C3C1C 8C4E0000 */ lw $t6, ($v0) -/* 0C4820 800C3C20 3C048013 */ lui $a0, %hi(D_8012A7E0) # $a0, 0x8013 -/* 0C4824 800C3C24 2484A7E0 */ addiu $a0, %lo(D_8012A7E0) # addiu $a0, $a0, -0x5820 -/* 0C4828 800C3C28 244F0004 */ addiu $t7, $v0, 4 -/* 0C482C 800C3C2C AC6F0000 */ sw $t7, ($v1) -/* 0C4830 800C3C30 00002825 */ move $a1, $zero -/* 0C4834 800C3C34 19C0000B */ blez $t6, .L800C3C64 -/* 0C4838 800C3C38 AC8E0000 */ sw $t6, ($a0) -/* 0C483C 800C3C3C 00001025 */ move $v0, $zero -.L800C3C40: -/* 0C4840 800C3C40 8C790000 */ lw $t9, ($v1) -/* 0C4844 800C3C44 24A50001 */ addiu $a1, $a1, 1 -/* 0C4848 800C3C48 03225821 */ addu $t3, $t9, $v0 -/* 0C484C 800C3C4C A1600028 */ sb $zero, 0x28($t3) -/* 0C4850 800C3C50 8C8C0000 */ lw $t4, ($a0) -/* 0C4854 800C3C54 24420400 */ addiu $v0, $v0, 0x400 -/* 0C4858 800C3C58 00AC082A */ slt $at, $a1, $t4 -/* 0C485C 800C3C5C 1420FFF8 */ bnez $at, .L800C3C40 -/* 0C4860 800C3C60 00000000 */ nop -.L800C3C64: -/* 0C4864 800C3C64 3C05FFFF */ lui $a1, %hi(0xFFFF0028) # $a1, 0xffff -/* 0C4868 800C3C68 34A500FF */ ori $a1, (0xFFFF00FF & 0xFFFF) # ori $a1, $a1, 0xff -/* 0C486C 800C3C6C 0C01C327 */ jal allocate_from_main_pool_safe -/* 0C4870 800C3C70 24040940 */ li $a0, 2368 -/* 0C4874 800C3C74 3C068013 */ lui $a2, %hi(D_8012A7E8) # $a2, 0x8013 -/* 0C4878 800C3C78 24C6A7E8 */ addiu $a2, %lo(D_8012A7E8) # addiu $a2, $a2, -0x5818 -/* 0C487C 800C3C7C 3C038013 */ lui $v1, %hi(D_8012A7EC) # $v1, 0x8013 -/* 0C4880 800C3C80 244E0140 */ addiu $t6, $v0, 0x140 -/* 0C4884 800C3C84 2463A7EC */ addiu $v1, %lo(D_8012A7EC) # addiu $v1, $v1, -0x5814 -/* 0C4888 800C3C88 ACC20000 */ sw $v0, ($a2) -/* 0C488C 800C3C8C AC6E0000 */ sw $t6, ($v1) -/* 0C4890 800C3C90 2402013F */ li $v0, 319 -/* 0C4894 800C3C94 00002825 */ move $a1, $zero -/* 0C4898 800C3C98 240A4000 */ li $t2, 16384 -/* 0C489C 800C3C9C 240900F0 */ li $t1, 240 -/* 0C48A0 800C3CA0 24080140 */ li $t0, 320 -/* 0C48A4 800C3CA4 240700EF */ li $a3, 239 -/* 0C48A8 800C3CA8 240400FF */ li $a0, 255 -.L800C3CAC: -/* 0C48AC 800C3CAC 8CCF0000 */ lw $t7, ($a2) -/* 0C48B0 800C3CB0 00000000 */ nop -/* 0C48B4 800C3CB4 01E5C021 */ addu $t8, $t7, $a1 -/* 0C48B8 800C3CB8 A7000000 */ sh $zero, ($t8) -/* 0C48BC 800C3CBC 8CD90000 */ lw $t9, ($a2) -/* 0C48C0 800C3CC0 00000000 */ nop -/* 0C48C4 800C3CC4 03255821 */ addu $t3, $t9, $a1 -/* 0C48C8 800C3CC8 A5600002 */ sh $zero, 2($t3) -/* 0C48CC 800C3CCC 8CCC0000 */ lw $t4, ($a2) -/* 0C48D0 800C3CD0 00000000 */ nop -/* 0C48D4 800C3CD4 01856821 */ addu $t5, $t4, $a1 -/* 0C48D8 800C3CD8 A5A00004 */ sh $zero, 4($t5) -/* 0C48DC 800C3CDC 8CCE0000 */ lw $t6, ($a2) -/* 0C48E0 800C3CE0 00000000 */ nop -/* 0C48E4 800C3CE4 01C57821 */ addu $t7, $t6, $a1 -/* 0C48E8 800C3CE8 A5E00006 */ sh $zero, 6($t7) -/* 0C48EC 800C3CEC 8CD80000 */ lw $t8, ($a2) -/* 0C48F0 800C3CF0 00000000 */ nop -/* 0C48F4 800C3CF4 0305C821 */ addu $t9, $t8, $a1 -/* 0C48F8 800C3CF8 A7220008 */ sh $v0, 8($t9) -/* 0C48FC 800C3CFC 8CCB0000 */ lw $t3, ($a2) -/* 0C4900 800C3D00 00000000 */ nop -/* 0C4904 800C3D04 01656021 */ addu $t4, $t3, $a1 -/* 0C4908 800C3D08 A587000A */ sh $a3, 0xa($t4) -/* 0C490C 800C3D0C 8CCD0000 */ lw $t5, ($a2) -/* 0C4910 800C3D10 00000000 */ nop -/* 0C4914 800C3D14 01A57021 */ addu $t6, $t5, $a1 -/* 0C4918 800C3D18 A5C8000C */ sh $t0, 0xc($t6) -/* 0C491C 800C3D1C 8CCF0000 */ lw $t7, ($a2) -/* 0C4920 800C3D20 00000000 */ nop -/* 0C4924 800C3D24 01E5C021 */ addu $t8, $t7, $a1 -/* 0C4928 800C3D28 A709000E */ sh $t1, 0xe($t8) -/* 0C492C 800C3D2C 8CD90000 */ lw $t9, ($a2) -/* 0C4930 800C3D30 00000000 */ nop -/* 0C4934 800C3D34 03255821 */ addu $t3, $t9, $a1 -/* 0C4938 800C3D38 A1640010 */ sb $a0, 0x10($t3) -/* 0C493C 800C3D3C 8CCC0000 */ lw $t4, ($a2) -/* 0C4940 800C3D40 00000000 */ nop -/* 0C4944 800C3D44 01856821 */ addu $t5, $t4, $a1 -/* 0C4948 800C3D48 A1A40011 */ sb $a0, 0x11($t5) -/* 0C494C 800C3D4C 8CCE0000 */ lw $t6, ($a2) -/* 0C4950 800C3D50 00000000 */ nop -/* 0C4954 800C3D54 01C57821 */ addu $t7, $t6, $a1 -/* 0C4958 800C3D58 A1E40012 */ sb $a0, 0x12($t7) -/* 0C495C 800C3D5C 8CD80000 */ lw $t8, ($a2) -/* 0C4960 800C3D60 00000000 */ nop -/* 0C4964 800C3D64 0305C821 */ addu $t9, $t8, $a1 -/* 0C4968 800C3D68 A3200013 */ sb $zero, 0x13($t9) -/* 0C496C 800C3D6C 8CCB0000 */ lw $t3, ($a2) -/* 0C4970 800C3D70 00000000 */ nop -/* 0C4974 800C3D74 01656021 */ addu $t4, $t3, $a1 -/* 0C4978 800C3D78 A1840014 */ sb $a0, 0x14($t4) -/* 0C497C 800C3D7C 8CCD0000 */ lw $t5, ($a2) -/* 0C4980 800C3D80 00000000 */ nop -/* 0C4984 800C3D84 01A57021 */ addu $t6, $t5, $a1 -/* 0C4988 800C3D88 A1C40015 */ sb $a0, 0x15($t6) -/* 0C498C 800C3D8C 8CCF0000 */ lw $t7, ($a2) -/* 0C4990 800C3D90 00000000 */ nop -/* 0C4994 800C3D94 01E5C021 */ addu $t8, $t7, $a1 -/* 0C4998 800C3D98 A3040016 */ sb $a0, 0x16($t8) -/* 0C499C 800C3D9C 8CD90000 */ lw $t9, ($a2) -/* 0C49A0 800C3DA0 00000000 */ nop -/* 0C49A4 800C3DA4 03255821 */ addu $t3, $t9, $a1 -/* 0C49A8 800C3DA8 A1600017 */ sb $zero, 0x17($t3) -/* 0C49AC 800C3DAC 8CCC0000 */ lw $t4, ($a2) -/* 0C49B0 800C3DB0 00000000 */ nop -/* 0C49B4 800C3DB4 01856821 */ addu $t5, $t4, $a1 -/* 0C49B8 800C3DB8 A1A40018 */ sb $a0, 0x18($t5) -/* 0C49BC 800C3DBC 8CCE0000 */ lw $t6, ($a2) -/* 0C49C0 800C3DC0 00000000 */ nop -/* 0C49C4 800C3DC4 01C57821 */ addu $t7, $t6, $a1 -/* 0C49C8 800C3DC8 A1E40019 */ sb $a0, 0x19($t7) -/* 0C49CC 800C3DCC 8CD80000 */ lw $t8, ($a2) -/* 0C49D0 800C3DD0 00000000 */ nop -/* 0C49D4 800C3DD4 0305C821 */ addu $t9, $t8, $a1 -/* 0C49D8 800C3DD8 A324001A */ sb $a0, 0x1a($t9) -/* 0C49DC 800C3DDC 8CCB0000 */ lw $t3, ($a2) -/* 0C49E0 800C3DE0 00000000 */ nop -/* 0C49E4 800C3DE4 01656021 */ addu $t4, $t3, $a1 -/* 0C49E8 800C3DE8 A180001B */ sb $zero, 0x1b($t4) -/* 0C49EC 800C3DEC 8CCD0000 */ lw $t5, ($a2) -/* 0C49F0 800C3DF0 00000000 */ nop -/* 0C49F4 800C3DF4 01A57021 */ addu $t6, $t5, $a1 -/* 0C49F8 800C3DF8 A1C4001C */ sb $a0, 0x1c($t6) -/* 0C49FC 800C3DFC 8CCF0000 */ lw $t7, ($a2) -/* 0C4A00 800C3E00 00000000 */ nop -/* 0C4A04 800C3E04 01E5C021 */ addu $t8, $t7, $a1 -/* 0C4A08 800C3E08 10A00006 */ beqz $a1, .L800C3E24 -/* 0C4A0C 800C3E0C A304001D */ sb $a0, 0x1d($t8) -/* 0C4A10 800C3E10 8CD90000 */ lw $t9, ($a2) -/* 0C4A14 800C3E14 00000000 */ nop -/* 0C4A18 800C3E18 03255821 */ addu $t3, $t9, $a1 -/* 0C4A1C 800C3E1C 10000005 */ b .L800C3E34 -/* 0C4A20 800C3E20 A56A001E */ sh $t2, 0x1e($t3) -.L800C3E24: -/* 0C4A24 800C3E24 8CCC0000 */ lw $t4, ($a2) -/* 0C4A28 800C3E28 00000000 */ nop -/* 0C4A2C 800C3E2C 01856821 */ addu $t5, $t4, $a1 -/* 0C4A30 800C3E30 A5A0001E */ sh $zero, 0x1e($t5) -.L800C3E34: -/* 0C4A34 800C3E34 8CCE0000 */ lw $t6, ($a2) -/* 0C4A38 800C3E38 00000000 */ nop -/* 0C4A3C 800C3E3C 01C57821 */ addu $t7, $t6, $a1 -/* 0C4A40 800C3E40 A5E00020 */ sh $zero, 0x20($t7) -/* 0C4A44 800C3E44 8CD80000 */ lw $t8, ($a2) -/* 0C4A48 800C3E48 00000000 */ nop -/* 0C4A4C 800C3E4C 0305C821 */ addu $t9, $t8, $a1 -/* 0C4A50 800C3E50 A7200022 */ sh $zero, 0x22($t9) -/* 0C4A54 800C3E54 8CCB0000 */ lw $t3, ($a2) -/* 0C4A58 800C3E58 00000000 */ nop -/* 0C4A5C 800C3E5C 01656021 */ addu $t4, $t3, $a1 -/* 0C4A60 800C3E60 24A50028 */ addiu $a1, %lo(0xFFFF0028) # addiu $a1, $a1, 0x28 -/* 0C4A64 800C3E64 28A10140 */ slti $at, $a1, 0x140 -/* 0C4A68 800C3E68 1420FF90 */ bnez $at, .L800C3CAC -/* 0C4A6C 800C3E6C AD800024 */ sw $zero, 0x24($t4) -/* 0C4A70 800C3E70 00001025 */ move $v0, $zero -/* 0C4A74 800C3E74 24050800 */ li $a1, 2048 -.L800C3E78: -/* 0C4A78 800C3E78 8C6D0000 */ lw $t5, ($v1) -/* 0C4A7C 800C3E7C 00000000 */ nop -/* 0C4A80 800C3E80 01A27021 */ addu $t6, $t5, $v0 -/* 0C4A84 800C3E84 A1C40001 */ sb $a0, 1($t6) -/* 0C4A88 800C3E88 8C6F0000 */ lw $t7, ($v1) -/* 0C4A8C 800C3E8C 00000000 */ nop -/* 0C4A90 800C3E90 01E2C021 */ addu $t8, $t7, $v0 -/* 0C4A94 800C3E94 AF000004 */ sw $zero, 4($t8) -/* 0C4A98 800C3E98 8C790000 */ lw $t9, ($v1) -/* 0C4A9C 800C3E9C 00000000 */ nop -/* 0C4AA0 800C3EA0 03225821 */ addu $t3, $t9, $v0 -/* 0C4AA4 800C3EA4 A1640010 */ sb $a0, 0x10($t3) -/* 0C4AA8 800C3EA8 8C6C0000 */ lw $t4, ($v1) -/* 0C4AAC 800C3EAC 00000000 */ nop -/* 0C4AB0 800C3EB0 01826821 */ addu $t5, $t4, $v0 -/* 0C4AB4 800C3EB4 A1A40011 */ sb $a0, 0x11($t5) -/* 0C4AB8 800C3EB8 8C6E0000 */ lw $t6, ($v1) -/* 0C4ABC 800C3EBC 00000000 */ nop -/* 0C4AC0 800C3EC0 01C27821 */ addu $t7, $t6, $v0 -/* 0C4AC4 800C3EC4 A1E40012 */ sb $a0, 0x12($t7) -/* 0C4AC8 800C3EC8 8C780000 */ lw $t8, ($v1) -/* 0C4ACC 800C3ECC 00000000 */ nop -/* 0C4AD0 800C3ED0 0302C821 */ addu $t9, $t8, $v0 -/* 0C4AD4 800C3ED4 A3200013 */ sb $zero, 0x13($t9) -/* 0C4AD8 800C3ED8 8C6B0000 */ lw $t3, ($v1) -/* 0C4ADC 800C3EDC 00000000 */ nop -/* 0C4AE0 800C3EE0 01626021 */ addu $t4, $t3, $v0 -/* 0C4AE4 800C3EE4 A1840014 */ sb $a0, 0x14($t4) -/* 0C4AE8 800C3EE8 8C6D0000 */ lw $t5, ($v1) -/* 0C4AEC 800C3EEC 00000000 */ nop -/* 0C4AF0 800C3EF0 01A27021 */ addu $t6, $t5, $v0 -/* 0C4AF4 800C3EF4 A1C40015 */ sb $a0, 0x15($t6) -/* 0C4AF8 800C3EF8 8C6F0000 */ lw $t7, ($v1) -/* 0C4AFC 800C3EFC 00000000 */ nop -/* 0C4B00 800C3F00 01E2C021 */ addu $t8, $t7, $v0 -/* 0C4B04 800C3F04 A3040016 */ sb $a0, 0x16($t8) -/* 0C4B08 800C3F08 8C790000 */ lw $t9, ($v1) -/* 0C4B0C 800C3F0C 00000000 */ nop -/* 0C4B10 800C3F10 03225821 */ addu $t3, $t9, $v0 -/* 0C4B14 800C3F14 A1600017 */ sb $zero, 0x17($t3) -/* 0C4B18 800C3F18 8C6C0000 */ lw $t4, ($v1) -/* 0C4B1C 800C3F1C 00000000 */ nop -/* 0C4B20 800C3F20 01826821 */ addu $t5, $t4, $v0 -/* 0C4B24 800C3F24 ADA0001C */ sw $zero, 0x1c($t5) -/* 0C4B28 800C3F28 8C6E0000 */ lw $t6, ($v1) -/* 0C4B2C 800C3F2C 00000000 */ nop -/* 0C4B30 800C3F30 01C27821 */ addu $t7, $t6, $v0 -/* 0C4B34 800C3F34 A1E40021 */ sb $a0, 0x21($t7) -/* 0C4B38 800C3F38 8C780000 */ lw $t8, ($v1) -/* 0C4B3C 800C3F3C 00000000 */ nop -/* 0C4B40 800C3F40 0302C821 */ addu $t9, $t8, $v0 -/* 0C4B44 800C3F44 AF200024 */ sw $zero, 0x24($t9) -/* 0C4B48 800C3F48 8C6B0000 */ lw $t3, ($v1) -/* 0C4B4C 800C3F4C 00000000 */ nop -/* 0C4B50 800C3F50 01626021 */ addu $t4, $t3, $v0 -/* 0C4B54 800C3F54 A1840030 */ sb $a0, 0x30($t4) -/* 0C4B58 800C3F58 8C6D0000 */ lw $t5, ($v1) -/* 0C4B5C 800C3F5C 00000000 */ nop -/* 0C4B60 800C3F60 01A27021 */ addu $t6, $t5, $v0 -/* 0C4B64 800C3F64 A1C40031 */ sb $a0, 0x31($t6) -/* 0C4B68 800C3F68 8C6F0000 */ lw $t7, ($v1) -/* 0C4B6C 800C3F6C 00000000 */ nop -/* 0C4B70 800C3F70 01E2C021 */ addu $t8, $t7, $v0 -/* 0C4B74 800C3F74 A3040032 */ sb $a0, 0x32($t8) -/* 0C4B78 800C3F78 8C790000 */ lw $t9, ($v1) -/* 0C4B7C 800C3F7C 00000000 */ nop -/* 0C4B80 800C3F80 03225821 */ addu $t3, $t9, $v0 -/* 0C4B84 800C3F84 A1600033 */ sb $zero, 0x33($t3) -/* 0C4B88 800C3F88 8C6C0000 */ lw $t4, ($v1) -/* 0C4B8C 800C3F8C 00000000 */ nop -/* 0C4B90 800C3F90 01826821 */ addu $t5, $t4, $v0 -/* 0C4B94 800C3F94 A1A40034 */ sb $a0, 0x34($t5) -/* 0C4B98 800C3F98 8C6E0000 */ lw $t6, ($v1) -/* 0C4B9C 800C3F9C 00000000 */ nop -/* 0C4BA0 800C3FA0 01C27821 */ addu $t7, $t6, $v0 -/* 0C4BA4 800C3FA4 A1E40035 */ sb $a0, 0x35($t7) -/* 0C4BA8 800C3FA8 8C780000 */ lw $t8, ($v1) -/* 0C4BAC 800C3FAC 00000000 */ nop -/* 0C4BB0 800C3FB0 0302C821 */ addu $t9, $t8, $v0 -/* 0C4BB4 800C3FB4 A3240036 */ sb $a0, 0x36($t9) -/* 0C4BB8 800C3FB8 8C6B0000 */ lw $t3, ($v1) -/* 0C4BBC 800C3FBC 00000000 */ nop -/* 0C4BC0 800C3FC0 01626021 */ addu $t4, $t3, $v0 -/* 0C4BC4 800C3FC4 A1800037 */ sb $zero, 0x37($t4) -/* 0C4BC8 800C3FC8 8C6D0000 */ lw $t5, ($v1) -/* 0C4BCC 800C3FCC 00000000 */ nop -/* 0C4BD0 800C3FD0 01A27021 */ addu $t6, $t5, $v0 -/* 0C4BD4 800C3FD4 ADC0003C */ sw $zero, 0x3c($t6) -/* 0C4BD8 800C3FD8 8C6F0000 */ lw $t7, ($v1) -/* 0C4BDC 800C3FDC 00000000 */ nop -/* 0C4BE0 800C3FE0 01E2C021 */ addu $t8, $t7, $v0 -/* 0C4BE4 800C3FE4 A3040041 */ sb $a0, 0x41($t8) -/* 0C4BE8 800C3FE8 8C790000 */ lw $t9, ($v1) -/* 0C4BEC 800C3FEC 00000000 */ nop -/* 0C4BF0 800C3FF0 03225821 */ addu $t3, $t9, $v0 -/* 0C4BF4 800C3FF4 AD600044 */ sw $zero, 0x44($t3) -/* 0C4BF8 800C3FF8 8C6C0000 */ lw $t4, ($v1) -/* 0C4BFC 800C3FFC 00000000 */ nop -/* 0C4C00 800C4000 01826821 */ addu $t5, $t4, $v0 -/* 0C4C04 800C4004 A1A40050 */ sb $a0, 0x50($t5) -/* 0C4C08 800C4008 8C6E0000 */ lw $t6, ($v1) -/* 0C4C0C 800C400C 00000000 */ nop -/* 0C4C10 800C4010 01C27821 */ addu $t7, $t6, $v0 -/* 0C4C14 800C4014 A1E40051 */ sb $a0, 0x51($t7) -/* 0C4C18 800C4018 8C780000 */ lw $t8, ($v1) -/* 0C4C1C 800C401C 00000000 */ nop -/* 0C4C20 800C4020 0302C821 */ addu $t9, $t8, $v0 -/* 0C4C24 800C4024 A3240052 */ sb $a0, 0x52($t9) -/* 0C4C28 800C4028 8C6B0000 */ lw $t3, ($v1) -/* 0C4C2C 800C402C 00000000 */ nop -/* 0C4C30 800C4030 01626021 */ addu $t4, $t3, $v0 -/* 0C4C34 800C4034 A1800053 */ sb $zero, 0x53($t4) -/* 0C4C38 800C4038 8C6D0000 */ lw $t5, ($v1) -/* 0C4C3C 800C403C 00000000 */ nop -/* 0C4C40 800C4040 01A27021 */ addu $t6, $t5, $v0 -/* 0C4C44 800C4044 A1C40054 */ sb $a0, 0x54($t6) -/* 0C4C48 800C4048 8C6F0000 */ lw $t7, ($v1) -/* 0C4C4C 800C404C 00000000 */ nop -/* 0C4C50 800C4050 01E2C021 */ addu $t8, $t7, $v0 -/* 0C4C54 800C4054 A3040055 */ sb $a0, 0x55($t8) -/* 0C4C58 800C4058 8C790000 */ lw $t9, ($v1) -/* 0C4C5C 800C405C 00000000 */ nop -/* 0C4C60 800C4060 03225821 */ addu $t3, $t9, $v0 -/* 0C4C64 800C4064 A1640056 */ sb $a0, 0x56($t3) -/* 0C4C68 800C4068 8C6C0000 */ lw $t4, ($v1) -/* 0C4C6C 800C406C 00000000 */ nop -/* 0C4C70 800C4070 01826821 */ addu $t5, $t4, $v0 -/* 0C4C74 800C4074 A1A00057 */ sb $zero, 0x57($t5) -/* 0C4C78 800C4078 8C6E0000 */ lw $t6, ($v1) -/* 0C4C7C 800C407C 00000000 */ nop -/* 0C4C80 800C4080 01C27821 */ addu $t7, $t6, $v0 -/* 0C4C84 800C4084 ADE0005C */ sw $zero, 0x5c($t7) -/* 0C4C88 800C4088 8C780000 */ lw $t8, ($v1) -/* 0C4C8C 800C408C 00000000 */ nop -/* 0C4C90 800C4090 0302C821 */ addu $t9, $t8, $v0 -/* 0C4C94 800C4094 A3240061 */ sb $a0, 0x61($t9) -/* 0C4C98 800C4098 8C6B0000 */ lw $t3, ($v1) -/* 0C4C9C 800C409C 00000000 */ nop -/* 0C4CA0 800C40A0 01626021 */ addu $t4, $t3, $v0 -/* 0C4CA4 800C40A4 AD800064 */ sw $zero, 0x64($t4) -/* 0C4CA8 800C40A8 8C6D0000 */ lw $t5, ($v1) -/* 0C4CAC 800C40AC 00000000 */ nop -/* 0C4CB0 800C40B0 01A27021 */ addu $t6, $t5, $v0 -/* 0C4CB4 800C40B4 A1C40070 */ sb $a0, 0x70($t6) -/* 0C4CB8 800C40B8 8C6F0000 */ lw $t7, ($v1) -/* 0C4CBC 800C40BC 00000000 */ nop -/* 0C4CC0 800C40C0 01E2C021 */ addu $t8, $t7, $v0 -/* 0C4CC4 800C40C4 A3040071 */ sb $a0, 0x71($t8) -/* 0C4CC8 800C40C8 8C790000 */ lw $t9, ($v1) -/* 0C4CCC 800C40CC 00000000 */ nop -/* 0C4CD0 800C40D0 03225821 */ addu $t3, $t9, $v0 -/* 0C4CD4 800C40D4 A1640072 */ sb $a0, 0x72($t3) -/* 0C4CD8 800C40D8 8C6C0000 */ lw $t4, ($v1) -/* 0C4CDC 800C40DC 00000000 */ nop -/* 0C4CE0 800C40E0 01826821 */ addu $t5, $t4, $v0 -/* 0C4CE4 800C40E4 A1A00073 */ sb $zero, 0x73($t5) -/* 0C4CE8 800C40E8 8C6E0000 */ lw $t6, ($v1) -/* 0C4CEC 800C40EC 00000000 */ nop -/* 0C4CF0 800C40F0 01C27821 */ addu $t7, $t6, $v0 -/* 0C4CF4 800C40F4 A1E40074 */ sb $a0, 0x74($t7) -/* 0C4CF8 800C40F8 8C780000 */ lw $t8, ($v1) -/* 0C4CFC 800C40FC 00000000 */ nop -/* 0C4D00 800C4100 0302C821 */ addu $t9, $t8, $v0 -/* 0C4D04 800C4104 A3240075 */ sb $a0, 0x75($t9) -/* 0C4D08 800C4108 8C6B0000 */ lw $t3, ($v1) -/* 0C4D0C 800C410C 00000000 */ nop -/* 0C4D10 800C4110 01626021 */ addu $t4, $t3, $v0 -/* 0C4D14 800C4114 A1840076 */ sb $a0, 0x76($t4) -/* 0C4D18 800C4118 8C6D0000 */ lw $t5, ($v1) -/* 0C4D1C 800C411C 00000000 */ nop -/* 0C4D20 800C4120 01A27021 */ addu $t6, $t5, $v0 -/* 0C4D24 800C4124 A1C00077 */ sb $zero, 0x77($t6) -/* 0C4D28 800C4128 8C6F0000 */ lw $t7, ($v1) -/* 0C4D2C 800C412C 00000000 */ nop -/* 0C4D30 800C4130 01E2C021 */ addu $t8, $t7, $v0 -/* 0C4D34 800C4134 24420080 */ addiu $v0, $v0, 0x80 -/* 0C4D38 800C4138 1445FF4F */ bne $v0, $a1, .L800C3E78 -/* 0C4D3C 800C413C AF00007C */ sw $zero, 0x7c($t8) -/* 0C4D40 800C4140 0C03105C */ jal func_800C4170 -/* 0C4D44 800C4144 00002025 */ move $a0, $zero -/* 0C4D48 800C4148 0C03105C */ jal func_800C4170 -/* 0C4D4C 800C414C 24040001 */ li $a0, 1 -/* 0C4D50 800C4150 8FBF0014 */ lw $ra, 0x14($sp) -/* 0C4D54 800C4154 3C018013 */ lui $at, %hi(D_8012A7F0) # $at, 0x8013 -/* 0C4D58 800C4158 AC20A7F0 */ sw $zero, %lo(D_8012A7F0)($at) -/* 0C4D5C 800C415C 03E00008 */ jr $ra -/* 0C4D60 800C4160 27BD0018 */ addiu $sp, $sp, 0x18 - diff --git a/src/unknown_0C4800.c b/src/font.c similarity index 56% rename from src/unknown_0C4800.c rename to src/font.c index 10e6199c..369daf9a 100644 --- a/src/unknown_0C4800.c +++ b/src/font.c @@ -2,7 +2,9 @@ /* RAM_POS: 0x800C3C00 */ #include "memory.h" +#include "video.h" +#include "structs.h" #include "types.h" #include "macros.h" #include "asset_sections.h" @@ -166,8 +168,25 @@ s32 D_8012A7D0; s32 D_8012A7D4; s32 D_8012A7D8; s32 D_8012A7DC; -s32 D_8012A7E0; -s32 D_8012A7E4; + +s32 gNumberOfFonts; + +/* Size: 8 bytes */ +typedef struct FontCharData { + u8 unk0; + u8 unk1[7]; +} FontCharData; + +/* Size: 0x400 bytes */ +typedef struct FontData { + char name[0x28]; + u8 unk28[24]; + s16 unk40[32]; + TextureHeader *texturePointers[32]; + FontCharData unk100[96]; +} FontData; + +FontData* gFonts; /* Size: 0x28 bytes */ typedef struct unk8012A7E8_24 { @@ -179,28 +198,28 @@ typedef struct unk8012A7E8_24 { /* Size: 0x28 bytes */ typedef struct unk8012A7E8 { - s16 unk0; - s16 unk2; + s16 xpos; + s16 ypos; s16 unk4; s16 unk6; s16 unk8; s16 unkA; s16 unkC; s16 unkE; - s8 unk10; - s8 unk11; - s8 unk12; - s8 unk13; - s8 unk14; - s8 unk15; - s8 unk16; - s8 unk17; - s8 unk18; - s8 unk19; - s8 unk1A; - s8 unk1B; - s8 unk1C; - s8 unk1D; + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; + u8 colorRed; + u8 colorGreen; + u8 colorBlue; + u8 colorAlpha; + u8 bgRed; + u8 bgGreen; + u8 bgBlue; + u8 bgAlpha; + u8 opacity; + u8 font; u16 unk1E; s16 unk20; s16 unk22; @@ -208,105 +227,246 @@ typedef struct unk8012A7E8 { } unk8012A7E8; unk8012A7E8 (*D_8012A7E8)[1]; -s32 D_8012A7EC; + +/* Size: 0x20 bytes */ +typedef struct unk8012A7EC { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + s32 unk4; + s32 unk8; + s32 unkC; + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; + u8 unk14; + u8 unk15; + u8 unk16; + u8 unk17; + s32 unk18; + s32 unk1C; +} unk8012A7EC; +unk8012A7EC (*D_8012A7EC)[1]; + s32 D_8012A7F0; s8 D_8012A7F4; s32 D_8012A7F8; s32 D_8012A7FC; -OSThread piThread; //piThread -s32 D_8012A9B0[64]; -OSMesgQueue piEventQueue; //piEventQueue -OSMesg piEventBuf[2]; //piEventBuf - /******************************/ -extern OSMesgQueue piAccessQueue; //piAccessQueue -extern u32 __osPiAccessQueueEnabled; //__osPiAccessQueueEnabled -extern OSDevMgr __osPiDevMgr; -void __osDevMgrMain(void); -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_0B8920/func_800C3C00.s") -#else +void func_800C4170(s32 arg0); -extern u32* D_8012A7E4; -void func_800C3C00(void){ +#define unk8012A7E8_COUNT 8 +#define unk8012A7EC_COUNT 64 +#define unk8012A7E8_TOTAL_SIZE (sizeof(unk8012A7E8) * unk8012A7E8_COUNT) +#define unk8012A7EC_TOTAL_SIZE (sizeof(unk8012A7EC) * unk8012A7EC_COUNT) + +void load_fonts(void) { + u8 *fontAssetData; s32 i; - D_8012A7E4 = load_asset_section_from_rom(ASSET_BINARY_44); - D_8012A7E0 = *(D_8012A7E4++); - for(i = 0; i< D_8012A7E0; i++){ - D_8012A7E0[] - } -} -#endif + fontAssetData = load_asset_section_from_rom(ASSET_BINARY_44); + + gFonts = (FontData*)(fontAssetData); // ??? + gNumberOfFonts = *((s32*)fontAssetData); + gFonts = (FontData*)(fontAssetData + 4); + + for (i = 0; i < gNumberOfFonts; i++) { + gFonts[i].unk28[0] = 0; + } + + D_8012A7E8 = allocate_from_main_pool_safe(unk8012A7E8_TOTAL_SIZE + unk8012A7EC_TOTAL_SIZE, COLOR_TAG_YELLOW); + D_8012A7EC = (unk8012A7EC*)((u8*)D_8012A7E8 + unk8012A7E8_TOTAL_SIZE); + + for (i = 0; i < unk8012A7E8_COUNT; i++) { + (*D_8012A7E8)[i].xpos = 0; + (*D_8012A7E8)[i].ypos = 0; + (*D_8012A7E8)[i].unk4 = 0; + (*D_8012A7E8)[i].unk6 = 0; + (*D_8012A7E8)[i].unk8 = SCREEN_WIDTH - 1; + (*D_8012A7E8)[i].unkA = SCREEN_HEIGHT - 1; + (*D_8012A7E8)[i].unkC = SCREEN_WIDTH; + (*D_8012A7E8)[i].unkE = SCREEN_HEIGHT; + (*D_8012A7E8)[i].unk10 = 0xFF; + (*D_8012A7E8)[i].unk11 = 0xFF; + (*D_8012A7E8)[i].unk12 = 0xFF; + (*D_8012A7E8)[i].unk13 = 0; + (*D_8012A7E8)[i].colorRed = 0xFF; + (*D_8012A7E8)[i].colorGreen = 0xFF; + (*D_8012A7E8)[i].colorBlue = 0xFF; + (*D_8012A7E8)[i].colorAlpha = 0; + (*D_8012A7E8)[i].bgRed = 0xFF; + (*D_8012A7E8)[i].bgGreen = 0xFF; + (*D_8012A7E8)[i].bgBlue = 0xFF; + (*D_8012A7E8)[i].bgAlpha = 0; + (*D_8012A7E8)[i].opacity = 0xFF; + (*D_8012A7E8)[i].font = 0xFF; + if (i != 0) { + (*D_8012A7E8)[i].unk1E = 0x4000; + } else { + (*D_8012A7E8)[i].unk1E = 0; + } + (*D_8012A7E8)[i].unk20 = 0; + (*D_8012A7E8)[i].unk22 = 0; + (*D_8012A7E8)[i].unk24 = 0; + } + for (i = 0; i < unk8012A7EC_COUNT; i++) { + (*D_8012A7EC)[i].unk1 = 0xFF; + (*D_8012A7EC)[i].unk4 = 0; + (*D_8012A7EC)[i].unk10 = 0xFF; + (*D_8012A7EC)[i].unk11 = 0xFF; + (*D_8012A7EC)[i].unk12 = 0xFF; + (*D_8012A7EC)[i].unk13 = 0; + (*D_8012A7EC)[i].unk14 = 0xFF; + (*D_8012A7EC)[i].unk15 = 0xFF; + (*D_8012A7EC)[i].unk16 = 0xFF; + (*D_8012A7EC)[i].unk17 = 0; + (*D_8012A7EC)[i].unk1C = 0; + } + func_800C4170(0); + func_800C4170(1); + D_8012A7F0 = 0; +} void func_800C4164(s32 arg0) { D_8012A7F0 = arg0; } -GLOBAL_ASM("asm/non_matchings/unknown_0B8920/func_800C4170.s") -GLOBAL_ASM("asm/non_matchings/unknown_0B8920/func_800C422C.s") -GLOBAL_ASM("asm/non_matchings/unknown_0B8920/set_text_font.s") +#ifdef NON_MATCHING +// Mostly has regalloc issues. +void func_800C4170(s32 arg0) { + if (arg0 < gNumberOfFonts) { + FontData *fontData = &gFonts[arg0]; + fontData->unk28[0]++; + if (fontData->unk28[0] == 1) { + // Minor issue with this loop. + s32 i = 0; + while (fontData->unk40[i] != -1) { + fontData->texturePointers[i] = func_8007AE74(fontData->unk40[i]); + i++; + if (i >= 64) { + break; + } + } + } + } +} +#else +GLOBAL_ASM("asm/non_matchings/font/func_800C4170.s") +#endif -void set_text_color(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { - (*D_8012A7E8)[0].unk14 = arg0; - (*D_8012A7E8)[0].unk15 = arg1; - (*D_8012A7E8)[0].unk16 = arg2; - (*D_8012A7E8)[0].unk17 = arg3; - (*D_8012A7E8)[0].unk1C = arg4; +#ifdef NON_MATCHING +// Mostly has regalloc issues. +void func_800C422C(s32 arg0) { + if (arg0 < gNumberOfFonts) { + FontData *fontData = &gFonts[arg0]; + if (fontData->unk28[0] > 0) { + fontData->unk28[0]--; + if ((fontData->unk28[0] & 0xFF) == 0) { + // Minor issue with this loop. + s32 i = 0; + while (fontData->unk40[i] != -1) { + func_8007B2BC(fontData->texturePointers[i]); + fontData->texturePointers[i] = NULL; + i++; + if (i >= 32) { + break; + } + } + } + } + } +} +#else +GLOBAL_ASM("asm/non_matchings/font/func_800C422C.s") +#endif + +void set_text_font(s32 arg0) { + if (arg0 < gNumberOfFonts) { + (*D_8012A7E8)[0].font = arg0; + } } -void set_text_background_color(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { - (*D_8012A7E8)[0].unk18 = arg0; - (*D_8012A7E8)[0].unk19 = arg1; - (*D_8012A7E8)[0].unk1A = arg2; - (*D_8012A7E8)[0].unk1B = arg3; +#ifdef NON_MATCHING + +// Unused. Has regalloc issues +TextureHeader *func_800C4318(s32 font, u8 arg1) { + if (font < gNumberOfFonts) { + FontData *fontData = &gFonts[font]; + if (fontData->unk28[0] != 0) { + arg1 = fontData->unk100[(arg1 - 32) & 0xFF].unk0; + if (arg1 != 0xFF) { + return fontData->texturePointers[arg1]; + } + return NULL; + } + } + // @bug: No return statement. The function will return whatever happens to be in v0 + // before this function was called. +} + +#else +GLOBAL_ASM("asm/non_matchings/font/func_800C4318.s") +#endif + +void set_text_color(s32 red, s32 green, s32 blue, s32 alpha, s32 opacity) { + (*D_8012A7E8)[0].colorRed = red; + (*D_8012A7E8)[0].colorGreen = green; + (*D_8012A7E8)[0].colorBlue = blue; + (*D_8012A7E8)[0].colorAlpha = alpha; + (*D_8012A7E8)[0].opacity = opacity; +} + +void set_text_background_color(s32 red, s32 green, s32 blue, s32 alpha) { + (*D_8012A7E8)[0].bgRed = red; + (*D_8012A7E8)[0].bgGreen = green; + (*D_8012A7E8)[0].bgBlue = blue; + (*D_8012A7E8)[0].bgAlpha = alpha; } void func_800C45A4(s32, unk8012A7E8*, s32, s32, f32); // Unused? -void func_800C4404(s32 arg0, s32 arg1, s32 arg2) { - func_800C45A4(arg0, *D_8012A7E8, arg1, arg2, 1.0f); +void func_800C4404(Gfx** displayList, char* text, s32 alignmentFlags) { + func_800C45A4(displayList, &(*D_8012A7E8)[0], text, alignmentFlags, 1.0f); } void draw_text(Gfx** displayList, s32 xpos, s32 ypos, char* text, s32 alignmentFlags) { unk8012A7E8 *temp = &(*D_8012A7E8)[0]; - temp->unk0 = (xpos == -0x8000) ? temp->unkC >> 1 : xpos; - temp->unk2 = (ypos == -0x8000) ? temp->unkE >> 1 : ypos; + temp->xpos = (xpos == -0x8000) ? temp->unkC >> 1 : xpos; + temp->ypos = (ypos == -0x8000) ? temp->unkE >> 1 : ypos; func_800C45A4(displayList, temp, text, alignmentFlags, 1.0f); } -void func_800C44C0(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { +// Unused? +void func_800C44C0(Gfx** displayList, s32 arg1, char* text, s32 alignmentFlags) { if (arg1 >= 0 && arg1 < 8) { unk8012A7E8 *temp = &D_8012A7E8[arg1]; - func_800C45A4(arg0, temp, arg2, arg3, 1.0f); + func_800C45A4(displayList, temp, text, alignmentFlags, 1.0f); } } -void func_800C4510(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5) { +// Unused? +void func_800C4510(Gfx** displayList, s32 arg1, s32 xpos, s32 ypos, char* text, s32 alignmentFlags) { if (arg1 >= 0 && arg1 < 8) { unk8012A7E8 *temp = &D_8012A7E8[arg1]; - temp->unk0 = (arg2 == -0x8000) ? temp->unkC >> 1 : arg2; - temp->unk2 = (arg3 == -0x8000) ? temp->unkE >> 1 : arg3; - func_800C45A4(arg0, temp, arg4, arg5, 1.0f); + temp->xpos = (xpos == -0x8000) ? temp->unkC >> 1 : xpos; + temp->ypos = (ypos == -0x8000) ? temp->unkE >> 1 : ypos; + func_800C45A4(displayList, temp, text, alignmentFlags, 1.0f); } } -//#if 1 -// TODO -//#else -GLOBAL_ASM("asm/non_matchings/unknown_0B8920/func_800C45A4.s") -//#endif - -GLOBAL_ASM("asm/non_matchings/unknown_0B8920/func_800C4DA0.s") +GLOBAL_ASM("asm/non_matchings/font/func_800C45A4.s") +GLOBAL_ASM("asm/non_matchings/font/func_800C4DA0.s") void func_800C4EDC(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { if (arg0 > 0 && arg0 < 8) { unk8012A7E8 *temp = &D_8012A7E8[arg0]; - temp->unk0 = 0; - temp->unk2 = 0; + temp->xpos = 0; + temp->ypos = 0; if (arg1 < arg3) { temp->unk4 = (s16) arg1; temp->unk8 = (s16) arg3; @@ -326,11 +486,11 @@ void func_800C4EDC(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { } } -void func_800C4F7C(s32 arg0, s32 arg1) { +void func_800C4F7C(s32 arg0, s32 font) { if (arg0 >= 0 && arg0 < 8) { unk8012A7E8 *temp = &D_8012A7E8[arg0]; - if (arg1 < D_8012A7E0) { - temp->unk1D = arg1; + if (font < gNumberOfFonts) { + temp->font = font; } } } @@ -346,17 +506,17 @@ void func_800C4FBC(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { } } -void func_800C5000(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5) { +void func_800C5000(s32 arg0, s32 red, s32 green, s32 blue, s32 alpha, s32 opacity) { unk8012A7E8 *temp; if (arg0 <= 0 || arg0 >= 8) { return; } temp = &D_8012A7E8[arg0]; - temp->unk14 = arg1; - temp->unk15 = arg2; - temp->unk16 = arg3; - temp->unk17 = arg4; - temp->unk1C = arg5; + temp->colorRed = red; + temp->colorGreen = green; + temp->colorBlue = blue; + temp->colorAlpha = alpha; + temp->opacity = opacity; } void func_800C5050(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { @@ -365,10 +525,10 @@ void func_800C5050(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { return; } temp = &D_8012A7E8[arg0]; - temp->unk18 = arg1; - temp->unk19 = arg2; - temp->unk1A = arg3; - temp->unk1B = arg4; + temp->bgRed = arg1; + temp->bgGreen = arg2; + temp->bgBlue = arg3; + temp->bgAlpha = arg4; } // Unused? @@ -395,51 +555,11 @@ void func_800C50D8(s32 arg0) { // Unused? void func_800C510C(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { - func_800C5168(arg0, (*D_8012A7E8)[arg0].unk0, (*D_8012A7E8)[arg0].unk2, arg1, arg2, arg3); + func_800C5168(arg0, (*D_8012A7E8)[arg0].xpos, (*D_8012A7E8)[arg0].ypos, arg1, arg2, arg3); } - -GLOBAL_ASM("asm/non_matchings/unknown_0B8920/func_800C5168.s") -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_0B8920/func_800C5494.s") -#else -void func_800C5494(s32 arg0){ - unk8012A7E8 *tmp2 = &(*D_8012A7E8)[arg0]; - unk8012A7E8_24 *tmp = tmp2->unk24; - if(tmp == NULL) - return; - - while(tmp){ - tmp->unk01 = 255; - tmp = tmp->unk1C; - } - tmp2->unk24 = NULL; -} - -void func_800C54E8(s32 arg0, s16* arg1, u16 arg2, u16 arg3){ - s16 t4; - s16 a3 = arg3; - if(arg1 == 0 || (*D_8012A7E8)[arg0].unk19 == 255) - return; - t4 = arg1[6]; - switch(arg3){ - case 4: //L800C55E4; - arg1[6] = 0; - arg1[7] = 0; - return; - case 1: //L800C554C; - a3 = arg3*1; - break; - case 2: //L800C5564; - default: //L800C5564; - break; - - } - arg1[6] += arg2; - arg1[7] += a3; -} -#endif - +GLOBAL_ASM("asm/non_matchings/font/func_800C5168.s") +GLOBAL_ASM("asm/non_matchings/font/func_800C5494.s") void func_800C55F4(s32 arg0) { (*D_8012A7E8)[arg0].unk1E |= 0x8000; @@ -526,7 +646,7 @@ void s32_to_string(char** outString, s32 number) { } #else void s32_to_string(char**, s32); -GLOBAL_ASM("asm/non_matchings/unknown_0B8920/s32_to_string.s") +GLOBAL_ASM("asm/non_matchings/font/s32_to_string.s") #endif /** @@ -547,7 +667,7 @@ void render_fill_rectangle(Gfx **dlist, s32 ulx, s32 uly, s32 lrx, s32 lry) { } } -GLOBAL_ASM("asm/non_matchings/unknown_0B8920/func_800C5B58.s") +GLOBAL_ASM("asm/non_matchings/font/func_800C5B58.s") /** * Takes in a string and a number, and replaces each instance of the @@ -568,7 +688,24 @@ void parse_string_with_number(unsigned char *input, char *output, s32 number) { *output = '\0'; // null terminator } -// osCreatePiManager is compiled with -mips1, so it does probably belong here. + +/*********************************************************************************/ + +extern OSMesgQueue piAccessQueue; //piAccessQueue +extern u32 __osPiAccessQueueEnabled; //__osPiAccessQueueEnabled +extern OSDevMgr __osPiDevMgr; +void __osDevMgrMain(void); + +// bss variables +OSThread piThread; +s32 D_8012A9B0[64]; +OSMesgQueue piEventQueue; +OSMesg piEventBuf[2]; + +// osCreatePiManager is compiled with -mips1, so it belongs in the source folder. +// However, I can't just put this in another file because the piThreadStack +// variable is at the top of this file's bss + void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgCnt) { u32 savedMask; diff --git a/src/screen_asset.h b/src/screen_asset.h index d11fceb4..3d1e9205 100644 --- a/src/screen_asset.h +++ b/src/screen_asset.h @@ -1,14 +1,13 @@ #ifndef _SCREEN_ASSET_H_ #define _SCREEN_ASSET_H_ +#include "video.h" #include "memory.h" #include "types.h" #include "macros.h" #include "f3ddkr.h" #include "asset_sections.h" -#define SCREEN_WIDTH 320 -#define SCREEN_HEIGHT 240 #define SCREEN_HEIGHT_PART 6 #endif diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index 5bb76194..6ca52e22 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -764,7 +764,7 @@ void func_8006C3E0(void) { func_800AB1F0(); func_8006E3BC(); func_8006EFDC(); - func_800C3C00(); + load_fonts(); func_80075B18(); func_80081218(); create_and_start_thread30(); diff --git a/src/video.c b/src/video.c index 8e5a268b..4e45decb 100644 --- a/src/video.c +++ b/src/video.c @@ -16,15 +16,15 @@ u16 *gVideoDepthBuffer = NULL; s32 D_800DE774 = 0; // Currently unknown, might be a different type. s8 D_800DE778 = 2; -VideoModeResolution gVideoModeResolutions[8] = { - { 320, 240 }, - { 320, 240 }, - { 640, 240 }, - { 640, 240 }, - { 640, 480 }, - { 640, 480 }, - { 640, 480 }, - { 640, 480 } +VideoModeResolution gVideoModeResolutions[] = { + { SCREEN_WIDTH, SCREEN_HEIGHT }, // 320x240 + { SCREEN_WIDTH, SCREEN_HEIGHT }, // 320x240 + { HIGH_RES_SCREEN_WIDTH, SCREEN_HEIGHT }, // 640x240 + { HIGH_RES_SCREEN_WIDTH, SCREEN_HEIGHT }, // 640x240 + { HIGH_RES_SCREEN_WIDTH, HIGH_RES_SCREEN_HEIGHT }, // 640x480 + { HIGH_RES_SCREEN_WIDTH, HIGH_RES_SCREEN_HEIGHT }, // 640x480 + { HIGH_RES_SCREEN_WIDTH, HIGH_RES_SCREEN_HEIGHT }, // 640x480 + { HIGH_RES_SCREEN_WIDTH, HIGH_RES_SCREEN_HEIGHT }, // 640x480 }; s32 D_800DE7BC = 0; // Currently unknown, might be a different type. diff --git a/src/video.h b/src/video.h index 62e4b445..2923ca28 100644 --- a/src/video.h +++ b/src/video.h @@ -1,11 +1,16 @@ -#ifndef _UNKNOWN_07AF10_H_ -#define _UNKNOWN_07AF10_H_ +#ifndef _VIDEO_H_ +#define _VIDEO_H_ #include "types.h" #define REFRESH_50HZ 50 #define REFRESH_60HZ 60 +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 240 +#define HIGH_RES_SCREEN_WIDTH 640 +#define HIGH_RES_SCREEN_HEIGHT 480 + #define LOW_RES_WIDTH 320.0f #define LOW_RES_PAL_HEIGHT 264.0f #define LOW_RES_NTSC_HEIGHT 240.0f