DECRUNCH:	LEA	FILESTART,A0
		LEA	DECRUNCHAREA,A1

		MOVE.L	(A0)+,D0
		MOVE.L	(A0)+,D1
		MOVE.L	(A0)+,D5
		MOVE.L	A1,A2
		ADD.L	D0,A0
		ADD.L	D1,A2
		MOVE.L	-(A0),D0
		EOR.L	D0,D5

NOTFINISHED:	LSR.L	#1,D0
		BNE.S	NOTEMPTY1
		BSR	GETNEXTLWD
NOTEMPTY1:	BCS.S	BIGONE
		MOVEQ	#8,D1
		MOVEQ	#1,D3
		LSR.L	#1,D0
		BNE.S	NOTEMPTY2
		BSR	GETNEXTLWD
NOTEMPTY2:	BCS.S	DODUPL
		MOVEQ	#3,D1
		CLR.W	D4	

DOJMP:		BSR	RDD1BITS
		MOVE.W	D2,D3
		ADD.W	D4,D3

GETD3CHR:	MOVEQ	#7,D1
GET8BITS:	LSR.L	#1,D0
		BNE.S	NOTEMPTY3
		BSR	GETNEXTLWD
NOTEMPTY3:	ROXL.L	#1,D2
		DBF	D1,GET8BITS
		MOVE.B	D2,-(A2)
		DBF	D3,GETD3CHR
		BRA	NEXTCMD

BIGJMP:		MOVEQ	#8,D1
		MOVEQ	#8,D4	
		BRA	DOJMP

BIGONE:		MOVEQ	#2,D1
		BSR	RDD1BITS
		CMP.B	#2,D2
		BLT.S	MIDJUMPS
		CMP.B	#3,D2
		BEQ.S	BIGJMP

		MOVEQ	#8,D1
		BSR	RDD1BITS
		MOVE.W	D2,D3
		MOVE.W	#12,D1
		BRA	DODUPL

MIDJUMPS:	MOVE.W	#9,D1
		ADD.W	D2,D1
		ADDQ	#2,D2
		MOVE.W	D2,D3

DODUPL:		BSR	RDD1BITS

COPYD3BYTES:	SUBQ	#1,A2
		MOVE.B	(A2,D2.W),(A2)
		DBF	D3,COPYD3BYTES

NEXTCMD:	CMP.L	A2,A1
		BLT.L	NOTFINISHED
		TST.L	D5
		BNE.S	DAMAGE
		RTS

DAMAGE:		MOVE.W	#$FFFFF,D0
DAMLOOP:	MOVE.W	D0,$DFF180		;RASTER FLICKER
		SUBI.L	#1,D0			;WHEN ERROR
		BNE.S	DAMLOOP
		RTS

GETNEXTLWD:	MOVE.L	-(A0),D0
		EOR.L	D0,D5
		MOVE.W	#$10,CCR
		ROXR.L	#1,D0
		RTS

RDD1BITS:	SUBQ.W	#1,D1
		CLR.W	D2

GETBITS:	LSR.L	#1,D0
		BNE.S	NOTEMPTY
		MOVE.L	-(A0),D0
		EOR.L	D0,D5
		MOVE.W	#$10,CCR
		ROXR.L	#1,D0

NOTEMPTY:	ROXL.L	#1,D2
		DBF	D1,GETBITS
		RTS
