245 lines
8.3 KiB
Plaintext
245 lines
8.3 KiB
Plaintext
![]() |
''***************************************
|
|||
|
''* TV Text 40x13 v1.0 *
|
|||
|
''* Author: Chip Gracey *
|
|||
|
''* Copyright (c) 2006 Parallax, Inc. *
|
|||
|
''* See end of file for terms of use. *
|
|||
|
''***************************************
|
|||
|
|
|||
|
' Modified for ed by Michael Park
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
|
|||
|
PUB printNoAdvance(c) ' mpark
|
|||
|
screen[row * cols + col] := (color << 1 + c & 1) << 10 + $200 + c & $FE
|
|||
|
|
|||
|
PUB SetXY( x, y ) ' mpark
|
|||
|
col := x
|
|||
|
row := y
|
|||
|
|
|||
|
PUB SetX( x ) ' mpark
|
|||
|
col := x
|
|||
|
|
|||
|
PUB SetY( y ) ' mpark
|
|||
|
row := y
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
{{
|
|||
|
|
|||
|
+------------------------------------------------------------------------------------------------------------------------------+
|
|||
|
<EFBFBD> TERMS OF USE: MIT License <20>
|
|||
|
+------------------------------------------------------------------------------------------------------------------------------<2D>
|
|||
|
<EFBFBD>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation <20>
|
|||
|
<EFBFBD>files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, <20>
|
|||
|
<EFBFBD>modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software<72>
|
|||
|
<EFBFBD>is furnished to do so, subject to the following conditions: <20>
|
|||
|
<EFBFBD> <20>
|
|||
|
<EFBFBD>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<2E>
|
|||
|
<EFBFBD> <20>
|
|||
|
<EFBFBD>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE <20>
|
|||
|
<EFBFBD>WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR <20>
|
|||
|
<EFBFBD>COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, <20>
|
|||
|
<EFBFBD>ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. <20>
|
|||
|
+------------------------------------------------------------------------------------------------------------------------------+
|
|||
|
}}
|