; ********** INPUT ROUTINE ********** ; SCANS KEYBOARD FOR INPUT OF 0 TO 7 OR 8 KEYS, AND ; IGNORES ALL OTHERS. WAITS FOR KEYPRESS. ; ENTRY: NO PARAMETERS. ; EXIT: (A) = 0 TO 7 OR 8 IN BINARY. ; ALL REGISTERS EXCEPT A ARE SAVED. ; ************************************************** .ORG 0000h LD SP, 0080h ; ADDED FOR TESTING PURPOSES. PUSH HL ; ADDED FOR TESTING PURPOSES. LD HL, 3810h ; ADDED FOR TESTING PURPOSES. LD (HL), 00h ; ADDED FOR TESTING PURPOSES. LD HL, 3820h ; ADDED FOR TESTING PURPOSES. LD (HL), 01h ; ADDED FOR TESTING PURPOSES. POP HL ; ADDED FOR TESTING PURPOSES. CALL INPUT ; ADDED FOR TESTING PURPOSES. HALT ; ADDED FOR TESTING PURPOSES. INPUT: PUSH BC ; SAVE REGISTERS. PUSH HL ; INP002, INP005, INP010 = READ 0-7 LOGIC (SEE PAGE 136). INP002: LD A, (3810h) ; KEYBOARD ROW 4. OR A ; TEST FOR NON-ZERO. JP Z, INP010 ; GO IF NON. LD C, 0FFh ; COLUMN COUNT. INP005: INC C ; BUMP COUNT. RRCA ; SHIFT OUT. JP NC, INP005 ; GO IF NOT CARRY. LD A, C ; COUNT TO A. JP INP020 ; CONTINUE. INP010: LD A, (3820h) ; KEYBOARD ROW 5. AND 1 ; GET "8" KEY ONLY. JP Z, INP002 ; GO IF NONE. LD A, 8 ; FOR '8' KEY. ; READ 8 LOGIC. INP020: ; LD HL, 100 ; 100 mS DELAY. ; CALL DELAY ; DELAY POP HL ; RESTORE REGISTERS. POP BC RET .END