From 7ac88efac1fc2657b7730e73723e7da81196cf4f Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Tue, 2 May 2023 19:23:51 -0700 Subject: [PATCH] Support for VGARC Initial support for Bill Shen's VGARC video/keyboard module for RCBus. --- Doc/RomWBW Applications.pdf | Bin 226591 -> 226591 bytes Doc/RomWBW Disk Catalog.pdf | Bin 124414 -> 124418 bytes Doc/RomWBW Errata.pdf | Bin 28788 -> 28506 bytes Doc/RomWBW ROM Applications.pdf | Bin 159616 -> 159619 bytes Doc/RomWBW System Guide.pdf | Bin 529182 -> 529184 bytes Doc/RomWBW User Guide.pdf | Bin 597318 -> 597352 bytes ReadMe.md | 2 +- ReadMe.txt | 2 +- Source/Doc/UserGuide.md | 1 + Source/HBIOS/Config/RCZ180_ext.asm | 2 + Source/HBIOS/Config/RCZ180_nat.asm | 3 +- Source/HBIOS/Config/RCZ280_ext.asm | 2 + Source/HBIOS/Config/RCZ280_nat.asm | 2 + Source/HBIOS/Config/RCZ280_zz80mb.asm | 2 + Source/HBIOS/Config/RCZ280_zzrc.asm | 2 + Source/HBIOS/Config/RCZ80_easy.asm | 2 + Source/HBIOS/Config/RCZ80_kio.asm | 2 + Source/HBIOS/Config/RCZ80_skz.asm | 2 + Source/HBIOS/Config/RCZ80_std.asm | 2 + Source/HBIOS/Config/RCZ80_tiny.asm | 2 + Source/HBIOS/Config/RCZ80_zrc.asm | 2 + Source/HBIOS/Config/RCZ80_zrc_ram.asm | 2 + Source/HBIOS/Config/SCZ180_sc126.asm | 1 + Source/HBIOS/Config/SCZ180_sc130.asm | 1 + Source/HBIOS/ansi.asm | 5 +- Source/HBIOS/cfg_dyno.asm | 1 + Source/HBIOS/cfg_master.asm | 1 + Source/HBIOS/cfg_mbc.asm | 1 + Source/HBIOS/cfg_mk4.asm | 1 + Source/HBIOS/cfg_n8.asm | 1 + Source/HBIOS/cfg_rcz180.asm | 1 + Source/HBIOS/cfg_rcz280.asm | 1 + Source/HBIOS/cfg_rcz80.asm | 3 +- Source/HBIOS/cfg_rph.asm | 1 + Source/HBIOS/cfg_sbc.asm | 1 + Source/HBIOS/cfg_scz180.asm | 1 + Source/HBIOS/cfg_z80retro.asm | 1 + Source/HBIOS/cfg_zeta.asm | 1 + Source/HBIOS/cfg_zeta2.asm | 1 + Source/HBIOS/cvdu.asm | 1 + Source/HBIOS/gdc.asm | 1 + Source/HBIOS/hbios.asm | 17 +- Source/HBIOS/hbios.inc | 2 +- Source/HBIOS/kbd.asm | 13 +- Source/HBIOS/std.asm | 6 + Source/HBIOS/tms.asm | 2 +- Source/HBIOS/vga.asm | 1 + Source/HBIOS/vrc.asm | 643 ++++++++++++++++++++++++++ Source/ver.inc | 2 +- Source/ver.lib | 2 +- 50 files changed, 731 insertions(+), 14 deletions(-) create mode 100644 Source/HBIOS/vrc.asm diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 81825a1f71f6c5243b4cd3487da8d231399630fd..84ff7afec35df305460bb474eb71ff732ee6162e 100644 GIT binary patch delta 583 zcmbRLig*4i-U)5>C;M(2@a+Aq{e$^p!DTiUwpS-hF5HXy5%$Hz;kk&&+yC-jk(1W` zFz`JP!2R{dj}r=em=C>fQTPAW?cgvkb^%M=l|-eA-Tw7zMH%w(&TXZ8bM$W?ygc3d z;M?zC&hGpB>QbOS^P5e6{_~UBPVyZsZuolrpM%SsAO_B9=Y-dk|0t|?ozgHV{>;4G zy$VGdb^mtOtqqWo*)-(`<01i8*|SjR^!zB_5IkobPpn=6;U5E3?U4|cRx zlZ@s1yEZ`4X8O|oZyOf2zg=)Frm_BntC3K8Ba3l>Nn?=ImUU}_6YYfKv|lgU`L)(AA(4uG5 z_r>qc*E9Rd{v_Yy4eeX*t^E7P{lKu5HJb8fRnsl@m@UEWhsd zP-o}G2md=KZ}Pqt_Ij=JqRkfa4AJIWL_%KcH{PyDTKn_DvxN^f*GDd|mrZ$~G2L+y zlW?;WQ@axrBM>ufcVc4Zu+lL#Ffz0>urxB$H858S|!8U_(gBbjDI< FIRLSP{~`bY delta 583 zcmbRLig*4i-U)5>r}G{g@a*}m{ewBsv+D{o2hSDX=q=l0e}sM6a^RbY&bI&c8mXS! z9y`x&SeQET@WTm?KNwn`GxE=SBi`6BC3XSJtD}iZKZ<4l@jtm>7v)@b{_CdHZQ|wn z;Z3LaKb&6s`|8TY^U5|{wz*?_l*i8c%PGcZ`?H(A-{WNcaPXAo!J5|k?Z%7vUwmGC zv)R_aL#9jq{`2cxM-M9g7TVu@=}ClyjqCL0_W^5^t3PX+@*zs|+HllO$g_lrcXOfSq@W#}I4 zXr(4;yX*bVHESC;EQ*w!^ep@qlS{qcBtwf;j}4h!gVmSLy)d;Xs)6(T)FQz<=XREx zOq~@Kapan?shMu&>+0S)d5Y6LA|t}Q=F9iqe*aw7x2#EUjcTxyweQ?ry$e^wnB2K+ zyx9jE6qdpFZJtv^H$zHA}3X}BUdm*cG_C?)=5i~XZFUuvhsXamBU!u_T25E z&ccfi<{$CAsVcqt>@~%UfphX3a;1W#R{foRAk}>1w>_D~mp@#zKX+K%Pwjr?bjL+Z z!p%-h?M_ULK+Lq=iHVuRO2@>|%+S)<(AZqpz+BzHKwVQo-#0(SC9xz`LBqw$$iT?h z0Ip diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index bb1fc47da8dd98bcd39e8ada5576a943c493e274..e4cd8f440c0b104f0e25b6148c602a417eec60ec 100644 GIT binary patch delta 4933 zcmai2duWzr6z7|`*&;8DG-&20G^f?@xnFDvZfyZ zJz@(r1*Y3MKynJKb)Vr*r7dJ{xVa|ls#8w zE$&x$e9N?F>dscr(JgcD*Rw}g5B&5<>!^o1KdNX8PCvEv^ZE(D-P$~z6?Hta>EVO3 zJ9o6?oNQ_s_hjXzLzPR<>SL~P`I!xEOP5VPQCT(DcNHWW*6)A5etmOp`^`nwE#J1^ zsK2mx$E;IrM?V?4_`Q$cD!TZ<@#X`Ke~*2AX2Y`1IScOon}7S%&MjNlHf6QHdbQvA zF_(_MvHNh&`44VYEN!@NS@Aa)M%0dMzFwW3)tH?XoBiG6nhEZi*RqJ&LdFWm#K%^w zSUmBCRZHTdCyoM`%Q#d_RGu8uHHYso%K2`B02aNMSnC8y8|V?nIZb8SXzVm|#!y?!Gcy_H zf-&bLzL*1va5gxH{6@mFkD$0fdmJMJ-pf_aHA7R<7UUWh*j^zkJktaSt{$Ou|Oc#erL zge55v99kJZPdFVAArKuyEwoWYCZUM&fsl5hryVCKXrDql-HU|RhD72eZj6v4M#u%W z33o5eia!j`<W*F?rSDMbZ0W3-f2g31IL1xg7(A=&?WTd=YK7>YzQLrAD$(qTPiH7Qxm zG(ii_OLx|wXN%Cnl00dlNu$vKH6Cg(BNawVYfmad!-rEBXyN)$G-T?+6id}?FIrkV z(zvvj7FPt6J6RRLK@Wj+?XAouVe-74L6df#KP~5~AV2H{TY67(0(-U~3}#d>AIY2#KBtIdXvIlq$&%dN?djIqA;w2YbO`d1o(Vp&|#ybROmJ?!nc-cjr z2K+rt%BYZmv5e*kssy0H!~~flG7fWtoaX@7C|Y0(&Y=AdUQQC{3GxnvMaJA%99_r{ zynuiq;RlD;k4rf-xo7_ap_d4L4*wZRZz{<}C6rNOdZA2W?$uaHsZnJmy42ZnX#Hj7 ms$_ySCFR1YQU&W9V`byx#s8<0_~mMB=m3>lP*66bJoi6<8!$Nl delta 4928 zcmai1eQ1?s6n7I_T_dH57OCCg?pET*^ZlXQa<?AnIb|W*cGU$BJ&^zCfa61VHR;l_jftlA_qGqNvMZj7ZwMwlQ@Hx0 z`l9&$)6JdRXAgYx&-hu=Dr{Hm_goZayJpu9fCoj3R9U)$WV=2GL-;w=?R7ENiK zd2!*@JH4Lh{p?Y{Ew6v>+9BBohGb`zwLhr1;a&4xD*?T}=Az8PqVdD>3$r5Se zEd0gm;<3~p#*9-~#=YiPCWO)ri_T;f29kW@&PQdOYj4oCoH;ISRF8SbE!N{ka)$H( zrgmMjAdQ_nav=jO=t9PnR8*!s2E&xm0vlG2>4+=<-jwe~lLn(XLo6_+g&`Me#iJL( zeOem|hAYanG_oLqCIlnQU24)`oNdTEo0S_lhd*(p2|+?T94)38B~okaus=pQkCVlM zS}KCTRR$)nNcK5RWg4!;K02f6S<6XOos*fV6UK^hZUl}D=gMHz%ri;#w8eT{S%v{Z ztVj?zw}HTPaiuIhtVvx0K9Y-`Ig44~P7t=ZV|VQaY5F-NGVuf|k^pqvXHpn4D3}-6 zuwWK~8-C5O;iQV#2>BOK_gE2Rgf1aG!$ly3B_R=nCydF+Xlf>eo=Kr9CBjgHEIe<^vS zBtkbqhWi2(i9&}#PkWB@Lu%tN3le?=w6@*^2%*$a@K|O&$!cjGDKTlFPtvm-hf{IZ zb2jK6bBY;~a1z3aQ7Z<$3mJhkINec!UE=4F~*t~i|7j!Lo&=yGc8yGOS-5LlJ&JUw3X;LttB~D-i zI}v8f1Ug-d-KA)twuzzzggvOcLBrg}GHXcJGuAkIpH-nO(XeVnjptp@u1F9l+$qiWbtE$Y24) zGT2E7Kuc%7wbl^O*4dO@@V|$CSW3vE2rCIEU>qaK1!wOelQ?v6naariSStR^K@-M_ z1g#%W#qjVwjF>J@B94G!lr1UI?H)p%wNh+-Tq|Cxghr zcH0$_SsC=ha6)l{!_efgVJ=9AbDX?cpwak-s zc5&}uI!5(4?1dy1z4L;A_AJ1jz+s7333z+Mc8!g|&WvRorZO@DXCWx$Y&V$n69XRo z62}SR&S}0Ii@gi;1FsyAo+LjwymxE_Oj-EAb6z6)IlN-S|N>=wxX1&vZu8u_tuXOXN=+{@uL4%nH4W7i7l_6x2%4}vX@_p!Tr{=SRzqA Hxgz!-pP(l2 diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index b7a78e0369538ef2cd192f7766d734fe7f7e8b50..61e9fedb95fc4d1bc7e660ca8aa9ef257bcbd076 100644 GIT binary patch delta 8958 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 OMMQDf*q~a9IR6FYsULj+ delta 9308 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 diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 41a763f0129508d6f3045cf2e308a2d0770b35ca..74aa7b2ee8fc918fa26eff86ebce54b768a88214 100644 GIT binary patch delta 8058 zcmai3eT>(29q)b!$Ss(+W5k2X5s^Hk_j!I;9NP(Z8%~4+1cX2j0Tl>#O3KnWk7Lqo zGp?tPmc*zb6Vn2j)CSru1RKkOHo}UC)Y?+1n`Mqw^!mvC?#J)_{%+l0@cF$z@6Y@3 z^?vw1dTvCgbY#i0O;KXf%r)^j5 zt?j)u{>gVg{kwxhm;U7S6L0pNne_hZ*QSry^yZjXR-O6LC&q;_KYV@u%J)02-!kN- zZC|}}*QR&=d7$-l_kVu<)GzuT-rRd=`Fmsk`a<{4Keu1H=EaliXCJvrcW$WJxAwZB zn>Q}_V9kv092(TqIpowMThHFzR5yF_mPdB&T0D8!w`Mi{Yu?v(eqrC=SJuBe;_-#; z(=Qxd{q&c|x12xn++*r&-Kh36A0E8W^u5DBT{-9JqgUV2_RTXlJoqX1m%C=YactyE zM<4pWIDF#Ks|P=`{l-eBAUJsTVMu6yn6JrP7XDhFPIx6j8@?_}0?cEB<@#*3#~p zn7Zba>ZkYyk^dStG}M0d4dhc*lmBED zXW=}t4|EHPN$X-@bY5y^7_Vag8!IY4^Tse?yrYg0!h6RbiIUkO2(MGkJeY~G4VpVE zSj{XQTrjB(EIOI0AqElyLPTj;)I}BPT`8kvCXU83txUA~vWG`h%%rq;sV}QVHI`1Y zsF%?i`j*m4xYXPR7SuCJ8`J;fz>CUT7E}s85UB?&I;jL>KJWfS*wa=v=dGwIUj0KnRL{Ss;Z+2R3@XX52-7&peh(0B#k5Ey{1nAuMjgQ zGYhJn6;@I0tPad)R>z>zgau$hUzAF*?36hoh|#1%G^dWtf=VG(&@6IPjMTRYp`<>Q1Dk zOg)(eH8_eoYWzn9z5-4F2kHa`$kpk5WqntJLsH&E+ohy zyRxaTPH!OuK?Yq5jV^=Ml`3L|W7&%K zNKz*oA0vGpNL6-pCAzH8%+ppF*5aahU?Ge`C25*kV=(4)p+2+9VudfG{y-9<|6nMN z{)5vQVVErpY5*}Ys%$ynE69adjv-B0UJyXmIZK1eI^;UzYpqTlnFWbAOgA=C7RYTj zdI63luqCsgsfF^c`B`Kgxl<_cscuC<3_5|fg$V7GWroBVn!ENw7Dh5#xLh(QTVz;F z`wLlMU}CoLngP5s7PY?S&H|4(Zw+PPQ4gqc9*rc1qs)S)FY<;#wU>xXq6oSm%rd(( z3(nm|e#XECUPfD<`ic~R9xPQ60bB};ztntJfi1lCba(~4c~%>d>={@x3!0DK2G&}8 zR1ap0=v7GP!Gd8E`gPVO1?(cI*#m}hnvX$a*G0^ZvjVyScdh=@;snPwCm^?M@C_itLgsF;AVP!O6bQ{{?BJp?sXen`f#D*X zUV<0YXLt(pf7+i}Fk7H>kTZ}=mS6!;uWrNTi<3f&{n-0qY*72-XSJXPFLCoX;#ccg+U)0I3NbScKq{Tmu#?z%dsy6Js|< zSU?dGUFrf0*4T##P_7m_lMALW`eybNV!j$Z1a@#BtmY>IrpkUdUIA}_VSYIql7Ns<%u0VnMN|aVcSC7gv*W_GDcLU-g~&+LC)u1?0(tc6@{_@mU{~VC<@I6 zpolr2`2v%KNbQ*gH7nF8upstP#Dbv1)_Z?u!IH^97e>yp8_N!>Qq6q@eJwr@P$_T% z!&kG#IxDg+FJe(d{D?KKq>CNg#V+_Vze?{8LRLtlRCE}?Wlx2{BZ{p_F+dt%PS%lG z5G@r68L&VT$8^L7v-&L4QK-im3pa>4u&BCHN5?jFShg4Fh^c`+j6%-NA_DUKS{@1_ zDn5}%CFxooa_0TDTvy0KTM|tm=Zj__gwUxgvmh`7a!h1YXvN3<2ymC_Bv`P9En-K+ z9H@}>lr6SA%voqUm>nJaxFnG^<*~UkXko&^2da+sJb*y&XuL_Z-?XvBS)?mgG)-)6 zl_Q^ia>1D@w<-fDi_5MoXt~5AMc7D!Gs}WXOHV&2fsTD-!d4ssU1i)xf!Q5+Saq1s z*oO$I@pS@S&*u>f6fv+uq2C@rj(L-?1%?TqYBqoc@h8TG;HeZwMdk~%w^5|F%z}~Q zlOc;zbTK4Mq=9bedca}|31EqG%E(bboKI&rlx}Vpt$J3lrg@fVj$xLvGo^2}&90@j sC72dH)6Qs^{{KmqH_Vt(`@p95`!{XAfAyMLycw*moiwRsZfouT0CLQu(f|Me delta 9066 zcmai3eXN#c8DFQYowJ6UFgFbCK#-ZO-QOQ1$2tMSFCY@lQFGF2ML?67LF68hgix4} z|81}KZ(96bo73iRo?qPa((HZegEP+j`_8j_-go)ymrcHQ{Xfq8+oumt zyl&Rc3nu>Szvsjy2VeZn?c-M-`sk_CyB?T$=IH)uW0oHozx&NU?OK2L)(5`+_Lc*; zPFS~X^|T{j{_EzGD-SQ;yyVD<~D_~+zBhpxJ!f9R3t z?)u%9sh7;V-T6z^R4sr3HwYhHW&^u52Fcf%)#uRH$k&jydpxbOIPW<2qcJ*y6U{QgC= z9~-yh<$W6;I%nI7KhK$c><2HsxO46kvv%LO@$aX1?H%`FHT#7-e*NI$`@)j&!oi~l z_g?hY?L%Mu{ZHTc&$g#`oVaB9qMgTz2X9-j`klu2PQA5#-mJB+gk@6?n{kH@j_jCn zbj-_7tv!81C@w#@81u*Hm#!Jxw{C3Td!8KI*SG!3ey4-ZR(sXheRbajl|NsB`HbRxQCfOwR8LhqC=ZuS{ zz7M8`Fe+PgZP&>~xlw0D=kX@-nzJP9eOB^&K004pD`1RIS)2q0Do>sXM)5uyc%Rq2 zF9hLL=t#yDHET-GSNyQ?hiQxDf#)rLuNH7;A>`u7MfyOm?n);?99x_G+-a|7rjk8|idj zMd=wtB?XnvUPgp6)+qTsW3B02XE7SN#yTfmZK5M!ni#ZntBKJ{Z<(09^r}T_VWCuPeWnvzL=NqP&C)=dZGab={_k*r%}xSDIqS*&&N9zAo3wPb>){!% zOhrf0B2KRyP*BH$S6)jm;D+hmJ<_O@)kYC7Xk&;MbkPHF+HmNAfO{xOmVjw;lJ3`5 z6Slx8xs)ya-*LYN2<3@2E>r?Z+b)5$!%5pr?uXhy#yC?w$cLIf*E)EP*~ZPE?;Be< zfKl9x)-lPe_D&Jec_c3RS???bix1w?_i}2ckD7x5td$N5&dTJ7Q@bRMj@pxhq7Ouz zF^5pO)fPd;jCdAah&d~{20+k>LC)k{9gHE&`fQ}Pv@0wDUIP)5M?i;))^Z>!Krur` z>tL1imd>tq5MRY-c2QV}io*vwNp7sZ9?-FlAOT{dl%{j^Qopf^AZ8Fp5+)${lE%uP zP8fmUn-HH=TSR^(;n>jE_l+w&B{37NJgGuDAhtEplZ%leh;5M~n&Dox2vwzNUKt?P zvE3RMh^n>q5@-lw%Cc6cC^3MXV`MBM(u9ggit=j>R^C0R^KK8||n} zM8;t+_*hiqt!b7u-jNcY=t__Pvm`jgizZ`&A*QyuU6~aX_h-$SH`qu@vT+i2$fy)X zNT{tlu3m8lS61BL%mEGvk$3FiEqM~xBL={zwfihx2&fXXIRl2ND#kvWLn0sNm{r zz`yGevkq0AWDFEEgkW$Yg(nU|IPxe-B&fa8D#{)NC(d;X(IY8TFT#ah**cJLpD3g{ zy+yk;Kp{nun@~@-{RRrgpv^wBQqzePmq9mz+;AUBr>CzZD zfxZ`!b(Q$Q%K!{KhkpZO_5Q&w3qt$L8L06K~Xb*xepTHG0M+6GV z9!dgLus}j)V~8CQ|C&3e=p%784on0R(e=tJ0qN1zq0%L)hK}Z3qs;$pw}Pu96%i#L z(Mf>SHi5K>26ZkqKPacE;6ycTDn>W!4;6C~vmsPC=qV)@5++|VAD|c_{zw*mp}+?w z9X<9HOpgiF&%#{!Borkw=_DU%=8$@HXOL};5+-)tuaZYuQny;W&={GIa=Ij(`oB~P zG$F!vE+x=4)7T;fBeODO1En79Yw}zbCQuA8){QBJ`QSZ>GX)yPLDth4Bn8BCS4Rsb z7-2~~LD=;;9S>jO z7^aGqz-Sp0Z7aXw{M{%;3&QWg3|vG214r}#EBEt zCJFQtbUMVI#Q;!YDAL(aBOjh)Jk)KV(rGHf1YqLP|U> zOo%ax2vkL44dd1z4a6FSEEL=N;HUI|N~y}6Er4KAAQ-}$%KwzO6~tPP6D!JFn8nya zC{ZbEnWLZ>Hc3~bSt9pmdNI%#eld@tT~Rv19mK3E#f6B6vBMm#Iyl4ui3VJh#iks4w=;mAS> zvX)*4u#Yl2CR`m)&m2wj5XLOJeiD@xs%Bb?%mJ=(^J3((@(qNxCt3bNm7?(uo)sizZXjeW1t0cN z?+wCe1r^TUc0Ys-)g0K!IL0d|E9UndkO*akjQLNMf=d5GF+aV4s))Zb9%}`VAgd_q zu}@M99>{pIj&~{^d1Vu63W<3zdj{iH0wyXn!D$NACqbwYPNSogN-jgkN_9wCp9>H| zn1G4lZ>>Tr!HTs^JcmoFPaxobOzE&!010z(S;>`8IdTA`jc#_1rNR!53|{FaKCH&T zM(9A*8w*;*+j5=m6`p8-5g`n$N|MwTL)I#|N-sFn+metlrfYL#CznAu$S{GhtEc|* zg9fu^VGN#fqBO7^8qyjXm%3*Pd@v?flFD&^>D8`Vk(6a@Yh*1s#DVkiUMFO+MzWY> z1=o0OY2WZo!)|(l+x@UjpH+D}nmvycq^6tU&zKoAbr>4F?Ei21(%{h0z_*s)v~2l` VWncN~0PMia_rR1XGv>@3_#fRWPv`&u diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index 49a28f870544667ac5011d448a11230e4c59848b..131d2fc094b9d07809a7a6c6a17800f0e39af3ab 100644 GIT binary patch delta 23140 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

