;------------------------------------------------------------------------
;-									-
;-			     Vector-Stars				-
;-									-
;------------------------------------------------------------------------

org	$20000
load	$20000

>EXTERN		'Perspektiv',Per
>EXTERN		'VectorBob.RB',Bob

;------------------------------------------------------------------------

S:		movem.l	d0-d7/a0-a6,-(sp)
		lea.l	$dff000,a6
		bsr	Startup
		bsr	InitRutin
		bsr	BlitWait
		bsr	StartCop
		bsr	MainLoop
		bsr	RestoreCop
		movem.l	(sp)+,d0-d7/a0-a6
		rts

Startup:	move.w	2(a6),d0
		bset	#15,d0
		move.w	d0,OldDma
		move.w	$1c(a6),d0
		bset	#15,d0
		move.w	d0,OldIrq
		move.l	$4,a6
		lea.l	Lib(pc),a1
		moveq	#0,d0
		jsr	-408(a6)
		move.l	d0,a0
		move.l	$26(a0),OldCop
		lea.l	$dff000,a6
		rts

StartCop:	move.l	#CopperList,$80(a6)
		tst.w	$88(a6)
		move.w	#$7fff,$96(a6)
		move.w	#$87c0,$96(a6)
		move.w	#$7fff,$9a(a6)
		move.w	#$c000,$9a(a6)
		rts

RestoreCop:	move.l	OldCop(pc),$80(a6)
		tst.w	$88(a6)
		move.w	OldDma(pc),$96(a6)
		move.w	OldIrq(pc),$9a(a6)
		rts

	;-----------------------------------------------------
		OldCop:		dc.l	0
		OldDma:		dc.w	0
		OldIrq:		dc.w	0
		Lib:		dc.b	'graphics.library',0
				even
	;-----------------------------------------------------

;------------------------------------------------------------------------

BlitWait:	btst	#14,2(a6)
		bne.S	BlitWait
		rts

ClearScreen:	bsr.S	BlitWait
		move.l	#-1,$44(a6)
		move.l	#$01000000,$40(a6)
		move.w	d2,$66(a6)
		move.l	d0,$54(a6)
		move.w	d1,$58(a6)
		rts

;------------------------------------------------------------------------

InitRutin:	move.l	Screen(pc),d0
		move.w	#128*2*64+24,d1
		moveq	#0,d2
		bsr	ClearScreen
		move.l	Screen+4(pc),d0
		bsr	ClearScreen
		bsr	BlitWait

		lea.l	MulsList,a0
		moveq	#0,d0
		move.w	#300-1,d7
MulsLoop:	move.w	d0,(a0)+
		add.w	#44*2,d0
		dbra	d7,MulsLoop

		move.l	MatrisAdr(pc),a0
		lea	Sinus(pc),a1
		move.w	#360-1,d7
		moveq	#0,d4
MatLoop1:	move.w	#127,d6
		move.w	(a1)+,d4
		move.l	#-63,d0
MatLoop2:	move.l	d4,d3
		muls	d0,d3
		asl.l	#2,d3
		swap	d3
		move.b	d3,(a0)+
		addq.w	#1,d0
		dbra	d6,MatLoop2
		dbra	d7,MatLoop1
		rts

MulsList:	=	$7b000

Screen:		dc.l	$60000
		dc.l	$60000+[128*44]

MatrisAdr:	dc.l	$40000
		dc.l	$60000+[256*44]

;------------------------------------------------------------------------

MainLoop:	cmp.b	#-1,$6(a6)
		bne.S	MainLoop
		btst	#10,$16(a6)
		beq.S	MainLoop

		move.w	#$4,$180(a6)
		bsr	VectorBobs
		move.w	#$40,$180(a6)

		btst	#6,$bfe001
		bne.S	MainLoop
		rts

;------------------------------------------------------------------------

Vectorbobs:	bsr	Buffra
		bsr	Rensa
		bsr	VinkelAdd
		bsr	Rakna
		bsr	Plotta
		rts

Buffra:		move.l	Screen(pc),d0
		move.l	Screen+4(pc),Screen
		move.l	d0,Screen+4
		lea.l	BMap(pc),a0
		moveq	#2-1,d7
BMapLoop:	swap	d0
		move.w	d0,2(a0)
		swap	d0
		move.w	d0,6(a0)
		addq.l	#8,a0
		add.l	#44,d0
		dbra	d7,BMapLoop
		rts

Rensa:		move.l	Screen(pc),d0
		moveq	#44-40,d2
		move.w	#128*64*2+20,d1
		bsr	ClearScreen
		rts

VinkelAdd:	lea.l	Vinklar(pc),a0
		lea.l	VAdds(pc),a1
		move.w	#720,d1
		moveq	#3-1,d7
VAddLoop:	move.w	(a0),d0
		add.w	(a1)+,d0
		cmp.w	d1,d0
		bls.S	Nothing
		sub.w	d1,d0
Nothing:	move.w	d0,(a0)+
		dbra	d7,VAddLoop
		rts

