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

⟦922ce6c47⟧ TextFile

    Length: 66227 (0x102b3)
    Types: TextFile
    Names: »DDP.MAC«

Derivation

└─⟦755b1f38b⟧ Bits:30005549 8" CR80 Floppy CR80FD_0032 ( TELECINE Source and Abs-files )
└─⟦755b1f38b⟧ Intel_ISIS_II
    └─ ⟦this⟧ »DDP.MAC« 
└─⟦8347abc8e⟧ Bits:30005501 8" CR80 Floppy CR80FD_0033 ( ATR Source and Abs-files )
└─⟦8347abc8e⟧ Intel_ISIS_II
    └─ ⟦this⟧ »DDP.MAC« 
└─⟦af81bc460⟧ Bits:30005550 8" CR80 Floppy CR80FD_0034 ( MATRIX Source and Abs-files )
└─⟦af81bc460⟧ Intel_ISIS_II
    └─ ⟦this⟧ »DDP.MAC« 

TextFile

;***************************************************\r
;*                                                 *\r
;*        DISTRIBUTION AND DELEGATION PROCESS      *\r
;*          DDPROC MACRO, VERSION 810609/CGR       *\r
;*					           *\r
;***************************************************\r
;\r
;\r
	PUBLIC	DEVNUM\r
;\r
	NLIST	S\r
;\r
VDUD	EQU	01\r
VDUO	EQU	02\r
VDUA	EQU	03\r
PRINTER	EQU	04\r
RCDP	EQU	05\r
RCPM1	EQU	06\r
RCPM2	EQU	07\r
RCPVTR	EQU	08\r
MATRIX	EQU	09\r
CNRMIXER	EQU	10\r
ST5MIXER	EQU	11\r
PREEDIT	EQU	12\r
VTR	EQU	13\r
VCR	EQU	14\r
DIA	EQU	15\r
TELECINE	EQU	16\r
KGEN	EQU	17\r
ATR	EQU	18\r
SLOMO	EQU	19\r
;\r
;\r
DDPROC	MACRO	#DEVTYP,#INTIME,#OUTTIM,#RAM1K\r
;\r
	LIST	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
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
	NLIST	S\r
;\r
	IF	#DEVTYP.EQ.VDUD\r
	LIST	S\r
F11:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.VDUO\r
	LIST	S\r
F12:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.VDUA\r
	LIST	S\r
F13:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.PRINTER\r
	LIST	S\r
F2:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.RCDP\r
	LIST	S\r
F3:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.RCPM1\r
	LIST	S\r
F4:	DEFL	1\r
F41:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.RCPM2\r
	LIST	S\r
F4:	DEFL	1\r
F42:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.RCPVTR\r
	LIST	S\r
F4:	DEFL	1\r
F43:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.MATRIX\r
	LIST	S\r
F5:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.CNRMIXER\r
	LIST	S\r
F61:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.ST5MIXER\r
	LIST	S\r
F62:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.PREEDIT\r
	LIST	S\r
F7:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.VTR\r
	LIST	S\r
F8:	DEFL	1\r
F81:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.VCR\r
	LIST	S\r
F8:	DEFL	1\r
F82:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.DIA\r
	LIST	S\r
F8:	DEFL	1\r
F83:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.TELECINE\r
	LIST	S\r
F8:	DEFL	1\r
F84:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.KGEN\r
	LIST	S\r
F8:	DEFL	1\r
F85:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.ATR\r
	LIST	S\r
F8:	DEFL	1\r
F86:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.SLOMO\r
	LIST	S\r
F8:	DEFL	1\r
F87:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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
;>>>>>>>>>>>>>>>>>>>>>>>>>  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
EHSCAN:	DS	1\r
DEVNUM:	DS	1\r
SPARE:	DS	161		;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
EHSCAN:	DS	1\r
DEVNUM:	DS	1\r
SPARE:	DS	161		;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	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
BUFRAM:	DS	20H*(NOBUF-NOBUFOUT)\r
	DS	50H*NOBUFOUT\r
	NLIST	S\r
	ENDIF\r
	IF	F5.EQ.1\r
	LIST	S	;+++++ MATRIX\r
BUFRAM:	DS	20H*NOBUFIN\r
	DS	80H*NOBUFOUT\r
	NLIST	S\r
	ENDIF\r
;\r
;\r
	IF	(F3.OR.F5).EQ.0\r
	LIST	S	;+++++ # RCDP & MATRIX\r
	NLIST	S\r
	IF	NOBUF.LT.33\r
	LIST	S\r
