Compucolor.org – Virtual Media

Listing of file='BREAK.SRC;02' on disk='vmedia/comm_pgms-sideA-sector.ccvf'

;ROUTINE TO ALLOW COMPUCOLOR II TO TALK TO OTHER COMPUTERS
;USING THE INDUSTRY STANDARD OF EVEN PARITY
;WRITTEN BY RICKI A. VICK ON 23 JUNE 1980
;UPDATED WITH "BREAK KEY" FUNCTIONALITY ON 14 JULY 1980
;
S1OUT	EQU	33C3H	;TRANSMIT CHARACTER FROM E
CMPHD	EQU	344DH	;COMPARE HL:DE
SVCHA	EQU	39DCH	;SYSTEM DEFAULT CHARACTER DISPLAY ROUT.
KBDFL	EQU	81DFH	;KEYBOARD INPUT FLAG
INPFL	EQU	81E3H	;RS232 INPUT PORT FLAG
READY	EQU	81FFH	;KEYBOARD READY FLAG
BRAKE	EQU	3BH	;STANDARD "BREAK PROCESSOR"
OSTR	EQU	33F4H	;DISPLAY STRING ENDING WITH 239
;WATL	EQU	3429H	;LONG WAIT: 20 MSEC / COUNT
	;
	;	LINKAGE TO COMPUCOLOR EXECUTIVE
	;
	ORG	33215	;ESC USER JUMP VECTOR
	JMP	LINK	;ONE TIME INITIALIZATION
	ORG	33221	;USER INPUT FLAG JUMP VECTOR
	JMP	WHICH	;USER ROUTINE TO EDIT INPUT TO/FOR HOST
	ORG	40900
	;
	;	ROUTINE TO DETERMINE WHICH SOURCE OF DATA
	;	HAS PROVIDED A CHARACTER
	;
WHICH:	PUSH	PSW	;SAVE MACHINE STATE
	PUSH	D	;SAVE DE
	LXI	D,KBDFL	;ADDRESS OF KEYBOARD INPUT FLAG
	CALL	CMPHD	;CALL HL:DE COMPARE
	JZ	PARTY	;JUMP IF CALLED FOR KEYBOARD CHARACTER
	LXI	D,INPFL	;ADDRESS OF RS232 INPUT PORT FLAG
	CALL	CMPHD	;CALL HL:DE COMPARE
	JZ	EDIT	;JUMP IF CALL WAS FOR HOST CHARACTER
	POP	D	;RESTORE DE
	POP	PSW	;RESTORE MACHINE STATE
	RET		;DID NOT WANT THIS CHARACTER ANYWAY
	;
	;	ROUTINE TO GENERATE PARITY FOR HOST
	;
PARTY:	POP	D	;RESTORE DE
	MOV	A,E
	ANI	7FH	;FORCE PARITY BIT OFF
	JPE	POK
	ORI	80H	;SET PARITY BIT
POK:	MOV	E,A
	POP	PSW
	JMP	S1OUT	;SYSTEM ROUTINE TO TRANSMIT E ON RS232
	;
	;	ROUTINE TO EDIT INPUT FROM HOST
	;
EDIT:	POP	D	;RESTORE DE
	MOV	A,E
	ANI	7FH
	CPI	7FH
	JZ	EX2	;IGNORE DEL
	CPI	0AH
	JZ	EX1	;TAKE LF
	CPI	0DH
	JZ	EX1	;TAKE CR
	CPI	20H
	JC	EX2	;IGNORE CONTROL CHARACTERS
EX1:	MOV	E,A
	POP	PSW
	JMP	SVCHA	;SYSTEM ROUT. TO DISPLAY CHARACTER IN E
EX2:	POP	PSW
	RET
	;
	;	SET UP LINKAGE
	;
LINK:	PUSH	PSW
	MVI	A,31	;USER INPUT ROUTINE VECTOR
	STA	INPFL	;RS232 INPUT PORT FLAG
	MVI	A,31	;USER INPUT ROUTINE VECTOR
	STA	KBDFL	;KEYBOARD INPUT FLAG
	MVI	A,84H	;300 BAUD 1 STOP BIT
	OUT	5	;SET BAUD RATE
	LXI	H,PROMPT;"RICKIS TERMINAL PROGRAM VERSION 1.0"
	CALL	OSTR	;DISPLAY MESSAGE
LOOP:
;	MVI	A,5	;5*20 = 100 MSEC
;	CALL	WATL	;LONG WAIT
	LDA	READY	;IS THERE A CHARACTER FROM THE KEYBOARD
	CPI	50H	;IS IT A BREAK?
	JNZ	LOOP	;GO BACK AND LOOP LOOKING FOR A BREAK
;	LXI	H,BRKMSG;"BREAK KEY"
;	CALL	OSTR	;DISPLAY MESSAGE
	XRA	A	;CLEAR A
	STA	READY	;RESET BREAK FLAG
	CALL	BRAKE	;FCS "BREAK KEY PROCESSOR"
	JMP	LOOP	;ONLY WAY OUT IS "CPU RESET"
	POP	PSW
	RET
;BRKMSG:	DB	13,10,'BREAK KEY',13,10,239
PROMPT:	DB	6,2,11,29,'RICKIS ',19,'TERMINAL ',20,'PROGRAM '
	DB	23,'VERSION ',17,'1.0',18,13,10,239
	END	LINK