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

⟦c8ce4fa97⟧ TextFile

    Length: 11081 (0x2b49)
    Types: TextFile
    Names: »TCREAD.SRC«

Derivation

└─⟦8347abc8e⟧ Bits:30005501 8" CR80 Floppy CR80FD_0033 ( ATR Source and Abs-files )
└─⟦8347abc8e⟧ Intel_ISIS_II
    └─ ⟦this⟧ »TCREAD.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: TIME CODE SCANNING 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
	CSEG\r
\r
	PUBLIC	TCREAD,STAC13,ENDRAM\r
	EXTRN	FLAG1,FLAG2,CONSX,REGUTC\r
	EXTRN	TMPCOD,NTTCCO,TTCCOD,NMTCCO,MTCCOD,SCOMMON\r
	EXTRN	NUTCCO,UTCCOD,TCCOMP,TCSUB,TCADD,CONS01,SYSRAM\r
\r
MTCADR	DEFL	0A000H\r
TTCADR	DEFL	0A004H\r
UTCADR	DEFL	0A008H\r
TCSTAT	DEFL	0A00CH\r
\r
\r
\r
TCREAD:	LD	SP,STAC13\r
\r
START:	CALL	SCOMMON\r
	EI\r
\r
;------------------------------------------------------------------------------\r
;------------------------------------------------------------------------------\r
TTCREAD	LD	HL,TCSTAT\r
	BIT	1,(HL)		;IF THERE HAS'NT BEEN VALUE CHANGE IN\r
	JP	Z,MTCREAD	;TTC SINCE LAST READ THEN GOTO MTCREAD\r
\r
	LD	DE,TMPCOD	;\r
	LD	HL,NTTCCO	;\r
	LD	BC,4		;\r
	LDIR			;MOVE TTC(N-1) TO TEMPORARY REGISTER\r
\r
	LD	DE,NTTCCO+3	;\r
	LD	HL,TTCADR	;\r
	LD	BC,4		;\r
T1:	LDI			;TRANSFER ACTUAL TTC TO TTC(N)-REG.\r
	DEC	DE		;\r
	DEC	DE		;\r
	JP	PE,T1		;\r
\r
	IN	A,(PORT4)\r
	AND	08H\r
	JR	NZ,BACKWS	;IF FORWARDS TTC READING THEN\r
;------------------------------------------------------------------------\r
				;BEGIN\r
	LD	HL,NTTCCO	;\r
	CALL	VALID		;  CHECK IF VALID BCD CODE\r
	JR	C,T01		;  IF NO VALID BCD CODE THEN\r
	LD	IX,TMPCOD	;  BEGIN\r
	LD	IY,CONS01	;\r
	LD	BC,NTTCCO	;    TTC(N) = TTC(N-1) + 1 FRAME\r
	CALL	TCADD		;\r
				;  END\r
T01:	LD	IX,TMPCOD	;\r
	LD	IY,NTTCCO	;\r
	CALL	TCCOMP		;\r
	JP	P,T2		;\r
	LD	IY,CONSX	;\r
	LD	BC,TMPCOD	;\r
	CALL	TCADD		;\r
	LD	BC,TTCCOD	;\r
	LD	IY,NTTCCO	;\r
	CALL	TCCOMP		;  IF TTC(N-1) < TTC(N) < TTC(N-1)+FRAME OFFS.\r
	JP	M,T2		;  THEN\r
	LD	IX,NTTCCO	;  BEGIN\r
	LD	IY,CONS01	;\r
	CALL	TCADD		;    VALID TTC = TTC(N)+1 FRAME\r
	JR	MTCREAD		;  END ELSE\r
T2:	LD	IX,TTCCOD	;  BEGIN\r
	LD	IY,CONS01	;\r
	LD	BC,TTCCOD	;\r
	CALL	TCADD		;    EXTRAPOL.VALID TTC BY ADDING 1 FRAME\r
	JR	MTCREAD		;  END\r
				;END ELSE\r
;-----------------------------------------------------------------------------\r
BACKWS:				;BEGIN\r
	LD	HL,NTTCCO	;\r
	CALL	VALID		;  CHECK IF VALID BCD CODE\r
	JR	C,T02		;  IF NO VALID BCD CODE THEN\r
	LD	IX,TMPCOD	;  BEGIN\r
	LD	IY,CONS01	;\r
	LD	BC,NTTCCO	;    TTC(N) = TTC(N-1) - 1 FRAME\r
	CALL	TCSUB		;\r
				;  END\r
