rout			;when this is off, the routine-file will be
			;assembled, on=testing
			
;debug			;when this is on, colors in the background will
			;show how much time the routine needs.


routinemode	equ	67	;the routinemode !


; the first part of the source handles the things that are necessary to
; show the picture/copper and playing of the routine.
; the part between the "***" lines is the routine-source.
; at the bottom of the file, there are the necessary incbin-files who
; are needed to test the routine.
; these are saved with "save effect" in videotracker. they are raw
; data files which can be fonts,pictures,landscapes,vectorobjects
; etcetra.
; the incbin-files are put in the "variables" table, in the routine-
; player-handler
; the place where it's done can be found by searching for "!!!"


	opt	a+	;devpac 3 optimize
	opt	o+

	ifd	rout
	
	;videotracker routine-test

	incdir	"videotracker:include/"
	include	"exec/types.i"
	include	"graphics/gfxbase.i"
	include	"lvo/graphics_lib.i"
	incdir	'videotracker:effect/'

vew_wid	equ	44
vew_hgt	equ	290
win_hgt	equ	117
win_str	equ	$1a

	SECTION	1,CODE_C
tus


	move.l	($4).w,a6
	sub.l	a1,a1
	jsr	-$126(a6)		;findtask
	move.l	d0,curtsk
	move.l	d0,a0
	move.l	$b8(a0),tskpri

	lea	dosnam,a1		;doslib openen
	moveq.l	#0,d0
	move.l	(4).w,a6
	jsr	-408(a6)		;openlib
	move.l	d0,doslib

	bsr.s	label5			;videotracker opstarten
	
	move.l	curtsk,a0
	move.l	tskpri,$b8(a0)
	move.l	($4).w,a6
	jsr	-$84(a6)		;forbid

	move.l	doslib,a1
	move.l	(4).w,a6
	jsr	-414(a6)		;closelib

	moveq.l	#0,d0
	rts
	
label5
	move.l	(4).w,a6		;workbench gedoe
	move.b	530(a6),ntscmode	;50/60 hertz halen

	cmp.b	#50,ntscmode		;ntsc ?
	beq.s	str.ntsc
	move.l	#vew_hgt-56,hogscr	;set NTSC screen hight
str.ntsc

	move.l	(4).w,a6		;68030 cache off 
	jsr	-120(a6)

	btst.b	#1,297(a6)
	beq.s	str.nfc
	lea.l	str.ft,a5
	jsr	-30(a6)
str.nfc
	jsr	-126(a6)
	bra.s	str.fc
	
str.ft
	dc.w	$4e7a,2
	bclr	#0,d0
	bset	#13,d0
	dc.w	$4e7b,2
	rte
str.fc

	lea	cprjmp,a2		;copjmp zetten !
	move.l	#cprbck-8,d0
	move.w	d0,6(a2)
	swap	d0
	move.w	d0,2(a2)

	lea	cprbck-8,a2		;copstr zetten !
	move.l	#cpr,d0
	move.w	d0,6(a2)
	swap	d0
	move.w	d0,2(a2)

	bsr	cprsprrem		;sprites legen

	lea	gfxnam,a1		;graphics lib openen
	move.l	(4).w,a6
	jsr	-408(a6)		;openlib
	move.l	d0,a6
	move.l	d0,gfxlib
	move.l	38(a6),oldcprlist

	bset	#1,$bfe001
	bsr	copbuf			;copper vullen

	bsr	sysoff

gadrun
	btst	#6,($bfe001).l
	bne	gadrun

scrend
scrend.play
	bsr	syson

	move.l	gfxlib,a1
	move.l	(4).w,a6
	jsr	-414(a6)		;closelib

scrend.qb
	moveq.l	#0,d0	
	rts
	
	;vertical blank interrupt, no blits.
	;handles counters,interlace,sprite
	;level 3

intvb
	bra.s	intvb.cnt
	dc.l	'VIDU'
	dc.l	'LOOP'
intvb.cnt
	movem.l	d0-d7/a0-a6,-(sp)
	lea	($dff000).l,a6

	move.w	$01e(a6),d0
	btst	#5,d0			;vblank ?
	bne.s	intvb.vb

	bra.s	intcop.end

intvb.vb
	bsr	grap
	bsr	palctr			;palette zetten
	bsr.s	copbuf			;copper vullen
	
intvb.end
	move.w	#$0020,$09c(a6)	;vb bit wissen
	movem.l	(sp)+,d0-d7/a0-a6	;multitask uit, shit !
	rte

intcop.end
	movem.l	(sp)+,d0-d7/a0-a6
	move.l	intvbold,-(sp)
	rts

	;transmission buffer empty routine, BLIT !
	;handles routines,animations
	
inttbe					;tbe interrupt
	movem.l	d0-d7/a0-a6,-(sp)
	lea	($dff000).l,a6

	move.w	$01e(a6),d0
	btst	#0,d0			;no tbe ?
	beq.s	intdskblk


	btst	#6,($bfe001).l		;muis ingedrukt ?
	beq.s	inttbe.cop
	btst	#2,($dff016).l
	beq.s	inttbe.cop

	ifd	debug
	move.w	#$700,$dff180
	endc
	
	bsr	rotply			;routineplayer BLIT !
	bsr.s	copbuf			;copper vullen

	ifd	debug
	move.w	#$070,$dff180
	endc
	
inttbe.cop

inttbe.end
	move.w	#$0001,$09c(a6)
	movem.l	(sp)+,d0-d7/a0-a6
	rte

intdskblk
	move.w	#$0001,$09c(a6)		;be sure for no tbe handling
	movem.l	(sp)+,d0-d7/a0-a6
	move.l	inttbeold,-(sp)
	rts


	;moves the copperbuffer to the copperlist
	;sort of double buffering
	
copbuf
	movem.l	d0-d7/a0-a6,-(sp)

	lea	($dff000).l,a6

copbuf.novb				;copperchange overslaan
	moveq.l	#0,d0
	move.b	$005(a6),d0
	lsl.w	#8,d0
	moveq.l	#0,d1
	move.b	$006(a6),d1
	add.w	d1,d0

	cmp.w	#$4,d0
	blt	copbuf.novb

	cmp.b	#50,ntscmode
	beq.s	copbuf.pal
	cmp.w	#$133-56-8,d0		;ntsc grens
	bge	copbuf.novb
	bra.s	copbuf.cont
copbuf.pal
	cmp.w	#$133-8,d0		;pal grens
	bge	copbuf.novb
