Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/lib/asm/osSetIntMask.s
7858 views
1
.set noat // allow manual use of $at
2
.set noreorder // don't insert nops after branches
3
.set gp=64
4
5
#include "macros.inc"
6
7
.eqv MI_INTR_MASK_REG, 0xA430000C
8
9
.section .text, "ax"
10
11
glabel osSetIntMask
12
#if defined(VERSION_EU) || defined(VERSION_SH)
13
mfc0 $t4, $12
14
andi $v0, $t4, 0xff01
15
lui $t0, %hi(__OSGlobalIntMask) // $t0, 0x8030
16
addiu $t0, %lo(__OSGlobalIntMask) // addiu $t0, $t0, 0x208c
17
lw $t3, ($t0)
18
li $at, -1
19
xor $t0, $t3, $at
20
andi $t0, $t0, 0xff00
21
or $v0, $v0, $t0
22
#else
23
mfc0 $t1, $12
24
andi $v0, $t1, 0xff01
25
#endif
26
lui $t2, %hi(MI_INTR_MASK_REG) // $t2, 0xa430
27
lw $t2, %lo(MI_INTR_MASK_REG)($t2)
28
#if defined(VERSION_EU) || defined(VERSION_SH)
29
beqz $t2, .L80200074
30
srl $t1, $t3, 0x10
31
li $at, -1
32
xor $t1, $t1, $at
33
andi $t1, $t1, 0x3f
34
or $t2, $t2, $t1
35
.L80200074:
36
#endif
37
sll $t2, $t2, 0x10
38
or $v0, $v0, $t2
39
lui $at, 0x3f
40
and $t0, $a0, $at
41
#if defined(VERSION_EU) || defined(VERSION_SH)
42
and $t0, $t0, $t3
43
#endif
44
srl $t0, $t0, 0xf
45
lui $t2, %hi(D_803386D0)
46
addu $t2, $t2, $t0
47
lhu $t2, %lo(D_803386D0)($t2)
48
lui $at, %hi(MI_INTR_MASK_REG) // $at, 0xa430
49
sw $t2, %lo(MI_INTR_MASK_REG)($at)
50
andi $t0, $a0, 0xff01
51
#if defined(VERSION_EU) || defined(VERSION_SH)
52
andi $t1, $t3, 0xff00
53
and $t0, $t0, $t1
54
#endif
55
lui $at, (0xFFFF00FF >> 16) // lui $at, 0xffff
56
ori $at, (0xFFFF00FF & 0xFFFF) // ori $at, $at, 0xff
57
#if defined(VERSION_EU) || defined(VERSION_SH)
58
and $t4, $t4, $at
59
or $t4, $t4, $t0
60
mtc0 $t4, $12
61
#else
62
and $t1, $t1, $at
63
or $t1, $t1, $t0
64
mtc0 $t1, $12
65
#endif
66
nop
67
nop
68
jr $ra
69
nop
70
71
72
.section .rodata
73
74
glabel D_803386D0
75
.half 0x0555
76
.half 0x0556
77
.half 0x0559
78
.half 0x055A
79
.half 0x0565
80
.half 0x0566
81
.half 0x0569
82
.half 0x056A
83
.half 0x0595
84
.half 0x0596
85
.half 0x0599
86
.half 0x059A
87
.half 0x05A5
88
.half 0x05A6
89
.half 0x05A9
90
.half 0x05AA
91
.half 0x0655
92
.half 0x0656
93
.half 0x0659
94
.half 0x065A
95
.half 0x0665
96
.half 0x0666
97
.half 0x0669
98
.half 0x066A
99
.half 0x0695
100
.half 0x0696
101
.half 0x0699
102
.half 0x069A
103
.half 0x06A5
104
.half 0x06A6
105
.half 0x06A9
106
.half 0x06AA
107
.half 0x0955
108
.half 0x0956
109
.half 0x0959
110
.half 0x095A
111
.half 0x0965
112
.half 0x0966
113
.half 0x0969
114
.half 0x096A
115
.half 0x0995
116
.half 0x0996
117
.half 0x0999
118
.half 0x099A
119
.half 0x09A5
120
.half 0x09A6
121
.half 0x09A9
122
.half 0x09AA
123
.half 0x0A55
124
.half 0x0A56
125
.half 0x0A59
126
.half 0x0A5A
127
.half 0x0A65
128
.half 0x0A66
129
.half 0x0A69
130
.half 0x0A6A
131
.half 0x0A95
132
.half 0x0A96
133
.half 0x0A99
134
.half 0x0A9A
135
.half 0x0AA5
136
.half 0x0AA6
137
.half 0x0AA9
138
.half 0x0AAA
139
140