cond_test.ds 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. incdir "tests"
  2. include "dsp_base.inc"
  3. test_main:
  4. CLR $acc0
  5. CLR $acc1
  6. CALL test_cond
  7. ; 1. ar0: 9969. ac0.h: 0000. sr: 2224
  8. LRI $ac0.h, #0x0050
  9. CALL test_cond
  10. ; 2. ar0: 9969. ac0.h: 0050. sr: 2224. LRI doesn't change sr.
  11. TST $acc0
  12. CALL test_cond
  13. ; 3. ar0: 9655. ac0.h: 0050. sr: 2230
  14. LRI $ac1.h, #0x0050
  15. ADD $acc0, $acc1 ; Causes acc0 to overflow, and thus also become negative
  16. CALL test_cond
  17. ; 4. ar0: d655. ac0.h: ffa0. sr: 22ba
  18. ADD $acc0, $acc1 ; acc0 is now negative, but not overflowed
  19. CALL test_cond
  20. ; 5. ar0: 965a. ac0.h: fff0. sr: 22b8
  21. ADD $acc0, $acc1 ; Triggers carry
  22. CALL test_cond
  23. ; 6. ar0: 9695. ac0.h: 0040. sr: 22b1
  24. CLR $acc1
  25. ADD $acc0, $acc1 ; Adding 0 should do nothing
  26. CALL test_cond
  27. ; 7. ar0: 9655. ac0.h: 0040. sr: 22b0
  28. SUB $acc0, $acc1 ; Subtracting 0 sets the carry flag
  29. CALL test_cond
  30. ; 8. ar0: 9695. ac0.h: 0040. sr: 22b1
  31. LRI $ac1.h, #0x0050
  32. SUB $acc0, $acc1 ; No carry
  33. CALL test_cond
  34. ; 9. ar0: 965a. ac0.h: fff0. sr: 22b8
  35. SUB $acc0, $acc1 ; Carry
  36. CALL test_cond
  37. ; 10. ar0: 969a. ac0.h: ffa0. sr: 22b9
  38. SUB $acc0, $acc1 ; Carry and overflow
  39. CALL test_cond
  40. ; 11. ar0: d69a. ac0.h: 0050. sr: 22b3
  41. SUB $acc0, $acc1 ; Carry
  42. CALL test_cond
  43. ; 12. ar0: 99a9. ac0.h: 0000. sr: 22a5
  44. LRI $ac1.h, #0xffb0 ; -0x50
  45. SUB $acc0, $acc1 ; No carry or overflow
  46. CALL test_cond
  47. ; 13. ar0: 9655. ac0.h: 0050. sr: 22b0
  48. SUB $acc0, $acc1 ; Overflow, no carry
  49. CALL test_cond
  50. ; 14. ar0: d655. ac0.h: ffa0. sr: 22ba
  51. SUB $acc0, $acc1 ; No carry or overflow
  52. CALL test_cond
  53. ; 15. ar0: 965a. ac0.h: fff0. sr: 22b8
  54. SUB $acc0, $acc1 ; Carry
  55. CALL test_cond
  56. ; 16. ar0: 9695. ac0.h: 0040. sr: 22b1
  57. LRI $ac1.h, #0xff80
  58. SUB $acc0, $acc1 ; Overflow, no carry
  59. CALL test_cond
  60. ; 17. ar0: d655. ac0.h: ffc0. sr: 22ba
  61. ADD $acc0, $acc1 ; Overflow and carry
  62. CALL test_cond
  63. ; 18. ar0: d69a. ac0.h: 0040. sr: 22b3
  64. LRI $ac1.h, #0xffb0
  65. ADD $acc0, $acc1 ; No overflow or carry
  66. CALL test_cond
  67. ; 19. ar0: 965a. ac0.h: fff0. sr: 22b8
  68. ADD $acc0, $acc1 ; Carry
  69. CALL test_cond
  70. ; 20. ar0: 969a. ac0.h: ffa0. sr: 22b9
  71. ADD $acc0, $acc1 ; Overflow and carry
  72. CALL test_cond
  73. ; 21. ar0: d69a. ac0.h: 0050. sr: 22b3
  74. ADD $acc0, $acc1 ; Carry
  75. CALL test_cond
  76. ; 22. ar0: 99a9. ac0.h: 0000. sr: 22a5
  77. CLR $acc1
  78. CMP ; Compare 0 with 0. Results in 0 and carry.
  79. CALL test_cond
  80. ; 23. ar0: 99a9. sr: 22a5
  81. ; Logic zero tests
  82. LRIS $ac0.m, #0x01
  83. ANDF $ac0.m, #0x0000
  84. CALL test_cond
  85. ; 24. ar0: a9a9. sr: 22e5
  86. ANDCF $ac0.m, #0x0000
  87. CALL test_cond
  88. ; 25. ar0: a9a9. sr: 22e5
  89. ANDF $ac0.m, #0x0001
  90. CALL test_cond
  91. ; 26. ar0: 99a9. sr: 22a5
  92. ANDCF $ac0.m, #0x0001
  93. CALL test_cond
  94. ; 27. ar0: a9a9. sr: 22e5
  95. ANDF $ac0.m, #0x0002
  96. CALL test_cond
  97. ; 28. ar0: a9a9. sr: 22e5
  98. ANDCF $ac0.m, #0x0002
  99. CALL test_cond
  100. ; 29. ar0: 99a9. sr: 22a5
  101. ANDF $ac0.m, #0x0003
  102. CALL test_cond
  103. ; 30. ar0: 99a9. sr: 22a5
  104. ANDCF $ac0.m, #0x0003
  105. CALL test_cond
  106. ; 31. ar0: 99a9. sr: 22a5
  107. CLR $acc0
  108. NEG $acc0 ; 0 - 0, marked as carry
  109. CALL test_cond
  110. ; 32. ar0: 99a9. ac0.h: 0000. sr: 22a5
  111. LRI $ac0.h, #0x0010
  112. NEG $acc0
  113. CALL test_cond
  114. ; 33. ar0: 965a. ac0.h: fff0. sr: 22b8
  115. NEG $acc0
  116. CALL test_cond
  117. ; 34. ar0: 9655. ac0.h: 0010. sr: 22b0
  118. LRI $ac0.h, #0xff80
  119. NEG $acc0 ; -INT_MIN is INT_MIN. This generates an overflow.
  120. CALL test_cond
  121. ; 35. ar0: d655. ac0.h: ff80. sr: 22ba
  122. CMP ; Compare INT_MIN with 0. Carry but no overflow.
  123. CALL test_cond
  124. ; 36. ar0: 969a. ac0.h: ff80. sr: 22b9
  125. MOV $acc1, $acc0
  126. CALL test_cond
  127. ; 37. ar0: 965a. ac0.h: ff80. sr: 22b8
  128. TST $acc1
  129. CALL test_cond
  130. ; 38. ar0: 965a. ac0.h: ff80. sr: 22b8
  131. CLR $acc0
  132. CMP ; Compare 0 with INT_MIN. Overflow but no carry.
  133. CALL test_cond
  134. ; 39. ar0: d655. ac0.h: 0000. sr: 22ba
  135. ; We're done, DO NOT DELETE THIS LINE
  136. JMP end_of_test
  137. ; Test all conditionals, setting bits in $AR0 based on it.
  138. ; $AR0 is used because ADDARN does not update flags.
  139. test_cond:
  140. LRI $AR0, #0x0000
  141. LRI $IX0, #0x0001
  142. IFGE
  143. ADDARN $AR0, $IX0
  144. LRI $IX0, #0x0002
  145. IFL
  146. ADDARN $AR0, $IX0
  147. LRI $IX0, #0x0004
  148. IFG
  149. ADDARN $AR0, $IX0
  150. LRI $IX0, #0x0008
  151. IFLE
  152. ADDARN $AR0, $IX0
  153. LRI $IX0, #0x0010
  154. IFNZ
  155. ADDARN $AR0, $IX0
  156. LRI $IX0, #0x0020
  157. IFZ
  158. ADDARN $AR0, $IX0
  159. LRI $IX0, #0x0040
  160. IFNC
  161. ADDARN $AR0, $IX0
  162. LRI $IX0, #0x0080
  163. IFC
  164. ADDARN $AR0, $IX0
  165. LRI $IX0, #0x0100
  166. IFx8
  167. ADDARN $AR0, $IX0
  168. LRI $IX0, #0x0200
  169. IFx9
  170. ADDARN $AR0, $IX0
  171. LRI $IX0, #0x0400
  172. IFxA
  173. ADDARN $AR0, $IX0
  174. LRI $IX0, #0x0800
  175. IFxB
  176. ADDARN $AR0, $IX0
  177. LRI $IX0, #0x1000
  178. IFLNZ
  179. ADDARN $AR0, $IX0
  180. LRI $IX0, #0x2000
  181. IFLZ
  182. ADDARN $AR0, $IX0
  183. LRI $IX0, #0x4000
  184. IFO
  185. ADDARN $AR0, $IX0
  186. LRI $IX0, #0x8000
  187. IF ; Always true
  188. ADDARN $AR0, $IX0
  189. CALL send_back
  190. RET