
 move.w #$2,-(sp)
 pea fname(pc)
 move.w #$3d,-(sp)
 trap #1
 addq.l #8,sp
 move.l d0,d7

 move.l #$80000,-(sp)
 move.l #$fffff,-(sp)
 move.w d7,-(sp)
 move.w #$3f,-(sp)
 trap #1
 add.l #12,sp
 MOVE.L D0,D6

 move.w d7,-(sp)
 move.w #$3e,-(sp)
 trap #1
 addq.l #4,sp

 MOVE.L #$80000,A5
 MOVE.L #$A0000,A6

 clr.l -(sp)
 move.w #$20,-(sp)
 trap #1
 addq.l #6,sp
 move.l d0,-(sp)

 MOVE.W $FFFF8240,-(SP)

 BSR UNPACK

 MOVE.W (SP)+,$FFFF8240
 move.w #$20,-(sp)
 trap #1
 addq.l #6,sp 

 CLR.W -(SP)
 TRAP #1


fname: dc.b 'TEST.CR',00

 EVEN

* DEPACKER V3.0
*
* USAGE:
* LEA $ADDRESS OF PACKED DATA,A5
* LEA $ADDRESS TO UNPACK DATA TO,A6
* BSR DEPACK
*
* NOTE: Must save registers before executing depack if they will be
*       required later.

RESET   MOVEM.W D0-D1/D3/D5,-(A7)
	MOVEA.L A1,A2
	MOVEQ   #$00,D2
	MOVEQ   #-$02,D4
	MOVEQ   #$00,D1
	MOVE.W  #$0139,D5
OUTER	ADDQ.W  #2,D4
	CMP.W   (A2)+,D7
	BHI.S   OUTER
	MOVE.W  $00(A3,D4.W),D3
	ADDQ.W  #1,D3
	LSR.W   #1,D3
	CMP.W   -$02(A3,D2.W),D3
	BLS.S 	BIDDLE
	MOVE.W  $00(A3,D1.W),D0
	ADD.W   $02(A3,D1.W),D0
	CMP.W   D0,D3
	BLS.S	BIDDLE
BITH	MOVE.W  D0,$00(A3,D2.W)
	MOVE.W  D1,$00(A1,D2.W)
	MOVE.W  D2,$00(A0,D1.W)
	MOVE.W  D2,$02(A0,D1.W)
	ADDQ.W  #2,D2
	ADDQ.L  #4,D1
	MOVE.W  $00(A3,D1.W),D0
	ADD.W   $02(A3,D1.W),D0
	CMP.W   D0,D3
	BHI.S	BITH
BIDDLE	MOVE.W  D3,$00(A3,D2.W)
	MOVE.W  $00(A1,D4.W),D0
	MOVE.W  D0,$00(A1,D2.W)
	MOVE.W  D2,$00(A0,D0.W)
	ADDQ.W  #2,D2
	DBF     D5,OUTER
MAKETABLE2
	MOVE.W  $00(A3,D1.W),D0
	ADD.W   $02(A3,D1.W),D0
	MOVE.W  D0,$00(A3,D2.W)
	MOVE.W  D1,$00(A1,D2.W)
	MOVE.W  D2,$00(A0,D1.W)
	MOVE.W  D2,$02(A0,D1.W)
	ADDQ.W  #2,D2
	ADDQ.L  #4,D1
	CMP.W   D7,D2
	BNE.S	MAKETABLE2
	MOVEM.W (A7)+,D0-D1/D3/D5
	RTS     

CREATE  MOVE.L	TABLE7(PC),A0
	LEA     TDATA1(PC),A1
	MOVEQ   #$00,D0
	MOVEQ   #$1F,D1
	MOVEQ   #$00,D2
LOOP1   MOVE.B  D0,(A0)+
	DBF     D1,LOOP1
	DBF     D2,EXIT1
	MOVE.W  (A1)+,D3
	MOVEQ   #$03,D2
EXIT1   ROL.W   #4,D3
	MOVE.W  D3,D1
	ANDI.W  #$000F,D1
	ADDQ.B  #4,D0
	BCC.S   LOOP1
	MOVE.L	TABLE8(PC),A0
	LEA     TDATA2(PC),A1
	MOVEQ   #$05,D0
	MOVEQ   #$03,D1
