.TITLE VERIFY .SBTTL RSX11M ROLLIN .PSECT IMPURE,D,LCL,OVR ; ; ; SYSTEM MACRO DEFINITIONS ; ; ; .MCALL QIOW$S,MRKT$C,WTSE$C ; ; ; DATA ; ; ; BUFIN: .BLKB 10240. BUFOUT: .BLKB 10240. BLKLOW: .WORD 0 ;STARTING BLOCK OF DISK READ BLKHGH: .WORD 0 ;HIGH BLOCK NUMBER EOFFLG: .WORD 0 .NLIST BEX ERM1: .ASCII /REWIND ERROR DURING VERIFY/ ERM1S =<.-ERM1> .EVEN ERM2: .ASCII /MAG TAPE READ ERROR DURING VERIFY/ ERM2S =<.-ERM2> .EVEN ERM3: .ASCII /DISK READ ERROR DURING VERIFY/ ERM3S =<.-ERM3> .EVEN ERM4: .ASCII /BYTE COUNT ERROR DETECTED DURING VERIFY/ ERM4S =<.-ERM4> .EVEN ERM5: .ASCII /BYTE CONTENTS NOT SAME BETWEEN COPY AND ORIGINAL/ ERM5S =<.-ERM5> .EVEN MSG1: .ASCII /MAGNETIC TAPE VERIFY COMPLETE/ MSG1S =<.-MSG1> .EVEN MSG2: .ASCII /DISK VERIFY COMPLETE/ MSG2S =<.-MSG2> .EVEN .LIST BEX .PSECT ; ; ; PROGRAM PROPER ; ; ; VERIFY::CALL $SAVAL ;SAVE REGISTERS MOV #OUTFDB,R0 ;OUTPUT FDB TO R0 MOV F.LUN(R0),R4 ;OUTPUT LUN TO R4 MOV F.BKST(R0),R2 ;OUTPUT STATUS WORD MOV #INPFDB,R1 ;INPUT FDB TO R1 MOV F.LUN(R1),R5 ;INPUT LUN TO R5 MOV F.BKST(R1),R3 ;INPUT STATUS TO R3 CMP F.FNB+N.DVNM(R0),#"MT ;ARE DEVICES MAG TAPE BEQ OUTRWD ;YES GO REWIND JMP DKVFY ;BOTH DEVICES ARE DISKS OUTRWD: QIOW$S #IO.RWD,R4,R4,,R2 ;REWIND OUTPUT TAPE CONTNU: MRKT$C 8.,3,2 WTSE$C 8. QIOW$S #IO.SEC,R4,R4,,R2 ;SENSE TAPE CHARACTERISTICS BIT #1000,2(R2) ;IS TAPE REWINDING BNE CONTNU ;YES CONTINUE BIT #20000,2(R2) ;IS TAPE AT BOT BNE INPRWD ;YES GO REWIND INPUT TAPE JMP ERROR ;NO ERROR INPRWD: QIOW$S #IO.RWD,R5,R5,,R3 ;REWIND INPUT TAPE CNTNU: MRKT$C 8.,3,2 WTSE$C 8. QIOW$S #IO.SEC,R5,R5,,R3 ;SENSE TAPE CHARACTERISTICS BIT #1000,2(R3) ;IS TAPE REWINDING BNE CNTNU ;YES CONTINUE BIT #20000,2(R3) ;IS TAPE AT BOT BEQ ERROR ;NO ERROR JMP READ ERROR: QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM1,#ERM1S,#60> JMP RSTART READ: QIOW$S #IO.RLB,R5,R5,,R3,,<#BUFIN,#BIMSIZ> CMPB #IS.SUC,(R3) ;WAS READ A SUCCESS BEQ REDOUT ;YES GO READ OUTPUT TAPE CMPB #IE.EOF,(R3) ;CHECK FOR EOF BNE ERROR1 ;NO ERROR JMP MSGCOM ;YES FINISHED REDOUT: QIOW$S #IO.RLB,R4,R4,,R2,,<#BUFOUT,#BIMSIZ> CMPB #IS.SUC,(R2) ;WAS READ A SUCCESS BNE ERROR1 ;NO ERROR JSR PC,CHECK ;YES GO VERIFY JMP READ ;GO READ SOME MORE ERROR1: QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM2,#ERM2S,#60> JMP RSTART MSGCOM: QIOW$S #IO.WVB,#TTYLUN,,,,,<#MSG1,#MSG1S,#60> JMP CKATCH DKVFY: CLR BLKHGH CLR BLKLOW IDKVFY: QIOW$S #IO.RLB,R5,R5,,R3,,<#INPBUF,#INPSIZ,,BLKHGH,BLKLOW> CMPB #IS.SUC,(R3) ;WAS READ SUCCESSFUL BEQ ODKVFY ;YES GO READ OUTPUT JMP ERROR2 ODKVFY: QIOW$S #IO.RLB,R4,R4,,R2,,<#OUTBUF,#OUTSIZ,,BLKHGH,BLKLOW> CMPB #IS.SUC,(R2) ;WAS READ A SUCCESS BEQ BLKINC ;YES GO INCREMENT BLOCK COUNT ERROR2: QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM3,#ERM3S,#60> JMP RSTART BLKINC: ADD #16.,BLKLOW ;INCREMENT STARTING BLOCK JSR PC,CHECK ;GO VERIFY BUFFERS JMP IDKVFY ;GO READ SOME MORE MSAGE: QIOW$S #IO.WVB,#TTYLUN,,,,,<#MSG2,#MSG2S,#60> JMP CKATCH CHECK:: CALL $SAVAL ;SAVE REGISTERS CMP 2(R3),2(R2) ;SAME NUMBER OF BYTES READ BNE BYTERR ;NOT SAME ERROR MOV 2(R2),R2 ;BYTE COUNT TO R4 CMP F.FNB+N.DVNM(R0),#"MT BEQ MTBUF MOV #INPBUF,R4 ;INPUT BUFFER POINTER MOV #OUTBUF,R5 ;OUTPUT BUFFER POINTER BYTCHK: CMPB (R4)+,(R5)+ ;COMPARE EACH BYTE BNE CHKERR ;NO ERROR DEC R2 BGT BYTCHK ;MORE TO COMPARE RETURN MTBUF: MOV #BUFIN,R4 MOV #BUFOUT,R5 JMP BYTCHK BYTERR: QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM4,#ERM4S,#60> JMP RSTART CHKERR: CMP #4800.,BLKLOW BEQ MSAGE QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM5,#ERM5S,#60> JMP RSTART .END