diff options
Diffstat (limited to 'projects/09/K/Board.vm')
-rw-r--r-- | projects/09/K/Board.vm | 1155 |
1 files changed, 1155 insertions, 0 deletions
diff --git a/projects/09/K/Board.vm b/projects/09/K/Board.vm new file mode 100644 index 0000000..398171f --- /dev/null +++ b/projects/09/K/Board.vm @@ -0,0 +1,1155 @@ +function Board.new 3 +push constant 2 +call Memory.alloc 1 +pop pointer 0 +push constant 4 +call Array.new 1 +pop this 0 +push constant 0 +pop local 0 +label WHILE_EXP0 +push local 0 +push constant 4 +lt +not +if-goto WHILE_END0 +push constant 0 +pop local 1 +push local 0 +push this 0 +add +push constant 4 +call Array.new 1 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 0 +push this 0 +add +pop pointer 1 +push that 0 +pop local 2 +label WHILE_EXP1 +push local 1 +push constant 4 +lt +not +if-goto WHILE_END1 +push local 1 +push local 2 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +goto WHILE_EXP1 +label WHILE_END1 +push local 0 +push constant 1 +add +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +push constant 0 +push this 0 +add +pop pointer 1 +push that 0 +pop local 2 +push constant 0 +push local 2 +add +push constant 65 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 0 +pop this 1 +push pointer 0 +return +function Board.arrange 0 +push argument 0 +pop pointer 0 +push argument 2 +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push pointer 0 +push argument 1 +push this 0 +call Board.deepcopy 3 +pop temp 0 +goto IF_END0 +label IF_FALSE0 +push pointer 0 +push argument 1 +push this 0 +call Board.transpose 3 +pop temp 0 +label IF_END0 +push pointer 0 +push argument 1 +call Board.dispose4 2 +pop temp 0 +push constant 0 +return +function Board.copy 1 +push argument 0 +pop pointer 0 +push constant 0 +pop local 0 +label WHILE_EXP0 +push local 0 +push constant 4 +lt +not +if-goto WHILE_END0 +push local 0 +push argument 2 +add +push local 0 +push argument 1 +add +pop pointer 1 +push that 0 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 0 +push constant 1 +add +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +push constant 0 +return +function Board.deepcopy 1 +push argument 0 +pop pointer 0 +push constant 0 +pop local 0 +label WHILE_EXP0 +push local 0 +push constant 4 +lt +not +if-goto WHILE_END0 +push pointer 0 +push local 0 +push argument 1 +add +pop pointer 1 +push that 0 +push local 0 +push argument 2 +add +pop pointer 1 +push that 0 +call Board.copy 3 +pop temp 0 +push local 0 +push constant 1 +add +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +push constant 0 +return +function Board.transpose 4 +push argument 0 +pop pointer 0 +push constant 0 +pop local 0 +label WHILE_EXP0 +push local 0 +push constant 4 +lt +not +if-goto WHILE_END0 +push constant 0 +pop local 1 +push local 0 +push argument 2 +add +pop pointer 1 +push that 0 +pop local 2 +label WHILE_EXP1 +push local 1 +push constant 4 +lt +not +if-goto WHILE_END1 +push local 1 +push argument 1 +add +pop pointer 1 +push that 0 +pop local 3 +push local 1 +push local 2 +add +push local 0 +push local 3 +add +pop pointer 1 +push that 0 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +goto WHILE_EXP1 +label WHILE_END1 +push local 0 +push constant 1 +add +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +push constant 0 +return +function Board.dispose4 2 +push argument 0 +pop pointer 0 +push constant 0 +pop local 0 +label WHILE_EXP0 +push local 0 +push constant 4 +lt +not +if-goto WHILE_END0 +push local 0 +push argument 1 +add +pop pointer 1 +push that 0 +pop local 1 +push local 1 +call Array.dispose 1 +pop temp 0 +push local 0 +push constant 1 +add +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +push argument 1 +call Array.dispose 1 +pop temp 0 +push constant 0 +return +function Board.new4 2 +push argument 0 +pop pointer 0 +push constant 4 +call Array.new 1 +pop local 0 +push constant 0 +pop local 1 +label WHILE_EXP0 +push local 1 +push constant 4 +lt +not +if-goto WHILE_END0 +push local 1 +push local 0 +add +push constant 4 +call Array.new 1 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +goto WHILE_EXP0 +label WHILE_END0 +push local 0 +return +function Board.getStrips 1 +push argument 0 +pop pointer 0 +push pointer 0 +call Board.new4 1 +pop local 0 +push argument 1 +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push pointer 0 +push this 0 +push local 0 +call Board.deepcopy 3 +pop temp 0 +goto IF_END0 +label IF_FALSE0 +push pointer 0 +push this 0 +push local 0 +call Board.transpose 3 +pop temp 0 +label IF_END0 +push local 0 +return +function Board.align 2 +push argument 0 +pop pointer 0 +push constant 0 +pop local 0 +push constant 0 +pop local 1 +push argument 2 +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +label WHILE_EXP0 +push local 0 +push constant 4 +lt +not +if-goto WHILE_END0 +push local 0 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 64 +gt +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push local 1 +push argument 1 +add +push local 0 +push argument 1 +add +pop pointer 1 +push that 0 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +label IF_FALSE1 +push local 0 +push constant 1 +add +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +label WHILE_EXP1 +push local 1 +push constant 4 +lt +not +if-goto WHILE_END1 +push local 1 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +goto WHILE_EXP1 +label WHILE_END1 +goto IF_END0 +label IF_FALSE0 +label WHILE_EXP2 +push local 0 +push constant 4 +lt +not +if-goto WHILE_END2 +push constant 3 +push local 0 +sub +push argument 1 +add +pop pointer 1 +push that 0 +push constant 64 +gt +if-goto IF_TRUE2 +goto IF_FALSE2 +label IF_TRUE2 +push constant 3 +push local 1 +sub +push argument 1 +add +push constant 3 +push local 0 +sub +push argument 1 +add +pop pointer 1 +push that 0 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +label IF_FALSE2 +push local 0 +push constant 1 +add +pop local 0 +goto WHILE_EXP2 +label WHILE_END2 +label WHILE_EXP3 +push local 1 +push constant 4 +lt +not +if-goto WHILE_END3 +push constant 3 +push local 1 +sub +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +goto WHILE_EXP3 +label WHILE_END3 +label IF_END0 +push argument 1 +return +function Board.reduce 0 +push argument 0 +pop pointer 0 +push constant 0 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +push argument 1 +add +pop pointer 1 +push that 0 +eq +push constant 2 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 3 +push argument 1 +add +pop pointer 1 +push that 0 +eq +and +push constant 0 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 64 +gt +and +push constant 2 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 64 +gt +and +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push argument 2 +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push constant 0 +push argument 1 +add +push constant 0 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 1 +push argument 1 +add +push constant 2 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 2 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 3 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +goto IF_END1 +label IF_FALSE1 +push constant 3 +push argument 1 +add +push constant 3 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 2 +push argument 1 +add +push constant 1 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 1 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 0 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +label IF_END1 +push argument 1 +return +label IF_FALSE0 +push constant 0 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +push argument 1 +add +pop pointer 1 +push that 0 +eq +push constant 0 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 64 +gt +and +if-goto IF_TRUE2 +goto IF_FALSE2 +label IF_TRUE2 +push argument 2 +if-goto IF_TRUE3 +goto IF_FALSE3 +label IF_TRUE3 +push constant 0 +push argument 1 +add +push constant 0 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 1 +push argument 1 +add +push constant 2 +push argument 1 +add +pop pointer 1 +push that 0 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 2 +push argument 1 +add +push constant 3 +push argument 1 +add +pop pointer 1 +push that 0 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 3 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +goto IF_END3 +label IF_FALSE3 +push constant 1 +push argument 1 +add +push constant 1 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 0 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +label IF_END3 +push argument 1 +return +label IF_FALSE2 +push constant 2 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 3 +push argument 1 +add +pop pointer 1 +push that 0 +eq +push constant 2 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 64 +gt +and +if-goto IF_TRUE4 +goto IF_FALSE4 +label IF_TRUE4 +push argument 2 +if-goto IF_TRUE5 +goto IF_FALSE5 +label IF_TRUE5 +push constant 2 +push argument 1 +add +push constant 2 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 3 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +goto IF_END5 +label IF_FALSE5 +push constant 3 +push argument 1 +add +push constant 3 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 2 +push argument 1 +add +push constant 1 +push argument 1 +add +pop pointer 1 +push that 0 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 1 +push argument 1 +add +push constant 0 +push argument 1 +add +pop pointer 1 +push that 0 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 0 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +label IF_END5 +push argument 1 +return +label IF_FALSE4 +push constant 1 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 2 +push argument 1 +add +pop pointer 1 +push that 0 +eq +push constant 1 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 64 +gt +and +if-goto IF_TRUE6 +goto IF_FALSE6 +label IF_TRUE6 +push argument 2 +if-goto IF_TRUE7 +goto IF_FALSE7 +label IF_TRUE7 +push constant 1 +push argument 1 +add +push constant 1 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 2 +push argument 1 +add +push constant 3 +push argument 1 +add +pop pointer 1 +push that 0 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 3 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +goto IF_END7 +label IF_FALSE7 +push constant 2 +push argument 1 +add +push constant 2 +push argument 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 1 +push argument 1 +add +push constant 0 +push argument 1 +add +pop pointer 1 +push that 0 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 0 +push argument 1 +add +push constant 32 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +label IF_END7 +push argument 1 +return +label IF_FALSE6 +push argument 1 +return +function Board.addTile 6 +push argument 0 +pop pointer 0 +push this 1 +pop local 0 +push constant 23 +push local 0 +call Math.multiply 2 +push local 0 +call Math.multiply 2 +push constant 79 +add +pop local 1 +push local 1 +push local 1 +push constant 16 +call Math.divide 2 +push constant 16 +call Math.multiply 2 +sub +pop local 0 +push local 0 +push constant 4 +call Math.divide 2 +pop local 2 +push local 0 +push local 2 +push constant 4 +call Math.multiply 2 +sub +pop local 3 +push constant 65 +pop local 4 +push local 2 +push this 0 +add +pop pointer 1 +push that 0 +pop local 5 +label WHILE_EXP0 +push local 3 +push local 5 +add +pop pointer 1 +push that 0 +push constant 64 +gt +not +if-goto WHILE_END0 +push constant 23 +push local 0 +call Math.multiply 2 +push local 0 +call Math.multiply 2 +push constant 79 +add +pop local 1 +push local 1 +push local 1 +push constant 16 +call Math.divide 2 +push constant 16 +call Math.multiply 2 +sub +pop local 0 +push local 0 +push constant 4 +call Math.divide 2 +pop local 2 +push local 0 +push local 2 +push constant 4 +call Math.multiply 2 +sub +pop local 3 +push constant 131 +push local 4 +sub +pop local 4 +push local 2 +push this 0 +add +pop pointer 1 +push that 0 +pop local 5 +goto WHILE_EXP0 +label WHILE_END0 +push local 3 +push local 5 +add +push local 4 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push constant 0 +return +function Board.transform 4 +push argument 0 +pop pointer 0 +push argument 1 +push constant 0 +eq +push argument 1 +push constant 1 +eq +or +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push constant 0 +not +pop local 1 +goto IF_END0 +label IF_FALSE0 +push constant 0 +pop local 1 +label IF_END0 +push argument 1 +push constant 0 +eq +push argument 1 +push constant 2 +eq +or +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push constant 0 +not +pop local 0 +goto IF_END1 +label IF_FALSE1 +push constant 0 +pop local 0 +label IF_END1 +push pointer 0 +push local 0 +call Board.getStrips 2 +pop local 2 +push constant 0 +pop local 3 +label WHILE_EXP0 +push local 3 +push constant 4 +lt +not +if-goto WHILE_END0 +push local 3 +push local 2 +add +push pointer 0 +push pointer 0 +push local 3 +push local 2 +add +pop pointer 1 +push that 0 +push local 1 +call Board.align 3 +push local 1 +call Board.reduce 3 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 3 +push constant 1 +add +pop local 3 +goto WHILE_EXP0 +label WHILE_END0 +push pointer 0 +push local 2 +push local 0 +call Board.arrange 3 +pop temp 0 +push constant 0 +return +function Board.next 0 +push argument 0 +pop pointer 0 +push pointer 0 +call Board.addTile 1 +pop temp 0 +push this 1 +push constant 1 +add +pop this 1 +push pointer 0 +push argument 1 +call Board.transform 2 +pop temp 0 +push constant 0 +return +function Board.draw 5 +push argument 0 +pop pointer 0 +push constant 9 +pop local 0 +push constant 30 +pop local 1 +push constant 0 +pop local 2 +label WHILE_EXP0 +push local 2 +push constant 4 +lt +not +if-goto WHILE_END0 +push constant 0 +pop local 3 +push local 0 +push local 2 +add +push local 1 +call Output.moveCursor 2 +pop temp 0 +push local 2 +push this 0 +add +pop pointer 1 +push that 0 +pop local 4 +label WHILE_EXP1 +push local 3 +push constant 4 +lt +not +if-goto WHILE_END1 +push local 3 +push local 4 +add +pop pointer 1 +push that 0 +call Output.printChar 1 +pop temp 0 +push local 3 +push constant 1 +add +pop local 3 +goto WHILE_EXP1 +label WHILE_END1 +push local 2 +push constant 1 +add +pop local 2 +goto WHILE_EXP0 +label WHILE_END0 +push constant 0 +return +function Board.dispose 0 +push argument 0 +pop pointer 0 +push pointer 0 +call Memory.deAlloc 1 +pop temp 0 +push constant 0 +return |