ORG	$40000
LOAD	$40000

SCRN=$50000
VSIN=$4c000


S:
	MOVE.B	#$FF,D3
	JSR	SYNC
	MOVE.B	#$38,D3
	JSR	SYNC
	MOVE.L	#COP,$DFF080
	MOVE.W	#$0020,$DFF096
	MOVE.W	#$8200,$DFF096
	MOVE.W	#$4000,$DFF09A


	MOVE.L	#SCRN,D0
	MOVE.W	D0,COP+6
	SWAP	D0
	MOVE.W	D0,COP+2

	MOVE.L	#$C00,D1
	MOVE.L	#SCRN,A0
GOOF:	MOVE.L	#$00000000,(A0)+
	DBF	D1,GOOF

;İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ

MAIN:	MOVE.B	#$FF,D3
	JSR	SYNC
	MOVE.B	#$00,D3
	JSR	SYNC

MOVE.W	#$C4F,$DFF180
	JSR	A_CLER
	JSR	A_STAR
MOVE.W	#$000,$DFF180

	BTST	#6,$BFE001
	BNE	MAIN
	JMP END

;İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ

SYNC:	MOVE.B	$DFF006,D0
	CMP.B	D3,D0
	BNE 	SYNC
	RTS

;İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ
			
END:	MOVE.L	$00000004,A6
	MOVE.L	#LIBNAMET,A1
	JSR	-408(A6)
	MOVE.L	D0,A0
	MOVE.L	38(A0),$DFF080
	MOVE.W	#$8020,$DFF096
	MOVE.W	#$C200,$DFF09A
	CLR.L	D0
	RTS
LIBNAMET:
	DC.B	'graphics.library',0
EVEN

;İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ
OBJECT:
	DC.W	20,20,30	;0
	DC.W	20,-20,30	;1
	DC.W	-20,-20,30	;2
	DC.W	-20,20,30	;3

	DC.W	20,20,-30	;4
	DC.W	20,-20,-30	;5
	DC.W	-20,-20,-30	;6
	DC.W	-20,20,-30	;7




	DC.W	$FFFF
MELLAN:
	DC.W	0,1,1,2,2,3,3,0
	DC.W	4,5,5,6,6,7,7,4
	DC.W	0,2,1,3
;	DC.W	0,4,1,5,2,6,3,7
;	DC.W	0,2,1,3

	DC.W	$FFFF

OBOJCT:	BLK.W	100,0

XA:	DC.W	0	; ROTATE ANGLE X,Y,Z
YA:	DC.W	0
ZA:	DC.W	0
XC:	DC.W	0	; X,Y,Z CALCULATE BUFFERT
YC:	DC.W	0
ZC:	DC.W	0

A_STAR:			; KAKTUS #1

	MOVE.L	#OBJECT,A0	; FROM
	MOVE.L	#OBOJCT,A1	; TO
	MOVE.L	#VSIN,A2	; SIN
	MOVE.W	#VSIN+$2000,A3	; COS
	MOVEQ	#0,D7

A_LOOP:	MOVE.W	(A0)+,XC	; X-COORD
	MOVE.W	(A0)+,YC	; Y-COORD
	MOVE.W	(A0)+,ZC	; Z-COORD
	CMP.W	#$FFFF,XC	; ALL COORDS?
	BEQ	A_OUT

; FNURR HERE..
	MOVE.W	XC,D0
	MOVE.W	YC,D1
	MOVE.W	D0,D2
	MOVE.W	D1,D3
	MOVE.W	ZA,D4
	MOVE.B	$DFF00B,D4

	MOVE.W	(A2,D4.W),D5	; SIN-D3
	MOVE.W	(A3,D4.W),D6	; COS-D2
	MULS	D5,D0
	MULS	D6,D1
	MULS	D6,D2
	MULS	D5,D3
	DIVS	#32767,D0
	DIVS	#32767,D1
	DIVS	#32767,D2
	DIVS	#32767,D3
	MOVE.W	ZC,D4
	SUB.W	D1,D0
	ADD.W	D2,D3
	MOVE.W	D3,D1
	MOVE.W	ZC,D4

	TST.W	D4		; Z=0?
	BEQ	A_NOZOM		; NO COMMENT...
	ADD.W	#$50,D4 	; WIEFIEL SKA X&Y BERO AV Z-AXEL?
	MULU	D4,D0		; Z TRANSFORMED TO *X
	MULU	D4,D1		; Z TRANSFORMED TO *Y
	LSR.W	#6,D0		; DIVIDERA NER IGEN
	LSR.W	#6,D1		;        -"-
A_NOZOM:MOVE.W	#84,D2		; MITTEN AV X-ONSCREEN POS.
	ADD.W	D0,D2		; D2=X
	MOVE.W	#64,D3		; MITTEN AV Y-ONSCREEN POS.
	ADD.W	D1,D3		; D3=Y
	AND.W	#$1FF,D2	; VEM VET VAD ALLA GREMLINS HITTAR
	AND.W	#$1FF,D3	; P[ MED MINA BITAR?
	MOVE.W	D2,$00(A1,D7.W)	; SPARA X I OBOJCT
	MOVE.W	D3,$02(A1,D7.W)	; SPARA Y I OBOJCT
	ADDQ.W	#4,D7		; INCREASE ONE WORD
	BRA	A_LOOP		; LOOP 4EVER?

