TITLE PCPY ;PROGRAM TO COPY ONE RP02 DISK PACK TO ANOTHER ;AUTHOR: MARIA PLAZA ;YOU MUST ASSIGN THE INPUT PACK "IN" AND ;THE OUTPUT PACK "OUT" ;FOR EXAMPLE, .AS DPA0 IN ; .AS DPA3 OUT LOC 137 XWD 0,1 RELOC CNT=6 START: CALLI 0 INIT 0,17 ;DUMP MODE NEEDED FOR SUPER USETI/O SIXBIT/IN/ ;ASSIGNED INPUT DISK PACK - IN Z JRST MESS1 INIT 1,17 SIXBIT/OUT/ ;ASSIGNED OUTPUT PACK - OUT Z JRST MESS2 MOVEI 2,1 ;START COPY WITH BLOCK 1 USETI 0,2 ;CONTENTS OF EFFECTIVE ADDRESS HAS STARTING BLOCK USETO 1,2 INPUT 0,IOL ;GET FIRST HALF CYLINDER LESS BLOCK 0 STATZ 740000 ;ERRORS? JRST IERR ;YES OUTPUT 1,IOL ;OUTPUT FIRST HALF CYLINDER LESS BLOCK 0 STATZ 1,740000 ;ERRORS? JRST OERR ;YES ;VERIFICATION FOR 1ST HALF CYLINDER ;SEE COMMENTS IN VERIFY SUBROUTINE MOVEI 7,^D2559 USETI 1,2 VIN1: MOVEI 4,^D2559 INPUT 1,VI STAT: STATZ 1,740000 JRST REDERR COMP1: MOVE 5,VBLK(4) CAME 5,BLK(7) JSR DISCRP SOS 7 SOJGE 4,COMP1 ADDI 7,^D5120 ;TO GET TO NEXT GROUP CAIN 7,^D12799 ;JUST DONE 4TH GROUP? JRST DIM ;YES CAIE 7,^D15359 ;NO,DONE 5 GROUPS? JRST VIN1 ;NO ;YES, 1ST HALF CYLINDER DONE ADDI 2,^D99 ;COUNT # OF BLOCKS + BLOCK 0 COPIED & VERIFIED MORE: INPUT 0,IO ;GET NEXT HALF CYLINDER(100 BLOCKS) STATZ 740000 ;ERRORS? JRST IERR ;YES OUTPUT 1,IO ;OUTPUT HALF CYLINDER STATZ 1,740000 ;ERRORS? JRST OERR ;YES JSR VERIFY ADDI 2,^D100 ;INCREMENT NUMBER OF BLOCKS COPIED & VERIFIED CAIGE 2,^D40000 ;ALL BLOCKS COPIED? JRST MORE ;NO TTCALL 3,[ASCIZ/COPY COMPLETED /] RELEAS 0, ;YES RELEAS 1, CALLI 12 VERIFY: Z ;20 BLKS AT A TIME ;SO 5 GROUPS PER HALF CYLINDER MOVEI 7,^D2559 ;2560 WDS PER GROUP USETI 1,2 ;BLK # TO INPUT IN 2 VIN: MOVEI 4,^D2559 ;#WDS-1 IN 20 BLKS INPUT 1,VI ;GET 20 BLKS STATZ 1,740000 ;ANY ERRORS? JRST REDERR ;YES COMP: MOVE 5,VBLK(4) ;START COMPARE AT END OF VBLK CAME 5,BLK(7) ;COMPARE TO PART OF INPUT BLOCK ;FROM ORIGINAL PACK JSR DISCRP ;NO MATCH SOS 7 ;DECREMENT INDEX SOJGE 4,COMP ;FINISHED A GROUP ? ADDI 7,^D5120 ;YES,TO GET TO NEXT GROUP CAIE 7,^D15359 ;DONE 5 GROUPS? JRST VIN ;NO JRST @VERIFY ;YES, RETURN REDERR: TTCALL 3,[ASCIZ/ERROR IN READING FROM OUTPUT PACK /] CALLI 12 DISCRP: Z TTCALL 3,[ASCIZ/NO COMPARE /] JRST @DISCRP VI: IOWD ^D2560,VBLK Z VBLK: BLOCK ^D2560 ;20 BLOCKS DIM: SUBI 7,^D128 ;1ST HALF CYL SHORT ONE BLK MOVEI 4,^D2431 ;19 BLKS INPUT 1,VI1 JRST STAT VI1: IOWD ^D2432,VBLK ;19 BLKS Z IOL: IOWD ^D12672,BLK Z IO: IOWD ^D12800,BLK Z BLK: BLOCK ^D12800 MESS1: TTCALL 3,[ASCIZ/INIT ERROR ON INPUT DEVICE /] CALLI 12 MESS2: TTCALL 3,[ASCIZ/INIT ERROR ON OUTPUT DEVICE /] CALLI 12 IERR: TTCALL 3,[ASCIZ/INPUT ERROR DURING DUMP /] CHK1: GETSTS 10 CALLI 12 OERR: TTCALL 3,[ASCIZ/OUTPUT ERROR DURING DUMP /] CHK2: GETSTS 1,11 CALLI 12 END START