home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / TOXIC / TOXIC01.MSA / PROGRAMS / ATO_2_33.S < prev    next >
Encoding:
Text File  |  1991-12-11  |  3.3 KB  |  166 lines

  1. ;decrunch source code of ATOMIK by ALTAIR    ;je tiens a preciser
  2. ;A0=packed code        ;que j'ai entierement
  3. ;A1=depack adr.        ;ecris ce compacteur
  4. ;call it by bsr.        ;environnement compris.
  5.             ;pic_algo=1 ; lenght=$18e
  6. PIC_ALGO:    equ    1    ;pic_algo=0 ; lenght=$148
  7.     opt    o+,x+
  8. depack:    movem.l    d0-a6,-(a7)
  9.     cmp.l    #"ATOM",(a0)+
  10.     bne    no_crunched
  11.     move.l    a1,a5
  12.     add.l    (a0)+,a5
  13.     ifne    PIC_ALGO
  14.     pea    (a5)
  15.     endc
  16.     move.l    (a0)+,d0    
  17.     lea    0(a0,d0.l),a6
  18.     move.b    -(a6),d7
  19.     bra    make_jnk
  20. tablus:    lea    tablus_table(pc),a4
  21.     moveq    #1,d6
  22.     bsr.s    get_bit2
  23.     bra.s    tablus2
  24. decrunch:    moveq    #6,d6
  25. take_lenght:    add.b    d7,d7
  26.     beq.s    .empty1
  27. .cont_copy:    dbcc    d6,take_lenght
  28.     bcs.s    .next_cod
  29.     moveq    #6,d5
  30.     sub    d6,d5
  31.     bra.s    .do_copy
  32. .next_cod:    moveq    #3,d6
  33.     bsr.s    get_bit2
  34.     beq.s    .next_cod1
  35.     addq    #6,d5
  36.     bra.s    .do_copy
  37. .next_cod1:    moveq    #7,d6
  38.     bsr.s    get_bit2
  39.     beq.s    .next_cod2
  40.     add    #15+6,d5
  41.     bra.s    .do_copy
  42. .empty1:    move.b    -(a6),d7
  43.     addx.b    d7,d7
  44.     bra.s    .cont_copy
  45. .next_cod2:    moveq    #13,d6
  46.     bsr.s    get_bit2
  47.     add    #255+15+6,d5
  48. .do_copy:    move    d5,-(a7)
  49.     bne.s    bigger
  50.     lea    decrun_table2(pc),a4
  51.     moveq    #2,d6
  52.     bsr.s    get_bit2
  53.     cmp    #5,d5
  54.     blt.s    contus
  55.     addq    #2,a7
  56.     subq    #6,d5
  57.     bgt.s    tablus
  58.     move.l    a5,a4
  59.     blt.s    .first4
  60.     addq    #4,a4
  61. .first4:    moveq    #1,d6
  62.     bsr.s    get_bit2
  63. tablus2:    move.b    0(a4,d5.w),-(a5)    
  64.     bra.s    make_jnk
  65. get_bit2:    clr    d5
  66. .get_bits:    add.b    d7,d7
  67.     beq.s    .empty
  68. .cont:    addx    d5,d5
  69.     dbf    d6,.get_bits
  70.     tst    d5
  71.     rts
  72. .empty:    move.b    -(a6),d7
  73.     addx.b    d7,d7
  74.     bra.s    .cont
  75. bigger:    lea    decrun_table(pc),a4
  76. cont:    moveq    #2,d6
  77.     bsr.s    get_bit2
  78. contus:    move    d5,d4
  79.     move.b    14(a4,d4.w),d6
  80.     ext    d6
  81.     bsr.s    get_bit2
  82.     add    d4,d4
  83.     beq.s    .first
  84.     add    -2(a4,d4.w),d5
  85. .first:    lea    1(a5,d5.w),a4
  86.     move    (a7)+,d5
  87.     move.b    -(a4),-(a5)
  88. .copy_same:    move.b    -(a4),-(a5)
  89.     dbf    d5,.copy_same
  90. make_jnk:    moveq    #11,d6
  91.     moveq    #11,d5
  92. take_jnk:    add.b    d7,d7
  93.     beq.s    empty
  94. cont_jnk:    dbcc    d6,take_jnk
  95.     bcs.s    next_cod
  96.     sub    d6,d5
  97.     bra.s    copy_jnk1
  98. next_cod:    moveq    #7,d6
  99.     bsr.s    get_bit2
  100.     beq.s    .next_cod1
  101.     addq    #8,d5
  102.     addq    #3,d5
  103.     bra.s    copy_jnk1
  104. .next_cod1:    moveq    #2,d6
  105.     bsr.s    get_bit2
  106.     swap    d5
  107.     moveq    #15,d6
  108.     bsr.s    get_bit2
  109.     addq.l    #8,d5
  110.     addq.l    #3,d5    
  111. copy_jnk1:    subq    #1,d5
  112.     bmi.s    .end_word
  113.     moveq    #1,d6
  114.     swap    d6
  115. .copy_jnk:    move.b    -(a6),-(a5)
  116.     dbf    d5,.copy_jnk
  117.     sub.l    d6,d5
  118.     bpl.s    .copy_jnk
  119. .end_word:    cmp.l    a6,a0
  120. .decrunch:    bne    decrunch
  121.     cmp.b    #$80,d7
  122.     bne.s    .decrunch
  123.     ifne    PIC_ALGO
  124.     move.l    (a7)+,a0
  125.     bsr.s    decod_picture
  126.     endc
  127. no_crunched:    movem.l    (a7)+,d0-a6
  128.      rts
  129. empty:    move.b    -(a6),d7
  130.     addx.b    d7,d7
  131.     bra.s    cont_jnk
  132. decrun_table:    dc.w    32,32+64,32+64+256,32+64+256+512,32+64+256+512+1024
  133.     dc.w    32+64+256+512+1024+2048,32+64+256+512+1024+2048+4096
  134.     dc.b    4,5,7,8,9,10,11,12
  135. decrun_table2:    dc.w    32,32+64,32+64+128,32+64+128+256
  136.     dc.w    32+64+128+256+512,32+64+128+256+512*2
  137.     dc.w    32+64+128+256+512*3
  138.     dc.b    4,5,6,7,8,8
  139. tablus_table:    dc.b    $60,$20,$10,$8
  140.     ifne    PIC_ALGO
  141. decod_picture:    move    -(a0),d7
  142.     clr    (a0)
  143. .next_picture:    dbf    d7,.decod_algo
  144.     rts
  145. .decod_algo:    move.l    -(a0),d0
  146.     clr.l    (a0)
  147.     lea    0(a5,d0.l),a1
  148.     lea    $7d00(a1),a2
  149. .next_planes:    moveq    #3,d6
  150. .next_word:    move    (a1)+,d0
  151.     moveq    #3,d5
  152. .next_bits:    add    d0,d0
  153.     addx    d1,d1
  154.     add    d0,d0
  155.     addx    d2,d2
  156.     add    d0,d0
  157.     addx    d3,d3
  158.     add    d0,d0
  159.     addx    d4,d4
  160.     dbf    d5,.next_bits
  161.     dbf    d6,.next_word
  162.     movem    d1-d4,-8(a1)
  163.     cmp.l    a1,a2
  164.     bne.s    .next_planes
  165.     bra.s    .next_picture
  166.     endc