DataMuseum.dk

Presents historical artifacts from the history of:

Intel ISIS Floppy Disks

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

See our Wiki for more about Intel ISIS Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦3d6556c2a⟧ TextFile

    Length: 19834 (0x4d7a)
    Types: TextFile
    Names: »LOCK.SRC«

Derivation

└─⟦8347abc8e⟧ Bits:30005501 8" CR80 Floppy CR80FD_0033 ( ATR Source and Abs-files )
└─⟦8347abc8e⟧ Intel_ISIS_II
    └─ ⟦this⟧ »LOCK.SRC« 

TextFile

;******************************************************************************\r
;*                                                                            *\r
;* D O R A     A P P L I C A T I O N     S / W                                *\r
;*                                                                            *\r
;* DEVICE: ATR                                                                *\r
;*                                                                            *\r
;* MODULE: LOCK PROCESS                                                       *\r
;*                                                                            *\r
;******************************************************************************\r
\r
LINK	DEFL	0\r
SCANNR	DEFL	5\r
DCODNR	DEFL	6\r
SEARNR	DEFL	7\r
SYNCNR	DEFL	8\r
LOCKNR	DEFL	9\r
TIMGNR	DEFL	10\r
INSPNR	DEFL	11\r
STATNR	DEFL	12\r
READNR	DEFL	13\r
SEARTIM	DEFL	1\r
SYNCTIM	DEFL	2\r
LOCKTIM	DEFL	3\r
INSPTIM	DEFL	4\r
SCANTIM	DEFL	5\r
PORT1	DEFL	30H\r
PORT2	DEFL	32H\r
PORT3	DEFL	34H\r
PORT4	DEFL	31H\r
DAC	DEFL	20H\r
\r
	NLIST	S\r
PASSIVATE	MACRO	#ID,#NO\r
					;DESRIP: THE MODULE PASSIVATES\r
					;	SPECIFIED PROCES.\r
					;	IF LINK IS SET AND ACTIV\r
					;	SPECIAL PROCESS IS PASSIVATED\r
					;	THE LINK-ELEMENT IS \r
					;	DECREMENTED\r
					;DESTR:	REG F,H,L\r
	IF	'#ID'.EQ.'S'\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	IF	LINK.EQ.1\r
	BIT	7,(HL)			;\r
	JR	Z,O#$YM		;IF PROCESS WAS NOT PASSIVE THEN\r
	LD	HL,SYSRAM+0FBH	;BEGIN\r
	DEC	(HL)			;DEC LINK-ELEMENT\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;END\r
O#$YM:	ENDIF\r
	ENDIF\r
	IF	'#ID'.EQ.'N'\r
	LD	HL,SYSRAM+200H+S*10H+#NO*20H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	ENDIF\r
	RES	7,(HL)			;PASSIVATE\r
	ENDM\r
ACTIVATE	MACRO	#ID,#NO\r
					;DESRIP: THE MODULE ACTIVATES\r
					;	SPECIFIED PROCES.\r
					;	IF LINK IS SET AND PASSIV\r
					;	SPECIAL PROCESS IS ACTIVATED\r
					;	THE LINK-ELEMENT IS \r
					;	INCREMENTED\r
					;DESTR:	REG F,H,L\r
	IF	'#ID'.EQ.'S'\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	IF	LINK.EQ.1\r
	BIT	7,(HL)			;\r
	JR	NZ,O#$YM		;IF PROCESS WAS NOT ACTIVE THEN\r
	LD	HL,SYSRAM+0FBH	;BEGIN\r
	INC	(HL)			;INC LINK-ELEMENT\r
	LD	HL,SYSRAM+200H+#NO*10H+5\r
					;END\r
O#$YM:	ENDIF\r
	ENDIF\r
	IF	'#ID'.EQ.'N'\r
	LD	HL,SYSRAM+200H+S*10H+#NO*20H+5\r
					;IMPLEMENT ADD OF STATUS-BIT\r
	ENDIF\r
	SET	7,(HL)			;ACTIVATE\r
	ENDM\r
