-
Notifications
You must be signed in to change notification settings - Fork 0
/
FRERE-GUSTAV.BAS
52 lines (52 loc) · 1.69 KB
/
FRERE-GUSTAV.BAS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
1 SP=.:SD=.:SV=.:GOSUB 400:S0=OS:GOTO 10:REM (C)MIKAEL BONNIER,LUND,SWEDEN;GPL3
2 ? SD,SP;:SP=SP+60:SD=4.5*SD:SV=15:GETK$:IFK$<>""THENIF(ASC(K$)AND$1F)=17GOTO7
3 OS=S0+4:GOSUB 4:SP=SP+3:OS=S0+8:GOSUB 4:SP=SP+4:GOSUB 4:GOSUB 440:?:RETURN
4 GOSUB 410:LOCATE 60,SP-15:PRINT "#";:RETURN
5 PRINT "PITCH (0-127, 60=C4), DURATION (0.1 S), AND VOLUME (0-15): SP,SD,SV";
6 INPUT SP,SD,SV
7 GOSUB 400:S0=OS:FOR I=1 TO 15:OS=S0+4*I:GOSUB 444:NEXT
8 END
10 ? "FRERE GUSTAV, SINCLAIR ZX SPECTRUM BASIC PROGRAMMING, CHAPTER 19, BEEP"
12 PRINT "Q TO QUIT"
15 FOR I=1 TO 2
20 SD=1:SP=.:GOSUB 2:SD=1:SP=2:GOSUB 2:SD=.5:SP=3:GOSUB 2
22 SD=.5:SP=2:GOSUB 2:SD=1:SP=.:GOSUB 2
30 NEXT
35 FOR I=1 TO 2
40 SD=1:SP=3:GOSUB 2:SD=1:SP=5:GOSUB 2:SD=2:SP=7:GOSUB 2
50 NEXT
55 FOR I=1 TO 2
60 SD=.75:SP=7:GOSUB 2:SD=.25:SP=8:GOSUB 2:SD=.5:SP=7:GOSUB 2
62 SD=.5:SP=5:GOSUB 2:SD=.5:SP=3:GOSUB 2:SD=.5:SP=2:GOSUB 2:SD=1:SP=.:GOSUB 2
70 NEXT
75 FOR I=1 TO 2
80 SD=1:SP=.:GOSUB 2:SD=1:SP=-5:GOSUB 2:SD=2:SP=.:GOSUB 2
90 NEXT
100 GOTO 10
110 END
400 REM SOUND/BEEP/PLAY TONE FOR BASICODE-3 AND -3C FOR COMMANDER X16
402 REM SP=60:C4, 69:A4, 72:C5. SP RANGE 0-127.
404 REM SD IS THE DURATION IN TENTH OF A SECOND.
406 REM SV=15:MAX VOLUME, 7:NORMAL VOL, 0:SILENCE.
407 OS=$F9C0:REM PSG FIRST CHANNEL/VOICE
408 GOSUB 410:GOSUB 440:RETURN
410 REM OF=440*2^((SP-69)/12)
411 REM PRINT SP,OF,
412 REM OW=OF/(48828.125/2^17)
414 REM PRINT OW,
416 OW=9.0112E-03*2^((SP-69)/12+17)
417 REM PRINT OW
418 OH=INT(OW/256)
420 REM OL=INT(OW-256*OH)
422 VPOKE 1,OS,OW-256*OH
424 VPOKE 1,OS+1,OH
426 VPOKE 1,OS+3,63
428 IF SV=. THEN OV=.:GOTO 432
430 OV=$C0+4*SV+3
432 REM PRINT OV
434 VPOKE 1,OS+2,OV
436 RETURN
440 OT=TI:OD=6*SD
442 IF TI-OT<OD GOTO 442
444 VPOKE 1,OS+2,.
446 RETURN