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>
|
||
+------------------------------------------------------------------------------------------------------------------------------+
|
||
}} |