copbuf.cont

	lea	gra.s,a0		;buffer copieren
	lea	cprbuf,a1

	move.w	00*4+2(a0),00*4+2(a1)
	move.w	01*4+2(a0),01*4+2(a1)
	move.w	02*4+2(a0),02*4+2(a1)
	move.w	03*4+2(a0),03*4+2(a1)
	move.w	04*4+2(a0),04*4+2(a1)
	move.w	05*4+2(a0),05*4+2(a1)
	move.w	06*4+2(a0),06*4+2(a1)
	move.w	07*4+2(a0),07*4+2(a1)
	move.w	08*4+2(a0),08*4+2(a1)
	move.w	09*4+2(a0),09*4+2(a1)

	move.w	10*4+2(a0),10*4+2(a1)
	move.w	11*4+2(a0),11*4+2(a1)
	move.w	12*4+2(a0),12*4+2(a1)
	move.w	13*4+2(a0),13*4+2(a1)
	move.w	14*4+2(a0),14*4+2(a1)
	move.w	15*4+2(a0),15*4+2(a1)
	move.w	16*4+2(a0),16*4+2(a1)
	move.w	17*4+2(a0),17*4+2(a1)
	move.w	18*4+2(a0),18*4+2(a1)
	move.w	19*4+2(a0),19*4+2(a1)

	move.w	20*4+2(a0),20*4+2(a1)
	move.w	21*4+2(a0),21*4+2(a1)
	move.w	22*4+2(a0),22*4+2(a1)
	move.w	23*4+2(a0),23*4+2(a1)
	move.w	24*4+2(a0),24*4+2(a1)
	move.w	25*4+2(a0),25*4+2(a1)
	move.w	26*4+2(a0),26*4+2(a1)
	move.w	27*4+2(a0),27*4+2(a1)
	move.w	28*4+2(a0),28*4+2(a1)
	move.w	29*4+2(a0),29*4+2(a1)

	move.w	30*4+2(a0),30*4+2(a1)
	move.w	31*4+2(a0),31*4+2(a1)
	move.w	32*4+2(a0),32*4+2(a1)
	move.w	33*4+2(a0),33*4+2(a1)
	move.w	34*4+2(a0),34*4+2(a1)
	move.w	35*4+2(a0),35*4+2(a1)
	move.w	36*4+2(a0),36*4+2(a1)
	move.w	37*4+2(a0),37*4+2(a1)
	move.w	38*4+2(a0),38*4+2(a1)
	move.w	39*4+2(a0),39*4+2(a1)

	move.w	40*4+2(a0),40*4+2(a1)
	move.w	41*4+2(a0),41*4+2(a1)
	move.w	42*4+2(a0),42*4+2(a1)
	move.w	43*4+2(a0),43*4+2(a1)
	move.w	44*4+2(a0),44*4+2(a1)
	move.w	45*4+2(a0),45*4+2(a1)
	move.w	46*4+2(a0),46*4+2(a1)
	move.w	47*4+2(a0),47*4+2(a1)
	move.w	48*4+2(a0),48*4+2(a1)
	move.w	49*4+2(a0),49*4+2(a1)

	move.w	50*4+2(a0),50*4+2(a1)
	move.w	51*4+2(a0),51*4+2(a1)
	move.w	52*4+2(a0),52*4+2(a1)
	move.w	53*4+2(a0),53*4+2(a1)
	move.w	54*4+2(a0),54*4+2(a1)

copbuf.end
	movem.l	(sp)+,d0-d7/a0-a6
	rts

	;goes back to the workbench
	
syson
	movem.l	d0-d7/a0-a6,-(sp)

	move.w	#$0001,$dff09a		;tbeint uit
	move.l	intvbold,($6c).w
	move.l	inttbeold,($64).w

	move.l	4,a6
	jsr	-138(a6)		;permit

	move.l	gfxlib,a6
	jsr	-462(a6)		;disownblitter

	move.l	wbview,a1
	move.l	gfxlib,a6
	jsr	_LVOLoadView(a6) 	; Fix view
	jsr	_LVOWaitTOF(a6)
	jsr	_LVOWaitTOF(a6)         ; wait for LoadView()

syson.ras
	cmp.b	#$c0,$dff006		;prevent copperjump
	bne	syson.ras

	move.l	gfxlib,a6
	move.l	gb_copinit(a6),$dff080	 ; Kick it into life

	movem.l	(sp)+,d0-d7/a0-a6
	rts
	
	;goes back to the gadgetscreen
	
sysoff
	movem.l	d0-d7/a0-a6,-(sp)
 	
	move.l	gfxlib,a6
	move.l	gb_ActiView(a6),wbview	;current view
	sub.l	a1,a1			; clear a1
	jsr 	_LVOLoadView(a6) 	; Flush View to nothing
	jsr	_LVOWaitTOF(a6) 	; Wait once
	jsr	_LVOWaitTOF(a6) 	; Wait again.

	move.l	gfxlib,a6
	jsr	-456(a6)		;ownblitter

	move.l	4,a6
	jsr	-132(a6)		;forbid
		
	move.l	($6c).w,intvbold
	move.l	#intvb,($6c).w
	move.l	($64).w,inttbeold
	move.l	#inttbe,($64).w
	move.w	#$8001,$dff09a		;tbeint aan
	bsr	gracpr			;reset copper
	bsr	copbuf			;copy copper
	move.l	#cpr,$dff080

	movem.l	(sp)+,d0-d7/a0-a6
	rts
	
cprsprrem
	movem.l	d0-d7/a0-a6,-(sp)
	lea	cprspr,a0
	move.l	#sprdat,d0
	move.w	#7,d1
cprsprrem.a
	move.w	d0,3*2(a0)
	swap	d0
	move.w	d0,1*2(a0)
	swap	d0
	add.l	#8,a0
	dbra	d1,cprsprrem.a
	movem.l	(sp)+,d0-d7/a0-a6
	rts

varset					;variablen neerzetten
	movem.l	d0-d7/a0-a6,-(sp)
	move.l	#var,a0

	move.l	#cprbck,var_cprbck(a0)
	move.l	gfxlib,var__GfxBase(a0)
	move.b	ntscmode,var_ntsc(a0)

	move.l	curpic1,var_pic1(a0)	;variabel
	move.l	curpic2,var_pic2(a0)	;variabel
	move.w	anispd1,var_anispd1(a0)
	move.w	anitel1,var_anitel1(a0)
	movem.l	(sp)+,d0-d7/a0-a6
	rts
	
	;this routine handles all videotracker-routines

rotply	
	movem.l	d0-d7/a0-a6,-(sp)

	moveq.l	#0,d0

	lea	currot1,a2		;routine 1
	move.w	rotinf1,d0		;routine info
	bsr.s	rotplyr

rotply.end
	movem.l	(sp)+,d0-d7/a0-a6
	rts

	;this routine handles 1 routine, BLIT !
	
rotplyr
	movem.l	d0-d7/a1-a6,-(sp)

	move.l	#rot,(a2)		;routinestart address

	move.b	#50,ntscmode		;ntsc/pal hz
	move.l	#rotincpic,curpic1	;incbinfile !!!
	clr.l	curpic2			;background picture
	move.w	#1,anispd1		;animationspeed
	clr.w	anitel1			;animation position

	lea	var,a0			;communication-table

	move.l	#routinemode,d0		;routinemode !!!

	sub.l	a0,a0			;picture info legen

	tst.l	(a2)			;is er een routine ?
	beq	rotplyr.end		;interlace handling

	move.l	intdel,d2		;delay
	move.l	inttel,d1		;teller
	cmp.w	d2,d1
	blt	rotplyr.end
	clr.l	inttel
				
	bsr	varset			;variabelen updaten

	move.l	(a2),a1			;routine halen
	move.l	#var,a0			;variablen tabel

	movem.l	d3-d7/a1-a6,-(sp)
	moveq.l	#0,d1			;vars wissen
	moveq.l	#0,d2
	moveq.l	#0,d3
	moveq.l	#0,d4
	moveq.l	#0,d5
	moveq.l	#0,d6
	moveq.l	#0,d7
	sub.l	a2,a2
	sub.l	a3,a3
	sub.l	a4,a4
	sub.l	a5,a5

	jsr	4(a1)			;routine afwerken
	movem.l	(sp)+,d3-d7/a1-a6

	;Routine:
	;
	;Input:
	;a0=variabelentabel
	;d0=routinemode
	;
	;Output:
	;a0=picture
	;d1=copperlist
	;d2=interruptdelay		(NOT used till now)
	
	move.w	#$0020,$dff09a		;vb off !

	move.l	d2,intdel		;delay

	lea	cprjmp,a3
	move.l	#cprbck-8,d0

	cmp.l	(a2),a1			;routine ondertussen gewipt ?
	bne.s	rotplyr.nocop
	tst.l	d1			;copperlist ?
	beq.s	rotplyr.nocop
	move.l	d1,d0
