194 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                                                                       |
 | 
						|
|       Application menu                                                |
 | 
						|
|                                                                       |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
gcl0x
 | 
						|
 | 
						|
{
 | 
						|
  XXX Gigatron logo drawing
 | 
						|
  XXX Rising planet with bombastic tune (like Space Odyssey)
 | 
						|
}
 | 
						|
 | 
						|
{ Fall into TinyBASIC if [Start] is pressed for >4 seconds }
 | 
						|
\buttonState;                   {Fetch buttonState and resetTimer}
 | 
						|
[if>0                           {If resetTimer positive}
 | 
						|
  16& [if=0                     {And [Start] pressed}
 | 
						|
  \TinyBASIC \sysArgs0: 88!!]]  {Start BASIC. SYS_Exec_88 still in sysFn}
 | 
						|
 | 
						|
{ Print a 5x8 character on screen with the built-in font
 | 
						|
  Char must be in the 32-127 range (this is not checked) }
 | 
						|
[def {PrintChar}
 | 
						|
  {Map ASCII code to offset in font table}
 | 
						|
  Char 82- [if<0 50+ i= \font32up
 | 
						|
            else     i= \font82up] fontData= {Select low or high page}
 | 
						|
  i 2<< i+             {Multiply by 5}
 | 
						|
  fontData+ fontData=  {Add to page address to reach bitmap data for Char}
 | 
						|
 | 
						|
  {Draw 5 vertical slices: 5 using font data}
 | 
						|
  32      \sysArgs0. {Blue}
 | 
						|
  Color   \sysArgs1.
 | 
						|
  Pos     \sysArgs4:
 | 
						|
  6+      Pos=
 | 
						|
  \SYS_VDrawBits_134 \sysFn:
 | 
						|
  $fb i= [do
 | 
						|
    fontData 0? fontData<++ \sysArgs2. 134!!
 | 
						|
    \sysArgs4<++
 | 
						|
    i<++ i if<>0loop]
 | 
						|
  ret
 | 
						|
] PrintChar=
 | 
						|
 | 
						|
[def {PrintText}
 | 
						|
  push
 | 
						|
  Text=
 | 
						|
  [do
 | 
						|
    Text, if<>0 Char= Text<++           {while((Char=*Text++)!=0)...}
 | 
						|
    9^ [if=0 Pos 30+ Pos= loop]         {Horizontal tab}
 | 
						|
    3^ [if=0 Newline! loop]             {Newline 9^10=3}
 | 
						|
    PrintChar!                          {Regular character}
 | 
						|
    loop]
 | 
						|
  pop ret
 | 
						|
] PrintText=
 | 
						|
 | 
						|
[def {Newline}
 | 
						|
  Pos>, 8+ Pos>.
 | 
						|
  0 Pos<.
 | 
						|
  ret
 | 
						|
] Newline=
 | 
						|
 | 
						|
{ Print 26 dashes }
 | 
						|
[def
 | 
						|
 push
 | 
						|
 $2d {'-'} Char=
 | 
						|
 26 [do j= PrintChar! j 1- if>0loop]
 | 
						|
 Newline!
 | 
						|
 pop ret
 | 
						|
] PrintDivider=
 | 
						|
 | 
						|
