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
|
.set noreorder
.set noat
.include "hwregs_a.h"
.set DISP_mode, 0
.set DISP_vxpos, 4
.set DISP_vypos, 6
.set DISP_fbx, 8
.set DISP_fby, 10
.section .text
.global PutDispEnvRaw
.type PutDispEnvRaw, @function
PutDispEnvRaw:
addiu $sp, -8
sw $ra, 0($sp)
sw $s0, 4($sp)
lui $s0, IOBASE
lh $at, DISP_vxpos($a0) # Set horizontal display range
li $v0, 608
add $v0, $at
li $v1, 3168
add $v1, $at
sll $v1, 12
or $v0, $v1
lui $v1, 0x600
or $v1, $v0
sw $v1, GPU_GP1($s0)
lh $at, DISP_vypos($a0) # Set vertical display range (for NTSC)
li $v1, 120 # (values differet for PAL modes)
sub $v1, $at
li $v0, 136
sub $v0, $v1
andi $v0, 0x1ff
li $v1, 120
add $v1, $at
li $at, 136
add $at, $v1
andi $at, 0x1ff
sll $at, 10
or $v0, $at
lui $at, 0x700
or $v0, $at
sw $v0, GPU_GP1($s0)
lw $v0, DISP_mode($a0) # Set video mode
lui $at, 0x800
or $v0, $at
sw $v0, GPU_GP1($s0)
lhu $v0, DISP_fbx($a0) # Set VRAM XY offset
lhu $v1, DISP_fby($a0)
andi $v0, 0x3ff
andi $v1, 0x1ff
sll $v1, 10
or $v0, $v1
lui $v1, 0x500
or $v0, $v1
sw $v0, GPU_GP1($s0)
lw $ra, 0($sp)
lw $s0, 4($sp)
jr $ra
addiu $sp, 8
|