CursedFlames

Intcode Brainf*ck interpreter commented

Dec 9th, 2019
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.82 KB | None | 0 0
  1. # Yes, I wrote all of this manually. Yes, I know I'm insane.
  2. # labels were manually converted to addresses, hence the address number in every single comment.
  3.  
  4.  
  5. # [0 JEZ|instruction] 0 [2 intcode program start index=10] [3 brainfuck code start index] [4 instruction pointer] [5 data tape start index] [6 data pointer] [7 bracket count] [8 temp] [9 end]
  6. 1106,0,10,300,300,300,300,0,0,99,
  7.  
  8. # INITIALIZATION:
  9. 9,6, # 10 11 set offset to data pointer
  10. 203,0, # 12 13 load string
  11. 101,1,5,5, # 14-17 increment data tape start index
  12. 101,1,6,6, # 18-21 increment data pointer
  13. 109,1, # 22 23 increment offset
  14. 1205,-1,12, # 24-26 jnz 12 - loop until we input null char
  15.  
  16. 102,-1,6,8, # 27-30 negate data pointer
  17. 9,8, # 31 32 reset offset
  18. 9,4, # 33 34 set offset to instr pointer
  19. 101,1,5,5, # 35-38 increment data tape start index
  20. 101,1,6,6, # 39-42 increment data pointer
  21.  
  22. # LOOP:
  23. 1206,0,9, # 43-45 exit if we've reached the end of the program
  24.  
  25. 2101,0,0,0, # 46-49 store current instr in 0
  26. 102,-1,4,8, # 50-53 negate instr pointer
  27. 9,8, # 54-55 reset offset
  28. 9,6, # 56-57 set offset to data pointer
  29.  
  30. 101,-62,0,8, # 58 cur instr == ">"
  31. 1005,8,74, # 62 JNZ NEXT
  32. 101,1,6,6, # 65 increment data pointer
  33. 109,1, # 69 increment offset
  34. 1106,0,END, # 71 JMP END
  35. 101,-60,0,8, # 74 cur instr == "<"
  36. 1005,8,90, # 78 JNZ NEXT
  37. 101,-1,6,6, # 81 decrement data pointer
  38. 109,-1, # 85 decrement offset
  39. 1106,0,END, # 87 JMP END
  40. 101,-43,0,8, # 90 cur instr == "+"
  41. 1005,8,104, # 94 JNZ NEXT
  42. 22101,1,0,0, # 97 increment value at data pointer
  43. 1106,0,END, # 101 JMP END
  44. 101,-45,0,8, # 104 cur instr == "-"
  45. 1005,8,118, # 108 JNZ NEXT
  46. 22101,-1,0,0, # 111 decrement value at data pointer
  47. 1106,0,END, # 115 JMP END
  48. 101,-46,0,8, # 118 cur instr == "."
  49. 1005,8,130, # 122 JNZ NEXT
  50. 204,0, # 125 output value at data pointer
  51. 1106,0,END, # 127 JMP END
  52. 101,-44,0,8, # 130 cur instr == ","
  53. 1005,8,142, # 134 JNZ NEXT
  54. 203,0, # 137 input value at data pointer
  55. 1106,0,END, # 139 JMP END
  56. 101,-44,0,8, # 142 cur instr == ","
  57. 1005,8,154, # 146 JNZ NEXT
  58. 203,0, # 149 input value at data pointer
  59. 1106,0,END, # 151 JMP END
  60. 101,-91,0,8, # 154 cur instr == "["
  61. 1005,8,167, # 158 JNZ NEXT
  62. 1206,0,LOOP_EXIT, # 161 JEZ LOOP_EXIT
  63. 1106,0,END, # 164 JMP END
  64. 101,-93,0,8, # 167 cur instr == "]"
  65. 1005,8,END, # 171 JNZ END
  66. 1205,0,LOOP_ENTER, # 174 JNZ LOOP_ENTER
  67.  
  68. # END:
  69. 101,1,4,4, # 177 increment instruction pointer
  70. 102,-1,6,8, # 181 negate data pointer
  71. 9,8, # 185 reset offset
  72. 9,4, # 187 set offset to instr pointer
  73. 1106,0,LOOP, # 189 JMP LOOP
  74.  
  75.  
  76.  
  77. # LOOP_EXIT
  78. 102,-1,6,8, # 192 negate data pointer
  79. 9,8, # 196 reset offset
  80. 9,4, # 198 set offset to instr pointer
  81.  
  82. # LOOP_EXIT_TRACE
  83. 2101,0,0,0, # 200 store current instr in 0
  84. 101,-91,0,8, # 204 cur instr == "["
  85. 1005,8,218, # 208 JNZ NEXT
  86. 101,1,7,7, # 211 increment bracket count
  87. 1106,0,LOOP_EXIT_END, # 215 JMP LOOP_EXIT_END
  88. 101,-93,0,8, # 218 cur instr == "]"
  89. 1005,8,LOOP_EXIT_END, # 222 JNZ LOOP_EXIT_END
  90. 101,-1,7,7, # 225 decrement bracket count
  91.  
  92. # LOOP_EXIT_END
  93. 101,1,4,4, # 229 increment instruction pointer
  94. 109,1, # 233 increment offset
  95. 1006,7,LOOP, # 235 JEZ loop count LOOP
  96. 1106,0,LOOP_EXIT_TRACE, # 238
  97.  
  98. # LOOP_ENTER
  99. 102,-1,6,8, # 241 negate data pointer
  100. 9,8, # 245 reset offset
  101. 9,4, # 247 set offset to instr pointer
  102.  
  103. # LOOP_ENTER_TRACE
  104. 2101,0,0,0, # 249 store current instr in 0
  105. 101,-91,0,8, # 253 cur instr == "["
  106. 1005,8,267, # 257 JNZ NEXT
  107. 101,1,7,7, # 260 increment bracket count
  108. 1106,0,LOOP_ENTER_END, # 264 JMP LOOP_ENTER_END
  109. 101,-93,0,8, # 267 cur instr == "]"
  110. 1005,8,LOOP_ENTER_END, # 271 JNZ LOOP_ENTER_END
  111. 101,-1,7,7, # 274 decrement bracket count
  112.  
  113. # LOOP_ENTER_END
  114. 1006,7,LOOP, # 278 JEZ loop count LOOP
  115. 101,-1,4,4, # 281 decrement instruction pointer
  116. 109,-1, # 285 increment offset
  117. 1106,0,LOOP_ENTER_TRACE # 287
Add Comment
Please, Sign In to add comment