From a000308104aab27c2dde9a306f1bc654b2db4806 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Wed, 29 Nov 2017 12:30:41 +0100 Subject: first commit --- projects/04/fill/Fill.asm | 14 ++++++++ projects/04/fill/Fill.tst | 11 ++++++ projects/04/fill/FillAutomatic.cmp | 4 +++ projects/04/fill/FillAutomatic.tst | 37 +++++++++++++++++++ projects/04/mult/Mult.cmp | 7 ++++ projects/04/mult/Mult.tst | 74 ++++++++++++++++++++++++++++++++++++++ projects/04/mult/mult.asm | 9 +++++ 7 files changed, 156 insertions(+) create mode 100644 projects/04/fill/Fill.asm create mode 100644 projects/04/fill/Fill.tst create mode 100644 projects/04/fill/FillAutomatic.cmp create mode 100644 projects/04/fill/FillAutomatic.tst create mode 100644 projects/04/mult/Mult.cmp create mode 100644 projects/04/mult/Mult.tst create mode 100644 projects/04/mult/mult.asm (limited to 'projects/04') 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 -- cgit v1.2.3