
; Storm C Compiler
; Bud:C_SRC/powerpc/PPC-mandel2/MandelDemo.c
	mc68030
	mc68881
	XREF	_difftime__r
	XREF	_clock
	XREF	_strlen
	XREF	_sin__r
	XREF	_sprintf
	XREF	_DrawMandelbrot
	XREF	_DOSBase
	XREF	_IconBase
	XREF	_IntuitionBase
	XREF	_AslBase
	XREF	_SysBase
	XREF	_GfxBase
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err

	SECTION ":0",CODE


;static ULONG getit(
_getit
L92	EQU	0
	link	a5,#L92
L89
;	if (msg)
	cmp.w	#0,a1
	beq.b	L91
L90
;		gfxbuf = *msg;
	move.l	a1,a0
	lea	_gfxbuf,a1
	moveq	#$C,d0
L93
	move.w	(a0)+,(a1)+
	dbra	d0,L93
L91
;	foo = "GetIt()";
	move.l	#L88,_foo
;	return 0;
	moveq	#0,d0
	unlk	a5
	rts

;static ULONG drawit(
_drawit
L96	EQU	0
	link	a5,#L96
	move.l	a6,-(a7)
L95
;	CopyMem(gfxbuf.memptr,msg->memptr,msg->ysize*msg->bytesperrow);
	moveq	#0,d1
	move.w	$14(a1),d1
	move.l	$10(a1),d0
	mulu.l	d1,d0
	move.l	_gfxbuf,a0
	move.l	_SysBase,a6
	move.l	(a1),a1
	jsr	-$270(a6)
;	foo = "DrawIt()";
	move.l	#L94,_foo
;	return 0;
	moveq	#0,d0
	move.l	(a7)+,a6
	unlk	a5
	rts

;void TextOutXY(struct RastPort *rp,long x, long y,  STRPTR s)
	XDEF	_TextOutXY
_TextOutXY
L98	EQU	0
	link	a5,#L98
	movem.l	a2/a3/a6,-(a7)
	movem.l	$C(a5),d0/d1/a2
	move.l	$8(a5),a3
L97
;	Move(rp,x,y);
	move.l	_GfxBase,a6
	move.l	a3,a1
	jsr	-$F0(a6)
;	Text(rp,s,strlen(s));
	move.l	a2,-(a7)
	jsr	_strlen
	addq.w	#4,a7
	move.l	_GfxBase,a6
	move.l	a2,a0
	move.l	a3,a1
	jsr	-$3C(a6)
	movem.l	(a7)+,a2/a3/a6
	unlk	a5
	rts

;void TextOut(struct RastPort *rp,STRPTR s)
	XDEF	_TextOut
_TextOut
L100	EQU	0
	link	a5,#L100
	movem.l	a2/a6,-(a7)
	movem.l	$8(a5),a2/a6
L99
;	Text(rp,s,strlen(s));
	move.l	a6,-(a7)
	jsr	_strlen
	addq.w	#4,a7
	move.l	a6,a0
	move.l	_GfxBase,a6
	move.l	a2,a1
	jsr	-$3C(a6)
	movem.l	(a7)+,a2/a6
	unlk	a5
	rts

;static void DrawMandelInfo(struct RastPort *rp, int N, Rect &view)
_DrawMandelInfo
L105	EQU	-$44
	link	a5,#L105
	movem.l	d2/d3/a2/a3/a6,-(a7)
	movem.l	$C(a5),d3/a3
	move.l	$8(a5),a2
L104
;	ULONG h = rp->TxHeight;
	move.l	a2,a0
	moveq	#0,d2
	move.w	$3A(a0),d2
;	SetDrMd(rp,JAM2);
	move.l	_GfxBase,a6
	moveq	#1,d0
	move.l	a2,a1
	jsr	-$162(a6)
;	SetAPen(rp,0);
	move.l	_GfxBase,a6
	moveq	#0,d0
	move.l	a2,a1
	jsr	-$156(a6)
;	SetBPen(rp,1);
	move.l	_GfxBase,a6
	moveq	#1,d0
	move.l	a2,a1
	jsr	-$15C(a6)
;	sprintf(buf,", Depth: %ld",N);
	move.l	d3,-(a7)
	move.l	#L101,-(a7)
	pea	-$40(a5)
	jsr	_sprintf
	add.w	#$C,a7
;	TextOutXY(rp,0,rp->TxBaseline,buf);
	pea	-$40(a5)
	move.l	a2,a0
	moveq	#0,d0
	move.w	$3E(a0),d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	a2,-(a7)
	jsr	_TextOutXY
	add.w	#$10,a7
;	sprintf(buf,"From: (%g,%g)",view.x0,view.y0);
	move.l	a3,a0
	move.l	$C(a0),-(a7)
	move.l	$8(a0),-(a7)
	move.l	a3,a0
	fmove.d	(a0),fp0
	fmove.d	fp0,-(a7)
	move.l	#L102,-(a7)
	pea	-$40(a5)
	jsr	_sprintf
	add.w	#$18,a7
;	TextOutXY(rp,0,rp->cp_y+h,buf);
	pea	-$40(a5)
	move.l	a2,a0
	move.w	$26(a0),d0
	ext.l	d0
	add.l	d2,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	a2,-(a7)
	jsr	_TextOutXY
	add.w	#$10,a7
;	sprintf(buf,"To:   (%g,%g)",view.x1,view.y1);
	move.l	a3,a0
	move.l	$1C(a0),-(a7)
	move.l	$18(a0),-(a7)
	move.l	a3,a0
	move.l	$14(a0),-(a7)
	move.l	$10(a0),-(a7)
	move.l	#L103,-(a7)
	pea	-$40(a5)
	jsr	_sprintf
	add.w	#$18,a7
;	TextOutXY(rp,0,rp->cp_y+h,buf);
	pea	-$40(a5)
	move.l	a2,a0
	move.w	$26(a0),d0
	ext.l	d0
	add.l	d2,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	a2,-(a7)
	jsr	_TextOutXY
	add.w	#$10,a7
	movem.l	(a7)+,d2/d3/a2/a3/a6
	unlk	a5
	rts

;void ScrollView(Window *window,DrawMsg *gfxport,long dx, long dy)
	XDEF	_ScrollView
_ScrollView
L137	EQU	-$8C
	link	a5,#L137
	movem.l	d2-d7/a2/a3/a6,-(a7)
	move.l	$C(a5),a3
L106
;	if (window && gfxport && gfxport->memptr)
	tst.l	$8(a5)
	beq	L136
L107
	cmp.w	#0,a3
	beq	L136
L108
	move.l	a3,a1
	tst.l	(a1)
	beq	L136
L109
;	
;		long w = window->Width - window->BorderLeft - window->BorderRigh
	move.l	$8(a5),a0
	move.w	$8(a0),d0
	ext.l	d0
	move.l	d0,-$8(a5)
	move.l	$8(a5),a0
	move.b	$36(a0),d0
	extb.l	d0
	sub.l	d0,-$8(a5)
	move.l	$8(a5),a0
	move.b	$38(a0),d0
	extb.l	d0
	sub.l	d0,-$8(a5)
	subq.l	#1,-$8(a5)
;		long h = window->Height - window->BorderBottom - window->BorderT
	move.l	$8(a5),a0
	move.w	$A(a0),d0
	ext.l	d0
	move.l	d0,d7
	move.l	$8(a5),a0
	move.b	$39(a0),d0
	extb.l	d0
	move.l	d7,d1
	sub.l	d0,d1
	move.l	$8(a5),a0
	move.b	$37(a0),d0
	extb.l	d0
	sub.l	d0,d1
	move.l	d1,d0
	subq.l	#1,d0
	move.l	d0,d7
;		long x = window->LeftEdge + window->BorderLeft;
	move.l	$8(a5),a0
	move.w	4(a0),d0
	ext.l	d0
	move.l	$8(a5),a0
	move.b	$36(a0),d1
	extb.l	d1
	add.l	d1,d0
;		long y = window->TopEdge + window->BorderTop;
	move.l	$8(a5),a0
	move.w	6(a0),d1
	ext.l	d1
	move.l	$8(a5),a0
	move.b	$37(a0),d2
	extb.l	d2
	add.l	d2,d1
;		long x1 = x0
	move.l	_x0,d4
;		long x1 = x0,y1 = y0;
	move.l	_y0,d3
;		x0 += dx;
	move.l	_x0,d2
	add.l	$10(a5),d2
	move.l	d2,_x0
;		y0 += dy;
	move.l	_y0,d2
	add.l	$14(a5),d2
	move.l	d2,_y0
;		if (x0 < 0) 
	tst.l	_x0
	bpl.b	L111
L110
;		if (x0 < 0) x0 = 0;
	clr.l	_x0
L111
;		if (x0 > width - w) 
	move.l	_width,d2
	sub.l	-$8(a5),d2
	move.l	_x0,d5
	cmp.l	d2,d5
	ble.b	L113
L112
;		if (x0 > width - w) x0 = width - w;
	move.l	_width,d2
	sub.l	-$8(a5),d2
	move.l	d2,_x0
L113
;		if (y0 < 0) 
	tst.l	_y0
	bpl.b	L115
L114
;		if (y0 < 0) y0 = 0;
	clr.l	_y0
L115
;		if (y0 > height - h) 
	move.l	_height,d2
	sub.l	d7,d2
	move.l	_y0,d5
	cmp.l	d2,d5
	ble.b	L117
L116
;		if (y0 > height - h) y0 = height - h;
	move.l	_height,d2
	sub.l	d7,d2
	move.l	d2,_y0
L117
;		dx = x0 - x1;
	move.l	_x0,d2
	sub.l	d4,d2
	move.l	d2,$10(a5)
;		dy = y0 - y1;
	move.l	_y0,d2
	sub.l	d3,d2
	move.l	d2,$14(a5)
;		if (dx || dy)
	tst.l	$10(a5)
	bne.b	L119
L118
	tst.l	$14(a5)
	beq	L136
L119
;		
;			struct BitMap *map = window->RPort->BitMap;
	move.l	$8(a5),a1
	move.l	$32(a1),a0
	move.l	4(a0),a0
;			struct RastPort *rp = window->RPort;
	move.l	$8(a5),a2
	move.l	$32(a2),a1
;			if (dx < 0)
	tst.l	$10(a5)
	bpl	L126
L120
;			
;				if (dy == 0)
	tst.l	$14(a5)
	bne.b	L122
L121
;				
;					BltBitMapRastPort(map,x,y,rp,-dx,dy,w+dx,h+1,0xc0);
	move.l	d7,d5
	addq.l	#1,d5
	move.l	-$8(a5),d4
	add.l	$10(a5),d4
	move.l	$10(a5),d2
	neg.l	d2
	move.l	_GfxBase,a6
	move.l	$14(a5),d3
	move.l	#$C0,d6
	jsr	-$25E(a6)
;					addr = (long)gfxport->memptr + x0 + y0 * gfxport->bytesper
	move.l	a3,a0
	move.l	(a0),d5
	add.l	_x0,d5
	move.l	a3,a0
	moveq	#0,d0
	move.w	$14(a0),d0
	muls.l	_y0,d0
	add.l	d0,d5
;					WriteChunkyPixels(window->RPort,0,0,-dx,h,(UBYTE*)addr,gfx
	move.l	a3,a0
	moveq	#0,d4
	move.w	$14(a0),d4
	move.l	$10(a5),d2
	neg.l	d2
	move.l	$8(a5),a1
	move.l	_GfxBase,a6
	moveq	#0,d0
	moveq	#0,d1
	move.l	d7,d3
	move.l	$32(a1),a0
	move.l	d5,a2
	jsr	-$420(a6)
	bra	L136
L122
;				else if (dy > 0)
	move.l	$14(a5),d2
	cmp.l	#0,d2
	ble.b	L124
L123
;				
;					BltBitMapRastPort(map,x,y,rp,-dx,dy,w+dx,h-dy+1,0xc0);
	move.l	d7,d5
	sub.l	$14(a5),d5
	addq.l	#1,d5
	move.l	-$8(a5),d4
	add.l	$10(a5),d4
	move.l	$10(a5),d2
	neg.l	d2
	move.l	_GfxBase,a6
	move.l	$14(a5),d3
	move.l	#$C0,d6
	jsr	-$25E(a6)
;					addr = (long)gfxport->memptr + x0 + y0 * gfxport->bytesper
	move.l	a3,a0
	move.l	(a0),d5
	add.l	_x0,d5
	move.l	a3,a0
	moveq	#0,d0
	move.w	$14(a0),d0
	muls.l	_y0,d0
	add.l	d0,d5
;					WriteChunkyPixels(window->RPort,0,0,-dx,h,(UBYTE*)addr,gfx
	move.l	a3,a0
	moveq	#0,d4
	move.w	$14(a0),d4
	move.l	$10(a5),d2
	neg.l	d2
	move.l	$8(a5),a1
	move.l	_GfxBase,a6
	moveq	#0,d0
	moveq	#0,d1
	move.l	d7,d3
	move.l	$32(a1),a0
	move.l	d5,a2
	jsr	-$420(a6)
	bra	L136
L124
;				
;					BltBitMapRastPort(map,x,y-dy,rp,-dx,0,w+dx,h+dy+1,0xc0);
	move.l	d7,d5
	add.l	$14(a5),d5
	addq.l	#1,d5
	move.l	-$8(a5),d4
	add.l	$10(a5),d4
	move.l	$10(a5),d2
	neg.l	d2
	sub.l	$14(a5),d1
	move.l	_GfxBase,a6
	moveq	#0,d3
	move.l	#$C0,d6
	jsr	-$25E(a6)
;					addr = (long)gfxport->memptr + x0 + y0 * gfxport->bytesper
	move.l	a3,a0
	move.l	(a0),d5
	add.l	_x0,d5
	move.l	a3,a0
	moveq	#0,d0
	move.w	$14(a0),d0
	muls.l	_y0,d0
	add.l	d0,d5
;					WriteChunkyPixels(window->RPort,0,0,-dx,h,(UBYTE*)addr,gfx
	move.l	a3,a0
	moveq	#0,d4
	move.w	$14(a0),d4
	move.l	$10(a5),d2
	neg.l	d2
	move.l	$8(a5),a1
	move.l	_GfxBase,a6
	moveq	#0,d0
	moveq	#0,d1
	move.l	d7,d3
	move.l	$32(a1),a0
	move.l	d5,a2
	jsr	-$420(a6)
L125
	bra	L136
L126
;			else if (dx > 0)
	move.l	$10(a5),d2
	cmp.l	#0,d2
	ble	L133
L127
;			
;				if (dy == 0)
	tst.l	$14(a5)
	bne	L129
L128
;				
;					BltBitMapRastPort(map,x+dx,y,rp,0,dy,w-dx,h+1,0xc0);
	move.l	d7,d5
	addq.l	#1,d5
	move.l	-$8(a5),d4
	sub.l	$10(a5),d4
	add.l	$10(a5),d0
	move.l	_GfxBase,a6
	moveq	#0,d2
	move.l	$14(a5),d3
	move.l	#$C0,d6
	jsr	-$25E(a6)
;					addr = (long)gfxport->memptr + x0 + w - dx + y0 * gfxport-
	move.l	a3,a0
	move.l	(a0),d5
	add.l	_x0,d5
	add.l	-$8(a5),d5
	sub.l	$10(a5),d5
	move.l	a3,a0
	moveq	#0,d0
	move.w	$14(a0),d0
	muls.l	_y0,d0
	add.l	d0,d5
;					WriteChunkyPixels(window->RPort,w-dx,0,w,h,(UBYTE*)addr,gf
	move.l	a3,a0
	moveq	#0,d4
	move.w	$14(a0),d4
	move.l	-$8(a5),d0
	sub.l	$10(a5),d0
	move.l	$8(a5),a1
	move.l	_GfxBase,a6
	moveq	#0,d1
	move.l	-$8(a5),d2
	move.l	d7,d3
	move.l	$32(a1),a0
	move.l	d5,a2
	jsr	-$420(a6)
	bra	L136
L129
;				else if (dy > 0)
	move.l	$14(a5),d2
	cmp.l	#0,d2
	ble.b	L131
L130
;				
;					BltBitMapRastPort(map,x,y,rp,dx,dy,w-dx,h-dy+1,0xc0);
	move.l	d7,d5
	sub.l	$14(a5),d5
	addq.l	#1,d5
	move.l	-$8(a5),d4
	sub.l	$10(a5),d4
	move.l	_GfxBase,a6
	move.l	$10(a5),d2
	move.l	$14(a5),d3
	move.l	#$C0,d6
	jsr	-$25E(a6)
;					addr = (long)gfxport->memptr + x0 + y0 * gfxport->bytesper
	move.l	a3,a0
	move.l	(a0),d5
	add.l	_x0,d5
	move.l	a3,a0
	moveq	#0,d0
	move.w	$14(a0),d0
	muls.l	_y0,d0
	add.l	d0,d5
;					WriteChunkyPixels(window->RPort,0,0,dx,h,(UBYTE*)addr,gfxp
	move.l	a3,a0
	moveq	#0,d4
	move.w	$14(a0),d4
	move.l	$8(a5),a1
	move.l	_GfxBase,a6
	moveq	#0,d0
	moveq	#0,d1
	move.l	$10(a5),d2
	move.l	d7,d3
	move.l	$32(a1),a0
	move.l	d5,a2
	jsr	-$420(a6)
	bra	L136
L131
;				
;					BltBitMapRastPort(map,x,y-dy,rp,dx,0,w-dx,h+dy+1,0xc0);
	move.l	d7,d5
	add.l	$14(a5),d5
	addq.l	#1,d5
	move.l	-$8(a5),d4
	sub.l	$10(a5),d4
	sub.l	$14(a5),d1
	move.l	_GfxBase,a6
	move.l	$10(a5),d2
	moveq	#0,d3
	move.l	#$C0,d6
	jsr	-$25E(a6)
;					addr = (long)gfxport->memptr + x0 + y0 * gfxport->bytesper
	move.l	a3,a0
	move.l	(a0),d5
	add.l	_x0,d5
	move.l	a3,a0
	moveq	#0,d0
	move.w	$14(a0),d0
	muls.l	_y0,d0
	add.l	d0,d5
;					WriteChunkyPixels(window->RPort,0,0,dx,h,(UBYTE*)addr,gfxp
	move.l	a3,a0
	moveq	#0,d4
	move.w	$14(a0),d4
	move.l	$8(a5),a1
	move.l	_GfxBase,a6
	moveq	#0,d0
	moveq	#0,d1
	move.l	$10(a5),d2
	move.l	d7,d3
	move.l	$32(a1),a0
	move.l	d5,a2
	jsr	-$420(a6)
L132
	bra	L136
L133
;			
;				if (dy < 0)
	tst.l	$14(a5)
	bpl	L135
L134
;				
;					BltBitMapRastPort(map,x,y,rp,0,-dy,w,h+dy+1,0xc0);
	move.l	d7,d5
	add.l	$14(a5),d5
	addq.l	#1,d5
	move.l	$14(a5),d3
	neg.l	d3
	move.l	_GfxBase,a6
	moveq	#0,d2
	move.l	-$8(a5),d4
	move.l	#$C0,d6
	jsr	-$25E(a6)
;					addr = (long)gfxport->memptr + x0 + y0 * gfxport->bytesper
	move.l	a3,a0
	move.l	(a0),d5
	add.l	_x0,d5
	move.l	a3,a0
	moveq	#0,d0
	move.w	$14(a0),d0
	muls.l	_y0,d0
	add.l	d0,d5
;					WriteChunkyPixels(window->RPort,0,0,w,-dy,(UBYTE*)addr,gfx
	move.l	a3,a0
	moveq	#0,d4
	move.w	$14(a0),d4
	move.l	$14(a5),d3
	neg.l	d3
	move.l	$8(a5),a1
	move.l	_GfxBase,a6
	moveq	#0,d0
	moveq	#0,d1
	move.l	-$8(a5),d2
	move.l	$32(a1),a0
	move.l	d5,a2
	jsr	-$420(a6)
	bra	L136
L135
;				
;					BltBitMapRastPort(map,x,y+dy,rp,0,0,w,h-dy+1,0xc0);
	move.l	d7,d5
	sub.l	$14(a5),d5
	addq.l	#1,d5
	add.l	$14(a5),d1
	move.l	_GfxBase,a6
	moveq	#0,d2
	moveq	#0,d3
	move.l	-$8(a5),d4
	move.l	#$C0,d6
	jsr	-$25E(a6)
;					addr = (long)gfxport->memptr + x0 + (y0 + h) * gfxport->by
	move.l	a3,a0
	move.l	(a0),d5
	add.l	_x0,d5
	move.l	_y0,d0
	add.l	d7,d0
	move.l	a3,a0
	moveq	#0,d1
	move.w	$14(a0),d1
	muls.l	d1,d0
	add.l	d0,d5
;					WriteChunkyPixels(window->RPort,0,h-dy,w,h,(UBYTE*)addr,gf
	move.l	a3,a0
	moveq	#0,d4
	move.w	$14(a0),d4
	move.l	d7,d1
	sub.l	$14(a5),d1
	move.l	$8(a5),a1
	move.l	_GfxBase,a6
	moveq	#0,d0
	move.l	-$8(a5),d2
	move.l	d7,d3
	move.l	$32(a1),a0
	move.l	d5,a2
	jsr	-$420(a6)
L136
	movem.l	(a7)+,d2-d7/a2/a3/a6
	unlk	a5
	rts

;void main()
	XDEF	_main
_main
L236	EQU	-$30C
	link	a5,#L236
	movem.l	d2-d7/a2/a3/a6,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
L144
;	gethook.h_Entry = (ULONG (*)())getit;
	move.l	#_getit,-$10(a5)
;	drawhook.h_Entry = (ULONG (*)())drawit;
	move.l	#_drawit,-$24(a5)
;	for (i = 0;
	moveq	#0,d2
	bra.b	L146
L145
;	
;		lut[i] = (int) (sin(2.0*PI/256.0*(double) i)*127.0 + 127.0);
	fmove.l	d2,fp0
	fmul.d	#$.3F9921FB.54442D0F,fp0
	fmove.d	fp0,-(a7)
	jsr	_sin__r
	addq.w	#$8,a7
	fmul.d	#$.405FC000.00000000,fp0
	fadd.d	#$.405FC000.00000000,fp0
	fmove.l	fp0,d0
	move.l	#_lut,a1
	move.l	d0,0(a1,d2.l*4)
	addq.l	#1,d2
L146
	cmp.l	#$100,d2
	blt.b	L145
L147
;	for (i = 0;
	moveq	#0,d2
	bra.b	L149
L148
;	
;		lut[i] |= (int) (sin(2.2*PI/256.0*(double) i + 0.4)*127.0 + 127.
	fmove.l	d2,fp0
	fmul.d	#$.3F9BA561.4317CB29,fp0
	fadd.d	#$.3FD99999.9999999A,fp0
	fmove.d	fp0,-(a7)
	jsr	_sin__r
	addq.w	#$8,a7
	fmul.d	#$.405FC000.00000000,fp0
	fadd.d	#$.405FC000.00000000,fp0
	fmove.l	fp0,d1
	moveq	#$8,d0
	asl.l	d0,d1
	move.l	#_lut,a1
	lea	0(a1,d2.l*4),a0
	or.l	d1,(a0)
	addq.l	#1,d2
L149
	cmp.l	#$100,d2
	blt.b	L148
L150
;	for (i = 0;
	moveq	#0,d2
	bra.b	L152
L151
;	
;		lut[i] |= (int) (sin(1.8*PI/256.0*(double) i + 2.5)*127.0 + 127.
	fmove.l	d2,fp0
	fmul.d	#$.3F969E95.65708EF4,fp0
	fadd.d	#$.40040000.00000000,fp0
	fmove.d	fp0,-(a7)
	jsr	_sin__r
	addq.w	#$8,a7
	fmul.d	#$.405FC000.00000000,fp0
	fadd.d	#$.405FC000.00000000,fp0
	fmove.l	fp0,d1
	moveq	#$10,d0
	asl.l	d0,d1
	move.l	#_lut,a1
	lea	0(a1,d2.l*4),a0
	or.l	d1,(a0)
	addq.l	#1,d2
L152
	cmp.l	#$100,d2
	blt.b	L151
L153
;	lut[0] = 0x000000;
	move.l	#_lut,a0
	clr.l	(a0)
;	SetTaskPri(FindTask(NULL),0);
	move.l	_SysBase,a6
	sub.l	a1,a1
	jsr	-$126(a6)
	move.l	d0,d1
	move.l	_SysBase,a6
	moveq	#0,d0
	move.l	d1,a1
	jsr	-$12C(a6)
;	PowerPCBase = OpenLibrary("powerpc.library",7);
	move.l	_SysBase,a6
	moveq	#7,d0
	lea	L138(pc),a1
	jsr	-$228(a6)
	move.l	d0,_PowerPCBase
;	CyberGfxBase = OpenLibrary("cybergraphics.library",40);
	move.l	_SysBase,a6
	moveq	#$28,d0
	lea	L139(pc),a1
	jsr	-$228(a6)
	move.l	d0,_CyberGfxBase
;	if (CyberGfxBase)
	tst.l	_CyberGfxBase
	beq	L233
L154
;	
;		screen = LockPubScreen(NULL);
	move.l	_IntuitionBase,a6
	sub.l	a0,a0
	jsr	-$1FE(a6)
	move.l	d0,-4(a5)
;				if (screen)
	tst.l	-4(a5)
	beq	L232
L155
;				
;					window = OpenWindowTags(NULL,
	clr.l	-(a7)
	pea	1.w
	move.l	#$80000089,-(a7)
	pea	1.w
	move.l	#$80000083,-(a7)
	pea	1.w
	move.l	#$8000008F,-(a7)
	pea	1.w
	move.l	#$80000081,-(a7)
	pea	1.w
	move.l	#$80000084,-(a7)
	pea	1.w
	move.l	#$80000082,-(a7)
	pea	1.w
	move.l	#$80000091,-(a7)
	move.l	-4(a5),-(a7)
	move.l	#$80000070,-(a7)
	pea	1.w
	move.l	#$80000080,-(a7)
	pea	1.w
	move.l	#$8000008A,-(a7)
	pea	1.w
	move.l	#$80000086,-(a7)
	move.l	#$60061B,-(a7)
	move.l	#$8000006A,-(a7)
	clr.l	-(a7)
	move.l	#$80000088,-(a7)
	pea	1.w
	move.l	#$80000090,-(a7)
	move.l	#-1,-(a7)
	move.l	#$80000075,-(a7)
	move.l	#-1,-(a7)
	move.l	#$80000074,-(a7)
	pea	$A.w
	move.l	#$80000073,-(a7)
	pea	$A.w
	move.l	#$80000072,-(a7)
	move.l	-4(a5),a0
	move.w	$E(a0),d0
	cmp.w	#$100,d0
	ble.b	L157
L156
	move.l	#$100,d0
	bra.b	L158
L157
	move.l	-4(a5),a0
	move.w	$E(a0),d0
	ext.l	d0
L158
	move.l	d0,-(a7)
	move.l	#$80000067,-(a7)
	move.l	-4(a5),a0
	move.w	$C(a0),d0
	cmp.w	#$140,d0
	ble.b	L160
L159
	move.l	#$140,d0
	bra.b	L161
L160
	move.l	-4(a5),a0
	move.w	$C(a0),d0
	ext.l	d0
L161
	move.l	d0,-(a7)
	move.l	#$80000066,-(a7)
	move.l	#L140,-(a7)
	move.l	#$8000006E,-(a7)
	move.l	_IntuitionBase,a6
	sub.l	a0,a0
	move.l	a7,a1
	jsr	-$25E(a6)
	add.w	#$AC,a7
	move.l	d0,-$38(a5)
;					if (window)
	tst.l	-$38(a5)
	beq	L231
L162
;					
;						view.x0 = -2.0;
	move.l	#$C0000000,_view
	clr.l	_view+4
;						view.x1 = 2.0;
	move.l	#$40000000,_view+$10
	clr.l	_view+$14
;						view.y0 = 2.0;
	move.l	#$40000000,_view+$8
	clr.l	_view+$C
;						view.y1 = -2.0;
	move.l	#$C0000000,_view+$18
	clr.l	_view+$1C
;						width = /* 3 **/ (window->Width - window->BorderLeft - w
	move.l	-$38(a5),a0
	move.w	$8(a0),d0
	ext.l	d0
	move.l	-$38(a5),a0
	move.b	$36(a0),d1
	extb.l	d1
	sub.l	d1,d0
	move.l	-$38(a5),a0
	move.b	$38(a0),d1
	extb.l	d1
	sub.l	d1,d0
	move.l	d0,_width
;						height = /*3 **/ (window->Height - window->BorderBottom 
	move.l	-$38(a5),a0
	move.w	$A(a0),d0
	ext.l	d0
	move.l	-$38(a5),a0
	move.b	$39(a0),d1
	extb.l	d1
	sub.l	d1,d0
	move.l	-$38(a5),a0
	move.b	$37(a0),d1
	extb.l	d1
	sub.l	d1,d0
	move.l	d0,_height
;						x0 = 0;
	clr.l	_x0
;						y0 = 0;
	clr.l	_y0
;						gfxbuf.memptr = NULL;
	clr.l	_gfxbuf
;						gfxbuf.offsetx = 0;
	clr.l	_gfxbuf+4
;						gfxbuf.offsety = 0;
	clr.l	_gfxbuf+$8
;						gfxbuf.xsize = width;
	move.l	_width,_gfxbuf+$C
;						gfxbuf.ysize = height;
	move.l	_height,_gfxbuf+$10
;						gfxbuf.bytesperrow = gfxbuf.xsize;
	move.l	_gfxbuf+$C,d0
	move.w	d0,_gfxbuf+$14
;						gfxbuf.bytesperpix = 1;
	move.w	#1,_gfxbuf+$16
;						gfxbuf.colormodel =  PIXFMT_LUT8;
	clr.w	_gfxbuf+$18
;						if (gfxbuf.colormodel == PIXFMT_LUT8)
	move.w	_gfxbuf+$18,d0
	bne	L167
L163
;						
;							for (i = 0;
	moveq	#0,d6
	bra	L165
L164
;							
;								red   = lut[i] >> 16 & 0xff;
	move.l	d6,d0
	move.l	#_lut,a1
	move.l	0(a1,d0.l*4),d5
	moveq	#$10,d0
	lsr.l	d0,d5
	and.l	#$FF,d5
;								green = lut[i] >> 8 & 0xff;
	move.l	d6,d0
	move.l	#_lut,a1
	move.l	0(a1,d0.l*4),d4
	moveq	#$8,d0
	lsr.l	d0,d4
	and.l	#$FF,d4
;								blue  = lut[i] & 0xff;
	move.l	d6,d0
	move.l	#_lut,a1
	move.l	0(a1,d0.l*4),d2
	and.l	#$FF,d2
;								sprintf(cbuf,"%s, obtaining shared pens...",_WINDOW_
	move.l	#L140,-(a7)
	move.l	#L141,-(a7)
	pea	-$108(a5)
	jsr	_sprintf
	add.w	#$C,a7
;								SetWindowTitles(window,cbuf,(UBYTE*)-1);
	move.l	_IntuitionBase,a6
	move.l	-$38(a5),a0
	lea	-$108(a5),a1
	move.w	#-1,a2
	jsr	-$114(a6)
;                        shared_pens[i] = Obt
	clr.l	-(a7)
	move.l	#-1,-(a7)
	move.l	#$84000000,-(a7)
	move.l	d2,d0
	moveq	#$8,d1
	asl.l	d1,d0
	move.l	d2,d3
	or.l	d0,d3
	move.l	d2,d0
	moveq	#$10,d1
	asl.l	d1,d0
	or.l	d0,d3
	moveq	#$18,d0
	asl.l	d0,d2
	or.l	d2,d3
	move.l	d4,d0
	moveq	#$8,d1
	asl.l	d1,d0
	move.l	d4,d2
	or.l	d0,d2
	move.l	d4,d0
	moveq	#$10,d1
	asl.l	d1,d0
	or.l	d0,d2
	moveq	#$18,d0
	asl.l	d0,d4
	or.l	d4,d2
	move.l	d5,d0
	moveq	#$8,d1
	asl.l	d1,d0
	move.l	d5,d1
	or.l	d0,d1
	move.l	d5,d0
	moveq	#$10,d4
	asl.l	d4,d0
	or.l	d0,d1
	moveq	#$18,d0
	asl.l	d0,d5
	or.l	d5,d1
	move.l	-$38(a5),a1
	move.l	$2E(a1),a0
	move.l	_GfxBase,a6
	move.l	$30(a0),a0
	move.l	a7,a1
	jsr	-$348(a6)
	add.w	#$C,a7
	move.l	d6,d1
	move.l	#_shared_pens,a1
	move.b	d0,0(a1,d1.l)
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
L165
	move.l	d6,d0
	cmp.l	#$100,d0
	blt	L164
L166
	bra.b	L168
L167
;						
;							gfxbuf.bytesperrow = gfxbuf.xsize * 4;
	move.l	_gfxbuf+$C,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.w	d0,_gfxbuf+$14
;							gfxbuf.bytesperpix = 4;
	move.w	#4,_gfxbuf+$16
;							gfxbuf.colormodel = PIXFMT_ARGB32;
	move.w	#$B,_gfxbuf+$18
L168
;						gfxport = &gfxbuf;
	move.l	#_gfxbuf,_gfxport
;						gfxport->memptr = (UBYTE *) AllocVec(gfxport->ysize*gfxp
	move.l	_gfxport,a0
	move.l	$10(a0),d0
	move.l	_gfxport,a0
	moveq	#0,d1
	move.w	$14(a0),d1
	mulu.l	d1,d0
	move.l	_SysBase,a6
	moveq	#0,d1
	jsr	-$2AC(a6)
	move.l	_gfxport,a1
	move.l	d0,(a1)
;						if (gfxport->memptr)
	move.l	_gfxport,a0
	tst.l	(a0)
	beq	L227
L169
;						
;							BOOL redraw = TRUE;
	moveq	#1,d2
;							BOOL quit = FALSE;
	clr.w	-$11C(a5)
;							BOOL contdraw = FALSE;
;							double tim = 0
	clr.l	-$126(a5)
	clr.l	-$122(a5)
;							double tim = 0,tim_prev = 0;
;							while (!quit)
	bra	L225
L170
;							
;								if (redraw)
	tst.w	d2
	beq	L179
L171
;								
;									struct RastPort *rp = window->RPort;
	move.l	-$38(a5),a0
	move.l	$32(a0),a3
;									ULONG h = rp->TxHeight;
;									SetDrMd(rp,JAM2);
	move.l	_GfxBase,a6
	moveq	#1,d0
	move.l	a3,a1
	jsr	-$162(a6)
;									SetAPen(rp,0);
	move.l	_GfxBase,a6
	moveq	#0,d0
	move.l	a3,a1
	jsr	-$156(a6)
;									SetBPen(rp,1);
	move.l	_GfxBase,a6
	moveq	#1,d0
	move.l	a3,a1
	jsr	-$15C(a6)
;									sprintf(title,"%s, Depth %ld, From (%g,%g) To (%g,
	fmove.d	_view+$18,fp0
	fmove.d	fp0,-(a7)
	fmove.d	_view+$10,fp0
	fmove.d	fp0,-(a7)
	fmove.d	_view+$8,fp0
	fmove.d	fp0,-(a7)
	fmove.d	_view,fp0
	fmove.d	fp0,-(a7)
	move.l	_N,-(a7)
	move.l	#L140,-(a7)
	move.l	#L142,-(a7)
	pea	-$23A(a5)
	jsr	_sprintf
	add.w	#$30,a7
;									SetWindowTitles(window,title,(UBYTE*)-1);
	move.l	_IntuitionBase,a6
	move.l	-$38(a5),a0
	lea	-$23A(a5),a1
	move.w	#-1,a2
	jsr	-$114(a6)
;									tim1 = clock();
	jsr	_clock
	move.l	d0,-$23E(a5)
;									DrawMandelbrot(&view,gfxport,N);
	move.l	_N,-(a7)
	move.l	_gfxport,-(a7)
	move.l	#_view,-(a7)
	jsr	_DrawMandelbrot
	add.w	#$C,a7
;									tim2 = clock();
	jsr	_clock
	move.l	d0,-$242(a5)
;									if (gfxbuf.colormodel == PIXFMT_LUT8)
	move.w	_gfxbuf+$18,d0
	bne	L177
L172
;									
;										long w = window->Width - window->BorderLeft - wi
	move.l	-$38(a5),a0
	move.w	$8(a0),d2
	ext.l	d2
	move.l	-$38(a5),a0
	move.b	$36(a0),d0
	extb.l	d0
	sub.l	d0,d2
	move.l	-$38(a5),a0
	move.b	$38(a0),d0
	extb.l	d0
	sub.l	d0,d2
	subq.l	#1,d2
;										long h = window->Height - window->BorderBottom -
	move.l	-$38(a5),a0
	move.w	$A(a0),d3
	ext.l	d3
	move.l	-$38(a5),a0
	move.b	$39(a0),d0
	extb.l	d0
	sub.l	d0,d3
	move.l	-$38(a5),a0
	move.b	$37(a0),d0
	extb.l	d0
	sub.l	d0,d3
	subq.l	#1,d3
;										if (w > gfxbuf.xsize) 
	move.l	_gfxbuf+$C,d0
	cmp.l	d0,d2
	bls.b	L174
L173
;										if (w > gfxbuf.xsize) w = 
	move.l	_gfxbuf+$C,d2
L174
;										if (h > gfxbuf.ysize) 
	move.l	_gfxbuf+$10,d0
	cmp.l	d0,d3
	bls.b	L176
L175
;										if (h > gfxbuf.ysize) h = 
	move.l	_gfxbuf+$10,d3
L176
;										addr = (long)gfxport->memptr + x0 + y0 * gfxport
	move.l	_gfxport,a0
	move.l	(a0),d5
	add.l	_x0,d5
	move.l	_gfxport,a0
	moveq	#0,d0
	move.w	$14(a0),d0
	muls.l	_y0,d0
	add.l	d0,d5
;										WriteChunkyPixels(rp,0,0,w,h,(UBYTE*)addr,gfxpor
	move.l	_gfxport,a0
	moveq	#0,d4
	move.w	$14(a0),d4
	move.l	_GfxBase,a6
	moveq	#0,d0
	moveq	#0,d1
	move.l	a3,a0
	move.l	d5,a2
	jsr	-$420(a6)
	bra.b	L178
L177
;									
;										WritePixelArray(gfxport->memptr,0,0,gfxport->byt
	move.l	_gfxport,a0
	move.w	$12(a0),d6
	move.l	_gfxport,a0
	move.w	$E(a0),d5
	move.l	_gfxport,a0
	move.w	$14(a0),d2
	move.l	_gfxport,a0
	move.l	_CyberGfxBase,a6
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d3
	moveq	#0,d4
	moveq	#2,d7
	move.l	(a0),a0
	move.l	a3,a1
	jsr	-$7E(a6)
L178
;									tim_prev = tim;
	fmove.d	-$126(a5),fp2
;									tim = difftime(tim2,tim1)/CLOCKS_PER_SEC;
	move.l	-$23E(a5),-(a7)
	move.l	-$242(a5),-(a7)
	jsr	_difftime__r
	addq.w	#$8,a7
	fdiv.d	#$.40490000.00000000,fp0
	fmove.d	fp0,-$126(a5)
;									sprintf(title,"%s, Depth %ld, From (%g,%g) To (%g,
	fmove.d	fp2,-(a7)
	move.l	-$122(a5),-(a7)
	move.l	-$126(a5),-(a7)
	fmove.d	_view+$18,fp0
	fmove.d	fp0,-(a7)
	fmove.d	_view+$10,fp0
	fmove.d	fp0,-(a7)
	fmove.d	_view+$8,fp0
	fmove.d	fp0,-(a7)
	fmove.d	_view,fp0
	fmove.d	fp0,-(a7)
	move.l	_N,-(a7)
	move.l	#L140,-(a7)
	move.l	#L143,-(a7)
	pea	-$23A(a5)
	jsr	_sprintf
	add.w	#$40,a7
;									SetWindowTitles(window,title,(UBYTE*)-1);
	move.l	_IntuitionBase,a6
	move.l	-$38(a5),a0
	lea	-$23A(a5),a1
	move.w	#-1,a2
	jsr	-$114(a6)
;									redraw = FALSE;
	moveq	#0,d2
L179
;								sigs = Wait(4096|(1L << window->UserPort->mp_SigBit))
	move.l	-$38(a5),a1
	move.l	$56(a1),a0
	moveq	#0,d0
	move.b	$F(a0),d0
	moveq	#1,d1
	asl.l	d0,d1
	move.l	d1,d0
	or.l	#$1000,d0
	move.l	_SysBase,a6
	jsr	-$13E(a6)
;								if (sigs & 4096)
	and.l	#$1000,d0
	beq	L224
L180
;								
;									
	bra	L226
L181
;								while (msg = (struct IntuiMessage *) GetMsg(window->
	bra	L224
L182
;								
;									if ((msg->Class == IDCMP_NEWSIZE) ||
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#2,d0
	beq.b	L184
L183
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#1,d0
	bne	L185
L184
;									
;										APTR mem = gfxport->memptr;
	move.l	_gfxport,a0
	move.l	(a0),a2
;										gfxbuf.xsize =/*3 **/ (window->Width - window->B
	move.l	-$38(a5),a0
	move.w	$8(a0),d0
	ext.l	d0
	move.l	-$38(a5),a0
	move.b	$36(a0),d1
	extb.l	d1
	sub.l	d1,d0
	move.l	-$38(a5),a0
	move.b	$38(a0),d1
	extb.l	d1
	sub.l	d1,d0
	move.l	d0,_gfxbuf+$C
;										gfxbuf.ysize =/* 3 **/ (window->Height - window-
	move.l	-$38(a5),a0
	move.w	$A(a0),d0
	ext.l	d0
	move.l	-$38(a5),a0
	move.b	$39(a0),d1
	extb.l	d1
	sub.l	d1,d0
	move.l	-$38(a5),a0
	move.b	$37(a0),d1
	extb.l	d1
	sub.l	d1,d0
	move.l	d0,_gfxbuf+$10
;										gfxbuf.bytesperrow = gfxbuf.xsize;
	move.l	_gfxbuf+$C,d0
	move.w	d0,_gfxbuf+$14
;										gfxport->memptr = (UBYTE *) AllocVec(gfxport->ys
	move.l	_gfxport,a0
	move.l	$10(a0),d0
	move.l	_gfxport,a0
	moveq	#0,d1
	move.w	$14(a0),d1
	mulu.l	d1,d0
	move.l	_SysBase,a6
	moveq	#0,d1
	jsr	-$2AC(a6)
	move.l	_gfxport,a1
	move.l	d0,(a1)
;										FreeVec(mem);
	move.l	_SysBase,a6
	move.l	a2,a1
	jsr	-$2B2(a6)
;										redraw = TRUE;
	moveq	#1,d2
L185
;									w = (double) gfxport->xsize;
	move.l	_gfxport,a0
	fmove.l	$C(a0),fp5
;									h = (double) gfxport->ysize;
	move.l	_gfxport,a0
	fmove.l	$10(a0),fp4
;									dx = (view.x1 - view.x0) / w;
	fmove.d	_view+$10,fp3
	fmove.d	_view,fp0
	fsub.x	fp0,fp3
	fdiv.x	fp5,fp3
;									dy = (view.y1 - view.y0) / h;
	fmove.d	_view+$18,fp2
	fmove.d	_view+$8,fp0
	fsub.x	fp0,fp2
	fdiv.x	fp4,fp2
;									mx = (double) msg->MouseX;
	move.l	a3,a0
	move.w	$20(a0),d0
	ext.l	d0
	fmove.l	d0,fp0
	fmove.d	fp0,-$276(a5)
;									my = (double) msg->MouseY;
	move.l	a3,a0
	move.w	$22(a0),d0
	ext.l	d0
	fmove.l	d0,fp0
	fmove.d	fp0,fp7
;									if (msg->Class == IDCMP_RAWKEY)
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#$400,d0
	bne	L203
L186
;									
;										BOOL shift_on = FALSE;
	moveq	#0,d1
;										long delta = 20;
	moveq	#$14,d0
;										switch (msg->Code)
	move.l	a3,a0
	move.w	$18(a0),d3
	cmp.w	#$4E,d3
	beq	L195
	bhi.b	L237
	cmp.w	#$4C,d3
	beq.b	L187
	cmp.w	#$4D,d3
	beq	L191
	bra	L203
L237
	cmp.w	#$4F,d3
	beq	L199
	bra	L203
;										
;											
L187
;												if (shift_on)
	tst.w	d1
	beq.b	L189
L188
;												
;													ScrollView(window,gfxport,0,-delta);
	neg.l	d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	_gfxport,-(a7)
	move.l	-$38(a5),-(a7)
	jsr	_ScrollView
	add.w	#$10,a7
	bra	L203
L189
;												
;													view.y0 -= dy * h / 4;
	fmove.x	fp2,fp1
	fmul.x	fp4,fp1
	fdiv.d	#$.40100000.00000000,fp1
	move.l	#_view,a0
	fmove.d	$8(a0),fp0
	fsub.x	fp1,fp0
	fmove.d	fp0,_view+$8
;													view.y1 = view.y0 + h * dy;
	fmove.d	_view+$8,fp0
	fmove.x	fp4,fp1
	fmul.x	fp2,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,_view+$18
;													redraw = TRUE;
	moveq	#1,d2
L190
;												
	bra	L203
L191
;												if (shift_on)
	tst.w	d1
	beq.b	L193
L192
;												
;													ScrollView(window,gfxport,0, delta);
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	_gfxport,-(a7)
	move.l	-$38(a5),-(a7)
	jsr	_ScrollView
	add.w	#$10,a7
	bra	L203
L193
;												
;													view.y0 += dy * h / 4;
	fmove.x	fp2,fp1
	fmul.x	fp4,fp1
	fdiv.d	#$.40100000.00000000,fp1
	move.l	#_view,a0
	fmove.d	$8(a0),fp0
	fadd.x	fp1,fp0
	fmove.d	fp0,_view+$8
;													view.y1 = view.y0 + h * dy;
	fmove.d	_view+$8,fp0
	fmove.x	fp4,fp1
	fmul.x	fp2,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,_view+$18
;													redraw = TRUE;
	moveq	#1,d2
L194
;												
	bra	L203
L195
;												if (shift_on)
	tst.w	d1
	beq.b	L197
L196
;												
;													ScrollView(window,gfxport,delta,0);
	clr.l	-(a7)
	move.l	d0,-(a7)
	move.l	_gfxport,-(a7)
	move.l	-$38(a5),-(a7)
	jsr	_ScrollView
	add.w	#$10,a7
	bra	L203
L197
;												
;													view.x0 += dx * w / 4;
	fmove.x	fp3,fp0
	fmul.x	fp5,fp0
	fdiv.d	#$.40100000.00000000,fp0
	fmove.d	_view,fp1
	fadd.x	fp0,fp1
	fmove.d	fp1,_view
;													view.x1 = view.x0 + w * dx;
	fmove.d	_view,fp0
	fmove.x	fp5,fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,_view+$10
;													redraw = TRUE;
	moveq	#1,d2
L198
;												
	bra	L203
L199
;												if (shift_on)
	tst.w	d1
	beq.b	L201
L200
;												
;													ScrollView(window,gfxport,-delta,0);
	clr.l	-(a7)
	neg.l	d0
	move.l	d0,-(a7)
	move.l	_gfxport,-(a7)
	move.l	-$38(a5),-(a7)
	jsr	_ScrollView
	add.w	#$10,a7
	bra.b	L203
L201
;												
;													view.x0 -= dx * w / 4;
	fmove.x	fp3,fp0
	fmul.x	fp5,fp0
	fdiv.d	#$.40100000.00000000,fp0
	fmove.d	_view,fp1
	fsub.x	fp0,fp1
	fmove.d	fp1,_view
;													view.x1 = view.x0 + w * dx;
	fmove.d	_view,fp0
	fmove.x	fp5,fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,_view+$10
;													redraw = TRUE;
	moveq	#1,d2
L202
;												
L203
;									if (msg->Class == IDCMP_VANILLAKEY)
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#$200000,d0
	bne	L221
L204
;									
;										if (msg->Code >= '1' && msg->Code <= '9')
	move.l	a3,a0
	move.w	$18(a0),d0
	cmp.w	#$31,d0
	blo	L210
L205
	move.l	a3,a0
	move.w	$18(a0),d0
	cmp.w	#$39,d0
	bhi	L210
L206
;										
;											if (msg->Qualifier & IEQUALIFIER_CONTROL)
	move.l	a3,a0
	moveq	#0,d0
	move.w	$1A(a0),d0
	and.l	#$8,d0
	beq.b	L208
L207
;												views[msg->Code - '1'] = view
	move.l	#_views,a1
	lea	-$620(a1),a0
	move.l	a3,a1
	moveq	#0,d0
	move.w	$18(a1),d0
	asl.l	#5,d0
	lea	0(a0,d0.l),a1
	move.l	a1,a0
	lea	_view,a1
	moveq	#7,d0
L238
	move.l	(a1)+,(a0)+
	dbra	d0,L238
	bra.b	L209
L208
;												view = views[msg->Code - '1'];
	move.l	#_views,a2
	lea	-$620(a2),a0
	move.l	a3,a2
	moveq	#0,d0
	move.w	$18(a2),d0
	asl.l	#5,d0
	lea	0(a0,d0.l),a1
	lea	_view,a0
	moveq	#7,d0
L239
	move.l	(a1)+,(a0)+
	dbra	d0,L239
L209
;											redraw = TRUE;
	moveq	#1,d2
	bra	L221
L210
;										
;											switch (msg->Code)
	move.l	a3,a0
	move.w	$18(a0),d0
	cmp.w	#$6F,d0
	beq	L220
	bhi.b	L240
	cmp.w	#$2D,d0
	beq.b	L214
	bhi.b	L241
	cmp.w	#$2B,d0
	beq.b	L211
	bra	L221
L241
	cmp.w	#$69,d0
	beq	L219
	bra	L221
L240
	cmp.w	#$71,d0
	beq.b	L217
	cmp.w	#$73,d0
	beq	L221
	bra	L221
;											
;												
L211
;													if (N < 1000)
	move.l	_N,d0
	cmp.l	#$3E8,d0
	bge	L221
L212
;													
;														N += 20;
	add.l	#$14,_N
;														redraw = TRUE;
	moveq	#1,d2
L213
;													
	bra	L221
L214
;													if (N >= 40)
	move.l	_N,d0
	cmp.l	#$28,d0
	blt	L221
L215
;													
;														N -= 20;
	sub.l	#$14,_N
;														redraw = TRUE;
	moveq	#1,d2
L216
;													
	bra	L221
L217
;													quit = TRUE;
	move.w	#1,-$11C(a5)
;													
	bra	L221
L218
;													contdraw = FALSE;
;													
	bra	L221
L219
;													view.x0 = view.x0 + 0.05 * mx * dx;
	fmove.d	_view,fp1
	fmove.d	-$276(a5),fp0
	fmul.d	#$.3FA99999.99999999,fp0
	fmul.x	fp3,fp0
	fadd.x	fp0,fp1
	fmove.d	fp1,_view
;													view.x1 = view.x0 + 0.95 * dx * w;
	fmove.d	_view,fp0
	fmove.x	fp3,fp1
	fmul.d	#$.3FEE6666.66666666,fp1
	fmul.x	fp5,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,_view+$10
;													view.y0 = view.y0 + 0.05 * my * dy;
	fmove.d	_view+$8,fp0
	fmove.x	fp7,fp1
	fmul.d	#$.3FA99999.99999999,fp1
	fmul.x	fp2,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,_view+$8
;													view.y1 = view.y0 + 0.95 * dy * h;
	fmove.d	_view+$8,fp0
	fmove.x	fp2,fp1
	fmul.d	#$.3FEE6666.66666666,fp1
	fmul.x	fp4,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,_view+$18
;													redraw = TRUE;
	moveq	#1,d2
;													contdraw = TRUE;
;													
	bra	L221
L220
;													view.x0 = view.x0 - 0.05 * mx * dx;
	fmove.d	_view,fp1
	fmove.d	-$276(a5),fp0
	fmul.d	#$.3FA99999.99999999,fp0
	fmul.x	fp3,fp0
	fsub.x	fp0,fp1
	fmove.d	fp1,_view
;													view.x1 = view.x0 + 1.05 * dx * w;
	fmove.d	_view,fp0
	fmove.x	fp3,fp1
	fmul.d	#$.3FF0CCCC.CCCCCCCC,fp1
	fmul.x	fp5,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,_view+$10
;													view.y0 = view.y0 - 0.05 * my * dy;
	fmove.d	_view+$8,fp0
	fmove.x	fp7,fp1
	fmul.d	#$.3FA99999.99999999,fp1
	fmul.x	fp2,fp1
	fsub.x	fp1,fp0
	fmove.d	fp0,_view+$8
;													view.y1 = view.y0 + 1.05 * dy * h;
	fmove.d	_view+$8,fp0
	fmove.x	fp2,fp1
	fmul.d	#$.3FF0CCCC.CCCCCCCC,fp1
	fmul.x	fp4,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,_view+$18
;													redraw = TRUE;
	moveq	#1,d2
;													
L221
;									if (msg->Class == IDCMP_CLOSEWINDOW)
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#$200,d0
	bne.b	L223
L222
;									
;										quit = TRUE;
	move.w	#1,-$11C(a5)
L223
;									ReplyMsg((struct Message *) msg);
	move.l	_SysBase,a6
	move.l	a3,a1
	jsr	-$17A(a6)
L224
	move.l	-$38(a5),a1
	move.l	_SysBase,a6
	move.l	$56(a1),a0
	jsr	-$174(a6)
	move.l	d0,a3
	cmp.w	#0,a3
	bne	L182
L225
	tst.w	-$11C(a5)
	beq	L170
L226
;							FreeVec(gfxport->memptr);
	move.l	_gfxport,a0
	move.l	_SysBase,a6
	move.l	(a0),a1
	jsr	-$2B2(a6)
L227
;                  for (col = 0;
	moveq	#0,d2
	bra.b	L229
L228
;	                  ReleasePen(window->WScreen->Vi
	move.l	#_shared_pens,a1
	moveq	#0,d0
	move.b	0(a1,d2.l),d0
	move.l	-$38(a5),a1
	move.l	$2E(a1),a0
	move.l	_GfxBase,a6
	move.l	$30(a0),a0
	jsr	-$3B4(a6)
	addq.l	#1,d2
L229
	cmp.l	#$100,d2
	blt.b	L228
L230
;						CloseWindow(window);
	move.l	_IntuitionBase,a6
	move.l	-$38(a5),a0
	jsr	-$48(a6)
L231
;					UnlockPubScreen(NULL,screen);
	move.l	_IntuitionBase,a6
	sub.l	a0,a0
	move.l	-4(a5),a1
	jsr	-$204(a6)
L232
;		CloseLibrary(CyberGfxBase);
	move.l	_CyberGfxBase,a1
	move.l	_SysBase,a6
	jsr	-$19E(a6)
L233
;	if (PowerPCBase)	
	tst.l	_PowerPCBase
	beq.b	L235
L234
;	if (PowerPCBase)	CloseLibrary(PowerPCBase);
	move.l	_PowerPCBase,a1
	move.l	_SysBase,a6
	jsr	-$19E(a6)
L235
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d7/a2/a3/a6
	unlk	a5
	moveq	#0,d0
	rts

;void wbmain(struct WBStartup * argmsg)
	XDEF	_wbmain
_wbmain
L243	EQU	0
	link	a5,#L243
L242
;	main();
	jsr	_main
	unlk	a5
	rts

L142
	dc.b	'%s, Depth %ld, From (%g,%g) To (%g,%g), calculating...',0
L143
	dc.b	'%s, Depth %ld, From (%g,%g) To (%g,%g), ready: %g sec. (was: %g)'
	dc.b	0
L141
	dc.b	'%s, obtaining shared pens...',0
L101
	dc.b	', Depth: %ld',0
L94
	dc.b	'DrawIt()',0
L102
	dc.b	'From: (%g,%g)',0
L88
	dc.b	'GetIt()',0
L140
	dc.b	'Mandeldemo, 68K',0
L85
	dc.b	'PRE CALL',0
L103
	dc.b	'To:   (%g,%g)',0
L139
	dc.b	'cybergraphics.library',0
L138
	dc.b	'powerpc.library',0

	SECTION ":1",DATA

	XDEF	_N
_N
	dc.l	$14
	XDEF	_x0
_x0
	dc.l	0
	XDEF	_y0
_y0
	dc.l	0
_foo
	dc.l	L85
	XDEF	_PowerPCBase
_PowerPCBase
	dc.l	0
	XDEF	_CyberGfxBase
_CyberGfxBase
	dc.l	0

	SECTION ":2",BSS

	XDEF	_view
_view
	ds.b	32
	XDEF	_gfxport
_gfxport
	ds.l	1
_gfxbuf
	ds.b	26
	CNOP	0,4
_lut
	ds.b	1024
_views
	ds.b	320
	XDEF	_width
_width
	ds.l	1
	XDEF	_height
_height
	ds.l	1
	XDEF	_shared_pens
_shared_pens
	ds.b	256

	END
