From adbb1d8dbe341d7d77f670add75220db41f03ede Mon Sep 17 00:00:00 2001 From: 4am Date: Sun, 21 Apr 2024 15:14:08 -0400 Subject: [PATCH] add Odin --- bin/check-attract-mode.sh | 4 +-- res/ACTION.HGR.UNCOMPRESSED/ODIN | Bin 0 -> 8192 bytes res/ACTION.HGR/ODIN | Bin 0 -> 248 bytes res/ATTRACT.CONF | 1 + res/ATTRACT/ODIN | 8 +++++ res/GAMEHELP/ODIN | 18 ++++++++++ res/GAMES.CONF | 1 + res/SS/ACTBOARD.CONF | 1 + res/SS/ACTNOPQR2.CONF | 1 + res/SS/CATBOARD.CONF | 1 + res/SS/TITLENOPQR.CONF | 4 --- res/SS/TITLENR2.CONF | 11 +++++++ res/TITLE.HGR.UNPACKED/ODIN | Bin 0 -> 8192 bytes res/TITLE.HGR/ODIN | Bin 0 -> 7680 bytes res/dsk/odin (4am pack).po | Bin 0 -> 143360 bytes res/history.md | 1 + res/notes/wishlist.txt | 1 - res/ports/odin/Makefile | 55 +++++++++++++++++++++++++++++++ res/ports/odin/notes.txt | 43 ++++++++++++++++++++++++ res/ports/odin/src/OBJ1 | Bin 0 -> 1024 bytes res/ports/odin/src/OBJ1.X | Bin 0 -> 157 bytes res/ports/odin/src/OBJ2 | Bin 0 -> 19132 bytes res/ports/odin/src/OBJ2.X | Bin 0 -> 10294 bytes res/ports/odin/src/loader.a | 25 ++++++++++++++ res/ports/odin/src/odin.a | 45 +++++++++++++++++++++++++ src/index/artwork.idx.a | 2 +- src/index/attract.idx.a | 4 +-- src/index/cache00.idx.a | 2 +- src/index/cache01.idx.a | 2 +- src/index/cache10.idx.a | 2 +- src/index/cache11.idx.a | 2 +- src/index/count00.a | 2 +- src/index/count01.a | 2 +- src/index/count10.a | 2 +- src/index/count11.a | 2 +- src/index/coverfade.idx.a | 2 +- src/index/credits.idx.a | 2 +- src/index/decrunch.idx.a | 2 +- src/index/demo.idx.a | 2 +- src/index/dfx.idx.a | 2 +- src/index/dgr.fizzle.idx.a | 2 +- src/index/dgr.idx.a | 2 +- src/index/dhgr.idx.a | 2 +- src/index/dtitle.idx.a | 2 +- src/index/fx.idx.a | 2 +- src/index/gamehelp.idx.a | 4 +-- src/index/gr.fizzle.idx.a | 2 +- src/index/gr.idx.a | 2 +- src/index/helptext.idx.a | 2 +- src/index/hgr0.idx.a | 2 +- src/index/hgr1.idx.a | 2 +- src/index/hgr2.idx.a | 2 +- src/index/hgr3.idx.a | 4 +-- src/index/hgr4.idx.a | 2 +- src/index/hgr5.idx.a | 2 +- src/index/hgr6.idx.a | 2 +- src/index/joystick.idx.a | 2 +- src/index/miniattract0.idx.a | 4 +-- src/index/miniattract1.idx.a | 2 +- src/index/prelaunch.idx.a | 4 +-- src/index/res.cover.idx.a | 2 +- src/index/res.help.idx.a | 2 +- src/index/res.title.idx.a | 2 +- src/index/search00.idx.a | 4 +-- src/index/search01.idx.a | 4 +-- src/index/search10.idx.a | 4 +-- src/index/search11.idx.a | 4 +-- src/index/sfx.idx.a | 2 +- src/index/slideshow.idx.a | 4 +-- src/index/title.idx.a | 4 +-- src/index/xsingle.idx.a | 4 +-- src/prelaunch/odin.a | 23 +++++++++++++ 72 files changed, 294 insertions(+), 65 deletions(-) create mode 100644 res/ACTION.HGR.UNCOMPRESSED/ODIN create mode 100644 res/ACTION.HGR/ODIN create mode 100644 res/ATTRACT/ODIN create mode 100644 res/GAMEHELP/ODIN create mode 100644 res/SS/TITLENR2.CONF create mode 100644 res/TITLE.HGR.UNPACKED/ODIN create mode 100644 res/TITLE.HGR/ODIN create mode 100644 res/dsk/odin (4am pack).po create mode 100644 res/ports/odin/Makefile create mode 100644 res/ports/odin/notes.txt create mode 100644 res/ports/odin/src/OBJ1 create mode 100644 res/ports/odin/src/OBJ1.X create mode 100644 res/ports/odin/src/OBJ2 create mode 100644 res/ports/odin/src/OBJ2.X create mode 100644 res/ports/odin/src/loader.a create mode 100644 res/ports/odin/src/odin.a create mode 100644 src/prelaunch/odin.a diff --git a/bin/check-attract-mode.sh b/bin/check-attract-mode.sh index d1eb187..d176634 100755 --- a/bin/check-attract-mode.sh +++ b/bin/check-attract-mode.sh @@ -50,13 +50,13 @@ cat res/GAMES.CONF | grep '^\!to' src/demo/*.a | cut -d'/' -f5-|cut -d'#' -f1 | grep -v "SPCARTOON" | while read f; do - grep "$f=0" res/ATTRACT.CONF >/dev/null || echo "unused demo: $f"; + grep "^$f=0" res/ATTRACT.CONF >/dev/null || echo "unused demo: $f"; done # warn about unused slideshows cd res/SS for f in *.CONF; do - grep "$f" ../ATTRACT.CONF >/dev/null || echo "unused slideshow: $f"; + grep "^$f=" ../ATTRACT.CONF >/dev/null || echo "unused slideshow: $f"; done cd ../.. diff --git a/res/ACTION.HGR.UNCOMPRESSED/ODIN b/res/ACTION.HGR.UNCOMPRESSED/ODIN new file mode 100644 index 0000000000000000000000000000000000000000..da21d0cddf14e0627ef1d6c376d7a0b9ca815554 GIT binary patch literal 8192 zcmd^@F;2xW5JU|U4HX3uEhS3B5jX{x;0Q=4SLgdH&zkJtCF|&axd17eWIUO*#~TtT zrIh(|p8h&clJgImuVtAy9!q(Kw>o%>=s-JeudVKTSzb8qOL;WVJncBw=s@@gtxo&Y>%Yhc z9zPI1!d@NvEUtBT`&#Em-+^^3ThHq7)m-7!S2^l}sfxQ^$C&2i<&Q2x{J=;Df1z7GrkSIZ_N|2OR>*u> z?K%gie$z=0D`)4YW8OJ>#zy7OJg$wbYm=*FN4=&yjnQ{t9YfcP_-d|j>Z@GacW3{5 z>u2?w`jQWP*2n6&KSK13YffJN=pw`qjCAl9I(<(Jc>j+6{urLW(|dKV*r#4(pEXxF z^;M3(166mlzUHd6@KbK4@4zdpf8#G1yY*$9`_T0w_eY2yF~Ke`C<10x;$t#n6y zwNJh8Kjs}Fb-_pnZ*@1Szx#J3^NEmo_9A||F1U*LDM#OdszaYee3SKebIR65NBszU zb?CDg)rH50>;L}zk6yp_=@ozf?DjSLe@5PWpggDaOBV6fT;VF>qa4pYs5P&{y&qy{!ab>cmEH3z9DY# ze|gpaGWP%fWb5OTIsTvL`1ijxmiLdvb%pna4J_H5ZS@8J|G%-9VYrZVSU^BLs(uF3 zrAG`d_WKxOxUPx>tf^~!$I;Xj$(UNh`y}g&v(Mp5MqgHq#ieYPwfeS<3l)Cy-&(+E zzvUl8x`ls4nMU{D#IKwm_<6WBoL_SlRn^yv{}No-%U;a1N?@VJT%aA(x&Amzaq_FT t_xErXI5 + + press Return to place +[eof] diff --git a/res/GAMES.CONF b/res/GAMES.CONF index 49eadf4..2504680 100755 --- a/res/GAMES.CONF +++ b/res/GAMES.CONF @@ -65,6 +65,7 @@ 00001,MU.TORERE=Mu Torere/1988 00001,NIMWIT=Nimwit/1988 00001,NINE.MENS=Nine Men's Morris/1988 +00001,ODIN=Odin/1982 10001,ONE.ON.ONE=One on One/1983 01100,PAY.DAY=Pay Day/1990 00001,PENSATE=Pensate/1983 diff --git a/res/SS/ACTBOARD.CONF b/res/SS/ACTBOARD.CONF index 514486f..faded61 100644 --- a/res/SS/ACTBOARD.CONF +++ b/res/SS/ACTBOARD.CONF @@ -5,6 +5,7 @@ REVERSI CHECKERS MICROCHESS +ODIN PENSATE GO diff --git a/res/SS/ACTNOPQR2.CONF b/res/SS/ACTNOPQR2.CONF index fb2a617..7a3c6cb 100644 --- a/res/SS/ACTNOPQR2.CONF +++ b/res/SS/ACTNOPQR2.CONF @@ -6,5 +6,6 @@ ONE.ON.ONE2=ONE.ON.ONE ROCK.N.SCROLL POOL NIMWIT +ODIN [eof] diff --git a/res/SS/CATBOARD.CONF b/res/SS/CATBOARD.CONF index 4441018..3e2cb9f 100644 --- a/res/SS/CATBOARD.CONF +++ b/res/SS/CATBOARD.CONF @@ -3,6 +3,7 @@ # PENSATE +ODIN REVERSI GO CHECKERS diff --git a/res/SS/TITLENOPQR.CONF b/res/SS/TITLENOPQR.CONF index 2d5ed65..068a993 100644 --- a/res/SS/TITLENOPQR.CONF +++ b/res/SS/TITLENOPQR.CONF @@ -7,9 +7,5 @@ POOL NINE.MENS NIMWIT ONE.ON.ONE -REVERSI -PLACE.BALL -PENSATE -PITSTOP.II [eof] diff --git a/res/SS/TITLENR2.CONF b/res/SS/TITLENR2.CONF new file mode 100644 index 0000000..1ba509f --- /dev/null +++ b/res/SS/TITLENR2.CONF @@ -0,0 +1,11 @@ +# +# HGR title slideshow of games that begin with "N"-"R" +# + +REVERSI +PLACE.BALL +ODIN +PENSATE +PITSTOP.II + +[eof] diff --git a/res/TITLE.HGR.UNPACKED/ODIN b/res/TITLE.HGR.UNPACKED/ODIN new file mode 100644 index 0000000000000000000000000000000000000000..98d2662c95cd0b15085bd255f1b2749500b73c67 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/res/TITLE.HGR/ODIN b/res/TITLE.HGR/ODIN new file mode 100644 index 0000000000000000000000000000000000000000..bc6b59d8fb6d46cfc4233c2354c18fdf2d326013 GIT binary patch literal 7680 zcmbVRO=~1a5-rubOj8TH9#G=rH04WeHmL9NAaxrx2A|Z>Nnci5u&^+cVP|co&{E^- z{67*{_r1)o5OW&lK0f%Q%YdYPFEZ=1Thic3)RmPP84(!~FEX-58{M`dJoRspUT71x zGj&g;Mpsi4R(duuQ*(szjnStVHKm=9s`~WqeRkDw~0e=+tm4?(N$f5JmB+CQjxOpR)ngPVO6Ws}RT8)Z}Z% zGj!gAUz+C7Vb}j$AHf4Y7VL2|udBO z#{xTb`0mhQU8j}nfNuqISVrFXRq0$89S^{R6NMT6nK%enr5b&yS25mX9iP318Dtq+ zAU@q;%N{K$DJx&=jBx@^)$vJ}A7(HQJ|1=2_Yg^nGqA?a7Q+rYdQ?90pw9r+q?l%} ztd_`2_P04Ef!K+XPQ51cNARzxaT<;4oUv0wk>Ya*HQ_&=C1b1}Hh5FPqVy^82fpLI zAA4wLNjd+qg)wrMR$mHh}lkfDDAPCX+ z^Y_3%vcGs!vash}T>@9X{vrJ5@MeAv6cyhV(=%;wdUhJKQQiL5^ioF6w$~y(FBzN2 zP!sdl=)a)PGaZTc?yRhUe&~twAJ!Wi#vURR{tEhbQaD?!KV9YI1C7c_>G6+vch!ja z1>VkBHmf-%ql8~y7~L9hZY-K_jt`x_Vo|A>n*@Q-LgH4~e-u5BEx(3DN)(bmOv zjenvI`0vVQo>J1lA^vhSE2EK|uNV{TdL12q{w|4XMl5zRuqC`f1a)bdNd^Chv?=oJ zw1e_vKBweHax^egr;wXZT)%O(41J>NXTli2rRPv`eV z+|#ow8#|ZEtH~J+A5z_0d*4vkyAr=Re}<}=ZPwA6X@qg)bccUPMT)^1=0R0FN0Wu}B?#Q&Wc&&8WAr_MhM|LdtaTpyUczzE3>XFe)k_1i@IP84%z(RE z0gZ7Q`Bv|W0)5u?nX9J2v&_INf)`XU^Y~|#)}eT`kC?6Jd4tTGH=zBw%oMh;sMFz1 z-T;_qnr7|A{pIZ^;%_1NcXjRjvAAwluVGi@fD$z_D)5G9+Y=uF?JrIaiV5_TSTJd8 z`yT$CMaBARtXeJ)^&r_|#}zUVtcy%w64{&FOKiKUy+g`pPr%W5(VozbXL#wTH1D@0r|lye)hVT6p|RR2;hdRsRNV#ZJI~ zh#MvF56-lL&mY1W`1eSNTl_O)_jbcb*tFTT;URG$H~{BG&BeG<<=aiMeqmA>lpWq+yhuW`?f9IRThy}=NfPbvqAt3~nM`?ey;C=G` zL%T+RhqyatM=bb*4E6CJuVQy9s1)}{?9FM?=iPY=g7MCqm)v8!w-O&6UZlv6+r4^@ zn-7o(`=^oKgJgx11-ZT5!xOzin^(elNSE6`@5@+qTmk=UdK1y1x^(yV7q>n9o0wWH zJ}3X=>)hD$i8(}7ap3$EC0*`{Ugc?Xp8r?xiT}impFzqh zCjR-=q@^14B-`P8j+_VnR5)OL2OM;PZ<(nRmci7bQJgw^{m7BZ;Ca%x_`IBFu zB799mLvGA?l1h&3$#!FiJlV%M&^7+$9_;dUt%H9qfj&k_1gtjtb$eyeyvbf++lu!@ z>=`G;E}avJ6j@c{A2^WrUFXUkVgx6!r|9T#eD*Eku!DvrPQ2zHWaGB${xurP>e%Rg z`T%DzzaKe{5A2RBW8~>wo-d2s9!Q=i6`Gt!QiX_ES&RC^&-&-)9^WTmsWC7ga7_^4 zZr7)I@U56wUA!SD?0nclB_sBmYE$KFdK0&1H|A&y;Q!|8L+AW=<59{?^hC>1f4?da zLFXlGj_gkD5nb_Xzf$qZ%6fV-1^O5V#9-Qap6*@n&pgkV?6+mS;mL`U_bf0+^Wgai`F+#F|K;_i!$0&(pTYZIuvSOh z4!B|Wt$&$=z5*S!^!T4f692s$c)4aoNK~M@Kg5>+rymi!-H^i;DXA59BByqTrp>Hw z<>IA81$LI@7-5zRd$Qdvqxss@;(sZzYdgGaU4Xs>UPOe-|B&=3yg!-sDa+X!kwN_9 zK9jRH*^x0_-6oud_%G<09gR6a4aYC8??CI~Nao<37JW7L?H0cnUth)k4gTZ0BG{rG z${f7A`ng`EFpCU?^H=_fO}uyOb$Mp*r`0h$$?6aB3FM)gN z%2;Ct?_gCFlb*tX3`i5}kEPeWP_v!Al z%*;VKh%t=GgoCNeHQEzg1R2YNt4g6$n#$?OBJl(vh7I9+mhwI5!i{t$%ZWwj zZYrnepCUBL`jHGRaa2%*#Q%fm+7P*T;p<2&!}kx_A~-luiTU6-UNabLWt$botm;T zC8Q~3mAajI>UN4&_pDZflrvZ>^gIzV4<&>IIm{+xtS98tr)JXkN7D!jO{5*%kmmIa z2xhDxpsl=o*0`=&%V)A&`5`Q~9drmk)nb|3iv8c)9^Y7by|mbt%w*IM;Pt<`hSlo{ z`Q^BD(g?$k(E6zM?t=#Ivli}ymfCtQ@}#A{$;IV_6s5N-|_{4WY-nXKBw;F$P3y(q&A( z6OpwR@aoH7%kpyQ_Es2*u{~=!=*G1Ua1?>>MTU0~koVlg6dydrq0vY2h>TBH3`76A z{w0BbCjkufeT}Qf>VKC5LAkVr6aI!csLomk18G2Hl*NAl)6j%WpkSMS0KbQl)V0vi z6vi57S2v%TYXjE$x~+mB)l>)t+5QvfdkFpu_7B7Qw`Nt-AakhK1z@w*fuQ$lcxxT> zzZL&0^4}u?G=%-{LHsYQ|05)TfpGsL==>Lv|2-1;m-YYm$n}33)}%D?FS zFGv7SAZlsrOwc9i=^Gdt8JmzzCr+9?<-dU7U!eb^CBV=r!9z|^2i{ATbL1~41fwK% z1kW}~!b4DN66EHTlmbDBO0-;7pwet6y&hpgXcD&y+SPWq<3TO=iO1n*_vMdH_}A}3 z8r+|JYFycYQax*GnDao4ToB!j3Vzz&(s-?H|Eqfo_O>FWzn|5YX{qX3kd7xK@_S9s zf(61g<<)If*IMf98=f96n8$O*V>u5oq8W21nA zyR_|;3?se#SFi4d(m6JM^r{%N*IEj$-R%b2!C|8jMK|7ln^5@7$+rB1V|GH_2`}G6 zaf!Bur@xQ3eM&5Ob*oirv~?~VX08cYd{{ptQ-wZk)P*(Hh4k_wgG0j?Wo-0+?(*2T z@USK0484 z$dK~x6MIDG7AM$z>-iNHFDyL8E%QDr+sf3VZ0(aZiUI4t7X($@*AREMsk;BO?yHj>cyHE+hBX2 zvpLJMU@U&!L33xK?^?0~$Kn&upv(_wI8i)NyliJCF)^vieg`ocH$Le>o?Bx;`9kw0 z5X>{$g?5;^EZ#OVJ@`C#cFj~(qICGoE*vqGH}}2U)jlh(gLi`5=W^S!m&g3gYTr#h zdm+AXv*T=6yPMkANjz2jmEn?B>8nq%pKnGJ5p6eNlAb>*ap&hlj|^MCIL6nkiJofK z3G2D{#^k-wEnm2~zA`_$r2(~Q)rG6hlu5jlWs=rUdY!m+>64g@j2FK&uW4-3zn?&; zO6Wa&_sM|Val;3!3>{_S{l={@(V)@jqOYsBl^gRqMeBssr+d(D+kiT=4F%5mRhqUz_&qc8v3E^;er|ad?*fHX|Cmbom2B!+JYqX z#$?CRXT;k5Y}9J#o<3yz?%;voU18bLaps0ruMBma+jlyncN$rT4#wkY(?ZreJ*Rld zV59rl@I9X--|Z*{H1ARTk=;F7jyu>piEb0Jt*#EM>i36Qw&Qp;cyDyY!<6n@$0ExQ zJVkev>~q;3zh}ilMZEaYeior3dRrN4@uC%Wo<}ZLE&dVoplhal6q`@QE=1AiJ3hcP zILA@XXC55V#T{JbC&_-ql5Cq-ySd7()aS4P?JA_FL;0lz&%82MWw4FCx^_M_FMf*c zT?pP3hN&d@avN6N%IJ4JfU=8iVO%r6&h(m%=F!_XPMN$@vGyS2(FU_!8u-^vafhbz zf?blAoqCq;acyQ3uAr$K7Ds&I{$Mr3GIg=5?f4WIC;A_CWIJYgQwRH|RBR@v&f4q3-S@wH$ z6}-|_GbpZYPyM;2A!j2rJN@-SUc9@4{@k=a;WQz8#3(#?H9jyeCv}0>#JA47P>}IY zz8iiTO7O`M_o8-z_munz1iux#FPp>=A*b92i`W^qHMn}8ggp;-%2DfYyXxr4Q_nDG ze~q8sX>XaAYKyy>YI*h;3-vq(Lgqz&>DMXENzktHI^>EDXs`<}ZJymP`GIw{FrOCA zx+!}V^v)M8o^00q8fU&kD=kE4XiCP?$tLM9owlEc6t|O}o_mLPGvA+t1NMfgE|?qq z@c}M(1>~f)-D%P;+vFQN$ETUBdr$a!dCtB-E(&)gd{>F;%6R5zVUpX8Z^esUF#%b9 z=e{^vPp?m&P!T`A#C2w^ox$=+?)wgFRhe5oOB$Qoy)Cw(INs6gjpKrh_yxLK`t7~Y zr2*Crp8i+&PB08#7h!bQEc!UT?$ziLrT52t-t%yD_G46_OZ=SLok6z87v%*nC{0d` zrtJNScIx!9aMoD1-!zPf-588IJtgJ*%%73H_>w5MeUtmx=JCcKy;~FM8`3SAL2}=w zFQ-v<^@^JbQ@h6Qr`TT`Og{aTx$4~0DNwQZ1a|D?G)1|Kr#b4zzAv>}Pt3e0iT#K# zUP4C?GSNEM?r3*uw`gukcw=&V?a6W!a^&I%H`M7m*)IS4jar6VJ}h5-*xzbX;vrm+ zO1os-Xv+!aObROMjqjS(0kQ{+b|=rI2{!izne{pD=-{V+qc|IteIiuBhs>h%98qHv zlJ7Y*9Y~zRZ9SAWvt2XD$v*$O!kM_+{`~yyL6n@hi~i^qZ}SI6_}NJ_?p@tu-g?3$ z#w{9WRG)b8i{r-@i>2>ox{0?1CPz+Nmv{aHw9fR@(YV?7CvG^by);Rsk&IiinB{n5 zVRUU&SB~cNxTqQMd!5~08#A1)%x752}C$N}u{XI;GHUzY)eU&6{v zb{)QPs_W3E<mY ziaj_n?XkV0Z@(mQmVJw!gv+@{>8w>#`3LIlG;QZI@NQn{pifxazAnF<~KL zQOk9R?Yv|fe&9`lmgGt+>GVwN@nuA8CiDadY^QTwM=lqSI0|gTU9^Yk`7&n zWBEVMAHK3ZVP`OQJ=gVK=RVty>F#Oq+dgNQ?rpt@JAyBBOUKpN24g=@N}uy2(bhg| zAF;}%r+3NT4@8^Yfl=deM@)9c?7iD#P0?>QTmao%;x<0H&ON?k$j|7=XhAYMVkX@3 zI1@_S%y~Tft@&q7Z*=>;7lOFY`xxuR36lybk*BhqpQR+-S#&)CHgXAaUQf7zwViR* zr`M0v+Qn1AuGgrPA4+O1wU-A5mw2OAI{q*-~r^uKknD?JfEv_E?C^)^}(J*Ml z_YJd)(sn`1!F1)6#aFF1p5O6&--XNe>-)FaXzt9*ozrxUVLG!N7zQyfa z%PcrFTnGtE*wGs7Xd*u!!NbW>Jcxk`5u#w!PL5Vl1#Jpfl@+Q-GlX|+MRfT$8fwKF z-6yt$Uj7)>pIX6=)cYj*Vn-m2Yspm#O*W@}oK?}2$KXzu1G9+w;+Do8Xsfl>rtWZ|Mgz-ZX#ZZ0Xd1t=ujqQpQ`SsXG27#`-gwlKsG>@{ zCzS^L>pkLP)4_tP6FgTu`lPTqguQx-g|77Rh?0D%Feos-Y&&6?G@Yik?$81aMhAcM zpvPX%_=aj6jdm_4Xc^ z&A%&(Hr=Qyx*=PJ=t;J|hVO+J+%Z`H-cWUZGu#*6bLGa>G218_;p%?)&bIQ#>KkJY z*T)y@NS1k_J(5UYFbwOit($|^SKh9VSZ>h$uxssgeQSq4ly=E=+OE>g&C1kbg){$p zQMdlQ6tk(P8QITXK12lFRqm*ouk474Nme*7N*&bC zEIQop(0%C8Nrgt!3xlTMZz+d+GFlrm>+d#w5)`N0tFOA(R$ZPM$8Qzg&BQ;eu0$-? zxbp8cPEK0ec75SFBSHB({`g%5E~h}O`ko@_scNkDuS;bntST;j+mp0F8#SIsj!-q^ z2ci3wtg~(xJvllhje*A=mo413AHAK?cr47Dd^x~M$9&p3+a5mcvg<=jK6yhRmymCU zKk2@H%e=62QxU6G*G*|=A1ln>cthTbBQLgEJ(3>ZZeG`74nGW^JLOdJiG>92sQecR zE!>V?v!dv-LPhPu(aftarfn^ir(Gu)3>wb5L5__koQI}{nxgNY3($@&*lzQ-X_I4g zAUzZ-4_v6>Pwlzf{7SL>%{#`&(ELsB`B8e)R<2si?1mHe_hXLj6c#LiEhM{JLp9dK ze>kf+)2~r zr_-sbgKjwr?Op`+qbZ!!bMmU-iph8+72}r3nv#dlPqYz8f-@+Ja!gd_ft2KKW^rk4 zm1tej*=h~0j&hzexI;dLwh*GS=ymU#=NPUuH_4 z1h9LXMxKzqlh;Jx+e`8i1&tY`_qJDxU$R#?@V)!04I7Iu6hoUcC)MQMepOyj^5KMU z1!>rJQ_9KeNIbz|WRG>xNdxbGi!ZD5pSec;IB{@_m^Cwg+Wx=|`<}3uXbV@G_-?Ry zd2Mk7!?rM?aGv>=r^2Jd+jw|x6?{IUDLwSg-rXW^*EW5aw!AdhOd3@#+zQ_c%cWL( zCtd%z`+(7sm8stbZ3^CRy3=Cda&CSP(?bm9Mb_q@9~I>(h2yNFTg;BTfBu}mv8g18U+D43qMKR2SLlhGk~Zs5D*xD#E#Z4J zzQ{-7y7B$nJ{AT(U8h7f<}pUE^AGOJ?>q6d)`M8FD{k$TeS1m^k{62_c4u!fljt2x z-CWQtA7Ctqh%u!sD*I7$IW51moXeQ_tbloJ_3E^eM*h(98+)59=l5<@Jz%mwkeKy9ZQ0X&B@ntOz^z^q{$Dach!v*iqI20tA?#2 zi4R}S6cHzEr==#kCuJo+f1BHrEy27gPF<_Dx#DA>gC;V#{uXXW^%=iC{FkwcEj?8+ zQE`!t7a6gK?83{>MczyZvl?VsS#`WLD7Lx#;#51aLd)Oc>(Z-{hd>~ElxOdPOE7UF`%E>uuzieyMMvpQDPb= zs=1ymRFO2~NeWX$w8?mbb z9eHKHGh%E@(Vg|);=N)j{}y+)l6q;Ikz8Z7p`HzKZW*?Rn|^v&IOZ_^#8ST(haJ7l zef*}WUVw-ru6X9vXKFs^X2x|y-Wg17yBvRw^sb6k&77|=-)GgVacy$>XnD28Ex`%K z&!w~C5ciZvX_$4Hx9|8-ozhm0m-e1J)kUklTM-c7<=c3i4D2NC!?ol$_O2e!baXTE3fMJuOhQ2#YfyC)|Ado zE5G2-M9q6!zi!&w!P|LTw%!sfanqWjG1PNAY+$t}zet>?!5rBgc#W_HK0EYvej#T{ zug=4%4N}dyRd=h(Pfoy(awaY;F&J}s6*EOrH0jRQVp}WCs%eCvX)h}MdL)z!gKN4T zRmL&y9%|sCsyq8pG}EPq553&nP*Lok+kVXdxqA*3ROub{^*yw%=fbm1CJFU|VP{llLyakaUC^X;%T0wzYc$Hj4@q|H z3}#4oK5DGV_1Pdf@Tz+Exkqnow(>Yu*J?@&sCjF)r%L3lhp8owhfrw+A~CQ+_g4c4>!EsQ#rL09 z4%4E=2{VV+kTiQ?qi06?$c!BP5*p zKxcsd1ENoHRML~_E-~)6486<`5Z~jTH0~JHHDSuruW5N0Z(V1iUw?#l+Q`p9P;a%J zbM@Q>q1M*S)cnGwGs1((M8Oq9^JAx~rr#E7M-TD30|>W1(gNn{bgr-Q*pJP(U2M9j zNN3WiV_NGMjA7j>JEmcd>4lHJk6fdit@=_DCz4O*>I5_twM9FIbcZo=HEb zx(N;1TRP&u99(6 zTSc@gm*Ec=ZbwJynQo&N+vdsVC?>9+TVT9s`9A#t*RxaCe6}SXLLG;7HhZ+T5OueaAkG zAiXN%=gD_Q>2>~s!J|`y=YM+|viHjwLy9T`=Iy`UIPcf&A34GNJd#WCcqk1g36Z%f z)=&N24@d3co~t=5BFWAOh0q&0+hB~UH@lvs%{Ds`ape14CGFK3pXO)L(^)5<@++JI zFYIJICGrMEp?Z-^JDTsM=GMKJY(DIqnX?^#W;k`H!XUMwJm4%-zw+6<^Y%4M2f$D? z+)udAGfe;Pl18XGY*IjK!X1Q9tBY^eU?yHKsvbMsRvWKa^xgOZ-Bi zO6382hd$i?@HDL0qXgZM<>^>b;45PuzRBN0IzkK_n0UOiaN(xDeiF84;tYr5mmLTA z6@{+j*~Q0M6H^PgXYyXVVQUOaTfX3I^NrsQku0*~8i#Ld=#^d_*~R3&?cs;4Ep^W@ z%?tEZWMtj_*!|u1W_jy>IWHtWI*E;0E`Dv$81;EdJ5 zAC@VcsoQOea-|c(=0TD&T>9x=%TEh#-KK+A@=nw`ha2>U?I>rI3Ps1wRB|Fsn@Pj7wwyE(U#A)fUv z-2x4<(>Bc{6zy)${c6@o!?9y0rW>NTNd-*Mn z5S^)Eu%s)dF)Q%Ik>>CT`^629);N4HEPRZ)epwi@VAyT5^RuZazfz4?e(510k8^jn zD0r&*?N>gsJ-9nVXL{WCrW|f>LVo(*dl*E0C)tyHH?U~^^NjD$unEVQJBBdaWZyd- zw1uIU+<2%NJiQ1l{rO#Mre(%FBDr3+a0?Y| z{TRP#qM3uLI?UBxsaS=2c5kxMFEP2yzxG72kbh8 z^U<@+FyiT11uhGwa0f1?MCeahWyG4~ufOw-Si^qO%-%qJz?r)gvMqrxYW3O9zq5yU zm$lt?7BTZTzaaqC@SQsW+H*k*U>%Eye49L|1G1)zQ)%E3oL<@nq5>JIlrL^ewA% z54yy@v;Eu#FH88=xQ9gc3|>FN7%F${5!H@0>~2Y$7ce<=JbK;NxEaC1v=3>0Wi6*8 zLJcNnOk84O<65GBoN513H}XI+XRUrn-azr5nso^2VYP@dM{t)gV{C$-@zn68b6h=? zU9YO;+7no>1*Fg3=frgfFZdf7-bmJoUgG9*r6^4FD4~A4;^fu7J^MJb*KdTkSO4bk zBZuwfcxjaXip#-?#`F&RBl1zEqrU-Y)Cac=Pjl-Y$o*h3<>;Op_-fLk-Hh zJ3Foz99VMf1ikB2v4&r%o$fc`NBRq>Z6xQFJ#Ojin9BBU*{^-u%?!wANw#v}eKA^x;6~o;nSWpNt0wL$6Wo zHtdc)y7*~I)X9ayg^`!sNjeK`KkwytH{aO0i|T|cEVB8*+C2TXkHzpey`oS2ov$=R zibKsmD`PG6DlzsI2U7Q3UR$k<=?UlQN_S@#G%tH}CRcdgB+qL5uX;hs06uT;&j^Y_ z+g7x>ad;%7c^TvQA>Np^#7nc_#-|-fKvwI`uP+(Dx2<_FV9Ecw6u0+YTYF93xeL3K z_B8BpOtsK3n-*Dtn6f60_#Xc{fL_bV$;{k*0{P6&%IW8v|AMC2JY;%&(<<7NSw1;5 zy7{B;i3lB}r_iAL9Y5A<&CAV6A`d^;V@cfOj@+ukqMZXN(@*J@v1<~Oe;02d5xKcS ze~%-JZWz!keR~2QDZ5}2u7;O9G=)1gGrgnft#~wL*3LX#+t}sz*J!uy+1;`|`s&A8 z!)I;Iq2r6^)NCm}a3o3MvGpbmKR4uM86%l3rkL)0EIaOY>gArIXU~U@6#Sfeo9saE zYYX@tPWW+-X?EPmO7Or3XBHqRG5`4TnIOyLN4upq=Jc^S($7_3QGS<2$iKBykxYY< zY)2m7dcHLq8)H5qVHleno#k=sYuH++)yE377amYNDB~HotbRMc>ahJ+UQ+7*jdNS* zH<-il#KT4CHk$q|0=X^n z>A=)h=2V8}sk}o!bR}kqpUXO^nuKc$GRsX~7iungGFs9rnU#3-ZN{2A@$UWFg+&H;(X}Je*yTOh*VoB!GPWOP(uq!^6_KeHCqJhU`f}oK z_PZ2}P~iR1D}%PR@Ce6r9uUioGyA>x7f$|K9gYN!;qEl_j})Y9^O$>E4pk3lUa`-p zHJOr})~uJ=Tld2owbvpqe4c6B>F~~$aK>2ts`nv`W3`Io?Jx4SE`04hdp9opckuls zew6CpZp}ZFj1L9*rO(NW+wViu;*T$dE*#D~H{>1od=KxdFxPD?cdYSNUWFi-8Ee%v zWZ{2)*mTA#a!nlo}FiBdp(3+>TC^3v7k4uX6OIw8Vm$ii-I`p8cPu11xOo~vbIrBmVKN#!k1~5?HvUz; z;Z*c2Q=4G2bIa|i?)^&~KUrokvusf(2Hv?`I`DJb&}s|VqLl+3!O&7q-*#Xd@aM!PC$@5gm#+P zv?JbrY2va)k>T2`xHOZ0mS2N7tRx5nyHHXD6v!0qWoU*tO-_ciQ0FrfQ8=p?q-mRzph+k%9@=CSZT=_-Yrt{FzT+ObgvGgNur#6F zo~mg{eok|2R2J|QQxhWt{c$~#?gSleqLv}ijz9qKc0d~;55EK3*7>h+cbhkVfwh&1 zv8ASl5e{o;G2H-z)<@}?LnJepHfy$vvy+!MGsGu)_vSr&x2*LI-4_$Ke=7!c6qiIy z&%mMyS?mFE=$Gscv;8OWVOnO7RnmZaU#ZJJ41Kp0enc%gaxNj*Vd({|=+oD?S8h88 zGTY;#4^50opv<>yi@d)6NgU>o;r^o<+WbkAODsMU^e1}YZysybeu(7i6zdzB8xxE) zO-NL-iy>waY{+X#yl^Sh)RXgjx;^2@*dE5i7(HC<6bPLZ6*M;#<&s2OR@YSf=w8E< zr_T=PKe*ZPu%qR9Or7x)%SX2D3p|nBx-}2vPeZP3i#XwzB0OTb)_J&%d(ZFTvd69R zXZi_#W7;TF1H(xey#Is}&C!;6`6DiY_wpQ(b-g9^en6S1V^ixB-m|)^kIbF>9`gNa zH!!wNpY^h>X(biTxN)~Hr0za@l7ltosgEUv3Pm2LJ2QN(UG{vk6aBij{>dlHj={=@ z)LQM=?gF8>nkJl`y@e-j=&*jDthwNNz1@Rt)VN2_o@^&s-w>5Fo~%oXWVTb06t^^_ z^_d0B{6+nbosFReZ)?5>An&Zoyh{3?Oui_7@L7J@Y`z8-y?F}m-EI7o4o?zxvpEh1 zFZU)*B~6A2)>9|}lvh8D-m|qo%YuU{_B;}_=ADXpOKrN;{(9E~fl;Bc{vnAbfy`>9{*1vsmFVmxEh={bl!evIbZX3UPxpC)}O&?!0!;)#- zM1O&D*vHl(+~~{|A+NfB2>lAl{1o%Wa$;lWlhbFc3d;`Oe;V}c>YmK24|Akm=2o_| z9h`zse<~Eqmb!Yb_T6B62Z=ekVgJwoZB-r(Cd!T)qNi%>pfSzC5-z%-R=8xCZAKV%lR%jJ; znrD--%&O-0p3>$|C0BeXej9CFrZ!l47FUG2t73&G!ZOcT-XDwHy3S(f5mTN~k#^a( z6|QG4_%p(_r=-FmU-?0HoGQ`O*I#aF{so|RXgUD-h5 zau0fM!noj^W`#^3nV}H^YVuLL0OIEQ2}jWrF_VwaO}!`9N8vR%7pLDX#lKs6RwERI zNv3F2=aX43Lg;bM%K7hSARaCy-Y-zZ{Eh1{k2ND%Mw`7!F~KJ5u$lze&_)y9Y{qn| z+h%2lfi*(y&3YGm?XNpvb;CFew>jx8c>ti0E4 z4l^*EHQ(8NODIZ%WWwCGd%vD>$X1AKG2z4oQhF|aDK`&ic&bvs(du9{xP%Wo(cmD8 zL;Cy#N$PS-&bnGJr)5`%+bN_+Ki7)gik?L5_dLy=cSR={ri;zIS6NlH{h(1~btho# zsgtYHtGKz3#Rh?8f){6Fc=yq@O#AJI;`SLtC$UK>M;1m;qtM}NRZ--D0DKe2VI7+q zQRNUqGwpYbZ1VHUHE|%(DrLK<8J7s3gtKxMnVQK{A2of*uM*ZZr59(sJoC)?>8y%N zyzh8#`lVdZcT3K$-QUi=U7ZsWaEbmheflUIvA}Od2Ew6bLsa+kcYUxL$eVW>xjA+clCqQd#X?sIGo*!-{)NmmjsbI;j$$K5K1b>9)V@e5HEb_4eKS z58XY#Klb*0>i>LV{g(}cUwwz%r+xcA{9{D*^VjIu?{TFnE_9|=Nqq~uxWXWy#X!^e z_up4eS3I6lKGl5MyP$NhSWQbSZ|as28(TZ7VYR26H;Z|xufpG9;iAcQT0AEQ9qVG< z%O0+G^|l>Zy=KtM+h=LN-?|H)L-NCB81u3aqPP|VI_N;kPGoJphE8NX5=TiB#)|_?}}Dv zXT~l^g9u*`n}*I$M+;Fbf$$*wT;N%vAmB9w4w22sFG^%Sgr?#6f>eP;W|PbnsV!2b zDpP+y(k?;ppbZE&uuTY1=O~*HbdRc;KTbrjYT9}^KUm|6_AWhfv_yphSmT$YS(o|0 z@HYXhBee69+4;%r{AG4)Wp*SP*VGP@(eOeD7W_^} zzJVNuZ-NMuG~io;UZ%G+bw%yx&)g?!uy5Qa-QT*0esq5*d(!=R@crBG zeS-s6>jnpU`aTX1{Yh~fhK2@*1~SaSkH4I)HC+@gqbk|qG9H;b9ezR;FXuu+6Oc%f;!cmke6!V;WFngh!T(P%;v zOB=vCz|)jsc)(=35MqyE!Kf(8Fh@vNCD7YN3JoE297NzcTanguw*GWBO$r~f68()N zS@I75WhGsBo{g0Xf3tB?(NP)r@#b--12l3pLbBT|BWVipY^4&x@?8JG3kTQ`0(cNN zit?mXng!Ok1%SH{AtW{hAV6p+RJKZ$ zrBngXzY!sdUHe94GM%kbB3nUSQNEOlN6?DRY%Q4xS0{Hsri(P|*RKd8K5E?C1d-^0D%Xw#0dwn4-aAyP0!VTB5Ysv^g*Girg=y3{f(gs;h8|K(Uk1LVI>H z8Wc26m@b}El4{6BgR>)y*oM=yjHYKBPX{GQdegdbVM0z-nLEm1_U_A!J|Nnk6d)l!9m9zz&t0}3L6+opdcH~m}koGJ`DHvbzWuUTm6i$f6KiHluT24?9MUYH>4#BWVG9U$T zdWTw}!tN7FD+xkthcA@`&!|d5Np%iEEfjEa2u+JSwR$%pU!?g*6G}?B+^4_3eeeFl zRSXS&9D4f&NDGMT?a;?=F1G|+-2WiN_OgG#s|){J5GDy|2?~t@;>4mr``|+T^ZWX; zryWn9H9QO$4Nz@h1gO9da)SD$qGK}fV}j|tw%QjtC@i~b6=q$CVu~=SOG9BKbn5zq z=#@k=vOLZmAb!8$Nm+Q81i%dZf!3PO;<)es`|Q^&f6FixA11aOh&0n^0E*cf1n z+TipSaJGtk0GTiW(k4EHv=Q7x2#;VK#3(WwtDfkKHTc>D8cUn6<ADg*eKYLWc&;z6l~sYa=!=ImKgA^4WSN_dy02j8LWjI$En`x6rf0&TLC ztHi$S16EwkauQIuc@(a)oJ7UQF%HO5xPn5)d-C-V9hSZWUi8fxz=^(FvkzLqI0}U` zxmk_-QLGjCmBw22O6ExOXG{-%Yu1@uADP0XdTN++4TiTnR6>If5){4{1g#b7xpi>i9(WFEK9p2PT8U%TH3PTZ1 z3SgUQ`soV1N7A3Drn+`B=@(yHfd!tB$*8o%=>zCqkWFNAg1Nv-I)<&0iRtO2VZL5p zEt@_4kEa9`?h{ZfZDa`-S58uUXSEc7d!EGADkqgRBL={r{`hAi0Ob)MEIaJC6a_y z6P7(oN)#Qi$|p%Vn0#0&I%t)zr;eIQnLzA(Js@OI%-%*JM_||=D4?9(O<{*q02U%^ zIZ$X9mMhC09L7Upxxo;`9Rrl26$JJZ3jCe|J*Los8+$?t|C&7^7C|{#PGU#L{PqR4r=30NFVpI3T?5WF`jMWd&(W zoiJH@BGC}5k0#?8pm8XL^hc-asp559RXOP|&47t+N;+KmpJ)Ni+L!cZAFvW)%DO3C z4Tz?iAhZzo@PL)r=-*fX1ky-lPbj^aNRL{TexC-9}%J}@g$%NC~(I!D+8`bGE~^a#U+3T#Ga2o_e;2>4j>9aQGNEl3Mlk{YXajR>7|*HTG^8oE@Gl#Nrwu3-LPaJDZ9$Hq`j91~ zMiXSX$XJ0_r|XS5zW_LZ0g!nPVI&rbgYMB|@(mh{I9iAuU%$bSgF!5qMJ9RVFawqW z2#r`q>gws``Z#tH-DZxcnc?BZJI(NB*)*j%^@?%VE~weYO0^aK{rffkyA{WbSg#=?&(<~iLgzl zVLd&OUsMc}KrvlHr06WsvN2tzzJv7t=Z?40TSl~*qHUutx0wR||Cayr{!g#@pYQmC zMQfzN2P+CnwSAJT$=^g5DOQN(wOob&-wTh8KT9cxZ~cX!ME%1qmb& zL{&lkgh1%H7&sIo$keXhuGyN|&jSVK5>rX-;+Id8aPzOR^^g{6jd|nCl4k0f+;uxq9c44g^e65p5lRFxhU{OD-Z*|J53i5 z@dYD9vj;E^RSd&Ap*4aQ+Jf`bgb*1|=V?h&RJlt49?=n%9g_(_MMqTtHk`r)BQa37 zB{?qTjyX>0$S@dmg)jc#V$1=%EB}X!&Ua(4lZLb0!s%2JLKZ=YN4o+Igus@v{iQ-F zUFby@V(G$By3m;pX1by_6Xp37%9`GjiKGeXng|}zW)FJgZ?AEl;u=sFE5503pI9ofdngjf0NBIP__Xe@AF` zFBYRCGzHaFZ4?`Jj+DQYeNxJIWS@|RgC+_ba7<|0;tdDSR6ZRtoa0S4nLKHtDH#y( zjs}*y?7TK=3s~{0?N|swba3%7I%*Sr2aEFBKuLJG8WTVnE)NAmL1@xX&_?(~KuGvR z^`Jo1;YdMZCddqT7-K@79;-Z^16I2E_ykz3@>uEim*xLWm~~N_{awl)mbR05%J5v5 z_~2Is7w+^T-?Me4TvWM}dY~omcA`!zDR+8xU>rHnRPICv|19TlmJ=6}oEcY4ee8sU zN)C(@NfX89p7JmSk&1!8zh=a~#zH{1U=1mVdPbmFE^x(buu25DV52TzOu5ohU8xL} zhd;RboHV>dR3N2`&P&z9WZ4C2=|zzGE@g0~LJCZf3Q@q=uyFfpaU&OpKUnUR?*gSG zKa1T`*Yx)CT@|Qac-?O?9)9^+jG>U3>MH!@R0V4}pua>ylCmEwC3;f!6XlM_N|uYK z*p7#hBuEisuyk}%Oe{!{rk6Vv#7i?h({r52%--HEE#!^R612G%U{VW0F)YW4zY@X5 zI{+?7lrn*Jrc1Lkq*5dfXj#Oz0*ue)MR)|ze#XqLrzA~)0BDp!P zmR!|1kQ{i7aaqa1!9HDLlL^J@*y*=o9d!&mEtJAvUxPbA%2W%B^+!cK)HBiSGG#W@ zR!&!}mpg-b{0Zg22_-mJl8_|7ieTAg$|j+z0BU2GD6>nI4^Ak>^UA@by0=MguW*uw zaM09XP&!beL~!arTRv0qLQdmo%NKE;$elS@`9@B&gU|`ApX^GMBrHJF+zTow`m;|c zOGG6~IZ51=EmoG5DnV|USc&A2MP&e)=!{fxj|o`e5KEypgaLn6k(u!7Zh+AVaTNI~ zsfY)H%qa!17yv79_;NximvK&&z~5A&)k-$l{0URCPbo!PmF!$)HPi;sH}xVv$V}l% z2PPNFdI*?wVy#vOYlKeh2TFM1Z*eyl0?0}f;7#ucbk1spagzjU%UMlTAXuS2@}n0S zY!ce%tS0}Fp<<()Aoi#CL294FPE`uRJD_&Nxmv3o{ytWQC>7SJD|>rWJ*rXdV7E!s zqGWlp=s?vwI#BHjQYJY9CVdqWfffn1Kp=rSfKXUUKp>P4wF{R!FyW%FfY1lZzqC>n z0EZ*vUlN4IjiOV2&t(|s07U9tOkxkpcMK8t%N#2|CW|2K_q8&Z_^{t_UEj5_gEyfC0I56ez$S9Z&JIS%2KXniifPe?SiM2$>l?qKp?0a<|i54q$mVm7` zp@#!Fev{5$L5D*=feHDFaF%dbX(M!sbhpgRko zSG~xHy7VT%Q?^8@W_YPm*a?n3#gdy9geXTPXQanN{0*FyYEVv(?HbRaH|2Sdk#Fis z*^CG8cu-~m^bbT}G3S&Ys?5}LDoK}VB14&o7I04-X~7O9n2f0T5Q5pU5CLjD1=tGE zPF(>xs#IA5)F&W=`!M#tH^m0%#;rWCDF zvSXDZFC{xpsaEqY#XR0riLbH%+XR2Dx8(=-kKv?1h>@a24Rwc_lWrdn6$^c!hIUY(l=7V?=V^RNKag?o9{*j2glJoPg zM3^FuRPhfEW7Hgq_9%5OD*^dx(*nBett|6Vi&WeS2Yx7ZSEg6{Ds$-RU~08S+2D?7 z0`ePHC`jr?D?nD6*B@X3_{fB=%(v_W8#*F4CENT@_xXyjom7Q~LJ=aOcCyzhMK+ym zccsX>vy9TIZelKILQRhj55u(pG6(GdiqxnlaxKg0O%3iWcSNI{4jQa1r?XbT`Td+y zrqBmy5Y(xI>O{V)8|adEA^m?fP#X{oPRI3C<^ejGaCeV*39{s`D1b6d`%{!IGeLe- ze;o%<=`vkpScrg56`?zIFr5g2i_VHvre|$as{NX`129u(yNhRNN~A%A4EIku!nLBa{9uUytpr6k$5qK5A`P zs|1K)i;oTpjL?-SbZ5d-J}Sb%OqC9{6cD5roTy6&C+f1-0Df32*g(qp{o-jN%TCam z$f}dgR*DQed60t*2h~eNM!Rqdtk4tqm4F^bVKKH00AGxN6PJGq-5i)8`KksC`5;Lf{DZ%sMydA6u)6v`eQ&c6%>#$9_KR!b zBfa7pfL?r4T~#t$N>zXg&7@(F0?ct$>e1vOXb1;LCae7~f^7oPKV!@LJklf~R060X z;s0cOr)h&SFg^O??a4wvCJzFVQ+IwBM-yxbs|Ru5#j*dZy|a&wsyg@od6~SDkYNBF zAnLhR+62+2t^GAc1w_C}7y`8x2!f8+rZ*7_5$UP|_nKM;r!gm;+@Gx(H8@Tg%*0GM zQ9*|~Bp`5SQUV7i!5IVvU($q-aKgI;PVRTlB$VFUb^rYR)?Mq#f|+yn*=N6e_TJBV z_OqWo=NKb$F(JPP%(juT;Thm8bl(9~<1Yp6%=3AEdnW*Z(k)jl0a0d9QkmT@ulCsKQl?9@G6^*X(J zz1~)hp);*lDPl1u#_V&0lVXVmyH9fV9B}G+XviK} z{&jlYxL9ypEWgje((n77?i5fe3sW5e+%Zj*f;|E5c>Fu0_D%i0ZZzSh%=NmKj&kJp zIoZ&)r8`sm*D;y9UQgrH0an_N#>RrCn94h9ndWY*cIp;Z!m+V-r(Wt@*^rAVN*cSl zvdF1FHS%BnqmIM7YtgfM6^p-4M{MmTR=<1wP8|ubqQ9m~^Lmvjjfh*zD&$O^z++nB1c6w&}GehYd=Eym1Ibt1NX^w;YBuj1@eHG`eK zs!M&RoX2fdf7Jc2>hgNMHvR7P`pEx=e19#vG-4|v5}2Zh-RhM>=QXrKQ!P3a^3_BX zVkC2n=)kyG5APZmQ&M-1kF{00#>dQH*SH=785hUK7?@agOq;edJJwz4%8sF)>sP(OhbNMyB(WU1lv3ieULD{i%`Bhdiw3ONJ(v24+xmVF3n_aq%#g503>vZ$; z6Jzr0dSFrvBJK?cTl*|@R|^4*U1N;pPaQ{Q6q&IsTN)hPfD{VeO{RID$?Q=Ii z#BT8&OMT8h2Ud~U(9GMay-d}yKX`qPgYLOecMCyNv}R^^s5MEwfRfEeA2J}kyE`9R zz#C|#sxy zk~=f3zvy#s999?+C|Bx%)M)NZElIk!UnygWjT=tP9Z$@8D^i-+R0%2nYouS8>DJZd zfsCkqZXh#iozlnduE550dWLuc(OUY3mla}_iX<_NhJ|zn&d*`}FN4*cZ zvZBtZHe6!imssTbW=mJWA&Z*UpeFAt@QLbV{HQygQ2Pp`U42Rii-N458i_WuLA~F{ z?<+u(6H=qD)M#O$Wa@MNSmOF1TksR`7G|9+h=1)XfNZF*DP$q@;$Qpb*;wlP3NX5x z`;;6M1PO&g9wA_g*1f0)H|Z`@6i*Ay>@Bogk#R0xGS5EW#@L{;myw|@oQa88A!bMD zh=q8-p#|FCWa#?bx^uLfliYn+S+0gYo9BTo5@#kn#?(WTE{b zPoZ?EPf2wd8JaOso5zwkA4X+k{YFabS1!g0qDxKn@fKf3CYwNbEcRIe4sC%cf|?fQ zFwM-s+yFBO`$MVEZR6~-xAFEltl;rEg=c7_%XOpw-O%kYM64(JJcT|ZOBU+>nLg#8 zd@brYT<}%T;7!y#i~M*|7BfmIstVbp$(p7jI53N zEn{$d3A-I{B(TqA`Bbwr$vddrAvK@$ztZBG6h)_orSDGPkZW8N%gdZ=6H^hSfnH~} zg^?H))siLQDh}gCD}_WuH~0!NQNJ~Y=SNya-Iy4Q$VJ^r%ys}_P_08(lV8&7n@}+k z?TU+PW~G`_g;a)cLA|v$Eg6fW2tPhwSB+x3BYW$= zYi#b>Cv6?TfEKNf44`t#XOd5oB3k)LWx(&z3$7+!i%!>G|?zJ&+!i|D-o=(%JB9dP}!es;Q`w_Am+f#?pd(_;|$$*KV|>8wpMoejRAyT(U@FETlWm?sn2u^gJQn^JYpX&p{!$p1FR{^x8h8lDmNX;5H7$Nj3A@dm8ma_{T=-I<<&H86sb5V`8QoA*zUKnX; z)=^RN`Rc}ab07b3;bhj_#=mdw!)O0NBeND}Wm*XFZT4@{N7`CC`%R8b`nPk+gKRvB zr~;0E#H#RpR`7Zh6-AC0ot2ywItzs!9hH9AuVh)d_%P%lQoiiN?dXkioaiL9hXoCVBLGcKE> zfeFzv&NTs@hmqFQO9_c?e-L&KSUcjYvsjx=eU1%5NWC0$gU08>^Z^4%W!(Iv-Xm{? z$de(11Cyfdue3PFLt0_d?LV(rrAN-kZK8tm00b>WmGcw-R$cqPP1<%|xtmo8Rx07D z@-0k}K!A%Tvd3Hma`UrWV`?fSXYLD-oMxMHH%m&r^KaQ9nH;cW8WAZ(jhla{oeDisFV1S1$|%(oer;l`==F16!QQ!bjtK@XfSDLzB*W4 z)YE~aC^N>((5;w}CKJllBXM)cM0R_2H1`Epb`(YqD4J>#Q#7IVyLk($pKLBgoouDU zYJ<&Jgz7Shtz3ww_}=it;je5Aeu32D8c2NfV$@!A8$1va5C}NASC2m06Qn--~u3?pi-FI_Bcp%Wj1>^cn2=!FYOH+C< z6yy(?<|uyvMMn;>2SK5{U0?Zu?*CBF4Cv}D{ttBgvKOxV1SRvpcHId7aKu0WqB9N| zQMp-%Iw-%(I@tTVyiJ!3S5htci42?BH~{Nw@9XHvq3%jN_)huXi$DDl1D&5KgB!lV z@rW9>NiV2KXkqN(=1gfQ&8f_X^Z%C@P|xe9Scyw0%;RrRn3-@zXx(j5$lbbhHez4~ zo)w;%uNM0>G#`o>muBd>s6Re2VS{kP>Ps z;2skguVb?)%xqZxYZVoZ<)KXW|DmNox(m7tGpxHacaFzY17%<~AyFB~HEVd><9P_< zpe9=FUs-?k6)c?2`(dFrOC6V$v9Mf+V2Ds(V1>dw+`v>SHi7&kO_TOsR?6U}f(Z%C z;VGCdKB;}4`-Ek{03`IiT&-b3+}?RY#rkK7-t>#Op|2)UptKXLk{dwA z!@+!+DDFjTO)s;BhU^$s_5$nj6K-y5lb$CwzS`p9;@oGWSbpe>(-Q59rxdKj7WFPx z%nGQ)MNCgmSd1qyD}Qs`%KvVBNNXr}va*7KmfzDoNqCCChpEmLtO^J8{s`;G2O_#M zx(U&nb?NgSMZ_>?t}c)0?aVxSpg=!h(b0QhByA|gq%X{~X{rBx{rPb*Oj`Zh^ykON zFlU9fnH{q^x5E%;VRPtNC<(F%muB7h%?OOem|HGo;^nSJ?PWD7>g{m5iAvDcS?l_ue6lkHBUV^ z5-?#&i)%>>Le8>==A!AYQPBqPyt-AGPxuz)+Zuu^TjYa!a8-+}>Ncz<)oT)3YgJ3# z$`&jvjU-brgp`rcX;oLxm~E8_(~+eTlQ47|?}D)4Y;J1Tp%3=(3g2cfDXJ`4&~Tzf zdHs5^YQ9>ap2H(f!15GR=T&^-RFvKxR3x0)7qE4!BFT7_ZM}j5hl%$$m~SkA>I!3U z+(jDxV>6(yO!pnK-w!{o`#hopt`yVZ0ECyJ&0wzHaTm&JxC5LO0~N8F=^>ayjq*9M zz$>2@t#Hys+TL06lxu2+`}Bs{?jsxKAi=p|Q58IVb@??fTO`IR@tGs?GuMJYxhCga z3)-&9xz{{~Z4cHxa}B$}BrLL)UsG;xLL#>`^&M&KKjJ@q1a28@;cgT=oLvAZ4R;V5 zV*U?*!|ufqM49;j_Tv5K#S-kQ`*_dZeg6>(xBX>*`+@#i<3@95px`^JSc z7uQ@Zx$1t)^QR3-$tezO2%LIX(E{w2`zgFE1hyLxFZMzyvf^)mO64kMO2$-!z-MHd zC*VC0w;FGgD*o>)YYg>5g58JKPB`R{v(DS^6Jp`M>1S8&^5Mxzz%1b+q)X zx}XTl`CT80>W{a~^^KN(AiBlCVbNt6jfEVaE*}zW-J@N*MTdH&YPaZ42^nyQB`dUa;iYmhg6+@a)O_qP#%Kjl{t7vIz z5t*xghTIA_BDqCG-1-|mh2Xf~B9`K6j*lFkVJchI`rHzqm#}_wWPr<6T?iUPy?BQlp6N3f42Y!8be31a4Vo=EB9n z8np9Bu)6isDM>w|eA}Ire)pmXYL)I3(&A307AapXRnofVlnFT6H^;vuVuL?9wDzi} zBJ$!0oJ`8?)1}vsNJl$Tecf_7LfVTXa&aUz9WQOf%2=?nHAhR&ai>Ujqz}fHxGNnUmnT3i2Jo=xVEAYDudSPo>^5E*)mu;0-21P~e4~5Zo;yFZ_iQg?2#{4)CIIP!t6`2lyib$A7|ed`#r{ zqnyBhDqzn(b`cyG1^zRR=Rb$+|C;CdE|KT|%87iBAo8bpk?$2n{xrvleF7);^PGtO zEuQ5B@th!t=XpWAAPV9|ju$Tpy!Z_sA6Gl}9jlRQql2t5qu^A$a|)h-iz@J&l9mPW8;G#8HEK z)-5Iu|ET`;IdsIQBk|KI=#lY*yH-S8zl_X(I^r;XS+9;y#QjXoxSjwe-ubpl{A|h6 z4*A&*`F9<1U5ET`hj;eoIr7$yDy1X8=MjZ>$gg%()#7+DJ1+02dZxoIIkX?e(<|sy z&tFgP?C_Bv%jWPAvrlU}jWP$hL#{=K=S&N!{q6>~`sw0~@e9kjLpv88Ud|nc(ZG^> z)!lGoD1R8ya3LOsi;XPyBZrp@EIb~Fi@8@3s%Bsa$KiZtX7(HR&uV7dFn%#?ZCj?p zJ+G=&(mE`q$E#W~vB_}&tRR=44l zrPNX?{k7AfUiNiLU7fxL_Tk4zt$UG*)woFU(BX!lczDb7I*5^~R)^Z_o#y6>Ib-fs z7Vfbn!UL=}J>Gk@hrKhj2MWFSCW5{9oeC-DVs6ZTjXfrWz&$hmd$9Ac!YP^ld$~jc ztbAMUzab+xXDK~(DzN8})YBPiHDEmq!VLwpnJuNb1+}uV2FCs{IBd&#N2^)_SM2w1o>TR+&Z=K@hN^zs zS@lY1Rc&Y0JDppmS1<3Zez~*S(^A|2lCEXLPoq5IFOKAvH^7Q|tV2s5d1m0( z7xDCgS)rme_+o2tLu+s&>Ng7}BcpfjmWQerMYOaw)ets2v7%tM{o`>S#V&&-i4FgW z4L)pZV|?4c=X2k|y61NW%T0e+>*HSQR?qH+iMhKvx3zy&i)V3g$OMzyuECGEu~Tbu zFk$a^RTyvpC!M?&rcQTq%@r|>uvll~oU%O$6^ops~iiPdtgKVK~ZNtXL zJhyLN+dg0kZ!-)HQ7DR_f}2L zwkPT;pxb=)n40cgYG3Ak)V|y|!~QtjMV97GQd8Wln4qmsPUVz7)3oN4rmqbH21OSIW2+ zmesY`Qnv4!NqMxsd71Vv8`gTHjqAd;+$`m;nq^&U9H^Qj&(yTT==-=XNpuh4eBT;} zaXOTiWv*n2sWMBhVrN=?$zuEBhUR5;6#~2&E~Wdn;&l@+;=W?4)s6$q=Ecp=I<%Aq ziE+zg;XkN9>UJBEbM}dJ=g+!|-7}k)>?^L<3cX7<7nfzBOWT)hD7OCA zSa5kt!<^Z2V*E_U-a%hS}RW}!Vm#FEjn5$TNYU#H|9QW$8y8wWgC}u<5%sC^?=TA(96}6@GG@1D%7OZG)3kOOxeqEH!EUVMaaIY%3uJ*y(>9v^K@^m zVtYO7&1IwI3bAaByu%pUu-IYqF2?pj#0stEl!v{)wm-k&UwwCaGN<~!gYJwMXJ^{i z<7(S;TuA%D+<())Ti?7k_xCkx)3wilXRSNMp(Vvuj#V$$vaH?Qn6)))y=%*i_O;Gn z*E%&&kDK=onrwLFRtWx^a(9P2A~CmncWiIc9lK-cQd`sR!v_!kC6e_mwQ1kp!-vCr zP2W1ax1;m$fgO>(`}cm_adYP0$j3W&@A~*JH=8?l?QZNdm0{0t%Z4Dg78LlK>HM}?E4)5O8;m6Ob{Qv)hhHM^O#;GUbMS18a zUq}`YCrC5Kz>PeO(=x$o-%m}>B3>UIJE5gg~v>CiOK)CN&W@9(Dua01)S_JyMD54jG88W-{ds-=2Vyp$QidGOmb*jVV}ew(>ly0f(O zJYM3cq^$X)&7+X+lO<12ljc18>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I NhyW2F0{=@1{3m)|@vZ;> literal 0 HcmV?d00001 diff --git a/res/history.md b/res/history.md index 40e91e1..1e880dc 100644 --- a/res/history.md +++ b/res/history.md @@ -27,6 +27,7 @@ - Mu Torere - Nimwit - Nine Men's Morris +- Odin - Pay Day - Place Ball - Press Your Luck diff --git a/res/notes/wishlist.txt b/res/notes/wishlist.txt index 3a414f2..35c6864 100644 --- a/res/notes/wishlist.txt +++ b/res/notes/wishlist.txt @@ -42,7 +42,6 @@ John Madden Football Ken Uston's Professional Blackjack (latest version is 1.23?) [4am crack] Maxi Golf Micro League Baseball (1984 version, not 1980) -Odin (Odesta) [needs-crack][48K] Olympic Decathlon [priority] Pro Football (Systems Design Lab) Pro Golf (Home-Computer Software) diff --git a/res/ports/odin/Makefile b/res/ports/odin/Makefile new file mode 100644 index 0000000..d1a8622 --- /dev/null +++ b/res/ports/odin/Makefile @@ -0,0 +1,55 @@ +# https://sourceforge.net/projects/acme-crossass/ +ACME=acme + +# https://github.com/mach-kernel/cadius +CADIUS=cadius + +EXOMIZER=exomizer mem -lnone -P23 -f -q + +BUILDDIR=build +DISKVOLUME=ODIN +LOADER=$(BUILDDIR)/LOADER.SYSTEM\#FF2000 +EXE=$(BUILDDIR)/ODIN\#068000 +COMPRESSED1=src/OBJ1.X +COMPRESSED2=src/OBJ2.X +SOURCES=$(wildcard src/*.a) $(COMPRESSED1) $(COMPRESSED2) +RES=$(wildcard res/*) $(wildcard ../common/res/*) +BUILDDISK=$(BUILDDIR)/$(DISKVOLUME).po + +.PHONY: clean mount all + +$(BUILDDISK): $(EXE) $(LOADER) $(RES) + +$(LOADER): $(SOURCES) | $(BUILDDIR) + $(ACME) src/loader.a + $(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$(LOADER)" -C + @touch "$@" + +$(EXE): $(SOURCES) $(COMPRESSED1) $(COMPRESSED2) | $(BUILDDIR) + $(ACME) src/odin.a + $(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$(EXE)" -C + @touch "$@" + +$(RES): $(BUILDDIR) + $(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$@" -C + @touch "$@" + +$(COMPRESSED1): + $(EXOMIZER) src/OBJ1@0x0800 -o "$@" + +$(COMPRESSED2): + $(EXOMIZER) src/OBJ2@0x4000 -o "$@" + +mount: $(BUILDDISK) + @open "$(BUILDDISK)" + +clean: + rm -rf "$(BUILDDIR)" + +$(BUILDDIR): + mkdir -p "$@" + $(CADIUS) CREATEVOLUME "$(BUILDDISK)" "$(DISKVOLUME)" 140KB -C + +all: clean mount + +.NOTPARALLEL: diff --git a/res/ports/odin/notes.txt b/res/ports/odin/notes.txt new file mode 100644 index 0000000..791f4e1 --- /dev/null +++ b/res/ports/odin/notes.txt @@ -0,0 +1,43 @@ +bootloader sets up $200..$2FF (important) +also $4E=A5 (important) + +$26=8C +$3E=00 +$3F=8C +$41=00 +$C0=00 +$C1=13 +$C2=FE +$C3=DF +$C4=00 +$C5=00 +$C6=FF +$C7=FF +$C8=51 +$C9=8B +(none seem important) + +bootloader on text page 1 pushes $7F/$41 then exits via $FC58 +then execution continues at $7F42 +uses $4E as part of decryption key +decrypts downward until self-modifies branch target +then execution continues at $7F6E +which copies/decrypts onto zero page + stack +RTS pops address just decrypted onto bottom of stack +then execution continues at $00AB +clears memory $8ABC..$BFFF and $0C00..$1FFF +uses $200..$25F as decryption key +decrypts more then self-modifies to jump to $7E54 + +entry point at $7E54 clears part of zero page where +previous phase lived, then continues to game + +once execution hits $7E54, all of zero page (including $4E) +has been clobbered and $200..$2FF is never used again +all registers are irrelevant +stack is irrelevant +regions that were clobbered earlier are irrelevant + +can break at $7E54, capture $800..$BFF and $4000..$8ABB, +then later jump to $7E54 to start game +($4000..$5FFF and $800..$BFF still showing title screen at this point) diff --git a/res/ports/odin/src/OBJ1 b/res/ports/odin/src/OBJ1 new file mode 100644 index 0000000000000000000000000000000000000000..92d6f538ccc5ba272c807e81d59ed8b95ead0e7c GIT binary patch literal 1024 zcmeIuJqp4=5XJFyw%*B$croFDje?ORg~ZNDcJiT1cA1RGp2SiEg0;<(#&?0=pO+-F zEL~kTuf=uwT+hP)(O3`Q$3^w4081hPq_=(m4F;Z-1&wg{1jh5VW03V7r4=h-bd5ep r7_GRwKftOvP6^Tc+W8=T+bMSS9{IT};0%vb$<`V2MV95KGXMH-wFh?E literal 0 HcmV?d00001 diff --git a/res/ports/odin/src/OBJ1.X b/res/ports/odin/src/OBJ1.X new file mode 100644 index 0000000000000000000000000000000000000000..69901bac13ad4f8156bcb3b555add0a425db5a15 GIT binary patch literal 157 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 Z@yPFI+GkOj6!nKcQh%cU`%%J@`hU6?9Bcpp literal 0 HcmV?d00001 diff --git a/res/ports/odin/src/OBJ2.X b/res/ports/odin/src/OBJ2.X new file mode 100644 index 0000000000000000000000000000000000000000..f25d1f015b1fbf3f46ff8c47f8c8937a873b6780 GIT binary patch literal 10294 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

ZOMgRgp8pv#YFFk)hI%;SPg?fh<1BeDv6Y;JC zvH*~UfB*v^LMVi&C;%A(P!u81KpcSp3jv&pe*pyv4G|R?h8-ya{ssyT5*8XB7^edV z3-}Kc7aJd9fB+i-P@)1C`T`=(T?7-5K?LHUf}sQjLI#Bg0C7tHAAnUrGb;ZiARQSO z6%!Ku5fBd!4Gank6bdW}2?ziH09yb_Rd;7rS4T!gH8wXVCKnbZ2L=@d1QaAA69WPg z0TChq5FsEiF)~6yKu}R&VN!5$Vsdk1Q&ePhb!B#D0|A2tfC`9-1Of?+jqb2y?T*@$^d+h10Xl-4eqT5}o&>Gx@!_kxL0n+idT@Ihb$%!|CD&@S zSkig}dlYtq1`MSe9I7Pj2@)Df2)B#M49(D$4W<$lA{Gf12Nw`27(x^SIv^CH&wrkw zWEo13{39<3g8Onz&2LuClwaqEP4Bkelsj#^)sWOgZqQAx2 zC*y$!H?+ho%x5Wj&eYOt5GS^+s>YMUfNEgaDbR#PhtSp3B!wc{#P)8+WE0`M^jXm2 zCazGb>(U&bu*~eqry({51Oj3m1>(C19ob3{1Y#luAOHmbfF2MWAPFZOC|M}o_7&re z4D7&PU9)n|sMVO1b>S(MsiL{-@&et^ zit2UkB^t)u(w3Jdqpo<%(_PfBa*D6bk-tzPCMz;HKwp;Xqp-j|L`qInS}VTLb(30l z^6oHAm@ps;z=IS59t;fv1Ikyr{|E^R3k(h54i69yK5Rf}ZEG<)@rvAOmtY%`5Rb?%#+^NLUwbfp!fqd&yTvjS9zGb?#CC8zEyvnAio6t;VW}n5z zWhGqys)R+TTDqcY^}NS6%==_%Fw~f%wcll9OR7U6xwa>ZGBC75M@6P$RGn6#P_Ap# zN~~6-ud8gVV@s(pd~ zrn6*5|9PpBWr~+2%lm3(RwQnM8KM=W46bKKM4FYlCS`h}bd==OgKDLy%d}`MUPWX_ zcY3(l@5!tn7FO-i+^)T>$$prCkBUIRh}Krvws5FrB42>~2~ELjR-#14Z3 z8Uq}UG=|5p5&;MXke?&MtO(*gng(PD;yr*F0s-98F+!;T(UD6w<1NrhLaI^P0ScL0 zRs+!oYK0YIQ4n=s7ghuZ2_O_I2Owf0U_irXCM*LW24pWG=sQq$!*?dO7G(uufZ<>O z0sv+Y79AujGC2SiD?d_Xb%m6oue-+3+2QE!^Y{Av5by#20sj#200(e)BP234LPb+l z0tFx^P*-wwA|+B)0|YQPKu2?Q5)~mPQC4DQ6BIEvK}KU_0R|8kU}tf55f)))02m|= zlAaKVl?Xkcm<1G+wWyE_*-XVkX!SraAYCXph&Fz`hC?NgR>4p}Kd<%JC=ky0Q?Ny( z(rI=|mY_AO4PPKgupv=RCb-x3Fet#ok{|?>lTC=Ypq0_E6I`yS+M0Eu%L2h*FKZOA z*ewb`uotY5z-35>C`cf(xNR8jSqR9GI981*X}CCHFd6GUYRFYkl@~Y=FtxyMDT$#8 z>Zvi2IvF9!hR(?3nYgLL$cUzi+n3Zq(=oH5qOsMnpty;Bxvnv^z>rXDpD0l|v5{4Y zY&60DK{2_osiAKMnaH7HH9@J=hFVq3l349p@9|XfMj!L^_4fDw z`1$(#{Qds_dSosOs>IKYrn3`S&l3k0{1+G*8XFu((H*fKA|K*ih){V4B_>fRWA`d6 zEGZPZO39)zV4>-=S2#I394rf>KsXI2rVpn{M8Xkgf=*BGP*GAn>s3~4SHoCYN?MLv IT#$eO0rLzCcK`qY literal 0 HcmV?d00001 diff --git a/res/ports/odin/src/loader.a b/res/ports/odin/src/loader.a new file mode 100644 index 0000000..aba90c3 --- /dev/null +++ b/res/ports/odin/src/loader.a @@ -0,0 +1,25 @@ +!cpu 6502 +*=$2000 +!to "build/LOADER.SYSTEM#FF2000",plain + + !src "../common/src/constants.a" + !src "../common/src/macros.a" + + +READ_ENTIRE_FILE parm_boot_open, parm_boot_read + jmp (entry) + +parm_boot_open + !byte 3 + !word filename + !word $2100 + !byte 0 + +parm_boot_read + !byte 4 + !byte 1 +entry !word $8000 + !word $FFFF + !word 0 + +filename + !text 4,"ODIN" diff --git a/res/ports/odin/src/odin.a b/res/ports/odin/src/odin.a new file mode 100644 index 0000000..ea4065a --- /dev/null +++ b/res/ports/odin/src/odin.a @@ -0,0 +1,45 @@ +!cpu 6502 +*=$8000 +!to "build/ODIN#068000",plain + + !src "../common/src/constants.a" + !src "../common/src/macros.a" + + jmp start + +compressed_data + !bin "src/OBJ1.X" + !bin "src/OBJ2.X" +FORWARD_DECRUNCHING = 1 +SHOW_PROGRESS_DURING_DECRUNCH = 1 +kExoProgressWidth = 12 ; depends on total size, max 38 + !src "../common/src/exodecrunch.a" + +start + +INIT_MACHINE + jsr decrunch ; compressed data contains target address + jsr decrunch_no_reset_progress +!if * != $AA2F { + !serious "Adjust prelaunch to RTS at ", * +} + bit GFXMODE + bit PAGE2 + bit HIRES + bit MIXEDGFX + bit CLEARKBD + ldy #$19 ; wait loop based on code from original game +- bit KBD ; but allow pressing key to start game early + bmi + + lda #$00 + jsr ROM_WAIT + dey + bne - ++ bit CLEARKBD + jmp $7E54 + +get_crunched_byte + lda compressed_data + inc get_crunched_byte+1 + bne + + inc get_crunched_byte+2 ++ rts diff --git a/src/index/artwork.idx.a b/src/index/artwork.idx.a index 22b5df0..2b96ba7 100644 --- a/src/index/artwork.idx.a +++ b/src/index/artwork.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2566141 + !be24 2585326 !le16 592 diff --git a/src/index/attract.idx.a b/src/index/attract.idx.a index 0e09c7a..198dcec 100644 --- a/src/index/attract.idx.a +++ b/src/index/attract.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2550629 - !le16 1526 + !be24 2569733 + !le16 1543 diff --git a/src/index/cache00.idx.a b/src/index/cache00.idx.a index b661e51..b12697e 100644 --- a/src/index/cache00.idx.a +++ b/src/index/cache00.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2538517 + !be24 2557550 !le16 507 diff --git a/src/index/cache01.idx.a b/src/index/cache01.idx.a index 31f2aa1..d266217 100644 --- a/src/index/cache01.idx.a +++ b/src/index/cache01.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2541060 + !be24 2560113 !le16 876 diff --git a/src/index/cache10.idx.a b/src/index/cache10.idx.a index 9d1d307..159a965 100644 --- a/src/index/cache10.idx.a +++ b/src/index/cache10.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2544024 + !be24 2563097 !le16 829 diff --git a/src/index/cache11.idx.a b/src/index/cache11.idx.a index 07e2dc1..6ee8db0 100644 --- a/src/index/cache11.idx.a +++ b/src/index/cache11.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2547902 + !be24 2566995 !le16 1283 diff --git a/src/index/count00.a b/src/index/count00.a index eb7b2c8..6ae9328 100644 --- a/src/index/count00.a +++ b/src/index/count00.a @@ -3,4 +3,4 @@ ; ; This file is automatically generated ; -!word 38 +!word 39 diff --git a/src/index/count01.a b/src/index/count01.a index a2b3f31..d572194 100644 --- a/src/index/count01.a +++ b/src/index/count01.a @@ -3,4 +3,4 @@ ; ; This file is automatically generated ; -!word 57 +!word 58 diff --git a/src/index/count10.a b/src/index/count10.a index 057de96..f5e679b 100644 --- a/src/index/count10.a +++ b/src/index/count10.a @@ -3,4 +3,4 @@ ; ; This file is automatically generated ; -!word 59 +!word 60 diff --git a/src/index/count11.a b/src/index/count11.a index 7cf7dac..7bfd73d 100644 --- a/src/index/count11.a +++ b/src/index/count11.a @@ -3,4 +3,4 @@ ; ; This file is automatically generated ; -!word 83 +!word 84 diff --git a/src/index/coverfade.idx.a b/src/index/coverfade.idx.a index 97d90b4..e985329 100644 --- a/src/index/coverfade.idx.a +++ b/src/index/coverfade.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2566733 + !be24 2585918 !le16 306 diff --git a/src/index/credits.idx.a b/src/index/credits.idx.a index 45975bc..f1fe912 100644 --- a/src/index/credits.idx.a +++ b/src/index/credits.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2567383 + !be24 2586568 !le16 336 diff --git a/src/index/decrunch.idx.a b/src/index/decrunch.idx.a index 99bbbae..e91637b 100644 --- a/src/index/decrunch.idx.a +++ b/src/index/decrunch.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2567719 + !be24 2586904 !le16 303 diff --git a/src/index/demo.idx.a b/src/index/demo.idx.a index 66112bd..92cf56c 100644 --- a/src/index/demo.idx.a +++ b/src/index/demo.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2053780 + !be24 2061933 !le16 69 diff --git a/src/index/dfx.idx.a b/src/index/dfx.idx.a index c976ad2..d24ff81 100644 --- a/src/index/dfx.idx.a +++ b/src/index/dfx.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2554795 + !be24 2573916 !le16 1640 diff --git a/src/index/dgr.fizzle.idx.a b/src/index/dgr.fizzle.idx.a index 478ebbd..8e466cd 100644 --- a/src/index/dgr.fizzle.idx.a +++ b/src/index/dgr.fizzle.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2567115 + !be24 2586300 !le16 67 diff --git a/src/index/dgr.idx.a b/src/index/dgr.idx.a index 9d4b33f..c2767cd 100644 --- a/src/index/dgr.idx.a +++ b/src/index/dgr.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2566129 + !be24 2585314 !le16 12 diff --git a/src/index/dhgr.idx.a b/src/index/dhgr.idx.a index 4ee5932..36f6c99 100644 --- a/src/index/dhgr.idx.a +++ b/src/index/dhgr.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2565015 + !be24 2584200 !le16 1062 diff --git a/src/index/dtitle.idx.a b/src/index/dtitle.idx.a index c029ebf..2317a41 100644 --- a/src/index/dtitle.idx.a +++ b/src/index/dtitle.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2562559 + !be24 2581733 !le16 365 diff --git a/src/index/fx.idx.a b/src/index/fx.idx.a index 58e575d..d177aaa 100644 --- a/src/index/fx.idx.a +++ b/src/index/fx.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2552155 + !be24 2571276 !le16 2640 diff --git a/src/index/gamehelp.idx.a b/src/index/gamehelp.idx.a index 14b7729..f72509e 100644 --- a/src/index/gamehelp.idx.a +++ b/src/index/gamehelp.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2556793 - !le16 1444 + !be24 2575914 + !le16 1455 diff --git a/src/index/gr.fizzle.idx.a b/src/index/gr.fizzle.idx.a index 03f7c2c..812eaee 100644 --- a/src/index/gr.fizzle.idx.a +++ b/src/index/gr.fizzle.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2567039 + !be24 2586224 !le16 76 diff --git a/src/index/gr.idx.a b/src/index/gr.idx.a index 860d9b2..9585d2f 100644 --- a/src/index/gr.idx.a +++ b/src/index/gr.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2566077 + !be24 2585262 !le16 52 diff --git a/src/index/helptext.idx.a b/src/index/helptext.idx.a index 16549e5..ac1bba4 100644 --- a/src/index/helptext.idx.a +++ b/src/index/helptext.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2567182 + !be24 2586367 !le16 201 diff --git a/src/index/hgr0.idx.a b/src/index/hgr0.idx.a index 6ac479d..2819c53 100644 --- a/src/index/hgr0.idx.a +++ b/src/index/hgr0.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2562924 + !be24 2582098 !le16 421 diff --git a/src/index/hgr1.idx.a b/src/index/hgr1.idx.a index fba4dba..2361a29 100644 --- a/src/index/hgr1.idx.a +++ b/src/index/hgr1.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2563345 + !be24 2582519 !le16 192 diff --git a/src/index/hgr2.idx.a b/src/index/hgr2.idx.a index 331ff61..a8dfd2d 100644 --- a/src/index/hgr2.idx.a +++ b/src/index/hgr2.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2563537 + !be24 2582711 !le16 107 diff --git a/src/index/hgr3.idx.a b/src/index/hgr3.idx.a index 54e9e37..46175e5 100644 --- a/src/index/hgr3.idx.a +++ b/src/index/hgr3.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2563644 - !le16 281 + !be24 2582818 + !le16 292 diff --git a/src/index/hgr4.idx.a b/src/index/hgr4.idx.a index 72f9c7a..21c054b 100644 --- a/src/index/hgr4.idx.a +++ b/src/index/hgr4.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2563925 + !be24 2583110 !le16 778 diff --git a/src/index/hgr5.idx.a b/src/index/hgr5.idx.a index 8fd28f8..9e91187 100644 --- a/src/index/hgr5.idx.a +++ b/src/index/hgr5.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2564703 + !be24 2583888 !le16 285 diff --git a/src/index/hgr6.idx.a b/src/index/hgr6.idx.a index 77c05eb..ca72fd8 100644 --- a/src/index/hgr6.idx.a +++ b/src/index/hgr6.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2564988 + !be24 2584173 !le16 27 diff --git a/src/index/joystick.idx.a b/src/index/joystick.idx.a index 09167e0..f58ecce 100644 --- a/src/index/joystick.idx.a +++ b/src/index/joystick.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2568022 + !be24 2587207 !le16 2370 diff --git a/src/index/miniattract0.idx.a b/src/index/miniattract0.idx.a index ead18a3..7c22e4b 100644 --- a/src/index/miniattract0.idx.a +++ b/src/index/miniattract0.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2559974 - !le16 852 + !be24 2579126 + !le16 863 diff --git a/src/index/miniattract1.idx.a b/src/index/miniattract1.idx.a index ccf88cd..f05e565 100644 --- a/src/index/miniattract1.idx.a +++ b/src/index/miniattract1.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2560826 + !be24 2579989 !le16 596 diff --git a/src/index/prelaunch.idx.a b/src/index/prelaunch.idx.a index f3ad05d..d7340bf 100644 --- a/src/index/prelaunch.idx.a +++ b/src/index/prelaunch.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2549185 - !le16 1444 + !be24 2568278 + !le16 1455 diff --git a/src/index/res.cover.idx.a b/src/index/res.cover.idx.a index b818da3..0ecc88c 100644 --- a/src/index/res.cover.idx.a +++ b/src/index/res.cover.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 812075 + !be24 819755 !le16 8184 diff --git a/src/index/res.help.idx.a b/src/index/res.help.idx.a index 4caa29a..2e3357b 100644 --- a/src/index/res.help.idx.a +++ b/src/index/res.help.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 828451 + !be24 836131 !le16 8184 diff --git a/src/index/res.title.idx.a b/src/index/res.title.idx.a index 0de8ec3..828d44e 100644 --- a/src/index/res.title.idx.a +++ b/src/index/res.title.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 820259 + !be24 827939 !le16 8192 diff --git a/src/index/search00.idx.a b/src/index/search00.idx.a index 959b042..a07e539 100644 --- a/src/index/search00.idx.a +++ b/src/index/search00.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2537240 - !le16 1277 + !be24 2556253 + !le16 1297 diff --git a/src/index/search01.idx.a b/src/index/search01.idx.a index 2d50643..06c4795 100644 --- a/src/index/search01.idx.a +++ b/src/index/search01.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2539024 - !le16 2036 + !be24 2558057 + !le16 2056 diff --git a/src/index/search10.idx.a b/src/index/search10.idx.a index 2f8b25a..aab89fe 100644 --- a/src/index/search10.idx.a +++ b/src/index/search10.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2541936 - !le16 2088 + !be24 2560989 + !le16 2108 diff --git a/src/index/search11.idx.a b/src/index/search11.idx.a index 3cfcf14..dde29ab 100644 --- a/src/index/search11.idx.a +++ b/src/index/search11.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2544853 - !le16 3049 + !be24 2563926 + !le16 3069 diff --git a/src/index/sfx.idx.a b/src/index/sfx.idx.a index 88f4e5d..2fb3aa4 100644 --- a/src/index/sfx.idx.a +++ b/src/index/sfx.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2556435 + !be24 2575556 !le16 358 diff --git a/src/index/slideshow.idx.a b/src/index/slideshow.idx.a index 7678239..c936072 100644 --- a/src/index/slideshow.idx.a +++ b/src/index/slideshow.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2558237 - !le16 1737 + !be24 2577369 + !le16 1757 diff --git a/src/index/title.idx.a b/src/index/title.idx.a index 11eafc6..612ad5e 100644 --- a/src/index/title.idx.a +++ b/src/index/title.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2561422 - !le16 1137 + !be24 2580585 + !le16 1148 diff --git a/src/index/xsingle.idx.a b/src/index/xsingle.idx.a index 481feca..cd46791 100644 --- a/src/index/xsingle.idx.a +++ b/src/index/xsingle.idx.a @@ -4,5 +4,5 @@ ; This file is automatically generated ; !byte 0 - !be24 2536616 - !le16 624 + !be24 2555616 + !le16 637 diff --git a/src/prelaunch/odin.a b/src/prelaunch/odin.a new file mode 100644 index 0000000..cec288f --- /dev/null +++ b/src/prelaunch/odin.a @@ -0,0 +1,23 @@ +;license:MIT + +!cpu 6502 +!to "build/PRELAUNCH.INDEXED/ODIN",plain +*=$106 + + !source "src/prelaunch/common.a" + + +ENABLE_ACCEL + lda $AA2F + pha + lda #$60 + sta $AA2F + jsr $8000 + pla + sta $AA2F + +DISABLE_ACCEL + +NEW_RESET_VECTOR $200 + jmp $AA2F + +!if * > $1C0 { + !error "code is too large, ends at ", * +}