( app/nasu : spritesheet editor arrows - move selection ctrl+arrows - change page left-click - add pixel right-click - remove pixel 1 2 3 - select brush TODO: Copy in 2 bits mode, copies 2 tiles Modify up to 4 pages Save/load/rename Select paint color for 2-bit mode ) %+ { ADD } %- { SUB } %* { MUL } %/ { DIV } %< { LTH } %> { GTH } %= { EQU } %! { NEQ } %++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } %<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } %RTN { JMP2r } %STEP8 { #0033 SFT2 } %SFL { #40 SFT SFT } %MOD { DUP2 DIV MUL SUB } %TOB { SWP POP } %TOS { #00 SWP } %DEBUG { .Console/byte DEO #0a .Console/char DEO } %DEBUG2 { .Console/short DEO2 #0a .Console/char DEO } %LTS2 { #8000 ADD2 SWP2 #8000 ADD2 GTH2 } %GTS2 { #8000 ADD2 SWP2 #8000 ADD2 LTH2 } %SIZE-TO-RECT { STH2 STH2 OVR2 STH2r ADD2 OVR2 STH2r ADD2 } ( x y w h -- x1 y1 x2 y2 ) %SET-RECT { DUP2 ROT2 SWP2 #0006 ADD2 STA2 DUP2 ROT2 SWP2 #0004 ADD2 STA2 DUP2 ROT2 SWP2 #0002 ADD2 STA2 DUP2 ROT2 SWP2 STA2 POP2 } ( x1 y1 x2 y2 addr -- ) %BANK { #2000 } ( devices ) |00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] |10 @Console [ &vector $2 &pad $6 &char $1 &byte $1 &short $2 &string $2 ] |20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ] |80 @Controller [ &vector $2 &button $1 &key $1 ] |90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ] |a0 @File [ &vector $2 &success $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ] ( variables ) |0000 @settings [ &blending $1 &depth $1 &brush $1 &page $2 &tile $2 &ratio $1 ] @frame [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &width $2 &height $2 ] ( interface ) @bankview [ &x $2 &y $2 &mode $1 &selection $1 ] @tileview [ &x $2 &y $2 ] @editview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] @colorview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] @blendview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] @dataview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] @preview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] @rect [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] @mouse [ &x $2 &y $2 ] @pt [ &x $1 &y $1 ] @pos [ &x $2 &y $2 ] @color $1 @i $1 ( program ) |0100 ( -> ) ( theme ) #0efc .System/r DEO2 #03cc .System/g DEO2 #03ac .System/b DEO2 ( vectors ) ;on-button .Controller/vector DEO2 ;on-mouse .Mouse/vector DEO2 ;on-transfer .File/vector DEO2 ( set defaults ) #0130 .frame/width STZ2 #00a8 .frame/height STZ2 #01 .settings/brush STZ #32 .settings/ratio STZ .Screen/width DEI2 #0001 SFT2 .frame/width LDZ2 #0001 SFT2 SUB2 .Screen/height DEI2 #0001 SFT2 .frame/height LDZ2 #0001 SFT2 SUB2 #0010 ADD2 .frame/width LDZ2 .frame/height LDZ2 SIZE-TO-RECT ;frame SET-RECT .frame/x1 LDZ2 #0010 ADD2 .bankview/x STZ2 .frame/y1 LDZ2 .bankview/y STZ2 BANK .settings/page STZ2 .frame/x2 LDZ2 #0098 SUB2 .tileview/x STZ2 .frame/y1 LDZ2 .tileview/y STZ2 BANK #0448 ADD2 .settings/tile STZ2 .frame/x2 LDZ2 #0010 SUB2 .frame/y1 LDZ2 #0010 #0080 SIZE-TO-RECT ;dataview SET-RECT .frame/x1 LDZ2 #0010 ADD2 .frame/y2 LDZ2 #0020 SUB2 #0020 #0020 SIZE-TO-RECT ;blendview SET-RECT .frame/x1 LDZ2 #0060 ADD2 .frame/y2 LDZ2 #0020 SUB2 #0020 #0020 SIZE-TO-RECT ;colorview SET-RECT .frame/x1 LDZ2 #0038 ADD2 .frame/y2 LDZ2 #0020 SUB2 #0020 #0020 SIZE-TO-RECT ;preview SET-RECT .frame/x2 LDZ2 #0098 SUB2 .frame/y1 LDZ2 #0080 #0080 SIZE-TO-RECT ;editview SET-RECT #01 .settings/blending STZ ;filepath1 .File/name DEO2 #0800 .File/length DEO2 BANK .File/load DEO2 ;filepath2 .File/name DEO2 #0800 .File/length DEO2 BANK #0800 ADD2 .File/load DEO2 ;filepath3 .File/name DEO2 #1000 .File/length DEO2 BANK #1000 ADD2 .File/load DEO2 ;filepath4 .File/name DEO2 #1000 .File/length DEO2 BANK #2000 ADD2 .File/load DEO2 ;filepath5 .File/name DEO2 #1000 .File/length DEO2 BANK #2800 ADD2 .File/load DEO2 ;filepath6 .File/name DEO2 #1000 .File/length DEO2 BANK #3800 ADD2 .File/load DEO2 #40 DUP .bankview/selection STZ ;select-tile JSR2 BRK @on-transfer ( -> ) ;redraw JSR2 BRK @on-button ( -> ) ( skip ) .Controller/button DEI #00 NEQ #01 JCN [ BRK ] .Controller/button DEI #11 NEQ ,&no-pageup JCN .settings/page LDZ2 #0800 SUB2 .settings/page STZ2 ;redraw JSR2 BRK &no-pageup .Controller/button DEI #21 NEQ ,&no-pagedown JCN .settings/page LDZ2 #0800 ADD2 .settings/page STZ2 ;redraw JSR2 BRK &no-pagedown .Controller/button DEI #f0 AND DUP #04 SFT #01 AND #01 NEQ ,&no-up JCN ( move ) .bankview/selection LDZ #10 SUB .bankview/selection STZ &no-up DUP #05 SFT #01 AND #01 NEQ ,&no-down JCN ( move ) .bankview/selection LDZ #10 ADD .bankview/selection STZ &no-down DUP #06 SFT #01 AND #01 NEQ ,&no-left JCN ( move ) .bankview/selection LDZ #01 SUB .bankview/selection STZ &no-left DUP #07 SFT #01 AND #01 NEQ ,&no-right JCN ( move ) .bankview/selection LDZ #01 ADD .bankview/selection STZ &no-right POP .bankview/selection LDZ ;select-tile JSR2 BRK @on-mouse ( -> ) ;draw-cursor JSR2 ( skip ) .Mouse/state DEI #00 NEQ #01 JCN [ BRK ] ( toolbar ) .Mouse/y DEI2 .bankview/y LDZ2 #0010 SUB2 SUB2 #0008 DIV2 #0000 NEQ2 ;&no-toolbar-click JCN2 ( brush ) .Mouse/x DEI2 .bankview/x LDZ2 SUB2 #0008 DIV2 #000d LTH2 ,&no-brush-click JCN .Mouse/x DEI2 .bankview/x LDZ2 SUB2 #0008 DIV2 #000f GTH2 ,&no-brush-click JCN ( select ) .mouse/x LDZ2 .bankview/x LDZ2 SUB2 #0008 DIV2 #000d SUB2 TOB .bankview/mode STZ &no-brush-click .Mouse/x DEI2 .bankview/x LDZ2 SUB2 #0008 DIV2 #0005 NEQ2 ,&no-toggle-depth JCN ;toggle-depth JSR2 &no-toggle-depth ( release ) #00 .Mouse/state DEO ;redraw JSR2 BRK &no-toolbar-click ( bankview ) .Mouse/x DEI2 .bankview/x LDZ2 GTH2 .Mouse/x DEI2 .bankview/x LDZ2 #0080 ADD2 LTH2 #0101 EQU2 .Mouse/y DEI2 .bankview/y LDZ2 GTH2 .Mouse/y DEI2 .bankview/y LDZ2 #0080 ADD2 LTH2 #0101 EQU2 #0101 EQU2 ;on-touch-bankview JCN2 ( tileview ) .Mouse/x DEI2 .tileview/x LDZ2 GTH2 .Mouse/x DEI2 .tileview/x LDZ2 #0080 ADD2 LTH2 #0101 EQU2 .Mouse/y DEI2 .tileview/y LDZ2 GTH2 .Mouse/y DEI2 .tileview/y LDZ2 #0080 ADD2 LTH2 #0101 EQU2 #0101 EQU2 ;on-touch-tileview JCN2 ( editview ) .Mouse/x DEI2 DUP2 .editview/x1 LDZ2 GTH2 ROT ROT .editview/x2 LDZ2 LTH2 #0101 EQU2 .Mouse/y DEI2 DUP2 .editview/y1 LDZ2 GTH2 ROT ROT .editview/y2 LDZ2 LTH2 #0101 EQU2 #0101 EQU2 ;on-touch-editview JCN2 ( dataview ) .Mouse/x DEI2 DUP2 .dataview/x1 LDZ2 GTH2 ROT ROT .dataview/x2 LDZ2 LTH2 #0101 EQU2 .Mouse/y DEI2 DUP2 .dataview/y1 LDZ2 GTH2 ROT ROT .dataview/y2 LDZ2 LTH2 #0101 EQU2 #0101 EQU2 ;on-touch-dataview JCN2 ( blendbiew ) .Mouse/x DEI2 DUP2 .blendview/x1 LDZ2 GTH2 ROT ROT .blendview/x2 LDZ2 LTH2 #0101 EQU2 .Mouse/y DEI2 DUP2 .blendview/y1 LDZ2 GTH2 ROT ROT .blendview/y2 LDZ2 LTH2 #0101 EQU2 #0101 EQU2 ;on-touch-blendview JCN2 ( colorview ) .Mouse/x DEI2 DUP2 .colorview/x1 LDZ2 GTH2 ROT ROT .colorview/x2 LDZ2 LTH2 #0101 EQU2 .Mouse/y DEI2 DUP2 .colorview/y1 LDZ2 GTH2 ROT ROT .colorview/y2 LDZ2 LTH2 #0101 EQU2 #0101 EQU2 ;on-touch-colorview JCN2 ( preview ) .Mouse/x DEI2 DUP2 .preview/x1 LDZ2 GTH2 ROT ROT .preview/x2 LDZ2 LTH2 #0101 EQU2 .Mouse/y DEI2 DUP2 .preview/y1 LDZ2 GTH2 ROT ROT .preview/y2 LDZ2 LTH2 #0101 EQU2 #0101 EQU2 ;on-touch-preview JCN2 BRK @on-touch-bankview ( -> ) .bankview/mode LDZ #01 NEQ ,¬-copy-mode JCN #00 .i STZ ©-loop ( load ) .settings/tile LDZ2 .i LDZ ADD LDA ( get touch addr ) .Mouse/x DEI2 .bankview/x LDZ2 SUB2 STEP8 .Mouse/y DEI2 .bankview/y LDZ2 SUB2 STEP8 #0010 MUL2 ADD2 ( 2-bit mode ) #00 .settings/depth LDZ #01 ADD MUL2 .settings/page LDZ2 ADD2 #00 .i LDZ ADD2 STA ( incr ) .i LDZ #01 ADD .i STZ .i LDZ #08 LTH ,©-loop JCN ;redraw JSR2 BRK ¬-copy-mode .bankview/mode LDZ #02 NEQ ,¬-erase-mode JCN #00 .i STZ &erase-loop #00 ( get touch addr ) .Mouse/x DEI2 .bankview/x LDZ2 SUB2 STEP8 .Mouse/y DEI2 .bankview/y LDZ2 SUB2 STEP8 #0010 MUL2 ADD2 ( 2-bit mode ) #00 .settings/depth LDZ #01 ADD MUL2 .settings/page LDZ2 ADD2 #00 .i LDZ ADD2 STA ( incr ) .i LDZ #01 ADD .i STZ .i LDZ #08 LTH ,&erase-loop JCN ;redraw JSR2 BRK ¬-erase-mode ( select ) .Mouse/x DEI2 .bankview/x LDZ2 SUB2 #0008 DIV2 TOB .Mouse/y DEI2 .bankview/y LDZ2 SUB2 #0008 DIV2 TOB #40 SFT ADD DUP .bankview/selection STZ ;select-tile JSR2 BRK @on-touch-tileview ( -> ) BRK @on-touch-editview ( -> ) #aa DEBUG BRK @on-touch-dataview ( -> ) .Mouse/y DEI2 .dataview/y1 LDZ2 SUB2 STEP8 TOB #60 EQU ,&skip JCN BRK &skip .Mouse/x DEI2 .dataview/x1 LDZ2 SUB2 #0008 DIV2 TOB DUP #00 NEQ ,&no-move-up JCN ;op_shiftup JSR2 ( release ) #00 .Mouse/state DEO ;redraw JSR2 POP BRK &no-move-up DUP #01 NEQ ,&no-move-down JCN ;op_shiftdown JSR2 ( release ) #00 .Mouse/state DEO ;redraw JSR2 POP BRK &no-move-down POP BRK @on-touch-blendview ( -> ) .Mouse/x DEI2 .blendview/x1 LDZ2 SUB2 #0008 DIV2 TOB .Mouse/y DEI2 .blendview/y1 LDZ2 SUB2 #0008 DIV2 TOB #04 MUL ADD .settings/blending STZ ( release ) #00 .Mouse/state DEO ;redraw JSR2 BRK @on-touch-colorview ( -> ) ( channel ) .Mouse/y DEI2 .colorview/y1 LDZ2 SUB2 #0008 DIV2 TOB STH ( rgb ) .Mouse/x DEI2 .colorview/x1 LDZ2 SUB2 #0008 DIV2 TOB DUP #00 NEQ ,&no-brush JCN DUPr STHr .settings/brush STZ &no-brush DUP #01 NEQ ,&no-red JCN DUPr STHr .System/r ;set-color JSR2 &no-red DUP #02 NEQ ,&no-green JCN DUPr STHr .System/g ;set-color JSR2 &no-green DUP #03 NEQ ,&no-blue JCN DUPr STHr .System/b ;set-color JSR2 &no-blue POP POPr ( release ) #00 .Mouse/state DEO ;redraw JSR2 BRK @on-touch-preview ( -> ) ( y ) .Mouse/y DEI2 .preview/y1 LDZ2 SUB2 #0008 DIV2 TOB ( x ) .Mouse/x DEI2 .preview/x1 LDZ2 SUB2 #0008 DIV2 TOB #40 SFT ADD #11 ADD .settings/ratio STZ ( release ) #00 .Mouse/state DEO ;redraw JSR2 BRK @set-color ( color rgb -- ) STH DUP #00 NEQ ,&no-red0 JCN DUPr STHr DEI DUP #04 SFT #01 ADD ( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD ( resume ) #40 SFT SWP #0f AND ADD DUPr STHr DEO &no-red0 DUP #01 NEQ ,&no-red1 JCN DUPr STHr DEI DUP #0f AND #01 ADD ( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD ( resume ) #0f AND SWP #f0 AND ADD DUPr STHr DEO &no-red1 DUP #02 NEQ ,&no-red2 JCN DUPr STHr #01 ADD DEI DUP #04 SFT #01 ADD ( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD ( resume ) #40 SFT SWP #0f AND ADD DUPr STHr #01 ADD DEO &no-red2 DUP #03 NEQ ,&no-red3 JCN DUPr STHr #01 ADD DEI DUP #0f AND #01 ADD ( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD ( resume ) #0f AND SWP #f0 AND ADD DUPr STHr #01 ADD DEO &no-red3 POP POPr RTN @select-tile ( pos -- ) ( x y ) DUP #0f AND SWP #04 SFT ( y ) #10 MOD #10 MUL #00 SWP #0008 MUL2 ( x ) ROT #10 MOD #00 SWP #0008 MUL2 ADD2 ( 2-bit mode ) #00 .settings/depth LDZ #01 ADD MUL2 ( offset ) .settings/page LDZ2 ADD2 .settings/tile STZ2 ;redraw JSR2 RTN @toggle-depth ( -- ) .bankview/selection LDZ .settings/depth LDZ #00 EQU .settings/depth STZ ;select-tile JSR2 RTN @op_shiftup ( -- ) .settings/tile LDZ2 LDA .settings/tile LDZ2 #0001 ADD2 LDA .settings/tile LDZ2 STA .settings/tile LDZ2 #0002 ADD2 LDA .settings/tile LDZ2 #0001 ADD2 STA .settings/tile LDZ2 #0003 ADD2 LDA .settings/tile LDZ2 #0002 ADD2 STA .settings/tile LDZ2 #0004 ADD2 LDA .settings/tile LDZ2 #0003 ADD2 STA .settings/tile LDZ2 #0005 ADD2 LDA .settings/tile LDZ2 #0004 ADD2 STA .settings/tile LDZ2 #0006 ADD2 LDA .settings/tile LDZ2 #0005 ADD2 STA .settings/tile LDZ2 #0007 ADD2 LDA .settings/tile LDZ2 #0006 ADD2 STA .settings/tile LDZ2 #0007 ADD2 STA RTN @op_shiftdown ( -- ) .settings/tile LDZ2 #0007 ADD2 LDA .settings/tile LDZ2 #0006 ADD2 LDA .settings/tile LDZ2 #0007 ADD2 STA .settings/tile LDZ2 #0005 ADD2 LDA .settings/tile LDZ2 #0006 ADD2 STA .settings/tile LDZ2 #0004 ADD2 LDA .settings/tile LDZ2 #0005 ADD2 STA .settings/tile LDZ2 #0003 ADD2 LDA .settings/tile LDZ2 #0004 ADD2 STA .settings/tile LDZ2 #0002 ADD2 LDA .settings/tile LDZ2 #0003 ADD2 STA .settings/tile LDZ2 #0001 ADD2 LDA .settings/tile LDZ2 #0002 ADD2 STA .settings/tile LDZ2 LDA .settings/tile LDZ2 #0001 ADD2 STA .settings/tile LDZ2 STA RTN @redraw ( -- ) ;draw-bankview JSR2 ;draw-editview JSR2 ;draw-blendview JSR2 ;draw-colorview JSR2 ;draw-dataview JSR2 ;draw-preview JSR2 RTN @draw-bankview ( -- ) .bankview/x LDZ2 #0002 SUB2 .bankview/y LDZ2 #0002 SUB2 .bankview/x LDZ2 #0081 ADD2 .bankview/y LDZ2 #0081 ADD2 #03 ;line-rect JSR2 ( position ) .bankview/x LDZ2 .Screen/x DEO2 .bankview/y LDZ2 #0010 SUB2 .Screen/y DEO2 .settings/page LDZ2 #22 ;draw-short JSR2 ( toolbar ) .bankview/y LDZ2 #0010 SUB2 .Screen/y DEO2 .bankview/x LDZ2 #0028 ADD2 .Screen/x DEO2 ;depth_icns #00 .settings/depth LDZ #0008 MUL2 ADD2 .Screen/addr DEO2 #23 .Screen/color DEO .bankview/x LDZ2 #0068 ADD2 .Screen/x DEO2 ;tool_selector .Screen/addr DEO2 #21 .bankview/mode LDZ #00 EQU ADD .Screen/color DEO .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 ;tool_hand .Screen/addr DEO2 #21 .bankview/mode LDZ #01 EQU ADD .Screen/color DEO .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 ;tool_eraser .Screen/addr DEO2 #21 .bankview/mode LDZ #02 EQU ADD .Screen/color DEO ( guides ) .bankview/x LDZ2 #0010 SUB2 .Screen/x DEO2 .bankview/y LDZ2 .Screen/y DEO2 ;font-hex .Screen/addr DEO2 #00 #10 &guides ( draw ) OVR .bankview/selection LDZ #04 SFT EQU #22 ADD .Screen/color DEO .Screen/addr DEI2 #0008 ADD2 .Screen/addr DEO2 .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 SWP #01 ADD SWP DUP2 LTH ,&guides JCN POP2 ( draw page ) ( load ) .settings/page LDZ2 .Screen/addr DEO2 .bankview/y LDZ2 DUP2 #0080 ADD2 &ver ( save ) OVR2 .Screen/y DEO2 .bankview/x LDZ2 DUP2 #0080 ADD2 &hor ( save ) OVR2 .Screen/x DEO2 ( get selected ) .Screen/addr DEI2 .settings/tile LDZ2 EQU2 ( get blending ) .settings/blending LDZ ( get depth ) .settings/depth LDZ #20 MUL ( draw ) #20 ADD ADD ADD .Screen/color DEO ( incr ) SWP2 #0008 ADD2 SWP2 ( incr ) .Screen/addr DEI2 #0008 ADD2 #00 .settings/depth LDZ #0008 MUL2 ADD2 .Screen/addr DEO2 OVR2 OVR2 LTH2 ,&hor JCN POP2 POP2 ( incr ) SWP2 #0008 ADD2 SWP2 OVR2 OVR2 LTH2 ,&ver JCN POP2 POP2 RTN @draw-tileview ( -- ) .tileview/x LDZ2 #0002 SUB2 .tileview/y LDZ2 #0002 SUB2 .tileview/x LDZ2 #0080 ADD2 .tileview/y LDZ2 #0081 ADD2 #03 ;line-rect JSR2 .tileview/x LDZ2 #0028 ADD2 .Screen/x DEO2 .tileview/y LDZ2 #0010 SUB2 .Screen/y DEO2 .settings/tile LDZ2 .Screen/addr DEO2 ( get blending ) .settings/blending LDZ ( get depth ) .settings/depth LDZ #20 MUL ( draw ) #20 ADD ADD .Screen/color DEO ( position ) .tileview/x LDZ2 .Screen/x DEO2 .tileview/y LDZ2 #0010 SUB2 .Screen/y DEO2 .settings/tile LDZ2 #22 ;draw-short JSR2 ( body ) .tileview/x LDZ2 .Screen/x DEO2 .tileview/y LDZ2 .Screen/y DEO2 .settings/tile LDZ2 .settings/tile STZ2 ;draw-tileview-icn JSR2 .tileview/x LDZ2 #0040 ADD2 .Screen/x DEO2 .tileview/y LDZ2 .Screen/y DEO2 .settings/tile LDZ2 #0008 ADD2 .settings/tile STZ2 ;draw-tileview-icn JSR2 .tileview/x LDZ2 .Screen/x DEO2 .tileview/y LDZ2 #0040 ADD2 .Screen/y DEO2 .settings/tile LDZ2 #0008 ADD2 .settings/tile STZ2 ;draw-tileview-icn JSR2 .tileview/x LDZ2 #0040 ADD2 .Screen/x DEO2 .tileview/y LDZ2 #0040 ADD2 .Screen/y DEO2 .settings/tile LDZ2 #0008 ADD2 .settings/tile STZ2 ;draw-tileview-icn JSR2 ( line hor ) .tileview/y LDZ2 #003f ADD2 .Screen/y DEO2 .tileview/x LDZ2 .Screen/x DEO2 &line-hor ( draw ) #03 .Screen/color DEO ( incr ) .Screen/x DEI2 #0002 ADD2 .Screen/x DEO2 .Screen/x DEI2 .tileview/x LDZ2 #0082 ADD2 LTH2 ,&line-hor JCN ( line ver ) .tileview/y LDZ2 .Screen/y DEO2 .tileview/x LDZ2 #003f ADD2 .Screen/x DEO2 &line-ver ( draw ) #03 .Screen/color DEO ( incr ) .Screen/y DEI2 #0002 ADD2 .Screen/y DEO2 .Screen/y DEI2 .tileview/y LDZ2 #0081 ADD2 LTH2 ,&line-ver JCN ( rewind ) .settings/tile LDZ2 #0018 SUB2 .settings/tile STZ2 RTN @draw-editview ( -- ) .editview/x1 LDZ2 #0002 SUB2 .editview/y1 LDZ2 #0002 SUB2 .editview/x2 LDZ2 #0001 ADD2 .editview/y2 LDZ2 #0001 ADD2 #03 ;line-rect JSR2 ( position ) .editview/x1 LDZ2 .Screen/x DEO2 .editview/y1 LDZ2 #0010 SUB2 .Screen/y DEO2 .settings/tile LDZ2 #22 ;draw-short JSR2 ( tiles ) .settings/tile LDZ2 DUP2 STH2 .Screen/addr DEO2 #00 #04 &ver OVR #08 MUL TOS #0004 MUL2 .editview/y1 LDZ2 ADD2 .Screen/y DEO2 #00 #04 &hor OVR #08 MUL TOS #0004 MUL2 .editview/x1 LDZ2 ADD2 .Screen/x DEO2 ( get x,y ) SWP2 OVR STH SWP2 OVR STHr ( check if within ratio ) .settings/ratio LDZ #0f AND LTH STH .settings/ratio LDZ #04 SFT LTH STHr #0101 NEQ2 ,&outside JCN ( get tile ) DUP2r STH2r .Screen/addr DEO2 ( draw zoomed tile ) #01 ;draw-tile JSR2 ( incr ) STH2r #0008 ADD2 STH2 ,&resume JMP &outside ;halftone_icn .Screen/addr DEO2 #23 .Screen/color DEO #00 ;draw-tile JSR2 &resume ( incr ) SWP #01 ADD SWP DUP2 LTH ,&hor JCN POP2 ( incr ) SWP #01 ADD SWP DUP2 LTH ;&ver JCN2 POP2 POP2r ( grid ) .editview/x1 LDZ2 DUP2 #0080 ADD2 .editview/y1 LDZ2 #0020 ADD2 #03 ;line-hor JSR2 .editview/x1 LDZ2 DUP2 #0080 ADD2 .editview/y1 LDZ2 #0040 ADD2 #03 ;line-hor JSR2 .editview/x1 LDZ2 DUP2 #0080 ADD2 .editview/y1 LDZ2 #0060 ADD2 #03 ;line-hor JSR2 .editview/x1 LDZ2 #0020 ADD2 .editview/y1 LDZ2 DUP2 #0080 ADD2 #03 ;line-ver JSR2 .editview/x1 LDZ2 #0040 ADD2 .editview/y1 LDZ2 DUP2 #0080 ADD2 #03 ;line-ver JSR2 .editview/x1 LDZ2 #0060 ADD2 .editview/y1 LDZ2 DUP2 #0080 ADD2 #03 ;line-ver JSR2 RTN @draw-tile ( color -- ) ( TODO: complete ) STH #00 #20 &ver #00 #20 &hor ( get x,y ) SWP2 OVR STH SWP2 OVR STHr ( get address ) .Screen/addr DEI2 ( after this, ADDR XY ) SWP2 SWP STH ( got sprite line ) #04 DIV TOS ADD2 LDA ( get pixel ) STHr #04 DIV #07 SWP SUB SFT #01 AND .Screen/color DEO #0001 .Screen/x DEI2 ADD2 .Screen/x DEO2 ( incr ) SWP #01 ADD SWP DUP2 LTH ,&hor JCN POP2 #0001 .Screen/y DEI2 ADD2 .Screen/y DEO2 .Screen/x DEI2 #0020 SUB2 .Screen/x DEO2 ( incr ) SWP #01 ADD SWP DUP2 LTH ,&ver JCN POP2 .Screen/y DEI2 #0020 SUB2 .Screen/y DEO2 POPr RTN @draw-tileview-icn ( -- ) #00 .pt/x STZ #00 .pt/y STZ &ver #00 .pt/x STZ &hor ( get bit ) ;blank_icn #00 .settings/tile LDZ2 #00 .pt/y LDZ ADD2 LDA #07 .pt/x LDZ SUB SFT #01 AND ( get bit ) #0008 MUL2 ADD2 .Screen/addr DEO2 ( add *8 ) ( draw ) #21 .Screen/color DEO ( incr ) .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 ( incr ) .pt/x LDZ #01 ADD .pt/x STZ .pt/x LDZ #08 LTH ;&hor JCN2 ( incr ) .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 ( incr ) .pt/y LDZ #01 ADD .pt/y STZ .Screen/x DEI2 #0040 SUB2 .Screen/x DEO2 .pt/y LDZ #08 LTH ;&ver JCN2 RTN @draw-blendview ( -- ) ( .blendview/x1 LDZ2 #0002 SUB2 .blendview/y1 LDZ2 #0002 SUB2 .blendview/x2 LDZ2 #0001 ADD2 .blendview/y2 LDZ2 #0001 ADD2 #03 ;line-rect JSR2 ) .settings/tile LDZ2 .Screen/addr DEO2 #00 #10 &loop OVR #04 MOD #00 SWP #0008 MUL2 .blendview/x1 LDZ2 ADD2 .Screen/x DEO2 OVR #04 DIV #00 SWP #0008 MUL2 .blendview/y1 LDZ2 ADD2 .Screen/y DEO2 #20 .Screen/color DEO OVR #20 ADD .settings/depth LDZ #20 MUL ADD .Screen/color DEO SWP #01 ADD SWP DUP2 LTH ,&loop JCN POP2 .blendview/x1 LDZ2 .Screen/x DEO2 .blendview/y2 LDZ2 #0001 ADD2 .Screen/y DEO2 ( get blending ) .settings/blending LDZ ( get depth ) .settings/depth LDZ #20 MUL ( draw ) #20 ADD ADD #21 ;draw-byte JSR2 RTN @draw-dataview ( -- ) ( bytes ) .tileview/y LDZ2 #0018 ADD2 .Screen/y DEO2 #00 .i STZ &bytes .tileview/x LDZ2 #0088 ADD2 .Screen/x DEO2 .settings/tile LDZ2 #00 .i LDZ ADD2 LDA #22 ;draw-byte JSR2 ( incr ) .i LDZ #01 ADD .i STZ ( incr ) .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 .i LDZ #08 LTH ;&bytes JCN2 ( operations ) .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 ;movedown_icn .Screen/addr DEO2 #21 .Screen/color DEO .Screen/x DEI2 #0008 SUB2 .Screen/x DEO2 ;moveup_icn .Screen/addr DEO2 #21 .Screen/color DEO ( draw tiles 2x2 ) .tileview/y LDZ2 .Screen/y DEO2 #00 .pt/x STZ #00 .pt/y STZ .settings/tile LDZ2 .Screen/addr DEO2 &tiles-ver #00 .pt/x STZ .tileview/x LDZ2 #0088 ADD2 .Screen/x DEO2 &tiles-hor ( draw ) #23 .Screen/color DEO ( incr ) .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 ( incr ) .Screen/addr DEI2 #0008 ADD2 .Screen/addr DEO2 ( incr ) .pt/x LDZ #01 ADD .pt/x STZ .pt/x LDZ #02 LTH ;&tiles-hor JCN2 ( incr ) .pt/y LDZ #01 ADD .pt/y STZ ( incr ) .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 .pt/y LDZ #02 LTH ;&tiles-ver JCN2 RTN @draw-colorview ( -- ) .colorview/y1 LDZ2 #18 ADD .Screen/y DEO2 .colorview/x1 LDZ2 #08 ADD .Screen/x DEO2 .System/r DEI2 ;draw-color-code JSR2 .colorview/y1 LDZ2 #18 ADD .Screen/y DEO2 .colorview/x1 LDZ2 #10 ADD .Screen/x DEO2 .System/g DEI2 ;draw-color-code JSR2 .colorview/y1 LDZ2 #18 ADD .Screen/y DEO2 .colorview/x1 LDZ2 #18 ADD .Screen/x DEO2 .System/b DEI2 ;draw-color-code JSR2 .colorview/x1 LDZ2 .Screen/x DEO2 ;circle_icns .Screen/addr DEO2 #00 #04 &loop OVR .settings/brush LDZ EQU #00 SWP #0008 MUL2 ;circle_icns ADD2 .Screen/addr DEO2 OVR .colorview/y1 LDZ2 ROT #00 SWP #0008 MUL2 ADD2 .Screen/y DEO2 OVR #20 ADD .Screen/color DEO SWP #01 ADD SWP DUP2 LTH ,&loop JCN POP2 RTN @draw-preview ( -- ) ( stash address ) .settings/tile LDZ2 DUP2 STH2 .Screen/addr DEO2 #00 #04 &ver OVR #08 MUL TOS .preview/y1 LDZ2 ADD2 .Screen/y DEO2 #00 #04 &hor OVR #08 MUL TOS .preview/x1 LDZ2 ADD2 .Screen/x DEO2 ( get x,y ) SWP2 OVR STH SWP2 OVR STHr ( check if within ratio ) .settings/ratio LDZ #0f AND LTH STH .settings/ratio LDZ #04 SFT LTH STHr #0101 NEQ2 ,&outside JCN ( get tile ) DUP2r STH2r .Screen/addr DEO2 ( get blending ) .settings/blending LDZ ( get depth ) .settings/depth LDZ #20 MUL ( draw ) #20 ADD ADD .Screen/color DEO ( incr ) STH2r #0008 [ .settings/depth LDZ #08 MUL TOS ADD2 ] ADD2 STH2 ,&resume JMP &outside ;halftone_icn .Screen/addr DEO2 #23 .Screen/color DEO &resume ( incr ) SWP #01 ADD SWP DUP2 LTH ,&hor JCN POP2 ( incr ) SWP #01 ADD SWP DUP2 LTH ;&ver JCN2 POP2 POP2r .preview/x1 LDZ2 #0001 SUB2 .Screen/x DEO2 .preview/y2 LDZ2 #0001 ADD2 .Screen/y DEO2 .settings/ratio LDZ #23 ;draw-byte JSR2 RTN @draw-color-code ( color* -- ) DUP ;font-hex ROT #0f AND #08 MUL #00 SWP ADD2 .Screen/addr DEO2 ( draw ) #22 .Screen/color DEO .colorview/y1 LDZ2 #10 ADD .Screen/y DEO2 ;font-hex ROT #04 SFT #08 MUL #00 SWP ADD2 .Screen/addr DEO2 ( draw ) #22 .Screen/color DEO .colorview/y1 LDZ2 #08 ADD .Screen/y DEO2 DUP ;font-hex ROT #0f AND #08 MUL #00 SWP ADD2 .Screen/addr DEO2 ( draw ) #22 .Screen/color DEO .colorview/y1 LDZ2 .Screen/y DEO2 ;font-hex ROT #04 SFT #08 MUL #00 SWP ADD2 .Screen/addr DEO2 ( draw ) #22 .Screen/color DEO RTN @draw-cursor ( -- ) ( clear last cursor ) .mouse/x LDZ2 .Screen/x DEO2 .mouse/y LDZ2 .Screen/y DEO2 #30 .Screen/color DEO ( record mouse positions ) .Mouse/x DEI2 .mouse/x STZ2 .Mouse/y DEI2 .mouse/y STZ2 ( draw new cursor ) .mouse/x LDZ2 .Screen/x DEO2 .mouse/y LDZ2 .Screen/y DEO2 ;tool_selector #00 .bankview/mode LDZ #08 MUL ADD2 .Screen/addr DEO2 #32 .Mouse/state DEI #00 NEQ ADD .Screen/color DEO RTN @draw-byte ( byte color -- ) .color STZ STH ;font-hex #00 DUPr STHr #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2 ( draw ) .color LDZ .Screen/color DEO .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 ;font-hex #00 STHr #0f AND #08 MUL ADD2 .Screen/addr DEO2 ( draw ) .color LDZ .Screen/color DEO RTN @draw-short ( short* color -- ) STH SWP DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 ( draw ) DUPr STHr .Screen/color DEO #0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2 ( draw ) DUPr STHr .Screen/color DEO DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2 ( draw ) DUPr STHr .Screen/color DEO #0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2 ( draw ) STHr .Screen/color DEO RTN ( Utils ) @line-rect ( x1* y1* x2* y2* color -- ) ( load ) .color STZ DUP2 STH2 .rect/y2 STZ2 .rect/x2 STZ2 DUP2 STH2 .rect/y1 STZ2 .rect/x1 STZ2 STH2r STH2r &ver ( save ) OVR2 .Screen/y DEO2 ( draw ) .rect/x1 LDZ2 .Screen/x DEO2 .color LDZ DUP .Screen/color DEO ( draw ) .rect/x2 LDZ2 .Screen/x DEO2 .Screen/color DEO ( incr ) SWP2 #0001 ADD2 SWP2 OVR2 OVR2 LTS2 ,&ver JCN POP2 POP2 .rect/x1 LDZ2 .rect/x2 LDZ2 &hor ( save ) OVR2 .Screen/x DEO2 ( draw ) .rect/y1 LDZ2 .Screen/y DEO2 .color LDZ DUP .Screen/color DEO ( draw ) .rect/y2 LDZ2 .Screen/y DEO2 .Screen/color DEO ( incr ) SWP2 #0001 ADD2 SWP2 OVR2 OVR2 #0001 ADD2 LTS2 ,&hor JCN POP2 POP2 RTN @line-hor ( x0* x1* y* color -- ) STH .Screen/y DEO2 &loop ( save ) OVR2 .Screen/x DEO2 ( draw ) DUPr STHr .Screen/color DEO ( incr ) SWP2 #0002 ADD2 SWP2 OVR2 OVR2 LTH2 ,&loop JCN POP2 POP2 POPr RTN @line-ver ( x* y0* y1* color -- ) STH ROT2 .Screen/x DEO2 &loop ( save ) OVR2 .Screen/y DEO2 ( draw ) DUPr STHr .Screen/color DEO ( incr ) SWP2 #0002 ADD2 SWP2 OVR2 OVR2 LTH2 ,&loop JCN POP2 POP2 POPr RTN @tool_selector 80c0 e0f0 f8e0 1000 @tool_hand 2020 20b8 7c7c 3838 @tool_eraser 2050 b87c 3e1c 0800 @moveup_icn 0010 387c fe10 1000 @movedown_icn 0010 1010 fe7c 3810 @halftone_icn aa55 aa55 aa55 aa55 @circle_icns 0038 7cfe fefe 7c38 ( full ) 0038 4482 8282 4438 ( line ) @eye_icns 0038 4492 2810 0000 ( open ) 0000 0082 4438 0000 ( closed ) @blank_icn 0000 0000 0000 0000 7cfe fefe fefe 7c00 @depth_icns 00fe 8282 fe82 82fe 00fe 9292 fe92 92fe @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 @filepath1 [ "projects/fonts/specter8.bit 00 ] @filepath2 [ "projects/pictures/cyr10x8.chr 00 ] @filepath3 [ "projects/pictures/zerotwo10x10.chr 00 ] @filepath4 [ "projects/fonts/katahira8.bit 00 ] @filepath5 [ "projects/pictures/ako10x10.chr 00 ] @filepath6 [ "projects/pictures/logo1x1.bit 00 ]