DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

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

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦6924be3f3⟧ TextFile

    Length: 56230 (0xdba6)
    Types: TextFile
    Names: »DDP.MAC«

Derivation

└─⟦b678e5579⟧ Bits:30005502 8" CR80 Floppy CR80FD_0031 ( TELECINE BACKUP )
└─⟦b678e5579⟧ Intel_ISIS_II
    └─ ⟦this⟧ »DDP.MAC« 

TextFile

;******************************************************************************\r
;*                                                                            *\r
;* D O R A     A P P L I C A T I O N     S / W                                *\r
;*                                                                            *\r
;* DEVICE: TELECINE 1 (I/F 105)                                               *\r
;*                                                                            *\r
;* MODULE: DISTRIBUTION & DELEGATION PROCESS                                  *\r
;*                                                                            *\r
;******************************************************************************\r
\r
;***************************************************\r
;*                                                 *\r
;*        DISTRIBUTION AND DELEGATION PROCESS      *\r
;*          DDPROC MACRO, VERSION 801215/CGR       *\r
;*					           *\r
;***************************************************\r
;\r
;\r
;\r
	NLIST	S\r
;\r
DDPROC	MACRO	#DEVNO,#INTIME,#OUTTIM,#RAM1K\r
;\r
	NLIST	M\r
;\r
;>>>>>>>>>>>>>  D E F I N E     F L A G S  <<<<<<<<<<<<<<<<\r
;\r
;\r
F11:	DEFL	0	;VDU-D\r
F12:	DEFL	0	;VDU-O\r
F13:	DEFL	0	;VDU-A\r
F2:	DEFL	0	;PRINTER\r
F3:	DEFL	0	;RCDP\r
F4:	DEFL	0	;RCP\r
F41:	DEFL	0	;RCP(M I)\r
F42:	DEFL	0	;RCP(M II)\r
F43:	DEFL	0	;RCP(VTR)\r
F5:	DEFL	0	;MATRIX\r
F61:	DEFL	0	;CNR MIXER\r
F62:	DEFL	0	;ST5 MIXER\r
F7:	DEFL	0	;PREEDIT (VCR/VCR)\r
F8:	DEFL	0	;RCP CONTROLLED DEVICE\r
F81:	DEFL	0	;VTR\r
F811:	DEFL	0	;VTR6-8\r
F812:	DEFL	0	;VTR7\r
F813:	DEFL	0	;VTR8\r
F82:	DEFL	0	;VCR\r
F83:	DEFL	0	;DIA\r
F84:	DEFL	0	;TELECINE\r
F85:	DEFL	0	;KGEN\r
F86:	DEFL	0	;ATR\r
F87:	DEFL	0	;SLOMO\r
;\r
	IF	#DEVNO.EQ.4\r
F3:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.GT.19\r
	IF	#DEVNO.LT.27\r
F8:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.GT.19\r
	IF	#DEVNO.LT.22\r
F83:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.EQ.22\r
F87:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.GT.22\r
	IF	#DEVNO.LT.25\r
F82:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.GT.24\r
	IF	#DEVNO.LT.27\r
F86:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.EQ.28\r
F2:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.GT.29\r
	IF	#DEVNO.LT.32\r
F11:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.GT.31\r
	IF	#DEVNO.LT.34\r
F13:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.EQ.34\r
F5:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.35\r
F4:	DEFL	1\r
F43:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.36\r
F4:	DEFL	1\r
F41:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.37\r
F4:	DEFL	1\r
F42:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.GT.39\r
	IF	#DEVNO.LT.47\r
F7:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.GT.49\r
	IF	#DEVNO.LT.52\r
F13:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.EQ.52\r
F12:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.55\r
F2:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.60\r
F13:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.62\r
F4:	DEFL	1\r
F43:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.63\r
F4:	DEFL	1\r
F41:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.64\r
F4:	DEFL	1\r
F42:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.70\r
F12:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.72\r
F61:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.74\r
F4:	DEFL	1\r
F43:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.75\r
F4:	DEFL	1\r
F41:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.76\r
F4:	DEFL	1\r
F42:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.80\r
F12:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.82\r
F61:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.84\r
F4:	DEFL	1\r
F43:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.85\r
F4:	DEFL	1\r
F41:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.86\r
F4:	DEFL	1\r
F42:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.GT.89\r
	IF	#DEVNO.LT.95\r
F13:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.EQ.96\r
F62:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.97\r
F4:	DEFL	1\r
F43:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.98\r
F4:	DEFL	1\r
F41:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.99\r
F4:	DEFL	1\r
F42:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.GT.104\r
	IF	#DEVNO.LT.118\r
F8:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.GT.104\r
	IF	#DEVNO.LT.107\r
F84:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.GT.106\r
	IF	#DEVNO.LT.109\r
F85:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	IF	#DEVNO.GT.109\r
	IF	#DEVNO.LT.118\r
F81:	DEFL	1\r
	IF	#DEVNO.GT.114\r
F811:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.116\r
F812:	DEFL	1\r
	ENDIF\r
	IF	#DEVNO.EQ.117\r
F813:	DEFL	1\r
	ENDIF\r
	ENDIF\r
	ENDIF\r
	LIST	M\r
;\r
;\r
	NLIST	S\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r
	LIST	S		;+++++ #VDU, PRINTER & PREEDIT\r
BFSIZE:	DEFL	16		;\r
	NLIST	S\r
	ENDIF\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r
	LIST	S		;+++++ VDU, PRINTER OR PREEDIT\r
BFSIZE:	DEFL	128		;\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;\r
;>>>>>>>>>>>>>>  E N D    O F    D E F I N E     F L A G S  <<<<<<<<<<<<<<<<<\r
;\r
;\r
;\r
	DSEG\r
;\r
;\r
;>>>>>>>>>>>>>>>>>>>>>>>>>  R A M    M A P  <<<<<<<<<<<<<<<<<<<<<<<<<<\r
;\r
;\r
	NLIST	S\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r
	LIST	S	;+++++ VDU, PRINTER OR PREEDIT\r
\r
\r
	ORG	0\r
SYSRAM:	DS	64		;PROCESS 1 STACK\r
PRC1SP:\r
CR80NO:	DS	1		;REGISTERS FOR PRC. 1 & 4 (DORAGEN.)\r
PANCO:		DS	1\r
PANCOM:	DS	1\r
ECOND1:	DS	1\r
ECOND2:	DS	1\r
ERRPAT:	DS	1\r
LCRID:	DS	1\r
MCRID:	DS	1\r
	DS	1\r
	DS	1\r
CR80SS:	DS	3\r
SPARE:	DS	163		;SPARE/SYSTEM STACK\r
INISP:\r
	DS	16		;OP.SYS. WORKSPACE\r
;\r
;\r
QHEADS:	DS	1		;START OF QHEAD ADDRESSES\r
QUEUE1:	DS	NOCH*5		;START OF QUEUES\r
SPARE1:	DS	100H-1-NOCH*5	;USER RAM\r
;\r
;\r
PDESC1:	DS	100H		;PROCESS DESCRIPTORS 0-15\r
;\r
	NLIST	S\r
	IF	S.LT.17\r
	LIST	S\r
	PUBLIC	SPARE2\r
SPARE2:	DS	100H\r
	NLIST	S\r
	ENDIF\r
	IF	S.GT.16\r
	LIST	S\r
PDESC2:	DS	100H		;PROCESS DESCRIPTORS 16-31\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;\r
	NLIST	S\r
	IF	#RAM1K.GT.0\r
	LIST	S\r
	ORG	800H\r
	NLIST	S\r
	ENDIF\r
	IF	NOBUF.LT.8\r
	LIST	S\r
BUFRAM:	DS	NOBUF*90H\r
	NLIST	S\r
	ENDIF\r
	IF	NOBUF.GT.7\r
	LIST	S\r
BUFRAM:	DS	7*90H\r
	DS	10H		;SPARE\r
	NLIST	S\r
	IF	#RAM1K.GT.1\r
	LIST	S\r
	ORG	1000H\r
	NLIST	S\r
	ENDIF\r
	IF	NOBUF.LT.15\r
	LIST	S\r
	DS	(NOBUF-7)*90H\r
	NLIST	S\r
	ENDIF\r
	IF	NOBUF.GT.14\r
	LIST	S\r
	DS	7*90H\r
	DS	10H		;SPARE\r
	NLIST	S\r
	IF	#RAM1K.GT.2\r
	LIST	S\r
	ORG	1800H\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	DS	(NOBUF-14)*90H\r
	ENDIF\r
	ENDIF\r
	ENDIF\r
;\r
;\r
	NLIST	S\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r
	LIST	S	;+++++ #VDU, PRINTER & PREEDIT\r
\r
\r
	ORG	0\r
SYSRAM:	DS	64		;PROCESS 1 STACK\r
PRC1SP:\r
CR80NO:	DS	1		;REGISTERS FOR PRC. 1 & 4 (DORAGEN.)\r
PANCO:		DS	1\r
PANCOM:	DS	1\r
ECOND1:	DS	1\r
ECOND2:	DS	1\r
ERRPAT:	DS	1\r
LCRID:	DS	1\r
MCRID:	DS	1\r
	DS	1\r
	DS	1\r
CR80SS:	DS	3\r
SPARE:	DS	163		;SPARE/SYSTEM STACK\r
INISP:\r
	DS	16		;OP.SYS. WORKSPACE\r
;\r
;\r
QHEADS:	DS	1		;START OF QHEAD ADDRESSES\r
QUEUE1:	DS	NOCH*5		;START OF QUEUES\r
SPARE1:	DS	100H-1-NOCH*5	;USER RAM\r
;\r
;\r
PDESC1:	DS	100H		;PROCESS DESCRIPTORS 0-15\r
;\r
	NLIST	S\r
	IF	S.LT.17\r
	LIST	S\r
	PUBLIC	SPARE2\r
SPARE2:	DS	100H\r
	NLIST	S\r
	ENDIF\r
	IF	S.GT.16\r
	LIST	S\r
PDESC2:	DS	100H		;PROCESS DESCRIPTORS 16-31\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;\r
	NLIST	S\r
	IF	#RAM1K.GT.0\r
	LIST	S\r
	ORG	800H\r
	NLIST	S\r
	ENDIF\r
	IF	NOBUF.LT.33\r
	LIST	S\r
BUFRAM:	DS	NOBUF*20H\r
	NLIST	S\r
	ENDIF\r
BUFRAM:	IF	NOBUF.GT.32\r
	LIST	S\r
	DS	32*20H\r
	NLIST	S\r
	IF	#RAM1K.GT.1\r
	LIST	S\r
	ORG	1000H\r
	NLIST	S\r
	ENDIF\r
	IF	NOBUF.LT.65\r
	LIST	S\r
	DS	(NOBUF-32)*20H\r
	NLIST	S\r
	ENDIF\r
	IF	NOBUF.GT.64\r
	LIST	S\r
	DS	32*20H\r
	NLIST	S\r
	IF	#RAM1K.GT.2\r
	LIST	S\r
	ORG	1800H\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	DS	(NOBUF-64)*20H\r
	NLIST	S\r
	ENDIF\r
	ENDIF\r
	ENDIF\r
;\r
	LIST	S\r
;\r
;>>>>>>>>>>>>>>>>>>>>  E N D    O F    R A M    M A P  <<<<<<<<<<<<<<<<<<<<<\r
;\r
;\r
;\r
;\r
	CSEG\r
