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

⟦d1a632e94⟧ TextFile

    Length: 4200 (0x1068)
    Types: TextFile
    Names: »OBT.S«

Derivation

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

TextFile

*INCLUDE CONST.S
 
	GLOBAL	OBT,ERROR,DETECT,MDELAY
	EXTERNAL TRAM,TPIO1,TPIO2,TTIM1,TTIM2,TTIM3,TSIO1,TSIO2
	EXTERNAL TDMA,TSIODMA,INTCTC,EXBEGIN
 
	DI
	JR	OBT		;
 
*L OFF
	DEFS	5BH
*L ON
	JR	OBT		;ENTRY IF TEST ACTIVATED
*L OFF
	DEFS	07H
*L ON
	
OBT	DI
				;SET PIO 1 MODE
				;BEGIN
	LD	A,10000001B	;  PORT A : OUTPUT
				;  PORT B : OUTPUT
				;  PORT C (LOWER) : INPUT
	OUT	(APIO1+3),A	;  PORT C (UPPER) : OUTPUT
				;END
 
				;SET PIO 2 MODE
				;BEGIN
	LD	A,10001010B	;  PORT A : OUTPUT
				;  PORT B : INPUT
				;  PORT C (LOWER) : OUTPUT
	OUT	(APIO2+3),A	;  PORT C (UPPER) : INPUT
				;END
 
				;RESET OUTPUT PORTS
	LD	A,0
	OUT	(APIO2),A
	OUT	(APIO2+2),A
	LD	A,0FFH
	OUT	(APIO1),A	;SET INTERNAL CLOCK MODE
	LD	A,90H
	OUT	(APIO1+1),A	;TURN ON TEST LED, SET LOOP1,LOOP2
	LD	A,0DFH
	OUT	(APIO1+2),A	;SET CLEAR
 
	LD	SP,RAMEND+1
	LD	A,55H
	LD	B,00H
O1LOOP	DJNZ	O12NEXT
O1ERR	LD	A,0BH
	JP	ERROR
O12NEXT	LD	HL,5555H	;FIND LAST RAM ADDRESS
	PUSH	HL
	POP	HL
	PUSH	HL
	CP	H
	JR	NZ,O1LOOP
	CP	L
	JR	NZ,O1LOOP
	POP	HL
	LD	A,0FFH
	CP	B
	JR	Z,O2NEXT	;IF ERROR IN STACK THEN DISPLAY
	LD	A,0BH
	JP	ERROR
 
O2NEXT	LD	HL,0
	ADD	HL,SP
	DEC	HL
	LD	B,0EH		;TEST STACK AREA
O2LOOP	LD	A,55H		;FOR N = STACK TOP TO BOTTOM STEP - 1
	LD	(HL),A		;  WRITE DATA
	CP	(HL)		;  READ DATA
	JR	NZ,O1ERR	;  LOOP IF ERROR
	LD	A,0AAH
	LD	(HL),A
	CP	(HL)
	JR	NZ,O1ERR
	LD	A,0FFH
	LD	(HL),A
	CP	(HL)
	JR	NZ,O1ERR
	XOR	A
	LD	(HL),A
	CP	(HL)
	JR	NZ,O1ERR
	DEC	HL
	DJNZ	O2LOOP		;NEXT N
 
	CALL	TRAM		;DO RAM TEST
	CALL	TPIO1		;DO PIO1 TEST
	CALL	TPIO2		;DO PIO2 TEST
	IN	A,(APIO1+2)
	SET	5,A
	OUT	(APIO1+2),A	;RESET CLEAR
	CALL	ERRCHK
	JR	NZ,O3NEXT	;IF PIO ERRORS THEN STOP HW TESTING
 
	CALL	TTIM1		;DO TIMER 1 (8253-1) TEST
	CALL	TTIM2		;DO TIMER 2 (8253-2) TEST
	CALL	TTIM3		;DO TIMER 3 (Z80-CTC) TEST
	CALL	ERRCHK
	JR	NZ,O3NEXT	;IF TIMER ERRORS THEN STOP HW TESTING
 
	CALL	TSIO1		;DO SIO 1 TEST
	CALL	TSIO2		;DO SIO 2 TEST
	CALL	ERRCHK
	JR	NZ,O3NEXT	;IF SIO ERRORS THEN STOP HW TESTING
 
	CALL	TDMA		;DO DMA TEST
	CALL	ERRCHK
	JR	NZ,O3NEXT	;IF DMA ERRORS THEN STOP HW TESTING
 
	CALL	TSIODMA		;DO DMA DATA TRANSFER TEST
 
	IN	A,(APIO1+2)
	SET	6,A
	OUT	(APIO1+2),A	;DISABLE DMA-SIO TRANSFER
 
