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

⟦209828aa8⟧ TextFile

    Length: 4888 (0x1318)
    Types: TextFile
    Names: »TXDRIVER.S«

Derivation

└─⟦a3edd706e⟧ Bits:30005202 8" Zilog MCZ/1 Floppy CR80FD_0028 ( TC 500 SEC. PROTOCOL BACK UP ! (V1) BB A1 820907 NCJ )
    └─ ⟦this⟧ »TXDRIVER.S« 
└─⟦e12128f26⟧ Bits:30005200 8" Zilog MCZ/1 Floppy CR80FD_0026 ( TC 500 SEC. PROTOCOL BB V1 830407 NCJ )
    └─ ⟦this⟧ »TXDRIVER.S« 

TextFile

;***************************************************************************
;*
;*		TRANSMITTER  MODULE
;*
;***************************************************************************
*INCLUDE CONSTANT.S


	GLOBAL		TRAROU
	GLOBAL		START_TRANSMISSION
	GLOBAL		XMIT_LOOP
	GLOBAL		END_TRANSMISSION
	GLOBAL		TRA_END
	GLOBAL		TRA_SYN
	GLOBAL		SYNC_TRANSMISSION
	GLOBAL		PSEUDO_TRANSMITTER
	GLOBAL		PRE_START
	EXTERNAL	SIOREADWRITE

TRAROU	LD	HL,TRATAB
	LD	C,(IY+1EH)
	LD	B,0
	ADD	HL,BC
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	EX	DE,HL
	JP	(HL)
 
TRATAB	DEFW	START_TRANSMISSION
	DEFW	XMIT_LOOP
	DEFW	TRA_END
	DEFW	END_TRANSMISSION
	DEFW	TRA_SYN
	DEFW	PSEUDO_TRANSMITTER
	DEFW	SYNC_TRANSMISSION
	DEFW	PRE_START
 
;ECHO \f


START_TRANSMISSION

	LD	(IY+18H),01H	;					19
	LD	L,(IY+12H)	;GET POINTER TO FIRST CHARACTER		19
	LD	H,(IY+13H)	;					19
	LD	A,(HL)		;GET CHARACTER				07
	CP	SOH		;IF FIRST CHARACTER = SOH OR STX	19
	JR	Z,CRC_ENABLE	;					10
	CP	STX		;					19
	JR	NZ,CRC_DISABLE	;THEN DO					10

CRC_ENABLE

	LD	L,(IY+14H)	;
	LD	H,(IY+15H)	;
	DEC	HL		;	DECREMENT CURRENT BYTE COUNT
	LD	(IY+14H),L	;
	LD	(IY+15H),H	;
 
	INC	(IY+12H)	;
	JR	NZ,CRC2		;	INCREMENT BUFFER POINTER
	INC	(IY+13H)	;
CRC2
	LD	C,(IY+1CH)	;					19
	OUT	(C),A		;	TRANSMIT FIRST CHARACTER	12
	LD	(IY+16H),00H	;	RESET CHECKSUM CALCULATOR	19
	LD	(IY+1EH),02H	;	NEXT INT.ROUTINE = CONXTRA
	RET			;

CRC_DISABLE

				;ELSE DO				  
				;END
 
;*************************************************************************
XMIT_LOOP

	LD	L,(IY+12H)	;GET POINTER TO NEXT CHARACTER
	LD	H,(IY+13H)	;
	LD	A,(HL)		;GET NEXT CHARACTER
	LD	C,(IY+1CH)	;
	OUT	(C),A		;TRANSMIT NEXT CHARACTER
	XOR	(IY+16H)	;
	LD	(IY+16H),A	;SAVE NEW CHECKSUM
				;
	LD	E,(IY+14H)	;GET CURRENT BYTE COUNT
	LD	D,(IY+15H)	;
	DEC	DE		;
	LD	A,E		;
	OR	D		;IF LAST CHARACTER
	JR	NZ,TRACOUNT	;THEN DO
	LD	(IY+18H),0	;	STOP TIMER
	LD	(IY+19H),0	;	RESET TIME VALUE
	LD	(IY+1AH),0	;	RESET TIME OUT INDICATION
	LD	A,(HL)		;	GET CHARACTER
	CP	ETB		;	IF NOT ETX OR ETB TRANSMITTED	19
	JR	Z,ENABLE_CRC	;					10
	CP	ETX		;					19
	JR	Z,ENABLE_CRC	;	THEN DO				10

