*******************************************************
**             XFD external decruncher               **
**          for Magnetic Fields Cruncher             **
**             adapted by Wanted Team                **
*******************************************************

	INCLUDE	"AINCLUDE:IncDirs.i"
	INCLUDE	"libraries/xfdmaster.i"

; xfdForeman structure MUST be first thing in all external decrunchers

ForeMan		moveq	#-1,d0		;security
		rts
		dc.l	XFDF_ID		;id
		dc.w	1		;version
		dc.w	0
		dc.l	0,0		;private
		dc.l	S_SQ		;first slave

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

; xfdSlave structure: this one doesn't support data scanning

S_SQ		dc.l	S_SP		;next slave
		dc.w	2		;version
		dc.w	39		;master version
		dc.l	N_SQ		;name
		dc.w	XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET
		dc.w	0
		dc.l	RB_SQ		;recog buffer
		dc.l	DB_SFSQ		;decrunch buffer
		dc.l	0		;recog segment
		dc.l	0		;decrunch segment
		dc.w	0
		dc.w	XFDID_SACFPQCruncher
		dc.l	12+2

S_SP		dc.l	S_SF		;next slave
		dc.w	2		;version
		dc.w	39		;master version
		dc.l	N_SP		;name
		dc.w	XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET
		dc.w	0
		dc.l	RB_SP		;recog buffer
		dc.l	DB_SCSP		;decrunch buffer
		dc.l	0		;recog segment
		dc.l	0		;decrunch segment
		dc.w	0
		dc.w	XFDID_SACFPQCruncher
		dc.l	12+2

S_SF		dc.l	S_SC		;next slave
		dc.w	2		;version
		dc.w	39		;master version
		dc.l	N_SF		;name
		dc.w	XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET
		dc.w	0
		dc.l	RB_SF		;recog buffer
		dc.l	DB_SFSQ		;decrunch buffer
		dc.l	0		;recog segment
		dc.l	0		;decrunch segment
		dc.w	0
		dc.w	XFDID_SACFPQCruncher
		dc.l	12+2

S_SC		dc.l	S_SA_1		;next slave
		dc.w	2		;version
		dc.w	39		;master version
		dc.l	N_SC		;name
		dc.w	XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET
		dc.w	0
		dc.l	RB_SC		;recog buffer
		dc.l	DB_SCSP		;decrunch buffer
		dc.l	0		;recog segment
		dc.l	0		;decrunch segment
		dc.w	0
		dc.w	XFDID_SACFPQCruncher
		dc.l	12+2

S_SA_1		dc.l	S_SA_2		;next slave
		dc.w	2		;version
		dc.w	39		;master version
		dc.l	N_SA_1		;name
		dc.w	XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET
		dc.w	0
		dc.l	RB_SA_1		;recog buffer
		dc.l	DB_SA_1		;decrunch buffer
		dc.l	0		;recog segment
		dc.l	0		;decrunch segment
		dc.w	0
		dc.w	XFDID_SACFPQCruncher
		dc.l	12+2

S_SA_2		dc.l	S_SA_3		;next slave
		dc.w	2		;version
		dc.w	39		;master version
		dc.l	N_SA_2		;name
		dc.w	XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET
		dc.w	0
		dc.l	RB_SA_2		;recog buffer
		dc.l	DB_SA_2		;decrunch buffer
		dc.l	0		;recog segment
		dc.l	0		;decrunch segment
		dc.w	0
		dc.w	XFDID_SACFPQCruncher
		dc.l	12+2

S_SA_3		dc.l	0		;no more slaves
		dc.w	2		;version
		dc.w	39		;master version
		dc.l	N_SA_3		;name
		dc.w	XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET
		dc.w	0
		dc.l	RB_SA_3		;recog buffer
		dc.l	DB_SA_3		;decrunch buffer
		dc.l	0		;recog segment
		dc.l	0		;decrunch segment
		dc.w	0
		dc.w	XFDID_SACFPQCruncher
		dc.l	12+2

	dc.b	"$VER: Magnetic Fields Cruncher 2.1 (09.06.2001) by Wanted Team",0
N_SA_1	dc.b	"Magnetic Fields data cruncher (SA - anim mode 1)",0
N_SA_2	dc.b	"Magnetic Fields data cruncher (SA - anim mode 2)",0
N_SA_3	dc.b	"Magnetic Fields data cruncher (SA - anim mode 3)",0
N_SC	dc.b	"Magnetic Fields data cruncher (SC - colours picture mode)",0
N_SF	dc.b	"Magnetic Fields data cruncher (SF - data file mode)",0
N_SP	dc.b	"Magnetic Fields data cruncher (SP - picture mode)",0
N_SQ	dc.b	"Magnetic Fields data cruncher (SQ - sample mode)",0
	even

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

; Recog buffer function: receives buffer + length in a0/d0

RB_SQ
	moveq	#0,D0
	cmp.w	#"SQ",(A0)+
	bne.b	Exit
	tst.b	(A0)
	bne.b	Exit
	move.l	(A0)+,D1
	move.l	D1,xfdrr_FinalTargetLen(A1)
	addq.l	#7,D1
	and.l	#$FFFFFFF8,D1
	moveq	#64,D0				; extra buffer length
	add.l	D0,D1
	move.l	D1,xfdrr_MinTargetLen(A1)
	move.l	(A0),D1
	and.l	#$00FFFFFF,D1
	moveq	#10,D0
	asl.l	#2,D1
	add.l	D1,D0
	move.l	D0,xfdrr_MinSourceLen(A1)
	moveq	#1,D0
Exit
	rts

; Recog buffer function: receives buffer + length in a0/d0

RB_SP	move.l	D2,-(a7)
	moveq	#0,D0
	cmp.w	#"SP",(A0)+
	bne.b	Exit2
	tst.b	(A0)
	bne.b	Exit2
	move.w	(A0)+,D0
	subq.l	#1,D0
	moveq	#0,D1
	move.l	(A0)+,D2
dodaj_1
	add.l	D2,D1
	dbeq	D0,dodaj_1
	move.l	D1,xfdrr_FinalTargetLen(A1)
	add.l	D1,D1
	add.l	#64+16384+8256,D1		; extra buffer length
	move.l	D1,xfdrr_MinTargetLen(A1)
	moveq	#12,D2
	add.l	(A0),D2
	move.l	D2,xfdrr_MinSourceLen(A1)
	moveq	#1,D0
Exit2	move.l	(A7)+,D2
	rts

; Recog buffer function: receives buffer + length in a0/d0

RB_SF
	moveq	#0,D0
	cmp.w	#"SF",(A0)+
	bne.b	Exit3
	tst.b	(A0)
	bne.b	Exit3
	move.l	(A0)+,D1
	move.l	D1,xfdrr_FinalTargetLen(A1)
	moveq	#64,D0				; extra buffer length
	add.l	D0,D1
	move.l	D1,xfdrr_MinTargetLen(A1)
	tst.b	(A0)
	bne.b	Exit3
	moveq	#10,D0
	add.l	(A0),D0
	move.l	D0,xfdrr_MinSourceLen(A1)
	moveq	#1,D0
Exit3
	rts

; Recog buffer function: receives buffer + length in a0/d0

RB_SC	move.l	D2,-(A7)
	cmp.w	#"SC",(A0)+
	bne.b	Exit4
	tst.b	(A0)
	bne.b	Exit4
	move.w	(A0)+,D0
	subq.l	#1,D0
	moveq	#0,D1
	move.l	(A0)+,D2
dodaj_2
	add.l	D2,D1
	dbeq	D0,dodaj_2
	move.l	D1,xfdrr_FinalTargetLen(A1)
	add.l	D1,D1
	add.l	#64+16384+8256,D1		; extra buffer length
	move.l	D1,xfdrr_MinTargetLen(A1)
	moveq	#12,D2
	add.l	(A0),D2
	cmp.l	#$10,D2
	bls.b	Exit4				; too short!
	move.l	D2,xfdrr_MinSourceLen(A1)
	moveq	#1,D0
	bra.b	End4
Exit4	moveq	#0,D0
End4	move.l	(A7)+,D2
	rts


; Recog buffer function: receives buffer + length in a0/d0

