Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SYMBOL FIELD_SIZE 6
- SYMBOL FIELD_BUF_START 36
- SYMBOL FIELD_BUF_SIZE 12
- SYMBOL FIELD_ARR_SIZE 48
- SYMBOL VAR_X 60
- SYMBOL VAR_Y 59
- SYMBOL TEMP 58
- SYMBOL ADDR_TEMP 57
- SYMBOL ROW_POS 56
- SYMBOL CELL_POS 55
- SYMBOL NEIGHBORS 54
- SYMBOL M_TEMP 53
- SYMBOL COUNT_LENGTH 52
- SYMBOL CONST_ONE 51
- SYMBOL UPDATE_CNTR 50
- SYMBOL OUT_TEMP 49
- MAIN
- LOADi 0
- STOREA 62
- LOADi 1
- STOREA CONST_ONE
- FILL_LOOP
- LOADm 62
- LOADm
- LOADi 0
- STOREA
- LOADi 1
- qADD 62
- STORE
- LOADi FIELD_ARR_SIZE
- qEQL 62
- JZ FILL_LOOP
- #A period 4 oscillator
- #000110 0, 0
- #001001 1, 1
- #100101 0, 1, 1
- #000010 2
- #101100 0, 0, 1
- #010000 2
- LOADi 1
- STOREA 3
- STORE 4
- STORE 8
- STORE 11
- STORE 12
- STORE 15
- STORE 17
- STORE 22
- STORE 24
- STORE 26
- STORE 27
- STORE 31
- LOADi 0
- STOREA UPDATE_CNTR
- JMP LOOP
- LOOP
- CALL DISPLAY_STATE
- LOADi 1
- qADD UPDATE_CNTR
- STORE
- OUT
- JMP CONWAY
- CONWAY
- LOADi 0
- STOREA VAR_Y
- STORE ROW_POS
- STORE CELL_POS
- CONWAY_LOOP_Y
- CALL LOAD_BUFFER
- LOADi 0
- STOREA VAR_X
- CONWAY_LOOP_X
- LOADi 0
- STOREA M_TEMP
- LOADi 2
- STOREA COUNT_LENGTH
- LOADi 0
- qEQL VAR_X
- JNZ S1
- LOADi 1
- STOREA M_TEMP
- LOADi FIELD_SIZE
- SUB CONST_ONE
- qEQL VAR_X
- JNZ S1
- LOADi 3
- STOREA COUNT_LENGTH
- S1
- LOADi 0
- STOREA NEIGHBORS
- LOADi 0
- qEQL VAR_Y
- JNZ SKIP_TOP_ROW
- LOADi FIELD_BUF_START
- qADD VAR_X
- STORE ADDR_TEMP
- LOADi FIELD_SIZE
- ADD ADDR_TEMP
- qSUB M_TEMP
- STORE ADDR_TEMP
- CALL COUNT_NEIGHBORS_IN_ROW
- SKIP_TOP_ROW
- LOADi FIELD_BUF_START
- ADD VAR_X
- qSUB M_TEMP
- STORE ADDR_TEMP
- CALL COUNT_NEIGHBORS_IN_ROW
- LOADi FIELD_SIZE
- SUB CONST_ONE
- qEQL VAR_Y
- JNZ SKIP_BOTTOM_ROW
- LOADi FIELD_SIZE
- ADD CELL_POS
- qSUB M_TEMP
- STORE ADDR_TEMP
- CALL COUNT_NEIGHBORS_IN_ROW
- SKIP_BOTTOM_ROW
- LOADi 0
- LOADm CELL_POS
- LOADm
- qEQL
- JNZ THIS_DEAD
- THIS_ALIVE
- LOADi 63
- qADD NEIGHBORS
- 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
- #OUT # Sequence should be 2, 2, 2, 2, 0, 2, 2, 3, 1, 2, 2, 2
- #LOADi 63
- #STOREA 63
- # Any live Cell with two or three neighbors survives
- LOADi 2
- qEQL NEIGHBORS
- STORE TEMP
- LOADi 3
- EQL NEIGHBORS
- qADD TEMP
- JNZ THIS_IFEND
- # All other live cells die
- LOADi 0
- LOADm CELL_POS
- LOADm
- STOREA
- JMP THIS_IFEND
- THIS_DEAD
- # A dead cell with three live neighbors becomes a live cell
- LOADi 3
- qEQL NEIGHBORS
- JZ THIS_IFEND
- LOADi 1
- LOADm CELL_POS
- LOADm
- STOREA
- THIS_IFEND
- LOADi 1
- qADD CELL_POS
- STORE
- qADD VAR_X
- STORE
- LOADi FIELD_SIZE
- qEQL
- JZ CONWAY_LOOP_X
- LOADi FIELD_SIZE
- qADD ROW_POS
- STORE
- LOADi 1
- qADD VAR_Y
- STORE
- LOADi FIELD_SIZE
- qEQL
- JZ CONWAY_LOOP_Y
- JMP LOOP
- LOAD_BUFFER
- LOADi 0
- STOREA VAR_X
- SWAP_BUFF_LOOP
- LOADi FIELD_BUF_START
- qADD VAR_X
- STORE ADDR_TEMP
- LOADi FIELD_SIZE
- qADD ADDR_TEMP
- STORE TEMP
- LOADm ADDR_TEMP
- LOADm
- LOAD
- LOADm TEMP
- LOADm
- STOREA
- LOAD ROW_POS
- qADD VAR_X
- STORE TEMP
- LOADm
- LOAD
- LOADm ADDR_TEMP
- LOADm
- STOREA
- LOADi 1
- qADD VAR_X
- STORE
- LOADi FIELD_SIZE
- qEQL
- JZ SWAP_BUFF_LOOP
- RETURN
- COUNT_NEIGHBORS_IN_ROW
- LOADi 0
- STOREA TEMP
- COUNT_LOOP
- LOADm ADDR_TEMP
- LOADm
- LOAD
- qADD NEIGHBORS # Cells are 0 for dead, 1 for alive. So to count the alive cells, just add the cell value to the count
- STORE
- LOADi 1
- qADD ADDR_TEMP
- STORE
- ADD TEMP
- STORE
- qEQL COUNT_LENGTH
- JZ COUNT_LOOP
- RETURN
- DISPLAY_STATE # Only works with a 6x6 field, but it's not like you can make it any larger anyways
- LOADi 0
- STOREA VAR_Y
- STORE CELL_POS
- DISPLAY_LOOP_Y
- LOADi 0
- STOREA VAR_X
- STORE OUT_TEMP
- LOADi 1
- STOREA TEMP
- DISPLAY_LOOP_X
- LOADm CELL_POS
- LOADm
- LOADi 1
- qEQL
- JZ IS_DEAD
- LOAD TEMP
- qADD OUT_TEMP
- STORE
- IS_DEAD
- LOAD TEMP
- qADD
- STORE
- LOADi 1
- qADD CELL_POS
- STORE
- LOADi 1
- qADD VAR_X
- STORE
- LOADi 6
- qEQL
- JZ DISPLAY_LOOP_X
- LOAD OUT_TEMP
- STOREA 63
- LOADi 10
- STOREA NEIGHBORS
- DELAY_LOOP
- NOP
- NOP
- NOP
- LOADi 63
- qADD NEIGHBORS
- STORE
- JNZ DELAY_LOOP
- LOADi 63
- STOREA 63
- LOADi 1
- qADD VAR_Y
- STORE
- LOADi 6
- qEQL
- JZ DISPLAY_LOOP_Y
- RETURN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement