Advertisement
Guest User

CPU FIle

a guest
Oct 9th, 2020
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.11 KB | None | 0 0
  1. #bits 16
  2.  
  3. #subruledef REGS
  4. {
  5. R0 => 0
  6. R1 => 1
  7. R2 => 2
  8. R3 => 3
  9. R4 => 4
  10. R5 => 5
  11. R6 => 6
  12. R7 => 7
  13. R8 => 8
  14. R9 => 9
  15. R10 => 10
  16. R11 => 11
  17. R12 => 12
  18. R13 => 13
  19. R14 => 14
  20. R15 => 15
  21. XH => 10
  22. XL => 11
  23. YH => 12
  24. YL => 13
  25. SPH => 14
  26. SPL => 15
  27. }
  28.  
  29. #subruledef CON
  30. {
  31. Z => 0b0001
  32. C => 0b0010
  33. N => 0b0011
  34. R => 0b0100
  35. NZ => 0b0101
  36. NC => 0b0110
  37. NN => 0b0111
  38. }
  39.  
  40. #ruledef
  41. {
  42. JR {VAL} => {REL = (VAL - pc), assert(REL <= 127 || REL >= -128), REL[7:0] @ 0b0000 @ 0[3:0]}
  43. JR {C:CON} {VAL} => {REL = (VAL - pc), assert(REL <= 127 || REL >= -128), REL[7:0] @ C[3:0] @ 0[3:0]}
  44.  
  45. JMP {ADDR} => 0b000000000000 @ 14[3:0] @ ADDR[15:0]
  46. JMP {Rb:REGS}, {ADDR} => 0b0000 @ Rb[3:0] @ 0b0001 @ 14[3:0] @ ADDR[15:0]
  47.  
  48. LD {Re:REGS}, ({ADDR}) => 0b0000 @ Re[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  49. LD {Re:REGS}, (X) => 0b0001 @ Re[3:0] @ 0b0000 @ 1[3:0]
  50. LD {Re:REGS}, (Y) => 0b0010 @ Re[3:0] @ 0b0000 @ 1[3:0]
  51. LD {Re:REGS}, ({Rb:REGS}, {ADDR}) => 0b0011 @ Re[3:0] @ Rb[3:0] @ 1[3:0] @ ADDR[15:0]
  52. LD {Re:REGS}, ({ADDR}, {Rb:REGS}) => 0b0011 @ Re[3:0] @ Rb[3:0] @ 1[3:0] @ ADDR[15:0]
  53. LD {Re:REGS}, (X, {ADDR}) => 0b0100 @ Re[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  54. LD {Re:REGS}, ({ADDR}, X) => 0b0100 @ Re[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  55. LD {Re:REGS}, (Y, {ADDR}) => 0b0101 @ Re[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  56. LD {Re:REGS}, ({ADDR}, Y) => 0b0101 @ Re[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  57. LD {Re:REGS}, (SP, {ADDR}) => 0b0110 @ Re[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  58.  
  59. LD ({ADDR}), {Ra:REGS} => 0b1000 @ Ra[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  60. LD (X), {Ra:REGS} => 0b1001 @ Ra[3:0] @ 0b0000 @ 1[3:0]
  61. LD (Y), {Ra:REGS} => 0b1010 @ Ra[3:0] @ 0b0000 @ 1[3:0]
  62. LD ({Rb:REGS}, {ADDR}), {Ra:REGS} => 0b1011 @ Ra[3:0] @ Rb[3:0] @ 1[3:0] @ ADDR[15:0]
  63. LD ({ADDR}, {Rb:REGS}), {Ra:REGS} => 0b1011 @ Ra[3:0] @ Rb[3:0] @ 1[3:0] @ ADDR[15:0]
  64. LD (X, {ADDR}), {Ra:REGS} => 0b1100 @ Ra[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  65. LD ({ADDR}, X), {Ra:REGS} => 0b1100 @ Ra[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  66. LD (Y, {ADDR}), {Ra:REGS} => 0b1101 @ Ra[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  67. LD ({ADDR}, Y), {Ra:REGS} => 0b1101 @ Ra[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  68. LD (SP, {ADDR}), {Ra:REGS} => 0b1110 @ Ra[3:0] @ 0b0000 @ 1[3:0] @ ADDR[15:0]
  69.  
  70. LD {Re:REGS}, {VAL} => VAL[7:0] @ Re[3:0] @ 2[3:0]
  71. LD {Re:REGS}, {Ra:REGS} => 0b1111 @ Re[3:0] @ Ra[3:0] @ 3[3:0]
  72.  
  73. LD {Re:REGS}, FL => 0b1110 @ Re[3:0] @ 0b0000 @ 3[3:0]
  74. LD FL, {Ra:REGS} => 0b1101 @ Ra[3:0] @ 0b0000 @ 3[3:0]
  75.  
  76. ADD {Rae:REGS}, {Rb:REGS} => 0b0000 @ Rae[3:0] @ Rb[3:0] @ 3[3:0]
  77. ADC {Rae:REGS}, {Rb:REGS} => 0b0001 @ Rae[3:0] @ Rb[3:0] @ 3[3:0]
  78. SUB {Rae:REGS}, {Rb:REGS} => 0b0010 @ Rae[3:0] @ Rb[3:0] @ 3[3:0]
  79. SBC {Rae:REGS}, {Rb:REGS} => 0b0011 @ Rae[3:0] @ Rb[3:0] @ 3[3:0]
  80. AND {Rae:REGS}, {Rb:REGS} => 0b0100 @ Rae[3:0] @ Rb[3:0] @ 3[3:0]
  81. OR {Rae:REGS}, {Rb:REGS} => 0b0101 @ Rae[3:0] @ Rb[3:0] @ 3[3:0]
  82. XOR {Rae:REGS}, {Rb:REGS} => 0b0110 @ Rae[3:0] @ Rb[3:0] @ 3[3:0]
  83. CMP {Ra:REGS}, {Rb:REGS} => 0b0111 @ Ra[3:0] @ Rb[3:0] @ 3[3:0]
  84. INC {Rae:REGS} => 0b1000 @ Rae[3:0] @ 0b0000 @ 3[3:0]
  85. ICC {Rae:REGS} => 0b1000 @ Rae[3:0] @ 0b0001 @ 3[3:0]
  86. DEC {Rae:REGS} => 0b1000 @ Rae[3:0] @ 0b0010 @ 3[3:0]
  87. DCC {Rae:REGS} => 0b1000 @ Rae[3:0] @ 0b0011 @ 3[3:0]
  88. SFL {Rae:REGS} => 0b1000 @ Rae[3:0] @ 0b0100 @ 3[3:0]
  89. SFR {Rae:REGS} => 0b1000 @ Rae[3:0] @ 0b0101 @ 3[3:0]
  90. ROL {Rae:REGS} => 0b1000 @ Rae[3:0] @ 0b0110 @ 3[3:0]
  91. ROR {Rae:REGS} => 0b1000 @ Rae[3:0] @ 0b0111 @ 3[3:0]
  92.  
  93. ADD {Re:REGS}, {VAL} => VAL[7:0] @ Re[3:0] @ 4[3:0]
  94. ADC {Re:REGS}, {VAL} => VAL[7:0] @ Re[3:0] @ 5[3:0]
  95. SUB {Re:REGS}, {VAL} => VAL[7:0] @ Re[3:0] @ 6[3:0]
  96. SBC {Re:REGS}, {VAL} => VAL[7:0] @ Re[3:0] @ 7[3:0]
  97. AND {Re:REGS}, {VAL} => VAL[7:0] @ Re[3:0] @ 8[3:0]
  98. OR {Re:REGS}, {VAL} => VAL[7:0] @ Re[3:0] @ 9[3:0]
  99. XOR {Re:REGS}, {VAL} => VAL[7:0] @ Re[3:0] @ 10[3:0]
  100. CMP {Re:REGS}, {VAL} => VAL[7:0] @ Re[3:0] @ 11[3:0]
  101.  
  102. IN {Re:REGS}, ({VAL}) => VAL[7:0] @ Re[3:0] @ 12[3:0]
  103. OUT ({VAL}), {Ra:REGS} => VAL[7:0] @ Ra[3:0] @ 13[3:0]
  104.  
  105. PUSH {Ra:REGS} => 0b0000 @ Ra[3:0] @ 0b0010 @ 14[3:0]
  106. POP {Re:REGS} => 0b0000 @ Re[3:0] @ 0b0011 @ 14[3:0]
  107.  
  108. CALL {VAL} => {REL = (VAL - pc), assert(REL <= 127 && REL >= -128), REL[7:0] @ 0b0100 @ 14[3:0]}
  109. CALL {ADDR} => {REL = (ADDR - pc), assert(REL > 127 || REL < -128), 0b000000000101 @ 14[3:0] @ ADDR[15:0]}
  110. CALL {Rb:REGS}, {ADDR} => 0b0000 @ Rd[3:0] @ 0b0110 @ 14[3:0] @ ADDR[15:0]
  111.  
  112. RET => 0b000000000000 @ 15[3:0]
  113. CLR Z => 0b000000000001 @ 15[3:0]
  114. SET Z => 0b000000000010 @ 15[3:0]
  115. CLR C => 0b000000000011 @ 15[3:0]
  116. SET C => 0b000000000100 @ 15[3:0]
  117. CLR N => 0b000000000101 @ 15[3:0]
  118. SET N => 0b000000000110 @ 15[3:0]
  119. CLR I => 0b000000000111 @ 15[3:0]
  120. SET I => 0b000000001000 @ 15[3:0]
  121. HALT => 0b1111111111111111
  122. }
  123.  
  124.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement