; GENERIC ASCII KEYBOARD INPUT ROUTINE ; ; KEND EQU #0308 ; STORE KEYPRESS LASTK EQU 23560 ; KEY PRESSED KBDKEY EQU 253 ; ASCII KBD DATA KBDSHF EQU 249 ; ASCII KBD STATUS ; ORG #5B00 KEYGET BIT 5,(IY+1) ; KEY ALREADY PRESSED? RET NZ ; RETURN WITH NZ=KEY HALT ; SYNC WITH KEYBOARD IN A,(KBDKEY) ; READ KEYPRESS CP 255 ; NO KEY PRESSED? RET Z ; RETURN WITH Z=NO KEY CALL KEYCONV ; CHECK KEYPRESS JP KEND ; STORE KEYPRESS KEYCONV LD C,A ; C=KEYPRESS IN A,(KBDSHF) ; GET KBD STATUS LD B,A ; B=STATUS, B1=CTRL B0=SHIFT LD A,C ; A=C=KEYPRESS CP 127 JR NC,KEYPAD ; KEYPAD AND DELETE CP 32 RET NC ; NOT CONTROLS BIT 1,B ; IS CTRL PRESSED? JR NZ,KEYCTRL ; CTRL PRESSED LD HL,KEYTAB-8 LD B,0 ; BC=KEYPRESS ADD HL,BC ; INDEX INTO TABLE LD A,(HL) ; CONVERT SPECIAL KEY RET KEYTAB DEFB 14,15,6,9 ; BS,TAB,LF,RGT DEFB 30,13 ; HOME,RET KEYCTRL AND A ; IS IT CTRL-@? JR NZ,KEYGRAF ; SQUEEZE INTO TABLE LD A,127 ; CTRL-@ RETURNS (C) RET DEFB 0,08,00,00 ; XXX,LFT,XXX,XXX DEFB 7,10,11,27 ; CLR,DWN,UP,ESC KEYGRAF ADD A,143 ; CONVERT TO GRAPHICS CHAR CP 143+27 RET C ; CTRL-A TO CTRL-Z CP 143+28 ADD 171-143 ; CONVERT [ \ ] ^ _ RET ; TO <= <= >= <> LINE KEYPAD JR Z,KEYDEL ; DELETE AND 143 ; CONVERT TO BLOCK SHAR BIT 0,C ; IS SHIFT PRESSED? RET Z ; NOT PRESSED, RETURN IT XOR 15 ; INVERT BLOCK CHARACTER RET KEYDEL LD A,12 ; DELETE RET ; 127 -> DELETE