>extern "df0:files/lasilog.raw",$60000
>extern "df0:files/menu.raw",$614a0
>extern "df0:files/mod.kak",$70000
>extern "df0:files/3d_sincoslist",ll_list

	org  $45000
	load $45000
; YO ! short instuctions:
; wi
; filename
; BEG> $45000
; END> $75cd0

; crunch with mega cruncher or something like that ...
; signed: Willow

nr_of_proggys:     dc.w 5
mouse_sensitivity: dc.w 9



mt_data=$70000

	movem.l d0-d7/a0-a6,-(a7)
	move.w #$8000,d1
	move.l #$62000,a0

clrplane2:
	clr.b (a0)+
	dbf d1,clrplane2


	move.w #$f000,d1
	move.l #$50000,a0
clrplane:
	clr.b (a0)+
	dbf d1,clrplane

do_normal:
	move.l 4,a6
	move.w #$03e0,$dff096
	move.l #gfxname,a1
	jsr -$0198(a6)
	move.l d0,gfxbase
	jsr -$0084(a6)
	jsr -$0078(a6)
	move.w #$83e0,$dff096
	move.w #$4000,$dff09a
	jsr mt_init
	lea $dff000,a6	

	clr.l d0
	move.w nr_of_proggys(pc),d0
	subi.w #$1,d0
	muls.w #$10,d0
	move.w d0,nr_of_proggys

	clr.l d0
	clr.l d1
	clr.l d2
	clr.l d3
	clr.l d4
	clr.l d5
	clr.l d6
	clr.l d7			; position of pointer !
;-------------------------------------------------------------	
mm_waitloop:
	move.l $dff004,d6	
	andi.l #$0001ff00,d6
	cmpi.l #$00001000,d6
	bne mm_waitloop

mm_checkspace:	
	lea mm_text(pc),a3
mm_pos:	addi.w #$0000,a3
	cmpi.b #00,(a3)
	bne mm_cutout
	clr.w mm_pos+2
	bra mm_loop

mm_cutout:	
	moveq #$00,d3
	moveq #$00,d4
	move.b (a3),d3
	subi.b #32,d3
	lea mm_data(pc),a1
	addi.b d3,d3
	addi.l d3,a1
	addi.w (a1),d4
	addi.w #1,mm_pos+2

mm_x:	move.w #$0000,d0
mm_y:	move.w #$0000,d1
	move.w d0,d2
	lsr.w #3,d0
	mulu #$28,d1
	addi.w d0,d1
	andi.w #$f,d2
	ror.w #4,d2
	ori.w #$0bfa,d2
	addi.l mm_screen(pc),d1

mm_waitblit2:
	btst #14,$002(a6)
	bne mm_waitblit2

	move.w d2,$040(a6)
	move.w #$0000,$042(a6)
	addi.l #$614a0,d4
	move.l d4,$050(a6)
	move.l d1,$048(a6)	        ; C background	
	move.l d1,$054(a6)		; D dest.
	move.w #$0026,$060(a6)
	move.l #$00260026,$064(a6)
	move.l #$ff00ff00,$044(a6)
	move.w #$7*64+1,$058(a6)
	addi.w #$0008,mm_x+2
	cmpi.w #$0130,mm_x+2
	ble mm_loop	
	move.w #$0000,mm_x+2
	addi.w #$0009,mm_y+2
	cmpi.w #$00a2,mm_y+2
	ble mm_loop2
	bra mm_startdemo	

mm_loop:	
	addi.b #$1,mm_space
	bra mm_checkspace
mm_loop2:	
	addi.b #$1,mm_space
	bra mm_waitloop

mm_startdemo:
	move.l #copper,$dff080
	clr.w $dff088

