diff --git a/gui/catty/makefile b/gui/catty/makefile new file mode 100644 index 0000000..a08ebce --- /dev/null +++ b/gui/catty/makefile @@ -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} + diff --git a/gui/catty/src/assets.tal b/gui/catty/src/assets.tal new file mode 100644 index 0000000..832de2f --- /dev/null +++ b/gui/catty/src/assets.tal @@ -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 + diff --git a/gui/catty/src/catty.tal b/gui/catty/src/catty.tal new file mode 100644 index 0000000..ee8bd36 --- /dev/null +++ b/gui/catty/src/catty.tal @@ -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/ + POP BRK } + POP2 message/ + BRK + +@on-control ( -> ) + .Controller/key DEI DUP ?{ POP BRK } + DUP #0d NEQ ?{ POP input/ + BRK } + input/ + BRK + +( +@|input ) + +@input/ ( -- ) + ;&buf .Console/addr DEO2 + [ LIT2 01 -Console/exec ] DEO + JMP2r + +@input/ ( c -- ) + [ LIT2 &ptr =&buf ] INC2k ,&ptr STR2 + STA + ( >> ) + +@input/ ( -- ) + #0010 .Screen/x DEO2 + ;message/pen LDA2 .Screen/y DEO2 + ;&buf #01 ! + +( +@|message ) + +@message/ ( -- ) + #00 / + ;&buf #01 + #0010 .Screen/x DEO2 + [ LIT2 &pen 0010 ] #0010 ADD2 DUP2 ,&pen STR2 + .Screen/y DEO2 + ( >> ) + +@message/ ( -- ) + ( reset ) ;&buf ,&ptr STR2 + JMP2r + +@message/ ( c -- ) + [ LIT2 &ptr =&buf ] INC2k ,&ptr STR2 + STA + JMP2r + +( +@|drawing ) + +@ ( text* color -- ) + ,/color STR + [ LIT2 15 -Screen/auto ] DEO + &>w ( -- ) + LDAk + &continue ( -- ) + next-glyph LDAk ?&>w &end POP2 JMP2r + +@ ( 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 ) + +@ ( str* -- ) + LDAk #18 DEO + INC2 & LDAk ? + POP2 JMP2r + +@ ( str* -- ) + LDAk #19 DEO + INC2 & LDAk ? + POP2 JMP2r + +@ ( 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 +