BUFRAM:	DS	NOBUF*20H\r
	NLIST	S\r
	ENDIF\r
	IF	NOBUF.GT.32\r
	LIST	S\r
BUFRAM:	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
	ENDIF\r
;\r
	LIST	S\r
;\r
;>>>>>>>>>>>>>>>>>>>>  E N D    O F    R A M    M A P  <<<<<<<<<<<<<<<<<<<<<\r
;\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
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
CRIDSP:	DB	22H\r
	DB	00H\r
	DB	33H\r
	DB	00H\r
	DB	44H\r
	DB	00H\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
CRIDSP:	DW	0\r
	DW	0\r
	DW	0\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	NLIST	S\r
	IF	(F4.OR.F8).EQ.1\r
	LIST	S		;+++++RCP OR RCP CONTROLLED DEVICE\r
	DB	55H\r
	DB	00H\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    C H A N N E L S (TIMERS, INP. PERMIT, START)<<<<<<\r
;\r
;\r
	NLIST	S\r
	IF	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
	LD	E,2\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.0\r
	LIST	S	;+++++ #RCDP\r
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	LD	E,20H\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	E,50H\r
	NLIST	S\r
	ENDIF\r
	ENDIF\r
	LIST 	S\r
	LD	C,#INTIME.AND.7FH\r
	LD	B,0\r
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	LD	D,NOCH-2\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	D,NOCH-5\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	LD	A,6\r
TLOOP1:	PUSH	AF\r
	PUSH	BC\r
	PUSH	DE\r
	LD	D,0\r
TL1:	CALL	COMM		;ING. TIMER\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
	PUSH	DE\r
	LD	D,0\r
	LD	A,9\r
TL1A:	CALL	COMM		;INPUT PERMIT\r
	BIT	7,A\r
	JP	NZ,TL1A\r
	POP	DE\r
	PUSH	DE\r
	LD	D,0\r
	LD	A,8\r
TL1B:	CALL	COMM 		;START INPUTTER\r
	BIT	7,A\r
	JP	NZ,TL1B\r
	POP	DE\r
	PUSH	DE\r
	LD	D,0\r
	LD	A,5\r
TL1C:	CALL	COMM		;START OUTPUTTER\r
	BIT	7,A\r
	JP	NZ,TL1C\r
	POP	DE\r
	POP	BC\r
	NLIST	S\r
	IF	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
	INC	E\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.0\r
	LIST	S	;+++++ #RCDP\r
	LD	A,10H\r
	ADD	A,E\r
	LD	E,A\r
	NLIST	S\r
	ENDIF\r
	LIST 	S\r
	POP	AF\r
	DEC	D\r
	JP	NZ,TLOOP1\r
;\r
;\r
	NLIST	S\r
	IF	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
	LD	E,2\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.0\r
	LIST	S	;+++++ #RCDP\r
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	LD	E,20H\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	E,50H\r
	NLIST	S\r
	ENDIF\r
	ENDIF\r
	LIST 	S\r
	LD	C,#OUTTIM.AND.7FH\r
	LD	B,0\r
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	LD	D,NOCH-2\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	D,NOCH-5\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	LD	A,7\r
TLOOP3:	PUSH	AF\r
	PUSH	BC\r
	PUSH	DE\r
	LD	D,0\r
TL3:	CALL	COMM		;OUTG. TIMER\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
	NLIST	S\r
	IF	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
	INC	E\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.0\r
	LIST	S	;+++++ #RCDP\r
	LD	A,10H\r
	ADD	A,E\r
	LD	E,A\r
	NLIST	S\r
	ENDIF\r
	LIST 	S\r
	POP	AF\r
	DEC	D\r
	JP	NZ,TLOOP3\r
;\r
;\r
;>>>>>>>>>>>>>>  E N D    O F    C H A N N E L    I N I T .  <<<<<<<<<<<<<<\r
;\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
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	LD	L,2\r
	EXX\r
	LD	L,2\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	L,5\r
	EXX\r
	LD	L,5\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	EXX\r
	NLIST	S\r
	IF	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
				;***** PRESET BUFFERHEADS CH. 2-4 *****\r
BLOOP5:	LD	B,(IY+0)\r
				;\r
				;INGOING BUFFERS\r
				;\r
BLOOP6:	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
	LD	(IX+8),10H\r
	LD	(IX+9),0\r
	LD	DE,20H\r
	ADD	IX,DE\r
	INC	C\r
	DEC	B\r
	JP	NZ,BLOOP6\r
				;\r
				;OUTGOING BUFFERS\r
				;\r
	EXX\r
	INC	IY\r
	LD	B,(IY+0)\r
