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

⟦1b8700eed⟧ TextFile

    Length: 17553 (0x4491)
    Types: TextFile
    Names: »MATCH.SRC«

Derivation

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

TextFile

;******************************************************************************\r
;*                                                                            *\r
;* D O R A     A P P L I C A T I O N     S / W                                *\r
;*                                                                            *\r
;* DEVICE: TELECINE                                                           *\r
;*                                                                            *\r
;* MODULE: MATCHING FUNCTION PROCESS                                          *\r
;*                                                                            *\r
;******************************************************************************\r
\r
LINK	DEFL	0\r
PORT1	DEFL	20H\r
PORT2	DEFL	2AH\r
PORT3	DEFL	2CH\r
PORT4	DEFL	21H\r
PORT5	DEFL	22H\r
PORT6	DEFL	28H\r
PORT7	DEFL	13H\r
INSPTIM	DEFL	1\r
SCANTIM	DEFL	2\r
INSPNR	DEFL	5\r
PROJNR	DEFL	6\r
MTCHNR	DEFL	7\r
SCANNR	DEFL	8\r
STATNR	DEFL	9\r
CVAL	DEFL	25\r
DLAY01	DEFL	25\r
DLAY02	DEFL	10\r
DACGAIN	DEFL	00H\r
DACGMMA	DEFL	06H\r
DACLIFT	DEFL	0CH\r
\r
	NLIST	S\r
SETOBIT	MACRO	#PORTADDRESS,#ACTION,#VALUE\r
				;SETOBIT IS USED TO SET OR RESET\r
				;BITS ONE A OUTPUT PORT SPECIFIED\r
				;BY THE PARAMETERS:\r
				;VAL: SPECIFIED THE BIT WHICH HAS \r
				;     TO BE SET OR RESET (0-0FFH).\r
				;ACTION: TELL THE ROUTINE WHICH\r
				;        ACTION IT HAS TO PERFORME\r
				;        SET OR RESET\r
				;PORTADDRESS: SPECIFIED THE ADDRESS\r
				;	      WHERE THE ACTION HAS TO \r
				;	      BE PERFORMED.\r
	IF	'#ACTION'.EQ.'S'\r
	LD	C,#PORTADDRESS\r
	LD	B,#VALUE	;\r
	CALL	SETBIT		;\r
	ENDIF\r
	IF	'#ACTION'.EQ.'R'\r
	LD	C,#PORTADDRESS\r
	LD	A,#VALUE\r
	CALL	RESBIT		;\r
	ENDIF\r
	ENDM\r
\r
	\r
PASSIVATE	MACRO	#ID,#NO\r
					;DESRIP: THE MODULE PASSIVATES\r
					;	SPECIFIED PROCES.\r
					;	IF LINK IS SET AND ACTIV\r
					;	SPECIAL PROCESS IS PASSIVATED\r
					;	THE LINK-ELEMENT IS \r
					;	DECREMENTED\r
					;DESTR:	REG F,H,L\r
	IF	'#ID'.EQ.'S'\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	IF	LINK.EQ.1\r
	BIT	7,(HL)			;\r
	JR	Z,O#$YM		;IF PROCESS WAS NOT PASSIVE THEN\r
	LD	HL,SYSRAM+0FBH	;BEGIN\r
	DEC	(HL)			;DEC LINK-ELEMENT\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;END\r
O#$YM:	ENDIF\r
	ENDIF\r
	IF	'#ID'.EQ.'N'\r
	LD	HL,SYSRAM+200H+S*10H+#NO*20H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	ENDIF\r
	RES	7,(HL)			;PASSIVATE\r
	ENDM\r
ACTIVATE	MACRO	#ID,#NO\r
					;DESRIP: THE MODULE ACTIVATES\r
					;	SPECIFIED PROCES.\r
					;	IF LINK IS SET AND PASSIV\r
					;	SPECIAL PROCESS IS ACTIVATED\r
					;	THE LINK-ELEMENT IS \r
					;	INCREMENTED\r
					;DESTR:	REG F,H,L\r
	IF	'#ID'.EQ.'S'\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	IF	LINK.EQ.1\r
	BIT	7,(HL)			;\r
	JR	NZ,O#$YM		;IF PROCESS WAS NOT ACTIVE THEN\r
	LD	HL,SYSRAM+0FBH	;BEGIN\r
	INC	(HL)			;INC LINK-ELEMENT\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;END\r
