( app/dexe : hex editor - ctrl+r - edit filenname - ctrl+R - erase filenname - ctrl+o - open file - ctrl+s - save file - ctrl+c - copy selection - ctrl+C - copy selection(text mode) - ctrl+v - paste selection - arrows - move selection - enter - insert byte - backspace - delete byte ) %+ { ADD } %- { SUB } %* { MUL } %/ { DIV } %< { LTH } %> { GTH } %= { EQU } %! { NEQ } %++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } %<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } %DEBUG { ;print-hex/byte JSR2 #0a .Console/write DEO } %DEBUG2 { ;print-hex/short JSR2 #0a .Console/write DEO } %RTN { JMP2r } %SWP2? { #01 JCN SWP } %BRK? { #01 JCN BRK } %2* { #10 SFT } %4* { #20 SFT } %4/ { #02 SFT } %8* { #30 SFT } %8/ { #03 SFT } %20* { #50 SFT } %40* { #60 SFT } %2** { #10 SFT2 } %2// { #01 SFT2 } %4** { #20 SFT2 } %4// { #02 SFT2 } %8** { #30 SFT2 } %8// { #03 SFT2 } %10** { #40 SFT2 } %10// { #04 SFT2 } %TOS { #00 SWP } %TOB { SWP POP } %INCR { SWP #01 + SWP } %TOGGLE { DUP LDZ #00 = SWP STZ } %GET-ITER { OVR2 NIP OVR SWP } %RELEASE-MOUSE { #00 .Mouse/state DEO } %SET-STATE { #01 .state/changed STZ ;draw-state JSR2 } %RESET-STATE { #00 .state/changed STZ ;draw-state JSR2 } %MEMORY { #8000 } %MEMORY-SIZE { #7000 } ( devices ) |00 @System &vector $2 &pad $6 &r $2 &g $2 &b $2 |10 @Console &vector $2 &read $1 &pad $5 &write $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 |90 @Mouse &vector $2 &x $2 &y $2 &state $1 &wheel $1 |a0 @File &vector $2 &success $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ( variables ) |0000 @data &length $2 @cursor &x $2 &y $2 &last $1 @state &timer $1 &blink $1 &changed $1 @path &length $1 &name $20 @selection &from $2 &to $2 &scroll $2 @frame &x $2 &y $2 &x2 $2 &y2 $2 @file-frame &x $2 &y $2 &x2 $2 &y2 $2 @byte-frame &x $2 &y $2 &x2 $2 &y2 $2 &rows $2 @char-frame &x $2 &y $2 &x2 $2 &y2 $2 @tile-frame &x $2 &y $2 &x2 $2 &y2 $2 @menu-frame &x $2 &y $2 &x2 $2 &y2 $2 ( program ) |0100 ( theme ) #0f77 .System/r DEO2 #0fc7 .System/g DEO2 #0f97 .System/b DEO2 ( vectors ) ;on-console .Console/vector DEO2 ;untrap JSR2 ( set size ) #0100 .Screen/width DEO2 #0188 .Screen/height DEO2 ( frame ) .Screen/width DEI2 2// #007c -- DUP2 .frame/x STZ2 #00f8 ++ .frame/x2 STZ2 #0008 DUP2 .frame/y STZ2 .Screen/height DEI2 #0008 -- .frame/y2 STZ2 .frame/x LDZ2 .file-frame/x STZ2 .frame/x2 LDZ2 .file-frame/x2 STZ2 .frame/y LDZ2 DUP2 .file-frame/y STZ2 #0018 ++ .file-frame/y2 STZ2 .frame/x LDZ2 DUP2 .byte-frame/x STZ2 #0098 ++ .byte-frame/x2 STZ2 .file-frame/y2 LDZ2 #0008 ++ .byte-frame/y STZ2 .Screen/height DEI2 #0020 -- .byte-frame/y2 STZ2 .byte-frame/y2 LDZ2 .byte-frame/y LDZ2 -- 10// .byte-frame/rows STZ2 .byte-frame/x2 LDZ2 #0008 ++ DUP2 .tile-frame/x STZ2 #0010 ++ .tile-frame/x2 STZ2 .byte-frame/y LDZ2 DUP2 .tile-frame/y STZ2 #0100 ++ .tile-frame/y2 STZ2 .tile-frame/x2 LDZ2 #0008 ++ DUP2 .char-frame/x STZ2 #0040 ++ .char-frame/x2 STZ2 .byte-frame/y LDZ2 DUP2 .char-frame/y STZ2 #0100 ++ .char-frame/y2 STZ2 .frame/x LDZ2 .menu-frame/x STZ2 .frame/x2 LDZ2 .menu-frame/x2 STZ2 .frame/y2 LDZ2 #0010 -- DUP2 .menu-frame/y STZ2 #0010 ++ .menu-frame/y2 STZ2 ;untitled-txt ;new-file JSR2 MEMORY ;select JSR2 BRK @on-console ( -- ) #00 ;draw-filepath JSR2 .Console/read DEI DUP #0a = ,&counter LDR #20 = #0000 == ,&no-end JCN ( set length ) ,&counter LDR .path/length STZ ( null char ) #00 .path ,&counter LDR INC + STZ ( reset counter ) #00 ,&counter STR ( load ) ;load-file JSR2 POP BRK &no-end ,&counter LDR ( length ) DUP .path/length STZ INC ( inc counter ) DUP ,&counter STR ( write ) .path + STZ #01 ;draw-filepath JSR2 BRK &counter $1 @untrap ( -- ) ( vectors ) ;on-frame .Screen/vector DEO2 ;on-button .Controller/vector DEO2 ;on-mouse .Mouse/vector DEO2 ( filepath ) #00 .state/blink STZ #01 ;draw-filepath JSR2 RELEASE-MOUSE RTN @trap ( -- ) ( vectors ) ;on-frame-trap .Screen/vector DEO2 ;on-button-trap .Controller/vector DEO2 ;on-mouse-trap .Mouse/vector DEO2 ( filepath ) #01 .state/blink STZ #01 ;draw-filepath JSR2 RELEASE-MOUSE ( clear cursor ) .cursor/x LDZ2 .Screen/x DEO2 .cursor/y LDZ2 .Screen/y DEO2 #40 .Screen/sprite DEO RTN @on-frame ( -> ) ( unused ) BRK @on-frame-trap ( -> ) ( incr ) .state/timer LDZ INC DUP .state/timer STZ #08 ! ,&no-toggle JCN .state/blink TOGGLE #01 .state/blink LDZ 8* + ;draw-filepath JSR2 #00 .state/timer STZ &no-toggle BRK @on-button ( -> ) ( arrows ) .Controller/button DEI DUP #44 ! ,&no-left-sel JCN .selection/to LDZ2 #0001 -- ;select-until JSR2 POP BRK &no-left-sel DUP #84 ! ,&no-right-sel JCN .selection/to LDZ2 #0001 ++ ;select-until JSR2 POP BRK &no-right-sel DUP #10 ! ,&no-up JCN .selection/from LDZ2 #0008 -- ;select JSR2 POP BRK &no-up DUP #20 ! ,&no-down JCN .selection/from LDZ2 #0008 ++ ;select JSR2 POP BRK &no-down DUP #40 ! ,&no-left JCN .selection/from LDZ2 #0001 -- ;select JSR2 POP BRK &no-left DUP #80 ! ,&no-right JCN .selection/from LDZ2 #0001 ++ ;select JSR2 POP BRK &no-right ( ctrl ) #01 AND ;on-control JCN2 ( keys ) .Controller/key DEI DUP #1b ! ,&no-esc JCN ;reset-selection JSR2 POP BRK &no-esc DUP #1f > OVR #7f < #0101 !! ,&no-char JCN DUP ;fill-selection JSR2 &no-char DUP #0d ! ,&no-enter JCN .selection/from LDZ2 ;memsftr JSR2 &no-enter DUP #08 ! ,&no-backspace JCN .selection/from LDZ2 ;memsftl JSR2 &no-backspace POP BRK @on-control ( -> ) .Controller/key DEI ( file ) DUP [ LIT 'r ] ! ,&no-name JCN #00 ;draw-filepath JSR2 ;trap JSR2 POP BRK &no-name DUP [ LIT 'R ] ! ,&no-rename JCN #00 ;draw-filepath JSR2 #00 .Controller/key DEO #00 .path/length STZ #0000 .path/name STZ2 ;trap JSR2 POP BRK &no-rename DUP [ LIT 'n ] ! ,&no-new JCN #25 ;draw-filepath JSR2 ;untitled-txt ;new-file JSR2 ;redraw JSR2 POP BRK &no-new DUP [ LIT 'o ] ! ,&no-open JCN ;load-file JSR2 POP BRK &no-open DUP [ LIT 's ] ! ,&no-save JCN ;path/name ;save-file JSR2 POP BRK &no-save ( snarf ) DUP [ LIT 'c ] ! ,&no-copy JCN ;copy-snarf JSR2 POP BRK &no-copy DUP [ LIT 'C ] ! ,&no-copy-string JCN ;copy-string-snarf JSR2 POP BRK &no-copy-string DUP [ LIT 'v ] ! ,&no-paste JCN ;paste-snarf JSR2 POP BRK &no-paste POP BRK @on-button-trap ( -> ) .Controller/key DEI DUP ,&continue JCN POP BRK &continue DUP ( backspace ) #08 ! ,&no-edit-backspace JCN ( clamp ) .path/length LDZ #00 = ,&edit-end JCN #00 ;draw-filepath JSR2 .path/length LDZ #01 - STHk .path/length STZ #00 .path/name STHr + STZ #01 ;draw-filepath JSR2 POP BRK &no-edit-backspace DUP ( special ) #20 > ,&no-edit-enter JCN ;untrap JSR2 POP BRK &no-edit-enter ( clamp ) .path/length LDZ #1f = ,&edit-end JCN DUP .path/name .path/length LDZ STHk + STZ STHr INC STHk .path/length STZ #00 .path/name STHr + STZ #01 ;draw-filepath JSR2 &edit-end POP BRK @on-mouse ( -> ) ( clear last cursor ) .cursor/x LDZ2 .Screen/x DEO2 .cursor/y LDZ2 .Screen/y DEO2 #40 .Screen/sprite DEO ( draw new cursor ) .Mouse/x DEI2 DUP2 .cursor/x STZ2 .Screen/x DEO2 .Mouse/y DEI2 DUP2 .cursor/y STZ2 .Screen/y DEO2 ;cursor-icn .Screen/addr DEO2 .Mouse/state DEI #00 ! #41 + .Screen/sprite DEO .Mouse/wheel DEI DUP #01 ! ,&no-up JCN .selection/from LDZ2 #0008 -- ;select JSR2 &no-up DUP #ff ! ,&no-down JCN .selection/from LDZ2 #0008 ++ ;select JSR2 &no-down POP .Mouse/x DEI2 .Mouse/y DEI2 OVR2 OVR2 .byte-frame ;within-rect JSR2 ;on-touch-byte JCN2 OVR2 OVR2 .char-frame ;within-rect JSR2 ;on-touch-char JCN2 OVR2 OVR2 .tile-frame ;within-rect JSR2 ;on-touch-tile JCN2 OVR2 OVR2 .file-frame ;within-rect JSR2 ;on-touch-file JCN2 OVR2 OVR2 .menu-frame ;within-rect JSR2 ;on-touch-menu JCN2 POP2 POP2 BRK @on-mouse-trap ( -> ) ( release trap on touch ) .Mouse/state DEI BRK? ;untrap JSR2 BRK @on-touch-byte ( x* y* -> ) ( stash addr* ) .byte-frame/y LDZ2 -- 10// NIP 8* STH .byte-frame/x LDZ2 -- 8// NIP #03 DIV STHr + TOS MEMORY ++ [ .selection/scroll LDZ2 8** ++ ] STH2 .Mouse/state DEI .cursor/last LDZ DUP2 #0100 !! ,&no-down JCN ( select from ) STH2kr ;select JSR2 &no-down DUP2 #0001 !! ,&no-up JCN ( select to ) STH2kr ;select-until JSR2 &no-up DUP2 #0101 !! ,&no-drag JCN ( select to ) STH2kr ;select-until JSR2 &no-drag POP2 ( pop addr* ) POP2r .Mouse/state DEI .cursor/last STZ BRK @on-touch-char ( x* y* -> ) ( stash addr* ) .char-frame/y LDZ2 -- 10// NIP 8* STH .char-frame/x LDZ2 -- 8// NIP STHr + TOS MEMORY ++ [ .selection/scroll LDZ2 8** ++ ] STH2 .Mouse/state DEI .cursor/last LDZ DUP2 #0100 !! ,&no-down JCN ( select from ) STH2kr ;select JSR2 &no-down DUP2 #0001 !! ,&no-up JCN ( select to ) STH2kr ;select-until JSR2 &no-up DUP2 #0101 !! ,&no-drag JCN ( select to ) STH2kr ;select-until JSR2 &no-drag POP2 ( pop addr* ) POP2r .Mouse/state DEI .cursor/last STZ BRK @on-touch-tile ( x* y* -> ) .Mouse/state DEI #00 ! ,&continue JCN POP2 POP2 BRK &continue ( row ) NIP2 .tile-frame/y LDZ2 -- 10// 8** MEMORY ++ [ .selection/scroll LDZ2 8** ++ ] DUP2 .selection/from STZ2 #0007 ++ ;select-until JSR2 BRK @on-touch-file ( x* y* -> ) .Mouse/state DEI #00 ! ,&continue JCN POP2 POP2 BRK &continue POP2 POP2 .Mouse/state DEI BRK? #00 ;draw-filepath JSR2 ;trap JSR2 BRK @on-touch-menu ( x* y* -> ) .Mouse/state DEI #00 ! ,&continue JCN POP2 POP2 BRK &continue .menu-frame/y LDZ2 -- 8// NIP STH .menu-frame/x LDZ2 -- 8// NIP STHr ( bitpad ) OVR #20 < ;on-touch-menu-bitpad JCN2 DEBUG2 BRK @on-touch-menu-bitpad ( x* y* -> ) 4* + #07 SWP - #40 SFT #01 SWP SFT .selection/from LDZ2 LDA SWP EOR .selection/from LDZ2 STA ;redraw JSR2 RELEASE-MOUSE BRK @select ( id* -- ) DUP2 .selection/from LDZ2 == ,&skip JCN DUP2 MEMORY << ,&skip JCN DUP2 MEMORY .data/length LDZ2 ++ #0001 -- >> ,&skip JCN ( valid ) DUP2 .selection/from STZ2 .selection/to STZ2 ;follow-selection JSR2 ;redraw JSR2 RTN &skip POP2 RTN @select-until ( id* -- ) DUP2 MEMORY .data/length LDZ2 ++ << ,&valid JCN POP2 RTN &valid .selection/to STZ2 ( clamp ) .selection/to LDZ2 .selection/from LDZ2 >> ,¬-before JCN .selection/from LDZ2 .selection/to STZ2 ¬-before ;follow-selection JSR2 ;redraw JSR2 RTN @follow-selection ( -- ) .selection/from LDZ2 MEMORY .selection/scroll LDZ2 8** ++ << ,&up JCN .selection/to LDZ2 MEMORY [ .byte-frame/rows LDZ2 8** #0001 -- ] ++ .selection/scroll LDZ2 8** ++ >> ,&down JCN RTN &up .selection/from LDZ2 #0001 -- ;scroll-to JSR2 RTN &down .selection/to LDZ2 [ .byte-frame/rows LDZ2 8** ] -- #0008 ++ ;scroll-to JSR2 RTN @fill-selection ( char -- ) STH .selection/to LDZ2 INC2 .selection/from LDZ2 &loop DUP2 STHkr ROT ROT STA INC2 GTH2k ,&loop JCN POP2 POP2 POPr ;redraw JSR2 RTN @reset-selection ( -- ) .selection/from LDZ2 .selection/to STZ2 ;redraw JSR2 RTN @scroll-to ( addr* -- ) MEMORY -- 8// .selection/scroll STZ2 RTN @is-selected ( id* -- flag ) DUP2 .selection/from LDZ2 !! ,&continue JCN POP2 #01 RTN &continue DUP2 .selection/from LDZ2 >> ,> JCN POP2 #00 RTN > DUP2 .selection/to LDZ2 #0001 ++ << ,< JCN POP2 #00 RTN < POP2 #01 RTN @memsftl ( addr* -- ) DUP2 INC2 MEMORY .data/length LDZ2 ++ !! ,&can-shift JCN POP2 RTN &can-shift MEMORY .data/length LDZ2 ++ SWP2 &loop ( a ) INC2k LDA STH ( b ) DUP2 STHr ROT ROT STA INC2 GTH2k ,&loop JCN POP2 POP2 .data/length LDZ2 #0001 -- .data/length STZ2 ;redraw JSR2 RTN @memsftr ( addr* -- ) #0001 -- MEMORY .data/length LDZ2 ++ &loop ( a ) LDAk STH ( b ) INC2k STHr ROT ROT STA #0001 -- LTH2k ,&loop JCN POP2 POP2 .data/length LDZ2 INC2 .data/length STZ2 ;redraw JSR2 RTN @redraw ( -- ) .byte-frame/rows LDZ2 #0000 &loop ( addr ) DUP2 8** MEMORY ++ .selection/scroll LDZ2 8** ++ STH2 ( y ) DUP2 10** .byte-frame/y LDZ2 ++ STH2r ;draw-row JSR2 INC2 GTH2k ,&loop JCN POP2 POP2 .file-frame/x LDZ2 .file-frame/x2 LDZ2 .file-frame/y2 LDZ2 #03 ;line-hor JSR2 ;draw-menu JSR2 RTN @draw-row ( y* id* -- ) ;&row STA2 ;&y STA2 #08 #00 &bytes-loop ( color ) DUP TOS ;&row LDA2 ++ ;get-byte-color JSR2 STH ( byte ) DUP TOS ;&row LDA2 ++ LDA STH ( y ) ;&y LDA2 STH2 ( x-block ) DUP TOS 2** ;pos-table ++ LDA2 .frame/x LDZ2 ++ STH2r STHr STHr ;draw-byte JSR2 INC GTHk ,&bytes-loop JCN POP2 #08 #00 &chars-loop ( color ) DUP TOS ;&row LDA2 ++ ;get-byte-color JSR2 STH ( byte ) DUP TOS ;&row LDA2 ++ LDA STH ( y ) ;&y LDA2 STH2 ( x-block ) DUP TOS 8** .char-frame/x LDZ2 ++ STH2r STHr STHr ;draw-char JSR2 INC GTHk ,&chars-loop JCN POP2 .tile-frame/x LDZ2 .Screen/y DEI2 #0010 -- ;&row LDA2 #01 ;draw-tile JSR2 RTN &y $2 &row $2 @draw-byte ( x* y* byte color -- ) #06 .Screen/auto DEO STH STH .Screen/y DEO2 .Screen/x DEO2 STHr DUP ( hn ) #04 SFT ,&parse JSR #18 - TOS 10** ;font-hex ++ .Screen/addr DEO2 STHkr .Screen/sprite DEO STHkr .Screen/sprite DEO .Screen/x DEI2 #0008 ++ .Screen/x DEO2 .Screen/y DEI2 #0010 -- .Screen/y DEO2 ( ln ) #0f AND ,&parse JSR #18 - TOS 10** ;font-hex ++ .Screen/addr DEO2 STHkr .Screen/sprite DEO STHr .Screen/sprite DEO #00 .Screen/auto DEO RTN &parse ( value -- char ) DUP #09 > ,&above JCN #30 + RTN &above #09 - #60 + RTN RTN @draw-char ( x* y* char color -- ) #06 .Screen/auto DEO STH STH .Screen/y DEO2 .Screen/x DEO2 STHr DUP #1f > OVR #80 < #0101 == ,&visible JCN POP ;font #000e 10** ++ ,&resume JMP &visible ;char-addr JSR2 &resume .Screen/addr DEO2 STHkr .Screen/sprite DEO STHr .Screen/sprite DEO #00 .Screen/auto DEO RTN @draw-tile ( x* y* addr* color -- ) POP ;&addr STA2 ;&y STA2 ;&x STA2 #08 #00 &ver DUP 2* TOS ;&y LDA2 ++ .Screen/y DEO2 #08 #00 &hor DUP 2* TOS ;&x LDA2 ++ .Screen/x DEO2 ( get pixel ) GET-ITER ( ch 1 ) TOS ;&addr LDA2 ++ LDA SWP #07 SWP - SFT #01 AND .Screen/pixel DEO INC GTHk ,&hor JCN POP2 INC GTHk ,&ver JCN POP2 RTN &x $2 &y $2 &addr $2 @draw-menu ( -- ) ( filepath ) #01 ;draw-filepath JSR2 ;draw-bitpad JSR2 RTN @draw-bitpad ( -- ) #08 #00 &loop ( state ) DUP #07 SWP - [ .selection/from LDZ2 LDA ] SWP SFT #01 AND STH ( y ) DUP 4/ TOS 8** .menu-frame/y LDZ2 ++ STH2 ( x ) DUP #03 AND TOS 8** .menu-frame/x LDZ2 ++ STH2r STHr #01 ,draw-bit JSR INC GTHk ,&loop JCN POP2 RTN @draw-bit ( x* y* state color -- ) STH ( addr ) 8* TOS ;bit-icns ++ .Screen/addr DEO2 ( y ) .Screen/y DEO2 ( x ) .Screen/x DEO2 STHr .Screen/sprite DEO RTN @draw-state ( -- ) RTN @draw-filepath ( color -- ) STH .file-frame/x LDZ2 .file-frame/y LDZ2 ;path/name STHr ;draw-text JSR2 ( start byte ) .selection/from LDZ2 MEMORY -- STH STH .file-frame/x2 LDZ2 #0048 -- .file-frame/y LDZ2 STHr #01 ;draw-byte JSR2 .file-frame/x2 LDZ2 #0038 -- .file-frame/y LDZ2 STHr #01 ;draw-byte JSR2 ( / ) .file-frame/x2 LDZ2 #0028 -- .file-frame/y LDZ2 LIT '/ #03 ;draw-char JSR2 ( end byte ) .data/length LDZ2 #0001 -- STH STH .file-frame/x2 LDZ2 #0020 -- .file-frame/y LDZ2 STHr #01 ;draw-byte JSR2 .file-frame/x2 LDZ2 #0010 -- .file-frame/y LDZ2 STHr #01 ;draw-byte JSR2 RTN @draw-text ( x* y* addr* color -- ) #07 .Screen/auto DEO STH SWP2 .Screen/y DEO2 SWP2 .Screen/x DEO2 &while LDAk ;char-addr JSR2 .Screen/addr DEO2 STHkr .Screen/sprite DEO .Screen/x DEI2 #0008 -- .Screen/x DEO2 STHkr .Screen/sprite DEO .Screen/y DEI2 #0010 -- .Screen/y DEO2 INC2 LDAk ,&while JCN POP2 POPr #00 .Screen/auto DEO RTN @get-byte-color ( id* ) DUP2 MEMORY .data/length LDZ2 ++ << ,&exists JCN POP2 #03 RTN &exists ;is-selected JSR2 #07 MUL #01 + RTN @char-addr ( char -- addr* ) #20 - TOS 10** ;font ++ RTN @clear ( -- ) MEMORY DUP2 MEMORY-SIZE ++ SWP2 &loop DUP2 #00 ROT ROT STA INC2 GTH2k ,&loop JCN POP2 POP2 RTN ( file ) @new-file ( default* -- ) ( clear ) ;clear JSR2 MEMORY ;select JSR2 #00 ;draw-filepath JSR2 STH2 #0c #00 &loop DUP DUP TOS STH2kr ++ LDA SWP .path/name + STZ INC GTHk ,&loop JCN ( end ) #00 SWP .path/name + STZ .path/length STZ POP2r RESET-STATE #0000 .selection/scroll STZ2 #0008 .data/length STZ2 ;redraw JSR2 RTN @load-file ( -- ) ( load bytes ) ;path/name .File/name DEO2 MEMORY-SIZE .File/length DEO2 MEMORY .File/load DEO2 .File/success DEI2 .data/length STZ2 RESET-STATE ;reset-selection JSR2 RTN @save-file ( -- ) ;path/name .File/name DEO2 .data/length LDZ2 .File/length DEO2 MEMORY .File/save DEO2 RESET-STATE RTN ( snarf ) @snarf-txt ".snarf $1 @copy-snarf ( -- ) ;snarf-txt .File/name DEO2 .selection/to LDZ2 .selection/from LDZ2 -- INC2 .File/length DEO2 .selection/from LDZ2 .File/save DEO2 RTN @copy-string-snarf ( -- ) ;string-snarf/data STH2 .selection/to LDZ2 INC2 .selection/from LDZ2 &loop ( convert byte to string ) ( get char ) LDAk #04 SFT ;print-hex/parse JSR2 ( store ) STH2kr STA INC2r ( get char ) LDAk #0f AND ;print-hex/parse JSR2 ( store ) STH2kr STA INC2r #20 STH2kr STA INC2r INC2 GTH2k ,&loop JCN POP2 POP2 STH2r ;string-snarf/data -- ;string-snarf/length STA2 ;snarf-txt .File/name DEO2 ;string-snarf/length LDA2 .File/length DEO2 ;string-snarf/data .File/save DEO2 RTN @paste-snarf ( -- ) ;snarf-txt .File/name DEO2 ( space left until eof ) .data/length LDZ2 .selection/from LDZ2 MEMORY -- -- .File/length DEO2 .selection/from LDZ2 .File/load DEO2 ;redraw JSR2 RTN ( generics ) @line-hor ( x0* x1* y* color -- ) STH .Screen/y DEO2 SWP2 &loop ( save ) DUP2 .Screen/x DEO2 ( draw ) STHkr .Screen/pixel DEO #0002 ++ GTH2k ,&loop JCN POP2 POP2 POPr RTN @within-rect ( x* y* rect -- flag ) STH ( y < rect.y1 ) DUP2 STHkr #02 ADD LDZ2 << ,&skip JCN ( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 >> ,&skip JCN SWP2 ( x < rect.x1 ) DUP2 STHkr LDZ2 << ,&skip JCN ( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 >> ,&skip JCN POP2 POP2 POPr #01 RTN &skip POP2 POP2 POPr #00 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 @cursor-icn 80c0 e0f0 f8e0 1000 @bit-icns 3844 8282 8244 3800 387c fefe fe7c 3800 @pos-table 0000 0010 0028 0038 0050 0060 0078 0088 @untitled-txt "untitled.chr $1 @font-hex 007c 8282 8282 827c 0030 1010 1010 1010 007c 8202 7c80 80fe 007c 8202 1c02 827c 000c 1424 4484 fe04 00fe 8080 7c02 827c 007c 8280 fc82 827c 007c 8202 1e02 0202 007c 8282 7c82 827c 007c 8282 7e02 827c 007c 8202 7e82 827e 00fc 8282 fc82 82fc 007c 8280 8080 827c 00fc 8282 8282 82fc 007c 8280 f080 827c 007c 8280 f080 8080 include src/font.tal @string-snarf &length $2 &data $100