Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.23 KB | None | 0 0
  1. #cpudef "Complex_CPU_Project"
  2. {
  3. #bits 8
  4.  
  5. #tokendef ALS
  6. {
  7. ADD = 0b01100
  8. ADC = 0b01101
  9. SUB = 0b01110
  10. SBC = 0b01111
  11.  
  12.  
  13. AND = 0b10010
  14. OR = 0b10011
  15. XOR = 0b10100
  16. CMP = 0b10101
  17.  
  18.  
  19. }
  20.  
  21. #tokendef J
  22. {
  23. JMP = 0b1101
  24. JP = 0b1101
  25. CALL = 0b1111
  26.  
  27. }
  28.  
  29. #tokendef REG
  30. {
  31. A = 0b00
  32. B = 0b01
  33. C = 0b10
  34. D = 0b11
  35.  
  36. }
  37.  
  38. #tokendef FLAGS
  39. {
  40. Z = 0b0000
  41. Za = 0b0001
  42. Zx = 0b0010
  43. O = 0b0011
  44. U = 0b0100
  45. G = 0b0101
  46. E = 0b0110
  47. L = 0b0111
  48.  
  49. NZ = 0b1000
  50. NZa = 0b1001
  51. NZx = 0b1010
  52. NO = 0b1011
  53. NU = 0b1100
  54. NG = 0b1101
  55. NE = 0b1110
  56. NL = 0b1111
  57. }
  58.  
  59. ;MISC
  60. NOP -> 0x00[7:0]
  61. RET -> 0x01[7:0]
  62. PUSH AB -> 0x04[7:0]
  63. PUSH CD -> 0x05[7:0]
  64. PUSH {src} -> 0x06[7:0] @ src[15:0]
  65. POP AB -> 0x07[7:0]
  66. POP CD -> 0x08[7:0]
  67. JMP {src} -> 0x0A[7:0] @ src[15:0]
  68. JP {src} -> 0x0A[7:0] @ src[15:0]
  69. JR {src} -> 0x0B[7:0] @ (src - pc)[7:0]
  70. CALL {src} -> 0x0C[7:0] @ src[15:0]
  71. HALT -> 0x0F[7:0]
  72. HLT -> 0x0F[7:0]
  73.  
  74.  
  75.  
  76. ;REG <- IMME
  77. LD {dest:REG}, {src} -> 0x1[3:0] @ 0b00[1:0] @ dest[1:0] @ src[7:0]
  78.  
  79. ;REG <- ADDR
  80. LD {dest:REG}, ({src}) -> 0x1[3:0] @ 0b01[1:0] @ dest[1:0] @ src[15:0]
  81.  
  82. ;REG <- ADDR CD
  83. LD {dest:REG}, (CD) -> 0x1[3:0] @ 0b10[1:0] @ dest[1:0]
  84.  
  85. ;REG <- ADDR CD+B
  86. LD {dest:REG}, (CD+B) -> 0x1[3:0] @ 0b11[1:0] @ dest[1:0]
  87.  
  88.  
  89. ;ADDR <- REG
  90. LD ({dest}), {src:REG} -> 0x2[3:0] @ 0b01[1:0] @ src[1:0] @ dest[15:0]
  91.  
  92. ;ADDR CD <- REG
  93. LD (CD), {src:REG} -> 0x2[3:0] @ 0b10[1:0] @ src[1:0]
  94.  
  95. ;ADDR CD+B <- REG
  96. LD (CD+B), {src:REG} -> 0x2[3:0] @ 0b11[1:0] @ src[1:0]
  97.  
  98.  
  99. ;ADDR <- IMME
  100. LD ({dest}), {src} -> 0x34 @ src[7:0] @ dest[15:0]
  101.  
  102. ;ADDR <- ADDR
  103. LD ({dest}), ({src}) -> 0x35 @ src[15:0] @ dest[15:0]
  104.  
  105. ;ADDR <- ADDR CD
  106. LD ({dest}), (CD) -> 0x36 @ dest[15:0]
  107.  
  108. ;ADDR <- ADDR CD+B
  109. LD ({dest}), (CD+B) -> 0x37 @ dest[15:0]
  110.  
  111. ;ADDR CD <- IMME
  112. LD (CD), {src} -> 0x38 @ src[7:0]
  113.  
  114. ;ADDR CD <- ADDR
  115. LD (CD), ({src}) -> 0x39 @ src[15:0]
  116.  
  117. ;ADDR CD <- ADDR CD+B
  118. LD (CD), (CD+B) -> 0x3A
  119.  
  120. ;ADDR CD+B <- IMME
  121. LD (CD+B), {src} -> 0x3B @ src[7:0]
  122.  
  123. ;ADDR CD+B <- ADDR
  124. LD (CD+B), ({src}) -> 0x3C @ src[15:0]
  125.  
  126. ;ADDR CD+B <- ADDR CD
  127. LD (CD+B), (CD) -> 0x3D
  128.  
  129.  
  130. ;REG <- REG
  131. LD A, B -> 0x40
  132. LD A, C -> 0x41
  133. LD A, D -> 0x42
  134. LD B, A -> 0x43
  135. LD B, C -> 0x44
  136. LD B, D -> 0x45
  137. LD C, A -> 0x46
  138. LD C, B -> 0x47
  139. LD C, D -> 0x48
  140. LD D, A -> 0x49
  141. LD D, B -> 0x4A
  142. LD D, C -> 0x4B
  143.  
  144.  
  145. ;REG <- 16b IMME
  146. LD AB, {src} -> 0x20 @ src[15:0]
  147. LD CD, {src} -> 0x21 @ src[15:0]
  148. LD SP, {src} -> 0x30 @ src[15:0]
  149.  
  150.  
  151. ;I/O
  152. IN A, ({src}) -> 0x3E
  153. IN ({dest}), ({src}) -> 0x4C
  154. IN (CD+B), ({src}) -> 0x4E
  155.  
  156. OUT ({src}), A -> 0x3F
  157. OUT ({dest}), ({src}) -> 0x4D
  158. OUT ({src}), (CD+B) -> 0x4F
  159.  
  160.  
  161. ;AL stuff
  162. {al:ALS} A -> al[4:0] @ 0b000[2:0]
  163. {al:ALS} B -> al[4:0] @ 0b001[2:0]
  164. {al:ALS} C -> al[4:0] @ 0b010[2:0]
  165. {al:ALS} D -> al[4:0] @ 0b011[2:0]
  166. {al:ALS} ({src}) -> al[4:0] @ 0b100[2:0] @ src[15:0]
  167. {al:ALS} (CD) -> al[4:0] @ 0b101[2:0]
  168. {al:ALS} (CD+B) -> al[4:0] @ 0b110[2:0]
  169. {al:ALS} {src} -> al[4:0] @ 0b111[2:0] @ src[7:0]
  170.  
  171. INC A -> 0x80
  172. INC B -> 0x81
  173. INC C -> 0x82
  174. INC D -> 0x83
  175. INC ({src}) -> 0x84 @ src[15:0]
  176. INC (CD) -> 0x85
  177. INC (CD+B) -> 0x86
  178.  
  179. DEC A -> 0x88
  180. DEC B -> 0x89
  181. DEC C -> 0x8A
  182. DEC D -> 0x8B
  183. DEC ({src}) -> 0x8C @ src[15:0]
  184. DEC (CD) -> 0x8D
  185. DEC (CD+B) -> 0x8E
  186.  
  187. SFR A -> 0xB0
  188. SFR B -> 0xB1
  189. SFR C -> 0xB2
  190. SFR D -> 0xB3
  191. SFR ({src}) -> 0xB4 @ src[15:0]
  192. SFR (CD) -> 0xB5
  193. SFR (CD+B) -> 0xB6
  194.  
  195. SFL A -> 0xB8
  196. SFL B -> 0xB9
  197. SFL C -> 0xBA
  198. SFL D -> 0xBB
  199. SFL ({src}) -> 0xBC @ src[15:0]
  200. SFL (CD) -> 0xBD
  201. SFL (CD+B) -> 0xBE
  202.  
  203.  
  204. ;Jumps
  205. {jmp:J} {flag:FLAGS} {src} -> jmp[3:0] @ flag[3:0] @ src[15:0]
  206. JR {flag:FLAGS} {src} -> 0xE[3:0] @ flag[3:0] @ (src - pc)[7:0]
  207.  
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement