uxn-utils/gui/chr-view/chr-view.tal

341 lines
6.4 KiB
Tal

( uxnemu chr-view.rom image.chr )
|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1
|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
|80 @Controller &vector $2 &button $1 &key $1
|a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2
|0000
@src $40
|0100 ( -> )
set-theme-dark
#0280 .Screen/width DEO2 ( 640px )
#01e0 .Screen/height DEO2 ( 480px )
;on-console .Console/vector DEO2
;on-control .Controller/vector DEO2
load-theme
BRK
@on-console ( -> )
;src STH2
( read source )
.Console/read DEI
DUP #20 LTH OVR #7f GTH ORA ?&end
STH2kr slen #003f GTH2 ?&end
STH2r sput BRK
&end
POP
( mode from src )
STH2kr scap #0004 SUB2 ;&icn-ext scmp #00 EQU ?&no-icn
set-mode-icn
&no-icn
( resize from src )
STH2kr scap #0009 SUB2 read-size
ORAk #00 EQU ?&no-size
OVR #00 SWP #30 SFT2 .Screen/width DEO2
#00 OVR INC #30 SFT2 .Screen/height DEO2
&no-size
POP2
STH2r draw-image
BRK
&icn-ext ".icn $1
@on-control ( -> )
.Controller/button DEI
DUP #10 NEQ ?&no-u
.Screen/height DEI2 #0008 SUB2 .Screen/height DEO2
;src draw-image
&no-u
DUP #20 NEQ ?&no-d
.Screen/height DEI2 #0008 ADD2 .Screen/height DEO2
;src draw-image
&no-d
DUP #40 NEQ ?&no-l
.Screen/width DEI2 #0008 SUB2 .Screen/width DEO2
;src draw-image
&no-l
DUP #80 NEQ ?&no-r
.Screen/width DEI2 #0008 ADD2 .Screen/width DEO2
;src draw-image
&no-r
DUP #01 NEQ ?&no-a
toggle-theme
&no-a
DUP #02 NEQ ?&no-b
toggle-mode
&no-b
POP
BRK
@toggle-theme ( -- )
.System/r DEI2 #05cf EQU2 ?&no-light
set-theme-dark
;src !draw-image
&no-light
set-theme-light
;src draw-image
JMP2r
@set-theme-dark ( -- )
#05cf .System/r DEO2
#05cf .System/g DEO2
#05cf .System/b DEO2
JMP2r
@set-theme-light ( -- )
#fc50 .System/r DEO2
#fc50 .System/g DEO2
#fc50 .System/b DEO2
JMP2r
@toggle-mode ( -- )
;draw-image/length LDA2 #0010 EQU2 ?&no-chr
set-mode-chr
;src !draw-image
&no-chr
set-mode-icn
;src draw-image
JMP2r
@set-mode-chr ( -- )
#0010 ;draw-image/length STA2
#81 ;draw-image/color STA
JMP2r
@set-mode-icn ( -- )
#0008 ;draw-image/length STA2
#03 ;draw-image/color STA
JMP2r
@read-size ( 00x00* -- w h )
DUP2 sbyte #00 EQU ?&cancel
INC2k INC2 LDA LIT "x NEQ ?&cancel
DUP2 #0003 ADD2 sbyte #00 EQU ?&cancel
( y ) DUP2 #0003 ADD2 sbyte STH
( x ) sbyte STHr
JMP2r
&cancel POP2 #0000 JMP2r
(
@|drawing )
@draw-image ( name* -- )
#0000 DUP2 .Screen/x DEO2 .Screen/y DEO2
.File/name DEO2
[ LIT2 &length 0010 ] .File/length DEO2
;&buf .Screen/addr DEO2
#01 .Screen/auto DEO
&stream
;&buf .File/read DEO2
[ LIT &color 81 ] .Screen/sprite DEO
.Screen/x DEI2 .Screen/width DEI2 LTH2 ?&no-line
#0000 .Screen/x DEO2
.Screen/y DEI2k #0008 ADD2 ROT DEO2
&no-line
.File/success DEI2 ORA ?&stream
draw-interface
JMP2r
&buf $10
@draw-interface ( -- )
#0000 .Screen/x DEO2
.Screen/height DEI2 #0008 SUB2 .Screen/y DEO2
;src draw-str
( size )
LIT "( draw-chr
.Screen/width DEI2 #03 SFT2 NIP draw-byte
LIT "x draw-chr
.Screen/height DEI2 #03 SFT2 NIP draw-byte
LIT ") draw-chr
JMP2r
@draw-str ( str* -- )
LDAk #00 EQU ?&skip
&while
LDAk draw-chr
INC2 LDAk ?&while
&skip
POP2
JMP2r
@draw-byte ( byte -- )
DUP #04 SFT draw-hex
@draw-hex ( char -- )
#0f AND DUP #09 GTH #07 MUL ADD #30 ADD
@draw-chr ( char -- )
#20 SUB #00 SWP #30 SFT2 ;font ADD2 .Screen/addr DEO2
[ LIT &color 03 ] .Screen/sprite DEO
JMP2r
(
@|stdlib )
@slen ( str* -- len* )
DUP2 scap SWP2 SUB2
JMP2r
@scap ( str* -- end* )
LDAk #00 NEQ JMP JMP2r
&while INC2 LDAk ?&while
JMP2r
@sput ( char str* -- )
scap STA
JMP2r
@sbyte ( str* -- byte )
LDAk chex STH
INC2 LDA chex
STHr #40 SFT ADD
JMP2r
@chex ( char -- hex )
DUP #2f GTH OVR #3a LTH AND ?&number
DUP #60 GTH OVR #67 LTH AND ?&lc
DUP #40 GTH OVR #47 LTH AND ?&uc
POP #00 JMP2r
&number #30 SUB JMP2r
&uc #37 SUB JMP2r
&lc #57 SUB
JMP2r
@scmp ( a* b* -- flag )
STH2
&loop
LDAk LDAkr STHr NEQ ?&end
LDAk LDAkr STHr ORA ?&not-end
POP2 POP2r #01 JMP2r
&not-end
INC2 INC2r !&loop
&end
POP2 POP2r #00
JMP2r
( theme )
@load-theme ( -- )
;&path .File/name DEO2
#0002 .File/length DEO2
;&r .File/read DEO2
;&g .File/read DEO2
;&b .File/read DEO2
.File/success DEI2 ORA #01 JCN JMP2r
LIT2 &r $2 .System/r DEO2
LIT2 &g $2 .System/g DEO2
LIT2 &b $2 .System/b DEO2
JMP2r
&path ".theme $1
(
@|assets )
@font ( block8 )
0000 0000 0000 0000 1010 1010 1000 1000
2828 0000 0000 0000 44fe 4444 44fe 4400
107e 807c 02fc 1000 0044 0810 2044 0000
7884 8864 9a84 7a00 1020 0000 0000 0000
2040 4040 4040 2000 0804 0404 0404 0800
0044 2810 2844 0000 0010 107c 1010 0000
0000 0000 0010 2000 0000 007c 0000 0000
0000 0000 0000 1000 0204 0810 2040 8000
7c82 8282 8282 7c00 3010 1010 1010 3800
7c82 027c 8080 fe00 7c82 021c 0282 7c00
2242 82fe 0202 0200 fe80 807c 0282 7c00
7c82 80fc 8282 7c00 fe82 0408 0810 1000
7c82 827c 8282 7c00 7c82 827e 0202 0200
0000 1000 1000 0000 0000 1000 1010 2000
0008 1020 1008 0000 0000 7c00 7c00 0000
0010 0804 0810 0000 7c82 820c 1000 1000
7c82 92aa aa92 6400 7c82 82fe 8282 8200
fc82 82fc 8282 fc00 7c82 8080 8082 7c00
fc82 8282 8282 fc00 fe80 80f0 8080 fe00
fe80 80f0 8080 8000 7c82 808e 8282 7c00
8282 82fe 8282 8200 3810 1010 1010 3800
0602 0202 0282 7c00 8284 88f0 8884 8200
8080 8080 8080 fe00 ec92 9292 9292 9200
c2a2 a292 8a8a 8600 7c82 8282 8282 7c00
fc82 82fc 8080 8000 7c82 8282 8a84 7a00
fc82 82fc 8282 8200 7c82 807c 0282 7c00
fe10 1010 1010 1000 8282 8282 8286 7a00
8282 4444 2828 1000 9292 9292 9292 6c00
8244 2810 2844 8200 8282 4428 1010 1000
fe02 0c10 6080 fe00 6040 4040 4040 6000
8040 2010 0804 0200 0c04 0404 0404 0c00
1028 0000 0000 0000 0000 0000 0000 fe00
1008 0000 0000 0000 0000 7c02 7e82 7e00
0000 fc82 fc82 fc00 0000 7c82 8082 7c00
0000 027e 8282 7e00 0000 7c82 fc80 7e00
0000 7c82 e080 8000 0000 7c82 7e02 fc00
0000 80fc 8282 8200 0000 1000 1010 1000
0000 0200 0282 7c00 0000 8284 f884 8200
0000 8080 8080 7e00 0000 6c92 9292 9200
0000 bcc2 8282 8200 0000 7c82 8282 7c00
0000 fc82 fc80 8000 0000 7c82 7e02 0200
0000 bcc2 8080 8000 0000 7e80 7c02 fc00
0000 fe10 1010 1000 0000 8282 8282 7c00
0000 8282 4428 1000 0000 9292 9292 6c00
0000 8244 3844 8200 0000 8282 7e02 7c00
0000 fe02 7c80 fe00 2040 4080 4040 2000
1010 1010 1010 1000 0804 0402 0404 0800
0000 0032 4c00 0000 aa55 aa55 aa55 aa55