rotplyr.nocop
	move.w	d0,6(a3)
	swap	d0
	move.w	d0,2(a3)

	cmp.l	#0,a0			;picture ?
	beq.s	rotplyr.endvb

	move.l	a0,curpic1		;current picture (cycle)
	move.l	a0,curpal1		;current palette

	tst.b	rotdpl			;plane is geleverd
	beq.s	rotplyr.set
	clr.b	rotdpl
	clr.l	cycdel1			;cycle info wissen
	clr.l	4+cycdel1
	clr.l	curfrm1			;curfrm1, altijd planes zetten
rotplyr.set
	clr.b	dplctr
	bsr.s	grap
	bsr	grac			;colorset
rotplyr.endvb
	move.w	#$8020,$dff09a
rotplyr.end
	movem.l	(sp)+,d0-d7/a1-a6
	rts

	;removes possible routine-coppers
	
gracpr
	movem.l	d0-d7/a0-a6,-(sp)
	lea	cprjmp,a3
	move.l	#cprbck-8,d0		;copperlist resetten
	move.w	d0,6(a3)
	swap	d0
	move.w	d0,2(a3)
	movem.l	(sp)+,d0-d7/a0-a6
	rts

	;picture-to-copper routine, communicates with the
	;anim-player
	
grap					;d7=anim
	movem.l	d0-d7/a0-a6,-(sp)

	clr.l	d7
	
	tst.l	curpic1			;current picture ?
	beq	grap.end

	move.l	curpic1,a2		;normal pic halen

	lea	gracprscr,a1		;window neerzetten
	move.l	hogscr,d1

	move.w	pic_hgt(a2),d3		;pic hoogte
	move.w	pic_vew(a2),d5
	btst	#2,d5			;interlace ?
	beq.s	grap.nohi4
	lsr.w	#1,d3			;/2
grap.nohi4
	cmp.w	d3,d1
	bge.s	grap.hog
	move.w	d1,d3
grap.hog
	sub.w	d3,d1
	lsr.w	#1,d1
	add.w	#win_str,d1
	move.w	d1,d2
	add.w	d3,d2


	move.b	d1,2(a1)		;y start
	move.b	d2,6(a1)		;y end

	move.w	pic_wid(a2),d4		;pic breedte in bytes
	lsl.l	#3,d4

	move.l	#vew_wid*8,d0
	move.l	#0,d1
	move.l	#$71,d6

	move.w	pic_vew(a2),d5
	btst	#15,d5			;hires ?
	beq.s	grap.nohi2

	move.l	#(vew_wid-4)*8*2,d0
	move.l	#1,d1
	move.l	#$81,d6

	cmp.w	#80,pic_wid(a2)		;overscan ?
	ble.s	grap.nohi2
	move.l	#(vew_wid)*8*2,d0
	move.l	#$61,d6

grap.nohi2	
	btst	#6,d5			;super hires ?
	beq.s	grap.noshi2

	move.l	#(vew_wid-4)*8*4,d0
	move.l	#2,d1
	move.l	#$81,d6

	cmp.w	#80*2,pic_wid(a2)	;overscan ?
	ble.s	grap.noshi2
	move.l	#(vew_wid)*8*4,d0
	move.l	#$61,d6

grap.noshi2	

	clr.w	d5
	cmp.w	d0,d4			;breeder dan scherm ?
	ble.s	grap.c
	move.w	d4,d5
	move.w	d0,d4
	sub.w	d0,d5			;modulo
	lsr.w	#3,d5			;/8
grap.c
	lsr.w	d1,d0
	lsr.w	d1,d4

	move.w	d0,d2
	sub.w	d4,d2
	lsr.w	#1,d2			;/2

	add.w	d6,d2
	move.b	d2,3(a1)		;x start
	move.w	d2,d3			;d3 bewaren !

	add.w	d4,d2			;d4 bewaren !
	move.b	d2,7(a1)		;x end
	
	move.w	pic_vew(a2),d6
	btst	#15,d6			;hires ?
	beq.s	grap.nohi5	
	add.l	d4,d4			;*2
grap.nohi5
	btst	#6,d6			;super hires ?
	beq.s	grap.noshi5	
	add.l	d4,d4			;*4
grap.noshi5

	move.l	d7,-(sp)
	move.w	pic_vew(a2),d6
	move.l	#17,d0
	move.l	#1,d1
	move.l	#3,d7

	btst	#15,d6			;hires ?
	beq.s	grap.nohi3	
	move.l	#9,d0
	move.l	#2,d1
	move.l	#2,d7
grap.nohi3
	btst	#6,d6			;super hires ?
	beq.s	grap.noshi3	
	move.l	#9,d0
	move.l	#2,d1
	move.l	#1,d7
grap.noshi3
	sub.w	d0,d3
	lsr.w	#1,d3
	move.w	d3,10(a1)		;ddfstrt
	
	move.w	d4,d2			;pic breedte in pixels
	lsr.w	#4,d2			;/16
	sub.w	d1,d2			;-1

	lsl.w	d7,d2			;*8
	add.w	d2,d3
	move.w	d3,14(a1)		;ddfstop
	move.l	(sp)+,d7
	
	lea	pic_raw(a2),a0

	moveq.l	#0,d2
	move.w	pic_dpt(a2),d2
	sub.l	#1,d2
	muls	pic_wid(a2),d2
	add.w	d2,d5

	move.w	pic_vew(a2),d2		;viewmode add
	btst	#2,d2
	beq.s	grap.nolace4

	moveq.l	#0,d2
	move.w	pic_dpt(a2),d2
	muls	pic_wid(a2),d2
	add.w	d2,d5			;interlace gedoe
grap.nolace4

	lea	gracprbpl,a4		;iffpln neerzetten
	lea	gracprpln,a0		;iffpln neerzetten
	moveq.l	#0,d2
	move.w	pic_dpt(a2),d2		;plnnummer 1 halen
	move.l	#8,d6			;copper step !

	tst.l	curpic2			;2de picture ?
	bne.s	grap.pic2
grap.nopic2
	move.w	d5,34(a1)		;modulo oneven zetten
	bra	grap.nodpl
grap.pic2
	move.l	curpic2,a3		;oneven plane
	move.l	currot2,a5		;oneven plane
	clr.l	curpic2			;mischien niet goed
	clr.l	curpal2			;mischien niet goed
	clr.l	currot2			;mischien niet goed

	cmp.l	curpic1,a3		;picture hetzelfde ?
	beq	grap.nopic2
	
	cmp.l	#0,currot1		;routine ?	
	beq.s	grap.norot
	cmp.l	currot1,a5		;routine hetzelfde ?
	beq	grap.nopic2