RB_SA_2	movem.l	D2-D4,-(A7)
	moveq	#0,D0
	cmp.w	#"SA",(A0)+
	bne.b	Exit5
	tst.b	(A0)
	bne.b	Exit5
	addq.l	#2,A0
	moveq	#0,D1
	move.w	(A0)+,D1
	tst.b	(A0)
	bne.b	Exit5
	move.l	(A0)+,D2
	move.l	(A0)+,D3
	cmp.l	D3,D2
	ble.b	Exit5
	asl.w	#3,D1
	move.l	4(A0),D4
	add.l	D1,A0
	cmp.l	-4(A0),D4
	bne.b	Exit5
	cmp.l	-12(A0),D4
	bne.b	Exit5
	moveq	#14,D0
	add.l	D1,D0
	add.l	D3,D0
	move.l	D2,xfdrr_FinalTargetLen(A1)
	add.l	#64+16384,D2			; extra buffer length
	move.l	D2,xfdrr_MinTargetLen(A1)
	move.l	D0,xfdrr_MinSourceLen(A1)
	moveq	#1,D0
Exit5	movem.l	(a7)+,d2-d4
	rts

; Recog buffer function: receives buffer + length in a0/d0

RB_SA_3	movem.l	D2-D5/A2,-(A7)
	moveq	#0,D0
	move.l	A0,A2
	cmp.w	#"SA",(A2)+
	bne.w	Exit6
	tst.b	(A2)
	bne.b	Exit6
	addq.l	#2,A2
	moveq	#0,D1
	move.w	(A2)+,D1
	tst.b	(A2)
	bne.b	Exit6
	move.l	(A2)+,D2
	move.l	(A2)+,D3
	cmp.l	D3,D2
	ble.b	Exit6
	asl.w	#3,D1
	move.l	4(A2),D4
	add.l	D1,A2
	cmp.l	-4(A2),D4
	bne.b	OK_SA
	cmp.l	-12(A2),D4
	beq.b	Exit6
OK_SA
	move.l	D2,xfdrr_FinalTargetLen(A1)
	add.l	#64+16384,D2			; extra buffer length
	move.l	D2,xfdrr_MinTargetLen(A1)
	move.l	A0,A2

	MOVE.W	4(A0),D4
	ADDA.W	#14,A0
	SUBQ.W	#1,D4
rbC0000CC	ADDQ.W	#4,A0
	MOVE.L	(A0)+,D2
	SWAP	D2
	LSR.W	#8,D2
	MOVE.W	D2,D5
	LSR.W	#2,D5
	ANDI.W	#3,D2
	BEQ.S	rbC0000E8
	CMPI.W	#3,D2
	BEQ.S	rbC0000E8
	ADD.W	D2,D2
	BRA.S	rbC0000EA

rbC0000E8	MOVEQ	#0,D2
rbC0000EA	MOVEQ	#5,D0
rbC0000EC	LSR.W	#1,D5
	BCC.S	rbC0000F2
	ADDQ.W	#4,D2
rbC0000F2	DBRA	D0,rbC0000EC
	ADDQ.W	#2,D2
	ADDA.W	D2,A0
	DBRA	D4,rbC0000CC
	sub.l	A2,A0
	add.l	A0,D3
	move.l	D3,xfdrr_MinSourceLen(A1)
	moveq	#1,D0
Exit6	movem.l	(a7)+,d2-d5/A2
	rts


; Recog buffer function: receives buffer + length in a0/d0

RB_SA_1	movem.l	d2-d3,-(a7)
	moveq	#0,D0
	cmp.w	#"SA",(A0)+
	bne.b	Exit7
	tst.b	(A0)
	bne.b	Exit7
	move.w	(A0)+,D1
	tst.b	(A0)
	bne.b	Exit7
	move.l	(A0)+,D2
	tst.b	(A0)
	bne.b	Exit7
	move.l	(A0)+,D3
	add.l	D3,A0
	addq.l	#2,A0
	cmp.w	(A0)+,D1
	bne.b	Exit7
	cmp.l	(A0)+,D2
	bne.b	Exit7
	tst.w	(A0)
	bne.b	Exit7
	moveq	#20,D0
	add.l	(A0),D0
	add.l	D3,D0
	move.l	D0,xfdrr_MinSourceLen(A1)
	subq.w	#1,D1
	moveq	#8,D0
dodaj_3
	add.l	D2,D0
	dbeq	D1,dodaj_3
	add.l	(A0),D0
	move.l	D0,xfdrr_FinalTargetLen(A1)
	add.l	#64+16384+8256,D0		; extra buffer length
	move.l	D0,xfdrr_MinTargetLen(A1)
	moveq	#1,D0
Exit7	movem.l	(a7)+,d2-d3
	rts

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

; Decrunch buffer function: receives bufferinfo in a0
; This style requires xfdmaster.library V39

DB_SA_1
	movem.l	D2-D7/A2-A6,-(A7)
	move.l	A0,A5
	move.l	xfdbi_UserTargetBuf(A5),A1
	move.l	xfdbi_SourceBuffer(A5),A0
	move.l	xfdbi_MinSourceLen(A5),D0
	move.l	xfdbi_FinalTargetLen(A5),D3
	btst	#0,D3
	beq.b	even_1
	addq.l	#1,D3
even_1
	lea	0(A1,D3.L),A3
	lea	64(A3),A2
	lea	16384(A2),A5
	move.l	D0,$828-$7FC(A3)
	bsr.w	D_SA_1
	moveq	#1,D0
	movem.l	(A7)+,D2-D7/A2-A6
	rts

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

; Decrunch buffer function: receives bufferinfo in a0
; This style requires xfdmaster.library V39

DB_SA_2
	movem.l	D2-D7/A2-A6,-(A7)
	move.l	A0,A5
	move.l	xfdbi_UserTargetBuf(A5),A1
	move.l	xfdbi_SourceBuffer(A5),A0
	move.l	xfdbi_MinSourceLen(A5),D0
	move.l	xfdbi_FinalTargetLen(A5),D3
	btst	#0,D3
	beq.b	even_2
	addq.l	#1,D3
even_2
	lea	0(A1,D3.L),A3
	lea	64(A3),A2
	move.l	D0,12(A3)
	bsr.w	D_SA_2
	moveq	#1,D0
	movem.l	(A7)+,D2-D7/A2-A6
	rts

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

; Decrunch buffer function: receives bufferinfo in a0
; This style requires xfdmaster.library V39

DB_SA_3
	movem.l	D2-D7/A2-A6,-(A7)
	move.l	A0,A5
	move.l	xfdbi_UserTargetBuf(A5),A1
	move.l	xfdbi_SourceBuffer(A5),A0
	move.l	xfdbi_MinSourceLen(A5),D0
	move.l	xfdbi_FinalTargetLen(A5),D3
	btst	#0,D3
	beq.b	even_3
	addq.l	#1,D3
even_3
	lea	0(A1,D3.L),A3
	lea	64(A3),A2
	move.l	D0,12(A3)
	bsr.w	D_SA_3
	moveq	#1,D0
	movem.l	(A7)+,D2-D7/A2-A6
	rts

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

; Decrunch buffer function: receives bufferinfo in a0
; This style requires xfdmaster.library V39

DB_SFSQ
	movem.l	D2-D7/A2-A6,-(A7)
	move.l	A0,A5
	move.l	xfdbi_UserTargetBuf(A5),A1
	move.l	xfdbi_SourceBuffer(A5),A0
	move.l	xfdbi_MinSourceLen(A5),D0
	move.l	xfdbi_UserTargetBufLen(A5),D3
	moveq	#64,D2
	sub.l	D2,D3
	btst	#0,D3
	beq.b	even_4
	addq.l	#1,D3
even_4
	lea	0(A1,D3.L),A3
	move.l	D0,12(A3)
	bsr.w	D_SFSQ
	moveq	#1,D0
	movem.l	(A7)+,D2-D7/A2-A6
	rts

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

; Decrunch buffer function: receives bufferinfo in a0
; This style requires xfdmaster.library V39

DB_SCSP
	movem.l	D2-D7/A2-A6,-(A7)
	move.l	A0,A4
	move.l	xfdbi_UserTargetBuf(A4),A1
	move.l	xfdbi_SourceBuffer(A4),A0
	move.l	xfdbi_MinSourceLen(A4),D0
	move.l	xfdbi_TargetBufSaveLen(A4),D3
	add.l	D3,D3
	lea	0(A1,D3.L),A3
	lea	64(A3),A2
	lea	16384(A2),A5
	move.l	D0,12(A3)
	lsr.l	#1,D3

	movem.l	D0-A6,-(SP)
	bsr.w	D_SCSP_2
	movem.l	(SP)+,D0-A6

	lea	0(A1,D3.L),A1
	move.l	D0,12(A3)

	movem.l	D0-A6,-(SP)
	bsr.w	D_SCSP_2
	movem.l	(SP)+,D0-A6

	movem.l	D0-A6,-(SP)
	move.l	A1,A2
	sub.l	D3,A1
	move.l	A2,A0
