; KEYBOARD SCAN ROUTINE FOR FIRST TWO ROWS ; NOTES FROM BOOK: ; 3C00h - 3FFFh: DISPLAY MEMORY. ; 3800h - 3BFFh: KEYBD ADDRESSING: ROW 1: 3801, ROW 2: 3802, ROW 3: 3804, ROW 4: 3808, ; ROW 5: 3810, ROW 6: 3820, ROW 7: 3840, ROW 8: 3880. ; 3000h - 37DDh: RESERVED. ; 37E8: LINE PRINTER STATUS. ; FFh: CASSETTE. .org 0000h LD SP, 0080h ; ADDED FOR TESTING PURPOSES. KEYSCN: LD C, 0 ; FOR FIRST ROW. LD A, (3801h) ; 1ST ROW ADDRESS. OR A ; TEST ZERO OR NON-ZERO. JP NZ, KEY10 ; GO IF KEY PRESSED. LD A, (3802h) ; 2ND ROW ADDRESS. OR A ; TEST ZERO OR NON-ZERO. JP Z, KEYSCN ; GO IF NO KEY. LD C, 8 ; FOR 2ND ROW. KEY10: LD B, 0FFh ; INDEX. KEY20: INC B ; DECREMENT INDEX. SRL A ; SHIFT 'TIL ZERO. JP NZ, KEY20 ; GO IF NOT ZERO. LD A, B ; GET NUMBER 0-7. ADD A, C ; ADD ROW NUMBER. LD C, A ; INDEX 0-15 TO C. LD B, 0 ; ZERO B FOR ADDRESS. LD HL, TABLE ; TABLE OF CHARACTERS. ADD HL, BC ; COMPUTE DISPLACEMENT. LD A, (HL) ; GET CHARACTER. LD (3C00h + 544), A ; DISPLAY. (544 = 512 + 32) LD C, 10 LOOP: LD B, 0 ; KEY DEBOUNCE DELAY ABOUT 17 MILLISECONDS (FF TO 00). LOOP1: DJNZ LOOP1 DEC C JP NZ, LOOP JP KEYSCN ; GO FOR NEXT KEY. TABLE .DB "@ABCDEFGHIJKLMNO" .END