grap.norot

	cmp.b	#3,d2			;> 8 kleuren ?
	bgt	grap.nopic2
	move.w	pic_dpt(a3),d3		;plnnummer 2 halen
	cmp.b	d2,d3			;gelijke plnummers ?
	bne	grap.nopic2
	move.w	pic_vew(a2),d1
	cmp.w	pic_vew(a3),d1		;view gelijk ?
	bne	grap.nopic2

	move.w	pic_vew(a2),d1		;groter dan view test
	btst	#6,d1			;super hires ?
	beq.s	grap.nohi2a
	move.l	#vew_wid*4,d1
	bra.s	grap.nohi2b
grap.nohi2a
	btst	#15,d1			;hires ?
	beq.s	grap.noshi2a
	move.l	#vew_wid*2,d1
	bra.s	grap.nohi2b
grap.noshi2a
	move.l	#vew_wid,d1
grap.nohi2b
	cmp.w	pic_wid(a2),d1		;breder dan view ?
	bgt.s	grap.small
	cmp.w	pic_wid(a3),d1		;breder dan view ?
	bgt.s	grap.small

	move.w	pic_vew(a2),d1
	btst	#2,d1
	beq.s	grap.nolace8a
	move.l	hogscr,d1
	add.l	d1,d1
	bra.s	grap.nolace8b
grap.nolace8a
	move.l	hogscr,d1
grap.nolace8b
	cmp.w	pic_hgt(a2),d1		;hoger dan view ?
	bgt.s	grap.small
	cmp.w	pic_hgt(a3),d1		;hoger dan view ?
	bgt.s	grap.small
	bra.s	grap.big

grap.small
	move.w	pic_hgt(a2),d1		;wid+hgt<vew
	cmp.w	pic_hgt(a3),d1		;hoogte gelijk ?
	bne	grap.nopic2
	move.w	pic_wid(a2),d1
	cmp.w	pic_wid(a3),d1		;breedte gelijk ?
	bne	grap.nopic2

grap.big
	move.l	a3,curpic2
	move.l	a3,curpal2
	move.l	a5,currot2

	tst.b	dplctr			;double playfield al gezet ?
	beq.s	grap.nocop

	move.w	30(a1),34(a1)		;modulo copieren

	move.w	2(a4),d1		;bplcon0
	btst	#10,d1			;al double playfield ?
	beq.s	grap.ta

	move.w	2(a0),10(a0)		;plane 0>1 copieren
	move.w	6(a0),14(a0)

	move.w	18(a0),26(a0)		;plane 2>3 copieren
	move.w	22(a0),30(a0)

	move.w	34(a0),42(a0)		;plane 4>5 copieren
	move.w	38(a0),46(a0)

	bra.s	grap.tb
grap.ta
	move.w	18(a0),42(a0)		;plane 2>5 copieren
	move.w	22(a0),46(a0)

	move.w	10(a0),26(a0)		;plane 1>3 copieren
	move.w	14(a0),30(a0)

	move.w	2(a0),10(a0)		;plane 0>1 copieren
	move.w	6(a0),14(a0)

grap.tb
	move.l	#palette,a3		;palette copieren

	move.w	#8-1,d1
grap.pal
	move.w	(a3)+,14(a3)
	dbra	d1,grap.pal

grap.nocop
	add.w	d3,d2
	lsl.w	#8,d2
	lsl.w	#4,d2
	or.w	#$400,d2
	move.w	d2,2(a4)		;bplcon0

	movem.l	d0-d7/a0-a6,-(sp)

	move.l	curpic,a2		;animpic ?
	move.l	curfrm,d7
	cmp.l	#0,a2
	bne.s	grap.noanipic

	move.l	curpic2,a2		;normal pic ?
	move.l	curfrm2,d7
	cmp.l	#0,a2
	beq.s	grap.nodplpic

grap.noanipic
	add.l	d6,a0
	add.w	d6,d6
	bsr.s	grappln			;a2,d6,d7,d0
grap.nodplpic
	movem.l	(sp)+,d0-d7/a0-a6
	add.w	d6,d6
	bra.s	grap.nodpla


grap.nodpl				;geen double playfield
	lsl.w	#8,d2
	lsl.w	#4,d2
	move.w	d2,2(a4)		;bplcon0

grap.nodpla
	move.w	d5,30(a1)		;modulo even

	moveq.l	#0,d3
	add.w	pic_vew(a2),d3		;viewmode add
	moveq.l	#0,d2
	move.w	2(a4),d2
	or.l	d3,d2
	or.l	#$300,d2		;genlock info
	move.w	d2,2(a4)
	
	bsr.s	grappln			;a2,d6,d7,d0

grap.end
	
	movem.l	(sp)+,d0-d7/a0-a6
	rts
		

	;sets on of the 2 possible pictures to the copper
	;handles interlace

	;d7=framenummer
	;d6=copperliststap
	;d0=raw planes positie
	;a2=current picture
grappln					;planes invullen 
	movem.l	d0-d7/a0-a6,-(sp)

	lea	pic_raw(a2),a1
	move.l	a1,d0			;raw planes
	
	moveq.l	#0,d2			;x*y
	move.w	pic_wid(a2),d2
	lsr.l	#1,d2			;/2
	moveq.l	#0,d3
	move.w	pic_hgt(a2),d3
	muls	d3,d2
	
	move.l	d2,d4
	add.l	d2,d2

	move.w	pic_dpt(a2),d3
	muls	d3,d4			;hele picture size
	muls	d7,d4			;frame*size d7 !

	add.l	d4,d4

	add.l	d4,d0

	move.l	#vew_wid,d5		;max x view
	move.l	hogscr,d4		;max y view
	move.w	pic_vew(a2),d1		;viewmode add
	btst	#2,d1
	beq.s	grappln.nolace
	add.l	d4,d4			;max y view
grappln.nolace
	btst	#15,d1			;hires ?
	beq.s	grappln.nohi
	move.l	#vew_wid*2,d5		;max x view
grappln.nohi
	btst	#6,d1			;super hires ?
	beq.s	grappln.noshi
	move.l	#vew_wid*4,d5		;max x view
grappln.noshi

	moveq.l	#0,d3			;scherm centreren
	move.w	pic_wid(a2),d3		;pic breedte in bytes
	cmp.w	d5,d3			;breder dan scherm ?
	ble.s	grappln.qa
	sub.w	d5,d3			;-scherm breedte
	lsr.w	#2,d3			;/4

	add.l	d3,d3

	add.l	d3,d0
grappln.qa
	move.w	pic_hgt(a2),d3		;pic hoogte in bytes
	cmp.w	d4,d3			;hoger dan scherm ?
	ble.s	grappln.qb
	sub.w	d4,d3			;-scherm breedte
	lsr.w	#1,d3			;/2
	moveq.l	#0,d5
	move.w	pic_wid(a2),d5		;pic breedte in bytes
	muls	pic_dpt(a2),d5
	muls	d5,d3
	add.l	d3,d0
grappln.qb
	moveq.l	#0,d2
	move.w	pic_wid(a2),d2

	move.w	pic_vew(a2),d5		;interlace flipping ?
	btst	#2,d5
	beq.s	grappln.nolac7b

	move.w	$04(a6),d5		;even/oneven ?
	btst	#15,d5
	beq.s	grappln.nolac7b
	
	moveq.l	#0,d3
	move.w	pic_wid(a2),d3
	muls	pic_dpt(a2),d3
	add.l	d3,d0
grappln.nolac7b

	move.w	pic_dpt(a2),d1		;plnnummer 1 halen
	tst.w	d1			;0 planes ?
	beq.s	grappln.end
	sub.w	#1,d1
