diff options
Diffstat (limited to 'projects/09/K/Board.vm')
-rw-r--r-- | projects/09/K/Board.vm | 149 |
1 files changed, 138 insertions, 11 deletions
diff --git a/projects/09/K/Board.vm b/projects/09/K/Board.vm index ce1e791..3b5983c 100644 --- a/projects/09/K/Board.vm +++ b/projects/09/K/Board.vm @@ -1,5 +1,5 @@ function Board.new 3 -push constant 2 +push constant 3 call Memory.alloc 1 pop pointer 0 push constant 4 @@ -72,6 +72,8 @@ push temp 0 pop that 0 push constant 0 pop this 1 +push constant 0 +pop this 2 push pointer 0 return function Board.arrange 0 @@ -894,34 +896,132 @@ return label IF_FALSE6 push argument 1 return -function Board.addTile 1 +function Board.addTile 5 push argument 0 pop pointer 0 +push this 2 +push constant 25173 +call Math.multiply 2 +push constant 13849 +add +pop this 2 +push this 2 +push constant 0 +lt +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push this 2 +neg +pop this 2 +label IF_FALSE0 +push this 2 +push this 2 +push constant 2 +call Math.divide 2 +push constant 2 +call Math.multiply 2 +sub +push constant 0 +eq +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push constant 1 +pop local 3 +goto IF_END1 +label IF_FALSE1 push constant 1 +neg +pop local 3 +label IF_END1 +push this 2 +push this 2 +push constant 16 +call Math.divide 2 +push constant 16 +call Math.multiply 2 +sub +pop this 2 +push this 2 +push constant 4 +call Math.divide 2 +pop local 1 +push this 2 +push constant 4 +push local 1 +call Math.multiply 2 +sub +pop local 2 +push local 1 push this 0 add pop pointer 1 push that 0 pop local 0 -push constant 1 +push constant 65 +pop local 4 +label WHILE_EXP0 +push local 2 push local 0 add pop pointer 1 push that 0 -push constant 32 -eq -if-goto IF_TRUE0 -goto IF_FALSE0 -label IF_TRUE0 -push constant 1 +push constant 64 +gt +not +if-goto WHILE_END0 +push this 2 +push local 3 +add +pop this 2 +push this 2 +push constant 0 +lt +if-goto IF_TRUE2 +goto IF_FALSE2 +label IF_TRUE2 +push constant 15 +pop this 2 +label IF_FALSE2 +push this 2 +push this 2 +push constant 16 +call Math.divide 2 +push constant 16 +call Math.multiply 2 +sub +pop this 2 +push this 2 +push constant 4 +call Math.divide 2 +pop local 1 +push this 2 +push constant 4 +push local 1 +call Math.multiply 2 +sub +pop local 2 +push local 1 +push this 0 +add +pop pointer 1 +push that 0 +pop local 0 +push constant 131 +push local 4 +sub +pop local 4 +goto WHILE_EXP0 +label WHILE_END0 +push local 2 push local 0 add -push constant 65 +push local 4 pop temp 0 pop pointer 1 push temp 0 pop that 0 -label IF_FALSE0 push constant 0 return function Board.transform 4 @@ -1138,6 +1238,33 @@ add pop local 2 goto WHILE_EXP0 label WHILE_END0 +push local 0 +push constant 6 +add +push local 1 +push constant 2 +sub +call Output.moveCursor 2 +pop temp 0 +push constant 6 +call String.new 1 +push constant 84 +call String.appendChar 2 +push constant 117 +call String.appendChar 2 +push constant 114 +call String.appendChar 2 +push constant 110 +call String.appendChar 2 +push constant 58 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +call Output.printString 1 +pop temp 0 +push this 1 +call Output.printInt 1 +pop temp 0 push constant 0 return function Board.dispose 0 |