projects/04/fill/Fill.asm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
// 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. // Fill: for length of screen, checks keypress. If keypress is nonzero, set // current 16 pixels to black, otherwise set them to white. Point to next 16 // pixels and repeat to enf of screen, then restart at start of screen. // // R0 - current screen pointer (to-be incremented until end of screen is hit) (SET_SCREEN_PTR) // R0 = SCREEN pointer @SCREEN D=A @R0 M=D (IS_KEYPRESSED) // end of screen: 0x5fff (dec 24575) // if R0 == 24575; goto SET_SCREEN_PTR @R0 D=M @24575 D=D-A @SET_SCREEN_PTR D;JEQ // D=KBD, goto WHITE_SCREEN if D == 0 @KBD D=M @WHITE_SCREEN D;JEQ (BLACK_SCREEN) // *R0 = -1 @R0 A=M M=-1 @INC_SCR_PTR_AND_LOOP 0;JMP (WHITE_SCREEN) // *R0 = 0 @R0 A=M M=0 (INC_SCR_PTR_AND_LOOP) // ++R0 @R0 M=M+1 @IS_KEYPRESSED 0;JMP // should never reach here, but just in case... (END) @END 0;JMP |