aboutsummaryrefslogtreecommitdiff
path: root/projects/09/K/Board.vm
diff options
context:
space:
mode:
authorYuchen Pei <me@ypei.me>2018-01-08 16:22:46 +0100
committerYuchen Pei <me@ypei.me>2018-01-08 16:22:46 +0100
commita356d68c1c314cddbd987616f12291fc24bebf37 (patch)
tree4562ca61a2e7fcf7dd5de76b94dc68bfe3c71cd8 /projects/09/K/Board.vm
parent7e4cd1bac23f7cc02d0f14bcc6ef00357377fc2a (diff)
project 9 checkpoint
- no more compiler error - but still some bugs: - tiles get stuck - segment error (possibly due to deep copy?)
Diffstat (limited to 'projects/09/K/Board.vm')
-rw-r--r--projects/09/K/Board.vm1155
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