BLOOP7:	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
	LD	(IX+8),64\r
	LD	(IX+9),0\r
	LD	DE,50H\r
	ADD	IX,DE\r
	EXX\r
	INC	C\r
	EXX\r
	DEC	B\r
	JP	NZ,BLOOP7\r
	INC	L\r
	EXX\r
	INC	L\r
	INC	IY\r
	LD	A,NOBUFIN+NOBUFOUT\r
	CP	C\r
	JP	NZ,BLOOP5\r
				;***** PRESET BUFFERHEADS CH. 5-39 *****\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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	F5.EQ.0\r
	LIST	S	;+++++ #MATRIX\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
	NLIST	S\r
	IF	#RAM1K.GT.0\r
	LIST	S\r
	LD	HL,BUFRAM+#RAM1K*800H-800H\r
	NLIST	S\r
	ENDIF\r
	IF	#RAM1K.EQ.0\r
	LIST	S\r
	LD	HL,BUFRAM\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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
	NLIST	S\r
	IF	#RAM1K.GT.0\r
	LIST	S\r
DM1A:	LD	HL,BUFRAM+#RAM1K*800H-800H\r
	NLIST	S\r
	ENDIF\r
	IF	#RAM1K.EQ.0\r
	LIST	S\r
DM1A:	LD	HL,BUFRAM\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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
	NLIST	S\r
	ENDIF\r
	IF	F5.EQ.1\r
	LIST	S	;+++++ MATRIX\r
	LD	(IX+8),10H\r
	LD	(IX+9),0\r
	LD	DE,20H\r
	ADD	IX,DE\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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	F5.EQ.0\r
	LIST	S	;+++++ #MATRIX\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
	NLIST	S\r
	IF	#RAM1K.GT.0\r
	LIST	S\r
	LD	HL,BUFRAM+#RAM1K*800H-800H\r
	NLIST	S\r
	ENDIF\r
	IF	#RAM1K.EQ.0\r
	LIST	S\r
	LD	HL,BUFRAM\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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
	NLIST	S\r
	IF	#RAM1K.GT.0\r
	LIST	S\r
DM3A:	LD	HL,BUFRAM+#RAM1K*800H-800H\r
	NLIST	S\r
	ENDIF\r
	IF	#RAM1K.EQ.0\r
	LIST	S\r
DM3A:	LD	HL,BUFRAM\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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
	NLIST	S\r
	ENDIF\r
	IF	F5.EQ.1\r
	LIST	S	;+++++ MATRIX\r
	LD	(IX+8),112\r
	LD	(IX+9),0\r
	LD	DE,80H\r
	ADD	IX,DE\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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		;\r
	LD	DE,BUFRAM+2		;\r
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	LD	A,2			;\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	A,5\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	PUSH	AF			;\r
	NLIST	S\r
	IF	F3.EQ.0\r
	LIST	S	;+++++ #RCDP\r
	LD	B,NOBUF\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
					;***** BUFFER CHAINING CH. 2-4 *****\r
	LD	B,NOBUFIN+NOBUFOUT\r
CLOOP5:	LD	C,(IX+0)		;INGOING BUFFERS\r
CLOOP6:	POP	AF			;\r
	PUSH	AF			;\r
	PUSH	BC			;\r
	PUSH	DE			;\r
	CALL	IDEPA			;\r
	POP	DE			;\r
	POP	BC			;\r
	LD	HL,20H			;\r
	ADD	HL,DE			;\r
	EX	DE,HL			;\r
	DEC	B			;\r
	DEC	C			;\r
	JP	NZ,CLOOP6		;\r
;\r
;\r
	INC	IX			;\r
;\r
CLOOP7:	LD	C,(IX+0)		;OUTGOING BUFFERS\r
	POP	AF			;\r
CLOOP8:	PUSH	AF			;\r
	PUSH	BC			;\r
	PUSH	DE			;\r
	ODEPAI				;\r
	POP	DE			;\r
	POP	BC			;\r
	LD	HL,50H			;\r
	ADD	HL,DE			;\r
	EX	DE,HL			;\r
	POP	AF			;\r
	DEC	B			;\r
	DEC	C			;\r
	JP	NZ,CLOOP8		;\r
;\r
	INC	IX			;\r
	INC	A			;\r
	PUSH	AF			;\r
	LD	A,0			;\r
	CP	B			;\r
	JP	NZ,CLOOP5		;\r
	LD	B,NOBUF-NOBUFIN-NOBUFOUT\r
					;***** BUFFER CHAINING CH. 5-39 *****\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
