aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/psxgpu/putdispenvraw.s
blob: 747796f898149359cefcc825f91be4b2606cab7e (plain) (blame)
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