home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / hard.hdv / HARD / MIDIOLD / TRACKPLAY (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1995-08-04  |  3.4 KB  |  136 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 0  REM   *** TRACKPLAY *** 
  2. 1  POKE 12 *16 +15,8: REM  DEFAULT SPEED
  3. 2  PRINT  CHR$(21): POKE 12 *4096 +10 *16 +8,19: POKE 12 *4096 +10 *16 +8,17
  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 5: REM     SKIP IF SPEED NOT STORED   
  5. 4  POKE 216,0: IF  PEEK(8195) < >0  THEN  POKE 12 *16 +15, ABS( PEEK(8195) -16): POKE 8195,0
  6. 5  LOMEM: 29696
  7. 6  REM  HIMEM:24576
  8. 7 MSG =  PEEK(11) + PEEK(12) *256 +4
  9. 9  PRINT  CHR$(4)"OPEN R": PRINT  CHR$(4)"READ R": INPUT W1$: INPUT WF$: PRINT  CHR$(4)"CLOSE"
  10. 10  TEXT : HOME : PRINT  CHR$(21)
  11. 20  PRINT  CHR$(4)"BRUN AUXLOAD.OBJ"
  12. 30  PRINT  CHR$(4)"BRUN TRACKMGR.OBJ"
  13. 40  PRINT  CHR$(4)"BLOAD TRACKPLY.OBJ"
  14. 50  PRINT  CHR$(4)"BLOAD CNTLPANL.OBJ"
  15. 55  PRINT  CHR$(4)"BLOAD T0,A$2000,L4":SP =  PEEK(8192 +3)
  16. 57 TM = .4889 *(26 +27 *SP +5 *SP *SP)
  17. 60  REM  GOTO100:REM TO USE INTERRUPTS, SKIP STATEMENTS THAT USE SPEED
  18. 70  POKE 6 *4096 +11 *256 +3,1: POKE 6 *4096 +12 *256 +9,1
  19. 100  PRINT  CHR$(4)"PREFIX": INPUT PX$
  20. 101 TT = 0
  21. 102  DIM SZ(15),LK(15),NS(15)
  22. 103  FOR IX = 0 TO 15:SZ(IX) = 0:LK(IX) = 0
  23. 104  PRINT "LOADING TRACKS INTO MEMORY..."
  24. 105  PRINT  CHR$(4)"OPEN "PX$",TDIR"
  25. 110  PRINT  CHR$(4)"READ "PX$
  26. 120  ONERR  GOTO 160
  27. 130  INPUT RE$:FE$ =  MID$ (RE$,2,15)
  28. 135 LG$ =  MID$ (RE$,66,6)
  29. 137 LK$ =  MID$ (RE$,1,1)
  30. 140  IF  LEFT$(FE$,1) = "T"  AND  MID$ (FE$,3,1) = " "  THEN 142
  31. 141  GOTO 130
  32. 142  IF  MID$ (FE$,2,1) <"0"  OR  MID$ (FE$,2,1) >"F"  OR ( MID$ (FE$,2,1) >"9"  AND  MID$ (FE$,2,1) <"A")  THEN 130
  33. 143  IF  MID$ (FE$,2,1) < = "9"  THEN IX =  VAL( MID$ (FE$,2,1))
  34. 144  IF  MID$ (FE$,2,1) > = "A"  THEN IX =  ASC( MID$ (FE$,2,1)) - ASC("A") +10
  35. 145 SZ(IX) =  VAL(LG$):TT = TT +SZ(IX)
  36. 147 LK(IX) = (LK$ = "*")
  37. 150  GOTO 130
  38. 160  PRINT  CHR$(4)"CLOSE"
  39. 200  REM <CTRL-0x0a><CTRL-0x0a>*** LOAD SEQUENCE ***<CTRL-0x0a>
  40. 205 MX = 12 *4096 -8 *256: REM             MAXIMUM AUX MEMORY  
  41. 210  IF TT >MX  THEN 300
  42. 220 B = 2048: REM  BASE
  43. 230  FOR TK = 0 TO 15
  44. 240  IF SZ(TK) = 0  THEN 290
  45. 250 E = B +SZ(TK) -1
  46. 260  GOSUB 1000
  47. 270 B = E +1
  48. 290  NEXT TK
  49. 295  GOTO 400
  50. 300  REM     SEQ TOO BIG TO LOAD ALL AT ONCE - USE PROPORTIONAL ALLOCATION
  51. 310 B = 2048: REM      BASE    
  52. 320  GOSUB 600: REM    CUT BIG TRKS IN HALF UNTIL THEY ALL FIT  
  53. 330  FOR TK = 0 TO 15
  54. 340  IF NS(TK) = 0  THEN 390
  55. 350 E = B +NS(TK) -1
  56. 360  GOSUB 1000
  57. 370 B = E +1
  58. 390  NEXT TK
  59. 400  REM  *** PLAY THE SONG ***
  60. 401  PRINT  CHR$(4)"BLOAD CNTLPANL.OBJ": POKE 6 *4096 +12 *256 +9,1
  61. 402  PRINT  CHR$(21)
  62. 403  HOME : PRINT "        MIDI FILE SEQUENCE PLAYER"
  63. 404 SP =  PEEK(12 *16 +15)
  64. 405  PRINT "        NOW PLAYING: ";WF$
  65. 410  GOSUB 10000: REM  ? INSTRS
  66. 420  CALL 6 *4096 +11 *256
  67. 430  PRINT : INPUT "PLAY AGAIN (Y/N):";YN$
  68. 440  IF  LEFT$(YN$,1) = "Y"  OR  LEFT$(YN$,1) = "y"  THEN 10
  69. 500  REM  *** EXIT ROUTINE
  70. 510  PRINT  CHR$(4)"-KILLSONG"
  71. 600  REM   DETERMINE BIGGEST TRACK      
  72. 605  FOR TK = 0 TO 15:NS(TK) = SZ(TK): NEXT 
  73. 609 SU = 0:BG = 0
  74. 610  FOR TK = 0 TO 15
  75. 620  IF NS(TK) >0  AND NS(TK) >NS(BG)  THEN BG = TK
  76. 625 SU = SU +NS(TK)
  77. 630  NEXT TK
  78. 635  IF SU < = MX  THEN  RETURN 
  79. 640  REM   CUT BIGGEST TRACK IN HALF  
  80. 645 SU = SU -NS(BG)
  81. 650 NS(BG) =  INT(NS(BG)/2)
  82. 655 SU = SU +NS(BG)
  83. 660  IF SU < = MX  THEN  RETURN 
  84. 670  GOTO 609
  85. 999  END 
  86. 1000  REM <CTRL-0x0a><CTRL-0x0a>*** ALLOCATE MEMORY
  87. 1005  REM  TK=TRACK#,B=BEGIN ADRS,E=END ADRS
  88. 1006  REM 
  89. 1020  POKE MSG, ASC("A") +128
  90. 1030  POKE MSG +1,TK
  91. 1040  POKE MSG +2, INT(B/256)
  92. 1050  POKE MSG +3,B - INT(B/256) *256
  93. 1060  POKE MSG +4, INT(E/256)
  94. 1070  POKE MSG +5,E - INT(E/256) *256
  95. 1080 U =  USR(6)
  96. 1090  IF U < >0  THEN  PRINT "ALLOCATION ERROR:";U: STOP 
  97. 1095  RETURN 
  98. 2000  REM  SET TEMPO
  99. 2005  REM POKEMSG, ASC ("D") + 128:            X =  USR (16)   
  100. 2010  POKE MSG, ASC("T") +128
  101. 2020  POKE MSG +1, INT(TM/256)
  102. 2030  POKE MSG +2,TM - INT(TM/256) *256
  103. 2040 X =  USR(16)
  104. 2080  IF FI = 0  THEN FI = 1: POKE MSG, ASC("A") +128:X =  USR(16)
  105. 2090  REM POKEMSG, ASC ("A") + 128:            X =  USR (16)   
  106. 2095  RETURN 
  107. 3000  REM  DEACTIVATE
  108. 3010  POKE MSG, ASC("D") +128:X =  USR(16)
  109. 3020  POKE MSG, ASC("X") +128
  110. 3030  POKE MSG +1,0
  111. 3040  POKE MSG +2,7 *16 +13
  112. 3050  POKE MSG +3,0
  113. 3060 X =  USR(27): REM  ALL NOTES OFF
  114. 3090  RETURN 
  115. 10000  PRINT "---------------------------------------
  116. 10010  PRINT "SPACE BAR:  STOP MUSIC    ESC:  PAUSE
  117. 10020  PRINT "ARROWS: UP/DN = VOLUME   LT/RT = SPEED
  118. 10030  PRINT 
  119. 10040  PRINT "TO SELECT MIDI CHANNEL:  
  120. 10050  PRINT 
  121. 10060  PRINT "OA-NUMBER = CHANNEL CHANGE  
  122. 10070  PRINT "+: CHANNEL UP    -:CHANNEL DOWN  
  123. 10080  PRINT 
  124. 10090  PRINT 
  125. 10100  PRINT "FOR PROGRAM CHGS: =:100  /:110  *:120
  126. 10110  PRINT 
  127. 10120  PRINT "PROGRAM CHANGE: 01 THRU *8
  128. 10130  PRINT 
  129. 10140  PRINT "VARIATIONS: .00 THRU .*7
  130. 10150  PRINT 
  131. 10160  PRINT 
  132. 10170  PRINT "< > /     : PEDALS
  133. 10180  PRINT "Y U I O P : DRUM PADS
  134. 10190  PRINT "---------------------------------------
  135. 10195  PRINT : PRINT "INITIAL SPEED="; PEEK(12 *16 +15);
  136. 10200  RETURN