-
Notifications
You must be signed in to change notification settings - Fork 0
/
demo.spin2
93 lines (78 loc) · 2.33 KB
/
demo.spin2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
''
'' clock frequency settings
'' for 640x480 we use a 25 MHz pixel clock
'' for 800x600 we use a 40 MHz pixel clock
'' for 1024x768 we use a 65 MHz pixel clock
''
'' for best results the system clock should be a multiple of
'' the pixel clock
''
'' 200 MHz is a convenient one for many purposes, and
'' is only a slight overclocking
''
CON
PINBASE = 48
_clkfreq = 200_000_000
'_clkfreq = 195_000_000
DAT
democolors
long $FF000000, $FFFF0000, $00FF0000, $00FFFF00
long $0000FF00, $FF00FF00, $FFFFFF00, $00000000
long $7F000000, $007F7F00, $007F0000
OBJ
scrn: "ansi"
ser: "SmartSerial"
PUB demo() | x, y, fgcol, bgcol, ch, grey, col1, col2, idx
'clkset(sys_clock_mode, sys_clock_freq) ' 20 MHz crystal * 8
' start up serial for debugging
ser.start(63, 62, 0, 230_400)
ser.str(string("VGA text demo", 13, 10))
' start up the VGA driver
scrn.start(PINBASE)
ser.str(string("screen started", 13, 10))
ch := 0
repeat y from 0 to scrn.ROWS-1
grey := y<<3
bgcol := (grey<<24) | (grey<<16) | (grey<<8)
repeat x from 0 to scrn.COLS-1
grey := (x & 15)
idx := x / 16
col1 := long[@democolors][idx]
col2 := long[@democolors][idx+1]
fgcol := colorblend(col1, col2, (grey<<4) + grey)
scrn.glyphat(x, y, ch++, fixupcol(fgcol), fixupcol(bgcol), $20)
repeat 10
ser.str(string("pause... "))
waitms(2000)
runtext()
PUB colorblend(a, b, mix) : r
r := a
org
setpiv mix
blnpix r, b
end
return r
PUB fixupcol(a) : x | r, g, b
b := (a>>8) & $FF
g := (a>>16) & $FF
r := a>>24
x := scrn.getrgbcolor(r, g, b)
'ser.printf("fixupcol(%x, %x, %x) -> %x\n", r, g, b, x)
return x
PUB runtext() | n
scrn.str(string(27, "[1;1H"))
scrn.str(string(27, "[0J"))
n := 0
repeat
scrn.nl()
scrn.str(string("Hello! ", 27, "[BCursor down"))
scrn.str(string(27, "[31mRed text "))
scrn.str(string(27, "[1;31mBright Red text"))
scrn.str(string(27, "[7mInverse "))
scrn.str(string(27, "[22;31mBold off "))
scrn.str(string(27, "[4mUnderline", 27, "[24m"))
scrn.str(string(27, "[9mStrikethru"))
scrn.str(string(27, "[0mEffects off "))
scrn.dec(n)
n++
waitms(1000)