gigatron/rom/Apps/Sprites/Sprites_v1.gcl
2025-01-28 19:17:01 +03:00

127 lines
4.6 KiB
Plaintext

{-----------------------------------------------------------------------+
| |
| Demonstration of accelerated sprite rendering |
| |
+-----------------------------------------------------------------------}
gcl0x {GCL version for this program}
{-----------------------------------------------------------------------+
| RAM page 2 |
+-----------------------------------------------------------------------}
$800 p= {Top of screen}
\romType, \romTypeValue_ROMv3- {Test for ROMv3}
[if<0 [do p. 1+ loop]] {Halt and blink pixel on older ROM}
[def
{. . . . . .|. . . . . . 3 lines of border top and down
. . . . . .|. . . . . . for the fast changes in Y position
. . . . . .|. . . . . .
. . . . O O|O O O . . .
. . O O O O|O O O O O .
. O O O O .|O O O O . O
. O O O . @|@ O O . @ @
. O O O . @|@ O O . @ @
. O O O O .|O O O O . O
. O O O O O|O O O O O O
. O O O O O|O O O O O O
. O O . . O|O . O O . O
. O . . O O|. . O . . O
. . . . . .|. . . . . .
. . . . . .|. . . . . .
. . . . . .|. . . . . .}
0# 0# 0# 0# 0# 0# {Left side}
0# 0# 0# 0# 0# 0#
0# 0# 0# 0# 0# 0#
0# 0# 0# 0# 3# 3#
0# 0# 3# 3# 3# 3#
0# 3# 3# 3# 3# 63#
0# 3# 3# 3# 63# 48#
0# 3# 3# 3# 63# 48#
0# 3# 3# 3# 3# 63#
0# 3# 3# 3# 3# 3#
0# 3# 3# 3# 3# 3#
0# 3# 3# 0# 0# 3#
0# 3# 0# 0# 3# 3#
0# 0# 0# 0# 0# 0#
0# 0# 0# 0# 0# 0#
0# 0# 0# 0# 0# 0# 240#
0# 0# 0# 0# 0# 0# {Right side}
0# 0# 0# 0# 0# 0#
0# 0# 0# 0# 0# 0#
3# 3# 3# 0# 0# 0#
3# 3# 3# 3# 3# 0#
3# 3# 3# 3# 63# 3#
48# 3# 3# 63# 48# 48#
48# 3# 3# 63# 48# 48#
3# 3# 3# 3# 63# 3#
3# 3# 3# 3# 3# 3#
3# 3# 3# 3# 3# 3#
3# 0# 3# 3# 0# 3#
0# 0# 3# 0# 0# 3#
0# 0# 0# 0# 0# 0#
0# 0# 0# 0# 0# 0#
0# 0# 0# 0# 0# 0# 240#
] Image=
{-----------------------------------------------------------------------+
|}\vLR>++ ret{ RAM page 3 |
+-----------------------------------------------------------------------}
$0300:
257 p= 11 p. {Shift screen left by 11 pixels}
\SYS_Sprite6_v3_64 \sysFn: {Sprite drawing function}
$500 T= {Pointer to sine table}
0 i= j=
[do
{ Draw 15 sprites }
i p<. {Left-most sprite}
[do
p j+ 255& T+ peek p>. {Y coordinate}
Image \sysArgs0: {Setup SYS call}
p
64!! {Draw first half}
64!! {Draw second half}
p<. 255& 170- {Until right edge}
if<0loop]
{ Update coefficients }
i 11- [if<0 12+] i= {i = (i+1) % 12 }
j 1+ j=
loop]
$0500:
{ Sine table }
60# 61# 63# 64# 65# 66# 68# 69# 70# 71# 73#
74# 75# 76# 78# 79# 80# 81# 82# 83# 85# 86#
87# 88# 89# 90# 91# 92# 93# 94# 95# 96# 97#
98# 99# 99# 100# 101# 102# 103# 103# 104# 105# 105#
106# 106# 107# 108# 108# 109# 109# 109# 110# 110# 110#
111# 111# 111# 111# 112# 112# 112# 112# 112# 112# 112#
112# 112# 112# 112# 111# 111# 111# 111# 110# 110# 110#
109# 109# 109# 108# 108# 107# 106# 106# 105# 105# 104#
103# 103# 102# 101# 100# 99# 99# 98# 97# 96# 95#
94# 93# 92# 91# 90# 89# 88# 87# 86# 85# 83#
82# 81# 80# 79# 78# 76# 75# 74# 73# 71# 70#
69# 68# 66# 65# 64# 63# 61# 60# 59# 57# 56#
55# 54# 52# 51# 50# 49# 47# 46# 45# 44# 42#
41# 40# 39# 38# 37# 35# 34# 33# 32# 31# 30#
29# 28# 27# 26# 25# 24# 23# 22# 21# 21# 20#
19# 18# 17# 17# 16# 15# 15# 14# 14# 13# 12#
12# 11# 11# 11# 10# 10# 10# 9# 9# 9# 9#
8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8#
9# 9# 9# 9# 10# 10# 10# 11# 11# 11# 12#
12# 13# 14# 14# 15# 15# 16# 17# 17# 18# 19#
20# 21# 21# 22# 23# 24# 25# 26# 27# 28# 29#
30# 31# 32# 33# 34# 35# 37# 38# 39# 40# 41#
42# 44# 45# 46# 47# 49# 50# 51# 52# 54# 55#
56# 57# 59#