diff --git a/projects/04/fill/Fill.asm b/projects/04/fill/Fill.asm index 8f24a95..331e6db 100644 --- a/projects/04/fill/Fill.asm +++ b/projects/04/fill/Fill.asm @@ -11,4 +11,45 @@ // "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. + +(LOOP) // Abfrage des KBD-Speichers + @KBD //Adresse Keyboardspeicher + D=M //Datenregister = Speicheradresse + + @KPRESSED + D;JGT + + @NOKPRESSED + 0;JMP + +(KPRESSED) // Taste wurde/wird gedrückt + @R0 + M=-1 // 11111111111111111 --> black Pixel + @ONSCREEN + 0;JMP + +(NOKPRESSED) // keine Taste gedrückt + @R0 + M=0 // wieder auf 0 gesetzt + @ONSCREEN + 0;JMP + +(ONSCREEN) + // erste Zeile von 16384 bis 16415 => 32 + // 31 * 256 + // letztes Byte --> 8192 --> 16384 + 8192 = + @8191 + D=A + @R1 + M=D + //https://github.com/Olical/nand2tetris/blob/master/asm/fill/Fill.asm + (WEITER) + @R1 + D=M + @WEITER + M=D + + +@LOOP +0;JMP \ No newline at end of file diff --git a/projects/04/mult/Mult.asm b/projects/04/mult/Mult.asm index d49da5c..9be9c05 100644 --- a/projects/04/mult/Mult.asm +++ b/projects/04/mult/Mult.asm @@ -9,4 +9,33 @@ // This program only needs to handle arguments that satisfy // R0 >= 0, R1 >= 0, and R0*R1 < 32768. -// Put your code here. \ No newline at end of file +@R2 //Ergebnisspeicher +M=0 //init + +@R1 //R1 dieser Wert dient als Schleifencounter +D=M //Inhalt nach M + +@i //Zähler +M=D //i bekommt R1-Wert + +@END +D;JEQ + +(LOOP) +@R0 //R0 ansprechen +D=M //Wert aus R0 in Datenspeicher + +@R2 //Ergebnisspeicher +M=D+M //Ergebnisspeicher = Datenspeicher + Ergebnisspeicher + +@i //Zähler +D=M //D=Zähler +D=D-1 //D-1 +M=D //Zurückschreiben in Zähler + +@LOOP //LOOP +D;JGT //D GRÖSSER + +(END) //END LOOP +@END +0;JMP \ No newline at end of file diff --git a/projects/04/tests/Rechteck.asm b/projects/04/tests/Rechteck.asm new file mode 100644 index 0000000..d757a5b --- /dev/null +++ b/projects/04/tests/Rechteck.asm @@ -0,0 +1,42 @@ +// Zeichnen eines Rechtecks +// Breite = 16px, die Höhe ist in RAM[0] + +@R0 +D=M +@n // @16 +M=D // n = RAM[0] + +@i +M=0 // i=0 + +@SCREEN +D=A +@address +M=D // address = 16384 (Basisadresse des HACK-Screens) + +(LOOP) +@i +D=M +@n +D=D-M +@END +D;JGT // if i > n goto END + + +@address +A=M +M=-1 // RAM[address] = -1 (16 pixels) + +@i +M=M+1 // i=i+1 +@32 +D=A +@address +M=D+M // address = address + 32 + +@LOOP + 0;JMP // GOTO LOOP + +(END) + @END //Programmende + 0;JMP \ No newline at end of file diff --git a/projects/04/tests/fillscreen.asm b/projects/04/tests/fillscreen.asm new file mode 100644 index 0000000..12e3c3e --- /dev/null +++ b/projects/04/tests/fillscreen.asm @@ -0,0 +1,25 @@ +@SCREEN +D=A +@R15 +M=D + +@R0 +D=A +@R14 +M=D + +(LOOP) +@R14 +D=M +@END +D;JEQ + +@R15 +M=M+1 +@R14 +M=M-1 +@LOOP + +(END) +@END +0;JMP \ No newline at end of file