Home » Personal collection » Commodore disks » disk50a2_progs1.d64 » synthesiser
synthesiser
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Personal collection » Commodore disks » disk50a2_progs1.d64 |
Filename: | synthesiser |
Read OK: | ✔ |
File size: | 1375 bytes |
Load address: | 0801 |
Exec address: | 0000 |
Duplicates
There is 1 duplicate copy of this file in the archive:
- Personal collection » Commodore disks » disk65a_programs_1.d64 » synthesiser
- Personal collection » Commodore disks » disk50a2_progs1.d64 » synthesiser
File contents
100 REM SYNTHESISER, BY SIMON 110 REM : 120 GOSUB500 130 GOSUB1000 140 GOSUB1500 150 IF HALTING THEN END 160 GOSUB2000 170 GOTO140 180 REM : 500 REM 510 REM 520 SC=54272:TRUE=-1:FALSE=0 530 HALTING=FALSE 540 REM : 550 REM 560 DIM FRQ(11) 570 FORI=0TO11:READFRQ(I):NEXT 580 DATA34334,36376,38539,40830,43258,45830 590 DATA48556,51443,54502,57743,61176,64814 600 REM : 610 REM 620 DIM KEY(17) 630 FORI=0TO17:READKEY(I):NEXT 640 DATA10,12,13,23,20,21,31,26,28,39,34,36,37,47,42,44,55,50 650 REM : 660 REM 670 ATT=0:DEC=6:POKESC+5,ATT*16+DEC 680 SUS=10:REL=10:POKESC+6,SUS*16+REL 690 WAV$="T":WAV=17:FIL$="-" 700 OCT=4:VOL=15:POKESC+23,0 710 REM : 720 REM 730 DIM HI(17),LO(17) 740 GOSUB800 750 RETURN 800 REM 810 FORI=0TO3:FQ=FRQ(I+8)/2^(8-OCT):GOSUB850:NEXT 820 FORI=4TO15:FQ=FRQ(I-4)/2^(7-OCT):GOSUB850:NEXT 830 IF OCT<7 THENFORI=16TO17:FQ=FRQ(I-16)/2^(6-OCT):GOSUB850:NEXT 840 RETURN 850 REM 860 HI(I)=INT(FQ/256) 870 LO(I)=FQ-256*HI(I) 880 RETURN 1000 REM 1010 REM 1020 POKE53281,9:POKE53280,9 1030 PRINT"<clr><yellow>"TAB(7)"ENVELOPE DESIGN, BY SIMON" 1040 PRINT"<cursor down>ATTACK (0-15)" 1050 PRINT"DECAY (0-15)"TAB(27)"-> SC+5,6" 1060 PRINT"<cursor down>SUSTAIN (0-15)" 1070 PRINT"RELEASE (0-15)"TAB(27)"-> SC+6,170" 1080 PRINT"<cursor down>WAVEFORM (T,S,P,N)"TAB(27)"-> SC+4,17" 1090 PRINT"<cursor down>FILTERS (-,H,L,B)"TAB(27)"-> SC+24,15" 1100 PRINT"<cursor down><cursor down><cursor down>OCTIVE (0-7)<cursor down>" 1110 PRINT" ┌🭸┬🭸┬┬┬🭸┬🭸┬┬┬🭸┬🭸┬🭸┬┬┬🭸┐" 1120 PRINT" 🭲 🭲 🭲🭲🭲 🭲 🭲🭲🭲 🭲 🭲 🭲🭲🭲 🭲" 1130 PRINT" 🭲 🭲 🭲🭲🭲 🭲 🭲🭲🭲 🭲 🭲 🭲🭲🭲 🭲"TAB(27)"PRESS" 1140 PRINT" 🭲A🭲S🭲🭲🭲F🭲G🭲🭲🭲J🭲K🭲L🭲🭲🭲;🭲"TAB(27)"RETURN TO" 1150 PRINT" └┬┴┬┘🭲└┬┴┬┘🭲└┬┴┬┴┬┘🭲└┬┘"TAB(27)"MODIFY" 1160 PRINT" 🭲 🭲 🭲 🭲 🭲 🭲 🭲 🭲 🭲 🭲 🭲"TAB(27)"PARAMETERS" 1170 PRINT" 🭲Z🭲X🭲C🭲V🭲B🭲N🭲M🭲,🭲.🭲/🭲" 1180 PRINT" 🭲 🭲 🭲 🭲 🭲 🭲 🭲 🭲 🭲 🭲 🭲"TAB(27)"Q TO QUIT" 1190 PRINT" └🭸┴🭸┴🭸┴🭸┴🭸┴🭸┴🭸┴🭸┴🭸┴🭸┘"; 1200 REM : 1210 REM 1220 PRINT"<home><cyan><cursor down><cursor down>"TAB(21)"0":PRINTTAB(21)"6" 1230 PRINT"<cursor down>"TAB(21)"10":PRINTTAB(21)"10" 1240 PRINT"<cursor down>"TAB(21)"T":PRINT"<cursor down>"TAB(21)"-" 1250 PRINT"<cursor down><cursor down><cursor down>"TAB(21)"4" 1260 REM 1270 FORLO=55401TO55881STEP40:POKELO,3:NEXT 1280 RETURN 1500 REM 1510 POKESC+24,VOL 1520 REM 1530 KY=PEEK(197):IFKY=64THEN1530 1540 IFKY=62THENHALTING=TRUE:GOTO1600 1550 IFKY=1THEN1600 1560 I=0 1570 IF KY=KEY(I)THENGOSUB1700:GOTO1530 1580 I=I+1:IFI<18THEN1570 1590 GOTO1530 1600 REM 1610 POKESC+24,0 1620 GETA$:IFA$<>""THEN1620 1630 RETURN 1700 REM 1710 POKESC,LO(I):POKESC+1,HI(I) 1720 POKESC+4,WAV 1730 REM 1740 IFPEEK(197)=KEY(I)THEN1740 1750 POKESC+4,WAV-1 1760 RETURN 2000 REM 2010 REM 2020 FORY=18TO23:FORX=27TO36 2030 POKE55296+Y*40+X,9 2040 NEXT:NEXT 2050 REM : 2060 REM 2070 LINE=2:GOSUB3900 2080 PRINTTAB(21);:POKE1129,31 2090 REM 2100 MAX=2:GOSUB4000:IFNOTCHANGEDTHEN2140 2110 IFVLUE>15 THENGOSUB4200:GOTO2600 2120 ATT=VLUE 2130 REM : 2140 REM 2150 LINE=3:GOSUB3900 2160 PRINTTAB(21);:POKE1129,32:POKE1169,31 2170 GOSUB4000:IFNOTCHANGEDTHEN2200 2180 IFVLUE>15THENGOSUB4200:GOTO2140 2190 DEC=VLUE 2200 VLUE=ATT*16+DEC:POKESC+5,VLUE 2210 PRINTTAB(35)"<yellow>";MID$(STR$(VLUE),2);"<cyan>"; 2220 IFVLUE<100THENPRINT" ";:IFVLUE<10THENPRINT" "; 2230 REM : 2240 REM 2250 LINE=5:GOSUB3900 2260 PRINTTAB(21);:POKE1169,32:POKE1249,31 2270 GOSUB4000:IFNOTCHANGEDTHEN2310 2280 IFVLUE>15THENGOSUB4200:GOTO2240 2290 SUS=VLUE 2300 REM : 2310 REM 2320 LINE=6:GOSUB3900 2330 PRINTTAB(21);:POKE1249,32:POKE1289,31 2340 GOSUB4000:IFNOTCHANGEDTHEN2370 2350 IFVLUE>15THENGOSUB4200:GOTO2310 2360 REL=VLUE 2370 VLUE=SUS*16+REL:POKESC+6,VLUE 2380 PRINTTAB(35)"<yellow>";MID$(STR$(VLUE),2);"<cyan>"; 2390 IF VLUE<100THENPRINT" ";:IFVLUE<10THENPRINT" "; 2400 REM : 2410 REM 2420 LINE=8:GOSUB3900 2430 PRINTTAB(21);:POKE1289,32:POKE1369,31 2440 W$="":CHANGED=FALSE 2450 GETA$:IFA$=""THEN2450 2460 X=ASC(A$):IFX=13THENPOKE1369,32:GOTO2520 2470 CHANGED=TRUE 2480 IFX=20THENPRINT"<cursor left> <cursor left>";:W$="":GOTO2450 2490 IFX<>78ANDX<>80ANDX<>83ANDX<>84THENGOSUB4200:GOTO2450 2500 IFW$<>""THENGOSUB4200:GOTO2450 2510 W$=A$:PRINTA$;:GOTO2450 2520 IFNOTCHANGEDTHENPRINT:GOTO2590 2530 WAV$=W$:IFW$="N"THENWAV=129 2540 IF W$="P" THENWAV=65 2550 IF W$="S" THENWAV=33 2560 IF W$="T" THENWAV=17 2570 PRINTTAB(35)"<yellow>";MID$(STR$(WAV),2);"<cyan>" 2580 REM : 2590 REM 2600 IFWAV$<>"P"THENPRINT" ":GOTO2680 2610 PRINT"<yellow>PULSE WIDTH (0-4095)<cyan>" 2620 LINE=9:GOSUB3900 2630 PRINTTAB(21);:POKE1409,31:MAX=4 2640 GOSUB4000:POKE1409,32 2650 IFVLUE>4095THENGOSUB4200:GOTO2620 2660 POKESC+2,VLUE AND 255:POKESC+3,INT(VLUE/256) 2670 REM : 2680 REM 2690 LINE=10:GOSUB3900 2700 PRINTTAB(21);:POKE1449,31 2710 CHANGED=FALSE:FIL$="" 2720 GETA$:IFA$=""THEN2720 2730 X=ASC(A$):IFX=13ORX=20ORX=72ORX=76ORX=66ORX=45THEN2750 2740 GOSUB4200:GOTO2720 2750 IFX=13THENPOKE1449,32:GOTO2800 2760 IFNOTCHANGEDTHENPRINT" <cursor left><cursor left><cursor left><cursor left>";:CHANGED=TRUE 2770 IFX=20THEN PRINT"<cursor left> <cursor left>";:FIL$=LEFT$(FIL$,LEN(FIL$)-1):GOTO2720 2780 IFLEN(FIL$)=3THENGOSUB4200:GOTO2720 2790 PRINTA$;:FIL$=FIL$+A$:GOTO2720 2800 IFNOTCHANGEDTHENPRINT:GOTO2870 2810 VOL=15 2820 FORI=1TOLEN(FIL$):A$=MID$(FIL$,I,1) 2830 IFA$="H"THENVOL=VOL OR 64 2840 IFA$="B"THENVOL=VOL OR 32 2850 IFA$="L"THENVOL=VOL OR 16 2860 NEXT:PRINTTAB(36)"<yellow>";MID$(STR$(VOL)+" ",2,3);"<cyan>" 2870 IFVOL>15THENPOKESC+23,1:GOTO2920 2880 PRINT" " 2890 PRINT" " 2900 POKESC+23,0:GOTO3080 2910 REM : 2920 REM 2930 PRINT"<yellow>FILTER FREQ (0-2047)" 2940 PRINT"RESONANCE (0-15)<cyan>":POKESC+23,FIL 2950 LINE=11:GOSUB3900 2960 PRINTTAB(21);:POKE1489,31:MAX=4 2970 GOSUB4000:POKE1489,32:IFNOTCHANGEDTHEN3010 2980 IFVLUE>2047THENGOSUB4200:GOTO2950 2990 POKESC+21,VLUE AND 7:POKESC+22,INT(VLUE/8) 3000 REM : 3010 REM 3020 LINE=12:GOSUB3900 3030 PRINTTAB(21);:POKE1529,31:MAX=2 3040 GOSUB4000:POKE1529,32:IFNOTCHANGEDTHEN3080 3050 IFVLUE>15THENGOSUB4200:GOTO3020 3060 POKESC+23,16*VLUE+1 3070 REM : 3080 REM 3090 LINE=14:GOSUB3900 3100 PRINTTAB(21);:POKE1609,31:MAX=1 3110 GOSUB4000:POKE1609,32:IFNOTCHANGEDTHEN3150 3120 IFVLUE>7THENGOSUB4200:GOTO3090 3130 OCT=VLUE:GOSUB800 3140 REM : 3150 REM 3160 FORY=18TO23:FORX=27TO36 3170 POKE55296+X+40*Y,7 3180 NEXT:NEXT 3190 RETURN 3900 REM 3910 PRINT"<home>"; 3920 FORL=1TOLINE:PRINT:NEXT 3930 RETURN 4000 REM 4010 VLUE=0:SIZE=0:CHANGED=FALSE 4020 GETA$:IFA$=""THEN4020 4030 X=ASC(A$):IFX<>13ANDX<>20AND(X<48 OR X>57)THENGOSUB4200:GOTO4020 4040 IFX=13THENRETURN 4050 IFCHANGEDTHEN4100 4060 CHANGED=TRUE 4070 REM 4080 FORI=1TOMAX:PRINT" ";:NEXT 4090 FORI=1TOMAX:PRINT"<cursor left>";:NEXT 4100 IFX=20THENPRINT"<cursor left> <cursor left>";:VLUE=INT(VLUE/10):SIZE=SIZE-1:GOTO4020 4110 IFSIZE=MAXTHENGOSUB4200:GOTO4020 4120 VLUE=VLUE*10+VAL(A$):PRINTA$; 4130 SIZE=SIZE+1:GOTO4020 4200 REM 4210 POKESC+12,15:POKESC+13,240 4220 POKESC+8,67:POKESC+7,15 4230 POKESC+11,17:POKESC+24,15 4240 FORI=1TO350:NEXT 4250 POKESC+24,0:POKESC+11,0 4260 RETURN
d � SYNTHESISER, BY SIMON %n � : .x �500 8� �1000 B� �1500 T� � HALTING � � ^� �2000 g� �140 o� � : u�� {�� �SC�54272:TRUE��1:FALSE�0 �HALTING�FALSE �� : �&� �0� FRQ(11) �:�I�0�11:�FRQ(I):� D�34334,36376,38539,40830,43258,45830 . N�48556,51443,54502,57743,61176,64814 6 X� : < b� J l� KEY(17) ` v�I�0�17:�KEY(I):� � ��10,12,13,23,20,21,31,26,28,39,34,36,37,47,42,44,55,50 � �� : � �� � �ATT�0:DEC�6:�SC�5,ATT�16�DEC � �SUS�10:REL�10:�SC�6,SUS�16�REL �WAV$�"T":WAV�17:FIL$�"-"