uxn/projects/software/launcher.tal

666 lines
14 KiB
Tal

( 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