home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / eric.hdv / BSMW / FILE.READER.bas < prev    next >
BASIC Source File  |  2020-08-13  |  5KB  |  106 lines

  1. 1  INPUT "BSMW FILE TO CONVERT:";FB$: PRINT  CHR$(4)"VERIFY "FB$
  2. 2 NO$ = "CBAGFEDCBAGFEDCBAGFEDCBAGFEDC"
  3. 3  DIM SQ(6),BS(6):: FOR I = 1 TO 6:BS(I) = 24576 +256 *(I -1):SQ(I) = BS(I): NEXT 
  4. 4  FOR I = 1 TO 6: POKE SQ(I),0: POKE SQ(I) +1,143 +I: POKE SQ(I) +2,0: POKE SQ(I) +3,0: POKE SQ(I) +4,128: POKE SQ(I) +5,0:SQ(I) = SQ(I) +6: NEXT 
  5. 5  DIM L(30),K(30),A(30): REM  TABLES TO TRANSLATE LINE NUMBERS TO MIDI NOTE NUMBERS
  6. 6  FOR L = 1 TO 29: READ L(L):K(L) = L(L):A(L) = L(L): NEXT 
  7. 7  FOR S = 1 TO 7: READ S(S): NEXT 
  8. 8  FOR F = 1 TO 7: READ F(F): NEXT 
  9. 9  DIM PT(6),PN(6),TT(6)
  10. 10 BUF = 16384
  11. 20 PU = 0
  12. 50  PRINT  CHR$(4)"BLOAD "FB$",A"BUF",B"PU
  13. 60  IF  PEEK(BUF +254) = 0  AND  PEEK(BUF +255) = 0  THEN DJ = 1
  14. 100  FOR I = 0 TO 18
  15. 150  PRINT "POSN "I
  16. 200  FOR P = 1 TO 6
  17. 250  PRINT P":";
  18. 300 STS =  PEEK(BUF +(P -1) *38 +I)
  19. 400 DTA =  PEEK(BUF +(P -1) *38 +I +19)
  20. 450  IF STS = 0  AND DTA = 0  THEN 700
  21. 500  IF STS = 0  OR DTA = 160  THEN  GOSUB 10000: GOTO 700
  22. 505  IF STS = 9  THEN  PRINT "PIANO";: GOTO 550
  23. 506  IF STS = 11  THEN  PRINT "FORTE";: GOTO 550
  24. 510 NUM = STS: GOSUB 1000: REM CONVERT NUMBER TO BIT ARRAY 
  25. 514 DS = STS - INT(STS/8) *8
  26. 515 DU = 7.5 *2 ^DS
  27. 520  IF BIT(7)  THEN  PRINT "TRIPLET ";:DU = DU *2/3
  28. 521 TY = 0: IF BIT(6)  THEN  PRINT "TIED ";:TY = 1
  29. 522  IF BIT(5)  THEN  PRINT "DOTTED ";:DU = DU *3/2
  30. 523  PRINT  MID$ ("????????32ND16TH8TH QTR HALFWHOL",(STS - INT(STS/8) *8) *4 +1,4);
  31. 524  PRINT " DUR="DU"  ";:TT(P) = TT(P) +DU
  32. 525 L = DTA - INT(DTA/32) *32
  33. 526  IF BIT(4)  THEN  PRINT "NOTE ";:RE = 0
  34. 527  IF   NOT BIT(4)  THEN  PRINT "REST ";:RE = 1
  35. 528  IF BIT(3)  THEN  PRINT "STEM UP ";
  36. 529  IF   NOT BIT(3)  THEN  PRINT "STEM DOWN ";
  37. 530 NUM = DTA: GOSUB 1000
  38. 531 OU = 0: IF BIT(7)  THEN  PRINT "OCTAVE UP ";:OU = 1
  39. 532  IF   NOT BIT(6)  AND BIT(5)  THEN  PRINT "NATURAL ";:A(L) = L(L)
  40. 533  IF BIT(6)  AND   NOT BIT(5)  THEN  PRINT "FLAT ";:A(L) = L(L) -1
  41. 534  IF BIT(6)  AND BIT(5)  THEN  PRINT "SHARP ";:A(L) = L(L) +1
  42. 535 MN =   NOT (RE) *(A(L) +12 *OU)
  43. 540  PRINT "LINE #"L;" MIDI NOTE:"MN"  ";
  44. 545  PRINT " "; MID$ (NO$,L,1);
  45. 550  REM 
  46. 600  IF PT(P)  AND PN(P) = MN  THEN  POKE SQ(P),0: POKE SQ(P) +1,0: POKE SQ(P) +2, INT(DU/128) +128: POKE SQ(P) +3,DU - INT(DU/128) *128:SQ(P) = SQ(P) +4: GOTO 670
  47. 610  POKE SQ(P),PN(P): POKE SQ(P) +1,0
  48. 620  POKE SQ(P) +2,128: POKE SQ(P) +3,0
  49. 630  POKE SQ(P) +4,MN: POKE SQ(P) +5,64
  50. 640  POKE SQ(P) +6, INT(DU/128) +128: POKE SQ(P) +7,DU - INT(DU/128) *128
  51. 650 SQ(P) = SQ(P) +8
  52. 660 PN(P) = MN
  53. 670 PT(P) = 0: IF TY  THEN PT(P) = 1
  54. 700  PRINT : NEXT : PRINT : NEXT 
  55. 710  GOSUB 10100: GOSUB 10050
  56. 750  IF DJ = 1  THEN  FOR Q = 1 TO 6: POKE SQ(Q),PN(Q): POKE SQ(Q) +1,0: POKE SQ(Q) +2,0: POKE SQ(Q) +3,255: POKE SQ(Q) +4,47: POKE SQ(Q) +5,0:SQ(Q) = SQ(Q) +6: NEXT 
  57. 800  FOR Q = 1 TO 6: PRINT  CHR$(4)"BSAVE /RAMAEPC/";FB$;".";Q -1",A"BS(Q)",E"SQ(Q) -1",B"BY(Q)
  58. 810  NEXT Q
  59. 850  FOR Q = 1 TO 6:BY(Q) = BY(Q) +SQ(Q) -BS(Q): NEXT 
  60. 860  FOR Q = 1 TO 6:SQ(Q) = BS(Q): NEXT 
  61. 870  IF DJ < >1  THEN PU = PU +256: GOTO 50
  62. 999  END 
  63. 1000  FOR YY = 0 TO 7:BIT(YY) = 0: NEXT 
  64. 1100  IF NUM > = 128  THEN BIT(7) = 1:NUM = NUM -128
  65. 1110  IF NUM > = 64  THEN BIT(6) = 1:NUM = NUM -64
  66. 1120  IF NUM > = 32  THEN BIT(5) = 1:NUM = NUM -32
  67. 1130  IF NUM > = 16  THEN BIT(4) = 1:NUM = NUM -16
  68. 1140  IF NUM > = 8  THEN BIT(3) = 1:NUM = NUM -8
  69. 1150  IF NUM > = 4  THEN BIT(2) = 1:NUM = NUM -4
  70. 1160  IF NUM > = 2  THEN BIT(1) = 1:NUM = NUM -2
  71. 1170  IF NUM > = 1  THEN BIT(0) = 1:NUM = NUM -1
  72. 1180  RETURN 
  73. 10000  IF DTA = 0  THEN  PRINT "-";
  74. 10005  IF DTA < >160  THEN 10020
  75. 10007 CT = STS - INT(STS/8) *8
  76. 10008  FOR Q = 1 TO 30:K(Q) = L(Q): NEXT 
  77. 10010  IF DTA = 160  THEN  PRINT "KEY CHANGE: ";:NUM = STS: GOSUB 1000: PRINT STS - INT(STS/8) *8;" ";: PRINT  MID$ ("SHFL",BIT(3) *2 +1,2);
  78. 10012  IF BIT(3) = 0  THEN  FOR Q0 = CT TO 1  STEP  -1: FOR Q = S(Q0) TO 30  STEP 7:K(Q) = L(Q) +1: NEXT : NEXT 
  79. 10014  IF BIT(3) = 1  THEN  FOR Q0 = CT TO 1  STEP  -1: FOR Q = F(Q0) TO 30  STEP 7:K(Q) = L(Q) -1: NEXT : NEXT 
  80. 10020  IF DTA = 128  THEN  PRINT "BAR ";
  81. 10025  FOR Q = 1 TO 30:A(Q) = K(Q): NEXT 
  82. 10030  IF DTA = 192  THEN  PRINT "LRPT ";
  83. 10035  IF DTA = 224  THEN  PRINT "RRPT ";
  84. 10040  IF DTA = 136  THEN  PRINT "1ST END ";
  85. 10045  IF DTA = 232  THEN  PRINT "2ND END ";
  86. 10049  RETURN 
  87. 10050  FOR Q = 1 TO 6: IF DF(Q) = 0  THEN 10090
  88. 10060 DW = ( PEEK(SQ(Q) -2) -128) *128 + PEEK(SQ(Q) -1)
  89. 10070 DW = DF(Q)
  90. 10080  POKE SQ(Q),0: POKE SQ(Q) +1,0:SQ(Q) = SQ(Q) +2
  91. 10085  POKE SQ(Q), INT(DW/128) +128: POKE SQ(Q) +1,DW - INT(DW/128) *128:SQ(Q) = SQ(Q) +2
  92. 10090  NEXT Q
  93. 10099  RETURN 
  94. 10100 MX = 0: FOR Q = 1 TO 6: IF TT(Q) >MX  THEN MX = TT(Q)
  95. 10110  NEXT Q
  96. 10120  FOR Q = 1 TO 6: IF TT(Q) <MX  THEN DF(Q) = MX -TT(Q)
  97. 10125 TT(Q) = 0
  98. 10130  NEXT Q
  99. 10140  RETURN 
  100. 20000  DATA  84,83,81,79,77,76,74
  101. 20010  DATA  72,71,69,67,65,64,62
  102. 20020  DATA   60,59,57,55,53,52,50   
  103. 20030  DATA  48,47,45,43,41,40,38
  104. 20040  DATA  36
  105. 20050  DATA  5,1,4,7,3,6,2
  106. 20055  DATA  2,6,3,7,4,1,5