Starting catty

This commit is contained in:
Devine Lu Linvega 2024-09-06 14:48:52 -07:00
parent e5f695d09f
commit 18ad732a24
3 changed files with 441 additions and 0 deletions

30
gui/catty/makefile Normal file
View File

@ -0,0 +1,30 @@
ID=catty
DIR=~/roms
ASM=uxncli ${DIR}/drifblim.rom
LIN=uxncli ${DIR}/uxnlin.rom
EMU=uxn11
ROM=bin/${ID}.rom
all: ${ROM}
lint:
@ ${LIN} src/${ID}.tal
run: all
@ ${EMU} ${ROM}
clean:
@ rm -f ${ROM} ${ROM}.sym
install: ${ROM}
@ cp ${ROM} ${DIR}
uninstall:
@ rm -f ${DIR}/${ID}.rom
archive:
cat src/${ID}.tal src/assets.tal | sed 's/~[^[:space:]]\+//' > ~/Git/oscean/etc/${ID}.tal.txt
uxnasm ~/Git/oscean/etc/${ID}.tal.txt ${ROM}
@ ${EMU} ${ROM}
.PHONY: all clean lint run install uninstall archive
${ROM}: src/${ID}.tal src/assets.tal
@ mkdir -p bin
@ ${ASM} src/${ID}.tal ${ROM}

272
gui/catty/src/assets.tal Normal file
View File

