|
- 1 REM =============================================
- 2 REM MULTICOLOR SPRITE + MUSIC DEMO
- 3 REM Moves a multicolor sprite while playing a
- 4 REM continuous bass line via the SID chip.
- 5 REM =============================================
- 10 GOSUB 1000: REM INIT SID
- 20 GOSUB 2000: REM INIT SPRITE
- 30 REM === MAIN LOOP ===
- 40 FOR I=0 TO 360 STEP 2
- 50 X=160+INT(100*SIN(I*3.14159/180))
- 60 Y=120+INT(70*COS(I*3.14159/180))
- 70 POKE 53248,X AND 255 : REM SPRITE 0 X LOW
- 80 LO=PEEK(53264) AND 254
- 90 IF X>255 THEN LO=LO OR 1
- 100 POKE 53264,LO : REM SPRITE 0 X HIGH BIT
- 110 POKE 53249,Y : REM SPRITE 0 Y
- 120 N=INT(I/30) AND 7
- 130 GOSUB 3000 : REM PLAY NOTE N
- 140 FOR W=1 TO 200:NEXT W : REM DELAY
- 150 NEXT I
- 160 GOSUB 4000: REM SILENCE
- 170 END
-
- 1000 REM ===== INIT SID =====
- 1010 FOR A=54272 TO 54296:POKE A,0:NEXT A : REM SILENCE ALL
- 1020 POKE 54296,15 : REM MAX VOLUME
- 1030 POKE 54272,0:POKE 54273,40 : REM VOICE 1 FREQ ~440Hz (A4)
- 1040 POKE 54277,9 : REM ATTACK=0 DECAY=9
- 1050 POKE 54278,240 : REM SUSTAIN=15 RELEASE=0
- 1060 RETURN
-
- 2000 REM ===== INIT SPRITE =====
- 2010 REM --- define multicolor ship sprite at $2000 (pointer $80) ---
- 2020 BASE=8192: REM $2000
- 2030 DATA 0,126,0, 0,255,128, 1,219,192, 3,189,224
- 2040 DATA 7,255,240, 15,255,248, 31,255,252, 63,255,254
- 2050 DATA 127,255,255, 127,255,255, 63,255,254, 31,255,252
- 2060 DATA 15,255,248, 7,255,240, 3,255,224, 1,219,192
- 2070 DATA 0,255,128, 0,126,0, 0,60,0, 0,24,0, 0,0,0
- 2080 FOR J=0 TO 62: READ D: POKE BASE+J,D: NEXT J
- 2090 POKE 2040,128 : REM SPRITE 0 POINTER = $80 (= $2000)
- 2100 POKE 53287,10 : REM SPRITE 0 COLOR = LIGHT RED
- 2110 POKE 53285,1 : REM MULTICOLOR #1 = WHITE
- 2120 POKE 53286,2 : REM MULTICOLOR #2 = RED
- 2130 POKE 53276,PEEK(53276) OR 1 : REM SPRITE 0 MULTICOLOR ON
- 2140 POKE 53277,PEEK(53277) OR 1 : REM SPRITE 0 X-EXPAND
- 2150 POKE 53271,PEEK(53271) OR 1 : REM SPRITE 0 Y-EXPAND
- 2160 POKE 53269,1 : REM ENABLE SPRITE 0
- 2170 RETURN
-
- 3000 REM ===== PLAY NOTE N =====
- 3010 REM FREQUENCY TABLE (lo,hi) for C major scale
- 3020 REM C4=4291, D4=4817, E4=5405, F4=5727, G4=6428, A4=7213, B4=8097, C5=8583
- 3030 FL=0:FH=0
- 3040 IF N=0 THEN FL=195:FH=16 : REM C4
- 3050 IF N=1 THEN FL=209:FH=18 : REM D4
- 3060 IF N=2 THEN FL=29:FH=21 : REM E4
- 3070 IF N=3 THEN FL=95:FH=22 : REM F4
- 3080 IF N=4 THEN FL=28:FH=25 : REM G4
- 3090 IF N=5 THEN FL=45:FH=28 : REM A4
- 3100 IF N=6 THEN FL=161:FH=31 : REM B4
- 3110 IF N=7 THEN FL=7:FH=33 : REM C5
- 3120 POKE 54272,FL : REM SET FREQ LOW
- 3130 POKE 54273,FH : REM SET FREQ HIGH
- 3140 POKE 54276,33 : REM TRIANGLE WAVE + GATE ON
- 3150 RETURN
-
- 4000 REM ===== SILENCE =====
- 4010 POKE 54276,32 : REM GATE OFF (RELEASE)
- 4020 FOR W=1 TO 500:NEXT W
- 4030 POKE 54276,0
- 4040 POKE 54296,0 : REM VOLUME OFF
- 4050 POKE 53269,0 : REM SPRITES OFF
- 4060 RETURN
|