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

⟦04369331b⟧ TextFile

    Length: 5448 (0x1548)
    Types: TextFile
    Names: »TSIO.SRC«

Derivation

└─⟦519079be6⟧ Bits:30005500 8" CR80 Floppy CR80FD_0029 ( WBOOTL.SYS W.D bootload program 81 10 01 ??? )
└─⟦519079be6⟧ Intel_ISIS_II
    └─ ⟦this⟧ »TSIO.SRC« 

TextFile

	NAME	TSIO\r
	PUBLIC	T1SIO,T1TXRX\r
	EXTRN	ERROR\r
	CSEG\r
;******************************************************************************\r
	TITLE	'SIO1 TEST ROUTINE'\r
;******************************************************************************\r
\r
		;DESCRIP: THE ROUTINE TEST Z80-SIO-1\r
	PUBLIC	TSIO1\r
TSIO1	IN	A,(APIO1+1)\r
	AND	11111110B	;SET LOOP1 \r
	OUT	(APIO1+1),A\r
	LD	HL,6\r
	LD	C,ATIM1		;SET CLOCK 1,2 = 333 KHZ\r
	OUT	(C),L\r
	OUT	(C),H\r
	LD	C,ATIM1+1\r
	OUT	(C),L\r
	OUT	(C),H\r
	LD	C,ASIO1\r
	LD	HL,RAMSTA\r
	CALL	T1SIO		;DO SIO1 TEST\r
	AND	A		;RETURN IF NO ERROR\r
	RET	Z\r
	LD	C,ASIO1\r
	ADD	A,C		;LOAD ERROR CODE\r
	CALL	ERROR		;JUMP ERROR ROUTINE\r
\r
\r
\r
;******************************************************************************\r
	TITLE	'SIO2 TEST ROUTINE'\r
;******************************************************************************\r
\r
		;DESCRIP: THE ROUTINE TEST Z80-SIO-2\r
	PUBLIC	TSIO2\r
TSIO2	IN	A,(APIO1+1)\r
	AND	11111101B	;SET LOOP2 \r
				;SET INTERN2 CLOCK\r
	OUT	(APIO1+1),A\r
	LD	HL,6\r
	LD	C,ATIM2		;SET CLOCK 1,2 = 333 KHZ\r
	OUT	(C),L\r
	OUT	(C),H\r
	LD	C,ATIM2+1\r
	OUT	(C),L\r
	OUT	(C),H\r
	LD	C,ASIO2\r
	LD	HL,RAMSTA\r
	CALL	T1SIO		;DO SIO1 TEST\r
	AND	A		;RETURN IF NO ERROR\r
	RET	Z\r
	LD	C,ASIO2\r
	ADD	A,C		;LOAD ERROR CODE\r
	CALL	ERROR		;JUMP ERROR ROUTINE\r
\r
\r
\r
;-------Z80-SIO TEST ROUTINE ----------------------------T1SIO--------\r
			;\r
			;DESCRIP: THE ROUTINE TEST THE Z80 SIO\r
			;	FOR I/O, ASYNC. TRANSMISSIONS\r
			;	AND INTERRUPT ERRORS\r
			;\r
			;ENTRY:	C - SIO BASE ADDRESS\r
			;	HL - SIO INTERRUPT TABLE ADDRESS\r
			;\r
			;EXIT:	A = 0 TEST COMPLETED\r
			;	A = 1 I/O ERROR\r
			;	A = 2 INTERRUPT ERROR\r
			;	A = 4 CHANNEL A TRANSMIT ERROR\r
			;	A = 5 CHANNEL A TX CLOCK ERROR\r
			;	A = 6 CHANNEL A RECEIVE ERROR\r
			;	A = 7 CHANNEL A TRANSMISSION ERROR\r
			;	A = 8 CHANNEL B TRANSMIT ERROR\r
			;	A = 9 CHANNEL B TX CLOCK ERROR\r
			;	A = A CHANNEL B RECEIVE ERROR\r
			;	A = B CHANNEL B TRANSMISSION ERROR\r
			;\r
			;RESTRICTIONS: CONNECTION RXDATA - TXDATA\r
			;	RX,TX CLOCK > 80 KHZ\r
			;\r
			;DESTROY: SIO WRITE REG.\r
			;	A,F,B,DE,HL\r
			;\r
			;TIME:	18 MILLI SEC.\r
			;\r
			;DATE:	800906\r
			;\r
			;PROGRAMMER: IMJ\r
			;\r
