	.PREL
	.IDENT	TAPE
	.INSERT	HVG.LIB
	.INSERT	MACRO.LIB
	.INSERT	BBEQU.ASM
	.RELOC
; COMMAND TO ESTABLISH TAPE UNIT AS INPUT DEVICE
TINPUT:: CALL	TINPES#
	RSTFIN	; GO HOME
; COMMAND TO LIST STUFF ON CRT
TLIST::	CALL	TINPES#
TLIST1:	CALL	CHKIO#	; GET CHARACTER
	RSTOCH	; PRINT IT
	JMPR	TLIST1	; FOREVER	1
; COMMAND TO ESTABLISH PRINTING THRU THE TAPE INTERFACE
TPRINT:: MVI	A,6	; SET PRINT FLAG
	.BYTE	01H	; LXI	B,$$$$ OPCODE TO EFFECT SKIP
; COMMAND TO ESTABLISH OUTPUT TO TAPE
TOUTPU:: MVI	A,2	; SET OUTPUT FLAG
	STA	TAPEST#
	RSTFIN
; COMMAND TO LOAD 128 BYTE BOOTSTRAP FROM TAPE
TLOAD::	CALL	TINPES#	; START TAPE READING
	LXI	H,NORMEM
	PUSH	H
TLOAD1:	PUSH	H
	CALL	CHKIO#
	POP	H
	MOV	M,A
	INX	H
	BIT	7,L
	JRZ	TLOAD1
	RET		; ENTER VIA RETURNING
TOUTCK::
	LDA	TAPEST#
	CPI	6
	JRZ	VDMFRG
TURDC1:	ANI	2	; WRITE TO TAPE WANTED?
	RZ
TURDC2:	MOV	C,D
	RLCR	C
; YEP
; WRITE START BIT
TAPCH0:	IN	TAPEIO	; INPUT FF STATE
	ANI	2	; WAIT FOR IT TO GO NONZERO
	JRZ	TAPCH0	; MEANING START BIT WRITTEN
	MVI	B,10	; B = # OF BITS TO WRITE
; WAIT ABOUT 1.8 MILLISECONDS TO MOVE BEYOND CHANGE WINDOW
TAPCH1:	MVI	A,192
TAPCH2:	DCR	A
	JRNZ	TAPCH2
; ARE WE DONE WRITING?
	DCR	B
	RZ
; (POSITION IS BIT 1 )
	IN	TAPEIO	; KEEP READING INPUT
	MOV	E,A
TAPCH3:	IN	TAPEIO	; UNTIL IT TOGGLES
	XRA	E
	ANI	2
	JRZ	TAPCH3
	MOV	A,E	; E = WHAT WE GOT NOW
	XRA	C	; C = WHAT WE WANT
	ANI	2	; DID WE 'GET IT?'
	JRZ	TAPCH4	; JUMP IF SO
	IN	TAPEIO	; NO - READ AGAIN TO TOGGLE
TAPCH4:	SET	1,C	; SET EACH BIT WRITTEN TO 1
	RRCR	C	; SHIFT INTO NEXT POSITION
	JMPR	TAPCH1	; SO STOP BIT WILL GO OUT
; MODE 6 - TOKEN COMING THRU?
VDMFRG:	MOV	A,D
	CPI	68H
	JRC	TURDC2	; NO - TWEEDLE IT TO TAPE
	RET
	.END
                                                             