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

⟦833c3effe⟧ TextFile

    Length: 7391 (0x1cdf)
    Types: TextFile
    Names: »TRAM.SRC«

Derivation

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

TextFile

;******************************************************************************\r
	TITLE	'RAM TEST ROUTINE'\r
	NAME	TRAM\r
;******************************************************************************\r
;\r
;	FUNCTION: THE ROUTINE CHECK THE Z80-RAM AND THE SHARED-RAM \r
;		AS A MULTI RAM TEST.\r
;		Z80-RAM STARTING FROM RAMSTA TO RAMEND.\r
;		SHARED-RAM STARTING FROM SRAMB+2 TO SRAME.\r
;		THE STACK AREA, IF INCLUDED, IS NOT CHECKED.\r
;		THE RAM AREA IS LEFT WITH 00 IN ALL LOCATIONS.\r
;\r
;\r
;*****************************************************************************\r
\r
	CSEG\r
	PUBLIC	TRAM,T1RAM,T2RAM,T3RAM\r
	PUBLIC	T4RAM\r
	EXTRN	ERROR\r
\r
TRAM	LD	HL,RAMSTA\r
	AND	A\r
	SBC	HL,SP		;IF Z80-RAMSTA < STACK < Z80-RAMEND THEN\r
	JP	P,R1ELSE\r
	LD	HL,RAMEND\r
	AND	A\r
	SBC	HL,SP\r
	JP	M,R1NEXT\r
	LD	HL,-15\r
	AND	A\r
	ADD	HL,SP		;Z80-RAMEND =STACK - 8\r
	JR	R1NEXT		;ENDIF\r
R1ELSE	LD	HL,RAMEND\r
R1NEXT	LD	DE,RAMSTA\r
	PUSH	HL\r
	PUSH	DE		;SAVE Z80-RAM AREA ADDRESSES\r
	LD	A,55H		;LOAD TEST PATTERN\r
	CALL	T1RAM\r
	AND	A\r
	CALL	NZ,ERROR	;JUMP IF Z80-RAM ERROR\r
	LD	DE,SRAMB+2\r
	LD	HL,SRAME\r
	LD	A,0AAH		;IF ERROR INTO SHARED RAM THEN\r
	CALL	T1RAM\r
	AND	A\r
	JR	Z,R2NEXT\r
	LD	B,4		;  LOAD ERROR CODE\r
	ADD	A,B\r
	CALL	ERROR		;  JUMP TO ERROR\r
				;ENDIF\r
R2NEXT	POP	DE		;LOAD Z80-RAM AREA ADDRESSES\r
	POP	HL\r
	PUSH	HL\r
	PUSH	DE\r
	LD	A,55H		;LOAD TEST PATTERN\r
	CALL	T2RAM\r
	AND	A\r
	CALL	NZ,ERROR	;JUMP IF REFLECTION ERROR\r
	POP	DE		;LOAD Z80-RAM AREA ADDRESSES\r
	POP	HL\r
	PUSH	HL\r
	PUSH	DE\r
	XOR	A		;LOAD TEST PATTERN\r
	CALL	T3RAM		;CLEAR Z80-RAM\r
	AND	A\r
	CALL	NZ,ERROR	;JUMP IF Z80-RAM ERROR\r
	LD	DE,SRAMB+2\r
	LD	HL,SRAME\r
	LD	A,0AAH		;IF REFLECTION ERROR INTO SHARED RAM THEN\r
	CALL	T2RAM\r
	AND	A\r
	JR	Z,R3NEXT\r
	LD	B,4		;  LOAD ERROR CODE\r
	ADD	A,B\r
	CALL	ERROR		;  JUMP TO ERROR\r
				;ENDIF\r
R3NEXT	LD	DE,SRAMB+2\r
	LD	HL,SRAME\r
	XOR	A		;CLEAR SHARED RAM\r
	CALL	T3RAM\r
	AND	A\r
	JR	Z,R4NEXT	;IF ERROR INTO SHARED RAM THEN\r
	LD	B,4		;  LOAD ERROR CODE\r
	ADD	A,B\r
	CALL	ERROR		;  JUMP TO ERROR\r
				;ENDIF\r
R4NEXT	POP	DE		;RESTORE Z80-RAM ADRESSES\r
	POP	HL\r
	LD	(HL),0C9H	;LOAD RET INTO LAST Z80-RAM ADDRESS\r
	EX	DE,HL\r
	XOR	A\r
	JP	(HL)		;DO Z80-RAM TEST AS PROGRAM MEMORY\r
				;RETURN\r