;\r
;>>>>>>>>>>>>  L I S T     O F     I N I T I A L     C R I D ' S  <<<<<<<<<<<<<\r
;\r
CRIDSP:	DB	22H\r
	DB	#DEVNO\r
	DB	33H\r
	DB	#DEVNO\r
	DB	44H\r
	DB	#DEVNO\r
	NLIST	S\r
	IF	(F4.OR.F8).EQ.1\r
	LIST	S		;+++++RCP OR RCP CONTROLLED DEVICE\r
	DB	55H\r
	DB	#DEVNO\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.1\r
	LIST	S		;+++++RCDP\r
	DW	4B5FH\r
	DW	4C5FH\r
	DW	4A5FH\r
	DW	555FH\r
	DW	565FH\r
	DW	545FH\r
	DW	245FH\r
	DW	255FH\r
	DW	235FH\r
	DW	625FH\r
	DW	635FH\r
	DW	615FH\r
	DW	3F5FH\r
	DW	405FH\r
	DW	3E5FH\r
	DW	6E5FH\r
	DW	6F5FH\r
	DW	705FH\r
	DW	715FH\r
	DW	725FH\r
	DW	735FH\r
	DW	745FH\r
	DW	755FH\r
	DW	175FH\r
	DW	185FH\r
	DW	195FH\r
	DW	1A5FH\r
	DW	695FH\r
	DW	6A5FH\r
	DW	6B5FH\r
	DW	6C5FH\r
	DW	145FH\r
	DW	155FH\r
	DW	165FH\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.0\r
	LIST	S		;+++++#RCDP\r
	DW	0\r
	DW	0\r
	DW	0\r
	DW	0\r
	DW	0\r
	DW	0\r
	DW	0\r
	DW	0\r
	DW	0\r
	NLIST	S\r
	ENDIF\r
;\r
	IF	F85.EQ.1\r
	LIST	S	;+++++KGEN\r
IDLSB:	DEFL	6FH\r
	NLIST	S\r
	ENDIF\r
	IF	F84.EQ.1\r
	LIST	S	;+++++TELECINE\r
IDLSB:	DEFL	7FH\r
IDLSBM:	DEFL	8FH\r
	NLIST	S\r
	ENDIF\r
	IF	F81.EQ.1\r
	LIST	S	;+++++VTR\r
IDLSB:	DEFL	6FH\r
IDLSB2:	DEFL	9FH\r
IDLSB3:	DEFL	0CFH\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++RCP\r
IDLSB:	DEFL	6FH\r
IDLSBM:	DEFL	7FH\r
	NLIST	S\r
	ENDIF\r
	IF	F83.EQ.1\r
	LIST	S	;+++++DIA\r
IDLSB:	DEFL	9FH\r
	NLIST	S\r
	ENDIF\r
	IF	(F86.OR.F87).EQ.1\r
	LIST	S	;+++++ATR OR SLOMO\r
IDLSB:	DEFL	0AFH\r
	NLIST	S\r
	ENDIF\r
	IF	F82.EQ.1\r
	LIST	S	;+++++VCR\r
IDLSB:	DEFL	0BFH\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;\r
;>>>>>>>>>>>  E N D     O F     C R I D - L I S T  <<<<<<<<<<<<<\r
;\r
;\r
;\r
	NLIST	S\r
	IF	F4.EQ.1\r
	LIST	S	;+++++RCP\r
;\r
;>>>>>>>>>>>  D E L E G A T I O N     T A B L E S  <<<<<<<<<<<<<\r
;\r
	NLIST	S\r
	IF	F41.EQ.1\r
	LIST	S	;+++++RCP(M I)\r
TABL4:	DB	3AH\r
	DB	31H\r
	DB	2AH\r
	DB	1AH\r
	DB	22H\r
TABL41:	DB	6\r
	DB	10\r
	DB	9\r
	DB	7\r
	DB	8\r
NOPAN:	DEFL	5\r
	NLIST	S\r
	ENDIF\r
	IF	F42.EQ.1\r
	LIST	S	;+++++RCP(M II)\r
TABL4:	DB	29H\r
	DB	39H\r
	DB	11H\r
	DB	09H\r
	DB	19H\r
	DB	21H\r
TABL41:	DB	9\r
	DB	6\r
	DB	10\r
	DB	11\r
	DB	7\r
	DB	8\r
NOPAN:	DEFL	6\r
	NLIST	S\r
	ENDIF\r
	IF	F43.EQ.1\r
	LIST	S	;+++++RCP(VTR)\r
TABL4:	DB	01H\r
	DB	02H\r
	DB	03H\r
TABL41:	DB	6\r
	DB	9\r
	DB	12\r
NOPAN:	DEFL	3\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;>>>>>>>>>>  E N D     O F     D E L E G A T I O N     T A B L E S  <<<<<<<<<<<\r
;\r
;\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;\r
;\r
GENINI:\r
;\r
;>>>>>>>>>  C R E A T E     G E N E R A L     P R O C E S S E S  <<<<<<<<<<<<\r
;\r
	CREATE	S,0,TQMACT	;CREATE TIMER PROCESS (0)\r
	CREATE	S,4,EHINI	;CREATE ERROR HANDLING PROCESS (4)\r
;\r
;>>>>>>>  E N D     O F     G E N .     P R O C E S S     C R E A T I O N  <<<<<<<\r
;\r
;\r
;\r
;>>>>>>  I N I T I A L I Z E    P. D.    T I M E R S  <<<<<<<<<\r
;\r
;\r
	LD	E,20H\r
	LD	C,#INTIME.AND.7FH\r
	LD	B,0\r
	LD	D,NOCH-2\r
	LD	A,6\r
TLOOP1:	PUSH	AF\r
	PUSH	BC\r
	PUSH	DE\r
	LD	D,0\r
TL1:	CALL	COMM\r
	BIT	7,A\r
	JP	NZ,TL1\r
TLOOP2:	LD	A,80H\r
	CALL	COMM\r
	BIT	7,A\r
	JP	NZ,TLOOP2\r
	POP	DE\r
	POP	BC\r
	LD	A,10H\r
	ADD	A,E\r
	LD	E,A\r
	POP	AF\r
	DEC	D\r
	JP	NZ,TLOOP1\r
;\r
;\r
	LD	E,20H\r
	LD	C,#OUTTIM.AND.7FH\r
	LD	B,0\r
	LD	D,NOCH-2\r
	LD	A,7\r
TLOOP3:	PUSH	AF\r
	PUSH	BC\r
	PUSH	DE\r
	LD	D,0\r
TL3:	CALL	COMM\r
	BIT	7,A\r
	JP	NZ,TL3\r
TLOOP4:	LD	A,80H\r
	CALL	COMM\r
	BIT	7,A\r
	JP	NZ,TLOOP4\r
	POP	DE\r
	POP	BC\r
	LD	A,10H\r
	ADD	A,E\r
	LD	E,A\r
	POP	AF\r
	DEC	D\r
	JP	NZ,TLOOP3\r
;\r
;\r
;>>>>>>>>>>>>>>  E N D    O F    P . D .    T I M E R    I N I T .  <<<<<<<<<<<<<<\r
;\r
;\r
;\r
;>>>>>>>>>>  P R E S E T    B U F F E R H E A D S  <<<<<<<<<<<<\r
;\r
;\r
	LD	IX,BUFRAM+2\r
	LD	IY,CHSPEC\r
	LD	C,0\r
	LD	L,2\r
	EXX\r
	LD	L,2\r
	EXX\r
BLOOP1:	LD	B,(IY+0)\r
				;\r
				;INGOING BUFFERS\r
				;\r
BLOOP2:	LD	(IX-2),L	;LOAD CHANNEL NO.\r
	PUSH	IX\r
	LD	DE,10\r
	ADD	IX,DE\r
	PUSH	IX\r
	POP	DE\r
	POP	IX\r
	LD	(IX+4),E	;LOAD STARTADDRESS OF BUFFERDATA\r
	LD	(IX+5),D\r
	NLIST	S\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r
	LIST	S		;+++++ #VDU, PRINTER & PREEDIT\r
	LD	(IX+8),16	;LOAD BUFFERSIZE\r
	LD	(IX+9),0\r
	LD	DE,20H\r
	ADD	IX,DE\r
	PUSH	HL\r
	PUSH	IX\r
	POP	DE\r
	LD	HL,BUFRAM+#RAM1K*800H\r
	NLIST	S\r
	ENDIF\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r
	LIST	S		;+++++ VDU, PRINTER OR PREEDIT\r
	LD	(IX+8),128	;LOAD BUFFERSIZE\r
	LD	(IX+9),0\r
	LD	DE,90H\r
	ADD	IX,DE\r
	PUSH	HL\r
	PUSH	IX\r
	POP	DE\r
	LD	A,E\r
	ADD	A,20H\r
	JP	NC,DM1A\r
	LD	DE,10H\r
	ADD	IX,DE\r
	PUSH	IX\r
	POP	DE\r
DM1A:	LD	HL,BUFRAM+#RAM1K*800H\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	AND	A\r
	SBC	HL,DE\r
	POP	HL\r
	JP	M,DM2\r
	LD	A,D\r
	AND	0FH\r
	CP	8\r
	JP	Z,DM1\r
	CP	0\r
	JP	NZ,DM2\r
DM1:	LD	DE,400H\r
	ADD	IX,DE\r
DM2:	INC	C\r
	DEC	B\r
	JP	NZ,BLOOP2\r
				;\r
				;OUTGOING BUFFERS\r
				;\r
	EXX\r
	INC	IY\r
	LD	B,(IY+0)\r
BLOOP3:	LD	(IX-2),L	;LOAD CHANNEL NO.\r
	PUSH	IX\r
	LD	DE,10\r
	ADD	IX,DE\r
	PUSH	IX\r
	POP	DE\r
	POP	IX\r
	LD	(IX+4),E	;LOAD STARTADDRESS OF BUFFERDATA\r
	LD	(IX+5),D\r
	NLIST	S\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r
	LIST	S		;+++++ # VDU, PRINTER & PREEDIT\r
	LD	(IX+8),16	;LOAD BUFFERSIZE\r
	LD	(IX+9),0\r
	LD	DE,20H\r
	ADD	IX,DE\r
	PUSH	HL\r
	PUSH	IX\r
	POP	DE\r
	LD	HL,BUFRAM+#RAM1K*800H\r
	NLIST	S\r
	ENDIF\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r
	LIST	S		;+++++ VDU, PRINTER OR PREEDIT\r
	LD	(IX+8),128	;LOAD BUFFERSIZE\r
	LD	(IX+9),0\r
	LD	DE,90H\r
	ADD	IX,DE\r
	PUSH	HL\r
	PUSH	IX\r
	POP	DE\r
	LD	A,E\r
	ADD	A,20H\r
	JP	NC,DM3A\r
	LD	DE,10H\r
	ADD	IX,DE\r
	PUSH	IX\r
	POP	DE\r
DM3A:	LD	HL,BUFRAM+#RAM1K*800H\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	AND	A\r
	SBC	HL,DE\r
	POP	HL\r
	JP	M,DM4\r
	LD	A,D\r
	AND	0FH\r
	CP	8\r
	JP	Z,DM3\r
	CP	0\r
	JP	NZ,DM4\r
DM3:	LD	DE,400H\r
	ADD	IX,DE\r
DM4:	EXX\r
	INC	C\r
	EXX\r
	DEC	B\r
	JP	NZ,BLOOP3\r
	INC	L\r
	EXX\r
	INC	L\r
	INC	IY\r
	LD	A,NOBUF\r
	CP	C\r
	JP	NZ,BLOOP1\r
