Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/asm/boot.s
7854 views
1
// assembler directives
2
.set noat // allow manual use of $at
3
.set noreorder // don't insert nops after branches
4
.set gp=64
5
6
#include "macros.inc"
7
8
// 0xA0000000-0xBFFFFFFF: KSEG1 direct map non-cache mirror of 0x00000000
9
// 0xA4000000-0xA4000FFF: RSP DMEM
10
11
// 0xA4000000-0xA400003F: ROM header
12
13
.section .text, "ax"
14
15
// 0xA4000040-0xA4000B6F: IPL3
16
17
// IPL3 entry point jumped to from IPL2
18
glabel ipl3_entry // 0xA4000040
19
mtc0 $zero, $13
20
mtc0 $zero, $9
21
mtc0 $zero, $11
22
lui $t0, %hi(RI_MODE_REG)
23
addiu $t0, %lo(RI_MODE_REG)
24
lw $t1, 0xc($t0)
25
bnez $t1, .LA4000410
26
nop
27
addiu $sp, $sp, -0x18
28
sw $s3, ($sp)
29
sw $s4, 4($sp)
30
sw $s5, 8($sp)
31
sw $s6, 0xc($sp)
32
sw $s7, 0x10($sp)
33
lui $t0, %hi(RI_MODE_REG)
34
addiu $t0, %lo(RI_MODE_REG)
35
lui $t2, (0xa3f80000 >> 16)
36
lui $t3, (0xa3f00000 >> 16)
37
lui $t4, %hi(MI_MODE_REG)
38
addiu $t4, %lo(MI_MODE_REG)
39
ori $t1, $zero, 64
40
sw $t1, 4($t0)
41
li $s1, 8000
42
.LA400009C:
43
nop
44
addi $s1, $s1, -1
45
bnez $s1, .LA400009C
46
nop
47
sw $zero, 8($t0)
48
ori $t1, $zero, 20
49
sw $t1, 0xc($t0)
50
sw $zero, ($t0)
51
li $s1, 4
52
.LA40000C0:
53
nop
54
addi $s1, $s1, -1
55
bnez $s1, .LA40000C0
56
nop
57
ori $t1, $zero, 14
58
sw $t1, ($t0)
59
li $s1, 32
60
.LA40000DC:
61
addi $s1, $s1, -1
62
bnez $s1, .LA40000DC
63
ori $t1, $zero, 271
64
sw $t1, ($t4)
65
lui $t1, (0x18082838 >> 16)
66
ori $t1, (0x18082838 & 0xFFFF)
67
sw $t1, 0x8($t2)
68
sw $zero, 0x14($t2)
69
lui $t1, 0x8000
70
sw $t1, 0x4($t2)
71
move $t5, $zero
72
move $t6, $zero
73
lui $t7, (0xA3F00000 >> 16)
74
move $t8, $zero
75
lui $t9, (0xA3F00000 >> 16)
76
lui $s6, (0xA0000000 >> 16)
77
move $s7, $zero
78
lui $a2, (0xA3F00000 >> 16)
79
lui $a3, (0xA0000000 >> 16)
80
move $s2, $zero
81
lui $s4, (0xA0000000 >> 16)
82
addiu $sp, $sp, -0x48
83
move $fp, $sp
84
lui $s0, %hi(MI_VERSION_REG)
85
lw $s0, %lo(MI_VERSION_REG)($s0)
86
lui $s1, (0x01010101 >> 16)
87
addiu $s1, (0x01010101 & 0xFFFF)
88
bne $s0, $s1, .LA4000160
89
nop
90
li $s0, 512
91
ori $s1, $t3, 0x4000
92
b .LA4000168
93
nop
94
.LA4000160:
95
li $s0, 1024
96
ori $s1, $t3, 0x8000
97
.LA4000168:
98
sw $t6, 4($s1)
99
addiu $s5, $t7, 0xc
100
jal func_A4000778
101
nop
102
beqz $v0, .LA400025C
103
nop
104
sw $v0, ($sp)
105
li $t1, 8192
106
sw $t1, ($t4)
107
lw $t3, ($t7)
108
lui $t0, 0xf0ff
109
and $t3, $t3, $t0
110
sw $t3, 4($sp)
111
addi $sp, $sp, 8
112
li $t1, 4096
113
sw $t1, ($t4)
114
lui $t0, 0xb019
115
bne $t3, $t0, .LA40001E0
116
nop
117
lui $t0, 0x800
118
add $t8, $t8, $t0
119
add $t9, $t9, $s0
120
add $t9, $t9, $s0
121
lui $t0, 0x20
122
add $s6, $s6, $t0
123
add $s4, $s4, $t0
124
sll $s2, $s2, 1
125
addi $s2, $s2, 1
126
b .LA40001E8
127
nop
128
.LA40001E0:
129
lui $t0, 0x10
130
add $s4, $s4, $t0
131
.LA40001E8:
132
li $t0, 8192
133
sw $t0, ($t4)
134
lw $t1, 0x24($t7)
135
lw $k0, ($t7)
136
li $t0, 4096
137
sw $t0, ($t4)
138
andi $t1, $t1, 0xffff
139
li $t0, 1280
140
bne $t1, $t0, .LA4000230
141
nop
142
lui $k1, 0x100
143
and $k0, $k0, $k1
144
bnez $k0, .LA4000230
145
nop
146
lui $t0, (0x101C0A04 >> 16)
147
ori $t0, (0x101C0A04 & 0xFFFF)
148
sw $t0, 0x18($t7)
149
b .LA400023C
150
.LA4000230:
151
lui $t0, (0x080C1204 >> 16)
152
ori $t0, (0x080C1204 & 0xFFFF)
153
sw $t0, 0x18($t7)
154
.LA400023C:
155
lui $t0, 0x800
156
add $t6, $t6, $t0
157
add $t7, $t7, $s0
158
add $t7, $t7, $s0
159
addiu $t5, $t5, 1
160
sltiu $t0, $t5, 8
161
bnez $t0, .LA4000168
162
nop
163
.LA400025C:
164
li $t0, 0xc4000000
165
sw $t0, 0xc($t2)
166
li $t0, 0x80000000
167
sw $t0, 0x4($t2)
168
move $sp, $fp
169
move $v1, $zero
170
.LA4000274:
171
lw $t1, 4($sp)
172
lui $t0, 0xb009
173
bne $t1, $t0, .LA40002D8
174
nop
175
sw $t8, 4($s1)
176
addiu $s5, $t9, 0xc
177
lw $a0, ($sp)
178
addi $sp, $sp, 8
179
li $a1, 1
180
jal func_A4000A40
181
nop
182
lw $t0, ($s6)
183
lui $t0, 8
184
add $t0, $t0, $s6
185
lw $t1, ($t0)
186
lw $t0, ($s6)
187
lui $t0, 8
188
add $t0, $t0, $s6
189
lw $t1, ($t0)
190
lui $t0, 0x400
191
add $t6, $t6, $t0
192
add $t9, $t9, $s0
193
lui $t0, 0x10
194
add $s6, $s6, $t0
195
b .LA400035C
196
.LA40002D8:
197
sw $s7, 4($s1)
198
addiu $s5, $a2, 0xc
199
lw $a0, ($sp)
200
addi $sp, $sp, 8
201
li $a1, 1
202
jal func_A4000A40
203
nop
204
lw $t0, ($a3)
205
lui $t0, 8
206
add $t0, $t0, $a3
207
lw $t1, ($t0)
208
lui $t0, 0x10
209
add $t0, $t0, $a3
210
lw $t1, ($t0)
211
lui $t0, 0x18
212
add $t0, $t0, $a3
213
lw $t1, ($t0)
214
lw $t0, ($a3)
215
lui $t0, 8
216
add $t0, $t0, $a3
217
lw $t1, ($t0)
218
lui $t0, 0x10
219
add $t0, $t0, $a3
220
lw $t1, ($t0)
221
lui $t0, 0x18
222
add $t0, $t0, $a3
223
lw $t1, ($t0)
224
lui $t0, 0x800
225
add $s7, $s7, $t0
226
add $a2, $a2, $s0
227
add $a2, $a2, $s0
228
lui $t0, 0x20
229
add $a3, $a3, $t0
230
.LA400035C:
231
addiu $v1, $v1, 1
232
slt $t0, $v1, $t5
233
bnez $t0, .LA4000274
234
nop
235
lui $t2, %hi(RI_REFRESH_REG)
236
sll $s2, $s2, 0x13
237
lui $t1, (0x00063634 >> 16)
238
ori $t1, (0x00063634 & 0xFFFF)
239
or $t1, $t1, $s2
240
sw $t1, %lo(RI_REFRESH_REG)($t2)
241
lw $t1, %lo(RI_REFRESH_REG)($t2)
242
lui $t0, (0xA0000300 >> 16)
243
ori $t0, (0xA0000300 & 0xFFFF)
244
lui $t1, (0x0FFFFFFF >> 16)
245
ori $t1, (0x0FFFFFFF & 0xFFFF)
246
and $s6, $s6, $t1
247
sw $s6, 0x18($t0)
248
move $sp, $fp
249
addiu $sp, $sp, 0x48
250
lw $s3, ($sp)
251
lw $s4, 4($sp)
252
lw $s5, 8($sp)
253
lw $s6, 0xc($sp)
254
lw $s7, 0x10($sp)
255
addiu $sp, $sp, 0x18
256
lui $t0, %hi(EXCEPTION_TLB_MISS)
257
addiu $t0, $t0, %lo(EXCEPTION_TLB_MISS)
258
addiu $t1, $t0, 0x4000
259
addiu $t1, $t1, -0x20
260
mtc0 $zero, $28
261
mtc0 $zero, $29
262
.LA40003D8:
263
cache 8, ($t0)
264
sltu $at, $t0, $t1
265
bnez $at, .LA40003D8
266
addiu $t0, $t0, 0x20
267
lui $t0, %hi(EXCEPTION_TLB_MISS)
268
addiu $t0, %lo(EXCEPTION_TLB_MISS)
269
addiu $t1, $t0, 0x2000
270
addiu $t1, $t1, -0x10
271
.LA40003F8:
272
cache 9, ($t0)
273
sltu $at, $t0, $t1
274
bnez $at, .LA40003F8
275
addiu $t0, $t0, 0x10
276
b .LA4000458
277
nop
278
.LA4000410:
279
lui $t0, %hi(EXCEPTION_TLB_MISS)
280
addiu $t0, %lo(EXCEPTION_TLB_MISS)
281
addiu $t1, $t0, 0x4000
282
addiu $t1, $t1, -0x20
283
mtc0 $zero, $28
284
mtc0 $zero, $29
285
.LA4000428:
286
cache 8, ($t0)
287
sltu $at, $t0, $t1
288
bnez $at, .LA4000428
289
addiu $t0, $t0, 0x20
290
lui $t0, %hi(EXCEPTION_TLB_MISS)
291
addiu $t0, %lo(EXCEPTION_TLB_MISS)
292
addiu $t1, $t0, 0x2000
293
addiu $t1, $t1, -0x10
294
.LA4000448:
295
cache 1, ($t0)
296
sltu $at, $t0, $t1
297
bnez $at, .LA4000448
298
addiu $t0, $t0, 0x10
299
.LA4000458:
300
lui $t2, %hi(SP_DMEM)
301
addiu $t2, $t2, %lo(SP_DMEM)
302
lui $t3, 0xfff0
303
lui $t1, 0x0010
304
and $t2, $t2, $t3
305
lui $t0, %hi(SP_DMEM_UNK0)
306
addiu $t1, -1
307
lui $t3, %hi(SP_DMEM_UNK1)
308
addiu $t0, %lo(SP_DMEM_UNK0)
309
addiu $t3, %lo(SP_DMEM_UNK1)
310
and $t0, $t0, $t1
311
and $t3, $t3, $t1
312
lui $t1, 0xa000
313
or $t0, $t0, $t2
314
or $t3, $t3, $t2
315
addiu $t1, $t1, 0
316
.LA4000498:
317
lw $t5, ($t0)
318
addiu $t0, $t0, 4
319
sltu $at, $t0, $t3
320
addiu $t1, $t1, 4
321
bnez $at, .LA4000498
322
sw $t5, -4($t1)
323
lui $t4, %hi(EXCEPTION_TLB_MISS)
324
addiu $t4, %lo(EXCEPTION_TLB_MISS)
325
jr $t4
326
nop
327
lui $t3, %hi(D_B0000008)
328
lw $t1, %lo(D_B0000008)($t3)
329
lui $t2, (0x1FFFFFFF >> 16)
330
ori $t2, (0x1FFFFFFF & 0xFFFF)
331
lui $at, %hi(PI_DRAM_ADDR_REG)
332
and $t1, $t1, $t2
333
sw $t1, %lo(PI_DRAM_ADDR_REG)($at)
334
lui $t0, %hi(PI_STATUS_REG)
335
.LA40004D0:
336
lw $t0, %lo(PI_STATUS_REG)($t0)
337
andi $t0, $t0, 2
338
bnezl $t0, .LA40004D0
339
lui $t0, %hi(PI_STATUS_REG)
340
li $t0, 0x1000
341
add $t0, $t0, $t3
342
and $t0, $t0, $t2
343
lui $at, %hi(PI_CART_ADDR_REG)
344
sw $t0, %lo(PI_CART_ADDR_REG)($at)
345
lui $t2, 0x0010
346
addiu $t2, 0xFFFF
347
lui $at, %hi(PI_WR_LEN_REG)
348
sw $t2, %lo(PI_WR_LEN_REG)($at)
349
350
.LA4000514:
351
nop
352
nop
353
nop
354
nop
355
nop
356
nop
357
nop
358
nop
359
nop
360
nop
361
nop
362
nop
363
nop
364
nop
365
nop
366
nop
367
nop
368
nop
369
nop
370
nop
371
nop
372
nop
373
nop
374
nop
375
nop
376
nop
377
nop
378
nop
379
lui $t3, %hi(PI_STATUS_REG)
380
lw $t3, %lo(PI_STATUS_REG)($t3)
381
andi $t3, $t3, 0x1
382
bnez $t3, .LA4000514
383
nop
384
lui $t3, %hi(D_B0000008)
385
lw $a0, %lo(D_B0000008)($t3)
386
move $a1, $s6
387
lui $at, (0x5D588B65 >> 16)
388
ori $at, (0x5D588B65 & 0xFFFF)
389
multu $a1, $at
390
addiu $sp, $sp, -0x20
391
sw $ra, 0x1c($sp)
392
sw $s0, 0x14($sp)
393
lui $ra, 0x10
394
move $v1, $zero
395
move $t0, $zero
396
move $t1, $a0
397
li $t5, 32
398
mflo $v0
399
addiu $v0, $v0, 1
400
move $a3, $v0
401
move $t2, $v0
402
move $t3, $v0
403
move $s0, $v0
404
move $a2, $v0
405
move $t4, $v0
406
.LA40005F0:
407
lw $v0, ($t1)
408
addu $v1, $a3, $v0
409
sltu $at, $v1, $a3
410
beqz $at, .LA4000608
411
move $a1, $v1
412
addiu $t2, $t2, 1
413
.LA4000608:
414
andi $v1, $v0, 0x1f
415
subu $t7, $t5, $v1
416
srlv $t8, $v0, $t7
417
sllv $t6, $v0, $v1
418
or $a0, $t6, $t8
419
sltu $at, $a2, $v0
420
move $a3, $a1
421
xor $t3, $t3, $v0
422
beqz $at, .LA400063C
423
addu $s0, $s0, $a0
424
xor $t9, $a3, $v0
425
b .LA4000640
426
xor $a2, $t9, $a2
427
.LA400063C:
428
xor $a2, $a2, $a0
429
.LA4000640:
430
addiu $t0, $t0, 4
431
xor $t7, $v0, $s0
432
addiu $t1, $t1, 4
433
bne $t0, $ra, .LA40005F0
434
addu $t4, $t7, $t4
435
xor $t6, $a3, $t2
436
xor $a3, $t6, $t3
437
xor $t8, $s0, $a2
438
xor $s0, $t8, $t4
439
lui $t3, %hi(D_B0000010)
440
lw $t0, %lo(D_B0000010)($t3)
441
bne $a3, $t0, halt
442
nop
443
lw $t0, %lo(D_B0000014)($t3)
444
bne $s0, $t0, halt
445
nop
446
bal func_A4000690
447
nop
448
449
halt:
450
bal halt
451
nop
452
453
func_A4000690:
454
lui $t1, %hi(SP_PC)
455
lw $t1, %lo(SP_PC)($t1)
456
lw $s0, 0x14($sp)
457
lw $ra, 0x1c($sp)
458
beqz $t1, .LA40006BC
459
addiu $sp, $sp, 0x20
460
li $t2, 65
461
lui $at, %hi(SP_STATUS_REG)
462
sw $t2, %lo(SP_STATUS_REG)($at)
463
lui $at, %hi(SP_PC)
464
sw $zero, %lo(SP_PC)($at)
465
.LA40006BC:
466
lui $t3, (0x00AAAAAE >> 16)
467
ori $t3, (0x00AAAAAE & 0xFFFF)
468
lui $at, %hi(SP_STATUS_REG)
469
sw $t3, %lo(SP_STATUS_REG)($at)
470
lui $at, %hi(MI_INTR_MASK_REG)
471
li $t0, 1365
472
sw $t0, %lo(MI_INTR_MASK_REG)($at)
473
lui $at, %hi(SI_STATUS_REG)
474
sw $zero, %lo(SI_STATUS_REG)($at)
475
lui $at, %hi(AI_STATUS_REG)
476
sw $zero, %lo(AI_STATUS_REG)($at)
477
lui $at, %hi(MI_MODE_REG)
478
li $t1, 2048
479
sw $t1, %lo(MI_MODE_REG)($at)
480
li $t1, 2
481
lui $at, %hi(PI_STATUS_REG)
482
lui $t0, (0xA0000300 >> 16)
483
ori $t0, (0xA0000300 & 0xFFFF)
484
sw $t1, %lo(PI_STATUS_REG)($at)
485
sw $s7, 0x14($t0)
486
sw $s5, 0xc($t0)
487
sw $s3, 0x4($t0)
488
beqz $s3, .LA4000728
489
sw $s4, ($t0)
490
lui $t1, 0xa600
491
b .LA4000730
492
addiu $t1, $t1, 0
493
.LA4000728:
494
lui $t1, 0xb000
495
addiu $t1, $t1, 0
496
.LA4000730:
497
sw $t1, 0x8($t0)
498
lui $t0, %hi(SP_DMEM)
499
addiu $t0, %lo(SP_DMEM)
500
addi $t1, $t0, 0x1000
501
.LA4000740:
502
addiu $t0, $t0, 4
503
bne $t0, $t1, .LA4000740
504
sw $zero, -4($t0)
505
lui $t0, %hi(SP_IMEM)
506
addiu $t0, %lo(SP_IMEM)
507
addi $t1, $t0, 0x1000
508
.LA4000758:
509
addiu $t0, $t0, 4
510
bne $t0, $t1, .LA4000758
511
sw $zero, -4($t0)
512
lui $t3, %hi(D_B0000008)
513
lw $t1, %lo(D_B0000008)($t3)
514
jr $t1
515
nop
516
nop
517
518
func_A4000778:
519
addiu $sp, $sp, -0xa0
520
sw $s0, 0x40($sp)
521
sw $s1, 0x44($sp)
522
move $s1, $zero
523
move $s0, $zero
524
sw $v0, ($sp)
525
sw $v1, 4($sp)
526
sw $a0, 8($sp)
527
sw $a1, 0xc($sp)
528
sw $a2, 0x10($sp)
529
sw $a3, 0x14($sp)
530
sw $t0, 0x18($sp)
531
sw $t1, 0x1c($sp)
532
sw $t2, 0x20($sp)
533
sw $t3, 0x24($sp)
534
sw $t4, 0x28($sp)
535
sw $t5, 0x2c($sp)
536
sw $t6, 0x30($sp)
537
sw $t7, 0x34($sp)
538
sw $t8, 0x38($sp)
539
sw $t9, 0x3c($sp)
540
sw $s2, 0x48($sp)
541
sw $s3, 0x4c($sp)
542
sw $s4, 0x50($sp)
543
sw $s5, 0x54($sp)
544
sw $s6, 0x58($sp)
545
sw $s7, 0x5c($sp)
546
sw $fp, 0x60($sp)
547
sw $ra, 0x64($sp)
548
.LA40007EC:
549
jal func_A4000880
550
nop
551
addiu $s0, $s0, 1
552
slti $t1, $s0, 4
553
bnez $t1, .LA40007EC
554
addu $s1, $s1, $v0
555
srl $a0, $s1, 2
556
jal func_A4000A40
557
li $a1, 1
558
lw $ra, 0x64($sp)
559
srl $v0, $s1, 2
560
lw $s1, 0x44($sp)
561
lw $v1, 4($sp)
562
lw $a0, 8($sp)
563
lw $a1, 0xc($sp)
564
lw $a2, 0x10($sp)
565
lw $a3, 0x14($sp)
566
lw $t0, 0x18($sp)
567
lw $t1, 0x1c($sp)
568
lw $t2, 0x20($sp)
569
lw $t3, 0x24($sp)
570
lw $t4, 0x28($sp)
571
lw $t5, 0x2c($sp)
572
lw $t6, 0x30($sp)
573
lw $t7, 0x34($sp)
574
lw $t8, 0x38($sp)
575
lw $t9, 0x3c($sp)
576
lw $s0, 0x40($sp)
577
lw $s2, 0x48($sp)
578
lw $s3, 0x4c($sp)
579
lw $s4, 0x50($sp)
580
lw $s5, 0x54($sp)
581
lw $s6, 0x58($sp)
582
lw $s7, 0x5c($sp)
583
lw $fp, 0x60($sp)
584
jr $ra
585
addiu $sp, $sp, 0xa0
586
587
func_A4000880:
588
addiu $sp, $sp, -0x20
589
sw $ra, 0x1c($sp)
590
move $t1, $zero
591
move $t3, $zero
592
move $t4, $zero
593
.LA4000894:
594
slti $k0, $t4, 0x40
595
beql $k0, $zero, .LA40008FC
596
move $v0, $zero
597
jal func_A400090C
598
move $a0, $t4
599
blezl $v0, .LA40008CC
600
slti $k0, $t1, 0x50
601
subu $k0, $v0, $t1
602
multu $k0, $t4
603
move $t1, $v0
604
mflo $k0
605
addu $t3, $t3, $k0
606
nop
607
slti $k0, $t1, 0x50
608
.LA40008CC:
609
bnez $k0, .LA4000894
610
addiu $t4, $t4, 1
611
sll $a0, $t3, 2
612
subu $a0, $a0, $t3
613
sll $a0, $a0, 2
614
subu $a0, $a0, $t3
615
sll $a0, $a0, 1
616
jal func_A4000980
617
addiu $a0, $a0, -0x370
618
b .LA4000900
619
lw $ra, 0x1c($sp)
620
move $v0, $zero
621
.LA40008FC:
622
lw $ra, 0x1c($sp)
623
.LA4000900:
624
addiu $sp, $sp, 0x20
625
jr $ra
626
nop
627
628
func_A400090C:
629
addiu $sp, $sp, -0x28
630
sw $ra, 0x1c($sp)
631
move $v0, $zero
632
jal func_A4000A40
633
li $a1, 2
634
move $fp, $zero
635
li $k0, -1
636
.LA4000928:
637
sw $k0, 4($s4)
638
lw $v1, 4($s4)
639
sw $k0, ($s4)
640
sw $k0, ($s4)
641
move $gp, $zero
642
srl $v1, $v1, 0x10
643
.LA4000940:
644
andi $k0, $v1, 1
645
beql $k0, $zero, .LA4000954
646
addiu $gp, $gp, 1
647
addiu $v0, $v0, 1
648
addiu $gp, $gp, 1
649
.LA4000954:
650
slti $k0, $gp, 8
651
bnez $k0, .LA4000940
652
srl $v1, $v1, 1
653
addiu $fp, $fp, 1
654
slti $k0, $fp, 0xa
655
bnezl $k0, .LA4000928
656
li $k0, -1
657
lw $ra, 0x1c($sp)
658
addiu $sp, $sp, 0x28
659
jr $ra
660
nop
661
662
func_A4000980:
663
addiu $sp, $sp, -0x28
664
sw $ra, 0x1c($sp)
665
sw $a0, 0x20($sp)
666
sb $zero, 0x27($sp)
667
move $t0, $zero
668
move $t2, $zero
669
li $t5, 51200
670
move $t6, $zero
671
slti $k0, $t6, 0x40
672
.LA40009A4:
673
bnezl $k0, .LA40009B8
674
move $a0, $t6
675
b .LA4000A30
676
move $v0, $zero
677
move $a0, $t6
678
.LA40009B8:
679
jal func_A4000A40
680
li $a1, 1
681
jal func_A4000AD0
682
addiu $a0, $sp, 0x27
683
jal func_A4000AD0
684
addiu $a0, $sp, 0x27
685
lbu $k0, 0x27($sp)
686
li $k1, 800
687
lw $a0, 0x20($sp)
688
multu $k0, $k1
689
mflo $t0
690
subu $k0, $t0, $a0
691
bgezl $k0, .LA40009F8
692
slt $k1, $k0, $t5
693
subu $k0, $a0, $t0
694
slt $k1, $k0, $t5
695
.LA40009F8:
696
beql $k1, $zero, .LA4000A0C
697
lw $a0, 0x20($sp)
698
move $t5, $k0
699
move $t2, $t6
700
lw $a0, 0x20($sp)
701
.LA4000A0C:
702
slt $k1, $t0, $a0
703
beql $k1, $zero, .LA4000A2C
704
addu $v0, $t2, $t6
705
addiu $t6, $t6, 1
706
slti $k1, $t6, 0x41
707
bnezl $k1, .LA40009A4
708
slti $k0, $t6, 0x40
709
addu $v0, $t2, $t6
710
.LA4000A2C:
711
srl $v0, $v0, 1
712
.LA4000A30:
713
lw $ra, 0x1c($sp)
714
addiu $sp, $sp, 0x28
715
jr $ra
716
nop
717
718
func_A4000A40:
719
addiu $sp, $sp, -0x28
720
andi $a0, $a0, 0xff
721
li $k1, 1
722
xori $a0, $a0, 0x3f
723
sw $ra, 0x1c($sp)
724
bne $a1, $k1, .LA4000A64
725
lui $t7, 0x4600
726
lui $k0, 0x8000
727
or $t7, $t7, $k0
728
.LA4000A64:
729
andi $k0, $a0, 1
730
sll $k0, $k0, 6
731
or $t7, $t7, $k0
732
andi $k0, $a0, 2
733
sll $k0, $k0, 0xd
734
or $t7, $t7, $k0
735
andi $k0, $a0, 4
736
sll $k0, $k0, 0x14
737
or $t7, $t7, $k0
738
andi $k0, $a0, 8
739
sll $k0, $k0, 4
740
or $t7, $t7, $k0
741
andi $k0, $a0, 0x10
742
sll $k0, $k0, 0xb
743
or $t7, $t7, $k0
744
andi $k0, $a0, 0x20
745
sll $k0, $k0, 0x12
746
or $t7, $t7, $k0
747
li $k1, 1
748
bne $a1, $k1, .LA4000AC0
749
sw $t7, ($s5)
750
lui $k0, %hi(MI_MODE_REG)
751
sw $zero, %lo(MI_MODE_REG)($k0)
752
.LA4000AC0:
753
lw $ra, 0x1c($sp)
754
addiu $sp, $sp, 0x28
755
jr $ra
756
nop
757
758
func_A4000AD0:
759
addiu $sp, $sp, -0x28
760
sw $ra, 0x1c($sp)
761
li $k0, 0x2000
762
lui $k1, %hi(MI_MODE_REG)
763
sw $k0, %lo(MI_MODE_REG)($k1)
764
move $fp, $zero
765
lw $fp, ($s5)
766
li $k0, 0x1000
767
sw $k0, %lo(MI_MODE_REG)($k1)
768
li $k1, 0x40
769
and $k1, $k1, $fp
770
srl $k1, $k1, 6
771
move $k0, $zero
772
or $k0, $k0, $k1
773
li $k1, 0x4000
774
and $k1, $k1, $fp
775
srl $k1, $k1, 0xd
776
or $k0, $k0, $k1
777
li $k1, 0x400000
778
and $k1, $k1, $fp
779
srl $k1, $k1, 0x14
780
or $k0, $k0, $k1
781
li $k1, 0x80
782
and $k1, $k1, $fp
783
srl $k1, $k1, 4
784
or $k0, $k0, $k1
785
li $k1, 0x8000
786
and $k1, $k1, $fp
787
srl $k1, $k1, 0xb
788
or $k0, $k0, $k1
789
li $k1, 0x800000
790
and $k1, $k1, $fp
791
srl $k1, $k1, 0x12
792
or $k0, $k0, $k1
793
sb $k0, ($a0)
794
lw $ra, 0x1c($sp)
795
addiu $sp, $sp, 0x28
796
jr $ra
797
nop
798
nop
799
800
// 0xA4000B70-0xA4000FFF: IPL3 Font
801
glabel ipl3_font
802
.incbin "textures/ipl3_raw/ipl3_font_00.ia1"
803
.incbin "textures/ipl3_raw/ipl3_font_01.ia1"
804
.incbin "textures/ipl3_raw/ipl3_font_02.ia1"
805
.incbin "textures/ipl3_raw/ipl3_font_03.ia1"
806
.incbin "textures/ipl3_raw/ipl3_font_04.ia1"
807
.incbin "textures/ipl3_raw/ipl3_font_05.ia1"
808
.incbin "textures/ipl3_raw/ipl3_font_06.ia1"
809
.incbin "textures/ipl3_raw/ipl3_font_07.ia1"
810
.incbin "textures/ipl3_raw/ipl3_font_08.ia1"
811
.incbin "textures/ipl3_raw/ipl3_font_09.ia1"
812
.incbin "textures/ipl3_raw/ipl3_font_10.ia1"
813
.incbin "textures/ipl3_raw/ipl3_font_11.ia1"
814
.incbin "textures/ipl3_raw/ipl3_font_12.ia1"
815
.incbin "textures/ipl3_raw/ipl3_font_13.ia1"
816
.incbin "textures/ipl3_raw/ipl3_font_14.ia1"
817
.incbin "textures/ipl3_raw/ipl3_font_15.ia1"
818
.incbin "textures/ipl3_raw/ipl3_font_16.ia1"
819
.incbin "textures/ipl3_raw/ipl3_font_17.ia1"
820
.incbin "textures/ipl3_raw/ipl3_font_18.ia1"
821
.incbin "textures/ipl3_raw/ipl3_font_19.ia1"
822
.incbin "textures/ipl3_raw/ipl3_font_20.ia1"
823
.incbin "textures/ipl3_raw/ipl3_font_21.ia1"
824
.incbin "textures/ipl3_raw/ipl3_font_22.ia1"
825
.incbin "textures/ipl3_raw/ipl3_font_23.ia1"
826
.incbin "textures/ipl3_raw/ipl3_font_24.ia1"
827
.incbin "textures/ipl3_raw/ipl3_font_25.ia1"
828
.incbin "textures/ipl3_raw/ipl3_font_26.ia1"
829
.incbin "textures/ipl3_raw/ipl3_font_27.ia1"
830
.incbin "textures/ipl3_raw/ipl3_font_28.ia1"
831
.incbin "textures/ipl3_raw/ipl3_font_29.ia1"
832
.incbin "textures/ipl3_raw/ipl3_font_30.ia1"
833
.incbin "textures/ipl3_raw/ipl3_font_31.ia1"
834
.incbin "textures/ipl3_raw/ipl3_font_32.ia1"
835
.incbin "textures/ipl3_raw/ipl3_font_33.ia1"
836
.incbin "textures/ipl3_raw/ipl3_font_34.ia1"
837
.incbin "textures/ipl3_raw/ipl3_font_35.ia1"
838
.incbin "textures/ipl3_raw/ipl3_font_36.ia1"
839
.incbin "textures/ipl3_raw/ipl3_font_37.ia1"
840
.incbin "textures/ipl3_raw/ipl3_font_38.ia1"
841
.incbin "textures/ipl3_raw/ipl3_font_39.ia1"
842
.incbin "textures/ipl3_raw/ipl3_font_40.ia1"
843
.incbin "textures/ipl3_raw/ipl3_font_41.ia1"
844
.incbin "textures/ipl3_raw/ipl3_font_42.ia1"
845
.incbin "textures/ipl3_raw/ipl3_font_43.ia1"
846
.incbin "textures/ipl3_raw/ipl3_font_44.ia1"
847
.incbin "textures/ipl3_raw/ipl3_font_45.ia1"
848
.incbin "textures/ipl3_raw/ipl3_font_46.ia1"
849
.incbin "textures/ipl3_raw/ipl3_font_47.ia1"
850
.incbin "textures/ipl3_raw/ipl3_font_48.ia1"
851
.incbin "textures/ipl3_raw/ipl3_font_49.ia1"
852
.fill 0x12
853
854