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
|
; Test for the DSP accelerator, in particular to check its masking behaviour.
; See https://github.com/dolphin-emu/dolphin/pull/5997
incdir "tests"
include "dsp_base.inc"
; Writes the passed format, start and end addresses to the accelerator registers,
; then reads them back to registers.
; The current address is initialised to the start.
; Parameters:
; AC0.H: sample format
; AC0.M/L: start address
; AC1.M/L: end address
test_accelerator_addrs_ex:
; Set the sample format
sr @FORMAT, $AC0.H
; Set the accelerator start and current address.
srs @ACSAH, $AC0.M
srs @ACCAH, $AC0.M
srs @ACSAL, $AC0.L
srs @ACCAL, $AC0.L
; Set the accelerator end address.
srs @ACEAH, $AC1.M
srs @ACEAL, $AC1.L
; Move the values back to registers that can be printed by dspspy.
; AC0 -> start, AC1 -> end, AX0 -> current
lri $AC0.H, #0
lrs $AC0.M, @ACSAH
lrs $AC0.L, @ACSAL
lri $AC1.H, #0
lrs $AC1.M, @ACEAH
lrs $AC1.L, @ACEAL
lrs $AX0.H, @ACCAH
lrs $AX0.L, @ACCAL
; Make the accelerator read memory
lrs $AX1.H, @ACDSAMP
lrs $AX1.H, @ACDSAMP
; AX1 -> new current position after read
lrs $AX1.H, @ACCAH
lrs $AX1.L, @ACCAL
call send_back
ret
; Same as test_accelerator_addrs_ex, but with the end address set to start + 0x1000.
test_accelerator_addrs:
lri $AC1.H, #0
lri $AC1.M, #0
lri $AC1.L, #0x1000
add $ACC1, $ACC0
jmp test_accelerator_addrs_ex
test_main:
; Test 1
lri $AC0.H, #0x19 ; 8-bit PCM
lri $AC0.M, #0x0000 ; start
lri $AC0.L, #0x1000 ; start
call test_accelerator_addrs
; Test 2
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x0000 ; start
lri $AC0.L, #0x1000 ; start
call test_accelerator_addrs
; Test 3
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x1000 ; start
lri $AC0.L, #0x0000 ; start
call test_accelerator_addrs
; Test 4
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x2000 ; start
lri $AC0.L, #0x0000 ; start
call test_accelerator_addrs
; Test 5
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x3000 ; start
lri $AC0.L, #0x0000 ; start
call test_accelerator_addrs
; Test 6
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x3fff ; start
lri $AC0.L, #0xffff ; start
call test_accelerator_addrs
; Test 7
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x4000 ; start
lri $AC0.L, #0x0000 ; start
call test_accelerator_addrs
; Test 8
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x5000 ; start
lri $AC0.L, #0x0000 ; start
call test_accelerator_addrs
; Test 9
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x6000 ; start
lri $AC0.L, #0x0000 ; start
call test_accelerator_addrs
; Test 10
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x7000 ; start
lri $AC0.L, #0x0000 ; start
call test_accelerator_addrs
; Test 11
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x7fff ; start
lri $AC0.L, #0xffff ; start
call test_accelerator_addrs
; Test 12
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x8000 ; start
lri $AC0.L, #0x0000 ; start
call test_accelerator_addrs
; Test 13
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0x9000 ; start
lri $AC0.L, #0x0000 ; start
call test_accelerator_addrs
; Test 14
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0xc000 ; start
lri $AC0.L, #0x1000 ; start
call test_accelerator_addrs
; Test 15
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0xd000 ; start
lri $AC0.L, #0x1000 ; start
call test_accelerator_addrs
; Test 16
lri $AC0.H, #0xa ; 16-bit PCM
lri $AC0.M, #0xffff ; start
lri $AC0.L, #0xffff ; start
call test_accelerator_addrs
jmp end_of_test
|