A_OUT:	MOVEQ	#0,D6
	MOVE.L	#MELLAN,A0	; DRA LINJER MELLAN VILKA PLOTS?
	MOVE.L	#OBOJCT,A1	; X,Y-MOD. COORDS
A_LOP2:	MOVE.W	(A0)+,D0	; POINT ON WHAT (X1,Y1)
	MOVE.W	(A0)+,D1	; POINT ON WHAT (X2,Y2)
	CMP.W	#$FFFF,D0	; LAST POINTING(?)?
	BEQ	A_OUT2		; HEJDOE, SES NESTA FRAME!
	ASL.W	#2,D0		; *4, READ (X1,Y1) & (X2,Y2)
	ASL.W	#2,D1		; IN PAIRS (2*.W=.L!)
	MOVE.W	$00(A1,D0.W),X1+2	; PUT (X1,Y1) & (X2,Y2)
	MOVE.W	$02(A1,D0.W),Y1+2	; IN (A_)LINE BUFFERT
	MOVE.W	$00(A1,D1.W),X2+2
	MOVE.W	$02(A1,D1.W),Y2+2
	MOVEM.L	D6/A0-A1,-(A7)
	JSR	LINE			; STACK SAVE AND DO LINE!
	MOVEM.L	(A7)+,D6/A0-A1
	ADDQ.W	#1,D6
	BRA	A_LOP2		; LOOP FEVER?
A_OUT2:	RTS

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


	RTS


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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
X1:	DC.L	0
Y1:	DC.L	0
X2:	DC.L	0
Y2:	DC.L	0

LINE:
MOVE.L	X1,D0
MOVE.L	Y1,D1
MOVE.L	X2,D2
MOVE.L	Y2,D3
ASL.L	#1,D0
ASL.L	#1,D1
ASL.L	#1,D2
ASL.L	#1,D3



MOVE.L	#SCRN,A0
MOVE.L	#44,A1
MOVE.L	#$FFFF,A2

	MOVE.L	D0,D4
	SUB.L	D1,D4
	MOVE.L	D2,D5
	SUB.L	D3,D5
	EOR.L	D4,D5
	BEQ	D_DOJ
	MOVE.L	D3,D5
	SUB.L	D2,D5
	EOR.L	D4,D5
	BEQ	D_DOJ
	JMP	D_STOJ
D_DOJ:	ADDI.L	#1,D1
D_STOJ:	move.l	#44,d4
	mulu	d1,d4		;get pos in y 
	moveq	#-$10,d5
	andi.w	d0,d5
	lsr.w	#3,d5
	addi.w	d5,d4
	addi.l	A0,d4	;d4 startaddr
;-----------------------------------------------
octcalc:clr.l	d5
	subi.w	d1,d3
	roxl.b	#1,d5
	tst.w	d3
	bge.s	y2gy1
	neg.w	d3
y2gy1:	subi.w	d0,d2
	roxl.b	#1,d5
	tst.w	d2
	bge.s	x2gx1
	neg.w	d2
x2gx1:	move.w	d3,d1
	subi.w	d2,d1
	bge.s	dygdx
	exg	d2,d3
dygdx:	roxl.b	#1,d5
	move.b	octant(pc,d5),d5	;get octant value
	addi.w	d2,d2			;d2 * 2
;-----------------------------------------------
wblit:	btst	#14,$dff002
	bne.s	wblit
	move.w	d2,$dff062	;bltbmod  2(2y)
	subi.w	d3,d2
	bge.s	zig
	ori.b	#$40,d5
zig:	move.w	d2,$dff052	;bltaptL  (2y-x)
	subi.w	d3,d2			
	move.w	d2,$dff064	;bltamod  2(2y-2x)
	move.w	#$8000,$dff074	;bltadat  (const.)
	move.w	a2,$dff072	;bltbdat  
	move.w	#$ffff,$dff044	;bltafwm  (first mask)
	andi.w	#$000f,d0
	ror.w	#4,d0
	ori.w	#$0bca,d0
	move.w	d0,$dff040	;bltcon0  (start pos)
	move.w	d5,$dff042	;bltcon1  
	move.l	d4,$dff048	;bltcptH  (start addr of line)
	move.l	d4,$dff054	;bltdptH  (start addr of line)
	move.w	#44,$dff060	;bltcmod  (width of image)
	move.w	#44,$dff066	;bltdmod  (width of image)
	lsl.w	#6,d3
	addq.w	#2,d3
	move.w	d3,$dff058	;bltsize  (lenght)
	rts
octant:	dc.b	1,17,9,21,5,25,13,29


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

A_CLER:	BTST	#14,$DFF002
	BNE	A_CLER

	MOVE.W	#$0000,$DFF074
	MOVE.L	#SCRN+[30*44],$DFF054
	MOVE.L	#$01F00000,$DFF040
	MOVE.L	#$00000000,$DFF064
	MOVE.L	#$00000000,$DFF044
	MOVE.W	#[100*$40]+44,$DFF058
	RTS

;İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ

COP:		DC.W	$00E0,$0005,$00E2,$0000
		DC.W	$0182,$00F8
		DC.W	$008E,$2071,$0090,$30D1
		DC.W	$0092,$0030,$0094,$00F0
		DC.W	$0100,$1000
		DC.W	$0108,$0000,$010A,$0000

	DC.L	$FFFFFFFE
