UX_P	equ	0
UL_P	equ	4
UM_P	equ	8
UR_P	equ	12
UM_C	equ	16
UL_N	equ	20
UM_N	equ	24
UR_N	equ	28
UX_N	equ	32
UV_N	equ	36

	XDEF	_AnotherLI

	SECTION code

_AnotherLI:

	movem.l	a0-a3/a6/d0-d2,-(sp)
	lea	udata(pc),a6
	suba.l	a0,a2

	clr.l	UX_P(a6)
	clr.l	UL_P(a6)
	clr.l	UM_P(a6)

	move.l	a2,d1
	cmpi.l	#0,d1
	beq	Exit		; Jump: Length = 0

	move.l	a0,a3

	move.b	(a3)+,d0
	ext.w	d0
	ext.l	d0
	move.l	d0,UR_P(a6)

	cmpi.l	#1,d1
	beq	LI_Lg1		; Jump: Length = 1
	
	move.b	(a3)+,d0
	ext.w	d0
	ext.l	d0
	move.l	d0,UL_N(a6)

	cmpi.l	#2,d1
	beq	LI_Lg2		; Jump: Length = 2

	move.b	(a3)+,d0
	ext.w	d0
	ext.l	d0
	move.l	d0,UR_N(a6)

	cmpi.l	#3,d1
	beq	LI_Lg3		; Jump: Length = 3

	move.b	(a3)+,d0
	ext.w	d0
	ext.l	d0
	move.l	d0,UX_N(a6)

	cmpi.l	#4,d1
	beq	LI_Lg4		; Jump: Length = 4

	move.b	(a3)+,d0
	ext.w	d0
	ext.l	d0
	move.l	d0,UV_N(a6)

	bra	LI_LgG		; Jump: Length > 4

LI_Lg1:	clr.l	UL_N(a6)	; Length  = 1
LI_Lg2:	clr.l	UR_N(a6)	; Length <= 2
LI_Lg3:	clr.l	UX_N(a6)	; Length <= 3
LI_Lg4:	clr.l	UV_N(a6)	; Length <= 4

LI_LgG:	move.l	UL_P(a6),d1
	add.l	UR_P(a6),d1
	lsl.l	#2,d1
	sub.l	UX_P(a6),d1
	sub.l	UL_N(a6),d1
	move.l	d1,d2
	lsl.l	#2,d2
	add.l	d2,d1
	add.l	UX_P(a6),d1
	add.l	UR_N(a6),d1
	move.l	d1,UM_P(a6)

	move.l	UR_P(a6),d1
	add.l	UL_N(a6),d1
	lsl.l	#2,d1
	sub.l	UL_P(a6),d1
	sub.l	UR_N(a6),d1
	move.l	d1,d2
	lsl.l	#2,d2
	add.l	d2,d1
	add.l	UX_P(a6),d1
	add.l	UX_N(a6),d1
	move.l	d1,UM_C(a6)
	lsl.l	#2,d1

	move.w	d1,4(a1)

	move.l	a2,d0
	subq.l	#6,d0
	bcs	LI_BigLp
	add.l	#5,a0

