; assembleren met DevPac

; Dit is een hele oude source-code, dus let niet op omslachtigheden



  include "i"

;Henons bij Mike Pot !!!

	OpenLib Intuition
	beq	Error
	OpenLib Graphics
	beq	Error
	OpenLib MathFfp
	beq	Error
	OpenLib MathTrans
	beq	Error
	OpenLib Dos
	beq	Error

	Call	Dos,Output
	move.l	d0,d1
	move.l	#TextLine,d2
	move.l	#TextSize,d3
	Call	Dos,Write

	lea	ScreenDef(pc),a0
	Call	Intuition,OpenScreen
	move.l	d0,Screen
	beq	Error
	add.l	#84,d0
	move.l	d0,RastPort

	move.l	d0,a1
	moveq	#1,d0
	Call	Graphics,SetAPen

;En nu de henon

Henon:
	move.l	RastPort(pc),a1
	Call	Graphics,ClearScreen
	move.l	x1,x0
	move.l	y1,y0
	bsr	GetValues
	move	n,j
Loop1:
	move	p,i
	move.l	x0,xold
	move.l	y0,yold
Loop2:
	jsr	One
	bge	AbbortLoop2
	jsr	Two
	jsr	Three
	bcc	DontDrawIt
	move.l	x,d0
	move.l	MathFfpBase,a6
	jsr	SPFix(a6)
	move.l	d0,f
	move.l	y,d0
	move.l	MathFfpBase,a6
	jsr	SPFix(a6)
	move.l	d0,d1
	move.l	f,d0
	move.l	RastPort,a1
	move.l	GraphicsBase,a6
	jsr	WritePixel(a6)
DontDrawIt:
	move.l	xnew,xold
	move.l	ynew,yold
	sub	#1,i
	bne	Loop2
AbbortLoop2:
	btst	#6,$bfe001
	beq	NoMore
	jsr	Four
	sub    #1,j
	bne	Loop1
	move.l	a,d0
	move.l	ia,d1
	move.l	MathFfpBase,a6
	jsr	SPMul(a6)
	move.l	d0,a
	bra	Henon

NoMore:
	move.l	#$100000,d0
Delaying:
	sub.l	#1,d0
	bne	Delaying

	move.l	Screen,a0
	move.l	IntuitionBase,a6
	jsr	CloseScreen(a6)

Error:
	CloseLib Dos
	CloseLib Graphics
	CloseLib Intuition
	CloseLib MathFfp
	CloseLib MathTrans
	clr	d0
	rts

GetValues:
	move.l	a,d0
	Call	MathTrans,SPSin
	move.l	d0,sina
	move.l	a,d0
	Call	MathTrans,SPCos
	move.l	d0,cosa
	move.l	r,d0
	move.l	l,d1
	move.l	MathFfpBase,a6
  jsr      SPSub(a6)
  move.l   d0,f
  move.l   h,d0
  move.l   MathFfpBase,a6
  jsr      SPFlt(a6)
  move.l   d0,hf
  move.l   f,d1
  move.l   MathFfpBase,a6
  jsr      SPDiv(a6)
  move.l   d0,xscale
  move.l   t,d0
  move.l   u,d1
  move.l   MathFfpBase,a6
  jsr      SPSub(a6)
  move.l   d0,f
  move.l   v,d0
  move.l   MathFfpBase,a6
  jsr      SPFlt(a6)
  move.l   d0,vf
  move.l   f,d1
  move.l   MathFfpBase,a6
  jsr      SPDiv(a6)
  move.l   d0,yscale
  rts

One:
  move.l   xold,d0
  move.l   MathFfpBase,a6
  jsr      SPAbs(a6)
  move.l   maxreal,d1
  move.l   MathFfpBase,a6
  jsr      SPCmp(a6)
  bge      Exit1
  move.l   yold,d0
  move.l   MathFfpBase,a6
  jsr      SPAbs(a6)
  move.l   maxreal,d1
  move.l   MathFfpBase,a6
  jsr      SPCmp(a6)
