* Das folgende Programm zeichnet eine Sinuskurve mit hilfe der FPU im
* Bereich von -2Pi bis +2Pi.

		MC68040

		SECTION	CODE

		include	"exec/exec_lib.i"
		include	"graphics/gfx.i"
		include	"graphics/graphics_lib.i"
		include	"intuition/intuition.i"
		include	"intuition/intuition_lib.i"
		include	"intuition/screens.i"

		lea.l	IntName,a1
		moveq	#0,d0
		CALLEXEC	OpenLibrary		; Intuition öffnen
		move.l	d0,_IntuitionBase
		beq	NoInt
		lea.l	GrafName,a1
		moveq	#0,d0
		jsr	_LVOOpenLibrary(a6)	; Graphics öffnen
		move.l	d0,_GfxBase
		beq	NoGfx

		sub.l	a0,a0
		lea.l	WinTags,a1
		CALLINT	OpenWindowTagList		; Fenster öffnen
		move.l	d0,SinWin
		beq	NoWin
		move.l	d0,a5
		move.l	wd_RPort(a5),a5		; RastPort immer a5
		move.l	a5,a1
		moveq	#1,d0
		CALLGRAF	SetAPen                    ; Vordergrundfarbe = 1
		move.l	a5,a1
		move.w	#320,d0
		moveq	#51,d1
		jsr	_LVOMove(a6)		; Koordinatensystem
		move.l	a5,a1
		move.w	#320,d0
		move.w	#160,d1
		jsr	_LVODraw(a6)		; Y-Achse
		move.l	a5,a1
		move.w	#635,d0
		moveq	#111,d1
		jsr	_LVOMove(a6)		; und
		move.l	a5,a1
		moveq	#4,d0
		moveq	#111,d1
		jsr	_LVODraw(a6)		; X-Achse
		move.l	a5,a1
		moveq	#3,d0
		jsr	_LVOSetAPen(a6)		; Vordergrundfarbe = 3

		fatan.x	#1,fp0
		fmul.x	#4*2,fp0			; 4 * (ATAN 1) = Pi
		fmove.x	fp0,fp7
		fdiv.x	#631,fp7			; 631 Schritte (Pixel)
		fneg.x	fp0			; Start bei -2Pi
		move.w	#630,d7			; Schleifenzähler
SinLoop		fsin.x	fp0,fp1			; der Sinus
		fmul.x	#50,fp1			; vergrößern um Faktor 50
		fint.x	fp1			; Runden
		move.w	#634,d0
		sub.w	d7,d0
		fmove.l	fp1,d1
		add.w	#111,d1
		move.l	a5,a1
		jsr	_LVODraw(a6)		; einzeichnen
		fadd.x	fp7,fp0			; einen Scritt weiter
		dbra	d7,SinLoop		; fertig ?

		move.l	SinWin,a0		; Wenn ja, warten
		move.l	wd_UserPort(a0),a0
		CALLEXEC	WaitPort			; bis Fenster geschloßen

Ende		move.l	SinWin,a0
		CALLINT	CloseWindow		; Fenster zu
NoWin		move.l	_GfxBase,a1
		CALLEXEC	CloseLibrary		; Graphics schließen
NoGfx		move.l	_IntuitionBase,a1
		jsr	_LVOCloseLibrary(a6)	; Intuition schließen
NoInt		rts

WinTags		dc.l	WA_Left,0		; Tags für OpenWindowTagList
		dc.l	WA_Top,0
		dc.l	WA_Width,640
		dc.l	WA_Height,200
		dc.l	WA_Title,WinTit
		dc.l	WA_Flags,WFLG_ACTIVATE!WFLG_CLOSEGADGET!WFLG_DEPTHGADGET!WFLG_DRAGBAR
		dc.l	WA_IDCMP,IDCMP_CLOSEWINDOW
		dc.l	TAG_DONE
WinTit		dc.b	'Sinuskurve mit der FPU!',0
		even

SinWin            dc.l	0		; Variable für Fensteradresse

IntName		INTNAME
_IntuitionBase	dc.l	0
GrafName		GRAFNAME
_GfxBase		dc.l	0

		END
