( uxnemu icnchr.rom image20x20.chr ) |00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 |10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1 |20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 |80 @Controller &vector $2 &button $1 &key $1 |a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 |0000 @src $40 |0100 ( -> ) set-theme-dark #0280 .Screen/width DEO2 ( 640px ) #01e0 .Screen/height DEO2 ( 480px ) ;on-console .Console/vector DEO2 ;on-control .Controller/vector DEO2 load-theme BRK @on-console ( -> ) LIT2r =src ( read source ) .Console/read DEI DUP #20 LTH OVR #7f GTH ORA ?&end STH2kr slen #003f GTH2 ?&end STH2r sput BRK &end POP ( mode from src ) STH2kr scap #0004 SUB2 ;&icn-ext scmp #00 EQU ?&no-icn set-mode-icn &no-icn ( resize from src ) STH2kr scap #0009 SUB2 read-size ORAk #00 EQU ?&no-size OVR #00 SWP #30 SFT2 .Screen/width DEO2 #00 OVR INC #30 SFT2 .Screen/height DEO2 &no-size POP2 STH2r draw-image BRK &icn-ext ".icn $1 @on-control ( -> ) .Controller/button DEI DUP #10 NEQ ?&no-u .Screen/height DEI2 #0008 SUB2 .Screen/height DEO2 ;src draw-image &no-u DUP #20 NEQ ?&no-d .Screen/height DEI2 #0008 ADD2 .Screen/height DEO2 ;src draw-image &no-d DUP #40 NEQ ?&no-l .Screen/width DEI2 #0008 SUB2 .Screen/width DEO2 ;src draw-image &no-l DUP #80 NEQ ?&no-r .Screen/width DEI2 #0008 ADD2 .Screen/width DEO2 ;src draw-image &no-r DUP #01 NEQ ?&no-a toggle-theme &no-a DUP #02 NEQ ?&no-b toggle-mode &no-b POP BRK @toggle-theme ( -- ) .System/r DEI2 #05cf EQU2 ?&no-light set-theme-dark ;src !draw-image &no-light set-theme-light ;src !draw-image @set-theme-dark ( -- ) #05cf .System/r DEO2 #05cf .System/g DEO2 #05cf .System/b DEO2 JMP2r @set-theme-light ( -- ) #fc50 .System/r DEO2 #fc50 .System/g DEO2 #fc50 .System/b DEO2 JMP2r @toggle-mode ( -- ) ;draw-image/length LDA2 #0010 EQU2 ?&no-chr set-mode-chr ;src !draw-image &no-chr set-mode-icn ;src !draw-image @set-mode-chr ( -- ) #0010 ;draw-image/length STA2 #81 ;draw-image/color STA JMP2r @set-mode-icn ( -- ) #0008 ;draw-image/length STA2 #03 ;draw-image/color STA JMP2r @read-size ( 00x00* -- w h ) DUP2 sbyte #00 EQU ?&cancel INC2k INC2 LDA LIT "x NEQ ?&cancel DUP2 #0003 ADD2 sbyte #00 EQU ?&cancel ( y ) DUP2 #0003 ADD2 sbyte STH ( x ) sbyte STHr JMP2r &cancel POP2 #0000 JMP2r ( @|drawing ) @draw-image ( name* -- ) #0000 DUP2 .Screen/x DEO2 .Screen/y DEO2 .File/name DEO2 [ LIT2 &length 0010 ] .File/length DEO2 ;&buf .Screen/addr DEO2 #01 .Screen/auto DEO &stream ;&buf .File/read DEO2 [ LIT &color 81 ] .Screen/sprite DEO .Screen/x DEI2 .Screen/width DEI2 LTH2 ?&no-line #0000 .Screen/x DEO2 .Screen/y DEI2k #0008 ADD2 ROT DEO2 &no-line .File/success DEI2 ORA ?&stream !draw-interface &buf $10 @draw-interface ( -- ) #0000 .Screen/x DEO2 .Screen/height DEI2 #0008 SUB2 .Screen/y DEO2 ;src draw-str ( size ) LIT "( draw-chr .Screen/width DEI2 #03 SFT2 NIP draw-byte LIT "x draw-chr .Screen/height DEI2 #03 SFT2 NIP draw-byte LIT ") !draw-chr @draw-str ( str* -- ) LDAk #00 EQU ?&skip &while LDAk draw-chr INC2 LDAk ?&while &skip POP2 JMP2r @draw-byte ( byte -- ) DUP #04 SFT draw-hex @draw-hex ( char -- ) #0f AND DUP #09 GTH #07 MUL ADD #30 ADD @draw-chr ( char -- ) #20 SUB #00 SWP #30 SFT2 ;font ADD2 .Screen/addr DEO2 [ LIT &color 03 ] .Screen/sprite DEO JMP2r ( @|stdlib ) @slen ( str* -- len* ) DUP2 scap SWP2 SUB2 JMP2r @scap ( str* -- end* ) LDAk #00 NEQ JMP JMP2r &while INC2 LDAk ?&while JMP2r @sput ( char str* -- ) scap STA JMP2r @sbyte ( str* -- byte ) LDAk chex STH INC2 LDA chex STHr #40 SFT ADD JMP2r @chex ( char -- hex ) DUP #2f GTH OVR #3a LTH AND ?&number DUP #60 GTH OVR #67 LTH AND ?&lc DUP #40 GTH OVR #47 LTH AND ?&uc POP #00 JMP2r &number #30 SUB JMP2r &uc #37 SUB JMP2r &lc #57 SUB JMP2r @scmp ( a* b* -- flag ) STH2 &loop LDAk LDAkr STHr NEQ ?&end LDAk LDAkr STHr ORA ?¬-end POP2 POP2r #01 JMP2r ¬-end INC2 INC2r !&loop &end POP2 POP2r #00 JMP2r ( theme ) @load-theme ( -- ) ;&path .File/name DEO2 #0002 .File/length DEO2 ;&r .File/read DEO2 ;&g .File/read DEO2 ;&b .File/read DEO2 .File/success DEI2 ORA #01 JCN JMP2r LIT2 &r $2 .System/r DEO2 LIT2 &g $2 .System/g DEO2 LIT2 &b $2 .System/b DEO2 JMP2r &path ".theme $1 ( @|assets ) @font ( block8 ) 0000 0000 0000 0000 1010 1010 1000 1000 2828 0000 0000 0000 44fe 4444 44fe 4400 107e 807c 02fc 1000 0044 0810 2044 0000 7884 8864 9a84 7a00 1020 0000 0000 0000 2040 4040 4040 2000 0804 0404 0404 0800 0044 2810 2844 0000 0010 107c 1010 0000 0000 0000 0010 2000 0000 007c 0000 0000 0000 0000 0000 1000 0204 0810 2040 8000 7c82 8282 8282 7c00 3010 1010 1010 3800 7c82 027c 8080 fe00 7c82 021c 0282 7c00 2242 82fe 0202 0200 fe80 807c 0282 7c00 7c82 80fc 8282 7c00 fe82 0408 0810 1000 7c82 827c 8282 7c00 7c82 827e 0202 0200 0000 1000 1000 0000 0000 1000 1010 2000 0008 1020 1008 0000 0000 7c00 7c00 0000 0010 0804 0810 0000 7c82 820c 1000 1000 7c82 92aa aa92 6400 7c82 82fe 8282 8200 fc82 82fc 8282 fc00 7c82 8080 8082 7c00 fc82 8282 8282 fc00 fe80 80f0 8080 fe00 fe80 80f0 8080 8000 7c82 808e 8282 7c00 8282 82fe 8282 8200 3810 1010 1010 3800 0602 0202 0282 7c00 8284 88f0 8884 8200 8080 8080 8080 fe00 ec92 9292 9292 9200 c2a2 a292 8a8a 8600 7c82 8282 8282 7c00 fc82 82fc 8080 8000 7c82 8282 8a84 7a00 fc82 82fc 8282 8200 7c82 807c 0282 7c00 fe10 1010 1010 1000 8282 8282 8286 7a00 8282 4444 2828 1000 9292 9292 9292 6c00 8244 2810 2844 8200 8282 4428 1010 1000 fe02 0c10 6080 fe00 6040 4040 4040 6000 8040 2010 0804 0200 0c04 0404 0404 0c00 1028 0000 0000 0000 0000 0000 0000 fe00 1008 0000 0000 0000 0000 7c02 7e82 7e00 0000 fc82 fc82 fc00 0000 7c82 8082 7c00 0000 027e 8282 7e00 0000 7c82 fc80 7e00 0000 7c82 e080 8000 0000 7c82 7e02 fc00 0000 80fc 8282 8200 0000 1000 1010 1000 0000 0200 0282 7c00 0000 8284 f884 8200 0000 8080 8080 7e00 0000 6c92 9292 9200 0000 bcc2 8282 8200 0000 7c82 8282 7c00 0000 fc82 fc80 8000 0000 7c82 7e02 0200 0000 bcc2 8080 8000 0000 7e80 7c02 fc00 0000 fe10 1010 1000 0000 8282 8282 7c00 0000 8282 4428 1000 0000 9292 9292 6c00 0000 8244 3844 8200 0000 8282 7e02 7c00 0000 fe02 7c80 fe00 2040 4080 4040 2000 1010 1010 1010 1000 0804 0402 0404 0800 0000 0032 4c00 0000 aa55 aa55 aa55 aa55