T1SIO	PUSH	HL\r
	LD	E,C		;SAVE SIO BASE ADDRESS\r
	INC	C\r
	INC	C\r
	LD	A,18H\r
	OUT	(C),A		;RESET CHANNEL A\r
	INC	C\r
	OUT	(C),A		;RESET CHANNEL B\r
	LD	B,4\r
	LD	H,80H		;FOR BIT 7 TO 4\r
S1LOOP	LD	A,2\r
	OUT	(C),A		;  LOAD INTERRUPT VECTOR\r
	OUT	(C),H\r
	OUT	(C),A\r
	IN	A,(C)		;  READ INTERRUPT VECTOR\r
	XOR	H\r
	AND	0F0H\r
	JR	NZ,S1ERROR	;  JUMP IF I/O ERROR\r
	RRC	H\r
	DJNZ	S1LOOP		;NEXT BIT\r
	LD	C,E		;RESTORE SIO BASE ADRESS\r
	INC	C\r
	INC	C		;DO CHANNEL A TRANSMISSIONS TEST\r
	CALL	T1TXRX\r
	AND	A\r
	JR	NZ,S2ERROR	;RETURN ON CHANNEL A ERROR\r
	INC	C\r
	CALL	T1TXRX		;DO CHANNEL B TRANSMISSIONS TEST\r
	AND	A\r
	JR	Z,T1NEXT\r
	LD	B,4\r
	ADD	A,B		;RETURN ON CHANNEL B ERROR\r
T1NEXT	POP	HL\r
	LD	A,H\r
	LD	I,A\r
	LD	A,2\r
	OUT	(C),A\r
	OUT	(C),L		;LOAD INTERRUPT VECTOR\r
	LD	DE,4\r
	ADD	HL,DE\r
	LD	DE,RXINT\r
	LD	(HL),E		;LOAD RX INTERRUPT ROUTINE ADDRESS\r
	INC	HL\r
	LD	(HL),D\r
	LD	A,1\r
	OUT	(C),A\r
	LD	A,00011100B	;ENABLE RX INTERRUPT\r
	OUT	(C),A\r
	DEC	C\r
	DEC	C\r
	LD	A,55H\r
	OUT	(C),A		;TRANSMIT CHARACTER\r
	XOR	A\r
	EI\r
	LD	B,0\r
	DJNZ	$+0		;WAIT 1 MILLI SEC.\r
	LD	B,50\r
	DJNZ	$+0\r
	DI\r
	INC	C\r
	LD	L,18H\r
	OUT	(C),L		;RESET CHANNEL A\r
	INC	C\r
	OUT	(C),L		;RESET CHANNEL B\r
	CP	55H\r
	JR	NZ,S3ERROR\r
	XOR	A\r
	RET			;RETURN ON TEST COMPLETED\r
S1ERROR	LD	A,1		;RETURN ON I/O ERROR\r
S2ERROR	POP	HL\r
	RET\r
S3ERROR	LD	A,2		;RETURN ON INTERRUPT ERROR\r
	RET\r
\r
\r
\r
;------ RECEIVE INTERRUPT ROUTINE ---------------------------------------------\r
RXINT	IN	A,(C)		;LOAD RECEIVED CHARACTER\r
	EI\r
	RETI\r
