-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Completed the Familiarization with Hack Computer assembly language by…
… writing two program i.e. multiplier program and a program to show screen black when key is pressed on keyboard(white screen otherwise)
- Loading branch information
1 parent
35cb5c8
commit 6f875f6
Showing
9 changed files
with
274 additions
and
0 deletions.
There are no files selected for viewing
76 changes: 76 additions & 0 deletions
76
projects/week4-project4(Assembly Coding Of Hack Computer-Getting Familiarized)/fill/Fill.asm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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/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. | ||
|
||
//NOTE: For this program to work, we need to access the R1 register in ram that must store the value 8192 | ||
|
||
|
||
//Defining an infinite loop that looks for keyboard input throughout the program | ||
(INFINITE) | ||
//Initializing counter to zero | ||
@R1 | ||
D=M | ||
@R0 | ||
M=D | ||
@counter | ||
M=0 | ||
@KBD | ||
D=M; | ||
@LOOPINITBLACK | ||
D;JGT | ||
@LOOPINITWHITE | ||
0;JMP | ||
|
||
(LOOPINITBLACK) | ||
@SCREEN //loading screen address | ||
D=A; | ||
@counter //setting counter to screen address | ||
M=D; | ||
|
||
(LOOPBLACK) | ||
@counter | ||
D=M; //loading address of current memory location of screen | ||
A=D; //loading that address into address register | ||
M=-1 //putting content of that memory to -1 which corresponds to 1111111111111111 | ||
@counter | ||
M=M+1 | ||
@R0 | ||
D=M-1 | ||
M=D | ||
@LOOPBLACK | ||
D;JGT | ||
@INFINITE | ||
0;JMP | ||
|
||
(LOOPINITWHITE) | ||
@SCREEN //loading screen address | ||
D=A; | ||
@counter //setting counter to screen address | ||
M=D; | ||
|
||
(LOOPWHITE) | ||
@counter | ||
D=M; //loading address of current memory location of screen | ||
A=D; //loading that address into address register | ||
M=0 //putting content of that memory to -1 which corresponds to 1111111111111111 | ||
@counter | ||
M=M+1 | ||
@R0 | ||
D=M-1 | ||
M=D | ||
@LOOPWHITE | ||
D;JGT | ||
@INFINITE | ||
0;JMP | ||
|
11 changes: 11 additions & 0 deletions
11
projects/week4-project4(Assembly Coding Of Hack Computer-Getting Familiarized)/fill/Fill.tst
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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.asm; | ||
echo "Make sure that 'No Animation' is selected. Then, select the keyboard, press any key for some time, and inspect the screen."; | ||
|
||
repeat { | ||
ticktock; | ||
} |
4 changes: 4 additions & 0 deletions
4
...k4-project4(Assembly Coding Of Hack Computer-Getting Familiarized)/fill/FillAutomatic.cmp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | |
4 changes: 4 additions & 0 deletions
4
...k4-project4(Assembly Coding Of Hack Computer-Getting Familiarized)/fill/FillAutomatic.out
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | |
37 changes: 37 additions & 0 deletions
37
...k4-project4(Assembly Coding Of Hack Computer-Getting Familiarized)/fill/FillAutomatic.tst
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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.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; // 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 | ||
|
54 changes: 54 additions & 0 deletions
54
projects/week4-project4(Assembly Coding Of Hack Computer-Getting Familiarized)/mult/Mult.asm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// 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.) | ||
// | ||
// This program only needs to handle arguments that satisfy | ||
// R0 >= 0, R1 >= 0, and R0*R1 < 32768. | ||
|
||
// Put your code here. | ||
|
||
//Initializing sum variable to zero.(Initialization to zero may be optional but i prefer to add it) | ||
@sum | ||
M=0 | ||
|
||
//Jumping to end if the difference of the register R1 and counter is less than or equal to zero. | ||
//looping for addition | ||
(LOOP) | ||
@R1 | ||
D=M | ||
//if Decremented counter = 0; | ||
@END | ||
D;JEQ | ||
|
||
|
||
//loading register R0 From RAM | ||
@R0 | ||
D=M | ||
//summing | ||
@sum | ||
M=D + M | ||
//decrementing counter | ||
@R1 | ||
M=M-1 | ||
//unconditional jump | ||
@LOOP | ||
0;JMP | ||
|
||
|
||
//End: infinite loop after saving data to R2 in RAM | ||
|
||
(END) | ||
//putting the sum to register R2 in RAM | ||
@sum | ||
D=M | ||
@R2 | ||
M=D | ||
//Ending the process via infinite loop | ||
(INFINITE) | ||
@INFINITE | ||
0;JMP | ||
|
7 changes: 7 additions & 0 deletions
7
projects/week4-project4(Assembly Coding Of Hack Computer-Getting Familiarized)/mult/Mult.cmp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | |
7 changes: 7 additions & 0 deletions
7
projects/week4-project4(Assembly Coding Of Hack Computer-Getting Familiarized)/mult/Mult.out
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | |
74 changes: 74 additions & 0 deletions
74
projects/week4-project4(Assembly Coding Of Hack Computer-Getting Familiarized)/mult/Mult.tst
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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.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, // 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; |