home *** CD-ROM | disk | FTP | other *** search
-
- 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
-
-