;	StormC Compiler V 2.00.15.NewAssem
	MC68020

	XREF	_strlen
	XREF	_sin
	XREF	_sprintf
	XREF	_PPCDrawMandelbrot
	XREF	_DrawMandelbrot
	XREF	_IntuitionBase
	XREF	_AslBase
	XREF	_SysBase
	XREF	_GfxBase
	XREF	_PowerPCBase
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err

	SECTION	":0",Code

;	static ULONG getit(
_getit:
L55	EQU	0
	link.w	a5,#L55+0
L54:
;		gfxbuf = *msg;
	move.l	a1,a0
	lea	_gfxbuf(a4),a1
	moveq	#$c,d0
L56:
	move.w	(a0)+,(a1)+
	dbra	d0,L56
;		return 0;
	moveq	#0,d0
	unlk	a5
	rts

;	static ULONG drawit(
_drawit:
L58	EQU	0
	link.w	a5,#L58+0
	move.l	a6,-(a7)
L57:
;		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(a4),a0
	move.l	_SysBase(a4),a6
	move.l	(a1),a1
	jsr	-$270(a6)
;		return 0;
	moveq	#0,d0
	move.l	(a7)+,a6
	unlk	a5
	rts

;	void PrintText(struct RastPort *rp, STRPTR s)
	XDEF	_PrintText
_PrintText:
L60	EQU	0
	link.w	a5,#L60+0
	movem.l	a2/a6,-(a7)
	movem.l	8(a5),a2/a6
L59:
;		Text(rp,s,strlen(s));
	move.l	a6,-(a7)
	bsr	_strlen
	addq.w	#4,a7
	move.l	a6,a0
	move.l	_GfxBase(a4),a6
	move.l	a2,a1
	jsr	-$3c(a6)
	movem.l	(a7)+,a2/a6
	unlk	a5
	rts

;	static void DrawMandelInfo(struct RastPort *rp, BOOL ppc, int N, Rec
_DrawMandelInfo:
L70	EQU	-$44
	link.w	a5,#L70+0
	movem.l	d2-d4/a2/a3/a6,-(a7)
	movem.l	$e(a5),d3/a3
	move.w	$c(a5),d4
	move.l	8(a5),a2
L66:
;		ULONG h = rp->TxHeight;
	move.l	a2,a0
	moveq	#0,d2
	move.w	$3a(a0),d2
;		SetDrMd(rp,JAM2);
	move.l	_GfxBase(a4),a6
	moveq	#1,d0
	move.l	a2,a1
	jsr	-$162(a6)
;		SetAPen(rp,0);
	move.l	_GfxBase(a4),a6
	moveq	#0,d0
	move.l	a2,a1
	jsr	-$156(a6)
;		SetBPen(rp,1);
	move.l	_GfxBase(a4),a6
	moveq	#1,d0
	move.l	a2,a1
	jsr	-$15c(a6)
;		Move(rp,0,rp->TxBaseline);
	move.l	a2,a0
	moveq	#0,d1
	move.w	$3e(a0),d1
	move.l	_GfxBase(a4),a6
	moveq	#0,d0
	move.l	a2,a1
	jsr	-$f0(a6)
;		if (ppc)
	tst.w	d4
	beq.b	L68
L67:
;			PrintText(rp,"CPU: PPC")
	move.l	#L61,-(a7)
	move.l	a2,-(a7)
	bsr	_PrintText
	addq.w	#8,a7
	bra.b	L69
L68:
;			PrintText(rp,"CPU: 68K");
	move.l	#L62,-(a7)
	move.l	a2,-(a7)
	bsr	_PrintText
	addq.w	#8,a7
L69:
;		sprintf(buf,", Depth: %ld",N);
	move.l	d3,-(a7)
	move.l	#L63,-(a7)
	pea	-$44(a5)
	bsr	_sprintf
	add.w	#$c,a7
;		PrintText(rp,buf);
	pea	-$44(a5)
	move.l	a2,-(a7)
	bsr	_PrintText
	addq.w	#8,a7
;		Move(rp,0,rp->cp_y+h);
	move.l	a2,a0
	move.w	$26(a0),d1
	ext.l	d1
	add.l	d2,d1
	move.l	_GfxBase(a4),a6
	moveq	#0,d0
	move.l	a2,a1
	jsr	-$f0(a6)
;		sprintf(buf,"From: (%g,%g)",view.x0,view.y0);
	move.l	a3,a0
	move.l	8(a0),d0
	move.l	$c(a0),d1
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	move.l	a3,a0
	move.l	(a0),d0
	move.l	4(a0),d1
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	move.l	#L64,-(a7)
	pea	-$44(a5)
	bsr	_sprintf
	add.w	#$18,a7
;		PrintText(rp,buf);
	pea	-$44(a5)
	move.l	a2,-(a7)
	bsr	_PrintText
	addq.w	#8,a7
;		Move(rp,0,rp->cp_y+h);
	move.l	a2,a0
	move.w	$26(a0),d1
	ext.l	d1
	add.l	d2,d1
	move.l	_GfxBase(a4),a6
	moveq	#0,d0
	move.l	a2,a1
	jsr	-$f0(a6)
;		sprintf(buf,"To:   (%g,%g)",view.x1,view.y1);
	move.l	a3,a0
	move.l	$18(a0),d0
	move.l	$1c(a0),d1
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	move.l	a3,a0
	move.l	$10(a0),d0
	move.l	$14(a0),d1
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	move.l	#L65,-(a7)
	pea	-$44(a5)
	bsr	_sprintf
	add.w	#$18,a7
;		PrintText(rp,buf);
	pea	-$44(a5)
	move.l	a2,-(a7)
	bsr	_PrintText
	addq.w	#8,a7
	movem.l	(a7)+,d2-d4/a2/a3/a6
	unlk	a5
	rts

;	void main()
	XDEF	_main
_main:
L141	EQU	-$110
	link.w	a5,#L141+0
	movem.l	d2-d7/a2/a3/a6,-(a7)
L73:
;		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,d4
	bra.b	L75
L74:
;		
;			lut[i] = (int) (sin(2.0*PI/256.0*(double) i)*127.0 + 127.0);
	move.l	d4,d0
	XREF	_MathIeeeDoubBasBase
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$24(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	#$3f9921fb,d0
	move.l	#$54442d0f,d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	bsr	_sin
	addq.w	#8,a7
	move.l	#$405fc000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	#$405fc000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$1e(a6)
	lea	_lut(a4),a0
	move.l	d0,0(a0,d4.l*4)
	addq.l	#1,d4
L75:
	cmp.l	#$100,d4
	blt.b	L74
L76:
;		for (i = 0;
	moveq	#0,d4
	bra.b	L78
L77:
;		
;			lut[i] |= (int) (sin(2.2*PI/256.0*(double) i + 0.4)*127.0 + 127.
	move.l	d4,d0
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$24(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	#$3f9ba561,d0
	move.l	#$4317cb29,d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	#$3fd99999,d2
	move.l	#-$66666666,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	bsr	_sin
	addq.w	#8,a7
	move.l	#$405fc000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	#$405fc000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$1e(a6)
	asl.l	#8,d0
	lea	_lut(a4),a0
	lea	0(a0,d4.l*4),a0
	or.l	d0,(a0)
	addq.l	#1,d4
L78:
	cmp.l	#$100,d4
	blt	L77
L79:
;		for (i = 0;
	moveq	#0,d4
	bra.b	L81
L80:
;		
;			lut[i] |= (int) (sin(1.8*PI/256.0*(double) i + 2.5)*127.0 + 127.
	move.l	d4,d0
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$24(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	#$3f969e95,d0
	move.l	#$65708ef4,d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	#$40040000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	bsr	_sin
	addq.w	#8,a7
	move.l	#$405fc000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	#$405fc000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$1e(a6)
	moveq	#$10,d1
	asl.l	d1,d0
	lea	_lut(a4),a0
	lea	0(a0,d4.l*4),a0
	or.l	d0,(a0)
	addq.l	#1,d4
L81:
	cmp.l	#$100,d4
	blt	L80
L82:
;		lut[0] = 0x000000;
	clr.l	_lut(a4)
;		SetTaskPri(FindTask(NULL),0);
	move.l	_SysBase(a4),a6
	sub.l	a1,a1
	jsr	-$126(a6)
	move.l	d0,d1
	move.l	_SysBase(a4),a6
	moveq	#0,d0
	move.l	d1,a1
	jsr	-$12c(a6)
;		CyberGfxBase = OpenLibrary("cybergraphics.library",40);
	move.l	_SysBase(a4),a6
	moveq	#$28,d0
	lea	L71(pc),a1
	jsr	-$228(a6)
	move.l	d0,_CyberGfxBase(a4)
;		if (CyberGfxBase)
	beq	L140
L83:
;		
;										DoCDrawMethodTagList(&drawhook,&screen->RastPort,
	clr.l	-(a7)
	pea	$f0.w
	move.l	#-$7ffafffe,-(a7)
	pea	$140.w
	move.l	#-$7ffaffff,-(a7)
	pea	8.w
	move.l	#-$7ffb0000,-(a7)
	move.l	_CyberGfxBase(a4),a6
	move.l	a7,a0
	jsr	-$3c(a6)
	add.w	#$1c,a7
	move.l	d0,d2
;			request = (struct ScreenModeRequester *) AllocAslRequestTags(ASL
	clr.l	-(a7)
	move.l	_CyberGfxBase(a4),a6
	move.l	#-$7ffffffd,d0
	move.l	d2,d1
	jsr	-$66(a6)
	move.l	d0,-(a7)
	move.l	#-$7ff7ff9a,-(a7)
	move.l	_CyberGfxBase(a4),a6
	move.l	#-$7ffffffe,d0
	move.l	d2,d1
	jsr	-$66(a6)
	move.l	d0,-(a7)
	move.l	#-$7ff7ff9b,-(a7)
	move.l	_CyberGfxBase(a4),a6
	move.l	#-$7ffffffc,d0
	move.l	d2,d1
	jsr	-$66(a6)
	move.l	d0,-(a7)
	move.l	#-$7ff7ff99,-(a7)
	move.l	d2,-(a7)
	move.l	#-$7ff7ff9c,-(a7)
	pea	1.w
	move.l	#-$7ff7ff93,-(a7)
	pea	1.w
	move.l	#-$7ff7ff92,-(a7)
	pea	1.w
	move.l	#-$7ff7ff91,-(a7)
	move.l	#L72,-(a7)
	move.l	#-$7ff7ffff,-(a7)
	pea	1.w
	move.l	#-$7ff7ffd6,-(a7)
	move.l	_AslBase(a4),a6
	moveq	#2,d0
	move.l	a7,a0
	jsr	-$30(a6)
	add.w	#$4c,a7
	move.l	d0,-$30(a5)
;			if (request)
	beq	L139
L84:
;			
;				if (AslRequest(request,NULL))
	move.l	_AslBase(a4),a6
	move.l	-$30(a5),a0
	sub.l	a1,a1
	jsr	-$3c(a6)
	tst.w	d0
	beq	L138
L85:
;				
;					screen = OpenScreenTags(NULL,
	clr.l	-(a7)
	pea	1.w
	move.l	#-$7fffffc8,-(a7)
	clr.l	-(a7)
	move.l	#-$7fffffc9,-(a7)
	move.l	-$30(a5),a0
	moveq	#0,d0
	move.w	$c(a0),d0
	move.l	d0,-(a7)
	move.l	#-$7fffffdb,-(a7)
	move.l	-$30(a5),a0
	move.l	8(a0),-(a7)
	move.l	#-$7fffffdc,-(a7)
	move.l	-$30(a5),a0
	move.l	4(a0),-(a7)
	move.l	#-$7fffffdd,-(a7)
	move.l	-$30(a5),a0
	move.l	(a0),-(a7)
	move.l	#-$7fffffce,-(a7)
	move.l	_IntuitionBase(a4),a6
	sub.l	a0,a0
	move.l	a7,a1
	jsr	-$264(a6)
	add.w	#$34,a7
	move.l	d0,-4(a5)
;					if (screen)
	beq	L138
L86:
;					
;						window = OpenWindowTags(NULL,
	clr.l	-(a7)
	pea	1.w
	move.l	#-$7fffff77,-(a7)
	move.l	-4(a5),-(a7)
	move.l	#-$7fffff90,-(a7)
	pea	1.w
	move.l	#-$7fffff80,-(a7)
	pea	1.w
	move.l	#-$7fffff76,-(a7)
	pea	1.w
	move.l	#-$7fffff7a,-(a7)
	move.l	#$600418,-(a7)
	move.l	#-$7fffff96,-(a7)
	pea	1.w
	move.l	#-$7fffff78,-(a7)
	move.l	-4(a5),a0
	move.w	$e(a0),d0
	ext.l	d0
	move.l	d0,-(a7)
	move.l	#-$7fffff99,-(a7)
	move.l	-4(a5),a0
	move.w	$c(a0),d0
	ext.l	d0
	move.l	d0,-(a7)
	move.l	#-$7fffff9a,-(a7)
	clr.l	-(a7)
	move.l	#-$7fffff9b,-(a7)
	clr.l	-(a7)
	move.l	#-$7fffff9c,-(a7)
	move.l	_IntuitionBase(a4),a6
	sub.l	a0,a0
	move.l	a7,a1
	jsr	-$25e(a6)
	add.w	#$5c,a7
	move.l	d0,a3
;						if (window)
	cmp.w	#0,a3
	beq	L137
L87:
;						
;							view.x0 = -2.0;
	move.l	#-$40000000,_view(a4)
	clr.l	_view+4(a4)
;							view.x1 = 2.0;
	move.l	#$40000000,_view+$10(a4)
	clr.l	_view+$14(a4)
;							view.y0 = 2.0;
	move.l	#$40000000,_view+8(a4)
	clr.l	_view+$c(a4)
;							view.y1 = -2.0;
	move.l	#-$40000000,_view+$18(a4)
	clr.l	_view+$1c(a4)
;							DoCDrawMethodTagList(&gethook,&screen->RastPort,NULL);
	move.l	-4(a5),a0
	lea	$54(a0),a1
	move.l	_CyberGfxBase(a4),a6
	lea	-$18(a5),a0
	sub.l	a2,a2
	jsr	-$9c(a6)
;							if (gfxbuf.colormodel == PIXFMT_LUT8)
	move.w	_gfxbuf+$18(a4),d0
	bne	L91
L88:
;							
;								for (i = 0;
	moveq	#0,d5
	bra	L90
L89:
;								
;									red = lut[i] >> 16 & 0xff;
	lea	_lut(a4),a0
	move.l	0(a0,d5.l*4),d4
	moveq	#$10,d0
	lsr.l	d0,d4
	and.l	#$ff,d4
;									green = lut[i] >> 8 & 0xff;
	lea	_lut(a4),a0
	move.l	0(a0,d5.l*4),d0
	lsr.l	#8,d0
	and.l	#$ff,d0
;									blue = lut[i] & 0xff;
	lea	_lut(a4),a0
	move.l	0(a0,d5.l*4),d1
	and.l	#$ff,d1
;									SetRGB32(&screen->ViewPort,
	move.l	d1,d2
	asl.l	#8,d2
	move.l	d1,d3
	or.l	d2,d3
	move.l	d1,d2
	moveq	#$10,d6
	asl.l	d6,d2
	or.l	d2,d3
	moveq	#$18,d2
	asl.l	d2,d1
	or.l	d1,d3
	move.l	d0,d1
	asl.l	#8,d1
	move.l	d0,d2
	or.l	d1,d2
	move.l	d0,d1
	moveq	#$10,d6
	asl.l	d6,d1
	or.l	d1,d2
	moveq	#$18,d1
	asl.l	d1,d0
	or.l	d0,d2
	move.l	d4,d0
	asl.l	#8,d0
	move.l	d4,d1
	or.l	d0,d1
	move.l	d4,d0
	moveq	#$10,d6
	asl.l	d6,d0
	or.l	d0,d1
	moveq	#$18,d0
	asl.l	d0,d4
	or.l	d4,d1
	move.l	-4(a5),a1
	move.l	_GfxBase(a4),a6
	move.l	d5,d0
	lea	$2c(a1),a0
	jsr	-$354(a6)
	addq.l	#1,d5
L90:
	cmp.l	#$100,d5
	blt	L89
L91:
;							gfxport = &gfxbuf;
	lea	_gfxbuf(a4),a0
	move.l	a0,_gfxport(a4)
;							gfxport->memptr = (UBYTE *) AllocVec(gfxport->ysize*gfxp
	move.l	$10(a0),d0
	move.l	_gfxport(a4),a0
	moveq	#0,d1
	move.w	$14(a0),d1
	mulu.l	d1,d0
	move.l	_SysBase(a4),a6
	moveq	#0,d1
	jsr	-$2ac(a6)
	move.l	_gfxport(a4),a1
	move.l	d0,(a1)
;							if (gfxport->memptr)
	move.l	_gfxport(a4),a0
	tst.l	(a0)
	beq	L136
L92:
;							
;								BOOL redraw = TRUE;
	moveq	#1,d4
;								BOOL quit = FALSE;
	clr.w	-$44(a5)
;								BOOL draw_with_ppc = TRUE;
	moveq	#1,d5
;								BOOL contdraw = FALSE;
;								while (!quit)
	bra	L134
L93:
;								
;									if (redraw)
	tst.w	d4
	beq.b	L98
L94:
;									
;										if (draw_with_ppc)
	tst.w	d5
	beq.b	L96
L95:
;											PPCDrawMandelbrot(&view,gfxport,N)
	move.l	_N(a4),-(a7)
	move.l	_gfxport(a4),-(a7)
	pea	_view(a4)
	bsr	_PPCDrawMandelbrot
	add.w	#$c,a7
	bra.b	L97
L96:
;											DrawMandelbrot(&view,gfxport,N);
	move.l	_N(a4),-(a7)
	move.l	_gfxport(a4),-(a7)
	pea	_view(a4)
	bsr	_DrawMandelbrot
	add.w	#$c,a7
L97:
;										DoCDrawMethodTagList(&drawhook,&screen->RastPort,N
	move.l	-4(a5),a0
	lea	$54(a0),a1
	move.l	_CyberGfxBase(a4),a6
	lea	-$2c(a5),a0
	sub.l	a2,a2
	jsr	-$9c(a6)
;										DrawMandelInfo(&screen->RastPort,draw_with_ppc,N,v
	pea	_view(a4)
	move.l	_N(a4),-(a7)
	move.w	d5,-(a7)
	move.l	-4(a5),a1
	pea	$54(a1)
	bsr	_DrawMandelInfo
	add.w	#$e,a7
;										redraw = FALSE;
	moveq	#0,d4
L98:
;									sigs = Wait(4096|(1L << window->UserPort->mp_SigBit))
	move.l	a3,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(a4),a6
	jsr	-$13e(a6)
;									if (sigs & 4096)
	and.l	#$1000,d0
	beq	L133
L99:
;										
	bra	L135
L100:
;									while (msg = (struct IntuiMessage *) GetMsg(window->
	bra	L133
L101:
;									
;										double w = (double) gfxport->xsize;
	move.l	_gfxport(a4),a0
	move.l	$c(a0),d0
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$24(a6)
	move.l	d0,-$58(a5)
	move.l	d1,-$54(a5)
;										double h = (double) gfxport->ysize;
	move.l	_gfxport(a4),a0
	move.l	$10(a0),d0
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$24(a6)
	move.l	d0,-$60(a5)
	move.l	d1,-$5c(a5)
;										double dx = (view.x1 - view.x0) / w;
	move.l	_view+$10(a4),d0
	move.l	_view+$14(a4),d1
	move.l	_view(a4),d2
	move.l	_view+4(a4),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$48(a6)
	move.l	-$58(a5),d2
	move.l	-$54(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$54(a6)
	move.l	d0,-$68(a5)
	move.l	d1,-$64(a5)
;										double dy = (view.y1 - view.y0) / h;
	move.l	_view+$18(a4),d0
	move.l	_view+$1c(a4),d1
	move.l	_view+8(a4),d2
	move.l	_view+$c(a4),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$48(a6)
	move.l	-$60(a5),d2
	move.l	-$5c(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$54(a6)
	move.l	d0,d6
	move.l	d1,d7
;										double mx = (double) msg->MouseX;
	move.w	$20(a1),d0
	ext.l	d0
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$24(a6)
	move.l	d0,-$78(a5)
	move.l	d1,-$74(a5)
;										double my = (double) msg->MouseY;
	move.w	$22(a1),d0
	ext.l	d0
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$24(a6)
	move.l	d0,-$80(a5)
	move.l	d1,-$7c(a5)
;										if ((msg->Class == IDCMP_MOUSEBUTTONS && msg->Code
	move.l	$14(a1),d0
	cmp.l	#8,d0
	bne.b	L103
L102:
	move.w	$18(a1),d0
	cmp.w	#$68,d0
	beq.b	L104
L103:
	moveq	#0,d0
	move.w	$1a(a1),d0
	and.l	#$4000,d0
	beq	L105
L104:
;										
;											view.x0 = view.x0 + 0.05 * mx * dx;
	move.l	_view(a4),-$d0(a5)
	move.l	_view+4(a4),-$cc(a5)
	move.l	-$78(a5),d0
	move.l	-$74(a5),d1
	move.l	#$3fa99999,d2
	move.l	#-$66666667,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	-$68(a5),d2
	move.l	-$64(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	-$d0(a5),d0
	move.l	-$cc(a5),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view(a4)
	move.l	d1,_view+4(a4)
;											view.x1 = view.x0 + 0.95 * dx * w;
	move.l	_view(a4),-$c8(a5)
	move.l	_view+4(a4),-$c4(a5)
	move.l	-$68(a5),d0
	move.l	-$64(a5),d1
	move.l	#$3fee6666,d2
	move.l	#$66666666,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	-$58(a5),d2
	move.l	-$54(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	-$c8(a5),d0
	move.l	-$c4(a5),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view+$10(a4)
	move.l	d1,_view+$14(a4)
;											view.y0 = view.y0 + 0.05 * my * dy;
	move.l	_view+8(a4),-$c0(a5)
	move.l	_view+$c(a4),-$bc(a5)
	move.l	-$80(a5),d0
	move.l	-$7c(a5),d1
	move.l	#$3fa99999,d2
	move.l	#-$66666667,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d6,d2
	move.l	d7,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	-$c0(a5),d0
	move.l	-$bc(a5),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view+8(a4)
	move.l	d1,_view+$c(a4)
;											view.y1 = view.y0 + 0.95 * dy * h;
	move.l	_view+8(a4),-$b8(a5)
	move.l	_view+$c(a4),-$b4(a5)
	move.l	d6,d0
	move.l	d7,d1
	move.l	#$3fee6666,d2
	move.l	#$66666666,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	-$60(a5),d2
	move.l	-$5c(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	-$b8(a5),d0
	move.l	-$b4(a5),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view+$18(a4)
	move.l	d1,_view+$1c(a4)
;											redraw = TRUE;
	moveq	#1,d4
;											contdraw = TRUE;
L105:
;										if ((msg->Class == IDCMP_MOUSEBUTTONS && msg->Code
	move.l	$14(a1),d0
	cmp.l	#8,d0
	bne.b	L107
L106:
	move.w	$18(a1),d0
	cmp.w	#$69,d0
	beq.b	L108
L107:
	moveq	#0,d0
	move.w	$1a(a1),d0
	and.l	#$2000,d0
	beq	L109
L108:
;										
;											view.x0 = view.x0 - 0.05 * mx * dx;
	move.l	_view(a4),-$b0(a5)
	move.l	_view+4(a4),-$ac(a5)
	move.l	-$78(a5),d0
	move.l	-$74(a5),d1
	move.l	#$3fa99999,d2
	move.l	#-$66666667,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	-$68(a5),d2
	move.l	-$64(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	-$b0(a5),d0
	move.l	-$ac(a5),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$48(a6)
	move.l	d0,_view(a4)
	move.l	d1,_view+4(a4)
;											view.x1 = view.x0 + 1.05 * dx * w;
	move.l	_view(a4),-$a8(a5)
	move.l	_view+4(a4),-$a4(a5)
	move.l	-$68(a5),d0
	move.l	-$64(a5),d1
	move.l	#$3ff0cccc,d2
	move.l	#-$33333334,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	-$58(a5),d2
	move.l	-$54(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	-$a8(a5),d0
	move.l	-$a4(a5),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view+$10(a4)
	move.l	d1,_view+$14(a4)
;											view.y0 = view.y0 - 0.05 * my * dy;
	move.l	_view+8(a4),-$a0(a5)
	move.l	_view+$c(a4),-$9c(a5)
	move.l	-$80(a5),d0
	move.l	-$7c(a5),d1
	move.l	#$3fa99999,d2
	move.l	#-$66666667,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d6,d2
	move.l	d7,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	-$a0(a5),d0
	move.l	-$9c(a5),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$48(a6)
	move.l	d0,_view+8(a4)
	move.l	d1,_view+$c(a4)
;											view.y1 = view.y0 + 1.05 * dy * h;
	move.l	_view+8(a4),-$98(a5)
	move.l	_view+$c(a4),-$94(a5)
	move.l	d6,d0
	move.l	d7,d1
	move.l	#$3ff0cccc,d2
	move.l	#-$33333334,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	-$60(a5),d2
	move.l	-$5c(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	-$98(a5),d0
	move.l	-$94(a5),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view+$18(a4)
	move.l	d1,_view+$1c(a4)
;											redraw = TRUE;
	moveq	#1,d4
L109:
;										if (msg->Class == IDCMP_RAWKEY)
	move.l	$14(a1),d0
	cmp.l	#$400,d0
	bne	L115
L110:
;										
;											switch (msg->Code)
	move.w	$18(a1),d0
	cmp.w	#$4e,d0
	beq	L113
	bhi.b	L142
	cmp.w	#$4c,d0
	beq.b	L111
	cmp.w	#$4d,d0
	beq	L112
	bra	L115
L142:
	cmp.w	#$4f,d0
	beq	L114
	bra	L115
;											
;												
L111:
;													view.y0 -= dy * h / 4;
	move.l	d6,d0
	move.l	d7,d1
	move.l	-$60(a5),d2
	move.l	-$5c(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	#$40100000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$54(a6)
	move.l	d0,d2
	move.l	d1,d3
	lea	_view(a4),a0
	move.l	8(a0),d0
	move.l	$c(a0),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$48(a6)
	move.l	d0,_view+8(a4)
	move.l	d1,_view+$c(a4)
;													view.y1 = view.y0 + h * dy;
	move.l	_view+8(a4),-$90(a5)
	move.l	_view+$c(a4),-$8c(a5)
	move.l	-$60(a5),d0
	move.l	-$5c(a5),d1
	move.l	d6,d2
	move.l	d7,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	-$90(a5),d0
	move.l	-$8c(a5),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view+$18(a4)
	move.l	d1,_view+$1c(a4)
;													redraw = TRUE;
	moveq	#1,d4
;													
	bra	L115
L112:
;													view.y0 += dy * h / 4;
	move.l	d6,d0
	move.l	d7,d1
	move.l	-$60(a5),d2
	move.l	-$5c(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	#$40100000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$54(a6)
	move.l	d0,d2
	move.l	d1,d3
	lea	_view(a4),a0
	move.l	8(a0),d0
	move.l	$c(a0),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view+8(a4)
	move.l	d1,_view+$c(a4)
;													view.y1 = view.y0 + h * dy;
	move.l	_view+8(a4),-$88(a5)
	move.l	_view+$c(a4),-$84(a5)
	move.l	-$60(a5),d0
	move.l	-$5c(a5),d1
	move.l	d6,d2
	move.l	d7,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	-$88(a5),d0
	move.l	-$84(a5),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view+$18(a4)
	move.l	d1,_view+$1c(a4)
;													redraw = TRUE;
	moveq	#1,d4
;													
	bra	L115
L113:
;													view.x0 += dx * w / 4;
	move.l	-$68(a5),d0
	move.l	-$64(a5),d1
	move.l	-$58(a5),d2
	move.l	-$54(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	#$40100000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$54(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	_view(a4),d0
	move.l	_view+4(a4),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view(a4)
	move.l	d1,_view+4(a4)
;													view.x1 = view.x0 + w * dx;
	move.l	_view(a4),d6
	move.l	_view+4(a4),d7
	move.l	-$58(a5),d0
	move.l	-$54(a5),d1
	move.l	-$68(a5),d2
	move.l	-$64(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	d6,d0
	move.l	d7,d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view+$10(a4)
	move.l	d1,_view+$14(a4)
;													redraw = TRUE;
	moveq	#1,d4
;													
	bra	L115
L114:
;													view.x0 -= dx * w / 4;
	move.l	-$68(a5),d0
	move.l	-$64(a5),d1
	move.l	-$58(a5),d2
	move.l	-$54(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	#$40100000,d2
	moveq	#0,d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$54(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	_view(a4),d0
	move.l	_view+4(a4),d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$48(a6)
	move.l	d0,_view(a4)
	move.l	d1,_view+4(a4)
;													view.x1 = view.x0 + w * dx;
	move.l	_view(a4),d6
	move.l	_view+4(a4),d7
	move.l	-$58(a5),d0
	move.l	-$54(a5),d1
	move.l	-$68(a5),d2
	move.l	-$64(a5),d3
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$4e(a6)
	move.l	d0,d2
	move.l	d1,d3
	move.l	d6,d0
	move.l	d7,d1
	move.l	_MathIeeeDoubBasBase(a4),a6
	jsr	-$42(a6)
	move.l	d0,_view+$10(a4)
	move.l	d1,_view+$14(a4)
;													redraw = TRUE;
	moveq	#1,d4
;													
L115:
;										if (msg->Class == IDCMP_VANILLAKEY)
	move.l	$14(a1),d0
	cmp.l	#$200000,d0
	bne	L132
L116:
;										
;											if (msg->Code >= '1' && msg->Code <= '9')
	move.w	$18(a1),d0
	cmp.w	#$31,d0
	blo.b	L122
L117:
	move.w	$18(a1),d0
	cmp.w	#$39,d0
	bhi.b	L122
L118:
;											
;												if (msg->Qualifier & IEQUALIFIER_CONTROL)
	moveq	#0,d0
	move.w	$1a(a1),d0
	and.l	#8,d0
	beq.b	L120
L119:
;													views[msg->Code - '1'] = view
	lea	_views(a4),a0
	moveq	#0,d0
	move.w	$18(a1),d0
	lea	-$620(a0),a0
	asl.l	#5,d0
	lea	0(a0,d0.l),a6
	move.l	a6,a0
	lea	_view(a4),a6
	moveq	#7,d0
L143:
	move.l	(a6)+,(a0)+
	dbra	d0,L143
	bra.b	L121
L120:
;													view = views[msg->Code - '1'];
	lea	_views(a4),a0
	moveq	#0,d0
	move.w	$18(a1),d0
	lea	-$620(a0),a0
	asl.l	#5,d0
	lea	0(a0,d0.l),a6
	lea	_view(a4),a0
	moveq	#7,d0
L144:
	move.l	(a6)+,(a0)+
	dbra	d0,L144
L121:
;												redraw = TRUE;
	moveq	#1,d4
	bra.b	L132
L122:
;											
;												switch (msg->Code)
	move.w	$18(a1),d0
	cmp.w	#$71,d0
	beq.b	L129
	bhi.b	L145
	cmp.w	#$2b,d0
	beq.b	L123
	cmp.w	#$2d,d0
	beq.b	L126
	bra.b	L132
L145:
	cmp.w	#$73,d0
	beq.b	L132
	cmp.w	#$74,d0
	beq.b	L130
	bra.b	L132
;												
;													
L123:
;														if (N < 1000)
	move.l	_N(a4),d0
	cmp.l	#$3e8,d0
	bge.b	L132
L124:
;														
;															N += 20;
	add.l	#$14,_N(a4)
;															redraw = TRUE;
	moveq	#1,d4
L125:
;														
	bra.b	L132
L126:
;														if (N >= 40)
	move.l	_N(a4),d0
	cmp.l	#$28,d0
	blt.b	L132
L127:
;														
;															N -= 20;
	sub.l	#$14,_N(a4)
;															redraw = TRUE;
	moveq	#1,d4
L128:
;														
	bra.b	L132
L129:
;														quit = TRUE;
	move.w	#1,-$44(a5)
;														
	bra.b	L132
L130:
;														draw_with_ppc = !draw_with_ppc;
	tst.w	d5
	seq	d0
	and.l	#1,d0
	move.w	d0,d5
;														redraw = TRUE;
	moveq	#1,d4
;														
L131:
;														contdraw = FALSE;
;														
L132:
;										ReplyMsg((struct Message *) msg);
	move.l	_SysBase(a4),a6
	jsr	-$17a(a6)
L133:
	move.l	a3,a1
	move.l	_SysBase(a4),a6
	move.l	$56(a1),a0
	jsr	-$174(a6)
	move.l	d0,a1
	cmp.w	#0,a1
	bne	L101
L134:
	tst.w	-$44(a5)
	beq	L93
L135:
;								FreeVec(gfxport->memptr);
	move.l	_gfxport(a4),a0
	move.l	_SysBase(a4),a6
	move.l	(a0),a1
	jsr	-$2b2(a6)
L136:
;							CloseWindow(window);
	move.l	_IntuitionBase(a4),a6
	move.l	a3,a0
	jsr	-$48(a6)
L137:
;						CloseScreen(screen);
	move.l	_IntuitionBase(a4),a6
	move.l	-4(a5),a0
	jsr	-$42(a6)
L138:
;				FreeAslRequest(request);
	move.l	_AslBase(a4),a6
	move.l	-$30(a5),a0
	jsr	-$36(a6)
L139:
;			CloseLibrary(CyberGfxBase);
	move.l	_CyberGfxBase(a4),a1
	move.l	_SysBase(a4),a6
	jsr	-$19e(a6)
L140:
	movem.l	(a7)+,d2-d7/a2/a3/a6
	unlk	a5
	moveq	#0,d0
	rts

L63:
	dc.b	", Depth: %ld",0
L62:
	dc.b	"CPU: 68K",0
L61:
	dc.b	"CPU: PPC",0
L64:
	dc.b	"From: (%g,%g)",0
L72:
	dc.b	"Select Cybergraphics Screen Mode",0
L65:
	dc.b	"To:   (%g,%g)",0
L71:
	dc.b	"cybergraphics.library",0

	SECTION	":1",Data
	XDEF	_N
_N:
	dc.l	$14

	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	_CyberGfxBase
_CyberGfxBase:
	ds.l	1

	END
