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

⟦b5f7f7b10⟧ TextFile

    Length: 2564 (0xa04)
    Types: TextFile
    Names: »TSIODMA.S«

Derivation

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

TextFile

*INCLUDE CONST.S
 
	GLOBAL	TSIODMA
	EXTERNAL DETECT,MDELAY
 
TSIODMA	DI
	XOR	A
	OUT	(ADMA+0DH),A	;RESET DMA
	IN	A,(APIO1+1)
	AND	11111100B	;SET LOOP TEST
	OUT	(APIO1+1),A
	LD	A,0FFH
	OUT	(APIO1),A	;SET INTERNAL CLOCKS
	LD	HL,6		;SET ALL 4 CLOCKS TO 333 KHZ
	LD	C,ATIM1
	OUT	(C),L
	OUT	(C),H
	INC	C
	OUT	(C),L
	OUT	(C),H
	LD	C,ATIM2
	OUT	(C),L
	OUT	(C),H
	INC	C
	OUT	(C),L
	OUT	(C),H
	IN	A,(APIO1+2)
	RES	6,A
	OUT	(APIO1+2),A	;ENABLE DMA-SIO2 TRANSFER
	LD	A,01001000B	;SET DMA MODE
	LD	B,4
SD1LOOP	OUT	(ADMA+0BH),A	;ALL CHANNEL: SINGLE READ TRANSFER
	INC	A
	DJNZ	SD1LOOP
	LD	A,01010000B	;SET DMA CONTROL
	OUT	(ADMA+8),A
	LD	HL,SRAMB+200H
	LD	DE,2-1		;SET BYTECOUNT TO BE TRANSMITTED PR. CHANNEL
	LD	A,0
	LD	B,4
	OUT	(ADMA+0CH),A	;RESET F/L FF
	LD	C,ADMA
SD2LOOP	LD	(HL),A		;FOR CHANNEL 0 TO 3
	OUT	(C),L
	OUT	(C),H		;  SET READ ADDRESS
	INC	C
	OUT	(C),E
	OUT	(C),D		;  SET BYTECOUNT
	INC	C
	INC	A
	INC	HL
	LD	(HL),A
	INC	A
	INC	HL
	DJNZ	SD2LOOP		;NEXT CHANNEL
 
	LD	C,ASIO1+2
	CALL	SETSIO		;INIT SIO1 CHA A
	INC	C
	CALL	SETSIO		;INIT SIO1 CHA B
	LD	C,ASIO2+2
	CALL	SETSIO		;INIT SIO2 CHA A
	INC	C
	CALL	SETSIO		;INIT SIO2 CHA B
	LD	A,0
	OUT	(ADMA+0FH),A	;RESET MASK'S
	LD	DE,4
	CALL	MDELAY		;WAIT UNTIL DATA TRANSMITTED
	IN	A,(ADMA+8)
	LD	E,A
	LD	D,8
	LD	B,4
SD3LOOP	LD	A,D		;FOR CHANNEL 3 TO 0 STEP -1
	AND	E
	JR	Z,SD1ERROR	;  QUIT IF DMA TRANSFER NOT COMPLETED
	RRC	D
	DJNZ	SD3LOOP		;NEXT CHANNEL
	LD	E,0
	LD	D,5
	LD	C,ASIO2
	CALL	SDACH
	LD	C,ASIO1
	CALL	SDACH
	XOR	A		;SET TEST COMPLETED
	JR	SDEXIT
 
;---------------------------------------------------------------------------
SDACH	LD	L,2		;FOR SIO CHANNEL A TO B
SD4LOOP	LD	B,2
SD41LOOP INC	C		;  FOR DATA 0 TO 1
	INC	C
	IN	A,(C)
	BIT	0,A
	JR	Z,SD2ERROR	;    QUIT IF DATA NOT RECEIVED
	LD	A,1
	OUT	(C),A
	IN	A,(C)
	AND	70H
	JR	NZ,SD2ERROR	;    QUIT IF DATA ERROR
	DEC	C
	DEC	C
	IN	A,(C)
	XOR	E
	JR	NZ,SD2ERROR	;    QUIT IF DATA NOT THE EXPECTED
	INC	E
	DJNZ	SD41LOOP	;  NEXT DATA
	INC	D
	INC	C
	INC	C
	IN	A,(C)
	BIT	0,A
	JR	NZ,SD2ERROR
	DEC	C
	INC	D
	DEC	L
	JR	NZ,SD4LOOP	;NEXT CHANNEL
	INC	D
	RET
 
SD1ERROR LD	A,90H
	ADD	A,B
	CALL	DETECT		;DETECT ERROR OCCURENCE
	RET
SD2ERROR LD	A,90H
	ADD	A,D
	CALL	DETECT		;DETECT ERROR OCCURENCE
SDEXIT	RET			;RETURN
 
;------------------------------------------------------------------------------
SETSIO	LD	HL,SIOTAB
	LD	B,(HL)
	INC	HL
	OTIR
	RET
 
SIOTAB	DEFB	SIOEND-SIOTAB-1
	DEFB	18H		;RESET CHANNEL
	DEFB	4
	DEFB	01000111B	;ASYNC MODE
	DEFB	3
	DEFB	11000001B	;RX ENABLED
	DEFB	5
	DEFB	01101000B	;TX ENABLED
	DEFB	1
	DEFB	11000000B	;ACTIVATE READY
 
SIOEND
;ECHO \f