149 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                                                                       |
 | 
						|
|       Command.gcl                                                     |
 | 
						|
|                                                                       |
 | 
						|
|       !!! Work in progress !!!                                        |
 | 
						|
|                                                                       |
 | 
						|
|       - Prompt with command line input                                |
 | 
						|
|       - Load GT1 command file into RAM                                |
 | 
						|
|       - Run command                                                   |
 | 
						|
|       - Error reporting                                               |
 | 
						|
|                                                                       |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
gcl0x
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                                                                       |
 | 
						|
|       Variables                                                       |
 | 
						|
|                                                                       |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
 | 
						|
zpReset=$48                     {Start GCL vars from $48 instead of $30}
 | 
						|
 | 
						|
_StdOut=$300
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                                                                       |
 | 
						|
|       Transient Program Area                                          |
 | 
						|
|                                                                       |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                       RAM page $08                                    |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
*=$8a0
 | 
						|
 | 
						|
execute=$8a0                    {Overrule GCL's default execution address}
 | 
						|
 | 
						|
{
 | 
						|
  Entry point only used when started from a regular loader (outside GTOS)
 | 
						|
}
 | 
						|
[
 | 
						|
  \screenMemory _r0=            {Top left pixel in screen memory}
 | 
						|
  [do _r0. 1+ loop]             {Blink forever}
 | 
						|
]
 | 
						|
 | 
						|
{
 | 
						|
  Entry point when started from System.gt1
 | 
						|
}
 | 
						|
_Start=*
 | 
						|
[
 | 
						|
  [def `By`Your`Command #10 #0] _dev1!
 | 
						|
  _CommandLoop!                 {Doesn't return}
 | 
						|
]
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                                                                       |
 | 
						|
|       File reading section                                            |
 | 
						|
|                                                                       |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                       RAM page $7f                                    |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
*=$7fa0
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                                                                       |
 | 
						|
|       Main program                                                    |
 | 
						|
|                                                                       |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
 | 
						|
_CommandLoop=*
 | 
						|
[do
 | 
						|
  { XXX: Restore stdout/stdin }
 | 
						|
  _StdOut _dev1=
 | 
						|
 | 
						|
  { XXX: Print newline if needed }
 | 
						|
 | 
						|
  { Print error message if needed }
 | 
						|
{
 | 
						|
  [if<>0
 | 
						|
    { XXX Conditional newline }
 | 
						|
    [def `?Execution`error #10 #0] _dev1!
 | 
						|
  ]
 | 
						|
}
 | 
						|
 | 
						|
  { XXX: Clear error state }
 | 
						|
 | 
						|
  [def `> #0] _dev1!            {Prompt}
 | 
						|
 | 
						|
  { XXX: Read line from stdin in $500, edit with DEL }
 | 
						|
 | 
						|
  _ReadLine!
 | 
						|
 | 
						|
  { XXX: Find file.GT1 on A: }
 | 
						|
 | 
						|
  { XXX: Load first sector }
 | 
						|
 | 
						|
  { XXX: If first segment is $503 }
 | 
						|
 | 
						|
  { XXX: then load with own loader }
 | 
						|
 | 
						|
  { XXX: else load with another loader }
 | 
						|
 | 
						|
  { XXX: and execute }
 | 
						|
 | 
						|
  loop]
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                       RAM page $7e                                    |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
*=$7ea0
 | 
						|
 | 
						|
_ReadLine=*
 | 
						|
[
 | 
						|
  [do loop]
 | 
						|
  ret
 | 
						|
]
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                       RAM page $7d                                    |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
*=$7da0
 | 
						|
 | 
						|
_WaitKey=*
 | 
						|
[
 | 
						|
  ret
 | 
						|
]
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                       RAM page $7c                                    |
 | 
						|
+-----------------------------------------------------------------------}
 | 
						|
*=$7ca0
 | 
						|
 | 
						|
_Execute=*
 | 
						|
[
 | 
						|
  120 [do _r0=                  {Restore video table}
 | 
						|
    _r0+ $fe+ _r1=
 | 
						|
    _r0 7+ _r1. 8- if>0loop]
 | 
						|
 | 
						|
  Address [do if=0loop]         {Stop if not executable}
 | 
						|
  call                          {Run...}
 | 
						|
]
 | 
						|
 | 
						|
{-----------------------------------------------------------------------+
 | 
						|
|                                                                       |
 | 
						|
+-----------------------------------------------------------------------}
 |