;\r
;\r
;>>>>>>>>  E N D    O F    B U F F E R H E A D    P R E S E T  <<<<<<<<<<<\r
;\r
;\r
;\r
;>>>>>>>>>>>>>>>>>  B U F F E R    C H A I N I N G  <<<<<<<<<<<<<<<<<\r
;\r
;\r
	LD	IX,CHSPEC+1		;\r
	LD	DE,BUFRAM+2		;\r
	LD	A,2			;\r
	LD	B,NOBUF			;\r
	PUSH	AF			;\r
CLOOP1:	LD	C,(IX+0)		;OUTGOING BUFFERS\r
CLOOP2:	POP	AF			;\r
	PUSH	AF			;\r
	PUSH	BC			;\r
	PUSH	DE			;\r
	ODEPAI				;\r
	POP	DE			;\r
	POP	BC			;\r
	NLIST	S\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r
	LIST	S		;+++++ #VDU, PRINTER & PREEDIT\r
	LD	HL,20H			;\r
	ADD	HL,DE			;\r
	EX	DE,HL			;\r
	LD	HL,BUFRAM+#RAM1K*800H	;\r
	AND	A			;\r
	SBC	HL,DE			;\r
	JP	M,DM6			;\r
	LD	A,D			;\r
	NLIST	S\r
	ENDIF\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r
	LIST	S		;+++++ VDU, PRINTER OR PREEDIT\r
	LD	HL,90H			;\r
	ADD	HL,DE			;\r
	LD	A,L			;\r
	ADD	A,20H			;\r
	JP	NC,DM5A			;\r
	LD	DE,10H			;\r
	ADD	HL,DE			;\r
DM5A:	EX	DE,HL			;\r
	LD	HL,BUFRAM+#RAM1K*800H	;\r
	AND	A			;\r
	SBC	HL,DE			;\r
	JP	M,DM6			;\r
	LD	A,D			;\r
	NLIST	S\r
	ENDIF\r
	LIST	S			;\r
	AND	0FH			;\r
	CP	8			;\r
	JP	Z,DM5			;\r
	CP	0			;\r
	JP	NZ,DM6			;\r
DM5:	LD	HL,400H			;\r
	ADD	HL,DE			;\r
	EX	DE,HL			;\r
DM6:	DEC	B			;\r
	DEC	C			;\r
	JP	NZ,CLOOP2		;\r
;\r
;\r
	DEC	IX			;\r
CLOOP3:	LD	C,(IX+0)		;\r
	POP	AF			;\r
