DataMuseum.dk

Presents historical artifacts from the history of:

Zilog MCZ Floppy Disks

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

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦d727369d2⟧ TextFile

    Length: 3594 (0xe0a)
    Types: TextFile
    Names: »TSIO.S«

Derivation

└─⟦f2a3f19b6⟧ Bits:30005203 8" Zilog MCZ/1 Floppy CR80FD_0030 ( BB LTU TEST BACK UP! BB VD1 821220 )
    └─ ⟦this⟧ »TSIO.S« 

TextFile

*INCLUDE CONST.S
	GLOBAL	T1SIO,T1TXRX,TSIO1,TSIO2
	EXTERNAL DETECT
 
TSIO1	IN	A,(APIO1+1)
	AND	11111110B	;SET LOOP1
	OUT	(APIO1+1),A
	LD	HL,6
	LD	C,ATIM1		;SET CLOCK 1,2 = 333 KHZ
	OUT	(C),L
	OUT	(C),H
	LD	C,ATIM1+1
	OUT	(C),L
	OUT	(C),H
	LD	C,ASIO1
	LD	HL,RAMSTA
	CALL	T1SIO		;DO SIO1 TEST
	AND	A		;RETURN IF NO ERROR
	RET	Z
	LD	C,ASIO1
	ADD	A,C		;LOAD ERROR CODE
	CALL	DETECT		;JUMP TO ERROR ROUTINE
	RET
 
TSIO2	IN	A,(APIO1+1)
	AND	11111101B	;SET LOOP2
	OUT	(APIO1+1),A
	LD	HL,6
	LD	C,ATIM2		;SET CLOCK 1,2 = 333 KHZ
	OUT	(C),L
	OUT	(C),H
	LD	C,ATIM2+1
	OUT	(C),L
	OUT	(C),H
	LD	C,ASIO2
	LD	HL,RAMSTA
	CALL	T1SIO		;DO SIO2 TEST
	AND	A		;RETURN IF NO ERROR
	RET	Z
	LD	C,ASIO2
	ADD	A,C		;LOAD ERROR CODE
	CALL	DETECT		;JUMP TO ERROR ROUTINE
	RET
 
T1SIO	PUSH	HL
	LD	E,C		;SAVE SIO BASE ADDRESS
	INC	C
	INC	C
	LD	A,18H
	OUT	(C),A		;RESET CHANNEL A
	INC	C
	OUT	(C),A		;RESET CHANNEL B
	LD	B,4
	LD	H,80H		;FOR BIT 7 TO 4
S1LOOP	LD	A,2
	OUT	(C),A		;  LOAD INTERRUPT VECTOR
	OUT	(C),H
	OUT	(C),A
	IN	A,(C)		;  READ INTERRUPT VECTOR
	XOR	H
	AND	0F0H
	JR	NZ,S1ERROR	;  JUMP IF I/O ERROR
	RRC	H
	DJNZ	S1LOOP		;NEXT BIT
	LD	C,E		;RESTORE SIO BASE ADDRESS
	INC	C
	INC	C		;DO CHANNEL A TRANSMISSIONS TEST
	CALL	T1TXRX
	AND	A
	JR	NZ,S2ERROR	;RETURN ON CHANNEL A ERROR
	INC	C
	CALL	T1TXRX		;DO CHANNEL B TRANSMISSIONS TEST
	AND	A
	JR	Z,T1NEXT
	LD	B,4
	ADD	A,B		;RETURN ON CHANNEL B ERROR
	JR	S2ERROR
T1NEXT	POP	HL
	LD	A,H
	LD	I,A
	LD	A,2
	OUT	(C),A
	OUT	(C),L		;LOAD INTERRUPT VECTOR
	LD	DE,4
	ADD	HL,DE
	LD	DE,RXINT
	LD	(HL),E		;LOAD RX INTERRUPT ROUTINE ADDRESS
	INC	HL
	LD	(HL),D
	LD	A,1
	OUT	(C),A
	LD	A,00011100B	;ENABLE RX INTERRUPT
	OUT	(C),A
	DEC	C
	DEC	C
	LD	A,55H
	OUT	(C),A		;TRANSMIT CHARACTER
	XOR	A
	EI
	LD	B,0
