mirror of https://git.sr.ht/~rabbits/nasu
3 changed files with 900 additions and 1 deletions
@ -0,0 +1,892 @@
|
||||
( |
||||
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 ++ SWP2 #8000 ++ >> } |
||||
%GTS2 { #8000 ++ SWP2 #8000 ++ << } |
||||
|
||||
%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 -- ) |
||||
|
||||
%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 -- |
||||
.Screen/height DEI2 #0001 SFT2 .frame/height LDZ2 #0001 SFT2 -- #0010 ++ |
||||
.frame/width LDZ2 .frame/height LDZ2 |
||||
SIZE-TO-RECT ;frame SET-RECT |
||||
|
||||
.frame/x1 LDZ2 #0010 ++ .bankview/x STZ2 |
||||
.frame/y1 LDZ2 .bankview/y STZ2 |
||||
BANK .settings/page STZ2 |
||||
|
||||
.frame/x2 LDZ2 #0098 -- .tileview/x STZ2 |
||||
.frame/y1 LDZ2 .tileview/y STZ2 |
||||
BANK #0448 ++ .settings/tile STZ2 |
||||
|
||||
.frame/x2 LDZ2 #0010 -- .frame/y1 LDZ2 #0010 #0080 SIZE-TO-RECT ;dataview SET-RECT |
||||
.frame/x1 LDZ2 #0010 ++ .frame/y2 LDZ2 #0020 -- #0020 #0020 SIZE-TO-RECT ;blendview SET-RECT |
||||
.frame/x1 LDZ2 #0060 ++ .frame/y2 LDZ2 #0020 -- #0020 #0020 SIZE-TO-RECT ;colorview SET-RECT |
||||
.frame/x1 LDZ2 #0038 ++ .frame/y2 LDZ2 #0020 -- #0020 #0020 SIZE-TO-RECT ;preview SET-RECT |
||||
.frame/x2 LDZ2 #0098 -- .frame/y1 LDZ2 #0080 #0080 SIZE-TO-RECT ;editview SET-RECT |
||||
|
||||
( editview grid ) |
||||
.editview/x1 LDZ2 DUP2 #0080 ++ .editview/y1 LDZ2 #0020 ++ #03 ;line-hor JSR2 |
||||
.editview/x1 LDZ2 DUP2 #0080 ++ .editview/y1 LDZ2 #0040 ++ #03 ;line-hor JSR2 |
||||
.editview/x1 LDZ2 DUP2 #0080 ++ .editview/y1 LDZ2 #0060 ++ #03 ;line-hor JSR2 |
||||
.editview/x1 LDZ2 #0020 ++ .editview/y1 LDZ2 DUP2 #0080 ++ #03 ;line-ver JSR2 |
||||
.editview/x1 LDZ2 #0040 ++ .editview/y1 LDZ2 DUP2 #0080 ++ #03 ;line-ver JSR2 |
||||
.editview/x1 LDZ2 #0060 ++ .editview/y1 LDZ2 DUP2 #0080 ++ #03 ;line-ver JSR2 |
||||
|
||||
.editview/x1 LDZ2 #0002 -- .editview/y1 LDZ2 #0002 -- .editview/x2 LDZ2 #0001 ++ .editview/y2 LDZ2 #0001 ++ #03 ;line-rect JSR2 |
||||
|
||||
#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 ++ .File/load DEO2 |
||||
;filepath3 .File/name DEO2 #1000 .File/length DEO2 BANK #1000 ++ .File/load DEO2 |
||||
;filepath4 .File/name DEO2 #1000 .File/length DEO2 BANK #2000 ++ .File/load DEO2 |
||||
;filepath5 .File/name DEO2 #1000 .File/length DEO2 BANK #2800 ++ .File/load DEO2 |
||||
;filepath6 .File/name DEO2 #1000 .File/length DEO2 BANK #3800 ++ .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 -- .settings/page STZ2 |
||||
;redraw JSR2 |
||||
BRK &no-pageup |
||||
|
||||
.Controller/button DEI #21 NEQ ,&no-pagedown JCN .settings/page LDZ2 |
||||
#0800 ++ .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 + .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 + .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 -- -- #0008 // #0000 !! ;&no-toolbar-click JCN2 |
||||
( brush ) |
||||
.Mouse/x DEI2 .bankview/x LDZ2 -- #0008 // #000d << ,&no-brush-click JCN |
||||
.Mouse/x DEI2 .bankview/x LDZ2 -- #0008 // #000f >> ,&no-brush-click JCN |
||||
( select ) .mouse/x LDZ2 .bankview/x LDZ2 -- #0008 // #000d -- TOB .bankview/mode STZ |
||||
&no-brush-click |
||||
.Mouse/x DEI2 .bankview/x LDZ2 -- #0008 // #0005 !! ,&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 >> .Mouse/x DEI2 .bankview/x LDZ2 #0080 ++ << #0101 == |
||||
.Mouse/y DEI2 .bankview/y LDZ2 >> .Mouse/y DEI2 .bankview/y LDZ2 #0080 ++ << #0101 == |
||||
#0101 == ;on-touch-bankview JCN2 |
||||
|
||||
( tileview ) |
||||
.Mouse/x DEI2 .tileview/x LDZ2 >> .Mouse/x DEI2 .tileview/x LDZ2 #0080 ++ << #0101 == |
||||
.Mouse/y DEI2 .tileview/y LDZ2 >> .Mouse/y DEI2 .tileview/y LDZ2 #0080 ++ << #0101 == |
||||
#0101 == ;on-touch-tileview JCN2 |
||||
|
||||
( editview ) |
||||
.Mouse/x DEI2 DUP2 .editview/x1 LDZ2 >> ROT ROT .editview/x2 LDZ2 << #0101 == |
||||
.Mouse/y DEI2 DUP2 .editview/y1 LDZ2 >> ROT ROT .editview/y2 LDZ2 << #0101 == |
||||
#0101 == ;on-touch-editview JCN2 |
||||
|
||||
( dataview ) |
||||
.Mouse/x DEI2 DUP2 .dataview/x1 LDZ2 >> ROT ROT .dataview/x2 LDZ2 << #0101 == |
||||
.Mouse/y DEI2 DUP2 .dataview/y1 LDZ2 >> ROT ROT .dataview/y2 LDZ2 << #0101 == |
||||
#0101 == ;on-touch-dataview JCN2 |
||||
|
||||
( blendbiew ) |
||||
.Mouse/x DEI2 DUP2 .blendview/x1 LDZ2 >> ROT ROT .blendview/x2 LDZ2 << #0101 == |
||||
.Mouse/y DEI2 DUP2 .blendview/y1 LDZ2 >> ROT ROT .blendview/y2 LDZ2 << #0101 == |
||||
#0101 == ;on-touch-blendview JCN2 |
||||
|
||||
( colorview ) |
||||
.Mouse/x DEI2 DUP2 .colorview/x1 LDZ2 >> ROT ROT .colorview/x2 LDZ2 << #0101 == |
||||
.Mouse/y DEI2 DUP2 .colorview/y1 LDZ2 >> ROT ROT .colorview/y2 LDZ2 << #0101 == |
||||
#0101 == ;on-touch-colorview JCN2 |
||||
|
||||
( preview ) |
||||
.Mouse/x DEI2 DUP2 .preview/x1 LDZ2 >> ROT ROT .preview/x2 LDZ2 << #0101 == |
||||
.Mouse/y DEI2 DUP2 .preview/y1 LDZ2 >> ROT ROT .preview/y2 LDZ2 << #0101 == |
||||
#0101 == ;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 + LDA |
||||
( get touch addr ) |
||||
.Mouse/x DEI2 .bankview/x LDZ2 -- STEP8 |
||||
.Mouse/y DEI2 .bankview/y LDZ2 -- STEP8 #0010 ** ++ |
||||
( 2-bit mode ) #00 .settings/depth LDZ #01 + ** |
||||
.settings/page LDZ2 ++ #00 .i LDZ ++ STA |
||||
( incr ) .i LDZ #01 + .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 -- STEP8 |
||||
.Mouse/y DEI2 .bankview/y LDZ2 -- STEP8 #0010 ** ++ |
||||
( 2-bit mode ) #00 .settings/depth LDZ #01 + ** |
||||
.settings/page LDZ2 ++ #00 .i LDZ ++ STA |
||||
( incr ) .i LDZ #01 + .i STZ |
||||
.i LDZ #08 LTH ,&erase-loop JCN |
||||
;redraw JSR2 BRK |
||||
¬-erase-mode |
||||
|
||||
( select ) |
||||
|
||||
.Mouse/x DEI2 .bankview/x LDZ2 -- #0008 // TOB |
||||
.Mouse/y DEI2 .bankview/y LDZ2 -- #0008 // TOB #40 SFT + |
||||
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 -- STEP8 TOB #60 EQU ,&skip JCN BRK &skip |
||||
.Mouse/x DEI2 .dataview/x1 LDZ2 -- #0008 // 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 -- #0008 // TOB |
||||
.Mouse/y DEI2 .blendview/y1 LDZ2 -- #0008 // TOB #04 MUL + |
||||
.settings/blending STZ |
||||
( release ) #00 .Mouse/state DEO |
||||
;redraw JSR2 |
||||
|
||||
BRK |
||||
|
||||
@on-touch-colorview ( -> ) |
||||
|
||||
( channel ) .Mouse/y DEI2 .colorview/y1 LDZ2 -- #0008 // TOB STH |
||||
( rgb ) .Mouse/x DEI2 .colorview/x1 LDZ2 -- #0008 // 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 -- #0008 // TOB |
||||
( x ) .Mouse/x DEI2 .preview/x1 LDZ2 -- #0008 // TOB |
||||
|
||||
#40 SFT + #11 + |
||||
.settings/ratio STZ |
||||
|
||||
( release ) #00 .Mouse/state DEO |
||||
|
||||
( clear editview ) |
||||
.editview/x1 LDZ2 .editview/y1 LDZ2 .editview/x2 LDZ2 .editview/y2 LDZ2 #00 ;fill-rect JSR2 |
||||
|
||||
;redraw JSR2 |
||||
|
||||
BRK |
||||
|
||||
@set-color ( color rgb -- ) |
||||
|
||||
STH |
||||
DUP #00 NEQ ,&no-red0 JCN |
||||
DUPr STHr DEI DUP #04 SFT #01 + |
||||
( add/sub ) .Mouse/state DEI #10 EQU #fe MUL + |
||||
( resume ) #40 SFT SWP #0f AND + DUPr STHr DEO |
||||
&no-red0 |
||||
DUP #01 NEQ ,&no-red1 JCN |
||||
DUPr STHr DEI DUP #0f AND #01 + |
||||
( add/sub ) .Mouse/state DEI #10 EQU #fe MUL + |
||||
( resume ) #0f AND SWP #f0 AND + DUPr STHr DEO |
||||
&no-red1 |
||||
DUP #02 NEQ ,&no-red2 JCN |
||||
DUPr STHr #01 + DEI DUP #04 SFT #01 + |
||||
( add/sub ) .Mouse/state DEI #10 EQU #fe MUL + |
||||
( resume ) #40 SFT SWP #0f AND + DUPr STHr #01 + DEO |
||||
&no-red2 |
||||
DUP #03 NEQ ,&no-red3 JCN |
||||
DUPr STHr #01 + DEI DUP #0f AND #01 + |
||||
( add/sub ) .Mouse/state DEI #10 EQU #fe MUL + |
||||
( resume ) #0f AND SWP #f0 AND + DUPr STHr #01 + 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 ** |
||||
( x ) ROT #10 MOD #00 SWP #0008 ** ++ |
||||
( 2-bit mode ) #00 .settings/depth LDZ #01 + ** |
||||
( offset ) .settings/page LDZ2 ++ .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 ++ LDA .settings/tile LDZ2 STA |
||||
.settings/tile LDZ2 #0002 ++ LDA .settings/tile LDZ2 #0001 ++ STA |
||||
.settings/tile LDZ2 #0003 ++ LDA .settings/tile LDZ2 #0002 ++ STA |
||||
.settings/tile LDZ2 #0004 ++ LDA .settings/tile LDZ2 #0003 ++ STA |
||||
.settings/tile LDZ2 #0005 ++ LDA .settings/tile LDZ2 #0004 ++ STA |
||||
.settings/tile LDZ2 #0006 ++ LDA .settings/tile LDZ2 #0005 ++ STA |
||||
.settings/tile LDZ2 #0007 ++ LDA .settings/tile LDZ2 #0006 ++ STA |
||||
.settings/tile LDZ2 #0007 ++ STA |
||||
|
||||
RTN |
||||
|
||||
@op_shiftdown ( -- ) |
||||
|
||||
.settings/tile LDZ2 #0007 ++ LDA |
||||
.settings/tile LDZ2 #0006 ++ LDA .settings/tile LDZ2 #0007 ++ STA |
||||
.settings/tile LDZ2 #0005 ++ LDA .settings/tile LDZ2 #0006 ++ STA |
||||
.settings/tile LDZ2 #0004 ++ LDA .settings/tile LDZ2 #0005 ++ STA |
||||
.settings/tile LDZ2 #0003 ++ LDA .settings/tile LDZ2 #0004 ++ STA |
||||
.settings/tile LDZ2 #0002 ++ LDA .settings/tile LDZ2 #0003 ++ STA |
||||
.settings/tile LDZ2 #0001 ++ LDA .settings/tile LDZ2 #0002 ++ STA |
||||
.settings/tile LDZ2 LDA .settings/tile LDZ2 #0001 ++ 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 -- .bankview/y LDZ2 #0002 -- .bankview/x LDZ2 #0081 ++ .bankview/y LDZ2 #0081 ++ #03 ;line-rect JSR2 |
||||
|
||||
( position ) |
||||
|
||||
.bankview/x LDZ2 .Screen/x DEO2 |
||||
.bankview/y LDZ2 #0010 -- .Screen/y DEO2 |
||||
.settings/page LDZ2 #22 ;draw-short JSR2 |
||||
|
||||
( toolbar ) |
||||
|
||||
.bankview/y LDZ2 #0010 -- .Screen/y DEO2 |
||||
|
||||
.bankview/x LDZ2 #0028 ++ .Screen/x DEO2 |
||||
;depth_icns #00 .settings/depth LDZ #0008 ** ++ .Screen/addr DEO2 |
||||
#23 .Screen/color DEO |
||||
|
||||
.bankview/x LDZ2 #0068 ++ .Screen/x DEO2 |
||||
;tool_selector .Screen/addr DEO2 |
||||
#21 .bankview/mode LDZ #00 EQU + .Screen/color DEO |
||||
|
||||
.Screen/x DEI2 #0008 ++ .Screen/x DEO2 |
||||
;tool_hand .Screen/addr DEO2 |
||||
#21 .bankview/mode LDZ #01 EQU + .Screen/color DEO |
||||
|
||||
.Screen/x DEI2 #0008 ++ .Screen/x DEO2 |
||||
;tool_eraser .Screen/addr DEO2 |
||||
#21 .bankview/mode LDZ #02 EQU + .Screen/color DEO |
||||
|
||||
( guides ) |
||||
|
||||
.bankview/x LDZ2 #0010 -- .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 + .Screen/color DEO |
||||
.Screen/addr DEI2 #0008 ++ .Screen/addr DEO2 |
||||
.Screen/y DEI2 #0008 ++ .Screen/y DEO2 |
||||
SWP #01 + SWP |
||||
DUP2 LTH ,&guides JCN |
||||
POP2 |
||||
|
||||
( draw page ) |
||||
|
||||
( load ) .settings/page LDZ2 .Screen/addr DEO2 |
||||
.bankview/y LDZ2 DUP2 #0080 ++ |
||||
&ver |
||||
( save ) OVR2 .Screen/y DEO2 |
||||
.bankview/x LDZ2 DUP2 #0080 ++ |
||||
&hor |
||||
( save ) OVR2 .Screen/x DEO2 |
||||
( get selected ) .Screen/addr DEI2 .settings/tile LDZ2 == |
||||
( get blending ) .settings/blending LDZ |
||||
( get depth ) .settings/depth LDZ #20 MUL |
||||
( draw ) #20 + + + .Screen/color DEO |
||||
( incr ) SWP2 #0008 ++ SWP2 |
||||
( incr ) .Screen/addr DEI2 #0008 ++ #00 .settings/depth LDZ #0008 ** ++ .Screen/addr DEO2 |
||||
OVR2 OVR2 << ,&hor JCN |
||||
POP2 POP2 |
||||
( incr ) SWP2 #0008 ++ SWP2 |
||||
OVR2 OVR2 << ,&ver JCN |
||||
POP2 POP2 |
||||
|
||||
RTN |
||||
|
||||
@draw-editview ( -- ) |
||||
|
||||
( position ) |
||||
.editview/x1 LDZ2 .Screen/x DEO2 |
||||
.editview/y1 LDZ2 #0010 -- .Screen/y DEO2 |
||||
.settings/tile LDZ2 #22 ;draw-short JSR2 |
||||
|
||||
( tiles ) |
||||
.settings/tile LDZ2 DUP2 STH2 .Screen/addr DEO2 |
||||
#00 #04 |
||||
&ver |
||||
OVR #20 MUL TOS .editview/y1 LDZ2 ++ .Screen/y DEO2 |
||||
#00 #04 |
||||
&hor |
||||
OVR #20 MUL TOS .editview/x1 LDZ2 ++ .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 !! ,&outside JCN |
||||
DUP2r STH2r .Screen/addr DEO2 |
||||
#01 ,draw-tile JSR |
||||
( incr ) STH2r #0008 ++ STH2 |
||||
&outside |
||||
( incr ) SWP #01 + SWP |
||||
DUP2 LTH ,&hor JCN |
||||
POP2 |
||||
( incr ) SWP #01 + SWP |
||||
DUP2 LTH ;&ver JCN2 |
||||
POP2 |
||||
POP2r |
||||
|
||||
RTN |
||||
|
||||
@draw-tile ( color -- ) |
||||
|
||||
STH |
||||
#00 #20 |
||||
&ver |
||||
#00 #20 |
||||
&hor |
||||
OVR #04 MOD #00 EQU ,&skip JCN |
||||
STH2 OVR STH2r ROT #04 MOD #00 EQU ,&skip JCN |
||||
|
||||
( get x,y ) |
||||
SWP2 OVR STH SWP2 OVR STHr |
||||
( get address ) |
||||
.Screen/addr DEI2 |
||||
( after this, +R XY ) |
||||
SWP2 SWP STH |
||||
( got sprite line ) |
||||
#04 DIV TOS ++ LDA |
||||
( get pixel ) |
||||
STHr #04 DIV |
||||
#07 SWP SUB SFT #01 AND |
||||
.Screen/color DEO |
||||
|
||||
&skip |
||||
#0001 .Screen/x DEI2 ++ .Screen/x DEO2 |
||||
( incr ) SWP #01 + SWP |
||||
DUP2 LTH ,&hor JCN |
||||
POP2 |
||||
#0001 .Screen/y DEI2 ++ .Screen/y DEO2 |
||||
.Screen/x DEI2 #0020 -- .Screen/x DEO2 |
||||
( incr ) SWP #01 + SWP |
||||
DUP2 LTH ,&ver JCN |
||||
POP2 |
||||
.Screen/y DEI2 #0020 -- .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 ++ LDA #07 .pt/x LDZ SUB SFT #01 AND ( get bit ) |
||||
#0008 ** ++ .Screen/addr DEO2 ( add *8 ) |
||||
( draw ) #21 .Screen/color DEO |
||||
( incr ) .Screen/x DEI2 #0008 ++ .Screen/x DEO2 |
||||
( incr ) .pt/x LDZ #01 + .pt/x STZ |
||||
.pt/x LDZ #08 LTH ;&hor JCN2 |
||||
( incr ) .Screen/y DEI2 #0008 ++ .Screen/y DEO2 |
||||
( incr ) .pt/y LDZ #01 + .pt/y STZ |
||||
.Screen/x DEI2 #0040 -- .Screen/x DEO2 |
||||
.pt/y LDZ #08 LTH ;&ver JCN2 |
||||
|
||||
RTN |
||||
|
||||
@draw-dataview ( -- ) |
||||
|
||||
( bytes ) |
||||
.tileview/y LDZ2 #0018 ++ .Screen/y DEO2 |
||||
#00 .i STZ |
||||
&bytes |
||||
.tileview/x LDZ2 #0088 ++ .Screen/x DEO2 |
||||
.settings/tile LDZ2 #00 .i LDZ ++ LDA #22 ;draw-byte JSR2 |
||||
( incr ) .i LDZ #01 + .i STZ |
||||
( incr ) .Screen/y DEI2 #0008 ++ .Screen/y DEO2 |
||||
.i LDZ #08 LTH ;&bytes JCN2 |
||||
|
||||
( operations ) |
||||
.Screen/y DEI2 #0008 ++ .Screen/y DEO2 |
||||
;movedown_icn .Screen/addr DEO2 |
||||
#21 .Screen/color DEO |
||||
.Screen/x DEI2 #0008 -- .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 ++ .Screen/x DEO2 |
||||
&tiles-hor |
||||
( draw ) #23 .Screen/color DEO |
||||
( incr ) .Screen/x DEI2 #0008 ++ .Screen/x DEO2 |
||||
( incr ) .Screen/addr DEI2 #0008 ++ .Screen/addr DEO2 |
||||
( incr ) .pt/x LDZ #01 + .pt/x STZ |
||||
.pt/x LDZ #02 LTH ;&tiles-hor JCN2 |
||||
( incr ) .pt/y LDZ #01 + .pt/y STZ |
||||
( incr ) .Screen/y DEI2 #0008 ++ .Screen/y DEO2 |
||||
.pt/y LDZ #02 LTH ;&tiles-ver JCN2 |
||||
|
||||
RTN |
||||
|
||||
@draw-blendview ( -- ) |
||||
|
||||
.settings/tile LDZ2 .Screen/addr DEO2 |
||||
#00 #10 |
||||
&loop |
||||
OVR #04 MOD #00 SWP #0008 ** .blendview/x1 LDZ2 ++ .Screen/x DEO2 |
||||
OVR #04 DIV #00 SWP #0008 ** .blendview/y1 LDZ2 ++ .Screen/y DEO2 |
||||
#20 .Screen/color DEO |
||||
OVR #20 + .settings/depth LDZ #20 MUL + .Screen/color DEO |
||||
SWP #01 + SWP |
||||
DUP2 LTH ,&loop JCN |
||||
POP2 |
||||
.blendview/x1 LDZ2 .Screen/x DEO2 |
||||
.blendview/y2 LDZ2 #0001 ++ .Screen/y DEO2 |
||||
( get blending ) .settings/blending LDZ |
||||
( get depth ) .settings/depth LDZ #20 MUL |
||||
( draw ) #20 + + #21 ;draw-byte JSR2 |
||||
|
||||
RTN |
||||
|
||||
@draw-colorview ( -- ) |
||||
|
||||
.colorview/x1 LDZ2 .Screen/x DEO2 |
||||
;circle_icns .Screen/addr DEO2 |
||||
|
||||
#00 #04 |
||||
&loop |
||||
OVR .settings/brush LDZ EQU #00 SWP #0008 ** ;circle_icns ++ .Screen/addr DEO2 |
||||
OVR .colorview/y1 LDZ2 ROT #00 SWP #0008 ** ++ .Screen/y DEO2 |
||||
OVR #20 + .Screen/color DEO |
||||
SWP #01 + SWP |
||||
DUP2 LTH ,&loop JCN |
||||
POP2 |
||||
|
||||
.colorview/y1 LDZ2 #18 + .Screen/y DEO2 |
||||
.colorview/x1 LDZ2 #08 + .Screen/x DEO2 |
||||
.System/r DEI2 ,&draw-color-code JSR |
||||
.colorview/y1 LDZ2 #18 + .Screen/y DEO2 |
||||
.colorview/x1 LDZ2 #10 + .Screen/x DEO2 |
||||
.System/g DEI2 ,&draw-color-code JSR |
||||
.colorview/y1 LDZ2 #18 + .Screen/y DEO2 |
||||
.colorview/x1 LDZ2 #18 + .Screen/x DEO2 |
||||
.System/b DEI2 ,&draw-color-code JSR |
||||
|
||||
RTN |
||||
|
||||
&draw-color-code ( color* -- ) |
||||
DUP ;font-hex ROT #0f AND #08 MUL #00 SWP ++ .Screen/addr DEO2 |
||||
( draw ) #22 .Screen/color DEO |
||||
.colorview/y1 LDZ2 #10 + .Screen/y DEO2 |
||||
;font-hex ROT #04 SFT #08 MUL #00 SWP ++ .Screen/addr DEO2 |
||||
( draw ) #22 .Screen/color DEO |
||||
.colorview/y1 LDZ2 #08 + .Screen/y DEO2 |
||||
DUP ;font-hex ROT #0f AND #08 MUL #00 SWP ++ .Screen/addr DEO2 |
||||
( draw ) #22 .Screen/color DEO |
||||
.colorview/y1 LDZ2 .Screen/y DEO2 |
||||
;font-hex ROT #04 SFT #08 MUL #00 SWP ++ .Screen/addr DEO2 |
||||
( draw ) #22 .Screen/color DEO |
||||
RTN |
||||
|
||||
RTN |
||||
|
||||
@draw-preview ( -- ) |
||||
|
||||
( stash address ) |
||||
.settings/tile LDZ2 DUP2 STH2 .Screen/addr DEO2 |
||||
#00 #04 |
||||
&ver |
||||
OVR #08 MUL TOS .preview/y1 LDZ2 ++ .Screen/y DEO2 |
||||
#00 #04 |
||||
&hor |
||||
OVR #08 MUL TOS .preview/x1 LDZ2 ++ .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 !! ,&outside JCN |
||||
( get tile ) DUP2r STH2r .Screen/addr DEO2 |
||||
( get blending ) .settings/blending LDZ |
||||
( get depth ) .settings/depth LDZ #20 MUL |
||||
( draw ) #20 + + .Screen/color DEO |
||||
( incr ) STH2r #0008 [ .settings/depth LDZ #08 MUL TOS ++ ] ++ STH2 |
||||
,&resume JMP |
||||
&outside |
||||
;halftone_icn .Screen/addr DEO2 |
||||
#23 .Screen/color DEO |
||||
&resume |
||||
( incr ) SWP #01 + SWP |
||||
DUP2 LTH ,&hor JCN |
||||
POP2 |
||||
( incr ) SWP #01 + SWP |
||||
DUP2 LTH ;&ver JCN2 |
||||
POP2 |
||||
POP2r |
||||
.preview/x1 LDZ2 #0001 -- .Screen/x DEO2 |
||||
.preview/y2 LDZ2 #0001 ++ .Screen/y DEO2 |
||||
.settings/ratio LDZ #23 ;draw-byte JSR2 |
||||
|
||||
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 ++ .Screen/addr DEO2 |
||||
#32 .Mouse/state DEI #00 NEQ + .Screen/color DEO |
||||
|
||||
RTN |
||||
|
||||
@draw-byte ( byte color -- ) |
||||
|
||||
STH STH |
||||
;font-hex #00 DUPr STHr #f0 AND #04 SFT #08 MUL ++ .Screen/addr DEO2 |
||||
( draw ) OVRr STHr .Screen/color DEO |
||||
.Screen/x DEI2 #0008 ++ .Screen/x DEO2 |
||||
;font-hex #00 STHr #0f AND #08 MUL ++ .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 ) 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 ++ 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 ++ SWP2 |
||||
OVR2 OVR2 #0001 ++ LTS2 ,&hor JCN |
||||
POP2 POP2 |
||||
|
||||
RTN |
||||
|
||||
@fill-rect ( x1* y1* x2* y2* color -- ) |
||||
|
||||
.color STZ |
||||
( x1 x2 y1 y2 ) ROT2 SWP2 |
||||
&ver |
||||
( save ) OVR2 .Screen/y DEO2 |
||||
STH2 STH2 OVR2 OVR2 |
||||
&hor |
||||
( save ) OVR2 .Screen/x DEO2 |
||||
( draw ) .color LDZ .Screen/color DEO |
||||
( incr ) SWP2 #0001 ++ SWP2 |
||||
OVR2 OVR2 LTS2 ,&hor JCN |
||||
POP2 POP2 STH2r STH2r |
||||
( incr ) SWP2 #0001 ++ SWP2 |
||||
OVR2 OVR2 LTS2 ,&ver JCN |
||||
POP2 POP2 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 ++ SWP2 |
||||
OVR2 OVR2 << ,&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 ++ SWP2 |
||||
OVR2 OVR2 << ,&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 ] |
||||
|
||||
Loading…
Reference in new issue