Ich scheitere daran den Screen zu füllen

This commit is contained in:
Sven Riwoldt
2023-03-27 20:32:56 +02:00
parent c756d775e4
commit f91fc53c91
4 changed files with 139 additions and 2 deletions

View File

@@ -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.
// 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

View File

@@ -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.
@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

View File

@@ -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

View File

@@ -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