CheckData
	cmp.l	A1,A0
	beq.b	FileOK
	move.b	(A2)+,D0
	cmp.b	(A1)+,D0
	bne.b	Old_Mode
	bra.b	CheckData
FileOK
	cmp.l	#640,D3
	bne.b	NoExcept1
	cmp.l	#'KKK@',154(A0)				; exception 1
	beq.b	Old_Mode
	bra.b	Correct
NoExcept1
	cmp.l	#40000,D3
	bne.b	Correct
	cmp.l	#'DDDD',16188(A0)			; exception 2
	beq.b	Old_Mode
Correct
	movem.l	(SP)+,D0-A6
back
	moveq	#1,D0
	movem.l	(A7)+,D2-D7/A2-A6
	rts
Old_Mode
	movem.l	(SP)+,D0-A6
	move.l	D0,$828-$7FC(A3)
	sub.l	D3,A1
	bsr.w	D_SCSP_1
	bra.b	back

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

; Decruncher from game "Crystal Dragon" (c) 1994 by Magnetic Fields

*****************************************
*					*
* descrunch any file			*
*					*
* from a0 to a1				*
* if pic, 16k buffer needed at a2	*
* if colrs stored palette goes to d1	*
* initial size of file in d0      	*
* 					*
* first word 				*
* 					*
* "SA" sout crunched anim file		*
* "SP" sout crunched pic file		*
* "SC" sout crunched pic file + colrs	*
* "SF" sout crunched data file		*
*					*
* returns length descrunched to in d0.l *
*					*
*****************************************

;	MOVEA.L	#lbL06439C,A2
;	MOVE.L	#lbL06839C,D1

;	MOVEM.L	D1-D7/A0-A6,-(SP)
;	LEA	lbL00070E,A3
;	MOVE.L	D0,12(A3)
;	MOVE.W	(A0),D0
;	CMP.W	#'SQ',D0
;	BEQ.L	lbC000746
;	CMP.W	#'SA',D0
;	BEQ.S	lbC000086
;	CMP.W	#'SP',D0
;	BEQ.L	lbC000296
;	CMP.W	#'SC',D0
;	BEQ.L	lbC00029C
;	CMP.W	#'SF',D0
;	BEQ.L	lbC0005F2
;	MOVE.L	12(A3),D7
;	BEQ.S	lbC000046
;lbC000040	MOVE.B	(A0)+,(A1)+
;	SUBQ.L	#1,D7
;	BNE.S	lbC000040
;lbC000046	MOVE.L	12(A3),D0
;	MOVEM.L	(SP)+,D1-D7/A0-A6
;	RTS

lbC000050	MOVE.W	$10(A3),D1
	MOVEQ	#0,D7
lbC000056	ADD.L	D0,D0
	BNE.S	lbC000062
	MOVE.L	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.L	D0,D0
lbC000062	ROXR.B	#1,D7
	DBRA	D1,lbC000056
	RTS

lbW00006A	dc.w	0
	dc.w	0
	dc.w	0
	dc.w	7
	dc.w	5
	dc.w	4
	dc.w	4
lbL000078	dc.w	0
	dc.w	0
	dc.w	0
	dc.w	4
	dc.w	4
	dc.w	3
	dc.w	3

D_SA_3
lbC000086
	movem.l	D1-D7/A0-A6,-(SP)

	MOVEA.L	A1,A4
	MOVE.L	A1,(A3)
	MOVE.W	2(A0),$10(A3)
	MOVE.W	4(A0),$18(A3)
	MOVE.L	6(A0),D1
	MOVE.L	D1,4(A3)
	MOVE.W	$10(A3),D0
	ADD.W	D0,D0
	LEA	lbW00006A(PC),A1
	MOVE.W	0(A1,D0.W),$14(A3)
	LEA	lbL000078(PC),A1
	MOVE.W	0(A1,D0.W),$12(A3)
	MOVE.L	10(A0),D0
	ADDA.W	#14,A0
	MOVE.W	$18(A3),D4
	SUBQ.W	#1,D4
	MOVE.L	D0,-(SP)
lbC0000CC	ADDQ.W	#4,A0
	MOVE.L	(A0)+,D2
	SWAP	D2
	LSR.W	#8,D2
	MOVE.W	D2,D5
	LSR.W	#2,D5
	ANDI.W	#3,D2
	BEQ.S	lbC0000E8
	CMPI.W	#3,D2
	BEQ.S	lbC0000E8
	ADD.W	D2,D2
	BRA.S	lbC0000EA

lbC0000E8	MOVEQ	#0,D2
lbC0000EA	MOVEQ	#5,D0
lbC0000EC	LSR.W	#1,D5
	BCC.S	lbC0000F2
	ADDQ.W	#4,D2
lbC0000F2	DBRA	D0,lbC0000EC
	ADDQ.W	#2,D2
	ADDA.W	D2,A0
	DBRA	D4,lbC0000CC
	MOVE.L	(SP)+,D0
	MOVEA.L	A0,A1
	ADDA.L	D0,A0
	MOVE.W	$10(A3),(A4)
	ADDA.L	D1,A4
	CLR.W	$1A(A3)
	SUBQ.W	#1,$10(A3)
	MOVEQ	#0,D2
	MOVE.W	#$4000,D4
	MOVE.W	#$4000,D5
	MOVE.L	-(A0),D0
lbC00011E	MOVE.W	-(A1),D1
	BPL.S	lbC000124
	MOVEQ	#0,D1
lbC000124	ADDQ.W	#8,D1
	SUBA.W	D1,A1
	MOVE.L	A1,-(SP)
	MOVEM.L	D0-D7,-(SP)
	MOVE.L	A1,-(SP)
	MOVE.W	(A1),D1
	MOVE.W	2(A1),D2
	MOVE.W	D1,D3
	ADDI.W	#15,D3
	LSR.W	#4,D3
	MULU.W	D2,D3
	ADD.W	D3,D3
	EXT.L	D3
	MOVE.L	D3,8(A3)
	MOVE.L	4(A1),D7
	MOVE.L	D7,D6
	BSR.W	lbC000252
	MOVE.W	D7,$1C(A3)
	MOVEA.L	A4,A1
	MOVE.W	$1C(A3),D4
	MOVE.L	8(A3),D5
	MULU.W	D5,D4
	SUBA.L	D4,A1
	MOVEA.L	A1,A4
	ADDA.L	8(A3),A4
	MOVE.L	(SP)+,D0
	MOVEM.L	A1/A4,-(SP)
	MOVEA.L	D0,A4
	ADDQ.W	#8,A4
	MOVE.L	D6,D0
	SWAP	D0
	LSR.W	#8,D0
	MOVE.W	D0,-(SP)
	ANDI.W	#3,D0
	BEQ.S	lbC00018E
	CMPI.W	#3,D0
	BEQ.S	lbC00018C
	ADD.W	D0,D0
	BRA.S	lbC00018E

lbC00018C	MOVEQ	#0,D0
lbC00018E	MOVE.W	D0,$1E(A3)
		MOVE.W	(SP)+,D0
		LSR.W	#2,D0
		MOVE.W	#6,-(SP)
lbC00019A	LSR.W	#1,D0
	BCC.S	lbC0001A2
	ADDQ.W	#4,$1E(A3)
lbC0001A2	SUBQ.W	#1,(SP)
	BNE.S	lbC00019A
	ADDQ.W	#2,SP
	MOVE.W	$1E(A3),D0
	ADDA.W	D0,A4
	TST.W	D0
	BEQ.S	lbC0001B8
lbC0001B2	MOVE.W	-(A4),-(A1)
	SUBQ.W	#2,D0
	BNE.S	lbC0001B2
lbC0001B8	MOVE.L	D6,-(A1)
	MOVE.W	D3,-(A1)
	MOVE.W	D2,-(A1)
	MOVE.W	D1,-(A1)
	MOVEA.L	(A3),A4
	MOVE.W	$18(A3),D4
	SUB.W	$1A(A3),D4
	SUBQ.W	#1,D4
	LSL.W	#2,D4
	MOVE.L	A1,D5
	SUB.L	A4,D5
	MOVE.L	D5,2(A4,D4.W)
	MOVEM.L	(SP)+,A1/A4
	MOVEM.L	(SP)+,D0-D7
	MOVE.W	$1C(A3),D7
	BNE.S	lbC0001EA
	MOVEA.L	A1,A4
	BRA.S	lbC00022C

