Compucolor.org – Virtual Media

Listing of file='SNDGEN.BAS;01' on disk='vmedia/multi_peripheral_interface_demo-sector.ccvf'

10 REM  *** SOUND DESIGNER FOR AY-3-8910 SOUND GENERATOR ***
15 REM
20 PLOT 6,6,14,12:PRINT "SOUND DESIGNER FOR AY-3-8910"
25 PLOT 6,2,15
30 REM  SETUP ALL THE NECESSARY DATA
40 DIM  FQ(3),AM(3),V(3)
50 FC =  1.7897725E06:REM  CLOCK FREQUENCY FOR AY-3-8910
60 NP =  0:NN =  0:M =  0:EF =  10:ES =  8:NE =  3
65 REM  SETUP THE I/O PORT ADDRESSES FOR SOUND CHIP
70 SA= 176:SC= 177:REM  INTECOLOR 3650 (USE 48,49 FOR CCII)
75 REM  #### NOTE #### DO NOT USE 48 AND 49 ON 3650 !
80 OUT SA,7:OUT SC,56:REM  CHANNELS 'A,B,C' ONLY
90 GOSUB  10000
95 GOTO  110
100 PRINT :INPUT "CHANGE TONE FREQUENCIES (Y/N) ? ";C$
105 IF  C$< > "Y" GOTO  130
110 INPUT  "TONE FREQUENCIES : ";FQ(0),FQ(1),FQ(2)
115 IF FQ(0)< = 0THEN END
120 INPUT  "AMPLITUDES (1-15): ";AM(0),AM(1),AM(2)
125 AM(0)= AM(0)AND 15:AM(1)= AM(1)AND 15:AM(2)= AM(2)AND 15
130 FOR  I= 0 TO  2
132 IF  FQ(I)< = 0 THEN  V(I+ 1) =  0:GOTO  165
133 REM          ELSE
134 V(I+ 1)= AM(I)
135 TP= INT (FC/ (16* FQ(I))+ 0.5)
140 PH= INT (TP/ 256):PL= TP- 256* PH
145 PH= PHAND 15
150 OUT SA,2* I:OUT SC,PL
155 OUT SA,2* I+ 1:OUT SC,PH
160 PRINT "TONE ";I+ 1,"HIGH BYTE = ";PH,"LOW BYTE = ";PL
165 NEXT  I
170 INPUT  "ENVELOPE CONTROL (Y/N) ? ";C$
180 IF  C$< > "Y" GOTO  300
185 INPUT  "CHANGE ENVELOPE SETTINGS (Y/N) ? ";C$
187 IF  C$< > "Y" GOTO  220
190 INPUT  "ENVELOPE FREQUENCY : ";EF
200 INPUT  "ENVELOPE SHAPE/CYCLE CODE (0-15): ";ES
210 INPUT  "NUMBER OF CHANNELS FOR CONTROL (1-3): ";NE
220 EP =  INT (FC/ (256* EF)+ 0.5)
230 EH =  INT (EP/ 256)
240 EL =  EP- 256* EH
250 EH= EHAND 255
260 FOR  I= 1 TO  NE:V(I) =  16:NEXT  I
270 OUT SA,11:OUT SC,EL:OUT SA,12:OUT SC,EH
280 OUT SA,13:OUT SC,ES
290 PRINT  "ENVELOPE HIGH BYTE = ";EH,"LOW BYTE = ";EL
300 INPUT "SUPERIMPOSED NOISE (Y/N) ? ";C$
310 IF  C$< > "Y" GOTO  800
320 INPUT  "CHANGE NOISE SETTINGS (Y/N) ? ";C$
330 IF  C$< > "Y" GOTO  390
340 INPUT  "NOISE PERIOD (0-31): ";NP
350 INPUT  "NUMBER OF CHANNELS FOR NOISE (1-3): ";NN
360 M =  (8- 2^ NN)* 8
390 OUT SA,7:OUT SC,M:OUT SA,6:OUT SC,NP
800 GOSUB  10030
850 REM
870 INPUT  "HIT <RETURN> TO STOP ";C$
880 GOSUB  10000
890 OUT SA,7:OUT SC,56
900 GOTO  100
10000 REM  *** STOP SOUND ON ALL CHANNELS ***
10010 REM
10020 V(1) =  0:V(2) =  0:V(3) =  0
10030 OUT SA,8:OUT SC,V(1):OUT SA,9:OUT SC,V(2):OUT SA,10:OUT SC,V(3)
10040 RETURN
10050 REM  *** START SOUND ON ALL CHANNELS ***
10060 REM
10070 V(1) =  15:V(2) =  15:V(3) =  15:GOTO  10030