summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <me@ypei.me>2017-12-12 14:30:43 +0100
committerYuchen Pei <me@ypei.me>2017-12-12 14:30:43 +0100
commitec61018d15ba4ad0a41e1ab44d7e1ecb5f2870d2 (patch)
tree95941d2d7106df0f4641a22f0aa3f4f974bfe338
parent7ce33ecd1734f5a83afb55b8311b541d17cbbd6f (diff)
finished project 4
-rw-r--r--chapter 04.pdfbin0 -> 357401 bytes
-rw-r--r--projects/04/fill/Fill.asm64
-rw-r--r--projects/04/fill/Fill.tst2
-rw-r--r--projects/04/fill/FillAutomatic.out4
-rw-r--r--projects/04/fill/FillAutomatic.tst2
-rw-r--r--projects/04/mult/Mult.asm (renamed from projects/04/mult/mult.asm)26
-rw-r--r--projects/04/mult/Mult.out7
-rw-r--r--projects/04/mult/Mult.tst2
-rwxr-xr-x[-rw-r--r--]tools/CPUEmulator.sh0
9 files changed, 102 insertions, 5 deletions
diff --git a/chapter 04.pdf b/chapter 04.pdf
new file mode 100644
index 0000000..4f53042
--- /dev/null
+++ b/chapter 04.pdf
Binary files differ
diff --git a/projects/04/fill/Fill.asm b/projects/04/fill/Fill.asm
index 8f24a95..16d63e2 100644
--- a/projects/04/fill/Fill.asm
+++ b/projects/04/fill/Fill.asm
@@ -11,4 +11,66 @@
// "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
+// Put your code here.
+
+(BEGIN)
+@KBD
+D=M
+
+@BLACK
+D;JNE
+
+@WHITE
+0;JMP
+
+(BLACK)
+@8191
+D=A
+@i
+M=D
+
+(LOOPB)
+@i
+D=M
+@j
+M=D
+@SCREEN
+D=A
+@j
+M=M+D
+A=M
+M=-1
+@i
+M=M-1
+D=M
+@LOOPB
+D+1;JGT
+
+@BEGIN
+0;JMP
+
+(WHITE)
+@8191
+D=A
+@i
+M=D
+
+(LOOPW)
+@i
+D=M
+@j
+M=D
+@SCREEN
+D=A
+@j
+M=M+D
+A=M
+M=0
+@i
+M=M-1
+D=M
+@LOOPW
+D+1;JGT
+
+@BEGIN
+0;JMP
diff --git a/projects/04/fill/Fill.tst b/projects/04/fill/Fill.tst
index 149bfee..e8bb385 100644
--- a/projects/04/fill/Fill.tst
+++ b/projects/04/fill/Fill.tst
@@ -3,7 +3,7 @@
// by Nisan and Schocken, MIT Press.
// File name: projects/04/fill/Fill.tst
-load Fill.hack;
+load Fill.asm;
echo "Make sure that 'No Animation' is selected. Then, select the keyboard, press any key for some time, and inspect the screen.";
repeat {
diff --git a/projects/04/fill/FillAutomatic.out b/projects/04/fill/FillAutomatic.out
new file mode 100644
index 0000000..a71db27
--- /dev/null
+++ b/projects/04/fill/FillAutomatic.out
@@ -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
index 90bfef9..fbc29a0 100644
--- a/projects/04/fill/FillAutomatic.tst
+++ b/projects/04/fill/FillAutomatic.tst
@@ -12,7 +12,7 @@
// 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,
+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;
diff --git a/projects/04/mult/mult.asm b/projects/04/mult/Mult.asm
index b44440a..50bbba0 100644
--- a/projects/04/mult/mult.asm
+++ b/projects/04/mult/Mult.asm
@@ -6,4 +6,28 @@
// 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
+// Put your code here.
+
+@i
+M=0
+@R2
+M=0
+
+(LOOP)
+@i
+M=M+1
+D=M
+@R0
+D=D-M
+@END
+D;JGT
+@R1
+D=M
+@R2
+M=M+D
+@LOOP
+0;JMP
+
+(END)
+@END
+0;JMP
diff --git a/projects/04/mult/Mult.out b/projects/04/mult/Mult.out
new file mode 100644
index 0000000..e31b5df
--- /dev/null
+++ b/projects/04/mult/Mult.out
@@ -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 |
diff --git a/projects/04/mult/Mult.tst b/projects/04/mult/Mult.tst
index f877664..9bf4fa8 100644
--- a/projects/04/mult/Mult.tst
+++ b/projects/04/mult/Mult.tst
@@ -3,7 +3,7 @@
// by Nisan and Schocken, MIT Press.
// File name: projects/04/mult/Mult.tst
-load Mult.hack,
+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;
diff --git a/tools/CPUEmulator.sh b/tools/CPUEmulator.sh
index 033d9d7..033d9d7 100644..100755
--- a/tools/CPUEmulator.sh
+++ b/tools/CPUEmulator.sh