diff options
| author | Tharo <17233964+Thar0@users.noreply.github.com> | 2024-12-28 20:18:45 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-28 15:18:45 -0500 |
| commit | 7e082f0c4f6b34820b4dbf6285d05adf423c091b (patch) | |
| tree | 5b2f1d322eafd4afd6b30109eab12ae36d2b72bf /src/libleo | |
| parent | ba6a83533ac3dcbd6c0c70c9857572ed1ef1d009 (diff) | |
Use IDO for assembling handwritten asm files in src (#2390)
* as0
* Fix ASOPTFLAGS for src/libc, remove unnecessary noreorder region in kanread
* Suggested changes
* Use %half to load the boot bss size for matching
Co-authored-by: cadmic <cadmic24@gmail.com>
* Wrap all of __osProbeTLB in noreorder
---------
Co-authored-by: cadmic <cadmic24@gmail.com>
Diffstat (limited to 'src/libleo')
| -rw-r--r-- | src/libleo/api/getaadr.s | 59 | ||||
| -rw-r--r-- | src/libleo/api/getaadr2.s | 48 | ||||
| -rw-r--r-- | src/libleo/api/getkadr.s | 135 |
3 files changed, 104 insertions, 138 deletions
diff --git a/src/libleo/api/getaadr.s b/src/libleo/api/getaadr.s index a36d27a5b..95c1cfb14 100644 --- a/src/libleo/api/getaadr.s +++ b/src/libleo/api/getaadr.s @@ -1,42 +1,33 @@ #include "ultra64/asm.h" +#include "ultra64/regdef.h" -.set noat -.set noreorder - -.section .text - -.balign 16 +.text LEAF(LeoGetAAdr) - bltz $a0, .out_of_range - slti $at, $a0, 0x908 - beqz $at, .out_of_range - nop - lui $v1, %hi(asc2tbl) - sll $t0, $a0, 2 - addiu $v1, %lo(asc2tbl) - add $t1, $t0, $v1 - lbu $t8, 2($t1) - lhu $t9, 0($t1) - li $at, 0x70000 - andi $t2, $t8, 0xF - addi $t3, $t2, 1 - sw $t3, ($a2) - lb $t0, 3($t1) - srl $t4, $t8, 4 - ori $at, $at, 0xEE80 - andi $t5, $t0, 1 - sll $t6, $t5, 4 - or $t7, $t6, $t4 - sw $t7, ($a1) - sll $v0, $t9, 1 - sra $v1, $t0, 1 - sw $v1, ($a3) - jr $ra - add $v0, $v0, $at + bltz a0, .out_of_range + bge a0, 0x908, .out_of_range + sll t0, a0, 2 + la v1, asc2tbl + add t1, t0, v1 + lbu t8, 2(t1) + lhu t9, 0(t1) + andi t2, t8, 0xF + addi t3, t2, 1 + sw t3, (a2) + lb t0, 3(t1) + srl t4, t8, 4 + andi t5, t0, 1 + sll t6, t5, 4 + or t7, t6, t4 + sw t7, (a1) + sll v0, t9, 1 + sra v1, t0, 1 + sw v1, (a3) + add v0, v0, 0x7EE80 + jr ra .out_of_range: - jr $ra - li $v0, -1 + li v0, -1 + jr ra END(LeoGetAAdr) DATA(asc2tbl) diff --git a/src/libleo/api/getaadr2.s b/src/libleo/api/getaadr2.s index e3ea0868b..cac52cd90 100644 --- a/src/libleo/api/getaadr2.s +++ b/src/libleo/api/getaadr2.s @@ -1,33 +1,25 @@ #include "ultra64/asm.h" +#include "ultra64/regdef.h" -.set noat -.set noreorder - -.section .text - -.balign 16 +.text LEAF(LeoGetAAdr2) - li $at, 0x10000 - srl $t8, $a0, 0xF - ori $at, $at, 0xFFFE - and $v1, $t8, $at - li $at, 0x70000 - ori $at, $at, 0xEE80 - srl $t2, $a0, 0x8 - add $v0, $v1, $at - andi $t3, $t2, 0xF - andi $t5, $a0, 0xFE - addi $t4, $t3, 1 - sll $t6, $t5, 0x18 - andi $t9, $a0, 0x1 - srl $v1, $a0, 0xC - sw $t4, ($a2) - sra $t7, $t6, 0x19 - sll $t8, $t9, 0x4 - andi $t1, $v1, 0xF - sw $t7, ($a3) - or $t2, $t1, $t8 - jr $ra - sw $t2, ($a1) + srl t8, a0, 15 + and v1, t8, 0x1FFFE + add v0, v1, 0x7EE80 + srl t2, a0, 8 + andi t3, t2, 0xF + andi t5, a0, 0xFE + addi t4, t3, 1 + sll t6, t5, 24 + andi t9, a0, 1 + srl v1, a0, 12 + sw t4, (a2) + sra t7, t6, 25 + sll t8, t9, 4 + andi t1, v1, 0xF + sw t7, (a3) + or t2, t1, t8 + sw t2, (a1) + jr ra END(LeoGetAAdr2) diff --git a/src/libleo/api/getkadr.s b/src/libleo/api/getkadr.s index 22d85cb59..d71719525 100644 --- a/src/libleo/api/getkadr.s +++ b/src/libleo/api/getkadr.s @@ -1,11 +1,7 @@ #include "ultra64/asm.h" +#include "ultra64/regdef.h" -.set noat -.set noreorder - -.section .text - -.balign 16 +.text /** * int LeoGetKAdr(int sjis); @@ -22,74 +18,61 @@ * @return int Storage offset address into the N64 Disk Drive mask ROM. */ LEAF(LeoGetKAdr) - // Check if the codepoint is in the range 0x8140 to 0x9872. - li $at, 0x8140 - slt $at, $a0, $at - bnez $at, .out_of_range - li $at, 0x9873 - slt $at, $a0, $at - beqz $at, .out_of_range - // Characters with codepoints >= 0x8800 are kanji. Arrangement is regular, - // so convert index directly. - li $at, 0x8800 - slt $at, $a0, $at - bnez $at, .nonkanji - // 0xBC is number of glyphs in one block in the `kanji` file: - // 0x100 possible codepoints with the same byte1 - // - 0x40 unused at beginning - // - 1 unused at 0x7F - // - 3 unused at 0xFD, 0xFE, 0xFF - li $a2, 0xBC - // Get byte1 and adjust so starts at 0 - srl $a1, $a0, 8 - addi $a1, $a1, -0x88 - multu $a2, $a1 - // Get byte2 and adjust so starts at 0 - andi $a3, $a0, 0xFF - addi $a3, $a3, -0x40 - slti $at, $a3, (0x80 - 0x40) - mflo $a2 - // 0x__7F is always empty and elided in the file, so decrement if larger - bnezl $at, .kanji_lower_halfblock - mflo $a2 - addi $a3, $a3, -1 - mflo $a2 + /* Check if the codepoint is in the range 0x8140 to 0x9872. */ + blt a0, 0x8140, .out_of_range + bge a0, 0x9873, .out_of_range + /* Characters with codepoints >= 0x8800 are kanji. Arrangement is regular, + * so convert index directly. */ + li a2, 0xBC + blt a0, 0x8800, .nonkanji + /* 0xBC is number of glyphs in one block in the `kanji` file: + * 0x100 possible codepoints with the same byte1 + * - 0x40 unused at beginning + * - 1 unused at 0x7F + * - 3 unused at 0xFD, 0xFE, 0xFF */ + /* Get byte1 and adjust so starts at 0 */ + srl a1, a0, 8 + addi a1, a1, -0x88 + mul a2, a2, a1 + /* Get byte2 and adjust so starts at 0 */ + andi a3, a0, 0xFF + addi a3, a3, -0x40 + /* 0x__7F is always empty and elided in the file, so decrement if larger */ + blt a3, 0x40, .kanji_lower_halfblock + addi a3, a3, -1 .kanji_lower_halfblock: - addi $a3, $a3, 0x30A - add $a3, $a3, $a2 - jr $ra - sll $v0, $a3, 7 - // returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE + mflo a2 + addi a3, a3, 0x30A + add a3, a3, a2 + sll v0, a3, 7 + jr ra + /* returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE */ -// Non-kanji are arranged with irregular gaps, use the lookup table. +/* Non-kanji are arranged with irregular gaps, use the lookup table. */ .nonkanji: - // Get byte1 and adjust so starts at 0 - srl $a1, $a0, 8 - addi $a1, $a1, -0x81 - multu $a2, $a1 - // Get byte2 and adjust so starts at 0 - andi $a3, $a0, 0xFF - addi $a3, $a3, -0x40 - slti $at, $a3, (0x80 - 0x40) - mflo $a2 - // 0x__7F is always empty and elided in the file, so decrement if larger - bnezl $at, .nonkanji_lower_halfblock - mflo $a2 - addi $a3, $a3, -1 - mflo $a2 + /* Get byte1 and adjust so starts at 0 */ + srl a1, a0, 8 + addi a1, a1, -0x81 + mul a2, a2, a1 + /* Get byte2 and adjust so starts at 0 */ + andi a3, a0, 0xFF + addi a3, a3, -0x40 + /* 0x__7F is always empty and elided in the file, so decrement if larger */ + blt a3, 0x40, .nonkanji_lower_halfblock + addi a3, a3, -1 .nonkanji_lower_halfblock: - add $a3, $a3, $a2 - lui $a2, %hi(kantbl) - sll $a3, $a3, 1 - addiu $a2, %lo(kantbl) - add $a3, $a3, $a2 - lh $a2, ($a3) - jr $ra - sll $v0, $a2, 7 - // returns kantbl[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE + mflo a2 + add a3, a3, a2 + sll a3, a3, 1 + la a2, kantbl + add a3, a3, a2 + lh a2, (a3) + sll v0, a2, 7 + jr ra + /* returns kantbl[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE */ .out_of_range: - jr $ra - li $v0, -1 + li v0, -1 + jr ra END(LeoGetKAdr) /** @@ -129,7 +112,7 @@ END(LeoGetKAdr) * into blocks by high byte. */ DATA(kantbl) -// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F +/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */ /* 0x814_ */ .half 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F /* 0x815_ */ .half 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F /* 0x816_ */ .half 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F @@ -143,7 +126,7 @@ DATA(kantbl) /* 0x81E_ */ .half 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 /* 0x81F_ */ .half 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0091 -// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F +/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */ /* 0x824_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0092 /* 0x825_ */ .half 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 /* 0x826_ */ .half 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB @@ -157,7 +140,7 @@ DATA(kantbl) /* 0x82E_ */ .half 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011A, 0x011B, 0x011C, 0x011D, 0x011E, 0x011F, 0x0120 /* 0x82F_ */ .half 0x0121, 0x0122, 0x0123, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F +/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */ /* 0x834_ */ .half 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, 0x012A, 0x012B, 0x012C, 0x012D, 0x012E, 0x012F, 0x0130, 0x0131, 0x0132, 0x0133 /* 0x835_ */ .half 0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013A, 0x013B, 0x013C, 0x013D, 0x013E, 0x013F, 0x0140, 0x0141, 0x0142, 0x0143 /* 0x836_ */ .half 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, 0x014A, 0x014B, 0x014C, 0x014D, 0x014E, 0x014F, 0x0150, 0x0151, 0x0152, 0x0153 @@ -171,7 +154,7 @@ DATA(kantbl) /* 0x83E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 /* 0x83F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F +/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */ /* 0x844_ */ .half 0x01AB, 0x01AC, 0x01AD, 0x01AE, 0x01AF, 0x01B0, 0x01B1, 0x01B2, 0x01B3, 0x01B4, 0x01B5, 0x01B6, 0x01B7, 0x01B8, 0x01B9, 0x01BA /* 0x845_ */ .half 0x01BB, 0x01BC, 0x01BD, 0x01BE, 0x01BF, 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C4, 0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA /* 0x846_ */ .half 0x01CB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 @@ -185,7 +168,7 @@ DATA(kantbl) /* 0x84E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 /* 0x84F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F +/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */ /* 0x854_ */ .half 0x020E, 0x020F, 0x0210, 0x0211, 0x0212, 0x0213, 0x0214, 0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D /* 0x855_ */ .half 0x021E, 0x021F, 0x0220, 0x0221, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0222, 0x0223 /* 0x856_ */ .half 0x0224, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022A, 0x022B, 0x022C, 0x022D, 0x022E, 0x022F, 0x0230, 0x0231, 0x0232, 0x0233 @@ -199,7 +182,7 @@ DATA(kantbl) /* 0x85E_ */ .half 0x026C, 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, 0x0278, 0x0279, 0x027A, 0x027B /* 0x85F_ */ .half 0x027C, 0x027D, 0x027E, 0x027F, 0x0280, 0x0281, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F +/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */ /* 0x864_ */ .half 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, 0x028A, 0x028B, 0x028C, 0x028D, 0x028E, 0x028F, 0x0290, 0x0291 /* 0x865_ */ .half 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029A, 0x029B, 0x029C, 0x029D, 0x029E, 0x029F, 0x0000, 0x0000 /* 0x866_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 @@ -213,7 +196,7 @@ DATA(kantbl) /* 0x86E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 /* 0x86F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F +/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */ /* 0x874_ */ .half 0x02C0, 0x02C1, 0x02C2, 0x02C3, 0x02C4, 0x02C5, 0x02C6, 0x02C7, 0x02C8, 0x02C9, 0x02CA, 0x02CB, 0x02CC, 0x02CD, 0x02CE, 0x02CF /* 0x875_ */ .half 0x02D0, 0x02D1, 0x02D2, 0x02D3, 0x02D4, 0x02D5, 0x02D6, 0x02D7, 0x02D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 /* 0x876_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 |
