Listing of file='CI.MAC;02' on disk='vmedia/disasm-sideA-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; INTERRUPT-DRIVEN CHARACTER INPUT ROUTINES ; ; SETCI MUST BE CALLED BEFORE ANY CALLS TO CI. ; LF EQU 10 ;LINE FEED FF EQU 12 ;FORM FEED BS EQU 26 ;LEFT CURSOR (BACKSPACE) ESC EQU 27 ;ESCAPE EXTRN ADHLA,CO,OSTR,SAVE INPCRT EQU 81C5H ;JUMP VECTOR NUMBER 31 KBDFL EQU 81DFH ;HOLDS NUMBER OF JUMP VECTOR BRATE EQU 81E2H ;CURRENT BAUD RATE KBCHA EQU 81FEH ;KEYBOARD CHARACTER READY EQU 81FFH ;KEYBOARD READY FLAG ; ; ENTRY SETCI SETCI: DI MVI A,31 ;USER INPUT FLAG NO. STA KBDFL ;TO INPCRT MVI A,0C3H ;LITERALLY JMP STA INPCRT LXI H,CHRINT;THUS SHLD INPCRT+1;INPCRT: JMP CHRINT LXI H,INBUF ;POINT TO COUNTER MVI M,0 ;CLEAR COUNTER XRA A ;CLEAR THE EXIT FLAG STA EXITFL EI RET ; ; COMPUCOLOR DEMO CI ROUTINE ; THIS SHOWS HOW TO READ A CHARACTER ; AND ESCAPE FROM A HUNG PROGRAM ; ; CHRINT IS CALLED WHENEVER A KEY IS STRUCK ; THE JMP IS FROM INPCRT ; ; ENTRY CHRINT CHRINT: CALL SAVE ;SAVE REGISTERS LXI H,INBUF MVI A,30 ;LENGTH OF BUFFER CMP M ;SEE IF BUFFER IS FULL RC ;IF IT IS IGNORE CHARACTER INR M ;INCREMENT COUNTER MOV A,M ;PUT COUNT IN A CALL ADHLA ;ADD COUNTER TO BEGINNING OF BUFFER MOV A,E ;CHARACTER IS IN E CPI ESC ;SEE IF ESCAPE HAS BEEN HIT JZ BREAK ;USER WANTS TO EXIT ANI 127 ;MAKE SURE ITS ASCII MOV M,A ;STORE IT RET ; ; BREAK ALLOWS THE USER TO DO WHATEVER HE WISHES ; WHEN THE ESCAPE KEY IS STRUCK. IN THIS CASE, ; A FLAG IS SET REQUESTING AN EXIT FROM THE PROGRAM. ; BREAK: STA EXITFL ;NO FURTHER PROCESSING REQUIRED RET ; ; ; CI READS AND ECHOS ONE CHARACTER FROM THE KEYBOARD ; ENTRY CI CI: PUSH H ;SAVE H LXI H,INBUF CI1: MOV A,M ;READ COUNTER ANA A ;SEE IF ZERO JZ CI1 ;LOOK AND WAIT IF ZERO DI ;HOLD OFF INTERRUPTS WHILE PROCESSING PUSH D ;SAVE D DCR M ;REDUCE BUFFER COUNTER MOV D,M INX H ;POINT TO CHARACTER MOV A,M ;READ IT PUSH PSW ;STACK IT CI2: DCR D ;SHIFT COUNTER JM CI3 ;WHEN DONE INX H ;CHARACTER TO BE SHIFTED MOV A,M DCX H ;POINT TO NEW HOME MOV M,A ;NEW HOME INX H JMP CI2 ;LOOP UNTIL DONE CI3: EI ;ENABLE INTERRUPTS POP PSW ;THE CHARACTER PUSH PSW ;SAVED AGAIN CALL CO ;ECHO IT POP PSW ;THE CHARACTER POP D ;<DE> AND <HL> POP H ;UNCHANGED RET PUBLIC EXITFL EXITFL: DB 0 ;EXIT FLAG INBUF: DS 32 ;STORAGE AREA FOR TYPE AHEAD END