mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 01:30:22 +00:00
244 lines
8.6 KiB
Plaintext
244 lines
8.6 KiB
Plaintext
''***************************************
|
|
''* TV Terminal v1.1 *
|
|
''* Author: Chip Gracey *
|
|
''* Copyright (c) 2005 Parallax, Inc. *
|
|
''* See end of file for terms of use. *
|
|
''***************************************
|
|
|
|
{-----------------REVISION HISTORY-----------------
|
|
v1.1 - Updated 5/15/2006 to use actual pin number, instead of pin group, for Start method's basepin parameter.}
|
|
|
|
CON
|
|
|
|
x_tiles = 16
|
|
y_tiles = 13
|
|
|
|
x_screen = x_tiles << 4
|
|
y_screen = y_tiles << 4
|
|
|
|
width = 0 '0 = minimum
|
|
x_scale = 1 '1 = minimum
|
|
y_scale = 1 '1 = minimum
|
|
x_spacing = 6 '6 = normal
|
|
y_spacing = 13 '13 = normal
|
|
|
|
x_chr = x_scale * x_spacing
|
|
y_chr = y_scale * y_spacing
|
|
|
|
y_offset = y_spacing / 6 + y_chr - 1
|
|
|
|
x_limit = x_screen / (x_scale * x_spacing)
|
|
y_limit = y_screen / (y_scale * y_spacing)
|
|
y_max = y_limit - 1
|
|
|
|
y_screen_bytes = y_screen << 2
|
|
y_scroll = y_chr << 2
|
|
y_scroll_longs = y_chr * y_max
|
|
y_clear = y_scroll_longs << 2
|
|
y_clear_longs = y_screen - y_scroll_longs
|
|
|
|
paramcount = 14
|
|
|
|
|
|
VAR
|
|
|
|
long x, y, bitmap_base
|
|
|
|
long tv_status '0/1/2 = off/visible/invisible read-only
|
|
long tv_enable '0/? = off/on write-only
|
|
long tv_pins '%ppmmm = pins write-only
|
|
long tv_mode '%ccinp = chroma,interlace,ntsc/pal,swap write-only
|
|
long tv_screen 'pointer to screen (words) write-only
|
|
long tv_colors 'pointer to colors (longs) write-only
|
|
long tv_hc 'horizontal cells write-only
|
|
long tv_vc 'vertical cells write-only
|
|
long tv_hx 'horizontal cell expansion write-only
|
|
long tv_vx 'vertical cell 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
|
|
|
|
long bitmap[x_tiles * y_tiles << 4 + 16] 'add 16 longs to allow for 64-byte alignment
|
|
word screen[x_tiles * y_tiles]
|
|
|
|
|
|
OBJ
|
|
|
|
tv : "tv"
|
|
gr : "graphics"
|
|
|
|
|
|
PUB start(basepin)
|
|
|
|
'' Start terminal
|
|
''
|
|
'' basepin = first of three pins on a 4-pin boundary (0, 4, 8...) to have
|
|
'' 1.1k, 560, and 270 ohm resistors connected and summed to form the 1V,
|
|
'' 75 ohm DAC for baseband video
|
|
|
|
'init bitmap and tile screen
|
|
bitmap_base := (@bitmap + $3F) & $7FC0
|
|
repeat x from 0 to x_tiles - 1
|
|
repeat y from 0 to y_tiles - 1
|
|
screen[y * x_tiles + x] := bitmap_base >> 6 + y + x * y_tiles
|
|
|
|
'start tv
|
|
tvparams_pins := (basepin & $38) << 1 | (basepin & 4 == 4) & %0101
|
|
longmove(@tv_status, @tvparams, paramcount)
|
|
tv_screen := @screen
|
|
tv_colors := @color_schemes
|
|
tv.start(@tv_status)
|
|
|
|
'start graphics
|
|
gr.start
|
|
gr.setup(x_tiles, y_tiles, 0, y_screen, bitmap_base)
|
|
gr.textmode(x_scale, y_scale, x_spacing, 0)
|
|
gr.width(width)
|
|
out(0)
|
|
|
|
|
|
PUB stop
|
|
|
|
'' Stop terminal
|
|
|
|
tv.stop
|
|
gr.stop
|
|
|
|
|
|
PUB out(c)
|
|
|
|
'' Print a character
|
|
''
|
|
'' $00 = home
|
|
'' $01..$03 = color
|
|
'' $04..$07 = color schemes
|
|
'' $09 = tab
|
|
'' $0D = return
|
|
'' $20..$7E = character
|
|
|
|
case c
|
|
|
|
$00: 'home?
|
|
gr.clear
|
|
x := y := 0
|
|
|
|
$01..$03: 'color?
|
|
gr.color(c)
|
|
|
|
$04..$07: 'color scheme?
|
|
tv_colors := @color_schemes[c & 3]
|
|
|
|
$09: 'tab?
|
|
repeat
|
|
out($20)
|
|
while x & 7
|
|
|
|
$0D: 'return?
|
|
newline
|
|
|
|
$20..$7E: 'character?
|
|
gr.text(x * x_chr, -y * y_chr - y_offset, @c)
|
|
gr.finish
|
|
if ++x == x_limit
|
|
newline
|
|
|
|
|
|
PUB str(string_ptr)
|
|
|
|
'' Print a zero-terminated string
|
|
|
|
repeat strsize(string_ptr)
|
|
out(byte[string_ptr++])
|
|
|
|
|
|
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")
|
|
|
|
|
|
PRI newline
|
|
|
|
if ++y == y_limit
|
|
gr.finish
|
|
repeat x from 0 to x_tiles - 1
|
|
y := bitmap_base + x * y_screen_bytes
|
|
longmove(y, y + y_scroll, y_scroll_longs)
|
|
longfill(y + y_clear, 0, y_clear_longs)
|
|
y := y_max
|
|
x := 0
|
|
|
|
|
|
DAT
|
|
|
|
tvparams long 0 'status
|
|
long 1 'enable
|
|
tvparams_pins long %001_0101 'pins
|
|
long %0000 'mode
|
|
long 0 'screen
|
|
long 0 'colors
|
|
long x_tiles 'hc
|
|
long y_tiles 'vc
|
|
long 10 'hx
|
|
long 1 'vx
|
|
long 0 'ho
|
|
long 0 'vo
|
|
long 55_250_000 'broadcast
|
|
long 0 'auralcog
|
|
|
|
color_schemes long $BC_6C_05_02
|
|
long $0E_0D_0C_0A
|
|
long $6E_6D_6C_6A
|
|
long $BE_BD_BC_BA
|
|
|
|
{{
|
|
|
|
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ 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. │
|
|
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
}} |