( drag )

:dev/r fff8 ( std read port )
:dev/w fff9 ( std write port )

&Point { x 1 y 1 }

&Point2d { x 2 y 2 }

&Picture2d { x 2 y 2 width 1 height 1 color 1 addr 2 }

;mouse Point2d
;pict Picture2d ;pictpt Point
( drawing ) ;color 1 ;x1 2 ;x2 2 ;y1 2 ;y2 2 ;i 2
;state 1

|0100 @RESET 
	
	#02 =dev/w ( set dev/write to sprite ) 

	#0010 #0020 #04 #04 #01 ,graphic1 ,draw-picture JSR
	#0020 #0030 #10 #10 #04 ,graphic2 ,draw-picture JSR
	#0088 #0020 #10 #10 #08 ,graphic2 ,draw-picture JSR

	#05 =dev/r ( set dev/read mouse )

BRK

|c000 @FRAME

	( clear last cursor )
	#10 ,clear_icn ~mouse.x ~mouse.y ,draw-sprite JSR
	( record mouse positions )
	#00 IOR2 =mouse.x #02 IOR2 =mouse.y
	( record mouse state )
	#04 IOR #11 ADD =state
	( draw mouse )
	~state ,cursor_icn ~mouse.x ~mouse.y ,draw-sprite JSR

BRK

@draw-picture ( x y width height addr -> picture ) 

	=pict.addr =pict.color =pict.height =pict.width =pict.y =pict.x
	#00 =pictpt.y
	@draw-picture-row
		#00 =pictpt.x
		@draw-picture-col
			( draw )
			~pict.color 
			~pict.addr 
			#0008 #00 ~pictpt.x MUL2 ADD2 ( x )
			#0008 #00 ~pictpt.y ~pict.width MUL MUL2 ADD2 ( y * width )
			~pict.x #0008 #00 ~pictpt.x MUL2 ADD2
			~pict.y #0008 #00 ~pictpt.y MUL2 ADD2
			,draw-sprite JSR
			( draw - end )
			( incr x ) ~pictpt.x #01 ADD =pictpt.x
			~pictpt.x ~pict.width LTH ,draw-picture-col ROT JMP? POP2
		( incr y ) ~pictpt.y #01 ADD =pictpt.y
		~pictpt.y ~pict.height LTH ,draw-picture-row ROT JMP? POP2

	#01 =dev/w ( set dev/write to sprite ) 
	#03 =color
	~pict.x #0001 SUB2 ~pict.y #0001 SUB2 ~pict.x #0008 #00 ~pict.width MUL2 ADD2 ~pict.y #0008 #00 ~pict.height MUL2 ADD2 ,line-rect JSR
	#02 =dev/w ( set dev/write to sprite ) 

RTS

@line-rect ( x1 y1 x2 y2 )
	=y2 =x2 ( stash x1 y1 ) DUP2 WSR2 =y1 DUP2 WSR2 =x1
	@line-rect-hor
		( draw ) ~x1 ~y1 IOW2 IOW2 ~color IOW
		( draw ) ~x1 ~y2 IOW2 IOW2 ~color IOW
		( incr ) ~x1 #0001 ADD2 DUP2 =x1  
		~x2 #0001 ADD2 LTH2 ,line-rect-hor ROT JMP? POP2
	( restore x1 y1 ) RSW2 =x1 RSW2 =y1
	@line-rect-ver
		( incr ) ~y1 #0001 ADD2 DUP2 =y1  
		( draw ) ~x1 ~y1 IOW2 IOW2 ~color IOW
		( draw ) ~x2 ~y1 IOW2 IOW2 ~color IOW
		~y2 #0001 SUB2 LTH2 ,line-rect-ver ROT JMP? POP2
RTS

@draw-sprite
	IOW2 ( y byte )
	IOW2 ( x byte )
	IOW2 ( sprite address )
	IOW ( layer-color )
	RTS

@clear_icn   [ 0000 0000 0000 0000 ]
@cursor_icn  [ 80c0 e0f0 f8e0 1000 ]

