Q`ph M@<=|wAa x*$HA 4VgD 4VgZ 8&1AY&gb<@Aa~"<Sf<w=|NuA \`gAaP`AaD` Aa8<Aa,`<Aaa&H@ ;g `D`V.z' ! Э fHUP6JL?a(k /j:,HNׯ0%⪳QpapES7;*gJ !)|(Y'"0NB>Jy).U)a `p*]N&p[ՎHQ6"_g$*fB!&1;ʤ$Ip@BQ@AJf]:REGc0r t׀aM@JgSH\]&f ILѾ06B=kOQVtHB 3?k#`b`^O2&\/Laa`Qv{BgHz/XOJ@jP%4:4 ,BuC.a!"QHHQ \OL?NP3/4L /HA nNuBAU#4RWp1eTOMKL5}/3ze$h1&}FIRE01*%fN h.<6,L{,fCE!:]AM [ʲxĘbgu-& 'LIce!v-H0tZWv(3rkN.51ݤ($`^2!`zoP0 5#LcBV +['zn #`FBIpbV3 @8H44 L?W`s2&@EKAf*H,H0?,xIxE k6 ~#̏n#6L R['=`nYf>f0/3$QБk0tf/3p#j\\PyA8,%@G#1W<䃉1|Urj#XC+` *o"mEV$"mEX$ED$B?< NA\M,,?<NNTC8"$@?<NNTA,2<<g2<gBQC|9<f|%Hz?< NA\a3@/:?< NA\*zʛ&z k -"zJgёBJAg<f``&zt+k +k+k  -"- Ҁ+A -Ҁ+A :Xм$@*@$<8C2Q"z((I$: R(z&L,z$z:N&&Q"o&iBm2<<g2<gBQNE4@ z"z$`G&G&* faxe2V0C b@ĂWv, D kR0.$F ~ `4 ER H H&Yl Ġ$h 8h UZ! ? @qr%!BE@f_ d(JH@`HU n@րP `$%@$@2$& A"@~b@LA/a" `,!M @@  p|~ `hzas:@8@ D ,eA@KD Ā^P P ](!$ /G8.>l3 U9Q%7F:z u(w, dR`*BAԪl5.<0=44; je'.CKB8 Tjh`Vj EU ((#J>UѝHM*+0(vDjhnh}\3 v ЍLkJ*A ں8L(hdA`PS5#q:v06d~ t1v{@v,N(HG`Tv3+F6v% ] `TYUY@ިimFAR  s0u*Of`J3N[^Z\#c`Bog` u6vp$!willdG¡pA *  !'KK;sCsn\ @ʼ9 @`Q@0($`*U ]j2@"PP  ,̀̂W9XT @s.ebk# `vn@&AJH-@( s! P^D2#!0dH#)X[X+|kh)T:@8ٛ8 uB `p@88$ O3X\J @”2BlG2We|7V)* B$8`j@J<qA QD9S&7'~!K@Pq>P 2FU ! /rP jRJ" 1\ Z ` hhI0`0.!Q]B:M> v@$@ `A!!4@0AA P`!&cx e6FD;,ʅ"!&ҒȂC$d!!bT0H0"Dh#q H\R3@ p!&=)#q^D(Ұ9yWX0$&` S.&au"*RqtcOa0EtF@d 4d\b$ХŁ/dcJT 4Z:-"DaN{A @D d yAtBY# p1.p0I HA(B2\TXx@ɢ ~j ~h@`R# P7$ W* n6( (9@ P l8 8@  5B(q`9U@E2,`QX1lapDf 4]Z`0L*X(! PP`$  @ 01:4 `b4'phaM     `" @FArA ! 8$:((4`xj9Lt lLHH0` D     !'/"<) !   $$"     #F1ѻHQ WA @B2$394+!ȿ +211-'            .  `..  4`PACK2_31PRG it `)V*Z?<NN @0<}BQ>NNJA6g|9HP?< NAPOAB a&MM +ЫЫA .GIJgrѓB(g<fG``GPN$^,,,,ܓ,,Cp$L(QGX /KN(K&YdB`BN/K ,HNRK&`:UgdCDE`$|a^g`|aVg E`&`| aDECI&4fLf&e|`@|a$J*g2P`f``BEg EQJENu&`|a84@HJ*fXF`.a2I|aʺ<m|ag |aEA`*`2P:`aDgt@IP$$Q` f&ed&fg^|avg &CrtfTATAQP`Q|aJgCpQP`QBC&&H&&M``NZ,Nu ``````Y %ATOMIK v3.5 by ALTAIR VMAX/MCSQ4&ّPlAu*o͵3r,p`όQn.Z/\]%Z@٢ҢXb(6?*W@P?OB]y$zEϺI'G0Q×8>kw+7Бr9K?.<&kZbԗ.YmQִO[ZNL.,d0eH0QA=e=SC+U wLDԏ["OL1-ª[e[K30 OPjԫ1 IzRM۪4>iV E rvx1ַZv.Z V2Z Jh{ 4[O k?1˶uo4!@XAʕaL+2BPBZt 5]Ai4WtDN*-WFJ+-k zM ,Fyp4uM[v5[AnO5,}Z4Y–T̢vpK cTUK Kh-trk`'?7( PЭ\U朥JVީ(&*Xk,"p\6;#OYbcsq}iuVf4X TJAW*BsY.=k.'/(pZ?(OkݳNPr)P|GPZve\IIIt阁Q;JJN JBۮvO c-^u.K6:&쐌I!|#v:ƨ!ú^P.V zGCv&%:Gt, S tIFt](GF`2ɰ-_H(^k&Fww*N~gXQ& 8F2Pvhvh;eFQx#4SZP<ۂaE ? /GP(l:xjp4(:EVYbT~+"fZx"Jx ]C54Tڝņ(4&T m$ͬuQ?,]+V-= x=zOyzNYrB½v?Ni ZmC0O];ΪV)r 4#hJWZ> Z]"4 ϖ"X4*p5B{"^΢є)#2F-S '6IPi}^j:5V?=HWP\WSH^}k58#4??Q4eXeܒ8%3PmY( ]>nB$1&SGcߐr'ABljO+irqTaZR/Z B"Id~T YI&iHբكXomӀr6j~ǭ5C߁ \"3%0ЁЃP`!"$L-I΢'T *~/RD.cv" VCGFW 8)$I2Ȕo $:qrd?\qV*,L :EߓEXEugdƽ7dE4נh|($ @,&z%pJ@|PkHXչVPռ< c$BkX8Ж3jJ)?.LPZEP\%U'f!'X$vi*X\O~eB4wak*V4bn F4R#m@0xlМ3h(z@\(-h~TM 5Pdpw#;OWnMP#-,ΰ*XM Usv~B3̢~C(#\ Ovg PLkaztb"eG-m#\JǓ*0 *+_+op 3dqOOk@nz|J:0(:BMUAYJN5:j@[P1|ȸo)ȚK,$*z?2PiS&2 ~?>?lj??rn"9Y̝@`貞lx1O"+nSX>k= g8T9$V<_5o6 W**mL5LJlh_ rnTRZP(~ 0T5Ft$r#P#h$ tlBޭMopmx؈o8 IUJzo,3PQ* HSm|bn !eET3DQ$_tbM KN y6S52M`T:/zJB8 t I .BQ6[)J(^Њ_ 3̺-&f.o6..DP2f:?CYz>o5[w}`xzrGL`ȱRD2hGMht(QJtsZꥨ-JJrѰJB@"ݖSruA^PX$vg˖@Qn-&p6TjV3mft7j$ T(0\]QGif0mT q$hSBS(-_ံz$J&ЀЃҀ҂]$5EQ8*nLS ˈ+*p~qn?0P-wGtȵ m겼l d4l4zܐjeP:08xL6n.0mb qEkź˹[lF@ 0Dv3BŭX,\6|e?GˆTr0F3:P| ۄl&aVh?0:դw<TQ$o0aZ<#GOzXJ9Yލ82?l6rC=D?vn ҟv3 Jv^.& Zmo_{{?0d6;0p:4<eQcGu"M'?G}0lzX~`B@Q޸ve5eC's d@_B(ַrLGZ8@0<}B>f>Nh6(|9mWP?) N3PyOB=dÌEM+uy}.IJG-G:PN$^,9ܓ,,p8$L( GX8N(K&YdrBN/K],9N}K^_r:bUid<}E=$,^o|3V k}|" E>>I~&4>L$@|B@|4$W?h`K}pĀBEzEQJEy@)Q84@J$kXF3.rz2IP<m |TE y9*Ƽg2P:`zxt@IP~$\) 9&ed&͠^oIv9IrtNQ|pJ pQPPPQ9B&g`s&&M@bNZ,Nurrrrr8}8%$*byD./--@[@88că@ sz: c{-Ic4FXj}j 3  Sq ziLz#Nxr"Nz*V@2^:@E!My)U1]pLx(T<h}">Ў;Z P"܏9Ѡ 3@wkvDmlS_ln,(27/1/92 y|TиqirP+,l |8'_g&QF!.ZF_{TMKm_F719@62PUB/8ǾZ<:?#C0b|ЅCQH^(9@/SQ)- E|+,'q@*S R'.2[VHR.4yv[C Vr*7`Fh!U '-O|37F>`} N JaOFFJ+)7no>թH \Ƌ586JNXtEcS],qLUܽbJĆ&䱧[#ۂpvSE۷_IGS-F5EXFOMA +`L !W]\Bsc&!+#OKdA|LOJwBXۆ00(~(A1*%mSۆ{oO_(S),_CdB)^٢[i0u6h.jLip}&3md`Msc#F@Ywʲh, k,nyly1sq<:'sͅJêe>,$@ro:mto"pU+!i 2DPL@enzno0rwJMƀ.:p417iQX?eQ!۬yaJ:,%RerMi< Kwd$22i-juO,om$X7d00bytesB~Sy>m!2Js[ex,pilFnumb]%ec= outo8zmelyX y Jl,6@>FT`_ێVBj(_*(U_O+,7)=a$qF[IYodls'u+epBl\'bhe̟6om5Yl'umז]inqur2v4be-Sy_LrjFmvri1:$TS*Ԝ'Pr-v2cet 'mbiti?Pto7u5einegs,co8ctez|xq ipVmF.N.æT.MFIs(nire@Sbtndr dqeosFnsO051KAS[~q v:92C6316q sYUdWEhX|S[B$nNՔ`@IƒM>DOCJ"@5^+1W5h4$?X `5M|VU$"eVF) Ӕf턦YK't(TOP!2'gK)V U7`: x1TD*)S{bW%(>k]2W+?ͭH:S'~(50%Hz}3UL,(iJ &A1/4G@k5X\ PfXT`OLyLFDOdOT4\&UY3S67lIENgOF'TnE.GEENGSSETION8BY8  PG*.*%,i48j:@sZu>=NJN ~<LXF ^j N8$q 'N b4L >$* И 4">0t> }" L $>  ~V "}z < 2 @4QCDaAgRfH` z                 `` ?<NN @0<}BQ>NNJA6g|9HP?< NAPOAB a&MM +ЫЫA .GIJgrѓB(g<fG``GPN$^,,,,ܓ,,Cp$L(QGX /KN(K&YdB`BN/K ,HNRK&`:UgdCDE`$|a^g`|aVg E`&`| aDECI&4fLf&e|`@|a$J*g2P`f``BEg EQJENu&`|a84@HJ*fXF`.a2I|aʺ<m|ag |aEA`*`2P:`aDgt@IP$$Q` f&ed&fg^|avg &CrtfTATAQP`Q|aJgCpQP`QBC&&H&&M``NZ,Nu ``````Y %ATOMIK v3.5 by ALTAIR VMAX/MCS:v0Rhy1OPXOQ o PАh P?.V#jO*g:,z\&WnrLp>TE; @BNxO \Lka*XK$47r Ёm 2g͆%mHZt#0b/(Mw,p5|iX@:KGr@,ܡ+RUV%:-UdCD@}$^6|V sO| D:CI4L7Ҁ|x@-b$MQ}_ԀBtJ+(84@tJHfXF3.sw2I8ʺm,4e |G1u9*b2P:KDÎt@IP$J edȷ·^]IvdLRrt8_`T<|xJ}vC p惕P$GBCFMc_&_NZ8.O-g#L){.z sd?77>:ԃ=8Er#^C q@y3$I! (I$ D&}|0zB C@ Dѩ d0<?"F2M}2 Ie ,$D$H"ޖuyty\OBvx:j1J8X<".z ?`(POC@|DO"r0<Y^ . 3\zp~p`pE " [#GTM5CfQA&agEH`N   "          ,(                 " &(    !     ;ATOMIK DECRUNCH SOURCE CODE v3.5 (non optimise, pas le temps. sorry...) ;ce depacker est indissociable du programme ATOMIK V3.5 tous les mecs ;qui garderons se source dans l'espoir de prendre de l'importance ;en se disant moi je l'ai et pas l'autre sont des lamers. ;MODE=1 depack data from a0 to a0 ;MODE=0 depack data from a0 to a1 (RESTORE SPACE a 1 inutile! si MODE=0) ;PIC_ALGO = 0 decrunch file not encoded with special picture algorythm. ;PIC_ALGO = 1 decrunch all files with or without picture algorythm. ;DEC_SPACE = (lesser decrunch space is gived after packing by atomik v3.5) ;RESTORE_SPACE = 1 the allocated decrunch space will be restored . ;RESTORE_SPACE = 0 the allocated decrunch space will not be restored. ;call it by BSR DEPACK or JSR DEPACK but call it! MODE: EQU 0 PIC_ALGO: EQU 0 DEC_SPACE: EQU $80 ;MAX IS $7FFE (no odd value!) RESTORE_SPACE: EQU 0 depack: movem.l d0-a6,-(a7) cmp.l #"ATM5",(a0)+ bne not_packed link a2,#-28 move.l (a0)+,d0 ifne MODE lea 4(a0,d0.l),a5 move.l d0,-(a7) elseif move.l a1,a5 add.l d0,a5 endc move.l a5,a4 ifne MODE ifne DEC_SPACE lea DEC_SPACE(a4),a5 endc endc lea -$c(a4),a4 move.l (a0)+,d0 move.l a0,a6 add.l d0,a6 ifne PIC_ALGO moveq #0,d0 move.b -(a6),d0 move d0,-2(a2) ifne RESTORE_SPACE lsl #2,d0 sub d0,a4 endc elseif ifne RESTORE_SPACE clr -2(a2) endc subq #1,a6 endc ifne RESTORE_SPACE lea buff_marg(pc),a3 move -2(a2),d0 lsl #2,d0 add #DEC_SPACE+$C,d0 bra.s .save .save_m: move.b (a4)+,(a3)+ subq #1,d0 .save: bne.s .save_m movem.l a3-a4,-(a7) endc ifne PIC_ALGO pea (a5) endc move.b -(a6),d7 bra take_type decrunch: move d3,d5 take_lenght: add.b d7,d7 .cont_take: dbcs d5,take_lenght beq.s .empty1 bcc.s .next_cod sub d3,d5 neg d5 bra.s .do_copy1 .next_cod: moveq #3,d6 bsr.s get_bit2 beq.s .next_cod1 bra.s .do_copy .next_cod1: moveq #7,d6 bsr.s get_bit2 beq.s .next_cod2 add #15,d5 bra.s .do_copy .empty1: move.b -(a6),d7 addx.b d7,d7 bra.s .cont_take .next_cod2: moveq #13,d6 bsr.s get_bit2 add #255+15,d5 .do_copy: add d3,d5 .do_copy1: lea decrun_table(pc),a4 move d5,d2 bne.s bigger add.b d7,d7 bne.s .not_empty move.b -(a6),d7 addx.b d7,d7 .not_empty: bcs.s .ho_kesako moveq #1,d6 bra.s word .ho_kesako: moveq #3,d6 bsr.s get_bit2 tst.b -28(a2) beq.s .ho_kesako1 move.b 10-28(a2,d5.w),-(a5) bra tst_end .ho_kesako1: move.b (a5),d0 btst #3,d5 bne.s .ho_kesako2 bra.s .ho_kesako3 .ho_kesako2: add.b #$f0,d5 .ho_kesako3: sub.b d5,d0 move.b d0,-(a5) bra tst_end get_bit2: clr d5 .get_bits: add.b d7,d7 beq.s .empty .cont: addx d5,d5 dbf d6,.get_bits tst d5 rts .empty: move.b -(a6),d7 addx.b d7,d7 bra.s .cont bigger: moveq #2,d6 word: bsr.s get_bit2 contus: move d5,d4 move.b 14(a4,d4.w),d6 ext d6 tst.b 1-28(a2) bne.s .spe_ofcod1 addq #4,d6 bra.s .nospe_ofcod1 .spe_ofcod1: bsr.s get_bit2 move d5,d1 lsl #4,d1 moveq #2,d6 bsr.s get_bit2 cmp.b #7,d5 blt.s .take_orof moveq #0,d6 bsr.s get_bit2 beq.s .its_little moveq #2,d6 bsr.s get_bit2 add d5,d5 or d1,d5 bra.s .spe_ofcod2 .its_little: or.b 2-28(a2),d1 bra.s .spe_ofcod3 .take_orof: or.b 3-28(a2,d5.w),d1 .spe_ofcod3: move d1,d5 bra.s .spe_ofcod2 .nospe_ofcod1: bsr.s get_bit2 .spe_ofcod2: add d4,d4 beq.s .first add -2(a4,d4.w),d5 .first: lea 1(a5,d5.w),a4 move.b -(a4),-(a5) .copy_same: move.b -(a4),-(a5) dbf d2,.copy_same bra.s tst_end make_jnk: add.b d7,d7 bne.s .not_empty move.b -(a6),d7 addx.b d7,d7 .not_empty: bcs.s string move.b -(a6),-(a5) tst_end: cmp.l a5,a3 bne.s make_jnk cmp.l a6,a0 beq.s work_done take_type: moveq #0,d6 bsr get_bit2 beq.s .nospe_ofcod move.b -(a6),d0 lea 2-28(a2),a1 move.b d0,(a1)+ moveq #1,d1 moveq #6,d2 .next: cmp.b d0,d1 bne.s .no_off_4b addq #2,d1 .no_off_4b: move.b d1,(a1)+ addq #2,d1 dbf d2,.next st 1-28(a2) bra.s .spe_ofcod .nospe_ofcod: sf 1-28(a2) .spe_ofcod: moveq #0,d6 bsr get_bit2 beq.s .relatif lea 10-28(a2),a1 moveq #15,d0 .next_f: move.b -(a6),(a1)+ dbf d0,.next_f st -28(a2) bra.s .freq .relatif: sf -28(a2) .freq: clr d3 move.b -(a6),d3 move.b -(a6),d0 lsl #8,d0 move.b -(a6),d0 move.l a5,a3 sub d0,a3 bra.s make_jnk string: bra decrunch work_done: ifne PIC_ALGO move.l (a7)+,a0 pea (a2) bsr.s decod_picture move.l (a7)+,a2 endc ifne RESTORE_SPACE movem.l (a7)+,a3-a4 endc ifne MODE move.l (a7)+,d0 bsr copy_decrun endc ifne RESTORE_SPACE move -2(a2),d0 lsl #2,d0 add #DEC_SPACE+$C,d0 bra.s .restore .restore_m: move.b -(a3),-(a4) subq #1,d0 .restore: bne.s .restore_m endc unlk a2 not_packed: movem.l (a7)+,d0-a6 rts decrun_table: dc.w 32,32+64,32+64+256,32+64+256+512,32+64+256+512+1024 dc.w 32+64+256+512+1024+2048,32+64+256+512+1024+2048+4096 dc.b 0,1,3,4,5,6,7,8 ifne PIC_ALGO decod_picture: move -2(a2),d7 .next_picture: dbf d7,.decod_algo rts .decod_algo: move.l -(a0),d0 lea 0(a5,d0.l),a1 .no_odd: lea $7d00(a1),a2 .next_planes: moveq #3,d6 .next_word: move (a1)+,d0 moveq #3,d5 .next_bits: add d0,d0 addx d1,d1 add d0,d0 addx d2,d2 add d0,d0 addx d3,d3 add d0,d0 addx d4,d4 dbf d5,.next_bits dbf d6,.next_word movem d1-d4,-8(a1) cmp.l a1,a2 bne.s .next_planes bra.s .next_picture endc ifne MODE copy_decrun: lsr.l #4,d0 lea -12(a6),a6 .copy_decrun: rept 4 move.l (a5)+,(a6)+ endr dbf d0,.copy_decrun rts endc ifne RESTORE_SPACE buff_marg: dcb.b $90+DEC_SPACE+$C endc end               #           ATOMIK V3.5 This program is actually the best compression program on the st the compression rates are better than all the other packer in 95% case. the old version of atomik had some bug but now you can be sure that this one is really totally free from error. some changes in atomik v3.5: for interupt atomik you must now use undo you can now archive files by using the multi pack and multi depack option AUTO_DEC.PRG This program is done for data file unpacking. Exemple: you can pack all your modules with ATOMIK v3.5 and put AUTO_DEC.PRG IN \AUTO\ or just by double clicking on it. After you can use your soundtracker with packed modules! AUTO_DEC.PRG will be installed in memory and it will change vector $84 (TRAP #1) for uncrunch each loaded data file wich start by "ATM5". You can use it with your old source code too. Caution: -cannot be used when file lenght is used like included source code -cannot be used when the file is only partialy read  exemple: degelite start by reading the first values of the file for testing the picture file type... so you can pack your degelite pictures only for archive them but it cannot be read by degelite using AUTO_DEC.PRG so when you want to use your pictures with degelite you must start by unpacking them with the unpacking option of ATOMIK v3.5  RELOC_V4.PRG This program is one of the first program i have written on st first it was called monst relocator and now it is adebug relocator this program can do the following things 1.) It can relocate adebug everywhere you want to a.) In top of memory b.) In low of memory c.) Enter adress you want to. 2.) An antivirus system This anti virus don't know a lot of boot sector it will just reconize AVK 3.6,SAGROTAN,GHOST and its own old boot But the quality of this anti-virus is that the TDT v4.0 boot sector you can install with RELOC_V4.PRG in the V option will copy itself to other disk when it are empty or contain ghost virus! This is the best protection against ghost virus! The TDT V3.0 (called TDT VIRUS) had a big bug it copy itself everywhere ecxepted when the disk contain the ghost virus!! flag bug!. For atomik 3.5 i have coded the algorythm 8 month before but some familly problems appears and i couldn't finish the code. Now it's done and i'm hardly working on atomik pro wich will be shortly comercialised by THUNDERSOFT dvlp. Ok that's all for today freaks! good bye. ALTAIR from VMAX/MCS.                         `z ?<NN @0<}BQ>NNJA6g|9HP?< NAPOAB a&MM +ЫЫA .GIJgrѓB(g<fG``GPN$^,,,,ܓ,,Cp$L(QGX /KN(K&YdB`BN/K ,HNRK&`:UgdCDE`$|a^g`|aVg E`&`| aDECI&4fLf&e|`@|a$J*g2P`f``BEg EQJENu&`|a84@HJ*fXF`.a2I|aʺ<m|ag |aEA`*`2P:`aDgt@IP$$Q` f&ed&fg^|avg &CrtfTATAQP`Q|aJgCpQP`QBC&&H&&M``NZ,Nu ``````Y %ATOMIK v3.5 by ALTAIR VMAX/MCS s v?&*ـ/?/J/\:;P2T"":#BX/aI4so2/|Hڊa/?تKBwcjR5X1PX2 3Jw~@E=AVųZֻTFC 3 1ɉ~k 2yp5H~Ip: jSG#Lr h_`0k n('{mA knbN"nWNx cUTA4e":X5$PsU1xުtzҤm15Pu`s3OګȨ8h.u@e݈܎i[0@r5!V%ĉ25 1$Kx(m¾Ru4"4j,nIe-^*|${.2&n?I`nN2h|Jlbj|J[rd t.UpgPT 0&/\ 620S`6\@0`֌}kW&ⒺPۥ;Z7FW{]= $P%_PUW͐gh}Cf<PJ+b8H"Hv-2wPk]/lv"KJGeJriU )nq|v`Gdx.V Q7(h:X"ěIX}>Y]/7624ȚXhY}|UHPMvIt27JCFJJBsvcR^yz0Qؠ+J: 9D+L gSFBN*F''Em/R m KrqsH? \zhڤP>0TZ'Fx^J]a:!-VUHhL2ףuѐL?^zzHxHye?5yB/8 ?Kr7$\Q|-'L 'ckPoN4.Ca@$*E(8yvE=PqJ޲CQeCvvS(;wBoԜrкsbLcck(cGJdied+ disBz%He;re9Z@_4mx_CdrlG<$FO2i4d0(_numCcqgro\I~Fstr.mce8mtdt(iruHs; 7@2pzC_J210Vysook_mut+nt,vDlue_bul@aother_veH@8rsion N RApga`f xx|X+ K /whWxB഑Wxhp4wPĐWp^gZ(Ӻ:߰Ȧ .  W @?8 ;$/,?ذ-"&Ң / OjZ %4)KH.B ?H/}rxx@ '4踷GL,_` /Zo JG8.  `...  4`ATOM_V35PRG Hr)AUTO_DECPRG K|DEPACK35S M!&READ_ME TXT U'P RELOC_V4PRG X*"`&?<NN @0<}BQ>NNJAg|9HP?< NAPOA a&MM +ЫЫA .GIJgrѓB(g<fG``GPN$^,,,,ܓ,,Cp$L(QGX /KN(K&YdB`BNK~ M&`I |a``X|g"TezF`$|aHg\E`|a>g E`&`| a,E?f:I|a|m4TO]En(MmXL|a4P`>BEg EQJENu&`Ix|a84@HaDgt@IP:$$Q| z gDTeF`|agPEVE`|aHE|aPVSEk|HF&Qjf"<fNu&` `````` `` Y %ATOMIK v3.3 by ALTAIR VMAX/MCS;p:*o/0cSggg@ u 7Z~AL#H c0mwpBX_3k4jn T,}$g-&% 5fɳXl G%Z#˽?8t0'Y~&vrtkR2mNBͨPS&:;%a ~0jbHQf]"_)*fB!$ce;C6*$Ip@B7*TO˥AVn:hRiGOEL/#a JgSH{S9&$+f| .x) PYa! "q\@j @ЭtHUCJ;ay(zk Hm޸t@RE/=4\{Ԅ&\Ɉ`%v0{$t:eS6Af JWH2v|@ c֍-Pi:CI#c5hp#>$gbOw ֟,"#Merkb(*1)V#^H0hNg2f: : 6]8Nt@PƢtvn Y|à߸8!|EJƙt$8/2_RvC>jJeBSDG0*2Lo ^I{AO($݁):t?P }gF2ny9n,0k3 L?;@7kְFn銄Q2G~A 6@EgRC.͘yغFB(2ޚ:0%8yudFg$zҸYj$HCO<SFk3a0ꝐZ!S=" Q|:nfcn˗h"Id T PPH|wor\F<%XHG%=G PiXun<.}0fDz^$A^b]VP3j7gC)zL+#$I24 Eν$:r E}#! [g>.&zJ@fxj)>'F&7l(D!Ƞ~mphxh:vKlP8fIJSzzf\O~:+g03?`&|І2R>/X =1aOAl" I^gATOM:"JR#(չ#@*XMHU`B3m (#vBLFG&[J2} ،3R<$sYڑo6W1f.R3U,SLJl$ 7SBTy',^$t ffz`L< 9~g4l\rY@_Dq\e]@XAv-S@2:n$L?BV̹\t*8i TS_\@6Fln< r03[@4^ X7s RͽqRaJrvDA@ *& ZmjDCf O&G>;$Ec620SCICJC~;v_@@(VW NT.Jf&"< nvs4C~ |VnC"vz QW  vFMaHCt_KUd~Q/C}L|_y]mABxC_W0ճf*H#/ CIr8"(Egm$z tSJ3.s>-V<|<łRspD2<-FM1*0,'QIIL"Hxp$ HU{[̿;'H;_a6]>PQϾ$u]GBC~E}90z~ABxC@D4Ht NJ+4r9H3k? NaPOAˇLǎ&M)+مЫ}Aș.|IJgrѓB(gfG_GPN$^ ܓ,C+p$L(QGX/;/N(K&Yd5BNK~M 41X g 2| a,E?f:.Y4|m4x]En(MmXLEa4P|xd QJ$IIx84@HaFSDgt@IP:$Y|lz gDTeF5|agPE8̠|aPVr>k|HF&Qj: "<fNu&& Me% geeS|ʅ|%Ebyg/Դs|G+cARBYYIRv.,Cmln5a4/e 91+@*ϊoUZ|173_%ٞbV:X%UjSAEpUxl|VMAX> 5o.v|&MC^N'm:tObߴ!_RGm `LR Y[H͢$/hvW/ 2? iBdPU+b7D>f?,~Eڄ^)I]N.>Ś_qDVNdS4JLeU1oTTAY!2V>;JjAJ 3_*\RRZTOBX,4EXIFROW2+?q&HEXn!OKw){+ (S)YU^ -(}$?uhK21~JRp  g MLmbITh #6mް58 4>CTRL5o&F!7Mgrk TOMI \*yI2|U VH^ b:#yTYtBšY7D\тH@ 2k xik&'@ܿ\Om, r8ي1!@PV Nܴc.RS'MSH$ÒTT fT`wDIRS58khpOE_;3J3ZemM:>P!_WbY5h.BCN 5K-&$6XAY `<:UZ4%s ZJlW4qiG (7vA nD1z72wY{DCxՆB102" 'N.24ދ 26P^:;GT l6w]=]A{ECf$y]A{*iYy&f >PF.'8A?Jg~.+Xϱ?6t{Aozϱ "[Aݑ|?6'YwS7Cl ?XۈK <QUۀ= (9W/)4'l蟙Ԇ}nSIZ?;6,BS7+9 P76sq{f77owJ%t)]3 U3N݃%s^ LNAY%cG @&&U۔J{SwԊ0IWдZ]w+DIijLL׶TyZD%Q}aS߆BeB|tp'AHLO&v~#ro6Г t7T8dF8^Xӷgޞmؑ4-'Ve+m#RY~U.[m EwX&ss6ؕ?6"G &s? ~ =F-]Z25t0r4=m> FIMgrHb7oB?dtѯ6Pņy{$۰h+rA=(CA}neicBΚF uC?AKKL_xS n&JAFJC6iϬ#C_8c fPY_JN㟟"1Ӥ"$wCw|tX0[>{Z)YwGt!amx(6 6cM7OmGvLb.W߃E6-$7o0gWqGRAP HIC+"_/K I}+I2AO1-R۔ٔ}Y2ې/+?^Mz iEM*Y#džMC7osl#Sn'nM@"OKcAV$}X̟EXC2+5PG.rؐAQ!X7&T-}$ېK\GHTVATsBU2GC_N)>UMB OPIWCTU{ S{^6oSoeX_A.a_CKo 17MULTI_'!5_ENDaOoSE\PbRING_Bo(UFER)rraUS3N]HW ST0E_oXCLORSsDECRUN_TH^ABLE__2 b8f Z NB"Ah407>,AL($͟FX 0@~S$4. ؕU @#S@SS@ @:} @ S P  }@} S }S:}@S:}S@O; ; New Trap #1 Loader for Atomic v3.3 packer by IWWWTTI - 24/12/1991 ; -A ; ; For internal use by Source members ONLY (for now !!) ; ; WILL ONLY WORK ON FILES WHICH ARE COMPLETELY READ BY ONE CALL TO ; FREAD (TRAP #1 #$3F). ; ; Based on the JAM Packer v4.0 Trap #1 Loader, with some extra bells ; and whistles added !! savebuf = $200 yes equ 1 no equ 0 LSEEKROUTINE EQU yes ;WHEN PROG USES LSEEK TO DETERMINE FILE LENGTH SFIRSTROUTINE EQU no ;WHEN PROG USES SFIRST TO DETERMINE FILE LENGTH ;text_on equ ;waitkey equ yes quit_gem equ yes lowres equ no flash equ yes begin bra start fname dc.b 'loadtm.prg',$00 even start movea.l a7,a5 lea begin(pc),a7 move.l 4(a5),a5 move.l $C(a5),d0 add.l $14(a5),d0 add.l $1C(a5),d0 add.l #$100,d0 move.l d0,-(a7) move.l A5,-(a7) clr.w -(a7) ; was move.w #$0,-(a7) move.w #$4A,-(a7) trap #1 ADDA.L #12,A7 clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,d7 move.l $84.W,oldtrap1vector move.l #trapit,$84.W move.l d7,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp ifne lowres clr.w -(sp) pea -1 pea -1 move.w #5,-(sp) trap #14 lea $c(a7),a7 endc move.l #null,-(sp) move.l #null,-(sp) pea fname(pc) move.w #0,-(sp) move.w #$4b,-(sp) trap #1 add.l #14,sp tst.l d0 ;ENSURE THAT YOU CAN QUIT OUT OF PROGRAMS WITHOUT A CRASH ifne quit_gem quit clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l oldtrap1vector(pc),$84.w move.l d0,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 elseif quit move.w $4.w,a0 jmp (a0) endc trapit: btst #$05,(a7) bne.s super move.l usp,a0 bra.s after super: move.l a7,a0 addq.l #6,a0 after: cmp.w #$3d,(a0) beq doopen cmp.w #$3f,(a0) beq.s load IFNE LSEEKROUTINE cmp.w #$42,(a0) beq.s down ENDC IFNE SFIRSTROUTINE cmp.w #$4e,(a0) beq.s dosfirst cmp.w #$2f,(a0) beq.s dogetdta cmp.w #$1a,(a0) ENDC bne dotrap1 IFNE SFIRSTROUTINE lea retsetdta(pc),a0 move.l 2(a7),(a0) lea setdta(pc),a0 move.l a0,2(a7) bra dotrap1 dogetdta: lea retgetdta(pc),a0 move.l 2(a7),(a0) lea getdta(pc),a0 move.l a0,2(a7) bra dotrap1 ENDC doopen: lea retopen(pc),a0 move.l 2(a7),(a0) lea open(pc),a0 move.l a0,2(a7) bra dotrap1 ;here starts the stuff for SFIRST IFNE SFIRSTROUTINE dosfirst: lea retsfirst(pc),a0 move.l 2(a7),(a0) lea sfirst(pc),a0 move.l a0,2(a7) bra.s dotrap1 ENDC ;here start the stuff for LSEEK IFNE LSEEKROUTINE down: lea retlseek(pc),a0 move.l 2(a7),(a0) lea lseek(pc),a0 move.l a0,2(a7) bra.s dotrap1 ENDC load: move.w inopen(pc),d0 cmp.w #1,d0 beq.s dotrap1 ;if checking depack marker, do real trap1! move.w seekflag(pc),d0 cmp.w #1,d0 beq.s dotrap1 ;if called from seek handler, exit! move.w mustdpak(pc),d0 cmp.w #1,d0 bne.s dotrap1 ;if marker not present, don't decrunch! move.l a7,d0 movem.l a1-a3,-(sp) sub.l #$20,8(a0) lea buffer(pc),a1 move.l 8(a0),(a1) move.l d0,a2 lea return(pc),a1 move.l 2(a2),(a1) lea unpack(pc),a1 move.l a1,2(a2) move.l buffer(pc),a1 lea savebuf,a2 move.l #$20,a3 loadloop: move.b (a1)+,(a2)+ subq.l #1,a3 cmp.l #0,a3 bne.s loadloop movem.l (sp)+,a1-a3 dotrap1: dc.w $4ef9 oldtrap1vector: dc.l $00 ;* open: tst.l d0 bmi exitopen2 movem.l a1-a3,-(sp) move.l d0,a3 lea inopen(pc),a1 move.w #1,(a1) pea test(pc) move.l #8,-(sp) move.w a3,-(sp) move.w #$3f,-(sp) trap #1 add.l #12,sp tst.l d0 ;ADDED TO FIX ZERO LENGTH FILE beq.s notcrun ;DITTO move.l magic(pc),d0 cmp.l test(pc),d0 bne.s notcrun lea mustdpak(pc),a1 move.w #1,(a1) bra.s skipit notcrun: lea mustdpak(pc),a1 move.w #0,(a1) skipit: move.w #1,-(sp) move.w a3,-(sp) move.l #-8,-(sp) move.w #$42,-(sp) trap #1 add.l #10,sp move.l a3,d0 exitopen: lea inopen(pc),a1 move.w #0,(a1) movem.l (sp)+,a1-a3 exitopen2 dc.w $4ef9 retopen dc.l $00 inopen dc.w 0 test dc.l 0 unpaklen dc.l 0 mustdpak dc.w 0 magic dc.b 'ATOM' IFNE SFIRSTROUTINE ;* getdta: lea dta(pc),a0 move.l d0,(a0) dc.w $4ef9 retgetdta dc.l $00 ;* setdta: lea dta(pc),a0 move.l 2(a7),(a0) dc.w $4ef9 retsetdta dc.l $00 ;*# FOR $4E (SFIRST) sfirst: tst.l d0 bne pissoff move.l 2(a7),a0 movem.l a1-a3,-(sp) move.w #$2,-(sp) move.l a0,-(sp) move.w #$3d,-(sp) trap #1 addq.l #8,sp lea sfirsthandle(pc),a1 move.w d0,(a1) move.w mustdpak(pc),d0 cmp.w #1,d0 beq.s change bra.s afterchange change: move.l dta(pc),a0 add.l #26,a0 move.l unpaklen(pc),d0 move.l d0,(a0) afterchange: move.w sfirsthandle(pc),-(sp) move.w #$3e,-(sp) trap #1 addq.l #4,sp movem.l (sp)+,a1-a3 pissoff: dc.w $4ef9 retsfirst: - ;exit dc.l $00 ENDC ;*# FOR $42 (LSEEK) IN TRAP1 IFNE LSEEKROUTINE lseek: cmp.w #2,8(a7) bne vamos3 cmp.l #0,2(a7) bne vamos3 lea seekhandle(pc),a0 move.w 6(a7),(a0) lea sd0save(pc),a0 move.l d0,(a0) move.w mustdpak(pc),d0 cmp.w #1,d0 bne.s vamos move.l unpaklen(pc),d0 bra.s vamos3 vamos: move.l sd0save(pc),d0 vamos3: dc.w $4ef9 retlseek: ;exit dc.l $00 ENDC ;*$ FOR $3F (READ) IN TRAP1 unpack: ;a0 - start of crunched data ;a1 - beginning of uncrunching area movem.l d0-d7/a0-a6,-(sp) move.l buffer(pc),a0 lea origlen(pc),a1 move.l 4(a0),(a1) move sr,d1 btst #13,d1 bne nochange clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp lea jek(pc),a6 move.l d0,(a6) lea mode(pc),a1 move.w #1,(a1) ;1 denotes must return to user mode nochange: lea colstore(pc),a1 move.w $fff8240,(a1) move.l buffer(pc),a0 move.l a0,a1 add.l #$20,a1 BSR DEPACK move.w colstore(pc),$fff8240 ;restore memory saved in buffer move.l buffer(pc),a1 lea savebuf,a2 move.l #$20,a3 loadloop2: move.b (a2)+,(a1)+ subq.l #1,a3 cmp.l #0,a3 bne.s loadloop2 move.w mode(pc),d0 cmp.w #1,d0 bne nochange2 move.l jek(pc),-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp nochange2: lea mode(pc),a1 move.w #$00,(a1) movem.l (sp)+,d0-d7/a0-a6 move.l origlen(pc),d0 dc.w $4ef9 return: ;exit decrunch module dc.l $00 ;-0 ;decrunch source code of ATOMIK by ALTAIR ;je tiens a preciser ;A0=packed code ;que j'ai entierement ;A1=depack adr. ;ecris ce compacteur ;call it by bsr. ;environnement compris. ;pic_algo=1 ; lenght=$18e PIC_ALGO: equ 1 ;pic_algo=0 ; lenght=$148 opt o+,x+ DEPACK: movem.l d0-a6,-(a7) cmp.l #"ATOM",(a0)+ bne no_crunched move.l a1,a5 add.l (a0)+,a5 ifne PIC_ALGO pea (a5) endc move.l (a0)+,d0 lea 0(a0,d0.l),a6 move.b -(a6),d7 bra make_jnk tablus: lea tablus_table(pc),a4 moveq #1,d6 bsr.s get_bit2 bra.s tablus2 decrunch: moveq #6,d6 take_lenght: add.b d7,d7 beq.s .empty1 .cont_copy: dbcc d6,take_lenght bcs.s .next_cod moveq #6,d5 sub d6,d5 bra.s .do_copy .next_cod: moveq #3,d6 bsr.s get_bit2 beq.s .next_cod1 addq #6,d5 bra.s .do_copy .next_cod1: moveq #7,d6 bsr.s get_bit2 beq.s .next_cod2 add #15+6,d5 bra.s .do_copy .empty1: move.b -(a6),d7 addx.b d7,d7 bra.s .cont_copy .next_cod2: moveq #13,d6 bsr.s get_bit2 add #255+15+6,d5 .do_copy: move d5,-(a7) bne.s bigger lea decrun_table2(pc),a4 moveq #2,d6 bsr.s get_bit2 cmp #5,d5 blt.s contus addq #2,a7 subq #6,d5 bgt.s tablus move.l a5,a4 blt.s .first4 addq #4,a4 .first4: moveq #1,d6 bsr.s get_bit2 tablus2: move.b 0(a4,d5.w),-(a5) bra.s make_jnk get_bit2: clr d5 .get_bits: add.b d7,d7 beq.s .empty .cont: addx d5,d5 dbf d6,.get_bits tst d5 rts .empty: move.b -(a6),d7 addx.b d7,d7 bra.s .cont bigger: lea decrun_table(pc),a4 cont: moveq #2,d6 bsr.s get_bit2 contus: move d5,d4 move.b 14(a4,d4.w),d6 ext d6 bsr.s get_bit2 add d4,d4 beq.s .first add -2(a4,d4.w),d5 .first: lea 1(a5,d5.w),a4 move (a7)+,d5 move.b -(a4),-(a5) .copy_same: move.b -(a4),-(a5) dbf d5,.copy_same make_jnk: moveq #11,d6 moveq #11,d5 take_jnk: add.b d7,d7 beq.s empty cont_jnk: dbcc d6,take_jnk bcs.s next_cod sub d6,d5 bra.s copy_jnk1 next_cod: moveq #7,d6 bsr.s get_bit2 beq.s .next_cod1 addq #8,d5 addq #3,d5 bra.s copy_jnk1 .next_cod1: moveq #2,d6 bsr.s get_bit2 swap d5 moveq #15,d6 bsr.s get_bit2 addq.l #8,d5 addq.l #3,d5 copy_jnk1: subq #1,d5 bmi.s .end_word moveq #1,d6 swap d6 .copy_jnk: move.b -(a6),-(a5) ifne flash move.w d5,$f8240.w ; try d0 endc dbf d5,.copy_jnk sub.l d6,d5 bpl.s .copy_jnk .end_word: cmp.l a6,a0 .decrunch: bne decrunch cmp.b #$80,d7 bne.s .decrunch ifne PIC_ALGO move.l (a7)+,a0 bsr.s decod_picture endc no_crunched: movem.l (a7)+,d0-a6 rts empty: move.b -(a6),d7 addx.b d7,d7 bra.s cont_jnk decrun_table: dc.w 32,32+64,32+64+256,32+64+256+512,32+64+256+512+1024 dc.w 32+64+256+512+1024+2048,32+64+256+512+1024+2048+4096 dc.b 4,5,7,8,9,10,11,12 decrun_table2: dc.w 32,32+64,32+64+128,32+64+128+256 dc.w 32+64+128+256+512,32+64+128+256+512*2 dc.w 32+64+128+256+512*3 dc.b 4,5,6,7,8,8 tablus_table: dc.b $60,$20,$10,$8 ifne PIC_ALGO decod_picture: move -(a0),d7 clr (a0) .next_picture: dbf d7,.decod_algo rts .decod_algo: move.l -(a0),d0 clr.l (a0) lea 0(a5,d0.l),a1 lea $7d00(a1),a2 .next_planes: moveq #3,d6 .next_word: move (a1)+,d0 moveq #3,d5 .next_bits: add d0,d0 addx d1,d1 add d0,d0 addx d2,d2 add d0,d0 addx d3,d3 add d0,d0 addx d4,d4 dbf d5,.next_bits dbf d6,.next_word movem d1-d4,-8(a1) cmp.l a1,a2 bne.s .next_planes bra.s .next_picture endc ;-'- dc.b "Another TBE Pack" SECTION DATA origlen: dc.l $00 oldssp: dc.l $00 buffer: dc.l $00 mode: dc.l $00 jek: dc.l $00 length: dc.l $00 colstore: dc.l $00 seekflag: dc.w $00 seekhandle: dc.w $00 sd0save: dc.l $00 rtlseeksav: dc.l $00 sfirsthandle: dc.l $00 dta: dc.l $00 oldsize: dc.l $00 null: DC.L $00#CJ=1/% 0CJ7-+!8DG61#.;8?;*! 5;A>3!%43B<1#1.5C6('5*7B3 *.-8@. !*+)75)    *%-//,  (0*'01#   -+,)/1  /31,'&% $$(/385($ )144714-#58A>63! )<;:@C2" ->DC;2/!.  `B..  4`BYTEKILLTTP t v COMPACT TTP t COMPAK_2TTP t COMPAK_3TTP t B`((*o"mE$"mE~$Ev$?<NNTCp"$@2<}BQ?<NNT<gC_9CT/ ?< NA\B?< NA\M8,>9@AE$E"Ra@3@/:?< NA\*z&z k -"zJg$BёBBJAg<f``&z+k +k+k  -"- Ҁ+A -Ҁ+A -Ҁ+A "A :d$@*@$<&CQ"z>$:8(z,&LNٳf0<BQ"L /INY % AUTOMATION PACKER V5.0.1HaX AU5!fJaLKaF.(I,I&N%aDapd*><|8#zD@DADBDCQQHQLNurQNua.d&ra(dCv !a&H@@Vҩ1@%QnNuf%Nurf%AQNuCtaTxr1 Hka1 Ag"CvtaTr1 HaBq jD`rptadpt?aBC@!!Q`N   AU5!(G`xD@_NFټ4*J8?FM[/i5.0.1S_PACK501.RSCY 7ƀ*OO "IfugBЭp"ҍh v =,MOLfSb\m&Vg@ZAaff;ff}J6&`D|Nlh3| KHM30j' *lxQEo&`;~bIfF͇rKՀT$@2<}BQ?:"ZJP%T@ANBտ$3 tM/H$ñKLf'u^xrKC< :dBXa.&q\nJc$&Ό 'xO$Զw#eӊ(rTg m^5 8~ vN iBgO#xA!#!KǶ/d NAbHt`HI`;'^-Z-SaP ɱ`t68qyΰvT22HzI&+OB=6%u?98 3߃Ȓ$PJʀXVg2 .%,8Z\\_UŜ<2!Mܬ$uVfVԶ1` 71>V]8(]!T`e#ɭ1՜%K*"d])U%Nusɹ\xv e;ֿ-c6 V|X>9g_1Io1w:u6soff~Hf`:8-ovXj=@'n1 h Xi`n,*Fc+$L6Bn, &8|o%z[ g]¯ ~Vw=0Kf YuEE `l]RPC kHT`C <;T pDcPd ؞FuKCsj 沚'k `byIW G|$p&2.0ٖz͈Hl ) X[_MLVf܂˄d0NgJC")~fYg@LWhaءV D`>3x^ FA+/gHPz{3(Bmw%g<𶬳`@wBw `8U̘1_-#hk To~-g0fWg!RN@`3^8 ժXO gt`6'LB nNN\*O*m3 - ;"e/0 %;J.zk1r7ژL%B[ʳp bͺaRl## 8ecVKZ` μX"NT;8vwI$Sgp^o,\x%l 5mf߄NB`4?Yq‘^2(j7YttʓV6nЀ7ltL㖴 >̙9^ ;&~r7S", s=ެFH3ܶP4g%ʠ/!#Ṇc5dGXfqH. tHX#QBsP l Ŭz]vz[f h"QR :\yflrķw+,l-\T+XS-D0t/gn4BkR`?C k-c3fݲm$Ђ,T`]`𲼲gk JgJ`Hgu}P4S--R<&f :g -R V`wXX,,u G,g*2Ģ`&P0tkU: `m,P@" gHҼ؅N8a@ Z #FBPlmc.\2qyi  D31@#uh|pI=N x0( sNq`wUx`\fXb $xn!ѹ7"QF Am(%S^t~ oS"|N] 0Yt">l0m8g +1ԁ#j[k$*DFuAmvC8`mfn m;amwX`0<=b"/Êu0̞O$ NG"X԰ &f@'ZD}|GTHSRYXOFFSETOOARGM-NU8+I[`APCTEDxDwFULL:$HAA 'ERRSAVAGA1zWROUh TYPE?KAY.RSCSISSINGDESKTOP}[3%Mn .VLow Rez}niceBut, |prefuMedium \&High!?[ Okp]\W"4 @P`LgA:\qxFILENAME.EXT2(T00k#x: @&7`b]xsBy}{$r(*o3"5"m~ kv$a3 +p"2<}B\g_1T1B Mt8,>9,AQ2@E"R@3|/:|A*M`^ BB{~2˛QJlb$BёBBJofJ``&$v kWY"a-cTc+WҀ+AkH"A96d$@*@$f&)t. "X>8$:8(},&LN|`ٳf0<B"L` /I檰xpoyaX gfuXsK.(I,I&NlkAd*'}|8#z@x BDC>H1}܍r^.d&va(dv !a&H@@Vҩ1@%P1n.f%A מta ekaAg" vtaT~1 aBq jD`ptadpt?aBC@!QNz*dK4 YBQXe 0 A]`8PoK63jδNTiZ=9Z2/ =aFY^6PC"QaLa0 zN?ɬ Y % AUTOMATION PACKER V5.0.1U,_/:ћ W3 NY>H!)nUDb6Ps4D"Я)/f0\J\Yv4c<6&>z`\@wD3UV Z6^G&x6^erړ?Jd̙V+k{kn=- FBR%Q#sJB2JVJ8JN<ܧIB4\PbJ5t8pu: TzGbesm t p!HST8@|Pubgc Do?dLHclXpBBP@_ (pOIXWV"0NBj:|ۆDfwDfE\y3Ƭx[Ɯfx3[-EHt`f!noY(W\"JDU)~e8 `[3f*j`p1gt6n2fBn ilV8gpy`0yX0QJ(Hk@ gp6ygP]6f3*|'`8vK!(CBeΰ#yf4ǝv3;H-S9HYXY|MA:j0+G|WL.(O*BZZH) (lI\*U(:[XR8YddJD;s~B f "\ 'fRzYI ,:XpH@ a/3PTHT:;.EJf,$*.*`$ׅVhCBGf 8 N h$k ^퉲j"'&jCv/aYH @wJ tFL拀 Sf3 OI d~K!jZ6iZҺևda9ju*$,{9eX6*<)k݀ڼ&@HfyIg1XͰNCJf+#;K ̳lDۼԱWB|": /. j s`X8\V;(@$@ " S" j L Ed b 5H:3 d(iڀde $tS@k fT 'gL-`&UȚQ[&ĕt)3 9;gv8n*KK Ap4rx a9`#=9hNuj J 0UZ R@,(+AKB<⏑ФT`*j#*z,K*I`H`;$`/yIf^XkBE|NgVʊ=HP<:6?S+|8IX- bu3f2CjT/: NMX<{H2 5# LWZ18֐f#"aaY:BTlxCVÐ0 p:h3 mFq@ƅ0s lCqGtr€~Y R'Ah8  GfHSk6 Xbt+vZTxvSBk'#,0k8 WD o ]oh؀XCQη(e(fC|dx#48a3v#  nA Zde+t-ѴL3r"'$𒂐LngV8HBALzZgH}3zmEЁ$ ,nH: -X6`gfslg`Yun;iҠ NV2Qd*j@Br@_ 0a6_ 1 MJ@f JAfuH@HA`H?o.AXLb(4 8Df?:A2.+77@ڶK[SD\ͼkD3PHri@ESs   QA~|5BPdO- '! (`I=K(F  %&ATt~Bd0<4uA2TvE`+*K`Pޘ-IceI*LYޭa9*o%MsL4A "+ѓg Of``GP$]$#**ӻpAGP=$=CsWN/&(&n".扑&SjNOnNSHIx,Lap ICE!fy`adKa^."N ń&NaV*Ka~d*><|8#z@j^?ogKwX#Y/n. A3V x!N/y en3,i=f"2@g0)P${1xd (Default)u2jCF e7'<3) V P><<5ctyA9ZX۱`skipld.Lartxt&/,g0!K[cDfcelled]Ef`ǧV- q3&\ bÃ|K I eEGgHThg)#wa,SẅX5by A=w ofXwupWr.^<]h vJ Xİ4z0Fi2¬bg: .02.1991|ׅ{ }x~ A0Y-~ yWhys{DBa.Exxutab &- Parame~sDATA^EXECSETUPReloca{=ftdecrunchA <2 packno erBfile?|f@H[0A.D\you wish to usanVaddA algithm for pictu compression? ][ NO | YES ]DRI @ 92 @,cd ё|E%,  a r,y"fذv \ܐ ^lCa`]M\"-Z0($ |`Bqr&V "&dP+Q)UtNYQ$Me^%2^N9"5  殡*74OC,%5-_ub=<)!) Ʃ 90.Ӻ G? $4-5ei( .g6%93./=HV* '"M\ *19)"''& &E8++-##$(ȿ  *-:E7. ׾Ͼ  KK6# 궭!M:! Ԥ65(%&+# *ĤRg]Y]]VN8ж˝3`b`bnlk`; ȳŒKqnflroqY- ū׼%RaWU]eja<Ϳƥ>SXVXY`]?!ɶCFLOLIO:ϳ@LS]_XYN)׽ƿ )5>A?>Ŷ$0?EJH9 (096 "0;E/ %.0   ,?F;#26~~$ X  AUTOMATION COMPACTER VERSION XXXXXPACK/DEPACK PROGRAMPACK/DEPACK DATAMULTI FILE PACKERPACK DATA (OFFSET)PREFERENCESCHUNK PACKEREXIT PROGRAMCODE By EGB (SUB HUMANS IN TURKEY) andAXE (SUPERIOR). GEM By SSR!AUTOMATION COMPACTER VERSION XXXXXMULTI PACK ALLMULTI PACK (NO PRGS)MULTI CHUNK PACKMAIN MENUPRINT HEADERVERIFYPACK STATUSMAIN MENUYESNOYESNOPERCENTCOLOURS123456789101 = BIG/FAST 10 = SLOW/SMALLCOMPACTION RATEBUFFER PACKNORMAL PACKCURRENT FILE IS: XXXXXXXX.XXXFILE LENGTH $00000 BYTESPERCENTAGE ALREADY PACKED %XXCHUNK XXX OF XXXCURRENT FILE IS: XXXXXXXX.XXXNORMAL LENGTH $00000 BYTESPACKED LENGTH $00000 BYTESPERCENTAGE OF ORIGINAL LENGTH %XXPROGRAM FILE?YESNOOKCONVERT DATA TO PROGRAM00000DEPACK AT $_____XXXXX00000EXECUTE AT $_____XXXXXYESSUPERVISOR MODENOOKCHUNK SIZE4 K8 K16 K32 K00000Offset: $_____XXXXXOK$GH#'$%# ()*FGHfghyz{"  -3EKQc !  I]n         !  &5J%['  % ery!     + )     ! %  C) 1 !  .Jf % # !      % !   *F  Ci m}%     % Bb%~v . ^                                     opt c+,d- main MOVEA.L 4(A7),A5 move.l $c(a5),d0 add.l $14(a5),d0 add.l $1c(a5),d0 add.l #$100,d0 move.l d0,-(sp) move.l a5,-(sp) move.l #$4a0,-(sp) trap #1 lea $c(a7),a7 CHEAT CLR.L -(A7) MOVE.W #$20,-(A7) TRAP #$01 ADDQ.L #6,A7 LEA SUPERLNG(PC),A6 MOVE.L D0,(A6) MOVE.L $84.w,tr1 MOVE.L #T1,$84.w MOVE.L SUPERLNG(PC),-(A7) MOVE.W #$20,-(A7) TRAP #$01 ADDQ.L #6,A7 clr.w -(sp) pea $f move.l (a7),-(sp) move.w #5,-(sp) trap #14 lea $c(a7),a7 pea text move.w #9,-(sp) trap #1 stkk clr.l $60 pea $60 move.l (a7),-(sp) move.l #file,-(sp) move.l #$4b0,-(sp) trap #1 lea $10(a7),a7 clr.w -(sp) trap #1 SUPERLNG DC.L 0 T1 movem.l a0-a6/d0-d7,reg movea.l a7,a1 addq.l #6,a1 move.w (a7),d0 btst #$d,d0 bne.s ok1 move.l usp,a1 ok1 cmpi.w #$3f,(a1) beq.s read open movem.l reg,a0-a6/d0-d7 bye dc.w $4ef9 tr1 dc.l $0 read move.l $8(a1),loadadd move.l $2(a7),ex3f move.l #cls,$2(a7) bra.s open loadadd dc.l 0 siz2 dc.l 0 cls movem.l d0-d7/a0-a6,-(sp) move.l d0,siz2 pea close move.w #$26,-(sp) trap #14 addq.l #6,sp movem.l (a7)+,d0-d7/a0-a6 move.l siz2,d0 dc.w $4ef9 ex3f dc.l 0 close move.l loadadd,a0 bsr dep rts reg dc.l $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 text dc.b 'LODERUNNER CRACKED BY THE EMPIRE',13,10 DC.B 'PACKED BY VAPOUR',0 EVEN file dc.b 'lode',0 even ; A0 -> A0 depacker depack AU5_decrunch_2: dep link a3,#-120 movem.l d0-a6,-(sp) lea 120(a0),a4 move.l a4,a6 bsr.s .getinfo cmpi.l #'AU5!',d0 bne .not_packed bsr.s .getinfo lea.l -8(a0,d0.l),a5 bsr.s .getinfo move.l d0,(sp) move.l d0,siz2 adda.l d0,a6 move.l a6,a1 moveq #119,d0 .save: move.b -(a1),-(a3) dbf d0,.save move.l a6,a3 move.b -(a5),d7 bsr.s .normal_bytes move.l a3,a5 bsr.s .get_1_bit bcc.s .no_picture move.w #$0f9f,d7 .AU5_00: moveq #3,d6 .AU5_01: move.w -(a3),d4 moveq #3,d5 .AU5_02: add.w d4,d4 addx.w d0,d0 add.w d4,d4 addx.w d1,d1 add.w d4,d4 addx.w d2,d2 add.w d4,d4 addx.w d3,d3 dbra d5,.AU5_02 dbra d6,.AU5_01 movem.w d0-d3,(a3) dbra d7,.AU5_00 .no_picture movem.l (sp),d0-a3 .move move.b (a4)+,(a0)+ subq.l #1,d0 bne.s .move moveq #119,d0 .rest move.b -(a3),-(a5) dbf d0,.rest .not_packed: movem.l (sp)+,d0-a6 unlk a3 rts .getinfo: moveq #3,d1 .getbytes: lsl.l #8,d0 move.b (a0)+,d0 dbf d1,.getbytes rts .normal_bytes: bsr.s .get_1_bit bcc.s .test_if_end moveq.l #0,d1 bsr.s .get_1_bit bcc.s .copy_direkt lea.l .direkt_tab+20(pc),a1 moveq.l #4,d3 .nextgb: move.l -(a1),d0 bsr.s .get_d0_bits swap.w d0 cmp.w d0,d1 dbne d3,.nextgb .no_more: add.l 20(a1),d1 .copy_direkt: move.b -(a5),-(a6) dbf d1,.copy_direkt .test_if_end: cmpa.l a4,a6 bgt.s .strings rts .get_1_bit: add.b d7,d7 bne.s .bitfound move.b -(a5),d7 addx.b d7,d7 .bitfound: rts .get_d0_bits: moveq.l #0,d1 .hole_bit_loop: add.b d7,d7 bne.s .on_d0 move.b -(a5),d7 addx.b d7,d7 .on_d0: addx.w d1,d1 dbf d0,.hole_bit_loop rts .strings: lea.l .length_tab(pc),a1 moveq.l #3,d2 .get_length_bit: bsr.s .get_1_bit dbcc d2,.get_length_bit .no_length_bit: moveq.l #0,d4 moveq.l #0,d1 move.b 1(a1,d2.w),d0 ext.w d0 bmi.s .no_ber .get_ber: bsr.s .get_d0_bits .no_ber: move.b 6(a1,d2.w),d4 add.w d1,d4 beq.s .get_offset_2 lea.l .more_offset(pc),a1 moveq.l #1,d2 .getoffs: bsr.s .get_1_bit dbcc d2,.getoffs moveq.l #0,d1 move.b 1(a1,d2.w),d0 ext.w d0 bsr.s .get_d0_bits add.w d2,d2 add.w 6(a1,d2.w),d1 bpl.s .depack_bytes sub.w d4,d1 bra.s .depack_bytes .get_offset_2: moveq.l #0,d1 moveq.l #5,d0 moveq.l #-1,d2 bsr.s .get_1_bit bcc.s .less_40 moveq.l #8,d0 moveq.l #$3f,d2 .less_40: bsr.s .get_d0_bits add.w d2,d1 .depack_bytes: lea.l 2(a6,d4.w),a1 adda.w d1,a1 move.b -(a1),-(a6) .dep_b: move.b -(a1),-(a6) dbf d4,.dep_b bra .normal_bytes .direkt_tab: dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001 dc.l 270-1,15-1,8-1,5-1,2-1 .length_tab: dc.b 9,1,0,-1,-1 dc.b 8,4,2,1,0 .more_offset: dc.b 11, 4, 7, 0 dc.w $11f, -1, $1f ende_AU5_decrunch_2: ;*3 Ende der Unpackroutine yxvtromkhfb`]ZWSRPLIFC@<952.+'$! f ~}|{zxvsqolifca^[XURPMJFCA=962/+(%"  ~}}|zxvtqnkhfca_[YURPMJFC@<751-)&#  O ~~|yxtqmjged`\YVSOMKHD@=962/+($" p ~}{zvrokhge`[XTRNMKHDA>;752.,(%!  TEXT Begin BRA L0004 L0 ds.l 16 L0001 DS.W 1 L0002 DC.B 'cbd_jet1.prg',0 L0003 DC.B $1B,$45,$1B,$66,$1B,$77 DC.B 'MESSAGE TO APPEAR AT FRONT OF LOADER',13,10 DC.B 'HI FROM EGB... ETC',13,10 DC.B 0 EVEN L0004 MOVEA.L 4(A7),A5 MOVE.L 12(A5),D0 ADD.L 20(A5),D0 ADD.L 28(A5),D0 ADDI.L #$200,D0 ADDI.L #$4008,D0 MOVE.L D0,-(A7) MOVE.L A5,-(A7) MOVE.L #$4A0,-(A7) TRAP #1 LEA 12(A7),A7 DC.B $A0,$0A PEA L0003 MOVE.W #9,-(A7) TRAP #1 ADDQ.L #6,A7 DC.B $A0,$09 MOVE.L #L00AF,L009E MOVE.L #L0,L009A MOVE.L #L0001,L009B CLR.L -(A7) MOVE.W #$20,-(A7) TRAP #1 ADDQ.L #6,A7 LEA L0096(PC),A6 MOVE.L D0,(A6) MOVE.L $084.L,L000A MOVE.L #L0006,$084.L MOVE.L L0096(PC),-(A7) MOVE.W #$20,-(A7) TRAP #1 ADDQ.L #6,A7 L0005 CLR.L L009C MOVEA.L #L0005,A7 MOVE.L #L0,L0099 MOVE.L #-$16,L0098 CLR.L $00060 PEA $00060 PEA $00060 MOVE.L #L0002,-(A7) MOVE.L #$4B0,-(A7) TRAP #1 LEA 16(A7),A7 CLR.W -(A7) TRAP #1 L0006 TST.W L009D BNE L0009 MOVEM.L A0-A6/D0-D7,L00A0 MOVEA.L A7,A1 ADDQ.L #6,A1 MOVE.W (A7),D0 BTST #13,D0 BNE.S L0007 MOVE USP,A1 L0007 CMPI.W #$3D,(A1) BEQ L000B CMPI.W #$3F,(A1) BEQ L0014 CMPI.W #$3E,(A1) BEQ L0032 CMPI.W #$3C,(A1) BEQ L0042 CMPI.W #$40,(A1) BEQ L0045 CMPI.W #$42,(A1) BEQ L0039 CMPI.W #$4E,(A1) BEQ L0046 CMPI.W #$4F,(A1) BEQ L0051 CMPI.W #$45,(A1) BEQ L0052 CMPI.W #$46,(A1) BEQ L0053 L0008 MOVEM.L L00A0(PC),A0-A6/D0-D7 L0009 JMP $0.L L000A EQU L0009+2 L000B MOVE.W #1,L009D BSR L0055 MOVE.L D0,D7 MOVE.L D0,D6 MOVEA.L A0,A5 MOVEA.L 2(A1),A6 MOVE.W 6(A1),-(A7) MOVE.L A6,-(A7) MOVE.W #$3D,-(A7) TRAP #1 ADDQ.L #8,A7 TST.L D0 BPL L000D CLR.L D6 MOVEA.L A6,A0 MOVEA.L L009A,A4 BSR L0057 TST.L D0 BMI L0041 LEA L0095,A1 MOVE.L D7,D6 LSL.L #2,D6 MOVE.L D0,0(A1,D6.W) LEA L00A4,A1 CLR.L 0(A1,D6.W) LEA L00A8,A1 MOVE.L A4,0(A1,D6.W) LEA L00A5,A1 MOVE.L 14(A0),0(A1,D6.W) LEA L00A7,A1 MOVE.L 18(A0),0(A1,D6.W) CLR.L D0 MOVEA.L L009E,A0 MOVE.W 200(A0),D0 MULU #$16,D0 ADDQ.L #2,D0 ANDI.L #$FFFF,D0 ADD.L D0,0(A1,D6.W) MOVE.L D7,D6 LSL.L #5,D7 LEA L00A6,A0 ADDA.L D7,A0 MOVEA.L A6,A2 L000C MOVE.B (A2)+,(A0)+ BNE.S L000C BRA L0013 L000D MOVE.L D0,D4 CLR.L L00AB PEA L00AB MOVE.L #8,-(A7) MOVE.W D4,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 CLR.W -(A7) MOVE.W D4,-(A7) CLR.L -(A7) MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 MOVEA.L A6,A4 MOVE.L #$1F,D0 L000E MOVE.B (A6)+,(A5)+ DBF D0,L000E LSL.L #2,D7 LEA L00A4,A0 MOVE.L #0,0(A0,D7.W) LEA L00A7,A0 MOVE.L #0,0(A0,D7.W) CMPI.L #"AU5$",L00AB BEQ.S L000F LEA L0095,A0 MOVE.L D4,0(A0,D7.W) LEA L00A8,A0 MOVE.L #0,0(A0,D7.W) CMPI.L #"AU5C",L00AB BNE L0013 MOVE.L #-1,0(A0,D7.W) LEA L00A5,A0 MOVE.L L00AC,0(A0,D7.W) BRA L0010 L000F LEA L00A5,A0 MOVE.L L00AC,0(A0,D7.W) LEA L0095,A0 MOVE.L #-1,0(A0,D7.W) LEA L00A8,A0 MOVE.L #0,0(A0,D7.W) MOVE.W D4,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 L0010 LEA L00A3,A5 L0011 TST.B (A4) BEQ.S L0012 CMPM.B (A4)+,(A5)+ BEQ.S L0011 BRA.S L0013 L0012 TST.B (A5) BNE.S L0013 MOVE.L D6,L009C L0013 CLR.W L009D MOVE.L D6,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0014 CLR.L D0 MOVE.W 2(A1),D0 TST.W D0 BMI L0015 MOVE.W D0,D1 LSL.L #2,D1 LEA L0095,A0 MOVE.L 0(A0,D1.W),D2 CMP.W #-1,D2 BEQ L0019 LEA L00A8,A0 MOVE.L 0(A0,D1.W),D3 TST.L D3 BNE L001F L0015 MOVE.W #1,L009D MOVE.L 8(A1),D7 MOVE.L D7,-(A7) MOVE.L 4(A1),-(A7) MOVE.W D2,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVE.L D0,D5 MOVEA.L D7,A0 CLR.L D0 MOVE.B (A0),D0 LSL.W #8,D0 MOVE.B 1(A0),D0 SWAP D0 MOVE.B 2(A0),D0 LSL.W #8,D0 MOVE.B 3(A0),D0 CMP.L #"AU5!",D0 BNE L0031 LEA -200(A0),A1 MOVEA.L A1,A2 LEA L00A9,A3 MOVE.L #$C7,D1 L0016 MOVE.B (A2)+,(A3)+ DBF D1,L0016 L0017 MOVE.B (A0)+,(A1)+ SUBQ.L #1,D5 BNE.S L0017 MOVEA.L A2,A1 LEA -200(A1),A0 MOVE.L A0,-(A7) BSR L0075 MOVEA.L (A7)+,A0 LEA L00A9,A1 MOVE.L #$C7,D1 L0018 MOVE.B (A1)+,(A0)+ DBF D1,L0018 BRA L0031 L0019 CMP.L L009C,D0 BEQ L001B MOVEA.L A1,A5 MOVE.W #1,L009D MOVE.L D0,L009C LSL.L #5,D0 LEA L00A6,A0 ADDA.L D0,A0 MOVEA.L A0,A1 LEA L00A3,A2 MOVE.W #$1F,D0 L001A MOVE.B (A1)+,(A2)+ DBF D0,L001A CLR.W -(A7) MOVE.L A0,-(A7) MOVE.W #$3D,-(A7) TRAP #1 ADDQ.L #8,A7 MOVE.W D0,D6 MOVE.L L009E,-(A7) MOVE.L #$2008,-(A7) MOVE.W D0,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVE.W D6,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 CLR.W L009D MOVEA.L L009E,A0 LEA 200(A0),A1 MOVE.L 4(A0),D7 BSR L0075 MOVEA.L A5,A1 L001B MOVE.L 4(A1),D0 MOVE.L D0,D5 MOVEA.L 8(A1),A0 MOVE.L L009C,D1 LSL.L #2,D1 LEA L00A4,A2 LEA L00A5,A3 MOVE.L 0(A2,D1.W),D2 MOVE.L 0(A3,D1.W),D3 MOVEA.L L009E,A1 LEA 200(A1),A1 ADDA.L D2,A1 L001C MOVE.B (A1)+,(A0)+ ADDQ.L #1,D2 CMP.L D2,D3 BLT.S L001D SUBQ.L #1,D0 BNE.S L001C BRA.S L001E L001D MOVE.L D3,D2 L001E MOVE.L D2,0(A2,D1.W) SUB.L D0,D5 BRA L0031 L001F MOVE.W #1,L009D CMP.L L009C,D0 BEQ L0021 MOVE.L D0,L009C LEA L00A8,A0 MOVEA.L 0(A0,D1.W),A5 CMPA.L L00A3,A5 BEQ L0021 MOVEA.L A1,A5 LSL.L #5,D0 LEA L00A6,A1 ADDA.L D0,A1 LEA L00A3,A2 MOVE.W #$1F,D0 L0020 MOVE.B (A1)+,(A2)+ DBF D0,L0020 MOVE.L D2,D7 CLR.W -(A7) MOVE.W D7,-(A7) CLR.L -(A7) MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 PEA L00AB MOVE.L #$400,-(A7) MOVE.W D7,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVE.L L00AC,D0 MOVE.L L00AD,D2 SUBQ.L #1,D2 EORI.L #-1,D2 AND.L D2,D0 MOVE.L D0,L00AA MOVE.L #-1,L009F MOVEA.L A5,A1 MOVE.L D7,D2 MOVE.L L009C,D0 MOVE.L D0,D1 LSL.L #2,D1 L0021 LEA L00A4,A0 MOVE.L 0(A0,D1.W),D4 MOVE.L 4(A1),D5 MOVE.L D4,D7 ADD.L D5,D7 CMP.L D4,D7 BLT.S L0022 LEA L00A5,A0 CMP.L 0(A0,D1.W),D7 BLT L0023 L0022 MOVE.L 0(A0,D1.W),D7 L0023 SUB.L D4,D7 MOVE.L D7,D5 MOVEA.L 8(A1),A4 MOVEA.L A4,A5 ADDA.L D5,A5 SUBA.L #1,A5 TST.L D5 BEQ L0031 LEA L00A4,A0 LEA L00A7,A1 MOVE.L 0(A1,D1.W),D0 ADD.L D0,0(A0,D1.W) MOVE.W D2,L00A1 MOVE.L D5,D2 LEA L00A4,A0 MOVE.L 0(A0,D1.W),D0 MOVEA.L D0,A2 MOVEA.L A2,A3 MOVE.L L00AD,D3 SUBQ.L #1,D3 AND.L D3,D0 MOVE.L D3,D7 MOVE.L D0,D6 EORI.L #-1,D3 MOVE.L A2,D0 AND.L D3,D0 MOVE.L D0,D4 ADDA.L D5,A3 MOVE.L A3,D5 AND.L D7,D5 MOVE.L A3,D0 AND.L D3,D0 MOVE.L D0,D3 SUB.L D4,D0 MOVE.L L00AD,D7 DIVU D7,D0 MOVE.L D0,D7 MOVE.L D4,D0 MOVE.L L00AD,D2 LEA L00AE,A0 CMP.L L00AA,D0 BNE.S L0024 DIVU D2,D0 LSL.L #2,D0 MOVE.L L00AC,D1 BRA.S L0025 L0024 DIVU D2,D0 LSL.L #2,D0 MOVE.L 4(A0,D0.W),D1 L0025 MOVE.L 0(A0,D0.W),D2 MOVE.L D1,D0 SUB.L D2,D0 CMP.L L009F,D4 BEQ L0026 MOVE.L D4,L009F CLR.W -(A7) MOVE.W L00A1,-(A7) MOVE.L D2,-(A7) MOVE.L D0,D2 MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 MOVE.L L009E,-(A7) MOVE.L D2,-(A7) MOVE.W L00A1,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVEA.L L009E,A0 LEA 200(A0),A1 BSR L0070 BRA L0027 L0026 TST.L D7 BEQ L002C CLR.W -(A7) MOVE.W L00A1,-(A7) MOVE.L D1,-(A7) MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 L0027 CMP.L #1,D7 BLE L002C MOVE.L D7,-(A7) LSL.L #2,D7 MOVE.L D4,D0 MOVE.L L00AD,D2 LEA L00AE,A0 DIVU D2,D0 LSL.L #2,D0 MOVE.L 4(A0,D0.W),D1 ADDA.L D7,A0 MOVE.L 0(A0,D0.W),D2 MOVE.L D2,D0 SUB.L D1,D0 MOVEA.L A4,A6 ADDA.L L00AD,A6 SUBA.L D6,A6 LEA -200(A6),A3 MOVE.L A3,D7 MOVE.L #$C7,D1 BTST #0,D7 BEQ.S L0028 ADDQ.L #1,A3 SUBQ.L #1,D1 L0028 MOVE.L (A7),D7 MOVE.L D6,-(A7) MOVE.L L00AD,D6 MULU D6,D7 MOVE.L (A7)+,D6 ADDA.L D7,A6 MOVE.L (A7)+,D7 LEA L00A9,A0 MOVEA.L A3,A1 MOVE.L D1,D2 L0029 MOVE.B (A1)+,(A0)+ DBF D1,L0029 MOVE.L A3,-(A7) MOVE.L D0,-(A7) MOVE.W L00A1,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 LEA L00AE,A2 MOVE.L D4,D0 MOVE.L D6,-(A7) MOVE.L L00AD,D6 DIVU D6,D0 MOVE.L (A7)+,D6 LSL.L #2,D0 ADDQ.L #4,D0 ADDA.L D0,A2 MOVE.L D7,-(A7) LSL.L #2,D7 SUBQ.L #4,D7 SUBA.L L00AD,A6 L002A SUBA.L L00AD,A6 SUBQ.L #4,D7 MOVEA.L A3,A0 MOVE.L 0(A2,D7.W),D0 SUB.L (A2),D0 ADDA.L D0,A0 MOVEA.L A6,A1 BSR L0070 TST.W D7 BNE.S L002A MOVE.L (A7)+,D7 LEA L00A9,A0 MOVEA.L A3,A1 MOVE.L D2,D1 L002B MOVE.B (A0)+,(A1)+ DBF D1,L002B L002C MOVEA.L L009E,A0 LEA 200(A0),A0 ADDQ.L #1,A5 ADDA.L D6,A0 MOVEA.L A4,A1 L002D CMPA.L A1,A5 BEQ.S L002E CMP.L L00AD,D6 BEQ.S L002E MOVE.B (A0)+,(A1)+ ADDQ.L #1,D6 BRA.S L002D L002E SUBQ.L #1,A5 TST.L D7 BEQ.S L0030 TST.L D5 BEQ.S L0030 MOVE.L D3,L009F MOVE.L L00AD,D3 MULU D3,D7 MOVE.L L009F,D3 MOVE.L L009E,-(A7) MOVE.L L00AD,-(A7) MOVE.W L00A1,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVEA.L L009E,A0 LEA 200(A0),A1 BSR L0070 MOVEA.L L009E,A0 LEA 200(A0),A0 MOVEA.L A5,A1 ADDQ.L #1,A1 SUBA.L D5,A1 SUBQ.L #1,D5 L002F MOVE.B (A0)+,(A1)+ DBF D5,L002F L0030 SUBA.L A4,A5 ADDQ.L #1,A5 MOVE.L A5,D5 MOVE.L L009C,D0 LSL.L #2,D0 LEA L00A7,A0 MOVE.L 0(A0,D0.W),D1 LEA L00A4,A0 SUB.L D1,0(A0,D0.W) ADD.L D5,0(A0,D0.W) L0031 CLR.W L009D MOVE.L D5,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0032 CLR.L D0 CLR.L D7 MOVE.W 2(A1),D7 MOVE.L D7,D6 MOVE.L D7,D5 MOVE.L D7,D4 LSL.L #2,D6 LEA L0095,A5 TST.W D7 BMI.S L0034 LSL.L #5,D4 LEA L00A6,A4 TST.B 0(A4,D4.W) BNE.S L0033 MOVE.L #-$25,D0 BRA L0038 L0033 MOVE.L 0(A5,D6.W),D5 CMP.L #-1,D5 BEQ.S L0035 L0034 MOVE.W #1,L009D MOVE.W D5,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 CLR.W L009D TST.L D0 BMI.S L0038 L0035 TST.W D7 BMI.S L0038 CMP.L L009C,D7 BNE.S L0036 MOVE.L #-1,L009C L0036 CLR.W D5 SWAP D5 TST.W D5 BEQ.S L0037 CMP.W #-1,D5 BEQ.S L0037 MOVE.L D5,0(A5,D6.W) BRA L0038 L0037 LSL.L #5,D7 LEA L00A6,A5 MOVE.B #0,0(A5,D7.W) L0038 MOVE.L D0,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0039 LEA L00A4,A2 LEA L00A5,A3 CLR.L D0 MOVE.W 6(A1),D0 LSL.L #2,D0 CLR.L D1 MOVE.W 8(A1),D1 MOVE.L 2(A1),D2 TST.W D1 BNE.S L003A MOVE.L D2,D3 BRA.S L003D L003A CMP.W #1,D1 BNE.S L003B MOVE.L 0(A2,D0.W),D3 ADD.L D2,D3 BRA.S L003D L003B TST.L D2 BPL.S L003C NEG.L D2 L003C MOVE.L 0(A3,D0.W),D3 SUB.L D2,D3 L003D MOVE.L 0(A3,D0.W),D4 CMP.L D3,D4 BGT.S L003E MOVE.L D4,D3 L003E TST.L D3 BGT.S L003F CLR.L D3 L003F MOVE.L D3,0(A2,D0.W) LEA L0095,A0 MOVE.L 0(A0,D0.W),D4 CMP.L #-1,D4 BEQ.S L0040 LEA L00A8,A0 MOVE.L 0(A0,D0.W),D5 TST.L D5 BNE.S L0040 MOVE.W #1,L009D MOVE.W D1,-(A7) MOVE.W D4,-(A7) MOVE.L D2,-(A7) MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 MOVE.L D0,D3 CLR.W L009D L0040 MOVE.L D3,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0041 CLR.W L009D MOVE.L D0,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0042 MOVE.W #1,L009D BSR L0055 MOVE.L D0,D7 MOVEA.L A0,A5 MOVE.W 6(A1),-(A7) MOVE.L 2(A1),-(A7) MOVE.W #$3C,-(A7) TRAP #1 ADDQ.L #8,A7 TST.W D0 BMI L0044 L0043 MOVE.B #$49,(A5) LEA L0095,A0 MOVE.L D7,D6 LSL.L #2,D7 MOVE.L D0,0(A0,D7.W) MOVE.L D6,D0 L0044 CLR.W L009D MOVE.L D0,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0045 CLR.L D0 MOVE.W 2(A1),D0 TST.W D0 BMI L0008 LSL.L #2,D0 LEA L0095,A0 MOVE.L 0(A0,D0.W),D1 MOVE.W D1,2(A1) BRA L0008 L0046 MOVE.L 2(A1),D5 MOVE.W 6(A1),D6 MOVE.W #1,L009D LEA L0097,A0 MOVEA.L D5,A1 MOVE.L #$D,D0 L0047 MOVE.B (A1)+,(A0)+ DBF D0,L0047 MOVE.L #-$16,L0098 MOVE.L #L0000,L0099 MOVE.W D6,-(A7) MOVE.L D5,-(A7) MOVE.W #$4E,-(A7) TRAP #1 ADDQ.L #8,A7 CLR.L D6 TST.W D0 BEQ.S L004A MOVEA.L D5,A0 MOVEA.L L009A,A4 L0048 BSR L0057 TST.W D0 BMI L0050 MOVE.L A4,L0099 LEA -202(A0),A6 SUBA.L L009E,A6 MOVE.L A6,L0098 MOVEA.L A0,A6 MOVE.W D0,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 MOVE.W #$2F,-(A7) TRAP #1 ADDQ.L #2,A7 MOVEA.L D0,A0 LEA 26(A0),A0 MOVE.L 14(A6),(A0)+ MOVEQ #$D,D0 L0049 MOVE.B (A6)+,(A0)+ DBF D0,L0049 MOVEQ #0,D0 BRA L0050 L004A MOVE.W #$2F,-(A7) TRAP #1 ADDQ.L #2,A7 MOVE.L D0,D7 ADDI.L #$1E,D0 MOVEA.L D0,A0 MOVE.L D0,D4 LEA L0000,A1 LEA L0001,A2 ADDQ.L #1,A1 ADDQ.L #1,A2 L004B CLR.L D0 L004C MOVE.B 0(A1,D0.W),D1 CMP.B 0(A0,D0.W),D1 BNE.S L004D ADDQ.L #1,D0 TST.B D1 BNE.S L004C MOVE.L #-$21,D0 TST.L D6 BRA L0051 L004D LEA 16(A1),A1 CMPA.L A2,A1 BNE.S L004B CLR.W -(A7) MOVE.L D4,-(A7) MOVE.W #$3D,-(A7) TRAP #1 ADDQ.L #8,A7 TST.L D0 BMI.S L004F MOVE.W D0,D6 CLR.L L00A1 PEA L00A1 MOVE.L #8,-(A7) MOVE.W D0,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVE.W D6,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 LEA L00A1,A0 CMPI.L #"AU5$",(A0) BEQ.S L004E CMPI.L #"AU5!",(A0) BNE.S L004F L004E MOVEA.L D7,A1 MOVE.L 4(A0),26(A1) L004F CLR.L D0 L0050 CLR.W L009D MOVE.L D0,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0051 MOVE.W #1,L009D MOVE.L L0098,D6 ADDI.L #$16,D6 MOVE.W #$4F,-(A7) TRAP #1 ADDQ.L #2,A7 TST.L D0 BEQ L004A LEA L0097,A0 MOVEA.L L0099,A4 BRA L0048 L0052 MOVE.W #1,L009D BSR L0055 MOVE.L D0,D7 MOVEA.L A0,A5 MOVE.W 2(A1),D5 MOVE.W D5,-(A7) MOVE.W #$45,-(A7) TRAP #1 ADDQ.L #4,A7 TST.W D0 BMI L0041 NEG.L D5 SWAP D5 MOVE.W D0,D5 MOVE.L D5,D0 BRA L0043 L0053 CLR.L D0 MOVE.W 4(A1),D0 LEA L0095,A5 TST.W D0 BMI.S L0054 LSL.L #2,D0 MOVE.L 0(A5,D0.W),D0 MOVE.W D0,4(A1) L0054 CLR.L D1 MOVE.W 2(A1),D1 LSL.L #2,D1 MOVE.L D0,0(A5,D1.W) BRA L0008 L0055 LEA L00A6,A0 LEA 160(A0),A0 MOVE.L #5,D0 L0056 ADDQ.L #1,D0 LEA 32(A0),A0 TST.B (A0) BNE.S L0056 RTS L0057 MOVE.L D0,D5 BSR L0060 MOVEA.L A0,A6 MOVEA.L L009B,A5 L0058 CMPA.L A4,A5 BEQ L005C L0059 BSR L005A MOVE.L D0,D4 TST.L D0 BMI L005E PEA L00AB MOVE.L #$400,-(A7) MOVE.W D4,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVE.L #-1,L009F MOVE.L A4,L00A3 MOVE.L L00AC,D0 MOVE.L L00AD,D2 SUBQ.L #1,D2 EORI.L #-1,D2 AND.L D2,D0 MOVE.L D0,L00AA CLR.W -(A7) MOVE.W D4,-(A7) MOVE.L L00AE,-(A7) MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 MOVE.L L009E,-(A7) MOVE.L L00AD,-(A7) MOVE.W D4,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVEA.L L009E,A0 LEA 200(A0),A1 BSR L0070 BSR L005B TST.L D0 BMI.S L005E MOVEA.L D0,A0 MOVE.L D4,D0 RTS L005A CLR.W -(A7) MOVE.L A4,-(A7) MOVE.W #$3D,-(A7) TRAP #1 ADDQ.L #8,A7 RTS L005B MOVEA.L A6,A0 CLR.L D0 MOVE.W (A1),D0 MULU #$16,D0 ADDQ.L #2,A1 MOVEA.L A1,A2 ADDA.L D0,A2 ADDA.L D6,A1 BSR L0064 RTS L005C CMPA.L #L0001,A5 BNE.S L005D CMPI.L #L0000,L009A BEQ.S L005D MOVEA.L L009A,A5 MOVEA.L #L0000,A4 BRA L0059 L005D MOVE.L D5,D0 RTS L005E TST.W D4 BMI.S L005F MOVE.W D4,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 L005F LEA 16(A4),A4 BRA L0058 L0060 CMPI.B #$3A,1(A0) BNE.S L0061 ADDQ.L #2,A0 L0061 MOVEA.L A0,A1 L0062 CMPI.B #$5C,(A1)+ BNE.S L0063 MOVEA.L A1,A0 L0063 TST.B (A1) BNE.S L0062 RTS L0064 CLR.W D1 CLR.W D2 L0065 MOVE.B 0(A0,D1.W),D0 CMP.B #$61,D0 BLT.S L0066 CMP.B #$7A,D0 BGT.S L0066 ANDI.B #-$21,D0 L0066 CMP.B #$3F,D0 BNE.S L0067 TST.B 0(A1,D2.W) BEQ.S L006E CMPI.B #$2E,0(A1,D2.W) BEQ.S L006E BRA.S L0069 L0067 CMP.B 0(A1,D2.W),D0 BNE.S L006A L0068 TST.B D0 BEQ.S L006F L0069 ADDQ.B #1,D1 ADDQ.B #1,D2 BRA.S L0065 L006A CMP.B #$2A,D0 BNE.S L006E ADDQ.B #1,D1 MOVE.B 0(A0,D1.W),D0 CMP.B #$61,D0 BLT.S L006B CMP.B #$7A,D0 BGT.S L006B ANDI.B #-$21,D0 L006B TST.B D0 BEQ.S L006D L006C ADDQ.B #1,D2 CMP.B 0(A1,D2.W),D0 BEQ.S L0068 CMPI.B #$2E,0(A1,D2.W) BEQ.S L0068 TST.B 0(A1,D2.W) BNE.S L006C BRA.S L006E L006D ADDQ.B #1,D2 CMPI.B #$2E,0(A1,D2.W) BEQ.S L006E TST.B 0(A1,D2.W) BNE.S L006D BRA.S L006F L006E LEA 22(A1),A1 CMPA.L A1,A2 BGT L0064 MOVEA.L #-1,A1 L006F MOVE.L A1,D0 RTS L0070 MOVEM.L A0-A6/D0-D7,-(A7) CLR.L D0 MOVE.B (A0),D0 LSL.W #8,D0 MOVE.B 1(A0),D0 SWAP D0 MOVE.B 2(A0),D0 LSL.W #8,D0 MOVE.B 3(A0),D0 CMP.L #"AU5!",D0 BEQ L0071 CMP.L #"AU5$",D0 BNE L0072 L0071 BSR L0075 BRA L0074 L0072 MOVE.L L00AD,D0 ADDA.L D0,A0 ADDA.L D0,A1 SUBQ.L #1,D0 L0073 MOVE.B -(A0),-(A1) DBF D0,L0073 L0074 MOVEM.L (A7)+,A0-A6/D0-D7 RTS L0075 ice_depack move.w $ffff8240.w,-(a7) bsr.s getinfo ; ein Langwort holen cmpi.l #'AU5!',d0 ; Kennung gefunden? bne not_packed ; nein: nicht gepackt bsr.s getinfo ; gepackte Lnge holen lea.l -8(a0,d0.l),a5 ; a5 = Ende der gepackten Daten bsr.s getinfo ; ungepackte Lnge holen (original) ; move.l d0,(sp) ; Originallnge: spter nach d0 move.l a1,a4 ; a4 = Zielpuffer move.l a1,a6 adda.l d0,a6 ; a6 = Ende entpackte Daten move.l a6,a3 ; merken fr Picture decrunch move.b -(a5),d7 ; erstes Informationsbyte bsr normal_bytes bsr get_1_bit ;; Picture decrunch! bcc.s not_packed ;; These marked lines may be move.w #$0f9f,d7 ;; removed in your own sources ice_00: moveq #3,d6 ;; if you do not use the i+ce_01: move.w -(a3),d4 ;; additional algorithm. moveq #3,d5 ;; ice_02: add.w d4,d4 ;; addx.w d0,d0 ;; add.w d4,d4 ;; addx.w d1,d1 ;; add.w d4,d4 ;; addx.w d2,d2 ;; add.w d4,d4 ;; addx.w d3,d3 ;; dbra d5,ice_02 ;; dbra d6,ice_01 ;; movem.w d0-d3,(a3) ;; dbra d7,ice_00 ;; not_packed: rts getinfo: moveq #3,d1 ; ein Langwort vom Anfang getbytes: lsl.l #8,d0 ; der Daten lesen move.b (a0)+,d0 dbf d1,getbytes rts normal_bytes: bsr.s get_1_bit bcc.s test_if_end ; Bit %0: keine Daten moveq.l #0,d1 ; falls zu copy_direkt bsr.s get_1_bit bcc.s copy_direkt ; Bitfolge: %10: 1 Byte direkt kop. lea.l direkt_tab+20(pc),a1 moveq.l #4,d3 nextgb: move.l -(a1),d0 ; d0.w Bytes lesen bsr.s get_d0_bits swap.w d0 cmp.w d0,d1 ; alle gelesenen Bits gesetzt? dbne d3,nextgb ; ja: dann weiter Bits lesen no_more: add.l 20(a1),d1 ; Anzahl der zu bertragenen Bytes copy_direkt: move.w d0,$f8240.w move.b -(a5),-(a6) ; Daten direkt kopieren dbf d1,copy_direkt ; noch ein Byte test_if_end: cmpa.l a4,a6 ; Fertig? bgt.s strings ; Weiter wenn Ende nicht erreicht move.l d7,d5 move.l (a7)+,d0 move.w (a7)+,$f8240.w rts ;* Unterroutinen: wegen Optimierung nicht am Schlu get_1_bit:add.b d7,d7 ; hole ein bit bne.s bitfound ; quellfeld leer move.b -(a5),d7 ; hole Informationsbyte addx.b d7,d7 bitfound: rts get_d0_bits: moveq.l #0,d1 ; ergebnisfeld vorbereiten hole_bit_loop: add.b d7,d7 ; hole ein bit bne.s on_d0 ; in d7 steht noch Information move.b -(a5),d7 ; hole Informationsbyte addx.b d7,d7 on_d0: addx.w d1,d1 ; und bernimm es dbf d0,hole_bit_loop ; bis alle Bits geholt wurden rts ;*$ Ende der Unterroutinen strings: lea.l length_tab(pc),a1 ; a1 = Zeiger auf Tabelle moveq.l #3,d2 ; d2 = Zeiger in Tabelle get_length_bit: bsr.s get_1_bit dbcc d2,get_length_bit ; nchstes Bit holen no_length_bit: moveq.l #0,d4 ; d4 = berschu-Lnge moveq.l #0,d1 move.b 1(a1,d2.w),d0 ; d2: zw. -1 und 3; d3+1: Bits lesen ext.w d0 ; als Wort behandeln bmi.s no_ber ; kein berschu ntig get_ber: bsr.s get_d0_bits no_ber: move.b 6(a1,d2.w),d4 ; Standard-Lnge zu berschu add. add.w d1,d4 ; d4 = String-Lnge-2 beq.s get_offset_2 ; Lnge = 2: Spezielle Offset-Routine lea.l more_offset(pc),a1 ; a1 = Zeiger auf Tabelle moveq.l #1,d2 getoffs: bsr.s get_1_bit dbcc d2,getoffs moveq.l #0,d1 ; Offset-berschu move.b 1(a1,d2.w),d0 ; request d0 Bits ext.w d0 ; als Wort bsr.s get_d0_bits add.w d2,d2 ; ab jetzt: Pointer auf Worte add.w 6(a1,d2.w),d1 ; Standard-Offset zu berschu add. bpl.s depack_bytes ; keine gleiche Bytes: String kop. sub.w d4,d1 ; gleiche Bytes bra.s depack_bytes get_offset_2: moveq.l #0,d1 ; berschu-Offset auf 0 setzen moveq.l #5,d0 ; standard: 6 Bits holen moveq.l #-1,d2 ; Standard-Offset auf -1 bsr.s get_1_bit bcc.s less_40 ; Bit = %0 moveq.l #8,d0 ; quenty fourty: 9 Bits holen moveq.l #$3f,d2 ; Standard-Offset: $3f less_40: bsr.s get_d0_bits add.w d2,d1 ; Standard-Offset + ber-Offset depack_bytes: ; d1 = Offset, d4 = Anzahl Bytes lea.l 2(a6,d4.w),a1 ; Hier stehen die Originaldaten adda.w d1,a1 ; Dazu der Offset move.b -(a1),-(a6) ; ein Byte auf jeden Fall kopieren dep_b: move.b -(a1),-(a6) ; mehr Bytes kopieren dbf d4,dep_b ; und noch ein Mal bra normal_bytes ; Jetzt kommen wieder normale Bytes direkt_tab: dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001 ; Anzahl 1-Bits dc.l 270-1, 15-1, 8-1, 5-1, 2-1 ; Anz. Bytes length_tab: dc.b 9,1,0,-1,-1 ; Bits lesen dc.b 8,4,2,1,0 ; Standard-Lnge - 2 (!!!) more_offset: dc.b 11,4,7,0 ; Bits lesen dc.w $11f,-1,$1f ; Standard Offset dc.b 0 L0092 DC.B $0A,$03,$02,$02,$0E,$07,$04,$01 L0093 DC.B $0A,$02,$01,$00,$00,$0A,$06,$04 DC.B $03,$02 L0094 DC.B $0B,$04,$07,$00,$01,$20,$00,$00 DC.B $00,$20,$00,$00 L0095 DS.W 3 DC.B $00,$01,$00,$00,$00,$02,$00,$00 DC.B $00,$03,$00,$00,$00,$04,$00,$00 DC.B $00,$05,$00,$00,$00,$00,$00,$00 DS.W 29 L0096 DS.W 2 L0097 DS.W 7 L0098 DS.W 2 L0099 DS.W 2 L009A DS.W 2 L009B DS.W 2 L009C DS.W 2 L009D DS.W 1 L009E DS.W 2 L009F DS.W 2 L00A0 DS.W 32 L00A1 DS.W 8 L00A2 DS.W 2 L00A3 DS.W 16 L00A4 DS.W 32 L00A5 DS.W 32 L00A6 DS.W 256 L00A7 DS.W 32 L00A8 DS.W 32 L00A9 DS.W 100 L00AA DS.W 2 L00AB DS.W 2 L00AC DS.W 2 L00AD DS.W 2 L00AE DS.W 506 L00AF DS.W 2 ZUEND ENDRM.K.XO=PP!X@X@=  PP TEXT Begin BRA L0004 L0 DC.B 'super.lum',0,0,0,0,0,0,0 L0001 DS.W 1 L0002 DC.B 'cycle.PRG',0 L0003 DC.B $1B,$45,$1B,$66,$1B,$77 DC.B 'MESSAGE TO APPEAR AT FRONT OF LOADER',13,10 DC.B 'HI FROM EGB... ETC',13,10 DC.B 0 EVEN L0004 MOVEA.L 4(A7),A5 MOVE.L 12(A5),D0 ADD.L 20(A5),D0 ADD.L 28(A5),D0 ADDI.L #$200,D0 ADDI.L #$4008,D0 MOVE.L D0,-(A7) MOVE.L A5,-(A7) MOVE.L #$4A0,-(A7) TRAP #1 LEA 12(A7),A7 DC.B $A0,$0A PEA L0003 MOVE.W #9,-(A7) TRAP #1 ADDQ.L #6,A7 DC.B $A0,$09 MOVE.L #L00AF,L009E MOVE.L #L0,L009A MOVE.L #L0001,L009B CLR.L -(A7) MOVE.W #$20,-(A7) TRAP #1 ADDQ.L #6,A7 LEA L0096(PC),A6 MOVE.L D0,(A6) MOVE.L $084.L,L000A MOVE.L #L0006,$084.L MOVE.L L0096(PC),-(A7) MOVE.W #$20,-(A7) TRAP #1 ADDQ.L #6,A7 L0005 CLR.L L009C MOVEA.L #L0005,A7 MOVE.L #L0,L0099 MOVE.L #-$16,L0098 CLR.L $00060 PEA $00060 PEA $00060 MOVE.L #L0002,-(A7) MOVE.L #$4B0,-(A7) TRAP #1 LEA 16(A7),A7 CLR.W -(A7) TRAP #1 L0006 TST.W L009D BNE L0009 MOVEM.L A0-A6/D0-D7,L00A0 MOVEA.L A7,A1 ADDQ.L #6,A1 MOVE.W (A7),D0 BTST #13,D0 BNE.S L0007 MOVE USP,A1 L0007 CMPI.W #$3D,(A1) BEQ L000B CMPI.W #$3F,(A1) BEQ L0014 CMPI.W #$3E,(A1) BEQ L0032 CMPI.W #$3C,(A1) BEQ L0042 CMPI.W #$40,(A1) BEQ L0045 CMPI.W #$42,(A1) BEQ L0039 CMPI.W #$4E,(A1) BEQ L0046 CMPI.W #$4F,(A1) BEQ L0051 CMPI.W #$45,(A1) BEQ L0052 CMPI.W #$46,(A1) BEQ L0053 L0008 MOVEM.L L00A0(PC),A0-A6/D0-D7 L0009 JMP $0.L L000A EQU L0009+2 L000B MOVE.W #1,L009D BSR L0055 MOVE.L D0,D7 MOVE.L D0,D6 MOVEA.L A0,A5 MOVEA.L 2(A1),A6 MOVE.W 6(A1),-(A7) MOVE.L A6,-(A7) MOVE.W #$3D,-(A7) TRAP #1 ADDQ.L #8,A7 TST.L D0 BPL L000D CLR.L D6 MOVEA.L A6,A0 MOVEA.L L009A,A4 BSR L0057 TST.L D0 BMI L0041 LEA L0095,A1 MOVE.L D7,D6 LSL.L #2,D6 MOVE.L D0,0(A1,D6.W) LEA L00A4,A1 CLR.L 0(A1,D6.W) LEA L00A8,A1 MOVE.L A4,0(A1,D6.W) LEA L00A5,A1 MOVE.L 14(A0),0(A1,D6.W) LEA L00A7,A1 MOVE.L 18(A0),0(A1,D6.W) CLR.L D0 MOVEA.L L009E,A0 MOVE.W 200(A0),D0 MULU #$16,D0 ADDQ.L #2,D0 ANDI.L #$F,D0 ADD.L D0,0(A1,D6.W) MOVE.L D7,D6 LSL.L #5,D7 LEA L00A6,A0 ADDA.L D7,A0 MOVEA.L A6,A2 L000C MOVE.B (A2)+,(A0)+ BNE.S L000C BRA L0013 L000D MOVE.L D0,D4 CLR.L L00AB PEA L00AB MOVE.L #8,-(A7) MOVE.W D4,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 CLR.W -(A7) MOVE.W D4,-(A7) CLR.L -(A7) MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 MOVEA.L A6,A4 MOVE.L #$1F,D0 L000E MOVE.B (A6)+,(A5)+ DBF D0,L000E LSL.L #2,D7 LEA L00A4,A0 MOVE.L #0,0(A0,D7.W) LEA L00A7,A0 MOVE.L #0,0(A0,D7.W) CMPI.L #"AU5$",L00AB BEQ.S L000F LEA L0095,A0 MOVE.L D4,0(A0,D7.W) LEA L00A8,A0 MOVE.L #0,0(A0,D7.W) CMPI.L #"AU5C",L00AB BNE L0013 MOVE.L #-1,0(A0,D7.W) LEA L00A5,A0 MOVE.L L00AC,0(A0,D7.W) BRA L0010 L000F LEA L00A5,A0 MOVE.L L00AC,0(A0,D7.W) LEA L0095,A0 MOVE.L #-1,0(A0,D7.W) LEA L00A8,A0 MOVE.L #0,0(A0,D7.W) MOVE.W D4,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 L0010 LEA L00A3,A5 L0011 TST.B (A4) BEQ.S L0012 CMPM.B (A4)+,(A5)+ BEQ.S L0011 BRA.S L0013 L0012 TST.B (A5) BNE.S L0013 MOVE.L D6,L009C L0013 CLR.W L009D MOVE.L D6,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0014 CLR.L D0 MOVE.W 2(A1),D0 TST.W D0 BMI L0015 MOVE.W D0,D1 LSL.L #2,D1 LEA L0095,A0 MOVE.L 0(A0,D1.W),D2 CMP.W #-1,D2 BEQ L0019 LEA L00A8,A0 MOVE.L 0(A0,D1.W),D3 TST.L D3 BNE L001F L0015 MOVE.W #1,L009D MOVE.L 8(A1),D7 MOVE.L D7,-(A7) MOVE.L 4(A1),-(A7) MOVE.W D2,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVE.L D0,D5 MOVEA.L D7,A0 CLR.L D0 MOVE.B (A0),D0 LSL.W #8,D0 MOVE.B 1(A0),D0 SWAP D0 MOVE.B 2(A0),D0 LSL.W #8,D0 MOVE.B 3(A0),D0 CMP.L #"AU5!",D0 BNE L0031 LEA -200(A0),A1 MOVEA.L A1,A2 LEA L00A9,A3 MOVE.L #$C7,D1 L0016 MOVE.B (A2)+,(A3)+ DBF D1,L0016 L0017 MOVE.B (A0)+,(A1)+ SUBQ.L #1,D5 BNE.S L0017 MOVEA.L A2,A1 LEA -200(A1),A0 MOVE.L A0,-(A7) BSR L0075 MOVEA.L (A7)+,A0 LEA L00A9,A1 MOVE.L #$C7,D1 L0018 MOVE.B (A1)+,(A0)+ DBF D1,L0018 BRA L0031 L0019 CMP.L L009C,D0 BEQ L001B MOVEA.L A1,A5 MOVE.W #1,L009D MOVE.L D0,L009C LSL.L #5,D0 LEA L00A6,A0 ADDA.L D0,A0 MOVEA.L A0,A1 LEA L00A3,A2 MOVE.W #$1F,D0 L001A MOVE.B (A1)+,(A2)+ DBF D0,L001A CLR.W -(A7) MOVE.L A0,-(A7) MOVE.W #$3D,-(A7) TRAP #1 ADDQ.L #8,A7 MOVE.W D0,D6 MOVE.L L009E,-(A7) MOVE.L #$2008,-(A7) MOVE.W D0,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVE.W D6,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 CLR.W L009D MOVEA.L L009E,A0 LEA 200(A0),A1 MOVE.L 4(A0),D7 BSR L0075 MOVEA.L A5,A1 L001B MOVE.L 4(A1),D0 MOVE.L D0,D5 MOVEA.L 8(A1),A0 MOVE.L L009C,D1 LSL.L #2,D1 LEA L00A4,A2 LEA L00A5,A3 MOVE.L 0(A2,D1.W),D2 MOVE.L 0(A3,D1.W),D3 MOVEA.L L009E,A1 LEA 200(A1),A1 ADDA.L D2,A1 L001C MOVE.B (A1)+,(A0)+ ADDQ.L #1,D2 CMP.L D2,D3 BLT.S L001D SUBQ.L #1,D0 BNE.S L001C BRA.S L001E L001D MOVE.L D3,D2 L001E MOVE.L D2,0(A2,D1.W) SUB.L D0,D5 BRA L0031 L001F MOVE.W #1,L009D CMP.L L009C,D0 BEQ L0021 MOVE.L D0,L009C LEA L00A8,A0 MOVEA.L 0(A0,D1.W),A5 CMPA.L L00A3,A5 BEQ L0021 MOVEA.L A1,A5 LSL.L #5,D0 LEA L00A6,A1 ADDA.L D0,A1 LEA L00A3,A2 MOVE.W #$1F,D0 L0020 MOVE.B (A1)+,(A2)+ DBF D0,L0020 MOVE.L D2,D7 CLR.W -(A7) MOVE.W D7,-(A7) CLR.L -(A7) MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 PEA L00AB MOVE.L #$400,-(A7) MOVE.W D7,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVE.L L00AC,D0 MOVE.L L00AD,D2 SUBQ.L #1,D2 EORI.L #-1,D2 AND.L D2,D0 MOVE.L D0,L00AA MOVE.L #-1,L009F MOVEA.L A5,A1 MOVE.L D7,D2 MOVE.L L009C,D0 MOVE.L D0,D1 LSL.L #2,D1 L0021 LEA L00A4,A0 MOVE.L 0(A0,D1.W),D4 MOVE.L 4(A1),D5 MOVE.L D4,D7 ADD.L D5,D7 CMP.L D4,D7 BLT.S L0022 LEA L00A5,A0 CMP.L 0(A0,D1.W),D7 BLT L0023 L0022 MOVE.L 0(A0,D1.W),D7 L0023 SUB.L D4,D7 MOVE.L D7,D5 MOVEA.L 8(A1),A4 MOVEA.L A4,A5 ADDA.L D5,A5 SUBA.L #1,A5 TST.L D5 BEQ L0031 LEA L00A4,A0 LEA L00A7,A1 MOVE.L 0(A1,D1.W),D0 ADD.L D0,0(A0,D1.W) MOVE.W D2,L00A1 MOVE.L D5,D2 LEA L00A4,A0 MOVE.L 0(A0,D1.W),D0 MOVEA.L D0,A2 MOVEA.L A2,A3 MOVE.L L00AD,D3 SUBQ.L #1,D3 AND.L D3,D0 MOVE.L D3,D7 MOVE.L D0,D6 EORI.L #-1,D3 MOVE.L A2,D0 AND.L D3,D0 MOVE.L D0,D4 ADDA.L D5,A3 MOVE.L A3,D5 AND.L D7,D5 MOVE.L A3,D0 AND.L D3,D0 MOVE.L D0,D3 SUB.L D4,D0 MOVE.L L00AD,D7 DIVU D7,D0 MOVE.L D0,D7 MOVE.L D4,D0 MOVE.L L00AD,D2 LEA L00AE,A0 CMP.L L00AA,D0 BNE.S L0024 DIVU D2,D0 LSL.L #2,D0 MOVE.L L00AC,D1 BRA.S L0025 L0024 DIVU D2,D0 LSL.L #2,D0 MOVE.L 4(A0,D0.W),D1 L0025 MOVE.L 0(A0,D0.W),D2 MOVE.L D1,D0 SUB.L D2,D0 CMP.L L009F,D4 BEQ L0026 MOVE.L D4,L009F CLR.W -(A7) MOVE.W L00A1,-(A7) MOVE.L D2,-(A7) MOVE.L D0,D2 MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 MOVE.L L009E,-(A7) MOVE.L D2,-(A7) MOVE.W L00A1,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVEA.L L009E,A0 LEA 200(A0),A1 BSR L0070 BRA L0027 L0026 TST.L D7 BEQ L002C CLR.W -(A7) MOVE.W L00A1,-(A7) MOVE.L D1,-(A7) MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 L0027 CMP.L #1,D7 BLE L002C MOVE.L D7,-(A7) LSL.L #2,D7 MOVE.L D4,D0 MOVE.L L00AD,D2 LEA L00AE,A0 DIVU D2,D0 LSL.L #2,D0 MOVE.L 4(A0,D0.W),D1 ADDA.L D7,A0 MOVE.L 0(A0,D0.W),D2 MOVE.L D2,D0 SUB.L D1,D0 MOVEA.L A4,A6 ADDA.L L00AD,A6 SUBA.L D6,A6 LEA -200(A6),A3 MOVE.L A3,D7 MOVE.L #$C7,D1 BTST #0,D7 BEQ.S L0028 ADDQ.L #1,A3 SUBQ.L #1,D1 L0028 MOVE.L (A7),D7 MOVE.L D6,-(A7) MOVE.L L00AD,D6 MULU D6,D7 MOVE.L (A7)+,D6 ADDA.L D7,A6 MOVE.L (A7)+,D7 LEA L00A9,A0 MOVEA.L A3,A1 MOVE.L D1,D2 L0029 MOVE.B (A1)+,(A0)+ DBF D1,L0029 MOVE.L A3,-(A7) MOVE.L D0,-(A7) MOVE.W L00A1,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 LEA L00AE,A2 MOVE.L D4,D0 MOVE.L D6,-(A7) MOVE.L L00AD,D6 DIVU D6,D0 MOVE.L (A7)+,D6 LSL.L #2,D0 ADDQ.L #4,D0 ADDA.L D0,A2 MOVE.L D7,-(A7) LSL.L #2,D7 SUBQ.L #4,D7 SUBA.L L00AD,A6 L002A SUBA.L L00AD,A6 SUBQ.L #4,D7 MOVEA.L A3,A0 MOVE.L 0(A2,D7.W),D0 SUB.L (A2),D0 ADDA.L D0,A0 MOVEA.L A6,A1 BSR L0070 TST.W D7 BNE.S L002A MOVE.L (A7)+,D7 LEA L00A9,A0 MOVEA.L A3,A1 MOVE.L D2,D1 L002B MOVE.B (A0)+,(A1)+ DBF D1,L002B L002C MOVEA.L L009E,A0 LEA 200(A0),A0 ADDQ.L #1,A5 ADDA.L D6,A0 MOVEA.L A4,A1 L002D CMPA.L A1,A5 BEQ.S L002E CMP.L L00AD,D6 BEQ.S L002E MOVE.B (A0)+,(A1)+ ADDQ.L #1,D6 BRA.S L002D L002E SUBQ.L #1,A5 TST.L D7 BEQ.S L0030 TST.L D5 BEQ.S L0030 MOVE.L D3,L009F MOVE.L L00AD,D3 MULU D3,D7 MOVE.L L009F,D3 MOVE.L L009E,-(A7) MOVE.L L00AD,-(A7) MOVE.W L00A1,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVEA.L L009E,A0 LEA 200(A0),A1 BSR L0070 MOVEA.L L009E,A0 LEA 200(A0),A0 MOVEA.L A5,A1 ADDQ.L #1,A1 SUBA.L D5,A1 SUBQ.L #1,D5 L002F MOVE.B (A0)+,(A1)+ DBF D5,L002F L0030 SUBA.L A4,A5 ADDQ.L #1,A5 MOVE.L A5,D5 MOVE.L L009C,D0 LSL.L #2,D0 LEA L00A7,A0 MOVE.L 0(A0,D0.W),D1 LEA L00A4,A0 SUB.L D1,0(A0,D0.W) ADD.L D5,0(A0,D0.W) L0031 CLR.W L009D MOVE.L D5,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0032 CLR.L D0 CLR.L D7 MOVE.W 2(A1),D7 MOVE.L D7,D6 MOVE.L D7,D5 MOVE.L D7,D4 LSL.L #2,D6 LEA L0095,A5 TST.W D7 BMI.S L0034 LSL.L #5,D4 LEA L00A6,A4 TST.B 0(A4,D4.W) BNE.S L0033 MOVE.L #-$25,D0 BRA L0038 L0033 MOVE.L 0(A5,D6.W),D5 CMP.L #-1,D5 BEQ.S L0035 L0034 MOVE.W #1,L009D MOVE.W D5,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 CLR.W L009D TST.L D0 BMI.S L0038 L0035 TST.W D7 BMI.S L0038 CMP.L L009C,D7 BNE.S L0036 MOVE.L #-1,L009C L0036 CLR.W D5 SWAP D5 TST.W D5 BEQ.S L0037 CMP.W #-1,D5 BEQ.S L0037 MOVE.L D5,0(A5,D6.W) BRA L0038 L0037 LSL.L #5,D7 LEA L00A6,A5 MOVE.B #0,0(A5,D7.W) L0038 MOVE.L D0,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0039 LEA L00A4,A2 LEA L00A5,A3 CLR.L D0 MOVE.W 6(A1),D0 LSL.L #2,D0 CLR.L D1 MOVE.W 8(A1),D1 MOVE.L 2(A1),D2 TST.W D1 BNE.S L003A MOVE.L D2,D3 BRA.S L003D L003A CMP.W #1,D1 BNE.S L003B MOVE.L 0(A2,D0.W),D3 ADD.L D2,D3 BRA.S L003D L003B TST.L D2 BPL.S L003C NEG.L D2 L003C MOVE.L 0(A3,D0.W),D3 SUB.L D2,D3 L003D MOVE.L 0(A3,D0.W),D4 CMP.L D3,D4 BGT.S L003E MOVE.L D4,D3 L003E TST.L D3 BGT.S L003F CLR.L D3 L003F MOVE.L D3,0(A2,D0.W) LEA L0095,A0 MOVE.L 0(A0,D0.W),D4 CMP.L #-1,D4 BEQ.S L0040 LEA L00A8,A0 MOVE.L 0(A0,D0.W),D5 TST.L D5 BNE.S L0040 MOVE.W #1,L009D MOVE.W D1,-(A7) MOVE.W D4,-(A7) MOVE.L D2,-(A7) MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 MOVE.L D0,D3 CLR.W L009D L0040 MOVE.L D3,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0041 CLR.W L009D MOVE.L D0,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0042 MOVE.W #1,L009D BSR L0055 MOVE.L D0,D7 MOVEA.L A0,A5 MOVE.W 6(A1),-(A7) MOVE.L 2(A1),-(A7) MOVE.W #$3C,-(A7) TRAP #1 ADDQ.L #8,A7 TST.W D0 BMI L0044 L0043 MOVE.B #$49,(A5) LEA L0095,A0 MOVE.L D7,D6 LSL.L #2,D7 MOVE.L D0,0(A0,D7.W) MOVE.L D6,D0 L0044 CLR.W L009D MOVE.L D0,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0045 CLR.L D0 MOVE.W 2(A1),D0 TST.W D0 BMI L0008 LSL.L #2,D0 LEA L0095,A0 MOVE.L 0(A0,D0.W),D1 MOVE.W D1,2(A1) BRA L0008 L0046 MOVE.L 2(A1),D5 MOVE.W 6(A1),D6 MOVE.W #1,L009D LEA L0097,A0 MOVEA.L D5,A1 MOVE.L #$D,D0 L0047 MOVE.B (A1)+,(A0)+ DBF D0,L0047 MOVE.L #-$16,L0098 MOVE.L #L0000,L0099 MOVE.W D6,-(A7) MOVE.L D5,-(A7) MOVE.W #$4E,-(A7) TRAP #1 ADDQ.L #8,A7 CLR.L D6 TST.W D0 BEQ.S L004A MOVEA.L D5,A0 MOVEA.L L009A,A4 L0048 BSR L0057 TST.W D0 BMI L0050 MOVE.L A4,L0099 LEA -202(A0),A6 SUBA.L L009E,A6 MOVE.L A6,L0098 MOVEA.L A0,A6 MOVE.W D0,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 MOVE.W #$2F,-(A7) TRAP #1 ADDQ.L #2,A7 MOVEA.L D0,A0 LEA 26(A0),A0 MOVE.L 14(A6),(A0)+ MOVEQ #$D,D0 L0049 MOVE.B (A6)+,(A0)+ DBF D0,L0049 MOVEQ #0,D0 BRA L0050 L004A MOVE.W #$2F,-(A7) TRAP #1 ADDQ.L #2,A7 MOVE.L D0,D7 ADDI.L #$1E,D0 MOVEA.L D0,A0 MOVE.L D0,D4 LEA L0000,A1 LEA L0001,A2 ADDQ.L #1,A1 ADDQ.L #1,A2 L004B CLR.L D0 L004C MOVE.B 0(A1,D0.W),D1 CMP.B 0(A0,D0.W),D1 BNE.S L004D ADDQ.L #1,D0 TST.B D1 BNE.S L004C MOVE.L #-$21,D0 TST.L D6 BRA L0051 L004D LEA 16(A1),A1 CMPA.L A2,A1 BNE.S L004B CLR.W -(A7) MOVE.L D4,-(A7) MOVE.W #$3D,-(A7) TRAP #1 ADDQ.L #8,A7 TST.L D0 BMI.S L004F MOVE.W D0,D6 CLR.L L00A1 PEA L00A1 MOVE.L #8,-(A7) MOVE.W D0,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVE.W D6,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 LEA L00A1,A0 CMPI.L #"AU5$",(A0) BEQ.S L004E CMPI.L #"AU5!",(A0) BNE.S L004F L004E MOVEA.L D7,A1 MOVE.L 4(A0),26(A1) L004F CLR.L D0 L0050 CLR.W L009D MOVE.L D0,-(A7) MOVEM.L L00A0,A0-A6/D0-D7 MOVE.L (A7)+,D0 RTE L0051 MOVE.W #1,L009D MOVE.L L0098,D6 ADDI.L #$16,D6 MOVE.W #$4F,-(A7) TRAP #1 ADDQ.L #2,A7 TST.L D0 BEQ L004A LEA L0097,A0 MOVEA.L L0099,A4 BRA L0048 L0052 MOVE.W #1,L009D BSR L0055 MOVE.L D0,D7 MOVEA.L A0,A5 MOVE.W 2(A1),D5 MOVE.W D5,-(A7) MOVE.W #$45,-(A7) TRAP #1 ADDQ.L #4,A7 TST.W D0 BMI L0041 NEG.L D5 SWAP D5 MOVE.W D0,D5 MOVE.L D5,D0 BRA L0043 L0053 CLR.L D0 MOVE.W 4(A1),D0 LEA L0095,A5 TST.W D0 BMI.S L0054 LSL.L #2,D0 MOVE.L 0(A5,D0.W),D0 MOVE.W D0,4(A1) L0054 CLR.L D1 MOVE.W 2(A1),D1 LSL.L #2,D1 MOVE.L D0,0(A5,D1.W) BRA L0008 L0055 LEA L00A6,A0 LEA 160(A0),A0 MOVE.L #5,D0 L0056 ADDQ.L #1,D0 LEA 32(A0),A0 TST.B (A0) BNE.S L0056 RTS L0057 MOVE.L D0,D5 BSR L0060 MOVEA.L A0,A6 MOVEA.L L009B,A5 L0058 CMPA.L A4,A5 BEQ L005C L0059 BSR L005A MOVE.L D0,D4 TST.L D0 BMI L005E PEA L00AB MOVE.L #$400,-(A7) MOVE.W D4,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVE.L #-1,L009F MOVE.L A4,L00A3 MOVE.L L00AC,D0 MOVE.L L00AD,D2 SUBQ.L #1,D2 EORI.L #-1,D2 AND.L D2,D0 MOVE.L D0,L00AA CLR.W -(A7) MOVE.W D4,-(A7) MOVE.L L00AE,-(A7) MOVE.W #$42,-(A7) TRAP #1 LEA 10(A7),A7 MOVE.L L009E,-(A7) MOVE.L L00AD,-(A7) MOVE.W D4,-(A7) MOVE.W #$3F,-(A7) TRAP #1 LEA 12(A7),A7 MOVEA.L L009E,A0 LEA 200(A0),A1 BSR L0070 BSR L005B TST.L D0 BMI.S L005E MOVEA.L D0,A0 MOVE.L D4,D0 RTS L005A CLR.W -(A7) MOVE.L A4,-(A7) MOVE.W #$3D,-(A7) TRAP #1 ADDQ.L #8,A7 RTS L005B MOVEA.L A6,A0 CLR.L D0 MOVE.W (A1),D0 MULU #$16,D0 ADDQ.L #2,A1 MOVEA.L A1,A2 ADDA.L D0,A2 ADDA.L D6,A1 BSR L0064 RTS L005C CMPA.L #L0001,A5 BNE.S L005D CMPI.L #L0000,L009A BEQ.S L005D MOVEA.L L009A,A5 MOVEA.L #L0000,A4 BRA L0059 L005D MOVE.L D5,D0 RTS L005E TST.W D4 BMI.S L005F MOVE.W D4,-(A7) MOVE.W #$3E,-(A7) TRAP #1 ADDQ.L #4,A7 L005F LEA 16(A4),A4 BRA L0058 L0060 CMPI.B #$3A,1(A0) BNE.S L0061 ADDQ.L #2,A0 L0061 MOVEA.L A0,A1 L0062 CMPI.B #$5C,(A1)+ BNE.S L0063 MOVEA.L A1,A0 L0063 TST.B (A1) BNE.S L0062 RTS L0064 CLR.W D1 CLR.W D2 L0065 MOVE.B 0(A0,D1.W),D0 CMP.B #$61,D0 BLT.S L0066 CMP.B #$7A,D0 BGT.S L0066 ANDI.B #-$21,D0 L0066 CMP.B #$3F,D0 BNE.S L0067 TST.B 0(A1,D2.W) BEQ.S L006E CMPI.B #$2E,0(A1,D2.W) BEQ.S L006E BRA.S L0069 L0067 CMP.B 0(A1,D2.W),D0 BNE.S L006A L0068 TST.B D0 BEQ.S L006F L0069 ADDQ.B #1,D1 ADDQ.B #1,D2 BRA.S L0065 L006A CMP.B #$2A,D0 BNE.S L006E ADDQ.B #1,D1 MOVE.B 0(A0,D1.W),D0 CMP.B #$61,D0 BLT.S L006B CMP.B #$7A,D0 BGT.S L006B ANDI.B #-$21,D0 L006B TST.B D0 BEQ.S L006D L006C ADDQ.B #1,D2 CMP.B 0(A1,D2.W),D0 BEQ.S L0068 CMPI.B #$2E,0(A1,D2.W) BEQ.S L0068 TST.B 0(A1,D2.W) BNE.S L006C BRA.S L006E L006D ADDQ.B #1,D2 CMPI.B #$2E,0(A1,D2.W) BEQ.S L006E TST.B 0(A1,D2.W) BNE.S L006D BRA.S L006F L006E LEA 22(A1),A1 CMPA.L A1,A2 BGT L0064 MOVEA.L #-1,A1 L006F MOVE.L A1,D0 RTS L0070 MOVEM.L A0-A6/D0-D7,-(A7) CLR.L D0 MOVE.B (A0),D0 LSL.W #8,D0 MOVE.B 1(A0),D0 SWAP D0 MOVE.B 2(A0),D0 LSL.W #8,D0 MOVE.B 3(A0),D0 CMP.L #"AU5!",D0 BEQ L0071 CMP.L #"AU5$",D0 BNE L0072 L0071 BSR L0075 BRA L0074 L0072 MOVE.L L00AD,D0 ADDA.L D0,A0 ADDA.L D0,A1 SUBQ.L #1,D0 L0073 MOVE.B -(A0),-(A1) DBF D0,L0073 L0074 MOVEM.L (A7)+,A0-A6/D0-D7 RTS L0075 ice_depack move.w $f8240.w,-(a7) bsr.s getinfo ; ein Langwort holen cmpi.l #'AU5!',d0 ; Kennung gefunden? bne not_packed ; nein: nicht gepackt bsr.s getinfo ; gepackte Lnge holen lea.l -8(a0,d0.l),a5 ; a5 = Ende der gepackten Daten bsr.s getinfo ; ungepackte Lnge holen (original) ; move.l d0,(sp) ; Originallnge: spter nach d0 move.l a1,a4 ; a4 = Zielpuffer move.l a1,a6 adda.l d0,a6 ; a6 = Ende entpackte Daten move.l a6,a3 ; merken fr Picture decrunch move.b -(a5),d7 ; erstes Informationsbyte bsr normal_bytes bsr get_1_bit ;; Picture decrunch! bcc.s not_packed ;; These marked lines may be move.w #$0f9f,d7 ;; removed in your own sources ice_00: moveq #3,d6 ;; if you do not use the ice_01: move.w -(a3),d4 ;; additional algorithm. moveq #3,d5 ;; ice_02: add.w d4,d4 ;; addx.w d0,d0 ;; add.w d4,d4 ;; addx.w d1,d1 ;; add.w d4,d4 ;; addx.w d2,d2 ;; add.w d4,d4 ;; addx.w d3,d3 ;; dbra d5,ice_02 ;; dbra d6,ice_01 ;; movem.w d0-d3,(a3) ;; dbra d7,ice_00 ;; not_packed: rts getinfo: moveq #3,d1 ; ein Langwort vom Anfang getbytes: lsl.l #8,d0 ; der Daten lesen move.b (a0)+,d0 dbf d1,getbytes rts normal_bytes: bsr.s get_1_bit bcc.s test_if_end ; Bit %0: keine Daten moveq.l #0,d1 ; falls zu copy_direkt bsr.s get_1_bit bcc.s copy_direkt ; Bitfolge: %10: 1 Byte direkt kop. lea.l direkt_tab+20(pc),a1 moveq.l #4,d3 nextgb: move.l -(a1),d0 ; d0.w Bytes lesen bsr.s get_d0_bits swap.w d0 cmp.w d0,d1 ; alle gelesenen Bits gesetzt? dbne d3,nextgb ; ja: dann weiter Bits lesen no_more: add.l 20(a1),d1 ; Anzahl der zu bertragenen Bytes copy_direkt: move.w d0,$f8240.w move.b -(a5),-(a6) ; Daten direkt kopieren dbf d1,copy_direkt ; noch ein Byte test_if_end: cmpa.l a4,a6 ; Fertig? bgt.s strings ; Weiter wenn Ende nicht erreicht move.l d7,d5 move.l (a7)+,d0 move.w (a7)+,$f8240.w rts ;* Unterroutinen: wegen Optimierung nicht am Schlu get_1_bit:add.b d7,d7 ; hole ein bit bne.s bitfound ; quellfeld leer move.b -(a5),d7 ; hole Informationsbyte addx.b d7,d7 bitfound: rts get_d0_bits: moveq.l #0,d1 ; ergebnisfeld vorbereiten hole_bit_loop: add.b d7,d7 ; hole ein bit bne.s on_d0 ; in d7 steht noch Information move.b -(a5),d7 ; hole Informationsbyte addx.b d7,d7 on_d0: addx.w d1,d1 ; und bernimm es dbf d0,hole_bit_loop ; bis alle Bits geholt wurden rts ;*$ Ende der Unterroutinen strings: lea.l length_tab(pc),a1 ; a1 = Zeiger auf Tabelle moveq.l #3,d2 ; d2 = Zeiger in Tabelle get_length_bit: bsr.s get_1_bit dbcc d2,get_length_bit ; nchstes Bit holen no_length_bit: moveq.l #0,d4 ; d4 = berschu-Lnge moveq.l #0,d1 move.b 1(a1,d2.w),d0 ; d2: zw. -1 und 3; d3+1: Bits lesen ext.w d0 ; als Wort behandeln bmi.s no_ber ; kein berschu ntig get_ber: bsr.s get_d0_bits no_ber: move.b 6(a1,d2.w),d4 ; Standard-Lnge zu berschu add. add.w d1,d4 ; d4 = String-Lnge-2 beq.s get_offset_2 ; Lnge = 2: Spezielle Offset-Routine lea.l more_offset(pc),a1 ; a1 = Zeiger auf Tabelle moveq.l #1,d2 getoffs: bsr.s get_1_bit dbcc d2,getoffs moveq.l #0,d1 ; Offset-berschu move.b 1(a1,d2.w),d0 ; request d0 Bits ext.w d0 ; als Wort bsr.s get_d0_bits add.w d2,d2 ; ab jetzt: Pointer auf Worte add.w 6(a1,d2.w),d1 ; Standard-Offset zu berschu add. bpl.s depack_bytes ; keine gleiche Bytes: String kop. sub.w d4,d1 ; gleiche Bytes bra.s depack_bytes get_offset_2: moveq.l #0,d1 ; berschu-Offset auf 0 setzen moveq.l #5,d0 ; standard: 6 Bits holen moveq.l #-1,d2 ; Standard-Offset auf -1 bsr.s get_1_bit bcc.s less_40 ; Bit = %0= moveq.l #8,d0 ; quenty fourty: 9 Bits holen moveq.l #$3f,d2 ; Standard-Offset: $3f less_40: bsr.s get_d0_bits add.w d2,d1 ; Standard-Offset + ber-Offset depack_bytes: ; d1 = Offset, d4 = Anzahl Bytes lea.l 2(a6,d4.w),a1 ; Hier stehen die Originaldaten adda.w d1,a1 ; Dazu der Offset move.b -(a1),-(a6) ; ein Byte auf jeden Fall kopieren dep_b: move.b -(a1),-(a6) ; mehr Bytes kopieren dbf d4,dep_b ; und noch ein Mal bra normal_bytes ; Jetzt kommen wieder normale Bytes direkt_tab: dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001 ; Anzahl 1-Bits dc.l 270-1, 15-1, 8-1, 5-1, 2-1 ; Anz. Bytes length_tab: dc.b 9,1,0,-1,-1 ; Bits lesen dc.b 8,4,2,1,0 ; Standard-Lnge - 2 (!!!) more_offset: dc.b 11,4,7,0 ; Bits lesen dc.w $11f,-1,$1f ; Standard Offset dc.b 0 L0092 DC.B $0A,$03,$02,$02,$0E,$07,$04,$01 L0093 DC.B $0A,$02,$01,$00,$00,$0A,$06,$04 DC.B $03,$02 L0094 DC.B $0B,$04,$07,$00,$01,$20,$00,$00 DC.B $00,$20,$00,$00 L0095 DS.W 3 DC.B $00,$01,$00,$00,$00,$02,$00,$00 DC.B $00,$03,$00,$00,$00,$04,$00,$00 DC.B $00,$05,$00,$00,$00,$00,$00,$00 DS.W 29 L0096 DS.W 2 L0097 DS.W 7 L0098 DS.W 2 L0099 DS.W 2 L009A DS.W 2 L009B DS.W 2 L009C DS.W 2 L009D DS.W 1 L009E DS.W 2 L009F DS.W 2 L00A0 DS.W 32 L00A1 DS.W 8 L00A2 DS.W 2 L00A3 DS.W 16 L00A4 DS.W 32 L00A5 DS.W 32 L00A6 DS.W 256 L00A7 DS.W 32 L00A8 DS.W 32 L00A9 DS.W 100 L00AA DS.W 2 L00AB DS.W 2 L00AC DS.W 2 L00AD DS.W 2 L00AE DS.W 506 L00AF DS.W 2 ZUEND END` :KOp - ЭЭ// /<JNAO Aa"a*a0ACaLAhaBgHz?<NNA\A"za*"zA~r Q"$:~$"#Ryѹ?<ONATOJgA0a :L$#" :>T#ЁAZa"H 0gSalA\afHz?< NA\J@gAT@B0ARaFBgHz?<Hz/:??<@NAO Hz"/:??<@NAO ??<>NAXBgNA/?< NA\Nu?<NATNuBy##$HzJ?<NA\Nu/ *I?</?<=NAPJk"?/ /<??<?NAO *@?<>NAX *_NuHPt 0 9o^0 9o^QLNu\LUMPPACK.LMP\*.*Efwp  LUMPY! PACKER v1.1 q Please insert disk to be 'lumped' and press any key to continue..Y% l l l Y% Now LUMPING files...Y% l l l Y% Lumping complete, now insert blank disk, or one with at least: 0 bytes free Enter a file name: Ep  LUMPY! PACKER v1.1 q Now saving file...  .  `..  4`PACK501 PRG 1!CB,PACK501 RSC O 3FONLY S |!SCHUNKY5 S `XULUMP501 S nULUMPY PRG %`*o"mE$"mE~$Ev$?<NNTCp"$@2<}NqQ?<NNT<gC_9CT/ ?< Nq\B?< NA\M8,>9@AE$E"Ra>3@/:?< NA\*z&z k -"zJg$BёBBJAg<f``&z+k +k+k  -"- Ҁ+A -Ҁ+A -Ҁ+A "A :d$@*@$<&CQ"z>$:8(z,&LNٳf0<BQ"L /INY % AUTOMATION PACKER V2.3r(H*БJ`jS f dZBAf dBG8vBA30HxlFDSBf QQJCgAV30HB`  3@Q&LPoG:tf dQBARB3 gHSCf QQ3 HC`   Ag@G2vf dQRCBB30Hf RQKs0`0  BBvBDf dvx@f RQDE HSA"Q`NuLSD!`,":2`>u6Y{DlFP(DON'Jp WIi THE BEST!)YPRq"+ 4_p02 `P45fw'PMNAy`[cT٣Dv:w9BLJfRm26Bs9G1$؆#Źԭ6`PM W@*4=`C,J6 z8jg7&&*` @`bsoI 1f{)3X`ʼ/MjQ-,%#ǰŰ"f9sa>(Arnz@3eg44V`^RV=3 Z!X!.,QܼNV:`^Iq 5.[a*L*r OpPl`a L|\Q[vnV?3 NN]O*_>ų +Ϟ/ ,JS nʺzz6Hy̛fB Bf&}"Yxf{O`hS pԨ۬,vvv#(  -NB If2C~6pk$I!uߓ\uO"JG\P2g`B (s>Q6xk=5/)?6ku V`f: 6Q af(̷r" ގpp4`BxW 228sZQ?ni&ա&nc,&2hcqj0&-鋻@ f|.\NV$n*\&EPBENy3r$ia60[f6)B@C?&Ifb bR@0fz¯30V38Z7TRAGW#2.g0Ў[,'`mmP zlsVAWfQ%G곆fSVREcT {A dRIv2 z n*BB!#/CY8!|LS! 3K$= *v6\ˁ^yH@EB0@hPQ b,v8KBK6308K~i1Ddj  { @?b?o A˓x ΋<8M4Y   G0zRɼD\ND3PHriESD@QΤCBG|o`XH ?& " O8] g "7L^O}rpgܤ`$H7oG J.vĺfPԠG`DDATB΂6cp@o:3| cvfzxܢNP=pJg` .g`8RPg Tf*_Oԫ">f`Rj (GOWp`X\0C70X BXuHgb<PQX9D/$0#Rr3duD?E^#JR#: "E%t :Z`&6x&8YpR36SE-! =FA/B?F toS1JxW/SMKL.5نOU* 4{'8<Ǹ $000 BYH"9/)](Eld +BY3p)6X!C9$pOFxIGASIZ=RZ_-7Y L .7xU) S8FLOC~: $'>x0=SU7RSMODl(y/n9?Lu,G%...@k<O+nG4, (QFONLY)?ɍ MTI-UhsN l0*;H*MxhTL(M2Uϓ*q9RAMpeM(7,VDOEEX]F@M B|"93 /:uX*w uh0ΪJg;$BёBcJAXizf``&4~9T C+k`tѰ" ,CA -MҀ+, "A &d$@*@$O&9l >f$:(%,'N<ٳf0<BQ"LZ /I<V- W3rў(H*БlJ`jS"ZBB[8v&xlFDSBSJCgAVb&HB7T6 3@&LPoJ:Ʀ:tCjBARBxUSC?Q23 HC`F  $ Aֹg@Gԛvd <RC(30 Ks0`0 78EBBvBD7dvx@f RQDE HSAo`NuQ~`ݰ jQ JNTǿgr=9Q>2/ k PaD/\ dPC"QaJa. zNoAY %w AUTOMATION PACKER V2.2f,_/:?< NA\A NրN< @Sd" & . !?hy&$&4$4Y  2%*,Ma"LR  *>. h`M.K.q`0x` ` ` U} U U} U P@ P PS P E E E E  @} @ @ @ .5 5 @5S 5 S0 0 h0 0  %.  `..  4`DCSQUISHPRG lt l9` ZHz?<&NN\OAEaPACE""""""&JACIL HNسoBoHTNJhf>"hA "g&ѐrt&<g`g gѐfNuAC8|@?$I<<wBEGK>MNeN4NSBf8ofNdN$N61(SCf8n8NufNe0fNdpr fNPQHNuprfNQNufNdprfNPQNupfNfNfNfNfNfNfNfNNu. <Nu94A"*,oOA:a. . ЮЮ//Bg?<J.LEA(CEpgB1<am <znfAca*P !`S >03?<Q3Pa8(YTȐ~Ș@~@~@~@~A ͬ b @ Q PC OB y   ‚(мBO0!"@Ut &\GaF xkxR@G@PW@BRʉ'* gc~@f @\ ;J\t =t @,@t !jd l i?A, h@SyLI"~xx@|PXt 9t r (Xg@“^~~x|@>y~xFgH  (@L  $@@G@QP yF;H ΢ 5 D@ ( Fict @@R $ HO?@BL "%B !  #ά F˜`` ch` œ &খ~x~x~xe@yμRRhIΥ CIl@ N@6 N@V N@d,8L8 H<$L7 h,IΦL BFl4׏ Τ@m@l@#I HtlxQ;H( BetX G0WA# "`VA3Q2.K(oPmP$ #P`$R'@ (8<I"BbF"&p?#Ego"D[B&nb&n\_N_ 6#4<0 2 fSBkpNuDBDo 8HBHC`C0r/RAdЙJf0 p 0f |_QNu;B@'d |H 4V$(eHz?<&NN\OAEaPACE&T1""&JACIL HNسoBoHTNJhf>"hA "g&VH7 @c!qFm1!p &m!oDT?$BD=wt$T ߠ6QS@a04&ok<SN$N61(SCf8n8P6S1G 5@  !9Y8 r\$0xـK8ӝ@R@ANAXA#x#|# a p`Az"HEB$BtBABadJg RA Afa^naVa  #pG'G'@BBBBBBGL?&JINu&Ho&Iz*HRM(fgn`\SM(Hfn& Sl@( SD o| m6<`<UFNMv`l*#n g8az9&906`a06`g&SCa06`66` azRv`(BNupajpNu  JAg6BA C lRy$SCp`NuRy&C Cp S@eQNuB@$µtQNu"yp& #, Aaa :,AaJkhaAapaxBg/9NAXA`aA>`HM8'HF8a HF8aL@pNuz HD0BDHDQNu0HG&<I,LKA"|pW"QNSjB?< NA/@aNA\A@C@ C$I!i Ш !@!iШ!@!i  *ЪJjf:C I&HB$ ձJgЁ<f`B fLxN>8@ N"M "*$I fae2rvfareLrBDav6Drfa^QQ`8rx`raR m graB62< ` 2< BTB6a.SJ Q1ł@m1ǂ@Jg1@Nu DNuSABBf DQNuAD`Aoaa?<LNA/?< NA\Nu?<NATNuBytekiller ST - By M.Coates - V2.0 Insert program disk and press a key Disk error - Press SPACE to exit Insert destination disk and press SPACE Completed - Press SPACE to exit f Original Program Length : Compacted Program Length : Saving (or otherwise) : None! Press SPACE to exit ` 6"  . p0B@P @ PpP@P@PPpPPP P PpPPP@P @`XPP@ P @`PP@ P@pXPP@p@@@ @P@@p@ P:P@P @ PpP@PS@0`OA:aa$AB@B0#NAXA#x#|# a p`Az"HEB$BtBABadJg RA Afa^naVa  #pG'G'@BBBBBBGL?&JINu&Ho&Iz*HRM(fgn`\SM(Hfn& Sl@( SD o| m6<`<UFNMv`l*#n g8az9&906`a06`g&SCa06`66` azRv`(BNupajpNu  JAg6BA C lRy$SCp`NuRy&C Cp S@eQNuB@$µtQNu"yp& #, Aaa :,AaJkhaAapaxBg/9NAXA`aA>`HM8'HF8a HF8aL@pNuz HD0BDHDQNu0HG&<I,LKA"|pW"QNSjB?< NA/@aNA\A@C@ C$I!i Ш !@!iШ!@!i  *ЪJjf:C I&HB$ ձJgЁ<f`B fLxN>8@ N"M "*$I fae2rvfareLrBDav6Drfa^QQ`8rx`raR m graB62< ` 2< BTB6a.SJ Q1Ȃ@m1ǂ@Jg1@Nu DNuSABBf DQNuAD`Aoaa?<LNA/?< NA\Nu?<NATNuBytekiller ST - By M.Coates - V2.0 Insert program disk and press a key Disk error - Press SPACE to exit Insert destination disk and press SPACE Completed - Press SPACE to exit f Original Program Length : Compacted Program Length : Saving (or otherwise) : None! Press SPACE to exit ` 6"  . p0B20pP 0 0 0pP0 0 P`P P P`SPP}0 PpPPpS0 PSPPp PPP PpSP P}0`hOAfaHaPAB@B0#hBg/?<=NAPJ@k?Hz4/<??<?NAO Jk#,Aaa ?<>NAXA### Aaa `A"H>E>B$4BtBABaJg RA Afa~RJ9fH,lAa`azLGnaLa  #G'G'@BBBBBBG L?&JI*Nu&Ho&Iz*HRM(fgn`ZSM(Hfn& Sl>( SD o| m6<`<UFNMfv`l*#n g4av:>&:606`a06`g&SCa06`66` azRv`(BNupajpNu  JAg6BA C lRyJSCp`NuRyLC Cp S@eQNuB@$µtQNuA%a,:@a"z& #, Aaa :,AavJk\aAadalBg/:p?<8Hz/<??<@NAO Hz/<??<@NAO Hz/??<@NAO Hz/<??<@NAO ??<>NAXA`aA>`HM8'HF8a HF8aL@pNuz HD0BDHDQNu0HB?< NA/@Gr&<I,LKA$x"JpS"QNSjaNA\A@C@ C$I!i Ш !@!iШ!@!i  *ЪJjf:C I&HB$ ձJgЁ<f`B fLxN>8@ N"ML#$I fa|e2rvfaneHrBDar6DrfaZQQ`4rx`raN m gra>6r `r BTB6a.SJ Q1Ȃ@m1ǂ@Jg1@Nu DNuSABBf DQNuAD`Aoaa?<LNA/?< NA\Nu?<NATNuBytekiller ST - By M.Coates - V3.0 Insert program disk and press a key Disk error - Press SPACE to exit Insert destination disk and press SPACE Completed - Press SPACE to exit f Original Program Length : Compacted Program Length : Saving (or otherwise) : None! Press SPACE to exit Working position : 0` 6":$ J0S Pph0PS0S @`P@ S @` @SP@ @pSPS @@pPS @SP@ S @pP@ .  d`..  4`FIREPACKPRG t w;*- Unpackroutine von FIRE-PACK ; Eingabe: a0 = Adresse gepackter Daten fire_decrunch_2: link a3,#-120 movem.l d0-a6,-(sp) lea 120(a0),a4 ; a4 = Anfang entpackte Daten move.l a4,a6 ; a6 = Ende entpackte Daten bsr.s .getinfo cmpi.l #'FIRE',d0 ; Kennung gefunden? bne .not_packed bsr.s .getinfo ; gepackte Lnge holen lea.l -8(a0,d0.l),a5 ; a5 = Ende der gepackten Daten bsr.s .getinfo ; ungepackte Lnge holen (original) move.l d0,(sp) ; Originallnge: spter nach d0 adda.l d0,a6 ; a6 = Ende entpackte Daten move.l a6,a1 moveq #119,d0 ; 120 Bytes hinter entpackten Daten .save: move.b -(a1),-(a3) ; in sicheren Bereich sichern dbf d0,.save move.l a6,a3 ; merken fr spter move.b -(a5),d7 ; erstes Informationsbyte lea .tabellen(pc),a2 ; a2 = Zeiger auf Datenbereich moveq #1,d6 swap d6 ; d6 = $10 moveq #0,d5 ; d5 = 0 (oberes Wort: immer 0!) .normal_bytes: bsr.s .get_1_bit bcc.s .test_if_end ; Bit %0: keine Daten moveq #0,d1 ; falls zu .copy_direkt bsr.s .get_1_bit bcc.s .copy_direkt ; Bitfolge: %10: 1 Byte direkt kop. ; lea.l .direkt_tab+16-.tabellen(a2),a0 ; ...siehe nchste Zeile move.l a2,a0 moveq #3,d3 .nextgb: move.l -(a0),d0 ; d0.w Bytes lesen bsr.s .get_d0_bits swap d0 cmp.w d0,d1 ; alle gelesenen Bits gesetzt? dbne d3,.nextgb ; ja: dann weiter Bits lesen .no_more: add.l 16(a0),d1 ; Anzahl der zu bertragenen Bytes .copy_direkt: move.b -(a5),-(a6) ; Daten direkt kopieren dbf d1,.copy_direkt ; noch ein Byte .test_if_end: cmp.l a4,a6 ; Fertig? bgt.s .strings ; Weiter wenn Ende nicht erreicht movem.l (sp),d0-a2/a5 ; hole ntige Register .move move.b (a4)+,(a0)+ subq.l #1,d0 bne.s .move moveq #119,d0 ; um berschriebenen Bereich .rest move.b -(a5),-(a3) ; wieder herzustellen dbf d0,.rest .not_packed: movem.l (sp)+,d0-a6 unlk a3 rts ;* Unterroutinen: wegen Optimierung nicht am Schlu .getinfo: moveq #3,d1 .glw: rol.l #8,d0 move.b (a0)+,d0 dbf d1,.glw rts .get_1_bit: add.b d7,d7 ; hole ein Bit beq.s .no_bit_found rts .no_bit_found: move.b -(a5),d7 addx.b d7,d7 rts .get_d0_bits: moveq #0,d1 ; ergebnisfeld vorbereiten .hole_bit_loop: add.b d7,d7 ; hole ein Bit beq.s .not_found ; quellfeld leer .on_d0: addx.w d1,d1 ; und bernimm es dbf d0,.hole_bit_loop ; bis alle Bits geholt wurden rts .not_found: move.b -(a5),d7 ; hole sonst ein weiters longword addx.b d7,d7 ; hole ein Bit bra.s .on_d0 ;*$ Ende der Unterroutinen .strings: moveq #1,d0 ; 2 Bits lesen bsr.s .get_d0_bits subq.w #1,d1 bmi.s .gleich_morestring ; %00 beq.s .length_2 ; %01 subq.w #1,d1 beq.s .length_3 ; %10 bsr.s .get_1_bit bcc.s .bitset ; %110 bsr.s .get_1_bit bcc.s .length_4 ; %1110 bra.s .length_5 ; %1 .get_short_offset: moveq #1,d0 bsr.s .get_d0_bits ; d1: 0, 1, 2, 3 subq.w #1,d1 bpl.s .contoffs moveq #0,d0 ; Sonderfall rts .get_long_offset: moveq #1,d0 ; 2 Bits lesen bsr.s .get_d0_bits ; d1: 0, 1, 2, 3 .contoffs add.w d1,d1 ; d1: 0, 2, 4, 6 add.w d1,d1 ; d1: 0, 4, 8, 12 movem.w .offset_table-.tabellen(a2,d1),d0/d5 bsr.s .get_d0_bits ; 4, 8, 12 oder 16 Bits lesen add.l d5,d1 rts .gleich_morestring: ; %00 moveq #1,d0 ; 2 Bits lesen bsr.s .get_d0_bits ; d1: 0, 1, 2, 3 subq.w #1,d1 bmi.s .gleich_string ; %0 add.w d1,d1 ; d1: 0, 2, 4 add.w d1,d1 ; d1: 0, 4, 8 movem.w .more_table-.tabellen(a2,d1),d0/d2 bsr.s .get_d0_bits add.w d1,d2 ; d2 = Stringlnge bsr.s .get_long_offset move.w d2,d0 ; d0 = Stringlnge bra.s .copy_longstring .bitset: moveq #2,d0 ; %110 bsr.s .get_d0_bits moveq #0,d0 bset d1,d0 bra.s .put_d0 .length_2: moveq #7,d0 ; %01 bsr.s .get_d0_bits moveq #2-2,d0 bra.s .copy_string .length_3: bsr.s .get_short_offset ; %10 tst.w d0 beq .put_d0 ; 0 ablegen moveq #3-2,d0 bra.s .copy_string .length_4: bsr.s .get_short_offset ; %1110 tst.w d0 beq.s .vorgnger_kopieren moveq #4-2,d0 bra.s .copy_string .length_5: bsr.s .get_short_offset ; %1 tst.w d0 beq.s .put_ff moveq #5-2,d0 bra.s .copy_string .put_ff: moveq #-1,d0 bra.s .put_d0 .vorgnger_kopieren: move.b (a6),d0 ; bra.s .put_d0 .put_d0: move.b d0,-(a6) bra.s .backmain .gleich_string: bsr.s .get_long_offset ; Anzahl gleicher Bytes lesen beq.s .backmain ; 0: zurck move.b (a6),d0 .copy_gl: move.b d0,-(a6) dbf d1,.copy_gl sub.l d6,d1 bmi.s .backmain bra.s .copy_gl .copy_longstring: subq.w #2,d0 ; Stringlnge - 2 (wegen dbf) .copy_string: ; d1 = Offset, d0 = Anzahl Bytes -2 lea.l 2(a6,d1.l),a0 ; Hier stehen die Originaldaten add.w d0,a0 ; dazu die Stringlnge-2 move.b -(a0),-(a6) ; ein Byte auf jeden Fall kopieren .dep_b: move.b -(a0),-(a6) ; mehr Bytes kopieren dbf d0,.dep_b ; und noch ein Mal .backmain bra .normal_bytes ; Jetzt kommen wieder normale Bytes .direkt_tqab: dc.l $03ff0009,$00070002,$00030001,$00030001 ; Anzahl 1-Bits .tabellen:dc.l 15-1, 8-1, 5-1, 2-1 ; Anz. Bytes .offset_table: dc.w 3, 0 dc.w 7, 16+0 dc.w 11, 256+16+0 dc.w 15, 4096+256+16+0 .more_table: dc.w 3, 5 dc.w 5, 16+5 dc.w 7, 64+16+5 ende_fire_decrunch_2: ;*3 Ende der Unpackroutine Sp P}@pSXPpP}@pXPSpP@`XPS`PSpXP pSpP p XXP@}PSXP@pP`(P`P@p(P pSpP p@(PSpP@;*- Unpackroutine von FIRE-PACK ; Eingabe: a0 = Adresse gepackter Daten ; Ausgabe: a1 = Adresse entpackter Daten ; a2 und a3 sind whrend der Packroutine unbelegt fire_decrunch: movem.l d0-a6,-(sp) bsr.s .getinfo ; Kenn-Langwort holen cmp.l #'FIRE',d0 ; Kennung gefunden? bne.s .not_packed ; nein: nicht gepackt bsr.s .getinfo ; Kenn-Langwort holen lea -8(a0,d0.l),a5 ; a5 = Ende aller Daten bsr.s .getinfo ; Lnge holen move.l d0,(sp) ; Originallnge: spter nach d0 move.l a1,a4 move.l a1,a6 add.l d7,a6 ; a6 = neues Ende ; a5 = Ende von Byte-Daten move.b -(a5),d7 ; erstes Informationslangwort lea .tabellen(pc),a3 ; a3 = Zeiger auf Datenbereich moveq #1,d6 swap d6 ; d6 = $10 moveq #0,d5 ; d5 = 0 (oberes Wort: immer 0!) .normal_bytes: bsr.s .get_1_bit bcc.s .test_if_end ; Bit %0: keine Daten moveq #0,d1 ; falls zu .copy_direkt bsr.s .get_1_bit bcc.s .copy_direkt ; Bitfolge: %10: 1 Byte direkt kop. ; lea.l .direkt_tab+16-.tabellen(a3),a0 ; ...siehe nchste Zeile move.l a3,a0 moveq #3,d3 .nextgb: move.l -(a0),d0 ; d0.w Bytes lesen bsr.s .get_d0_bits swap d0 cmp.w d0,d1 ; alle gelesenen Bits gesetzt? dbne d3,.nextgb ; ja: dann weiter Bits lesen .no_more: add.l 16(a0),d1 ; Anzahl der zu bertragenen Bytes .copy_direkt: move.b -(a5),-(a6) ; Daten direkt kopieren dbf d1,.copy_direkt ; noch ein Byte .test_if_end: cmp.l a4,a6 ; Fertig? bgt.s .strings ; Weiter wenn Ende nicht erreicht .not_packed: movem.l (sp)+,d0-a6 rts ;* Unterroutinen: wegen Optimierung nicht am Schlu .getinfo: moveq #3,d1 .glw: rol.l #8,d0 move.b (a0)+,d0 dbf d1,.glw rts .get_1_bit: add.b d7,d7 ; hole ein Bit beq.s .no_bit_found rts .no_bit_found: move.b -(a5),d7 addx.b d7,d7 rts .get_d0_bits: moveq #0,d1 ; Ergebnisfeld vorbereiten .hole_bit_loop: add.b d7,d7 ; hole ein Bit beq.s .not_found ; quellfeld leer .on_d0: addx.w d1,d1 ; und bernimm es dbf d0,.hole_bit_loop ; bis alle Bits geholt wurden rts .not_found: move.b -(a5),d7 ; hole sonst ein weiteres Longword addx.b d7,d7 ; hole ein Bit bra.s .on_d0 ;*$ Ende der Unterroutinen .strings: moveq #1,d0 ; 2 Bits lesen bsr.s .get_d0_bits subq.w #1,d1 bmi.s .gleich_morestring ; %00 beq.s .length_2 ; %01 subq.w #1,d1 beq.s .length_3 ; %10 bsr.s .get_1_bit bcc.s .bitset ; %110 bsr.s .get_1_bit bcc.s .length_4 ; %1110 bra.s .length_5 ; %1 .get_short_offset: moveq #1,d0 bsr.s .get_d0_bits ; d1: 0, 1, 2, 3 subq.w #1,d1 bpl.s .contoffs moveq #0,d0 ; Sonderfall rts .get_long_offset: moveq #1,d0 ; 2 Bits lesen bsr.s .get_d0_bits ; d1: 0, 1, 2, 3 .contoffs add.w d1,d1 ; d1: 0, 2, 4, 6 add.w d1,d1 ; d1: 0, 4, 8, 12 movem.w .offset_table-.tabellen(a3,d1),d0/d5 bsr.s .get_d0_bits ; 4, 8, 12 oder 16 Bits lesen add.l d5,d1 rts .gleich_morestring: ; %00 moveq #1,d0 ; 2 Bits lesen bsr.s .get_d0_bits ; d1: 0, 1, 2, 3 subq.w #1,d1 bmi.s .gleich_string ; %0 add.w d1,d1 ; d1: 0, 2, 4 add.w d1,d1 ; d1: 0, 4, 8 movem.w .more_table-.tabellen(a3,d1),d0/d2 bsr.s .get_d0_bits add.w d1,d2 ; d2 = Stringlnge bsr.s .get_long_offset move.w d2,d0 ; d0 = Stringlnge bra.s .copy_longstring .bitset: moveq #2,d0 ; %110 bsr.s .get_d0_bits moveq #0,d0 bset d1,d0 bra.s .put_d0 .length_2: moveq #7,d0 ; %01 bsr.s .get_d0_bits moveq #2-2,d0 bra.s .copy_string .length_3: bsr.s .get_short_offset ; %10 tst.w d0 beq .put_d0 ; 0 ablegen moveq #3-2,d0 bra.s .copy_string .length_4: bsr.s .get_short_offset ; %1110 tst.w d0 beq.s .vorgnger_kopieren moveq #4-2,d0 bra.s .copy_string .length_5: bsr.s .get_short_offset ; %1 tst.w d0 beq.s .put_ff moveq #5-2,d0 bra.s .copy_string .put_ff: moveq #-1,d0 bra.s .put_d0 .vorgnger_kopieren: move.b (a6),d0 ; bra.s .put_d0 .put_d0: move.b d0,-(as6) bra.s .backmain .gleich_string: bsr.s .get_long_offset ; Anzahl gleicher Bytes lesen beq.s .backmain ; 0: zurck move.b (a6),d0 .copy_gl: move.b d0,-(a6) dbf d1,.copy_gl sub.l d6,d1 bmi.s .backmain bra.s .copy_gl .copy_longstring: subq.w #2,d0 ; Stringlnge - 2 (wegen dbf) .copy_string: ; d1 = Offset, d0 = Anzahl Bytes -2 lea.l 2(a6,d1.l),a0 ; Hier stehen die Originaldaten add.w d0,a0 ; dazu die Stringlnge-2 move.b -(a0),-(a6) ; ein Byte auf jeden Fall kopieren .dep_b: move.b -(a0),-(a6) ; mehr Bytes kopieren dbf d0,.dep_b ; und noch ein Mal .backmain bra .normal_bytes ; Jetzt kommen wieder normale Bytes .direkt_tab: dc.l $03ff0009,$00070002,$00030001,$00030001 ; Anzahl 1-Bits .tabellen:dc.l 15-1, 8-1, 5-1, 2-1 ; Anz. Bytes .offset_table: dc.w 3, 0 dc.w 7, 16+0 dc.w 11, 256+16+0 dc.w 15, 4096+256+16+0 .more_table: dc.w 3, 5 dc.w 5, 16+5 dc.w 7, 64+16+5 ;*3 Ende der Unpackroutine ende_fire_decrunch: (0 0hh 0  00  0SS0  0 00  00  00 0SS 0..00} @..} @ } @@}}} @@ } @} @@} @@ } @@ } @ } @}}@P} 0o}0}P} 0` } 0P0p 0p}P} 0 } 0pP} 0 0}P} 0p } 0P0p 0}P} 0p } 0P} P`P}P} P` } PPPpPp}P} P} PpP} P P}P} Pp} PP``ZPack-Fire: The best packer on the ST. Greetings go to all people who use this packer. *O*m - ЭЭ// Bg?<JNA 3< 3 aa 8aaa a`& < a(3 ~R@gNu <aNu>??<LNAHABBBP (pf|A"0<NBp0:LNuxafx3 NuA0aJy gAa,@0`(Aoaa` 3f"ADava:A8aj` 3fa&`! 1gr gl 2fB9!Jy gAa@l|ngpy` Ayaa334 g yg nf3`,3`4v3!Jy g?<NATIA:BgHT?<GNAPJf|\*.*BaLIf NAXJNu?<NATNu?<NATNu/< NMXNu/?< NA\NuHz ?<&NN\Nu 8#!#!NuHAHaa :րH@B@H@0 a0 a0 ap:a  @0aH@@0aLNuC :,tr€| oA'A0QA aGHS?< NA\t+gZTxvSBkp#0k o0 W o oph؀XCQ <e(|dx# Nu/ : # # 3 NueH :ѹ " :$:adaJ@gRHABAHAzVgD3 <99AQH@A aagaf3!8L#!`LNu Aa : N":a2da* H@B@H@ 00a.H@a(AaNuH@HAJ@f JAfH@HANuH@HA`H??<NAXLNua( <43#aB?::a.p0Nu rp`6  z@ ( $B":.aJ2p` z ( $":aJSB2p`":[A(JkΒkP`Ґ (a"(UAIp`@ <kgrpHzabrp `\ڀLA\ArEz`8   Q~|QNuNu`E0<r$$$$$$$$QEA0<r&ATrQBb0<2R2R2R2R2R2R2R2RQNu`` Pack-Fire!A~*Hޭ,Hޭa*oMGLI "grѓg f``GPM$]*$**ԓ**ԓaJ@g p`2aJ@gp`(aJ@gp`p``"agQk`U@C!!Q`  UNSHIx,Lap FIREf`adKa^."Npw!Q&N%E<|HFzaLd raFd Jv aHH@@VҨ%QnFL'Sfpw%QLN[NurQNugNu%NurgAQNu%`paSAk0gTSAgXadBad\`dpaSAjpNupaAAL!a҅NupaSAkPAAL aAa0`Npap`.pap`>aJ@g p`2aJ@gp`(aJ@gp`p``"agQk`U@A  Q`  U801 Enter name of source file: Enter name of destination file: Could not allocate enough memory Working: P> Crunch another file (Y/n): Relocate program after depacking (Y/n): Additional picture compression (N/y): Please enter the offset (Default: $0): $ 1) Crunch data file (Default) 2) Crunch executable file 3) Set Parameters Please select: No mem! Verify: OK! Error! [cancelled] Data cannot be packed! [cancelled]DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCRemaining: 99%DDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCC-~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCTime:  Rate: % [saving] was pressed. File is skipped. Larger than original! [cancelled]Ef ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ | Version 2.01 <| { P A C K - F I R E } | K| { This packer was written by Axe of Superior. } | First version: 18.04.1990 Final changes: 19.02.1990 | { K} | Note: $7000 is highest offset for FAST packing! | ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ [0][| What do you wish to pack? | - Data files | - Executable files | - Set Parameters ][ DATA | EXEC | SETUP ][0][| Relocate after decrunch? | ][ YES | NO ][2][| Do you wish to pack | another file?|][ YES | NO | ??? ][0][| Do you wish to use an | additional algorithm | for picture compression? |][ NO | YES ]*\L,RR*  :0x \0v:22  $T&v, r!C%G6?bqH)E-DmY6VK1(II7?2#T,+  $0 Ѹ'>  N9*!GK'<  =@& " ,2 .D! "   &4*) ?<1 "!& ο ! 6start bra strt col equ $770 text dc.b 27,'E',27,'f' ; Clear screen, kill cursor dc.b "THE BLACK ADDER SLIDE SHOW",10,13 DC.B "~",10,13,10,13 DC.B "Packed by KALAMAZOO!",10,13 DC.B "Using FIRE PACK...",0 file_name: dc.b 'ba.exe',0 ; nachgeladenes Programm (pexec) even opt o+,ow-,a+ ; Optimierung einschalten strt: movea.l #stackend,sp move.l sp,d0 subi.l #start-$120,d0 move.l d0,-(sp) pea start-$100(pc) clr.w -(sp) move.w #$4a,-(sp) trap #1 adda.w #$c,sp pea text(pc) move.w #9,-(a7) trap #1 addq.l #6,a7 move.w #7,-(a7) trap #1 addq.l #2,a7 bsr.s super move.l $84.w,old_trap1+2 ;store & change TRAP #1 vector move.l #my_trap1,$84.w bsr.s user pea null(pc) pea null(pc) pea file_name(pc) move.w #0,-(sp) move.w #$4b,-(sp) trap #1 lea.l 16(sp),sp bsr.s super move.l old_trap1+2(pc),$84.w bsr.s user clr.w -(sp) trap #1 null: dc.l 0,0 super: clr.l -(sp) ;supervisor state move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,d7 rts user: move.l d7,-(sp) ;user state move.w #$20,-(sp) trap #1 addq.l #6,sp rts my_trap1: movea.l sp,a0 btst #$d,(sp) bne.s supervisor move.l usp,a0 subq.l #6,a0 supervisor: addq.l #6,a0 cmpi.w #$3f,(a0) ; read beq.s func_3f old_trap1: jmp 0.l func_3f: move.l 8(a0),puffer move.l 2(sp),ret_addr5+2 ; Returnadresse move.l #read,2(sp) bra.s old_trap1 read: tst.w 2(sp) bmi.s ret_addr5 ; device handle->do nothing movem.l d1-d7/a0-a6,-(sp) movea.l puffer(pc),a0 ; Puffer bsr.s fire_decrunch_2 movem.l (sp)+,d1-d7/a0-a6 ret_addr5: jmp 0.l ;*- Unpackroutine von FIRE-PACK include \packers\firepack.2_0\fireunp2.s ;*3 Ende der Unpackroutine section bss puffer: ds.l 1 ds.b 500 stackend: ds.b 20  "        ;*- Unpackroutine von FIRE-PACK ; Eingabe: a0 = Adresse gepackter Daten fire_decrunch_3: link a3,#-120 movem.l d0-a6,-(sp) move.l a0,a6 ; Arbeitsregister move.l a0,a4 ; a4 = Anfang der Originaldaten bsr.s .getinfo ; Kenn-Langwort holen cmp.l #'FIRE',d0 ; Kennung gefunden? bne.s .not_packed ; nein: nicht gepackt bsr.s .getinfo ; Kenn-Langwort holen move.l a3,a2 moveq #119,d1 ; 120 Bytes vor gepackten Daten .save: move.b -(a6),-(a2) ; in sicheren Bereich sichern dbf d1,.save move.l a6,a2 ; Anfang der gepackten Daten lea.l -8(a6,d0.l),a5 ; a5 = Ende der gepackten Daten .move move.b (a0)+,(a6)+ subq.l #1,d0 bne.s .move move.l a2,a0 bsr.s .getinfo ; Lnge holen move.l d0,(sp) ; Originallnge: spter nach d0 move.l a4,a6 ; a6 = Ende der Originaldaten add.l d0,a6 move.b -(a5),d7 ; erstes Informationslangwort lea .tabellen(pc),a2 ; a2 = Zeiger auf Datenbereich moveq #1,d6 swap d6 ; d6 = $10 moveq #0,d5 ; d5 = 0 (oberes Wort: immer 0!) .normal_bytes: bsr.s .get_1_bit bcc.s .test_if_end ; Bit %0: keine Daten moveq #0,d1 ; falls zu .copy_direkt bsr.s .get_1_bit bcc.s .copy_direkt ; Bitfolge: %10: 1 Byte direkt kop. ; lea.l .direkt_tab+16-.tabellen(a2),a0 ; ...siehe nchste Zeile move.l a2,a0 moveq #3,d3 .nextgb: move.l -(a0),d0 ; d0.w Bytes lesen bsr.s .get_d0_bits swap d0 cmp.w d0,d1 ; alle gelesenen Bits gesetzt? dbne d3,.nextgb ; ja: dann weiter Bits lesen .no_more: add.l 16(a0),d1 ; Anzahl der zu bertragenen Bytes .copy_direkt: move.b -(a5),-(a6) ; Daten direkt kopieren dbf d1,.copy_direkt ; noch ein Byte .test_if_end: cmp.l a4,a6 ; Fertig? bgt.s .strings ; Weiter wenn Ende nicht erreicht moveq #119,d0 ; um berschriebenen Bereich .rest move.b -(a3),-(a4) ; wieder herzustellen dbf d0,.rest .not_packed: movem.l (sp)+,d0-a6 unlk a3 rts ;* Unterroutinen: wegen Optimierung nicht am Schlu .getinfo: moveq #3,d1 .glw: rol.l #8,d0 move.b (a0)+,d0 dbf d1,.glw rts .get_1_bit: add.b d7,d7 ; hole ein Bit beq.s .no_bit_found rts .no_bit_found: move.b -(a5),d7 addx.b d7,d7 rts .get_d0_bits: moveq #0,d1 ; ergebnisfeld vorbereiten .hole_bit_loop: add.b d7,d7 ; hole ein Bit beq.s .not_found ; quellfeld leer .on_d0: addx.w d1,d1 ; und bernimm es dbf d0,.hole_bit_loop ; bis alle Bits geholt wurden rts .not_found: move.b -(a5),d7 ; hole sonst ein weiters longword addx.b d7,d7 ; hole ein Bit bra.s .on_d0 ;*$ Ende der Unterroutinen .strings: moveq #1,d0 ; 2 Bits lesen bsr.s .get_d0_bits subq.w #1,d1 bmi.s .gleich_morestring ; %00 beq.s .length_2 ; %01 subq.w #1,d1 beq.s .length_3 ; %10 bsr.s .get_1_bit bcc.s .bitset ; %110 bsr.s .get_1_bit bcc.s .length_4 ; %1110 bra.s .length_5 ; %1 .get_short_offset: moveq #1,d0 bsr.s .get_d0_bits ; d1: 0, 1, 2, 3 subq.w #1,d1 bpl.s .contoffs moveq #0,d0 ; Sonder&fall rts .get_long_offset: moveq #1,d0 ; 2 Bits lesen bsr.s .get_d0_bits ; d1: 0, 1, 2, 3 .contoffs add.w d1,d1 ; d1: 0, 2, 4, 6 add.w d1,d1 ; d1: 0, 4, 8, 12 movem.w .offset_table-.tabellen(a2,d1),d0/d5 bsr.s .get_d0_bits ; 4, 8, 12 oder 16 Bits lesen add.l d5,d1 rts .gleich_morestring: ; %00 moveq #1,d0 ; 2 Bits lesen bsr.s .get_d0_bits ; d1: 0, 1, 2, 3 subq.w #1,d1 bmi.s .gleich_string ; %0 add.w d1,d1 ; d1: 0, 2, 4 add.w d1,d1 ; d1: 0, 4, 8 movem.w .more_table-.tabellen(a2,d1),d0/d2 bsr.s .get_d0_bits add.w d1,d2 ; d2 = Stringlnge bsr.s .get_long_offset move.w d2,d0 ; d0 = Stringlnge bra.s .copy_longstring .bitset: moveq #2,d0 ; %110 bsr.s .get_d0_bits moveq #0,d0 bset d1,d0 bra.s .put_d0 .length_2: moveq #7,d0 ; %01 bsr.s .get_d0_bits moveq #2-2,d0 bra.s .copy_string .length_3: bsr.s .get_short_offset ; %10 tst.w d0 beq .put_d0 ; 0 ablegen moveq #3-2,d0 bra.s .copy_string .length_4: bsr.s .get_short_offset ; %1110 tst.w d0 beq.s .vorgnger_kopieren moveq #4-2,d0 bra.s .copy_string .length_5: bsr.s .get_short_offset ; %1 tst.w d0 beq.s .put_ff moveq #5-2,d0 bra.s .copy_string .put_ff: moveq #-1,d0 bra.s .put_d0 .vorgnger_kopieren: move.b (a6),d0 ; bra.s .put_d0 .put_d0: move.b d0,-(a6) bra.s .backmain .gleich_string: bsr.s .get_long_offset ; Anzahl gleicher Bytes lesen beq.s .backmain ; 0: zurck move.b (a6),d0 .copy_gl: move.b d0,-(a6) dbf d1,.copy_gl sub.l d6,d1 bmi.s .backmain bra.s .copy_gl .copy_longstring: subq.w #2,d0 ; Stringlnge - 2 (wegen dbf) .copy_string: ; d1 = Offset, d0 = Anzahl Bytes -2 lea.l 2(a6,d1.l),a0 ; Hier stehen die Originaldaten add.w d0,a0 ; dazu die Stringlnge-2 move.b -(a0),-(a6) ; ein Byte auf jeden Fall kopieren .dep_b: move.b -(a0),-(a6) ; mehr Bytes kopieren dbf d0,.dep_b ; und noch ein Mal .backmain bra .normal_bytes ; Jetzt kommen wieder normale Bytes .direkt_tab: dc.l $03ff0009,$00070002,$00030001,$00030001 ; Anzahl 1-Bits .tabellen:dc.l 15-1, 8-1, 5-1, 2-1 ; Anz. Bytes .offset_table: dc.w 3, 0 dc.w 7, 16+0 dc.w 11, 256+16+0 dc.w 15, 4096+256+16+0 .more_table: dc.w 3, 5 dc.w 5, 16+5 dc.w 7, 64+16+5 ende_fire_decrunch_3: ;*3 Ende der Unpackroutine aHello members of Superior (Wanderer, Jinx, Jabba), here is the newest version of Pack-Ice and of Fire-Pack. Both have the new unpacking routines included. The files in the Pack-Ice folder are: - ICE_2_3.PRG Pack-Ice version 2.3 - ICE_UNPA.S Unpacking routine. Original Data is at address A0 and the destination is A1 - ICE_UNP2.S Unpacking routine. Packed data is at address A0 and the data is unpacked to this same address. The 120 bytes buffer is no longer neeed, but instead 120 bytes are temporarily reserved on the stack. There haven't been many great changes in Pack-Ice, but Fire-Pack was enhanced with the shell and the fast packing algorithms. To notify changes, I changed the Ice!- and Fire-identifications for packed data to "ICE!" and "FIRE" (before: "Ice!" and "Fire"). The highest offset for Fire-Pack is $f. The default offset is $2500. If you set the offset higher, you will have the same speed for the pure packing, but the short interuptions for setting up the compression tables (like at the beginning of packing when 99% is shown for about 1 second) will occur more often. To be exact, this break will appear every ($8000-offset) bytes, but that doesn't slow down packing too much. But I warn you to set the offset higher, because then packing is as slow as the old Fire-Pack versions (yawn). Now, as long as I haven't done Pack-Ice 3.0, these two packers are still the best packers around. As you know, Fire-Packer is more efficient for bigger files. If a file is bigger than 50kB, you can be almost sure that Fire-Packer is better. When I pack a Sierra file I split the big files (in Codename Iceman each about 1.8 Meg) into smaller files (18kB) and pack them with Pack-Ice AND with Fire-Pack and I always take the smaller file, so the files are half packed with each of the two packers. Then I put the small files together again and create big files again (in Codename Iceman 900 kB). What I want to do to have beter compression is modifying the pack-informations individually for each packed file, so that you get best compression. That would mean changing the tables that are in the pack and depack routines. But every time I think of programming this, I realise that it is too difficult. I hope I will manage to do this one day, because if I will then I promise that no packer will be better. I think that there still are 2 or 3 packers that are better than Fire-Pack (like this unpacking routine Jinx once sent me). Unfortunately I couldn't use it very much, because I would have needed one packed file. I tried to find out how the packer works, but it was impossible without a packed file. Anyway, I won't need it anyway if I have done this improvement for Pack-Ice. Then you won't need Fire-Pack anymore, just Pack-Ice. It will be the same speed at unpacking, but it might take up to twice as long for packing, which will be no problem, because packing is so fast now. Ok, I hope that I can soon offer you the BEST packer. I will keep trying. Bye for now. Axe %4;;@HPURE5% ¿%4;>BIQTQC4$ %4EIMQRM@1" º'3>GJNQQL@1" '4>GLOQPJ?0! (3?HMOPOI=.! )5@IMOPNG=.!˿ )5AINOPMG;/!ʿ*7AJNNNLF;- ɾ +7BJMNMJC:,Ƚ!-9BJNNLIC8,Ƽ#.9DJMMKHA7, ƽ$0;DJMLKG?6* Ļ%25) û&2=DJLKHD=4(û '4>EIKIFC<2'ü )4>DHIGD@90$»*6>EHHFC?8/ +6?DGGEB=7, +6>DFFC@;3*  ,7?CEDA>92' ½"-7>CDC@<8/$¾".7=BBA?:5-!¿ #-6<@A?<82)ÿ $.6;6/& $.5;>?=94-$ %.5;==;72+! %.5:<<960.  g`..  4`DCODE1 S Tt PDECODE S Wt GDEPACK1 S Zt eDEPACK2 S ]t -PACKER PRG at qF"`X`Pack-Fire by Axe/DelightIKWMFa&NK kA -Jgrѓg f``GP$]*$**ԓ**p AC$QC&LN&&QvHCj&l",p&&QjNH Na f.%߇`>.-%Wއ`,އgNu> f.%߇Nu.-%WއNurއgAQNupaSAk0gTSAgXadBad\`dpaSAjpNupaAAL!a҅NupaSAkPAAL aAa0`Npap`.pap`>aJ@g p`2aJ@gp`(aJ@gp`p``"agQk`U@C!!Q`  U!gt@)ClB *O*mO Эltv/ 6XJbت:+J aXBgq6kT/PLT MXY!/; NA\X@1va8n+]֗ 6* D"YqMb#Ew.SB4XP5PMAzr $H!JSB2R"":7>[(J u6ΒkP`Ґ}ˑ"(lҭUAIC2`@5v@4^&j<,|-kgpHzabry3Mp `\L\fGA\ArEz;8ZDjHݢ`6yh&  Q&,3a ~|UNuAL ``7=` f.%߇.-%Wya{!rއgACH0gTmgXadBad\`dgj|3!@oa҅NuaSAkPAL  aAa0N$RM`.pap?(A$>a[IJp`2ap9/V`(aJgp`pem``"agOyf7Qɒk`UE23C!Q1` c<1Od("t L$ UQ4*t$0:Pxsrc|2Ћ/EnKsИdnRk.cd#CpldD qot;eugbG&y $WH%odpPiy/N)1dEˆ4Default) 32)Cru7\FexecuT[b S Cho:HPu1}q)+,ith;+=(Y/n)?UNomemMBqifyUOK6X. `(^*atErordurw]ⲹ!<%preslec,skiped.fRemaoV29%i3&L.D@ CTim*(/@ Rate:%- |Dsavg%3Larg8Extorigj!(݇[canceled]EGqyVJ1^ՅI$REPCK~ThpackjWuaz@wwriteby8AxefDelight.e#u8Itversi^k fished@!184%;>2`J{Finalȭchangeson:21.05.1 90}|P'5|Pr-~ q0΀< "h 4* 7>6x0͓tTJ, <2q`HS.  l`..  4`CRUN3 PRG t 6 TEXT Begin: L0:DC.B $A0,$00,$A0,$0A BRA.S L0004 L0001:DS.W 47,0 L0002:DS.W 2,0 L0003:DS.W 1,0 DC.B $56,$F8 L0004:MOVEA.L 4(A7),A5 PEA L0(PC) MOVEA.L 16(A5),A0 MOVE.L A0,-(A7) MOVE.L L0003(PC),D0 ADDQ.L #8,D0 ADDA.L D0,A0 MOVE.L A0,-(A7) ADDA.L D0,A0 LEA L0002(PC),A1 MOVE.L A0,(A1) MOVEA.L 4(A7),A0 MOVEA.L (A7),A1 LEA L000C(PC),A3 MOVE.L A1,D2 L0005:CLR.W D0 MOVE.B (A0)+,D0 MOVE.W D0,D1 SUBQ.W #1,D0 BMI.S L0007 L0006:MOVE.B (A0)+,(A1)+ DBF D0,L0006 CMP.W #$FF,D1 BEQ.S L0005 L0007:MOVEQ #0,D0 MOVE.B (A0)+,(A3) BMI.S L0009 MOVE.B (A0)+,1(A3) MOVE.W (A3),D0 LSR.W #5,D0 TST.W D0 BEQ.S L000D MOVEA.L A1,A4 SUBA.W D0,A4 MOVE.W (A3),D0 ANDI.W #$1F,D0 MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ L0008:MOVE.B (A4)+,(A1)+ DBF D0,L0008 BRA.S L0005 L0009:MOVE.B (A0)+,1(A3) MOVE.W (A3),D0 ANDI.W #$7FFF,D0 MOVEA.L A1,A4 SUBA.W D0,A4 MOVEQ #0,D0 MOVE.B (A0)+,D0 MOVE.B (A4)+,(A1)+ L000A:MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ L000B:MOVE.B (A4)+,(A1)+ DBF D0,L000B BRA.S L0005 L000C:DS.W 2,0 L000D:MOVE.L 4(A7),D0 MOVE.L (A7),4(A7) MOVE.L D0,(A7) MOVEA.L 4(A7),A2 MOVEA.L A2,A0 ADDQ.L #2,A0 LEA 28(A2),A1 ADDA.L (A0)+,A1 ADDA.L (A0)+,A1 ADDA.L 4(A0),A1 TST.L (A1) BEQ.S L0011 LEA 28(A2),A0 MOVEA.L 8(A7),A4 MOVE.L A4,D1 MOVEQ #0,D0 ADDA.L (A1)+,A0 L000E:ADD.L D1,(A0) L000F:MOVE.B (A1)+,D0 BEQ.S L0011 CMP.B #1,D0 BNE.S L0010 ADDA.W #$FE,A0 BRA.S L000F L0010:ADDA.W D0,A0 BRA.S L000E L0011:MOVEA.L 16(A7),A5 MOVEA.L 4(A7),A0 LEA 12(A7),A7 MOVEA.L A0,A6 ADDA.W #$1C,A6 LEA 2(A0),A0 MOVE.L 8(A5),D0 MOVE.L (A0),12(A5) ADD.L (A0),D0 MOVE.L D0,16(A5) MOVE.L 4(A0),20(A5) ADD.L 4(A0),D0 MOVE.L D0,24(A5) MOVE.L 8(A0),28(A5) MOVE.W #2,-(A7) TRAP #$E ADDQ.L #2,A7 ADD.L #$7D00,D0 LEA L0013(PC),A0 MOVE.L D0,(A0) MOVEA.L D0,A0 LEA L0014(PC),A1 LEA L0018(PC),A2 SUBA.L A1,A2 MOVE.L A2,D0 LSR.L #2,D0 ADDQ.L #2,D0 L0012:MOVE.L (A1)+,(A0)+ DBF D0,L0012 PEA L0018(PC) MOVE.W #9,-(A7) TRAP #1 ADDQ.L #6,A7 JMP $12345678.L L0013 EQU L0012+20 L0014:MOVEA.L 4(A7),A5 MOVE.L 12(A5),D0 ADD.L 20(A5),D0 LSR.L #2,D0 ADDQ.L #2,D0 ADDA.W #$100,A5 MOVEA.L A5,A4 L0015:MOVE.L (A6)+,(A5)+ SUBQ.L #1,D0 BNE.S L0015 MOVEA.L 4(A7),A5 MOVEA.L 24(A5),A0 MOVE.L A7,D0 SUB.L A0,D0 DIVU #$60,D0 SUBQ.W #2,D0 MOVEM.L L000A(PC),A5-A6/A1-A3/D1-D7 L0016:MOVEM.L A5-A6/A1-A3/D1-D7,(A0) MOVEM.L A5-A6/A1-A3/D1-D7,48(A0) LEA 96(A0),A0 DBF D0,L0016 L0017:CLR.L (A0)+ CMPA.L A7,A0 BCS.S L0017 DC.B $A0,$09 JMP (A4) L0018:DC.B $1B,$45,$00,$00 ZUEND: END  *.7A?@FiY?4*! &3?=# ն %+,;==@PlSA4) )5?5² '),<;3۴%'-<:>JdWUI8&  +92б #%/9;AZUSVL7  &&ý  $48=H\MQQH3! &+ %78?XPGLH:0+  "/ L0:DC.B $A0,$00,$A0,$0A BRA.S L0004 L0002:Dcb.W 2,0 L0004: PEA L0(PC)  LEA DAT_ANF,A0 ; Adresse der zu entpackenden Daten MOVE.L A0,-(A7) MOVE.L #DAT_END,D0 ADDQ.L #8,D0 ADDA.L D0,A0 MOVE.L A0,-(A7) ADDA.L D0,A0 LEA L0002(PC),A1 MOVE.L A0,(A1) MOVEA.L 4(A7),A0 MOVEA.L (A7),A1 LEA L000B(PC),A3 MOVE.L A1,D2 L0005:CLR.W D0 MOVE.B (A0)+,D0 MOVE.W D0,D1 SUBQ.W #1,D0 BMI.S L0007 L0006:MOVE.B (A0)+,(A1)+ DBF D0,L0006 CMP.W #$FF,D1 BEQ.S L0005 L0007:MOVEQ #0,D0 MOVE.B (A0)+,(A3) BMI.S L0009 MOVE.B (A0)+,1(A3) MOVE.W (A3),D0 LSR.W #5,D0 TST.W D0 BEQ.S L000C MOVEA.L A1,A4 SUBA.W D0,A4 MOVE.W (A3),D0 ANDI.W #$1F,D0 MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ L0008:MOVE.B (A4)+,(A1)+ DBF D0,L0008 BRA.S L0005 L0009:MOVE.B (A0)+,1(A3) MOVE.W (A3),D0 ANDI.W #$7FFF,D0 MOVEA.L A1,A4 SUBA.W D0,A4 MOVEQ #0,D0 MOVE.B (A0)+,D0 MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ L000A:MOVE.B (A4)+,(A1)+ DBF D0,L000A BRA.S L0005 L000B:Dcb.W 2,0 L000C:MOVE.L 4(A7),D0 MOVE.L (A7),4(A7) MOVE.L D0,(A7) MOVEA.L 4(A7),A0 MOVEA.L (A7),A1 MOVE.B (A0)+,D0 BEQ.S L0019 MOVE.B (A0)+,D5 MOVE.B (A0)+,D6 MOVE.B (A0)+,D7 L000D:MOVE.B (A0)+,D0 CMP.B D5,D0 BEQ.S L000E CMP.B D6,D0 BEQ.S L0010 MOVE.B D0,(A1)+ BRA.S L000D L000E:MOVEQ #0,D0 MOVE.B (A0)+,D0 BEQ.S L0016 CMPI.B #1,D0 BEQ.S L0014 L000F:MOVE.B D7,(A1)+ DBF D0,L000F BRA.S L000D L0010:MOVEQ #0,D0 MOVE.B (A0)+,D0 BEQ.S L0018 CMPI.B #2,D0 BEQ.S L0017 CMPI.B #1,D0 BEQ.S L0012 MOVE.B (A0)+,D1 L0011:MOVE.B D1,(A1)+ DBF D0,L0011 BRA.S L000D L0012:MOVEQ #0,D0 MOVE.B (A0)+,D0 LSL.W #8,D0 MOVE.B (A0)+,D0 MOVE.B (A0)+,D1 L0013:MOVE.B D1,(A1)+ DBF D0,L0013 BRA.S L000D L0014:MOVEQ #0,D0 MOVE.B (A0)+,D0 LSL.W #8,D0 MOVE.B (A0)+,D0 L0015:MOVE.B D7,(A1)+ DBF D0,L0015 BRA.S L000D L0016:MOVE.B D5,(A1)+ BRA.S L000D L0017:MOVE.B D6,(A1)+ BRA.S L000D L0018:MOVE.L 4(A7),D0 MOVE.L (A7),4(A7) MOVE.L D0,(A7) L0019:MOVEA.L 4(A7),A2 MOVEA.L A2,A0 ADDQ.L #2,A0 LEA 28(A2),A1 ADDA.L (A0)+,A1 ADDA.L (A0)+,A1 ADDA.L 4(A0),A1 TST.L (A1) BEQ.S L001D LEA 28(A2),A0 MOVEA.L 8(A7),A4  MOVE.L A4,D1 MOVEQ #0,D0 ADDA.L (A1)+,A0 L001A:ADD.L D1,(A0) L001B:MOVE.B (A1)+,D0 BEQ.S L001D CMP.B #1,D0 BNE.S L001C ADDA.W #$FE,A0 BRA.S L001B L001C:ADDA.W D0,A0 BRA.S L001A L001D:MOVEA.L 16(A7),A5 MOVEA.L 4(A7),A0 LEA 12(A7),A7 MOVEA.L A0,A6 ADDA.W #$1C,A6 LEA 2(A0),A0 MOVE.L 8(A5),D0 MOVE.L (A0),12(A5) ADD.L (A0),D0 MOVE.L D0,16(A5) MOVE.L 4(A0),20(A5) ADD.L 4(A0),D0 MOVE.L D0,24(A5) MOVE.L 8(A0),28(A5) MOVE.W #2,-(A7) TRAP #$E ADDQ.L #2,A7 ADD.L #$7D00,D0 LEA L001F(PC),A0 MOVE.L D0,(A0) MOVEA.L D0,A0 LEA L0020(PC),A1 LEA L0024(PC),A2 SUBA.L A1,A2 MOVE.L A2,D0 LSR.L #2,D0 ADDQ.L #2,D0 L001E:MOVE.L (A1)+,(A0)+ DBF D0,L001E PEA L0024(PC) MOVE.W #9,-(A7) TRAP #1 ADDQ.L #6,A7 JMP $12345678.L L001F EQU L001E+20 L0020:MOVEA.L 4(A7),A5 MOVE.L 12(A5),D0 ADD.L 20(A5),D0 LSR.L #2,D0 ADDQ.L #2,D0 ADDA.W #$100,A5 MOVEA.L A5,A4 L0021:MOVE.L (A6)+,(A5)+ SUBQ.L #1,D0 BNE.S L0021 MOVEA.L 4(A7),A5 MOVEA.L 24(A5),A0 MOVE.L A7,D0 SUB.L A0,D0 DIVU #$60,D0 SUBQ.W #2,D0 MOVEM.L L0015(PC),A5-A6/A1-A3/D1-D7 L0022:MOVEM.L A5-A6/A1-A3/D1-D7,(A0) MOVEM.L A5-A6/A1-A3/D1-D7,48(A0) LEA 96(A0),A0 DBF D0,L0022 L0023:CLR.L (A0)+ CMPA.L A7,A0 BCS.S L0023 DC.B $A0,$09 JMP (A4) L0024:DC.B $1B,'E',$00,$00  DAT_ANF: DC.B 'V',$01,$0B,$15,$00,'`',$1A,$00 DC.B $00,$03,$D0,$00,$00,$80,$86,$0B DC.B $11,'*o',$00,$04,' ',$0D,' ' DC.B '/',$00,$0C,$D0,$AF,$00,$14,$D0 DC.B $AF,$00,$1C,$06,$80,$00,$00,$01 DC.B $00,'/',$00,'/',$0D,'Bg?' DC.B '<',$00,'JNAO',$EF,$00 DC.B $0C,'B',$A7,'?<',$00,' N' DC.B 'A\',$8F,'/',$00,'#',$F9,$00 DC.B $00,$04,'N',$00,$00,$03,$D8,'B' DC.B 'g/<',$00,$07,$00,$00,$00 DC.B $C2,$06,'?<',$00,$05,'NN' DC.B $05,$C0,'_ |',$00,$07,$06 DC.B 'l ',$00,'B',$00,$80 DC.B $83,'$',$03,$08,$0E,$07,$00,'B' DC.B $02,$FC,$00,$00,'B',$00,$10,$8C DC.B $04,$0B,$08,$1F,$00,$00,'A',$00 DC.B $80,'}?',$02,$0B,$17,$80,'n' DC.B '?',$03,$10,'?',$00,$00,'A',$02 DC.B $1F,$F0,$00,'B',$00,$80,'es' DC.B $02,$0F,$03,$00,'B',$00,$80,'e' DC.B $A4,$02,$0F,$F0,$00,'B',$00,$0C DC.B $B6,$00,$84,$DB,$04,$00,$82,$02 DC.B '9',$00,$0D,$C3,$02,$8F,$F0,$00 DC.B 'B',$00,$80,'nc',$01,$F8,$00 DC.B 'B',$00,$0D,$CF,$01,$83,$00,'B' DC.B $00,$80,'n',$D1,$01,$81,$00,'B' DC.B $00,$86,'i',$03,$00,$80,'nA' DC.B $02,$CF,$F8,$00,'B',$00,$80,'n' DC.B 'b',$02,$C7,$F8,$00,'B',$00,$0D DC.B $CF,$01,$C1,$00,'B',$00,$80,'n' DC.B 'I',$01,$FC,$00,'B',$00,$80,'n' DC.B $B6,$03,$07,$10,$00,$00,'B',$01 DC.B $00,$80,'w0',$01,$C0,$00,'B' DC.B $00,$8A,$82,$04,$00,$80,'w',$27 DC.B $02,'8',$00,$00,'B',$00,$80,'w' DC.B $E2,$02,'|',$00,$00,'B',$00,$0E DC.B $F6,$02,$C3,$FE,$00,'B',$00,$80 DC.B 'w.',$01,$00,$84,$1B,$05,$00 DC.B $0F,$D4,$02,'~',$00,$00,'B',$00 DC.B $80,'~9',$00,$00,'C',$00,$80 DC.B '~.',$00,$04,'$',$00,$80,'~' DC.B '8',$01,'',$00,'C',$00,$80,'~' DC.B ',',$00,$88,$9B,$04,$00,'c',$04 DC.B $00,$80,$84,$F5,$01,$03,$00,'B' DC.B $00,'H',$84,$00,$10,$97,$01,$FF DC.B $00,'B',$00,$80,$84,'.',$02,$FF DC.B $FE,$00,'B',$00,$10,$9D,$00,'I' DC.B 'C',$00,$10,$96,$02,$C1,$FF,$00 DC.B 'B',$00,$8A,'i',$0D,$00,$8A,$DC DC.B $03,$00,$0B,'C',$02,$0B,$08,$12 DC.B 'e',$01,$E0,$00,'B',$00,$80,$93 DC.B '-',$00,$0A,'#',$00,$80,$93,$88 DC.B $00,$8B,$A0,$03,$02,$FF,$E0,$00 DC.B 'B',$00,$80,$93,'G',$00,$8C,$C0 DC.B $04,$0)0,$12,'|',$02,$CF,$FF,$00 DC.B 'B',$02,$FC,$FE,$00,'B',$00,$12 DC.B 'e',$01,$F0,$00,'B',$00,$80,$93 DC.B '.',$01,$0F,$00,'C',$00,$80,$93 DC.B 'E',$05,$15,$0F,$FF,$15,$07,$10 DC.B '7',$02,$81,$FC,$00,'B',$00,$80 DC.B $81,'U',$00,$8F,'{',$03,$05,$15 DC.B $08,$FF,$F8,$FE,$00,'B',$00,$80 DC.B $8D,'@',$01,$F0,$00,'B',$00,$80 DC.B $8D,',',$00,$0A,'#',$05,$15,$08 DC.B $FF,$E0,$FE,$00,'B',$00,$11,$AE DC.B $00,$85,$C1,$04,$00,$80,$8D,']' DC.B $02,$03,$FF,$00,'A',$05,$15,$08 DC.B $FF,$80,$FE,$00,'B',$00,$80,$8D DC.B '?',$00,$8C,$CF,$04,$00,$82,$BB DC.B '-',$01,'',$00,'B',$00,$05,$05 DC.B $00,'Wu',$00,$80,$93,'E',$00 DC.B $85,$8B,$0D,$00,$85,'0',$03,$00 DC.B '!',$C4,$01,$00,$91,$C5,$04,$00 DC.B $80,$93,'%',$02,$C1,$FC,$00,'B' DC.B $00,$12,'~',$01,$F8,$00,'C',$00 DC.B $80,$93,'+',$00,$0B,'#',$03,$15 DC.B $08,$FF,$80,$8D,'.',$00,$84,'n' DC.B $15,$00,$80,$8D,'>',$00,'H',$1E DC.B $00,$80,$8D,']',$00,$82,$CD,'!' DC.B $00,$06,$83,$00,$80,$8D,'%',$02 DC.B $0F,$F8,$00,'B',$00,$80,$8D,'3' DC.B $02,$FF,$EF,$00,'C',$02,$C0,$FE DC.B $00,'B',$00,$80,$93,'&',$00,$87 DC.B $C5,$06,$00,$10,$94,$00,$8A,$C4 DC.B $06,$00,$0F,$AB,$02,$07,$FF,$00 DC.B 'B',$00,$09,'d',$00,$0F,$BE,$02 DC.B $E1,$FC,$00,'B',$00,$0F,$AF,$01 DC.B $FC,$00,'B',$00,$80,'}%',$00 DC.B $06,'$',$00,'y',$E4,$00,$84,$E7 DC.B $17,$00,$80,'}O',$00,$90,$E6 DC.B $03,$00,'2',$E4,$02,$F0,$FE,$00 DC.B 'B',$00,$80,'}a',$02,$1F,$80 DC.B $00,'B',$00,$89,'=',$04,$00,$80 DC.B '}i',$02,$1E,$00,$00,'A',$02 DC.B $0B,$08,$86,$E4,$16,$01,$C0,$00 DC.B 'C',$00,$0E,$D6,$02,$07,$FE,$00 DC.B 'B',$00,$80,'v%',$00,$8D,$A3 DC.B $03,$04,$0B,$08,'8',$FE,$00,'B' DC.B $00,$0E,$D6,$02,$F1,$FC,$00,'B' DC.B $00,$80,'v?',$00,$8F,'w',$17 DC.B $00,$80,'n',$E0,$02,$F0,$FC,$00 DC.B 'B',$00,$80,'n|',$00,$84,$E4 DC.B $04,$00,$80,'nA',$00,$08,$A3 DC.B $02,$F8,$FC,$00,'B',$00,$0D,$D6 DC.B $00,$1D,$85,$00,$80,'n@',$01 DC.B '|',$00,'B',$00,$80,'n',$F2,$02 DC.B $8F,$C0,$00,'B',$00,$0D,$CD,$01 DC.B $E0,$8D,$11,$03,$00,$80,'nA' DC.B $00,$02,'D',$00,$80,'nH',$02 DC.B $FC,'|',$00,'B',$00,$0D,$D6,$02 DC.B $87,$C0,$00,'B',$00,')V',$01 DC.B '~',$00,'B',$00,$0D,$D8,$00,$85 DC.B $8B,$04,$00,$80,'nj',$01,'<' DC.B $00,'B',$00,$80,'n&',$00,$88 DC.B $84,$05,$00,$00,'C',$02,$80,'' DC.B $00,'C',$00,$80,'uH',$02,$C7 DC.B $C0,$00,'B',$00,$0E,$BD,$01,'>' DC.B $00,'B',$00,$0E,$A5,$00,$89,'[' DC.B $04,$02,$F9,$FC,$00,'B',$00,$80 DC.B '{.',$02,$C3,$C0,$00,'B',$00 DC.B $0F,'t',$00,$88,'j',$04,$00,$80 DC.B '{-',$02,$FE,'<',$00,'B',$00 DC.B $8A,$06,$05,$00,$87,$B9,$03,$00 DC.B $99,'o',$03,$00,$8A,$06,$06,$00 DC.B $8C,$08,$04,$00,$11,']',$00,$05 DC.B $03,$02,$C0,'>',$00,'B',$00,$80 DC.B $8A,'F',$02,$FF,$FC,$00,'B',$00 DC.B $11,']',$01,$1E,$00,'B',$00,$89 DC.B $FB,$05,$00,$02,$03,$00,$11,'^' DC.B $01,$07,$00,'B',$02,$FE,$1C,$00 DC.B 'B',$00,$80,$8A,'%',$02,$C1,$C0 DC.B $00,'B',$00,$11,'\',$02,$E0,$1E DC.B $00,'B',$00,$11,']',$02,$E0,$07 DC.B $00,'B',$00,$80,$8A,'-',$02,$E1 DC.B $C0,$00,'B',$02,$07,$F1,$00,'B' DC.B $02,$15,$07,$1F,$E5,$00,$84,$F3 DC.B $04,$00,$10,$AD,$00,$9F,$87,$04 DC.B $00,$10,$A4,$00,$05,'$',$02,$FC DC.B $07,$00,'B',$00,$80,$85,'A',$01 DC.B $1C,$00,'B',$00,$0B,$84,$02,$F0 DC.B $0E,$00,'B',$00,$10,$AE,$00,$00 DC.B 'C',$00,$A0,'m',$04,$00,$10,$A4 DC.B $02,$FF,$0C,$00,'B',$00,$8E,'U' DC.B $0C,$00,$10,$AE,$00,$8B,'t',$04 DC.B $01,$C0,$00,'B',$00,$10,$AF,$00 DC.B $8C,$1C,$04,$00,$80,$85,'.',$01 DC.B $08,$00,'B',$00,$80,$85,'9',$01 DC.B $18,$00,'B',$00,$10,$A4,$02,$F8 DC.B $0E,$00,'B',$00,$80,$85,'&',$00 DC.B ',',$E3,$00,$80,$85,'%',$02,$F0 DC.B $80,$00,'B',$00,$10,$AF,$00,$07 DC.B $84,$02,$F8,$06,$00,'B',$00,$10 DC.B $BE,$01,$03,$00,'B',$00,$80,$85 DC.B '.',$00,$A2,'X',$03,$00,$10,$A8 DC.B $01,$10,$00,'B',$00,$07,$85,$01 DC.B $06,$00,'B',$00,$80,$85,'E',$01 DC.B '1',$9A,',',$03,$00,$09,$04,$00 DC.B $80,'aM',$01,$88,$03,'4',$03 DC.B $01,$01,'@',$A6,'7',$03,',#' DC.B $A2,':F0',$12,$15,$05,$0A DC.B $16,$0A,'(',$15,$05,$0A,'6',$06 DC.B '&',$14,$06,$0A,'(D',$01,'P' Dcb.W 1,0 DC.B $00,$15,$00,$1F,$FF,$00,$00,$FF DAT_END ZUEND: END )0/--.//01000/135;FUdmpoljhfc_[YWUSPKJLJFB>950/-)&#  L0:DC.B $A0,$00,$A0,$0A BRA.S L0004 L0002:Dcb.W 2,0 L0003:Dcb.W 1,0 DC.B $84,$94 L0004: PEA L0(PC)  LEA dat_adr,A0 ; Adresse der zu entpackenden Daten MOVE.L A0,-(A7) MOVE.L L0003(PC),D0 ADDQ.L #8,D0 ADDA.L D0,A0 MOVE.L A0,-(A7) ADDA.L D0,A0 LEA L0002(PC),A1 MOVE.L A0,(A1) MOVEA.L 4(A7),A0 MOVEA.L (A7),A1 LEA L000B(PC),A3 MOVE.L A1,D2 L0005:CLR.W D0 MOVE.B (A0)+,D0 MOVE.W D0,D1 SUBQ.W #1,D0 BMI.S L0007 L0006:MOVE.B (A0)+,(A1)+ DBF D0,L0006 CMP.W #$FF,D1 BEQ.S L0005 L0007:MOVEQ #0,D0 MOVE.B (A0)+,(A3) BMI.S L0009 MOVE.B (A0)+,1(A3) MOVE.W (A3),D0 LSR.W #5,D0 TST.W D0 BEQ.S L000C MOVEA.L A1,A4 SUBA.W D0,A4 MOVE.W (A3),D0 ANDI.W #$1F,D0 MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ L0008:MOVE.B (A4)+,(A1)+ DBF D0,L0008 BRA.S L0005 L0009:MOVE.B (A0)+,1(A3) MOVE.W (A3),D0 ANDI.W #$7FFF,D0 MOVEA.L A1,A4 SUBA.W D0,A4 MOVEQ #0,D0 MOVE.B (A0)+,D0 MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ L000A:MOVE.B (A4)+,(A1)+ DBF D0,L000A BRA.S L0005 L000B:Dcb.W 2,0 L000C:MOVE.L 4(A7),D0 MOVE.L (A7),4(A7) MOVE.L D0,(A7) MOVEA.L 4(A7),A0 MOVEA.L (A7),A1 MOVE.B (A0)+,D0 BEQ.S L0019 MOVE.B (A0)+,D5 MOVE.B (A0)+,D6 MOVE.B (A0)+,D7 L000D:MOVE.B (A0)+,D0 CMP.B D5,D0 BEQ.S L000E CMP.B D6,D0 BEQ.S L0010 MOVE.B D0,(A1)+ BRA.S L000D L000E:MOVEQ #0,D0 MOVE.B (A0)+,D0 BEQ.S L0016 CMPI.B #1,D0 BEQ.S L0014 L000F:MOVE.B D7,(A1)+ DBF D0,L000F BRA.S L000D L0010:MOVEQ #0,D0 MOVE.B (A0)+,D0 BEQ.S L0018 CMPI.B #2,D0 BEQ.S L0017 CMPI.B #1,D0 BEQ.S L0012 MOVE.B (A0)+,D1 L0011:MOVE.B D1,(A1)+ DBF D0,L0011 BRA.S L000D L0012:MOVEQ #0,D0 MOVE.B (A0)+,D0 LSL.W #8,D0 MOVE.B (A0)+,D0 MOVE.B (A0)+,D1 L0013:MOVE.B D1,(A1)+ DBF D0,L0013 BRA.S L000D L0014:MOVEQ #0,D0 MOVE.B (A0)+,D0 LSL.W #8,D0 MOVE.B (A0)+,D0 L0015:MOVE.B D7,(A1)+ DBF D0,L0015 BRA.S L000D L0016:MOVE.B D5,(A1)+ BRA.S L000D L0017:MOVE.B D6,(A1)+ BRA.S L000D L0018:MOVE.L 4(A7),D0 MOVE.L (A7),4(A7) MOVE.L D0,(A7) L0019:MOVEA.L 4(A7),A2 MOVEA.L A2,A0 ADDQ.L #2,A0 LEA 28(A2),A1 ADDA.L (A0)+,A1 ADDA.L (A0)+,A1 ADDA.L 4(A0),A1 TST.L (A1) BEQ.S L001D LEA 28(A2),A0 MOVEA.L 8(A7),A4 MOVE.L A4,D1 MOVEQ #0,D0 ADDA.L (A1)+,A0 L001A:ADD.L D1,(A0) L001B:MOVE.B (A1)+,D0 BEQ.S L001D CMP.B #1,D0 BNE.S L001C ADDA.W #$FE,A0 BRA.S L001B L001C:ADDA.W D0,A0 BRA.S L001A L001D:MOVEA.L 16(A7),A5 MOVEA.L 4(A7),A0 LEA 12(A7),A7 MOVEA.L A0,A6 ADDA.W #$1C,A6 LEA 2(A0),A0 MOVE.L 8(A5),D0 MOVE.L (A0),12(A5) ADD.L (A0),D0 MOVE.L D0,16(A5) MOVE.L 4(A0),20(A5) ADD.L 4(A0),D0 MOVE.L D0,24(A5) MOVE.L 8(A0),28(A5) MOVE.W #2,-(A7) TRAP #$E ADDQ.L #2,A7 ADD.L #$7D00,D0 LEA L001F(PC),A0 MOVE.L D0,(A0) MOVEA.L D0,A0 LEA L0020(PC),A1 LEA L0024(PC),A2 SUBA.L A1,A2 MOVE.L A2,D0 LSR.L #2,D0 ADDQ.L #2,D0 L001E:MOVE.L (A1)+,(A0)+ DBF D0,L001E PEA L0024(PC) MOVE.W #9,-(A7) TRAP #1 ADDQ.L #6,A7 JMP $12345678.L L001F EQU L001E+20 L0020:MOVEA.L 4(A7),A5 MOVE.L 12(A5),D0 ADD.L 20(A5),D0 LSR.L #2,D0 ADDQ.L #2,D0 ADDA.W #$100,A5 MOVEA.L A5,A4 L0021:MOVE.L (A6)+,(A5)+ SUBQ.L #1,D0 BNE.S L0021 MOVEA.L 4(A7),A5 MOVEA.L 24(A5),A0 MOVE.L A7,D0 SUB.L A0,D0 DIVU #$60,D0 SUBQ.W #2,D0 MOVEM.L L0015(PC),A5-A6/A1-A3/D1-D7 L0022:MOVEM.L A5-A6/A1-A3/D1-D7,(A0) MOVEM.L A5-A6/A1-A3/D1-D7,48(A0) LEA 96(A0),A0 DBF D0,L0022 L0023:CLR.L (A0)+ CMPA.L A7,A0 BCS.S L0023 DC.B $A0,$09 JMP (A4) L0024:DC.B $1B,'E',$00,$00  dat_adr: END JDF<730/,$  &)0446BFCLSNV\Ybdehklmpqturqtsvwrnkomfgab^Q LENGTH = 1000 MOVE.L #LENGTH+1,-(SP) MOVE.W #48,-(SP) TRAP #1 ADDQ.L #6,SP ADDQ.L #1,D0 BCLR.L #0,D0 MOVE.L D0,DAT_ADR BRA.S L0004 DAT_ADR: DS.L 1 L0:DC.B $A0,$00,$A0,$0A L0002:Dcb.W 2,0 L0003:Dcb.W 1,0 DC.B $84,$94 L0004: PEA L0(PC)  MOVEA.L DAT_ADR,A0 ; Adresse der zu entpackenden Daten MOVE.L A0,-(A7) MOVE.L L0003(PC),D0 ADDQ.L #8,D0 ADDA.L D0,A0 MOVE.L A0,-(A7) ADDA.L D0,A0 LEA L0002(PC),A1 MOVE.L A0,(A1) MOVEA.L 4(A7),A0 MOVEA.L (A7),A1 LEA L000B(PC),A3 MOVE.L A1,D2 L0005:CLR.W D0 MOVE.B (A0)+,D0 MOVE.W D0,D1 SUBQ.W #1,D0 BMI.S L0007 L0006:MOVE.B (A0)+,(A1)+ DBF D0,L0006 CMP.W #$FF,D1 BEQ.S L0005 L0007:MOVEQ #0,D0 MOVE.B (A0)+,(A3) BMI.S L0009 MOVE.B (A0)+,1(A3) MOVE.W (A3),D0 LSR.W #5,D0 TST.W D0 BEQ.S L000C MOVEA.L A1,A4 SUBA.W D0,A4 MOVE.W (A3),D0 ANDI.W #$1F,D0 MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ L0008:MOVE.B (A4)+,(A1)+ DBF D0,L0008 BRA.S L0005 L0009:MOVE.B (A0)+,1(A3) MOVE.W (A3),D0 ANDI.W #$7FFF,D0 MOVEA.L A1,A4 SUBA.W D0,A4 MOVEQ #0,D0 MOVE.B (A0)+,D0 MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ MOVE.B (A4)+,(A1)+ L000A:MOVE.B (A4)+,(A1)+ DBF D0,L000A BRA.S L0005 L000B:Dcb.W 2,0 L000C:MOVE.L 4(A7),D0 MOVE.L (A7),4(A7) MOVE.L D0,(A7) MOVEA.L 4(A7),A0 MOVEA.L (A7),A1 MOVE.B (A0)+,D0 BEQ.S L0019 MOVE.B (A0)+,D5 MOVE.B (A0)+,D6 MOVE.B (A0)+,D7 L000D:MOVE.B (A0)+,D0 CMP.B D5,D0 BEQ.S L000E CMP.B D6,D0 BEQ.S L0010 MOVE.B D0,(A1)+ BRA.S L000D L000E:MOVEQ #0,D0 MOVE.B (A0)+,D0 BEQ.S L0016 CMPI.B #1,D0 BEQ.S L0014 L000F:MOVE.B D7,(A1)+ DBF D0,L000F BRA.S L000D L0010:MOVEQ #0,D0 MOVE.B (A0)+,D0 BEQ.S L0018 CMPI.B #2,D0 BEQ.S L0017 CMPI.B #1,D0 BEQ.S L0012 MOVE.B (A0)+,D1 L0011:MOVE.B D1,(A1)+ DBF D0,L0011 BRA.S L000D L0012:MOVEQ #0,D0 MOVE.B (A0)+,D0 LSL.W #8,D0 MOVE.B (A0)+,D0 MOVE.B (A0)+,D1 L0013:MOVE.B D1,(A1)+ DBF D0,L0013 BRA.S L000D L0014:MOVEQ #0,D0 MOVE.B (A0)+,D0 LSL.W #8,D0 MOVE.B (A0)+,D0 L0015:MOVE.B D7,(A1)+ DBF D0,L0015 BRA.S L000D L0016:MOVE.B D5,(A1)+ BRA.S L000D L0017:MOVE.B D6,(A1)+ BRA.S L000D L0018:MOVE.L 4(A7),D0 MOVE.L (A7),4(A7) MOVE.L D0,(A7) L0019:MOVEA.L 4(A7),A2 MOVEA.L A2,A0 ADDQ.L #2,A0 LEA 28(A2),A1 ADDA.L (A0)+,A1 ADDA.L (A0)+,A1 ADDA.L 4(A0),A1 TST.L (A1) BEQ.S L001D LEA 28(A2),A0 MOVEA.L 8(A7),A4 MOVE.L A4,D1 MOVEQ #0,D0 ADDA.L (A1)+,A0 L001A:ADD.L D1,(A0) L001B:MOVE.B (A1)+,D0 BEQ.S L001D CMP.B #1,D0 BNE.S L001C ADDA.W #$FE,A0 BRA.S L001B L001C:ADDA.W D0,A0 BRA.S L001A L001D:MOVEA.L 16(A7),A5 MOVEA.L 4(A7),A0 LEA 12(A7),A7 MOVEA.L A0,A6 ADDA.W #$1C,A6 LEA 2(A0),A0 MOVE.L 8(A5),D0 MOVE.L (A0),12(A5) ADD.L (A0),D0 MOVE.L D0,16(A5) MOVE.L 4(A0),20(A5) ADD.L 4(A0),D0 MOVE.L D0,24(A5) MOVE.L 8(A0),28(A5) MOVE.W #2,-(A7) TRAP #$E ADDQ.L #2,A7 ADD.L #$7D00,D0 LEA L001F(PC),A0 MOVE.L D0,(A0) MOVEA.L D0,A0 LEA L0020(PC),A1 LEA L0024(PC),A2 SUBA.L A1,A2 MOVE.L A2,D0 LSR.L #2,D0 ADDQ.L #2,D0 L001E:MOVE.L (A1)+,(A0)+ DBF D0,L001E PEA L0024(PC) MOVE.W #9,-(A7) TRAP #1 ADDQ.L #6,A7 JMP $12345678.L L001F EQU L001E+20 L0020:MOVEA.L 4(A7),A5 MOVE.L 12(A5),D0 ADD.L 20(A5),D0 LSR.L #2,D0 ADDQ.L #2,D0 ADDA.W #$100,A5 MOVEA.L A5,A4 L0021:MOVE.L (A6)+,(A5)+ SUBQ.L #1,D0 BNE.S L0021 MOVEA.L 4(A7),A5 MOVEA.L 24(A5),A0 MOVE.L A7,D0 SUB.L A0,D0 DIVU #$60,D0 SUBQ.W #2,D0 MOVEM.L L0015(PC),A5-A6/A1-A3/D1-D7 L0022:MOVEM.L A5-A6/A1-A3/D1-D7,(A0) MOVEM.L A5-A6/A1-A3/D1-D7,48(A0) LEA 96(A0),A0 DBF D0,L0022 L0023:CLR.L (A0)+ CMPA.L A7,A0 BCS.S L0023 DC.B $A0,$09 JMP (A4) L0024:DC.B $1B,'E',$00,$00  dat_adr: END n?^^YfndY8!9QcIVU==("1+" ȹ鿖ª̨ȸѥժ "=@2Y@8<1NAae_OEP_lmO@lWQbP=E2GL.>߸׳ËƘҗ篑ˠ·"C,4*7&M0.-=S0n,J[:tNEeE6)ͳ ҢȜ̥˽¾($, 22#%<)*GHFA2"; *PD`W*/8,#"D J *A. ܹҨ'89*. !@ *YG;F8_2<2.1H1D >= ȿ  ' 5 )#*4! ;MOI0/6/ 3 I,(  `AjGL``E^>>> TURBO-C < for ATARI-ST Version 1.1 (C)88/89 Borland International G#EPJ$VH3ET k #EZ Ј<.@#EV<"@(I$k,"Jf"JfB// ?<?<JNAO NO yv""yv&$yv*(yv6.9v2,yv./@/I/HzBo Bo&J*N0`EY@.G o/HSzBR`rHah N/@L yv"S"yv&.9v2NHa2 Nn/@Lp yv"S"yv&.9v2N yv20`EY@.G o/HSzBR`/ / &HEJ"H JN-G?N78<A:B@ KN7\5|=%|J&_$_Nu/ EJ0BA0*N7CAt JN-XC JN-NHyJC@ JN8XO JN-`S@ 2\fB2"JAN-dCAxAN-C@AN-0*$_NuH&IB@N66l N6B@N4` K"9J0N6P(l0N6lpNp`0N6\ LNuH,O(H*I(EJ2*~g:"JAN,AN-&`SCJCm 7.0fJCoCAzA0N,C JN*,B@ LN626lB@N` M"0N5g LN)pNp`0N5B@OBL4Nu// $HNJ@fp` pN7"JAJN&B@N6 $_&Nu// $H&pN6 "JAJN6B@N60$_&Nu??6B@N60J@gS@g`AApN6\8`AApN6L8086Nu// $H&NJ@fp`  JNv$_&Nu/ EIN65@R@gxHyJ,HyJ*HyJ(HyJ&rB@N60Op` 2ABrR@| m5|HyJ HyJ"CAN5PO5@5@4HyIC JN4XOp`B@$_Nu09JN4N5zNu`< Hz ?< NA\`ff*oHz m/ :P/C"(oEA"W,zptr2tkvKSfR@|f*z(oE"WA,o :.prv054|eT| B@H@e //W. o"WGd$ B@2S@k Q|gpk$X0HJ@g<(I0@Q`X0@(IpQ` //W. o"Wgxgg`pgL g6Q`pg@ g6 g Q`pHQ`pHQ``` //W.$o JTCJg$A(o" pӐg<f``*o oO ,HA -+P А+@+hШ+@+h?<NNTм}A* @C&Er T QHz`?< NA\N4Vx*o - ЭT(M*Sf*o m `U@LnHnHn0A`QBe NE/ EAHyAHyAHyA"JAAN O $_NuH,HEvD$B .K bI h"L ѹ ."M RN$t .5|ԾIJ0N+:KAAN^BA0N+ NN&o60N+/9JA8N6XO rN)ր/AKN XO# C8 NN&ByJ.CfAN ּ "NANJ@lApN+j` NNN&AN4A#N,  NN&# 2"҃ ABM ,G 9 "<N(h/ й . K"Ё"<N(L/CA ZNPO K ѹ ."N RN#0NAN8N)A$N, й .м RNj` AOpN*0N)ANBA0N*HL|NuH|o8f`|o8Hĉ8HĉHDİg$` SAJAl`fB/fct( rN'"؀vք "L JN!BI K b M ѹ .vD"L yvDN!lA NA 9 NTACDRNA/ / ? /09KRyK?AAN6O OL<NuH8(o &o$"< $BCEb` 8LB@RC|mx`BF:M|<RhRnBpBC`88L@l 2@8L@o $"2@`8L@o$2@RC|mLxNu`N&N&J@fNu/ EKB+C8jxA a$A pJWF@?@gA 2SAktaSb (Q2/@4/(jt@jtBgf 0Ao@@Alx?B?D`XH0$H&IvJWFCJBj4Cb6xJAkCc8Cf K0a0 JN` 0 JN0 Kap0DL Nu6x0/g f@ JaP0/g@AN0/g@ Ja,0/g@A N0/g g@ Ja0OLNuH0E6`H0E4&H6g8Kg SC JpNQ J0|gNL Nu00000000 H0O$H&I>68jx`p@c8?|0|g J0R@CDHoBaXO0?| JoBg|-?| `&g|+?| `g | ?| ?| ?D62XAXAt0gJf$B RoDJDf f0SA`,C"SDQ`X JDf fSA` C"SDQto An ?B?B`ff ?C?B`?C?BC8?|@gE`e0/DS@jD@-`+/ r AJaT"_AFpJWF@rg SAkt0QS@k AFQ`H0O$H&I?|@>>68jx0|g JpCDHoBaXO?| JoBg|-?| `&g|+?| `g | ?| :/DlDE|0 ?| |JDffSFDged?DD?|6`6JEfp?@?@6`$ JpCDHoBaXO 5d?EE?|6`SE?EE|1"p?@6@`E|b J0CDHoBaXO0@E:/DDEE?D6DC"SDQ?EE`?|0D|b JCDHoBa^XO0D0:/D<RFDJDffSF?D6t0JfB ?| RoDC"SDk6Q`.C ?E SEj0?| RF`QC"SDkQto Fn ?B?B`ff ?C?B`~?B?C`t|? ?| x?D ?D?D6|`H0O$H&I?|@>>68jx0|g JpCDHoBaVXO0/DS@Dn|m `6x0/gf@ Ka0/ g@AN0/g@ Kaf0/ g@A NJof Jo6fgp@A .N0/g@ Ka*0/6g@A"N0/@g@A8N0/gg@ Ka0ONL Nu0<HS@rJrfMHGGCA 0jD@aAC a`aAC a P?b C 4a|SGA6"$JDoGn| Fo| o0RG0CC?SFpԂӁ@Q` pԂӁ@*(6ԂӁ@ԂӁ@ԅӄC<0QBJjR! :fg0`1RPOpAL@Nu o?jD@ @c0<?<@2AA@AC,0 ]HNgCbC NdaJFf<J_kNu?@@@@ @@P@$@@ @4ɿ@iŭ+p@xIϦAGɀCQ~ގFMHvuu Z;]=]u%`R Hz`Hz&`Hz` Hz`HzDHPOACa: o Hz//NuONuHzzC`RHzC`HHzC`>HzvC|`4HzCr`*HHzF`HHz`HHzz`HHzH`HHzCHPOANC o Hz//NuONuHa6(*AaJ@j FFF@@JCj FFFCC@L8NuaddCJyE:j 4G<FHC6<FH@0Cf bf c `jDF ABv F cH FAczx`J F!c *xF FcE:BDHDHEF F c QFJg6<SFk SQJGk,ԅӄdSR@ CbfLgFRdBRd>R@`6kgDS@ԂӁCdSdS CbfgSdSgJka>J@j$ @n HzfaXO`"p0 `0 `Jj0 ]HLNumul0  ]H`L4܇׀HAHBHDHE>܇׀<BCHCHF.HG܇׀.HG܇׀.HG܇׀.HG܇׀.HGև.HGևр?<6HCHFp>܇׀>܇׀:4>ևk܆׃JEjRFSBEJEj R׀fRBJBj BnHy(2aRXO`p0 `02@@@0 ]HLNudivH0,HF⌰cpRdR:j EnHy)aXO`p0 `42BBB0 ]HLNu0@ @f Jf"fr`r$0@`F"$(fJg: fr`. BԂԂԂH@J@jH@`H@<2""]INu"H@4B@Hg @f0<`@?B0 B]HNuH$fBA`RjDh 2< <`@2<@H@J@fAH@ @bQA @bYA @?bUAJ@kSAH@JjA0 B]HNu$(02A Ag"(jNufJfNua JNu"(f JfDNu@DNu?>Jf@ "tHAJAf @HB2BBHA AHAb Q@BJkS@ԂӁjGj B@"<t>Nu0"$a6(*Nu2""Nu2""Nu@TXJ? ?ry@ԚxK@ڢ!h5?ڢ!h5?ڢ!h5?@@ NaN-INF+INFXmath by d'ART/ / o\H// ? o \H\I//!?!// ? //*?A 9Dg"@NJ@f(0 @f 3!Aj`$ @g @f3"Aj` o4C0 O$ _"_NupBB?<JPjWHW//ajPO0 ]HNu#DNur x@W1J x @W!P!P!P x@W1hJ x @Wf"P#xP#xPNur x@W1HJ x @W!P!P!P x@W1J x @W!P!P!P x@W1hJ x @Wf P!xP!xPNur x@W1HJ x @W!P!P!P x@W1J x @W!P!P!P x@W1hJ x @Wf o P!xP!xPNuyE:NuH:$H&I(S,k x&gRJgN+gP$ڹd SfRe`,&// Ka>$"J@f*(SSfRf& L\Nu3 Ajp`H&H(k6+"+g0Dta,Jk+fT"SA"L Ip Wf(| ?/ " 0a"_2JkHAp QH@" 0a|LJj`$0" LafJk&'LB@LNup`/?<ANA\OJkpNua~3AjpNu/ /?<?<VNA J@kpNuaV3AjpNu|g2//??<@NAO JkfNua(3AjpNu3AjNu// &H&g??<NAXOSb&_&Nu|b2@?? /?<BNAO JjfSBg jX?<? p/?<BNAO Jk$`X?<? p/?<BNAO JkxЁ"kr?<? p/?<BNAO JkZ$`?<? p/?<BNAO Jk>$Ҁk8 $k0HzP <e/`/? ?<@NAO Jk b Nua3AjpNu0<`D@| |"b;NupNu   //O4UB|"bBJ@j < fD@-CtH@B@H@&HC;0(RBH@B@H@fQBO _&Nu3!Aj`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ JgJgJgJgJg JgJgJfSHggggg ggf @Nu g<g8g4g0g,g(g$g ggggg ggf @Nu"HJgJgJgJgJg JgJgJf SNuH0$H|g|$bGrtgJ3kSJgtJ@f"p <0f:pgb<߶<Xf(pf"`N|f<0fg><߶<Xfg.G3d"3d&HCHCJCfԃԁd` & gSJ"L Nu3"Ajp` 3!Ajp& g"`//"4UB|"bZC"t&HCJCf&HC;0NRBH@B@H@f`$?&8BCHC06H@0HC;0&RBJf8QB" _&Nu3!Aj`0123456789abcdefghijklmnopqrstuvwxyz// &oPR<e&/?<HNA\OJo @!CCE2 "A`xEE6$R f4/< ?<HNA\OJoj$@Ap !| %H$E6#E6A"P` )d I"Q f`rd ` #@#C"nA$_&Nuk |`3 Aj`/ GE2 g/ &S?<INA\O`GE6 g/ &S?<INA\O`&_NuJg/bg2 4gf!Sf`f`!Sg"gH?LxH?LxH?LxH?Lx`H?Lx8H?LxH?LxH?LxH?LxH?LxpH?LxHH?Lx H?LH?SfvLx2| ZHgS@!!Q|gSA!Q`2 4gfSf`f`S"gH?LxHxLxHx(LxHxPLxHxxLxHxLxHxLxHxLxHxLxHx@LxHxhLxHxLxHxLHSfxLx2|HgS@ Q|gSAQ _Nu/$gSe40HB4 gxH_>"&(*,."B$B&B(B*B,BH~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H~H`SfL||0HgS@!Q|gSAQ _Nu@ @ :864@   >0   !"#  !"#$jD BJjD$HBJBf"$HBJBf $jDNuHBЂ$jDNuHBЂ$jDNu$jD"BJjD$HBJBf4$HBJBfH@B@H@$ jDNuB@H@HB0@0H@0H@$ jDNu AH@r2B@tЀӁd҈рӁQF@$ jDNu"@$jDJjD$HBJBf.$HBJBfB@H@$ jDNuB@H@HB0B@H@$ jDNu A"B@H@HABAtҁрdЈӁрQ$ jDNu/ Hz^?<?<NMPO/Hz?<&NN\O?<?<NMPO$_Nu OJx@3E:1B x@f1J x@fp!PNu.H3 E:Nu/ ?< NATO$_Nu//??<?NAO Nu?<NATONu?<NATONu??<>NAXONu/?<HNA\O @Nu//??<@NAO Nu?/?<GNAPONu?/?<TpsNB _0vAy*"op+2QAyp 2QNuvtw*x*y*yAvtBh1|1Arz`1@ 0"<E BXeB@By@By@B@A@ <`SBQAY <`SBQAqp <BQBqB@B@B<8B<< <A`BfRRA<g`@a`r0gR<0g`$Hv&H$RSg f `R<g&H(c`жbc<b`@$$HSf¼Ƽa`9@g89@g.9@g$Ry<4 y<4eBy<4aH`B(fR(fRA(fRARA@` gR#<(<@ I#@#0C*E3#<0NuA< 0000 y<@a(CWa*A<Ca y<@<8aCua <a.aG367|7|7y4 G4 Iv~BD6WG4SG5 66"930<sNBG367|7|7y4 G4 IDv~BD6WG4SG5 66"930<sNBG367|7|7y4 G4 Ibv~BD6WG4SG5 66"930<sNBG367|7|7y4 G4 Iv~BD6WG4SG5 66"930<sNBaVNuHarCatHy?< NA\Hy?< NA\LNu STARTADRESS :$0 ENDADRESS :$0 CURRENT ADRESS :$0 Y-:STARTING PASS 1 y<@"H<8<8 9<8R fNuaJ@g*?</<;?<=NAPJ@j/9<@?<INA\BNu3<6/9<@/9<8?9<6?<?NA Jj"/9<@?<INA\?9<6?<>NAXBNu?9<6?<>NAXF y<@# <ELEMENT: 000 IN WORKCREATE CODE-MATRIXNOW HUFFING!Ry@C@49@SB 2UA E@"#j#j5y@5@C $)ժ4aS@NuHA!d0H@ 0H@0Hy!?< NA\LNuH"I|g`$BcT&AeH8 "H$I8 *)d(*"$*)#j%E*)#j%EA`RB`I`LNu <aA< 0000 <aC$/A;aj"9@ҹ<0 9<8dpd @aA$P!!aG367|7|7y4 G4 I$v~BD6WG4SG5 66"930<sNBG367|7|7y4 G4 I$8v~BD6WG4SG5 66"930<sNBaHNu PACKED LENGTH : 0 IT IS PACKED ABOUT : 00%A< 00060 <abA< 0J000 <aBaG367|7|7y4 G4 I%v~BD6WG4SG5 660"930<sNBG367|7|7y4 G4 I%v~BD6WG4SG5 6R6"930<sNBG367|7|7y4 G4 I&v~BD6WG4SG5 6R60"930<sNBaat|e|b|e|6b .<`|JeҲ|bBA< 0d0F00 <a Nu SAVE DON'TA< 00,00@ <aa4G367|7|7y4 G4 I'v~BD6WG4SG5 66 "930<sNBaA< 00^060r <a(A< 0J0^0j0r <aaߔG367|7|7y4 G4 I'v~BD6WG4SG5 660"930<sNBG367|7|7y4 G4 I'v~BD6WG4SG5 6R60"930<sNBaaޒ|e|b|e|6b .<`|JeҲ|jbBA< 0d0*00| <a NuANYTHI4NG OTHER?YESNOA< 00w00 <aG367|7|7y4 G4 I)v~BD6WG4SG5 66"930<sNBaB?<NAT?A;<A:/?<GNAPB;A;JgR`\*.*BaJ@gJAga0J@gaH?A< 00w00 <a0NuPLEASE ENTER NAME FOR SAVING !A; *gR`B/<;?<;NA\aJ@gHy*/9<0?9<6?<@NA Jk"9@gR/9<@/?9<6?<@NA JknHy)/<?9<6?<@NA JkJ?9<6?<>NAXNu?</<;?</-A/??<@NA ??<>NAXBg?<LNANuEDO YOU REALLY WANT TO SAVE THE FILE ?? (Y)ES / (N)O PRESS 'RETURN' TO SAVE ON THE DEFAULT DRIVE.OR ENTER DRIVE,PATH AND NAME FOR SAVING !! /?< NA\NuHB?< NA\M,M<@M,A mM , M, Kb`x~K?<MBVaTaTM, MіT~*J$zIM&VcB3B J Pg,aJ@g 2(`2(¼3 J``MF3@M8/?< NA\C Q (M*!VШ!@M.VL -NuM\.VLHz?< NA\?<NATBgNANOT ENOUGH MEMORY FOR DEPACKING !!aJgDM V0/0MRV1V/?(aT _MRV1V?(aTNuM V0/0rBBaJ@g`SA|f1BNu3@g 0<`B@SG|gNu~RNuA."P I"h$I (AH"RRR!SfNu*o - ЭT(M*Sf*o mBeN2        F      <         ,.  Fp0R $$ ,$             @    ,"`(&v,  0      (         .,(       >      2j(0  " F $  F4$ $ F< @D   "* %').  !--&$    *.*" $)%0     ,++$  %-.$"&*(( #+)( )-.+(&  !%+&  %$+! .  z`..  4`JAMPACK TTP st ;|5JAMSHELLPRG zt I| JAMSHELLRSC wt Rb`F`Pack-Ice: The best packer on the ST. It is Public Domain. You may use it for packing anything you like. I don't want any donations. Greetings go to all people who use this packer. *O*m - ЭЭ// Bg?<JNA 3"3"$aaaa Faa a`& < a(3~R@gNu <aNu>??<LNAHAnBBBP (pf|A"0<NBp0:LNuxafx3 NuCArg8By $g*CJfSH ( g nBE f02yC#^NuAapJy gApa@0`(AaRa 3f"Aa@aAa4` 3fa`: 1gt gn 2fB9:Jy gAza@l|ngpy` A!aa^33 gZ ygP nf3`,3``8By Jy gAa|g`Aa~a<yf3 v3*Jy g?<NATIhA:BgHT?<GNAPJf|\*.*BaI " '$/?<HNA\Jn ADa `$@#" S"z I(ISja Rfp P@$@#&a z <'a(g 'da $zS@k f,Q 'g"zP$z" SSjAaa`Aaa`/: ?<INA\Nua 9:gARK R@#Z X`f$ԘԘ#b rx## xa kK <|ak*z R@,@akKB<|akak`*a*z,Kaka`Aa`Aa/:?<INA\JfZ?<ONATJj&Jy gA/a |g|g.A adA a\a ng`A 3aBaNuBgHz ?<=NAP38JNuHP/?:?<?NA JNu?<Hz b?<NAXJNuEJf "\g :fR\B*I ,:fpH@ a/NAXTHT?<;NA\JNu ztg#^/a Nu?<NATNu?<NATNu"zFJg,TH$g  gRHSjBH Ba( #^NuHP?< NA\Nu/< NMXNu/?< NA\NuHz ?<&NN\Nu 8#,#0NuHA aa :H@B@H@0 a0 a0 ap:a  @0aH@@0aLNuC :tr€| oA'A0QA aGpAat+gZTxvSBkp#0k o0 W o oph؀XCQ <(e(|dx# Nu/ : # |#j x3 NueH :ѹ x" :B$::adaJ@gRHABAHAzVgD3 <99A H@A aagaf3ZL#H`LNu A a : 2":a2da* H@B@H@ 00a.H@a(A aNuH@HAJ@f JAfH@HANuH@HA`H??<NAXLNua( <43#a0?:a.p0Nu <3L|PIz@DADBDCDQ3QPIQ3NuҀ~΁f~΁ <o.SkA`A 9ax`Hy?<HNA\Jnp#Nu :3Jkg/?<INA\JNuBy\B <#az z :f"zE#H.I o(z&Hfm" U#P g&H`o&zZxIJyk/ ,z mT,H#$za(JKprt&:o6< &A4TS9(R@Cfa &zv(փ$K(Jr238p0Ўf 78&_Jyk (zrڷof|(fr`(gn`^f,LSN *H fbn" S$R < g.cԁ"l|c|b(3T3Vnl :|ol00:2 Ag Ag.`<RSyXjDpЈkH3X`4":3TpUf @?baPa`aFaaz0: :WjlR`a Ǔ ."z|XaNu c3\#HG:v8#D\DCG(HrEzHSD`  G,vC830KD\DC6308Kri@D`b    @?b2 A?o A@x `:x`4G(0:z3PHD\D3PHri@ESD`   Q~|QNuNuIB\0<r((((((((QIK0<r &ATtQBd0<2T2T2T2T2T2T2T2TQNu``Pack-IceI *Lޭ,Lޭa*oMGLA "grѓg f``GP$]t***Ԋ**EL ;H ;C&NN&&Sj&n".扑&&SjN%a*d"ra$dCv !a"H@@Vҩ%QnNuf%Nurf%AQNuCtaTxr1 Hka1 Ag"CvtaTr1 HaBq jD`rptadpt?aBC@!!Q`R   NSHIx,La ICE!fpatKan."Npw!Q&N%af*Kad8><adpa>|8#zD@DADBDCQQHQLSfpw#QLN[NurQNua*d"ra$dCv !a"H@@Vҩ%QnNuf%Nurf%AQNuCtaTxr1 Hka1 Ag"CvtaTr1 HaBq jD`rptadpt?aBC@!!Q`R   80" Enter name of source file: Enter name of destination file: Could not allocate enough memory Working: P> Crunch another file (Y/n): Relocate program after depacking (Y/n): Additional picture compression (N/y): Please enter the offset (Default: $0): $ 1) Crunch data file (Default) 2) Crunch executable file 3) Set Parameters Please select: No mem! Verify: OK! Error! [cancelled] Data cannot be packed! [cancelled] CCCCCCCCCCCCCCCCCCCCCCCCRemaining: 99% CCCCCCCCC-~ CCCCCCCCCCCCCCCCCCCCCCCCTime:  Rate: % [saving] was pressed. File is skipped. Larger than original! [cancelled]Ef ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ | Version 2.40 <| { P A C K - I C E "} | K| { This packer was written by Axe of Superior for ST-NEWS } | First version: 14.02.1990 Final changes: 14.08.1991 | { K} ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ [0][| What do you wish to pack? | - Data files | - Executable files | - Set Parameters ][ DATA | EXEC | SETUP ][0][| Relocate after decrunch? | ][ YES | NO ][2][| Do you wish to pack | another file?|][ YES | NO | ??? ][0][| Do you wish to use an | additional algorithm | for picture compression? |][ NO | YES ].\8L,,R  0("  6, \0RF422   &4Pn&2 n}@>0} @  @`!  opt o+,ow-,a+ ; Optimierung einschalten start: movea.l #stackend,sp move.l sp,d0 subi.l #start-$120,d0 move.l d0,-(sp) pea start-$100(pc) clr.w -(sp) move.w #$4a,-(sp) trap #1 adda.w #$c,sp bsr.s super move.l $84.w,old_trap1+2 ;store & change TRAP #1 vector move.l #my_trap1,$84.w bsr.s user pea null(pc) pea null(pc) pea file_name(pc) move.w #0,-(sp) move.w #$4b,-(sp) trap #1 lea.l 16(sp),sp bsr.s super move.l old_trap1+2(pc),$84.w bsr.s user clr.w -(sp) trap #1 null: dc.l 0,0 file_name dc.b 'pablo.exe',0 ; nachgeladenes Programm (pexec) EVEN super: clr.l -(sp) ;supervisor state move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,d7 rts user: move.l d7,-(sp) ;user state move.w #$20,-(sp) trap #1 addq.l #6,sp rts my_trap1: movea.l sp,a0 btst #$d,(sp) bne.s supervisor move.l usp,a0 subq.l #6,a0 supervisor: addq.l #6,a0 cmpi.w #$3f,(a0) ; read beq.s func_3f old_trap1: jmp 0.l func_3f: move.l 8(a0),puffer move.l 2(sp),ret_addr5+2 ; Returnadresse move.l #read,2(sp) bra.s old_trap1 read: tst.w 2(sp) bmi.s ret_addr5 ; device handle->do nothing movem.l d1-d7/a0-a6,-(sp) movea.l puffer(pc),a0 ; Puffer bsr.s decrunch movem.l (sp)+,d1-d7/a0-a6 ret_addr5: jmp 0.l ;*- Unpacking routine of PACK-ICE ; a0 = Adress of packed data ; "bsr" or "jsr" to ice_decrunch_2 with register a0 prepared. decrunch link a3,#-120 movem.l d0-a6,-(sp) lea 120(a0),a4 move.l a4,a6 bsr .getinfo cmpi.l #'ICE!',d0 bne .not_packed bsr.s .getinfo lea.l -8(a0,d0.l),a5 bsr.s .getinfo move.l d0,(sp) adda.l d0,a6 move.l a6,a1 moveq #119,d0 .save: move.b -(a1),-(a3) dbf d0,.save move.l a6,a3 move.b -(a5),d7 bsr.s .normal_bytes move.l a3,a5 bsr .get_1_bit bcc.s .no_picture move.w #$0f9f,d7 bsr .get_1_bit bcc.s .ice_00 moveq #15,d0 bsr .get_d0_bits move.w d1,d7 .ice_00: moveq #3,d6 .ice_01: move.w -(a3),d4 moveq #3,d5 .ice_02: add.w d4,d4 addx.w d0,d0 add.w d4,d4 addx.w d1,d1 add.w d4,d4 addx.w d2,d2 add.w d4,d4 addx.w d3,d3 dbra d5,.ice_02 dbra d6,.ice_01 movem.w d0-d3,(a3) dbra d7,.ice_00 .no_picture movem.l (sp),d0-a3 .move move.b (a4)+,(a0)+ subq.l #1,d0 bne.s .move moveq #119,d0 .rest move.b -(a3),-(a5) dbf d0,.rest .not_packed: movem.l (sp)+,d0-a6 unlk a3 rts .getinfo: moveq #3,d1 .getbytes: lsl.l #8,d0 move.b (a0)+,d0 dbf d1,.getbytes rts .normal_bytes: bsr.s .get_1_bit bcc.s .test_if_end moveq.l #0,d1 bsr.s .get_1_bit bcc.s .copy_direkt lea.l .direkt_tab+20(pc),a1 moveq.l #4,d3 .nextgb: move.l -(a1),d0 bsr.s .get_d0_bits swap.w d0 cmp.w d0,d1 dbne d3,.nextgb .no_more: add.l 20(a1),d1 .copy_direkt: move.b -(a5),-(a6) move.w d2,$ff8240 move.w d6,$ff8240 dbf d1,.copy_direkt .test_if_end: cmpa.l a4,a6 bgt.s .strings rts .get_1_bit: add.b d7,d7 bne.s .bitfound move.b -(a5),d7 addx.b d7,d7 .bitfoun^d: rts .get_d0_bits: moveq.l #0,d1 .hole_bit_loop: add.b d7,d7 bne.s .on_d0 move.b -(a5),d7 addx.b d7,d7 .on_d0: addx.w d1,d1 dbf d0,.hole_bit_loop rts .strings: lea.l .length_tab(pc),a1 moveq.l #3,d2 .get_length_bit: bsr.s .get_1_bit dbcc d2,.get_length_bit .no_length_bit: moveq.l #0,d4 moveq.l #0,d1 move.b 1(a1,d2.w),d0 ext.w d0 bmi.s .no_ber .get_ber: bsr.s .get_d0_bits .no_ber: move.b 6(a1,d2.w),d4 add.w d1,d4 beq.s .get_offset_2 lea.l .more_offset(pc),a1 moveq.l #1,d2 .getoffs: bsr.s .get_1_bit dbcc d2,.getoffs moveq.l #0,d1 move.b 1(a1,d2.w),d0 ext.w d0 bsr.s .get_d0_bits add.w d2,d2 add.w 6(a1,d2.w),d1 bpl.s .depack_bytes sub.w d4,d1 bra.s .depack_bytes .get_offset_2: moveq.l #0,d1 moveq.l #5,d0 moveq.l #-1,d2 bsr.s .get_1_bit bcc.s .less_40 moveq.l #8,d0 moveq.l #$3f,d2 .less_40: bsr.s .get_d0_bits add.w d2,d1 .depack_bytes: lea.l 2(a6,d4.w),a1 adda.w d1,a1 move.b -(a1),-(a6) .dep_b: move.b -(a1),-(a6) dbf d4,.dep_b bra .normal_bytes .direkt_tab: dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001 dc.l 270-1, 15-1, 8-1, 5-1, 2-1 .length_tab: dc.b 9,1,0,-1,-1 dc.b 8,4,2,1,0 .more_offset: dc.b 11, 4, 7, 0 ; Bits lesen dc.w $11f, -1, $1f ; Standard Offset ende_ice_decrunch_2: ;*2 end of unpacking routine section bss puffer: ds.l 1 ds.b 500 stackend: ds.b 20 0.0 0}@9 0}@ @ @, S 0S :@9S 0:@S @S ;*- Unpacking routine of PACK-ICE ; a0 = Adress of packed data ; "bsr" or "jsr" to ice_decrunch_2 with register a0 prepared. ice_decrunch_2: link a3,#-120 movem.l d0-a6,-(sp) lea 120(a0),a4 move.l a4,a6 bsr .getinfo cmpi.l #'ICE!',d0 bne .not_packed bsr.s .getinfo lea.l -8(a0,d0.l),a5 bsr.s .getinfo move.l d0,(sp) adda.l d0,a6 move.l a6,a1 moveq #119,d0 .save: move.b -(a1),-(a3) dbf d0,.save move.l a6,a3 move.b -(a5),d7 bsr.s .normal_bytes move.l a3,a5 bsr .get_1_bit bcc.s .no_picture move.w #$0f9f,d7 bsr .get_1_bit bcc.s .ice_00 moveq #15,d0 bsr .get_d0_bits move.w d1,d7 .ice_00: moveq #3,d6 .ice_01: move.w -(a3),d4 moveq #3,d5 .ice_02: add.w d4,d4 addx.w d0,d0 add.w d4,d4 addx.w d1,d1 add.w d4,d4 addx.w d2,d2 add.w d4,d4 addx.w d3,d3 dbra d5,.ice_02 dbra d6,.ice_01 movem.w d0-d3,(a3) dbra d7,.ice_00 .no_picture movem.l (sp),d0-a3 .move move.b (a4)+,(a0)+ subq.l #1,d0 bne.s .move moveq #119,d0 .rest move.b -(a3),-(a5) dbf d0,.rest .not_packed: movem.l (sp)+,d0-a6 unlk a3 rts .getinfo: moveq #3,d1 .getbytes: lsl.l #8,d0 move.b (a0)+,d0 dbf d1,.getbytes rts .normal_bytes: bsr.s .get_1_bit bcc.s .test_if_end moveq.l #0,d1 bsr.s .get_1_bit bcc.s .copy_direkt lea.l .direkt_tab+20(pc),a1 moveq.l #4,d3 .nextgb: move.l -(a1),d0 bsr.s .get_d0_bits swap.w d0 cmp.w d0,d1 dbne d3,.nextgb .no_more: add.l 20(a1),d1 .copy_direkt: move.b -(a5),-(a6) dbf d1,.copy_direkt .test_if_end: cmpa.l a4,a6 bgt.s .strings rts .get_1_bit: add.b d7,d7 bne.s .bitfound move.b -(a5),d7 addx.b d7,d7 .bitfound: rts .get_d0_bits: moveq.l #0,d1 .hole_bit_loop: add.b d7,d7 bne.s .on_d0 move.b -(a5),d7 addx.b d7,d7 .on_d0: addx.w d1,d1 dbf d0,.hole_bit_loop rts .strings: lea.l .length_tab(pc),a1 moveq.l #3,d2 .get_length_bit: bsr.s .get_1_bit dbcc d2,.get_length_bit .no_length_bit: moveq.l #0,d4 moveq.l #0,d1 move.b 1(a1,d2.w),d0 ext.w d0 bmi.s .no_ber .get_ber: bsr.s .get_d0_bits .no_ber: move.b 6(a1,d2.w),d4 add.w d1,d4 beq.s .get_offset_2 lea.l .more_offset(pc),a1 moveq.l #1,d2 .getoffs: bsr.s .get_1_bit dbcc d2,.getoffs moveq.l #0,d1 move.b 1(a1,d2.w),d0 ext.w d0 bsr.s .get_d0_bits add.w d2,d2 add.w 6(a1,d2.w),d1 bpl.s .depack_bytes sub.w d4,d1 bra.s .depack_bytes .get_offset_2: moveq.l #0,d1 moveq.l #5,d0 moveq.l #-1,d2 bsr.s .get_1_bit bcc.s .less_40 moveq.l #8,d0 moveq.l #$3f,d2 .less_40: bsr.s .get_d0_bits add.w d2,d1 .depack_bytes: lea.l 2(a6,d4.w),a1 adda.w d1,a1 move.b -(a1),-(a6) .dep_b: move.b -(a1),-(a6) dbf d4,.dep_b bra .normal_bytes .direkt_tab: dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001 dc.l 270-1, 15-1, 8-1, 5-1, 2-1 .length_tab: dc.b 9,1,0,-1,-1 dc.b 8,4,2,1,0 .more_offset: dc.b 11, 4, 7, 0 ; Bits lesen dc.w $11f, -1, $1f ; Standard Offset ende_ice_decrunch_2: ;*2 end of unpacking routine `8SVXVHDR NAMEbassguitar3.disANNOAudio MasterBODY;=deeffd`\YG6%˻!)2;DLRW]bfjnqrstuvutsolhe_YSNHB<70*$  $1=L\k{yvroV<"о  "#$%&&''('&%#!  &/>O_pkc[R>( ;*- unpacking routine of PACK-ICE ; a0 = Pointer to packed data ; a1 = Address to which the data is unpacked ; "bsr" of "jsr" to ice_decrunch with registers a0 and a1 prepared. ice_decrunch: movem.l d0-a6,-(sp) bsr.s getinfo cmpi.l #'ICE!',d0 bne not_packed bsr.s getinfo lea.l -8(a0,d0.l),a5 bsr.s getinfo move.l d0,(sp) move.l a1,a4 move.l a1,a6 adda.l d0,a6 move.l a6,a3 move.b -(a5),d7 bsr normal_bytes move.l a3,a6 bsr get_1_bit bcc.s not_packed move.w #$0f9f,d7 bsr get_1_bit bcc.s ice_00 moveq #15,d0 bsr get_d0_bits move.w d1,d7 ice_00: moveq #3,d6 ice_01: move.w -(a3),d4 moveq #3,d5 ice_02: add.w d4,d4 addx.w d0,d0 add.w d4,d4 addx.w d1,d1 add.w d4,d4 addx.w d2,d2 add.w d4,d4 addx.w d3,d3 dbra d5,ice_02 dbra d6,ice_01 movem.w d0-d3,(a3) dbra d7,ice_00 not_packed: movem.l (sp)+,d0-a6 rts getinfo: moveq #3,d1 getbytes: lsl.l #8,d0 move.b (a0)+,d0 dbf d1,getbytes rts normal_bytes: bsr.s get_1_bit bcc.s test_if_end moveq.l #0,d1 bsr.s get_1_bit bcc.s copy_direkt lea.l direkt_tab+20(pc),a1 moveq.l #4,d3 nextgb: move.l -(a1),d0 bsr.s get_d0_bits swap.w d0 cmp.w d0,d1 dbne d3,nextgb no_more: add.l 20(a1),d1 copy_direkt: move.b -(a5),-(a6) dbf d1,copy_direkt test_if_end: cmpa.l a4,a6 bgt.s strings rts get_1_bit:add.b d7,d7 bne.s bitfound move.b -(a5),d7 addx.b d7,d7 bitfound: rts get_d0_bits: moveq.l #0,d1 hole_bit_loop: add.b d7,d7 bne.s on_d0 move.b -(a5),d7 addx.b d7,d7 on_d0: addx.w d1,d1 dbf d0,hole_bit_loop rts strings: lea.l length_tab(pc),a1 moveq.l #3,d2 get_length_bit: bsr.s get_1_bit dbcc d2,get_length_bit no_length_bit: moveq.l #0,d4 moveq.l #0,d1 move.b 1(a1,d2.w),d0 ext.w d0 bmi.s no_ber get_ber: bsr.s get_d0_bits no_ber: move.b 6(a1,d2.w),d4 add.w d1,d4 beq.s get_offset_2 lea.l more_offset(pc),a1 moveq.l #1,d2 getoffs: bsr.s get_1_bit dbcc d2,getoffs moveq.l #0,d1 move.b 1(a1,d2.w),d0 ext.w d0 bsr.s get_d0_bits add.w d2,d2 add.w 6(a1,d2.w),d1 bpl.s depack_bytes sub.w d4,d1 bra.s depack_bytes get_offset_2: moveq.l #0,d1 moveq.l #5,d0 moveq.l #-1,d2 bsr.s get_1_bit bcc.s less_40 moveq.l #8,d0 moveq.l #$3f,d2 less_40: bsr.s get_d0_bits add.w d2,d1 depack_bytes: lea.l 2(a6,d4.w),a1 adda.w d1,a1 move.b -(a1),-(a6) dep_b: move.b -(a1),-(a6) dbf d4,dep_b bra normal_bytes direkt_tab: dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001 dc.l 270-1, 15-1, 8-1, 5-1, 2-1 length_tab: dc.b 9,1,0,-1,-1 dc.b 8,4,2,1,0 more_offset: dc.b 11, 4, 7, 0 dc.w $11f, -1, $1f ;*1 end of unpacking routine  %+257:<:73/' ǿ  "$')+,,---,*)&"  $*0368:951-& ǿ "$&)+,-Here is the latest version of Pack-Ice (2.40). There have only been little changes: - The files that are packed executable are now 6 bytes smaller. Wow. Isn't that great. This might save up to 1 kB on your disk. If the file was 1030 bytes before and now it is 1024, then you gained 1kB of disk space... - The program is compatible to more programs. Try the programs that never worked when they were packed with any packer. It might work now. (No promises made...) - You can tell the program what to do with use of the command line. If you have the new TT or whatever Tos, then you can drag all executable files on Pack-Ice and they will be packed. I can't try this myself, because I have a smelly old 1040 with old TOS. Hey! My ST is not THAT bad. It is one of the few limited machines on which Nick of TCB has coded. I even have a document to prove that! Now, isn't that a tremendous gain of value? OK, yes. Still the above mentioned feature does not work on my ST. Anyway, you dcan install a certain extension to be packed by the packer. You can find out how this is done if you look through your Atari ST owners manual where you can also find out how to format disks and to copy disks only after you formatted them and the like. - Chaos Inc. (and all others how need such a thing) can now type a command line that has a "$" in the beginning, followed by those characters that are equivalent to the keypresses made when using the packer. Example "$1yFUCK_YOU.PI1" will pack the file FUCK_YOU.PI1 as picture file. - You can also select the path using the text input!!! You don't need to use the alert boxes. This will also work with correct paths. I finally had the guts to program this kind of shit. - This is the first new Pack-Ice version after a break of about half a year. But now, I got some motivation from other people who (I couldn't believe it) ARE still interested in new versions. So, here is the first one. I didn't take much time to do this one, but wait what comes next. I probably would have done another version if not that beta test version had spread out without me wanting it. But after everybody had it, I didn't feel too much like making a newer version. Anyway, it did not happen on purpose, so there is nobody to blame. Superior are (in alphabetical order): Axe, Jabba, Jinx, Wanderer. Delight or FOF no longer exist since we founded that new group. Enough for this read_me file. This text will restart from the beginning now. WRAP. ~-~-~-~-~-~ Axe/Superior ~-~-~-~-~-~ Note of the "ST NEWS" editorial staff: The presence of this packer was not SPECIFICALLY mentioned in the article about packing algorithms, but here it is anyway. This is a world exclusive thing, actually, as this is the latest version of the packer that's BEST. The sources are probably only useful to coders. You can usually pack executable files without a problem, but make a backup in case you're not sure 'cause the orginal file is overwitten by the packed one. If you decide to pack DATA files or PICTURES that are supposed to be loaded by a specific program, this specific program has to take care of all the depacking - it won't work if you will compress a game data file, for example, without the game actually de-compressing the datafile itself. This means that the sources are of interest most to your own programs that use packed stuff. If you're not a coder, just use it to pack your executable files. It should save a lot of space. All documents on this "ST NEWS" disk were compressed by Pack Ice (version 2.34). 1032 Kb of text were compressed to 550 Kb, assuring that this "ST NEWS" features more than any issue before! Have fun packing. Bye. Oh yeah. "ST NEWS" is the hottest ST disk mag. In case this packer gets spread separately from the rest of the "ST NEWS" issue it belonged to, you might want to get all of it. This can be done by sending a disk plus 3 International Reply Coupons (add 2 IRC's if you live outside Europe) to the address below. Add a note that you want "ST NEWS" Volume 6 Issue 2. The address: ST NEWS, Richard Karsmakers, Looplantsoen 50, NL- 3523 GV, Utrecht, The Netherlands. Disks sent without IRC's will be accepted as friendly donations and will not be returned! n.  `..  4`DEPICE S umU-DEPLZH S xmX<DEPLZW S |m^nDEPV2 S m`JAMPACK4DOC kmcTJAMPACK4PRG omk6nLDRUNLZHS m1`*o"mEv$"mEx$Ed$B?< NA\ML,?<NNTCX"$@?<NNTAL2<<g2<gNqQC4|9<f|%Hz?< Nq\a&3@/:?< NA\*z&z k -"zJgёBJAg<f``&z+k +k+k  -"- Ҁ+A -Ҁ+A :tм$@*@$<HC2Q"zD(I$:<R(z6&L,z6$z6:6N&&Q"o&iBm2<<g2<gNqQ LBBBBBBB"A$B&C(D*E,FNE4@ z"z$`G&G&* faxe< '7p`8U I@A. @*[`ٍ |aE$ < 4h`0  (8P2@h@e  (8P2n@G ` (P4pi@ 847p  P`0Ph$`Pv0N y0PPlp< LUf 10p0Q@52gC1I3 bH1Pg!C oh10>q:Fd0 k W 0)=|`6 S!L z3|e; X#tR `ѱx7jB6Ƞh@n+@cq8`6li@ba3Aub # xlvhif@ݦȈ0` MpRh`|4 c@A4`A a0K +``Q(1$DPh1T[H\|t bB@ ~"b#h*4$lH4!gFTPb!d(7=ER@jtd@A\d0P<ni@ %"Eap>@Y CR AZ @ [l ÁK Y&*P4haH cX uAPabs#@X!/@@x!@@D %. FdE>E~okZޱo ZP 3T1C jG  ue*7 AL !Y H H!O P7jN1`E φ_8;P9TJT\LQ 2:fGAz:`H> \m84 3 <@CF 52* 85.D64 ( p!O@$hh$hj@\pc$h`pt R@ k$@l `  0P 0$"c !4,b m @=~F8> @H XA \ر@TB2 e^*@D1 c10( R8#T("hR(GĖ$A0( A$TH8(@LA1$%] l`  nM(:M<  qA pـ~g(Ui<@80H i+\61Z@re@Pq+31np 1B4 z@@!Z ((_`10pyk8=n%B\,"D bs B焔n)'$ )\ N(CP*0 0Qq!W,4@`pXG@-)p,gŠf$5$r W$ ^!H AxCР' q@XCAx|X~:!7v@|a>9AA3(@,H8.,+t؁ $f"+DH,?l H H @BXHXDpmh*\\X6@ (80*t 4@n 9+ R @  N3[H8 3   a82 [? a jqBlWAxlj dhQ 0@9Pjd~* P6cn R " ӝ*pL*y @@҃ ( @ʲ) ~pz `0"Q2 #_hŪB%KP ^/ rjOR"L lǠp+" +a&x`(| `%p( Pe$D (A; fpD pPB`0<$ ` A61E/( $@(."l!` B=5@`gus$AO3@Ҡ'o@'⥀T%dwAN{ HXR)nf `tD301K@CAɃ :TT$@(CŤkDt 9Jpʄ@X`iBL TACx`} @'NʪP=N""a@ aL LSB0*Rf0fK%JfP! سA$8f s@*BB3B v`@5RcN 6{D!)x@*T)0D4b` i(PJdKC<v&c$0gJpbNkH8P A a@3!oP4 I;@+g8<\,7a I-+hK4MCJ``!q <C@H#Af|@% HL 9t @ [8As L%t4$1Á`wi d3 & 3@ѤJ+y¼p(Z`f:`! i@Xx2@(''dSĠ Q@Ā ~Zba '.@ < èRШ5$ Xc6c*E " ̀%ˆQ wDTh @s) u uJB\ P,:T 1D Ax0HP3@`Bl P AkCdUq`.H}lAA!"ABD`+I "$+1@ ɠ8;D`cyFIKR$T LtpC m0`*@3HKp3&e8Py6hf@` L@D 0( y;2K `Rxa Ob X*,?Ɉe8XHiHPcQ@ܪ  ʣQ@ܪ0(mBUUbUXV*Ub.Lx%5@B T PaJUT3b0c* C n!⁑p2D ~I xhU 7;:(|I`e*c}A%Qp1E?* AR($ E@ab6\0@8ҝ *}cN&g[ !b DUBU(DrBWK+82hi 4C z zZ - T#@08@O`\0)@(=0̷Ax+4 )cc!Y: 8"R`uZ Xeu1BP3 e0.S""XXW0~ P B @7͒P4 `71Rǀ4@[!%gHpp,"(I`Qk @|@3[ _ @"rA%:vTHH0_ %r BA"(9@Y|?iI@ \o("0B .t )O&b$E … d1eJ3"! D$  (8)((($^Ap6Pa࢝L8!#"cC@Rc@K   ʗ`à f8N :UBv0cO>*>L,x5`B\ `0cP 4@:( 24@

d.`(+y*mhp60B`(6/`. oo&!̐$  H iD( p J@* HrA$`T(o%lP$ &W ^ T[( µ!3AX UpŔH9D6Vx A~ 8T2P\[7^FK" LAщA@wj"`9P6; qp;OM832@\(;N/,ހ|x0 + m)@ F]( @08h P04a=4,"HL gP8 20UgSc6K Q}{@00hLL$ 0\ Y0 %h Ahd r# uhQ`clFA2!sEA$"$OHUnHSL M!h@AjNUW c  B8!' (@0􁃄HE  d @dlQH# ! b8"`\3UZ @ 0 @@-< ;(80 3h\ (DY[AL`OAU @H( a+򂟀Ř6$#F`ΐx&G0zUljD  1(]LK@dS/@  셉0@h1( $8fSQX J.. 2 40@1&@EPm0P'@?rj 7/),E ~^ _N@`gBrzrƈ1ƒJOfds*C[% n^Д&Xհ+;U0:jfjd[5(+ ,-&K7 "v&6K8rv46&icjgBzVUۑZCdK!9tH0!'20Px68$^{O!Cg@= 03A3WX*88z@ȓeScK3KS'K;`~ axN(O=& d&6 < mNKb>d-DX@\I tA ,h@}~0# tP,5lD" BcA؎D P(L ,} ')\ TA LiM RŔ%Ddd蕕#GEL8LRFTNPVTN^^XRڌ \lL\ LA.dlbog`K!bP@P` AHC,@x<DP8p(ay9a`!IEK  B~  fQA (d2Y AB` 808@ j`Wt,u8b(T@Pl8x(05]&io(B2B2$ dB.%p`X d\ P; )8/U2`h0SX@R WҎT\i|LV2  BOK|p>H$ Dg484 <~H4Qawa)tpP,dfxfh(0]cTI h`pP ' Mh$$ZBB0x(BDHpJ@ @A P2C$%p0`BșJ  > ``0~ 6$5 The JAM Packer Shell V1.4Disk Pack4096Offset20481281024FormatONOFFONClear Unused SectorsOFFPACKGOUNPACKFile PackDataFlashingONOFFONOFFHeadingExit ShellAdd to BatchNew BatchRun BatchView BatchExecutableGOI'll do it now!!The JAM Packer by A & T KnipeTHIS PROGRAM IS SHAREWAREIF YOU WANT TO CONTACT US FOR ANY REASONWRITE TO:ANDREW & TIM KNIPEMAIDEN GULLY RSDBENDIGO 3551VICTORIAAUSTRALIA>H  !?@Z[)   !.@$#@r 0  "  ' % $ @@"  !!N j m ! c&!qt ! rr 0 $   Z^ U Ir %@  (@  @ @  @  1:0, 0!34  '. J(f        `O8KJ$f(ByOOW/9T`?<HNA\OJk.@T``6 - ЭЭйT`"ҍ¼.A// Bg?<JNA #X yX/(,HhN"P/9X/9Xv?9XN'N"NT?<N)NVH >.BFBE?yOP`2y OP`&yOP`yOP`yOP`yOP`yOPyOPyOP`yOPyOPyOP`yOPyOPyOP`0R@GfHyONpX0T@GfHyONpXRF0H n /0N(XH#O `R0H n /0HyON0PHyONpX`$`"|A|c0<@ |P"|N`*0R@GfHyP6NpX0H n (p<:<RF0GlJEgHJEfHyPBNpX09OP|f 09OP|g/ / NP`09OP|g09OP|g/ N8X=@H?N3fTH|AfBn` H|Bf=|`HyPNNpX09OP|@gD?.09YHXHX??9X?9XNP @fHyPrNpX <29XH/ /N(F 29XH/ /N(F / </N(F мd/?<HN'\-@JfHyORNpXHyPN0X/./9X?.?<?N'O XgHyO$NpXHyPN0X/. .йX/N*P?.?<Bg/.N,O HyPN0X/./9X?.?<?N'O XgHyO$NpXHyPN0X/. .йX/N*P?.?<N'X/.?<IN'\`H?N3fTH|AfBn` H|Bf=|`HyQ NpXBg/ ?<N'X"<d 9XйXйXм/"/N(F"09YH/"/N'"X <d/HyQN0P/9Of?<IN'\?9YBg?<N'H\L0N^NuNV n"n 89XSDB@BABBBCAIA JB22QN^NuNVH>.A000  Hn/<??<@N'O gHyO:NpXLN^NuNVH*n>.?.0. R@?HyRN0P0. n<. B`40R@?HyR,N0\HyUN*|X0R@HH@J@fHyR2N0X?9XBg??<?B Є/?<N'HO: yXfh?9X?<??<?B Є"</29XH/N(F"Ё/?<N'HO:JEl?HyR4N0\HyO$NpXJEl?HyRJN0\HyO$NpXRF <29XH/ /N(F 29XH/ /N(F ؀02. nAm0HH@J@gHyR`N0XL N^NuNVH*n>. ,./ /??<@N'O gHyO:NpXL N^NuNVH*nBg/ ?<=N'P>JGlHyRbNpX?<?/.0. n<. B`40R@?HyRtN0\HyUN*|X0R@HH@J@fHyRzN0X?9XBg??<?B Є/?< N'HO: yXfh?9X?<??<?B Є"</29XH/N(F"Ё/?< N'HO:JEl?HyR|N0\HyO$NpXJEl?HyRN0\HyO$NpXRF <29XH/ /N(F 29XH/ /N(F ؀02. nAm0HH@J@gHyRN0XL N^NuNVH>.<. :. ???0<An?HyRN0O /<(?<HN'\-@BD`0R@?HyRN0\HyUN*|X0R@HH@J@fHyRN0X?</.?<BgBg?<?BHn?<N'HOJ@gHyO$NpXA0(X3X0(X3XBA(Y(Y3YX3X(H3X0(X3X0(X3X(H(3X( H3X09X29XXA29XAHA3X09YyXHX3X?9X?9X?9X?9XHyS,N0O ?9XHySdN0\?9XHySvN0\?9XHySN0\LN^NuNVH *n(n 09OP|g/ / HySN0O 09OP|g>/ NtX-@ 9Ofм / 9OfЮY/N*P/ NX`JGlHyO:NpX 9Ofм //9Y??<@N'O , Yg??<>N'XHyO:NpX??<>N'XL N^NuNVH*nBg/ ?<=N'P>JGlHyO$NpX?<?/N'X L N^NuNVH*nBg/ ?<JGlHyO:NpX 9Ofмd//9Y??<@N'O , YgHyO:NpX??<>N'XL N^NuNVH*nBg/ ?<=N'P>JGlHyO$NpX?<?/N'XHySNpX 9Yмd/?<HN'\#OfBg?B?<BN'O ,JlHyO$NpX/9Of/<??<?N'O ,??<>N'X L N^NuNV/.N0XJOfg/9Of?<IN'\?9YBg?<N'H\?<N)TN^NuNVHB=|`BG`0@ABpRG G mA"*A 4,ܹX-FBg/.?<JGlHyO:NpXHn/<??<@N'O gHyO:NpXHn/<??<@N'O gHyO:NpXHn/<??<@N'O gHyO:NpXHy 4/??<@N'O gHyO:NpX/9X/9X??<@N'O XgHyO:NpXHn/<??<@N'O gHyO:NpX??<>N'XLN^NuNVHBg/.?<JGlHyO:NpX/9Of/9X??<@N'O XgHyO:NpXHyO/<??<@N'O gHyO:NpX??<>N'XLN^NuNVH?</N'T-@Hn?<N'\Bg/.?<NN'PJ@f*.`/.?<N'\HyTNpX/.?<N'\ м /?<HN'\#OfJOffHyTJGlHyTPNpX/9Of/??<?N'O ( gHyO$NpX 9OfЅ#Y#OfX??<>N'XLN^NuNVH..,. A A B?< NA\A a/:?< NA\0<N^NuG SG"S$`* fare6rvfadeNrBDav6DrfaLQQ`8rx`raP<m<gra@62< ` 2< BTB6a,SJ QmNu3@3w@ DNuSABBf DQNu LN^NuNVB?< NA\#X yOf"yY$yXHaN#XL/9X?< NA\pN^Nu tBABaRJg RA Afanaa<$ yOf"yY$ $BBBBBBGL?&JIYNu&HO o&Iz*HRM(fgn`ZSM(Hfn& Sl>( SDo|m6<`<UFNMv`l*#X~Xng6a>9X&9X~06`aX06`g&SCaL06`66` aBv`(BNupa0pNuJAg6BA| lRyXSCp`NuRyXC |p S@eQNuB@$3@tQNuN^Nu*o"mEv$"mEx$Ed$B?< NA\ML,?<NNTCX"$@?<NNTAL2<<g2<gBQC4|9<f|%Hz?< NA\a&3@/:?< NA\*z&z k -"zJgёBJAg<f``&z+k +k+k  -"- Ҁ+A -Ҁ+A :tм$@*@$<HC2Q"zD(I$:<R(z6&L,z6$z6:6N&&Q"o&iBm2<<g2<gBQ LBBBBBBB"A$B&C(D*E,FNE4@ z"z$`G&G&* faxef*-H|>fA-H8=|` A-H8Bn`09XRyX@A@! .8g<`RRG-g*H|gHATq0H|f n8 RRG0nmrB .J@m?Bg?<FN'\BgN+Tf"AT1| AT1|AT1G .g<0<2.g2<`2<A?/.N/P\>J@m??<?<FN'\?<N+Tf 0<2.g2<`2<AAU1@ 09XR@@/?<HN'\#Xv><`0@A@ 02H yXv!RG0yXm yXv 09XH yXvBL0N^NuAXXXyX !J!_ NMYyXAXX"P$h/( J@NuAXXXyX !J!_ NNYyXAXX"P$h/( J@NuAXXXyX !J!_ NAYyXAXX"P$h/( J@NuNVN^NuNVN^NuNVH$.f BB`J". BnJlVnDJlRnDvd`Bbd nmDdD-@-A LN^NuNVHBG".l~D$. l GD&gHC H@J@g@HCBCւJGgD-C LN^.JNuNV?< B/.N2O N^NuNV n"n 2.HbL0|f |f`( |g `Q`fA`2Q`XA`"Q`J0|f |f`$ |g ` Q`A`3 Q` A`# QN^NuNV 9TAW䀰|l yTXT 0<`0<N^NuNVH`YT yT PN 9TAWfAT*H`0- |g / N*X AT"Ҽ@m?.N5NTL N^NuNVH*n0- |g/ N*|Xg0<`20- |g /-N-XBm ?- N;Tg0<`0<L N^NuNVH*n0- |f0<`r.0- |gV0- |f0<`R0- |g?<B?- N+DP?/-?- N3P @f m@ 0<`m *Bm0<L N^NuNVBBg?.Hn?<WN'O =@JW|N^NuNVJnl3X <`H?.?./. ?<BN'O -@Jm .`?<?.B?<BN'O -@Jl .3X <`?<?.B?<BN'O -@ nf .Ю -@ `& nf .Ю -@ `0.g <` . oH?.N/T|J@f .3X <``` Hn . /?.?<@N'O Bg?./. ?<BN'O J]|=@g3X <`` . NqN^NuNVH .<".ҼS/"</N4"X/./N5 . /N1X*@f <`(M)G P/N-X 9V8L0N^NuNVH .<".PS/"</N4"Xށ 9V8(@JfAW (@#V8#WBW*T -e* -f(`  -+G#V8 P`( V8f/N,X*@Jf <`(M*U`L0N^NuNV0./N-(XN^NuNVH .f`v .Q*@(yV8` m n l`(T o l "-Ёf T (ѭ T*`* ",Ёf -Ѭ(`(#V8L0N^NuNVBn`<0.@AX00f&0.@AX10.@AX1 ` Rn nmN^NuNVBn`*0.@AX00nf0.@AXBpRn nmN^NuNVH>.=|\AX"HPgXHf0(LN^NuNVHHyV<`HyVH/.N1hPf><`0. |gR0. |?/.?<=N'P>J@m 0. |g&JGm??<>N'XBg/.?<`j0. |gD0. |?/.?<=N'P>J@m"??<>N'XBg/.?<`0. |?/.?<=N'P>JGl 3X0<`?. ?N.X0LN^NuNVA X//.HyUN82O N^NuNVHyU/.N= PAUSh0(J@m< yURUH|`HyU?< N;\N^NuNV/.?<HN'\-@ .f-|3X .N^NuNV0./N1XN^NuLB@ggSBAgHJ@gHANu op`R@SJWfFNuL2/ f0NuSAB@gVSBAgHJ@gHANuNV n R @H=@` n R @H=@ n g n g n g0.N^NuNV=| nxg nXf n f0<`h n0m n9n0.|0=@`2 nam0.|a| =@` nAm0.|A| =@0.n o0<``0.NqN^NuNVBnBHnN1X=@ n-f=| nRH=@`2 ./0.H/N(F 6.HЃ-@ nRH=@?.?.N2 X=@ @fSJ g n 0.g .D` .NqN^NuNV nam nzn0.|a|A``0.NqN^NuNVH*n (MBn ng?.N/T| fA&H. nU|`H| f S @  . nU| A|l0fD AH-@Hn/.?.?<@N'O <Hg 3X0<`dA&H0f~ =@`J/ 0./?.?<@N'O -@2.¼g .3X0<` .n0.L8N^NuNVH$.f BB`&". Bvd d``bd-@-A LN^NuNVHL&gHC H@J@g@HCBCւ-C LN^.JNuNV?.?<LN'XN^NuNVH*n ..(U0.`(<< `><<`6<<BE`,<<:< ` `|Xg|dgΰ|ogа|ug°|xg Jl ndf - D.` 0. fμA м&@B#(/8H/N4X(0 D m2<7E`2<0A /0H/N4 X.f/ / N?P*L8N^NuNVH>. *n (U=| Gf><#X#XHyVNHyXNFP]|=@0R@?HnHnHnNAO0.g-.H|0f.f0` nff<.GRF0no<.JFl0<`0?HnHnHnNAOA&HA&H`SFSn0gJnl`0SnJnl0g.` 0RnSG0g nm`JFoH`0<0SFSG0J@l`J0g.A R&@`SG0J@lE-L0.H/HnBg?<dN5fO (n*L8N^NuNVHBG n*P`0 HC|0>HATq0H|f n 0L N^NuNVH<*n(n &nBn`P?<%/ N?d\$@Jg2. g$/ ??</ N>fO <n0Gg` R(@`*/ N1X>/ ??</ N>fO <n`Bn=|Bn8< H|-f=|RH|0f8<0RH|*f R=ST`-LHnN7X=@(nH|.f>RH|0f8<0RH|*f R=ST`-LHnN7X=@(nH|lf=|Rf`$A $@-@H=@`$SX/ N1X:no:.8< `0.g `0H/Hn?.?.N5fO 0.g0<`0<*. ng=n` nRT:<`#X#X/9X/9XHn?.?.N6TOP*.`f0. nR:<`P`N|Xg<|cg|dg.|eg|fg|gg|og|sg|ug|xgN:b0.gj/ ??</ N>fO <n0Eg`>.E`4Sm0-J@m0 URH|` / ?N;\ @f` RnSG0J@l`f>.E`4Sm0-J@m0 URH|` / ?N;\ @f` RnSG0J@l/ ??</ N>fO <n0Eg`f0.LN'X=@g3X0<``0<NqN^NuNVH*n 0- |g0- |fm 0- |fm@ Bm0- |@g0<` -f / NN0- |gBm. H|`$`"0-S@;@m . URH|NqL N^NuNVH*n g$g /. ?</ N1X?/ N>fO L N^NuNVH *n(n`":,A>. Eo>`>. 0g60n ?// N(O 0H0Hє0,g0lGl JEf/ N*|Xg0<`":,A0. Emv=n 0g<. 2. HHAA`<. 0n `G0H0g?/ ?, N3P>J@n Gf&l@ ?<0.FH/?, N+DP0<` 0. f0<L0N^NuNVH*n>. <.(n0, |g0, |fl 0, |f0<` ,f/ NNOG|JGn|m`NB0T@|dm0<d@D@`B0D@S@|dm0<d@?N?TOHyX/ NK6PO`&0-H@$-JGg FGQ0<0dR@0.BAQ/,>QQԟ׆G|0QB`Rn0.g(nB`0R 2.HmB`d .6.HЃR(@ nH|0fRZ$` R$H|9n nH|0f(n R*@NqfSE .6.HЃ @B n0L0N^Nu#XHyXNEXONuHyXNEXO 9XNu#XHyXNDXONuHyXNDXO 9XNu#XHyXNEXONuHyXNEXO"9XNu#XHyXNDXONuHyXNDXO"9XNu#XHyXNEXONuHyXNEXO$9XNu#XHyXNDXONuHyXNDXO$9XNuNVH n "(fJg"¼м@ LN^NuNVH nB fB`м8 LN^NuNVH n g jDh <r`V$<H@J@fBH@ @bQB @bYB @?bUBJ@kSB&<"F€JHBЂJj LN^NuNVH n "($HBJ&<BnDB Bcp`*` B c <`6<BtjABJjD LN^NuHHyWF//NFPOL/WXONuHHyWF//NFPOL/WXONuH o#WHyWFHyWNDNFNDPO o WL/WXONuH o#WHyWFHyWNDNFNDPO o WL/WXONuH////NIbPLNuH////NIPLNuH////NIPLNuH////NLzPLNuH////NK6PLNuH o#WHyWND//NIPLNuH o#WHyWND//NIPLNuH o#WHyWND//NLzPLNuH o#WHyWND//NK6PLNuH o#WHyWNE//NIPLNuH o#WHyWNE//NIPLNuH o#WHyWNE//NLzPLNuH o#WHyWNE//NK6PLNuH o0H#WHyWNE//NIPLNuH o0H#WHyWNE//NIPLNuH o0H#WHyWNE//NLzPLNuH o0H#WHyWNE//NK6PLNuNV n " n $&JjFFJjFFN^NuNVH~ n $& n "(JfJf`n*(fJf "`ZNVH.<`b fcBCD!E xzH@:HB<M8NF E6cH@`~GG~GGH@HBҁрSEg:jփՂ`2 E c&tE Ec 6HCBBHBE|.F΂Ć꫆Jk*RA҃тgRD Dcpr``xg`fSDJf"Jf`hHAJAf HA rD `0BADH@~GcH@`0z`XEJ@gREGcH@Ejpr` |.F΁†SDLHDЄJj LN^NuNVH n $& n "((fJg*fJg H@:HB<MNE1F,<.*FHÁ…HC΃ƅąxHB<:HC>܇ۄHAHB>܇ۄH@HC>܇ۄ>ڇلHDHEHF8:|HB>ڇن>؇HC>ڇنH@HB>ڇن~>(JkڅلSG <"FHD„v 歊ȀۆنGk Gc xz`xz`SGOHG؇Jj LN^NuNVH n $& n "(*fJgx(fJgt H@8HB:LME,<.*FHÁ…HC΃ƅąb fbRD1DHBHC.h~>ЇHG~` B@H@:|FH@HAHF<0BAHBHC8:ǒxjSG҃тd6BBHBHC,h ,ІHF|` B@H@:ƒ*HEHE8BEjSF҃BdHG>H@HA0,h ,ІHF|` B@H@6HC:2HAH@xDjSF҃dhrHF<x8(z <"FHG‡v 殌΀݅߅Dk Dc ~|`~|`SDLHDބJj LN^NuNVH*n AUf0?<N+Tf"m m ;yV6ATh `, ATf BgN+Tfm m ;yV6`X0- |g ATAWHЈ*+@`.0-?N-T*+@fm `0- |fm -gL N^NuJEK!Error reading INFILEError writing OUTFILEaInsufficient memoryV1.1 by Jek And Moose Usage: crunch -a -b -d -e -f -h -n -o -s -u -z infile outfileNo Offset Value GivenNo Infile Given%s is not a valid option ppxppppp pppppppppNo OutfileNo OutfileInvalid drive specifier for outputFormat errorReading packed data from infile Depacking Reading packed data from infile Depacking Reading packed data from infile Depacking Invalid drive specifier for inputCan't create outfileCan't read FATErasing unused clusters GEMDOS Error:%ld Packing Writing packed data to outfile Packing Writing packed data to outfile Packing Writing packed data to outfile %ld%% compression.Reading tracks %d to %d %02d *** GEMDOS Error:%d *** GEMDOS Error:%d Can't find infile%02d *** GEMDOS Error:%d *** GEMDOS Error:%d Formatting %c: tracks:%d sides:%d sectors per track:%d %02d Error on track %02d, side 0 Error on track %02d, side 1 numFATs:%d, secperFAT:%d, resforboot:%d, maxdirents:%d secpercluster:%d First Data Sector:%d Number of data clusters:%d Unpacking %s as %s Packing %s as %s %ld%% compression. %ld%% compression. INFILE not a packed file.Couldn't Find File. Probably Doesn't ExistInsufficient MemoryCan't Open File MMARGV=Tq (( ((  AB W   CON:AUX:PRT: @$@Y@@@È@jA.AcAׄCAy7DxCyٝFnH=c)\I1sKP1P=M8O?ZwH02g$uOs<@ Wi??!TD-@ !TD-@$?!TD-?.B9?? *  .    .  ,         , 40                  j,  (.$ < (4*:&8                   $ $& $  6  "  : j$ pF"$  &8XD|:<* ,  "  (lJ( (X&>&. . 4&f.,*   ."($  j:,8 ,6$f@D$dHH8PtBF&2l`z R0b,n,,AAFIHKN.  `:..  4`JAMSHELLPRG t  JAMSHELLRSC t JAMPACK TTP t #6[b`5\*o"mEV$"mEX$ED$B?< NA\M,,?<NNTC8"$@?<NNTA,2<<g2<gNqQC|9<f|%Hz?< Nq\a3@/:?< NA\*zʛ&z k -"zJgёBJAg<f``&zt+k +k+k  -"- Ҁ+A -Ҁ+A :Xм$@*@$<8C2Q"z((I$: R(z&L,z$z:N&&Q"o&iBm2<<g2<gNqQNE4@ z"z$`G&G&* faxe,`\KhDrdXu3bAS9!XpAXເ8t q$3@Q!w` 2rj  @8KL 1**ax t_@$' @@l@e.d c#(  7ez#O 80>LH`H@D     CI[ ]"rPFT2 u@d^TJhAGj  x2UAm12CgK%T l@y yTŎ` Jx.C f쒺E !PH7OH`Hh@A1c`0$2p"Ѐ(4 C@pT(&pߕ@ ljȈf $}ta P#(?~NONUʄ6BDl`#@0J{DE @ӀM`(*"<'"*,F( @ga8H3A $02,0& r0W3G(#J(J{0H$/^ TX jA<cqq(P) P\ ʀfC7e|0bvNE`LSXCS"AB00K@H 5R =BHH€4QŸ"@b!| )d24A/@\Xr7@,0lG6#A g <@Q=N`hA@(p (`U<.ǩ7@@`H*IDPፀ5'p`X^$o@SA. 8x@8 2p0c&0PL T؁ qP?lB"o@БP $G81RJ4T-Ld810:ZYۛc[CNUM[\" A5@1l` J̡ |+{3J|)$ RQ6 $2$t @P0,a*ji] ˠg_@/@ R, PBBd IPP xW&Dѐ   !H ( @ `TA@@#0 _tB`2@xA # rB}@KC _/5؎?pp6e x `lJh(0Dpq `B4 Єh`l@b*B- [s*A@n|G!("R} A|pb*ăAv%l9 x! *aRd3уBH[ ӄ ` a BpnP8 B<1 @  W&< $ 2@`,@2$@ʼY(H `,B8  -J$b yT  w A( Wghn @ C'0uӀţMHA_a; >r|2@c@H #3Zh(X#PACR1R Jv$`AoBg`s`BMA gP&0I 0(q"Ai5..d,:4A  `h҈1 J4MCP38Ip"(4" \\d@h6`bL /0`  `@Rpx0*t 4@n + =R @  HH8 3   a82 /[? av chBlWEuj dT: 0@9T4j`{%^<  5@@P2 Nty0j@@04fJ D i?)$E @ p$  H@!djl@d.Q@%|C mRyP@رA&6H?ch8 PJY@0yEB储X23 | Q38@KPAZAܸs(!0D†}H v TP_CBC0!iu"xb0`T (TJ (2 a@ >0k @ AVRC<`9. _&*!P9P8QHDt 9Jp eD`*-B!LNT;`zDEA@ ˜.&= FT yH`Te <V2 T"VV+8#bt0N%! HejP'H!! .xcKHAE T XsXq%<Px6fH$]A:(` L AЀh ʐh 4 0B;N@hAdT AO\0@0kԾ$4%&!eQĹ `q@*Q$!I> P3> $&`dH:lI X 9D D3h\xx`?"B60"^02F43<('x>H dB8(DzB PQ_ x bB  `" i@XD@"x H=Ÿ J  H@μ`O'h+0E͐C~gn@1T1@` (`XY /b@4@b"YPHH45IHA$D`vR@ A@!$@BPJ @Y 2, .f$q[@L@ǀ}"4Lp"H0$`BCH(5 `O,<8@H(h'3@ h01 \WНPpqp6 | LQQ$`b İH-,2@D@ [@ATI#GT"@@ R b >Kx FA 0+a '`$0\ 3 $+07H r)d 0%  ʼ@ρiАf`d Zqehܠ`b꫍O͈($$@<(H%b;@2pC]p%sf1h4 g4h lHD K~;i].$.Np*$%dLw2D1eJ3"! D$  (8)((($Ubp3a࢝y2@ `N H H @BXHXDpmh6H22Ae03 7wn{ tyB (P B @\ e[@@{聈(M!p]`暤kƘ1閭*TLWZ&Wlq>0`hDzV?b 1&@Pf#)hR@bf0`(GQ3C2@%1F%bnJLu)\ P(*f w@r@*@(d!Pΐ5 0@*^2Fed ayLD$ 1t< ^d1`mbe$szs!I O P   J AK/%LQ ~ VP@f$ d hN2be`g"\< x)&:(<pqaX&n"@ eB Q4M,PP GBrrH04P #40P tf|@@0f?` h QA T$b@$^8!y^`fĢbJ$( c )4xQ2H9 Gzb4 @5Pd@ A#p03749$$3lVX;`ByG@T VHhQFl@} $ H @/?XADBU0YW@CN9 @X8 ELts$YP<(` @8A?rcDEVC<2.033 W b̪' el8 A !wμL]A0J qp).,5ăݠ0s P(f?u t?2< >!HR@ `Ɵ}U/>/#4(0Ac.5`B\ `0cP !@J 0 A 03( (3V @9 !`  ڀ BP WfC! H 2҉P h %RUH@ (:xPKb@`O@$!0 m A@&_`%&RPnv;0+*06 0Hd5 PUn1e0GfQ M( e*(*&#U $N@ p`Ls@H@ % ;@P @`p A*$`h a@ `f07# B|5Ni%Qp 10)[0saP;O/|0\p( 4Ԅ0bbߠe< Ȃɀ V &iO1F@7 H @Άy(5Fp( D  G1wP$(0@ d,YB00{# Na\?k(H@|V`'$ (A( (^Pj7\9 28!h@ "!t(!@@2 hӐP5p9P45b3;DAAD1HV6 "gL  \7Ld%τ ,  ]V *~d#hu t  Ib"@P( s Q eFQD>%(<U< P`Kj @ b0T!  heҪ/*-'J\]s* |@y> Ӱ3X)P@BB "@Ě؁ BL%^XXa`~@,Qb92)0!46FR  `>@Q(:>N fHv!P p1U#c@^ EGx/v1TH3 cE4  K@h h$1BAL4(4) !,4 A!@  \ב$!8>_ y)`8<8J B*_A%J4(L@GG=dz9A| K ABNIڸ)30Ae@bР8҅4.2`ATN2A33ȇR&  )u(Ah0  eH$.@ CA; 80!0&*1N+O:x҄]άGEҠ z 5"C4 y z\1!XUXZ +"0 +!}:  0׀1  ,CAC h 40hg4z@ j h L1Јf0B!@ 0p&0-A X0.8(w@W DS@XP+PXAh,h7|D|Oep W]sA#aWaRVTpR@ aE b$IAQ & 0 dL )A3` FiF'  `I08Uo0Nhh:ï:†2(@!0.GoX1(P܎;h 0 ZUp]0 *!&!F/8 PThn00PXi7p0-͐CErBD9Qaa @p@Q!|:K 20!$8~A@J.! R 30)@@NЂPwAA\@24&LP Ѐ&WscWY#!`cbfqx()O6S0<0_ @_< j 6XC|dl06x( B H@  !*!**>Q$*,Z0Ld#DA,0FF "8MXK lizI#EDėL,$y<8)֥D _ P"\Z(|- 0.`7t?t,X\f[̄TU8>8t95A Tvtx \x9p '.C -4p0`D.jQ>S1B}>7Eb0M% T6#G ~QؐX&x? Nr*T " @  `dS/FNU TZPhւXoo{dʨHʈP8jt FRv njes2F Zf, hҸxbA: P*FPt2 .v @p`$d0 PD-Cdv A{y`8l?1(00@2M8h6``$TUF2Npu64>)fA}!`a$P09NN`06 xC`TW[#`"f&.`m\;9rS& (BsW,JLCeIH l+:[BS#(`@lmjf]@^ظ-M nr8!h$>EaYS[{'OaC;ryS;1KSXsq%Y@p"1a@aHp h@$1$Ez @𼜐0UCH`,5`^ H # `CȶB` X. {\{ zn䵋$v۠JR? J0O;H$*1*Vs\UH=S nWߧꆉGT:  R09$ 09xM+A@gtB_@@ -(T 21x@$RܠbD]!NK7 Ek7JP@ AJy¬U@-G"r}+P`Q2@%Z`Ch09p`sD@ ̖.P dm,Ih:K(NL `@y bpI`!N 0@b\D8p R@9 %\ q8 @[I@Oh  @[ih.29"@bApaD!s dE!ҼQ (V(XA aT9EZV,`bpԠ,bV 8>h0` ΩNRAE'8qL-G+I BE  `tpP,dfxHHth4TP`舐(PI%h֦  @JUM<@3< PpH.hBbdL86^0J F4v44$8   /$+(  @/0 $;, $  @"(Ы0 ?0&$(F02 ' 7 O('.$ 4?P /0 0 п6 78+(.'0 /X@   4/W8+(7 6U8  / ? O@$'( > WP '( #(Џ D O@+` \*o"mEV$"mEX$ED$B?< NA\M,,?<NNTC8"$@?<NNTA,2<<g2<gBQC|9<f|%Hz?< NA\a3@/:?< NA\*zʛ&z k -"zJgёBJAg<f``&zt+k +k+k  -"- Ҁ+A -Ҁ+A :Xм$@*@$<8C2Q"z((I$: R(z&L,z$z:N&&Q"o&iBm2<<g2<gBQNE4@ z"z$`G&G&* faxe 9Tz`/$.f'@HJ@v 6*``$0]X<, 0@ Y.:*e1E0Wh~Z+bIYh0(8<9 6 O 0H %5$ HH H܁'(8nXDX,P * @|c08&0EC" +9#?$2%z*_ cAd\ D:}@! " @F ' X'iJ |]Ƙ @/p VBl vƎ a(l6Wt0>d v2![yClpK[] 0(Y`<% !y`3X @3o ` !eh+DXaBхPp~4xZRp:>.a2+#"7M9@'¢G̋ I apy806<8d+6' "L)6xDޔ&\M*tLy,!oFJ/X`$ Oa (PAXm+@}RL:H  P~8"` (p :Q?{ `:ZQ`{?8ZAPS.aSb#bAn @=\ MJJ*Rpazd> 4`$r`aR$1 Br#ؚ>Pyd̈́rr(pH(٘cSW8$A16LzC"L(0kb4I fa1@yB1Sr ЃdH(K 0)1% A² ,BAX}9 $dv YX`hb TX@!)ppRY!kaE@4m &`Fa " FP`p`cH1$IcF20SMeKbKP'   /+81 3xX Ҥ&0Jlw@")p/F%@ H0'Bb" %4 @` yT0`P<ƃ HpPbA FP@" 7@*@MwĐ MRE[t؁?:NL00ЪV g!!]A+BA*B ~p`x!0+P.} ܁%܅A`tQB` Vx z1 R(x wwF  _$}@"R3)Q'KC`Uy=8nPÎKD g>Pf8rcU:B0 x B ja@R`$SԈAF!@ƦI%.ґf@d ,LRB%0,j!:!k !n4jaCЍH&ߠ`%]0!A'0<@ VrƝg`j4,Đ"5d&T$5P?6hM@bAqb< # h$1"p%~1 J?.G v`1þAA|2 :j ϰH@c3P8"j yk0$@ АuЙ`h~ <}.HH`Zvg0]d '5(ҬX@L (\ DG436 Ud0 !>L `T@J!cm<lbz'M@-F/ 49ME ȽʑM d)Re( ˹Tx2Te<aa3 (a "4@5HDcH\ Ov0b5Q* M OpO=d]'+`u)$g,8PaF@~RA4y 5aMOhti >E F7YAhWAPKP0H"8'C$I,(l0 ~>r#(=3+p  ڸL+ N>lCf?^ x!Xq 7] I"P01@ WȏJUHL&%/4ڕ(́` \ D6Dž'J #"@!B$QwHN0!P)  0K0d!@ÙUmB} xAD MT*6l"ˡ@$ G) 3 MQ*SAl! ̾Ya` I:G 9KaB* 6@ Y2An ټ@E )k =jP@U(@DY CЁf !-&)MqxH m2`-`Q!0 "ܜI Vh ( ObpN7 [?EÇX& 0 =&!Vw "ES/]*@y a(bg@Py *S'qIlT6FJbs!%RzX (@t@ +aZB厂LjrA50> 8nj)x؇!T|(  雀8E~KRy :Qh !rlAXh Gxa0R(/B(]%4k!WCm,  V`E_IAb q   X -?ʔJ!`4b:p @=_eC<O dy)!629uKGC !E4!NJp^5#?("AYAk(N a| B>.`&pt2"!\:4DH.'9#Ƽg$-Ͽ\.6F4ƒX Q'IW] 9pv%@`1BV4ó)8(HD+ Y< A`dE`(6`mfFժUjTQFa`+;t2 Q`<8yDuD3 L 4HJ8p P !ń(@A8L j!5D81WT>+`@@=T0 T:U ^ @~/1a4x G  P=@@/h0X\ >hC%A8 TƁ!ap+hTJс%'$H!8 UCFl:  K(xP@TH1#rdڰ_FA"B8"NBa`q;8`Xx0 P< hD 1q&t 0bP Pxa0϶ {PRl#}!is$ tpEF(,k@gh6"#QRаG³(wS:e@"8" 8u?5 ! p@vY80F%q@`BBR~"IZEkd;P$3"v*! 0jn@ 9 r `# dZBD?Q 9 ? i :BmD>@#: -@x0#c(#Ip($ j3)% N Y0 cE0AA@b$')#@!!$8h䠠$} Aj >˂n@^ D!0q1,;|p !! aj!Wʧp 0a7%ʤrT)VScy!*tV>ztoqV$s i(,C0Aq8VB,4 @pP, 20``rKF0 Iy>xRL''Dt dC0 l(́@A` t)d`3 $P`00"@ -SRHT%  !)N8ӂ'g$g / !*/8IP!(&7IG` K^@0 aJ3 *F`B([PC: R* p` 83bT"uPAŽ1ˤ])I ,AAwC \ 8#6nLGn yY\& ,n9zw=\PC$jp[J%1p8P P+r@Q$, R@X Ax"Xh%d`+*8*`P ƨ#%m(#&7H`)z01Xu0"`"h3X$Ab@["9 ?! 38xrK&P@XV0(1BUP| (YFU2 P$`HJUAe,}@ $b (Ci”_BZ%DA/ h EXw8@q2=iC#[Pfd@EjPn,T9mhx@ " )9 F0?@a@,u;`([BE5:*Qأ*1;h( !!Is1 l=Bo|ŧь04b19tx qc/U# qȌ$0 F@$ ]4 <08ez.tA`@DކD14Yf3%DP`s'(ub&)hI2@`0 1@ *'@<0 ckL\,Dd 9?r) :Xp[4~zPWr׿K8BN^Nuch8)YCRQ! f&Μz #YJ&CXnEPb*;22ָhE` &fgJl8@4<%8]@MqЁ8S]$SQA3ژ 3 66<ْ8HV"V'p#1 ˀOsy @/, xAŵ!<]؊n m,,D -g0H`470&6qG+Q6NmF s kw-$gTkN T0!#* sQ  CA`-E?}  'л<#?YL(Ǹ0/H0$?H>Ĩ!()1-,!1"(+    &      "$%/(0 /:%"+0 74#(!4$ '4  8  п 8$$ 'N6(#"#. /B(!/@,'4$( !/0'/7 @$  8 蠯ШH Ь@п7࠯ ෿4(  'G*7(-0( @< .$0G0/8'?K% 4(%?080+0/48 $  Ѱ +-+ | THE JAM PACKER V4.0 | +-+ Release Date: 17.06.1991 The JAM Packer is an executable/datafile and whole disk compression program. A full GEM user interface provides convenient and user-friendly operation. +-+ | OPERATING INSTRUCTIONS | +-+ PACK METHOD - Four compression methods are implemented. LZH - This is a modified version of the method used in the first Lharc series. LZH provides reasonably fast and very efficient compression, though it does take longer to uncompress than any other method available in the JAM packer. LZW - This method provides fast and reasonably efficient compression. It has the fastest decompression speed. It is ideally suited for when fast de-compression speed is more important than smaller compressed file size (eg. on a hard disk). V2 - Compresses very slowly, but de-compression speed is much better than LZH. It can also compress files smaller than LZW, but not quite as good as LZH. Since the introduction of the ICE pack method into the JAM packer, V2 is essentially redundant. In a future upgrade it will be removed and replaced by something much better. ICE - This method is used in the Pack-Ice packer and is based on V2, though it slightly improves on V2 in both time taken to compress, time taken to de-compress and compressed file size. FILE PACKER - PROGRAM/DATA Two types of files can be packed. "Data" files are simply compressed. "Program" files are compressed and the necessary code to de-compress and run them is included in the file. FLASH/HEADING If a Program file is packed, then you can choose whether or not the screen will "Flash" when unpacking and whether or not the "Heading" will appear when the file unpacks. NOTE: Packing resource, data, dictionary, help or any other support files for a program will cause that program to fail. If you think about it, this obviously cannot work as the program using these files has no idea they're packed or how to unpack them! Also note that program files may not decompress and run properly from some shells (notably the Laser C shell). ABORTING A PACK - Holding down the ALTERNATE key during a pack will cause it to be aborted. You are not given the option of resuming, so make sure that when you hold down ALTERNATE, you really do want to stop the current pack. This option also works when in the "Disk Packer", though only when data is being packed, not when reading or writing to the disk. DISK PACKER - This option has been updated significantly since V3.0 and now works properly. The "Disk Packer" reads in a whole disk and packs it into a single file. This is useful for transmission of entire disks via modem and archival purposes among other things. You can choose either of the four pack methods to be used during the disk pack, or alternatively you can choose no compression from the "Disk Packer" box. USE BOOT If the "use boot" box is selected, the format of the disk is read from the boot sector. Only use this option if you are absolutely sure that the disk has a valid boot sector, otherwise the results will be unpredictable. If the "use boot" option is not selected, the JAM packer attempts to determine the format of the disk by itself. There is no guarantee that it will get it right, though if any mistake is made, it will be to pack too much data, rather than not enough. USE FAT If this option is selected, it is only active if the "use boot" box is selected. It ensures that data clusters which are allocated by the FAT (File Allocation Table) are the only data packed. This is useful if you have deleted files from a disk, as although deleted, the data will remain on the disk until over-written by another file. FORMAT This is used during a disk unpack only. If the "format" box is highlighted, the disk will be formatted to the appropriate format before data is written to it. Note: 11 sector format is not supported, so if you have disk packed an 11 sector a track disk, make sure you have formatted the destination disk 11 sectors a track with a program such as Fastcopy III. NO PACK Select this option when you want a fast conversion of a floppy disk into a file. No compression is used, the data from the disk is just copied into a file. MULTI-PACKER - The "Multi-Packer" is a handy feature when a large number of files need to be packed. Wildcards are supported. Choose your source directory and type in the file name template to be used. Eg. "*.*" will pack all programs in the selected directory; "*.DAT" will pack all programs with a ".DAT" extension. PACK PROGRAMS If the "Program" button is selected then files with the extender ".TOS", ".TTP", ".PRG" or ".APP" will be packed as programs (executables which will uncompress and run), as if they were selected individually from the normal pack box as "Program" files. Otherwise, they will be packed as data files, which will not automatically uncompress and run. The packed files overwrite the original files. +-!+ | FILES CONTAINED IN THIS PACKAGE | +-!+ JAMPACK4.PRG - The JAM packer program. JAMPACK4.DOC - What you are reading now. DEPV2.S - Assembly depack source code for V2. DEPICE.S - Assembly depack source code for ICE. DEPLZW.S - Assembly depack source code for LZW. DEPLZH.S - Assembly depack source code for LZH. LDRUNLZH.S - Trap #1 file load/depacker. +- + | DISCLAIMER | +- + We take no responsibilty for any damage which may arise from the use or misuse of this program. +- + | LICENSE | +- + You may make copies and distribute this program, as long as the program and documentation file remain unchanged, and no profit is obtained. This program is shareware. If you find it useful, please send us something, be it money or words of encouragement, it doesn't matter. Bug reports and suggestions for improvement are also welcome. Write to us at either of the following addresses. +-+ +-+ | Andrew Knipe | | Tim Knipe | | P.O. Box 369 | | RSD Maiden Gully Road | | 367 Collins St. | | Bendigo, 3551 | | Melbourne, 3000 | | Victoria | | AUSTRALIA | | AUSTRALIA | +-+ +-+ | /+\ |O| /---\ /_\ .. * . . * . . . . ' з,''/2 ."и/0'<=< 3(8-7KJD /: 0'CNIJ  +,$/ /DG@  "`lkFH?<NNT/$@?<NNT2<<g2<gBQC|<<f|(Hz?< NA\B?< NA\/?8@A"H/(a,_1߂@?< NA\G"K kK^ JgёBJAg<f``+k +k+k  -"- Ҁ+A -Ҁ+A м$@*@t_CQ"KA$HNM@,$$$$ٵoC&i")n"<BBBBSlLBN(H,I*N((< :<&N~Q$~d $RESn`2,H$1@ED@|Ar$TApAn QڀnNuoSQ`jY JAM Packer Decrunch V4.0kLZW!l`Q zeWQK୛ң:J$f(BhO@aQ]bxA\OJg.@Q]`6 - PdЭпѣ"{ҍ¼.A// "zJNA #Q- !\/( h3Jn02cPd NXpEfqsCwCAUAA ]#oFLJH@B:FLbH@@<#FLH@B:6)‚=|i`Bnr3US1QS63Uc1QcS‚ Uk`+ByQk0:@ 4N@ M`P@ 3u16hB?QA 4H@ M#1OTH l aApX7?80e?)AO\񊦝P7X.ANFT%o] yS[f#N-yQ[` TS U[+hC/\?9Q[NW@`&X,\uCb:"֘A)|ʦ5>̾m¢ SnƮϪjޤ@(9QSg"S`Bgϣŗ㑃Ń S#. Q}5:8Aah:$` S@Pc@ |"|`S0(RÁI/2?^wsF4 ,:/QIWPCW 2:I!a# cPuﵰ0nfr@`Fo]R?-ךL E߹ߧךRweSFؾ2 XA͐:7CBgSN`'o^/(\ Ww `:`8pK:PgPXPgPgTP P0uQt(wG=CWwIWb.PAI R*h\ Cѹl #јo`uo o# o 貢/ H dom Rg`  | ] T9j?$\$ !N%'$CWeL ̨X5HyfpY¢8@sJ@fF/csTʧjgNcs&@IgdL. Ӯn&Is T=cspnRfh/<35`s [D n`_g:YK>9`60I`pœ;L` Rg:8N?2{Hy>N`-@ 5*ʟʂ.bJ*Z`:瀞Bl їw6 f,bJK)qq0#q!2:4Op95Jnf`:!u>sP \vt@B(/?"P0zr`oS5#oo|gooy<H/,/,S<0h |S?'$C/jvKN3BBgؼ`oBn(ZPo3+(Q[L0&v/d/cN/9/'/QzSi%-'/ \A%$"m"(G?rHgBnQl00Z1QRG G m= @tR=@~x@Hv hx)3z/;fRW'3T1bNv[BX!8' |X!!A)=|? rl !+(0QPvH !_ ' C[_ ycjZf0<`0_BE8<zGf1PR<<'`H0Fm&Pn02HA2 0ƞ@BD`0f0RE PK <JFnPP B0PK|S6PHyHyHyY1 j"%YOj9OyKhP:_s@f?QbBg7Bg ԰hIU?,p0@ G"FE0$ma((μ.1@$qwN^qg*OĔ0p,oxloooooozohoVoDk5o#^.u,@*(gAv /8&//4/8F!ư*Ő,@݀1}àX0qʰ6̻o`.# }!W29Vh$ P1(|qo*XjqwA (((հ((((U(!/:p:h lLnNu NMXf&RL< x௰g =`LXpNuqoqoڐE/"PBE|a1Qr$80f2HB@CI&Ifb bR@ @fxo11LRAGW@2?A Ao.b avj]j` @?bada0!jz?A0PGfbREa< ǐA dRI2 x !I!Y!|Xߜ 8Nu`vcxsoHr_EBD``l`vK8`K4`YDgK6308Kri@D`@2`?o A@x `.8<`(`X08z,`D\D3PHriESD@QBG|`Nu a%     ~YH?Ā$@NT2<<2<gBaGC<{ f|(Hzt"BA5[8@Az"H–(a,_1߂A NA\GXׂ"K DrK^ sJgёBJAgf``+k+k+k -- r -Ҁ+A3$@*@t_ٰ"KA$HNM@,s$ٵoC&i")7n"sBSolLBNo><rW,H*БKJ`jS _flHBAfl6`vBAaxlFDSBgaJCgAV30HB aG&NPo0M`tgkBARB`gHSCf^QaY3 H_C A4G~vgkaYRCBB30Hh\KԿs0`$BBvBDe_dvx@f RQDE HSA"Q`Nu  P   ajY JAM Packer Decrunch V4.0k Vɫ6I3qz/$0@IKrNC^$ng<%Ќ`#_4 cP.b4`0PW@ n_ B0QAec_AMOOOo`^Pp HQcE}EA EuP?e}Hn/.coay#PO)+dz6JIg8(TBn#! 2>@);2b);p2=a?a?]y΄@ 5 @n?2(<2);%WDU00Q2y,2,1MU(P09I}@@Tj1H1ĔRX'W@LHg$?!&9HЮCjMJ@fncٔ=|lCP~C 6o>D} XQrf`(vdr)|pPXLa5)XR} Pмel 1 nu 3(LBg%B9 )}PB@G% $0$3E. P߳B,/<nZ0Po0ѩ]@WB€0Z\(a"qap`@ .?q09(|L3?.&v,/fSTPo2*aHyFpH. @OHI= hBnf}E*/zc/Z+u:ொױ=Ύ@h.cHbF>[Hyp@nŸܴf΂Δ@Q2F>3RN\=@1{M\׏Dꔸ\Cf g{埉ϑeS9X0<//@g0x,BgKї=cP:/JEl0=cX `3HHw S>P4w3P0ZRv / M XX,w(+Jf MhE!1w.pї>P/xZM&HT(I Wy+hZ׻0Ҁ м@SlnÍ`r?f?bqBg/9p@OҴ$6P jp`өgj@X//.1Z-dѫ/lj=Ϳ=iŵ`J/<4HaJdoK8Hn c @OJnc PI.` >8ր΀ ɐ@rJl/r"]"cm mt]lh nڦhY μre~^WyмrvmaWI@,J]мASWDЈA cAܐ/``ݐvBξ*`[5PfpUhxܲtmVDF84ѫL~Δ@09pUn@6$m^D@g AF`$B0":Mv  `2jY JAM Packer Decrunch V4.0kV.BHn!/WBd^0ˮFJng`040AA,0A<.4. n a&.?QNA\ ,_QЦG!ONqB2z6:RF08:܁"HAJAf |2:ƲznzPaTaP. ۏ Odž `Ŧabf 1` 1><aDaTSBgzgRAf|<: FmC@`PffbR@2`:a >8`a1dž@:< CNs:<Q*8g SfXpPu@ |8ÈNsBQ>NuTB+T_b^*ꀄYu䀊ZBS^*% WTNONOgIO@.JO=AF|DCA{@HyуdR0 JPK!Jg#М0AbHyAp@&HyA/D%I?-472BY*vB5u ICI`@P$6|U-ܪ n$A{@Hy IٯrâB1w@Bؚ &2?f6 =~v$UCBgKoooodx@ioooiWE 2f<5ޔ72B8a'o_mo=€v2fD1#5#ia'I_T2fNޔ;dq3f^}M5eS6pHЃxP8p eo?Suм|&aa'ah 9f <`ل X`wͩd?~l$a'OaR@rj fX/߀u? P^*B2fdC:ffC DlYC02fxC:fP꒣\S@@ P3fRXCiG @}f2fCڒ<(PLKq eBgq 4Pp2f:fޔ1C'Ag 71 ԼҖRXv$1@w%0rij/ڸfHy/w }"0"g]P?f}?bBgCaAY ґ0.6(` l@5Hnh}?XSq2l_2!A .Qֿ⻵0.Pdc!À\W o@4n@/TqdS8./`P?CEQB@ĚG#LHOO GfH?ыXH/.V9f/9TP׏vB?<\05Jf$H`>d`&."t\ @B(/S/@PG *n.S(nBrBy#͛ S#~ Ї#s6g -7BWH<<7CРAA0?<̻BJEmd O x?- V`b"=PѢ`.PD0c*=.ܰB 5PԟA`Bf8`.2n05cm6A:0g` oR s1s-{xrFf A{`z20!0`S Fmtpup*ЅHЇ(@ HІм&@`$~g SFPx m֣<8ۏ :WAK0C8W1??'|須JDl>!ANPWl.釣`04/YgZHڗ3,A?{@61̈́`A?9@6  <0Qv{ pg&0B\39pϖXAA҈~ݗ3eM9c]900??0??ui\珇eM{c]{1'eM'ADRGf =Ψ1`'11`Qs @03@1!8#. "89r[h@0GtB0'Q@Q!m?%}~T"wQE8pEd` 0@8#w3!0c*4HL 1|s2iCGPDB:md2Zjz@D`Fj`@3YCH@HU08DCMRp@82RA=AAy~CM|0k$0CM 21AHЁT*@Nq0]b CMU@=@51P;D<F3< 05AP}Fs6Ю:?1E3:0P6\0)51P}Esl0411ed1 @300J@fo) l>.p BE!*wH8Ƞ؍ D8( ,0g <`܀RE0H058Yrfpo{*3"% ?0|'`  %?up[T a>[<N"΢%!A ^0`$@?@@?aumXc!gW0˞H?^l`eUHBn./ )a+Hs/ X#7B1p0f*@b09b0co`.c# eo?BKun^Bn8<>` phDmBE`E@# E< V0H#E>0G?k G|e=(]KK.,M>-@@8 ' `ucYQ?d$Itxr:TDZb63@RCKs c,c 7@b70,1@3ߑH0o3s7@3 VsTBXGfL+j.prt}Q6t[2AXd1Cpr1dRApNu0|AR$szr4ɒZ9024TBTDp k$z4<tx0<82X6244XDTBp6`BRNua XNuH"PRQ~>r A0<s ad t"zx&zd/Q}(N<@p|%>< V6<[3@o0)Q|%dT@01Gm2G8+kR{E0RJe2pf'lLo`Sj8*ZgYRR81L:@4o1301Gd1 320fH|m-t)0לBjqTFkg, `&% |,`g]p-%-QFDF*D? Fb0JA @2~ F40j//?/wwwsq31w{t`m P}B**j*(^&A !GpB !M0L!ML0 n @xAA@g RD!6JDgh< ><0SFQ<<a x~@$Pn0 Pn0T RB`& z $>@xHP]2(PqA TBfr0 LS@@@Bt~1C"zگ"Q0r@0agtRA8|lC@%P904`RA0|"@ Pn8zRERF0SDP0` Dlr4aRABm`SA`0<0| .` 116oB@`2AC"3 $R@|mNu "NEp0`xs0`~rPgpIPKP24s g*4 G`460 C 70"1 0"200 7 1 >1P$KP6s0f 7(50:s23 22P`HrC`Ft| q>< 5 (p zF"QBP(z:`EJAmM!f$0<9`0M Vg4rzAJM BVvEz(.E,z!@Vo8L z 0<|m9!#5!#7 `82#83 9M 8s@g6507@zBA{.BA#B AgыBAS#;.#_S n c3MOJ}1 nH4Nm6c­ɱ@3!xaQ  n3WžYžžӳ n2e'D##N nZcŔӦJvdR@IMcQѲYDPP0NM{#w'(Nw#@ Jѯtv(/ct߰~ |wl*npr(*dֱhjS](p"TBy nƹeZߵ{MԟŸNX !J!_ NAYyrU2"P$h/( J@2u($ bʔ1Qtt֑Iq>֕_`R p.և-dbttU`ևj000,fz.r( t `8`6gggggggg g ?z~N\dtbtt`pfЮ/eypt w<z.  ,bttBW0cikIa A2rI`fr;j`f"gЮW @za!`?dbTg6].HЃB`> / cc b 0ЮPv"ƽ!eR 2 H@A9$ BB`J"IJlVar}JlwDvd`BbdDdD -ARGyBG".0~~D$Il GD&gHC H@@HCBCւJGgD-C :з.J͑1ѧ2.boHQs_a_OS|bQC2S|VQ7"R0L0<}f& ]1bB UBnV*00n`*K@Bp[Uu>Po\r";HPYPgXHf0(9WV4,BG`P>:($@/TPf><`rgRl &JGm_zjrgDn.\@m"?YcB}g<]`0`j?=SePu>JGl 3VP?`?RfP-S/ fpE  7U%aKBO2K^ROHぃ|1fSnG0.3wQCeS`Th мP@Z#d݊ E3Љ5=L 0FliA1l։kqRƂlPDl\Ug3?M PoG3=UL0>7᷀69>Ƽ P{ wHy!W #߁Hyl" qq`]tmyzQ>aq`fhktpcckqd|pJ`abeHdwa caa`g` ba`^`bfuooac\``b]a]acbLe`[Gaaa\Q#=3 PVhPlrQgTY$Pof BB`&". Bvd d``bd-@-AUSHL*~&gHC H@J@g@HCBCւ-C LN^.JQTlLUcQCNVQoQgNX=@g3Ք0<``0<|qN^NuQ *OgJAVMˑO}GOURCEa5eЙa3RG`NOSSlyDESTINATIONTTPAPP ?OTOBO0OO ??#;?????z?h)_ zz2\ z!{\\'_cW504bc̠p64%eGrrr!%b@!!]#ҌL2Ԭ.Es pAMly? |_#Yes |rcelҼk`,Up`d e 5Ж~ӥӿ! $> ,㓽Noav|h kwell..Ҍ!p{FineO.T will|` .  k ow! You'gtr`Fy|oluܐy` system!@funlh|doessupp it.#Ohph `uldopenkst$Exit]ՍsJundd!|#Why'stn?%֒m MULTI ERPORT m* q NOT COMTEDREAwSON1-+  ao sa - wnwhPm |+lra n o+rs`ceLEb|Kenough m_M Ԟa kknownd }  ¢`y key tRue_;qhӏЅpöDe_#Sh3it! fExecutable;m`mplete?!nailure!|$Retry|;HG%sٴUnf MΨj:siEt'P pETURN ?jSd. DrU error.rl0wed1|Not aM_ Ok]Ca;n't create 3][pSsufficientmory. Abort]Dp^L:(> Gpffr+om inputsUbŠ e{--^LʘpWPq$\*',B'RIVEA.^ 2][|swhich dq3? ][ AB| C: ]ChoosPPpDttion _pathname^0rrԞw`aRaP }uFJPK!`ysq|dqUfd.P_EXITHV2sMetho@ ICELZWMultisPcFlashUNHeadp;Tژ5qUnUU No5p`potUse FpFormatQ?n\ LÏ:4"ڏȏpaP]|kwp ogTnojjgfokxng[`u3!do`XpMfOa78>AybRpUaT RQ_D`T mJ2 T _(T J2 Z4_T4ZOT4_T4[]BBL_ 䘦[AB[ Bx5<[JBx=Kk=B@TRY?di[B$jrkJTK 2%?M'[oKE h1A@0`qҶ1 h3񕠠X `C P[1QDzr` : &R *@?!*@C1#! m(B!9$QBW `BPAP P_1 ЏU:zrFZXz]UӪC^ze!.CHnzyJb *zz~_tz_XzDzJbUz_Jbj BpBÔHH TBߔM_uRXIc@LzO\NzZEKB$xz!quB$zH!]Qz&]&dcuT*Lpy: L: D]:<31eN:"( c>068$4t  o lv; %0 ! #P,!l< % Zv4  A"6L "T $0<  >.](  &   #     $ ' &00(  *V %%  C^$l&   D [('B   { C Z @((L \8"&J  J B"' (l@ (X&>&. &. 4$f.,*   ."(L~8 &&^)AkA`"_., FP%# & ) r   Ksvggpp<@3`0PwWsP?h#@7~@ _P %;|wrgiE!Ifu@ kxK`?0Р7h0!?f`?`7gP_`W$ Ѐc2_d?Ot_c?8Dw 3_TkG "¨ǰ 15az0x?Є` p<# Ѐ7 'T4 2?GV^`O` ; SIMPLE TRAP #1 FILE DEPACKER FOR JAM PACKER V3.0/4.0 LZH COMPRESSION. ; WILL ONLY WORK ON FILES WHICH ARE COMPLETELY READ BY ONE CALL TO ; FREAD (TRAP #1 #$3F). savebuf = $200 YES equ 1 NO equ 0 LSEEKROUTINE EQU YES ;WHEN PROG USES LSEEK TO DETERMINE FILE LENGTH SFIRSTROUTINE EQU YES ;WHEN PROG USES SFIRST TO DETERMINE FILE LENGTH BEGINNING: BRA.S START fname: dc.b 'PLAYER.PRG',$00 EVEN START: MOVEA.L A7,A5 LEA BEGINNING(PC),A7 MOVE.L 4(A5),A5 MOVE.L $C(A5),D0 ADD.L $14(A5),D0 ADD.L $1C(A5),D0 ADD.L #$100,D0 MOVE.L D0,-(A7) MOVE.L A5,-(A7) MOVE.W #$0,-(A7) MOVE.W #$004A,-(A7) TRAP #1 ADDA.L #$0C,A7 clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,d7 MOVE.L #$1600,-(SP) MOVE.W #$48,-(SP) TRAP #1 ;RESERVE SOME SPACE FOR LZH DEPACK TABLES ADDQ.L #6,SP MOVE.L D0,BUFPOS move.l $84.W,oldtrap1vector move.l #trapit,$84.W move.l d7,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp MOVE.L #NULL,-(SP) MOVE.L #NULL,-(SP) PEA fname(PC) MOVE.W #0,-(SP) MOVE.W #$4B,-(SP) TRAP #1 add.l #14,sp ;ENSURE THAT YOU CAN QUIT OUT OF PROGRAMS WITHOUT A CRASH clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l oldtrap1vector(pc),$84.w move.l d0,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 trapit: btst #$05,(a7) bne.S super move.l usp,a0 bra.S after super: move.l a7,a0 addq.l #6,a0 after: cmp.w #$3d,(a0) beq doopen cmp.w #$3f,(a0) beq.s load IFNE LSEEKROUTINE cmp.w #$42,(a0) beq.s down ENDC IFNE SFIRSTROUTINE cmp.w #$4e,(a0) beq.s dosfirst cmp.w #$2f,(a0) beq.s dogetdta cmp.w #$1a,(a0) ENDC bne dotrap1 IFNE SFIRSTROUTINE lea retsetdta(pc),a0 move.l 2(a7),(a0) lea setdta(pc),a0 move.l a0,2(a7) bra dotrap1 dogetdta: lea retgetdta(pc),a0 move.l 2(a7),(a0) lea getdta(pc),a0 move.l a0,2(a7) bra dotrap1 ENDC doopen: lea retopen(pc),a0 move.l 2(a7),(a0) lea open(pc),a0 move.l a0,2(a7) bra dotrap1 ;here starts the stuff for SFIRST IFNE SFIRSTROUTINE dosfirst: lea retsfirst(pc),a0 move.l 2(a7),(a0) lea sfirst(pc),a0 move.l a0,2(a7) bra.s dotrap1 ENDC ;here start the stuff for LSEEK IFNE LSEEKROUTINE down: lea retlseek(pc),a0 move.l 2(a7),(a0) lea lseek(pc),a0 move.l a0,2(a7) bra.s dotrap1 ENDC load: move.w inopen(pc),d0 cmp.w #1,d0 beq.s dotrap1 ;if checking depack marker, do real trap1! move.w seekflag(pc),d0 cmp.w #1,d0 beq.s dotrap1 ;if called from seek handler, exit! move.w mustdecrun(pc),d0 cmp.w #1,d0 bne.s dotrap1 ;if marker not present, don't decrunch! move.l a7,d0 movem.l a1-a3,-(sp) sub.l #$20,8(a0) lea buffer(pc),a1 move.l 8(a0),(a1) move.l d0,a2 lea return(pc),a1 move.l 2(a2),(a1) lea decrunch(pc),a1 move.l a1,2(a2) move.l buffer(pc),a1 lea savebuf,a2 move.l #$20,a3 loadloop: move.b (a1)+,(a2)+ subq.l #1,a3 cmp.l #0,a3 bne.s loadloop movem.l (sp)+,a1-a3 dotrap1: dc.w $4ef9 oldtrap1vector: dc.l $00 ;* open: tst.l d0 bmi exitopen2 movem.l a1-a3,-(sp) move.l d0,a3 lea inopen(pc),a1 move.w #1,(a1) pea test(pc) move.l #8,-(sp) move.w a3,-(sp) move.w #$3f,-(sp) trap #1 add.l #12,sp tst.l d0 ;ADDED TO FIX ZERO LENGTH FILE beq.s notcrun ;DITTO move.l magic(pc),d0 cmp.l test(pc),d0 bne.s notcrun lea mustdecrun(pc),a1 move.w #1,(a1) bra.s skipit notcrun: lea mustdecrun(pc),a1 move.w #0,(a1) skipit: move.w #1,-(sp) move.w a3,-(sp) move.l #-8,-(sp) move.w #$42,-(sp) trap #1 add.l #10,sp move.l a3,d0 exitopen: lea inopen(pc),a1 move.w #0,(a1) movem.l (sp)+,a1-a3 exitopen2: dc.w $4ef9 retopen: ;exit dc.l $00 inopen: dc.w 0 test: dc.l 0 unpaklen: dc.l 0 mustdecrun: dc.w 0 magic: dc.b 'LZH!' IFNE SFIRSTROUTINE ;* getdta: lea dta(pc),a0 move.l d0,(a0) dc.w $4ef9! retgetdta: dc.l $00 ;* setdta: lea dta(pc),a0 move.l 2(a7),(a0) dc.w $4ef9 retsetdta: dc.l $00 ;*# FOR $4E (SFIRST) sfirst: tst.l d0 bne pissoff move.l 2(a7),a0 movem.l a1-a3,-(sp) move.w #$2,-(sp) move.l a0,-(sp) move.w #$3d,-(sp) trap #1 addq.l #8,sp lea sfirsthandle(pc),a1 move.w d0,(a1) move.w mustdecrun(pc),d0 cmp.w #1,d0 beq.s change bra.s afterchange change: move.l dta(pc),a0 add.l #26,a0 move.l unpaklen(pc),d0 move.l d0,(a0) afterchange: move.w sfirsthandle(pc),-(sp) move.w #$3e,-(sp) trap #1 addq.l #4,sp movem.l (sp)+,a1-a3 pissoff: dc.w $4ef9 retsfirst: ;exit dc.l $00 ENDC ;*# FOR $42 (LSEEK) IN TRAP1 IFNE LSEEKROUTINE lseek: cmp.w #2,8(a7) bne vamos3 cmp.l #0,2(a7) bne vamos3 lea seekhandle(pc),a0 move.w 6(a7),(a0) lea sd0save(pc),a0 move.l d0,(a0) move.w mustdecrun(pc),d0 cmp.w #1,d0 bne.s vamos move.l unpaklen(pc),d0 bra.s vamos3 vamos: move.l sd0save(pc),d0 vamos3: dc.w $4ef9 retlseek: ;exit dc.l $00 ENDC ;*$ FOR $3F (READ) IN TRAP1 decrunch: ;a0 - start of crunched data ;a1 - beginning of uncrunching area movem.l d0-d7/a0-a6,-(sp) move.l buffer(pc),a0 lea origlen(pc),a1 move.l 4(a0),(a1) move sr,d1 btst #13,d1 bne nochange clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp lea jek(pc),a6 move.l d0,(a6) lea mode(pc),a1 move.w #1,(a1) ;1 denotes must return to user mode nochange: lea colstore(pc),a1 move.w $fff8240,(a1) move.l buffer(pc),a0 move.l a0,a1 add.l #$20,a1 BSR DEPACK move.w colstore(pc),$fff8240 ;restore memory saved in buffer move.l buffer(pc),a1 lea savebuf,a2 move.l #$20,a3 loadloop2: move.b (a2)+,(a1)+ subq.l #1,a3 cmp.l #0,a3 bne.s loadloop2 move.w mode(pc),d0 cmp.w #1,d0 bne nochange2 move.l jek(pc),-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp nochange2: lea mode(pc),a1 move.w #$00,(a1) movem.l (sp)+,d0-d7/a0-a6 move.l origlen(pc),d0 dc.w $4ef9 return: ;exit decrunch module dc.l $00 * LZH DEPACKER For use with the JAM Packer V3.0/V4.0 * * USAGE: * LEA $ADDRESS OF PACKED DATA,A0 * LEA $ADDRESS TO UNPACK DATA TO,A1 * BSR DEPACK * * NOTE: Must save registers before executing depack if original * contents are required. RESET MOVEM.W D0-D1/D3/D5,-(A7) MOVEA.L A1,A2 MOVEQ #$00,D2 MOVEQ #-$02,D4 MOVEQ #$00,D1 MOVE.W #$0139,D5 OUTER ADDQ.W #2,D4 CMP.W (A2)+,D7 BHI.S OUTER MOVE.W $00(A3,D4.W),D3 ADDQ.W #1,D3 LSR.W #1,D3 CMP.W -$02(A3,D2.W),D3 BLS.S BIDDLE MOVE.W $00(A3,D1.W),D0 ADD.W $02(A3,D1.W),D0 CMP.W D0,D3 BLS.S BIDDLE BITH MOVE.W D0,$00(A3,D2.W) MOVE.W D1,$00(A1,D2.W) MOVE.W D2,$00(A0,D1.W) MOVE.W D2,$02(A0,D1.W) ADDQ.W #2,D2 ADDQ.L #4,D1 MOVE.W $00(A3,D1.W),D0 ADD.W $02(A3,D1.W),D0 CMP.W D0,D3 BHI.S BITH BIDDLE MOVE.W D3,$00(A3,D2.W) MOVE.W $00(A1,D4.W),D0 MOVE.W D0,$00(A1,D2.W) MOVE.W D2,$00(A0,D0.W) ADDQ.W #2,D2 DBF D5,OUTER MAKETABLE2 MOVE.W $00(A3,D1.W),D0 ADD.W $02(A3,D1.W),D0 MOVE.W D0,$00(A3,D2.W) MOVE.W D1,$00(A1,D2.W) MOVE.W D2,$00(A0,D1.W) MOVE.W D2,$02(A0,D1.W) ADDQ.W #2,D2 ADDQ.L #4,D1 CMP.W D7,D2 BNE.S MAKETABLE2 MOVEM.W (A7)+,D0-D1/D3/D5 RTS  CREATE MOVE.L TABLE7(PC),A0 LEA TDATA1(PC),A1 MOVEQ #$00,D0 MOVEQ #$1F,D1 MOVEQ #$00,D2 LOOP1 MOVE.B D0,(A0)+ DBF D1,LOOP1 DBF D2,EXIT1 MOVE.W (A1)+,D3 MOVEQ #$03,D2 EXIT1 ROL.W #4,D3 MOVE.W D3,D1 ANDI.W #$000F,D1 ADDQ.B #4,D0 BCC.S LOOP1 MOVE.L TABLE8(PC),A0 LEA TDATA2(PC),A1 MOVEQ #$05,D0 MOVEQ #$03,D1 LOOP2 MOVE.B $00(A1,D0.W),D2 EXT.W D2 LOOP3 MOVE.B D1,(A0)+ DBF D2,LOOP3 ADDQ.W #1,D1 DBF D0,LOOP2 RTS CREATE2 MOVE.L TABLE1(PC),A0 MOVE.L TABLE5(PC),A1 MOVE.L TABLE4(PC),A2 MOVEQ #$01,D1 MOVE.W #$04E6,D2 MOVEQ #$00,D4 MOVE.W #$0139,D0 CONTINUE MOVE.W D1,(A0)+ MOVE.W D2,(A1)+ MOVE.W D4,(A2)+ ADDQ.W #2,D2 ADDQ.W #2,D4 DBF D0,CONTINUE MOVE.L TABLE1(PC),A0 MOVE.L TABLE2(PC),A3 MOVE.L TABLE6(PC),A1 MOVE.L TABLE3(PC),A2 MOVE.W #$0274,D2 MOVEQ #$00,D4 MOVE.W #$0138,D0 DOMORE MOVE.W (A0)+,D1 ADD.W (A0)+,D1 MOVE.W D1,(A3)+ MOVE.W D4,(A1)+ MOVE.W D2,(A2)+ MOVE.W D2,(A2)+ ADDQ.W #4,D4 ADDQ.W #2,D2 DBF D0,DOMORE MOVE.W #$F,(A3) CLR.W (A2) RTS  RESTORE BSR RESET BRA BACK TABLE1 DC.L 00 TABLE2 DC.L 00 TABLE3 DC.L 00 TABLE4 DC.L 00 TABLE5 DC.L 00 TABLE6 DC.L 00 TABLE7 DC.L 00 TABLE8 DC.L 00 BUFPOS: DC.L 00 EXIT ADDQ.L #4,A7 RTS DEPACK MOVE.L A0,A5 MOVE.L A1,A6 LEA TABLE1(PC),A0 MOVE.L #0,(A0) ;SET UP RELATIVE TABLE OFFSETS MOVE.L #$274,4(A0) MOVE.L #$4E8,8(A0) MOVE.L #$9CE,12(A0) MOVE.L #$C42,16(A0) MOVE.L #$EB6,20(A0) MOVE.L #$112A,24(A0) MOVE.L #$122A,28(A0) MOVE.L BUFPOS(PC),D1 TST.L D1 BNE.S DONTUSESCREEN USESCREEN: MOVE.B $F8201.W,D6 MOVE.B $F8203.W,D7 LSL.L #8,D6 MOVE.B D7,D6 LSL.L #8,D6 MOVE.L D6,D1 DONTUSESCREEN: ; MOVE.L A7,D1 ;GET STACK POSITON ; sub.l #$1500,D1 ;TABLES START ADDRESS IN D1 ;STORE UNDER STACK MOVE.W #7,D0 TABLOOP ADD.L D1,(A0)+ ;ADD TABLE BASE ADDRESS TO OFFSETS DBF D0,TABLOOP BSR CREATE BSR CREATE2 MOVE.L TABLE3(PC),A0 MOVE.L TABLE5(PC),A1 MOVE.L TABLE1(PC),A3 MOVE.L A6,-(A7) ADD.L 4(A5),A6 ADD.L 8(A5),A5 ADD.L #$0C,A5 MOVE.L A6,A4 ;THIS IS REQUIRED! MOVE.W #59,D0 ;MOVE 60 SPACES TO END OF UNPACKED AREA SPACES MOVE.B #$20,(A4)+ ;NOTE: SHOULD PROBABLY SAVE THIS DATA DBF D0,SPACES ; BEFORE WIPING IT OUT! MOVEQ #$08,D6 MOVE.B -(A5),D5 MOVE.W #$04E6,D7 MOVE.L TABLE8(PC),A4 TOP NOT.W $F8240.W CMPA.L (A7),A6 BLE EXIT MOVE.W $04E4(A1),D0 MORE DBF D6,NOTEMPTY MOVEQ #$07,D6 MOVE.B -(A5),D5 NOTEMPTY ADD.B D5,D5 BCC.S ZERO ADDQ.W #2,D0 ZERO MOVE.W $00(A1,D0.W),D0 CMP.W D7,D0 BLT.S MORE MOVE.W D0,D1 SUB.W D7,D0 MOVE.W $04E4(A3),D4 BMI RESTORE BACK MOVE.W $00(A0,D1.W),D1 SCAN LEA $00(A3,D1.W),A2 ADDQ.W #1,(A2) CMPM.W (A2)+,(A2)+ BCS.S FRSTGTR MOVE.W $00(A0,D1.W),D1 BNE.S SCAN LSR.W #1,D0 CMP.W #$0100,D0 BGE.S GTE256 WRITE MOVE.B D0,-(A6) BRA.S TOP FRSTGTR SUBQ.W #1,-$0004(A2) MOVE.W -$0004(A2),D4 SAME CMP.W (A2)+,D4 BEQ.S SAME SUBQ.L #4,A2 ADDQ.W #1,(A2) SUBA.L A3,A2 MOVE.W $00(A1,D1.W),D4 MOVE.W A2,$00(A0,D4.W) CMP.W D7,D4 BCC.S SKIP MOVE.W A2,$02(A0,D4.W) SKIP MOVE.W $00(A1,A2.W),D2 MOVE.W D4,$00(A1,A2.W) MOVE.W D1,$00(A0,D2.W) CMP.W D7,D2 BCC.S SKIP2 MOVE.W D1,$02(A0,D2.W) SKIP2 MOVE.W D2,$00(A1,D1.W) MOVE.W $00(A0,A2.W),D1 BNE.S SCAN LSR.W #1,D0 CMP.W #$0100,D0 BLT.S WRITE GTE256 MOVE.B -1(A5),D1 MOVEQ #$00,D2 LSR.B D6,D1 OR.B D5,D1 MOVE.B $00(A4,D1.W),D2 SUB.W D2,D6 BPL.S POSITIVE MOVE.B -(A5),D5 MOVE.B D5,D4 ADDQ.W #2,D6 BMI.S OVERFLOW BEQ.S MODD4 LSR.B #1,D4 LSL.B #7,D5 BRA.S MODD4 READONE MOVE.B -(A5),D5 MOVE.B D5,D4 LSL.B #6,D5 MOVEQ #$02,D6 LSR.B D6,D4 BRA.S DOCOPY POSITIVE BEQ.S READONE MOVE.B (A5),D5 SUBQ.W #6,D6 OVERFLOW NEG.W D6 LSL.B D6,D5 MOVE.B D5,D4 MOVE.B -(A5),D5 MOVE.B D5,D2 LSL.B D6,D5 SUBQ.W #8,D6 NEG.W D6 LSR.B D6,D2 OR.B D2,D4 MODD4 ANDI.W #$003F,D4 DOCOPY MOVE.L TABLE7(PC),A0 MOVE.B (A0,D1.W),D2 LSL.W #4,D2 OR.B D4,D2 ;NEG.W D2 LEA $01(A6,D2.W),A0 SUBI.W #$00FE,D0 MOVE.W D0,D1 COPY MOVE.B -(A0),D0 MOVE.B D0,-(A6) DBF D1,COPY MOVE.L TABLE3(PC),A0 BRA TOP TDATA2 DC.W $0F2F DC.W $2F3F DC.W $2F1F TDATA1 DC.W $FFF7 DC.W $7 DC.W $7773 DC.W $3 DC.W $3 DC.W $3331 DC.W $1 DC.W $1 DC.W $1 DC.W $1 DC.W $1 DC.W $1110 DC.L $00 DC.L $00 SECTION DATA origlen: dc.l $00 oldssp: dc.l $00 buffer: dc.l $00 mode: dc.l $00 jek: dc.l $00 length: dc.l $00 colstore: dc.l $00 seekflag: dc.w $00 seekhandle: dc.w $00 sd0save: dc.l $00 rtlseeksav: dc.l $00 sfirsthandle: dc.l $00 dta: dc.l $00 oldsize: dc.l $00 NULL: DC.L $00E.  `..  4`DATACOMPPRG t J LSD_PACTPRG t ,  3` *O*m - ЭЭ// ?<?<JNA B?< NA\##3@ | #ax | an | ad/< ?< NA\|nذ|g"< < aBJk# | a" | 9aa<1g<2f` | a | aaΰ<1g8<2g<3f`33^`3Nq3Nq3Nq | a | aax< g"< <ng<yf3`D3` f | aZ | aP/< &?< NA\"| ( | a,/<?<NA\?</< (?<NNAPJf/9 ?<HNA\Jk##?</< (?<=NAP3Jkf/9/9 ?9?<?NA JkBa|"9 ҹ# | aa 3@/9?< NA\ | a`/< X?< NA\<g"| Z | N9<gP(|*K̛#a*|,|a*y,Ka*|,|aa`&at*y,Ka*| ,|ava | a | aa< <ng,/9?<INAJf` | aja\BgNA?</< Z?<NAXkNu?<NATNu?<NATNu/?< NA\Nu"@<BB!<0mD<9oaD0$(<!<0m$<9oa$0ԃ錒<B<fNu$<Nu<Fo <an`<Nu<'Nu y"y$ytBABaVJg RA AfanaaR$ y"y$ $BBBBBBGL?&JINu&Ho&Iz*HRM(fgn`^SM(Hfn& Sl@( SDo|m6<`<UFNMv`l*#ng>aH9&906`af06`g&SCaX06`66` aLv`(BNupa8pNuJAg6BA| lRySCp`NuRyC |p `S@eQNuB@$3@tQNu`*o"mE:$"mE<$E($?<NNTC,"$@2<}BQ?<NNT<g C9C/ ?< NA\B?< NA\M,a3@/:?< NA\*z›&z k -"zJg$ёBJAg<f ``&zf+k +k+k  -"- Ҁ+A -Ҁ+A :Jм$@*@$<0C*Q"z(I$:R(z &L,z N&&Q"o&iBmNE4@ z"z$`G&G&* 3@fae:rvfareXrBDat6DrfaZQQ`Brx`raJ<m<gra862< ` 2< BTB6a SJ QmxNu DNuSABBf DQNuEJEK PACKER V1.2 - DECRUNCHINGY 6/0101 Enter name of source file: Enter name of destination file:Enter offset (default is 1000):Could not allocate enough memory Wait a while - now crunching! 1) Crunch Executable .PRG, .TOS or .TTP file 2) Crunch data file Choose: 1) Flash background screen when unpacking 2) Flash text when unpacking (only in Low Res) 3) No flash Choose: Supress relocation after decrunch (y/N):EWelcome to the Jek Packer V1.2(d) Made by Sharaz Jek, January 1989 This version created on 18th January 1989 Crunch another file (Y/n):JEK!8  $  $  (             . fN &`*O*m - // ?<?<JNA B?< NA\##,#/<d?< NA\?<NAT/9?< NA\/<`/<`/<^?<?<KNA`#fNh` O\ P?gh PBgN PNg4 P/g Pfh#F/|<`V#8/|0`B#/|J`.#/|`# #/| yN#PN#PNJfn#H#L#T?</9T?<=NAP3D?<?/<?<BNA yP ?9D?<>NAX 9H yLN of f36#8#< mx#@?<?96/NAXk|Nu?<NATNu?<NATNu/?< NA\Nu"@Svx! 0m: 9oa60$x! 0m 9oa0ԃSv fNutNu Fo an`WNu'Nu z2"z6$z.tBA~aLJg RA Afanaa.$ z"z$ $prtvxzGL?&JINu&Ho&Iz*HRM(fgn`ZSM(Hfn& Sl>( SD o| m6<`<UFNM,v`l*#  зn g0a8:&:06`aV06`g&SCaJ06`66` a@Rv`(BNupa0pNuJAg6BA C lRy SCp`NuRy C Cp S@eQNuB@$3 ̵tQNu`*o"mE$"mE$E$?<NNTC "$@2<}BQ?<NNT gC9C/ ?< NA\B?< NA\M,a33 /:?< NA\*z&z k -"zxJgёrJAg f``&zL+k +k+k  -"- Ҁ+A -Ҁ+A :0$@*@t0C*Q"z(I$:R(z&L,zN&&Q"o&iBmNE4 z"z$`G&G&* 3 fale2rvfa`eLrBDad6DrfaLQQ`8rx`ra@ m gra062< ` 2< BTB6aSJ QmNu DNuSABBf DQNuEJEK PACKER V1.2 - DECRUNCHINGY 6/0101 Enter name of data file: File larger that original!Do you want to pack with verify (Y/n)?DCVerify: no memory!OK!Error!Could not allocate enough memory Now compressing: EfWelcome to the Jek Packer V2.1 Made by Sharaz Jek, January 1989 This version created on 18th January 1989 Final modifications of this version by Axe/Delight on December 12th, 1989 Crunch another file (y/N):JEK!H# # f zX.f ! 6 4," j:4.:(&4Z" 2 T\p }p `p `p}p} @pp `p}p`}p} p}p }p p}p} @pp `p}p`}p pp p@ `p `pp @p@p@ `pp`p: p:p :p packed_adr = $30 length = $1234 lea packed_adr,a0 move.l #length,d0 bsr unpack ;-? unpack: movem.l d0-d7/a0-a6,-(sp) move.l d0,packed_length move.l d0,actual_length move.l a0,load_addr btst #0,d0 ; odd length: not packed bne end_read move.l a0,d7 ; odd address of buffer btst #0,d7 bne end_read adda.l d0,a0 move.l -(a0),d0 ; check if crunched file cmpi.l #'JEK!',d0 ; crunched, last Longw. = 'JEK!' bne end_read move.l -(a0),actual_length subq.l #4,packed_length move.l load_addr(pc),a0 adda.l packed_length(pc),a0 move.l load_addr(pc),a1 move.l -(a0),a2 adda.l a1,a2 move.l -(a0),d5 move.l -(a0),d0 eor.l d0,d5 L541f8: lsr.l #1,d0 bne.s L54200 bsr L542be L54200: bcs.s L54242 moveq #8,d1 moveq #1,d3 lsr.l #1,d0 bne.s L5420e bsr L542be L5420e: bcs.s L5426e moveq #3,d1 clr.w d4 L54214: bsr L542ca move.w d2,d3 add.w d4,d3 L5421c: moveq #7,d1 L5421e: lsr.l #1,d0 bne.s L54226 bsr L542be L54226: roxl.l #1,d2 dbra d1,L5421e move.b d2,-(a2) dbra d3,L5421c bra.s L5427c L5423c: moveq #8,d1 moveq #8,d4 bra.s L54214 L54242: moveq #2,d1 bsr.s L542ca cmpi.b #2,d2 blt.s L54264 cmpi.b #3,d2 beq.s L5423c moveq #8,d1 bsr.s L542ca move.w d2,d3 move.w #$c,d1 bra.s L5426e L54264: move.w #9,d1 add.w d2,d1 addq.w #2,d2 move.w d2,d3 L5426e: bsr.s L542ca L54272: subq.l #1,a2 move.b 0(a2,d2.w),(a2) dbra d3,L54272 L5427c: cmpa.l a2,a1 blt L541f8 end_read: movem.l (sp)+,d0-d7/a0-a6 move.l actual_length,d0 rts L542be: move.l -(a0),d0 eor.l d0,d5 move.w #$10,ccr roxr.l #1,d0 rts  L542ca: subq.w #1,d1 clr.w d2 L542ce: lsr.l #1,d0 bne.s L542dc move.l -(a0),d0 eor.l d0,d5 move.w #$10,ccr roxr.l #1,d0 L542dc: roxl.l #1,d2 dbra d1,L542ce rts  actual_length:  DC.l 0 load_addr: DC.l 0 packed_length:  DC.l 0  : P ' move.l sp,a5 ;release memory move.l 4(a5),a5 move.l $c(a5),d0 addi.l #$100,d0 move.l d0,-(sp) move.l a5,-(sp) move.w #0,-(sp) move.w #$4a,-(sp) trap #1 adda.l #$c,sp clr.l -(sp) ;supervisor state move.w #$20,-(sp) trap #1 addq.l #6,sp move.l $84.w,OLD_TRAP1+2 ;store & change TRAP #1 vector move.l #MY_TRAP1,$84.w move.l d0,-(sp) ;user state move.w #$20,-(sp) trap #1 addq.l #6,sp pea DUMMY_VAL(pc) ;load & execute program pea DUMMY_VAL(pc) pea FILE_NAME(pc) move.w #0,-(sp) move.w #$4b,-(sp) trap #1 END_OF_PRG: lea.l 16(sp),sp clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l OLD_TRAP1+2,$84.w move.l d0,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp clr.w -(sp) trap #1 FILE_NAME: dc.b 'delight.rsc',0 even MY_TRAP1: btst #5,(sp) bne.s NO_SUPERVISOR move.l usp,a0 bra.s CHK_FUNCTION NO_SUPERVISOR:  move.l sp,a0 addq.l #6,a0 CHK_FUNCTION:  cmpi.w #$3f,(a0) ; read beq.s FUNC_3F OLD_TRAP1: jmp 0 FUNC_3F: move.l 8(a0),LOAD_ADDR ; Puffer move.l 2(sp),RET_ADDR5+2 ; Returnadresse move.l #READ,2(sp) bra.s OLD_TRAP1 READ:  tst.w 2(sp) bmi RET_ADDR5 ; device handle->do nothing movem.l d0-d7/a0-a6,-(sp) move.l d0,PACKED_LENGTH move.l d0,ACTUAL_LENGTH_2 btst #0,d0 bne END_READ ; bytes read odd->not crunched move.l LOAD_ADDR,a0 ; Puffer move.l a0,d7 btst #0,d7 bne END_READ adda.l d0,a0 move.l -(a0),d0 ; check if crunched file cmpi.l #'JEK!',d0 beq.s UNPACK bra END_READ UNPACK: move.l -(a0),ACTUAL_LENGTH_2 move.w sr,d1 btst #$d,d1 bne.s SUPERVISOR clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp lea.l SYSTEM_STACK,a6 move.l d0,(a6) move.w #1,SV_FLAG SUPERVISOR: move.w $ff8240,OLD_COLOR subq.l #4,PACKED_LENGTH move.l LOAD_ADDR,a0 adda.l PACKED_LENGTH,a0 move.l LOAD_ADDR,a1 move.l -(a0),a2 adda.l a1,a2 move.l -(a0),d5 move.l -(a0),d0 eor.l d0,d5 L541F8: lsr.l #1,d0 bne.s L54200 bsr L542BE L54200: bcs.s L54242 moveq #8,d1 moveq #1,d3 lsr.l #1,d0 bne.s L5420E bsr L542BE L5420E: bcs.s L5426E moveq #3,d1 clr.w d4 L54214: bsr L542CA move.w d2,d3 add.w d4,d3 L5421C: moveq #7,d1 L5421E: lsr.l #1,d0 bne.s L54226 bsr L542BE L54226: roxl.l #1,d2 dbra d1,L5421E move.b d2,-(a2) eori.w #$370,MY_COLOR move.w MY_COLOR,$ff8240 dbra d3,L5421C bra.s L5427C L5423C: moveq #8,d1 moveq #8,d4 bra.s L54214 L54242: moveq #2,d1 bsr.s L542CA cmpi.b #2,d2 blt.s L54264 cmpi.b #3,d2 beq.s L5423C moveq #8,d1 bsr.s L542CA move.w d2,d3 move.w #$c,d1 bra.s L5426E L54264: move.w #9,d1 add.w d2,d1 addq.w #2,d2 move.w d2,d3 L5426E: bsr.s L542CA L54272: subq.l #1,a2 move.b 0(a2,d2.w),(a2) dbra d3,L54272 L5427C: cmpa.l a2,a1 blt L541F8 move.w OLD_COLOR,$ff8240 cmpi.w #1,SV_FLAG bne.s END_READ move.l SYSTEM_STACK,-(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp END_READ: move.w #0,SV_FLAG movem.l (sp)+,d0-d7/a0-a6 move.l ACTUAL_LENGTH_2,d0 RET_ADDR5: jmp 0 L542BE: move.l -(a0),d0 eor.l d0,d5 move.w #$10,ccr roxr.l #1,d0 rts  L542CA: subq.w #1,d1 clr.w d2 L542CE: lsr.l #1,d0 bne.s L542DC move.l -(a0),d0 eor.l d0,d5 move.w #$10,ccr roxr.l #1,d0 L542DC: roxl.l #1,d2 dbra d1,L542CE rts  ACTUAL_LENGTH_2:  dc.l 0 LOAD_ADDR: dc.l 0 SV_FLAG: dc.w 0 SYSTEM_STACK:  dc.l 0 PACKED_LENGTH:  dc.l 0 OLD_COLOR: dc.w 0 MY_COLOR: dc.w $777 DUMMY_VAL: dc.w 0  `֐`  @ `S`  @S}@ `}`  @  @}@ `}S` : S `S` : @S֐ `֐`  @ @ S @`pHz?< NA\#Hz?< NA\AClE #سf?<Hzb?<=NAP.kG~rHSHy `??<?NA ##BBB??<>NAX&:<ֺ<#P?<Hz?<NAXHzq?< NA\?<NAT<yg<YgBgNAHzx?< NA\?<NA``n`4VxAPC^ :aKGLJkfB kC CJg"BёrBJAg|f`C`CE$ +&$$ +ր$$ + $$ IEhAd"HpdЉ"@A$Ip "QCG<(KTN&&&&Q"m$m " pd pd"`B R"@p""""Q`/MNHI&G*&f z .f JEK!g`G&@ fB?< NA\M,8GY z"z$`* fae8rvfaePrBDa6DrfalQQ`8rx`ra^ m graN62< ` 2< BTB6a:SJ Qm Tf /:L?< NA\8L :.Nu DNuSABBf DQNuwE Coded by Axe/Delight. This programs creates an executable program from a packed datafile. Use the JEK-packer to pack the file and then start this program. Filename: Do you want to convert another file (y/N)? A disk-error has occured. Press any key."> `   S  @ ``  ֐ `S` @֠ `֐S`   ֐ @ ``  @ `@` @֠@ `@`  @ @  @@ `S`  }} `}`S @֠} `}` : ֠ Hello Freaks, The original program was written by Sharaz Jek who is a member of Automation. He converted the packer from the Amiga to the ST. I (Axe/Delight) got the Jek-packer from F.O.F. who live in Finland. Unfortunately there was an error in the packing/depacking routines. To pack files easier, I improved the JEK-packer up to version 2.0. This is what I improved: - Offset always set to $1000 - more than one file can be packed by using * and ? For example: data.*, or *.*. - You may select VERIFY. I advise you to do so in any case. It has no disadvantages. If you don't have enough memory, you'll get a message and the file be saved without verify. - The eye-killing flickering is switched off - The file is only saved, if it is smaller than the original - The files are saved under name of the original. - Executable Files are packed as DATA-files and can later be transferred to executable with JEK_EXEC.PRG. All executable files that are packed work correctly. This folder may be freely copied. It is public domain. No files may be removed from the folder. No guarantee is taken that the programs work correctly. Axe of Delight - /{xK9SQP>,5?_W03730'OKЏk`ҩõH" O}|}shsO 5KE@ SఀհԴЬŵջƿ/' ?3(GgPC7[}{}#vmv}|qgghT@??O`@  Ъ/ɲ&-3WcpbT_kkle^no_oQgPC7MdSB0Ѹ7Ш$ $!$* .OG@% %?KXA+5?DJHGTbUHHIPWgx{xqnkkkuA|z|sghijkuQ$';PfS@!"$ ĭ:.  `..  4`ABS_PACKPRG t R`Lܐ AJaZJg<Qg<Cg<Dg`Aa.JgCLA <aJfJaaAaJgAC"9Ba$Jg Ah``hBgNANuAXB Paa< f`>AaJg.CA <`aJfa`aAL"yF 9SfILa8Aa@JgA5CL"9ajJgRAh`X/ ?<NN\NuALCB(9>"&IXSJkdJgB(g,$IRSeR@Jk (fSހT`RRSeJkgSFT` gR#B&NuA(*CLSJk*BJkSQ`FR@SQ`Nu?<NATNu/?< NA\Nu?<NNT#FNu//?< NA\ _Jg`//?< NA\ _B0(<ae<{dJNu(I(?</?<NAXJk BNu~Nu~Nu~Nu(I(?</?<=NAPJk6?/ /??<?NA Jk #>?<>NAXJ@k BNu~Nu~Nu~Nu Incorrect file format File not present..! Load error .! Not enough bytes loaded ..! Disc write protected .! Save file error . ! Disk full error . ! Compress/Decompress/Quit--(C/D/Q) > File to compress > Compressed filename > File to decompress > Decompressed filename >CDAENDCMP1xCMP2CMP3CMPRxCOM,COMPRS\CONB1pCONB2zCONB3CONBUFbCONININFILELLDERM1LDERM2LDERM3LDERRPLDERTXLOADFNEERRTNLFILELNOERROFILENBOTFILEPALSETPPALST1PREPREP1REP2SAVEFSCRNADRSFSTARTSTRINGFSVERM1SVERM2SVERM3 SVERRSVERThWPERR,$  V"   $*-0/.140-2781++,)&!      !"#(.26:?BEIMSY^cgkmptxxy|+{xrlifa\TMMNG@:445.($  ` *O*m - ЭЭ// ?<?<JNA B?< NA\##3@ | #ax | an | ad/< ?< NA\|nذ|g"< < aBJk# | a" | 9aa<1g<2f` | a | aaΰ<1g8<2g<3f`33^`3Nq3Nq3Nq | a | aax< g"< <ng<yf3`D3` f | aZ | aP/< &?< NA\"| ( | a,/<?<NA\?</< (?<NNAPJf/9 ?<HNA\Jk##?</< (?<=NAP3Jkf/9/9 ?9?<?NA JkBa|"9 ҹ# | aa 3@/9?< NA\ | a`/< X?< NA\<g"| Z | N9<gP(|*K̛#a*|,|a*y,Ka*|,|aa`&at*y,Ka*| ,|ava | a | aa< <ng,/9?<INAJf` | aja\BgNA?</< Z?<NAXkNu?<NATNu?<NATNu/?< NA\Nu"@<FBB!<0mD<9oaD0$(<!<0m$<9oa$0ԃ錒<B<fNu$<Nu<Fo <an`<Nu<'Nu y"y$ytBABaVJg RA AfanaaR$ y"y$ $BBBBBBGL?&JINu&Ho&Iz*HRM(fgn`^SM(Hfn& Sl@( SDo|m6<`<UFNMv`l*#ng>aH9&906`af06`g&SCaX06`66` aLv`(BNupa8pNuJAg6BA| lRySCp`NuRyC |p `S@eQNuB@$3@tQNu`*o"mE:$"mE<$E($?<NNTC,"$@2<}BQ?<NNT<g C9C/ ?< NA\B?< NA\M,a3@/:?< NA\*z›&z k -"zJg$ёBJAg<f ``&zf+k +k+k  -"- Ҁ+A -Ҁ+A :Jм$@*@$<0C*Q"z(I$:R(z &L,z N&&Q"o&iBmNE4@ z"z$`G&G&* 3@fae:rvfareXrBDat6DrfaZQQ`Brx`raJ<m<gra862< ` 2< BTB6a SJ QmxNu DNuSABBf DQNuY &PLEASE WAIT - DECOMPACTING.  6/0101 Enter name of source file: Enter name of destination file:Enter offset (default is 1000):Could not allocate enough memory Wait a while - now crunching! 1) Crunch Executable .PRG, .TOS or .TTP file 2) Crunch data file Choose: 1) Flash background screen when unpacking 2) Flash text when unpacking (only in Low Res) 3) No flash Choose: Supress relocation after decrunch (y/N):EWelcome to the L.S.D. Packer v1.2 Written by L.S.D., January 1989. This version created on 18th January 1989 Crunch another file (Y/n):END!8  $  $  (             . fNya;ɧ;ad3Ǯ `h"ݤֲ-HJA3'#  6SdmlS,œŜAb~|TL}K̠Ȝ3;?<874'#2EZ`T>0)ݢ DZ<^zxts]8/Zj[=ɶ߿/>HMME?3#)56-3=9'B\u~bLCBOVL@6% -3+Ī4GPRPH:( '@?*6Sm|N/?[kpndK( '7B>." ǫ:KW^]RD-/.$Fbostz~\DJXfv~}hA*RdfZC( Ȟ -L^km`L4 ̦!>T\WS^rpWNRZac\G4'*:GRTSRMG?8684*!ǣ!6FSSK6.=?>AMg~}j\ZZXXRNNAX`Hz m?< NA\?: D?<>NAX`n 9 g(/: /: ?: ?<?NA ": 䲀f`L/</<A Hh?<?<KNA gjJk#2#N#R?: ?<>NAXA C a 9 gHz ?< NA\a g g#NHz ?< NA\a g#R f# :R`. z ."H $z (k k`Hz ?< NA\` 9 f/: /: ?<?<JNA /<?<HNA\#6/?<HNA\#:fHz ^?< NA\a`H z #Ba A iC tatA iC lahA sC ha\Hz m@?< NA\aa# X# P ^# L faHz ?< NA\A P/?< NA\A ~ (g (g`XA C ^0<OQ`B QUITg quitf*a a`n?: ?<>NA\Hz?< NA\`~?<A Hh?<NA\aa?P,z $kB(fR`r0fRA Ag`$HkDؽk\3@`$ `BAa(JgRA Ag`Sؽk&Q`tE*gvNu*fvNuHz?< NA\aa3@ap`Z zH#F z0#Jk` DJAC"aJ9 g A`ACaHz?< NA\a z : . z : !@3@aNuAP/?< NA\A (gz (jtBABC(CB2<B0 0kR :k& Ak Gk ak2 gk`&0`7`WЂAAfNupNupNu/<?< NA\ fNuB?< NA\#VNu/<?< NA\ fNu/:?< NA\Nu`HB?< NA\,@0<A@?QA $H""|&IIj8*L *@Gp7%3@fNAd $H"l*BgkQ`DQR3@`0<A`1Q/?< NA\L/|N ww` PU"wUPp* * * * * * * *** * * *** * * * *** * * *** * * * * ** ** * * * * * * * * * * * * * * * * * * *** * * * *** * * * * * * * * * * * *** * * * * * * * * * ** ** * * * * * * * * * * * * * * * * *** * * * * * * *** * * - P A C K E R - *** PRE-RELEASE *** 'Absolute' Version 0.3 - Coded by Trojan - Feb '89 Enter name of file to crunch (CR to quit) >Size of original file: $Size of crunched file: $Enter filename for crunched file (CR for original filename or type QUIT) >Can't find that file, please re-enter > NOT ENOUGH MEMORY FOR THAT FILE!!! - PRESS ANY KEY TO QUIT - COULD NOT ALLOCATE MEMORY FOR WORKSPACE!!! Allocated $ bytes from address $ to $ as workspace., loaded file to address $ ERROR WRITING FILE!!!, re-enter name: ERROR LOADING FILE!!! INSUFFICIENT WORKSPACE - UNABLE TO CONTINUE. * C R U N C H I N G * , saving $ bytes, GAINING $Load Executable or Dump file (E, D or CR to quit)> File is not executable!! Where should the file be reloaded to ? $ Enter address to start execution at (CR for start) $ Invalid start address, please re-enter $ E> JF.Db *80&Db >= !,1P='A?=0<$     "+&( ' $.!+ #+()$!+116%'  $  "!%#(/1/4?A)$ "35I]O_CG<.(4   */7::@.1%."!  &#/#$#-.>.0/02!##!  ,1+(/)%0"(  !.*%"  !(1$  $%,++""  '*'3)%1& !54B(4(8-    "'"'@/+3*-*0'%!"  ",1,-)!&.(,-*#!)*/.($        $)&-+!"  %''#!   &'&#&+"'-$  .  t`..  4`ICE_2_4 PRG -ICE_DISKS ICE_UNP2S  c ICE_UNPAS  READ_ME TXT "r`R`Pack-Ice: The best packer on the ST. It is Public Domain. You may use it for packing anything you like. I don't want any donations. Greetings go to all people who use this packer. *O*m - ЭЭ// Bg?<JNA 33aa zaaa Ha`& < a(3~R@gNu <aNu>??<LNAHABBBP (pf|A"0<NBp0:4LNuRrxafx3NuAaJygA`an@0`(A'aa 3f"Aaa|Aa` 3fah` 1gt gn 2fB9JygAja@l|ngpy` A1aXa03l3| gZ ygP nf3`,l3``8ByJygAqa|g`Aaaΰ<yf3v3Jyg?<NATI4A:BgHT?<GNAPJf|\*.*BaTI NAXJNu?<NATNu?<NATNu/< NMXNu/?< NA\NuHz ?<&NN\Nu 8 ##NuHA aa :H@B@H@0 a0 a0 ap:a  @0aH@@0aLNuC :tr€| oA'A0QA =aG HS?< NA\t+gZTxvSBkp#0k o0 W o oph؀XCQ <(e(|dx# Nu/ : # # 3 NueH :ѹ " :$:adaJ@gRHABAHAzVgD3 <99A H@A (aagaf3L#`LNu A ua :":a2da* H@B@H@ 00a.H@a(A DaNuH@HAJ@f JAfH@HANuH@HA`H??<NAXLNua( <43#a?:`a.p0Nu <L|PIz@DADBDCDQ3QPIQ3NuA Pa`Hy?<HNA\Jnp#Nu :3Jk/?<INA\JNuByB <#a z :&"zE#.<|8#zD@DADBDCQQHQLSfpw#QLN[NurQNua*d"ra$dCv !a"H@@Vҩ%QnNuf%Nurf%AQNuCtaTxr1 Hka1 Ag"CvtaTr1 HaBq jD`rptadpt?aBC@!!Q`R   801 Enter name of source file: Enter name of destination file: Could not allocate enough memory Working: P> Crunch another file (Y/n): Relocate program after depacking (Y/n): Additional picture compression (N/y): Please enter the offset (Default: $0): $t 1) Crunch data file (Default) 2) Crunch executable file 3) Set Parameters Please select: No mem! Verify: OK! Error! [cancelled] Data cannot be packed! [cancelled]DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCRemaining: 99%DDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCC-~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCTime:  Rate: % [saving] was pressed. File is skipped. Larger than original! [cancelled]Ef ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ | Version 2.31 <| { P A C K - I C E "} | K| { This packer was written by Axe of Superior. } | First version: 14.02.1990 Final changes: 19.02.1991 | { K} ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ [0][| What do you wish to pack? | - Data files | - Executable files | - Set Parameters ][ DATA | EXEC | SETUP ][0][| Relocate after decrunch? | ][ YES | NO ][2][| Do you wish to pack | another file?|][ YES | NO | ??? ][0][| Do you wish to use an | additional algorithm | for picture compression? |][ NO | YES ]*\L,,R*  :0x \0v:22   T*N&v2 n                    ;*- Unpackroutine von ICE-PACK ; Eingabe: a0 = Adresse gepackter Daten ice_decrunch_3: link a3,#-120 movem.l d0-a6,-(sp) move.l a0,a1 move.l a0,a4 ; a4 = Anfang entpackte Daten move.l a0,a6 ; a6 = Ende entpackte Daten bsr.s .getinfo cmpi.l #'ICE!',d0 ; Kennung gefunden? bne .not_packed bsr.s .getinfo ; gepackte Lnge holen moveq #119,d1 ; 120 Bytes vor gepackten Daten .save: move.b -(a1),-(a3) ; in sicheren Bereich sichern dbf d1,.save move.l a1,a2 ; Anfang der gepackten Daten lea.l -8(a1,d0.l),a5 ; a5 = Ende der gepackten Daten .move move.b (a0)+,(a1)+ subq.l #1,d0 bne.s .move move.l a2,a0 bsr.s .getinfo ; ungepackte Lnge holen (original) move.l d0,(sp) ; Originallnge: spter nach d0 adda.l d0,a6 ; a6 = Ende entpackte Daten move.l a6,a3 ; merken fr Picture decrunch move.b -(a5),d7 ; erstes Informationsbyte bsr.s .normal_bytes bsr.s .get_1_bit ;; Picture decrunch! bcc.s .no_picture ;; These marked lines may be move.w #$0f9f,d7 ;; removed in your own sources .ice_00: moveq #3,d6 ;; if you do not use the .ice_01: move.w -(a3),d4 ;; additional algorithm. moveq #3,d5 ;; .ice_02: add.w d4,d4 ;; addx.w d0,d0 ;; add.w d4,d4 ;; addx.w d1,d1 ;; add.w d4,d4 ;; addx.w d2,d2 ;; add.w d4,d4 ;; addx.w d3,d3 ;; dbra d5,.ice_02 ;; dbra d6,.ice_01 ;; movem.w d0-d3,(a3) ;; dbra d7,.ice_00 ;; .no_picture movem.l (sp),d0-a3 ; hole ntige Register moveq #119,d0 ; um berschriebenen Bereich .rest move.b -(a3),-(a4) ; wieder herzustellen dbf d0,.rest .not_packed: movem.l (sp)+,d0-a6 unlk a3 rts .getinfo: moveq #3,d1 ; ein Langwort vom Anfang .getbytes: lsl.l #8,d0 ; der Daten lesen move.b (a0)+,d0 dbf d1,.getbytes rts .normal_bytes: bsr.s .get_1_bit bcc.s .test_if_end ; Bit %0: keine Daten moveq.l #0,d1 ; falls zu copy_direkt bsr.s .get_1_bit bcc.s .copy_direkt ; Bitfolge: %10: 1 Byte direkt kop. lea.l .direkt_tab+20(pc),a1 moveq.l #4,d3 .nextgb: move.l -(a1),d0 ; d0.w Bytes lesen bsr.s .get_d0_bits swap.w d0 cmp.w d0,d1 ; alle gelesenen Bits gesetzt? dbne d3,.nextgb ; ja: dann weiter Bits lesen .no_more: add.l 20(a1),d1 ; Anzahl der zu bertragenen Bytes .copy_direkt: move.b -(a5),-(a6) ; Daten direkt kopieren dbf d1,.copy_direkt ; noch ein Byte .test_if_end: cmpa.l a4,a6 ; Fertig? bgt.s .strings ; Weiter wenn Ende nicht erreicht rts ;* Unterroutinen: wegen Optimierung nicht am Schlu .get_1_bit:add.b d7,d7 ; hole ein bit bne.s .bitfound ; quellfeld leer move.b -(a5),d7 ; hole Informationsbyte addx.b d7,d7 .bitfound: rts .get_d0_bits: moveq.l #0,d1 ; ergebnisfeld vorbereiten .hole_bit_loop: add.b d7,d7 ; hole ein bit bne.s .on_d0 ; in d7 steht noch Information move.b -(a5),d7 ; hole Informationsbyte addx.b d7,d7 .on_d0: addx.w d1,d1 ; und bernimm es dbf d0,.hole_bit_loop ; bis alle Bits geholt wurden rts ;*$ Ende der Unterroutinen .strings: lea.l .length_tab(pc),a1 ; a1 = Zeiger auf Tabelle moveq.l #3,d2 ; d2 = Zeiger in Tabelle .get_length_bit: bsr.s .get_1_bit dbcc d2,.get_length_bit ; nchstes Bit holen .no_length_bit: moveq.l #0,d4 ; d4 = berschu-Lnge moveq.l #0,d1 move.b 1(a1,d2.w),d0 ; d2: zw. -1 und 3; d3+1: Bits lesen ext.w d0 ; als Wort behandeln bmi.s .no_ber ; kein berschu ntig .get_ber: bsr.s .get_d0_bits .no_ber: move.b 6(a1,d2.w),d4 ; Standard-Lnge zu berschu add. add.w d1,d4 ; d4 = String-Lnge-2 beq.s .get_offset_2 ; Lnge = 2: Spezielle Offset-Routine lea.l .more_offset(pc),a1 ; a1 = Zeiger auf Tabelle moveq.l #1,d2 .getoffs: bsr.s .get_1_bit dbcc d2,.getoffs moveq.l #0,d1 ; Offset-berschu move.b 1(a1,d2.w),d0 ; request d0 Bits ext.w d0 ; als Wort bsr.s .get_d0_bits add.w d2,d2 ; ab jetzt: Pointer auf Worte add.w 6(a1,d2.w),d1 ; Standard-Offset zu berschu add. bpl.s .depack_bytes ; keine gleiche Bytes: String kop. sub.w d4,d1 ; gleiche Bytes bra.s .depack_bytes .get_offset_2: moveq.l #0,d1 ; berschu-Offset auf 0 setzen moveq.l #5,d0 ; standard: 6 Bits holen moveq.l #-1,d2 ; Standard-Offset auf -1 bsr.s .get_1_bit bcc.s .less_40 ; Bit = %0 moveq.l #8,d0 ; quenty fourty: 9 Bits holen moveq.l #$3f,d2 ; Standard-Offset: $3f .less_40: bsr.s .get_d0_bits add.w d2,d1 ; Standard-Offset + ber-Offset .depack_bytes: ; d1 = Offset, d4 = Anzahl Bytes lea.l 2(a6,d4.w),a1 ; Hier stehen die Originaldaten adda.w d1,a1 ; Dazu der Offset move.b -(a1),-(a6) ; ein Byte auf jeden Fall kopieren .dep_b: move.b -(a1),-(a6) ; mehr Bytes kopieren dbf d4,.dep_b ; und noch ein Mal bra .normal_bytes ; Jetzt kommen wieder normale Bytes .direkt_tab: dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001 ; Anzahl 1-Bits dc.l 270-1, 15-1, 8-1, 5-1, 2-1 ; Anz. Bytes .length_tab: dc.b 9,1,0,-1,-1 ; Bits lesen dc.b 8,4,2,1,0 ; Standard-Lnge - 2 (!!!) .more_offset: dc.b 11, 4, 7, 0 ; Bits lesen dc.w $11f, -1, $1f ; Standard Offset ende_ice_decrunch_3: ;*3 Ende der Unpackroutine  ,]7J{M,߹#>AI`^xϪӶƄ6JF/@lD ѰЅ#D`|J$0Jb6*⒁">Me^%2^N9"5  殡*74OC,%5-_ub=<)!) Ʃ 90.Ӻ G? $4-5ei( .g6%93./=HV* '"M\ *19)"''& &E8++-##$(ȿ  *-:E7. ׾Ͼ  KK6# 궭!M:! Ԥ65(%&+# *ĤRg]Y]]VN8ж˝3`b`bnlk`; ȳŒKqnflroqY- ū׼%RaW ifnd col col equ 0 endc ;*- Unpackroutine von ICE-PACK ; Eingabe: a0 = Adresse gepackter Daten ice_decrunch_2: link a3,#-120 movem.l d0-a6,-(sp) lea 120(a0),a4 ; a4 = Anfang entpackte Daten move.l a4,a6 ; a6 = Ende entpackte Daten bsr.s .getinfo cmpi.l #'ICE!',d0 ; Kennung gefunden? bne .not_packed bsr.s .getinfo ; gepackte Lnge holen lea.l -8(a0,d0.l),a5 ; a5 = Ende der gepackten Daten bsr.s .getinfo ; ungepackte Lnge holen (original) move.l d0,(sp) ; Originallnge: spter nach d0 adda.l d0,a6 ; a6 = Ende entpackte Daten move.l a6,a1 moveq #119,d0 ; 120 Bytes hinter entpackten Daten .save: move.b -(a1),-(a3) ; in sicheren Bereich sichern dbf d0,.save move.l a6,a3 ; merken fr Picture decrunch move.b -(a5),d7 ; erstes Informationsbyte bsr.s .normal_bytes move.l a3,a5 ; fr 120 Bytes restore bsr.s .get_1_bit ;; Picture decrunch! bcc.s .no_picture ;; These marked lines may be move.w #$0f9f,d7 ;; removed in your own sources .ice_00: moveq #3,d6 ;; if you do not use the .ice_01: move.w -(a3),d4 ;; additional algorithm. moveq #3,d5 ;; .ice_02: add.w d4,d4 ;; addx.w d0,d0 ;; add.w d4,d4 ;; addx.w d1,d1 ;; add.w d4,d4 ;; addx.w d2,d2 ;; add.w d4,d4 ;; addx.w d3,d3 ;; dbra d5,.ice_02 ;; dbra d6,.ice_01 ;; movem.w d0-d3,(a3) ;; dbra d7,.ice_00 ;; .no_picture movem.l (sp),d0-a3 ; hole ntige Register .move move.b (a4)+,(a0)+ subq.l #1,d0 bne.s .move moveq #119,d0 ; um berschriebenen Bereich .rest move.b -(a3),-(a5) ; wieder herzustellen dbf d0,.rest .not_packed: movem.l (sp)+,d0-a6 unlk a3 rts .getinfo: moveq #3,d1 ; ein Langwort vom Anfang .getbytes: lsl.l #8,d0 ; der Daten lesen move.b (a0)+,d0 dbf d1,.getbytes rts .normal_bytes: bsr.s .get_1_bit bcc.s .test_if_end ; Bit %0: keine Daten moveq.l #0,d1 ; falls zu copy_direkt bsr.s .get_1_bit bcc.s .copy_direkt ; Bitfolge: %10: 1 Byte direkt kop. lea.l .direkt_tab+20(pc),a1q moveq.l #4,d3 .nextgb: move.l -(a1),d0 ; d0.w Bytes lesen bsr.s .get_d0_bits swap.w d0 cmp.w d0,d1 ; alle gelesenen Bits gesetzt? dbne d3,.nextgb ; ja: dann weiter Bits lesen .no_more: add.l 20(a1),d1 ; Anzahl der zu bertragenen Bytes .copy_direkt: move.b -(a5),-(a6) ; Daten direkt kopieren dbf d1,.copy_direkt ; noch ein Byte .test_if_end: cmpa.l a4,a6 ; Fertig? bgt.s .strings ; Weiter wenn Ende nicht erreicht rts ;* Unterroutinen: wegen Optimierung nicht am Schlu .get_1_bit: add.b d7,d7 ; hole ein bit bne.s .bitfound ; quellfeld leer move.b -(a5),d7 ; hole Informationsbyte addx.b d7,d7 .bitfound: rts .get_d0_bits: moveq.l #0,d1 ; ergebnisfeld vorbereiten .hole_bit_loop: add.b d7,d7 ; hole ein bit bne.s .on_d0 ; in d7 steht noch Information move.b -(a5),d7 ; hole Informationsbyte addx.b d7,d7 .on_d0: addx.w d1,d1 ; und bernimm es dbf d0,.hole_bit_loop ; bis alle Bits geholt wurden rts ;*$ Ende der Unterroutinen .strings: lea.l .length_tab(pc),a1 ; a1 = Zeiger auf Tabelle moveq.l #3,d2 ; d2 = Zeiger in Tabelle .get_length_bit: bsr.s .get_1_bit dbcc d2,.get_length_bit ; nchstes Bit holen .no_length_bit: moveq.l #0,d4 ; d4 = berschu-Lnge moveq.l #0,d1 move.b 1(a1,d2.w),d0 ; d2: zw. -1 und 3; d3+1: Bits lesen ext.w d0 ; als Wort behandeln bmi.s .no_ber ; kein berschu ntig .get_ber: bsr.s .get_d0_bits .no_ber: move.b 6(a1,d2.w),d4 ; Standard-Lnge zu berschu add. add.w d1,d4 ; d4 = String-Lnge-2 beq.s .get_offset_2 ; Lnge = 2: Spezielle Offset-Routine lea.l .more_offset(pc),a1 ; a1 = Zeiger auf Tabelle moveq.l #1,d2 .getoffs: bsr.s .get_1_bit dbcc d2,.getoffs moveq.l #0,d1 ; Offset-berschu move.b 1(a1,d2.w),d0 ; request d0 Bits ext.w d0 ; als Wort bsr.s .get_d0_bits add.w d2,d2 ; ab jetzt: Pointer auf Worte add.w 6(a1,d2.w),d1 ; Standard-Offset zu berschu add. bpl.s .depack_bytes ; keine gleiche Bytes: String kop. sub.w d4,d1 ; gleiche Bytes bra.s .depack_bytes .get_offset_2: moveq.l #0,d1 ; berschu-Offset auf 0 setzen moveq.l #5,d0 ; standard: 6 Bits holen moveq.l #-1,d2 ; Standard-Offset auf -1 bsr.s .get_1_bit bcc.s .less_40 ; Bit = %0 moveq.l #8,d0 ; quenty fourty: 9 Bits holen moveq.l #$3f,d2 ; Standard-Offset: $3f .less_40: bsr.s .get_d0_bits add.w d2,d1 ; Standard-Offset + ber-Offset .depack_bytes: ; d1 = Offset, d4 = Anzahl Bytes lea.l 2(a6,d4.w),a1 ; Hier stehen die Originaldaten adda.w d1,a1 ; Dazu der Offset move.b -(a1),-(a6) ; ein Byte auf jeden Fall kopieren .dep_b: move.b -(a1),-(a6) ; mehr Bytes kopieren dbf d4,.dep_b ; und noch ein Mal eor.w #col,$f8240.w eor.w #col,$f8240.w bra .normal_bytes ; Jetzt kommen wieder normale Bytes .direkt_tab: dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001 ; Anzahl 1-Bits dc.l 270-1, 15-1, 8-1, 5-1, 2-1 ; Anz. Bytes .length_tab: dc.b 9,1,0,-1,-1 ; Bits lesen dc.b 8,4,2,1,0 ; Standard-Lnge - 2 (!!!) .more_offset: dc.b 11, 4, 7, 0 ; Bits lesen dc.w $11f, -1, $1f ; Standard Offset ende_ice_decrunch_2: ;*3 Ende der Unpackroutine                                     ;*- Unpackroutine von ICE-PACK ; Eingabe: a0 = Adresse gepackter Daten ; Ausgabe: a1 = Adresse entpackter Daten ice_decrunch: movem.l d0-a6,-(sp) bsr.s getinfo ; ein Langwort holen cmpi.l #'ICE!',d0 ; Kennung gefunden? bne not_packed ; nein: nicht gepackt bsr.s getinfo ; gepackte Lnge holen lea.l -8(a0,d0.l),a5 ; a5 = Ende der gepackten Daten bsr.s getinfo ; ungepackte Lnge holen (original) move.l d0,(sp) ; Originallnge: spter nach d0 move.l a1,a4 ; a4 = Zielpuffer move.l a1,a6 adda.l d0,a6 ; a6 = Ende entpackte Daten move.l a6,a3 ; merken fr Picture decrunch move.b -(a5),d7 ; erstes Informationsbyte bsr normal_bytes bsr get_1_bit ;; Picture decrunch! bcc.s not_packed ;; These marked lines may be move.w #$0f9f,d7 ;; removed in your own sources ice_00: moveq #3,d6 ;; if you do not use the ice_01: move.w -(a3),d4 ;; additional algorithm. moveq #3,d5 ;; ice_02: add.w d4,d4 ;; addx.w d0,d0 ;; add.w d4,d4 ;; addx.w d1,d1 ;; add.w d4,d4 ;; addx.w d2,d2 ;; add.w d4,d4 ;; addx.w d3,d3 ;; dbra d5,ice_02 ;; dbra d6,ice_01 ;; movem.w d0-d3,(a3) ;; dbra d7,ice_00 ;; not_packed: movem.l (sp)+,d0-a6 rts getinfo: moveq #3,d1 ; ein Langwort vom Anfang getbytes: lsl.l #8,d0 ; der Daten lesen move.b (a0)+,d0 dbf d1,getbytes rts normal_bytes: bsr.s get_1_bit bcc.s test_if_end ; Bit %0: keine Daten moveq.l #0,d1 ; falls zu copy_direkt bsr.s get_1_bit bcc.s copy_direkt ; Bitfolge: %10: 1 Byte direkt kop. lea.l direkt_tab+20(pc),a1 moveq.l #4,d3 nextgb: move.l -(a1),d0 ; d0.w Bytes lesen bsr.s get_d0_bits swap.w d0 cmp.w d0,d1 ; alle gelesenen Bits gesetzt? dbne d3,nextgb ; ja: dann weiter Bits lesen no_more: add.l 20(a1),d1 ; Anzahl der zu bertragenen Bytes copy_direkt: move.b -(a5),-(a6) ; Daten direkt kopieren dbf d1,copy_direkt ; noch ein Byte test_if_end: cmpa.l a4,a6 ; Fertig? bgt.s strings ; Weiter wenn Ende nicht erreicht rts ;* Unterroutinen: wegen Optimierung nicht am Schlu get_1_bit:add.b d7,d7 ; hole ein bit bne.s bitfound ; quellfeld leer move.b -(a5),d7 ; hole Informationsbyte addx.b d7,d7 bitfound: rts get_d0_bits: moveq.l #0,d1 ; ergebnisfeld vorbereiten hole_bit_loop: add.b d7,d7 ; hole ein bit bne.s on_d0 ; in d7 steht noch Information move.b -(a5),d7 ; hole Informationsbyte addx.b d7,d7 on_d0: addx.w d1,d1 ; und bernimm es dbf d0,hole_bit_loop ; bis alle Bits geholt wurden rts ;*$ Ende der Unterroutinen strings: lea.l length_tab(pc),a1 ; a1 = Zeiger auf Tabelle moveq.l #3,d2 ; d2 = Zeiger in Tabelle get_length_bit: bsr.s get_1_bit dbcc d2,get_length_bit ; nchstes Bit holen no_length_bit: moveq.l #0,d4 ; d4 = berschu-Lnge moveq.l #0,d1 move.b 1(a1,d2.w),d0 ; d2: zw. -1 und 3; d3+1: Bits lesen ext.w d0 ; als Wort behandeln bmi.s no_ber ; kein berschu ntig get_ber: bsr.s get_d0_bits no_ber: move.b 6(a1,d2.w),d4 ; Standard-Lnge zu berschu add. add.w d1,d4 ; d4 = String-Lnge-2 beq.s get_offset_2 ; Lnge = 2: Spezielle Offset-Routine lea.l more_offset(pc),a1 ; a1 = Zeiger auf Tabelle moveq.l #1,d2 getoffs: bsr.s get_1_bit dbcc d2,getoffs moveq.l #0,d1 ; Offset-berschu move.b 1(a1,d2.w),d0 ; request d0 Bits ext.w d0 ; als Wort bsr.s get_d0_bits add.w d2,d2 ; ab jetzt: Pointer auf Worte add.w 6(a1,d2.w),d1 ; Standard-Offset zu berschu add. bpl.s depack_bytes ; keine gleiche Bytes: String kop. sub.w d4,d1 ; gleiche Bytes bra.s depack_bytes get_offset_2: moveq.l #0,d1 ; berschu-Offset auf 0 setzen moveq.l #5,d0 ; standard: 6 Bits holen moveq.l #-1,d2 ; Standard-Offset auf -1 bsr.s get_1_bit bcc.s less_40 ; Bit = %0 moveq.l #8,d0 ; quenty fourty: 9 Bits holen moveq.l #$3f,d2 ; Standard-Offset: $3f less_40: bsr.s get_d0_bits add.w d2,d1 ; Standard-Offset + ber-Offset depack_bytes: ; d1 = Offset, d4 = Anzahl Bytes lea.l 2(a6,d4.w),a1 ; Hier stehen die Originaldaten adda.w d1,a1 ; Dazu der Offset move.b -(a1),-(a6) ; ein Byte auf jeden Fall kopieren dep_b: move.b -(a1),-(a6) ; mehr Bytes kopieren dbf d4,dep_b ; und noch ein Mal bra normal_bytes ; Jetzt kommen wieder normale Bytes direkt_tab: dc.l $7fff000e,$00ff0007,$00070002,$00030001,$00030001 ; Anzahl 1-Bits dc.l 270-1, 15-1, 8-1, 5-1, 2-1 ; Anz. Bytes length_tab: dc.b 9,1,0,-1,-1 ; Bits lesen dc.b 8,4,2,1,0 ; Standard-Lnge - 2 (!!!) more_offset: dc.b 11, 4, 7, 0 ; Bits lesen dc.w $11f, -1, $1f ; Standard Offset ;*3 Ende der Unpackroutine  .5/(/0)  1.-)83" $12$!361,,*! (;;*,.+0:;( (,,&5A9! (.' +AA0"%3"6H;-&')"7I?$,)!0:CBstart bra strt col equ $770 text dc.b 27,'E',27,'f' ; Clear screen, kill cursor dc.b ' The BBC sadly present...',10,13,10,13 dc.b ' Merchant Colony',10,13,10,13 dc.b ' Packed by us all',10,13,10,13 dc.b ' Bang a button to play',10,13,0 file_name: dc.b 'merchant.prg',0 ; nachgeladenes Programm (pexec) even opt o+,ow-,a+ ; Optimierung einschalten strt: movea.l #stackend,sp move.l sp,d0 subi.l #start-$120,d0 move.l d0,-(sp) pea start-$100(pc) clr.w -(sp) move.w #$4a,-(sp) trap #1 adda.w #$c,sp pea text(pc) move.w #9,-(a7) trap #1 addq.l #6,a7 move.w #7,-(a7) trap #1 addq.l #2,a7 bsr.s super move.l $84.w,old_trap1+2 ;store & change TRAP #1 vector move.l #my_trap1,$84.w bsr.s user pea null(pc) pea null(pc) pea file_name(pc) move.w #0,-(sp) move.w #$4b,-(sp) trap #1 lea.l 16(sp),sp bsr.s super move.l old_trap1+2(pc),$84.w bsr.s user clr.w -(sp) trap #1 null: dc.l 0,0 super: clr.lS -(sp) ;supervisor state move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,d7 rts user: move.l d7,-(sp) ;user state move.w #$20,-(sp) trap #1 addq.l #6,sp rts my_trap1: movea.l sp,a0 btst #$d,(sp) bne.s supervisor move.l usp,a0 subq.l #6,a0 supervisor: addq.l #6,a0 cmpi.w #$3f,(a0) ; read beq.s func_3f old_trap1: jmp 0.l func_3f: move.l 8(a0),puffer move.l 2(sp),ret_addr5+2 ; Returnadresse move.l #read,2(sp) bra.s old_trap1 read: tst.w 2(sp) bmi.s ret_addr5 ; device handle->do nothing movem.l d1-d7/a0-a6,-(sp) movea.l puffer(pc),a0 ; Puffer bsr.s ice_decrunch_2 movem.l (sp)+,d1-d7/a0-a6 ret_addr5: jmp 0.l ;*- Unpackroutine von ICE-PACK include ice_unp2.s ;*3 Ende der Unpackroutine section bss puffer: ds.l 1 ds.b 500 stackend: ds.b 20         start bra strt col equ $770 text dc.b 27,'E',27,'f' ; Clear screen, kill cursor dc.b 'Battle Bound +',10,13,10,13 dc.b ' ',0 file_name: dc.b 'wheels1.prg',0 ; nachgeladenes Programm (pexec) even opt o+,ow-,a+ ; Optimierung einschalten strt: movea.l #stackend,sp move.l sp,d0 subi.l #start-$120,d0 move.l d0,-(sp) pea start-$100(pc) clr.w -(sp) move.w #$4a,-(sp) trap #1 adda.w #$c,sp pea text(pc) move.w #9,-(a7) trap #1 addq.l #6,a7 move.w #7,-(a7) trap #1 addq.l #2,a7 bsr.s super move.l $84.w,old_trap1+2 ;store & change TRAP #1 vector move.l #my_trap1,$84.w bsr.s user pea null(pc) pea null(pc) pea file_name(pc) move.w #0,-(sp) move.w #$4b,-(sp) trap #1 lea.l 16(sp),sp bsr.s super move.l old_trap1+2(pc),$84.w bsr.s user clr.w -(sp) trap #1 null: dc.l 0,0 super: clr.l -(sp) ;supervisor state move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,d7 rts user: move.l d7,-(sp) ;user state move.w #$20,-(sp) trap #1 addq.l #6,sp rts my_trap1: movea.l sp,a0 btst #$d,(sp) bne.s supervisor move.l usp,a0 subq.l #6,a0 supervisor: addq.l #6,a0 cmpi.w #$3f,(a0) ; read beq.s func_3f old_trap1: jmp 0.l func_3f: move.l 8(a0),puffer move.l 2(sp),ret_addr5+2 ; Returnadresse move.l #read,2(sp) bra.s old_trap1 read: tst.w 2(sp) bmi.s ret_addr5 ; device handle->do nothing movem.l d1-d7/a0-a6,-(sp) movea.l puffer(pc),a0 ; Puffer bsr.s ice_decrunch_2 movem.l (sp)+,d1-d7/a0-a6 ret_addr5: jmp 0.l ;*- Unpackroutine von ICE-PACK include b:\pack_ice.231\ice_unp2.s ;*3 Ende der Unpackroutine section bss puffer: ds.l 1 ds.b 500 stackend: ds.b 20          .  F`..  4`QPAC22 S IOQPAC32 S N-vQUNPACK S SK QPAC32 DOC VN-QPACK3 TTP ZPj" THE POMPEY PIRATES PACKER V1.9 coded by J.P.M 1990 Written entirely in 68000 m/code. There is no other language to use is there!! GEM is a registered trademark of DIGITAL RESEARCH and they can stick it. I've never seen such sloppy code and so many errors in an OPERATING SYSTEM!!! -/ Here follows the instructions on how to use the packer. The options are detailed from top left to bottom right. Hardened hackers may like to skip this section (come back later when everything goes wrong). - TYPE - The 'TYPE' window has two buttons , EXEC / DATA. These 2 buttons are only used when FILE packing. If you want to pack an EXEC-utable file then SELECT EXEC. Executable files include PRG , TOS and TTP.  The DATA button is for anything else that you would care to pack. Usually this is files that are required by the program and will be intercepted at runtime. They could also be used via a write through buffer. Whichever , a file , once packed as data CANNOT be directly used by a program , it must at some point in the program be DE-PACKED. Usually this de-packing will occur immediately after loading. WARNING :- Both BATCH and DISC processes ignore this option. :- Any offset typed in WILL be used regardless of file type.  Immediately above the window is a special TAG box which allows you to define the EXECutable header type. Click on the TAG to define which headers you would like on your executable files. The options are:- Normal - No printed header, smallest header size. Printed - Display Version Number before depacking. Utility - Depacks and allows saving of original file.(NOT INSTALLED) - FILE - This WINDOW is used to inform the program of what you require doing with the file after packing. Two options are available.  KILL - The original file will be overwritten by the new packed file. KEEP - The old file will be retained and a completely new file will be created after packing. The new file will retain the old NAME but will have the extension POP added to it. WARNING :- Both BATCH and DISC processes ignore this option. - COMPRESSION - This WINDOW controls the amount of compression gained from packing. As a result , it also governs the SPEED at which the packer works. IE :- At 32k the packer is at MAXIMUM and will consequently take longer to complete the packing of the file. Any other buttons selected will have a similar effect upon both SIZE and TIME taken to pack the file. Both of which will be reduced! WARNING :- This button MUST always be set by you. :- All processes refer to this button. - DISPLAY - This is where all the ACTION takes place and , items within this window are SELECTABLE. Starting at the right handside and working from top to bottom the display consists of :- *** 0 - Current POSITION within the file. *** 0 - Current PACKED size of the file. 00% - Percentage of compression gained. _ - OLD file name. _ - New file name (if any). 00:00:00 - Time taken. This is accumulative during BATCH and DISC processes. 0 - OLD file SIZE. 0 - NEW file SIZE. *** SAVE - Available only after DE-PACKING. *** = SELECTABLE. These displays are selectable. In the case of CURRENT position and CURRENT size , both have a significant bearing on COMPRESSION times. As this is written entirely in m/code , you can bet that the reason for the significant delay is GEM. You can disable BOTH or EITHER of the displays by SELECTING them prior to packing. The packer has it's own clock routines , so h/disc owners can stop panicking. - DEVICE - Obvious really this option. Anyway , for anyone who is paralysed down the righthand side of their brain (most AUTOMASHUN members). Select the desired DRIVE which contains the file(s) you require packing. You can , if your FILE or BATCH packing , change to another device from the file selector. The 'F' button (a real pig to program for that button without actually having a h/disc myself) is for h/disc owners. Total times for compression during BATCH and DISC packing can be greatly reduced by having files on the h/disc and same applies to the 'D' button (normally a RAM disc). You can obtain a readout of FREE SPACE on the current drive by clicking on the '?' button. During DISC and BATCH packing a readout of current DISC space will be given throughout the process. The maximum free DISC space allowable inside the window is 99 meg. PROCESSES This is the complicated bit within this program. During each process the packer can be interrupted by pressing ALT-HELP. Whereupon you return to the main screen. The packer will not packing anything twice!! It will also IGNORE anything with an extension of POP. ie:- DATA.POP will be ignored by the packer , whichever process it is currently doing. - FILE - This option allows you to pack single files. ALL buttons must be SELECTED before clicking on the pack button. This option packs files based on the BUTTONS currently SELECTED. Pay particular attention to the RED WINDOWS. WARNING - If it's available an OFFSET will be used!!! So make sure it's zero'd if you do not require it. ESC will totally zero the offset. - DISC - This process couldn't be any simpler (it's the 1st thing the PIRATES asked for when i contacted them in 1989). Select the DEVICE which contains the disc to pack. Make sure the COMPRESSION ratio has been set. If you do not require a running display of CURRENT position/size then SELECT either or both of the displays. Make sure the disc is in the DRIVE and write protect is off. SELECT the DISC option in the process window. Finally click on PACK. The process will continue till all files are packed. If there are files on the disc that do not require packing you can do one of two things , delete them or RENAME them. The packer will ignore anything that has the extension of POP.  WARNING - OFFSET is ignored. RED WINDOWS are ignored. The packer will go into folders to a depth of one , but will ignore any nested folders. - B1 - A group of files , selected via the file-selector will be packed in series. The same features apply as with DISC packing. Make sure your buttons are selected before clicking on PACK. Once PACK has been clicked on you will enter a file selector where you should click on all the files you require packing and finally click on CANCEL to end selection of files. After clicking on CANCEL the packer will pack all the files selected one after the other. Files already packed are ignored , files with an extension of POP are also ignored. If an OFFSET is available it will be used on all files.  WARNING - OFFSET is used on all files except PROGRAMS. RED WINDOWS are ignored. The packer will go anywhere for the files , since the complete path is saved. - B2 - All files with the same extension on the selected DRIVE will be packed. You select the file extension through the file selector, click on any one file which has the the desired extension. After this operation all files with the same extension are also packed. The program will not accept files that don't exist and will not accept *.* as input. WARNING - OFFSET is used on all files except PROGRAMS. RED WINDOWS are ignored. Only the current directory is supported at this time. - OFFSET - This feature allows part of a file (at the beginning) to be left unpacked. Packing commences immediately after the specified OFFSET. Both FILE and BATCH will use an OFFSET if it's available. The DISC process will ignore it. On return to the main screen from anywhere , the OFFSET will be zero'd. This was done because i personally kept forgetting to zero the damned thing before packing. So i assumed that you also would suffer from the same affliction!! - DEPACK - This will allow you unpack a previously packed file. After a successful de-pack you will return to the main screen. Only after depacking will the SAVE button become active and allow you to save the unpacked file. NOTE - Any file type can be depacked. So long as it was done with this version of the packer. - SAVE - Enabled after successful depacking of a file (DATA or EXEC). -*  Both the functions below were added as an after thought , but do add usefulness to the packer and eliminated the need to leave the packer to carry out the functions. - FILE (Black box) - Selecting this will allow RENaming or DELeting of files. - FORMAT - Better than nothing. It will format a DS 80 tracks 10 sector disc. No options are available. It's also, for some strange reason, SLOW. - STATS - Clicking on this button reveals the details of the files that have just been packed. It reveals how many files COLLIDED and how many were PACKED, it also lists the BAD files. (If there are more files than can displayed clicking on EXIT will reveal the next page of files, this continues until all files have been shown). After3 packing of any file it is VERIFIED. From the status window you have an option of SAVING bad files or NOT saving the bad files. Make sure you select the required option before beginning any packing. NOTE:- Files may verify correctly, but, may not be saved because they got bigger!!  When packing has been completed by the program the drive lights will flash steadily on and off. The drivelights will be turned off when you EXIT the status window. (How about that GENIE, MICE, who needs em)!! -1 The last word. This packer goes all out for MAXIMUM compression. As a consequence of this certain types of DATA will prove troublesome due to the fact that the packer tries all the time to PACK data. The problem that occurs is collision between the packed data and the unpacked data. The main data effected by such collisions is DIGITAL data , ie SOUND SAMPLES. These data types can be packed , but you are now forewarned of the problem that can occur. If a program proves troublesome , depack the file you suspect from within the packer. If a file collides you will be told so. If there is collision try re-packing the file with other COMPRESSION ratio's. If the problem still occurs , leave it!!!      $      % # `!*o$|?<NNJ@gAaEfY *POMPEY PACKER V1.9?< NAPB?< NA/@ L&JY(JY,|@: gtae `6xva|fb4`ahd6adda`eraBRB`aNdx6<aPf6DV6a"J!Q`f Nuxrtf BQ2RAISAfNurtf BQNua6t`v `pM7"~DHPu7c Xakn.Lth~p\> Pax?7Pp  0 "͙%(:/pXY-_3>/< gH^k~#.,eNAT>pGf>Wz'np`R UF)RcFp+:1.ڇ]"c7ĉ:eXH&(a^82|18> ?pZ% p< <+ ΣF ?C pǾp pLpw&A!2cD?N(2%3GB %#[V,zxQ D/ H *E5X瘒O5Ih ШMj0K0: KFV b<^ zpS- jj01j-25d3gFژzpB-,8*Zp (*Fp\/*2p(𘢨?*pxg 3O` cD$pbjp!g s̾.h`:0pƓAƕADiLXƓBƕBDiL,g"¤FʕFD49a{ GDf#D:\O$.OYlpgX"$`zpfp `gdF/`PL`:E<]zg2"DI(<"$|UbYBa,QXg DD">`dLg"MY#/H1 z"-x@l\hp!e(vI*RaI2/dR~:f[o"z-`.f'07g0:-)fA-fp"ZQqlj`Qa5pzzb/WB2&z"n8"b~6fE,Gtu-rZvM nܵ[YV)l̯|fprogramCZely0]^WRINTEDHNORMAL/UTILITY|as)Ujheade rNormal|Printed|Utilityen|@(z0#,3,OJg.TĒo|2Re|((LYDa´TW VEF #gR3S0~F Q$/BxY7/rX ̸.#*_vɨfKd0bqg/ .g28>3rΓD:O0%6If&2X*A`r `E.D 5/I ez8A*CBnp~UKxC(Hz (VO`D-pF Z?:Z 8~n9NB 0Dz)& E1p6H) z֨ ܆ D5 !.r ΍p .Zp[,i,~؈xD3Q2ln'/wҫRo #/I))O淒Fݐt\j-k-t騬BMtJY:a(Lp(aC( r_tIp aXQp,2,3%PIcl'~pr0ap j/X* ޢ x-/S^X3s1p3`Nup`a`pX,fV^RL,NBg!LNAaV&zpA+J*3$pUpYOVV~fE~8K og#'Xҏ3YEP'NpaDY(H@] AgȬ_*S& $QZN NF$+zjъz&`C:錢1nz6Aj nlgRnzeQ`8,v 4v`"a.et8 |gX8JA8a>RRa"J!Q`t"xkr`2RAISA zSt6fN^B36,t`v`a:&wKg&pXVOa=eh<]BP @H ~I)zJeAL3J9V9`#Y9`993("pIab0g3n%)D2-*X#!02?:Nm( ͨp`\xD?0/"A'Q`4vf*gJYEtj#=2i$J2/" y(5l+z CQr. Af#H1DbJ&UyũCvԟq,*` |%*: ,Sٱ*z"zC *f`"Bf ^%U $D%v F;lG M,]E܆muv`Z,TjbMT#Zd ,c,e: pZ !0(&E9f*NS̘V +BS (|bANш`&_ۖ?|Mrh f((%Be F8`=:թz&K L0n Ƨ$AL  C5 7)Ӑ``A:(\Z[QUt.?!p"L+U\s(XYIFP ":`(&L:zpGD..|\B$Hɘ,CgJ`D,DXLZ>5U \u\z">aBaZRb z?Bga8JGf`(.W`ѨnO*g,<2/ɘk" C rf ~jPME>f(3m(ЉЏ^DEg2`89<|j "R Pg,җ)",\fؔq{s Z2gl6m6z,)Dl)6_)%X`jx6jd&l*<**1*Lekd`4DT KS$:,#0#,Xߖ:Nȓ"P܂'b ^(.`+zl"HYП?:J13 f ~\D #PD*y.P$(½&^#3>`qo0Xˋ( jpr0vP"FRأD20:,gl"ǞSr0Ӆr0SGo`Q΅"t&3"Cp"#B^ pm"BkRAW`np06V<R1Q\-.a6_ ='rba",daE ރhaHaܛ+/gwZtgvpDNxap%X.HJ/>dzp&Q1W^D=ߒO3"./:`6/" D?َ,ŠX#:?:kK"o #ưwR$f.t5WUƒ `YrR Aw$R"#$f$(z&p) Np'F1V.C8.g  f<]p.o0p p eڝI D`hlTؘN/QEsmalD|Znofset.OKAǏ 6fB(2(+Hz;}VT9# g~_]:Yp4ʘp|*nd finXdLOco?rb*TH1ck8~GRN|:L#OAHN?e~P/TjO64U/~:: ?ff*$CcPW Gn"3Ha+pzR.R1p,aa貱a2GŠa<ar%:v PHA0`:ZڴO42L'mHƉm2''&+mD? am%?!;œ{Chow hkNI]o?<Orve_D~סN*OopbUJ.P.MW190|ޅu[>~-vedW¡hRECTIFYA$RR9]-cąFILE U,Eju|s7eZ=!W>=?[b7gaT"YescqudOpiMu|H263~"RZPn/,TM #\0RX($ួHXH׌ɰf&I.:rz*HRM.(@Rg`,S0M(HfN& 0Sl( S*# &\Pn 9 \dnC@.&oB*8##°08vg UH Em:Lu& J:Ĩ2dg>gFM0plgRmL6M?L:^~3t pL0 1<1}VnbZTdp͓Gaxa^aRVr'TaG9) Ԍ&::6 6*YJaq(Xa20bZ6SCa OUN*v㚖v` Cp?npa\`p(a;vpzYxv¥ vXgZB8kJ$z 2(J8Fp2n(?sQ88E&SR?sU+3Rf_`wht/j@VpJИg! &HTUoH"zzJQf D2ٸL#x>/Jg Q& SgXX$XutDvz(1^VkQljQ&&#!(BXB^PI/$:(z JI `,`R?'po? k a*X,? K&{bq|fb Xhd6a?b`XLXNdC-Pf6ňN,SH,NAX`j%3Ek]2P b,KJ`gѓr?gBfGXm`T@+R&qq2ЪB+7B+jOA\/6Cm]*0b- ЭcTaK&M*ްSwf*o mHmUL&(JY,|:^g1|eb`6*vzf`48Bafd4abda^erLBhRB`aLdx6aNf4DVvI`"a.et8gX8A8a>Ra"(J!Q`"Fxr |2QRAISA' rtmfqBqNua6tp`vp`\3u-0VHz ǃQAxPBgNA[~+#EYPACKZV1.9:hD youWwish b4k]Pformat?^",$EnterfilepnFtZoWs*eUas:qJ+&>X-,$eY/'Savingunpacked+program.&EfEROR+WRITING~d@JsdEF( Df $AH N3Վ##sp4 g`цBM5$b6>dXJk'uJfl?`BR_ ol m 5Tp["*<'PQpprt۪t vQI&T#aa੬(b2y?< NOLleC!:O ,CV2Y22R;Cv bA6>peB.2BQ"80ժ?&kp 2'_b 9t4"t,&& @x ? )|@ ! z"`5[C|".\  00I]M ?V b P&4IcDjsA4 bt4;iϽTdg ^<2.u:e܉J j.2:k<hFR@_j.Lo Z B7 *fJSiSSS8 B  T W.,Xh<=||=>wo|<8>߾|~<>|>?>x>=Ǐ|lx>}x~?矃??IEJO    %,-: GHU bipw~ qqq!!'()IJ LRSTopqNK V  F3!, $ )#  !. 3 6;   T   W'  {             &! !  B#!"!"!  $ ^.%-  &z'( )  *+,"-> $Z/ v0 1 2  3% /  '   :V     " r    !!!  ! 1        - = B  M ..::0::::::SSSS0; ** Depack for FIXED addresses. ; ; ** For use with v1.8 or greater. ; ** Routines are incompatible with v1.0 thru to v1.5. ; ; ** Start = A4 = End of packed data (POPI) ; ** Finish = A2 = Start of unpack area. unpack clr.l -(sp) move.w #$20,-(sp) trap #1 move.l d0,2(sp) movea.l a4,a0 Start of packed file movea.l a2,a3 Finish address. subq.l #4,a0 add.l -(a0),a2 add the oldsize. movea.l a2,a4 Save end address for clearing subq.l #4,a0 Skip new size. move.l #$ff8240,a6 move.w (a6),d5 Save color empty move.b -(a0),d0 Unpack data. beq.s empty Not empty. umain moveq #0,d2 bsr shifter bcs.s rep move.b -(a0),d2 output move.b d2,-(a2) bra.s ecxit rep3 moveq #15,d4 16bit in-operative. moveq #2,d3 bsr.s leader bne.s rloop move.w d4,d2 bra.s output rep bsr.s shifter bcc.s repeat bsr.s shifter bcc.s rep3 bsr.s shifter bcs.s rep4 special moveq #2,d1 bsr nibit exg d1,d2 addq.w #1,d2 bset d1,d2 bra.s output rep4 bsr.s shifter bcc.s rep5 V1.7 incompatability moveq #15,d4 16bit in-operative. move.w #3,d3 bsr.s leader bne.s rloop move.b (a2),-(a2) ecxit neg.w (a6) move.w d5,(a6) cmpa.l a2,a3 blt.s umain jmp patch(pc) rep5 moveq #4,d3 bra.s reps ; ** Offset bitsize is x bits depending upon D2. ; ** Also serves to reproduce RUNS , because an offset of 1 = same ; ** character repeated D3 times. repeat bsr.s shifter bcs.s rep2 moveq #1,d1 .1 lsr.b #1,d0 bne.s .2 move.b -(a0),d0 roxr.b #1,d0 .2 addx.w d2,d2 dbf d1,.1 move.w d2,d1 Copy bitcount beq.s runing If ZERO then do RUNS addq.w #1,d1 add.w d1,d1 subq.w #1,d1 bsr.s nibit move.w d2,d3 reps bsr.s lead1 Get offset size. rloop movea.l a2,a1 add.l d2,a1 Add the offset. replp move.b -(a1),-(a2) dbf d3,replp bra.s ecxit shifter lsr.b #1,d0 bne.s noz move.b -(a0),d0 roxr.b #1,d0 noz rts ; ** Collect 2bit leader into D1 ; ** Algorithm :- 2bits + 1 (1 to 4) * 4. ; ** Return the BITS in D2. lead1 moveq #0,d4 16bits operative. leader moveq #1,d1 moveq #0,d2 n1 lsr.b #1,d0 bne.s n2 move.b -(a0),d0 roxr.b #1,d0 n2 addx.w d2,d2 dbf d1,n1 move.w d2,d1 addq.w #1,d1 lsl.w #2,d1 subq.w #1,d1 eor.b d1,d4 bne.s nibit rts nibs moveq #7,d1 nibit moveq #0,d2 nlp lsr.b #1,d0 bne.s nlp1 move.b -(a0),d0 roxr.b #1,d0 nlp1 addx.w d2,d2 dbf d1,nlp rts runing bsr.s lead1 16bits operative move.w d2,d3 moveq #1,d2 bra.s rloop rep2 moveq #1,d3 Size of loop. move.b -(a0),d2 bra.s rloop ; ; ** The routines below relocate the unpacked file into the space ; ** just used by the decompacter.Then relocate the prog, and, ; ** finally setup a basepage for the prog using our decompacters ; ** basepage which isn't needed anymore. ; ** ENTRY :- A3 = EOF. patch move.w d5,(a6) trap #1 addq.l #6,sp movea.l 2(a3),a0 Text seg.(Prog size) adda.l 6(a3),a0 Add data seg. adda.l 14(a3),a0 Add symbol table. lea 28(a0),a0 Include file header. adda.l a3,a0 GOT relocation table. move.l 8(a5),d0 Start of our loader. lea 28(a3),a3 Skip file header. movea.l a3,a6 PROGS real address for leter. tst.l (a0) If 1st byte zero beq.s fini NO RELOCATION NEEDED. adda.l (a0)+,a3 ELSE get prog size & moveq #0,d1 relo add.l d0,(a3) add our progs start. lotto move.b (a0)+,d1 beq.s fini cmp.b #1,d1 Test if negative relocation bne.s notneg No. lea 254(a3),a3 YES. make abs. bra.s lotto Back fore more. notneg adda.l d1,a3 Update address. bra.s relo Do some more. fini addq.l #2,a2 Prog start.SKIP bra ; ; ** Set up basepage for unpacked prog ; move.l (a2),$C(a5) New prog size. add.l (a2),d0 ' progs end address. move.l d0,$10(a5) Set it up in basepage. move.l 4(a2),$14(a5) New data segment. add.l 4(a2),d0 add to prog end address. move.l d0,$18(a5) Set BSS seg. move.l 8(a2),$1C(a5) Size of BSS seg. move.l a7,a0 Get some freespace lea -256(a0),a0 make doubly sure move.l )a0,-(sp) Save relocator code address ; ; ** Install the program relocator somewhere safe. ; lea reloc(pc),a1 move.l #endrel-reloc+1,d0 shift move.b (a1)+,(a0)+ dbf d0,shift rts Jump and run it! reloc move.l $c(a5),d0 add.l $14(a5),d0 Prog size. lsr.l #2,d0 SHIFT prog in LONGS. addq.l #2,d0 Adjust size for longs. lea 256(a5),a5 Start of prog proper. movea.l a5,a3 .1 move.l (a6)+,(a5)+ Move prog to proper address. subq.l #1,d0 Shift it all. bne.s .1 movea.l 4(a7),a5 Restore basepage address. movea.l $18(a5),a0 End of prog. .2 move.l d0,(a0)+ Initialise all mem up to cmpa.l a4,a0 EOF with zeroes. blt.s .2 jmp (a3) Go and run it. endrel   S @S}}|  } @}  }* Resident file depacker for files packed with POMPEY PACKER v1.9 * By THE ALIEN, only to be supplied to Pompey Pirates members!! * It's well commented, so you should have no problems understanding it. * Fixed for v1.0 by JPM. * Fixed dodgy D0 - programs size on return to user. * Fixed the FIX on regs. No need to save regs if error. * Can people ( yes you ) try to keep this source tidy!! * * JPM - Sorted odd addressing. Routine can now handle it should you * find a file on an odd address. ODD or EVEN the intercept * will use the same routine. So no checking is needed. * * Now compatible with v1.8 thru v1.9. * opt p+ start lea newvector(pc),a0 patch trap #1 vector bsr.s supexec clr.w -(sp) pea end-(start-256).w move.w #$31,-(sp) trap #1 supexec pea (a0) move.w #38,-(sp) run a routine in supervisor mode trap #14 addq.l #6,sp rts newvector lea old1+2(pc),a0 move.l $84.w,(a0) lea newtrap1(pc),a0 move.l a0,$84.w rts oldvector lea old1+2(pc),a0 move.l (a0),$84.w rts * this is where TRAP #1 goes now... newtrap1 pea (a0) lea save_a0(pc),a0 move.l (sp)+,(a0) btst #5,(sp) super mode bit set? bne.s super move.l usp,a0 user stack pointer bra.s user super lea 6(sp),a0 SSP plus return addr.l and SR.w user cmp.w #$3f,(a0) f_read? bne.s dotrap move.l 8(a0),loadto+2 save file read address move.l 2(sp),return+2 save return addr move.l #depack,2(sp) replace return addr dotrap move.l save_a0,a0 old1 jmp 0 becomes JMP * a3=file addr ; ** JPM 23.1.90 Only save regs if we intercept. depack tst.w 2(sp) error reading file? bmi return movem.l d0-d7/a0-a6,regs loadto move.l #0,a3 move.l d0,rsize+2 Save it incase it aint ours. add.l d0,a3 Point A3 at EOF. moveq #0,d0 Clear before collecting moveq #0,d1 subq.l #4,a3 movep 1(a3),d0 Alternate byte pickup. 'OI' movep 0(a3),d1 '' '' '' 'PP' add.w d0,d1 Total the words. cmpi.w #$9f99,d1 Our magic number. bne.s return2 Not ours. EXIT WITH REGS INTACT. bsr.s getone Get REAL size. move.l d0,rsize+2 Save real file size. carryon lea unpack(pc),a0 bsr supexec return2 movem.l regs,d0-d7/a0-a6 rsize move.l #0,d0 return jmp 0 back to whatever used f_read * the new value for d0 is because some program might check the number of * bytes read. d0 becomes the length of the UNPACKED file, not the number * of bytes actually read. ; ** Routine collects a long in DO. ; ** ENTRY :- A3 points to the byte AFTER the LAST byte. getone moveq #0,d1 4bytes in a long subq.l #4,a3 Adjust to start of 4bytes. loop asl.l #8,d0 Move along (needs to be here!) move.b (a3,d1.w),d0 getone into low byte addq.w #1,d1 cmpi.w #4,d1 bne.s loop rts ; ; ** Pompey Depacker ; ; ** JPM 1990 ; ; ** Registers D0-D5 used. ; ** '' A0-A4 used. ; ; ** On ENTRY A3 is pointing at NEWSIZE. unpack bsr.s getone movea.l a3,a0 Start of packed data. add.l #$c,a3 sub.l d0,a3 Start - size = beginning movea.l a3,a2 Copy to transfer reg. add.l rsize+2,a2 Start of unpack address. move.l #$ff8240,a4 move.w (a4),d5 Save color empty move.b -(a0),d0 Unpack data. beq.s empty Not empty. umain moveq #0,d2 bsr shifter bcs.s rep move.b -(a0),d2 output move.b d2,-(a2) bra.s ecxit rep3 moveq #15,d4 16bit in-operative. moveq #2,d3 bsr.s leader bne.s rloop move.w d4,d2 bra.s output rep bsr.s shifter bcc.s repeat bsr.s shifter bcc.s rep3 bsr.s shifter bcs.s rep4 special moveq #2,d1 bsr nibit exg d1,d2 addq.w #1,d2 bset d1,d2 bra.s output rep4 bsr.s shifter bcc.s rep5 V1.7 incompatability moveq #15,d4 16bit in-operative. move.w #3,d3 bsr.s leader bne.s rloop move.b (a2),-(a2) ecxit neg.w (a4) move.w d5,(a4) cmpa.l a2,a3 blt.s umain rts rep5 moveq #4,d3 bra.s reps ; ** Offset bitsize is x bits depending upon D2. ; ** Also serves to reproduce RUNS , because an offset of 1 = same ; ** character repeated D3 times. repeat bsr.s shifter bcs.s rep2 moveq #1,d1 .1 lsr.b #1,d0 bne.s .2 move.b -(a0),d0 roxr.b #1,d0 .2 addx.w d2,d2 dbf d1,.1 move.w d2,d1 Copy bitcount beq.s runing If ZERO then do RUNS addq.w #1,d1 add.w d1,d1 subq.w #1,d1 bsr.s nibit move.w d2,d3 reps bsr.s lead1 Get offset size. rloop movea.l a2,a1 add.l d2,a1 Add the offset. replp move.b -(a1),-(a2) dbf d3,replp bra.s ecxit shifter lsr.b #1,d0 bne.s noz move.b -(a0),d0 roxr.b #1,d0 noz rts ; ** Collect 2bit leader into D1 ; ** Algorithm :- 2bits + 1 (1 to 4) * 4. ; ** Return the BITS in D2. lead1 moveq #0,d4 16bits operative. leader moveq #1,d1 moveq #0,d2 n1 lsr.b #1,d0 bne.s n2 move.b -(a0),d0 roxr.b #1,d0 n2 addx.w d2,d2 dbf d1,n1 move.w d2,d1 addq.w #1,d1 lsl.w #2,d1 subq.w #1,d1 eor.b d1,d4 bne.s nibit rts nibs moveq #7,d1 nibit moveq #0,d2 nlp lsr.b #1,d0 bne.s nlp1 move.b -(a0),d0 roxr.b #1,d0 nlp1 addx.w d2,d2 dbf d1,nlp rts runing bsr.s lead1 16bits operative move.w d2,d3 moveq #1,d2 bra.s rloop rep2 moveq #1,d3 Size of loop. move.b -(a0),d2 bra.s rloop *7 bss regs ds.l 15 info ds.l 2 save_a0 ds.l 1 end}p} }}@}} }}@}p @ @SpS SS@SS@ S* Resident file depacker for files packed with POMPEY PACKER v1.9 * By THE ALIEN, only to be supplied to Pompey Pirates members!! * It's well commented, so you should have no problems understanding it. * Fixed for v1.0 by JPM. * Fixed dodgy D0 - programs size on return to user. * Fixed the FIX on regs. No need to save regs if error. * Can people ( yes you ) try to keep this source tidy!! * * JPM - Sorted odd addressing. Routine can now handle it should you * find a file on an odd address. ODD or EVEN the intercept * will use the same routine. So no checking is needed. * * Now compatible with v1.8 thru v1.9. * opt p+ start move.l 4(sp),a5 move.l #(end-start)+256,-(sp) move.l a5,-(sp) pea $4a0 trap #1 add.l #$c,sp pea mess(pc) move #9,-(sp) trap #1 addq.l #6,sp move #1,-(sp) trap #1 addq.l #2,sp lea newvector(pc),a0 patch trap #1 vector bsr.s supexec pea null pea null pea fname clr.w -(sp) move.w #$4b,-(sp) trap #1 supexec pea (a0) move.w #38,-(sp) run a routine in supervisor mode trap #14 addq.l #6,sp rts newvector lea old1+2(pc),a0 move.l $84.w,(a0) lea newtrap1(pc),a0 move.l a0,$84.w rts oldvector lea old1+2(pc),a0 move.l (a0),$84.w rts * this is where TRAP #1 goes now... newtrap1 pea (a0) lea save_a0(pc),a0 move.l (sp)+,(a0) btst #5,(sp) super mode bit set? bne.s super move.l usp,a0 user stack pointer bra.s user super lea 6(sp),a0 SSP plus return addr.l and SR.w user cmp.w #$3f,(a0) f_read? bne.s dotrap move.l 8(a0),loadto+2 save file read address move.l 2(sp),return+2 save return addr move.l #depack,2(sp) replace return addr dotrap move.l save_a0,a0 old1 jmp 0 becomes JMP * a3=file addr ; ** JPM 23.1.90 Only save regs if we intercept. depack tst.w 2(sp) error reading file? bmi return movem.l d0-d7/a0-a6,regs loadto move.l #0,a3 move.l d0,rsize+2 Save it incase it aint ours. add.l d0,a3 Point A3 at EOF. moveq #0,d0 Clear before collecting moveq #0,d1 subq.l #4,a3 movep 1(a3),d0 Alternate byte pickup. 'OI' movep 0(a3),d1 '' '' '' 'PP' add.w d0,d1 Total the words. cmpi.w #$9f99,d1 Our magic number. bne.s return2 Not ours. EXIT WITH REGS INTACT. bsr.s getone Get REAL size. move.l d0,rsize+2 Save real file size. carryon lea unpack(pc),a0 bsr supexec return2 movem.l regs,d0-d7/a0-a6 rsize move.l #0,d0 return jmp 0 back to whatever used f_read * the new value for d0 is because some program might check the number of * bytes read. d0 becomes the length of the UNPACKED file, not the number * of bytes actually read. ; ** Routine collects a long in DO. ; ** ENTRY :- A3 points to the byte AFTER the LAST byte. getone moveq #0,d1 4bytes in a long subq.l #4,a3 Adjust to start of 4bytes. loop asl.l #8,d0 Move along (needs to be here!) move.b (a3,d1.w),d0 getone into low byte addq.w #1,d1 cmpi.w #4,d1 bne.s loop rts ; ; ** Pompey Depacker ; ; ** JPM 1990 ; ; ** Registers D0-D5 used. ; ** '' A0-A4 used. ; ; ** On ENTRY A3 is pointing at NEWSIZE. unpack bsr.s getone movea.l a3,a0 Start of packed data. add.l #$c,a3 sub.l d0,a3 Start - size = beginning movea.l a3,a2 Copy to transfer reg. add.l rsize+2,a2 Start of unpack address. move.l #$ff8240,a4 move.w (a4),d5 Save color empty move.b -(a0),d0 Unpack data. beq.s empty Not empty. umain moveq #0,d2 bsr shifter bcs.s rep move.b -(a0),d2 output move.b d2,-(a2) bra.s ecxit rep3 moveq #15,d4 16bit in-operative. moveq #2,d3 bsr.s leader bne.s rloop move.w d4,d2 bra.s output rep bsr.s shifter bcc.s repeat bsr.s shifter bcc.s rep3 bsr.s shifter bcs.s rep4 special moveq #2,d1 bsr nibit exg d1,d2 addq.w #1,d2 bset d1,d2 bra.s output rep4 bsr.s shifter bcc.s rep5 V1.7 incompatability moveq #15,d4 16bit in-operative. move.w #3,d3 bsr.s leader bne.s rloop move.b (a2),-(a2) ecxit neg.w (a4) move.w d5,(a4) cmpa.l a2,a3 blt.s umain rts rep5 moveq #4,d3 bra.s reps ; ** Offset bitsize is x bits depending upon D2. ; ** Also serves to reproduce RUNS , because an offset of 1 = same ; ** character repeated D3 times. repeat bsr.s shifter bcs.s rep2 moveq #1,d1 .1 lsr.b #1,d0 bne.s .2 move.b -(a0),d0 roxr.b #1,d0 .2 addx.w d2,d2 dbf d1,.1 move.w d2,d1 Copy bitcount beq.s runing If ZERO then do RUNS addq.w #1,d1 add.w d1,d1 subq.w #1,d1 bsr.s nibit move.w d2,d3 reps bsr.s lead1 Get offset size. rloop movea.l a2,a1 add.l d2,a1 Add the offset. replp move.b -(a1),-(a2) dbf d3,replp bra.s ecxit shifter lsr.b #1,d0 bne.s noz move.b -(a0),d0 roxr.b #1,d0 noz rts ; ** Collect 2bit leader into D1 ; ** Algorithm :- 2bits + 1 (1 to 4) * 4. ; ** Return the BITS in D2. lead1 moveq #0,d4 16bits operative. leader moveq #1,d1 moveq #0,d2 n1 lsr.b #1,d0 bne.s n2 move.b -(a0),d0 roxr.b #1,d0 n2 addx.w d2,d2 dbf d1,n1 move.w d2,d1 addq.w #1,d1 lsl.w #2,d1 subq.w #1,d1 eor.b d1,d4 bne.s nibit rts nibs moveq #7,d1 nibit moveq #0,d2 nlp lsr.b #1,d0 bne.s nlp1 move.b -(a0),d0 roxr.b #1,d0 nlp1 addx.w d2,d2 dbf d1,nlp rts runing bsr.s lead1 16bits operative move.w d2,d3 moveq #1,d2 bra.s rloop rep2 moveq #1,d3 Size of loop. move.b -(a0),d2 bra.s rloop *7 mess dc.b 27,"E" dc.b "The Black Wizards -",10,13 dc.b " Enjoy the Silence Digi Demo",10,13,10 dc.b "Packed by GOR of the Pompey Pirates,",10,13 dc.b "Because ours is the only packer that",10,13 dc.b "could handle the 745K sample file!!!",10,13,10 dc.b "Hit a key to load...",0 null ds.w 1 fname dc.b "\dep_code.pop",0 even bss regs ds.l 15 info ds.l 2 save_a0 ds.l 1 end֐S@S ֐S; ** GAME exec header. ; ** Unpack routines for v1.8 onwards. ; ** Routines now incompatible with v1.0-5. unpack1 move.l 4(a7),a5 move.l #0,a2 add.l #endpak-unpack1,a2 Unpack routine size. move.w #4,-(sp) trap #14 tst.w d0 beq.s .1 lea tab1(pc),a0 add.b #20,(a0) .1 bsr.s printit title dc.b 27,"E",27,"f",27,"Y",32 tab1 dc.b 42,"POMPEY PACKER V1.9",0 EVEN printit move.w #9,-(sp) trap #1 addq.l #8,sp clr.l -(sp) move.w #$20,-(sp) trap #1 move.l d0,2(sp) movea.l a4,a0 Start of packed file movea.l a2,a3 Finish address. subq.l #4,a0 add.l -(a0),a2 add the oldsize. movea.l a2,a4 Save end address for clearing subq.l #4,a0 move.l #$ff8240,a6 move.w (a6),d5 Save color .empty move.b -(a0),d0 Unpack data. beq.s .empty Not empty. .umain moveq #0,d2 bsr .shifter bcs.s .rep move.b -(a0),d2 .output move.b d2,-(a2) bra.s .ecxit .rep3 moveq #15,d4 16bit in-operative. moveq #2,d3 bsr.s .leader bne.s .rloop move.w d4,d2 bra.s .output .rep bsr.s .shifter bcc.s .repeat bsr.s .shifter bcc.s .rep3 bsr.s .shifter bcs.s .rep4 .special moveq #2,d1 bsr .nibit exg d1,d2 addq.w #1,d2 bset d1,d2 bra.s .output .rep4 bsr.s .shifter bcc.s .rep5 V1.7 incompatability moveq #15,d4 16bit in-operative. move.w #3,d3 bsr.s .leader bne.s .rloop move.b (a2),-(a2) .ecxit neg.w (a6) move.w d5,(a6) cmpa.l a2,a3 blt.s .umain jmp .patch(pc) .rep5 moveq #4,d3 bra.s .reps ; ** Offset bitsize is x bits depending upon D2. ; ** Also serves to reproduce RUNS , because an offset of 1 = same ; ** character repeated D3 times. .repeat bsr.s .shifter bcs.s .rep2 moveq #1,d1 .1 lsr.b #1,d0 bne.s .2 move.b -(a0),d0 roxr.b #1,d0 .2 addx.w d2,d2 dbf d1,.1 move.w d2,d1 Copy bitcount beq.s .runing If ZERO then do RUNS addq.w #1,d1 add.w d1,d1 subq.w #1,d1 bsr.s .nibit move.w d2,d3 .reps bsr.s .lead1 Get offset size. .rloop movea.l a2,a1 add.l d2,a1 Add the offset. .replp move.b -(a1),-(a2) dbf d3,.replp bra.s .ecxit .shifter lsr.b #1,d0 bne.s .noz move.b -(a0),d0 roxr.b #1,d0 .noz rts ; ** Collect 2bit leader into D1 ; ** Algorithm :- 2bits + 1 (1 to 4) * 4. ; ** Return the BITS in D2. .lead1 moveq #0,d4 16bits operative. .leader moveq #1,d1 moveq #0,d2 .n1 lsr.b #1,d0 bne.s .n2 move.b -(a0),d0 roxr.b #1,d0 .n2 addx.w d2,d2 dbf d1,.n1 move.w d2,d1 addq.w #1,d1 lsl.w #2,d1 subq.w #1,d1 eor.b d1,d4 bne.s .nibit rts .nibs moveq #7,d1 .nibit moveq #0,d2 .nlp lsr.b #1,d0 bne.s .nlp1 move.b -(a0),d0 roxr.b #1,d0 .nlp1 addx.w d2,d2 dbf d1,.nlp rts .runing bsr.s .lead1 16bits operative move.w d2,d3 moveq #1,d2 bra.s .rloop .rep2 moveq #1,d3 Size of loop. move.b -(a0),d2 bra.s .rloop ; ; ** The routines below relocate the unpacked file into the space ; ** just used by the decompacter.Then relocate the prog, and, ; ** finally setup a basepage for the prog using our decompacters ; ** basepage which isn't needed anymore. ; ** ENTRY :- A3 = EOF. .patch move.w d5,(a6) trap #1 addq.l #6,sp movea.l 2(a3),a0 Text seg.(Prog size) adda.l 6(a3),a0 Add data seg. adda.l 14(a3),a0 Add symbol table. lea 28(a0),a0 Include file header. adda.l a3,a0 GOT relocation table. move.l 8(a5),d0 Start of our loader. lea 28(a3),a3 Skip file header. movea.l a3,a6 PROGS real address for leter. tst.l (a0) If 1st byte zero beq.s .fini NO RELOCATION NEEDED. adda.l (a0)+,a3 ELSE get prog size & moveq #0,d1 .relo add.l d0,(a3) add our progs start. .lotto move.b (a0)+,d1 beq.s .fini cmp.b #1,d1 Test if negative relocation bne.s .notneg No. lea 254(a3),a3 YES. make abs. bra.s .lotto Back fore more. .notneg adda.l d1,a3 Update address. bra.s .relo Do some more. .fini addq.l #2,a2 Prog start.SKIP bra ; ; ** Set up basepage for unpacked prog ; move.l (a2),$C(a5) New prog size. add.l (a2),d0 ' progs end address. move.l d0,$10(a5) Set it up in basepage. move.l 4(a2),$14(a5) New data segment. add.l 4(a2),d0 add to prog end address. move.l d0,$18(a5) Set BSS seg. move.l 8(a2),$1C(a5) Size of BSS seg. move.l a7,a0 lea -256(a0),a0 Relocator address. move.l a0,-(sp) ; ; ** Install the program relocator somewhere safe. ; lea .reloc(pc),a1 move.l #endpak-.reloc+1,d0 .shift move.b (a1)+,(a0)+ dbf d0,.shift rts .reloc move.l $c(a5),d0 add.l $14(a5),d0 Prog size. lsr.l #2,d0 SHIFT prog in LONGS. addq.l #2,d0 Adjust size for longs. lea 256(a5),a5 Start of prog proper. movea.l a5,a3 .rlp move.l (a6)+,(a5)+ Move prog to proper address. subq.l #1,d0 Shift it all. bne.s .rlp movea.l 4(a7),a5 Restore basepage address. movea.l $18(a5),a0 End of prog. .clrmem move.l d0,(a0)+ Initialise all mem up to cmpa.l a4,a0 EOF with zeroes. blt.s .clrmem jmp (a3) Go and run it. endpak incbin a:\football.pop S  S* This is the source you'll need to run a program with packed data files. * Obviously this is only going to be of use with programs that use *REAL* * files - i.e. gemdos accessed ones. Many programs will use files ok, but * as soon as you pack them all hell will break loose - I won't go into the * reasons and solutions here, though I may do in a future doc file... * Remember that this program is just a patch to run another program which * is your game/loader/whatever - so you'll have to change the filename on * line 279 of this source. yes equ 1 no equ 0 * the following line is important: if you want to run another program as * mentioned above, then leave it set to 'no'. If, however, you want to * stick it in an AUTO program and leave it in memory, which could save * diskspace if you have a lot of programs with packed data files on the * same disk, then set it to 'yes'. tsr equ no * The new improved Auto-depacker... * For 1.8/1.9/1.9a-y packed files. * Any program that picks up the filesize from the DTA after a SFIRST will * now get the correct; unpacked; length. opt o+,d-,x- start ifeq tsr pea (end-(start-256)).w save THIS much pea start-256(pc) from basepage pea $4a0 m_shrink with null before it trap #1 lea 12(sp),sp endc lea mystack(pc),sp lea newvector(pc),a0 patch trap #1 vector bsr.s supexec ifeq tsr pea envcom(pc) move.l (sp),-(sp) pea filename(pc) pea $4b0 trap #1 lea 16(sp),sp lea oldvector(pc),a0 bsr.s supexec clr.w -(sp) elseif clr.w -(sp) pea (end-(start-256)).w move.w #$31,-(sp) endc trap #1 supexec pea (a0) move.w #38,-(sp) run a routine in supervisor mode trap #14 addq.l #6,sp rts newvector move.l $84.w,oldtrap1+2 move.l #newtrap1,$84.w rts oldvector move.l oldtrap1+2(pc),$84.w move.b #7,$484.w rts * this is where TRAP #1 goes now... newtrap1 move.l a0,save_a0 btst #5,(sp) super mode bit set? bne.s super move.l usp,a0 user stack pointer bra.s user super lea 6(spw),a0 SSP plus return addr.l and SR.w user tst.w intrap1 bne.s dotrap cmp.w #$3f,(a0) f_read? beq.s fread cmp.w #$4e,(a0) bne.s dotrap move.l 2(a0),a0 cmp.b #'.',(a0) beq.s dotrap move.l a0,sfirstfile+2 move.l 2(sp),return+2 move.l #resize,2(sp) bra.s dotrap fread move.l 8(a0),loadto+2 save file read address move.l 2(sp),return+2 save return addr move.l #depack,2(sp) replace return addr dotrap move.l save_a0(pc),a0 oldtrap1 jmp 0.l becomes JMP resize movem.l d0-d7/a0-a6,regs move.l d0,rsize+2 move.w #$2f,-(sp) get DTA trap #1 addq.l #2,sp move.l d0,a6 clr.w -(sp) sfirstfile pea 0.l open the searched file move.w #$3d,-(sp) trap #1 addq.l #8,sp move.w #2,-(sp) from the end of the move.w d0,-(sp) file... move.w d0,d7 pea -8.w -8 bytes move.w #$42,-(sp) trap #1 lea 10(sp),sp pea sizebuff(pc) pea 8.w move.w d7,-(sp) move.w #$3f,-(sp) st intrap1 trap #1 sf intrap1 lea 12(sp),sp move.w d7,-(sp) move.w #$3e,-(sp) trap #1 addq.l #4,sp cmp.l #'POPI',sizebuff+4 bne.s return2 move.l sizebuff(pc),26(a6) bra.s return2 depack tst.w 2(sp) error reading file? bmi.s return movem.l d0-d7/a0-a6,regs loadto move.l #0,a3 move.l d0,rsize+2 Save it incase it aint ours. add.l d0,a3 move.l a3,a0 move.l a3,d7 and.l #1,d7 tst.b d7 bne.s return2 cmp.l #'POPI',-(a3) bne.s return2 move.l -(a3),rsize+2 Now save real program size. movem.l d1-d7/a0-a6,-(sp) move.l a0,unpack+2 lea unpack(pc),a0 bsr supexec movem.l (sp)+,d1-d7/a0-a6 return2 movem.l regs(pc),d0-d7/a0-a6 rsize move.l #$f0,d0 return jmp 0.l back to whatever used f_read * the new value for d0 is because some program might check the number of * bytes read. d0 becomes the length of the UNPACKED file, not the number * of bytes actually read. unpack lea 0.l,a0 move.l a0,a3 lea -12(a0),a0 sub.l (a0),a3 move.l a3,a2 add.l 4(a0),a2 lea $f8240.w,a4 MOVE.W (A4),D5 L76EF0 MOVE.B -(A0),D0 BEQ.S L76EF0 L76EF4 MOVEQ #0,D2 BSR.s L76F78 BCS.S L76F0E MOVE.B -(A0),D2 L76EFE MOVE.B D2,-(A2) BRA.S L76F38 L76F02 MOVEQ #$F,D4 MOVEQ #2,D3 BSR.s L76F84 BNE.s L76F6C MOVE.W D4,D2 BRA.S L76EFE L76F0E BSR.s L76F78 BCC.S L76F48 L76F12 BSR.s L76F78 BCC.S L76F02 BSR.S L76F78 BCS.S L76F28 MOVEQ #2,D1 BSR L76FA6 EXG D1,D2 ADDQ.W #1,D2 BSET D1,D2 BRA.S L76EFE L76F28 BSR.S L76F78 BCC.S L76F44 MOVEQ #$F,D4 MOVE.W #3,D3 BSR.S L76F84 BNE.S L76F6C MOVE.B (A2),-(A2) L76F38 move.w d2,(a4) MOVE.W D5,(a4) CMPA.L A2,A3 BLT.S L76EF4 rts run the code L76F44 MOVEQ #4,D3 BRA.S L76F6A L76F48 BSR.S L76F78 L76F4A BCS.S L76FC0 MOVEQ #1,D1 L76F4E LSR.B #1,D0 BNE.S L76F56 MOVE.B -(A0),D0 ROXR.B #1,D0 L76F56 ADDX.W D2,D2 DBF D1,L76F4E MOVE.W D2,D1 BEQ.S L76FB8 ADDQ.W #1,D1 ADD.W D1,D1 SUBQ.W #1,D1 BSR.S L76FA6 MOVE.W D2,D3 L76F6A BSR.S L76F82 L76F6C MOVEA.L A2,A1 ADDA.L D2,A1 L76F70 MOVE.B -(A1),-(A2) DBF D3,L76F70 BRA.S L76F38 L76F78 LSR.B #1,D0 BNE.S L76F80 L76F7C MOVE.B -(A0),D0 ROXR.B #1,D0 L76F80 RTS L76F82 MOVEQ #0,D4 L76F84 MOVEQ #1,D1 MOVEQ #0,D2 L76F88 LSR.B #1,D0 BNE.S L76F90 MOVE.B -(A0),D0 ROXR.B #1,D0 L76F90 ADDX.W D2,D2 DBF D1,L76F88 MOVE.W D2,D1 ADDQ.W #1,D1 LSL.W #2,D1 SUBQ.W #1,D1 EOR.B D1,D4 BNE.S L76FA6 RTS MOVEQ #7,D1 L76FA6 MOVEQ #0,D2 L76FA8 LSR.B #1,D0 BNE.S L76FB0 MOVE.B -(A0),D0 L76FAE ROXR.B #1,D0 L76FB0 ADDX.W D2,D2 DBF D1,L76FA8 RTS L76FB8 BSR.S L76F82 MOVE.W D2,D3 MOVEQ #1,D2 BRA.S L76F6C L76FC0 MOVEQ #1,D3 MOVE.B -(A0),D2 BRA.S L76F6C *7 data ifeq tsr filename dc.b "PROGRAM.EXE",0 endc bss regs ds.l 15 save_a0 ds.l 1 envcom ds.l 1 sizebuff ds.l 2 intrap1 ds.w 1 ds.w 127 mystack ds.w 1 end ` S``@S` `  ` Sno equ 0 yes equ 1 * EXEC HEADER FOR EXEC FILES PACKED WITH POMPEY PACKER 1.9a * If you do not wish to pack program files as EXEC files within the packer, * or wish to do something more than print a message while the program * depacks, an alternative is to pack your program file as a DATA file, * and then INCBIN it in this source - see the last line. * Goto line 253 of this source for a good place to put modifications. * You can customise this exec header by setting the values below to YES or * NO. 'lowresonly' will correctly justify the 'POMPEY PACKER V1.9a' text if * it is set to NO, if set to yes, it will just print in the middle of the * screen on low res, but will be incorrectly justified in med/high res. * 'printheading' will print the "POMPEY PACKER V1.9a' text if set to YES. * 'okrobnorthen' will work with Rob Northen protection if set to YES; if * set to NO it will lock up if protected with RN protection, but will save * a few bytes. Preserveregs will preserve all registers if set to \S`}` `0} }}`  0S` S0S00S0 0 S0S00S .  K`..  4`SHRINK PRG WT'HUFFHEADDAT a| format 0-,1-,2- list + * QPAC : quick file packer v2.2 * with turbo string search list - test_version equ 0 *-> * packed file format: * * the packed file consists of a 24 byte header + packed bit-streamed data * * header: * dc.b 'QPACbyJMP(c)1989' * dc.l length of unpacked file * dc.l checksum of unpacked file (=XOR of dest bytes) * bit-streamed data: * %00nnn insert next 1..8 bytes * %01a,%aa copy 2 bytes from ptr-(1..256) * %100a,%a copy 3 bytes from ptr-(=1..512) * %101a,%a copy 4 bytes from ptr-(=1..1024) * %110n,%nnna,%a copy 3..258 bytes from ptr-(1..4096) * %111n,%nnn insert next 9..264 bytes * *-> ifne test_version opt x+ endc sec macro ori #1,ccr endm clc macro andi #~1,ccr endm section bss stack ds.l 256 stack_end counts ds.w 65536 counters for no. of occurrences of each possible * byte-pair within the last 1024 bytes scanned * (also used for finding least common byte) error_sp ds.l 1 command_line ds.l 1 input_buffer ds.b 64+1+1 even section data demo_file dc.b .end-.start .start dc.b 'd:\packers\packer.s' .end dc.b 0,0,0,0 header_name dc.b 'QPAC2-JMP(C)1989' even section text move.l 4(sp),a3 standard header move.l $C(a3),d0 add.l $14(a3),d0 add.l $1C(a3),d0 add.l #$100,d0 lea stack_end,sp move.l d0,-(sp) move.l a3,-(sp) ifeq test_version add.w #128,a3 move.l a3,command_line elseif move.l #demo_file,command_line endc clr.w -(sp) move.w #$4A,-(sp) trap #1 add.l #12,sp bsr setup_screen bsr start exit clr.w -(sp) move.w #$4C,-(sp) trap #1 start move.l sp,error_sp save error stack bsr make_turbo_search move.l command_line,a0 tst.b (a0) beq load_error moveq #0,d0 move.b (a0)+,d0 clr.b (a0,d0.w) move.l a0,command_line bsr get_file bcs load_error move.l a0,source_ptr move.l d0,source_size add.l d0,a0 move.l a0,source_end lea title,a0 bsr print_string move.l command_line,a0 bsr print_string lea title2,a0 bsr print_string move.l source_size,d0 add.l #1024,d0 bsr alloc bcs memory_error move.l a0,dest_ptr move.l d0,dest_size add.l d0,a0 move.l a0,dest_end bsr pack_file done bcs abort_error lea time_mess,a0 bsr print_string moveq #0,d0 move.w d7,d0 bsr print_number lea time_mess2,a0 bsr print_string move.l dest_ptr,a0 move.l dest_size,d0 move.l source_ptr,a1 bsr unpack_file undone tst.w d0 bne expand_error lea perc_mess,a0 bsr print_string move.l dest_size,d0 mulu #100,d0 move.l source_size,d1 .ld cmp.l #65536,d1 bcs.s .sd lsr.l #1,d0 lsr.l #1,d1 bra.s .ld .sd divu d1,d0 cmp.w #100,d0 bls.s .ok move.w #100,d0 .ok and.l #$F,d0 bsr print_number lea perc_mess2,a0 bsr print_string .wait bsr get_key beq.s .wait cmp.b #'Y',d0 bne quit lea perc_mess3,a0 bsr print_string move.b #64,input_buffer pea input_buffer move.w #$0A,-(sp) trap #1 addq.l #6,sp tst.b input_buffer+1 beq.s .qp2 lea input_buffer+2,a0 moveq #0,d0 move.b input_buffer+1,d0 clr.b (a0,d0.w) move.l a0,command_line bra.s .put .qp2 move.l command_line,a0 clr.l d7 .qp2b move.b (a0)+,d0 beq.s .qp2c cmp.b #'.',d0 bne.s .qp2b move.l a0,d7 bra.s .qp2b .qp2c tst.l d7 beq.s .qp2d move.l d7,a0 .qp2d subq.w #1,a0 move.b #'.',(a0)+ move.b #'Q',(a0)+ move.b #'P',(a0)+ move.b #'2',(a0)+ clr.b (a0)+ .put move.l command_line,a0 move.l dest_ptr,a1 move.l dest_size,d0 bsr put_file bcs save_error rts save_error lea save_mess,a0 bra.s exit_fail memory_error lea memory_mess,a0 bra.s exit_fail load_error lea load_mess,a0 bra.s exit_fail expand_error lea expand_mess,a0 bra.s exit_fail abort_error lea abort_mess,a0 bra.s exit_fail overflow_error lea overflow_mess,a0 exit_fail move.l error_sp,sp bsr print_string lea key_mess,a0 bsr print_string .wait bsr get_key beq.s .wait quit rts title dc.b 27,'E',27,'f' dc.b 'QPAC2 by JMP (C) 9th Aug 1989',13,10,13,10 dc.b 'Source file:',0 title2 dc.b 27,'Y',' '+4,' ' dc.b 'Source ',13,10,13,10 dc.b 'Reading ',13,10,13,10 dc.b 'Writing ',13,10,13,10 src_tab dc.b 27,'Y',' '+4,' '+8,0 rd_tab dc.b 27,'Y',' '+6,' '+8,0 wr_tab dc.b 27,'Y',' '+8,' '+8,0 even src_row equ (5*8+3)*160 rd_row equ (7*8+3)*160 wr_row equ (9*8+3)*160 time_mess dc.b 27,'Y',' '+11,' ' dc.b 'Time taken = ',0 time_mess2 dc.b ' seconds',13,10,0 perc_mess dc.b 'Packed to ',0 perc_mess2 dc.b '% of original',13,10,13,10 dc.b 'Save file (Y)es or (N)o',0 perc_mess3 dc.b 13,10,13,10,'Press RETURN to save .QP2 file',13,10 dc.b 'or enter new filename',13,10,13,10 dc.b '?',0 abort_mess dc.b 27,'Y',' '+11,' ','Aborted',0 overflow_mess dc.b 27,'Y',' '+11,' ','Packed file longer than original',0 expand_mess dc.b 13,10,'Packed file failed to unpack',0 load_mess dc.b 27,'E',27,'f','Error while loading source file',0 memory_mess dc.b 27,'E',27,'f','Insufficient memory for packing',0 save_mess dc.b 27,'E',27,'f','Error while saving file',0 key_mess dc.b 13,10,'press any key to exit',0 even source_ptr dc.l 0 ptrs to files source_end dc.l 0 source_size dc.l 0 dest_ptr dc.l 0 dest_end dc.l 0 dest_size dc.l 0 com00 dc.l 0 com01 dc.l 0 com100 dc.l 0 com101 dc.l 0 com110 dc.l 0 com111 dc.l 0 * pack file * entry source_ptr/end/size,dest_ptr * exit dest_end/size * carry set if aborted by key press * d7=time taken (in seconds) pack_file bsr setup_irq clr.l print_timer reset timer lea counts,a0 clear counters move.w #65536/8-1,d0 for 65536 pair counts moveq #0,d1 .wipe move.l d1,(a0)+ move.l d1,(a0)+ move.l d1,(a0)+ move.l d1,(a0)+ dbra d0,.wipe move.l dest_ptr(pc),a6 a6=destination lea header_name(pc),a0 move.l (a0)+,(a6)+ insert id move.l (a0)+,(a6)+ move.l (a0)+,(a6)+ move.l (a0)+,(a6)+ move.l source_size(pc),(a6)+ insert unpacked size clr.l (a6)+ skip checksum lea counts,a5 a5=counters move.l source_ptr(pc),a0 a0=source moveq #1,d7 d7=destination long moveq #0,d6 d6=checksum move.l a0,a4 a4=ptr to last un-saved byte moveq #0,d5 d5=no. of un-saved bytes movem.l d0-d7/a0-a6,-(sp) lea src_tab,a0 bsr print_string move.l source_size,d0 bsr print_number move.l source_size,d6 move.w #src_row,d7 bsr print_bar movem.l (sp)+,d0-d7/a0-a6 bsr print_status move.w #50,print_counter .loop moveq #0,d0 if possible string copy then movep.w (a0),d0 move.b 1(a0),d0 add.l d0,d0 tst.w (a5,d0.l) beq .no_string bsr search_for_string search for copy bcc .no_string if copy then save insert .save bsr put_insert tst.w d5 (may require multiple save) bne.s .save movem.w string_offset,d2-d4 get offset,size,type subq.w #1,d2 size-1 for range 0..255/../4095 cmp.w #1,d4 save according to size bcs.s .copy2 beq.s .copy3 cmp.w #2,d4 beq.s .copy4 bra.s .copy_big .copy2 addq.l #1,com01 moveq #%01,d0 2 bytes : %01a moveq #2-1,d1 bsr put_bits move.w d2,d0 bsr put_byte move.w d3,d0 bra .update_after_copy .copy3 addq.l #1,com100 moveq #%100,d0 3 bytes : %100a moveq #3-1,d1 bsr put_bits move.w d2,d0 moveq #9-1,d1 bsr put_bits move.w d3,d0 bra .update_after_copy .copy4 addq.l #1,com101 moveq #%101,d0 4 bytes : %101a moveq #3-1,d1 bsr put_bits move.w d2,d0 moveq #10-1,d1 bsr put_bits move.w d3,d0 bra .update_after_copy .copy_big addq.l #1,com110 moveq #%110,d0 3..258 bytes : %110na moveq #3-1,d1 bsr put_bits move.w d3,d0 subq.w #3,d0 bsr put_byte move.w d2,d0 moveq #12-1,d1 bsr put_bits move.w d3,d0 bra .update_after_copy .no_string addq.w #1,d5 if no copy then insert byte cmp.w #264,d5 if full then save insert bcs.s .nos2 bsr put_insert .nos2 moveq #1,d0 update 1 byte bra.s .update .update_after_copy lea (a0,d0.w),a4 reset un-saved ptr if copy * then update d0 bytes .update lea -4096(a0),a1 un-count pair at tail cmp.l source_ptr(pc),a1 bcs.s .up3 moveq #0,d1 movep.w (a1),d1 get byte pair move.b 1(a1),d1 add.l d1,d1 subq.w #1,(a5,d1.l) .up3 addq.w #1,a0 cmp.l source_end(pc),a0 if end of source then done beq.s .done lea -2(a0),a1 count pair at head cmp.l source_ptr(pc),a1 bcs.s .up4 moveq #0,d1 movep.w (a1),d1 get byte pair move.b 1(a1),d1 add.l d1,d1 addq.w #1,(a5,d1.l) .up4 subq.w #1,d0 bne.s .update for each byte tst.w print_counter every second bne .loop move.w #50,print_counter bsr print_status print status bcc .loop abort if key press bsr cancel_irq sec rts .done bsr put_insert save any unsaved bytes tst.w d5 bne.s .done moveq #4-1,d2 pad with 32 bits to ensure .last moveq #0,d0 final long stored bsr put_byte dbra d2,.last move.l dest_ptr,a5 move.l d6,20(a5) store checksum move.l a6,dest_end move.l a6,d0 sub.l a5,d0 move.l d0,dest_size movem.l d0-d7/a0-a6,-(sp) lea wr_tab,a0 bsr print_string move.l dest_size,d0 bsr print_number movem.l (sp)+,d0-d7/a0-a6 bsr print_status bsr cancel_irq move.l print_timer,d7 divu #50,d7 clc rts * put 'insert' bytes * entry a4=ptr to start of string * d5=no. of bytes put_insert tst.w d5 beq.s .skip cmp.w #9,d5 if 1..8 bytes then small insert bcc.s .big move.w d5,d0 subq.w #1,d0 %00nnn + bytes addq.l #1,com00 moveq #5-1,d1 bsr put_bits .small move.b (a4)+,d0 bsr put_byte subq.w #1,d5 bne.s .small .skip rts .big addq.l #1,com111 moveq #%111,d0 else big insert (9..264 bytes) moveq #3-1,d1 %111n bsr put_bits move.w d5,d2 cmp.w #264,d2 bcs.s .big2 move.w #264,d2 .big2 subq.w #1,d2 move.w d2,d0 subq.w #8,d0 bsr put_byte .big3 move.b (a4)+,d0 bsr put_byte subq.w #1,d5 dbra d2,.big3 rts * put group of bits into dest * entry d7=current long (if 1 shifted out then store) * d6=checksum * a6=dest ptr * d0=bits to put * d1=bit count-1 put_byte cmp.l #$010,d7 if 8 bits then quicker if long <24 bits bcc.s .slow lsl.l #8,d7 move.b d0,d7 rts .slow moveq #8-1,d1 put_bits eor.w #15,d1 left justify lsl.w d1,d0 eor.w #15,d1 .loop add.w d0,d0 get bit addx.l d7,d7 put bit bcs.s .save if overflow then dbra d1,.loop next bit rts .save move.l d7,(a6)+ save long cmp.l dest_end(pc),a6 if dest file too big then abort bcc.s .overflow eor.l d7,d6 update checksum moveq #1,d7 clear dbra d1,.loop next bit rts .overflow bsr print_status bsr cancel_irq bra overflow_error * search for string copy * entry a0=source * a5=counts table * exit carry clear if no copy found * carry set if copy * string_offset = backward offset to string 1..4096 * string_size = size 2..258 * string_saving = number of bits saved by packing * string_type = 0 : 2 bytes in range 1..256 * 1 : 3 bytes in range 1..512 * 2 : 4 bytes in range 1..1024 * 3 : 3..258 bytes in range 1..4096 * d5-d7/a4-a6 preserved string_offset dc.w 0 string_size dc.w 0 string_type dc.w 0 string_saving dc.w 0 no. of bits saved by best choice search_for_string lea turbo_search,a2 quick search move.l source_end(pc),d4 get bytes remaining sub.l a0,d4 skip if <2 cmp.l #2,d4 blt .fail d4=maximum size (up to 258) cmp.w #258,d4 bcs.s .sok move.w #258,d4 .sok lea -4096(a0),a3 get start of search area cmp.l source_ptr(pc),a3 if cmp.b 1(a3),d0 bne .next movem.l a0/a3,-(sp) save ptrs addq.w #2,a0 skip 1st,2nd bytes addq.w #2,a3 moveq #2,d2 count=2 cmp.w d4,d2 beq.s .end .compare cmpm.b (a0)+,(a3)+ compare bne.s .end if <> then exit addq.w #1,d2 count+1 cmp.w d4,d2 loop if count256 bytes away moveq #6,d0 saves 6 bits moveq #0,d1 type 0 bra.s .check_if_better .got_three cmp.w #512,d3 got 3 bytes bgt.s .got_big if >512 bytes away then big moveq #12,d0 saves 12 bits moveq #1,d1 type 1 bra.s .check_if_better .got_four cmp.w #1024,d3 got 4 bytes bgt.s .got_big if >1024 bytes away then big moveq #19,d0 saves 19 bits moveq #2,d1 type 2 bra.s .check_if_better .got_big move.w d2,d0  got big string lsl.w #3,d0 sub.w #23,d0 saves 8*size-23 bits moveq #3,d1 type 3 .check_if_better cmp.w string_size,d0 skip if worse saving blt.s .next move.w d3,string_offset save info move.w d2,string_size move.w d1,string_type move.w d0,string_saving cmp.w d4,d2 if size=max and max>=6 then bne.s .next search no further cmp.w #6,d2 bgt.s .done .next addq.w #1,a3 update ptr subq.w #1,d3 distance-1 bne .search if >0 then again .done tst.w string_saving if nothing found then fail beq.s .fail sec rts .fail clc rts section bss turbo_search ds.b 4096*6+12 even section text make_turbo_search lea turbo_search,a0 make table of 4096 times move.w #$6*4096+4-2,d0 cmp.b (a3)+, beq .found move.w #4096-1,d1 move.w .compar,d2 move.w .branch,d3 .loop move.w d2,(a0)+ move.w d3,(a0)+ move.w d0,(a0)+ subq.w #6,d0 dbra d1,.loop lea .fail,a1 move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ rts .compar cmp.b (a3)+,d0 .branch beq .found .fail clc rts .found sec rts *-> * print status print_timer dc.l 0 print_counter dc.w 0 old_vbl dc.l 0 setup_irq pea .si2 move.w #38,-(sp) trap #14 addq.l #6,sp rts .si2 move.l $70,old_vbl move.l #my_vbl,$70 rts cancel_irq pea .ci2 move.w #38,-(sp) trap #14 addq.l #6,sp rts .ci2 move.l old_vbl,$70 rts my_vbl addq.l #1,print_timer tst.w print_counter beq.s .skip subq.w #1,print_counter .skip move.l old_vbl,-(sp) rts screen_res dc.w 0 logbase dc.l 0 setup_screen move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,screen_res move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,logbase rts * print packing status * exit all registers preserved * carry set if key pressed print_status movem.l d0-d7/a0-a6,-(sp) move.l a0,a5 a5=source,a6=dest pointers move.l a5,d6 sub.l source_ptr,d6 move.w #rd_row,d7 bsr print_bar move.l a6,d6 sub.l dest_ptr,d6 move.w #wr_row,d7 bsr print_bar bsr get_key abort if key press beq.s .no_key movem.l (sp)+,d0-d7/a0-a6 sec rts .no_key movem.l (sp)+,d0-d7/a0-a6 clc rts print_string move.l a0,-(sp) move.w #9,-(sp) trap #1 addq.l #6,sp rts get_key move.w #$0B,-(sp) trap #1 addq.l #2,sp tst.w d0 beq.s .no move.w #$08,-(sp) trap #1 addq.l #2,sp cmp.w #'a',d0 bcs.s .no cmp.w #'z'+1,d0 bcc.s .no and.w #223,d0 .no tst.w d0 rts print_number movem.l d0-d2/a0,-(sp) move.l d0,d1 bpl.s .pos neg.l d1 if -ve then make positive move.b #'-',d0 and print - bsr .char .pos clr.w .count clear char count lea .powers,a0 for powers of ten 10 ..1 .loop move.l (a0)+,d2 if end of list then done beq.s .done move.b #'0',d0 set char = 0 cmp.l d2,d1 if number=power then sub.l d2,d1 repeated subtraction bcc.s .nozero subq.w #1,d0 adjust for correct value add.l d2,d1 .show bsr .char print char addq.w #1,.count bump count .next bra.s .loop next power .done movem.l (sp)+,d0-d2/a0 rts .char movem.l d0/a0,-(sp) move.w d0,-(sp) move.w #2,-(sp) trap #1 addq.l #4,sp movem.l (sp)+,d0/a0 rts .count dc.w 0 .powers dc.l 10 dc.l 10 dc.l 10 dc.l 10 dc.l 10 dc.l 10 dc.l 1000 dc.l 100 dc.l 10 dc.l 1 dc.l 0 print_bar move.l logbase,a0 add.w d7,a0 cmp.w #1,screen_res bcs .low beq .med bra .hi .low rts .med mulu #639,d6 move.l source_size,d5 .med_ld cmp.l #65536,d5 bcs.s .med_sd lsr.l #1,d5 lsr.l #1,d6 bra.s .med_ld .med_sd divu d5,d6 cmp.w #640,d6 bcs.s .med2 move.w #639,d6 .med2 move.w #40-1,d7 moveq #-1,d5 moveq #0,d4 .med_loop cmp.w #16,d6 bgt.s .med_fill tst.w d6 ble.s .med_blank move.w d6,d0 subq.w #1,d0 add.w d0,d0 add.w d0,d0 move.l .med_masks(pc,d0.w),(a0)+ bra.s .med_next .med_blank move.l d4,(a0)+ bra.s .med_next .med_fill move.l d5,(a0)+ .med_next sub.w #16,d6 dbra d7,.med_loop move.w #160/4-1,d7 .med_copy move.l -160(a0),(a0)+ dbra d7,.med_copy rts .med_masks dc.l $80008000,$C000C000,$E000E000,$F000F000 dc.l $F800F800,$FC00FC00,$FE00FE00,$FF00FF00 dc.l $FF80FF80,$FFC0FFC0,$FFE0FFE0,$FFF0FFF0 dc.l $FFF8FFF8,$FFFCFFFC,$FFFEFFFE,$F .hi rts * unpack file include qunpack.s * get file * entry a0=filename * exit carry set if error * a0=address * d0=length get_file move.l a1,.addr attempt to open file move.w #0,-(sp) READ ONLY move.l a0,-(sp) move.w #$3D,-(sp) trap #1 addq.l #8,sp tst.l d0 error ? bmi .error move.w d0,.handle move.w #2,-(sp) move file pointer to end move.w .handle,-(sp) move.l #0,-(sp) move.w #$42,-(sp) trap #1 add.l #10,sp now D0=length of file move.l d0,.length bsr alloc allocate memory bcc.s .ok bsr .close bra memory_error .ok move.l a0,.addr move.w #0,-(sp) move file pointer to start move.w .handle,-(sp) move.l #0,-(sp) move.w #$42,-(sp) trap #1 add.l #10,sp move.l .addr,-(sp) read file to address move.l .length,-(sp) move.w .handle,-(sp) move.w #$3F,-(sp) trap #1 add.l #12,sp bsr .close move.l .addr,a0 move.l .length,d0 clc rts .error sec rts .close move.w .handle,-(sp) close file move.w #$3E,-(sp) trap #1 addq.l #4,sp rts .addr dc.l 0 .handle dc.w 0 .length dc.l 0 * put file * entry a0=filename * a1=address * d0=length * exit carry set if error put_file move.l a0,.name save parameters move.l a1,.addr move.l d0,.length bsr delete_file delete if exists move.w #0,-(sp) CREATE new file move.l .name,-(sp) move.w #$3C,-(sp) trap #1 addq.l #8,sp tst.l d0 error ? bmi .error move.w d0,.handle move.w #0,-(sp) move file pointer to start move.w .handle,-(sp) move.l #0,-(sp) move.w #$42,-(sp) trap #1 add.l #10,sp move.l .addr,-(sp) write to file move.l .length,-(sp) move.w .handle,-(sp) move.w #$40,-(sp) trap #1 add.l #12,sp move.l d0,-(sp) move.w .handle,-(sp) close file move.w #$3E,-(sp) trap #1 addq.l #4,sp move.l (sp)+,d0 bmi .error clc rts .error sec rts .name dc.l 0 .addr dc.l 0 .handle dc.w 0 .length dc.l 0 rts * allocate memory * entry d0=amount * exit carry set if no room * a0=address * d0=amount alloc move.l d0,.length move.l d0,-(sp) move.w #$48,-(sp) trap #1 addq.l #6,sp tst.l d0 bmi.s .error move.l d0,a0 move.l .length,d0 clc rts .error sec rts .length dc.l 0 * delete file * entry a0=filename terminated by 0 * exit carry clear if deleted ok * carry set if error, d0=error code delete_file move.l a0,-(sp) move.w #$41,-(sp) trap #1 add.l #6,sp tst.l d0 bmi .error clc rts .error sec rts  format 0-,1-,2- list + * QPAC : quick file packer v3.2 * with offset table string search and executable header list - test_version equ 0 *-> * packed file format: * * the packed file consists of a 24 byte header + packed bit-streamed data * * header: * dc.b 'QPAC2-JMP(c)1989' * dc.l length of unpacked file * dc.l checksum of unpacked file (=XOR of dest bytes) * bit-streamed data: * %00nnn insert next 1..8 bytes * %01a,%aa copy 2 bytes from ptr-(1..256) * %100a,%a copy 3 bytes from ptr-(=1..512) * %101a,%a copy 4 bytes from ptr-(=1..1024) * %110n,%nnna,%a copy 3..258 bytes from ptr-(1..4096) * %111n,%nnn insert next 9..264 bytes * *-> ifne test_version opt x+ endc sec macro ori #1,ccr endm clc macro andi #~1,ccr endm section bss stack ds.l 256 stack_end error_sp ds.l 1 command_line ds.l 1 input_buffer ds.b 80+1 even input_cursor ds.w 1 section data ifne test_version demo_file dc.b .end-.start .start dc.b 'qpac3.ttp' .end dc.b 0,0,0,0 even endc header_name dc.b 'QPAC2-JMP(C)1989' even section text move.l 4(sp),a3 standard header move.l $C(a3),d0 add.l $14(a3),d0 add.l $1C(a3),d0 add.l #$100,d0 lea stack_end,sp move.l d0,-(sp) move.l a3,-(sp) ifeq test_version add.w #128,a3 move.l a3,command_line elseif move.l #demo_file,command_line endc clr.w -(sp) move.w #$4A,-(sp) trap #1 add.l #12,sp bsr setup_screen bsr.s start exit clr.w -(sp) move.w #$4C,-(sp) trap #1 start move.l sp,error_sp save error stack move.l command_line,a0 tst.b (a0) beq load_error moveq #0,d0 move.b (a0)+,d0 clr.b (a0,d0.w) move.l a0,command_line bsr get_file bcs load_error move.l a0,source_ptr move.l d0,source_size add.l d0,a0 move.l a0,source_end bsr set_file_type bsr scan_file lea title,a0 bsr print_string move.l command_line,a0 bsr print_string lea data_mess,a0 tst.w file_type beq.s .isdata lea exec_mess,a0 .isdata bsr print_string lea title2,a0 bsr print_string move.l source_size,d0 add.l #1024,d0 bsr allocmem bcs memory_error move.l a0,dest_ptr move.l d0,dest_size add.l d0,a0 move.l a0,dest_end bsr pack_file done bcs abort_error lea time_mess,a0 bsr print_string moveq #0,d0 move.w d7,d0 bsr print_number lea time_mess2,a0 bsr print_string move.l dest_ptr,a0 move.l offsets_ptr,a1 use offsets table clr.w colour_unpack bsr unpack_file for unpack workspace undone tst.w d0 bne expand_error move.l source_ptr,a0 error if not identical to source move.l offsets_ptr,a1 move.l source_size,d7 .compare cmpm.b (a0)+,(a1)+ bne expand_error subq.l #1,d7 bne.s .compare lea perc_mess,a0 bsr print_string move.l source_size,d5 move.l dest_size,d6 move.l d6,d0 *100 add.l d6,d6 add.l d6,d6 lsl.l #5,d0 add.l d0,d6 add.l d0,d6 add.l d0,d6 bsr div32 moveq #0,d0 move.w d6,d0 bsr print_number lea perc_mess2,a0 bsr print_string clr.w input_cursor move.l command_line,a0 dest name = source name + .QP2 lea input_buffer,a1 .copy move.b (a0)+,d0 beq.s .copy2 cmp.b #'.',d0 beq.s .copy2 move.b d0,(a1)+ addq.w #1,input_cursor bra.s .copy .copy2 move.b #'.',(a1)+ move.b #'q',(a1)+ move.b #'p',(a1)+ move.b #'2',(a1)+ addq.w #4,input_cursor clr.b (a1) lea input_buffer,a0 bsr print_string .input bsr get_key beq.s .input cmp.w #27,d0 beq quit cmp.w #13,d0 beq .put cmp.w #8,d0 beq.s .bs cmp.w #'\',d0 beq.s .char cmp.w #':',d0 beq.s .char cmp.w #'.',d0 beq.s .char cmp.w #'_',d0 beq.s .char cmp.w #'0',d0 bcs.s .input cmp.w #'9',d0 bls.s .char cmp.w #'A',d0 bcs.s .input cmp.w #'Z',d0 bls.s .char cmp.w #'a',d0 bcs.s .input cmp.w #'z',d0 bhi.s .input .char lea input_buffer,a0 move.w input_cursor,d1 cmp.w #80,d1 beq.s .input move.b d0,(a0,d1.w) clr.b 1(a0,d1.w) addq.w #1,input_cursor bsr outch bra.s .input .bs lea input_buffer,a0 move.w input_cursor,d1 beq .input clr.b -1(a0,d1.w) subq.w #1,input_cursor move.w #8,d0 bsr outch move.w #' ',d0 bsr outch move.w #8,d0 bsr outch bra .input .put lea input_buffer,a0 tst.b (a0) beq quit tst.w file_type bne.s .exec .data lea input_buffer,a0 move.l dest_ptr,a1 move.l dest_size,d0 bsr put_data_file bcs.s save_error rts .exec lea exec_mess2,a0 bsr print_string .wait bsr get_key beq.s .wait cmp.w #27,d0 beq quit cmp.w #'Y',d0 beq.s .exec2 cmp.w #'y',d0 bne.s .data .exec2 lea exec_mess3,a0 bsr print_string .wait2 bsr get_key beq.s .wait2 cmp.w #27,d0 beq quit cmp.w #'Y',d0 beq.s .exec3a cmp.w #'y',d0 bne.s .exec3b .exec3a move.w #1,colour_unpack .exec3b lea input_buffer,a0 move.l dest_ptr,a1 move.l dest_size,d0 bsr put_exec_file bcs.s save_error rts save_error lea save_mess,a0 bra.s exit_fail memory_error lea memory_mess,a0 bra.s exit_fail load_error lea load_mess,a0 bra.s exit_fail expand_error lea expand_mess,a0 bra.s exit_fail abort_error lea abort_mess,a0 bra.s exit_fail overflow_error lea overflow_mess,a0 exit_fail move.l error_sp,sp bsr print_string lea key_mess,a0 bsr print_string .wait bsr get_key beq.s .wait quit rts title dc.b 27,'E',27,'f' dc.b 'QPAC v3.2 - The Fastest ST File Packer - by John M Phillips (C) 16 May 1990',13,10,13,10 dc.b 'Press any key to abort',13,10,13,10 dc.b 'Source file:',0 data_mess dc.b 27,'Y',' '+4,' '+40,'File type: Data',0 exec_mess dc.b 27,'Y',' '+4,' '+40,'File type: Executable',0 title2 dc.b 27,'Y',' '+6,' ' dc.b 'Source ',13,10,13,10 dc.b 'Reading ',13,10,13,10 dc.b 'Writing ',13,10,13,10 src_tab dc.b 27,'Y',' '+6,' '+8,0 rd_tab dc.b 27,'Y',' '+8,' '+8,0 wr_tab dc.b 27,'Y',' '+10,' '+8,0 even src_row equ (7*8+3)*160 rd_row equ (9*8+3)*160 wr_row equ (11*8+3)*160 time_mess dc.b 27,'Y',' '+13,' ' dc.b 'Time taken = ',0 time_mess2 dc.b ' seconds',13,10,0 perc_mess dc.b 'Packed to ',0 perc_mess2 dc.b '% of original',13,10,13,10 dc.b 'Enter Filename (Return to save, ESC to abort)',13,10,13,10 dc.b '?',0 abort_mess dc.b 27,'Y',' '+13,' ','Aborted',0 overflow_mess dc.b 27,'Y',' '+13,' ','Packed file longer than original',0 expand_mess dc.b 13,10,'Packed file failed to unpack',0 load_mess dc.b 27,'E',27,'f','Error while loading source file',0 memory_mess dc.b 27,'E',27,'f','Insufficient memory for packing',0 save_mess dc.b 27,'E',27,'f','Error while saving file',0 key_mess dc.b 13,10,'press any key to exit',0 exec_mess2 dc.b 13,10,13,10,'Save as executable packed file ? Y/N , ESC to abort',0 exec_mess3 dc.b 13,10,'Unpack with flashing border ? Y/N , ESC to abort',0 even file_type dc.w 0 0=data/1=executable source_ptr dc.l 0 ptrs to files source_end dc.l 0 source_size dc.l 0 dest_ptr dc.l 0 dest_end dc.l 0 dest_size dc.l 0 offsets_ptr dc.l 0 ptr to offset table for fast 2-byte string search offsets_size dc.l 0 com00 dc.l 0 com01 dc.l 0 com100 dc.l 0 com101 dc.l 0 com110 dc.l 0 com111 dc.l 0 * pack file * entry source_ptr/end/size,dest_ptr * exit dest_end/size * carry set if aborted by key press * d7=time taken (in seconds) pack_file bsr setup_irq clr.l print_timer reset timer move.l dest_ptr(pc),a6 a6=destination lea header_name(pc),a0 move.l (a0)+,(a6)+ insert id move.l (a0)+,(a6)+ move.l (a0)+,(a6)+ move.l (a0)+,(a6)+ move.l source_size(pc),(a6)+ insert unpacked size clr.l (a6)+ skip checksum move.l source_ptr(pc),a0 a0=source move.l offsets_ptr(pc),a5 a5=offsets table moveq #1,d7 d7=destination long moveq #0,d6 d6=checksum move.l a0,a4 a4=ptr to last un-saved byte moveq #0,d5 d5=no. of un-saved bytes movem.l d0-d7/a0-a6,-(sp) lea src_tab,a0 bsr print_string move.l source_size,d0 bsr print_number move.l source_size,d6 move.w #src_row,d7 bsr print_bar movem.l (sp)+,d0-d7/a0-a6 bsr print_status move.w #50,print_counter .loop tst.w (a5) any matches ? beq .no_string bsr search_for_string search for best saving bcc .no_string if copy then save insert .save bsr put_insert tst.w d5 (may require multiple save) bne.s .save movem.w string_offset,d2-d4 get offset,size,type subq.w #1,d2 size-1 for range 0..255/../4095 cmp.w #1,d4 save according to size bcs.s .copy2 beq.s .copy3 cmp.w #2,d4 beq.s .copy4 bra.s .copy_big .copy2 addq.l #1,com01 moveq #%01,d0 2 bytes : %01a moveq #2-1,d1 bsr put_bits move.w d2,d0 bsr put_byte bra.s .next .copy3 addq.l #1,com100 moveq #%100,d0 3 bytes : %100a moveq #3-1,d1 bsr put_bits move.w d2,d0 moveq #9-1,d1 bsr put_bits bra.s .next .copy4 addq.l #1,com101 moveq #%101,d0 4 bytes : %101a moveq #3-1,d1 bsr put_bits move.w d2,d0 moveq #10-1,d1 bsr put_bits bra.s .next .copy_big addq.l #1,com110 moveq #%110,d0 3..258 bytes : %110na moveq #3-1,d1 bsr put_bits move.w d3,d0 subq.w #3,d0 bsr put_byte move.w d2,d0 moveq #12-1,d1 bsr put_bits bra.s .next .no_string addq.w #1,d5 if no copy then insert byte cmp.w #264,d5 if full then save insert bcs.s .nos2 bsr put_insert .nos2 moveq #1,d3 bra.s .next2 .next add.w d3,a4 update un-saves ptr after copy .next2 add.w d3,a0 bump source ptr by n bytes add.w d3,d3 bump offsets ptr by n words add.w d3,a5 cmp.l source_end(pc),a0 if >=end then done bge.s .done tst.w print_counter every second bne .loop move.w #50,print_counter bsr print_status print status bcc .loop abort if key press bsr cancel_irq sec rts .done bsr.s put_insert save any unsaved bytes tst.w d5 bne.s .done moveq #4-1,d2 pad with 32 bits to ensure .last moveq #0,d0 final long stored bsr put_byte dbra d2,.last move.l dest_ptr,a5 move.l d6,20(a5) store checksum move.l a6,dest_end move.l a6,d0 sub.l a5,d0 move.l d0,dest_size movem.l d0-d7/a0-a6,-(sp) lea wr_tab,a0 bsr print_string move.l dest_size,d0 bsr print_number movem.l (sp)+,d0-d7/a0-a6 bsr print_status bsr cancel_irq move.l print_timer,d7 divu #50,d7 clc rts * put 'insert' bytes * entry a4=ptr to start of string * d5=no. of bytes put_insert tst.w d5 beq.s .skip cmp.w #9,d5 if 1..8 bytes then small insert bcc.s .big move.w d5,d0 subq.w #1,d0 %00nnn + bytes addq.l #1,com00 moveq #5-1,d1 bsr.s put_bits .small move.b (a4)+,d0 bsr.s put_byte subq.w #1,d5 bne.s .small .skip rts .big addq.l #1,com111 moveq #%111,d0 else big insert (9..264 bytes) moveq #3-1,d1 %111n bsr.s put_bits move.w d5,d2 cmp.w #264,d2 bcs.s .big2 move.w #264,d2 .big2 subq.w #1,d2 move.w d2,d0 subq.w #8,d0 bsr.s put_byte .big3 move.b (a4)+,d0 bsr.s put_byte subq.w #1,d5 dbra d2,.big3 rts * put group of bits into dest * entry d7=current long (if 1 shifted out then store) * d6=checksum * a6=dest ptr * d0=bits to put * d1=bit count-1 put_byte cmp.l #$010,d7 if 8 bits then quicker if long <24 bits bcc.s .slow lsl.l #8,d7 move.b d0,d7 rts .slow moveq #8-1,d1 put_bits eor.w #15,d1 left justify lsl.w d1,d0 eor.w #15,d1 .loop add.w d0,d0 get bit addx.l d7,d7 put bit bcs.s .save if overflow then dbra d1,.loop next bit rts .save move.l d7,(a6)+ save long cmp.l dest_end(pc),a6 if dest file too big then abort bcc.s .overflow eor.l d7,d6 update checksum moveq #1,d7 clear dbra d1,.loop next bit rts .overflow bsr print_status bsr cancel_irq bra overflow_error * search for string copy * entry a0=source * a5=offsets * exit carry clear if no copy found * carry set if copy * string_offset = backward offset to string 1..4096 * string_size = size 2..258 * string_saving = number of bits saved by packing * string_type = 0 : 2 bytes in range 1..256 * 1 : 3 bytes in range 1..512 * 2 : 4 bytes in range 1..1024 * 3 : 3..258 bytes in range 1..4096 * d5-d7/a4-a6 preserved string_offset dc.w 0 string_size dc.w 0 string_type dc.w 0 string_saving dc.w 0 no. of bits saved by best choice search_for_string move.l source_end(pc),d4 get bytes remaining sub.l a0,d4 skip if <2 cmp.l #2,d4 blt .fail d4=maximum size (up to 258) cmp.l #258,d4 bcs.s .sok move.l #258,d4 .sok move.l a5,a1 a1=ptr to chain of offsets move.l a0,a3 a3=ptr to matching strings clr.w string_saving clear bits saved .search move.w (a1),d0 get offset to previous string beq .done if =0 then no more matches add.w d0,a3 goto matching string add.w d0,d0 step back thru offset chain add.w d0,a1 for next time round loop move.l a0,d3 sub.l a3,d3 calculate distance cmp.l #4096,d3 if >max then exit bgt .done movem.l a0/a3,-(sp) save ptrs addq.w #2,a0 skip 1st,2nd bytes addq.w #2,a3 moveq #2,d2 count=2 cmp.w d4,d2 beq.s .end .compare cmpm.b (a0)+,(a3)+ compare bne.s .end  if <> then exit addq.w #1,d2 count+1 cmp.w d4,d2 loop if count256 bytes away moveq #6,d0 saves 6 bits moveq #0,d1 type 0 bra.s .check_if_better .got_three cmp.w #512,d3 got 3 bytes bgt.s .got_big if >512 bytes away then big moveq #12,d0 saves 12 bits moveq #1,d1 type 1 bra.s .check_if_better .got_four cmp.w #1024,d3 got 4 bytes bgt.s .got_big if >1024 bytes away then big moveq #19,d0 saves 19 bits moveq #2,d1 type 2 bra.s .check_if_better .got_big move.w d2,d0 got big string lsl.w #3,d0 sub.w #23,d0 saves 8*size-23 bits moveq #3,d1 type 3 .check_if_better cmp.w string_size,d0 skip if worse saving ble.s .next move.w d3,string_offset save info move.w d2,string_size move.w d1,string_type move.w d0,string_saving cmp.w d4,d2 if size=max and max>=6 then bne.s .next search no further cmp.w #6,d2 bgt.s .done .next bra .search .done tst.w string_saving if nothing found then fail beq.s .fail sec rts .fail clc rts * scan source file and make offsets table * takes about 1 second per 50k of source scan_file move.l source_size,d0 source_size words for offsets table add.l d0,d0 bsr allocmem bcs memory_error move.l a0,offsets_ptr move.l d0,offsets_size move.l #4*65536,d0 64K longs for address list (temporary) bsr allocmem bcs memory_error move.l a0,.buffer_ptr move.l .buffer_ptr,a0 wipe buffer move.w #65536-1,d0 .clear clr.l (a0)+ dbra d0,.clear move.l offsets_ptr,a0 wipe offsets move.l offsets_size,d7 lsr.l #1,d7 .clear2 clr.w (a0)+ subq.l #1,d7 bne.s .clear2 move.l source_ptr,a0 move.l offsets_ptr,a1 move.l .buffer_ptr,a2 move.l #-4096,d6 max distance move.l source_size,d7 subq.l #1,d7 for each 2 byte string .scan moveq #0,d0 movep.w (a0),d0 move.b 1(a0),d0 lsl.l #2,d0 move.l (a2,d0.l),d1 index address of previous occurence beq.s .store if exists then sub.l a0,d1 convert to relative offset cmp.l d6,d1 if >=max distance then blt.s .store move.w d1,(a1) store offset .store move.l a0,(a2,d0.l) store address of latest occurence addq.w #1,a0 source+1 addq.w #2,a1 offset+2 subq.l #1,d7 next source bne.s .scan move.l .buffer_ptr,a0 bsr freemem bcs memory_error rts .buffer_ptr dc.l 0 *-> * print status print_timer dc.l 0 print_counter dc.w 0 old_vbl dc.l 0 setup_irq pea .si2 move.w #38,-(sp) trap #14 addq.l #6,sp rts .si2 move.l $70.w,old_vbl move.l #my_vbl,$70.w rts cancel_irq pea .ci2 move.w #38,-(sp) trap #14 addq.l #6,sp rts .ci2 move.l old_vbl,$70.w rts my_vbl addq.l #1,print_timer tst.w print_counter beq.s .skip subq.w #1,print_counter .skip move.l old_vbl,-(sp) rts screen_res dc.w 0 logbase dc.l 0 setup_screen move.w #4,-(sp) trap #14 addq.l #2,sp move.w d0,screen_res move.w #3,-(sp) trap #14 addq.l #2,sp move.l d0,logbase rts * print packing status * exit all registers preserved * carry set if key pressed print_status movem.l d0-d7/a0-a6,-(sp) move.l a0,a5 a5=source,a6=dest pointers move.l a5,d6 sub.l source_ptr,d6 move.w #rd_row,d7 bsr print_bar move.l a6,d6 sub.l dest_ptr,d6 move.w #wr_row,d7 bsr print_bar bsr.s get_key abort if key press beq.s .no_key movem.l (sp)+,d0-d7/a0-a6 sec rts .no_key movem.l (sp)+,d0-d7/a0-a6 clc rts print_string move.l a0,-(sp) move.w #9,-(sp) trap #1 addq.l #6,sp rts get_key move.w #$0B,-(sp) trap #1 addq.l #2,sp tst.w d0 beq.s .no move.w #$08,-(sp) trap #1 addq.l #2,sp .no tst.w d0 rts print_number movem.l d0-d2/a0,-(sp) move.l d0,d1 bpl.s .pos neg.l d1 if -ve then make positive move.b #'-',d0 and print - bsr.s outch .pos clr.w .count clear char count lea .powers,a0 for powers of ten 10 ..1 .loop move.l (a0)+,d2 if end of list then done beq.s .done move.b #'0',d0 set char = 0 cmp.l d2,d1 if number=power then sub.l d2,d1 repeated subtraction bcc.s .nozero subq.w #1,d0 adjust for correct value add.l d2,d1 .show bsr.s outch print char addq.w #1,.count bump count .next bra.s .loop next power .done movem.l (sp)+,d0-d2/a0 rts .count dc.w 0 .powers dc.l 10 dc.l 10 dc.l 10 dc.l 10 dc.l 10 dc.l 10 dc.l 1000 dc.l 100 dc.l 10 dc.l 1 dc.l 0 outch movem.l d0/a0,-(sp) move.w d0,-(sp) move.w #2,-(sp) trap #1 addq.l #4,sp movem.l (sp)+,d0/a0 rts print_bar move.l logbase,a0 add.w d7,a0 cmp.w #1,screen_res bcs.s .low beq.s .med bra .hi .low rts .med move.l d6,d5 *640 add.l d6,d6 add.l d6,d6 add.l d5,d6 add.l d6,d6 lsl.l #6,d6 move.l source_size,d5 bsr div32 cmp.w #640,d6 bcs.s .med2 move.w #639,d6 .med2 move.w #40-1,d7 moveq #-1,d5 moveq #0,d4 .med_loop cmp.w #16,d6 bgt.s .med_fill tst.w d6 ble.s .med_blank move.w d6,d0 subq.w #1,d0 add.w d0,d0 add.w d0,d0 move.l .med_masks(pc,d0.w),(a0)+ bra.s .med_next .med_blank move.l d4,(a0)+ bra.s .med_next .med_fill move.l d5,(a0)+ .med_next sub.w #16,d6 dbra d7,.med_loop move.w #160/4-1,d7 .med_copy move.l -160(a0),(a0)+ dbra d7,.med_copy rts .med_masks dc.l $80008000,$C000C000,$E000E000,$F000F000 dc.l $F800F800,$FC00FC00,$FE00FE00,$FF00FF00 dc.l $FF80FF80,$FFC0FFC0,$FFE0FFE0,$FFF0FFF0 dc.l $FFF8FFF8,$FFFCFFFC,$FFFEFFFE,$F .hi rts * 32-bit signed division * entry d5=32 bit divisor * d6=32 bit dividend * exit d6=32 bit quotient div32 movem.l d2-d4,-(sp) tst.l d5 beq.s .exit move.l d6,d4 eor.l d5,d4 tst.l d5 bpl.s .pos0 neg.l d5 .pos0 tst.l d6 bpl.s .pos1 neg.l d6 .pos1 moveq #32-1,d2 move.l d5,d3 moveq #0,d5 .norm add.l d3,d3 dbcs d2,.norm roxr.l #1,d3 sub.w #31,d2 neg.w d2 .loop add.l d5,d5 cmp.l d3,d6 bcs.s .next addq.l #1,d5 sub.l d3,d6 .next lsr.l #1,d3 dbra d2,.loop tst.l d4 bpl.s .exit neg.l d5 .exit move.l d5,d6 movem.l (sp)+,d2-d4 rts * get file * entry a0=filename * exit carry set if error * a0=address * d0=length get_file move.l a1,.addr attempt to open file move.w #0,-(sp) READ ONLY move.l a0,-(sp) move.w #$3D,-(sp) trap #1 addq.l #8,sp tst.l d0 error ? bmi .error move.w d0,.handle move.w #2,-(sp) move file pointer to end move.w .handle,-(sp) move.l #0,-(sp) move.w #$42,-(sp) trap #1 add.l #10,sp now D0=length of file move.l d0,.length bsr allocmem allocate memory bcc.s .ok bsr.s .close bra memory_error .ok move.l a0,.addr move.w #0,-(sp) move file pointer to start move.w .handle,-(sp) move.l #0,-(sp) move.w #$42,-(sp) trap #1 add.l #10,sp move.l .addr,-(sp) read file to address move.l .length,-(sp) move.w .handle,-(sp) move.w #$3F,-(sp) trap #1 add.l #12,sp bsr.s .close move.l .addr,a0 move.l .length,d0 clc rts .error sec rts .close move.w .handle,-(sp) close file move.w #$3E,-(sp) trap #1 addq.l #4,sp rts .addr dc.l 0 .handle dc.w 0 .length dc.l 0 * put data file * entry a0=filename * a1=address * d0=length * exit carry set if error put_data_file move.l a0,.name save parameters move.l a1,.addr move.l d0,.length move.l .name,-(sp) DELETE (just to be safe) move.w #$41,-(sp) trap #1 add.l #6,sp move.w #0,-(sp) CREATE new file move.l .name,-(sp) move.w #$3C,-(sp) trap #1 addq.l #8,sp tst.l d0 error ? bmi.s .error cmp.l #6,d0 valid handle ? bcs .error cmp.l #46,d0 bcc .error move.w d0,.handle move.w #0,-(sp) move file pointer to start move.w .handle,-(sp) move.l #0,-(sp) move.w #$42,-(sp) trap #1 add.l #10,sp move.l .addr,-(sp) write to file move.l .length,-(sp) move.w .handle,-(sp) move.w #$40,-(sp) trap #1 add.l #12,sp move.l d0,-(sp) move.w .handle,-(sp) close file move.w #$3E,-(sp) trap #1 addq.l #4,sp move.l (sp)+,d0 bmi.s .error clc rts .error sec rts .name dc.l 0 .addr dc.l 0 .handle dc.w 0 .length dc.l 0 * allocate memory * entry d0=amount * exit carry set if no room * a0=address * d0=amount allocmem move.l d0,.length move.l d0,-(sp) move.w #$48,-(sp) trap #1 addq.l #6,sp tst.l d0 bmi.s .error move.l d0,a0 move.l .length,d0 clc rts .error sec rts .length dc.l 0 * free memory previously allocated * entry a0=address * exit carry set if error freemem move.l a0,-(sp) move.w #$49,-(sp) trap #1 addq.l #6,sp tst.l d0 bmi.s .error clc rts .error sec rts * set file type (executable if extension TOS,PRG or APP) set_file_type clr.w file_type move.l command_line,a0 moveq #0,d0 .scan move.b (a0)+,d0 beq.s .skip cmp.b #'.',d0 bne.s .scan .ext move.b (a0)+,d1 beq.s .ext2 lsl.l #8,d0 move.b d1,d0 bra.s .ext .ext2 cmp.l #'.TOS',d0 beq .exec cmp.l #'.PRG',d0 beq .exec cmp.l #'.TTP',d0 beq .exec cmp.l #'.tos',d0 beq .exec cmp.l #'.prg',d0 beq .exec cmp.l #'.ttp',d0 bne .skip .exec move.w #1,file_type .skip rts * put executable file * entry a0=filename * a1=address * d0=length * exit carry set if error put_exec_file move.l a0,.name save parameters move.l a1,.addr move.l d0,.length move.l .name,-(sp) DELETE (just to be safe) move.w #$41,-(sp) trap #1 add.l #6,sp move.w #0,-(sp) CREATE new file move.l .name,-(sp) move.w #$3C,-(sp) trap #1 addq.l #8,sp tst.l d0 error ? bmi .error cmp.l #6,d0 valid handle ? bcs .error cmp.l #46,d0 bcc .error move.w d0,.handle move.w #0,-(sp) move file pointer to start move.w .handle,-(sp)  move.l #0,-(sp) move.w #$42,-(sp) trap #1 add.l #10,sp move.l .length,d0 set text size in header add.l #exec_header_end-exec_text,d0 move.l d0,eh_text move.l #exec_code_end-exec_code,d0 set data size in header move.l d0,eh_data pea exec_header write header move.l #exec_header_end-exec_header,-(sp) move.w .handle,-(sp) move.w #$40,-(sp) trap #1 add.l #12,sp tst.l d0 bmi.s .close move.l .addr,-(sp) write data to file move.l .length,-(sp) move.w .handle,-(sp) move.w #$40,-(sp) trap #1 add.l #12,sp tst.l d0 bmi.s .close pea exec_code write unpacker code move.l #exec_code_end-exec_code,-(sp) move.w .handle,-(sp) move.w #$40,-(sp) trap #1 add.l #12,sp .close move.l d0,-(sp) move.w .handle,-(sp) close file move.w #$3E,-(sp) trap #1 addq.l #4,sp move.l (sp)+,d0 bmi.s .error clc rts .error sec rts .name dc.l 0 .addr dc.l 0 .handle dc.w 0 .length dc.l 0 opt p+ must be PC-relative exec_header dc.w $601A identifier eh_text dc.l 0 text (header + packed file) eh_data dc.l 0 data (unpacker) dc.l 0 bss dc.l 0 symbols dc.l 0 reserved dc.l 0 reserved dc.w -1 relocation (-1=none) exec_text move.l a6,-(sp) save a6 move.l 8(sp),a6 get basepage move.l $10(a6),-(sp) get start of data rts goto unpacker exec_copy move.w -(a0),-(a1) subq.l #1,d0 bne.s exec_copy jmp (a2) exec_header_end * <--- packed file goes in here exec_code lea reg_save(pc),a6 save all registers movem.l d0-d7/a0-a5,(a6) move.l (sp)+,reg_a6-reg_save(a6) old a6 was on stack move.l 4(sp),a6 get basepage lea exec_code_end(pc),a0 get end of file move.l 4(a6),a1 get end of TPA lea -$100(a1),a1 allow for stack move.l $C(a6),d0 get text+data size add.l $14(a6),d0 lsr.l #1,d0 word count move.l a1,a2 sub.w #exec_code_end-.here,a2 a2=return address move.l 8(a6),a3 jump down to copier to add.w #exec_copy-exec_text,a3 avoid wiping over self jmp (a3) (copies up to high memory) .here move.l a1,a0 add.w #exec_header_end-exec_text,a0 a0=high copy of packed file move.l 8(a6),a1 a1=start of text bsr unpack_file unpack file move.l d7,d0 d0=length move.l 4(sp),a6 get basepage again move.l 8(a6),a0 get header move.l 2(a0),d3 length of text move.l 6(a0),d4 length of data move.l 10(a0),d5 length of bss move.l 14(a0),d6 length of symbols move.w 26(a0),d7 relocation flag lea 28(a0),a1 move.l a0,a2 a2=address of reloc info add.l d3,a2  (when copied down !!) add.l d4,a2 add.l d6,a2 addq.w #4,d0 copy down to remove header lsr.l #2,d0 .copydown move.l (a1)+,(a0)+ subq.l #1,d0 bne.s .copydown cmp.w #-1,d7 beq .noreloc move.l 8(a6),a0 relocate move.l a0,d2 move.l (a2)+,d0 get long index to first addr beq .noreloc if 0 then run add.l d0,a0 moveq #0,d1 .reloc add.l d2,(a0) add relocation offset .rbyte move.b (a2)+,d1 get byte beq.s .noreloc if 0 then end of list so run cmp.b #1,d1 if 1 then add 254 to address bne.s .rsmall lea 254(a0),a0 bra.s .rbyte .rsmall add.w d1,a0 else add byte 2..253 to address bra.s .reloc and relocate address .noreloc move.l d3,$C(a6) set text size move.l 8(a6),d0 set data address add.l d3,d0 move.l d0,$10(a6) move.l d4,$14(a6) set data size add.l d4,d0 move.l d0,$18(a6) set bss address move.l d5,$1C(a6) set bss length move.l $18(a6),a0 wipe bss (if any) move.l d5,d0 beq.s .nobss addq.w #4,d0 lsr.l #2,d0 .wipebss clr.l (a0)+ subq.l #1,d0 bne.s .wipebss .nobss move.l 8(a6),-(sp) save start address movem.l reg_save(pc),d0-d7/a0-a6 restore registers rts jump to program reg_save ds.l 14 reg_a6 ds.l 1 * unpack file * entry a0=addr of packed file * a1=addr of unpacked file * exit d0=error code * 0 = ok * 1 = not a QPAC2 file * 2 = checksum failed * 3 = file overflowed * d7=length * note self-contained, position independent get_bit macro add.l d6,d6 get bit bne.s .gb\@ if empty then move.l (a0)+,d6 get next long eor.l d6,d7 update checksum move.b #%10,ccr get bit and set marker addx.l d6,d6 .gb\@ endm colour_unpack dc.w 0 0=quiet/1=flash border unpack_file move.l a0,d6 move.l a1,d7 .v lea .v(pc),a2 move.w colour_unpack(pc),d0 beq.s .nobord move.l .pcode1(pc),.patch1-.v(a2) move.l .pcode2(pc),.next-.v(a2) move.l .pcode3(pc),.patch2-.v(a2) pea .start(pc) move.w #38,-(sp) trap #14 addq.l #6,sp rts .nobord move.l .npcode(pc),d0 move.l d0,.patch1-.v(a2) move.l d0,.next-.v(a2) move.l d0,.patch2-.v(a2) .start move.l d6,a0 move.l d7,a1 move.l a1,a6 lea .head(pc),a2 moveq #4-1,d0 .valid cmpm.l (a0)+,(a2)+ bne .error1 dbra d0,.valid .patch1 move.w $F8240.w,d5 save border colour move.l a1,a2 end of dest=dest+length of unpacked file add.l (a0)+,a2 move.l (a0)+,d7 d7=checksum moveq #0,d6 empty source .loop get_bit bcs .com1xx get_bit bcs .com01 .com00 moveq #0,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 .com00_loop get_bit command %00nnn, insert 1..8 bytes addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 move.b d0,(a1)+ dbra d2,.com00_loop bra .next .com01 moveq #8-1,d1 command %01a, copy 2 bytes moveq #2-1,d2 bra.s .copy .com1xx get_bit bcs.s .com11x get_bit bcs.s .com101 .com100 moveq #9-1,d1 command %100a..a, copy 3 bytes moveq #3-1,d2 bra.s .copy .com101 moveq #10-1,d1 command %101a..a, copy 4 bytes moveq #4-1,d2 bra.s .copy .com11x get_bit bcs.s .com111 .com110 bsr.s .get_byte command %110n..na..a, copy 3..258 bytes addq.w #3-1,d2 moveq #12-1,d1 .copy moveq #0,d0 .copy2 get_bit addx.w d0,d0 dbra d1,.copy2 lea -1(a1),a3 sub.w d0,a3 copy from dest-offset-1 .copy3 move.b (a3)+,(a1)+ dbra d2,.copy3 .next move.w a1,$F8240.w alter border cmp.l a2,a1 bcs .loop .patch2 move.w d5,$F8240.w restore border bra.s .done .com111 bsr.s .get_byte command %111n..n, insert 9..264 bytes addq.w #9-1,d2 bra .com00_loop .done bne.s .error3 move.l d7,d0 move.l a2,d7 start sub.l a6,d7 end tst.l d0 bne.s .error2 rts .error1 moveq #1,d0 rts .error2 moveq #2,d0 rts .error3 moveq #3,d0 rts .get_byte moveq #0,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 rts .pcode1 move.w $F8240.w,d5 .pcode2 move.w a1,$F8240.w .pcode3 move.w d5,$F8240.w .npcode nop nop .head dc.b 'QPAC2-JMP(C)1989' even exec_code_end !.7"+18=:I?"λ # 4/-3@?#ǻ$"(- '+BE9?.˵ô% -#).MA56#"%&(?O?0(ξʼ$"0EK7&Ļ %;IG(  "  (@LA list + * QPAC : unpacker v2.1 list - *-> * unpack file * entry a0=addr of packed file * a1=addr of unpacked file * exit d0=error code * 0 = ok * 1 = not a QPAC2 file * 2 = checksum failed * 3 = file overflowed * a0=start address * a1=end address * note self-contained, position independent get_bit macro add.l d6,d6 get bit bne.s .gb\@ if empty then move.l (a0)+,d6 get next long eor.l d6,d7 update checksum move.b #%10,ccr get bit and set marker addx.l d6,d6 .gb\@ endm unpack_file move.l a1,a6 lea .head(pc),a2 moveq #4-1,d0 .valid cmpm.l (a0)+,(a2)+ bne .error1 dbra d0,.valid move.l a1,a2 end of dest=dest+length of unpacked file add.l (a0)+,a2 move.l (a0)+,d7 d7=checksum moveq #0,d6 empty source .loop get_bit bcs .com1xx get_bit bcs .com01 .com00 moveq #0,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 .com00_loop get_bit command %00nnn, insert 1..8 bytes addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 get_bit addx.b d0,d0 move.b d0,(a1)+ dbra d2,.com00_loop cmp.l a2,a1 bcs .loop bra .done .com01 moveq #8-1,d1 command %01a, copy 2 bytes moveq #2-1,d2 bra.s .copy .com1xx get_bit bcs.s .com11x get_bit bcs.s .com101 .com100 moveq #9-1,d1 command %100a..a, copy 3 bytes moveq #3-1,d2 bra.s .copy .com101 moveq #10-1,d1 command %101a..a, copy 4 bytes moveq #4-1,d2 bra.s .copy .com11x get_bit bcs.s .com111 .com110 bsr.s .get_byte command %110n..na..a, copy 3..258 bytes addq.w #3-1,d2 moveq #12-1,d1 .copy moveq #0,d0 .copy2 get_bit addx.w d0,d0 dbra d1,.copy2 lea -1(a1),a3 sub.w d0,a3 copy from dest-offset-1 .copy3 move.b (a3)+,(a1)+ dbra d2,.copy3 cmp.l a2,a1 bcs .loop bra.s .done .com111 bsr.s .get_byte command %111n..n, insert 9..264 bytes addq.w #9-1,d2 bra .com00_loop .done bne.s .error3 move.l a6,a0 start move.l a2,a1 end move.l d7,d0 bne.s .error2 rts .error1 moveq #1,d0 rts .error2 moveq #2,d0 rts .error3 moveq #3,d0 rts .get_byte moveq #0,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 get_bit addx.b d2,d2 rts .head dc.b 'QPAC2-JMP(C)1989' even *-> Ź-<73:+   Ŀ0A852 " % 7C74%!#*ɾ<:7(%-+  841"%-1$ƾ%1-+  !+4/ƻ$*#*(54(ù (  462¼ &+76,Ƚ !$"774"  "!.87.!$485# +77/'/75% *05.  QPAC v3.2 by John M Phillips (C) 1990 DOCUMENTATION - QPAC v3.2 is the latest version of the fastest file packer on the ST. Updates since v2 : - the packer now pre-scans the source file for even faster packing - you can now pack executables (i.e. .TOS/.PRG/.TTP files) and save them with the unpacker tagged on the front with an optional flashing border whilst unpacking - packed files retain compatibility with the old QPAC2 unpacker PACKER - Usage: 1) Click on QPAC3.TTP 2) Enter source file name (data or executable) 3) When the file has been packed (SPACE aborts) you can then enter/edit the destination filename. If the source file was executable you can select to save it either as raw data or with an executable header tagged on the front to unpack. NOTE: Works best in medium resolution 'cos I still haven't put in the bar-graphs for low-res or mono. UNPACKER - QUNPACK.S is the source code for the file unpacker which can be 'included' into any program. The source consists of a single routine 'unpack_file'. Call it with : A0 = address of packed file A1 = address to store unpacked file On exit D0 = error code (0=ok,1..3=various errors) A0/A1 = start and end addresses of the unpacked file             !   '  &%   *# '+   **%+) (+&  #))   &($   %$! #           `\&o + ЫЫO// #Bg?<JNA a &aBg?<LNA# yJgpB0#a e###a aA\a * ya AJygAa Aa 9a (eH### aJeDATa p0a Afa y"yByaJ@f y"y.9fSfAqa p*9,9 ܆܆܀܀܀a p0a nA|a @By yCg<.g Ry`.qp2XyBAaa g|g| g|gb|\g6|:g0|.g*|_g$|0eư|9c|Ae|Zc |ae|zbA29|PgB0Rya "`A29gtB0Sy0<a0< a0<a`NAJgJyfA"y 9a elNuAa ag|g|Yg|yfAaag|gx|Yg|yf3A"y 9a eNuAX`&A4`A`A`A`A.yatAtajargNuEfQPAC v3.2 - The Fastest ST File Packer - by John M Phillips (C) 16 May 1990 Press any key to abort Source file:Y$HFile type: DataY$HFile type: ExecutableY& Source Reading Writing Y&(Y((Y*(Y- Time taken = seconds Packed to % of original Enter Filename (Return to save, ESC to abort) ?Y- AbortedY- Packed file longer than original Packed file failed to unpackEfError while loading source fileEfInsufficient memory for packingEfError while saving file press any key to exit Save as executable packed file ? Y/N , ESC to abort Unpack with flashing border ? Y/N , ESC to abort;aB ,zA N,,,,,B z*z~|(HzHADaL 9af,9><$aLa32 JUgada(JEfLdSB|e g|g0`FR praZ0aD``R$praD0ra<`HR(pra,0r a$`0R,pra0W@a0r a`RE|eav`Cñl$Jy fD32 ad4a<Nua^JEftpaQ*y+F# #HANa 9a,Laad.9 2pNuHy 4?<&NN\Nu! pNuR Jy gSy /9 Nu?<NNT3 Z?<NNT# \NuH*H, ><.a,><8aa"g L<NuL<'zx|nJFo0S@@@ ` ` FQ><' `QNuNuH8Jg:(JjDJjDt&zփUBDBڅeRQJjD,LNu# 0?</?<=NAPJk3 4?<?9 4/<?<BNA # 6a:da^`V# 0?<?9 4/<?<BNA /9 0/9 6?9 4?<?NA a y 0 9 6NAXNu # # # /9 ?<ANA?</9 ?<NAX kNAX k(C$HX@ Sf|g( n$ grՐg<fA``-C .Ѓ-@-DЄ-@-E n g X@BSf/.LNu=,. E0:g %zPP%zN%zLHz?<&NN\Nu :<%@P%@%@ F"G,IE*pfQ:8@$I.|܆f ,D݆e܆f ,D݆et܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆Q|`lrt`B܆f ,D݆e܆f ,D݆ert`r t`܆f ,D݆e8aXTBr p܆f ,D݆@QGQ1ɂ@e1ł@`a PB`f . JfNupNupNupNut܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆܆f ,D݆Nu:8@1ɂ@1ł@NqNqQPAC2-JMP(C)1989QPAC2-JMP(C)1989"     b " $& 0 > * z .  ZP   & ,0Z(    1\}W4c~K 9g~@Ci}2Fly* "Lot!'Qql .Rs_4UsX 8ZrG#=\q5*@[k/0B^`$3D_V9G^H ;H[@>JU:%AIK4)BIB&,CG8 /DC2 3D;+6C1"7@':< ;6":* "9 '7 &0 '%  (  $           #  &  $&)&-  0"1  (1 ,( 0"ؽ2%1 '!) & &&&޲(($Ĺ%+# ," .  O`V..  4`THUNDER1PRG Ut `'4?<NNT/$@?<NNT2<<g2<gBQC*|<<f|(Hz?< NA\B?< NA\/?9@K,M/-a0,_3@?< NA\G"K kK^ JgёBJAg<f``+k +k+k  -"- Ҁ+A -Ҁ+A м$@*@4<@CQ"KA$HN$ٵo"o&i")ҼBSfBBBBBBB"A$B&C(D*E,FNH$Itxr:<9TDZb63@RCKs c,03s@c 7 3 11TBX03s@b7 01@3 1TBQ03s7 3 11TBXGfL+Nu z\C prtQQ6t[2AXd z8Cpr1HQRAQNu z"z$zr4<x0<9024TBTDQ z&z"z$z4<tx0<82X6244XDTBQ6BRNua`XNuA"0<ӘQ A0<?BQa,ap zr"zv&zb/ (N0<< Q|%><(zT6<[3@o0)Q|%dT@01Gm2G8+k`20ERRJe20fH|lL`Sj8*ZgYRR811@Gd1@4131 Gd1 320fH|m-t)4Bj%TFkg, `&% |,`g]FDF-%-QFDF*D? zb0JA @2 Q z4`//?/wwws333331t B**jY JAM Packer Decrunch V3.0kLZH!80"c~ +mۗngW cbiL>(^D/ ?>xuhswu 2dm]> wߠh_MϔIQ? Kkm酵zт𮶨 SC6h.Ƴ }v {' =Yϫ)Dx c#{Xo7EH&ʴ(lSs*hX+EՁd>s$3Dba}p-i&UkAxnsP@:;T-DLd;zjOо1ʞջt2o#Un )qˣnKR*AX]ב4LneM!:&b & a/}O{7+hi-xmbEY>&1҈Kغ<`Y+>*aNθψgǐك(IlMu;`#Yac]`L^+~{1i#MrW"g# ;lMOչ,s?2xs= WnjNQ^S *i}n|rY1 @ucݏi&#mCH9W6n-5'pzo,[U!B >8RJcH ?r_q..7۞{ ugi:\k(tZVmjֻ/w\/o8"WAwkd'L27zE7Slm~qƹՋVo/2+9g1 |/}QqŃQ DY* _9OSynOAS/aQ(5sE{{ʼT 3v굁PqJ۳l;[e5>.o|-|~rK&؀r +/:YPl |P[nKV^cx7B))ב<NFIq Y5R:9cIv/ܚ'xmɛG"٬KK>5`|˔3#F k_iB;^1}a]p+8 ގ~KNd!wQ(\^I\;/lϷ5#F-wf3h ߋf)'gwdϏMj+ 7q G /V&*&CË0jBQ XnxE-!&Baju֠癷71no}Dz!=U(VB]:xwl=3z1ĤµB)I?$mJ2sv3@|+1X-h0P*{PC*$ þ[M}slS~YW@i;V jޅoo8rPh}2HewFgtn38p*,WIt3,$hӴB@- #s&`ĜZ6<5̃5R]c]j&;ȬXZ5!f?-S7~Yއg?Ν-{ُzո[0bc/0Ffp [n *>#H[c^z݇RB]a;(p^Pl=AQ[ ;DC_TcƗfAg-W=hBN c5t GN@'$(}㌠"`A {_POaV MJ5Ȭ*y^O9&.qو8eumlIv*Q,nJ ; ̆aDP|իbD"@'jp?/eJ}s :OA@σ<{ջڇW-xͩl+!fȚVy0 unma\;̇kc>nu\wb^{i MԧM~>اX loQ*q9z)IQLUc3A*qǢ_k 3i7k O <%gzΕ/^I8|o\}g3(C%>lׁ\XTȳۻg.ІtξY6@5UbحY.sOuc>m-[N\#7֍ Р A4fȁufcYY+kUE|*6 2Mp^kylrW]X }ڟ(i"?X?c,hp&ѨNv]9T7|# Y˦EnwؒsqS T =G `[#3~}#YaxGkҝ(|R 17j |SޠzYwuߡ39"'@ x}?T9\݇k6o gD^Pa_(glRbu'P3y֎7({/Wɠ.>(귛MK{=F<%`zIq]G׊7l!!9Lu L%<{ pkfR2[FSYP}9. ދSπ 3A1IcRaC$VjwL;67HMX]O ;]ٜ$x( ڀ9NPZzZnkW˕_=n^,7f^AITc5> v]tAJs^@_e[ǚ>v[ 8I^ph-Z(yzζO~Xx1 [Z^&ik {vfTpjEsyѳ[B]pV12OeqkwvݯkFWRW#xEdy-!p)^8>( }_s}鶝uB@e9pk"܀or.sy5&zϦ\zn 5vk"Lj"l-µV; gi.c| hw_p, mϻS-NڋL\dM_의cx7 GI'W҈9|Cn/%JԜ}'ԯM^ L{KnJ/Jm,2eA\"rV氳 ;cŢvz@V4բQ̨-I 0eSq'}SVL*MOڻG:hkY$?״%ՄQG*9ad#rS.JGfiչ-*DdZqe(ڏd+!NkZC XNh+`J{#UzGl=Gk&l~-P: NJw,I&lzu(ܤ{7~;7Fozwz 5ki-?pϼw'ֆGaCr\hK˦HJt~Ś#hMgͫ,K~<Mj\bůPطwҌ$7BWƳ}'3ee|Y#063rS{N{6ZmMi OѼ`Oy|];&C2'|=OY]q^ܭ ?MW0@ٽTtFt@Y .UE+'@ץ>?WK@|]ە?g!#6C8o ^M>e fL$FBWtr1vn(!<;+=HtGf(,*hy[Ojo?$cG c/p(Df΄'%Pdz{D]>֜Z;|F= ߍ[`] ISf }?&Ӷ$!YOUwuU4Oq D=eЁUmr-ٺYcr} ?5\1T?([wX5ҷ'%L[.wCvrzL0C 3Lj0jz06\A2g8a 6B^lBɷ 55VzȧGB:~jǶ%K<?|&kv)BSC~6 E'/t0sojH%l5{GU~zޭ3vF *! O\'ЁDbfwV--_`1Wp7x1k@¯\KKSD}Dk6l6ϖԚ]2.Q?Q:RT0ɃZ[VO7q kKNmjN.vÌ cXEh/:qoA'}Z_G*lj@լmk[o\̊,e^+A> OOpB_,֮n59I_ZsDúKaD3$_$'Sƃ 49eM` ׬N|)U={ 0Ɲ"w3sXV;$ #ģ ${P%b3_Z,YUrʤؠځ52];hv=Z1+ pF ֑/nL< Hx:8$`p9|)l]DoS&dM?*?u@s?B(=UƻWo n]N-MsGHiIJnaVeBs [6CY=g^bAqT2eX#g~"P1$`'s70CF vXrgJdE2nXH-1E4Tf5rߦ>B)IyV-mt߳Fs9ytAhQvX"3¬#qX_; 2-7ww<%X7n(4pN.;(MF/kaA`D/l?G:S_~W]($͘g/5up1/VE}#3TRu#Q`B/G=;HnCwD Zs(CGڋZtq~zP"TU)gNhbȃQ0#LB,5Ȗi=T_P'N)B.V%k΁\+T/& )}'dT']A,!OS<-Kg+|rz^n'jTVX!ңNjQ HB&ZW >gE'%-V:8@a~0J[%uGـ-jCT {d d-p9RX݇YlfIz\?NhGvL13љ]^dNhj  +C (8֤ @7i{@,_8 񹳾E v}-o}([Yd(X}0c{,%aW͌6T6;I H NM^Ne,ZRTqHjZb\Ҏ'h+ ktVJc+j3{^>r^8M#fͻH [l$2>x9U>JM,ξrvNy!XCɎ}K!ڝ0cYLtmK 9PtB|nt BJ @ ҋx{^ ]CQ{<UzyZ=<{0 7:}> (zvu˷ `E?lN;8jÞlP <p Q3ZBR :ⰹVda|l0 z#N4:A RBB3ZRR`?a>:A"z2@SAA4BvBl$8CD0@pRGGRRRC`3Z#N`^ 9VNu>:fA~|sda@G>0p`Gs0a:Nua>Az0MCx1UDg Ga@SDfG?G0NuH y @fa@s@A >0CE0@Rq:18RD2AqcVGRD[bSDY36624B1 |sl1 4B22 5 4B1 |sl1 5>G>0pfLNuH~Ar"HE*&J|sl" Xsm0@03R@H42RG`~:<:ACf|sl`0X268SDE0@bdSD`TRD4D0@GI2AK0g 7";$S@f48TGRE`~ACj|sl60@3|sl3RG`LNup fpSFj|RNuHHh@Nu|,z~:<sA&CdE 024RERG|:mAzCEG~:<:|rn0Y0466TGRE`3 BBy(NuACaA C~g Q`k`Nu      !!""##$$%%&&''(())**++,,--..//0123456789:;<=>?/?//^*D (  L  p               .  \`c..  4`FIREUNP2S 9mFIREUNPAS =m:FIRE_2_0PRG Bm FIREDISKS EmFIREUNP3S ImREAD_ME TXT LmY `T~a*o$|$M &J p"xLgf6`&gD Lg d``mNdQ`pHD8<HDS"LQ`aEY .Ҡ Wf?< NA\Nu&m k -"mJgёrg<f`` m,HT+P А+@+hШ+@+h -X/ @CE8 RQNu - ЭT(M*Sf*o m eNATOMT`td*o - #BЭЭ// #:Bg? & Bah3$# Rp4a g#? M ah`M a^M 9aVM aN93AH??<NAXA *fB(Hy?<;NA\J@fBgHy?<NNATJ@f8?NAXkgR#B0<>0 $a<\y#BaA %aAmCv  .g f. %,9F 9 f #ar <\ y #Fa<,| a9@H?aO ?<6NAP 9J"9F"9> y f"9Fn>a` BgHy `BgHy?<f = Y">@=?< NA\Nu,f `H瀑J  a4LNuH10ya L y:"y . M << LNuHa3 aXLNu ?<,NAT&| 2YAa$:2IA?a #:2AAHBH @0H00NuHy ?< N`A\Hy ?< VY*?TIME TOOK:[2][JPM 1989,you just blew it!| Wanna tryagain][(Yes|No][1@][WhattypeoBfpackis|thistobe.][EXEC|DATA] Y(!FiletoP:Y(!K[1]!openouterror.|HowdidyPaou mnge tht!][Dunno][1r][Disk eo.! Thatwas|clumsyofyou.][Aaargh]1]Not enough memory for|file selector.]D rat]1]Not 0&orm n the disc.|Gimme a @blank r quitJESUS | RETRY:"cme n|snap J7Okay][1][JPM Dowanttokill|theoriginalfile][KEEP|KILL][1][JR$ePlas slct| COMPRESSIO N typ.][ MAXE |MIN]Y(>QMINIUY(>(AXIUY(GcompressionY9 6Alldone.PA/Ktofinish.Y,!Packi.ngY,!ReapdingY,!WritingY : ?) !X:Y!!Y:2 $y: N 4` `*o$| <A"nO&IQN B?< NA/@ L( &LC ~,|@:raJdaFeN`WNua dpt`OfQNuta Pma,p` Da``0gdt`Qf fttgSAOf>WRQrNu$K kD  -,KJgѓr g<f``T+R В+@+jDЪ+@+j` O/Cq <+Q Nu - ЭT&M*S f*o m mNa< yJ&HB$y:*yJe@#.~,|+at ",aa2d Ao` Bm4Ang g0 Ag` 89&:9( Dmt`49&d Bn`24L naHa49T`aHaxataf49Va49a`V Bn109(20An~aHjD0a,at3a.$9"HSaZBHfa`a`H Eaat3aL `HRy@  y  f3a`H249 gFH BB mDaazD4< 3aa,|ޕU`By ,| LNu,|ASBgZ-g a"Q@`/a aBa4<H3$`a(LmaRa Gf4`e`$ y:(M*y.ݹn. BRR$(JNuaHa̚aa3taa4SBa49149a4`T AnaHaBa44SBa9B>49a49VD`$~NudaNud aNu0Nu<9SFk@ daQ@JdaQ6< S d3L  v4g 6<SCJdR33(a<90 daFQNua<90<da&QNuH(96"yJ&H b&I|"Hl*gm` fl`Ȳm< (K&LR"SFL?aNu Hv Fo:$`3a  FfVC` $f^C`4SBa0yC 3(X (@NuHv3dfRBmHBBHB Bnt`$a69HBC `C3(vHB#"LNu@F C2@ bAp222BQ"<0 _Cg?T0<:nzzI,H)N PE qM AO LSD!gHg0L`^oqDzS.!nZZM}à.%x5Z% NNj^i`@R՘$F` n'oD8"H(  H"@XI QfUI`#;=IlC p#^ꗀ P`f06<E(A-Cpq/ HT #~"_CH Ib6L<@G*K'ַppg0Ld&HCѺ^'g$2+.3a: # QNq(k>A @VVa0N'l\ ,aE)-H@/tJg Wobg#۬(M#K$#>#۰]B 1 3*LncZ3#¦=4!d`8sBt4FAIC$nbafC`% ATM5C>Vy$iE&H&ٵnNR.p R/(MKQL ,HBjsf p&5@HQ:HTHUu l:UgdCDE{^gqVDPĉC84fL|@.A$gh'%;a˱xtʴ3JXF`.a2I8*dʺ<mcg EA`n2P:pRamL` fGed&fg^Vvg rtfoFlTAQFX|aJgC|pPoÝ`QBC&H&&M`e _HRa($_"^NZ xvo}oB>*Qq/. C`9h*o"mEv$"mEx$Ed$B?< NA\ML,?<NNTCX"$@?<NNTAL2<<g2<gNqQC4|9<f|%Hz?< Nq\a&3@/:?< NA\*z&z k -"zJgёBJAg<f``&z+k +k+k  -"- Ҁ+A -Ҁ+A :tм$@*@$<HC2Q"zD(I$:<R(z6&L,z6$z6:6N&&Q"o&iBm2<<g2<gNqQ LBBBBBBB"A$B&C(D*E,FNE4@ z"z$`G&G&* faxe9J2=$=:|>^iXAkC- =LT5a00Tra %Q!] H @(<1 `H0 N81 2J@AAnŀ98 hXZ%Р0Q< `SC  BYJ3Xp4.a%**'P<4^{4\0c Hak@074 <`xp#a Xx S e?dQ80J}ŠBQ0ik |D)t\2`!'.eL/H<XH'0hvBpJxȂ#0.;H$A!!q+H6yt@x!xdfx.En@r_Ec:Hb Rd:^ L lTDå :0܂̑W<!a*~ ևbWL#H&9P<9*8p5`qG}* qcSÄAl@<L x qq_ `? @ˊ" 9vb. NX 0  B! ypPih!9h`40 Ng;1 BKvsavd52" 0 Ù05107P* Ř:E\iYrIH s A0H380(a`V`2h >Kʰ`̼!@,%,e0T V0  k0s%a4 `Htn=n"@$ AQ%/xW0 p5eP@Q^@=lyr@85/Cw@x @P>|@4 AX,  b8p_gYBE y^  ApI̡yEqH|0$KB.(?>XE2ӈ*&XRV@b 4-YdtjIFyZS0Q $ùB ;C!`S&@| АA I8  x0E &bH a[ Pf|TO`Wo+ 60?A $y&tC%0@PM<@z7*R(D2h1E"ff60x'E8d !($4EXdxapDVOhrMc\,T R #@H(p aQC#BKAIFP"F$JP>T08((P"(_0h> 8p.8` (gDR6-0Bi,C^0@Jp pP*G"9|)`O3r &DBhh}#0HUn "x a ]PQ5:,+ e08)C7s!5TZ 4# @h4~4J700`J@Bv ` l #LB+Rf_HjPI7*D(LPD( Q`CG1sp$b@(P  H7?F $%(]S%/; 3(u b ʏSB +? H2kp2JMAZ0ɄȠ"& -bن?7#fM@Lf4B&I)E5..aL#*O?{ ?~,+C 3@1U@`ɖ-Ƕ@&+Ȧ>rX̀VM ]  :z@󓛓, A>E Ћ *:[8Z@00^}Q{ѡ헣 Z 3R6=JNȊH H~UAnT3ҷ &"!#h$# ` ʀ^  04'Odt@A߈@( ;pa,̒Hsà8v& %OAH D:Adrr^ @FX@Bg1BYK??>9A/ :1t ` e``,D J 'B C* [C@ȸ/T $߈`.P a 'h @ !0 * }@0nHHh!bB<@DW2!*$$h"B$2DR7@`w1mXT L@AmfW Ui3飷B a[P*dt{ ;\@S0:F&X-!AU\ZJD1i2}0x#?3f2&W r !$\ Rz3笐)a"'#n4@6( eͰ0K qJp%DLB\ 8$<@Gͳ XrkD p S2|Bx(/"JhxdY,,? SP `X$@>Y 1Lz˕#@5b0 3HX恡Z97(gx30    X:.plE: CC-f_lR{&$%$)( ppb̀V :8ӈPlQ04<0l@@ `+H AܥA0TP9DhlLR` H`ԁ`8Z01I*`(\)xo(`d&"[V`Bk <@,V=B@d3 P"p ̘Ф-IB Aa*_^*OnX_603JL > fPൌ ] k @  B,PC; `h@ `+$9Qš+A1Bn#^f hj1o20'Pe H aqAez@V>98:`U[( dI8¸a14 a: 'xb }x,qp04(F0@ͨ%7$$`F Uj#4 M K06`tH f b1;pp3 0(lSäÀ_X0BCp- @@p "d &(ڀL+8FA p2)0 8 ) 3b DA@X0`MB A# 0B< L9@A@(P%@(4P$0pX X83` `Z z@peXPE0/sq @=` YPpm( V@Z @>H(0w@89 AX 8 Ph@$@9$ Oh 8X `ۀP-@AB@=$` ^  W.p` (f@ M@ 0dH$@4s$ 8;в@3dPyfa( @(a Z M yfFKCAT <rBrf0.Ц(@A· ܇80:`N` fSP(!*!b8 6r4)XCL h5yfXl98` =rLٚU<'%`Ud&LaT80C47 `&KH@2&bO `͍( 898E lg.gn\hX.R$R;ۙ;6iS!\A8tHI#+"!"oA.6:Kڻ;!U06p'gbgaefbj$))8XYh9!譁,RFTNPVT\<< 5 el\e" bfaecg`"48@%@ dl 752, 2PˀX@(#pce 9:ظx**K(JIˈ[9#LRNQh2p0`@Xp(p* !B _9H0 a <(?pP?בRjiɞz@8AQ& `J+%1H? ,QCJʂ p'.(x~p|p( `  @A9T);lge((Y@"0 n%KlP8*TH>98rTY8~? n-R!p-PN`p ƇP3;@TxopZDF(<BD>h(8?8 -|N:A'' BG ? ? À?>ϥ(H?su@"A)A?mYP7VE(001lm!p .\p |mC`G8 @m(#`6 `388h88\WL^?8PpY} ufg G ρ,| D dhp*%A `,@ . ޺C~`p/ `P6``  pe8|(8_jB x(P0``e@@Ă H p@$Qz{ | GPpw09``iem@ F_A (7cPA\A1p7  <|: <Bb (|]P{L{z3Bg#a=&{O@!1(|gq =&{O?p0`@Xp(p* !B _9H0 a <(?pP?בRo S}G'(8X@ &VBp*ȱG 5*NC* xDDw*_R*~G p $p8~#! gp,38/РAփ` F (7 p;P8*TH>98rTY8~? n  H@ .h*  cdT$< qR@XP<@1 p_ kP-8h { 0  a@P(#p`@@@:(P j@  E Sa #h>{j~r  g @oQNp|~`{,Am"wS p.,p?8NB׌>pkAlW\ָ\I+p0dp n@ p088/P78 p Y@ $]npp ,07   \ ;pN`r \(P?8cA~9 n  ,6  ($x0@a/f<   Q5Xq0a(F$bs;4j@ǁbă1/ H7 zTVn"H n@Vp) jpX @' e ppAP7  i9?AG\.@8:#28=(~aW> @a(pP> @'t8D08X,(85p,*01  \| ` xZУp nqcr*p78:ȸ!pP`  | @a} <8/01Pp 3HpAtC` nt@E<<0 8( Pg `I/ dY 31b'@?#+DTnoamY@@. |p8  +|p ~Op?G @p~ÀAE8S?8 j`oа?ŀ`pp ?TPd cLP*aQE $xႃwA3}CN4x3@Pf,& h@oMw  y@+^t ' 8/@{p( m  ACoG@ > `p~0op ~Wh`¯0uN sSL9 p r0m.D6t n@`p(8:,p08C6>0gp Y    7|x7!}S8'\a  @.@  :$" ࿿#L (06j@c ((P6`j!@߂f  (XR0L MxpMW\?{d:  yx|A_8'` 0>"36O BE6 `7`AL bP4m@K  t(P4P m!@BN h(P4 m@H h4Dp8 m0 C%'`/#ϼ0  0 x0 (<P:Gͦ$p5nޢB (p5n@ARY  4X5@n``gPrS 2kH0ƸÀp= S078?h18h0p8? r|@1n ? 8lP7m1@Ep 8P7l@AAԫ8Pux70h؂p$$p7֓`r?p= _}ph?8N<p1\p 88" 1n8E` ‚A  B0,x(h?1HF! ܥG& 8Dt@`@&"`p@&K S ļ1 Gp1RPA<d78p+Ɍ dRX5JpQp?`B8RpLXFD~a߿p48C4@_t8Gp/jp/|!и_|*+P?8((P> | 5Wd~CMORC 6Hop-0> z\/,|Eh:|~h&Уx nqcr.|ւ8:ȸ!p_UA$p9h07| A@ 8p*N$fi`g;E 7xLA_PwWpl4ˀ9K8^ 8 mNJ VALA$';Tă1/ H7 zTn 6"J(2c* jp(,=ҜT\x0ATi9(gCA  89 `ڜ ib?44. ~}@0@p  (n `?UA_8p߼S8`P88  zpާ ` <Є$n$? \Xp0@Z@'`gU`d5`opJ  @l?6p*1\@  =?\Af~9 m@8<& -d`b@/¨p _`+H?8Jl4Ǘ ` ?_pn ` ‚A  BaC>>pPb  8=:p(6Ӡp@<@$    `? |@  p@ `p "8*=C$`p D 03g@ `@:P;P 4`p  4A"w {:@ep &r N@ip ,0 lL&FQ0> X@Q*`P&GC3C $f !z`Z{#5 +Dp9XC0P"  P'ґ %< RD n" ```d FfCT@(rp  # DjZARԂ2#ED 2-!01C⁍%H2A сB! e*ף`7Оy@Y@ " Q(`p3C ( 08!@Ƥ  (Q(Pb 6 i8x.cI@  x<@7EX g A K8P1fj4 ) gQE 0hvE*0 : ) 0 1P`z0 . b0> ~ *QhuFB (AZCxذaI à KflX10jW@ P<a L W$8< U &A26` "r@?E @`H0 Xb1 `ۀ(u `@!@ 0b #TBA(BB`@0(DLh@  B A( } n@8 DH0>Xk  @E pp K 9#(҅? /+ `@ @ @ ` Zi6( (9@ P l8 8@  5B(p d͜`l D,@0 |A `*KA@!@@$0P @ la0`@5B00 1e[@#p z&  &8(X[ B cPpaO I C@ 젠sq`$Yǝjh?a(A8pD bS+LH 3Ih* I!Ȋ! 0C@"(b`> tn@A M0@8P0<0a0p```du8@$܇v !&)+-//.,($ $,4;AGMQTXY[\\[XTOH@8/%  #'),....*($ ")18?DINRUWXYZYWSPHB:2)! #'*,-./-+(%!'/6AODp$H0($p5TP  "gR`uTS3`2nLNATBE NOT E`UGH MEMORY !! 1z | VALID COMMANBNE,L(P@HC X#jN"L@ 3V Ff sR7.a[` }h8`#4w[BP| D0`#*B. E1|,X `#1g LCRh(p`"uPp @`^ ,)?X|`ނ1O # Z_ vC /hӀ  KA>K6Ej 33t/x0 2* P% 8t4AQ8`A(W26 F "L`ab*; m$DTnH@@D(@]MP)HZ8#T`]P+T X vh|Cfx)4V*P2N$J6(H#.3 SE3A| MT10FR +\ ;m EDnJ0`XTmF8]n"M2A$ a a 6 jg,`8! tK`R` Y*& APdA0<!RPR`!*U,HH瀀<(v?< NMX.Lf !acCT j\ JU6 x!̼:LUBpjefHzQg8 OJf r, :-U'- <(pBS!In y&! ql(D`P"\ !H`\ P"a뉞g+D^gz ra*9 FT#͠X^Igg`/",WHRE%r"f`JRH).ZJ # m _$2TaaH F G`<l JfS\*`.` =Fؒ.,/g^&p/84" b .0AMNBa Ff !f* ":&GfpTNt`NAXO0;Ѽ+ ^k3 \s J(4 9G A*@ZC0*>xzCր@&pځ$VYm- 0g` /<`?^Rk@=@xgRFAʁO' LOBfaD%3% @Kp! A=/k$ b&< 1| Z `PQ$}t "Ġ\ap <#`.#&A`N0@z3X nlX,kb$p8@Jj<$`<6k " 80Hz86k$AT/pdhk@\EXPANDER.IMG(`2v4*^* (IHP ,`,~bgДRxo A"e *N~k/nAd2   !/.pC`:kpPR gp`'& akD'k(!g CNux0(P L J: p@t-0~.8F0l N@)@)X0)kR80 1 8 x26 34^@+`8Cx`4ܜf06gx(66@>79G9ȑzW\H 2A8*FJ"0`Rj܁S;( xeQNu0123456789ABCDE>qG@&"d'XB"#P($ x",7 p Hzah ( "pV+NhFӞ0 2p*Kp><JgO.b/ Q@Z LP ` LNp@XHzpї 0`\ 0`H 0`4FŜ,>AQr@X0X'- BMC8HUFLZW80BMSP80S H8 F1t234@@P5678@@P9t10^1A  PH1A  PH1Ef pWORKING MEM:Y!"( `4 PACKER NUEq (L) Loadxile to pack.S Sav*Prgm. U1-S3) X%! @XWrit" فD e20S(-MTag modes for tCG ChangeHY <-> ZT+2 "",ta B A`8,AllESC/UiOxBogrammA+jH  MLOB'FILE-COMPRSOR ( v2.08 )pq Us-Comprcsionm0 BX0 ĉAUTHATICMOu*Y7J†:1@ 5pRk (ANOWA .x*@0PttTAG xSTA``ADipSAVĮ08d?eDX6R( ALRE YBbDo you want de-crunch ? G0Ys`(th$fpf8HECRUCHpUH瀀#$w$XQDO+xr nGE3$t2AxCAP)V!QȰ8<AxA2T @%W@@8Q ~ P.`xlflx ``G&(&&&H*H"pP(Krfg gRRA`c"|<1 S@Q8<A=: L&L`A `}b``++cma"f" D3!\@T'I&zLQNu` U#E0$ ($X$0A$&E|14HA`kB@,0xH&HCJs0k8Pg (DRDUDjC(>4f"3Դ|m*i`g 2g R7:% } B4df Y Ё`Y`nXZ" 2<h08郬rth鋜g"&, (P f &8.CyQVQi2ƷPbL' GBn?#LpA4pA\< /@C'PЈ2,IVdr$Hta 8\gȰg`RRf#"`fI`(0~(&J5>(^nXHA& z|f(J*K VSLn: <JAkRSfLFօˍ*?AZftk6|(o6<UCK{0oDo+n7@8 kQn 7|9`&<|WFS0__1<8N f۵fe2. gSGRRAaJZS`~<g =eF   .><9 p;=(UjZItBJ: +Xv Ck u +P45W(;(R=Dx t A4! 93 B@@^ $HR"HRv8< Vb[:EDkmn8ltH7ERm=,89%@PC0HV=D0^p 6u J}`@GLtXh vghBAf1^ Vc 5Hx <.O<afX";.i h6z EjC@46()B P@ 8:mhop`Hzqxz oDC#O#H#h" $G3 ?"nN3@ad zZ(P"X$I$ @ &I(Jlf* gpՒI<f e``&br)b. p,-D ?NN,@0<|&LX;p[oKѤ!>N0kh1@&(A*x,I14*>\R`Z~4n( ?&HӷIK|.rt$$gABRARB`JF;; $K4Qəܷte4¸f>(global* `h8int_0.packi p tT_1@0*COMFLAGSrCb co@4zCenJComfdCtes&khCzeT BRL4 RET`DR""#~,DWDcru\Ah(FhVea,g^GkeyHID xVISiLDanf_0Jn) 2$!0dn p 0) OV` F4(_C&PX5` VoaOldMARKCN |PPACANZ΀`POS a@,0` m0PRbeg}QUITDp &LtablK`tRrette 7 CDAd0da ,4Xprg&C΀7p XS_in 6Sjump"`S} ZS֢"ysa3Ha3JTagCT`palop0gzWOB&MEMpZsx0maddrTcom_erd0Nlk(v8roC JaT " fil ea akey Cou6 \n$ mXdun)Tp}v@ P4nuanfns1mb7s@$hshow$ipprep4p NXF&sc, AD al  t`PBMC5l |` 1` 26Bp `)!1 `iDAT0z(Pn)0 S0+ERRtext |n`EXP`  R`@04eE@n 1`HUF`Sx pan0-00 @SoOHeaderOKi0zLZB(0.np2p0 n7 /F C37HP9 `WPSb0`.p()n@o6MS0x pE0 aC07Hp4| ) S t) @n `P` p:TX0L"YK (,outs|aes_para .comp_alg0lh0xAƀ4zAʀ@48bu΀@4XmemHexon˃2*loostack\aCAkrti!BMC.HLCPbegj (Җ*z` 6+`MjP0 *+SEXpo )+S 6  dLDbasN  x +O0h)aOf < a)<,0?0`)`+ <`@zfsel_nam eذpat h0t( Fj a @lFilewriVHUFal-pZB( !v0W( ذMSP( #J0S( %xZin<\ q`BMC_4p`]`6H&0x@ Î$+~_?ЀP?耿P?7@  <P@@`P`؇\$?@P`> `*(7 ~ `` `P `xp~/ p``|^  H@|?xlp|\Я7xѿ ?` :Pp(x@^`ܟ@<@ @ _@ @@@@@ѯ~7@pп/x8`@`8@ H Կ<0`?8x?@?@xp~@@?7 60n/+P@?@@п`?@0џ @ |Կ_@@x@@L`PH``~`@@`X7П?`? ?0  ? П0?`p0x`@X /@?0 `_/p8 <_/o  Կ~(@p @ p@`@@ `Կ@ ~@@H( \P@PX X p.׃? /Пpп @@@@/@?Pp  ?h8x H`@@@ӗ\^ (@޿@.  5`.. POMPEY 1_9 <`QPAC3  F`SHRINK  K`THUNDER 1_0 N`VTHUNDER 1_1 Q`FIREPACK2_0 \`cFIREPACK1_0 d`GOLLUM  f`HAPPY  k`ICE 231 n`ICE 2_4 t`JAM 1_0 y`JAM 1_4 }`:JAM 4_0 `JEK 2_1 `TJEKPAK 1_2 `LSD 1_2 `MEDWAY  `MULTIPAK  `ATOMIC 3_3 `{ATOMIC 3_5 `.AUTO 2_3 `AUTO 501 `BYTEKILL  `BDCSQUISH  `.  <`..  4`PACKER19DOC m1POMPEY PRG m!POMPEY RSC mFIX_UNDOS mTSR_19 S m'TSR_EXECS miUNDO_G19S mAUTODEPKS m OEXECHEADS m[E}%NO0zA#PBC@DH+f`QNUww AMf(o> /Goc'hpH M/`24``X|J"zm$|aH\x>g 7%| a,E?f:iE`|m4TO]En(MmXL MBa4P>BE/ EQJEI84@HaDgt@P:$| z P XTeF`|agPEVE`LaHE|aPVSEkp&Q͚jf"<w @HaBp&b9`````.R/ `` M,`WHjDnFIREf^ada^n?:|HFzLd vmFd Jv HCJ oFL'%f@p *gxn%`m ce!fD qP,.l,L&N"N]I7ỲaTa& C٨jpwE"+ͽuaVP=,j޳Q!bpAy `>J\5`,> qf.%߇u.-%We Jчgvt=G7tkr暺saMm@am&  #2NSHIx,LapICE!f`afKa`."N Bvl!2&NX*Kad*><|8#zv]@FBDCQQHQLSfpw#`LN[)݄UDasa*d"a$dv !a"H@@Vҩ%ֽn)f%.!dNuta-xkaAg"CvtaT X1 HaBq jD`m!ptadpt?aBC@`!Q`R:p9PbH2x $P\ i H$Ixr:LҾZb63bRCKs c,cgc : @b7!01@4,Y03C2#s7 3݃1XGfL+$tlpr] 6t[2AXdC>prrHQYRAnbnəfr90yı"0TDg%<H$z84:~ Brtwt!|wtl*" Ә[@Ca `Q"&r/݊@ x (N0<; Q|><(zdo/0 b0)Q|LldT@01GmY*`ԐG8+kE5] Je$flLQ``Sj8*ZgYRR81u5@413@QxGd1 320fH|،2m-t)4BjQHTFkg, `&3 |,`g]) %-QFDF*D?"X|0J @GǨ2PƂ zN//?/ws& P@31`"HE,Ilɷ*N((< :<&N~Q$~d $RESn`.,H$ED@@Ar$ tp~TApAn ڀnNuoe`X(H*БaJ`jSbA6v'i{fUxlFDSBvBJCgA^oHB`  :&LPo؅8tdtKBARB q8tgSC'7 UQ3 HCpz} _ |g@bj2RC30TlLRKs0`08V}?vVj6dv@f R7>nDEHaT"`U"z$`aG&*' l?0`dLF@?00f?0^\# NSHIx,Lap AU5!f`afKa`."NL/!SR&NaX*Kuˀd*><|8#z@v(BDCQQHQLSfpw#%0LλN[UD*d"Ya$dv !a"H@@Vҩ%n,)l%Ak 혎t.khAg"CvtaTʫ,01 HaBq jD`rptadpt?aBC@-& Ra(1Q@ <  p@  &n #Ё-vu(JYgNKax`6m0vvf\4TBGabd0a^daZecۂARB`aHex6خaJf0mv`"a.et]gX5.Aa>B"J!m3[PExr2RAISAttZ Bwүat`S: `$M0g4SŤutvx~3?kg4 g iT@`d2ifP@R@ J&Vc. PZLDag ad`2 J``uu`6.C Qi,*!V}Ш!@M.VL -栀 -/_ va|JgBb.v2!=cN/aД| _8RV1VQ?aTv V0/0rBBaJ@g03SAf1 _-g0<TB@< 2ZlId2:v2QS 0@31)uC" @I@ ;)`(@/ a*p(_##}BC1p9!QB#P#2g"oAz6(.l8<`xP`._sJm R82EgHD@RSDSfJDnHa LQzM0|J`>N+Ovn(GKx~`01K OLMbzzm`R yf#bYkRJdN`BG` L"N0TTRG|(mNu"d2 f0%MdeTSectPn save toOG,Z M'(<)*.*zIJ+tATOM v3.A:X8fFIFIR|/[3/-QRB"nY8^/U?qeѴ7K~}&yaOv2nk4̥ICEł3/iHɋ /zr 4AG*|LZW metho8 XqfG586YchunSp5.0oaut) iov e"3-2.5> 0"$0`#:@ZF<"B,  , |6 J<*X2|`@Rw$   % $  $  $.$  $%         %     && - 9 !  !+             .  `..  `MEGA_DP2PRG 9MEGA_DP2RSC 9!`9 :6A:&HC>*$I J^#QCaEG Jkf0 kC g *rSfC`ёf +%@ %k%k Ъ%@Ъ%@*@L$HPA$:GVCNpNP"Sf*e`JD@&Ja@2x(Kp?(QIHv a@Q`Nu*J0Bf4Bd0jd3@N@a`avaQ`aa`vaDCI0vaQ`vanDCI0aZ`aV`aR`aX@D@I`baBa>a:@X@Q`Fa&a vdaQ`(aRCNu*J0Bg d0jNu4Bd0jNuTKHSa*_0 M;Bf4Bd0<Bf4Bd6Nu¾tP0D*$7g vZ:~d©v FDu'9׍7neܟ6'.gtN,dTːX c썧+ x'ҫ(T88gkJS9VqV=|I+U!f7CY˱ bR‰-P>c-kZGQf<{?"M'@<85{Tg/ @ 41G4nLc44߅xEU8 >'">Or]Hl"{%!(r]+J]%5fim!  %9JD^W<_K w۳o>(o|& =,؇y'y}Kd{Z%w]2e=#Y Mn 5H;ؼɯXNƩF~NqwuB|fZ=(5!ײhS88Gȕz1 P-蕙(-fU4\]eK4h&4x5|I-Mm]qJu]tuaDQBT5 V_\T(/WV;}iRZ_wm]4˦l[Xf!`V. TٴIn͢" ̀qaȽ&HzȵXxal^ڶ8Rj!ո m[m@VxR,:u{Bkffk(('+Mv]&W^*%"YUZDhѝ[(W'v2.ȿ~pF((%Z4*_PޘJe&Y_JF\9K؀qaWlaWf xapBO[n7f47.\2]qPs.da9^fOgØ257cHe2lX(ջX4!H0)պPF.Zb݊ݨCmڄ\^(^d\OSB~qhi!AУ\ .ac\~&5&"|뇫D 6*p@_:}\ Mhvfu%< A=9{5sQmؼH]?h伮%\qw痷Md!S \Z$}>]G/umSS%%FX9 i>9WhvG 4@ڃ6aqũ&[S-G2D%@E oE)`ø ZCޯ^|tU\l1;C c-4@8M%3)UgVd^H) Ay2 5M[fUsPrhB❕;* +b)Dh˚ܮ.(5c]]q3Gs!F*pJ"h,XƣXkQ:A)- ljJBbe+3ݭ{mP-UGPd|.qsh _6Tkl9M\ӈ-Tj`QGā$~*fŝ},Rp/+jQPWd=+v) ,t{~WT,F9 %t@b]` 4|sZ)02Tx 7 npWSR1EXV͢,bG1 YlB[Rxҕn_{.h9U}_9a|fv%Zo Yk.%J6a[DOCyxA. vp3hN͠lj6El\k!Td?@IΞ\?mzMh$-?psJI{WhNђA|H < ֤ _=73Yj)ެţ*F757. L  GHx!m# 6$T0GQMa!K@S!UMGDKW]ġ Ku{3]mQHK [C~%ά)E*Ԍ-ˏ_([_4WT*xOnNWZMp\!eP!꽨a⹞Q@q@; M+QJUt:Ø}\$edzF*.vY\k3b򿹅`qNA]*ɯKE{Tꊿ9^WMBu]l^I.>͔SCy6"QX^q8qU;\t硶5Β k h=;mRؐw{#:"7/tᡇ1>Lbv[®Bu-#ߍ PT\< Hb} TF&SU*7ctPд?3b_d Q0]nˉjvdC)0\JbQ"cp`04ʯn Ʋ&{upS:tt0ո:2 F =[%q, `qrU추5Ƿ 71\=[u~d*Q|w\ gu.tx֖z#:1V3@jg;fG[]b)bD#S?b)mxx3` FS #1iaBݟc.ǷJXS?m)1/9,4ъ/jW`־WRtUjBX~::lFpǽ'7E%b;Wc[Jy3TAzԯM>6Qz\ SSpP(j}ц)S1=7;AL)#?T...q]maWc[tyCiN7(׋OۥmP&i^7 cQ́fe?O7'Yc/!h=r}շJG<v9S.bb% )1NϚhاCkzNZnߊ3e:ZZ=f2\1m/wm]*LE3̗HIs jic= e ge80]7Y9~̃f/3;C,kLE\b ˻=P0tꁍd5è|}U0=kGg?p&_>Ѿ( ԣu]( uN v!]Ewz5{&{ZͰ>K}^(w^>oPi}l>9.bXWcKF sbջq.`Xkl&{KKYά'o {5W 뼘l$YB`ݨ:-12ZW5px=% hwĥp\gMnw~B u3W{8髃ƻE޼Fl9{GBP1PXA%wOFq ,ؘt #@(|zϱmCC>lϿbq>'$ NRXlڑcYїFG@s^09ȧUYQZBKk,04gmewTT6:v& A_.k c3Н轿4 ] HtO/RʯBRIPu](ohMmS2ИB/f@]r3FZ'|lNHRJ>kwn%6A֙V۴itP:ӊ- aRY_iM'XO2CӚϽJoMڰۢ_}d\;pYh_hrRs/(N sDQW@Z*Q;9CPZm ns+ڜ;Jއnf1{en 9I@dHE "K |\7{kffCާ+s$n}_Ө7ze[J\ -a(fы/%Т\OzwW =2<։z)_뇫K j0y+%ÖxJ牞 d/+ Wkw{+(&]uw?r4z( 8|r,wñf,)^k~`UN5.Ӻ5y} h>lZB={*zD=5<3FF%0|*)"`Iu]ԾzO8m_A 5d"b Kw i or7?F>?of(\_V5k5ӆk@5UHkCn!2r!\f'~69|>;|Aֆ;%/ P@hDWiDzw:oHKЗ|wnP6Mvx{YQ@l%ڛ0rSy] ?65I|}f {pa܅?q Q8D{@z )ZZ,ho_{T6Kv9M.Wi9,ne0Io(L[.]k4exePVnKԡ}8hv!NZ⮟s~E-Cd9ic+? OA+?Q ae%SŇ}D[$m—mfOIRv{ʻD?_SxwK ͞7nu3G6bm~{$sٿwxB=]G~-AU7:WՈ4+.9/Zaw< QGP5cSV#5iNǴb p{,te?d䛧f+ 9$eBICk_,l[e;T,8Y<'BϊL@X\]2ROO).[x }Zjĵ})O*t{0IA+;yS~3kj5YKね'~SqP6ث&z}{=3$jzWNOz׸Ԕ߰oZ{=->߶PEkPƐZ OeYo]Y\b%Iي猊eIYnOUܢ!l,kV%X~H.,%Ww;Cs28o6'wMiN^6D$ÌV[0~NX:ot_*dxyz/X9 +.>NY<)aɌ`:iVP[IyS_ԗlXZbn5z[~5y r+\h߸X=eՕBKս1͇aս67Jzev'y\g80ub!&zCՈ7_D^^ˑX:pVXՈZs4Gzb:wWov9c|6q_ yίW;NcObgD`.Dq6  >}?rxxdoNOL^~i Yb88bhIuL7DY>AwQ hv{߽{lN~NT]NjE>YH!]7 NncRzfzfɝKI/4@ Fu6$9OTrL]hI2E0? ?:tBNrv/\n9N0ޓr HG[m_k0|V6ߛϷ+n&puڟ=䌾 v#9''χpJns;C7 #{run *>&pGb;KM "y|eT{Ȉkޮ%Z X ?*e "U:>ןWG9#Ck}^!9#FiaN>>x\}^!eq'*$.x}h}@z]\ ݟ휡׸^|Ĭ_T1~u%uGCwDY>f^C$ 6lR E;/ Ig{AӟpTl`{`F OHJ?p#\_`;؞Dɜ8ޙChn󰍷y}[tW%˲/x[lnz,{ C,fj}C̏HW.?n~߶r>紻n:v˫yMNgVG j?ŏ  m'J>׾HY7􈕬^r˙DR'եuidoZX>x3-H!SĵWkϫĶWȣzE Vq=ɹni24^X :#i_I.&;֓䱯߯>Z'Qjxduh<[~)gƅe/aYOd<"Jש~Y/6UZ1"xLns<dI3vة{/tyv-o,a )B3Ѳc/@P,5~gf/S|Õ"@'k֒_ȝ{`EIb+;9âp d/U{ cF`}3るE$Y*)"{䴊z|*DۗGOxcC .{C $ KL\K7C[ λ,߉Gi/#?cџ˗/U8`Wh+EhvD3skCN(#T8C) [+NGyBɓʮMJ qߜmR6R S V y'"9ϛ̇tS䘵m(gz<͜[rSP-m.L_o]kYsn= x\\:=cZw}\qx}2|O>Cwo/Ɵ[4[|/4fF#`Or缈[xjvk*bPgQ0pJ pC:KbB&097HUi?s.K # u770rή<(_Cxd"1뿅`ٷlہ~"MK۫+}GfgoQތ0!Di:PYVM&IءؗB@WX|vɑ,vZ+DDOKy';3j)AF$YS}98FtcP4x,d ê}Ji_P'3C>96,y9K 5rݐW(g6/j,5FBr!-/pug&Gⴖ$o/TߙcZ%ދM2VnQ/\ܙcrݿ7}(p8ЮxM ȜmXmv"> gW>1W,9ѯ7s xFCu"/N]\L c#ɪW=riMMֽu$O)%.wHF=a~5OQopO_;jC8>y75+mNUwjp]ėW>֎ׇ^VƷQ7x;vXseonxlSγOcxf3bsܶ ruܾMm-A?}ngjoڰW ]'_P צʝm#t}Yrx phf.g`Y%^e%ݹYۆ͉+/ɬg~}QO?=4úP迗̓LrSӶI_H.>-MS˗N+ =R0m:4_Fi⽽?ë6q:>>U L;.=hhg9`]u \E0IzᎮ+> 6Ư L _8:CՅN:?n~vKARZYo}o'i7}RBɢ|ڼK 5}XcM8g<д"{,I)I*ɸ}G<ܤ Q}eYm%yZ;2 ƛ-AMx,X|u.}V}E!E}k B'K KK,Vo7u8ESât͋eǪ/" 21pfAs'ї.|tE跋o_Vr?!XF9wD_^,h8p[)(Y#ٿ쯈8;#mntfvSqJ7U_!To}73.{)Kvc^?LaVT2E+Ov}&R&r(3ʜ:ߢO,U\l~'!j~L}͢h|{@p_śEF3ªDgdD+RGMGK<y~uOܛpTSeX[{=-}M7nkm^)l&EM.Ouɺď]Du:]q_d)Ɍ $MyHm YO{-&Mm G.SjD/ۃ둾-uOQDߨn|YftMe@:fe ?g=Ǫ^h.>:5ceC>8T6W>a;B8Ү ܼ+)_ёYWrG~C2Ʀ/L\%zdi+/!P>Ckt[CkJ+PcXh-]("JdC y =ÒdC^N7gw (aɳ=Heggqo*>z&{eߪ3l#ٕ=gW^2Fn CxBK̀WA?O] I~Y͋kſ {![m6rT靗y'4qDN-bTbCe ,`b'غI̳̿Nrup,%^Fdn]΄k+OK& WMy K.)kv/+Д7Xp۴5m&Qa =='r/{ITԿ?@ߗx NnG+'ur)+77~)áj+jvP<>;^nU! /`nżkvUٞ]/2d3P&3CdӁȅk!Fm]? 8?c3eI4Uw^)&}&,xt^Cû_#*Q_ِ|,I1G@?8ϹQʜgy 'O.Zsn-xnBSxt@WWqQpL:[m7=sA2FC<T~f|4Bkw_nZj5co.} zo s今҆׹LXrs{xn+m*i}Y(WJ MyX(x3jX]jf8 0*ibJq 0.C.klid!LxGd 7O~l6#Y~Wj7OVF}]yvۏtQW7"5M];mw&Mɢ| Bl-6Yp;QԆ́~bKw/YeFVl{H6Y]$gkFf (KX!1T'qyFi0/I~pLrT5A3Kw/pyn7u.,4njă81A(W7ď|-}ûlC\te3wbÌLsgɪس寽V{%5>jZݳ?0%9] rA"K^O`[#ƒ^ԋ -sKLξJsw$4s(φr\3CQ%?K o/9ey竪0,aHh"W2񙟄(`~Ȟjƌxxr'`úZNUx8@J?-˓-} `=bdpV^ud }Ydrժcv nUN^tu&>U?qhZD>ȴ; _E^kEXwdiK]^B|Hi{!|- gS6˩,tWW?VwԼ3`]vO2V3rCI!:~ %%fm-ʰ`3Ppn]w'=~r dKN_Qv{v8Uk}y6ί*: R2Pp/W- eJDB/G97r@pNqdCz,['%kپUck GkoN8'&uC(Z:Pƃ[y³? ''aܶGܾa`Rf|ԝ,?Fv+]wsGbZԕMq(;I28MwMvS}^V#D&|0r<^e/uCvK9Kkisw;Ŵ z1k&u]|z \/?SY7>,WFy$r3M^rsMC#/d'Ibbs` ,׸gHӫAgU?ݙ79H4|XF0{؟uy @gWRApbdS%IMt8ݱ:l13ddzt#( _b.UbKpժ`n9^֍^NIcr{VLc# HIC4jͶmh "f&hǻ~\va#}XD*6N B뀼h.jX={|OF Z:D?֊ CKlcQ׈PAז ax.N$z5oVQ5Ipa\X`pŅ3A.B9GXYm.""$%=WXij567cd^,e5#0 !KL5M;,6 !0"\]:t!%%345;<=BCDIJKab !678LMN\]^kl m       &'(45 6KLM\]^jk l~ %& '!GH&Shiq###     B C& D j k& l '            1 2 3 J K L b c d u v w  1   /  . -  !  !   . 0 J  3  ky~   f    % 60 0  32   .    '  *  F   b   ~E0    3C   0A 4 : + 5  &/ B9 ^  j'  0 ^ :0 z   38 0   0% $       " >Z  v  cu 0, * : V r           6R n    2 N j  0$ *  ('%&%IN 0  '   %j#"."J"     0f  *   (  '%%&      0      *Fb~   0  50   Jjrz չ(-8G@'$ ȌH $@-P. ؈SD*@(3蘧O $ @/08= 70 $?ȳ 8/Ȉ4( 7ף((/ "' $?('/ &K '/  R$  0 S$ *,P 3!$P?+# @? /  4?0/ 07@*/Hҿ.  `..  `MULTIV15DOX /VMULTIV15PRG OMULTIV15RSC #b +-4+ | 4| | Instructions for 'Multi Depacker v1.5' by MUG U.K | | 4| | Finished on 14th June 1992 | | 4| +-4+ Released into the Public Domain - Introduction - This program was written as an aide to the myriads of demo-breakers, nosey hackers and interested people of all levels and skills to save them from using a disassembler to unpack and save out data and executable files that have been packed using a selection of the best available packers in the Public Domain. There are other uses, including unpacking a program that you had previously packed with an outdated packer (eg. original file was packed with Automaion v2.4), and then repacking with the latest top-notch packer (eg. Atomic v3.5). This is my first update and was mainly due to cries from contacts I know and some I didn't know, whom I now know (if you know what I mean !!) sending me new - and sometimes older and more obscure - packers asking (and sometimes demanding) that Multi Depacker v2.0 be released !! So for the people who have been crying, demanding, stamping their feet with anguish - I present my 'Multi Depacker v1.5' !! Technical Stuff - The files required to be kept in the same folder are:- MULTIV15.PRG MULTIV15.RSC MULTIV15.DOX Do not seperate these files or edit them. You can archive them for bulletin boards if you so wish. As usual, this program is Public Domain. It is my copyright, but you can stock it within a Public Domain Library or on a BBS with my full consent. Magazines that have Cover Disk mounts (ST Format, ST User & ST Review etc), CANNOT publish this program with my prior consent and appropriate payment. Also for the myriads of disk-based magazines who are published via Budgie, or via any other means (Maggie, Ledgers, DBA, HP Source etc.), you can include this program on your current and any forthcoming issues with my full consent. Although I have most probably already sent 'Multi Depacker v1.5' to you on the day of release. Other groups who make up utility disks can also include this program (so long as all the files are kept together) if they see fit. After all, it is a very handy utility for most people to have in their collection, so why not SPREAD IT !! More Technical Info - This program will allow you to depack ANY file that has been packed with any of the following packers:-  Atomic v3.1 Atomic v3.3 Atomic v3.5 Automation v2.3/2.4 Automation v2.51r Automation v5.01 Ice Packer v1.13 (data ONLY at present) Ice Packer v2.11 Ice Packer v2.12 Ice Packer v2.2 Ice Packer v2.31 Ice Packer v2.34 Ice Packer v2.40 Fire Packer v1.01 (data ONLY at present) Fire Packer v2.01 JAM Packer v2.4 JAM Packer v3.0 (LZH/V2) JAM Packer v4.0 (LZW/LZH/V2/Ice) Pompey Pirates v1.9a (data ONLY at present) Speed Packer v2.0 Twenty-one different packers, which makes a total of 47 different file types that can be loaded in, depacked and saved out again !! When I say 'any file' - I mean ANY file, either executable or data files. The only (obvious) exceptions are where I have been unable to fully incorporate a depack option for the executable files generated by some packers, without having bombs and other crashes occuring !! I've Even Tested It !! - I've tested this program on both data & executable files packed with the above packers. The testing was done on a bog standard TOS v1.2, with 1 Meg of RAM and a hard-drive. I have included enough error-traps to stop the depacking of 1 Meg files on a 512K system etc. The most common error on 512K machines, is that with the majority of the packers I am using, they depack from one address to another, therefore I require two buffers. If the file that is to be depacked is 100K and the unpacked length is 250K, then you will be unable to unpack this file on a bog-standard 512K machine. For the next update (v2.0), I shall (probably) write a .TTP version, without any fancy dialog boxes etc. to enable the really BIG files to be depacked on any machine. The majority of the packers recognised by this program were written by Axe of Delight/Superior. Depacking the packed files was (and still is !!) a much needed feature missing from these otherwise excellent packers. This is especially annoying if you had just packed your only copy of a much needed file !! If his next update does not provide a feature for depacking files, I will be writing an 'Ice Packer Shell' soon (with thanks for Mark Matts for Frontend - buy this if you are a GFA utility programmer and you want a nice interface for your programs) which you will be able to do lots of things with !! I may even make it a multi-shell if I can find any more packers that have a command-line option. The other packers were added bit by bit over a period of a week, and halfway through that week, I scrapped all the text-printing and opted for a much easier to use 'GEM' front-end. Depacking files is now much easier than in previous incarnations of this programs' predecessor - 'Fire & Ice Depacker', which was officially released on The Source Menu 79 (Hi! to the other comrades in this group:- Kalamazoo, Speed, Egon, JJF & IWWWTTI). For this update, as well as adding a few(!) more recognised packers, I have fixed some bugs that were rearing their ugly heads in my source code. You might also notice that every dialog box now has a default option, so most redundant options (ie. no functions) can be exited by clicking on the relevant option (if you are a mouse-fanatic) or by pressing Return (if you are a lazy sod like me !!). Using The Program - Seeing as I saw my original Multi Depacker v1.0 appear on countless menus and disk magazines, I guess people actually liked a MUG U.K creation rather a lot (the last time that happened was way back in 1989 when a little known virus killer was born !!). I have therefore decided to release this version with a 'Spreading Credits' box detailing who originally had this copy sent to them direct. The next dialog box is the main menu. From here, you can have another look at the information dialog box, depack files, see how much memory you've got left and finally quit back to the Desktop. I have also put in a greetings page to all my good contacts & friends (included are some of the ones who demanded this update - but you know who you are !!). Seeing as this program is primarily a depacker, the major option to go for is the 'Depack And Save Files'. Click on the button and you will be presented with a file-selector which wants the filename of a packed file. Clicking on 'Cancel' or selecting a non-existant file will result in an alert box telling you of your mistake, and an option to try for another file or returning to the main menu. I must state here and now that this program depacks files that have been singularly packed and not packed with an archiving program (eg. ARC, LZH, ZOO etc.) as the latter are well served with utilities and shells. My program is geared towards the singe-file packer. It packs one file on that files' merits and nothing else. There are a plethora of these packers in existance, so check out a PD Library, compact disk (eg. by The Source) or other dubious types of CD (!!) or disk magazine for these programs. Once you've found a file that you know is packed, it will be loaded into memory and examined . After first checking whether the file is a program file or not, it will then check for the existance of the various packer headers (eg. 'LSD!', 'ICE!', 'FIRE', 'ATOM', 'LZH' etc.). In the case of some programs, there are no headers, I poke around (literally) and create these headers if I know that the file is a packed one !! If any disk errors occur, you will will prompted by an alert box asking you to retry and get another file or cancel this operation and go back to the main menu. If the selected file is NOT recognised, then you will returned back to the main menu (after an alert box has told you that your selected file was not recognised - Idiot Proof Programming: Lesson 1). If the file is packed, a dialog box will appear with the following information on it:- i) Which packer was used ii) Executable or data file iii) The length of the file (in disk-space terms) iv) The length of the packed file (as the packer knew it as) v) The length of the unpacked file (as it will be AFTER it is unpacked) The reason for including both (iii) & (iv) on the screen, is that some files I found would be 20K in length, but the header would say it was only 18.5K in length !!! One explanation is that some programs contain two sections, hence the numbers displayed on the screen would be a bit odd. An example of this is 'Digi Composer v1.0' by Istari. It contains two programs, an intro and the actual tracker. The intro is depacked first, and then the tracker. Another reason is that when you depack a program file, the file-length will differ from the actual length of the packed data because the program needs a depack routine to unpack itself, and relocate it to the original address ! If you find that the lengths differ by around 1000 bytes on a program file, then you should be OK . There are two options on this dialog box, and they are pretty obvious to understand. One will depack the present file, and the other will return you to the main menu. There is a third option, smack bang in-between the other two options entitled, 'Split File'. This option is not yet available until I can get it working with Pompey Packer files. In theory, if I cannot depack a file as a program, you will be told to split the file which will remove the program header and create a data file which makes my life a damn sight easier (lazy sod aren't I !!). So, until v2.0, you won't be able to depack any Pompey Pirates program files (v1.5 - v2.6 !!) or the eariler versions of Ice and Fire packers. If you are depacking a Atomic v3.1/v3.3 data file, you are given the option to choose which depack routine. If you select the wrong one then this program will more than likely depack your file into complete garbage or even worse, it will bomb out !! The reason is that the header (ATOM) is the same for either version of these packers and the depack routine is not compatible with the other version (unlike the Ice Packers !!). In v2.0 of this depacker the situation will be made even worse when I add the 'Thunder' range of packers as these have an 'ATOM' header as well. So I will be leaving the guess work upto you !! Each depacker will flash a different colour, so as to differentiate between the different packers. If you have a monochrome monitor, you will probably end up with a bad headache after depacking a lot of files !! I suggest you don a pair of Bitmap Shades (Hi! Slasher !!) before you start depacking a lot of files (colour OR monochrome), unless you're into flashing colours - in which case you either like naff acid/rave music and I suggest you go take a trip (the walking kind !!) to your nearest GP, who will prescribe some decent music to listen to and counsel you on your wierd behaviour at these oddball sessions of manic arm-pushing and body-jerking (and I thought head-banging was detremental to MY health !!). Another file-selector will appear asking for the depacked file. You have the option of overwriting the packed file (not very wise !!) if you require, or simply enter a new filename as it is up to you !! After this operation, you will be returned to the main menu where you can carry on depacking more files, or quit and take a peek at the newly unpacked files. That's all there is to my little program. It works with almost everything I've tried, with one or two exceptions - but I'll let you find them out for yourselves !! If you have any really major hassles then drop me a line at the address down below (oo-er !!). I am really a nice guy to write to if you have any problems . so long as you do not sound like a prat when you write OR (even worse) you are a pirate !! See below for details. End Bit: - Since I was testing this program heavily I noticed a few things with the various packers. Here are some notes I made (bugs I discovered !!). i) If you write (like I do) prodomimently in GFA BASIC v3.5/v3.6, and you want to pack your program files, DO NOT use Ice Packer v2.2/v2.31 or Fire Packer v2.01, as your program file will not work at all (two bombs). You will have to use the Ice Packer v2.40 (ST News 6.2 edition). ii) If you use the Automation v5.01 and pack a lot of data files, beware of using it from a hard-drive !! The problem is that your resultant files are filled with $00 & $FF ONLY !! Not even the header (AU5!) is included. This happens with the normal, buffer and chunk pack options and I do not know exactly why this occurs. My (bad) theory is that this update does not like my (or anyone elses ?) hard-drive !!! The error does not occur when you run the program from a floppy, but only when it is run from a hard-drive partition ?? Well, EGB, work that one out if you can !! I use the Supra Software v3.11 driving a Megafile 60, if this is any use to you !! iii) This is not an error, but a bit of a pain. The Atomic packers will not output a packed file that is of an odd length !! No problem to 99% of files, except when it's NeoChrome Master which checks its length for link-virus infection !! iv) Atomic v3.5 does not work with a lot of programs that every other packed in the whole world will work on. This is especially annoying for me as it doesn't like GFA BASIC v3.6 programs !! So when you do an update, please make it compatible !! v) Speed Packer v2.0 does not work if you have got GDOS present. I only found this out by accident, but it may throw some light on the subject if you load it and wonder why it exits back to the desktop immediately !! If you can help me (or if you are the author of the packer in question, please write to me with your latest version), then write to the address near the end of this document file. DO NOT send ANY form of pirated software, as I am NOT interested. In the next version . - The next version of this 'Multi-Depacker' will be released when I'm ready. I have another 10 or so packers that I will be including, plus the 'no-frills' version that will come with it so that 512K owners can depack large files. The other main program will be a proper 'De-Chunker' for Automation v2.51 and v5.01 chunk packed files. I have finally written a routine to depack these files. The problems I am having at the moment are with the very last chunk in a file not being depacked and the occasional time when a chunk is not packed !! But never fear, I am not going to be beaten !! When it is released, you can un-chunk a 500K lump-file which has been chunk-packed on a standard 512K machine, without having to worry about a shortage of RAM in your machine. My thanks go to JPM who replied to my plea and sent me some very nicely explained depack source which I have included in this version. Thanks once again. How about PP v2.6 this time - I've managed to work it out myself, but a nice documented/idiot proof version wouldn't go amiss !! The following packers WILL be included in Multi Depacker v2.0:- Bytestrangler (all versions) Powerpacker v2.0 - v4.0 (Amiga packer) Pompey Pirates (all versions - I hope !!) QPAC 3 by JMP Sentry Packer v2.01 - v2.05 (providing I don't come across any incompatibilities !!) If you are wondering why I am going to include an Amiga packer, the reason is simple. For those people who are lucky enough to own both machines, or they know someone who owns an Amiga (the normal kind, not the games-playing nose-in-the-air-bigot type) and they want to transfer text-files, IFF pictures or Protracker modules across to the ST, they will find the majority of them will of been packed with Powerpacker. I had hoped to include a working version of a Powerpacker decruncher in this version, but after MSD had played around with the source code, it would leave the first 20 bytes of a file blank !! This may of sufficed on text files, but with an IFF picture, this would make the file totally useless. If 'Maverick' of The Light (or anyone else) could send me a working Powerpacker depack routine for the ST, I would be very happy. I am also after anyone who can get a packed file, work out the depacking loader (ie. crack it) and send the source code to me. You will have to be pretty adept at 68000 and conversant in GFA BASIC. I am especially after depack routines for 'PFXPACK', 'PROPACK' & 'PAMPUK' - the one-file RAMdisk packer - for inclusion in a further update - plus any others that you might of 'cracked'. If you are able to help, please write to me at the address below. And for all those who asked for it (ie. Prophecy PD & Spiff of Orion), there will be a wildcard feature in the next version (I promise). Either it will be a straight 'select the source & destination directories and leave me to it' type of program OR 'make up a script file containing the source and destination files' type of program. The latter is much easier to program and will probably be implemented. The former, whilst it is a nice feature, is a waste of memory - especially if you want to unpack a whole disk to another (or even worse depack a partition to another partition !!) as I will have to hold all the filenames for the source & destination disks |in memory !! Of course, if you think there are any features that could be added, you know where to direct your replies/suggestions - workable from GFA v3.6 - please !! End Bit - Have fun depacking, hacking, poking about and generally being very nosey with other peoples (previously) packed files !! If you really find this program useful, saves your life with packed programs not depacking on your version of TOS etc. etc., spare a thought for me, toiling away at unsociable hours (8.30am - 5.30pm), having to listen to 'Radio 1' all day long (and you know what the music they play is like !!) - except maybe for Jackie Brambles & Steve Wright (and The Posse) whose shows keep me going through the day (do you know how boring mending hydraulic pipes is ??). I then come home and start work on my many programs (including my 'Professional Virus Killer' - plug !!) answering letters and God knows what else that I shouldn't be doing too much off (oo-er) - just so you lot out there can benefit . SO SEND ME SOME MONEY YOU TIGHT WADS !! MUG U.K - 14/06/1992 Depacker Credits: - Depacker Program RSC Design Documents Coffee Drinking: MUG U.K - v1.0 = 29/11/1991 /v1.5 = 14/06/1992 Background Music: Metallicas' new album "Metallica" $Extremes' "Pornograffitti" $Iron Maidens' "Fear Of The Dark" $Black Crowes' "Southern Harmony ..." $W.A.S.P's "Crimson Idol" Testing: Bob Clowes (as always !!) Packers' Authors Credits: - Atomic Packers v3.1/3.3/3.5: ALTAIR of VMAX/MCS Automation v2.3/2.4: OZZ of LSD Automation v2.51: EGB of SHiT (Sub Humans in Turkey) Automation v5.01: EGB of SHiT Fire/Ice Packers: Axe of Delight/Superior JAM Packers v2.4/3.0/4.0: Jek and Moose (JAM) Pompey Packer v1.9a: JPM Speed Packer v2.0 Spiral of The Firehawks Contact Address: - MUG U.K c/o Broadsword Computers, 141 High Street Rhyl CLWYD LL18 1UF Any problems, queries, questions etc. should be sent to the above address, and don't even think of writing if you want pirated software !! I get extremely FED UP with people who write to me wanting the addresses of the various pirate groups. I DON'T KNOW THEM - SO *ISS OFF !!! I will keep all the disks & burn the letters from these idiots. If you want a game that desperately, go out and buy it !! It could be worse and I send your letters directly to a nice Mr. Hays at FAST, but seeing as they are only interested in people selling pirated software, it would be a waste of time on my behalf (and stamps too !!). One last thing, if you are a kind generous person who has got a spare bit of money lying idly about, don't send me a cheque made payable to 'MUG U.K' as I get strange looks from the staff at my building society !! If you really must send a cheque, make it payable to 'Mike Mee' (stop sniggering at the back - I can't help my surname !!). If any sysops of a BBS see any comments directed to me regards this version of the 'Multi Depacker v1.5', please send them to me at the above address. I do not own a modem so I cannot access BBS's to read the comments. Bye for now !! MUG U.K (of The Source)                          !            `O`Pack-Fire by Axe/DelightIKOMFa&NK kA -Jgrѓg f``GP$]*$**ԓ**p AC$QC&LN&&QvHCj&l",p&&QjNH Na f.%߇`>.-%Wއ`,އgNu> f.%߇Nu.-%WއNurއgAQNupaSAk0gTSAgXadBad\`dpaSAjpNupaAAL!a҅NupaSAkPAAL aAa0`Npap`.pap`>aJ@g p`2aJ@gp`(aJ@gp`p``"agQk`U@C!!Q`  U`R$( <=qAOA*! rpVo3 RHB.e0NTUprepliѓ(.DN >'HWfY1z[F\^s^b1z`֘vb cbd_9f~ hJRjl1|k|_rl^sm4spv msV:*#rU>:vAFՙaJY >@ DĠxEsf2}|['PDJg)`mP0o3$ 3v\=50RUK3p;` rmB$kpkI< gS`FpO9z'w'nxrdmp.lOjJV+}pNBFC;OL4) Fx6WrvBS)1p 7D;`6|"1sNŕN_ Nen+DRe,=l Jn+?J-R%E'JEvbUFE8vݢE r8FNXvT&Kr1Cd4gp;lN+`ptWHG t9P"`P<8g$+n/!|חZVD rmT"$M;t!I)|X%[Z`R'P.P희Uʆ!H(<B` $> ;@vmDfP!J4(r"o6ʾw:B*S FA4`+G'$"mu:`A,Er6:p ߃[QfV "k,Fpل<\pD1?.0#8Bm'5ڼoFN 'w {'{{';1&I=*;| `/{43 M5M^7d4brd7{+^2u\ALPe `qJO{,mA^tW3;A;Bu#;C;D "H ؊H4uξڊ@:>ǿXF<@:8v)$,"|w&2l`6 GAGnI5OxbfG5bTq|oQ4pu\tk"O"K>s5BN ^W2Yu^(apXoޡ(y.`8(HJ4!D2fHnGTI/"MK~Dbi'(>Q]if‰|$|`Ք.p1W 0(2p u+DC E5H3RE6ԭ+P5$WljOMjWjM5j_HWk(@1B20B9v/k%ޘBS#`h҅ۻf' $/\V #4$/: '{, 3pD/ByN`r %e!g PIg Ep370&C -4`~ #c " `V0T"byYcp=wxpV?Jo%3, O"pN@,P"rTӂ^(w. +M^#E;%ݭpCYi:8[$‰ BQÖa$~sCEa$&nu-\8#K!Qack[fp!n-FirgBp`eby9;4` pWF1ct_+Bf30! q)%FIRE֑'$,0׸I* udpðBpDВGb{D'8U5ڄ`uptEH,64D1-Ap\ y)wkP1[UaJ0(J}BH,0Eһ"N3$4VMKalВ+j4 OM4TzaeܶnA3.5/uMod/MCSWHHgXRwp }UlYATM5)б->"] XRHVA[$Vqa;'/ݒBI0x$8:T| IPzW]BBI"*&W`FJZH)&Q;vn8"BtM $HaGRpXI#Ȇ{IceSI#Hpl=]_HPLSD!&xp"[)266* Y SXu.SP20f$VU_wp0H:A.ܳ+|&kq 2>v(#"mX(]e 1!POPIfxpU7vpQovQGp^FpтkF% MBjV6ԩc.ŨƴDfypY}6\Kp Q>*Nqb#Tb4 X`0n I?/:`NKx/z,Jffog0|vC&`V&3۰ pBCk YTv`r"]h:&dGŵQ.P, .`bFxI aN`^XC`nx Ogt Ga`I!mx}4J`|&M2tx:x Z0 L&2¼%zpMr11*mB !읡줨;;#$bF+wg8 (s"&bc!jFGl&b&b&]&Jv2B$#2;$s`خM~Q(%^^]dQJJgp,q Rf&a :("_4n`"77ЪfEBp'T;sO6C&>W(L@^`uGH8HGdwJݹdCѺQ]@`,>NCE(Ge֊fsJCgzTAarjdÐ)HSWЃd&2HkUk3![SBkփeǙuj R.sJjDt5=jCrA0 i?`?<YhpE!ygP9fX`L,3Jg&B.C`a8aDfap-IOP;*ZgEep}^X VNЋIaZ$|"Ero8\,+dReturn]G{x g g>Jtt0`Ar&Hjr-DFەdHƽ7udH0Ks"H/[1][SE^w-f`Ei S),gNu"_K{zM~uU}V;,I-p$HQ3*-Hl8G)j0X>0>OFP˰]7VGï <`AkZ<r^nPX…0-00`0U3zLQy$H$&X"BA -KjϣaX$fZB&nn>02HVOM5 dS!UbDJPlC*d~'r`:H eP€P-[hpL@a@HCC1L|AfNp =LNAE5`2_ `zAgbtf&Hq"-Hp alpMahNP`Tfvr p0]`pdr =Nfwj:GK Qp,Ap 20Dn {\`#\Xpea>pZ ~dJZ B=AH(5jD :V0.K0=B0&HwpsouC e$dȃb0JvPr裴! 22"0NBL,9JM劏"JӘlv#A>т2n,(` 0;-B -79Vg1NWdlݚ G:Ji d  FZf64YjH\B T #$#&0DK4(*BvY$>2p:(  n7\ F#.qp2ut"8"PQQEP 1F6!P1P!0KLP`fџ qZfW#aG O:,,NGnc֩70v{rdAd6+<g,BM~B(dHo<tӎoB Hgv:Oz]Q`dIư`ZHIE$%aߴgcgr!STDr2#PCOM r LPT:f4F1ڄ_0=5 1pHk"im_0<m~ %*2"hQ}$_ G ge>Mj^p;$Ffgz jaZgzJAn p1yp0T+NɁAC?I>BYpu 2BR dzLST:AUX:CON:MIKB:VID:`̯`<"`ҰIɺHzj7"P+p")W0C5I/ VBT9[dL?D1EN؉RrDуtsQ"FPgC :t$PJ.ng0HR;1Jjf$C/i%I q4%_o'pV?b4xXrp*ŴvlWBcɞJB%|Wbk&Ht=H>ū]TQ[Bd8*L1.?<vcSFzA6 qg5;`RAdR me <-rRF&,XnxΑ4ٱfEv+0JFjߗDFv-HdMBFVHFB^tƮkʆ;C|`HQ2.l Aeg>r C]5e&!R6>0c 9cd1H nFl]~bG Vjܐ`/(e4Ae0FS03RkBmf$He1ٮ2pL#WK zSAo^JAwweHPkJhl$I TAU4H D $"RJye_ 5n'ֽ[ag`af`ae `accpu^d 4m4k VʟÔmth`tpa ".mtj(6pM߃pOpI&o$~*7rUt)`t tr`tϭtmrNtfgAr6תIQl'ʟ`6°U>BdgC0RG YfxIaV$!(ŽFJ 5i*Do>Eo:l6Al2T VN- X CBCcVo Acn+lo%AH/=k9֨(s ]Ak024E$ l,755A6hA|NK5:8;B00/9xtdA:bSFSGFn\GnX/lDk0>qDEk1p FBȕ Gc"&H"0p;@bpmrtl<łPD ;T&-H;n4ޝa-m \DDEbE1f=EX=DZ-|cchTPB t40(mhLN?fbC`=Cn#dvdrAdnEDcRGRFJ=FLtGJٰptBfwd=B:_14$FNp_[00]dw):4E!rܭB)[vJ`*M1"c[wk]g|g Q]oVU` xQSr63=]Bťp 0-H4=p4N2H#\-1d:'1!Bl,a D'"24x6o!jBcHDDdS^kg RBAjw^;tQmu^H.AjEA<$Ia ?6$XaJu`HRzfNT"_]}+F~Hg"cc/ 0)K'eH2ᄣ$P4[H%]$Y2Pg1AƎVu5%('lo˵͐vi`JFozz~OaHgv0< 2+*X^ϻa&3p/}m˄Hza`?lA"Jpn>$FG,MpARo0N@uG5+s W2=GmʇgpV|`<_ȤE7"E pfGDHxӯ/$I"t QɁYk"RGef,=,TV g *;jfҭLJgZA/e2:*9L#j1i:A2<XJX[}j]`p?Ua.$d·a?a2/R"Vr1s";&0P@_L3l\Bz1r `6H#AL3|aHQբ+_Ltp.$!صfls2e}6gYHX#Hmr22n`ƶ4b r!F6EWu2 "tZ:dW95W"Id>Hd `A rmynaWAe4RBBcz]0\0$2Wms=P/9m"Xpk`Jg"r~RAfkFn֒1/`lcJ#f K\PnkB&#oe4"CgsƦ:Yd"_&B[݂ZHnFXg>48HP{- ' b6^$_/,(Z/ Z4s?SibPX,$p܂c\/v\"nB9^VBt {&4sDϵ`aa/, 0gSJfS{{NOc9 cr `ӴX\o'c`$"bHzh`|k gpOdߡ gjYvr\jfnʏzelflu6$]!B`JpjNZcu f J> #Tm~ɦp 0p *0]m`:Q.RGJGgSGSFFgCpE`Y3 f`J]YgHna(fx^f 7Ca0 b ڱ4 Ee0 gg.˗ Q`L@yft z:5DdK0Ppa`EgU0PLFRE`ܾEfɿʴa8?nYv2RF`yE$O.@1L͉HM(K(fz/ +; er|e2"_-H$rA e ` gfgɖBuvBgaZe -|np[HpZ>ajOPJ0.g_j"Hg o3\f`*fS !1. E浒_X0`ڬvc] 6xYVWBna|,f0D!|p02xf1;i`zW,#Gvy`$U&Hz&$A\&N\+4$$ia [a26T`@VAfPF 4Lm/RR{l4.hg SSAH ұ:=pbrbp>pY8=205~ ,HC||:N\GfB"_HQ`6BXg"F-J}fgO"AO:Np\B}[G06#f&#L[k;" C gTfyPv: 6"cgRCC(D#8`Dv`cv5:k"́dF"UJZ+}Htl`lj0b$\[`X'6a<0yXK\SG??2߇NMXJk X_t5&_Ԫ>mg `af`apm亚1`Hl`R` `&$Jh%JfRRRRRRHP? ]63ѷH~8#P&r`zQ`z ` zn`z4=(a 2d*})#,k*f"!Z~Ddq+Bվ?EyZFirefJIL.Mx_=Bl ^8 HJZd"L!avl8|/J\nf~mP`,j> gf.%߇.-%WC ِg7X@8+-}u0 J ; XR x C+`쎲U5㮵ǪRENS0,H(HavFIREfal$Krw&?$NKvwaR.,LEy\zvrJDdr JvFG :+ a6aԣ.UpdN`2ap`(aJcgp`p`cyV`*ag&k`UA;f3ֵ"4 d`ĝ 0' U(\qHaX AU5!HXJaLKaF.~(I,I&NDKrd*><|8#zѸ&BDCQbr(0d(a*d&cv!a(HnՖQҩm+k%n°&lLBG%_^NuƠܫkaAg"CSSqvtaTp1 mHaBqjD`rkptadp|t?aCbn!`LYU  (@ O4# `U u[-fTT?9(݁БK]J`jSrwX(SH6vxlFDSB0JCgAVUHB` Jퟙ32˰q&LPo}8t %FBARB^uSCnPD3HC` s lE` AgV(2v0˷RC*HKs04`0 %:r,BvBDdvxRDE-NKSA"ɳ_3mݸv`d ?P#:ˆ,#k*jan(WMF`^L%QeaFВ:* y#)l0)(GgV ="&>|i V 5`R0|JPaG`P +iOM&HUMv¶; 34#4`X|"zH\]>+n ,?f:'¾|m4TO]En(Mm6XLa4P/D@i4I}Qaq :| z  RTeXeFgPEVE` HE|aPVSEk|HF&Rj/ <_a:c퐌%f .EH);`[7>PC$"B 8*'1p ATM5fNR*I(MIoB,H&5Y5iHU:U͉rfhTƠL5|8gCY4p++P`Q2BC&HL@&M`_HRakZ$_NZSj`````X#>*}gU%CE}|0z{ A XCD~mQHѾmf`>X3(J z>grgnXebL`6qt4ajd8afdaberԄBRB`aPdxVSTf:DVtE($F2RRK $tTSVm!z*`aP54Ffaepa~paAGg`a6RB30<5(hx"`gЁH`oS<"/Vd /V$4Sf$A>R?8}Ѓ(H,Ia*N(<2E &N~5b7401# yb# ͬ03svU73&1"XGfLɉH+­lprFP&Om6t[2AXȱdC>prq HRA]!bnfrB f90ĒUTDʆ.<#(zhFxoIwb0)Q|jdT01GmG8+˝.kEg5xJeJ䐄fmlL`Sj8* \`ZgYR81}@%I41@3GdJ,13b2fH|bsm-t)4bCBjTFkg, `&sO |u",`g]A%-QFDF*D?|0; JA5̵2Q[̋VzN`/?/6;ws314rKhHB SP20fTJPfP*H*.JEg{tp8`f"̇K:C/Y$I&I,O~F#@G鰆SNpOQGL|~RkG0^`$tS!#0`X9.t jdFBBBUfHE}$b$h?AQ8$ag4 LMӦiQ2^3*!-a!|Ahf>RL;rxF(FLDb "DW3P8 .*{|$,7:J (.@ Q7~ fuiC(.4 {$pD+|  "~r``l*Fg|  z$~G0X&Yet Another Useful MUG U.K Utility ! Multi-Depacker v1.5 Main Menu What Can I Depack ??Depack And Save FileFree Memory Etc.A Few Hellos !! Back To GEMTHIS PROGRAM IS PUBLIC DOMAIN, BUT I RETAIN THECOPYRIGHT ON MY OWN CODE, AND THE AUTHORS OF THEVARIOUS DEPACK SOURCES RETAIN THEIR COPYRIGHT. COPY ME - I WANT TO TRAVEL THE WORLD !!(c)1992, MUG U.K Multi-Depacker v1.5 by MUG U.K Depack File MenuPacker Used: File Type: File Length: Packed: Unpacked: Depack FileMain MenuSplit FileJust In Case You Wanted To Know ..Free Memory: TOS Version: OKMULTI-DEPACKER v1.5 (c)1992, MUG U.K !!THIS PROGRAM WILL DEPACK FILES PACKED BY:ATOMIC PACKER v3.1/v3.3/v3.5AUTOMATION PACKER v2.31/2.4/2.51/5.01ICE PACKER v1.13/v2.11/v2.2/v2.31/2.34/2.40FIRE PACKER v1.01/v2.01JAM PACKER vv2.4/v3.0 (LZH/V2)JAM PACKER v4.0 (LZH/LZW/V2/Ice)POMPEY PIRATES PACKER v1.9aSPEED PACKER v2.0 Wait until v2.0 for more !! RELEASED ON: 14th June 1992MUTLI-DEPACKER v1.5 - (c)1992, MUG U.K MUG U.K SENDS GREETINGS TO . REAL FRIENDS (AND BUG-TESTERS !!) BOB CLOWES, STEVE DELANEY & GRAHAM BEVINS THE FOLLOWING PD LIBRARIES: FLOPPYSHOP, L.A.P.D., PROPECHY PD, THE SOURCE PDL & 16/32 PDL POSTAL FRIENDS/CONTACTS/BUG-TESTERS !! MAT (UNT), SPEED & JJF (THE SOURCE), MSD (POV), BONUS (DBA), MUNGOTGA (NPG or TSL ?), EDDIE (THB), LEON (HP SOURCE), SAMMY JOE (DF)RICHARD KARSMAKERS (ST NEWS), MSL AND ANYONE ELSE I KNOW IN THIS WORLDGREETINGS ALSO TO ALL (DECENT) GFA BASIC (DEMO AND UTILITY) CODERS, STOS CODERS AND, OF COURSE, 68000 CODERS WORLDWIDE !!HURRY UP READING - I WANNA DEPACK SOME FILES !!KEITH FRISBY (UPLOAD THIS EVERYWHERE), MARK MATTS, JON GARRY, GRAZEY<8?|0\8qϜp8`8qsǞ=8?p8?t.88ppvn88ppvn888ps88ps8p8?q888  qB 0NO1P/*! %&'23 4?@ ANO P[\ ]efgrs t~  #    78)9cd*e&,56!7STUgh)!$CD*Ecde>)CWXBYGE 6!QR0SEC)  z  $&'K% C&  B    $  $  #    " B/ >  Z C-  v                :   V  r  ! 5 #'  "       !   B$  p" 6 R n             i  2 N C7 j      .  2 . 1 J 6 f3 (  #  3N.  #  3Px +8>?>;.Ϳ,8==;9/)58754,!$-7:743/ $(07830/,"(*065/++*%,/262+&&()0234.'"#% )4765.% $!/;=:6-"%$*9<82)" .?A:2& & 0@B:0# &$ 0DG>2# %(.FK@0 '-&,IOC3!(0-.KQE1 *51" W.  $`..  `MULTI_V1PRG <,nMULTI_V1RSC D`Ox< AON#f?<NNTJf,Ee|pVa=/Eepa=tr"_ta7$Ala'r?<NNTUf(Eepla=J/EfEpa="_a-pEfRp a//Ef^p a:r"_ta4AlEfgpa:/Efypa:r"_ta4XAlp-lUgaKh`NaG4/aG:WHH/aG rdmp.aGJVHHgpEfLpa:F/aFa a="_a,EfRp a.^/Ef^p a:r"_ta3AlEfpa9/Efp a9r"_ta3Ala.a;" <a)\"<aEaEa#NuaAa8Aa=vAa=nAa=fA,a8:A a=VA$a8P ma>p"ma4pr ma;dp:a-:gp ma:"ma4`?<NATrAЁ ma9 m0B0$m,Q mBhp\a9"mra=B ma maT/p\a9l"m"a= m a~ m 4(o m a3> m 00 m "m""`$m,P$m,g m4(oJ ma/ m"maaR" ma:v"ma3 maR ma:X"m$a3`R ma8Pp:a8"mra;|@;|B;| D;|F;| H;| J;|L;|N;|P;|R;|T;|V;|X;|Z0-0ra+~+A0-4ra+p+A0-@ra+b+A0-Pra+T+A0-Xra+F+ANua9 A(a4$m( a+;A\;B^;C`;DbA`8-bH4m^؊:-`H4m\ڊ<-^H>-\Ha.0-b<-`:-^8-\vt$m("a*`8f0-2H maGh2-2H maGHmaf"-pa*;@dA`4-^H2-\Ha,Nu0-8H maG2-8H maF0-:H maF2-:H maF0->H maF2->H maF0-mdfEfpa4/Efp a4r"_ta.fAlp-lSf:0->H maF(2->H maEA`4-^H2-\Ha+|a,`80->H maE2->H maEA`4-^H2-\Ha+B`0-8mdf<0-8H maE2-8H maERA`4-^H2-\Ha+a`V0-0-0-:H maE2-:H maDA`4-^H2-\Ha*rN`0-:mdf40-:H maD2-:H maD|A`4-^H2-\Ha**Nua0pra?VEfpa0dEg pa2CHa%p/a2"HAf,a=HmfHmlHmrHmxHm~a p:a3ZCla%8"HAra%.CHa. p.a3:Cxa%"HA~a%C퀄a-Ala2Ara2Axa2A~a2Afa@g.Hma"-pa'~;@d0-dU@fa` P&N AfaFg2Eg pa2/Eepa2r"_ta+AlP&N Afra hpa-+@p m8Egp-a1/EgHpa1r"_ta+dAlP&paN Hx?<HNA\+@ -氭n8EgPp4a1p/Egpa1br"_ta+AlP&pahN /-?<HNA\+@ -$-ra5pa>pra=dEgpa.rNu+m -Э+@ -a `fP(`Q(pJ-(gpJf2 -a d``N+mƀEgpA퀊a,BN ``+mƀEgpA퀊a+B m BN `N+mEhupA퀊a+BN `,+mEhpA퀊a*B m BN `V @D!g @D$g* @DCgP @e!g| @E!g @REg @5!g @5$g @OMg @H!gn @W!gpa2C`a)A` "@p0|aA` +@ -a`h`x+mEiEpA퀊a)BN `V+mEiVpA퀊a)jBN `4+mEifpA퀊a)HBN ` @reg @e!g @PIgEixp3a-/Egpa-r"_ta'dAlP&`pЭa2PackWHH/p"Эa-IcegBp&Эa by WHHg2EipVa-L/Egpa->r"_ta&AlP&N p"Эa-IceWHH/p&ЭaIWHHg^+mEjpA퀊a(:+| m +@X`l"-pҭЁa$+@"-pҭЁa+@`Bg갭g gg6g.gPgHgj` -ⰭlhEkfp+a'/Ekpa'r"_ta Alp-lUfNfN`(Ekp4a&/Egpa&r"_ta vAlNpJ-&gpRf NFNNzB?< NA\+@ <@a ;@f/-?<HNA\+@ -f@EkpYa&T/El/p a&Fr"_taAlNF/- ?< NA\N -``r -"m ma ( -x m*!H -A*a*`r -"m ma -x m*!H -x m*!H -A*a*`b -Эx m*!H -x m*!H -A*a*f`b -Эx m*!H -x m*!H -A*a*4`^ -Эx m*!H -x m*!H -A*a*`n -x m*!H -x m*!H -A*a)`@ -Эx m*!H -x m*!H -x m*!H -A*a)`l -Эx m*!H -x m*!H -A*a)``:gNgxggܰgg0gV`0-f |@0/- ?< NA\a!pra0XEl8pa!fEg pa#CNar/A퀐C퀄,a.A퀐a2gDElSpAa#/Elpa#r"_tahAlp-lSfab` NFNA퀐ag>Elp2a#x/Elpa#jr"_taAlp-lUf NFNA퀐ra -$-ra(paFHmHmlHmrHmxHm~aZp:a#Cla"HAra~CNaZAla#Ara# Axa#A~a"pra/Elpa "A`4-^H2-\HaNu0-LH ma402-LH ma30-NH ma42-NH ma30-BH ma3 @/A퀊"apJ-(gpRf&0-FH ma3 @/Elp a""a`"0-FH ma3l @/ 0rHGGdHGGdSWDуdi?<>0rHGGdHGGdSWDуdi2?<>0rHGGdHGGdSWDуd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNuCEdSW`?<,>CEdGeH@0r`fJCgz?<0rÐdSWЃdi?<0rÐdSWЃdid?<0ÐdSWЃd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNu?<0riP?0i?`?<`m apEn̽ngPn`LJg&B.C`a8aD*9nfap-I4=|p4aHz*9ng ENp9n` _a &nO:NMnIKm$<Nu[1][Error +111][Return]Em  g g>Jf`Ar Hjr-D@Hd0H@H 0H@0CNuAJ"H [1][fSEfNu`HQ?< NA\Nu"_KmMn V,@IO:HQ <-H,,`N,"Fd d3 d# d# # d# # # # d ALH dAL H LH d AL`H L|0H>L|H>d~# # # # A`@ALH L|H>L|H>L|PH>L| H>L|H>L|H>L|H>L|`H>L|0H>L|H>QL|Nu$H$&"BA -K aXA$f B &n NuH>dd2d"d""d""""d LHC dLHLH C@d LHL|H| L|H|PCd~""""C`:LHL|H| L|H|PL|H|L|H|L|H|L|H|L|H|@L|H|pL|H|L|H|CQL|Nua`Np?a a?<LNA``NuNu`aza`aataHA"-Hpp alpMah=@N?<NNTT@A0r p0Q`pdr ta0.N=@=@ ACp,2QAp 2Qa a`\`Xpea>pCZ2Ad0A2r22aZ"<)0<NBL Nurt=@B=AH=BDa "<)psNB0.Nu=@0=@=B0=@a"<)psNBNuC2 @ e$ @bA0AP2r22a"<)~0<NBLJNup"AJӘQNuA> NuHz(` N)|Hz ?<&NN\Nu9xgNuWxNuf  Zf 4\B&0D4(*<B$ ,>2::(   F..26"8@"PQ1!P1P!0PP`0  q#aaapa O: n,NNuNuNupc?a0QNurdAd6Ag,B(dB(dH Ao<atoBAp`NuNu?<OA`d?<IA`Z0<H IaLt Ig Og Ug Ag Rg,afNup`ap`0afHRa>Er$Wgr STD:gr COM:g r LPT:f4FA$_0=@Hk"~CA0< BhaB2"pNu$_AJ Ge><QBAJpNuafgzp=` aZgzpaTaRFBd&8*L?a<aSF Be BgQRB`RAdR e <rRF&0xaCٱfEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`HQ2.l Aeg>r C 5e&!R 0c 9c0`<R"_`VC0 Ef"_Nuaa/ CJr  g 00VJAgB @ nN @mHJ@j0.4DBUBk0QSAg Q.`S@k 0`0BAJ "_Nu.WAkQA 0g` @$@JfS a `QNu$Aa`QBNuHPHQ0(ika $I _aIUd4Id4Id$Id `$$$$Q _Jf,aId4Id4Id$Id `$$$$Q @NuSadIdIdId`Q @Nup `n/ a,$I> _a"G` VNuag`af`ae `ac` acpNuadpNu/ a $I> _a 4Ae4v` VfANuHP0(R@kBa $I _a IUd4Id4Id$Id `$$$$Q @JfNuNup `a nSAfNuag`af`ae `ac` acpNuadpNua :SAkfJANuH HPhkJa , $I _a IUd4Id4Id$Id `$$$$Q @JgSL`QNup `a ΰAf` VNuag`af`ae `ac` acpNuadpNua 4@m4v` Vf@Nuth`tpa ".Nutj`t@H`6pM` pO`p`po`$~*@-AH`t)`t` tr`t2`t@-A=B`rAN-@f-H `r6 @`Bp'rta n4rt6(SC0(S@apaBdpapava0paRG=GYfx-IC=C=C$tBft=B=B(tFJ=BBBB*Do>Eo:@l6Al2DDk =DVBnDEk =EnBn@cVo Acno,_NuAH`/=@a _a T]Ak024E$ Bb5B5A6CC5CK5C:8AB0000DkxEkt00A<:d>:bSFSGFn\GnXDDk0BhDEk1EBh Fchh Gchh0hb"0hbpmrt-|4^P-|4rT`&Nu-HN-?<NNT-@\DbDEbEBf=EX=DZ-|TBPBt n40(L=CN?=BbC=C`=Cn@drAdnED??RGRF=GJ=FLtGJ=BptBft=Bd=BrGOpЇЇ b na222-IjHVMJ,_Nup `T np`t??/ a, > _a4$FAJp_@[000][vx`* [g" ]g |g QSx` xQSrQ][vx`* [g" ]g |g QSx` xQStQ]BAJ0-H4=@p4aN2HNu 24DBaDB11!Nu 24DBa DBNu 24x6o<Ce(FC BdЄeNu B/dHDDdRdQRBNu&<:<`g BbUC BcjNu BcHDDdSkg RBAрjNuNu0ftNuB H@"jNu <}a$Ia `$XaH`aHR?<NNT @"_ <}Nua`QNuHg"cc/ 0)a _$PS@kH2QNu2(g$PRAA4DBH%$Y2Pg 1AHRAA%NuBhNuao aШNupNuaJFoHPJhja?<?B?<BNAO _*kBg?/(?<BNAO Jk NuNafoazJBkAf`a|??/?<BNA.k \Hx?<BNAO [HHNux`x*0ao< 2fJjr` NAXOJkpNu0< aH`0< CJ2p`p a2`p CJp`a CJ"p`Hza`Hy:"J`pB.D=|HNua.DFpAR@C`N B.D=|HNuB.Da=GHgNup`a`aCJ"E p`.D<.HAx$I"t Q k"RGef~`SG * g *fSG`<.HjZ\FkBJnhg Fgd Fg^HS&I.aQ`p???<NM\Qj&_NuHQ/?`jAJ gp gj g grffnnzenlfJ.pj6pRGFc$SG` J.pjpRGFcRF` Ff`> `?~ap a0p a*0Nu|``CpE`bf`FgRGJGgSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0NuapgNu4.|f?HyaNM\Nu=|H`Lta zEfpadppa`AJEg0PaEfaFRE`ܾEfp a@a8?nxnp a2RF`<anxoS@f nrfSnv=Ar=FxNup` papq4.|f?Hya,NM\Nu=|HHaPLNu|A0"P2(@e2<EJ`QHP=|HJ@g$abAJ$HpR@ 0 f _a`QNuHPp?ap a _2<|0`C&pHQ/Hy@NA NuC pa:NuHQ/Hy?NA Nu&g4 FgagJAga2< R@AdSf0Nu0ap Ce`&g4 FgaJBjagPAe CbRa R@Sf0Nu FgRarg JBjaAeaJAg RP0 pNu`< Fg6a:gJAga @eaDRP Nup NHѨB?<?/?<BNAO JkLLNu&8aJBjaJAg Df*ڃkd0Nu DfրBH??/?<BNAO LJk!@NuHBHh Hx??<?NAO LJo ѨLNuk:fp`^k: g ѨNuBHPHQ/??<?NAO _JoѨfNuBHPHQS/??<@NAXLfѨNuJkp%`B9z`$H EaAz AerQBL@͉H Ia("H _/ aaR _/ ?aHAJ-H AerQB2"_A*-H A e ` \gQBa9zgaZe -|zp[`pZaajAJ"H0.g "Hg \f`A*fS !.gR EJ _a`QNuHz?<&NN\ @Nu x NuADBh`TADa^ nD!|}Nup#nfpnNup`p`#nNuHz` Hz`Hz&$A?<&NN\NuNu4Nu$Nu?a0` ?a2@@a*` a Nu4.hAf n4LR@RANu4.hg S@SAHNutbpbr??pa>pYa80a20`,9nHHNu9n`aNf"_O:N"_O:HQ`6 9"4g"9"0gJ9nfga"AO:Np\Bn`׎G06#f&#-K Nuk"c" C gT6f`Pv6"cgRCC(D#8`D@v`v??NMXJNuJ@k??<NM"UAf J@fH@Nuaj0fpNu\@`a`]@><CJ Ipa<0HNua`]@><CJ Ipa Nu?|`?a0R@f|0aHJFkHPa _Nupo`֜HSHP&I>g\SG??<NMXJk Q _t&_Nu&_`la,JANuag `af`apNuapNuC`C``C` C`C-K JhfJfRRRRRRRHP? @CJH~8:E#P&<2 `b$bYEf`"RAf rЁЀ`&Ѐe "ЀeЁdp`հJAkfgRer?DDЁaAa|8$HX :CJE` YEjT"_$P"2trDDd0d d d` QjNu`aDa DNu na^ K"ng42 $`gk2&Hg Af deђ$`ebѐXf&n Nu AgebѐA``-K x$ n($n$"HgD" &Akc(bѐ S`g(" k#&Ac(bё2+SAI3 Q&f-I$&n Nu-K x$&ր n($n$"Hg^" k&Ac(b b S` S`g:" k#&Ac(bbrkX`ؑ2+SAI3 Q&f-I$&n Nu$9"0g6ACm r2f`ef2f`#"0`Ƒ`a!@ NuAANua1 Nut`t`t`t`t`t `t`t`t`t`a ( Nua Nu@@Nura00HNur`r`r`r`r `r`r`r`r`zQ`z ` zn`z4=Aa-IHQB0al _JNuz"-A=Bal-I`n`HKa Ice!f@xar.Mx&N"NEpw!QaZa& CQjpwE"QLNuahd(rabdC v !a|H@@Vҩ%@QnnNup%QNu> f .%߇AQDNu.-%WއAQ,NuއgNu> f.%߇Nu.-%WއNurއgAQNuCtaTxr1 Hka1 AgCptaTr1 HaBq `rptadpt@aBC@!!@Q`    |`H Ice!fD K.(I,I&Nala6ad*><|8#zD@DADBDCQQHQLNua^d*raXdCv !arH@@Vҩ%3@QnbNup%QNu> f.%߇`>.-%Wއ`,އgNu> f.%߇Nu.-%WއNurއgAQNuCtaTxr1 Hka1 AgCztaTr1 HaBq `rptadpt@aBC@!!3w@Q`    `fHaX ICE!fJaLKaF.(I,I&N%aDatd*><|8#zD@DADBDCQQHQLNurQNua2d*ra,dCv !a*H@@Vҩ%3'@QnNuf%Nurf%AQNuCtaTxr1 Hka1 Ag"C~taTr1 HaBq jD`rptadpt?aBC@!!3w@Q`B   `vHah ICE!fZa\KaV.(I,I&N%aT,Kad8><axdpaz>|8#zD@DADBDCQQHQLNurQNua2d*ra,dCv !a*H@@Vҩ%3@QnNuf%Nurf%AQNuCtaTxr1 Hka1 Ag"C~taTr1 HaBq jD`rptadpt?aBC@!!3U@Q`B   `HKaZFirefJ IaL.MxaBIl|HFza`d(raZd"Lv !avH@@Vҩ%3#@QnfLNup%QNu> f.%߇`>.-%Wއ`,އgNu> f.%߇Nu.-%WއNurއgAQNupaSAk0gTSAgXadBad\`dpaSAjpNupaAAL!a҅NupaSAkPAAL aAa0`Npap`.pap`>aJ@g p`2aJ@gp`(aJ@gp`p``*ag&Qk`U@C!!3U@Q`  U`NSH,H(HavFIREffal$Krw&Q$NKSf JaR.,L%EB|HFzaJd(raDd Jv aFH@@VҨ%3p@QnaJ@g p`2aJ@gp`(aJ@gp`p``*ag&Qk`U@A  Q3w@`  U`\HaX AU5!fJaLKaF.(I,I&N%aDard*><|8#zD@DADBDCQQHQLNurQNua0d(ra*dCv !a(H@@Vҩ%3@QnNuf%Nurf%AQNuCtaTxr1 Hka1 Ag"CvtaTr1 HaBq jD`rptadpt?aBC@!!Q`L   `TX?9@(H*БJ`jS f dXBAf d@G6vBA30HxlFDSBf QQJCgAV30HB`  3@Q&LPoG8tf dQBARB3 gHSCf QQ3 HC`   Ag@G2vf dQRCBB30Hf RQKs0`0  BBvBDf dvx@f RQDE HSA"Q`3@Nu`vH ATOMfHU Ma`|Gg"TezF`$|a*g\E`|a g E`anG`| aE?fI`BEGg EQJENuaFG`I|a84@HaDgt@IP:$$ y#@Q| z GgVTe F`"&>&Nu|agPEVE`|aHE|aPVSEk|HF&Qjf0|f _a:LNuaG` `````` `> BPQNu BCE}|0z@A@B@C@DQQHf``H ATOMf*IHU M&`I4|a``X|g"TezF`$|aHg\E`|a>g E`&`| a,E?f:I|a|m4TO]En(MmXL|a4P`DBEg EQJENu&`I|a84@HaDgt@IP:$$@Q| z gRTeF`|agPEVE`|aHE|aPVSEk|HF&@Qjf<f _a:LNu&` `````` `` > BPQNu BCE}|0z@A@B@C@DQQHf`` L&JY(JY,|@: gta~e `6xvazf`4`afd4abda^eraBRB`aLdx6<aNf4DV6a"J!Q`f Nuxrtf BQ2RAISAfNurtf BQNua6t`v ``H?8@(H,I*N((< :<&N~Q$~d $RESn`2,H$1@ED@@Ar$TApAn Qڀn1߂@LNuoSQ``"a^H$Itxr:<9TDZb63@RCKs c,03s@c 7 3 11TBX03s@b7 01@3 1TBQ03s7 3 11TBXGfL+Nu zClprtQQ6t[2AXd zC>pr1HQRAQNu zb"zn$zfr4<x0<9024TBTDQ z<&z<"zH$z84<tx0<82X6244XDTBQ6BRNua` XNuA !|t!|!| !| B!|!|*!|*"0<ӘQaa z"z&zv/ (N0<; Q|%><(zhFx@ob0)Q|%dT@01Gm2G8+k20ERRJe20fH|lL`Sj8*ZgYRR811@Gd1@4131 Gd1 320fH|m-t)4Bj%TFkg, `&% |,`g]FDF-%-QFDF*D? z|0JA @2 Q zN`//?/wwws31  How many decent utilities do|you know that run in low|resolution ? This doesn't !! Oh .. Because I've used differing|colour flashes in the depack|routines, when depacking|a file - shut your eyes !! Eh ?? Error occurred ?? Oh * Continue or QUIT ?Carry On| QUIT This was a BAD ERROR (Bombs?) Bye Bye multi_v1.rsc RSC file not found! Oh! Are you positive ? Yes | NO pSelect packed file !!q*.*File not foundFile is much too small to|be a packed file !! Error !Not enough memory to load|in this particular file !! Oh ... Automation v2.4/2.51rAutomation v2.51 (Buffer)This is an Automation v2.51|chunk packed file !!| You cannot depack these files !!Yet ... Ice Packer v2.2 (or previous)Ice Packer v2.40 (or previous)Fire Packer v2.01Automation v5.01 (NORM)Automation v5.01 (BUFF)ATOMIK Packer Data File !!| Which version shall I depack|this data file as ?? v3.1 | v3.3 Atom Packer v3.1Atom Packer v3.3JAM Packer 4.0 (LZH)JAM Packer 4.0 (LZW)Fire Packer v1.01Ice Packer v1.13Pompey Packer v1.9Data file is not packed with|a recognised packer !!Due to difficulties in my|calculations, I am unable to|unpack Ice v1.13 exec. files !!Ice Packer v2.12 (or previous)Ice Packer v2.34 (or previous)Due to difficulties in my|calculations, I am unable to|unpack Fire v1.01 exec. files !!Atomic v3.1Atomic v3.3JAM Packer 3.0 (LZH)Unfortunately, this version will|NOT depack executable files|packed with the Pompey Packer| Sorry !! Program file was NOT|packed with a recognised|file packer !!File length is shorter than|it should be !! Ignore | Cancel This might cause the depack|routines to bomb out !!!I'm afraid that there is|not enough memory in this|machine to depack this|file - Sorry !! Oh . pSelect unpacked file !!q Cancel was selected !! | | Quit to Desktop ?| Try another file ? Quit | Retry File already exists !!| | Overwrite or cancel ??? Continue| Quit Executable bytesi * D *8 "nHV "$ $2^  *h>R""L"""F(F(""""D,p$8 .*$, *~ f((@4 B$|  "* `X/04P 8,?p?O! ?@p00?@p X?P-#l _IPp  @~//< </D?,@'0/?`/8?@P?@|?? T@ 0?   ? ?p?0 ? 2/_`0?_ >8P?0 00@28/ >?`770   ?;~78,' 0 / @ @~P08?:0`8`0L0 '0p?7 $3THIS PROGRAM WILL DEPACK FILES PACKED BY:ATOMIC PACKER v3.1/v3.3AUTOMATION PACKER v2.31/2.4/2.51/5.01ICE PACKER v1.13/v2.11/v2.2/v2.31/2.34/2.40FIRE PACKER v1.01/v2.01JAM PACKER v3.0(LZH)/v4.0(LZH/LZW)POMPEY PIRATES PACKER v1.9aAnd this is ONLY v1.0 !!RELEASED ON THE 2nd DECEMBER 1991 Multi-Depacker v1.0 Main Menu Who Wrote This Program ?Depack And Save FileFree Memory Etc.Back To GEMTHIS PROGRAM IS PUBLIC DOMAIN, BUT I RETAIN THECOPYRIGHT ON MY OWN CODE, AND THE AUTHORS OF THEVARIOUS DEPACK SOURCES RETAIN THEIR COPYRIGHT. COPY ME - I WANT TO TRAVEL THE WORLD !!Multi-Depacker v1.0 by MUG U.K Depack File MenuPacker Used: File Type: File Length: Packed: Unpacked: Depack FileMain MenuJust In Case You Wanted To Know ..Free Memory: TOS Version: OKYet Another Useful P.D Utility !!<px>qpx:sp?|?0`;7q>pax8;7q>pps9qpq9px C<px>qpx:sp?|?0`;7q>pax8;7q>pps9qpq9px Y889p88p?8? ;ppp?ppp=pp8pp8ppp8?c88p88G $ \$NO*Phij&,#6XY"Zz{B 0*+1,[\/]*     "# $,-.9: ;EF GRS j#  B% p#  *  F  b ~     C&  B | $ $  #  &B/ B ^ C-  z             "   >   Z  v T 5`! #' "      %!C)  %"  V ^ .  7`..  `GOR_DPAKPRG +`Z`>2 ?<NN @0<}BQ>NNJA6g|9HP?< NAPOAB a&MM +ЫЫA .GIJgrѓB(g<fG``GPN$^,,,,ܓ,,Cp$L(QGX /KN(K&YdB`BN/K ,HNRK&`:UgdCDE`$|a^g`|aVg E`&`| aDECI&4fLf&e|`@|a$J*g2P`f``BEg EQJENu&`|a84@HJ*fXF`.a2I|aʺ<m|ag |aEA`*`2P:`aDgt@IP$$Q` f&ed&fg^|avg &CrtfTATAQP`Q|aJgCpQP`QBC&&H&&M``NZ,Nu ``````Y %ATOMIK v3.5 by ALTAIR VMAX/MCS@ `ŹY&M.5 +PЫ-m m=K]p@N(*S?n)h- UP\JԔ.~W QϱW*!*?: 1zWl"e>,TBcTdHabL"o6! yd -QU:Ո BWP*D WhIF^l)tP-ԜQTpMҼM~jp[~4/a?+EyT/T;Jy Q Us] KN㥂n8'fiKyIU+|ॎR4k([/,HzK XIR (.a݆HA~W,jGnD^- &:y)*7| JE QS(BIC,ڄ0b`007~JO FQ, 0m9nG0T]at;fnW0#I#$PAB 4BA NJPhw|JB( 2ЀL "5d  @jSCP6ݍJ V3 #a TMXdIR Q$H( Pf^f fA Tml+'{cCa 2D$HDZd: u^ v!Yъ dTU!#dnh HIv`" &@TJïXR` ,!CkS] h m ',"N ̩qBD dS8 (6AN1Њm C aO8@ XL.gU HQ3`1^l"HpH(OL2&#$"CZ Y IGdJZڔ/E2z LRZB *1߂@MS" ¦IJ KBR &.45q QQx<9xJUZnI- ޭ<+,M~gJf.BgGDwHa/@!^ J(?pGTJ@k=-ȩʥ܅,"+`mU1*M&bFb̊!F(ƺ!ArTKjUM5’!:H t,R.$U@2AL,ؕCNYNYZn&Ň2 !C$ A2 JqXdЪY H& AVy#L*,`bb@udVf:c"iwJ0u*i0^fH@@ \R0m2& "<O& #"sAn"KH'b$pDc<%S2 %FS.%&z]Le#!A~\vR-$$hR8j/-J!Z*ZDB!l`O US1UC T}=VV8$v(?rGH d qvH.P.& %Xw؉RG@ BBD) .Jl*# N,fAG5`4b`X -|(u[TKqDU$eTCPMc"jP 4Љֈ z!2ҩb*&"hDŠ:`0 l(" ,"䨙TrS3 kx@P nNK@q@4␠T F\&k AHK&BP AZj 326 G$f*=|/ (mN#J*_rU# R  byq# tjufbBg=DP>H@T&/7&?D0 ?>bXLCJegH/9$w"rHz nE.EO#(JjtgJfS.p(@rg ]0bBG24Q%nAݣ"D yӈJgA a`/{< NA\NuqAal-DדaivchCUI[Quis}8$̫D1ayE@n̗excߛ=;2mbFOICޓn?}rcHuhi}^ E%$Эr,<${>@-fRWb-ofPeSy.;6pf<E({S?>{iPDsb @+'H'OD`%q?hdC]&f! Lod^ߓWAG<gram czs xbug?s.?TTetDaY1BSC ?LL? TRtal egtq2A_?3 XB@d#0  " Z t*> 2.60>HH>X>J>*&9t *@??E1 95׾B])@@-Ծ I['EF'ոJW#IF ͹FS$MDʻFO,K?ƾB@9A<°;4Ӻ;;63%95))40 (,)  -'0#  4  6& 8+'5+/0 )2(% 8!# :" 8" 6 & 3 '!3 *$ 4 *$ 1+!$0/'$,0*+(41&!)#:9 ܵ*& *<>$ճ.% 1?Bϰ1$޹5@E̱4 ڸ6BEȴ7!ּ7FD37HC滼 .3H=(5H8  6D22A1/>$ #*9%(4%&, %&&  $$$#$" "" $  & .  `..  `UNPACKERPRG   ` OHzx?<&NN\OHz ?< NA\OHz ?< NA\OA J(f# # `60<A C |Q?<?<NAXOHz ?<9NAXOBg?<NAXO# ap?</NATO# BgHz ?<NNAPOJkFaaF?<ONATOJkHa`*y K,y 0<;Q< NuHz "?< NA\O?<NATO`,y ,# Hz r?< NA\OaJkHz $?< NA\OHz ?< NA\Oa LSDCfHz 6?< NA\Oa` y`f Hz ?< NA\OK ,|a` LSD$fHz ?< NA\O#LSD!` LSD!fHz?< NA\Oa`F LZH!fHz?< NA\Oa`$Hz?< NA\O,|al` HzH?< NA\O# #|# BK aAC LSD!f*"(#CaKMa`H*H#|.9,9 Ɯj,9 .9#C Q,Haf 9ѹ 9 mPaVNuH?<?<NAXOaHzT?< NA\OLBg/ ?<NAXONu# ACazK ,|aNu# ACapK |,|aNuHz?< NA\O?<NATOHz ?<&NN\OBNA,y JkK < < Q< Nu <NuK aNuH?<?<NAXOaLBg/ ?<=NAPO*HyHy??<?NAO # ??<>NAXONuH?<?<NAXOalHz?< NA\OLBg/ ?<NAXONuHzj?< NA\O?<NATO`Hz?<;NA\ONuHz?<;NA\ONuHHzN?< NA\OLM,*YJ`jS f dTBAf dBG8vBA30HxlFDSBf QQJCgAV30HB`  QMl&VPoG:tf dQBARB3 gHSCf QQ3 HC`   Ag@G2vf dQRCBB30Hf RQKs0`0  BBvBDf dvx@f RQDE HSA"Q`Nu?<NNTO3 > y >gH?<HyHy?<NNO A@C0<2QBy@AB0<0wQNuH$Itxr:<9TDZb63@RCKs c,03s@c 7 3 11TBX03s@b7 01@3 1TBQ03s7 3 11TBXGfL+Nu zClprtQQ6t[2AXd zC>pr1HQRAQNu zb"zn$zfr4<x0<9024TBTDQ z<&z<"zH$z84<tx0<82X6244XDTBQ6BRNua` XNu*H,IA !|t!|!| !| B!|!|*!|*"0<ӘQaa z"z&zr/ (N0<; Q|%><(zdob0)Q|%dT@01Gm2G8+k20ERRJe20fH|lL`Sj8*ZgYRR811@Gd1@4131 Gd1 320fH|m-t)4Bj%TFkg, `&% |,`g]FDF-%-QFDF*D? z|0JA @2 Q zN`//?/wwws31  y >g2?9 >HyHy?<NNO AC@0<2QNu"--> Loading --> --> Unpacking --> Writing. E --> is Chunky Packed --> is Buffer Packed --> is Normal Packed --> is LZH! Packed --> is not packed! --> is executable!ENo files found no disk Press a key to try again.ESave Error! Correct it and try again! All done! Press a key to Quit!EThe Automation Batch Depacker. Coded by The Law of The Un-Nameables. Will depack LSD!/LSD$/LSDC/LZH! data files. Insert disk with packed data in A: Insert a BLANK formatted disk in B: (Write Enabled!) --> Enter Pathname (or return for A:\) --->  a:\b:\=y*.*8B8   &  @ &*J XLx                                            !            #   $   $               )     !  .  `.. PACKMENUPRG `^l`lBsr?<NN @0<}BQ>NNJA6g|9HP?< NqPOAB a&MM +ЫЫA .GIJgrѓB(g<fG``GPN$^,,,,ܓ,,Cp$L(QGX /KN(K&YdB`BN/K ,HNRK&`:UgdCDE`$|a^g`|aVg E`&`| aDECI&4fLf&e|`@|a$J*g2P`f``BEg EQJENu&`|a84@HJ*fXF`.a2I|aʺ<m|ag |aEA`*`2P:`aDgt@IP$$Q` f&ed&fg^|avg &CrtfTATAQP`Q|aJgCpQP`QBC&&H&&M``NZ,Nu ``````Y %ATOMIK v3.5 by ALTAIR VMAX/MCS8i`D頺>&*O.|i*m-Э |i-]// Bg J?BQ \d! _Le#JVxO.DmЦB#%r-$@ Te3l$><&p@ Q74oZPa؀aXD0#At%o)m5 8z͔Z:=MyHf$x® DH[oR2rљM< hXѿG81@r,|H 9D[0.nl0~fRD\C"KhР b)?Ŗ!GS8RmPB\)tX fJa"#%0:^r6 WA =H =RO8dtȑ A,Hag:@N%r$/RҧB =(L$ L:4Q!QʰS>F|O0~BgNA0թ}c]֮ +t74h:FG++ە +eWʮ]9(rPvAٕD]h< C3$h@ + %` )Ȓ=AmZ(uPL<H, rhAoҁ庼 g)p%*L߄Ns3Ù/lrh7HpNb4! t   DsH3;Hs2KM!19x=pg,8`2~3B81?QicroL9uB8u898^: )E,gj V>F#b5ƨfAr ZjԠv5*PC^x*nT~ UtBhP*Tp ŲBdP~l@c``AJha#u7tZi XhE`! <i87Xx_sg0s!H0ƐP b_  Lx @h ‚h2@C]jf :f#Wr``DlkAC0.fi;Og1 ϛ@H0"r3H{SqmC^ jZ S hi{ZQl86D@*Px pTh`X@PH*@P8 0T(厰APBH~&_F#(K1D&"V8&D<ɢL]=j>fi2I (`sLH(Km@g? /9 +?NNt@BX9jE1E#\HT>Tm~y#U#!v "A$ҿ$JՀAi02:G@I4M   mA$kns2<\e8K'GTxz}v2q. 4I!8E" 8:ມ8G<5:up>:3*GGp,z(v3LMF޿2613TN6%4i&3,1긺m3wIJ13!LNs$,\R DjB^@Hآ* p6z"z=!nEC5,R>~$!*Pbxf*Qn`4.8 (N1v)*e*.&L);TA*|@m4&Q#D3D3A&Zi.C*Pn'NQk T?`U[P`NxATEN>OUGWORKSPACE!!٫~:p#$S@n8%R%W<Ԉ$p"=@uцZ#ʢk0#R!Ψzm 0{"ݔE((B8P";tX%^@_sz i$8`,`h4n`P@2A*x$4;ɲPlTQC^:NAWbKEC@|"Gr+zP糸Ԡba"taAテaGIau(X6kD CW/fvv(S8)q("(A663C&C$ 2s[9Pz8`$u),lr>S]@;v>gfog(9T'ldEjPU&XzUt`==h:vxY!ުDؠN*$*~ٰ%qJ*<JiiNvIBT^"PI*i$Ed}߰(#D[2:~4::#t gEj{ yLa ff\GR" Dn<hf  Z;i%9_f4=9M8tR@ l oWGާ9;TPfL#n h+m9@U9e CC9̝It1NUG4%kQu`zqI' F LS>MPrp(#@, l  do5|,0- 3@72s1axŴxa1X(Ŧŀ\:tttt}thtSt@t.tt taxq.%v? vpxPN8a@1NnQ :7)WflR"I)|?o\KWL%%'qN *'#aĥƤȥy|r ""h8"M39)fA "4:A$!$9tOLj>@L_]p 0HNs `UEE4EhCD#O|40&F1Qd f!B4څh рhKh@a40,}BI %a"M(Dc(BC_@ FCDDI}Gh`!tA44Bh8BCI"фPh>h !рd90}Lp>D]Fh(4A40"n@@h6B D-FhHkhHhHȧ.}-"40ʤEC4 c4 Eh4B&PhBciH!M}B4 ڤG07$A*YOf*HއHF.83(N܏Q*dHh&L)OTApS|Ām4<?QDA3D83AG}.YYQ"7H0pp$2Sn8%R%ւ<Ԉ$ pw";v>*l NQ>#013mQP]pHj0(Dq$ RZzTm ^E(BIJ"ZN*h"ܵ{Xc:@HzsA6lI @B> 4ur29A(x$4<òPlTQxAUEC|@:sz䠜,Cf9a"l&Pa8rC8aGxIaw4(|X[ * ڿᄂ]dv5p-T('S)q( i6hC&HCԃH2H9%v$)ѵrHy_zfa9TlZ@&Xdy*(%{_RK̐^@CZj&P!%(*@!-!{.F4cy6JH8Z64<2R[DBFv#"4?PP3 RjQT8u$= y(}f2 t' RT݂ hf iH-9f84&~9iwEJ2 l ciMD}]yG Pf5n  m9B<! KCt&t1(H!R=kJnה Hb<8 n٢:lQ|"R8hԬ vAU *|\< kT9NXl(j7UxA"HjJxw~ъ= k 0lqi l n7p; J Px  $<p>xS'ÆP$XpMR2۶ l ƒo, 3!{7Nu1layxŴxa1GXO(/..ώ\:YѬє}hSɬ. NުPحqq >~10@" j9F*2]5@L+&M#OyF[4Ev y@^a;l332+\#HE:&&% $#sj!ߜ}]~} j>Gnw[zD)A0GkE#J2$(J?50) @A@@@(8@ ?-@۱շ&;|{o;z;o潼&ʻwwݴ[Ytnܛ;s[n=#f܋;qnk|[j܎nڋl%c;l{m~6{Uvu)roVBl+iΊeYb_X\V)kX&UX}QlN+UbVF[Z+=k{9U3VѺ-\X]ծZ=R#uQ;jӀsڦiZa0K4J4iр-E eBIP$0BeA:`0 (@   ( 8@ !"#$%&'()*+,./1pp4 5678:;=>vACDEGHIKLMOPRSTVWYZ[]^acdfhpjpkpmpnpppqpsptpxpypzp|p}pz/888888888888888888888888888888888888888888888888888888888888888888888@Aw ͇!!!W2.CTrFesp!WQ/@7pr_E+Kf^hCm#V:2M|<8nV@0 JgB`@ &{r4_sz~*k~P#\~!@/@hwy/@| &z!AS=@+t!@T : uu|z||Z &Z@| ^Vt]@t  PJ?R\x?hkњ$e2i9Io'aR"gSM&$(h'i',7LPІ Ə[S4E\f)rZ+Z*{Eg +b?X)2=mn@" ҨS$T[HisnYJ픜)RY+9S`Lo"?-w2EZ" H$byHPuJ" e<"-eb@8K+E\L0H)0ELJ"_%AIP:LP~?迬(bc2M.1%g bkEP`԰8Jttt6h Y)6S*xU\z> P4UH?K X?AwT:j)W@= $5ULKj@O@VJ4'ugKQ@_ Z@@-&4ݟr m@z:O@+ S@ ߃ p?-O@ (?/PTt(T hU!@+ t4O@YX4À/-N=5c`?,Ԛ=@zWPPhU`Fh7C 4?@=Uq}~=*L:VPzV5hc@^*ū+e/@JY Ptf?@=*Z P&ucEk&?*g8N?@2 @@"` S4Ipr0STiLə*@ +t|}Юp~Ll2g"M4= (mM++ðh(xY%ʊE| xF+8E>,y jT\q{E#{tIwt"1aάhe}^EsW#̡Xt4W6С+?J+@F)zWc:Vc?08W"Z!~V|"t"eq|R4w0xh0. DpHs",+ E."T,.$">q"fߍ{"QF&"DܓF5 ^@}L|IwbmBO)(cߘ`Lu2~|(~f\~7G %Ju'O| /0.bU8pC|C&&Ѣ6].rnn)&2t!DOPЦtwE>'0~F8nxPx{,r.7l=CB5,ř7 FwzLƯByqb`ll R&܇Qřz>p=>>/k&O]'66Y*.TcԿƗsz\bO>?RpأO ƨƾb8À^}|0 5.T1&ٴO/x0gAټx~cgQg c Y=}Ã,A$gc<xc. X/:8/8{7F`+8? h3!0`|lxg23KA[xpQ4וhGDaa:䗂<? ڵ C>C-*`w4h Y353%8-2灀<4 `sA&kuC#zbEQm.q p hWFIܩ @ uK-\i[, @ZAr'J<È9iȲۂ\0 ,Ä5ePie.X D>p: !h&8xiX"|"DucTsa@o LE ձ-T@<Yw~@고enr.y WV_ n<#>58Ppv:Jڈqz"h66t#D$2en@( x`~48,|oS ]mO*W<.$wp \Hj"uk,s:'0޽?p~.@@9=-gA@oTp~&@~7sޡp~9@@!gkХ 9-Fd *0p~M D`ޏmHNj2 [gy,(N,D D ڛ V,EQcxV Y>]0;5 8_2(8 .@3[V N-Zfٱ# Q"~&1(wf䠱 !A, YqyrzΊx,xlIg @q~Ppn D$u u EEمF)*nr CCscb Zpu/ ? il q! `xqLVS'ݺv~@gC@Aw48~Wv/`y(%>RkAn>vZw[pGwpG.䂑viV4[8^97Z3M"!m |7eqςxtW g}&4*P#4@[$Q|-T p00> a;ZaaT)8QC_pP Y.2#? F/TUd/>"yJܩĀACd1x@U|@ABg](3 PQ?ච26*9J( .T5 aa?+`;$.5sA_(8AeC~y')$!Af`@  O H2HΏZ"p~d 4ð8 ίP|l@BWoWRdf'_ U燀s|/aӏ2" P֗6t2mP|080U|p/p^y|{0&hQ҅.nnPnr3& ](p_Pl>+>~v>0`~8x%xg,Wl)ap ]3ByF_ ll~(&k܇0 g>y> (|`Gn`l@g0P‚a~s倆vG3 mFG\ HGe\`ƻvabvxR@g?ݹE/ q8ˇ}@{so;iQ]pdM Y&|w I `039>|&`  (Б:^ha2O.tɅ.6T6s#;γjB/6z>h:?տ^C?*> a=Zn`8 `a#UaAg&0T=paxbBMT߂ʀOPac=/_Uqb>H) .th Qf M ƨ?b:À۶t9x0 "1&0/s g/eyEWcWr`Gggx0`c8/à A时0`szc BEvr-@x0H.@xxp~(F a(-"X](\ G/`";{ϒOrӚg](Шp P]H0@PEz*q4*pr{ onZ{z/4̯ xٓAYyi73_}w棿}%<`>s+`n!A u~_"-P* 0pU@C2- urɇ.Y0)oc 4S~_B}/ Xj~O 蠁 A{Y}9 |FեH ->'{N}T-T ϰ?gSE /Tw/P ^"ׯւՊPv( 1Azꡊ& A$B<|JVf@ ` _O8D!e"* `Iĸ# lW ``|·B x+WgA BaɅHHPگט- t48@452='!`s!Aυ #L B+ }F2(^E ż=pepPxDBp /fhyL[&j`}|!R/4J DW€]%rAJ UHp`db[։9ˣ9~G(O821-D5   (Q+;T8F2@1Q(T hp +dj#0@Gشr=NO5R8p`PG1y*Fo҈yẇ鹶_G.`G[L8 wy}x m. }0?_zz1#z <4#T% Gd*ʖ̀Ё3@Dg8J#|(9Cj@|Ix|Ǵ!?5\́|09> BGx98ʁ€-|R ;U+DŽTSO2d&C!~4^B0h8Yp@a D?2? ? ?#D?F  όύ0 0 -B u^)t^Fogo6f+<@x?u^1FtB23@1Iy0 Wb0#3l4 BUP舀6sȽb|c>#K|? g F<H04s #0{#Kf?`~ߘ '~w @a*h0S@?*0d1?̇OJ! 4`BlJ1/!U7] hbǨaG-Zl UEtdX)lS^Hu1>Šse#uox -$bnIAc du@(d)&ehmm<'sis&r]e,xiZv'SZyALkЂgup[X3)̎m 2rpFtiaLlsm!syeN\F%sN ,k (޲hZf֑kcosڕ!os-s`Ө gh,ґ-i*,Qitu{/(?^U@'ٙ紟s4d u:8g"0=os_hM}lDa[tfmvg!) ya&rand dn't ese2 'x-it by tway.8yu ave a c n e!` bq9?U>a(~\h+ʝq!Ul~ħ0Sy^p)D OtT~筟 ?i/O.'SS܇S!K!~(a~|ҏCG!2g.ڑ',?C~q_XMCM<u q:%Ss>_'',? @_4 Ox~{bSOJ?E~(#i|2}}:}(yS:/W~ P)`DKi3a:34AP?$~\C2৻~D~HwCC/,?_܏; ?~F!+%|0P]/:6 ?N:vٞ:l eц:7h:Gwfц0~-+;:)KO_b?%X)C &-? /S/ ȍ$Y!PaSP[xx_3?~E<_ )?~)?Tʿ1A!Z>}I@}Y~9~p?Ҭ _il9U~܂!2tл?Ox>O|ZhRB?оiiO:q~֗v"a`,0O?hO>"/?a! CB?S1'<SN~@pK?n4K%*ߴ~H7@S ,bZO`<ᣭW>R?O_2?u~>I?P~(=珉^Js8O/@??$.'*CO /a2?|CשZ_??3;?4>Iߌ\>T~X~.Ga%ICCz nA~|O +C}Ӈڇ }!I}Շڇ?- S/ ?.O:dqB*ῸԇDπ}h<T`|

ȹܡ縅őݩͥ7)#C+%<j-@=P~d}[{r)f:X`S AM#k&ذ7ķHA\8sC(6?lmp_󰓰:Mq s:4BA(D Zy0&(B 2ھ; G-KOKͦ>F$:&)A=>wv.9  zD l\ 4$D&7r(|D&1 <G} )58iI(okE;ȿi5.@, & f<| @ cE;iź@ co]ߓ 00+# {SFϋ2 a_Gi=& ` f0u` 4$(h 1is5 /mC-^׿ qr-ޮZOj9 : C}!~rTJ!  p z4j  C/~ zeEVzC :/OV'KyfOg3}><D(Dz7 ϱB+@> !/h. ?v)}?;UjDUt`%n?Z Ⱦ!GZct:|mW>)Ͼ η%1KWjR~VgK4 Ӡng0BN]rOp>-# ʱx<asptcZK<0! jyޗ?$83@SJe7l2vfQ`'? (۴" Dc>yPsD ﺐg:85pXnT?Lxp,sFN~t\  4 v. 9=HK|4.//%.S˵6 ;CTQ[HOf`9ڍ- mssd7\͟ϸ6e5DHy/m@׹.C}\w|h/ 뭘pg3,?u$MS&N/4DA{^,x,Vl=L^-o1ԥ6'4bkPFќ;m])Z8=o_l5F[,-m{'3 ǰZ '/!cL6̟͐hiD M8ܯ*,G\J/@S'`ݠ3EG8xJ 85Ri!  '$7-XZH%3@Ot_5?=̪ (OgI0ϯlY ͗4ɘi/7& >tp|h:a.8@^?`8$؏ac,63/LY?؜\-6wlYb /h, g&(<)k4\ /&,j-C  /<^n8qσ %-" V#/7N( !7.F>3}|LcF} g/d,f,D4v37@[ܢ+C h>K: )Lqjr ;%- Af8b(~AU 51% A?~$1@ n+90 X#t^" @1)6(5No8>1h(N? w +ف #2uD[ q|T7 `1#/a6&<#w SqR2mcds)w q*C * 3I Jl1W]$mIl|"4/7-m/ ? s"zʯ8VM(C 7]=/>ލȸ`m̼6k):}w6@h'/ 8]xmmfy%wOk;eť7=iIMθ@߂&?M'+=/@ 4-! 'H4vdz 5Cr8NXH]& b*Ύ7H! -J&&- f(V?E7e gt8)5یL4۶v*4< @FwEOcO { 0gϼ6]@N-8 $9VH+f 4@}c '>xkN=ٓ6- )/ /An *8hmhM1i8-':zX}q:R9)ؾixKi/x.lcu=:u:(f $hD7v|M%Ct(.6hf[ h64O6:lu 5 OΏ5mAϻu& %G/2M/< DM-: ϰ&;/ )/Iܮ/*M!8ܯ מ H=*5= ߐW׼&M]O6O(ਏ? (TD:Ͽp/?->Gݺg_ AuGf9ϸgg=x3, <,9' t,ѨӼͼÓV} ):0ߜ D*;"2Bŷ ) <(7K  Ps'n^(4 ' H'a'- 4pq%>1$($t0#zSz@QG.b (<" 3 ! #'6#] An_ 0;% {ꞽ w } ,! sz}<#~ +q @a%z?W+!aJ]''cI=&θM8?_8<-'EU(Tk֚p)1:>`P9qi|>'.-}H>cD9NĻ|dA5+!H:!*nY@;JJZ N^08}IM]m th<^EP"3GE!{^OrCb\2?ٜ*(RO4d q=|:E=/87Nq`n@;% / 8WvV9G!4xИ ryL6R\~1sjɛS<,ǡuШ>pCn?x0x<>y=I5&zPT((8/!C!*C#Aӽ|Oi>PrҟD{z‰5\S' 1?"u!"?@}ANz 5E;rԟu;J&?  "GeCt  Daw(z [{~whqM  9}is hP)T@?<^Oz~W~ bZ(Иa#Bv=Ӧ5\#C!|NDgP i !<>ϰ0zN!ӛSwwv;^M#Ѩ)҇^P rG01E´~oۣOS{4rSS{h:#s3t 2TN y<>'.Ԕ~3<ޡC{:N\./Pv( )3D! Gx|><~5"zN(h;HT"rA$z(D(6|>&Rܶd﬛DK_LݡCbs9ߐ? H$("vD$ b*ҖPgO?P~x<.PH0P(!:.ohO?L! Kuh$8` pc|^>6R\wHr =¹!!:EdH cj~T ~3~D v(xzæ{h~hx o(N7Н ?x?x\2Dpݡ=SSě|>8qDCƻBgXC 3;49u0D!P83v*ATiPm|}=kHB_a\C9\.CeBxߏ=+yh#?5~HTNSHLCnй}>_0KrN -{(7PC|H A|>Ce}~o5>/}?~PD8%zhxCsjP+L?@kH$䡳CsXB~C:=T~ߡ}>C7t2rsh8;@B ?CW=~2>;t߿ # xאPhn繜C"qx< -7bDKYP8>}?0 >~~?>_qx]>ry?8<!qD"^ԸD@ 3 ERB8q;.,!9]^Ob#(` "= Zf0K X-:Y-B.<~ 2>c,l2`(CZGS* Bxg4U~("$R;0[_[blrZ2`"B<Ј c<i 4XH2]>BP)N>@(>h@J!"T@<0@4$z#a0 #b0 #c???000?000<00