DataMuseum.dk

Presents historical artifacts from the history of:

Intel ISIS Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Intel ISIS Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦e02e4622d⟧ TextFile

    Length: 27015 (0x6987)
    Types: TextFile
    Names: »IOMAT4.SRC«

Derivation

└─⟦af81bc460⟧ Bits:30005550 8" CR80 Floppy CR80FD_0034 ( MATRIX Source and Abs-files )
└─⟦af81bc460⟧ Intel_ISIS_II
    └─ ⟦this⟧ »IOMAT4.SRC« 

TextFile

	NLIST	S\r
ACTIVATE	MACRO	#ID,#NO\r
	NLIST	M\r
					;DESRIP: THE MODULE ACTIVATES\r
					;	SPECIFIED PROCES.\r
					;	IF LINK IS SET AND PASSIVE\r
					;	SPECIAL PROCESS IS ACTIVATED\r
					;	THE LINK-ELEMENT IS \r
					;	INCREMENTED\r
					;DESTR:	REG F,H,L\r
;%\r
;############### Activate macro ####################\r
	IF	'#ID'.EQ.'S'\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	IF	LINK.EQ.1\r
	BIT	7,(HL)			;\r
	JR	NZ,O#$YM		;IF PROCESS WAS NOT ACTIVE THEN\r
	LD	HL,SYSRAM+0FBH	;BEGIN\r
	INC	(HL)			;INC LINK-ELEMENT\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;END\r
O#$YM:	ENDIF\r
	ENDIF\r
	IF	'#ID'.EQ.'N'\r
	LD	HL,SYSRAM+200H+S*10H+#NO*20H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	ENDIF\r
	SET	7,(HL)			;ACTIVATE\r
;################# End macro ######################\r
	ENDM\r
\r
\r
PASSIVATE	MACRO	#ID,#NO\r
	NLIST	M\r
					;DESRIP: THE MODULE PASSIVATES\r
					;	SPECIFIED PROCES.\r
					;	IF LINK IS SET AND ACTIVE\r
					;	SPECIAL PROCESS IS PASSIVATED\r
					;	THE LINK-ELEMENT IS \r
					;	DECREMENTED\r
					;DESTR:	REG F,H,L\r
;%\r
;################# Passivate macro ####################\r
	IF	'#ID'.EQ.'S'\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	IF	LINK.EQ.1\r
	BIT	7,(HL)			;\r
	JR	Z,O#$YM		;IF PROCESS WAS NOT PASSIVE THEN\r
	LD	HL,SYSRAM+0FBH	;BEGIN\r
	DEC	(HL)			;DEC LINK-ELEMENT\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;END\r
O#$YM:	ENDIF\r
	ENDIF\r
	IF	'#ID'.EQ.'N'\r
	LD	HL,SYSRAM+200H+S*10H+#NO*20H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	ENDIF\r
	RES	7,(HL)			;PASSIVATE\r
;############# End macro #############\r
	ENDM\r
	LIST	S\r
;******************************************************************************\r
;*                                                                            *\r
;* D O R A     A P P L I C A T I O N     S / W                                *\r
;*                                                                            *\r
;* DEVICE: MATRIX                                                             *\r
;*                                                                            *\r
;* MODULE: VIDEO-,PULSE-,CAM.DEL.- AND INTERCOM. MATRIX PROCESS               *\r
;*                                                                            *\r
;******************************************************************************\r
\r
;\r
	PUBLIC	IOMINI,IO1,IO2,IO3\r
	PUBLIC	CDCONT,PRTSAV,TAB2PX,PXPORT,VXT1CK,VXCREC,VXCKCO\r
	PUBLIC	VXCSEN,TABVID,TAB1VX,TAB2VX,VXAID,TAB3VX,VXPORT\r
;\r
	EXTRN	SUBDEQ,SUBENQ,SYSRAM\r
	EXTRN	SCOMMON\r
	EXTRN	UPDATE,ESTABR\r
	EXTRN	ESTABI\r
	EXTRN	SUSPND\r
	EXTRN	QEV,QME\r
;\r
LINK	EQU	0\r
CTL	EQU	2\r
SOUR	EQU	3\r
DEST	EQU	4\r
;\r
	CSEG\r
	ORG	890H\r
IOMINI:	LD	SP,IOMSP	; SP := PRIVATE STACK\r
 \r
	LD	E,5		; 16 MSEC <= DELAY <= 24 MSEC\r
	LD	BC,6		; THIS TIMER ACTIVATES PROCESS 12.\r
	CALL	UPDATE\r
	INC	BC		;  8 MSEC <= DELAY <=16 MSEC\r
	LD	E,4\r
	CALL	UPDATE		; TIMER IO1: TERMINATES PULSE ACTION\r
	INC	BC\r
	LD	E,4\r
	CALL	UPDATE		;   "	IO2: TERMINATES CAM. DELEG. ACTION\r
	INC	BC\r
	LD	E,4\r
	CALL	UPDATE		;   "	IO3: TERMINATES VIDEO ACTION\r
\r
LOOP:	PASSIVATE	S,12\r
	CALL	SCOMMON\r
	EI\r
 \r
 \r
NXBUF: 	LD	HL,QEV		; GET NEXT BUFFER\r
	CALL	SUBDEQ\r
	JR	NC,LOOP		; IF NO BUFFER THEN SCHEDULE\r
 \r
	LD	(CURRBH),DE	;STORE ADDRESS OF CURRENT BUFF.HEAD\r
	LD	IX,(CURRBH)\r
\r
\r
;******************************* PULSE MODULE *************************\r
\r
\r
	BIT	5,(IX+CTL)	; IF PULSE BIT = 1 THEN PERFORM PULSE MODULE\r
	JP	Z,CAMBIT	; ELSE GO TO CAMERA DELEG. MODULE\r
 \r
 \r
	LD	D,0		;\r
	LD	E,(IX+SOUR)	; SOURCE\r
	LD	HL,TAB1PX	; TAB1PX\r
	ADD	HL,DE		; TAB1PX+SOURCE, GET THE TABLE-VALUE\r
\r
	LD	A,(HL)		; TEST IF VALID SOURCE\r
	CP	0		;\r
	JP	Z,ERPXCM	;\r
	LD	C,A		; TAB1PX-VALUE IN C-REGISTER\r
	LD	A,(IX+CTL)	;\r
\r
	AND	0CH		; MASK THE T-BITS FROM CTL (4*T)\r
	CP	0		; TEST IF T=1,2 OR 3\r
	JP	Z,ERPXCM	; IF NO, ERROR\r
	LD	E,A		;\r
	LD	A,C		;\r
	AND	07H		; GET SOURCE GROUP FROM TAB1PX-VALUE\r
	SLA	A		;\r
	SLA	A		; 4*GROUP\r
	ADD	A,E		; 4*(T+GROUP)\r
	LD	E,A		;\r
	LD	D,0		;\r
	LD	HL,TAB2PX	; TAB2PX\r
	ADD	HL,DE		; TAB2PX+(4*(T+GROUP))\r