lbC0001EA	ADD.W	D7,D7
	ADD.W	D7,D7
	LEA	lbW000498(PC),A6
	ADDA.L	(A6,D7.W),A6
lbC0001F6	MOVEQ	#4,D1
	BSR.W	lbC0003A0
	ADD.W	D7,D7
	ADD.W	D7,D7
	MOVE.L	A1,-(SP)
	LEA	lbL000360(PC),A1
	ADDA.L	(A1,D7.W),A1
	JSR	(A1)
	MOVEA.L	(SP)+,A1
lbC00020E	CMPA.L	A4,A1
	BEQ.S	lbC00022C
	CMP.W	#$10,D2
	BCS.S	lbC0001F6
	SUBI.W	#$10,D5
	ANDI.W	#$3FF0,D5
	LEA	(A2,D5.W),A5
	SUBI.W	#$10,D2
	JSR	(A6)
	BRA.S	lbC00020E

lbC00022C	MOVE.W	$1E(A3),D1
	SUBA.W	D1,A4
	SUBA.W	#10,A4
	MOVEA.L	(SP)+,A1
	ADDQ.W	#1,$1A(A3)
	MOVE.W	$1A(A3),D1
	CMP.W	$18(A3),D1
	BNE.W	lbC00011E
	MOVE.L	4(A3),D0
	MOVEM.L	(SP)+,D1-D7/A0-A6
	RTS

lbC000252	MOVEM.L	D0-D6/A2,-(SP)
	MOVEQ	#1,D2
	MOVE.L	D7,D1
	CLR.W	D1
	ROL.L	#8,D1
	MOVE.W	D1,D3
	LSR.W	#3,D1
	ANDI.W	#7,D3
	BEQ.S	lbC00026A
	SUBQ.W	#1,D2
lbC00026A	MOVEQ	#-1,D0
	MOVEQ	#5,D6
lbC00026E	MOVE.W	D7,D4
	ANDI.W	#15,D4
	CMP.W	#7,D4
	BPL.S	lbC000286
	CMP.W	D0,D4
	BLE.S	lbC000286
	MOVE.W	D4,D0
	LSR.W	#1,D1
	BCS.S	lbC000286
	ADDQ.W	#1,D2
lbC000286	LSR.L	#4,D7
	DBRA	D6,lbC00026E
	MOVEQ	#0,D7
	MOVE.W	D2,D7
	MOVEM.L	(SP)+,D0-D6/A2
	RTS

D_SCSP_2
	movem.l	D1-D7/A0-A6,-(SP)
	cmp.w	#'SC',(A0)
	beq.b	lbC00029C

lbC000296	CLR.W	$16(A3)
	BRA.S	lbC0002A2

lbC00029C	MOVE.W	#1,$16(A3)
lbC0002A2
;	MOVEA.L	D1,A5
	MOVEA.L	A1,A4
	ADDQ.W	#2,A0
	MOVE.W	(A0)+,$10(A3)
	MOVE.L	(A0)+,8(A3)
	MOVE.W	$10(A3),D0
	ADD.W	D0,D0
	LEA	lbW00006A(PC),A1
	MOVE.W	0(A1,D0.W),$14(A3)
	LEA	lbL000078(PC),A1
	MOVE.W	0(A1,D0.W),$12(A3)
	MOVE.L	(A0)+,D0
	TST.W	$16(A3)
	BEQ.S	lbC0002E2
	MOVEQ	#0,D1
	MOVE.W	$10(A3),D2
	BSET	D2,D1
	SUBQ.W	#1,D1
lbC0002DC	MOVE.W	(A0)+,(A5)+
	DBRA	D1,lbC0002DC
lbC0002E2	ADDA.L	D0,A0
	CLR.L	4(A3)
	MOVEA.L	A4,A1
	ADDA.L	8(A3),A4
	MOVE.W	$10(A3),D7
	MOVEQ	#0,D0
lbC0002F4	ADD.L	8(A3),D0
	SUBQ.W	#1,D7
	BNE.S	lbC0002F4
	ADD.L	D0,4(A3)
	SUBQ.W	#1,$10(A3)
	MOVE.W	$10(A3),D7
	ADDQ.W	#1,D7
	ADD.W	D7,D7
	ADD.W	D7,D7
	LEA	lbW000498(PC),A6
	ADDA.L	0(A6,D7.W),A6
	MOVEQ	#0,D2
	MOVE.W	#$4000,D4
	MOVE.W	#$4000,D5
	MOVE.L	-(A0),D0
lbC000322	MOVEQ	#4,D1
	BSR.S	lbC0003A0
	ADD.W	D7,D7
	ADD.W	D7,D7
	MOVE.L	A1,-(SP)
	LEA	lbL000360(PC),A1
	ADDA.L	0(A1,D7.W),A1
	JSR	(A1)
	MOVEA.L	(SP)+,A1
lbC000338	CMPA.L	A4,A1
	BEQ.S	lbC000356
	CMP.W	#$10,D2
	BCS.S	lbC000322
	SUBI.W	#$10,D5
	ANDI.W	#$3FF0,D5
	LEA	0(A2,D5.W),A5
	SUBI.W	#$10,D2
	JSR	(A6)
	BRA.S	lbC000338

lbC000356	MOVEM.L	(SP)+,D1-D7/A0-A6
	MOVE.L	4(A3),D0
	RTS

lbL000360	dc.l	Label_1-lbL000360
	dc.l	Label_2-lbL000360
	dc.l	Label_3-lbL000360
	dc.l	Label_4-lbL000360
	dc.l	Label_5-lbL000360
	dc.l	Label_6-lbL000360
	dc.l	Label_7-lbL000360
	dc.l	Label_8-lbL000360
	dc.l	Label_9-lbL000360
	dc.l	Label_10-lbL000360
	dc.l	Label_11-lbL000360
	dc.l	Label_12-lbL000360
	dc.l	Label_13-lbL000360
	dc.l	Label_14-lbL000360
	dc.l	Label_15-lbL000360
	dc.l	Label_16-lbL000360

lbC0003A0	SUBQ.W	#1,D1
	MOVEQ	#0,D7
lbC0003A4	ADD.L	D0,D0
	BNE.S	lbC0003B0
	MOVE.L	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.L	D0,D0
lbC0003B0	ADDX.W	D7,D7
	DBRA	D1,lbC0003A4
	RTS

Label_1
	MOVEQ	#0,D6
	BRA.S	lbC00040A
Label_2
	MOVEQ	#1,D6
	BRA.S	lbC00040A
Label_3
	MOVEQ	#2,D6
	BRA.S	lbC00040A
Label_4
	MOVEQ	#3,D6
	BRA.S	lbC00040A
Label_5
	MOVEQ	#4,D6
	BRA.S	lbC00040A
Label_6
	MOVEQ	#5,D6
	BRA.S	lbC00040A
Label_7
	MOVEQ	#1,D1
	BSR.S	lbC0003A0
	MOVEQ	#6,D6
	ADD.W	D7,D6
	BRA.S	lbC00040A
Label_8
	MOVEQ	#1,D1
	BSR.S	lbC0003A0
	MOVEQ	#8,D6
	ADD.W	D7,D6
	BRA.S	lbC00040A
Label_9
	MOVEQ	#2,D1
	BSR.S	lbC0003A0
	MOVEQ	#10,D6
	ADD.W	D7,D6
	BRA.S	lbC00040A
Label_10
	MOVEQ	#3,D1
	BSR.S	lbC0003A0
	MOVEQ	#14,D6
	ADD.W	D7,D6
	BRA.S	lbC00040A
Label_11
	MOVEQ	#5,D1
	BSR.S	lbC0003A0
	MOVEQ	#$16,D6
	ADD.W	D7,D6
	BRA.S	lbC00040A
Label_12
	MOVEQ	#8,D1
	BSR.S	lbC0003A0
	MOVEQ	#$36,D6
	ADD.W	D7,D6
lbC00040A	ADD.W	$14(A3),D6
	MOVEQ	#1,D1
	BSR.S	lbC0003A0
	MOVEQ	#14,D1
	TST.W	D7
	BNE.S	lbC00041A
	MOVEQ	#9,D1
lbC00041A	BSR.S	lbC0003A0
	ADD.W	D4,D7
	MOVE.W	D7,D3
	ANDI.W	#$3FFF,D3
	SUBQ.W	#1,D6
