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

⟦25bb17386⟧ TextFile

    Length: 4347 (0x10fb)
    Types: TextFile
    Names: »SIO.DRI.S«

Derivation

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

TextFile

;******************************************************************************
;*
;*		    SIO DRIVER  MODULE
;*
;******************************************************************************
*INCLUDE CONSTANT.S
 
		EXTERNAL	SYSRAM,SUBDEQ,SUBSEND
		EXTERNAL	RECI,MESADD
		EXTERNAL	SIOREADWRITE
		EXTERNAL	SUBENQ,SUBREC
		GLOBAL		TRAXST
 
;****************************************************************************
;*		    TRAXST  PROCEDURE
;****************************************************************************
TRAXST
	DI			;DIABLE INTERRUPT			04
	XOR	A		;
	CP	(IY+21H)	;IF PREVIOUS BUFFER EMPTY
	JR	NZ,BEGTRA	;THEN DO				10
	EI			;	ENABLE INTERRUPT		04
	LD	E,(IY+36H)	;	IF ADDRESS ELEMENT CONTAIN	19
	LD	D,(IY+37H)	;	BUFFER ADDRESS			19
	LD	A,E		;					04
	OR	D		;					04
	JR	Z,BEGTRA	;	THEN DO				10
	LD	L,(IY+32H)	;		TRANSFER BUFFER TO 	19
	LD	H,(IY+33H)	;					19
	DI			;		RETRANSMISSION QUEUE	04
	CALL	SUBSEND		;					  
	EI			;					04
	LD	(IY+36H),00H	;		RESET ADDRESS ELEMENT	19
	LD	(IY+37H),00H	;	      END			19
BEGTRA	DI		     	;END					04
	LD	L,(IY+30H)	;	IF ELEMENT IN TRANSMITTER QUEUE	19
	LD	H,(IY+31H)	;					19
	LD	A,(HL)		;					07
	CP	01H		;					07
	JR	NZ,RECXST	;	THEN DO				10
	PUSH	HL		;	   	SAVE QUEU ADDRESS
	LD	BC,1110010100001000B
				;		ENABLE TX_INTERRUPT
	CALL	SIOREADWRITE	;		SIOCON 5,W,S,08H
	LD	A,01
	LD	(IY+21H),A	;		SET NEW1BUF = 01H	19
	LD	A,SYN		;
	LD	C,(IY+1CH)	;		GET SIO ADDRESS		19
	OUT	(C),A		;		TRANSMIT SYNC CHARACTER
	LD	(IY+1EH),0EH	;		NEXT INT.ROUTINE = PREXSTA
	POP	HL		;		RESTORE QUEU ADDRESS
	LD	(SYSRAM+0E2H),HL;		GET NEW BUFFER ELEMENT	10
	PUSH	IY		;		SAVE TABLE ADDRESS	15
	CALL	RECI		;		FROM TRANSMITTER QUEUE	  
	CALL	MESADD		;
	POP	IY		;		RESTORE TABLE ADDRESS	14
	LD	HL,BCOFF	;		CALCULATE BYTECOUNT
	ADD	HL,DE		;		ADDRESS			11
	LD	C,(HL)		;		GET BYTE COUNT		07
	INC	HL		;					06
	LD	B,(HL)		;					07
	LD	(IY+14H),C	;		SAVE BYTE COUNT IN	19
	LD	(IY+15H),B	;		CURRENT BYTE COUNT WORD	19
	LD	HL,TSAOFF	;		CALCULATE TRANSMITTER
	ADD	HL,DE		;		START ADDRESS		11
	LD	C,(HL)		;		GET TRANSMITTER ADDRESS	07
	INC	HL		;					06
	LD	B,(HL)		;					07
	LD	(IY+12H),C	;		SAVE TRANSMITTER START	19
	LD	(IY+13H),B	;		ADDRESS			19
	LD	(IY+36H),E	;		SAVE ELEMENT ADDRESS	19
	LD	(IY+37H),D	;					19
CONTRA	LD	A,02H		;		SET PREVIOUS BUFFER 	07
	LD	(IY+21H),A	;		FULL			19
	DEC	A		;		RESET TX-UNDERRUN 	04
	LD	(IY+20H),A	;		STATUS			07
				;
	
RECXST	EI			;					04
	LD	L,(IY+28H)	;IF BUFFER IN RECEIVE QUEUE		19
	LD	H,(IY+29H)	;					19
	DI			;					04
	CALL	SUBDEQ		;				       130
	EI			;					04
	JR	NC,SCH1DUL	;THEN DO				10
	LD	L,(IY+34H)	;					19
	LD	H,(IY+35H)	;					19
	DI			;	SEND BUFFER TO RECEIVER SEMA	04
				;	PHORE QUEUE, SAVE TABLE ADDRESS	15
	CALL	SUBSEND		;					  
	EI
SCH1DUL		
	RET
;ECHO \f


;******************************************************************************
;*		    TXTERM  PROCEDURE
;******************************************************************************
 
	GLOBAL		TXTERM
 
TXTERM
	DI
	LD	E,(IY+36H)		;IF TRANSMISSION IN PROGRESS
	LD	D,(IY+37H)		;
	LD	A,E
	OR	D
	JR	Z,NO_TERMINATION	;THEN DO
	LD	L,(IY+08H)		;	GET ADDRESS OF EMPTY QUEU
	LD	H,(IY+09H)
	CALL	SUBENQ			;	TRANSFER BUFFER TO EMPTY
					;	BUFFER QUEU
	LD	(IY+36H),00		;	RESET CONTENT OF ELEMENT
	LD	(IY+37H),00		;	ADDRESS
	LD	(IY+21H),00		;	RESET BUFFER CONTROL
					;END
	LD	(IY+1EH),0AH		;NEXT INT.ROUTINE = PSEXTRA
 
NO_TERMINATION
	EI
	RET				;RETURN FROM PROCESS
;ECHO \f


;*****************************************************************************
;*		    RXTERM  PROCEDURE
;*****************************************************************************

	GLOBAL		RXTERM

RXTERM

	DI			;DISABLE INTERRUPT			
	LD	E,(IY+2AH)	;IF RECEIVING IN PROGRESS
	LD 	D,(IY+2BH)	;
	LD	A,D		;
	OR	E		;
	JR	Z,RXT1		;	THEN DO
	LD	L,(IY+08H)	;	   GET ADDRESS OF EMPTY QUEUE
	LD	H,(IY+09H)	;
	CALL	SUBENQ		;	   TRANSFER BUFFER TO EMPTY QUEUE
	LD	(IY+2AH),00H	;	   RESET CONTENT OF		
	LD	(IY+2BH),00H	;	   ELEMENT ADDRESS
RXT1
	LD	L,(IY+28H)	;IF BUFFER IN RECEIVE QUEUE
	LD	H,(IY+29H)	;	TRANSFER BUFFER TO
	CALL	SUBDEQ		;	EMPTY QUEUE
	JR	NC,RXT2		;
	LD	L,(IY+08H)	;
	LD	H,(IY+09H)	;
	CALL	SUBENQ		;
	JR	RXT1		;
RXT2
	LD	L,(IY+34H)	;IF BUFFER IN SIO OUTPUT QUEUE
	LD	H,(IY+35H)	;	TRANSFER BUFFER TO
	LD	E,(IY+08H)	;
	LD 	D,(IY+09H)	;
	CALL	SUBREC		;	EMPTY QUEUE
RXT3
	EI			;ENABLE INTERRUPT
	RET			;RETURN (END)				10
;ECHO \f