home *** CD-ROM | disk | FTP | other *** search
- ;Imploder Data Decrunch
- ;ripped by zero-commander of ALIENGROUP (10-Sep-1992)
-
- ;A0=CrunchedDataStart
-
- ;This Decrunchroutine decrunch the data to the adress of the Cruncheddata.
- ;Test D0 If you want to know that the decrunching was successful!!
- ;D0=0 anything is OK
-
-
- x:
- start: ;for Oxygene
- move.l 4,a6
- jsr -$84(a6)
- lea $80000,a0
- decrunchinit:
- cmp.l #'IMP!',(a0) ;Test ImploderData
- bne.s nodecrunch
- movem.l d2-d5/a2-a4,-(sp)
- move.l a0,a3
- move.l a0,a4
- tst.l (a0)+
- add.l (a0)+,a4 ;DecrunchedData end
- add.l (a0)+,a3 ;CrunchedData end
- move.l a3,a2
- move.l (a2)+,-(a0)
- move.l (a2)+,-(a0)
- move.l (a2)+,-(a0)
- move.l (a2)+,d2
- move.w (a2)+,d3
- bmi.s decrunchinitw1
- subq.l #1,a3
- decrunchinitw1:
- lea databuffer(pc),a1
- moveq #6,d0
- decrunchinitloop:
- move.l (a2)+,(a1)+
- dbra d0,decrunchinitloop
- lea databuffer(pc),a1
- bra decrunch
- nodecrunch:
- move.l 4,a6
- jsr -$8a(a6) ;Tasks enable (zc)
- moveq #0,d0
- rts
-
-
- decrunch:
- tst.l d2
- beq.s decrunchw1
- decrunchloop1:
- move.b -(a3),-(a4)
- subq.l #1,d2
- bne.s decrunchloop1
- decrunchw1:
- cmp.l a4,a0
- blo.s decrunchw2
- moveq #-1,d0
- cmp.l a3,a0
- beq.s notready
- moveq #0,d0
- notready:
- movem.l (sp)+,d2-d5/a2-a4
- move.l 4,a6
- jsr -$8a(a6) ;Tasks enable (zc)
- rts
-
- decrunchw2:
- add.b d3,d3
- bne.s decrunchw3
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw3:
- bhs.s decrunchw15
- add.b d3,d3
- bne.s decrunchw4
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw4:
- bhs.s decrunchw14
- add.b d3,d3
- bne.s decrunchw5
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw5:
- bhs.s decrunchw13
- add.b d3,d3
- bne.s decrunchw6
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw6:
- bhs.s decrunchw12
- moveq #0,d4
- add.b d3,d3
- bne.s decrunchw7
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw7:
- bhs.s decrunchw8
- move.b -(a3),d4
- moveq #3,d0
- subq.b #1,d4
- bra.s decrunchw16
-
- decrunchw8:
- add.b d3,d3
- bne.s decrunchw9
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw9:
- addx.b d4,d4
- add.b d3,d3
- bne.s decrunchw10
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw10:
- addx.b d4,d4
- add.b d3,d3
- bne.s decrunchw11
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw11:
- addx.b d4,d4
- addq.b #5,d4
- moveq #3,d0
- bra.s decrunchw16
-
- decrunchw12:
- moveq #4,d4
- moveq #3,d0
- bra.s decrunchw16
-
- decrunchw13:
- moveq #3,d4
- moveq #2,d0
- bra.s decrunchw16
-
- decrunchw14:
- moveq #2,d4
- moveq #1,d0
- bra.s decrunchw16
-
- decrunchw15:
- moveq #1,d4
- moveq #0,d0
- decrunchw16:
- moveq #0,d5
- move.w d0,d1
- add.b d3,d3
- bne.s decrunchw17
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw17:
- bhs.s decrunchw20
- add.b d3,d3
- bne.s decrunchw18
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw18:
- bhs.s decrunchw19
- move.b data1(pc,d0.w),d5
- addq.b #8,d0
- bra.s decrunchw20
-
- decrunchw19:
- moveq #2,d5
- addq.b #4,d0
- decrunchw20:
- move.b data2(pc,d0.w),d0
- decrunchw21:
- add.b d3,d3
- bne.s decrunchw22
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw22:
- addx.w d2,d2
- subq.b #1,d0
- bne.s decrunchw21
- add.w d5,d2
- moveq #0,d5
- move.l d5,a2
- move.w d1,d0
- add.b d3,d3
- bne.s decrunchw23
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw23:
- bhs.s decrunchw26
- add.w d1,d1
- add.b d3,d3
- bne.s decrunchw24
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw24:
- bhs.s decrunchw25
- move.w 8(a1,d1.w),a2
- addq.b #8,d0
- bra.s decrunchw26
-
- decrunchw25:
- move.w (a1,d1.w),a2
- addq.b #4,d0
- decrunchw26:
- move.b 16(a1,d0.w),d0
- decrunchw27:
- add.b d3,d3
- bne.s decrunchw28
- move.b -(a3),d3
- addx.b d3,d3
- decrunchw28:
- addx.l d5,d5
- subq.b #1,d0
- bne.s decrunchw27
- addq.w #1,a2
- add.l d5,a2
- add.l a4,a2
- decrunchloop:
- move.b -(a2),-(a4)
- dbra d4,decrunchloop
- not.w $dff180
- bra decrunch
-
- data1:
- dc.b 6,10,10,18
- data2:
- dc.b 1,1,1,1,2,3,3,4,4,5,7,14
- databuffer:
- dc.l 7
-
-