( 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 #ffff .File/length DEO2 #0000 .File/load DEO2 #0100 JMP2 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