;------------------------------------------------------------------------------\r
\r
\r
\r
;-------RAM WRITE READ TEST-------------------------------------T1RAM----------\r
		;DESCRIP: THE ROUTINE CHECK THE RAM FOR WRITE/READ\r
		;	AND REFLECTION ERROR.\r
		;	THE RAM IS LEFT WITH THE COMPLEMENTED TEST PATTERN\r
		;	INTO THE FIRST RAM ADDRESS,THE TEST PATTERN INTO\r
		;	SECOND AND SO ON.\r
		;ENTRY:	A - TEST PATTERN\r
		;	DE - FIRST RAM ADDRESS\r
		;	HL - LAST RAM ADDRESS\r
		;EXIT:	A = 0 TEST COMPLETED\r
		;	A <> 0 : HL - ERROR ADDRESS.\r
		;DESTROY: F,DE,HL,(RAM)\r
		;TIME: 154+104+BYTE COUNT TCYCLES\r
T1RAM	PUSH	AF		;SAVE ENTRY DATA\r
	PUSH	DE\r
	PUSH	HL\r
	AND	A\r
	SBC	HL,DE		;BYTE COUNT = START ADDR. - END ADDR.\r
	EX	DE,HL		;FOR ADDR. = START TO END\r
	INC	E\r
	INC	D\r
	DEC	HL\r
T11LOOP	INC	HL\r
	LD	(HL),A		;  WRITE TEST PATTERN\r
	CP	(HL)\r
	JR	NZ,T11ERROR	;  JUMP IF WRITE/READ ERROR\r
	CPL			;  COMPLEMENT TEST PATTERN\r
	DEC	E\r
	JP	NZ,T11LOOP\r
	DEC	D\r
	JP	NZ,T11LOOP	;NEXT ADDR.\r
T11NEXT	POP	HL		;RESTORE ENTRY DATA\r
	POP	DE\r
	POP	AF\r
	AND	A\r
	SBC	HL,DE		;BYTE COUNT = START ADDR. - END ADDR.\r
	EX	DE,HL		;FOR ADR. = START TO END\r
	INC	E\r
	INC	D\r
	DEC	HL\r
T12LOOP	INC	HL\r
	CP	(HL)		;  JUMP IF REFLECTION ERROR\r
	JR	NZ,T13ERROR\r
	CPL			;  COMPLEMENT TEST PATTERN\r
	LD	(HL),A		;  WRITE TEST PATTERN\r
	CP	(HL)\r
	JR	NZ,T12ERROR	;  JUMP IF WRITE/READ ERROR\r
	DEC	E\r
	JP	NZ,T12LOOP\r
	DEC	D\r
	JP	NZ,T12LOOP	;NEXT ADR.\r
T12NEXT	LD	A,0		;TEST COMPLET\r
	RET			;RETURN\r
T11ERROR POP	DE		;ADJUST STACK POINTER\r
	POP	DE\r
	POP	DE\r
T12ERROR LD	A,08H		;ERROR EXIT IF WRITE/READ ERROR\r
	RET\r
T13ERROR LD	A,09H		;ERROR EXIT IF REFLECTION ERROR\r
	RET\r
\r
\r
\r
;-------RAM READ TEST-------------------------------------T2RAM----------\r
		;DESCRIP: THE ROUTINE CHECK THE RAM FOR REFLECTION ERROR.\r
		;	THE ROUTINE IS USED IN CONJUNCTION WITH\r
		;	THE T1RAM ROUTINE FOR MULTI RAM TEST\r
		;ENTRY:	(FIRST RAM ADDR.) - COMPLEMENTED TEST PATTERN\r
		;	(SECOND RAM ADDRESS) - TEST PATTERN\r
		;	..\r
		;	.\r
		;	A - TEST PATTERN\r
		;	DE - FIRST RAM ADDRESS\r
		;	HL - LAST RAM ADDRESS\r
		;EXIT:	A = 0 TEST COMPLETED\r
		;	A <> 0 : HL - ERROR ADDRESS.\r
		;DESTROY: F,C,DE,HL\r
		;TIME: 58+38*BYTE COUNT TCYCLES\r
T2RAM	CPL\r
	AND	A\r
	SBC	HL,DE		;BYTE COUNT = START ADDR. - END ADDR.\r
	EX	DE,HL		;FOR ADR. = START TO END\r
	INC	E\r
	INC	D\r
	DEC	HL\r
T22LOOP	INC	HL\r
	CP	(HL)		;  JUMP IF REFLECTION ERROR\r
	JR	NZ,T22ERROR\r
	CPL			;  COMPLEMENT TEST PATTERN\r
	DEC	E\r
	JP	NZ,T22LOOP\r
	DEC	D\r
	JP	NZ,T22LOOP		;NEXT ADR.\r
T22NEXT	LD	A,0		;TEST COMPLET\r
	RET			;RETURN\r
T22ERROR LD	A,0AH		;ERROR EXIT\r
	RET\r
\r
\r
\r
;-------RAM WRITE READ TEST-------------------------------T3RAM----------\r
		;DESCRIP: THE ROUTINE CHECK THE RAM FOR WRITE/READ\r
		;	AND REFLECTION ERROR.\r
		;	THE RAM IS LEFT WITH THE TEST PATTERN\r
		;	INTO ALL THE RAM \r
		;ENTRY:	A - TEST PATTERN\r
		;	DE - FIRST RAM ADDRESS\r
		;	HL - LAST RAM ADDRESS\r
		;EXIT:	A = 0 TEST COMPLETED\r
		;	A <> 0 : HL - ERROR ADDRESS.\r
		;DESTROY: F,DE,HL,(RAM)\r
		;TIME: 287 + 159 * BYTE COUNT  TCYCLES\r