lbC000426	SUBQ.W	#1,D3
	ANDI.W	#$3FFF,D3
	MOVE.B	0(A2,D3.W),D7
	SUBQ.W	#1,D4
	ANDI.W	#$3FFF,D4
	MOVE.B	D7,0(A2,D4.W)
	ADDQ.L	#1,D2
	DBRA	D6,lbC000426
	RTS
Label_13
	MOVEQ	#4,D1
	BSR.W	lbC0003A0
	MOVE.W	D7,D6
	BRA.S	lbC000456
Label_14
	MOVEQ	#8,D1
	BSR.W	lbC0003A0
	MOVEQ	#$10,D6
	ADD.W	D7,D6
lbC000456	ADD.W	$12(A3),D6
	BSR.W	lbC000050
	SUBQ.W	#1,D6
lbC000460	SUBQ.W	#1,D4
	ANDI.W	#$3FFF,D4
	MOVE.B	D7,0(A2,D4.W)
	ADDQ.L	#1,D2
	DBRA	D6,lbC000460
	RTS
Label_15
	MOVEQ	#1,D6
	BRA.S	lbC000480
Label_16
	MOVEQ	#3,D1
	BSR.W	lbC0003A0
	MOVEQ	#2,D6
	ADD.W	D7,D6
lbC000480	SUBQ.W	#1,D6
lbC000482	BSR.W	lbC000050
	SUBQ.W	#1,D4
	ANDI.W	#$3FFF,D4
	MOVE.B	D7,0(A2,D4.W)
	ADDQ.L	#1,D2
	DBRA	D6,lbC000482
	RTS

lbW000498
	dc.l	Label_23-lbW000498
	dc.l	Label_22-lbW000498
	dc.l	Label_21-lbW000498
	dc.l	Label_20-lbW000498
	dc.l	Label_19-lbW000498
	dc.l	Label_18-lbW000498
	dc.l	Label_17-lbW000498

Label_17
	MOVEM.L	D0/D2/D4/D5,-(SP)
	MOVEQ	#15,D0
lbC0004BA	MOVE.B	(A5)+,D1
	ADD.B	D1,D1
	ADDX.W	D2,D2
	ADD.B	D1,D1
	ADDX.W	D3,D3
	ADD.B	D1,D1
	ADDX.W	D4,D4
	ADD.B	D1,D1
	ADDX.W	D5,D5
	ADD.B	D1,D1
	ADDX.W	D6,D6
	ADD.B	D1,D1
	ADDX.W	D7,D7
	DBRA	D0,lbC0004BA
	MOVE.L	8(A3),D1
	MOVE.W	D2,-(A4)
	ADDA.L	D1,A4
	MOVE.W	D3,(A4)
	ADDA.L	D1,A4
	MOVE.W	D4,(A4)
	ADDA.L	D1,A4
	MOVE.W	D5,(A4)
	ADDA.L	D1,A4
	MOVE.W	D6,(A4)
	ADDA.L	D1,A4
	MOVE.W	D7,(A4)
	SUBA.L	D1,A4
	SUBA.L	D1,A4
	SUBA.L	D1,A4
	SUBA.L	D1,A4
	SUBA.L	D1,A4
	MOVEM.L	(SP)+,D0/D2/D4/D5
	RTS

Label_18
	MOVEM.L	D0/D2/D4/D5,-(SP)
	MOVEQ	#15,D0
lbC000508	MOVE.B	(A5)+,D1
	ADD.B	D1,D1
	ADDX.W	D2,D2
	ADD.B	D1,D1
	ADDX.W	D3,D3
	ADD.B	D1,D1
	ADDX.W	D4,D4
	ADD.B	D1,D1
	ADDX.W	D5,D5
	ADD.B	D1,D1
	ADDX.W	D6,D6
	DBRA	D0,lbC000508
	MOVE.L	8(A3),D1
	MOVE.W	D2,-(A4)
	ADDA.L	D1,A4
	MOVE.W	D3,(A4)
	ADDA.L	D1,A4
	MOVE.W	D4,(A4)
	ADDA.L	D1,A4
	MOVE.W	D5,(A4)
	ADDA.L	D1,A4
	MOVE.W	D6,(A4)
	SUBA.L	D1,A4
	SUBA.L	D1,A4
	SUBA.L	D1,A4
	SUBA.L	D1,A4
	MOVEM.L	(SP)+,D0/D2/D4/D5
	RTS

Label_19
	MOVEM.L	D0/D2/D4/D5,-(SP)
	MOVEQ	#15,D0
lbC00054C	MOVE.B	(A5)+,D1
	ADD.B	D1,D1
	ADDX.W	D2,D2
	ADD.B	D1,D1
	ADDX.W	D3,D3
	ADD.B	D1,D1
	ADDX.W	D4,D4
	ADD.B	D1,D1
	ADDX.W	D5,D5
	DBRA	D0,lbC00054C
	MOVE.L	8(A3),D1
	MOVE.W	D2,-(A4)
	ADDA.L	D1,A4
	MOVE.W	D3,(A4)
	ADDA.L	D1,A4
	MOVE.W	D4,(A4)
	ADDA.L	D1,A4
	MOVE.W	D5,(A4)
	SUBA.L	D1,A4
	SUBA.L	D1,A4
	SUBA.L	D1,A4
	MOVEM.L	(SP)+,D0/D2/D4/D5
	RTS

Label_20
	MOVEM.L	D0/D2/D4,-(SP)
	MOVEQ	#15,D0
lbC000586	MOVE.B	(A5)+,D1
	ADD.B	D1,D1
	ADDX.W	D2,D2
	ADD.B	D1,D1
	ADDX.W	D3,D3
	ADD.B	D1,D1
	ADDX.W	D4,D4
	DBRA	D0,lbC000586
	MOVE.L	8(A3),D1
	MOVE.W	D2,-(A4)
	ADDA.L	D1,A4
	MOVE.W	D3,(A4)
	ADDA.L	D1,A4
	MOVE.W	D4,(A4)
	SUBA.L	D1,A4
	SUBA.L	D1,A4
	MOVEM.L	(SP)+,D0/D2/D4
	RTS

Label_21
	MOVEM.L	D0/D2/D4,-(SP)
	MOVEQ	#15,D0
lbC0005B6	MOVE.B	(A5)+,D1
	ADD.B	D1,D1
	ADDX.W	D2,D2
	ADD.B	D1,D1
	ADDX.W	D3,D3
	DBRA	D0,lbC0005B6
	MOVE.L	8(A3),D1
	MOVE.W	D2,-(A4)
	ADDA.L	D1,A4
	MOVE.W	D3,(A4)
	SUBA.L	D1,A4
	MOVEM.L	(SP)+,D0/D2/D4
	RTS

Label_22
	MOVEM.L	D0/D2/D4,-(SP)
	MOVEQ	#15,D0
lbC0005DC	MOVE.B	(A5)+,D1
	ADD.B	D1,D1
	ADDX.W	D2,D2
	DBRA	D0,lbC0005DC
	MOVE.L	8(A3),D1
	MOVE.W	D2,-(A4)
	MOVEM.L	(SP)+,D0/D2/D4
Label_23
	RTS

D_SFSQ
	movem.l	D1-D7/A0-A6,-(SP)
	cmp.w	#'SQ',(A0)
	beq.w	lbC000746

lbC0005F2	MOVEA.L	A1,A4
	MOVEA.L	A0,A2
	LEA	10(A2),A1
	MOVEA.L	A4,A5
	MOVE.L	2(A0),D0
	MOVEA.L	D0,A6
	ADDA.L	D0,A4
	MOVE.L	6(A0),D2
	ADDA.L	D2,A0
	MOVE.L	D2,D7
	ADDQ.L	#3,D7
	LSR.L	#2,D7
	SUBQ.L	#1,D7
lbC000612	MOVE.L	(A1)+,(A2)+
	DBRA	D7,lbC000612
	MOVE.B	-(A0),D0
lbC00061A	ADD.B	D0,D0
	BNE.S	lbC000626
	MOVE.B	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.B	D0,D0
lbC000626	BCC.W	lbC0006CC
	ADD.B	D0,D0
	BNE.S	lbC000636
	MOVE.B	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.B	D0,D0
lbC000636	BCC.S	lbC000698
	ADD.B	D0,D0
	BNE.S	lbC000644
	MOVE.B	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.B	D0,D0
lbC000644	BCC.S	lbC00069E
	ADD.B	D0,D0
	BNE.S	lbC000652
	MOVE.B	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.B	D0,D0
