Compucolor.org – Virtual Media

Listing of file='CI.MAC;03' 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
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