1 REM ============================================ 2 REM SPRITE-DEMO.BAS - C64 Hardware Sprite Demo 3 REM Demonstrates: sprite setup, movement, 4 REM color, enable/disable 5 REM ============================================ 10 REM --- CONSTANTS --- 20 SP = 53248 : REM VIC-II base ($D000) 30 SPENA = SP+21 : REM sprite enable register ($D015) 40 EXTCOL = SP+32 : REM border color ($D020) 50 BGCOL = SP+33 : REM background color ($D021) 60 SPPTR = 2040 : REM sprite 0 pointer (screen RAM + $03F8) 100 REM --- SETUP --- 110 POKE BGCOL, 0 : REM black background 120 POKE EXTCOL, 0 : REM black border 130 PRINT CHR$(147) : REM clear screen 200 REM --- DEFINE SPRITE SHAPE (block 13 = $0340) --- 210 FOR I = 832 TO 894 : POKE I, 0 : NEXT : REM clear block 13 220 REM Draw a simple arrow shape (24 pixels wide x 21 rows) 230 REM Each row = 3 bytes 240 DATA 0,60,0,0,126,0,0,255,0,1,255,128 250 DATA 3,255,192,7,255,224,0,60,0,0,60,0 260 DATA 0,60,0,0,60,0,0,60,0,0,60,0 270 DATA 0,60,0,0,60,0,0,60,0,0,60,0 280 DATA 0,60,0,0,60,0,0,60,0,0,60,0 290 DATA 0,60,0 300 FOR I = 0 TO 62 310 READ D : POKE 832+I, D 320 NEXT I 400 REM --- POINT SPRITE 0 TO BLOCK 13 --- 410 POKE SPPTR, 13 : REM sprite 0 uses block 13 420 REM --- SET SPRITE COLOR --- 430 POKE SP+39, 7 : REM sprite 0 color = yellow ($D027) 440 REM --- ENABLE SPRITE 0 --- 450 POKE SPENA, 1 : REM enable sprite 0 bit 0 500 REM --- ANIMATE: BOUNCE SPRITE ACROSS SCREEN --- 510 X = 40 : Y = 100 : DX = 2 : DY = 1 520 FOR F = 1 TO 500 530 X = X + DX : Y = Y + DY 540 REM Bounce off edges 550 IF X < 24 OR X > 294 THEN DX = -DX 560 IF Y < 50 OR Y > 220 THEN DY = -DY 570 REM Set position 580 IF X > 255 THEN POKE SP+16,(PEEK(SP+16) OR 1) : POKE SP,X-256 590 IF X <= 255 THEN POKE SP+16,(PEEK(SP+16) AND 254) : POKE SP,X 600 POKE SP+1, Y : REM Y position 610 REM Cycle border color every 10 frames 620 IF (F AND 15) = 0 THEN POKE EXTCOL, (PEEK(EXTCOL)+1) AND 15 630 NEXT F 700 REM --- CLEAN UP --- 710 POKE SPENA, 0 : REM disable all sprites 720 POKE BGCOL, 6 : REM restore blue background 730 POKE EXTCOL, 14 : REM restore light blue border 740 PRINT "DONE." 750 END