insn_MISC.awl 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. ORGANIZATION_BLOCK OB 1
  2. BEGIN
  3. // Test: NOPs
  4. BLD 123
  5. NOP 1
  6. NOP 0
  7. // Test: "A" load/store
  8. L DW#16#12345678
  9. T AB 0
  10. T AW 2
  11. T AD 4
  12. L AB 0
  13. __ASSERT== __ACCU 1, DW#16#00000078
  14. L AW 2
  15. __ASSERT== __ACCU 1, DW#16#00005678
  16. L AD 4
  17. __ASSERT== __ACCU 1, DW#16#12345678
  18. // Test: "E" load/store
  19. L DW#16#12345678
  20. T EB 0
  21. T EW 2
  22. T ED 4
  23. L EB 0
  24. __ASSERT== __ACCU 1, DW#16#00000078
  25. L EW 2
  26. __ASSERT== __ACCU 1, DW#16#00005678
  27. L ED 4
  28. __ASSERT== __ACCU 1, DW#16#12345678
  29. // Test: Direct peripheral read
  30. // Note: This test only succeeds on dummy hardware.
  31. L DW#16#87654321
  32. T ED 10
  33. L PEB 10
  34. __ASSERT== __ACCU 1, DW#16#00000087
  35. L PEW 10
  36. __ASSERT== __ACCU 1, DW#16#00008765
  37. L PED 10
  38. __ASSERT== __ACCU 1, DW#16#87654321
  39. // Test; Direct peripheral write
  40. // Note: This test only succeeds on dummy hardware.
  41. L 0
  42. T AD 10
  43. L DW#16#87654321
  44. T PAB 10
  45. L AD 10
  46. __ASSERT== __ACCU 1, DW#16#21000000
  47. L 0
  48. T AD 10
  49. L DW#16#87654321
  50. T PAW 10
  51. L AD 10
  52. __ASSERT== __ACCU 1, DW#16#43210000
  53. L 0
  54. T AD 10
  55. L DW#16#87654321
  56. T PAD 10
  57. L AD 10
  58. __ASSERT== __ACCU 1, DW#16#87654321
  59. // Test: TAK
  60. L DW#16#01234567
  61. L DW#16#89ABCDEF
  62. __ASSERT== __ACCU 1, DW#16#89ABCDEF
  63. __ASSERT== __ACCU 2, DW#16#01234567
  64. TAK
  65. __ASSERT== __ACCU 1, DW#16#01234567
  66. __ASSERT== __ACCU 2, DW#16#89ABCDEF
  67. // Test: PUSH
  68. L DW#16#01234567
  69. L DW#16#89ABCDEF
  70. __ASSERT== __ACCU 1, DW#16#89ABCDEF
  71. __ASSERT== __ACCU 2, DW#16#01234567
  72. PUSH
  73. __ASSERT== __ACCU 1, DW#16#89ABCDEF
  74. __ASSERT== __ACCU 2, DW#16#89ABCDEF
  75. // Test: POP
  76. L DW#16#01234567
  77. L DW#16#89ABCDEF
  78. __ASSERT== __ACCU 1, DW#16#89ABCDEF
  79. __ASSERT== __ACCU 2, DW#16#01234567
  80. POP
  81. __ASSERT== __ACCU 1, DW#16#01234567
  82. __ASSERT== __ACCU 2, DW#16#01234567
  83. // Test: STW write
  84. __STWRST
  85. L W#16#FFFF
  86. T STW
  87. __ASSERT== __STW 0, 1
  88. __ASSERT== __STW 1, 1
  89. __ASSERT== __STW 2, 1
  90. __ASSERT== __STW 3, 1
  91. __ASSERT== __STW 4, 1
  92. __ASSERT== __STW 5, 1
  93. __ASSERT== __STW 6, 1
  94. __ASSERT== __STW 7, 1
  95. __ASSERT== __STW 8, 1
  96. L 0
  97. T STW
  98. __ASSERT== __STW 0, 0
  99. __ASSERT== __STW 1, 0
  100. __ASSERT== __STW 2, 0
  101. __ASSERT== __STW 3, 0
  102. __ASSERT== __STW 4, 0
  103. __ASSERT== __STW 5, 0
  104. __ASSERT== __STW 6, 0
  105. __ASSERT== __STW 7, 0
  106. __ASSERT== __STW 8, 0
  107. L W#16#AAAA
  108. T STW
  109. __ASSERT== __STW 0, 0
  110. __ASSERT== __STW 1, 1
  111. __ASSERT== __STW 2, 0
  112. __ASSERT== __STW 3, 1
  113. __ASSERT== __STW 4, 0
  114. __ASSERT== __STW 5, 1
  115. __ASSERT== __STW 6, 0
  116. __ASSERT== __STW 7, 1
  117. __ASSERT== __STW 8, 0
  118. L W#16#5555
  119. T STW
  120. __ASSERT== __STW 0, 1
  121. __ASSERT== __STW 1, 0
  122. __ASSERT== __STW 2, 1
  123. __ASSERT== __STW 3, 0
  124. __ASSERT== __STW 4, 1
  125. __ASSERT== __STW 5, 0
  126. __ASSERT== __STW 6, 1
  127. __ASSERT== __STW 7, 0
  128. __ASSERT== __STW 8, 1
  129. // Test B#(...) immediate
  130. L B#(66, 99)
  131. __ASSERT== __ACCU 1, DW#16#00004263
  132. L B#(66, 99, 88, 55)
  133. __ASSERT== __ACCU 1, DW#16#42635837
  134. CALL FB 1, DB 1 (
  135. IN_CHAR := 'x',
  136. OUT_CHAR := MB 0,
  137. )
  138. L MB 0
  139. __ASSERT== __ACCU 1, DW#16#00000044
  140. CALL SFC 46 // STOP CPU
  141. END_ORGANIZATION_BLOCK
  142. FUNCTION_BLOCK FB 1 : VOID
  143. VAR_INPUT
  144. IN_CHAR : CHAR;
  145. END_VAR
  146. VAR_OUTPUT
  147. OUT_CHAR : CHAR;
  148. END_VAR
  149. BEGIN
  150. // Check parameters
  151. L #IN_CHAR
  152. __ASSERT== __ACCU 1, DW#16#00000078
  153. // Test CHAR immediate
  154. L 'ABCD'
  155. __ASSERT== __ACCU 1, DW#16#41424344
  156. L 'ABC'
  157. __ASSERT== __ACCU 1, DW#16#00414243
  158. L 'AB'
  159. __ASSERT== __ACCU 1, DW#16#00004142
  160. L 'A'
  161. __ASSERT== __ACCU 1, DW#16#00000041
  162. L ''
  163. __ASSERT== __ACCU 1, DW#16#00000000
  164. // Output parameter
  165. L 'ABCD'
  166. T #OUT_CHAR
  167. END_FUNCTION_BLOCK
  168. DATA_BLOCK DB 1
  169. FB 1
  170. BEGIN
  171. IN_CHAR := ' ';
  172. OUT_CHAR := ' ';
  173. END_DATA_BLOCK