mirror of
https://github.com/usatiuk/nand2tetris.git
synced 2025-10-29 00:27:49 +01:00
311 lines
3.8 KiB
Plaintext
311 lines
3.8 KiB
Plaintext
function Square.new 0
|
|
push constant 3
|
|
call Memory.alloc 1
|
|
pop pointer 0
|
|
push argument 0
|
|
pop this 0
|
|
push argument 1
|
|
pop this 1
|
|
push argument 2
|
|
pop this 2
|
|
push pointer 0
|
|
call Square.draw 1
|
|
pop temp 0
|
|
push pointer 0
|
|
return
|
|
function Square.dispose 0
|
|
push argument 0
|
|
pop pointer 0
|
|
push pointer 0
|
|
call Memory.deAlloc 1
|
|
pop temp 0
|
|
push constant 0
|
|
return
|
|
function Square.draw 0
|
|
push argument 0
|
|
pop pointer 0
|
|
push constant 0
|
|
not
|
|
call Screen.setColor 1
|
|
pop temp 0
|
|
push this 0
|
|
push this 1
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push this 1
|
|
push this 2
|
|
add
|
|
call Screen.drawRectangle 4
|
|
pop temp 0
|
|
push constant 0
|
|
return
|
|
function Square.erase 0
|
|
push argument 0
|
|
pop pointer 0
|
|
push constant 0
|
|
call Screen.setColor 1
|
|
pop temp 0
|
|
push this 0
|
|
push this 1
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push this 1
|
|
push this 2
|
|
add
|
|
call Screen.drawRectangle 4
|
|
pop temp 0
|
|
push constant 0
|
|
return
|
|
function Square.incSize 0
|
|
push argument 0
|
|
pop pointer 0
|
|
push this 1
|
|
push this 2
|
|
add
|
|
push constant 254
|
|
lt
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push constant 510
|
|
lt
|
|
and
|
|
not
|
|
if-goto IF10
|
|
push pointer 0
|
|
call Square.erase 1
|
|
pop temp 0
|
|
push this 2
|
|
push constant 2
|
|
add
|
|
pop this 2
|
|
push pointer 0
|
|
call Square.draw 1
|
|
pop temp 0
|
|
goto IF11
|
|
label IF10
|
|
label IF11
|
|
push constant 0
|
|
return
|
|
function Square.decSize 0
|
|
push argument 0
|
|
pop pointer 0
|
|
push this 2
|
|
push constant 2
|
|
gt
|
|
not
|
|
if-goto IF20
|
|
push pointer 0
|
|
call Square.erase 1
|
|
pop temp 0
|
|
push this 2
|
|
push constant 2
|
|
sub
|
|
pop this 2
|
|
push pointer 0
|
|
call Square.draw 1
|
|
pop temp 0
|
|
goto IF21
|
|
label IF20
|
|
label IF21
|
|
push constant 0
|
|
return
|
|
function Square.moveUp 0
|
|
push argument 0
|
|
pop pointer 0
|
|
push this 1
|
|
push constant 1
|
|
gt
|
|
not
|
|
if-goto IF30
|
|
push constant 0
|
|
call Screen.setColor 1
|
|
pop temp 0
|
|
push this 0
|
|
push this 1
|
|
push this 2
|
|
add
|
|
push constant 1
|
|
sub
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push this 1
|
|
push this 2
|
|
add
|
|
call Screen.drawRectangle 4
|
|
pop temp 0
|
|
push this 1
|
|
push constant 2
|
|
sub
|
|
pop this 1
|
|
push constant 0
|
|
not
|
|
call Screen.setColor 1
|
|
pop temp 0
|
|
push this 0
|
|
push this 1
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push this 1
|
|
push constant 1
|
|
add
|
|
call Screen.drawRectangle 4
|
|
pop temp 0
|
|
goto IF31
|
|
label IF30
|
|
label IF31
|
|
push constant 0
|
|
return
|
|
function Square.moveDown 0
|
|
push argument 0
|
|
pop pointer 0
|
|
push this 1
|
|
push this 2
|
|
add
|
|
push constant 254
|
|
lt
|
|
not
|
|
if-goto IF40
|
|
push constant 0
|
|
call Screen.setColor 1
|
|
pop temp 0
|
|
push this 0
|
|
push this 1
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push this 1
|
|
push constant 1
|
|
add
|
|
call Screen.drawRectangle 4
|
|
pop temp 0
|
|
push this 1
|
|
push constant 2
|
|
add
|
|
pop this 1
|
|
push constant 0
|
|
not
|
|
call Screen.setColor 1
|
|
pop temp 0
|
|
push this 0
|
|
push this 1
|
|
push this 2
|
|
add
|
|
push constant 1
|
|
sub
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push this 1
|
|
push this 2
|
|
add
|
|
call Screen.drawRectangle 4
|
|
pop temp 0
|
|
goto IF41
|
|
label IF40
|
|
label IF41
|
|
push constant 0
|
|
return
|
|
function Square.moveLeft 0
|
|
push argument 0
|
|
pop pointer 0
|
|
push this 0
|
|
push constant 1
|
|
gt
|
|
not
|
|
if-goto IF50
|
|
push constant 0
|
|
call Screen.setColor 1
|
|
pop temp 0
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push constant 1
|
|
sub
|
|
push this 1
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push this 1
|
|
push this 2
|
|
add
|
|
call Screen.drawRectangle 4
|
|
pop temp 0
|
|
push this 0
|
|
push constant 2
|
|
sub
|
|
pop this 0
|
|
push constant 0
|
|
not
|
|
call Screen.setColor 1
|
|
pop temp 0
|
|
push this 0
|
|
push this 1
|
|
push this 0
|
|
push constant 1
|
|
add
|
|
push this 1
|
|
push this 2
|
|
add
|
|
call Screen.drawRectangle 4
|
|
pop temp 0
|
|
goto IF51
|
|
label IF50
|
|
label IF51
|
|
push constant 0
|
|
return
|
|
function Square.moveRight 0
|
|
push argument 0
|
|
pop pointer 0
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push constant 510
|
|
lt
|
|
not
|
|
if-goto IF60
|
|
push constant 0
|
|
call Screen.setColor 1
|
|
pop temp 0
|
|
push this 0
|
|
push this 1
|
|
push this 0
|
|
push constant 1
|
|
add
|
|
push this 1
|
|
push this 2
|
|
add
|
|
call Screen.drawRectangle 4
|
|
pop temp 0
|
|
push this 0
|
|
push constant 2
|
|
add
|
|
pop this 0
|
|
push constant 0
|
|
not
|
|
call Screen.setColor 1
|
|
pop temp 0
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push constant 1
|
|
sub
|
|
push this 1
|
|
push this 0
|
|
push this 2
|
|
add
|
|
push this 1
|
|
push this 2
|
|
add
|
|
call Screen.drawRectangle 4
|
|
pop temp 0
|
|
goto IF61
|
|
label IF60
|
|
label IF61
|
|
push constant 0
|
|
return
|