@graphic1 [
	ff80 8080 8080 8088
	ffff fffc f8f9 f1f4
	ffff 0010 c721 2120
	ffff 3f0f 0717 c343
	8888 8080 8080 8080
	f0f1 f2f5 f2f1 f0f4
	1208 804c 9212 4c00
	7303 0343 1b1b fbfb
	8080 8f83 8383 8393
	f0f3 f1f0 e4c0 80ff
	00c7 c7c6 4606 00ff
	c3d3 c307 870f 3fff
	8f83 8383 8383 83ff
	fff7 fdff c0e2 f1ff
	7fef bfff 07af 5fff
	ffff ffff ffff ffff
]

@graphic2 [
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff fffe 
	ffff ffff fef0 8000 
	ffff ffd0 0000 0000 
	ffff ff02 0000 0000 
	ffff ffff 1f03 0000 
	ffff ffff ffff ff1f 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff fef8 f8e0 
	f8e0 c000 0003 0c30 
	0000 0738 c000 0000 
	17d0 0404 0404 0404 
	fd00 0000 0000 0000 
	40be 0100 0000 0000 
	0300 e01c 0300 0000 
	ff2f 0300 802d 0000 
	ffff ff3f 0f07 a101 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff fefc f0e0 c081 
	a081 060c 3060 8000 
	c080 0000 0000 0000 
	0000 0000 0000 0000 
	0604 0406 0206 0202 
	0000 0000 0000 0000 
	0000 0000 0000 0000 
	0000 0000 0000 0000 
	0000 0000 0000 0000 
	0000 0000 0100 0101 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	fffe ffd0 e0e0 e0e0 
	16f8 0000 0000 0000 
	0000 0000 0000 0000 
	0000 0000 0000 0000 
	0000 0000 0000 0000 
	0202 0202 0300 02ba 
	0000 0000 0000 12c8 
	0000 0000 0000 4893 
	0000 0000 0000 00f4 
	0000 0000 0000 0000 
	0103 0303 0703 0707 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	e0e0 e0f0 f0f8 f8fc 
	0000 0000 0000 0000 
	0000 0000 0001 020a 
	0000 0314 7040 8000 
	0b74 8000 0000 0000 
	4001 0105 0703 0200 
	0000 80c0 c080 4000 
	0000 0000 0000 0000 
	0700 0000 0000 0000 
	8028 0000 0000 0000 
	0f0f 0f1f 1f1f 1f1f 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	fcfe feff ffff ffff 
	0000 0003 82cc c0e0 
	1060 8000 0000 0000 
	0000 0000 0000 0b34 
	0000 0000 17f8 0000 
	0000 005f ff3f fe68 
	0000 aff8 e0fc a100 
	0000 5a00 0092 4000 
	0000 b217 0080 9000 
	0000 0040 5801 0101 
	0f1f 0f1f 0f1f 4f2f 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	e0f0 f0f0 f0f1 f1ed 
	0105 0a30 4000 0000 
	c000 0000 0000 0000 
	0000 0000 0000 0000 
	071f 1f3f 1fbf 3fbf 
	8080 a0d0 84e4 f0f0 
	0000 0000 0000 0000 
	0000 0000 0000 0000 
	0000 0302 040a 062b 
	af0f 0f1f 0f0f 1f9f 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	e5e5 eaf0 f2f8 eeff 
	8000 0000 0200 001e 
	0000 0000 4500 00aa 
	0000 0055 0200 01ff 
	3fbf 28f7 0f14 57ff 
	f059 80d0 c02f fde5 
	2840 0008 f795 474f 
	0100 16eb 5fff ffff 
	54df 1f87 ffff ffff 
	1f3f 291e bf7b fdfb 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	fbfd fef5 fdff ffff 
	8789 c64f af87 6fe7 
	f76d 8e56 deed edef 
	55ff 00fe 896d ffff 
	5fe1 c9d7 7b77 bb7b 
	5a5f ffff ff7f 7fff 
	dffc f8f2 c7ea fd9f 
	0100 8496 619f ffff 
	6f1f 7f7f ffff ffff 
	3ffb 7fdf 776f 7777 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	fcff ffff ffff ffff 
	d7b7 7ff7 bbd7 f3fb 
	edee edfe e2eb d5d6 
	edff ffe9 22aa dd56 
	bf7b bb35 75f2 a7ff 
	ffff f7ff 5fd1 2efa 
	efff ffff ff7f 95ee 
	ffff ffff ffff 779a 
	feff feff fefe ffa1 
	df7f dfbf bfff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	f9ff f5fa fcfc fcff 
	af5f 7fbf 7fff 7fff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	52ff ffff ffff ffff 
	aef5 ffff ffff ffff 
	ddeb fffd fdff fbf9 
	ffff ffff ffff ff7f 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff ffff ffde fef0 
	fbf8 f7ed d1a3 21c1 
	bfff 3f9f 0f0f 0787 
	ffff ffff ffff ffff 
	ffff ffff ffff ffff 
	ffff afd2 fdff ea80 
	ffbf 5fff ffff 1f07 
	ffff ffff ffff ffff 
	f9f0 f0e0 e8c8 cc94 
	5fe3 1c0f 0100 0000 
	ffff bf85 fa3f 0f03 
	ffff ffff 7f83 fcff 
	ffff ffff ffff 5fa5 
	ffff ffff ffff fffb 
	ffff ffff ffff fcf3 
	fffe faeb ac58 f0c0 
	d9a3 a206 0c18 3830 
	0402 0404 0404 0404 
	8381 8040 4000 4000 
	ffff ff6f 3f1f 0f07 
	fefe fefe fffe ffdf 
	8037 00e4 390f 8087 
	03a3 13f7 47a7 cf1f 
	fef7 fffe fefc f8f8 
	94a4 2420 4440 4480 
	0000 0000 0000 0000 
	0101 0303 060c 0c08 
	9f86 0001 0303 060c 
	fabf 7dc0 8000 0000 
	2fd3 fc07 0100 0000 
	cfbf 7ff1 c080 0000 
	8080 8000 8080 8080 
	6020 6060 2060 6020 
	0404 040c 0404 0404 
	1000 0008 0002 0000 
	0101 0000 0000 0080 
	ffff 7f1f 0f03 0000 
	e0fd ffff fffe fe1e 
	3fff ff57 4faf a6f4 
	f0e0 e182 8200 0000 
	8080 0000 0000 0000 
	0000 0000 0000 0000 
	1810 3020 60c0 80c0 
	0c18 1030 2040 40c0 
	0000 0000 0000 0000 
	0001 0307 0f0f 1f3f 
	0000 0000 0000 0000 
	4040 4040 2020 2030 
	6030 6030 2030 2030 
	0804 0408 0404 0404 
	0000 0000 0000 0000 
	0028 0802 0100 0000 
	0000 0000 8061 171f 
	0000 000a 7fff fffe 
	b0b8 995b 8fa9 b4bc 
	0001 7ffe fea0 0000 
	0040 e080 0000 0000 
	0101 0301 0206 0404 
	8000 0100 0101 0301 
	8080 8080 0000 0000 
	0000 0001 0103 0707 
	7e7c f8f0 e0c0 c080 
	0000 0000 80c0 6070 
	1010 1008 0808 0808 
	2030 1020 3000 3010 
	0404 0406 0202 0403 
	0000 0001 0b3f 7fff 
	0003 1f7f ffff ffff 
	7fff ffff ffff ffff 
	faf9 f7fd fcff ffff 
	b6da dc9a 5d4d ee6e 
	0000 0000 00fa ffff 
	0000 0000 0080 fcf8 
	0404 0000 0000 0000 
	0302 0301 0202 0202 
	0000 0000 0000 0000 
	0f1f 1e3c 7c78 f0e0 
	0000 0000 0000 0001 
]

|d000 @ERROR BRK 
|FFF0 [ f0ac f0bb f053 ] ( palette )
|FFFA .RESET .FRAME .ERROR ( vectors )