;-------------------------------------------------------------	
	lea spr0th,a0			; initialize 
	move.l #willow1,d0		; sprite
	swap d0				; pointers
	move.w d0,2(a0)
	swap d0	
	move.w d0,6(a0)

	lea spr1th,a0
	move.l #willow2,d0
	swap d0
	move.w d0,2(a0)
	swap d0	
	move.w d0,6(a0)

	lea spr2th,a0
	move.l #willow3,d0
	swap d0
	move.w d0,2(a0)
	swap d0	
	move.w d0,6(a0)

	lea spr3th,a0
	move.l #willow4,d0
	swap d0
	move.w d0,2(a0)
	swap d0	
	move.w d0,6(a0)

	lea spr4th,a0			; initialize 
	move.l #sstar1,d0		; sprite
	swap d0				; pointers
	move.w d0,2(a0)
	swap d0	
	move.w d0,6(a0)

	lea spr5th,a0
	move.l #sstar2,d0
	swap d0
	move.w d0,2(a0)
	swap d0	
	move.w d0,6(a0)

	lea spr6th,a0
	move.l #sstar3,d0
	swap d0
	move.w d0,2(a0)
	swap d0	
	move.w d0,6(a0)

	lea spr7th,a0
	move.l #sstar4,d0
	swap d0
	move.w d0,2(a0)
	swap d0	
	move.w d0,6(a0)

;-------------------------------------------------------------
	moveq   #$16,d7				; number
	moveq   #$00,d0				; add to block
	move.l  #$50005700,ss_cord		; first cord...
	lea sstar1,a0
ss_putout:
	move.l  ss_cord(pc), (a0,d0.w)		; move all these
	move.l	#$00002000, 4(a0,d0.w)		; f_cking
	addi.b  #$8,ss_cord			; Vstart
	bsr ss_random
	move.b  d2,ss_cord+1			;  Hstart
	addi.b  #$8,ss_cord+2			;   Vstop
	addi.w  #0032,d0
	dbf d7,ss_putout

	moveq   #$16,d7				; number
	moveq   #$00,d0				; add to block
	move.l  #$50005700,ss_cord		; first cord...
	lea sstar2,a0
ss_putout2:
	move.l  ss_cord(pc), (a0,d0.w)		; move all these
	move.l	#$40000000,12(a0,d0.w)		;      
	addi.b  #$8,ss_cord			; Vstart
	bsr ss_random
	move.b  d2,ss_cord+1			;  Hstart
	addi.b  #$8,ss_cord+2			;   Vstop
	addi.w  #0032,d0
	dbf d7,ss_putout2

	moveq   #$16,d7				; number
	moveq   #$00,d0				; add to block
	move.l  #$50005700,ss_cord		; first cord...
	lea sstar3,a0
ss_putout3:
	move.l  ss_cord(pc), (a0,d0.w)		; move all these
	move.l #$00008000,4(a0,d0.w)
	addi.b  #$8,ss_cord			; Vstart
	bsr ss_random
	move.b  d2,ss_cord+1			;  Hstart
	addi.b  #$8,ss_cord+2			;   Vstop
	addi.w  #0032,d0
	dbf d7,ss_putout3

	moveq   #$16,d7				; number
	moveq   #$00,d0				; add to block
	move.l  #$50005700,ss_cord		; first cord...
	lea sstar4,a0
ss_putout4:
	move.l  ss_cord(pc), (a0,d0.w)		; move all these
	move.l #$40004000,4(a0,d0.w)
	addi.b  #$8,ss_cord			; Vstart
	bsr ss_random
	move.b  d2,ss_cord+1			;  Hstart
	addi.b  #$8,ss_cord+2			;   Vstop
	addi.w  #0032,d0
	dbf d7,ss_putout4
;-------------------------------------------------------------	

mouse:	btst #6,$bfe001			; checkmouse jump here !
	beq menutest
	
rast:	move.l $004(a6),d6
	andi.l #$0001ff00,d6
	cmpi.l #$00013600,d6
	bne.s rast

