|
DataMuseum.dkPresents historical artifacts from the history of: Intel ISIS Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Intel ISIS Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 7391 (0x1cdf) Types: TextFile Names: »TRAM.SRC«
└─⟦519079be6⟧ Bits:30005500 8" CR80 Floppy CR80FD_0029 ( WBOOTL.SYS W.D bootload program 81 10 01 ??? ) └─⟦519079be6⟧ Intel_ISIS_II └─ ⟦this⟧ »TRAM.SRC«
;******************************************************************************\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