CLOOP1:	LD	C,(IX+0)		;INGOING BUFFERS\r
CLOOP2:	POP	AF			;\r
	PUSH	AF			;\r
	PUSH	BC			;\r
	PUSH	DE			;\r
	CALL	IDEPA			;\r
	POP	DE			;\r
	POP	BC			;\r
	NLIST	S\r
	IF	F5.EQ.0\r
	LIST	S	;+++++ #MATRIX\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
	NLIST	S\r
	IF	#RAM1K.GT.0\r
	LIST	S\r
	LD	HL,BUFRAM+#RAM1K*800H-800H\r
	NLIST	S\r
	ENDIF\r
	IF	#RAM1K.EQ.0\r
	LIST	S\r
	LD	HL,BUFRAM\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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
	NLIST	S\r
	IF	#RAM1K.GT.0\r
	LIST	S\r
	LD	HL,BUFRAM+#RAM1K*800H-800H\r
	NLIST	S\r
	ENDIF\r
	IF	#RAM1K.EQ.0\r
	LIST	S\r
	LD	HL,BUFRAM\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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
	NLIST	S\r
	ENDIF\r
	IF	F5.EQ.1\r
	LIST	S	;+++++ MATRIX\r
	LD	HL,20H			;\r
	ADD	HL,DE			;\r
	EX	DE,HL			;\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DM8:	DEC	B			;\r
	DEC	C			;\r
	JP	NZ,CLOOP2		;\r
;\r
;\r
	INC	IX			;\r
CLOOP3:	LD	C,(IX+0)		;OUTGOING BUFFERS\r
	POP	AF			;\r
CLOOP4:	PUSH	AF			;\r
	PUSH	BC			;\r
	PUSH	DE			;\r
	ODEPAI				;\r
	POP	DE			;\r
	POP	BC			;\r
	NLIST	S\r
	IF	F5.EQ.0\r
	LIST	S	;+++++ #MATRIX\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
	NLIST	S\r
	IF	#RAM1K.GT.0\r
	LIST	S\r
	LD	HL,BUFRAM+#RAM1K*800H-800H\r
	NLIST	S\r
	ENDIF\r
	IF	#RAM1K.EQ.0\r
	LIST	S\r
	LD	HL,BUFRAM\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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
	NLIST	S\r
	IF	#RAM1K.GT.0\r
	LIST	S\r
	LD	HL,BUFRAM+#RAM1K*800H-800H\r
	NLIST	S\r
	ENDIF\r
	IF	#RAM1K.EQ.0\r
	LIST	S\r
	LD	HL,BUFRAM\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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
	NLIST	S\r
	ENDIF\r
	IF	F5.EQ.1\r
	LIST	S	;+++++ MATRIX\r
	LD	HL,80H			;\r
	ADD	HL,DE			;\r
	EX	DE,HL			;\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DM6:	POP	AF			;\r
	DEC	B			;\r
	DEC	C			;\r
	JP	NZ,CLOOP4		;\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).EQ.1\r
	LIST	S		;+++++VDU-D OR PRINTER\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	F8.EQ.1\r
	LIST	S		;+++++RCP CONTROLLED DEVICE\r
	LD	D,4\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S		;+++++ RCP\r
	LD	D,1\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.1\r
	LIST	S		;+++++RCDP\r
	LD	D,37\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
	LD	E,2\r
	LD	HL,CRIDSP\r
	NLIST	S\r
	ENDIF\r
	IF	(F3.OR.F4).EQ.0\r
	LIST	S	;+++++ #RCDP & RCP\r
	LD	E,20H\r
	LD	HL,CRIDSP\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	E,50H\r
	LD	HL,CRIDSP+6\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
LP1:	LD	C,(HL)\r
	INC	HL\r
	LD	B,(HL)\r
	LD	A,E\r
	NLIST	S\r
	IF	F3.EQ.0\r
	LIST	S	;+++++ #RCDP\r
	CP	55H\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
	CP	5\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	JP	P,LP3\r
	LD	A,(DEVNUM)\r
	LD	B,A\r