;-------------------------------------------------------------
ss_parallax:
	moveq   #$16,d7				; number
	moveq   #$00,d0				; add to block
	lea sstar1,a0
ss_move:
	addi.b #$04,1(a0,d0.w)	 		; move em'
	addi.w #32,d0
	dbf d7,ss_move
						; next sprite size
	moveq   #$16,d7				; number	
	moveq   #$00,d0				; add to block
	lea sstar2,a0
ss_move2:
	addi.b #$03,1(a0,d0.w) 			; move em'
	addi.w #32,d0
	dbf d7,ss_move2

	moveq   #$16,d7		; number	
	moveq   #$00,d0				; add to block
	lea sstar3,a0
ss_move3:
	addi.b #$02,1(a0,d0.w) 			; move em'
	addi.w #32,d0
	dbf d7,ss_move3

	moveq   #$16,d7		; number	
	moveq   #$00,d0				; add to block
	lea sstar4,a0
ss_move4:
	addi.b #$01,1(a0,d0.w) 			; move em'
	addi.w #32,d0
	dbf d7,ss_move4

;-------------------------------------------------------------	
cycle:
	cmpi.b #1,det
	beq cycle2
	lea colors,a0
	move.w 2(a0),vara
	moveq #46,d7
loopy:
	move.w 6(a0),2(a0)
	addi.w #$4,a0
	dbf d7,loopy
	move.w vara,2(a0)		
	move.b #1,det
	bra sc_checkspace
cycle2:
	lea colors2,a0
	move.w 2(a0),vara2
	moveq #46,d7
loopy2:
	move.w 6(a0),2(a0)
	addi.w #$4,a0
	dbf d7,loopy2
	move.w vara2,2(a0)		
	move.b #0,det
;-------------------------------------------------------------
sc_checkspace:	
	cmpi.b #$4,sc_space
	bne sc_scrollit
	move.b #00,sc_space

	lea sc_text(pc),a3
sc_pos:	addi.w #$0000,a3
	cmpi.b #00,(a3)
	bne sc_cutout
	clr.w sc_pos+2
	move.l #$614a0,d1
	bra sc_waitblit1

sc_cutout:	
	moveq #$00,d0
	moveq #$00,d1
	move.b (a3),d0
	subi.b #32,d0
	lea mm_data(pc),a1
	addi.b d0,d0
	addi.l d0,a1
	addi.w (a1),d1
	ext.l d1
	addi.l #$614a0,d1
	addi.w #1,sc_pos+2

sc_waitblit1:
	btst #14,$002(a6)
	bne sc_waitblit1	
	
	move.l d1,$050(a6)
	move.l #$6407a,$054(a6)
	move.l #$0026004e,$064(a6)
	move.l #$ffffffff,$044(a6)
	move.l #$09f00000,$040(a6)
	move.w #$7*64+1,$058(a6)

sc_scrollit:
	btst #14,$002(a6)
	bne sc_scrollit	

	move.l #$64050,$050(a6)
	move.l #$6404e,$054(a6)
	move.l #$00000000,$064(a6)
	move.l #$e9f00000,$040(a6)
	move.w #$e*64+20,$058(a6)
	addi.b #1,sc_space


	lea ll_xyztab,a0
	lea ll_transtab,a1
ll_tradd:addi.w #$0000,a1
	cmpi.w  #$8000,(a1)
	bne ll_zero
	clr.w ll_tradd+2
	lea ll_transtab,a1
ll_zero:
	moveq #$0000,d0
	moveq #$0000,d1
	moveq #$0000,d2
	moveq #$0000,d3
	moveq #$0000,d4
	moveq #$0000,d5
	moveq #$0000,d7
	move.w (a0)+,d7
ll_transform:
	movem.w (a0),d0-d2
	movem.w (a1),d3-d5
	cmpi.w d3,d0	
	bgt ll_subbax
	blt ll_addax	
ll_equalx:
	cmpi.w d4,d1	
	bgt ll_subbay
	blt ll_adday	
