nand2tetris/projects/09/TicTacToe/Main.vm

322 lines
5.3 KiB
Plaintext

function Main.main 6
push constant 0
pop local 4
call Board.new 0
pop local 2
call Draw.Grid 0
pop temp 0
label WHILE_EXP0
push local 4
not
not
if-goto WHILE_END0
label WHILE_EXP1
push local 3
push constant 0
eq
not
if-goto WHILE_END1
call Keyboard.keyPressed 0
pop local 3
push constant 5
call Sys.wait 1
pop temp 0
goto WHILE_EXP1
label WHILE_END1
push constant 1
neg
pop local 1
push local 3
push constant 81
eq
if-goto IF_TRUE0
goto IF_FALSE0
label IF_TRUE0
push constant 0
not
pop local 4
label IF_FALSE0
push local 3
push constant 49
eq
if-goto IF_TRUE1
goto IF_FALSE1
label IF_TRUE1
push constant 0
pop local 1
label IF_FALSE1
push local 3
push constant 50
eq
if-goto IF_TRUE2
goto IF_FALSE2
label IF_TRUE2
push constant 1
pop local 1
label IF_FALSE2
push local 3
push constant 51
eq
if-goto IF_TRUE3
goto IF_FALSE3
label IF_TRUE3
push constant 2
pop local 1
label IF_FALSE3
push local 3
push constant 52
eq
if-goto IF_TRUE4
goto IF_FALSE4
label IF_TRUE4
push constant 3
pop local 1
label IF_FALSE4
push local 3
push constant 53
eq
if-goto IF_TRUE5
goto IF_FALSE5
label IF_TRUE5
push constant 4
pop local 1
label IF_FALSE5
push local 3
push constant 54
eq
if-goto IF_TRUE6
goto IF_FALSE6
label IF_TRUE6
push constant 5
pop local 1
label IF_FALSE6
push local 3
push constant 55
eq
if-goto IF_TRUE7
goto IF_FALSE7
label IF_TRUE7
push constant 6
pop local 1
label IF_FALSE7
push local 3
push constant 56
eq
if-goto IF_TRUE8
goto IF_FALSE8
label IF_TRUE8
push constant 7
pop local 1
label IF_FALSE8
push local 3
push constant 57
eq
if-goto IF_TRUE9
goto IF_FALSE9
label IF_TRUE9
push constant 8
pop local 1
label IF_FALSE9
push local 3
push constant 48
gt
push local 3
push constant 58
lt
and
if-goto IF_TRUE10
goto IF_FALSE10
label IF_TRUE10
push local 1
push constant 3
push local 1
push constant 3
call Math.divide 2
call Math.multiply 2
sub
pop local 0
push local 2
push local 1
push constant 3
call Math.divide 2
push local 0
call Board.play 3
pop local 5
push local 5
if-goto IF_TRUE11
goto IF_FALSE11
label IF_TRUE11
call Screen.clearScreen 0
pop temp 0
push local 2
call Board.winner 1
pop local 0
push local 0
push constant 1
eq
if-goto IF_TRUE12
goto IF_FALSE12
label IF_TRUE12
push constant 24
call String.new 1
push constant 67
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 110
call String.appendChar 2
push constant 103
call String.appendChar 2
push constant 114
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 116
call String.appendChar 2
push constant 117
call String.appendChar 2
push constant 108
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 116
call String.appendChar 2
push constant 105
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 110
call String.appendChar 2
push constant 115
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 80
call String.appendChar 2
push constant 108
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 121
call String.appendChar 2
push constant 101
call String.appendChar 2
push constant 114
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 49
call String.appendChar 2
call Output.printString 1
pop temp 0
label IF_FALSE12
push local 0
push constant 2
eq
if-goto IF_TRUE13
goto IF_FALSE13
label IF_TRUE13
push constant 24
call String.new 1
push constant 67
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 110
call String.appendChar 2
push constant 103
call String.appendChar 2
push constant 114
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 116
call String.appendChar 2
push constant 117
call String.appendChar 2
push constant 108
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 116
call String.appendChar 2
push constant 105
call String.appendChar 2
push constant 111
call String.appendChar 2
push constant 110
call String.appendChar 2
push constant 115
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 80
call String.appendChar 2
push constant 108
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 121
call String.appendChar 2
push constant 101
call String.appendChar 2
push constant 114
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 50
call String.appendChar 2
call Output.printString 1
pop temp 0
label IF_FALSE13
push local 0
push constant 0
eq
if-goto IF_TRUE14
goto IF_FALSE14
label IF_TRUE14
push constant 14
call String.new 1
push constant 73
call String.appendChar 2
push constant 116
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 119
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 115
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 32
call String.appendChar 2
push constant 100
call String.appendChar 2
push constant 114
call String.appendChar 2
push constant 97
call String.appendChar 2
push constant 119
call String.appendChar 2
push constant 33
call String.appendChar 2
call Output.printString 1
pop temp 0
label IF_FALSE14
push constant 0
not
pop local 4
label IF_FALSE11
push constant 0
pop local 3
label IF_FALSE10
goto WHILE_EXP0
label WHILE_END0
push constant 0
return