LP3:	LD	A,3\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
	NLIST	S\r
	IF	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
	INC	E\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.0\r
	LIST	S	;+++++ #RCDP\r
	LD	A,10H\r
	ADD	A,E\r
	LD	E,A\r
	NLIST	S\r
	ENDIF\r
	LIST 	S\r
	POP	HL\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
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	LD	A,2		;SEND RESTART IND. TO CR80 (AND RCDP)\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	A,5		;SEND RESTART IND. TO RCDP\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
RSTIND:	PUSH	AF\r
	OGEPAI			;\r
	JP	NC,RSTM1 	;\r
	PUSH	DE		;\r
	POP	IX		;\r
	LD	(IX+2),2	;LOAD BYTECOUNT\r
	LD	(IX+10),0EFH	;LOAD MESSAGECODE\r
	LD	A,(DEVNUM)	;\r
	LD	(IX+11),A	;LOAD OWN DEVICE NO.\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
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	LD	L,NOCH-2	;SCANNING RESTART\r
	LD	A,2\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	L,NOCH-5	;SCANNING RESTART\r
	LD	A,5\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	PUSH	AF\r
	PUSH	HL\r
	CALL	IG1		;DEQUEUE NEXT CHANNEL QUEUE\r
	JP	NC,DDM2		;IF CHANNEL WAS NOT EMPTY THEN\r
				;BEGIN\r
DDM3:	POP	HL\r
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	LD	L,NOCH-2\r
	NLIST	S\r
	ENDIF\r
	IF 	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	L,NOCH-5\r
	NLIST	S\r
	ENDIF\r
	LIST	S\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
	NLIST	S\r
	IF 	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	LD	A,2		;         LOAD CHANNEL 2\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	LD	A,5		;	  LOAD CHANNEL 5\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
				;         ENDIF\r
DDM4:	PUSH	AF\r
	PUSH	HL\r
	CALL	IG1		;      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 EMPTY (BYTECOUNT # 0)\r
	JP	Z,DDM5		;OR  CONTAINS AN ERROR MESSAGE\r
	LD	BC,5		;\r
	ADD	HL,BC		;\r
	LD	A,(HL)		;\r
	AND	0CH		;\r
	CP	0		;\r
	JP	NZ,DDM5		;IF YES THEN EXIT\r
	INC	HL		;\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:	CALL	ID1		;   ENQUEUE Q-ELEMENT IN EMP.BUF.QUEUE\r
	RET			;   RETURN TO SCAN ROUTINE\r
				;END\r
				;ELSE\r
				;BEGIN\r
				;\r
DDM6:   SLA	C		;LOAD (MESSAGE CODE LIST NO.)*2\r
	LD	HL,3		;INTO BYTE 5 IN BUFFER\r
	ADD	HL,DE		;\r
	LD	(HL),C		;\r
	LD      HL,TABL1+NUMMES*3-1  ;FIND PROCESS NO./ROUTINE ADDRESS IN TABL1\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	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
	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,4\r
	CPIR			;TEST IF MESSAGE CODE WAS ILLEGAL\r
	JP      NZ,RTEXIT	;IF YES THEN GOTO EXIT ROUTINE\r
				;ENDIF\r
	LD      HL,RTABL+0AH	;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      80H\r
	DB      84H\r
	DB      0E4H\r
	DW      ROUT1\r
	DW      ROUT3\r
	DW      ROUT5\r
	DW      ROUT6B\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.F4.OR.F5).EQ.0\r
	LIST	S	;+++++#RCDP, RCP & MATRIX\r
;***** 'SET CR80 CHANNEL' ROUTINE ************************\r
;\r
ROUT2:  PUSH    DE\r
	POP     IX		;Q-ELEMENT POINTER\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	109\r
DDM31:	RLCA\r
	RLCA\r
	RLCA\r
	RLCA\r
	CPL\r
	AND	0F0H\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.LOW.\r
	JP	DDM34\r
DDM32:	CP	2\r
	JP	NZ,DDM33\r
	LD	C,DIS2.LOW.\r
	JP	DDM34\r
DDM33:	CP	3\r
	JP	NZ,DDM38\r
	LD	C,DIS3.LOW.\r
	NLIST	S\r
	ENDIF\r
	IF	F41.EQ.1\r
	LIST	S	;+++++RCP(M I)\r
	CP	106		;FIND CHARACTER TO BE DISPLAYED\r
	JP	Z,DDM30\r
	CP	108\r
	JP	Z,DDM30\r
	CP	15H\r
	JP	Z,DDM30\r
	LD	A,0E0H\r
	JP	DDM31\r
DDM30:	LD	A,0D0H\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.LOW.\r
	JP	DDM34\r
DDM32:	CP	1AH\r
	JP	NZ,DDM33\r
	LD	C,TPDIS.LOW.\r
	JP	DDM34\r
DDM33:	CP	22H\r
	JP	NZ,DDM35\r
	LD	C,TMDIS.LOW.\r
	JP	DDM34\r
DDM35:	CP	2AH\r
	JP	NZ,DDM36\r
	LD	C,DDIS.LOW.\r
	JP	DDM34\r
