Refresh 8

This commit is contained in:
n64
2020-04-03 14:57:26 -04:00
parent 06ec56df7f
commit c45aa301bb
279 changed files with 6522 additions and 7273 deletions

View File

@@ -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
View 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

View File

@@ -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;

View File

@@ -1,5 +1,5 @@
#include "libultra_internal.h"
extern OSThread* D_8033489C;
OSThread *__osGetCurrFaultedThread() {
return D_8033489C; // 80302efc
}

View File

@@ -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)

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -1,6 +1,5 @@
#include "libultra_internal.h"
extern OSThread *D_8033489C;
void __osCleanupThread(void);
// Don't warn about pointer->u64 cast

View File

@@ -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;

View File

@@ -1,7 +1,5 @@
#include "libultra_internal.h"
extern u32 D_80365E00[15];
extern u32 D_80365E3C;
extern u8 D_80365D20;
typedef struct {

View File

@@ -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 {

View File

@@ -1,7 +1,5 @@
#include "libultra_internal.h"
extern OSThread *D_803348A0;
OSPri osGetThreadPri(OSThread *thread) {
if (thread == NULL) {
thread = D_803348A0;

View File

@@ -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();

View File

@@ -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;

View File

@@ -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