lbC000652	BCC.S	lbC0006A4
	ADD.B	D0,D0
	BNE.S	lbC000660
	MOVE.B	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.B	D0,D0
lbC000660	BCC.S	lbC000666
	MOVEQ	#9,D4
	BRA.S	lbC000668

lbC000666	MOVEQ	#14,D4
lbC000668	MOVEQ	#1,D2
	MOVEQ	#1,D3
	MOVEQ	#5,D5
lbC00066E	MOVE.W	D2,D1
	SUBQ.W	#1,D1
	MOVEQ	#0,D7
lbC000674	ADD.B	D0,D0
	BNE.S	lbC000680
	MOVE.B	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.B	D0,D0
lbC000680	ADDX.W	D7,D7
	DBRA	D1,lbC000674
	ADD.W	D7,D5
	CMP.W	D3,D7
	BNE.S	lbC000694
	ADDQ.W	#1,D2
	ADD.W	D3,D3
	ADDQ.W	#1,D3
	BRA.S	lbC00066E

lbC000694	MOVE.W	D4,D1
	BRA.S	lbC0006A8

lbC000698	MOVEQ	#9,D1
	MOVEQ	#2,D5
	BRA.S	lbC0006A8

lbC00069E	MOVEQ	#10,D1
	MOVEQ	#3,D5
	BRA.S	lbC0006A8

lbC0006A4	MOVEQ	#12,D1
	MOVEQ	#4,D5
lbC0006A8	SUBQ.W	#1,D1
	MOVEQ	#0,D7
lbC0006AC	ADD.B	D0,D0
	BNE.S	lbC0006B8
	MOVE.B	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.B	D0,D0
lbC0006B8	ADDX.W	D7,D7
	DBRA	D1,lbC0006AC
	LEA	0(A4,D7.W),A2
	SUBQ.W	#1,D5
lbC0006C4	MOVE.B	-(A2),-(A4)
	DBRA	D5,lbC0006C4
	BRA.S	lbC000700

lbC0006CC	MOVEQ	#1,D2
	MOVEQ	#1,D3
	MOVEQ	#1,D6
lbC0006D2	MOVE.W	D2,D1
	SUBQ.W	#1,D1
	MOVEQ	#0,D7
lbC0006D8	ADD.B	D0,D0
	BNE.S	lbC0006E4
	MOVE.B	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.B	D0,D0
lbC0006E4	ADDX.W	D7,D7
	DBRA	D1,lbC0006D8
	ADD.W	D7,D6
	CMP.W	D3,D7
	BNE.S	lbC0006F8
	ADDQ.W	#1,D2
	ADD.W	D3,D3
	ADDQ.W	#1,D3
	BRA.S	lbC0006D2

lbC0006F8	SUBQ.W	#1,D6
lbC0006FA	MOVE.B	-(A0),-(A4)
	DBRA	D6,lbC0006FA
lbC000700	CMPA.L	A5,A4
	BNE.W	lbC00061A
	MOVE.L	A6,D0
	MOVEM.L	(SP)+,D1-D7/A0-A6
	RTS

lbC00072E	SUBQ.W	#1,D1
	MOVEQ	#0,D7
lbC000732	ADD.L	D0,D0
	BNE.S	lbC00073E
	MOVE.L	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.L	D0,D0
lbC00073E	ADDX.W	D7,D7
	DBRA	D1,lbC000732
	RTS

lbC000746	MOVEA.L	A1,A2
	ADDQ.l	#2,A0
	MOVE.L	(A0)+,D0
	MOVE.L	D0,-(SP)
	ADDQ.l	#7,D0
	ANDI.L	#$FFFFFFF8,D0
	ADDA.L	D0,A1
	MOVE.L	(A0)+,D0
	MOVE.L	D0,D1
	ANDI.L	#$FFFFFF,D0
	LSL.L	#2,D0
	ADDA.L	D0,A0
	MOVE.L	-(A0),D0
	LSR.L	#8,D1
	SWAP	D1
	MOVE.W	D1,-(SP)
	MOVEQ	#3,D1
	BSR.S	lbC00072E
	MOVE.W	D7,D6
	ADDQ.W	#1,D6
lbC000776	MOVE.W	#7,D5
lbC00077A	MOVE.W	D6,D1
	BSR.S	lbC00072E
	MOVE.B	D7,-(A1)
	DBRA	D5,lbC00077A
	MOVEQ	#0,D4
lbC000786	ADD.L	D0,D0
	BNE.S	lbC000792
	MOVE.L	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.L	D0,D0
lbC000792	BCC.S	lbC000798
	ADDQ.W	#1,D4
	BRA.S	lbC000786

lbC000798	ADDQ.W	#1,D4
	LSR.W	#1,D4
	BCS.S	lbC0007A0
	NEG.W	D4
lbC0007A0	SUB.W	D4,D6
	CMPA.L	A2,A1
	BNE.S	lbC000776
	MOVE.W	(SP)+,D1
	MOVE.L	(SP),D0
	CMP.W	#1,D1
	BEQ.S	lbC0007F8
	CMP.W	#2,D1
	BEQ.S	lbC0007BC
	CMP.W	#3,D1
	BEQ.S	lbC0007D8
lbC0007BC	MOVEQ	#0,D4
lbC0007BE	MOVE.B	(A2),D1
	LSR.B	#1,D1
	BCC.S	lbC0007C8
	NEG.B	D1
	SUBQ.B	#1,D1
lbC0007C8	ADD.B	D1,D4
	MOVE.B	D4,(A2)+
	SUBQ.L	#1,D0
	BNE.S	lbC0007BE
	MOVE.L	(SP)+,D0
	MOVEM.L	(SP)+,D1-D7/A0-A6
	RTS

lbC0007D8	MOVEQ	#0,D4
	MOVEQ	#0,D5
lbC0007DC	MOVE.B	(A2),D1
	LSR.B	#1,D1
	BCC.S	lbC0007E6
	NEG.B	D1
	SUBQ.B	#1,D1
lbC0007E6	ADD.B	D1,D4
	ADD.B	D4,D5
	MOVE.B	D5,(A2)+
	SUBQ.L	#1,D0
	BNE.S	lbC0007DC
	MOVE.L	(SP)+,D0
	MOVEM.L	(SP)+,D1-D7/A0-A6
	RTS

lbC0007F8	MOVEQ	#0,D4
lbC0007FA	MOVE.B	(A2),D1
	LSR.B	#1,D1
	BCC.S	lbC000804
	NEG.B	D1
	SUBQ.B	#1,D1
lbC000804	MOVE.B	D1,(A2)+
	SUBQ.L	#1,D0
	BNE.S	lbC0007FA
	MOVE.L	(SP)+,D0
	MOVEM.L	(SP)+,D1-D7/A0-A6
	RTS

; Modified SA decruncher from game "Kid Chaos" (c) 1993 by Magnetic Fields

D_SA_2
	movem.l	D1-D7/A0-A6,-(SP)

	MOVEA.L	A1,A4
	MOVE.L	A1,(A3)
	MOVE.W	2(A0),$10(A3)
	MOVE.W	4(A0),$18(A3)
	MOVE.L	6(A0),D1
	MOVE.L	D1,4(A3)
	MOVE.W	$10(A3),D0
	ADD.W	D0,D0
	LEA	lbW00006A(PC),A1
	MOVE.W	0(A1,D0.W),$14(A3)
	LEA	lbL000078(PC),A1
	MOVE.W	0(A1,D0.W),$12(A3)
	MOVE.L	10(A0),D0
	ADDA.W	#14,A0
	MOVE.W	$18(A3),D2
	ASL.W	#3,D2
	ADDA.W	D2,A0
	MOVEA.L	A0,A1
	ADDA.L	D0,A0
	MOVE.W	$10(A3),(A4)
	ADDA.L	D1,A4
	CLR.W	$1A(A3)
	SUBQ.W	#1,$10(A3)
	MOVEQ	#0,D2
	MOVE.W	#$4000,D4
	MOVE.W	#$4000,D5
	MOVE.L	-(A0),D0