ll_equaly:
	cmpi.w d5,d2	
	bgt ll_subbaz
	blt ll_addaz	
ll_equalz:
	addi.w #$0006,a0
	addi.w #$0006,a1
	addi.w #$0001,ll_nexttra
	dbf d7,ll_transform
	cmpi.w #$0900,ll_nexttra
	bne ll_traco
	addi.w #$0030,ll_tradd+2
	clr.w ll_nexttra

ll_traco:	
	bra ll_fadethem

ll_subbax:
	subi.w #1,(a0)
	bra ll_equalx
ll_addax:
	addi.w #1,(a0)
	bra ll_equalx

ll_subbay:
	subi.w #1,2(a0)
	bra ll_equaly
ll_adday:
	addi.w #1,2(a0)
	bra ll_equaly

ll_subbaz:
	subi.w #1,4(a0)
	bra ll_equalz
ll_addaz:
	addi.w #1,4(a0)
	bra ll_equalz

ll_fadethem:
	addi.w #$1,ll_fadesp
	cmpi.w #$a,ll_fadesp
	bne ll_mousetest
	clr.w ll_fadesp


	lea ll_fadecols(pc),a0
ll_fadd:addi.w #$0000,a0
	cmpi.w #$8000,(a0)
	bne ll_fada
	clr.w ll_fadd+2
	lea ll_fadecols(pc),a0

ll_fada:
	addi.w #$0006,ll_fadd+2
	move.w  (a0),ll_fa1+2
	move.w 2(a0),ll_fa2+2
	move.w 4(a0),ll_fa3+2

	
ll_mousetest:
	addi.w #$1,herkka
	move.w mouse_sensitivity(pc),d0
	cmpi.w herkka(pc),d0
	bne ll_dovec
	clr.w herkka
	
	moveq  #$0000,d1
	moveq  #$0000,d2
	moveq  #$0000,d3
	move.b $00a(a6),d1
	move.w oldpos,d2
	move.w d1,oldpos
	subi.w d2,d1
	cmpi.w #-$7f,d1
	bge pp_jmp01
	addi.w #$100,d1
	bra pp_jmpyy
pp_jmp01:
	cmpi.w #$7f,d1
	ble pp_jmpyy
	subi.w #$100,d1
pp_jmpyy:
	cmpi.w #$000,d1
	blt pp_up
	bgt pp_down	
	bra pp_count

pp_up:
	subi.w #$10,newyyy
	bra pp_count

pp_down:
	addi.w #$10,newyyy
	
pp_count:	
	move.w newyyy(pc),d1

	cmpi.w #$0000,d1
	bgt pp_nere
	move.w #$0000,d1
	move.w #$0000,newyyy

pp_nere:
	moveq #$0000,d2
	move.w nr_of_proggys,d2
	cmpi.w d2,d1
	blt pp_putcol
	move.w d2,d1		
	move.w d2,newyyy

pp_putcol:
	move.w oldyyy(pc),d3
	lea colmenu,a0
	move.w #$aae, 6(a0,d3.w)
	move.w #$448,10(a0,d3.w)
	move.w #$88a,14(a0,d3.w)


	move.w #$e9a, 6(a0,d1.w)
	move.w #$834,10(a0,d1.w)
	move.w #$a78,14(a0,d1.w)
	move.w d1,oldyyy

ll_dovec:
	lea ll_xyztab(pc),a0
	lea ll_cordin(pc),a1
	lea ll_projec(pc),a2

;-------------------------------------------------------------
ll_vector:
	cmpi.l #$50000,planeaddress	
	beq ll_othe
	move.l #$50000,planeaddress
	move.w #$9400,cop1+6
	move.w #$9428,cop2+6
	bra ll_clear
ll_othe:move.l #$58000,planeaddress
	move.w #$1400,cop1+6
	move.w #$1428,cop2+6