O3NEXT	IN	A,(TESTPO)
	RES	TESTBI,A
	OUT	(TESTPO),A	;TURN OFF TEST LED
				;TEST COMPLETE
	LD	HL,TIMER
	LD	(INTCTC),HL	;LOAD TIMER ADDRESS IN INTERRUPT TABLE
	LD	HL,INTCTC
	LD	A,H
	LD	I,A		;LOAD INTERRUPT VECTOR (MSB)
	LD	C,ATIM3
	LD	A,0B5H		;LOAD CH.0 AS
	OUT	(C),A		;INTERVAL TIMER
	LD	A,195		;LOAD TIME CONSTANT
				;(195 * 64 uS = Ca.12.5 mS)
	OUT	(C),A		;START TIMER
	OUT	(C),L		;LOAD INTERRUPT VECTOR (LSB)
 
	JP	EXBEGIN
 
;---------------------------------------------------------------------------
TIMER	EX	AF,AF'
	PUSH	HL
	LD	HL,SRAMB
	INC	(HL)		;INCREMENT ALIVECOUNTER
	POP	HL
	EX	AF,AF'
	EI
	RETI
 
;ECHO \f


;---------------- PULSE TEST LED ---------------------------------------
 
ERROR	EI
	LD	L,A
	LD	(SRAMB),A	;LOAD ERROR CODE IN SRAMB
	LD	C,TESTPO
	IN	H,(C)
	RES	TESTBI,H
	OUT	(C),H		;TURN OFF TEST LED
 
E1LOOP	LD	A,10
E2LOOP	LD	DE,100		;DO
	CALL	MDELAY		;
	SET	TESTBI,H	;
	OUT	(C),H		;
	LD	DE,100		;  MAKE 10 TEST LED FLASHES
	CALL	MDELAY		;
	RES	TESTBI,H	;
	OUT	(C),H		;
	DEC	A		;
	JR	NZ,E2LOOP	;OD
 
	LD	DE,1000
	CALL	MDELAY		;TURN OFF TEST LED FOR 1 SEC
 
	LD	A,8		;FOR ALL 8 BITS IN ERROR CODE
E3LOOP	SET	TESTBI,H	;DO
	OUT	(C),H		;
	RLC	L		;
	JR	C,OUT1		;  IF "0" THEN
OUT0	LD	DE,1000		;    TURN ON TEST LED FOR 1.0 SEC
	JR	OUTRES		;  ELSE
OUT1	LD	DE,250		;    TURN ON TEST LED FOR 0.25 SEC
OUTRES	CALL	MDELAY		;  FI
	RES	TESTBI,H	;
	OUT	(C),H		;  TURN OFF TEST LED FOR 1.0 SEC
	LD	DE,1000		;
	CALL	MDELAY		;
	DEC	A		;
	JR	NZ,E3LOOP	;OD
 
	JR	E1LOOP
	JR	E1LOOP		;RETURN TO ERROR LOOP
 
MDELAY	INC	D		;FOR N = REG. DE TO 0 STEP -1
M1LOOP	LD	B,0
M2LOOP	DJNZ	M2LOOP
	LD	B,50		;DELAY 1 MILLI SECOND
M3LOOP	DJNZ	M3LOOP
	DEC	E
	JR	NZ,M1LOOP
	DEC	D
	JR	NZ,M1LOOP	;NEXT N
	RET
 
;----------------------------------------------------------------------------
DETECT	LD	HL,STACEND-1
	LD	C,(HL)
	LD	B,0
	AND	A
	DEC	HL
	SBC	HL,BC
	LD	(HL),A		;LOAD ERROR CODE
	LD	HL,STACEND-1
	INC	(HL)		;INCREMENT ERROR COUNT
	RET			;RETURN WITH Z=0
 
ERRCHK	LD	HL,STACEND-1
	LD	A,(HL)		;GET ERROR COUNT
	AND	A
	RET			;UPDATE Z-FLAG
 
;ECHO \f