LI_BigLp:
	move.l	UR_P(a6),d1
	lsl.l	#7,d1
	
	move.w	d1,(a1)

	move.l	UL_N(a6),d1
	add.l	UR_N(a6),d1
	lsl.l	#2,d1
	sub.l	UR_P(a6),d1
	sub.l	UX_N(a6),d1
	move.l	d1,d2
	lsl.l	#2,d2
	add.l	d2,d1
	add.l	UL_P(a6),d1
	add.l	UV_N(a6),d1
	move.l	d1,UM_N(a6)
	lsl.l	#2,d1
	
	move.w	d1,12(a1)

	move.l	UR_P(a6),d1
	lsl.l	#5,d1
	add.l	UM_C(a6),d1
	lsl.l	#2,d1
	sub.l	UM_P(a6),d1
	move.l	UL_N(a6),d2
	lsl.l	#5,d2
	sub.l	d2,d1
	move.l	d1,d2
	lsl.l	#2,d2
	add.l	d2,d1
	add.l	UM_N(a6),d1
	move.l	UL_P(a6),d2
	lsl.l	#2,d2
	lsr.l	#3,d1
	addx.l	d2,d1

	move.w	d1,2(a1)

	move.l	UL_N(a6),d1
	lsl.l	#5,d1
	add.l	UM_C(a6),d1
	lsl.l	#2,d1
	sub.l	UM_N(a6),d1
	move.l	UR_P(a6),d2
	lsl.l	#5,d2
	sub.l	d2,d1
	move.l	d1,d2
	lsl.l	#2,d2
	add.l	d2,d1
	add.l	UM_P(a6),d1
	move.l	UR_N(a6),d2
	lsl.l	#2,d2
	lsr.l	#3,d1
	addx.l	d2,d1

	move.w	d1,6(a1)

	move.l	UL_P(a6),UX_P(a6)
	move.l	UR_P(a6),UL_P(a6)
	move.l	UL_N(a6),UR_P(a6)
	move.l	UR_N(a6),UL_N(a6)
	move.l	UX_N(a6),UR_N(a6)
	move.l	UV_N(a6),UX_N(a6)

	move.l	UM_C(a6),UM_P(a6)
	move.l	UM_N(a6),UM_C(a6)

	addq.l	#8,a1

	move.b	(a0)+,d1
	ext.w	d1
	ext.l	d1
	move.l	d1,UV_N(a6)

	dbra	d0,LI_BigLp

	move.l	#4,d0

LI_EndLp:
	move.l	UR_P(a6),d1
	lsl.l	#7,d1
	
	move.w	d1,(a1)

	move.l	UL_N(a6),d1
	add.l	UR_N(a6),d1
	lsl.l	#2,d1
	sub.l	UR_P(a6),d1
	sub.l	UX_N(a6),d1
	move.l	d1,d2
	lsl.l	#2,d2
	add.l	d2,d1
	add.l	UL_P(a6),d1
	add.l	UV_N(a6),d1
	move.l	d1,UM_N(a6)

	and.l	d0,d0
	beq	LI_ALj1
	
	lsl.l	#2,d1

	move.w	d1,12(a1)

LI_ALj1:

	move.l	UR_P(a6),d1
	lsl.l	#5,d1
	add.l	UM_C(a6),d1
	lsl.l	#2,d1
	sub.l	UM_P(a6),d1
	move.l	UL_N(a6),d2
	lsl.l	#5,d2
	sub.l	d2,d1
	move.l	d1,d2
	lsl.l	#2,d2
	add.l	d2,d1
	add.l	UM_N(a6),d1
	move.l	UL_P(a6),d2
	lsl.l	#2,d2
	lsr.l	#3,d1
	addx.l	d2,d1

	move.w	d1,2(a1)

	move.l	UL_N(a6),d1
	lsl.l	#5,d1
	add.l	UM_C(a6),d1
	lsl.l	#2,d1
	sub.l	UM_N(a6),d1
	move.l	UR_P(a6),d2
	lsl.l	#5,d2
	sub.l	d2,d1
	move.l	d1,d2
	lsl.l	#2,d2
	add.l	d2,d1
	add.l	UM_P(a6),d1
	move.l	UR_N(a6),d2
	lsl.l	#2,d2
	lsr.l	#3,d1
	addx.l	d2,d1

	move.w	d1,6(a1)

	move.l	UL_P(a6),UX_P(a6)
	move.l	UR_P(a6),UL_P(a6)
	move.l	UL_N(a6),UR_P(a6)
	move.l	UR_N(a6),UL_N(a6)
	move.l	UX_N(a6),UR_N(a6)
	move.l	UV_N(a6),UX_N(a6)

	move.l	UM_C(a6),UM_P(a6)
	move.l	UM_N(a6),UM_C(a6)

	addq.l	#8,a1

	clr.l	UV_N(a6)

	dbra	d0,LI_EndLp

Exit:
	
	movem.l	(sp)+,a0-a3/a6/d0-d2
	rts

udata:
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	END