;----------------------------------------------------------
ll_clear:
	move.l ll_u1(pc),d1
ll_whipe:
	btst #14,$002(a6)
	bne ll_whipe
	move.l #$01000002,$040(a6)
	move.l d1,$054(a6)
	move.l #$00040004,$064(a6)
	move.w #380*64+18,$058(a6)	
;----------------------------------------------------------
	addi.w #08,kx+2				; delbara med 4	
	cmpi.w #1440,kx+2
	bne ll_roty
	move.w #$0000,kx+2
ll_roty:
	addi.w #12,ky+2				; delbara med 4	
	cmpi.w #1440,ky+2
	bne ll_rotz
	move.w #$0000,ky+2
ll_rotz:
	addi.w #08,kz+2				; delbara med 4	
	cmpi.w #1440,kz+2
	bne ll_getthem
	move.w #$0000,kz+2

;----------------------------------------------------------
ll_getthem:
	moveq #$0000,d7
	move.w (a0)+,d7				; number of cords
;----------------------------------------------------------
ll_getxyz:	
	moveq #$0000,d0
	moveq #$0000,d1
	moveq #$0000,d2

	movem.w (a0)+,d0-d2

	move.w d0,d3
	move.w d1,d4
	move.w d2,d5

	muls.w ll_xx(pc),d0
	muls.w ll_xy(pc),d1
	muls.w ll_xz(pc),d2	
	addi.l d1,d0	
	addi.l d2,d0
	
	move.w d3,d1
	move.w d4,d2
	move.w d5,d6

	muls.w ll_yx(pc),d1
	muls.w ll_yy(pc),d4
	muls.w ll_yz(pc),d6
	addi.l d4,d1
	addi.l d6,d1

	muls.w ll_zx(pc),d3
	muls.w ll_zy(pc),d2
	muls.w ll_zz(pc),d5
	addi.l d3,d2
	addi.l d5,d2
	asr.l #$0005,d0
	asr.l #$0005,d1
	asr.l #$0005,d2
	addi.l ll_oz(pc),d2

	move.l d0,d3
	move.l d1,d4
	move.l d2,d5
	asr.l #$0008,d3
	asr.l #$0008,d4
	asr.l #$0008,d5
	movem.l d3-d5,(a1)		; ll_vcords
	addi.l #$0010,a1
;----------------------------------------------------------
	asr.l #$0008,d2
	divs.w d2,d0
	divs.w d2,d1
	addi.w #125,d0		
	addi.w #160,d1		
	movem.w d0-d1,(a2)		; ll_projected
	addi.l #$0004,a2
;----------------------------------------------------------
	dbf d7,ll_getxyz
;----------------------------------------------------------
	lea ll_cordin(pc),a1
	lea ll_projec(pc),a2
	moveq #$0000,d7
	move.w (a0)+,d7

ll_checkall:
	lea ll_colors(pc),a4
	move.w (a0)+, (a4)
	move.w (a0)+,2(a4)
	move.w (a0)+,4(a4)
	move.w (a0)+,6(a4)
	moveq #$0000,d5
	move.w (a0)+,d5			; number of lines !!!

	movem.l d5-d6,-(a7)
	lea ll_1baxyz(pc),a3

	move.w  (a0),d6
	lsl.w #$0002,d6
	move.l  (a1,d6.w),12(a3)	; 1st x
	move.l 4(a1,d6.w),16(a3)	; 1st y
	move.l 8(a1,d6.w),20(a3)	; 1st z
	move.w  2(a0),d6
	lsl.w #$0002,d6
	movem.l (a1,d6.w),d0-d2
	move.w  4(a0),d6
	lsl.w #$0002,d6
	movem.l (a1,d6.w),d3-d5
	subi.l 12(a3),d0
	subi.l 16(a3),d1
	subi.l 20(a3),d2
	subi.l 12(a3),d3
	subi.l 16(a3),d4
	subi.l 20(a3),d5
	move.w d0,  (a3)
	move.w d1, 2(a3)
	move.w d2, 4(a3)
	move.w d3, 6(a3)
	move.w d4, 8(a3)
	move.w d5,10(a3)
	muls.w 10(a3),d1
	muls.w  4(a3),d4
	subi.l d1,d4
	muls.w  6(a3),d2
	muls.w   (a3),d5
	subi.l d2,d5
	muls.w  8(a3),d0
	muls.w  2(a3),d3
	subi.l d0,d3
	move.l 12(a3),d0
	move.l 16(a3),d1
	move.l 20(a3),d2
	muls.w d0,d4
	muls.w d1,d5
	muls.w d2,d3
	addi.l d4,d3
	addi.l d5,d3
	movem.l (a7)+,d5-d6

	cmpi.l #$0000,d3
	ble ll_visible
	andi.l #$ffff,d5
	addq.w #$0001,d5
	addi.l d5,d5
	addi.l d5,a0
	bra ll_nextface
