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

⟦ac11c3293⟧ TextFile

    Length: 25038 (0x61ce)
    Types: TextFile
    Names: »EHP.MAC«

Derivation

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

TextFile

	TITLE	'>>>> ERROR HANDLING PROCESS, MACRO <<<<'\r
	NAME	EHPROC\r
;\r
*************************************************************************\r
*                                                                       *\r
*             E R R O R     H A N D L I N G     P R O C E S S           *\r
*                                                                       *\r
*                         VERSION 810609/CGR                            *\r
*                                                                       *\r
*************************************************************************\r
;\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
VTR6	EQU	14\r
VTR7	EQU	15\r
VTR8	EQU	16\r
VCR	EQU	17\r
DIA	EQU	18\r
TELECINE	EQU	19\r
KGEN	EQU	20\r
ATR	EQU	21\r
SLOMO	EQU	22\r
;\r
;\r
EHPROC	MACRO	#DEVTYP,#TIME,#ETIMNO\r
;\r
;\r
;\r
;\r
	LIST	M\r
;\r
;>>>>>>>>>>>>>  D E F I N E     F L A G S  <<<<<<<<<<<<<<<<\r
;\r
;\r
F1:	DEFL	0	;VDU\r
F11:	DEFL	0	;VDU-D\r
F2:	DEFL	0	;PRINTER\r
F3:	DEFL	0	;RCDP\r
F4:	DEFL	0	;RCP\r
F5:	DEFL	0	;MATRIX\r
F6:	DEFL	0	;MIXER\r
F7:	DEFL	0	;PREEDIT (VCR/VCR)\r
;\r
	NLIST	S\r
;\r
	IF	#DEVTYP.EQ.VDUD\r
	LIST	S\r
F1:	DEFL	1\r
F11:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.VDUO\r
	LIST	S\r
F1:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.VDUA\r
	LIST	S\r
F1:	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
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.RCPM2\r
	LIST	S\r
F4:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.RCPVTR\r
	LIST	S\r
F4:	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
F6:	DEFL	1\r
	NLIST	S\r
	ENDIF\r
	IF	#DEVTYP.EQ.ST5MIXER\r
	LIST	S\r
F6:	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
	LIST	S\r
;\r
;\r
;\r
	NLIST	S\r
	IF	(F1.OR.F2.OR.F7).EQ.1\r
	LIST	S	;+++++ VDU, PRINTER OR PREEDIT\r
BFSIZE:	DEFL	128\r
	NLIST	S\r
	ENDIF\r
	IF	F3.EQ.1\r
	LIST	S	;+++++ RCDP\r
BFSIZE:	DEFL	64\r
	NLIST	S\r
	ENDIF\r
	IF	F5.EQ.1\r
	LIST	S	;+++++ MATRIX\r
BFSIZE:	DEFL	112\r
	NLIST	S\r
	ENDIF\r
	IF	(F1.OR.F2.OR.F3.OR.F5.OR.F7).EQ.0\r
	LIST	S	;+++++ #VDU, PRINTER, RCDP, MATRIX & PREEDIT\r
BFSIZE:	DEFL	16\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;\r
	NLIST	S\r
	IF	(F1.OR.F2.OR.F5.OR.F6.OR.F7).EQ.0\r
	LIST	S	;+++++ # VDU, PRINTER, MATRIX, PREEDIT & MIXER\r
	PUBLIC	ETIMER\r
	NLIST	S\r
	ENDIF\r
	IF	F11.EQ.1\r
	LIST	S	;+++++ VDU-D\r
	PUBLIC	ETIMER\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;\r
	PUBLIC	EHINI,OD1\r
	EXTRN	CR80NO,OGEPA,ODEPA\r
	EXTRN	ECOND1,ECOND2\r
	EXTRN	ERRPAT,LCRID,MCRID\r
	EXTRN	NOCH,INISP,EHSCAN\r
	EXTRN	ESTABR,SUSPND,UPDATE\r
	EXTRN	SYSRAM,SUBENQ,SUBDEQ,SCOMMON\r
	EXTRN	COMM,QHEADS\r
	NLIST	S\r
	IF	F11.EQ.1\r
	LIST	S		;+++++VDU-D\r
	EXTRN	CR80SS\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
	DSEG\r
	DS	64	;PRIVAT STACK\r
