-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathfillRect.asm
194 lines (184 loc) · 5.67 KB
/
fillRect.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
int fillRect(headerPtr, color) {
gpuStatPtr = load(0x116C10) // 0x1F801814
width = load(headerPtr + 0x04)
height = load(headerPtr + 0x06)
xSize = load(0x116C58) - 1
ySize = load(0x116C5A) - 1
if(width >= 0 && xSize >= width)
xSize = width
else
xSize = 0
if(height >= 0 && ySize >= height)
ySize = height
else
ySize = 0
store(headerPtr + 0x04, xSize)
store(headerPtr + 0x06, ySize)
texPage = load(gpuStatPtr) & 0x07FF
texDisabled = (color >> 0x1F) << 0x0A
if(load(headerPtr) & 0x3F != 0 || load(headerPtr + 0x04) & 0x3F != 0) {
store(0x135464, 0x0813548C) // unknown, some ptr to list at 0x13548C?
store(0x135464 + 0x04, 0xE3000000) // set drawing area top left 0,0,0
store(0x135464 + 0x08, 0xE4FFFFFF) // set drawing area bottom right -1,-1,-1
store(0x135464 + 0x0C, 0xE5000000) // set drawing offset 0,0,0
store(0x135464 + 0x10, 0xE6000000) // set mask bit setting TextureBit15, DrawAlways
store(0x135464 + 0x14, 0xE1000000 | texDisabled | texPage) // draw mode
store(0x135464 + 0x18, 0x60000000 | (color & 0x00FFFFFF)) // draw monochrome rectangle
store(0x135464 + 0x1C, load(headerPtr)) // rectangle vertex position
store(0x135464 + 0x20, load(headerPtr + 0x04)) // rectangle size
store(0x13548C, 0x03FFFFFF) // unknown, null pointer?
store(0x13548C + 0x04, 0xE3000000 | getGPUInfo(3)) // draw area top left
store(0x13548C + 0x08, 0xE4000000 | getGPUInfo(4)) // draw area bottom right
store(0x13548C + 0x0C, 0xE5000000 | getGPUInfo(5)) // draw area offset
}
else {
store(0x135464, 0x05FFFFFF) // unknown, null pointer?
store(0x135464 + 0x04, 0xE6000000) // set mask bit setting TextureBit15, DrawAlways
store(0x135464 + 0x08, 0xE1000000 | texDisabled | texPage) // draw mode
store(0x135464 + 0x0C, 0x02000000 | (color & 0x00FFFFFF)) // fill rectangle in VRAM
store(0x135464 + 0x10, load(headerPtr)) // top left corner
store(0x135464 + 0x14, load(headerPtr + 0x04)) // size
}
gpuUploadCommandList(0x135464)
return 0
}
0x0009332c addiu r29,r29,0xffe0
0x00093330 addu r8,r4,r0
0x00093334 sw r31,0x001c(r29)
0x00093338 sw r18,0x0018(r29)
0x0009333c sw r17,0x0014(r29)
0x00093340 sw r16,0x0010(r29)
0x00093344 lh r3,0x0004(r8)
0x00093348 lhu r4,0x0004(r8)
0x0009334c bltz r3,0x00093380
0x00093350 addu r9,r5,r0
0x00093354 lui r2,0x8011
0x00093358 lh r2,0x6c58(r2)
0x0009335c nop
0x00093360 addiu r2,r2,0xffff
0x00093364 slt r2,r2,r3
0x00093368 lui r3,0x8011
0x0009336c lhu r3,0x6c58(r3)
0x00093370 bne r2,r0,0x00093384
0x00093374 addiu r2,r3,0xffff
0x00093378 j 0x00093384
0x0009337c addu r2,r4,r0
0x00093380 addu r2,r0,r0
0x00093384 lh r3,0x0006(r8)
0x00093388 lhu r4,0x0006(r8)
0x0009338c bltz r3,0x000933c0
0x00093390 sh r2,0x0004(r8)
0x00093394 lui r2,0x8011
0x00093398 lh r2,0x6c5a(r2)
0x0009339c nop
0x000933a0 addiu r2,r2,0xffff
0x000933a4 slt r2,r2,r3
0x000933a8 lui r3,0x8011
0x000933ac lhu r3,0x6c5a(r3)
0x000933b0 bne r2,r0,0x000933c4
0x000933b4 addiu r3,r3,0xffff
0x000933b8 j 0x000933c4
0x000933bc addu r3,r4,r0
0x000933c0 addu r3,r0,r0
0x000933c4 lhu r2,0x0000(r8)
0x000933c8 nop
0x000933cc andi r2,r2,0x003f
0x000933d0 bne r2,r0,0x000933ec
0x000933d4 sh r3,0x0006(r8)
0x000933d8 lhu r2,0x0004(r8)
0x000933dc nop
0x000933e0 andi r2,r2,0x003f
0x000933e4 beq r2,r0,0x000934c4
0x000933e8 lui r2,0x05ff
0x000933ec lui r6,0x00ff
0x000933f0 ori r6,r6,0xffff
0x000933f4 lui r4,0xe4ff
0x000933f8 ori r4,r4,0xffff
0x000933fc lui r7,0x03ff
0x00093400 lui r5,0x8013
0x00093404 addiu r5,r5,0x5464
0x00093408 lui r16,0x8013
0x0009340c addiu r16,r16,0x548c
0x00093410 and r2,r16,r6
0x00093414 lui r3,0x0800
0x00093418 or r2,r2,r3
0x0009341c lui r17,0xe300
0x00093420 lui r18,0xe500
0x00093424 sw r2,0x0000(r5)
0x00093428 lui r2,0xe600
0x0009342c and r6,r9,r6
0x00093430 lui r3,0x6000
0x00093434 or r6,r6,r3
0x00093438 sw r2,0x0010(r5)
0x0009343c lui r2,0x8011
0x00093440 lw r2,0x6c10(r2)
0x00093444 lui r3,0xe100
0x00093448 sw r17,0x0004(r5)
0x0009344c sw r4,0x0008(r5)
0x00093450 sw r18,0x000c(r5)
0x00093454 lw r4,0x0000(r2)
0x00093458 srl r2,r9,0x1f
0x0009345c sll r2,r2,0x0a
0x00093460 or r2,r2,r3
0x00093464 sw r6,0x0018(r5)
0x00093468 andi r4,r4,0x07ff
0x0009346c or r4,r4,r2
0x00093470 sw r4,0x0014(r5)
0x00093474 lw r2,0x0000(r8)
0x00093478 ori r7,r7,0xffff
0x0009347c sw r2,0x001c(r5)
0x00093480 lw r2,0x0004(r8)
0x00093484 addiu r4,r0,0x0003
0x00093488 sw r7,0x0000(r16)
0x0009348c jal 0x00093ad8
0x00093490 sw r2,0x0020(r5)
0x00093494 addiu r4,r0,0x0004
0x00093498 or r2,r2,r17
0x0009349c jal 0x00093ad8
0x000934a0 sw r2,0x0004(r16)
0x000934a4 addiu r4,r0,0x0005
0x000934a8 lui r3,0xe400
0x000934ac or r2,r2,r3
0x000934b0 jal 0x00093ad8
0x000934b4 sw r2,0x0008(r16)
0x000934b8 or r2,r2,r18
0x000934bc j 0x00093534
0x000934c0 sw r2,0x000c(r16)
0x000934c4 ori r2,r2,0xffff
0x000934c8 lui r3,0x00ff
0x000934cc ori r3,r3,0xffff
0x000934d0 lui r6,0x8013
0x000934d4 addiu r6,r6,0x5464
0x000934d8 sw r2,0x0000(r6)
0x000934dc lui r2,0xe600
0x000934e0 and r3,r9,r3
0x000934e4 lui r5,0x0200
0x000934e8 sw r2,0x0004(r6)
0x000934ec lui r2,0x8011
0x000934f0 lw r2,0x6c10(r2)
0x000934f4 or r3,r3,r5
0x000934f8 lw r4,0x0000(r2)
0x000934fc srl r2,r9,0x1f
0x00093500 sll r2,r2,0x0a
0x00093504 sw r3,0x000c(r6)
0x00093508 lui r3,0xe100
0x0009350c or r2,r2,r3
0x00093510 andi r4,r4,0x07ff
0x00093514 or r4,r4,r2
0x00093518 sw r4,0x0008(r6)
0x0009351c lw r2,0x0000(r8)
0x00093520 nop
0x00093524 sw r2,0x0010(r6)
0x00093528 lw r2,0x0004(r8)
0x0009352c nop
0x00093530 sw r2,0x0014(r6)
0x00093534 lui r4,0x8013
0x00093538 jal 0x00093a90
0x0009353c addiu r4,r4,0x5464
0x00093540 addu r2,r0,r0
0x00093544 lw r31,0x001c(r29)
0x00093548 lw r18,0x0018(r29)
0x0009354c lw r17,0x0014(r29)
0x00093550 lw r16,0x0010(r29)
0x00093554 jr r31
0x00093558 addiu r29,r29,0x0020