diff options
Diffstat (limited to 'projects/11/K/Board.vm')
-rw-r--r-- | projects/11/K/Board.vm | 1183 |
1 files changed, 1183 insertions, 0 deletions
diff --git a/projects/11/K/Board.vm b/projects/11/K/Board.vm new file mode 100644 index 0000000..272b52d --- /dev/null +++ b/projects/11/K/Board.vm @@ -0,0 +1,1183 @@ +function Board.new 3 +push constant 3 +call Memory.alloc 1 +pop pointer 0 +push constant 4 +call Array.new 1 +pop this 0 +push constant 0 +pop local 0 +label new.While0 +push local 0 +push constant 4 +lt +not +if-goto new.EndWhile0 +push constant 0 +pop local 1 +push constant 4 +call Array.new 1 +push this 0 +push local 0 +add +pop pointer 1 +pop that 0 +push this 0 +push local 0 +add +pop pointer 1 +push that 0 +pop local 2 +label new.While0.While0 +push local 1 +push constant 4 +lt +not +if-goto new.While0.EndWhile0 +push constant 32 +push local 2 +push local 1 +add +pop pointer 1 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +goto new.While0.While0 +label new.While0.EndWhile0 +push local 0 +push constant 1 +add +pop local 0 +goto new.While0 +label new.EndWhile0 +push this 0 +push constant 0 +add +pop pointer 1 +push that 0 +pop local 2 +push constant 65 +push local 2 +push constant 0 +add +pop pointer 1 +pop that 0 +push constant 0 +pop this 1 +push constant 0 +pop this 2 +push pointer 0 +return +function Board.arrange 0 +push argument 0 +pop pointer 0 +push argument 2 +not +if-goto arrange.Else0 +push pointer 0 +push argument 1 +push this 0 +call Board.deepcopy 3 +pop temp 0 +goto arrange.Endif0 +label arrange.Else0 +push pointer 0 +push argument 1 +push this 0 +call Board.transpose 3 +pop temp 0 +label arrange.Endif0 +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 copy.While0 +push local 0 +push constant 4 +lt +not +if-goto copy.EndWhile0 +push argument 1 +push local 0 +add +pop pointer 1 +push that 0 +push argument 2 +push local 0 +add +pop pointer 1 +pop that 0 +push local 0 +push constant 1 +add +pop local 0 +goto copy.While0 +label copy.EndWhile0 +push constant 0 +return +function Board.deepcopy 1 +push argument 0 +pop pointer 0 +push constant 0 +pop local 0 +label deepcopy.While0 +push local 0 +push constant 4 +lt +not +if-goto deepcopy.EndWhile0 +push pointer 0 +push argument 1 +push local 0 +add +pop pointer 1 +push that 0 +push argument 2 +push local 0 +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 deepcopy.While0 +label deepcopy.EndWhile0 +push constant 0 +return +function Board.transpose 4 +push argument 0 +pop pointer 0 +push constant 0 +pop local 0 +label transpose.While0 +push local 0 +push constant 4 +lt +not +if-goto transpose.EndWhile0 +push constant 0 +pop local 1 +push argument 2 +push local 0 +add +pop pointer 1 +push that 0 +pop local 2 +label transpose.While0.While0 +push local 1 +push constant 4 +lt +not +if-goto transpose.While0.EndWhile0 +push argument 1 +push local 1 +add +pop pointer 1 +push that 0 +pop local 3 +push local 3 +push local 0 +add +pop pointer 1 +push that 0 +push local 2 +push local 1 +add +pop pointer 1 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +goto transpose.While0.While0 +label transpose.While0.EndWhile0 +push local 0 +push constant 1 +add +pop local 0 +goto transpose.While0 +label transpose.EndWhile0 +push constant 0 +return +function Board.dispose4 2 +push argument 0 +pop pointer 0 +push constant 0 +pop local 0 +label dispose4.While0 +push local 0 +push constant 4 +lt +not +if-goto dispose4.EndWhile0 +push argument 1 +push local 0 +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 dispose4.While0 +label dispose4.EndWhile0 +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 new4.While0 +push local 1 +push constant 4 +lt +not +if-goto new4.EndWhile0 +push constant 4 +call Array.new 1 +push local 0 +push local 1 +add +pop pointer 1 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +goto new4.While0 +label new4.EndWhile0 +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 +not +if-goto getStrips.Else0 +push pointer 0 +push this 0 +push local 0 +call Board.deepcopy 3 +pop temp 0 +goto getStrips.Endif0 +label getStrips.Else0 +push pointer 0 +push this 0 +push local 0 +call Board.transpose 3 +pop temp 0 +label getStrips.Endif0 +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 +not +if-goto align.Else0 +label align.Else0.While0 +push local 0 +push constant 4 +lt +not +if-goto align.Else0.EndWhile0 +push argument 1 +push local 0 +add +pop pointer 1 +push that 0 +push constant 64 +gt +not +if-goto align.Else0.While0.Else0 +push argument 1 +push local 0 +add +pop pointer 1 +push that 0 +push argument 1 +push local 1 +add +pop pointer 1 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +label align.Else0.While0.Else0 +push local 0 +push constant 1 +add +pop local 0 +goto align.Else0.While0 +label align.Else0.EndWhile0 +label align.Else0.While1 +push local 1 +push constant 4 +lt +not +if-goto align.Else0.EndWhile1 +push constant 32 +push argument 1 +push local 1 +add +pop pointer 1 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +goto align.Else0.While1 +label align.Else0.EndWhile1 +goto align.Endif0 +label align.Else0 +label align.If0.While0 +push local 0 +push constant 4 +lt +not +if-goto align.If0.EndWhile0 +push argument 1 +push constant 3 +push local 0 +sub +add +pop pointer 1 +push that 0 +push constant 64 +gt +not +if-goto align.If0.While0.Else0 +push argument 1 +push constant 3 +push local 0 +sub +add +pop pointer 1 +push that 0 +push argument 1 +push constant 3 +push local 1 +sub +add +pop pointer 1 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +label align.If0.While0.Else0 +push local 0 +push constant 1 +add +pop local 0 +goto align.If0.While0 +label align.If0.EndWhile0 +label align.If0.While1 +push local 1 +push constant 4 +lt +not +if-goto align.If0.EndWhile1 +push constant 32 +push argument 1 +push constant 3 +push local 1 +sub +add +pop pointer 1 +pop that 0 +push local 1 +push constant 1 +add +pop local 1 +goto align.If0.While1 +label align.If0.EndWhile1 +label align.Endif0 +push argument 1 +return +function Board.reduce 0 +push argument 0 +pop pointer 0 +push argument 1 +push constant 0 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 1 +add +pop pointer 1 +push that 0 +eq +push argument 1 +push constant 2 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 3 +add +pop pointer 1 +push that 0 +eq +and +push argument 1 +push constant 0 +add +pop pointer 1 +push that 0 +push constant 64 +gt +and +push argument 1 +push constant 2 +add +pop pointer 1 +push that 0 +push constant 64 +gt +and +not +if-goto reduce.Else0 +push argument 2 +not +if-goto reduce.Else0.Else0 +push argument 1 +push constant 0 +add +pop pointer 1 +push that 0 +push constant 1 +add +push argument 1 +push constant 0 +add +pop pointer 1 +pop that 0 +push argument 1 +push constant 2 +add +pop pointer 1 +push that 0 +push constant 1 +add +push argument 1 +push constant 1 +add +pop pointer 1 +pop that 0 +push constant 32 +push argument 1 +push constant 2 +add +pop pointer 1 +pop that 0 +push constant 32 +push argument 1 +push constant 3 +add +pop pointer 1 +pop that 0 +goto reduce.Else0.Endif0 +label reduce.Else0.Else0 +push argument 1 +push constant 3 +add +pop pointer 1 +push that 0 +push constant 1 +add +push argument 1 +push constant 3 +add +pop pointer 1 +pop that 0 +push argument 1 +push constant 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +push argument 1 +push constant 2 +add +pop pointer 1 +pop that 0 +push constant 32 +push argument 1 +push constant 1 +add +pop pointer 1 +pop that 0 +push constant 32 +push argument 1 +push constant 0 +add +pop pointer 1 +pop that 0 +label reduce.Else0.Endif0 +push argument 1 +return +label reduce.Else0 +push argument 1 +push constant 0 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 1 +add +pop pointer 1 +push that 0 +eq +push argument 1 +push constant 0 +add +pop pointer 1 +push that 0 +push constant 64 +gt +and +not +if-goto reduce.Else1 +push argument 2 +not +if-goto reduce.Else1.Else0 +push argument 1 +push constant 0 +add +pop pointer 1 +push that 0 +push constant 1 +add +push argument 1 +push constant 0 +add +pop pointer 1 +pop that 0 +push argument 1 +push constant 2 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 1 +add +pop pointer 1 +pop that 0 +push argument 1 +push constant 3 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 2 +add +pop pointer 1 +pop that 0 +push constant 32 +push argument 1 +push constant 3 +add +pop pointer 1 +pop that 0 +goto reduce.Else1.Endif0 +label reduce.Else1.Else0 +push argument 1 +push constant 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +push argument 1 +push constant 1 +add +pop pointer 1 +pop that 0 +push constant 32 +push argument 1 +push constant 0 +add +pop pointer 1 +pop that 0 +label reduce.Else1.Endif0 +push argument 1 +return +label reduce.Else1 +push argument 1 +push constant 2 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 3 +add +pop pointer 1 +push that 0 +eq +push argument 1 +push constant 2 +add +pop pointer 1 +push that 0 +push constant 64 +gt +and +not +if-goto reduce.Else2 +push argument 2 +not +if-goto reduce.Else2.Else0 +push argument 1 +push constant 2 +add +pop pointer 1 +push that 0 +push constant 1 +add +push argument 1 +push constant 2 +add +pop pointer 1 +pop that 0 +push constant 32 +push argument 1 +push constant 3 +add +pop pointer 1 +pop that 0 +goto reduce.Else2.Endif0 +label reduce.Else2.Else0 +push argument 1 +push constant 3 +add +pop pointer 1 +push that 0 +push constant 1 +add +push argument 1 +push constant 3 +add +pop pointer 1 +pop that 0 +push argument 1 +push constant 1 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 2 +add +pop pointer 1 +pop that 0 +push argument 1 +push constant 0 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 1 +add +pop pointer 1 +pop that 0 +push constant 32 +push argument 1 +push constant 0 +add +pop pointer 1 +pop that 0 +label reduce.Else2.Endif0 +push argument 1 +return +label reduce.Else2 +push argument 1 +push constant 1 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 2 +add +pop pointer 1 +push that 0 +eq +push argument 1 +push constant 1 +add +pop pointer 1 +push that 0 +push constant 64 +gt +and +not +if-goto reduce.Else3 +push argument 2 +not +if-goto reduce.Else3.Else0 +push argument 1 +push constant 1 +add +pop pointer 1 +push that 0 +push constant 1 +add +push argument 1 +push constant 1 +add +pop pointer 1 +pop that 0 +push argument 1 +push constant 3 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 2 +add +pop pointer 1 +pop that 0 +push constant 32 +push argument 1 +push constant 3 +add +pop pointer 1 +pop that 0 +goto reduce.Else3.Endif0 +label reduce.Else3.Else0 +push argument 1 +push constant 2 +add +pop pointer 1 +push that 0 +push constant 1 +add +push argument 1 +push constant 2 +add +pop pointer 1 +pop that 0 +push argument 1 +push constant 0 +add +pop pointer 1 +push that 0 +push argument 1 +push constant 1 +add +pop pointer 1 +pop that 0 +push constant 32 +push argument 1 +push constant 0 +add +pop pointer 1 +pop that 0 +label reduce.Else3.Endif0 +push argument 1 +return +label reduce.Else3 +push argument 1 +return +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 +not +if-goto addTile.Else0 +push this 2 +neg +pop this 2 +label addTile.Else0 +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 +not +if-goto addTile.Else1 +push constant 1 +pop local 3 +goto addTile.Endif1 +label addTile.Else1 +push constant 1 +neg +pop local 3 +label addTile.Endif1 +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 this 0 +push local 1 +add +pop pointer 1 +push that 0 +pop local 0 +push constant 65 +pop local 4 +label addTile.While2 +push local 0 +push local 2 +add +pop pointer 1 +push that 0 +push constant 64 +gt +not +if-goto addTile.EndWhile2 +push this 2 +push local 3 +add +pop this 2 +push this 2 +push constant 0 +lt +not +if-goto addTile.While2.Else0 +push constant 15 +pop this 2 +label addTile.While2.Else0 +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 this 0 +push local 1 +add +pop pointer 1 +push that 0 +pop local 0 +push constant 131 +push local 4 +sub +pop local 4 +goto addTile.While2 +label addTile.EndWhile2 +push local 4 +push local 0 +push local 2 +add +pop pointer 1 +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 +not +if-goto transform.Else0 +push constant 1 +neg +pop local 1 +goto transform.Endif0 +label transform.Else0 +push constant 0 +pop local 1 +label transform.Endif0 +push argument 1 +push constant 0 +eq +push argument 1 +push constant 2 +eq +or +not +if-goto transform.Else1 +push constant 1 +neg +pop local 0 +goto transform.Endif1 +label transform.Else1 +push constant 0 +pop local 0 +label transform.Endif1 +push pointer 0 +push local 0 +call Board.getStrips 2 +pop local 2 +push constant 0 +pop local 3 +label transform.While2 +push local 3 +push constant 4 +lt +not +if-goto transform.EndWhile2 +push pointer 0 +push pointer 0 +push local 2 +push local 3 +add +pop pointer 1 +push that 0 +push local 1 +call Board.align 3 +push local 1 +call Board.reduce 3 +push local 2 +push local 3 +add +pop pointer 1 +pop that 0 +push local 3 +push constant 1 +add +pop local 3 +goto transform.While2 +label transform.EndWhile2 +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 this 1 +push constant 1 +add +pop this 1 +push pointer 0 +push argument 1 +call Board.transform 2 +pop temp 0 +push pointer 0 +call Board.addTile 1 +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 local 0 +push constant 1 +sub +push local 1 +push constant 1 +sub +call Output.moveCursor 2 +pop temp 0 +push constant 6 +call String.new 1 +push constant 43 +call String.appendChar 2 +push constant 45 +call String.appendChar 2 +push constant 45 +call String.appendChar 2 +push constant 45 +call String.appendChar 2 +push constant 45 +call String.appendChar 2 +push constant 43 +call String.appendChar 2 +call Output.printString 1 +pop temp 0 +push local 0 +push constant 4 +add +push local 1 +push constant 1 +sub +call Output.moveCursor 2 +pop temp 0 +push constant 6 +call String.new 1 +push constant 43 +call String.appendChar 2 +push constant 45 +call String.appendChar 2 +push constant 45 +call String.appendChar 2 +push constant 45 +call String.appendChar 2 +push constant 45 +call String.appendChar 2 +push constant 43 +call String.appendChar 2 +call Output.printString 1 +pop temp 0 +push constant 0 +pop local 2 +label draw.While0 +push local 2 +push constant 4 +lt +not +if-goto draw.EndWhile0 +push constant 0 +pop local 3 +push local 0 +push local 2 +add +push local 1 +push constant 1 +sub +call Output.moveCursor 2 +pop temp 0 +push constant 1 +call String.new 1 +push constant 124 +call String.appendChar 2 +call Output.printString 1 +pop temp 0 +push this 0 +push local 2 +add +pop pointer 1 +push that 0 +pop local 4 +label draw.While0.While0 +push local 3 +push constant 4 +lt +not +if-goto draw.While0.EndWhile0 +push local 4 +push local 3 +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 draw.While0.While0 +label draw.While0.EndWhile0 +push constant 1 +call String.new 1 +push constant 124 +call String.appendChar 2 +call Output.printString 1 +pop temp 0 +push local 2 +push constant 1 +add +pop local 2 +goto draw.While0 +label draw.EndWhile0 +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 +push argument 0 +pop pointer 0 +push pointer 0 +call Memory.deAlloc 1 +pop temp 0 +push constant 0 +return |