Window_proc:
.okay	btst	#6,$bfe001		;Wait for mouse.
	bne	.lpx
	lea	window_data,a0
	move.w	(a0)+,d5
	bne	.lp
.lpx:	move.w	#8,rgb_counter
	move.w	#1,pal_inc
	move.w	#-1,menu_sel
	rts
.lp:	sub.l	#1,d5
.lp6:	moveq.l	#0,d0
	moveq.l	#0,d1
	moveq.l	#0,d2
	moveq.l	#0,d3
	move.w	(a0)+,d0		;topx
	move.w	(a0)+,d1		;topy
	move.w	(a0)+,d2		;botx
	move.w	(a0)+,d3		;boty

	move.l	d0,topx
	move.l	d1,topy
	move.l	d2,botx
	move.l	d3,boty

	add.l	#200,d1
	add.l	#200,d3

	sub.l	#1,d3
	move.w	xpos,d4
	move.l	#w_plnw,d7
	divu	#80,d7
	tst.w	d7
	beq	.lpy
	asl.l	#1,d4			;hi-res pixel size
.lpy:	cmp.w	d4,d0
	beq	.lp2			;in window
	bgt	.lpz			;next...
.lp2:	cmp.w	d4,d2
	beq	.lp3			;in window
	blt	.lpz			;next...
.lp3:	moveq.l	#0,d4
	move.b	ypos,d4
	cmp.w	d4,d1
	beq	.lp4			;in window
	bgt	.lpz			;next...
.lp4:	cmp.w	d4,d3
	beq	.lp5			;in window
	blt	.lpz			;next...
.lp5:	move.l	(a0)+,a0
	jmp	(a0)
.lpz:	add.l	#4,a0
	dbra	d5,.lp6
	rts
;-------------------------------
do_icon	jsr	do_highfill
.loop	btst	#6,$bfe001
	beq.s	.loop
	jsr	do_highclr
	rts
;---------------------------------------------
Make_screen:
	move.l	menu_planesA,a1
	move.l	#menu_screensize/4-1,d0
.lp33	clr.l	(a1)+
	dbra	d0,.lp33

	lea	w_pln1,a1
	move.l	menu_planesA,d0
	moveq.l	#4-1,d7
.loop	move.l	d0,(a1)+
	add.l	#menu_planesize,d0
	dbra	d7,.loop

	move.l	w_pln1,drawplane

	move.l	#0,windat
	move.l	#0,window_data
	
.lp3:	move.l	(a0)+,topx
	bpl	.lp			;More boxes?
	rts
.lp:	move.l	(a0)+,topy
	move.l	(a0)+,botx
	move.l	(a0)+,boty
	add.l	#1,boty
	move.l	(a0)+,d0
.lp2:	lea	boxroutines,a1
	asl.l	#2,d0
	move.l	(a1,d0),a1

	move.l	a0,storea0
	jsr	(a1)
	move.l	storea0,a0
	add.l	#4,a0
	move.l	(a0)+,d0		;routine address
	beq	.lp3
	lea	window_data,a1
	add.w	#1,(a1)+		;add 1 to number of windows
	add.l	windat,a1
	add.l	#12,windat		;pointer next xy,xy
	move.w	topx+2,(a1)+
	move.w	topy+2,(a1)+
	move.w	botx+2,(a1)+
	move.w	boty+2,(a1)+
	move.l	d0,(a1)+
	bra	.lp3			;next window
	
storea0	dc.l	0
boxroutines:
	dc.l	box0,box1,box2,box3,box4,box5
windat:	dc.l	0
window_data:
	ds.b	50*12
window_data2:
	dc.l	0,0,0,0
window_saved:
	dc.l	0
;------------------------------------------
do_highfill
	bsr	highlight
	rts
;---------------------------------------------
do_highclr
	bsr	clrtop
	rts
;---------------------------------------------
box0	jsr	clrback
	add.l	#2,topx
	add.l	#2,topy
	move.b	#2,fillcol
	sub.l	#2,botx
	sub.l	#2,boty
	jsr	fillback
	sub.l	#2,topx
	sub.l	#2,topy
	add.l	#2,botx
	add.l	#2,boty
	move.l	a0,-(sp)
	move.l	#3,linecol		;white bit
	move.l	topx,d0
	move.l	topy,d1
	move.l	topx,d2
	move.l	topy,d3
	add.l	#1,d2
	add.l	#1,d3
	jsr	draw
	move.l	#1,linecol		;light grey top
	move.l	topx,d0
	move.l	topy,d1
	move.l	botx,d2
	move.l	topy,d3
	sub.l	#1,d2
	add.l	#1,d0
	jsr	draw
	move.l	topx,d0
	move.l	topy,d1
	move.l	botx,d2
	move.l	topy,d3
	add.l	#2,d0
	add.l	#1,d1
	add.l	#1,d3
	sub.l	#2,d2
	jsr	draw
	move.l	topx,d0			;light grey left
	move.l	topy,d1
	move.l	topx,d2
	move.l	boty,d3
	add.l	#1,d1
	sub.l	#2,d3
	jsr	draw
	move.l	topx,d0	
	move.l	topy,d1
	move.l	topx,d2
	move.l	boty,d3
	add.l	#1,d0
	add.l	#2,d1
	add.l	#1,d2
	sub.l	#3,d3
	jsr	draw
	move.l	#4,linecol		;dark grey right
	move.l	botx,d0	
	move.l	topy,d1
	move.l	botx,d2
	move.l	boty,d3
	add.l	#1,d1
	sub.l	#2,d3
	jsr	draw
	move.l	botx,d0	
	move.l	topy,d1
	move.l	botx,d2
	move.l	boty,d3
	add.l	#2,d1
	sub.l	#3,d3
	sub.l	#1,d0
	sub.l	#1,d2
	jsr	draw
	move.l	topx,d0			;dark grey bottom
	move.l	boty,d1
	move.l	botx,d2
	move.l	boty,d3
	sub.l	#2,d1
	sub.l	#2,d3
	add.l	#2,d0
	sub.l	#2,d2
	jsr	draw
	move.l	topx,d0			
	move.l	boty,d1
	move.l	botx,d2
	move.l	boty,d3
	sub.l	#1,d1
	sub.l	#1,d3
	add.l	#1,d0
	sub.l	#1,d2
	jsr	draw
	move.l	#2,linecol		;light grey corners
	move.l	topx,d0			
	move.l	boty,d1
	move.l	topx,d2
	move.l	boty,d3
	sub.l	#1,d1
	sub.l	#2,d3
	add.l	#1,d2
	jsr	draw
	move.l	botx,d0			
	move.l	topy,d1
	move.l	botx,d2
	move.l	topy,d3
	sub.l	#1,d2
	add.l	#1,d3
	jsr	draw
	move.l	(sp)+,a0
	add.l	#1,topx
	add.l	#1,topy
	move.l	(a0)+,a1		;text addr
	move.l	#0,linenum