EHPSP:	DS	1\r
;\r
	CSEG\r
EHINI:	LD	SP,EHPSP\r
	LD	A,NOCH-1.LOW.	;SET SCANNING POINTER TO HIGHEST CHANNEL NO.\r
	LD	(EHSCAN),A\r
EHBEG:	CALL	SCOMMON\r
	EI\r
;\r
;>>>>>>>>>>>>>>>>>>>>>> POWER STATUS CHANGE <<<<<<<<<<<<<<<<<<<<<<<\r
;\r
EHM2:	LD	DE,ECOND2	;COMPARE 'POWER OFF' INDICATION WITH OLD\r
	LD	A,(DE)		;'POWER OFF' STATUS IN ERRPAT REGISTER.\r
	AND	1\r
	LD	B,A\r
	LD	HL,ERRPAT\r
	LD	A,(HL)\r
	AND	1\r
	CP	B\r
	JP	Z,EHM3		;IF CHANGE THEN\r
	LD	A,1		;   BEGIN\r
	XOR	(HL)		;	REGISTER CHANGE IN ERRPAT REG.\r
	LD	(HL),A\r
	EX	DE,HL\r
	SET	7,(HL)		;	REQUEST TRANSMISSION OF 'ERROR CONDITION'\r
				;   END\r
				;ENDIF\r
;\r
;>>>>>>>>>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\r
;\r
;>>>>>>>>>>>>>>>>>> DEVICE CONTROL ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<<<\r
;\r
EHM3:	LD	HL,ECOND2	;TEST IF A 'DEVICE CONTROL' ERROR HAS\r
	BIT	1,(HL)		;BEEN DETECTED.\r
	JP	Z,EHM4		;IF YES THEN\r
	LD	DE,ERRPAT	;   BEGIN\r
	EX	DE,HL\r
	BIT	1,(HL)		;	TEST IF ERROR IS REGISTERED\r
	JP	NZ,EHM4		;	IF NO THEN\r
				;	   BEGIN\r
	SET	1,(HL)		;		REGISTER ERROR\r
	EX	DE,HL\r
	RES	1,(HL)\r
	SET	7,(HL)		;		REQUEST TRANSMISSION OF \r
				;		'ERROR CONDITION'\r
				;	   END\r
				;	ENDIF\r
				;   END\r
				;ENDIF\r
;\r
;>>>>>>>>>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\r
;\r
;>>>>>>>>>>>>>>>>>>> TRANSMISSION ERROR & OUTGOING SCAN <<<<<<<<<<<<<<<<<<<<<<\r
;\r
EHM4:	LD	A,(EHSCAN)	;START BUFFER SCANNING AT PRESENT CHANNEL NO.\r
EHM4A:	PUSH	AF		;REPEAT UNTIL A NOT EMPTY CHANNEL IS FOUND OR\r
				; ALL CHANNELS HAS BEEN TESTED\r
	CALL	OGEPA		; TEST IF CHANNEL IS EMPTY\r
	JP	C,EHM5		; IF NO THEN EXAMINE BUFFER\r
	POP	AF		;\r
	DEC	A		;\r
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	CP	2		; TEST IF LAST CHANNEL HAS BEEN TESTED\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	CP	5		; TEST IF LAST CHANNEL HAS BEEN TESTED\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	JP	M,EHM15		; IF YES THEN GOTO 'ERROR CONDITION REQUEST' ROUTINE\r
	JP	EHM4A		;END REPEAT\r
EHM5:	DEC	A\r
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	CP	2\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	CP	5\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	JP	P,EHM5B\r
	LD	A,NOCH-1.LOW.	;SET SCANNING POINTER TO HIGHEST CHANNEL NO.\r
	LD	(EHSCAN),A\r
