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