Advertisement
Artentus

16 Bit ISA

Sep 7th, 2021 (edited)
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.46 KB | None | 0 0
  1. ########## 16 bit ISA ##########
  2.  
  3. Registers:
  4. PC (16 bit)
  5. SP (16 bit)
  6. R0-R15 (16 bit)
  7. UI (12 bit)
  8.  
  9. Register values on reset:
  10. PC: 0x0000
  11. SP: 0x0000
  12. R0-R15: Undefined
  13.  
  14. Flags:
  15. Carry (C)
  16. Zero (Z)
  17. Sign (S)
  18. Overflow (O)
  19.  
  20. Flag values are undefined on reset
  21.  
  22. Memory map:
  23. 0x0000 - 0x0FFF: ROM
  24. 0x1000 - 0x3FFF: RAM
  25. 0x4000 - 0x7FFF: Bank
  26. 0x8000 - 0xEFFF: RAM
  27. 0xF000 - 0xF0FF: IO
  28. 0xF100 - 0xFFFF: Stack
  29.  
  30. Instructions:
  31. Format is <inst> <target>,<source>
  32. - means the bit does not matter
  33. Any permutation not covered is a NOP
  34.  
  35. Nop 0000_0000_0000_0000
  36. Brk 0000_0000_0000_0001
  37.  
  38. Jp.c r 0000_0001_0001_rrrr ; if C then pc = r
  39. Jp.z r 0000_0001_0010_rrrr ; if Z then pc = r
  40. Jp.s r 0000_0001_0011_rrrr ; if S then pc = r
  41. Jp.o r 0000_0001_0100_rrrr ; if O then pc = r
  42. Jp.nc r 0000_0001_0101_rrrr ; if !C then pc = r
  43. Jp.nz r 0000_0001_0110_rrrr ; if !Z then pc = r
  44. Jp.ns r 0000_0001_0111_rrrr ; if !S then pc = r
  45. Jp.no r 0000_0001_1000_rrrr ; if !O then pc = r
  46. Jp.u.le r 0000_0001_1001_rrrr ; if !C || Z then pc = r
  47. Jp.u.g r 0000_0001_1010_rrrr ; if C && !Z then pc = r
  48. Jp.s.l r 0000_0001_1011_rrrr ; if S != O then pc = r
  49. Jp.s.ge r 0000_0001_1100_rrrr ; if S == O then pc = r
  50. Jp.s.le r 0000_0001_1101_rrrr ; if Z || (S != O) then pc = r
  51. Jp.s.g r 0000_0001_1110_rrrr ; if !Z && (S == O) then pc = r
  52. Jmp r 0000_0001_1111_rrrr ; pc = r
  53.  
  54. Jp.c [r] 0000_0010_0001_rrrr ; if C then pc = mem[r]
  55. Jp.z [r] 0000_0010_0010_rrrr ; if Z then pc = mem[r]
  56. Jp.s [r] 0000_0010_0011_rrrr ; if S then pc = mem[r]
  57. Jp.o [r] 0000_0010_0100_rrrr ; if O then pc = mem[r]
  58. Jp.nc [r] 0000_0010_0101_rrrr ; if !C then pc = mem[r]
  59. Jp.nz [r] 0000_0010_0110_rrrr ; if !Z then pc = mem[r]
  60. Jp.ns [r] 0000_0010_0111_rrrr ; if !S then pc = mem[r]
  61. Jp.no [r] 0000_0010_1000_rrrr ; if !O then pc = mem[r]
  62. Jp.u.le [r] 0000_0010_1001_rrrr ; if !C || Z then pc = mem[r]
  63. Jp.u.g [r] 0000_0010_1010_rrrr ; if C && !Z then pc = mem[r]
  64. Jp.s.l [r] 0000_0010_1011_rrrr ; if S != O then pc = mem[r]
  65. Jp.s.ge [r] 0000_0010_1100_rrrr ; if S == O then pc = mem[r]
  66. Jp.s.le [r] 0000_0010_1101_rrrr ; if Z || (S != O) then pc = mem[r]
  67. Jp.s.g [r] 0000_0010_1110_rrrr ; if !Z && (S == O) then pc = mem[r]
  68. Jmp [r] 0000_0010_1111_rrrr ; pc = mem[r]
  69.  
  70. Jpi.c v 0000_0011_0001_vvvv ; if C then pc = (UI << 4) | v
  71. Jpi.z v 0000_0011_0010_vvvv ; if Z then pc = (UI << 4) | v
  72. Jpi.s v 0000_0011_0011_vvvv ; if S then pc = (UI << 4) | v
  73. Jpi.o v 0000_0011_0100_vvvv ; if O then pc = (UI << 4) | v
  74. Jpi.nc v 0000_0011_0101_vvvv ; if !C then pc = (UI << 4) | v
  75. Jpi.nz v 0000_0011_0110_vvvv ; if !Z then pc = (UI << 4) | v
  76. Jpi.ns v 0000_0011_0111_vvvv ; if !S then pc = (UI << 4) | v
  77. Jpi.no v 0000_0011_1000_vvvv ; if !O then pc = (UI << 4) | v
  78. Jpi.u.le v 0000_0011_1001_vvvv ; if !C || Z then pc = (UI << 4) | v
  79. Jpi.u.g v 0000_0011_1010_vvvv ; if C && !Z then pc = (UI << 4) | v
  80. Jpi.s.l v 0000_0011_1011_vvvv ; if S != O then pc = (UI << 4) | v
  81. Jpi.s.ge v 0000_0011_1100_vvvv ; if S == O then pc = (UI << 4) | v
  82. Jpi.s.le v 0000_0011_1101_vvvv ; if Z || (S != O) then pc = (UI << 4) | v
  83. Jpi.s.g v 0000_0011_1110_vvvv ; if !Z && (S == O) then pc = (UI << 4) | v
  84. Jmpi v 0000_0011_1111_vvvv ; pc = (UI << 4) | v
  85.  
  86. Jpi.c [v] 0000_0100_0001_vvvv ; if C then pc = mem[(UI << 4) | v]
  87. Jpi.z [v] 0000_0100_0010_vvvv ; if Z then pc = mem[(UI << 4) | v]
  88. Jpi.s [v] 0000_0100_0011_vvvv ; if S then pc = mem[(UI << 4) | v]
  89. Jpi.o [v] 0000_0100_0100_vvvv ; if O then pc = mem[(UI << 4) | v]
  90. Jpi.nc [v] 0000_0100_0101_vvvv ; if !C then pc = mem[(UI << 4) | v]
  91. Jpi.nz [v] 0000_0100_0110_vvvv ; if !Z then pc = mem[(UI << 4) | v]
  92. Jpi.ns [v] 0000_0100_0111_vvvv ; if !S then pc = mem[(UI << 4) | v]
  93. Jpi.no [v] 0000_0100_1000_vvvv ; if !O then pc = mem[(UI << 4) | v]
  94. Jpi.u.le [v] 0000_0100_1001_vvvv ; if !C || Z then pc = mem[(UI << 4) | v]
  95. Jpi.u.g [v] 0000_0100_1010_vvvv ; if C && !Z then pc = mem[(UI << 4) | v]
  96. Jpi.s.l [v] 0000_0100_1011_vvvv ; if S != O then pc = mem[(UI << 4) | v]
  97. Jpi.s.ge [v] 0000_0100_1100_vvvv ; if S == O then pc = mem[(UI << 4) | v]
  98. Jpi.s.le [v] 0000_0100_1101_vvvv ; if Z || (S != O) then pc = mem[(UI << 4) | v]
  99. Jpi.s.g [v] 0000_0100_1110_vvvv ; if !Z && (S == O) then pc = mem[(UI << 4) | v]
  100. Jmpi [v] 0000_0100_1111_vvvv ; pc = mem[(UI << 4) | v]
  101.  
  102. Clc 0000_0101_---0_---- ; C = 0
  103. Sec 0000_0101_---1_---- ; C = 1
  104.  
  105. Push r 0000_0110_--00_rrrr ; mem[sp--] = r
  106. Pop r 0000_0110_--01_rrrr ; r = mem[++sp]
  107. Push [r] 0000_0110_--10_rrrr ; mem[sp--] = mem[r]
  108. Pop [r] 0000_0110_--11_rrrr ; mem[r] = mem[++sp]
  109.  
  110. Swap r 0000_0111_---0_rrrr ; (Z, S) r_l = r_h, r_h = r_l
  111. Swap [r] 0000_0111_---1_rrrr ; (Z, S) r_l = r_h, r_h = r_l
  112.  
  113. Add t,sp 0000_1000_---0_tttt ; (C, Z, S, O) t = t + sp
  114. Addc t,sp 0000_1000_---1_tttt ; (C, Z, S, O) t = t + sp + C
  115.  
  116. Addi sp,v 0000_1001_--00_vvvv ; (C, Z, S, O) sp = sp + ((UI << 4) | v)
  117. Addci sp,v 0000_1001_--01_vvvv ; (C, Z, S, O) sp = sp + ((UI << 4) | v) + C
  118. Subi sp,v 0000_1001_--10_vvvv ; (C, Z, S, O) sp = sp - ((UI << 4) | v)
  119. Subbi sp,v 0000_1001_--11_vvvv ; (C, Z, S, O) sp = sp - ((UI << 4) | v) - !C
  120.  
  121. Inc r 0000_1010_0000_rrrr ; (C, Z, S, O) r += 1
  122. Incc r 0000_1010_0001_rrrr ; (C, Z, S, O) r += C
  123. Dec r 0000_1010_0010_rrrr ; (C, Z, S, O) r -= 1
  124. Decb r 0000_1010_0011_rrrr ; (C, Z, S, O) r -= !C
  125. Inc [r] 0000_1010_0100_rrrr ; (C, Z, S, O) mem[r] += 1
  126. Incc [r] 0000_1010_0101_rrrr ; (C, Z, S, O) mem[r] += C
  127. Dec [r] 0000_1010_0110_rrrr ; (C, Z, S, O) mem[r] -= 1
  128. Decb [r] 0000_1010_0111_rrrr ; (C, Z, S, O) mem[r] -= !C
  129. Inci [v] 0000_1010_1-00_vvvv ; (C, Z, S, O) mem[(UI << 4) | v] += 1
  130. Incci [v] 0000_1010_1-01_vvvv ; (C, Z, S, O) mem[(UI << 4) | v] += C
  131. Deci [v] 0000_1010_1-10_vvvv ; (C, Z, S, O) mem[(UI << 4) | v] -= 1
  132. Decbi [v] 0000_1010_1-11_vvvv ; (C, Z, S, O) mem[(UI << 4) | v] -= !C
  133.  
  134. Mov t,s 0001_tttt_-000_ssss ; t = s
  135. Mov [t],[s] 0001_tttt_-001_ssss ; mem[t] = mem[s]
  136. Mov sp,s 0001_----_-010_ssss ; sp = s
  137. Mov t,sp 0001_tttt_-011_---- ; t = sp
  138. Ld t,[s] 0001_tttt_-100_ssss ; t = mem[s]
  139. St [t],s 0001_tttt_-101_ssss ; mem[t] = s
  140. Ld sp,[s] 0001_----_-110_ssss ; sp = mem[s]
  141. St [t],sp 0001_tttt_-111_---- ; mem[t] = sp
  142.  
  143. Ldui v 0010_vvvv_vvvv_vvvv ; UI = v
  144.  
  145. Ldi t,v 0011_tttt_--00_vvvv ; t = (UI << 4) | v
  146. Ldi t,[v] 0011_tttt_--01_vvvv ; t = mem[(UI << 4) | v]
  147. Sti [v],s 0011_ssss_--1-_vvvv ; mem[(UI << 4) | v] = s
  148.  
  149. Add t,s 0100_tttt_0000_ssss ; (C, Z, S, O) t = t + s
  150. Addc t,s 0100_tttt_0001_ssss ; (C, Z, S, O) t = t + s + C
  151. Sub t,s 0100_tttt_0010_ssss ; (C, Z, S, O) t = t - s
  152. Subb t,s 0100_tttt_0011_ssss ; (C, Z, S, O) t = t - s - !C
  153. Cmp t,s 0100_tttt_0100_ssss ; (C, Z, S, O) _ = t - s
  154. Neg t,s 0100_tttt_0101_ssss ; (C, Z, S, O) t = -s
  155. Negb t,s 0100_tttt_0110_ssss ; (C, Z, S, O) t = -s - !C
  156. And t,s 0100_tttt_0111_ssss ; (Z, S) t = t & s
  157. Bit t,s 0100_tttt_1000_ssss ; (Z, S) _ = t & s
  158. Or t,s 0100_tttt_1001_ssss ; (Z, S) t = t | s
  159. Xor t,s 0100_tttt_1010_ssss ; (Z, S) t = t ^ s
  160. Not t,s 0100_tttt_1011_ssss ; (Z, S) t = !s
  161. Shl t,s 0100_tttt_1100_ssss ; (Z, S) t = t << s
  162. Lsr t,s 0100_tttt_1101_ssss ; (Z, S) t = t >> s
  163. Asr t,s 0100_tttt_1110_ssss ; (Z, S) t = t >> s (sign bit preserved)
  164. Test s 0100_----_1111_ssss ; (Z, S) _ = r
  165.  
  166. Add t,[s] 0101_tttt_0000_ssss ; (C, Z, S, O) t = t + mem[s]
  167. Addc t,[s] 0101_tttt_0001_ssss ; (C, Z, S, O) t = t + mem[s] + C
  168. Sub t,[s] 0101_tttt_0010_ssss ; (C, Z, S, O) t = t - mem[s]
  169. Subb t,[s] 0101_tttt_0011_ssss ; (C, Z, S, O) t = t - mem[s] - !C
  170. Cmp t,[s] 0101_tttt_0100_ssss ; (C, Z, S, O) _ = t - mem[s]
  171. Neg t,[s] 0101_tttt_0101_ssss ; (C, Z, S, O) t = -mem[s]
  172. Negb t,[s] 0101_tttt_0110_ssss ; (C, Z, S, O) t = -mem[s] - !C
  173. And t,[s] 0101_tttt_0111_ssss ; (Z, S) t = t & mem[s]
  174. Bit t,[s] 0101_tttt_1000_ssss ; (Z, S) _ = t & mem[s]
  175. Or t,[s] 0101_tttt_1001_ssss ; (Z, S) t = t | mem[s]
  176. Xor t,[s] 0101_tttt_1010_ssss ; (Z, S) t = t ^ mem[s]
  177. Not t,[s] 0101_tttt_1011_ssss ; (Z, S) t = !mem[s]
  178. Shl t,[s] 0101_tttt_1100_ssss ; (Z, S) t = t << mem[s]
  179. Lsr t,[s] 0101_tttt_1101_ssss ; (Z, S) t = t >> mem[s]
  180. Asr t,[s] 0101_tttt_1110_ssss ; (Z, S) t = t >> mem[s] (sign bit preserved)
  181. Test [s] 0101_----_1111_ssss ; (Z, S) _ = mem[r]
  182.  
  183. Add [t],s 0110_tttt_0000_ssss ; (C, Z, S, O) mem[t] = mem[t] + s
  184. Addc [t],s 0110_tttt_0001_ssss ; (C, Z, S, O) mem[t] = mem[t] + s + C
  185. Sub [t],s 0110_tttt_0010_ssss ; (C, Z, S, O) mem[t] = mem[t] - s
  186. Subb [t],s 0110_tttt_0011_ssss ; (C, Z, S, O) mem[t] = mem[t] - s - !C
  187. Cmp [t],s 0110_tttt_0100_ssss ; (C, Z, S, O) _ = mem[t] - s
  188. Neg [t],s 0110_tttt_0101_ssss ; (C, Z, S, O) mem[t] = -s
  189. Negb [t],s 0110_tttt_0110_ssss ; (C, Z, S, O) mem[t] = -s - !C
  190. And [t],s 0110_tttt_0111_ssss ; (Z, S) mem[t] = mem[t] & s
  191. Bit [t],s 0110_tttt_1000_ssss ; (Z, S) _ = mem[t] & s
  192. Or [t],s 0110_tttt_1001_ssss ; (Z, S) mem[t] = mem[t] | s
  193. Xor [t],s 0110_tttt_1010_ssss ; (Z, S) mem[t] = mem[t] ^ s
  194. Not [t],s 0110_tttt_1011_ssss ; (Z, S) mem[t] = !s
  195. Shl [t],s 0110_tttt_1100_ssss ; (Z, S) mem[t] = mem[t] << s
  196. Lsr [t],s 0110_tttt_1101_ssss ; (Z, S) mem[t] = mem[t] >> s
  197. Asr [t],s 0110_tttt_1110_ssss ; (Z, S) mem[t] = mem[t] >> s (sign bit preserved)
  198.  
  199. Addi t,v 0111_tttt_0000_vvvv ; (C, Z, S, O) t = t + ((UI << 4) | v)
  200. Addci t,v 0111_tttt_0001_vvvv ; (C, Z, S, O) t = t + ((UI << 4) | v) + C
  201. Subi t,v 0111_tttt_0010_vvvv ; (C, Z, S, O) t = t - ((UI << 4) | v)
  202. Subbi t,v 0111_tttt_0011_vvvv ; (C, Z, S, O) t = t - ((UI << 4) | v) - !C
  203. Cmpi t,v 0111_tttt_0100_vvvv ; (C, Z, S, O) _ = t - ((UI << 4) | v)
  204. Negi t,v 0111_tttt_0101_vvvv ; (C, Z, S, O) t = -((UI << 4) | v)
  205. Negbi t,v 0111_tttt_0110_vvvv ; (C, Z, S, O) t = -((UI << 4) | v) - !C
  206. Andi t,v 0111_tttt_0111_vvvv ; (Z, S) t = t & ((UI << 4) | v)
  207. Biti t,v 0111_tttt_1000_vvvv ; (Z, S) _ = t & ((UI << 4) | v)
  208. Ori t,v 0111_tttt_1001_vvvv ; (Z, S) t = t | ((UI << 4) | v)
  209. Xori t,v 0111_tttt_1010_vvvv ; (Z, S) t = t ^ ((UI << 4) | v)
  210. Noti t,v 0111_tttt_1011_vvvv ; (Z, S) t = !((UI << 4) | v)
  211. Shli t,v 0111_tttt_1100_vvvv ; (Z, S) t = t << ((UI << 4) | v)
  212. Lsri t,v 0111_tttt_1101_vvvv ; (Z, S) t = t >> ((UI << 4) | v)
  213. Asri t,v 0111_tttt_1110_vvvv ; (Z, S) t = t >> ((UI << 4) | v) (sign bit preserved)
  214.  
  215. Addi [t],v 1000_tttt_0000_vvvv ; (C, Z, S, O) mem[t] = mem[t] + ((UI << 4) | v)
  216. Addci [t],v 1000_tttt_0001_vvvv ; (C, Z, S, O) mem[t] = mem[t] + ((UI << 4) | v) + C
  217. Subi [t],v 1000_tttt_0010_vvvv ; (C, Z, S, O) mem[t] = mem[t] - ((UI << 4) | v)
  218. Subbi [t],v 1000_tttt_0011_vvvv ; (C, Z, S, O) mem[t] = mem[t] - ((UI << 4) | v) - !C
  219. Cmpi [t],v 1000_tttt_0100_vvvv ; (C, Z, S, O) _ = mem[t] - ((UI << 4) | v)
  220. Negi [t],v 1000_tttt_0101_vvvv ; (C, Z, S, O) mem[t] = -((UI << 4) | v)
  221. Negbi [t],v 1000_tttt_0110_vvvv ; (C, Z, S, O) mem[t] = -((UI << 4) | v) - !C
  222. Andi [t],v 1000_tttt_0111_vvvv ; (Z, S) mem[t] = mem[t] & ((UI << 4) | v)
  223. Biti [t],v 1000_tttt_1000_vvvv ; (Z, S) _ = mem[t] & ((UI << 4) | v)
  224. Ori [t],v 1000_tttt_1001_vvvv ; (Z, S) mem[t] = mem[t] | ((UI << 4) | v)
  225. Xori [t],v 1000_tttt_1010_vvvv ; (Z, S) mem[t] = mem[t] ^ ((UI << 4) | v)
  226. Noti [t],v 1000_tttt_1011_vvvv ; (Z, S) mem[t] = !((UI << 4) | v)
  227. Shli [t],v 1000_tttt_1100_vvvv ; (Z, S) mem[t] = mem[t] << ((UI << 4) | v)
  228. Lsri [t],v 1000_tttt_1101_vvvv ; (Z, S) mem[t] = mem[t] >> ((UI << 4) | v)
  229. Asri [t],v 1000_tttt_1110_vvvv ; (Z, S) mem[t] = mem[t] >> ((UI << 4) | v) (sign bit preserved)
  230.  
  231. Addi t,[v] 1001_tttt_0000_vvvv ; (C, Z, S, O) t = t + mem[((UI << 4) | v)]
  232. Addci t,[v] 1001_tttt_0001_vvvv ; (C, Z, S, O) t = t + mem[((UI << 4) | v)] + C
  233. Subi t,[v] 1001_tttt_0010_vvvv ; (C, Z, S, O) t = t - mem[((UI << 4) | v)]
  234. Subbi t,[v] 1001_tttt_0011_vvvv ; (C, Z, S, O) t = t - mem[((UI << 4) | v)] - !C
  235. Cmpi t,[v] 1001_tttt_0100_vvvv ; (C, Z, S, O) _ = t - mem[((UI << 4) | v)]
  236. Negi t,[v] 1001_tttt_0101_vvvv ; (C, Z, S, O) t = -mem[((UI << 4) | v)]
  237. Negbi t,[v] 1001_tttt_0110_vvvv ; (C, Z, S, O) t = -mem[((UI << 4) | v)] - !C
  238. Andi t,[v] 1001_tttt_0111_vvvv ; (Z, S) t = t & mem[((UI << 4) | v)]
  239. Biti t,[v] 1001_tttt_1000_vvvv ; (Z, S) _ = t & mem[((UI << 4) | v)]
  240. Ori t,[v] 1001_tttt_1001_vvvv ; (Z, S) t = t | mem[((UI << 4) | v)]
  241. Xori t,[v] 1001_tttt_1010_vvvv ; (Z, S) t = t ^ mem[((UI << 4) | v)]
  242. Noti t,[v] 1001_tttt_1011_vvvv ; (Z, S) t = !mem[((UI << 4) | v)]
  243. Shli t,[v] 1001_tttt_1100_vvvv ; (Z, S) t = t << mem[((UI << 4) | v)]
  244. Lsri t,[v] 1001_tttt_1101_vvvv ; (Z, S) t = t >> mem[((UI << 4) | v)]
  245. Asri t,[v] 1001_tttt_1110_vvvv ; (Z, S) t = t >> mem[((UI << 4) | v)] (sign bit preserved)
  246. Test [v] 1001_----_1111_vvvv ; (Z, S) _ = mem[((UI << 4) | v)]
  247.  
  248. Addi [v],s 1010_ssss_0000_vvvv ; (C, Z, S, O) mem[((UI << 4) | v)] = mem[((UI << 4) | v)] + s
  249. Addci [v],s 1010_ssss_0001_vvvv ; (C, Z, S, O) mem[((UI << 4) | v)] = mem[((UI << 4) | v)] + s + C
  250. Subi [v],s 1010_ssss_0010_vvvv ; (C, Z, S, O) mem[((UI << 4) | v)] = mem[((UI << 4) | v)] - s
  251. Subbi [v],s 1010_ssss_0011_vvvv ; (C, Z, S, O) mem[((UI << 4) | v)] = mem[((UI << 4) | v)] - s - !C
  252. Cmpi [v],s 1010_ssss_0100_vvvv ; (C, Z, S, O) _ = mem[((UI << 4) | v)] - s
  253. Negi [v],s 1010_ssss_0101_vvvv ; (C, Z, S, O) mem[((UI << 4) | v)] = -s
  254. Negbi [v],s 1010_ssss_0110_vvvv ; (C, Z, S, O) mem[((UI << 4) | v)] = -s - !C
  255. Andi [v],s 1010_ssss_0111_vvvv ; (Z, S) mem[((UI << 4) | v)] = mem[((UI << 4) | v)] & s
  256. Biti [v],s 1010_ssss_1000_vvvv ; (Z, S) _ = mem[((UI << 4) | v)] & s
  257. Ori [v],s 1010_ssss_1001_vvvv ; (Z, S) mem[((UI << 4) | v)] = mem[((UI << 4) | v)] | s
  258. Xori [v],s 1010_ssss_1010_vvvv ; (Z, S) mem[((UI << 4) | v)] = mem[((UI << 4) | v)] ^ s
  259. Noti [v],s 1010_ssss_1011_vvvv ; (Z, S) mem[((UI << 4) | v)] = !s
  260. Shli [v],s 1010_ssss_1100_vvvv ; (Z, S) mem[((UI << 4) | v)] = mem[((UI << 4) | v)] << s
  261. Lsri [v],s 1010_ssss_1101_vvvv ; (Z, S) mem[((UI << 4) | v)] = mem[((UI << 4) | v)] >> s
  262. Asri [v],s 1010_ssss_1110_vvvv ; (Z, S) mem[((UI << 4) | v)] = mem[((UI << 4) | v)] >> s (sign bit preserved)
  263.  
  264. Br.c v 1111_0001_vvvv_vvvv ; if C then pc += v
  265. Br.z v 1111_0010_vvvv_vvvv ; if Z then pc += v
  266. Br.s v 1111_0011_vvvv_vvvv ; if S then pc += v
  267. Br.o v 1111_0100_vvvv_vvvv ; if O then pc += v
  268. Br.nc v 1111_0101_vvvv_vvvv ; if !C then pc += v
  269. Br.nz v 1111_0110_vvvv_vvvv ; if !Z then pc += v
  270. Br.ns v 1111_0111_vvvv_vvvv ; if !S then pc += v
  271. Br.no v 1111_1000_vvvv_vvvv ; if !O then pc += v
  272. Br.u.le v 1111_1001_vvvv_vvvv ; if !C || Z then pc pc += v
  273. Br.u.g v 1111_1010_vvvv_vvvv ; if C && !Z then pc += v
  274. Br.s.l v 1111_1011_vvvv_vvvv ; if S != O then pc += v
  275. Br.s.ge v 1111_1100_vvvv_vvvv ; if S == O then pc += v
  276. Br.s.le v 1111_1101_vvvv_vvvv ; if Z || (S != O) then pc += v
  277. Br.s.g v 1111_1110_vvvv_vvvv ; if !Z && (S == O) then pc += v
  278. Bra v 1111_1111_vvvv_vvvv ; pc += v
  279.  
  280. Instruction aliases:
  281. Jp.e r Jp.z r
  282. Jp.ne r Jp.nz r
  283. Jp.u.ge r Jp.c r
  284. Jp.u.l r Jp.nc r
  285.  
  286. Jp.e [r] Jp.z [r]
  287. Jp.ne [r] Jp.nz [r]
  288. Jp.u.ge [r] Jp.c [r]
  289. Jp.u.l [r] Jp.nc [r]
  290.  
  291. Jpi.e v Jpi.z v
  292. Jpi.ne v Jpi.nz v
  293. Jpi.u.ge v Jpi.c v
  294. Jpi.u.l v Jpi.nc v
  295.  
  296. Jpi.e [v] Jpi.z [v]
  297. Jpi.ne [v] Jpi.nz [v]
  298. Jpi.u.ge [v] Jpi.c [v]
  299. Jpi.u.l [v] Jpi.nc [v]
  300.  
  301. Br.e v Br.z v
  302. Br.ne v Br.nz v
  303. Br.u.ge v Br.c v
  304. Br.u.l v Br.nc v
  305.  
  306. Zero r Xor r, r
  307. Neg r Neg r, r
  308. Negb r Negb r, r
  309. Not r Not r, r
  310.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement