1+ 10 ' SPRITE SHEET DEMO - ASM MEMCOPY
2+ 20 SCREEN 1 : CLS : KEY OFF
3+ 30 STRIDE% = 34 : SBYTES% = 68
4+ 40 DIM BIG%(169 ): DIM SPR%(33 ): DIM MC%(19 )
5+ 50 ' Pre-allocate all variables
6+ 60 MEMCOPY= 0 : SRC%= 0 : DST%= 0 : CNT%= 0
7+ 70 N%= 0 : X%= 0 : A$= ""
8+ 80 DEF SEG
9+ 90 BLOAD "MEMCOPY.BSV" ,VARPTR (MC%(0 ))
10+ 100 MEMCOPY = VARPTR (MC%(0 ))
11+ 110 ' Draw 5 sprites side by side
12+ 120 LINE (0 ,0 )- (15 ,15 ), 1 , BF
13+ 130 CIRCLE (27 ,7 ), 7 , 2 : PAINT (27 ,7 ), 2
14+ 140 LINE (40 ,0 )- (55 ,15 ), 3 : LINE (55 ,0 )- (40 ,15 ), 3
15+ 150 LINE (67 ,0 )- (75 ,7 ),1 : LINE (75 ,7 )- (67 ,15 ),1
16+ 160 LINE (67 ,15 )- (60 ,7 ),1 : LINE (60 ,7 )- (67 ,0 ),1
17+ 170 PAINT (67 ,7 ), 1
18+ 180 LINE (87 ,0 )- (80 ,15 ), 2
19+ 190 LINE (80 ,15 )- (95 ,15 ), 2
20+ 200 LINE (95 ,15 )- (87 ,0 ), 2 : PAINT (87 ,10 ), 2
21+ 210 LOCATE 5 ,1 : PRINT "Sprites drawn. Press key..."
22+ 220 A$ = INPUT $(1 )
23+ 230 ' GET each into SPR%, copy to BIG%
24+ 240 CNT% = SBYTES%
25+ 250 FOR N% = 0 TO 4
26+ 260 X% = N% * 20
27+ 270 GET (X%,0 )- (X%+ 15 ,15 ), SPR%
28+ 280 SRC% = VARPTR (SPR%(0 ))
29+ 290 DST% = VARPTR (BIG%(0 )) + N% * SBYTES%
30+ 300 CALL MEMCOPY(SRC%, DST%, CNT%)
31+ 310 NEXT
32+ 320 ' Clear and display from BIG%
33+ 330 CLS
34+ 340 LOCATE 2 ,1 : PRINT "From BIG%:"
35+ 350 FOR N% = 0 TO 4
36+ 360 SRC% = VARPTR (BIG%(0 )) + N% * SBYTES%
37+ 370 DST% = VARPTR (SPR%(0 ))
38+ 380 CALL MEMCOPY(SRC%, DST%, CNT%)
39+ 390 PUT (20 + N% * 55 , 30 ), SPR%
40+ 400 NEXT
41+ 410 LOCATE 10 ,1 : PRINT "Reversed:"
42+ 420 FOR N% = 4 TO 0 STEP - 1
43+ 430 SRC% = VARPTR (BIG%(0 )) + N% * SBYTES%
44+ 440 DST% = VARPTR (SPR%(0 ))
45+ 450 CALL MEMCOPY(SRC%, DST%, CNT%)
46+ 460 PUT (20 + (4 - N%) * 55 , 90 ), SPR%
47+ 470 NEXT
48+ 480 LOCATE 23 ,1 : PRINT "Done! Press key..."
49+ 490 A$ = INPUT $(1 )
50+ 500 SCREEN 0 : WIDTH 80 : END
0 commit comments