T02:	LD	IX,TMPCOD	;\r
	LD	IY,NTTCCO	;\r
	CALL	TCCOMP		;\r
	JP	M,T3		;\r
	LD	IY,CONSX	;\r
	LD	BC,TMPCOD	;\r
	CALL	TCSUB		;\r
	LD	BC,TTCCOD	;\r
	LD	IY,NTTCCO	;\r
	CALL	TCCOMP		;  IF TTC(N-1)-FRAME OFFS. < TTC(N) < TTC(N-1)\r
	JP	P,T3		;  THEN\r
	LD	IX,NTTCCO	;  BEGIN\r
	LD	IY,CONS01	;\r
	CALL	TCSUB		;    VALID TTC = TTC(N) - 1 FRAME\r
	JR	MTCREAD		;  END ELSE\r
T3:	LD	IX,TTCCOD	;  BEGIN\r
	LD	IY,CONS01	;\r
	LD	BC,TTCCOD	;\r
	CALL	TCSUB		;\r
				;  END\r
				;END\r
;--------------------------------------------------------------------------\r
;--------------------------------------------------------------------------\r
MTCREAD LD	HL,TCSTAT	;\r
	BIT	0,(HL)		;IF THERE HAS'NT BEEN VALUE CHANGE IN\r
	JP	Z,UTTCRD	;MTC SINCE LAST READ THEN GOTO UTTCRD\r
\r
	LD	HL,FLAG2\r
	SET	0,(HL)		;SET MTC FLAG\r
\r
	LD	DE,TMPCOD	;\r
	LD	HL,NMTCCO	;\r
	LD	BC,4		;\r
	LDIR			;MOVE MTC(N-1) TO TEMPORARY REGISTER\r
\r
	LD	DE,NMTCCO+3	;\r
	LD	HL,MTCADR	;\r
	LD	BC,4		;\r
M1:	LDI			;TRANSFER ACTUAL MTC TO MTC(N)-REG.\r
	DEC	DE		;\r
	DEC	DE		;\r
	JP	PE,M1		;\r
\r
	LD	HL,NMTCCO\r
	CALL	VALID		;CHECK IF VALID BCD CODE\r
	JR	C,M10		;IF NO VALID BCD MTC THEN\r
	LD	IX,TMPCOD	;BEGIN\r
	LD	IY,CONS01	;\r
	LD	BC,NMTCCO	;  MTC(N) = MTC(N-1) + 1 FRAME\r
	CALL	TCADD		;\r
				;END\r
M10:	LD	IX,TMPCOD	;\r
	LD	IY,NMTCCO	;\r
	CALL	TCCOMP		;\r
	JP	P,M2		;\r
\r
	LD	IY,CONSX	;\r
	LD	BC,TMPCOD	;\r
	CALL	TCADD		;\r
\r
	LD	IY,NMTCCO	;\r
	CALL	TCCOMP		;IF MTC(N-1) < MTC(N) < MTC(N-1)+FRAME OFFS.\r
	JP	M,M2		;THEN\r
\r
	LD	DE,MTCCOD	;BEGIN\r
	LD	HL,NMTCCO	;\r
	LD	BC,4		;\r
	LDIR			;  UPDATE THE VALID MTC-VALUE\r
	JR	UTTCRD		;END ELSE\r
M2:	LD	IX,MTCCOD	;BEGIN\r
	LD	IY,CONS01	;\r
	LD	BC,MTCCOD	;\r
	CALL	TCADD		;  EXTRAPOL. VALID MTC BY ADDING 1 FRAME\r
				;END\r
\r
;--------------------------------------------------------------------------\r
;--------------------------------------------------------------------------\r
UTTCRD:	LD	C,4		;\r
	LD	DE,REGUTC+3	;\r
	LD	HL,UTCADR	;\r
UT0:	LD	A,(DE)		;IF NO CHANGES IN DATALINE WORD THEN SKIP\r
	CP	(HL)		;\r
	JR	NZ,UT1		;\r
	INC	HL		;\r
	DEC	DE		;\r
	DEC	C		;\r
	JR	NZ,UT0		;\r
	JP	PROEND		;\r
\r
UT1:	LD	DE,TMPCOD	;\r
	LD	HL,NUTCCO	;\r
	LD	BC,4		;\r
	LDIR			;MOVE UTC(N-1) TO TEMPORARY REGISTER\r
\r
	LD	DE,NUTCCO+3	;\r
	LD	HL,UTCADR	;\r
	LD	BC,4		;\r
U0:	LDI			;TRANSFER ACTUAL UTC TO UTC(N)-REG.\r
	DEC	DE		;\r
	DEC	DE		;\r
	JP	PE,U0		;\r
