Anpassungen Path-Struktur
This commit is contained in:
7
original/projects/0/file.txt
Normal file
7
original/projects/0/file.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
There is no need to modify the contents of this file.
|
||||
All you have to do is submit it as is, following the
|
||||
Project 0 guidelines in your course website.
|
||||
|
||||
It is possible that the Nand to Tetris course that
|
||||
you are taking does not require a project 0 submission.
|
||||
That's OK.
|
||||
5
original/projects/1/And.cmp
Normal file
5
original/projects/1/And.cmp
Normal file
@@ -0,0 +1,5 @@
|
||||
| a | b |out|
|
||||
| 0 | 0 | 0 |
|
||||
| 0 | 1 | 0 |
|
||||
| 1 | 0 | 0 |
|
||||
| 1 | 1 | 1 |
|
||||
15
original/projects/1/And.hdl
Normal file
15
original/projects/1/And.hdl
Normal file
@@ -0,0 +1,15 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/And.hdl
|
||||
/**
|
||||
* And gate:
|
||||
* if (a and b) out = 1, else out = 0
|
||||
*/
|
||||
CHIP And {
|
||||
IN a, b;
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
29
original/projects/1/And.tst
Normal file
29
original/projects/1/And.tst
Normal file
@@ -0,0 +1,29 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/And.tst
|
||||
|
||||
load And.hdl,
|
||||
output-file And.out,
|
||||
compare-to And.cmp,
|
||||
output-list a b out;
|
||||
|
||||
set a 0,
|
||||
set b 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 0,
|
||||
set b 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 1,
|
||||
set b 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 1,
|
||||
set b 1,
|
||||
eval,
|
||||
output;
|
||||
7
original/projects/1/And16.cmp
Normal file
7
original/projects/1/And16.cmp
Normal file
@@ -0,0 +1,7 @@
|
||||
| a | b | out |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 |
|
||||
| 0000000000000000 | 1111111111111111 | 0000000000000000 |
|
||||
| 1111111111111111 | 1111111111111111 | 1111111111111111 |
|
||||
| 1010101010101010 | 0101010101010101 | 0000000000000000 |
|
||||
| 0011110011000011 | 0000111111110000 | 0000110011000000 |
|
||||
| 0001001000110100 | 1001100001110110 | 0001000000110100 |
|
||||
16
original/projects/1/And16.hdl
Normal file
16
original/projects/1/And16.hdl
Normal file
@@ -0,0 +1,16 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/And16.hdl
|
||||
/**
|
||||
* 16-bit And gate:
|
||||
* for i = 0, ..., 15:
|
||||
* out[i] = a[i] And b[i]
|
||||
*/
|
||||
CHIP And16 {
|
||||
IN a[16], b[16];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
39
original/projects/1/And16.tst
Normal file
39
original/projects/1/And16.tst
Normal file
@@ -0,0 +1,39 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/And16.tst
|
||||
|
||||
load And16.hdl,
|
||||
output-file And16.out,
|
||||
compare-to And16.cmp,
|
||||
output-list a%B1.16.1 b%B1.16.1 out%B1.16.1;
|
||||
|
||||
set a %B0000000000000000,
|
||||
set b %B0000000000000000,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B0000000000000000,
|
||||
set b %B1111111111111111,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B1111111111111111,
|
||||
set b %B1111111111111111,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B1010101010101010,
|
||||
set b %B0101010101010101,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B0011110011000011,
|
||||
set b %B0000111111110000,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B0001001000110100,
|
||||
set b %B1001100001110110,
|
||||
eval,
|
||||
output;
|
||||
5
original/projects/1/DMux.cmp
Normal file
5
original/projects/1/DMux.cmp
Normal file
@@ -0,0 +1,5 @@
|
||||
|in |sel| a | b |
|
||||
| 0 | 0 | 0 | 0 |
|
||||
| 0 | 1 | 0 | 0 |
|
||||
| 1 | 0 | 1 | 0 |
|
||||
| 1 | 1 | 0 | 1 |
|
||||
16
original/projects/1/DMux.hdl
Normal file
16
original/projects/1/DMux.hdl
Normal file
@@ -0,0 +1,16 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/DMux.hdl
|
||||
/**
|
||||
* Demultiplexor:
|
||||
* [a, b] = [in, 0] if sel = 0
|
||||
* [0, in] if sel = 1
|
||||
*/
|
||||
CHIP DMux {
|
||||
IN in, sel;
|
||||
OUT a, b;
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
27
original/projects/1/DMux.tst
Normal file
27
original/projects/1/DMux.tst
Normal file
@@ -0,0 +1,27 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/DMux.tst
|
||||
|
||||
load DMux.hdl,
|
||||
output-file DMux.out,
|
||||
compare-to DMux.cmp,
|
||||
output-list in sel a b;
|
||||
|
||||
set in 0,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in 1,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
9
original/projects/1/DMux4Way.cmp
Normal file
9
original/projects/1/DMux4Way.cmp
Normal file
@@ -0,0 +1,9 @@
|
||||
|in | sel | a | b | c | d |
|
||||
| 0 | 00 | 0 | 0 | 0 | 0 |
|
||||
| 0 | 01 | 0 | 0 | 0 | 0 |
|
||||
| 0 | 10 | 0 | 0 | 0 | 0 |
|
||||
| 0 | 11 | 0 | 0 | 0 | 0 |
|
||||
| 1 | 00 | 1 | 0 | 0 | 0 |
|
||||
| 1 | 01 | 0 | 1 | 0 | 0 |
|
||||
| 1 | 10 | 0 | 0 | 1 | 0 |
|
||||
| 1 | 11 | 0 | 0 | 0 | 1 |
|
||||
18
original/projects/1/DMux4Way.hdl
Normal file
18
original/projects/1/DMux4Way.hdl
Normal file
@@ -0,0 +1,18 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/DMux4Way.hdl
|
||||
/**
|
||||
* 4-way demultiplexor:
|
||||
* [a, b, c, d] = [in, 0, 0, 0] if sel = 00
|
||||
* [0, in, 0, 0] if sel = 01
|
||||
* [0, 0, in, 0] if sel = 10
|
||||
* [0, 0, 0, in] if sel = 11
|
||||
*/
|
||||
CHIP DMux4Way {
|
||||
IN in, sel[2];
|
||||
OUT a, b, c, d;
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
43
original/projects/1/DMux4Way.tst
Normal file
43
original/projects/1/DMux4Way.tst
Normal file
@@ -0,0 +1,43 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/DMux4Way.tst
|
||||
|
||||
load DMux4Way.hdl,
|
||||
output-file DMux4Way.out,
|
||||
compare-to DMux4Way.cmp,
|
||||
output-list in sel%B2.2.2 a b c d;
|
||||
|
||||
set in 0,
|
||||
set sel %B00,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B01,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B10,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B11,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in 1,
|
||||
set sel %B00,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B01,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B10,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B11,
|
||||
eval,
|
||||
output;
|
||||
17
original/projects/1/DMux8Way.cmp
Normal file
17
original/projects/1/DMux8Way.cmp
Normal file
@@ -0,0 +1,17 @@
|
||||
|in | sel | a | b | c | d | e | f | g | h |
|
||||
| 0 | 000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 0 | 001 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 0 | 010 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 0 | 011 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 0 | 101 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 0 | 110 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 0 | 111 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 1 | 000 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 1 | 001 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 1 | 010 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
|
||||
| 1 | 011 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
|
||||
| 1 | 100 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
|
||||
| 1 | 101 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
|
||||
| 1 | 110 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
|
||||
| 1 | 111 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
|
||||
22
original/projects/1/DMux8Way.hdl
Normal file
22
original/projects/1/DMux8Way.hdl
Normal file
@@ -0,0 +1,22 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/DMux8Way.hdl
|
||||
/**
|
||||
* 8-way demultiplexor:
|
||||
* [a, b, c, d, e, f, g, h] = [in, 0, 0, 0, 0, 0, 0, 0] if sel = 000
|
||||
* [0, in, 0, 0, 0, 0, 0, 0] if sel = 001
|
||||
* [0, 0, in, 0, 0, 0, 0, 0] if sel = 010
|
||||
* [0, 0, 0, in, 0, 0, 0, 0] if sel = 011
|
||||
* [0, 0, 0, 0, in, 0, 0, 0] if sel = 100
|
||||
* [0, 0, 0, 0, 0, in, 0, 0] if sel = 101
|
||||
* [0, 0, 0, 0, 0, 0, in, 0] if sel = 110
|
||||
* [0, 0, 0, 0, 0, 0, 0, in] if sel = 111
|
||||
*/
|
||||
CHIP DMux8Way {
|
||||
IN in, sel[3];
|
||||
OUT a, b, c, d, e, f, g, h;
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
75
original/projects/1/DMux8Way.tst
Normal file
75
original/projects/1/DMux8Way.tst
Normal file
@@ -0,0 +1,75 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/DMux8Way.tst
|
||||
|
||||
load DMux8Way.hdl,
|
||||
output-file DMux8Way.out,
|
||||
compare-to DMux8Way.cmp,
|
||||
output-list in sel%B2.3.2 a b c d e f g h;
|
||||
|
||||
set in 0,
|
||||
set sel %B000,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B001,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B010,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B011,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B100,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B101,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B110,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B111,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in 1,
|
||||
set sel %B000,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B001,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B010,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B011,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B100,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B101,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B110,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel %B111,
|
||||
eval,
|
||||
output;
|
||||
9
original/projects/1/Mux.cmp
Normal file
9
original/projects/1/Mux.cmp
Normal file
@@ -0,0 +1,9 @@
|
||||
| a | b |sel|out|
|
||||
| 0 | 0 | 0 | 0 |
|
||||
| 0 | 0 | 1 | 0 |
|
||||
| 0 | 1 | 0 | 0 |
|
||||
| 0 | 1 | 1 | 1 |
|
||||
| 1 | 0 | 0 | 1 |
|
||||
| 1 | 0 | 1 | 0 |
|
||||
| 1 | 1 | 0 | 1 |
|
||||
| 1 | 1 | 1 | 1 |
|
||||
15
original/projects/1/Mux.hdl
Normal file
15
original/projects/1/Mux.hdl
Normal file
@@ -0,0 +1,15 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Mux.hdl
|
||||
/**
|
||||
* Multiplexor:
|
||||
* if (sel = 0) out = a, else out = b
|
||||
*/
|
||||
CHIP Mux {
|
||||
IN a, b, sel;
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
49
original/projects/1/Mux.tst
Normal file
49
original/projects/1/Mux.tst
Normal file
@@ -0,0 +1,49 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Mux.tst
|
||||
|
||||
load Mux.hdl,
|
||||
output-file Mux.out,
|
||||
compare-to Mux.cmp,
|
||||
output-list a b sel out;
|
||||
|
||||
set a 0,
|
||||
set b 0,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 0,
|
||||
set b 1,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 1,
|
||||
set b 0,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 1,
|
||||
set b 1,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
9
original/projects/1/Mux16.cmp
Normal file
9
original/projects/1/Mux16.cmp
Normal file
@@ -0,0 +1,9 @@
|
||||
| a | b |sel| out |
|
||||
| 0000000000000000 | 0000000000000000 | 0 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 1 | 0000000000000000 |
|
||||
| 0000000000000000 | 0001001000110100 | 0 | 0000000000000000 |
|
||||
| 0000000000000000 | 0001001000110100 | 1 | 0001001000110100 |
|
||||
| 1001100001110110 | 0000000000000000 | 0 | 1001100001110110 |
|
||||
| 1001100001110110 | 0000000000000000 | 1 | 0000000000000000 |
|
||||
| 1010101010101010 | 0101010101010101 | 0 | 1010101010101010 |
|
||||
| 1010101010101010 | 0101010101010101 | 1 | 0101010101010101 |
|
||||
16
original/projects/1/Mux16.hdl
Normal file
16
original/projects/1/Mux16.hdl
Normal file
@@ -0,0 +1,16 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Mux16.hdl
|
||||
/**
|
||||
* 16-bit multiplexor:
|
||||
* for i = 0, ..., 15:
|
||||
* if (sel = 0) out[i] = a[i], else out[i] = b[i]
|
||||
*/
|
||||
CHIP Mux16 {
|
||||
IN a[16], b[16], sel;
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
49
original/projects/1/Mux16.tst
Normal file
49
original/projects/1/Mux16.tst
Normal file
@@ -0,0 +1,49 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Mux16.tst
|
||||
|
||||
load Mux16.hdl,
|
||||
output-file Mux16.out,
|
||||
compare-to Mux16.cmp,
|
||||
output-list a%B1.16.1 b%B1.16.1 sel out%B1.16.1;
|
||||
|
||||
set a 0,
|
||||
set b 0,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B0000000000000000,
|
||||
set b %B0001001000110100,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B1001100001110110,
|
||||
set b %B0000000000000000,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B1010101010101010,
|
||||
set b %B0101010101010101,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
9
original/projects/1/Mux4Way16.cmp
Normal file
9
original/projects/1/Mux4Way16.cmp
Normal file
@@ -0,0 +1,9 @@
|
||||
| a | b | c | d | sel | out |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 00 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 01 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 10 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 11 | 0000000000000000 |
|
||||
| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 00 | 0001001000110100 |
|
||||
| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 01 | 1001100001110110 |
|
||||
| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 10 | 1010101010101010 |
|
||||
| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 11 | 0101010101010101 |
|
||||
18
original/projects/1/Mux4Way16.hdl
Normal file
18
original/projects/1/Mux4Way16.hdl
Normal file
@@ -0,0 +1,18 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Mux4Way16.hdl
|
||||
/**
|
||||
* 4-way 16-bit multiplexor:
|
||||
* out = a if sel = 00
|
||||
* b if sel = 01
|
||||
* c if sel = 10
|
||||
* d if sel = 11
|
||||
*/
|
||||
CHIP Mux4Way16 {
|
||||
IN a[16], b[16], c[16], d[16], sel[2];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
49
original/projects/1/Mux4Way16.tst
Normal file
49
original/projects/1/Mux4Way16.tst
Normal file
@@ -0,0 +1,49 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Mux4Way16.tst
|
||||
|
||||
load Mux4Way16.hdl,
|
||||
output-file Mux4Way16.out,
|
||||
compare-to Mux4Way16.cmp,
|
||||
output-list a%B1.16.1 b%B1.16.1 c%B1.16.1 d%B1.16.1 sel%B2.2.2 out%B1.16.1;
|
||||
|
||||
set a 0,
|
||||
set b 0,
|
||||
set c 0,
|
||||
set d 0,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 2,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 3,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B0001001000110100,
|
||||
set b %B1001100001110110,
|
||||
set c %B1010101010101010,
|
||||
set d %B0101010101010101,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 2,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 3,
|
||||
eval,
|
||||
output;
|
||||
17
original/projects/1/Mux8Way16.cmp
Normal file
17
original/projects/1/Mux8Way16.cmp
Normal file
@@ -0,0 +1,17 @@
|
||||
| a | b | c | d | e | f | g | h | sel | out |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 000 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 001 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 010 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 011 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 100 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 101 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 110 | 0000000000000000 |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 111 | 0000000000000000 |
|
||||
| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 000 | 0001001000110100 |
|
||||
| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 001 | 0010001101000101 |
|
||||
| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 010 | 0011010001010110 |
|
||||
| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 011 | 0100010101100111 |
|
||||
| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 100 | 0101011001111000 |
|
||||
| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 101 | 0110011110001001 |
|
||||
| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 110 | 0111100010011010 |
|
||||
| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 111 | 1000100110101011 |
|
||||
24
original/projects/1/Mux8Way16.hdl
Normal file
24
original/projects/1/Mux8Way16.hdl
Normal file
@@ -0,0 +1,24 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Mux8Way16.hdl
|
||||
/**
|
||||
* 8-way 16-bit multiplexor:
|
||||
* out = a if sel = 000
|
||||
* b if sel = 001
|
||||
* c if sel = 010
|
||||
* d if sel = 011
|
||||
* e if sel = 100
|
||||
* f if sel = 101
|
||||
* g if sel = 110
|
||||
* h if sel = 111
|
||||
*/
|
||||
CHIP Mux8Way16 {
|
||||
IN a[16], b[16], c[16], d[16],
|
||||
e[16], f[16], g[16], h[16],
|
||||
sel[3];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
89
original/projects/1/Mux8Way16.tst
Normal file
89
original/projects/1/Mux8Way16.tst
Normal file
@@ -0,0 +1,89 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Mux8Way16.tst
|
||||
|
||||
load Mux8Way16.hdl,
|
||||
output-file Mux8Way16.out,
|
||||
compare-to Mux8Way16.cmp,
|
||||
output-list a%B1.16.1 b%B1.16.1 c%B1.16.1 d%B1.16.1 e%B1.16.1 f%B1.16.1 g%B1.16.1 h%B1.16.1 sel%B2.3.2 out%B1.16.1;
|
||||
|
||||
set a 0,
|
||||
set b 0,
|
||||
set c 0,
|
||||
set d 0,
|
||||
set e 0,
|
||||
set f 0,
|
||||
set g 0,
|
||||
set h 0,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 2,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 3,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 4,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 5,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 6,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 7,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B0001001000110100,
|
||||
set b %B0010001101000101,
|
||||
set c %B0011010001010110,
|
||||
set d %B0100010101100111,
|
||||
set e %B0101011001111000,
|
||||
set f %B0110011110001001,
|
||||
set g %B0111100010011010,
|
||||
set h %B1000100110101011,
|
||||
set sel 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 2,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 3,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 4,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 5,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 6,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set sel 7,
|
||||
eval,
|
||||
output;
|
||||
3
original/projects/1/Not.cmp
Normal file
3
original/projects/1/Not.cmp
Normal file
@@ -0,0 +1,3 @@
|
||||
|in |out|
|
||||
| 0 | 1 |
|
||||
| 1 | 0 |
|
||||
15
original/projects/1/Not.hdl
Normal file
15
original/projects/1/Not.hdl
Normal file
@@ -0,0 +1,15 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Not.hdl
|
||||
/**
|
||||
* Not gate:
|
||||
* if (in) out = 0, else out = 1
|
||||
*/
|
||||
CHIP Not {
|
||||
IN in;
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
17
original/projects/1/Not.tst
Normal file
17
original/projects/1/Not.tst
Normal file
@@ -0,0 +1,17 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Not.tst
|
||||
|
||||
load Not.hdl,
|
||||
output-file Not.out,
|
||||
compare-to Not.cmp,
|
||||
output-list in out;
|
||||
|
||||
set in 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in 1,
|
||||
eval,
|
||||
output;
|
||||
6
original/projects/1/Not16.cmp
Normal file
6
original/projects/1/Not16.cmp
Normal file
@@ -0,0 +1,6 @@
|
||||
| in | out |
|
||||
| 0000000000000000 | 1111111111111111 |
|
||||
| 1111111111111111 | 0000000000000000 |
|
||||
| 1010101010101010 | 0101010101010101 |
|
||||
| 0011110011000011 | 1100001100111100 |
|
||||
| 0001001000110100 | 1110110111001011 |
|
||||
16
original/projects/1/Not16.hdl
Normal file
16
original/projects/1/Not16.hdl
Normal file
@@ -0,0 +1,16 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Not16.hdl
|
||||
/**
|
||||
* 16-bit Not gate:
|
||||
* for i = 0, ..., 15:
|
||||
* out[i] = Not(a[i])
|
||||
*/
|
||||
CHIP Not16 {
|
||||
IN in[16];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
29
original/projects/1/Not16.tst
Normal file
29
original/projects/1/Not16.tst
Normal file
@@ -0,0 +1,29 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Not16.tst
|
||||
|
||||
load Not16.hdl,
|
||||
output-file Not16.out,
|
||||
compare-to Not16.cmp,
|
||||
output-list in%B1.16.1 out%B1.16.1;
|
||||
|
||||
set in %B0000000000000000,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in %B1111111111111111,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in %B1010101010101010,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in %B0011110011000011,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in %B0001001000110100,
|
||||
eval,
|
||||
output;
|
||||
5
original/projects/1/Or.cmp
Normal file
5
original/projects/1/Or.cmp
Normal file
@@ -0,0 +1,5 @@
|
||||
| a | b |out|
|
||||
| 0 | 0 | 0 |
|
||||
| 0 | 1 | 1 |
|
||||
| 1 | 0 | 1 |
|
||||
| 1 | 1 | 1 |
|
||||
15
original/projects/1/Or.hdl
Normal file
15
original/projects/1/Or.hdl
Normal file
@@ -0,0 +1,15 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Or.hdl
|
||||
/**
|
||||
* Or gate:
|
||||
* if (a or b) out = 1, else out = 0
|
||||
*/
|
||||
CHIP Or {
|
||||
IN a, b;
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
29
original/projects/1/Or.tst
Normal file
29
original/projects/1/Or.tst
Normal file
@@ -0,0 +1,29 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Or.tst
|
||||
|
||||
load Or.hdl,
|
||||
output-file Or.out,
|
||||
compare-to Or.cmp,
|
||||
output-list a b out;
|
||||
|
||||
set a 0,
|
||||
set b 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 0,
|
||||
set b 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 1,
|
||||
set b 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 1,
|
||||
set b 1,
|
||||
eval,
|
||||
output;
|
||||
7
original/projects/1/Or16.cmp
Normal file
7
original/projects/1/Or16.cmp
Normal file
@@ -0,0 +1,7 @@
|
||||
| a | b | out |
|
||||
| 0000000000000000 | 0000000000000000 | 0000000000000000 |
|
||||
| 0000000000000000 | 1111111111111111 | 1111111111111111 |
|
||||
| 1111111111111111 | 1111111111111111 | 1111111111111111 |
|
||||
| 1010101010101010 | 0101010101010101 | 1111111111111111 |
|
||||
| 0011110011000011 | 0000111111110000 | 0011111111110011 |
|
||||
| 0001001000110100 | 1001100001110110 | 1001101001110110 |
|
||||
16
original/projects/1/Or16.hdl
Normal file
16
original/projects/1/Or16.hdl
Normal file
@@ -0,0 +1,16 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Or16.hdl
|
||||
/**
|
||||
* 16-bit Or gate:
|
||||
* for i = 0, ..., 15:
|
||||
* out[i] = a[i] Or b[i]
|
||||
*/
|
||||
CHIP Or16 {
|
||||
IN a[16], b[16];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
39
original/projects/1/Or16.tst
Normal file
39
original/projects/1/Or16.tst
Normal file
@@ -0,0 +1,39 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Or16.tst
|
||||
|
||||
load Or16.hdl,
|
||||
output-file Or16.out,
|
||||
compare-to Or16.cmp,
|
||||
output-list a%B1.16.1 b%B1.16.1 out%B1.16.1;
|
||||
|
||||
set a %B0000000000000000,
|
||||
set b %B0000000000000000,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B0000000000000000,
|
||||
set b %B1111111111111111,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B1111111111111111,
|
||||
set b %B1111111111111111,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B1010101010101010,
|
||||
set b %B0101010101010101,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B0011110011000011,
|
||||
set b %B0000111111110000,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a %B0001001000110100,
|
||||
set b %B1001100001110110,
|
||||
eval,
|
||||
output;
|
||||
6
original/projects/1/Or8Way.cmp
Normal file
6
original/projects/1/Or8Way.cmp
Normal file
@@ -0,0 +1,6 @@
|
||||
| in |out|
|
||||
| 00000000 | 0 |
|
||||
| 11111111 | 1 |
|
||||
| 00010000 | 1 |
|
||||
| 00000001 | 1 |
|
||||
| 00100110 | 1 |
|
||||
15
original/projects/1/Or8Way.hdl
Normal file
15
original/projects/1/Or8Way.hdl
Normal file
@@ -0,0 +1,15 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Or8Way.hdl
|
||||
/**
|
||||
* 8-way Or gate:
|
||||
* out = in[0] Or in[1] Or ... Or in[7]
|
||||
*/
|
||||
CHIP Or8Way {
|
||||
IN in[8];
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
29
original/projects/1/Or8Way.tst
Normal file
29
original/projects/1/Or8Way.tst
Normal file
@@ -0,0 +1,29 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Or8Way.tst
|
||||
|
||||
load Or8Way.hdl,
|
||||
output-file Or8Way.out,
|
||||
compare-to Or8Way.cmp,
|
||||
output-list in%B2.8.2 out;
|
||||
|
||||
set in %B00000000,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in %B11111111,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in %B00010000,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in %B00000001,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set in %B00100110,
|
||||
eval,
|
||||
output;
|
||||
5
original/projects/1/Xor.cmp
Normal file
5
original/projects/1/Xor.cmp
Normal file
@@ -0,0 +1,5 @@
|
||||
| a | b |out|
|
||||
| 0 | 0 | 0 |
|
||||
| 0 | 1 | 1 |
|
||||
| 1 | 0 | 1 |
|
||||
| 1 | 1 | 0 |
|
||||
15
original/projects/1/Xor.hdl
Normal file
15
original/projects/1/Xor.hdl
Normal file
@@ -0,0 +1,15 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Xor.hdl
|
||||
/**
|
||||
* Exclusive-or gate:
|
||||
* if ((a and Not(b)) or (Not(a) and b)) out = 1, else out = 0
|
||||
*/
|
||||
CHIP Xor {
|
||||
IN a, b;
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
//// Replace this comment with your code.
|
||||
}
|
||||
29
original/projects/1/Xor.tst
Normal file
29
original/projects/1/Xor.tst
Normal file
@@ -0,0 +1,29 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/1/Xor.tst
|
||||
|
||||
load Xor.hdl,
|
||||
output-file Xor.out,
|
||||
compare-to Xor.cmp,
|
||||
output-list a b out;
|
||||
|
||||
set a 0,
|
||||
set b 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 0,
|
||||
set b 1,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 1,
|
||||
set b 0,
|
||||
eval,
|
||||
output;
|
||||
|
||||
set a 1,
|
||||
set b 1,
|
||||
eval,
|
||||
output;
|
||||
38
original/projects/10/ArrayTest/Main.jack
Normal file
38
original/projects/10/ArrayTest/Main.jack
Normal file
@@ -0,0 +1,38 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/ArrayTest/Main.jack
|
||||
|
||||
// (same as projects/9/Average/Main.jack)
|
||||
|
||||
/** Computes the average of a sequence of integers. */
|
||||
class Main {
|
||||
function void main() {
|
||||
var Array a;
|
||||
var int length;
|
||||
var int i, sum;
|
||||
|
||||
let length = Keyboard.readInt("HOW MANY NUMBERS? ");
|
||||
let a = Array.new(length);
|
||||
let i = 0;
|
||||
|
||||
while (i < length) {
|
||||
let a[i] = Keyboard.readInt("ENTER THE NEXT NUMBER: ");
|
||||
let i = i + 1;
|
||||
}
|
||||
|
||||
let i = 0;
|
||||
let sum = 0;
|
||||
|
||||
while (i < length) {
|
||||
let sum = sum + a[i];
|
||||
let i = i + 1;
|
||||
}
|
||||
|
||||
do Output.printString("THE AVERAGE IS: ");
|
||||
do Output.printInt(sum / length);
|
||||
do Output.println();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
286
original/projects/10/ArrayTest/Main.xml
Normal file
286
original/projects/10/ArrayTest/Main.xml
Normal file
@@ -0,0 +1,286 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<subroutineDec>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<identifier> Array </identifier>
|
||||
<identifier> a </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> length </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> readInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<stringConstant> HOW MANY NUMBERS? </stringConstant>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Array </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> length </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> < </symbol>
|
||||
<term>
|
||||
<identifier> length </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> readInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<stringConstant> ENTER THE NEXT NUMBER: </stringConstant>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> + </symbol>
|
||||
<term>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> < </symbol>
|
||||
<term>
|
||||
<identifier> length </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> sum </identifier>
|
||||
</term>
|
||||
<symbol> + </symbol>
|
||||
<term>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ] </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> + </symbol>
|
||||
<term>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> printString </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<stringConstant> THE AVERAGE IS: </stringConstant>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> printInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> sum </identifier>
|
||||
</term>
|
||||
<symbol> / </symbol>
|
||||
<term>
|
||||
<identifier> length </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> println </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
142
original/projects/10/ArrayTest/MainT.xml
Normal file
142
original/projects/10/ArrayTest/MainT.xml
Normal file
@@ -0,0 +1,142 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<identifier> Array </identifier>
|
||||
<identifier> a </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> length </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> readInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<stringConstant> HOW MANY NUMBERS? </stringConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Array </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> < </symbol>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> readInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<stringConstant> ENTER THE NEXT NUMBER: </stringConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> < </symbol>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> printString </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<stringConstant> THE AVERAGE IS: </stringConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> printInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> / </symbol>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> println </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
28
original/projects/10/ExpressionLessSquare/Main.jack
Normal file
28
original/projects/10/ExpressionLessSquare/Main.jack
Normal file
@@ -0,0 +1,28 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/ExpressionLessSquare/Main.jack
|
||||
|
||||
/** Expressionless version of projects/10/Square/Main.jack. */
|
||||
|
||||
class Main {
|
||||
static boolean test; // Added for testing -- there is no static keyword
|
||||
// in the Square files.
|
||||
|
||||
function void main() {
|
||||
var SquareGame game;
|
||||
let game = game;
|
||||
do game.run();
|
||||
do game.dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
function void more() { // Added to test Jack syntax that is not used in
|
||||
var boolean b; // the Square files.
|
||||
if (b) {
|
||||
}
|
||||
else { // There is no else keyword in the Square files.
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
114
original/projects/10/ExpressionLessSquare/Main.xml
Normal file
114
original/projects/10/ExpressionLessSquare/Main.xml
Normal file
@@ -0,0 +1,114 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<classVarDec>
|
||||
<keyword> static </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> test </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<subroutineDec>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> game </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> game </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> more </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> b </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> b </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
<keyword> else </keyword>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
64
original/projects/10/ExpressionLessSquare/MainT.xml
Normal file
64
original/projects/10/ExpressionLessSquare/MainT.xml
Normal file
@@ -0,0 +1,64 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> static </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> test </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> game </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> game </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> more </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> b </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> b </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> else </keyword>
|
||||
<symbol> { </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
99
original/projects/10/ExpressionLessSquare/Square.jack
Normal file
99
original/projects/10/ExpressionLessSquare/Square.jack
Normal file
@@ -0,0 +1,99 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
/// File name: projects/10/ExpressionLessSquare/Square.jack
|
||||
|
||||
/** Expressionless version of projects/10/Square/Square.jack. */
|
||||
|
||||
class Square {
|
||||
|
||||
field int x, y;
|
||||
field int size;
|
||||
|
||||
constructor Square new(int Ax, int Ay, int Asize) {
|
||||
let x = Ax;
|
||||
let y = Ay;
|
||||
let size = Asize;
|
||||
do draw();
|
||||
return x;
|
||||
}
|
||||
|
||||
method void dispose() {
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
method void draw() {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
return;
|
||||
}
|
||||
|
||||
method void erase() {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
return;
|
||||
}
|
||||
|
||||
method void incSize() {
|
||||
if (x) {
|
||||
do erase();
|
||||
let size = size;
|
||||
do draw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
method void decSize() {
|
||||
if (size) {
|
||||
do erase();
|
||||
let size = size;
|
||||
do draw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
method void moveUp() {
|
||||
if (y) {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
let y = y;
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
method void moveDown() {
|
||||
if (y) {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
let y = y;
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
method void moveLeft() {
|
||||
if (x) {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
let x = x;
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
method void moveRight() {
|
||||
if (x) {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
let x = x;
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
967
original/projects/10/ExpressionLessSquare/Square.xml
Normal file
967
original/projects/10/ExpressionLessSquare/Square.xml
Normal file
@@ -0,0 +1,967 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<symbol> { </symbol>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<subroutineDec>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ax </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ay </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Asize </identifier>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Ax </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Ay </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Asize </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> this </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> size </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> size </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> size </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
60
original/projects/10/ExpressionLessSquare/SquareGame.jack
Normal file
60
original/projects/10/ExpressionLessSquare/SquareGame.jack
Normal file
@@ -0,0 +1,60 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/ExpressionLessSquare/SquareGame.jack
|
||||
|
||||
/** Expressionless version of projects/10/Square/SquareGame.jack. */
|
||||
|
||||
class SquareGame {
|
||||
field Square square;
|
||||
field int direction;
|
||||
|
||||
constructor SquareGame new() {
|
||||
let square = square;
|
||||
let direction = direction;
|
||||
return square;
|
||||
}
|
||||
|
||||
method void dispose() {
|
||||
do square.dispose();
|
||||
do Memory.deAlloc(square);
|
||||
return;
|
||||
}
|
||||
|
||||
method void moveSquare() {
|
||||
if (direction) { do square.moveUp(); }
|
||||
if (direction) { do square.moveDown(); }
|
||||
if (direction) { do square.moveLeft(); }
|
||||
if (direction) { do square.moveRight(); }
|
||||
do Sys.wait(direction);
|
||||
return;
|
||||
}
|
||||
|
||||
method void run() {
|
||||
var char key;
|
||||
var boolean exit;
|
||||
|
||||
let exit = key;
|
||||
while (exit) {
|
||||
while (key) {
|
||||
let key = key;
|
||||
do moveSquare();
|
||||
}
|
||||
|
||||
if (key) { let exit = exit; }
|
||||
if (key) { do square.decSize(); }
|
||||
if (key) { do square.incSize(); }
|
||||
if (key) { let direction = exit; }
|
||||
if (key) { let direction = key; }
|
||||
if (key) { let direction = square; }
|
||||
if (key) { let direction = direction; }
|
||||
|
||||
while (key) {
|
||||
let key = key;
|
||||
do moveSquare();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
544
original/projects/10/ExpressionLessSquare/SquareGame.xml
Normal file
544
original/projects/10/ExpressionLessSquare/SquareGame.xml
Normal file
@@ -0,0 +1,544 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> { </symbol>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<subroutineDec>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> square </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> square </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> square </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Sys </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> wait </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> char </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> exit </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> exit </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> exit </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> square </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
268
original/projects/10/ExpressionLessSquare/SquareGameT.xml
Normal file
268
original/projects/10/ExpressionLessSquare/SquareGameT.xml
Normal file
@@ -0,0 +1,268 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> field </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Sys </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> wait </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> char </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
449
original/projects/10/ExpressionLessSquare/SquareT.xml
Normal file
449
original/projects/10/ExpressionLessSquare/SquareT.xml
Normal file
@@ -0,0 +1,449 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ax </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ay </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Asize </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Ax </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Ay </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Asize </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> this </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
36
original/projects/10/Square/Main.jack
Normal file
36
original/projects/10/Square/Main.jack
Normal file
@@ -0,0 +1,36 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/Square/Main.jack
|
||||
|
||||
// (similar to projects/9/Square/Main.jack, with testing additions)
|
||||
|
||||
/** Initializes a new Square game and starts running it. */
|
||||
class Main {
|
||||
static boolean test; // Added for testing -- there is no static keyword
|
||||
// in the Square files.
|
||||
function void main() {
|
||||
var SquareGame game;
|
||||
let game = SquareGame.new();
|
||||
do game.run();
|
||||
do game.dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
function void more() { // Added to test Jack syntax that is not used in
|
||||
var int i, j; // the Square files.
|
||||
var String s;
|
||||
var Array a;
|
||||
if (false) {
|
||||
let s = "string constant";
|
||||
let s = null;
|
||||
let a[1] = a[2];
|
||||
}
|
||||
else { // There is no else keyword in the Square files.
|
||||
let i = i * (-j);
|
||||
let j = j / (-2); // note: unary negate constant 2
|
||||
let i = i | j;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
244
original/projects/10/Square/Main.xml
Normal file
244
original/projects/10/Square/Main.xml
Normal file
@@ -0,0 +1,244 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<classVarDec>
|
||||
<keyword> static </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> test </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<subroutineDec>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> game </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> more </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> j </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<identifier> String </identifier>
|
||||
<identifier> s </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<identifier> Array </identifier>
|
||||
<identifier> a </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> false </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> s </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<stringConstant> string constant </stringConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> s </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> null </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ] </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
<keyword> else </keyword>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> * </symbol>
|
||||
<term>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<symbol> - </symbol>
|
||||
<term>
|
||||
<identifier> j </identifier>
|
||||
</term>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> j </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> j </identifier>
|
||||
</term>
|
||||
<symbol> / </symbol>
|
||||
<term>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<symbol> - </symbol>
|
||||
<term>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
</term>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> | </symbol>
|
||||
<term>
|
||||
<identifier> j </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
126
original/projects/10/Square/MainT.xml
Normal file
126
original/projects/10/Square/MainT.xml
Normal file
@@ -0,0 +1,126 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> static </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> test </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> game </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> more </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> j </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<identifier> String </identifier>
|
||||
<identifier> s </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<identifier> Array </identifier>
|
||||
<identifier> a </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> s </identifier>
|
||||
<symbol> = </symbol>
|
||||
<stringConstant> string constant </stringConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> s </identifier>
|
||||
<symbol> = </symbol>
|
||||
<keyword> null </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> = </symbol>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> else </keyword>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> * </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> - </symbol>
|
||||
<identifier> j </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> j </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> j </identifier>
|
||||
<symbol> / </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> | </symbol>
|
||||
<identifier> j </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
110
original/projects/10/Square/Square.jack
Normal file
110
original/projects/10/Square/Square.jack
Normal file
@@ -0,0 +1,110 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/Square/Square.jack
|
||||
|
||||
// (same as projects/9/Square/Square.jack)
|
||||
|
||||
/** Implements a graphical square. */
|
||||
class Square {
|
||||
|
||||
field int x, y; // screen location of the square's top-left corner
|
||||
field int size; // length of this square, in pixels
|
||||
|
||||
/** Constructs a new square with a given location and size. */
|
||||
constructor Square new(int Ax, int Ay, int Asize) {
|
||||
let x = Ax;
|
||||
let y = Ay;
|
||||
let size = Asize;
|
||||
do draw();
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Disposes this square. */
|
||||
method void dispose() {
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Draws the square on the screen. */
|
||||
method void draw() {
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + size, y + size);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Erases the square from the screen. */
|
||||
method void erase() {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, y, x + size, y + size);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Increments the square size by 2 pixels. */
|
||||
method void incSize() {
|
||||
if (((y + size) < 254) & ((x + size) < 510)) {
|
||||
do erase();
|
||||
let size = size + 2;
|
||||
do draw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Decrements the square size by 2 pixels. */
|
||||
method void decSize() {
|
||||
if (size > 2) {
|
||||
do erase();
|
||||
let size = size - 2;
|
||||
do draw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square up by 2 pixels. */
|
||||
method void moveUp() {
|
||||
if (y > 1) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, (y + size) - 1, x + size, y + size);
|
||||
let y = y - 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + size, y + 1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square down by 2 pixels. */
|
||||
method void moveDown() {
|
||||
if ((y + size) < 254) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, y, x + size, y + 1);
|
||||
let y = y + 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, (y + size) - 1, x + size, y + size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square left by 2 pixels. */
|
||||
method void moveLeft() {
|
||||
if (x > 1) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle((x + size) - 1, y, x + size, y + size);
|
||||
let x = x - 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + 1, y + size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square right by 2 pixels. */
|
||||
method void moveRight() {
|
||||
if ((x + size) < 510) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, y, x + 1, y + size);
|
||||
let x = x + 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle((x + size) - 1, y, x + size, y + size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
1211
original/projects/10/Square/Square.xml
Normal file
1211
original/projects/10/Square/Square.xml
Normal file
File diff suppressed because it is too large
Load Diff
79
original/projects/10/Square/SquareGame.jack
Normal file
79
original/projects/10/Square/SquareGame.jack
Normal file
@@ -0,0 +1,79 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/Square/SquareGame.jack
|
||||
|
||||
// (same as projects/9/Square/SquareGame.jack)
|
||||
/**
|
||||
* Implements the Square game.
|
||||
* This simple game allows the user to move a black square around
|
||||
* the screen, and change the square's size during the movement.
|
||||
* When the game starts, a square of 30 by 30 pixels is shown at the
|
||||
* top-left corner of the screen. The user controls the square as follows.
|
||||
* The 4 arrow keys are used to move the square up, down, left, and right.
|
||||
* The 'z' and 'x' keys are used, respectively, to decrement and increment
|
||||
* the square's size. The 'q' key is used to quit the game.
|
||||
*/
|
||||
class SquareGame {
|
||||
field Square square; // the square of this game
|
||||
field int direction; // the square's current direction:
|
||||
// 0=none, 1=up, 2=down, 3=left, 4=right
|
||||
|
||||
/** Constructs a new Square Game. */
|
||||
constructor SquareGame new() {
|
||||
// Creates a 30 by 30 pixels square and positions it at the top-left
|
||||
// of the screen.
|
||||
let square = Square.new(0, 0, 30);
|
||||
let direction = 0; // initial state is no movement
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Disposes this game. */
|
||||
method void dispose() {
|
||||
do square.dispose();
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square in the current direction. */
|
||||
method void moveSquare() {
|
||||
if (direction = 1) { do square.moveUp(); }
|
||||
if (direction = 2) { do square.moveDown(); }
|
||||
if (direction = 3) { do square.moveLeft(); }
|
||||
if (direction = 4) { do square.moveRight(); }
|
||||
do Sys.wait(5); // delays the next movement
|
||||
return;
|
||||
}
|
||||
|
||||
/** Runs the game: handles the user's inputs and moves the square accordingly */
|
||||
method void run() {
|
||||
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) {
|
||||
let key = Keyboard.keyPressed();
|
||||
do moveSquare();
|
||||
}
|
||||
if (key = 81) { let exit = true; } // q key
|
||||
if (key = 90) { do square.decSize(); } // z key
|
||||
if (key = 88) { do square.incSize(); } // x key
|
||||
if (key = 131) { let direction = 1; } // up arrow
|
||||
if (key = 133) { let direction = 2; } // down arrow
|
||||
if (key = 130) { let direction = 3; } // left arrow
|
||||
if (key = 132) { let direction = 4; } // right arrow
|
||||
|
||||
// waits for the key to be released
|
||||
while (~(key = 0)) {
|
||||
let key = Keyboard.keyPressed();
|
||||
do moveSquare();
|
||||
}
|
||||
} // while
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
643
original/projects/10/Square/SquareGame.xml
Normal file
643
original/projects/10/Square/SquareGame.xml
Normal file
@@ -0,0 +1,643 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> { </symbol>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<subroutineDec>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 30 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> this </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> this </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 3 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 4 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Sys </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> wait </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 5 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> char </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> false </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<symbol> ~ </symbol>
|
||||
<term>
|
||||
<identifier> exit </identifier>
|
||||
</term>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> keyPressed </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 81 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> true </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 90 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 88 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 131 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 133 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 130 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 3 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 132 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 4 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<symbol> ~ </symbol>
|
||||
<term>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> keyPressed </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
315
original/projects/10/Square/SquareGameT.xml
Normal file
315
original/projects/10/Square/SquareGameT.xml
Normal file
@@ -0,0 +1,315 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> field </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<integerConstant> 30 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<keyword> this </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> this </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 3 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 4 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Sys </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> wait </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<integerConstant> 5 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> char </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ~ </symbol>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> keyPressed </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 81 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 90 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 88 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 131 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 133 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 130 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 3 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 132 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 4 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ~ </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> keyPressed </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
561
original/projects/10/Square/SquareT.xml
Normal file
561
original/projects/10/Square/SquareT.xml
Normal file
@@ -0,0 +1,561 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ax </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ay </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Asize </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Ax </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Ay </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Asize </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<keyword> this </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> this </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> < </symbol>
|
||||
<integerConstant> 254 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> & </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> < </symbol>
|
||||
<integerConstant> 510 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> > </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> > </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> < </symbol>
|
||||
<integerConstant> 254 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> > </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> < </symbol>
|
||||
<integerConstant> 510 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
27
original/projects/11/Average/Main.jack
Normal file
27
original/projects/11/Average/Main.jack
Normal file
@@ -0,0 +1,27 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/Average/Main.jack
|
||||
|
||||
// Inputs some numbers and computes their average
|
||||
class Main {
|
||||
function void main() {
|
||||
var Array a;
|
||||
var int length;
|
||||
var int i, sum;
|
||||
|
||||
let length = Keyboard.readInt("How many numbers? ");
|
||||
let a = Array.new(length); // constructs the array
|
||||
|
||||
let i = 0;
|
||||
while (i < length) {
|
||||
let a[i] = Keyboard.readInt("Enter a number: ");
|
||||
let sum = sum + a[i];
|
||||
let i = i + 1;
|
||||
}
|
||||
|
||||
do Output.printString("The average is ");
|
||||
do Output.printInt(sum / length);
|
||||
return;
|
||||
}
|
||||
}
|
||||
69
original/projects/11/ComplexArrays/Main.jack
Normal file
69
original/projects/11/ComplexArrays/Main.jack
Normal file
@@ -0,0 +1,69 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/ComplexArrays/Main.jack
|
||||
/**
|
||||
* Performs several complex array processing tests.
|
||||
* For each test, the expected result is printed, along with the
|
||||
* actual result. In each test, the two results should be equal.
|
||||
*/
|
||||
class Main {
|
||||
|
||||
function void main() {
|
||||
var Array a, b, c;
|
||||
|
||||
let a = Array.new(10);
|
||||
let b = Array.new(5);
|
||||
let c = Array.new(1);
|
||||
|
||||
let a[3] = 2;
|
||||
let a[4] = 8;
|
||||
let a[5] = 4;
|
||||
let b[a[3]] = a[3] + 3; // b[2] = 5
|
||||
let a[b[a[3]]] = a[a[5]] * b[((7 - a[3]) - Main.double(2)) + 1]; // a[5] = 8 * 5 = 40
|
||||
let c[0] = null;
|
||||
let c = c[0];
|
||||
|
||||
do Output.printString("Test 1: expected result: 5; actual result: ");
|
||||
do Output.printInt(b[2]);
|
||||
do Output.println();
|
||||
do Output.printString("Test 2: expected result: 40; actual result: ");
|
||||
do Output.printInt(a[5]);
|
||||
do Output.println();
|
||||
do Output.printString("Test 3: expected result: 0; actual result: ");
|
||||
do Output.printInt(c);
|
||||
do Output.println();
|
||||
|
||||
let c = null;
|
||||
|
||||
if (c = null) {
|
||||
do Main.fill(a, 10);
|
||||
let c = a[3];
|
||||
let c[1] = 33;
|
||||
let c = a[7];
|
||||
let c[1] = 77;
|
||||
let b = a[3];
|
||||
let b[1] = b[1] + c[1]; // b[1] = 33 + 77 = 110;
|
||||
}
|
||||
|
||||
do Output.printString("Test 4: expected result: 77; actual result: ");
|
||||
do Output.printInt(c[1]);
|
||||
do Output.println();
|
||||
do Output.printString("Test 5: expected result: 110; actual result: ");
|
||||
do Output.printInt(b[1]);
|
||||
do Output.println();
|
||||
return;
|
||||
}
|
||||
|
||||
function int double(int a) {
|
||||
return a * 2;
|
||||
}
|
||||
|
||||
function void fill(Array a, int size) {
|
||||
while (size > 0) {
|
||||
let size = size - 1;
|
||||
let a[size] = Array.new(3);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
81
original/projects/11/ConvertToBin/Main.jack
Normal file
81
original/projects/11/ConvertToBin/Main.jack
Normal file
@@ -0,0 +1,81 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/ConvertToBin/Main.jack
|
||||
/**
|
||||
* Unpacks a 16-bit number into its binary representation:
|
||||
* Takes the 16-bit number stored in RAM[8000] and stores its individual
|
||||
* bits in RAM[8001]..RAM[8016] (each location will contain 0 or 1).
|
||||
* Before the conversion, RAM[8001]..RAM[8016] are initialized to -1.
|
||||
*
|
||||
* The program should be tested as follows:
|
||||
* 1) Load the program into the supplied VM emulator
|
||||
* 2) Put some value in RAM[8000]
|
||||
* 3) Switch to "no animation"
|
||||
* 4) Run the program (give it enough time to run)
|
||||
* 5) Stop the program
|
||||
* 6) Check that RAM[8001]..RAM[8016] contain the correct bits, and
|
||||
* that none of these memory locations contains -1.
|
||||
*/
|
||||
class Main {
|
||||
|
||||
/**
|
||||
* Initializes RAM[8001]..RAM[8016] to -1,
|
||||
* and converts the value in RAM[8000] to binary.
|
||||
*/
|
||||
function void main() {
|
||||
var int value;
|
||||
do Main.fillMemory(8001, 16, -1); // sets RAM[8001]..RAM[8016] to -1
|
||||
let value = Memory.peek(8000); // Uses an OS routine to read the input
|
||||
do Main.convert(value); // performs the conversion
|
||||
return;
|
||||
}
|
||||
|
||||
/** Converts the given decimal value to binary, and puts
|
||||
* the resulting bits in RAM[8001]..RAM[8016]. */
|
||||
function void convert(int value) {
|
||||
var int mask, position;
|
||||
var boolean loop;
|
||||
|
||||
let loop = true;
|
||||
while (loop) {
|
||||
let position = position + 1;
|
||||
let mask = Main.nextMask(mask);
|
||||
|
||||
if (~(position > 16)) {
|
||||
|
||||
if (~((value & mask) = 0)) {
|
||||
do Memory.poke(8000 + position, 1);
|
||||
}
|
||||
else {
|
||||
do Memory.poke(8000 + position, 0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
let loop = false;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Returns the next mask (the mask that should follow the given mask). */
|
||||
function int nextMask(int mask) {
|
||||
if (mask = 0) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return mask * 2;
|
||||
}
|
||||
}
|
||||
|
||||
/** Fills 'length' consecutive memory locations with 'value',
|
||||
* starting at 'address'. */
|
||||
function void fillMemory(int address, int length, int value) {
|
||||
while (length > 0) {
|
||||
do Memory.poke(address, value);
|
||||
let length = length - 1;
|
||||
let address = address + 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
203
original/projects/11/Pong/Ball.jack
Normal file
203
original/projects/11/Pong/Ball.jack
Normal file
@@ -0,0 +1,203 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/Pong/Ball.jack
|
||||
// (Same as projects/9/Pong/Ball.jack)
|
||||
/**
|
||||
* A graphical ball in a Pong game. Characterized by a screen location and
|
||||
* distance of last destination. Has methods for drawing, erasing and moving
|
||||
* on the screen. The ball is displayed as a filled, 6-by-6 pixles rectangle.
|
||||
*/
|
||||
class Ball {
|
||||
|
||||
field int x, y; // the ball's screen location (in pixels)
|
||||
field int lengthx, lengthy; // distance of last destination (in pixels)
|
||||
|
||||
field int d, straightD, diagonalD; // used for straight line movement computation
|
||||
field boolean invert, positivex, positivey; // (same)
|
||||
|
||||
field int leftWall, rightWall, topWall, bottomWall; // wall locations
|
||||
|
||||
field int wall; // last wall that the ball was bounced off of
|
||||
|
||||
/** Constructs a new ball with the given initial location and wall locations. */
|
||||
constructor Ball new(int Ax, int Ay,
|
||||
int AleftWall, int ArightWall, int AtopWall, int AbottomWall) {
|
||||
let x = Ax;
|
||||
let y = Ay;
|
||||
let leftWall = AleftWall;
|
||||
let rightWall = ArightWall - 6; // -6 for ball size
|
||||
let topWall = AtopWall;
|
||||
let bottomWall = AbottomWall - 6; // -6 for ball size
|
||||
let wall = 0;
|
||||
do show();
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Deallocates the Ball's memory. */
|
||||
method void dispose() {
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Shows the ball. */
|
||||
method void show() {
|
||||
do Screen.setColor(true);
|
||||
do draw();
|
||||
return;
|
||||
}
|
||||
|
||||
/** Hides the ball. */
|
||||
method void hide() {
|
||||
do Screen.setColor(false);
|
||||
do draw();
|
||||
return;
|
||||
}
|
||||
|
||||
/** Draws the ball. */
|
||||
method void draw() {
|
||||
do Screen.drawRectangle(x, y, x + 5, y + 5);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Returns the ball's left edge. */
|
||||
method int getLeft() {
|
||||
return x;
|
||||
}
|
||||
|
||||
/** Returns the ball's right edge. */
|
||||
method int getRight() {
|
||||
return x + 5;
|
||||
}
|
||||
|
||||
/** Computes and sets the ball's destination. */
|
||||
method void setDestination(int destx, int desty) {
|
||||
var int dx, dy, temp;
|
||||
let lengthx = destx - x;
|
||||
let lengthy = desty - y;
|
||||
let dx = Math.abs(lengthx);
|
||||
let dy = Math.abs(lengthy);
|
||||
let invert = (dx < dy);
|
||||
|
||||
if (invert) {
|
||||
let temp = dx; // swap dx, dy
|
||||
let dx = dy;
|
||||
let dy = temp;
|
||||
let positivex = (y < desty);
|
||||
let positivey = (x < destx);
|
||||
}
|
||||
else {
|
||||
let positivex = (x < destx);
|
||||
let positivey = (y < desty);
|
||||
}
|
||||
|
||||
let d = (2 * dy) - dx;
|
||||
let straightD = 2 * dy;
|
||||
let diagonalD = 2 * (dy - dx);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves the ball one step towards its destination.
|
||||
* If the ball has reached a wall, returns 0.
|
||||
* Else, returns a value according to the wall:
|
||||
* 1 (left wall), 2 (right wall), 3 (top wall), 4 (bottom wall).
|
||||
*/
|
||||
method int move() {
|
||||
|
||||
do hide();
|
||||
|
||||
if (d < 0) { let d = d + straightD; }
|
||||
else {
|
||||
let d = d + diagonalD;
|
||||
|
||||
if (positivey) {
|
||||
if (invert) { let x = x + 4; }
|
||||
else { let y = y + 4; }
|
||||
}
|
||||
else {
|
||||
if (invert) { let x = x - 4; }
|
||||
else { let y = y - 4; }
|
||||
}
|
||||
}
|
||||
|
||||
if (positivex) {
|
||||
if (invert) { let y = y + 4; }
|
||||
else { let x = x + 4; }
|
||||
}
|
||||
else {
|
||||
if (invert) { let y = y - 4; }
|
||||
else { let x = x - 4; }
|
||||
}
|
||||
|
||||
if (~(x > leftWall)) {
|
||||
let wall = 1;
|
||||
let x = leftWall;
|
||||
}
|
||||
if (~(x < rightWall)) {
|
||||
let wall = 2;
|
||||
let x = rightWall;
|
||||
}
|
||||
if (~(y > topWall)) {
|
||||
let wall = 3;
|
||||
let y = topWall;
|
||||
}
|
||||
if (~(y < bottomWall)) {
|
||||
let wall = 4;
|
||||
let y = bottomWall;
|
||||
}
|
||||
|
||||
do show();
|
||||
|
||||
return wall;
|
||||
}
|
||||
|
||||
/**
|
||||
* Bounces off the current wall: sets the new destination
|
||||
* of the ball according to the ball's angle and the given
|
||||
* bouncing direction (-1/0/1=left/center/right or up/center/down).
|
||||
*/
|
||||
method void bounce(int bouncingDirection) {
|
||||
var int newx, newy, divLengthx, divLengthy, factor;
|
||||
|
||||
// Since results are too big, divides by 10
|
||||
let divLengthx = lengthx / 10;
|
||||
let divLengthy = lengthy / 10;
|
||||
if (bouncingDirection = 0) { let factor = 10; }
|
||||
else {
|
||||
if (((~(lengthx < 0)) & (bouncingDirection = 1)) | ((lengthx < 0) & (bouncingDirection = (-1)))) {
|
||||
let factor = 20; // bounce direction is in ball direction
|
||||
}
|
||||
else { let factor = 5; } // bounce direction is against ball direction
|
||||
}
|
||||
|
||||
if (wall = 1) {
|
||||
let newx = 506;
|
||||
let newy = (divLengthy * (-50)) / divLengthx;
|
||||
let newy = y + (newy * factor);
|
||||
}
|
||||
else {
|
||||
if (wall = 2) {
|
||||
let newx = 0;
|
||||
let newy = (divLengthy * 50) / divLengthx;
|
||||
let newy = y + (newy * factor);
|
||||
}
|
||||
else {
|
||||
if (wall = 3) {
|
||||
let newy = 250;
|
||||
let newx = (divLengthx * (-25)) / divLengthy;
|
||||
let newx = x + (newx * factor);
|
||||
}
|
||||
else { // assumes wall = 4
|
||||
let newy = 0;
|
||||
let newx = (divLengthx * 25) / divLengthy;
|
||||
let newx = x + (newx * factor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
do setDestination(newx, newy);
|
||||
return;
|
||||
}
|
||||
}
|
||||
104
original/projects/11/Pong/Bat.jack
Normal file
104
original/projects/11/Pong/Bat.jack
Normal file
@@ -0,0 +1,104 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/Pong/Bat.jack
|
||||
// (Same as projects/9/Pong/Bat.jack)
|
||||
/**
|
||||
* A graphical bat in a Pong game.
|
||||
* Displayed as a filled horizontal rectangle that has a screen location,
|
||||
* a width and a height.
|
||||
* Has methods for drawing, erasing, moving left and right, and changing
|
||||
* its width (to make the hitting action more challenging).
|
||||
* This class should have been called "Paddle", following the
|
||||
* standard Pong terminology. Unaware of this terminology,
|
||||
* we called it "bat", and the name stuck.
|
||||
*/
|
||||
class Bat {
|
||||
|
||||
field int x, y; // the bat's screen location
|
||||
field int width, height; // the bat's width and height
|
||||
field int direction; // direction of the bat's movement
|
||||
// (1 = left, 2 = right)
|
||||
|
||||
/** Constructs a new bat with the given location and width. */
|
||||
constructor Bat new(int Ax, int Ay, int Awidth, int Aheight) {
|
||||
let x = Ax;
|
||||
let y = Ay;
|
||||
let width = Awidth;
|
||||
let height = Aheight;
|
||||
let direction = 2;
|
||||
do show();
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Deallocates the object's memory. */
|
||||
method void dispose() {
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Shows the bat. */
|
||||
method void show() {
|
||||
do Screen.setColor(true);
|
||||
do draw();
|
||||
return;
|
||||
}
|
||||
|
||||
/** Hides the bat. */
|
||||
method void hide() {
|
||||
do Screen.setColor(false);
|
||||
do draw();
|
||||
return;
|
||||
}
|
||||
|
||||
/** Draws the bat. */
|
||||
method void draw() {
|
||||
do Screen.drawRectangle(x, y, x + width, y + height);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Sets the bat's direction (0=stop, 1=left, 2=right). */
|
||||
method void setDirection(int Adirection) {
|
||||
let direction = Adirection;
|
||||
return;
|
||||
}
|
||||
|
||||
/** Returns the bat's left edge. */
|
||||
method int getLeft() {
|
||||
return x;
|
||||
}
|
||||
|
||||
/** Returns the bat's right edge. */
|
||||
method int getRight() {
|
||||
return x + width;
|
||||
}
|
||||
|
||||
/** Sets the bat's width. */
|
||||
method void setWidth(int Awidth) {
|
||||
do hide();
|
||||
let width = Awidth;
|
||||
do show();
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the bat one step in the bat's direction. */
|
||||
method void move() {
|
||||
if (direction = 1) {
|
||||
let x = x - 4;
|
||||
if (x < 0) { let x = 0; }
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle((x + width) + 1, y, (x + width) + 4, y + height);
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + 3, y + height);
|
||||
}
|
||||
else {
|
||||
let x = x + 4;
|
||||
if ((x + width) > 511) { let x = 511 - width; }
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x - 4, y, x - 1, y + height);
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle((x + width) - 3, y, x + width, y + height);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
20
original/projects/11/Pong/Main.jack
Normal file
20
original/projects/11/Pong/Main.jack
Normal file
@@ -0,0 +1,20 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/Pong/Main.jack
|
||||
// (Same as projects/9/Pong/Main.jack)
|
||||
/**
|
||||
* Main class of the Pong game.
|
||||
*/
|
||||
class Main {
|
||||
|
||||
/** Initializes a Pong game and starts running it. */
|
||||
function void main() {
|
||||
var PongGame game;
|
||||
do PongGame.newInstance();
|
||||
let game = PongGame.getInstance();
|
||||
do game.run();
|
||||
do game.dispose();
|
||||
return;
|
||||
}
|
||||
}
|
||||
137
original/projects/11/Pong/PongGame.jack
Normal file
137
original/projects/11/Pong/PongGame.jack
Normal file
@@ -0,0 +1,137 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/Pong/PongGame.jack
|
||||
// (Same as projects/9/Pong/PongGame.jack)
|
||||
/**
|
||||
* Represents a Pong game.
|
||||
*/
|
||||
class PongGame {
|
||||
|
||||
static PongGame instance; // A Pong game
|
||||
field Bat bat; // bat
|
||||
field Ball ball; // ball
|
||||
field int wall; // current wall that the ball is bouncing off of
|
||||
field boolean exit; // true when the game is over
|
||||
field int score; // current score
|
||||
field int lastWall; // last wall that the ball bounced off of
|
||||
|
||||
// The current width of the bat
|
||||
field int batWidth;
|
||||
|
||||
/** Constructs a new Pong game. */
|
||||
constructor PongGame new() {
|
||||
do Screen.clearScreen();
|
||||
let batWidth = 50; // initial bat size
|
||||
let bat = Bat.new(230, 229, batWidth, 7);
|
||||
let ball = Ball.new(253, 222, 0, 511, 0, 229);
|
||||
do ball.setDestination(400,0);
|
||||
do Screen.drawRectangle(0, 238, 511, 240);
|
||||
do Output.moveCursor(22,0);
|
||||
do Output.printString("Score: 0");
|
||||
|
||||
let exit = false;
|
||||
let score = 0;
|
||||
let wall = 0;
|
||||
let lastWall = 0;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Deallocates the object's memory. */
|
||||
method void dispose() {
|
||||
do bat.dispose();
|
||||
do ball.dispose();
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Creates an instance of a Pong game. */
|
||||
function void newInstance() {
|
||||
let instance = PongGame.new();
|
||||
return;
|
||||
}
|
||||
|
||||
/** Returns this Pong game. */
|
||||
function PongGame getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
/** Starts the game, and handles inputs from the user that control
|
||||
* the bat's movement direction. */
|
||||
method void run() {
|
||||
var char key;
|
||||
|
||||
while (~exit) {
|
||||
// waits for a key to be pressed.
|
||||
while ((key = 0) & (~exit)) {
|
||||
let key = Keyboard.keyPressed();
|
||||
do bat.move();
|
||||
do moveBall();
|
||||
do Sys.wait(50);
|
||||
}
|
||||
|
||||
if (key = 130) { do bat.setDirection(1); }
|
||||
else {
|
||||
if (key = 132) { do bat.setDirection(2); }
|
||||
else {
|
||||
if (key = 140) { let exit = true; }
|
||||
}
|
||||
}
|
||||
|
||||
// Waits for the key to be released.
|
||||
while ((~(key = 0)) & (~exit)) {
|
||||
let key = Keyboard.keyPressed();
|
||||
do bat.move();
|
||||
do moveBall();
|
||||
do Sys.wait(50);
|
||||
}
|
||||
}
|
||||
|
||||
if (exit) {
|
||||
do Output.moveCursor(10,27);
|
||||
do Output.printString("Game Over");
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles ball movement, including bouncing.
|
||||
* If the ball bounces off a wall, finds its new direction.
|
||||
* If the ball bounces off the bat, increases the score by one
|
||||
* and shrinks the bat's size, to make the game more challenging.
|
||||
*/
|
||||
method void moveBall() {
|
||||
var int bouncingDirection, batLeft, batRight, ballLeft, ballRight;
|
||||
|
||||
let wall = ball.move();
|
||||
|
||||
if ((wall > 0) & (~(wall = lastWall))) {
|
||||
let lastWall = wall;
|
||||
let bouncingDirection = 0;
|
||||
let batLeft = bat.getLeft();
|
||||
let batRight = bat.getRight();
|
||||
let ballLeft = ball.getLeft();
|
||||
let ballRight = ball.getRight();
|
||||
|
||||
if (wall = 4) {
|
||||
let exit = (batLeft > ballRight) | (batRight < ballLeft);
|
||||
if (~exit) {
|
||||
if (ballRight < (batLeft + 10)) { let bouncingDirection = -1; }
|
||||
else {
|
||||
if (ballLeft > (batRight - 10)) { let bouncingDirection = 1; }
|
||||
}
|
||||
|
||||
let batWidth = batWidth - 2;
|
||||
do bat.setWidth(batWidth);
|
||||
let score = score + 1;
|
||||
do Output.moveCursor(22,7);
|
||||
do Output.printInt(score);
|
||||
}
|
||||
}
|
||||
do ball.bounce(bouncingDirection);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
16
original/projects/11/Seven/Main.jack
Normal file
16
original/projects/11/Seven/Main.jack
Normal file
@@ -0,0 +1,16 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/Seven/Main.jack
|
||||
/**
|
||||
* Computes the value of 1 + (2 * 3) and prints the result
|
||||
* at the top-left of the screen.
|
||||
*/
|
||||
class Main {
|
||||
|
||||
function void main() {
|
||||
do Output.printInt(1 + (2 * 3));
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
15
original/projects/11/Square/Main.jack
Normal file
15
original/projects/11/Square/Main.jack
Normal file
@@ -0,0 +1,15 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/Square/Main.jack
|
||||
|
||||
/** Initializes a new Square game and starts running it. */
|
||||
class Main {
|
||||
function void main() {
|
||||
var SquareGame game;
|
||||
let game = SquareGame.new();
|
||||
do game.run();
|
||||
do game.dispose();
|
||||
return;
|
||||
}
|
||||
}
|
||||
113
original/projects/11/Square/Square.jack
Normal file
113
original/projects/11/Square/Square.jack
Normal file
@@ -0,0 +1,113 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/Square/Square.jack
|
||||
|
||||
/** Implements a graphical square.
|
||||
The square has top-left x and y coordinates, and a size. */
|
||||
class Square {
|
||||
|
||||
field int x, y; // screen location of the top-left corner of this square
|
||||
field int size; // length of this square, in pixels
|
||||
|
||||
/** Constructs and draws a new square with a given location and size. */
|
||||
constructor Square new(int ax, int ay, int asize) {
|
||||
let x = ax;
|
||||
let y = ay;
|
||||
let size = asize;
|
||||
do draw();
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Disposes this square. */
|
||||
method void dispose() {
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Draws this square in its current (x,y) location */
|
||||
method void draw() {
|
||||
// Draws the square using the color black
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + size, y + size);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Erases this square. */
|
||||
method void erase() {
|
||||
// Draws the square using the color white (background color)
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, y, x + size, y + size);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Increments the square size by 2 pixels (if possible). */
|
||||
method void incSize() {
|
||||
if (((y + size) < 254) & ((x + size) < 510)) {
|
||||
do erase();
|
||||
let size = size + 2;
|
||||
do draw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Decrements the square size by 2 pixels (if possible). */
|
||||
method void decSize() {
|
||||
if (size > 2) {
|
||||
do erase();
|
||||
let size = size - 2;
|
||||
do draw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves this square up by 2 pixels (if possible). */
|
||||
method void moveUp() {
|
||||
if (y > 1) {
|
||||
// Erases the bottom two rows of this square in its current location
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, (y + size) - 1, x + size, y + size);
|
||||
let y = y - 2;
|
||||
// Draws the top two rows of this square in its new location
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + size, y + 1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square down by 2 pixels (if possible). */
|
||||
method void moveDown() {
|
||||
if ((y + size) < 254) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, y, x + size, y + 1);
|
||||
let y = y + 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, (y + size) - 1, x + size, y + size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square left by 2 pixels (if possible). */
|
||||
method void moveLeft() {
|
||||
if (x > 1) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle((x + size) - 1, y, x + size, y + size);
|
||||
let x = x - 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + 1, y + size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square right by 2 pixels (if possible). */
|
||||
method void moveRight() {
|
||||
if ((x + size) < 510) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, y, x + 1, y + size);
|
||||
let x = x + 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle((x + size) - 1, y, x + size, y + size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
76
original/projects/11/Square/SquareGame.jack
Normal file
76
original/projects/11/Square/SquareGame.jack
Normal file
@@ -0,0 +1,76 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/11/Square/SquareGame.jack
|
||||
/**
|
||||
* Implements the Square game.
|
||||
* This simple game allows the user to move a black square around
|
||||
* the screen, and change the square's size during the movement.
|
||||
* When the game starts, a square of 30 by 30 pixels is shown at the
|
||||
* top-left corner of the screen. The user controls the square as follows.
|
||||
* The 4 arrow keys are used to move the square up, down, left, and right.
|
||||
* The 'z' and 'x' keys are used, respectively, to decrement and increment
|
||||
* the square's size. The 'q' key is used to quit the game.
|
||||
*/
|
||||
class SquareGame {
|
||||
field Square square; // the square of this game
|
||||
field int direction; // the square's current direction:
|
||||
// 0=none, 1=up, 2=down, 3=left, 4=right
|
||||
|
||||
/** Constructs a new square game. */
|
||||
constructor SquareGame new() {
|
||||
// The initial square is located in (0,0), has size 30, and is not moving.
|
||||
let square = Square.new(0, 0, 30);
|
||||
let direction = 0;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Disposes this game. */
|
||||
method void dispose() {
|
||||
do square.dispose();
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square in the current direction. */
|
||||
method void moveSquare() {
|
||||
if (direction = 1) { do square.moveUp(); }
|
||||
if (direction = 2) { do square.moveDown(); }
|
||||
if (direction = 3) { do square.moveLeft(); }
|
||||
if (direction = 4) { do square.moveRight(); }
|
||||
do Sys.wait(5); // delays the next movement
|
||||
return;
|
||||
}
|
||||
|
||||
/** Runs the game: handles the user's inputs and moves the square accordingly */
|
||||
method void run() {
|
||||
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) {
|
||||
let key = Keyboard.keyPressed();
|
||||
do moveSquare();
|
||||
}
|
||||
if (key = 81) { let exit = true; } // q key
|
||||
if (key = 90) { do square.decSize(); } // z key
|
||||
if (key = 88) { do square.incSize(); } // x key
|
||||
if (key = 131) { let direction = 1; } // up arrow
|
||||
if (key = 133) { let direction = 2; } // down arrow
|
||||
if (key = 130) { let direction = 3; } // left arrow
|
||||
if (key = 132) { let direction = 4; } // right arrow
|
||||
|
||||
// waits for the key to be released
|
||||
while (~(key = 0)) {
|
||||
let key = Keyboard.keyPressed();
|
||||
do moveSquare();
|
||||
}
|
||||
} // while
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
22
original/projects/12/Array.jack
Normal file
22
original/projects/12/Array.jack
Normal file
@@ -0,0 +1,22 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/Array.jack
|
||||
/**
|
||||
* Represents an array.
|
||||
* In the Jack language, arrays are instances of the Array class.
|
||||
* Once declared, the array entries can be accessed using the usual
|
||||
* syntax arr[i]. Each array entry can hold a primitive data type as
|
||||
* well as any object type. Different array entries can have different
|
||||
* data types.
|
||||
*/
|
||||
class Array {
|
||||
|
||||
/** Constructs a new Array of the given size. */
|
||||
function Array new(int size) {
|
||||
}
|
||||
|
||||
/** Disposes this array. */
|
||||
method void dispose() {
|
||||
}
|
||||
}
|
||||
2
original/projects/12/ArrayTest/ArrayTest.cmp
Normal file
2
original/projects/12/ArrayTest/ArrayTest.cmp
Normal file
@@ -0,0 +1,2 @@
|
||||
|RAM[8000]|RAM[8001]|RAM[8002]|RAM[8003]|
|
||||
| 222 | 122 | 100 | 10 |
|
||||
15
original/projects/12/ArrayTest/ArrayTest.tst
Normal file
15
original/projects/12/ArrayTest/ArrayTest.tst
Normal file
@@ -0,0 +1,15 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/ArrayTest/ArrayTest.tst
|
||||
|
||||
load,
|
||||
output-file ArrayTest.out,
|
||||
compare-to ArrayTest.cmp,
|
||||
output-list RAM[8000]%D2.6.1 RAM[8001]%D2.6.1 RAM[8002]%D2.6.1 RAM[8003]%D2.6.1;
|
||||
|
||||
repeat 1000000 {
|
||||
vmstep;
|
||||
}
|
||||
|
||||
output;
|
||||
40
original/projects/12/ArrayTest/Main.jack
Normal file
40
original/projects/12/ArrayTest/Main.jack
Normal file
@@ -0,0 +1,40 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/ArrayTest/Main.jack
|
||||
|
||||
/** Test program for the OS Array class. */
|
||||
class Main {
|
||||
|
||||
/** Performs several Array manipulations. */
|
||||
function void main() {
|
||||
var Array r; // stores test results
|
||||
var Array a, b, c;
|
||||
|
||||
let r = 8000;
|
||||
|
||||
let a = Array.new(3);
|
||||
let a[2] = 222;
|
||||
let r[0] = a[2]; // RAM[8000] = 222
|
||||
|
||||
let b = Array.new(3);
|
||||
let b[1] = a[2] - 100;
|
||||
let r[1] = b[1]; // RAM[8001] = 122
|
||||
|
||||
let c = Array.new(500);
|
||||
let c[499] = a[2] - b[1];
|
||||
let r[2] = c[499]; // RAM[8002] = 100
|
||||
|
||||
do a.dispose();
|
||||
do b.dispose();
|
||||
|
||||
let b = Array.new(3);
|
||||
let b[0] = c[499] - 90;
|
||||
let r[3] = b[0]; // RAM[8003] = 10
|
||||
|
||||
do c.dispose();
|
||||
do b.dispose();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
55
original/projects/12/Keyboard.jack
Normal file
55
original/projects/12/Keyboard.jack
Normal file
@@ -0,0 +1,55 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/Keyboard.jack
|
||||
/**
|
||||
* A library for handling user input from the keyboard.
|
||||
*/
|
||||
class Keyboard {
|
||||
|
||||
/** Initializes the keyboard. */
|
||||
function void init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the character of the currently pressed key on the keyboard;
|
||||
* if no key is currently pressed, returns 0.
|
||||
*
|
||||
* Recognizes all ASCII characters, as well as the following keys:
|
||||
* new line = 128 = String.newline()
|
||||
* backspace = 129 = String.backspace()
|
||||
* left arrow = 130
|
||||
* up arrow = 131
|
||||
* right arrow = 132
|
||||
* down arrow = 133
|
||||
* home = 134
|
||||
* End = 135
|
||||
* page up = 136
|
||||
* page down = 137
|
||||
* insert = 138
|
||||
* delete = 139
|
||||
* ESC = 140
|
||||
* F1 - F12 = 141 - 152
|
||||
*/
|
||||
function char keyPressed() {
|
||||
}
|
||||
|
||||
/** Waits until a key is pressed on the keyboard and released,
|
||||
* then echoes the key to the screen, and returns the character
|
||||
* of the pressed key. */
|
||||
function char readChar() {
|
||||
}
|
||||
|
||||
/** Displays the message on the screen, reads from the keyboard the entered
|
||||
* text until a newline character is detected, echoes the text to the screen,
|
||||
* and returns its value. Also handles user backspaces. */
|
||||
function String readLine(String message) {
|
||||
}
|
||||
|
||||
/** Displays the message on the screen, reads from the keyboard the entered
|
||||
* text until a newline character is detected, echoes the text to the screen,
|
||||
* and returns its integer value (until the first non-digit character in the
|
||||
* entered text is detected). Also handles user backspaces. */
|
||||
function int readInt(String message) {
|
||||
}
|
||||
}
|
||||
BIN
original/projects/12/KeyboardTest/KeyboardTestOutput.png
Normal file
BIN
original/projects/12/KeyboardTest/KeyboardTestOutput.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
93
original/projects/12/KeyboardTest/Main.jack
Normal file
93
original/projects/12/KeyboardTest/Main.jack
Normal file
@@ -0,0 +1,93 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/KeyboardTest/Main.jack
|
||||
|
||||
/** Test program for the OS Keyboard class. */
|
||||
class Main {
|
||||
|
||||
/** Gets input from the user and verifies its contents. */
|
||||
function void main() {
|
||||
var char c, key;
|
||||
var String s;
|
||||
var int i;
|
||||
var boolean ok;
|
||||
|
||||
let ok = false;
|
||||
do Output.printString("keyPressed test:");
|
||||
do Output.println();
|
||||
while (~ok) {
|
||||
do Output.printString("Please press the 'space' key");
|
||||
while (key = 0) {
|
||||
let key = Keyboard.keyPressed();
|
||||
}
|
||||
let c = key;
|
||||
while (~(key = 0)) {
|
||||
let key = Keyboard.keyPressed();
|
||||
}
|
||||
|
||||
do Output.println();
|
||||
|
||||
if (c = 32) {
|
||||
do Output.printString("ok");
|
||||
do Output.println();
|
||||
let ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
let ok = false;
|
||||
do Output.printString("readChar test:");
|
||||
do Output.println();
|
||||
do Output.printString("(Verify that the pressed character is echoed to the screen)");
|
||||
do Output.println();
|
||||
while (~ok) {
|
||||
do Output.printString("Please press the number '3': ");
|
||||
let c = Keyboard.readChar();
|
||||
|
||||
do Output.println();
|
||||
|
||||
if (c = 51) {
|
||||
do Output.printString("ok");
|
||||
do Output.println();
|
||||
let ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
let ok = false;
|
||||
do Output.printString("readLine test:");
|
||||
do Output.println();
|
||||
do Output.printString("(Verify echo and usage of 'backspace')");
|
||||
do Output.println();
|
||||
while (~ok) {
|
||||
let s = Keyboard.readLine("Please type 'JACK' and press enter: ");
|
||||
|
||||
if (s.length() = 4) {
|
||||
if ((s.charAt(0) = 74) & (s.charAt(1) = 65) & (s.charAt(2) = 67) & (s.charAt(3) = 75)) {
|
||||
do Output.printString("ok");
|
||||
do Output.println();
|
||||
let ok = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let ok = false;
|
||||
do Output.printString("readInt test:");
|
||||
do Output.println();
|
||||
do Output.printString("(Verify echo and usage of 'backspace')");
|
||||
do Output.println();
|
||||
while (~ok) {
|
||||
let i = Keyboard.readInt("Please type '-32123' and press enter: ");
|
||||
|
||||
if (i = (-32123)) {
|
||||
do Output.printString("ok");
|
||||
do Output.println();
|
||||
let ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
do Output.println();
|
||||
do Output.printString("Test completed successfully");
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
49
original/projects/12/Math.jack
Normal file
49
original/projects/12/Math.jack
Normal file
@@ -0,0 +1,49 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/Math.jack
|
||||
/**
|
||||
* A library of commonly used mathematical functions.
|
||||
* All functions runs in O(n), where n is the number of bits used
|
||||
* for representing a two's complement integer value (16 in the Hack computer).
|
||||
* Note: Jack compilers implement multiplication and division
|
||||
* using calls to OS functions in this class.
|
||||
*/
|
||||
class Math {
|
||||
static int n; // Number of bits used for representing a two's complement integer
|
||||
static Array powersOfTwo; // Stores 2^0, 2^1, 2^2,..., 2^(n-1)
|
||||
|
||||
// Initializes the Math library.
|
||||
function void init() {
|
||||
}
|
||||
|
||||
/** Returns the product of x and y.
|
||||
* When a Jack compiler detects the multiplication operator '*'
|
||||
* in an expression, it handles it by invoking this method.
|
||||
* Thus, in Jack, x * y and Math.multiply(x,y) return the same value. */
|
||||
function int multiply(int x, int y) {
|
||||
}
|
||||
|
||||
/** Returns the integer part of x / y.
|
||||
* When a Jack compiler detects the division operator '/'
|
||||
* an an expression, it handles it by invoking this method.
|
||||
* Thus, x/y and Math.divide(x,y) return the same value. */
|
||||
function int divide(int x, int y) {
|
||||
}
|
||||
|
||||
/** Returns the integer part of the square root of x. */
|
||||
function int sqrt(int x) {
|
||||
}
|
||||
|
||||
/** Returns the greater value. */
|
||||
function int max(int a, int b) {
|
||||
}
|
||||
|
||||
/** Returns the smaller value. */
|
||||
function int min(int a, int b) {
|
||||
}
|
||||
|
||||
/** Returns the absolute value of x. */
|
||||
function int abs(int x) {
|
||||
}
|
||||
}
|
||||
34
original/projects/12/MathTest/Main.jack
Normal file
34
original/projects/12/MathTest/Main.jack
Normal file
@@ -0,0 +1,34 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/MathTest/Main.jack
|
||||
|
||||
// Tests the OS Math class.
|
||||
class Main {
|
||||
|
||||
// Performs various mathematical operations, using calls to the Math class methods.
|
||||
function void main() {
|
||||
var Array r; // Stores the test results;
|
||||
let r = 8000; // Base address
|
||||
|
||||
let r[0] = 2 * 3; // 6
|
||||
let r[1] = r[0] * (-30); // 6 * (-30) = -180
|
||||
let r[2] = r[1] * 100; // (-180) * 100 = -18000
|
||||
let r[3] = 1 * r[2]; // 1 * (-18000) = -18000
|
||||
let r[4] = r[3] * 0; // 0
|
||||
|
||||
let r[5] = 9 / 3; // 3
|
||||
let r[6] = (-18000) / 6; // -3000
|
||||
let r[7] = 32766 / (-32767); // (2^15 - 2) / (2^15 - 1) = 0
|
||||
|
||||
let r[8] = Math.sqrt(9); // 3
|
||||
let r[9] = Math.sqrt(32767); // 181
|
||||
|
||||
let r[10] = Math.min(345, 123); // 123
|
||||
let r[11] = Math.max(123, -345); // 123
|
||||
let r[12] = Math.abs(27); // 27
|
||||
let r[13] = Math.abs(-32767); // 32767
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
2
original/projects/12/MathTest/MathTest.cmp
Normal file
2
original/projects/12/MathTest/MathTest.cmp
Normal file
@@ -0,0 +1,2 @@
|
||||
|RAM[8000]|RAM[8001]|RAM[8002]|RAM[8003]|RAM[8004]|RAM[8005]|RAM[8006]|RAM[8007]|RAM[8008]|RAM[8009]|RAM[8010]|RAM[8011]|RAM[8012]|RAM[8013]|
|
||||
| 6 | -180 | -18000 | -18000 | 0 | 3 | -3000 | 0 | 3 | 181 | 123 | 123 | 27 | 32767 |
|
||||
15
original/projects/12/MathTest/MathTest.tst
Normal file
15
original/projects/12/MathTest/MathTest.tst
Normal file
@@ -0,0 +1,15 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/MathTest/MathTest.tst
|
||||
|
||||
load,
|
||||
output-file MathTest.out,
|
||||
compare-to MathTest.cmp,
|
||||
output-list RAM[8000]%D2.6.1 RAM[8001]%D2.6.1 RAM[8002]%D2.6.1 RAM[8003]%D2.6.1 RAM[8004]%D2.6.1 RAM[8005]%D2.6.1 RAM[8006]%D2.6.1 RAM[8007]%D2.6.1 RAM[8008]%D2.6.1 RAM[8009]%D2.6.1 RAM[8010]%D2.6.1 RAM[8011]%D2.6.1 RAM[8012]%D2.6.1 RAM[8013]%D2.6.1;
|
||||
|
||||
repeat 1000000 {
|
||||
vmstep;
|
||||
}
|
||||
|
||||
output;
|
||||
33
original/projects/12/Memory.jack
Normal file
33
original/projects/12/Memory.jack
Normal file
@@ -0,0 +1,33 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/Memory.jack
|
||||
/**
|
||||
* This library provides two services: direct access to the computer's main
|
||||
* memory (RAM), and allocation and recycling of memory blocks. The Hack RAM
|
||||
* consists of 32,768 words, each holding a 16-bit binary number.
|
||||
*/
|
||||
class Memory {
|
||||
|
||||
/** Initializes the class. */
|
||||
function void init() {
|
||||
}
|
||||
|
||||
/** Returns the RAM value at the given address. */
|
||||
function int peek(int address) {
|
||||
}
|
||||
|
||||
/** Sets the RAM value at the given address to the given value. */
|
||||
function void poke(int address, int value) {
|
||||
}
|
||||
|
||||
/** Finds an available RAM block of the given size and returns
|
||||
* a reference to its base address. */
|
||||
function int alloc(int size) {
|
||||
}
|
||||
|
||||
/** De-allocates the given object (cast as an array) by making
|
||||
* it available for future allocations. */
|
||||
function void deAlloc(Array o) {
|
||||
}
|
||||
}
|
||||
53
original/projects/12/MemoryTest/Main.jack
Normal file
53
original/projects/12/MemoryTest/Main.jack
Normal file
@@ -0,0 +1,53 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/MemoryTest/Main.jack
|
||||
|
||||
/** Test program for the OS Memory class. */
|
||||
class Main {
|
||||
|
||||
/** Performs various memory manipulations. */
|
||||
function void main() {
|
||||
var int temp, err;
|
||||
var Array a, b, c;
|
||||
|
||||
do Memory.poke(8000, 333); // RAM[8000] = 333
|
||||
let temp = Memory.peek(8000);
|
||||
do Memory.poke(8001, temp + 1); // RAM[8001] = 334
|
||||
|
||||
let a = Array.new(3); // uses Memory.alloc
|
||||
let a[2] = 222;
|
||||
do Memory.poke(8002, a[2]); // RAM[8002] = 222
|
||||
|
||||
let err = 0;
|
||||
let b = Array.new(3);
|
||||
let b[1] = a[2] - 100;
|
||||
if (b = a) { // Fail compare if b = a
|
||||
let err = 1; }
|
||||
do Memory.poke(8003, b[1] + err); // RAM[8003] = 122
|
||||
|
||||
let err = 0;
|
||||
let c = Array.new(500);
|
||||
let c[499] = a[2] - b[1];
|
||||
if (c = a) { // Fail compare if c = a
|
||||
let err = 1; }
|
||||
if (c = b) { // Fail compare if c = b
|
||||
let err = err + 10; }
|
||||
do Memory.poke(8004, c[499]+err); // RAM[8004] = 100
|
||||
|
||||
do a.dispose(); // uses Memory.deAlloc
|
||||
do b.dispose();
|
||||
|
||||
let err = 0;
|
||||
let b = Array.new(3);
|
||||
let b[0] = c[499] - 90;
|
||||
if (b = c) { // Fail compare if b = c
|
||||
let err = 1; }
|
||||
do Memory.poke(8005, b[0] + err); // RAM[8005] = 10
|
||||
|
||||
do c.dispose();
|
||||
do b.dispose();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
183
original/projects/12/MemoryTest/MemoryDiag/Main.jack
Normal file
183
original/projects/12/MemoryTest/MemoryDiag/Main.jack
Normal file
@@ -0,0 +1,183 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/MemoryTest/Main.jack
|
||||
|
||||
/** Test program for the OS Memory class. */
|
||||
class Main {
|
||||
|
||||
/** Test Memory.peek(), poke(), alloc() and deAlloc().
|
||||
*
|
||||
* This test is also a diagnostic. RAM[17000] is incremented before and
|
||||
* after every call so that the failure point can be accurately determined
|
||||
* when using command line testing. Return values from all alloc() calls
|
||||
* are also stored in the test results to aid debugging.
|
||||
*/
|
||||
function void main() {
|
||||
var int temp;
|
||||
var Array a, b, c, out;
|
||||
|
||||
let out = 17000; // Address where test results will be stored.
|
||||
|
||||
// Test poke() and peek().
|
||||
|
||||
let out[0] = 10; // poke test
|
||||
do Memory.poke(out + 1, 333); // RAM[17001] = 333
|
||||
|
||||
let out[0] = 11; // peek test
|
||||
let temp = Memory.peek(out + 1);
|
||||
let out[2] = temp + 1; // RAM[17002] = 334
|
||||
let out[0] = 12; // peek/poke test complete
|
||||
|
||||
// Allocate a memory block.
|
||||
// Validate that the returned block is entirely within the heap,
|
||||
// Test aborts if the block is not valid.
|
||||
|
||||
let out[0] = 20;
|
||||
let a = Memory.alloc(20);
|
||||
let out[3] = a; // RAM[17003] = block address
|
||||
|
||||
let out[0] = 21;
|
||||
do Main.checkRange(a, 20);
|
||||
let out[0] = 22;
|
||||
|
||||
// Allocate a SMALLER memory block.
|
||||
// Validate that the returned block is entirely within the heap,
|
||||
// and that it does not overlap block 'a'.
|
||||
// Test aborts if the block is not valid or overlaps.
|
||||
//
|
||||
// Common failure: first block was not removed from free list so space
|
||||
// for this block was found within the first block.
|
||||
|
||||
let out[0] = 30;
|
||||
let b = Memory.alloc(3);
|
||||
let out[4] = b; // RAM[17004] = block address
|
||||
|
||||
let out[0] = 31;
|
||||
do Main.checkRange(b, 3);
|
||||
let out[0] = 32;
|
||||
do Main.checkOverlap(b, 3, a, 3);
|
||||
let out[0] = 33;
|
||||
|
||||
// Allocate a memory block.
|
||||
// Validate that the returned block is entirely within the heap,
|
||||
// and that it does not overlap blocks 'a' or 'b'.
|
||||
// Test aborts if the block is not valid or overlaps.
|
||||
|
||||
let out[0] = 40;
|
||||
let c = Memory.alloc(500);
|
||||
let out[5] = c; // RAM[17005] = block address
|
||||
|
||||
let out[0] = 41;
|
||||
do Main.checkRange(c, 500);
|
||||
let out[0] = 42;
|
||||
do Main.checkOverlap(c, 500, a, 3);
|
||||
let out[0] = 43;
|
||||
do Main.checkOverlap(c, 500, b, 3);
|
||||
let out[0] = 44;
|
||||
|
||||
// Deallocate blocks 'a' and 'b', retaining 'c'.
|
||||
//
|
||||
// Common failure: free list corrupted by deAlloc().
|
||||
|
||||
let out[0] = 50;
|
||||
do Memory.deAlloc(a);
|
||||
|
||||
let out[0] = 51;
|
||||
do Memory.deAlloc(b);
|
||||
let out[0] = 52;
|
||||
|
||||
// Allocate a memory block.
|
||||
// Validate that the returned block is entirely within the heap,
|
||||
// and that it does not overlap blocks 'c'.
|
||||
// Test aborts if the block is not valid or overlaps.
|
||||
//
|
||||
// Common failure: free list corrupted by deAlloc().
|
||||
|
||||
let out[0] = 60;
|
||||
let b = Memory.alloc(3);
|
||||
let out[6] = b; // RAM[17006] = block address
|
||||
|
||||
let out[0] = 61;
|
||||
do Main.checkRange(b, 3);
|
||||
let out[0] = 62;
|
||||
do Main.checkOverlap(b, 3, c, 500);
|
||||
let out[0] = 63;
|
||||
|
||||
// Deallocate blocks 'b' and 'c'.
|
||||
|
||||
let out[0] = 70;
|
||||
do Memory.deAlloc(c);
|
||||
|
||||
let out[0] = 71;
|
||||
do Memory.deAlloc(b);
|
||||
let out[0] = 72;
|
||||
|
||||
// Test that deallocated blocks are placed on the free list and can
|
||||
// be reused.
|
||||
|
||||
let out[0] = 70;
|
||||
let a = Memory.alloc(8000);
|
||||
let out[7] = a; // RAM[17007] = block address
|
||||
|
||||
let out[0] = 71;
|
||||
do Main.checkRange(a, 8000);
|
||||
|
||||
let out[0] = 72;
|
||||
do Memory.deAlloc(a);
|
||||
|
||||
let out[0] = 73;
|
||||
let a = Memory.alloc(7000);
|
||||
|
||||
let out[0] = 74;
|
||||
do Main.checkRange(a, 7000);
|
||||
|
||||
let out[0] = 75;
|
||||
do Memory.deAlloc(a);
|
||||
let out[8] = a; // RAM[17008] = block address
|
||||
|
||||
// Test complete.
|
||||
let out[0] = 100;
|
||||
|
||||
// At this point all allocated blocks have been deallocated.
|
||||
//
|
||||
// You can inspect the free list and confirm that all of the heap is
|
||||
// contained in the free segments.
|
||||
//
|
||||
// If you implemented defragmentation in dealloc(), the free list
|
||||
// should contain only one segment, consisting of the entire heap.
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/** Check that block a(a_len) is in the heap.
|
||||
*
|
||||
* If the block begins or ends outside of the heap, calls Sys.halt()
|
||||
*/
|
||||
function void checkRange(int a, int a_len) {
|
||||
var int a_high;
|
||||
let a_high = (a + a_len)-1;
|
||||
if ((a < 2048) | ((a_high) > 16383)) {
|
||||
// Block is not entirely within heap.
|
||||
do Sys.halt();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Check that block a(a_len) does not overlap block b(b_len).
|
||||
* Assumes that both blocks have been range checked.
|
||||
*
|
||||
* If the blocks overlap, calls Sys.halt()
|
||||
*/
|
||||
function void checkOverlap(int a, int a_len, int b, int b_len) {
|
||||
var int a_high, b_high;
|
||||
let a_high = (a + a_len)-1;
|
||||
let b_high = (b + b_len)-1;
|
||||
if ( ~ ((a > b_high) | (a_high < b))) {
|
||||
// Block overlaps excluded range.
|
||||
do Sys.halt();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
|RAM[17000|RAM[17001|RAM[17002|RAM[17003|RAM[17004|RAM[17005|RAM[17006|RAM[17007|RAM[17008|
|
||||
| 100 | 333 | 334 |*********|*********|*********|*********|*********|*********|
|
||||
18
original/projects/12/MemoryTest/MemoryDiag/MemoryDiag.tst
Normal file
18
original/projects/12/MemoryTest/MemoryDiag/MemoryDiag.tst
Normal file
@@ -0,0 +1,18 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/MemoryTest/MemoryDiag/MemoryDiag.tst
|
||||
|
||||
echo "At the end of this test it is normal to see some pixels set on the screen";
|
||||
load,
|
||||
output-file MemoryDiag.out,
|
||||
compare-to MemoryDiag.cmp,
|
||||
output-list RAM[17000]%D2.6.1 RAM[17001]%D2.6.1 RAM[17002]%D2.6.1
|
||||
RAM[17003]%D2.6.1 RAM[17004]%D2.6.1 RAM[17005]%D2.6.1 RAM[17006]%D2.6.1
|
||||
RAM[17007]%D2.6.1 RAM[17008]%D2.6.1;
|
||||
|
||||
repeat 1000000 {
|
||||
vmstep;
|
||||
}
|
||||
|
||||
output;
|
||||
55
original/projects/12/MemoryTest/MemoryDiag/README.html
Normal file
55
original/projects/12/MemoryTest/MemoryDiag/README.html
Normal file
@@ -0,0 +1,55 @@
|
||||
<html>
|
||||
<h4>MemoryDiag is both a pass/fail test and a diagnostic.</h4>
|
||||
<p>
|
||||
MemoryDiag tests the following:
|
||||
<ol>
|
||||
<li>Memory.peek() and Memory.poke() read from and write to the specified memory address.</li>
|
||||
<li>Memory.alloc() returns RAM blocks that are fully contained within the heap address range 2048-16383.</li>
|
||||
<li>Memory.alloc() does not return RAM blocks that overlap each other.</li>
|
||||
<li>RAM blocks deallocated by Memory.deAlloc() are made available for Memory.alloc() to reuse.</li>
|
||||
</ol>
|
||||
The block reuse test allocates and deallocates an 8000 word block. It then tries to allocates a 7000 word block which must be allocated from the deallocated 8000 word block. If the 8000 word block is not available for reuse, there will only be about 6300 words available in the heap so you will get an ERR6.
|
||||
<p>
|
||||
<i>At the end of this test it is normal to see some pixels set on the screen.</i> This is because the results of the test are written to RAM[17000] – RAM[17008] which is in the Screen memory. MemoryDiag does not put its results in the first 16K of RAM because it must not interfere with the Memory.jack that is being tested.
|
||||
|
||||
|
||||
<h4>Using MemoryDiag as a diagnostic</h4>
|
||||
|
||||
RAM[17000] is set to a unique value before every system call and address validation. This allows the exact failure location in the test to be identified when automated testing is used. At the end of the test, RAM[17000] is set to 100.
|
||||
<p>
|
||||
When the test fails to compare, look at the MemoryDiag.out file and note the RAM[17000] value. This is the test <i>step</i> that failed. Look through the Main.jack code and find the corresponding<br>
|
||||
  <tt>let out[0] = <i>step</i>;</tt><br>
|
||||
statement. The function immediately following this statement is where the failure occurred.
|
||||
<p>
|
||||
For example, if RAM[17000] is 51, the<br>
|
||||
  <tt>do Memory.deAlloc(b);</tt><br>
|
||||
call did not return. Either there was a simulation error like a bad address or deAlloc() got stuck in a loop.
|
||||
|
||||
|
||||
<h4>Sample MemoryDiag output files</h4>
|
||||
|
||||
<i>Note that RAM[17003] – RAM[17008] are "don't care" values in the MemoryDiag.cmp file.</i>
|
||||
<p>
|
||||
Supplied Memory.vm passes:
|
||||
<pre style="padding-left:2em;">
|
||||
|RAM[17000|RAM[17001|RAM[17002|RAM[17003|RAM[17004|RAM[17005|RAM[17006|RAM[17007|RAM[17008|
|
||||
| 100 | 333 | 334 | 2050 | 2072 | 2077 | 2050 | 2050 | 2050 |
|
||||
</pre>
|
||||
Memory.Jack using the Coursera implementation passes:
|
||||
<pre style="padding-left:2em;">
|
||||
|RAM[17000|RAM[17001|RAM[17002|RAM[17003|RAM[17004|RAM[17005|RAM[17006|RAM[17007|RAM[17008|
|
||||
| 100 | 333 | 334 | 16364 | 16359 | 15857 | 15852 | 7850 | 8850 |
|
||||
</pre>
|
||||
Broken Memory.jack fails (alloc() returns duplicate block address):
|
||||
<pre style="padding-left:2em;">
|
||||
|RAM[17000|RAM[17001|RAM[17002|RAM[17003|RAM[17004|RAM[17005|RAM[17006|RAM[17007|RAM[17008|
|
||||
| 32 | 333 | 334 | 2050 | 2050 | 0 | 0 | 0 | 0 |
|
||||
</pre>
|
||||
Broken Memory.jack fails (deAlloc() does not recycle memory blocks):
|
||||
<pre style="padding-left:2em;">
|
||||
|RAM[17000|RAM[17001|RAM[17002|RAM[17003|RAM[17004|RAM[17005|RAM[17006|RAM[17007|RAM[17008|
|
||||
| 73 | 333 | 334 | 16364 | 16359 | 15857 | 15852 | 7850 | 0 |
|
||||
</pre>
|
||||
|
||||
</html>
|
||||
<p>
|
||||
2
original/projects/12/MemoryTest/MemoryTest.cmp
Normal file
2
original/projects/12/MemoryTest/MemoryTest.cmp
Normal file
@@ -0,0 +1,2 @@
|
||||
|RAM[8000]|RAM[8001]|RAM[8002]|RAM[8003]|RAM[8004]|RAM[8005]|
|
||||
| 333 | 334 | 222 | 122 | 100 | 10 |
|
||||
15
original/projects/12/MemoryTest/MemoryTest.tst
Normal file
15
original/projects/12/MemoryTest/MemoryTest.tst
Normal file
@@ -0,0 +1,15 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/MemoryTest/MemoryTest.tst
|
||||
|
||||
load,
|
||||
output-file MemoryTest.out,
|
||||
compare-to MemoryTest.cmp,
|
||||
output-list RAM[8000]%D2.6.1 RAM[8001]%D2.6.1 RAM[8002]%D2.6.1 RAM[8003]%D2.6.1 RAM[8004]%D2.6.1 RAM[8005]%D2.6.1;
|
||||
|
||||
repeat 1000000 {
|
||||
vmstep;
|
||||
}
|
||||
|
||||
output;
|
||||
9
original/projects/12/MemoryTest/README.txt
Normal file
9
original/projects/12/MemoryTest/README.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
There are some specific wrong values that indicate that your Memory.jack
|
||||
returned identical pointers to allocated segments. Look at Main.jack to
|
||||
see where the pointers a, b and c are used.
|
||||
|
||||
RAM[8003] = 123 b = a
|
||||
RAM[8004] = 101 c = a
|
||||
RAM[8004] = 110 c = b
|
||||
RAM[8004] = 111 c = a and c = b
|
||||
RAM[8005] = 11 new b = c
|
||||
202
original/projects/12/Output.jack
Normal file
202
original/projects/12/Output.jack
Normal file
@@ -0,0 +1,202 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/Output.jack
|
||||
/**
|
||||
* A library of functions for writing text on the screen.
|
||||
* The Hack physical screen consists of 512 rows of 256 pixels each.
|
||||
* The library uses a fixed font, in which each character is displayed
|
||||
* within a frame which is 11 pixels high (including 1 pixel for inter-line
|
||||
* spacing) and 8 pixels wide (including 2 pixels for inter-character spacing).
|
||||
* The resulting grid accommodates 23 rows (indexed 0..22, top to bottom)
|
||||
* of 64 characters each (indexed 0..63, left to right). The top left
|
||||
* character position on the screen is indexed (0,0). A cursor, implemented
|
||||
* as a small filled square, indicates where the next character will be displayed.
|
||||
*/
|
||||
class Output {
|
||||
|
||||
// Character map for displaying characters
|
||||
static Array charMaps;
|
||||
|
||||
/** Initializes the screen, and locates the cursor at the screen's top-left. */
|
||||
function void init() {
|
||||
}
|
||||
|
||||
// Initializes the character map array
|
||||
function void initMap() {
|
||||
var int i;
|
||||
|
||||
let charMaps = Array.new(127);
|
||||
|
||||
// Black square, used for displaying non-printable characters.
|
||||
do Output.create(0,63,63,63,63,63,63,63,63,63,0,0);
|
||||
|
||||
// Assigns the bitmap for each character in the charachter set.
|
||||
// The first parameter is the character index, the next 11 numbers
|
||||
// are the values of each row in the frame that represents this character.
|
||||
do Output.create(32,0,0,0,0,0,0,0,0,0,0,0); //
|
||||
do Output.create(33,12,30,30,30,12,12,0,12,12,0,0); // !
|
||||
do Output.create(34,54,54,20,0,0,0,0,0,0,0,0); // "
|
||||
do Output.create(35,0,18,18,63,18,18,63,18,18,0,0); // #
|
||||
do Output.create(36,12,30,51,3,30,48,51,30,12,12,0); // $
|
||||
do Output.create(37,0,0,35,51,24,12,6,51,49,0,0); // %
|
||||
do Output.create(38,12,30,30,12,54,27,27,27,54,0,0); // &
|
||||
do Output.create(39,12,12,6,0,0,0,0,0,0,0,0); // '
|
||||
do Output.create(40,24,12,6,6,6,6,6,12,24,0,0); // (
|
||||
do Output.create(41,6,12,24,24,24,24,24,12,6,0,0); // )
|
||||
do Output.create(42,0,0,0,51,30,63,30,51,0,0,0); // *
|
||||
do Output.create(43,0,0,0,12,12,63,12,12,0,0,0); // +
|
||||
do Output.create(44,0,0,0,0,0,0,0,12,12,6,0); // ,
|
||||
do Output.create(45,0,0,0,0,0,63,0,0,0,0,0); // -
|
||||
do Output.create(46,0,0,0,0,0,0,0,12,12,0,0); // .
|
||||
do Output.create(47,0,0,32,48,24,12,6,3,1,0,0); // /
|
||||
|
||||
do Output.create(48,12,30,51,51,51,51,51,30,12,0,0); // 0
|
||||
do Output.create(49,12,14,15,12,12,12,12,12,63,0,0); // 1
|
||||
do Output.create(50,30,51,48,24,12,6,3,51,63,0,0); // 2
|
||||
do Output.create(51,30,51,48,48,28,48,48,51,30,0,0); // 3
|
||||
do Output.create(52,16,24,28,26,25,63,24,24,60,0,0); // 4
|
||||
do Output.create(53,63,3,3,31,48,48,48,51,30,0,0); // 5
|
||||
do Output.create(54,28,6,3,3,31,51,51,51,30,0,0); // 6
|
||||
do Output.create(55,63,49,48,48,24,12,12,12,12,0,0); // 7
|
||||
do Output.create(56,30,51,51,51,30,51,51,51,30,0,0); // 8
|
||||
do Output.create(57,30,51,51,51,62,48,48,24,14,0,0); // 9
|
||||
|
||||
do Output.create(58,0,0,12,12,0,0,12,12,0,0,0); // :
|
||||
do Output.create(59,0,0,12,12,0,0,12,12,6,0,0); // ;
|
||||
do Output.create(60,0,0,24,12,6,3,6,12,24,0,0); // <
|
||||
do Output.create(61,0,0,0,63,0,0,63,0,0,0,0); // =
|
||||
do Output.create(62,0,0,3,6,12,24,12,6,3,0,0); // >
|
||||
do Output.create(64,30,51,51,59,59,59,27,3,30,0,0); // @
|
||||
do Output.create(63,30,51,51,24,12,12,0,12,12,0,0); // ?
|
||||
|
||||
do Output.create(65,0,0,0,0,0,0,0,0,0,0,0); // A ** TO BE FILLED **
|
||||
do Output.create(66,31,51,51,51,31,51,51,51,31,0,0); // B
|
||||
do Output.create(67,28,54,35,3,3,3,35,54,28,0,0); // C
|
||||
do Output.create(68,15,27,51,51,51,51,51,27,15,0,0); // D
|
||||
do Output.create(69,63,51,35,11,15,11,35,51,63,0,0); // E
|
||||
do Output.create(70,63,51,35,11,15,11,3,3,3,0,0); // F
|
||||
do Output.create(71,28,54,35,3,59,51,51,54,44,0,0); // G
|
||||
do Output.create(72,51,51,51,51,63,51,51,51,51,0,0); // H
|
||||
do Output.create(73,30,12,12,12,12,12,12,12,30,0,0); // I
|
||||
do Output.create(74,60,24,24,24,24,24,27,27,14,0,0); // J
|
||||
do Output.create(75,51,51,51,27,15,27,51,51,51,0,0); // K
|
||||
do Output.create(76,3,3,3,3,3,3,35,51,63,0,0); // L
|
||||
do Output.create(77,33,51,63,63,51,51,51,51,51,0,0); // M
|
||||
do Output.create(78,51,51,55,55,63,59,59,51,51,0,0); // N
|
||||
do Output.create(79,30,51,51,51,51,51,51,51,30,0,0); // O
|
||||
do Output.create(80,31,51,51,51,31,3,3,3,3,0,0); // P
|
||||
do Output.create(81,30,51,51,51,51,51,63,59,30,48,0);// Q
|
||||
do Output.create(82,31,51,51,51,31,27,51,51,51,0,0); // R
|
||||
do Output.create(83,30,51,51,6,28,48,51,51,30,0,0); // S
|
||||
do Output.create(84,63,63,45,12,12,12,12,12,30,0,0); // T
|
||||
do Output.create(85,51,51,51,51,51,51,51,51,30,0,0); // U
|
||||
do Output.create(86,51,51,51,51,51,30,30,12,12,0,0); // V
|
||||
do Output.create(87,51,51,51,51,51,63,63,63,18,0,0); // W
|
||||
do Output.create(88,51,51,30,30,12,30,30,51,51,0,0); // X
|
||||
do Output.create(89,51,51,51,51,30,12,12,12,30,0,0); // Y
|
||||
do Output.create(90,63,51,49,24,12,6,35,51,63,0,0); // Z
|
||||
|
||||
do Output.create(91,30,6,6,6,6,6,6,6,30,0,0); // [
|
||||
do Output.create(92,0,0,1,3,6,12,24,48,32,0,0); // \
|
||||
do Output.create(93,30,24,24,24,24,24,24,24,30,0,0); // ]
|
||||
do Output.create(94,8,28,54,0,0,0,0,0,0,0,0); // ^
|
||||
do Output.create(95,0,0,0,0,0,0,0,0,0,63,0); // _
|
||||
do Output.create(96,6,12,24,0,0,0,0,0,0,0,0); // `
|
||||
|
||||
do Output.create(97,0,0,0,14,24,30,27,27,54,0,0); // a
|
||||
do Output.create(98,3,3,3,15,27,51,51,51,30,0,0); // b
|
||||
do Output.create(99,0,0,0,30,51,3,3,51,30,0,0); // c
|
||||
do Output.create(100,48,48,48,60,54,51,51,51,30,0,0); // d
|
||||
do Output.create(101,0,0,0,30,51,63,3,51,30,0,0); // e
|
||||
do Output.create(102,28,54,38,6,15,6,6,6,15,0,0); // f
|
||||
do Output.create(103,0,0,30,51,51,51,62,48,51,30,0); // g
|
||||
do Output.create(104,3,3,3,27,55,51,51,51,51,0,0); // h
|
||||
do Output.create(105,12,12,0,14,12,12,12,12,30,0,0); // i
|
||||
do Output.create(106,48,48,0,56,48,48,48,48,51,30,0); // j
|
||||
do Output.create(107,3,3,3,51,27,15,15,27,51,0,0); // k
|
||||
do Output.create(108,14,12,12,12,12,12,12,12,30,0,0); // l
|
||||
do Output.create(109,0,0,0,29,63,43,43,43,43,0,0); // m
|
||||
do Output.create(110,0,0,0,29,51,51,51,51,51,0,0); // n
|
||||
do Output.create(111,0,0,0,30,51,51,51,51,30,0,0); // o
|
||||
do Output.create(112,0,0,0,30,51,51,51,31,3,3,0); // p
|
||||
do Output.create(113,0,0,0,30,51,51,51,62,48,48,0); // q
|
||||
do Output.create(114,0,0,0,29,55,51,3,3,7,0,0); // r
|
||||
do Output.create(115,0,0,0,30,51,6,24,51,30,0,0); // s
|
||||
do Output.create(116,4,6,6,15,6,6,6,54,28,0,0); // t
|
||||
do Output.create(117,0,0,0,27,27,27,27,27,54,0,0); // u
|
||||
do Output.create(118,0,0,0,51,51,51,51,30,12,0,0); // v
|
||||
do Output.create(119,0,0,0,51,51,51,63,63,18,0,0); // w
|
||||
do Output.create(120,0,0,0,51,30,12,12,30,51,0,0); // x
|
||||
do Output.create(121,0,0,0,51,51,51,62,48,24,15,0); // y
|
||||
do Output.create(122,0,0,0,63,27,12,6,51,63,0,0); // z
|
||||
|
||||
do Output.create(123,56,12,12,12,7,12,12,12,56,0,0); // {
|
||||
do Output.create(124,12,12,12,12,12,12,12,12,12,0,0); // |
|
||||
do Output.create(125,7,12,12,12,56,12,12,12,7,0,0); // }
|
||||
do Output.create(126,38,45,25,0,0,0,0,0,0,0,0); // ~
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Creates the character map array of the given character index, using the given values.
|
||||
function void create(int index, int a, int b, int c, int d, int e,
|
||||
int f, int g, int h, int i, int j, int k) {
|
||||
var Array map;
|
||||
|
||||
let map = Array.new(11);
|
||||
let charMaps[index] = map;
|
||||
|
||||
let map[0] = a;
|
||||
let map[1] = b;
|
||||
let map[2] = c;
|
||||
let map[3] = d;
|
||||
let map[4] = e;
|
||||
let map[5] = f;
|
||||
let map[6] = g;
|
||||
let map[7] = h;
|
||||
let map[8] = i;
|
||||
let map[9] = j;
|
||||
let map[10] = k;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Returns the character map (array of size 11) of the given character.
|
||||
// If the given character is invalid or non-printable, returns the
|
||||
// character map of a black square.
|
||||
function Array getMap(char c) {
|
||||
if ((c < 32) | (c > 126)) {
|
||||
let c = 0;
|
||||
}
|
||||
return charMaps[c];
|
||||
}
|
||||
|
||||
/** Moves the cursor to the j-th column of the i-th row,
|
||||
* and erases the character displayed there. */
|
||||
function void moveCursor(int i, int j) {
|
||||
}
|
||||
|
||||
/** Displays the given character at the cursor location,
|
||||
* and advances the cursor one column forward. */
|
||||
function void printChar(char c) {
|
||||
}
|
||||
|
||||
/** displays the given string starting at the cursor location,
|
||||
* and advances the cursor appropriately. */
|
||||
function void printString(String s) {
|
||||
}
|
||||
|
||||
/** Displays the given integer starting at the cursor location,
|
||||
* and advances the cursor appropriately. */
|
||||
function void printInt(int i) {
|
||||
}
|
||||
|
||||
/** Advances the cursor to the beginning of the next line. */
|
||||
function void println() {
|
||||
}
|
||||
|
||||
/** Moves the cursor one column back. */
|
||||
function void backSpace() {
|
||||
}
|
||||
}
|
||||
42
original/projects/12/OutputTest/Main.jack
Normal file
42
original/projects/12/OutputTest/Main.jack
Normal file
@@ -0,0 +1,42 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/12/OutputTest/Main.jack
|
||||
|
||||
/** Test program for the OS Output class. */
|
||||
class Main {
|
||||
|
||||
/** Outputs the entire character set to the screen using all the
|
||||
* methods of the Output class. */
|
||||
function void main() {
|
||||
var String s;
|
||||
|
||||
let s = String.new(1);
|
||||
do s.appendChar(String.doubleQuote());
|
||||
|
||||
do Output.moveCursor(0, 63);
|
||||
do Output.printChar(66);
|
||||
do Output.moveCursor(22, 0);
|
||||
do Output.printChar(67);
|
||||
do Output.moveCursor(22, 63);
|
||||
do Output.printChar(68);
|
||||
do Output.printChar(65);
|
||||
|
||||
do Output.moveCursor(2, 0);
|
||||
do Output.printString("0123456789");
|
||||
do Output.println();
|
||||
|
||||
do Output.printString("ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz");
|
||||
do Output.println();
|
||||
|
||||
do Output.printString("!#$%&'()*+,-./:;<=>?@[\]^_`{|}~");
|
||||
do Output.printString(s);
|
||||
do Output.println();
|
||||
|
||||
do Output.printInt(-12345);
|
||||
do Output.backSpace();
|
||||
do Output.printInt(6789);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user