T3RAM	PUSH	DE		;SAVE ENTRY DATA\r
	PUSH	HL\r
	AND	A\r
	SBC	HL,DE		;BYTE COUNT = START ADDR. - END ADDR.\r
	EX	DE,HL		;FOR ADDR. = START TO END\r
	INC	E\r
	INC	D\r
	DEC	HL\r
T31LOOP	INC	HL\r
	LD	(HL),A		;  WRITE TEST PATTERN\r
	CP	(HL)\r
	JR	NZ,T31ERROR	;  JUMP IF WRITE/READ ERROR\r
	DEC	E\r
	JP	NZ,T31LOOP\r
	DEC	D\r
	JP	NZ,T31LOOP	;NEXT ADDR.\r
T31NEXT	POP	HL		;RESTORE ENTRY DATA\r
	POP	DE\r
	PUSH	DE\r
	PUSH	HL		;SAVE INTRY DATA\r
	AND	A\r
	SBC	HL,DE		;BYTE COUNT = START ADDR. - END ADDR.\r
	EX	DE,HL		;FOR ADR. = START TO END\r
	INC	E\r
	INC	D\r
	DEC	HL\r
T32LOOP	INC	HL\r
	CP	(HL)		;  JUMP IF REFLECTION ERROR\r
	JR	NZ,T33ERROR\r
	CPL			;  COMPLEMENT TEST PATTERN\r
	LD	(HL),A		;  WRITE TEST PATTERN\r
	CP	(HL)\r
	CPL			;  COMPLEMENT TEST PATTERN\r
	JR	NZ,T31ERROR	;  JUMP IF WRITE/READ ERROR\r
	DEC	E\r
	JP	NZ,T32LOOP\r
	DEC	D\r
	JP	NZ,T32LOOP	;NEXT ADR.\r
	POP	HL\r
	POP	DE\r
	PUSH	HL		;SAVE END ADDRESS\r
	AND	A\r
	SBC	HL,DE\r
	EX	DE,HL\r
	POP	HL		;RESTORE END ADDRESS\r
	INC	E\r
	INC	D\r
	INC	HL\r
T33LOOP	DEC	HL		;FOR ADDR = END TO START STEP -1\r
	CPL\r
	CP	(HL)\r
	CPL\r
	JR	NZ,T34ERROR	;JUMP IF REFLECTION ERROR\r
	LD	(HL),A\r
	CP	(HL)\r
	JR	NZ,T32ERROR	;JUMP IF WRITE/READ ERROR\r
	DEC	E\r
	JP	NZ,T33LOOP\r
	DEC	D\r
	JP	NZ,T33LOOP	;NEXT ADDR\r
T32NEXT	LD	A,0		;TEST COMPLET\r
	RET			;RETURN\r
T31ERROR POP	DE		;ADJUST STACK POINTER\r
	POP	DE\r
T32ERROR LD	A,08H		;ERROR EXIT IF WRITE/READ ERROR\r
	RET\r
T33ERROR POP	DE		;ADJUST STACK POINTER\r
	POP	DE\r
T34ERROR LD	A,09H\r
	RET			;ERROR EXIT IF REFLECTION ERROR\r
\r
\r
\r
;-------RAM-PROGRAM READ TEST-------------------------------T4RAM----------\r
		;DESCRIP: THE ROUTINE CHECK THE RAM FOR PROGRAM READ ERROR.\r
		;	THE RAM IS LEFT WITH WITH 00 .\r
		;ENTRY:	DE - FIRST RAM ADDRESS\r
		;	HL - LAST RAM ADDRESS\r
		;EXIT:	A = 0 TEST COMPLETED\r
		;DESTROY: F,DE,HL,(RAM)\r
		;TIME: 58+42*BYTE COUNT TCYCLES\r
T4RAM	PUSH	DE		;SAVE ENTRY DATA\r
	PUSH	HL\r
	XOR	A		;LOAD NOP\r
	SBC	HL,DE		;BYTE COUNT = START ADDR. - END ADDR.\r
	EX	DE,HL		;FOR ADDR. = START TO END\r
	INC	E\r
	INC	D\r
	DEC	HL\r
T41LOOP	INC	HL\r
	LD	(HL),A		;  LOAD OPCODE\r
	DEC	E\r
	JP	NZ,T41LOOP\r
	DEC	D\r
	JP	NZ,T41LOOP	;NEXT ADDR.\r
T41NEXT	POP	HL		;RESTORE ENTRY DATA\r
	POP	DE\r
	LD	(HL),0C9H	;LOAD RET INTO LAST RAM ADDRESS\r
	EX	DE,HL\r
	XOR	A\r
	JP	(HL)		;DO TEST\r
				;RETURN\r
	END\r