;----------------------------------------------------------
ll_visible:
	moveq  #$0000,d0
	move.w (a0)+,d0
	movem.w (a2,d0.w),d0-d1
	move.w (a0),d2
	movem.w (a2,d2.w),d2-d3
	
;----------------------------------------------------------
; Draw lines !!
	movem.l d5-d7,-(a7)
	lea ll_varacord(pc),a3
	lea ll_colors(pc),a4
	move.l planeaddress(pc),a5
	movem.w d0-d3,(a3)

ll_draw:
	moveq  #$0000,d6
	move.w (a4),d6
	ext.l d6
	addi.l d6,a5	

	movem.w (a3),d0-d3
	move.w #$0b5a,ll_min+2
	cmpi.w d1,d3			;Test bigger y
	beq ll_noline
	bgt ll_short			;D2 > -> ok
	exg d0,d2			;Swap x:es
	exg d1,d3			;Swap y:s
	bra ll_short
ll_noline:
	move.w d1,d3			; don't draw !
	move.w #$0,ll_min+2
ll_short:
	subi.w #$1,d3			;Get shorter

	cmpi.w ll_maxx(pc),d0
	blt ll_ft2
	move.w d0,ll_maxx
ll_ft2:
	cmpi.w ll_maxx(pc),d2
	blt ll_ft4
	move.w d2,ll_maxx
ll_ft4:
	cmpi.w ll_maxy(pc),d3
	blt ll_ft6
	move.w d3,ll_maxy

ll_ft6:
	moveq #$0f,d4
	andi.w d0,d4
	subi.w d1,d3
	mulu.w #$0050,d1
	subi.w d0,d2
	blt ll_four
	tst.w d3
	blt ll_seven
	cmpi.w d2,d3
	bge ll_six
	moveq #$11,d7	
	bra ll_doline
	
ll_six:	
	moveq #$1,d7		
	exg d3,d2
	bra ll_doline	
	
ll_seven:
	neg.w d3
	cmpi.w d2,d3
	bge ll_four
	moveq #$19,d7
	bra ll_doline		
ll_four:
	neg.w d2
	tst.w d3
	blt ll_five
	cmpi.w d2,d3
	bge ll_five
	moveq #$15,d7		
	bra ll_doline	
	
ll_five:
	moveq #$9,d7
	exg d3,d2
	bra ll_doline
ll_doline:
	addi.w d3,d3
	asr.w #3,d0
	ext.l d0
	addi.l d0,d1
	move.w d3,d0
	subi.w d2,d0
	bge ll_sign
	ori.w #$40,d7
ll_sign:
	ori.w #$2,d7
	;;bclr #1,d7		; remove this if ya' gonna fill !!!
