From f91fc53c91558fe1d8a249851dce8714fb17a246 Mon Sep 17 00:00:00 2001 From: Sven Riwoldt Date: Mon, 27 Mar 2023 20:32:56 +0200 Subject: [PATCH] =?UTF-8?q?Ich=20scheitere=20daran=20den=20Screen=20zu=20f?= =?UTF-8?q?=C3=BCllen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- projects/04/fill/Fill.asm | 43 +++++++++++++++++++++++++++++++- projects/04/mult/Mult.asm | 31 ++++++++++++++++++++++- projects/04/tests/Rechteck.asm | 42 +++++++++++++++++++++++++++++++ projects/04/tests/fillscreen.asm | 25 +++++++++++++++++++ 4 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 projects/04/tests/Rechteck.asm create mode 100644 projects/04/tests/fillscreen.asm 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