From dd31b8f1dc9bf524606f24a57c867c610264365e Mon Sep 17 00:00:00 2001 From: Sean O'Connor Date: Wed, 3 Sep 2025 10:45:45 -0400 Subject: [PATCH] project04: add template files --- 04/fill/Fill.asm | 11 ++++++ 04/fill/Fill.tst | 13 +++++++ 04/fill/FillAutomatic.tst | 36 ++++++++++++++++++ 04/mult/Mult.asm | 10 +++++ 04/mult/Mult.tst | 78 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 148 insertions(+) create mode 100644 04/fill/Fill.asm create mode 100644 04/fill/Fill.tst create mode 100644 04/fill/FillAutomatic.tst create mode 100644 04/mult/Mult.asm create mode 100644 04/mult/Mult.tst diff --git a/04/fill/Fill.asm b/04/fill/Fill.asm new file mode 100644 index 0000000..29f6c20 --- /dev/null +++ b/04/fill/Fill.asm @@ -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/4/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. When no key is pressed, +// the screen should be cleared. + +//// Replace this comment with your code. diff --git a/04/fill/Fill.tst b/04/fill/Fill.tst new file mode 100644 index 0000000..82760f9 --- /dev/null +++ b/04/fill/Fill.tst @@ -0,0 +1,13 @@ +// 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 + +// Tests the Fill.hack program in the CPU emulator. + +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/04/fill/FillAutomatic.tst b/04/fill/FillAutomatic.tst new file mode 100644 index 0000000..4617fd8 --- /dev/null +++ b/04/fill/FillAutomatic.tst @@ -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/4/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 one 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.asm, +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; // tests that the screen is white + +set RAM[24576] 1, // a keyboard key is pressed +repeat 1000000 { + ticktock; +} +output; // tests that the screen is black + +set RAM[24576] 0, // the keyboard is untouched +repeat 1000000 { + ticktock; +} +output; // tests that the screen is white diff --git a/04/mult/Mult.asm b/04/mult/Mult.asm new file mode 100644 index 0000000..c131db2 --- /dev/null +++ b/04/mult/Mult.asm @@ -0,0 +1,10 @@ +// 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/4/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.) +// The algorithm is based on repetitive addition. + +//// Replace this comment with your code. diff --git a/04/mult/Mult.tst b/04/mult/Mult.tst new file mode 100644 index 0000000..04e181e --- /dev/null +++ b/04/mult/Mult.tst @@ -0,0 +1,78 @@ +// 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/4/mult/Mult.tst + +// Tests the Mult program, designed to compute R2 = R0 * R1. +// Tests the program by having it multiply several sets of +// R0 and R1 values. + +load Mult.asm, +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, // Sets R0 and R1 to some input values +set RAM[1] 0, +set RAM[2] -1; // Ensures that the program initialized R2 to 0 +repeat 20 { + ticktock; +} +set RAM[0] 0, // Restores R0 and R1 in case the program changed them +set RAM[1] 0, +output; + +set PC 0, +set RAM[0] 1, // Sets R0 and R1 to some input values +set RAM[1] 0, +set RAM[2] -1; // Ensures that the program initialized R2 to 0 +repeat 50 { + ticktock; +} +set RAM[0] 1, // Restores R0 and R1 in case the program changed them +set RAM[1] 0, +output; + +set PC 0, +set RAM[0] 0, // Sets R0 and R1 to some input values +set RAM[1] 2, +set RAM[2] -1; // Ensures that the program initialized R2 to 0 +repeat 80 { + ticktock; +} +set RAM[0] 0, // Restores R0 and R1 in case the program changed them +set RAM[1] 2, +output; + +set PC 0, +set RAM[0] 3, // Sets R0 and R1 to some input values +set RAM[1] 1, +set RAM[2] -1; // Ensures that the program initialized R2 to 0 +repeat 120 { + ticktock; +} +set RAM[0] 3, // Restores R0 and R1 in case the program changed them +set RAM[1] 1, +output; + +set PC 0, +set RAM[0] 2, // Sets R0 and R1 to some input values +set RAM[1] 4, +set RAM[2] -1; // Ensures that the program initialized R2 to 0 +repeat 150 { + ticktock; +} +set RAM[0] 2, // Restores R0 and R1 in case the program changed them +set RAM[1] 4, +output; + +set PC 0, +set RAM[0] 6, // Sets R0 and R1 to some input values +set RAM[1] 7, +set RAM[2] -1; // Ensures that the program initialized R2 to 0 +repeat 210 { + ticktock; +} +set RAM[0] 6, // Restores R0 and R1 in case the program changed them +set RAM[1] 7, +output;