|00 @System &vector $2 &expansion $2 &wst $1 &rst $1 &metadata $2 &r $2 &g $2 &b $2 &debug $1 &state $1 |10 @Console &vector $2 &read $1 &pad $4 &type $1 &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 |a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 |000 @src $40 |100 @on-reset ( -> ) #f0ef .System/r DEO2 #f0e6 .System/g DEO2 #f0e2 .System/b DEO2 #00a0 .Screen/width DEO2 #00b0 .Screen/height DEO2 ( | begin ) #0010 DUP2 .Screen/x DEO2 .Screen/y DEO2 ;on-console .Console/vector DEO2 BRK @on-console ( -> ) .Console/read DEI DUP #20 GTH ?{ POP ;src .File/name DEO2 #8000 .File/length DEO2 ;img .File/read DEO2 ;img ;sample BRK } [ LIT &ptr -src ] INCk ,&ptr STR STZ BRK @ ( data* -- ) [ LIT2 02 -Screen/auto ] DEO .Screen/x DEI2 ,&anchor STR2 &>w ( -- ) LDAk [ LIT "$ ] EQU ?&op-over LDAk [ LIT "- ] EQU ?&op-line LDAk [ LIT "! ] EQU ?&op-rle LDAk /op-col & INC2 LDAk ?&>w POP2 JMP2r &op-line ( -- ) .Screen/y DEI2k #0006 ADD2 ROT DEO2 &op-over ( -- ) [ LIT2 &anchor $2 ] .Screen/x DEO2 !& @/op-rle ( addr* -- addr* ) INC2 sdec OVR2 LDA ,&trle STR #0000 &>lrle ( -- ) [ LIT &trle $1 ] /op-col INC2 GTH2k ?&>lrle POP2 POP2 !/ @/op-col ( char -- ) [ LIT "? ] SUB ,&t STR #0600 &>l ( -- ) [ LIT &t $1 ] OVR SFT #01 AND .Screen/pixel DEO INC GTHk ?&>l POP2 ( | advance ) .Screen/x DEI2k INC2 ROT DEO2 .Screen/y DEI2k #0006 SUB2 ROT DEO2 JMP2r ( @|stdlib ) @sdec ( str* -- str* val* ) [ LIT2r 0000 ] &>w ( -- ) ( validate ) LDAk [ LIT "0 ] SUB #09 GTH ?{ ( accumulate ) [ LIT2r 000a ] MUL2r ( combine ) LDAk [ LIT "0 ] SUB [ LITr 00 ] STH ADD2r ( continue ) INC2 LDAk ?&>w } STH2r JMP2r ( @|memory ) @sample [ "???owYn||~ywo??-?IRJaVNn^NVbJRI $1 ] @img