O#$YM:	ENDIF\r
	ENDIF\r
	IF	'#ID'.EQ.'N'\r
	LD	HL,SYSRAM+200H+S*10H+#NO*20H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	ENDIF\r
	SET	7,(HL)			;ACTIVATE\r
	ENDM\r
CREATE	MACRO	#ID,#NO,#NAME,#PRIO\r
				;DESCRIP: THE MODULE CREATES SPECIFIED\r
				;	PROCESS IE LOADS STARTADDRESS\r
				;	(#NAME) IN PROCESS-DESCRIPTION\r
				;	BYTE 6,7. IF NORMAL PROCESS IS\r
				;	ENCOUNTERED PRIORITY IS LOADED\r
				;	TO BYTE 5 IN PROCESS-DESCRIPTION\r
				;	AND THE PROCESS IS ENQUEUED IN\r
				;	APPROPRIATE PRIO-QUEUE.\r
				;	FINALLY THE SPECIFIED PROCESS\r
				;	IS ACTIVATED\r
				;DESTR:	IF NORMAL PROCESS\r
				;	REG. A,F,B,C,D,E,H,L\r
				;	IF SPECIAL PROCESS\r
				;	REG. F,H,L\r
	LD	HL,#NAME	;\r
	IF	'#ID'.EQ.'S'\r
	LD	(SYSRAM+200H+#NO*10H+6),HL\r
				;STARTADD TO PROCESS-DESCRIP\r
	ENDIF\r
	IF	'#ID'.EQ.'N'\r
	LD	(SYSRAM+200H+S*10H+#NO*20H+6),HL\r
				;STARTADD TO PROCESS-DESCRIP\r
	LD	HL,SYSRAM+200H+S*10H+#NO*20H+5\r
	LD	(HL),#PRIO			;PRIORTY TO PROCESS\r
	LD	HL,SYSRAM+#PRIO*8		;ADDRESS OF PRIO-QUEUE\r
	LD	DE,SYSRAM+200H+S*10H+#NO*20H	;ADDRESS OF PROCESS-DESCRIP\r
	CALL	SUBENQ\r
	ENDIF\r
	ACTIVATE	#ID,#NO			;ACTIVATE PROCESS\r
	ENDM\r
\r
\r
LESTAB	MACRO	#PRNUM\r
	LD	BC,#PRNUM\r
	CALL	ESTABR\r
	ENDM\r
\r
LSUSPN	MACRO	#PRNUM\r
	LD	BC,#PRNUM\r
	CALL	SUSPND\r
	ENDM\r
\r
GESTAM	MACRO\r
	LD	HL,ONOFF\r
	LD	(HL),0FFH\r
	ENDM\r
\r
GSUSPM	MACRO\r
	LD	HL,ONOFF\r
	LD	(HL),0\r
        ENDM\r
\r
UPDATM	MACRO	#PRNUM,#VALUE\r
	LD	HL,DELAY+#PRNUM\r
	LD	(HL),#VALUE\r
	ENDM\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
;################# 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
	ENDM\r
;\r
;\r
;************************************************************************\r
;                             O G E P A 1\r
;                          VERSION 801127/CGR\r
;************************************************************************\r
;\r
OGEPA1	MACRO	#CHAN\r
				;DESCRIP: THE MACRO DEQUEUES AN 'OUTGOING' ELE-\r
				;         MENT FROM DESCRIPTOR.\r
				;ENTRY: -\r
				;EXIT: CY=1 IF QUEUE WAS NOT EMPTY\r
				;      CY=0 IF QUEUE WAS EMPTY\r
				;      ADDRESS OF ELEMENT IN DE\r
				;DESTROY: IF QUEUE WAS NOT EMPTY\r
				;	     REG A,F,B,C,D,E,H,L,IX\r
				;	  IF QUEUE WAS EMPTY\r
				;	     REG F,H,L\r
				;PARAMETERS: #CHAN = CHANNEL NO. ('DATATYPE')\r
				;\r
				;EXTERNALS: SUBDEQ,QHEADS\r
				;\r
;###################### Ogepa1 macro ###########################\r
	LD	A,#CHAN		;FIND EMPTY QUEUE\r
	LD	H,A\r
	SLA	A\r
	SLA	A\r
	ADD	A,H\r
	LD	HL,QHEADS\r
	LD	D,0\r
	LD	E,A\r
	ADD	HL,DE\r
	CALL	SUBDEQ		;GET BUFFER\r
	JP	NC,A#$YM\r
	PUSH	DE\r
	POP	IX\r
	LD	L,(IX+4)	;DECREMENT DATABUFFER ADDRESS 2 TIMES.\r
	LD	H,(IX+5)	;\r
	DEC	HL		;\r
	DEC	HL		;\r
	LD	(IX+4),L	;\r
A#$YM:	LD	(IX+5),H	;\r
;######################## End macro ##############################\r
	ENDM\r
;\r
;***********************************************************************\r
;                             O G E P A 3\r
;                          VERSION 801127/CGR\r
;***********************************************************************\r
;\r
; DESCRIPTION:		THIS MACRO DEQUEUES A BUFFER FROM THE 'OUTGOING'\r
;			EMPTY BUFFER QUEUE - IF THE I/F DEVICE IS DELEGATED - AND\r
;			INSERTS THE PANEL CODE OF THE\r
;			DELEGATED PANEL IN THE FIRST DATABYTE OF THE\r
;			BUFFER. THE BYTECOUNT IS SET = 1.\r
;\r
; ENTRY:		NONE\r
;\r
; EXIT:			CY=0 IF QUEUE WAS EMPTY OR LTUX NOT DELEGATED\r
;			CY=1 IF QUEUE WAS NOT EMPTY AND LTUX DELEGATED\r
;			Z=0  IF LTUX NOT DELEGATED\r
;			Z=1  IF LTUX IS DELEGATED\r
;			ADDRESS OF BUFFER ELEMENT IN DE AND IX REGISTERS.\r
;\r
; PARAMETERS:		#CHAN:	CHANNELNUMBER. (MUST BE 6 OR 7)\r
;\r
; EXTERNALS:		SUBDEQ, QHEADS, PANCO (AND PANCOM IF TELECINE I/F)\r
;\r
; DESTROY:		REGISTERS A,F,B,C,D,E,H,L,IX\r
;\r
OGEPA3	MACRO	#CHAN\r
;################### Ogepa3 macro ###################################\r
	IF	#CHAN.EQ.6\r
	    	 	;+++++ #CHAN = 6\r
	LD	A,(PANCO)\r
	ENDIF\r
	IF	#CHAN.EQ.7\r
	    	 	;+++++ #CHAN = 7\r
	LD	A,(PANCOM)\r
	ENDIF\r
	CP	0		;TEST IF DELEGATION IS ESTABLISHED\r
	SCF\r
	CCF\r
	JP	Z,A#$YM		;IF YES THEN\r
	LD	A,#CHAN\r
	LD	H,A		;FIND ADDRESS OF EMPTY BUFFER QUEUE\r
	SLA	A\r
	SLA	A\r
	ADD	A,H\r
	LD	HL,QHEADS\r
	LD	D,0\r
	LD	E,A\r
	ADD	HL,DE\r
	CALL	SUBDEQ		;GET BUFFER\r
				;TEST IF QUEUE WAS EMPTY\r
	JP	NC,B#$YM	;IF NO THEN\r
	PUSH	DE\r
	POP	IX\r
	LD	(IX+2),1	;SET BYTECOUNT = 1\r
	IF	#CHAN.EQ.6\r
		;+++++ #CHAN = 6\r
	LD	A,(PANCO)\r
	ENDIF\r
	IF	#CHAN.EQ.7\r
	    	;+++++ #CHAN = 7\r
	LD	A,(PANCOM)\r
	ENDIF\r
	LD	(IX+8),A	;LOAD DELEGATED PANEL CODE INTO FIRST DATABYTE\r
	LD	L,(IX+4)	;DECREMENT DATABUFFER ADDRESS 2 TIMES.\r
	LD	H,(IX+5)	;\r
	DEC	HL		;\r
	DEC	HL		;\r
	LD	(IX+4),L	;\r
	LD	(IX+5),H	;\r
	CP	A		;SET Z-FLAG\r
	SCF			;SET C-FLAG\r
	JP	A#$YM+2		\r
				;ENDIF\r
				;\r
B#$YM:	CP	A		;SET Z-FLAG\r
	SCF\r
	CCF			;RESET C-FLAG\r
	JP	A#$YM+2		;\r
				;ENDIF\r
A#$YM:	CP	1		;RESET Z-FLAG\r
;\r
;################### End macro #######################################\r
	ENDM\r
;\r
;\r
;************************************************************************\r
;                          O G E P A 2\r
;                       VERSION 801127/CGR\r
;************************************************************************\r
;\r
; DESCRIPTION:		THIS MACRO DEQUEUES A BUFFER FROM THE EMPTY BUFFER\r
;			QUEUE ASSIGNED TO THE DELEGATED CR80.\r
;\r
; ENTRY:		NONE\r
;\r
; EXIT:			CY=0 IF THE QUEUE WAS EMPTY\r
;			CY=1 IF THE QUEUE WAS NOT EMPTY\r
;			ADDRESS OF BUFFERELEMENT IN DE REGISTER.\r
;\r
; PARAMETERS:		NONE\r
;\r
; EXTERNALS:		CR80NO, SUBDEQ, QHEADS\r
;\r
; DESTROY:		REGISTERS A,F,B,C,D,E,H,L,IX\r
;\r
;\r
OGEPA2	MACRO\r
;#################### 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
	ENDM\r
;\r
;\r
;\r
;\r
;\r
;************************************************************************\r
;                          O D E P A 1\r
;                       VERSION 801129/CGR\r
;************************************************************************\r
;\r
ODEPA1	MACRO	#EI,#BSIZE\r
				;DESCRIP: THE MACRO ENQUEUES AN 'OUTGOING'\r
				;         ELEMENT IN THE CHANNEL QUEUE.\r
				;	  IF TRANSMISSION CANCELED FLAG IS\r
				;	  SET, THE BUFFER IS ENQUEUED IN\r
				;	  THE OUTGOING EMPTY BUFFER QUEUE.\r
				;ENTRY:	ADDRESS OF ELEMENT IN REG DE\r
				;EXIT: CY=1 IF QUEUE WAS NOT EMPTY\r
				;      CY=0 IF QUEUE WAS EMPTY\r
				;      ADDRESS OF ELEMENT IN REG DE\r
				;DESTROY: REG A,F,B,C,H,L,IX\r
				;\r
				;PARAMETERS: #BSIZE = BUFFERSIZE\r
				;	     #EI: Y RE-ENABLES INTERRUPT\r
				;	          N INTERRUPT IS DISABLED AT MACRO EXIT.\r
				;	          NOTE! INTERRUPT IS NOT AFFECTED\r
				;		  IF TRANSMISSION WAS CANCELED.\r
				;\r
				;EXTERNALS: QHEADS,SUBENQ,ECOND1\r
				;\r
;################ Odepa1 macro ####################################\r
	PUSH	DE		;\r
	PUSH	DE		;\r
	POP	IX		;\r
	LD	HL,23		;REFORMAT BUFFER\r
	ADD	HL,DE		;\r
	EX	DE,HL		;\r
	LD	HL,2		;\r
	ADD	HL,DE		;\r
	EX	DE,HL		;\r
	LD	B,0		;\r
	LD	C,(IX+2)	;\r
	LDDR			;\r
	LD	(IX+8),#BSIZE	;RESTORE BUFFERSIZE\r
	LD	(IX+9),0	;\r
	LD	L,(IX+4)	;INCREMENT DATABUFFER ADDRESS 2 TIMES.\r
	LD	H,(IX+5)	;\r
	INC	HL		;\r
	INC	HL		;\r
	LD	(IX+4),L	;\r
	LD	(IX+5),H	;\r
	LD	A,(IX+2)	;TEST IF BUFFER IS THE LAST IN TRANSMISSION\r
	LD	HL,ECOND1	;\r
	CP	#BSIZE\r
	JP	Z,C#$YM		;   IF YES THEN\r
	SET	7,(HL)		;      SET BIT 7 IN ECOND1\r
	JP	D#$YM		;   ELSE\r
C#$YM:	RES	7,(HL)		;      RESET BIT 7 IN ECOND1\r
				;   ENDIF\r
D#$YM:	LD	A,(HL)		;TEST IF TRANSMISSION IS CANCELED\r
	BIT	6,A\r
	JP	A#$YM		;IF YES THEN\r
				;   BEGIN\r
	LD	A,(IX+2)	;      TEST IF BUFFER IS THE LAST IN TRANSMISSION\r
\r
	CP	#BSIZE\r
	JP	Z,B#$YM		;      IF YES THEN\r
	RES	6,(HL)		;	 RESET BIT 6 IN ECOND2\r
				;      ENDIF\r
B#$YM:	LD	(IX+2),0	;      RESET BYTECOUNT\r
	LD	(IX+3),0	;\r
	LD	A,(IX-2)	;      ENQUEUE BUFFER IN OUTGOINIG EMPTY BUFFER QUEUE\r
	LD	H,A\r
	SLA	A\r
	SLA	A\r
	ADD	A,H\r
	LD	HL,QHEADS\r
	LD	D,0\r
	LD	E,A\r
	ADD	HL,DE\r
	POP	DE\r
	CALL	SUBENQ		;\r
;\r
				;   END\r
				;ELSE\r
A#$YM:	LD	A,(IX-2)  	;   BEGIN\r
	POP	DE		;      ENQUEUE BUFFER IN CHANNEL QUEUE\r
	CALL	ODEPA		;\r
	IF	'#EI'.EQ.'Y'\r
	EI			;   END\r
	ENDIF			;ENDIF\r
;################# End macro #####################################\r
	ENDM\r
\r
	LIST	S\r
	PUBLIC	MATCHG,CASE12,CASE13,CASE14,CASE15,CASE16,CASE17,CASE18\r
	PUBLIC	CASE19,CASE20,CASE21,CASE22,CASE23,CASE24,CASE25,CASE26\r
	PUBLIC	CASE27,CASE28,CASE29,CASE30,CASE31,CASE32,CASE33,CASE34\r
	PUBLIC	CASE35,CASE36,CASE37,CASE38,CASE39,CASE40\r
	EXTRN	TABL2,STCHAN,PQH7,SUBDEQ,SETBIT,RESBIT,INFLAG,BLKFLG\r
	EXTRN	MFSAVE,SUBENQ,QEMPTY,SCOMMON,SYSRAM,IDEPA\r
\r
	CSEG\r
\r
MATCHG:	LD	SP,PSTACK	;INITIALIZE STACK-POINTER\r
PASPRO:	PASSIVATE S,MTCHNR	;PASSIVATE MATCHING FUNCTION PROCESS\r
	CALL	SCOMMON\r
	EI\r
\r
;------------------------------------------------------------------------------\r
START:	LD	HL,PQH7\r
        CALL	SUBDEQ		;DEQUE FIRST ELEMENT IN MATCHING FUNCTION PROCESS QUEUE\r
	JP	NC,PASPRO	;WHILE QUEUE IS NOT EMPTY THEN DO\r
\r
;------------------------------------------------------------------------------\r
				;BEGIN\r
	LD	(MFSAVE),DE	;  SAVE BUFFERADDRESS\r
	PUSH	DE\r
	POP	IX\r
	LD	E,(IX+3)	;  GET VALUE OF 2*TABL1 COUNTER\r
	LD	D,0\r
	LD	HL,TABL2\r
	SCF\r
	CCF\r
	SBC	HL,DE		;  POINTER TO STARTADDRESS OF THE APPROPRIATE ROUTINE\r
	LD	E,(HL)\r
	INC	HL\r
        LD	D,(HL)	\r
	EX	DE,HL\r
	JP	(HL)		;  DO CASE(N) :\r
\r
;-----------------------------------------------------------------------------\r
CASE12:	LD	HL,STCHAN	;  NEW RCP(MATCH.) DELEGATION :\r
	SET	2,(HL)		;  SET CONDITION CODE-FLAG\r
	JP	RETBUF\r
\r
CASE13:	LD	A,40H		;\r
	OUT	(PORT4),A	;\r
	LD	A,40H		;SET THE TC MATCHING FUNCTIONS\r
	OUT	(PORT5),A	;IN NEUTRAL POSITIONS BECAUSE\r
	LD	A,33H		;OF DELEGATION DELETION\r
	OUT	(PORT6),A	;\r
	JP	RETBUF\r
\r
CASE14:	SETOBIT	PORT4,S,80H	;  SET UP TEST MODE\r
	JP	RETBUF\r
CASE15:	SETOBIT	PORT4,R,80H	;  SET UP NORMAL MODE\r
	JP	RETBUF\r
\r
CASE16:	SETOBIT	PORT4,S,40H	;  SET UP MONOCHROME MODE\r
	JP	RETBUF\r
CASE17:	SETOBIT	PORT4,R,40H	;  SET UP COLOR MODE\r
	JP	RETBUF\r
\r
CASE18:	SETOBIT	PORT6,R,20H	;  SWITCH ON AUTO FUNCTION\r
	JP	RETBUF\r
CASE19:	SETOBIT	PORT6,S,20H	;  SWITCH OFF AUTO FUNCTION\r
	JP	RETBUF\r
\r
CASE20:	SETOBIT	PORT4,S,20H	;  SWITCH ON AGC FUNCTION\r
	JP	RETBUF\r
CASE21:	SETOBIT	PORT4,R,20H	;  SWITCH OFF AGC FUNCTION\r
	JP	RETBUF\r
\r
CASE22:	SETOBIT	PORT6,R,10H	;  SWITCH ON GATE BLAST\r
	JP	RETBUF\r
CASE23:	SETOBIT	PORT6,S,10H	;  SWITCH OFF GATE BLAST\r
	JP	RETBUF\r
\r
CASE24:	SETOBIT	PORT6,S,01H	;  ADJUST PICTURE FRAME UPWARDS\r
	SETOBIT	PORT6,R,02H\r
	JP	RETBUF\r
CASE25:	SETOBIT	PORT6,S,02H	;  ADJUST PICTURE FRAME DOWNWARDS\r
	SETOBIT	PORT6,R,01H\r
	JP	RETBUF\r
CASE26:	SETOBIT	PORT6,S,03H	;  STOP FRAME ADJUSTMENT\r
	JP	RETBUF\r
\r
CASE27:	SETOBIT	PORT5,R,40H	;  ENTER VAC.BYPASS MODE\r
	SETOBIT	PORT5,S,20H\r
	JP	RETBUF\r
CASE28:	SETOBIT	PORT5,R,60H	;  ENTER VAC.IN MODE\r
	JP	RETBUF\r
CASE29:	SETOBIT	PORT5,R,20H	;  ENTER VAC.OUT MODE\r
	SETOBIT	PORT5,S,40H\r
	JP	RETBUF\r
CASE30:	BIT	7,(IX+9)\r
	JP	Z,C301		;IF VAC.AMPLITUDE < 0 V THEN\r
	LD	A,0		;SET IT EQUAL 0 V\r
	LD	(IX+9),A\r
	JP	C302\r
C301:	LD	A,3FH\r
	CP	(IX+9)\r
	JP	P,C302		;IF VAC.AMPLITUDE > 5 V THEN\r
	LD	A,40H		;SET IT EQUAL 5 V\r
	LD	(IX+9),A\r
C302:	LD	A,(IX+9)\r
	OUT	(PORT7),A	;  ADJUST VAC.AMPLITUDE\r
	JP	RETBUF\r
\r
CASE31:	IN	A,PORT5\r
	AND	0F0H\r
	LD	B,(IX+9)\r
	ADD	A,B		;  SET UP SPECIFIED MASK TYPE\r
	ADD	A,08H		;  AND SWITCH ON MASK\r
	OUT	PORT5,A\r
	JP	RETBUF\r
CASE32:	SETOBIT	PORT5,R,0FH	;  SWITCH OFF MASK\r
	JP	RETBUF\r
\r
CASE33:	SETOBIT	PORT4,R,07H	;  ENTER AUTOCOLOR BYPASS MODE\r
	LD	HL,INFLAG\r
	LD	(HL),00H	;  CLEAR IN-FLAG\r
	JP	RETBUF\r
CASE34:	LD	HL,INFLAG	;  ENTER AUTOCOLOR IN MODE\r
	LD	(HL),01H	;  SET IN-FLAG\r
        LD	A,(BLKFLG)\r
	RR	A\r
	JP	NC,C1		;  IF BLK-FLG IS SET THEN DO\r
				;  BEGIN\r
	SETOBIT	PORT4,R,02H	;   ENTER AUTOCOLOR BLACK MODE\r
	SETOBIT	PORT4,S,05H\r
	JP	RETBUF		;  END ELSE\r
				;  BEGIN\r
C1:	SETOBIT	PORT4,R,01H	;   ENTER AUTOCOLOR COLOR MODE\r
	SETOBIT	PORT4,S,06H\r
	JP	RETBUF		;  END\r
CASE35:	SETOBIT	PORT4,R,03H	;  ENTER AUTOCOLOR OUT MODE\r
	SETOBIT PORT4,S,04H\r
	LD	HL,INFLAG\r
	LD	(HL),00H	;  CLEAR IN-FLAG\r
	JP	RETBUF\r
CASE36:	LD	HL,BLKFLG\r
	LD	(HL),01H	;  SET BLK-FLG\r
	JP	B1\r
CASE37:	LD	HL,BLKFLG\r
	LD	(HL),00H	;  CLEAR BLK-FLG\r
B1:     LD	A,(INFLAG)\r
	RR	A		;  IF IN-FLAG IS SET THEN\r
	JP	C,CASE34	;  ENTER IN MODE\r
	JP	RETBUF		;  ELSE GO TO RETBUF\r
\r
CASE38:	LD	C,DACGAIN\r
	CALL	DACOUT		;  SEND OUT SPEC.ANALOG VALUES ON GAIN-DACS\r
	JP	RETBUF\r
\r
CASE39:	LD	C,DACGMMA\r
	CALL	DACOUT		;  SEND OUT SPEC.ANALOG VALUES ON GAMMA-DACS\r
	JP	RETBUF\r
\r
CASE40:	LD	C,DACLIFT\r
	CALL	DACOUT		;  SEND OUT SPEC.ANALOG VALUES ON LIFT-DACS\r
	JP	RETBUF\r
\r
;--------------------------------------------------------------------------\r
DACOUT:	BIT	7,(IX+10)	;BEGIN\r
	JP	Z,DA1		;  IF RED ANALOG VALUE < 0 V THEN\r
	LD	A,0		;  SET IT EQUAL 0 V\r
	LD	(IX+9),A	;\r
	LD	(IX+10),A	;END\r
DA1:	BIT	7,(IX+12)	;BEGIN\r
	JP	Z,DA2		;  IF BLUE ANALOG VALUE < 0 V THEN\r
	LD	A,0		;  SET IT EQUAL 0 V\r
	LD	(IX+11),A	;\r
	LD	(IX+12),A	;END\r
DA2:	BIT	7,(IX+14)	;BEGIN\r
	JP	Z,DA3		;  IF MASTER ANALOG VALUE < 0 V THEN\r
	LD	A,0		;  SET IT EQUAL 0 V\r
	LD	(IX+13),A	;\r
	LD	(IX+14),A	;\r
	JP	DA4		;\r
DA3:	LD	A,3FH		;\r
	CP	(IX+14)		;\r
	JP	P,DA4		;  IF MASTER ANALOG VALUE > 5 V THEN\r
	LD	A,0		;  SET IT EQUAL 5 V\r
	LD	(IX+13),A	;\r
	LD	A,40H		;\r
	LD	(IX+14),A	;END\r
DA4:	LD	B,6\r
	LD	DE,09H\r
	ADD	IX,DE\r
NEXT:	LD	A,(IX)\r
	OUT	(C),A\r
	INC	IX\r
	INC	C\r
	DEC	B\r
	JP	NZ,NEXT\r
	RET\r
\r
RETBUF:	LD	DE,(MFSAVE)	;  GET BUFFERADDRESS\r
	\r
	IDEPA1	Y,16		;  RETURN BUFFER TO EMPTY BUFFER QUEUE\r
\r
	JP	START		;END-WHILE\r
\r
	DSEG\r
	DS	31\r
PSTACK	DS	1\r
	END\r