home *** CD-ROM | disk | FTP | other *** search
/ C64'er / C64'er.iso / sh6x / sh62b.d64 / bassist (.txt) < prev    next >
Commodore BASIC  |  1995-03-30  |  10KB  |  343 lines

  1. 10 REM *********+*
  2. 20 REM * BASSIST *
  3. 40 REM ***********
  4. 50 :
  5. 60 REM  (C) 1985, ROBERT TREICHLER,  FL-9497 TRIESENBERG (F.TUM LIECHTENSTEIN)
  6. 70 :
  7. 80 POKE53280,0:POKE53281,0:PRINTCHR$(14)CHR$(8)"[147]"
  8. 90 IFZ=0THENZ=1:X$="":Z$="":LOAD"BASS/IRQ",8,1:REM ASS-PROG.EINLESEN
  9. 100 :
  10. 101 REM DEFINITIONEN & INIT.
  11. 102 :
  12. 200 HM=100:DIMH$(HM),HD%(HM),HA%(HM),HS%(HM),HG%(HM),F(11),P(4,2)
  13. 205 DIMS$(12,1),SP(6),SM(11),X$(16)
  14. 210 REM FUNC.F.BIT-MUSTER (Y=BIT-MUSTER,Z=GRUNDTON,N=NR.1/2-TON UEBER GRUNDTON):
  15. 212 DEFFN BS(N)=YORSM(N+Z+(N+Z>11)*12):REM FUNCT. SET BIT
  16. 214 DEFFN BC(N)=YAND4095-SM(N+Z+(N+Z>11)*12):REM FUNCT. CLEAR BIT
  17. 216 DEFFN BT(N)=YANDSM(N+Z+(N+Z>11)*12):REM FUNCT. TEST BIT
  18. 220 F=110:FORI=0TO11:F(I)=F:F=F*1.059463094:SM(I)=2^I:NEXT:REM FREQU.+BIT-MASK.
  19. 230 FORI=0TO6:READSP(I):NEXT:REM SKALA-POINTERS (A...G)
  20. 240 FORJ=0TO1:FORI=0TO12:READS$(I,J):NEXTI,J:REM #- & B-SKALEN
  21. 250 FORI=0TO4:FORJ=0TO2:READP(I,J):NEXTJ,I:REM PARAMETER
  22. 260 C$=CHR$(13):R=54272:REM ADR.SID-REG.
  23. 265 MN$="   < MIT 'F1' ZURUECK INS [205]ENUE >"
  24. 266 M0$="       [164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164]"
  25. 267 M1$="       [163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]"
  26. 268 M2$="      [167] "
  27. 269 M3$="      [167]                         [165]"
  28. 270 PS$="  -[219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219][192][192][219]+"
  29. 275 L$="                                       "
  30. 280 FA=.943874:FK=6.378901:F6=1.019440644:FO=1.37:F1=150:F2=300:REM FREQU.KONST
  31. 290 AP=49152:FS=AP+22:RB=251:RP=252:REM ADR.F.ASS-PROG
  32. 300 :
  33. 301 REM MENUE
  34. 302 :
  35. 310 GOSUB6950:Z=32:PRINT"[147][159]"M0$:PRINTM3$
  36. 320 PRINTM2$TAB(13)"[194] [193] [211] [211] [201] [211] [212]"TAB(Z)"[165]":PRINTM3$:PRINTM1$:PRINTM0$:PRINTM3$
  37. 321 PRINTM2$"1=[206]EUEINGABE/[197]DITIEREN"TAB(Z)"[165]":PRINTM3$
  38. 322 PRINTM2$"2=[193]BSPEICHERN AUF [196]ISK"TAB(Z)"[165]":PRINTM3$
  39. 323 PRINTM2$"3=[197]INLESEN VON [196]ISK"TAB(Z)"[165]":PRINTM3$
  40. 324 PRINTM2$"4=[208]LAY [194]ASS [211]OLO"TAB(Z)"[165]":PRINTM3$
  41. 325 PRINTM2$"5=[208]LAY [194]ASS+[211]CHLAGZEUG"TAB(Z)"[165]":PRINTM3$
  42. 326 PRINTM2$"6=[208]ARAMETER-[197]INSTELLUNG"TAB(Z)"[165]":PRINTM3$
  43. 327 PRINTM2$"7=[197]NDE"TAB(Z)"[165]":PRINTM3$:PRINTM1$
  44. 330 GETZ$:IFZ$<"1"ORZ$>"7"THEN330
  45. 340 Z=VAL(Z$):ONZGOSUB8000,2000,3000,500,505,5000,900
  46. 350 POKE198,0:GOTO300
  47. 390 END
  48. 500 :
  49. 501 REM PLAY
  50. 502 :
  51. 504 KP=1:GOTO510
  52. 505 KP=0
  53. 510 PRINT"[147]     "MT$:PRINT""MN$""
  54. 520 TR%=1:AZ=1:FL=0:H=0:H$(HT+1)=H$(1):PR$=""
  55. 525 AU=HD%(HT)-A4+1:IFAU<1THENAU=1
  56. 530 GOSUB6900:GOSUB1800
  57. 540 FORW=1TOWA:HB=-1:HN=1:H4=0
  58. 550 HL=H:H=HN:HN=H+1:IFH>HTTHEN850
  59. 555 IFH<HLTHENPR$="[215]IEDERHOLUNG"
  60. 560 IFH>HL+1THENPR$="[197]NDE [215]IEDERHOLUNG"
  61. 570 IFHN=HB+1THENHN=HW:HB=-1
  62. 580 IFH$(HN)="W"THENHB=HD%(HN):HW=HN+1:HN=HG%(HN)
  63. 590 FORHD=1TOHD%(H):H4=H4+1:IFH4>A4THENH4=1
  64. 600 :
  65. 601 REM TON BESTIMMEN
  66. 602 :
  67. 605 IFH$(H)="[208]AUSE"THEN630
  68. 610 IFW<WAORH<HT ORHD<AUTHEN640
  69. 620 IFHD=AUTHENTA%=HG%(H):GOTO680:REM LETZTER TAKT BASS AUSHALTEN
  70. 630 TA%=12:FW=0:GOTO720:REM PAUSE
  71. 640 IF(H4AND1)ORHD=HD%(H)THEN650
  72. 645 IFRND(0)<P(3,0)THEN630
  73. 650 IFHD=1ANDHG%(H)<>HG%(HL)THENTA%=HG%(H):GOTO680:REM NEUE HARMONIE BEGINNT
  74. 660 IFHD<>HD%(H)ORHG%(H)=HG%(HN)THEN670:REM ES FOLGT KEINE NEUE HARMONIE
  75. 662 IFH$(HN)="[208]AUSE"THENTA%=HG%(H):GOTO680:REM PAUSE FOLGT
  76. 665 SYSAP+12,HA%(H),HA%(HN),HG%(H),HG%(HN),TR%,TA%:GOTO680:REM UEBERG.TON SUCHEN
  77. 670 IFRND(0)<P(4,0)THENSYSAP+15,HA%(H),TA%:GOTO680:REM ZUFALLS-TON
  78. 675 SYSAP+9,HA%(H),TR%,TA%:REM NAE.AKKORDEIG.TON SUCHEN
  79. 680 F=F(TA%):IFF=FLORF*FO<FLANDF+F<>FLTHENF=F+F:REM FREQU.
  80. 690 TR%=1+2*(F<FL):IFF<F1THENTR%=1:REM TREND BESTIMMEN
  81. 695 IFF>F2THENTR%=-1:REM ...DABEI ECKFREQU. BEACHTEN
  82. 700 :
  83. 701 REM TON AUSGEBEN
  84. 702 :
  85. 710 FL=F:FW=F*FU:REM FREQU.IN SID-WERT UMRECHNEN
  86. 720 IF(HD>1ORH$(H)=H$(HL))ANDH4>1THEN800
  87. 730 IFAZTHENGOSUB1500:AZ=0
  88. 740 IFPEEK(FS)THEN740:REM WARTE BIS LETZTER TON V.IRQ-ROUT.BEHANDELT ...
  89. 750 IFPR$>""THENPRINT:PRINT:PRINTPR$:PR$=""
  90. 760 PRINT:PRINTH$(H)TAB(9)": ";:REM ..ERST DANN HARMONIE-BEZ. AUSGEBEN
  91. 800 SYSAP+6,H4,FW,FW*FA,S$(TA%,HS%(H)):REM TON MIT BEZ. ->ASS-PROG
  92. 820 IFPEEK(197)=4THENHD=HD%(H):HN=HT+1:W=WA:REM ABBRUCH
  93. 830 NEXTHD:GOTO550
  94. 850 NEXTW:SYSAP+6,0,0,0,"":SYSAP+3:REM IRQ-ROUT. AUS
  95. 890 FORI=0TO1500:NEXT:RETURN
  96. 900 :
  97. 901 REM ENDE
  98. 902 :
  99. 990 END
  100. 1300 :
  101. 1301 REM WERTE ZU EINER HARMONIE GENERIEREN
  102. 1302 :
  103. 1308 Z=SP(ASC(X$)-193):Z$=MID$(X$,2,1):X=0
  104. 1310 IFZ$="#"THENZ=Z+1:GOTO1335
  105. 1320 IFZ$="B"THENZ=Z-1-(Z<1)*12:X=1:GOTO1335
  106. 1330 IFZ$<>" "THENX$=LEFT$(X$,1)+" "+MID$(X$,2)
  107. 1332 IFZ=3ORZ=8THENX=1:REM C- & F-SKALEN MIT B (NICHT #)
  108. 1335 H$(HT)=X$:HG%(HT)=Z:HS%(HT)=X:REM BEZ./GRUNDTON/SKALA (# ODER B)
  109. 1340 FORI=0TOHT-1:IFH$(I)=X$THENY=HA%(I):GOTO1400
  110. 1345 NEXTI:Y=0
  111. 1350 Y=FNBS(0)+FNBS(4)+FNBS(7):REM BIT-MUSTER F.GRUND-DREIKLANG
  112. 1355 FORI=2TOLEN(X$):Z$=MID$(X$,I,1)
  113. 1360 IFZ$="M"THENY=FNBC(4):Y=FNBS(3):GOTO1399:REM MOLL
  114. 1365 IFZ$="J"THENY=FNBC(10):Y=FNBS(11):GOTO1399:REM MAJOR
  115. 1370 IFZ$="+"THENY=FNBC(7):Y=FNBS(8):GOTO1399:REM QUINTE +
  116. 1375 IFZ$="-"THENY=FNBC(7):Y=FNBS(6):GOTO1399:REM QUINTE -
  117. 1380 IFZ$="0"ORZ$="O"THENY=FNBC(4):Y=FNBS(3):Y=FNBC(7):Y=FNBS(6):REM VERMINDERT
  118. 1382 IFZ$="6"THENY=FNBS(9):GOTO1399:REM SEXTE
  119. 1385 IFZ$="7"THEN1398
  120. 1386 IFZ$="9"THEN1397
  121. 1387 IFZ$="1"THEN1396
  122. 1388 IFZ$="3"THEN1395
  123. 1390 GOTO1399
  124. 1395 Y=FNBS(9):REM 13-ER
  125. 1396 Y=FNBS(5):REM 11-ER
  126. 1397 Y=FNBS(2):REM  9-ER
  127. 1398 IFFNBT(11)=0THENY=FNBS(10):REM 7-ER, WENN NICHT SCHON MAJOR-7
  128. 1399 NEXTI
  129. 1400 HA%(HT)=Y:PRINT:PRINTX$TAB(9)": ";
  130. 1410 FORI=0TO11:IFFNBT(I)=0THEN1450
  131. 1420 PRINTS$(I+Z+(I+Z>11)*12,X)" ";
  132. 1450 NEXTI:PRINT:RETURN
  133. 1500 :
  134. 1501 REM ANZAEHLEN
  135. 1502 :
  136. 1510 SYSAP:REM INIT.IRQ-PROG.
  137. 1511 PRINT:PRINT"[211]TIMMTON : "S$(TA%,HS%(H))
  138. 1512 POKERB,1:Z=FW:FORI=1TOA4
  139. 1514 SYSAP+6,128,Z,0,"":Z=0:NEXT
  140. 1515 IFPEEK(FS)THEN1515
  141. 1516 PRINT:PRINT"[193]NZAEHLEN:";
  142. 1520 POKERP,1:FORI=1TOA4
  143. 1530 SYSAP+6,128,0,0,STR$(I):NEXT
  144. 1540 IFKPTHENPOKERP,0
  145. 1550 PR$=" ":RETURN
  146. 1800 :
  147. 1801 REM FREQU.UMRECHN.KONST. & TEMPO RECHNEN/->ASS.PROG.
  148. 1802 :
  149. 1820 FU=FK*F6^P(0,0):T0%=0
  150. 1840 REM VORSCHLAEGE BEI TEMPI<130 ->1/16-NOTEN, WENN SCHNELLER ->1/8-TRIOLEN
  151. 1850 IFP(1,0)<130THENZ=INT(900/P(1,0)+.5):T2%=2*Z:T3%=T2%+Z:T4%=T3%+Z:GOTO1870
  152. 1860 Z=INT(1200/P(1,0)+.5):T2%=Z:T3%=T2%+Z:T4%=T3%+Z:GOTO1870
  153. 1870 POKER+5,10+T4%/50:REM BASS-DECAY AUFGRUND TEMPO
  154. 1880 SYSAP+18,T2%,T3%,T4%:RETURN
  155. 1897 :
  156. 1898 REM TON -> SID
  157. 1899 :
  158. 2000 :
  159. 2001 REM ABSPEICHERN AUF DISK
  160. 2002 :
  161. 2010 PRINT"[147][193]BSPEICHERN AUF [196]ISK"
  162. 2020 INPUT"[205]USIK-[212]ITEL";MT$
  163. 2030 GOSUB2700:IFERTHENRETURN
  164. 2040 OPEN2,8,2,MT$+",S,W":GOSUB2800:IFER=0THEN2050
  165. 2042 IFER<>63THENRETURN
  166. 2044 PRINT"[213]EBERSCHREIBEN (J/N)? ";
  167. 2046 GETZ$:IFZ$<>"J"ANDZ$<>"N"THEN2046
  168. 2048 PRINTZ$:IFZ$="N"THEN2090
  169. 2049 CLOSE2:PRINT#15,"S0:"+MT$:GOTO2040
  170. 2050 PRINT#2,HT;C$;A4;C$;WA:FORI=0TO4:PRINT#2,P(I,0):NEXT
  171. 2060 GOSUB2800:IFERTHENRETURN
  172. 2070 FORI=1TOHT:PRINT#2,H$(I);C$;HA%(I);C$;HS%(I);C$;HG%(I);C$;HD%(I):NEXTI
  173. 2090 GOSUB2800:CLOSE2:CLOSE15:RETURN
  174. 2600 :
  175. 2700 OPEN15,8,15,"I0"
  176. 2800 INPUT#15,ER,ER$,ET,ES:IFER=0THENRETURN
  177. 2820 PRINT:PRINTER;ER$;ET;ES:IFER<20ORER=63THENRETURN
  178. 2850 :
  179. 2900 CLOSE2:CLOSE15
  180. 2910 :
  181. 2950 PRINT:PRINT"<[212]ASTE DRUECKEN>":POKE198,0
  182. 2960 GETZ$:IFZ$=""THEN2960
  183. 2980 RETURN
  184. 3000 :
  185. 3001 REM EINLESEN VON DISK
  186. 3002 :
  187. 3010 PRINT"[147][212]ITEL EINGEBEN ODER '[210]ETURN' FUER":PRINT"[201]NHALTSVERZEICHNIS"
  188. 3020 MT$="":INPUTMT$:IFMT$>""THEN3040
  189. 3030 GOSUB3500:IFERORMT$=""THENRETURN
  190. 3040 GOSUB2700:OPEN2,8,2,"0:"+MT$+",S,R":GOSUB2800:IFERTHENRETURN
  191. 3050 INPUT#2,HT,A4,WA:FORI=0TO4:INPUT#2,P(I,0):IFP(I,0)<P(I,1)THENP(I,0)=P(I,1)
  192. 3055 IFP(I,0)>P(I,2)THENP(I,0)=P(I,2)
  193. 3060 NEXTI:GOSUB2800:IFERTHENRETURN
  194. 3065 PRINT"[147]"MT$"  :"STR$(A4)"/4-[212]AKT":PRINT"[200]ARMONIE  [196]AUER IN 1/4"
  195. 3070 FORI=1TOHT:INPUT#2,H$(I):Z=ASC(H$(I)+CHR$(0)):IFZ=87ORZ=208THEN3080:REM W+P
  196. 3075 IFZ<193ORZ>199THENPRINT:PRINT"*** [198]ILE-[198]EHLER ***":GOTO2900
  197. 3080 INPUT#2,HA%(I),HS%(I),HG%(I),HD%(I)
  198. 3090 PRINTH$(I)TAB(12)HD%(I):NEXTI:FORI=0TO500:NEXT:GOTO3900
  199. 3500 :
  200. 3510 GOSUB2700:IFERTHENRETURN
  201. 3515 OPEN2,8,2,"#":DT=18:DS=1
  202. 3520 PRINT#15,"U1";2;0;DT;DS
  203. 3522 PRINT"[147][201]NHALT:":PRINT"[206]R