home *** CD-ROM | disk | FTP | other *** search
-
- ; The Redundance Fighter Unpacker V1.20
- ; written by Lutz Vieweg 1991
-
- include src:class.mac
-
- main
- textr "HPHP48-E"
-
- rpl Type_pgm
-
- rpl Need_1_arg
-
- rpl $02dcc
- pgmbeg
- rpl pgmend-pgmbeg
-
- jsr save_regs
-
- jsr gc
-
- jsr restore_regs
-
- move.a (d1),c
- move.a c,d1
- move.a (d1),a
- move.a #$02a2c,c ; string ?
- bne.a a,c,.2o
-
- add.a #5,d1
- move.a (d1),a
- move.a #5+5+5,c
- blt.a a,c,.2o ; lang genug?
-
- add.a #5,d1
- move.a (d1),a
- move.a #$24652,c ; !v
- beq.a a,c,.2n ; RF-Datei ?
- .2o
- bra bad_arg_error
- .2n
- add.a #5,d1
- jsr avail_mem ;in c.a
- move.a (d1),a ;neue laenge
- add.a #5,d1
-
- sub.a a,c
- bcc .3
- .4
- bra mem_error
- .3 sub.a #10,c
- bcs .4
-
- exg.a d1,c
- push ; src adresse
-
- move.a a,c
- push ; neue laenge
- jsr blkalloc
- move.a #regd1,d1
- move.a (d1),c
- move.a c,d1
- exg.a d0,c
- move.a c,(d1) ; als neuer stacklevel 1
- move.a c,d1 ; dst adresse
- pop
- move.a c,r2 ; noch zu entpacken
- pop
- move.a c,r3 ; src adresse
-
- bsr uncompress
-
- leave_code
- bclr #$a,st
- jsr restore_regs
- move.a (d0),a
- add.a #5,d0
- jmp (a)
-
- uncompress ; d1= DestAdd r2= NibsToUnpack d0/r3= SrcAdd
-
- getbit macro
- dec.xs d
- bcc .gb?cnt?
- move.x #$700,c
- move.xs c,d
- move.b (d0),c
- move.b c,d
- add.a #2,d0
- .gb?cnt? add.b d,d
- endmac
-
-
-
- move.a r3,c
- move.a c,d0 ; source add nach d0
-
- clr.x d
-
- ;clr.s d ; test flag
-
- nextncode
- getbit
- bcs .1
- bra nextfcode
- .1
- move.b #5-1,c
- bsr getbits
- bne.b a,0,copy_norm
- ; Nto31
- .2
- move.b #6-1,c
- bsr getbits
- beq.b a,0,.3
- ; Nto94
- move.b #31,c
- add.b c,a
- bra copy_norm
- .3 ; N95
- move.b #94,c
- .3b
- move.b (d0),a
- move.1 a,(d1)
- add.a #1,d0
- add.a #1,d1
- dec.b c
- bcc .3b
-
- move.a r2,a
- move.a #95,c
- sub.a c,a
- bcs .3c
- rteq.a a,0
- move.a a,r2
- bra nextncode
- .3c
- ba_err2
- bra bad_arg_error
-
-
- copy_norm ; anzahl in a.a (aber nur .b zu zaehlen...)
-
- move.b a,b
- dec.b b
- .1
- move.b (d0),c
- move.1 c,(d1)
- add.a #1,d0
- add.a #1,d1
- dec.b b
- bcc .1
-
- move.a r2,c
- sub.a a,c
- bcs ba_err2
-
- rteq.a c,0
- move.a c,r2
-
- nextfcode
- move.b #3-1,c
- bsr getbits
- bne.b a,0,get_dist
- ; F5toF11
- .1
- move.b #5-1,c
- bsr getbits
- add.b #8,a
- get_dist
- add.b #4,a
-
- move.a a,r0 ; erst mal feld-laenge merken
-
- move.b #8-1,c
- bsr getbits
-
- exg.a d0,c
- move.a c,r3 ; source adr merken
-
- move.b r0,c
- move.b c,b ;laenge fuer zaehler
-
- inc.a a ; dist += 1
-
- exg.a d1,c
- move.a c,d1
- sub.a a,c
- move.a c,d0 ; copy_adr = dest-dist
-
- dec.b b
- .1
- move.b (d0),c
- move.1 c,(d1)
- add.a #1,d0
- add.a #1,d1
- dec.b b
- bcc .1
-
- move.a r2,c
- move.a r0,a
-
- sub.a a,c
- bcs .2
- rteq.a c,0
- move.a c,r2
-
- move.a r3,c
- move.a c,d0
-
- bra nextncode
- .2
- bra bad_arg_error
-
- getbits ; in c.b anzahl bits-1
- ; in a.a => wert
-
- move.b c,b
- clr.a a
- getbits2
- add.b a,a
- getbit
- bcc getbits1
- inc.b a
- getbits1 dec.b b
- bcc getbits2
- rtn
-
-
- mem_error
- move.a #$4fbb,c
- bra err_exit
- bad_arg_error
- move.a #$18ca7,c
-
- err_exit ; in c.a adresse
- push
-
- bclr #$a,st
- jsr restore_regs
- rtn
-
-
- pgmend
-
-
- rpl $0312b
-
- include src:class.sym
-
-