1 REM ============================================= 2 REM SOUND-DEMO.BAS — C64 SID Chip Sound Demo 3 REM Demonstrates: 3-voice music, ADSR, waveforms 4 REM ============================================= 10 SID = 54272 : REM SID base ($D400) 20 VOL = SID+24 : REM master volume ($D418) 30 POKE VOL, 15 : REM Volume = 15 (maximum) 100 REM --- PLAY A SIMPLE MELODY (Voice 1) --- 110 REM Frequency values for NTSC C64 120 REM C4=4313, D4=4842, E4=5431, F4=5760, G4=6433, A4=7372, B4=7992, C5=8627 130 DIM NOTE%(7) 140 NOTE%(0) = 4313 : REM C4 150 NOTE%(1) = 4842 : REM D4 160 NOTE%(2) = 5431 : REM E4 170 NOTE%(3) = 5760 : REM F4 180 NOTE%(4) = 6433 : REM G4 190 NOTE%(5) = 7372 : REM A4 200 NOTE%(6) = 7992 : REM B4 210 REM ADSR for voice 1: fast attack, short decay, sustain 12, medium release 220 POKE SID+5, 9 : REM attack=0(2ms), decay=9(250ms) 230 POKE SID+6, 192 : REM sustain=12, release=0 240 REM Sawtooth waveform 250 WAVEFORM = 32 : REM %00100000 = sawtooth 300 REM --- MELODY LOOP --- 310 FOR I = 0 TO 6 320 F = NOTE%(I) 330 POKE SID, F AND 255 : REM frequency low 340 POKE SID+1, INT(F/256) : REM frequency high 350 POKE SID+4, WAVEFORM OR 1 : REM start note (gate on) 360 FOR W = 1 TO 150 : NEXT : REM hold note 370 POKE SID+4, WAVEFORM : REM release (gate off) 380 FOR W = 1 TO 50 : NEXT : REM short gap 390 NEXT I 400 REM --- 3-VOICE CHORD (C major) --- 410 PRINT "PLAYING C MAJOR CHORD..." 420 REM Voice 1: C4 430 POKE SID, 4313 AND 255 : POKE SID+1, INT(4313/256) 440 POKE SID+5, 2 : POKE SID+6, 240 : REM slow attack, sustain 15 450 POKE SID+4, 33 : REM triangle + gate 460 REM Voice 2: E4 470 POKE SID+7, 5431 AND 255 : POKE SID+8, INT(5431/256) 480 POKE SID+12, 2 : POKE SID+13, 240 490 POKE SID+11, 17 : REM triangle + gate (voice 2 control = SID+11) 500 REM Voice 3: G4 510 POKE SID+14, 6433 AND 255 : POKE SID+15, INT(6433/256) 520 POKE SID+19, 2 : POKE SID+20, 240 530 POKE SID+18, 17 : REM triangle + gate (voice 3 control = SID+18) 540 FOR W = 1 TO 500 : NEXT : REM hold chord 550 REM Release all voices 560 POKE SID+4, 16 : REM voice 1 release 570 POKE SID+11, 16 : REM voice 2 release 580 POKE SID+18, 16 : REM voice 3 release 590 FOR W = 1 TO 300 : NEXT 600 REM --- NOISE EFFECT (explosion) --- 610 PRINT "EXPLOSION SOUND..." 620 POKE SID+5, 0 : POKE SID+6, 0 : REM instant attack+decay+release 630 POKE SID, 255 : POKE SID+1, 255 : REM high frequency for noise 640 POKE SID+4, 129 : REM noise + gate (%10000001) 650 FOR W = 1 TO 100 : NEXT 660 POKE SID+4, 128 : REM gate off 700 REM --- CLEAN UP --- 710 FOR W = 1 TO 200 : NEXT : REM wait for release 720 POKE VOL, 0 : REM silence 730 PRINT "DONE."