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

  1.         opt c+,d-
  2.     
  3. main    MOVEA.L    4(A7),A5
  4.     move.l $c(a5),d0
  5.     add.l $14(a5),d0
  6.     add.l $1c(a5),d0
  7.     add.l #$100,d0
  8.     move.l d0,-(sp)
  9.     move.l a5,-(sp)
  10.     move.l #$4a0000,-(sp)
  11.     trap #1
  12.     lea $c(a7),a7
  13. CHEAT    CLR.L    -(A7)
  14.     MOVE.W    #$20,-(A7)
  15.     TRAP    #$01
  16.     ADDQ.L    #6,A7
  17.     LEA    SUPERLNG(PC),A6
  18.     MOVE.L    D0,(A6)
  19.     MOVE.L    $84.w,tr1
  20.     MOVE.L    #T1,$84.w
  21.     MOVE.L    SUPERLNG(PC),-(A7)
  22.     MOVE.W    #$20,-(A7)
  23.     TRAP    #$01
  24.     ADDQ.L    #6,A7
  25.     clr.w -(sp)
  26.     pea $ffffffff
  27.     move.l (a7),-(sp)
  28.     move.w #5,-(sp)
  29.     trap #14
  30.     lea $c(a7),a7
  31.     pea text
  32.     move.w #9,-(sp)
  33.     trap #1
  34. stkk    clr.l $60000
  35.     pea $60000
  36.     move.l (a7),-(sp)
  37.     move.l #file,-(sp)
  38.     move.l #$4b0000,-(sp)
  39.     trap #1
  40.     lea $10(a7),a7
  41.     clr.w -(sp)
  42.     trap #1
  43. SUPERLNG    DC.L    0
  44.  
  45.  
  46. T1        movem.l    a0-a6/d0-d7,reg
  47.         movea.l    a7,a1
  48.         addq.l     #6,a1
  49.         move.w     (a7),d0
  50.         btst     #$d,d0
  51.         bne.s     ok1
  52.         move.l     usp,a1
  53. ok1        cmpi.w     #$3f,(a1)
  54.         beq.s     read
  55. open        movem.l     reg,a0-a6/d0-d7
  56. bye        dc.w     $4ef9
  57. tr1        dc.l     $0
  58. read        move.l     $8(a1),loadadd
  59.         move.l $2(a7),ex3f
  60.         move.l #cls,$2(a7)
  61.         bra.s open
  62. loadadd        dc.l 0
  63. siz2        dc.l 0
  64. cls        movem.l d0-d7/a0-a6,-(sp)
  65.         move.l d0,siz2
  66.         pea close
  67.         move.w #$26,-(sp)
  68.         trap #14
  69.         addq.l #6,sp
  70.         movem.l (a7)+,d0-d7/a0-a6
  71.         move.l siz2,d0
  72.         dc.w $4ef9
  73. ex3f        dc.l 0
  74. close        move.l loadadd,a0
  75.         bsr dep
  76.         rts
  77. reg        dc.l $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  78. text    dc.b 'LODERUNNER CRACKED BY THE EMPIRE',13,10
  79.     DC.B 'PACKED BY VAPOUR',0
  80.     EVEN
  81. file    dc.b 'lode',0
  82.     even
  83. ; A0 -> A0 depacker
  84. depack
  85. AU5_decrunch_2:
  86. dep    link    a3,#-120
  87.     movem.l    d0-a6,-(sp)
  88.     lea    120(a0),a4    
  89.     move.l    a4,a6        
  90.     bsr.s    .getinfo
  91.     cmpi.l    #'AU5!',d0    
  92.     bne    .not_packed
  93.     bsr.s    .getinfo    
  94.     lea.l    -8(a0,d0.l),a5    
  95.     bsr.s    .getinfo    
  96.     move.l    d0,(sp)
  97.     move.l  d0,siz2        
  98.     adda.l    d0,a6        
  99.     move.l    a6,a1
  100.  
  101.     moveq    #119,d0        
  102. .save:    move.b    -(a1),-(a3)    
  103.     dbf    d0,.save
  104.     move.l    a6,a3        
  105.     move.b    -(a5),d7    
  106.     bsr.s    .normal_bytes
  107.     move.l    a3,a5        
  108.  
  109.     bsr.s    .get_1_bit    
  110.     bcc.s    .no_picture    
  111.     move.w    #$0f9f,d7     
  112. .AU5_00:
  113.     moveq    #3,d6    
  114. .AU5_01:
  115.     move.w    -(a3),d4
  116.     moveq    #3,d5        
  117. .AU5_02:
  118.     add.w    d4,d4    
  119.     addx.w    d0,d0        
  120.     add.w    d4,d4        
  121.     addx.w    d1,d1        
  122.     add.w    d4,d4        
  123.     addx.w    d2,d2        
  124.     add.w    d4,d4        
  125.     addx.w    d3,d3        
  126.     dbra    d5,.AU5_02    
  127.     dbra    d6,.AU5_01    
  128.     movem.w    d0-d3,(a3)    
  129.     dbra    d7,.AU5_00    
  130. .no_picture
  131.     movem.l    (sp),d0-a3    
  132.  
  133. .move    move.b    (a4)+,(a0)+
  134.     subq.l    #1,d0
  135.     bne.s    .move
  136.     moveq    #119,d0        
  137. .rest    move.b    -(a3),-(a5)    
  138.     dbf    d0,.rest
  139. .not_packed:
  140.     movem.l    (sp)+,d0-a6
  141.     unlk    a3
  142.     rts
  143. .getinfo: 
  144.     moveq    #3,d1        
  145. .getbytes:
  146.     lsl.l    #8,d0    
  147.     move.b    (a0)+,d0
  148.     dbf    d1,.getbytes
  149.     rts
  150. .normal_bytes:    
  151.     bsr.s    .get_1_bit
  152.     bcc.s    .test_if_end    
  153.     moveq.l    #0,d1        
  154.     bsr.s    .get_1_bit
  155.     bcc.s    .copy_direkt    
  156.     lea.l    .direkt_tab+20(pc),a1
  157.     moveq.l    #4,d3
  158. .nextgb:
  159.     move.l    -(a1),d0
  160.     bsr.s    .get_d0_bits
  161.     swap.w    d0
  162.     cmp.w    d0,d1        
  163.     dbne    d3,.nextgb    
  164. .no_more: 
  165.     add.l    20(a1),d1     
  166. .copy_direkt:    
  167.     move.b    -(a5),-(a6)    
  168.     dbf    d1,.copy_direkt    
  169. .test_if_end:    
  170.     cmpa.l    a4,a6        
  171.     bgt.s    .strings    
  172.     rts    
  173.  
  174. .get_1_bit:
  175.     add.b    d7,d7        
  176.     bne.s    .bitfound     
  177.     move.b    -(a5),d7    
  178.     addx.b    d7,d7
  179. .bitfound:
  180.     rts    
  181.  
  182. .get_d0_bits:    
  183.     moveq.l    #0,d1        
  184. .hole_bit_loop:    
  185.     add.b    d7,d7        
  186.     bne.s    .on_d0        
  187.     move.b    -(a5),d7    
  188.     addx.b    d7,d7
  189. .on_d0:    addx.w    d1,d1        
  190.     dbf    d0,.hole_bit_loop    
  191.     rts    
  192.  
  193. .strings: 
  194.     lea.l    .length_tab(pc),a1    
  195.     moveq.l    #3,d2        
  196. .get_length_bit:    
  197.     bsr.s    .get_1_bit
  198.     dbcc    d2,.get_length_bit
  199. .no_length_bit:    
  200.     moveq.l    #0,d4        
  201.     moveq.l    #0,d1
  202.     move.b    1(a1,d2.w),d0    
  203.     ext.w    d0        
  204.     bmi.s    .no_über    
  205. .get_über:
  206.     bsr.s    .get_d0_bits
  207. .no_über:
  208.     move.b    6(a1,d2.w),d4
  209.     add.w    d1,d4    
  210.     beq.s    .get_offset_2    
  211.  
  212.     lea.l    .more_offset(pc),a1 
  213.     moveq.l    #1,d2
  214. .getoffs: 
  215.     bsr.s    .get_1_bit
  216.     dbcc    d2,.getoffs
  217.     moveq.l    #0,d1        
  218.     move.b    1(a1,d2.w),d0    
  219.     ext.w    d0        
  220.     bsr.s    .get_d0_bits
  221.     add.w    d2,d2        
  222.     add.w    6(a1,d2.w),d1    
  223.     bpl.s    .depack_bytes    
  224.     sub.w    d4,d1        
  225.     bra.s    .depack_bytes
  226.  
  227.  
  228. .get_offset_2:    
  229.     moveq.l    #0,d1        
  230.     moveq.l    #5,d0        
  231.     moveq.l    #-1,d2        
  232.     bsr.s    .get_1_bit
  233.     bcc.s    .less_40    
  234.     moveq.l    #8,d0        
  235.     moveq.l    #$3f,d2        
  236. .less_40: 
  237.     bsr.s    .get_d0_bits
  238.     add.w    d2,d1        
  239.  
  240. .depack_bytes:            
  241.     lea.l    2(a6,d4.w),a1    
  242.     adda.w    d1,a1        
  243.     move.b    -(a1),-(a6)    
  244. .dep_b:    move.b    -(a1),-(a6)    
  245.     dbf    d4,.dep_b     
  246.     bra    .normal_bytes    
  247.  
  248.  
  249. .direkt_tab:
  250.     dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001    
  251.     dc.l 270-1,15-1,8-1,5-1,2-1    
  252.  
  253. .length_tab:
  254.     dc.b 9,1,0,-1,-1    
  255.     dc.b 8,4,2,1,0        
  256.  
  257. .more_offset:
  258.     dc.b      11,   4,   7,  0    
  259.     dc.w    $11f,  -1, $1f    
  260.  
  261. ende_AU5_decrunch_2:
  262. ;*************************************************** Ende der Unpackroutine
  263.