home *** CD-ROM | disk | FTP | other *** search
/ Supremacy 2 / Supremacy-2.iso / Pompey / PP_043.MSA / PACK_ICE.211 / ICE_UNP2.S < prev    next >
Text File  |  1989-04-06  |  4KB  |  161 lines

  1. ;***************************************************************************
  2. ; Unpacking source for Pack-Ice Version 2.1
  3. ; a0: Pointer on packed Data
  4. decrunch:    movem.l d0-a6,-(sp)        ; save registers
  5.         cmpi.l    #'Ice!',(a0)+        ; Data packed?
  6.         bne.s    ice2_07            ; no!
  7.         move.l    (a0)+,d0
  8.         lea    -8(a0,d0.l),a5
  9.         move.l    (a0)+,(sp)
  10.         lea    108(a0),a4
  11.         movea.l a4,a6
  12.         adda.l    (sp),a6
  13.         movea.l a6,a3
  14.         movea.l a6,a1            ; save 120 bytes
  15.         lea    ice2_21+120(pc),a2    ; at the end of the
  16.         moveq    #$77,d0            ; unpacked data
  17. ice2_00:    move.b    -(a1),-(a2)
  18.         dbra    d0,ice2_00
  19.         bsr    ice2_0c
  20.         bsr.s    ice2_08
  21.         bsr    ice2_10        ;; Picture decrunch!
  22.         bcc.s    ice2_04        ;; These marked lines are only
  23.         movea.l a3,a1        ;; necessary, if you selected the
  24.         move.w    #$0f9f,d7    ;; additional picture packer
  25. ice2_01:    moveq    #3,d6        ;; in Pack-Ice.
  26. ice2_02:    move.w    -(a1),d4    ;;
  27.         moveq    #3,d5        ;; If you never use the picture
  28. ice2_03:    add.w    d4,d4        ;; pack option, you may delete
  29.         addx.w    d0,d0        ;; all the lines marked with ";;"
  30.         add.w    d4,d4        ;;
  31.         addx.w    d1,d1        ;;
  32.         add.w    d4,d4        ;;
  33.         addx.w    d2,d2        ;;
  34.         add.w    d4,d4        ;;
  35.         addx.w    d3,d3        ;;
  36.         dbra    d5,ice2_03    ;;
  37.         dbra    d6,ice2_02    ;;
  38.         movem.w d0-d3,(a1)    ;;
  39.         dbra    d7,ice2_01    ;;
  40. ice2_04:    move.l    (sp),d0            ; move all data to
  41.         lea    -120(a4),a1        ; 120 bytes lower
  42. ice2_05:    move.b    (a4)+,(a1)+
  43.         dbra    d0,ice2_05
  44.         subi.l    #$010000,d0
  45.         bpl.s    ice2_05
  46.         moveq    #$77,d0            ; restore saved data
  47.         lea    ice2_21+120(pc),a2
  48. ice2_06:    move.b    -(a2),-(a3)
  49.         dbra    d0,ice2_06
  50. ice2_07:    movem.l (sp)+,d0-a6        ; restore registers
  51.         rts
  52. ice2_08:    bsr.s    ice2_10
  53.         bcc.s    ice2_0b
  54.         moveq    #0,d1
  55.         bsr.s    ice2_10
  56.         bcc.s    ice2_0a
  57.         lea    ice2_1e(pc),a1
  58.         moveq    #4,d3
  59. ice2_09:    move.l    -(a1),d0
  60.         bsr.s    ice2_13
  61.         swap    d0
  62.         cmp.w    d0,d1
  63.         dbne    d3,ice2_09
  64.         add.l    20(a1),d1
  65. ice2_0a:    move.b    -(a5),-(a6)
  66.         dbra    d1,ice2_0a
  67. ice2_0b:    cmpa.l    a4,a6
  68.         bgt.s    ice2_16
  69.         rts
  70. ice2_0c:    moveq    #3,d0
  71. ice2_0d:    move.b    -(a5),d7
  72.         ror.l    #8,d7
  73.         dbra    d0,ice2_0d
  74.         rts
  75. ice2_0e:    move.w    a5,d7
  76.         btst    #0,d7
  77.         bne.s    ice2_0f
  78.         move.l    -(a5),d7
  79.         addx.l    d7,d7
  80.         bra.s    ice2_15
  81. ice2_0f:    move.l    -5(a5),d7
  82.         lsl.l    #8,d7
  83.         move.b    -(a5),d7
  84.         subq.l    #3,a5
  85.         add.l    d7,d7
  86.         bset    #0,d7
  87.         bra.s    ice2_15
  88. ice2_10:    add.l    d7,d7
  89.         beq.s    ice2_11
  90.         rts
  91. ice2_11:    move.w    a5,d7
  92.         btst    #0,d7
  93.         bne.s    ice2_12
  94.         move.l    -(a5),d7
  95.         addx.l    d7,d7
  96.         rts
  97. ice2_12:    move.l    -5(a5),d7
  98.         lsl.l    #8,d7
  99.         move.b    -(a5),d7
  100.         subq.l    #3,a5
  101.         add.l    d7,d7
  102.         bset    #0,d7
  103.         rts
  104. ice2_13:    moveq    #0,d1
  105. ice2_14:    add.l    d7,d7
  106.         beq.s    ice2_0e
  107. ice2_15:    addx.w    d1,d1
  108.         dbra    d0,ice2_14
  109.         rts
  110. ice2_16:    lea    ice2_1f(pc),a1
  111.         moveq    #3,d2
  112. ice2_17:    bsr.s    ice2_10
  113.         dbcc    d2,ice2_17
  114.         moveq    #0,d4
  115.         moveq    #0,d1
  116.         move.b    1(a1,d2.w),d0
  117.         ext.w    d0
  118.         bmi.s    ice2_18
  119.         bsr.s    ice2_13
  120. ice2_18:    move.b    6(a1,d2.w),d4
  121.         add.w    d1,d4
  122.         beq.s    ice2_1a
  123.         lea    ice2_20(pc),a1
  124.         moveq    #1,d2
  125. ice2_19:    bsr.s    ice2_10
  126.         dbcc    d2,ice2_19
  127.         moveq    #0,d1
  128.         move.b    1(a1,d2.w),d0
  129.         ext.w    d0
  130.         bsr.s    ice2_13
  131.         add.w    d2,d2
  132.         add.w    6(a1,d2.w),d1
  133.         bra.s    ice2_1c
  134. ice2_1a:    moveq    #0,d1
  135.         moveq    #5,d0
  136.         moveq    #0,d2
  137.         bsr.s    ice2_10
  138.         bcc.s    ice2_1b
  139.         moveq    #8,d0
  140.         moveq    #$40,d2
  141. ice2_1b:    bsr.s    ice2_13
  142.         add.w    d2,d1
  143. ice2_1c:    lea    2(a6,d4.w),a1
  144.         adda.w    d1,a1
  145.         move.b    -(a1),-(a6)
  146. ice2_1d:    move.b    -(a1),-(a6)
  147.         dbra    d4,ice2_1d
  148.         bra    ice2_08
  149.         dc.b $7f,$ff,$00,$0e,$00,$ff,$00,$07
  150.         dc.b $00,$07,$00,$02,$00,$03,$00,$01
  151.         dc.b $00,$03,$00,$01
  152. ice2_1e:    dc.b $00,$00,$01,$0d,$00,$00,$00,$0e
  153.         dc.b $00,$00,$00,$07,$00,$00,$00,$04
  154.         dc.b $00,$00,$00,$01
  155. ice2_1f:    dc.b $09,$01,$00,$ff,$ff,$08,$04,$02
  156.         dc.b $01,$00
  157. ice2_20:    dc.b $0b,$04,$07,$00,$01,$20,$00,$00
  158.         dc.b $00,$20
  159. ice2_21:    ds.w 60            ; free space (can be put in BSS)
  160.  
  161.