abC001A36	SUBQ.L	#8,A1
	MOVE.L	A1,-(SP)
	MOVEM.L	D0-D7,-(SP)
	MOVE.W	(A1),D1
	MOVE.W	2(A1),D2
	MOVE.W	D1,D3
	ADDI.W	#15,D3
	LSR.W	#4,D3
	MULU.W	D2,D3
	ADD.W	D3,D3
	EXT.L	D3
	MOVE.L	D3,8(A3)
	MOVE.L	4(A1),D7
	MOVE.L	D7,D6
	BSR.W	abC001B0A
	MOVE.W	D7,$1C(A3)
	MOVEA.L	A4,A1
	MOVE.W	$1C(A3),D4
	MOVE.L	8(A3),D5
	MULU.W	D5,D4
	SUBA.L	D4,A1
	MOVEA.L	A1,A4
	ADDA.L	8(A3),A4
	SUBA.W	#10,A1
	MOVE.L	A4,-(SP)
	MOVEA.L	(A3),A4
	MOVE.W	$18(A3),D4
	SUB.W	$1A(A3),D4
	SUBQ.W	#1,D4
	LSL.W	#2,D4
	MOVE.L	A1,D5
	SUB.L	A4,D5
	MOVE.L	D5,2(A4,D4.W)
	MOVEA.L	(SP)+,A4
	MOVE.W	D1,(A1)+
	MOVE.W	D2,(A1)+
	MOVE.W	D3,(A1)+
	MOVE.L	D6,(A1)+
	MOVEM.L	(SP)+,D0-D7
	MOVE.W	$1C(A3),D7
	ADD.W	D7,D7
	ADD.W	D7,D7
	LEA	lbW000498(PC),A6
	ADDA.L	0(A6,D7.W),A6
abC001AB4	MOVEQ	#4,D1
	BSR.W	lbC0003A0
	ADD.W	D7,D7
	ADD.W	D7,D7
	MOVE.L	A1,-(SP)
	LEA	lbL000360(PC),A1
	ADDA.L	0(A1,D7.W),A1
	JSR	(A1)
	MOVEA.L	(SP)+,A1
abC001ACC	CMPA.L	A4,A1
	BEQ.S	abC001AEA
	CMP.W	#$10,D2
	BCS.S	abC001AB4
	SUBI.W	#$10,D5
	ANDI.W	#$3FF0,D5
	LEA	0(A2,D5.W),A5
	SUBI.W	#$10,D2
	JSR	(A6)
	BRA.S	abC001ACC

abC001AEA	SUBA.W	#10,A4
	MOVEA.L	(SP)+,A1
	ADDQ.W	#1,$1A(A3)
	MOVE.W	$1A(A3),D1
	CMP.W	$18(A3),D1
	BNE.W	abC001A36
	MOVEM.L	(SP)+,D1-D7/A0-A6
	MOVE.L	4(A3),D0
	RTS

abC001B0A	MOVEM.L	D0-D6/A2,-(SP)
	MOVE.W	$10(A3),D6
	MOVEQ	#-1,D2
abC001B14	MOVE.L	D7,D0
	ANDI.W	#15,D0
	CMP.W	#7,D0
	BPL.S	abC001B26
	CMP.W	D2,D0
	BMI.S	abC001B26
	MOVE.W	D0,D2
abC001B26	LSR.L	#4,D7
	SUBQ.W	#1,D6
	BNE.S	abC001B14
	ADDQ.W	#1,D2
	ADDQ.W	#1,D2
	MOVE.W	D2,D7
	MOVEM.L	(SP)+,D0-D6/A2
	RTS

; Decruncher from game "Lotus 2" (c) 1991 by Magnetic Fields

;	MOVEA.L	#lbL06439C,A2
;	MOVE.L	#lbL06839C,D1
;	lea	Extra,A3
;	CLR.W	$7FC-$7FC(A3)
;	MOVE.L	D0,$828-$7FC(A3)
;	MOVEA.L	D1,A5
;	MOVE.W	(A0),D0
;	CMPI.W	#'SA',D0
;	BEQ.S	nlC000736
;	CMPI.W	#'SP',D0
;	BEQ.S	nlC000736
;	CMPI.W	#'SC',D0
;	BEQ.S	nlC00073C
;	CMPI.W	#$5346,D0
;	BEQ.L	nlC000A66
;	MOVE.L	$828-$7FC(A3),D7
;	BEQ.S	nlC00070E
;nlC000708	MOVE.B	(A0)+,(A1)+
;	SUBQ.L	#1,D7
;	BNE.S	nlC000708
;nlC00070E	MOVE.L	$828-$7FC(A3),D0
;	RTS

nlC000714	MOVE.W	$820-$7FC(A3),D1
	MOVEQ	#0,D7
nlC00071A	ADD.L	D0,D0
	BNE.S	nlC000726
	MOVE.L	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.L	D0,D0
nlC000726	ROXR.B	#1,D7
	DBRA	D1,nlC00071A
	RTS

nlW00072E	dc.w	$705
	dc.w	$404
	dc.w	$404
	dc.w	$303

D_SCSP_1
	cmp.w	#'SC',(A0)
	beq.b	nlC00073C
D_SA_1
nlC000736	CLR.W	$822-$7FC(A3)
	BRA.S	nlC000742

nlC00073C	MOVE.W	#1,$822-$7FC(A3)
nlC000742	MOVEM.L	D1-D7/A0-A6,-(SP)
;	MOVEA.L	D1,A5
	MOVEA.L	A1,A4
	MOVEQ	#0,D7
	CMPI.W	#'SA',(A0)+
	BNE.S	nlC000754
	MOVEQ	#-1,D7
nlC000754	MOVE.W	(A0)+,$820-$7FC(A3)
;	MOVE.L	(A0)+,$82C-$7FC(A3)

	move.l	(A0)+,8(A3)

	MOVE.W	$820-$7FC(A3),D0
	LEA	nlW00072E(PC),A1
	CLR.B	$824-$7FC(A3)
	CLR.B	$826-$7FC(A3)
	MOVE.B	-3(A1,D0.W),$825-$7FC(A3)
	MOVE.B	1(A1,D0.W),$827-$7FC(A3)
	MOVE.L	(A0)+,D0
	TST.W	$822-$7FC(A3)
	BEQ.S	nlC000790
	MOVEQ	#0,D1
	MOVE.W	$820-$7FC(A3),D2
	BSET	D2,D1
	SUBQ.W	#1,D1
nlC00078A	MOVE.W	(A0)+,(A5)+
	DBRA	D1,nlC00078A
nlC000790	ADDA.L	D0,A0
	CLR.L	$830-$7FC(A3)
	TST.L	D7
	BEQ.S	nlC0007AC
	MOVEA.L	A0,A1
	MOVE.L	8(A1),D0
	ADDQ.L	#8,D0
	MOVE.L	D0,$830-$7FC(A3)
nlC0007A6	MOVE.B	(A1)+,(A4)+
	SUBQ.L	#1,D0
	BNE.S	nlC0007A6
nlC0007AC	MOVEA.L	A4,A1
;	ADDA.L	$82C-$7FC(A3),A4

	add.l	8(A3),A4

	MOVE.W	$820-$7FC(A3),D7
	MOVEQ	#0,D0
nlC0007B8
;	ADD.L	$82C-$7FC(A3),D0

	add.l	8(A3),D0

	SUBQ.W	#1,D7
	BNE.S	nlC0007B8
	ADD.L	D0,$830-$7FC(A3)
	SUBQ.W	#1,$820-$7FC(A3)
	MOVE.W	$820-$7FC(A3),D7
	ADD.W	D7,D7
	ADD.W	D7,D7
	LEA	nlC000952(PC),A6
	ADDA.L	0(A6,D7.W),A6
	ADDQ.L	#8,A6
	MOVEQ	#0,D2
	MOVE.W	#$4000,D4
	MOVE.W	#$4000,D5
	MOVE.L	-(A0),D0
nlC0007E6
;	TST.W	$7FC-$7FC(A3)
;	BNE.L	nlC000BA0
	MOVEQ	#4,D1
	BSR.S	nlC00086C
	ADD.W	D7,D7
	ADD.W	D7,D7
	MOVE.L	A1,-(SP)
	LEA	nlL00082C(PC),A1
	ADDA.L	0(A1,D7.W),A1
	JSR	(A1)
	MOVEA.L	(SP)+,A1
nlC000804	CMPA.L	A4,A1
	BEQ.S	nlC000822
	CMPI.W	#$10,D2
	BCS.S	nlC0007E6
	SUBI.W	#$10,D5
	ANDI.W	#$3FF0,D5
	LEA	0(A2,D5.W),A5
	SUBI.W	#$10,D2
	JSR	(A6)
	BRA.S	nlC000804

nlC000822	MOVEM.L	(SP)+,D1-D7/A0-A6
	MOVE.L	$830-$7FC(A3),D0
	RTS