grappln.a
	move.w	d0,3*2(a0)
	swap	d0
	move.w	d0,1*2(a0)
	swap	d0
	add.l	d6,a0			;d6=copper step !
	add.l	d2,d0
	dbra	d1,grappln.a
grappln.end
	movem.l	(sp)+,d0-d7/a0-a6
	rts

	;sets palettes to copper
	
grac
	movem.l	d0-d7/a0-a6,-(sp)

	lea	curpal1,a3		;palette 1
	move.l	#palette,a1
	bsr.s	gracfrm

	lea	curpal2,a3		;palette 2 (dpl)
	move.l	#8*2+palette,a1
	bsr.s	gracfrm
	
	bsr.s	palctr			;palette-buffer to copper
grac.end
	movem.l	(sp)+,d0-d7/a0-a6
	rts
		
	;moves palette from picture to palette-buffer

gracfrm
	movem.l	d0-d7/a0-a6,-(sp)
	tst.l	(a3)			;palette aanwezig ?
	beq.s	gracfrm.end

	move.l	(a3),a2			;current palette
	
	cmp.l	#'PALE',(a2)		;palette ?
	bne.s	gracfrm.pict
	lea	6(a2),a0		;palette
	move.w	4(a2),d0		;aantal kleuren
	bra.s	gracfrm.col
gracfrm.pict
	cmp.l	#'ANIM',(a2)		;animatie ?
	bne.s	gracfrm.noanim

	moveq.l	#0,d1
	move.w	pic_ani(a2),d1
	bclr	#7,d1			;behandelbit weghalen

	moveq.l	#0,d3
	move.w	pic_wid(a2),d3
	lsr.w	#1,d3			;/2
	muls	pic_hgt(a2),d3
	muls	pic_dpt(a2),d3

	add.l	d3,d3

	add.l	#pic_raw,d3
	move.l	d3,d5

	btst	#0,d1
	bne.s	gracfrm.buf2
	moveq.l	#0,d5
gracfrm.buf2
	add.l	d5,a2
gracfrm.noanim
	lea	pic_pal(a2),a0		;palette
	move.w	pic_palnum(a2),d0

	cmp.w	#32-1,d0		;niet meer dan 32 kleuren
	ble	gracfrm.sub
	move.w	#32-1,d0
gracfrm.sub

	tst.w	d0			;0 planes ?
	beq.s	gracfrm.end
gracfrm.col
gracfrm.fa
	move.w	(a0)+,(a1)+
	dbra	d0,gracfrm.fa
gracfrm.end
	movem.l	(sp)+,d0-d7/a0-a6
	rts
	
	;handles colorcycling in the palette-buffer
	;and copies palette-buffer to copper

palctr
	movem.l	d0-d7/a0-a6,-(sp)

	move.l	curpic1,a2		;current raw
	cmp.l	#0,a2
	beq.s	palctr.qb
	lea	cycdel1,a3		;cycle delays
	move.l	#palette,a4
	bsr	palcyc
palctr.qb
	move.l	curpic2,a2		;current raw
	cmp.l	#0,a2
	beq.s	palctr.c
	lea	cycdel2,a3		;cycle delays
	move.l	#8*2+palette,a4
	bsr	palcyc

palctr.c
	lea	gracprcol,a1
	move.l	#palette,a0

	move.w	00(a0),00*4+2(a1)
	move.w	02(a0),01*4+2(a1)
	move.w	04(a0),02*4+2(a1)
	move.w	06(a0),03*4+2(a1)
	move.w	08(a0),04*4+2(a1)
	move.w	10(a0),05*4+2(a1)
	move.w	12(a0),06*4+2(a1)
	move.w	14(a0),07*4+2(a1)
	move.w	16(a0),08*4+2(a1)
	move.w	18(a0),09*4+2(a1)

	move.w	20(a0),10*4+2(a1)
	move.w	22(a0),11*4+2(a1)
	move.w	24(a0),12*4+2(a1)
	move.w	26(a0),13*4+2(a1)
	move.w	28(a0),14*4+2(a1)
	move.w	30(a0),15*4+2(a1)
	move.w	32(a0),16*4+2(a1)
	move.w	34(a0),17*4+2(a1)
	move.w	36(a0),18*4+2(a1)
	move.w	38(a0),19*4+2(a1)

	move.w	40(a0),20*4+2(a1)
	move.w	42(a0),21*4+2(a1)
	move.w	44(a0),22*4+2(a1)
	move.w	46(a0),23*4+2(a1)
	move.w	48(a0),24*4+2(a1)
	move.w	50(a0),25*4+2(a1)
	move.w	52(a0),26*4+2(a1)
	move.w	54(a0),27*4+2(a1)
	move.w	56(a0),28*4+2(a1)
	move.w	58(a0),29*4+2(a1)

	move.w	60(a0),30*4+2(a1)
	move.w	62(a0),31*4+2(a1)

	movem.l	(sp)+,d0-d7/a0-a6
	rts

	;colorcyclinghandling of a palette

palcyc
	movem.l	d0-d7/a0-a6,-(sp)
	move.w	#4-1,d7			;4 cycles
palcyc.d
	tst.w	(a3)+			;delay klaar ?
	bne.s	palcyc.c
	
	moveq.l	#0,d1
	move.b	pic_cycstr(a2),d1	;start color
	lsl.b	#1,d1		;*2

	moveq.l	#0,d2
	move.b	pic_cycend(a2),d2	;end color
	lsl.b	#1,d2		;*2

	moveq.l	#0,d3
	move.b	pic_cycadd(a2),d3	;richting

	move.l	a4,a0			;palette pointer
	move.l	a0,a1
	add.l	d1,a0			;startcolor
	add.l	d2,a1			;endcolor
	
	cmp.b	#1,d3			;omhoog
	beq.s	palcyc.up
	cmp.b	#3,d3			;omlaag
	beq.s	palcyc.down
	bra.s	palcyc.i

palcyc.up				;kleuren copieren
	move.w	(a1),d4			;laatst color bewaren
palcyc.f				;kleuren copieren
	cmp.l	a0,a1
	beq.s	palcyc.fa
	move.w	-(a1),2(a1)
	bra	palcyc.f
palcyc.fa
	move.w	d4,(a1)
	bra.s	palcyc.g	
	
palcyc.down
	move.w	(a0),d4			;laatst color bewaren
palcyc.h				;kleuren copieren
	cmp.l	a0,a1
	beq.s	palcyc.ha
	move.w	2(a0),(a0)+
	bra	palcyc.h
palcyc.ha
	move.w	d4,(a1)

palcyc.g
	move.b	pic_cycspd(a2),-1(a3)	;delay zetten
	bra.s	palcyc.i
palcyc.c
	sub.w	#1,-2(a3)		;cycle delay aftellen
palcyc.i
	add.l	#4,a2			;next cycle info
	dbra	d7,palcyc.d

palcyc.qb
	movem.l	(sp)+,d0-d7/a0-a6
	rts


;	SECTION	variabelen,DATA_c

	cnop	0,2
curtsk		dc.l	0
tskpri		dc.l	0
duplok		dc.l	0
inttel		dc.l	0
intdel		dc.l	0

form		dc.l	0
ifffil		dc.l	0
intvbold	dc.l	0
inttbeold	dc.l	0
patpos		dc.l	0
gfxlib		dc.l	0
doslib		dc.l	0
wbview  	dc.l	0
mt_data		dc.l	0
memvid		dc.l	0
oldcprlist	dc.l	0
hogscr		dc.l	vew_hgt

