5 REM bbcget - download disc image from bbcserv 6 REM Adam Sampson 10 MODE 7 20 INPUT "Filename";F$ 30 IF INSTR(F$,".ds")=0 THEN SIDES%=1 ELSE SIDES%=2 40 TRACKS%=80 50 PRINT "";SIDES%;" sides, ";TRACKS%;" tracks" 60 INPUT "Drive (0-3)";DRIVE% 70 DIM IB% 15 80 DIM BUF% 2560 90 DIM RBUF% 2560 100 *FX7,6 110 *FX8,6 120 *FX21,1 130 *FX21,2 140 PRINT "Syncing link" 150 PROCSEND("****?") 160 *FX2,1 170 REPEAT 180 I%=INKEY(200) 190 UNTIL I%=-1 200 *FX2,0 210 PRINT "Requesting "+F$ 220 PROCSEND("*N"+F$) 230 S$=FNREADLN 240 IF S$<>"y" STOP 250 NOMORE%=0 260 START%=0 270 FOR TRACK%=0 TO TRACKS%-1 280 FOR SIDE%=0 TO SIDES%-1 290 UDRIVE%=DRIVE%+(SIDE%*2) 300 PRINT "*** Drive ";UDRIVE%;" track ";TRACK% 310 W%=BUF% 320 SEC%=256 330 FOR I%=0 TO 9 340 PROCGET 350 W%=W%+SEC% 360 START%=START%+SEC% 370 NEXT 380 REPEAT 390 ?IB%=UDRIVE% 400 IB%!1=BUF% 410 IB%?5=3 420 IB%?6=&4B 430 IB%?7=TRACK% 440 IB%?8=0 450 IB%?9=&2A 460 OK%=1 470 PROCSEC 480 IB%!1=RBUF% 490 IB%?6=&53 500 PROCSEC 510 FOR I%=0 TO 2559 520 IF BUF%?I% <> RBUF%?I% THEN OK%=0 530 NEXT 540 UNTIL OK%=1 550 NEXT 560 NEXT 570 END 580 DEF PROCSEC 590 LOCAL A%,X%,Y% 600 PRINT "Doing disk IO ";~IB%?6 610 A%=&7F 620 X%=IB% AND &FF 630 Y%=IB% DIV &100 640 CALL &FFF1 650 A%=IB%?10 660 IF A%<>0 THEN PRINT "Disk error ";~A%:OK%=0 670 ENDPROC 680 DEF PROCGET 690 LOCAL S$,OC%,P%,CS%,B%,DONE% 700 REPEAT 710 PRINT "Get ";START%;"-";START%+SEC%;" "; 720 PROCSEND("*r"+STR$(START%)+","+STR$(SEC%)) 730 S$=FNREADLN 740 IF LEFT$(S$,1)<>"y" THEN NOMORE%=1:PRINT "EOF":GOTO 890 750 OC%=VAL(MID$(S$,2)) 760 *FX2,1 770 P%=0 780 CS%=0 790 REPEAT 800 B%=INKEY(200) 810 CS%=CS%+B% 820 IF B%=-1 THEN P%=SEC% ELSE W%?P%=B% 830 P%=P%+1 840 UNTIL P%>=SEC% 850 *FX2,0 860 CS%=CS%AND&FFFF 870 PRINT "";~P%;" cs ";~CS%;" orig ";~OC% 880 UNTIL OC%=CS% AND P%=SEC% 890 ENDPROC 900 DEF PROCSEND(A$) 910 *FX3,3 920 PRINT A$ 930 *FX3,0 940 ENDPROC 950 DEF FNREADLN 960 LOCAL S$,C%,DONE% 970 *FX2,1 980 S$="" 990 DONE%=0 1000 REPEAT 1010 C%=INKEY(200) 1020 IF C%=10 OR C%=13 OR C%=-1 THEN DONE%=1 ELSE S$=S$+CHR$(C%) 1030 UNTIL DONE%=1 1040 *FX2,0 1050 =S$