nlL00082C	dc.l	Label24-nlL00082C
	dc.l	Label25-nlL00082C
	dc.l	Label26-nlL00082C
	dc.l	Label27-nlL00082C
	dc.l	Label28-nlL00082C
	dc.l	Label29-nlL00082C
	dc.l	Label30-nlL00082C
	dc.l	Label31-nlL00082C
	dc.l	Label32-nlL00082C
	dc.l	Label33-nlL00082C
	dc.l	Label34-nlL00082C
	dc.l	Label35-nlL00082C
	dc.l	Label36-nlL00082C
	dc.l	Label37-nlL00082C
	dc.l	Label38-nlL00082C
	dc.l	Label39-nlL00082C

nlC00086C	SUBQ.W	#1,D1
	MOVEQ	#0,D7
nlC000870	ADD.L	D0,D0
	BNE.S	nlC00087C
	MOVE.L	-(A0),D0
	MOVE.W	#$FFFF,CCR
	ADDX.L	D0,D0
nlC00087C	ADDX.W	D7,D7
	DBRA	D1,nlC000870
	RTS
Label24
	MOVEQ	#0,D6
	BRA.S	nlC0008D6
Label25
	MOVEQ	#1,D6
	BRA.S	nlC0008D6
Label26
	MOVEQ	#2,D6
	BRA.S	nlC0008D6
Label27
	MOVEQ	#3,D6
	BRA.S	nlC0008D6
Label28
	MOVEQ	#4,D6
	BRA.S	nlC0008D6
Label29
	MOVEQ	#5,D6
	BRA.S	nlC0008D6
Label30
	MOVEQ	#1,D1
	BSR.S	nlC00086C
	MOVEQ	#6,D6
	ADD.W	D7,D6
	BRA.S	nlC0008D6
Label31
	MOVEQ	#1,D1
	BSR.S	nlC00086C
	MOVEQ	#8,D6
	ADD.W	D7,D6
	BRA.S	nlC0008D6
Label32
	MOVEQ	#2,D1
	BSR.S	nlC00086C
	MOVEQ	#10,D6
	ADD.W	D7,D6
	BRA.S	nlC0008D6
Label33
	MOVEQ	#3,D1
	BSR.S	nlC00086C
	MOVEQ	#14,D6
	ADD.W	D7,D6
	BRA.S	nlC0008D6
Label34
	MOVEQ	#5,D1
	BSR.S	nlC00086C
	MOVEQ	#$16,D6
	ADD.W	D7,D6
	BRA.S	nlC0008D6
Label35
	MOVEQ	#8,D1
	BSR.S	nlC00086C
	MOVEQ	#$36,D6
	ADD.W	D7,D6
nlC0008D6	ADD.W	$824-$7FC(A3),D6
	MOVEQ	#14,D1
	BSR.S	nlC00086C
	ADD.W	D4,D7
	MOVE.W	D7,D3
	ANDI.W	#$3FFF,D3
	SUBQ.W	#1,D6
nlC0008E8	SUBQ.W	#1,D3
	ANDI.W	#$3FFF,D3
	MOVE.B	0(A2,D3.W),D7
	SUBQ.W	#1,D4
	ANDI.W	#$3FFF,D4
	MOVE.B	D7,0(A2,D4.W)
	ADDQ.L	#1,D2
	DBRA	D6,nlC0008E8
	RTS
Label36
	MOVEQ	#4,D1
	BSR.W	nlC00086C
	MOVE.W	D7,D6
	BRA.S	nlC000918
Label37
	MOVEQ	#8,D1
	BSR.W	nlC00086C
	MOVEQ	#$10,D6
	ADD.W	D7,D6
nlC000918	ADD.W	$826-$7FC(A3),D6
	BSR.W	nlC000714
	SUBQ.W	#1,D6
nlC000922	SUBQ.W	#1,D4
	ANDI.W	#$3FFF,D4
	MOVE.B	D7,0(A2,D4.W)
	ADDQ.L	#1,D2
	DBRA	D6,nlC000922
	RTS
Label38
	MOVEQ	#1,D6
	BRA.S	nlC000942
Label39
	MOVEQ	#3,D1
	BSR.W	nlC00086C
	MOVEQ	#2,D6
	ADD.W	D7,D6
nlC000942	SUBQ.W	#1,D6
nlC000944	BSR.W	nlC000714
	SUBQ.W	#1,D4
	ANDI.W	#$3FFF,D4
	MOVE.B	D7,0(A2,D4.W)
nlC000952	ADDQ.L	#1,D2
	DBRA	D6,nlC000944
	RTS
nlC00095x
;	dc.l	Label43-nlC00095x
;	dc.l	Label42-nlC00095x
;	dc.l	Label41-nlC00095x
;	dc.l	Label40-nlC00095x

	dc.l	Label_20-nlC00095x
	dc.l	Label_19-nlC00095x
	dc.l	Label_18-nlC00095x
	dc.l	Label_17-nlC00095x

;Label40
;	MOVEM.L	D0/D2/D4/D5,-(SP)
;	MOVEQ	#15,D0
;nlC000970	MOVE.B	(A5)+,D1
;	ADD.B	D1,D1
;	ADDX.W	D2,D2
;	ADD.B	D1,D1
;	ADDX.W	D3,D3
;	ADD.B	D1,D1
;	ADDX.W	D4,D4
;	ADD.B	D1,D1
;	ADDX.W	D5,D5
;	ADD.B	D1,D1
;	ADDX.W	D6,D6
;	ADD.B	D1,D1
;	ADDX.W	D7,D7
;	DBRA	D0,nlC000970
;	MOVE.L	$82C-$7FC(A3),D1
;	MOVE.W	D2,-(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D3,(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D4,(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D5,(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D6,(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D7,(A4)
;	SUBA.L	D1,A4
;	SUBA.L	D1,A4
;	SUBA.L	D1,A4
;	SUBA.L	D1,A4
;	SUBA.L	D1,A4
;	MOVEM.L	(SP)+,D0/D2/D4/D5
;	RTS

;Label41
;	MOVEM.L	D0/D2/D4/D5,-(SP)
;	MOVEQ	#15,D0
;nlC0009BE	MOVE.B	(A5)+,D1
;	ADD.B	D1,D1
;	ADDX.W	D2,D2
;	ADD.B	D1,D1
;	ADDX.W	D3,D3
;	ADD.B	D1,D1
;	ADDX.W	D4,D4
;	ADD.B	D1,D1
;	ADDX.W	D5,D5
;	ADD.B	D1,D1
;	ADDX.W	D6,D6
;	DBRA	D0,nlC0009BE
;	MOVE.L	$82C-$7FC(A3),D1
;	MOVE.W	D2,-(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D3,(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D4,(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D5,(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D6,(A4)
;	SUBA.L	D1,A4
;	SUBA.L	D1,A4
;	SUBA.L	D1,A4
;	SUBA.L	D1,A4
;	MOVEM.L	(SP)+,D0/D2/D4/D5
;	RTS

;Label42
;	MOVEM.L	D0/D2/D4/D5,-(SP)
;	MOVEQ	#15,D0
;nlC000A02	MOVE.B	(A5)+,D1
;	ADD.B	D1,D1
;	ADDX.W	D2,D2
;	ADD.B	D1,D1
;	ADDX.W	D3,D3
;	ADD.B	D1,D1
;	ADDX.W	D4,D4
;	ADD.B	D1,D1
;	ADDX.W	D5,D5
;	DBRA	D0,nlC000A02
;	MOVE.L	$82C-$7FC(A3),D1
;	MOVE.W	D2,-(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D3,(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D4,(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D5,(A4)
;	SUBA.L	D1,A4
;	SUBA.L	D1,A4
;	SUBA.L	D1,A4
;	MOVEM.L	(SP)+,D0/D2/D4/D5
;	RTS

;Label43
;	MOVEM.L	D0/D2/D4,-(SP)
;	MOVEQ	#15,D0
;nlC000A3C	MOVE.B	(A5)+,D1
;	ADD.B	D1,D1
;	ADDX.W	D2,D2
;	ADD.B	D1,D1
;	ADDX.W	D3,D3
;	ADD.B	D1,D1
;	ADDX.W	D4,D4
;	DBRA	D0,nlC000A3C
;	MOVE.L	$82C-$7FC(A3),D1
;	MOVE.W	D2,-(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D3,(A4)
;	ADDA.L	D1,A4
;	MOVE.W	D4,(A4)
;	SUBA.L	D1,A4
;	SUBA.L	D1,A4
;	MOVEM.L	(SP)+,D0/D2/D4
;	RTS

