Listing of file='MUSIC.BAS;01' on disk='vmedia/intro_to_soundware-sector.ccvf'
100 REM ** MUSIC - JULY 19,1979 **
110 OUT 8,247
120 PLOT 6,2,12,6,34,14,3,15,0,27,24
130 PRINT " M U S I C C O M P O S E R ":PLOT 15,6,2,0,4
140 PRINT " THE MUSIC COMPOSER ALLOWS YOU TO CREATE MUSIC USING THE"
150 PRINT " KEYBOARD TO SIMULATE A PIANO. THE PICTURE BELOW SHOWS THE"
160 PRINT " ARRANGEMENT OF THE KEYS."
170 GOTO 290
180 FOR I= 7TO 18:PLOT 3,0,I,11:NEXT I:PLOT 3,0,7
190 PRINT TAB( 10)"THE FOLLOWING COMMANDS ARE RECOGNIZED:"
200 PRINT TAB( 15)"1-9 DURATION OF LAST NOTE HIT"
210 PRINT TAB( 15)"<-- DELETES LAST NOTE"
220 PRINT TAB( 15)"--> REPLAYS NOTES ENTERED"
230 PRINT TAB( 9)"SPACE BAR DELAY"
240 PRINT TAB( 8)"ERASE PAGE CLEARS ALL NOTES ENTERED"
250 PRINT TAB( 15)" C LOAD MUSIC FROM DISK"
260 PRINT TAB( 15)" B SAVE CURRENT MUSIC TO DISK"
270 PRINT TAB( 15)" M RETURN TO MENU":RETURN
280 REM
290 PLOT 3,0,20:P$= "a b":B$= " "
300 FOR I= 1TO 10:PRINT TAB( 5)
310 FOR J= 1TO 11:PRINT P$;:NEXT J:PRINT
320 NEXT I
330 DATA 14,19,29,34,39,49,54
340 FOR J= 1TO 7:READ R
350 FOR I= 1TO 6:PLOT 3,R,19+ I:PRINT B$:NEXT I
360 NEXT J
370 PLOT 3,5,19:FOR I= 1TO 55:PRINT "";:NEXT I
380 DATA A,S,D,F,G,H,J,K,L,";",":",E,15,R,20,Y,30,U,35,I,40,P,50,@,55
390 J= 2:FOR I= 1TO 11:READ N$:J= J+ 5:PLOT 3,J,31:PRINT ""N$:NEXT I
400 FOR I= 1TO 7:READ N$,N:PLOT 3,N,19:PRINT "";N$;"":NEXT I
410 PLOT 3,25,10:PRINT "CALCULATING":GOTO 60000
420 GOSUB 180:CLEAR 1000
430 B$= "t u
v w"
440 BR$= "
"
450 F$= "tu
vw"
460 FR$= "
"
470 DIM CA(32),CH(19),P(19),X(19),Y(19),S(256),D(256),A(256)
480 RESTORE 920:FOR I= 1TO 19:READ CH(I):NEXT I:S(0)= 4
490 FOR I= 1TO 19:READ P(I):NEXT I
500 FOR I= 1TO 19:READ X(I),Y(I):NEXT I
510 FOR I= 1TO 32:READ CA(I):NEXT I
520 LO= PEEK (32940)+ PEEK (32941)* 256+ 1:DD= 29800
530 REM
** GET MUSIC FROM KEYBOARD **
540 OUT 8,255:CH= CALL (2):OUT 8,247
550 J= CH- 57:IF J< 1OR J> 32THEN 570
560 PLOT 3,0,29:PRINT " ":I= CA(J):IF I> 0THEN 650
570 IF CH= 32THEN I= 19:GOTO 650
580 IF CH= 66OR CH= 67THEN 980
590 IF CH= 77THEN PLOT 27,11:OUT 8,255:LOAD "MENU":RUN
600 IF CH= 12THEN K= 0:GOTO 540
610 IF CH= 26AND K> 0THEN K= K- 1:GOTO 540
620 IF CH= 25THEN GOSUB 780:GOTO 540
630 IF CH< 49OR CH> 57THEN 540
640 DD= 7450* (CH- 48):D(K)= DD/ S(K):I= A(K):GOTO 660
650 K= K+ 1:S(K)= P(I):A(K)= I:D(K)= DD/ S(K)
660 PLOT 3,X(I),Y(I)
670 IF Y(I)= 23THEN PRINT F$
680 IF Y(I)= 27THEN PRINT B$
690 Z1= INT (S(K)/ 256):Z2= S(K)- Z1* 256
700 POKE LO,Z2:POKE LO+ 1,Z1:POKE LO+ 2,50
710 Z1= INT (D(K)/ 256):Z2= D(K)- Z1* 256
720 POKE LO+ 2,Z2:POKE LO+ 3,Z1
730 IF I< > 19THEN X= CALL (0)
740 PLOT 3,X(I),Y(I)
750 IF Y(I)= 23THEN PRINT FR$
760 IF Y(I)= 27THEN PRINT BR$
770 GOTO 540
780 REM
** REPLAY MUSIC **
790 FOR I= 1TO K
800 IF S(I)= 50THEN FOR J= 1TO D(I)/ 3:NEXT J:GOTO 910
810 J= A(I):PLOT 3,X(J),Y(J)
820 IF Y(J)= 23THEN PRINT F$
830 IF Y(J)= 27THEN PRINT B$
840 Z1= INT (S(I)/ 256):Z2= S(I)- Z1* 256
850 POKE LO,Z2:POKE LO+ 1,Z1
860 Z1= INT (D(I)/ 256):Z2= D(I)- Z1* 256
870 POKE LO+ 2,Z2:POKE LO+ 3,Z1
880 X= CALL (0):PLOT 3,X(J),Y(J)
890 IF Y(J)= 23THEN PRINT FR$
900 IF Y(J)= 27THEN PRINT BR$
910 NEXT I:RETURN
920 DATA 65,83,69,68,82,70,71,89,72,85,74,73,75,76,80,59,64,58,32
930 DATA 298,280,262,250,238,221,210,198,188,176,168,158,149,140,131,125,119,111,50
940 DATA 6,27,11,27,14,23,16,27,19,23,21,27,26,27,29,23
950 DATA 31,27,34,23,36,27,39,23,41,27,46,27,49,23,51,27
960 DATA 54,23,56,27,0,0
970 DATA 18,16,0,0,0,0,17,1,0,0,4,3,6,7,9,12,11,13,14,0,0,0,15,0,5,2,0,10,0,0,0,8
980 REM
** SAVE/LOAD MUSIC **
990 FOR I= 7TO 18:PLOT 3,0,I,11:NEXT I:OUT 8,255
1000 PLOT 3,0,8:PRINT TAB( 10):IF CH= 67THEN 1110
1010 REM **SAVE
1020 PRINT TAB( 10):INPUT "ENTER NAME OF MUSIC TO BE SAVED: ";F1$:REM
1030 FILE "T",1040:FILE "R",1,F1$,1:GOTO 1070
1040 FILE "E",F,E,LN:IF E= 14THEN FILE "N",F1$,1,256,1:GOTO 1030
1050 IF E= 2THEN PRINT TAB( 10)"BAD FILE NAME":GOTO 1020
1060 PRINT TAB( 10)"FILE ERROR -";E;"":GOTO 1020
1070 PRINT :PRINT TAB( 25)"CALCULATING"
1080 M$= CHR$ (K):FOR I= 1TO 254
1090 D= INT ((D(I)* S(I)/ 7450)+ .5):V= A(I)* 10+ D:M$= M$+ CHR$ (V)
1100 NEXT I:PUT 1,1;M$[255]:FILE "C",1:GOSUB 180:GOTO 540
1110 REM **LOAD
1120 PRINT TAB( 10):INPUT "ENTER NAME OF MUSIC TO BE LOADED: ";F1$:REM
1130 FILE "T",1140:FILE "R",1,F1$,1:GOTO 1180
1140 FILE "E",F,E,LN:IF E= 2THEN PRINT TAB( 10)"BAD FILE NAME":GOTO 1120
1150 IF E= 14THEN PRINT TAB( 10)"CANNOT LOCATE FILE"
1160 IF E< > 14THEN PRINT TAB( 10)"FILE ERROR -";E;""
1170 FOR I= 1TO 700:NEXT I:GOSUB 180:GOTO 540
1180 GET 1,1;M$[255]:K= ASC (LEFT$ (M$,1))
1190 PRINT :PRINT TAB( 25)"CALCULATING"
1200 FOR I= 1TO K:V= ASC (MID$ (M$,I+ 1,1))
1210 A(I)= INT (V/ 10):D= V- A(I)* 10:S(I)= P(A(I)):D(I)= D* 7450/ S(I)
1220 NEXT I:FILE "C",1:GOSUB 180:GOTO 540
60000 REM
** LOAD ASSM PATCH **
60010 TM= PEEK (32940)+ PEEK (32941)* 256
60020 IF TM> 65500THEN 60070
60030 POKE TM+ 1,50:POKE TM+ 3,15
60040 REM 60027 CHECKS IF MACHINE LANGUAGE ALREADY LOADED
60050 A= 0:FOR N= TM+ 176TO TM+ 182:A= A+ PEEK (N):NEXT
60060 IF A= 1445THEN 60150
60070 AD= 32940:TM= TM- 200:DA= TM:GOSUB 60160:CLEAR 100
60080 TM= PEEK (32940)+ PEEK (32941)* 256
60090 RESTORE 60190
60100 REM 60050 LOADS MACHINE LANGUAGE
60110 FOR N= 1TO 200:READ A:IF A> 255THEN N= 220:GOTO 60140
60120 IF A< 0THEN DA= TM- A:AD= TM+ N:GOSUB 60160:GOTO 60140
60130 POKE TM+ N,A
60140 NEXT
60150 AD= 33283:DA= TM+ 8:GOSUB 60160:GOTO 420
60160 Z1= INT (DA/ 256):Z2= DA- Z1* 256
60170 POKE AD,Z2:N= N+ 1:POKE AD+ 1,Z1:RETURN
60180 REM MACHINE LANGUAGE DATA
60190 DATA 50,0,15,0,0,0,0,123,254,0,194,-121,30,8,243
60200 DATA 58,-6,87,58,-7,254,0,194,-33,122,50,-7,42,-1
60210 DATA 34,-49,42,-3,34,-46,33,-22,1,50,0,11,120,177
60220 DATA 194,-51,123,238,2,211,4,95,43,124,181,194
60230 DATA -48,58,-5,254,0,202,-100,61,50,-5,58,-49,130
60240 DATA 50,-49,58,-7,103,122,50,-7,84,195,-45,50,-7
60250 DATA 50,-4,50,-2,62,15,50,-3,62,50,50,-1,251,201
60260 DATA 254,1,194,-158,33,0,0,6,4,14,17,17,128,0,25
60270 DATA 126,17,128,255,25,119,35,0,13,194,-133,17,8
60280 DATA 0,25,5,194,-131,201
60290 DATA 254,2,194,-182,245,229,197,205,36,0,194,-166
60300 DATA 95,175,87,50,255,129,193,225,241,201,201
60310 DATA 300