a5FJ;Z+yu|B#8DbX651}X&!meqL(;LIOX zL?Bc70Dr0o;gr>c75+iuejA79bs7kR9HgcWXta!73;xGRNW641VX$fm=6h^LLr%h^ zn-c@+Hp5ltt3uQ={tNWm?wDOqvz1r`sjJ3j^mgEAPcY2ySQoXQg65k&5MjBE&73HH!t5ccqM0C@22&WV5&S2=0Jj?v7c?`bZAGeO zMm|8$Hl;-&am`$*W+Q|Qv?dJ}rsSv}%nf~HT%pJ%H1jfeD4=%z9+sz<*a?BL;%;z3 z69UFnn(RZXtuhHsHIZ=xk}@B1ANrXGO94@HW+8U7tqY{#~O<9(Dynqjp; z!zs?3@ZfVGb|&d~CN+dq5*zJKfJTffo5m+I+=sKMyFyf#&p^wcf~GDXTB-2|Gzwh8RcOYUvM0t= z=_ia;SI!4XjP!#E^Jp}8MA5e4MPUc#Z00l>Ce>$#h z$6?~^{z0%ZTjkQ5rQg#od@p zMMMYE8Mua~6(#0c7i-W=WeFFSaLFqEt8h-f>s5!?qRhbu>#+d|BNQ|(5JGE~iwqhD zvL_fl@gM1}cAGHS@N>p>=8gmE(mRf(&NVbGA^%$QOj4wafQ6}r192OKW~qwMO!}J$Z{>T?Ofcyc48ffF|3N>2=GH7i7GfW) zeGy(n=)Dt7npvh9X@t-$;y{VH`v$K7fWi96vBgs zWGWYEe-m0H)(RI20c!An#s0dnz@i}`l|_h1cu-*=B(p&TU(x1e}yXtrr;i^l#o0mA7Wx6$Niixj4I6g8a&T%@W<@6bx$7pWbz zxw>=yf&DE3pieH$v$epgs-93R%4yLsb=xfn`&gTT|C|?4Tu)41=rnrMY#gm$MzgjE z)}V{n#!+|GlK>Hz?FVHMza5+I^py&&sidE>2(oH85HlAlJBt56<}B8uH)PFZB0yb) zLZZ`Z#jm4JXbSJZe~8VRMUZP-1SsBU-I_&!J9J#&zDlF3-r_%^YQ<=fb8BS^n)wZ) zYC}LMn5#_zV5DJwzL_EZ1M1-YgYFOvS}Yfn!A7U!f~M&^v|I&_US6IJOy>3o2XKPFT2)q#LW${FHLty?hHx=tZDSHY$Adp!dy6A)-BT#O@9lnv4qtKk~s?70(V znp_QBjH9eL^FM0>{f#({0Y7wP@x#tHGbNE}uI3 zel<2@vPH7cFkP}4DuZST8K=PubFC!I?(m;{FZe&OAADZh9*I-t4SM5oOjhT_IKvH~ zS*eDFCr@T}@?GwU1FKEXH@|ZHwv&4Nk)E5-NgD#d?D#zf;ZNHcR?awcQP8Z&$2RHn zHU5Bsn?&$z$rrW|CO}1nrU*Ca8?jAK8tpdb{Ao9@I84U`FsY9>f6aI29S-9=qgB-` z7Usp=E3JRpoXhv-Z|Nt(0zl$-h8{`$1tLm`K@VwlIAj3JYYwQJ{2IZ`SkNzRjXF#= zv=UmY=reOkabz=$vp|8Ol!ngC?JHv;15Nqk8Ldil+gb}dxUi*GffXD3X&;!E+_sN& zwa7LPZrMf?jdPswrk?cGm#AyJi^BhBEbFBB@c^-7?Oi zPfAD5Tg=wXd`#}K+`Qm>s5bGY`g(9N%~*LfXirz6QQcp$WWfD18DdPREFT9A1IR7AH@v|o?3jl4#Lb|#v zpkS2c1+*9{oQE-*{!&r!pZ721%E|?BQni?b6PmU&xAo2NR96qeqX*w$Q|vHDR5Y6h zUqCT<1Y&yvu2WZ0G}gGtA+3U&7-xHmCt4;>fu_TYiDJ-nsF(v`0#S}IjXd2om$pnh z2#K{Zmv-$DZLS!R8{3J={8c_lhg@@cRH?T>zn8*A2z%q2+x3;77{_WS1|v63!?Eg# zN!}HqVPSejgoE)KXhs_=M)a+i1|i$3xr{Sy#%s9d#&37%!eqzegZykLMs)A^!v08^ zamH%O{^pz7YV(@o!+BFZwe_u*0)xoTZCs;ux_Atxh$M5R(?5>0@T(Kq2DbO$lH}KJ z5P)Az8+eYv8w5P2=%8+6+FZ8zoZS|Iu4Sc^Q?);j$0oS~!o2&kUx#5Fv4nE4?AL_T zBqGM@H9j|fO=K)4Atiyg8fTC&r!DF_Zy6bVI&LiDzvbbx*Y6+5yg!<~4( zVRoCKZwwR7MT|ti@{)K*XqzF~)Z6Ddu*D0MS_cGeQ4Axfu=k^>rN75=kifBY5v0UY zdCqGYBjcP~K!#?V%Ec=u&OgKzpn0aHFviShi#n@g2?p9Vu@}FlscZ%R6Fmy%=6C>R zcv9podJ^hD7D+`#%N!8R7RFV6SICm{2$p>^zc8rgfk$R~x_AYrw3hT%zlW?Y0^?PE zfy=ZGx_DmV5*#MmHp81Mp)uDY@`&&!9NfJ9*lox3krCQ#Pf~d_XbN9~$@!7#1DEg7 zOJcDjv{}+QH3D=$+C}+~IMJ7d4Ut87JK!pT@iEE7*N^7TjR3KOnJ%70S|po5)%3)? z(Xp_Fh6xjz$TyVJRTQ~&hnPpxMM??g%y@aD1xmWB?2!yKf*#=(*}*&t9UB3X5R3ef zK|3)&3TnUx)c`XB;As}}P&1y`@0k&xugJ1w9=Mu*Qd~Bah2M}ghz9jESpdAS@Rzp| zy$KQpMU!AE;wHfq3T@M5isn*d&+2A*6R^l!Mn(XKZa54-G^Z@Y0ssX~?-R`1RFMWt zd(0ibJu(fbevT(3^f#!xqj_fe3}SE+(NLpy85%zkp_`#as@c5iCENC%drsQBr{2AL zce}4G_m%ZI`_4`0raj;Vd(Nr$?%7+ude^J|zabylvF!)8)yJKF`rg;>JMRAgOjycZ delta 23068 zcmai+d+=^mS;yfZ{O}Z%oYNczM&`(HmD}EH-?f+^&xwnflubC4(=oZtAP@&9O~iID84nL@ z?X}jkp6mB{*82yy@4WT)oi|*0V0GhFJNo;t{L+tp|J~m><)wozIp_3mAAIDNPaJpH zZ(X$IvFmQ#TAp~@W#4=G2cJFvci(l{6?dF`+TTBM^*P(#cfftmzhUG47ti0n|83dT zTb|o~a{k?W-uUtfyZ_?)t6p>0lmGtoNB{TVp8fjYe)FYY{*}Lc?&@0(`OnKY?z-cV z$FBdq`z}82$>aC`&!y*I{ou#1Ibg>fH(z?;8Q*-qf8*D--1*&iJbB-(JC1$jXCA!w z(Jvfw{DJ5G+=m}O>*Qaoul>7M?Y;Www|we^W1iW5(}&8NzW$x#KK8j&4te&O-KU-X z$NP4iyXEYY9z6HUJ1#ilf$jq@ec-Ks_P*yXePZv%5B$l6AAI4#-~7niAHMsFeW!lr z(PNMP)*Vm%L~-L~M?JOw9ala1{;ys4>Gz!W)X^XNr#;Wqhxh-o^?@V5c;uHa`|7sW z{lor;KXvZqC+@xN=GSJA+-{$GrNqKfL{nQ{VpFhhKlw-P``^#ZT`#ecuh$ zPn~lA?*DlHw!QD|zw+?*w_NuNr+xH@_doQ){q5e9Uc2M4Z@+N()BpY1uROi)?$`g( zUALcp%hS(1zI)d@_x#A8|MRg=)u&$cro)fF{~s@|-}S^N|MaK7@YSPIcFDV+-G0pL z4*SlVZvIIA#S7p0*XKO&+COC))bA>QkIoQ%iG#$Ws^2P|2G>a_L={uT!xozR_an^ zlQnE+vZbOu`suTY7 zY^KgC*)_D3+h*#bUhI0g>AFfju5Nr>n}n;Z(KTJKyKeF#87;N8!KN&IT-Euw#t+wY z`7o{@#fgiu9k!`(TG2VJs+`uS9A#PCHgZkyzsm|CLd!d)gU>=BU&o0dC{4`wwY`iT9<@_sZS|y24PspLP~X3h#5(#LnWqy39VHd01c^@aYbQjoQg6J zjhOL&P^VNhol0ve+Pn~TN@dtdS){BQRoR3^GR~BBRxc0S&y8tb6sArrn+dxz?x}WK zt88UlXTqA7d8xvh_hq3h%<{4{A>@*Mk+RXNV{WIWIz!$}SaYO5xDfmw*w4UnGz^1X z$g9fiLS8jy7jlgMDAfxWm19{&j^T3D{cTx^RA>0^Rd&s+Ro*s@v9-lm zOf>@MnRP3yp3m*V>dpQ-TX)8PysTL`6xju?tJN-Kd1^}Cbk>#T#Bwy-Hl5nO5tT?~ z$Ly6IvRAfTb}|`S-PpLgOKN<=EGVtcvxPAu{u!(uj8;`lHF1tEQkQLOwAQpF)oq*W zrkl9W)x*L6)TB&V2o1x$I&e0w)F>x4RjPF}4H1&l>g2RG>y?NttHgaK0yA3#U!oQ> zVU%0F&aNnGqcv%`&N2SO47O@oi!9G{5ooYx%9$d=_=}H#)>KX-V3^G9vm$FdwQvOi zh(?D!}q3vIM{xCuln*V@jcs2X_~{hVk+sO$An0-=^kS3Cn;N%V2pt0HmS0L ziX^ONZfSla!GuoZKV)Bx1(UnlPK>b-&B;=o8j%HPrE{yUmv&|m|1q#}cGb%`eLNj` zmo3sHU!*BI;{pnyv_26-sN=u{tg+vX#Rkl^7@y!#4}t*Ky1^nfb!g7a{|qL$K*ux( zBrtRJL@tK}a-53{>IRAFa*c+d6)WTB@gE9StKWuZfdzZvo+bu_NV#jxR#cb@v3fJNO{Id#xCW_S`gi_Tz*7xgpv|M9;Qz=%43b7ZXgfA;`oS`* zQ4^y%9+08gKCWAhf?pk5Ex`lSNkGe+%{?z|Z0jv-D{@@*bp0^nYKifztr<>4Or0%9 z1ZmLk74?GQ%Mc+$7&Si${+Na3_BF0yZmrj!6-{A^hCr+`Xda>$MWewElk-U^7o5b1 zH)3IlEzFm(0`6N+OdzM`fjqb9H3~1+Bt`^$DvK=acBw21v-V}-SVoCuSsY{x5%BVO zN7;2*Wfu6d!PZVvks8@tg0v}(P(5#_oH-o<}lT|*!!MZ{} zQRRsE2OmVl?FfJvLx?n}XT}N49peDir83Ulc9n9=1#rd|1qUjk`kv!*)N$lloB6ml zSF_BxVz|iRAkak8utEXv*kp7|6B8~dsb>qAMRP@Hq|tIe#AXWNF|JO%NJ|h^f}mLp z7jS^4XV5aeCg!%S+&<$#G3FZ_MI7QZKSQUXaXvjsjqNZR+U2xik&*qNF(Tr902XZ0 zCfCkt42N;6EBxxZQY}ngVrX@4iNd8Lbm6Yryy2dW?Y$=Fd;-Oj(d1)lmC+Q_SRj;E z4P0!=E(SbpA=*pRj~r&|hjM~Sb<`|ud<5`-8PiS2_Y_@15Habi<3cYW+D#KW*=6Bf zG-Cu-Vc_Zq<9irK5yb>Tq;4Z|x}vv%D1o>G26mO5t|CpFE*$V@bK5q6Ap08V=1ugA&`U7&u8}*69_K#gDntkR8TJoP`~itZePp zu)nJ{TI52SX^?|5fF^6S20BfkDsDS=t*(?b*UVBPXi~e$+}wmPLJ}2fXmDYcos98u zharR)>1QfM4e!yjOItM3FHox^K0g{P$ zSy9W=J>lJ*)@WeLXNe(fE?!Y-B^H@2Eag70Kq>m;9(57}9 zK@9vuJqEEtt2sdA?wU+7H&?gGxWbGHK&v9WjH{|%MHlqdbgPPVMz{dYuC8i86m=Xm z(~0Yg14jXDK5pp#>i$kn%H9;0a2Y<3F;u`H|vOQ^@9{S z*U-#UflHfps&mRl>IgztRMOeCW*rHA@P$F){KV9kbkil^)q*xU0swK7U;uHGVDv$` zfCoyY%2C|{_v^x~72^m5EBI;y!EKC2N@O(ZOHNy}FwnV;Bl1v3z^+YA8a%t+G4eM0 z(y`27Q3f~#xsT87mhs#ICS;(;P?V>Aa-x?+PC`k+HyFOk###9>^_*_Gn}t_us?P4c z;hI#q8X!SsD|HJ+O{isn6zXQMaL{Isct~IvNYZZuD-%rcv8frwsL&2EO7(Ch4T!yc zudP>7#W_p}o>W>4)!-ylxSE#Ar);ndMBHe=-$HAUH+4kq=6@Z2=n*}sFZVCw(Y<^P zO<~GJ3U3CnttiXc_aG__91MiXyj50-BF-%8sY5hgex%y z*2O0`rMc_QaZ|!~SA-5MRpqQB_MFfn#^{>DEFht})-j2qON~W11{KfYt`=9-p{f!& zG7jiyIu2S#D~b~pD`a6xw>mB-Nj4hFVl?wB_@rV8cgGk5FeB4o1lYlfufYY4^8=ok z=J3cR@ViwGp^556DU$t&J_b$WcW9kVW^QK{A29Jofd>vpPm*#51f`Z3BkH2+Nm<0u z)}U!_2n`3Mi*y)Yp@EfT!)AsU1I4j613p-4-HUN%DWSFF2N&i&XbST}BgCF=rUzv+ z&)OEAXW{E}H6;mT^3x_0+G`>Jbo-V9P-4mO?0uGp`ji z3F9+pbteuA=y)balNbXcE8D^r+B44DQK1n9>D&lLjJ9eq7o|v~!Gx>Gtc#OH3x-WqPv zT{8dPGX6tm2%L0b;8u-j5MWa$uqboA=!51StkF!}HvEr;EdU_{)3}^Y1`LC25U9ay ze`IvZYG@|F;7&Q`pCD)~LKVko2KzD2U_WRE`{50E$e`b&zi%NQ%lHrANvju3rnF;| z5n-n(9?V?pG7Xw|RN_D41w}}pRcm&=?BE)r92yYKen3;ugzvG4Y?^XGrB4x}jH%rq zOb%FldQH?H%pF71j0nIGr>}Df{|4F^|IH9D8)z+Ne9%C!Kqc2KQjCiX+^VS#4+}47 z6yd3Z2@%oC&46H7EwDi8EYzlFSi#Q%08J5FXrv(;|3O@{Fg=LM8FbcYBrs0P6|p52 z%9s9Ni2o27Z9|3&w9DzjR!bkfvOde(J&s&4B;9U_vwLC)+l`gtj7>i};T=OqEO)alwSPW|7(# z0en+g0J$@>+|UYWX*A%L84DT}%^*RuB!sV-L5ik7+YH%W(1QO<_Se?8ibW@n79k{_ zQOuBWl`evUStB>RPpckvcK=bXu!y&*5fNROa*=HYqqm0Un-1*7zSnzr)pXVe%Ld88 zZ8DwtLZi%Vi$JqYla9{igY%EAcr31g;y1JGv8_pI9?BJxG% zv=aYu5=$V#+RgR@8)(U#4+0Vhw|L57z9eLI!Y%j@f&@fqlerV6(V;q-Jey0|(#BO5 z6Gn@GkE_G#(zLV7XJ}dYXJl~@60YhGrvJl zZ3qaxwlcS;D--TZ$_&ohS|&`*OoI*P0-{b&95gj%(8$kpTzDeE|LAKNSu@xLCX?9c zWX!Tie{=||BZ@u=b!^b^FpKXE@gGD20bPXdVyESL$I-8<2@Eu=s?uFt=ymoCv~mcv zq*ySIrNG@~gT$T7O2r)gX0Ek}GS|5ZP{Q|S{%1774CHB#EkdQrX!bM>Z)Yv(e9xXE z0Zrf*hwm-ozZj^sLueK-Fxg%V$2d*P!t-U%14;F4Or{NB*x`b$9q))m zw;6}{%Q!-O6F3rZzfKT5lA0O+M@gq!a1|Vil!skg_dg5Qn(sj~!^K<=N*K42P0iy! zCQ}lZlQ3CBF2-5I3SG69VzDr6mG3c5pF5C$Q@HSj0oZJEa_Q&EnJz-hgVvkb;EdJ5 z%_XPFJ;Ub&|3@N|S7Wo7z+{VLp%HA$21!TF5;9JM7v@gNzO(y>`8=VJ55gDq2e?FQ zyJN07r}#|=#SNfYsfM{cg;di@P;LGouXzF_8|3Njnhn~EA`m?KyKU|QIp_Q%`*R*m z+P%}V=aWk}Qba>Ow=sRE20RI9g8ws&(I(@KePL^-i;gs{dPC!vF6_kS${APn>JT6r z7R)`_lSIZf3b8}8ckuKncYd8j^K%2YjQ>DO>GaTDM~zNsG>~g#97wBKOh6mW4;Uvv z<{82Mu2p23T_bU}aNBO4^)iil8cENZu~j}P_LwQ)(W}CW%+=0x22qn!4*=}8VEEgX zGE2*xHfIFHthopX^T6@dxzq#YjErl4Cyzc!RZAKbOjYUhwV;I>sCiOCOH);Tg2Ak8 zbb8Dq@fEpd|r#Aw@Z97IxP{vuk8CX;7# zdG2eASQlTs%X3a6w{Nx`(u8gwB&yO2Bn4CCgGH*e`Km44suof?qh)anH~5Lti2F$l zfR-p2XWie?q`bJ8)msH!kfbXHn&<#NxgDglLoEg4%ntHWc3RMx->UsU0O6L^v7uR4 zC_jGx{7;Dts{*Uiu>Nv+n*Vg~l0E5cN=!Db8 z0rp89T{Z)>H&tr%G68j|*a6?Vt`gMf2ICRdXyh+i#O0(7T4e&IpR`|hYt=5Y|O2whS_i{n&Dxr&5)KItJ20eg%F@oN}H{*s;iV#lxe(2^E2W|?Tl6J zx*8aQ9E852DOxkrRqEGz3%vL-v5)2@-C#@SpBhZYnf}r$;JQk6O`pfbJ1#SyR0P*7 z><@|=XRMC40F{#HOA$8w^Tp4TlDHo?%ktco>!op2{Tgu`tx(LjQ1&GYy zX8a$;gn^18^_}g}B62Mmh%4SZ>TNO5Qnf%Vm67a4>)q5WYVCuDWHRAFx0U!A8T&;Mw&?*EkGmI< z-b&QMPd1vC0s*errMWcISE+R;a6M00iEO743bII_#8gNkYQcwFgu*i!i$yVgV;x}8 zjuF2VwDenxI{-t~x+K4iWba>~7539sG-Eh^h=6H*kjd`Rd0}PCFGj&8WCj5?|2{7eB+ceOl zVF>KG(|&UL%{)Y)3Sb&RaZ3Y4!ZQH1sWt`Ft-42F`T3n^p1F1JwR^6)_TAT9e92Z+moR1P@yGA_$=zH34-UG;NdN!< diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index 4d969fc3677cbf4d23e7444a7fa16e56fbeb9127..14a0b5035d4d62365886e5c3b2fedaca2fbc1929 100644 GIT binary patch delta 29144 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 Ef5_M0v;Y7A delta 29114 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 diff --git a/ReadMe.md b/ReadMe.md index 965a73cf..da3b2fcc 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ **RomWBW ReadMe** \ Version 3.3 \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -16 Apr 2023 +02 May 2023 # Overview diff --git a/ReadMe.txt b/ReadMe.txt index 9a70f421..bf49e224 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -16 Apr 2023 +02 May 2023 diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index 9088eac6..294c7cf4 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -3923,5 +3923,6 @@ may be discovered by RomWBW in your system. | USB-FIFO | Char | FT232H-based ECB USB FIFO | | VDU | Video | MC6845 Family Video Display Controller | | VGA | Video | HD6445CP4-based Video Display Controller | +| VRC | Video | VGARC Video Display Controller s | | YM | Audio | YM2612 Programmable Sound Generator | | Z2U | Char | Zilog Z280 CPU Built-in Serial Ports | diff --git a/Source/HBIOS/Config/RCZ180_ext.asm b/Source/HBIOS/Config/RCZ180_ext.asm index b888160c..b6b178c6 100644 --- a/Source/HBIOS/Config/RCZ180_ext.asm +++ b/Source/HBIOS/Config/RCZ180_ext.asm @@ -30,6 +30,7 @@ CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] ; @@ -48,6 +49,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; ; diff --git a/Source/HBIOS/Config/RCZ180_nat.asm b/Source/HBIOS/Config/RCZ180_nat.asm index 3cead301..41282a9b 100644 --- a/Source/HBIOS/Config/RCZ180_nat.asm +++ b/Source/HBIOS/Config/RCZ180_nat.asm @@ -30,6 +30,7 @@ CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] ; @@ -48,9 +49,9 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; -; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ280_ext.asm b/Source/HBIOS/Config/RCZ280_ext.asm index e994df2e..6947aec8 100644 --- a/Source/HBIOS/Config/RCZ280_ext.asm +++ b/Source/HBIOS/Config/RCZ280_ext.asm @@ -31,6 +31,7 @@ INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] ; @@ -47,6 +48,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ280_nat.asm b/Source/HBIOS/Config/RCZ280_nat.asm index a22f9793..cb5bf87a 100644 --- a/Source/HBIOS/Config/RCZ280_nat.asm +++ b/Source/HBIOS/Config/RCZ280_nat.asm @@ -31,6 +31,7 @@ INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] ; @@ -47,6 +48,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ280_zz80mb.asm b/Source/HBIOS/Config/RCZ280_zz80mb.asm index 0cc3f3c8..f5d2edc2 100644 --- a/Source/HBIOS/Config/RCZ280_zz80mb.asm +++ b/Source/HBIOS/Config/RCZ280_zz80mb.asm @@ -33,6 +33,7 @@ INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] ; @@ -53,6 +54,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ280_zzrc.asm b/Source/HBIOS/Config/RCZ280_zzrc.asm index 492af9a3..f64ba6a3 100644 --- a/Source/HBIOS/Config/RCZ280_zzrc.asm +++ b/Source/HBIOS/Config/RCZ280_zzrc.asm @@ -33,6 +33,7 @@ INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] ; @@ -61,6 +62,7 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_easy.asm b/Source/HBIOS/Config/RCZ80_easy.asm index b2361a17..1c558c15 100644 --- a/Source/HBIOS/Config/RCZ80_easy.asm +++ b/Source/HBIOS/Config/RCZ80_easy.asm @@ -34,6 +34,7 @@ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] WDOGIO .SET $6F ; WATCHDOG REGISTER ADR @@ -62,6 +63,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_kio.asm b/Source/HBIOS/Config/RCZ80_kio.asm index 8194f00d..2d24669a 100644 --- a/Source/HBIOS/Config/RCZ80_kio.asm +++ b/Source/HBIOS/Config/RCZ80_kio.asm @@ -31,6 +31,7 @@ INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) @@ -57,6 +58,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_skz.asm b/Source/HBIOS/Config/RCZ80_skz.asm index e3fad45e..e4a0a4d7 100644 --- a/Source/HBIOS/Config/RCZ80_skz.asm +++ b/Source/HBIOS/Config/RCZ80_skz.asm @@ -35,6 +35,7 @@ SKZENABLE .SET TRUE ; ENABLE SERGEY'S Z80-512K FEATURES SKZDIV .SET DIV_12 ; UART CLK (CLK2) DIVIDER FOR Z80-512K WDOGMODE .SET WDOG_SKZ ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) LEDPORT .SET $6E ; STATUS LED PORT ADDRESS ; @@ -52,6 +53,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_std.asm b/Source/HBIOS/Config/RCZ80_std.asm index 3d759f28..d4abee6d 100644 --- a/Source/HBIOS/Config/RCZ80_std.asm +++ b/Source/HBIOS/Config/RCZ80_std.asm @@ -30,6 +30,7 @@ CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) @@ -43,6 +44,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_tiny.asm b/Source/HBIOS/Config/RCZ80_tiny.asm index 81189cb1..fee4b13b 100644 --- a/Source/HBIOS/Config/RCZ80_tiny.asm +++ b/Source/HBIOS/Config/RCZ80_tiny.asm @@ -34,6 +34,7 @@ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; EIPCENABLE .SET TRUE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] @@ -67,6 +68,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_zrc.asm b/Source/HBIOS/Config/RCZ80_zrc.asm index 00020ada..bd186695 100644 --- a/Source/HBIOS/Config/RCZ80_zrc.asm +++ b/Source/HBIOS/Config/RCZ80_zrc.asm @@ -31,6 +31,7 @@ CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; RAMSIZE .SET 1536 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] @@ -44,6 +45,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/RCZ80_zrc_ram.asm b/Source/HBIOS/Config/RCZ80_zrc_ram.asm index efbc7746..0c2d14b4 100644 --- a/Source/HBIOS/Config/RCZ80_zrc_ram.asm +++ b/Source/HBIOS/Config/RCZ80_zrc_ram.asm @@ -32,6 +32,7 @@ CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; RAMSIZE .SET 2048 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) @@ -48,6 +49,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/SCZ180_sc126.asm b/Source/HBIOS/Config/SCZ180_sc126.asm index 5fa11435..acf443c7 100644 --- a/Source/HBIOS/Config/SCZ180_sc126.asm +++ b/Source/HBIOS/Config/SCZ180_sc126.asm @@ -51,6 +51,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/SCZ180_sc130.asm b/Source/HBIOS/Config/SCZ180_sc130.asm index 59203b42..9304ee8b 100644 --- a/Source/HBIOS/Config/SCZ180_sc130.asm +++ b/Source/HBIOS/Config/SCZ180_sc130.asm @@ -52,6 +52,7 @@ TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/ansi.asm b/Source/HBIOS/ansi.asm index a761542d..cc9c6a68 100644 --- a/Source/HBIOS/ansi.asm +++ b/Source/HBIOS/ansi.asm @@ -634,9 +634,10 @@ ANSI_BEL: ANSI_BS: LD A,(ANSI_COL) ; GET CURRENT COLUMN DEC A ; BACK IT UP BY ONE - RET C ; IF CARRY, MARGIN EXCEEDED, ABORT + ;RET C ; IF CARRY, MARGIN EXCEEDED, ABORT + RET M ; IF CARRY, MARGIN EXCEEDED, ABORT LD (ANSI_COL),A ; SAVE NEW COLUMN - JP ANSI_XY ; UDPATE CUSROR AND RETURN + JP ANSI_XY ; UDPATE CURSOR AND RETURN ; ANSI_CR: XOR A ; ZERO ACCUM diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index add2c405..11b4aec9 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -174,6 +174,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 88c1cb8c..70f67b1f 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -228,6 +228,7 @@ TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|M TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index f548495c..e9d445ed 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -156,6 +156,7 @@ TMSMODE .EQU TMSMODE_MBC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MS TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 5ebf710b..9d4a2647 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -167,6 +167,7 @@ TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MS TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 93cf1206..e866beff 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -169,6 +169,7 @@ TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSX TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 032bcd8a..f46c3b69 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -174,6 +174,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 1726fc6f..fba9880d 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -184,6 +184,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 2c937128..1f03d235 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -86,8 +86,8 @@ VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] ; @@ -178,6 +178,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index a6ddcc73..ecb505ad 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -158,6 +158,7 @@ TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSX TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 00c6dff2..b9b93475 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -156,6 +156,7 @@ TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MS TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index f534ccd4..172462b8 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -174,6 +174,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_z80retro.asm b/Source/HBIOS/cfg_z80retro.asm index 4a58c255..7bb3bdea 100644 --- a/Source/HBIOS/cfg_z80retro.asm +++ b/Source/HBIOS/cfg_z80retro.asm @@ -158,6 +158,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 66099dc4..8b6d9eaa 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -128,6 +128,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 90e104e1..4198abd1 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -139,6 +139,7 @@ TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) ; MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) MDROM .EQU TRUE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index b0dd0b7b..b5daa791 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -902,5 +902,6 @@ CVDU_INIT8563: ;================================================================================================== ; CVDU_IDAT: + .DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER .DB CVDU_KBDST .DB CVDU_KBDDATA diff --git a/Source/HBIOS/gdc.asm b/Source/HBIOS/gdc.asm index 8ddd7603..be5f3f2d 100644 --- a/Source/HBIOS/gdc.asm +++ b/Source/HBIOS/gdc.asm @@ -325,5 +325,6 @@ GDC_POS .DW 0 ; CURRENT DISPLAY POSITION ;================================================================================================== ; GDC_IDAT: + .DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER .DB GDC_KBDST .DB GDC_KBDDATA diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index f8cdf4f4..af182d1e 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -3232,6 +3232,9 @@ HB_INITTBL: #IF (TMSENABLE) .DW TMS_INIT #ENDIF +#IF (VRCENABLE) + .DW VRC_INIT +#ENDIF ;#IF (DSKYENABLE) ; .DW DSKY_INIT ;#ENDIF @@ -6181,6 +6184,15 @@ SIZ_GDC .EQU $ - ORG_GDC .ECHO " bytes.\n" #ENDIF ; +#IF (VRCENABLE) +ORG_VRC .EQU $ + #INCLUDE "vrc.asm" +SIZ_VRC .EQU $ - ORG_VRC + .ECHO "VRC occupies " + .ECHO SIZ_VRC + .ECHO " bytes.\n" +#ENDIF +; #IF (DMAENABLE) ORG_DMA .EQU $ #INCLUDE "dma.asm" @@ -6241,7 +6253,7 @@ SIZ_FONTS .EQU $ - ORG_FONTS .ECHO SIZ_FONTS .ECHO " bytes.\n" ; -#IF (CVDUENABLE | VGAENABLE) | GDCENABLE | (TMSENABLE & ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC))) +#IF (CVDUENABLE | VGAENABLE | GDCENABLE | VRCENABLE | (TMSENABLE & ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC)))) ORG_KBD .EQU $ #INCLUDE "kbd.asm" SIZ_KBD .EQU $ - ORG_KBD @@ -6438,7 +6450,7 @@ SIZ_YM2612 .EQU $ - ORG_YM2612 ; ; INCLUDE LZSA2 decompression engine if required. ; -#IF ((VGAENABLE | CVDUENABLE | TMSENABLE | GDCENABLE) & USELZSA2) +#IF ((VGAENABLE | CVDUENABLE | TMSENABLE | GDCENABLE | VRCENABLE) & USELZSA2) #INCLUDE "unlzsa2s.asm" #ENDIF ; @@ -7221,6 +7233,7 @@ PS_VDCVDU .TEXT "CVDU$" PS_VDGDC .TEXT "GDC$" PS_VDTMS .TEXT "TMS$" PS_VDVGA .TEXT "VGA$" +PS_VDVRC .TEXT "VRC$" ; ; VIDEO TYPE STRINGS ; diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index ba09f728..5ba100d3 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -338,7 +338,7 @@ VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563 VDADEV_GDC .EQU $20 ; GRAPHICS DISPLAY CTLR - UPD7220 VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918 VDADEV_VGA .EQU $40 ; ECB VGA3 - HITACHI HD6445 -;VDADEV_V9958 .EQU $50 ; V9958 VDU +VDADEV_VRC .EQU $50 ; VGARC ; ; SOUND DEVICE IDS ; diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index 4ae36c51..b6954c3f 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -14,9 +14,10 @@ ; ; DRIVER DATA OFFSETS (FROM IY) ; -KBD_ST .EQU 0 ; BYTE, STATUS PORT NUM (R) +KBD_MODE .EQU 0 ; BYTE, KEYBOARD MODE (STD OR VRC) +KBD_ST .EQU 1 ; BYTE, STATUS PORT NUM (R) KBD_CMD .EQU KBD_ST ; BYTE, CMD PORT NUM (W) -KBD_DAT .EQU 1 ; BYTE, DATA PORT NUM (R/W) +KBD_DAT .EQU 2 ; BYTE, DATA PORT NUM (R/W) ; ; TIMING CONSTANTS ; @@ -177,6 +178,9 @@ KBD_PUTCMD: ; PUT A CMD BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT ; LD E,A ; SAVE INCOMING VALUE IN E + LD A,(KBD_MODE) ; GET MODE BYTE + CP KBDMODE_VRC ; VGARC KEYBOARD? + JR Z,KBD_PUTCMD2 ; BAIL OUT LD B,KBD_WAITTO ; SETUP TO LOOP KBD_PUTCMD0: CALL KBD_OST ; GET OUTPUT REGISTER STATUS @@ -194,6 +198,7 @@ KBD_PUTCMD1: #ENDIF LD C,(IY+KBD_CMD) ; COMMAND PORT OUT (C),A ; WRITE IT +KBD_PUTCMD2: XOR A ; SIGNAL SUCCESS RET ; @@ -203,6 +208,9 @@ KBD_PUTDATA: ; PUT A DATA BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT ; LD E,A ; SAVE INCOMING VALUE IN E + LD A,(KBD_MODE) ; GET MODE BYTE + CP KBDMODE_VRC ; VGARC KEYBOARD? + JR Z,KBD_PUTDATA2 ; BAIL OUT LD B,KBD_WAITTO ; SETUP TO LOOP KBD_PUTDATA0: CALL KBD_OST ; GET OUTPUT REGISTER STATUS @@ -219,6 +227,7 @@ KBD_PUTDATA1: #ENDIF LD C,(IY+KBD_DAT) ; DATA PORT OUT (C),A ; WRITE IT +KBD_PUTDATA2: XOR A ; SIGNAL SUCCESS RET ; diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index aa97107a..29d985e4 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -257,6 +257,12 @@ DMAMODE_Z280 .EQU 3 ; Z280 INTEGRATED DMA DMAMODE_RC .EQU 4 ; RCBUS Z80 DMA DMAMODE_MBC .EQU 5 ; MBC ; +; KEYBOARD MODE SELECTIONS +; +KBDMODE_NONE .EQU 0 +KBDMODE_PS2 .EQU 1 ; PS/2 KEYBOARD CONTROLLER +KBDMODE_VRC .EQU 2 ; VGARC KEYBOARD CONTROLLER +; ; SERIAL DEVICE CONFIGURATION CONSTANTS ; SER_DATA5 .EQU 0 << 0 diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 2dcc6253..48205e5e 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -942,10 +942,10 @@ TMS_IDAT: .DB TMS_PPIX ; PPI CONTROL PORT #ENDIF #IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC)) + .DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER .DB TMS_KBDST ; 8242 CMD/STATUS PORT .DB TMS_KBDDATA ; 8242 DATA PORT .DB 0 ; FILLER - .DB 0 ; FILER #ENDIF ; .DB TMS_DATREG diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index d072711b..039a1445 100644 --- a/Source/HBIOS/vga.asm +++ b/Source/HBIOS/vga.asm @@ -1039,5 +1039,6 @@ REGS_VGA: ;================================================================================================== ; VGA_IDAT: + .DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER .DB VGA_KBDST .DB VGA_KBDDATA diff --git a/Source/HBIOS/vrc.asm b/Source/HBIOS/vrc.asm new file mode 100644 index 00000000..f9134547 --- /dev/null +++ b/Source/HBIOS/vrc.asm @@ -0,0 +1,643 @@ +;====================================================================== +; VIDEO DRIVER FOR VGARC +; https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:vgarc1:vgarc1home +; +; WRITTEN BY: WAYNE WARTHEN -- 5/1/2023 +;====================================================================== +; +; TODO: +; +;====================================================================== +; VGARC DRIVER - CONSTANTS +;====================================================================== +; +VRC_BASE .EQU $00 ; FIRST CHAR DATA PORT +VRC_FONTBASE .EQU VRC_BASE + $0C ; FIRST FONT PORT +VRC_SCROLLIO .EQU $F5 ; SCROLL REG PORT +; +VRC_KBDDATA .EQU $F4 +VRC_KBDST .EQU $F5 +; +VRC_ROWS .EQU 48 +VRC_COLS .EQU 64 +; +#DEFINE USEFONT8X8 +#DEFINE VRC_FONT FONT8X8 +; +TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER +; +;====================================================================== +; VRC DRIVER - INITIALIZATION +;====================================================================== +; +VRC_INIT: + LD IY,VRC_IDAT ; POINTER TO INSTANCE DATA +; + CALL NEWLINE ; FORMATTING + PRTS("VRC: IO=0x$") + LD A,VRC_BASE + CALL PRTHEXBYTE + CALL VRC_PROBE ; CHECK FOR HW PRESENCE + JR Z,VRC_INIT1 ; CONTINUE IF HW PRESENT +; + ; HARDWARE NOT PRESENT + PRTS(" NOT PRESENT$") + OR $FF ; SIGNAL FAILURE + RET +; +VRC_INIT1: + ; DISPLAY CONSOLE DIMENSIONS + LD A,VRC_COLS + CALL PC_SPACE + CALL PRTDECB + LD A,'X' + CALL COUT + LD A,VRC_ROWS + CALL PRTDECB + PRTS(" TEXT$") + + ; HARDWARE INITIALIZATION + CALL VRC_CRTINIT ; SETUP THE VGARC CHIP REGISTERS + CALL VRC_LOADFONT ; LOAD FONT DATA FROM ROM TO VGARC STORAGE + CALL VRC_VDARES ; RESET + ;CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER + + ; ADD OURSELVES TO VDA DISPATCH TABLE + LD BC,VRC_FNTBL ; BC := FUNCTION TABLE ADDRESS + LD DE,VRC_IDAT ; DE := VGARC INSTANCE DATA PTR + CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED + + ; INITIALIZE EMULATION + LD C,A ; C := ASSIGNED VIDEO DEVICE NUM + LD DE,VRC_FNTBL ; DE := FUNCTION TABLE ADDRESS + LD HL,VRC_IDAT ; HL := VGARC INSTANCE DATA PTR + CALL TERM_ATTACH ; DO IT + + XOR A ; SIGNAL SUCCESS + RET +; +;====================================================================== +; VGARC DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS +;====================================================================== +; +VRC_FNTBL: + .DW VRC_VDAINI + .DW VRC_VDAQRY + .DW VRC_VDARES + .DW VRC_VDADEV + .DW VRC_VDASCS + .DW VRC_VDASCP + .DW VRC_VDASAT + .DW VRC_VDASCO + .DW VRC_VDAWRC + .DW VRC_VDAFIL + .DW VRC_VDACPY + .DW VRC_VDASCR + .DW KBD_STAT + .DW KBD_FLUSH + .DW KBD_READ + .DW VRC_VDARDC +#IF (($ - VRC_FNTBL) != (VDA_FNCNT * 2)) + .ECHO "*** INVALID VRC FUNCTION TABLE ***\n" + !!!!! +#ENDIF + +VRC_VDAINI: + ; RESET VDA + ; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA + CALL VRC_VDARES ; RESET VDA + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDAQRY: + LD C,$00 ; MODE ZERO IS ALL WE KNOW + LD D,VRC_ROWS ; ROWS + LD E,VRC_COLS ; COLS + LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDARES: + XOR A ; CLEAR ATTRIBUTES (REV VIDEO OFF) + LD (VRC_ATTR),A ; SAVE IT + DEC A ; INIT CUR NESTING, INIT TO HIDDEN + LD (VRC_CURSOR),A ; SAVE IT + LD HL,0 ; ZERO THE SCROLL OFFSET + LD (VRC_OFF),HL ; SAVE VALUE + XOR A ; ZERO + LD (VRC_LOFF),A ; SCROLL OFFSET (LINES) + LD A,' ' ; BLANK THE SCREEN + LD DE,VRC_ROWS*VRC_COLS ; FILL ENTIRE BUFFER + CALL VRC_FILL ; DO IT + LD DE,0 ; ROW = 0, COL = 0 + CALL VRC_XY ; SEND CURSOR TO TOP LEFT + CALL VRC_SHOWCUR ; NOW SHOW THE CURSOR +; + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDADEV: + LD D,VDADEV_VRC ; D := DEVICE TYPE + LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,VRC_BASE ; L := BASE I/O ADDRESS + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDASCS: + SYSCHKERR(ERR_NOTIMPL) ; NOT IMPLEMENTED (YET) + RET + +VRC_VDASCP: + CALL VRC_XY ; SET CURSOR POSITION + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDASAT: + ; INCOMING IS: -----RUB (R=REVERSE, U=UNDERLINE, B=BLINK) + ; + ; ALL WE SUPPORT IS REVERSE. MOVE BIT TO BIT 7 OF ATTR BYTE + LD A,E ; GET ATTR VALUE + RRCA ; ROTATE TO BIT 7 + RRCA + RRCA + AND $80 ; ENSURE ONLY BIT 7 + LD (VRC_ATTR),A ; SAVE IT + XOR A ; SIGNAL SUCCESS + RET ; DONE + +VRC_VDASCO: + ; INCOMING IS: IBGRIBGR (I=INTENSITY, B=BLUE, G=GREEN, R=RED) + ; + ; NONE SUPPORTED, IGNORE + XOR A ; SIGNAL SUCCESS + RET ; DONE + +VRC_VDAWRC: + LD A,E ; CHARACTER TO WRITE GOES IN A + CALL VRC_PUTCHAR ; PUT IT ON THE SCREEN + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDAFIL: + LD A,E ; FILL CHARACTER GOES IN A + EX DE,HL ; FILL LENGTH GOES IN DE + CALL VRC_FILL ; DO THE FILL + XOR A ; SIGNAL SUCCESS + RET + +VRC_VDACPY: + ; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS VRC_POS + ; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT + PUSH HL ; SAVE LENGTH + CALL VRC_XY2IDX ; ROW/COL IN DE -> SOURCE ADR IN HL + POP BC ; RECOVER LENGTH IN BC + LD DE,(VRC_POS) ; PUT DEST IN DE + JP VRC_BLKCPY ; DO A BLOCK COPY + +VRC_VDASCR: + LD A,E ; LOAD E INTO A + OR A ; SET FLAGS + RET Z ; IF ZERO, WE ARE DONE + PUSH DE ; SAVE E + JP M,VRC_VDASCR1 ; E IS NEGATIVE, REVERSE SCROLL + CALL VRC_SCROLL ; SCROLL FORWARD ONE LINE + POP DE ; RECOVER E + DEC E ; DECREMENT IT + JR VRC_VDASCR ; LOOP +VRC_VDASCR1: + CALL VRC_RSCROLL ; SCROLL REVERSE ONE LINE + POP DE ; RECOVER E + INC E ; INCREMENT IT + JR VRC_VDASCR ; LOOP + +;---------------------------------------------------------------------- +; READ VALUE AT CURRENT VDU BUFFER POSITION +; RETURN E = CHARACTER, B = COLOUR, C = ATTRIBUTES +;---------------------------------------------------------------------- + +VRC_VDARDC: + OR $FF ; UNSUPPORTED FUNCTION + RET +; +;====================================================================== +; VGARC DRIVER - PRIVATE DRIVER FUNCTIONS +;====================================================================== +; +; +;---------------------------------------------------------------------- +; PROBE FOR VGARC HARDWARE +;---------------------------------------------------------------------- +; +; ON RETURN, ZF SET INDICATES HARDWARE FOUND +; +VRC_PROBE: + LD C,VRC_BASE + LD B,0 + LD A,$AA + OUT (C),A + INC B + LD A,$55 + OUT (C),A + DEC B + IN A,(C) + CP $AA + RET NZ + INC B + IN A,(C) + CP $55 + RET +; +;---------------------------------------------------------------------- +; CRTC DISPLAY CONTROLLER CHIP INITIALIZATION +;---------------------------------------------------------------------- +; +VRC_CRTINIT: + XOR A ; ZERO ACCUM + LD A,$80 ; ACTIVATE AND ZERO HW SCROLL + OUT (VRC_SCROLLIO),A ; RESET HW SCROLL + RET ; DONE +; +;---------------------------------------------------------------------- +; LOAD FONT DATA +;---------------------------------------------------------------------- +; +VRC_LOADFONT: +; +#IF USELZSA2 + LD (VRC_STACK),SP ; SAVE STACK + LD HL,(VRC_STACK) ; AND SHIFT IT + LD DE,$2000 ; DOWN 4KB TO + OR A ; CREATE A + SBC HL,DE ; DECOMPRESSION BUFFER + LD SP,HL ; HL POINTS TO BUFFER + EX DE,HL ; START OF STACK BUFFER + PUSH DE ; SAVE IT + LD HL,VRC_FONT ; START OF FONT DATA + CALL DLZSA2 ; DECOMPRESS TO DE + POP HL ; RECALL STACK BUFFER POSITION +#ELSE + LD HL,VRC_FONT ; START OF FONT DATA +#ENDIF +; + LD DE,0+(128*8)-1 ; LENGTH OF FONT DATA - 1 + ADD HL,DE ; ADD TO HL +; LD HL,ENDFONT-1 + LD BC,VRC_FONTBASE+3 ; WORK BACKWARDS + OTDR ; DO 4 PAGES + DEC C + OTDR + DEC C + OTDR + DEC C + OTDR + DEC C +; +#IF USELZSA2 + LD HL,(VRC_STACK) ; ERASE DECOMPRESS BUFFER + LD SP,HL ; BY RESTORING THE STACK + RET ; DONE +VRC_STACK .DW 0 +#ELSE + RET +#ENDIF +; +;---------------------------------------------------------------------- +; SET CURSOR POSITION TO ROW IN D AND COLUMN IN E +;---------------------------------------------------------------------- +; +VRC_XY: + PUSH DE ; SAVE NEW POSITION FOR NOW + CALL VRC_HIDECUR ; HIDE THE CURSOR + POP DE ; RECOVER INCOMING ROW/COL + CALL VRC_XY2IDX ; CONVERT ROW/COL TO BUF IDX + LD (VRC_POS),HL ; SAVE THE RESULT (DISPLAY POSITION) + JP VRC_SHOWCUR ; SHOW THE CURSOR AND EXIT +; +;---------------------------------------------------------------------- +; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL +; D=ROW, E=COL +;---------------------------------------------------------------------- +; +VRC_XY2IDX: + LD A,E ; SAVE COLUMN NUMBER IN A + LD H,D ; SET H TO ROW NUMBER + LD E,VRC_COLS ; SET E TO ROW LENGTH + CALL MULT8 ; MULTIPLY TO GET ROW OFFSET, H * E = HL, E=0, B=0 + LD E,A ; GET COLUMN BACK + ADD HL,DE ; ADD IT IN + + LD DE,(VRC_OFF) ; SCREEN OFFSET + ADD HL,DE ; ADJUST +; + PUSH HL ; SAVE IT + LD DE,VRC_ROWS * VRC_COLS ; DE := BUF SIZE + OR A ; CLEAR CARRY + SBC HL,DE ; SUBTRACT FROM HL + JR C,VRC_XY2IDX1 ; BYPASS IF NO WRAP + POP DE ; THROW AWAY TOS + RET ; DONE +VRC_XY2IDX1: + POP HL ; NO WRAP, RESTORE + RET ; RETURN +; +;---------------------------------------------------------------------- +; SHOW OR HIDE CURSOR +;---------------------------------------------------------------------- +; +; VGARC USES HIGH BIT OF CHAR VALUE FOR INVERSE VIDEO. WE HAVE NO +; HARDWARE CURSOR, SO WE LEVERAGE THE INVERSE VIDEO TO SHOW A CURSOR. +; SINCE ANY OPERATION THAT POTENTIALLY OVERWERITES THE CURSOR POSITION +; COULD DESTROY THE CURSOR, WE HAVE A COUPLE FUNCTIONS TO SHOW AND +; HIDE THE CURSOR. A VARIABLE IS USED TO TRACK THE SHOW/HIDE +; OPERATIONS BECAUSE WE MAY HAVE NESTED CALLS. ZERO MEANS SHOW +; REAL CURSOR. ANY VALUE LESS THAN ZERO MEANS HIDDEN. +; +VRC_SHOWCUR: + LD A,(VRC_CURSOR) ; GET CURRENT NESTING VALUE + INC A ; INCREMENT TO SHOW + LD (VRC_CURSOR),A ; SAVE IT + RET NZ ; ALREADY SHOWN, NOTHING TO DO +; + ; WE TRANSITIONED FROM NON-ZERO TO ZERO. NEED TO ACTUALLY + ; SHOW THE CURSOR NOW. +; + JR VRC_FLIPCUR +; +VRC_HIDECUR: + LD A,(VRC_CURSOR) ; GET CURRENT NESTING VALUE + DEC A ; DECREMENT TO HIDE + LD (VRC_CURSOR),A ; SAVE IT + INC A ; BACK TO ORIGINAL VALUE + RET NZ ; ALREADY HIDDEN, NOTHING TO DO +; + ; WE TRANSITIONED FROM ZERO TO NEGATIVE. NEED TO ACTUALLY + ; HIDE THE CURSOR NOW. SINCE SHOWING AND HIDING ARE THE + ; SAME OPERATION (FLIP REV VID BIT), WE REUSE CODE ABOVE. +; + JR VRC_FLIPCUR +; +VRC_FLIPCUR: + ; SHOWING OR HIDING THE CURSOR IS THE SAME OPERATION. + ; SO WE USE COMMON CODE TO FLIP THE REV VID BIT. + LD HL,(VRC_POS) ; CURSOR POSITION + LD B,L ; INVERT FOR I/O + LD C,H + IN A,(C) ; GET VALUE + XOR $80 ; FLIP REV VID BIT + OUT (C),A ; WRITE NEW VALUE + RET +; +;---------------------------------------------------------------------- +; WRITE VALUE IN A TO CURRENT VDU BUFFER POSITION, ADVANCE CURSOR +;---------------------------------------------------------------------- +; +VRC_PUTCHAR: + ; WRITE CHAR AT CURRENT CURSOR POSITION. SINCE THE CURSOR + ; IS JUST THE HIGH BIT (REV VIDEO), WE FIRST TURN OFF THE + ; CURSOR, WRITE THE CHAR, UPDATE THE CURSOR POSITION, AND + ; FINALLY TURN THE CURSOR BACK ON AT THE NEW POSITION. +; + PUSH AF ; SAVE INCOMING CHAR + CALL VRC_HIDECUR ; HIDE CURSOR + POP AF + LD HL,(VRC_POS) ; GET CUR BUF POSITION + LD B,L ; INVERT FOR I/O + LD C,H + AND $7F ; SUPPRESS ATTRIBUTE (HI BIT) + LD L,A ; PUT VALUE IN L + LD A,(VRC_ATTR) ; GET CURRENT ATTRIBUTE + OR L ; COMBINE WITH CHAR VALUE + OUT (C),A ; WRITE VALUE TO BUFFER +; + ; SET CURSOR AT NEW POSITION + LD HL,(VRC_POS) ; GET CURRENT BUF OFFSET + INC HL ; INCREMENT + PUSH HL ; SAVE IT + LD DE,VRC_ROWS * VRC_COLS ; DE := BUF SIZE + OR A ; CLEAR CARRY + SBC HL,DE ; SUBTRACT FROM HL + JR C,VRC_PUTCHAR1 ; BYPASS IF NO WRAP + POP DE ; THROW AWAY TOS + LD HL,0 ; BACK TO START + JR VRC_PUTCHAR2 ; CONTINUE +VRC_PUTCHAR1: + POP HL ; NO WRAP, RESTORE +VRC_PUTCHAR2: + LD (VRC_POS),HL ; SAVE NEW POSITION + JP VRC_SHOWCUR ; SHOW IT AND RETURN +; +;---------------------------------------------------------------------- +; FILL AREA IN BUFFER WITH SPECIFIED CHARACTER AND CURRENT COLOR/ATTRIBUTE +; STARTING AT THE CURRENT FRAME BUFFER POSITION +; A: FILL CHARACTER +; DE: NUMBER OF CHARACTERS TO FILL +;---------------------------------------------------------------------- +; +VRC_FILL: + LD (VRC_FILL1+1),A ; SAVE FILL CHAR + PUSH DE ; SAVE INCOMING DE + CALL VRC_HIDECUR ; HIDE CURSOR + POP DE ; RESTORE INCOMING DE + LD HL,(VRC_POS) ; STARTING POSITION +; +VRC_FILL1: + LD A,$FF ; FILL CHAR + LD B,L ; INVERT FOR I/O + LD C,H + OUT (C),A ; PUT CHAR TO BUF +; + DEC DE ; DECREMENT COUNT + LD A,D ; TEST FOR ZERO + OR E + JP Z,VRC_SHOWCUR ; EXIT VIA SHOW CURSOR IF DONE +; + INC HL ; INCREMENT + PUSH HL ; SAVE IT + LD BC,VRC_ROWS * VRC_COLS ; BC := BUF SIZE + OR A ; CLEAR CARRY + SBC HL,BC ; SUBTRACT FROM HL + JR C,VRC_FILL2 ; BYPASS IF NO WRAP + POP BC ; THROW AWAY TOS + LD HL,0 ; BACK TO START + JR VRC_FILL3 ; CONTINUE +VRC_FILL2: + POP HL ; NO WRAP, RESTORE +VRC_FILL3: + LD (VRC_POS),HL ; SAVE NEW POSITION + JR VRC_FILL1 ; LOOP TILL DONE +; +;---------------------------------------------------------------------- +; SCROLL ENTIRE SCREEN FORWARD BY ONE LINE (CURSOR POSITION UNCHANGED) +;---------------------------------------------------------------------- +; +VRC_SCROLL: + ; SCROLL DOWN 1 LINE VIA HARDWARE + CALL VRC_HIDECUR ; SUPPRESS CURSOR + LD A,(VRC_LOFF) ; GET LINE OFFSET + INC A ; BUMP + CP VRC_ROWS ; OVERFLOW? + JR C,VRC_SCROLL1 ; IF NOT, SKIP + XOR A ; ELSE, BACK TO ZERO +VRC_SCROLL1: + LD (VRC_LOFF),A ; SAVE NEW VALUE + OR $80 ; SET HW SCROLL ENABLE BIT + OUT (VRC_SCROLLIO),A ; DO IT +; + ; ADJUST BUFFER OFFSET + LD HL,(VRC_OFF) ; BUFFER OFFSET + LD DE,VRC_COLS ; COLUMNS + ADD HL,DE ; ADD TO GET NEW OFFSET + PUSH HL ; SAVE IT + LD DE,VRC_ROWS * VRC_COLS ; DE := BUF SIZE + OR A ; CLEAR CARRY + SBC HL,DE ; SUBTRACT FROM HL + JR C,VRC_SCROLL2 ; BYPASS IF NO WRAP + POP DE ; BURN TOS + JR VRC_SCROLL3 ; CONTINUE +VRC_SCROLL2: + POP HL ; NO WRAP, RESTORE HL +VRC_SCROLL3: + LD (VRC_OFF),HL ; SAVE NEW OFFSET +; + ; FILL EXPOSED LINE + LD HL,(VRC_POS) ; GET CURSOR POS + PUSH HL ; SAVE IT + LD D,VRC_ROWS - 1 ; LAST ROW + LD E,0 ; FIRST COLUMN + CALL VRC_XY2IDX ; HL = START OF LAST LINE + LD (VRC_POS),HL ; SET FILL POSITION + LD A,' ' ; FILL WITH BLANKS + LD DE,VRC_COLS ; FILL ONE LINE + CALL VRC_FILL ; FILL LAST LINE + POP HL ; RECOVER CURSOR POS + LD (VRC_POS),HL ; PUT VALUE BACK +; + ; ADJUST CURSOR POSITION + LD HL,(VRC_POS) ; CURSOR POSITION + LD DE,VRC_COLS ; COLUMNS + ADD HL,DE ; NEW CURSOR POS + PUSH HL ; SAVE IT + LD DE,VRC_ROWS * VRC_COLS ; DE := DISPLAY SIZE + OR A ; CLEAR CARRY + SBC HL,DE ; SUBTRACT FROM HL + JR C,VRC_SCROLL4 ; BYPASS IF NO WRAP + POP DE ; BURN TOS + JR VRC_SCROLL5 ; CONTINUE +VRC_SCROLL4: + POP HL ; NO WRAP, RESTORE HL +VRC_SCROLL5: + LD (VRC_POS),HL ; SAVE NEW CURSOR POS + JP VRC_SHOWCUR ; EXIT VIA SHOW CURSOR +; +;---------------------------------------------------------------------- +; REVERSE SCROLL ENTIRE SCREEN BY ONE LINE (CURSOR POSITION UNCHANGED) +;---------------------------------------------------------------------- +; +VRC_RSCROLL: + ; SCROLL UP 1 LINE VIA HARDWARE + CALL VRC_HIDECUR ; SUPPRESS CURSOR + LD A,(VRC_LOFF) ; GET LINE OFFSET + DEC A ; BUMP + CP $FF ; OVERFLOW? + JR NZ,VRC_RSCROLL1 ; IF NOT, SKIP + LD A,VRC_ROWS - 1 ; ELSE, BACK TO LAST ROW +VRC_RSCROLL1: + LD (VRC_LOFF),A ; SAVE NEW VALUE + OR $80 ; SET HW SCROLL ENABLE BIT + OUT (VRC_SCROLLIO),A ; DO IT +; + ; ADJUST BUFFER OFFSET + LD HL,(VRC_OFF) ; BUFFER OFFSET + LD DE,VRC_COLS ; COLUMNS + OR A ; CLEAR CARRY + SBC HL,DE ; SUBTRACT TO GET NEW OFFSET + PUSH HL ; SAVE IT + JR NC,VRC_RSCROLL2 ; BYPASS IF NO WRAP + LD DE,VRC_ROWS * VRC_COLS ; DISPLAY SIZE + ADD HL,DE ; HANDLE WRAP + POP DE ; BURN TOS + JR VRC_RSCROLL3 ; CONTINUE +VRC_RSCROLL2: + POP HL ; NO WRAP, RESTORE HL +VRC_RSCROLL3: + LD (VRC_OFF),HL ; SAVE NEW OFFSET +; + ; FILL EXPOSED LINE + LD HL,(VRC_POS) ; GET CURSOR POS + PUSH HL ; SAVE IT + LD D,0 ; FIRST ROW + LD E,0 ; FIRST COLUMN + CALL VRC_XY2IDX ; HL = START OF FIRST LINE + LD (VRC_POS),HL ; SET FILL POSITION + LD A,' ' ; FILL WITH BLANKS + LD DE,VRC_COLS ; FILL ONE LINE + CALL VRC_FILL ; FILL FIRST LINE + POP HL ; RECOVER CURSOR POS + LD (VRC_POS),HL ; PUT VALUE BACK +; + ; ADJUST CURSOR POSITION + LD HL,(VRC_POS) ; CURSOR POSITION + LD DE,VRC_COLS ; COLUMNS + OR A ; CLEAR CARRY + SBC HL,DE ; NEW CURSOR POS + PUSH HL ; SAVE IT + JR NC,VRC_RSCROLL4 ; BYPASS IF NO WRAP + LD DE,VRC_ROWS * VRC_COLS ; DISPLAY SIZE + ADD HL,DE ; HANDLE WRAP + POP DE ; BURN TOS + JR VRC_RSCROLL5 ; CONTINUE +VRC_RSCROLL4: + POP HL ; NO WRAP, RESTORE HL +VRC_RSCROLL5: + LD (VRC_POS),HL ; SAVE NEW CURSOR POS + JP VRC_SHOWCUR ; EXIT VIA SHOW CURSOR +; +;---------------------------------------------------------------------- +; BLOCK COPY BC BYTES FROM HL TO DE +;---------------------------------------------------------------------- +; +VRC_BLKCPY: + PUSH BC + PUSH HL + CALL VRC_HIDECUR + POP HL + POP BC +; +VRC_BLKCPY1: + LD A,B + OR C + JP Z,VRC_SHOWCUR ; EXIT VIA SHOW CURSOR +; + PUSH BC ; SAVE LOOP CTL + LD B,L ; INVERT FOR I/O + LD C,H + IN A,(C) ; GET SOURCE CHAR + LD B,E ; INVERT FOR I/O + LD C,D + OUT (C),A ; WRITE DEST CHAR + POP BC ; RESTORE LOOP CTL +; + INC HL ; NEXT SRC CHAR + INC DE ; NEXT DEST CHAR + DEC BC ; DEC COUNT + JR VRC_BLKCPY1 ; LOOP TILL DONE +; +;================================================================================================== +; VGARC DRIVER - DATA +;================================================================================================== +; +VRC_ATTR .DB 0 ; CURRENT COLOR +VRC_POS .DW 0 ; CURRENT DISPLAY POSITION +VRC_OFF .DW 0 ; SCREEN START OFFSET INTO DISP BUF +VRC_LOFF .DB 0 ; LINE OFFSET INTO DISP BUF +VRC_CURSOR .DB 0 ; CURSOR NESTING LEVEL +; +;================================================================================================== +; VGA DRIVER - INSTANCE DATA +;================================================================================================== +; +VRC_IDAT: + .DB KBDMODE_VRC ; VGARC KEYBOARD CONTROLLER + .DB VRC_KBDST + .DB VRC_KBDDATA diff --git a/Source/ver.inc b/Source/ver.inc index e90eda31..a8d14463 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 3 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.3.0-dev.7" +#DEFINE BIOSVER "3.3.0-dev.8" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 96dcd00e..e3963be0 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 3 rup equ 0 rtp equ 0 biosver macro - db "3.3.0-dev.7" + db "3.3.0-dev.8" endm