home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / eric.hdv / OBJTEST / MULTIPLAY.GOOD.bas < prev    next >
BASIC Source File  |  2020-08-13  |  8KB  |  209 lines

  1. 0  LOMEM: 28928: INPUT "NUMBER OF TRACKS TO PLAY (1-8):";UT: POKE 767,UT:NK = 1:PF$ = "MULTI.OBJ": GOTO 2
  2. 1  LOMEM: 28298:PF$ = "MULTI.OBJ": ONERR  GOTO 10000
  3. 2  HGR2 : HGR : TEXT : PRINT : PRINT  CHR$(4)"BLOAD  "PF$",A$6000": IF  PEEK(255) <4  OR  PEEK(255) >64  THEN  POKE 255,24
  4. 3  PRINT  CHR$(4)"BLOAD T0,A$2000,L4": IF  PEEK(8192) < >0  OR ( PEEK(8193) <9 *16  OR  PEEK(8193) >9 *16 +15)  OR  PEEK(8194) < >0  THEN 6: REM    SKIP IF SPEED NOT STORED   
  5. 4  POKE 216,0: IF  PEEK(8195) < >0  THEN  POKE 255, PEEK(8195): REM  SET SPEED    
  6. 5 UT =  PEEK(767): REM  IF WAS CALLED FROM ANOTHER PROGRAM WOULDN'T EXEC UTE LINE  0 SO OTHER PROGRAM COULD POKE #TRACKS IN 767   
  7. 6 MO = 129
  8. 7  IF MO = 2  OR MO = 130  THEN QS =  PEEK( USR(0) +14): IF QS = 255  THEN  PRINT "QUEUE IS FULL": GOTO 503
  9. 8  POKE 24576 +3,MO: GOSUB 3000
  10. 9 W1$ = "TEST":WF$ = "TEST"
  11. 10  VTAB 22: HTAB 1: PRINT "GET READY FOR: "; LEFT$(WF$,20);
  12. 15  PRINT  CHR$(4)"BLOAD /ERIC/OBJTEST/CNTLPANL.OBJ": POKE 6 *4096 +10 *256 +9,0
  13. 20 SR = 12 *4096 +10 *16 +8: POKE SR,19: POKE SR,17: REM   INIT ACIA  
  14. 30 BASE = 24576: REM   ADRS OF ML DRIVER
  15. 50 TK = BASE +7:FINE = BASE +6
  16. 60 ACTIVE = BASE +8
  17. 70 SL = BASE +16:SH = BASE +24
  18. 80 EL = BASE +32:EH = BASE +40
  19. 85 PL = BASE +256 +24:PH = BASE +256 +32
  20. 90 BOT = 8192
  21. 91  GOTO 600: REM    READ TRACK             LENGTHS & ALLOCATE MEMORY  
  22. 92  FOR XX = 0 TO UT -1
  23. 93  POKE PL +XX,AL(XX) - INT(AL(XX)/256) *256
  24. 94  POKE PH +XX, INT(AL(XX)/256)
  25. 95  NEXT XX
  26. 98  REM 
  27. 99  REM   SET UP FILENAMES BELOW  
  28. 100 F$(0) = "T0"
  29. 110 F$(1) = "T1"
  30. 120 F$(2) = "T2"
  31. 130 F$(3) = "T3"
  32. 140 F$(4) = "T4"
  33. 150 F$(5) = "T5"
  34. 160 F$(6) = "T6"
  35. 170 F$(7) = "T7"
  36. 180  REM 
  37. 190  REM  ACTIVATE TRACKS BELOW
  38. 200 A(0) = 0
  39. 210 A(1) = 0
  40. 220 A(2) = 0
  41. 230 A(3) = 0
  42. 240 A(4) = 0
  43. 250 A(5) = 0
  44. 260 A(6) = 0
  45. 270 A(7) = 0
  46. 275  REM  ACTIVATE TRACKS:
  47. 280  FOR UU = 0 TO UT -1:A(UU) = 1
  48. 285  NEXT UU
  49. 290  REM 
  50. 300  FOR I = 0 TO UT -1
  51. 305  REM  SET UP BASE ADDRESSES FOR BUFFERS IN ARRAYS B() BL() BH()
  52. 307  REM  SAME FOR E() EL() AND EH()
  53. 310  REM  IN OLD VERSION: B(I) = BOT + I * SIZE:E(I) = BOT + (I + 1) * SIZE - 8 
  54. 315 BH(I) =  INT(B(I)/256)
  55. 316 BL(I) = B(I) -BH(I) *256
  56. 317 EH(I) =  INT(E(I)/256)
  57. 318 EL(I) = E(I) -EH(I) *256
  58. 319  POKE 6 *4096 +96 +I,BL(I): POKE 6 *4096 +104 +I,BH(I)
  59. 320  NEXT I
  60. 400  FOR I = 0 TO 7
  61. 410  POKE ACTIVE +I,A(I)
  62. 420  POKE SL +I,BL(I)
  63. 430  POKE SH +I,BH(I)
  64. 440  POKE EL +I,EL(I)
  65. 450  POKE EH +I,EH(I)
  66. 460  IF A(I)  THEN  PRINT  CHR$(4)"BLOAD "F$(I)",A"B(I)",L"AL(I)",B0"
  67. 470  NEXT I
  68. 490  POKE 12 *16 +15,SP
  69. 491  VTAB 22: HTAB 1: CALL  -958
  70. 492  VTAB 22: HTAB 1: PRINT "NOW PLAYING: "; LEFT$(WF$,25): PRINT  CHR$(27);"SPACE: STOP  PC: 0-9  <CTRL-O>H<CTRL-N> SPEED <CTRL-O>U<CTRL-N>  <CTRL-O>K<CTRL-N> VOL <CTRL-O>J<CTRL-N> "; CHR$(24);
  71. 493  IF DP  THEN  GOSUB 2000: REM    4 BEEPS BEFORE PLAYING    
  72. 494  IF MO < >2  AND MO < >130  THEN 500
  73. 495 TX =  PEEK(255):TE = .4889 *(26 +27 *TX +5 *TX *TX):TH =  INT(TE/256):TL =  INT(TE) -TH *256
  74. 496  REM   USR(6) IS USED TO ADD TO QUEUE.  POKE BYTE TO ADD IN USR(0)+6
  75. 497 BS =  USR(0) +6: POKE BS,254:X =  USR(6): POKE BS,TH:X =  USR(6): POKE BS,TL:X =  USR(6)
  76. 500  CALL 24576: PRINT : PRINT : IF MO < >2  AND MO < >130  THEN 502
  77. 501 BS =  USR(0) +6: POKE BS,255:X =  USR(6): POKE BS,7:X =  USR(6): POKE BS,128:X =  USR(6): REM    DELAY 1920 DELTA TIME
  78. 502  PRINT : INPUT "PLAY AGAIN (Y/N):";NY$: IF  LEFT$(NY$,1) = "Y"  THEN 2
  79. 503  POKE 767,0: IF NK = 1  THEN  END 
  80. 504  IF MO = 130  OR MO = 2  THEN  PRINT "HEAD="; PEEK( USR(0) +15) + PEEK( USR(0) +16) *256"  TAIL=" PEEK( USR(0) +17) + PEEK( USR(0) +18) *256
  81. 505  PRINT  CHR$(4)"-KILLSONG"
  82. 599  END 
  83. 600  PRINT  CHR$(4)"PREFIX": INPUT PX$
  84. 601 TT = 0
  85. 605  PRINT  CHR$(4)"OPEN "PX$",            TDIR"
  86. 610  PRINT  CHR$(4)"READ "PX$
  87. 620  ONERR  GOTO 660
  88. 630  INPUT RE$:FE$ =  MID$ (RE$,2,15)
  89. 635 LG$ =  MID$ (RE$,66,6)
  90. 640  IF  LEFT$(FE$,1) = "T"  AND  MID$ (FE$,3,1) = " "  AND  MID$ (FE$,2,1) > = "0"  AND  MID$ (FE$,2,1) < = "9"  THEN SZ( VAL( MID$ (FE$,2,1))) =  VAL(LG$):TT = TT + VAL(LG$)
  91. 650  GOTO 630
  92. 660  PRINT  CHR$(4)"CLOSE"
  93. 661  POKE 216,0
  94. 665 B(0) = BOT
  95. 670  FOR XX = 0 TO UT -1
  96. 680 AL(XX) =  INT(SZ(XX)/TT *2048) *8
  97. 685 B(XX +1) = B(XX) +AL(XX)
  98. 687 E(XX) = B(XX +1) -8
  99. 690  NEXT XX
  100. 698  GOTO 92: REM  HAD PROBLEMS IMPLEMENTING AS SUBROUTINE, SO DID A DIRECT GOTO
  101. 2000  REM  4 BEEPS BEFORE PLAY
  102. 2010  FOR FU = 1 TO 4
  103. 2020  PRINT  CHR$(7);
  104. 2030  FOR FM = 1 TO 960: NEXT 
  105. 2040  NEXT 
  106. 2050  RETURN 
  107. 3000 SP =  PEEK(255): PRINT "SPEED IS CURRENTLY "SP
  108. 3001  PRINT : PRINT "   HIT RETURN TO USE DEFAULT"
  109. 3002  PRINT "   TYPE NUMBER > 255 FOR OPTIONS"
  110. 3003  PRINT "   NEGATIVE # TO EXIT PROGRAM": PRINT 
  111. 3004  INPUT "SPEED:";SP$: IF  VAL(SP$) = 0  THEN  RETURN 
  112. 3005 SP =  VAL(SP$)
  113. 3010  IF SP <0  THEN 503: REM                EXIT   
  114. 3020  IF SP <256  THEN  RETURN 
  115. 3030  PRINT 
  116. 3032  PRINT "M  <0-1>   = MULTI TIMBRE MODE (ON/OFF)"
  117. 3035  PRINT "R  <0-4>   = REVERB"
  118. 3050  PRINT "E  <0-4>   = EFFECT"
  119. 3060  PRINT "C  <CHNL>  = SET CHNL FOR PROG & BRILL"
  120. 3070  PRINT "B  <0-2>   = BRILLIANCE"
  121. 3080  PRINT "P  <PGM#>  = PROGRAM CHANGE"
  122. 3090  PRINT "D  <0,1>   = BEEPS BEFORE PLAYING (Y/N)"
  123. 3095  PRINT "V  <0-127> = SET VOLUME OF MULTI-TIM TRK"
  124. 3097  PRINT "T <-128..127> = SET TRANSPOSE INTERVAL"
  125. 3100  PRINT : PRINT "ANY OTHER LETTER EXITS THIS MENU"
  126. 3110  PRINT 
  127. 3115 MA =  USR(0) +25
  128. 3120  INPUT "SELECT:";SX$
  129. 3125 SX =  VAL( MID$ (SX$,2))
  130. 3130 SX$ =  LEFT$(SX$,1)
  131. 3140  IF SX$ = "C"  THEN 4000
  132. 3150  IF SX$ = "D"  THEN 4100
  133. 3160  IF SX$ = "P"  THEN 4200
  134. 3165  IF SX$ = "M"  THEN 4300
  135. 3170  IF SX$ = "B"  THEN 4400
  136. 3180  IF SX$ = "R"  THEN 4500
  137. 3185  IF SX$ = "T"  THEN 5100
  138. 3190  IF SX$ = "E"  THEN 4600
  139. 3191  IF SX$ = "V"  THEN 5000
  140. 3192  PRINT 
  141. 3195  GOTO 3000
  142. 4000  REM  'C'
  143. 4010  IF SX <0  OR SX >15  THEN 4700
  144. 4020 CB = SX
  145. 4095  GOTO 4800
  146. 4100  REM   'D'
  147. 4110  IF SX <0  OR SX >1  THEN 4700
  148. 4120 DP = SX
  149. 4195  GOTO 4800
  150. 4200  REM  'P'
  151. 4210  IF SX <0  OR SX >127  THEN 4700
  152. 4220  POKE MA,12 *16 +CB:UU =  USR(15): POKE MA,SX:UU =  USR(15)
  153. 4230  REM POKEMA,9 * 16 + CB:UU =  USR (15): POKE MA,60:UU =  USR (15): POKE           MA,64:UU =  USR (15)  
  154. 4240  REM FORFU = 1 TO 100: NEXT 
  155. 4250  REM POKEMA,9 * 16 + CB:UU =  USR (15): POKE MA,60:UU =  USR (15): POKE           MA,0:UU =  USR (15)  
  156. 4295  GOTO 4800
  157. 4300  REM  'M'
  158. 4310  IF SX <0  OR SX >1  THEN 4700
  159. 4320  POKE MA,15 *16:UU =  USR(15)
  160. 4322  POKE MA,4 *16 +3:UU =  USR(15)
  161. 4324  POKE MA,7 *16 +3:UU =  USR(15)
  162. 4330  POKE MA,1:UU =  USR(15)
  163. 4340  POKE MA,16 +3 +SX *2:UU =  USR(15)
  164. 4350  POKE MA,15 *16 +7:UU =  USR(15)
  165. 4395  GOTO 4800
  166. 4400  REM  'B'
  167. 4410  IF SX <0  OR SX >2  THEN 4700
  168. 4420 CM = 5 *16 +8: GOSUB 4900
  169. 4495  GOTO 4800
  170. 4500  REM  'R'
  171. 4510  IF SX <0  OR SX >4  THEN 4700
  172. 4520 CM = 5 *16 +9: GOSUB 4900
  173. 4595  GOTO 4800
  174. 4600  REM  'E'
  175. 4610  IF SX <0  OR SX >4  THEN 4700
  176. 4620 CM = 5 *16 +10: GOSUB 4900
  177. 4695  GOTO 4800
  178. 4700  REM  INVALID PARMS COME HERE
  179. 4710  PRINT "INVALID PARAMETER"
  180. 4795  GOTO 4810
  181. 4800  PRINT "OK"
  182. 4810  GOTO 3120: REM   BACK TO SELECT PROMPT  
  183. 4900  POKE MA,15 *16:UU =  USR(15)
  184. 4902  POKE MA,4 *16 +3:UU =  USR(15)
  185. 4904  POKE MA,7 *16 +3:UU =  USR(15)
  186. 4910  POKE MA,16 +10:UU =  USR(15)
  187. 4912  POKE MA,16 +1:UU =  USR(15)
  188. 4920  IF SX$ = "B"  THEN  POKE MA,CB:UU =  USR(15)
  189. 4925  IF SX$ < >"B"  THEN  POKE MA,0:UU =  USR(15)
  190. 4930  POKE MA,CM:UU =  USR(15)
  191. 4940  POKE MA,SX:UU =  USR(15)
  192. 4950  POKE MA,15 *16 +7:UU =  USR(15)
  193. 4960  RETURN 
  194. 5000  IF SX <0  OR SX >127  THEN 4700
  195. 5010  POKE MA,11 *16 +CB:UU =  USR(15)
  196. 5012  POKE MA,7:UU =  USR(15)
  197. 5014  POKE MA,SX:UU =  USR(15)
  198. 5016  REM  POKES DEFAULT VOL FOR M.L. ROUTINE
  199. 5020  GOTO 4800
  200. 5100  REM  'T'
  201. 5110  IF SX < -128  OR SX >127  THEN 4700
  202. 5115  IF SX <0  THEN SX = SX +256
  203. 5120  POKE 6 *4096 +10 *256 +4 *16 +13,SX: REM  TRANSPOS REGISTER
  204. 5130  GOTO 4800
  205. 10000  POKE 216,0
  206. 10005  REM  IF FILE TYPE MISMATCH, RUN MIDI.INFO
  207. 10006  PRINT  CHR$(4)"UNLOCK T0"
  208. 10007  PRINT  CHR$(4)"DELETE T0"
  209. 10010  IF  PEEK(222) = 13  THEN  PRINT  CHR$(4)"RUN /RAMAEPC/MIDI.INFO,@2"