EHM5B:	PUSH	DE		;TEST IF BUFFER CONTAINS ERROR MESSAGE\r
	POP	IX		;\r
	LD	A,(IX+7)	;\r
	AND	0CH		;\r
	CP	4		;\r
	JP	Z,EHM6		;\r
	CP	8		;\r
	JP	Z,EHM6		;IF NO THEN\r
EHM5A:	POP	AF		;   DELIVER BUFFER TO EMPTY QUEUE\r
	PUSH	AF		;\r
	PUSH	DE		;\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
	POP	AF		;\r
	DEC	A		;\r
	CP	2		;   TEST IF LAST CHANNEL HAS BEEN TESTED\r
	JP	P,EHM4A		;   IF NO THEN CONTINUE SCANNING\r
	JP	EHM15		;   GOTO 'ERROR CONDITION REQUEST' ROUTINE\r
EHM6:	POP	AF		;ELSE\r
	PUSH	AF		;\r
	PUSH	DE		;   DELIVER BUFFER TO 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
	POP	DE		;\r
	CALL	SUBENQ		;\r
	POP	AF		;   PROCEED ERROR HANDLING:\r
	NLIST	S\r
	IF	(F1.OR.F2.OR.F5.OR.F6.OR.F7).EQ.0\r
	LIST	S\r
				;++++++++IF LTUX # VDU-VCR/VCR-MIXER-PRINTER-MATRIX\r
				;      BEGIN\r
	LD	HL,ECOND2	;	 TEST IF PENDING ERROR CONDITION TRANSM.\r
	BIT	6,(HL)		;\r
	JP	NZ,EHM10	;	 IF YES THEN RETRANSMIT\r
				;	 ENDIF\r
	NLIST	S\r
	IF	F4.EQ.0\r
	LIST	S	;+++++ #RCP\r
	CP	5		;	 TEST IF ERRONEOUS CHANNEL IS A CR80 CHANNEL\r
	NLIST	S\r
	ENDIF\r
	IF	F4.EQ.1\r
	LIST	S	;+++++ RCP\r
	CP	6		;	 TEST IF ERRONEOUS CHANNEL IS RCDP CHANNEL\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	JP	M,EHM8		;\r
				;\r
				;	 IF NO THEN\r
	PUSH	AF		;	   BEGIN\r
	LD	BC,#ETIMNO	;		 START TIMER\r
	LD	E,0FAH		;\r
	CALL	UPDATE		;\r
	CALL	ESTABR		;\r
	LD	HL,ECOND2\r
	LD	A,(HL)\r
	AND	0E3H\r
	OR	#TIME.AND.1CH	;		 SET UP TIME (NO. OF HALF-SEC.)\r
	LD	(HL),A\r
	POP	AF		;\r
	LD	E,A		;\r
	NLIST	S\r
	IF	F3.EQ.0\r
	LIST	S		;+++++ #RCDP\r
	SLA	E\r
	SLA	E\r
	SLA	E\r
	SLA	E\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
	LD	D,0		;\r
	LD	A,4		;\r
W1:	CALL	COMM		;		 TEST IF IDENTICAL WITH PRE-\r
	BIT	7,A		;		 CEEDING TRANSMISSION ERROR.\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:	LD	A,(LCRID)	;\r
	CP	C		;\r
	JP	NZ,EHM30\r
	LD	A,(MCRID)\r
	CP	B		;\r
	JP	Z,EHM10		;		 IF YES THEN GOTO DDM10\r
				;		 ELSE\r
				;		 BEGIN\r
EHM30:	LD	HL,ECOND2	;		 REQUEST TRANSMISSION OF 'ERROR CONDITION'\r
	SET	7,(HL)\r
	LD	A,C\r
	LD	(LCRID),A	;		 LOAD LCRID REGISTER WITH CRID(LSB)\r
				;		 FROM FIFO.\r
	LD	A,B\r
	LD	(MCRID),A	;		 LOAD MCRID REGISTER WITH CRID(MSB)\r
				;		 FROM FIFO\r
	LD	IY,ERRPAT\r
	SET	5,(IY+0)	;		 UPDATE ERROR PATTERN\r
				;		 END\r
	JP	EHM10		;\r
	NLIST	S\r
	ENDIF\r
	LIST	S		;\r
