home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / math / classdoc / rfu.a < prev    next >
Encoding:
Text File  |  1993-07-28  |  3.2 KB  |  250 lines

  1.  
  2.     ; The Redundance Fighter Unpacker V1.20
  3.     ; written by Lutz Vieweg 1991
  4.  
  5.     include    src:class.mac
  6.  
  7. main    
  8.     textr    "HPHP48-E"
  9.     
  10.     rpl    Type_pgm
  11.     
  12.     rpl    Need_1_arg
  13.     
  14.     rpl    $02dcc
  15. pgmbeg    
  16.     rpl    pgmend-pgmbeg
  17.     
  18.     jsr    save_regs
  19.     
  20.      jsr    gc
  21.     
  22.     jsr    restore_regs
  23.     
  24.     move.a    (d1),c
  25.     move.a    c,d1
  26.     move.a    (d1),a
  27.     move.a    #$02a2c,c    ; string ?
  28.     bne.a    a,c,.2o
  29.     
  30.     add.a    #5,d1
  31.     move.a    (d1),a
  32.     move.a    #5+5+5,c
  33.     blt.a    a,c,.2o    ; lang genug?
  34.     
  35.     add.a    #5,d1
  36.     move.a    (d1),a
  37.     move.a    #$24652,c        ; !v
  38.     beq.a    a,c,.2n    ; RF-Datei ?
  39. .2o    
  40.     bra    bad_arg_error
  41. .2n    
  42.     add.a    #5,d1
  43.     jsr    avail_mem    ;in c.a
  44.     move.a    (d1),a    ;neue laenge
  45.     add.a    #5,d1
  46.     
  47.     sub.a    a,c
  48.     bcc    .3
  49. .4    
  50.     bra    mem_error
  51. .3    sub.a    #10,c
  52.     bcs    .4
  53.     
  54.     exg.a    d1,c
  55.     push        ; src adresse
  56.     
  57.     move.a    a,c
  58.     push        ; neue laenge
  59.     jsr    blkalloc
  60.     move.a    #regd1,d1
  61.     move.a    (d1),c
  62.     move.a    c,d1
  63.     exg.a    d0,c
  64.     move.a    c,(d1)    ; als neuer stacklevel 1
  65.     move.a    c,d1    ; dst adresse
  66.     pop
  67.     move.a    c,r2    ; noch zu entpacken
  68.     pop
  69.     move.a    c,r3    ; src adresse
  70.     
  71.     bsr    uncompress
  72.     
  73. leave_code    
  74.     bclr    #$a,st
  75.     jsr    restore_regs
  76.     move.a    (d0),a
  77.     add.a    #5,d0
  78.     jmp    (a)
  79.  
  80. uncompress    ; d1= DestAdd    r2= NibsToUnpack    d0/r3= SrcAdd
  81.     
  82. getbit    macro
  83.     dec.xs    d
  84.     bcc    .gb?cnt?
  85.     move.x    #$700,c
  86.     move.xs    c,d
  87.     move.b    (d0),c
  88.     move.b    c,d
  89.     add.a    #2,d0
  90. .gb?cnt?    add.b    d,d
  91.     endmac
  92.     
  93.     
  94.     
  95.     move.a    r3,c
  96.     move.a    c,d0    ; source add nach d0
  97.     
  98.     clr.x    d
  99.     
  100.     ;clr.s    d    ; test flag
  101.     
  102. nextncode    
  103.     getbit
  104.     bcs    .1
  105.     bra    nextfcode
  106. .1    
  107.     move.b    #5-1,c
  108.     bsr    getbits
  109.     bne.b    a,0,copy_norm
  110.             ; Nto31
  111. .2    
  112.     move.b    #6-1,c
  113.     bsr    getbits
  114.     beq.b    a,0,.3
  115.             ; Nto94
  116.     move.b    #31,c
  117.     add.b    c,a
  118.     bra    copy_norm
  119. .3            ; N95
  120.     move.b    #94,c
  121. .3b    
  122.     move.b    (d0),a
  123.     move.1    a,(d1)
  124.     add.a    #1,d0
  125.     add.a    #1,d1
  126.     dec.b    c
  127.     bcc    .3b
  128.     
  129.     move.a    r2,a
  130.     move.a    #95,c
  131.     sub.a    c,a
  132.     bcs    .3c
  133.     rteq.a    a,0
  134.     move.a    a,r2
  135.     bra    nextncode
  136. .3c    
  137. ba_err2    
  138.     bra    bad_arg_error
  139.     
  140.     
  141. copy_norm    ; anzahl in a.a (aber nur .b zu zaehlen...)
  142.     
  143.     move.b    a,b
  144.     dec.b    b
  145. .1    
  146.     move.b    (d0),c
  147.     move.1    c,(d1)
  148.     add.a    #1,d0
  149.     add.a    #1,d1
  150.     dec.b    b
  151.     bcc    .1
  152.     
  153.     move.a    r2,c
  154.     sub.a    a,c
  155.     bcs    ba_err2
  156.     
  157.     rteq.a    c,0
  158.     move.a    c,r2
  159.     
  160. nextfcode    
  161.     move.b    #3-1,c
  162.     bsr    getbits
  163.     bne.b    a,0,get_dist
  164.     ;        F5toF11
  165. .1    
  166.     move.b    #5-1,c
  167.     bsr    getbits
  168.     add.b    #8,a
  169. get_dist    
  170.     add.b    #4,a
  171.     
  172.     move.a    a,r0    ; erst mal feld-laenge merken
  173.     
  174.     move.b    #8-1,c
  175.     bsr    getbits
  176.     
  177.     exg.a    d0,c
  178.     move.a    c,r3    ; source adr merken
  179.     
  180.     move.b    r0,c
  181.     move.b    c,b    ;laenge fuer zaehler
  182.     
  183.     inc.a    a    ; dist += 1
  184.     
  185.     exg.a    d1,c
  186.     move.a    c,d1
  187.     sub.a    a,c
  188.     move.a    c,d0    ; copy_adr = dest-dist
  189.     
  190.     dec.b    b
  191. .1    
  192.     move.b    (d0),c
  193.     move.1    c,(d1)
  194.     add.a    #1,d0
  195.     add.a    #1,d1
  196.     dec.b    b
  197.     bcc    .1
  198.     
  199.     move.a    r2,c
  200.     move.a    r0,a
  201.     
  202.     sub.a    a,c
  203.     bcs    .2
  204.     rteq.a    c,0
  205.     move.a    c,r2
  206.     
  207.     move.a    r3,c
  208.     move.a    c,d0
  209.     
  210.     bra    nextncode
  211. .2    
  212.     bra    bad_arg_error
  213.  
  214. getbits    ; in c.b anzahl bits-1
  215.     ; in a.a => wert
  216.     
  217.     move.b    c,b
  218.     clr.a    a
  219. getbits2    
  220.     add.b    a,a
  221.     getbit
  222.     bcc    getbits1
  223.     inc.b    a
  224. getbits1    dec.b    b
  225.     bcc    getbits2
  226.     rtn
  227.  
  228.  
  229. mem_error    
  230.     move.a    #$4fbb,c
  231.     bra    err_exit
  232. bad_arg_error    
  233.     move.a    #$18ca7,c
  234.     
  235. err_exit    ; in c.a adresse
  236.     push
  237.     
  238.     bclr    #$a,st
  239.     jsr    restore_regs
  240.     rtn
  241.     
  242.     
  243. pgmend    
  244.     
  245.     
  246.     rpl    $0312b
  247.  
  248.     include    src:class.sym
  249.  
  250.