mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			232 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			232 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
''***************************************
 | 
						|
''*  TV Text 40x13 v1.0                 *
 | 
						|
''*  Author: Chip Gracey                *
 | 
						|
''*  Copyright (c) 2006 Parallax, Inc.  *               
 | 
						|
''*  See end of file for terms of use.  *               
 | 
						|
''***************************************
 | 
						|
 | 
						|
CON
 | 
						|
 | 
						|
  cols = 40
 | 
						|
  rows = 13
 | 
						|
 | 
						|
  screensize = cols * rows
 | 
						|
  lastrow = screensize - cols
 | 
						|
 | 
						|
  tv_count = 14
 | 
						|
 | 
						|
  
 | 
						|
VAR
 | 
						|
 | 
						|
  long  col, row, color, flag
 | 
						|
  
 | 
						|
  word  screen[screensize]
 | 
						|
  long  colors[8 * 2]
 | 
						|
 | 
						|
  long  tv_status     '0/1/2 = off/invisible/visible              read-only   (14 longs)
 | 
						|
  long  tv_enable     '0/non-0 = off/on                           write-only
 | 
						|
  long  tv_pins       '%pppmmmm = pin group, pin group mode       write-only
 | 
						|
  long  tv_mode       '%tccip = tile,chroma,interlace,ntsc/pal    write-only
 | 
						|
  long  tv_screen     'pointer to screen (words)                  write-only      
 | 
						|
  long  tv_colors     'pointer to colors (longs)                  write-only                            
 | 
						|
  long  tv_ht         'horizontal tiles                           write-only                            
 | 
						|
  long  tv_vt         'vertical tiles                             write-only                            
 | 
						|
  long  tv_hx         'horizontal tile expansion                  write-only                            
 | 
						|
  long  tv_vx         'vertical tile expansion                    write-only                            
 | 
						|
  long  tv_ho         'horizontal offset                          write-only                            
 | 
						|
  long  tv_vo         'vertical offset                            write-only                            
 | 
						|
  long  tv_broadcast  'broadcast frequency (Hz)                   write-only                            
 | 
						|
  long  tv_auralcog   'aural fm cog                               write-only                            
 | 
						|
 | 
						|
 | 
						|
OBJ
 | 
						|
 | 
						|
  tv : "tv"
 | 
						|
 | 
						|
 | 
						|
PUB start(basepin) : okay
 | 
						|
 | 
						|
'' Start terminal - starts a cog
 | 
						|
'' returns false if no cog available
 | 
						|
 | 
						|
  setcolors(@palette)
 | 
						|
  out(0)
 | 
						|
  
 | 
						|
  longmove(@tv_status, @tv_params, tv_count)
 | 
						|
  tv_pins := (basepin & $38) << 1 | (basepin & 4 == 4) & %0101
 | 
						|
  tv_screen := @screen
 | 
						|
  tv_colors := @colors
 | 
						|
  
 | 
						|
  okay := tv.start(@tv_status)
 | 
						|
 | 
						|
 | 
						|
PUB stop
 | 
						|
 | 
						|
'' Stop terminal - frees a cog
 | 
						|
 | 
						|
  tv.stop
 | 
						|
 | 
						|
 | 
						|
PUB str(stringptr)
 | 
						|
 | 
						|
'' Print a zero-terminated string
 | 
						|
 | 
						|
  repeat strsize(stringptr)
 | 
						|
    out(byte[stringptr++])
 | 
						|
 | 
						|
 | 
						|
PUB dec(value) | i
 | 
						|
 | 
						|
'' Print a decimal number
 | 
						|
 | 
						|
  if value < 0
 | 
						|
    -value
 | 
						|
    out("-")
 | 
						|
 | 
						|
  i := 1_000_000_000
 | 
						|
 | 
						|
  repeat 10
 | 
						|
    if value => i
 | 
						|
      out(value / i + "0")
 | 
						|
      value //= i
 | 
						|
      result~~
 | 
						|
    elseif result or i == 1
 | 
						|
      out("0")
 | 
						|
    i /= 10
 | 
						|
 | 
						|
 | 
						|
PUB hex(value, digits)
 | 
						|
 | 
						|
'' Print a hexadecimal number
 | 
						|
 | 
						|
  value <<= (8 - digits) << 2
 | 
						|
  repeat digits
 | 
						|
    out(lookupz((value <-= 4) & $F : "0".."9", "A".."F"))
 | 
						|
 | 
						|
 | 
						|
PUB bin(value, digits)
 | 
						|
 | 
						|
'' Print a binary number
 | 
						|
 | 
						|
  value <<= 32 - digits
 | 
						|
  repeat digits
 | 
						|
    out((value <-= 1) & 1 + "0")
 | 
						|
 | 
						|
 | 
						|
PUB out(c) | i, k
 | 
						|
 | 
						|
'' Output a character
 | 
						|
''
 | 
						|
