From d274f7cdb66fd39016a2d342ed8b9d5a548c15fe Mon Sep 17 00:00:00 2001 From: sparky4 Date: Sun, 6 Jul 2014 21:31:31 -0500 Subject: [PATCH] modified: 16/DOS_GFX.EXE modified: 16/DOS_GFX.OBJ new file: 16/GAMECOLR.PAL new file: 16/MODEX16.ZIP new file: 16/VGAPA.PCX new file: 16/lib/modex105/DEMOS/C/C_UTILS.LST modified: 16/lib/modex105/DEMOS/C/C_UTILS.OBJ new file: 16/lib/modex105/DEMOS/C/C_UTILS.SBR modified: 16/lib/modex105/DEMOS/C/X-DEMO.C deleted: 16/lib/modex105/MODEX.COM new file: 16/lib/modex105/PALEDIT/BAKAPI.PAL renamed: 16/scrasm/DIAGONAL.PAL -> 16/lib/modex105/PALEDIT/DIAGONAL.PAL renamed: 16/scrasm/SCROLL.PAL -> 16/lib/modex105/PALEDIT/SCROLL.PAL new file: 16/modex16/DP_BPAL.$$$ new file: 16/modex16/DP_CPAL.$$$ new file: 16/modex16/DP_OPAL.$$$ new file: 16/modex16/DP_PREFS new file: 16/modex16/DP_SPAL.$$$ new file: 16/modex16/ED.PCX new file: 16/modex16/GFX.PAL new file: 16/modex16/MAKEFILE new file: 16/modex16/MODEX16.C renamed: 16/modex16/modex16.h -> 16/modex16/MODEX16.H new file: 16/modex16/MODEX16.OBJ new file: 16/modex16/PALETTEC.C new file: 16/modex16/PCXTEST.C new file: 16/modex16/PCXTEST.EXE new file: 16/modex16/PCXTEST.OBJ renamed: 16/modex16/test.c -> 16/modex16/TEST.C modified: 16/modex16/TEST.EXE new file: 16/modex16/TEST.OBJ new file: 16/modex16/TEST.TXT renamed: 16/modex16/types.h -> 16/modex16/TYPES.H deleted: 16/modex16/W deleted: 16/modex16/makefile deleted: 16/modex16/modex16.c deleted: 16/modex16/modex16.obj deleted: 16/modex16/test.obj modified: 16/scrasm/DIAGONAL.PAL modified: 16/scrasm/SCROLL.PAL modified: 16/vgap.pcx --- 16/DOS_GFX.EXE | Bin 35958 -> 35982 bytes 16/DOS_GFX.OBJ | Bin 5662 -> 5673 bytes 16/GAMECOLR.PAL | Bin 0 -> 768 bytes 16/MODEX16.ZIP | Bin 0 -> 47966 bytes 16/VGAPA.PCX | Bin 0 -> 4672 bytes 16/lib/modex105/DEMOS/C/C_UTILS.LST | 597 +++++++++++++++++++++++++++ 16/lib/modex105/DEMOS/C/C_UTILS.OBJ | Bin 648 -> 647 bytes 16/lib/modex105/DEMOS/C/C_UTILS.SBR | Bin 0 -> 1731 bytes 16/lib/modex105/DEMOS/C/X-DEMO.C | 4 +- 16/lib/modex105/MODEX.COM | 0 16/lib/modex105/PALEDIT/BAKAPI.PAL | Bin 0 -> 768 bytes 16/lib/modex105/PALEDIT/DIAGONAL.PAL | Bin 0 -> 768 bytes 16/lib/modex105/PALEDIT/SCROLL.PAL | Bin 0 -> 768 bytes 16/modex16/DP_BPAL.$$$ | Bin 0 -> 1024 bytes 16/modex16/DP_CPAL.$$$ | Bin 0 -> 1024 bytes 16/modex16/DP_OPAL.$$$ | Bin 0 -> 1024 bytes 16/modex16/DP_PREFS | Bin 0 -> 324 bytes 16/modex16/DP_SPAL.$$$ | Bin 0 -> 1024 bytes 16/modex16/ED.PCX | Bin 0 -> 2086 bytes 16/modex16/GFX.PAL | Bin 0 -> 768 bytes 16/modex16/MAKEFILE | 17 + 16/modex16/MODEX16.C | 420 +++++++++++++++++++ 16/modex16/{modex16.h => MODEX16.H} | 37 +- 16/modex16/MODEX16.OBJ | Bin 0 -> 3522 bytes 16/modex16/PALETTEC.C | 16 + 16/modex16/PCXTEST.C | 33 ++ 16/modex16/PCXTEST.EXE | Bin 0 -> 15908 bytes 16/modex16/PCXTEST.OBJ | Bin 0 -> 824 bytes 16/modex16/{test.c => TEST.C} | 23 ++ 16/modex16/TEST.EXE | Bin 41048 -> 34758 bytes 16/modex16/TEST.OBJ | Bin 0 -> 1157 bytes 16/modex16/TEST.TXT | 258 ++++++++++++ 16/modex16/{types.h => TYPES.H} | 1 + 16/modex16/W | 1 - 16/modex16/makefile | 10 - 16/modex16/modex16.c | 127 ------ 16/modex16/modex16.obj | Bin 1237 -> 0 bytes 16/modex16/test.obj | Bin 903 -> 0 bytes 16/scrasm/DIAGONAL.PAL | Bin 768 -> 768 bytes 16/scrasm/SCROLL.PAL | Bin 768 -> 768 bytes 16/vgap.pcx | Bin 2497 -> 3904 bytes 41 files changed, 1403 insertions(+), 141 deletions(-) create mode 100644 16/GAMECOLR.PAL create mode 100644 16/MODEX16.ZIP create mode 100644 16/VGAPA.PCX create mode 100644 16/lib/modex105/DEMOS/C/C_UTILS.LST create mode 100644 16/lib/modex105/DEMOS/C/C_UTILS.SBR delete mode 100644 16/lib/modex105/MODEX.COM create mode 100644 16/lib/modex105/PALEDIT/BAKAPI.PAL create mode 100644 16/lib/modex105/PALEDIT/DIAGONAL.PAL create mode 100644 16/lib/modex105/PALEDIT/SCROLL.PAL create mode 100644 16/modex16/DP_BPAL.$$$ create mode 100644 16/modex16/DP_CPAL.$$$ create mode 100644 16/modex16/DP_OPAL.$$$ create mode 100644 16/modex16/DP_PREFS create mode 100644 16/modex16/DP_SPAL.$$$ create mode 100644 16/modex16/ED.PCX create mode 100644 16/modex16/GFX.PAL create mode 100644 16/modex16/MAKEFILE create mode 100644 16/modex16/MODEX16.C rename 16/modex16/{modex16.h => MODEX16.H} (50%) create mode 100644 16/modex16/MODEX16.OBJ create mode 100644 16/modex16/PALETTEC.C create mode 100644 16/modex16/PCXTEST.C create mode 100644 16/modex16/PCXTEST.EXE create mode 100644 16/modex16/PCXTEST.OBJ rename 16/modex16/{test.c => TEST.C} (56%) create mode 100644 16/modex16/TEST.OBJ create mode 100644 16/modex16/TEST.TXT rename 16/modex16/{types.h => TYPES.H} (86%) delete mode 100644 16/modex16/W delete mode 100644 16/modex16/makefile delete mode 100644 16/modex16/modex16.c delete mode 100644 16/modex16/modex16.obj delete mode 100644 16/modex16/test.obj diff --git a/16/DOS_GFX.EXE b/16/DOS_GFX.EXE index 33f8bba94d6a452d4674239bef087afc128748e4..10e536c5b1d77432e03b2126453abe034aac0c9e 100644 GIT binary patch delta 10907 zcmZu%30#v`w!dEzLf8UY1TiY$jwpgC5HRdS(y|p05Y&juCTk&povOjHR%4W=UTfEx ziuj!AqP0(LQ*|neRa=A^gHvstQL7f-|9lB9?+L&EJ@+j4+;g|@yWfGE zuS!~9lNi$rw+X>)EgQ$Suz`UzC#GQRTQ|l6nEhvR6l2N2JfIZ#Bk%_B1Ms$-vBSXE zKp()I85;)p!pAgVHZUKk2HumnIQ=*9XViOu?|>T$W@LdbjD-P}YQ~J{_+_A6$Ji;* zT6e~N2O2yW`yBWg7@}ls7BD1}F)JK?0(1cho{Vh;4tp_H;mz0@-~{kLz=UCpO$Rc7 zUwj$+X%u5W2Ey+cBcdM9m}LTE+ku@x2k;q?3a4qn0P49D8EXVufK$L_z-1C+D}lAZ zQP?E~F}5DK2#lW0SSXMNGy?iy#ts4VV7Cw`oWfYuRL0I4QG5=;-$Kzba1rZQ;*JRL0dVeTy{$Yg}+ld&6_% zf?l7T4c!|T{A%@LN?VzWWxcjHv^S#tj6`Yci?UdyEDPRlL|a>gEbCTDmeRI-mc=TF zQfEzAM^@GY%}R~M8o;t(vp3dax;nqF#5#szIq8g0^76%CEYn);W2ZPwlqwD-)~dokMn6|%6KeOKU3zo2k#5r*eVE{mOc zwRHH9SesP=RpCji0@16TEqseKQWk6bUCz6u;WFECxrHlap)#8+&cbKOra|>za$YN& zfXYlce@*tJcdTuy{Ivs8cI$40$>%Ihe6cmT7+A7 zvz4}dsfD;u;>2b&edtgfy}IA4F#xrh(m~@`TM+7^DXf$>Z47xexcaZ|ml>SMew5PY zEVVowy6u+4!bd9tjj=Yf=_pbMzAq6#wRBucXOxl}Sr218sWp#!p+iyvhfu@@qpFaU#x3fffD9OKf$h*)b8K;Qd zo=g&rdmO@Svi!(ldC4I(>P6EwyQ$3~ts>KnNtTT%3IuRl+^JR<`><_)ii$vhc{0oa z4Ph{F8U*C$la#h-8Ci^$t?4jGue`{_xw&#DKTm197ikgCKqzK`PDv;~=;E4cOTp=( z(;)h~jv&BTvjhb3LXt(gvR~SCZ&38G3G}5&gXieYNDEiGjxpL^ms&K>FoQy)V(5NW ze^`goHsm%PNU=+rpOE)iM-|q=P)L55`9+e?6Xi-|$9mA2dVhtU0UgU>d0QhljmWYDG2SymT*+SN}u!mqgck92YB#2&P| zIAJS!Shq6}c~}RXVVI3`n>s|)xY#uk9ATF|i`>#Bf(zg6F%0D~j|h~%du&6wRjCu^ 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 delta 10774 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