.lp:	jsr	gettxt
	move.l	a1,-(sp)
	jsr	doshad
	jsr	blittxt
	move.l	(sp)+,a1
	add.l	#1,linenum
	tst.l	lastline
	beq	.lp
	sub.l	#1,topx
	sub.l	#1,topy
	rts
;------------------------------------------
box1:	jsr	clrback
	add.l	#1,topx
	add.l	#1,topy
	move.b	#2,fillcol
	sub.l	#1,botx
	sub.l	#1,boty
	jsr	fillback
	sub.l	#1,topx
	sub.l	#1,topy
	add.l	#1,botx
	add.l	#1,boty
	move.l	a0,-(sp)
	move.l	#3,linecol		;white bit
	move.l	topx,d0
	move.l	topy,d1
	move.l	topx,d2
	move.l	topy,d3
	jsr	draw
	move.l	#1,linecol		;light grey top
	move.l	topx,d0
	move.l	topy,d1
	move.l	botx,d2
	move.l	topy,d3
	sub.l	#1,d2
	add.l	#1,d0
	jsr	draw
	move.l	topx,d0			;light grey left
	move.l	topy,d1
	move.l	topx,d2
	move.l	boty,d3
	add.l	#1,d1
	sub.l	#2,d3
	jsr	draw
	move.l	#4,linecol		;dark grey right
	move.l	botx,d0	
	move.l	topy,d1
	move.l	botx,d2
	move.l	boty,d3
	add.l	#1,d1
	sub.l	#2,d3
	jsr	draw
	move.l	topx,d0			;dark grey bottom
	move.l	boty,d1
	move.l	botx,d2
	move.l	boty,d3
	sub.l	#1,d1
	sub.l	#1,d3
	add.l	#1,d0
	sub.l	#1,d2
	jsr	draw
	move.l	#2,linecol		;light grey corners
	move.l	topx,d0			
	move.l	boty,d1
	move.l	topx,d2
	move.l	boty,d3
	sub.l	#1,d1
	sub.l	#1,d3
	jsr	draw
	move.l	botx,d0			
	move.l	topy,d1
	move.l	botx,d2
	move.l	topy,d3
	jsr	draw
	move.l	(sp)+,a0
	move.l	(a0)+,a1		;text addr
	move.l	#0,linenum
.lp:	jsr	gettxt
	move.l	a1,-(sp)
	jsr	doshad
	jsr	blittxt
	move.l	(sp)+,a1
	add.l	#1,linenum
	tst.l	lastline
	beq	.lp
	rts
;------------------------------------------
box2:	jsr	clrback
	add.l	#2,topx
	add.l	#2,topy
	move.b	#6,fillcol
	sub.l	#2,botx
	sub.l	#2,boty
	jsr	fillback
	sub.l	#2,topx
	sub.l	#2,topy
	add.l	#2,botx
	add.l	#2,boty
	move.l	a0,-(sp)
	move.l	#3,linecol		;white bit
	move.l	topx,d0
	move.l	topy,d1
	move.l	topx,d2
	move.l	topy,d3
	add.l	#1,d2
	add.l	#1,d3
	jsr	draw
	move.l	#5,linecol		;light grey top
	move.l	topx,d0
	move.l	topy,d1
	move.l	botx,d2
	move.l	topy,d3
	sub.l	#1,d2
	add.l	#1,d0
	jsr	draw
	move.l	topx,d0
	move.l	topy,d1
	move.l	botx,d2
	move.l	topy,d3
	add.l	#2,d0
	add.l	#1,d1
	add.l	#1,d3
	sub.l	#2,d2
	jsr	draw
	move.l	topx,d0			;light grey left
	move.l	topy,d1
	move.l	topx,d2
	move.l	boty,d3
	add.l	#1,d1
	sub.l	#2,d3
	jsr	draw
	move.l	topx,d0	
	move.l	topy,d1
	move.l	topx,d2
	move.l	boty,d3
	add.l	#1,d0
	add.l	#2,d1
	add.l	#1,d2
	sub.l	#3,d3
	jsr	draw
	move.l	#7,linecol		;dark grey right
	move.l	botx,d0	
	move.l	topy,d1
	move.l	botx,d2
	move.l	boty,d3
	add.l	#1,d1
	sub.l	#2,d3
	jsr	draw
	move.l	botx,d0	
	move.l	topy,d1
	move.l	botx,d2
	move.l	boty,d3
	add.l	#2,d1
	sub.l	#3,d3
	sub.l	#1,d0
	sub.l	#1,d2
	jsr	draw
	move.l	topx,d0			;dark grey bottom
	move.l	boty,d1
	move.l	botx,d2
	move.l	boty,d3
	sub.l	#2,d1
	sub.l	#2,d3
	add.l	#2,d0
	sub.l	#2,d2
	jsr	draw
	move.l	topx,d0			
	move.l	boty,d1
	move.l	botx,d2
	move.l	boty,d3
	sub.l	#1,d1
	sub.l	#1,d3
	add.l	#1,d0
	sub.l	#1,d2
	jsr	draw
	move.l	#5,linecol		;light grey corners
	move.l	topx,d0			
	move.l	boty,d1
	move.l	topx,d2
	move.l	boty,d3
	sub.l	#1,d1
	sub.l	#2,d3
	add.l	#1,d2
	jsr	draw
	move.l	botx,d0			
	move.l	topy,d1
	move.l	botx,d2
	move.l	topy,d3
	sub.l	#1,d2
	add.l	#1,d3
	jsr	draw
	move.l	(sp)+,a0
	add.l	#1,topx
	add.l	#1,topy
	move.l	(a0)+,a1		;text addr
	move.l	#0,linenum
