213 lines
15 KiB
Plaintext
213 lines
15 KiB
Plaintext
''***************************************
|
|
''* Graphics Palette *
|
|
''* Author: Chip Gracey *
|
|
''* Copyright (c) 2006 Parallax, Inc. *
|
|
''* See end of file for terms of use. *
|
|
''***************************************
|
|
|
|
CON
|
|
|
|
_clkmode = xtal1 + pll16x
|
|
_xinfreq = 5_000_000
|
|
_free = ($3000 + $3000) >> 2 'accomodate bitmap buffers
|
|
_stack = $100 'insure sufficient stack
|
|
|
|
x_tiles = 16
|
|
y_tiles = 12
|
|
|
|
paramcount = 14
|
|
bitmap_base = $2000
|
|
display_base = $5000
|
|
|
|
VAR
|
|
|
|
long mousex, mousey
|
|
|
|
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
|
|
|
|
word screen[x_tiles * y_tiles]
|
|
long colors[64]
|
|
|
|
OBJ
|
|
|
|
tv : "tv"
|
|
gr : "graphics"
|
|
mouse : "mouse"
|
|
|
|
|
|
PUB start | x, y, i, c, k, col
|
|
|
|
'start tv
|
|
longmove(@tv_status, @tvparams, paramcount)
|
|
tv_screen := @screen
|
|
tv_colors := @colors
|
|
tv.start(@tv_status)
|
|
|
|
'init colors
|
|
repeat i from $00 to $0F
|
|
case i
|
|
5..10 : c := $01000000 * (i - 5) + $02020507
|
|
other : c := $07020504
|
|
colors[i] := c
|
|
repeat i from $10 to $1F
|
|
colors[i] := $10100000 * (i & $F) + $0B0A0507
|
|
repeat i from $20 to $2F
|
|
colors[i] := $10100000 * (i & $F) + $0D0C0507
|
|
repeat i from $30 to $3F
|
|
colors[i] := $10100000 * (i & $F) + $080E0507
|
|
|
|
'init tile screen
|
|
repeat x from 0 to tv_hc - 1
|
|
repeat y from 0 to tv_vc - 1
|
|
case y
|
|
0, 2 : i := $30 + x
|
|
3..4 : i := $20 + x
|
|
5..6 : i := $10 + x
|
|
8 : i := x
|
|
other: i := 0
|
|
screen[x + y * tv_hc] := i << 10 + display_base >> 6 + x * tv_vc + y
|
|
|
|
'start and setup graphics
|
|
gr.start
|
|
gr.setup(16, 12, 0, 0, bitmap_base)
|
|
|
|
'start mouse
|
|
mouse.start(19, 18)
|
|
mousex := 128
|
|
mousey := 35
|
|
|
|
repeat
|
|
|
|
'clear bitmap
|
|
gr.clear
|
|
|
|
'draw color samples
|
|
gr.width(14)'(29)
|
|
|
|
'draw saturated samples
|
|
gr.color(3)
|
|
repeat x from 0 to 15
|
|
gr.plot(x << 4 + 7, 183)
|
|
|
|
'draw gradient samples
|
|
repeat y from 2 to 6
|
|
gr.color(y & 1 | 2)
|
|
repeat x from 0 to 15
|
|
gr.plot(x << 4 + 7, 183 - y << 4)
|
|
|
|
'draw monochrome samples
|
|
gr.color(3)
|
|
repeat x from 5 to 10
|
|
gr.plot(x << 4 + 7, 55)
|
|
|
|
'draw mouse pointer
|
|
gr.width(0)
|
|
mousex := mousex + mouse.delta_x #> 0 <# 251
|
|
mousey := mousey + mouse.delta_y #> 4 <# 191
|
|
|
|
gr.width(14)'(29)
|
|
gr.color(4)
|
|
gr.plot(mousex, mousey)
|
|
|
|
' gr.pix(mousex, mousey, 0, @pixdef)
|
|
|
|
'check mouse position
|
|
c~~
|
|
if mousey => 176
|
|
c := (mousex & $F0 + $8)
|
|
elseif mousey => 80 and mousey < 160
|
|
c := (mousex & $F0 + $E - (159 - mousey) >> 4)
|
|
elseif mousey => 48 and mousey < 64 and mousex => 80 and mousex < 176
|
|
c := (mousex - 80) >> 4 + 2
|
|
|
|
'show appropriate message
|
|
if c => 0
|
|
gr.colorwidth(3, 10)
|
|
gr.textmode(3, 3, 8, %0101)
|
|
hexstring[0] := hex(c >> 4)
|
|
hexstring[1] := hex(c & $F)
|
|
gr.text(128, 17, @colorstring)
|
|
colors.byte[2] := c
|
|
gr.colorwidth(2, 6)
|
|
gr.text(128, 17, @colorstring)
|
|
else
|
|
gr.colorwidth(3, 0)
|
|
gr.textmode(2, 2, 6, %0101)
|
|
gr.text(128, 20, string("Point mouse to color"))
|
|
|
|
'copy bitmap to display
|
|
gr.copy(display_base)
|
|
|
|
'animate mouse pointer color
|
|
c := k++ & 3 + 4
|
|
i := -3
|
|
repeat 64
|
|
colors.byte[i += 4] := c
|
|
|
|
|
|
PRI hex(value) : chr
|
|
|
|
return lookupz(value : "0".."9", "A".."F")
|
|
|
|
DAT
|
|
|
|
tvparams long 0 'status
|
|
long 1 'enable
|
|
long %010_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 60_000_000 'broadcast
|
|
long 0 'auralcog
|
|
|
|
|
|
pixdef word 'arrow pointer
|
|
byte 1,5,0,4
|
|
word %%11110000
|
|
word %%11100000
|
|
word %%11110000
|
|
word %%10111000
|
|
word %%00011000
|
|
|
|
|
|
colorstring byte "COLOR "
|
|
hexstring byte "00",0
|
|
|
|
{{
|
|
|
|
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ 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. │
|
|
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
}}
|