LOOP2   MOVE.B  $00(A1,D0.W),D2
	EXT.W   D2
LOOP3   MOVE.B  D1,(A0)+
	DBF     D2,LOOP3
	ADDQ.W  #1,D1
	DBF     D0,LOOP2
	RTS

CREATE2 MOVE.L	TABLE1(PC),A0
	MOVE.L	TABLE5(PC),A1
	MOVE.L	TABLE4(PC),A2
	MOVEQ   #$01,D1
	MOVE.W  #$04E6,D2
	MOVEQ   #$00,D4
	MOVE.W  #$0139,D0
CONTINUE
	MOVE.W  D1,(A0)+
	MOVE.W  D2,(A1)+
	MOVE.W  D4,(A2)+
	ADDQ.W  #2,D2
	ADDQ.W  #2,D4
	DBF     D0,CONTINUE
	MOVE.L	TABLE1(PC),A0
	MOVE.L	TABLE2(PC),A3
	MOVE.L	TABLE6(PC),A1
	MOVE.L	TABLE3(PC),A2
	MOVE.W  #$0274,D2
	MOVEQ   #$00,D4
	MOVE.W  #$0138,D0
DOMORE	MOVE.W  (A0)+,D1
	ADD.W   (A0)+,D1
	MOVE.W  D1,(A3)+
	MOVE.W  D4,(A1)+
	MOVE.W  D2,(A2)+
	MOVE.W  D2,(A2)+
	ADDQ.W  #4,D4
	ADDQ.W  #2,D2
	DBF     D0,DOMORE
	MOVE.W  #$FFFF,(A3)
	CLR.W   (A2)
	RTS     

RESTORE BSR     RESET
	BRA     BACK

TABLE1 DC.L 00
TABLE2 DC.L 00
TABLE3 DC.L 00
TABLE4 DC.L 00
TABLE5 DC.L 00
TABLE6 DC.L 00
TABLE7 DC.L 00
TABLE8 DC.L 00

;PARAMETERS
;A5 - SOURCE
;A6 - DESINATION
EXIT
	ADDQ.L	#4,A7
	RTS

UNPACK
	LEA	TABLE1(PC),A0
	MOVE.L	#0,(A0)		;SET UP RELATIVE TABLE OFFSETS
	MOVE.L	#$274,4(A0)
	MOVE.L	#$4E8,8(A0)
	MOVE.L	#$9CE,12(A0)
	MOVE.L	#$C42,16(A0)
	MOVE.L	#$EB6,20(A0)
	MOVE.L	#$112A,24(A0)
	MOVE.L	#$122A,28(A0)

	MOVE.L	A7,D1		;GET STACK POSITON
	sub.l	#$1500,D1	;TABLES START ADDRESS IN D1

	MOVE.W	#7,D0
TABLOOP
	ADD.L	D1,(A0)+	;ADD TABLE BASE ADDRESS TO OFFSETS
	DBF	D0,TABLOOP
	
	BSR	CREATE
	BSR     CREATE2
	MOVE.L	TABLE3(PC),A0
	MOVE.L	TABLE5(PC),A1
	MOVE.L	TABLE1(PC),A3
	MOVE.L  A6,-(A7)
	ADD.L	4(A5),A6
	ADD.L	8(A5),A5
	ADD.L	#$0C,A5
	MOVE.L	A6,A4
				;THIS IS REQUIRED!
	MOVE.W	#59,D0		;MOVE 60 SPACES TO END OF UNPACKED AREA
SPACES	MOVE.B	#$20,(A4)+	;SHOULD PROBABLY SAVE THIS DATA BEFORE
	DBF	D0,SPACES	;WIPING IT OUT!

	MOVEQ   #$08,D6
	MOVE.B  -(A5),D5
	MOVE.W  #$04E6,D7
	MOVE.L	TABLE8(PC),A4

TOP	MOVE.W	D5,$FFFF8240
	CMPA.L  (A7),A6
	BLE	EXIT

	MOVE.W  $04E4(A1),D0
MORE	DBF     D6,NOTEMPTY
	MOVEQ   #$07,D6
	MOVE.B  -(A5),D5
NOTEMPTY
	ADD.B   D5,D5
	BCC.S   ZERO
	ADDQ.W  #2,D0