Exit1:
  rts

Two:
  move.l   xold,d0
  move.l   d0,d1
  move.l   MathFfpBase,a6
  jsr      SPMul(a6)
  move.l   d0,d1
  move.l   yold,d0
  move.l   MathFfpBase,a6
  jsr      SPSub(a6)
  move.l   d0,z
  move.l   sina,d1
  move.l   MathFfpBase,a6
  jsr      SPMul(a6)
  move.l   d0,f
  move.l   xold,d0
  move.l   cosa,d1
  move.l   MathFfpBase,a6
  jsr      SPMul(a6)
  move.l   f,d1
  move.l   MathFfpBase,a6
  jsr      SPSub(a6)
  move.l   d0,xnew
  move.l   l,d1
  move.l   MathFfpBase,a6
  jsr      SPSub(a6)
  move.l   xscale,d1
  move.l   MathFfpBase,a6
  jsr      SPMul(a6)
  move.l   d0,x
  move.l   z,d0
  move.l   cosa,d1
  move.l   MathFfpBase,a6
  jsr      SPMul(a6)
  move.l   d0,f
  move.l   xold,d0
  move.l   sina,d1
  move.l   MathFfpBase,a6
  jsr      SPMul(a6)
  move.l   f,d1
  move.l   MathFfpBase,a6
  jsr      SPSub(a6)
  move.l   d0,ynew
  move.l   d0,d1
  move.l   t,d0
  move.l   MathFfpBase,a6
  jsr      SPSub(a6)
  move.l   yscale,d1
  move.l   MathFfpBase,a6
  jsr      SPMul(a6)
  move.l   d0,y
  rts

Three:
  move.l   hf,d1
  move.l   x,d0
  move.l   MathFfpBase,a6
  jsr      SPCmp(a6)
  bcc      Exit2
  move.l   vf,d1
  move.l   y,d0
  move.l   MathFfpBase,a6
  jsr      SPCmp(a6)
Exit2:
  rts

Four:
  move.l   x0,d0
  move.l   dx,d1
  move.l   MathFfpBase,a6
  jsr      SPAdd(a6)
  move.l   d0,x0
  move.l   y0,d0
  move.l   dy,d1
  move.l   MathFfpBase,a6
  jsr      SPAdd(a6)
  move.l   d0,y0
  rts

  even

Screen: dc.l 0
RastPort: dc.l 0
IntuitionBase: dc.l 0
GraphicsBase: dc.l 0
MathFfpBase: dc.l 0
MathTransBase: dc.l 0
a: dc.l $c97a7941		;rotzooi hier
ia: dc.l $70000042		;en hier
l: dc.l $800000c2
r: dc.l $80000042
u: dc.l $800000c2
t: dc.l $80000042
x1: dc.l $c12d9c3d
y1: dc.l $f9dbc43c
x0: dc.l 0
y0: dc.l 0
dx: dc.l $aceb503c
dy: dc.l $fa43f13b
n: dc 200
p: dc 50
i: dc 0
j: dc 0
maxreal: dc.l $f500004a
h: dc.l 640
v: dc.l 512
hf: dc.l 0
vf: dc.l 0
xold: dc.l 0
yold: dc.l 0
xnew: dc.l 0
ynew: dc.l 0
f: dc.l 0
z: dc.l 0
x: dc.l 0
y: dc.l 0
sina: dc.l 0
cosa: dc.l 0
xscale: dc.l 0
yscale: dc.l 0

ScreenDef:
  dc 0,0,640,512,1
  dc.b 0,1
  dc $8004,0
  dc.l 0,Title,0,0,0
Title: dc.b 'Mike presents: HENON',0

IntuitionName: dc.b "intuition.library",0
GraphicsName: dc.b "graphics.library",0
MathFfpName: dc.b "mathffp.library",0
MathTransName: dc.b "mathtrans.library",0
DosName dc.b "dos.library",0
  even
DosBase dc.l 0

TextLine dc.b "Henons by Mike Pot!",10
TextSize equ *-TextLine