dk zI+WZ;pUnpj!RSctgWLDsvtKwXKRY=~mzV`Jq$s%Cs_5HbPbaBW@~4`b^?vix~m zW*wKMBxiHWX^;)G+*Q8DGx2s0YE4?&!i+o~*UbbjbJFJNmS*cTdC9nF2n}>|;&N$e zS!MD1@lI-W7G%Pmi_3WVZx(ZzE3TEv+1bf?*;(1iI^G#~_|{A0_vA?#Y11+?A>twK z6AGaz8B2viT=p89v^rk(xln~nUs7)rPkh%2BT`TUP;*Ae$w(%h1S0S+@R< zV7pfHtJtB{!-08%-a)Tl8lmOhTLoTbzk2C~&~K!%t_n{&k9}Q{k^GU(K(8<77ZRJn zup6($Nw3#bR~Rx4)%DCk5FAL?qmh^gNPvv$&m$UXL5MzO1gUy2jS>*95t%O`e>| zXRMx&>KQ?fR&o2%8n(C6)#I)pb8IRx)KslRU3?X8W+y6Vdb~E9dzT8=r18k6vtKHc zJiHZLgILx!)m0eEgjhDRj4CgW#dGZ%ZCRBXf$~~^$DXP3nR03#*I+bK>S~&@%2siY zybY=BFv@L;;95t$aJhksm+N7dtL7$NvS}*niwy=omHBiCoo}zDY9)ryAk^<1Y4dNp z@D#7({<#+~wxrsJzQR^jN70Yi>(yTLGW%n7IQ3^kNVhWI8m}oLVd*>T(I@rj#+o`5 z=CN&K88u!@w?^AMuP!UDU4`JeXC8$)$`-S51%iS8d_)KB1kH^m?pMdmI?fS_6-Td$#qE10Q`ouYHMNFVo|y zh@fp=-w)>zp&g0*zHaMezJDBN7ixX!Y&Kl$Wo#D44qGcmNH8ll)bK9>?z2hINrmg} zcq^~W;XY9hZlq;vZ1r>rGG~27ebq`dshID>JjUM$atD5|7GfjAI>g9se34F1hig71gV7KdK0>7iNt~xHh@w z#+TGo*3@l)Cb*u*5ODOzbx|@S|8C+h7<@h+m}L7#!e^uKU9JCnfuS3Bd`2|Rz#xx&At z_~Xk|{=Ea*gU5z9UGNwKzS9*Bz<&+82>dKLAv?fFfEvJa%D4;eppB@CQM8Fvmbog6D4`e&G4L$Cuz!X5i}*l)oNcMWdbpood9V%R9(C z55XDGPVjqXB6{$g^1nJe5QG51=LW+8__d(!_)OssAQ#bFQTY3-0PyQTJHhV&T>$nZ$sBwof}ajL8~krT zCxdo@63{E463hc{1tC9R82O{ePZ3h2-I9dZf6*I9CJb&b{faeby%fNGb0DKSV0`PsHUxL2`Y6T6&AAj8itO#1#Jd@8MG2S!JEZ0Q2wrQ403Rq*_^_9rZ_&7d;KTR}%4-wN6b z`Cd>LEITWxALuZbLvQrM-+W9(fnv}j5F7%%f&#L5j1?%Jc}W5aoB`bdet!Zc6Zo5; z(co8W_@6#ve*jGbKXox2gWm`G0_ZoOD2!Z^9F!VU&A;_m8kI^R) Q$Y~9PmQ! zHRdWN=s_@gV*r!1;)80UWz?i5IaNBIOr1=%t<#RJ(=>6=ne?TOI?#3LWG0<5{IkBb z_J+OII{R^S*6~^GoiRxp?<|X4x^Vrv^=avW-{R`p!m`rsvp3b$T;6|np5E#(6ng*6 z{YG`(MbLRTorl3czIz*nN(K@z>a1P8M!NERUwZE8SF;}rT+JR{g0vCe&Zk3j%ubOI ztu{Pf)G*w1b8q%z%6_^x`{|n^MywO~(<+(F(1B-DBnYfK5_zSY|H!Oug%iy4FB+!ePNvp7woN&@wf_jlGV*3y3dXoHUn;67 z+MZZi`z@R8Mnq_1_XW^&CB1bq@D1v}GzW}R?i7DkAh8HLM5xZI6ud_Q~i1UUaN0v$nRFYp+dh7;Qv#W%ahYlG-{BrPe|( zE~zYPEQIX71p0##{53EX?-|z2-#PkS5B$sFRpbxp!`ixeUV$S&xZvmtTA%3 z6~cBB+c>FNDKg4>hV4AIIUIK~=d&&1@y#6D#{LfGSDE*4{2=pN%sm|MV?HaR20K0j zs0I}>#Yy!YTvWSp zUG2dQwHIHh#{lszCX4s*tau+k5|OLX$X+ouVHt;sfjwA7Y<4 zhXbN7@KIKXp_tLF(L(0OWBc8TKM$71g$HxNlUXs$soa3M%!^o=+=LYzTf-_~E@NB6 zs^dA$JpLN1jpGM7*30@S$A2!hBY|BAZKs~@(ScCUaA;lJ=(;u3z#lE0s|dK}y>XrH zOa31Qa?q?${`+XwROVFHT;>IAvv@=1@F{SzpT~Xy`(=DBY?Z3r$~wf{%l5QXuZ@1J z^EfDefi5uszqo*R#3j5dKEg@yG0uoz;+*&d7sRLdRD6c3!gAx9_!X{;tN23v8n?vf z__O#8z7oI1eQ^{27Ps(3{1J-wS2(nXqC znoc#^81idl=@V@n-Pc0sA6h6q(ZXm%iz7u(q=|YGMeE5FtIwdR`ot7U(o-o#UqG|; zMYK$Rj#lc;W_R$~Q10P*?ctL(X_x zzEpUhhuKc4@EMA;_i$_8lvBNa8Sm|t)9m+Tf_+v_zixgL5*u8pyY_i6!o~*nzY>|1+?|IPpkMb~fko zeYW$th!rxPpMzk#oX0#IKgK#GgIAeB;W1$+K(`Ff2sNt@3x->V`^o%X_>q-8ytnLF znc$r(Hjaj zJi>T>6#|#xj?tU2o&M*lyh0e~$}BG5QpTg@skJTzT2)c`mO@2GWJecYFBz1p=aJMU ztg&j-ucxE>20Et~(C2y~-O)F?>7iakMC?RQ-(oc+X zDl=ZDEk*^^8&$O5sHPJ}4V^aX>5TCTT{9Z#hOvY07;buCw9pfymEiD@!{Mc1$1X~C nyhe*1yGc4;r%J~jYI5XskAVQ<0}p)nf%aICFh0nR_&xmxNms4_ delta 2039 zcmYk6e^6A{7018lz5Cu<66Lpuq6P_|_#=i)+{CC5M?pvj1eFUW3L?KGs36OafYDWU zl@L&|FDUA&U_wk#A*m)&V=7Kw4UTV;={QYo%%rx{I33qE`NK9^EcQVEac94CKIh!G z_nmX@-SgqBqqExgPl}oM*Ci2)Ut0a@>O|+rx46<(P*(cJGeuQZclP~euHNV{6gvI! zKN{3$zW{xTtgJ)ePs`mk{`_;%7(`1nCV!Kxc z+dipSJu<}VlcClb)@L&0hPhPBaVOyqNXB<~8Q)_O{(>b?CnB15zf+jT%vM(L$BioZNwd_#6#K)QmQdl zIp3Cy;N0Y*4X)VI>9s{>l>VYpNoKx&+U?wt1pJKJ9~*py@Cq4b1#re8tZ_2Lp28JO zW1hp=KhJtmhIo_snZ+D?h1YXz6>^+a$8s}!WQ5%!$6M{}cd)uSc2Y)IAIb1p zZFBKNZt}Xqio!QyOI^(7PGds&lex(*S23sNN~psZT^B%cirHtJ&IQc+-?*q9yBOk>{fQ7L)nExN;8ftt+=GL;hM4=HOthGhp1g47*u=sh=ivn>H#o`p!i_@qQ{iqcmpC1toalJvTFz&%f&k~rQV>!78BYjI}7En`*iGc~-vmF3}h z8^;c^j&l42$IeRaSQifi(mcb#HB&~9sEX?N4mjThMqKl!G5g)W3@uL_`2V!H>r02_ z;4MN~<9UmztQpLSZ0GTPOXka-#(oC-d>`!s9s%W2wHsLN%!k;%&-z4;Zy7zV^Jo_r z&>=3OQ~VZ3#3l5I0rZN?=o4S!jIiMTT>K6L;tDMB6|Rb_xF)XQy7&fv62HeS@hxtP z8~CUA9{0o#7!tQZ+8yYcALF!tAy&JO1nmLlX#asz8^#h1l&a}etU0J$8$%u1Sh}DE z(rqn-{8}j8)57S!7EME1JO%30C`_LoO%ZwmMd~wXiawL3>hmd1Uq}n}BudqjDMODl zI|El}d}J3ib13j+M(%F!09sP-Wu1GO`g{w)qj2QE8fizfox!c2!~YK_YXJ|96sdU2 za47D0f_Ns!yYSR z?HCy}n7A^)n!7T9TJ&Y>g9qf|H8jcTQtFi<4a-qwPgJ>(}sFJ;x8Qx@F+? zwn!LN)#aONN((S1BX4QSN|~~JMf$Q#oa#CT`mb1U;+8DD5l2z$vLOQVy$azkZxO^K_9hiHN; zlQ5R2{Yb2FG|)nLe8yfPjLA(dF5gtftK|uqm*7S%4nIfo>m$awAR=_ zWyVI@WK`1I#%6lYsHPJ}J@pz5WEorNYvWD2Y3!h%j3&Bgc<6z#lgP1)3`a9P<#>x; WaJ0}e$J=5QV=V{ZZuhLc}5w0$MS6i*`%&nsp;R@Bdai@dcK(N!vFYzrI<7GXD-dFIX2(s-WZI;c#O)}jL4N_^8 zTcu8u)7UF|4Pgnx;^Wefi<_1%Ep1+!vLNT!Y}jtu?JDGc&+$l%HZrbP=9$}#$AjmS z*Na+Q6g63GQa8zs>ZAOi5HxtjUZd00DYeRtim4rL!)D8N$Ihm-XMf}viC>HtuD_TQ zw{IT5c@|#g$5NW2HtQqFP3lMas4(adbn^P@b#;~O(dtj5s{bLtd&Hga3vnS?g@jJX YqmSBdQG+6i^ro%x_>On~3fi#v3oGhTWdHyG literal 0 HcmV?d00001 diff --git a/16/MODEX16.ZIP b/16/MODEX16.ZIP new file mode 100644 index 0000000000000000000000000000000000000000..feed2125f9b2d8efe3583278d0dd58bc6574e450 GIT binary patch literal 47966 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

TuYZu=qq&>+fb`DMqLSZl3 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 literal 0 HcmV?d00001 diff --git a/16/VGAPA.PCX b/16/VGAPA.PCX new file mode 100644 index 0000000000000000000000000000000000000000..18335bfd872ed50d7702418b9d4a56575f22a892 GIT binary patch literal 4672 zcmeH~L2DC16vzL?6_(H~PRSA`u#jxX&@RckY-+Y~!#-LNyjtj8=_e46B8qtOD1vvv zOQGJ>Q!03nR|LsXdI|{Yw^-i<(e|Jvf=FR!GP94o_h#S!HXQZ%Yk(e1{+LQ+~m(_#=On9R%08#Xa8SYkY%m@oj#{Pxv{%<`4XN?msL4EPu6r z#s5#|?_ZyvZNAHsvOFqzBGz_^Bk&gAi2%H}R z^MA4tA|Q(FBoE)3zHKDkC$iK0A*RIFYPFS>mDSZ%iO^aHLC|iuyWQ^E+FGyIOOj+` zV#S0`wDwF!8N~u*Umb#^S z(I84hkEjxDqEK{NJc}t1K$JU_xs-YoD~fzFn!=z6!a|$Ej|vqRURt + push R1 ; Save R1 + PUSHx R2, R3, R4, R5, R6, R7, R8 + ENDIF + ENDM + + POPx MACRO R1, R2, R3, R4, R5, R6, R7, R8 + IFNB + pop R1 ; Restore R1 + POPx R2, R3, R4, R5, R6, R7, R8 + ENDIF + ENDM + + ; Macro to Clear a Register to 0 + + CLR MACRO Register + xor Register, Register ; Set Register = 0 + ENDM + + ; Macros to Decrement Counter & Jump on Condition + + LOOPx MACRO Register, Destination + dec Register ; Counter-- + jnz Destination ; Jump if not 0 + ENDM + + LOOPjz MACRO Register, Destination + dec Register ; Counter-- + jz Destination ; Jump if 0 + ENDM + + + ; ==== General Constants ==== + + = 0000 False EQU 0 + =-0001 True EQU -1 + = 0000 nil EQU 0 + + = BYTE PTR b EQU BYTE PTR + = WORD PTR w EQU WORD PTR + = DWORD PTR d EQU DWORD PTR + = OFFSET o EQU OFFSET + = FAR PTR f EQU FAR PTR + = SHORT s EQU SHORT + = ?,?,?,? ?x4 EQU + = ?,?,? ?x3 EQU + + + 0000 .Data + + EVEN + + 0000 1CE5 7307 0322 RND_Seed DW 7397, 29447, 802 + 0006 00B3 00B7 00B6 RND_Mult DW 179, 183, 182 + 000C 8003 800B 800F RND_ModV DW 32771, 32779, 32783 + + 0012 0D 0A CR_LF DB 13, 10 ; the CRLF data + + 0000 .Code + + ;=========================================== + ;void far pascal dos_print (far char *Text) + ;=========================================== + ; + ; - Print Text Directly to DOS console w/ CR/LF + ; + + PUBLIC DOS_PRINT + + 0010 DP_Stack STRUC + 0000 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP + 0000 + 0008 00000000 DD ? ; Caller + 000C 00000000 DP_Text DD ? ; Far Address of Text to print + DP_Stack ENDS + + + 0000 DOS_PRINT PROC FAR + + PUSHx BP, DS, SI, DI ; Preserve Important Registers + 0000 55 1 push BP ; Save R1 + 0001 1E 2 push DS ; Save R1 + 0002 56 3 push SI ; Save R1 + 0003 57 4 push DI ; Save R1 + 0004 8B EC mov BP, SP ; Set up Stack Frame + + 0006 C5 56 0C lds DX, [BP].DP_Text ; Get Addr of Text$ descriptor + + ; Compute Length of string + + CLR CX ; Length = 0 + 0009 33 C9 1 xor CX, CX ; Set Register = 0 + 000B 8B F2 mov SI, DX ; DS:SI = String data + + 000D @@DP_Scan_it: + + 000D 80 3C 00 cmp b [SI], 0 ; Null Byte found? + 0010 74 04 je @@DP_Got_Len ; exit loop if so + + 0012 41 inc CX ; Len++ + 0013 46 inc SI ; Point to next char + 0014 EB F7 jmp s @@DP_Scan_it ; check again... + + 0016 @@DP_Got_len: + + 0016 E3 07 jcxz @No_Print ; Don't Print if empty + + 0018 BB 0001 mov BX, 1 ; 1= DOS Handle for Display + 001B B4 40 mov AH, 40h ; Write Text Function + 001D CD 21 int 21h ; Call DOS to do it + + 001F @No_Print: + 001F B8 ---- R mov AX, SEG DGROUP ; Restore DGroup + 0022 8E D8 mov DS, AX + + 0024 BA 0012 R mov DX, o CR_LF ; Get Addr of CR/LF pair + 0027 B9 0002 mov CX, 2 ; 2 Characters to Write + 002A BB 0001 mov BX, 1 ; 1= DOS Handle for Display + + 002D B4 40 mov AH, 40h ; Write Text Function + 002F CD 21 int 21h ; Call DOS to do it + + 0031 FC cld ; Reset Direction Flag + POPx DI, SI, DS, BP ; Restore Saved Registers + 0032 5F 1 pop DI ; Restore R1 + 0033 5E 2 pop SI ; Restore R1 + 0034 1F 3 pop DS ; Restore R1 + 0035 5D 4 pop BP ; Restore R1 + 0036 CA 0004 ret 4 ; Exit & Clean Up Stack + + 0039 DOS_PRINT ENDP + + + ;=========================================== + ;void far pascal dos_prints (char far *Text) + ;=========================================== + ; + ; Print Text Directly to DOS console + ; without a trailing CR/LF + ; + + PUBLIC DOS_PRINTS + + 0039 DOS_PRINTS PROC FAR + + PUSHx BP, DS, SI, DI ; Preserve Important Registers + 0039 55 1 push BP ; Save R1 + 003A 1E 2 push DS ; Save R1 + 003B 56 3 push SI ; Save R1 + 003C 57 4 push DI ; Save R1 + 003D 8B EC mov BP, SP ; Set up Stack Frame + + 003F C5 56 0C lds DX, [BP].DP_Text ; Get Addr of Text$ descriptor + + ; Compute Length of string + + CLR CX ; Length = 0 + 0042 33 C9 1 xor CX, CX ; Set Register = 0 + 0044 8B F2 mov SI, DX ; DS:SI = String data + + 0046 @@DPS_Scan_it: + + 0046 80 3C 00 cmp b [SI], 0 ; Null Byte found? + 0049 74 04 je @@DPS_Got_Len ; exit loop if so + + 004B 41 inc CX ; Len++ + 004C 46 inc SI ; Point to next char + 004D EB F7 jmp s @@DPS_Scan_it ; check again... + + 004F @@DPS_Got_len: + + 004F E3 07 jcxz @DPS_Exit ; Don't Print if empty + + 0051 BB 0001 mov BX, 1 ; 1= DOS Handle for Display + 0054 B4 40 mov AH, 40h ; Write Text Function + 0056 CD 21 int 21h ; Call DOS to do it + + 0058 @DPS_Exit: + 0058 FC cld ; Reset Direction Flag + POPx DI, SI, DS, BP ; Restore Saved Registers + 0059 5F 1 pop DI ; Restore R1 + 005A 5E 2 pop SI ; Restore R1 + 005B 1F 3 pop DS ; Restore R1 + 005C 5D 4 pop BP ; Restore R1 + 005D CA 0002 ret 2 ; Exit & Clean Up Stack + + 0060 DOS_PRINTS ENDP + + + ;========================================= + ;void far pascal set_video_mode (int Mode) + ;========================================= + ; + ; Sets the Video Mode through the BIOS + ; + + PUBLIC SET_VIDEO_MODE + + 000E SVM_Stack STRUC + 0000 0000 0000 0000 DW ?x4 ; DI, SI, DS, BP + 0000 + 0008 00000000 DD ? ; Caller + 000C 00 00 SVM_Mode DB ?,? ; Desired Video Mode + SVM_Stack ENDS + + + 0060 SET_VIDEO_MODE PROC FAR + + PUSHx BP, DS, SI, DI ; Preserve Important Registers + 0060 55 1 push BP ; Save R1 + 0061 1E 2 push DS ; Save R1 + 0062 56 3 push SI ; Save R1 + 0063 57 4 push DI ; Save R1 + 0064 8B EC mov BP, SP ; Set up Stack Frame + + CLR AH ; Function 0 + 0066 32 E4 1 xor AH, AH ; Set Register = 0 + 0068 8A 46 0C mov AL, [BP].SVM_Mode ; Get Mode # + + 006B CD 10 int 10H ; Change Video Modes + + 006D @SVM_Exit: + POPx DI, SI, DS, BP ; Restore Saved Registers + 006D 5F 1 pop DI ; Restore R1 + 006E 5E 2 pop SI ; Restore R1 + 006F 1F 3 pop DS ; Restore R1 + 0070 5D 4 pop BP ; Restore R1 + 0071 CA 0002 ret 2 ; Exit & Clean Up Stack + + 0074 SET_VIDEO_MODE ENDP + + + ;=================================== + ;int far pascal scan_keyboard (void) + ;=================================== + ; + ; Function to scan keyboard for a pressed key + ; + + PUBLIC SCAN_KEYBOARD + + 0074 SCAN_KEYBOARD PROC FAR + + PUSHx BP, DS, SI, DI ; Preserve Important Registers + 0074 55 1 push BP ; Save R1 + Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 +c_utils.asm Page 2 - 1 + + + 0075 1E 2 push DS ; Save R1 + 0076 56 3 push SI ; Save R1 + 0077 57 4 push DI ; Save R1 + + 0078 B4 01 mov AH, 01H ; Function #1 + 007A CD 16 INT 16H ; Call Keyboard Driver + 007C 74 0C JZ @SK_NO_KEY ; Exit if Zero flag set + + 007E B4 00 mov AH, 00H ; Remove Key from Buffer + 0080 CD 16 INT 16H ; Get Keycode in AX + + 0082 0A C0 OR AL, AL ; Low Byte Set (Ascii?) + 0084 74 06 JZ @SK_Exit ; if not, it's a F-Key + + CLR AH ; Clear ScanCode if Ascii + 0086 32 E4 1 xor AH, AH ; Set Register = 0 + 0088 EB 02 JMP s @SK_Exit ; Return Key in AX + + 008A @SK_NO_KEY: + CLR AX ; Return Nil (no Keypress) + 008A 33 C0 1 xor AX, AX ; Set Register = 0 + + 008C @SK_Exit: + 008C FC cld ; Reset Direction Flag + POPx DI, SI, DS, BP ; Restore Saved Registers + 008D 5F 1 pop DI ; Restore R1 + 008E 5E 2 pop SI ; Restore R1 + 008F 1F 3 pop DS ; Restore R1 + 0090 5D 4 pop BP ; Restore R1 + 0091 CB ret ; Exit & Clean Up Stack + + 0092 SCAN_KEYBOARD ENDP + + + ;======================================== + ;int far pascal random_int (int MaxValue) + ;======================================== + ; + ; Returns a pseudo-random number in the range of (0.. MaxInt-1) + ; + + + PUBLIC RANDOM_INT + + 0008 RI_Stack STRUC + 0000 0000 DW ? ; BP + 0002 00000000 DD ? ; Caller + 0006 0000 RI_MaxVal DW ? ; Maximum Value to Return + 1 + RI_Stack ENDS + + + 0092 RANDOM_INT PROC FAR + + 0092 55 push BP ; Preserve Important Registers + 0093 8B EC mov BP, SP ; Set up Stack Frame + + CLR BX ; BX is the data index + 0095 33 DB 1 xor BX, BX ; Set Register = 0 + CLR CX ; CX is the accumulator + 0097 33 C9 1 xor CX, CX ; Set Register = 0 + + REPT 3 + mov AX, RND_Seed[BX] ; load the initial seed + mul RND_Mult[BX] ; multiply it + div RND_ModV[BX] ; and obtain the Mod value + mov RND_Seed[BX], DX ; save that for the next time + + add CX, DX ; add it into the accumulator + inc BX + inc BX ; point to the next set of values + ENDM + 0099 8B 87 0000 R 1 mov AX, RND_Seed[BX] ; load the initial seed + 009D F7 A7 0006 R 1 mul RND_Mult[BX] ; multiply it + 00A1 F7 B7 000C R 1 div RND_ModV[BX] ; and obtain the Mod value + 00A5 89 97 0000 R 1 mov RND_Seed[BX], DX ; save that for the next time + 00A9 03 CA 1 add CX, DX ; add it into the accumulator + 00AB 43 1 inc BX + 00AC 43 1 inc BX ; point to the next set of values + 00AD 8B 87 0000 R 1 mov AX, RND_Seed[BX] ; load the initial seed + 00B1 F7 A7 0006 R 1 mul RND_Mult[BX] ; multiply it + 00B5 F7 B7 000C R 1 div RND_ModV[BX] ; and obtain the Mod value + 00B9 89 97 0000 R 1 mov RND_Seed[BX], DX ; save that for the next time + 00BD 03 CA 1 add CX, DX ; add it into the accumulator + 00BF 43 1 inc BX + 00C0 43 1 inc BX ; point to the next set of values + 00C1 8B 87 0000 R 1 mov AX, RND_Seed[BX] ; load the initial seed + 00C5 F7 A7 0006 R 1 mul RND_Mult[BX] ; multiply it + 00C9 F7 B7 000C R 1 div RND_ModV[BX] ; and obtain the Mod value + 00CD 89 97 0000 R 1 mov RND_Seed[BX], DX ; save that for the next time + 00D1 03 CA 1 add CX, DX ; add it into the accumulator + 00D3 43 1 inc BX + 00D4 43 1 inc BX ; point to the next set of values + + 00D5 8B C1 mov AX, CX ; AX = Random # + CLR DX ; DX = 0 + 00D7 33 D2 1 xor DX, DX ; Set Register = 0 + 00D9 F7 76 06 div [BP].RI_MaxVal ; DX = DX:AX / MAxVal Remainder + + 00DC 8B C2 mov AX, DX + + 00DE 5D pop BP ; Restore BP + 00DF CA 0002 ret 2 ; back to BASIC with AX holding the result + + 00E2 RANDOM_INT ENDP + + + ;================================== + ;void far pascal init_random (void) + ;================================== + ; + ; Scrambles the psuedo-random number sequence + ; (XOR's the seed value with the timer) + ; + + PUBLIC INIT_RANDOM + + 00E2 INIT_RANDOM PROC FAR + + CLR AX ; Segment = 0000 + 00E2 33 C0 1 xor AX, AX ; Set Register = 0 + 00E4 8E C0 mov ES, AX + 00E6 26: A1 046C mov AX, ES:[046Ch] ; Get Timer Lo Word + + 00EA 31 06 0000 R xor RND_Seed, AX ; Scramble 1st Seed + + 00EE CB ret ; Exit & Clean Up Stack + + 00EF INIT_RANDOM ENDP + + ;========================================= + ;int far pascal int_sqr (int X, int Round) + ;========================================= + ; + ; Returns the Integer Square Root of (X) + ; Round allows the return value to be rounded to the + ; nearest integer value by passing 0x80. Passing 0 + ; return the Integer Portion only. The rounding amound is + ; a number from 0 to 1 multiplied by 256, thus + ; 0.5 * 0x100 = 0x80! + ; + + 000C ISQ_Stack STRUC + 0000 0000 0000 DW ?,? ; BP, DI + 0004 00000000 DD ? ; Caller + 0008 0000 ISQ_Round DW ? ; Amount to Round Result * 256 + 000A 0000 ISQ_X DW ? ; "X" + ISQ_Stack ENDS + + PUBLIC INT_SQR + + 00EF INT_SQR PROC FAR + + PUSHx BP, DI ; Save BP + 00EF 55 1 push BP ; Save R1 + 00F0 57 2 push DI ; Save R1 + 00F1 8B EC mov BP, SP ; Set up Stack Frame + + 00F3 33 C0 xor AX, AX ; {xor eax,eax} + 00F5 33 D2 xor DX, DX ; {xor edx,edx} + 00F7 8B 7E 0A mov DI, [BP].ISQ_X ; {mov edi,x} + + 00FA B9 0010 mov CX, 16 ; {mov cx, 32} + + 00FD @ISQ_L: + + 00FD D1 E7 shl DI, 1 ; {shl edi,1} + 00FF D1 D2 rcl DX, 1 ; {rcl edx,1} + 0101 D1 E7 shl DI, 1 ; {shl edi,1} + 0103 D1 D2 rcl DX, 1 ; {rcl edx,1} + 0105 D1 E0 shl AX, 1 ; {shl eax,1} + 0107 8B D8 mov BX, AX ; {mov ebx,eax} + 0109 D1 E3 shl BX, 1 ; {shl ebx,1} + 010B 43 inc BX ; {inc ebx} + 010C 3B D3 cmp DX, BX ; {cmp edx,ebx} + 010E 7C 03 jl @ISQ_S + + 0110 2B D3 sub DX, BX ; {sub edx,ebx} + 0112 40 inc AX ; {inc eax} + + 0113 @ISQ_S: + 0113 E2 E8 loop @ISQ_L + + 0115 03 46 08 add ax, [BP].ISQ_Round ; {add eax,$00008000} + ; {*round* result in hi word: ie. +0 + .5} + 0118 C1 E8 08 shr ax, 8 ; {shr eax,16} {to ax (result)} + + POPx DI, BP ; Restore Registers + 011B 5F 1 pop DI ; Restore R1 + 011C 5D 2 pop BP ; Restore R1 + 011D CA 0004 ret 4 ; Exit + + 0120 INT_SQR ENDP + + ;================================= + ;int far pascal timer_count (void) + ;================================= + ; + ; Returns the current timer value as an integer/long integer + ; + + PUBLIC TIMER_COUNT + + 0120 TIMER_COUNT PROC FAR + + CLR AX ; Segment = 0000 + 0120 33 C0 1 xor AX, AX ; Set Register = 0 + 0122 8E C0 mov ES, AX + 0124 26: A1 046C mov AX, ES:[046Ch] ; Get Timer Lo Word + 0128 26: 8B 16 046E mov DX, ES:[046Eh] ; Get Timer Hi Word + 012D CB ret ; Exit & Clean Up Stack + + 012E TIMER_COUNT ENDP + + + END + Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 +c_utils.asm Symbols 3 - 1 + + + + +Macros: + + N a m e Type + +CLR . . . . . . . . . . . . . . Proc +LOOPjz . . . . . . . . . . . . . Proc +LOOPx . . . . . . . . . . . . . Proc +POPx . . . . . . . . . . . . . . Proc +PUSHx . . . . . . . . . . . . . Proc + Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 +c_utils.asm Symbols 4 - 1 + + + + +Structures and Unions: + + N a m e Size + Offset Type + +DP_Stack . . . . . . . . . . . . 0010 + DP_Text . . . . . . . . . . . 000C DWord +ISQ_Stack . . . . . . . . . . . 000C + ISQ_Round . . . . . . . . . . 0008 Word + ISQ_X . . . . . . . . . . . . 000A Word +RI_Stack . . . . . . . . . . . . 0008 + RI_MaxVal . . . . . . . . . . 0006 Word +SVM_Stack . . . . . . . . . . . 000E + SVM_Mode . . . . . . . . . . . 000C Byte + Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 +c_utils.asm Symbols 5 - 1 + + + + +Segments and Groups: + + N a m e Size Length Align Combine Class + +C_UTILS_TEXT . . . . . . . . . . 16 Bit 012E Word Public 'CODE' +DGROUP . . . . . . . . . . . . . GROUP +_DATA . . . . . . . . . . . . . 16 Bit 0014 Word Public 'DATA' + Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 +c_utils.asm Symbols 6 - 1 + + + + +Procedures, parameters and locals: + + N a m e Type Value Attr + +DOS_PRINTS . . . . . . . . . . . P Far 0039 C_UTILS_TEXT Length= 0027 Public +DOS_PRINT . . . . . . . . . . . P Far 0000 C_UTILS_TEXT Length= 0039 Public +INIT_RANDOM . . . . . . . . . . P Far 00E2 C_UTILS_TEXT Length= 000D Public +INT_SQR . . . . . . . . . . . . P Far 00EF C_UTILS_TEXT Length= 0031 Public +RANDOM_INT . . . . . . . . . . . P Far 0092 C_UTILS_TEXT Length= 0050 Public +SCAN_KEYBOARD . . . . . . . . . P Far 0074 C_UTILS_TEXT Length= 001E Public +SET_VIDEO_MODE . . . . . . . . . P Far 0060 C_UTILS_TEXT Length= 0014 Public +TIMER_COUNT . . . . . . . . . . P Far 0120 C_UTILS_TEXT Length= 000E Public + Microsoft (R) Macro Assembler Version 6.11 07/03/14 12:38:18 +c_utils.asm Symbols 7 - 1 + + + + +Symbols: + + N a m e Type Value Attr + +?x3 . . . . . . . . . . . . . . Text ?,?,? +?x4 . . . . . . . . . . . . . . Text ?,?,?,? +@@DPS_Got_len . . . . . . . . . L Near 004F C_UTILS_TEXT +@@DPS_Scan_it . . . . . . . . . L Near 0046 C_UTILS_TEXT +@@DP_Got_len . . . . . . . . . . L Near 0016 C_UTILS_TEXT +@@DP_Scan_it . . . . . . . . . . L Near 000D C_UTILS_TEXT +@CodeSize . . . . . . . . . . . Number 0001h +@DPS_Exit . . . . . . . . . . . L Near 0058 C_UTILS_TEXT +@DataSize . . . . . . . . . . . Number 0000h +@ISQ_L . . . . . . . . . . . . . L Near 00FD C_UTILS_TEXT +@ISQ_S . . . . . . . . . . . . . L Near 0113 C_UTILS_TEXT +@Interface . . . . . . . . . . . Number 0000h +@Model . . . . . . . . . . . . . Number 0004h +@No_Print . . . . . . . . . . . L Near 001F C_UTILS_TEXT +@SK_Exit . . . . . . . . . . . . L Near 008C C_UTILS_TEXT +@SK_NO_KEY . . . . . . . . . . . L Near 008A C_UTILS_TEXT +@SVM_Exit . . . . . . . . . . . L Near 006D C_UTILS_TEXT +@code . . . . . . . . . . . . . Text C_UTILS_TEXT +@data . . . . . . . . . . . . . Text DGROUP +@fardata? . . . . . . . . . . . Text FAR_BSS +@fardata . . . . . . . . . . . . Text FAR_DATA +@stack . . . . . . . . . . . . . Text DGROUP +CR_LF . . . . . . . . . . . . . Byte 0012 _DATA +False . . . . . . . . . . . . . Number 0000h +RND_ModV . . . . . . . . . . . . Word 000C _DATA +RND_Mult . . . . . . . . . . . . Word 0006 _DATA +RND_Seed . . . . . . . . . . . . Word 0000 _DATA +True . . . . . . . . . . . . . . Number -0001h +b . . . . . . . . . . . . . . . Text BYTE PTR +d . . . . . . . . . . . . . . . Text DWORD PTR +f . . . . . . . . . . . . . . . Text FAR PTR +nil . . . . . . . . . . . . . . Number 0000h +o . . . . . . . . . . . . . . . Text OFFSET +s . . . . . . . . . . . . . . . Text SHORT +w . . . . . . . . . . . . . . . Text WORD PTR + + 0 Warnings + 0 Errors diff --git a/16/lib/modex105/DEMOS/C/C_UTILS.OBJ b/16/lib/modex105/DEMOS/C/C_UTILS.OBJ index 075a2da12f6953504b507617b2afd9cd61d62ad3..ee6bc67f4dc77502ec41d300395665e4ec4b1b1a 100644 GIT binary patch delta 232 zcmeBRZD*}-;AP-WjxR0A%qiAOEY4+{rpCa)8t>v5;>hOW9^@Yyz~dYr8sg~_93SEu z5yAqJU~%?$aXmkSoxwwok%f)%K8Pj4z{JYo_-+= z3=G_!ex4!mL5_Yd{=SbG7`Whae!-SN*$_`(*PwW3|4_dW1x5zmU}s0acyHH8Cx6Ev zml6gBzF^mo_%KfwSO0ilpw$UL10Y7l15KaAz`zcq;)4T&-ZN}G8^y>P$#6m;bh0i} MD4SFl69YpD0IdQ%n*aa+ delta 190 zcmZo??O+vY;AP-WjxR0A%qiA$4E9Z%rpCZ9QA*B{HQvQB#PR$Lb_NeUMrKyVhai>+ z0~-tDuURY%O#hkUCsZ&nF!BaFJNm_YyGALxKPB6)5SkH zJ|GAv#K6G773ApW;_n*|vU+Qxyc!2N9n{@L3cD5qwebS;PmQL{UWW!I`<6G!~ZSyEEr}b7tn7 zf#VpY4i`@p2M@?E>mDuUymV$_FuA{&&g8tHn1VAIbvw0s`>9g<6zE0t(XKMmUJw<0 zHy?s-iluVL5`exDQx!objKacF3Q)yL8lNHdY z(+7JBZZH}JozmniXxuTJN{Wv@-hiJ^M?s}hMq&mu*DsS$~{0n-MBnhI>?z>CnI#*j%$*se|?lw^L;Am0jr`8vA;!PtUtas20*?Hi0*+i(!2Hh%{}P54 z_G#P|n2N?_722Je1Nq{j!*c#C+FFi3V9shrA1PormzFJYr&ErZQ7#snRblNA+d*;C z6T-HvU7lI$73~$+6c;V1EivB_IdG1j_Y7zZ<{aoN{XZ!7^WX&1Qo0MOv0S&_QE5Hw zm^9=@G|V+G0ZTGHjWd zH094>s_NnCv^9gq`OFt0J}$u|(Chr?lQ$-gku%FnC7^3dP43Vsqdz2BReRUM4r z&SY>OS3z^Vxw#t8%}BEo)hj%!GcZ>rq*MyiYe!nkJm^fWUJyos>YWht>1?8)m$MPs3x4WckJ5rSNp>pVkJ&l@Pnu910PcFYZ} z=06a?@BBdlx8ySgOm|rU=eI`yb$hznh;_vxm~+eqXi%#~18?D2sosvCf#gltN!GXq zJMWlTO@sHZ<$b%oe<#F2_sDL&1>fD0zxhchKAID9Tti}mO5g7U!dKIx>8Wj~Y(D_9fe^$) zq~HZ4*hm{H+YdxCl6aCpB84F2g+^&ZW&6Q7IXMYV&Q7Fo78k^wqz#qr2Y^>#10KL! z7#N1J;x<&aAB^Fh;lVH&<^r)9*zC9smF)*>d9b{dt%dE`E^_?PL#dC+Ix03v zg)s=;JrU8Lq&#;GQ)M~QO6RqSZwB9WAV;TF@YMk&t+()|8fhN>SZXNw zlH!w9V#CCj>_Hdt%dE`E^_?PL#dC+Ix03v zg)s=;JrU8Lq&#;GQ)M~QO6RqSZwB9WAV;TF@YMk&t+()|8fhN>SZXNw zlH!w9V#CCj>_H7{>8uXzAFgi%Sp0#S9UOiw@r6qJ;?Up~OJ4lt2*-q+%(;1*)`YL6<^l z0_P%1QmCL32|@;yfE5f#sbq;zU0mYO!QtTT|Jn}4p)}!_%O%hI-uvB`NKzTmOZm^6 za&+SH$_Jk3$>14Bc%E@?oO48{(^0$K*6Hb~_V@QytyWd3R8%Y$wYOP*f;zUajv|)eBabX5k$|gK%T%kGg21?zDV;XC zuE}wtzNXYhDEC7s=WQsx#MFh9IhLMoOOH!B3q$RqggK;c$p0V@Mb5|{kpD!!RFdZB z>5-#;g3G%~g-yBPft--+b_sx=zm84J^GjEUm%|$?~-@O{~Gbu^6#;H zY+)TmEWt+}Sxh1U_YQl|QW)-{q?>S#V+t-DFb?A%Gye8pt?@apVGY(UDBWH_)S^* zi2ik%vqSH)F7;6-DriSD3Y5`;#+1{rlImyod#N|-!TuZjZ|uLhaKQ6Y=hPojze9aM z{Q~vV)F-KT)xI({&rOH)sed(Xo|x7S`90N5EA%aFnsRHV4E@vZua#WBlDF8_SfQze zf25IDbq(isG0Bhzx+v>pz5>KYhPSD&i~@d4d; zdbv~oe#Bx8#S)lBfJP+1EE0Ouh$)RFRMDuw#}mZjn8X`w=`+1vV?64K=>Pi@y3k`! literal 0 HcmV?d00001 diff --git a/16/modex16/DP_PREFS b/16/modex16/DP_PREFS new file mode 100644 index 0000000000000000000000000000000000000000..d27b7ecbf4c5a4a5c83733c1965a51f240836a5a GIT binary patch literal 324 zcmWe&U|{(FA4o7T2!KgOMlb~>8aRLqZe$TG?41l-L%IZSFgU3!3IoxSFBm?A{Ac(e z#K3SK#I9xCC*Z)ePe6yEfWZ-n!+`i3yChcwkj{V4@WF&d-w!16i6 z2TvYJE@sAmyqAFTOMrY~pjmnU7(TG`F}>Lxdq{A}2Zj%lj0FrzHyIAp0oC3D;v5#n z+w$C7Lmb&9t(F7bu^x!m0L3q}?GxC@%k;((XdcLYFdW0dc$)|4u27}|ZjJMg R*cOH1!)t-^w}2RC4gg3kV#ojh literal 0 HcmV?d00001 diff --git a/16/modex16/DP_SPAL.$$$ b/16/modex16/DP_SPAL.$$$ new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/16/modex16/ED.PCX b/16/modex16/ED.PCX new file mode 100644 index 0000000000000000000000000000000000000000..41e56317fb0a8f2d6192ed73c49ba29ecf00a739 GIT binary patch literal 2086 zcmeHH&2HN;3??PZqK7?7Z+(F6Y5Y!o9m#*OtNc%kKhwWEJ@0TN+EdnZwx=DL8#X(-r8~Z*E#)oS zB(~*zOB-s~-iU2@L)TQZ-HEOFnnuWeFTUoH66Ax_oM@nmAEe@edPt9udRjqxg0!NJ zI<^O~9e31H9=R4DcrSr{Es?VpXyi^T-wE3eP)iLE-wXR&@!X4#+)P*!{sJVysG%B0 zBeWaXjX-LuD2u$7U^n=#0htO|}u&-@*$z5QJR|eiuFX z;INN^*fqF-w~7>CxpMwN{K`cRlioXjFTOwPgYyUR!&y)6Ajx5CH4i*O9o?cOcMnoE z$^#GXK?Z2~r1{Q0N#~Hhj3`3_e`+cr=N11zvU9{kfxc^j=Gb|GM1Io*7Kk=uCKMI> zui`5X#px|@lmZp=kBU-+m)atyg+cXEy@vDZB^ru`jo%?_4WcZh=Bp2HdC{oPx;~u723Yl{#`Qgf}3thhx*i~?3}q8rR=85R=uVw zP^;-i#@AE?)lb(pyr#4_hUsq4by#+4aL-3f1+C4DLDDgx;{oMeQ0%3HLI+5828&Dw z$(FKCeQ}7Ev+Zf{EMsU-TJk+%LVZjrVPsuiUX~@5WqB;itE;P&%Ht6a4Bpp!2L9&^ F`~prXe69ch literal 0 HcmV?d00001 diff --git a/16/modex16/GFX.PAL b/16/modex16/GFX.PAL new file mode 100644 index 0000000000000000000000000000000000000000..e98ae60e3d21a9409f12ef6b1f2ad3625750e734 GIT binary patch literal 768 zcmZva!3shl5JhKEB>9@=fri8dTLeWQk6P5D&HVpg<+M_8JdASB=t`nmkGkmbuvWKd z$7rQ>MOAD6tsd+2cDr@XdGDEdp63ukN(sQ_a=Biw_xrt+@_N12b^Xt)kY>__>gCF! zl$E4D)QTn@i=6eAb;Vn2qWPx1XwtDLMW03AMZZPW_-c7;d1^13bS#LlBQPNn zU_=mucIZWujs-JjMr0%gj0BG08NF!Iu?PXDfD~{JfN@4h2q*NSNymanHYAQ@A`xQ} zazY#FMU#$&bFz0bIbkPau((OwUV71_W8u9_UJhQ4Uc@+xKZu{C7fm`A_RUB218>tx AO#lD@ literal 0 HcmV?d00001 diff --git a/16/modex16/MAKEFILE b/16/modex16/MAKEFILE new file mode 100644 index 00000000..b5a3fb34 --- /dev/null +++ b/16/modex16/MAKEFILE @@ -0,0 +1,17 @@ +FLAGS=-0 +all: test.exe pcxtest.exe + +test.exe: test.obj modex16.obj + wcl $(FLAGS) test.obj modex16.obj + +pcxtest.exe: pcxtest.obj modex16.obj + wcl $(FLAGS) pcxtest.obj modex16.obj + +test.obj: test.c modex16.h + wcl $(FLAGS) -c test.c + +pcxtest.obj: pcxtest.c modex16.h + wcl $(FLAGS) -c pcxtest.c + +modex16.obj: modex16.h modex16.c + wcl $(FLAGS) -c modex16.c diff --git a/16/modex16/MODEX16.C b/16/modex16/MODEX16.C new file mode 100644 index 00000000..05ac9d92 --- /dev/null +++ b/16/modex16/MODEX16.C @@ -0,0 +1,420 @@ +#include +#include +#include +#include +#include +#include +#include "modex16.h" + + +byte far* VGA=(byte far*) 0xA0000000; /* this points to video memory. */ + +static void fadePalette(sbyte fade, sbyte start, word iter, byte *palette); +static byte tmppal[PAL_SIZE]; +static struct pcxHeader { + byte id; + byte version; + byte encoding; + byte bpp; + word xmin; + word ymin; + word xmax; + word ymax; + word hres; + word vres; + byte pal16[48]; + byte res1; + word bpplane; + word palType; + word hScreenSize; + word vScreenSize; + byte padding[54]; +}; + + +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; iwidth; px+=4) { + offset=px; + for(py=0; pyheight; py++) { + if(!sprite || bmp->data[offset]) + page[PAGE_OFFSET(x+px, y+py)] = bmp->data[offset]; + offset+=bmp->width; + } + } + } +} + + +/* fade and flash */ +void +modexFadeOn(word fade, byte *palette) { + fadePalette(-fade, 64, 64/fade+1, palette); +} + + +void +modexFadeOff(word fade, byte *palette) { + fadePalette(fade, 0, 64/fade+1, palette); +} + + +void +modexFlashOn(word fade, byte *palette) { + fadePalette(fade, -64, 64/fade+1, palette); +} + + +void +modexFlashOff(word fade, byte *palette) { + fadePalette(-fade, 0, 64/fade+1, palette); +} + + +static void +fadePalette(sbyte fade, sbyte start, word iter, byte *palette) { + word i; + byte dim = start; + + /* handle the case where we just update */ + if(iter == 0) { + modexPalUpdate(palette); + return; + } + + while(iter > 0) { /* FadeLoop */ + for(i=0; i 127) { + tmppal[i] = 0; + } else if(tmppal[i] > 63) { + tmppal[i] = 63; + } + } + modexPalUpdate(tmppal); + iter--; + dim += fade; + } +} + + +/* save and load */ +void +modexPalSave(byte *palette) { + int i; + + outp(PAL_READ_REG, 0); /* start at palette entry 0 */ + for(i=0; i> 2; + } + } else { + /* use the 16 color palette */ + for(index=0; index<48; index++) { + result.palette[index] = head.pal16[index]; + } + } + + fclose(file); + + return result; +} diff --git a/16/modex16/modex16.h b/16/modex16/MODEX16.H similarity index 50% rename from 16/modex16/modex16.h rename to 16/modex16/MODEX16.H index 4502fa08..7bd92bc1 100644 --- a/16/modex16/modex16.h +++ b/16/modex16/MODEX16.H @@ -7,18 +7,49 @@ #include "types.h" /* -========================== Types & Macros ==========================- */ -#define PAGE_OFFSET(x,y) ((y<<6)+(y<<4)+(x>>2)) +#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) +typedef struct { + byte *data; + word width; + word height; + byte *palette; +} bitmap_t; /* -============================ Functions =============================- */ +/* mode switching, page, and plane 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); +void modexDrawBmp(page_t page, int x, int y, bitmap_t *bmp, byte sprite); + +/* Palette fade and flash effects */ +void modexFadeOn(word fade, byte *palette); +void modexFadeOff(word fade, byte *palette); +void modexFlashOn(word fade, byte *palette); +void modexFlashOff(word fade, byte *palette); + +/* palette loading and saving */ +void modexPalSave(byte *palette); +byte *modexNewPal(); +void modexLoadPalFile(char *filename, byte **palette); +void modexSavePalFile(char *filename, byte *palette); + +/* fixed palette functions */ +void modexPalBlack(); +void modexPalWhite(); + +/* utility functions */ +void modexPalUpdate(byte *p); +void modexWaitBorder(); + +/* bitmap functions */ +bitmap_t modexLoadPcx(char *filename); /* -======================= Constants & Vars ==========================- */ extern byte far* VGA; /* The VGA Memory */ @@ -41,4 +72,8 @@ extern byte far* VGA; /* The VGA Memory */ #define INPUT_STATUS_1 0x03da #define DISPLAY_ENABLE 0x01 #define MAP_MASK 0x02 +#define PAL_READ_REG 0x03C7 /* Color register, read address */ +#define PAL_WRITE_REG 0x03C8 /* Color register, write address */ +#define PAL_DATA_REG 0x03C9 /* Color register, data port */ +#define PAL_SIZE (256 * 3) #endif diff --git a/16/modex16/MODEX16.OBJ b/16/modex16/MODEX16.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..a8b6c13fb8dfb9f5c6318e3b39942ef4b52c748d GIT binary patch literal 3522 zcmZ`+eQ*=k5#Q6DBwLn0aSWxT5r5!@Fi^V?zDxjra6kZm$(#u!z7h5r8)Qi%on(_b zMvRX{XBkRDOK5N!6AHs5ohD3x9H#9U%Q2)(GqK$!E--}e;0k6aP~$PK+{_Cp>@|LX0oIN_v$h{Gu!N0F05Ci_b8J+^6;)B2>@b^#J zc|Gr`@_SYGp~kW78fS%2mpOYzRcT-%?%uTPT3*T{+QiK+!84<(kLc<*@16|6sjknF#Xa+*#%J)W|+Xe{t>>@B{)WTmda|oFyAu8 zV}jZzWTtp5l}@*%)?F=DJ2sdeKO)L@3$_Ymqn70sr^CM4vdQ7BwN&8{ot7$_qrxs& z=B{_SEUxl8Rh?(@qerRMo<5cWK*jks*sOxM3gf{8z=h^C1cSGhtN=r`L!3LCM;y4N z+3@O-1Q;WGtvLw{POs>y*^UipZD}{!B0v|&@)>!3G zM!VT8cLdJk9508Iv&4x*ly^Y0T|TSLQF@Fxur5@n7}U*0oZKa!mHWCcc3-6W4jXze zQcT%v582k@K&VXzn%{xGjH_~o@)bE9qf)r8WjYZ5rJ3mRe4L9pqx3quSb<|Bu4|FD z8^<5e_0KuO?B-NRRxh+wunXm4q21=dWNIYY;GmRL)u3pI&GIRk8;_%tVE++hU73U7a!_15tV<;@P z76r><#wvDcigQ}xL1NI$hdoD@fX2F>ZF`M6!hJpzC(-e_x^a8>Ag-xg8BF8{Ne8Y?tbbU+BX<% z7;1`7518qtx}5NrVM8N3%!ChU#xrQV7FuhO9Fn`0#gN%^|E}DT6X+Z0+ave3Er#$5 z&ysNvXH4kG7IbJoNA21fB6nX6+7gE-xcR97+UH8a<`ei!00~-1v8WW$i1T>wkL z58KXpjq+(!5YE~*;+vCsE}XPrkx$?C4!|N(6ll+Q`5Wp&6Z7J?0i-S1;=4$A5WcJc zIjum)MZ#aHDS-yYs0ucc`x?W=N+}rJSvZPuRCA`zUvY7rzsB)Cjt{vwsg*NHUvSi& z=4D{4QF{OnMwc7wd?nU!p{`oQsnRVVW?Fdi1&qC&2SX+4Uu51Oh~>DcvfS?UpxAE- zZtu}p!sU~hJ<2Jy%JwK5~Ly| zuICaZflKP#NEl8oxpOmFyoC~Pqr@&QMf#8%Cmq6eaReC&&65xv(!CL#BsCLDZPj9q z(_Mj=3@#JAmNCSaF5-bz$s6l|{GSs*w^1Mu5}Dih!-w0nI3vi%0ZveWH(i6Pf5q_Q zEKJKQqlrfvt9%lVz{s3dBXds6Ew$XMF~XGdQ}z8QbHYzOg^8i-@4xy$Yfl+1uYyD& z0&xU^L_}Z$A~1zZm0m&wW+DRfFv*r+BIe_|1lQ$=Uk&%1y!gD;HM6F^0n(LRR#P3v^n(J&o;AB|fvc_eJT*$mv)TYiv3mLKqR-b_fX8=a6d*&QyNF}Eyy+?HJUZ-@HBRCvCR5{Y-AccgsZwB>$_iBC$sgL zU#m()RFbCr>9Or<(oShvMH+=sO29D@JUv;uKj%cXUe6T${0xDYTO z68CWC&W{Q4AQC@A;!!T4Ohv{c2%C5qB*+}qXJUUL_69oqm)reA?cT&d$bV%~lz1x4 z1WtWHN$13g^6lTv`&+%yo1Degd(6QGk-8svC31!hU)DH^SC1U`VeI`UMuv}%jA%z_ zzjBA_>YM(C|LVQd{6l7MIw~$}Q18_Atr4K#`nh_aGOl(Hb`J*2-lXmZjBNNkk-~LT z4uhYKk&OD=+JT?7JP(oqZ^%z^lyT$n0g-}*DM{Ln^HFYGcI(f8vKz=tFW7KryH6w! zy&%365BlK^zQ1(n)19ASO+2gwOC_wS+En?X28d-lK|g<_}6NPH!h6LPWpH9A5(rvh39@uGmO8Iu`>=RMtg4q zyl^Z5DE-401(4H>?T+`5%FUOn@AW{y1pbd|Y+}{iIi3*tm+T{<#yfY;-X?rwivI_D C%0f&4 literal 0 HcmV?d00001 diff --git a/16/modex16/PALETTEC.C b/16/modex16/PALETTEC.C new file mode 100644 index 00000000..340a9303 --- /dev/null +++ b/16/modex16/PALETTEC.C @@ -0,0 +1,16 @@ +#include "modex16.h" + +void +main() { + byte *pal; + + modexEnter(); + + pal = modexNewPal(); + modexPalSave(pal); + + modexSavePalFile("gfx.pal", pal); + + modexLeave(); + +} diff --git a/16/modex16/PCXTEST.C b/16/modex16/PCXTEST.C new file mode 100644 index 00000000..63ce473f --- /dev/null +++ b/16/modex16/PCXTEST.C @@ -0,0 +1,33 @@ +#include +#include "modex16.h" + +void main() { + bitmap_t bmp; + int index; + int ch=0x0; + + bmp = modexLoadPcx("ed.pcx"); + modexEnter(); + + /* fix up the palette and everything */ + modexPalUpdate(bmp.palette); + + /* don't show the drawing page */ + modexShowPage(VGA + PAGE_SIZE); + + /* clear and draw one sprite and one bitmap */ + modexClearRegion(VGA, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 1); + modexDrawBmp(VGA, 20, 20, &bmp, 1); + modexDrawBmp(VGA, 100, 20, &bmp, 0); + modexShowPage(VGA); +// for(index = 0; index<500; index++) { +while(!kbhit()){ // conditions of screen saver + modexWaitBorder(); + ch=getch(); + if(ch==0x71)break; // 'q' + if(ch==0x1b)break; // 'ESC' + } + modexLeave(); + + return; +} diff --git a/16/modex16/PCXTEST.EXE b/16/modex16/PCXTEST.EXE new file mode 100644 index 0000000000000000000000000000000000000000..58dc4d3f3334d746725b5535f9376445c4d67a2a GIT binary patch literal 15908 zcmdsedwdi{wtv6okq04Q3=a_o#jFw0j3OA5K$I|}tA;=@AVOFaRIUncraMt@2*ZwC zQ)z;$dtD!^>-u)p^|iP=1h0gYW_VbdkQHK3P(bLRBL;#=n1t!yw|Wv+-MydR@9$so zneOVU>QhzcoI20y8y8IyJc3hDgeJkVJc{5Jgr{5r>Joob@VptnOOpg)Eq*WHw+FwW zzmLr`zs29sqYxe|7}>7Ux%0|yBHx5M-Qn|u`pQ1z8He$q1w$E0@-C0NZ!VhpVn?!E*M$T;Je0f(Kz5- z->9V<=?>$Fv*6c)>L@rz(4t0EAe~Ff7u|ddEeU4|#(L+%(s}k2)0%zVLapy)efi1y zvXkL-!KhC{*G0F`aF$>!aq_h+uzQZiD8x7LToBjzhW3q(^)poVT_fkt+wXB8nhnMT#Urn6<872v&T9NiVe* z7?uR%B}Z5mqGwqpVMQ>Wa4ak(G^a5&l{D3Uf%`B*!yU4*$Nj3P_3)9xZqmW;Z@YQ@ z2kuwhY7fVhQ!s9EESy_Lnn?#~Z~dzEE3y3@XWLhzQhsxyIUlg+)zSt@;In+dUE7{> zm^6hyl8sev;IJf|AsC|_3kOk{N+P5zM#@i-;y%(Y``pCWL$=GlWZ<>g7Z=Q=xGx^8 zi7SEY>x$!2@u}d~^4sF>uW}9>zqRzrQyYD;yvm+Hhwkgk^9=+hzT+gc?a(_4X=*zt zc98B?v(*&a#QwUn)U4W3g=R;nSuvT7nI?i6m##7YZaPE00mXbNF-rxr1lGTi7naT? zl(dEm1@G?OZqjs3ZF^7q6Qr%7P%tOheYX9(KIq}yZOjsEMhBp$|Cde;jh5MNgL&ZJ z_2_9g-zy0x3&vu32whSw*zdsleVU7GHKYx_6(MoIWUTR zBJQtKE^MhqUH;n2uXvka9t_WyjSIy&Qd!*m$X+X$!z~#75>`5oZ1e68M`R<{iTe)O z$a9iiVq2~2nsqTjuKqTfb%tZ*Q)ymUkc})SY2uqae34LMeCiB+D1|M{IO-%VivTlK zFkay>%g8peM_1N2sf>D}8nmL@(@G8LZ55ZaLBqz2Aa)T(4 zK4V7;=`x;AS!y=$wGNlC)XnqdEusK2@<~4xk6u5(n@)-UYyxQx*~mX2a@=4c#?|10 z@OIf4w(i@YKqxR~+=X3QlUQgy7FzBYL|COmFRs}V6tL2I z-zkHn25WlVYG(K^=#-02lJ2W9UQXt?z21S1GuhWyNPLx01CxC*l+k7w4UvnEgWPV>yuR!y0| z@}3o*!2JPr#XXmJN>*2>D_5@ycxJ7>_x_5NcigFZF1#(wo5$T z+$*n~a#>E!WtR*~zUZQhJjFNNaD!)AAh7a|Rrjn|rFxdHP*>chu2_!Q6|Yu3D^{)6 z?zq!)&x(6iSKN=f+g7g&m-QP2wXG)dUdn7u7`XGIF|5+32+u+tbdY(pbyYdw_s*W@j63$H&f zk~WcMJ@=xxu`!!&`X!sV;lReo)^$SNjn;d@z}uegH|sU40dr}}(q~`_WX6Y>hqGB! z<*U12ys+`Lw}sc{Y|3F1vz~uh%&N_LMI@*5<%&x;j=xyQ?(u%BE5kgV0xU5}FOmwb zoUVzpA^hLaVz_Dt-|+cxe^HB(PqN6g?Huw>F)zN_v58#ru1GNS=9R9k^X2T* zZwuY8g=TERLPv+cOnPCHxFPLt;tOHi8pIdg$L#~r`)&A(q!$`dZW6;5v{foGye#vHPusY7Vq}muth$_oJ@Tl6ehi>}a^a9Tp4NL_#MlB6|kjz)bte ziR{+vHWjjo3roU+&@fyu9!p)g=>|5jB#ddcFQmJ64QlO-60(PUs$++CV#&mJTrWbo zOD}Q~-$}iQD{;LDD!fmhjhdM5s4we;y3~Egj8{^1Ung&5p0gh1;?zaEQc&iieq{OPN8BF*ZtnzT&p{u z7Ap(%X-|pkd(;ebthdn~og0i1-+)svKO@tg7WHXQpj|r`CW@e51NnX;1#qvkEr^B) zKnQ}lPro6V08Z}dis2hzlb~07imk9F=A}I?RylN4F&hYq=J#mZoCXN*0fHEw z+!Eb)rgUBz2DnL|Hs6VrP0ekta_br5$=s%@S)^N6B~+&VsPYoMO8HsU+yqv%vlFXV zlX9CYZ{dsRHcQMO1HACx0X!=KkYbFjiGeHs&e3Ajrx463510yICna+NRHc<;frHcQ zF#qrZaP%!S`4ADCVg86h1T+)8mUjoK8Cbthb?0Rsk+czHRGpGv5g3-gOdAv2@f$OT z%rw8Pas+pX<^}mx8VZs*E}SG7Eot7}U>R;LgSb`WLp1|}TI}7;_pN&4`rYbv0CZd6 zNdDx&So2u^s){33ZoAKHvm;;C+Sgm^d1ec*0}rH{&H1-#AENGT^Lv4={k3_adM3)Ka|k0tN!c~+&nWPx!(dgwzpDRLKBmU^e{ z6zJ7Tq$pVsBD0->fCqA;n^(<-*U&?QYAW;}>GJM_=6&CZ?Ua;Gx`2=-MF@T@ny>Uw zQ5^-}jd#sRP3PmCh4C7KqFEoFD40i63(aGugZDM@cGqxkquDq_CkaOW9`bp8SsYD; zaogB(CGbtXjYdW~-wf)=k~(E>&SAYcPMWX{92RaZW_u~TzxOQcW^7&3tdC#lgvB{> z>msLqE@(YHuS!zSBL~bAyrAe4%&&WjoU-cX)>fDCl1RGX1A&EH5Fj%aItktfA4Itq z)Sl|?F%SG?l8GrkbH?7CE?8FW(J~7Pex1c9t#&p0;WPyAa20xKY27$XHOC@-WIt&m zCyn`7nE45&iCHdILTeQ;PfwA{qo(5ORGneLV>Ap$6Uf-F`xT-b0=IbZsfefjR~_=xx^* zyPqWG1EdvpD3mU+ThI-Eqzr#N~bZksTp%ZHH`&Tk1`Q)#B3?61IC4*BhO<{XarVuCO!CwPbRQ|L+?rE;`W zfc!!aj#F&~S3&;diY4&VY4B(qOfP{(m5~3Z_+lR&WRaUVb;Yt%Vp%M^Yyhrjc^u$8 z>feV74tp$US5$a+Cvim^>#aO#%NSo8)+YrC$P!(Iw1k#-EH7>^H&CR_Y@GX(1#muS9ZAvjPI(>9qyq;k%ii?GEm z=z8Et1dL{ZwDjKIXK!~o`tFZt)qqL#*r*$%&gTLti=&QHN1duKkn+mn91XxhkIw1V zLt3-(G!>NiDKdbFvVrUclFg}pbOa7KX@AAvgv=^ZP_TC@L;}c%Z4EupFG!V+oP8iY z?*?px=$EH*sc;o1IjD#*KxKlLDW_tRdytBqpyJah(HWMF;HSXREBhh5ShNsyRZ~UZ zKsNM}FBZ+QY$>rx$CmnBY{fYCUMoVuxNP#}MIv$3DcpVJTYhY44OV~YzjVmR z=?TTgYUg2bV5IcuuPg}P?ikqUuhIDsk;YM8-X6WysvR{8WXav7Jrd2cAbV|}+%G+u zyQkWzjmq6tb(X$X(Pt}@U8q_+OjB~V1zd1#pqnYS%XcC)OZFVe{BBTW@j4(e;z!(z zOoy}?+?A<_P#plpz&uX%7F&|!hhm}zNg+L%9U0S_kP$;@hid8vh9R0wBX3wJW@#62 zRC}=H6FbGYk{fn=*YDOk*Y8+kaJ%6Nr}>px2B3kPQ2i|@(BxsZ=_`@8C%N_O>w$|) ze5b~=LFjZ$_MIZTP~^6b!bvd}++z=GY)|DwI=Hs32jsYg^$o zZMl|@V65w(|ML;5{yD;YSsj1X4PwB-VY9)p97eij9>+ivE%Rt%AdCZF0n7S5S5@KA!GQc+;g(E9o3g)cz2tx=C)Ky zqzMu?w_E!YI+2@_c|UWHbz_=dB>^<{AE{Q%cZXKu#!hO*TwCl_Y=gHWN2`R;aj8cU z)$jET0x5hjPP)am9+#-Cl1Gt@yd_Rewn0f4i7ZjbS_#^M4}n?7bVWWJsxEhrRvvP)!lOR5`+glIjwpW(uhG;sxpjv3923QrZ+wW$W&3x6f z)1V*7Vqg{MRY;W-9cz^)jM*nduLUbM1(03j00(-4_gbvLe<(m_X#M>9>U4cvs5vuI z1e+mJbdq0s_@xgLuX=z~$3tc&sqP|J2kDBqENdymAc13QHexVyYiVf469^EE*2g~~ z>PtuJF0tJq33<-vMNQFNoPW8s1LML)nnF!7h?(0IaCjTJ$=PJ(wp2_4?nZ^0#^;Ty zh~{M;lL9UsS5EX%@Q(ICI-_fLli7h)K|qv*W^_VJxI#0Y7vmbV5;!pWA67jy|KnWj zbpbgt!ZLaI1$dAK8tUZ~j`@F(=7K(}isjPE9oZC&Rqv1IwpaZRpE=(@`&1{ltF?TT zigj0gbzE%EjcBt%zPJRd8(PgJ*Tf?Z9>j~MiUevQ*|Mx*($$#j&NDbq7W^-@@i6E&3?qKBwhRzJ(5L4h5TI zFX@1c4y}dloQA8Q%FzlTVaLF7IgB<~dds<`H(<}+0SP}K+fFOj_3E(Ta#t+jD&F7{ zH@A<4JJCgAMi@Z?+h(vkkgnhjuyWo}pwT?43@*doPC~?G&~pVD&F>@5BXA9NftpQ5 zvjbBe1%P*h|4Ht1G@kjpBV-9mi!PP>wyI_&9R(5!VA$^*R zh4MsA4-z%Oe2*skOz5{5!ZabQs}5r3WU{XZ7WF1XmB#Fb#AsT-W38m6kVu~MxP%QV zi#@)WtQLeo=qq6oY|MoExU|RDufRO?#jvJmuYf|KI+nX({oWls76nk-u*99~8`sFu z!vbE`mh#@%t=|aHkE$aSi)-C_O<%|%!4jPvM=|2yu}@772a#GFEBEf6*y7#&YEa`b z_}Z2y$VswoQ$B~iem9^#AtdG)C=b>22-+gdt@-Rp`L-7tJ)5h{;3uBo?E`D!^mEUA zr_8;7UJy}$+z9TJFr{?#+ZiM+sfAdRtd`*_sgSh*w=|RVnP;21<}5-t&ENxvQv_pS z{0HlT^bc0M;7SiYz>Iq^)7%dyxOeC^Gh&`UR9?Tk`oIw06G%r5BM}&WgF%G#<~pvh z>&ugMR|yiO2n|@3PUr{2DIh!moef2e4xvuOmeT8sVcw?cWvSqI-Ir`Q;@G!b<%0EL zNqSTXZnWQR?8yL1PQk*4E9i1*$528G7if_W7CQBD*qi6%t%WmA_M0byH#%i~Cdt>Q zErRcj-*hgVFsz=oh@0_lf;%4sR{3^b#ui)hEon6m*){}!4GJe?%g5rn{=-sW35;=B z^@V7f`JKL4(ib>&W!*u!@P$QAkY#h4Kn~u^P0TS^u<$ztg_xcyZM znTDG}+6U93NDOtFJY}PfX+T1%5xMFHxzK1&)H&)Gr`Z-RB(5YtEH9$qW`aJ~M2+=%FS`ukjD1x0oi^Yp}ES}r0#w&32k_9aVuS#km zB-MWjum+4pCLD2SblV+=th)*>Ows zOt2Yg9uj-lEz!FLTW%syk_Y+t9fYAr^V(KzTM|_>2HpJL&tX~j?hAb`7}r_cOiqKU z(2@WM0SWF2+0Oo;A#cncwiPmz~9D^ElTLj}9pX z=pt_W9Wd68copHYwZ769(xv(q=P;t!sFgM2@b8DUb-&@ZiHr&KaRgF_ev^>>SF*QFbn6<0+d!nTN88l$}S} z`IJqf(T!5{F^Tq_*<#9;P*zUaQp$cs*)qy*rR+A! zmQ%KZvfC-UgR(m*TS?h}P<9t(cT;u`WveJ#P1(Ja{hG20$^w+BlxdVzQdULTeU#l# z*#ngQCuP-?t)Z-jvbB^2DO*R`Zzu~<_8?{JDf=(V9-^$4GD2A$WjbXWD66MzBV`X$ z_FKvxq3lu0en;7VQ}!5Tzo+bR%ATO?Ny?t0><^SZP1!S){gJX~Df<&;&r$X~WiL?n zB4sa8_A+I!Q1&Wif2Qm;%3i1J4a)vP*_)KTMcLbwy+hf%l>L>mO_aSy+21JpJ7r*%r#)r|f?y`+%~olr>Vejj|@nC}kf~_7P>xltn1pPT3C1c2c&BvX3calzl?k zr>Oq;F_X<;e^9_|(Q!g{$_ zpALBd*#wRhvGkv1)lJ=myv@>gl|dwly8bxcT6^!yK(4D|Rq z($#b8d$V;T+#b2JQk|yczhDiS!96} zU16CMQ5#hE4c5LhoY!Zy#c)&bb4IVRU@i{Mum>@(df#u2po2ts78eQK!?N#)>@#HF zG1=ECBiCEjm+jjRm~M4Uefe)gHHU?oiw4(=#m=&d51Yq=H77jU*P)vILe0Jg4~~$u zqsc1XZ+3=ijtDhr4LLv59WgtDHC+L%h)-S{7pgIYnn@cGYwOP%gzC57HB97_2KYS7 z`e28TS3)(%gqoZmK{{qbDplKU7+?K+7@?X@p(gX+v~`+?Lp8^LI=ACyCtoOZ@wst( zF}*)s3~-t-s9-KYSGJOlX8#zEQ7DoKoJKH5bFknd_55IdPDM^IKeuXf1NhnR>^(-B zcp!F4jvzMqKm+qj^68Mz!(-x&)w#Zi-wkz~e~ES-FA731|04Bb4k?#InrcIG{~VIr z{IYkcGdM?bn;-lbq#GcA;j2^X=ZpDw1}5d-5SW|qtGKrE#{BEFYl79{G%Y_^Elt&? zaTA0OZ0@eFma5XwbfA1`FCq6R~3oc<#tn$bVa`x%n{}} zmC5;46(=gkoKQmn@NQLIdWDo8h^TSZHY;N(b zn?WscZ+ke`7`{8Qu z_3jA8EiG$fBnxp<^=!mDvf#~RB*Ee0!HuKhHuDgioP=pN*lSGgiM2yLkGThX9zxFp zxhHCNlP{CQIspM@u`DSnHb=*itxT_|9t+-2U&h6LI@hBo+ zS)G1uvn%I%^ZV=TMqOK*QEVRKk(cs;W|x4Y1%pD0hxZUaE{`FFwSGtSg-8a3*18dl z21ylR3wRGU^hx6_H>vDHHh|~EGf1;}s<%AetW4=GkA=$Pg3sKZcu!ETXjU%qT8NvJ z59F)hNn_Qi09Qpxf2Lv^1uEAadK;hsmo8OW>bQ%4kY78Y^M z)c`KXJl3puef8BCJO=@^xOs}Vk3dVkCN?`R;nh4IfeIgBMV}prE77M0tjrua;k-(2 z?Y!XHF*({eY^2Hl)XDy|$^P`o{*jaY8I%2pL)6HkKkbLyfs-FfjYD*Y)}|v05}kvC zp7DBLEK5JznC%KhB(jYY^y@r-`r6U;m9gtWr!BRuE`vaN`?%bhlWv+3f4U$=cn!b=}gYZ%ihfydjH)Y^-#S3d_PgYJZF%k zBTK-v`y>8Lu4(#oebJ~u@SF~Y%EwtJ3s`c{D zYeY)sr#8E$*j@AWvK}wA>8Z)(P~BZy1YyiB@;SdD%6ST>t;Vzf`_YYjoOJbB%=roP zQSOtjdENXAc3LksCAL}g9^OGwk?;TMD3hb5yoEb}zl{I9(G#7PnE$0etn*|7l|1o> z-MtNzG`{QK!b6Iku#;T z`q}|lXFO^>p41@Y6*Du@K}sNTsU5fl(~xLB&xG;w~3I9kdiZ0(JZP2|^WA}oa_ERv@lRZHf8}8rVk=A#W!Hq0iGn7Z{p^LHE0%Fl_&WoDL*A+?6R&BSVzX6W#C{T z(k#IFdy0*7zDDEG)4&02>mv7>0xUkeg%qXPQ!;Bx77 zf=+Y5B_Qf-oQejGS(xuzu)cH9J)w-ge_S?_(I6eq5(kb#l3h3XD);izuTI3II zM}XsaEzPm&9$M*~B<8>cQ1{!--_`m>t0*<9W4u(z*$^KW=bG?p(P(}`24hB7^_SYQ zXN6}t^zox*e64^i2jY)*HIHWwR+3S6P!djwP=r9)j-IBV%CpYgSwZZtZ^&c#YTb;{ za+jo@tEY{Y5zyFfJcS!lpjYxZ;X_8k7tk}0!)03TG&b&qCgEqBzSPr>OCNMetzZB2 zXn^^lJ_CI}&uN^D4y{L9zZUoYEPR=XfyN(~%oh_wYw)W^<5+zAbIXyl<&$~gxWr>a zgxZT5$wvyE7Hg(p`r`INW0sYN*8}Gvc=9!}H51^-%$N0Pqh;}v;3tIyN{gR*!yfu)jo8-c2)I!T$3qGTuF_ zwvAJ2ocx5b<|x8KNIeAmJr&Bk4)dE}?5xVK%r9#D5F`3JIzdKE8E6^S(`>29wbOBe zt#*Nk^Fj#EgAzk_)uegk^Jd={_+aQuvKL1mVWHs6!*oP?+Ug!!DAvN!i2ERS4j0!c zwGRJ-h|lT1jzI&fjO+>ZCqpJRR=bQha2}zY_O@RGlf^voyOKwf8da(H;3K#xy)d^H z;<6L#VqVv&*T6?EI0#c45J7JU7Jqv1%^Ij;2|;RC~4>X9L+?qVrcOoN-M}T8ynzSgNZPC z+l|lclwzZH0e0~>ZP0`0a2YuP?C<~SCPm+!|KL`zZMh>=(PF&UhJ$18{R6w^7?Mft z1`*BurSl3L!WxKhTc{jFI@~W7sxsdNbHqa9S$+oRBySVjP~ky6Pq=Nz5np3L{~{`2 z2|Nj8WXO<3DBszK2Nxa?~LV!GNVrGPYU` z&kEsn_GfDYLij5Lc`XhQ=WGG!MLD`2xiy5UAz;@C6oF0gl9BbAr^9YaU;v+#0G%T)w zK-%mQkm;C1GniMsC$2I1-C2`@}Vpg19Ifvb=y>B!nok$4(&i0F1|Hh6nHUSB+b zBOCp2V!V9jV+)WBPbomG`A82k#_F)aliiSl(MLt-Qe*np=oSqY$HgB`jwRcnoDh|R zhvK>2fnQ;2SVtpHL1gKv!LQ?_vL|;}<;_U+XYaxRjdM3PX6fU=@u7Ys^7$}YVHUCy zFf4Gx`Ha|xeYx%0r982XuJ&QkDY=TeOcs21&8#D5wy7xr!RWY zoFxuJzbtD`8aft;pJWfii9CF<_3q?hIE7O2k$eT-EXNB-tzo7(hhRUYW+8WGS5%?C zM|Wh2_Ssl_Lr};}vpf594&WGuA^UN{TEscIPek<1B3ERQ;r3!L|M6na#$w$=iyd0j zcd(Ly(OITu^(H<}SPSw&g2szvIr8|8dvd_pDld@2@KYs#aNb z-~A8RB>0nam}^GT)#=AZyfN}XhH&=LOy{UWL+7OeDS?#1GOW1&w?BMR@uNRU`0+E2 z&i|-Q#z#i~{FCra^Z%!RHVV>#i46QW4&YdXzkkFzS%OroV&vtZf|Ne_#74{CD3qr)_Qa z@V0bD)r!H+fbJ`wN4Lq>TSEIGQy7o3T0Wpx?HTI+`Evm75Dw@T`s6;gUy@jPSmK4j zXe1_bR1S~G>u)@8X%##!rdsBpv>RdG&wGFiMQ%&-H>}!RMsmDMQOqIOZgxl8R+j z#n33YDH-g8qmC@;nHf=;K(*D$Ln%$kMYV}!W{Ngkg`6_epUzU?C&%@qL7~OzysIRQ z{!C7_kKiXXBcUIhJFF?wX!vsZ126!!cK8J#-HDP|WovfZTLYMz-a!fD#lSB9R}hZ7 zpkxhUQe!}@{l>4C5gUczm*9^^Wo}^SK>gGPm9HoVH^hI{&#GBuSM0&)@gG4d0_n@>rTSs~44mH5oJ#Q*1&AAsS~N)m4tAinGa7l5V) zvWX(JR!@SLCh~@o!wdG)d|FARXab)kg%10nze}W&<9VUnjF?soy}K*F>F8Rz(A~B8 H9IcGMl_CQW literal 0 HcmV?d00001 diff --git a/16/modex16/test.c b/16/modex16/TEST.C similarity index 56% rename from 16/modex16/test.c rename to 16/modex16/TEST.C index 48ecf0b9..74a9b801 100644 --- a/16/modex16/test.c +++ b/16/modex16/TEST.C @@ -10,8 +10,19 @@ void main() { page_t page, page2; word far* ptr; float elapsed; + byte *pal, *pal2=NULL; + + /* load our palette */ + modexLoadPalFile("gfx.pal", &pal2); + + /* save the palette */ + pal = modexNewPal(); + modexPalSave(pal); + modexFadeOff(1, pal); + modexPalBlack();; modexEnter(); + modexPalBlack(); page= VGA; page2=VGA+PAGE_SIZE; @@ -22,6 +33,13 @@ void main() { modexClearRegion(page, 17, 12, 30, 30, 19); modexShowPage(page); + /* fade in */ + modexFadeOn(1, pal2); + + /* fill page2 up */ + modexClearRegion(page2, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 128); + + start = *clock; for(i=0; i<500; i++) { modexShowPage(page); @@ -29,7 +47,12 @@ void main() { } end = *clock; + /* fade back to text mode */ + modexFadeOff(1, pal2); + modexPalBlack(); modexLeave(); + modexPalBlack(); + modexFadeOn(1, pal); 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.EXE b/16/modex16/TEST.EXE index bfcdf91a49c804a26faad171c18c38c924635626..f8f28a6a9ebfdfbd6d6b990bc4d393b864317591 100644 GIT binary patch delta 23373 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 literal 41048 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 diff --git a/16/modex16/TEST.OBJ b/16/modex16/TEST.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..788b5c6ebd0d99145df7b18dd783fce7302eafc7 GIT binary patch literal 1157 zcmZWpU2NM_6h6*>(sZNUkYGR;9$*8ZDCt-eel*g?Nr%=ot?k{8F?!`CP8;eZRqTZ# zkO+$(V$w+!NEKQpQC9II!P{QCZcohG1QHT22*lPWC}L76)ih10Oby3QIt^j@_?+{7 z=bn4dx%axV3%cSjo;;dj6UW1SCxrwr1mhpp>`?hssCl5$2q`HkbFTI%RBjnxud@FS zK2v)fxi71~v%4QilrLtanQ&ila;&xo>8X!a+3p8u_3dd%2~PfOPISvZ|0IATj!ST` z{X)NefamSP5bt6Kxzw={ClwOMg|9w#!~W+Ow~evYoKV?HF`v!5!5L2t^TJQa9gcy= z&U`=b0hfjKE}9^K*UtFOKx$@QH8BVH?2P*y1~zR?d(*+qE+S2N;RtkDs~#$fnGsP= z=46S2--3pvw-BMwX?bY!Vj0Pnn-nurDx0OSW1Ah2#q<<~4$DszRH;P4LCIi$JA|Js zV!jE?(3&wWOJa$WCUV8X_Ka3i^jtJ87t>Sl=E4!d?lBtGK{;@2(` z@8`4o+Wj4pti5n0UuC(`Q9wOrYWH+0S5R?R4lK+7vjp+?|GC4w`&Vmid+*oK>JEPE zWUEz`{>wAp>E!P9aAJW48^A<%CO9q1a4-}KWJ_XR zQUbX`;Hhjtkrs`o=>XeMOmh4yx|nODa{pfDvd^{ls_$tYO#c8mPSL-2%I&4 fAfKe=+$n{v`OwUZ>SQ#cT(xivk473FU=`}WbFzpK literal 0 HcmV?d00001 diff --git a/16/modex16/TEST.TXT b/16/modex16/TEST.TXT new file mode 100644 index 00000000..05adc9ec --- /dev/null +++ b/16/modex16/TEST.TXT @@ -0,0 +1,258 @@ +64 x 64 Pixels + +0 0 0 +20 0 0 +0 20 0 +20 20 0 +0 0 20 +20 0 20 +0 20 20 +30 30 30 +30 37 30 +29 32 3c +3f 3f 33 +3f 3f 26 +3f 3f 19 +3f 3f c +3f 33 3f +3f 33 33 +3f 33 26 +3f 33 19 +3f 33 c +3f 33 0 +3f 26 3f +3f 26 33 +3f 26 26 +3f 26 19 +3f 26 c +3f 26 0 +3f 19 3f +3f 19 33 +3f 19 26 +3f 19 19 +3f 19 c +3f 19 0 +3f c 3f +3f c 33 +3f c 26 +3f c 19 +3f c c +3f c 0 +3f 0 33 +3f 0 26 +3f 0 19 +3f 0 c +33 3f 3f +33 3f 33 +33 3f 26 +33 3f 19 +33 3f c +33 3f 0 +33 33 3f +33 33 33 +33 33 26 +33 33 19 +33 33 c +33 33 0 +33 26 3f +33 26 33 +33 26 26 +33 26 19 +33 26 c +33 26 0 +33 19 3f +33 19 33 +33 19 26 +33 19 19 +33 19 c +33 19 0 +33 c 3f +33 c 33 +33 c 26 +33 c 19 +33 c c +33 c 0 +33 0 3f +33 0 33 +33 0 26 +33 0 19 +33 0 c +33 0 0 +26 3f 3f +26 3f 33 +26 3f 26 +26 3f 19 +26 3f c +26 3f 0 +26 33 3f +26 33 33 +26 33 26 +26 33 19 +26 33 c +26 33 0 +26 26 3f +26 26 33 +26 26 26 +26 26 19 +26 26 c +26 26 0 +26 19 3f +26 19 33 +26 19 26 +26 19 19 +26 19 c +26 19 0 +26 c 3f +26 c 33 +26 c 26 +26 c 19 +26 c c +26 c 0 +26 0 3f +26 0 33 +26 0 26 +26 0 19 +26 0 c +26 0 0 +19 3f 3f +19 3f 33 +19 3f 26 +19 3f 19 +19 3f c +19 3f 0 +19 33 3f +19 33 33 +19 33 26 +19 33 19 +19 33 c +19 33 0 +19 26 3f +19 26 33 +19 26 26 +19 26 19 +19 26 c +19 26 0 +19 19 3f +19 19 33 +19 19 26 +19 19 19 +19 19 c +19 19 0 +19 c 3f +19 c 33 +19 c 26 +19 c 19 +19 c c +19 c 0 +19 0 3f +19 0 33 +19 0 26 +19 0 19 +19 0 c +19 0 0 +c 3f 3f +c 3f 33 +c 3f 26 +c 3f 19 +c 3f c +c 3f 0 +c 33 3f +c 33 33 +c 33 26 +c 33 19 +c 33 c +c 33 0 +c 26 3f +c 26 33 +c 26 26 +c 26 19 +c 26 c +c 26 0 +c 19 3f +c 19 33 +c 19 26 +c 19 19 +c 19 c +c 19 0 +c c 3f +c c 33 +c c 26 +c c 19 +c c c +c c 0 +c 0 3f +c 0 33 +c 0 26 +c 0 19 +c 0 c +c 0 0 +0 3f 33 +0 3f 26 +0 3f 19 +0 3f c +0 33 3f +0 33 33 +0 33 26 +0 33 19 +0 33 c +0 33 0 +0 26 3f +0 26 33 +0 26 26 +0 26 19 +0 26 c +0 26 0 +0 19 3f +0 19 33 +0 19 26 +0 19 19 +0 19 c +0 19 0 +0 c 3f +0 c 33 +0 c 26 +0 c 19 +0 c c +0 c 0 +0 0 33 +0 0 26 +0 0 19 +0 0 c +20 3f 3f +10 20 20 +20 3f 0 +10 10 0 +3f 3f 20 +3f 20 0 +3f 20 20 +20 10 0 +20 0 3f +20 0 10 +10 20 3f +0 10 20 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +3f 3e 3c +28 28 29 +20 20 20 +3f 0 0 +0 3f 0 +3f 3f 0 +0 0 3f +3f 0 3f +0 3f 3f +3f 3f 3f \ No newline at end of file diff --git a/16/modex16/types.h b/16/modex16/TYPES.H similarity index 86% rename from 16/modex16/types.h rename to 16/modex16/TYPES.H index 43a42c55..039653f2 100644 --- a/16/modex16/types.h +++ b/16/modex16/TYPES.H @@ -6,5 +6,6 @@ typedef unsigned char byte; typedef unsigned short word; typedef unsigned long dword; +typedef signed char sbyte; typedef signed short sword; typedef signed long sdword; diff --git a/16/modex16/W b/16/modex16/W deleted file mode 100644 index 4b697d8e..00000000 --- a/16/modex16/W +++ /dev/null @@ -1 +0,0 @@ -500 frames in 8.351648 seconds for 59.868421 fps diff --git a/16/modex16/makefile b/16/modex16/makefile deleted file mode 100644 index f4f4c19d..00000000 --- a/16/modex16/makefile +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100644 index 47a59687..00000000 --- a/16/modex16/modex16.c +++ /dev/null @@ -1,127 +0,0 @@ -#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; iSCW60hr8lbB0ywssyzJ=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+CDdDgvzogx@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 diff --git a/16/scrasm/DIAGONAL.PAL b/16/scrasm/DIAGONAL.PAL index 5dee1969fc3e9dfe5bee855460c512ba3a850e69..d4d4a6a097bb4a8dd05fbaf5509f700be81b1b52 100644 GIT binary patch literal 768 zcmZvaK??#Q5Jta4k>xhchKAID9Tti}mO5g7U!dKIx>8Wj~Y(D_9fe^$) zq~HZ4*hm{H+YdxCl6aCpB84F2g+^&ZW&6Q7IXMYV&Q7Fo78k^wqz#qr2Y^>#10KL! z7#N1J;x<&aAB^Fh;lVH&<^r)9*zC9smF)*>d9b{dt%dE`E^_?PL#dC+Ix03v zg)s=;JrU8Lq&#;GQ)M~QO6RqSZwB9WAV;TF@YMk&t+()|8fhN>SZXNw zlH!w9V#CCj>_HxhchKAID9Tti}mO5g7U!dKIx>8Wj~Y(D_9fe^$) zq~HZ4*hm{H+YdxCl6aCpB84F2g+^&ZW&6Q7IXMYV&Q7Fo78k^wqz#qr2Y^>#10KL! z7#N1J;x<&aAB^Fh;lVH&<^r)9*zC9smF)*>d9b{dt%dE`E^_?PL#dC+Ix03v zg)s=;JrU8Lq&#;GQ)M~QO6RqSZwB9WAV;TF@YMk&t+()|8fhN>SZXNw zlH!w9V#CCj>_H2)NS!PyNcE5SLTXw%`mxTv}whbKGR_7OlyAG0stCk_O7u*P^ow+&+ zE#!s3AK)qo@@ITaF5Fu?JMS>VH}lRg%*(*zbt@i{x|gjfi-`RJzZz6EVmS$gL*`Fm zF;O%UwTYQDCX-@JN{SRpxjvNU>6Qu*6wDxqF7#j=s|a8e2ROns=5UI$f8ckZ6W!>= zAcir9Da>LXO9){f$Bp;5x9@@*9{4Z>Kl;%JFD9U36DNq`5W8r1e+^-5VF!Cyz$6B+ zj0o1Tf)Q+B8;fXjpNZ*Bc4u@F_)P-725njZ7L%>TCA?T%2%(F|^Rm#{xHc@EI7XD@ z#BG9gL3v6)q*-UmTb!iKQ-(@x6t!G7_w{^b6xqsKh1Y`ox3w3^LoHh=b4g;;v@2y| nTV5a`S$(ex7ABKmuGQFPs(;ocJDKHz+~LSc;7