DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 4385 (0x1121) Types: TextFile Names: »TRAM.S«
└─⟦f2a3f19b6⟧ Bits:30005203 8" Zilog MCZ/1 Floppy CR80FD_0030 ( BB LTU TEST BACK UP! BB VD1 821220 ) └─ ⟦this⟧ »TRAM.S«
*INCLUDE CONST.S GLOBAL TRAM,T1RAM,T2RAM,T3RAM EXTERNAL ERROR TRAM LD HL,RAMSTA AND A SBC HL,SP ;IF Z80-RAMSTA < STACK < Z80-RAMEND THEN JP P,R1ELSE LD HL,RAMEND AND A SBC HL,SP JP M,R1NEXT LD HL,-15 AND A ADD HL,SP ;Z80-RAMEND = STACK - 8 JR R1NEXT R1ELSE LD HL,RAMEND R1NEXT LD DE,RAMSTA PUSH HL PUSH DE ;SAVE Z80-RAM AREA ADDRESSES LD A,55H ;LOAD TEST PATTERN CALL T1RAM AND A CALL NZ,ERROR ;JUMP IF Z80-RAM ERROR LD DE,SRAMB LD HL,SRAME LD A,0AAH CALL T1RAM AND A JR Z,R2NEXT ;IF ERROR INTO SHARED RAM THEN LD B,4 ;LOAD ERROR CODE ADD A,B CALL ERROR ;JUMP TO ERROR ROUTINE R2NEXT POP DE ;LOAD Z80-RAM AREA ADDRESSES POP HL PUSH HL PUSH DE LD A,55H ;LOAD TEST PATTERN CALL T2RAM AND A CALL NZ,ERROR ;JUMP IF REFLECTION ERROR POP DE POP HL ;LOAD Z80-RAM AREA ADDRESSES PUSH HL PUSH DE XOR A CALL T3RAM ;CLEAR Z80 RAM AND A CALL NZ,ERROR ;JUMP IF Z80-RAM ERROR LD DE,SRAMB LD HL,SRAME LD A,0AAH CALL T2RAM AND A JR Z,R3NEXT ;IF REFLECTION ERROR INTO SHARED RAM THEN LD B,4 ;LOAD ERROR CODE ADD A,B CALL ERROR ;JUMP TO ERROR R3NEXT LD DE,SRAMB LD HL,SRAME XOR A CALL T3RAM ;CLEAR SHARED RAM AND A JR Z,R4NEXT ;IF ERROR INTO SHARED RAM THEN LD B,4 :LOAD ERROR CODE ADD A,B CALL ERROR ;JUMP TO ERROR R4NEXT POP DE ;RESTORE Z80 RAM ADDRESSES POP HL LD (HL),0C9H ;LOAD RET INTO LAST Z80 RAM ADDRESS EX DE,HL XOR A JP (HL) ;DO Z80 RAM TEST AS PROGRAM MEMORY ;--------------------------------------------------------------------------- T1RAM PUSH AF PUSH DE PUSH HL AND A SBC HL,DE ;BYTE COUNT = START ADDRESS - END ADDRESS EX DE,HL INC E INC D DEC HL T11LOOP INC HL LD (HL),A ;WRITE TEST PATTERN CP (HL) JR NZ,T11ERROR ;JUMP IF WRITE/READ ERROR CPL ;COMPLEMENT TEST PATTERN DEC E JR NZ,T11LOOP DEC D JR NZ,T11LOOP ;NEXT ADDRESS T11NEXT POP HL POP DE POP AF AND A SBC HL,DE ;BYTE COUNT = START ADDRESS - END ADDRESS EX DE,HL ;FOR ADDRESS = START TO END INC E INC D DEC HL T12LOOP INC HL CP (HL) JR NZ,T13ERROR ;JUMP IF REFLECTION ERROR CPL ;COMPLEMENT TEST PATTERN LD (HL),A ;WRITE TEST PATTERN CP (HL) JR NZ,T12ERROR ;JUMP IF WRITE/READ ERROR DEC E JR NZ,T12LOOP DEC D JR NZ,T12LOOP ;NEXT ADDRESS T12NEXT LD A,0 ;TEST COMPLETE RET T11ERROR POP DE ;ADJUST STACK POINTER POP DE POP DE T12ERROR LD A,08H ;ERROR EXIT IF WRITE/READ ERROR RET T13ERROR LD A,09H ;ERROR EXIT IF REFLECTION ERROR RET ;---------------------------------------------------------------------------- T2RAM CPL AND A SBC HL,DE ;BYTE COUNT = START ADDRESS - END ADDRESS EX DE,HL ;FOR ADDRESS = START TO END INC E INC D DEC HL T22LOOP INC HL CP (HL) JR NZ,T22ERROR ;JUMP IF REFLECTION ERROR CPL ;COMPLEMENT TEST PATTERN DEC E JR NZ,T22LOOP DEC D JR NZ,T22LOOP ;NEXT ADDRESS T22NEXT LD A,0 ;TEST COMPLETE RET T22ERROR LD A,0AH ;ERROR EXIT RET ;-------------------------------------------------------------------------- T3RAM PUSH DE PUSH HL AND A SBC HL,DE ;BYTECOUNT = START ADDRESS - END ADDRESS EX DE,HL ;FOR ADDRESS = START TO END INC E INC D DEC HL T31LOOP INC HL LD (HL),A ;WRITE TEST PATTERN CP (HL) JR NZ,T31ERROR ;JUMP IF WRITE/READ ERROR DEC E JR NZ,T31LOOP DEC D JR NZ,T31LOOP ;NEXT ADDRESS T31NEXT POP HL ;RESTORE ENTRY DATA POP DE PUSH DE PUSH HL ;SAVE ENTRY DATA AND A SBC HL,DE ;BYTE COUNT = START ADDRESS - END ADDRESS EX DE,HL ;FOR ADDRESS = START TO END INC E INC D DEC HL T32LOOP INC HL CP (HL) JR NZ,T33ERROR ;JUMP IF REFLECTION ERROR CPL ;COMPLEMENT TEST PATTERN LD (HL),A ;WRITE TEST PATTERN CP (HL) CPL ;COMPLEMENT TEST PATTERN JR NZ,T31ERROR ;JUMP WRITE/READ ERROR DEC E JR NZ,T32LOOP DEC D JR NZ,T32LOOP ;NEXT ADDRESS POP HL POP DE PUSH HL ;SAVE END ADDRESS AND A SBC HL,DE EX DE,HL POP HL ;RESTORE END ADDRESS INC E INC D INC HL T33LOOP DEC HL ;FOR ADDRESS = END TO START STEP -1 CPL CP (HL) CPL JR NZ,T34ERROR ;JUMP IF REFLECTION ERROR LD (HL),A CP (HL) JR NZ,T32ERROR ;JUMP IF WRITE/READ ERROR DEC E JR NZ,T33LOOP DEC D JR NZ,T33LOOP ;NEXT ADDRESS T32NEXT LD A,0 ;TEST COMPLETE RET T31ERROR POP DE ;ADJUST STACK POINTER POP DE T32ERROR LD A,08H ;ERROR EXIT IF WRITE/READ ERROR RET T33ERROR POP DE POP DE T34ERROR LD A,09H ;ERROR EXIT IF REFLECTION ERROR RET ;----------------------------------------------------------------------------- ;ECHO \f