\r
	LD	E,C		; TAB1PX-VALUE TO E-REGISTER\r
\r
	LD	C,(HL)		; LOWER PORT BYTE TO C-REGISTER\r
	INC	HL		;\r
	LD	B,(HL)		; UPPER PORT BYTE TO B-REGISTER\r
\r
	LD	(PXPORT),BC	; SAVE PORT ADDR FOR PULSE TERMINATION\r
	LD	A,E		;\r
	AND	07H		;\r
	LD	D,A		;\r
	LD	A,(IX+CTL)	;\r
	AND	0CH		;\r
	SRL	A		;\r
	SRL	A		;\r
	ADD	A,D		;\r
	LD	(GROUP),A	;SAVE (GROUP+T)\r
\r
	LD	A,E		; TAB1PX-VALUE TO ACCU\r
	AND	0F0H		; MASK THE CONTENT BITS\r
	BIT	3,E		;\r
	JR	Z,OUTPX		; SHIFT THE CONTENT BITS?\r
	SRL	A		;\r
	SRL	A		;\r
	SRL	A		;\r
	SRL	A		;\r
\r
OUTPX:	LD	(PXCONT),A	; SAVE PORT CONTENT\r
	CPL			;\r
	LD	BC,(PXPORT)	;\r
	OUT	(C),A		;OUTPUT\r
	LD	D,A		;\r
\r
	LD	BC,(GROUP)\r
	LD	B,0\r
	LD	HL,PRTSAV-1\r
	ADD	HL,BC\r
	AND	(HL)\r
	LD	(HL),A		;UPDATE THE ACTUAL OUTPUT-PORT STATUS\r
\r
	BIT	2,(IX+CTL)\r
	JR	Z,TP2		;IF T2-PULSE GOTO TP2\r
	BIT	3,(IX+CTL)\r
	JR	NZ,TP3		;IF T3-PULSE GOTO TP3\r
\r
TP1:	LD	A,D		;T1-PULSE\r
	CPL			;\r
	LD	D,A		;\r
	INC	HL		;\r
	OR	(HL)		;\r
	LD	(HL),A		;UPDATE THE CORRESPONDING T2-PORT\r
	LD	A,D		;\r
	INC	HL		;\r
	OR	(HL)		;\r
	LD	(HL),A		;UPDATE THE CORRESPONDING T3-PORT\r
	JR	PXEND		;\r
\r
TP2:	LD	A,D		;T2-PULSE\r
	CPL			;\r
	LD	D,A		;\r
	DEC	HL		;\r
	OR	(HL)		;\r
	LD	(HL),A		;UPDATE THE CORRESPONDING T1-PORT\r
	LD	A,D		;\r
	INC	HL		;\r
	INC	HL		;\r
	OR	(HL)		;\r
	LD	(HL),A		;UPDATE THE CORRESPONDING T3-PORT\r
	JR	PXEND		;\r
\r
TP3:	LD	A,D		;T3-PULSE\r
	CPL			;\r
	LD	D,A		;\r
	DEC	HL		;\r
	DEC	HL		;\r
	OR	(HL)		;\r
	LD	(HL),A		;UPDATE THE CORRESPONDING T1-PORT\r
	LD	A,D		;\r
	INC	HL		;\r
	OR	(HL)		;\r
	LD	(HL),A		;UPDATE THE CORRESPONDING T3-PORT\r
	JR	PXEND		;\r
\r
PXEND:	LD	BC,7		; IO1 TIMER: TERMINATES PULSE ACTION\r
	CALL	ESTABR		;	AFTER DELAY (8-16 MSEC)\r
\r
	LD	IX,(CURRBH)	;\r
\r
\r
;******************************* CAMERA DELEGATION MODULE ************\r
\r
\r
CAMBIT:	BIT	4,(IX+CTL)	; IF CAM.DEL. BIT = 1 THEN PERFORM MODULE\r
	JR	Z,INTBIT	; ELSE GO TO INTERCOM. MODULE\r
 \r
\r
	LD	A,(IX+SOUR)	;\r
	CP	14H		; SOURCE=20 (14H)?\r
	JP	NZ,ERCDCM	; IF NO, ERROR\r
\r
	LD	BC,PORT68	;\r
	IN	A,(C)		; XXXX XXXX\r
	OR	3FH		; 0011 1111\r
	LD	D,A		; XX11 1111\r
	LD	E,(IX+CTL)	;\r
\r
	LD	A,(IX+DEST)	;\r
	CP	44H		; DEST=68 (44H)?\r
	JR	Z,ST5CD		; IF YES, JUMP\r
	CP	12H		; DEST<18 (12H)?\r
	JP	M,ERCDCM	; IF YES, ERROR\r
	CP	19H		; DEST>24 (18H)?\r
	JP	P,CNR1CD	; IF YES, JUMP\r
\r
ST5CD:	BIT	0,E		; ESTAB. OR DELETE?\r
	JR	Z,X1		;\r
\r
	RES	0,D		; ESTABLISH ST-5 CAM. DELEG.\r
	JR	OUTCD		;\r
\r
X1:	RES	1,D		; DELETE ST-5 CAM. DELEG.\r
	JR	OUTCD		;\r
\r
CNR1CD:	CP	1CH		; DEST.<28 (1CH)?\r
	JP	M,ERCDCM	; IF YES, ERROR\r
	CP	1EH		; DEST.>29 (1DH)?\r
	JP	P,CNR2CD	; IF YES, JUMP\r
\r
	BIT	0,E		; ESTAB. OR DELETE?\r
	JR	Z,X2		;\r
\r
	RES	2,D		; ESTAB. CNR1 CAM. DELEG.\r
	JR	OUTCD		;\r
\r
X2:	RES	3,D		; DELETE CNR1 CAM. DELEG.\r
	JR	OUTCD		;\r
\r
CNR2CD:	CP	20H		; DEST.>31 (1FH)?\r
	JP	P,ERCDCM	; IF YES, ERROR\r
\r
	BIT	0,E		; ESTAB. OR DELETE?\r
	JR	Z,X3		;\r
\r
	RES	4,D		; ESTAB. CNR2 CAM. DELEG\r
	JR	OUTCD		;\r
\r
X3:	RES	5,D		; DELETE CNR2 CAM. DELEG.\r
\r
OUTCD:	OUT	(C),D		;\r
\r
	LD	A,D		; SAVE PORT CONTENT FOR\r
	LD	(CDCONT),A	;	CAM. DELEG. CHECK (BIT 0-5)\r
