home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / utility / archiver / imploder / explode.s next >
Text File  |  1994-10-12  |  3KB  |  174 lines

  1. **********************************************************************
  2. * Data Exploder  a0 = Source/Dest Buffer (must be size of dest!)
  3. *                          Resource by GROO 1990
  4. **********************************************************************
  5.  
  6. Explode_Data    movem.l    d0-d5/a0-a4,-(sp)
  7.         move.l    a0,a3
  8.         move.l    a0,a4
  9.         cmp.l    #"IMP!",(a0)+
  10.         bne.s    NotImplDataErr
  11.         add.l    (a0)+,a4
  12.         add.l    (a0)+,a3
  13.         move.l    a3,a2
  14.         move.l    (a2)+,-(a0)
  15.         move.l    (a2)+,-(a0)
  16.         move.l    (a2)+,-(a0)
  17.         move.l    (a2)+,d2
  18.         move.w    (a2)+,d3
  19.         bmi.s    .1
  20.         subq.l    #1,a3
  21. .1        lea    -$001C(sp),sp
  22.         move.l    sp,a1
  23.         moveq.l    #6,d0
  24. .2        move.l    (a2)+,(a1)+
  25.         dbra    d0,.2
  26.         move.l    sp,a1
  27.         moveq.l    #0,d4
  28. Expl1        tst.l    d2
  29.         beq.s    .3
  30. .4        move.b    -(a3),-(a4)
  31.         subq.l    #1,d2
  32.         bne.s    .4
  33. .3        cmp.l    a4,a0
  34.         bcs.s    Expl2
  35.         lea    $001C(sp),sp
  36.         moveq.l    #-1,d0
  37.         cmp.l    a3,a0
  38.         beq.s    Expl_Exit
  39. NotImplDataErr    moveq.l    #0,d0
  40. Expl_Exit    movem.l    (sp)+,d0-d5/a0-a4
  41.         rts        ; d0 = 0 = error
  42.  
  43. Expl2        add.b    d3,d3
  44.         bne.s    .1
  45.         move.b    -(a3),d3
  46.         addx.b    d3,d3
  47. .1        bcc.s    Expl3
  48.         add.b    d3,d3
  49.         bne.s    .2
  50.         move.b    -(a3),d3
  51.         addx.b    d3,d3
  52. .2        bcc.s    Expl4
  53.         add.b    d3,d3
  54.         bne.s    .3
  55.         move.b    -(a3),d3
  56.         addx.b    d3,d3
  57. .3        bcc.s    Expl5
  58.         add.b    d3,d3
  59.         bne.s    .4
  60.         move.b    -(a3),d3
  61.         addx.b    d3,d3
  62. .4        bcc.s    Expl6
  63.         add.b    d3,d3
  64.         bne.s    .5
  65.         move.b    -(a3),d3
  66.         addx.b    d3,d3
  67. .5        bcc.s    .6
  68.         move.b    -(a3),d4
  69.         moveq.l    #3,d0
  70.         bra.s    Expl7
  71.  
  72. .6        add.b    d3,d3
  73.         bne.s    .7
  74.         move.b    -(a3),d3
  75.         addx.b    d3,d3
  76. .7        addx.b    d4,d4
  77.         add.b    d3,d3
  78.         bne.s    .8
  79.         move.b    -(a3),d3
  80.         addx.b    d3,d3
  81. .8        addx.b    d4,d4
  82.         add.b    d3,d3
  83.         bne.s    .9
  84.         move.b    -(a3),d3
  85.         addx.b    d3,d3
  86. .9        addx.b    d4,d4
  87.         addq.b    #6,d4
  88.         moveq.l    #3,d0
  89.         bra.s    Expl7
  90.  
  91. Expl6        moveq.l    #5,d4
  92.         moveq.l    #3,d0
  93.         bra.s    Expl7
  94.  
  95. Expl5        moveq.l    #4,d4
  96.         moveq.l    #2,d0
  97.         bra.s    Expl7
  98.  
  99. Expl4        moveq.l    #3,d4
  100.         moveq.l    #1,d0
  101.         bra.s    Expl7
  102.  
  103. Expl3        moveq.l    #2,d4
  104.         moveq.l    #0,d0
  105. Expl7        moveq.l    #0,d5
  106.         move.w    d0,d1
  107.         add.b    d3,d3
  108.         bne.s    .1
  109.         move.b    -(a3),d3
  110.         addx.b    d3,d3
  111. .1        bcc.s    .4
  112.         add.b    d3,d3
  113.         bne.s    .2
  114.         move.b    -(a3),d3
  115.         addx.b    d3,d3
  116. .2        bcc.s    .3
  117.         move.b    Expl_Tab1(pc,d0.w),d5
  118.         addq.b    #8,d0
  119.         bra.s    .4
  120.  
  121. .3        moveq.l    #2,d5
  122.         addq.b    #4,d0
  123. .4        move.b    Expl_Tab2(pc,d0.w),d0
  124. .5        add.b    d3,d3
  125.         bne.s    .6
  126.         move.b    -(a3),d3
  127.         addx.b    d3,d3
  128. .6        addx.w    d2,d2
  129.         subq.b    #1,d0
  130.         bne.s    .5
  131.         add.w    d5,d2
  132.         moveq.l    #0,d5
  133.         move.l    d5,a2
  134.         move.w    d1,d0
  135.         add.b    d3,d3
  136.         bne.s    .7
  137.         move.b    -(a3),d3
  138.         addx.b    d3,d3
  139. .7        bcc.s    Expl9
  140.         add.w    d1,d1
  141.         add.b    d3,d3
  142.         bne.s    .8
  143.         move.b    -(a3),d3
  144.         addx.b    d3,d3
  145. .8        bcc.s    Expl8
  146.         move.w    8(a1,d1.w),a2
  147.         addq.b    #8,d0
  148.         bra.s    Expl9
  149.  
  150. Expl8        move.w    0(a1,d1.w),a2
  151.         addq.b    #4,d0
  152. Expl9        move.b    $0010(a1,d0.w),d0
  153. .1        add.b    d3,d3
  154.         bne.s    .2
  155.         move.b    -(a3),d3
  156.         addx.b    d3,d3
  157. .2        addx.l    d5,d5
  158.         subq.b    #1,d0
  159.         bne.s    .1
  160.         addq.w    #1,a2
  161.         add.l    d5,a2
  162.         add.l    a4,a2
  163. .3        move.b    -(a2),-(a4)
  164.         subq.b    #1,d4
  165.         bne.s    .3
  166.         bra    Expl1
  167.  
  168. Expl_Tab1    dc.l    $060A0A12
  169. Expl_Tab2    dc.l    $01010101
  170.         dc.l    $02030304
  171.         dc.l    $0405070E
  172.  
  173. ; =========================================================================
  174.