DISABLE_CRC

	LD	(IY+1EH),04H	;		NEXT INT.ROUTINE = TRAXEND
	RET			;
				;     ELSE DO
ENABLE_CRC

	LD	(IY+1EH),06H	;	NEXT INT.ROUTINE = ENDXTRA
	LD	(IY+20H),00H	;	RESET TX-UNDERRUN		19
	RET			;
				;     END
TRACOUN	LD	(IY+14H),E	;DECREMENT AND SAVE CURRENT BYTE COUNT	19
	LD	(IY+15H),D	;					19
	INC	HL		;INCREMENT BUFFER POINTER
	LD	(IY+12H),L	;SAVE BUFFER POINTER	
	LD	(IY+13H),H	;					19
	LD	A,(IY+1AH)	;IF TIMEOUT INDICATOR = 01H		19
	CP	01H		;					07
	RET	NZ		;THEN DO
	LD	(IY+1EH),08H	;	NEXT INT.ROUTINE = TRAXSYN
	XOR	A		;	RESET TIMEOUT INDICATOR		04
	LD	(IY+1AH),A	;					19
	LD	(IY+19H),A	;	RESET TIMEOUT VALUE		19
				;     END
	RET			;
;ECHO \f


;***************************************************************************
END_TRANSMISSION

	LD	(IY+1EH),04H	;NEXT INT.ROUTINE = TRAXEND
	LD	A,(IY+16H)	;GET ACCUMULATED CHECKSUM		19
	LD	C,(IY+1CH)	;					19
	OUT	(C),A		;TRANSMIT CHECKSUM			12
	RET			;
 
;******************************************************************************
TRA_END
	LD	BC,1010010100000001B
				;RESET TX_CRC_ENABLE
	CALL	SIOREADWRITE	; SIOCON 5,W,R,01H
	LD 	BC,0110000000101000B
				;RESET TX_INTERRUPT_PENDING
	CALL	SIOREADWRITE	; SIOCON 0,W,S,028H
	LD	(IY+1EH),0AH	;NEXT INT.ROUTINE = PSEXTRA
	LD	(IY+21H),00H	;(SEE TRASTA)				19
	LD	BC,1010010100001000B
				;DISABLE TX_INTERRUPT
	CALL	SIOREADWRITE	;SIOCON 5,W,R,08H
	RET			;RETURN FROM GENERAL PROCESS		14
 
;*****************************************************************************
TRA_SYN
	LD	BC,1010010100000001B
				;RESET TX_CRC_ENABLE
	CALL	SIOREADWRITE		; SIOCON 5,W,R,01H
	LD	A,SYN	      ; TRANSMIT FIRST SYNC CHAR
	LD	C,(IY+1CH)	;					19
	OUT	(C),A		;					12
	LD	(IY+1EH),0CH	;NEXT INT.ROUTINE = SYNXTRA
	RET			;RETURN FROM GENERAL PROCESS		14
 
;******************************************************************************
SYNC_TRANSMISSION

	LD	A,SYN		;TRANSMIT SECOND SYNC CHARACTER		19
	LD	C,(IY+1CH)	;					19
	OUT	(C),A		;CHARACTER				12
	LD	(IY+1EH),02H	;NEXT INT.ROUTINE = CONXTRA
	RET			;RETURN FROM GENERAL PROCESS		14
 
;*****************************************************************************
PSEUDO_TRANSMITTER

	LD	BC,0110000000101000B
				;RESET TX_INTERRUPT_PENDING
	CALL	SIOREADWRITE	; SIOCON 0,W,S,028H
	RET			; RETURN
				;     END
 
;*****************************************************************************
PRE_START
 
	LD	A,SYN		;TRANSMIT SYNC CHARACTER		19
	LD	C,(IY+1CH)	;					19
	OUT	(C),A		;					11
	LD	A,(IY+21H)	;IF NEW1BUF >= 02H			19
	CP	02H		;					07
	RET	M		;THEN DO				10
	CP	05H		;	IF MINIMUM 4 SYNC CHARACTERS	07
	JP	M,NO1EXC	;	TRANSMITTED			10
				;	THEN DO
	LD	(IY+1EH),00H	;		NEXT INT.ROUTINE = STAXTRA
	RET			;		RETURN FROM PROCESS	10
				;	     END
NO1EXC	INC	A		;	INCREMENT NUMBER OF TRANSMITTED	04
	LD	(IY+21H),A	;	SYNC CHARACTERS			19
	RET			;     END
 
;ECHO \f