.lp:	jsr	gettxt
	move.l	a1,-(sp)
	jsr	doshad
	jsr	blittxt
	jsr	blittxt2
	jsr	orangeshad
	move.l	(sp)+,a1
	add.l	#1,linenum
	tst.l	lastline
	beq	.lp
	sub.l	#1,topx
	sub.l	#1,topy
	rts
;------------------------------------------
box3:	jsr	clrback
	add.l	#1,topx
	add.l	#1,topy
	move.b	#6,fillcol
	sub.l	#1,botx
	sub.l	#1,boty
	jsr	fillback
	sub.l	#1,topx
	sub.l	#1,topy
	add.l	#1,botx
	add.l	#1,boty
	move.l	a0,-(sp)
	move.l	#3,linecol		;white bit
	move.l	topx,d0
	move.l	topy,d1
	move.l	topx,d2
	move.l	topy,d3
	jsr	draw
	move.l	#5,linecol		;light grey top
	move.l	topx,d0
	move.l	topy,d1
	move.l	botx,d2
	move.l	topy,d3
	sub.l	#1,d2
	add.l	#1,d0
	jsr	draw
	move.l	topx,d0			;light grey left
	move.l	topy,d1
	move.l	topx,d2
	move.l	boty,d3
	add.l	#1,d1
	sub.l	#2,d3
	jsr	draw
	move.l	#7,linecol		;dark grey right
	move.l	botx,d0	
	move.l	topy,d1
	move.l	botx,d2
	move.l	boty,d3
	add.l	#1,d1
	sub.l	#2,d3
	jsr	draw
	move.l	topx,d0			;dark grey bottom
	move.l	boty,d1
	move.l	botx,d2
	move.l	boty,d3
	sub.l	#1,d1
	sub.l	#1,d3
	add.l	#1,d0
	sub.l	#1,d2
	jsr	draw
	move.l	#5,linecol		;light grey corners
	move.l	topx,d0			
	move.l	boty,d1
	move.l	topx,d2
	move.l	boty,d3
	sub.l	#1,d1
	sub.l	#1,d3
	jsr	draw
	move.l	botx,d0			
	move.l	topy,d1
	move.l	botx,d2
	move.l	topy,d3
	jsr	draw
	move.l	(sp)+,a0
	move.l	(a0)+,a1		;text addr
	move.l	#0,linenum
.lp:	jsr	gettxt
	move.l	a1,-(sp)
	jsr	doshad
	jsr	blittxt
	jsr	blittxt2
	jsr	orangeshad
	move.l	(sp)+,a1
	add.l	#1,linenum
	tst.l	lastline
	beq	.lp
	rts
;------------------------------------------
box4	move.l	(a0)+,a1		;text addr
	move.l	#0,linenum
.lp:	jsr	gettxt
	move.l	a1,-(sp)
	jsr	doshad
	jsr	blittxt
	move.l	(sp)+,a1
	add.l	#1,linenum
	tst.l	lastline
	beq	.lp
	rts
;------------------------------------------
box5	rts
;--------------------------------
gettxt	lea	textbuffer,a2		;clear buffer
	move.l	#w_plnw,d0
	mulu	#12,d0			;both shad+normal
	lsr.l	#2,d0
	sub.l	#1,d0
.lp:	move.l	#0,(a2)+
	dbra	d0,.lp
	move.l	#0,lastline
	move.l	topx,savex
	add.l	#2,savex
	move.l	topy,savey
prchr3:	move.l	#textbuffer,a6
	move.l	savex,d0
	lsr.l	#3,d0
	add.l	d0,a6
	moveq.l	#0,d7
	moveq.l	#0,d6
prchr2:	moveq.l	#0,d7
	lea	largchars,a5
	move.b	(a1)+,d7	;get char
	beq	prend2
	cmp.b	#$a1,d7
	beq	cent
	tst.b	d7
	bmi	more_print
	sub.b	#32,d7
	btst	#6,d7
	beq	.lower
.lower	add.l	d7,a5
	move.b	(a5),(a6)
	move.b	68(a5),w_plnw(a6)
	move.b	68*2(a5),w_plnw*2(a6)
	move.b	68*3(a5),w_plnw*3(a6)
	move.b	68*4(a5),w_plnw*4(a6)
	add.l	#1,a6
	bra	prchr2
prend2	move.l	#1,lastline
more_print
	rts
	
cent	move.l	a1,-(sp)
	moveq.l	#1,d0
.lp2:	move.b	(a1)+,d1
	beq	.lp
	bmi	.lp
	add.l	#1,d0
	bra	.lp2
.lp:	move.l	(sp)+,a1
	asl.l	#3,d0			;text length in pixels
	move.l	botx,d1
	sub.l	topx,d1
	add.l	#4,d1
	sub.l	d0,d1
	bmi	prchr2
	beq	prchr2
	lsr.l	#1,d1			;diff /2
	add.l	d1,savex
	bra	prchr3
;----------------------------------
print	movem.l	d0-d7/a0-a6,-(sp)
.print2	moveq	#0,d0
	move.l	w_pln1,a6
	move.b	(a0)+,d0
	add.l	d0,a6
	move.b	(a0)+,d0
	mulu	#$50,d0
	add.l	d0,a6
.prchr	moveq	#0,d0
	lea	largchars,a5
	move.b	(a0)+,d0
	beq	.prend
	bmi.s	.print2
	sub.b	#$20,d0
	btst	#6,d0
	beq	.pr
	sub.b	#$20,d0
.pr	add.l	d0,a5
	tst.l	tcol
	bne	.loop1
	move.b	(a5),(a6)
	move.b	$44(a5),$50(a6)
	move.b	$88(a5),$A0(a6)
	move.b	$CC(a5),$F0(a6)
	move.b	$110(a5),$140(a6)
	lea	menu_planesize(a6),a6
	lea	menu_planesize(a6),a6
	move.b	#0,(a6)
	move.b	#0,$50(a6)
	move.b	#0,$A0(a6)
	move.b	#0,$F0(a6)
	move.b	#0,$140(a6)
.loop	lea	-menu_planesize(a6),a6
	lea	-menu_planesize(a6),a6
	addq.l	#1,a6
	bra.s	.prchr
.loop1	move.b	#0,(a6)
	move.b	#0,$50(a6)
	move.b	#0,$A0(a6)
	move.b	#0,$F0(a6)
	move.b	#0,$140(a6)
	lea	menu_planesize(a6),a6
	lea	menu_planesize(a6),a6
	move.b	(a5),(a6)
	move.b	$44(a5),$50(a6)
	move.b	$88(a5),$A0(a6)
	move.b	$CC(a5),$F0(a6)
	move.b	$110(a5),$140(a6)
	bra.s	.loop
.prend	movem.l	(sp)+,d0-d7/a0-a6
	rts

dec_print
	bsr	textdec
	lea	text_buf(pc),a0
	bra	print

textdec	lea	text_buf(pc),a0
	move.b	d0,(a0)+
	move.b	d1,(a0)+	
	move.l	d2,d5
	moveq	#-1,d6
	moveq	#8,d7
	sub.w	d3,d7
	
	move.l	d2,d1
	move.l	#10000000,d2
	bsr.s	.digit
	move.l	#1000000,d2
	bsr.s	.digit
	move.l	#100000,d2
	bsr.s	.digit
	move.l	#10000,d2
	bsr.s	.digit
	move.l	#1000,d2
	bsr.s	.digit
	move.l	#100,d2
	bsr.s	.digit
	move.l	#10,d2
	bsr.s	.digit
	moveq	#0,d6
	moveq.l	#1,d2

.digit	moveq	#'0'-1,d0

.loop	addq.w	#1,d0
	sub.l	d2,d1
	bcc.s	.loop
	add.l	d2,d1

	cmp.b	#'0',d0
	bne.s	.notzero
	tst.w	d6
	beq.s	.continue
	moveq	#' ',d0
	bra.s	.continue
.notzero
	moveq	#0,d6
.continue
	subq.w	#1,d7
	bpl.s	.notprint
.print	move.b	d0,(a0)+
	move.b	#0,(a0)
.notprint
	rts

text_buf	ds.b	20
tcol		dc.l	0
lastline	dc.l	0
linenum		dc.l	0
;---------------------------------
Blittxt	move.l	savey,d0
	move.l	linenum,d1
	mulu	#7,d1
	add.l	d1,d0
	add.l	#2,d0
	mulu	#w_plnw,d0
	move.l	w_pln1,d1
	add.l	d0,d1
	move.l	savex,d0
	and.l	#7,d0
	swap	d0
	lsr.l	#4,d0
	or.w	#%0000110111111100,d0
	lea	$dff000,a6
	move.l	#textbuffer,$50(a6)		;a source IM
	move.l	d1,$4C(a6)			;B source
	move.l	d1,$54(a6)			;d source
	move.w	#0,$64(a6)			;a mod
	move.w	#0,$62(a6)			;b mod
	move.w	#0,$66(a6)			;d mod
	move.w	#$ffff,$44(a6)			;fw mask
	move.w	#$ffff,$46(a6)			;lw mask
	move.w	d0,$40(a6)			;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	#%0000000101000000+w_plnw/2,$58(a6)	;size		
	WAITBLIT
	rts
;---------------------------------
Blittxt2:				;loose text of pln3 for orange windows
	move.l	savey,d0
	move.l	linenum,d1
	mulu	#7,d1
	add.l	d1,d0
	add.l	#2,d0
	mulu	#w_plnw,d0
	move.l	w_pln3,d1
	add.l	d0,d1
	move.l	savex,d0
	and.l	#7,d0
	swap	d0
	lsr.l	#4,d0
	or.w	#%0000110100000100,d0
	lea	$dff000,a6
	move.l	#textbuffer,$50(a6)		;a source IM
	move.l	d1,$4C(a6)			;B source
	move.l	d1,$54(a6)			;d source
	move.w	#0,$64(a6)			;a mod
	move.w	#0,$62(a6)			;b mod
	move.w	#0,$66(a6)			;d mod
	move.w	#$ffff,$44(a6)			;fw mask
	move.w	#$ffff,$46(a6)			;lw mask
	move.w	d0,$40(a6)	;con0
	move.w	#0,$42(a6)	;con1
	move.w	#%0000000101000000+w_plnw/2,$58(a6)	;size		
	WAITBLIT
	rts
