home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib33b.dsk / FLOPPY.COPY.bas < prev    next >
BASIC Source File  |  2023-02-26  |  6KB  |  56 lines

  1. 10  REM ************************
  2. 20  REM *     FLOPPY.COPY      *
  3. 30  REM * BY MICHAEL GRUENTHAL *
  4. 40  REM *  COPYRIGHT (C) 1988  *
  5. 50  REM *  BY MICROSPARC, INC  *
  6. 60  REM *  CONCORD, MA. 01742  *
  7. 70  REM ************************
  8. 80  PRINT  CHR$(21): HIMEM: 38912:S = 6:SC = 6:D = 1:DC = 2: ONERR  GOTO 400
  9. 90  HOME : HTAB 14: PRINT "FLOPPY COPY": HTAB 10: PRINT "BY MICHAEL GRUENTHAL": HTAB 11: PRINT "COPYRIGHT (C) 1988": HTAB 11: PRINT "BY MICROSPARC, INC.": HTAB 11: PRINT "CONCORD, MA 01742"
  10. 100  POKE 34,5: PRINT  CHR$(4)"BLOADFLOPPY.OBJ": FOR I = 47012 TO 47016: READ DA: POKE I,DA: NEXT : POKE 48649,19: POKE 48650,3: POKE 1010,19: POKE 1011,3: POKE 1012,166: DATA 206,236,183,48,11,234,234,206,236,183
  11. 110 H = 49384:RP = 46995:SL = 47081:DR = SL +1:VE = DR +1:TR = VE +1:SE = TR +1:BL = SE +3:BH = BL +1:CC = BH +3:VF = CC +2:E = SL -8:C$ = "=>PRESS ESCAPE TO QUIT<=":B$ =  CHR$(27)
  12. 120 A$ = "C081 N C081 N F800<F800.FFFFM D000:88 N D7D2G": FOR I = 1 TO  LEN(A$): POKE 511 +I, ASC( MID$ (A$,I,1)) +128: NEXT : POKE 72,0: CALL  -144
  13. 130  POKE 860,95: POKE 866,100: POKE 6,0: CALL 905:AU =  PEEK(6) = 128:LC = (AU  OR  PEEK(6) = 64): VTAB 1: HTAB 35: PRINT  PEEK(6);"K":X = 4 -LC:Y = 7 +LC: IF AU  THEN  POKE 48715,96: POKE 860,23: POKE 866,151
  14. 140 B = 7:C = S: HOME : PRINT : PRINT "SLOT # OF ORIGINAL DISK (1-7)?"; SPC( 4);S:CH = 35:CV = 7: GOSUB 540:S = C:B = 2:C = D: PRINT "DRIVE # OF ORIGINAL DISK (1-2)?"; SPC( 3);D:CV = 8: GOSUB 540:D = C
  15. 150  PRINT "SLOT # OF COPY(1-7)?"; SPC( 14);SC:B = 7:C = SC:CV = 9: GOSUB 540:SC = C: PRINT "DRIVE # OF COPY(1-2)?" SPC( 13);DC:B = 2:C = DC:CV = 10: GOSUB 540:DC = C:SD = D = DC  AND S = SC
  16. 160 TS = 34: PRINT : PRINT "FORMAT COPY DISK (Y/N)?Y": PRINT "=>IF UNSURE, PRESS <RETURN><=": PRINT C$: VTAB 12: HTAB 24: GET A$:F = (A$ =  CHR$(78)  OR A$ =  CHR$(110)): GOSUB 360
  17. 170  HOME : IF SD  THEN  VTAB 10: PRINT "INSERT ORIGINAL IN SLOT ";S;", DRIVE ";D; SPC( 6);"THEN PRESS RETURN": GOSUB 530
  18. 180  IF   NOT SD  THEN  HOME : VTAB 10: PRINT "INSERT ORIGINAL IN SLOT ";S;", DRIVE ";D; SPC( 6);"INSERT COPY IN SLOT ";SC;", DRIVE ";DC; SPC( 10);"THEN PRESS RETURN": GOSUB 530
  19. 190  IF WP  AND   NOT SD  AND RW = 2  THEN 230
  20. 200 RW = 1: GOSUB 470: ON WP GOTO 170: POKE TR,0: POKE SE,0: POKE VF,0: POKE VE,0: POKE CC,1: POKE DR,D: POKE SL,S *16: CALL 768:V =  PEEK(VF): POKE BL,0: POKE BH,150: GOSUB 350
  21. 210  IF AU  THEN  POKE 869,56: CALL 851:TS = 26: GOSUB 300: GOSUB 350: POKE H,0
  22. 220  IF SD  THEN  HOME : PRINT : PRINT  CHR$(7);"INSERT COPY AND PRESS RETURN": GOSUB 530
  23. 230 RW = 2: GOSUB 470: IF WP  THEN  ON SD +1 GOTO 180,220
  24. 240  POKE VE,V: POKE VF,V: POKE CC,4: POKE DR,DC: POKE SL,SC *16: IF   NOT F  THEN  CALL 768
  25. 250  IF AU  THEN TS = 26: POKE VE,0: GOSUB 300: GOSUB 350: POKE 869,24: CALL 851:TS = 34
  26. 260  POKE VE,0: POKE BH,150: POKE BL,0: POKE DR,DC: POKE SL,SC *16: GOSUB 350
  27. 270  IF AU  THEN TS = 17: POKE H,0: GOTO 410
  28. 280 TS = 27 -LC: FOR I = 1 TO X:RW = 1: POKE DR,D: POKE SL,S *16
  29. 290  IF SD  THEN  HOME : PRINT : PRINT  CHR$(7);"INSERT ORIGINAL AND PRESS RETURN": GOSUB 530: GOSUB 470: IF WP  THEN 290
  30. 300  POKE SE,15: POKE BH,150: POKE BL,0: IF LC  THEN  POKE BH,224: POKE CC,RW: POKE TR,TS:TS = TS -1: POKE E,16: CALL 774: POKE BH,150: POKE BL,0
  31. 310  ON AU GOTO 390: GOSUB 350:RW = 2
  32. 320  POKE DR,DC: POKE SL,SC *16: IF SD  THEN  HOME : PRINT : PRINT  CHR$(7);"INSERT COPY AND PRESS RETURN": GOSUB 530: GOSUB 470
  33. 330  ON WP GOTO 320: IF LC  THEN  POKE CC,RW: POKE SE,15: POKE BH,224: POKE BL,0: POKE TR,TS +1: POKE E,16: CALL 774: POKE BH,150: POKE BL,0
  34. 340  GOSUB 350:TS = TS -Y: NEXT : POKE H,0: POKE DR,1: GOSUB 550: GOTO 160
  35. 350  POKE SE,15: POKE CC,RW: POKE TR,TS: FOR Q = 1 TO Y: POKE E,16: CALL RP: NEXT : POKE BL,0: POKE BH,150: RETURN 
  36. 360  IF A$ < >B$  THEN  RETURN 
  37. 370  POP : POKE H,0: POKE DR,1: HOME : PRINT : PRINT "WOULD YOU LIKE TO TRY AGAIN (Y/N)?Y": VTAB 7: HTAB 35: GET A$: POKE 35,24: HOME : IF A$ < > CHR$(78)  AND A$ < > CHR$(110)  THEN 110
  38. 380  FOR I = 47012 TO 47016: READ DA: POKE I,DA: NEXT : POKE 34,0: HOME : POKE 48715,145: POKE 216,0: POKE 48649,72: POKE 48650,190: POKE 1010,191: POKE 1011,157: POKE 1012,56: HIMEM: 38400: CALL 976: END 
  39. 390  RETURN 
  40. 400  POKE 34,5: CALL 54915: HTAB 1: VTAB 20: POKE 35,19: INVERSE : PRINT "OOPS. A FATAL ERROR ON TRACK "; PEEK(TR): NORMAL : FOR I = 1 TO 5: PRINT  CHR$(7): NEXT : GOSUB 370
  41. 410 RW = 1: POKE DR,D: POKE SL,S *16: IF SD  THEN  HOME : PRINT : PRINT  CHR$(7);"INSERT ORIGINAL AND PRESS RETURN": GOSUB 530
  42. 420  GOSUB 470: ON WP GOTO 410: FOR I = 1 TO 2: GOSUB 300: GOSUB 350: IF I = 1  THEN  POKE 869,56: CALL 821:TS = 8
  43. 430  NEXT :RW = 2: POKE H,0
  44. 440  POKE DR,DC: POKE SL,SC *16: IF SD  THEN  HOME : PRINT : PRINT  CHR$(7);"INSERT COPY AND PRESS RETURN": GOSUB 530
  45. 450  GOSUB 470: ON WP GOTO 440:TS = 8: FOR I = 1 TO 2: GOSUB 300: GOSUB 350: IF I = 1  THEN  POKE 869,24: CALL 874:TS = 17
  46. 460  NEXT : POKE H,0: POKE DR,1: GOSUB 550: GOTO 160
  47. 470  IF   NOT SD  AND ((  NOT AU  AND TS < >34)  OR (AU  AND TS < >34  AND TS < >25))  THEN  RETURN 
  48. 480 WP = 0: POKE TR,0: POKE SE,0: POKE VE,0: POKE CC,0: POKE DR,D: POKE SL,S *16: POKE 820,S *16: IF RW = 2  THEN  POKE DR,DC: POKE SL,SC *16: POKE 820,SC *16
  49. 490  CALL 793: IF RW = 1  AND  PEEK(819) = 136  THEN WP = 1: POKE 35,19: VTAB 20: INVERSE : PRINT "WRITE-PROTECT ORIGINAL DISK": NORMAL : FOR B = 1 TO 5: PRINT  CHR$(7): NEXT 
  50. 500  IF RW = 2  AND  PEEK(819) < >136  THEN WP = 1: POKE 35,19: VTAB 20: INVERSE : PRINT "REMOVE WRITE-PROTECT TAB FROM COPY": NORMAL : FOR B = 1 TO 5: PRINT  CHR$(7): NEXT 
  51. 510  IF WP  THEN  POKE H,0
  52. 520  RETURN 
  53. 530  PRINT C$: GET A$: POKE 35,24: VTAB 19: CALL  -958: GOSUB 360: RETURN 
  54. 540  HTAB CH: VTAB CV: GET A$:A = ( VAL(A$) <1  OR  VAL(A$) >B):C = (C *A) +( VAL(A$) *(A = 0)): HTAB CH: VTAB CV: PRINT C: RETURN 
  55. 550  HOME : PRINT : PRINT "PRESS RETURN TO MAKE ANOTHER COPY": PRINT C$: GET A$: IF A$ = B$  THEN  POP : POKE DR,1: GOTO 380
  56. 560  RETURN