~rabbits/nasu

62bd77fb07fe0656e00512550c4961d6699b8400 — neauoire 1 year, 7 months ago 11f8f31
Run operations on entire selection
1 files changed, 181 insertions(+), 170 deletions(-)

M src/main.tal
M src/main.tal => src/main.tal +181 -170
@@ 25,8 25,10 @@
%DEBUG  { ;print-hex JSR2 #0a .Console/write DEO }
%DEBUG2 { SWP ;print-hex JSR2 ;print-hex JSR2 #0a .Console/write DEO }

%8** { #30 SFT2 }    %8// { #03 SFT2 }
%TOB { SWP POP } %TOS { #00 SWP }
%2**  { #10 SFT2 } %2// { #01 SFT2 }
%8**  { #30 SFT2 } %8// { #03 SFT2 }
%TOS  { #00 SWP }  %TOB { SWP POP }

%RTN { JMP2r }
%MOD { DUP2 / * - }
%MOD2 { OVR2 OVR2 // ** -- }


@@ 35,21 37,21 @@
%ROR { DUP #70 SFT SWP #01 SFT + }
%SFL { #40 SFT SFT }
%LTS2 { #8000 ++ SWP2 #8000 ++ >> }
%INCR { SWP #01 + SWP }
%INCR2 { SWP2 #0001 ++ SWP2 }
%GTS2 { #8000 ++ SWP2 #8000 ++ << }
%STEP8 { #33 SFT2 }
%TOGGLE { LDZk #00 = SWP STZ }
%GET-ITER { OVR2 SWP POP OVR SWP }
%BRK? { #01 JCN BRK }

%HOR    { #20 }              %VER    { #10 }
%WIDTH  { HOR TOS #0008 ** } 
%WIDTH  { HOR TOS 8** } 
%LENGTH { HOR TOS VER TOS ** #0010 ** }
%DATA-CLIP { #f000 } ( copy/paste )

%BANK { #2000 }
%BANK-TEMP { #4000 }
%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 ** }
%GET-POSITION  { .settings/focus LDZ2 BANK -- DUP2 2// WIDTH MOD2 SWP2 WIDTH 2** // 8** }
%ADD-POSITIONS { ROT2 ++ ROT2 ROT2 ++ SWP2 }
%RELEASE-MOUSE { #00 .Mouse/state DEO }
%RESET-SELECTION { .selection/x1 LDZ2 .selection/x2 STZ2 }


@@ 138,8 140,8 @@
	;on-frame    .Screen/vector DEO2

	( set defaults )
	HOR TOS #0008 ** .frame/width STZ2
	VER TOS #0008 ** #0040 ++ .frame/height STZ2
	HOR TOS 8** .frame/width STZ2
	VER TOS 8** #0040 ++ .frame/height STZ2
	#01 .settings/depth STZ
	#01 .settings/color STZ
	#01 .settings/blending STZ


@@ 147,16 149,16 @@
	#01 .settings/tool STZ
	BANK .settings/focus STZ2

	HOR TOS #0008 ** .tileview/width STZ2
	VER TOS #0008 ** .tileview/height STZ2
	HOR TOS 8** .tileview/width STZ2
	VER TOS 8** .tileview/height 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 #0030 ++ HOR TOS 8** VER TOS 8** SIZE-TO-RECT ;tileview SET-RECT
	.tileview/x1 LDZ2 .tileview/y2 LDZ2 #0008 ++ HOR TOS 8** #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


@@ 193,7 195,7 @@ BRK

@on-button ( -> )
	
	.Controller/key DEI .Controller/button DEI #0000 !! #01 JCN [ BRK ]
	.Controller/key DEI .Controller/button DEI #0000 !! BRK?

	.Controller/button DEI #01 AND ;on-control JCN2



@@ 207,7 209,7 @@ BRK
		DUP #34 ! ,&no-4 JCN
			( color ) #03 .settings/color STZ ;draw-toolview JSR2 &no-4
		DUP #08 ! ,&no-delete JCN
			( delete ) ;erase-selection JSR2 SET-STATE ;redraw JSR2 &no-delete
			( delete ) ;op-erase ;run-selection JSR2 SET-STATE ;redraw JSR2 &no-delete
		DUP #20 ! ,&no-zoom JCN
			( zoom ) .settings/zoom TOGGLE ;redraw JSR2 &no-zoom
		DUP #71 ! ,&no-tool0 JCN


@@ 260,7 262,7 @@ BRK
		;redraw JSR2 POP BRK 
		&no-paste
	DUP [ LIT 'x ] ! ,&no-cut JCN
		;copy-snarf JSR2 ;erase-selection JSR2 RESET-SELECTION
		;copy-snarf JSR2 ;op-erase ;run-selection JSR2 RESET-SELECTION
		;redraw JSR2 POP BRK 
		&no-cut
	DUP [ LIT 'r ] ! ,&no-name JCN


@@ 350,7 352,7 @@ BRK

	.settings/tool LDZ #01 = ;&select JCN2

	( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
	( skip ) .Mouse/state DEI #00 ! BRK?

	.Mouse/x DEI2 .tileview/x1 LDZ2 -- 
	.Mouse/y DEI2 .tileview/y1 LDZ2 -- 


@@ 411,11 413,11 @@ BRK

	&zoomed ( -> )

		( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
		( skip ) .Mouse/state DEI #00 ! BRK?

		.Mouse/x DEI2 .tileview/x1 LDZ2 -- 
		.Mouse/y DEI2 .tileview/y1 LDZ2 -- 
		#0008 // SWP2 #0008 // SWP2
		8// SWP2 8// SWP2
		GET-POSITION ADD-POSITIONS
		#00 .Mouse/state DEI #10 = ,&do-erase-zoom JCN 
			POP .settings/color LDZ 


@@ 428,9 430,9 @@ BRK

@on-touch-toolview ( -> )
	
	( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
	( skip ) .Mouse/state DEI #00 ! BRK?
	
	.Mouse/x DEI2 .toolview/x1 LDZ2 -- #0008 // TOB
	.Mouse/x DEI2 .toolview/x1 LDZ2 -- 8// TOB
	
	DUP HOR SWP - #01 ! ,&no-save JCN
		;save-file JSR2


@@ 486,29 488,21 @@ BRK

@on-touch-zoomview ( -> )

	( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
	( skip ) .Mouse/state DEI #00 ! BRK?
	
	.Mouse/y DEI2 .zoomview/y1 LDZ2 -- #0008 // TOB #04 ! ;&no-mod JCN2
		.Mouse/x DEI2 .zoomview/x1 LDZ2 -- #0008 // TOB 
	.Mouse/y DEI2 .zoomview/y1 LDZ2 -- 8// TOB #04 ! ;&no-mod JCN2
		.Mouse/x DEI2 .zoomview/x1 LDZ2 -- 8// 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 
			;op-shift-tile-up ;run-selection JSR2
			SET-STATE &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 
			;op-shift-tile-down ;run-selection JSR2
			SET-STATE &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 
			;op-shift-tile-right ;run-selection JSR2
			SET-STATE &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 
			;op-shift-tile-left ;run-selection JSR2
			SET-STATE &no-shiftleft
		POP
		RELEASE-MOUSE


@@ 537,10 531,10 @@ BRK

@on-touch-blendview ( -> )

	( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
	( skip ) .Mouse/state DEI #00 ! BRK?

	.Mouse/x DEI2 .blendview/x1 LDZ2 -- #0008 // TOB
	.Mouse/y DEI2 .blendview/y1 LDZ2 -- #0008 // TOB #04 * +
	.Mouse/x DEI2 .blendview/x1 LDZ2 -- 8// TOB
	.Mouse/y DEI2 .blendview/y1 LDZ2 -- 8// TOB #04 * +
	.settings/blending STZ

	;redraw JSR2


@@ 551,10 545,9 @@ BRK

@on-touch-colorview ( -> )

	( skip ) .Mouse/state DEI #00 ! BRK?
	
	( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
	
	.Mouse/y DEI2 .colorview/y1 LDZ2 -- #0008 // TOB
	.Mouse/y DEI2 .colorview/y1 LDZ2 -- 8// TOB

	DUP #00 ! ,&no-r JCN
		.System/r STHk ,&set-color JSR 


@@ 579,7 572,7 @@ BRK
		STHr #02 MOD STHk 
		#0f SWP [ #40 * SFT ] AND 
		STHr #00 = 
		.Mouse/x DEI2 .colorview/x1 LDZ2 -- #0002 // TOB 
		.Mouse/x DEI2 .colorview/x1 LDZ2 -- 2// TOB 
		( clamp to #0f ) DUP #10 = #01 * - 
		SWP [ #40 * SFT ] +
	RTN


@@ 588,11 581,10 @@ BRK

@on-touch-preview ( -> )

	
	( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
	( skip ) .Mouse/state DEI #00 ! BRK?

	( y ) .Mouse/y DEI2 .preview/y1 LDZ2 -- #0008 // TOB
	( x ) .Mouse/x DEI2 .preview/x1 LDZ2 -- #0008 // TOB
	( y ) .Mouse/y DEI2 .preview/y1 LDZ2 -- 8// TOB
	( x ) .Mouse/x DEI2 .preview/x1 LDZ2 -- 8// TOB

	#40 SFT + #11 +
	.settings/ratio STZ


@@ 605,54 597,104 @@ BRK

( operations )

@op-clear ( addr* length* -- )
@run-selection ( op* -- )
	
	OVR2 ++
	&loop
		OVR2 #00 ROT ROT STA
		INCR2 NEQ2k ,&loop JCN
	POP2 POP2
	STH2
	.selection/y2 LDZ #01 + .selection/y1 LDZ
	&ver
		.selection/x2 LDZ #01 + .selection/x1 LDZ
		&hor
			( write char ) GET-ITER GET-ADDR STH2kr JSR2
			#01 + GTHk ,&hor JCN
		POP2
		#01 + GTHk ,&ver JCN
	POP2
	POP2r

RTN

@op-shift-tile-up ( addr* -- )
@op-erase ( 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
	#10 #00
	&loop
		( get )
		DUP TOS STH2kr ++ #00 ROT ROT STA
		#01 + GTHk ,&loop JCN
	POP2
	POP2r

RTN

@op-shift-tile-down ( addr* -- )
@clamp-selection ( -- )
	
	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
	.selection/x1 LDZ HOR #01 - STHk < ,&ok-limitx1 JCN
		STHkr .selection/x1 STZ &ok-limitx1 POPr
	.selection/y1 LDZ VER #01 - STHk < ,&ok-limity1 JCN
		STHkr .selection/y1 STZ &ok-limity1 POPr
	.selection/x2 LDZ HOR #01 - STHk < ,&ok-limitx2 JCN
		STHkr .selection/x2 STZ &ok-limitx2 POPr
	.selection/y2 LDZ VER #01 - STHk < ,&ok-limity2 JCN
		STHkr .selection/y2 STZ &ok-limity2 POPr
	.selection/x2 LDZ .selection/x1 LDZ STHk > ,&ok-flipx JCN
		STHkr .selection/x2 STZ &ok-flipx POPr
	.selection/y2 LDZ .selection/y1 LDZ STHk > ,&ok-flipy JCN
		STHkr .selection/y2 STZ &ok-flipy POPr

RTN

@op-shift-tile-up ( addr* -- )

	DUP2
	DUP2 #0007 ++ SWP2 LDAk STH
	&ch1
		DUP2 #0001 ++ LDA STH
		DUP2 STHr ROT ROT STA
		#0001 ++ GTH2k ,&ch1 JCN
	POP2
	( cap ) STHr ROT ROT STA
	#0008 ++ DUP2 #0007 ++ SWP2 LDAk STH
	&ch2
		DUP2 #0001 ++ LDA STH
		DUP2 STHr ROT ROT STA
		#0001 ++ GTH2k ,&ch2 JCN
	POP2
	( cap ) STHr ROT ROT STA
	
RTN

@op-shift-tile-down ( addr* -- )
		
	DUP2
	DUP2 #0007 ++ LDAk STH
	&ch1
		DUP2 #0001 -- LDA STH
		DUP2 STHr ROT ROT STA
		#0001 -- LTH2k ,&ch1 JCN
	POP2
	( cap ) STHr ROT ROT STA
	#0008 ++ DUP2 #0007 ++ LDAk STH
	&ch2
		DUP2 #0001 -- LDA STH
		DUP2 STHr ROT ROT STA
		#0001 -- LTH2k ,&ch2 JCN
	POP2
	( cap ) STHr ROT ROT STA

RTN

@op-shift-tile-left ( addr* -- )
	
	STH2
	#00 #08
	#08 #00
	&loop
		OVR TOS STH2kr ++ DUP2
		( ch1 )
		DUP TOS STH2kr ++ DUP2
		LDA [ ROL ] ROT ROT STA
		INCR LTHk ,&loop JCN
		( ch2 )
		DUP TOS STH2kr #0008 ++ ++ DUP2
		LDA [ ROL ] ROT ROT STA
		#01 + GTHk ,&loop JCN
	POP2
	POP2r



@@ 661,16 703,30 @@ RTN
@op-shift-tile-right ( addr* -- )
	
	STH2
	#00 #08
	#08 #00
	&loop
		OVR TOS STH2kr ++ DUP2
		( ch1 )
		DUP TOS STH2kr ++ DUP2
		LDA [ ROR ] ROT ROT STA
		INCR LTHk ,&loop JCN
		( ch2 )
		DUP TOS STH2kr #0008 ++ ++ DUP2
		LDA [ ROR ] ROT ROT STA
		#01 + GTHk ,&loop JCN
	POP2
	POP2r

RTN

@clear ( addr* length* -- )
	
	OVR2 ++ SWP2
	&loop
		DUP2 #00 ROT ROT STA
		#0001 ++ NEQ2k ,&loop JCN
	POP2 POP2

RTN

@redraw ( -- )
	
	;draw-toolview JSR2 


@@ 787,8 843,8 @@ RTN
	( get row )
	DUP2 #0008 MOD2 
	( get tile )
	SWP2 #0008 // WIDTH #0002 ** ** ++
	SWP2 STEP8 #0002 ** ++ 
	SWP2 8// WIDTH 2** ** ++
	SWP2 STEP8 2** ++ 
	BANK ++

RTN


@@ 825,23 881,38 @@ RTN
@get-tile-addr ( x* y* -- addr* )
	
	STEP8 WIDTH ** #0004 // SWP2
	STEP8 #0002 ** ++
	STEP8 2** ++
	BANK ++

RTN

@copy-tile ( src* dst* -- )

	STH2 STH2
	#10 #00
	&loop
		( get )
		DUP TOS DUP2 STH2kr ++ LDA 
		( put )
		ROT ROT SWP2r STH2kr SWP2r ++ STA
		#01 + GTHk ,&loop JCN
	POP2
	POP2r POP2r

RTN

@draw-toolview ( -- )
		
	.toolview/y1 LDZ2 .Screen/y DEO2
	( colors )
	.toolview/x1 LDZ2 STH2k .Screen/x DEO2
	;circle-icns [ .settings/color LDZ #01 = TOS #0008 ** ] ++ .Screen/addr DEO2
	;circle-icns [ .settings/color LDZ #01 = TOS 8** ] ++ .Screen/addr DEO2
	#01 .Screen/sprite DEO
	STH2kr #0008 ++ .Screen/x DEO2
	;circle-icns [ .settings/color LDZ #02 = TOS #0008 ** ] ++ .Screen/addr DEO2
	;circle-icns [ .settings/color LDZ #02 = TOS 8** ] ++ .Screen/addr DEO2
	#02 .Screen/sprite DEO
	STH2kr #0010 ++ .Screen/x DEO2
	;circle-icns [ .settings/color LDZ #03 = TOS #0008 ** ] ++ .Screen/addr DEO2
	;circle-icns [ .settings/color LDZ #03 = TOS 8** ] ++ .Screen/addr DEO2
	#03 .Screen/sprite DEO
	( tools )
	STH2kr #0020 ++ .Screen/x DEO2


@@ 851,7 922,7 @@ RTN
	;tool-selector .Screen/addr DEO2
	#01 .settings/tool LDZ #01 = + .Screen/sprite DEO
	STH2r #0030 ++ .Screen/x DEO2
	;zoom-icns [ .settings/zoom LDZ TOS #0008 ** ++ ] .Screen/addr DEO2
	;zoom-icns [ .settings/zoom LDZ TOS 8** ++ ] .Screen/addr DEO2
	#01 .settings/zoom LDZ + .Screen/sprite DEO
	( file i/o )
	;draw-state JSR2


@@ 878,8 949,8 @@ RTN
	.settings/focus LDZ2 .Screen/addr DEO2
	#10 #00
	&loop
		DUP #04 MOD #00 SWP #0008 ** .blendview/x1 LDZ2 ++ .Screen/x DEO2
		DUP #04 / #00 SWP #0008 ** .blendview/y1 LDZ2 ++ .Screen/y DEO2
		DUP #04 MOD #00 SWP 8** .blendview/x1 LDZ2 ++ .Screen/x DEO2
		DUP #04 / #00 SWP 8** .blendview/y1 LDZ2 ++ .Screen/y DEO2
		#00 .Screen/sprite DEO
		DUP #00 + .settings/depth LDZ #80 * + .Screen/sprite DEO
		#01 + GTHk ,&loop JCN


@@ 1049,7 1120,7 @@ RTN
	.toolview/y1 LDZ2 .Screen/y DEO2
	;path/name
	&loop
		DUP2 LDA DUP #00 ! #20 * - TOS #0008 ** ;font ++ .Screen/addr DEO2 
		LDAk DUP #00 ! #20 * - TOS 8** ;font ++ .Screen/addr DEO2 
		STHkr .Screen/sprite DEO
		.Screen/x DEI2 #0008 ++ .Screen/x DEO2
		#0001 ++


@@ 1104,78 1175,17 @@ RTN

RTN

( etc )

@copy-tile ( src* dst* -- )

	STH2 STH2
	#10 #00
	&loop
		( get )
		DUP TOS DUP2 STH2kr ++ LDA 
		( put )
		ROT ROT SWP2r STH2kr SWP2r ++ STA
		#01 + GTHk ,&loop JCN
	POP2
	POP2r POP2r

RTN

@erase-tile ( addr* -- )
	
	STH2
	#10 #00
	&loop
		( get )
		DUP TOS STH2kr ++ #00 ROT ROT STA
		#01 + GTHk ,&loop JCN
	POP2
	POP2r

RTN

@erase-selection ( -- )

	.selection/y2 LDZ #01 + .selection/y1 LDZ
	&ver
		.selection/x2 LDZ #01 + .selection/x1 LDZ
		&hor
			( write char ) GET-ITER GET-ADDR ;erase-tile JSR2
			#01 + GTHk ,&hor JCN
		POP2
		#01 + GTHk ,&ver JCN
	POP2

RTN

@clamp-selection ( -- )
	
	.selection/x1 LDZ HOR #01 - STHk < ,&ok-limitx1 JCN
		STHkr .selection/x1 STZ &ok-limitx1 POPr
	.selection/y1 LDZ VER #01 - STHk < ,&ok-limity1 JCN
		STHkr .selection/y1 STZ &ok-limity1 POPr
	.selection/x2 LDZ HOR #01 - STHk < ,&ok-limitx2 JCN
		STHkr .selection/x2 STZ &ok-limitx2 POPr
	.selection/y2 LDZ VER #01 - STHk < ,&ok-limity2 JCN
		STHkr .selection/y2 STZ &ok-limity2 POPr
	.selection/x2 LDZ .selection/x1 LDZ STHk > ,&ok-flipx JCN
		STHkr .selection/x2 STZ &ok-flipx POPr
	.selection/y2 LDZ .selection/y1 LDZ STHk > ,&ok-flipy JCN
		STHkr .selection/y2 STZ &ok-flipy POPr

RTN

( file )

@new-file ( default* -- )
	
	BANK LENGTH ;op-clear JSR2
	BANK LENGTH ;clear JSR2
	STH2
	#00 #0c
	#0c #00
	&loop
		OVR DUP TOS STH2kr ++ LDA
		DUP DUP TOS STH2kr ++ LDA
		SWP .path/name + STZ
		INCR LTHk ,&loop JCN
		#01 + GTHk ,&loop JCN
	( end ) #00 SWP .path/name + STZ 
	.path/length STZ 
	POP2r


@@ 1187,7 1197,7 @@ RTN

	( icn mode ) .Controller/button DEI #02 AND ,load-file-icn JCN

	BANK LENGTH ;op-clear JSR2
	BANK LENGTH ;clear JSR2
	;path/name .File/name DEO2 
	#2000 .File/length DEO2 
	BANK .File/load DEO2


@@ 1197,17 1207,17 @@ RTN

@load-file-icn ( -- )
	
	BANK LENGTH ;op-clear JSR2
	BANK LENGTH ;clear JSR2
	;path/name .File/name DEO2 
	#2000 .File/length DEO2 
	BANK-TEMP .File/load DEO2
	RESET-STATE

	#0000 #1000
	#1000 #0000
	&loop
		OVR2 BANK-TEMP ++ LDA STH
		OVR2 [ DUP2 #0008 // #0008 ** ++ ] BANK ++ STHr ROT ROT STA
		INCR2 LTH2k ,&loop JCN
		DUP2 BANK-TEMP ++ LDA STH
		DUP2 [ DUP2 8// 8** ++ ] BANK ++ STHr ROT ROT STA
		#0001 ++ GTH2k ,&loop JCN
	POP2 POP2

RTN


@@ 1291,7 1301,6 @@ RTN
			&linebreak
		DUP2 [ DATA-CLIP ++ ] [ STH2kr GET-ADDR ] ;copy-tile JSR2
		( move-x ) SWPr LITr 01 ADDr SWPr
		&resume
		#0010 ++ GTH2k ,&loop JCN
	POP2 POP2
	( destroy x,y ) POP2r


@@ 1319,22 1328,24 @@ RTN

@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
	( load ) .color STZ 
	STH2k .rect/y2 STZ2 .rect/x2 STZ2 
	STH2k .rect/y1 STZ2 .rect/x1 STZ2
	STH2r STH2r SWP2
	&ver
		( save ) OVR2 .Screen/y DEO2
		( save ) DUP2 .Screen/y DEO2
		( draw ) .rect/x1 LDZ2 .Screen/x DEO2 .color LDZ DUP .Screen/pixel DEO
		( draw ) .rect/x2 LDZ2 .Screen/x DEO2 .Screen/pixel DEO
		( incr ) INCR2
		OVR2 OVR2 LTS2 ,&ver JCN
		( incr ) #0001 ++
		OVR2 OVR2 GTS2 ,&ver JCN
	POP2 POP2
	.rect/x1 LDZ2 .rect/x2 LDZ2
	.rect/x1 LDZ2 .rect/x2 LDZ2 SWP2
	&hor
		( save ) OVR2 .Screen/x DEO2
		( save ) DUP2 .Screen/x DEO2
		( draw ) .rect/y1 LDZ2 .Screen/y DEO2 .color LDZ DUP .Screen/pixel DEO
		( draw ) .rect/y2 LDZ2 .Screen/y DEO2 .Screen/pixel DEO
		( incr ) INCR2
		OVR2 OVR2 #0001 ++ LTS2 ,&hor JCN
		( incr ) #0001 ++
		OVR2 OVR2 GTS2 ,&hor JCN
	POP2 POP2

RTN