;---------------------------------
doshad:	lea	$dff000,a6			;copy text to shad
	move.l	#textbuffer,$50(a6)		;a source IM
	move.l	#shadbuffer+w_plnw,$54(a6)	;d source
	move.w	#0,$64(a6)			;a mod
	move.w	#0,$66(a6)			;d mod
	move.w	#$ffff,$44(a6)			;fw mask
	move.w	#$ffff,$46(a6)			;lw mask
	move.w	#%0001100111110000,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	#%0000000101000000+w_plnw/2,$58(a6)	;size		
	WAITBLIT
	lea	$dff000,a6			;make sillo
	move.l	#textbuffer,$50(a6)		;a source IM
	move.l	#shadbuffer,$4C(a6)		;B source
	move.l	#shadbuffer,$54(a6)		;d source
	move.w	#0,$64(a6)			;a mod
	move.w	#0,$62(a6)			;b mod
	move.w	#0,$66(a6)			;d mod
	move.w	#$ffff,$44(a6)			;fw mask
	move.w	#$ffff,$46(a6)			;lw mask
	move.w	#%0000110111110011,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	#%0000000110000000+w_plnw/2,$58(a6)	;size		
	WAITBLIT
	move.l	savex,d0				;shift shadow
	and.l	#7,d0
	sub.l	#1,d0
	bmi	.lq
	move.l	d0,d2
	move.l	#-1,d1
	roxr.l	#1,d1
.lq2	lea	shadbuffer+w_plnw,a1
	rept	w_plnw/4
	move.l	(a1),d1
	roxr.l	#1,d1
	move.l	d1,(a1)+
	endr 
	dbra	d0,.lq2
	move.l	d2,d0
.lq3:	lea	shadbuffer+w_plnw*2,a1
	rept	w_plnw/4
	move.l	(a1),d1
	roxr.l	#1,d1
	move.l	d1,(a1)+
	endr 
	dbra	d0,.lq3
	move.l	d2,d0
.lq4:	lea	shadbuffer+w_plnw*3,a1
	rept	w_plnw/4
	move.l	(a1),d1
	roxr.l	#1,d1
	move.l	d1,(a1)+
	endr 
	dbra	d0,.lq4
	move.l	d2,d0
.lq5:	lea	shadbuffer+w_plnw*4,a1
	rept	w_plnw/4
	move.l	(a1),d1
	roxr.l	#1,d1
	move.l	d1,(a1)+
	endr 
	dbra	d0,.lq5
	move.l	d2,d0
.lq6:	lea	shadbuffer+w_plnw*5,a1
	rept	w_plnw/4
	move.l	(a1),d1
	roxr.l	#1,d1
	move.l	d1,(a1)+
	endr 
	dbra	d0,.lq6
.lq:	lea	$dff000,a6			;invert shadow
	move.l	#shadbuffer,$50(a6)		;a source IM
	move.l	#shadbuffer,$54(a6)		;d source
	move.w	#0,$64(a6)			;a mod
	move.w	#0,$66(a6)			;d mod
	move.w	#$ffff,$44(a6)			;fw mask
	move.w	#$ffff,$46(a6)			;lw mask
	move.w	#%0000100100001111,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	#%0000000110000000+w_plnw/2,$58(a6)	;size		
	WAITBLIT
	move.l	savey,d0
	move.l	linenum,d1
	mulu	#7,d1
	add.l	d1,d0
	add.l	#2,d0
	mulu	#w_plnw,d0
	move.l	w_pln2,d1
	add.l	d0,d1
	lea	$dff000,a6
	move.l	#shadbuffer,$50(a6)		;a source IM
	move.l	d1,$4C(a6)			;B source
	move.l	#shadbuffer,$48(a6)		;c source
	move.l	d1,$54(a6)			;d source
	move.w	#0,$64(a6)			;a mod
	move.w	#0,$62(a6)			;b mod
	move.w	#0,$60(a6)			;c mod
	move.w	#0,$66(a6)			;d mod
	move.w	#$ffff,$44(a6)			;fw mask
	move.w	#$ffff,$46(a6)			;lw mask
	move.w	#%0000111100111110,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	#%0000000110000000+w_plnw/2,$58(a6)	;size		
	WAITBLIT
	add.l	#w_plnsize,d1
	lea	$dff000,a6			;put shadow on pln3
	move.l	#shadbuffer,$50(a6)		;a source IM
	move.l	d1,$4C(a6)			;B source
	move.l	d1,$54(a6)			;d source
	move.w	#0,$64(a6)			;a mod
	move.w	#0,$62(a6)			;b mod
	move.w	#0,$66(a6)			;d mod
	move.w	#$ffff,$44(a6)			;fw mask
	move.w	#$ffff,$46(a6)			;lw mask
	move.w	#%0000110111111100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	#%0000000110000000+w_plnw/2,$58(a6)	;size		
	WAITBLIT
	rts
