diff --git a/nasu.usm b/nasu.usm deleted file mode 100644 index 008c0dc..0000000 --- a/nasu.usm +++ /dev/null @@ -1,1100 +0,0 @@ -( - app/nasu : spritesheet editor - - arrows - move selection - enter - insert tile - backspace - delete tile - left-click - add pixel - right-click - remove pixel - 1 2 3 - select color - q w e - select tool -) - -%+ { ADD } %- { SUB } %* { MUL } %/ { DIV } -%< { LTH } %> { GTH } %= { EQU } %! { NEQ } -%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } -%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } - -%HOR { #20 } %VER { #10 } -%WIDTH { HOR TOS #0008 ** } %HEIGHT { VER TOS #0008 ** } -%LENGTH { HOR TOS VER TOS ** #0010 ** } - -%RTN { JMP2r } -%STEP8 { #33 SFT2 } -%MOD { DUP2 / * - } -%MOD2 { OVR2 OVR2 // ** -- } -%MOD8 { #07 AND } -%ROL { DUP #07 SFT SWP #10 SFT + } -%ROR { DUP #70 SFT SWP #01 SFT + } -%SFL { #40 SFT SFT } -%TOB { SWP POP } %TOS { #00 SWP } -%INCR { SWP #01 + SWP } -%INCR2 { SWP2 #0001 ++ SWP2 } -%DECR2 { SWP2 #0001 -- SWP2 } -%TOGGLE { DUP LDZ #00 = SWP STZ } -%GET-ITERATORS { SWP2k POP SWP POP } - -%DEBUG { .Console/byte DEO #0a .Console/char DEO } -%DEBUG2 { .Console/short DEO2 #0a .Console/char DEO } - -%BANK { #2000 } -%GET-COLOR { .settings/color LDZ STHk #02 / + DEI #01 STHr #01 AND - #04 * SFT #0f AND } -%GET-POSITION { .settings/focus LDZ2 BANK -- DUP2 #0002 // WIDTH MOD2 SWP2 WIDTH #0002 ** // #0008 ** } -%ADD-POSITIONS { ROT2 ++ ROT2 ROT2 ++ SWP2 } -%RELEASE-MOUSE { #00 .Mouse/state DEO } - -%SIZE-TO-RECT { - STH2 STH2 OVR2 STH2r ++ OVR2 STH2r ++ -} ( x y w h -- x1 y1 x2 y2 ) - -%SET-RECT { - DUP2 ROT2 SWP2 #0006 ++ STA2 - DUP2 ROT2 SWP2 #0004 ++ STA2 - DUP2 ROT2 SWP2 #0002 ++ STA2 - DUP2 ROT2 SWP2 STA2 - POP2 -} ( x1 y1 x2 y2 addr -- ) - -( 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 - -@state - &timer $1 - &trap $1 - &blink $1 - -@settings - &depth $1 - &color $1 - &blending $1 - &ratio $1 - &tool $1 - &focus $2 - &zoom $1 - -@frame [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &width $2 &height $2 ] - -( interface ) -@toolview [ &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 ] -@tileview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] -@zoomview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] -@pointer [ &x $2 &y $2 ] - -@path - &length $1 - &name $20 - -( program ) - -|0100 ( -> ) - - ( theme ) - #0a6f .System/r DEO2 - #05cf .System/g DEO2 - #0caf .System/b DEO2 - - ( vectors ) - ;on-button .Controller/vector DEO2 - ;on-mouse .Mouse/vector DEO2 - ;on-transfer .File/vector DEO2 - ;on-frame .Screen/vector DEO2 - - ( set defaults ) - HOR TOS #0008 ** .frame/width STZ2 - VER TOS #0008 ** #0040 ++ .frame/height STZ2 - #01 .settings/depth STZ - #01 .settings/color STZ - #01 .settings/blending STZ - #32 .settings/ratio STZ - #01 .settings/tool STZ - BANK .settings/focus STZ2 - - .Screen/width DEI2 #01 SFT2 .frame/width LDZ2 #01 SFT2 -- - .Screen/height DEI2 #01 SFT2 .frame/height LDZ2 #01 SFT2 -- - .frame/width LDZ2 .frame/height LDZ2 - SIZE-TO-RECT ;frame SET-RECT - - .frame/x1 LDZ2 .frame/y1 LDZ2 #0030 ++ HOR TOS #0008 ** VER TOS #0008 ** SIZE-TO-RECT ;tileview SET-RECT - .tileview/x1 LDZ2 .tileview/y2 LDZ2 #0008 ++ HOR TOS #0008 ** #0008 SIZE-TO-RECT ;toolview SET-RECT - - .frame/x1 LDZ2 .frame/y1 LDZ2 #0020 #0020 SIZE-TO-RECT ;blendview SET-RECT - .frame/x1 LDZ2 #0030 ++ .frame/y1 LDZ2 #0020 #0020 SIZE-TO-RECT ;preview SET-RECT - .frame/x1 LDZ2 #0060 ++ .frame/y1 LDZ2 #0020 #0020 SIZE-TO-RECT ;colorview SET-RECT - .frame/x1 LDZ2 #0090 ++ .frame/y1 LDZ2 #0020 #0028 SIZE-TO-RECT ;zoomview SET-RECT - .frame/x1 LDZ2 #00c0 ++ .frame/y1 LDZ2 #0048 #0020 SIZE-TO-RECT ;dataview SET-RECT - - ;untitled-txt ;new-file JSR2 - ;redraw JSR2 - -BRK - -@on-frame ( -> ) - - .state/trap LDZ #00 ! #01 JCN [ BRK ] - - ( incr ) .state/timer LDZ #01 + DUP .state/timer STZ - - #08 ! ,&no-toggle JCN - .state/blink TOGGLE - #23 .state/blink LDZ #09 * + ;draw-filepath JSR2 - #00 .state/timer STZ - &no-toggle - -BRK - -@on-transfer ( -> ) - - ;redraw JSR2 - -BRK - -@on-button ( -> ) - - .Controller/key DEI .Controller/button DEI #0000 !! #01 JCN [ BRK ] - - .Controller/key DEI #00 ! .state/trap LDZ #0101 == ;on-button-trap JCN2 - - .Controller/key DEI - DUP #31 ! ,&no-1 JCN - ( color ) #00 .settings/color STZ ;draw-toolview JSR2 &no-1 - DUP #32 ! ,&no-2 JCN - ( color ) #01 .settings/color STZ ;draw-toolview JSR2 &no-2 - DUP #33 ! ,&no-3 JCN - ( color ) #02 .settings/color STZ ;draw-toolview JSR2 &no-3 - DUP #34 ! ,&no-4 JCN - ( color ) #03 .settings/color STZ ;draw-toolview JSR2 &no-4 - DUP #08 ! ,&no-delete JCN - ( delete ) .settings/focus LDZ2 ;op-shift-memory-left JSR2 ;redraw JSR2 &no-delete - DUP #0d ! ,&no-insert JCN - ( insert ) .settings/focus LDZ2 ;op-shift-memory-right JSR2 ;redraw JSR2 &no-insert - DUP #20 ! ,&no-zoom JCN - ( zoom ) .settings/zoom TOGGLE ;redraw JSR2 &no-zoom - DUP #71 ! ,&no-tool0 JCN - ( tool ) #00 .settings/tool STZ ;redraw JSR2 &no-tool0 - DUP #77 ! ,&no-tool1 JCN - ( tool ) #01 .settings/tool STZ ;redraw JSR2 &no-tool1 - DUP #65 ! ,&no-tool2 JCN - ( tool ) #02 .settings/tool STZ ;redraw JSR2 &no-tool2 - POP - - ( release ) #00 .Controller/key DEO - - .Controller/button DEI #f0 AND - DUP #04 SFT #01 AND #01 ! ,&no-up JCN - ( clamp ) .settings/focus LDZ2 BANK HOR TOS #0010 ** ++ << ,&no-up JCN - ( up ) .settings/focus LDZ2 #0010 HOR TOS ** -- .settings/focus STZ2 &no-up - DUP #05 SFT #01 AND #01 ! ,&no-down JCN - ( clamp ) .settings/focus LDZ2 BANK LENGTH HOR TOS #0010 ** -- ++ >> ,&no-down JCN - ( down ) .settings/focus LDZ2 #0010 HOR TOS ** ++ .settings/focus STZ2 &no-down - DUP #06 SFT #01 AND #01 ! ,&no-left JCN - ( clamp ) .settings/focus LDZ2 BANK #0001 ++ << ,&no-left JCN - ( left ) .settings/focus LDZ2 #0010 -- .settings/focus STZ2 &no-left - DUP #07 SFT #01 AND #01 ! ,&no-right JCN - ( clamp ) .settings/focus LDZ2 BANK LENGTH #0020 -- ++ >> ,&no-right JCN - ( right ) .settings/focus LDZ2 #0010 ++ .settings/focus STZ2 &no-right - POP - - ;redraw JSR2 - -BRK - -@on-button-trap ( -> ) - - ( enter ) - .Controller/key DEI #0d ! ,&no-edit-enter JCN - #00 .state/trap STZ - #23 ;draw-filepath JSR2 - BRK - &no-edit-enter - ( backspace ) - .Controller/key DEI #08 ! ,&no-edit-backspace JCN - .path/length LDZ #00 = ,&edit-end JCN - .path/length LDZ #01 - .path/length STZ - #00 .path/name .path/length LDZ + STZ - #23 ;draw-filepath JSR2 - BRK - &no-edit-backspace - ( default ) - .path/length LDZ #1f = ,&edit-end JCN - .Controller/key DEI .path/name .path/length LDZ + STZ - .path/length LDZ #01 + .path/length STZ - &edit-end - #00 .path/name .path/length LDZ + STZ - -BRK - -@on-mouse ( -> ) - - ;draw-cursor JSR2 - - ( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ] - - .Mouse/x DEI2 .Mouse/y DEI2 .tileview ;within-rect JSR2 - ;on-touch-tileview JCN2 - .Mouse/x DEI2 .Mouse/y DEI2 .toolview ;within-rect JSR2 - ;on-touch-toolview JCN2 - .Mouse/x DEI2 .Mouse/y DEI2 .blendview ;within-rect JSR2 - ;on-touch-blendview JCN2 - .Mouse/x DEI2 .Mouse/y DEI2 .colorview ;within-rect JSR2 - ;on-touch-colorview JCN2 - .Mouse/x DEI2 .Mouse/y DEI2 .preview ;within-rect JSR2 - ;on-touch-preview JCN2 - .Mouse/x DEI2 .Mouse/y DEI2 .zoomview ;within-rect JSR2 - ;on-touch-zoomview JCN2 - -BRK - -@on-touch-tileview ( -> ) - - .Mouse/x DEI2 .tileview/x1 LDZ2 -- - .Mouse/y DEI2 .tileview/y1 LDZ2 -- - - .settings/zoom LDZ #01 ! ,&no-zoom JCN - #0008 // SWP2 #0008 // SWP2 - GET-POSITION ADD-POSITIONS - #00 .Mouse/state DEI #10 = ,&do-erase-zoom JCN - POP .settings/color LDZ &do-erase-zoom - ;put-pixel JSR2 - ;redraw JSR2 - BRK - &no-zoom - - .settings/tool LDZ - DUP #00 ! ,&no-brush JCN - POP - #00 .Mouse/state DEI #10 = ,&do-erase JCN - POP .settings/color LDZ &do-erase - ;put-pixel JSR2 - ;draw-tileview JSR2 - ;draw-preview JSR2 - BRK &no-brush - DUP #01 ! ,&no-selector JCN - POP - ;get-tile-addr JSR2 .settings/focus STZ2 - ;redraw JSR2 - BRK &no-selector - DUP #02 ! ,&no-copy JCN - POP - ;get-tile-addr JSR2 - .settings/focus LDZ2 SWP2 - ;op-copy-tile JSR2 - ;redraw JSR2 - RELEASE-MOUSE - BRK &no-copy - POP - POP2 POP2 - -BRK - -@on-touch-toolview ( -> ) - - .Mouse/x DEI2 .toolview/x1 LDZ2 -- #0008 // TOB - - DUP HOR SWP - #01 ! ,&no-save JCN - ;save-file JSR2 - &no-save - DUP HOR SWP - #03 ! ,&no-load JCN - ;load-file JSR2 - ;redraw JSR22 - &no-load - DUP HOR SWP - #04 ! ,&no-name JCN - #20 ;draw-filepath JSR2 - ;blank-txt ;new-file JSR2 - ;redraw JSR2 - &no-name - DUP #07 ! ,&no-zoom JCN - .settings/zoom TOGGLE - ;draw-tileview JSR2 - ;draw-toolview JSR2 - &no-zoom - DUP #08 > OVR HOR SWP - #05 > #0101 !! ,&no-rename JCN - .state/trap TOGGLE - #00 .state/blink STZ - #23 ;draw-filepath JSR2 - &no-rename - DUP #01 + .settings/color LDZ ! ,&no-eraser JCN - #00 .settings/color STZ - ;draw-colorview JSR2 - ;draw-toolview JSR2 - POP RELEASE-MOUSE BRK - &no-eraser - DUP #02 > ,&no-color JCN - DUP #01 + .settings/color STZ - ;draw-colorview JSR2 - ;draw-toolview JSR2 - POP RELEASE-MOUSE BRK - &no-color - DUP #06 > ,&no-tool JCN - DUP #03 = ,&end JCN - DUP #04 - .settings/tool STZ - ;draw-toolview JSR2 - POP RELEASE-MOUSE BRK - &no-tool - POP - &end - - RELEASE-MOUSE - -BRK - -@on-touch-zoomview ( -> ) - - .Mouse/y DEI2 .zoomview/y1 LDZ2 -- #0008 // TOB #04 ! ;&no-mod JCN2 - .Mouse/x DEI2 .zoomview/x1 LDZ2 -- #0008 // TOB - DUP #00 = .Mouse/state DEI #01 = #0101 !! ,&no-shiftup JCN - .settings/focus LDZ2 - DUP2 ;op-shift-tile-up JSR2 - #0008 ++ ;op-shift-tile-up JSR2 &no-shiftup - DUP #00 = .Mouse/state DEI #10 = #0101 !! ,&no-shiftdown JCN - .settings/focus LDZ2 - DUP2 ;op-shift-tile-down JSR2 - #0008 ++ ;op-shift-tile-down JSR2 &no-shiftdown - DUP #01 = .Mouse/state DEI #01 = #0101 !! ,&no-shiftright JCN - .settings/focus LDZ2 - DUP2 ;op-shift-tile-right JSR2 - #0008 ++ ;op-shift-tile-right JSR2 &no-shiftright - DUP #01 = .Mouse/state DEI #10 = #0101 !! ,&no-shiftleft JCN - .settings/focus LDZ2 - DUP2 ;op-shift-tile-left JSR2 - #0008 ++ ;op-shift-tile-left JSR2 &no-shiftleft - POP - RELEASE-MOUSE - ,&finish JMP - &no-mod - - ( paint ) - .Mouse/x DEI2 .zoomview/x1 LDZ2 -- #0004 // - .Mouse/y DEI2 .zoomview/y1 LDZ2 -- #0004 // - .settings/focus LDZ2 ++ - ( detect erase ) - #00 .Mouse/state DEI #10 = ,&do-erase JCN - POP .settings/color LDZ &do-erase - STH - OVR2 OVR2 - STHkr #00 ;toggle-pixel JSR2 - #0008 ++ - STHr #01 ;toggle-pixel JSR2 - - &finish - - ;redraw JSR2 - -BRK - -@on-touch-blendview ( -> ) - - .Mouse/x DEI2 .blendview/x1 LDZ2 -- #0008 // TOB - .Mouse/y DEI2 .blendview/y1 LDZ2 -- #0008 // TOB #04 * + - .settings/blending STZ - - ;redraw JSR2 - - RELEASE-MOUSE - -BRK - -@on-touch-colorview ( -> ) - - .Mouse/y DEI2 .colorview/y1 LDZ2 -- #0008 // TOB - - DUP #00 ! ,&no-r JCN - .System/r STHk ,&set-color JSR - STHr [ .settings/color LDZ #02 / + ] DEO - &no-r - DUP #01 ! ,&no-g JCN - .System/g STHk ,&set-color JSR - STHr [ .settings/color LDZ #02 / + ] DEO - &no-g - DUP #02 ! ,&no-b JCN - .System/b STHk ,&set-color JSR - STHr [ .settings/color LDZ #02 / + ] DEO - &no-b - POP - - ;redraw JSR2 - - BRK - - &set-color - .settings/color LDZ STHk #02 / + DEI - STHr #02 MOD STHk - #0f SWP [ #40 * SFT ] AND - STHr #00 = - .Mouse/x DEI2 .colorview/x1 LDZ2 -- #0002 // TOB - ( clamp to #0f ) DUP #10 = #01 * - - SWP [ #40 * SFT ] + - RTN - -BRK - -@on-touch-preview ( -> ) - - ( y ) .Mouse/y DEI2 .preview/y1 LDZ2 -- #0008 // TOB - ( x ) .Mouse/x DEI2 .preview/x1 LDZ2 -- #0008 // TOB - - #40 SFT + #11 + - .settings/ratio STZ - - ;redraw JSR2 - - RELEASE-MOUSE - -BRK - -( operations ) - -@op-clear ( addr* length* -- ) - - OVR2 ++ - &loop - OVR2 #00 ROT ROT STA - INCR2 - NEQ2k ,&loop JCN - POP2 POP2 - -RTN - -@op-shift-memory-left ( addr* -- ) - - DUP2 LENGTH ++ - &loop - OVR2 #0010 ++ LDA STH - OVR2 STHr ROT ROT STA - INCR2 - NEQ2k ,&loop JCN - POP2 POP2 - -RTN - -@op-shift-memory-right ( addr* -- ) - - DUP2 LENGTH ++ SWP2 #0001 -- - &loop - OVR2 LDA STH - OVR2 #0010 ++ STHr ROT ROT STA - DECR2 - NEQ2k ,&loop JCN - POP2 POP2 - -RTN - -@op-shift-tile-up ( addr* -- ) - - STH2 - STH2kr LDA - STH2kr #0001 ++ LDA STH2kr STA - STH2kr #0002 ++ LDA STH2kr #0001 ++ STA - STH2kr #0003 ++ LDA STH2kr #0002 ++ STA - STH2kr #0004 ++ LDA STH2kr #0003 ++ STA - STH2kr #0005 ++ LDA STH2kr #0004 ++ STA - STH2kr #0006 ++ LDA STH2kr #0005 ++ STA - STH2kr #0007 ++ LDA STH2kr #0006 ++ STA - STH2r #0007 ++ STA - -RTN - -@op-shift-tile-down ( addr* -- ) - - STH2 - STH2kr #0007 ++ LDA - STH2kr #0006 ++ LDA STH2kr #0007 ++ STA - STH2kr #0005 ++ LDA STH2kr #0006 ++ STA - STH2kr #0004 ++ LDA STH2kr #0005 ++ STA - STH2kr #0003 ++ LDA STH2kr #0004 ++ STA - STH2kr #0002 ++ LDA STH2kr #0003 ++ STA - STH2kr #0001 ++ LDA STH2kr #0002 ++ STA - STH2kr LDA STH2kr #0001 ++ STA - STH2r STA - -RTN - -@op-shift-tile-left ( addr* -- ) - - STH2 - #00 #08 - &loop - OVR TOS STH2kr ++ DUP2 - LDA [ ROL ] ROT ROT STA - INCR - LTHk ,&loop JCN - POP2 - POP2r - -RTN - -@op-shift-tile-right ( addr* -- ) - - STH2 - #00 #08 - &loop - OVR TOS STH2kr ++ DUP2 - LDA [ ROR ] ROT ROT STA - INCR - LTHk ,&loop JCN - POP2 - POP2r - -RTN - -@op-copy-tile ( from* to* -- ) - - STH2 STH2 - #00 #10 - &loop - ( get ) - OVR TOS DUP2 STH2kr ++ LDA - ( put ) - ROT ROT SWP2r STH2kr SWP2r ++ STA - INCR - LTHk ,&loop JCN - POP2 - POP2r POP2r - -RTN - -@redraw ( -- ) - - ;draw-toolview JSR2 - ;draw-blendview JSR2 - ;draw-colorview JSR2 - ;draw-dataview JSR2 - ;draw-preview JSR2 - ;draw-tileview JSR2 - ;draw-zoomview JSR2 - -RTN - -@draw-tileview ( -- ) - - .settings/zoom LDZ ;draw-tileview-zoom JCN2 - - #00 VER - &ver - OVR DUP #08 * TOS .tileview/y1 LDZ2 ++ .Screen/y DEO2 STH - #00 HOR - &hor - OVR DUP #08 * TOS .tileview/x1 LDZ2 ++ .Screen/x DEO2 STHkr - TOS ROT TOS SWP2 - HOR TOS ** ++ #0010 ** - BANK ++ [ DUP2 ] .Screen/addr DEO2 - .settings/focus LDZ2 == ( TODO: Highlight full range ) - .settings/blending LDZ + - .settings/depth LDZ #20 * + - #20 + .Screen/color DEO - INCR - LTHk ,&hor JCN - POP2 - POPr - INCR - LTHk ,&ver JCN - POP2 - -RTN - -@draw-tileview-zoom ( -- ) - - ( find focus ) GET-POSITION STH2 STH2 - ;pixel-icn .Screen/addr DEO2 - #00 VER - &ver - OVR #08 * TOS .tileview/y1 LDZ2 ++ .Screen/y DEO2 - #00 HOR - &hor - OVR #08 * TOS .tileview/x1 LDZ2 ++ .Screen/x DEO2 - ( get pixel offset ) GET-ITERATORS SWP TOS ROT TOS - ( add focus ) STH2kr SWP2r STH2kr SWP2r ADD-POSITIONS - ,get-pixel JSR #20 + .Screen/color DEO - INCR - LTHk ,&hor JCN - POP2 - INCR - LTHk ,&ver JCN - POP2 - POP2r POP2r - -RTN - -@get-pixel ( x* y* -- color ) - - ( channel 1 ) - OVR2 SWP2 ,get-addr JSR [ STH2k ] LDA - ROT ROT TOB MOD8 [ STHk ] - #07 SWP - SFT #01 AND - ( channel 2 ) - [ STHr ] [ STH2r ] #0008 ++ LDA SWP - #07 SWP - SFT #01 AND - #02 * - + - -RTN - -@get-addr ( x* y* -- addr* ) - - ( get row ) - DUP2 #0008 MOD2 - ( get tile ) - SWP2 #0008 // WIDTH #0002 ** ** ++ - SWP2 STEP8 #0002 ** ++ - BANK ++ - -RTN - -@put-pixel ( x* y* color -- ) - - STH - OVR2 SWP2 ,get-addr JSR - ( ch1 ) - OVR2 OVR2 - STHkr #00 ,toggle-pixel JSR - ( ch2 ) - #0008 ++ - STHr #01 ,toggle-pixel JSR - -RTN - -@toggle-pixel ( x* addr* color* -- ) - - STH2 - DUP2 LDA - STH SWP2 TOB - STHr SWP - STH2r SFT #01 AND ,&do-set JCN - ( mask ) #01 #07 ROT MOD8 - SFL #ff EOR AND - ( save ) ROT ROT STA - RTN - &do-set - ( mask ) #01 #07 ROT MOD8 - SFL ORA - ( save ) ROT ROT STA - -RTN - -@get-tile-addr ( x* y* -- addr* ) - - STEP8 WIDTH ** #0004 // SWP2 - STEP8 #0002 ** ++ - BANK ++ - -RTN - -@draw-toolview ( -- ) - - .toolview/y1 LDZ2 .Screen/y DEO2 - .toolview/x1 LDZ2 .Screen/x DEO2 - - ( colors ) - ;circle-icns [ .settings/color LDZ #01 = TOS #0008 ** ] ++ .Screen/addr DEO2 - #21 .Screen/color DEO - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ;circle-icns [ .settings/color LDZ #02 = TOS #0008 ** ] ++ .Screen/addr DEO2 - #22 .Screen/color DEO - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ;circle-icns [ .settings/color LDZ #03 = TOS #0008 ** ] ++ .Screen/addr DEO2 - #23 .Screen/color DEO - - ( tools ) - .Screen/x DEI2 #0010 ++ .Screen/x DEO2 - ;brush-icn .Screen/addr DEO2 - #21 .settings/tool LDZ #00 = + .Screen/color DEO - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ;tool-selector .Screen/addr DEO2 - #21 .settings/tool LDZ #01 = + .Screen/color DEO - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ;tool-hand .Screen/addr DEO2 - #21 .settings/tool LDZ #02 = + .Screen/color DEO - - ( misc ) - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ;zoom-icns [ .settings/zoom LDZ TOS #0008 ** ++ ] .Screen/addr DEO2 - #21 .Screen/color DEO - - ( file i/o ) - .toolview/x2 LDZ2 #0008 -- .Screen/x DEO2 - ;save-icn .Screen/addr DEO2 - #21 .Screen/color DEO - .Screen/x DEI2 #0010 -- .Screen/x DEO2 - ;load-icn .Screen/addr DEO2 - #21 .Screen/color DEO - .Screen/x DEI2 #0008 -- .Screen/x DEO2 - ;make-icn .Screen/addr DEO2 - #21 .Screen/color DEO - - ( filepath ) - #23 ;draw-filepath JSR2 - -RTN - -@draw-blendview ( -- ) - - ( value ) - .blendview/x1 LDZ2 .Screen/x DEO2 - .blendview/y2 LDZ2 #0001 ++ .Screen/y DEO2 - ( get blending ) .settings/blending LDZ - ( get depth ) .settings/depth LDZ #20 * - ( draw ) #20 + + #21 ;draw-byte JSR2 - - .settings/focus LDZ2 .Screen/addr DEO2 - #00 #10 - &loop - OVR #04 MOD #00 SWP #0008 ** .blendview/x1 LDZ2 ++ .Screen/x DEO2 - OVR #04 / #00 SWP #0008 ** .blendview/y1 LDZ2 ++ .Screen/y DEO2 - #20 .Screen/color DEO - OVR #20 + .settings/depth LDZ #20 * + .Screen/color DEO - INCR - LTHk ,&loop JCN - POP2 - -RTN - -@draw-filepath ( color -- ) - - STH - .toolview/x1 LDZ2 #0048 ++ .Screen/x DEO2 - .toolview/y1 LDZ2 .Screen/y DEO2 - ;path/name - &loop - DUP2 LDA DUP #00 ! #20 * - TOS #0008 ** ;font ++ .Screen/addr DEO2 - STHkr .Screen/color DEO - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - #0001 ++ - LDAk #00 ! ,&loop JCN - POP2 - POPr - ( clear last ) - #20 .Screen/color DEO - -RTN - -@draw-preview ( -- ) - - ( value ) - .preview/x1 LDZ2 .Screen/x DEO2 - .preview/y2 LDZ2 #0001 ++ .Screen/y DEO2 - .settings/ratio LDZ #22 ;draw-byte JSR2 - - ( stash address ) - .settings/focus LDZ2 STH2k .Screen/addr DEO2 - #00 #04 - &ver - OVR #08 * TOS .preview/y1 LDZ2 ++ .Screen/y DEO2 - #00 #04 - &hor - OVR #08 * TOS .preview/x1 LDZ2 ++ .Screen/x DEO2 - ( get x,y ) - GET-ITERATORS - ( check if within ratio ) - .settings/ratio LDZ #0f AND < STH - .settings/ratio LDZ #04 SFT < STHr - #0101 !! ,&outside JCN - ( get tile ) STH2kr .Screen/addr DEO2 - ( get blending ) .settings/blending LDZ - ( get depth ) .settings/depth LDZ #20 * - ( draw ) #20 + + .Screen/color DEO - ( incr ) STH2r #0008 [ .settings/depth LDZ #08 * TOS ++ ] ++ STH2 - ,&resume JMP - &outside - ;halftone-icn .Screen/addr DEO2 - #23 .Screen/color DEO - &resume - ( incr ) INCR - LTHk ,&hor JCN - POP2 - ( incr ) INCR - LTHk ;&ver JCN2 - POP2 - POP2r - -RTN - -@draw-colorview ( -- ) - - .colorview/y2 LDZ2 #0001 ++ .Screen/y DEO2 - .colorview/x1 LDZ2 .Screen/x DEO2 - ;font-hex [ .System/r GET-COLOR ] TOS #0008 ** ++ .Screen/addr DEO2 - #20 .settings/color LDZ + .Screen/color DEO - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ;font-hex [ .System/g GET-COLOR ] TOS #0008 ** ++ .Screen/addr DEO2 - #20 .settings/color LDZ + .Screen/color DEO - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ;font-hex [ .System/b GET-COLOR ] TOS #0008 ** ++ .Screen/addr DEO2 - #20 .settings/color LDZ + .Screen/color DEO - - .colorview/x1 LDZ2 .colorview/y1 LDZ2 - [ .System/r GET-COLOR ] ,draw-slider JSR - .colorview/x1 LDZ2 .colorview/y1 LDZ2 #0008 ++ - [ .System/g GET-COLOR ] ,draw-slider JSR - .colorview/x1 LDZ2 .colorview/y1 LDZ2 #0010 ++ - [ .System/b GET-COLOR ] ,draw-slider JSR - -RTN - -@draw-slider ( x* y* value -- ) - - STH - .Screen/y DEO2 - .Screen/x DEO2 - #00 #10 - &loop - OVR STHkr > #08 * TOS ;slider-icns ++ .Screen/addr DEO2 - #22 .Screen/color DEO - .Screen/x DEI2 #0002 ++ .Screen/x DEO2 - INCR - LTHk ,&loop JCN - POP2 - POPr - -RTN - -@draw-dataview ( -- ) - - ( position ) - .dataview/x1 LDZ2 .Screen/x DEO2 - .dataview/y2 LDZ2 #0001 ++ .Screen/y DEO2 - .settings/focus LDZ2 BANK -- #22 ;draw-short JSR2 - - ( depth1 ) - #00 #04 - &loop - .dataview/x1 LDZ2 .Screen/x DEO2 - OVR #08 * TOS .dataview/y1 LDZ2 ++ .Screen/y DEO2 - OVR #02 * TOS .settings/focus LDZ2 ++ LDA2 #23 ;draw-short JSR2 - .dataview/x1 LDZ2 #0020 ++ .Screen/x DEO2 - OVR #02 * TOS .settings/focus LDZ2 ++ #0008 ++ LDA2 #23 ;draw-short JSR2 - INCR - LTHk ,&loop JCN - POP2 - -RTN - -@draw-zoomview ( -- ) - - ;bigpixel-icn .Screen/addr DEO2 - #00 #08 - &ver - OVR #04 * TOS .zoomview/y1 LDZ2 ++ .Screen/y DEO2 - #00 #08 - &hor - OVR #04 * TOS .zoomview/x1 LDZ2 ++ .Screen/x DEO2 - ( get pixel ) - GET-ITERATORS - ( ch 1 ) - TOS .settings/focus LDZ2 ++ [ STH2k ] LDA - SWP [ STHk ] #07 SWP - SFT #01 AND - ( ch2 ) - [ STHr ] [ STH2r ] #0008 ++ LDA SWP - #07 SWP - SFT #01 AND - #02 * + - #20 + .Screen/color DEO - INCR - LTHk ,&hor JCN - POP2 - INCR - LTHk ,&ver JCN - POP2 - - ( effects ) - .zoomview/y1 LDZ2 #0021 ++ .Screen/y DEO2 - .zoomview/x1 LDZ2 .Screen/x DEO2 - ;opshift-icn .Screen/addr DEO2 - #21 .Screen/color DEO - - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ;oproll-icn .Screen/addr DEO2 - #21 .Screen/color DEO - -RTN - -@draw-cursor ( -- ) - - ( clear last cursor ) - .pointer/x LDZ2 .Screen/x DEO2 - .pointer/y LDZ2 .Screen/y DEO2 - #30 .Screen/color DEO - - ( record mouse positions ) - .Mouse/x DEI2 .pointer/x STZ2 - .Mouse/y DEI2 .pointer/y STZ2 - - ( draw new cursor ) - .pointer/x LDZ2 .Screen/x DEO2 - .pointer/y LDZ2 .Screen/y DEO2 - ;brush-icn #00 .settings/tool LDZ #08 * ++ .Screen/addr DEO2 - #32 .Mouse/state DEI #00 ! + .Screen/color DEO - -RTN - -@draw-byte ( byte color -- ) - - STH STH - ;font-hex #00 STHkr #f0 AND #04 SFT #08 * ++ .Screen/addr DEO2 - ( draw ) OVRr STHr .Screen/color DEO - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ;font-hex #00 STHr #0f AND #08 * ++ .Screen/addr DEO2 - ( draw ) STHr .Screen/color DEO - -RTN - -@draw-short ( short* color -- ) - - STH SWP - DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 - ( draw ) STHkr .Screen/color DEO - #0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ( draw ) STHkr .Screen/color DEO - DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ( draw ) STHkr .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 - -@new-file ( default* -- ) - - BANK LENGTH ;op-clear JSR2 - STH2 - #00 #0c - &loop - OVR DUP TOS STH2kr ++ LDA - SWP .path/name + STZ - INCR - LTHk ,&loop JCN - .path/length STZ POP - POP2r - ;load-file JSR2 - -RTN - -@load-file ( -- ) - - BANK LENGTH ;op-clear JSR2 - ;path/name .File/name DEO2 - #2000 .File/length DEO2 - BANK .File/load DEO2 - -RTN - -@save-file ( -- ) - - ;path/name .File/name DEO2 - #2000 .File/length DEO2 - BANK .File/save DEO2 - -RTN - -@within-rect ( x* y* rect -- flag ) - - STH - ( y < rect.y1 ) DUP2 STHkr #02 ADD LDZ2 LTH2 ,&skip JCN - ( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 GTH2 ,&skip JCN - SWP2 - ( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ,&skip JCN - ( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ,&skip JCN - POP2 POP2 POPr - #01 -RTN - &skip - POP2 POP2 POPr - #00 - -RTN - -@brush-icn 8040 e070 381c 0c00 -@tool-selector 80c0 e0f0 f8e0 1000 -@tool-hand 2020 20b8 7c7c 3838 -@halftone-icn aa55 aa55 aa55 aa55 -@pixel-icn 7cfe fefe fefe 7c00 -@bigpixel-icn f0f0 f0f0 0000 0000 - -@opshift-icn 0010 387c fe10 1000 -@oproll-icn 0008 0c0e 7f0e 0c08 - -@save-icn 1054 28c6 2854 1000 -@make-icn fe82 8282 848a f400 -@load-icn feaa d6aa d4aa f400 - -@untitled-txt "untitled.chr $1 -@blank-txt "blank.chr $1 - -@slider-icns - f0f0 f0f0 f0f0 f000 ( full ) - 50a0 50a0 50a0 5000 ( empty ) -@circle-icns - 3844 8282 8244 3800 ( full ) - 387c fefe fe7c 3800 ( line ) -@zoom-icns - 3048 8484 4834 0200 ( in ) - 3245 8284 4834 0200 ( out ) -@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 -@font ( specter8-frag font ) - 0000 0000 0000 0000 0008 0808 0800 0800 - 0014 1400 0000 0000 0024 7e24 247e 2400 - 0008 1e28 1c0a 3c08 0000 2204 0810 2200 - 0030 4832 4c44 3a00 0008 1000 0000 0000 - 0004 0808 0808 0400 0020 1010 1010 2000 - 0000 2214 0814 2200 0000 0808 3e08 0800 - 0000 0000 0000 0810 0000 0000 3e00 0000 - 0000 0000 0000 0800 0000 0204 0810 2000 - 003c 464a 5262 3c00 0018 0808 0808 1c00 - 003c 4202 3c40 7e00 003c 421c 0242 3c00 - 000c 1424 447e 0400 007e 407c 0242 3c00 - 003c 407c 4242 3c00 007e 0204 0810 1000 - 003c 423c 4242 3c00 003c 4242 3e02 3c00 - 0000 0010 0000 1000 0000 1000 0010 1020 - 0000 0810 2010 0800 0000 003e 003e 0000 - 0000 1008 0408 1000 003c 420c 1000 1000 - 003c 4232 4a42 3c00 003c 4242 7e42 4200 - 007c 427c 4242 7c00 003c 4240 4042 3c00 - 007c 4242 4242 7c00 007e 4078 4040 7e00 - 007e 4078 4040 4000 003c 4240 4642 3c00 - 0042 427e 4242 4200 001c 0808 0808 1c00 - 007e 0202 0242 3c00 0042 4478 4442 4200 - 0040 4040 4040 7e00 0042 665a 4242 4200 - 0042 6252 4a46 4200 003c 4242 4242 3c00 - 007c 4242 7c40 4000 003c 4242 4244 3a00 - 007c 4242 7c44 4200 003e 403c 0242 3c00 - 007e 0808 0808 1000 0042 4242 4244 3a00 - 0042 4242 4224 1800 0042 4242 5a66 4200 - 0042 423c 4242 4200 0042 423e 0242 3c00 - 007e 020c 3040 7e00 000c 0808 0808 0c00 - 0040 2010 0804 0200 0030 1010 1010 3000 - 0008 1400 0000 0000 0000 0000 0000 7e00 - 0008 0400 0000 0000 0000 3c02 3e42 3a00 - 0040 407c 4242 7c00 0000 3c42 4042 3c00 - 0002 023e 4242 3e00 0000 3c42 7e40 3e00 - 0000 3e40 7840 4000 0000 3c42 3e02 3c00 - 0040 405c 6242 4200 0008 0018 0808 0400 - 0008 0018 0808 4830 0040 4244 7844 4200 - 0010 1010 1010 0c00 0000 6c52 5252 5200 - 0000 5c62 4242 4200 0000 3c42 4242 3c00 - 0000 7c42 427c 4040 0000 3e42 423e 0202 - 0000 5c62 4040 4000 0000 3e40 3c02 7c00 - 0008 7e08 0808 1000 0000 4242 4244 3a00 - 0000 4242 4224 1800 0000 5252 5252 2e00 - 0000 4224 1824 4200 0000 4242 3e02 7c00 - 0000 7e02 3c40 7e00 000c 0810 1008 0c00 - 0008 0808 0808 0800 0030 1008 0810 3000 - 0000 0032 4c00 0000 3c42 99a1 a199 423c