diff --git a/projects/09/Average/Main.vm b/projects/09/Average/Main.vm new file mode 100644 index 0000000..d5a4e07 --- /dev/null +++ b/projects/09/Average/Main.vm @@ -0,0 +1,149 @@ +function Main.main 4 +push constant 18 +call String.new 1 +push constant 72 +call String.appendChar 2 +push constant 111 +call String.appendChar 2 +push constant 119 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 109 +call String.appendChar 2 +push constant 97 +call String.appendChar 2 +push constant 110 +call String.appendChar 2 +push constant 121 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 110 +call String.appendChar 2 +push constant 117 +call String.appendChar 2 +push constant 109 +call String.appendChar 2 +push constant 98 +call String.appendChar 2 +push constant 101 +call String.appendChar 2 +push constant 114 +call String.appendChar 2 +push constant 115 +call String.appendChar 2 +push constant 63 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +call Keyboard.readInt 1 +pop local 1 +push local 1 +call Array.new 1 +pop local 0 +push constant 0 +pop local 2 +label WHILE_EXP0 +push local 2 +push local 1 +lt +not +if-goto WHILE_END0 +push local 2 +push local 0 +add +push constant 16 +call String.new 1 +push constant 69 +call String.appendChar 2 +push constant 110 +call String.appendChar 2 +push constant 116 +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 97 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 110 +call String.appendChar 2 +push constant 117 +call String.appendChar 2 +push constant 109 +call String.appendChar 2 +push constant 98 +call String.appendChar 2 +push constant 101 +call String.appendChar 2 +push constant 114 +call String.appendChar 2 +push constant 58 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +call Keyboard.readInt 1 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 3 +push local 2 +push local 0 +add +pop pointer 1 +push that 0 +add +pop local 3 +push local 2 +push constant 1 +add +pop local 2 +goto WHILE_EXP0 +label WHILE_END0 +push constant 15 +call String.new 1 +push constant 84 +call String.appendChar 2 +push constant 104 +call String.appendChar 2 +push constant 101 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 97 +call String.appendChar 2 +push constant 118 +call String.appendChar 2 +push constant 101 +call String.appendChar 2 +push constant 114 +call String.appendChar 2 +push constant 97 +call String.appendChar 2 +push constant 103 +call String.appendChar 2 +push constant 101 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 105 +call String.appendChar 2 +push constant 115 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +call Output.printString 1 +pop temp 0 +push local 3 +push local 1 +call Math.divide 2 +call Output.printInt 1 +pop temp 0 +push constant 0 +return diff --git a/projects/09/Fraction/Fraction.vm b/projects/09/Fraction/Fraction.vm new file mode 100644 index 0000000..2709f5e --- /dev/null +++ b/projects/09/Fraction/Fraction.vm @@ -0,0 +1,116 @@ +function Fraction.new 0 +push constant 2 +call Memory.alloc 1 +pop pointer 0 +push argument 0 +pop this 0 +push argument 1 +pop this 1 +push pointer 0 +call Fraction.reduce 1 +pop temp 0 +push pointer 0 +return +function Fraction.reduce 1 +push argument 0 +pop pointer 0 +push this 0 +push this 1 +call Fraction.gcd 2 +pop local 0 +push local 0 +push constant 1 +gt +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push this 0 +push local 0 +call Math.divide 2 +pop this 0 +push this 1 +push local 0 +call Math.divide 2 +pop this 1 +label IF_FALSE0 +push constant 0 +return +function Fraction.getNumerator 0 +push argument 0 +pop pointer 0 +push this 0 +return +function Fraction.getDenominator 0 +push argument 0 +pop pointer 0 +push this 1 +return +function Fraction.plus 1 +push argument 0 +pop pointer 0 +push this 0 +push argument 1 +call Fraction.getDenominator 1 +call Math.multiply 2 +push argument 1 +call Fraction.getNumerator 1 +push this 1 +call Math.multiply 2 +add +pop local 0 +push local 0 +push this 1 +push argument 1 +call Fraction.getDenominator 1 +call Math.multiply 2 +call Fraction.new 2 +return +function Fraction.dispose 0 +push argument 0 +pop pointer 0 +push pointer 0 +call Memory.deAlloc 1 +pop temp 0 +push constant 0 +return +function Fraction.print 0 +push argument 0 +pop pointer 0 +push this 0 +call Output.printInt 1 +pop temp 0 +push constant 1 +call String.new 1 +push constant 47 +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 Fraction.gcd 1 +label WHILE_EXP0 +push argument 1 +push constant 0 +eq +not +not +if-goto WHILE_END0 +push argument 0 +push argument 1 +push argument 0 +push argument 1 +call Math.divide 2 +call Math.multiply 2 +sub +pop local 0 +push argument 1 +pop argument 0 +push local 0 +pop argument 1 +goto WHILE_EXP0 +label WHILE_END0 +push argument 0 +return diff --git a/projects/09/Fraction/Main.vm b/projects/09/Fraction/Main.vm new file mode 100644 index 0000000..55e9442 --- /dev/null +++ b/projects/09/Fraction/Main.vm @@ -0,0 +1,18 @@ +function Main.main 3 +push constant 2 +push constant 3 +call Fraction.new 2 +pop local 0 +push constant 1 +push constant 5 +call Fraction.new 2 +pop local 1 +push local 0 +push local 1 +call Fraction.plus 2 +pop local 2 +push local 2 +call Fraction.print 1 +pop temp 0 +push constant 0 +return diff --git a/projects/09/List/List.vm b/projects/09/List/List.vm new file mode 100644 index 0000000..1a665ce --- /dev/null +++ b/projects/09/List/List.vm @@ -0,0 +1,65 @@ +function List.new 0 +push constant 2 +call Memory.alloc 1 +pop pointer 0 +push argument 0 +pop this 0 +push argument 1 +pop this 1 +push pointer 0 +return +function List.getData 0 +push argument 0 +pop pointer 0 +push this 0 +return +function List.getNext 0 +push argument 0 +pop pointer 0 +push this 1 +return +function List.print 1 +push argument 0 +pop pointer 0 +push pointer 0 +pop local 0 +label WHILE_EXP0 +push local 0 +push constant 0 +eq +not +not +if-goto WHILE_END0 +push local 0 +call List.getData 1 +call Output.printInt 1 +pop temp 0 +push constant 32 +call Output.printChar 1 +pop temp 0 +push local 0 +call List.getNext 1 +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +push constant 0 +return +function List.dispose 0 +push argument 0 +pop pointer 0 +push this 1 +push constant 0 +eq +not +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push this 1 +call List.dispose 1 +pop temp 0 +label IF_FALSE0 +push pointer 0 +call Memory.deAlloc 1 +pop temp 0 +push constant 0 +return diff --git a/projects/09/List/Main.vm b/projects/09/List/Main.vm new file mode 100644 index 0000000..b798eda --- /dev/null +++ b/projects/09/List/Main.vm @@ -0,0 +1,19 @@ +function Main.main 1 +push constant 5 +push constant 0 +call List.new 2 +pop local 0 +push constant 2 +push constant 3 +push local 0 +call List.new 2 +call List.new 2 +pop local 0 +push local 0 +call List.print 1 +pop temp 0 +push local 0 +call List.dispose 1 +pop temp 0 +push constant 0 +return diff --git a/projects/09/Square/Main.vm b/projects/09/Square/Main.vm new file mode 100644 index 0000000..a3b355b --- /dev/null +++ b/projects/09/Square/Main.vm @@ -0,0 +1,11 @@ +function Main.main 1 +call SquareGame.new 0 +pop local 0 +push local 0 +call SquareGame.run 1 +pop temp 0 +push local 0 +call SquareGame.dispose 1 +pop temp 0 +push constant 0 +return diff --git a/projects/09/Square/Square.vm b/projects/09/Square/Square.vm new file mode 100644 index 0000000..e3932bc --- /dev/null +++ b/projects/09/Square/Square.vm @@ -0,0 +1,304 @@ +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 +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +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 +label IF_FALSE0 +push constant 0 +return +function Square.decSize 0 +push argument 0 +pop pointer 0 +push this 2 +push constant 2 +gt +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +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 +label IF_FALSE0 +push constant 0 +return +function Square.moveUp 0 +push argument 0 +pop pointer 0 +push this 1 +push constant 1 +gt +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +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 +label IF_FALSE0 +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 +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +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 +label IF_FALSE0 +push constant 0 +return +function Square.moveLeft 0 +push argument 0 +pop pointer 0 +push this 0 +push constant 1 +gt +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +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 +label IF_FALSE0 +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 +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +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 +label IF_FALSE0 +push constant 0 +return diff --git a/projects/09/Square/SquareGame.jack b/projects/09/Square/SquareGame.jack index f192ceb..0bb64f1 100644 --- a/projects/09/Square/SquareGame.jack +++ b/projects/09/Square/SquareGame.jack @@ -16,7 +16,7 @@ class SquareGame { field Square square; // the square of this game - field int direction; // the square's current direction: + field int direction; // the square's current direction: // 0=none, 1=up, 2=down, 3=left, 4=right /** Constructs a new Square Game. */ @@ -50,7 +50,7 @@ class SquareGame { var char key; // the key currently pressed by the user var boolean exit; let exit = false; - + while (~exit) { // waits for a key to be pressed while (key = 0) { diff --git a/projects/09/Square/SquareGame.vm b/projects/09/Square/SquareGame.vm new file mode 100644 index 0000000..8444dbc --- /dev/null +++ b/projects/09/Square/SquareGame.vm @@ -0,0 +1,179 @@ +function SquareGame.new 0 +push constant 2 +call Memory.alloc 1 +pop pointer 0 +push constant 0 +push constant 0 +push constant 30 +call Square.new 3 +pop this 0 +push constant 0 +pop this 1 +push pointer 0 +return +function SquareGame.dispose 0 +push argument 0 +pop pointer 0 +push this 0 +call Square.dispose 1 +pop temp 0 +push pointer 0 +call Memory.deAlloc 1 +pop temp 0 +push constant 0 +return +function SquareGame.moveSquare 0 +push argument 0 +pop pointer 0 +push this 1 +push constant 1 +eq +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push this 0 +call Square.moveUp 1 +pop temp 0 +label IF_FALSE0 +push this 1 +push constant 2 +eq +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push this 0 +call Square.moveDown 1 +pop temp 0 +label IF_FALSE1 +push this 1 +push constant 3 +eq +if-goto IF_TRUE2 +goto IF_FALSE2 +label IF_TRUE2 +push this 0 +call Square.moveLeft 1 +pop temp 0 +label IF_FALSE2 +push this 1 +push constant 4 +eq +if-goto IF_TRUE3 +goto IF_FALSE3 +label IF_TRUE3 +push this 0 +call Square.moveRight 1 +pop temp 0 +label IF_FALSE3 +push constant 5 +call Sys.wait 1 +pop temp 0 +push constant 0 +return +function SquareGame.run 2 +push argument 0 +pop pointer 0 +push constant 0 +pop local 1 +label WHILE_EXP0 +push local 1 +not +not +if-goto WHILE_END0 +label WHILE_EXP1 +push local 0 +push constant 0 +eq +not +if-goto WHILE_END1 +call Keyboard.keyPressed 0 +pop local 0 +push pointer 0 +call SquareGame.moveSquare 1 +pop temp 0 +goto WHILE_EXP1 +label WHILE_END1 +push local 0 +push constant 81 +eq +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push constant 0 +not +pop local 1 +label IF_FALSE0 +push local 0 +push constant 90 +eq +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push this 0 +call Square.decSize 1 +pop temp 0 +label IF_FALSE1 +push local 0 +push constant 88 +eq +if-goto IF_TRUE2 +goto IF_FALSE2 +label IF_TRUE2 +push this 0 +call Square.incSize 1 +pop temp 0 +label IF_FALSE2 +push local 0 +push constant 131 +eq +if-goto IF_TRUE3 +goto IF_FALSE3 +label IF_TRUE3 +push constant 1 +pop this 1 +label IF_FALSE3 +push local 0 +push constant 133 +eq +if-goto IF_TRUE4 +goto IF_FALSE4 +label IF_TRUE4 +push constant 2 +pop this 1 +label IF_FALSE4 +push local 0 +push constant 130 +eq +if-goto IF_TRUE5 +goto IF_FALSE5 +label IF_TRUE5 +push constant 3 +pop this 1 +label IF_FALSE5 +push local 0 +push constant 132 +eq +if-goto IF_TRUE6 +goto IF_FALSE6 +label IF_TRUE6 +push constant 4 +pop this 1 +label IF_FALSE6 +label WHILE_EXP2 +push local 0 +push constant 0 +eq +not +not +if-goto WHILE_END2 +call Keyboard.keyPressed 0 +pop local 0 +push pointer 0 +call SquareGame.moveSquare 1 +pop temp 0 +goto WHILE_EXP2 +label WHILE_END2 +goto WHILE_EXP0 +label WHILE_END0 +push constant 0 +return