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

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