mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-06 07:56:32 +00:00
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>
This commit is contained in:
parent
ba6a83533a
commit
7e082f0c4f
54 changed files with 2612 additions and 2653 deletions
|
@ -1,11 +1,7 @@
|
|||
#include "ultra64/asm.h"
|
||||
#include "ultra64/regdef.h"
|
||||
|
||||
.set noat
|
||||
.set noreorder
|
||||
|
||||
.section .text
|
||||
|
||||
.balign 16
|
||||
.text
|
||||
|
||||
/**
|
||||
* s32 Kanji_OffsetFromShiftJIS(s32 sjis);
|
||||
|
@ -26,64 +22,57 @@
|
|||
* @remark Almost identical to "LeoGetKadr" from libleo.
|
||||
*/
|
||||
LEAF(Kanji_OffsetFromShiftJIS)
|
||||
// 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
|
||||
.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
|
||||
/* 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
|
||||
/* Get byte2 and adjust so starts at 0 */
|
||||
andi a3, a0, 0xFF
|
||||
addi a3, a3, -0x40
|
||||
mul a2, a2, a1
|
||||
blt a3, 0x40, .kanji_lower_halfblock
|
||||
|
||||
// Non-kanji are arranged with irregular gaps, use the lookup table.
|
||||
/* 0x__7F is always empty and elided in the file, so decrement if larger */
|
||||
addi a3, a3, -1
|
||||
.kanji_lower_halfblock:
|
||||
mflo a2 /* Unncessary mflo: the pseudo-op `mul` already performs mflo */
|
||||
addi a3, a3, 0x30A
|
||||
add a3, a3, a2
|
||||
/* returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE */
|
||||
sll v0, a3, 7
|
||||
jr ra
|
||||
|
||||
/* 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
|
||||
/* Get byte2 and adjust so starts at 0 */
|
||||
andi a3, a0, 0xFF
|
||||
addi a3, a3, -0x40
|
||||
mul a2, a2, a1
|
||||
blt a3, 0x40, .nonkanji_lower_halfblock
|
||||
|
||||
/* 0x__7F is always empty and elided in the file, so decrement if larger */
|
||||
addi a3, a3, -1
|
||||
.nonkanji_lower_halfblock:
|
||||
add $a3, $a3, $a2
|
||||
lui $a2, %hi(sNonKanjiIndices)
|
||||
sll $a3, $a3, 1
|
||||
addiu $a2, %lo(sNonKanjiIndices)
|
||||
add $a3, $a3, $a2
|
||||
lh $a2, ($a3)
|
||||
jr $ra
|
||||
sll $v0, $a2, 7
|
||||
// returns sNonKanjiIndices[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE
|
||||
mflo a2 /* Unncessary mflo: the pseudo-op `mul` already performs mflo */
|
||||
add a3, a3, a2
|
||||
sll a3, a3, 1
|
||||
la a2, sNonKanjiIndices
|
||||
add a3, a3, a2
|
||||
lh a2, (a3)
|
||||
/* returns sNonKanjiIndices[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE */
|
||||
sll v0, a2, 7
|
||||
jr ra
|
||||
END(Kanji_OffsetFromShiftJIS)
|
||||
|
||||
/**
|
||||
|
@ -116,7 +105,7 @@ END(Kanji_OffsetFromShiftJIS)
|
|||
* into blocks by high byte.
|
||||
*/
|
||||
DATA(sNonKanjiIndices)
|
||||
// 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
|
||||
|
@ -130,7 +119,7 @@ DATA(sNonKanjiIndices)
|
|||
/* 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
|
||||
|
@ -144,7 +133,7 @@ DATA(sNonKanjiIndices)
|
|||
/* 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
|
||||
|
@ -158,7 +147,7 @@ DATA(sNonKanjiIndices)
|
|||
/* 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
|
||||
|
@ -172,7 +161,7 @@ DATA(sNonKanjiIndices)
|
|||
/* 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
|
||||
|
@ -186,7 +175,7 @@ DATA(sNonKanjiIndices)
|
|||
/* 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
|
||||
|
@ -200,7 +189,7 @@ DATA(sNonKanjiIndices)
|
|||
/* 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
|
||||
|
|
|
@ -86,7 +86,7 @@ void ViMode_Configure(ViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antia
|
|||
yScaleHiOddField = modeF ? (loResInterlaced ? (F210(0.75) << 16) : (F210(0.5) << 16)) : 0;
|
||||
|
||||
viMode->customViMode.type = type;
|
||||
viMode->customViMode.comRegs.ctrl = VI_CTRL_PIXEL_ADV_3 | VI_CTRL_GAMMA_ON | VI_CTRL_GAMMA_DITHER_ON |
|
||||
viMode->customViMode.comRegs.ctrl = VI_CTRL_PIXEL_ADV(3) | VI_CTRL_GAMMA_ON | VI_CTRL_GAMMA_DITHER_ON |
|
||||
(!loResDeinterlaced ? VI_CTRL_SERRATE_ON : 0) |
|
||||
(antialiasOn ? VI_CTRL_DIVOT_ON : 0) |
|
||||
(fb32Bit ? VI_CTRL_TYPE_32 : VI_CTRL_TYPE_16);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue