home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / utility / archiver / auto_501 / depack2.s < prev    next >
Text File  |  1985-11-17  |  3KB  |  160 lines

  1. ; A0 -> A1 depacker
  2. AU5_decrunch:
  3.     movem.l    d0-a6,-(sp)
  4.     bsr.s    getinfo        
  5.     cmpi.l    #'AU5!',d0    
  6.     bne    not_packed    
  7.     bsr.s    getinfo        
  8.     lea.l    -8(a0,d0.l),a5    
  9.     bsr.s    getinfo        
  10.     move.l    d0,(sp)        
  11.     move.l    a1,a4        
  12.     move.l    a1,a6
  13.     adda.l    d0,a6        
  14.     move.l    a6,a3        
  15.     move.b    -(a5),d7    
  16.     bsr    normal_bytes
  17.  
  18.     bsr    get_1_bit     
  19.     bcc.s    not_packed    
  20.     move.w    #$0f9f,d7     
  21. AU5_00:    moveq    #3,d6        
  22. AU5_01:    move.w    -(a3),d4    
  23.     moveq    #3,d5        
  24. AU5_02:    add.w    d4,d4        
  25.     addx.w    d0,d0        
  26.     add.w    d4,d4        
  27.     addx.w    d1,d1        
  28.     add.w    d4,d4        
  29.     addx.w    d2,d2        
  30.     add.w    d4,d4        
  31.     addx.w    d3,d3        
  32.     dbra    d5,AU5_02     
  33.     dbra    d6,AU5_01     
  34.     movem.w    d0-d3,(a3)    
  35.     dbra    d7,AU5_00     
  36.  
  37. not_packed:
  38.     movem.l    (sp)+,d0-a6
  39.     rts
  40.  
  41. getinfo:
  42.     moveq    #3,d1    
  43. getbytes:
  44.      lsl.l    #8,d0        
  45.     move.b    (a0)+,d0
  46.     dbf    d1,getbytes
  47.     rts
  48.  
  49. normal_bytes:    
  50.     bsr.s    get_1_bit
  51.     bcc.s    test_if_end    
  52.     moveq.l    #0,d1        
  53.     bsr.s    get_1_bit
  54.     bcc.s    copy_direkt    
  55.     lea.l    direkt_tab+20(pc),a1
  56.     moveq.l    #4,d3
  57. nextgb:    move.l    -(a1),d0    
  58.     bsr.s    get_d0_bits
  59.     swap.w    d0
  60.     cmp.w    d0,d1        
  61.     dbne    d3,nextgb     
  62. no_more:
  63.     add.l    20(a1),d1
  64. copy_direkt:    
  65.     move.b    -(a5),-(a6)    
  66.     dbf    d1,copy_direkt    
  67. test_if_end:    
  68.     cmpa.l    a4,a6        
  69.     bgt.s    strings        
  70.     rts    
  71.  
  72. get_1_bit:
  73.     add.b    d7,d7        
  74.     bne.s    bitfound    
  75.     move.b    -(a5),d7    
  76.     addx.b    d7,d7
  77. bitfound:
  78.     rts    
  79.  
  80. get_d0_bits:    
  81.     moveq.l    #0,d1        
  82. hole_bit_loop:    
  83.     add.b    d7,d7        
  84.     bne.s    on_d0        
  85.     move.b    -(a5),d7    
  86.     addx.b    d7,d7
  87. on_d0:    addx.w    d1,d1        
  88.     dbf    d0,hole_bit_loop
  89.     rts    
  90.  
  91. strings:
  92.     lea.l    length_tab(pc),a1
  93.     moveq.l    #3,d2        
  94. get_length_bit:    
  95.     bsr.s    get_1_bit
  96.     dbcc    d2,get_length_bit
  97. no_length_bit:    
  98.     moveq.l    #0,d4        
  99.     moveq.l    #0,d1
  100.     move.b    1(a1,d2.w),d0    
  101.     ext.w    d0        
  102.     bmi.s    no_über        
  103. get_über:
  104.     bsr.s    get_d0_bits
  105. no_über:
  106.     move.b    6(a1,d2.w),d4    
  107.     add.w    d1,d4    
  108.     beq.s    get_offset_2    
  109.  
  110.  
  111.     lea.l    more_offset(pc),a1    
  112.     moveq.l    #1,d2
  113. getoffs:
  114.     bsr.s    get_1_bit
  115.     dbcc    d2,getoffs
  116.     moveq.l    #0,d1        
  117.     move.b    1(a1,d2.w),d0    
  118.     ext.w    d0        
  119.     bsr.s    get_d0_bits
  120.     add.w    d2,d2        
  121.     add.w    6(a1,d2.w),d1    
  122.     bpl.s    depack_bytes    
  123.     sub.w    d4,d1        
  124.     bra.s    depack_bytes
  125.  
  126. get_offset_2:    
  127.     moveq.l    #0,d1        
  128.     moveq.l    #5,d0        
  129.     moveq.l    #-1,d2        
  130.     bsr.s    get_1_bit
  131.     bcc.s    less_40        
  132.     moveq.l    #8,d0        
  133.     moveq.l    #$3f,d2        
  134. less_40:
  135.     bsr.s    get_d0_bits
  136.     add.w    d2,d1        
  137.  
  138. depack_bytes:            
  139.     lea.l    2(a6,d4.w),a1    
  140.     adda.w    d1,a1        
  141.     move.b    -(a1),-(a6)    
  142. dep_b:    move.b    -(a1),-(a6)    
  143.     dbf    d4,dep_b    
  144.     bra    normal_bytes    
  145.  
  146.  
  147. direkt_tab:
  148.     dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001
  149.     dc.l 270-1,15-1,8-1,5-1,2-1
  150.  
  151. length_tab:
  152.     dc.b 9,1,0,-1,-1    
  153.     dc.b 8,4,2,1,0        
  154.  
  155. more_offset:
  156.     dc.b      11,4,7,0
  157.     dc.w    $11f,-1,$1f    
  158.  
  159. ;*************************************************** Ende der Unpackroutine
  160.