aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/psxgpu/drawsync.s
blob: 2e29381a2ad981e45c2a3f5b4f667f0a65e9e504 (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
.set noreorder

.include "hwregs_a.h"

.section .text


.global DrawSync
.type DrawSync, @function
DrawSync:

	bnez	$a0, .Lgetwords
	lui		$a0, IOBASE

	addiu	$sp, -4
	sw		$ra, 0($sp)

	jal		ReadGPUstat			# Check if DMA enabled
	nop
	srl		$v0, 29
	andi	$v0, 0x3
	
	beqz	$v0, .Lsimple_wait
	nop
	
.Ldma_wait:
	lw		$v0, D2_CHCR($a0)
	nop
	srl		$v0, 24
	andi	$v0, 0x1
	bnez	$v0, .Ldma_wait
	nop

.Lgpu_wait:
	jal		ReadGPUstat
	nop
	srl		$v0, 26
	andi	$v0, 0x5
	bne		$v0, 5, .Lgpu_wait
	nop
	
	b		.Lexit
	nop
	
.Lsimple_wait:					# Wait for GPU to be ready for next DMA
	jal		ReadGPUstat
	nop
	srl		$v0, 28
	andi	$v0, 0x1
	beqz	$v0, .Lsimple_wait
	nop

.Lexit:

	lw		$ra, 0($sp)
	addiu	$sp, 4
	jr		$ra
	nop
	
.Lgetwords:

	lw		$v0, D2_BCR($a0)
	nop

	jr		$ra
	srl		$v0, 16