uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit cd1ef91494151fdef720521bf75cb311742b1c89
parent 3d49536d7629da9fc49dee095003b504af18faf9
Author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
Date:   Tue, 21 Sep 2021 19:39:29 +0200

Merge branch 'main' of ssh://git.sr.ht/~rabbits/uxn

Diffstat:
Aprojects/software/launcher.tal | 665+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 665 insertions(+), 0 deletions(-)

diff --git a/projects/software/launcher.tal b/projects/software/launcher.tal @@ -0,0 +1,665 @@ +( font ) + +%+ { ADD } %- { SUB } %* { MUL } %/ { DIV } +%< { LTH } %> { GTH } %= { EQU } %! { NEQ } +%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } +%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } + +%RTN { JMP2r } +%TOS { #00 SWP } +%BRK? { #01 JCN BRK } +%RTN? { #01 JCN RTN } + +%DEBUG { ;print-hex/byte JSR2 #0a .Console/write DEO } +%DEBUG2 { ;print-hex/short JSR2 #0a .Console/write DEO } + +( devices ) + +|00 @System &vector $2 &pad $6 &r $2 &g $2 &b $2 +|10 @Console [ &vector $2 &read $1 &pad $5 &write $1 &error $1 ] +|20 @Screen &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 +|80 @Controller [ &vector $2 &button $1 &key $1 ] +|a0 @File &vector $2 &success $2 &offset-hs $2 &offset-ls $2 &name $2 &length $2 &load $2 &save $2 + +( variables ) + +|0000 + +@input $30 + +( init ) + +|0100 ( -> ) + + ( theme ) + #a0f7 .System/r DEO2 + #a0f7 .System/g DEO2 + #a0f7 .System/b DEO2 + + ( vectors ) + ;on-button .Controller/vector DEO2 + + #0020 #0020 ;welcome-txt #01 ;draw-label JSR2 + #0020 #0030 ;today-txt #01 ;draw-label JSR2 + #0020 #0050 ;prompt-txt #02 ;draw-label JSR2 + +BRK + +@on-button ( -> ) + + .Controller/key DEI BRK? + + .Controller/key DEI + DUP #08 ! ,&no-backspace JCN + ;form/erase JSR2 POP BRK + &no-backspace + DUP #0d ! ,&no-enter JCN + ;form/validate JSR2 POP BRK + &no-enter + ;form/append JSR2 + +BRK + +@form ( -- ) + + &append ( char -- ) + ,&seek JSR STH2k NIP #30 < ,&can-append JCN + POP POP2r RTN + &can-append + ( save ) STH2kr STA + ( null ) #00 STH2r INC2 STA + #01 ,&draw JSR + RTN + + &validate ( -- ) + ;input ;launch JSR2 + #00 ,&draw JSR + ( null ) #0000 ;input STA2 + RTN + + &erase ( -- ) + ;input LDA2 #0000 !! ,&can-erase JCN + RTN + &can-erase + #00 ,&draw JSR + ( remove ) #00 ,&seek JSR #0001 -- STA + #01 ,&draw JSR + RTN + + &seek ( -- end* ) + ;input #0001 -- + &seek-loop + INC2 LDAk ,&seek-loop JCN + RTN + + &draw ( color -- ) + STH + #0030 #0070 ;input STHr ;draw-label JSR2 + RTN + +RTN + +@launch ( path* -- ) + + .File/name DEO2 + #ff00 .File/length DEO2 + #0100 .File/load DEO2 + +RTN + +@draw-label ( x* y* addr* color -- ) + + STH STH2 + .Screen/y DEO2 + .Screen/x DEO2 + STH2r + &loop + ( top-addr ) LDAk #00 - TOS #0010 MUL2 ;font ++ .Screen/addr DEO2 + ( top-draw ) STHkr .Screen/sprite DEO + ( bottom-addr ) .Screen/addr DEI2 #0008 ++ .Screen/addr DEO2 + ( next-y ) .Screen/y DEI2 #0008 ++ .Screen/y DEO2 + ( bottom-draw ) STHkr .Screen/sprite DEO + ( prev-y ) .Screen/y DEI2 #0008 -- .Screen/y DEO2 + ( move ) .Screen/x DEI2 #0008 ++ .Screen/x DEO2 + INC2 LDAk ,&loop JCN + POP2 POPr + +RTN + +@print-hex ( value* -- ) + + &short ( value* -- ) + SWP ,&echo JSR + &byte ( value -- ) + ,&echo JSR + RTN + + &echo ( value -- ) + STHk #04 SFT ,&parse JSR .Console/write DEO + STHr #0f AND ,&parse JSR .Console/write DEO + RTN + &parse ( value -- char ) + DUP #09 GTH ,&above JCN #30 + RTN &above #09 - #60 + RTN + +RTN + +@welcome-txt + "Welcome 20 "to 20 "your 20 "UXN 20 "Ordinator $1 +@today-txt + "Today 20 "is 20 "21Q04 ". $1 +@prompt-txt + "What 20 "shall 20 "we 20 "do? $1 + +@font + 0000 0000 0000 0000 + 0000 0000 0000 0000 + 007e c381 a581 bd99 + c37e 0000 0000 0000 + 007e ffff dbff c3e7 + ff7e 0000 0000 0000 + 0000 44ee fefe fe7c + 3810 0000 0000 0000 + 0010 387c fefe 7c38 + 1000 0000 0000 0000 + 0018 3c3c ffe7 e718 + 187e 0000 0000 0000 + 0018 3c7e ffff 7e18 + 187e 0000 0000 0000 + 0000 0000 3c7e 7e3c + 0000 0000 0000 0000 + ffff ffff c381 81c3 + ffff ffff 0000 0000 + 0000 3c7e 6642 4266 + 7e3c 0000 0000 0000 + ffff c381 99bd bd99 + 81c3 ffff 0000 0000 + 003e 0e3a 72f8 cccc + cc78 0000 0000 0000 + 003c 6666 663c 187e + 1818 0000 0000 0000 + 001f 1919 1f18 1878 + f870 0000 0000 0000 + 007f 637f 6363 6367 + e7e6 c000 0000 0000 + 0000 18db 7ee7 e77e + db18 0000 0000 0000 + 0080 c0e0 f8fe f8e0 + c080 0000 0000 0000 + 0002 060e 3efe 3e0e + 0602 0000 0000 0000 + 0018 3c7e 1818 187e + 3c18 0000 0000 0000 + 0066 6666 6666 0000 + 6666 0000 0000 0000 + 007f dbdb db7b 1b1b + 1b1b 0000 0000 0000 + 007e 6330 3c66 663c + 0cc6 7e00 0000 0000 + 0000 0000 0000 00fe + fefe 0000 0000 0000 + 0018 3c7e 1818 187e + 3c18 7e00 0000 0000 + 0018 3c7e 1818 1818 + 1818 0000 0000 0000 + 0018 1818 1818 187e + 3c18 0000 0000 0000 + 0000 0018 0cfe 0c18 + 0000 0000 0000 0000 + 0000 0030 60fe 6030 + 0000 0000 0000 0000 + 0000 0000 c0c0 c0fe + 0000 0000 0000 0000 + 0000 0024 66ff 6624 + 0000 0000 0000 0000 + 0000 1010 3838 7c7c + fefe 0000 0000 0000 + 0000 fefe 7c7c 3838 + 1010 0000 0000 0000 + 0000 0000 0000 0000 + 0000 0000 0000 0000 + 0030 7878 7830 3000 + 3030 0000 0000 0000 + 0066 6666 2400 0000 + 0000 0000 0000 0000 + 006c 6cfe 6c6c 6cfe + 6c6c 0000 0000 0000 + 3030 7cc0 c078 0c0c + f830 3000 0000 0000 + 0000 00c4 cc18 3060 + cc8c 0000 0000 0000 + 0070 d8d8 70fa decc + dc76 0000 0000 0000 + 0030 3030 6000 0000 + 0000 0000 0000 0000 + 000c 1830 6060 6030 + 180c 0000 0000 0000 + 0060 3018 0c0c 0c18 + 3060 0000 0000 0000 + 0000 0066 3cff 3c66 + 0000 0000 0000 0000 + 0000 0018 187e 1818 + 0000 0000 0000 0000 + 0000 0000 0000 0000 + 3838 6000 0000 0000 + 0000 0000 00fe 0000 + 0000 0000 0000 0000 + 0000 0000 0000 0000 + 3838 0000 0000 0000 + 0000 0206 0c18 3060 + c080 0000 0000 0000 + 007c c6ce ded6 f6e6 + c67c 0000 0000 0000 + 0010 30f0 3030 3030 + 30fc 0000 0000 0000 + 0078 cccc 0c18 3060 + ccfc 0000 0000 0000 + 0078 cc0c 0c38 0c0c + cc78 0000 0000 0000 + 000c 1c3c 6ccc fe0c + 0c1e 0000 0000 0000 + 00fc c0c0 c0f8 0c0c + cc78 0000 0000 0000 + 0038 60c0 c0f8 cccc + cc78 0000 0000 0000 + 00fe c6c6 060c 1830 + 3030 0000 0000 0000 + 0078 cccc cc78 cccc + cc78 0000 0000 0000 + 0078 cccc cc7c 1818 + 3070 0000 0000 0000 + 0000 0038 3800 0038 + 3800 0000 0000 0000 + 0000 0038 3800 0038 + 3818 3000 0000 0000 + 000c 1830 60c0 6030 + 180c 0000 0000 0000 + 0000 0000 7e00 7e00 + 0000 0000 0000 0000 + 0060 3018 0c06 0c18 + 3060 0000 0000 0000 + 0078 cc0c 1830 3000 + 3030 0000 0000 0000 + 007c c6c6 dede dec0 + c07c 0000 0000 0000 + 0030 78cc cccc fccc + cccc 0000 0000 0000 + 00fc 6666 667c 6666 + 66fc 0000 0000 0000 + 003c 66c6 c0c0 c0c6 + 663c 0000 0000 0000 + 00f8 6c66 6666 6666 + 6cf8 0000 0000 0000 + 00fe 6260 647c 6460 + 62fe 0000 0000 0000 + 00fe 6662 647c 6460 + 60f0 0000 0000 0000 + 003c 66c6 c0c0 cec6 + 663e 0000 0000 0000 + 00cc cccc ccfc cccc + cccc 0000 0000 0000 + 0078 3030 3030 3030 + 3078 0000 0000 0000 + 001e 0c0c 0c0c cccc + cc78 0000 0000 0000 + 00e6 666c 6c78 6c6c + 66e6 0000 0000 0000 + 00f0 6060 6060 6266 + 66fe 0000 0000 0000 + 00c6 eefe fed6 c6c6 + c6c6 0000 0000 0000 + 00c6 c6e6 f6fe dece + c6c6 0000 0000 0000 + 0038 6cc6 c6c6 c6c6 + 6c38 0000 0000 0000 + 00fc 6666 667c 6060 + 60f0 0000 0000 0000 + 0038 6cc6 c6c6 cede + 7c0c 1e00 0000 0000 + 00fc 6666 667c 6c66 + 66e6 0000 0000 0000 + 0078 cccc c070 18cc + cc78 0000 0000 0000 + 00fc b430 3030 3030 + 3078 0000 0000 0000 + 00cc cccc cccc cccc + cc78 0000 0000 0000 + 00cc cccc cccc cccc + 7830 0000 0000 0000 + 00c6 c6c6 c6d6 d66c + 6c6c 0000 0000 0000 + 00cc cccc 7830 78cc + cccc 0000 0000 0000 + 00cc cccc cc78 3030 + 3078 0000 0000 0000 + 00fe ce98 1830 6062 + c6fe 0000 0000 0000 + 003c 3030 3030 3030 + 303c 0000 0000 0000 + 0000 80c0 6030 180c + 0602 0000 0000 0000 + 003c 0c0c 0c0c 0c0c + 0c3c 0000 0000 0000 + 1038 6cc6 0000 0000 + 0000 0000 0000 0000 + 0000 0000 0000 0000 + 0000 ff00 0000 0000 + 3030 1800 0000 0000 + 0000 0000 0000 0000 + 0000 0000 780c 7ccc + cc76 0000 0000 0000 + 00e0 6060 7c66 6666 + 66dc 0000 0000 0000 + 0000 0000 78cc c0c0 + cc78 0000 0000 0000 + 001c 0c0c 7ccc cccc + cc76 0000 0000 0000 + 0000 0000 78cc fcc0 + cc78 0000 0000 0000 + 0038 6c60 60f8 6060 + 60f0 0000 0000 0000 + 0000 0000 76cc cccc + 7c0c cc78 0000 0000 + 00e0 6060 6c76 6666 + 66e6 0000 0000 0000 + 0018 1800 7818 1818 + 187e 0000 0000 0000 + 000c 0c00 3c0c 0c0c + 0ccc cc78 0000 0000 + 00e0 6060 666c 786c + 66e6 0000 0000 0000 + 0078 1818 1818 1818 + 187e 0000 0000 0000 + 0000 0000 fcd6 d6d6 + d6c6 0000 0000 0000 + 0000 0000 f8cc cccc + cccc 0000 0000 0000 + 0000 0000 78cc cccc + cc78 0000 0000 0000 + 0000 0000 dc66 6666 + 667c 60f0 0000 0000 + 0000 0000 76cc cccc + cc7c 0c1e 0000 0000 + 0000 0000 ec6e 7660 + 60f0 0000 0000 0000 + 0000 0000 78cc 6018 + cc78 0000 0000 0000 + 0000 2060 fc60 6060 + 6c38 0000 0000 0000 + 0000 0000 cccc cccc + cc76 0000 0000 0000 + 0000 0000 cccc cccc + 7830 0000 0000 0000 + 0000 0000 c6c6 d6d6 + 6c6c 0000 0000 0000 + 0000 0000 c66c 3838 + 6cc6 0000 0000 0000 + 0000 0000 6666 6666 + 3c0c 18f0 0000 0000 + 0000 0000 fc8c 1860 + c4fc 0000 0000 0000 + 001c 3030 60c0 6030 + 301c 0000 0000 0000 + 0018 1818 1800 1818 + 1818 0000 0000 0000 + 00e0 3030 180c 1830 + 30e0 0000 0000 0000 + 0073 dace 0000 0000 + 0000 0000 0000 0000 + 0000 0010 386c c6c6 + fe00 0000 0000 0000 + 0078 cccc c0c0 c0cc + cc78 3060 0000 0000 + 00cc cc00 cccc cccc + cc76 0000 0000 0000 + 0c18 3000 78cc fcc0 + cc78 0000 0000 0000 + 3078 cc00 780c 7ccc + cc76 0000 0000 0000 + 00cc cc00 780c 7ccc + cc76 0000 0000 0000 + c060 3000 780c 7ccc + cc76 0000 0000 0000 + 386c 6c38 f80c 7ccc + cc76 0000 0000 0000 + 0000 0000 78cc c0c0 + cc78 3060 0000 0000 + 3078 cc00 78cc fcc0 + c07c 0000 0000 0000 + 00cc cc00 78cc fcc0 + c07c 0000 0000 0000 + c060 3000 78cc fcc0 + c07c 0000 0000 0000 + 006c 6c00 7818 1818 + 187e 0000 0000 0000 + 1038 6c00 7818 1818 + 187e 0000 0000 0000 + 6030 1800 7818 1818 + 187e 0000 0000 0000 + 00cc 0030 78cc ccfc + cccc 0000 0000 0000 + 78cc cc78 78cc ccfc + cccc 0000 0000 0000 + 0c18 00fc c4c0 f8c0 + c4fc 0000 0000 0000 + 0000 0000 fe1b 7fd8 + d8ef 0000 0000 0000 + 003e 78d8 d8fe d8d8 + d8de 0000 0000 0000 + 3078 cc00 78cc cccc + cc78 0000 0000 0000 + 00cc cc00 78cc cccc + cc78 0000 0000 0000 + c060 3000 78cc cccc + cc78 0000 0000 0000 + 3078 cc00 cccc cccc + cc76 0000 0000 0000 + c060 3000 cccc cccc + cc76 0000 0000 0000 + 0066 6600 6666 6666 + 3c0c 18f0 0000 0000 + 00cc 0078 cccc cccc + cc78 0000 0000 0000 + cc00 cccc cccc cccc + cc78 0000 0000 0000 + 0000 0000 78cc dcec + cc78 0000 0000 0000 + 3c66 6060 60fc 6060 + c0fe 0000 0000 0000 + 003a 6cce d6d6 d6e6 + 6cb8 0000 0000 0000 + 0000 0000 00c6 6c38 + 6cc6 0000 0000 0000 + 0e1b 1818 7e18 1818 + d870 0000 0000 0000 + 0c18 3000 780c 7ccc + cc76 0000 0000 0000 + 0c18 3000 7818 1818 + 187e 0000 0000 0000 + 0c18 3000 78cc cccc + cc78 0000 0000 0000 + 0c18 3000 cccc cccc + cc76 0000 0000 0000 + 0076 dc00 f8cc cccc + cccc 0000 0000 0000 + 76dc 00c6 e6f6 dece + c6c6 0000 0000 0000 + 0078 cccc 7e00 fe00 + 0000 0000 0000 0000 + 0078 cccc 7800 fe00 + 0000 0000 0000 0000 + 0030 3000 3060 c0c0 + cc78 0000 0000 0000 + 0038 44ba aaba b2aa + 4438 0000 0000 0000 + 0000 0000 00fc 0c0c + 0c00 0000 0000 0000 + 0062 e66c 7830 6ec3 + 860c 1f00 0000 0000 + 0063 e66c 7837 6fdb + b33f 0300 0000 0000 + 0030 3000 3030 7878 + 7830 0000 0000 0000 + 0000 0000 3366 cccc + 6633 0000 0000 0000 + 0000 0000 cc66 3333 + 66cc 0000 0000 0000 + 2492 4924 9249 2492 + 4924 9249 0000 0000 + 55aa 55aa 55aa 55aa + 55aa 55aa 0000 0000 + 6ddb b66d dbb6 6ddb + b66d dbb6 0000 0000 + 1818 1818 1818 1818 + 1818 1818 0000 0000 + 1818 1818 18f8 1818 + 1818 1818 0000 0000 + 0c18 0030 78cc ccfc + cccc 0000 0000 0000 + 78cc 0030 78cc ccfc + cccc 0000 0000 0000 + 6030 0030 78cc ccfc + cccc 0000 0000 0000 + 0038 44ba a2a2 a2ba + 4438 0000 0000 0000 + 6666 6666 e606 06e6 + 6666 6666 0000 0000 + 6666 6666 6666 6666 + 6666 6666 0000 0000 + 0000 0000 fe06 06e6 + 6666 6666 0000 0000 + 6666 6666 e606 06fe + 0000 0000 0000 0000 + 0030 3078 ccc0 c0cc + 7830 3000 0000 0000 + cccc cccc 78fc 30fc + 3030 0000 0000 0000 + 0000 0000 00f8 1818 + 1818 1818 0000 0000 + 1818 1818 181f 0000 + 0000 0000 0000 0000 + 1818 1818 18ff 0000 + 0000 0000 0000 0000 + 0000 0000 00ff 1818 + 1818 1818 0000 0000 + 1818 1818 181f 1818 + 1818 1818 0000 0000 + 0000 0000 00ff 0000 + 0000 0000 0000 0000 + 1818 1818 18ff 1818 + 1818 1818 0000 0000 + 0076 dc00 780c 7ccc + cc76 0000 0000 0000 + 76dc 0030 78cc ccfc + cccc 0000 0000 0000 + 6666 6666 6760 607f + 0000 0000 0000 0000 + 0000 0000 7f60 6067 + 6666 6666 0000 0000 + 6666 6666 e700 00ff + 0000 0000 0000 0000 + 0000 0000 ff00 00e7 + 6666 6666 0000 0000 + 6666 6666 6760 6067 + 6666 6666 0000 0000 + 0000 0000 ff00 00ff + 0000 0000 0000 0000 + 6666 6666 e700 00e7 + 6666 6666 0000 0000 + 0000 0000 00c6 7c6c + 7cc6 0000 0000 0000 + cc30 d80c 067e c6c6 + c67c 0000 0000 0000 + 00f8 6c66 66f6 6666 + 6cf8 0000 0000 0000 + 78cc 00fc c4c0 f8c0 + c4fc 0000 0000 0000 + 00cc 00fc c4c0 f8c0 + c4fc 0000 0000 0000 + 6030 00fc c4c0 f8c0 + c4fc 0000 0000 0000 + 00f0 3030 30fc 0000 + 0000 0000 0000 0000 + 1830 0078 3030 3030 + 3078 0000 0000 0000 + 78cc 0078 3030 3030 + 3078 0000 0000 0000 + 00cc 0078 3030 3030 + 3078 0000 0000 0000 + 1818 1818 18f8 0000 + 0000 0000 0000 0000 + 0000 0000 001f 1818 + 1818 1818 0000 0000 + ffff ffff ffff ffff + ffff ffff 0000 0000 + 0000 0000 0000 ffff + ffff ffff 0000 0000 + 0018 1818 1800 1818 + 1818 0000 0000 0000 + 6030 0078 3030 3030 + 3078 0000 0000 0000 + ffff ffff ffff 0000 + 0000 0000 0000 0000 + 1830 0078 cccc cccc + cc78 0000 0000 0000 + 0078 cccc d8cc cccc + f8c0 6000 0000 0000 + 78cc 0078 cccc cccc + cc78 0000 0000 0000 + 6030 0078 cccc cccc + cc78 0000 0000 0000 + 0076 dc00 78cc cccc + cc78 0000 0000 0000 + 76dc 0078 cccc cccc + cc78 0000 0000 0000 + 0000 0000 6666 6666 + 667b 60c0 0000 0000 + 0000 e060 7c66 667c + 60f0 0000 0000 0000 + 00f0 607c 6666 667c + 60f0 0000 0000 0000 + 1830 00cc cccc cccc + cc78 0000 0000 0000 + 78cc 00cc cccc cccc + cc78 0000 0000 0000 + 6030 00cc cccc cccc + cc78 0000 0000 0000 + 060c 1800 6666 6666 + 3c0c 18f0 0000 0000 + 1830 00cc cccc 7830 + 3078 0000 0000 0000 + 00fc 0000 0000 0000 + 0000 0000 0000 0000 + 0c18 3000 0000 0000 + 0000 0000 0000 0000 + 0000 0000 00fc 0000 + 0000 0000 0000 0000 + 0000 3030 fc30 3000 + fc00 0000 0000 0000 + 0000 0000 00f8 0000 + f800 0000 0000 0000 + e033 663c f837 6fdb + b33f 0300 0000 0000 + 007f dbdb db7b 1b1b + 1b1b 0000 0000 0000 + 007e 6330 3c66 663c + 0cc6 7e00 0000 0000 + 0000 3030 00fc 0030 + 3000 0000 0000 0000 + 0000 0000 0000 0000 + 0000 3070 0000 0000 + 003c 6666 663c 0000 + 0000 0000 0000 0000 + 00cc 0000 0000 0000 + 0000 0000 0000 0000 + 0000 0000 0018 0000 + 0000 0000 0000 0000 + 0030 7030 3078 0000 + 0000 0000 0000 0000 + 0078 0c38 0c78 0000 + 0000 0000 0000 0000 + 0078 0c18 307c 0000 + 0000 0000 0000 0000 + 0000 00fc fcfc fcfc + fc00 0000 0000 0000 + 0000 0000 0000 0000 + 0000 0000 0000 0000