127 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			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#
 | 
						|
 |