Rakna:		lea.l	Vinklar(pc),a1
		lea.l	Posses(pc),a4
		lea.l	Per,a5

		lea	CalcUp(pc),a0
		moveq	#3-1,d7
OllesBoll:	move.w	(a1)+,d0
		move.w	d0,d1
		asl.w	#6,d1
		move.w	d1,2(a0)
		add.w	#180,d0
		cmp.w	#720,d0
		bls.S	NoD2222
		sub.w	#720,d0
NoD2222:	asl.w	#6,d0
		move.w	d0,(a0)
		addq.l	#4,a0
		dbf	d7,OllesBoll

		lea	CalcUp(pc),a1
		lea.l	MulsList,a6
		move.l	a7,SPSave
		lea.l	ObjX(pc),a0
		lea.l	ObjY(pc),a2
		lea.l	ObjZ(pc),a7
		move.l	MatrisAdr(pc),a3
		move.w	AntBobs,d7

RakneLoop:	move.w	(a1)+,d1
		move.w	(a1)+,d2
		move.b	(a2),d2
		move.b	(a3,d2.W),d3
		ext.w	d3
		move.b	(a7),d1
		move.b	(a3,d1.W),d4
		ext.w	d4
		sub.w	d4,d3
		move.b	(a2)+,d1
		move.b	(a3,d1.W),d4
		ext.w	d4
		move.b	(a7)+,d2
		move.b	(a3,d2.W),d5
		ext.w	d5
		add.w	d5,d4

		move.w	(a1)+,d1
		move.w	(a1)+,d2
		move.b	(a0),d2
		move.b	(a3,d2.W),d5
		ext.w	d5
		move.b	d3,d1
		move.b	(a3,d1.W),d6
		ext.w	d6
		sub.w	d6,d5
		move.b	(a0)+,d1
		move.b	(a3,d1.W),d6
		ext.w	d6
		move.b	d3,d2
		move.b	(a3,d2.W),d3
		ext.w	d3
		add.w	d6,d3

		move.w	(a1)+,d1
		move.w	(a1)+,d2
		move.b	d5,d2
		move.b	(a3,d2.W),d0
		ext.w	d0
		move.b	d4,d1
		move.b	(a3,d1.W),d6
		ext.w	d6
		sub.w	d6,d0
		move.b	d5,d1
		move.b	(a3,d1.W),d5
		ext.w	d5
		move.b	d4,d2
		move.b	(a3,d2.W),d4
		ext.w	d4
		add.w	d5,d4

		add.w	#156,d4
		add.w	d4,d4
		move.w	(a5,d4.W),d2
		muls	d2,d0
		muls	d2,d3
		lsl.l	#5,d0
		lsl.l	#5,d3
		swap	d0
		swap	d3

		add.w	#176,d0
		add.w	#100,d3

		move.w	d0,d1
		lsr.w	#3,d0
		and.w	#$f,d1
		ror.w	#4,d1
		add.w	d3,d3
		move.w	(a6,d3.W),d3
		add.w	d3,d0

		move.w	d0,(a4)+
		move.w	d1,(a4)+
		move.w	d4,(a4)+
		lea	-12(a1),a1
		dbra	d7,RakneLoop
		lea.l	$dff000,a6
		move.l	SPSave(pc),a7
		rts

SPSave:		dc.l	0

Plotta:		lea.l	Posses(pc),a0
		move.l	Screen+4(pc),d0
		move.l	#Bob,d1
		move.l	d1,d2
		;add.l	#15*2*2,d2
		move.w	#15*64*1+2,d3
		move.w	#$fca,d6

		bsr	BlitWait
		move.l	#$ffff0000,$44(a6)
		move.w	#2-4,$62(a6)
		move.w	#2-4,$64(a6)
		move.w	#44-4,$60(a6)
		move.w	#44-4,$66(a6)
		move.l	d0,$48(a6)
		move.l	d0,$54(a6)
		move.l	d1,$4c(a6)
		move.l	d2,$50(a6)

		lea.l	$40(a6),a1
		lea.l	$4a(a6),a2
		lea.l	$4e(a6),a3
		lea.l	$52(a6),a4
		lea.l	$56(a6),a5
		lea.l	$58(a6),a6

		move.w	AntBobs(pc),d7

PlotLoop:	move.w	d0,d4
		add.w	(a0)+,d4
		move.w	(a0)+,d5
		move.w	d5,2(a1)
		add.w	d6,d5
		move.w	d5,(a1)
		move.w	d4,(a2)
		move.w	d4,(a5)
		move.w	d1,(a3)
		move.w	d2,(a4)
		move.w	d3,(a6)
		addq.w	#2,a0
		dbra	d7,PlotLoop
		lea.l	$dff000,a6
		rts

	;--------------------------------------------------

		BMapSize:	=	280*44

		Posses:		blk.w	400*3,0
		Posses2:	blk.w	400*3,0
		CalcUp:		blk.w	3*2,0
		BobAdr:		dc.l	0

		Vinklar:	dc.w	0
				dc.w	0
				dc.w	0

		VAdds:		dc.w	0
				dc.w	0
				dc.w	0

	;--------------------------------------------------