ZERO	MOVE.W  $00(A1,D0.W),D0
	CMP.W   D7,D0
	BLT.S   MORE
	MOVE.W  D0,D1
	SUB.W   D7,D0
	MOVE.W  $04E4(A3),D4
	BMI	RESTORE

BACK	MOVE.W  $00(A0,D1.W),D1
SCAN	LEA     $00(A3,D1.W),A2
	ADDQ.W  #1,(A2)
	CMPM.W  (A2)+,(A2)+
	BCS.S   FRSTGTR
	MOVE.W  $00(A0,D1.W),D1
	BNE.S   SCAN
	LSR.W   #1,D0
	CMP.W   #$0100,D0
	BGE.S   GTE256
WRITE	MOVE.B	D0,-(A6)
	BRA.S   TOP

FRSTGTR SUBQ.W  #1,-$0004(A2)
	MOVE.W  -$0004(A2),D4
SAME	CMP.W   (A2)+,D4
	BEQ.S   SAME
	SUBQ.L  #4,A2
	ADDQ.W  #1,(A2)
	SUBA.L  A3,A2
	MOVE.W  $00(A1,D1.W),D4
	MOVE.W  A2,$00(A0,D4.W)
	CMP.W   D7,D4
	BCC.S   SKIP
	MOVE.W  A2,$02(A0,D4.W)
SKIP	MOVE.W  $00(A1,A2.W),D2
	MOVE.W  D4,$00(A1,A2.W)
	MOVE.W  D1,$00(A0,D2.W)
	CMP.W   D7,D2
	BCC.S   SKIP2
	MOVE.W  D1,$02(A0,D2.W)
SKIP2   MOVE.W  D2,$00(A1,D1.W)
	MOVE.W  $00(A0,A2.W),D1
	BNE.S   SCAN
	LSR.W   #1,D0
	CMP.W   #$0100,D0
	BLT.S   WRITE
GTE256	MOVE.B  -1(A5),D1
	MOVEQ   #$00,D2
	LSR.B   D6,D1
	OR.B    D5,D1
	MOVE.B  $00(A4,D1.W),D2
	SUB.W   D2,D6
	BPL.S   POSITIVE
	MOVE.B  -(A5),D5
	MOVE.B  D5,D4
	ADDQ.W  #2,D6
	BMI.S   OVERFLOW
	BEQ.S   MODD4
	LSR.B   #1,D4
	LSL.B   #7,D5
	BRA.S   MODD4
READONE MOVE.B  -(A5),D5
	MOVE.B  D5,D4
	LSL.B   #6,D5
	MOVEQ   #$02,D6
	LSR.B   D6,D4
	BRA.S   DOCOPY
POSITIVE
	BEQ.S   READONE
	MOVE.B (A5),D5
	SUBQ.W  #6,D6
OVERFLOW
	NEG.W   D6
	LSL.B   D6,D5
	MOVE.B  D5,D4
	MOVE.B  -(A5),D5
	MOVE.B  D5,D2
	LSL.B   D6,D5
	SUBQ.W  #8,D6
	NEG.W   D6
	LSR.B   D6,D2
	OR.B    D2,D4
MODD4   ANDI.W  #$003F,D4
DOCOPY	MOVE.L	TABLE7(PC),A0
	MOVE.B  (A0,D1.W),D2
	LSL.W   #4,D2
	OR.B    D4,D2
	;NEG.W   D2
	LEA     $01(A6,D2.W),A0
	SUBI.W  #$00FE,D0
	MOVE.W  D0,D1
COPY	MOVE.B  -(A0),D0
	MOVE.B  D0,-(A6)
	DBF     D1,COPY
	MOVE.L	TABLE3(PC),A0
	BRA	TOP

TDATA2	BTST    D7,$2F3F(A7)
	MOVE.L  (A7)+,-(A7)
TDATA1
	DC.W    $FFF7
	DC.W    $7777
	DC.W    $7773
	DC.W    $3333
	DC.W    $3333
	DC.W    $3331
	MOVE.B  (A1),-(A0)
	MOVE.B  (A1),-(A0)
	MOVE.B  (A1),-(A0)
	MOVE.B  (A1),-(A0)
	MOVE.B  (A1),-(A0)
	MOVE.B  (A0),-(A0)
	ORI.B   #$00,D0
	ORI.B   #$00,D0