;---------------------------------
orangeshad:
	move.l	savey,d0
	move.l	linenum,d1
	mulu	#7,d1
	add.l	d1,d0
	add.l	#2,d0
	mulu	#w_plnw,d0
	move.l	w_pln1,d1
	add.l	d0,d1
	lea	$dff000,a6			;put shadow on pln3
	move.l	#shadbuffer,$50(a6)		;a source IM
	move.l	d1,$4C(a6)			;B source
	move.l	d1,$54(a6)			;d source
	move.w	#0,$64(a6)			;a mod
	move.w	#0,$62(a6)			;b mod
	move.w	#0,$66(a6)			;d mod
	move.w	#$ffff,$44(a6)			;fw mask
	move.w	#$ffff,$46(a6)			;lw mask
	move.w	#%0000110111111100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	#%0000000110000000+w_plnw/2,$58(a6)	;size		
	WAITBLIT
	add.l	#w_plnsize,d1
	lea	$dff000,a6			;put shadow on pln3
	move.l	#shadbuffer,$50(a6)		;a source IM
	move.l	d1,$4C(a6)			;B source
	move.l	d1,$54(a6)			;d source
	move.w	#0,$64(a6)			;a mod
	move.w	#0,$62(a6)			;b mod
	move.w	#0,$66(a6)			;d mod
	move.w	#$ffff,$44(a6)			;fw mask
	move.w	#$ffff,$46(a6)			;lw mask
	move.w	#%0000110111111100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	#%0000000110000000+w_plnw/2,$58(a6)	;size		
	WAITBLIT
	rts
;---------------------------------
highlight:	
	sub.l	#200,d1
	sub.l	#200,d3
	add.l	#1,d3
	move.l	d0,topx
	move.l	d1,topy
	move.l	d2,botx
	move.l	d3,boty
	move.b	#8,fillcol
	jsr	fillback
	rts
;---------------------------------
Draw:	move.w	#$ffff,d6			; LinePtrn
	bra	draw_line

unDraw	move.w	#$0,d6			; LinePtrn

draw_line:
	moveq	#$f,d4
	and.w	d2,d4				; low 4 bits
	sub.w	d3,d1				; Height
	mulu	#w_plnw,d3			; Start address
	sub.w	d2,d0				; Width
	blt.s	No1
	tst.w	d1
	blt.s	No2
	cmp.w	d0,d1
	bge.s	No3
	moveq	#$11,d7
	bra.s	OctSel				; Octant #
No3	moveq	#1,d7
	exg	d1,d0
OctSel	bra.s	No4
No2	neg.w	d1
	cmp.w	d0,d1
	bge.s	Skip
	moveq	#$19,d7
	bra.s	No4
Skip	moveq	#5,d7
	exg	d1,d0
No4	bra.s	OctsSel
No1	neg.w	d0
	tst.w	d1
	blt.s	No11
	cmp.w	d0,d1
	bge.s	No12
	moveq	#$15,d7
	bra.s	OctSel2
No12	moveq	#9,d7
	exg	d1,d0
OctSel2	bra.s	OctsSel

No11	neg.w	d1
	cmp.w	d0,d1
	bge.s	No13
	moveq	#$1d,d7
	bra.s	OctsSel
No13	moveq	#$d,d7
	exg	d1,d0
OctsSel	add.w	d1,d1
	asr.w	#3,d2
	ext.l	d2
	add.l	d2,d3				; Total offset
	move.w	d1,d2
	sub.w	d0,d2
	bge.s	NoMinus
	ori.w	#$40,d7				; Sign = -

NoMinus	lea	$dff000,a6
	move.w	d2,a3
	WAITBLIT
	move.w	d1,$62(a6)			; 4Y
	move.w	d2,d1
	sub.w	d0,d1
	move.w	d1,$64(a6)			; 4Y-4X
	moveq	#-1,d1
	move.l	d1,$44(a6)			; AFWM+ALWM
	move.w	#w_plnw,$60(a6)			; BitMap Width in bytes
	move.w	d7,d5
	addq.w	#1,d0
	asl.w	#6,d0
	addq.w	#2,d0				; Blitsize
	move.w	d4,d2
	swap	d4
	asr.l	#4,d4				; First pixelpos
	ori.w	#$b00,d4			; Use ABD
	move.w	#$8000,$74(a6)			; Index
	clr.w	d1
NoSpesh	move.l	DrawPlane,d7			; Pointer
	swap	d5
	move.w	d4,d5
	move.b	#$ca,d5			; MinTerms
	swap	d5
	add.l	d3,d7
	move.l	linecol,d1
	btst.l	#0,d1
	beq	.lp
	WAITBLIT
	move.l	d5,$40(a6)			; BltCon0 & 1
	move.w	a3,$52(a6)			; 2Y-X
	move.l	d7,$48(a6)
	move.l	d7,$54(a6)			; Start address of line
	move.w	d6,$72(a6)			; Pattern
	move.w	d0,$58(a6)			; Size
.lp:	add.l	#w_plnsize,d7
	btst.l	#1,d1
	beq	.lp2
	WAITBLIT
	move.l	d5,$40(a6)			; BltCon0 & 1
	move.w	a3,$52(a6)			; 2Y-X
	move.l	d7,$48(a6)
	move.l	d7,$54(a6)			; Start address of line
	move.w	d6,$72(a6)			; Pattern
	move.w	d0,$58(a6)			; Size
.lp2:	add.l	#w_plnsize,d7
	btst.l	#2,d1
	beq	.lp3
	WAITBLIT
	move.l	d5,$40(a6)			; BltCon0 & 1
	move.w	a3,$52(a6)			; 2Y-X
	move.l	d7,$48(a6)
	move.l	d7,$54(a6)			; Start address of line
	move.w	d6,$72(a6)			; Pattern
	move.w	d0,$58(a6)			; Size
.lp3	add.l	#w_plnsize,d7
	btst.l	#3,d1
	beq	.lp4
	WAITBLIT
	move.l	d5,$40(a6)			; BltCon0 & 1
	move.w	a3,$52(a6)			; 2Y-X
	move.l	d7,$48(a6)
	move.l	d7,$54(a6)			; Start address of line
	move.w	d6,$72(a6)			; Pattern
	move.w	d0,$58(a6)			; Size