\r
\r
	LD	BC,8		; IO2 TIMER: TERMINATES CAM. DELEG. ACTION\r
	CALL	ESTABR		;	AFTER DELAY (8-16 MSEC)\r
\r
	LD	IX,(CURRBH)	;\r
\r
\r
;******************************* INTERCOMMUNICATION MODULE ***********\r
\r
\r
INTBIT:	BIT	7,(IX+CTL)	; IF INT.COM. BIT = 1 THEN PERFORM MODULE\r
	JR	Z,VIDBIT	; ELSE GO TO VIDEO MODULE\r
 \r
 \r
	LD	A,(IX+SOUR)	;\r
	CP	13H		; SOURCE = 19 (13H)?\r
	JR	NZ,IC1		; IF NO, JUMP\r
\r
	LD	A,(IX+DEST)	;\r
	CP	43H		; DEST. = 67 (43H)?\r
	JP	NZ,ERICCM	; IF NO, ERROR\r
\r
	BIT	0,(IX+CTL)	; ESTAB OR DELETE?\r
	JR	Z,Y1		; IF DELETE, JUMP\r
\r
	LD	BC,PORT22	; ESTAB. STM-ST5 INTERCOM\r
	IN	A,(C)		;\r
	RES	1,A		;\r
	OUT	(C),A		;\r
\r
	LD	BC,(PORT41)	;\r
	IN	A,(C)		;\r
	RES	7,A		;\r
	OUT	(C),A		;\r
\r
	JR	VIDBIT		;\r
\r
Y1:	LD	BC,PORT22	; DELETE STM-ST5 INTERCOM\r
	IN	A,(C)		;\r
	SET	1,A		;\r
	OUT	(C),A		;\r
\r
	LD	BC,(PORT41)	;\r
	IN	A,(C)		;\r
	SET	7,A		;\r
	OUT	(C),A\r
\r
	JR	VIDBIT		;\r
\r
IC1:	CP	14H		; SOURCE = 20 (14H)?\r
	JP	NZ,ERICCM	; IF NO, ERROR\r
\r
	LD	A,(IX+DEST)	;\r
	CP	44H		; DEST. = 68 (44H)?\r
	JP	NZ,ERICCM	; IF NO, ERROR\r
\r
	LD	BC,PORT22	;\r
	IN	A,(C)		;\r
	BIT	0,(IX+CTL)	; ESTAB. OR DELETE?\r
	JR	Z,Y2		; IF DELETE, JUMP\r
	RES	0,A		; ESTAB. STC-ST5 INTERCOM\r
	JR	OUTIC		;\r
\r
Y2:	SET	0,A		; DELETE STC-ST5 INTERCOM\r
\r
OUTIC:	OUT	(C),A\r
\r
\r
;******************************* VIDEO MODULE *************************\r
\r
\r
VIDBIT:	BIT	6,(IX+CTL)	; IF VIDEO BIT = 1 THEN PERFORM MODULE\r
	JP	Z,WAIT		; ELSE GOTO WAITING POINT\r
\r
\r
	BIT	0,(IX+CTL)	; ESTAB. OR DELETE?\r
	JR	NZ,ESTVX	; IF DELETE THEN\r
	LD	D,0		;\r
	LD	E,(IX+DEST)	;\r
	LD	HL,TABVID	; LOAD DYNAMIC VIDEO STATUS TABLE\r
	ADD	HL,DE		; WITH TEST NO.(30)\r
	LD	A,30		;\r
	LD	(HL),A		;\r
	LD	A,(TAB1VX+1EH)	;	SOURCE = TEST GEN (SOURCE 30)\r
	JR	OUT1VX		;\r
\r
ESTVX:	LD	D,0		;\r
	LD	E,(IX+DEST)	;\r
	LD	HL,TABVID	; LOAD DYNAMIC VIDEO STATUS TABLE\r
	ADD	HL,DE		; WITH ACTUAL SOURCE NO.\r
	LD	A,(IX+SOUR)	;\r
	LD	(HL),A		;\r
\r
       	LD	D,0		; ELSE\r
	LD	E,(IX+SOUR)	;	GET SOURCE CODE\r
	LD	HL,TAB1VX	;	FROM TAB1VX\r
	ADD	HL,DE		;\r
	LD	A,(HL)		;\r
\r
	CP	00		;\r
	JP	Z,ERVXCM	;\r
\r
OUT1VX:	LD	BC,PORT33	; OUTPUT\r
	OUT	(C),A		;\r
\r
	LD	BC,PORT34	; OUTPUT\r
	OUT	(C),A		;\r
\r
	CALL	PAUSE		; WAIT 16-24 MSEC\r
\r
	LD	IX,(CURRBH)	;\r
\r
	LD	D,0		; DESTINATION:\r
	LD	E,(IX+DEST)	;\r
	LD	HL,TAB2VX	;\r
	ADD	HL,DE		;\r
	LD	E,(HL)		; TAB2VX-VALUE TO E-REG\r
\r
	LD	A,E		; DERIVE THE PORT CONTENT\r
\r
	CP	00		; IF ZERO THEN ERROR\r
	JP	Z,ERVXCM	;\r
\r
	AND	0F0H		; MASK THE CONTENT BITS\r
	BIT	3,E		; SHIFT?\r
	JR	Z,V1		;\r
	SRL	A		;\r
	SRL	A		;\r
	SRL	A		;\r
	SRL	A		;\r
\r
V1:	CPL			;\r
	LD	D,A		; PORT CONTENT IN D-REG.\r
\r
	LD	A,E		; FIND THE ACTUAL OUTPUT PORT\r
	AND	07H		;\r
	LD	C,A		;\r
	LD	(VXAID),A	; SAVE VXAID (VXAID IS DERIVED FROM THE\r
				;	TAB2VX AND POINTS TO THE TAB3VX,\r
	SLA	C		;	WHERE THE ACTUAL PORT ADDR. IS\r
				;	PLACED. THE VXAID IS USED, WHEN\r
	LD	B,0		;	THE ACTION IS TERMINATED. IF \r
	LD	HL,TAB3VX	;	VXAID = 7, THEN THE PORT IS SHARED)\r
	ADD	HL,BC		;\r
	LD	C,(HL)		; LOWER PORT BYTE TO C-REG.\r
	INC	HL\r
	LD	B,(HL)		; UPPER PORT BYTE TO B-REG\r
\r
				; VXAID STILL IN A-REG\r
	CP	07H		; IS THE PORT SHARED?\r
	JR	NZ,OUT2VX	; IF NO THEN OUTPUT\r
\r
	IN	A,(C)		; ELSE\r
	OR	7FH		;	SAVE\r
	AND	D		;\r
	LD	D,A		;\r
\r
OUT2VX:	LD	(VXPORT),BC	; SAVE PORT ADDR. FOR VIDEO TERMINATION\r
	OUT	(C),D		; OUTPUT\r
\r
	LD	BC,9		; IO3 TIMER: TERMINATES VIDEO ACTION\r
	CALL	ESTABR		;	AFTER DELAY (8-16 MSEC)\r
\r
\r
;*********************************************************************\r
\r
				; START TIMER AND PASSIVATE\r
WAIT:	CALL	PAUSE		;	(WAIT 16-24 MSEC)\r
\r
\r
;***********************			     *******************\r
;*********************** CONTROL OF MATRIX OPERATION *******************\r
;***********************			     *******************\r
\r
\r
	LD	IX,(CURRBH)\r
\r
\r
;******************************* CHECK PULSE ***************************\r
\r
\r
	BIT	5,(IX+CTL)	; IF PULSE BIT = 1 THEN CHECK PULSE OPERATION\r
	JR	Z,CAMCK		; ELSE GO TO CAMERA DELEG. CHECK\r
\r
	LD	A,(IX+CTL)\r
	AND	0CH\r
	SRL	A\r
	SRL	A\r
	LD	D,A\r
	LD	A,(GROUP)\r
	SUB	D		;FIND GROUP NO.\r
	LD	E,A\r
	LD	D,0\r
	SLA	A\r
	SLA	A\r
	ADD	A,6\r
	LD	C,A\r
	LD	B,0\r
	LD	HL,PRTSAV	;STARTADDRESS OF OUTPUT-PORT CONTENT SAV.CELL\r
	ADD	HL,DE		;ADD GROUP NO.-DISPLACEMENT\r
	EX	DE,HL\r
	LD	HL,TAB2PX	;STARTADDRESS OF TAB2PX\r
	ADD	HL,BC		;ADD GROUP NO.-DISPLACEMENT(FIND CHECK-PORT)\r
	LD	A,3\r
				;WHILE NOT ALL PULSE-BITS FOR THE ACTUAL\r
CHP:	PUSH	AF		;SOURCE HAVE BEEN CHECKED DO\r
     	LD	C,(HL)		;BEGIN\r
	INC	HL		;\r
	LD	B,(HL)		;\r
	IN	A,(C)		;  GET CONTENT OF PULSE-CHECK INPUT PORT\r
	LD	C,A		;\r
	LD	A,(PXCONT)	;\r
	AND	C		;  MASK OUT IRRELEVANT BITS\r
	LD	BC,3		;\r
	ADD	HL,BC		;\r
	PUSH	HL		;\r
	LD	C,A		;\r
	EX	DE,HL		;  GET ADDRESS OF OUTP.PORT CONT.SAVING CELL\r
	LD	A,(PXCONT)	;  GET CONTENT\r
	AND	(HL)		;  MASK OUT IRRELEVANT BITS\r
	INC	HL		;\r
	EX	DE,HL		;\r
	CP	C		;\r
	JR	NZ,ER1		;  IF NO IDENTITY GOTO ER1\r
	POP	HL		;\r
	POP	AF		;\r
	DEC	A		;\r
	JR	NZ,CHP		;\r
	JR	CAMCK		;END\r
\r
ER1:	POP	HL\r
	POP	AF\r
	JP	ERRPX\r
\r
;******************************* CHECK CAMERA DELEGATION ******************\r
\r
\r
CAMCK:	BIT	4,(IX+CTL)	; IF CAM.DEL. BIT = 1 THEN CHECK OPERATION\r
	JR	Z,VIDCK		; ELSE GO TO VIDEO CHECK\r
 \r
	LD	BC,PORT67	; CAM. DELEG. CHECK PORT\r
	IN	A,(C)		; E.G. OFF:XX01 0101  E.G. ON:XX01 1001\r
	AND	3FH		;	   0011 1111	      0011 1111\r
				;  RESULT: 0001 0101	      0001 1001\r
				;				    ^\r
	BIT	0,(IX+CTL)	; CAM. DELEG. ON OR OFF?         CNR1 ON\r
	JR	NZ,CDONCK	; IF ON THEN JUMP\r
\r
	CP	15H		; CAM. DELEG. OFF\r
	JP	NZ,ERRCD	;	COMPARE INPUT WITH 0001 0101\r
	JR	VIDCK		;\r
\r
CDONCK:	LD	D,A		; CAM. DELEG. ON\r
	LD	A,(CDCONT)	;	COMMAND E.G. XX11 1011 (CNR1 ON)\r
	AND	3FH		;	MASK	     0011 1111\r
				;	RESULT:	     0011 1011\r
\r
	CP	3EH		; IF ST-5 ON:	     0011 1110   (NO)\r
	JR	NZ,CD1		; THEN			     ^\r
	LD	A,D		;	IF RECEIVED= 0001 0110\r
	CP	16H		;	THEN OK\r
	JP	NZ,ERRCD	;	ELSE ERROR\r
	JR	VIDCK		;\r
\r
CD1:	CP	3BH		; IF CNR1 ON:	     0011 1011   (YES)\r
	JR	NZ,CD2		; THEN			   ^\r
	LD	A,D		;	IF RECEIVED= 0001 1001\r
	CP	19H		;	THEN OK\r
	JP	NZ,ERRCD	;	ELSE ERROR\r
	JR	VIDCK		;\r
\r
CD2:	CP	2FH		; IF CNR2 ON:	     0010 1111\r
	JP	NZ,ERCDCM	; THEN			^\r
	LD	A,D		;	IF RECEIVED= 0010 0101\r
	CP	25H		;	THEN OK\r
	JP	NZ,ERRCD	;	ELSE ERROR\r
\r
\r
;******************************* CHECK VIDEO ***************************\r
\r
\r
VIDCK:	BIT	6,(IX+CTL)	; IF VIDEO BIT = 1 THEN PERFORM CHECK\r
	JP	Z,ACK		; ELSE GOTO BUFFER RETURN AND "ACK"\r
 \r
	LD	D,0		; DESTINATION\r
	LD	E,(IX+DEST)	;\r
	LD	HL,VXT1CK	; TABLEADDR.\r
\r
	ADD	HL,DE		;\r
	LD	A,(HL)		; GET DEST. GROUP AND CODE FOR DEST.\r
\r
	CP	0		; IF DEST. NOT VALID\r
	JP	Z,ERVXCM	; THEN ERROR IN BUFFER\r
\r
	BIT	7,A		;\r
	JR	NZ,GRP45	;\r
\r
	BIT	6,A		;\r
	JR	NZ,GRP2		;\r
\r
GRP1:	LD	BC,PORT46	; IF DEST.=1-20 (KRA 1-20)\r
	OUT	(C),A		; THEN SET CODE FOR DEST.\r
				;	ON PORT 46\r
	LD	BC,PORT42	;\r
	LD	E,1EH		; IF DELETE\r
	BIT	0,(IX+CTL)	; THEN SOURCE=TEST GEN.\r
	JR	Z,NED1		; ELSE\r
\r
	LD	E,(IX+SOUR)	;	GET SOURCE\r
NED1:	LD	D,0		;\r
	LD	HL,VXCREC	;\r
	ADD	HL,DE		;\r
	LD	A,(HL)		; GET EXPECTED CODE\r
	LD	(VXCKCO),A	; SAVE\r
\r
	LD	HL,VXCSEN	; SET CODE FOR SOURCE (UNITS)\r
	ADD	HL,DE		;	ON PORT 42\r
	LD	A,(HL)		;\r
	OUT	(C),A		; OUTPUT\r
\r
	CALL	PAUSE		; WAIT 16-24 MSEC\r
\r
	LD	IX,(CURRBH)	;\r
\r
	LD	BC,PORT43	;\r
	IN	A,(C)		; E.G.	XXXX 1110\r
	AND	0FH		;	0000 1111\r
	LD	D,A		;     = 0000 1110\r
\r
	LD	A,(VXCKCO)	; E.G.	1110 1110\r
	AND	0FH		;	0000 1111\r
				;     = 0000 1110\r
\r
	CP	D\r
	JP	NZ,ERRVX	;\r
\r
	JR	ACK		;\r
\r
GRP2:	LD	BC,PORT47	; IF DEST.=21-40 (KRA 21-40)\r
	OUT	(C),A		; THEN SET CODE FOR DEST.\r
				;	ON PORT 47\r
	LD	BC,PORT42	;\r
	LD	E,1EH		; IF DELETE\r
	BIT	0,(IX+CTL)	; THEN SOURCE=TEST GEN.\r
	JR	Z,NED2		; ELSE\r
\r
	LD	E,(IX+SOUR)	; GET SOURCE\r
NED2:	LD	D,0		;\r
	LD	HL,VXCREC	;\r
	ADD	HL,DE		;\r
	LD	A,(HL)		; GET EXPECTED CODE\r
	LD	(VXCKCO),A	; SAVE\r
\r
	LD	HL,VXCSEN	; SET CODE FOR SOURCE (UNITS)\r
	ADD	HL,DE		;	ON PORT 42\r
	LD	A,(HL)		;\r
	OUT	(C),A		; OUTPUT\r
\r
	CALL	PAUSE		; WAIT 16-24 MSEC\r
\r
	LD	IX,(CURRBH)	;\r
\r
	LD	BC,PORT43	;\r
	IN	A,(C)		; E.G.	1110 XXXX\r
	AND	0F0H		;	1111 0000\r
	LD	D,A		;     = 1110 0000\r
\r
	LD	A,(VXCKCO)	; E.G.	1110 1110\r
	AND	0F0H		;	1111 0000\r
				;     = 1110 0000\r
	CP	D		;\r
	JR	NZ,ERRVX	;\r
\r
	JR	ACK		;\r
\r
GRP45:	LD	BC,PORT48	; IF DEST.=41-46,51-59 (KRA 41-46,51-59)\r
	OUT	(C),A		; THEN SET CODE FOR DEST.\r
				;	ON PORT 48\r
	LD	BC,PORT44	;\r
\r
	LD	E,(IX+SOUR)	; GET SOURCE\r
	LD	D,0		;\r
\r
	LD	A,0FH		; IF DELETE\r
\r
	BIT	0,(IX+CTL)	; THEN EXPECTED = RELEASE\r
	JR	Z,NED3		;\r
\r
	LD	HL,VXCREC	;\r
	ADD	HL,DE		;\r
	LD	A,(HL)		;\r
NED3:	LD	(VXCKCO),A	;\r
\r
	LD	HL,VXCSEN	;SET CODE FOR SOURCE (UNITS)\r
	ADD	HL,DE		;	ON PORT 42\r
	LD	A,(HL)		;\r
	OUT	(C),A		; OUTPUT\r
\r
	CALL	PAUSE		; WAIT 16-24 MSEC\r
\r
	LD	IX,(CURRBH)	;\r
\r
	LD	BC,PORT45	;\r
	IN	A,(C)		;\r
	AND	0FH		;\r
	LD	D,A		;\r
\r
	LD	A,(VXCKCO)	;\r
	AND	0FH		;\r
\r
	CP	D		;\r
	JR	NZ,ERRVX	;\r
\r
	JR	ACK		;\r
\r
\r
;***********************************************************************\r
;***********************************************************************\r
 \r
 \r
ACK:	SET	0,(IX+CTL)	; SET "ACK" BIT IN BUFFER\r
 \r
RETUR:	LD	DE,(CURRBH)\r
	LD	HL,QME\r
	CALL	SUBENQ		; RETURN CURRENT BUFFER\r
	ACTIVATE	S,9	; ACTIVATE EXEC. PROCESS ( NO. 9)\r
 \r
	JP	NXBUF		; GO TO "NXBUF" IN START OF PROGRAM\r
 \r
 \r
 \r
 \r
;------------------------------- DEVICE ERROR --------------------------\r
\r
ERRPX:	NOP			; ERROR IN PULSE MATRIX\r
	JR	DVERR		;\r
\r
ERRCD:	NOP			; ERROR IN CAM.DELEG. EQUIPMENT\r
	JR	DVERR		;\r
\r
ERRVX:	NOP			; ERROR IN VIDEO MATRIX\r
	JR	DVERR		;\r
\r
\r
DVERR:	LD	A,(IX+CTL)	; IF UNEXPECTED ANSWER FROM MATRIX\r
	LD	(ERRCTL),A	; THEN\r
	LD	A,(IX+SOUR)	; BEGIN\r
	LD	(ERRSOU),A	;	STORE CONTROL, SOURCE, DESTIN.\r
	LD	A,(IX+DEST)	;	CONCERNING CROSSPOINT.\r
	LD	(ERRDST),A\r
	LD	A,(DEVERR)	;	INCREMENT ERROR COUNT\r
	INC	A\r
	LD	(DEVERR),A\r
 \r
NAK:	RES	0,(IX+CTL)	;	RESET "ACK" BIT IN BUFFER\r
	JR	RETUR		;	GO TO "RETUR"\r
				; END\r
 \r
 \r
;-------------------------------- BUFFER CODE ERRORS -------------------\r
\r
\r
ERPXCM:	NOP			; ERROR IN PULSE COMMAND.\r
	JR	NAK\r
 \r
ERCDCM:	NOP			; ERROR IN CAM. DEL. COMMAND.\r
 	JR	NAK\r
 \r
ERICCM:	NOP			; ERROR IN INTERCOM. COMMAND\r
	JR	NAK\r
 \r
ERVXCM:	NOP			; ERROR IN VIDEO COMMAND\r
	JR	NAK\r
 \r
\r
;-------------------------------	--------------------------------\r
;------------------------------- TABLES --------------------------------\r
;-------------------------------	--------------------------------\r
\r
\r
;------------------------------- TAB1PX --------------------------------\r
\r
TAB1PX:	  		; THIS TABLE GIVES ADDITIONAL INFORMATIONS\r
	DB	00	;	 TO THE PULSE MODULE.\r
SRC01P:	DB	18H	;	 INPUT TO TABLE IS THE SOURCE NUMBER.\r
SRC02P:	DB	28H	;\r
SRC03P:	DB	48H	;\r
SRC04P:	DB	88H	;	TABLE VALUE  =  X X X X   X X X X\r
SRC05P:	DB	10H	;			I I I I   I I I I\r
SRC06P:	DB	20H	;  OUTPUT PORT CONTENT -+-+-+-+   I I I I\r
SRC07P:	DB	40H	;  CONTENT SHIFT BIT -------------+ I I I\r
SRC08P:	DB	80H	;  SOURCE GROUP --------------------+-+-+\r
SRC09P:	DB	1BH	;\r
SRC10P:	DB	2BH	;\r
SRC11P:	DB	4BH	;\r
SRC12P:	DB	8BH	;\r
SRC13P:	DB	13H	;\r
SRC14P:	DB	23H	;\r
SRC15P:	DB	46H	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
SRC19P:	DB	86H	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
SRC27P:	DB	16H	;\r
SRC28P:	DB	26H	;\r
	DB	00	;\r
SRC30P:	DB	43H	;\r
SRC31P:	DB	1EH	;\r
SRC32P:	DB	2EH	;\r
SRC33P:	DB	4EH	;\r
SRC34P:	DB	8EH	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
\r
\r
;------------------------------- TAB2PX --------------------------------\r
\r
TAB2PX:\r
	DW	0000	; THIS TABLE SUPPLIES THE PULSE MODULE\r
	DW	0000	;	WITH ABSOLUTE PORT ADDRESSES\r
PORT49:	DW	4030H	; T1---\r
PORT50:	DW	4029H	; L1   I\r
PORT51:	DW	4031H	; T2   I---GROUP 0 = SOURCE NO'S 1-8\r
PORT52:	DW	402AH	; L2   I\r
PORT53:	DW	4032H	; T3   I\r
PORT54:	DW	402CH	; L3---\r
PORT55:	DW	4058H	; T1---\r
PORT56:	DW	4050H	; L1   I\r
PORT57:	DW	4059H	; T2   I---GROUP 3 = SOURCE NO'S 9-14,30\r
PORT58:	DW	4051H	; L2   I\r
PORT59:	DW	4060H	; T3   I\r
PORT60:	DW	4052H	; L3---\r
PORT61:	DW	4061H	; T1---\r
PORT62:	DW	4054H	; L1   I\r
PORT63:	DW	4062H	; T2   I---GROUP 6 = SOURCE NO'S 31-34,27,28,15,19\r
PORT64:	DW	405AH	; L2   I\r
PORT65:	DW	4064H	; T3   I\r
PORT66:	DW	405CH	; L3---\r
\r
\r
;------------------------------- TAB1VX --------------------------------\r
\r
TAB1VX:			;\r
	DB	7FH	; THIS TABLE CONNECTS SYMBOLIC SOURCE NUMBERS\r
SRC01V:	DB	0EEH	;	WITH ACTUAL CODES FOR ADDRESSING OF\r
SRC02V:	DB	0EDH	;	VIDEO MATRIX INPUTS\r
SRC03V:	DB	0ECH	;\r
SRC04V:	DB	0EBH	;\r
SRC05V:	DB	0EAH	;\r
SRC06V:	DB	0E9H	;\r
SRC07V:	DB	0E8H	;\r
SRC08V:	DB	0E7H	;\r
SRC09V:	DB	0E6H	;\r
SRC10V:	DB	0EFH	;\r
SRC11V:	DB	0DEH	;\r
SRC12V:	DB	0DDH	;\r
SRC13V:	DB	0DCH	;\r
SRC14V:	DB	0DBH	;\r
SRC15V:	DB	0DAH	;\r
SRC16V:	DB	0D9H	;\r
SRC17V:	DB	0D8H	;\r
SRC18V:	DB	0D7H	;\r
SRC19V:	DB	0D6H	;\r
SRC20V:	DB	0DFH	;\r
SRC21V:	DB	0BEH	;\r
SRC22V:	DB	0BDH	;\r
SRC23V:	DB	0BCH	;\r
SRC24V:	DB	0BBH	;\r
SRC25V:	DB	0BAH	;\r
SRC26V:	DB	0B9H	;\r
SRC27V:	DB	0B8H	;\r
SRC28V:	DB	0B7H	;\r
SRC29V:	DB	0B6H	;\r
SRC30V:	DB	0BFH	; TEST GENERATOR. USED WHEN DELETE X-POINT\r
SRC31V:	DB	7EH	;\r
SRC32V:	DB	7DH	;\r
SRC33V:	DB	7CH	;\r
SRC34V:	DB	7BH	;\r
SRC35V:	DB	7AH	;\r
	DB	00	;\r
	DB	00	;\r
	DB	7FH	;\r
	DB	00	;\r
	DB	00	;\r
\r
\r
;------------------------------- TAB2VX --------------------------------\r
\r
			; THIS TABLE GIVES ADDITIONAL INFORMATIONS TO\r
			;	THE VIDEO MODULE. INPUT TO TABLE IS\r
			;	THE DESTINATION NUMBER\r
\r
TAB2VX:			;    CONTENT  SHIFT    PORT    PORT   CONTENT\r
	DB	00	;	0	0	0\r
DEST01:	DB	19H	;	1	1	1	35	01H\r
DEST02:	DB	29H	;	2	1	1	35	02H\r
DEST03:	DB	49H	;	4	1	1	35	04H\r
DEST04:	DB	89H	;	8	1	1	35	08H\r
DEST05:	DB	11H	;	1	0	1	35	10H\r
DEST06:	DB	21H	;	2	0	1	35	20H\r
DEST07:	DB	41H	;	4	0	1	35	40H\r
DEST08:	DB	81H	;	8	0	1	35	80H\r
DEST09:	DB	1AH	;	1	1	2	36	01H\r
DEST10:	DB	2AH	;	2	1	2	36	02H\r
DEST11:	DB	4AH	;	4	1	2	36	04H\r
DEST12:	DB	8AH	;	8	1	2	36	08H\r
DEST13:	DB	12H	;	1	0	2	36	10H\r
DEST14:	DB	22H	;	2	0	2	36	20H\r
DEST15:	DB	42H	;	4	0	2	36	40H\r
DEST16:	DB	82H	;	8	0	2	36	80H\r
DEST17:	DB	1BH	;	1	1	3	37	01H\r
DEST18:	DB	2BH	;	2	1	3	37	02H\r
DEST19:	DB	4BH	;	4	1	3	37	04H\r
DEST20:	DB	8BH	;\r
DEST21:	DB	13H	;\r
DEST22:	DB	23H	;\r
DEST23:	DB	43H	;		     ETC.\r
DEST24:	DB	83H	;\r
DEST25:	DB	1CH	;\r
DEST26:	DB	2CH	;\r
DEST27:	DB	4CH	;\r
DEST28:	DB	8CH	;\r
DEST29:	DB	14H	;\r
DEST30:	DB	24H	;\r
DEST31:	DB	44H	;\r
DEST32:	DB	84H	;\r
DEST33:	DB	1DH	;\r
DEST34:	DB	2DH	;\r
DEST35:	DB	4DH	;\r
DEST36:	DB	8DH	;\r
DEST37:	DB	15H	;\r
	DB	00	;\r
	DB	00	;\r
DEST40:	DB	85H	;\r
DEST41:	DB	1EH	;\r
DEST42:	DB	2EH	;\r
DEST43:	DB	4EH	;\r
DEST44:	DB	8EH	;\r
DEST45:	DB	16H	;\r
DEST46:	DB	26H	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
DEST51:	DB	46H	;\r
DEST52:	DB	86H	;\r
DEST53:	DB	1FH	;\r
DEST54:	DB	2FH	;\r
DEST55:	DB	4FH	;\r
DEST56:	DB	8FH	;\r
DEST57:	DB	17H	;\r
DEST58:	DB	27H	;\r
DEST59:	DB	47H	;\r
	DB	00	;\r
\r
\r
;------------------------------- TAB3VX --------------------------------\r
\r
TAB3VX:\r
	DW	0000	;  0\r
PORT35:	DW	4034H	;  1	SET PULSE TO DEST.  1-8\r
PORT36:	DW	4038H	;  2	    -  "  -	    9-16\r
PORT37:	DW	4039H	;  3	    -  "  -	   17-24\r
PORT38:	DW	403AH	;  4	    -  "  -	   25-32\r
PORT39:	DW	403CH	;  5	    -  "  -	   33-37,40\r
PORT40:	DW	4021H	;  6	    -  "  -	   41-46,51-52\r
PORT41:	DW	4022H	;  7	    -  "  -	   53-59 + CAM. PIN 13\r
			;				 (SHARED PORT)\r
\r
;--------------------- TABLES FOR VIDEO MATRIX CHECK -------------------\r
;--------------------- DEST. CODE AND GROUP TABLE ----------------------\r
\r
			;     GROUP    CODE		      GROUP\r
VXT1CK:	DB	00	;					III\r
	DB	26H	;	1	19H	   DEST. 1 --	0011 1001\r
	DB	27H	;	1	18H		 2   I     I IIII\r
	DB	28H	;	1	17H		 3   I      CODE\r
	DB	29H	;	1	16H		 4   I\r
	DB	2AH	;	1	15H		 5   I\r
	DB	2BH	;	1	14H		 6   I\r
	DB	2CH	;	1	13H		 7   I\r
	DB	2DH	;	1	12H		 8   I\r
	DB	2EH	;	1	11H		 9    -- KRA 1-20\r
	DB	2FH	;	1	10H		10   I      GRP 1\r
	DB	36H	;	1	09H		11   I\r
	DB	37H	;	1	08H		12   I\r
	DB	38H	;	1	07H		13   I\r
	DB	39H	;	1	06H		14   I\r
	DB	3AH	;	1	05H		15   I\r
	DB	3BH	;	1	04H		16   I\r
	DB	3CH	;	1	03H		17   I\r
	DB	3DH	;	1	02H		18   I\r
	DB	3EH	;	1	01H		19   I\r
	DB	3FH	;	1	00H		20 --\r
	DB	46H	;	2	19H		21\r
	DB	47H	;	2	18H		22\r
	DB	48H	;\r
	DB	49H	;\r
	DB	4AH	;\r
	DB	4BH	;\r
	DB	4CH	;\r
	DB	4DH	;\r
	DB	4EH	;\r
	DB	4FH	;\r
	DB	56H	;\r
	DB	57H	;\r
	DB	58H	;\r
	DB	59H	;\r
	DB	5AH	;\r
	DB	5BH	;\r
	DB	5CH	;\r
	DB	00	;\r
	DB	00	;\r
	DB	5FH	;\r
	DB	86H	;\r
	DB	87H	;\r
	DB	88H	;\r
	DB	89H	;\r
	DB	8AH	;\r
	DB	8BH	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
	DB	00	;\r
	DB	0AEH	;\r
	DB	0AFH	;\r
	DB	0B6H	;\r
	DB	0B7H	;\r
	DB	0B8H	;\r
	DB	0B9H	;\r
	DB	0BAH	;\r
	DB	0BBH	;\r
	DB	0BCH	;\r
	DB	00	;\r
\r
;--------------------------- MATRIX INPUT (UNITS) SEND CODE ------------\r
\r
VXCSEN:	DB	00	;	 0\r
	DB	0EEH	; SOURCE 1\r
	DB	0DDH	;	 2\r
	DB	0CCH	;	 3\r
	DB	0BBH	;	 4\r
	DB	0AAH	;	 5\r
	DB	99H	;	 6\r
	DB	88H	;	 7\r
	DB	77H	;	 8\r
	DB	66H	;	 9\r
	DB	0FFH	;	10\r
	DB	0EEH	;	11\r
	DB	0DDH	;	12\r
	DB	0CCH	;	13\r
	DB	0BBH	;	14\r
	DB	0AAH	;	15\r
	DB	99H	;	16\r
	DB	88H	;	17\r
	DB	77H	;	18\r
	DB	66H	;	19\r
	DB	0FFH	;	20\r
	DB	0EEH	;	21\r
	DB	0DDH	;	22\r
	DB	0CCH	;	23\r
	DB	0BBH	;	24\r
	DB	0AAH	;	25\r
	DB	99H	;	26\r
	DB	88H	;	27\r
	DB	77H	;	28\r
	DB	66H	;	29\r
	DB	0FFH	;	30\r
	DB	0EEH	;	31\r
	DB	0DDH	;	32\r
	DB	0CCH	;	33\r
	DB	0BBH	;	34\r
	DB	0AAH	;	35\r
	DB	00	;	36\r
	DB	00	;	37\r
	DB	00	;	38\r
	DB	00	;	39\r
	DB	00	;	40\r
\r
;----------------------- MATRIX INPUT (TENS) RECEIVE CODE --------------\r
\r
VXCREC:	DB	00	;\r
	DB	0EEH	; SOURCE 1\r
	DB	0EEH	;	 2\r
	DB	0EEH	;	 3\r
	DB	0EEH	;	 4\r
	DB	0EEH	;	 5\r
	DB	0EEH	;	 6\r
	DB	0EEH	;	 7\r
	DB	0EEH	;	 8\r
	DB	0EEH	;	 9\r
	DB	0EEH	;	10\r
	DB	0DDH	;	11\r
	DB	0DDH	;	12\r
	DB	0DDH	;	13\r
	DB	0DDH	;	14\r
	DB	0DDH	;	15\r
	DB	0DDH	;	16\r
	DB	0DDH	;	17\r
	DB	0DDH	;	18\r
	DB	0DDH	;	19\r
	DB	0DDH	;	20\r
	DB	0CCH	;	21\r
	DB	0CCH	;	22\r
	DB	0CCH	;	23\r
	DB	0CCH	;	24\r
	DB	0CCH	;	25\r
	DB	0CCH	;	26\r
	DB	0CCH	;	27\r
	DB	0CCH	;	28\r
	DB	0CCH	;	29\r
	DB	0CCH	;	30\r
	DB	0BBH	;	31\r
	DB	0BBH	;	32\r
	DB	0BBH	;	33\r
	DB	0BBH	;	34\r
	DB	0BBH	;	35\r
	DB	00	;	36\r
	DB	00	;	37\r
	DB	00	;	38\r
	DB	00	;	39\r
	DB	00	;	40\r
\r
\r
\r
;------------------------------- PORT TABLE ----------------------------\r
\r
PORT22:	EQU	4042H	; THIS TABLE CONNECTS SYMBOLIC PORTNUMBERS\r
			;	WITH ABSOLUTE PORT ADDRESSES\r
PORT33:	EQU	0022H	;\r
PORT34:	EQU	0024H	;\r
\r
PORT42:	EQU	4040H	;\r
PORT43:	EQU	4048H	;\r
PORT44:	EQU	0042H	;\r
PORT45:	EQU	004AH	;\r
PORT46:	EQU	4041H	;\r
PORT47:	EQU	4044H	;\r
PORT48:	EQU	0044H	;\r
\r
PORT67:	EQU	4028H	;\r
PORT68:	EQU	4024H	;\r
\r
\r
\r
;-------------------------------             ---------------------------\r
;------------------------------- SUBROUTINES ---------------------------\r
;-------------------------------	     ---------------------------\r
\r
 \r
IO1:	LD	BC,(PXPORT)	; IO1 TIMER: TERMINATES PULSE ACTION\r
	LD	A,0FFH		;\r
	OUT	(C),A		; GET PORT ADDR. AND CONTENT\r
				;	 AND TERMINATE ACTION.\r
	RET			; RETURN\r
\r
 \r
IO2:	LD	BC,PORT68	; IO2 TIMER: TERMINATES CAM. DELEG. ACTION\r
	IN	A,(C)		;\r
	OR	3FH		; GET PORT ADDR. AND CONTENT\r
	OUT	(C),A		;	AND TERMINATE ACTION.\r
	RET			; RETURN\r
\r
\r
IO3:	LD	D,0FFH		; IO3 TIMER: TERMINATES VIDEO ACTION\r
	LD	BC,PORT33	;\r
	OUT	(C),D		; GET PORT ADDR. AND CONTENT\r
	LD	BC,PORT34	;\r
	OUT	(C),D		;	AND TERMINATE VIDEO SOURCE\r
\r
	LD	BC,(VXPORT)	; GET PORT ADDR. AND CONTENT\r
	LD	A,(VXAID)	;\r
	CP	07H		; IF PORT IS SHARED\r
	JR	NZ,OUT3VX	;\r
	IN	A,(C)		; THEN SAVE\r
	OR	7FH		;\r
	LD	D,A		;	    TERMINATE VIDEO DESTINATION\r
\r
OUT3VX:	OUT	(C),D		; OUTPUT\r
	RET			; RETURN\r
\r
\r
\r
PAUSE:	LD	BC,6		; WAIT 16-24 MSEC\r
	CALL	ESTABR		;\r
	PASSIVATE	S,12	;\r
	CALL	SCOMMON		;\r
	EI\r
\r
	RET\r
\r
\r
INIPX:	LD	(PXPORT),BC	; SAVE PORT ADDR. FOR PULSE TERMINATION\r
	OUT	(C),A		; OUTPUT\r
\r
	LD	BC,7		; IO1 TIMER: TERMINATES PULSE ACTION\r
	CALL	ESTABR		;	AFTER DELAY (8-16 MSEC)\r
\r
	CALL	PAUSE		; WAIT 16-24 MSEC\r
\r
	RET\r
\r
\r
;---------------------------------------------------------------------\r
 \r
	DSEG\r
\r
TABVID	DS	61		; DYNAMIC VIDEO STATUS TABLE\r
 \r
CURRBH:	DS	2		; ADDR. OF CURRENT BUFFER\r
 \r
ERRCTL:	DS	1		; CONTROL BYTE FROM LAST DEVICE ERROR\r
ERRSOU:	DS	1		; SOURCE	"	"	"\r
ERRDST:	DS	1		; DESTINATION	"	"	"\r
DEVERR:	DS	1		; NUMBER OF DETECTED DEVICE ERRORS\r
 \r
	DS	64		; PRIVATE STACK ON 4 LEVELS\r
IOMSP:\r
\r
PRTSAV:				; PULSE PORT STATUS BYTES\r
P49SAV	DS	1\r
P51SAV	DS	1\r
P53SAV	DS	1\r
P55SAV	DS	1\r
P57SAV	DS	1\r
P59SAV	DS	1\r
P61SAV	DS	1\r
P63SAV	DS	1\r
P65SAV	DS	1\r
PXPORT:	DS	2		; PORT ADDR. FOR PULSE TERMINATION\r
PXCONT:	DS	1		; PORT CONTENT FOR PULSE CHECK\r
GROUP	DS	1\r
\r
CDCONT:	DS	1		; PORT CONTENT FOR CAM. DELEG. CHECK\r
\r
VXAID:	DS	1		; AID BYTE FOR VIDEO TERMINATION\r
VXPORT:	DS	2		; PORT ADDR. FOR VIDEO TERMINATION\r
VXCKCO:	DS	1		; PORT CONTENT FOR VIDEO CHECK\r
\r
;**********************************************************************\r
 \r
	END\r