EHM8:\r
	NLIST	S		;\r
	IF	(F3.OR.F5).EQ.0\r
	LIST	S	;+++++ # RCDP AND MATRIX\r
				;	 ELSE\r
	LD	A,0		;	   BEGIN\r
	LD	(ERRPAT),A	;	     CLEAR ERRPAT REGISTER\r
				;	   END\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
				;	 ENDIF\r
EHM10:\r
EHM13:\r
EHM13A:\r
	NLIST	S\r
	IF	F11.EQ.1\r
	LIST	S\r
				;++++++++IF LTUX = VDU-D\r
	LD	A,(CR80NO)	;	 TEST IF THE APPROPRIATE CR80 STATUS\r
				;	 SWITCH REGISTER = 0\r
	SUB	2\r
	LD	C,A\r
	LD	B,0\r
	LD	HL,CR80SS\r
	ADD	HL,BC\r
	BIT	0,(HL)\r
	JP	NZ,EHM16	;	 IF YES THEN\r
				;	   BEGIN\r
	SET	0,(HL)		;	     SET CR80 SWITCH STATUS REGISTER\r
	PUSH	HL\r
	LD	BC,#ETIMNO	;	     ACTIVATE TIMER\r
	LD	E,0FAH		;\r
	CALL	UPDATE		;\r
	CALL	ESTABR		;\r
	LD	A,(IY+0)	;	     CLEAR ECOND2 TIMESCALER\r
	AND	0E3H\r
	LD	(IY+0),A\r
				;	   END\r
	POP	HL		;	 ENDIF\r
EHM16:	BIT	4,(IY+0)	;	 TEST IF TIME OUT\r
	JP	Z,EHM22		;	 IF YES THEN\r
				;	   BEGIN\r
	LD	HL,CR80SS	;	     TEST IF ALL CR80 CHANNELS ARE TRIED\r
	LD	A,(HL)\r
	INC	HL\r
	AND	(HL)\r
	INC	HL\r
	AND	(HL)\r
	JP	NZ,EHM22	;	     IF NO THEN\r
				;	     BEGIN\r
	LD	HL,CR80NO	;	     SWITCH TO NEXT CR80 CHANNEL\r
	INC	(HL)\r
	LD	A,(HL)\r
	CP	5\r
	JP	NZ,EHM17\r
	LD	A,2\r
	LD	(HL),A\r
EHM17:	OGEPA2			;	     GET EMPTY BUFFER\r
	JP	NC,EHM15\r
	PUSH	DE		;	     LOAD EMPTY BUFFER WITH\r
	POP	IX		;	     'CHANNEL CHECK' MESSAGE\r
	LD	A,0EBH\r
	LD	(IX+8),A\r
	LD	A,(CR80SS)\r
	LD	(IX+9),A\r
	LD	A,(CR80SS+1)\r
	LD	(IX+0AH),A\r
	LD	A,(CR80SS+2)\r
	LD	(IX+0BH),A\r
	LD	(IX+2),4\r
	CALL	OD1		;	     TRANSMIT BUFFER\r
				;	     END\r
				;	     ENDIF\r
				;	     END\r
				;	     ENDIF\r
				;	   END\r
				;	 ENDIF\r
				;      END\r
				;    ENDIF\r
	JP	EHM22\r
				;  END\r
				;ENDIF\r
	ENDIF\r
;\r
	LIST	S\r
;>>>>>>>>>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\r
;\r
;>>>>>>>>>>>>>>>> ERROR CONDITION REQUEST <<<<<<<<<<<<<<<<<<<<<\r
;\r
EHM15:\r
	NLIST	S\r
	IF F11.EQ.1\r
	LIST	S	;+++++ VDU-D\r
	LD	HL,ECOND2	;TEST IF A 'SET CHANNEL' COMMAND \r
	BIT	5,(HL)		;HAS BEEN RECEIVED\r
	JP	Z,EHM15A	;IF YES THEN\r
				;   BEGIN\r
	RES	5,(HL)		;     RESET 'SET CHANNEL' FLAG\r
	LD	IY,CR80SS	;     CLEAR CR80SS TO CR80SS+2\r
	LD	(IY+0),0\r
	LD	(IY+1),0\r
	LD	(IY+2),0\r
	LD	BC,#ETIMNO	;     STOP TIMER\r
	CALL	SUSPND		;\r
				;ENDIF\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
