Advertisement
TheGhastModding

Conway.txt

Dec 28th, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.40 KB | None | 0 0
  1. SYMBOL FIELD_SIZE 6
  2. SYMBOL FIELD_BUF_START 36
  3. SYMBOL FIELD_BUF_SIZE 12
  4. SYMBOL FIELD_ARR_SIZE 48
  5.  
  6. SYMBOL VAR_X 60
  7. SYMBOL VAR_Y 59
  8. SYMBOL TEMP 58
  9. SYMBOL ADDR_TEMP 57
  10. SYMBOL ROW_POS 56
  11. SYMBOL CELL_POS 55
  12. SYMBOL NEIGHBORS 54
  13. SYMBOL M_TEMP 53
  14. SYMBOL COUNT_LENGTH 52
  15. SYMBOL CONST_ONE 51
  16. SYMBOL UPDATE_CNTR 50
  17. SYMBOL OUT_TEMP 49
  18.  
  19. MAIN
  20. LOADi 0
  21. STOREA 62
  22. LOADi 1
  23. STOREA CONST_ONE
  24. FILL_LOOP
  25. LOADm 62
  26. LOADm
  27. LOADi 0
  28. STOREA
  29. LOADi 1
  30. qADD 62
  31. STORE
  32. LOADi FIELD_ARR_SIZE
  33. qEQL 62
  34. JZ FILL_LOOP
  35.  
  36. #A period 4 oscillator
  37. #000110 0, 0
  38. #001001 1, 1
  39. #100101 0, 1, 1
  40. #000010 2
  41. #101100 0, 0, 1
  42. #010000 2
  43. LOADi 1
  44.  
  45. STOREA 3
  46. STORE 4
  47.  
  48. STORE 8
  49. STORE 11
  50.  
  51. STORE 12
  52. STORE 15
  53. STORE 17
  54.  
  55. STORE 22
  56.  
  57. STORE 24
  58. STORE 26
  59. STORE 27
  60. STORE 31
  61.  
  62. LOADi 0
  63. STOREA UPDATE_CNTR
  64. JMP LOOP
  65.  
  66. LOOP
  67. CALL DISPLAY_STATE
  68. LOADi 1
  69. qADD UPDATE_CNTR
  70. STORE
  71. OUT
  72.  
  73. JMP CONWAY
  74.  
  75. CONWAY
  76. LOADi 0
  77. STOREA VAR_Y
  78. STORE ROW_POS
  79. STORE CELL_POS
  80. CONWAY_LOOP_Y
  81. CALL LOAD_BUFFER
  82.  
  83. LOADi 0
  84. STOREA VAR_X
  85. CONWAY_LOOP_X
  86. LOADi 0
  87. STOREA M_TEMP
  88. LOADi 2
  89. STOREA COUNT_LENGTH
  90. LOADi 0
  91. qEQL VAR_X
  92. JNZ S1
  93.  
  94. LOADi 1
  95. STOREA M_TEMP
  96.  
  97. LOADi FIELD_SIZE
  98. SUB CONST_ONE
  99. qEQL VAR_X
  100. JNZ S1
  101.  
  102. LOADi 3
  103. STOREA COUNT_LENGTH
  104. S1
  105. LOADi 0
  106. STOREA NEIGHBORS
  107.  
  108. LOADi 0
  109. qEQL VAR_Y
  110. JNZ SKIP_TOP_ROW
  111.  
  112. LOADi FIELD_BUF_START
  113. qADD VAR_X
  114. STORE ADDR_TEMP
  115. LOADi FIELD_SIZE
  116. ADD ADDR_TEMP
  117. qSUB M_TEMP
  118. STORE ADDR_TEMP
  119. CALL COUNT_NEIGHBORS_IN_ROW
  120. SKIP_TOP_ROW
  121.  
  122. LOADi FIELD_BUF_START
  123. ADD VAR_X
  124. qSUB M_TEMP
  125. STORE ADDR_TEMP
  126. CALL COUNT_NEIGHBORS_IN_ROW
  127.  
  128. LOADi FIELD_SIZE
  129. SUB CONST_ONE
  130. qEQL VAR_Y
  131. JNZ SKIP_BOTTOM_ROW
  132.  
  133. LOADi FIELD_SIZE
  134. ADD CELL_POS
  135. qSUB M_TEMP
  136. STORE ADDR_TEMP
  137. CALL COUNT_NEIGHBORS_IN_ROW
  138. SKIP_BOTTOM_ROW
  139.  
  140. LOADi 0
  141. LOADm CELL_POS
  142. LOADm
  143. qEQL
  144. JNZ THIS_DEAD
  145.  
  146. THIS_ALIVE
  147. LOADi 63
  148. qADD NEIGHBORS
  149. STORE # Since COUNT_NEIGHBORS_IN_ROW also counts the cell we're on, we have to substract 1 from the count to get the real number of neighbors
  150. #OUT # Sequence should be 2, 2, 2, 2, 0, 2, 2, 3, 1, 2, 2, 2
  151. #LOADi 63
  152. #STOREA 63
  153.  
  154. # Any live Cell with two or three neighbors survives
  155. LOADi 2
  156. qEQL NEIGHBORS
  157. STORE TEMP
  158. LOADi 3
  159. EQL NEIGHBORS
  160. qADD TEMP
  161. JNZ THIS_IFEND
  162. # All other live cells die
  163. LOADi 0
  164. LOADm CELL_POS
  165. LOADm
  166. STOREA
  167.  
  168. JMP THIS_IFEND
  169. THIS_DEAD
  170. # A dead cell with three live neighbors becomes a live cell
  171. LOADi 3
  172. qEQL NEIGHBORS
  173. JZ THIS_IFEND
  174. LOADi 1
  175. LOADm CELL_POS
  176. LOADm
  177. STOREA
  178. THIS_IFEND
  179.  
  180. LOADi 1
  181. qADD CELL_POS
  182. STORE
  183. qADD VAR_X
  184. STORE
  185. LOADi FIELD_SIZE
  186. qEQL
  187. JZ CONWAY_LOOP_X
  188.  
  189. LOADi FIELD_SIZE
  190. qADD ROW_POS
  191. STORE
  192. LOADi 1
  193. qADD VAR_Y
  194. STORE
  195. LOADi FIELD_SIZE
  196. qEQL
  197. JZ CONWAY_LOOP_Y
  198.  
  199. JMP LOOP
  200.  
  201. LOAD_BUFFER
  202. LOADi 0
  203. STOREA VAR_X
  204. SWAP_BUFF_LOOP
  205. LOADi FIELD_BUF_START
  206. qADD VAR_X
  207. STORE ADDR_TEMP
  208. LOADi FIELD_SIZE
  209. qADD ADDR_TEMP
  210. STORE TEMP
  211. LOADm ADDR_TEMP
  212. LOADm
  213. LOAD
  214. LOADm TEMP
  215. LOADm
  216. STOREA
  217.  
  218. LOAD ROW_POS
  219. qADD VAR_X
  220. STORE TEMP
  221. LOADm
  222. LOAD
  223. LOADm ADDR_TEMP
  224. LOADm
  225. STOREA
  226.  
  227. LOADi 1
  228. qADD VAR_X
  229. STORE
  230. LOADi FIELD_SIZE
  231. qEQL
  232. JZ SWAP_BUFF_LOOP
  233.  
  234. RETURN
  235.  
  236. COUNT_NEIGHBORS_IN_ROW
  237. LOADi 0
  238. STOREA TEMP
  239. COUNT_LOOP
  240. LOADm ADDR_TEMP
  241. LOADm
  242. LOAD
  243. qADD NEIGHBORS # Cells are 0 for dead, 1 for alive. So to count the alive cells, just add the cell value to the count
  244. STORE
  245.  
  246. LOADi 1
  247. qADD ADDR_TEMP
  248. STORE
  249. ADD TEMP
  250. STORE
  251. qEQL COUNT_LENGTH
  252. JZ COUNT_LOOP
  253.  
  254. RETURN
  255.  
  256. DISPLAY_STATE # Only works with a 6x6 field, but it's not like you can make it any larger anyways
  257. LOADi 0
  258. STOREA VAR_Y
  259. STORE CELL_POS
  260. DISPLAY_LOOP_Y
  261. LOADi 0
  262. STOREA VAR_X
  263. STORE OUT_TEMP
  264. LOADi 1
  265. STOREA TEMP
  266. DISPLAY_LOOP_X
  267. LOADm CELL_POS
  268. LOADm
  269. LOADi 1
  270. qEQL
  271. JZ IS_DEAD
  272. LOAD TEMP
  273. qADD OUT_TEMP
  274. STORE
  275. IS_DEAD
  276. LOAD TEMP
  277. qADD
  278. STORE
  279. LOADi 1
  280. qADD CELL_POS
  281. STORE
  282. LOADi 1
  283. qADD VAR_X
  284. STORE
  285. LOADi 6
  286. qEQL
  287. JZ DISPLAY_LOOP_X
  288.  
  289. LOAD OUT_TEMP
  290. STOREA 63
  291. LOADi 10
  292. STOREA NEIGHBORS
  293. DELAY_LOOP
  294. NOP
  295. NOP
  296. NOP
  297. LOADi 63
  298. qADD NEIGHBORS
  299. STORE
  300. JNZ DELAY_LOOP
  301. LOADi 63
  302. STOREA 63
  303.  
  304. LOADi 1
  305. qADD VAR_Y
  306. STORE
  307. LOADi 6
  308. qEQL
  309. JZ DISPLAY_LOOP_Y
  310.  
  311. RETURN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement