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

⟦278f41a42⟧ TextFile

    Length: 19052 (0x4a6c)
    Types: TextFile
    Names: »STATU.SRC«

Derivation

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

TextFile

 \r
	NLIST	S\r
PASSIVATE	MACRO	#ID,#NO\r
					;DESRIP: THE MODULE PASSIVATES\r
					;	SPECIFIED PROCES.\r
					;	IF LINK IS SET AND ACTIV\r
					;	SPECIAL PROCESS IS PASSIVATED\r
					;	THE LINK-ELEMENT IS \r
					;	DECREMENTED\r
					;DESTR:	REG F,H,L\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
	ENDM\r
ACTIVATE	MACRO	#ID,#NO\r
					;DESRIP: THE MODULE ACTIVATES\r
					;	SPECIFIED PROCES.\r
					;	IF LINK IS SET AND PASSIV\r
					;	SPECIAL PROCESS IS ACTIVATED\r
					;	THE LINK-ELEMENT IS \r
					;	INCREMENTED\r
					;DESTR:	REG F,H,L\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
	ENDM\r
CREATE	MACRO	#ID,#NO,#NAME,#PRIO\r
				;DESCRIP: THE MODULE CREATES SPECIFIED\r
				;	PROCESS IE LOADS STARTADDRESS\r
				;	(#NAME) IN PROCESS-DESCRIPTION\r
				;	BYTE 6,7. IF NORMAL PROCESS IS\r
				;	ENCOUNTERED PRIORITY IS LOADED\r
				;	TO BYTE 5 IN PROCESS-DESCRIPTION\r
				;	AND THE PROCESS IS ENQUEUED IN\r
				;	APPROPRIATE PRIO-QUEUE.\r
				;	FINALLY THE SPECIFIED PROCESS\r
				;	IS ACTIVATED\r
				;DESTR:	IF NORMAL PROCESS\r
				;	REG. A,F,B,C,D,E,H,L\r
				;	IF SPECIAL PROCESS\r
				;	REG. F,H,L\r
	LD	HL,#NAME	;\r
	IF	'#ID'.EQ.'S'\r
	LD	(SYSRAM+200H+#NO*10H+6),HL\r
				;STARTADD TO PROCESS-DESCRIP\r
	ENDIF\r
	IF	'#ID'.EQ.'N'\r
	LD	(SYSRAM+200H+S*10H+#NO*20H+6),HL\r
				;STARTADD TO PROCESS-DESCRIP\r
	LD	HL,SYSRAM+200H+S*10H+#NO*20H+5\r
	LD	(HL),#PRIO			;PRIORTY TO PROCESS\r
	LD	HL,SYSRAM+#PRIO*8		;ADDRESS OF PRIO-QUEUE\r
	LD	DE,SYSRAM+200H+S*10H+#NO*20H	;ADDRESS OF PROCESS-DESCRIP\r
	CALL	SUBENQ\r
	ENDIF\r
	ACTIVATE	#ID,#NO			;ACTIVATE PROCESS\r
	ENDM\r
\r
\r
LESTAB	MACRO	#PRNUM\r
	LD	BC,#PRNUM\r
	CALL	ESTABR\r
	ENDM\r
\r
LSUSPN	MACRO	#PRNUM\r
	LD	BC,#PRNUM\r
	CALL	SUSPND\r
	ENDM\r
\r
GESTAM	MACRO\r
	LD	HL,ONOFF\r
	LD	(HL),0FFH\r
	ENDM\r
\r
GSUSPM	MACRO\r
	LD	HL,ONOFF\r
	LD	(HL),0\r
        ENDM\r
\r
;************************************************************************\r
;                             O G E P A 1\r
;                          VERSION 810119/CGR\r
;************************************************************************\r
;\r
OGEPA1	MACRO	#CHAN\r
	\r
				;DESCRIP: THE MACRO DEQUEUES AN 'OUTGOING' ELE-\r
				;         MENT FROM DESCRIPTOR.\r
				;ENTRY: -\r
				;EXIT: CY=1 IF QUEUE WAS NOT EMPTY\r
				;      CY=0 IF QUEUE WAS EMPTY\r
				;      ADDRESS OF ELEMENT IN DE\r
				;DESTROY: IF QUEUE WAS NOT EMPTY\r
				;	     REG A,F,B,C,D,E,H,L,IX\r
				;	  IF QUEUE WAS EMPTY\r
				;	     REG F,H,L\r
				;PARAMETERS: #CHAN = CHANNEL NO. ('DATATYPE')\r
				;\r
				;EXTERNALS: SUBDEQ,QHEADS\r
				;\r
;###################### Ogepa1 macro ###########################\r
	LD	A,#CHAN		;FIND EMPTY QUEUE\r
	LD	H,A\r
	SLA	A\r
	SLA	A\r
	ADD	A,H\r
	LD	HL,QHEADS\r
	LD	D,0\r
	LD	E,A\r
	ADD	HL,DE\r
	CALL	SUBDEQ		;GET BUFFER\r
	JP	NC,A#$YM+3\r
	PUSH	DE\r
	POP	IX\r
	LD	L,(IX+4)	;DECREMENT DATABUFFER ADDRESS 2 TIMES.\r
	LD	H,(IX+5)	;\r
	DEC	HL		;\r
	DEC	HL		;\r
	LD	(IX+4),L	;\r
A#$YM:	LD	(IX+5),H	;\r
;######################## End macro ##############################\r
	\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 (I/F 104)                                                   *\r
;*                                                                            *\r
;* MODULE: STATUS TRANSMITTING PROCESS                                        *\r
;*                                                                            *\r
;******************************************************************************\r
\r
LINK	DEFL	0\r
STATNR	DEFL	8\r
\r
	PUBLIC	STATPR,STAC08\r
	EXTRN	SYSRAM,SUBDEQ,SUBENQ,SCOMMON\r
	EXTRN	QEMPTY,QXT,QKT,QIX,QET,QXI,PQH8\r
	EXTRN	TABSRC,TABDST,BYTES,BUFFT,COUNT,BYTE1,SRCEBT,DESTBT\r
	EXTRN	INVEST,CONDIT,STATUS,CPSTAT,CPSPEC,SRCLOG,DSTLOG\r
	EXTRN	ID1,QHEADS,OD1\r
\r
	CSEG\r
STATPR:	LD	SP,STAC08	;INITIALIZE STACKPOINTER\r
ST01:	PASSIVATE S,STATNR\r
ST02:	CALL	SCOMMON\r
	EI\r
\r
*******************************************************************************\r
QXT1:	LD	HL,QXT\r
	CALL	SUBDEQ\r
	JR	NC,QKT1		;WHILE BUFFERS IN QXT DO\r
	PUSH	DE		;BEGIN\r
	POP	IX		;\r
        LD	A,4		;\r
	LD	(BYTES),A	;  LOAD EXTERNAL BYTECOUNT = 4 IN BUFFERAREA\r
	LD	IY,BUFFT	;\r
	LD	A,0EAH		;\r
	LD	(IY),A		;  LOAD MESSAGE CODE IN BUFFERAREA\r
	LD	A,(IX+3)	;\r
	LD	(IY+1),A	;  LOAD SOURCE NO. IN BUFFERAREA\r
	LD	A,(IX+4)	;\r
	LD	(IY+2),A	;  LOAD DESTINATION NO. IN BUFFERAREA\r
	LD	A,(IX+2)	;\r
	LD	(IY+3),A	;  LOAD CONDITION BYTE IN BUFFERAREA\r
	PUSH	IX		;\r
QXT2:	CALL	OG4		;  GET EMPTY BUFFER\r
	JR	C,QXT3		;\r
	CALL	SCOMMON		;\r
	EI			;\r
	JR	QXT2		;\r
QXT3:	CALL	MCSEND		;  SEND MESSAGE TO BOOKING SYSTEM\r
				;\r
	POP	DE		;\r
	LD	HL,QEMPTY	;\r
	CALL	SUBENQ		;  RETURN BUFFER TO EMPTY BUFFER QUEUE\r
	JR	QXT1		;END-WHILE\r
\r
*******************************************************************************\r
QKT1:	LD	HL,QKT\r
	CALL	SUBDEQ\r
	JR	NC,QET1		;WHILE BUFFERS IN QKT DO\r
	PUSH	DE		;BEGIN\r
	POP	IX		;\r
	LD	A,2		;\r
	LD	(BYTES),A	;  LOAD EXTERNAL BYTECOUNT = 2 IN BUFFERAREA\r
	LD	IY,BUFFT	;\r
	LD	A,82H		;\r
	LD	(IY),A		;  LOAD MESSAGE CODE IN BUFFERAREA\r
	LD	A,(IX+2)	;\r
	LD	(IY+1),A	;  LOAD KEY BYTE IN BUFFERAREA\r
	PUSH	IX		;\r
QKT2:	CALL	OG4		;  GET EMPTY BUFFER\r
	JR	C,QKT3		;\r
	CALL	SCOMMON		;\r
	EI			;\r
	JR	QKT2		;\r
QKT3:	CALL	MCSEND		;  SEND MESSAGE TO BOOKING SYSTEM\r
				;\r
	POP	DE		;\r
	LD	HL,QEMPTY	;\r
	CALL	SUBENQ		;  RETURN BUFFER TO EMPTY BUFFER QUEUE\r
	JR	QKT1		;END-WHILE\r
\r
*******************************************************************************\r
QET1:	LD	HL,QIX\r
	CALL	SUBDEQ\r
	JR	NC,QET2		;IF BUFFERS LEFT IN QIX THEN RETURN\r
	LD	HL,QEMPTY	;THESE TO EMPTY BUFFER QUEUE\r
	CALL	SUBENQ\r
	JR	QET1\r
\r
QET2:	LD	HL,QET\r
	CALL	SUBDEQ\r
	JP	NC,QPQH8	;WHILE BUFFERS IN QET DO\r
	PUSH	DE		;BEGIN\r
	POP	IX		;\r
	LD	A,(IX+2)	;\r
	AND	0BFH		;\r
	CP	20H		;\r
	JP	Z,QET11		;  IF LISTEN-BUFFER THEN SKIP\r
	CP	04H		;\r
	JP	Z,QET11		;  IF ST5 TEST-BUFFER THEN SKIP\r
	CP	02H		;\r
	JP	Z,QET11		;  IF CNR TEST-BUFFER THEN SKIP\r
	CP	01H		;\r
	JP	Z,QET11		;  IF STM TEST-BUFFER THEN SKIP\r
	LD	A,(IX+4)	;\r
	CP	38		;\r
	JP	Z,QET11		;  IF OPER.MONITORING CROSSBAR THEN SKIP\r
	CP	39		;\r
	JP	Z,QET11		;  IF TECHN.MONITORING CROSSBAR THEN SKIP\r
				;  ELSE\r
	LD	A,(IX+2)	;\r
	LD	(BYTE1),A	;  SAVE STATUSBYTE FROM EXECUTE MODULE\r
	LD	A,80H		;\r
	LD	(IX+2),A	;\r
	LD	HL,QXI		;\r
	CALL	SUBENQ		;  SEND "ESTABLISH"-BUFFER TO QXI AND\r
	CALL	INVEST		;  INVESTIGATE DESTINATION STATUS\r
	LD	HL,QIX		;\r
	CALL	SUBDEQ		;  GET BUFFER FROM INVEST\r
	PUSH	DE		;\r
	POP	IX		;\r
	LD	HL,TABSRC	;\r
	LD	B,0		;\r
	LD	C,(IX+3)	;  MAKE SOURCE NO. CONVERSION\r
	ADD	HL,BC		;\r
	LD	A,(HL)		;\r
	LD	(IX+3),A	;\r
	LD	HL,TABDST-1	;\r
	LD	C,(IX+4)	;  MAKE DESTINATION NO. CONVERSION\r
	ADD	HL,BC		;\r
	LD	A,(HL)		;\r
	LD	(IX+4),A	;\r
				;\r
	LD	A,4		;\r
	LD	(BYTES),A	;  LOAD EXTERNAL BYTECOUNT = 4 IN BUFFERAREA\r
	LD	IY,BUFFT	;\r
	LD	A,0EAH		;\r
	LD	(IY),A		;  LOAD MESSAGE CODE IN BUFFERAREA\r
	LD	A,(IX+3)	;\r
	LD	(IY+1),A	;  LOAD SOURCE NO. IN BUFFERAREA\r
	LD	A,(IX+4)	;\r
	LD	(IY+2),A	;  LOAD DESTINATION NO. IN BUFFERAREA\r
	LD	A,00		;\r
	LD	(IY+3),A	;  CLEAR CONDITION BYTE IN BUFFERAREA\r
				;\r
	BIT	1,(IX+2)	;\r
	JR	Z,QET3		;  IF DESTINATION IS ON AIR THEN\r
	SET	2,(IY+3)	;  SET BIT 2 IN CONDITION BYTE\r
QET3:	BIT	4,(IX+2)	;\r
	JR	Z,QET4		;  IF SOURCE(IF ANY) IS INTERLOCKED THEN\r
	SET	3,(IY+3)	;  SET BIT 3 IN CONDITION BYTE\r
QET4:	BIT	2,(IX+2)	;\r
	JR	Z,QET5		;  IF SOURCE(IF ANY) IS USED THEN\r
	SET	4,(IY+3)	;  SET BIT 4 IN CONDITION BYTE\r
				;\r
QET5:	RES	6,(IY+3)	;  RESET BIT 6(INVOKED BY COMMAND) IN COND.BYTE\r
	LD	HL,CONDIT	;\r
	BIT	7,(HL)		;\r
	JR	Z,QET6		;  IF MANUAL OPERATION IN PROGRESS THEN\r
	SET	1,(IY+3)	;  SET BIT 0 IN CONDITION BYTE\r
QET6:	LD	HL,STATUS	;\r
	BIT	1,(HL)		;\r
	JR	Z,QET7		;  IF COMPUTER OFF THEN\r
	SET	0,(IY+3)	;  SET BIT 0 IN CONDITION BYTE\r
				;\r
QET7:	LD	HL,BYTE1	;\r
	LD	A,(HL)		;\r
	AND	80H		;\r
	CP	00H		;\r
	JR	NZ,QET8		;  IF RELEASE COMMAND THEN\r
				;  BEGIN\r
	SET	5,(IY+3)	;    SET BIT 5(STATUS CHANGED) IN COND.BYTE\r
	RES	7,(IY+3)	;    RESET BIT 7(DESTINATION FREE) IN COND.BYTE\r
	JR	QET10		;  END ELSE\r
QET8:	BIT	0,(IX+2)	;  BEGIN\r
	JR	Z,QET9		;    IF REQUESTED CONDITION EXIST THEN\r
	SET	5,(IY+3)	;    SET BIT 5(STATUS CHANGED) IN COND.BYTE\r
	SET	7,(IY+3)	;    SET BIT 7(DESTIN. OCCUPIED) IN COND.BYTE\r
	JR	QET10		;    ELSE\r
QET9:	RES	5,(IY+3)	;    RESET BIT 5(STATUS UNCHANGED) IN COND.BYTE\r
	RES	7,(IY+3)	;    RESET BIT 7(DESTINATION FREE) IN COND.BYTE\r
				;  END\r
QET10:	PUSH	IX		;\r
QET101:	CALL	OG4		;  GET EMPTY BUFFER\r
	JR	C,QET102	;\r
	CALL	SCOMMON		;\r
	EI			;\r
	JR	QET101		;\r
QET102:	CALL	MCSEND		;  SEND MESSAGE TO BOOKING SYSTEM\r
				;\r
	POP	DE		;\r
QET11:  LD	HL,QEMPTY	;\r
	CALL	SUBENQ		;  RETURN BUFFER TO EMPTY BUFFER QUEUE\r
				;\r
	JP	QET2		;END-WHILE\r
\r
*******************************************************************************\r
QPQH8:	LD	HL,CONDIT\r
	BIT	6,(HL)\r
	JP	NZ,STATEND	;IF INITIALIZATION IN PROGRESS THEN SKIP\r
       	LD	HL,PQH8\r
	CALL	SUBDEQ\r
	JP	NC,STATEND	\r
	PUSH	DE		\r
	POP	IX		\r
	LD	A,0E0H		\r
	CP	(IX+8)		\r
	JP	NZ,S1		;IF IT IS A "SEND TOTAL CP STATUS"-MESSAGE THEN\r
;------------------------------------------------------------------------------\r
;------------------------------------------------------------------------------\r
T1:				;BEGIN\r
	LD	A,0		;\r
	LD	C,128		;\r
	LD	HL,BUFFT	;\r
T11:	LD	(HL),A		;  CLEAR BUFFERAREA\r
	INC	HL		;\r
	DEC	C		;\r
	JR	NZ,T11		;\r
	LD	A,0E8H		;\r
	LD	(BUFFT),A	;  LOAD MEESAGE CODE IN BUFFERAREA\r
	LD	BC,85		;  WHILE MORE DESTINATIONS LEFT DO\r
T2:	LD	HL,CPSTAT-1	;  BEGIN\r
	ADD	HL,BC		;\r
	LD	A,(HL)		;    GET LOGIC SOURCE NO. FOR DESTINATION\r
	RES	7,A		;    SKIP ON AIR-DESTINATION\r
	LD	HL,TABDST-1	;\r
	ADD	HL,BC		;\r
	LD	E,(HL)		;    MAKE DESTINATION NO. CONVERSION\r
	LD	D,0		;\r
	LD	HL,BUFFT	;\r
	ADD	HL,DE		;\r
	PUSH	HL		;\r
	LD	HL,TABSRC	;\r
	LD	E,A		;\r
	LD	D,0		;    MAKE SOURCE NO. CONVERSION\r
	ADD	HL,DE		;\r
	LD	E,(HL)		;\r
	POP	HL		;    LOAD SOURCE NO. IN BUFFERAREA\r
	LD	(HL),E		;    IN THE BYTE CORRESPONDING TO\r
	DEC	C		;    THE DESTINATION IN QUESTION\r
	JR	NZ,T2		;  END-WHILE\r
				;\r
	LD	E,00		;\r
	LD	HL,BUFFT+38	;\r
	LD	(HL),E		;  SKIP MONITOR DESTINATIONS\r
	INC	HL		;\r
	LD	(HL),E		;\r
	LD	HL,CONDIT	;\r
	BIT	7,(HL)		;\r
	JR	Z,T3		;  IF MANUAL OPERATION IN PROGRESS THEN\r
	SET	1,E		;  SET BIT 1 IN CONDITION BYTE\r
T3:	LD	HL,STATUS	;\r
	BIT	1,(HL)		;\r
	JR	Z,T4		;  IF COMPUTER OFF THEN\r
	SET	0,E		;  SET BIT 0 IN CONDITION BYTE\r
T4:	LD	HL,BUFFT+95	;\r
	LD	(HL),E		;  LOAD CONDITION BYTE IN BUFFERAREA\r
	LD	A,96		;\r
	LD	(BYTES),A	;  LOAD EXTERNAL BYTECOUNT IN BUFFERAREA\r
	PUSH	IX		;\r
	LD	A,(IX-2)	;\r
	LD	(CHNUM),A	;  SAVE CR80 CHANNEL NUMBER\r
	CALL	MCR80		;  SEND MESSAGE TO CR80 IN QUESTION\r
	POP	DE		;\r
	CALL	ID1		;  RETURN COMMAND BUFFER TO EMPTY BUFFER QUEUE\r
	JP	QPQH8		;END\r
;------------------------------- ELSE ---------------------------------------\r
S1:	LD	A,00		\r
	CP	(IX+10)		\r
	JP	NZ,QPD1		;IF ONLY SOURCE SPECIFIED THEN\r
;----------------------------------------------------------------------------\r
;----------------------------------------------------------------------------\r
				;BEGIN\r
	LD	A,(IX+9)	;\r
	CALL	SRCLOG		;  MAKE SOURCE NO.CONVERSION\r
	JP	NZ,NVALID	;  IF NO VALID SOURCE NO. GOTO NVALID\r
	LD	A,L		;\r
	LD	(SRCEBT),A	;  SAVE LOGIC SOURCE NO. IN (SRCEBT)\r
	LD	A,0		;\r
	LD	C,128		;\r
	LD	HL,BUFFT	;\r
S11:	LD	(HL),A		;  CLEAR BUFFERAREA\r
	INC	HL		;\r
	DEC	C		;\r
	JR	NZ,S11		;\r
	LD	(BYTE1),A	;  CLEAR BYTE1\r
	LD	A,0ECH		;\r
	LD	(BUFFT),A	;  LOAD MESSAGE CODE IN BUFFERAREA\r
	LD	A,(IX+9)	;\r
	LD	(BUFFT+1),A	;  LOAD SOURCE NO. IN BUFFERAREA\r
	LD	A,2		;\r
	LD	(COUNT),A	;  INITIALIZE COUNT = 2\r
	LD	BC,85		;  WHILE MORE DESTINATIONS LEFT DO\r
S2:				;  BEGIN\r
	LD	A,38		;\r
	CP	C		;\r
	JR	Z,S4		;    SKIP MONITOR DESTINATIONS\r
	LD	A,39		;\r
	CP	C		;\r
	JR	Z,S4		;\r
	LD	HL,CPSTAT-1	;\r
	ADD	HL,BC		;\r
	LD	A,(HL)		;    GET LOGIC SOURCE NO. FOR THE DESTINATION\r
	RES	7,A		;    SKIP ON AIR-INDICATION\r
	LD	HL,SRCEBT	;\r
	CP	(HL)		;\r
	JR	NZ,S4		;    IF THE RIGHT SOURCE NO. THEN\r
	PUSH	BC		;    BEGIN\r
	LD	H,A		;\r
	LD	L,C		;\r
	CALL	CPSPEC		;      TEST IF CURRENT DESTINATION\r
	INC	HL		;      INTERLOCKS THE SOURCE\r
	BIT	0,(HL)		;\r
	JR	Z,S3		;      IF YES\r
	LD	HL,BYTE1	;      THEN\r
	SET	3,(HL)		;      SET BIT 3 IN CONDITION BYTE\r
S3:	POP	BC		;\r
	LD	HL,TABDST-1	;\r
	ADD	HL,BC		;\r
	LD	A,(HL)		;      MAKE DESTINATION NO. CONVERSION\r
	LD	HL,COUNT	;\r
	LD	E,(HL)		;      GET BYTE-DISPLACEMENT\r
	LD	D,0		;\r
	INC	(HL)		;      INCREMENT COUNT\r
	LD	HL,BUFFT	;\r
	ADD	HL,DE		;\r
	LD	(HL),A		;      LOAD DESTINATION NO. IN BUFFERAREA\r
S4:	DEC	C		;    END\r
	JR	NZ,S2		;  END-WHILE\r
	LD	A,0		;\r
	LD	HL,COUNT	;\r
	PUSH	HL		;\r
	LD	E,(HL)		;  GET BYTE-DISPLACEMENT\r
	LD	D,0		;\r
	INC	(HL)		;  INCREMENT COUNT\r
	LD	HL,BUFFT	;\r
	ADD	HL,DE		;\r
	LD	(HL),A		;  LOAD NULL-BYTE IN BUFFERAREA\r
	LD	HL,BYTE1	;\r
	LD	A,(CONDIT)	;\r
	BIT	7,A		;\r
	JR	Z,S5		;  IF MANUAL OPERATION IN PROGRESS THEN\r
	SET	1,(HL)		;  SET BIT 1 IN CONDITION BYTE\r
S5:	LD	A,(STATUS)	;\r
	BIT	1,A		;\r
	JR	Z,S6		;  IF COMPUTER OFF THEN\r
	SET	0,(HL)		;  SET BIT 0 IN CONDITION BYTE\r
S6:	POP	HL		;\r
	LD	E,(HL)		;  GET BYTE-DISPLACEMENT\r
	LD	D,0		;\r
	INC	(HL)		;  INCREMENT COUNT\r
	PUSH	HL		;\r
	LD	HL,BUFFT	;\r
	ADD	HL,DE		;\r
	LD	A,(BYTE1)	;\r
	LD	(HL),A		;  LOAD CONDITION BYTE IN BUFFERAREA\r
	POP	HL		;\r
	LD	A,(HL)		;  GET COUNT\r
	LD	(BYTES),A	;  LOAD EXTERNAL BYTECOUNT IN BUFFERAREA\r
	PUSH	IX		;\r
	LD	A,(IX-2)	;\r
	LD	(CHNUM),A	;  SAVE CR80 CHANNEL NUMBER\r
	CALL	MCR80		;  SEND MESSAGE TO CR80 IN QUESTION\r
	POP	IX		;\r
	JR	S7		;\r
;       -------------------------\r
NVALID:				;  IF SOURCE NO. IS NOT VALID THEN\r
	LD	A,3		;  BEGIN\r
	LD	(BYTES),A	;    LOAD EXTERNAL BYTECOUNT = 3 IN BUFFERAREA\r
	LD	A,0ECH		;\r
	LD	IY,BUFFT	;\r
	LD	(IY),A		;\r
	LD	A,00		;\r
	LD	(IY+1),A	;\r
	LD	(IY+2),A	;\r
	LD	HL,CONDIT	;\r
	BIT	7,(HL)		;\r
	JR	Z,N1		;    IF MANUAL OPERATION IN PROGRESS THEN\r
	SET	1,(IY+2)	;    SET BIT 1 IN CONDITION BYTE\r
N1:	LD	HL,STATUS	;\r
	BIT	1,(HL)		;\r
	JR	Z,N2		;    IF COMPUTER OFF THEN\r
	SET	0,(IY+2)	;    SET BIT 0 IN CONDITION BYTE\r
N2:	PUSH	IX		;\r
	LD	A,(IX-2)	;\r
	LD	(CHNUM),A	;    SAVE CR80 CHANNEL NUMBER\r
	CALL	MCR80		;    SEND MESSAGE TO CR80 IN QUESTION\r
	POP	IX		;  END\r
;       -------------------------\r
S7:	PUSH	IX		;\r
	POP	DE		;\r
	CALL	ID1		;  RETURN COMMAND BUFFER TO EMPTY BUFFER QUEUE\r
	JP	QPQH8		;END\r
\r
;------------------------------- ELSE -----------------------------------------\r
;------------------------------------------------------------------------------\r
QPD1:	LD	HL,QEMPTY	;BEGIN\r
	CALL	SUBDEQ		;\r
	JR	C,QPD2		;\r
	PUSH	IX		;\r
	CALL	SCOMMON		;\r
	EI			;\r
	POP	IX		;\r
	JR	QPD1		;\r
QPD2:	PUSH	DE		;\r
	POP	IY		;\r
				;\r
	LD	A,(IX+10)	;\r
	CP	61		;\r
	JR	NZ,QPD3		;\r
	LD	A,38		;  IF DESTINATION NO.= 61 THEN\r
	LD	(IX+10),A	;  REPLACE IT WITH 38\r
QPD3:	CP	62		;\r
	JR	NZ,QPD4		;\r
	LD	A,39		;  IF DESTINATION NO.= 62 THEN\r
	LD	(IX+10),A	;  REPLACE IT WITH 39\r
QPD4:	CP	63		;\r
	JR	NZ,QPD5		;\r
	LD	A,40		;  IF DESTINATION NO.= 63 THEN\r
	LD	(IX+10),A	;  REPLACE IT WITH 40\r
				;\r
QPD5:	CALL	DSTLOG		;  MAKE DESTINATION NO. CONVERSION\r
	JP	NZ,NVALID	;  IF NO VALID DESTIN.NO. GOTO NVALID\r
	LD	(IY+4),L	;\r
				;\r
	LD	A,00		;\r
	LD	(IY+2),A	;\r
	LD	(IY+3),A	;\r
				;\r
	PUSH	IY		;\r
	PUSH	IX		;\r
	POP	DE		;\r
	LD	A,(IX-2)	;\r
	LD	(CHNUM),A	;  SAVE CR80 CHANNEL NUMBER\r
	CALL	ID1		;  RETURN COMM. BUFFER TO EMPTY BUFFER QUEUE\r
	POP	DE		;\r
	LD	HL,QXI		;\r
	CALL	SUBENQ		;  SEND INTERNAL COMM.BUFFER TO QXI AND\r
	CALL	INVEST		;  INVESTIGATE DESTINATION STATUS\r
	LD	HL,QIX		;\r
	CALL	SUBDEQ		;  GET BUFFER FROM INVEST\r
	PUSH	DE		;\r
	POP	IX		;\r
				;\r
	LD	A,4		;\r
	LD	(BYTES),A	;  LOAD EXTERNAL BYTECOUNT = 4 IN BUFFERAREA\r
	LD	IY,BUFFT	;\r
	LD	A,0EAH		;\r
	LD	(IY),A		;  LOAD MESSAGE CODE IN BUFFERAREA\r
	LD	A,(IX+3)	;\r
	LD	(IY+1),A	;  LOAD SOURCE NO. IN BUFFERAREA\r
	LD	A,(IX+4)	;\r
	LD	(IY+2),A	;  LOAD DESTINATION NO. IN BUFFERAREA\r
	LD	A,00		;\r
	LD	(IY+3),A	;  CLEAR CONDITION BYTE IN BUFFERAREA\r
				;  BEGIN\r
	SET	6,(IY+3)	;    SET BIT 6(INVOKED BY REQUEST) IN COND.BYTE\r
	BIT	1,(IX+2)	;\r
	JR	Z,QPD6		;    IF DESTINATION IS ON AIR THEN\r
	SET	2,(IY+3)	;    SET BIT 2 IN CONDITION BYTE\r
QPD6:	BIT	4,(IX+2)	;\r
	JR	Z,QPD7		;    IF SOURCE(IF ANY) IS INTERLOCKED THEN\r
	SET	3,(IY+3)	;    SET BIT 3 IN CONDITION BYTE\r
QPD7:	BIT	2,(IX+2)	;\r
	JR	Z,QPD8		;    IF SOURCE(IF ANY) IS USED THEN\r
	SET	4,(IY+3)	;    SET BIT 4 IN CONDITION BYTE\r
QPD8:	BIT	0,(IX+2)	;\r
	JR	NZ,QPD9		;    IF DESTINATION OCCUPIED THEN\r
	SET	7,(IY+3)	;    SET BIT 7 IN CONDITION BYTE\r
QPD9:	LD	HL,CONDIT	;\r
	BIT	7,(HL)		;\r
	JR	Z,QPD10		;    IF MANUAL OPERATION IN PROGRESS THEN\r
	SET	1,(IY+3)	;    SET BIT 1 IN CONDITION BYTE\r
QPD10:	LD	HL,STATUS	;\r
	BIT	1,(HL)		;\r
	JR	Z,QPD11		;    IF COMPUTER OFF THEN\r
	SET	0,(IY+3)	;    SET BIT 0 IN CONDITION BYTE\r
				;  END\r
QPD11:	PUSH	IX		;\r
	CALL	MCR80		;  SEND MESSAGE TO CR80 IN QUESTION\r
	POP	DE		;\r
	LD	HL,QEMPTY	;\r
	CALL	SUBENQ		;  RETURN BUFFER TO EMPTY BUFFER QUEUE\r
	JP	QPQH8		;END\r
\r
STATEND	LD	A,0\r
	LD	HL,QXT+1\r
	CP	(HL)\r
	JP	NZ,ST02		;IF BUFFERS IN QXT GOTO ST02\r
	LD	HL,QKT+1\r
	CP	(HL)\r
	JP	NZ,ST02		;IF BUFFERS IN QKT GOTO ST02\r
	LD	HL,QET+1\r
	CP	(HL)\r
	JP	NZ,ST02		;IF BUFFERS IN QET GOTO ST02\r
	LD	HL,PQH8+1\r
	CP	(HL)\r
	JP	NZ,ST02		;IF BUFFERS IN PQH8 GOTO ST02\r
				;ELSE\r
	JP	ST01		;PASSIVATE STATUS TRANSMITTING PROCESS\r
\r
*******************************************************************************\r
*                      CR80  MESSAGE  SUBROUTINE                              *\r
*******************************************************************************\r
\r
MCR80:	LD	HL,TABNO+2\r
	LD	A,(CHNUM)\r
	LD	BC,3\r
	CPDR\r
	RET	NZ\r
	SLA	C\r
	LD	HL,TABOG\r
	ADD	HL,BC\r
	LD	E,(HL)\r
	INC	HL\r
	LD	D,(HL)\r
	EX	DE,HL\r
MCR1:	PUSH	HL\r
	CALL	BUFGET		;FETCH BUFFER\r
	JR	C,MCR2\r
	CALL	SCOMMON\r
	EI\r
	POP	HL\r
	JR	MCR1\r
MCR2:	POP	HL\r
	CALL	MCSEND		;TRANSMIT BUFFER TO CR80\r
	RET\r
\r
BUFGET:	JP	(HL)\r
\r
TABNO:	DB	2\r
	DB	3\r
	DB	4\r
\r
TABOG:	DW	OG2\r
	DW	OG3\r
	DW	OG4\r
\r
;--------------------------------------------------------------------\r
MCSEND:	PUSH	DE		;BEGIN\r
	LD	HL,2		;\r
	ADD	HL,DE		;\r
	LD	A,(BYTES)	;\r
	LD	(HL),A		;  UPDATE BYTECOUNT\r
	LD	HL,8		;\r
	ADD	HL,DE		;\r
	LD	DE,BUFFT	;\r
	EX	DE,HL		;\r
	LD	B,0		;\r
	LD	C,A		;\r
	LDIR			;  FILL BUFFER\r
	POP	DE		;\r
	CALL	OD1		;  TRANSMIT BUFFER TO CR80\r
				;END\r
	RET\r
\r
\r
\r
OG2:	OGEPA1	2\r
	RET\r
\r
OG3:	OGEPA1	3\r
	RET\r
\r
OG4:	OGEPA1	4\r
	RET\r
\r
\r
*******************************************************************************\r
\r
	DSEG\r
CHNUM	DS	1\r
	DS	32\r
STAC08:\r
	END\r