[def
 | 
						|
  push
 | 
						|
  $200c Pos=
 | 
						|
  Item [do j= $800 Pos+ Pos= j 1- if>=0loop]
 | 
						|
  $2d {'-'} Char= PrintChar!
 | 
						|
  $3e {'>'} Char= PrintChar!
 | 
						|
  pop ret
 | 
						|
] PrintArrow=
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|}\vLR>++ ret{          RAM page 3                                      |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
$0300:
 | 
						|
 | 
						|
[def
 | 
						|
  9# $53# $6e# $61# $6b# $65# 10#                          {Snake}
 | 
						|
  9# $52# $61# $63# $65# $72# 10#                          {Racer}
 | 
						|
  9# $4d# $61# $6e# $64# $65# $6c# $62# $72# $6f# $74# 10# {Mandelbrot}
 | 
						|
  9# $50# $69# $63# $74# $75# $72# $65# $73# 10#           {Pictures}
 | 
						|
  9# $43# $72# $65# $64# $69# $74# $73# 10#                {Credits}
 | 
						|
  9# $4c# $6f# $61# $64# $65# $72# 10#                     {Loader}
 | 
						|
  0#
 | 
						|
] MainMenu=
 | 
						|
 | 
						|
[def
 | 
						|
  { Use [Up/Down] to select}
 | 
						|
  $20# $55# $73# $65# $20# $5b# $55# $70#
 | 
						|
  $2f# $44# $6f# $77# $6e# $5d# $20# $74#
 | 
						|
  $6f# $20# $73# $65# $6c# $65# $63# $74#
 | 
						|
  {Press [A] to start program}
 | 
						|
  10#
 | 
						|
  $50# $72# $65# $73# $73# $20# $5b# $41#
 | 
						|
  $5d# $20# $74# $6f# $20# $73# $74# $61#
 | 
						|
  $72# $74# $20# $70# $72# $6f# $67# $72#
 | 
						|
  $61# $6d#
 | 
						|
  {Hold [Start] for reset}
 | 
						|
  10#
 | 
						|
  10#
 | 
						|
  $48# $6f# $6c# $64# $20# $5b# $53# $74#
 | 
						|
  $61# $72# $74# $5d# $20# $66# $6f# $72#
 | 
						|
  $20# $72# $65# $73# $65# $74#
 | 
						|
  0#
 | 
						|
] HelpText=
 | 
						|
 | 
						|
[def
 | 
						|
  push
 | 
						|
  Pos 12- Pos=
 | 
						|
  $20 {space} Char= PrintChar! PrintChar!
 | 
						|
  pop ret
 | 
						|
] WipeOutArrow=
 | 
						|
 | 
						|
[def {PrintMenu}
 | 
						|
  push
 | 
						|
  42 {Gray}   Color= PrintDivider!
 | 
						|
  15 {Yellow} Color= MainMenu PrintText!
 | 
						|
  42 {Gray}   Color= PrintDivider!
 | 
						|
                     HelpText PrintText!
 | 
						|
  pop ret
 | 
						|
] PrintMenu=
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|}\vLR>++ ret{          RAM page 4                                      |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
$0400:
 | 
						|
 | 
						|
120 \soundTimer.
 | 
						|
 | 
						|
{ Print menu }
 | 
						|
$2000 Pos=
 | 
						|
PrintMenu!
 | 
						|
 | 
						|
{ Operate menu }
 | 
						|
0 Item=
 | 
						|
[do
 | 
						|
  \frameCount, Color= PrintArrow!
 | 
						|
 | 
						|
  { Handle each stroke of Up/Down and A controller buttons }
 | 
						|
 | 
						|
  {buttonUp}
 | 
						|
  \buttonState, 247^ [if=0
 | 
						|
     WipeOutArrow!
 | 
						|
     Item    [if>0 1- else 0] Item=
 | 
						|
     \buttonState, 8| \buttonState.]
 | 
						|
 | 
						|
  {buttonDown}
 | 
						|
  \buttonState, 251^ [if=0
 | 
						|
     WipeOutArrow!
 | 
						|
     Item 5- [if<0 6+ else 5] Item=
 | 
						|
     \buttonState, 4| \buttonState.]
 | 
						|
 | 
						|
  {buttonA}
 | 
						|
  \buttonState, 127^ if<>0loop
 | 
						|
 | 
						|
  42 {Gray} Color= PrintArrow!
 | 
						|
 | 
						|
  { Map menu item to program }
 | 
						|
  Item [if=0 \Snake      else
 | 
						|
  1-   [if=0 \Racer      else
 | 
						|
  1-   [if=0 \Mandelbrot else
 | 
						|
  1-   [if=0 \Pictures   else
 | 
						|
  1-   [if=0 \Credits    else
 | 
						|
  1-   [if=0 \Loader     else loop]]]]]]
 | 
						|
  Program=
 | 
						|
]
 | 
						|
 | 
						|
{ Wipe out everything but the selected and bottom line }
 | 
						|
$800 p= $8801 i=
 | 
						|
Pos>, q= {Y position of current cursor}
 | 
						|
\SYS_VDrawBits_134 \sysFn: 32 \sysArgs0. \sysArgs1.
 | 
						|
[do
 | 
						|
  p>, q- [if<>0
 | 
						|
    p>, $78^ if<>0
 | 
						|
    p \sysArgs4: 134!! {Clears 8 pixels vertically}
 | 
						|
  ]
 | 
						|
  $800 p+ p= if>0loop
 | 
						|
  i+ p=
 | 
						|
  255& 160^ if<>0loop]
 | 
						|
 | 
						|
{ Load and start the selected program }
 | 
						|
Program \sysArgs0: $200 \vLR: \SYS_Exec_88 \sysFn: 88!!
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                                                                       |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
 |