.lp4	add.l	#w_plnsize,d7
	btst.l	#4,d1
	beq	.lp5
	WAITBLIT
	move.l	d5,$40(a6)			; BltCon0 & 1
	move.w	a3,$52(a6)			; 2Y-X
	move.l	d7,$48(a6)
	move.l	d7,$54(a6)			; Start address of line
	move.w	d6,$72(a6)			; Pattern
	move.w	d0,$58(a6)			; Size
.lp5
	WAITBLIT
	rts

linecol:	dc.l	0
DrawPlane:	dc.l	0
;-------------------------------
clrback:	
	move.l	#0,addit
	move.l	topx,d0		;top
	move.l	topy,d1
	move.l	botx,d2
	move.l	boty,d3
	lsr.l	#4,d0		;words
	asl.l	#1,d0		;even
	mulu	#w_plnw,d1		;ypos
	move.l	w_pln1,d4		;screenbase
	add.l	d1,d4
	add.l	d0,d4		;start address
	move.l	d4,d0
	sub.l	topx,d2		;width
	sub.l	topy,d3		;height
	move.l	#w_plnw,d4
	lsr.l	#4,d2		;width in words
	add.l	#1,d2
	sub.l	d2,d4
	sub.l	d2,d4		;modulo
	asl.l	#6,d3
	or.w	d3,d2
	move.l	topx,d5
	and.l	#$f,d5
	asl.l	#1,d5
	lea	fwmask,a1
	move.w	(a1,d5),fw
	move.l	botx,d5
	and.l	#$f,d5
	asl.l	#1,d5
	lea	lwmask,a1
	move.w	(a1,d5),lw
	move.l	topx,d6
	move.l	botx,d7
	and.l	#15,d6
	and.l	#15,d7
	cmp.l	d6,d7
	beq	.lpa
	bgt	.lpa	
	move.l	#2,addit
.lpa:	sub.l	addit,d4		;from modulo
	move.l	addit,d6
	lsr.l	#1,d6
	add.l	d6,d2			;size
	lea	$dff000,a6
	move.w	#-1,$74(a6)			;a source IM
	move.l	d0,$4C(a6)			;B source
	move.l	d0,$54(a6)			;d source
	move.w	#$0000,$64(a6)			;a mod
	move.w	d4,$62(a6)			;b mod
	move.w	d4,$66(a6)			;d mod
	move.w	fw,$44(a6)			;fw mask
	move.w	lw,$46(a6)			;lw mask
	move.w	#%0000010100001100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	d2,$58(a6)			;size		
	WAITBLIT
	add.l	#w_plnsize,d0
	move.w	#-1,$74(a6)			;a source IM
	move.l	d0,$4C(a6)			;B source
	move.l	d0,$54(a6)			;d source
	move.w	#$0000,$64(a6)			;a mod
	move.w	d4,$62(a6)			;b mod
	move.w	d4,$66(a6)			;d mod
	move.w	fw,$44(a6)			;fw mask
	move.w	lw,$46(a6)			;lw mask
	move.w	#%0000010100001100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	d2,$58(a6)			;size		
	WAITBLIT
	add.l	#w_plnsize,d0
	move.w	#-1,$74(a6)			;a source IM
	move.l	d0,$4C(a6)			;B source
	move.l	d0,$54(a6)			;d source
	move.w	#$0000,$64(a6)			;a mod
	move.w	d4,$62(a6)			;b mod
	move.w	d4,$66(a6)			;d mod
	move.w	fw,$44(a6)			;fw mask
	move.w	lw,$46(a6)			;lw mask
	move.w	#%0000010100001100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	d2,$58(a6)			;size		
	WAITBLIT
	rts
;-------------------------------
fillback:	
	move.l	#0,addit
	move.l	topx,d0		;top
	move.l	topy,d1
	move.l	botx,d2
	move.l	boty,d3
	lsr.l	#4,d0		;words
	asl.l	#1,d0		;even
	mulu	#w_plnw,d1		;ypos
	move.l	w_pln1,d4		;screenbase
	add.l	d1,d4
	add.l	d0,d4		;start address
	move.l	d4,d0
	sub.l	topx,d2		;width
	sub.l	topy,d3		;height
	move.l	#w_plnw,d4
	lsr.l	#4,d2		;width in words
	add.l	#1,d2
	sub.l	d2,d4
	sub.l	d2,d4		;modulo
	asl.l	#6,d3
	or.w	d3,d2
	move.l	topx,d5
	and.l	#$f,d5
	asl.l	#1,d5
	lea	fwmask,a1
	move.w	(a1,d5),fw
	move.l	botx,d5
	and.l	#$f,d5
	asl.l	#1,d5
	lea	lwmask,a1
	move.w	(a1,d5),lw
	move.l	topx,d6
	move.l	botx,d7
	and.l	#15,d6
	and.l	#15,d7
	cmp.l	d6,d7
	beq	.lpa
	bgt	.lpa	
	move.l	#2,addit
.lpa:	sub.l	addit,d4		;from modulo
	move.l	addit,d6
	lsr.l	#1,d6
	add.l	d6,d2			;size
	lea	$dff000,a6
	btst.b	#0,fillcol
	beq	.lp
	move.w	#-1,$74(a6)			;a source IM
	move.l	d0,$4C(a6)			;B source
	move.l	d0,$54(a6)			;d source
	move.w	#$0000,$64(a6)			;a mod
	move.w	d4,$62(a6)			;b mod
	move.w	d4,$66(a6)			;d mod
	move.w	fw,$44(a6)			;fw mask
	move.w	lw,$46(a6)			;lw mask
	move.w	#%0000010111111100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	d2,$58(a6)			;size		