DDM36:	CP	31H\r
	JP	NZ,DDM38\r
	LD	C,SDIS.LOW.\r
	NLIST	S\r
	ENDIF\r
	IF	F42.EQ.1\r
	LIST	S	;+++++RCP(M II)\r
	CP	106		;FIND CHARACTER TO BE DISPLAYED\r
	JP	Z,DDM30\r
	CP	108\r
	JP	Z,DDM30\r
	CP	15H\r
	JP	Z,DDM30\r
	CP	18H\r
	JP	Z,DDM30\r
	CP	1AH\r
	JP	Z,DDM30\r
	LD	A,0E0H\r
	JP	DDM31\r
DDM30:	LD	A,0D0H\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.LOW.\r
	JP	DDM34\r
DDM32:	CP	19H\r
	JP	NZ,DDM33\r
	LD	C,TPDIS.LOW.\r
	JP	DDM34\r
DDM33:	CP	21H\r
	JP	NZ,DDM35\r
	LD	C,TMDIS.LOW.\r
	JP	DDM34\r
DDM35:	CP	29H\r
	JP	NZ,DDM36\r
	LD	C,DDIS.LOW.\r
	JP	DDM34\r
DDM36:	CP	11H\r
	JP	NZ,DDM37\r
	LD	C,ADIS.LOW.\r
	JP	DDM34\r
DDM37:	CP	9\r
	JP	NZ,DDM38\r
	LD	C,VDIS.LOW.\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	DE,70H		;\r
	LD	A,8		;	RESET CHANNEL 7\r
W1A:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W1A		;\r
	LD	A,5		;\r
W1B:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W1B		;\r
	LD	C,IDLSBM\r
	LD	B,(IX+9)\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
	PUSH	BC		;\r
	LD	A,8		;	RESET CHANNEL 6\r
W2A:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W2A		;\r
	LD	A,5		;\r
W2B:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W2B		;\r
	POP	BC		;\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
	PUSH	BC		;\r
	LD	A,8		;RESET SPECIFIED CHANNEL\r
W3A:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W3A		;\r
	LD	A,5		;\r
W3B:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W3B		;\r
	POP	BC		;\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+0AH)	;\r
	LD	A,B		;\r
	CP	0C8H		;TEST IF DELEGATION IS TO VTRA\r
	JP	Z,DDM44		;IF NO THEN\r
	PUSH	BC		;BEGIN\r
	LD	A,8		; RESET NORMAL CHANNEL\r
W4A:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W4A		;\r
	LD	A,5		;\r
W4B:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W4B		;\r
	POP	BC		;\r
	LD	A,3		;\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
	PUSH	BC		;\r
	LD	A,8		;RESET VTR6 CHANNEL\r
W5A:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W5A		;\r
	LD	A,5		;\r
W5B:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W5B		;\r
	POP	BC		;\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
	PUSH	BC		;\r
	LD	A,8		;RESET VTR7 CHANNEL\r
W6A:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W6A		;\r
	LD	A,5		;\r
W6B:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W6B		;\r
	POP	BC		;\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
	PUSH	BC		;\r
	LD	A,8		;RESET VTR8 CHANNEL\r
W7A:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W7A		;\r
	LD	A,5		;\r
W7B:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W7B		;\r
	POP	BC		;\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      F81.EQ.1\r
	LIST	S	;+++++VTR\r
;******** 'ESTABLISH DELEGATION TO VTRA' ROUTINE *****************\r
;\r
ROUT4:	LD	A,(DEVNUM)	;\r
	CP	115		;\r
	JP	M,RTEXIT	;\r
	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
	PUSH	AF		;\r
	LD	B,0		;\r
	LD	A,(DEVNUM)	;\r
	CP	115		;\r
	JP	Z,DDM48A	;\r
	LD	B,10H		;\r
	CP	116		;\r
	JP	Z,DDM48A	;\r
	LD	B,20H		;\r
DDM48A:	POP	AF		;\r
	ADD	A,B		;\r
	PUSH	DE\r
	LD	C,A		;\r
	LD	B,(IX+9)	;\r
	LD	DE,60H\r
	PUSH	BC		;\r
	LD	A,8		;RESET CHANNEL 6\r
W8A:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W8A		;\r
	LD	A,5		;\r
W8B:	CALL	COMM		;\r
	BIT	7,A		;\r
	JP	NZ,W8B		;\r
	POP	BC		;\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
	JP	ROUT6		;\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.LOW.\r
	JP	DDM25\r
DDM23:	CP	2\r
	JP	NZ,DDM24\r
	LD	C,DIS2.LOW.\r
	JP	DDM25\r
DDM24:	CP	3\r
	JP	NZ,DDM28\r
	LD	C,DIS3.LOW.\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.LOW.\r
	JP	DDM27\r
