Files
nand2tetris/projects/Tables/Table.vm
2021-04-21 17:01:42 +03:00

294 lines
4.3 KiB
Plaintext

function Table.new 6
push constant 11
call Memory.alloc 1
pop pointer 0
push constant 5
pop this 2
push constant 8
pop this 4
push constant 11
pop this 3
push constant 11
pop this 5
push constant 22
pop this 6
push this 4
push this 2
call Math.multiply 2
pop this 7
push this 5
push this 6
call Math.multiply 2
pop this 8
push this 8
call Array.new 1
pop this 9
push constant 0
pop local 3
push constant 0
pop local 1
push constant 0
pop local 2
label WHILE_EXP0
push local 3
not
not
if-goto WHILE_END0
push local 2
push this 6
lt
if-goto IF_TRUE0
goto IF_FALSE0
label IF_TRUE0
push local 1
push this 6
call Math.multiply 2
push local 2
add
pop local 0
push local 0
push this 9
add
push local 1
push local 2
push this 2
push local 0
call Cell.new 4
pop temp 0
pop pointer 1
push temp 0
pop that 0
push local 0
push this 9
add
pop pointer 1
push that 0
pop local 5
push local 5
call Cell.draw 1
pop temp 0
push local 2
push constant 1
add
pop local 2
label IF_FALSE0
push local 2
push this 6
eq
if-goto IF_TRUE1
goto IF_FALSE1
label IF_TRUE1
push constant 0
pop local 2
push local 1
push constant 1
add
pop local 1
label IF_FALSE1
push local 1
push this 5
eq
if-goto IF_TRUE2
goto IF_FALSE2
label IF_TRUE2
push constant 0
not
pop local 3
label IF_FALSE2
goto WHILE_EXP0
label WHILE_END0
push constant 26
call String.new 1
push constant 65
call String.appendChar 2
push constant 66
call String.appendChar 2
push constant 67
call String.appendChar 2
push constant 68
call String.appendChar 2
push constant 69
call String.appendChar 2
push constant 70
call String.appendChar 2
push constant 71
call String.appendChar 2
push constant 72
call String.appendChar 2
push constant 73
call String.appendChar 2
push constant 74
call String.appendChar 2
push constant 75
call String.appendChar 2
push constant 76
call String.appendChar 2
push constant 77
call String.appendChar 2
push constant 78
call String.appendChar 2
push constant 79
call String.appendChar 2
push constant 80
call String.appendChar 2
push constant 81
call String.appendChar 2
push constant 82
call String.appendChar 2
push constant 83
call String.appendChar 2
push constant 84
call String.appendChar 2
push constant 85
call String.appendChar 2
push constant 86
call String.appendChar 2
push constant 87
call String.appendChar 2
push constant 88
call String.appendChar 2
push constant 89
call String.appendChar 2
push constant 90
call String.appendChar 2
pop this 10
push pointer 0
call Table.printHeader 1
pop temp 0
push pointer 0
return
function Table.drawTable 1
push argument 0
pop pointer 0
push constant 1
pop local 0
label WHILE_EXP0
push local 0
push this 5
push constant 1
add
lt
not
if-goto WHILE_END0
push local 0
push this 7
call Math.multiply 2
push constant 2
sub
push constant 0
push local 0
push this 7
call Math.multiply 2
push constant 2
sub
push constant 255
call Screen.drawLine 4
pop temp 0
push local 0
push constant 1
add
pop local 0
goto WHILE_EXP0
label WHILE_END0
push constant 1
pop local 0
label WHILE_EXP1
push local 0
push this 6
push constant 1
add
lt
not
if-goto WHILE_END1
push constant 0
push local 0
push this 3
call Math.multiply 2
push constant 1
sub
push constant 511
push local 0
push this 3
call Math.multiply 2
push constant 1
sub
call Screen.drawLine 4
pop temp 0
push local 0
push constant 1
add
pop local 0
goto WHILE_EXP1
label WHILE_END1
push constant 39
push constant 0
push constant 39
push constant 255
call Screen.drawLine 4
pop temp 0
push constant 0
push constant 11
push constant 511
push constant 11
call Screen.drawLine 4
pop temp 0
push constant 0
return
function Table.printHeader 1
push argument 0
pop pointer 0
push constant 0
pop local 0
label WHILE_EXP0
push local 0
push this 6
lt
not
if-goto WHILE_END0
push local 0
push constant 1
add
push constant 1
call Output.moveCursor 2
pop temp 0
push local 0
call Output.printInt 1
pop temp 0
push local 0
push constant 1
add
pop local 0
goto WHILE_EXP0
label WHILE_END0
push constant 0
pop local 0
label WHILE_EXP1
push local 0
push this 5
lt
not
if-goto WHILE_END1
push constant 0
push this 2
push local 0
push constant 1
add
call Math.multiply 2
push constant 2
add
call Output.moveCursor 2
pop temp 0
push this 10
push local 0
call String.charAt 2
call Output.printChar 1
pop temp 0
push local 0
push constant 1
add
pop local 0
goto WHILE_EXP1
label WHILE_END1
push constant 0
return