.lp
	WAITBLIT
	add.l	#w_plnsize,d0
	btst.b	#1,fillcol
	beq	.lp2
	move.w	#-1,$74(a6)			;a source IM
	move.l	d0,$4C(a6)			;B source
	move.l	d0,$54(a6)			;d source
	move.w	#$0000,$64(a6)			;a mod
	move.w	d4,$62(a6)			;b mod
	move.w	d4,$66(a6)			;d mod
	move.w	fw,$44(a6)			;fw mask
	move.w	lw,$46(a6)			;lw mask
	move.w	#%0000010111111100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	d2,$58(a6)			;size		
.lp2
	WAITBLIT
	add.l	#w_plnsize,d0
	btst.b	#2,fillcol
	beq	.lp3
	move.w	#-1,$74(a6)			;a source IM
	move.l	d0,$4C(a6)			;B source
	move.l	d0,$54(a6)			;d source
	move.w	#$0000,$64(a6)			;a mod
	move.w	d4,$62(a6)			;b mod
	move.w	d4,$66(a6)			;d mod
	move.w	fw,$44(a6)			;fw mask
	move.w	lw,$46(a6)			;lw mask
	move.w	#%0000010111111100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	d2,$58(a6)			;size		
.lp3
	WAITBLIT
	add.l	#w_plnsize,d0
	btst.b	#3,fillcol
	beq	.lp4
	move.w	#-1,$74(a6)			;a source IM
	move.l	d0,$4C(a6)			;B source
	move.l	d0,$54(a6)			;d source
	move.w	#$0000,$64(a6)			;a mod
	move.w	d4,$62(a6)			;b mod
	move.w	d4,$66(a6)			;d mod
	move.w	fw,$44(a6)			;fw mask
	move.w	lw,$46(a6)			;lw mask
	move.w	#%0000010111111100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	d2,$58(a6)			;size		
.lp4
	WAITBLIT
	rts
;-------------------------------
window_replace
	rts
;-------------------------------
window_copy:	
	rts
;--------------------------------
window_redraw:	
	rts
;--------------------------------
window_dealloc
	rts

window_size	dc.l	0
window_plane	dc.l	0
;------------------------------------------
clrtop:	
	move.l	#0,addit
	move.l	topx,d0
	move.l	topy,d1
	move.l	botx,d2
	move.l	boty,d3
	lsr.l	#4,d0		;words
	asl.l	#1,d0		;even
	mulu	#w_plnw,d1		;ypos
	move.l	w_pln4,d4		;screenbase
	add.l	d1,d4
	add.l	d0,d4		;start address
	move.l	d4,d0
	sub.l	topx,d2		;width
	sub.l	topy,d3		;height
	move.l	#w_plnw,d4
	lsr.l	#4,d2		;width in words
	add.l	#1,d2
	sub.l	d2,d4
	sub.l	d2,d4		;modulo
	asl.l	#6,d3
	or.w	d3,d2
	move.l	topx,d5
	and.l	#$f,d5
	asl.l	#1,d5
	lea	fwmask,a1
	move.w	(a1,d5),fw
	move.l	botx,d5
	and.l	#$f,d5
	asl.l	#1,d5
	lea	lwmask,a1
	move.w	(a1,d5),lw
	move.l	topx,d6
	move.l	botx,d7
	and.l	#15,d6
	and.l	#15,d7
	cmp.l	d6,d7
	beq	.lpa
	bgt	.lpa	
	move.l	#2,addit
.lpa:	sub.l	addit,d4		;from modulo
	move.l	addit,d6
	lsr.l	#1,d6
	add.l	d6,d2			;size
	lea	$dff000,a6
	move.w	#-1,$74(a6)			;a source IM
	move.l	d0,$4C(a6)			;B source
	move.l	d0,$54(a6)			;d source
	move.w	#$0000,$64(a6)			;a mod
	move.w	d4,$62(a6)			;b mod
	move.w	d4,$66(a6)			;d mod
	move.w	fw,$44(a6)			;fw mask
	move.w	lw,$46(a6)			;lw mask
	move.w	#%0000010100001100,$40(a6)	;con0
	move.w	#%0000000000000000,$42(a6)	;con1
	move.w	d2,$58(a6)			;size		
	WAITBLIT
	rts

addit	dc.l	0
fillcol	dc.l	0
fwmask	dc.w	%1111111111111111
	dc.w	%0111111111111111
	dc.w	%0011111111111111
	dc.w	%0001111111111111
	dc.w	%0000111111111111
	dc.w	%0000011111111111
	dc.w	%0000001111111111
	dc.w	%0000000111111111
	dc.w	%0000000011111111
	dc.w	%0000000001111111
	dc.w	%0000000000111111
	dc.w	%0000000000011111
	dc.w	%0000000000001111
	dc.w	%0000000000000111
	dc.w	%0000000000000011
	dc.w	%0000000000000001
lwmask	dc.w	%1000000000000000
	dc.w	%1100000000000000
	dc.w	%1110000000000000
	dc.w	%1111000000000000
	dc.w	%1111100000000000
	dc.w	%1111110000000000
	dc.w	%1111111000000000
	dc.w	%1111111100000000
	dc.w	%1111111110000000
	dc.w	%1111111111000000
	dc.w	%1111111111100000
	dc.w	%1111111111110000
	dc.w	%1111111111111000
	dc.w	%1111111111111100
	dc.w	%1111111111111110
	dc.w	%1111111111111111
fw	dc.w	0
lw	dc.w	0
topx	dc.l	0
botx	dc.l	0
topy	dc.l	0
boty	dc.l	0
savex	dc.l	0
savey	dc.l	0
w_pln1	dc.l	0
w_pln2	dc.l	0
w_pln3	dc.l	0
w_pln4	dc.l	0
;------------------------------------------