EHM15A:	LD	HL,ECOND2	;TEST IF THERE IS AN 'ERROR CONDITION' REQUEST\r
	BIT	7,(HL)\r
	JP	NZ,EHM15B	;\r
	BIT	6,(HL)		;\r
	JP	Z,EHM19		;IF YES THEN\r
				;  BEGIN\r
EHM15B:\r
	NLIST	S\r
	IF	(F3.OR.F4.OR.F5).EQ.0\r
	LIST	S	;+++++ #RCDP, RCP & MATRIX\r
	OGEPA2			;    GET EMPTY BUFFER\r
	JP	NC,EHM19A	;\r
	PUSH	DE\r
	POP	IX\r
	LD	(IX+8),0F0H	;    LOAD BUFFER WITH 'ERROR CONDITION' MESSAGE\r
	LD	A,(ERRPAT)\r
	LD	(IX+9),A\r
	LD	A,(LCRID)\r
	LD	(IX+0AH),A\r
	LD	A,(MCRID)\r
	LD	(IX+0BH),A\r
	LD	A,0\r
	LD	(IX+0CH),A\r
	LD	A,0\r
	LD	(IX+0DH),A\r
	LD	(IX+2),6\r
	CALL	OD1		;    TRANSMIT BUFFER TO CR80\r
EHM20:\r
	NLIST	S\r
	ENDIF\r
	IF	(F3.OR.F5).EQ.1\r
	LIST	S	;+++++RCDP OR MATRIX\r
	OGEPA1	2		;    GET EMPTY BUFFER CH.2\r
	JP	NC,EHM21	;\r
	PUSH	DE\r
	POP	IX\r
	LD	(IX+8),0F0H	;    LOAD BUFFER WITH 'ERROR CONDITION' MESSAGE\r
	LD	A,(ERRPAT)\r
	LD	(IX+9),A\r
	LD	A,(LCRID)\r
	LD	(IX+0AH),A\r
	LD	A,(MCRID)\r
	LD	(IX+0BH),A\r
	LD	A,0\r
	LD	(IX+0CH),A\r
	LD	A,0\r
	LD	(IX+0DH),A\r
	LD	(IX+2),6\r
	CALL	OD1		;    TRANSMIT BUFFER TO CR80(E)\r
EHM21:	OGEPA1	3		;    GET EMPTY BUFFER CH.3\r
	JP	NC,EHM22	;\r
	PUSH	DE\r
	POP	IX\r
	LD	(IX+8),0F0H	;    LOAD BUFFER WITH 'ERROR CONDITION' MESSAGE\r
	LD	A,(ERRPAT)\r
	LD	(IX+9),A\r
	LD	A,(LCRID)\r
	LD	(IX+0AH),A\r
	LD	A,(MCRID)\r
	LD	(IX+0BH),A\r
	LD	A,0\r
	LD	(IX+0CH),A\r
	LD	A,0\r
	LD	(IX+0DH),A\r
	LD	(IX+2),6\r
	CALL	OD1		;    TRANSMIT BUFFER TO CR80(PC)\r
EHM22:	OGEPA1	4		;    GET EMPTY BUFFER CH.4\r
	JP	NC,EHM23	;\r
	PUSH	DE\r
	POP	IX\r
	LD	(IX+8),0F0H	;    LOAD BUFFER WITH 'ERROR CONDITION' MESSAGE\r
	LD	A,(ERRPAT)\r
	LD	(IX+9),A\r
	LD	A,(LCRID)\r
	LD	(IX+0AH),A\r
	LD	A,(MCRID)\r
	LD	(IX+0BH),A\r
	LD	A,0\r
	LD	(IX+0CH),A\r
	LD	A,0\r
	LD	(IX+0DH),A\r
	LD	(IX+2),6\r
	CALL	OD1		;    TRANSMIT BUFFER TO CR80(B)\r