DDM23:	CP	1AH\r
	JP	NZ,DDM24\r
	LD	C,TPDIS.LOW.\r
	JP	DDM27\r
DDM24:	CP	22H\r
	JP	NZ,DDM25\r
	LD	C,TMDIS.LOW.\r
	JP	DDM27\r
DDM25:	CP	2AH\r
	JP	NZ,DDM26\r
	LD	C,DDIS.LOW.\r
	JP	DDM27\r
DDM26:	CP	31H\r
	JP	NZ,DDM28\r
	LD	C,SDIS.LOW.\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.LOW.\r
	JP	DDM29\r
DDM23:	CP	19H\r
	JP	NZ,DDM24\r
	LD	C,TPDIS.LOW.\r
	JP	DDM29\r
DDM24:	CP	21H\r
	JP	NZ,DDM25\r
	LD	C,TMDIS.LOW.\r
	JP	DDM29\r
DDM25:	CP	29H\r
	JP	NZ,DDM26\r
	LD	C,DDIS.LOW.\r
	JP	DDM29\r
DDM26:	CP	11H\r
	JP	NZ,DDM27\r
	LD	C,ADIS.LOW.\r
	JP	DDM29\r
DDM27:	CP	9\r
	JP	NZ,DDM28\r
	LD	C,VDIS.LOW.\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
	NLIST	S\r
	IF	(F41.OR.F42).EQ.1\r
	LIST	S	;+++++ RCP (MI) OR (MII)\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
	ENDIF\r
	IF	F43.EQ.1\r
	LIST	S	;+++++ RCP(VTR)\r
	PUSH	DE		;\r
W10:	CALL	COMM		;CLOSE VTR6-CHANNEL\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
	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
ROUT6B:	PUSH	DE	;\r
	LD	A,5	;START OUTPUTTER, CH. 5\r
	LD	DE,50H	;\r
W16A:	CALL	COMM	;\r
	BIT	7,A	;\r
	JP	NZ,W16A	;\r
	POP	DE	;\r
;\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,DDM12A	;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
DDM12A:	PUSH	BC		;\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM12:	PUSH	AF		;\r
				;REPEAT UNTIL EMPTY QUEUE IS FOUND\r
DDM12B:	OGEPA1	5		;GET EMPTY OUTGOING Q-ELEMENT\r
	JP      C,DDM20		;\r
	CALL	SCOMMON		;\r
	EI			;\r
	JP	DDM12B		;END REPEAT\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      Z,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
	POP	BC		;\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
	CP	0		;	IF MATCH-PANEL IS NOT DELEGATED THEN\r
	JP	NZ,DDM22	;\r
	LD	A,20H		;	INSERT MATCH-PANEL 0 CODE\r
				;	ENDIF\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
	CP	0		;IF PROJ-PANEL IS NOT DELEGATED THEN\r
	JP	NZ,DDM22	;\r
	LD	A,18H		;INSERT PROJ-PANEL 0 CODE\r
				;ENDIF\r
				;END\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
DDM22:	LD      (IX+0AH),A	;LOAD PANEL CODE INTO Q-ELEMENT\r
	LD	A,(DEVNUM)	;\r
	LD	(IX+0BH),A	;LOAD OWN TDX DEV.NO. INTO Q-ELEMENT\r
	PUSH	BC\r
	CALL	OD1		;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
ROUT6B:	PUSH	DE	;\r
	LD	A,5	;START OUTPUTTER, CH. 5\r
	LD	DE,50H	;\r
W16A:	CALL	COMM	;\r
	BIT	7,A	;\r
	JP	NZ,W16A	;\r
	POP	DE	;\r
;\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      Z,DDM16		;IF YES THEN\r
	NLIST	S\r
	IF	F43.EQ.1\r
	LIST	S		;+++++RCP(VTR)\r
				;   BEGIN\r
	LD	A,10H		;\r
	ADD	A,E		;\r
	LD	E,A		;\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	Z,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
				;REPEAT UNTIL EMPTY QUEUE IS FOUND\r
DDM18A:	OGEPA1	5		;GET EMPTY OUTGOING Q-ELEMENT\r
	JP      C,DDM19		;\r
	CALL	SCOMMON		;\r
	EI			;\r
	JP	DDM18A		;END REPEAT\r
DDM19:	POP	BC		;\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),C	;LOAD TDX DEVICE NO. INTO Q-ELEMENT\r
	POP     AF\r
	LD      (IX+0AH),A	;LOAD PANEL CODE INTO Q-ELEMENT\r
	LD	A,(DEVNUM)	;\r
	LD      (IX+0BH),A	;LOAD OWN TDX DEVICE NO. INTO Q-ELEMENT\r
	CALL	OD1		;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
