home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
hard.hdv
/
HARD
/
MIDIOLD
/
TRACKPLAY
(
.txt
)
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS
UTF-8
Wrap
Applesoft BASIC Source Code
|
1995-08-04
|
3.4 KB
|
136 lines
|
[FC] Applesoft BASIC Program (0x0801)
0 REM *** TRACKPLAY ***
1 POKE 12 *16 +15,8: REM DEFAULT SPEED
2 PRINT CHR$(21): POKE 12 *4096 +10 *16 +8,19: POKE 12 *4096 +10 *16 +8,17
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
4 POKE 216,0: IF PEEK(8195) < >0 THEN POKE 12 *16 +15, ABS( PEEK(8195) -16): POKE 8195,0
5 LOMEM: 29696
6 REM HIMEM:24576
7 MSG = PEEK(11) + PEEK(12) *256 +4
9 PRINT CHR$(4)"OPEN R": PRINT CHR$(4)"READ R": INPUT W1$: INPUT WF$: PRINT CHR$(4)"CLOSE"
10 TEXT : HOME : PRINT CHR$(21)
20 PRINT CHR$(4)"BRUN AUXLOAD.OBJ"
30 PRINT CHR$(4)"BRUN TRACKMGR.OBJ"
40 PRINT CHR$(4)"BLOAD TRACKPLY.OBJ"
50 PRINT CHR$(4)"BLOAD CNTLPANL.OBJ"
55 PRINT CHR$(4)"BLOAD T0,A$2000,L4":SP = PEEK(8192 +3)
57 TM = .4889 *(26 +27 *SP +5 *SP *SP)
60 REM GOTO100:REM TO USE INTERRUPTS, SKIP STATEMENTS THAT USE SPEED
70 POKE 6 *4096 +11 *256 +3,1: POKE 6 *4096 +12 *256 +9,1
100 PRINT CHR$(4)"PREFIX": INPUT PX$
101 TT = 0
102 DIM SZ(15),LK(15),NS(15)
103 FOR IX = 0 TO 15:SZ(IX) = 0:LK(IX) = 0
104 PRINT "LOADING TRACKS INTO MEMORY..."
105 PRINT CHR$(4)"OPEN "PX$",TDIR"
110 PRINT CHR$(4)"READ "PX$
120 ONERR GOTO 160
130 INPUT RE$:FE$ = MID$ (RE$,2,15)
135 LG$ = MID$ (RE$,66,6)
137 LK$ = MID$ (RE$,1,1)
140 IF LEFT$(FE$,1) = "T" AND MID$ (FE$,3,1) = " " THEN 142
141 GOTO 130
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
143 IF MID$ (FE$,2,1) < = "9" THEN IX = VAL( MID$ (FE$,2,1))
144 IF MID$ (FE$,2,1) > = "A" THEN IX = ASC( MID$ (FE$,2,1)) - ASC("A") +10
145 SZ(IX) = VAL(LG$):TT = TT +SZ(IX)
147 LK(IX) = (LK$ = "*")
150 GOTO 130
160 PRINT CHR$(4)"CLOSE"
200 REM <CTRL-0x0a><CTRL-0x0a>*** LOAD SEQUENCE ***<CTRL-0x0a>
205 MX = 12 *4096 -8 *256: REM MAXIMUM AUX MEMORY
210 IF TT >MX THEN 300
220 B = 2048: REM BASE
230 FOR TK = 0 TO 15
240 IF SZ(TK) = 0 THEN 290
250 E = B +SZ(TK) -1
260 GOSUB 1000
270 B = E +1
290 NEXT TK
295 GOTO 400
300 REM SEQ TOO BIG TO LOAD ALL AT ONCE - USE PROPORTIONAL ALLOCATION
310 B = 2048: REM BASE
320 GOSUB 600: REM CUT BIG TRKS IN HALF UNTIL THEY ALL FIT
330 FOR TK = 0 TO 15
340 IF NS(TK) = 0 THEN 390
350 E = B +NS(TK) -1
360 GOSUB 1000
370 B = E +1
390 NEXT TK
400 REM *** PLAY THE SONG ***
401 PRINT CHR$(4)"BLOAD CNTLPANL.OBJ": POKE 6 *4096 +12 *256 +9,1
402 PRINT CHR$(21)
403 HOME : PRINT " MIDI FILE SEQUENCE PLAYER"
404 SP = PEEK(12 *16 +15)
405 PRINT " NOW PLAYING: ";WF$
410 GOSUB 10000: REM ? INSTRS
420 CALL 6 *4096 +11 *256
430 PRINT : INPUT "PLAY AGAIN (Y/N):";YN$
440 IF LEFT$(YN$,1) = "Y" OR LEFT$(YN$,1) = "y" THEN 10
500 REM *** EXIT ROUTINE
510 PRINT CHR$(4)"-KILLSONG"
600 REM DETERMINE BIGGEST TRACK
605 FOR TK = 0 TO 15:NS(TK) = SZ(TK): NEXT
609 SU = 0:BG = 0
610 FOR TK = 0 TO 15
620 IF NS(TK) >0 AND NS(TK) >NS(BG) THEN BG = TK
625 SU = SU +NS(TK)
630 NEXT TK
635 IF SU < = MX THEN RETURN
640 REM CUT BIGGEST TRACK IN HALF
645 SU = SU -NS(BG)
650 NS(BG) = INT(NS(BG)/2)
655 SU = SU +NS(BG)
660 IF SU < = MX THEN RETURN
670 GOTO 609
999 END
1000 REM <CTRL-0x0a><CTRL-0x0a>*** ALLOCATE MEMORY
1005 REM TK=TRACK#,B=BEGIN ADRS,E=END ADRS
1006 REM
1020 POKE MSG, ASC("A") +128
1030 POKE MSG +1,TK
1040 POKE MSG +2, INT(B/256)
1050 POKE MSG +3,B - INT(B/256) *256
1060 POKE MSG +4, INT(E/256)
1070 POKE MSG +5,E - INT(E/256) *256
1080 U = USR(6)
1090 IF U < >0 THEN PRINT "ALLOCATION ERROR:";U: STOP
1095 RETURN
2000 REM SET TEMPO
2005 REM POKEMSG, ASC ("D") + 128: X = USR (16)
2010 POKE MSG, ASC("T") +128
2020 POKE MSG +1, INT(TM/256)
2030 POKE MSG +2,TM - INT(TM/256) *256
2040 X = USR(16)
2080 IF FI = 0 THEN FI = 1: POKE MSG, ASC("A") +128:X = USR(16)
2090 REM POKEMSG, ASC ("A") + 128: X = USR (16)
2095 RETURN
3000 REM DEACTIVATE
3010 POKE MSG, ASC("D") +128:X = USR(16)
3020 POKE MSG, ASC("X") +128
3030 POKE MSG +1,0
3040 POKE MSG +2,7 *16 +13
3050 POKE MSG +3,0
3060 X = USR(27): REM ALL NOTES OFF
3090 RETURN
10000 PRINT "---------------------------------------
10010 PRINT "SPACE BAR: STOP MUSIC ESC: PAUSE
10020 PRINT "ARROWS: UP/DN = VOLUME LT/RT = SPEED
10030 PRINT
10040 PRINT "TO SELECT MIDI CHANNEL:
10050 PRINT
10060 PRINT "OA-NUMBER = CHANNEL CHANGE
10070 PRINT "+: CHANNEL UP -:CHANNEL DOWN
10080 PRINT
10090 PRINT
10100 PRINT "FOR PROGRAM CHGS: =:100 /:110 *:120
10110 PRINT
10120 PRINT "PROGRAM CHANGE: 01 THRU *8
10130 PRINT
10140 PRINT "VARIATIONS: .00 THRU .*7
10150 PRINT
10160 PRINT
10170 PRINT "< > / : PEDALS
10180 PRINT "Y U I O P : DRUM PADS
10190 PRINT "---------------------------------------
10195 PRINT : PRINT "INITIAL SPEED="; PEEK(12 *16 +15);
10200 RETURN