''     $00 = clear screen
 | 
						|
''     $01 = home
 | 
						|
''     $08 = backspace
 | 
						|
''     $09 = tab (8 spaces per)
 | 
						|
''     $0A = set X position (X follows)
 | 
						|
''     $0B = set Y position (Y follows)
 | 
						|
''     $0C = set color (color follows)
 | 
						|
''     $0D = return
 | 
						|
''  others = printable characters
 | 
						|
 | 
						|
  case flag
 | 
						|
    $00: case c
 | 
						|
           $00: wordfill(@screen, $220, screensize)
 | 
						|
                col := row := 0
 | 
						|
           $01: col := row := 0
 | 
						|
           $08: if col
 | 
						|
                  col--
 | 
						|
           $09: repeat
 | 
						|
                  print(" ")
 | 
						|
                while col & 7
 | 
						|
           $0A..$0C: flag := c
 | 
						|
                     return
 | 
						|
           $0D: newline
 | 
						|
           other: print(c)
 | 
						|
    $0A: col := c // cols
 | 
						|
    $0B: row := c // rows
 | 
						|
    $0C: color := c & 7
 | 
						|
  flag := 0
 | 
						|
 | 
						|
 | 
						|
PUB setcolors(colorptr) | i, fore, back
 | 
						|
 | 
						|
'' Override default color palette
 | 
						|
'' colorptr must point to a list of up to 8 colors
 | 
						|
'' arranged as follows:
 | 
						|
''
 | 
						|
''               fore   back
 | 
						|
''               ------------
 | 
						|
'' palette  byte color, color     'color 0
 | 
						|
''          byte color, color     'color 1
 | 
						|
''          byte color, color     'color 2
 | 
						|
''          ...
 | 
						|
 | 
						|
  repeat i from 0 to 7
 | 
						|
    fore := byte[colorptr][i << 1]
 | 
						|
    back := byte[colorptr][i << 1 + 1]
 | 
						|
    colors[i << 1]     := fore << 24 + back << 16 + fore << 8 + back
 | 
						|
    colors[i << 1 + 1] := fore << 24 + fore << 16 + back << 8 + back
 | 
						|
 | 
						|
 | 
						|
PRI print(c)
 | 
						|
 | 
						|
  screen[row * cols + col] := (color << 1 + c & 1) << 10 + $200 + c & $FE
 | 
						|
  if ++col == cols
 | 
						|
    newline
 | 
						|
 | 
						|
 | 
						|
PRI newline | i
 | 
						|
 | 
						|
  col := 0
 | 
						|
  if ++row == rows
 | 
						|
    row--
 | 
						|
    wordmove(@screen, @screen[cols], lastrow)   'scroll lines
 | 
						|
    wordfill(@screen[lastrow], $220, cols)      'clear new line
 | 
						|
 | 
						|
 | 
						|
DAT
 | 
						|
 | 
						|
tv_params               long    0               'status
 | 
						|
                        long    1               'enable
 | 
						|
                        long    0               'pins
 | 
						|
                        long    %10010          'mode
 | 
						|
                        long    0               'screen
 | 
						|
                        long    0               'colors
 | 
						|
                        long    cols            'hc
 | 
						|
                        long    rows            'vc
 | 
						|
                        long    4               'hx
 | 
						|
                        long    1               'vx
 | 
						|
                        long    0               'ho
 | 
						|
                        long    0               'vo
 | 
						|
                        long    0               'broadcast
 | 
						|
                        long    0               'auralcog
 | 
						|
 | 
						|
 | 
						|
                        '       fore   back
 | 
						|
                        '       color  color
 | 
						|
palette                 byte    $07,   $0A    '0    white / dark blue
 | 
						|
                        byte    $07,   $BB    '1    white / red
 | 
						|
                        byte    $9E,   $9B    '2   yellow / brown
 | 
						|
                        byte    $04,   $07    '3     grey / white
 | 
						|
                        byte    $3D,   $3B    '4     cyan / dark cyan
 | 
						|
                        byte    $6B,   $6E    '5    green / gray-green
 | 
						|
                        byte    $BB,   $CE    '6      red / pink
 | 
						|
                        byte    $3C,   $0A    '7     cyan / blue
 | 
						|
 | 
						|
{{
 | 
						|
 | 
						|
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
						|
│                                                   TERMS OF USE: MIT License                                                  │                                                            
 | 
						|
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
 | 
						|
│Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation    │ 
 | 
						|
│files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,    │
 | 
						|
│modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│
 | 
						|
│is furnished to do so, subject to the following conditions:                                                                   │
 | 
						|
│                                                                                                                              │
 | 
						|
│The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│
 | 
						|
│                                                                                                                              │
 | 
						|
│THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE          │
 | 
						|
│WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR         │
 | 
						|
│COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,   │
 | 
						|
│ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                         │
 | 
						|
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 | 
						|
}}                         |