CLOOP4:	PUSH	AF			;\r
	PUSH	BC			;\r
	PUSH	DE			;\r
	CALL	IDEPA			;\r
	POP	DE			;\r
	POP	BC			;\r
	NLIST	S\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r
	LIST	S		;+++++ #VDU, PRINTER & PREEDIT\r
	LD	HL,20H			;\r
	ADD	HL,DE			;\r
	EX	DE,HL			;\r
	LD	HL,BUFRAM+#RAM1K*800H	;\r
	AND	A			;\r
	SBC	HL,DE			;\r
	JP	M,DM8			;\r
	LD	A,D			;\r
	NLIST	S\r
	ENDIF\r
	IF	(F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r
	LIST	S		;+++++ VDU, PRINTER OR PREEDIT\r
	LD	HL,90H			;\r
	ADD	HL,DE			;\r
	LD	A,L			;\r
	ADD	A,20H			;\r
	JP	NC,DM7A			;\r
	LD	DE,10H			;\r
	ADD	HL,DE			;\r
DM7A:	EX	DE,HL			;\r
	LD	HL,BUFRAM+#RAM1K*800H	;\r
	AND	A			;\r
	SBC	HL,DE			;\r
	JP	M,DM8			;\r
	LD	A,D			;\r
	NLIST	S\r
	ENDIF\r
	LIST	S			;\r
	AND	0FH			;\r
	CP	8			;\r
	JP	Z,DM7			;\r
	CP	0			;\r
	JP	NZ,DM8			;\r
DM7:	LD	HL,400H			;\r
	ADD	HL,DE			;\r
	EX	DE,HL			;\r
DM8:	POP	AF			;\r
	DEC	B			;\r
	DEC	C			;\r
	JP	NZ,CLOOP4		;\r
	INC	IX			;\r
	INC	IX			;\r
	INC	IX			;\r
	INC	A			;\r
	PUSH	AF			;\r
	LD	A,0			;\r
	CP	B			;\r
	JP	NZ,CLOOP1		;\r
	POP	AF			;\r
;\r
;\r
;\r
;\r
;>>>>>>>>>>>  E N D    O F    B U F F E R    C H A I N I N G  <<<<<<<<<<<\r
;\r
;\r
;\r
;\r
;>>>>>>>>>>>>>  C H A N N E L     P R E S E T  <<<<<<<<<<<<<<<<<\r
;\r
	NLIST	S\r
	IF	(F12.OR.F61.OR.F7.OR.F8).EQ.1\r
	LIST	S		;+++++VDU-O, CNR-MIXER,\r
				;PREEDIT OR RCP CONTROLLED DEVICE\r
	LD	A,2		;SET CR80-CHANNEL TO 2.\r
	LD	(CR80NO),A\r
	NLIST	S\r
	ENDIF\r
	IF	(F13.OR.F62).EQ.1\r
	LIST	S		;+++++VDU-A OR ST5-MIXER\r
	LD	A,3		;SET CR80-CHANNEL TO 3.\r
	LD	(CR80NO),A\r
	NLIST	S\r
	ENDIF\r
	IF	(F11.OR.F2.OR.F4).EQ.1\r
	LIST	S		;+++++VDU-D, PRINTER OR RCP\r
	LD	A,4		;SET CR80 CHANNEL TO 4.\r
	LD	(CR80NO),A\r
	NLIST	S\r
	ENDIF\r
	IF	(F3.OR.F4.OR.F8).EQ.0\r
	LIST	S		;+++++#RCDP, RCP & RCP CONTROLLED DEVICE\r
	LD	D,3\r
	NLIST	S\r
	ENDIF\r
	IF	(F4.OR.F8).EQ.1\r
	LIST	S		;+++++RCP OR RCP CONTROLLED DEVICE\r
	LD	D,4\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.1\r
	LIST	S		;+++++RCDP\r
	LD	D,37\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	LD	A,3\r
	LD	E,20H\r
	LD	HL,CRIDSP\r
LP1:	LD	C,(HL)\r
	INC	HL\r
	LD	B,(HL)\r
	PUSH	AF\r
	PUSH	HL\r
	PUSH	DE\r
	LD	D,0\r
LP2A:	CALL	COMM\r
	BIT	7,A\r
	JP	NZ,LP2A\r
LP2:	LD	A,80H\r
	CALL	COMM\r
	BIT	7,A\r
	JP	NZ,LP2\r
	POP	DE\r
	LD	A,10H\r
	ADD	A,E\r
	LD	E,A\r
	POP	HL\r
	POP	AF\r
	INC	HL\r
	DEC	D\r
	JP	NZ,LP1\r
;\r
;\r
;\r
;>>>>>>>>>>  E N D    O F    C H A N N E L    P R E S E T  <<<<<<<<<<<<\r
;\r
;\r
;\r
;*********** 'RESTART INDICATION' TRANSMIT ROUTINE **********\r
;\r
	LD	A,2		;SEND RESTART IND. TO CR80 (AND RCDP)\r
RSTIND:	PUSH	AF\r
	OGEPAI			;\r
	JP	NC,RSTM1 	;\r
	PUSH	DE		;\r
	POP	IX		;\r
	LD	(IX+2),1	;LOAD BYTECOUNT\r
	LD	(IX+10),0EFH	;LOAD MESSAGECODE\r
	POP	AF\r
	PUSH	AF		;\r
	CALL	ODEPA		;\r
RSTM1:	POP	AF		;\r
	INC	A		;\r
	NLIST	S\r
	IF	(F4.OR.F8).EQ.0\r
	LIST	S		;+++++ # RCP AND # RCP CONTROLLED DEVICE\r
	CP	5		;\r
	NLIST	S\r
	ENDIF\r
	IF	(F4.OR.F8).EQ.1\r
	LIST	S		;+++++ RCP OR RCP CONTROLLED DEVICE\r
	CP	6		;\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	JP	NZ,RSTIND	;\r
;\r
;\r
;\r
;********** END OF 'RESTART INDICATION' TRANSMIT ROUTINE **********\r
;\r
;\r
;********** INITIALIZE USER & GEN. DORA H/W *****************\r
;\r
	CALL HWINIT\r
;\r
;********** END OF H/W INITIALIZATION *************\r
;\r
;\r
;********* S C A N     R O U T I N E     S T A R T *********************\r
;\r
DDBEG:	LD	SP,PRC1SP\r
DDM1:	CALL	SCOMMON		;RETURN TO SCHEDULER\r
	EI\r
	LD	L,NOCH-2	;SCANNING RESTART\r
	LD	A,2\r
	PUSH	AF\r
	PUSH	HL\r
	IGEPA1			;DEQUEUE NEXT CHANNEL QUEUE\r
	JP	NC,DDM2		;IF CHANNEL WAS NOT EMPTY THEN\r
				;BEGIN\r
DDM3:	POP	HL\r
	LD	L,NOCH-2\r
	PUSH	HL\r
	CALL	DIST		;   DO 'DISTRIBUTE ROUTINE'\r
	CALL	SCOMMON		;   RETURN TO SCHEDULER\r
	EI\r
				;ENDIF\r
DDM2:	POP	HL		;REPEAT UNTIL A NOT EMPTY QUEUE HAS BEEN\r
				;	      FOUND OR SCAN IS COMPLETED.\r
				;BEGIN\r
	POP	AF\r
	DEC	L		;   TEST IF SCAN IS COMPLETED\r
	JP	Z,DDM1		;   IF YES THEN GOTO DDM1 (SCANNING RESTART)\r
				;   ELSE\r
				;      BEGIN\r
	INC	A		;      TEST IF 'NO. OF CHANNELS' LIMIT IS\r
	CP	NOCH		;      EXCEEDED.\r
	JP	M,DDM4		;      IF YES THEN\r
				;	  BEGIN\r
	LD	A,2		;         LOAD CHANNEL 2\r
				;         ENDIF\r
DDM4:	PUSH	AF\r
	PUSH	HL\r
	IGEPA1			;      DEQUEUE NEXT CHANNEL QUEUE\r
	JP	NC,DDM2		;      IF CHANNEL WAS NOT EMPTY THEN GOTO DDM3\r
				;      (DO DISTRIBUTE ROUTINE)\r
				;      END\r
	JP	DDM3		;END REPEAT\r
\r
**************** E N D    O F    S C A N    R O U T I N E ***************\r
;\r
\r
********** S T A R T    O F    D I S T R I B U T E    R O U T I N E *******\r
\r
DIST:	LD	HL,2		;\r
	ADD	HL,DE		;\r
	LD	A,(HL)		;\r
	CP	0		;TEST IF BUFFER IS VALID (BYTECOUNT # 0)\r
	JP	NZ,DDM5A	;IF YES THEN\r
	JP	DDM5		;EXIT\r
DDM5A:	PUSH	DE		;ELSE\r
	LD	DE,6		;\r
	ADD	HL,DE		;\r
	POP	DE		;\r
        LD      A,(HL)		;GET MESSAGE CODE FROM BUFFER\r
				;ENDIF\r
	LD      HL,TABL1        ;FIND MESSAGE/PANEL CODE IN TABL1\r
        LD      BC,NUMMES\r
        CPIR\r
        JP      Z,DDM6          ;TEST IF MESSAGE/PANEL CODE WAS ILLEGAL\r
				;IF YES THEN\r
				;BEGIN\r
DDM5:	IDEPA1	Y,BFSIZE	;   ENQUEUE Q-ELEMENT IN EMP.BUF.QUEUE\r
	RET			;   RETURN TO SCAN ROUTINE\r
				;END\r
				;ELSE\r
				;BEGIN\r
				;FIND PROCESS NO./ROUTINE ADDRESS IN TABL1\r
DDM6:   LD      HL,TABL1+NUMMES*3-1;\r
        SLA     C\r
        AND     0FFH\r
        SBC     HL,BC\r
	LD      A,(HL)\r
        AND     0FFH            ;TEST IF PROCESS OR ROUTINE.\r
        JP      Z,PROCQ         ;IF ROUTINE THEN\r
                                ;   BEGIN\r
        LD      B,(HL)          ;      READ ROUTINE START ADDRESS IN TABL1\r
        DEC     HL\r
        LD      C,(HL)\r
        LD      H,B\r
        LD      L,C\r
	JP      (HL)            ;      GOTO CASE ROUTINES\r
				;   END\r
				;ELSE\r
				;   BEGIN\r
PROCQ:  DEC     HL              ;   READ PROCESS NO IN TABL1\r
	PUSH	BC\r
	PUSH	HL\r
        LD      B,(HL)\r
IACT:   LD      HL,SYSRAM+200H+5 ;FIND ADDRESS OF PROCESS DESCRIPTOR\r
	LD	C,B\r
        SLA     C\r
        SLA     C\r
        SLA     C\r
        SLA     C\r
        SRL     B\r
        SRL     B\r
        SRL     B\r
        SRL     B\r
        ADD     HL,BC\r
        SET     7,(HL)		;   ACTIVATE PROCESS\r
	POP	HL\r
        LD      BC,NUMMES*2     ;   FIND ADDRESS OF PROCESS QUEUE.\r
        ADD     HL,BC\r
	PUSH	HL\r
	POP	IX\r
	LD	L,(IX+0)\r
	LD	H,(IX+1)\r
        CALL	SUBENQ	        ;   ENQUEUE Q-ELEMENT IN PROCESS QUEUE.\r
	POP	BC		;   LOAD (MESSAGE CODE LIST NO.)*2\r
	LD	HL,3		;   INTO Q-ELEMENT, WORD H.\r
	ADD	HL,DE\r
	LD	(HL),C\r
	RET			;   RETURN TO SCAN ROUTINE\r
				;   END\r
				;END\r
\r
;********** E N D    O F    D I S T R I B U T E    R O U T I N E *********\r
;\r
	NLIST	S\r
	IF      F4.EQ.1\r
	LIST	S	;+++++RCP\r
;********** SPECIAL RCP DISTRIBUTION ROUTINE ***************\r
;\r
ROUT0:  LD      HL,9		;FIND MESSAGE CODE IN RTABL\r
	ADD     HL,DE\r
	LD      A,(HL)\r
	LD      HL,RTABL\r
	LD      BC,5\r
	CPIR			;TEST IF MESSAGE CODE WAS ILLEGAL\r
	JP      NZ,RTEXIT	;IF YES THEN GOTO EXIT ROUTINE\r
				;ENDIF\r
	LD      HL,RTABL+0DH	;FIND ROUTINE ADDRESS IN RTABL\r
	SLA     C\r
	AND     0FFH\r
	SBC     HL,BC\r
	PUSH HL\r
	POP     IX\r
	LD      L,(IX+0)\r
	LD      H,(IX+1)\r
	JP      (HL)		;START ROUTINE EXECUTION\r
;\r
RTABL:  DB      0F2H		;SPECIAL RCP DISTRIBUTION TABLE\r
	DB      0E5H\r
	DB      80H\r
	DB      84H\r
	DB      0E4H\r
	DW      ROUT1\r
	DW      ROUT2\r
	DW      ROUT3\r
	DW      ROUT5\r
	DW      ROUT6\r
;************** END OF SPECIAL RCP DISTRIBUTION ROUTINE ****************\r
;\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;********** 'SEND ERROR CONDITION' ROUTINE *****************************\r
;\r
ROUT1:  LD      HL,ECOND2	;SET BIT 7 IN ECOND2 REGISTER\r
	SET     7,(HL)\r
	JP      RTEXIT		;GOTO EXIT ROUTINE\r
;\r
;**** END OF 'SEND ERROR CONDITION' ROUTINE*********************\r
;\r
	NLIST	S\r
	IF      (F3.OR.F5).EQ.0\r
	LIST	S	;+++++#RCDP AND #MATRIX\r
;***** 'SET CR80 CHANNEL' ROUTINE ************************\r
;\r
ROUT2:  PUSH    DE\r
	POP     IX		;Q-ELEMENT POINTER\r
	NLIST	S\r
	IF      F4.EQ.1\r
	LIST	S	;+++++RCP\r
	INC     IX		;ADJUST Q-ELEMENT POINTER TO RCP FORMAT\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	LD      A,(IX+9)\r
	LD      (CR80NO),A	;LOAD CR80 CHANNEL NO. INTO CR80NO REGISTER\r
	NLIST	S\r
	IF      F11.EQ.1\r
	LIST	S	;+++++VDU-D\r
	LD      A,0		;RESET CR80 STATUS SWITCH REGISTERS\r
	LD      (CR80SS),A\r
	LD      (CR80SS+1),A\r
	LD      (CR80SS+2),A\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	LD      HL,ECOND2	;SET BIT 5 IN ECOND2 REGISTER\r
	SET     5,(HL)\r
	JP      RTEXIT		;GOTO EXIT ROUTINE\r
;\r
;******** END OF 'SET CR80 CHANNEL' ROUTINE *********************\r
;\r
	NLIST	S\r
	ENDIF\r
;\r
	IF      (F4.OR.F8).EQ.1\r
	LIST	S	;+++++RCP OR RCP CONTROLLED DEVICE\r
;\r
;***** 'ESTABLISH DELEGATION' ROUTINE **********\r
;\r
ROUT3:  PUSH    DE\r
	POP     IX		;Q-ELEMENT POINTER\r
	NLIST	S\r
	IF      F4.EQ.1\r
	LIST	S	;+++++RCP\r
	INC	IX		;ADJUST QUEUE ELEMENT POINTER TO RCP FORMAT\r
	LD	A,(IX+9)\r
	NLIST	S\r
	IF	F43.EQ.1\r
	LIST	S	;+++++RCP(VTR)\r
	CP	0C8H		;FIND CHARACTER TO BE DISPLAYED\r
	JP	NZ,DDM30\r
	LD	A,0AH\r
	JP	DDM31\r
DDM30:	SUB	9\r
DDM31:	RLCA\r
	RLCA\r
	RLCA\r
	RLCA\r
	CPL\r
	OR	0FH\r
	LD	B,A\r
	LD	A,(IX+0AH)\r
	CP	1		;FIND DISPLAY TO BE SET\r
	JP	NZ,DDM32\r
	LD	C,DIS1\r
	JP	DDM34\r
DDM32:	CP	2\r
	JP	NZ,DDM33\r
	LD	C,DIS2\r
	JP	DDM34\r
DDM33:	CP	3\r
	JP	NZ,DDM38\r
	LD	C,DIS3\r
	NLIST	S\r
	ENDIF\r
	IF	F41.EQ.1\r
	LIST	S	;+++++RCP(M I)\r
	CP	6		;FIND CHARACTER TO BE DISPLAYED\r
	JP	Z,DDM30\r
	CP	8\r
	JP	Z,DDM30\r
	CP	15H\r
	JP	Z,DDM30\r
	LD	A,0EFH\r
	JP	DDM31\r
DDM30:	LD	A,0DFH\r
DDM31:	LD	B,A\r
	LD	A,(IX+0AH)\r
	CP	3AH		;FIND DISPLAY TO BE SET\r
	JP	NZ,DDM32\r
	LD	C,KDIS\r
	JP	DDM34\r
DDM32:	CP	1AH\r
	JP	NZ,DDM33\r
	LD	C,TPDIS\r
	JP	DDM34\r
DDM33:	CP	22H\r
	JP	NZ,DDM35\r
	LD	C,TMDIS\r
	JP	DDM34\r
DDM35:	CP	2AH\r
	JP	NZ,DDM36\r
	LD	C,DDIS\r
	JP	DDM34\r
DDM36:	CP	31H\r
	JP	NZ,DDM38\r
	LD	C,SDIS\r
	NLIST	S\r
	ENDIF\r
	IF	F42.EQ.1\r
	LIST	S	;+++++RCP(M II)\r
	CP	6		;FIND CHARACTER TO BE DISPLAYED\r
	JP	Z,DDM31\r
	CP	8\r
	JP	Z,DDM31\r
	CP	15H\r
	JP	Z,DDM31\r
	CP	18H\r
	JP	Z,DDM31\r
	CP	1AH\r
	JP	Z,DDM30\r
	LD	A,0EFH\r
	JP	DDM31\r
DDM30:	LD	A,0DFH\r
DDM31:	LD	B,A\r
	LD	A,(IX+0AH)\r
	CP	39H		;FIND DISPLAY TO BE SET\r
	JP	NZ,DDM32\r
	LD	C,KDIS\r
	JP	DDM34\r
DDM32:	CP	19H\r
	JP	NZ,DDM33\r
	LD	C,TPDIS\r
	JP	DDM34\r
DDM33:	CP	21H\r
	JP	NZ,DDM35\r
	LD	C,TMDIS\r
	JP	DDM34\r
DDM35:	CP	29H\r
	JP	NZ,DDM36\r
	LD	C,DDIS\r
	JP	DDM34\r
DDM36:	CP	11H\r
	JP	NZ,DDM37\r
	LD	C,ADIS\r
	JP	DDM34\r
DDM37:	CP	9\r
	JP	NZ,DDM38\r
	LD	C,VDIS\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM34:	IN	A,(C)\r
	AND	0FH\r
	OR	B\r
	OUT	(C),A\r
DDM38:\r
	NLIST	S\r
	ENDIF\r
	IF      F8.EQ.1\r
	LIST	S	;+++++RCP CONTROLLED DEVICE\r
	LD      A,(IX+0AH)\r
	NLIST	S\r
	IF      F84.EQ.1\r
	LIST	S	;+++++TELECINE\r
	BIT     5,A		;TEST IF PANEL IS PROJ. OR MATCH\r
	JP      Z,DDM7		;IF MATCH THEN\r
				;   BEGIN\r
	LD      (PANCOM),A	;	LOAD PANCOM REGISTER WITH DELEGATED\r
				;	PANEL CODE\r
	PUSH	DE\r
	LD	C,IDLSBM\r
	LD	B,(IX+9)\r
	LD	DE,70H\r
	LD	A,3\r
W1:	CALL	COMM		;       OPEN CHANNEL 7 WITH NEW CRID\r
	BIT	7,A		;\r
	JP	NZ,W1		;\r
WAIT1:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT1		;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT1		;\r
CONT1:	POP	DE		;\r
	JP      DDM10		;   END\r
				;ELSE\r
				;BEGIN\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM7:   LD      (PANCO),A	;LOAD PANCO REGISTER WITH DELEGATED PANEL CODE\r
	NLIST	S\r
	IF	F81.EQ.1\r
	LIST	S	;+++++VTR\r
	CP	1\r
	JP	Z,DDM40\r
	CP	2\r
	JP	NZ,DDM41\r
	LD	C,IDLSB2\r
	JP	DDM42\r
DDM41:	LD	C,IDLSB3\r
	JP	DDM42\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM40:	LD	C,IDLSB\r
DDM42:	PUSH	DE\r
	LD	B,(IX+9)	;\r
	LD	DE,60H		;\r
	LD	A,3		;OPEN CHANNEL 6 WITH NEW CRID\r
W2:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W2		;\r
WAIT2:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT2		;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT2		;\r
CONT2:	POP	DE		;\r
DDM10:	JP      ROUT6		;GOTO 'SEND DELEGATION STATUS' ROUTINE\r
				;END\r
	NLIST	S\r
	ENDIF\r
	IF      F4.EQ.1\r
	LIST	S	;+++++RCP\r
	LD      HL,TABL4	;FIND CHANNEL NO. IN TABL4/41\r
	LD      BC,NOPAN\r
	LD      A,(IX+0AH)\r
	CPIR\r
	JP      NZ,RTEXIT	;IF PANEL CODE WAS ILLEGAL THEN GOTO 'EXIT ROUTINE\r
				;ENDIF\r
	LD      HL,TABL4+2*NOPAN-1\r
	AND     0FFH\r
	SBC     HL,BC\r
	LD      B,(HL)\r
	SLA	B\r
	SLA	B\r
	SLA	B\r
	SLA	B\r
\r
\r
	NLIST	S\r
	IF	(F41.OR.F42).EQ.1\r
	LIST	S	;+++++RCP (M I) OR RCP (M II)\r
	AND	0F8H		;TEST IF PANEL IS TC-MATCH\r
	CP	20H\r
	JP	NZ,DDM43\r
	LD	C,7FH\r
	JP	DDM43A\r
DDM43:	LD	C,6FH\r
DDM43A:	PUSH	DE\r
	POP	IY\r
	PUSH	DE\r
	LD	E,B\r
	LD	D,0\r
	LD	B,(IY+0AH)\r
	LD	A,3		;\r
				;OPEN SPECIFIED CHANNEL WITH NEW CRID\r
W3:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W3		;\r
WAIT3:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT3		;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT3		;\r
CONT3:	POP	DE\r
	JP	ROUT6A		;\r
	NLIST	S\r
	ENDIF\r
	IF	F43.EQ.1\r
	LIST	S	;+++++RCP(VTR)\r
	LD	C,6FH		;\r
	PUSH	DE		;\r
	POP	IY		;\r
	PUSH	DE		;\r
	LD	E,B		;\r
	LD	D,0		;\r
	LD	B,(IY+0A)	;\r
	CP	0C8H		;TEST IF DELEGATION IS TO VTRA\r
	JP	Z,DDM44		;IF NO THEN\r
	LD	A,3		;BEGIN\r
				; OPEN NORMAL CHANNEL WITH NEW CRID\r
W4:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W4		;\r
WAIT4:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT4		;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT4		;\r
CONT4:	POP	DE\r
	JP	ROUT6A		; GOTO 'SEND DELEGATION STATUS' ROUTINE (A-ENTRY)\r
				;END\r
				;ELSE\r
DDM44:	LD	B,73H		;BEGIN\r
	LD	A,3		;\r
	PUSH	BC\r
	PUSH	DE\r
				;OPEN VTR6 CHANNEL WITH CRID = 736FH\r
W5:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W5		;\r
WAIT5:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT5		;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT5		;\r
CONT5:	POP	DE		;\r
	POP	BC\r
	LD	A,10H		;\r
	ADD	A,E\r
	LD	E,A\r
	INC	B\r
	LD	A,3		;\r
	PUSH	BC		;\r
	PUSH	DE\r
				;OPEN VTR7 CHANNEL WITH CRID = 746FH\r
W6:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W6		;\r
WAIT6:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT6		;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT6		;\r
CONT6:	POP	DE\r
	POP	BC\r
	LD	A,10H\r
	ADD	A,E\r
	LD	E,A\r
	INC	B		;\r
	LD	A,3		;\r
				;OPEN VTR8 CHANNEL WITH CRID = 756FH\r
W7:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W7		;\r
WAIT7:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT7		;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT7		;\r
CONT7:	POP	DE\r
	JP      ROUT6A		;GOTO 'SEND DELEGATION STATUS' ROUTINE (A-ENTRY)\r
				;END\r
				;ENDIF\r
	NLIST	S\r
	ENDIF\r
	ENDIF\r
	LIST	S\r
;******** END OF 'ESTABLISH DELEGATION' ROUTINE *******************\r
;\r
	NLIST	S\r
	IF      F811.EQ.1\r
	LIST	S	;+++++VTR6-8\r
;******** 'ESTABLISH DELEGATION TO VTRA' ROUTINE *****************\r
;\r
ROUT4:  PUSH    DE\r
	POP     IX\r
	LD      A,(IX+0AH)\r
	LD      (PANCO),A	;LOAD PANCO REGISTER WITH THE DELEGATED PANEL CODE\r
	CP	2		;FIND CRID (LSB)\r
	JP	NZ,DDM46\r
	LD	A,9FH\r
	JP	DDM48\r
DDM46:	CP	3\r
	JP	NZ,DDM47\r
	LD	A,0CFH\r
	JP	DDM48\r
DDM47:	LD	A,6FH\r
DDM48:\r
	NLIST	S\r
	IF      F812.EQ.1\r
	LIST	S	;+++++VTR7\r
	ADD     A,10H		;ADJUST CRID(LSB) TO VTRA CHANNEL IN RCP\r
	NLIST	S\r
	ENDIF\r
	IF      F813.EQ.1\r
	LIST	S	;+++++VTR8\r
	ADD     A,20H		;ADJUST CRID(LSB) TO VTRA CHANNEL IN RCP\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	PUSH	DE\r
	LD	C,A		;\r
	LD	B,(IX+9)	;\r
	LD	DE,60H\r
	LD	A,3		;\r
				;OPEN CHANNEL 6 WITH CRID INDICATING CORRECT RCP VTRA-CHANNEL\r
W8:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W8		;\r
WAIT8:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT8		;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT8		;\r
CONT8:	POP	DE\r
	JP      ROUT6		;GOTO 'SEND DELEGATION STATUS' ROUTINE\r
;\r
;****** END OF 'ESTABLISH DELEGATION TO VTRA' ROUTINE **********\r
;\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;********** 'DELETE DELEGATION' ROUTINE *************\r
ROUT5:\r
	NLIST	S\r
	IF      F8.EQ.1\r
	LIST	S	;+++++RCP CONTROLLED DEVICE\r
	LD      C,60H\r
	NLIST	S\r
	IF      F84.EQ.1\r
	LIST	S	;+++++TELECINE\r
	PUSH    DE\r
	POP     IX\r
	LD      A,(IX+0AH)\r
	BIT     5,A		;TEST IF PANEL IS PROJ OR MATCH\r
	JP      Z,DDM11		;IF MATCH THEN\r
				;   BEGIN\r
	LD	C,70H		;	ADJUST POINTER\r
	LD	A,0\r
	LD	(PANCOM),A	;   END\r
	JP	DDM11A		;ENDIF\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM11:	LD	A,0\r
	LD	(PANCO),A\r
DDM11A:	PUSH	DE\r
	LD	E,C\r
	LD	D,0\r
	LD	A,2		;\r
				;CLOSE CHANNEL 6/7\r
W9:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W9		;\r
WAIT9:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT9		;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT9		;\r
CONT9:	POP	DE\r
	NLIST	S\r
	ENDIF\r
	IF      F4.EQ.1\r
	LIST	S	;+++++RCP\r
	PUSH    DE\r
	POP     IX\r
	LD	A,(IX+0BH)\r
	NLIST	S\r
	IF	F43.EQ.1\r
	LIST	S	;+++++RCP(VTR)\r
	CP	1		;FIND DISPLAY TO BE RESET\r
	JP	NZ,DDM23\r
	LD	C,DIS1\r
	JP	DDM25\r
DDM23:	CP	2\r
	JP	NZ,DDM24\r
	LD	C,DIS2\r
	JP	DDM25\r
DDM24:	CP	3\r
	JP	NZ,DDM28\r
	LD	C,DIS3\r
DDM25:	IN	A,(C)		;RESET DISPLAY\r
	OR	0F0H\r
	OUT	(C),A\r
	NLIST	S\r
	ENDIF\r
	IF	F41.EQ.1\r
	LIST	S	;++++RCP(M I)\r
	CP	3AH		;FIND DISPLAY TO BE RESET\r
	JP	NZ,DDM23\r
	LD	C,KDIS\r
	JP	DDM27\r
DDM23:	CP	1AH\r
	JP	NZ,DDM24\r
	LD	C,TPDIS\r
	JP	DDM27\r
DDM24:	CP	22H\r
	JP	NZ,DDM25\r
	LD	C,TMDIS\r
	JP	DDM27\r
DDM25:	CP	2AH\r
	JP	NZ,DDM26\r
	LD	C,DDIS\r
	JP	DDM27\r
DDM26:	CP	31H\r
	JP	NZ,DDM28\r
	LD	C,SDIS\r
DDM27:	IN	A,(C)		;RESET DISPLAY\r
	OR	0F0H\r
	OUT	(C),A\r
	NLIST	S\r
	ENDIF\r
	IF	F42.EQ.1\r
	LIST	S	;+++++RCP(M II)\r
	CP	39H		;FIND DISPLAY TO BE RESET\r
	JP	NZ,DDM23\r
	LD	C,KDIS\r
	JP	DDM29\r
DDM23:	CP	19H\r
	JP	NZ,DDM24\r
	LD	C,TPDIS\r
	JP	DDM29\r
DDM24:	CP	21H\r
	JP	NZ,DDM25\r
	LD	C,TMDIS\r
	JP	DDM29\r
DDM25:	CP	29H\r
	JP	NZ,DDM26\r
	LD	C,DDIS\r
	JP	DDM29\r
DDM26:	CP	11H\r
	JP	NZ,DDM27\r
	LD	C,ADIS\r
	JP	DDM29\r
DDM27:	CP	9\r
	JP	NZ,DDM28\r
	LD	C,VDIS\r
DDM29:	IN	A,(C)		;RESET DISPLAY\r
	OR	0F0H\r
	OUT	(C),A\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM28:	LD      A,(IX+0BH)	;FIND CHANNEL NO. IN TABL4\r
	LD      BC,NOPAN\r
	LD      HL,TABL4\r
	CPIR\r
	JP      NZ,RTEXIT	;IF PANEL CODE WAS ILLEGAL THEN GOTO EXIT ROUTINE\r
				;ENDIF\r
	LD      HL,TABL4+2*NOPAN-1\r
	AND     0FFH\r
	SBC     HL,BC\r
	PUSH	DE\r
	LD      E,(HL)		;\r
	SLA	E\r
	SLA	E\r
	SLA	E\r
	SLA	E\r
	LD	D,0\r
	LD	A,2		;\r
				;CLOSE CHANNEL\r
W10:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W10		;\r
WAIT10:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT10	;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT10		;\r
CONT10:	POP	DE\r
	NLIST	S\r
	IF	F43.EQ.1\r
	LIST	S	;+++++ RCP(VTR)\r
	PUSH	DE\r
	LD	A,10H\r
	ADD	A,E\r
	LD	E,A\r
	LD	A,2\r
	PUSH	DE\r
W11:	CALL	COMM		;CLOSE VTR7-CHANNEL\r
	BIT	7,A		;\r
	JP	NZ,W11		;\r
WAIT11:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT11	;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT11		;\r
CONT11:	POP	DE\r
	LD	A,10H		;\r
	ADD	A,E\r
	LD	E,A\r
	LD	A,2\r
				;CLOSE VTR8-CHANNEL\r
W12:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W12		;\r
WAIT12:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT12	;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT12		;\r
CONT12:	POP	DE\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;********** END OF 'DELETE DELEGATION' ROUTINE *****************\r
;;\r
;\r
;***** 'SEND DELEGATION STATUS' ROUTINE **********\r
	NLIST	S\r
	IF      F8.EQ.1\r
	LIST	S	;+++++RCP CONTROLLED DEVICE\r
ROUT6:  LD      A,6		;LOAD CHANNEL NO. 6\r
	PUSH    DE\r
	NLIST	S\r
	IF      F84.EQ.1\r
	LIST	S	;+++++TELECINE\r
	PUSH    DE\r
	POP     IY\r
	BIT	5,(IY+0AH)\r
	LD	C,0		;RESET 'MATCH' INDICATOR\r
				;TEST IF PANEL IS PROJ OR MATCH\r
	JP      Z,DDM12		;IF MATCH THEN\r
				;   BEGIN\r
	LD	A,7		;	ADJUST CHANNEL NO. TO 7\r
	LD	C,2		;	SET 'MATCH' INDICATOR\r
				;   END\r
				;ENDIF\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM12:	PUSH	AF		;\r
	OGEPA1	5		;GET EMPTY OUTGOING Q-ELEMENT\r
	JP      C,DDM20		;IF QUEUE WAS EMPTY THEN\r
	POP	AF		;\r
	POP     DE\r
	JP      RTEXIT		;GOTO EXIT ROUTINE\r
				;ENDIF\r
DDM20:  POP	AF		;\r
	PUSH	DE		;\r
	SLA	A\r
	SLA	A\r
	SLA	A\r
	SLA	A\r
	LD	E,A\r
	LD	D,0\r
	LD	A,4\r
		  		;TEST IF DELEGATION IS ESTABLISHED\r
W13:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W13		;\r
WAIT13:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT13	;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT13		;\r
CONT13:	BIT	6,A\r
	JP      NZ,DDM13	;IF YES THEN\r
				;   BEGIN\r
	JP      DDM14\r
				;   END\r
				;ELSE\r
				;   BEGIN\r
DDM13:  LD      B,0		;	SET DEVICE NO. = 0\r
				;   END\r
				;ENDIF\r
DDM14:	POP	DE		;\r
	PUSH    DE\r
	POP     IX\r
	LD	(IX+2),4\r
	LD      (IX+8),0ECH	;LOAD MESSAGE CODE INTO Q-ELEMENT\r
	LD      (IX+9),B	;LOAD TDX DEVICE NO. INTO Q-ELEMENT\r
	NLIST	S\r
	IF	F84.EQ.1\r
	LIST	S	;+++++TELECINE\r
	BIT	1,C		;TEST IF PANEL IS PROJ OR MATCH\r
	JP	Z,DDM21		;IF MATCH THEN\r
				;   BEGIN\r
	LD	A,(PANCOM)	;	GET PANEL CODE\r
				;   END\r
	JP	DDM22		\r
				;ELSE\r
				;BEGIN\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM21:	LD      A,(PANCO)	;GET PANEL CODE\r
	NLIST	S\r
	IF	F84.EQ.1\r
	LIST	S\r
				;END\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM22:	LD      (IX+0AH),A	;LOAD PANEL CODE INTO Q-ELEMENT\r
	LD	(IX+0BH),#DEVNO ;LOAD OWN TDX DEV.NO. INTO Q-ELEMENT\r
	PUSH	BC\r
	ODEPA1	Y,BFSIZE	;TRANSMIT Q-ELEMENT TO RCDP\r
	POP	BC\r
	POP	DE\r
	PUSH	DE\r
	POP	IX\r
	LD	A,(IX+8)	;TEST IF MESSAGE IS 'SEND DEL. STAT.'\r
	CP	0E4H\r
	JP	Z,RTEXIT	;IF YES THEN GOTO EXIT ROUTINE\r
				;ENDIF\r
				;TRANSFER MESSAGE TO APPLICATION PROCESS\r
	NLIST	S\r
	IF	F84.EQ.1\r
	LIST	S	;+++++TELECINE\r
	BIT	1,C\r
	JP	Z,DDM50\r
	ACTIVATE	S,7\r
	LD	HL,PQH7\r
	JP	DDM51\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM50:	ACTIVATE	S,6\r
	LD	HL,PQH6\r
DDM51:	CALL	SUBENQ\r
	RET			;RETURN TO SCAN ROUTINE\r
	NLIST	S\r
	ENDIF\r
	IF      F4.EQ.1\r
	LIST	S	;+++++RCP\r
ROUT6A: PUSH    DE\r
	POP     IX\r
	LD      A,(IX+0BH)\r
	JP      DDM15\r
ROUT6:  PUSH    DE\r
	POP     IX\r
	LD      A,(IX+0AH)\r
DDM15:  LD      HL,TABL4	;FIND PANEL CODE IN TABL4\r
	LD      BC,NOPAN\r
	CPIR\r
	JP      NZ,RTEXIT	;IF PANEL CODE WAS ILLEGAL THEN GOTO EXIT ROUTINE\r
	PUSH	DE\r
	PUSH	AF\r
				;ENDIF\r
	LD      HL,TABL4+2*NOPAN-1\r
	AND     0FFH\r
	SBC     HL,BC\r
	LD      E,(HL)		;FIND CHANNEL NO. IN TABL4/41\r
	SLA	E\r
	SLA	E\r
	SLA	E\r
	SLA	E\r
	LD	D,0\r
	LD	A,4\r
	PUSH	DE\r
				;TEST IF DELEGATION IS ESTABLISHED\r
W14:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W14		;\r
WAIT14:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT14	;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT14		;\r
CONT14:	POP	DE\r
	BIT	6,A\r
	JP      NZ,DDM16	;IF YES THEN\r
	NLIST	S\r
	IF	F43.EQ.1\r
	LIST	S		;+++++RCP(VTR)\r
				;   BEGIN\r
	INC	E		;\r
	LD	A,4		;\r
	PUSH	BC		;\r
				;   TEST IF DELEGATED TO VTRA\r
W15:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W15		;\r
WAIT15:	LD	A,80H		;\r
	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	Z,CONT15	;\r
	CALL	SCOMMON		;\r
	EI\r
	JP	WAIT15		;\r
CONT15:	POP	BC		;\r
	BIT	6,A		;\r
	JP	NZ,DDM60	;   IF YES THEN\r
	LD	C,0C8H		;   SET TDX DEV.NO. = VTRA DUMMY CODE\r
	JP	DDM18		;   GOTO DDM18\r
				;   ENDIF\r
				;   END\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM60:	LD	C,B		;   BEGIN\r
				;	GET DELEGATED TDX DEVICE NO.\r
	JP      DDM18		;   END\r
				;ELSE\r
				;   BEGIN\r
DDM16:  LD      C,0		;	SET DELEGATED TDX DEVICE NO. = 0\r
				;   END\r
				;ENDIF\r
DDM18:	PUSH	BC\r
	OGEPA1	5		;GET EMPTY OUTGOING Q-ELEMENT\r
	POP	BC\r
	JP      C,DDM19		;IF QUEUE WAS EMPTY THEN\r
	POP     DE\r
	POP     DE\r
	JP      RTEXIT		;GOTO EXIT ROUTINE\r
				;ENDIF\r
DDM19:  PUSH    DE\r
	POP     IX\r
	LD	(IX+2),4\r
	LD      (IX+8),0ECH	;LOAD MESSAGE CODE INTO Q-ELEMENT\r
	LD      (IX+9),C	;LOAD TDX DEVICE NO. INTO Q-ELEMENT\r
	POP     AF\r
	LD      (IX+0AH),A	;LOAD PANEL CODE INTO Q-ELEMENT\r
	LD      (IX+0BH),#DEVNO	;LOAD OWN TDX DEVICE NO. INTO Q-ELEMENT\r
	ODEPA1	Y,BFSIZE	;TRANSMIT Q-ELEMENT TO RCDP\r
	POP     DE\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;********** END OF 'SEND DELEGATION STATUS' ROUTINE **********\r
;\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;********** EXIT ROUTINE **********\r
;\r
RTEXIT: IDEPA1	Y,BFSIZE	;ENQUEUE INGOING Q-ELEMENT IN\r
				;EMPTY BUFFER QUEUE\r
	RET			;RETURN TO SCAN ROUTINE\r
;\r
;********** END OF EXIT ROUTINE **********\r
;\r
;******* FAULT RECOVERY INTERRUPT ROUTINE (CTC CH.2) *************\r
;\r
RECOV:	EI\r
	RETI\r
;\r
;******************** END ******************************\r
;\r
;\r
	NLIST	M\r
;\r
	ENDM\r
;\r
;\r
;\r
;\r
;\r
;\r
ACTIVATE	MACRO	#ID,#NO\r
	NLIST	M\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
	LIST	M\r
	ENDM\r
;\r
;\r
;\r
CREATE	MACRO	#ID,#NO,#NAME,#PRIO\r
	NLIST	M\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
	LIST	M\r
	ENDM\r
;\r
;\r
;\r
	EJEC\r
;=============================================================================;\r
;\r
;		THIS MODULE CONTAINS MACROES NEEDED FOR THE\r
;		     INITIALIZATION OF THE TQM-PROCESS-COMPLEX.\r
;\r
;		THE INIT. SEQUENS IS STRUCTURED AS BELOW:\r
;\r
;		START:	LD	SP,....\r
;			.\r
;			.\r
;			.\r
;			TQMINT  5,1\r
;\r
;			   TQMPR  S,1,5\r
;			   .....\r
;			   TQMPR  R,5,4000H\r
;\r
;			TQMEXI\r
;\r
;\r
;\r
;		THE MACRO'S INCLUDES \r
;	  	'DW','DB','DEFL' -STATEMENTS AND TQM-INITIALIZATION.\r
;		IT'S TERMINATED IN THE CSEG-MODE\r
;\r
;\r
;==============================================================================\r
	EJEC\r
\r
;==========================   THE  T Q M I N T   MACRO  =======================\r
;\r
;               THE TQMINT MACRO PREFORMES THE DATA LAYOUT OF TQM-DATA\r
;\r
;				ENTRY:   #NUMPR: THE NUMBER OF P/R'S TO\r
;						 MONITORED BY TQM.\r
;						 1 =< #NUMPR >= 127\r
;					 #SCALE: THE PRESCALE FACTOR ,WHICH\r
;						 PRESCALES THE CTC GENERATED\r
;						 INTERRUPT FREQUENCY.\r
;						  0=<  #SCALE  >=255\r
;\r
;				EXIT :   NO REGISTERS AFFECTED\r
;==============================================================================\r
\r
TQMINT:	MACRO	#NUMPR,#SCALE \r
\r
	PUBLIC	NUMPR\r
	PUBLIC	FORWAR,BACKWA,RDELAY,DELAY\r
	PUBLIC	PRESCA,PRECOU,NONACK,ONOFF\r
	PUBLIC	INFORM\r
	EXTRN	TQMACT,TQMMON,ESTABI,ESTABR,SUSPND\r
\r
	DSEG\r
PRESCA	DEFL	#SCALE		;-------------------------------------------\r
				;  PRESCA : PUBLICHED INFORMATION ABOUT THE\r
				;          PRESCALE FACTOR\r
				;-------------------------------------------\r
\r
NUMPR	DEFL	#NUMPR		;-------------------------------------------\r
				;  NUMPR : PUBLICHED INFORMATION ABOUT NUMBER\r
				;          OF P/R'S TO BE MONITORED BY T Q M\r
				;--------------------------------------------\r
FORWAR:	DS	#NUMPR+1	;-------------------------------------------\r
				; FORWAR: ARRAY(NUMB. OF P/R'S) OF BYTE\r
				;\r
				; TYPE OF FORWAR ::=< 6. - 0.BIT: POINTER\r
				;		      TO THE SUCCESSSOR IN\r
				;		      CHAIN.\r
				;		      FORWAR(0): CHAIN-HEAD.\r
				;		      7. BIT : ACTIV/PASSIV\r
				;					   >\r
				;----------------------------------------------\r
BACKWA:	DS	#NUMPR+1	;----------------------------------------------\r
				; BACKWA: ARRAY(NUMB. OF P/R'S) OF BYTE\r
				;\r
				; TYPE OF BACKWA ::=< POINTERS TO THE PRE-\r
				;		      DECESSOR IN THE CHAIN >\r
				;----------------------------------------------\r
RDELAY:	DS	#NUMPR+1	;----------------------------------------------\r
				; RDELAY: ARRAY(NUMB. OF P/'S) OF BYTE\r
				;\r
				; TYPE OF RDELAY ::=< THE RELATIV DELAYED\r
				;		      ACTIVATION AFTER\r
				;		      THE PREDECESSOR	     >\r
				;----------------------------------------------\r
DELAY:	DS	#NUMPR+1	;----------------------------------------------\r
				; DELAY: ARRAY(NUMB.OF P/R'S) OF BYTE\r
				;\r
				; TYPE OF DELAY ::=< THE DELAYED TIME BEFORE\r
				;		     ACTIVATION OF THE P/R\r
				;   		     AFTER ESTABLISHED	     >\r
				;----------------------------------------------\r
ONOFF:	DS	1		;---------------------------------------------\r
				; ONOFF:BYTE\r
				;\r
				; TYPE OF ONOFF ::=< = 0H : TQM DISABLED\r
				;		     =0FFH: TQM ENABLED\r
				;----------------------------------------------\r
PRECOU:	DS	1		;----------------------------------------------\r
				; PRECOU:BYTE\r
				;\r
				; TYPE OF PRECOU::=<  THE CURRENT NUMBER OF\r
				;		      TQMMON RUNS BEFORE DE-\r
				;		      CREMENTATION OF RDELAY OF\r
				;		      THE FIRST P/R IN CHAIN  >\r
				;----------------------------------------------\r
NONACK:	DS	1		;----------------------------------------------\r
				; NONACK:BYTE\r
				;\r
				; TYPE OF NONACK ::=< NUMBER OF NONACKNOWLEDGED\r
				;		      TQMACT-ACTIVATIONS    >\r
				;----------------------------------------------\r
DSEND2:\r
\r
	CSEG\r
\r
	XOR	A\r
	DEC	A\r
	LD	(ONOFF),A			; (ONOFF):=0FFH\r
\r
	LD	HL,RDELAY\r
	LD	(HL),A				; (MASTER.RDELAY):=0FFH\r
\r
	LD	HL,PRECOU\r
	LD	(HL),PRESCA.LOW.		; (PRECOU) := #PRESCA\r
\r
	XOR	A\r
	INC	HL\r
	LD	(HL),A				; (NONACK):=0\r
\r
	LD	HL,BACKWA\r
	LD	(HL),A				; MASTER.PRED :- MASTER\r\r
\r
	LD	HL,FORWAR\r
	LD	(HL),A				; MASTER.SUCC :- MASTER\r
\r
	;------------------------------------------------------------\r
	;  DO FOR  ( ALL TIMER 'S\r
	;        SET PASSIVBIT;\r
	;  ENDDO;\r
	;------------------------------------------------------------\r
	LD	C,NUMPR.LOW.\r
LOOPX:\r
	INC HL\r
	LD	(HL),80H\r
	DEC	C\r
	JP	NZ,LOOPX			; *.SUCC := MASTER\r
						; AND  *.PASBIT IS SET\r
	JP	TQMEND\r
\r
INFORM:	DS	#NUMPR*3	;----------------------------------------------\r
				;INFORM:RECORD(NUMB.OF P/R'S) OF ACDATA:ADDRESS\r
				;			         ACTION:BYTE\r
				;\r
				; TYPE OF ACTION::=< =0:CALL OF ROUTINE\r
				;		     =1:ACTIVATION OF S-PROCESS\r
				;		     =2:SIGNAL TO SEMAFOR     >\r
				;TYPE OF ACDATA::=<ACTION=0:ADDRESS OF ROUTINE\r
				;		      -  =1:SYSRAM+200H+N*10H+5\r
				;                     -  =2:SYSRAM+200H+N*20H\r
				;			    +S*10H+QHEAD*8  >\r
				;----------------------------------------------\r
CSEND2:\r
\r
	ENDM\r
	EJEC\r
\r
;=========================  THE T Q M P R  MACRO ======================\r
;\r
;	        THE TQMPR MACRO INITIATES THE INFORM-DATA\r
;\r
;			      ENTRY: #TYPE : R:-ROUTINE , OR\r
;					     S:-S-PROCESS ACTIVATION , OR\r
;					     N:-SIGNAL TO SEMAFOR.\r
;				     #PRNUM: THE P/R NUMBER.\r
;					     1=<  #PRNUM  >=127\r
;\r
;				     #INDEKS: ROUTINE ADDRESS/ S-PROCESSNO./\r
;					      SEMAFORNO.\r
;\r
;			      EXIT : NO REGISTERS ARE AFFECTED\r
;========================================================================\r
\r
TQMPR:	MACRO	#TYPE,#PRNUM,#INDEKS \r
	CSEG\r
	ORG	INFORM+3*(#PRNUM-1)\r
	PUBLIC AC#$YM\r
AC#$YM:\r
	IF	'#TYPE'.EQ.'R'\r
	DW	#INDEKS\r
	DB	0\r
	ENDIF\r
\r
	IF	'#TYPE'.EQ.'S'\r
	DW	#INDEKS*10H+SYSRAM+200H+5H\r
	DB	1H\r
	ENDIF\r
\r
	IF	'#TYPE'.EQ.'N'\r
	DW	#INDEKS*8H+SYSRAM+200H+S*10H+N*20H\r
	DB	2H\r
	ENDIF\r
\r
	ENDM\r
\r
	EJEC\r
;========================== THE TQMEXI MACRO ==========================\r
TQMEXI	MACRO\r
	DSEG\r
	ORG	DSEND2\r
	CSEG\r
	ORG	CSEND2\r
TQMEND:\r
\r
	ENDM\r
	EJEC\r
;==================  TQM-MACROES USED BY TQM-RUN  =======================\r
;\r
;	       THESE MACROES ARE STATED IN THE\r
;		 EXECUTABLE CODE IN THE APPL. SW\r
;\r
;========================================================================\r
\r
\r
;========================== THE LESTAB MACRO ==========================\r
LESTAB	MACRO	#PRNUM\r
	LD	BC,#PRNUM\r
	CALL	ESTABR\r
	ENDM\r
;========================== THE LSUSPN MACRO ==========================\r
LSUSPN	MACRO	#PRNUM\r
	LD	BC,#PRNUM\r
	CALL	SUSPND\r
	ENDM\r
;========================== THE GESTAM MACRO ==========================\r
GESTAM	MACRO\r
	LD	HL,ONOFF\r
	LD	(HL),0FFH\r
;========================== THE GSUSPM MACRO ==========================\r
GSUSPM	MACRO\r
	LD	HL,ONOFF\r
	LD	(HL),0\r
        ENDM\r
;========================== THE UPDATM MACRO ==========================\r
UPDATM	MACRO	#PRNUM,#VALUE\r
	LD	HL,DELAY+#PRNUM\r
	LD	(HL),#VALUE\r
	ENDM\r
;\r
;\r
;\r
;\r
;************************************************************************\r
;                             I G E P A 1\r
;                          VERSION 801125/CGR\r
;************************************************************************\r
;\r
;\r
IGEPA1	MACRO\r
	NLIST	M\r
				;DESCRIP: THE MACRO DEQUEUES AN ELEMENT FROM\r
				;	  INCOMING PACKET QUEUE IN SPECIFIED\r
				;         CHANNEL.\r
				;ENTRY: CHANNEL NO. IN A-REG.\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
				;EXTERNALS REQUIRED: IGEPA\r
				;\r
;################ Igepa1 macro #####################################\r
	CALL	IGEPA		;GET BUFFER IF ANY\r
	JP	NC,A#$YM+1	;IF QUEUE WAS EMPTY THEN EXIT\r
	PUSH	DE		;\r
	POP	IX		;\r
	PUSH	DE		;\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
	LD	(IX+5),H	;\r
	LD	HL,8		;REFORMAT BUFFER ('SIZE OF DATABUFFER' IS DESTROYED)\r
	ADD	HL,DE		;\r
	EX	DE,HL		;\r
	LD	HL,2		;\r
	ADD	HL,DE		;\r
	LD	B,0		;\r
	LD	C,(IX+2)	;\r
	LDIR			;\r
	POP	DE		;\r
A#$YM:	SCF			;EXIT\r
;#################### End macro ################################\r
	LIST	M\r
	ENDM\r
;\r
;\r
;\r
;\r
;************************************************************************\r
;                             I D E P A 1\r
;                          VERSION 801125/CGR\r
;************************************************************************\r
;\r
; DESCRIPTION:	THIS MACRO ENQUEUES THE SPECIFIED BUFFER IN THE 'INCOMING'\r
;		EMPTY BUFFER QUEUE IN THE CORRECT  DESCRIPTOR SECTION.\r
;		THE BUFFER MUST BE FORMATTED AS SPECIFIED FOR DORA INCOMING\r
;		BUFFERS. THE BYTECOUNT IN THE BUFFER IS RESET\r
;\r
; ENTRY:	ADDRESS OF BUFFER ELEMENT IN DE REGISTER.\r
;\r
; EXIT:		CY=1 IF QUEUE WAS NOT EMPTY\r
;		CY=0 IF QUEUE WAS EMPTY\r
;		ADDRESS OF BUFFER ELEMENT IN DE AND IX REGISTERS.\r
;\r
; PARAMETERS:	#EI: Y RE-ENABLES INTERRUPT\r
;		     N INTERRUPT IS DISABLED AT MACRO EXIT\r
;\r
; EXTERNALS:	IDEPA\r
;\r
; DESTROY:	REGISTERS A,F,B,C,H,L,IX\r
;\r
;\r
;\r
IDEPA1	MACRO	#EI,#BSIZE\r
	NLIST	M\r
;################# Idepa1 macro ##############################\r
	PUSH	DE		;\r
	POP	IX\r
	LD	(IX+8),#BSIZE	;REINSERT BUFFERSIZE (=16)\r
	LD	(IX+9),0	;\r
	LD	(IX+2),0	;RESET BYTECOUNT\r
	LD	(IX+3),0	;\r
	LD	A,(IX-2)	;GET CHANNEL NO.\r
	LD	L,(IX+4)	;INCREMENT DATABUFFER ADDRESS 2 TIMES.\r
	LD	H,(IX+5)	;\r
	INC	HL		;\r
	INC	HL		;\r
	LD	(IX+4),L	;\r
	LD	(IX+5),H	;\r
	CALL	IDEPA			;\r
	IF	'#EI'.EQ.'Y'		;\r
	EI				;\r
	ENDIF				;\r
;################# End macro #################################\r
	LIST	M\r
	ENDM\r
;\r
;\r
;************************************************************************\r
;                             O G E P A 1\r
;                          VERSION 801127/CGR\r
;************************************************************************\r
;\r
OGEPA1	MACRO	#CHAN\r
	NLIST	M\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\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
	LIST	M\r
	ENDM\r
;\r
;************************************************************************\r
;                             O G E P A I\r
;                          VERSION 801127/CGR\r
;************************************************************************\r
;\r
OGEPAI	MACRO\r
	NLIST	M\r
				;DESCRIP: THE MACRO DEQUEUES AN ELE-\r
				;         MENT FROM OUTGOING EMPTY QUEUE.\r
				;ENTRY: CHANNEL NO. IN A REG.\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: NONE\r
				;\r
				;EXTERNALS: SUBDEQ,QHEADS\r
				;\r
;###################### Ogepai macro ###########################\r
	LD	H,A		;FIND ADDRESS OF EMPTY QUEUE\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\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
	LIST	M\r
	ENDM\r
;\r
;\r
;***********************************************************************\r
;                             O G E P A 3\r
;                          VERSION 801127/CGR\r
;***********************************************************************\r
;\r
; DESCRIPTION:		THIS MACRO DEQUEUES A BUFFER FROM THE 'OUTGOING'\r
;			EMPTY BUFFER QUEUE - IF THE I/F DEVICE IS DELEGATED - AND\r
;			INSERTS THE PANEL CODE OF THE\r
;			DELEGATED PANEL IN THE FIRST DATABYTE OF THE\r
;			BUFFER. THE BYTECOUNT IS SET = 1.\r
;\r
; ENTRY:		NONE\r
;\r
; EXIT:			CY=0 IF QUEUE WAS EMPTY OR LTUX NOT DELEGATED\r
;			CY=1 IF QUEUE WAS NOT EMPTY AND LTUX DELEGATED\r
;			Z=0  IF LTUX NOT DELEGATED\r
;			Z=1  IF LTUX IS DELEGATED\r
;			ADDRESS OF BUFFER ELEMENT IN DE AND IX REGISTERS.\r
;\r
; PARAMETERS:		#CHAN:	CHANNELNUMBER. (MUST BE 6 OR 7)\r
;\r
; EXTERNALS:		SUBDEQ, QHEADS, PANCO (AND PANCOM IF TELECINE I/F)\r
;\r
; DESTROY:		REGISTERS A,F,B,C,D,E,H,L,IX\r
;\r
OGEPA3	MACRO	#CHAN\r
	NLIST	M\r
;################### Ogepa3 macro ###################################\r
	NLIST	S\r
	IF	#CHAN.EQ.6\r
	LIST	S	;+++++ #CHAN = 6\r
	LD	A,(PANCO)\r
	NLIST	S\r
	ENDIF\r
	IF	#CHAN.EQ.7\r
	LIST	S	;+++++ #CHAN = 7\r
	LD	A,(PANCOM)\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	CP	0		;TEST IF DELEGATION IS ESTABLISHED\r
	SCF\r
	CCF\r
	JP	Z,A#$YM		;IF YES THEN\r
	LD	A,#CHAN\r
	LD	H,A		;FIND ADDRESS OF EMPTY BUFFER QUEUE\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
				;TEST IF QUEUE WAS EMPTY\r
	JP	NC,B#$YM	;IF NO THEN\r
	PUSH	DE\r
	POP	IX\r
	LD	(IX+2),1	;SET BYTECOUNT = 1\r
	NLIST	S\r
	IF	#CHAN.EQ.6\r
	LIST	S	;+++++ #CHAN = 6\r
	LD	A,(PANCO)\r
	NLIST	S\r
	ENDIF\r
	IF	#CHAN.EQ.7\r
	LIST	S	;+++++ #CHAN = 7\r
	LD	A,(PANCOM)\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	LD	(IX+8),A	;LOAD DELEGATED PANEL CODE INTO FIRST DATABYTE\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
	LD	(IX+5),H	;\r
	CP	A		;SET Z-FLAG\r
	SCF			;SET C-FLAG\r
	JP	A#$YM+2		\r
				;ENDIF\r
				;\r
B#$YM:	CP	A		;SET Z-FLAG\r
	SCF\r
	CCF			;RESET C-FLAG\r
	JP	A#$YM+2		;\r
				;ENDIF\r
A#$YM:	CP	1		;RESET Z-FLAG\r
;\r
;################### End macro #######################################\r
	LIST	M\r
	ENDM\r
;\r
;\r
;************************************************************************\r
;                          O G E P A 2\r
;                       VERSION 801127/CGR\r
;************************************************************************\r
;\r
; DESCRIPTION:		THIS MACRO DEQUEUES A BUFFER FROM THE EMPTY BUFFER\r
;			QUEUE ASSIGNED TO THE DELEGATED CR80.\r
;\r
; ENTRY:		NONE\r
;\r
; EXIT:			CY=0 IF THE QUEUE WAS EMPTY\r
;			CY=1 IF THE QUEUE WAS NOT EMPTY\r
;			ADDRESS OF BUFFERELEMENT IN DE REGISTER.\r
;\r
; PARAMETERS:		NONE\r
;\r
; EXTERNALS:		CR80NO, SUBDEQ, QHEADS\r
;\r
; DESTROY:		REGISTERS A,F,B,C,D,E,H,L,IX\r
;\r
;\r
OGEPA2	MACRO\r
	NLIST	M\r
;#################### Ogepa2 macro ###########################\r
	LD	A,(CR80NO)	;FIND ADDRESS OF EMPTY BUFFER 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
	LIST	M\r
	ENDM\r
;\r
;\r
;\r
;\r
;\r
;************************************************************************\r
;                          O D E P A 1\r
;                       VERSION 801129/CGR\r
;************************************************************************\r
;\r
ODEPA1	MACRO	#EI,#BSIZE\r
	NLIST	M\r
				;DESCRIP: THE MACRO ENQUEUES AN 'OUTGOING'\r
				;         ELEMENT IN THE CHANNEL QUEUE.\r
				;	  IF TRANSMISSION CANCELED FLAG IS\r
				;	  SET, THE BUFFER IS ENQUEUED IN\r
				;	  THE OUTGOING EMPTY BUFFER QUEUE.\r
				;ENTRY:	ADDRESS OF ELEMENT IN REG DE\r
				;EXIT: CY=1 IF QUEUE WAS NOT EMPTY\r
				;      CY=0 IF QUEUE WAS EMPTY\r
				;      ADDRESS OF ELEMENT IN REG DE\r
				;DESTROY: REG A,F,B,C,H,L,IX\r
				;\r
				;PARAMETERS: #BSIZE = BUFFERSIZE\r
				;	     #EI: Y RE-ENABLES INTERRUPT\r
				;	          N INTERRUPT IS DISABLED AT MACRO EXIT.\r
				;	          NOTE! INTERRUPT IS NOT AFFECTED\r
				;		  IF TRANSMISSION WAS CANCELED.\r
				;\r
				;EXTERNALS: QHEADS,SUBENQ,ECOND1\r
				;\r
;################ Odepa1 macro ####################################\r
	PUSH	DE		;\r
	PUSH	DE		;\r
	POP	IX		;\r
	LD	HL,23		;REFORMAT BUFFER\r
	ADD	HL,DE		;\r
	EX	DE,HL		;\r
	LD	HL,2		;\r
	ADD	HL,DE		;\r
	EX	DE,HL		;\r
	LD	B,0		;\r
	LD	C,(IX+2)	;\r
	LDDR			;\r
	LD	(IX+8),#BSIZE	;RESTORE BUFFERSIZE\r
	LD	(IX+9),0	;\r
	LD	L,(IX+4)	;INCREMENT DATABUFFER ADDRESS 2 TIMES.\r
	LD	H,(IX+5)	;\r
	INC	HL		;\r
	INC	HL		;\r
	LD	(IX+4),L	;\r
	LD	(IX+5),H	;\r
	LD	A,(IX+2)	;TEST IF BUFFER IS THE LAST IN TRANSMISSION\r
	LD	HL,ECOND1	;\r
	CP	#BSIZE\r
	JP	Z,C#$YM		;   IF YES THEN\r
	SET	7,(HL)		;      SET BIT 7 IN ECOND1\r
	JP	D#$YM		;   ELSE\r
C#$YM:	RES	7,(HL)		;      RESET BIT 7 IN ECOND1\r
				;   ENDIF\r
D#$YM:	LD	A,(HL)		;TEST IF TRANSMISSION IS CANCELED\r
	BIT	6,A\r
	JP	A#$YM		;IF YES THEN\r
				;   BEGIN\r
	LD	A,(IX+2)	;      TEST IF BUFFER IS THE LAST IN TRANSMISSION\r
\r
	CP	#BSIZE\r
	JP	Z,B#$YM		;      IF YES THEN\r
	RES	6,(HL)		;	 RESET BIT 6 IN ECOND2\r
				;      ENDIF\r
B#$YM:	LD	(IX+2),0	;      RESET BYTECOUNT\r
	LD	(IX+3),0	;\r
	LD	A,(IX-2)	;      ENQUEUE BUFFER IN OUTGOINIG EMPTY BUFFER 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
	POP	DE\r
	CALL	SUBENQ		;\r
;\r
				;   END\r
				;ELSE\r
A#$YM:	LD	A,(IX-2)  	;   BEGIN\r
	POP	DE		;      ENQUEUE BUFFER IN CHANNEL QUEUE\r
	CALL	ODEPA		;\r
	IF	'#EI'.EQ.'Y'\r
	EI			;   END\r
	ENDIF			;ENDIF\r
;################# End macro #####################################\r
	LIST	M\r
	ENDM\r
;\r
;\r
;\r
;\r
;************************************************************************\r
;                          O D E P A I\r
;                       VERSION 801127/CGR\r
;************************************************************************\r
;\r
ODEPAI	MACRO\r
	NLIST	M\r
				;DESCRIP: THE MACRO ENQUEUES AN 'OUTGOING'\r
				;         ELEMENT IN THE OUTGOING EMPTY BUFFER QUEUE.\r
				;	  THE MACRO CAN ONLY BE USED BY INITIALIZING\r
				;	  DUE TO THE LACK OF FORMAT ADJUSTMENT\r
				;ENTRY:	ADDRESS OF ELEMENT IN REG DE\r
				;       CHANNEL NO. IN REG A.\r
				;EXIT: CY=1 IF QUEUE WAS NOT EMPTY\r
				;      CY=0 IF QUEUE WAS EMPTY\r
				;      ADDRESS OF ELEMENT IN REG DE\r
				;DESTROY: REG A,F,B,C,D,E,H,L,IX\r
				;\r
				;PARAMETERS: NONE\r
				;EXTERNALS: QHEADS,SUBENQ\r
				;\r
;################ Odepai macro ####################################\r
	PUSH	DE		;FIND EMPTY BUFFER 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
	POP	DE\r
	CALL	SUBENQ		;ENQUEUE BUFFER\r
;\r
;################# End macro #####################################\r
	LIST	M\r
	ENDM\r
;\r
;\r
	LIST	S\r
;\r