Firmware initial import
|
@ -0,0 +1,7 @@
|
||||||
|
This is the firmware for the SPIDriver.
|
||||||
|
It uses the [MyForth](http://www.kiblerelectronics.com/myf/myf.shtml) compiler written by
|
||||||
|
Charley Shattuck and Bob Nash.
|
||||||
|
|
||||||
|
To compile the fonts go into ``st7735s``
|
||||||
|
and unpack the [IBM Plex OpenType](https://github.com/IBM/plex/releases) font set.
|
||||||
|
then run ``mkfont.py``. This builds the font sources in ``fonts.fs``
|
After Width: | Height: | Size: 185 B |
After Width: | Height: | Size: 86 B |
|
@ -0,0 +1,3 @@
|
||||||
|
set -e
|
||||||
|
|
||||||
|
python2 mkfont.py
|
After Width: | Height: | Size: 242 B |
After Width: | Height: | Size: 243 B |
After Width: | Height: | Size: 238 B |
After Width: | Height: | Size: 94 B |
|
@ -0,0 +1,131 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
import numpy as np
|
||||||
|
import struct
|
||||||
|
import random
|
||||||
|
|
||||||
|
def rand(n):
|
||||||
|
return random.randrange(n)
|
||||||
|
|
||||||
|
def as565(im):
|
||||||
|
""" Return RGB565 of im """
|
||||||
|
(r,g,b) = [np.array(c).astype(np.uint16) for c in im.split()]
|
||||||
|
def s(x, n):
|
||||||
|
return x * (2 ** n - 1) / 255
|
||||||
|
return (s(b, 5) << 11) | (s(g, 6) << 5) | s(r, 5)
|
||||||
|
|
||||||
|
def c3(rgb):
|
||||||
|
return (16 * (0xf & (rgb >> 8)),
|
||||||
|
16 * (0xf & (rgb >> 4)),
|
||||||
|
16 * (0xf & (rgb >> 0)))
|
||||||
|
|
||||||
|
font2 = ImageFont.truetype("IBMPlexSans-SemiBold.otf", 13)
|
||||||
|
fontSP = ImageFont.truetype("pf_ronda_seven_bold.ttf", 8)
|
||||||
|
|
||||||
|
def pad2(s):
|
||||||
|
if len(s) % 2:
|
||||||
|
s.append(s[0])
|
||||||
|
return s
|
||||||
|
|
||||||
|
def rfont2(c):
|
||||||
|
im = Image.new("L", (128, 160))
|
||||||
|
dr = ImageDraw.Draw(im)
|
||||||
|
dr.text((10,40), c, font=font2, fill=255)
|
||||||
|
# im.save("out.png")
|
||||||
|
extents = im.getbbox()
|
||||||
|
assert 10 <= extents[0]
|
||||||
|
assert 45 <= extents[1]
|
||||||
|
if c in "0123456789":
|
||||||
|
extents = (0, 0, 10 + 8, 45 + 9)
|
||||||
|
im = im.crop((10, 45) + extents[2:])
|
||||||
|
(w,h) = im.size
|
||||||
|
nyb = pad2((np.array(im).astype(int).flatten() * 15 / 255).tolist())
|
||||||
|
return [w,h] + nyb
|
||||||
|
|
||||||
|
def rf(c, font):
|
||||||
|
im = Image.new("L", (128, 160))
|
||||||
|
dr = ImageDraw.Draw(im)
|
||||||
|
dr.text((10,40), c, font=font, fill=255)
|
||||||
|
# im.save("out.png")
|
||||||
|
extents = im.getbbox()
|
||||||
|
im = im.crop(extents)
|
||||||
|
(w,h) = im.size
|
||||||
|
nyb = (np.array(im).astype(int).flatten() * 15 / 255).tolist()
|
||||||
|
return [w,h] + nyb
|
||||||
|
|
||||||
|
fs = open("../font.fs", "wt")
|
||||||
|
fb = 0
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
fs.write('here constant tplan\n')
|
||||||
|
fs.write('%d , %d , $%x%x , $%x , ," %s"\n' % (60, 0, 0xf, 0xf, 0xf, "V"))
|
||||||
|
fb += 5 + len("V")
|
||||||
|
# fs.write("[ %d ]\n" % fb)
|
||||||
|
fs.write('%d , %d , $%x%x , $%x , ," %s"\n' % (108, 0, 0xf, 0xf, 0xf, "mA"))
|
||||||
|
fb += 5 + len("mA")
|
||||||
|
# fs.write("[ %d ]\n" % fb)
|
||||||
|
|
||||||
|
fs.write('0 ,\n')
|
||||||
|
fb += 1
|
||||||
|
# im.save("out.png")
|
||||||
|
|
||||||
|
uniq = "".join(sorted(set("0123456789.mAVDMCS")))
|
||||||
|
f2 = sum([rfont2(c) for c in uniq], [])
|
||||||
|
print "font2 %s takes %d bytes" % (uniq, len(f2) / 2)
|
||||||
|
def nybbles(nn):
|
||||||
|
s = len(nn)
|
||||||
|
assert s % 2 == 0
|
||||||
|
b = ["$%x%x ," % tuple(nn[i:i+2]) for i in range(0, s, 2)]
|
||||||
|
return b
|
||||||
|
fs.write('here constant font\n')
|
||||||
|
for c in uniq:
|
||||||
|
bb = nybbles(rfont2(c))
|
||||||
|
print >>fs, "'%s' , " % c, " ".join(bb)
|
||||||
|
fb += 1 + len(bb)
|
||||||
|
|
||||||
|
# See http://angband.pl/font/tinyfont.html
|
||||||
|
fs.write("\nhere constant micro\n")
|
||||||
|
if 1:
|
||||||
|
tiny = Image.open("hex4x5.png").convert("L")
|
||||||
|
for i in range(16):
|
||||||
|
x = 5 * i
|
||||||
|
im = tiny.crop((x, 0, x + 4, 5))
|
||||||
|
rim = im.transpose(Image.ROTATE_90)
|
||||||
|
ch = ((np.array(rim)).flatten() * 15.99 / 255).astype(np.uint8).tolist()
|
||||||
|
fs.write(" ".join(nybbles(ch)) + "\n")
|
||||||
|
fb += len(ch) / 2
|
||||||
|
|
||||||
|
if 1:
|
||||||
|
# Image.open("arrow.png").transpose(Image.FLIP_LEFT_RIGHT).save("larrow.png")
|
||||||
|
for n in ("symbol-s", "symbol-p", "symbol-b", "arrow", "larrow", "dot", "label-sda", "label-scl"):
|
||||||
|
im = Image.open(n + ".png").convert("L")
|
||||||
|
if n.startswith("label-"):
|
||||||
|
im = im.point([0] + 254 * [64] + [255])
|
||||||
|
rim = im.transpose(Image.ROTATE_90)
|
||||||
|
(w,h) = rim.size
|
||||||
|
ch = [w,h] + pad2(((np.array(rim)).flatten() * 15.99 / 255).astype(np.uint8).tolist())
|
||||||
|
fs.write("here constant %s \n" % n)
|
||||||
|
fs.write(" ".join(nybbles(ch)) + "\n")
|
||||||
|
fb += len(ch) / 2
|
||||||
|
|
||||||
|
if 1:
|
||||||
|
w = 72
|
||||||
|
gpng = "plasma.png"
|
||||||
|
grad = Image.open(gpng).convert("RGB").resize((w, 1), Image.BILINEAR).load()
|
||||||
|
fs.write("\nHERE constant grad\n")
|
||||||
|
for x in range(w):
|
||||||
|
(r,g,b) = grad[x,0]
|
||||||
|
r = (r * 15) // 255
|
||||||
|
g = (g * 15) // 255
|
||||||
|
b = (b * 15) // 255
|
||||||
|
fs.write('$%x%x , $%x ,\n' % (r, g, b))
|
||||||
|
fb += 2 * w
|
||||||
|
|
||||||
|
fs.close()
|
||||||
|
|
||||||
|
fs = open("../fontsize.fs", "wt")
|
||||||
|
fs.write("&%d constant FONTDATA_SIZE\n" % fb)
|
||||||
|
fs.close()
|
After Width: | Height: | Size: 413 B |
After Width: | Height: | Size: 184 B |
After Width: | Height: | Size: 185 B |
After Width: | Height: | Size: 191 B |
|
@ -0,0 +1,259 @@
|
||||||
|
|
||||||
|
here constant CAPTURE-START
|
||||||
|
|
||||||
|
[
|
||||||
|
: fake ( a - u )
|
||||||
|
dup 0= ] here [ and or ;
|
||||||
|
]
|
||||||
|
|
||||||
|
:m :: ( - )
|
||||||
|
[ >in @ label >in !
|
||||||
|
create ] here [ , hide
|
||||||
|
does> @ ] m;
|
||||||
|
|
||||||
|
\ jump if bit is 0 or 1 ( addr bit )
|
||||||
|
:m j1 ( addr bit ) [ swap fake swap ] 0=until. m;
|
||||||
|
:m j0 ( addr bit ) [ swap fake swap ] until. m;
|
||||||
|
:m j ( addr ) fake again m;
|
||||||
|
|
||||||
|
:m tx SBUF0 (#!) clra TMR3H (#!) m;
|
||||||
|
:m SDA0 ( a ) SDA j0 m;
|
||||||
|
:m SDA1 ( a ) SDA j1 m;
|
||||||
|
|
||||||
|
fwd L00.0
|
||||||
|
fwd L00.1
|
||||||
|
fwd L00.2
|
||||||
|
fwd H00.0
|
||||||
|
fwd H00.1
|
||||||
|
fwd H00.2
|
||||||
|
fwd HS
|
||||||
|
fwd HP
|
||||||
|
fwd LP
|
||||||
|
fwd LS
|
||||||
|
|
||||||
|
:m escape RI0 if. RI0 clr ; then m;
|
||||||
|
|
||||||
|
:: L11 begin LS SDA0 SCL 0=until.
|
||||||
|
:: Lidle begin begin SDA until. SCL until.
|
||||||
|
L11 j
|
||||||
|
|
||||||
|
:: L10.0 3 .t set
|
||||||
|
begin L00.0 SDA0 SCL until. begin LS SDA0 SCL 0=until. 2 .t set
|
||||||
|
:: L10.1 begin L00.1 SDA0 SCL until. begin LS SDA0 SCL 0=until. 1 .t set
|
||||||
|
:: L10.2 begin L00.2 SDA0 SCL until. begin LS SDA0 SCL 0=until. 0 .t set
|
||||||
|
tx
|
||||||
|
:: H10.0 7 .t set
|
||||||
|
:: klak begin H00.0 SDA0 SCL until. begin HS SDA0 SCL 0=until. 6 .t set
|
||||||
|
:: H10.1 begin H00.1 SDA0 SCL until. begin HS SDA0 SCL 0=until. 5 .t set
|
||||||
|
:: H10.2 begin H00.2 SDA0 SCL until. begin HS SDA0 SCL 0=until. 4 .t set
|
||||||
|
L10.0 j
|
||||||
|
|
||||||
|
:: LS $f0 # and $01 # ior tx ( start )
|
||||||
|
:: LS2 begin HP SDA1 SCL 0=until.
|
||||||
|
H00.0 j
|
||||||
|
|
||||||
|
:: HS $10 (#) ( start )
|
||||||
|
:: HS2 begin LP SDA1 SCL 0=until.
|
||||||
|
:: L00.0 3 .t set
|
||||||
|
begin L10.0 SDA1 SCL until. begin LP SDA1 SCL 0=until.
|
||||||
|
:: L00.1 begin L10.1 SDA1 SCL until. begin LP SDA1 SCL 0=until.
|
||||||
|
:: L00.2 begin L10.2 SDA1 SCL until. begin LP SDA1 SCL 0=until.
|
||||||
|
tx
|
||||||
|
:: H00.0 7 .t set
|
||||||
|
begin H10.0 SDA1 SCL until. begin HP SDA1 SCL 0=until.
|
||||||
|
:: H00.1 begin H10.1 SDA1 SCL until. begin HP SDA1 SCL 0=until.
|
||||||
|
:: H00.2 begin H10.2 SDA1 SCL until. begin HP SDA1 SCL 0=until.
|
||||||
|
L00.0 j
|
||||||
|
|
||||||
|
:: HP $20 (#)
|
||||||
|
\ L11 j
|
||||||
|
begin SDA 0=until.
|
||||||
|
escape
|
||||||
|
HS2 j
|
||||||
|
|
||||||
|
: (warm)
|
||||||
|
:: H11 begin HS SDA0 SCL 0=until.
|
||||||
|
:: Hidle begin begin SDA until. SCL until.
|
||||||
|
H11 j
|
||||||
|
|
||||||
|
:: LP $f0 # and $02 # ior tx
|
||||||
|
\ H11 j
|
||||||
|
begin SDA 0=until.
|
||||||
|
escape
|
||||||
|
LS2 j
|
||||||
|
|
||||||
|
: /timer3
|
||||||
|
$80 # EIE1 ior! \ Timer 3 interrupt enable
|
||||||
|
;
|
||||||
|
: timer3\
|
||||||
|
$80 ~# EIE1 and! \ Timer 3 interrupt disable
|
||||||
|
;
|
||||||
|
|
||||||
|
:m timer3
|
||||||
|
SBUF0 (#!) clra
|
||||||
|
$7f # TMR3CN and!
|
||||||
|
RI0 if.
|
||||||
|
RI0 clr
|
||||||
|
[ sp dec ]
|
||||||
|
[ sp dec ]
|
||||||
|
then
|
||||||
|
[ reti ] m;
|
||||||
|
|
||||||
|
: capture
|
||||||
|
[ IE push ]
|
||||||
|
[ ET2 clr ] \ Timer 2 interrupt disable
|
||||||
|
[ ES0 clr ] \ UART interrupt disable
|
||||||
|
\i2chw
|
||||||
|
|
||||||
|
[ clra ]
|
||||||
|
[ FL1 set ] t3+
|
||||||
|
(warm)
|
||||||
|
t3- [ FL1 clr ]
|
||||||
|
/i2chw
|
||||||
|
[ IE pop ]
|
||||||
|
;
|
||||||
|
|
||||||
|
\ This code all runs in register bank 1:
|
||||||
|
\ 0 scratch for heatmap
|
||||||
|
\ 1 log
|
||||||
|
\ 2
|
||||||
|
\ 3 prev cmd
|
||||||
|
\ 4 constant 72, for heatmap
|
||||||
|
\ 5
|
||||||
|
\ 6
|
||||||
|
\ 7 caller acc save
|
||||||
|
\
|
||||||
|
\ FL0 set means this is an address byte
|
||||||
|
|
||||||
|
fwd M00.0
|
||||||
|
fwd M10.0
|
||||||
|
fwd M10.1
|
||||||
|
fwd M10.2
|
||||||
|
fwd M10.3
|
||||||
|
fwd M10.4
|
||||||
|
fwd M10.5
|
||||||
|
fwd M10.6
|
||||||
|
fwd M10.7
|
||||||
|
fwd M10.8
|
||||||
|
fwd Mt
|
||||||
|
fwd MP
|
||||||
|
|
||||||
|
:m (l!) $f3 , m;
|
||||||
|
|
||||||
|
:m (log!)
|
||||||
|
$f3 , a+ m;
|
||||||
|
|
||||||
|
:m wrap
|
||||||
|
$7f # 9 and! m;
|
||||||
|
|
||||||
|
:m heat
|
||||||
|
\ byte is in t
|
||||||
|
FL0 if.
|
||||||
|
setc 2/'
|
||||||
|
0 (#!)
|
||||||
|
4 (#@) $f2 ,
|
||||||
|
then
|
||||||
|
m;
|
||||||
|
|
||||||
|
:m escape
|
||||||
|
7 (#@)
|
||||||
|
[
|
||||||
|
dirty set
|
||||||
|
PSW pop
|
||||||
|
reti
|
||||||
|
]
|
||||||
|
m;
|
||||||
|
|
||||||
|
:: MP
|
||||||
|
$00 (#) (log!)
|
||||||
|
$01 (#) (log!)
|
||||||
|
wrap
|
||||||
|
escape
|
||||||
|
begin SDA 0=until.
|
||||||
|
: (mismatch)
|
||||||
|
:: Mt
|
||||||
|
begin MP SDA1 SCL 0=until.
|
||||||
|
$82 # 3 #! FL0 set
|
||||||
|
M00.0 j
|
||||||
|
|
||||||
|
:: M00.6 begin M10.6 SDA1 SCL until. begin MP SDA1 SCL 0=until.
|
||||||
|
:: M00.7 begin M10.7 SDA1 SCL until. begin MP SDA1 SCL 0=until. (l!)
|
||||||
|
:: M00.8 begin M10.8 SDA1 SCL until. begin MP SDA1 SCL 0=until. heat
|
||||||
|
a+ 3 (#@) (l!) a+ wrap
|
||||||
|
$83 # 3 #! FL0 clr
|
||||||
|
M00.0 j
|
||||||
|
|
||||||
|
:: M10.6 begin M00.6 SDA0 SCL until. begin Mt SDA0 SCL 0=until. 1 .t set
|
||||||
|
:: M10.7 begin M00.7 SDA0 SCL until. begin Mt SDA0 SCL 0=until. 1+ (l!)
|
||||||
|
:: M10.8 begin M00.8 SDA0 SCL until. begin Mt SDA0 SCL 0=until.
|
||||||
|
a+ 3 (#@) $7f # and (l!) a+ wrap
|
||||||
|
$83 # 3 #! FL0 clr
|
||||||
|
M10.0 j
|
||||||
|
|
||||||
|
:: MP3 MP j
|
||||||
|
:: Mt3 Mt j
|
||||||
|
:: M00.3 begin M10.3 SDA1 SCL until. begin MP3 SDA1 SCL 0=until.
|
||||||
|
:: M00.4 begin M10.4 SDA1 SCL until. begin MP3 SDA1 SCL 0=until.
|
||||||
|
:: M00.5 begin M10.5 SDA1 SCL until. begin MP3 SDA1 SCL 0=until.
|
||||||
|
M00.6 j
|
||||||
|
:: M10.3 begin M00.3 SDA0 SCL until. begin Mt3 SDA0 SCL 0=until. 4 .t set
|
||||||
|
:: M10.4 begin M00.4 SDA0 SCL until. begin Mt3 SDA0 SCL 0=until. 3 .t set
|
||||||
|
:: M10.5 begin M00.5 SDA0 SCL until. begin Mt3 SDA0 SCL 0=until. 2 .t set
|
||||||
|
M10.6 j
|
||||||
|
|
||||||
|
:: MP0 MP j
|
||||||
|
:: Mt0 Mt j
|
||||||
|
|
||||||
|
: (warm)
|
||||||
|
:: M00.0 clra
|
||||||
|
begin M10.0 SDA1 SCL until. begin MP0 SDA1 SCL 0=until.
|
||||||
|
:: M00.1 begin M10.1 SDA1 SCL until. begin MP0 SDA1 SCL 0=until.
|
||||||
|
:: M00.2 begin M10.2 SDA1 SCL until. begin MP0 SDA1 SCL 0=until.
|
||||||
|
M00.3 j
|
||||||
|
:: M10.0 clra
|
||||||
|
begin M00.0 SDA0 SCL until. begin Mt0 SDA0 SCL 0=until. 7 .t set
|
||||||
|
:: M10.1 begin M00.1 SDA0 SCL until. begin Mt0 SDA0 SCL 0=until. 6 .t set
|
||||||
|
:: M10.2 begin M00.2 SDA0 SCL until. begin Mt0 SDA0 SCL 0=until. 5 .t set
|
||||||
|
M10.3 j
|
||||||
|
|
||||||
|
: /monitor
|
||||||
|
[ ET2 clr ] \ Timer 2 interrupt disable
|
||||||
|
[ ES0 clr ] \ UART interrupt disable
|
||||||
|
\i2chw
|
||||||
|
t3i- t3+ \ Timer3 running, no intr
|
||||||
|
|
||||||
|
%00000100 # P0MASK #!
|
||||||
|
%00000100 # P0MAT #! \ SDA high
|
||||||
|
|
||||||
|
%00010000 # P1MASK #!
|
||||||
|
%00010000 # P1MAT #! \ SCL high
|
||||||
|
|
||||||
|
\ constants in registers
|
||||||
|
72 # [ 4 8 + ] #!
|
||||||
|
$02 # EIE1 ior! \ EMAT
|
||||||
|
;
|
||||||
|
|
||||||
|
: \monitor
|
||||||
|
$02 ~# EIE1 and! \ EMAT off
|
||||||
|
[ ET2 set ] \ Timer 2 interrupt enable
|
||||||
|
[ ES0 set ] \ UART interrupt enable
|
||||||
|
t3i+ t3- \ Timer3 stopped, intr
|
||||||
|
/i2chw
|
||||||
|
;
|
||||||
|
|
||||||
|
:m mismatch
|
||||||
|
[
|
||||||
|
PSW push
|
||||||
|
RS0 set
|
||||||
|
]
|
||||||
|
7 (#!)
|
||||||
|
Mt j
|
||||||
|
m;
|
||||||
|
|
||||||
|
here [
|
||||||
|
CAPTURE-START xor 11 rshift 0<>
|
||||||
|
[IF]
|
||||||
|
cr .( Capture block cannot cross a 2K boundary)
|
||||||
|
abort
|
||||||
|
[THEN]
|
||||||
|
]
|
|
@ -0,0 +1,131 @@
|
||||||
|
here constant tplan
|
||||||
|
60 , 0 , $ff , $f , ," V"
|
||||||
|
108 , 0 , $ff , $f , ," mA"
|
||||||
|
0 ,
|
||||||
|
here constant font
|
||||||
|
'.' , $49 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $03 , $20 , $2f , $e0 , $0c , $b0 ,
|
||||||
|
'0' , $89 , $01 , $9d , $d8 , $00 , $0c , $fc , $df , $90 , $4f , $b0 , $0d , $e1 , $7f , $70 , $0b , $f4 , $9f , $70 , $0a , $f5 , $7f , $70 , $0b , $f4 , $4f , $a0 , $0d , $e1 , $0c , $fb , $cf , $90 , $01 , $ad , $d8 , $00 ,
|
||||||
|
'1' , $89 , $00 , $af , $f7 , $00 , $09 , $fd , $f7 , $00 , $6f , $a7 , $f7 , $00 , $07 , $07 , $f7 , $00 , $00 , $07 , $f7 , $00 , $00 , $07 , $f7 , $00 , $00 , $07 , $f7 , $00 , $09 , $9c , $fc , $95 , $0e , $ff , $ff , $f8 ,
|
||||||
|
'2' , $89 , $02 , $ae , $d8 , $00 , $1d , $fc , $ef , $90 , $3b , $70 , $3f , $e0 , $00 , $00 , $4f , $c0 , $00 , $02 , $de , $40 , $00 , $4d , $e4 , $00 , $06 , $ed , $30 , $00 , $4f , $fb , $aa , $a2 , $5f , $ff , $ff , $f3 ,
|
||||||
|
'3' , $89 , $04 , $ce , $d7 , $00 , $3e , $eb , $df , $80 , $05 , $10 , $5f , $b0 , $00 , $6b , $dd , $30 , $00 , $9f , $fc , $20 , $00 , $00 , $6f , $c0 , $2a , $10 , $2f , $e0 , $8f , $eb , $df , $80 , $07 , $ce , $c7 , $00 ,
|
||||||
|
'4' , $89 , $00 , $05 , $ff , $40 , $00 , $1d , $ff , $40 , $00 , $8e , $cf , $40 , $03 , $e8 , $9f , $40 , $0c , $d0 , $9f , $40 , $6f , $50 , $9f , $40 , $bf , $ff , $ff , $f7 , $69 , $99 , $cf , $a4 , $00 , $00 , $9f , $40 ,
|
||||||
|
'5' , $89 , $0c , $ff , $ff , $c0 , $0d , $eb , $bb , $90 , $0e , $a0 , $00 , $00 , $0f , $aa , $eb , $20 , $1f , $fb , $df , $d0 , $02 , $20 , $0d , $f3 , $07 , $40 , $0d , $f2 , $2e , $eb , $df , $b0 , $03 , $be , $d8 , $10 ,
|
||||||
|
'6' , $89 , $00 , $1a , $fc , $10 , $00 , $cf , $90 , $00 , $09 , $f8 , $00 , $00 , $1e , $da , $eb , $30 , $5f , $fb , $bf , $d0 , $7f , $a0 , $0c , $f4 , $5f , $a0 , $0c , $f3 , $0c , $eb , $bf , $b0 , $01 , $ad , $d9 , $10 ,
|
||||||
|
'7' , $89 , $5f , $ff , $ff , $f2 , $5f , $ba , $ae , $f2 , $5f , $50 , $3f , $c0 , $14 , $10 , $9f , $50 , $00 , $01 , $ee , $00 , $00 , $07 , $f8 , $00 , $00 , $0d , $e2 , $00 , $00 , $5f , $a0 , $00 , $00 , $bf , $40 , $00 ,
|
||||||
|
'8' , $89 , $03 , $be , $d9 , $10 , $1e , $ea , $bf , $c0 , $2f , $a0 , $0d , $e0 , $09 , $e9 , $ae , $60 , $06 , $ef , $fd , $40 , $5f , $b1 , $2d , $e2 , $7f , $80 , $0c , $f4 , $2e , $ea , $bf , $d0 , $03 , $be , $da , $20 ,
|
||||||
|
'9' , $89 , $02 , $ae , $d8 , $00 , $1d , $eb , $cf , $90 , $6f , $90 , $0d , $f1 , $7f , $80 , $0d , $f3 , $3e , $ea , $bf , $f2 , $05 , $ce , $af , $d0 , $00 , $00 , $af , $50 , $00 , $1b , $f9 , $00 , $02 , $df , $80 , $00 ,
|
||||||
|
'A' , $99 , $00 , $0e , $fa , $00 , $00 , $04 , $ff , $e1 , $00 , $00 , $9f , $9f , $50 , $00 , $0e , $c2 , $fb , $00 , $05 , $f7 , $0c , $e1 , $00 , $af , $ff , $ff , $60 , $1e , $eb , $bb , $fb , $06 , $f8 , $00 , $0d , $f1 , $bf , $40 , $00 , $8f , $70 ,
|
||||||
|
'C' , $99 , $00 , $5b , $ec , $70 , $00 , $6f , $ec , $ef , $80 , $1e , $e2 , $01 , $c7 , $04 , $fa , $00 , $00 , $00 , $6f , $90 , $00 , $00 , $04 , $fa , $00 , $00 , $00 , $1e , $e1 , $01 , $d8 , $00 , $7f , $ec , $ef , $80 , $00 , $6c , $ec , $60 , $00 ,
|
||||||
|
'D' , $99 , $1f , $ff , $eb , $50 , $01 , $fe , $cc , $ef , $60 , $1f , $d0 , $02 , $ee , $01 , $fd , $00 , $0b , $f3 , $1f , $d0 , $00 , $af , $51 , $fd , $00 , $0b , $f3 , $1f , $d0 , $01 , $ee , $11 , $fe , $bc , $ef , $60 , $1f , $ff , $eb , $50 , $01 ,
|
||||||
|
'M' , $a9 , $1f , $f5 , $00 , $0a , $fa , $1f , $fc , $00 , $3f , $fa , $1f , $ff , $60 , $bf , $fa , $1f , $dd , $d5 , $fb , $fa , $1f , $c6 , $fe , $e4 , $fa , $1f , $c0 , $cf , $63 , $fa , $1f , $c0 , $4d , $03 , $fa , $1f , $c0 , $02 , $03 , $fa , $1f , $c0 , $00 , $03 , $fa ,
|
||||||
|
'S' , $89 , $02 , $ad , $da , $20 , $0d , $fd , $df , $e1 , $4f , $b0 , $04 , $30 , $2e , $e8 , $51 , $00 , $05 , $df , $ff , $80 , $00 , $02 , $5d , $f4 , $08 , $30 , $0a , $f5 , $5f , $fd , $df , $d1 , $04 , $be , $da , $20 ,
|
||||||
|
'V' , $99 , $cf , $30 , $00 , $de , $17 , $f8 , $00 , $3f , $b0 , $2f , $d0 , $08 , $f6 , $00 , $cf , $20 , $de , $10 , $06 , $f7 , $2f , $b0 , $00 , $1f , $b6 , $f6 , $00 , $00 , $be , $ce , $10 , $00 , $06 , $ff , $a0 , $00 , $00 , $1e , $f5 , $00 , $0c ,
|
||||||
|
'm' , $b9 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $00 , $2f , $ba , $ea , $1a , $ea , $12 , $ff , $bd , $fe , $bd , $f8 , $2f , $c0 , $3f , $c0 , $3f , $b2 , $fb , $02 , $fb , $02 , $fc , $2f , $b0 , $2f , $b0 , $2f , $c2 , $fb , $02 , $fb , $02 , $fc , $2f , $b0 , $2f , $b0 , $2f , $c0 ,
|
||||||
|
|
||||||
|
here constant micro
|
||||||
|
$4f , $ff , $4f , $00 , $0f , $f0 , $00 , $f4 , $ff , $f4 ,
|
||||||
|
$00 , $00 , $0f , $ff , $ff , $f0 , $00 , $00 , $00 , $00 ,
|
||||||
|
$4f , $40 , $ff , $0f , $0f , $f0 , $f0 , $ff , $04 , $ff ,
|
||||||
|
$4f , $4f , $4f , $0f , $0f , $f0 , $f0 , $ff , $04 , $0f ,
|
||||||
|
$ff , $ff , $f0 , $0f , $00 , $00 , $f0 , $0f , $ff , $00 ,
|
||||||
|
$f0 , $4f , $4f , $0f , $0f , $f0 , $f0 , $ff , $ff , $0f ,
|
||||||
|
$40 , $4f , $4f , $0f , $0f , $f0 , $f0 , $f4 , $ff , $f4 ,
|
||||||
|
$ff , $00 , $0f , $0f , $00 , $f0 , $0f , $ff , $00 , $00 ,
|
||||||
|
$4f , $4f , $4f , $0f , $0f , $f0 , $f0 , $f4 , $f4 , $f4 ,
|
||||||
|
$4f , $ff , $4f , $0f , $0f , $f0 , $f0 , $f4 , $f4 , $04 ,
|
||||||
|
$4f , $ff , $ff , $0f , $00 , $f0 , $f0 , $04 , $ff , $ff ,
|
||||||
|
$4f , $4f , $4f , $0f , $0f , $f0 , $f0 , $ff , $ff , $ff ,
|
||||||
|
$4f , $0f , $4f , $00 , $0f , $f0 , $00 , $f4 , $ff , $f4 ,
|
||||||
|
$4f , $ff , $4f , $00 , $0f , $f0 , $00 , $ff , $ff , $ff ,
|
||||||
|
$00 , $00 , $0f , $0f , $0f , $f0 , $f0 , $ff , $ff , $ff ,
|
||||||
|
$00 , $00 , $0f , $0f , $00 , $f0 , $f0 , $0f , $ff , $ff ,
|
||||||
|
here constant symbol-s
|
||||||
|
$bc , $00 , $17 , $ce , $d8 , $20 , $00 , $2b , $ff , $ff , $fc , $30 , $0a , $ff , $ff , $ff , $fb , $15 , $fd , $0f , $d0 , $0d , $f6 , $af , $00 , $f0 , $00 , $0f , $cc , $f0 , $ff , $0f , $f0 , $fe , $cf , $0f , $f0 , $ff , $0f , $e9 , $f0 , $00 , $0f , $00 , $fb , $4e , $d0 , $0d , $f0 , $df , $60 , $9f , $ff , $ff , $ff , $a1 , $01 , $9f , $ff , $ff , $b2 , $00 , $00 , $5b , $db , $61 , $00 ,
|
||||||
|
here constant symbol-p
|
||||||
|
$bc , $00 , $17 , $ce , $d8 , $20 , $00 , $2b , $ff , $ff , $fc , $30 , $0a , $ff , $ff , $ff , $fb , $15 , $fd , $00 , $df , $ff , $f6 , $af , $00 , $00 , $ff , $ff , $cc , $f0 , $ff , $0f , $ff , $fe , $cf , $0f , $f0 , $ff , $ff , $e9 , $f0 , $00 , $00 , $00 , $fb , $4e , $00 , $00 , $00 , $0f , $60 , $9f , $ff , $ff , $ff , $a1 , $01 , $9f , $ff , $ff , $b2 , $00 , $00 , $5b , $db , $61 , $00 ,
|
||||||
|
here constant symbol-b
|
||||||
|
$bc , $00 , $17 , $ce , $d8 , $20 , $00 , $2b , $ff , $ff , $fc , $30 , $0a , $ff , $ff , $ff , $fb , $15 , $ff , $ff , $ff , $ff , $f6 , $af , $ff , $ff , $ff , $ff , $cc , $f0 , $00 , $00 , $f0 , $fe , $cf , $00 , $00 , $0f , $0f , $e9 , $ff , $ff , $ff , $ff , $fb , $4e , $ff , $ff , $ff , $ff , $60 , $9f , $ff , $ff , $ff , $a1 , $01 , $9f , $ff , $ff , $b2 , $00 , $00 , $5b , $db , $61 , $00 ,
|
||||||
|
here constant arrow
|
||||||
|
$35 , $08 , $03 , $b3 , $8f , $8b , $fb , $ef , $e0 ,
|
||||||
|
here constant larrow
|
||||||
|
$35 , $ef , $eb , $fb , $8f , $83 , $b3 , $08 , $0e ,
|
||||||
|
here constant dot
|
||||||
|
$44 , $4c , $d5 , $bf , $fd , $bf , $fc , $3b , $b4 ,
|
||||||
|
here constant label-sda
|
||||||
|
$810 , $f0 , $00 , $00 , $00 , $f0 , $00 , $00 , $00 , $f0 , $4f , $ff , $f0 , $f0 , $f0 , $f0 , $00 , $f0 , $f0 , $f0 , $00 , $f0 , $4f , $ff , $f0 , $f0 , $00 , $00 , $00 , $f0 , $4f , $ff , $40 , $f0 , $f0 , $00 , $f0 , $f0 , $f0 , $00 , $f0 , $f0 , $ff , $ff , $f0 , $f0 , $00 , $00 , $00 , $f0 , $f0 , $4f , $40 , $f0 , $f0 , $f0 , $f0 , $f0 , $f0 , $f0 , $f0 , $f0 , $4f , $40 , $f0 ,
|
||||||
|
here constant label-scl
|
||||||
|
$810 , $f0 , $00 , $00 , $00 , $f0 , $00 , $00 , $00 , $f0 , $00 , $00 , $00 , $f0 , $00 , $00 , $f0 , $f0 , $00 , $00 , $f0 , $f0 , $ff , $ff , $f0 , $f0 , $00 , $00 , $00 , $f0 , $4f , $0f , $40 , $f0 , $f0 , $00 , $f0 , $f0 , $f0 , $00 , $f0 , $f0 , $4f , $ff , $40 , $f0 , $00 , $00 , $00 , $f0 , $f0 , $4f , $40 , $f0 , $f0 , $f0 , $f0 , $f0 , $f0 , $f0 , $f0 , $f0 , $4f , $40 , $f0 ,
|
||||||
|
|
||||||
|
HERE constant grad
|
||||||
|
$00 , $7 ,
|
||||||
|
$10 , $8 ,
|
||||||
|
$10 , $8 ,
|
||||||
|
$20 , $8 ,
|
||||||
|
$20 , $8 ,
|
||||||
|
$30 , $8 ,
|
||||||
|
$30 , $9 ,
|
||||||
|
$30 , $9 ,
|
||||||
|
$40 , $9 ,
|
||||||
|
$40 , $9 ,
|
||||||
|
$40 , $9 ,
|
||||||
|
$50 , $9 ,
|
||||||
|
$50 , $9 ,
|
||||||
|
$50 , $9 ,
|
||||||
|
$60 , $9 ,
|
||||||
|
$60 , $9 ,
|
||||||
|
$60 , $9 ,
|
||||||
|
$70 , $9 ,
|
||||||
|
$70 , $9 ,
|
||||||
|
$70 , $9 ,
|
||||||
|
$70 , $9 ,
|
||||||
|
$80 , $9 ,
|
||||||
|
$80 , $9 ,
|
||||||
|
$81 , $9 ,
|
||||||
|
$91 , $9 ,
|
||||||
|
$91 , $9 ,
|
||||||
|
$91 , $8 ,
|
||||||
|
$92 , $8 ,
|
||||||
|
$a2 , $8 ,
|
||||||
|
$a2 , $8 ,
|
||||||
|
$a2 , $8 ,
|
||||||
|
$a2 , $8 ,
|
||||||
|
$b3 , $7 ,
|
||||||
|
$b3 , $7 ,
|
||||||
|
$b3 , $7 ,
|
||||||
|
$b3 , $7 ,
|
||||||
|
$b4 , $7 ,
|
||||||
|
$c4 , $6 ,
|
||||||
|
$c4 , $6 ,
|
||||||
|
$c4 , $6 ,
|
||||||
|
$c5 , $6 ,
|
||||||
|
$c5 , $6 ,
|
||||||
|
$d5 , $5 ,
|
||||||
|
$d5 , $5 ,
|
||||||
|
$d6 , $5 ,
|
||||||
|
$d6 , $5 ,
|
||||||
|
$d6 , $5 ,
|
||||||
|
$d6 , $5 ,
|
||||||
|
$d7 , $4 ,
|
||||||
|
$e7 , $4 ,
|
||||||
|
$e7 , $4 ,
|
||||||
|
$e7 , $4 ,
|
||||||
|
$e8 , $4 ,
|
||||||
|
$e8 , $3 ,
|
||||||
|
$e8 , $3 ,
|
||||||
|
$e9 , $3 ,
|
||||||
|
$e9 , $3 ,
|
||||||
|
$e9 , $3 ,
|
||||||
|
$e9 , $3 ,
|
||||||
|
$ea , $2 ,
|
||||||
|
$ea , $2 ,
|
||||||
|
$ea , $2 ,
|
||||||
|
$eb , $2 ,
|
||||||
|
$eb , $2 ,
|
||||||
|
$eb , $2 ,
|
||||||
|
$ec , $2 ,
|
||||||
|
$ec , $2 ,
|
||||||
|
$ec , $2 ,
|
||||||
|
$ed , $2 ,
|
||||||
|
$ed , $2 ,
|
||||||
|
$ed , $2 ,
|
||||||
|
$ee , $2 ,
|
|
@ -0,0 +1 @@
|
||||||
|
&1385 constant FONTDATA_SIZE
|
|
@ -0,0 +1,698 @@
|
||||||
|
$00 constant NOP $2B constant RASET $C2 constant PWCTR3
|
||||||
|
$01 constant SWRESET $2C constant RAMWR $C3 constant PWCTR4
|
||||||
|
$04 constant RDDID $2E constant RAMRD $C4 constant PWCTR5
|
||||||
|
$09 constant RDDST $30 constant PTLAR $C5 constant VMCTR1
|
||||||
|
$10 constant SLPIN $36 constant MADCTL $DA constant RDID1
|
||||||
|
$11 constant SLPOUT $3A constant COLMOD $DB constant RDID2
|
||||||
|
$12 constant PTLON $B1 constant FRMCTR1 $DC constant RDID3
|
||||||
|
$13 constant NORON $B2 constant FRMCTR2 $DD constant RDID4
|
||||||
|
$20 constant INVOFF $B3 constant FRMCTR3 $E0 constant GMCTRP1
|
||||||
|
$21 constant INVON $B4 constant INVCTR $E1 constant GMCTRN1
|
||||||
|
$28 constant DISPOFF $B6 constant DISSET5 $FC constant PWCTR6
|
||||||
|
$29 constant DISPON $C0 constant PWCTR1
|
||||||
|
$2A constant CASET $C1 constant PWCTR2
|
||||||
|
$80 constant DELAY
|
||||||
|
|
||||||
|
here constant init-table
|
||||||
|
SWRESET , DELAY , \ Software reset, 0 args, w/delay
|
||||||
|
60 ,
|
||||||
|
SLPOUT , DELAY , \ Out of sleep mode, 0 args, w/delay
|
||||||
|
60 ,
|
||||||
|
FRMCTR1 , 3 , \ Frame rate ctrl - normal mode, 3 args:
|
||||||
|
0x01 , 0x2C , 0x2D , \ Rate = fosc/(1x2+40) * (LINE+2C+2D)
|
||||||
|
FRMCTR2 , 3 , \ Frame rate control - idle mode, 3 args:
|
||||||
|
0x01 , 0x2C , 0x2D , \ Rate = fosc/(1x2+40) * (LINE+2C+2D)
|
||||||
|
FRMCTR3 , 6 , \ Frame rate ctrl - partial mode, 6 args:
|
||||||
|
0x01 , 0x2C , 0x2D , \ Dot inversion mode
|
||||||
|
0x01 , 0x2C , 0x2D , \ Line inversion mode
|
||||||
|
PWCTR1 , 3 , \ Power control, 3 args:
|
||||||
|
0xA2 ,
|
||||||
|
0x02 , \ -4.6V
|
||||||
|
0x84 , \ AUTO mode
|
||||||
|
PWCTR2 , 1 , \ Power control, 1 arg:
|
||||||
|
0xC5 , \ VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
|
||||||
|
PWCTR3 , 2 , \ Power control, 2 args:
|
||||||
|
0x0A , \ Opamp current small
|
||||||
|
0x00 , \ Boost frequency
|
||||||
|
PWCTR4 , 2 , \ Power control, 2 args:
|
||||||
|
0x8A , \ BCLK/2, Opamp current small & Medium low
|
||||||
|
0x2A ,
|
||||||
|
PWCTR5 , 2 , \ Power control, 2 args:
|
||||||
|
0x8A , 0xEE ,
|
||||||
|
VMCTR1 , 1 , \ Power control, 1 arg:
|
||||||
|
0x0E ,
|
||||||
|
MADCTL , 1 , \ Memory access control (directions), 1 arg:
|
||||||
|
0xC8 , \ row addr/col addr, bottom to top refresh
|
||||||
|
COLMOD , 1 , \ set color mode, 1 arg:
|
||||||
|
0x03 , \ 12-bit color
|
||||||
|
GMCTRP1 , 16 , \ Gamma + polarity Correction Characterstics
|
||||||
|
0x02 , 0x1c , 0x07 , 0x12 ,
|
||||||
|
0x37 , 0x32 , 0x29 , 0x2d ,
|
||||||
|
0x29 , 0x25 , 0x2B , 0x39 ,
|
||||||
|
0x00 , 0x01 , 0x03 , 0x10 ,
|
||||||
|
GMCTRN1 , 16 , \ Gamma - polarity Correction Characterstics
|
||||||
|
0x03 , 0x1d , 0x07 , 0x06 ,
|
||||||
|
0x2E , 0x2C , 0x29 , 0x2D ,
|
||||||
|
0x2E , 0x2E , 0x37 , 0x3F ,
|
||||||
|
0x00 , 0x00 , 0x02 , 0x10 ,
|
||||||
|
NORON , 0 , \ Normal display on
|
||||||
|
0 ,
|
||||||
|
|
||||||
|
:m clk [ 2 .p1 set 2 .p1 clr ] m;
|
||||||
|
:m 1bit 2*' 1 .p1 movcb clk m;
|
||||||
|
:m /C/ [ 0 .p1 clr ] m;
|
||||||
|
:m /D/ [ 0 .p1 set ] m;
|
||||||
|
|
||||||
|
: (>st) 1bit 1bit 1bit 1bit
|
||||||
|
: _4 1bit 1bit 1bit 1bit 2*' ;
|
||||||
|
: (4>st) 2*' 2*' 2*' 2*' _4 ;
|
||||||
|
: 4>st (4>st) drop ;
|
||||||
|
|
||||||
|
: write-cmd ( b ) /C/
|
||||||
|
: 1>st ( b ) 1bit 1bit 1bit 1bit 1bit 1bit 1bit 1bit drop ;
|
||||||
|
: write-data ( b ) /D/ 1>st ;
|
||||||
|
: data16 ( b ) 0# write-data write-data ;
|
||||||
|
|
||||||
|
: args
|
||||||
|
begin
|
||||||
|
0=if drop; then
|
||||||
|
@p+ write-data
|
||||||
|
1-
|
||||||
|
again
|
||||||
|
|
||||||
|
: coldregs
|
||||||
|
init-table ##p!
|
||||||
|
begin
|
||||||
|
@p+
|
||||||
|
0=if drop; then
|
||||||
|
write-cmd
|
||||||
|
@p+
|
||||||
|
dup $7f # and args
|
||||||
|
-if @p+ ms then
|
||||||
|
drop
|
||||||
|
again
|
||||||
|
|
||||||
|
here [ $1000 > throw ]
|
||||||
|
$1000 org
|
||||||
|
: dim ( x w )
|
||||||
|
over data16 + 1- data16 ;
|
||||||
|
: rect ( x y w h )
|
||||||
|
twist ( x w y h )
|
||||||
|
RASET # write-cmd dim
|
||||||
|
CASET # write-cmd dim
|
||||||
|
: writing
|
||||||
|
RAMWR # write-cmd
|
||||||
|
/D/
|
||||||
|
;
|
||||||
|
|
||||||
|
: full
|
||||||
|
blu #@ (4>st)
|
||||||
|
grn (#@) (4>st) red (#@) 4>st ;
|
||||||
|
|
||||||
|
:m |4>st 1bit 1bit 1bit 1bit m;
|
||||||
|
|
||||||
|
: half 10 #
|
||||||
|
: gray
|
||||||
|
0=if
|
||||||
|
drop
|
||||||
|
: dark
|
||||||
|
1 .p1 clr
|
||||||
|
clk clk clk clk
|
||||||
|
clk clk clk clk
|
||||||
|
clk clk clk clk ;
|
||||||
|
then
|
||||||
|
5 (#!) [ blu b mov mul ] $f # + |4>st
|
||||||
|
5 (#@) [ grn b mov mul ] $f # + |4>st
|
||||||
|
5 (#@) [ red b mov mul ] $f # + |4>st drop ;
|
||||||
|
|
||||||
|
: ndark
|
||||||
|
7 #for dark 7 #next ;
|
||||||
|
|
||||||
|
: cls ( )
|
||||||
|
0# 0# 128 # 160 #
|
||||||
|
rect
|
||||||
|
|
||||||
|
160 # 6 #for
|
||||||
|
128 # ndark
|
||||||
|
6 #next ;
|
||||||
|
|
||||||
|
: /st7735
|
||||||
|
[ 3 .p1 clr ]
|
||||||
|
1 # ms
|
||||||
|
[ 3 .p1 set ]
|
||||||
|
coldregs
|
||||||
|
|
||||||
|
cls
|
||||||
|
: white
|
||||||
|
$f #
|
||||||
|
: setgray
|
||||||
|
red (#!) grn (#!) blu #! ;
|
||||||
|
: black
|
||||||
|
0# setgray ;
|
||||||
|
|
||||||
|
$1fff constant TOPMEM
|
||||||
|
947 here
|
||||||
|
include fontsize.fs
|
||||||
|
[ TOPMEM FONTDATA_SIZE - ] org
|
||||||
|
include font.fs
|
||||||
|
here TOPMEM <> throw
|
||||||
|
org 947 <> throw
|
||||||
|
|
||||||
|
|
||||||
|
:m 4.4r ( - l h )
|
||||||
|
dup clra
|
||||||
|
dup $93 , $a3 , \ |@p+
|
||||||
|
xchd [swap] m;
|
||||||
|
|
||||||
|
: 4.4 ( - h l )
|
||||||
|
4.4r swap ;
|
||||||
|
|
||||||
|
: skip
|
||||||
|
4.4 * 1+ clrc 2/'
|
||||||
|
: +p
|
||||||
|
[ dpl add ] dpl (#!)
|
||||||
|
[ clra dph addc ] dph (#!)
|
||||||
|
drop;
|
||||||
|
|
||||||
|
: seek ( c - ) \ p points to the data for character c
|
||||||
|
font ##p!
|
||||||
|
begin
|
||||||
|
dup @p+ xor 0=if 2drop ; then
|
||||||
|
drop skip
|
||||||
|
again
|
||||||
|
|
||||||
|
: xy! y #! x #! ;
|
||||||
|
: xy@ x #@ y #@ ;
|
||||||
|
: adv x #+! ; \ advance cursor
|
||||||
|
|
||||||
|
: preloop ( l h - i j )
|
||||||
|
swap if 1u+ then ;
|
||||||
|
|
||||||
|
\ Fill rect with current color
|
||||||
|
: wash ( x y w h )
|
||||||
|
2dup um* d1+ d2/ preloop 7 #! 6 #!
|
||||||
|
rect
|
||||||
|
begin begin
|
||||||
|
full full
|
||||||
|
7 #next 6 #next ;
|
||||||
|
|
||||||
|
: ch ( c - )
|
||||||
|
p>r
|
||||||
|
seek
|
||||||
|
xy@
|
||||||
|
4.4 ( w h )
|
||||||
|
over adv
|
||||||
|
2dup * push ( w h r: w*h )
|
||||||
|
rect
|
||||||
|
pop 1+ 2/ 7 #for
|
||||||
|
4.4r gray gray
|
||||||
|
7 #next
|
||||||
|
|
||||||
|
r>p ;
|
||||||
|
|
||||||
|
: blch
|
||||||
|
black
|
||||||
|
xy@ 8 # 9 # wash
|
||||||
|
8 # adv white ;
|
||||||
|
|
||||||
|
: str
|
||||||
|
@p+ 6 #for
|
||||||
|
@p+
|
||||||
|
ch
|
||||||
|
6 #next ;
|
||||||
|
|
||||||
|
: setcolor
|
||||||
|
4.4 grn #! red #! @p+ blu #! ;
|
||||||
|
|
||||||
|
: hex1 ( h - )
|
||||||
|
x #@ 3 # + $7f # xor 4 #
|
||||||
|
RASET # write-cmd dim
|
||||||
|
|
||||||
|
RAMWR # write-cmd
|
||||||
|
/D/
|
||||||
|
|
||||||
|
micro ##p!
|
||||||
|
$f # and 10 # b #! [ mul ] +p
|
||||||
|
10 # 7 #for 4.4r gray gray 7 #next
|
||||||
|
5 # x #+! ;
|
||||||
|
|
||||||
|
: drawhex ( hh - )
|
||||||
|
y #@ 5 #
|
||||||
|
CASET # write-cmd dim
|
||||||
|
|
||||||
|
dup [swap] hex1 hex1 ;
|
||||||
|
|
||||||
|
:m gap [ y inc ] m;
|
||||||
|
|
||||||
|
: clip
|
||||||
|
y #@
|
||||||
|
: (clip)
|
||||||
|
-if
|
||||||
|
$7f # and negate + ;
|
||||||
|
then
|
||||||
|
drop;
|
||||||
|
|
||||||
|
: preblank ( w )
|
||||||
|
dup y #@ + (clip)
|
||||||
|
dup push x #@ -4 # + y #@
|
||||||
|
16 # pop rect
|
||||||
|
6 #for 16 # ndark 6 #next ;
|
||||||
|
|
||||||
|
: bitmap
|
||||||
|
0 #
|
||||||
|
: +bitmap ( o )
|
||||||
|
x #@ + y #@
|
||||||
|
-if 2drop ; then
|
||||||
|
4.4 ( w h )
|
||||||
|
: (bitmap) ( x y w h )
|
||||||
|
dup y #+!
|
||||||
|
clip
|
||||||
|
2dup * push ( w h r: w*h )
|
||||||
|
rect
|
||||||
|
pop 1+ clrc 2/' 7 #for
|
||||||
|
4.4r gray gray
|
||||||
|
7 #next ;
|
||||||
|
|
||||||
|
: (hex2)
|
||||||
|
micro ##p!
|
||||||
|
$f # and 10 # * +p
|
||||||
|
y #@ -if drop; then drop
|
||||||
|
x #@ 3 # + y #@
|
||||||
|
5 # 4 #
|
||||||
|
(bitmap) ;
|
||||||
|
|
||||||
|
: hex2 ( u - )
|
||||||
|
dup (hex2)
|
||||||
|
gap
|
||||||
|
[swap] (hex2)
|
||||||
|
;
|
||||||
|
|
||||||
|
: acknak
|
||||||
|
0=if'
|
||||||
|
$c # red #!
|
||||||
|
$2 # grn #!
|
||||||
|
$2 # blu #! ;
|
||||||
|
then
|
||||||
|
$2 # red #!
|
||||||
|
$c # grn #!
|
||||||
|
$2 # blu #! ;
|
||||||
|
|
||||||
|
: d-byte-ack
|
||||||
|
acknak
|
||||||
|
18 # preblank
|
||||||
|
gap
|
||||||
|
dot ##p!
|
||||||
|
7 # +bitmap
|
||||||
|
|
||||||
|
gap
|
||||||
|
|
||||||
|
white
|
||||||
|
hex2
|
||||||
|
gap gap gap ;
|
||||||
|
|
||||||
|
: barpoint ( u - ) \ update the slash bar bounds
|
||||||
|
-if drop; then
|
||||||
|
dup
|
||||||
|
talk0 #@ umin talk0 #!
|
||||||
|
talk1 #@ umax talk1 #! ;
|
||||||
|
|
||||||
|
: slashcolor 8 # setgray ;
|
||||||
|
|
||||||
|
here constant DRAW-SEGMENT \ This block must all be in the same 2K segment
|
||||||
|
|
||||||
|
: startwave
|
||||||
|
128 # 7 #!
|
||||||
|
0 # 8 # 128 # rect
|
||||||
|
story # a!
|
||||||
|
[
|
||||||
|
SP x mov
|
||||||
|
x dec
|
||||||
|
x dec
|
||||||
|
0 y mov
|
||||||
|
] ;
|
||||||
|
|
||||||
|
: column
|
||||||
|
$df cond
|
||||||
|
: bail
|
||||||
|
[
|
||||||
|
x SP mov
|
||||||
|
y 0 mov
|
||||||
|
] then ;
|
||||||
|
|
||||||
|
: hi full dark dark dark dark dark dark dark column ;
|
||||||
|
: lo dark dark dark dark dark dark dark full column ;
|
||||||
|
: change
|
||||||
|
full full full full full full full full column ;
|
||||||
|
: undef
|
||||||
|
half half half half half half half half column ;
|
||||||
|
|
||||||
|
: d-stop
|
||||||
|
drop a+
|
||||||
|
0 # red #!
|
||||||
|
7 # grn #!
|
||||||
|
7 # blu #!
|
||||||
|
symbol-p ##p!
|
||||||
|
: (d-stop)
|
||||||
|
12 # preblank
|
||||||
|
bitmap ;
|
||||||
|
|
||||||
|
:m y; \ return if y>127
|
||||||
|
$bc , 128 , 0 , \ CJNE R4,#128,+0
|
||||||
|
0=if' ; then m;
|
||||||
|
|
||||||
|
: d-direction
|
||||||
|
arrow ##p!
|
||||||
|
if'
|
||||||
|
larrow ##p!
|
||||||
|
then
|
||||||
|
$f # red #!
|
||||||
|
$e # grn #!
|
||||||
|
$2 # blu #!
|
||||||
|
-5 # y #+!
|
||||||
|
bitmap ;
|
||||||
|
|
||||||
|
: slashv ( u - ) \ draw the bottom slash segment
|
||||||
|
$08 # <if drop; then
|
||||||
|
$78 # <if
|
||||||
|
talked. 0=if.
|
||||||
|
talker (#!)
|
||||||
|
talked. set
|
||||||
|
then
|
||||||
|
talker @=if
|
||||||
|
slashcolor
|
||||||
|
x #@ -4 # + y #@ -5 # +
|
||||||
|
dup $7f # xor barpoint
|
||||||
|
6 # 1 # wash
|
||||||
|
then
|
||||||
|
then
|
||||||
|
drop;
|
||||||
|
|
||||||
|
: d-start
|
||||||
|
acknak
|
||||||
|
18 # preblank
|
||||||
|
gap
|
||||||
|
dot ##p!
|
||||||
|
7 # +bitmap
|
||||||
|
drop @+ clrc 2/'
|
||||||
|
|
||||||
|
d-direction
|
||||||
|
|
||||||
|
gap
|
||||||
|
|
||||||
|
dup white hex2
|
||||||
|
slashv
|
||||||
|
|
||||||
|
gap gap gap
|
||||||
|
y;
|
||||||
|
$c # red #!
|
||||||
|
$8 # grn #!
|
||||||
|
$0 # blu #!
|
||||||
|
symbol-s ##p!
|
||||||
|
(d-stop) ;
|
||||||
|
|
||||||
|
: d-byte
|
||||||
|
drop @+ d-byte-ack ;
|
||||||
|
|
||||||
|
: d-bang
|
||||||
|
drop a+
|
||||||
|
15 # red #!
|
||||||
|
0 # grn #!
|
||||||
|
1 # blu #!
|
||||||
|
symbol-b ##p!
|
||||||
|
12 # preblank
|
||||||
|
bitmap ;
|
||||||
|
|
||||||
|
: d-quit a+ 128 # y #! drop;
|
||||||
|
:m jumptable 2* here [ 4 + ] ##p! $73 , ( JMP @A+DPTR ) m;
|
||||||
|
|
||||||
|
: dispatch
|
||||||
|
@+ jumptable
|
||||||
|
( 0 ) d-quit ;
|
||||||
|
( 1 ) d-stop ;
|
||||||
|
( 2 ) d-start ;
|
||||||
|
( 3 ) d-byte ;
|
||||||
|
( 4 ) d-bang ;
|
||||||
|
|
||||||
|
: l-dispatch
|
||||||
|
begin
|
||||||
|
dispatch
|
||||||
|
y;
|
||||||
|
again
|
||||||
|
|
||||||
|
:m pinkwash
|
||||||
|
8 # red #!
|
||||||
|
0 # grn #!
|
||||||
|
8 # blu #!
|
||||||
|
0 # 117 # 128 # 17 #
|
||||||
|
wash m;
|
||||||
|
|
||||||
|
: hline ( x y l ) 1 # wash ;
|
||||||
|
: vline ( x y l ) 1 # swap wash ;
|
||||||
|
|
||||||
|
: addrgrid ( u - ) \ C set if column 7
|
||||||
|
dup 2/ 2/ 2/ 7 # * 7 # + y #!
|
||||||
|
7 # and dup 17 # * x #!
|
||||||
|
-7 # + drop;
|
||||||
|
|
||||||
|
: (slash) ( u - ) \ from the address, vertical down line
|
||||||
|
addrgrid
|
||||||
|
[ y inc y inc ]
|
||||||
|
0=if'
|
||||||
|
10 # adv
|
||||||
|
xy@ 3 # hline
|
||||||
|
3 # adv
|
||||||
|
else
|
||||||
|
-4 # adv
|
||||||
|
xy@ 3 # hline
|
||||||
|
then
|
||||||
|
|
||||||
|
xy@ 117 # over - vline ;
|
||||||
|
|
||||||
|
: slash ( u - )
|
||||||
|
slashcolor (slash)
|
||||||
|
[ x slashx mov ] ;
|
||||||
|
|
||||||
|
: unslash ( u - )
|
||||||
|
black (slash) ;
|
||||||
|
|
||||||
|
: d-slashbar
|
||||||
|
0# setgray \ undraw
|
||||||
|
0# 117 # 128 # hline
|
||||||
|
slashcolor
|
||||||
|
talked. if.
|
||||||
|
slashx #@ barpoint
|
||||||
|
talk0 #@ talk1 #@ over negate + 1+
|
||||||
|
117 # swap hline
|
||||||
|
then ;
|
||||||
|
|
||||||
|
: ingrad ( u - )
|
||||||
|
2* grad ##p! +p setcolor ;
|
||||||
|
|
||||||
|
: newtalker
|
||||||
|
white
|
||||||
|
: d-addr
|
||||||
|
dup addrgrid drawhex ;
|
||||||
|
|
||||||
|
: d-sda-stop
|
||||||
|
5 # 6 #for hi 6 #next
|
||||||
|
change
|
||||||
|
6 # 6 #for lo 6 #next
|
||||||
|
prev. clr
|
||||||
|
a+ drop;
|
||||||
|
|
||||||
|
: bar
|
||||||
|
0=if'
|
||||||
|
prev. if. change else lo then lo ;
|
||||||
|
then
|
||||||
|
prev. 0=if. change else hi then hi ;
|
||||||
|
|
||||||
|
: d-sda-byte
|
||||||
|
@+
|
||||||
|
cplc
|
||||||
|
9 # 6 #for
|
||||||
|
bar
|
||||||
|
[ prev. movcb ]
|
||||||
|
2/'
|
||||||
|
6 #next
|
||||||
|
drop drop;
|
||||||
|
|
||||||
|
: d-sda-start
|
||||||
|
d-sda-byte
|
||||||
|
6 # prev. if. change 1- then
|
||||||
|
6 #for lo 6 #next
|
||||||
|
change
|
||||||
|
5 # 6 #for hi 6 #next
|
||||||
|
prev. set
|
||||||
|
;
|
||||||
|
|
||||||
|
: d-sda-none
|
||||||
|
label-sda [ 1 + ] ##p!
|
||||||
|
: (label)
|
||||||
|
16 # 1 #for
|
||||||
|
4 # 6 #for
|
||||||
|
4.4r gray gray
|
||||||
|
6 #next
|
||||||
|
column
|
||||||
|
1 #next
|
||||||
|
begin hi again
|
||||||
|
|
||||||
|
: d-sda-bang
|
||||||
|
12 # 6 #for undef 6 #next
|
||||||
|
a+ drop;
|
||||||
|
|
||||||
|
: sda-dispatch
|
||||||
|
@+
|
||||||
|
jumptable
|
||||||
|
( 0 ) d-sda-none ;
|
||||||
|
( 1 ) d-sda-stop ;
|
||||||
|
( 2 ) d-sda-start ;
|
||||||
|
( 3 ) d-sda-byte ;
|
||||||
|
( 4 ) d-sda-bang ;
|
||||||
|
|
||||||
|
: d-sda
|
||||||
|
140 # startwave
|
||||||
|
$4 # red #!
|
||||||
|
$5 # grn #!
|
||||||
|
$f # blu #!
|
||||||
|
begin
|
||||||
|
sda-dispatch
|
||||||
|
again
|
||||||
|
|
||||||
|
: 9hi
|
||||||
|
9 # 6 #for hi 6 #next ;
|
||||||
|
: 2lo
|
||||||
|
2 # 6 #for lo 6 #next ;
|
||||||
|
: d-scl-stop
|
||||||
|
9hi
|
||||||
|
change
|
||||||
|
2lo
|
||||||
|
a+ drop;
|
||||||
|
|
||||||
|
: d-scl-byte
|
||||||
|
a+
|
||||||
|
9 # 6 #for
|
||||||
|
lo change
|
||||||
|
6 #next
|
||||||
|
drop;
|
||||||
|
: d-scl-start
|
||||||
|
d-scl-byte
|
||||||
|
2lo
|
||||||
|
change
|
||||||
|
9hi
|
||||||
|
;
|
||||||
|
|
||||||
|
: d-scl-none
|
||||||
|
label-scl [ 1 + ] ##p!
|
||||||
|
(label) ;
|
||||||
|
|
||||||
|
: scl-dispatch
|
||||||
|
@+ jumptable
|
||||||
|
( 0 ) d-scl-none ;
|
||||||
|
( 1 ) d-scl-stop ;
|
||||||
|
( 2 ) d-scl-start ;
|
||||||
|
( 3 ) d-scl-byte ;
|
||||||
|
( 4 ) d-sda-bang ;
|
||||||
|
|
||||||
|
here [ DRAW-SEGMENT xor $f800 and throw ]
|
||||||
|
|
||||||
|
: d-scl
|
||||||
|
152 # startwave
|
||||||
|
$c # red #!
|
||||||
|
$b # grn #!
|
||||||
|
$1 # blu #!
|
||||||
|
begin
|
||||||
|
scl-dispatch
|
||||||
|
again
|
||||||
|
|
||||||
|
: rtl
|
||||||
|
%10101000 #
|
||||||
|
: >madctl
|
||||||
|
MADCTL # write-cmd write-data ;
|
||||||
|
: ltr
|
||||||
|
%11001000 # >madctl ;
|
||||||
|
|
||||||
|
: drawmode
|
||||||
|
black
|
||||||
|
0# 0# 2dup 10 # 9 # wash
|
||||||
|
white xy! mode #@ ch ;
|
||||||
|
|
||||||
|
: fixed
|
||||||
|
rtl
|
||||||
|
3 # setgray
|
||||||
|
$08 #
|
||||||
|
112 # 6 #for
|
||||||
|
dup d-addr
|
||||||
|
1+
|
||||||
|
6 #next
|
||||||
|
|
||||||
|
ltr
|
||||||
|
|
||||||
|
drawmode
|
||||||
|
|
||||||
|
tplan ##p!
|
||||||
|
begin
|
||||||
|
@p+ 0=if drop; then
|
||||||
|
@p+ xy!
|
||||||
|
setcolor
|
||||||
|
str
|
||||||
|
again
|
||||||
|
|
||||||
|
: d-slash
|
||||||
|
talked. if.
|
||||||
|
ptalked. if.
|
||||||
|
ptalker #@ talker @=if drop; then
|
||||||
|
unslash
|
||||||
|
then
|
||||||
|
talker #@ slash ;
|
||||||
|
then
|
||||||
|
ptalker #@ unslash ;
|
||||||
|
|
||||||
|
: cool1 ( addr - )
|
||||||
|
\ talker @=if talked. if. drop; then then
|
||||||
|
dup heatmap @x if ( addr h )
|
||||||
|
1- (!x) ingrad
|
||||||
|
d-addr ;
|
||||||
|
then
|
||||||
|
2drop ;
|
||||||
|
|
||||||
|
: cool
|
||||||
|
rtl
|
||||||
|
$08 #
|
||||||
|
112 # 6 #for
|
||||||
|
dup cool1
|
||||||
|
1+
|
||||||
|
6 #next
|
||||||
|
drop
|
||||||
|
ltr ;
|
||||||
|
|
||||||
|
\ talked. is true when talker is valid
|
||||||
|
\ ptalked. and ptalker hold previous values
|
||||||
|
\ slashx is set to the X of the slash line
|
||||||
|
|
||||||
|
: waves
|
||||||
|
\ pinkwash
|
||||||
|
|
||||||
|
rtl
|
||||||
|
|
||||||
|
122 # 0 # xy!
|
||||||
|
|
||||||
|
$ff # talk0 #!
|
||||||
|
$00 # talk1 #!
|
||||||
|
talked. clr
|
||||||
|
|
||||||
|
story # a!
|
||||||
|
l-dispatch
|
||||||
|
|
||||||
|
d-sda
|
||||||
|
d-scl
|
||||||
|
|
||||||
|
ltr
|
||||||
|
|
||||||
|
d-slash
|
||||||
|
d-slashbar
|
||||||
|
|
||||||
|
talker #@ ptalker #!
|
||||||
|
[ talked. movbc ptalked. movcb ]
|
||||||
|
|
||||||
|
DISPON # write-cmd
|
||||||
|
;
|