~rabbits/nasu

07609bb05c492434fe1c63e4298939eb6d25c67b — neauoire 1 year, 10 months ago a54ad89
Progress on editor
2 files changed, 235 insertions(+), 265 deletions(-)

M example.chr
M nasu.usm
M example.chr => example.chr +0 -0
M nasu.usm => nasu.usm +235 -265
@@ 23,7 23,7 @@
%STEP8 { #0033 SFT2 }

%SFL { #40 SFT SFT }
%MOD { DUP2 DIV MUL SUB }
%MOD { DUP2 / * - }

%TOB { SWP POP } %TOS { #00 SWP }



@@ 33,6 33,9 @@
%LTS2  { #8000 ++ SWP2 #8000 ++ >> }
%GTS2  { #8000 ++ SWP2 #8000 ++ << }

%INCR { SWP #01 + SWP }
%GET-ITERATORS { OVR2 OVR2 POP SWP POP SWP }

%SIZE-TO-RECT {
	STH2 STH2 OVR2 STH2r ++ OVR2 STH2r ++
} ( x y w h -- x1 y1 x2 y2 )


@@ 46,6 49,7 @@
} ( x1 y1 x2 y2 addr -- )

%BANK { #2000 }
%SELECTED-ADDR { .settings/selection LDZ TOS #0010 ** BANK ++ }

( devices )



@@ 66,13 70,13 @@
	&brush $1 
	&page $2 
	&tile $2 
	&ratio $1 ]
	&ratio $1
	&selection $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 ]


@@ 83,7 87,6 @@
@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


@@ 107,24 110,22 @@
	#00a8 .frame/height STZ2
	#01 .settings/brush STZ
	#32 .settings/ratio STZ
	BANK .settings/page STZ2
	BANK #0448 ++ .settings/tile STZ2
	#01 .settings/depth STZ

	.Screen/width DEI2 #0001 SFT2 .frame/width LDZ2 #0001 SFT2 --
	.Screen/height DEI2 #0001 SFT2 .frame/height LDZ2 #0001 SFT2 -- #0010 ++
	.Screen/height DEI2 #0001 SFT2 .frame/height LDZ2 #0001 SFT2 --
	.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/x1 LDZ2 #0010 ++ .frame/y2 LDZ2 #001a -- #0020 #0020 SIZE-TO-RECT ;blendview SET-RECT
	.frame/x1 LDZ2 #0040 ++ .frame/y2 LDZ2 #001a -- #0020 #0020 SIZE-TO-RECT ;preview SET-RECT
	.frame/x1 LDZ2 #0070 ++ .frame/y2 LDZ2 #001a -- #0020 #0020 SIZE-TO-RECT ;colorview SET-RECT
	.frame/x2 LDZ2 #0098 -- .frame/y1 LDZ2 #0080 #0080 SIZE-TO-RECT ;editview SET-RECT

	( editview grid )


@@ 139,14 140,9 @@

	#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
	;filepath1 .File/name DEO2 #1000 .File/length DEO2 BANK .File/load DEO2

	#40 DUP .bankview/selection STZ ;select-tile JSR2
	;redraw JSR2

BRK



@@ 158,38 154,36 @@ BRK

@on-button ( -> )
	
	( skip ) .Controller/button DEI #00 NEQ #01 JCN [ BRK ]
	( skip ) .Controller/button DEI #00 ! #01 JCN [ BRK ]

	.Controller/button DEI #11 NEQ ,&no-pageup JCN .settings/page LDZ2
	.Controller/button DEI #11 ! ,&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
	.Controller/button DEI #21 ! ,&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
		DUP #04 SFT #01 AND #01 ! ,&no-up JCN
			( move ) .bankview/selection LDZ #10 - .bankview/selection STZ &no-up
		DUP #05 SFT #01 AND #01 ! ,&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
		DUP #06 SFT #01 AND #01 ! ,&no-left JCN
			( move ) .bankview/selection LDZ #01 - .bankview/selection STZ &no-left
		DUP #07 SFT #01 AND #01 ! ,&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 ]
	( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]

	( toolbar )
	.Mouse/y DEI2 .bankview/y LDZ2 #0010 -- -- #0008 // #0000 !! ;&no-toolbar-click JCN2


@@ 210,11 204,6 @@ BRK
	.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 ==


@@ 244,45 233,40 @@ BRK

@on-touch-bankview ( -> )
	
	.bankview/mode LDZ #01 NEQ ,&not-copy-mode JCN
		#00 .i STZ
	.bankview/mode LDZ #01 ! ,&not-copy-mode JCN
		#00 #10
		&copy-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 ,&copy-loop JCN
			( from )
			OVR TOS SELECTED-ADDR ++ LDA STH
			( to )
			OVR STHr SWP TOS 
			.Mouse/x DEI2 .bankview/x LDZ2 -- #0008 //
			.Mouse/y DEI2 .bankview/y LDZ2 -- #0008 // #0010 ** ++
			#0010 ** BANK ++ ++ STA
			INCR
			LTHk ,&copy-loop JCN
		POP2
		;redraw JSR2 BRK
	&not-copy-mode

	.bankview/mode LDZ #02 NEQ ,&not-erase-mode JCN
		#00 .i STZ
	.bankview/mode LDZ #02 ! ,&not-erase-mode JCN
		#00 #10
		&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
			OVR #00 SWP TOS 
			.Mouse/x DEI2 .bankview/x LDZ2 -- #0008 //
			.Mouse/y DEI2 .bankview/y LDZ2 -- #0008 // #0010 ** ++
			#0010 ** BANK ++ ++ STA
			INCR
			LTHk ,&erase-loop JCN
		POP2
		;redraw JSR2 BRK
	&not-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 ( -> )
	
	.settings/selection STZ
	;redraw JSR2

BRK



@@ 294,13 278,13 @@ BRK

@on-touch-dataview ( -> )

	.Mouse/y DEI2 .dataview/y1 LDZ2 -- STEP8 TOB #60 EQU ,&skip JCN BRK &skip
	.Mouse/y DEI2 .dataview/y1 LDZ2 -- STEP8 TOB #60 = ,&skip JCN BRK &skip
	.Mouse/x DEI2 .dataview/x1 LDZ2 -- #0008 // TOB
	DUP #00 NEQ ,&no-move-up JCN
	DUP #00 ! ,&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
	DUP #01 ! ,&no-move-down JCN
		;op_shiftdown JSR2
		( release ) #00 .Mouse/state DEO
		;redraw JSR2 POP BRK &no-move-down


@@ 311,7 295,7 @@ BRK
@on-touch-blendview ( -> )

	.Mouse/x DEI2 .blendview/x1 LDZ2 -- #0008 // TOB
	.Mouse/y DEI2 .blendview/y1 LDZ2 -- #0008 // TOB #04 MUL +
	.Mouse/y DEI2 .blendview/y1 LDZ2 -- #0008 // TOB #04 * +
	.settings/blending STZ
	( release ) #00 .Mouse/state DEO
	;redraw JSR2


@@ 322,14 306,14 @@ BRK

	( 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
	DUP #00 ! ,&no-brush JCN
		STHkr .settings/brush STZ &no-brush
	DUP #01 ! ,&no-red JCN
		STHkr .System/r ;set-color JSR2 &no-red
	DUP #02 ! ,&no-green JCN
		STHkr .System/g ;set-color JSR2 &no-green
	DUP #03 ! ,&no-blue JCN
		STHkr .System/b ;set-color JSR2 &no-blue
	POP POPr
	( release ) #00 .Mouse/state DEO
	;redraw JSR2


@@ 349,6 333,14 @@ BRK
	( clear editview )
	.editview/x1 LDZ2 .editview/y1 LDZ2 .editview/x2 LDZ2 .editview/y2 LDZ2 #00 ;fill-rect JSR2

	( 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

	;redraw JSR2

BRK


@@ 356,47 348,35 @@ 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
	DUP #00 ! ,&no-red0 JCN
		STHkr DEI DUP #04 SFT #01 +
		( add/sub ) .Mouse/state DEI #10 = #fe * +
		( resume ) #40 SFT SWP #0f AND + STHkr 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
	DUP #01 ! ,&no-red1 JCN
		STHkr DEI DUP #0f AND #01 +
		( add/sub ) .Mouse/state DEI #10 = #fe * +
		( resume ) #0f AND SWP #f0 AND + STHkr 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
	DUP #02 ! ,&no-red2 JCN
		STHkr #01 + DEI DUP #04 SFT #01 +
		( add/sub ) .Mouse/state DEI #10 = #fe * +
		( resume ) #40 SFT SWP #0f AND + STHkr #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
	DUP #03 ! ,&no-red3 JCN
		STHkr #01 + DEI DUP #0f AND #01 +
		( add/sub ) .Mouse/state DEI #10 = #fe * +
		( resume ) #0f AND SWP #f0 AND + STHkr #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
	.settings/depth LDZ #00 = .settings/depth STZ

RTN



@@ 431,7 411,7 @@ RTN
@redraw ( -- )
	
	;draw-bankview JSR2
	;draw-editview JSR2
	;draw-editview JSR2 
	;draw-blendview JSR2
	;draw-colorview JSR2
	;draw-dataview JSR2


@@ 447,7 427,7 @@ RTN

	.bankview/x LDZ2 .Screen/x DEO2
	.bankview/y LDZ2 #0010 -- .Screen/y DEO2
	.settings/page LDZ2 #22 ;draw-short JSR2
	.settings/selection LDZ #22 ;draw-byte JSR2

	( toolbar )



@@ 459,83 439,73 @@ RTN

	.bankview/x LDZ2 #0068 ++ .Screen/x DEO2
	;tool_selector .Screen/addr DEO2
	#21 .bankview/mode LDZ #00 EQU + .Screen/color DEO
	#21 .bankview/mode LDZ #00 = + .Screen/color DEO

	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
	;tool_hand .Screen/addr DEO2
	#21 .bankview/mode LDZ #01 EQU + .Screen/color DEO
	#21 .bankview/mode LDZ #01 = + .Screen/color DEO

	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
	;tool_eraser .Screen/addr DEO2
	#21 .bankview/mode LDZ #02 EQU + .Screen/color DEO
	#21 .bankview/mode LDZ #02 = + .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
		( draw ) OVR .settings/selection LDZ #04 SFT = #21 + .Screen/color DEO
		.Screen/addr DEI2 #0008 ++ .Screen/addr DEO2
		.Screen/y DEI2 #0008 ++ .Screen/y DEO2
		SWP #01 + SWP
		DUP2 LTH ,&guides JCN
		INCR
		LTHk ,&guides JCN
	POP2

	( draw page )

	( load ) .settings/page LDZ2 .Screen/addr DEO2
	.bankview/y LDZ2 DUP2 #0080 ++
	#00 #10
	&ver
		( save ) OVR2 .Screen/y DEO2
		.bankview/x LDZ2 DUP2 #0080 ++
		OVR #08 * TOS .bankview/y LDZ2 ++ .Screen/y DEO2
		#00 #10
		&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

			OVR #08 * TOS .bankview/x LDZ2 ++ .Screen/x DEO2
			GET-ITERATORS
			( addr ) DUP2 TOS #0100 ** ROT TOS #0010 ** ++ BANK ++ .Screen/addr DEO2
			( draw ) #40 SFT + .settings/selection LDZ = #40 .settings/blending LDZ + + .Screen/color DEO
			INCR
			LTHk ,&hor JCN
		POP2
		INCR
		LTHk ,&ver JCN
	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
	SELECTED-ADDR STH2k .Screen/addr DEO2
	#00 #04
	&ver
		OVR #20 MUL TOS .editview/y1 LDZ2 ++ .Screen/y DEO2
		OVR #20 * TOS .editview/y1 LDZ2 ++ .Screen/y DEO2
		#00 #04
		&hor
			OVR #20 MUL TOS .editview/x1 LDZ2 ++ .Screen/x DEO2
			OVR #20 * TOS .editview/x1 LDZ2 ++ .Screen/x DEO2
			( get x,y )
			SWP2 OVR STH SWP2 OVR STHr
			GET-ITERATORS
			( check if within ratio )
			.settings/ratio LDZ #0f AND LTH STH
			.settings/ratio LDZ #04 SFT LTH STHr
			.settings/ratio LDZ #0f AND < STH
			.settings/ratio LDZ #04 SFT < STHr
			#0101 !! ,&outside JCN 
				DUP2r STH2r .Screen/addr DEO2
				STH2kr .Screen/addr DEO2
				#01 ,draw-tile JSR
				( incr ) STH2r #0008 ++ STH2
				( incr ) STH2r #0010 ++ STH2
			&outside
			( incr ) SWP #01 + SWP
			DUP2 LTH ,&hor JCN
			( incr ) INCR
			LTHk ,&hor JCN
		POP2
		( incr ) SWP #01 + SWP
		DUP2 LTH ;&ver JCN2
		( incr ) INCR
		LTHk ;&ver JCN2
	POP2
	POP2r



@@ 548,69 518,48 @@ RTN
	&ver
		#00 #20
		&hor
			OVR #04 MOD #00 EQU ,&skip JCN
			STH2 OVR STH2r ROT #04 MOD #00 EQU ,&skip JCN
			OVR #04 MOD #00 = ,&skip JCN
			STH2 OVR STH2r ROT #04 MOD #00 = ,&skip JCN

			( get x,y )
			SWP2 OVR STH SWP2 OVR STHr
			GET-ITERATORS
			( get address )
			.Screen/addr DEI2 
			( after this, +R XY )
			SWP2 SWP STH
			( got sprite line )
			#04 DIV TOS ++ LDA
			#04 / TOS ++ LDA
			( get pixel )
			STHr #04 DIV
			#07 SWP SUB SFT #01 AND
			STHr #04 /
			#07 SWP - SFT #01 AND
			.Screen/color DEO

			&skip
			#0001 .Screen/x DEI2 ++ .Screen/x DEO2
			( incr ) SWP #01 + SWP
			DUP2 LTH ,&hor JCN
			( incr ) INCR
			LTHk ,&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
		( incr ) INCR
		LTHk ,&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
	.editview/y1 LDZ2 #0018 ++ .Screen/y DEO2
	#00 .i STZ
	&bytes
		.tileview/x LDZ2 #0088 ++ .Screen/x DEO2
		.editview/x1 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
	.i LDZ #08 < ;&bytes JCN2

	( operations )
	.Screen/y DEI2 #0008 ++ .Screen/y DEO2


@@ 621,56 570,122 @@ RTN
	#21 .Screen/color DEO

	( draw tiles 2x2 )
	.tileview/y LDZ2 .Screen/y DEO2
	.editview/y1 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
		.editview/x1 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
			.pt/x LDZ #02 < ;&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
		.pt/y LDZ #02 < ;&tiles-ver JCN2

RTN

@draw-blendview ( -- )
	
	.settings/tile LDZ2 .Screen/addr DEO2
	( outline )
	.blendview/x1 LDZ2 #0002 -- 
	.blendview/y1 LDZ2 #0002 -- 
	.blendview/x2 LDZ2 #0001 ++ 
	.blendview/y2 LDZ2 #0001 ++ #03 ;line-rect JSR2

	( 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

	BANK .settings/selection LDZ TOS #0010 ** ++ .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
		OVR #04 / #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
		OVR #20 + .settings/depth LDZ #20 * + .Screen/color DEO
		INCR
		LTHk ,&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-preview ( -- )

	( outline )
	.preview/x1 LDZ2 #0002 -- 
	.preview/y1 LDZ2 #0002 -- 
	.preview/x2 LDZ2 #0001 ++ 
	.preview/y2 LDZ2 #0001 ++ #03 ;line-rect JSR2

	( value )
	.preview/x1 LDZ2 #0001 -- .Screen/x DEO2
	.preview/y2 LDZ2 #0001 ++ .Screen/y DEO2
	.settings/ratio LDZ #22 ;draw-byte JSR2

	( stash address )
	SELECTED-ADDR DUP2 STH2 .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 ( -- )

	( outline )
	.colorview/x1 LDZ2 #0002 -- 
	.colorview/y1 LDZ2 #0002 -- 
	.colorview/x2 LDZ2 #0001 ++ 
	.colorview/y2 LDZ2 #0001 ++ #03 ;line-rect JSR2

	( value )
	.colorview/x1 LDZ2 #0001 -- .Screen/x DEO2
	.colorview/y2 LDZ2 #0001 ++ .Screen/y DEO2
	.settings/brush LDZ #23 ;draw-byte JSR2

	.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 .settings/brush LDZ = #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
		INCR
		LTHk ,&loop JCN
	POP2

	.colorview/y1 LDZ2 #18 + .Screen/y DEO2


@@ 686,60 701,21 @@ RTN
	RTN

	&draw-color-code ( color* -- )
		DUP ;font-hex ROT #0f AND #08 MUL #00 SWP ++ .Screen/addr DEO2
		DUP ;font-hex ROT #0f AND #08 * #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
		;font-hex ROT #04 SFT #08 * #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
		DUP ;font-hex ROT #0f AND #08 * #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
		;font-hex ROT #04 SFT #08 * #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 )


@@ 754,18 730,18 @@ RTN
	( 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
	;tool_selector #00 .bankview/mode LDZ #08 * ++ .Screen/addr DEO2
	#32 .Mouse/state DEI #00 ! + .Screen/color DEO

RTN

@draw-byte ( byte color -- )
	
	STH STH
	;font-hex #00 DUPr STHr #f0 AND #04 SFT #08 MUL ++ .Screen/addr DEO2
	;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 MUL ++ .Screen/addr DEO2
	;font-hex #00 STHr #0f AND #08 * ++ .Screen/addr DEO2
	( draw ) STHr .Screen/color DEO

RTN


@@ 774,13 750,13 @@ RTN

	STH SWP 
	DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2
	( draw ) DUPr STHr .Screen/color DEO
	( draw ) STHkr .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
	( draw ) STHkr .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
	( 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


@@ 798,7 774,7 @@ RTN
		( 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
		LTH2k ,&ver JCN
	POP2 POP2
	.rect/x1 LDZ2 .rect/x2 LDZ2
	&hor


@@ 822,10 798,10 @@ RTN
			( save ) OVR2 .Screen/x DEO2
			( draw ) .color LDZ .Screen/color DEO
			( incr ) SWP2 #0001 ++ SWP2
			OVR2 OVR2 LTS2 ,&hor JCN
			LTH2k ,&hor JCN
		POP2 POP2 STH2r STH2r
		( incr ) SWP2 #0001 ++ SWP2
		OVR2 OVR2 LTS2 ,&ver JCN
		LTH2k ,&ver JCN
	POP2 POP2 POP2 POP2

RTN


@@ 835,9 811,9 @@ RTN
	STH .Screen/y DEO2
	&loop
		( save ) OVR2 .Screen/x DEO2
		( draw ) DUPr STHr .Screen/color DEO
		( draw ) STHkr .Screen/color DEO
		( incr ) SWP2 #0002 ++ SWP2
		OVR2 OVR2 << ,&loop JCN
		LTH2k ,&loop JCN
	POP2 POP2 POPr

RTN


@@ 847,9 823,9 @@ RTN
	STH ROT2 .Screen/x DEO2
	&loop
		( save ) OVR2 .Screen/y DEO2
		( draw ) DUPr STHr .Screen/color DEO
		( draw ) STHkr .Screen/color DEO
		( incr ) SWP2 #0002 ++ SWP2
		OVR2 OVR2 << ,&loop JCN
		LTH2k ,&loop JCN
	POP2 POP2 POPr

RTN


@@ 883,10 859,4 @@ RTN
	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 ]

@filepath1   [ "example.chr 00 ]