.TITLE COPYFL .SBTTL RSX11M ROLLIN .PSECT IMPURE,D,LCL,OVR ; ; ; SYSTEM MACRO DEFINITIONS ; ; ; .MCALL QIOW$S,WTSE$C,MRKT$C ; ; ; DATA ; ; ; BLKHGH: .WORD 0 BLKLOW: .WORD 0 EOFFLG: .WORD 0 .NLIST BEX ERM1: .ASCII /ILLEGAL DEVICES SPECIFIED/ ERM1S =<.-ERM1> .EVEN ERM2: .ASCII /MAG TAPE NOT AT B.O.T. AFTER REWIND/ ERM2S =<.-ERM2> .EVEN ERM3: .ASCII /ERROR WHEN WRITING TO MAGNETIC TAPE/ ERM3S =<.-ERM3> .EVEN ERM4: .ASCII /ERROR WHEN READING FROM DISK/ ERM4S =<.-ERM4> .EVEN ERM5: .ASCII /ERROR WHEN WRITING TO DISK/ ERM5S =<.-ERM5> .EVEN ERM6: .ASCII /ERROR WHEN VERIFYING DISK/ ERM6S =<.-ERM6> .EVEN ERM7: .ASCII /ERROR WHEN READING MAGNETIC TAPE/ ERM7S =<.-ERM7> .EVEN ERM8: .ASCII /ERROR WHEN WRITING END-OF-FILE MARKS/ ERM8S =<.-ERM8> .EVEN MSG1: .ASCII /MAGNETIC TAPE COPY COMPLETE/ MSG1S =<.-MSG1> .EVEN MSG2: .ASCII /DISK COPY COMPLETE/ MSG2S =<.-MSG2> .EVEN .LIST BEX .PSECT ; ; ; PROGRAM PROPER ; ; ; COPYFL::CALL $SAVAL ;SAVE REGISTERS MOV #OUTFDB,R4 ;OUTPUT FDB TO R4 MOV #INPFDB,R5 ;INPUT FDB TO R5 MOV F.LUN(R4),R0 ;OUTPUT LUN TO R0 MOV F.LUN(R5),R1 ;INPUT LUN TO R1 MOV F.BKST(R4),R2 ;OUTPUT STATUS TO R2 MOV F.BKST(R5),R3 ;INPUT STATUS TO R3 CMP F.FNB+N.DVNM(R4),F.FNB+N.DVNM(R5);ARE DEVICES THE SAME BEQ DEVCHK ;YES THE DEVICES ARE THE SAME JMP RSTART ;QUIT DEVCHK: CMP F.FNB+N.DVNM(R4),#"MT ;DEVICES MAG TAPE BEQ MTCOPY ;YES GO COPY MAG TAPE CMP F.FNB+N.DVNM(R4),#"DK ;ARE BOTH DEVICES DISKS BNE DPDEV ;NO GO CHECK FOR DP DEVICES JMP DKCOPY ;BOTH DEVICES ARE DISKS DPDEV: CMP F.FNB+N.DVNM.(R4),#"DP ;ARE BOTH DEVICES DISK PACKS BNE ERROR ;NO ERROR JMP DKCOPY ;YES GO COPY ERROR: QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM1,#ERM1S,#60> JMP RSTART MTCOPY: QIOW$S #IO.RWD,R1,R1,,R3 ;REWIND OUTPUT TAPE CNTNU: MRKT$C 8.,3,2 WTSE$C 8. QIOW$S #IO.SEC,R1,R1,,R3 ;SET TAPE CHARACTERISTICS BIT #1000,2(R3) ;ARE WE REWINDING BNE CNTNU ;YES CONTINUE BIT #20000,2(R3) ;AT BEGINNING OF TAPE BNE RWDOUT ;YES GO REWIND OUTPUT RWDOUT: QIOW$S #IO.RWD,R0,R0,,R2 ;REWIND INPUT TAPE CONTNU: MRKT$C 8.,3,2 WTSE$C 8. QIOW$S #IO.SEC,R0,R0,,R2 ;INPUT TAPE CHARACTERISTICS BIT #1000,2(R2) ;IS TAPE REWINDING BNE CONTNU ;YES CONTINUE BIT #20000,2(R2) BEQ ERROR1 JMP RDRDY ERROR1: QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM2,#ERM2S,#60> JMP RSTART RDRDY: QIOW$S #IO.RLB,R1,R1,,R3,,<#FLABL,#BIMSIZ> MOV 2(R3),R4 CMPB #IS.SUC,(R3) ;WAS READ SUCCESSFUL BEQ WTRDY ;YES, GO WRITE TAPE CMPB #IE.EOF,(R3) ;AT END OF FILE BEQ WRTEOF ;NO, ERROR JMP ERROR5 ;YES GO WRITE EOF MSGONE: QIOW$S #IO.WVB,#TTYLUN,,,,,<#MSG1,#MSG1S,#60> BIT #VE.SW,SWOPT ;IS VERIFY SWITCH SET BEQ COMPLT ;NO, GO BACK TO RSTART JMP EXIT ;YES, RETURN COMPLT: JMP RSTART ;GO SEE IF THERE'S MORE WTRDY: QIOW$S #IO.WLB,R0,R0,,R2,,<#FLABL,R4> CLR EOFFLG ;CLEAR END OF FILE FLAG CMPB #IS.SUC,(R2) ;WAS WRITE SUCCESSFUL BEQ RDRDY ;YES GO READ SOME MORE QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM3,#ERM3S,#60> JMP RSTART ;END PROGRAM WRTEOF: QIOW$S #IO.EOF,R0,R0,,R2 ;WRITE EOF CMPB #IS.SUC,(R2) ;WAS IT A SUCCESS BNE ERROR2 ;NO ERROR INC EOFFLG ;INCREMENT FLAG CMP EOFFLG,#3. ;ARE THERE THREE EOF'S BNE RDRDY ;NO GO READ SOME MORE JMP MSGONE ;YES FINISHED ERROR2: QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM8,#ERM8S,#60> JMP RSTART DKCOPY: CLR BLKHGH CLR BLKLOW DKREAD: QIOW$S #IO.RLB,R1,R1,,R3,,<#FLABL,#INPSIZ,,BLKHGH,BLKLOW> CMP #IS.SUC,(R3) ;WAS READ A SUCCESS BEQ DKWRIT ;YES GO WRITE CMPB #IE.BLK,(R3) ;ILLEGAL BLOCK NUMBER BEQ MSGTWO ;YES FINISHED WITH DISK COPY QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM4,#ERM4S,#60> JMP RSTART DKWRIT: QIOW$S #IO.WLB,R0,R0,,R2,,<#FLABL,#INPSIZ,,BLKHGH,BLKLOW> CMP #IS.SUC,(R2) ;WAS WRITE SUCCESSFUL BEQ INCBLK ;YES GO READ SOME MORE QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM5,#ERM5S,#60> JMP RSTART INCBLK: ADD #16.,BLKLOW ;INCREMENT BLOCK COUNT JMP DKREAD ;YES WE'RE FINISHED MSGTWO: QIOW$S #IO.WVB,#TTYLUN,,,,,<#MSG2,#MSG2S,#60> BIT #VE.SW,SWOPT ;CHECK FOR VERIFY BNE EXIT ;YES, VERIFY IS SET JMP RSTART ;NO GO SEE IF THERE'S MORE ERROR4: QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM6,#ERM6S,#60> JMP RSTART ERROR5: QIOW$S #IO.WVB,#TTYLUN,,,,,<#ERM7,#ERM7S,#60> JMP RSTART EXIT: RETURN .END