summaryrefslogtreecommitdiff
path: root/Source/DSPSpy/tests/accelerator_raw_test.ds
blob: 07acbcb38b837d3f363fd9b45c455d885c9171d1 (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
incdir  "tests"
include "dsp_base.inc"

; To use: set up a buffer in main_spy,
; then modify the start, current, and ending addresses
; and verify things look correct
loop_read_test:
  ; Set the sample format
  sr @FORMAT, $AC0.H

  ; Test parameters
  lri $AC0.M, #0x0000 ; start
  lri $AC0.L, #0x0000 ; start
  lri $AC1.M, #0x0000 ; end
  lri $AC1.L, #0x0011 ; end

  ; pred scale, coefs, etc do not matter for raw

  ; Set the starting and current address
  srs @ACSAH, $AC0.M
  srs @ACCAH, $AC0.M
  srs @ACSAL, $AC0.L
  srs @ACCAL, $AC0.L
  ; Set the ending address
  srs @ACEAH, $AC1.M
  srs @ACEAL, $AC1.L

  call load_hw_reg_to_regs
  call send_back ; check the accelerator regs before a read

  bloopi #4, end_of_read_loop
    lr $IX3, @ACDRAW ; Raw reads
    call load_hw_reg_to_regs
    call send_back ; after a read
    nop
end_of_read_loop:
    nop
    ret

loop_write_test:
  ; Set the sample format
  sr @FORMAT, $AC0.H

  ; Test parameters
  lri $AC0.M, #0x0000 ; start
  lri $AC0.L, #0x0000 ; start
  lri $AC1.M, #0x0000 ; end
  lri $AC1.L, #0x0011 ; end

  ; pred scale, coefs, etc do not matter for raw

  ; Set the starting and current address
  srs @ACSAH, $AC0.M
  srs @ACCAH, $AC0.M
  srs @ACSAL, $AC0.L
  srs @ACCAL, $AC0.L
  ; Set the ending address
  srs @ACEAH, $AC1.M
  srs @ACEAL, $AC1.L

  call load_hw_reg_to_regs
  call send_back ; check the accelerator regs before a write

  bloopi #4, end_of_write_loop
    sr @ACDRAW, $IX3 ; Raw writes
    call load_hw_reg_to_regs
    call send_back ; after a write
    nop
end_of_write_loop:
    nop
    ret

test_main:
lri $AC0.H, #0x00 ; 4-bit
call loop_read_test
lri $AC0.H, #0x01 ; 8-bit
call loop_read_test
lri $AC0.H, #0x02 ; 16-bit
call loop_read_test
lri $AC0.H, #0x00 ; "4-bit", but all writes are 16-bits
call loop_write_test
lri $AC0.H, #0x01 ; "8-bit", but all writes are 16-bits
call loop_write_test
lri $AC0.H, #0x02 ; 16-bit
call loop_write_test
jmp end_of_test

load_hw_reg_to_regs:
  lr $AR0, @FORMAT
  lr $AR1, @0xffd2 ; unknown
  lr $AR2, @PRED_SCALE
  lr $AR3, @YN1
  lr $IX0, @YN2
  lr $IX1, @ACIN

  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
  lrs $AX1.H, @ACCAH
  lrs $AX1.L, @ACCAL

  lrs $AX1.H, @ACCAH
  lrs $AX1.L, @ACCAL

  ret