accelerator_test.ds 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. ; Test for the DSP accelerator, in particular to check its masking behaviour.
  2. ; See https://github.com/dolphin-emu/dolphin/pull/5997
  3. incdir "tests"
  4. include "dsp_base.inc"
  5. ; Writes the passed format, start and end addresses to the accelerator registers,
  6. ; then reads them back to registers.
  7. ; The current address is initialised to the start.
  8. ; Parameters:
  9. ; AC0.H: sample format
  10. ; AC0.M/L: start address
  11. ; AC1.M/L: end address
  12. test_accelerator_addrs_ex:
  13. ; Set the sample format
  14. sr @0xffd1, $AC0.H
  15. ; Set the accelerator start and current address.
  16. srs @ACSAH, $AC0.M
  17. srs @ACCAH, $AC0.M
  18. srs @ACSAL, $AC0.L
  19. srs @ACCAL, $AC0.L
  20. ; Set the accelerator end address.
  21. srs @ACEAH, $AC1.M
  22. srs @ACEAL, $AC1.L
  23. ; Move the values back to registers that can be printed by dspspy.
  24. ; AC0 -> start, AC1 -> end, AX0 -> current
  25. lri $AC0.H, #0
  26. lrs $AC0.M, @ACSAH
  27. lrs $AC0.L, @ACSAL
  28. lri $AC1.H, #0
  29. lrs $AC1.M, @ACEAH
  30. lrs $AC1.L, @ACEAL
  31. lrs $AX0.H, @ACCAH
  32. lrs $AX0.L, @ACCAL
  33. ; Make the accelerator read memory
  34. lrs $AX1.H, @ARAM
  35. lrs $AX1.H, @ARAM
  36. ; AX1 -> new current position after read
  37. lrs $AX1.H, @ACCAH
  38. lrs $AX1.L, @ACCAL
  39. call send_back
  40. ret
  41. ; Same as test_accelerator_addrs_ex, but with the end address set to start + 0x1000.
  42. test_accelerator_addrs:
  43. lri $AC1.H, #0
  44. lri $AC1.M, #0
  45. lri $AC1.L, #0x1000
  46. add $ACC1, $ACC0
  47. jmp test_accelerator_addrs_ex
  48. test_main:
  49. ; Test 1
  50. lri $AC0.H, #0x19 ; 8-bit PCM
  51. lri $AC0.M, #0x0000 ; start
  52. lri $AC0.L, #0x1000 ; start
  53. call test_accelerator_addrs
  54. ; Test 2
  55. lri $AC0.H, #0xa ; 16-bit PCM
  56. lri $AC0.M, #0x0000 ; start
  57. lri $AC0.L, #0x1000 ; start
  58. call test_accelerator_addrs
  59. ; Test 3
  60. lri $AC0.H, #0xa ; 16-bit PCM
  61. lri $AC0.M, #0x1000 ; start
  62. lri $AC0.L, #0x0000 ; start
  63. call test_accelerator_addrs
  64. ; Test 4
  65. lri $AC0.H, #0xa ; 16-bit PCM
  66. lri $AC0.M, #0x2000 ; start
  67. lri $AC0.L, #0x0000 ; start
  68. call test_accelerator_addrs
  69. ; Test 5
  70. lri $AC0.H, #0xa ; 16-bit PCM
  71. lri $AC0.M, #0x3000 ; start
  72. lri $AC0.L, #0x0000 ; start
  73. call test_accelerator_addrs
  74. ; Test 6
  75. lri $AC0.H, #0xa ; 16-bit PCM
  76. lri $AC0.M, #0x3fff ; start
  77. lri $AC0.L, #0xffff ; start
  78. call test_accelerator_addrs
  79. ; Test 7
  80. lri $AC0.H, #0xa ; 16-bit PCM
  81. lri $AC0.M, #0x4000 ; start
  82. lri $AC0.L, #0x0000 ; start
  83. call test_accelerator_addrs
  84. ; Test 8
  85. lri $AC0.H, #0xa ; 16-bit PCM
  86. lri $AC0.M, #0x5000 ; start
  87. lri $AC0.L, #0x0000 ; start
  88. call test_accelerator_addrs
  89. ; Test 9
  90. lri $AC0.H, #0xa ; 16-bit PCM
  91. lri $AC0.M, #0x6000 ; start
  92. lri $AC0.L, #0x0000 ; start
  93. call test_accelerator_addrs
  94. ; Test 10
  95. lri $AC0.H, #0xa ; 16-bit PCM
  96. lri $AC0.M, #0x7000 ; start
  97. lri $AC0.L, #0x0000 ; start
  98. call test_accelerator_addrs
  99. ; Test 11
  100. lri $AC0.H, #0xa ; 16-bit PCM
  101. lri $AC0.M, #0x7fff ; start
  102. lri $AC0.L, #0xffff ; start
  103. call test_accelerator_addrs
  104. ; Test 12
  105. lri $AC0.H, #0xa ; 16-bit PCM
  106. lri $AC0.M, #0x8000 ; start
  107. lri $AC0.L, #0x0000 ; start
  108. call test_accelerator_addrs
  109. ; Test 13
  110. lri $AC0.H, #0xa ; 16-bit PCM
  111. lri $AC0.M, #0x9000 ; start
  112. lri $AC0.L, #0x0000 ; start
  113. call test_accelerator_addrs
  114. ; Test 14
  115. lri $AC0.H, #0xa ; 16-bit PCM
  116. lri $AC0.M, #0xc000 ; start
  117. lri $AC0.L, #0x1000 ; start
  118. call test_accelerator_addrs
  119. ; Test 15
  120. lri $AC0.H, #0xa ; 16-bit PCM
  121. lri $AC0.M, #0xd000 ; start
  122. lri $AC0.L, #0x1000 ; start
  123. call test_accelerator_addrs
  124. ; Test 16
  125. lri $AC0.H, #0xa ; 16-bit PCM
  126. lri $AC0.M, #0xffff ; start
  127. lri $AC0.L, #0xffff ; start
  128. call test_accelerator_addrs
  129. jmp end_of_test