CREATE	MACRO	#ID,#NO,#NAME,#PRIO\r
				;DESCRIP: THE MODULE CREATES SPECIFIED\r
				;	PROCESS IE LOADS STARTADDRESS\r
				;	(#NAME) IN PROCESS-DESCRIPTION\r
				;	BYTE 6,7. IF NORMAL PROCESS IS\r
				;	ENCOUNTERED PRIORITY IS LOADED\r
				;	TO BYTE 5 IN PROCESS-DESCRIPTION\r
				;	AND THE PROCESS IS ENQUEUED IN\r
				;	APPROPRIATE PRIO-QUEUE.\r
				;	FINALLY THE SPECIFIED PROCESS\r
				;	IS ACTIVATED\r
				;DESTR:	IF NORMAL PROCESS\r
				;	REG. A,F,B,C,D,E,H,L\r
				;	IF SPECIAL PROCESS\r
				;	REG. F,H,L\r
	LD	HL,#NAME	;\r
	IF	'#ID'.EQ.'S'\r
	LD	(SYSRAM+200H+#NO*10H+6),HL\r
				;STARTADD TO PROCESS-DESCRIP\r
	ENDIF\r
	IF	'#ID'.EQ.'N'\r
	LD	(SYSRAM+200H+S*10H+#NO*20H+6),HL\r
				;STARTADD TO PROCESS-DESCRIP\r
	LD	HL,SYSRAM+200H+S*10H+#NO*20H+5\r
	LD	(HL),#PRIO			;PRIORTY TO PROCESS\r
	LD	HL,SYSRAM+#PRIO*8		;ADDRESS OF PRIO-QUEUE\r
	LD	DE,SYSRAM+200H+S*10H+#NO*20H	;ADDRESS OF PROCESS-DESCRIP\r
	CALL	SUBENQ\r
	ENDIF\r
	ACTIVATE	#ID,#NO			;ACTIVATE PROCESS\r
	ENDM\r
RESTART 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,#NO\r
	LD	HL,DELAY+#PRNUM\r
	LD	(HL),#NO\r
	ENDM\r
\r
	LIST	S\r
	PUBLIC	LOCKPR,LOCK,STAC09\r
	EXTRN	SCOMMON,OUTPUT,TCCSTA,UTCCOD,FLAG2,REG1,TCCOMP,CODSAV\r
	EXTRN	REG3,TCSUB,FLAG1,TTCCOD,REG2,REG4,LOCREG,REG5,REG6\r
	EXTRN	CONS23,CPOINTS,TTCREG,CONS25,COMBYT,CONS22,CONS24\r
	EXTRN	SEARCH,SYNCRO,TMPCOD,DELAY,ESTABR,CLEARY,COUNT5\r
	EXTRN	TCADD,COUNT4,CONS00,CONS01,CONS02,SYSRAM,FORWAR\r
	EXTRN	CONS26,CNS201,CNS202,CNS203,CNS204,REG7,CONS08,CNS199\r
	EXTRN	SEAPLA,SEAFWD,SEAREW\r
\r
	CSEG\r
LOCKPR:	LD	SP,STAC09	;INITIALIZE STACKPOINTER\r
	PASSIVATE S,LOCKNR\r
	CALL	SCOMMON\r
	EI\r
LOCK:	LD	SP,STAC09	;INITIALIZE STACKPOINTER\r
      	LD	A,0FEH\r
	CALL	OUTPUT		;SET PLAY ON\r
L1:	LD	A,(TCCSTA)	;\r
	AND	1FH		;\r
	CP	01H		;\r
	JR	Z,L11		;\r
	CALL	SCOMMON		;\r
	EI			;\r
	JR	L1		;\r
\r
L11:	UPDATM	LOCKTIM,45\r
	LESTAB	LOCKTIM\r
	PASSIVATE S,LOCKNR\r
	CALL	SCOMMON\r
	EI\r
\r
	LD	DE,REG1\r
	LD	HL,UTCCOD\r
	LD	BC,4\r
	LDIR			;DO (REG1) = UTC(N)\r
\r
	LD	HL,COMBYT\r
	LD	(HL),0FFH\r
	CALL	CLEARY\r
	LD	HL,FLAG1\r
	SET	5,(HL)		;SET LOCK-FLAG\r
	RES	1,(HL)		;RESET READ-FLAG\r
	RESTART S,SYNCNR,SYNCRO	;RESTART SYNCRONIZATION PROCESS\r
	LD	B,10H\r
	CALL	LOFLAG		;SET "SYNCRONIZATION IN PROGRESS"-FLAG\r
\r
	UPDATM	LOCKTIM,10\r
PASPRO:	LESTAB	LOCKTIM\r
LP0:	PASSIVATE S,LOCKNR\r
	CALL	SCOMMON\r
	EI\r
\r
LP1:	LD	IX,UTCCOD\r
	LD	IY,REG1\r
	CALL	TCCOMP\r
	JP	M,L2		;IF UTC-VALUES ARE INCREASING THEN\r
				;BEGIN\r
	LD	BC,REG3		;\r
	CALL	TCSUB		;  DO (REG3) = ABSOLUTE VALUE OF UTC SPEED\r
	LD	HL,FLAG1	;\r
	SET	4,(HL)		;  SET UTC FORWARD DIRECTION-BIT\r
	JR	L3		;END ELSE\r
L2:	LD	IX,REG1		;BEGIN\r
	LD	IY,UTCCOD	;\r
	LD	BC,REG3		;\r
	CALL	TCSUB		;  DO (REG3) = ABSOLUTE VALUE OF UTC SPEED\r
	LD	HL,FLAG1	;\r
	RES	4,(HL)		;  RESET UTC FORWARD DIRECTION-BIT\r
				;END\r
\r
L3:	LD	DE,REG1		;\r
	LD	HL,UTCCOD	;\r
	LD	BC,4		;\r
	LDIR			;DO (REG1) = UTC(N)\r
\r
	LD	HL,FLAG1\r
	BIT	1,(HL)\r
	JP	Z,PROEND	;IF READ-FLAG IS NOT SET THEN SKIP ELSE\r
\r
        LD	IX,TTCCOD	;\r
	LD	IY,REG2		;\r
	CALL	TCCOMP		;\r
	JP	M,TC1		;\r
	LD	BC,REG4		;\r
	CALL	TCSUB		;DO (REG4) = ABSOLUTE VALUE OF TTC SPEED\r
	JR	TC2		;\r
TC1:	LD	IX,REG2		;\r
	LD	IY,TTCCOD	;\r
	LD	BC,REG4		;\r
	CALL	TCSUB		;\r
\r
TC2:	LD	DE,REG2		;\r
	LD	HL,TTCCOD	;\r
	LD	BC,4		;\r
	LDIR			;DO (REG2) = TTC(N)\r
\r
	LD	IX,REG1		;\r
	LD	IY,LOCREG	;\r
	LD	BC,REG5		;\r
	CALL	TCSUB		;DO (REG5) = TTC'(N) = UTC(N)-(LOCREG)\r
\r
	CALL	ABSDISP		;DO (REG6) = ABSOLUTE VALUE OF TTC-UTC DISPL.MENT\r
\r
L7:	LD	A,(FLAG2)\r
	AND	3CH\r
	CP	20H\r
	JP	Z,RTIN1		;SEARCHING IN PROGRESS\r
	CP	10H\r
	JP	Z,RTIN2		;SYNCRONIZATION IN PROGRESS\r
	CP	08H\r
	JP	Z,RTIN3		;FAST WINDING IN PROGRESS\r
\r
	JP	RTIN4		;LOCK MONITORING IN PROGRESS\r
\r
;-------------------------------------------------------------------------\r
;SEARCHING IN PROGRESS :\r
\r
RTIN1:	LD	HL,FLAG1\r
	RES	1,(HL)		;RESET READ-FLAG\r
	RES	2,(HL)		;RESET SYNC FLAG\r
	CALL	UTCLOW\r
	JP	P,R11		;IF SPEED OF UTC IS NOT LOW THEN\r
				;BEGIN\r
	CALL	QROUT		;  CHECK TTC-UTC DISPLACEMENT AND\r
				;  TAKE PROPER ACTION\r
	JP	PROEND		;END ELSE\r
R11:				;BEGIN\r
	LD	HL,FLAG2	;\r
	BIT	1,(HL)		;\r
	JP	Z,R12		;  IF SEARCHING IS FINISHED THEN\r
	CALL	LOCKST		;  SET ATR IN STOP MODE AND\r
				;  SET LOCK MON.-FLAG\r
	LD	HL,FLAG1	;\r
	SET	1,(HL)		;  SET READ FLAG\r
	SET	2,(HL)		;  SET SYNC FLAG\r
	JP	PROEND		;  ELSE\r
R12:	LD	IX,REG5		;  BEGIN\r
	LD	IY,CONS23	;\r
	LD	BC,TTCREG	;\r
	CALL	TCADD		;    DO (TTCREG) = TTC'(N) + S.P.OFFSET\r
	CALL	CPOINTS		;    CALCULATE CHECKPOINTS\r
	JP	PROEND		;  END\r
				;END\r
\r
;------------------------------------------------------------------------\r
;SYNCRONIZATION IN PROGRESS :\r
\r
RTIN2:	LD	HL,FLAG1\r
	RES	1,(HL)		;RESET READ FLAG\r
	CALL	UTCNUL\r
	JR	NZ,R21		;IF UTC IS NOT MOVING THEN\r
	CALL	SROUT		;CALL SROUT\r
	RESTART S,SEARNR,SEAPLA	;RESTART SEARCH PROCESS\r
	JP	PROEND		;ELSE\r
R21:	LD	IX,REG6\r
	LD	IY,CONS25\r
	CALL	TCCOMP		;IF DISPLACEMENT DT'(N) >= DT2 THEN\r
	CALL	P,QROUT		;CHECK TTC-UTC DISPLACEMENT AND\r
				;TAKE PROPER ACTION\r
	JP	PROEND		;\r
\r
;-----------------------------------------------------------------------\r
;FAST WINDING IN PROGRESS :\r
\r
RTIN3:	LD	HL,FLAG1\r
	RES	2,(HL)		;RESET SYNC FLAG\r
	CALL	UTCNUL\r
	JR	NZ,R30\r
	LD	HL,COUNT5\r
	DEC	(HL)\r
	JR	NZ,R31		;IF UTC SPEED = 0 REPEATEDLY THEN\r
	INC	(HL)		;BEGIN\r
	CALL	SROUT		;  CALL SROUT\r
	IN	A,(PORT1)	;\r
	BIT	7,A		;\r
	JR	Z,RX1		;  IF EDIT IS NOT ON THEN\r
RX0:	RESTART S,SEARNR,SEARCH	;  RESTART SEARCH PROCESS FROM "SEARCH"\r
	JP	PROEND		;\r
RX1:	IN	A,(PORT4)	;\r
	BIT	3,A		;\r
	JR	NZ,RX2		;  IF ATR IN FORWIND THEN\r
	RESTART S,SEARNR,SEAFWD	;  RESTART SEARCH PROCESS FROM "SEAFWD"\r
	JP	PROEND		;  IF ATR IN REWIND THEN\r
RX2:	RESTART S,SEARNR,SEAREW	;  RESTART SEARCH PROCESS FROM "SEAREW"\r
	JP	PROEND		;END\r
				;ELSE\r
R30:	LD	A,25\r
	LD	(COUNT5),A	;COUNT5 = 25\r
R31:   	LD	HL,COUNT4\r
	DEC	(HL)\r
	JP	NZ,PROEND	;IF COUNT4 > 0 THEN SKIP\r
	INC	(HL)		;ELSE\r
	IN	A,(PORT1)\r
	BIT	7,A\r
	JR	Z,R36		;IF EDIT IS NOT ON THEN\r
R32:				;BEGIN\r
	LD	A,(TCCSTA)	;\r
	AND	9FH		;\r
	CP	04H		;\r
	JR	Z,R35		;\r
	CP	08H		;\r
	JR	Z,R35		;\r
	CP	01H		;\r
	JP	NZ,PROEND	;  IF PLAY INDICATION THEN\r
	LD	IX,REG5		;  BEGIN\r
	LD	IY,TTCCOD	;    GET ATR DIRECTION (A-REG)\r
	CALL	TCCOMP    	;\r
	JP	M,R34		;    IF FORWARD ATR DIRECTION THEN\r
R33:	LD	A,0FBH		;    BEGIN\r
	CALL	OUTPUT		;      SET ATR IN FORWIND MODE\r
	LD	A,7		;\r
	LD	(COUNT4),A	;      COUNT4 = 7\r
	JP	PROEND		;    END ELSE\r
R34:	LD	A,0F7H		;    BEGIN\r
	CALL	OUTPUT		;      SET ATR IN REWIND MODE\r
	LD	A,12		;\r
	LD	(COUNT4),A	;      COUNT4 = 12\r
	JP	PROEND		;    END\r
				;  END ELSE\r
R35:	LD	A,7FH		;  IF RESTARTING IS FINISHED THEN\r
	OUT	(PORT1),A	;  SET EDIT ON\r
	LD	A,5		;\r
	LD	(COUNT4),A	;  COUNT4 = 5\r
	JP	PROEND		;END\r
				;ELSE\r
R36:	LD	IX,CONS22	;BEGIN\r
	LD	IY,REG4		;\r
	CALL	TCCOMP		;  IF SPEED OF ATR IS LESS THAN MINIMUM\r
	JP	M,R37		;  SPEED SPX THEN\r
	    	      		;  BEGIN\r
	CALL	LOCKST		;    SET ATR IN STOP MODE AND SET LOCK MON.FLAG\r
	JP	PROEND		;  END\r
				;  ELSE\r
R37:	    	      		;  BEGIN\r
	CALL	FWROUT		;    SET ATR IN RIGHT MODE OF OPERATION\r
	UPDATM	LOCKTIM,5	;\r
				;\r
	LD	HL,FLAG1	;\r
	BIT	4,(HL)		;\r
	JP	Z,PROEND	;\r
	IN	A,(PORT4)	;\r
	BIT	3,A		;\r
	JP	NZ,PROEND	;\r
	LD	IX,CONS02	;\r
	LD	IY,REG3		;\r
	CALL	TCCOMP		;\r
	JP	M,PROEND	;\r
	LD	IX,CONS26	;\r
	LD	IY,REG4		;\r
	CALL	TCCOMP		;\r
	JP	M,PROEND	;\r
	LD	IX,CONS01	;    IF VTR IN PLAY (OR AT LOWER SPEED) ,\r
	LD	IY,REG6		;    ATR AT LOW SPEED FORWARD AND DISPLACEMENT DT'(N)\r
	CALL	TCCOMP		;    ONE FRAME OR LESS THEN\r
	CALL	P,QROUT		;    START SYNCRONIZATION/SEARCHING\r
	JP	PROEND		;  END\r
				;END\r
\r
;---------------------------------------------------------------------------\r
;LOCK MONITOR ROUTINE :\r
\r
RTIN4:	CALL	UTCNUL\r
	JP	Z,R42		;IF UTC SPEED > 0 THEN\r
				;BEGIN\r
	CALL	UTCLOW		;\r
	JP	P,PROEND	;  IF UTC SPEED IS LOW THEN SKIP\r
				;  ELSE\r
	LD	IX,REG6		;\r
	LD	IY,CONS24	;\r
	CALL	TCCOMP		;\r
	JP	P,R41		;\r
	LD	IX,REG5		;\r
	LD	IY,TTCREG	;  IF DT'(N) < DT1 ,\r
	CALL	TCCOMP		;     TTC'(N) < (TTCREG) AND\r
	JP	P,R41		;     UTC FORWARD  THEN\r
	LD	HL,FLAG1	;\r
	BIT	4,(HL)		;\r
	JR	Z,R41		;\r
	LESTAB	LOCKTIM		;  BEGIN\r
R40:	CALL	SCOMMON		;    WHILE THE VTR IS RUNNING BUT HAS NOT REACHED\r
	EI			;    THE CORRESPONDING STARTING TTC OF ATR DO\r
	LD	HL,FORWAR	;    BEGIN\r
	LD	BC,LOCKTIM	;\r
	ADD	HL,BC		;\r
	BIT	7,(HL)		;      IF LOCK-TIMER IS PASSIVE THEN\r
	JP	NZ,LP1		;      GOTO LP1\r
	LD	DE,TMPCOD	;      ELSE\r
	LD	HL,UTCCOD	;\r
	LD	BC,4		;\r
	LDIR			;\r
	LD	IX,TMPCOD	;\r
	LD	IY,LOCREG	;\r
	LD	BC,REG5		;      CHECK IF THE VTR HAS REACHED\r
	CALL	TCSUB		;      THE STARTING TTC OF THE ATR\r
	LD	IX,REG5		;\r
	LD	IY,CONS01	;\r
	LD	BC,TMPCOD	;\r
	CALL	TCADD		;\r
	LD	IX,TMPCOD	;\r
	LD	IY,TTCREG	;\r
	CALL	TCCOMP		;\r
	JP	M,R40		;    END-WHILE\r
	LD	A,0FEH		;    ELSE\r
	CALL	OUTPUT		;    SET THE ATR IN PLAY MODE\r
	JP	LP0		;    GOTO LP0 AND WAIT FOR TIMER ACTIVATION\r
				;  END\r
				;  ELSE\r
R41:				;  CHECK TTC-UTC DISPLACEMENT AND\r
	CALL	QROUT		;  TAKE PROPER ACTION\r
	JR	PROEND		;END\r
				;ELSE\r
R42:				;BEGIN\r
	LD	IX,REG5		;\r
	LD	IY,CONS23	;\r
	LD	BC,TMPCOD	;\r
	CALL	TCADD		;\r
	LD	IX,TMPCOD	;\r
	LD	IY,TTCREG	;\r
	CALL	TCCOMP		;\r
	JR	Z,PROEND	;  IF ATR IS NOT PARKED CORRECTLY THEN\r
	CALL	SROUT		;  CALL	SROUT AND\r
	RESTART S,SEARNR,SEARCH	;  RESTART SEARCH PROCESS FROM "SEARCH"\r
	          		;END\r
\r
;--------------------------------------------------------------------------\r
PROEND:	JP	PASPRO\r
\r
;----------------------------------------------------------------------------\r
;----------------------------------------------------------------------------\r
ABSDISP	LD	IX,REG2		;\r
	LD	IY,REG5		;\r
	CALL	TCCOMP		;\r
	JP	M,AB1		;\r
	LD	BC,REG6		;\r
	CALL	TCSUB		;DO (REG6) = ABSOLUTE VALUE OF TTC-UTC DISPL.MENT\r
	RET			;\r
AB1:	LD	IX,REG5		;\r
	LD	IY,REG2		;\r
	LD	BC,REG6		;\r
	CALL	TCSUB		;\r
	RET			;\r
\r
\r
LOFLAG:	LD	A,(FLAG2)\r
	AND	0C3H\r
	OR	B\r
	LD	(FLAG2),A\r
	RET\r
\r
\r
LOCKST:	LD	A,0EFH\r
	LD	(COMBYT),A\r
	CALL	OUTPUT		;SET ATR IN STOP MODE\r
	LD	B,04H\r
	CALL	LOFLAG		;SET "LOCK MONITORING IN PROGRESS" -FLAG\r
	UPDATM	LOCKTIM,10\r
	RET\r
\r
\r
UTCNUL:	LD	IX,CONS00\r
	LD	IY,REG3\r
	CALL	TCCOMP\r
	RET\r
\r
UTCLOW:	LD	IX,CONS01\r
	LD	IY,REG3\r
	CALL	TCCOMP\r
	RET\r
\r
\r
;--------------------------------------------------------------------------\r
SROUT:	LD	IX,REG5\r
	LD	IY,CONS23\r
	LD	BC,TTCREG\r
	CALL	TCADD		;DO (TTCREG) = TTC'(N) + S.P.OFFSET\r
	CALL	CPOINTS		;CALCULATE CHECKPOINTS\r
	LD	HL,COMBYT\r
	LD	(HL),0FFH\r
	CALL	CLEARY\r
	LD	HL,FLAG1\r
	RES	1,(HL)		;RESET READ FLAG\r
	SET	5,(HL)		;SET LOCK FLAG\r
	LD	B,20H\r
	CALL	LOFLAG		;SET "SEARCHING IN PROGRESS"-FLAG\r
	UPDATM	LOCKTIM,10\r
	RET\r
\r
\r
;---------------------------------------------------------------------------\r
QROUT:	UPDATM	LOCKTIM,10\r
       	LD	IX,REG6		;\r
	LD	IY,CONS25	;\r
	CALL	TCCOMP		;\r
	JP	P,Q1		;\r
	LD	HL,FLAG1	;\r
	BIT	4,(HL)		;IF DISPLACEMENT DT'(N) < DT2 AND\r
	JR	Z,Q1		;THE UTC-VALUES ARE INCREASING THEN\r
	LD	HL,COMBYT	;BEGIN\r
	LD	(HL),0FFH	;\r
	CALL	CLEARY		;\r
	LD	HL,FLAG1	;\r
	SET	5,(HL)		;  SET LOCK-FLAG\r
	RES	1,(HL)		;  RESET READ FLAG\r
	RESTART S,SYNCNR,SYNCRO	;  RESTART SYNCRONIZATION PROCESS\r
	LD	B,10H		;\r
	CALL	LOFLAG		;  SET "SYNCRONIZATION IN PROGRESS"-FLAG\r
	RET			;END ELSE\r
				;BEGIN\r
Q1:	CALL	CLEARY		;\r
	LD	HL,FLAG1	;\r
	SET	1,(HL)		;  SET READ FLAG\r
	SET	5,(HL)		;  SET LOCK-FLAG\r
	LD	A,(FLAG2)	;\r
	BIT	5,A		;\r
	JR	Z,Q2		;  IF THE ATR WAS SEARCHING THEN\r
				;  BEGIN\r
	LD	A,(TCCSTA)	;\r
	AND	9FH		;\r
	CP	01H		;\r
	JR	Z,Q2		;    IF THE ATR WAS FAST WINDING THEN\r
	LD	A,7FH		;    PUT ON EDIT\r
	OUT	(PORT1),A	;\r
	LD	A,2		;\r
	LD	(COUNT4),A	;    COUNT4 = 2\r
	LD	A,25		;\r
	LD	(COUNT5),A	;    COUNT5 = 25\r
	LD	B,08H		;\r
	CALL	LOFLAG		;    SET "FAST WINDING IN PROGRESS"-FLAG\r
	RET			;  END ELSE\r
Q2:	LD	A,0FEH		;  BEGIN\r
	CALL	OUTPUT		;    SET ATR IN PLAY MODE\r
	LD	A,1		;\r
	LD	(COUNT4),A	;    COUNT4 = 1\r
	LD	A,25		;\r
	LD	(COUNT5),A	;    COUNT5 = 25\r
	LD	B,08H		;\r
	CALL	LOFLAG		;    SET "FAST WINDING IN PROGRESS"-FLAG\r
	RET			;  END\r
				;END\r
\r
\r
;-----------------------------------------------------------------------------\r
\r
FWROUT:	IN	A,(PORT4)\r
	BIT	3,A\r
	JP	NZ,RWFW		;IF ATR IN FORWIND THEN\r
FWFW:				;BEGIN\r
	LD	HL,FLAG1	;\r
	BIT	4,(HL)		;\r
	JR	Z,FW4		;  IF VTR IN FORWIND TOO THEN\r
	CALL	SPUCHK		;  BEGIN\r
	JP	P,FW2		;    IF SPEED OF VTR NOT HIGH THEN\r
				;    BEGIN\r
	CALL	CORLOW		;      MAKE LOW SPEED CORRECTION\r
	CALL	DT6CHK		;\r
	JP	P,FW1		;      IF DT'(N) < DT6 THEN\r
	CALL	NORMFW		;      USE NORMAL SPEED REGULATION\r
	JR	FWEND		;      ELSE\r
FW1:	CALL	FULLFW		;      USE FULL SPEED REGULATION\r
	JR	FWEND		;    END ELSE\r
FW2:				;    BEGIN\r
	CALL	CORHIGH		;      MAKE HIGH SPEED CORRECTION\r
	CALL	DT4CHK		;\r
	JP	P,FW3		;      IF DT'(N) < DT4 THEN\r
	CALL	NORMFW		;      USE NORMAL SPEED REGULATION\r
	JR	FWEND		;      ELSE\r
FW3:	CALL	FULLFW		;      USE FULL SPEED REGULATION\r
	JR	FWEND		;    END\r
				;  END ELSE\r
FW4:	CALL	DT5CHK		;  BEGIN\r
	JP	P,FW5		;    IF DT'(N) < DT5 THEN\r
	CALL	NULSPD		;    BRAKE\r
	JR	FWEND		;    ELSE\r
FW5:	CALL	FULLFW		;    USE FULL SPEED REGULATION\r
	         		;  END\r
				;\r
FWEND:	LD	IX,REG7		;\r
	LD	IY,REG4		;\r
	CALL	TCCOMP		;\r
	JP	P,FW6		;\r
	LD	A,77H		;\r
	CALL	OUTPUT		;  FORWIND/REWIND REGULATION\r
	RET			;\r
FW6:	LD	A,7BH		;\r
	CALL	OUTPUT		;\r
	RET			;\r
				;\r
NORMFW:	CALL	FWSTAT		;\r
	CP	0FBH		;\r
	LD	IX,REG3		;\r
	LD	IY,CONS01	;\r
	LD	BC,REG7		;\r
	JR	NZ,FW7		;  IF ATR IS BEHIND THE VTR THEN\r
				;  BEGIN\r
	CALL	TCADD		;    INCREASE SPEED\r
	LD	IX,REG7		;\r
	LD	IY,CONS02	;\r
	CALL	TCCOMP		;\r
	RET	P		;    IF WANTED SPEED OF ATR IS TOO LOW\r
	LD	HL,CONS02	;    SET SPEED TO MINIMAL SPEED\r
	LD	DE,REG7		;\r
	LD	BC,4		;\r
	LDIR			;\r
	RET			;  END ELSE\r
FW7:				;  BEGIN\r
     	CALL	TCSUB		;    DECREASE SPEED\r
	RET	NC		;    IF WANTED SPEED OF ATR IS NEGATIVE\r
	LD	HL,CONS00	;    SET SPEED TO ZERO\r
	LD	DE,REG7		;\r
	LD	BC,4		;\r
	LDIR			;\r
	RET			;  END\r
				;\r
FULLFW:	CALL	FWSTAT		;\r
	CP	0FBH		;\r
	LD	DE,REG7		;\r
	LD	BC,4		;\r
	JR	NZ,FW8		;  IF ATR IS BEHIND THE VTR THEN\r
	LD	HL,CONS08	;  FULL SPEED\r
	LDIR			;\r
	RET			;  ELSE\r
FW8:	LD	HL,CONS00	;  NULL SPEED\r
	LDIR			;\r
	RET			;\r
				;END\r
;-------------------------------\r
				;ELSE\r
RWFW:				;BEGIN\r
	LD	HL,FLAG1	;\r
	BIT	4,(HL)		;\r
	JR	NZ,RW4		;  IF VTR IN REWIND TOO THEN\r
	CALL	SPUCHK		;  BEGIN\r
	JP	P,RW2		;    IF SPEED OF VTR NOT HIGH THEN\r
				;    BEGIN\r
	CALL	CORLOW		;      MAKE LOW SPEED CORRECTION\r
	CALL	DT6CHK		;\r
	JP	P,RW1		;      IF DT'(N) < DT6 THEN\r
	CALL	NORMRW		;      USE NORMAL SPEED REGULATION\r
	JR	RWEND		;      ELSE\r
RW1:	CALL	FULLRW		;      USE FULL SPEED REGULATION\r
	JR	RWEND		;    END ELSE\r
RW2:				;    BEGIN\r
	CALL	CORHIGH		;      MAKE HIGH SPEED CORRECTION\r
	CALL	DT4CHK		;\r
	JP	P,RW3		;      IF DT'(N) < DT4 THEN\r
	CALL	NORMRW		;      USE NORMAL SPEED REGULATION\r
	JR	RWEND		;      ELSE\r
RW3:	CALL	FULLRW		;      USE FULL SPEED REGULATION\r
	JR	RWEND		;    END\r
				;  END ELSE\r
RW4:	CALL	DT5CHK		;  BEGIN\r
	JP	P,RW5		;    IF DT'(N) < DT5 THEN\r
	CALL	NULSPD		;    BRAKE\r
	JR	RWEND		;    ELSE\r
RW5:	CALL	FULLRW		;    USE FULL SPEED REGULATION\r
	         		;  END\r
				;\r
RWEND:	LD	IX,REG7		;\r
	LD	IY,REG4		;\r
	CALL	TCCOMP		;\r
	JP	M,RW6		;\r
	LD	A,77H		;\r
	CALL	OUTPUT		;  FORWIND/REWIND REGULATION\r
	RET			;\r
RW6:	LD	A,7BH		;\r
	CALL	OUTPUT		;\r
	RET			;\r
				;\r
NORMRW:	CALL	FWSTAT		;\r
	CP	0FBH		;\r
	LD	IX,REG3		;\r
	LD	IY,CONS01	;\r
	LD	BC,REG7		;\r
	JR	Z,RW7		;  IF ATR IS BEHIND THE VTR THEN\r
	CALL	TCADD		;  INCREASE SPEED\r
	RET			;  ELSE\r
RW7:	CALL	TCSUB		;  DECREASE SPEED\r
	RET	NC		;\r
	LD	HL,CONS00	;\r
	LD	DE,REG7		;\r
	LD	BC,4		;\r
	LDIR			;\r
	RET			;\r
				;\r
FULLRW:	CALL	FWSTAT		;\r
	CP	0FBH		;\r
	LD	DE,REG7		;\r
	LD	BC,4		;\r
	JR	Z,RW8		;  IF ATR IS BEHIND THE VTR THEN\r
	LD	HL,CONS08	;  FULL SPEED\r
	LDIR			;\r
	RET			;  ELSE\r
RW8:	LD	HL,CONS00	;  NULL SPEED\r
	LDIR			;\r
	RET			;\r
				;END\r
				;\r
				;\r
NULSPD:	LD	HL,CONS00	;\r
	LD	DE,REG7		;\r
	LD	BC,4		;\r
	LDIR			;\r
	RET			;\r
				;\r
FWSTAT:	LD	IX,TTCCOD	;\r
	LD	IY,REG5		;\r
	CALL	TCCOMP		;\r
	JP	M,FWST1		;  FORWIND/REWIND REGULATION\r
FWST0:	LD	A,0F7H		;\r
	RET			;\r
FWST1:	LD	A,0FBH		;\r
	RET			;\r
				;\r
SPUCHK:	LD	IX,REG3		;\r
	LD	IY,CONS26	;\r
	CALL	TCCOMP		;\r
	RET			;\r
				;\r
DT4CHK:	LD	IX,REG6		;\r
	LD	IY,CNS202	;\r
	CALL	TCCOMP		;\r
	RET			;\r
				;\r
DT5CHK:	LD	IX,REG6		;\r
	LD	IY,CNS203	;\r
	CALL	TCCOMP		;\r
	RET			;\r
				;\r
DT6CHK:	LD	IX,REG6		;\r
	LD	IY,CNS204	;\r
	CALL	TCCOMP		;\r
	RET			;\r
CORLOW	LD	IX,REG5\r
	LD	IY,CNS201\r
	LD	BC,REG5\r
	CALL	TCSUB		;DO (REG5) = (REG5) - LOW SPEED OFFSET\r
	CALL	ABSDISP		;DO (REG6) = ABSOLUTE VALUE OF TTC-UTC DISPL.MENT\r
	RET\r
\r
CORHIGH	LD	IX,REG5\r
	LD	IY,CNS199\r
	LD	BC,REG5\r
	CALL	TCSUB		;DO (REG5) = (REG5) - HIGH SPEED OFFSET\r
	CALL	ABSDISP		;DO (REG6) = ABSOLUTE VALUE OF TTC-UTC DISPL.MENT\r
	RET\r
\r
\r
	DSEG\r
	DS	32\r
STAC09:\r
	END\r