From 3686f3bf9c15445091aef92692ccf3486389efbc Mon Sep 17 00:00:00 2001 From: sparky4 Date: Tue, 1 Jul 2014 22:35:16 -0500 Subject: [PATCH] new file: 16/modex16/TEST.EXE new file: 16/modex16/TEST.SMP new file: 16/modex16/W new file: 16/modex16/makefile new file: 16/modex16/modex16.c new file: 16/modex16/modex16.h new file: 16/modex16/modex16.obj new file: 16/modex16/palette.c new file: 16/modex16/palette.h new file: 16/modex16/test.c new file: 16/modex16/test.obj new file: 16/modex16/types.h --- 16/modex16/TEST.EXE | Bin 0 -> 41048 bytes 16/modex16/TEST.SMP | Bin 0 -> 1402 bytes 16/modex16/W | 1 + 16/modex16/makefile | 10 +++ 16/modex16/modex16.c | 127 ++++++++++++++++++++++++++++++++ 16/modex16/modex16.h | 44 ++++++++++++ 16/modex16/modex16.obj | Bin 0 -> 1237 bytes 16/modex16/palette.c | 160 +++++++++++++++++++++++++++++++++++++++++ 16/modex16/palette.h | 24 +++++++ 16/modex16/test.c | 35 +++++++++ 16/modex16/test.obj | Bin 0 -> 903 bytes 16/modex16/types.h | 10 +++ 12 files changed, 411 insertions(+) create mode 100644 16/modex16/TEST.EXE create mode 100644 16/modex16/TEST.SMP create mode 100644 16/modex16/W create mode 100644 16/modex16/makefile create mode 100644 16/modex16/modex16.c create mode 100644 16/modex16/modex16.h create mode 100644 16/modex16/modex16.obj create mode 100644 16/modex16/palette.c create mode 100644 16/modex16/palette.h create mode 100644 16/modex16/test.c create mode 100644 16/modex16/test.obj create mode 100644 16/modex16/types.h diff --git a/16/modex16/TEST.EXE b/16/modex16/TEST.EXE new file mode 100644 index 0000000000000000000000000000000000000000..bfcdf91a49c804a26faad171c18c38c924635626 GIT binary patch literal 41048 zcmb4s3qVv={{Ovq?mT!nf+A{~;${@7EVQPP@UbEqwQXD!SH`~4AyolFi_ z?6KRnWo=t+Tid>@wH9?ZkyDJ1t}?nALOv3;J6=)*91w8s|8wquk7{>+KXvXs_dLGm z^*!J3_k6$KbG&D1Id>ap<3#RnoURvG5#$~hIWCS1{m~JY%^b&DIBq_E5`ORD_ri3f z-^X#EYZsr#pTXQ5S2vYYcL)pS=NA+%A}2lVk?LVio)Is|X*UYB&v18>KJ|IN?j|m; zt^>aeJ}-G!ax3XT^aZ|dB%&s8d3jqRxoy#$5!=QaujTxw6MiJb%fkmV&*eRhd6`xH z-F*4kP|8GgDo>gdb`r;c*Ae76Wu{|5xpl@}oRZ?~R#GhaoN{Yvx2N4k+LV-uN~&Jk zr{YR}?vyE?GwN>S8&ymtVXf-{^+D(b2_KJ34EfowWs> zby1vpn+187E~9nvoZ7@+?(mp5;{~+g%^UFyu5aE@Ut6Jma+C1Rr9WH3IdoKgUEeBN z>OM88!!27mo&_wHt!-RggGsd_#>8T}&0C|nx__C}^X9FUT-_HYwcVWDnzE-PiX8Es zlJixTw$GfYwQm)MvjP;!8yrEF>N{mB9f@#nICt^MOC78eICTtPXX5-L z^}ITfQzOt>LX+wvBS}N`S9lL2w64XZdd%@+#TF|Li6TP-Z;2)ZkRV#(b#xj`Yf+x@j^ z6Tkmh(h2o>T`uk3;OLuG8YpRz9lf(010|C_un>Bn?E{fC95~LmkS?F*)A$2?e@#JT zeD&xIt;N$QYKk#34Hj;FY??q*j+Kl|IM&lV%d%Q1v#oEMWl0lUJhd;ayC7`iIrV9A zf$P5eAB&q;y0ZAe$Db^lG%TFs3?!IfS%0*4MuxCyIwpGaEy|<~N97nY-qR?^2L7w0iW^)psxwh36=e0a8*lwi&JwBAxwqoM4 zD`5ca#^(ni46Zey))8Lo49W$V_h8)!lX`YqXsP)(aPyv8xhk&kKG*$EJ`tDs)ydyK~k3iE+s(x86GK=A@*X6NiQ0bkj|7xr^q`jk~X;l4)B|NAafwa)77tZx#z1>J#YZyOc@mk8bd8ui|R%(Ldq_HpO-QrB>3nqAd;a zavGXI(q2S6EWZ?7rrW!IcVqqgo4EJqZB9}q#lPhe;;Z8&fn1nvD*o|?2~)X*K=QY; zI4mwM6-;?%pbaYJJUoCI{9O(6o@bz{g!YU40r>zX&kqqVM`QO$Mao(UF=E%DQds~{iEBqATNI_5?i+Rh;@9b zGKtWMOUc23KcS`l&n-|kPdj?5NOddH% z_Q@h~w4=+!aYoKUxI@me5J#t+#VC%P1$xsfXCtOhHrE!kgZjvh)9RsVvZI|?Wycwk zBgl>pk|WBFPLgAhL8WqRAUY%`Ty_MLPE6)WPNeMUBiTqBAZAvM@fSM3z+fsi(pc;0 zt_7jNR+119OZyp4y{jfc)`JaS>#O3Rl2Zmyow2e`qE zdKbhJBcr~L8_cMubAuWA3@)1!GUo86+cP(bn>}hYM>p}CtJE;OZJVD_d5)&p975VN z4o;d`P&nT*!PD+s@7u70oFU(A`7t-p^-lG%&73{~ICyBo4x}6+XUQp~biL#G)H%_* z1XI_exdLdX%P!}}Hnq8|>wP6AIhP|l4Y)RK zes$L%U2Pjv-Q)hoYU}?y=W9#UUlt-rX$<<;Sl#7ryVV9lBCiTh)c-yy(%oiH)Zcw` z7}^KP$>csg-Q8z%Z76$ueG{uKSYP};iXwM)mnT$`WshWKhcRGQawO68(J`y%l$D(0 z1Ngg_57cJbYxC`d(*Kfej=gpP%f|TKie<}|E?K;foMe4=&sL<<{zvtUG`T>iI2*AZ)4)q{fWMVz2*|Dht3y|VQW zoambL2i;_pf>7)!6gW?zh~HI(NBeKlZ;nWb$cVTzB0r)aVrj&E5i28p7O^Hmj(8>F zt%yHHd>pYo;`4|@5o$zF1Rog@IT{2Z(&VsE<0VqELw4BM_h3Lo0!tKWyv(EpmXF5Q zh`)B2Lgg-pS>eI2K?s+>P&`z|G8DKn_fQ-l8V^HQhcYdOE_>?LWdhBl;)yO#JS_uMEGc=p$iA!rqO3 zH`*M2B#iyO|NTBv-yO_%Ih}>J8nK&3z8ihds8IP25u-(Ky#$YyyEY~SpVh&>H(vD} zZNCBK-;Iv8zdC9}?5m^3*q=1M**iV<$&nN7q53D?=pOUFl?CJi{D}V z`tiejfd~k-PNzD16kEXsPAttUVm}{oMJx!~Tx`3RqfC~iw$!NxuS^wRVPH01j`GJ3 zsO@2C`hyRvg~N^4t_c5v0hLDhuNinzec4EQQGGa)rD0)z_1%Syb$*jAZITo9g_^m{ zuD%rG-`D@Y&1@gxf9t}P>LjEE;>==zDGX*;S>!9?4q#@$jpv_TSUD#mY^v6t1sd-?E_@BH`JtcZ#eN{Ud)MK3;YT zRc+j@A4D9`$RWNJfA{dMTWnlyg`GcYY?Tw`H(IR6&oT(U3;w+qfDmcK!ClXpQaO_p zUK=|z9BkrYZFDLpu+M#=Pg`y51|#I(c;Ua{Od83=a>x?!j=~%8Ge_WU!5b)&1vZo! z>tFa^!La2NS|W2TwZNwM5&nr63Q52EjHSpw$_V|Bh4rn}&L6p|Z~j|Ff9!=c*}=sV z(SN!(O-6%=h!@ZW?UK$YG$_l!JR@dhLIIK*5urguf z-SH#ljd*0lx)JY;pd-E>p^tbsnl&yk?mrgC_$Aa65uHcBy;{B8UX9dO|Aka8!@nt%`i~Bzj$V$`gjq;^zb;hv#Zc-k4M=@>5>nr4LF({b zp|Y+}>MK1+-Pe!QXI@2W93Hld>HdOH>YtuwsXnCkj7Dnl2S^R3`)_5bm)nae!t7ik zVF*k$Bp82G&wuQ6nmor2Tm#LR6NPsa-XriHfp-kvF?h$~9qZp2NR-#!WJ|p68Ac=> zY`NDK+huW`m59LObvYO{0f@XV2P23W%eox2$O2Semt$jyvo3IXe*Q7?^N|M)R&;D+ zjKQ)1&RrJf_TLv^p@+gM{e^+VH=C?jch1B&_p|rCiEsXky?>hc=0Wy;Ao0y+_I?m^ z3r?c8nEekhxlr93Fy|U>L9rlm%~K7_f@~ z%RpK128LwNcaIP;& z2Cqi?dpbj<(Bp?}#P>>y&oy42XRG>}b3biK*q^XVi`c4Hrpb55vM6n0n!F&E_*fXb zrAofx>0x2@gBeZ87`8i&EQs~L*~!=gIY}HN{4aH;>7@d=Pl8_Su=Bm@Ezurt`0=i^ z=Ntm~HR&N|y56DK9WQ|P_DfI-d6BKElXI&QS42jUdjzsVg#Lm^Hntlc%9l8pOG_Gx z36)gS|68dfu+EBxhF8 z`T2$OK~W(JLn4-^uREBazw8M{6_2z*hY;38c9TP-KSB4LiPBV0&{jOwcC7ke)t%LQ ztNqo7tNUNB_A+I|%bqi~uz+j0?U?T@+HuI&()3lX_U+3~KHw}#pAs`}t}t%7I4;Xl zGQnBU)6{dI$Jevp=k@LLwCJ8gx~En5H0xF8G5`3HM(k1ch8>i|6)RRyEy5Hta;`9P zxi~V*;zX091HQw)GsPoaX$(NFYi9KR=v~pR(e))=jtjo#Q1vB~dOqVaT!J>1$Bg)P z`x-p^IggL?9N;`nT#0G3+fj9rbBAFB3YmhRp@{o)cZM_qd?q4Gh!CZf7?xDdEv=BV zhmx|zh-@LkEZv1cWJz=6g*K!nH$g48de*E(HfcNx&C0e&F#t0wTa+Tfzh-3%k|>L_ z%*f@6^ff0p@cTW@9ABT|ETXVi;29xCm|3lWj_OfOmL($F!WKhV6T`_+V4)2Vqz2^w z4tkFKA@odWm4^@~O&A=yo86*WCy=Xicnws_7h#N7ER8;$lTtMj=qrv13mkJ(LUhxQHICB=4KseZE~I&ncFea(K)i9+cnm+>J;yB zs+_4JFw)sOGPiG}V*tRUZ%D-%;_M)~oy5`o;tOaPnq{ujbxlCK5_XY2qyeLt{;U6O z^Zpl&nV1l8e77BE$Z2R;OF58|{Z}?g&kedv{*^jxhl`7RXPrf)y=2tTBD-=)IdUt9 zL1AdDeMkBEgg{tu1zmR*SZ817lAi>IaP0+xcHd60JX z!jXp|YTDhP?a~c+iqa%JE$f1;fNS5nAX0}LD>e+e@I9c!dudqf)55yoP&YzL4NVWG zuePyeVDd-m-);S(`FRPg3kLsyLtR>8Cv}%)XlXe~+YGtV4icWuRsuJ)5`>|ZAYQQ& zEQ2cn`sS0S3VXCODmr&Wv?C_EAeNjDtFWcCOMjIs>~cYroI65x#>kFXd6muc=@@5N zVD%VYAEMW}tA&zt4oN8HK&OWf4XNh~&at|)cL>KyCWd`0g`r_)@`dl)^XIR`xe}9O zvwH=j;ZBf`945M?>ggq7Lj5Z=bwWll?9J|kdOCmFgp8i%>K$^S1u9hcg{bl{(v+~@ z?T^wr-4|@-5!D7u`9b8wf`3y~#k*V9%ksb(x_m?VZO38t6WPzfU~ zG&L=wID8AMh*3mZFf9$0kw&OX`*1kqC}jK8#sE$ex5J$}{8&dVzUEx%JcjJ)XoI+f8WEx}P8zoV>0yKIn!ja2y(Z$B0h%d# z{82BugPasmeX#m?^{1OSkKbksNFrpeu+`Q(`TFSnPhTMOY^2Zv3lAC%fzY~y7DC;B zmi?{zCODiQWT?KQL!qH}^{3Un)kmwfYNh&I^}!E0UU$v%9j(%Jt4qXloiw>>A0`0^ zA4ZzPc7`#==(4*%&&bPPFkhYd&5~tH7i(gbmzxb{t4;GAMZFMu_Jw^}J!#dMskDcI~AdMM+4E&1w`r0t9PCtk4EKzM$vT* zKwKqkkvv^XgZ=s%IccQltj(rWUjWK= z4OPB6Vje?c%<-XmxBK2aa8TXhqLjH~3*xry9x&I;8V-q#en_ zGK{h_Jbj!rn%|YOvuuhq+*e;>UYjjw!dkOyyl-dNE>|pX_AG*BWf3eZi(px?_*Pi- zY~XBx7iL6R5*XOLA+U|fk`RImq~xRtz8%qll#a4#QVd2bCIns7OsK*&7U0jhM)KLh zcVR;)w1I+zo%3d6>nwv1po+OyR3To`^r0#euB^hsst{eHj4Fon+2WN=zXCjLm$GDG z;4`lPZwY~)#(FSzum^F{aK^*<`eHz~xT1Y38Xv)DTZRS%P>u1N$Vv^%ltxztK{`Z? z;4p7Clw?)+KuLy7KrZanvTX?FjyY9-!t48}FFhfGx7ju}KGVPbn)uHiPZS)l_ov_V z>&L=h-!f%u|Ms8pQ(n5^h7E1~=>reHcDQ)*oi7e--|=Vdm!IR$Kze7@%kQ&47qC%x4&d>5B-%V0=Pzi#Tr$9B9B{%kP)Hw#ua%=z+fhxPQrg82{=56bu0 zd|yj92eQK4u4}wG(AUBC2JKr8)5GO3jhywC1}%zFSR1V9Ahrgn)hgtf9*pyOdE^-BLksTf zf;9G#P_+h{Mrmx-8cPz9MpUg4yWf%`s@4dPf*Vz(ZroIwd z>k%sM2*vfQzv&nR7{vg(6&?w%T))l6sketWeOtoHTH{e)X$QXSU^#BYT)ZAJ4|IT! zKP|GTWlNT#$3x;{NK%s{*(RKA#Vu0gAF!piCe$xudH{JC+i0_0ljYK8JCbpoxgsMo zb8XteMFm$*#mT&U@@3UGdgb8$IYxF_epPi!uS^J*KMveVaaf8+mBpnv#bSHe*pysB zGN%+k+$kA0rGOikD~xlB;~bU?(Ryxq)DWvHJ^{wpsA&+P>m@q`=x{6|3wXPrjlPm4 z=4$6wEUG#QeaRV3^ydWR8 zX?g9<&;g}g=MYnxB+I7TKjyT@d-kVIDuB8O3GP$wrpBgIkgl-3&9Ow}h!HtLgmqJv z6oH~l7wix>WoRjoK&45DNit#}Y8lxi2wiNmyor~DO=fLmAjj(7BpO9S88>CwI)>Cr zwnk0nDsu;E3`g2cW^M|{vepXJaeV3?dR?zo!k8m|3|O>Ic|4wd)Ug# zkGT0GJf@5r_y6hjmwMCP=K7(sdiu7~r_z=Qf7&3{-+T5ae`uO0zGlt%)i%%L$GVH^ zZT0yJz!-jbm2JIsDiCVqneVP6(p$7_DJ%Eocgy8Zz$*9-G_2QS>Wv)m`9QuJ)3tc3 zI{})z1cuk&1q`rs(clV&EPf9}(A9#*Z4IVZ`Ge{6$s(JleF9uiKV$e`lRz{z<6A7X zU}&j{9~n#SCtb!;J92?7wPzkEwG%azH|AT?tC@+a=f<#zHuarOEIcFh<8O&djsxDC zXAwA!UO(1}DjE~EnK<&b>bBtHy@YK7SDPEI7F*!WhTLsx$ytyc7D(+h%D1W0LxFyE zOS|ld!R~eHD}XxpJlgOZR^`p8(jXMCv?J=5ENbFV)U)lLPveX=yMhjp;b8ib1&^++ zn)R#Qd()rmt$#h`jr1=MZa;bV!p8j%M->2Kw zbpFD>-2eu7XVW7-zSsD7e)|x-zRNgz1!VXZ8(u*ooPEsrYvC3Z8f5po_+n6VxD;Pw z%y!k+5I-={o(pm19LYVMsLxnG1&91@{-a}0o6!LJLhUXFma z20L}rHje9Q_4L~+OrX24f5~smnM$0eWQQ88pDajL_W+O0+Z0p|8>=&*-r6BMPcgOZ zA?E96a-Q^-5_lmWp0n$HMjZ0Y9CFiPv z9gy0XCC7b{m$KYD1ozi0!WHJ04V4{J+*zbJ(0Jc5X)H05Y=LBptYgr!=Gcbml@KAc z2+~YCF-+UqNqf*ZUR;zD1&MktKT9-P&n+6yxr!yagM>R&BJr z2>fOBu%Ud>`|sAydNh$NvXB)vO-R^PFyGT2L%#Ox0MWtHZBz5kfNU&D#8maF2;HBE zxTP%a2^KnmI3rua8K^Ffqe*{JjX<0Fm}-!Vesz}S`7~z9C&`JB_D1;pC1HqX^AdB$ z(-^LucJdOK6cY*h)gtu=X2Xf;7#yxfh*U!;Al<@{z{2lxCHM}3_C!`)09z7$$6RBz zYnb6wXFC@<`Im98`VuHt5&-(`htKHX3cJv%e05kwVJ*N^r z8+(BLNC(0c1v*v__cZWOf+y@7d!E&D&U2b)>gavZ=UGkXmgVKAoRJJ2qy=oC7kbE^ zuM_ClFFl9h?oKG+0Q};m(EAq0cqq>_G6e#cuybsW$H{Re?H-Nyv~V7$!0|hydprd! zZbg1dFa%R1eQ0bE?~4wixrZ>0&1ekM%R@VV5V}7zSs{>nL?T%R`2bYQs=zIw@Kyu? z%_Co8I8Xk7A`k{3at!_{K)??)a>{domrQc0XrN-3ns@3>=`d+u%oZ}#MUXwQ?Zp-r zF3lFTN?W#+9P`u*>I?c(Y)y};PXax|Dd*|sr7&e?n{rEHoCuY&APrM)IdkbBVoXxR zI!(Eyf>To0Y4{c;8~a|x;mdG&l}D>Dne?3SW!PGW4v&b;;6Pd+GkPj5pv`!4(6SbD z*az?&5HINj(k3UlAF%8LQT9}doMeV4ZMVrd0usowimqYq2dsVg|TE5F5YGg{4# zo2246fTse=3nK&RK&q&IFgyU;zYDfB9g6HQpnnt8;YHZ2C)aD|^X1r|n%}(F?6v$z z{^j4T zq3m)E%gwF{x6S2C%nY_NSeIFi(zP?FXp*jd6RHUHP_N}i@%>D%Hy)n( z{6@Ghv(ODJ)^|gIqA}t4wZx>AoEy=s&3Cqp=mpDZ-Rh}sq z30rv%JBkd+f~Uk%PPjS{jkYnL7}f){@HY2D z*4|op=a-3S6H7r>kd!ib&4e6+iPgD`0*dIeA}NE@>hR(O?E_Sa?d>3idI~zgT;ouZ z*Umjb2Q@&lkDtsr*p1lwexs)`t`2iHKS`C%}D{0+ou-{XkXVln`N=K zpc^JFvQzc((3>M9)>t#EajwAG_e{MjZuTl^VZhNU!Zap|^6XDn3hF%Z?Do#9L6L8ApP)&~0CP%vo zhan1j6C6hX)8-mm>wMl*ae}M3X|TWOY^I)jLOboQI2R{jX#>&%SF-`**bl?-RJ3yyu|JU3uAT5yoVmJfXS8)V z62~_P?OzC6VN4I0pXcA|7A3qm0``zF^^1}TL>nr=X{eHW5V zJKR%banBQM+9y|nv;pJ|jvBFcAwT=!lF75@mdu~+D88fgp4oRwbKK?p3~9EzT$nD+ zU`w4F}TDv}kQy zY5452;&Y|rXaA3+IW)EOhS|Br$4e7t7fN3_-1AJL_Jw9eK*-QOCkOG4(>}#11#O$7 zYM$WcwZF4Slc4<-OT3XBFdX*Xv!}Tt-LtQgh9N)i(9Ysz(|X*qr%2%litdMmi<;`5 z9VbNwas*L2j7UNI5+fy9FdIpzsRJwAm>|d)8@$Q&Q0kcccLYh7Bc83=?hNhQAxT8Q zI;Z5zDDya&(KXC)aoWrN?(Cgb^7h;wpl7z)!X@ zrC*A|Cr>eZQFk<2lkV2e-(55Mj_R0Ptqln#=Rl*C^Oxy^L<;AONWlQ;3CRtv-Bo_0 z?1ZQUO{p1EDstO^dpI)MsV*H(N_%UwcnB4)7}BV9_c()%;A9f04%EaD zP;UpLJM*G6&6|TmN&c9DL#dC?*`8jLzCHc%IamMv#qI3-i%ao^8CR#XuZ|4!oOd#Y z%D;0(j-HIm8H4Q~!KC{m-key*X?o?HSdtS%az>DxD3W8xsk8N9Je6a9Dy;}W zNOa|U%r^O2IR}#xkaGsWZsZ&oZK1&EsL2{LHPh?p4CiLwQZ^N*av?^*c~?wjbmv-} zSd$Bb>XAq`82Ka%hgW*#fHIW|1`zO&c(p83cz4wIC;GAQcjjGtL!meED;9Z5+O%fKapb8plA= ziJ@Hnsk#=420VhKa@{{cH!2wUy$ZDPL-1b#Y#@UH{-=W<$@TbjyNWy&0j}JR6GRo= zI6<^_7le>|@71TpB7+bb#G)YNObd{XID6gYV-`p= z(bPB>C<8+mdAUvfRUaz!l-sy9CjXX;v$AXzz0g1TSED^cSzheZT2U-RYS+AY^R7%h z8OiuLe2D^_6lF|8_*y9WJrx}|-}T*5NJ0dfP8xVR2Y8LiskQ>Oqd3$H2ad+9v2jQ? zEoZ9(4Q0?>sjN*>ic!H&j0&cqf&^B9bR7WddJ2BZO}i zTp#LLcJ0rh?S?UXiy)teaqb6%3!!yFeNZB7kjw6o&M1&d?i(oNE^J17{H%Cndwn z@D*|(jDo@W2*sYL=MZKBn%hI1dQZ5gPnYbhjbQ);DQm7Jj@hena1sIgN&?XmP7+~= z3gp;$$;sFzWA$vW4J`wzun4ZbY_GNkwSFeAVXmTUce%D1?3d zOjZT|Wr9y@#^MTKH)vF>hFi6hEbH8Gmhoj|)Lz8Cl2AQ%vbYudU|c{kxr2S^vGF2l z_BS@*gz%;BCjZ9`95&3@DE^*p6!%bUI>GlKXn5LhV#kMp{xvycpgv(s`Cv`A3d76)?`aAVZv|AJe|g!qpZu5oZ(Aai0RuX@+We!*JQzD?5&WamkKj;9yL2 z&VeV?36c}*sc7NKpD?7im3RtL$@&&x>4SaP141z++T`hSmci4q44#$+hK9r2y|o3W zz}adY9gE0kN{R!%ddkcSZUqFQ)NGi~(Jj_DbjyE}jt_x-0Ku-+wHP@ERCf+3j3j$_ z3ev9CY9qfBH-!7dj91$K$*f7N(0P%HX3e&l8!WR#~`Q87V($+kg=)5+?3ZII8ee5$Na7Q$?hTnJN~lSgB&8N*Gnb zsS-hzNU98@ik&LMsS-t%XsV2$%1EljP-PTVVyQBkDr2ZJmMYg!WgJz;Q{`H!OrXj{ zs>D%c5>mDyBDrAiuA(y5X`mD{N@hboy=$)ZX&RUA~wp~@Xp zxsxh)QRQx`%%#dbRLP~vJgVeTWj_1XWg1eMMU|gX zrI;!uRB=&7qDm=M%BZrMDo<18f2i{Rs8UXqHB_mfN+ng?RH>rM&#B^}$}?11OO@Vd7CP~qslu}`8`$MrOJC$`2$tnr^+9x@+YeNnJRyw z%3rCni7FpZ*Rd!Ql4^=*=ib9pWRM|(BCaUaZs`OK3fGQWM5~PYwmFr7PuV0|A zBRPI3beTuMV+ssrO6qC7EZ%J5CWCqmq*}P*$?RU4`g{i>{AR9pE z_S0m@v(_l7$Wso@=~%F{o@R(wuMmiNA%=!7s2-D{*|sqj@)B-~0b{bcqC>1q{oAz& z!25;+$A%`*0=X~t0W*wB#;$c4-Hu)UIrZIMXck|^)=EWV8lZrS=SUOuq4`X$2w^X5 zR*v8bmnUjn(87VcfR(CEEU*AOYVRk|T#iSsakDA~mq?Ci=iK*LOmaGzEzfY8$prjn z7Gd{|iIMG2GbAn>!J9EsaLJu4jD2<3wZx~jf$cS@+pop;do%;DZbr~+9mcWndq&u9 zgkM7#ZSh*e*e5Hr;aY8%u{pHHxrAlRCsnOvgWL_3UmR3>R_QcCNI@n<4+}KvuJG!a zIB8H_$U{rZbJe3S8zUy?lS7S;uW*d>F!>Vq(_k~5yuW8ADE5Jxb-TH0=){5!Ozw%? z8nN1(^9=a8>}VO(1r(5jp8jx%&-LY2^-nNRIcZPxoJMh)cJ3E>FT(sL^c;TyFR=%j zfyH?29@?qiu|O`hkztA)N<(}#AWcu@=I^q;;j9FZR zT+s)ehx6l_*LO3mgzgAdW9+1#V^x^^|4+x1U4S{`JpA6Fu&5E?kgq!iszr1g&J3^% zLoR9%xj_sTj6OhD79K7^ky}1WvOvawY^0Zl>(F~)m% zvzM3jLNkEDA{9YRVN*+JjTOq#;ZyIMJ+{=8shtyVhc2{-Gyy{ftDL-G{?Ke4m7UGR z30-Co-5yIYDoL;nKXl#XAoGK_xpAO z95&QUus4Q_s?pS5a?aEi;IbTn^h3lVy-dQIxyq2RR&mO0yU1Zf z)YAT5`(Q8A)Wh^_)W|B_!OUNf-n4J>5D815pro!?3|;8wrclHxVZ~yvqgPM&I=Y!I zJ%H1{jt&;;lC8mw{<7phQoLYWp{3E|A08?gcQLk^>lu zsLCijJIZ6(5>XvGh|yLqN=?x_(!LVvwr&P9jAnbOo|So8)9LDwdIhrcx1vBN5e9m|$NBl_rNwrQQ6O z-v!c(>&_P1<>|e&}X8yHq?eFsU6mfp&ov(b7VQX)_ncYmv=0L~qRZM888%1Icr%O{xwaLp+{_~iIHNoIfHi|{LA&1L*S1znPdTs#cayE% zk7K87=DLaRdu`#Nz%f8493YaNtN;!L3`2Z$2>UR+H47~OUp*R1jycduaOKdm^dTOr zqR~2q%^$8v3!2Kt;_f}BT|AWMU&vQgbgCvaWI6u{6ba4%DMKEyJPQ7y0q{;XXBd^9P{(OmKGAU@V<|?uI1PX*2|tm8Tkj(3}U#Cown= za12fZ{PT|k4!a7_2r~!;KLkN2zhwwQc==ccA^b7~R`%bNL`!N4I?)oe2Sefvpha?_ zJv3MtLo5TQXma-X%LYu#1^*`(lUx0*7q6J4B&N*6S_C>~2K{q`z!^*q=6h38kCRQl zfi&Nreg8CQUHW>QtZrlEr};g>PjJEGn_#@1;pHayVj06>LgdisuMPSugZD4If8q9p zB?~`T2y8dlgNreq0C9F+MXDVgpw;BSWdh4gqVU52pEz#ti6aJ|IL7!y3u6+FuL6!X zw+n`baA+Q#0r!J#mEIgXNIFxU*E-+;K7!+tb#G1#UIA|o)}H$JQK=$V7CWek{%irt z853bt=6?gY(&@FXx(`;MRSa(eII84=-mkOjA>ruJsvC}i-2;-{1hd8!ykJOeV3dAj z6-qzIY4uPyYrIQilX;I2!g z$KlGB(Syy;z%k}yW|2$TQTdeD@hohh&UIeL8EBlG-QdhcIGKdK22;HjGWrJhFOTDl zZ9aT`wB#*OH}ss#ho{HlEe~)B`%`wlSZsQ6Fy@2sTX#NttXO>ZSm2yFDQO0=W@geQ zo46U(RzObHlLOjs{hZ*pay<^5@{?k5r(JF7I*+5*%Iq!SdT#F>4u}oMc{H2RmWe=1 z!F9L1NZ_&J3VP@82iCThr=`#e0jBGUz*clEn{{m~x>gZDn04)V$^oPw_%JD@xpEXa zN}Bned3W44N{YN&>+%0s@Y^{*t|046k%XWbBYhj_Qc9?_AdLqM(KXFe(K}F%EBAV5 znajgMX*Snrrh5hbggv@beXQ3%Jm?=S_{R%ZMrZW-doM~Ot16ED;4s7q+_iOV2|x-`^UucMufxXMQS zG#l{~Y{Uo4cpay{H{!d7x)~e*Lcm?k|LjH28my`4OrRkUV$PIB0yrufWLhC;8tLJW zx>Ik#SZuiXVTzwzglQu;)Bn4R&}uefg&9m63)!0m`c+%{EV2zzzF1}%REhI6q|Wgi zOdYZ{nYlkCw_a_MCC(G@?H*RUE z@4*wkf>RzxK!?jhMQ_ch+H4-aAYbaa-GQ~|xHwk=Xi05$(<{*T>y9&R7Tlz}|9GEg zRi_wsFpQ!g6wqgE4K$l-p~rCRUxwEqh83I&bDRi4 zY`1|4&(;0&^bph{1L|(~9v-oBh01iXa5ZFphO*<7>^uz@V5~VkH((B?!v&bFKkE>6 z9rU2`B?W3mS2w|&*cf=`9EW>IGqp3dIlQ}Xiu7ZGb8@SsTQlA1_eoRnTqWI@>E0XX zPQOu_lnD1P)NM9MSDF2VCbX;Ez% z@7|l?p8be47q^wJlJ3Cs5h)8#mz06$)6!DXm8pekK=V4-zcDgJ1)h-L3i=}_K_eQ~z zqHWfG!a)4dU!uFy9n#zWpTR-nPU!`|3-4TsK+drAioTi{hr2IP3J*}56zkq&)6O(HE^^fc19HWHfjZLi z02N*N?!J{$UhP7?W;S+>@ab^tQ=~%pPPFyc#4ts| zIJax67US;AcDZx4zqs{jQjL2L&T?zlq(cg@=o#P00=Ccgnfp z+OtNFJ8(g2g^di8D>|#2$t~Z}ApD=k1_wS1n70J$Z zFhRyE*D+E+6>SU~DyuP6kLgzo)VFd$xX}ooF#BA6+AB3wnqk~Wf8s;^2 zVYp%Kf;zypvd#??{eYIq{J|@KAk%wst~hA^;5+Na*$FF-4!h@uxi8f~n*1mGap|{q zT$_kH&%fU!^F`eL32n*te$ep7%$;0dN0jSMnWNMy7LacGE6yr-8j1 zUVLyj!&NK}l{uoFW_MmWI!%ti9jRF(E3Z%eNBf$1I0*V5?XN8`pu85zHYKjjazSUU zLsf@$Xn%lvqyMgccKdl&KSpzbr~OCdKyATS>f1q(r?yI{XRN`8XYc-g!PARFi4+f!0(dPPp z#rdCR^-J+`tPKpWU5>Tjby|)U@lxej0k2a~6?xsI-@0*|PAnJ7737Uv19%}k(m}xb@R}l}Xl#OP4KP zK|=*yiFx@G7BPG9NnC==ZESRKm4{Yw8$F*2Mw!G76Y}p(lwiz)Kj|GC^; zbrBA@Cta3}he|okgvZ7nhv4R<;hsAnxa!Ha*Z_ zbJ^5~`7O_I+6{q*C`7O2v}*$mB0?Sx#{e5LT=t#@TykjMBBNbfYB-pbQ|lhJtZ&`= zsBQg0@(oT=*iybM6H~k;*RPL#)JEbTw{18`{-w`YExf&2AUoL=$Isy=`wd8xk+`w- zc-4bkv5rw0yn}u*M#sKl-5Uam- ze|>9{zsY}Kx97Oo(+5OBU+IEE%tSajd8ob>(`MYHvVsKJsnM#l!F1djTbPSdyGZkeKZGHO{5Rq*|pJ^6C~Rw4I<7aY9{Qq=%Ew1Ks)?!GpoX7Ic)h{)Wk!Ue~CSga1JNE z4jrSR$`khE6k&_!xHbPST<{|v>d|@**SAhx8u|)oJw`s4IsWh{%@luV6m-W|Uc$`{ zX@W&4DWU0Yf(?q}^42#`giiqQ;9;^8yU>)K#YHe>9fg}uPPpfSrNp$wg56}ix-Z>S;>Ncdak5V0tn<pcFi1ZU8F98Q@0fq<2lR+&bVm{}_5KY*%aIs1UPrJm{24c^OelK;-NfgwQA94XljaOm3o%*Fj!fPU zde#FCX+uhL$z-@dCNyKG+gzF_kLSB&EB?<6lmA{F?i()aWVmYHC20l>2K;9H+SrgC zDgG+-`T{S_9}4fnalV`pxHbT%m#X2EfU_vtAC0mxS|jUqwjE+0yUL*)!z+?9!GDd; ztZt3+gd{Ophmj`&kgen>1A30-TF!I_smKh5HoLYwN*?cNjP+(g^XtumYTcU^U=Qqv zNcjLM4|=p%QV!vm?;;&uD|5MrSq=tItsa$W+ZTA!lHlJmhE*pQjgYN;vsvI~S)O9I zcUhVB!?3?mT%*_EX)s|jQyNOl$@Q?!s115bQ}JYs-Dpq41lVHyvtoZFmRMyx*`$w# zCh{QcZpfO@ptYb^V9t4-wDIr~g0s+5LQt|923d#=aK2Sv*1;}uk}_z*f08f@zY_Le zCcs+xOWaVTyZ%KQQ+xF?_!*S$N`M<)ur?={(p>gW)^fIf;In3&8Jdkyu57I>5Aw|^ zUMbV#2*UCLZ04<|ilEobyyk+DJYk0faM5Cxpyx!YkKsQj;2_$kbd{RfNPjRm5Gfrc zn{aJSMQ}W}pYvHs+-KTBy40mXEU8A>%)EL2%6JHtG~JxW>^8}PwfidtXjgZ_hoo45 zd61bxA;jP?n|krM_6^RIpr?!E8LOZQa!pTZ#H~3od}m5SStjX%f)J6BS41Y_Aj5Z} z=7&t$(x{N>+7$-$TE;BUU0R-YCBPeh2;j&NK#DrHhbk`pJF{u4Hx3ZAX%@`fCHT)H z!kP8F%+AiZ3^uPt+xRvN+~3wcWutY)HfHgKnU>2!uXi!|gB|{1eZ~2z-ubW`!zkr_ z*qpFq6MuUS^xM#D7cHUl3%wRNig8aMiZi@13} z-L3oo!le%A(qwhJzV!{RuFCj7cLun+W1RX+odJXw5CHwo)*KiY(>o+uS zzMuUc8zll(6Rue!!HLXC5a;tyfV5U6BHYYX&cNjApdj`w3$T6=eA zy|XLHlwuQdAR-O~CnYHb;y}yEp(z0l?KufO1uP6PJ%E8jaVZ2SrFCO4YB%RByn-BBJ+QT31JaPKa`-k88=5ahE^FiO0(IaLF zNuh?$on4Dh^`M`kzY3T)$vtosJKxyWHyKF|Y02{S-dGfyO%N z(4Rz5g`1ckd+cIHyrXjNt$0{(XJw}7VAJp<&(ukHuF=HaJZ9ZDj2*+%1UvBdzt#Mj zgbH3P1bX>HQ~~G_9FWAfabSbnI=h`8wwPf;dwV z>v2<`U>iF$U7ad+ydk3g+VZTHm2V7BLHEPkt&V+m&#})&u?4$N0MCDb@bo1n^Hew5@Hb!HFr#082mS4d8 z4S7ztcqHYKJr6y3s>5pVXZcuWfuiaJFwl-HRLQp4(72wxMpX#u4$h_ovtF zyX`IY3dh%R-~Quxi1EZTT}_8((WX({OAwEaVuPRy3j^X;TWrFf))es`$tg$5EAb|b z>EeEY*G7M};1j%P=5_fvw8MPziPK8T#@1Zxp*su{# zV57&Z?S1;_$)6Dl8@=v1zA?5`kK@YWGgdXVTs4_){`j^NraRp;JfM8F{O^Z9f&m)G z@bvJxwW0Y}&HoUHE?>MjmMJCjwj0Y9Vi#v(u8pq)rQKM@De+~d=)%cJv`mDhO?*yG zJDTD-CsEE824Y1giw_RjBPqMcpDp4qN&Vg@hhk+XmdNFtRHAIhGT9tHc2q7^Qsqj? zb`e3zx>U+?E5#zdffOs?%SA{fEk0wkc*)Xb4VN!p(YP{^Or`D2z+iUE)?B{e6t|V! za%E_EWcy9f%+IgE!N2lPPMH=CjehX(4I-?WAV`KEh@jp!5&UI3zkKR{JM7#+^ep~4 zjC;Swzx0~FmWQw>dg`RBr!>#_Rozc!zIO(l`5&{QXMHFrf6$>S-`EHHzZSw8;+ge; zf)T>~(S9(<@Xz^+KeB)V(EpcH6v2*}GiXc8mX`bQH@j_iTPSOLB2C`)FKWHBru(PK zv)JGN!yG;{pV@!*T@6hS{%!G+AOFq12eM6XKJx0x_VY&ezR~pluK(P*fA!D5`{U-j ze)*dRetY_R7%yHJu-Ax@zC1E5G&N?u~!({n(w6 z-p$WnT!CZ`J5PG;md{R#@F{+GFgm5CW@^-|t*wn1Cr_JnQFL<6$uq>eSoj-F!TJ=E zst)6*R6MqQl47qjYowK{JXYI)W9@c6#!kPSk7st`Xr7Y8(Ri7Ukv9eByP)o9>xjdy z0F;5#)mKC;hC>6zaGZ~K!~EebiRA=kVbx5hv6!lGDz1Zkr<_l;u!@H-&#vNY0AG57 zUdnNUt^Ws?>U^*q6~2ZOS;l6h<%%0SyIb2fELnbIe_LPwWi4c2cbsYrj0E{awqTKY z0eEr!O4LeW5ZFp|aN_u$92UVG#3F_U5`A{L(@EPF!JsR_xE^UMl2<;nmhI+~F3@b#O#vbgfH zG#S6vND-ea99-6bNZfpdc9z6aWGt`7(nJ>oG%l7PFhfQM_=HXpu!!CdaHZUGqEse> z6ZJH=lJ-E^9x2N{0}yS;DpYd0M9EH&!K0SslySL+u)>lMrXNX-9&?+47*3cLywxAJOF1ZT+o%WIP7M%Reh(#e3SUQW+mo{Am@z8OjL) ztqkNblPgzTJ5A=G-&#BfEoc#RhiJ~Dl_)rch86hYX&`cnTWXGs$9<*TJmynY3NUo_ z;TBwTPsw#=!GL-rN(RJOjf)#skck&Ya7l4$62QwN6oAsrF%N%1)8k1yZsQ6xuM|=w z6K}u>5jcXh5g;I#5!Cp|;>P6xwSY7(AAzEmPZE)d1cFu&Lktzqsg#SuWb`Q>aSa}P zpD)Bi#-<<(IOYa8vV|fU1BwAxpa*;82XUOIyht(NJH1bIY~p<7D1c1@?FMkck`eRGFrd+sihY zw*-*EY!1z4r$!16*U()W5KVC~QAp?P67G=DgrZv{^XvM0z%E-?h0WVF1ru=? z4?9S`Q&VBJT}k7~JDIyRsiWAEPj_SsK<^ErJp=hJtSaDM)~JI1!EC0CkA;M)I$IVE*x04(Oju4v*&>qh9ZeZ&T#X#i0G#Lw|KPu8OmY%jT>3IpGX5Ek#_xL022^R+iJ@RkNL zr9v9Ej*PSC`Aiv%o(T*a?`lW_uYM)KQ?m1feJG8LBmf*)pn>hVr6a{9WXxL_#>luu zBRL1wu78ow;bsdd2Sff@mjxj*&ePX|K3`u8Wry{3X6Z;C$v*N`Enypv-n*9gKpVP3 zkCWR@#`iQRfe$p$olXmkE+TyD-dCbh{;Q(uDaI3V?Gr{Yb0yc_DbyTi%EY9$pf9ih2q`&EUKQ zeH=6ImlYddR@E+w0WB_#$+lwh5b&)EWEfxXwoBq4`2L1u?%&SZQ8 ztfD5;j+htlL=@{aB_I<3d711<&G3{t>rJ%76Tb}i4>CSd%;Fk}vwie6b&!k$u5T^( zMP?-i&bq*qOm@KInvDS{crMSzc`U&sNUTEKqMbq>jlvZk!G_h!nU?r?p<`i9sW77_@o1`+$Pt*%2GI4$Z=f^LWY4@fKb~vpyIA0l?iV zaqP@U9IIZQWb`D`;C@`8!zHW%t>G*t{zw`QSP+X>DNzuj(9k+8ldHIcWZa6Drs{(c z6kX7G@#>>AkRo$)z$jYH0!mgvL*Xu+$R~4K-Rw+2@xgLFR>R8=Wk(UulZXR)f2 zvv627?sVnOJSU*wE1P95)f2g7tmVF zMR^fv2w$O?nql<}PyL{1isqt#T75imWoGlT0NM*PEl{|`ba4!n63I-F1<%nctOgkG zVJnSqrEA_acO;nGMLuV%)85tJi?-u1A8Q336zx6g5)sOYB$h7poq(VMFQVC~{M8zj zZ4ZJdACpX|3fwlp4O1B2!l0cf!bd^o(g4~CgSrNUUI){DGWj`b6`=z?3pww@OnFs9 zn2+)Souv6B;|8=BuNQcB7CQY>gYICZoOXr_Yy~ir0r68slp>&Tx>l#(oA1vT*{sJg zod`K5O17QBqNVN{Kf#QEAo6OB6)Vs`!>j4hfVMo6mr4b!gp!(-hg*R{LNN@twRU#` zy}1hQZSGp#2K<{C(_ucqF{)Wshrp0rQ!i0^-q5V*=H7GTS`+Y9LYKT&Mr8a$5$cyj5~5JdeHJi@NDByy=fOtQ<6l;Qh5+dmG@k8$7s} zD8bW{wo_S{JrEK%h6r+AQ`zL})yJvjc!o0e#~vsZKsg>jRMi|YpJwCUzuAw;%_8Wy zf{1TxDla>#sLuzeJ#A||cbD->0?BY&3pijpk{)(#cYC4SEgdkAYfyV-jw^7rU2ew! zYSgE^s2$jOM)y^hee53NZ5*AaLf+07Z1{AIwczq9N`c5fPZm}F!Aizv&DLq>o8^W$ zyX+UH{rDinVSeGD55yiQ!O~-KN5&nXh}>EhoNim!6}#-=P9Able4l})noGhhvlyUf zVOHS9XijgbxaH=&1CJ&sn?UjS+eV5g&(_tw-RpXw`2~Trv1Q}JA=NnGGfQtE?&Az_ z6?n{mtoE$8~h> zM%}yx0jV!)xX*_R4mV~9J`%`CmsoF-DYj+30u}j{&YRh_I?q@_3XotM{d$9{avA%M zpCoJVHB{qJ7*881Uv8wRdrez|6Ibwcr$H_DoB{!7RHdh4L%s}@UW`s04zhs zXTo%#6$6RBUWe<@_?CrRp696MII`x|u^Jph6CGGwXBZPqW7$?uFAstKSVa59lB{HM zY2i^?r5G)1qZ|v!cpjK&lU-Of672~@%oZ|M0X|Ce*H~Dq)|SC~iZ>K7#WFt+;YG*Y zCfH8|;Bosy0*M2nvpCa4G@C(>YLfEVm!)@$Z9z}6>n74(PT zss)1&768a=&dafATiClrfqRpZ`al!o{FI^15?57)#%HqHTa1zJVK@QSeL>#d>PE9zEfnhv4A4lfa zaW1TiJr~pn&4q9?!h75@CjZKS9uE2{L6^uR{P6BI5x8t@P^D_-+S~tlpIUg0A*9cC|!ORIbrS3DJiy7e^Wa)V2Ul}BQjiB?UED>5s zAV@mr#f%Kt*pdjO9|7iuETBz-$H$IIhI z{MHa%mIU702>Jm*Z-juGgrqGYPARDi*)t=&?I5=qHH&N`e=6wz26#MLk2b<>PnJFx zo@^OhBNtAB%7GxIpE{MLi+urlBtTX9SR?4{`6rq+0lg^b!sAa7q^^UMKLtsf5q7u%i#wd?)DT^k(3aG}N}>CX!~`wj^oVGRaZPag}qyt|O2Py5o8+F+>62)h7@P7ez5%4wUR zv*QofgPY60Yqb9b1ZwWd(qKG#0!4ES2lrvdA z`SWQ+Su(AiN$ zgj2C^ChaC$P{f%)r!2&o5q9$seT@%(kZJA~bawE_Uhk8=cJebpXU`61BbtaaS^Mt_ zy71~yJ^Je`(N1=SIAuzA;|>cmBAh97hZsc^lg!=4$b=c`+01ASl6pu;f_UOF0=+rZ zq@>K>h&b#tsO~S4e(@ZZ$=(7u^e2d)5_I7TpeH6Mz4rv2SL|}8$-gql+}GB#d|sIo zJ%|5up?7uNNzUs9C$GTe=p7TBVY?!A{zt*dD`(j+_*Vu=9~bmT0Ue04Y#n4ubI)d- z#5$QKBTsmY=1XkdZo$cGTcR8Bk02C`my-zPxz(JBg4dV%-@PQ zy!3%Z$Nv|897bf2+BKcWsq+el=z5P5q`QL7OBq<~5M65bLqX>SjNB{#ouAS|Al2H@ sWobKE8Q|rlqs|k_WXT@#uS$smHe={AcaWWxi6r&6_xb6*b1Bh(0|iqaCIA2c literal 0 HcmV?d00001 diff --git a/16/modex16/TEST.SMP b/16/modex16/TEST.SMP new file mode 100644 index 0000000000000000000000000000000000000000..65f59bb6ca0043d80271b0a7336220fe015eb1c5 GIT binary patch literal 1402 zcmaKsJ4*vm5QT3-d?0F-%ErYXu#glMR!X!C5fl}TMIiD0fSAG`VJnCtVnhoI5&Q!d z){@FHmDp)12qNA)UyuWHh9g<&uhX7`K9Q><`a3h2=Q&fEC~h%vQ)u9)uvS8qZSKt z!!T{>^&vhQh)|_!lM2bgsl8B0JjqWLcOeV2^5cWlILt|fAh|WZYJfp!MONpATH?y4 z3dug(#L!QbDkMU$7ei_^ZyE&lHN-vtTTiewaZ~^b+!Z>;IGX0^)p literal 0 HcmV?d00001 diff --git a/16/modex16/W b/16/modex16/W new file mode 100644 index 00000000..4b697d8e --- /dev/null +++ b/16/modex16/W @@ -0,0 +1 @@ +500 frames in 8.351648 seconds for 59.868421 fps diff --git a/16/modex16/makefile b/16/modex16/makefile new file mode 100644 index 00000000..f4f4c19d --- /dev/null +++ b/16/modex16/makefile @@ -0,0 +1,10 @@ +all: test.exe + +test.exe: test.obj modex16.obj + wcl -0 -d2 test.obj modex16.obj + +test.obj: test.c modex16.h + wcl -0 -d2 -c test.c + +modex16.obj: modex16.h modex16.c + wcl -0 -d2 -c modex16.c diff --git a/16/modex16/modex16.c b/16/modex16/modex16.c new file mode 100644 index 00000000..47a59687 --- /dev/null +++ b/16/modex16/modex16.c @@ -0,0 +1,127 @@ +#include +#include +#include +#include +#include "modex16.h" + + +byte far* VGA=(byte far*) 0xA0000000; /* this points to video memory. */ + +static void +vgaSetMode(byte mode) +{ + union REGS regs; + + regs.h.ah = SET_MODE; + regs.h.al = mode; + int86(VIDEO_INT, ®s, ®s); +} + + +/* -========================= Entry Points ==========================- */ +void +modexEnter() { + word i; + dword far*ptr=(dword far*)VGA; /* used for faster screen clearing */ + word CRTParms[] = { + 0x0d06, /* vertical total */ + 0x3e07, /* overflow (bit 8 of vertical counts) */ + 0x4109, /* cell height (2 to double-scan */ + 0xea10, /* v sync start */ + 0xac11, /* v sync end and protect cr0-cr7 */ + 0xdf12, /* vertical displayed */ + 0x0014, /* turn off dword mode */ + 0xe715, /* v blank start */ + 0x0616, /* v blank end */ + 0xe317 /* turn on byte mode */ + }; + int CRTParmCount = sizeof(CRTParms) / sizeof(CRTParms[0]); + + /* TODO save current video mode and palette */ + vgaSetMode(VGA_256_COLOR_MODE); + + /* disable chain4 mode */ + outpw(SC_INDEX, 0x0604); + + /* synchronous reset while setting Misc Output */ + outpw(SC_INDEX, 0x0100); + + /* select 25 MHz dot clock & 60 Hz scanning rate */ + outp(MISC_OUTPUT, 0xe3); + + /* undo reset (restart sequencer) */ + outpw(SC_INDEX, 0x0300); + + /* reprogram the CRT controller */ + outp(CRTC_INDEX, 0x11); /* VSync End reg contains register write prot */ + outp(CRTC_DATA, 0x7f); /* get current write protect on varios regs */ + + /* send the CRTParms */ + for(i=0; i +#include "types.h" + +/* -========================== Types & Macros ==========================- */ +#define PAGE_OFFSET(x,y) ((y<<6)+(y<<4)+(x>>2)) +#define PLANE(x) (1<< (x&3)) +typedef byte far* page_t; +#define SELECT_ALL_PLANES() outpw(0x03c4, 0xff02) + +/* -============================ Functions =============================- */ +void modexEnter(); +void modexLeave(); +void modexShowPage(page_t page); +void modexPanPage(page_t *page, int dx, int dy); +void modexSelectPlane(byte plane); +void modexClearRegion(page_t page, int x, int y, int w, int h, byte color); + +/* -======================= Constants & Vars ==========================- */ +extern byte far* VGA; /* The VGA Memory */ +#define VIDEO_INT 0x10 +#define SET_MODE 0x00 +#define VGA_256_COLOR_MODE 0x13 +#define TEXT_MODE 0x03 +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 240 +#define PAGE_SIZE (word)(SCREEN_WIDTH/4 * SCREEN_HEIGHT) + +#define SC_INDEX 0x03c4 +#define SC_DATA 0x03c5 +#define CRTC_INDEX 0x03d4 +#define CRTC_DATA 0x03d5 +#define MISC_OUTPUT 0x03c2 +#define HIGH_ADDRESS 0x0C +#define LOW_ADDRESS 0x0D +#define VRETRACE 0x08 +#define INPUT_STATUS_1 0x03da +#define DISPLAY_ENABLE 0x01 +#define MAP_MASK 0x02 +#endif diff --git a/16/modex16/modex16.obj b/16/modex16/modex16.obj new file mode 100644 index 0000000000000000000000000000000000000000..24d9932f87fd1d678b5e3287553550ebbc6f586c GIT binary patch literal 1237 zcmZuxaY!3y6n|gta)~xtb(t-rF#KcE4k~dQ)>SCW60hr8lbB0ywssyzJ=89V#l+ab z=rX*)eHz6-h8wL=r7MiBe^e;tCS#Pu>R{}T%#DR?bUJINi~C1Kij}zUyV$age(>(S z@Auxj@BQBQ?&6hTcO5;~GaXFR&1kH0IZ7?!n&OSC-bHt zFo9D7=RWTDp7xogKx0ebtIsTOa0^*X=rzp@@w^w^7`1@e<@E@GUx@E504sw^My=)lLBKJ=a55GNOBF}sxGkkaG^76MV+<3aa zE(ZNMnlr_6`ZPlgK)c2w=*a@Y>>}l$|70K^g8nl#YJYwG`$!qSpME&#UoQAuxz#Dt z-a^8qv16c`MWj}VCiSq0rW-_N+DXJ?N31G~ta?E-s}Uj}h@AQ{(ZfW4O5{so-x1BJ zgaz2HFzG~UoEAn79Om=%y!1mRwp~5T0#whsO#rTs9z(omiL^m#J9~z7!bDl=46M-h zv2@cS;FRO8&4!cOZ$y{il%Ay|zCgX3h1zkppm%X=bh9<((>Wu#S;R9qi!$6lnDyFwT$BdPU`pQ+sUo?TE`9p<*&X(DdeL*=)hN*vi1W*|1cB7!(E4JZTENkXoMdrw?hlm3>*-uNhvv}Z0nt{i?Rz7a?Vn+DKNx*Za`4hv5vVMw{Df$2 z9tqR&H|lN-N0lDw5I|vjN|9rVv;a_AVAa{(=aV}W>2H7%1M$gW19%xdgZPOjpev}z zJ$|L5t2-=(5ZoL;0Av8j8s|zZ$BLX~f0f^?_}vcA|5?fHTXc-<0mK$QHh>osd%-3} mLUJ%Doj1NsO)G}@wU8X`tUnS-(ZAF+CDdDg +#include +#include +#include "palette.h" + +static void fadePalette(byte fade, byte start, word iter, byte *palette); +static byte tmppal[PAL_SIZE]; + +/* fade and flash */ +void +fadeOn(word fade, byte *palette) { + fadePalette(-fade, 64, 64/fade+1, palette); +} + + +void +fadeOff(word fade, byte *palette) { + fadePalette(fade, 0, 64/fade+1, palette); +} + + +void +flashOn(word fade, byte *palette) { + fadePalette(fade, -64, 64/fade+1, palette); +} + + +void +flashOff(word fade, byte *palette) { + fadePalette(-fade, 0, 64/fade+1, palette); +} + + +static void +fadePalette(byte fade, byte start, word iter, byte *palette) { + word i; + byte dim = start; + + /* handle the case where we just update */ + if(iter == 0) { + palUpdate(palette); + return; + } + + while(iter > 0) { /* FadeLoop */ + for(i=0; i 127) { + tmppal[i] = 0; + } else if(tmppal[i] > 63) { + tmppal[i] = 63; + } + } + palUpdate(tmppal); + iter--; + dim += fade; + } +} + + +/* save and load */ +void +palSave(byte *palette) { + int i; + + outp(PEL_READ_REG, 0); /* start at palette entry 0 */ + for(i=0; i + +word far* clock= (word far*) 0x046C; /* 18.2hz clock */ + +void main() { + int plane; + int x, y, i; + word start, end; + page_t page, page2; + word far* ptr; + float elapsed; + + modexEnter(); + + page= VGA; + page2=VGA+PAGE_SIZE; + + /* fill the page with one color */ + modexShowPage(page2); + modexClearRegion(page, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 42); + modexClearRegion(page, 17, 12, 30, 30, 19); + modexShowPage(page); + + start = *clock; + for(i=0; i<500; i++) { + modexShowPage(page); + page+=SCREEN_WIDTH/4; + } + end = *clock; + + modexLeave(); + elapsed = (end-start)/18.2; + printf("500 frames in %f seconds for %f fps\n", elapsed, 500.0/elapsed); +} diff --git a/16/modex16/test.obj b/16/modex16/test.obj new file mode 100644 index 0000000000000000000000000000000000000000..c075452e1b109c25658228c8c7ae1ce0c934faa5 GIT binary patch literal 903 zcmZWo+iTNs7(Hpy%W742K~Th1M42L^Q{0M(bhev{&Sq_vd71kWyL2n-Wj1MbC|Fq@ zTDQU2!_Z~myg&FZ6@4?_{s3{Pdk`HcOx(i|nX>vzogx@GobNm5dgMOe&At!(AAXbHNWHeq`#{Yi%?EvUO>71@KV5+fGz-n_fpC}=j)rZ4gP~vt zZzV#@apC?|JL+D*Zee=!R^*n0%$*54tp4D!u<)9ChrDpG%&Q3pY-MfNEmH(4SjJ@r zi8*=B)Hpa<#y&}dB}<7daiNh2wMkewf>q_MTav1rCg6y8uo-L0Qn)X5j+c66g35C5 zkIPazB=^QrNdg;*#8Z*}mAjA1QkLdyt%n1l_I8syP1dF#g8_;=@d*gGhs4f~!raij zi+00}6#Fe0)o`S+M1|rG@WllRAHz4iY1`1Q9_OXn75w!bK}{(RoL4CrrLf9mfV>!8neFY2>45A=80#i4me;e$R~ zJEoViOQr1hQubRZyI2G=Q(e$FkG^jB#2_P+T(`offw#?uiw~11i*xIAI@1$C7H4;Ouk_m?C((@sLqf zm_JRrPo6mS!uyxfH=j+vDIL>KVK90GU9`SL=;s@s{|D!8do!l z+(Y0ZNoo3d(y!3%)n9p}Ef4?z literal 0 HcmV?d00001 diff --git a/16/modex16/types.h b/16/modex16/types.h new file mode 100644 index 00000000..43a42c55 --- /dev/null +++ b/16/modex16/types.h @@ -0,0 +1,10 @@ +/* + * Just some handy typedefs that make it easier to think about the low + * level code + */ + +typedef unsigned char byte; +typedef unsigned short word; +typedef unsigned long dword; +typedef signed short sword; +typedef signed long sdword; -- 2.39.2