ID1:\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
;\r
;********* IGEPA ROUTINE **********\r
;\r
IG1:	IGEPA1	\r
	RET\r
;\r
;***** END OF OGEPA ROUTINE *****\r
;\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
;>>>>>>>>>>>>>>>>> DORCOM.SPC, VERSION 810125/CGR <<<<<<<<<<<<<<<<<<\r
;\r
;\r
;\r
;************************************************************************\r
;                             O G E P A I\r
;                          VERSION 810125/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
;######################## End macro ##############################\r
	LIST	M\r
	ENDM\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
;>>>>>>>>>>>>>> DORCOM.MAC, VERSION 810429/CGR <<<<<<<<<<<<<<<<\r
;\r
;\r
;\r
;************************************************************************\r
;                             I G E P A 1\r
;                          VERSION 810429/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,BFSIZE\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,BFSIZE	;\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 810119/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+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
;                             O G E P A 3\r
;                          VERSION 810127/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
	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+4		\r
				;ENDIF\r
				;\r
B#$YM:	CP	A		;SET Z-FLAG\r
	SCF\r
	CCF			;RESET C-FLAG\r
	JP	A#$YM+4		;\r
				;ENDIF\r
A#$YM:	CP	1		;RESET Z-FLAG\r
	SCF			;RESET C-FLAG\r
	CCF			;\r
;\r
;################### End macro #######################################\r
	LIST	M\r
	ENDM\r
;\r
;\r
;************************************************************************\r
;                          O G E P A 2\r
;                       VERSION 810119/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 810421/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	A,(IX+2)	;REFORMAT BUFFER\r
	ADD	A,7		;\r
	LD	L,A		;\r
	LD	H,0		;\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)  	;\r
	POP	DE		;ENQUEUE BUFFER IN CHANNEL QUEUE\r
	CALL	ODEPA		;\r
				;\r
	IF	'#EI'.EQ.'Y'\r
	EI\r
	ENDIF			;\r
;################# End macro #####################################\r
	LIST	M\r
	ENDM\r
;\r
;\r
;\r
;\r
;\r
;\r
;************************************************************************\r
;                          O D E P A 2\r
;                       VERSION 800218/CGR\r
;************************************************************************\r
;\r
ODEPA2	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
				;	  FIRST, THE MACRO TESTS IF ASSIGNED\r
				;	  CR80 NO. HAS BEEN CHANGED SINCE\r
				;	  THE BUFFER WAS DEQUEUED BY OGEPA.\r
				;	  IF YES, A BUFFER FROM THE CORRECT\r
				;	  CHANNEL IS DEQUEUED AND THE BUFFER\r
				;	  CONTENTS IS TRANSFERRED - NEXT, THE\r
				;	  'OLD' BUFFER IS DELIVERED TO THE\r
				;	  APPROPRIATE EMPTY QUEUE AND FINALLY\r
				;	  THE 'NEW' BUFFER IS TRANSMITTED.\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,D,E,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,CR80NO\r
				;\r
;################ Odepa2 macro ####################################\r
	PUSH	DE		;\r
	PUSH	DE		;\r
	POP	IX		;\r
	LD	A,(IX-2)	;\r
	CP	5		;\r
	JP	P,E#$YM		;\r
	LD	HL,CR80NO	;\r
	CP	(HL)		;\r
	JP	Z,E#$YM		;\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
	PUSH	DE		;\r
	CALL	SUBENQ		;\r
	OGEPA2			;\r
	POP	HL		;\r
	PUSH	DE		;\r
	PUSH	DE		;\r
	LD	BC,#BSIZE+8	;\r
	LDIR			;\r
	POP	IX		;\r
E#$YM:	LD	A,(IX+2)	;REFORMAT BUFFER\r
	ADD	A,7		;\r
	LD	L,A		;\r
	LD	H,0		;\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	Z,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 ECOND1\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
	DI\r
	JP	F#$YM+3		;   END\r
;\r
				;ELSE\r
A#$YM:	LD	A,(IX-2)  	;   BEGIN\r
	POP	DE		;      ENQUEUE BUFFER IN CHANNEL QUEUE\r
F#$YM:	CALL	ODEPA		;\r
				;   END\r
	IF	'#EI'.EQ.'Y'\r
	EI\r
	ENDIF			;ENDIF\r
;################# End macro #####################################\r
	LIST	M\r
	ENDM\r
;\r
;\r
	LIST	S\r
;\r