Compucolor.org – Virtual Media

Listing of file='RECV.MAC;02' on disk='vmedia/terminal_em-sector.ccvf'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	COMPUCOLOR II FILE TRANSMISSION PROGRAM
;		V1.0	12/80
;
;	WRITTEN BY TREVOR TAYLOR
;

	PUBLIC	FCSSP

	EXTRN	JMPVEC,CO,OSTR
	EXTRN	FILVEC,FCS,GTBYT
	EXTRN	SETFIL
	EXTRN	CPYRGT

;	SYSTEM EQUATES

BAUD	EQU	5

KBDFL	EQU	81DFH	;HOLDS NUMBER OF JUMP VECTOR
CRATE	EQU	81E2H	;CURRENT BAUD RATE
INPFL	EQU	81E3H	;RS232 INPUT PORT FLAG
READY	EQU	81FFH	;KEYBOARD STATUS
KBCHA	EQU	81FEH	;KEYBOARD CHAR

;	SPECIAL CONTROL CHARACTERS

TAB	EQU	9
LF	EQU	10
FF	EQU	12
CR	EQU	13
ESC	EQU	27

;..............................................................
;
;	USER DEFINED PARAMETERS
;
	PUBLIC	RATE,LINLEN,PAGLEN,FFFLAG,SKPLEN,HDRFLG

RATE:	DB	88H	;BAUD RATE (88H=1200)
DUPLEX:	DB	0
DFAULT:	DB	'SRC'	;DEFAULT FILE TYPE
;
;.............................................................
;
;	START OF PROGRAM

RECV:	DI
	LXI	H,0		;SAVE FCS STACK POINTER
	DAD	SP
	SHLD	FCSSP
	LXI	SP,STACK	;SETUP RUNOFF STACK
	CALL	JMPVEC		;SETUP REQUIRED JUMP VECTORS
	CALL	FILVEC
	MVI	A,12		;SET KEYBOARD INPUT TO DUMP
	STA	KBDFL
	MVI	A,31
	STA	INPFL

	LDA	RATE		;FIX BAUD RATE
	OUT	BAUD
	STA	CRATE

	XRA	A
	STA	CRFLAG
	LXI	H,LINBUF
	SHLD	BUFPTR

	EI

	LXI	H,IDMSG		;PRINT STARTUP MSG
	CALL	OSTR

;	CALL	CPYRGT		;PRINT/CHECK COPYRIGHT NOTICE

FILES:	LXI	H,FPB		;OPEN FILE
	LXI	D,OBUF
	LXI	B,DFAULT
	MVI	A,1		;NEW FILE
	CALL	SETFIL

LOOP:	LDA	CRFLAG
	ORA	A
	JZ	ABTEST
	XRA	A
	STA	CRFLAG
	LXI	H,LINBUF
	SHLD	BUFPTR
	XCHG
	LXI	H,FPB
STORE:
	LDAX	D
	ORA	A
	JZ	ENDLIN
	CALL	PTBYT
	JC	ERROR
	CALL	CO
	INX	D
	JMP	STORE
ENDLIN:	MVI	A,LF
	CALL	PTBYT
	JC	ERROR
	CALL	CO

	MVI	A,12
	STA	INPFL
	MVI	A,'0'
	CALL	TXSER
	LDA	DUPLEX
	ORA	A
	JP	NO0
	CALL	RXSER
NO0:
	MVI	A,CR
	CALL	TXSER
	LDA	DUPLEX
	ORA	A
	JP	NOCR
	CALL	RXSER
NOCR:
	MVI	A,31
	STA	INPFL

ABTEST:	LDA	READY		;SEE IF BREAK
	CPI	50H		;
	JZ	ABTEST		;HANG UNTIL ANOTHER IS STRUCK
	CPI	80H
	JNZ	LOOP
	XRA	A
	STA	READY
	LDA	KBCHA		;READ NEXT CHARACTER
	CPI	LF		;SEE IF LF
	JZ	EXIT		;EXIT IF LF
	CPI	ESC
	JZ	EXIT		;   OR IF ESCAPE
	JMP	LOOP

EOFTST:	JZ	EOF

ERROR:	LXI	H,ERRMSG	;PRINT ERROR MESSAGE
	CALL	OSTR

EXIT:	LXI	H,FPB
	CALL	CLSEQO
	MVI	A,13
	STA	KBDFL
	MVI	A,12
	STA	INPFL
	MVI	B,0		;SETUP NO ERROR
	LHLD	FCSSP		;RESTORE FCS STACK
	SPHL
	RET			;AND EXIT TO FCS

EOF:	JMP	EXIT

RXINT:
	MOV	A,E
	ANI	7FH
	RZ
	CPI	LF
	RZ
	LHLD	BUFPTR
	MOV	M,A
	INX	H
	CPI	CR
	JNZ	OKCHR
	XRA	A
	MOV	M,A
	INX	H
	MVI	A,0FFH
	STA	CRFLAG
OKCHR:
	SHLD	BUFPTR
	RET

;..............................................................
;
;	MESSAGES

IDMSG:	DB	29,27,11,15,6,1,CR,LF,TAB,'RECV '
	DB	6,7,'V1.0 ',239
ERRMSG:	DB	17,'*** HARDWARE ERROR ***',13,10,239

;	DATA AREAS

BUFPTR:	DS	2
LINBUF:	DS	260
CRFLAG:	DB	0

OBUF:	DS	1024	;INPUT BUFFER

	DS	300	;STACK AREA
STACK:	DS	2

FCSSP:	DS	2	;FCS STACK POINTER
FPB:	DS	38	;INPUT FPB

	END	PRINT