@ -0,0 +1,272 @@
( assets )
@check-icn [ aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 ]
@font [
0405 0509 0709 0903 0505 0807 0407 0307
0808 0808 0808 0808 0808 0304 0607 0608
0a09 0908 0807 0708 0806 0708 070b 0a08
0808 0808 0809 090b 0707 0706 0706 0408
0108 0807 0707 0607 0704 0606 040b 0707
0807 0607 0608 070a 0707 0705 0405 0801 ]
&glyphs [
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1010 1010 2020 2000 2000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0050 5050 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0001 0a3f 147e 2420 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0008 3854 5030 1028 24a4 7820 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 3e51 9264 0816 2949 8600 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0018 2424 2830 508a 848a 7100 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0040 4040 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0008 1020 2040 4040 4040 2020 1000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0020 1008 0808 0808 0810 1020 4000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 4428 fe28 4402 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 1010 7c10 1000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 2020 4000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 7e00 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 4000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0004 0408 0810 1020 2040 4000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0018 2442 4282 8282 8244 3800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0808 0808 0808 1010 1000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 3c42 0204 1820 4080 fc00 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1c22 0418 0402 8284 7800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 2022 4244 84fe 0408 0808 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 3e40 8070 0804 0484 7800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0010 2040 409c a2c2 8244 3800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 7e82 0404 0808 1010 1000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0018 2444 4830 4884 8484 7800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 7884 8282 423e 0404 0810 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0020 0000 0000 4000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0010 1000 0000 2020 4000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0408 1020 2010 0800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 7c00 7c00 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 4020 1008 0810 2000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 3c42 0204 0810 2000 2000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 001f 204e 5253 4c21 1e00 0000 0000
0000 0000 8080 8000 0000 0000 0000 0000
0001 0305 0912 1227 fa42 8280 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0e11 1122 2621 4141 829c 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1c22 4480 8080 8044 3800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0010 7824 2242 4242 8284 f800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1c20 4040 7880 8080 7800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1c20 4040 7880 8080 8000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0c30 4080 8c92 8244 3800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 2222 2242 7c44 8488 8800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0808 1010 1010 2020 2000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0e34 0404 0448 8888 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1126 2830 2050 4844 4200 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1010 2020 2040 4040 3c00 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0008 1818 292a 4a4c 4881 8100 0000 0000
0000 40c0 4040 4080 8000 0000 0000 0000
0000 1010 2829 2945 4542 4200 0000 0000
0000 8080 8000 0000 0000 0000 0000 0000
0000 3844 8282 8284 8448 3000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1c22 4242 8498 8080 8000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1824 4242 8284 9448 3400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 3844 8488 f0a0 9088 8402 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1c22 2018 0442 8284 7800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0004 7e08 0810 1010 2020 2000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 2121 4142 8282 8244 3800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 4142 4244 2428 2810 1000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 8080 8888 4955 5522 2200 0000 0000
0000 4040 8080 0000 0000 0000 0000 0000
0004 4428 2810 1028 4844 8400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 8444 2828 1010 1020 2000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 3cc4 0810 1020 408c f000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0018 2020 2020 4040 4040 4030 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0020 2020 1010 1010 0808 0808 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0018 0404 0408 0808 1010 1060 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 2050 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 ff00 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 1e22 4284 848c 7400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0020 2040 5864 4242 8284 b800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 3844 8880 8088 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0002 0204 043c 4484 8888 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 3844 84f8 8088 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
000c 1020 2078 2020 4040 4000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 1824 4444 8c94 6808 9060 0000
0000 0000 0000 0000 0000 0000 0000 0000
0020 4040 98a4 c4c4 8888 9000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1000 2020 2020 4040 4000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0400 0404 0408 0808 1010 9060 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 2020 4048 5060 a090 8800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 2020 2040 4040 8080 8000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 5867 4444 8888 8800 0000 0000
0000 0000 0080 4040 4080 8000 0000 0000
0000 0000 5864 4484 8488 8800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 1824 4484 8488 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 2834 2222 2244 5840 8080 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 344c 4484 8c94 6808 1010 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 5c60 4040 8080 8000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 1824 4038 0488 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1010 f820 2020 4040 4000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 2242 4484 8c94 6400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0002 8484 8848 5020 2000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0091 91aa aa44 4400 0000 0000
0000 0000 8000 0000 0000 0000 0000 0000
0000 0000 4448 2810 2848 4480 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 8484 8850 5020 2040 4080 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 7c88 1020 4084 f800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
1820 2040 4040 8040 4040 4040 3000 0000
0000 0000 0000 0000 0000 0000 0000 0000
1010 1010 2020 2020 2020 4040 4000 0000
0000 0000 0000 0000 0000 0000 0000 0000
2010 1010 1008 1010 1010 2020 4000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 3946 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0200 0305 0912 1227 fa42 8280 0000 0000
8000 0000 0000 0000 0000 0000 0000 0000
0c12 0c04 0c14 244e 7484 8484 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1c22 4284 8080 8044 3810 1060 0000
0000 0000 0000 0000 0000 0000 0000 0000
0810 003c 4040 f880 8080 7800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
3946 0022 5252 524a 8a8a 8480 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
2400 3844 8282 8282 8444 3800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
1200 2121 2141 4141 4122 1c00 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0004 0800 1e22 4282 848c 7400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0008 0400 1e22 4282 848c 7400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
000c 1200 1e22 4284 848c 7400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1200 1e22 4282 848c 7400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0032 4c00 1e22 4282 848c 7400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0c12 0c00 1e22 4282 848c 7400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 3844 8880 8088 7020 1060 0000
0000 0000 0000 0000 0000 0000 0000 0000
0008 1000 3844 88f0 8088 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0020 1000 3844 88f0 8088 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0030 4800 3844 88f0 8088 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 2800 3844 88f0 8088 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0010 2000 2020 4040 4080 8000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0020 1000 1010 2020 2040 4000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0030 4800 1010 2020 2040 4000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 5000 2020 4040 4080 8000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0064 9800 5864 4484 8488 8800 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0008 1000 3844 8484 8488 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0020 1000 3844 8484 8488 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0030 4800 3844 8484 8488 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 4800 3844 8484 8488 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0064 9800 3844 8484 8488 7000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0004 0800 2242 4484 848c 7400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0010 0800 2242 4484 848c 7400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
000c 1200 2242 4284 848c 7400 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1400 2242 4484 848c 7400 0000 0000 ]
@message/buf $200
@input/buf $200

139
gui/catty/src/catty.tal Normal file
View File

