home *** CD-ROM | disk | FTP | other *** search
/ 64'er Special 11 / 64er_Magazin_Sonderheft_11_86-11_1986_Markt__Technik_de_Side_A.d64 / sequenzgenerator (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  7KB  |  288 lines

  1. 1000 rem ******************************
  2. 1010 rem *                            *
  3. 1020 rem *       leseprogramm         *
  4. 1030 rem *   fuer sequencer-daten     *
  5. 1040 rem *                            *
  6. 1050 rem * erzeugt aus data-zeilen    *
  7. 1060 rem * einen absolut ladbaren     *
  8. 1070 rem * datensatz fuer sequencer   *
  9. 1080 rem *                            *
  10. 1090 rem * thomas kraetzig   sep 85   *
  11. 1100 rem *                            *
  12. 1110 rem ******************************
  13. 1111 rem
  14. 1112 rem speicherende heruntersetzen
  15. 1115 rem
  16. 1117 poke 56,144
  17. 1120 rem
  18. 1130 rem konstanten und
  19. 1140 rem variablen mit vorbesetzungen
  20. 1150 rem
  21. 1160 dim sf(200) :rem sequenzfolgeliste
  22. 1170 dim sa(200) :rem sequenzadressenl.
  23. 1180 dim ta(3)   :rem trackadressen
  24. 1190 rem notennamen
  25. 1200 nn$="ccddeffggaah"
  26. 1210 dn$=""      :rem dateiname
  27. 1220 s=1         :rem aktuelle sequenz
  28. 1230 t=1         :rem aktueller track
  29. 1240 ad=0        :rem allg. adresse
  30. 1250 sa=39432    :rem $9a08
  31. 1260 q=96        :rem quantisierung
  32. 1270 r=0.5       :rem gate on/laenge
  33. 1280 nl=1/4      :rem notenlaenge
  34. 1290 l=0         :rem stringlaenge
  35. 1300 sv=12*4096  :rem save-routine
  36. 1500 rem-------------------------------
  37. 1510 rem programmstart
  38. 1520 rem-------------------------------
  39. 1530 rem save-maschinenprogramm
  40. 1540 for i=0 to 17
  41. 1550 read x:poke sv+i,x:next i
  42. 2020 rem
  43. 2030 rem dummy-track erzeugen
  44. 2040 ad=sa+2
  45. 2050 poke ad  ,1  :poke ad+1,97
  46. 2060 poke ad+2,239:poke ad+3,0
  47. 2070 h0=int(ad/256):l0=ad-256*h0
  48. 2080 ad=ad+4:a$=""
  49. 2100 rem naechstes datum lesen
  50. 2110 print" ";a$;:read a$
  51. 2120 l=len(a$):l$=left$(a$,1)
  52. 2150 if a$="p"            then 3100
  53. 2160 if a$="pause"        then 3100
  54. 2165 if a$="track"        then 3800
  55. 2170 if a$="sequenz"      then 4000
  56. 2175 if a$="sequenzfolge" then 3600
  57. 2190 if a$="ende"         then 4300
  58. 2200 rem
  59. 2210 rem nach notennamen suchen
  60. 2220 rem
  61. 2230 if l=1 then 5000
  62. 2240 if l>3 then 2500
  63. 2250 n=1
  64. 2260 if l$=mid$(nn$,n,1) then 2300
  65. 2270 n=n+1:if n<13 then 2260
  66. 2280 goto 2500 :rem keine note
  67. 2300 r$=right$(a$,1):o=val(r$)
  68. 2310 if o=0 and r$<>"0" then 2420
  69. 2320 if o>6 then 2420
  70. 2330 if l=2 then 3000
  71. 2340 m$=mid$(a$,2,1)
  72. 2350 if m$="#" then n=n+1:goto 3000
  73. 2360 if m$="b" then n=n-1:goto 3000
  74. 2380 f$="nur "+l$+"#"+r$+" oder "+l$+"b"+r$
  75. 2390 f$=f$+" oder "+l$+r$+" moeglich"
  76. 2400 goto 5000
  77. 2420 f$="oktavbereich 0-6"
  78. 2430 goto 5000
  79. 2500 rem
  80. 2510 rem nach / oder - suchen
  81. 2520 rem
  82. 2530 m$=mid$(a$,2,1)
  83. 2540 if m$<>"/" and m$<>"-" then 2560
  84. 2550 r$=right$(a$,l-2):goto 2600
  85. 2560 m$=mid$(a$,3,1)
  86. 2570 if m$<>"/" and m$<>"-" then 5000
  87. 2580 l$=left$(a$,2):r$=right$(a$,l-3)
  88. 2600 rem
  89. 2610 rem zaehler und nenner untersuchen
  90. 2620 rem
  91. 2630 z=val(l$)
  92. 2640 if z>0 and z<99 then 2670
  93. 2650 f$="zaehler-bereich 1 bis 99"
  94. 2660 goto 5000
  95. 2670 n=val(r$)
  96. 2680 if n>0 or m$="-" then 2710
  97. 2690 f$="nenner muss groesser 0 sein"
  98. 2700 goto 5000
  99. 2710 if m$="/" then 3200 :rem zeit
  100. 2720 if m$="-" then 3400 :rem on/off
  101. 2730 goto 5000
  102. 3000 rem-------------------------------
  103. 3010 rem note (tonnummer n  oktave o)
  104. 3020 rem-------------------------------
  105. 3030 if n=0  then n=12:o=o-1
  106. 3040 if n=13 then n=1 :o=o+1
  107. 3050 poke ad,128+16*o+n-1:ad=ad+1
  108. 3060 goto 2110
  109. 3100 rem-------------------------------
  110. 3110 rem pause
  111. 3120 rem-------------------------------
  112. 3130 poke ad,239:ad=ad+1:goto 2110
  113. 3200 rem-------------------------------
  114. 3210 rem zeit (notendauer)
  115. 3220 rem-------------------------------
  116. 3230 t=int(q*z/n)   :rem gesamtzeit
  117. 3240 an=int(r*q*z/n):rem gate-on-zeit
  118. 3250 of=t-an        :rem gate-off-zeit
  119. 3260 if an<=96 then 3290
  120. 3270 f$="gate-on-zeit zu gross"
  121. 3280 goto 5000
  122. 3290 if of<=30 then 3320
  123. 3300 f$="gate-off-zeit zu gross"
  124. 3310 goto 5000
  125. 3320 poke ad,an:ad=ad+1
  126. 3330 poke ad,of+97:ad=ad+1
  127. 3340 goto 2110
  128. 3400 rem-------------------------------
  129. 3410 rem verhaeltnis gate-on/gesamtzeit
  130. 3420 rem (z/n = gate on/gate-off)
  131. 3430 rem-------------------------------
  132. 3440 r=z/(z+n):goto 2110
  133. 3600 rem-------------------------------
  134. 3610 rem sequenzfolge
  135. 3620 rem-------------------------------
  136. 3630 print:print:as=0
  137. 3640 print" ";a$;:reada$:a=int(val(a$))
  138. 3650 if a=0 then 3670
  139. 3660 sf(as)=a:as=as+1:goto 3640
  140. 3670 if a$<>"0" then 3690
  141. 3680 print" 0":read a$:goto 2120
  142. 3690 f$="liste muss mit 0 abgeschlossen sein"
  143. 3700 goto 5000
  144. 3800 rem-------------------------------
  145. 3810 rem track
  146. 3820 rem-------------------------------
  147. 3830 print:print:print a$;
  148. 3840 read a$:a=int(val(a$))
  149. 3850 if a>=1 and a<=3 then 3880
  150. 3860 f$="nur 1,2,3 zulaessig"
  151. 3870 goto 5000
  152. 3880 print a:t=a
  153. 3890 if ns then ns=0:goto 3910
  154. 3900 poke ad,0:ad=ad+1
  155. 3910 hi=int(ad/256):lo=ad-256*hi
  156. 3920 poke sa(s)+(t-1)*2,lo
  157. 3930 poke sa(s)+(t-1)*2+1,hi
  158. 3940 read a$:goto 2120
  159. 4000 rem-------------------------------
  160. 4010 rem sequenz
  161. 4020 rem-------------------------------
  162. 4030 print:print:print:print a$;
  163. 4040 read a$:a=int(val(a$))
  164. 4050 if a>=1 and a<=200 then 4080
  165. 4060 f$="nur 1-200 zulaessig"
  166. 4070 goto 5000
  167. 4080 print a:s=a
  168. 4090 poke ad,0:ad=ad+1:ns=-1:sa(s)=ad
  169. 4100 rem track-zeiger auf dummy-track
  170. 4110 rem initialisieren
  171. 4120 poke ad  ,l0:poke ad+1,h0
  172. 4130 poke ad+2,l0:poke ad+3,h0
  173. 4140 poke ad+4,l0:poke ad+5,h0
  174. 4150 ad=ad+6
  175. 4160 read a$:goto 2120
  176. 4300 rem-------------------------------
  177. 4310 rem ende
  178. 4320 rem sequenzfolgeliste aufbauen
  179. 4330 rem-------------------------------
  180. 4340 print:print a$
  181. 4350 poke ad,0:ad=ad+1
  182. 4360 hi=int(ad/256):lo=ad-256*hi
  183. 4370 poke sa,lo:poke sa+1,hi
  184. 4380 for i=0 to as-1
  185. 4390 : x=sa(sf(i)):if x>0 then 4410
  186. 4400 : print"sequenz";i;"nicht definiert":goto 4420
  187. 4410 : hi=int(x/256):lo=x-256*hi
  188. 4420 : poke ad+3*i,lo
  189. 4430 : poke ad+3*i+1,hi
  190. 4440 : poke ad+3*i+2,0
  191. 4450 next i
  192. 4460 for i=0 to 2:poke ad+3*as+i,0:next
  193. 4470 ad=ad+3*as+3
  194. 4500 rem
  195. 4510 rem bereich sa-ad auf disk
  196. 4520 rem
  197. 4530 input"abspeichern (j/n) ";a$
  198. 4540 if a$<>"j" then end
  199. 4550 input"dateiname         ";dn$
  200. 4560 ah=int(sa/256):al=sa-256*ah
  201. 4570 eh=int(ad/256):el=ad-256*eh
  202. 4580 open 1,8,1,dn$
  203. 4590 poke 252,al:poke 253,ah
  204. 4600 poke 780,252
  205. 4610 poke 781,el:poke 782,eh
  206. 4620 sys sv:close 1
  207. 4630 end
  208. 5000 rem-------------------------------
  209. 5010 rem fehler
  210. 5020 rem-------------------------------
  211. 5030 print:print
  212. 5040 print"fehlerhaftes datum: ";a$
  213. 5050 if f$<>"" then print f$
  214. 5060 print:a$="":f$="":goto 2110
  215. 7000 rem-------------------------------
  216. 7010 rem save-routine
  217. 7020 rem-------------------------------
  218. 7030 data 072,165,001,041,254,133,001
  219. 7040 data 104,032,216,255,165,001,009
  220. 7050 data 001,133,001,096
  221. 8000 rem-------------------------------
  222. 8010 rem musikstueck
  223. 8020 rem (edvard grieg   kobold)
  224. 8030 rem-------------------------------
  225. 8100 data sequenz,1
  226. 8110 data track,3
  227. 8120 data 1-1,1/4,eb1,hb1,eb1,hb0
  228. 8130 data eb1,hb1,eb1
  229. 8140 rem
  230. 8200 data sequenz,2
  231. 8210 data track,1
  232. 8220 data 1-0,1/4,p,1/8,hb3,3/8,p
  233. 8230 data 1/8,hb3,3/8,p,1-1,1/4
  234. 8240 data hb3,gb3,gb3,hb3,a3,f3,f3,a3
  235. 8250 data 1/2,a3,p,1-0
  236. 8260 data 1/8,eb4,3/8,p,1/8,eb4,3/8,p
  237. 8270 data 1-1,1/4,eb4,cb4,cb4,eb4
  238. 8280 data d4,hb3,hb3,d4,1-0,1/4,d4
  239. 8290 data 1/2,p
  240. 8300 data track,2
  241. 8310 data 1-0,1/8,eb3,f3
  242. 8320 data gb3,f3,eb3,f3,gb3,f3,eb3,f3
  243. 8330 data 1-1,1/4,gb3,eb3,eb3,gb3
  244. 8340 data f3,c3,c3,f3,1/2,f3,1/4,p
  245. 8350 data 1-0,1/8,ab3,hb3
  246. 8360 data cb4,hb3,ab3,hb3
  247. 8370 data cb4,hb3,ab3,hb3,1-1,1/4
  248. 8380 data cb4,ab3,ab3,cb4,hb3,f3,f3,hb3
  249. 8390 data 1/2,hb3,1/4,p
  250. 8400 data track,3
  251. 8410 data 1-1,1/4,hb0,eb1,hb1,eb1
  252. 8420 rem
  253. 8430 data sequenz,3
  254. 8440 data track,1
  255. 8450 data 1-1,1/4,p
  256. 8460 data db5,p,db5,p,ab4,p,ab4,p
  257. 8470 data gb4,p,gb4,p,db4,p,db4
  258. 8480 data track,2
  259. 8490 data 1-0,1/8
  260. 8500 data gb4,ab4,hb4,ab4,gb4,ab4,hb4,p
  261. 8510 data db4,eb4,f4,eb4,db4,eb4,f4,p
  262. 8520 data cb4,db4,eb4,db4,cb4,db4,eb4,p
  263. 8530 data gb3,ab3,hb3,ab3,gb3,ab3,hb3,p
  264. 8540 data track,3
  265. 8550 data 1-0,1/4,p,1/2
  266. 8560 data gb3,p,db3,p,cb3,p,gb2,1/4,p
  267. 8570 rem
  268. 8600 data sequenz,4
  269. 8610 data track,1
  270. 8620 data 1-0,1/4,p,1/1,p,p,p,p,1/8
  271. 8630 data hb1,f2,hb2,hb2,f3,hb3,hb3,f4
  272. 8640 data 1/4,hb4,3/4,p
  273. 8650 data track,2
  274. 8660 data 1-0,1/8,f2,gb2,ab2,gb2,f2,p
  275. 8670 data gb2,f2,eb2,p,f2,eb2,db2,p
  276. 8680 data eb2,db2,c2,p,1/1,p,1/8
  277. 8690 data eb2,db2,cb2,p,1/2,p
  278. 8700 data 1/1,f1,1/4,f4,3/4,p
  279. 8710 data track,3
  280. 8720 data 1-0,1/8,f1,gb1,ab1,gb1,f1,p
  281. 8730 data gb1,f1,eb1,p,f1,eb1,db1,p
  282. 8740 data eb1,db1,c1,p,1/1,p,1/8
  283. 8750 data eb1,db1,cb1,p,1/2,p
  284. 8760 data 1/1,f0,1/4,f2,3/4,p
  285. 8800 rem
  286. 8810 data sequenzfolge,1,2,2,3,3,4,0
  287. 8820 data ende
  288.