TWAIT1	DJNZ	TWAIT1
	LD	B,50		;WAIT 1 MILLI SEC.
TWAIT2	DJNZ	TWAIT2
	DI
	INC	C
	LD	L,18H
	OUT	(C),L		;RESET CHANNEL A
	INC	C
	OUT	(C),L		;RESET CHANNEL B
	CP	55H
	JR	NZ,S3ERROR
	XOR	A
	RET			;RETURN ON TEST COMPLETED
S1ERROR	LD	A,1		;RETURN ON I/O ERROR
S2ERROR	POP	HL
	RET
S3ERROR	LD	A,2		;RETURN ON INTERRUPT ERROR
	RET
 
;-----------------------------------------------------------------------------
RXINT	IN	A,(C)		;GET RECEIVED CHARACTER
	EI
	RETI
 
;-----------------------------------------------------------------------------
T1TXRX	LD	A,18H
	OUT	(C),A		;RESET CHANNEL
	LD	L,4
	OUT	(C),L
	LD	A,01000111B	;  *16 CLOCK
				;  1 STOP BIT
	OUT	(C),A		;  EVEN PARITY
	LD	L,3
	OUT	(C),L
	LD	A,11000001B	;  8 RX BIT/CHAR
	OUT	(C),A		;  RX ENABLED
	LD	L,5
	OUT	(C),L
	LD	A,01100000B	;  8 TX BIT/CHAR
	OUT	(C),A		;  TX DISABLED
 
	IN	L,(C)
	BIT	2,L
	JR	Z,TR14ERR	;JUMP IF TRANSMIT BUFFER NOT EMPTY
	DEC	C
	DEC	C
	LD	H,01H		;LOAD FIRST CHARACTER
	OUT	(C),H
	INC	C
	INC	C
	IN	L,(C)
	BIT	2,L
	JR	NZ,TR14ERR	;JUMP IF TRANSMIT BUFFER EMPTY
	LD	L,5
	OUT	(C),L
	SET	3,A		;ENABLE TX
	OUT	(C),A
	DEC	C
	DEC	C
TR1LOOP	INC	C		;FOR BIT = 7 TO 0
	INC	C
	LD	B,0
TWAIT3	DJNZ	TWAIT3
	LD	B,50		;WAIT 1 MILLI SEC.
TWAIT4	DJNZ	TWAIT4
	LD	L,1
	OUT	(C),L
	IN	L,(C)
	BIT	0,L
	JR	Z,TR15ERR	;JUMP IF CHARACTER NOT SENT
	IN	L,(C)
	BIT	2,L
	JR	Z,TR15ERR	;JUMP IF NO TX-CLOCK
	BIT	0,L
	JR	Z,TR16ERR	;JUMP IF CHARACTER NOT RECEIVED
	DEC	C
	DEC	C
	IN	A,(C)
	CP	H
	JR	NZ,TR17ERR	;JUMP IF RX CHAR. NOT EQUAL TX CHAR.
	SLA	H		;NEXT BIT
	JR	Z,TR1END
	OUT	(C),H
	JR	TR1LOOP
TR1END	INC	C
	INC	C
	LD	L,1
	OUT	(C),L
	IN	A,(C)
	AND	70H
	JR	NZ,TR17ERR	;JUMP IF TRANSMISSIONS ERROR
	RET			;RETURN ON TEST COMPLETED
TR14ERR	LD	A,4		;RETURN ON TRANSMIT ERROR
	RET
TR15ERR	LD	A,5		;RETURN ON TRANSMIT CLOCK ERROR
	RET
TR16ERR	LD	A,6		;RETURN ON RECEIVE ERROR
	RET
TR17ERR	LD	A,7		;RETURN ON TRANSMISSIONS ERROR
	RET
 
;ECHO \f