@ -0,0 +1,139 @@
( listen! )
|10 @Console &vector $2 &read $5 &type $1 &write $1 &error $3 &addr $2 &mode $1 &exec $1
|00 @System &vector $2 &expansion $2 &wst $1 &rst $1 &metadata $2 &r $2 &g $2 &b $2 &debug $1 &state $1
|20 @Screen &vector $2 &width $2 &height $2 &auto $2 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
|80 @Controller &vector $2 &button $1 &key $1
|90 @Mouse &vector $2 &x $2 &y $2 &state $6 &scrolly &scrolly-hb $1 &scrolly-lb $1
|a0 @File &vector $2 &success $1 &success-lb $1 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2
|c0 @DateTime &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1
|000
|100
@on-reset ( -> )
( | theme )
#f0e1 DUP2 .System/r DEO2
DUP2 .System/g DEO2
.System/b DEO2
( | size )
#0200 .Screen/width DEO2
#0100 .Screen/height DEO2
#0010 .Screen/x DEO2
#0010 .Screen/y DEO2
( | request )
;dict/test .Console/addr DEO2
[ LIT2 03 -Console/mode ] DEO
[ LIT2 01 -Console/exec ] DEO
;on-console .Console/vector DEO2
;on-control .Controller/vector DEO2
BRK
@on-console ( -> )
[ LIT2 01 -Console/type ] DEI EQU ?{ BRK }
[ LIT2 0a -Console/read ] DEI EQUk ?{ message/<append>
POP BRK }
POP2 message/<parse>
BRK
@on-control ( -> )
.Controller/key DEI DUP ?{ POP BRK }
DUP #0d NEQ ?{ POP input/<send>
BRK }
input/<append>
BRK
(
@|input )
@input/<send> ( -- )
;&buf .Console/addr DEO2
[ LIT2 01 -Console/exec ] DEO
JMP2r
@input/<append> ( c -- )
[ LIT2 &ptr =&buf ] INC2k ,&ptr STR2
STA
( >> )
@input/<draw> ( -- )
#0010 .Screen/x DEO2
;message/pen LDA2 .Screen/y DEO2
;&buf #01 !<draw-uf2>
(
@|message )
@message/<parse> ( -- )
#00 /<append>
;&buf #01 <draw-uf2>
#0010 .Screen/x DEO2
[ LIT2 &pen 0010 ] #0010 ADD2 DUP2 ,&pen STR2
.Screen/y DEO2
( >> )
@message/<new> ( -- )
( reset ) ;&buf ,&ptr STR2
JMP2r
@message/<append> ( c -- )
[ LIT2 &ptr =&buf ] INC2k ,&ptr STR2
STA
JMP2r
(
@|drawing )
@<draw-uf2> ( text* color -- )
,<draw-glyph>/color STR
[ LIT2 15 -Screen/auto ] DEO
&>w ( -- )
LDAk <draw-glyph>
&continue ( -- )
next-glyph LDAk ?&>w &end POP2 JMP2r
@<draw-glyph> ( char -- )
DUP #7f LTH ?{
POP ;check-icn .Screen/addr DEO2
,&color LDR .Screen/sprite DEO
JMP2r }
#20 SUB #00 SWP
( ) DUP2 #50 SFT2 ;font/glyphs ADD2 .Screen/addr DEO2
( ) ;font ADD2 LDA #00 SWP .Screen/x DEI2 ADD2
( ) [ LIT &color 05 ] .Screen/sprite DEOk DEO
.Screen/x DEO2
JMP2r
@next-glyph ( addr* -- addr* )
INC2 LDAk
( utf8 ) #06 SFT #02 EQU ?next-glyph
JMP2r
(
@|stdlib )
@<pstr> ( str* -- )
LDAk #18 DEO
INC2 & LDAk ?<pstr>
POP2 JMP2r
@<perr> ( str* -- )
LDAk #19 DEO
INC2 & LDAk ?<perr>
POP2 JMP2r
@<phex> ( short* -: )
SWP /b
&b ( byte -: )
DUP #04 SFT /c
&c ( byte -: )
#0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD #19 DEO
JMP2r
(
@|strings )
@dict
&test "ls $1
~src/assets.tal