inspos		dc.l	-1
anispd1		dc.w	1	;nooit op 0 !
anispd2		dc.w	1

		cnop	0,2
varclr.s			;start wissen
oldrot		dc.l	0
curpic		dc.l	0
curfrm		dc.l	0
cycdel1		ds.w	4
cycdel2		ds.w	4

rotinf1		dc.w	0
rotinf2		dc.w	0

effspd		dc.w	0
efflop		dc.b	0
anilop1		dc.b	0
anilop2		dc.b	0
anipal1		dc.b	0
anipal2		dc.b	0
rotdpl		dc.b	1
dplctr		dc.b	0
		cnop	0,2

insdat		ds.l	4
inspri		dc.l	0
instel		dc.w	0

cureff		dc.l	0
efftel		dc.w	0

curpal1		dc.l	0
curpal2		dc.l	0
currot1		dc.l	0
currot2		dc.l	0
curpic1		dc.l	0
curpic2		dc.l	0
anitel1		dc.w	0
anitel2		dc.w	0
curfrm1		dc.l	0
curfrm2		dc.l	0
oldfrm1		dc.l	0
oldfrm2		dc.l	0

varclr.e
		dc.l	0			;wisruimte
	
varclr.ql	equ	varclr.e-varclr.s	;wislengte
	
;ownblit	dc.b	0
ntscmode	dc.b	0
end		dc.b	0

pronam	dc.b	'VideoTracker',0
	cnop	0,2
dosnam	dc.b	'dos.library',0
	cnop	0,4
gfxnam	dc.b	'graphics.library',0
	cnop	0,4
	
	cnop	0,4
gra.s
gracprscr
	dc.w	$8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
gracprbpl
	dc.w	$100,$9000,$102,$0000,$104,$0020
	dc.w	$108,$0000,$10a,$0000
gracprpln
	dc.w	$e0,$0000,$e2,$0000
	dc.w	$e4,$0000,$e6,$0000
	dc.w	$e8,$0000,$ea,$0000
	dc.w	$ec,$0000,$ee,$0000
	dc.w	$f0,$0000,$f2,$0000
	dc.w	$f4,$0000,$f6,$0000
gracprcol
	dc.w	$180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
	dc.w	$190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
	dc.w	$1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
	dc.w	$1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
cprjmp
	dc.w	$080,0,$082,0
gra.e
gra.ql	equ	gra.e-gra.s		;block lengte


cpr
	dc.w	$0001,$fffe
	dc.w	$09c,$8001		;tbeint
cprspr
	dc.w	$120,$0000,$122,$0000
	dc.w	$124,$0000,$126,$0000
	dc.w	$128,$0000,$12a,$0000
	dc.w	$12c,$0000,$12e,$0000
	dc.w	$130,$0000,$132,$0000
	dc.w	$134,$0000,$136,$0000
	dc.w	$138,$0000,$13a,$0000
	dc.w	$13c,$0000,$13e,$0000

cprbuf
	dc.w	$8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
	dc.w	$100,$9000,$102,$0000,$104,$0020
	dc.w	$108,$0000,$10a,$0000
	dc.w	$e0,$0000,$e2,$0000
	dc.w	$e4,$0000,$e6,$0000
	dc.w	$e8,$0000,$ea,$0000
	dc.w	$ec,$0000,$ee,$0000
	dc.w	$f0,$0000,$f2,$0000
	dc.w	$f4,$0000,$f6,$0000
	dc.w	$180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
	dc.w	$190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
	dc.w	$1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
	dc.w	$1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
	dc.w	$080,0,$082,0
cprbuf.e

	dc.w	$088,$0000		;copjmp2
	dc.w	$080,0,$082,0		;moet achter cprbck blijven !
cprbck
sprdat
	dc.w	$ffff,$fffe


prf_pat	equ	7			;pref sample size
prf_patnum	equ	128		;aantal songpos's
prf_len	equ	((prf_pat*prf_patnum)+1)

prf_pos	equ	0			;eff position (teller)

prf_effs	equ	1		;start effect (*prf_patnum)
prf_effe	equ	2		;end effect   (*prf_patnum)
prf_pri	equ	3			;priority     (*prf_patnum)
prf_spd	equ	4			;eff speed    (*prf_patnum)
prf_ani	equ	5			;ani speed    (*prf_patnum)
prf_roth	equ	6		;routine info (*prf_patnum)
prf_rotl	equ	7		;routine info (*prf_patnum)

eff_num	equ	256			;aantal effects

pic_wid		equ	4		;wide in bytes
pic_hgt		equ	6		;hoogte
pic_dpt		equ	8		;number planes
pic_ani		equ	10		;aantal effes (anim)
pic_vew		equ	12		;viewmode
pic_cycstr	equ	14		;cycle start (*4)
pic_cycend	equ	15		;cycle end (*4)
pic_cycspd	equ	16		;cycle speed (*4)
pic_cycadd	equ	17		;cycle add (*4)
pic_palnum	equ	30		;aantal kleuren
pic_pal		equ	32		;palette start
pic_palsiz	equ	256*2		;vaste palette size
pic_raw		equ	pic_pal+pic_palsiz	;palette start

fil_namlen	equ	24		;naamlengte
fil_len	equ	(fil_namlen+4+4)	;effect info length
fil_num	equ	2+eff_num		;aantal files
fil_fil	equ	0			;file naam 
fil_dir	equ	24			;pointer naar directory
fil_pnt	equ	28			;pointer naar meminfo

palette	ds.w	64	;palette

var_len		equ	$300		;lengte vartabel

var__GfxBase	equ	$000		;graphics lib
var_pic1	equ	$004		;current picture
var_anispd1	equ	$008		;animspeed
var_anitel1	equ	$00c		;animspeed
var_cprbck	equ	$010		;copperback
var_bck		equ	$014		;background
var_pic2	equ	$018		;current picture
var_ntsc	equ	$01c		;ntsc/pal frequence
var_lnd		equ	$020		;landscape
var_txt1	equ	$040		;text
var_txt16	equ	15*4+var_txt1
var_vec1	equ	$080		;vectors
var_vec16	equ	15*4+var_vec1
var_fon1	equ	$0c0		;fonts
var_fon16	equ	15*4+var_fon1
var_cols1	equ	$100		;colorsets
var_cols16	equ	15*4+var_cols1
var_obj1	equ	$180		;objects
var_obj16	equ	15*4+var_obj1

	cnop	0,2
var	ds.b	$300	;variabelen voor routines

	
;	SECTION	10,CODE_C
		endc

; this is the routine-source
;**********************************************************************

		ifnd	rout
pic_wid		equ	4		;wide in bytes
pic_hgt		equ	6		;hoogte
pic_dpt		equ	8		;number planes
pic_ani		equ	10		;aantal effes (anim)
pic_vew		equ	12		;viewmode
pic_cycstr	equ	14		;cycle start (*4)
pic_cycend	equ	15		;cycle end (*4)
pic_cycspd	equ	16		;cycle speed (*4)
pic_cycadd	equ	17		;cycle add (*4)
pic_palnum	equ	30		;aantal kleuren
pic_pal		equ	32		;palette start
pic_palsiz	equ	256*2		;vaste palette size
pic_raw		equ	pic_pal+pic_palsiz	;palette start

var_len		equ	$300		;lengte vartabel

