summaryrefslogtreecommitdiff
path: root/Source/DSPSpy/tests/accelerator_test.ds
blob: f431a3108d114adb472a64b72d0d3184e5b359e2 (plain)
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