EHM23:\r
	NLIST	S\r
	ENDIF\r
				;  END\r
	IF	F4.EQ.1\r
	LIST	S\r
				;+++++++++IF LTUX = RCP\r
				;  BEGIN\r
	OGEPA1	5		;    GET EMPTY BUFFER\r
	JP	NC,EHM19A	;\r
	PUSH	DE\r
	POP	IX\r
	LD	(IX+8),0F0H	;    LOAD BUFFER WITH 'ERROR CONDITION' MESSAGE\r
	LD	A,(ERRPAT)\r
	LD	(IX+9),A\r
	LD	A,(LCRID)\r
	LD	(IX+0AH),A\r
	LD	A,(MCRID)\r
	LD	(IX+0BH),A\r
	LD	A,0\r
	LD	(IX+0CH),A\r
	LD	A,0\r
	LD	(IX+0DH),A\r
	LD	(IX+2),6\r
	CALL	OD1		;    TRANSMIT BUFFER TO RCDP\r
				;  END\r
EHM24:\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
				;ENDIF\r
	LD	HL,ECOND2	;\r
	RES	6,(HL)		;\r
	RES	7,(HL)		;\r
EHM19:	JP	EHBEG		;RETURN TO SCHEDULER\r
EHM19A:	LD	HL,ECOND2	;\r
	SET	6,(HL)		;\r
	JP	EHBEG		;\r
;\r
;>>>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<\r
;\r
;>>>>>>>>>>>> ODEPA1 SUBROUTINE <<<<<<<<<<<<\r
;\r
OD1:	ODEPA1	Y,BFSIZE		;\r
	RET\r
;\r
;>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<\r
;\r
	NLIST	S\r
	IF	(F1.OR.F2.OR.F5.OR.F6.OR.F7).EQ.0\r
	LIST	S	;+++++ #VDU, PRINTER, MATRIX, VCR/VCR & MIXER\r
;>>>>>>>>>>>>> TIMER 2 - SUBROUTINE <<<<<<<<<<<<<<<<\r
;\r
ETIMER:	LD	HL,ECOND2\r
	LD	A,(HL)\r
	LD	B,A\r
	AND	1CH\r
	SUB	4\r
	PUSH	AF\r
	LD	C,A\r
	LD	A,B\r
	AND	0E3H\r
	OR	C\r
	LD	(HL),A\r
	POP	AF\r
	JP	NZ,EHM33\r
	LD	HL,LCRID\r
	LD	A,0\r
	LD	(HL),A\r
	INC	HL\r
	LD	(HL),A\r
	LD	HL,ERRPAT\r
	RES	5,(HL)\r
	RET\r
EHM33:	LD	BC,#ETIMNO\r
	CALL	ESTABR\r
	RET\r
	NLIST	S\r
	ENDIF\r
	IF	F11.EQ.1\r
	LIST	S	;+++++ VDU-D\r
;>>>>>>>>>>>>> TIMER 2 - SUBROUTINE <<<<<<<<<<<<<<<<\r
;\r
ETIMER:	LD	HL,ECOND2\r
	LD	A,(HL)\r
	LD	B,A\r
	AND	1CH\r
	ADD	A,4\r
	BIT	4,A\r
	PUSH	AF\r
	LD	C,A\r
	LD	A,B\r
	AND	0E3H\r
	OR	C\r
	LD	(HL),A\r
	POP	AF\r
	RET	NZ\r
	LD	BC,#ETIMNO\r
	CALL	ESTABR\r
	RET\r
	NLIST	S\r
	ENDIF\r
	LIST	S\r
;\r
;\r
;\r
;\r
;\r
;******* E N D    O F    E R R O R    H A N D L I N G    P R O C E S S*******\r
;\r
	ENDM\r
;\r
;\r
;>>>>>>>>>>>>>> DORCOM.MAC, VERSION 810421/CGR <<<<<<<<<<<<<<<<\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 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