var__GfxBase	equ	$000		;graphics lib
var_pic1	equ	$004		;current picture
var_anispd1	equ	$008		;animspeed
var_anitel1	equ	$00c		;animspeed
var_cprbck	equ	$010		;copperback
var_bck		equ	$014		;background
var_pic2	equ	$018		;current picture
var_ntsc	equ	$01c		;ntsc/pal frequence
var_lnd		equ	$020		;landscape
var_txt1	equ	$040		;text
var_txt16	equ	15*4+var_txt1
var_vec1	equ	$080		;vectors
var_vec16	equ	15*4+var_vec1
var_fon1	equ	$0c0		;fonts
var_fon16	equ	15*4+var_fon1
var_cols1	equ	$100		;colorsets
var_cols16	equ	15*4+var_cols1
var_obj1	equ	$180		;objects
var_obj16	equ	15*4+var_obj1

vew_wid	equ	44
vew_hgt	equ	290
win_hgt	equ	117
win_str	equ	$1a
		endc

;	Input:
;	a0=variabelen tabel
;	d0=routinfo

;	Output:
;	a0=picture
;	d1=copperlist

	SECTION	3,CODE_C

rot
	dc.l	'ROUT'
	movem.l	d2-d7/a1-a6,-(sp)

	lea	($dff000).l,a6	;hardware
	lea	rot,a5		;prog base

	move.l	d0,d1
	divs	#256,d1
	and.l	#$ffff,d1
;	move.l	d1,rotshp2-rot(a5)	;sinusshape pic 2
	muls	#256,d1
	sub.l	d1,d0

	move.l	d0,d1
	divs	#16,d1
	and.l	#$ffff,d1
	move.l	d1,rotshp2-rot(a5)	;sinusshape pic 2
	muls	#16,d1
	sub.l	d1,d0

	move.l	d0,rotshp1-rot(a5)	;sinusshape pic 1

	move.l	var_cprbck(a0),a2
	move.l	a2,d1
	sub.l	#8,d1

	lea	rotcop.1,a1		;copperjump adres zetten
	add.l	rotbuf-rot(a5),a1
	move.w	d1,6(a1)
	swap	d1
	move.w	d1,2(a1)

	bsr	rotset
	
	sub.l	a0,a0			;geen pic
	move.l	#rotincpic,a0		;incbinfile !!!

	lea	rotcop.1,a1		;copperlist
	add.l	rotbuf-rot(a5),a1
	eor.l	#rotcop.2-rotcop.1,rotbuf-rot(a5)
	move.l	a1,d1
	movem.l	(sp)+,d2-d7/a1-a6
	rts

rotset
	movem.l	d0-d7/a0-a6,-(sp)

	tst.l	var_pic1(a0)	;is there a picture ?
	beq	rotset.end

	clr.l	d2		;$102 bitshift

	move.l	var_pic1(a0),a1	;get picture
	lea	pic_raw(a1),a3	;start picture planes
	move.l	a3,d1
	move.l	d1,d5		;plane1 naar plane2 copieren

	clr.l	d3
	move.w	pic_wid(a1),d3	;skip voor plane1
	
	move.l	rotshp1-rot(a5),d0	;shape number
	muls	#4*4,d0
	lea	rotshptab,a2	;sinus shape table
	lea	(a2,d0),a2
	bsr	rotget		;a1,a2,d1=d2,d1
	exg.l	d1,d5		;store pic1, get frsh pic1
	ror.l	#4,d2		;store bitshift

	move.l	rotshp2-rot(a5),d0	;shape number
	muls	#4*4,d0
	lea	4*4*16+rotshptab,a2	;sinus shape table
	lea	(a2,d0),a2

	tst.l	var_pic2(a0)	;is there double playfield ?
	bne	rotset.dpl

	add.l	d3,d1		;get plane2 from pic1
	lsl.l	#1,d3		;*2 double skip
	move.l	d3,d4		;planeskip copieren
	bsr	rotget		;a1,a2,d1=d2,d1
	bra	rotset.pln
rotset.dpl
	move.l	var_pic2(a0),a1	;pic halen
	lea	pic_raw(a1),a3
	move.l	a3,d1		;raw planes halen
	clr.l	d4		;skip halen
	move.w	pic_wid(a1),d4
	bsr	rotget		;a1,a2,d1=d2,d1
	
rotset.pln
	rol.l	#4,d2		;get complete bitshift
	lea	rotcop.1,a3
	add.l	rotbuf-rot(a5),a3
	move.w	d2,$0a(a3)

	move.w	#3-1,d0
rotset.a	
	move.w	d5,$12(a3)
	swap	d5
	move.w	d5,$0e(a3)
	swap	d5

	move.w	d1,$1a(a3)
	swap	d1
	move.w	d1,$16(a3)
	swap	d1

	add.l	#16,a3
	add.l	d3,d5
	add.l	d4,d1
	
	dbra	d0,rotset.a	
	bra	rotset.end

rotset.end
	movem.l	(sp)+,d0-d7/a0-a6
	rts
	
	;a1	picture
	;d1	rawplanes
	;a2	sinusinfo
	
rotget
	movem.l	d3-d7/a0-a6,-(sp)

	lea	rotsin,a3
	
	move.l	(a2),d0		;get current x-pos
	clr.l	d3
	move.w	(a3,d0),d3		;get sinus value

	clr.l	d4
	move.w	pic_wid(a1),d4	;pic width in bytes
	lsl.l	#3,d4		;*8

	move.l	#vew_wid*8,d7
	btst	#15-8,pic_vew(a1)
	beq	rotget.bc
	move.l	#vew_wid*8*2,d7
rotget.bc
	sub.l	d7,d4		;-vewwidth

	cmp.w	#0,d4		;<0 ?
	bge	rotget.ba
	clr.l	d4
rotget.ba
	muls	d4,d3
	lsr.l	#8,d3		;/1024
	lsr.l	#2,d3
	
	divs	#16,d3
	swap	d3
	move.w	#$f,d4
	sub.w	d3,d4
	or.w	d4,d2		;bitshift $102

	clr.w	d3
	swap	d3
	lsl.l	#1,d3		;*2
	add.l	d3,d1		;raw+x
	add.l	8(a2),d0		;+ sinusadd
	cmp.l	#rotsin.e-rotsin,d0
	blt	rotget.bb
	sub.l	#rotsin.e-rotsin,d0
rotget.bb
	move.l	d0,(a2)		;return position
	
	move.l	4(a2),d0		;get current y-pos
	clr.l	d3
	move.w	(a3,d0),d3		;get sinus value

	clr.l	d4
	move.w	pic_hgt(a1),d4	;pic heigth

	move.l	#vew_hgt,d7
	cmp.b	#50,var_ntsc(a0)	;ntsc check
	beq	rotget.pal
	sub.l	#56,d7
rotget.pal

	btst	#2,pic_vew(a1)
	beq	rotget.cc
	add.l	d7,d7
rotget.cc
	sub.l	d7,d4		;-vewheigth

	cmp.w	#0,d4		;<0 ?
	bge	rotget.ca
	clr.l	d4
rotget.ca
	muls	d4,d3
	lsr.l	#8,d3		;/1024
	lsr.l	#2,d3
	
	clr.l	d4
	move.w	pic_wid(a1),d4	;*width
	muls	pic_dpt(a1),d4	;*depth
	muls	d4,d3
	
	add.l	d3,d1		;raw+y
	add.l	12(a2),d0		;+ sinusadd
	cmp.l	#rotsin.e-rotsin,d0
	blt	rotget.c
	sub.l	#rotsin.e-rotsin,d0
