/OS8 RXCOPY V2 1975 / / / / / / / // / / / / /COPYRIGHT (C) 1975 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / / / /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. / / /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL /EQUIPMRNT COROPATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. / / / / / / /PROGRAM TO COPY AN ENTIRE FLOPPY *0 VERSION=2 MESSAGE=JMS I [MESSA0 LCD=JMS XLCD XDR=JMS XXDR STR=JMS XSTR SER=JMS XSER SDN=JMS XSDN INIT=JMS XINIT READ=3^2 /LOAD READ FUNCTION WRITE=2^2 /LOAD WRITE FUNCTION TRACKS=115 /NUMBER OF TRACKS ON A FLOPPY RETRY=10 /NUMBER OF TIMES TO RETRY HOP=3 /HOW TO INTERLEAVE SECTORS HOPFUG=32 /AND HOW TO MAKE SURE WE GET THEM ALL BUFFER=3300 /ADDRESS OF DATA BUFFER *10 AX, VERSION *20 WS, 0 WSB, 0 WSC, 0 A=.-1 ZBLOCK 3 /DRIVE, DEVICE CODE, AND UNIT B=.-1 ZBLOCK 3 /DRIVE, DEVICE CODE, AND UNIT CSEC, 0 /CURRENT SECTOR CTRACK, 0 /CURRENT TRACK CDRIVE, 0 /CURRENT DRIVE CDC, 0 /CURRENT DEVICE CODE CUNIT, 0 /CURRENT UNIT CBUF, 0 /BUFFER POINTER CP, 0 /PACKING INDICATOR CFUNC, 0 /CURRENT FUNCTION CAC, 0 /SAVE THE ACCUMULATOR LASTIM, 0 /LAST UNIT INITIALIZED DOFLAG, 0 /-1=COPY,1=VERIFY,0=READ CHECK ERRS, 0 /# OF COMPARE ERRORS THIS SECTOR TRACNT, 0 /HOW MANY TRACKS TO GO STATUS, 0 /STATUS CHAR, 0 /TTY CHARACTER LASTIN, 0 /LAST UNIT INITIALIZED MODE, 100 /USE 8-BIT MODE /LOAD COMMAND REGISTER XLCD, 0 X1, 6001 JMP I XLCD JMP BADC /TRANSFER DATA XXDR, 0 X2, 6002 JMP I XXDR JMP BADC /SKIP ON TRANSFER READY XSTR, 0 X3, 6003 JMS CHEKCC ISZ XSTR JMP I XSTR /SKIP ON ERROR XSER, 0 X4, 6004 JMS CHEKCC ISZ XSER JMP I XSER /SKIP ON DONE FLAG XSDN, 0 X5, 6005 JMS CHEKCC ISZ XSDN JMP I XSDN /INITIALIZE CONTROLLER XINIT, 0 X6, 6007 JMP I XINIT JMP BADC /INIT SKIPPED? CHEKCC, 0 DCA CAC /SAVE ISZ CHEKCC /SKIP OVER THE ISZ KRS /WHAT TYPED LAST? AND (177 /PARITY! TAD (-3 /CTRL/C? SNA CLA KSF /FLAG? JMP CC2 /NO CTRL/C TYPED MESSAGE CTRLC JMS CRLF MESSAGE /ASK IF SURE MONITOR RUSURE /IS ON SYS DEVICE JMS GETIN TAD CHAR AND (-331 /TEST FOR YES SZA CLA HLT /ANSWER WAS NO TAD I (DEVTAB TAD (6007 DCA X6 /INIT CONTROLLERS JMS XINIT TAD I (DEVTAB+1 /BEFORE RETURNING TAD (6007 DCA X6 JMS XINIT JMP 7600 / " " YES, RETURN TO MONITOR / CC2, TAD CAC /RESTORE AC JMP I CHEKCC PAGE *200 BEGIN, JMP OPTIONS /GET OPTION, DRIVE NUMBERS, ETC. READ1, JMS SETUP /SET UP TO READ FROM FIRST DRIVE READ A READ2, JMS RDWT /DO A READ FROM THE FIRST DRIVE STL RTL /EMPTY FUNCTION JMS SETMT /SET UP TO EMPTY BUFFER READ3, JMS FILLMT /PICK UP 8 BITS FROM RX JMP READ7 /FINISHED WITH ONE SECTOR JMS SAVE /STASH 8 BITS IN BUFFER JMP READ3 /AND GO GET ANOTHER 8 BITS READ7, JMS NEXTS /GO TO NEXT SECTOR JMP READ2 /AND GO DO ANOTHER READ, UNLESS-- TAD DOFLAG /WE'RE FINISHED WITH TRACK SNA /WHAT ARE WE DOING? JMP READCH /READ ONLY SMA CLA JMP VERIFY /VERIFY--COMPARE ONLY JMS SETUP /COPY--GO SET UP TO WRITE WRITE /ON SECOND UNIT B WRITE2, JMS SETMT /SET UP FOR FILL OPERATION WRITE4, JMS UNSAVE /UNPACK 8 BITS JMS FILLMT /AND FILL RX JMP WRITE6 /ALL FULL - GO WRITE IT CLA /MORE TO DO--CLEAR OUT BITS JMP WRITE4 /AND CONTINUE WRITE6, JMS RDWT /TRY TO WRITE SECOND UNIT JMS NEXTS /NOW GO TO NEXT SECTOR JMP WRITE2 /AND DO NEXT SECTOR, UNLESS-- VERIFY, JMS SETUP /WE'RE THROUGH WITH A TRACK, SO READ /SET UP TO READ FROM SECOND UNIT B CHECK2, JMS RDWT /AND READ STL RTL /EMPTY FUNCTION JMS SETMT /SET UP TO EMPTY RX DCA ERRS /ZERO ERROR COUNT CHECK3, JMS FILLMT /GET 8 BITS JMP CHECK7 /FINISHED WITH SECTOR--ANY ERRORS? DCA WS /SAVE IT A WHILE JMS UNSAVE /WHAT SHOULD IT BE? CIA TAD WS /COMPARE IT SZA CLA ISZ ERRS /AND COUNT ERRORS JMP CHECK3 /AND GO FOR MORE CHECK7, TAD ERRS /WERE THERE ANY? SNA CLA JMP CHECK8 /NO, OK MESSAGE MCOMPARE TAD ERRS JMS DECOUT /TELL HOW MANY ERRORS MESSAGE MERRS JMS WHERE /AND WHERE FOUND JMP OPTNO CHECK8, JMS NEXTS JMP CHECK2 /GO TO NEXT SECTOR READCH, ISZ CTRACK /GO TO NEXT TRACK TAD CTRACK MQL /PUT TRACK IN THE MQ FOR FUN CLA /IN CASE NO MQ ISZ TRACNT /ARE WE THROUGH? JMP READ1 /AND CONTINUE MESSAGE FINISHED /TELL HIM DONE JMP OPTNO /START OVER NEXTS, 0 /GO TO NEXT SECTOR TAD CSEC /CURRENT SECTOR TAD (HOP-HOPFUG /UPDATE SPA SNA /WERE WE TOO BIG? TAD (HOPFUG /NO, ADD FUG BACK ON DCA CSEC /AND SAVE IT TAD CSEC CLL RAR /IS IT ONE? IF SO, THROUGH SNA CLA ISZ NEXTS /SHOW WE ARE FINISHED JMP I NEXTS /AND RETURN PAGE RDWT, 0 RDWT1, TAD (-RETRY DCA WS /SAVE HOW MANY TIMES TO RETRY RDWT2, TAD MODE /8 BIT-MODE-BIT TAD CFUNC /CURRENT FUNCTION TAD CDRIVE /CURRENT DRIVE LCD /LOAD COMMAND REGISTER TAD CSEC /GET CURRENT SECTOR JMS FILLMT /AND LOAD IT IN JMP BADC /SHOULDN'T HAVE DONE FLAG CLA TAD CTRACK /GET CURRENT TRACK JMS FILLMT /AND LOAD IT IN JMP BADC /SHOULDN'T HAVE DONE FLAG CLA SDN /SKIP ON DONE FLAG JMP .-1 SER /WAS THERE AN ERROR? JMP I RDWT /NO, ALL OK RDWT3, ISZ WS /HAVE WE RETRIED ENOUGH TIMES? JMP RDWT4 /NO TAD CFUNC RTR CLA SNL /READ OR WRITE? JMP .+4 MESSAGE CRD JMP .+3 MESSAGE CWT MESSAGE UNIT TAD CUNIT /CURRENT UNIT JMS TYPE JMS WHERE /TELL WHERE ERROR HAPPENED JMP OPTNO RDWT4, XDR /GET ERROR CODE DCA STATUS TAD STATUS AND (3 /PARITY OR CRC? SNA CLA JMP RDWT5 /NO, BETTER INITIALIZE TAD WS AND (4 SNA CLA /SHALL WE INITIALIZE ANYWAY? JMP RDWT2 /NO, TRY AGAIN WITHOUT INIT RDWT5, INIT /INITIALIZE DRIVE SDN /SKIP ON DONE FLAG JMP .-1 SER /ERROR? JMP RDWT2 /NO JMP RDWT3 /YES, NOW WHAT? SETUP, 0 TAD I SETUP /GET FUNCTION ISZ SETUP DCA CFUNC /AND SAVE IT TAD I SETUP /GET TABLE ADDRESS ISZ SETUP DCA AX TAD I AX /GET DRIVE NUMBER DCA CDRIVE /AND SAVE IT TAD I AX /GET DEVICE CODE DCA WS /AND SAVE IT A WHILE TAD I AX /GET UNIT DCA CUNIT /AND SAVE IT TAD WS JMS DEVSET /AND NOW SET DEVICE CODES IAC DCA CSEC /START AT SECTOR 1 JMP I SETUP /NOW RETURN?! SETMT, 0 TAD MODE LCD /SET UP FOR EITHER FILL OR EMPTY TAD CSEC /TAKE CURRENT SECTOR CLL RTL /*4 CLL RTL /*20 CLL RTL /*100 CLL RAL /*200 DCA CBUF /AND SAVE IT JMP I SETMT /AND RETURN SETMT4, TAD CSEC /*5 CLL RTL /*20 TAD CSEC /*21 CLL RAL /*42 TAD CSEC /*43 CLL RAL /*86 TAD (BUFFER-126 DCA CBUF /ADDRESS OF FIELD 0 BUFFER DCA CP /RESET PACKING INDICATOR JMP I SETMT /AND RETURN FILLMT, 0 FILL2, STR /SKIP IF TRANSFER READY JMP FILL3 /NOT YET XDR /TRANSFER DATA ISZ FILLMT /SHOW SUCCESS JMP I FILLMT /AND RETURN FILL3, SDN /SKIP IF DONE JMP FILL2 /NO SKIP YET CLA SER /ERROR? JMP I FILLMT /RETURN BADC, MESSAGE /CONTROLLER ERROR! CONTROL JMS WHERE /TELL WHERE JMP OPTNO PAGE OPTION, OPT1, MESSAGE MOPTIONS /ASK WHAT TO DO OPT2, JMS GETIN /WAIT FOR IT JMP OPT1 /HE TYPED RUBOUT TAD (OPTAB-1 DCA AX OPT3, TAD I AX SNA /END OF TABLE? JMP BADIN /YES, HE GOOFED. TAD CHAR /THIS ONE? SNA CLA JMP OPT4 /YES! ISZ AX JMP OPT3 /TRY AGAIN OPT4, TAD I AX /GET DISPATCH ADDRESS DCA WS JMP I WS /AND DISPATCH BADIN, MESSAGE BIM XH, MESSAGE HELP /GIVE HIM HELP /AND LET HIM TRY AGAIN OPTNO, MESSAGE OPT JMS GETIN JMP OPTNO /RUBOUT TYPED JMP OPT2+2 XC, STA DCA DOFLAG /REMEMBER WHAT TO DO MESSAGE FROM /ASK HIM FROM WHERE? XC2, JMS UNITIN A MESSAGE TO JMS UNITIN /NOW WHERE TO? B XEND, DCA CTRACK /START AT TRACK 0 TAD (-TRACKS DCA TRACNT /NUMBER OF TRACKS TO DO JMP READ1 /AND RETURN XM, IAC DCA DOFLAG /REMEMBER WHAT TO DO MESSAGE COMP /ASK WHICH TO COMPARE JMP XC2 XR, DCA DOFLAG /SET WHAT TO DO MESSAGE CHECK /ASK WHAT UNIT TO DO JMS UNITIN /WHICH TO READ CHECK? A JMP XEND XD, TAD (DEVTAB-1 /TABLE OF DEVICE CODES DCA AX JMS DEVIN /GET FIRST DEVICE CODE GETIO1 /MESSAGE TO BE PRINTED JMS DEVIN /GET SECOND DEVICE CODE GETIO2 /MESSAGE TO BE PRINTED JMP OPTNO DEVIN, 0 /GET DEVICE CODE MESSAGE GETIOT KCC /CLEAR KEY FLAG TAD I DEVIN /GET MESSAGE TO PRINT ISZ DEVIN DCA .+2 MESSAGE /AND PRINT IT HLT /GETIO1, ETC. JMS OCTIN /GET DIGIT CLL RTL RAL DCA WS /SAVE IT JMS OCTIN /GET NEXT DIGIT TAD WS CLL RTL RAL DCA I AX /XAVE NEW DEVICE CODE JMP I DEVIN /AND RETURN XYES, STA DCA DOFLAG /COPY DCA A+1 /FROM UNIT 0 TAD DEVTAB DCA A+2 TAD ("0 DCA A+3 TAD (20 /TO UNIT 11 DCA B+1 TAD DEVTAB DCA B+2 TAD ("1 DCA B+3 TAD DEVTAB JMS DEVSET /SET UP DEVICE CODE INIT SDN JMP .-1 DCA LASTIN SER /ERROR? JMP XEND TAD ("0 /SET UP FOR MESSAGE DCA CHAR JMP NOINIT /AND GO COMPLAIN OCTIN, 0 /GET OCTAL DIGIT JMS XKRB /GET CHARACTER TAD (-"8 CLL TAD (10 /IS IT VALID? SZL JMP I OCTIN /YES CLA MESSAGE BADOCT JMP OPTNO PAGE UNITIN, 0 UNIT1, CLA MESSAGE /ASK UNIT UNIT JMS GETIN /WAIT FOR TYPING JMP UNIT3 /HMM...RUBOUT TAD WS CLL RAR SZA JMP UNIT2 /UNITS MUST BE ONLY ONE CHARACTER TAD CHAR TAD (-"4 CLL TAD (4 SNL /VALID NUMBER? JMP UNIT2 /NO CLL RAR TAD (DEVTAB /TABLE OF DEVICE CODES DCA WS TAD I UNITIN /WHERE TO STASH INFO? ISZ UNITIN DCA AX RTL RTL RAL DCA I AX /SAVE DRIVE BIT TAD I WS DCA I AX /SAVE DEVICE CODE TAD CHAR DCA I AX /AND SAVE UNIT NAME TAD WS CIA TAD LASTINIT SNA CLA /HAVE WE INITIALIZED THIS ONE? JMP I UNITIN /YES. FINISHED FOR NOW. TAD WS /NOT RECENTLY. DO IT. DCA LASTINIT TAD (-15 DCA TOUT TAD I WS /GET DEVICE CODE JMS DEVSET /AND SAVE IT INIT /AND INITIALIZE SKPDNE, SDN /SKIP ON DONE FLAG JMP TIMEOUT SER /SKIP ON ERROR JMP I UNITIN /AND RETURN IF OK DCA LASTINIT /FORGET WE TRIED TO INIT NOINIT, MESSAGE CANTI /AND COMPLAIN TAD CHAR JMS TYPE JMP OPTNO /START OVER UNIT2, CLA MESSAGE BADOCT JMS CRLF JMP UNIT1 UNIT3, JMS CRLF TAD WS SNA CLA JMP OPTNO JMP UNIT1 GETIN, 0 KCC /GET RID OF ANY FLAG DCA WS /ZERO TO CHARACTER COUNT JMS XKRB /GET FROM KEYBOARD DCA CHAR /AND SAVE IT TAD CHAR GETIN3, TAD (-377 SNA JMP I GETIN /RUBOUT! TAD (377-215 SZA CLA JMP GETIN4 /NOT CR, GO FOR MORE. ISZ GETIN /SHOW SUCCESS JMP I GETIN /AND RETURN GETIN4, JMS XKRB /GET ANOTHER CHARACTER ISZ WS /COUNT CHARACTERS JMP GETIN3 /AND GO FOR MORE XKRB, 0 KSF JMP .-1 JMS CHEKCC /CHECK FOR CTRL/C NOP /(SKIPS) KRB TLS /ECHO CHARACTER TSF JMP .-1 AND (177 /ALLOW PARITY TERMINALS TAD (200 JMP I XKRB /AND RETURN / TIMEOUT,ISZ TIMEO JMP SKPDNE ISZ TOUT JMP SKPDNE JMP NOINIT-1 TIMEO, 0 TOUT, -15 PAGE SAVE, 0 /STASH 8 BITS IN BUFFER CDF 10 DCA I CBUF ISZ CBUF /BUMP POINTER CDF JMP I SAVE /AND RETURN UNSAVE, 0 /GET BACK FROM THE BUFFER CDF 10 TAD I CBUF ISZ CBUF /BUMP POINTER CDF JMP I UNSAVE /AND RETURN SAVE2, ISZ CP JMP NOPCK RTL RTL DCA CP CMA RAL TAD CBUF DCA CBUF TAD CP AND (7400 TAD I CBUF DCA I CBUF ISZ CBUF TAD CP RTL RTL AND (7400 TAD I CBUF NOPCK, DCA I CBUF TAD CP AND CBUF RAR SZL CLA CMA DCA CP ISZ CBUF JMP I SAVE UNSAV2, ISZ CP TAD CP CMA RTR SMA SNL CLA JMP UNPCK TAD I CBUF AND (0377 ISZ CBUF JMP I UNSAVE UNPCK, CMA RAL TAD CBUF DCA CBUF TAD I CBUF AND (7400 DCA CP ISZ CBUF TAD I CBUF AND (7400 CLL RTR RTR TAD CP RTR RTR JMP UNPCK-2 DEVSET, 0 /SET UP DEVICE CODE DCA CDC /SAVE DEVICE CODE TAD (IOTBL-1 DCA AX DEVS2, TAD I AX /GET ADDRESS OF IOT SNA /FINISHED? JMP I DEVSET /YES DCA WS TAD I WS AND (7007 /STRIP OLD DEVICE CODE TAD CDC /AND PUT IN NEW ONE DCA I WS JMP DEVS2 DECOUT, 0 /OUTPUT DECIMAL NUMBER SNA JMP DECO2 /DON'T SUPPRESS ALL ZEROES!! DCA WSB TAD (DECO9 /NUMBER TABLE ADDRESS DCA WS JMS DECO6 SNA /ZERO TO SUPPRESS? JMP .-2 /YES TAD ("0 JMS TYPE /TYPE DIGIT JMS DECO6 /GET NEXT DIGIT JMP .-3 /AND TYPE IT DECO2, TAD ("0 JMS TYPE JMP I DECOUT DECO6, 0 DCA WSC /ZERO COUNTER DECO7, TAD I WS SNA /END? JMP I DECOUT /YES STL TAD WSB SZL JMP DECO8 DCA WSB ISZ WSC JMP DECO7 DECO8, CLA ISZ WS TAD WSC JMP I DECO6 DECO9, DECIMAL;-1000;-100;-10;-1;0;OCTAL PAGE WHERE, 0 /TYPE OUT WHERE MESSAGE MTRACK TAD CTRACK /CURRENT TRACK JMS DECOUT MESSAGE MSECTOR TAD CSEC /CURRENT SECTOR JMS DECOUT JMP I WHERE /AND RETURN MESSA0, 0 TAD I MESSA0 DCA MESSA4 ISZ MESSA0 MESSA1, TAD I MESSA4 RTR RTR RTR JMS MESSA2 TAD I MESSA4 JMS MESSA2 ISZ MESSA4 JMP MESSA1 MESSA2, 0 AND (77 SNA JMP I MESSA0 TAD (7741 SNA JMP MESSA5 SPA TAD (100 TAD (37 MESSA3, JMS TYPE JMP I MESSA2 MESSA5, JMS CRLF JMP I MESSA2 MESSA4, 0 CRLF, 0 TAD (215 JMS TYPE TAD (212 JMS TYPE JMP I CRLF TYPE, 0 TLS TSF JMP .-1 CLA JMP I TYPE / / VERN, JMS CRLF MESSAGE VERNUM JMP OPTNO / / PAGE BIM, TEXT /_INVALID RESPONSE!!/ HELP, TEXT /_OPTIONS ARE: COPY, MATCH, READ-CHECK, DEVICE-CODE, AND VERSION / OPT, TEXT /_OPTION? / MOPTIO, TEXT /_COPY UNIT 0 TO UNIT 1, YES OR NO? / MCOMPA, TEXT /_COMPARE ERROR / MERRS, TEXT / ERRORS,/ FROM, TEXT /_FROM/ TO, TEXT /_TO/ COMP, TEXT /_COMPARE/ UNIT, TEXT / UNIT: / CHECK, TEXT /_CHECK/ CANTI, TEXT /_CAN'T INITIALIZE UNIT / CRD, TEXT /_CAN'T READ/ CWT, TEXT /_CAN'T WRITE/ CONTRO, TEXT /_CONTROLLER ERROR/ MTRACK, TEXT / TRACK / MSECTO, TEXT / SECTOR / GETIOT, TEXT /_TYPE TWO-DIGIT DEVICE CODE FOR UNITS / RUSURE, TEXT /ARE YOU SURE THE MONITOR ON THE SYS DEVICE?/ VERNUM, TEXT /RXCOPY V#2A/ CTRLC, TEXT /^C/ GETIO1, TEXT /0-1: / GETIO2, TEXT /2-3: / BADOCT, TEXT /_WHAT?/ MCC, TEXT /_^C_/ FINISH, TEXT /_DONE/ OPTAB, -"C XC -"M XM -"R XR -"D XD -"Y XYES -"H XH -"N OPTNO -"V VERN 0 DEVTAB, 750 760 IOTBL, X1 /ADDRESSES OF IOT'S X2 X3 X4 X5 X6 0 /TABLE TERMINATOR $