\r
\r
\r
;-------SIO TRANSMISSIONS TEST ROUTINE-------------------T1TXRX-------\r
			;\r
			;DESCRIP: TEST SINGLE CHANNEL FOR TRANSMISSIONS ERROR\r
			;\r
			;ENTRY:	C - SIO CHANNEL CONTROL/STATUS ADDRESS\r
			;\r
			;EXIT:	A = 0  TEST COMPLETED\r
			;	A = 4  TX ERROR\r
			;	A = 5  TX CLOCK ERROR\r
			;	A = 6  RX ERROR\r
			;	A = 7  TRANSMISSIONS ERROR\r
			;\r
			;DESTROY: A,F,B,DE,HL\r
T1TXRX	LD	A,18H\r
	OUT	(C),A		;RESET CHANNEL\r
	LD	L,4		;SET CHANNEL MODE\r
	OUT	(C),L		;BEGIN\r
	LD	A,01000111B	;  *16 CLOCK\r
				;  1 STOP BIT\r
	OUT	(C),A		;  EVEN PARITY\r
	LD	L,3\r
	OUT	(C),L\r
	LD	A,11000001B	;  8 RX BIT/CHAR.\r
	OUT	(C),A		;  RX ENABLED\r
	LD	L,5\r
	OUT	(C),L\r
	LD	A,01100000B	;  8 TX BIT/CHAR.\r
	OUT	(C),A		;  TX DISABLED\r
				;END\r
	IN	L,(C)\r
	BIT	2,L\r
	JR	Z,TR14ERR	;JUMP IF TRANSMIT BUFFER NOT EMPTY\r
	DEC	C\r
	DEC	C\r
	LD	H,80H		;LOAD FIRST CHARACTER\r
	OUT	(C),H\r
	INC	C\r
	INC	C\r
	IN	L,(C)\r
	BIT	2,L\r
	JR	NZ,TR14ERR	;JUMP IF TRANSMIT BUFFER EMPTY\r
	LD	L,5\r
	OUT	(C),L\r
	SET	3,A		;ENABLE TX\r
	OUT	(C),A\r
	DEC	C\r
	DEC	C\r
TR1LOOP	INC	C		;FOR BIT = 7 TO 0\r
	INC	C\r
	LD	B,0\r
	DJNZ	$+0		;WAIT 1 MILLI SEC.\r
	LD	B,50\r
	DJNZ	$+0\r
	LD	L,1\r
	OUT	(C),L\r
	IN	L,(C)\r
	BIT	0,L\r
	JR	Z,TR15ERR	;  JUMP IF CHARACTER NOT SENT\r
	IN	L,(C)\r
	BIT	2,L\r
	JR	Z,TR15ERR	;  JUMP IF NO TX-CLOCK\r
	BIT	0,L\r
	JR	Z,TR16ERR	;  JUMP IF CHARACTER NOT RECEIVED\r
	DEC	C\r
	DEC	C\r
	IN	A,(C)\r
	CP	H\r
	JR	NZ,TR17ERR	;  JUMP IF RX CHAR. NOT EQUAL TX CHAR.\r
	RRC	H\r
	CP	1\r
	JR	NZ,TR1END	;NEXT BIT\r
	OUT	(C),H\r
	JR	TR1LOOP\r
TR1END	INC	C\r
	INC	C\r
	LD	L,1\r
	OUT	(C),L\r
	IN	A,(C)\r
	AND	70H\r
	JR	NZ,TR17ERR	;JUMP IF TRANSMISSIONS ERROR\r
	RET			;RETURN ON TEST COMPLETED\r
TR14ERR	LD	A,4		;RETURN ON TRANSMIT ERROR\r
	RET\r
TR15ERR	LD	A,5		;RETURN ON TRANSMIT CLOCK ERROR\r
	RET\r
TR16ERR	LD	A,6		;RETURN ON RECEIVE ERROR\r
	RET\r
TR17ERR	LD	A,7		;RETURN ON TRANSMISSIONS ERROR\r
	RET\r
	END\r