Other Links:
http://www.cs.huji.ac.il/course/2002/nand2tet/projects.html
// 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. When no key is pressed, the // program clears the screen, i.e. writes "white" in every pixel. // (RESET_SCREEN_COUNTER) // @SCREEN // D=A // @counter // M=D // counter = SCREEN (LISTEN_FOR_NO_KEY_PRESS) // reset screen counter @SCREEN D=A @counter M=D // if KBD == 0 jump to CLEAR_SCREEN @KBD D=M @CLEAR_SCREEN D;JEQ // loop (keep on checking if KBD == 0 @LISTEN_FOR_NO_KEY_PRESS 0;JEQ (LISTEN_FOR_KEY_PRESS) // reset screen counter @SCREEN D=A @counter M=D // if KBD > 0 jump to BLACKEN_SCREEN @KBD D=M @BLACKEN_SCREEN D;JGT // loop (keep on checking if KBD > 0 @LISTEN_FOR_KEY_PRESS 0;JEQ (BLACKEN_SCREEN) // blacken 16-bit memory location @counter A=M // A = counter M=-1 // blacken current memory location // if KBD == 0 jump to LISTEN_FOR_NO_KEY_PRESS (to reset counter) @KBD D=M @LISTEN_FOR_NO_KEY_PRESS D;JEQ // increment counter @counter M=M+1 // check if you have reached memory location 24575 (the final address for the screen) D=M @24575 D=A-D @LISTEN_FOR_NO_KEY_PRESS D;JLT // goto LISTEN_FOR_NO_KEY_PRESS if counter > 24575 // loop BLACKEN_SCREEN if you have NOT reached memory location 24575 @BLACKEN_SCREEN 0;JEQ (CLEAR_SCREEN) // clear 16-bit memory location @counter A=M // A = counter M=0 // clear current memory location // if KBD > 0 jump to LISTEN_FOR_KEY_PRESS (to reset counter) @KBD D=M @LISTEN_FOR_KEY_PRESS D;JGT // increment counter @counter M=M+1 // check if you have reached memory location 24575 (the final address for the screen) D=M @24575 D=A-D @LISTEN_FOR_KEY_PRESS D;JLT // goto LISTEN_FOR_KEY_PRESS if counter > 24575 // loop CLEAR_SCREEN if you have NOT reached memory location 24575 @CLEAR_SCREEN 0;JEQ