You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Refresh 8
This commit is contained in:
@@ -10,6 +10,10 @@
|
||||
|
||||
.section .text, "ax"
|
||||
|
||||
.ifdef AVOID_UB
|
||||
.set D_80334890, D_80334890_fix
|
||||
.endif
|
||||
|
||||
glabel __osExceptionPreamble
|
||||
lui $k0, %hi(__osException) # $k0, 0x8032
|
||||
addiu $k0, %lo(__osException) # addiu $k0, $k0, 0x66d0
|
||||
@@ -60,8 +64,8 @@ glabel __osException
|
||||
|
||||
move $t0, $k0
|
||||
sw $zero, %lo(D_80334938)($at)
|
||||
lui $k0, %hi(D_803348A0) # $k0, 0x8033
|
||||
lw $k0, %lo(D_803348A0)($k0)
|
||||
lui $k0, %hi(D_80334890 + 0x10) # $k0, 0x8033
|
||||
lw $k0, %lo(D_80334890 + 0x10)($k0)
|
||||
ld $t1, 0x20($t0)
|
||||
sd $t1, 0x20($k0)
|
||||
ld $t1, 0x118($t0)
|
||||
@@ -119,8 +123,8 @@ glabel __osException
|
||||
or $k1, $k1, $t1
|
||||
sw $k1, 0x118($k0)
|
||||
.L802F3A18:
|
||||
lui $t1, %hi(D_A430000C) # $t1, 0xa430
|
||||
lw $t1, %lo(D_A430000C)($t1)
|
||||
lui $t1, %hi(MI_INTR_MASK_REG) # $t1, 0xa430
|
||||
lw $t1, %lo(MI_INTR_MASK_REG)($t1)
|
||||
beqz $t1, .L802F3A50
|
||||
nop
|
||||
lui $t0, %hi(D_8030208C) # $t0, 0x8030
|
||||
@@ -165,8 +169,8 @@ glabel __osException
|
||||
.L80326868:
|
||||
mfc0 $t0, $13
|
||||
sw $t0, 0x120($k0)
|
||||
lui $t1, %hi(D_A430000C) # $t1, 0xa430
|
||||
lw $t1, %lo(D_A430000C)($t1)
|
||||
lui $t1, %hi(MI_INTR_MASK_REG) # $t1, 0xa430
|
||||
lw $t1, %lo(MI_INTR_MASK_REG)($t1)
|
||||
sw $t1, 0x128($k0)
|
||||
li $t1, 2
|
||||
sh $t1, 0x10($k0)
|
||||
@@ -256,20 +260,20 @@ glabel L80326984
|
||||
b .L8032692C
|
||||
and $s0, $s0, $at
|
||||
glabel L803269B8
|
||||
lui $s1, %hi(D_A4300008) # $s1, 0xa430
|
||||
lw $s1, %lo(D_A4300008)($s1)
|
||||
lui $s1, %hi(MI_INTR_REG) # $s1, 0xa430
|
||||
lw $s1, %lo(MI_INTR_REG)($s1)
|
||||
andi $s1, $s1, 0x3f
|
||||
andi $t1, $s1, 1
|
||||
beqz $t1, .L80326A18
|
||||
nop
|
||||
lui $t4, %hi(D_A4040010) # $t4, 0xa404
|
||||
lw $t4, %lo(D_A4040010)($t4)
|
||||
lui $t4, %hi(SP_STATUS_REG) # $t4, 0xa404
|
||||
lw $t4, %lo(SP_STATUS_REG)($t4)
|
||||
li $t1, 8
|
||||
lui $at, %hi(D_A4040010) # $at, 0xa404
|
||||
lui $at, %hi(SP_STATUS_REG) # $at, 0xa404
|
||||
andi $t4, $t4, 0x300
|
||||
andi $s1, $s1, 0x3e
|
||||
beqz $t4, .L80326A08
|
||||
sw $t1, %lo(D_A4040010)($at)
|
||||
sw $t1, %lo(SP_STATUS_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 32
|
||||
beqz $s1, .L80326ADC
|
||||
@@ -284,9 +288,9 @@ glabel L803269B8
|
||||
.L80326A18:
|
||||
andi $t1, $s1, 8
|
||||
beqz $t1, .L80326A3C
|
||||
lui $at, %hi(D_A4400010) # $at, 0xa440
|
||||
lui $at, %hi(VI_CURRENT_REG) # $at, 0xa440
|
||||
andi $s1, $s1, 0x37
|
||||
sw $zero, %lo(D_A4400010)($at)
|
||||
sw $zero, %lo(VI_CURRENT_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 56
|
||||
beqz $s1, .L80326ADC
|
||||
@@ -296,9 +300,9 @@ glabel L803269B8
|
||||
beqz $t1, .L80326A68
|
||||
nop
|
||||
li $t1, 1
|
||||
lui $at, %hi(D_A450000C) # $at, 0xa450
|
||||
lui $at, %hi(AI_STATUS_REG) # $at, 0xa450
|
||||
andi $s1, $s1, 0x3b
|
||||
sw $t1, %lo(D_A450000C)($at)
|
||||
sw $t1, %lo(AI_STATUS_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 48
|
||||
beqz $s1, .L80326ADC
|
||||
@@ -306,9 +310,9 @@ glabel L803269B8
|
||||
.L80326A68:
|
||||
andi $t1, $s1, 2
|
||||
beqz $t1, .L80326A8C
|
||||
lui $at, %hi(D_A4800018) # $at, 0xa480
|
||||
lui $at, %hi(SI_STATUS_REG) # $at, 0xa480
|
||||
andi $s1, $s1, 0x3d
|
||||
sw $zero, %lo(D_A4800018)($at)
|
||||
sw $zero, %lo(SI_STATUS_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 40
|
||||
beqz $s1, .L80326ADC
|
||||
@@ -318,9 +322,9 @@ glabel L803269B8
|
||||
beqz $t1, .L80326AB8
|
||||
nop
|
||||
li $t1, 2
|
||||
lui $at, %hi(D_A4600010) # $at, 0xa460
|
||||
lui $at, %hi(PI_STATUS_REG) # $at, 0xa460
|
||||
andi $s1, $s1, 0x2f
|
||||
sw $t1, %lo(D_A4600010)($at)
|
||||
sw $t1, %lo(PI_STATUS_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 64
|
||||
beqz $s1, .L80326ADC
|
||||
@@ -330,9 +334,9 @@ glabel L803269B8
|
||||
beqz $t1, .L80326ADC
|
||||
nop
|
||||
li $t1, 2048
|
||||
lui $at, %hi(D_A4300000)
|
||||
lui $at, %hi(MI_MODE_REG)
|
||||
andi $s1, $s1, 0x1f
|
||||
sw $t1, %lo(D_A4300000)($at)
|
||||
sw $t1, %lo(MI_MODE_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 72
|
||||
.L80326ADC:
|
||||
@@ -356,8 +360,8 @@ glabel L80326AE8
|
||||
sw $t2, ($t1)
|
||||
jal send_mesg
|
||||
li $a0, 112
|
||||
lui $t2, %hi(D_80334898) # $t2, 0x8033
|
||||
lw $t2, %lo(D_80334898)($t2)
|
||||
lui $t2, %hi(D_80334890 + 0x8) # $t2, 0x8033
|
||||
lw $t2, %lo(D_80334890 + 0x8)($t2)
|
||||
li $at, -4097
|
||||
and $s0, $s0, $at
|
||||
lw $k1, 0x118($t2)
|
||||
@@ -391,23 +395,23 @@ glabel L80326B64
|
||||
nop
|
||||
.L80326B9C:
|
||||
glabel L80326B9C
|
||||
lui $t2, %hi(D_80334898) # $t2, 0x8033
|
||||
lw $t2, %lo(D_80334898)($t2)
|
||||
lui $t2, %hi(D_80334890 + 0x8) # $t2, 0x8033
|
||||
lw $t2, %lo(D_80334890 + 0x8)($t2)
|
||||
lw $t1, 4($k0)
|
||||
lw $t3, 4($t2)
|
||||
slt $at, $t1, $t3
|
||||
beqz $at, .L80326BD0
|
||||
nop
|
||||
lui $a0, %hi(D_80334898) # $a0, 0x8033
|
||||
lui $a0, %hi(D_80334890 + 0x8) # $a0, 0x8033
|
||||
move $a1, $k0
|
||||
jal __osEnqueueThread
|
||||
addiu $a0, %lo(D_80334898) # addiu $a0, $a0, 0x4898
|
||||
addiu $a0, %lo(D_80334890 + 0x8) # addiu $a0, $a0, 0x4898
|
||||
j __osDispatchThread
|
||||
nop
|
||||
|
||||
.L80326BD0:
|
||||
lui $t1, %hi(D_80334898) # $t1, 0x8033
|
||||
addiu $t1, %lo(D_80334898) # addiu $t1, $t1, 0x4898
|
||||
lui $t1, %hi(D_80334890 + 0x8) # $t1, 0x8033
|
||||
addiu $t1, %lo(D_80334890 + 0x8) # addiu $t1, $t1, 0x4898
|
||||
lw $t2, ($t1)
|
||||
sw $t2, ($k0)
|
||||
j __osDispatchThread
|
||||
@@ -415,8 +419,8 @@ glabel L80326B9C
|
||||
|
||||
.L80326BE8:
|
||||
glabel L80326BE8
|
||||
lui $at, %hi(D_803348A4) # $at, 0x8033
|
||||
sw $k0, %lo(D_803348A4)($at)
|
||||
lui $at, %hi(D_80334890 + 0x14) # $at, 0x8033
|
||||
sw $k0, %lo(D_80334890 + 0x14)($at)
|
||||
li $t1, 1
|
||||
sh $t1, 0x10($k0)
|
||||
li $t1, 2
|
||||
@@ -442,8 +446,8 @@ glabel L80326BE8
|
||||
sw $zero, 0x18($k0)
|
||||
mfc0 $t0, $13
|
||||
move $t0, $k0
|
||||
lui $k0, %hi(D_803348A0) # $k0, 0x8030
|
||||
lw $k0, %lo(D_803348A0)($k0)
|
||||
lui $k0, %hi(D_80334890 + 0x10) # $k0, 0x8030
|
||||
lw $k0, %lo(D_80334890 + 0x10)($k0)
|
||||
ld $t1, 0x20($t0)
|
||||
sd $t1, 0x20($k0)
|
||||
ld $t1, 0x118($t0)
|
||||
@@ -499,8 +503,8 @@ glabel L80326BE8
|
||||
or $k1, $k1, $t1
|
||||
sw $k1, 0x118($k0)
|
||||
.L802F3A18:
|
||||
lui $t1, %hi(D_A430000C) # $t1, 0xa430
|
||||
lw $t1, %lo(D_A430000C)($t1)
|
||||
lui $t1, %hi(MI_INTR_MASK_REG) # $t1, 0xa430
|
||||
lw $t1, %lo(MI_INTR_MASK_REG)($t1)
|
||||
beqz $t1, .L802F3A50
|
||||
nop
|
||||
lui $t0, %hi(D_8030208C) # $t0, 0x8030
|
||||
@@ -613,21 +617,21 @@ glabel L803269B8
|
||||
lui $t0, %hi(D_8030208C) # $t0, 0x8030
|
||||
addiu $t0, %lo(D_8030208C) # addiu $t0, $t0, 0x208c
|
||||
lw $t0, ($t0)
|
||||
lui $s1, %hi(D_A4300008) # $s1, 0xa430
|
||||
lw $s1, %lo(D_A4300008)($s1)
|
||||
lui $s1, %hi(MI_INTR_REG) # $s1, 0xa430
|
||||
lw $s1, %lo(MI_INTR_REG)($s1)
|
||||
srl $t0, $t0, 0x10
|
||||
and $s1, $s1, $t0
|
||||
andi $t1, $s1, 1
|
||||
beqz $t1, .L802F3C24
|
||||
nop
|
||||
lui $t4, %hi(D_A4040010) # $t4, 0xa404
|
||||
lw $t4, %lo(D_A4040010)($t4)
|
||||
lui $t4, %hi(SP_STATUS_REG) # $t4, 0xa404
|
||||
lw $t4, %lo(SP_STATUS_REG)($t4)
|
||||
li $t1, 8
|
||||
lui $at, %hi(D_A4040010) # $at, 0xa404
|
||||
lui $at, %hi(SP_STATUS_REG) # $at, 0xa404
|
||||
andi $t4, $t4, 0x300
|
||||
andi $s1, $s1, 0x3e
|
||||
beqz $t4, .L802F3C14
|
||||
sw $t1, %lo(D_A4040010)($at)
|
||||
sw $t1, %lo(SP_STATUS_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 32
|
||||
beqz $s1, .L802F3CE8
|
||||
@@ -642,9 +646,9 @@ glabel L803269B8
|
||||
.L802F3C24:
|
||||
andi $t1, $s1, 8
|
||||
beqz $t1, .L802F3C48
|
||||
lui $at, %hi(D_A4400010) # $at, 0xa440
|
||||
lui $at, %hi(VI_CURRENT_REG) # $at, 0xa440
|
||||
andi $s1, $s1, 0x37
|
||||
sw $zero, %lo(D_A4400010)($at)
|
||||
sw $zero, %lo(VI_CURRENT_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 56
|
||||
beqz $s1, .L802F3CE8
|
||||
@@ -654,9 +658,9 @@ glabel L803269B8
|
||||
beqz $t1, .L802F3C74
|
||||
nop
|
||||
li $t1, 1
|
||||
lui $at, %hi(D_A450000C) # $at, 0xa450
|
||||
lui $at, %hi(AI_STATUS_REG) # $at, 0xa450
|
||||
andi $s1, $s1, 0x3b
|
||||
sw $t1, %lo(D_A450000C)($at)
|
||||
sw $t1, %lo(AI_STATUS_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 48
|
||||
beqz $s1, .L802F3CE8
|
||||
@@ -664,9 +668,9 @@ glabel L803269B8
|
||||
.L802F3C74:
|
||||
andi $t1, $s1, 2
|
||||
beqz $t1, .L802F3C98
|
||||
lui $at, %hi(D_A4800018) # $at, 0xa480
|
||||
lui $at, %hi(SI_STATUS_REG) # $at, 0xa480
|
||||
andi $s1, $s1, 0x3d
|
||||
sw $zero, %lo(D_A4800018)($at)
|
||||
sw $zero, %lo(SI_STATUS_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 40
|
||||
beqz $s1, .L802F3CE8
|
||||
@@ -676,9 +680,9 @@ glabel L803269B8
|
||||
beqz $t1, .L802F3CC4
|
||||
nop
|
||||
li $t1, 2
|
||||
lui $at, %hi(D_A4600010) # $at, 0xa460
|
||||
lui $at, %hi(PI_STATUS_REG) # $at, 0xa460
|
||||
andi $s1, $s1, 0x2f
|
||||
sw $t1, %lo(D_A4600010)($at)
|
||||
sw $t1, %lo(PI_STATUS_REG)($at)
|
||||
jal send_mesg
|
||||
li $a0, 64
|
||||
beqz $s1, .L802F3CE8
|
||||
@@ -714,8 +718,8 @@ glabel L80326AE8
|
||||
sw $t2, ($t1)
|
||||
jal send_mesg
|
||||
li $a0, 112
|
||||
lui $t2, %hi(D_80334898) # $t2, 0x8030
|
||||
lw $t2, %lo(D_80334898)($t2)
|
||||
lui $t2, %hi(D_80334890 + 0x8) # $t2, 0x8030
|
||||
lw $t2, %lo(D_80334890 + 0x8)($t2)
|
||||
li $at, -4097
|
||||
and $s0, $s0, $at
|
||||
lw $k1, 0x118($t2)
|
||||
@@ -749,23 +753,23 @@ glabel L80326B64
|
||||
nop
|
||||
.L802F3DA8:
|
||||
glabel L80326B9C
|
||||
lui $t2, %hi(D_80334898) # $t2, 0x8030
|
||||
lw $t2, %lo(D_80334898)($t2)
|
||||
lui $t2, %hi(D_80334890 + 0x8) # $t2, 0x8030
|
||||
lw $t2, %lo(D_80334890 + 0x8)($t2)
|
||||
lw $t1, 4($k0)
|
||||
lw $t3, 4($t2)
|
||||
slt $at, $t1, $t3
|
||||
beqz $at, .L80326BD0
|
||||
nop
|
||||
lui $a0, %hi(D_80334898) # $a0, 0x8030
|
||||
lui $a0, %hi(D_80334890 + 0x8) # $a0, 0x8030
|
||||
move $a1, $k0
|
||||
jal __osEnqueueThread
|
||||
addiu $a0, %lo(D_80334898) # addiu $a0, $a0, 0x2ef8
|
||||
addiu $a0, %lo(D_80334890 + 0x8) # addiu $a0, $a0, 0x2ef8
|
||||
j __osDispatchThread
|
||||
nop
|
||||
|
||||
.L80326BD0:
|
||||
lui $t1, %hi(D_80334898) # $t1, 0x8030
|
||||
addiu $t1, %lo(D_80334898) # addiu $t1, $t1, 0x2ef8
|
||||
lui $t1, %hi(D_80334890 + 0x8) # $t1, 0x8030
|
||||
addiu $t1, %lo(D_80334890 + 0x8) # addiu $t1, $t1, 0x2ef8
|
||||
lw $t2, ($t1)
|
||||
sw $t2, ($k0)
|
||||
j __osDispatchThread
|
||||
@@ -773,8 +777,8 @@ glabel L80326B9C
|
||||
|
||||
.L80326BE8:
|
||||
glabel L80326BE8
|
||||
lui $at, %hi(D_803348A4) # $at, 0x8030
|
||||
sw $k0, %lo(D_803348A4)($at)
|
||||
lui $at, %hi(D_80334890 + 0x14) # $at, 0x8030
|
||||
sw $k0, %lo(D_80334890 + 0x14)($at)
|
||||
li $t1, 1
|
||||
sh $t1, 0x10($k0)
|
||||
li $t1, 2
|
||||
@@ -829,10 +833,10 @@ glabel send_mesg
|
||||
jal __osPopThread
|
||||
move $a0, $t1
|
||||
move $t2, $v0
|
||||
lui $a0, %hi(D_80334898) # $a0, 0x8033
|
||||
lui $a0, %hi(D_80334890 + 0x8) # $a0, 0x8033
|
||||
move $a1, $t2
|
||||
jal __osEnqueueThread
|
||||
addiu $a0, %lo(D_80334898) # addiu $a0, $a0, 0x4898
|
||||
addiu $a0, %lo(D_80334890 + 0x8) # addiu $a0, $a0, 0x4898
|
||||
.L80326CC4:
|
||||
jr $s2
|
||||
nop
|
||||
@@ -853,8 +857,8 @@ glabel send_mesg
|
||||
|
||||
|
||||
glabel __osEnqueueAndYield
|
||||
lui $a1, %hi(D_803348A0) # $a1, 0x8033
|
||||
lw $a1, %lo(D_803348A0)($a1)
|
||||
lui $a1, %hi(D_80334890 + 0x10) # $a1, 0x8033
|
||||
lw $a1, %lo(D_80334890 + 0x10)($a1)
|
||||
mfc0 $t0, $12
|
||||
lw $k1, 0x18($a1)
|
||||
ori $t0, $t0, 2
|
||||
@@ -905,8 +909,8 @@ glabel __osEnqueueAndYield
|
||||
/* 0B37B4 802F3FB4 0369D825 */ or $k1, $k1, $t1
|
||||
/* 0B37B8 802F3FB8 ACBB0118 */ sw $k1, 0x118($a1)
|
||||
.L802F3FBC:
|
||||
/* 0B37BC 802F3FBC 3C1BA430 */ lui $k1, %hi(D_A430000C) # $k1, 0xa430
|
||||
/* 0B37C0 802F3FC0 8F7B000C */ lw $k1, %lo(D_A430000C)($k1)
|
||||
/* 0B37BC 802F3FBC 3C1BA430 */ lui $k1, %hi(MI_INTR_MASK_REG) # $k1, 0xa430
|
||||
/* 0B37C0 802F3FC0 8F7B000C */ lw $k1, %lo(MI_INTR_MASK_REG)($k1)
|
||||
/* 0B37C4 802F3FC4 1360000B */ beqz $k1, .L802F3FF4
|
||||
/* 0B37C8 802F3FC8 00000000 */ nop
|
||||
/* 0B37CC 802F3FCC 3C1A8030 */ lui $k0, %hi(D_8030208C) # $k0, 0x8030
|
||||
@@ -925,8 +929,8 @@ glabel __osEnqueueAndYield
|
||||
|
||||
.L80326D70:
|
||||
.ifndef VERSION_EU
|
||||
lui $k1, %hi(D_A430000C) # $k1, 0xa430
|
||||
lw $k1, %lo(D_A430000C)($k1)
|
||||
lui $k1, %hi(MI_INTR_MASK_REG) # $k1, 0xa430
|
||||
lw $k1, %lo(MI_INTR_MASK_REG)($k1)
|
||||
.endif
|
||||
beqz $a0, .L80326D88
|
||||
sw $k1, 0x128($a1)
|
||||
@@ -967,11 +971,11 @@ glabel __osPopThread
|
||||
sw $t9, ($a0)
|
||||
|
||||
glabel __osDispatchThread
|
||||
lui $a0, %hi(D_80334898) # $a0, 0x8033
|
||||
lui $a0, %hi(D_80334890 + 0x8) # $a0, 0x8033
|
||||
jal __osPopThread
|
||||
addiu $a0, %lo(D_80334898) # addiu $a0, $a0, 0x4898
|
||||
lui $at, %hi(D_803348A0) # $at, 0x8033
|
||||
sw $v0, %lo(D_803348A0)($at)
|
||||
addiu $a0, %lo(D_80334890 + 0x8) # addiu $a0, $a0, 0x4898
|
||||
lui $at, %hi(D_80334890 + 0x10) # $at, 0x8033
|
||||
sw $v0, %lo(D_80334890 + 0x10)($at)
|
||||
li $t0, 4
|
||||
sh $t0, 0x10($v0)
|
||||
move $k0, $v0
|
||||
@@ -1066,8 +1070,8 @@ glabel __osDispatchThread
|
||||
addiu $k0, %lo(D_803386D0) # addiu $k0, $k0, -0x7930
|
||||
addu $k1, $k1, $k0
|
||||
lhu $k1, ($k1)
|
||||
lui $k0, %hi(D_A430000C) # $k0, 0xa430
|
||||
addiu $k0, %lo(D_A430000C) # addiu $k0, $k0, 0xc
|
||||
lui $k0, %hi(MI_INTR_MASK_REG) # $k0, 0xa430
|
||||
addiu $k0, %lo(MI_INTR_MASK_REG) # addiu $k0, $k0, 0xc
|
||||
sw $k1, ($k0)
|
||||
nop
|
||||
nop
|
||||
|
||||
100
lib/asm/llmuldiv_gcc.s
Normal file
100
lib/asm/llmuldiv_gcc.s
Normal file
@@ -0,0 +1,100 @@
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64
|
||||
|
||||
.include "macros.inc"
|
||||
|
||||
|
||||
.section .text, "ax"
|
||||
|
||||
/* -------------------------------------------------------------------------------------- */
|
||||
/* need to asm these functions because lib32gcc-7-dev-mips-cross does not exist so we */
|
||||
/* cannot naturally link a libgcc variant for this target given this architecture and */
|
||||
/* compiler. Until we have a good workaround with a gcc target that doesn't involve */
|
||||
/* assuming a 32-bit to 64-bit change, we have to encode these functions as raw assembly */
|
||||
/* for it to compile. */
|
||||
/* -------------------------------------------------------------------------------------- */
|
||||
|
||||
/* TODO: Is there a non-insane way to fix this hack that doesn't involve the user compiling */
|
||||
/* a library themselves? */
|
||||
glabel __umoddi3
|
||||
sw $a0, ($sp)
|
||||
sw $a1, 4($sp)
|
||||
sw $a2, 8($sp)
|
||||
sw $a3, 0xc($sp)
|
||||
ld $t7, 8($sp)
|
||||
ld $t6, ($sp)
|
||||
ddivu $zero, $t6, $t7
|
||||
bnez $t7, .L80324144
|
||||
nop
|
||||
break 7
|
||||
.L80324144:
|
||||
mfhi $v0
|
||||
dsll32 $v1, $v0, 0
|
||||
dsra32 $v1, $v1, 0
|
||||
jr $ra
|
||||
dsra32 $v0, $v0, 0
|
||||
|
||||
glabel __udivdi3
|
||||
sw $a0, ($sp)
|
||||
sw $a1, 4($sp)
|
||||
sw $a2, 8($sp)
|
||||
sw $a3, 0xc($sp)
|
||||
ld $t7, 8($sp)
|
||||
ld $t6, ($sp)
|
||||
ddivu $zero, $t6, $t7
|
||||
bnez $t7, .L80324180
|
||||
nop
|
||||
break 7
|
||||
.L80324180:
|
||||
mflo $v0
|
||||
dsll32 $v1, $v0, 0
|
||||
dsra32 $v1, $v1, 0
|
||||
jr $ra
|
||||
dsra32 $v0, $v0, 0
|
||||
|
||||
glabel __moddi3
|
||||
sw $a0, ($sp)
|
||||
sw $a1, 4($sp)
|
||||
sw $a2, 8($sp)
|
||||
sw $a3, 0xc($sp)
|
||||
ld $t7, 8($sp)
|
||||
ld $t6, ($sp)
|
||||
ddivu $zero, $t6, $t7
|
||||
bnez $t7, .L803241E8
|
||||
nop
|
||||
break 7
|
||||
.L803241E8:
|
||||
mfhi $v0
|
||||
dsll32 $v1, $v0, 0
|
||||
dsra32 $v1, $v1, 0
|
||||
jr $ra
|
||||
dsra32 $v0, $v0, 0
|
||||
|
||||
glabel __divdi3
|
||||
sw $a0, ($sp)
|
||||
sw $a1, 4($sp)
|
||||
sw $a2, 8($sp)
|
||||
sw $a3, 0xc($sp)
|
||||
ld $t7, 8($sp)
|
||||
ld $t6, ($sp)
|
||||
ddiv $zero, $t6, $t7
|
||||
nop
|
||||
bnez $t7, .L80324228
|
||||
nop
|
||||
break 7
|
||||
.L80324228:
|
||||
daddiu $at, $zero, -1
|
||||
bne $t7, $at, .L80324244
|
||||
daddiu $at, $zero, 1
|
||||
dsll32 $at, $at, 0x1f
|
||||
bne $t6, $at, .L80324244
|
||||
nop
|
||||
break 6
|
||||
.L80324244:
|
||||
mflo $v0
|
||||
dsll32 $v1, $v0, 0
|
||||
dsra32 $v1, $v1, 0
|
||||
jr $ra
|
||||
dsra32 $v0, $v0, 0
|
||||
@@ -2,12 +2,16 @@
|
||||
|
||||
// these don't feel like they belong here
|
||||
// but it makes the most logical since there was printf data before
|
||||
#ifndef AVOID_UB
|
||||
OSThread *D_80334890 = NULL;
|
||||
u32 unknown = -1;
|
||||
u32 D_80334894 = -1;
|
||||
OSThread *D_80334898 = (OSThread *) &D_80334890;
|
||||
OSThread *D_8033489C = (OSThread *) &D_80334890;
|
||||
OSThread *D_803348A0 = NULL;
|
||||
u32 D_803348A4 = 0; // UNKNOWN
|
||||
#else
|
||||
OSThread_ListHead D_80334890_fix = {NULL, -1, (OSThread *) &D_80334890_fix, (OSThread *) &D_80334890_fix, NULL, 0};
|
||||
#endif
|
||||
|
||||
void __osDequeueThread(OSThread **queue, OSThread *thread) {
|
||||
register OSThread **a2;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "libultra_internal.h"
|
||||
extern OSThread* D_8033489C;
|
||||
|
||||
OSThread *__osGetCurrFaultedThread() {
|
||||
return D_8033489C; // 80302efc
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "new_func.h"
|
||||
|
||||
extern OSThread *D_80334898;
|
||||
void func_802F4A20() {
|
||||
__OSTranxInfo *sp1c;
|
||||
volatile u32 sp18;
|
||||
@@ -11,8 +10,8 @@ void func_802F4A20() {
|
||||
// addiu $t7, $t6, 0x14
|
||||
// sw $t7, 0x1c($sp)
|
||||
sp1c = &__osDiskHandle->transferInfo;
|
||||
// lui $t8, %hi(D_A4600010) # $t8, 0xa460
|
||||
// lw $t9, %lo(D_A4600010)($t8)
|
||||
// lui $t8, %hi(PI_STATUS_REG) # $t8, 0xa460
|
||||
// lw $t9, %lo(PI_STATUS_REG)($t8)
|
||||
// sw $t9, 0x18($sp)
|
||||
// sp18 = HW_REG(PI_STATUS_REG, u32);
|
||||
// while(sp18 & 0x2) sp18 = HW_REG(PI_STATUS_REG, u32);
|
||||
@@ -22,8 +21,8 @@ void func_802F4A20() {
|
||||
// beqz $t1, .L802F4A70
|
||||
// nop
|
||||
// L802F4A54:
|
||||
// lui $t2, %hi(D_A4600010) # $t2, 0xa460
|
||||
// lw $t3, %lo(D_A4600010)($t2)
|
||||
// lui $t2, %hi(PI_STATUS_REG) # $t2, 0xa460
|
||||
// lw $t3, %lo(PI_STATUS_REG)($t2)
|
||||
// sw $t3, 0x18($sp)
|
||||
// lw $t4, 0x18($sp)
|
||||
// andi $t5, $t4, 2
|
||||
@@ -35,11 +34,11 @@ void func_802F4A20() {
|
||||
// lui $at, 0x1000
|
||||
// lui $t9, %hi(D_A5000510) # $t9, 0xa500
|
||||
// lw $t7, 0x14($t6)
|
||||
// lui $t0, %hi(D_A4600010) # $t0, 0xa460
|
||||
// lui $t0, %hi(PI_STATUS_REG) # $t0, 0xa460
|
||||
// or $t8, $t7, $at
|
||||
// sw $t8, %lo(D_A5000510)($t9)
|
||||
HW_REG(ASIC_BM_CTL, u32) = BUFFER_MANAGER_RESET | sp1c->bmCtlShadow; //should be unk10??
|
||||
// lw $t1, %lo(D_A4600010)($t0)
|
||||
// lw $t1, %lo(PI_STATUS_REG)($t0)
|
||||
// sw $t1, 0x18($sp)
|
||||
// lw $t2, 0x18($sp)
|
||||
// andi $t3, $t2, 2
|
||||
@@ -47,8 +46,8 @@ void func_802F4A20() {
|
||||
// nop
|
||||
WAIT_ON_IOBUSY(sp18);
|
||||
// L802F4AA4:
|
||||
// lui $t4, %hi(D_A4600010) # $t4, 0xa460
|
||||
// lw $t5, %lo(D_A4600010)($t4)
|
||||
// lui $t4, %hi(PI_STATUS_REG) # $t4, 0xa460
|
||||
// lw $t5, %lo(PI_STATUS_REG)($t4)
|
||||
// sw $t5, 0x18($sp)
|
||||
// lw $t6, 0x18($sp)
|
||||
// andi $t7, $t6, 2
|
||||
@@ -64,8 +63,8 @@ void func_802F4A20() {
|
||||
HW_REG(ASIC_BM_CTL, u32) = sp1c->bmCtlShadow;
|
||||
func_802F4B08();
|
||||
// li $t1, 2
|
||||
// lui $t2, %hi(D_A4600010) # $t2, 0xa460
|
||||
// sw $t1, %lo(D_A4600010)($t2)
|
||||
// lui $t2, %hi(PI_STATUS_REG) # $t2, 0xa460
|
||||
// sw $t1, %lo(PI_STATUS_REG)($t2)
|
||||
HW_REG(PI_STATUS_REG, u32) = PI_STATUS_CLEAR_INTR;
|
||||
// lui $t3, %hi(D_8030208C) # $t3, 0x8030
|
||||
// lw $t3, %lo(D_8030208C)($t3)
|
||||
|
||||
@@ -10,16 +10,16 @@ s32 func_802F71A0(OSPiHandle *a0, u32 a1, u32 a2) {
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
/ 0B69A0 802F71A0 3C0EA460 / lui $t6, %hi(D_A4600010) # $t6, 0xa460
|
||||
/ 0B69A4 802F71A4 8DC70010 / lw $a3, %lo(D_A4600010)($t6)
|
||||
/ 0B69A0 802F71A0 3C0EA460 / lui $t6, %hi(PI_STATUS_REG) # $t6, 0xa460
|
||||
/ 0B69A4 802F71A4 8DC70010 / lw $a3, %lo(PI_STATUS_REG)($t6)
|
||||
/ 0B69A8 802F71A8 27BDFFF8 / addiu $sp, $sp, -8
|
||||
/ 0B69AC 802F71AC 30EF0003 / andi $t7, $a3, 3
|
||||
|
||||
/ 0B69B0 802F71B0 11E00006 / beqz $t7, .L802F71CC
|
||||
/ 0B69B4 802F71B4 00000000 / nop
|
||||
.L802F71B8:
|
||||
/ 0B69B8 802F71B8 3C18A460 / lui $t8, %hi(D_A4600010) # $t8, 0xa460
|
||||
/ 0B69BC 802F71BC 8F070010 / lw $a3, %lo(D_A4600010)($t8)
|
||||
/ 0B69B8 802F71B8 3C18A460 / lui $t8, %hi(PI_STATUS_REG) # $t8, 0xa460
|
||||
/ 0B69BC 802F71BC 8F070010 / lw $a3, %lo(PI_STATUS_REG)($t8)
|
||||
/ 0B69C0 802F71C0 30F90003 / andi $t9, $a3, 3
|
||||
/ 0B69C4 802F71C4 1720FFFC / bnez $t9, .L802F71B8
|
||||
/ 0B69C8 802F71C8 00000000 / nop
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern OSThread *D_803348A0;
|
||||
extern OSThread *D_80334898;
|
||||
void func_802F71F0() {
|
||||
register u32 s0 = __osDisableInt();
|
||||
D_803348A0->state = OS_STATE_RUNNABLE;
|
||||
|
||||
@@ -2,6 +2,50 @@
|
||||
#define _LIBULTRA_INTERNAL_H_
|
||||
#include <ultra64.h>
|
||||
|
||||
/*
|
||||
* This define is needed because the original definitions in __osDequeueThread.c are declared
|
||||
* seperately instead of part of a single struct, however some code alises over this memory
|
||||
* assuming a unified structure. To fix this, we declare the full type here and then alias the
|
||||
* symbol names to the correct members in AVOID_UB.
|
||||
*/
|
||||
#ifdef AVOID_UB
|
||||
typedef struct OSThread_ListHead_s
|
||||
{
|
||||
/*0x00*/ struct OSThread_s *next;
|
||||
/*0x04*/ OSPri priority;
|
||||
/*0x08*/ struct OSThread_s *queue;
|
||||
/*0x0C*/ struct OSThread_s *tlnext;
|
||||
/*0x10*/ struct OSThread_s *unk10;
|
||||
/*0x14*/ u32 unk14;
|
||||
} OSThread_ListHead;
|
||||
|
||||
// Now fix the symbols to the new one.
|
||||
extern OSThread_ListHead D_80334890_fix;
|
||||
|
||||
#define D_80334890 D_80334890_fix.next
|
||||
#define D_80334894 D_80334890_fix.priority
|
||||
#define D_80334898 D_80334890_fix.queue
|
||||
#define D_8033489C D_80334890_fix.tlnext
|
||||
#define D_803348A0 D_80334890_fix.unk10
|
||||
|
||||
// Fix for the EEPROM array.
|
||||
extern u32 D_80365E00[16];
|
||||
|
||||
// alias the last array element correctly
|
||||
#define D_80365E3C D_80365E00[15]
|
||||
#else
|
||||
// Original OSThread_ListHead definitions
|
||||
extern OSThread *D_80334890;
|
||||
extern u32 D_80334894;
|
||||
extern OSThread *D_80334898;
|
||||
extern OSThread *D_8033489C;
|
||||
extern OSThread *D_803348A0;
|
||||
|
||||
// Original EEPROM definitions
|
||||
extern u32 D_80365E00[15];
|
||||
extern u32 D_80365E3C;
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
u32 initialized; // probably something like initialized?
|
||||
OSThread *mgrThread;
|
||||
|
||||
@@ -6,7 +6,6 @@ void __osContGetInitData(u8 *, OSContStatus *);
|
||||
|
||||
u32 D_80334810 = 0; // probably initialized
|
||||
|
||||
extern u32 D_80365D1C;
|
||||
extern u64 osClockRate;
|
||||
|
||||
// these probably belong in EEPROMlongread or something
|
||||
|
||||
@@ -27,9 +27,19 @@ typedef struct
|
||||
typedef union {
|
||||
OSContPackedRead read;
|
||||
OSContPackedRequest request;
|
||||
u32 as_raw[2];
|
||||
} OSContPackedStruct;
|
||||
|
||||
#ifdef AVOID_UB
|
||||
// Fix the OSContPackedStruct array
|
||||
extern OSContPackedStruct D_80365CE0[8];
|
||||
|
||||
// And fix the last element
|
||||
#define D_80365D1C D_80365CE0[7].as_raw[1]
|
||||
#else
|
||||
// Original OSContPackedStruct definitions
|
||||
extern OSContPackedStruct D_80365CE0[7];
|
||||
extern u32 D_80365D1C;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,9 +2,14 @@
|
||||
#include "osContInternal.h"
|
||||
#include <macros.h>
|
||||
|
||||
#ifndef AVOID_UB
|
||||
OSContPackedStruct D_80365CE0[7];
|
||||
UNUSED static u32 unused; // padding between these two variables
|
||||
u32 D_80365D1C;
|
||||
#else
|
||||
// Reordered gcc vars above will disturb the aliasing done to access all 8 members of this array, hence AVOID_UB.
|
||||
OSContPackedStruct D_80365CE0[8];
|
||||
#endif
|
||||
|
||||
extern u8 D_80365D20;
|
||||
extern u8 _osCont_numControllers;
|
||||
@@ -52,6 +57,7 @@ void __osPackReadData() {
|
||||
for (i = 0; i < 0x10; i++) {
|
||||
*((u32 *) &D_80365CE0 + i) = 0;
|
||||
}
|
||||
|
||||
D_80365D1C = 1;
|
||||
sp4.unk00 = 255;
|
||||
sp4.unk01 = 1;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern OSThread *D_80334890;
|
||||
|
||||
void osCreateMesgQueue(OSMesgQueue *mq, OSMesg *msgBuf, s32 count) {
|
||||
mq->mtqueue = (OSThread *) &D_80334890; //?
|
||||
mq->fullqueue = (OSThread *) &D_80334890;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern OSThread *D_8033489C;
|
||||
void __osCleanupThread(void);
|
||||
|
||||
// Don't warn about pointer->u64 cast
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern OSThread *D_803348A0;
|
||||
extern OSThread *D_8033489C;
|
||||
|
||||
void osDestroyThread(OSThread *thread) {
|
||||
register s32 int_disabled;
|
||||
register OSThread *s1;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern u32 D_80365E00[15];
|
||||
extern u32 D_80365E3C;
|
||||
extern u8 D_80365D20;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
#include "libultra_internal.h"
|
||||
#include "osContInternal.h"
|
||||
|
||||
u32 D_80365E00[0x3c >> 2];
|
||||
#ifndef AVOID_UB
|
||||
u32 D_80365E00[15];
|
||||
u32 D_80365E3C;
|
||||
#else
|
||||
// Certain code accesses the 16th element (D_80365E3C) in this array, making a seperate
|
||||
// definition UB when gcc rearranges those.
|
||||
u32 D_80365E00[16];
|
||||
#endif
|
||||
extern u8 D_80365D20;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern OSThread *D_803348A0;
|
||||
|
||||
OSPri osGetThreadPri(OSThread *thread) {
|
||||
if (thread == NULL) {
|
||||
thread = D_803348A0;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern OSThread *D_803348A0;
|
||||
|
||||
s32 osJamMesg(OSMesgQueue *mq, OSMesg msg, s32 flag) {
|
||||
register s32 int_disabled;
|
||||
int_disabled = __osDisableInt();
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern OSThread *D_803348A0;
|
||||
|
||||
s32 osRecvMesg(OSMesgQueue *mq, OSMesg *msg, s32 flag) {
|
||||
register u32 int_disabled;
|
||||
register OSThread *thread;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern OSThread *D_803348A0;
|
||||
|
||||
s32 osSendMesg(OSMesgQueue *mq, OSMesg msg, s32 flag) {
|
||||
register u32 int_disabled;
|
||||
register s32 index;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user