10 REM 20 REM Public Domain Software 1990 30 REM 40 *TV255 50 MODE7 60 *ADFS 70 HIMEM=&2C00 80 PRINTCHR$(141);" Master Series - ADFS Backup" 90 PRINTCHR$(141);" Master Series - ADFS Backup" 100 PRINTTAB(11,3);"Version 2.33." 110 PRINTTAB(6,5);"For floppy drives only." 120 DIM BLOCK% 15,RAM% 4 130 data%=&2C00 140 PRINTTAB(0,8);"Enter source drive number (0-5) ?"; 150 REPEAT:SOURCE%=(GET AND 207):UNTIL SOURCE%<5:PRINT" ";SOURCE% 160 PRINTTAB(0,10);"Enter destination drive number (0-5) ?"; 170 REPEAT:DEST%=(GET AND 207):UNTIL DEST%<5:PRINT" ";DEST% 180 IFSOURCE%=0 THEN SOURCE%=4 190 IFSOURCE%=1 THEN SOURCE%=5 200 IFDEST%=0 THEN DEST%=4 210 IFDEST%=1 THEN DEST%=5 220 IF SOURCE%=DEST% THEN CHANGE%= TRUE ELSE CHANGE%=FALSE 230 FAST=TRUE:REM Fast disk access 240 : 250 I%=0:BANKS%=0 260 ON ERROR GOTO 1440 270 : 280 OSCLI"SRDATA "+STR$(4+I%) 290 BANKS%=BANKS%+1 300 RAM%?I%=TRUE 310 : 320 I%=I%+1 330 IF I%<4 THEN 280 340 : 350 ON ERROR OFF 360 CLS:PRINTTAB(0,10);"InsertˆDESTINATION‰disk and press SPACE" 370 PROCSPACE 380 OSCLI"MOUNT "+STR$(DEST%) 390 IF FNCHECKFORMATTED(DEST%,"D")<>0 THEN PRINT''"Disk not formatted":END 400 CLS:PRINTTAB(0,10);"InsertˆSOURCE‰disk and press SPACE" 410 PROCSPACE 420 IF FNCHECKFORMATTED(SOURCE%,"S")<>0 THEN PRINT''"Disk not formatted":END 430 IF DEST_SIZE%SOURCE_SIZE%/20 THEN MAXBLOCKS%=SOURCE_SIZE%/20-BLOCKDONE% 490 PROCMOUNT(SOURCE%) 500 FORJ%=0 TO MAXBLOCKS%-1 510 PROCLOADBLOCK(I%*4+J%*20*4,J%) 520 PROCMOVEBLOCK_UP(J%) 530 NEXT 540 IF CHANGE% THEN CLS:PRINTTAB(0,10);"InsertˆDESTINATION‰disk and press SPACE":PROCSPACE 550 PRINTTAB(0,10);"Writing..." 560 PROCMOUNT(DEST%) 570 FORJ%=MAXBLOCKS%-1 TO FNMAX(0,MAXBLOCKS%-2) STEP -1 580 PROCMOVEBLOCK_DOWN(J%) 590 PROCWRITEBLOCK(I%*4+J%*20*4,J%) 600 NEXT 610 IF MAXBLOCKS%<=2 THEN 660 620 FOR J%=0 TO MAXBLOCKS%-3 630 PROCMOVEBLOCK_DOWN(J%) 640 PROCWRITEBLOCK(I%*4+J%*20*4,J%) 650 NEXT 660 I%=I%+MAXBLOCKS%*20 670 IF I%=SOURCE_SIZE% 690 PROCRESTORE_RAMSTATUS 700 END 710 DEFFNMAX(A,B) 720 IF A>B THEN =A ELSE =B 730 DEFPROCLOADBLOCK(ST%,BLOCKNO%) 740 OSET%=0 750 IF BLOCKNO%=MAXBLOCKS%-2 AND MAXBLOCKS%>1 THEN OSCLI"FX 108,1":OSET%=&400 760 IF BLOCKNO%=MAXBLOCKS%-1 THEN OSCLI"FX 108,0" 770 PROCload_DISK(SOURCE%,ST%,data%+OSET%,&5000) 780 IF BLOCKNO%=MAXBLOCKS%-2 AND MAXBLOCKS%>1 THEN OSCLI"FX108,0" 790 ENDPROC 800 DEFPROCMOVEBLOCK_UP(BLOCKNO%) 810 IF BLOCKNO%=MAXBLOCKS%-2 OR BLOCKNO%=MAXBLOCKS%-1 THEN ENDPROC 820 OSCLI"SRWRITE "+STR$~(data%)+"+5000 "+STR$~(BLOCKNO%*&5000) 830 ENDPROC 840 DEFPROCMOVEBLOCK_DOWN(BLOCKNO%) 850 IF BLOCKNO%=MAXBLOCKS%-2 OR BLOCKNO%=MAXBLOCKS%-1 THEN ENDPROC 860 OSCLI"SRREAD "+STR$~(data%)+"+5000 "+STR$~(BLOCKNO%*&5000) 870 ENDPROC 880 DEFPROCWRITEBLOCK(ST%,BLOCKNO%) 890 OSET%=0 900 IF BLOCKNO%=MAXBLOCKS%-2 AND MAXBLOCKS%>1 THEN OSCLI"FX 108,1":OSET%=&400 910 IF BLOCKNO%=MAXBLOCKS%-1 THEN OSCLI"FX 108,0" 920 IF FAST THEN PROCFASTSAVE ELSE PROCSLOWSAVE 930 IF BLOCKNO%=MAXBLOCKS%-2 AND MAXBLOCKS%>1 THEN OSCLI"FX 108,0" 940 BLOCKDONE%=BLOCKDONE%+1 950 PRINTTAB(0,10);SPC(30) 960 PRINTTAB(0,10);"";BLOCKDONE%*20;" Kbytes saved" 970 ENDPROC 980 DEFPROCOSW_72(DR%,CMD%,START_TRACK%,ADDRESS%,NO_OF_BYTES%):LOCALT%:RETRY%=FALSE 990 ?BLOCK%=0 1000 !(BLOCK%+1)=ADDRESS%:BLOCK%?9=0:BLOCK%?&A=0 1010 BLOCK%!&B=NO_OF_BYTES% 1020 BLOCK%?5=CMD% 1030 T%=START_TRACK% 1040 BLOCK%?8=T% MOD 256:T%=T% DIV 256 1050 BLOCK%?7=T% MOD 256 1060 BLOCK%?6=DR%*2^5+T% DIV 256 1070 A%=&72:X%=BLOCK% MOD 256:Y%=BLOCK% DIV 256:CALL&FFF1 1080 SUCCESS%=?BLOCK% 1090 IF SUCCESS%<>0 THEN HPOS%=POS:vpos%=VPOS:PRINT TAB(11,18);CHR$(129);"Error number ";SUCCESS%:PRINTTAB(HPOS%,vpos%); 1100 ENDPROC 1110 DEFPROCload_DISK(DR%,START_TRACK%,LORESS%,NO_OF_BYTES%) 1120 CMD%=&08 1130 PROCOSW_72(DR%,CMD%,START_TRACK%,LORESS%,NO_OF_BYTES%) 1140 ENDPROC 1150 DEFPROCsave_DISK(DR%,START_TRACK%,save_ADDRESS%,NO_OF_BYTES%) 1160 CMD%=&0A 1170 PROCOSW_72(DR%,CMD%,START_TRACK%,save_ADDRESS%,NO_OF_BYTES%) 1180 ENDPROC 1190 DEFPROCSPACE 1200 REPEAT UNTIL GET=32:CLS 1210 ENDPROC 1220 DEFFNCHECKFORMATTED(DRIVE%,T$) 1230 PROCMOUNT(DRIVE%) 1240 PROCload_DISK(DRIVE%,0,data%,&200) 1250 SIZE%=(data%?252+data%?253*256+ data%?254*256^3)/4 1260 IF T$="S" THEN SOURCE_SIZE%=SIZE% ELSE DEST_SIZE%=SIZE% 1270 =SUCCESS% 1280 DEFPROCRESTORE_RAMSTATUS 1290 FORI%=4TO7 1300 OSCLI"SRROM "+STR$(I%) 1310 NEXT 1320 ENDPROC 1330 DEFPROCMOUNT(DR%) 1340 OSCLI"MOUNT "+STR$(DR%) 1350 ENDPROC 1360 DEFPROCFASTSAVE 1370 PROCsave_DISK(DEST%,ST%,data%+OSET%,&5000) 1380 ENDPROC 1390 DEFPROCSLOWSAVE 1400 FOR E%=0 TO 4 1410 PROCsave_DISK(DEST%,ST%+E%*16,data%+OSET%+E%*&1000,&1000) 1420 NEXT 1430 ENDPROC 1440 IF ERL<>230 THEN REPORT:PRINT ERL:END 1450 RAM%?I%=FALSE 1460 GOTO 320