From cfc76d0659de990b0f3b06dec46620ccdb82f94f Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Thu, 14 Sep 2023 19:38:17 -0700 Subject: [PATCH] Add Heath H8 Framework --- Doc/ChangeLog.txt | 1 + Doc/RomWBW Applications.pdf | Bin 233776 -> 233776 bytes Doc/RomWBW Disk Catalog.pdf | Bin 123523 -> 123523 bytes Doc/RomWBW Errata.pdf | Bin 28414 -> 28466 bytes Doc/RomWBW ROM Applications.pdf | Bin 155009 -> 155010 bytes Doc/RomWBW System Guide.pdf | Bin 542057 -> 542060 bytes Doc/RomWBW User Guide.pdf | Bin 616017 -> 619776 bytes ReadMe.md | 2 +- ReadMe.txt | 2 +- Source/Doc/UserGuide.md | 24 +++ Source/HBIOS/Build.cmd | 1 + Source/HBIOS/Build.ps1 | 2 +- Source/HBIOS/Build.sh | 1 + Source/HBIOS/Config/HEATH_std.asm | 69 +++++++ Source/HBIOS/cfg_duo.asm | 3 +- Source/HBIOS/cfg_dyno.asm | 11 +- Source/HBIOS/cfg_heath.asm | 320 ++++++++++++++++++++++++++++++ Source/HBIOS/cfg_master.asm | 3 +- Source/HBIOS/cfg_mbc.asm | 3 +- Source/HBIOS/cfg_mk4.asm | 3 +- Source/HBIOS/cfg_n8.asm | 3 +- Source/HBIOS/cfg_rcz180.asm | 11 +- Source/HBIOS/cfg_rcz280.asm | 11 +- Source/HBIOS/cfg_rcz80.asm | 11 +- Source/HBIOS/cfg_rph.asm | 3 +- Source/HBIOS/cfg_s100.asm | 11 +- Source/HBIOS/cfg_sbc.asm | 3 +- Source/HBIOS/cfg_scz180.asm | 11 +- Source/HBIOS/cfg_una.asm | 2 +- Source/HBIOS/cfg_z80retro.asm | 3 +- Source/HBIOS/cfg_zeta.asm | 3 +- Source/HBIOS/cfg_zeta2.asm | 3 +- Source/HBIOS/h8p.asm | 162 +++++++++++++++ Source/HBIOS/hbios.asm | 22 +- Source/HBIOS/hbios.inc | 2 + Source/ver.inc | 2 +- Source/ver.lib | 2 +- 37 files changed, 676 insertions(+), 34 deletions(-) create mode 100644 Source/HBIOS/Config/HEATH_std.asm create mode 100644 Source/HBIOS/cfg_heath.asm create mode 100644 Source/HBIOS/h8p.asm diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 215e2e49..4a2176f7 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -20,6 +20,7 @@ Version 3.3 - M?C: Fixed XM to allow specifying HBIOS port for send operations - WBW: Fix S100 Z180 LED operation (credit to Jay Cotton for finding this issue) - WBW: QPM system image is now combined with current CBIOS during build +- WBW: Added framework for Heath platform Version 3.2.1 ------------- diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 350da2265c4beab7579adfaed139aa1216e419bb..6b696e169890fa1ea53e824e08e62bbea627b0b9 100644 GIT binary patch delta 577 zcmdn6h;PFpz6l-mw;g!)zSjQ1Jg;Cbs{u<$q12Y`V!K3bSv~yRF8ukgD04nzBi~Av zS+iRE`}<7}Nh{d!SA2M~pMxbuMk&?cV#CY_Pp$q)Yb>z8w(iZo+ll>er1|aFu}uH| zaQgn!7c(7g-zF@ttoSjH%Y#$nnBcSPrVcJmK`fo~&T%}`{$r`^dW{_re#)e%wCsB(B@}2-oIzS^qUB{ZE#6uHLU2xl)`fQrJK}+)>=8sA|ge z2v6DAaFg@SxBhxXH)^O9vALJlvv3C#l@{IOyz5ZB)K+Mo^i!=J>rV$=3@MJ9YW#K9 ziqkinx9_?>`?Bp4(|1!-7k~M9ZRg**dl#Q9m~p_nNHu3+=H;a1HCo}k-@ov^`FdjC z*5BFpWJ9-ISUGv`|Hm4u``0jTBjDbTNi}Y@2!~an`4@P>yBv67yr*6I6ax~mpAJ(wd*r6 z0x{EeeJ18t5$q<0mc~X#X44g-nPp&{?atB6J*J5UPNwD-hDOGw&gK@zu8x)_PL`JD x#^#RZMg}HMu7*x_3O0n5#46a?aTS*&7L`;KrKWKi85tOu8*!h6A#aonI;+ex;5HWTodN7Iez}%9-v$)DIX*) z6D9QX$Bz|`70fNq8Tse^5pQhhabCisCS@SJC#Jognf1%@s1xsY%YHkv@8gHZUImr% zbw78@%oV$GnXhbCd;9y94O1GDWD@IQg~$6lth3Mf13tAG`0S_B~2QDQt%An~EggIsC}3g!x^1%Ys(FZ)u%!a+wNtqw%wHf z_}{E@_o=$2uTtLsw>b4G{93~e{ibz?KfU(cn07NFJ$ZWB+$}m)IgH!6_Eo+Vz}cIRm39@9h@Q$q_^LsN4@3j<373rlAwCqq+X wQ#T7oLkmMAQ%7Sv1slRjVioM{xQa^>i%KerQq#DMj0_CSjkr`*UH#p-0EO@RC;$Ke diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 4a89d1a83e1665a2a07d54a9889dfab34e40825b..208ea230f070cde7977bc62c60ec6a3e56619da9 100644 GIT binary patch delta 486 zcmZoZ%HDjGeZq|TOG-ByH#x7F@M4wIhyUEiw$8P>d*RgHzPUS#)7~h}VSJc*z*_aM ztAfJuW5F!y*Ai5I?BTIzmb}uhy}so0rby-2hyML^GN|WY|0_3o_p@EEbC##xnD4~o z$#!&O`_pV*0m0;xtF445H$P>1&+hV3FSfzO4Ney@3a{8P}H8`3Gtg1n1Se>+)u`=Ulz8L3hHWi9$Km!o3N*&uY0n zdVcWgj8m4exwp5fol>#N`mpxh*Rz?~FS)9h>3Hmae(Kw|D~X#nR+TK7uD!q`gW{4}Y+W!B#M&W delta 486 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 delta 8303 zcmaiXbxa)Izbx+V?y@+$IK^RccZxg3mc@N>rz|X5+=~>aNJ}YJtU!Tc#a)YAi@oo? z_x*A6{k`O!6NNSMuU>)*(^D&Lak)|m`qZHfk_T8SZF&-=;|9_dXA`$<#Q3ZVo0dg z(!{aTt0jul@HH$3*?7u_n-3Z)JtsERL7fl8LaP3NBGm6^$H>G`b!0YE2_3=pjXQFf z9*TN+%Z1GqcDiEXcJUvR*sTqC6h7S14erQKPBPawf4!)_qDB#&$PAf zD%Hxj_mO})OD)1de_~&cY)eI)acLS2Na&$7<>Tpac9UV#oLl+%50~?Ry^0g|jP|+U zWB7slBrM_s?Q1lnCw6F8zNrXgjSj7NdsgZZ^^51PnpOac2&mOo*aewl-|h?PQ|i;% z3j|LXjhE;M2}v3sLlLnqVu&g#CWtsUCPS!;lEVBu;c{|tEi$S&`N4FXc=m`SUJ#3| zoFG7TqYKZcKUY z^98c^Q1yOACM;XB{js+8L;u#6X%@Fp#>4f~1fqAs6Or{w@@{wKy1se4S}W8OMa!O=_YR*y)OF>h+aW&X_P3DGva`R=@ei4+QkgD< zvu2*)b8OB<T!?9 zx|>f=i02VEj=fG#ix5-TtvK!1A{*2t$dZ9O(YRgo((HGeC3h^^vAE_<-uP69a#-!n zhinrMWf5cag_HhnL-YodtT>|w!yW@Zeowy@0&D1oLaM+P?a#-v*X^#Wb(XJegZm$2 zDzVpPTsU?Q!;T+IwdK`~#|FuSD#dqQdwOnQuJ;y4JIb$Sy=kmHLCtTbs(RfddzLDk z$oZ@wT@`aG9~j*c(@v1(NRQzTOBmdWy$AaDGzFWw`gfdh`OYQXLoirdj&Aw=^35PK z^2^*eOdVujDE0b4%20jQPG z06_>!!WHE`qJ41vmU-dVh<^d%zAe>Ob1wVrHr3CRb>N=<8D4nY6pwFT0UJ=x-OK@# zpEjArmG-nw?>E)nPhzpPYt7n5vkIEkQp+$OR-dyx&k!uQIK{PphJ;Q@Xj3LhWrXX*!jR5*ey~F9sWb-g!8L)kme$BaxU_8o8*b*K8adp zXNJ-1Mn$0stw>Jal%~p#4|ee(!M1+pvgmf&7IxNz(fOBJO4~BjA_~#Hf-}q&H_V%0 za54l0@<-%9WQcaqD_y<*3Z)C}#2eKrxMs~f4=Qk#ex}&g-YV)9ZHbqdd=uy=;mHx> zGY?EjZJJR1_!%%i)B_q78B~ITAEre*cuAX~4^tZzg{S-AS|<*G z&wdCF z!T44)JF=~G`;^@rYI!AWSf3}KN*36n0DZjTqv)vw)Nvd8m zc3wfN3KnfqS-#!V!?pt=Ft*RQ06SA&IZ3AjjQpD}pLO<`8pyUAN`K0VwAgO2z`HGl zHk!EOrbz~omIFk$^71#oMvDif97pYUlL58Wdr*I&vs*3D4@uG}JMt5QZ`klYS34&C z>RweZ99W7mSR0aNkh>&(HcKM3TQOT1^;1xpOi9q9z+Pz#$~(3J-ljkUpxc%Q z&$c1&TnP5bdnv*|O)Py(4d;j14roxMybQd3$G^OV>P(%A%2ik;)J!Ad@Wg5e%XtFzmmJ%G(MT zIv1|K2w2f!hc!?Y_fP&E&^Nd52+q=^990Vy`u0RtY8i&i*}JoEF7I*S{qEf+ODD?! zoNSLH)i^(LTa}A1c7VILR~=IZU=tGS@m}quzQ@G+lx+Jy(k)8O z1H?GHS~nsJKi%&`gLm1mPw4nBkYsu_G5hy{r`m(2tmq}}cLN7Ko$YL&*ID0pewa8H zFB{|XH?HzYVBESCxTf(&)7H-$Ff+wmR09s*+rgV*cmXl2H1MjBm7o-QwayoVqidQs zUmpnSV2!>IbPJ-tHWj#DQ#HPR(i2`q10cmc({5)qdFc5EG^t^NjG-K*WN55gU^=JQ zkAR~LvH)^5HNbbw^2_%IQW0BjE^#Il4ZJZ-#5e+MjNdD9c$Ny7)EX;A4))FhH&0q@ zHGK}vK6icMK7rFj{5EYgkCj}n<}EF(e$kT7hcTTpow6bqhl7*Vf{C0zYqO?57OvfP z7N^riM)vNGdDm?(^$x4`MecM9qt8*S5@5(5#vjr(N=%}MA{)9(uB6+l;!q|ko2pm& zzq@Uwt=1fK9uS*J&WMWIK(`oh?kyWXQe-(!QBk|jtjw#H8;tyQ5+R=!;k8jrLB^)A z10&RIA2nRiP(Q^iXdv*!J!wHwo-ZrWa#iHntiL(@&R|kVki1D#S$Fes>hLkB1%oKf zjc2CKZe=M!xNpBgqKt=Q7(P|iP|)oys;L_94vu$s94R?$5>C?IiDJ`IbmScViDUI+ zN7l{OZx^qsGqV6`Q2=JuN^7d<2f}WUgN<2ENoNJ|CyRR}D8yD{5Vh{LJ6cF}#Jtc*+}du>RZ=wi5x!WZJZqV~;lJL!abrVrRBJf45jmd{hFy00 z>B%x)<5e~6?BtxMYfbo)2iLb2k8rdBERYDIg^tffw)`XrxE6 zcG2PxZblQefLA;U6pqM) z_NXT`gl5G%(JIMMY*(Q(ef{dJK5agWW9Z`(OK^_ofyCRbMWQd{+qWAAFnS{>Ya-^_ zJ{-RC?SkoIlwUeowm=yLlYUQM{FG_U`oRxrjn}KEv6W%}B*N{C`RS@tCKCyq;&Zw3 zh%`jdJ(9}*Ax(V|U#E7H2UXCx2q}y4NPt7`6XprGo%@T+gG#Y(<~oF1(*U;F``0<%JJbt-|X1Ck^;5MzXnb~Dt`(^~28wv2__F5%?IOQo9d znKc2YgpleoGjfS}xWTP}T{u(VY_|`X@@yHGf!y*W9)+aL0JQT6iy2Ge^yS}zQ2g_X zO>WNu80fEy2xIu@73S*7TUI^zhw2lgah$xBmucZtm?R-=X=Uet%=Vio8tCuyvJ5>b z=}`g|u7@?$ErTF%xBrlAH5%`P;FmI9r)Z5{(UjdD8!<+G@ztc|VXspadtDhwu}OD~2E{H;LxG3u!FujUX?H)RdL%54tnxj{WsHJyt*9012{FBG|dbMGeyi>tSWZBMy zL5Ubp8|UK4iS+06g{#i!Kw=Tr7Ow$JACg(#mMM#zj4XZ2O&o1wO`>nxr)6??f$d49 z`Xz5$5lpzQV^*0u^g>cUD*-In6U!UIvRflmIf;;Ug4nyqx`;jt8P2Oe7Nz&!4E_6_ zSS`waDH}EF>;TKSKtaS=>$v<4Jedc3t3dr7Bu-5M0DQC?2I7nCnbbwf?Pl5}f&WG=YBm%K)jqg8(yC zx2ZcZdvG&1O*?yMY!Vhf>r~|heC(gLiF=>`ef>G$yr{AB`V(9N6HkjHeW#8kvwE+U zGTDkZ7=JM885>+t`QSLIo!HlzmD@<0q27oMW9BqRUv;y(XXmFk0XL~cu7Ulfy&AFq zxQ`E;%NTRNi=2+-^^mqnPss0B)x{|pGQBRUYDsC$RpfacCBR-5;@JLA2W>jmH8slS zH)uD|kLu%U%fV<9P@SbPAh~2lR#jU-jlqlU@b;+AZ`YGFC?=s+bIW*&GZaDHz&0U= zxoC3A>$FrOg4J*$ksS2}*seBr`K905H;)|BRfQ~~nA22vEdm=aNwxtKT#@oST%&?q zFF6|Oq|Z7Y5u{vr*{t)0ZXT+}$6lN9wSwxCk+#;y(y&Jk6HRUUc`03~WT| z#A=@RP>!HlpR4P4=$1YktNCc_<5P>lpph*c3RMj81Jf$rwT!Ow*C{SV*JeEcD?*l) z#{!Lzxc*rkpAQH0fD-INaWo-py@N z)zo+BLo(?CR`b8bkK29u8R|y<6eWM0&xp0=6IL2OAi1wI3DP$AG)es;**d`k+y5Om zPy2;oMLYS+g}Sq~SL`DD>G3UT*@~0J_hct%2=$KMy1@PV< zSUO@_pcuVrPqcEB{3icVIM!ek9MWL_6}*rsxsvh~-HwLi(6Ua zcu?G(M7%>`(=zvE6N9SHeE_ghv85%lFw`o}OJ=Ev{l}19yH!!e*9;H=vsXz8xWc() zvi?*&h4aU?DPh>FC4SV6InN=^K*N2{#EgnusUgp)C}WpT!1B{>EcuAEw}f#gMRM%l zPgtQv*^s`$9_*m4!QYk!S#;z}1`3hh!1Oh#RWKO%IT@doKa#V2pxX}~JH&CpN)96~|dm0da#95tYOut!xs z(&+UiF8P(W#V--EqTrOqefWuMsaNhyYLmL;kv{ZLp7OzX%e91C?5ngfFh%6GvmcF_ zPi6fLh`7aPswwdkj3|9#kWyaEdX*dJMhpdHg1CBRUGkYLDxJT3McehEbL6~v>{c1Q z9VU|E5!;M*IQ2QiRd|6N`0@%xfe3SMO^# zC38f9DV6zu7}{OkjLfSRB{f^8)iS2TG@j9BU+>d`JbtcX!*J@YZcE%#%Fo{(wd>## zkkjrT5YVdQtSk%8d&tyFKXvIG0ke(^i!bOFjQam}Yp9WqA>%_kO#C>=_;bmM$T(y> z5~c3>wH{mgrlxB2@9eE=Uaj)@k=}`YMykzo=e(DU%c#8A@nxG}zrPzhFj1aLCl5*b z@avy8UmVzz3KM{m=R#vNKI!eFIiJOkczqO6TmQPCyHo@JY*N}kd10uaLLB)a<>y*c z4#o)7)4EJBG%2}}8(Nbv=vF&VQ2pE{@TW{f{a)RDok5ncSL6A;&6_^`F8S|rHHCd# zw43j*m$>I`@o7a~=fhSwUy;s0t-(Ew>Kqz&*?lZgUtoJx?iDdcsWRVI2gfC}=Yn~0 zrJuakeIjkvM1O>?y$R~Y9}vY`me`FrHdOtDlmTlh!b$iw5|J-MRKY()Z{;uYp2UPE z-6PEz%Oz6B3Y_%Ck~Z?`1hZyJmr*ewZ^5i*vl4SqMCA_2#UC|b8T}`qM8Scl@rHgo zLt(RVN7riN^-q!Wd8YNiN;ynv@T1gCmmun-bWug1hdYooEDqt2ol!C0bxm+1b(pY9oY})B`P$z1f(z}VhH{LFOXOPJnD29`RTUERuK{`U9ycFc2TU%x3*-fylw2Sx7W?P(O~ zYXAsiT}*k;dZI(GO6>8SA%apJ2&*>6ek#vsvu62bAqNWdst_di$ZEKvNNUf?1?(Me zVTY_qd-ihQCQsY7SY|C-o~#XELfypg50knmkt<{l5!C|4xMD?EaA$Swk&VM%bfGGT1198SoZ=>(VjIo+<}(Ln@RoTWVIAO(ppf*V7n@`lVLMh zU*$E(X=VWXNQ`)Qe#aS|jJf+wCR_s1F7|E=xs}~-cdG~{wZ#137SzF!bvwn*!79-^KFw6(3;ykah#yD)cj5rvC4h{oz`j=VXuQw&vV+3H_Ne4YTz!GwtFPBo%U0z*Y zr3<;}qn(6bzZ(ahezbK*9HODzfst0$6_Ke8E996_y%<$Ij-a(>VQ_UwAj3)XUC#Tn zb@_+okWUfKyH+Un4|U1QI>D6za1CI<@o*lonay8^Va|jF=mc!&_z7S$03sIK1>F4X zF(fgNC;LMmlakH})AS)P^!>!~Ov2RXvEG?fAhG`4==Xi_podjv@Vfnf57GN48b={> z^1O7a@U8})o z*2d^+MPT8TLh@m)S2H0MIpb`FJxLsvtg@kh*6@ul5q(N0{#>sYgsTmHdsb=W8wBT1 ziH>S~qiiZs)QcPw&*~gZsCVaft{k-124n<_j)}Yh8Y9a@oOGS-f6<}%?D8{84;Qc$ zHS*r#Q6UG12A@)Y#7MrU+d{&e{j+>yEN!N`{TNJu;zHa)@%Q_jsl9N)?PzM(+hPYJ zB;TE~Vu(rAI*H~w9j3WV3T$r7*)(XF&3;f5bdzJDKGZ2xB=fXp8_r!}ze+UDlF{(> z+4)w**W}%!N}s&DZj-N&l*&w#Yc^Xq_(a{}MpsZMF{610Y7gX&T!Md3@v7{>c`d+zK^lh|^5 zYt$jsnjFRNI&K?dieFQ#85Wp^3ub$}HUJ~EcMw_~Sv3s9EL zn_Y0NXJZcZj&yVVH0qRAat&dUNVbOXs2kOnGaH5cRJO%&8B$R>Bss^l?s%6OFvBBh z$z4q5(i4TWh0?8anoayRZ%^|wL!j%LBm4`{lorhgtkM;9niDzT8+-izgHl#^()eX5 zsb4c?unb?q3$ubpU3e(&BLr9fLKd)C)vwYcB2ILS83d-qZp8{&r4L@VwNlmhO*OSU-stR z5UQ_6i>JXjiuOtps{t5%awu(RYC2KTSY(l80E{TzrBq;RnFdz_6=s%1_fTI5n2oez&`VSLP;D3e|1quIe58!_t4@gu< zO!(gkMTLR?TlhaZ5pf^_;VEmQ2>fRoC?T&bA_4}Bh>A%l3rQ#dl@t^d6_kV(K_W6t jQvZL6C6kN{j*qXcw{M`gqZ1BD3@9Oj!_E%YQO5Z{0%eiM diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 50dd7192e80f0cda3beb5d87b7092cafcdf80074..0c984814c597ca5974a3725e4674ef4cb54259ba 100644 GIT binary patch delta 8224 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 SdNinv3O#e?Ecxs}&;J0>4wcpb delta 8183 zcmai3f2@{e8TNeqksfC(GTTzx!9wQN^7;LPFd!O++RJ2!QO`p`>Vm+ZQKX7SC-cOC3GJT%z1cjuX#=bU?Y#v9|;o&NB( zqmP~&vHx88!N1mLoK4SOH2luCz6Y-FT{U>@A9MEoH_g0e#ytl<{l=a*$3A}Wk71;k z|D#WAoq5&UPkm-*#6q)x1YWKxtAVWUbA0+Zq*aL19wimcI0%|?dKhz z_t1U!-gw@{-QW55#Fn2F!)JzW8QDMlv0J}?(F^mo&;Ec~e&+B;UI=~jXI=W_=z-gg zow)pq#5R z_iTOU2Zv7n;rJDIk9>7_|Ne7Nu2?_*m$A)P9eQ)a*t=&>-}0Y_=lfrt zEar|ZU;WO@Cr&-{^n*J-|K4A`e*3Qmo?dq9)S>Nbc09G}$gv0a-+gYz`DdQr&^@r} zzFD;gX4Se5&8pS9u6~cz)>*IXAL^}L*8InU-rBweu1A%BdN%cRH~ykj$VSR^_F2k| z@wR^HHMMz#rvK78R%P1epv5_Dl{HqJ(ir(W* zVi^FEy56TmvgoQt7cj=BJY`MGn4r9P35+(1&)LA|yykNu5DFm~Q%DO#j&v{rZFw%5 zM3+P-;a4hp=}yRE()`eV{>`wn$telHGmcPzj8JgK6ABLbNc!EStXjw{o=lt&21!DP+#`+ga9&G!QWvuN zu0^%?7m8AWMyyB=>JAjshJ!_$5GA)NKYL^Xth> zU9_w=5o8n>BYf#4R(Hs(DwE%>x8x@4aBKpD!Hemfir5!G%`C0xa zC@X1)^rqPu#F=D{^I5e!wdA{U$P)4r=OYCR@+CRO1tX2Y_bk;~7djXiTtTmMK2g(# zl1DstDH`cj7lM|-=TagndZQ-cN1bm%jeJa9gV!mOk24}jxXBw%H@L(|UGHKw21@)r z@+*HZP*Fs2psI~RkYyV2F;WxgT?Z7R=G#@*IL> zDwnqAEL=?RqomQr!FweWaX=#{Q3&t|$-J$mo3hUf-ch#4v_nJ+8Iz!V35L1$a4Mq- zqb@%LJ-8%hKt)M%&I+hye2|HWqCiCy)S@I6Em|{aG>XD>j%?0Z(OMbDNGhgM9Lv|C z^3&`UBe#$6wt9Ej2ro{ zl>?I1G@Qdg@+XujWHC56!4J$Zmckh4S|K|>sU^SEt)w0x~2`;Bxz8DotqJU;u zB2!?pkw%1$_%RmGwEVLQLt)cj;qRWNu(l%zEJj4+7;-EL`Xmx6-Iv0 zYdLS=Vwlb6sMjes9^!k@1zVw8;y(?)O0Y#7gv?14ploOhg>%%;CQk@Lx6=Jj#vcxL zP>!;ZhO&}=hk=p9lY0mZY}{}sUx@w_a3t(d1pA?!DC?!5rGe0;kZnwvM9g3(=O?_s z1wZ;uaS+OZTB&lINp1>G5)Qha=Gzp!Zoi{}f5H+_5DChT21oFh;YYa>dA`(T9+f3k zk~OMA=4B{j@SuadX-ufl;v95&3xzh3b`vSusRY;R|4LSKl zelSscg^PKNOo`ZEZc#0{31wsIA+7!o2c?Bj#u!pH1{b^O=CKty$;%1|T`yaAXks;3 z`5y33h$jI}DU$;>lo3xA-OeQyB? z7B0)8qY}!?bX9Eje~DMtP);0*+0rr}Gg6h+CAn1O1_YaJVe~p!LyaPo12-VKLygGj zhpNax*K-4sQ~kuUaur&gz8ZG&uObzQZMl(1|n@-5k4T}$Az>xbvERt}uJm=BYOIa{_fwT~t z8ksmXWO5A!8Ai+c-&WKXt`5H6nSNw}MSXpJWwW$!5g5PN_Q!=N`=7GCJy-w#BP)A) ed%L&Xv3l^1y9Nio)U93A%6HG5yZFZb?*9RArko1^ diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index a273a7bf5467ff9aa8618ef5c797b3e583f8a691..47890d17f8b57a6480436d37fc5db5291ee5e0eb 100644 GIT binary patch delta 22303 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�BB@AawbNMqGBR@zSVdZsVhG{=14u}QRKmyp1 zI<69T(kMO@lgp9xPs-N2<{Q#evxSs@)OtvEx4z*G KyUyLc_5T0~t}sCW delta 22474 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 aw_kSNo91-;b4hs*<{Wt7@#|kc=l=rR55a~2 diff --git a/ReadMe.md b/ReadMe.md index 1403e05f..d308cc4d 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)) \ -13 Sep 2023 +14 Sep 2023 # Overview diff --git a/ReadMe.txt b/ReadMe.txt index cbae8c11..e40bd6b4 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -13 Sep 2023 +14 Sep 2023 diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index 750afa4d..470c3bc0 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -206,6 +206,7 @@ below, **carefully** pick the appropriate ROM image for your hardware. | [Z80-Retro SBC]^8^ | - | Z80RETRO_std.rom | 38400 | | [S100 Computers Z180]^9^ | S100 | S100_std.rom | 38400 | | [Duodyne Z80 System]^1^ | Duo | DUO_std.rom | 38400 | +| [Heath H8 Z80 System] | H8 | HEATH_std.rom | 115200 | | ^1^Designed by Andrew Lynch | ^2^Designed by Sergey Kiselev @@ -4035,6 +4036,29 @@ the RomWBW HBIOS configuration. `\clearpage`{=latex} +### Heath H8 Z80 System + +| | | +|-------------------|---------------| +| ROM Image File | HEATH_std.rom | +| Console Baud Rate | 115200 | +| Interrupts | Mode 1 | + + - CPU speed is detected at startup if DS1302 RTC is active + - Otherwise 7.3728 MHz assumed + - Hardware auto-detected: + - DS1302 RTC + - ACIA Serial Interface Module + - SIO Serial Interface Module + - EP Dual UART Serial Interface Module + - WDC Floppy Disk Controller w/ 3.5" HD Drives + - IDE Hard Disk Interface Module + - PPIDE Hard Disk Interface Module + - Serial baud rate is usually determined by hardware for ACIA and + SIO interfaces + +`\clearpage`{=latex} + ## Appendix B - Device Summary The table below briefly describes each of the possible devices that diff --git a/Source/HBIOS/Build.cmd b/Source/HBIOS/Build.cmd index aaa933b0..3807e580 100644 --- a/Source/HBIOS/Build.cmd +++ b/Source/HBIOS/Build.cmd @@ -234,5 +234,6 @@ call Build RPH std || exit /b call Build Z80RETRO std || exit /b call Build S100 std || exit /b call Build DUO std || exit /b +call Build HEATH std || exit /b goto :eof diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index 1d0e39f2..cc6dd105 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -27,7 +27,7 @@ $ErrorAction = 'Stop' # UNA BIOS is simply imbedded, it is not built here. # -$PlatformListZ80 = "SBC", "MBC", "ZETA", "ZETA2", "RCZ80", "Z80RETRO", "DUO", "UNA" +$PlatformListZ80 = "SBC", "MBC", "ZETA", "ZETA2", "RCZ80", "Z80RETRO", "DUO", "UNA", "HEATH" $PlatformListZ180 = "N8", "MK4", "RCZ180", "SCZ180", "DYNO", "RPH", "S100" $PlatformListZ280 = "RCZ280" diff --git a/Source/HBIOS/Build.sh b/Source/HBIOS/Build.sh index a9607d98..5b7860ee 100755 --- a/Source/HBIOS/Build.sh +++ b/Source/HBIOS/Build.sh @@ -44,6 +44,7 @@ if [ "${ROM_PLATFORM}" == "dist" ] ; then ROM_PLATFORM="Z80RETRO"; ROM_CONFIG="std"; bash Build.sh ROM_PLATFORM="ZETA"; ROM_CONFIG="std"; bash Build.sh ROM_PLATFORM="ZETA2"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="HEATH"; ROM_CONFIG="std"; bash Build.sh exit fi diff --git a/Source/HBIOS/Config/HEATH_std.asm b/Source/HBIOS/Config/HEATH_std.asm new file mode 100644 index 00000000..4ca7f5b9 --- /dev/null +++ b/Source/HBIOS/Config/HEATH_std.asm @@ -0,0 +1,69 @@ +; +;================================================================================================== +; HEATH H8 Z80 STANDARD CONFIGURATION +;================================================================================================== +; +; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE +; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS +; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE +; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. +; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY +; YOUR FILE IN THE BUILD PROCESS. +; +; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. +; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO +; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON +; SETTINGS. +; +; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, +; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING +; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO +; DIRECTORIES ABOVE THIS ONE). +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#include "cfg_rcz80.asm" +; +CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +; +DSKYENABLE .SET TRUE ; ENABLES DSKY FUNCTIONALITY +H8PENABLE .SET TRUE ; ENABLES HEATH H8 FRONT PANEL +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; +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 +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_PIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|USR] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/cfg_duo.asm b/Source/HBIOS/cfg_duo.asm index 258b6074..3456f31c 100644 --- a/Source/HBIOS/cfg_duo.asm +++ b/Source/HBIOS/cfg_duo.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_DUO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_DUO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -86,6 +86,7 @@ ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index 967c934a..19e8fb1c 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_DYNO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_DYNO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -82,7 +82,14 @@ LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; -DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) +DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_heath.asm b/Source/HBIOS/cfg_heath.asm new file mode 100644 index 00000000..1f863b0b --- /dev/null +++ b/Source/HBIOS/cfg_heath.asm @@ -0,0 +1,320 @@ +; +;================================================================================================== +; ROMWBW 3.X CONFIGURATION DEFAULTS FOR RCBUS Z80 +;================================================================================================== +; +; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD +; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY +; UNDER THIS DIRECTORY. +; +; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS +; FOR THE PLATFORM. +; +#DEFINE PLATFORM_NAME "RCBus", " [", CONFIG, "]" +; +#INCLUDE "hbios.inc" +; +PLATFORM .EQU PLT_HEATH ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] +CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] +BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +; +CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .EQU 7372800 ; CPU OSC FREQ IN MHZ +INTMODE .EQU 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .EQU SER_115200_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE_CHK .EQU 0 ; ROMSIZE VALUE VERIFICATION (0=DISABLED) +MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] +MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR +; +KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS +CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER +CTCMODE .EQU CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) +CTCOSC .EQU CPUOSC ; CTC CLOCK FREQUENCY +; +PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K +; +WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR +; +FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +; +DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC] +LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL +; +BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE +CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +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) +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] +; +DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC] +DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS +UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO ONBOARD UART +UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) +UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART +UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART +UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART +UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART +UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART +; +ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .EQU TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +ACIADEBUG .EQU FALSE ; ACIA: ENABLE DEBUG OUTPUT +ACIACNT .EQU 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) +ACIA0BASE .EQU $80 ; ACIA 0: REGISTERS BASE ADR +ACIA0CLK .EQU CPUOSC ; ACIA 0: OSC FREQ IN HZ +ACIA0DIV .EQU 1 ; ACIA 0: SERIAL CLOCK DIVIDER +ACIA0CFG .EQU DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) +ACIA1BASE .EQU $40 ; ACIA 1: REGISTERS BASE ADR +ACIA1CLK .EQU CPUOSC ; ACIA 1: OSC FREQ IN HZ +ACIA1DIV .EQU 1 ; ACIA 1: SERIAL CLOCK DIVIDER +ACIA1CFG .EQU DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) +; +SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .EQU CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .EQU CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .EQU CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .EQU DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .EQU CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .EQU DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +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) +SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +; +MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .EQU TRUE ; MD: ENABLE ROM DISK +MDRAM .EQU TRUE ; MD: ENABLE RAM DISK +MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .EQU FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] +IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] +IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] +IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] +SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .EQU 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR +LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] +; +AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .EQU AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC] +; +SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 17b7ec59..f29226eb 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -12,7 +12,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -118,6 +118,7 @@ ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index bf1cf540..1e38062b 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_MBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_MBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -83,6 +83,7 @@ ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 12fdbf1c..349c9188 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_MK4 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_MK4 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -89,6 +89,7 @@ ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 0064d529..91a0e5a4 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_N8 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_N8 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -91,6 +91,7 @@ ICMPPIBASE .EQU N8_PPI0 ; BASE I/O ADDRESS OF ICM PPI PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) PKDPPIBASE .EQU N8_PPI0 ; BASE I/O ADDRESS OF PKD PPI PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 15c36e04..3cdcb827 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_RCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_RCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -88,7 +88,14 @@ LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; -DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) +DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 4ceee69a..d31c0605 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_RCZ280 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_RCZ280 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z280 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -82,7 +82,14 @@ LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; -DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) +DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 86520a2e..c136b318 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_RCZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_RCZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -81,7 +81,14 @@ LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; -DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) +DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index 83599529..366c28a3 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_RPH ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_RPH ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU TRUE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -89,6 +89,7 @@ ICMPPIBASE .EQU RPH_PPI0 ; BASE I/O ADDRESS OF ICM PPI PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) PKDPPIBASE .EQU RPH_PPI0 ; BASE I/O ADDRESS OF PKD PPI PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_s100.asm b/Source/HBIOS/cfg_s100.asm index 7a5ab80a..96cd2f9c 100644 --- a/Source/HBIOS/cfg_s100.asm +++ b/Source/HBIOS/cfg_s100.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_S100 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_S100 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -82,7 +82,14 @@ LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; -DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) +DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 2a51aba2..4481aba1 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -83,6 +83,7 @@ ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index ce37b026..ef5f56f3 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_SCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_SCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -82,7 +82,14 @@ LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; -DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) +DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_una.asm b/Source/HBIOS/cfg_una.asm index 8fe2817c..d3b1050c 100644 --- a/Source/HBIOS/cfg_una.asm +++ b/Source/HBIOS/cfg_una.asm @@ -15,7 +15,7 @@ ; #INCLUDE "../UBIOS/ubios.inc" ; -;PLATFORM .EQU PLT_UNA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +;PLATFORM .EQU PLT_UNA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_UNA ; HARDWARE BIOS: BIOS_[WBW|UNA] ; diff --git a/Source/HBIOS/cfg_z80retro.asm b/Source/HBIOS/cfg_z80retro.asm index 52625003..15ac1922 100644 --- a/Source/HBIOS/cfg_z80retro.asm +++ b/Source/HBIOS/cfg_z80retro.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_Z80RETRO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_Z80RETRO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -86,6 +86,7 @@ ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index face022d..dade2858 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_ZETA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_ZETA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; BIOS_[WBW|UNA]: HARDWARE BIOS BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -75,6 +75,7 @@ ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 2302b859..d03f773d 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -15,7 +15,7 @@ ; #INCLUDE "hbios.inc" ; -PLATFORM .EQU PLT_ZETA2 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO] +PLATFORM .EQU PLT_ZETA2 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH] CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE @@ -86,6 +86,7 @@ ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL ; BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/h8p.asm b/Source/HBIOS/h8p.asm new file mode 100644 index 00000000..8ccb96ad --- /dev/null +++ b/Source/HBIOS/h8p.asm @@ -0,0 +1,162 @@ +; +;================================================================================================== +; HEATH H8 FRONT PANEL (DISPLAY AND KEYBOARD) ROUTINES +;================================================================================================== +; +; LED SEGMENTS (BIT VALUES) +; +; +--02--+ +; 40 04 +; +--01--+ +; 20 08 +; +--10--+ 80 +; +;__H8P_PREINIT_______________________________________________________________________________________ +; +; CONFIGURE AND RESET PANEL +;____________________________________________________________________________________________________ +; +; HARDWARE RESET PRIOR TO ROMWBW CONSOLE INITIALIZATION +; +H8P_PREINIT: + LD A,(DSKY_DISPACT) ; DSKY DISPATCHER ALREADY SET? + OR A ; SET FLAGS + RET NZ ; IF ALREADY ACTIVE, ABORT +; + ; REGISTER DRIVER WITH HBIOS + LD BC,H8P_DISPATCH + CALL DSKY_SETDISP +; + RET +; +;__H8P_INIT__________________________________________________________________________________________ +; +; DISPLAY DSKY INFO ON ROMWBW CONSOLE +;____________________________________________________________________________________________________ +; +H8P_INIT: + CALL NEWLINE ; FORMATTING + PRTS("H8P:$") ; DRIVER TAG +; + RET ; DONE +; +; DSKY DEVICE FUNCTION DISPATCH ENTRY +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; B: FUNCTION (IN) +; +H8P_DISPATCH: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JP Z,H8P_RESET ; RESET DSKY HARDWARE + DEC A + JP Z,H8P_STAT ; GET KEYPAD STATUS + DEC A + JP Z,H8P_GETKEY ; READ A KEY FROM THE KEYPAD + DEC A + JP Z,H8P_SHOWHEX ; DISPLAY A 32-BIT BINARY VALUE IN HEX + DEC A + JP Z,H8P_SHOWSEG ; DISPLAY SEGMENTS + DEC A + JP Z,H8P_KEYLEDS ; SET KEYPAD LEDS + DEC A + JP Z,H8P_STATLED ; SET STATUS LED + DEC A + JP Z,H8P_BEEP ; BEEP DSKY SPEAKER + DEC A + JP Z,H8P_DEVICE ; DEVICE INFO + SYSCHKERR(ERR_NOFUNC) + RET +; +; RESET DSKY -- CLEAR DISPLAY AND KEYPAD FIFO +; +H8P_RESET: + XOR A ; SIGNAL SUCCESS + RET +; +; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS +; +H8P_STAT: + XOR A ; ZERO KEYS PENDING (FOR NOW) + RET +; +; WAIT FOR A DSKY KEYPRESS AND RETURN +; +H8P_GETKEY: + ; PUT KEY VALUE IN REGISTER E + XOR A ; SIGNAL SUCCESS + RET +; +; DISPLAY HEX VALUE FROM DE:HL +; +H8P_SHOWHEX: + LD BC,DSKY_HEXBUF ; POINT TO HEX BUFFER + CALL ST32 ; STORE 32-BIT BINARY THERE + LD HL,DSKY_HEXBUF ; FROM: BINARY VALUE (HL) + LD DE,DSKY_BUF ; TO: SEGMENT BUFFER (DE) + CALL DSKY_BIN2SEG ; CONVERT + LD HL,DSKY_BUF ; POINT TO SEGMENT BUFFER + ; AND FALL THRU TO DISPLAY IT +; +; DISPLAY BYTE VALUES POINTED TO BY DE. THE INCOMING BYTES ARE IN +; THE STANDARD ROMWBW SEGMENT ENCODING AND MUST BE TRANSLATED TO THE +; HEATH ENCODING (SEE ICM.ASM FOR EXAMPLE): +; +; +; From: To: +; +--01--+ +--02--+ +; 20 02 40 04 +; +--40--+ +--01--+ +; 10 04 20 08 +; +--08--+ 80 +--10--+ 80 +; +H8P_SHOWSEG: + XOR A ; SIGNAL SUCCESS + RET +; +; UPDATE KEY LEDS (H8 HAS NONE) +; +H8P_KEYLEDS: + XOR A ; SIGNAL SUCCESS + RET +; +; SET STATUS LEDS BASED ON BITS IN E +; +H8P_STATLED: + XOR A ; SIGNAL SUCCESS + RET +; +; BEEP THE SPEAKER ON THE H8P +; +H8P_BEEP: + POP BC + XOR A ; SIGNAL SUCCESS + RET +; +; DEVICE INFORMATION +; +H8P_DEVICE: + LD D,DSKYDEV_H8P ; D := DEVICE TYPE + LD E,0 ; E := PHYSICAL DEVICE NUMBER + LD H,0 ; H := MODE + LD L,0 ; L := BASE I/O ADDRESS + XOR A ; SIGNAL SUCCESS + RET +; +;_KEYMAP_TABLE_____________________________________________________________________________________________________________ +; +H8P_KEYMAP: ; *** NEEDS TO BE UPDATED *** + ; POS $00 $01 $02 $03 $04 $05 $06 $07 + ; KEY [0] [1] [2] [3] [4] [5] [6] [7] + .DB $0D, $04, $0C, $14, $03, $0B, $13, $02 +; + ; POS $08 $09 $0A $0B $0C $0D $0E $0F + ; KEY [8] [9] [A] [B] [C] [D] [E] [F] + .DB $0A, $12, $01, $09, $11, $00, $08, $10 +; + ; POS $10 $11 $12 $13 $14 $15 $16 $17 + ; KEY [FW] [BK] [CL] [EN] [DE] [EX] [GO] [BO] + .DB $05, $15, $1D, $1C, $1B, $1A, $19, $18 + + ; POS $18 $19 $1A $1B + ; KEY [F4] [F3] [F2] [F1] + .DB $23, $22, $21, $20 diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 4af7f5c1..2e499272 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1922,12 +1922,14 @@ HB_CPU1: #IF (ICMENABLE) CALL ICM_PREINIT #ENDIF -#ENDIF ; -#IF (DSKYENABLE) #IF (PKDENABLE) CALL PKD_PREINIT #ENDIF +; + #IF (H8PENABLE) + CALL H8P_PREINIT + #ENDIF #ENDIF ; #IF (DSKYENABLE) @@ -3219,11 +3221,12 @@ HB_INITTBL: #IF (ICMENABLE) .DW ICM_INIT #ENDIF -#ENDIF -#IF (DSKYENABLE) #IF (PKDENABLE) .DW PKD_INIT #ENDIF + #IF (H8PENABLE) + .DW H8P_INIT + #ENDIF #ENDIF #IF (AY38910ENABLE) .DW AY38910_INIT ; AUDIBLE INDICATOR OF BOOT START @@ -6163,9 +6166,7 @@ SIZ_ICM .EQU $ - ORG_ICM .ECHO SIZ_ICM .ECHO " bytes.\n" #ENDIF -#ENDIF ; -#IF (DSKYENABLE) #IF (PKDENABLE) ORG_PKD .EQU $ #INCLUDE "pkd.asm" @@ -6174,6 +6175,15 @@ SIZ_PKD .EQU $ - ORG_PKD .ECHO SIZ_PKD .ECHO " bytes.\n" #ENDIF +; + #IF (H8PENABLE) +ORG_H8P .EQU $ + #INCLUDE "h8p.asm" +SIZ_H8P .EQU $ - ORG_H8P + .ECHO "H8P occupies " + .ECHO SIZ_H8P + .ECHO " bytes.\n" + #ENDIF #ENDIF ; #IF (DSRTCENABLE) diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 77f77131..f74d419a 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -152,6 +152,7 @@ PLT_RPH .EQU 14 ; RHYOPHYRE GRAPHICS COMPUTER PLT_Z80RETRO .EQU 15 ; Z80 RETRO COMPUTER PLT_S100 .EQU 16 ; S100 COMPUTERS Z180 SYSTEM PLT_DUO .EQU 17 ; DUODYNE Z80 SYSTEM +PLT_HEATH .EQU 18 ; HEATHKIT H8 Z80 SYSTEM ; ; HBIOS GLOBAL ERROR RETURN VALUES ; @@ -353,6 +354,7 @@ RTCDEV_RP5 .EQU $50 ; RP5C01 ; DSKYDEV_ICM .EQU $00 ; Intersil ICM7218 DSKYDEV_PKD .EQU $10 ; Intel P8279 +DSKYDEV_H8P .EQU $20 ; Heath H8 Panel ; ; VIDEO DEVICE IDS ; diff --git a/Source/ver.inc b/Source/ver.inc index ca6011b4..43369fc2 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.53" +#DEFINE BIOSVER "3.3.0-dev.54" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 9ea83484..52c3d537 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.53" + db "3.3.0-dev.54" endm