|
- 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
|