98 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                                                                       |
 | 
						|
|       Screen test                                                     |
 | 
						|
|                                                                       |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
gcl0x
 | 
						|
 | 
						|
{
 | 
						|
  This is the original Easter Egg "hidden" in ROM v1.
 | 
						|
  So the names are obscured, and originally this file was uncommented.
 | 
						|
 | 
						|
  The image data is a stream of packed 6-bit pixels from ROM.
 | 
						|
  The pixel data is XORed with all-ones (63).
 | 
						|
  The value after a raw zero is a repeat count for 1..63 white pixels.
 | 
						|
  If the repeat count is 0, we are at the end of the image.
 | 
						|
}
 | 
						|
 | 
						|
$0101 ShiftControl=
 | 
						|
 | 
						|
[def
 | 
						|
  { Select random screen memory position `q': }
 | 
						|
  { X ranges from 0..255 and Y from 8..127 }
 | 
						|
  [do
 | 
						|
    \SYS_Random_34 _sysFn= 34!! q=
 | 
						|
    q>, 120- if>=0loop]
 | 
						|
  128+ q>.
 | 
						|
 | 
						|
  q r= 72+ r<.                  {End of line `r', 72 pixels wide image}
 | 
						|
  0 i=                          {Index in unpacked byte buffer}
 | 
						|
  n=                            {Count, or -1 when reading new count}
 | 
						|
 | 
						|
  { Loop until end of image stream }
 | 
						|
  [do
 | 
						|
    { Fill buffer with next group of 4 bytes when needed }
 | 
						|
    n [if<=0
 | 
						|
      i [if=0                   {Reached end of unpack buffer}
 | 
						|
        p 0?? \sysArgs0.        {Packed byte 0}
 | 
						|
        p 1?? \sysArgs1.        {Packed byte 1}
 | 
						|
        p 2?? \sysArgs2.        {Packed byte 2}
 | 
						|
        p 3+ p= 255&            {Advance read pointer}
 | 
						|
        249^ [if=0 p 7+ p=]     {Skip trampolines}
 | 
						|
        \SYS_Unpack_56 _sysFn=
 | 
						|
        56!!                    {Unpack 3 to 4 bytes}
 | 
						|
      ]
 | 
						|
      n
 | 
						|
    ]
 | 
						|
 | 
						|
    [if<0                       {n == -1}
 | 
						|
      { Read repeat count for white pixels }
 | 
						|
      \sysArgs0 i+ peek n=
 | 
						|
      [if=0 ret]                {End of image}
 | 
						|
      i 1+ 3& i=                {Rotate through 4-byte unpack buffer}
 | 
						|
    else
 | 
						|
      [if>0                     {n > 0}
 | 
						|
        { Force white pixel }
 | 
						|
        63 q.
 | 
						|
        n 1- n=
 | 
						|
        q<++                    {Update X, but don't update i}
 | 
						|
      else                      {n == 0, normal operation}
 | 
						|
        { Consume next pixel from stream }
 | 
						|
        \sysArgs0 i+ peek [if<>0
 | 
						|
          63^ q.                {New pixel, not white}
 | 
						|
          q<++
 | 
						|
        else
 | 
						|
          -1 n=                 {Next value is a repeat count}
 | 
						|
        ]
 | 
						|
        i 1+ 3& i=              {Rotate through 4-byte unpack buffer}
 | 
						|
      ]
 | 
						|
    ]
 | 
						|
 | 
						|
    { Wrap write pointer }
 | 
						|
    q r- [if=0
 | 
						|
       0 q.                     {1 pixel border/shadow on the right side}
 | 
						|
       q 72- q<. q>++           {Next line}
 | 
						|
       q [if<0 $8800 q+ q=]     {Wrap around bottom of screen memory}
 | 
						|
       q>, r>.
 | 
						|
    ]
 | 
						|
 | 
						|
    \frameCount, ShiftControl.  {Smooth scrolling}
 | 
						|
  loop]
 | 
						|
] Transfer=
 | 
						|
 | 
						|
{--- Run ---}
 | 
						|
 | 
						|
[do
 | 
						|
  \gigatronRaw p=               {Pointer to packed image data}
 | 
						|
                                { Contains the packed image data for}
 | 
						|
                                { Marcel's and Walter's portraits}
 | 
						|
  Transfer!                     {Unpack and draw first image}
 | 
						|
  Transfer!                     {Unpack and draw second image}
 | 
						|
  loop]                         {Repeat forever}
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|       End                                                             |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
 |