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

⟦1951822c4⟧ TextFile

    Length: 2242 (0x8c2)
    Types: TextFile
    Names: »TDMA.S«

Derivation

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

TextFile

*INCLUDE CONST.S
 
	GLOBAL	TDMA
	EXTERNAL DETECT
 
TDMA	IN	A,(APIO1+2)
	SET	6,A		;DISABLE DMA - SIO2 TRANSFER
	OUT	(APIO1+2),A
	LD	C,ADMA
	LD	HL,SRAMB+100H
	CALL	T1DMA		;DO DMA TEST
	AND	A		;IF NO ERROR THEN
	RET	Z		;  RETURN
				;ELSE
	ADD	A,80H		;  LOAD ERROR CODE
	CALL	DETECT		;  DETECT ERROR OCCURENCE
	RET			;FI
 
;----------------------------------------------------------------------------
T1DMA	PUSH	BC		;DMAADR
	PUSH	HL		;MEADR
	LD	IX,0
	ADD	IX,SP
	LD	A,0DH
	ADD	A,(IX+2)
	LD	C,A
	OUT	(C),A		;RESET DMA
	LD	B,10H
D0LOOP	DJNZ	D0LOOP		;DELAY FOR DMA RESET
 
	LD	A,8
D1LOOP	SRL	A		;FOR CHANNEL 3 TO 0
	LD	(IX+3),A
	ADD	A,(IX+2)
	LD	C,A
	LD	E,1
	LD	B,8
D11LOOP	LD	A,E		;  FOR BIT 0 TO 7
	OUT	(C),A		;    RUNNING 1 AT LOW ADDRESS
	CPL
	OUT	(C),A		;    RUNNING 0 AT HIGH ADDRESS
	IN	L,(C)
	IN	H,(C)
	XOR	H
	JP	NZ,D1ERROR	;    QUIT IF I/O ERROR
	LD	A,E
	XOR	L
	JP	NZ,D1ERROR	;    QUIT IF I/O ERROR
	RLC	E
	DJNZ	D11LOOP		;  NEXT BIT
	LD	A,(IX+3)
	AND	A
	JR	NZ,D1LOOP	;NEXT CHANNEL
	POP	HL		;MEADR
	PUSH	HL
	LD	DE,10H		;SET NO. OF BYTE TO TRANSFER
	OUT	(C),L
	OUT	(C),H		;SET TRANSFER READ ADDRESS
	INC	C
	OUT	(C),E
	OUT	(C),D
	INC	C
	XOR	A
	LD	B,E
D2LOOP	LD	(HL),A		;RESET MEMORY FOR DMA TRANSFER
	INC	HL
	INC	A
	DJNZ	D2LOOP
	LD	A,0FFH
	LD	B,E
D3LOOP	LD	(HL),A
	INC	HL
	DJNZ	D3LOOP
 
	DEC	HL
	OUT	(C),L		;SET WRITE TRANSFER ADDRESS
	OUT	(C),H
	INC	C
	OUT	(C),E
	OUT	(C),D
	LD	D,(IX+2)	;LOAD DMA ADDRESS
	LD	A,0BH
	ADD	A,D
	LD	C,A
	LD	A,10001000B	;SET CHA 0 MODE: READ TRANSFER
				;		 AUTO INCREMENT
	OUT	(C),A
	LD	A,10100101B	;SET CHA 1 MODE: WRITE TRANSFER
				;		 AUTO DECREMENT
	OUT	(C),A
	LD	A,8
	ADD	A,D
	LD	C,A
	LD	A,00011001B	;SET COMMAND:	MEMORY-TO-MEMORY
				;		CONTROLLER ENABLED
				;		COMPRESSED TIMING
				;		ROTARY PRIORITY
	OUT	(C),A
	LD	A,0FH
	ADD	A,D
	LD	C,A
	LD	A,0CH
	OUT	(C),A
	LD	A,9
	ADD	A,D
	LD	C,A
	LD	A,4
	OUT	(C),A		;ACTIVATE TRANSFER
	POP	HL		;MEADR
	PUSH	HL
	LD	DE,1FH
	ADD	HL,DE
	LD	A,0
	LD	B,0FH
D4LOOP	CP	(HL)		;TEST THE TRANSFERRED DATA
	JR	NZ,D2ERROR	;QUIT IF DATA ERROR
	INC	A
	DEC	HL
	DJNZ	D4LOOP
	LD	A,0FH
	CP	(HL)
	JR	NZ,D2ERROR	;QUIT IF LAST READ TRANSFER BYTE CHANGED
	XOR	A
	JR	DEXIT
D1ERROR	LD	A,1		;SET I/O ERROR
	JR	DEXIT
D2ERROR	LD	A,2
DEXIT	POP	HL		;ADJUST STACK POINTER
	POP	HL
	RET
 
;ECHO \f