\r
	LD	BC,4		;\r
	LD	DE,REGUTC	;MOVE DATALINE WORD TO REGUTC\r
	LD	HL,NUTCCO	;\r
	LDIR			;\r
\r
	LD	HL,NUTCCO\r
	CALL	VALID		;CHECK IF VALID BCD CODE\r
	JR	C,U10		;IF NO VALID BCD UTC THEN\r
	LD	IX,TMPCOD	;BEGIN\r
	LD	IY,CONS01	;\r
	LD	BC,NUTCCO	;  UTC(N) = UTC(N-1) + 1 FRAME\r
	CALL	TCADD		;\r
				;END\r
U10:	LD	IX,TMPCOD	;\r
	LD	IY,NUTCCO	;\r
	CALL	TCCOMP		;\r
	JR	Z,PROEND	;IF UTC(N) = UTC(N-1) THEN SKIP UPDATING\r
	JP	P,U2		;IF UTC(N) > UTC(N-1) THEN \r
\r
;-------------------------------------------------------------------------\r
    	LD	IY,CONSX	;BEGIN\r
	LD	BC,TMPCOD	;\r
	CALL	TCADD		;  PERFORM UTC(N-1)+FRAME OFFSET\r
\r
	LD	IY,NUTCCO	;\r
	CALL	TCCOMP		;\r
	LD	IY,CONS01	;\r
	LD	BC,UTCCOD	;\r
	JP	M,U1A		;  IF UTC(N) =< UTC(N-1) + FRAME OFFSET THEN\r
	LD	IX,NUTCCO	;  BEGIN\r
	CALL	TCADD		;    VALID UTC = UTC(N) + 1\r
	JR	PROEND		;  END ELSE\r
U1A:	LD	IX,UTCCOD	;  BEGIN\r
	CALL	TCADD		;    EXTRAPOL.VALID UTC BY ADDING 1 FRAME\r
	JR	PROEND		;  END\r
				;END ELSE\r
;--------------------------------------------------------------------------\r
U2:	LD	IY,CONSX	;BEGIN\r
	LD	BC,TMPCOD	;\r
	CALL	TCSUB		;  PERFORM UTC(N-1)-FRAME OFFSET\r
\r
	LD	IY,NUTCCO	;\r
	CALL	TCCOMP		;\r
	LD	IY,CONS01	;\r
	LD	BC,UTCCOD	;\r
	JP	P,U2A		;  IF UTC(N) > UTC(N-1) - FRAME OFFSET THEN\r
	LD	IX,NUTCCO	;  BEGIN\r
	CALL	TCSUB		;    VALID UTC = UTC(N) - 1 FRAME\r
	JR	PROEND		;  END ELSE\r
U2A:	LD	IX,UTCCOD	;  BEGIN\r
	CALL	TCADD		;    EXTRAPOL.VALID UTC BY ADDING 1 FRAME\r
				;  END\r
				;END\r
;------------------------------------------------------------------------\r
;------------------------------------------------------------------------\r
PROEND:	JP	START\r
\r
\r
VALID:\r
VAL23:	LD	A,(HL)\r
	AND	0F0H\r
	CP	30H\r
	RET	NC		;RETURN IF NO VALID CODE\r
	CP	20H\r
	LD	A,(HL)\r
	JR	Z,VAL231\r
	AND	0FH\r
	CP	0AH\r
	RET	NC\r
	INC	HL\r
	JR	VAL59\r
VAL231:	AND	0FH\r
	CP	04H\r
	RET	NC		;RETURN IF NO VALID CODE\r
	INC	HL\r
\r
VAL59:	LD	C,2\r
VAL591:	LD	A,(HL)\r
	AND	0F0H\r
	CP	60H\r
	RET	NC		;RETURN IF NO VALID CODE\r
	LD	A,(HL)\r
	AND	0FH\r
	CP	0AH\r
	RET	NC		;RETURN IF NO VALID CODE\r
	INC	HL\r
	DEC	C\r
	JR	NZ,VAL591\r
\r
VAL24:	LD	A,(HL)\r
	AND	0F0H\r
	CP	30H\r
	RET	NC		;RETURN IF NO VALID CODE\r
	CP	20H\r
	LD	A,(HL)\r
	JR	Z,VAL241\r
	AND	0FH\r
	CP	0AH\r
	RET\r
VAL241:	AND 	0FH\r
	CP	05H\r
	RET\r
\r
\r
	DSEG\r
	DS	32\r
STAC13:\r
ENDRAM	DS	1\r
	END\r