********************************************************************************

		Section	CrM_Data_Decruncher,Code
		Opt	c-,o+,p+

********************************************************************************

;		Code By Thomas Schwarz
;		Re-Moved By Skol!/AtX!

********************************************************************************
;
;		For V1.8t Of CrunchMania!
;
********************************************************************************

DePack_Address:	Equ.l	$60000
Jump_Address:	Equ.l	$60000

********************************************************************************

Begin:		Movem.l	d0-d4/d6/d7/a1-a6,-(a7)
		Lea	CrM_DataFile(pc),a2
		Cmpi.l	#"CrM!",(a2)+
		Bne.s	Exit
		Addq.l	#2,a2			; Skip Security Distance
		Lea	DePack_Address,a1
		Bsr.s	DePack
Exit:		Movem.l	(a7)+,d0-d4/d6/d7/a1-a6
		Moveq	#0,d0
		Rts
		;Jmp	Jump_Address

********************************************************************************
;
;		Call With:
;
;		a2 - Pointer To Packed File
;		a1 - Pointer To Address To Depack
;
********************************************************************************

DePack:		Move.l	(a2)+,d1
		Move.l	(a2)+,d2
		Lea	(a2),a3
		Cmpa.l	a1,a3
		Ble.s	L2
		Movea.l	a1,a3
		Adda.l	d1,a3
		Cmpa.l	a2,a3
		Ble.s	L2
		Movea.l	a2,a3
		Lea	(a1),a4
		Move.l	d2,d7
		Lsr.l	#2,d7
		Addq.l	#1,d7
		Movea.l	a4,a2
L1:		Move.l	(a3)+,(a4)+
		Subq.l	#1,d7
		Bne.s	L1
L2:		Movea.l	a1,a5
		Adda.l	d1,a1
		Adda.l	d2,a2
		Move.w	-(a2),d0
		Move.l	-(a2),d6
		Moveq	#16,d7
		Sub.w	d0,d7
		Lsr.l	d7,d6
		Move.w	d0,d7
		Moveq	#16,d3
		Moveq	#0,d4
L3:		Cmpa.l	a5,a1
		Ble	L21
		Bsr.s	L17
		Bcc.s	L7
		Moveq	#0,d4
L4:		Moveq	#8,d1
		Bsr	L19
		Move.b	d0,-(a1)
		Dbf.w	d4,L4
		Bra.s	L3

********************************************************************************

L5:		Moveq	#14,d4
		Moveq	#5,d1
		Bsr.s	L17
		Bcs.s	L6
		Moveq	#14,d1
L6:		Bsr.s	L19
		Add.w	d0,d4
		Bra.s	L4

********************************************************************************

L7:		Bsr.s	L17
		Bcs.s	L8
		Moveq	#1,d1
		Moveq	#1,d4
		Bra.s	L11

********************************************************************************

L8:		Bsr.s	L17
		Bcs.s	L9
		Moveq	#2,d1
		Moveq	#3,d4
		Bra.s	L11

********************************************************************************

L9:		Bsr.s	L17
		Bcs.s	L10
		Moveq	#4,d1
		Moveq	#7,d4
		Bra.s	L11

********************************************************************************

L10:		Moveq	#8,d1
		Moveq	#23,d4
L11:		Bsr.s	L19
		Add.w	d0,d4
		Cmpi.w	#22,d4
		Beq.s	L5
		Blt.s	L12
		Subq.w	#1,d4
L12:		Bsr.s	L17
		Bcs.s	L13
		Moveq	#9,d1
		Moveq	#32,d2
		Bra.s	L15

********************************************************************************

L13:		Bsr.s	L17
		Bcs.s	L14
		Moveq	#5,d1
		Moveq	#0,d2
		Bra.s	L15

********************************************************************************

L14:		Moveq	#14,d1
		Move.w	#544,d2
L15:		Bsr.s	L19
		Add.w	d2,d0
		Lea	(a1,d0.w),a3
L16:		Move.b	-(a3),-(a1)
		Dbf	d4,L16
		Bra	L3

********************************************************************************

L17:		Subq.w	#1,d7
		Bne.s	L18
		Moveq	#16,d7
		Move.w	d6,d0
		Lsr.l	#1,d6
		Swap	d6
		Move.w	-(a2),d6
		Swap	d6
		Lsr.w	#1,d0
L21:		Rts

********************************************************************************

L18:		Lsr.l	#1,d6
		Rts

********************************************************************************

L19:		Move.w	d6,d0
		Lsr.l	d1,d6
		Sub.w	d1,d7
		Bgt.s	L20
		Add.w	d3,d7
		Ror.l	d7,d6
		Move.w	-(a2),d6
		Rol.l	d7,d6
L20:		Add.w	d1,d1
		And.w	*+$02+$02(pc,d1.w),d0
		Rts

********************************************************************************

		Dc.b	$00,$01,$00,$03,$00,$07
		Dc.b	$00,$0f,$00,$1f,$00,$3f
		Dc.b	$00,$7f,$00,$ff,$01,$ff
		Dc.b	$03,$ff,$07,$ff,$0f,$ff
		Dc.b	$1f,$ff,$3f,$ff

********************************************************************************

CrM_DataFile:	;Incbin	"Packed_CrM_DataFile"

********************************************************************************

