aboutsummaryrefslogtreecommitdiff
path: root/projects/04
diff options
context:
space:
mode:
Diffstat (limited to 'projects/04')
-rw-r--r--projects/04/fill/Fill.asm14
-rw-r--r--projects/04/fill/Fill.tst11
-rw-r--r--projects/04/fill/FillAutomatic.cmp4
-rw-r--r--projects/04/fill/FillAutomatic.tst37
-rw-r--r--projects/04/mult/Mult.cmp7
-rw-r--r--projects/04/mult/Mult.tst74
-rw-r--r--projects/04/mult/mult.asm9
7 files changed, 156 insertions, 0 deletions
diff --git a/projects/04/fill/Fill.asm b/projects/04/fill/Fill.asm
new file mode 100644
index 0000000..8f24a95
--- /dev/null
+++ b/projects/04/fill/Fill.asm
@@ -0,0 +1,14 @@
+// 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/04/Fill.asm
+
+// Runs an infinite loop that listens to the keyboard input.
+// When a key is pressed (any key), the program blackens the screen,
+// i.e. writes "black" in every pixel;
+// the screen should remain fully black as long as the key is pressed.
+// When no key is pressed, the program clears the screen, i.e. writes
+// "white" in every pixel;
+// the screen should remain fully clear as long as no key is pressed.
+
+// Put your code here. \ No newline at end of file
diff --git a/projects/04/fill/Fill.tst b/projects/04/fill/Fill.tst
new file mode 100644
index 0000000..149bfee
--- /dev/null
+++ b/projects/04/fill/Fill.tst
@@ -0,0 +1,11 @@
+// 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/04/fill/Fill.tst
+
+load Fill.hack;
+echo "Make sure that 'No Animation' is selected. Then, select the keyboard, press any key for some time, and inspect the screen.";
+
+repeat {
+ ticktock;
+}
diff --git a/projects/04/fill/FillAutomatic.cmp b/projects/04/fill/FillAutomatic.cmp
new file mode 100644
index 0000000..a71db27
--- /dev/null
+++ b/projects/04/fill/FillAutomatic.cmp
@@ -0,0 +1,4 @@
+|RAM[16384]|RAM[17648]|RAM[18349]|RAM[19444]|RAM[20771]|RAM[21031]|RAM[22596]|RAM[23754]|RAM[24575]|
+| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
+| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
diff --git a/projects/04/fill/FillAutomatic.tst b/projects/04/fill/FillAutomatic.tst
new file mode 100644
index 0000000..90bfef9
--- /dev/null
+++ b/projects/04/fill/FillAutomatic.tst
@@ -0,0 +1,37 @@
+// 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/04/fill/FillAutomatic
+
+// This script can be used to test the Fill program automatically,
+// rather than interactively. Specifically, the script sets the keyboard
+// memory map (RAM[24576]) to 0, 1, and then again to 0. This simulates the
+// acts of leaving the keyboard untouched, pressing some key, and then releasing
+// the key. After each on of these simulated events, the script outputs the values
+// of some selected registers from the screen memory map (RAM[16384]-RAM[24576]).
+// This is done in order to test that these registers are set to 000...0 or 111....1,
+// as mandated by how the Fill program should react to the keyboard events.
+
+load Fill.hack,
+output-file FillAutomatic.out,
+compare-to FillAutomatic.cmp,
+output-list RAM[16384]%D2.6.2 RAM[17648]%D2.6.2 RAM[18349]%D2.6.2 RAM[19444]%D2.6.2 RAM[20771]%D2.6.2 RAM[21031]%D2.6.2 RAM[22596]%D2.6.2 RAM[23754]%D2.6.2 RAM[24575]%D2.6.2;
+
+set RAM[24576] 0, // the keyboard is untouched
+repeat 1000000 {
+ ticktock;
+}
+output; // test that the screen is white
+
+set RAM[24576] 1, // a keyboard key is pressed
+repeat 1000000 {
+ ticktock;
+}
+output; // test that the screen is black
+
+set RAM[24576] 0, // they keyboard in untouched
+repeat 1000000 {
+ ticktock;
+}
+output; // test that the screen is white
+
diff --git a/projects/04/mult/Mult.cmp b/projects/04/mult/Mult.cmp
new file mode 100644
index 0000000..296b5fb
--- /dev/null
+++ b/projects/04/mult/Mult.cmp
@@ -0,0 +1,7 @@
+| RAM[0] | RAM[1] | RAM[2] |
+| 0 | 0 | 0 |
+| 1 | 0 | 0 |
+| 0 | 2 | 0 |
+| 3 | 1 | 3 |
+| 2 | 4 | 8 |
+| 6 | 7 | 42 | \ No newline at end of file
diff --git a/projects/04/mult/Mult.tst b/projects/04/mult/Mult.tst
new file mode 100644
index 0000000..f877664
--- /dev/null
+++ b/projects/04/mult/Mult.tst
@@ -0,0 +1,74 @@
+// 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/04/mult/Mult.tst
+
+load Mult.hack,
+output-file Mult.out,
+compare-to Mult.cmp,
+output-list RAM[0]%D2.6.2 RAM[1]%D2.6.2 RAM[2]%D2.6.2;
+
+set RAM[0] 0, // Set test arguments
+set RAM[1] 0,
+set RAM[2] -1; // Test that program initialized product to 0
+repeat 20 {
+ ticktock;
+}
+set RAM[0] 0, // Restore arguments in case program used them as loop counter
+set RAM[1] 0,
+output;
+
+set PC 0,
+set RAM[0] 1, // Set test arguments
+set RAM[1] 0,
+set RAM[2] -1; // Ensure that program initialized product to 0
+repeat 50 {
+ ticktock;
+}
+set RAM[0] 1, // Restore arguments in case program used them as loop counter
+set RAM[1] 0,
+output;
+
+set PC 0,
+set RAM[0] 0, // Set test arguments
+set RAM[1] 2,
+set RAM[2] -1; // Ensure that program initialized product to 0
+repeat 80 {
+ ticktock;
+}
+set RAM[0] 0, // Restore arguments in case program used them as loop counter
+set RAM[1] 2,
+output;
+
+set PC 0,
+set RAM[0] 3, // Set test arguments
+set RAM[1] 1,
+set RAM[2] -1; // Ensure that program initialized product to 0
+repeat 120 {
+ ticktock;
+}
+set RAM[0] 3, // Restore arguments in case program used them as loop counter
+set RAM[1] 1,
+output;
+
+set PC 0,
+set RAM[0] 2, // Set test arguments
+set RAM[1] 4,
+set RAM[2] -1; // Ensure that program initialized product to 0
+repeat 150 {
+ ticktock;
+}
+set RAM[0] 2, // Restore arguments in case program used them as loop counter
+set RAM[1] 4,
+output;
+
+set PC 0,
+set RAM[0] 6, // Set test arguments
+set RAM[1] 7,
+set RAM[2] -1; // Ensure that program initialized product to 0
+repeat 210 {
+ ticktock;
+}
+set RAM[0] 6, // Restore arguments in case program used them as loop counter
+set RAM[1] 7,
+output;
diff --git a/projects/04/mult/mult.asm b/projects/04/mult/mult.asm
new file mode 100644
index 0000000..b44440a
--- /dev/null
+++ b/projects/04/mult/mult.asm
@@ -0,0 +1,9 @@
+// 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/04/Mult.asm
+
+// Multiplies R0 and R1 and stores the result in R2.
+// (R0, R1, R2 refer to RAM[0], RAM[1], and RAM[2], respectively.)
+
+// Put your code here. \ No newline at end of file