From df4b4410e6d2b952c9a45cb4e6973f0e9434c276 Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 20 Feb 2017 00:16:42 +0100 Subject: [PATCH] Fixed CGA, Hercules, and MDA for the second time, per suggestion and code from basic2004; Added IBM PS/2 Model 30 emulation per mainline PCem patch from dns2kv2; Commented out the Chips & Technologies VGA 451 as it needs further work; Added the ability to disable XTIDE; Prepared the icon that will be used for stable builds. --- src/86Box-RB.ico | Bin 0 -> 394182 bytes src/Makefile.mingw | 2 +- src/Makefile.mingw64 | 2 +- src/cpu.c | 11 ++++ src/cpu.h | 1 + src/ibm.h | 3 + src/mem.c | 110 +++++++++++++++++++++++++++------- src/model.c | 19 ++++++ src/nvr.c | 4 ++ src/pc.c | 4 ++ src/pc.rc | 12 +++- src/ps2.c | 136 +++++++++++++++++++++++++++++++++++++++++++ src/ps2.h | 1 + src/resources.h | 1 + src/vid_cga.c | 29 ++++----- src/vid_cga.h | 3 + src/vid_hercules.c | 18 +++--- src/vid_mda.c | 18 +++--- src/vid_vga.c | 8 +-- src/vid_vga.h | 2 +- src/video.c | 2 +- src/win-config.c | 12 +++- src/win-d3d-fs.cc | 14 +++-- 23 files changed, 346 insertions(+), 66 deletions(-) create mode 100644 src/86Box-RB.ico create mode 100644 src/ps2.c create mode 100644 src/ps2.h diff --git a/src/86Box-RB.ico b/src/86Box-RB.ico new file mode 100644 index 0000000000000000000000000000000000000000..2106da7e4c16176d9f20dd9e9ae682b60a9f9536 GIT binary patch literal 394182 zcmZQzU}WH65D);-3Je)63=C}y3=9$y5PkG&Df?8XSxaWw#l?fRRCgK|_IsVcug# z1`P%V1_1^J1_cI)I*A6!>g z_q?g8>32_0&)?m3w1>({Sm2@elvE-WmZ zSyNNC>lwA3uKl_tB$Ae;+(}@cYb} zGgG&2-O3ErKc}v)?)T)$lmB#fcK+SBZ{Od0_wN0D{rdIa_wV2T{qW%f9KU`0_V2@o z4=)}$azy*yy?Y@4GnbW>^-q~H<-?2_Gk!NTH2mGMW5?eqQ>Od{xn$(d1JUJmzvWo6~xjEs!G z>FMbxxU{qs6ep{9?b^k9`0!!I%*;%Nh=>TLgwwLY~Q~9FDM);Dk}b> zlp!xw*OV-QC?MX3d)Q@#@v9 zzh1t4`RC1>H-BEdc=6}q!-s!v+_>@Q?Af!wj~zSq``*2K%TAm)!FuoBJ%-ZKQijQs zCo@!6S2ItaK3!zlvSqH9E?r7|^ypFXt5>huUcP)eI47La4 zUQl`E=;#Qtn=vLPhBYK4#HXvPYv=m)>-Vf$wQA{-B};l2E?ii+aN)v;IdkSX&X_Sn zXY%C9GLt7y7U=Ho=9o2W7W3l8i3imj?ZK~^n2sRjXySQ*zj@Px^>UitXXq?&6+hwSFBjE zZrQSBQ4LVXPULOwJ|SRw1}aiq5>2a4C(3Vj1dtLtU*CRfyv3q_X-OO zf6tpY4_sdE*s%kgcR=MQ6#oU$+qP|ki-XwPwrvCDksoW@?@#4TemV)RaG%0 zCMJR~YeGUoa8_2<{nFCX-*t6$f0ry-@()y|fbhP3`~Dp`aNsW#!`TN99t5%f95`?Q zhJWwcwd?M}g$ory=@eAXBqb#=WoKsx)YjJC2bI+=EiHdR7-T-kykp0Xfy%dk7cN}* z3&sB~Uc3lqU%Yq`%tqq>IdS5|y|ruCDqgs70qp+J&``mmqN2m~_4U7-nwmgm;J@bP z=D%y!toe8R`0;<2FJJz5=gyt~_wV2TckkXk5dMGn?%jV-3}%DMeJK8O;lhQx>o=@d zynXvN*!YVEbLI@#oEI-%{CoTMEf~Lf z^XA{{*RTJ*diClbNc{Qp=l@{!2&hasbLPy6Wy_X|-MMoI+5GDu^FihGj2Scjfy(0v z6DEMe|DxW~*q*Q5X z>9xkj#^2MXP5V24{``McRaJlc`};xWgW~VsxpU|K-@bkO-;*a#K<@tk?%lh8A3uKl z_vzE8|DQg60^4`v#*M#MuU?&WB0Q&aN~6mA_I9sfZ7nmKdkzr~9e|68|i-M^hX zcm6wk_%O)qzt5jP?>>CwFw?tt?-2qP+-v2)#aU?ojn7TK0)y? zXU?2|pn4G$=jG+)|3GyN6r-@q%F6zN@WzcB|Ga$pvU}dVc}$-^ePRSHqxs^Z!6*r>Cd?Pfkw$2gNAtl#~>Z_}}Hrm;ZhB>Q&d2 zDN~p}fBp)`~WgPJw5$b zW@aX+UGTTBukRnI%~xJt4r(v`D<~-Vo0F6C7Ze|$_6`*P%gV|EwSWFBU%vd$)2B~C z@yqz(!v}Eug3M1!N&>ZoLGAF2?Ck8HMMXuR_Q;<}lO}=MpMS1gx$+0pCOvcJ%-@3t z5B}YP%;+qWR2!8koV9bAv5r>AQ+ zHa1RKwrtt4xpU`!K5^m%xSjIu-Mc@ZK7IQ8`Sa&LPz+{&`t<1!sGNBF_U)hN&!7K( z`SRuO2M->!T)A?E@x_Z5V6#C4DEw<`Y8XKNXl`z1nK*Hx=!6Lqg7@#=Uw!%V<-P|G z9?X0B^5w=iZ{8eu{rdIU*RNmSe*5Ffjhdg+XdSav&OpL3$s6&0q$b^?`x?{~rc^ za61gt*Khc$pYfFR3>#Gv#IYBvQ21~N1?H8FttcU@gw;IbJMulf1;U^b}F6(3geNw%>y}WI0Z5+M5z09D#@$%)%88>X$zzA{|2!q;jAiQqfI&iyj;lhRBwks(7 zIyySQbtk9|i_I~ip`i>mHZ~xCGlqwUv-tSsY69l@ty12T#yIDYaVcD`}OrY=r zg(1jYpf>c{wQCt>&YX$j1W=fR;yWN9fH5#Ikj2~E+bJprYmv*y{VRjaPAT)Fbd(xpo`EL^y7>b!aLYUa$D zlQL({9M9>~r<-+mcgr?4H8F$wI7^oloZ7Z-OqCnpEg zhyAl{+qSUa0`^@05kYA=KO?V#}h zPf!d3pwlv7^ zpf)4O&!B!hs9rmH@+7ET{rCL&^Q7WGr%#^-jp4+A`lO(-B#{3>eT9gK2&JN;qO+j3 zB*wiJ*#+x^9{v`o}>dPP7w{MR*b?Ox3uHC!9 zeM3>V>loTYJWd@@&r7V z18Pr$4Bb+~f?%DF?%Wbb+yT-6;^(vVCj3E2V%F4j@gWB*QyFuecGiS~OkDaVqwF=yh z2KfnOCde*OzW^5owGWUnNZo@64<7H^w=Z?ck|ms{PMu;{vt|t_%`<@f9}^SfUtV4g zwjb2TnlWPrxLpbg2T-%a<>~<6oe*2`>Ec(;-Z^an~CpmG5u4#FTlD35^pD(&sUXU9=?OPZIsYS;yx#s5PKMx)}`1SDN!>q%H4>P@Z@dDn)1+_6i`9C^3 z8Z>syl$n{y8X6kvo}Qk5A7lrp3;^|MKxGdooI(DDwWqVQv;V>{s4We{FfmY@8-yz> zEC1ZTfB)Cx$B(lP9z4kO^5sjo{lUS(47Ihj;PSt)u#hP{JX|R|JNqnXj1Ls9pfH^{ zapGT4KN4g=$Zk;oCMG84Z*+7t9HWnIg7`3bP`}{r-Mhb@Jb99}Z{I$qSFc{d?FUB! z0|Pi8fW~AJ5)vFsOG`h1${~>7ySlo-W4EBP4`e@R3=}kO8WIxnH#j&Lj)Q`N{-R@; zJg5(L=gu9l{d@N8!D>G!9zgA-xVSi%!otE&ps`m_Si{PHP(1^(zoew(Z(3T~Ur-pt z$H)JL;kdZCzvvhy2O5V3`5zSixcm=lpXKN0gT|sFMd8a&mIO zeK}Cx2bD*l`VUm!f#L*|{z2lP^a;bTv<~AV)5z)n(4j*p=^ti)U|=94Xe=%uAiyOh zCFN5_M#djd+6DO)R0e|b@u^d%{(|fUg$u}h5F11j!XW!W{(tb`0oebb{13AiMh650 zfW`trZC<$jpnfVS3_*Sa^|3)|5F`eQe^4F+^`}8@1kuGtj0zwX_;m$i5A zUZy8co?xW^kdP3t{lUS(Ap1Xp`s<*y4l);1{;yfH22_TE+J4}&ciFOKe`n2_1upME zaRLexkXuqxQov~vls`fF1cXykQvO`Oe*M>-J9n}`ZD3G859V(e4N8BYc2Hzwq-9P{ z&Wp;*%HQqn?cnkLj*gB$d-v}BbNBAuKcKoEHV*@;(?DhYt5>i7g2eCMy$g0DsC@)# ztAXk)P&qtn)+})ObNlw~EYKXo!-o%H*1~B}_*Yj~gX$yhl9H0>S+izM+^}K8k$Lmx zeF541Y0r{8bizWsjn>eVDr*x$T)6K*ez z0U8?zwZTDjW@aW+S63HncXzi$OG`@}XnyU)i4)7OT)DFS{{8z$Uc7j5>FwLM_us#N z|NQ;?_wU}ne-G-b|M>Lj)348;KmSH|*QZaPzCV8a_~7y5$2DKRe8~VBKZMzfOoRHA zpfTf;k`l(5GiQS8C`Qnj(Zq=pS(YtZ#=d#;X6^$A4hWn+eOl_;wQH)kZr#$qbm@}K z*|TSTFJ8PDfAi+e{09#n)IWLhWb)IePnSJ@{CLZwM~^l?c<`X|^5x5lXU?2q0*$>s zc<=z(S`;>DP63n-K>dEu979J(2jiYSdl*6UC!liskOxij$p2wrVE@6u!2E%Mf%yRxA7Ef$IKaTbcz}U{ z8H5|4G>8quFts3kAPnNep?Af!y<0GJP63|%9 z)TvV$ySuv?KJkVSqNF3xpJv}|T`VTbz;o#r^9{&jq4P}gs zjAX5@uI8LNbt=cysZ&{ddwW@C&6>po8hZkb`G7EJYy~vd0~(70%~68<*W2662x`}Z z<^e!7XuJpJKhSt6sI3R;`>Ls_fycS1;Yl|)HwHU9I|f@@TLxcWUuJuId)0`Dh{n#& z&J~LmEt)rX?%d89GiKyZnKC7~x3|~6rKLr$y1H7frKLq+(xge86DCYx>*(lUnL2eU z6UaZHxmOSk8Z!d<6EqJyfBt;X94u(8jS)1K1@aqct_C*t1{x~`jfs=$9~T!Fu-ifD z2IO`J2M68Y;Nb10rKOTtU(ndorcIlEu3NY6>#9|&-Y#3V?BSwCi!Lr&v}n)# z`SX|0o;`cw)TvX;Crz3Z)!*Om+TPx7($LVL+}746GI{c3?!LZ0j<&Wo)(I0Pfa4D| zuM6@cY|IW6r=T%pP&|S91R(zr;}1}pv9z>g0HqrrA0HMwJ3HNwkdU2OSy?|D8X7=z zrGG&EC(t?skRL#8IncZIYrn5vz52uQ<;$NfUApx8 z;>C*(FI>2A{hT>-W=)+swPDhvNy+{F{k~mYUDj=FZJHe&9TF2JOyKM5>*H*1ZwL90 z5tQyWZQ4Z8`JlOLD=RCQ+nGUb4-O9AnVz2hGcPX>)c*Mga`&!XyZ-IivEv_T9B%8@ zt^YuC4NyOT<}3d~*&u&_#@xVs(D)#-ILNOcKdxK1?#G%nYd)`9wd&RK<;(9ZTej@f z;>C-%&zm=I(X?sPnp#>~jB09XmxoKgW8**HZN!mfxo{$$n8c!K|y;{Qc`|`)|G(T-Jm%y(7YyS9&^v0 zJ^yy^-VO5u$WK`D_U+r@;&|AgH9=r?ptuFaD~JZo?Qh?{{r9R>t8R95bg1G=KXGw! z;B^TgKY+$dU0q#`LPJCMrKP3)%+AjK16n5p>N8YVSO4ql>-!H%JA3x*`47S%KkVMU z`#%(e)&YRUL2^+1Z|~l{|3Mh!XQ&uR4YFEvHi!?xpm_eXZr!@u{r&xFpmhl75fBp- z0~%`st=9mJeX#@w2OA|OChjXJDEL`iT>J+#CkyKLg8CGov@?0~ppQw+-qOA31UaG}niW{~kSh^dAU=#!5jn2oqvM%>j?qY~8x`_Vnq~)%Nb)i_uRi zD=Pz!8G*)YqobpZ^7Hfe)z#Jgtgo;C1L`Y-=E7TBTmQASwSh6z{UCS$+rNMRKhU}g zkX@kp^HZlzf!7&;)*65?XwH>f4AKw9ps~t3^XAP{J9_jehWkNj2ehs*EG$erH#c{0 zQ&ZE=wzjrEZEbCTq4*!j{msqIp!whbp!5Sup9c;c__yXRocT{Xcc;)c>F|=g^@;|4*Da0h-qat#<>v z7c`c9^XAR}w{G2nT3ZGgfQ zw4UR^g9rZ}KYk2e*8!p*J$m%-;lqdjK;j^L|Ni}dq+sa!nZI}L-uZLr@S)oa7cW!; zjgg|~-}3TuQ2RzIGc)rv$o-%(5Rh9z?grtSnwtNhdHt@gu7AsyFaN(~%a;G3HAbMY zzj*N?D4ap={Qvy<^Z%grH1FQM1FcDcW02UJH*fyGdiCl*bdAmbr%#{$2d!Uu{P^+z zM~@!;hx+sXg9i^l80=?|U!mjtzxN;5e`V&ZnTnu37rOgF>uGImZDH;QkLOfXRe|T~ zL1_l$e$bfT;>C+W;~f82uU`EhR5qVHc@mV~!SM}p!;2R$K<)>P|HIw>{{4Fp8?;9B zKQ=bVuW#SJ1?zkL`t|>pFJFTE2%5_P$0KNd;Of<@Kh~^WGk5B=sXV)O?Lv1xXx$hi z$o*MaS)lL-xgWIV2edBdA873cDBMBofR-*@`VUn0fW&6co((Q%u3ftZS|bIv>*dRr z;5AL4HAgV~;ll^enj_GfATS1r!^B{07#~D~Fi0GPLGvJw9zFWJZ{NOU3l}cb1hrK` z>xt1l01AIQJ3HyDtgJJjv;$h>QB_s-AC!hbZU?PB0j(bbtziPKF)1!C{y%HhEYMo9 z|De1IO54w#J^K#|Kj>Pf{~teo1g&L)Vc6Ox5FgG4t$6~egJRGcD6l?|A3$>yj~_q& zb?DHc*}Hb_lG?I$3-f}73m8CiMCk6Xs;XkNx3`zd&dxp!%DW&xR99F32aS<}=4%!% zT=;+C!i9f9W0XZjMgL1nOaITEI~TNG%i1{x3QkkF4JUk;w%KzBcAjLX5nK`J*l_jFB7 z4S3yKPfrhM%@26K1(a?UE?oEzwEhOv{sG0$f&~lyUB7-EyrvAaz6&J3apOjC9Skay zZrr#5%G2OAaiIJQ3hU3GKmYsk<;%aXU%!Geh>eUv@}Tu+D_5@kw|mcS&>HNgyLaz4 z1+Ae5&5eREy4yi~&={4SogFCrPc<|&fY)d*S+eBs;>C;qfbuNJym|BHfz}y=`~WJ8 z{)5sJDD50OcI+AowwzmH7>FN1DWy%!L8o>XcvJ12h z5Y!F=<$c&%!zWLkfXb$Spu7x<56~Jw(D>u)*RP*lxNyM~G!_LKCjz+@8wQOfI66A= zCnY7VY;JD;v25A0-=Otbixw^V4N5nlybGH10JYyhWl=*z1IR6)_3QsnojL{b4=B(7 zhvu2TAortTWU;>>GeGqqXl+_cOA9ES{+}>m!rvJ)X8d2UU;(In{`=<58xVea`SN8G z(3%=-?uLnh#yvpm6QZJ`wDa=v3fkJ*s@vMyYAP!$yHZnAAArVzLF2`sumy!H$j()( zR)NYLP~H04ZC&&iX{h&F~H*elNBgXxp^aJXj zCnO|*#`{704OlZXGub^nJS03lJvV{c{UASp%A@AyW^j0c)-r_3zP=u`ZV;TW zLF?c^c^nyo`aCc`G8>fcVB#P)s9XbKQ27jU|J%23pIy0f#T0q{87$0^Y0#KOP*4zf zzO102fU&l=mdV%GmoF$Ns4ycV<2A_bpt1+l25N6_|JU2w`w!Ib1GNu8YZ5_nAa~{F z=EBy${mabEgk#W{Ka5Wd8x+^~?%e~8jX%3~?HWP%!~Ejz?hbB82L}f;2L%PiWM^l; z0?m1W>SE9w6R799NMvx6!69}5q z2ZjIj>(_~PKgb`Tbqm44!Q3e+DQhb#Dt?37L!dSgXpR;X_7f&dfVDsWf$A)f`_t3Y z|HZ__{Evu;_zznD85|t^9}WLQ;$vk81qH#y6B85vf!d=W_usg2gCzHZ+M>b1!2(%X zSqDIF2i0Xr?*9u~&kI_s32Hw-d-e>xrWLgRBRV=7wyqU4=lKuh9wZDF3l0tjiG$ft zIXF8oFc8j8NJs#+vBBww)bKAYEoBS{2oOk5Pd`{zRtD-jg33Pdx@1t_5nK8JrTw(D zwEsy-N&n;G;=pkMiVqkD`Hd7da{3`9{e#jEXs?s6udhIIa`HjYIw#QjThMx2P#yr4 zGwto|;QrU9O`HCK+MJ;D11d8M3JU(`Xpa;){ea3PP~A{k zS_)c6{1>Di6ema+yk-~52g^g%U}b~G3hv*(4^BVCl%Jq*hhfnAZC6)U!PwZ?L!kN8 zoSdA0`T6~Q1DQdHjaGk=6#f|*8H`R& zPJ&TUQHMbD!l3j3N*DS0`QY{1pnA5ku@TgM0Pm9k_1i&xGf>?Ms((T03`&FA-!Kg7 zOWhF+w7viozM%RM)ULaA z>lS#=2Plt#(gvvR1*J1k7{f3~J#;P})b;~mSUV7f4Qg9K)q=)2KU|Apl@P??aImj{Xia61Ote*O;{gGftD`v)q2va+)NgX&;VUWQ>%yR@L70JL8H zKU56P2E{2<>_0LaR33oJ|CcXcK0AN@Jh=S{OW%ZOQ2Id+|BQ@`e;^FX3n2GE`!C>e zp5w=lgWUBmH8u5rN=nNA)YMe4Uy_rPLHj0P_#a3Pic#1geIN|lR{@m=hXH8Zb#f&APk03q(gp!_yDQ?VxrGC_jV35>(EB)+vD6@1Qhv_3Bm7 z_z$>03|dbC8sh}D??8PTP=C3jqXS%rfZ{JTH5Ig$;a_BAC&Y~X3m`Xb@l4ip!KSty)&Tt1-#}Fw6@~w*ROv;_}jN{f4+VD_7@3*`nn+gzi;2Z zf!Rp?UyvS<7^q+T7t|L9^?^a_6G3Y>?%%(E_t2q3+N8K2G(QWP!vOVVKx;M{8ylHs z&6>sD*48FpU0t2q*Vngg$BrFmPo6w^`_iRLPjBD8{r1tLN1tB4eEI$T`}e;<>r%da z`2unm$jxB<_3Kx-p9rx*Ves|qSJ2v)Z|BdSpR;Gr9)8f82%G_qCIJe6(B2VHJ_d~| z_V@QQg7%$)<~*ybt66GlY6K=sm>@G}&K&h+%a$2!-n`lNz<~pvr%s)Ux^m@8-tF7B z8y`G)FzMmLhYRlAySM(%ojd#Q-o1PF!Gj04o<4p0?FgYEkD>l~*}o#NiHV~5a| zEn8%E?AW2UfB$~NlP6DFU$}6={p!`LkvDGK$h~#zR{f0|Hzr)YdUfuVD_0g?xpJlH z;>C*=7cXAq1la=`FMR&|IbjDAPyy=WgW?9X1^_g#3|jjF+H<>M!v=))Q<&?C4kBk(3;n4*RC;Ny?T}9^5x5{XU?2qKYjW% z`}ykfUPRD-)1ya^GJwQ3Zrli__wL;bUaxch{CV)&p4+!?gX8hx!-tHZxCHt8?%lhL zmo8lbucz9xXAc9&{UkY#%8HYdlNlNs8o+5#Nl6Jjr#yZ7bnrfdef#z?9654?0pw3m zSRXoc2o#qLTefV$I!=i0G|)076#R!D!u`R(4rYKB7=aj|rCsv>|NjRqTmmU+U|;~N z02#>s|NlQI{Rc|_0MX3<|9^neAngpy|No=V>`*>C#8{AdAmiaQKU7>EstykgwnzT| zf3Usspgmv=;FVBd_aO0M^5oL!=7IV4Q2!&*|3Tqn{~r)?#)Pwf2fX0~3&CLgg zhe&V*$loA$o0*w0xVyW9_MJ0<_PnoHv4Uyk%9Tv3R;^+Jtsz{oVg=)(MT@|DKB4RE z7(r_YL16=0R|wkw3F4QPm4VKpVF0xwK;Z;hn+6Ia(3(O}{X~M(Xs*=A$cO>74h!Ue zCnqN+M@L72fPet=oSdA%?(S~i{{DWu?(S}b*49=<(0aBB6DDv?nly>Mr>BPvw6_|x zrxLVw4YW=Vw2p1bk|p3hr=b1H-QC@cps)e0Z3d+c(4JV(dQwoEq`kczbY2bUj1kb< ze>fYo_m-8FmFE5iSzusbz+hov!C+!y0%|ibTUc1gySln|fzBhDJbCiRwQJYDU%h(u z^X1Ez-(Iw6(W$v}=WdxXW5(P`lO}a`cXt;zH8sUFG&DH3x3}x|_Vy}3*R2cI)zxv= z*VnU6pFW*={`~n&3l=P30`1`k?Z*YBBM=SUH_X`9*2W0hGYrC@umYtYP>!Jyc-)Et!is)wHg{4qAcMjJ9fQ^xZrHHl_u92X*^oH=vW%$PA_#^lM9o4dQavs+tRgIii!tXf-JwLtyXrluzG`uckQ*49>z88c?E z%$zxs8I*QFXH0<3QGlffPyi{=-{y=gvJnbLPw) z)2B~gIBnXrwkcDl~~n2kB^W4 z0@^DF+VcZiL)g~V2HN)wUiXOXf6)3&Xc+thtwY6uLFZxM!+${O2p_r1HjySBErmIHJq z2C@DJ&3l8^sDs)z4h{|=zpJ{tyDx}~i~Ew6mIgXc4SY@ntb{12*6L1$TjXm@va78@HI z6%P-OMe*_RUqSH>+PezM^B}*Mm6d_lRDsqYA^RT|1|YG4z@V^)mcxJM%$c*GtE-C- z`3whK;Q(rLf!ggL{|5yHvADXrs`~l)ElN&K{t7GWp#BD}TLRCYg4QB}*1~||9BJ(> zXpJwpJOGJPcMw28jm*1TcX74mv|6 zA|iq%ARqv=Cu31=ZtmBTl9E55^$Vc+Akcab&{#WYKCTtIes|imX<)yC{D_P}ZUOlZ zw3heq;ltpy$Ds9@FnsLTv47OYFtb5(76%U={JU(~vV}8d%-{pH6+r&Pg+b%1p#EA! zLqnicg{{_t_ZQi_T;lhOr`F8K#jdQ*Y6#s#NflL7b0q(iExi3Kb&_U@Pw6_4{ zS5Q2IFo+Gx10a8c=Ep%8a;vN+5ptKH(b5MMP<`Y5dX+eGi&9lKUXl*t& zeCN&`&>TG37-Z(nTQ~oK=1MPLzWisy#tjQV{@<}b^%K*)(gZu}IYY+ypL1LgX5H#lq@;@l;uV23&yx#>>&Vlke$nPM3gZvEg4`|Ib zXgw}yJvIn~*dQ@v3|&_aTK|U?lcE-6*4?{z|6aO$>Cf8rYZok7w198ZmQ6VQ4;s5N zH#g@D2?=Q_EiL^8THgf1Ab*1V3yN1+fcyvYFK8V$F&Gv;AU&WnG(lkm3LntgGSK`m zC`>`&1HxF+68H>ekpIt}JNI+`g88k}W=!J*%}e15fW*W^xc|$_%3$#i_CGAHLH-6| znBPI`pF!(=K>IF0;Q(3#4DvrH?SslXP(BC656Hd9{s+xT6B7o6)WE_Bl!icI1hNBk z-p|vgPeE&_KxgoP&ak>Wb?Q{7IdkTK&+#JQf3DEb(6+L&GSK=&(Ar_R|3PUU2g!l*0;s;faNz>DoCoE5Q2c=63>1GL_k#RR4n__O0{TJw zEI?;G{5p8>;MJu|mnO}aF@tCRg82+<)~>I2aF zA`k|xUjvo<=y4B9x1cxz`2o6?0kl>D1B2wyF=#CVHZhPmGKQ)FuRD11-jbZ*?7IdhP`ij|#`lEP?ZWyKjD9^P76S@{dJRuYuw zL1`Y8uR-k_kl#UZ4_c=KO8cO7aiH~f?aw z1kicQpfmx>51{k_az7~UVQXJ-(I7SG7#3Eq-@N|U+t>SV<*JpSy$OGhA3wf*`}XbP z7cX99B&N>`3J}nIIL!Z5RaL)0eIC%5Cg^OlMT-{w1?{&0`5jc|gZ3!E{15UwC>%gx z1?mHX{0K_>pmtDpcJ@Ee+Bnb}JW&1sg%PL?1sW>?)t#WdR?C(x`v=+|1FAbg?Iuur z5!8MI)o-AD11dA{g%K!BKzRUU-?8JzK>L3F-nw;b$H|i?#X)NiKz<_zgZ2koSy^%T z`};RmR8;(IX=wqUExu~iD)5=NOP4PF13Ir3biUr|)vLkhI)m0y!u$>@A3$e5gW??& z$DlSa$j=}Q3L}tOkpDq>1|5UK4unB<2q?XQ`j?Jv`~^z?pfyIIHA)X2JlKBj+&MAOdJafX=Bld(S{+AE?d;#U;p3AU}gJvY$cX=osX8 zVlc=qP*{V~5vV@`DuY2~)6!*2|AEfhgZcl$g$pG4A2jX*8u#$?^Am`Ri;K<6%bU{D z(lV>Py?u65Q`4M^ii(wKX=yJ(YYjmd6t5uvgWL>r3#g0$m3^Q(A5;&5;u0he@+-*y zpm0FOptOUIk>!bHgUkli!=SwxApbvn_;AOC3m3#eYmGp0OAH3B{Q;fF0Xm}qbT>ds zN(y&DK>=@WZZ2<1N(#TPudl3?mDPg8#6}uR6_idvWgn>A2le?u zav-;X)Pd4JD7-*<0U3kLAqFGs!NvylNkRP`kpCY&dbH!>#fv2Q-^P+1NulR*9lrC*SrLF}#!WiA$+(d$dgF*MRd@U_41>L6tTJsD( z`yEu~f$B1l-$C^msICWI?3xL{%pnWN@G7q#q8svA--X~B$5LEVo z+WR2?gVy#ZBqV_LmHh+l6@sn}{}&b(MpYah9u8VN4{CRU*XM%#fBpJ(aZ=XD!{QxA zgYIWZNJs$PagKq09t2AFpz<8#cTn7e@;xZ-LG37ww z9fU#t2bHxT|AWRtL2VR}|3U2(WdDQWAC&H6V`DMG02B_CV(30O(B3{U2IVbe|6jRs zg`)V6ii!f=#Q=)`qQb($pP+dUP(21J_dsC)D*HfnE~xzhn)?Ec0fO4apgtcg|AWeT zP#7d7CH+Ir2cWzF!l1N4DF&GX!k{u0G~Nk{e`=I};o;$+^G%sULqm)5^74Lx_E~`H zF;IO53jf`WpIv$L~*f%aH|>M~G018U2F>NZgQ4oU-{IslXpKw|=+`VUn9 zgT?_s?LJVLf$9N}`#@mS3BdYpp!f&1(?NL# zaD|x#iVI}_gW7-Ow0~g!2kqPU^Ydfz_4O?V-IoG7uN4&5$YB8T7sy^%SvYUrJkXp2 zX#eRyQ27rE8&Dbmg%c>fz`_Egk6IXHCJ2M-B$)p}?SGK}NooJX{0*c1{QMYweSJaw z!Q#}^)L)=Ee^5R~4g*kpg8T+63qk#P(7Y3<3kX~ ze@Lahy}iNl@8RJAkAIl|VPOE;lL{(>Kz;$mE2s?s8@~e0gM;cj5C*9SmGiK$0HqsH zISQgF#UT4Z7!(Jf`X6+T|Gj(ncAPzXRvh{4dJ6ns1WW(O{s;L9ln+303@U>`aR_Py zfabbE^Io9wJWzWdgh6dUQ2PwD2Nt9cl!u7HAhozKNIyspM1wFWJg;551|I*rd-v{+ zGiT0-gZ3Sf>Tj5OX!>XN^z;Pz|0gK_qx&C}4?uAWibGKS2I>od=Dt8&K-*V4;ljq2nb;I z_xCRXo%0A<_XP?AklSGx-T$C=AgJC0jRAtjK|u8YXej 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 literal 0 HcmV?d00001 diff --git a/src/Makefile.mingw b/src/Makefile.mingw index a91fe441d..6c58d172a 100644 --- a/src/Makefile.mingw +++ b/src/Makefile.mingw @@ -9,7 +9,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429 device.o disc.o disc_86f.o disc_fdi.o disc_imd.o disc_img.o disc_random.o disc_td0.o dma.o fdc.o fdc37c665.o fdc37c932fr.o fdd.o fdi2raw.o gameport.o headland.o i82335.o i430hx.o i430lx.o i430fx.o \ i430nx.o i430vx.o i440fx.o ide.o intel.o intel_flash.o io.o jim.o joystick_ch_flightstick_pro.o joystick_standard.o joystick_sw_pad.o joystick_tm_fcs.o keyboard.o keyboard_amstrad.o keyboard_at.o \ keyboard_olim24.o keyboard_pcjr.o keyboard_xt.o lpt.o mcr.o mem.o memregs.o model.o mouse.o mouse_ps2.o \ - mouse_serial.o ne2000.o neat.o nethandler.o nmi.o nvr.o olivetti_m24.o opti495.o pc.o pc87306.o pci.o pic.o piix.o pit.o ppi.o ps1.o rom.o rtc.o \ + mouse_serial.o ne2000.o neat.o nethandler.o nmi.o nvr.o olivetti_m24.o opti495.o pc.o pc87306.o pci.o pic.o piix.o pit.o ppi.o ps1.o ps2.o rom.o rtc.o \ scat.o scsi.o serial.o sis496.o sis85c471.o sio.o sound.o sound_ad1848.o sound_adlib.o sound_adlibgold.o sound_cms.o \ sound_dbopl.o sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_resid.o \ sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o \ diff --git a/src/Makefile.mingw64 b/src/Makefile.mingw64 index 277ffadcb..d9df84dbb 100644 --- a/src/Makefile.mingw64 +++ b/src/Makefile.mingw64 @@ -9,7 +9,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429 device.o disc.o disc_86f.o disc_fdi.o disc_imd.o disc_img.o disc_random.o disc_td0.o dma.o fdc.o fdc37c665.o fdc37c932fr.o fdd.o fdi2raw.o gameport.o headland.o i82335.o i430hx.o i430lx.o i430fx.o \ i430nx.o i430vx.o i440fx.o ide.o intel.o intel_flash.o io.o jim.o joystick_ch_flightstick_pro.o joystick_standard.o joystick_sw_pad.o joystick_tm_fcs.o keyboard.o keyboard_amstrad.o keyboard_at.o \ keyboard_olim24.o keyboard_pcjr.o keyboard_xt.o lpt.o mcr.o mem.o memregs.o model.o mouse.o mouse_ps2.o \ - mouse_serial.o ne2000.o neat.o nethandler.o nmi.o nvr.o olivetti_m24.o opti495.o pc.o pc87306.o pci.o pic.o piix.o pit.o ppi.o ps1.o rom.o rtc.o \ + mouse_serial.o ne2000.o neat.o nethandler.o nmi.o nvr.o olivetti_m24.o opti495.o pc.o pc87306.o pci.o pic.o piix.o pit.o ppi.o ps1.o ps2.o rom.o rtc.o \ scat.o scsi.o serial.o sis496.o sis85c471.o sio.o sound.o sound_ad1848.o sound_adlib.o sound_adlibgold.o sound_cms.o \ sound_dbopl.o sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_resid.o \ sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o \ diff --git a/src/cpu.c b/src/cpu.c index af49feb4d..5172c4727 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -228,6 +228,17 @@ CPU cpus_ps1_m2011[] = {"", -1, 0, 0, 0, 0} }; +CPU cpus_ps2_m30_286[] = +{ + /*286*/ + {"286/10", CPU_286, 2, 10000000, 1, 0, 0, 0, 0, 0, 2,2,2,2}, + {"286/12", CPU_286, 3, 12000000, 1, 0, 0, 0, 0, 0, 3,3,3,3}, + {"286/16", CPU_286, 4, 16000000, 1, 0, 0, 0, 0, 0, 3,3,3,3}, + {"286/20", CPU_286, 5, 20000000, 1, 0, 0, 0, 0, 0, 4,4,4,4}, + {"286/25", CPU_286, 6, 25000000, 1, 0, 0, 0, 0, 0, 4,4,4,4}, + {"", -1, 0, 0, 0, 0} +}; + CPU cpus_i386SX[] = { /*i386SX*/ diff --git a/src/cpu.h b/src/cpu.h index a1775ecac..1159caefc 100644 --- a/src/cpu.h +++ b/src/cpu.h @@ -110,6 +110,7 @@ extern CPU cpus_pcjr[]; extern CPU cpus_pc1512[]; extern CPU cpus_ibmat[]; extern CPU cpus_ps1_m2011[]; +extern CPU cpus_ps2_m30_286[]; extern CPU cpus_acer[]; extern int cpu_iscyrix; diff --git a/src/ibm.h b/src/ibm.h index e88b108d3..d68e9ede6 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -397,6 +397,8 @@ enum ROM_AMI386DX_OPTI495, ROM_MR386DX_OPTI495, + ROM_IBMPS2_M30_286, + ROM_DTK486, /*DTK PKM-0038S E-2 / SiS 471 / Award BIOS / SiS 85C471*/ ROM_VLI486SV2G, /*ASUS VL/I-486SV2G / SiS 471 / Award BIOS / SiS 85C471*/ ROM_R418, /*Rise Computer R418 / SiS 496/497 / Award BIOS / SMC FDC37C665*/ @@ -627,3 +629,4 @@ uint8_t trc_read(uint16_t port, void *priv); void trc_write(uint16_t port, uint8_t val, void *priv); void trc_init(); +extern int enable_xtide; diff --git a/src/mem.c b/src/mem.c index def1e8c71..c1e6a101b 100644 --- a/src/mem.c +++ b/src/mem.c @@ -48,6 +48,8 @@ static mem_mapping_t romext_mapping; int shadowbios,shadowbios_write; +int enable_xtide = 0; + static unsigned char isram[0x10000]; static uint8_t ff_array[0x1000]; @@ -132,7 +134,10 @@ int loadbios() } fclose(ff); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } loadfont("roms/pc1512/40078.ic127", 2); return 1; case ROM_PC1640: @@ -149,7 +154,10 @@ int loadbios() f=romfopen("roms/pc1640/40100","rb"); if (!f) break; fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_PC200: f=romfopen("roms/pc200/pc20v2.1","rb"); @@ -162,7 +170,10 @@ int loadbios() } fclose(ff); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } loadfont("roms/pc200/40109.bin", 1); return 1; case ROM_TANDY: @@ -170,7 +181,10 @@ int loadbios() if (!f) break; fread(rom,65536,1,f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_TANDY1000HX: f = romfopen("roms/tandy1000hx/v020000.u12", "rb"); @@ -178,7 +192,10 @@ int loadbios() fread(rom, 0x20000, 1, f); fclose(f); biosmask = 0x1ffff; - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_TANDY1000SL2: f = romfopen("roms/tandy1000sl2/8079047.hu1" ,"rb"); @@ -193,7 +210,10 @@ int loadbios() } fclose(ff); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; /* case ROM_IBMPCJR: f=fopen("pcjr/bios.rom","rb"); @@ -214,14 +234,20 @@ int loadbios() fread(rom + 0x8000, 0x8000, 1, ff); fclose(ff); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; } else { fread(rom,65536,1,f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; } break; @@ -238,14 +264,20 @@ int loadbios() if (!f) break; fread(rom+0xE000,8192,1,f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_DTKXT: f=romfopen("roms/dtk/DTK_ERSO_2.42_2764.bin","rb"); if (!f) break; fread(rom+0xE000,8192,1,f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_OLIM24: f = romfopen("roms/olivetti_m24/olivetti_m24_version_1.43_low.bin" ,"rb"); @@ -258,7 +290,10 @@ int loadbios() } fclose(ff); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_PC2086: @@ -277,7 +312,10 @@ int loadbios() f = romfopen("roms/pc2086/40186.ic171", "rb"); if (!f) break; fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } biosmask = 0x3fff; return 1; @@ -289,7 +327,10 @@ int loadbios() f = romfopen("roms/pc3086/c000.bin", "rb"); if (!f) break; fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } biosmask = 0x3fff; return 1; @@ -398,7 +439,10 @@ int loadbios() fread(rom+0x8000,32768,1,f); fclose(f); // memset(romext,0x63,0x8000); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_IBMPC: @@ -423,7 +467,10 @@ int loadbios() if (!f) break; fread(rom+0xC000,8192,1,f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_MEGAPC: @@ -573,7 +620,10 @@ int loadbios() if (!f) break; fread(rom + 0xE000, 8192, 1, f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_LTXT: @@ -581,7 +631,10 @@ int loadbios() if (!f) break; fread(rom + 0xE000, 8192, 1, f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_LXT3: @@ -589,7 +642,10 @@ int loadbios() if (!f) break; fread(rom + 0xE000, 8192, 1, f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_SPC4200P: /*Samsung SPC-4200P*/ @@ -624,7 +680,10 @@ int loadbios() if (!f) break; fread(rom + 0xE000, 8192, 1, f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_JUKOPC: @@ -632,7 +691,18 @@ int loadbios() if (!f) break; fread(rom + 0xE000, 8192, 1, f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } + return 1; + + case ROM_IBMPS2_M30_286: + f = romfopen("roms/ibmps2_m30_286/33f5381a.bin", "rb"); + fread(rom, 0x20000, 1, f); + fclose(f); + biosmask = 0x1ffff; + mem_load_atide_bios(); return 1; case ROM_DTK486: diff --git a/src/model.c b/src/model.c index 0253cd97a..3e15c8018 100644 --- a/src/model.c +++ b/src/model.c @@ -55,6 +55,7 @@ #include "piix.h" #include "pit.h" #include "ps1.h" +#include "ps2.h" #include "scat.h" #include "serial.h" #include "sis496.h" @@ -84,6 +85,7 @@ void at_init(); void deskpro386_init(); void ps1_m2011_init(); void ps1_m2121_init(); +void ps2_m30_286_init(); void at_neat_init(); void at_scat_init(); void at_acer386sx_init(); @@ -152,6 +154,7 @@ MODEL models[] = {"IBM PS/1 model 2011", ROM_IBMPS1_2011, { "", cpus_ps1_m2011,"", NULL, "", NULL}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, ps1_m2011_init, NULL}, {"IBM PS/1 model 2121", ROM_IBMPS1_2121, { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, ps1_m2121_init, NULL}, {"IBM PS/1 m.2121+ISA", ROM_IBMPS1_2121_ISA, { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, ps1_m2121_init, NULL}, + {"IBM PS/2 Model 30-286", ROM_IBMPS2_M30_286, { "", cpus_ps2_m30_286, "", NULL, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 16, 1, ps2_m30_286_init, NULL}, {"Compaq Deskpro 386", ROM_DESKPRO_386, { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC}, 0, MODEL_AT, 1, 15, 1, deskpro386_init, NULL}, {"Acer 386SX25/N", ROM_ACER386, { "Intel", cpus_acer, "", NULL, "", NULL}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, at_acer386sx_init, NULL}, {"DTK 386SX clone", ROM_DTK386, { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC}, 0, MODEL_AT, 1, 16, 1, at_neat_init, NULL}, @@ -379,6 +382,22 @@ void ps1_m2121_init() fdc_set_ps1(); } +void ps2_m30_286_init() +{ + AT = 1; + common_init(); + mem_add_bios(); + pit_set_out_func(1, pit_refresh_timer_at); + dma16_init(); + ide_init(); + keyboard_at_init(); + mouse_ps2_init(); + nvr_init(); + pic2_init(); + ps2board_init(); + fdc_set_dskchg_activelow(); +} + void at_neat_init() { at_init(); diff --git a/src/nvr.c b/src/nvr.c index 7e4e4223e..7c3844d5c 100644 --- a/src/nvr.c +++ b/src/nvr.c @@ -208,6 +208,8 @@ void loadnvr() case ROM_IBMAT: f = romfopen(nvr_concat("at.nvr"), "rb"); break; case ROM_IBMPS1_2011: f = romfopen(nvr_concat("ibmps1_2011.nvr"), "rb"); /*nvrmask = 127; */break; case ROM_IBMPS1_2121: f = romfopen(nvr_concat("ibmps1_2121.nvr"), "rb"); nvrmask = 127; break; + case ROM_IBMPS1_2121_ISA: f = romfopen(nvr_concat("ibmps1_2121_isa.nvr"), "rb"); nvrmask = 127; break; + case ROM_IBMPS2_M30_286: f = romfopen("nvr/ibmps2_m30_286.nvr", "rb"); /*nvrmask = 127; */break; case ROM_CMDPC30: f = romfopen(nvr_concat("cmdpc30.nvr"), "rb"); nvrmask = 127; break; case ROM_AMI286: f = romfopen(nvr_concat("ami286.nvr"), "rb"); nvrmask = 127; break; case ROM_AWARD286: f = romfopen(nvr_concat("award286.nvr"), "rb"); nvrmask = 127; break; @@ -289,6 +291,8 @@ void savenvr() case ROM_IBMAT: f = romfopen(nvr_concat("at.nvr"), "wb"); break; case ROM_IBMPS1_2011: f = romfopen(nvr_concat("ibmps1_2011.nvr"), "wb"); break; case ROM_IBMPS1_2121: f = romfopen(nvr_concat("ibmps1_2121.nvr"), "wb"); break; + case ROM_IBMPS1_2121_ISA: f = romfopen(nvr_concat("ibmps1_2121_isa.nvr"), "wb"); break; + case ROM_IBMPS2_M30_286: f = romfopen("nvr/ibmps2_m30_286.nvr", "wb"); break; case ROM_CMDPC30: f = romfopen(nvr_concat("cmdpc30.nvr"), "wb"); break; case ROM_AMI286: f = romfopen(nvr_concat("ami286.nvr"), "wb"); break; case ROM_AWARD286: f = romfopen(nvr_concat("award286.nvr"), "wb"); break; diff --git a/src/pc.c b/src/pc.c index e0ab1e0db..42a764320 100644 --- a/src/pc.c +++ b/src/pc.c @@ -868,6 +868,8 @@ void loadconfig(char *fn) joystick_type = config_get_int(NULL, "joystick_type", 0); mouse_type = config_get_int(NULL, "mouse_type", 0); + enable_xtide = config_get_int(NULL, "enable_xtide", 1); + for (c = 0; c < joystick_get_max_joysticks(joystick_type); c++) { sprintf(s, "joystick_%i_nr", c); @@ -1050,6 +1052,8 @@ void saveconfig() config_set_int(NULL, "joystick_type", joystick_type); config_set_int(NULL, "mouse_type", mouse_type); + config_set_int(NULL, "enable_xtide", enable_xtide); + for (c = 0; c < joystick_get_max_joysticks(joystick_type); c++) { char s[80]; diff --git a/src/pc.rc b/src/pc.rc index 634a696d2..f22e897ae 100644 --- a/src/pc.rc +++ b/src/pc.rc @@ -380,11 +380,12 @@ BEGIN PUSHBUTTON "Configure", IDC_CONFIGUREMOD, 224, 16, 40, 14, WS_TABSTOP COMBOBOX IDC_COMBOVID,62,36,157,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Configure", IDC_CONFIGUREVID, 224, 36, 40, 14, WS_TABSTOP - COMBOBOX IDC_COMBOCPUM,62,56,157,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBOCPUM,62,56,57,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO3,62,76,102,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Dynamic Recompiler",IDC_CHECKDYNAREC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,169,76,99,10 + CONTROL "Enable XTIDE",IDC_CHECKXTIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,169,96,99,10 COMBOBOX IDC_COMBOWS, 62,96,57,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBOSPD,162,96,57,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBOSPD,162,56,57,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBOSND,62,116,157,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Configure", IDC_CONFIGURESND, 224, 116, 40, 14, WS_TABSTOP EDITTEXT IDC_MEMTEXT, 62, 136, 36, 14, ES_AUTOHSCROLL | ES_NUMBER @@ -416,7 +417,7 @@ BEGIN LTEXT "CPU type :",IDC_STATIC,15,56,34,10 LTEXT "CPU :",IDC_STATIC,15,76,34,10 LTEXT "Waitstates :",IDC_STATIC,15,96,40,10 - LTEXT "Vid.speed:",IDC_STATIC,125,96,34,10 + LTEXT "Vid.speed:",IDC_STATIC,125,56,34,10 LTEXT "Sound card :",IDC_STATIC,15,116,40,10 LTEXT "Network :",IDC_STATIC,125,136,34,10 COMBOBOX IDC_COMBONET,162,136,57,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -604,5 +605,10 @@ END 1 24 "86Box.manifest" +#ifdef RELEASE_BUILD +/* Icon by Devcore - https://commons.wikimedia.org/wiki/File:Icon_PC_256x256.png */ +100 ICON "86Box-RB.ico" +#else /* Icon by Devcore - https://commons.wikimedia.org/wiki/File:Icon_PC2_256x256.png */ 100 ICON "86Box.ico" +#endif diff --git a/src/ps2.c b/src/ps2.c new file mode 100644 index 000000000..0b6b08424 --- /dev/null +++ b/src/ps2.c @@ -0,0 +1,136 @@ +#include "ibm.h" +#include "mem.h" +#include "ps2.h" +#include "rom.h" +#include "lpt.h" + +static uint8_t ps2_92, ps2_94, ps2_102, ps2_103, ps2_104, ps2_105, ps2_190; + +static struct +{ + uint8_t status, int_status; + uint8_t attention, ctrl; +} ps2_hd; + +uint8_t ps2_read(uint16_t port, void *p) +{ + uint8_t temp; + + switch (port) + { + case 0x91: + return 0; + case 0x92: + return ps2_92; + case 0x94: + return ps2_94; + case 0x102: + return ps2_102 | 8; + case 0x103: + return ps2_103; + case 0x104: + return ps2_104; + case 0x105: + return ps2_105; + case 0x190: + return ps2_190; + + case 0x322: + temp = ps2_hd.status; + break; + case 0x324: + temp = ps2_hd.int_status; + ps2_hd.int_status &= ~0x02; + break; + + default: + temp = 0xff; + break; + } + + return temp; +} + +void ps2_write(uint16_t port, uint8_t val, void *p) +{ + switch (port) + { + case 0x0092: + ps2_92 = val; + mem_a20_alt = val & 2; + mem_a20_recalc(); + break; + case 0x94: + ps2_94 = val; + break; + case 0x102: + lpt1_remove(); + if (val & 0x04) + serial1_init(0x3f8, 4); + else + serial1_remove(); + if (val & 0x10) + { + switch ((val >> 5) & 3) + { + case 0: + lpt1_init(0x3bc); + break; + case 1: + lpt1_init(0x378); + break; + case 2: + lpt1_init(0x278); + break; + } + } + ps2_102 = val; + break; + case 0x103: + ps2_103 = val; + break; + case 0x104: + ps2_104 = val; + break; + case 0x105: + ps2_105 = val; + break; + case 0x190: + ps2_190 = val; + break; + + case 0x322: + ps2_hd.ctrl = val; + if (val & 0x80) + ps2_hd.status |= 0x02; + break; + case 0x324: + ps2_hd.attention = val & 0xf0; + if (ps2_hd.attention) + ps2_hd.status = 0x14; + break; + } +} + +void ps2board_init() +{ + io_sethandler(0x0091, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0092, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0094, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0102, 0x0004, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0190, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0320, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0322, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0324, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + + ps2_190 = 0; + + lpt1_remove(); + lpt2_remove(); + lpt1_init(0x3bc); + + serial1_remove(); + serial2_remove(); + + memset(&ps2_hd, 0, sizeof(ps2_hd)); +} diff --git a/src/ps2.h b/src/ps2.h new file mode 100644 index 000000000..92fb6e077 --- /dev/null +++ b/src/ps2.h @@ -0,0 +1 @@ +void ps2board_init(); diff --git a/src/resources.h b/src/resources.h index bc1aa903b..6e9c6a041 100644 --- a/src/resources.h +++ b/src/resources.h @@ -254,6 +254,7 @@ #define IDC_CHECKBUSLOGIC 1017 #define IDC_STATIC 1020 #define IDC_CHECKSYNC 1024 +#define IDC_CHECKXTIDE 1025 #define IDC_EDIT1 1030 #define IDC_EDIT2 1031 #define IDC_EDIT3 1032 diff --git a/src/vid_cga.c b/src/vid_cga.c index ab909b3f3..e5a9de837 100644 --- a/src/vid_cga.c +++ b/src/vid_cga.c @@ -59,6 +59,14 @@ void cga_out(uint16_t addr, uint8_t val, void *p) update_cga16_color(cga->cgamode); } cga->cgamode = val; +#ifndef __unix + cga_palette = (cga->rgb_type << 1); + if (!(cga->cgamode & 1) && (cga_palette > 0) && (cga_palette < 8)) + { + cga_palette--; + cgapal_rebuild(); + } +#endif return; case 0x3D9: cga->cgacol = val; @@ -466,7 +474,8 @@ void *cga_standalone_init() overscan_x = overscan_y = 16; #ifndef __unix - cga_palette = device_get_config_int("rgb_type"); + cga->rgb_type = device_get_config_int("rgb_type"); + cga_palette = (cga->rgb_type << 1); cgapal_rebuild(); #endif @@ -538,33 +547,25 @@ static device_config_t cga_config[] = .selection = { { - .description = "Full 16-color", + .description = "Color", .value = 0 }, { - .description = "Green, 4-color", + .description = "Green Monochrome", .value = 1 }, { - .description = "Green, 16-color", + .description = "Amber Monochrome", .value = 2 }, { - .description = "Amber, 4-color", + .description = "Gray Monochrome", .value = 3 }, { - .description = "Amber, 16-color", + .description = "Color (no brown)", .value = 4 }, - { - .description = "Gray, 4-color", - .value = 5 - }, - { - .description = "Gray, 16-color", - .value = 6 - }, { .description = "" } diff --git a/src/vid_cga.h b/src/vid_cga.h index e3b187777..ca513785d 100644 --- a/src/vid_cga.h +++ b/src/vid_cga.h @@ -34,6 +34,9 @@ typedef struct cga_t int revision; int composite; int snow_enabled; +#ifndef __unix + int rgb_type; +#endif } cga_t; void cga_init(cga_t *cga); diff --git a/src/vid_hercules.c b/src/vid_hercules.c index d3cd051e3..2c96a5654 100644 --- a/src/vid_hercules.c +++ b/src/vid_hercules.c @@ -346,7 +346,11 @@ void *hercules_init() overscan_x = overscan_y = 0; #ifndef __unix - cga_palette = device_get_config_int("rgb_type"); + cga_palette = device_get_config_int("rgb_type") << 1; + if (cga_palette > 6) + { + cga_palette = 0; + } cgapal_rebuild(); #endif @@ -378,20 +382,20 @@ static device_config_t hercules_config[] = .selection = { { - .description = "Default 4-color", + .description = "Default", .value = 0 }, { - .description = "Green, 4-color", + .description = "Green", .value = 1 }, { - .description = "Amber, 4-color", - .value = 3 + .description = "Amber", + .value = 2 }, { - .description = "Gray, 4-color", - .value = 5 + .description = "Gray", + .value = 3 }, { .description = "" diff --git a/src/vid_mda.c b/src/vid_mda.c index be38890bd..bf3b9e459 100644 --- a/src/vid_mda.c +++ b/src/vid_mda.c @@ -302,7 +302,11 @@ void *mda_init() overscan_x = overscan_y = 0; #ifndef __unix - cga_palette = device_get_config_int("rgb_type"); + cga_palette = device_get_config_int("rgb_type") << 1; + if (cga_palette > 6) + { + cga_palette = 0; + } cgapal_rebuild(); #endif @@ -334,20 +338,20 @@ static device_config_t mda_config[] = .selection = { { - .description = "Default 4-color", + .description = "Default", .value = 0 }, { - .description = "Green, 4-color", + .description = "Green", .value = 1 }, { - .description = "Amber, 4-color", - .value = 3 + .description = "Amber", + .value = 2 }, { - .description = "Gray, 4-color", - .value = 5 + .description = "Gray", + .value = 3 }, { .description = "" diff --git a/src/vid_vga.c b/src/vid_vga.c index 501643cf2..fbed319d7 100644 --- a/src/vid_vga.c +++ b/src/vid_vga.c @@ -105,7 +105,7 @@ void *vga_init() return vga; } -void *vga_chips_init() +/* void *vga_chips_init() { vga_t *vga = malloc(sizeof(vga_t)); memset(vga, 0, sizeof(vga_t)); @@ -124,7 +124,7 @@ void *vga_chips_init() vga->svga.miscout = 1; return vga; -} +} */ void *trigem_unk_init() { @@ -222,7 +222,7 @@ device_t vga_device = vga_force_redraw, vga_add_status_info }; -device_t vga_chips_device = +/* device_t vga_chips_device = { "Chips VGA", 0, @@ -232,7 +232,7 @@ device_t vga_chips_device = vga_speed_changed, vga_force_redraw, vga_add_status_info -}; +}; */ device_t trigem_unk_device = { "VGA", diff --git a/src/vid_vga.h b/src/vid_vga.h index 77aff5056..1f8fbe700 100644 --- a/src/vid_vga.h +++ b/src/vid_vga.h @@ -2,6 +2,6 @@ see COPYING for more details */ extern device_t vga_device; -extern device_t vga_chips_device; +// extern device_t vga_chips_device; extern device_t trigem_unk_device; extern device_t ps1vga_device; diff --git a/src/video.c b/src/video.c index ee3bdf0d9..1764b8739 100644 --- a/src/video.c +++ b/src/video.c @@ -74,7 +74,7 @@ static VIDEO_CARD video_cards[] = {"Diamond Stealth 3D 2000 (S3 ViRGE)", &s3_virge_device, GFX_VIRGE}, {"EGA", &ega_device, GFX_EGA}, {"Chips & Technologies SuperEGA", &sega_device, GFX_SUPER_EGA}, - {"Chips & Technologies VGA 451", &vga_chips_device, GFX_CHIPS_VGA}, + /* {"Chips & Technologies VGA 451", &vga_chips_device, GFX_CHIPS_VGA}, */ {"Compaq ATI VGA Wonder XL (ATI-28800-5)", &compaq_ati28800_device, GFX_VGAWONDERXL}, {"Compaq EGA", &cpqega_device, GFX_COMPAQ_EGA}, {"Compaq/Paradise VGA", &cpqvga_device, GFX_COMPAQ_VGA}, diff --git a/src/win-config.c b/src/win-config.c index a72391e1b..0ffb74c7c 100644 --- a/src/win-config.c +++ b/src/win-config.c @@ -58,7 +58,8 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR int temp_joystick_type; int cpu_type; int temp_mouse_type; - + int temp_xtide; + UDACCEL accel; // pclog("Dialog msg %i %08X\n",message,message); switch (message) @@ -201,6 +202,9 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR EnableWindow(h, TRUE); SendMessage(h, BM_SETCHECK, ((cpu_flags & CPU_SUPPORTS_DYNAREC) && cpu_use_dynarec) || (cpu_flags & CPU_REQUIRES_DYNAREC), 0); + h=GetDlgItem(hdlg, IDC_CHECKXTIDE); + SendMessage(h, BM_SETCHECK, enable_xtide, 0); + h = GetDlgItem(hdlg, IDC_COMBOSPD); SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"8-bit"); SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Slow 16-bit"); @@ -414,6 +418,9 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR h = GetDlgItem(hdlg, IDC_CHECKDYNAREC); temp_dynarec = SendMessage(h, BM_GETCHECK, 0, 0); + h = GetDlgItem(hdlg, IDC_CHECKXTIDE); + temp_xtide = SendMessage(h, BM_GETCHECK, 0, 0); + h = GetDlgItem(hdlg, IDC_COMBONET); temp_network_card_current = settings_list_to_network[SendMessage(h, CB_GETCURSEL, 0, 0)]; @@ -433,7 +440,7 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR if (temp_model != model || gfx != gfxcard || mem != mem_size || temp_cpu != cpu || temp_cpu_m != cpu_manufacturer || fpu != hasfpu || temp_GAMEBLASTER != GAMEBLASTER || temp_GUS != GUS || - temp_SSI2001 != SSI2001 || temp_sound_card_current != sound_card_current || + temp_SSI2001 != SSI2001 || temp_sound_card_current != sound_card_current || temp_xtide != enable_xtide || temp_voodoo != voodoo_enabled || temp_buslogic != buslogic_enabled || temp_dynarec != cpu_use_dynarec || temp_mouse_type != mouse_type || temp_fd1_type != fdd_get_type(0) || temp_fd2_type != fdd_get_type(1) || temp_fd3_type != fdd_get_type(2) || temp_fd4_type != fdd_get_type(3) || temp_network_card_current != network_card_current) { @@ -454,6 +461,7 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR buslogic_enabled = temp_buslogic; cpu_use_dynarec = temp_dynarec; mouse_type = temp_mouse_type; + enable_xtide = temp_xtide; fdd_set_type(0, temp_fd1_type); fdd_set_type(1, temp_fd2_type); diff --git a/src/win-d3d-fs.cc b/src/win-d3d-fs.cc index d6fad07c5..9f8f91b0a 100644 --- a/src/win-d3d-fs.cc +++ b/src/win-d3d-fs.cc @@ -85,12 +85,12 @@ PALETTE cgapal_mono[6] = {0x2c,0x13,0x00},{0x32,0x17,0x00},{0x3a,0x1e,0x00},{0x3c,0x1f,0x00},{0x3f,0x27,0x01},{0x3f,0x2a,0x04},{0x3f,0x36,0x0c},{0x3f,0x38,0x0d}, }, { // 4 - grey, 4-color-optimized contrast - {0x00,0x00,0x00},{0x0d,0x0d,0x0d},{0x15,0x15,0x15},{0x18,0x18,0x18},{0x24,0x24,0x24},{0x27,0x27,0x27},{0x33,0x33,0x33},{0x37,0x37,0x37}, - {0x08,0x08,0x08},{0x10,0x10,0x10},{0x1c,0x1c,0x1c},{0x20,0x20,0x20},{0x2c,0x2c,0x2c},{0x2f,0x2f,0x2f},{0x3b,0x3b,0x3b},{0x3f,0x3f,0x3f}, + {0x00,0x00,0x00},{0x0b,0x0c,0x0a},{0x12,0x14,0x10},{0x15,0x17,0x13},{0x21,0x24,0x1e},{0x23,0x26,0x21},{0x30,0x31,0x2e},{0x34,0x35,0x33}, + {0x07,0x08,0x07},{0x0e,0x0f,0x0d},{0x19,0x1b,0x16},{0x1c,0x1f,0x1a},{0x28,0x2b,0x26},{0x2b,0x2d,0x2a},{0x37,0x38,0x37},{0x3d,0x3d,0x3c}, }, { // 5 - grey, 16-color-optimized contrast - {0x00,0x00,0x00},{0x0d,0x0d,0x0d},{0x12,0x12,0x12},{0x15,0x15,0x15},{0x1e,0x1e,0x1e},{0x20,0x20,0x20},{0x29,0x29,0x29},{0x2c,0x2c,0x2c}, - {0x1f,0x1f,0x1f},{0x23,0x23,0x23},{0x2b,0x2b,0x2b},{0x2d,0x2d,0x2d},{0x34,0x34,0x34},{0x36,0x36,0x36},{0x3d,0x3d,0x3d},{0x3f,0x3f,0x3f}, + {0x00,0x00,0x00},{0x0b,0x0c,0x0a},{0x0f,0x11,0x0e},{0x12,0x14,0x10},{0x1b,0x1d,0x18},{0x1c,0x1f,0x1a},{0x25,0x28,0x23},{0x28,0x2b,0x26}, + {0x1c,0x1e,0x19},{0x20,0x23,0x1d},{0x27,0x2a,0x25},{0x29,0x2c,0x27},{0x31,0x32,0x30},{0x33,0x34,0x32},{0x3a,0x3b,0x3a},{0x3d,0x3d,0x3c}, }, }; @@ -112,11 +112,15 @@ void cgapal_rebuild() int c; for (c = 0; c < 256; c++) pal_lookup[c] = makecol(video_6to8[cgapal[c].r], video_6to8[cgapal[c].g], video_6to8[cgapal[c].b]); - if (cga_palette > 1) + if ((cga_palette > 1) && (cga_palette < 8)) { for (c = 0; c < 16; c++) pal_lookup[c + 16] = makecol(video_6to8[cgapal_mono[cga_palette - 1][c].r], video_6to8[cgapal_mono[cga_palette - 1][c].g], video_6to8[cgapal_mono[cga_palette - 1][c].b]); } + if (cga_palette == 8) + { + pal_lookup[0x16] = makecol(video_6to8[42], video_6to8[42], video_6to8[0]); + } } void d3d_fs_init(HWND h)