rotget.c
	move.l	d0,4(a2)		;return position

	movem.l	(sp)+,d3-d7/a0-a6
	rts
	

rotbuf	dc.l	0
rotshp1	dc.l	0
rotshp2	dc.l	0

	;	posx	posy	spdx	spdy
rotshptab
	rept	2
	dc.l	0,	0,	0,	0	;0 stil
	dc.l	0,	0,	2,	0	;1 -
	dc.l	0,	0,	0,	2	;2 |
	dc.l	0,	180*2,	2,	2	;3 o
	dc.l	180*2,	0,	2,	4	;4 (X)
	dc.l	0,	180*2,	4,	2	;5 8
	dc.l	0,	180*2,	4,	6	;6 weird
	dc.l	0,	0,	0,	0	;7
	dc.l	0,	0,	0,	0	;8
	dc.l	0,	0,	0,	0	;9
	dc.l	0,	0,	0,	0	;10
	dc.l	0,	0,	0,	0	;11
	dc.l	0,	0,	0,	0	;12
	dc.l	0,	0,	0,	0	;13
	dc.l	0,	0,	0,	0	;14
	dc.l	0,	0,	0,	0	;15
	endr
		
rotsin
       dc.w       512,516,521,525,530,534,539,543,548,552,557,561
       dc.w       565,570,574,579,583,588,592,596,601,605,610,614
       dc.w       618,623,627,631,636,640,644,649,653,657,661,666
       dc.w       670,674,678,683,687,691,695,699,703,708,712,716
       dc.w       720,724,728,732,736,740,744,748,752,756,760,764
       dc.w       768,771,775,779,783,787,790,794,798,801,805,809
       dc.w       812,816,820,823,827,830,834,837,840,844,847,851
       dc.w       854,857,861,864,867,870,873,876,880,883,886,889
       dc.w       892,895,898,901,903,906,909,912,915,917,920,923
       dc.w       925,928,931,933,936,938,941,943,945,948,950,952
       dc.w       955,957,959,961,963,965,967,969,971,973,975,977
       dc.w       979,981,982,984,986,987,989,991,992,994,995,997
       dc.w       998,999,1001,1002,1003,1004,1006,1007,1008,1009,1010,1011
       dc.w       1012,1013,1014,1014,1015,1016,1017,1017,1018,1019,1019,1020
       dc.w       1020,1021,1021,1021,1022,1022,1022,1023,1023,1023,1023,1023
       dc.w       1023,1023,1023,1023,1023,1023,1022,1022,1022,1021,1021,1021
       dc.w       1020,1020,1019,1019,1018,1017,1017,1016,1015,1014,1014,1013
       dc.w       1012,1011,1010,1009,1008,1007,1006,1004,1003,1002,1001,999
       dc.w       998,997,995,994,992,991,989,987,986,984,982,981
       dc.w       979,977,975,973,971,969,967,965,963,961,959,957
       dc.w       955,952,950,948,945,943,941,938,936,933,931,928
       dc.w       925,923,920,917,915,912,909,906,903,901,898,895
       dc.w       892,889,886,883,880,876,873,870,867,864,861,857
       dc.w       854,851,847,844,840,837,834,830,827,823,820,816
       dc.w       812,809,805,801,798,794,790,787,783,779,775,771
       dc.w       768,764,760,756,752,748,744,740,736,732,728,724
       dc.w       720,716,712,708,703,699,695,691,687,683,678,674
       dc.w       670,666,661,657,653,649,644,640,636,631,627,623
       dc.w       618,614,610,605,601,596,592,588,583,579,574,570
       dc.w       565,561,557,552,548,543,539,534,530,525,521,516
       dc.w       512,508,503,499,494,490,485,481,476,472,467,463
       dc.w       459,454,450,445,441,436,432,428,423,419,414,410
       dc.w       406,401,397,393,388,384,380,375,371,367,363,358
       dc.w       354,350,346,341,337,333,329,325,321,316,312,308
       dc.w       304,300,296,292,288,284,280,276,272,268,264,260
       dc.w       257,253,249,245,241,237,234,230,226,223,219,215
       dc.w       212,208,204,201,197,194,190,187,184,180,177,173
       dc.w       170,167,163,160,157,154,151,148,144,141,138,135
       dc.w       132,129,126,123,121,118,115,112,109,107,104,101
       dc.w       99,96,93,91,88,86,83,81,79,76,74,72
       dc.w       69,67,65,63,61,59,57,55,53,51,49,47
       dc.w       45,43,42,40,38,37,35,33,32,30,29,27
       dc.w       26,25,23,22,21,20,18,17,16,15,14,13
       dc.w       12,11,10,10,9,8,7,7,6,5,5,4
       dc.w       4,3,3,3,2,2,2,1,1,1,1,1
       dc.w       1,1,1,1,1,1,2,2,2,3,3,3
       dc.w       4,4,5,5,6,7,7,8,9,10,10,11
       dc.w       12,13,14,15,16,17,18,20,21,22,23,25
       dc.w       26,27,29,30,32,33,35,37,38,40,42,43
       dc.w       45,47,49,51,53,55,57,59,61,63,65,67
       dc.w       69,72,74,76,79,81,83,86,88,91,93,96
       dc.w       99,101,104,107,109,112,115,118,121,123,126,129
       dc.w       132,135,138,141,144,148,151,154,157,160,163,167
       dc.w       170,173,177,180,184,187,190,194,197,201,204,208
       dc.w       212,215,219,223,226,230,234,237,241,245,249,253
       dc.w       256,260,264,268,272,276,280,284,288,292,296,300
       dc.w       304,308,312,316,321,325,329,333,337,341,346,350
       dc.w       354,358,363,367,371,375,380,384,388,393,397,401
       dc.w       406,410,414,419,423,428,432,436,441,445,450,454
       dc.w       459,463,467,472,476,481,485,490,494,499,503,508
       dc.w       512	
rotsin.e

rotcop.1
	dc.w	$0080,$0000,$0082,$0000
	dc.w	$0102,$0000
	dc.w	$00e0,$0000,$00e2,$0000	;1
	dc.w	$00e4,$0000,$00e6,$0000	;2
	dc.w	$00e8,$0000,$00ea,$0000	;3
	dc.w	$00ec,$0000,$00ee,$0000	;4
	dc.w	$00f0,$0000,$00f2,$0000	;5
	dc.w	$00f4,$0000,$00f6,$0000	;6
	dc.w	$0088,$0000
	dc.w	$ffff,$fffe
rotcop.2
	dc.w	$0080,$0000,$0082,$0000
	dc.w	$0102,$0000
	dc.w	$00e0,$0000,$00e2,$0000	;1
	dc.w	$00e4,$0000,$00e6,$0000	;2
	dc.w	$00e8,$0000,$00ea,$0000	;3
	dc.w	$00ec,$0000,$00ee,$0000	;4
	dc.w	$00f0,$0000,$00f2,$0000	;5
	dc.w	$00f4,$0000,$00f6,$0000	;6
	dc.w	$0088,$0000
	dc.w	$ffff,$fffe

rot.e

;**********************************************************************

;and here are the incbin-files....

		ifd	rout
		cnop	0,2
rotincpic
		incbin	'videotracker:effect/circles512_l4.pic'
		endc
		
