home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / beermon / explode.s < prev    next >
Text File  |  1995-02-27  |  3KB  |  173 lines

  1. ;
  2. ; sourcecode to decrunch data crunched using BeerMon's 'imp' command.
  3. ;
  4. ; explode:
  5. ;
  6. ; The decompressed data will be located in the memory region beginning
  7. ; with the supplied start address.
  8. ;
  9. ; in:    a0.l    address of imploded data
  10. ;
  11. ; out:    d0.l    0:error
  12. ;        -1:no error
  13.  
  14. ImploderID    = 'IMP!'
  15.  
  16. explode:movem.l    d2-d5/a2-a4,-(sp)
  17.     move.l    a0,a3
  18.     move.l    a0,a4
  19.     cmp.l    #ImploderID,(a0)+
  20.     bne.b    ex05
  21.     add.l    (a0)+,a4
  22.     add.l    (a0)+,a3
  23.     move.l    a3,a2
  24.     move.l    (a2)+,-(a0)
  25.     move.l    (a2)+,-(a0)
  26.     move.l    (a2)+,-(a0)
  27.     move.l    (a2)+,d2
  28.     move.w    (a2)+,d3
  29.     bmi.b    ex00
  30.     subq.l    #1,a3
  31. ex00:    lea    -28(sp),sp
  32.     move.l    sp,a1
  33.     moveq    #6,d0
  34. ex01:    move.l    (a2)+,(a1)+
  35.     dbf    d0,ex01
  36.     move.l    sp,a1
  37.     moveq    #0,d4
  38. ex02:    tst.l    d2
  39.     beq.b    ex04
  40. ex03:    move.b    -(a3),-(a4)
  41.     subq.l    #1,d2
  42.     bne.b    ex03
  43. ex04:    cmp.l    a4,a0
  44.     blo.b    ex07
  45.     lea    28(sp),sp
  46.     moveq    #-1,d0
  47.     cmp.l    a3,a0
  48.     beq.b    ex06
  49. ex05:    moveq    #0,d0
  50. ex06:    movem.l    (sp)+,d2-d5/a2-a4
  51.     tst.l    d0
  52.     rts
  53. ex07:    add.b    d3,d3
  54.     bne.b    ex08
  55.     move.b    -(a3),d3
  56.     addx.b    d3,d3
  57. ex08:    bcc.b    ex20
  58.     add.b    d3,d3
  59.     bne.b    ex09
  60.     move.b    -(a3),d3
  61.     addx.b    d3,d3
  62. ex09:    bcc.b    ex19
  63.     add.b    d3,d3
  64.     bne.b    ex10
  65.     move.b    -(a3),d3
  66.     addx.b    d3,d3
  67. ex10:    bcc.b    ex18
  68.     add.b    d3,d3
  69.     bne.b    ex11
  70.     move.b    -(a3),d3
  71.     addx.b    d3,d3
  72. ex11:    bcc.b    ex17
  73.     add.b    d3,d3
  74.     bne.b    ex12
  75.     move.b    -(a3),d3
  76.     addx.b    d3,d3
  77. ex12:    bcc.b    ex13
  78.     move.b    -(a3),d4
  79.     moveq    #3,d0
  80.     bra.b    ex21
  81. ex13:    add.b    d3,d3
  82.     bne.b    ex14
  83.     move.b    -(a3),d3
  84.     addx.b    d3,d3
  85. ex14:    addx.b    d4,d4
  86.     add.b    d3,d3
  87.     bne.b    ex15
  88.     move.b    -(a3),d3
  89.     addx.b    d3,d3
  90. ex15:    addx.b    d4,d4
  91.     add.b    d3,d3
  92.     bne.b    ex16
  93.     move.b    -(a3),d3
  94.     addx.b    d3,d3
  95. ex16:    addx.b    d4,d4
  96.     addq.b    #6,d4
  97.     moveq    #3,d0
  98.     bra.b    ex21
  99. ex17:    moveq    #5,d4
  100.     moveq    #3,d0
  101.     bra.b    ex21
  102. ex18:    moveq    #4,d4
  103.     moveq    #2,d0
  104.     bra.b    ex21
  105. ex19:    moveq    #3,d4
  106.     moveq    #1,d0
  107.     bra.b    ex21
  108. ex20:    moveq    #2,d4
  109.     moveq    #0,d0
  110. ex21:    moveq    #0,d5
  111.     move.w    d0,d1
  112.     add.b    d3,d3
  113.     bne.b    ex22
  114.     move.b    -(a3),d3
  115.     addx.b    d3,d3
  116. ex22:    bcc.b    ex25
  117.     add.b    d3,d3
  118.     bne.b    ex23
  119.     move.b    -(a3),d3
  120.     addx.b    d3,d3
  121. ex23:    bcc.b    ex24
  122.     move.b    extab0(pc,d0.w),d5
  123.     addq.b    #8,d0
  124.     bra.b    ex25
  125. ex24:    moveq    #2,d5
  126.     addq.b    #4,d0
  127. ex25:    move.b    extab1(pc,d0.w),d0
  128. ex26:    add.b    d3,d3
  129.     bne.b    ex27
  130.     move.b    -(a3),d3
  131.     addx.b    d3,d3
  132. ex27:    addx.w    d2,d2
  133.     subq.b    #1,d0
  134.     bne.b    ex26
  135.     add.w    d5,d2
  136.     moveq    #0,d5
  137.     move.l    d5,a2
  138.     move.w    d1,d0
  139.     add.b    d3,d3
  140.     bne.b    ex28
  141.     move.b    -(a3),d3
  142.     addx.b    d3,d3
  143. ex28:    bcc.b    ex31
  144.     add.w    d1,d1
  145.     add.b    d3,d3
  146.     bne.b    ex29
  147.     move.b    -(a3),d3
  148.     addx.b    d3,d3
  149. ex29:    bcc.b    ex30
  150.     move.w    8(a1,d1.w),a2
  151.     addq.b    #8,d0
  152.     bra.b    ex31
  153. ex30:    move.w    0(a1,d1.w),a2
  154.     addq.b    #4,d0
  155. ex31:    move.b    $10(a1,d0.w),d0
  156. ex32:    add.b    d3,d3
  157.     bne.b    ex33
  158.     move.b    -(a3),d3
  159.     addx.b    d3,d3
  160. ex33:    addx.l    d5,d5
  161.     subq.b    #1,d0
  162.     bne.b    ex32
  163.     addq.w    #1,a2
  164.     add.l    d5,a2
  165.     add.l    a4,a2
  166. ex34:    move.b    -(a2),-(a4)
  167.     subq.b    #1,d4
  168.     bne.b    ex34
  169.     bra    ex02
  170. extab0:    dc.l    $60A0A12
  171. extab1:    dc.l    $1010101,$2030304,$405070E
  172.  
  173.