ll_linewait:
	btst #14,$002(a6)
	bne ll_linewait

	move.w d0,$052(a6)
	move.w d3,$062(a6)
	move.w d0,d3
	subi.w d2,d3
	move.w d3,$064(a6)
	move.l #$ffffffff,$044(a6)
	move.l #$ffff8000,$072(a6)
	move.w #$0050,$060(a6)
	move.w d7,d5
	addq.w #$1,d2
	asl.w #6,d2
	addq.w #2,d2
	swap d4
	asr.l #$4,d4
ll_min:	ori.w #$0b4a,d4
	swap d5
	move.w d4,d5
	swap d5
	addi.l a5,d1
	move.l d5,$040(a6)
	move.l d1,$048(a6)
	move.l d1,$054(a6)
	move.w d2,$058(a6)
	move.l planeaddress(pc),a5

	addi.w #$0002,a4
	cmpi.w #$0000,(a4)
	bne ll_draw

ll_cont:	
;----------------------------------------------------------
	movem.l (a7)+,d5-d7
	dbf d5,ll_visible			; next line of face
;----------------------------------------------------------
ll_nextface:
	addi.l #$0002,a0
	dbf d7,ll_checkall

;----------------------------------------------------------
ll_fill:
	moveq #$0000,d0
	moveq #$0000,d1

	move.w ll_maxx(pc),d0
	move.w #250,d1
	addq.w #$0003,d1
	lsr.w  #$0003,d0
	mulu.w #$0050,d1
	addi.w d0,d1
	addi.l planeaddress(pc),d1

	move.l ll_s1(pc),ll_u1
	move.l d1,ll_s1

ll_paint:
	btst #14,$002(a6)
	bne ll_paint

	move.l #$09f00012,$040(a6)
	move.l #$ffffffff,$044(a6)
	move.l d1,$050(a6)
	move.l d1,$054(a6)
	move.l #$00040004,$064(a6)
	move.w #380*64+18,$058(a6)	
;----------------------------------------------------------
ll_prepare:
	lea ll_list(pc),a3
	lea ll_sincos(pc),a4

kx:	move.w #$0000,d0
ky:	move.w #$0000,d1
kz:	move.w #$0000,d2

	move.w   (a3,d0.w),  (a4)	; sinx
	move.w $2(a3,d0.w), 2(a4)	; cosx

	move.w   (a3,d1.w), 4(a4)	; siny
	move.w $2(a3,d1.w), 6(a4)	; cosy

	move.w   (a3,d2.w), 8(a4)	; sinz
	move.w $2(a3,d2.w),10(a4)	; cosz
	
	move.w 6(a4),d0	
	muls.w 10(a4),d0	
	move.w (a4),d1	
	muls.w 4(a4),d1	
	asr.l #$0008,d1		
	muls.w 8(a4),d1	
	subi.l d1,d0		
	asr.l #$0003,d0		
	move.w d0,ll_xx		
	move.w 2(a4),d0	
	neg.l d0		
	muls.w 8(a4),d0	
	asr.l #$0003,d0		
	move.w d0,ll_xy		
	move.w 4(a4),d0	
	muls.w 10(a4),d0	
	move.w (a4),d1	
	muls.w 6(a4),d1	
	asr.l #$0008,d1		
	muls.w 8(a4),d1	
	addi.l d1,d0		
	asr.l #$0003,d0		
	move.w d0,ll_xz		
	move.w 6(a4),d0	
	muls.w 8(a4),d0	
	move.w (a4),d1	
	muls.w 4(a4),d1	
	asr.l #$0008,d1		
	muls.w 10(a4),d1	
	addi.l d1,d0		
	asr.l #$0003,d0		
	move.w d0,ll_yx		
	move.w 2(a4),d0	
	muls.w 10(a4),d0	
	asr.l #$0003,d0		
	move.w d0,ll_yy		
	move.w 4(a4),d0	
	muls.w 8(a4),d0	
	move.w (a4),d1	
	muls.w 6(a4),d1	
	asr.l #$0008,d1		
	muls.w 10(a4),d1	
	subi.l