summaryrefslogtreecommitdiff
path: root/projects/09/K/Board.vm
diff options
context:
space:
mode:
Diffstat (limited to 'projects/09/K/Board.vm')
-rw-r--r--projects/09/K/Board.vm149
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