Rar!ϐs p|t0P,0amithlon_contribHtA00`,0! amithlon_contrib\amithlon_patcher#0#$#,,x#(N&@JfA\NA\N#ETtaL/94/9 /98N/@Eta&,y($9g N|"BN /.y,NuK&Jv`(*f @Ndc& fⵃ*fNuamithlon.resourceThis program requires the Amithlon emulation to run on! This program requires at least %d bytes of free stack, only have %d! open_elfclose_elfWarning: %s is obsoleted by %s S:amithlon_patches?Usage: %s [dir] Loads and installs all Amithlon patches in dir, or in s:amithlon_patches if no directory was given Could not open directory %s Could not change into directory %s internal_obsoletesAmithlon executablepatch.infopatch_namepatch_obsoletes Installing %s...installDone! No install method! Not installing %s NUH?:$m N$< x,HCNJg |~0 @f0` Hy y/(N `HxNh x,HCN @g ,HN`p 'b&/Hx'Hy y/(N `HxNh|l$*Hy/N PJf /Hy y/(N `BNh/N (Xf"/Hy y/(N `HxNh/N XJg"/Hy: y/(N `HxNh 9vJgvt" <^(CN$@gNHxNT&@B B&q"X$BBHBJ ,< <HABA'BB*<D/N D$@XgxM/Np$HxHy/(ENOJfHxHyHr(NO Jg$N 9g vƀ|`vt" <](CNJg vƀ|`vt" (CN$@gh 9"Jgr g vƀ|`vt" <(CN. 9"Jgr&gJg p|`p&t" <(CN,@JggHxNT @!J(G"X$BBHBJ ,< <HABA "$BBHBJ  <HABA!B|!F !K&H`x/N (X,Kg/Np&$KXghJ gb$*gRJ gL///NDO Jf"//Hyp y/(N `B OHx,/N$PgRf$jf,nfzHyN`J g/HyN"+P 9tJgt&JgJg p|`p&t <(CNJg vƀ|`vJg* y/(Ntrp(CNHyNP`fHyNX`VJgP/HyN$kP 9g vƀ|`vt" <f(CNJg vƀ|`vt" (CN$+/ N&BXfBNhNq` yC# PN yJfNuNq/ / 9DrfpJHgAHRXJfJg$<D$@ RYNfHyNhX$$_NuJf p#aNuNqH82$ygAJg>,y"$<N$#f HxNh,y"N,y"N j$g,y"N,y"N#B8# `P$y0&9$,y( RrNT#f HxNh @6|Jgr g g fRSfJgT "f:RSg@ "g *fRSg,Sf`$RS` gRSg g fBR`#8A,y( rHANT$@# f HxNh yvcC"JfRb&<,y( rNT$g2,y"$N,yN|xxf,y("RNN`Jf HxNhLLNuH "$yg6"9g ,yNJ$gZ,y"9N,y"N`<$9g4$y g g ,y("@NN,y("JNN,y("BNNLDNu/ / $yBHxGN$PgBHxN$PgBHxN$Pf HxNh$_&_NuNUHm/- /-N"O N]Nu"o orpfJfNuNqH0",y( < rNT$@g,y"/tN%@ g\Bv%C,yrtN%@g0,y"* $  NJgJl,,yr$*N,y"* N,y("JNN LD NuH>"$o Jf8Jg2,y"* $  &<x**NP%@%B j%PpJgB5||%F j hC JfC IJf< FF5F j%PS XLD|NuH?2$o(Jg(G ,<,y"* $ &x**NP%@fB~%G jBLLNuH>2$o$Jg&G ,y"* $ &<x**NP%@fB|%F jB,yr$*N,y"* N,y("JNNpLL|Nu//,y"/ tNJg,y"N,y"Np`N p$,_NuH0,y"< tNJf HxNh,y"N#v#L@ Nu/Jg,y"9N,y"N,_NuH8"$y&/XJg,y( J NF @f$RJft$ԃ 9аe$(<Ą,y( rN:$@Jfp`JA %H%HB jr҂!A%AԊ%B,y(A"@N,y( J NF @ LDNu//$<,y( BN @Jg,y("@ (N.`$,_Nu/$/"o o grpfJgSf$Nu / @JfFNuNq o /gJf NuNUHm /-NDPN]Nu/ / / g /NdX`.t y$PgHhNdXJgt J$Rf $$_Nu// "/ gX$y gNee$@`"AY,y( J N@ *f,y("JN,y("J )N.$_,_NuHxNT @Xg !o#pNur #pNuNq/ $y̴g jN$Rf$_NuH 2Hx8HxN$@PgtHxNT%@XgN%|jG/ ////NO Jg,y(A"JN `,/*NX`t #/ NX`t #pLLNuH ",ofp`J/BBNO JWH4@J. l/.NBX$Q,y("BN/N XLDNu// `FMg$o\*o`vJgCN/I6 %fB2|~8|iC>/I:(,GGrtAf 娎R`Rzdzd *fR lD/@2`D$9"@1(g.r /2 o2*/2AXHA/H2"A1(f .fPR *f R m@,`<|$9"@1(g$"  @AhHA,"A1(f hg lg Lf8EH%0@zSe Ј0;N pf 8|lrxz dg if@: l"o6-HR$D`ng "o6+H`g "o6 HR$`F: $g< ofJfJg "o60HR xg XfJg"o60HRHRCN/I: xg Xg4| of 4|`4|I XgI/ /NpPS:"o:/ /N|P$Rfzf|`dz΅`^: X"o:`./]: o:Jf,o:*F,E e ,@|`*/| :<||` ] `JfS/J:,K|B2bIH`(Dp2d /2(@g.tc($o6//XH2@/ NPzgRRbf8tc2r‡//Xp Jgp0//A6NP"/.zgRRbf.tc($o6//XH2@/ NPzgRRb$c //XHx0NPzgRRbtc&$o://XH2@/ NPzgXRRbg$tc//XHx NPzg.RRb$K`//XH2@/ NPzgRJfF L|O(NuH "E,yN|Jgf#`XJft#LDNu//// y/(N"O NuNqH0 $o0* gr#p`Nj@ p`Dg< *$&Jg //0j/NO JmʔրJfj BBpL Nu/ / /// NP$Vrā/NT @XJgBYf$NuH<:(/$&o($o,/ Nd&X joj8j/ NXJ,gR,y"*(N$,y"*,NJfN v/*,NB,X,y"N,y"NBjJfJgr$0|gN rg n ag`\ wfV"<`"<t +bf0|0g +f.z…zJ3f zlHx//N,@O lp`>,DSJgHxB/NO Jmj /NDXJgj 5N L\2*/($yL 9voA JgRn o|`"f4 &@Hk/ N$@Pf | #p`R#LR("/$ f|ʆ$<Jg$<`$<,yN%Hf N p` LL|NuH< /$/&/ yL(0N"JgzWH6HD`v,yN$zg,y"t&N$fN L@0*/ p$S|e|EGp威``"g`v F€&A p(|g8$$f$|f$Hx Hy HxNHxNh/NX$$S(gpL |NuH02&9($9Gg&$[,y("j N$f /*/NVSfLL NuH "$9Eg Z g ,y("@NbSfLDNuNuNeed version %.10ld of %.32sOH2,y(A8CPE4G N/ NHxNhNqOkH82,xN"@rg>CxpN(g.GdCP#o prt(JvHɎN"N,DNbLLNu`<b.b4D|LV >HxThl | ` & T r n 4HzpFlX$<lx<RN~.vjfpoDjB4b",  " T  F T   " Z < p  ,4DZ ~ @Tl*:NzJZ.>nTH^@Fh D>NTZtz>LTf ( . 8 > D 4 d  0 :j**FR84L|(@z`_rewinddir __exith_free_strcmp _geta4___exitstdfio___initchdir _vprintfD__etext_closedir (___exitatexit___udivsi4___umodsi3p___exitstdiot_readdir D_fputc_isattyD___initstdfio _open___exitmalloc _raise*_opendir ___seterrno _chdir _fflush___initcommandline___main_fprintf `_lseek___do_global_dtors_fopen_calloc___initlibraries___exitlibraries_realloc_strchr_mallocT_fclose`_atexith___do_global_ctors8__stext___initstdio___openliberrorV_strncmpD_write___swbuf___udivsi3|_strlenp_readd_tricky4_freopen___fflushd_printf___exitcommandline ___mulsi3___chkabort_main_vfprintf"_close___exitchdir(___request  X(] NltbD X v ]bD@CON://///AUTO/CLOSE#0- +0123456789abcdef0123456789ABCDEFg iCvx?B? O1 @ ((((( AAAAAABBBBBB 4@%dos.libraryutility.libraryintuition.library$,4<DT\dltp $___filelist___LIB_LIST_____intuitionnamex___utilityname@___signalfunc___signalmask___stdiowin___EXIT_LIST_____memorylist___INIT_LIST__P___UtilityBase __edata__exit_dummy_ref___oslibversion(___signalpending___dosname4___sF__sdata__exit_dummy_decl_errno___DOSBase__MSTEP__ctype____ctype___DTOR_LIST__<__WBenchMsg___stdfiledesL___cpucheck___argv __endP___commandlen$___CTOR_LIST__D__bss_start_SysBase(___SaveSP,___commandline0___env4___argc8t:00jQ",0 amithlon_contrib\dumppatch#0#$#,,x#(N&@JfA\NA\N#ETtaL/94/9 /98N./@Eta&,y($9g N|"BN /.y,NuK&Jv`(*f @Ndc& fⵃ*fNuamithlon.resourceThis program requires the Amithlon emulation to run on! This program requires at least %d bytes of free stack, only have %d! open_elfclose_elfS:amithlon_patches?Usage: %s [dir] Prints info about all Amithlon patches in dir, or in s:amithlon_patches if no directory was given Could not open directory %s Could not change into directory %s patch.infoinstallFile %s: patch_name Patch Name: %s patch_date Patch Date: %s patch_desc Patch Description: patch_reported Problem reported: %s patch_obsoletes Patches obsoleted: %s NUH<:$m N$<p x,HCNJg |~0 @f0` Hy y/(N HxNh x,HCN @g ,HN`p 'b&/Hx'Hy y/(N HxNhzl$*Hy/N PJf /Hy y/(N BNh/N (Xf"/Hy y/(N HxNh/N XJg"/Hy y/(N HxNh/N &@XgM/N$HxHy=/ENOJfHxHyCHs(NO Jg$N 9g vƀz`vt" <](CNJg vƀz`vt" (CN$@gd 9"Jgr g vƀz`vt" <I(CN"JgrJg&HkHyQNP 9rJgr&gJg pz`p&t" <[(CN @g:"$BBHBJ *< <HABA/HyfNP 9rJgr&gJg pz`p&t" <(CN @g:"$BBHBJ *< <HABA/HyNP 9rJgr&gJg pz`p&t" <(CN @g"*BEHEM,E *<* <HABA,EHyNXJg\H yH"h iI#L"Sj m g QR` / /NP  fHyNXRJfHyNX 9rJgr&gJg pz`p&t" <(CN @g:"$BBHBJ *< <HABA/HyNP 9rJgr&gJg pz`p&t" <(CN @gv"$BBHBJ *< <HABA/HyNP`8/N pBNhNq` yC# PN yJfNuNq/ / 9DrfpJHgAHRXJfJg$<D$@ RYNfHy\NX$$_NuJf p#aNuNqH82$ygAJg>,y"$<N$#f HxNh,y"N,y"N j$g,y"N,y"N#B8# `P$y0&9$,y( RrNT#f HxNh @6|Jgr g g fRSfJgT "f:RSg@ "g *fRSg,Sf`$RS` gRSg g fBR`#8A,y( rHANT$@# f HxNh yvcC"JfRb&<,y( rNT$g2,y"$N,yN|xxf,y("RNN`Jf HxNhLLNuH "$yg6"9g ,yNJ$gZ,y"9N,y"N`<$9g4$y g g ,y("@NN,y("JNN,y("BNNLDNu/ / $yBHxGN$PgBHxN$PgBHxN$Pf HxNh$_&_NuNUHm/- /-NvO N]Nu"o orpfJfNuNqH0",y( < rNT$@g,y"/tN%@ g\Bv%C,yrtN%@g0,y"* $  NJgJl,,yr$*N,y"* N,y("JNN LD NuH>"$o Jf8Jg2,y"* $  &<x**NP%@%B j%PpJgB5||%F j hC JfC IJf< FF5F j%PS XLD|NuH?2$o(Jg(G ,<,y"* $ &x**NP%@fB~%G jBLLNuH>2$o$Jg&G ,y"* $ &<x**NP%@fB|%F jB,yr$*N,y"* N,y("JNNpLL|Nu//,y"/ tNJg,y"N,y"Np`N`p$,_NuH0,y"< tNJf HxNh,y"N#v#L@ Nu/Jg,y"9N,y"N,_Nu / @JfFNuNq/$/"o o grpfJgSf$NuNUHm /-NPN]NuH< (/$o2* 0@@gBz#p`gBB A5A * g&*D`v* f jA8$`$0* f$S%B@5@ RR *l n  f/ NXJgp`$%C%Bj L$o\*o`vJgCN/I6 %fB2|~8|iC>/I:(,GGrtAf 娎R`Rzdzd *fR lD/@2`D$9"@1(g.r /2 o2*/2AXHA/H2"A1(f .fPR *f R m@,`<|$9"@1(g$"  @AhHA,"A1(f hg lg Lf8EH%0@zSe Ј0;N pf 8|lrxz dg if@: l"o6-HR$D`ng "o6+H`g "o6 HR$`F: $g< ofJfJg "o60HR xg XfJg"o60HRHRCN/I: xg Xg4| of 4|`4|I XgI/ /NPS:"o:/ /N(P$Rfzf|`dz΅`^: X"o:`./]: o:Jf,o:*F,E e ,@|`*/|t:<||` ] `JfS/J:,K|B2bIH`(Dp2d /2(@g.tc($o6//XH2@/ N8PzgRRbf8tc2r‡//Xp Jgp0//A6N8P"/.zgRRbf.tc($o6//XH2@/ N8PzgRRb$c //XHx0N8PzgRRbtc&$o://XH2@/ N8PzgXRRbg$tc//XHx N8Pzg.RRb$K`//XH2@/ N8PzgRJfF L|O(NuH "E,yN|Jgf#`XJft#LDNu//// y/(NvO NuNqH0 $o0* gr#p`Nj@ p`Dg< *$&Jg //0j/NRO JmʔրJfj BBpL NuH8"$y&/XJg,y( J NF @f$RJft$ԃ 9䰂e$(<Ą,y( rN:$@Jfp`JA %H%HB jr҂!A%AԊ%B,y(A"@N,y( J NF @ LDNu//$<,y( BN @Jg,y("@ (N.`$,_Nu/ / /// NhP$Vrā/N, @XJgBYf$NuH<:(/$&o($o,/ N&X joj8j/ NXJ,gR,y"*(N$,y"*,NJfN`v/*,NB,X,y"N,y"NBjJfJgr$0|gN rg n ag`\ wfV"<`"<t +bf0|0g +f.z…zJ3f zlHx//N,@O lp`>,DSJgHxB/N:O Jmj /NXJgj 5N L\2*/($yL 9voA JgRn o|`"f4 &@Hk/ Nx$@Pf | #p`R#LR("/$ f|ʆ$<Jg$<`$<,yN%Hf N`p` LL|NuH< /$/&/ yL(0N"JgzWH6HD`v,yN$zg,y"t&N$fN` L@0*/ p$S|e|EGp威``"g`v F€&A p(|g8$$f$|f$Hx HyHxNRHxNh/NX$$S(gpL |NuH02&9($9Gg&$[,y("j N$f /*/N:SfLL NuH "$9Eg Z g ,y("@NbSfLDNuNuNeed version %.10ld of %.32sOH2,y(ACPEG N/ NxHxNhNqOkH82,xN"@rg>CxpN(g.GdCP#o prt(JvHɎN"N,DNbLLNu~`BNn0`B`T.B~8<~"@JRpzfZ 4H>LT * T n 8 L"6`.B\Zr(b>*<hZt*X"Fdr|JTdnmDjt6f`jt  0 < R ^ j Z   b  & : Z j < 2Rft|tdbDPfl~2d0v0r 0@PXp$*LD>NTZtz p v * 4 H | " 2 > J x ^nNB~L(j&D_rewinddir "__exith_free_strcmp _geta4___exitstdfio___initchdir,_vprintf__etext_closedir p___exitatexit___udivsi4.___umodsi3___exitstdio _readdir _fputc8_isatty___initstdfio \_open___exitmalloc_raise_opendir ___seterrno`_chdir ___initcommandline___main_fprintf _lseek:___do_global_dtors\_fopen_calloc___initlibraries___exitlibraries_reallocx_malloc,_fclose_atexit___do_global_ctors__stext___initstdio___openliberror:_strncmp_writeR___swbuf___udivsi3(_strlen_read_tricky_freopenT___fflush_printf___exitcommandline ___mulsi3h___chkabort_main._vfprintfv_close___exitchdirp___requestx  Xp]lN bD X \v,]bD@CON://///AUTO/CLOSE#0- +0123456789abcdef0123456789ABCDEFg iCvx?B? O1  ((((( AAAAAABBBBBB @4@%dos.libraryutility.librarytintuition.library$,4<DT\dltp $___filelist___LIB_LIST_____intuitionnamex___utilityname@___signalfunc___signalmask___stdiowin___EXIT_LIST_____memorylist___INIT_LIST__P___UtilityBase __edata__exit_dummy_ref___oslibversion(___signalpending___dosname4___sF__sdata__exit_dummy_decl_errno___DOSBase__MSTEP__ctype____ctype___DTOR_LIST__<__WBenchMsg___stdfiledesL___cpucheck___argv __endP___commandlen$___CTOR_LIST__D__bss_start_SysBase(___SaveSP,___commandline0___env4___argc8[At=X`X`ѓI$,0 amithlon_contrib\patch1_fpp.oELF?4( S@D$H|$0D$0D$1 l$0D$0|$(l$0ʋL$(E@\$,uEu ɍ&SQ,$Y[ـE@u[؉ ȅu mt&y=كۍȃt ȅt$\$ D$ |$D$D$ l$D$|$l$ʋL$E@\$ uESQ,$Y[ـE@uW؉ ȅu my=كۍȃt ȅt$$$Kt1҉1҉2t1҉t&1?@[Ív'VSx$$T$$y D$-T$ $0B.B0B$0B$0B$0B $0B$0B$0B$0B0B$0B$0B$0B $0B$0B$0B$0BEB@t-B$0B$0$B0BPhD$PD$ x[^ÍUWVSp$$$$P$Ph\$ SE<$-u EL$9+uAA0 E9.uA1ۍt&,0< w A0 ‰C~1ۍ&',0< w A0 ‰C~131҅ut)u%1҅u11҅‰1҅ut1҅uu݅uٺ1҅uuuĺ뽐t&1҅utu1҅uut뎍1&[^_VSfD$\$f?PSƃt@8u(tiPSu0`\)ЋXЃ`\X)$1 H%IY[^Í'V1St$8 PV\u6`\)ЋXЃ`\Xwy#$A$ ؋I $A ؋I у$8u$ u $ Y[^Ít&'V1S\$؃8 PStu6`\)ЋXЃ`\XvyL $ȉ $ȋ҉tt%tm=0u ,$,`v=`uV,$\Pv $ȋҋ $A$t%%t=0uA0 v=`uA`$ك8u$؃ u $ Y[^Ít&UWVSf$$ff t$fPUtpRPm 8S tWtt‰1ۃ1҉t t&)t&ttt&1 t&tt*tt1t&fff fffD$Rl$RtP G tLt t‰  1ۃ 1҉t t%(vttt&1 t&tt*tt1t&fff fffD$Pl$Pt P ?< \1ۋʃ\1tt"%ttt&1 t&tt*tt1t&fff fffD$Nl$Nt\ʃR\\ʃ\ D$H1PU u#ttt\$H)\$Ht ؋I уD$Ht#\$H‰ ؋I уD$Ht"\$H ؋I уD$HL$H8)L$Hu  D$HD$D1PU# u'ttt)|$DL$D1ۉȋ1҉tt#&ttt&1 t&tt*tt1t&fff fffD$Bl$BD$Dt$L$DȋPD$Ht L$Dȋ҃D$D8uT$D D$D) D$1 dD$Vt&Bt&f&ɻL$fD$D$ct&|$pD$0ɉD$E\$8@t$4u!D$8D$4D$0ـEuD$8 vD$8D$,P$ u D$,D$,1 ?% ( ټ$$Ƅ$ ٬$$߼$٬$$RP,$XZ ټ$$Ƅ$ ٬$$߼$٬$L$$\$Vt&Bt&f&ɻL$fD$D$D$|$L$<ȉL$<ȋҋL$<ǃL$<ȋҋL$<ƃL$<ȋ҉uu uVt&1҉RP,$XZ1҅ 0RP,$XZ 8yP$Xݜ$݄$D$pd$L$D$&|$L$<ȋҋL$<ÃL$<ȋҋL$<ƃL$<ȋ҃D$<uuu X1҉RP,$XZ1҅ 0RP,$XZ 8yP$Xݜ$݄$D$pD$d$|$8uT$<  D$< ffff%f=\;n$& @\p Hٺ\p ݜ$݄$H7ݜ$x݄$xP\p= t&1Dp1Dt# HP\p 1Dp?Dt &1Dp$@Dt &1DpY@Dt &1Dp@Dt &1DpחADt` &7DpyACDt= t&nDpFDt t&?DpO8MDtt&20DpHwZDtt&SQ,$Y[ـE@uV؉ ȅy=كۍv'ȃt ȅt$ݜ$݄$D$ Pټ$$Ƅ$ ٬$$߼$٬$ʋ$E@$uE+SQ,$Y[ـE@uS؉ ȅu y=كۉȃt ȅt$ݜ$݄$D$ }D$ nD$ HQD$ EuT pfDf@uٜ$tل$t\ p؋D pT tD$ -pݜ$݄$D$ fDf@D$ -ݜ$݄${D$ st&D$ ـE@u vD$P$غD$(HP$X \p vD$PD$(PD$(P p=D$ fDf@|p D$ `\X[^_    Tj 01.01}Ô%IT$@?%le%.16e>><>??pA;AC<@A@C o H X v @uP`g0Pp| @`p`gp|0E`p;??AC><@@$@?@w(5w((!(!(++++++++++(()@))++++++++++++++++++++++++++++++++))))*0*P*p*****r+++ ,,4,4,--4----.0.C/4S0b0q0400 14@1d1p11122223h3344444444C4C4C4C4C4C4C4C444444444r+,44r+,44444444444444444404 1404 141422142244444FPU Emulation Patch 12002/02/22-21:35This patch fixes a number of problems that exist in Amithlon 1.0.1's non-JIT FPU emulation. Don Cox (brushmapping in Imagine broken)Installing %s GCC: (GNU) 2.96 20000313 (experimental).symtab.strtab.shstrtab.text.rel.text.data.rel.data.bss.note.rodata.rel.rodata.comment@7! (I +@8 1 (X( ;8@8F9 N PX Z?)H?cAP  F"f.pD>&P V \!q@ w` } e ;P0,`56 07P47b EJQYis{ @5%/=KXgypatch1_fpp.cgcc2_compiled.patched_set_fpsrpatched_to_packpatched_from_packsz1.0sz2.1patched_get_fp_valuesz1.2sz2.3patched_put_fp_valuepatched_get_fp_adpatched_fpp_condpatched_fscc_opppatched_fsave_opppatched_frestore_opppatched_fpp_opppatched_get_fpsrpatched_fdbcc_opppatched_ftrapcc_opppatched_fbcc_oppregssscanfsprintfget_disp_ea_020mem_banksto_packrintfrexpfrom_packisnanfpp_condget_fp_adop_illgput_fp_valueget_fpsrset_fpsrget_fp_valuepatch_namepatch_datepatch_descpatch_reportedpatch_obsoletesinstallwrite_logget_fpsr_HOOKset_fpsr_HOOKto_pack_HOOKfrom_pack_HOOKget_fp_value_HOOKput_fp_value_HOOKget_fp_ad_HOOKfpp_cond_HOOKfdbcc_opp_HOOKfscc_opp_HOOKftrapcc_opp_HOOKfbcc_opp_HOOKfsave_opp_HOOKfrestore_opp_HOOKfpp_opp_HOOKisinfException   !);FS]Pv1@Iau| !(.8PUagnu  - D [      !)  H  _     Q   "  "[ k "  #  - 7 u           ! 3 : T Y m w           !&+;G"S #'j #  7   $ % ? W" 2#;ANZb  "X #9CQWa{ %'&' (( o'|(  O'\aisx}(  BT)* &FO+@LY*gxGM+fkP]b+v' *) GS '    +  !!E!'!!!t"#}"""""#a# # # #T$#]$c$p$$$$:% \% ~% %'%%&n& & & &&)'g' ' ' '')(W(n((((((9)r)})))))))*1*Q*q*****+++)+.+3+:+(N+,n+{++"++,&,,,-L-a---6..I//}0001)1J11#11#1112!222223.3_3333334X4444444444444444(55555#5*5(A5-G5L53Q5Y54^5c55h5m56r5w57|55855955:55;55<55=55>55?55@55A55B555 6%"6U6[6a6C66666&6666(677!7C7&S7[7a7f7(u7D7&7777(777PTX\`dhlptx|  $(,0@DHLPTX`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPߥt?   $,0 amithlon_contrib\patch1_msdos.oELF4( VShGhIƃu hg*1;sCVP;rV[^+A` @amithlon.deviceamithlon.device 1.1 (31.12.99)J0 JDZv\ h[amithlon_hardopen// zN _$Nuamithlon_hardclose// zN _$Nuamithlon_hardbeginio//// z~N/Jf)f,xN " _$,_Nuamithlon_hardabortio// z@N _$Nuread_ram_bytemessydos_infoload_filesystemamithlon_hardinit/// /// /// / / / yr <tN @V# yr <tN @V# yr <tN @V# yr <FtN @V# yr <tN @R# yr <ltN @# yr <|tN @# z"|$|FAT(z*z$.|/N._ yr <tN @R*_(_&_$_ ""_$.|/$<JN._ ""_ _$NupNupNu01.01machdep/m68k.hAbort in line %d of file %sFAT95 support Patch 12001/10/23-07:49This patch fixes the missing support for automounting FAT partitions in Amithlon 1.0.1. Please note that you still need to set the setconfig option "dosmount" to use it! Bernd Meyer, Amithlon developerw/newdisk/uaefiles/uaehard.imgInit failed! GCC: (GNU) 2.96 20000313 (experimental).symtab.strtab.shstrtab.text.rel.text.data.rel.data.bss.note.rodata.comment@V! P +1 ( ;@Fu NU)~WP   *5@ O_dhVpxpatch1_msdos.cgcc2_compiled.patch_namepatch_datepatch_descpatch_reportedpatch_obsoletesdataleninstallfopen64write_log_IO_putcfclose  *3;DL 3tAnt$,0! amithlon_contrib\patch1_parport.oELFD4( VSt$ \$uNf f  t ʐPVЃ[^ÐVSt$ V҃u1ffB tt Ӂu[^ÍvPhhЃ th øff x@01.01Parport Patch 12002/01/28-18:27This patch emulates the Amiga's parallel port directly on the PC's hardware, thus circumventing the need for a powerpar.device Ernie Lom (reported huge slowness with powerpar.device) noneInstalling %s Already installed! GCC: (GNU) 2.96 20000313 (experimental).symtab.strtab.shstrtab.text.rel.text.data.rel.data.bss.note.rodata.comment@3!  +t1 ( ; @F! N)W$  !&6ET_j uop]cpatch1_parport.cgcc2_compiled.baseorig_write_ciaaorig_read_ciaaorig_read_ciabpatch_namepatch_datepatch_descpatch_reportedpatch_obsoletesnew_write_ciaaciaa_control_irq_readciaa_control_irq_maskcustom_bankoinknew_read_ciabinstallwrite_logread_ciab_HOOKwrite_ciaa_HOOK%/6>LYbs !&+ CtE``Z#,0% amithlon_contrib\patch3_compemu_fpp.oELF-4( =@VSHu@=Dt'h1hhjjjjá @9Уv @9Уv@9Уv@9Уv9УvK5 F@9Уv¡@9Уv09Уv)k(*$t'h1hhjƀ$S@[^Ít&'U=DWVS|$u=@tD,<wyjjÃkމL@ajjUNJ yo١@9Уv@9Уvy&h1jghj8}8Sh@1hjjhj )١@9Уv@9Уv١@9Уv,7@9Уvt7ۡ@9Уv,vݡ@9Уv,@9Уv@9Уvߡ@9Уv@9Уv@9Уvݡ@9Уv,'@9УvWUyo١@9Уv@9Уvy$h1jghj8}3Sh@1hjjhj )١@9Уv@9Уv١@9Уv,7@9Уvt7ۡ@9Уv,vݡ@9Уv,@9Уv@9Уvߡ@9Уv@9Уv@9Уvݡ@9Уv,'@9Уvkau'h1hhj[Ȉa^_] U1WVSfD$T$@u f f ljЃt tYut&t;cVjjhhj 8Vj̍Vhhj &Vhhj &$`$FPjt&FPju  PFPP t&u  P^SSSjy1fXfFPjSjj5t&1fPfjjPFPt&x$1fXfؘPcЋ@P; )¡¡ƒ1f\fؘRjG&)ЋЋЃu@Pj $jjUjhhj TjjUjhhj  jjUjhjUjjU(jhjUjjUjh$hj jjUjjejjUjhjUjjU(jhhj AjjUjjjhhj $ [^_]Í&'UWVSfD$T$@uT$f RPf ljЃtt& tqpt7bT$RhhVBT$RhhVt&T$RhhVt&T$Rh΃$ $FPjt&FPju `@PFPP t&u `@P^SSSjs1fXfFPjSj1&1fPfjjPFPt&{$ 1fXfؘPcЋ@P; )¡¡ƒ1f\fؘRjA&)ЋЋPj`$@T$RhT$RhhjjjUHT$RhhjjjUjU$hjjjUjUhj$jjU T$RhhjjjUT$RhhjjjUjU$hjjjUCvT$RhhjjjU t&1[^_]É'SD$$`APj1fPf؍APjSjt<t`t[Vv1fPfSЋ@Pj5.h1hhj[ÍWVS|$f\$t u8tt&' [t&=Du=@tjDhjjj؃$vjjj#vjtjpjjj jjjjjj jj t&j4j 0j ,t&j$j jjj0jjjj!jjjj 'jjjj jj jj8ujV(h1h.hj[^_Ðt&W VS\$t t t&@uA1ftfAD¡߃))RjPjPjPj 1jjÃ=Du=@tjD$jjj jtjpjjj jjjjjj jj s&j4j 0j ,t&j$j jjj.jjjjjjSV (jjjj jj jj[^_à Ð& Ð&UWVS$f$t>ff ? $t&fP؃WP J = t&11 Hff ttɃučD$PWD$ xff t? t^&tt&Kt&=-h1hhjgt&ShjD$PhjjjD$$P$jD$PhjjjD$PjD$$P$hjjjD$PK]1ۍShhjjjD$PjD$$P$hjjjD$PjD$Phj$jjD$ PjD$PCZ8uD$PP D$Iff  tzqPWD$Yff t:tYtt&Kt&=-h1hhjgt&jD$PjjD$PjhjD$ P$jjD$PjhjD$PjjD$$P(jhhSK]1ۍjjD$PjhjD$PjjD$$P(jhjD$ PjjD$Pjh$jD$PhSCZ8u$PP $PGP0 tFth$&hW+t8ShSjhjhj Wh?< XtGЋXShSjhjRЋ@Ph t& t&ffff%f=\؃;$ VvVkvhXVVhF&V=t&V-t&hV؃PVV؃l$PWÃSVPWÃjjhjSVhj hjhjVPPWÃ,SVV$PWÃSVVPWÃSVVt&PWÃSVVt&PWÃtSVVlt&PWÃDSVV<t&PWÃSVV t&PWÃSVVt&PWÃSVVt&PWÃSVV|t&PWÃTSVVLt&PWÃ$SVVt&PWÃSVVt&PWÃSVVt&PWÃSVV&PWÃTSVVO&PWÃ)VjSj]t&PWÃSj5 \`)ЋXЃ`\XĴ[^_]Í@9УvÍ=Du=@tDD$PÐPhw ##P 0Ð& Ð&      @:&{?uk@?$@Y@@חA7yACnF?O8M20HwZC H!O"T#_$f%q%w&%%%%&%%%%&%%%%&%%%%%%%%,&4%<%J%T%Z&b%j%o%{%% !"#' -:(G)OU)Z*`t$|%%&%%%%&%%  !"#"*/+9@E J!Q"V#cjq%y%&%%%%&%%%%&%%%%&%%* %%& %(%.%A%I%O&W%_%e%p%v&~%%%%&%%%%&%%%%&%%%%& %%%%%&-%5%;%F%L&T%\%b'h,v%%&%%%%&%% ! "#$+.5: ?!F"K#SZa%i%o&w%%%%&%%%%&%%%%&%%*%%&%%%1%9%?&G%O%U%`%f&n%v%{%%&%%%%&%%%%&%%%%&%%%%&%%%+%6%<&D%L%U^jo t!{"# -  .# /( /- 4 0D 1R W .\ /a /f m 0  . / /  2   3 3   4= F S 4[ 3h 5s 6{ 5 3 4 5 6 5 7  5 6 51 5< 6D 5T 6^ 8g 9n 5 5 : 8 6 9 5 :  5  ;  . / /  0* ;1 6 .; /@ /E L 2^ <e j =r >| ;  . > ;  . / /  ? < 1 ;  . > ;  . /" /' . @= AF -M R .W /\ /a h 0 BC"/'/,2DFKCP/U/Z`Ev{C//FG33 4=FS4[3h5s6{53>56575 6515<6D5T6^8g9n55:8695:5C G//"F,H>CIH/M/RYEcJk>szFH>FHC//FJK// FH>#*F4HFKCP/U/ZaFkL35653>!5'6/5H5N6V5e: !"#MN(:1:IU3m3z3OOOOOOO3P!-2 7!>"C#RMX5rN65655:6:5>5>5QQ#7OX3m3z3OOOOROO3N"N2MhSNT1=B G!N"S#|I//UFHUFHUEJ,1I6/;/@GEUJa>ipF~H>FH>3$T !"#U;.U ;.!U/<9>=C/H/MS?<=>;.>;.>//?.3J3sVVFV.3WX V.A5G6O5bVgYo:t{X565VYZ[$\19]CR^b_qy`@ZaBZa: XbV F/W4;XIZSagcuZadZaeZaf Z a g1 Z; aO ha Zk a i Z a j Z a k Z a!l!!Z+!a?!mQ!Z[!ao!n!Z!a!k!Z!a!o!Z!Z!a"n!"Z+"a?"pV"ak"Bs"p"a"B"N"V"V"V"V"V"V"q"%"%"&#%#%"#+#=#Q#rW#\#!a#i#zn#s#{x#}#|##}##~###########N#N `dhlptx  $(,0@DHLPTX`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|t?"O$,0 amithlon_contrib\patch3_mouse.oELF 4( UWVS 1fdf` hkt; ttJt}{=f£M)Bv#t utt wf$pjpK=ujq>jpjp=ujr%vjsjs\&jsC=u41ҍt@pt )KtVKup51Ѓttjth1Ѓ t tjuh1ڃ@t@tjvh 1Ѓttjwh5 1PW?%:t1t  %?Bfdv'ftKuh@f`?Bfdt&ftKuh@f`?BfdftKuh@W@ t2@=u1A[^_]ÍSĀSh(tjj jSSh0tjj jS  t1@Ph;hJhVhbhnhzh hhĈ[01.01machdep/m68k.hAbort in line %d of file %sdos.libraryKeyboard timeout in kb_wait. Bad! `GCWheel Mouse Patch 32002/01/04-12:57This patch adds support for mouse wheels on mice using the 'standard' protocol. It also translates the 4th, 5th and 6th button into shift, alt and control, respectively; However, these bindings do *not* affect the modifier key status in Amithlon keyboardmaps (if you don't know what that last part meant, don't worry!) In addition, it also fixes the Caps-Lock problem that exists in Amithlon version 1.0.1. This should now work on all machines. There is a setconfig option "setleds"; Set it to 0 to prevent the keyboard LEDs being programmed (which locks up on some machines) Another setconfig option, "wheelcount" forces the driver into one wheel mode(1), two wheel mode (2) or autodetect (0) Due to persisting problems with PCMaus driver (mouse part) Georg Steger (CapsLock part) Wheel Mouse Patch 1,Wheel Mouse Patch 2setledswheelcountInstalling %s fff|70|4cccfff|73|4dcdfff|71|4ecefff|72|4fcffff|74|60+fff|f4|e0fff|75|64+fff|f5|e4fff|76|63+fff|f6|e3fff|77|60+fff|f7|e0GCC: (GNU) 2.96 20000313 (experimental).symtab.strtab.shstrtab.text.rel.text.data.rel.data.bss.note.rodata.rel.rodata.comment@! X +@81 H( ;x@xF N p Zj ) c   (3> LQV^g  p "$-(8,C0R4b jupatch3_mouse.cgcc2_compiled.CapsLockdo_setledswheelcountdo_wheelcountdx.0dy.1state.2oldval.3oldbut.4patched_handle_ps2in_ps2_initemulate_ps2_mouseps2buttonsps2mouse_xps2_protops2mouse_yinject_keyps2byte4eavesdropemulate_ps2_keyboardwrite_loginfifokbd_headkbd_fifopatch_namepatch_datepatch_descpatch_reportedpatch_obsoletesinstallget_config__strtol_internalhandle_ps2_HOOKadd_keybindingP]3?IWbsz#FLlu{ !PU  (-'@(ENS'f(kt!)********$(,04ptx|got7h h ,0 amithlon_contrib\READMEWelcome to the latest set of patches and additions to Amithlon 1.0.1. LEGALESE ======== Recent disagreements over the legal status of patches released by me have unfortunately made the following necessary. While I personally regret having to do this sort of stuff, please read these rules carefully and follow them --- I _will_ enforce them if need be! The files in this archive are only to be used with correctly purchased versions of Amithlon. Any use in any other environment is strictly forbidden. All files are (C) Bernd Meyer, 2002. The files in this archive are provided to extend and improve your Amithlon experience. They explicitly are not part of Amithlon. To stress this point, any redistribution of individual files from this archive, as well as of the whole archive, is strictly forbidden, except where explicitly allowed. In particular, any mirroring on any web or ftp site other than www.amithlon.net requires the written permission of the author. Equally, any distribution on any other medium requires such a written permission. Furthermore, these files are made available free of charge as a service by the copyright holder, Bernd Meyer. Mr. Meyer retains all rights to the code contained in them. Mr. Meyer reserves the right to withdraw these files from distribution at any time, without prior announcement. It is strictly forbidden for third parties to make any representation of the files contained in this archive without written permission. WHAT'S IN THERE =============== This archive contains a number of previously unreleased patches, as well as not-officially-released patches, and updates to some patches currently available through other sources. Please read the descriptions to find out which patches you want to install, and then read the "INSTALL" section on how to do it. The following patches are included in this archive: patch1_fpp.o: This patch fixes a number of inaccuracies in the UAE FPU emulation. The most prominent example of this was the failure of brush mapping in Imagine 5.0. You want this! patch3_compemu_fpp.o: This patch fixes a number of inaccuracies in the JIT compiler's FPU emulation. This is an updated version of a patch distributed as part of Haage&Partner's official AmigaOS XL update. NOTE: This patch integrates the patch1_fucomi.o patch that was previously released for testing. Please do not use both, as they could possibly conflict! patch1_msdos.o: A simple patch that will repair the broken FAT support in Amithlon 1.0.1. Please note that this patch requires a reboot to become active. Also, there have been some reports that this patch causes problems in some configurations. Please see README.msdos for more details. patch1_parport.o: This is a bit of a hack. It will add emulation for the Amiga's original parallel port to Amithlon. Any accesses to that port are internally translated into accesses to a PC parallel port at address $378. If your setup is working fine with powerpar.device, you don't want this. If, however, you are one of the unfortunate users whose printer doesn't get along with powerpar.device, you can install this patch. You will then have to switch your printing back to AmigaOS's usual parallel.device. You will also need to set your PC's parallel port to address $378 in the BIOS. patch3_mouse.o: This is an updated version of the mouse/keyboard patch included in H&P's AmigaOS XL update. This one provides ways to inform the driver of the number of wheels on your mouse, and to prevent it from locking up the keyboard controller. More details in README.mousepatch Also included are amithlon_patcher and dumppatch. Dumppatch is a small utility which will print out information about the patches you have installed. Amithlon_patcher is a program that will apply patches to your system. PLEASE READ THE NEXT SECTION CAREFULLY! INSTALL ======= First of all, do get the official AmigaOS XL update from Haage & Partner. It contains a number of patches that were not included with this archive as they are considered part of Amithlon. Once you have that update installed, you will have a directory called S:amithlon_patches. You should also have a brand new executable in C:AmithlonC/AmithlonSetup, which should be 2876 bytes in size. You can install patches you want to load simply by copying them into the S:amithlon_patches directory. AmithlonSetup (which should be called as part of your Startup-Sequence) will then load all the patches it finds there. Unfortunately, AmithlonSetup does not check for outdated or obsoleted patches. So you will have to be especially careful not to have conflicting patches installed. As a rule of thumb, if you have a newer version of a patch, remove (or rather, archive) the old one. But for example in the case of patch1_fucomi, it isn't immediately obvious that patch3_compemu_fpp replaces it.... If you suspect that there is a conflict between some patches you have installed, simply run amithlon_patcher in a CLI window. It will output a lot of info, including warnings about patches that were obsoleted by other patches. If for some reason you'd rather load your patches with amithlon_patcher than with AmithlonSetup, you can run it in Startup-Sequence. However, you then need to a) make sure you have sufficient stack at that point. I.e. have a "stack 65536" before calling amithlon_patcher b) downgrade your version of AmithlonSetup to that included on the original AmigaOS XL CD, to avoid double-patching. Please not that, while having amithlon_patcher automatically check the module dependencies for you is a good thing, you really should keep your collection of patches properly cleaned up. Also please note that the version of amithlon_patcher included in this archive is considerably more advanced than any distributed previously. So please replace any already installed versions with this one! PATCHES FROM H&P UPDATE ======================= While the H&P update contained a number of patches, it didn't provide any information as to what they did, and also didn't include the dumppatch utility. So here is some info. Note that the files described here are *not* part of this archive! patch1_right_ctrl.o: This patch fixes a very silly problem where the right CTRL key would never send a release event. In effect, pressing it would permanently lock the keyboard in Control mode (at least until one pressed the left CTRL key once). You want this! patch1_shifting.o: This patch disables the JIT compiler for a very rarely used variant of the shift and rotate instruction. It produced wrong results for them. patch1_vec.o: There was a problem where some safety-net code miscalculated the length of some x86 instructions, and could in bad circumstances lead to the x86 CPU executing essentially random code. This fixes that miscalculation. CAUTION: ======== When playing around with this stuff, there is a chance that you may make your AmigaOS installation unbootable. So please be sure to have the original AmigaOS XL CD close by. If you happen to run into a situation where you can't boot into the OS3.9 on your hard drive anymore, simply boot from the CD, hold down both mouse buttons to get into the Early Startup Menu, and select HDH0 as the boot device. This should give you a system from which you can delete patches or edit config files on your hard drive installation. _tB=-=-$8p,0" amithlon_contrib\README.mousepatchUPDATE: Version 3 of this patch introduces a couple of configuration options, to deal with slightly-off hardware. Some users have reported complete lockups of the keyboard controller as soon as they pressed CapsLock. The cause has been traced to setting the keyboard LEDs. If you suffer from such lockups, add setconfig setleds 0 to your startup sequence. This will prevent Amithlon from ever trying to change your keyboard LEDs, thus avoiding the lockup. The actual CapsLock functionality, however, is still there. Also, some users apparently have mice for which the scroll wheel does not work exactly like expected, and fast scrolling produces left/right events rather than up/down. Unfortunately, the IntelliMouse protocol is not completely defined, and there is an ambiguity in the presence of two mouse wheels. If you suffer from this, and have a single-wheel mouse, add setconfig wheelcount 1 to your startup sequence. This will force the protocol interpreter into single-wheel mode. ---------------------------------------------------------------------------- UPDATE: Version 2 of this patch ("patch2_mouse.o") will, in addition to the stuff described below, *also* fix the caps-lock problem. This version obsoletes "patch1_mouse.o"; You should delete the old patch file from you s:amithlon_patches directory if you have it there. ---------------------------------------------------------------------------- The patch "patch1_mouse.o" will add wheel functionality and 4th, 5th and 6th button functionality to most PS/2 wheel mice under Amithlon. It should be harmless if used on non-wheel mice. The way this is done is by translating wheel and button events into keyboard events inside the emulator. The keyboard events use special PC key codes which are not usually used. In particular: 0x70 : wheel up 0x73 : wheel down 0x71 : wheel right 0x72 : wheel left 0x74 : 4th mouse button press 0xf4 : 4th mouse button release 0x75 : 5th mouse button press 0xf5 : 5th mouse button release 0x76 : 6th mouse button press 0xf6 : 6th mouse button release These codes get treated as if they came from the keyboard. PC keyboard codes are translated into Amiga keyboard codes using a table inside Amithlon. When this patch is activated, some reasonable defaults are set up (e.g. "wheel up" is translated into "cursor up press, cursor up release"). However, these defaults can be changed at will. The defaults are: 0x70 : cursor up press, cursor up release 0x73 : cursor down press, cursor down release 0x71 : cursor right press, cursor right release 0x72 : cursor left press, cursor left release 0x74 : laft shift press 0xf4 : left shift release 0x75 : left alt press 0xf5 : left alt release 0x76 : ctrl press 0xf6 : ctrl release You can change any of those settings by issuing the following command: setconfig keyboardmap fff|PC|AAAAAAA where "fff" is simply a given (see below for a more detailed explanation), "PC" is the two digit hex code for the event you want to remap (e.g. for "wheel left", it would be 72), and "AAAAAA" is a sequence of 2 digit Amiga keycodes. So if, for example, we would like "button 4 press" to be mapped to "key 'Q' press", the command would be setconfig keyboardmap fff|74|10 where "74" is the PC code for "button 4 press", and "10" is the Amiga code for the 'Q' key. If you do this, you will notice that the Q key never gets released. Uh-oh! You will also need to map the "button 4 release" to "key 'Q' release". For both kinds of codes, you get release codes by adding 80 hex to press codes. I.e. setconfig keyboardmap fff|f4|90 A more useful mapping would probably be the following: setconfig keyboardmap fff|74|6637 setconfig keyboardmap fff|f4|b7e6 Which translates a 4th-button-press into Left-Amiga-press, 'M'-press (i.e. "switch public screen"), and "4th-button-release" into 'M'-release, Left-Amiga-release. Or, also quite fun: setconfig keyboardmap fff|70|6637b7e6 which will allow you to cycle through your screens with the scroll wheel. I hope this is useful in getting people started on customizing the way the extra mouse functions work for them. Appended is a rather technical description of the keyboardmap mechanism, and all its possible functions. Good luck, Bernie P.S.: You might ask "so what about the middle mouse button, the third button?". Well, *that* one gets translated straight into the middle mouse button on the emulated Amiga mouse. And yes, Amiga mice *do* come in three button variants. However, it *also* gets translated, like the 4th, 5th and 6th button, into keyboard events. The third mouse button has the codes 0x77/0xf7, and the default mappings are like for the 4th button. So if you plan on using a utility that uses the middle mouse button directly, it would probably be a good idea to issue the following commands first: setconfig keyboardmap fff|0x77| setconfig keyboardmap fff|0xf7| That will stop the button from sending keyboard events altogether. --------------------------- keyboardmaps ----------------------------- KEYBOARD MAPS: ============== Amithlon's key translation from raw PS/2 codes coming in from your real keyboard to emulated Amiga keycodes is fully programmable. So programmable, in fact, that it takes a bit of explaining :) The first concept is that of modifiers. Most modern PC keyboards have two control keys, two alt keys, and two shift keys. Each of those can be pressed or unpressed, making for a total of 64 possible modifier states. Of course, it would be rather tedious if you had to program a key individually for each possible modifier state --- which is where modifier maps come in. Remember that there are *two* keys for each kind of modifier; A left one and right one. So for each *type* of modifier, there are only 4 possible states. A modifier map has one bit for each of those possible states, setting whether your new key binding should apply in that particular state or not. Here are the mappings from states to bits: Bit3: Both modifier keys pressed Bit2: Right modifier key pressed, Left unpressed Bit1: Left modifier key pressed, Right unpressed Bit0: Neither key pressed. Assign 1 to each bit for which your key binding should be used, and 0 for each bit which it shouldn't handle. Then express that bit pattern as a single hex digit. That gives the following map (which is all you'll ever need to worry about): 0: Never use this 1: Only use if neither left nor right pressed 2: Only use if left is pressed, but not right 3: use if right is not pressed, ignore left 4: Only use if right pressed, left unpressed 5: use if left is not pressed, ignore right 6: use if exactly one is pressed 7: use if at most one is pressed 8: use if both are pressed 9: use if either both or none are pressed a: use if left is pressed, ignore right b: use if left is pressed (ignoring right), OR none are pressed c: use if right is pressed, ignore left d: use if right is pressed (ignoring left), OR none are pressed e: use if at least one is pressed f: always use this You get a full modifier map by simply combining the hex digits for each type. First comes the one for control, then alt, then shift. A key binding will only be used if each element of the full modifier map is OK. For example, a key binding with modifier map 8e7 will be used only if *BOTH* control keys are pressed ('8'), *AT LEAST* one alt key is pressed ('e') and *AT MOST* one shift key is pressed. Usually, your full modifier maps will not care about more than one type of modifier; Then use 'f' for the other types. OK, now you know how to prepare a full modifier map. Next, you need to know the PS/2 keyboard code of the key you want to remap. You can find that by running ps2test. Most keys have single byte codes, but some have two-byte codes, starting with 0xe0. Note that the "Up" code is always the same as the "Down" code, except with bit 7 set. Write down the code you want, and quit ps2test (by pressing F10). Last but not least, you need to write down what the key *should* produce. Those are Amiga keysymbols, or "rawkeys". Please note that for those, too, the "Up" codes can be derived from the "Down" codes by setting bit 7. So as the "Down" code for 'Q' is 0x10, the "Up" code is 0x90. You can use any arbitrary number of keycodes for your new keybinding. Sometimes, you might find that you want to set something like ALT-X to a symbol that on the Amiga keyboard doesn't allow the ALT key to be pressed. Then your key binding must first send an "Up" event for the ALT key to the Amiga, and *then* send the right key afterwards. Now, putting it all together, one gets a complicated looking string like this: f8f|30|e5e435b51292139336b6179712926465 It's not as bad as it looks. The first three hex digits are the full modifier map, in the order control, alt, shift. Then comes a separator (any character will do, so don't worry if '|' is a key you can't access until you have set a key binding :). Next comes the PS/2 code; It's either one hex byte, or two hex bytes, the first of which is "e0". Then comes another separator, and as many bytes of Amiga codes as you want. How to actually submit such a key binding? Simple, using setconfig: setconfig keyboardmap f8f|30|e5e435b51292139336b6179712926465 Here is a more detailed explanation of the above example example: "f8f|30|e5e435b51292139336b6179712926465" would translate LALT-RALT-B (PS/2 code 30 is 'B') into e5 -> ralt up e4 -> lalt up 35 -> 'B' down b5 -> 'B' up 12 -> 'E' down ..... 92 -> 'E' up 64 -> lalt down 65 -> ralt down You can combine several key bindings by simply concatenating the strings, with a '+' in between. Please remember to map the PS/2 key-up codes as well, or weird and wonderful things might happen. Oh, and yes, the Amiga code string can be empty. There is one more thing --- "conditional codes". These are special Amiga codes that get interpreted by the emulator, rather than being sent to the Amiga. They are: 0x70 -> Start conditional on Left Control 0x71 -> Start conditional on Right Control 0x72 -> Start conditional on Left Alt 0x73 -> Start conditional on Right Alt 0x74 -> Start conditional on Left Shift 0x75 -> Start conditional on Right Shift The end-conditional codes are start_conditional + 0x08. These are used for cases where you might be uncertain about exactly which modifiers are active at the start of your map, but need to change them, anyway. Say we want to make pressing ALT-B produce a 'q'. The first idea might be fef|30|10 and fef|b0|90 but that doesn't work --- it will produce ALT-q rather than q. We have to switch off ALT when we "press" q. But we don't know which ALT key was pressed. So the correct way is fef|30|72e47a73e57b10 and fef|b0|9072647a73657b in detail: 72 -> Only do the following if Left Alt is active e4 -> Amiga code for Left Alt Up 7a -> End conditional block 73 -> Only do the following if Right Alt is active e5 -> Amiga code for Right Alt Up 7b -> End conditional block 10 -> Press q and 90 -> q Up 72 -> Start conditional on Left Alt 64 -> Amiga code for Left Alt Down 7a -> End conditional 73 -> Start conditional on Right Alt 65 -> Amiga code for Right Alt Down 7b -> End conditional zt=L_2,0 amithlon_contrib\README.msdosIf you want to mount FAT partitions, you must tell Amithlon to do so. By default, it doesn't touch them, because, well, there are probably more variations of FAT than there are Amiga users, and whether FAT95 is nice to all of them, who knows. We know that the previous version of FAT95 did some nasty things to Windows2000 and/or WindowsXP partitions. So don't say you haven't been warned, OK? Right, you still want to do it? Then just type setconfig dosmount C to mount your "C:" drive during the next reboot. Or setconfig dosmount CEGH to mount the C:, the E:, the G: and the H: drive. Or simply setconfig dosmount "" to mount all the DOS partitions that can be found. So, let's summarize: 1) You need to do "setconfig dosmount xxxxx" 2) You need to have successfully installed the patch1_msdos.o patch 3) You need to reboot This can be achieved by having the following at the start of your startup sequence: setconfig >nil: dosmount "" ; or replace "" by drive list AmithlonSetup ; if you have the H&P update installed. setconfig >nil: rebootifchanged ; reboot for changes to take effect or, without the H&P update: setconfig >nil: dosmount "" ; or replace "" by drive list stack 65536 ; ugly, I know.... amithlon_patcher >nil: ; enable FAT95 setconfig >nil: rebootifchanged ; reboot for changes to take effect Mail me if there are any problems, Bernie P.S.: Many many thanks to Torsten Jaeger, the author of FAT95, who sent us version 2.17 for inclusion in Amithlon! Great work by him; The screwup that broke automatic mounting was all mine....