ObjX:
dc.b	5,10,15,0,10,20,0,10,20,0,20,0,20

ObjY:
dc.b	0,0,0,5,5,5,10,10,10,15,15,20,20

ObjZ:
dc.b	0,0,0,0,0,0,0,0,0,0,0,0,0

even

AntBobs:	dc.w	13-1

;------------------------------------------------------------------------

CopperList:	dc.l	$008e6c66,$0090ecc6,$00920030,$009400d8
		dc.l	$01020000,$01040000,$0108002c,$010a002c

Cols:		dc.l	$01800000,$01820fff,$01840fff,$01860fff
BMap:		dc.l	$00e00000,$00e20000,$00e40000,$00e60000
		dc.l	$01002200

		dc.l	-2

;------------------------------------------------------------------------

Per:		=	$30000
Bob:		=	$33000

Sinus:	dc.w	16384,16382,16374,16362,16344,16322,16294,16262
	dc.w	16225,16182,16135,16083,16026,15964,15897,15826
	dc.w	15749,15668,15582,15491,15396,15296,15191,15082
	dc.w	14967,14849,14726,14598,14466,14330,14189,14044
	dc.w	13894,13741,13583,13421,13255,13085,12911,12733
	dc.w	12551,12365,12176,11982,11786,11585,11381,11174
	dc.w	10963,10749,10531,10311,10087,9860,9630,9397
	dc.w	9162,8923,8682,8438,8192,7943,7692,7438
	dc.w	7182,6924,6664,6401,6137,5871,5603,5334
	dc.w	5063,4790,4516,4240,3963,3685,3406,3126
	dc.w	2845,2563,2280,1996,1712,1427,1142,857
	dc.w	571,285,0,-285,-571,-857,-1142,-1428
	dc.w	-1712,-1996,-2280,-2563,-2845,-3126,-3406,-3685
	dc.w	-3963,-4240,-4516,-4790,-5063,-5334,-5603,-5871
	dc.w	-6137,-6401,-6664,-6924,-7182,-7438,-7692,-7943
	dc.w	-8192,-8438,-8682,-8923,-9162,-9397,-9630,-9860
	dc.w	-10087,-10311,-10531,-10749,-10963,-11174,-11381,-11585
	dc.w	-11786,-11982,-12176,-12365,-12551,-12733,-12911,-13085
	dc.w	-13255,-13421,-13583,-13741,-13894,-14044,-14189,-14330
	dc.w	-14466,-14598,-14726,-14849,-14967,-15082,-15191,-15296
	dc.w	-15396,-15491,-15582,-15668,-15749,-15826,-15897,-15964
	dc.w	-16026,-16083,-16135,-16182,-16225,-16262,-16294,-16322
	dc.w	-16344,-16362,-16374,-16382,-16384,-16382,-16374,-16362
	dc.w	-16344,-16322,-16294,-16262,-16225,-16182,-16135,-16083
	dc.w	-16026,-15964,-15897,-15826,-15749,-15668,-15582,-15491
	dc.w	-15396,-15296,-15191,-15082,-14968,-14849,-14726,-14598
	dc.w	-14466,-14330,-14189,-14044,-13894,-13741,-13583,-13421
	dc.w	-13255,-13085,-12911,-12733,-12551,-12365,-12176,-11982
	dc.w	-11786,-11585,-11381,-11174,-10963,-10749,-10531,-10311
	dc.w	-10087,-9860,-9630,-9397,-9162,-8923,-8682,-8438
	dc.w	-8192,-7943,-7692,-7438,-7182,-6924,-6664,-6402
	dc.w	-6137,-5871,-5604,-5334,-5063,-4790,-4516,-4240
	dc.w	-3963,-3685,-3406,-3126,-2845,-2563,-2280,-1996
	dc.w	-1712,-1428,-1143,-857,-572,-286,0,285
	dc.w	571,857,1142,1427,1712,1996,2280,2562
	dc.w	2844,3126,3406,3685,3963,4240,4515,4790
	dc.w	5062,5334,5603,5871,6137,6401,6663,6924
	dc.w	7182,7438,7691,7943,8192,8438,8682,8923
	dc.w	9161,9397,9630,9860,10087,10310,10531,10748
	dc.w	10963,11173,11381,11585,11785,11982,12175,12365
	dc.w	12551,12732,12910,13085,13255,13421,13583,13740
	dc.w	13894,14044,14189,14330,14466,14598,14726,14849
	dc.w	14967,15081,15191,15296,15396,15491,15582,15668
	dc.w	15749,15826,15897,15964,16026,16083,16135,16182
	dc.w	16224,16262,16294,16322,16344,16361,16374,16382

org	$33000
load	$33000

dc.w	%1000000000000000
blk.w	15,0


