From 94c32c9fd0e599c00eae1ea3397a84ac0dcbb42c Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 9 Jul 2022 14:00:53 -0700 Subject: [PATCH] Mostly Build Improvements - ROMSIZE is now a configuration variable instead of a command line parameter. - Added CP/M license information based on new email from Bryan Sparks. --- Source/CPM22/License.pdf | Bin 0 -> 41285 bytes Source/CPM3/License.pdf | Bin 0 -> 41285 bytes Source/HBIOS/Build.cmd | 72 +++++++++++++----------- Source/HBIOS/Build.ps1 | 18 +----- Source/HBIOS/Build.sh | 74 ++++++++++++------------- Source/HBIOS/Clean.cmd | 1 + Source/HBIOS/Config/RCZ280_nat_zzr.asm | 1 + Source/HBIOS/Config/RCZ80_zrc_ram.asm | 1 + Source/HBIOS/Makefile | 18 ++++-- Source/HBIOS/cfg_dyno.asm | 1 + Source/HBIOS/cfg_ezz80.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 | 1 + Source/HBIOS/cfg_rph.asm | 1 + Source/HBIOS/cfg_sbc.asm | 1 + Source/HBIOS/cfg_scz180.asm | 1 + Source/HBIOS/cfg_una.asm | 1 + Source/HBIOS/cfg_zeta.asm | 1 + Source/HBIOS/cfg_zeta2.asm | 1 + Source/HBIOS/hbios.asm | 1 + Source/HBIOS/hbios_env.asm | 61 ++++++++++++++++++++ Source/ReadMe.txt | 11 ++-- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 29 files changed, 174 insertions(+), 103 deletions(-) create mode 100644 Source/CPM22/License.pdf create mode 100644 Source/CPM3/License.pdf create mode 100644 Source/HBIOS/hbios_env.asm diff --git a/Source/CPM22/License.pdf b/Source/CPM22/License.pdf new file mode 100644 index 0000000000000000000000000000000000000000..94912501eeda59cf0c738afd5e26468a22e946e1 GIT binary patch literal 41285 zcmZs>Ly#^E6RdgKwsG3FZQHhO+qP}nI&IrF-nMPs@1MAviJ4tR);^=2%pz3~5u;_K zV}T|eDjDh?Y8%RjW+Gr9us5=T=Ha22F|{*yu^?dnPf?;5v$SzBb)pxuF?2B%F*UX~ zG3Dcfc6M>V2)hbM5zjYV2AKV(fm|oEItx1nGh7u}(r?6hcV( z`If@AZ3L(!}T|XQ%k~nYr z&OZ{Dl~b>xF80xRJldgX?6pCw9AfNX zkZp#OI^04FqYj>zJ;|9wk=u`#%}ZGY(o$Ij?n>XKJHw(DFf(ZJSI&fSc*RNsVrCtS6Ql~2eL!m3Ec7k@qxgj2bZm`Ez^`? zR0?}Q<`6*l7BM+s@Mmw@EZ2^ztG##x_`8~O-Ne<;X*sz|EUUPyHyY%hT|lD1W=5d- z*qR#l-XxjQ)%4QV16DV#2(`9oXE_zt4Os$1QMZ8%)uFG@;oL?M9+_SYFhFtklKw_H zZ;%dW_+iUBHAO+LQZUJ!I!0hkSMU3oFFMdLvTYRd^1edl#n?g`^T$9rU`(H__w-=E z6-(ns#f`r*i~nQD4rm;xNJ2j!1+fG(Cz4x05DM9WN6)2XZQhapB`GWlOr;Q5k+ z(+z>3!tBwoq~hixgW$a~OL@R!M8HIn%s}R_{7@3Pi0DCdXa1RQa=Wdrb*^(J&kYeO z@CSy4x9uv7VK1wlX(Zq1zBo>pMuTe|LxZ-*9TkN|BI974Xwpq_v_8cMFbNW~Q z9G^T+Zr5Upx@K*waD(#F6B)8C&J) z2y6e<`UgQ9=ONtc5uwFVocsjQy$mn78l``T3f|S>KCVViDn)ft)~Y-_43Il`#uT*t zO-`a|rz22DNiBLaV=Vg5sYwgfGKjkfJlsL#v35!B?L6J55dB4SQ?3U~a?UH@gitL`(x304LAFR#y zR$MwzKBA8PrI5OgmZrvtWyb}S)pICq-4$|A(kh+eoh-N{UwAe;h?YJq!D2OMiuO{d zT{{E?^rkIa)w%&UN7BJvPicQy71kCvB0I#C@N392RE?2U`uHps*&~O8S2tU(uUyFaX%cC5$;B;*DnYOAn>>q(z{atM4>I;CL;i8+ z;&C45ZZ_QMA*teQ1PR|(tH6pBfg_@Gx+%()v<_wRkF#p}2s|D2Z(@>C{8Js|uvsRm zl*wIaxR-Hii&Ty1JVLCd>uv#Ys7AvPO^D++QPg=#z8#djem{U>B$CD?eHcPVblEM6;Ui(x8mN-jX>ujPwDh3fG9b}{ z3G+lzi&+9a(p?Ts%ujLQhb+9;^|b2Uhw$^c-}k(4TqQ$7+(}rw-ZI{3W#F@N%Eqxl zWZo!D*Ha%ZReN!AV#*+$PG8CEggQn6H4o6J#csTECXcaP`OBU)kYV?iGxs-A2jYid zF{|XTCt_KN`10g7PcKc{V;0F$h9WLTbq{n7kMkF-=yBQ6NwsL;TMBBw$lQ**YYd&O3awIie6UQ zW+Q@phxL265;W4*Y{_;mi|d+!J1Qlz7+kj&+brD^vulF!IF__o+p{gRKAnk^JBTb_ zP z``>|$*QwQ2#Y5oB$tt#ag?q{JQ&7{WT;EA{=>E-p)fw-00&84)fAxCzGlbSOqQ~%J zc3X{aK>U^!&!sNq;N%Hrbd)D~UWzznHXSXe?JZ-ga(}x(oie5dp-KO~0EmEcD0$*( zw+Yr3;HHdHlI3$8zE0?o#lzlN%ME$I_H}@>%kMHFR{W~=`0;q2x2Cac@ zcP`2CcbhE5_GvlrvIFa?0*H=rNGm0MMgHhh`v=m})YE43b(ar>%ES`^+(ALo zsyA|Y(6PFt5$N};0?%JtZjHtGCK2NGaVq7J$t|^TS&r&ldThE@>;_lAj5IsQQ!nm7 z!02m?qCnJ#b^=<|(C&$XkV{34Q!At%a8~gjac(+^P+&?aGYT>rznx-Ns@_XLE6PWb zdFW(MQsjNwgr9=Sq78gXkJ(fYp4h>k{ev~XN?W_C*`PeSAAo9o%o;pcnhV*kZK`L2 z7tY#TgsvOcwr8_}x-q|4x2g(Dim_VkKPR$~@D;rFo=P^iTe%ww`-`VXNY{w`M91JUYTL=CgBMx<@8}=Z`oD0~OAM~n4$H{||Gp{0~F^|DfalLJ1=QGczk2%l`{Odc1v7MxGh?nCDDy zyXN$o+HIQV%$lb`2kVG*{5 zBp_<9c9@+|V(vHzz}?+JwHg$|kPVK5y#s2rVt&(XoqX6*24cd2)A~6Qh2}T1$(c zx}_uwSgfqE^tAGBevD^{??BeR5R_bpbHE~ep8=tsb02sJs#LOSn7%QC4Afi^au#kE4m~`CW1ynPVrueKnLJ@W{YJ+-fd1?M7h0YWjX*>$ z6dB*|D>LLF3^2};6Mmp1c%_6d+_9jy6YySObOF{6(D|GwLhhkJxCYkS43z`EaXmA00o`b1zK7C^XLGU_sEZvBV4CM(L1``E zzHbr1&r?ci=Ca8w8E4x^lrpE0~vi|{WJvR8$kngEy&5F+^t3lk3c zo(Q}U_NqA}1{I{)4fujK7ld_K<58xN^#x&kEYMm4#Z%8n_~e8Xyik2Zay|aC14()E zAW3&aYT&8FUMvWoLE;6HqvSVGC}wg*UMY-OQ9KK}{P`PHj_?heJK%L71c)34I}-Y5 z0sT~t@r{jt3i!qWn5N7NloD2eDrwEnEli!Uyd3H$pbOHYLK+&{0%T2uhZcA&u9XuW z>EHB^%sf_|>F<+~4-=8joDfRcK1jXryBzWI0#B0(OG0@jTZvhhIdJp1mj68Y{gLv= z2)`pNA}{Y4dpCcRHq!dC8H6N87U36*FVHstc~Tku`v&nw`vsIKfS!z>%3^E_8ieZpp^q$aw4S< zoH{0SSTT;d{;_Vm(T(=Z_6&Vzc8&YO$p@`H=<^pYrR(8m%OJ-9miAp%$F6aO9&VGXGQpm`u@$%m3lBiVi| zA*J3i<~@Hr&$j9dk5-EC_GI`lp3nY>m4IG+k*3ducdX50-SE}`+zZ=1Y2Ef8k0|ZP z90umz8V7-o4)MhJk2mjR&j=_XB7G%$(B3?_{IHJ(b#wxLXGjsn%Rn&Dobd~^=b;}U zT<}ir&0P5F4$}*}6bSXg`Gn*LYcPpeqB)JA{X$vpv?I`7i3V>2cT@LerlHtesOwJf zkon2|MRdqT#!=7cWg6Z4%?zrYOH>cX)cP&(mSN!bcm2Z4XuJ+J_GKB)V1K`z>3 zXm@;&Yr!g-piI|@(>KHf5TlN%h=-uFnczN*2qeS8cRYWbf*|0n0yzEtN;K*h>p9Y$ z3r~R(gI5M4{%ZNKX=QjI^JZv-Wud$l6%rt@k**3xb}fXT*|p%<$LvLDDRNEcxZkrF zB6E_;NWqe7kK<3^Hho{*gIPf|p!h=1$uE$wsBuKK-Svq(D`*;71Kj&}HV6#yMWp9d zT;RRlv6dZZ-Eq-I%agw&C3UEuUU^xl?^On)TPye$BFqX-7vxodqbh_B91jOgjq54@ zGIyG&+(#4*1|7V64uzeBIfa>+gMnoJz~*1c%0HHL>dJ-lj+nJ(kR~q_tXZ;JrBdAC z4p6jj^H+++fms{*%==%r3ZHlJ10y9;6ImHCiO6>*U^FA4iTHYP(D7DU!yWdsPxh*BkHpWiLuKKlMQ z)^2m1JfD=6&^xP-q1i$(Dq3an_XKg7oAE@$d)D(E4Z2-Mqv3pVS;bEJU$bCYy>^>T zk}emnm9mGrU){nS7TGvVccwP|zJJMFJ(L#*_jnG2n=n(!oA3 z@dNl18C`YrrQmcXj2d_-$yRi-pQ>B<_I??Z^#Q;$BSBLeDQ2T$;dOra&MTj)GfVad z1p^I`YSX$MrqM4|EC#J6p~@+LIPhk4_mjzo=Xo+Rf!;2qaq&fURjp`XNwNiy0)CSe zCofeaDxr12@F#PHoyh|Wwwg?n^z&Lu&7@1{7kY;2rGIF{C!m~+q^&(?{v1A$#%(8J zXScLMTd2m1BZz`BA1ezK%v8<4=>^S2R`ER;tVe zDG)?Ez*Uq`ufA0?Ooevz;Tj--Rz;W+Sw#Y@-eY4;B@}CMnkrHS33Z{|n~274)+%1btTBrPajG$`xZppf`wW^s-s9l$0ng)sq*gr@aOccd9 z<4IVsbV2vx*kO7Xm5RP-Q?UHyto(>}+w5$5JV`=+8#0rYgi6xeFzG%YIe4$={HuRK5%dGANLrS`&d1hPc=drZ8i&t+0! zs5$QkVv*YisjjV}mG0N%QR~&KQL0DARBIv-&u8u+7yQeoX8d}k|Snu-gj;dL_yxFwM0>3shu*e5Z zj7pNUnq%eeRmqVm*1hyI`T>Z|tcan&LlKL`uA{3Wzl4o8pr>LG_HD27{9bQt8Mrx!v#a*1F%J{;dbS z-_Kp3Z2RA{jgIp_6=s_5wK08r{txy1{pagi^aBk_7%F)We% zA!FyTqCh{m{&J7Khr*g~xekhC@U2&C9LlC}WA976M$j(F@b!DwNiF3d9@+-x0id|> z?TigGF*Cj$9|g<}v2K{^;kps1A0TfmgIn`*A{OE1{WOlI;2(DvczZ{gvkDd;7%R5d z{h6l$f^+_gJN!L7T=(?0*9?SG(t*;{rH_lA&B2U8r6wLfA*_bQyJm2kPbVrij3p&T zsDp*`;5xBY!XPzr*2t(rrB+>*wu`q`A?tCsI22tU+50c5{om9!?{l1qc zk`s&-0mMJ`gE$oUBSQ#lPOUx=YZH%wHAp&<=D_TtthBY;+>FjjtGIPitrXXtS6j8C zHo^?aCQh1xiDg8;!vdbWLY}?;dIgH@+YN&q%jm9k3$?5@tUDyGrf#5ihizwe>^6)$ zl(y5|qz?6lU6$TbUIa@P^H6;9T3%EYaRr=F90{2~js$8-;k(zPH;)G4(gr-UA*AhS z_CrKBLyZmw7G9mXD2w4%O2IdkSp?WY;T6qpuG^E}>ofd}5q# zVbu!uW=lVi5O_TQ0|GXNK*2d7g2^TaQ7IJ)q29@Vd6%CX{$2T*xc2@%+Bwzgb9h{m z-|qaP>t49urpyUzoil1O+^btgi>2?rUya0{e~&5IFKg%{YeT^UswS1ng9 zvVzov%XvTkEuH-L8<69YN0)foOHt|zG7rlmq4RhO`+?p32WZssC4gaS%G!?dVrnAYvI4vff#Yr1Gh15L5 ziMPSM!LaA1JL#j|(?E1BHuX0xyaOT@!PD)KeBAEwHb$*MZYN3B>9K_V{wDAWSw=E7 zRhK9e@kF`y+>4GicTGZYNd+~5+Y`tw6 zyMp4jCvW?$z%Q9M62K-5cQ#AqmT`r28LQS>Y~ZO zOz5=2HShg+pUPi*cCE$uIIDCZ@w<0h>jyaa88KNa!#Uk{RsK~>cvBX%zYBmJ7aQTA z^+_Ksm~h0}<`jnIpdo1r#~u|RN=`i?x3qm^@&3%jbWa%`QsjCK zGGxa$3NpoB4*5tQB=p0@9|Zmq8@IYEpI=Vq74)sycERzGHqFFM8A&LG!a);PMsG1x zQ^sQ&YZ}ABtvq0&(E|jhqDhIQMeu}<#m=FrS6=>qhnq;$vou4Y$JuN3lF^*m@_W7S z=b1^PiTB-OjYlJCqF}Oc&+%YOcA4zwnXyakGVNG!H`4)ao@cD8wzF;ARD+3?Lu&dR zE%#Z9Z@D({DY}{NwlmMnb(&zr9hAHMp9Y|`6n}G}e?{owQtJ|_NP1=BCWfgI7Cx7t zm7o_#%UdV6Or9;q&Xz0VDl1hlE}x@uqm|OD)z5HB$i||U46h0JQ*IGJCm~l9}!YTXR;uXVV>ZX^pXe@^|v2EMa*4&J& z2`O7Z5xL?F1$QEi-+)hgI$-Deaos%0F}NAC&s4~hKKcr*O_ibzs2WKnog_qUSAk3+ z(1nF2@=Z_b6u{Ye89#PEX3Epud)yBPyTUW`b^d*1mUD5xjNydj+h(#_TLS{e4%2Tk z*gAiaUxz0!^gnm3>wokzkNttXHWn@otNSC>nzS#H`S$sm^!DkrMDb{P?i>`5*CgJ6 z&RZU9m=BIjTW2hqwGBFj^Wn6D744^&8#(KT?#i=oN@`BaoOeA3B(-w6a~V$^$#0J& z45M^2U()Ply~p}fev4Qp;u+4RNv$XtrC_JMx-3>LR-?tXlaYg574pWPF-va&~aKE3!;edt0| zs0AN5?^o}J2`Mb_jG(xr=Or*>6K5$cnmnUSo1B317nHO-K-lj7@^k_9!b>&MD=zrJ|OK z)+`p4Y5r(UdnHSzO|wZdX|s5>GK(@~lJXJ>Md|J5Bu$hoRIGqr36zf*u@Sf8JULnB zfX@LpT@1(rVTb|exk{8xMNh4S->&y@|7+^dP5rhr_wUVh9@q_G?9ab7X*_An;@N-5Gi6{ z&Gk8Vw4zlDSe6gxOaRX6?>gY3e<(@t)M-_y%`A_0q7FfqRVhzP2q8@}eJ{RCy)M#b z-DcWk-DaLuI>$TBG}S!Hx{lPy+D4kQa&(;(by}b#LP)$W>K*z8<T417maLxkC9uhMO76on)atm_K)uhg?%{I;) zs}iLsOG`WUwBuFwzhnrW#v}32x}B zcmh%wjFMfZN%mf+Jl9^s>`mco{0Hr4km3M!wgM!T3hl{~d9kd2@{DGf!hj8oC1$~Q>1oEIWNs$Y@BZK^PU12b znkzOcoKGn1iI}Lq&Tm)UvHh-6GjDylzF(X5vAo+}hu4~Iyj{=J8~pTtE)s{?mnA|| z-}e!nKHL36B#~Wycni>;mn;!oLa-WG_7S@pVjdElP95xC1t^t};&u}_rdU0}wqUjv zJR68XT9nH*a%L9E9Fsg-Ze>1m^7J9r$l=tCH;CYKaXxkiB_(c8B-^@!QtKvO7VZLu z#dShrRZTUbl1z=r&ym@2*s?|8fU4*IzTBS^=mlxja#d8P)oQeb)iT$zs_jMvR}4B; zL{V9)xOPCIDUWjNi&dJ?n(?qYfhL4)*bFd!s?@eBr+~~0v9-7_U z>UVwU>Hg5I4BG?sa!$=o`nzHNJGc3xn>?=Ooft_cAWYL%lz?VlRqMvvw&_Z=m}MBF zSjfBY(hxcp7|-2c+?h?8;&R}q?~ttaD(60(>+ondFA1S43nzxH>8$0fHe_Aa1+F^t z2x2W~$&d5Vw0NY4s_nepZNicP`(IXPB?w22P%keE-pYx#;7U$z4&neY&L7Iz6jbvV zHx;r!x%zz*HfAo-sh9iDbG4>x^oeiV+jc1i>F?3*Pab!;d>-rR%}mMBB9;^kfdpd= zOn4if81Q%yKv5Jp6-tyi$?)gSBm>F7kmFAa6O^7|_+4KA+@IT^e$P;~LTw319-4-J z{t4FfwBc1f_k)O{zmWJ4$|*XHe;z@GEf5w=Fm81&B@@b-?ve6| zaKkn8g5g7&)jIA(R5?tGtc$wmnbh?LRw^%+r)XWB$~&i;6@9Z$X`i#*nxSRFc4;=~ zKP#>cX5|oY%&;Q{45UZwX~N=O6F(ZnB;?VU7Hz@z`xOsRT^QyGLwyNANMlH#j!xTj zu90}4OAnJ8+NK-V7XTW!`+}^qS5Q4Z5Z2%Cj}!MQuw_3NB}CHhYhnZ8P(o%(ieV7rp~6LpuhLWN11QQasGpx=tDjxQSkqe9wrl6L`<(qSJO^p}%e>~K zmPp}I%1WgV=abVBr~+t|gew9!4&>IPtQ37#4#AiDYhOAzWtQy_%q7x4#!+~g*U54p z3kY|}3ZD3!SZoGG>aQKTfvyW%M#Lw;4S=B_>)7#Wh@&N8H03>y;VtAK0@QtV zWpD$>@IQQBgV}%f4Sm)>Zuhz!?>Eckc-km@Z+9I_TgUAE?uSaL{od}-FDv=|I^74B z=J*>qnQ%QE@a_t*C@6t2@UGBI(~p2O9RtQY^FbW1_G$KI`mLlr98orEwrspcC@fUC z$SK?9q%$wF61dhnDZtWhmeH!vI<>5gC!y74FR+`WbSky2H%a&kHtBi*Ji@!kdy74` zPF+i$18H^)99%3h#Fe;-EF#S_);9*tlaP%}7TTb;(&`?JC3k@S7dqBWEKf||8f0zZ zt2ETesz*)1Y7wkC8phq6c0g<{HG)f={?BL~``Wg%$6TkY_se#-ofWGm$m3gaVC#we&{6;s~Udl|aosi=Q-)D#O*z z=L-Ls4c_J?ISK`7{PdER@gZ+Zt3D+gzA^5|x~dp$P(GY)ob8@(+~Qd0@i+^Qdn z)MPVy%sEQC82KZ<;MAEo_7{wv3^e+;Vfl9{CR-=jFP8rr2yKYSIJx^Iit?oD8`t6F zq|@l6^Gz`;@hve8edcSX+Dx?TTh%qIYE&uV(!i~SC$Sw%4P!lPZEYvThR`3?rqnL4 z+aOxHT<4_4XT)vtt@xY1m*(kxEu}pcX$?FB8VweRW=)&5K+tR9^klq}HSy;yZMkyM zr;&T~$er-gp*%?tCLVDg5#{kIxhXnZ}s2vKGQjw`jY zOc*CR9W+)?FU`;XWqyR@odFe-&w=KWn)Xyabe7I0Y>_^<2MQg#RzXPHanE|_=od@>mIx$^HRTaNbMRR+nVcRTh z%cf2FNU$~nBA4}U|EZjO*3lVt-K0PZfnn4@qk1ya^L8!|n7VItKkQl!MtbLo8&Q8* zL%QAMSjnFfFyBE?Gv@m-eiP#xN@LVwR%K>%_7h_<&OM=XT)ePQ%@05}=H`sX_ zj71%>W+N-;5Uix8peq1X0`pLY#5{{>7ssUH00i7doAeC*bgP^hEN8PpKP2TahArW` z5YeK*M!Du&$BA5NBLcLQCx?|~hko5D*ldDGlT>b+VZ2fzxmIdqP~mRT_U?lDLs>Cw zuRtAPp$u?E6RQS$UpY=)x*%JOXu4e@jzyM&ve^)LL)ad8vdCsIH9s>`W7wdhKzo8? zu6$RLTmpru&`*X{Q!EZvUl zS==YqT-4hI!0KmSU@#eWp1fw_ExfkdG0o|{aAnj-K2tSAgWGPmF!*Z4LbRztb{*nD2>fy1 zu7S)rV$Qf+hPTpH81Wl8v=JG0w?Y7m-!bn z#R#;|25omBZUuRc-I75v^<3&LbeEPc|0=)Dy0JnR+(uZ&Wk;NIAP_ z3rA>(janWEj$=677V;{?E#zGU@hhMNiA9Gos0Gg+DT4i}W9gZPFUaSNXq70zzMxf+ z7lQ-1Cνm9Ohu-)9}dT%q87UqV-ckiNpvLr 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Ÿ@#xSiSeAviQV{a-ws- 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�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νm9Ohu-)9}dT%q87UqV-ckiNpvLr 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Ÿ@#xSiSeAviQV{a-ws- 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�%Z?@7f7cpY_Ugca+^nZ3!BkkpE%BVFihBN>5F%i!o+bdmSwci%FE+AN=M?{ zEphRED9iAa=*78#Ql_-UvW!@^QP8w>2R}C$%3jhIiZX)jiZZYyK+$fY)nys2FU#mi zkT1&Z=|)J}Vp)do%Q8aQ=CRX~L)zJb2iBQhmH`{qE8xCZ=Zbn*7mGe)TL8*)TSszz zRyW&rG#*HsFVF3RtcSzmC`AmM#j+_J534Y2Y0Fr|0M#gRgo}LOW2}8|yEgP)yXeClYq#iG^oP+0 [ [ []]]] +:: Build [ [ []]] :: set TOOLS=../../Tools @@ -28,11 +28,21 @@ PowerShell -ExecutionPolicy Unrestricted .\Build.ps1 %* || exit /b :: :: Below, we process the command file created by the PowerShell script. :: This sets the environment variables: Platform, Config, ROMName, -:: ROMSize, & CPUType. +:: & CPUType. :: call build_env.cmd +:: +:: Create a small app that is used to export key build variables of the build. +:: Then run the app to output a file with the variables. Finally, read the +:: variables into variables usable in this batch file. +:: + +tasm -t80 -g3 -dCMD hbios_env.asm hbios_env.com hbios_env.lst || exit /b +zxcc hbios_env >hbios_env.cmd +call hbios_env.cmd + :: :: Start of the actual build process for a given ROM. :: @@ -183,34 +193,34 @@ goto :eof :dist -call Build SBC std 512 || exit /b -call Build SBC simh 512 || exit /b -call Build MBC std 512 || exit /b -call Build ZETA std 512 || exit /b -call Build ZETA2 std 512 || exit /b -call Build N8 std 512 || exit /b -call Build MK4 std 512 || exit /b -call Build RCZ80 std 512 || exit /b -call Build RCZ80 skz 512 || exit /b -call Build RCZ80 kio 512 || exit /b -call Build RCZ80 mt 512 || exit /b -call Build RCZ80 duart 512 || exit /b -call Build RCZ80 zrc 512 || exit /b -call Build RCZ80 zrc_ram 0 || exit /b -call Build RCZ180 ext 512 || exit /b -call Build RCZ180 nat 512 || exit /b -call Build RCZ280 ext 512 || exit /b -call Build RCZ280 nat 512 || exit /b -call Build RCZ280 nat_zz 512 || exit /b -call Build RCZ280 nat_zzr 256 || exit /b -call Build SCZ180 126 512 || exit /b -call Build SCZ180 130 512 || exit /b -call Build SCZ180 131 512 || exit /b -call Build SCZ180 140 512 || exit /b -call Build EZZ80 std 512 || exit /b -call Build EZZ80 tz80 512 || exit /b -call Build DYNO std 512 || exit /b -call Build UNA std 512 || exit /b -call Build RPH std 512 || exit /b +call Build SBC std || exit /b +call Build SBC simh || exit /b +call Build MBC std || exit /b +call Build ZETA std || exit /b +call Build ZETA2 std || exit /b +call Build N8 std || exit /b +call Build MK4 std || exit /b +call Build RCZ80 std || exit /b +call Build RCZ80 skz || exit /b +call Build RCZ80 kio || exit /b +call Build RCZ80 mt || exit /b +call Build RCZ80 duart || exit /b +call Build RCZ80 zrc || exit /b +call Build RCZ80 zrc_ram || exit /b +call Build RCZ180 ext || exit /b +call Build RCZ180 nat || exit /b +call Build RCZ280 ext || exit /b +call Build RCZ280 nat || exit /b +call Build RCZ280 nat_zz || exit /b +call Build RCZ280 nat_zzr || exit /b +call Build SCZ180 126 || exit /b +call Build SCZ180 130 || exit /b +call Build SCZ180 131 || exit /b +call Build SCZ180 140 || exit /b +call Build EZZ80 std || exit /b +call Build EZZ80 tz80 || exit /b +call Build DYNO std || exit /b +call Build UNA std || exit /b +call Build RPH std || exit /b goto :eof diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index 21689463..0ff96229 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -1,4 +1,4 @@ -param([string]$Platform = "", [string]$Config = "", [int]$RomSize = 512, [string]$ROMName = "") +param([string]$Platform = "", [string]$Config = "", [string]$ROMName = "") # If a PowerShell exception occurs, just stop the script immediately. $ErrorAction = 'Stop' @@ -67,19 +67,6 @@ while ($true) $Config = (Read-Host -prompt "Configuration").Trim() } -# -# Establish the ROM size (in KB). It may have been passed in on the command line. Validate -# $RomSize and loop requesting a new value as long as it is not valid. The valid ROM sizes -# are just hard-coded for now. The ROM size does nothing more than determine the size of the -# ROM disk portion of the ROM image. -# - -while ($true) -{ - if (($RomSize -eq 0) -or ($RomSize -eq 128) -or ($RomSize -eq 256) -or ($RomSize -eq 512) -or ($RomSize -eq 1024)) {break} - $RomSize = (Read-Host -prompt "ROM Size [0|128|256|512|1024]").Trim() -} - # # TASM should be invoked with the proper CPU type. Below, the CPU type is inferred # from the platform. @@ -117,8 +104,6 @@ $TimeStamp = '"' + (Get-Date -Format 'yyyy-MM-dd') + '"' ; #DEFINE TIMESTAMP ${TimeStamp} ; -ROMSIZE .EQU ${ROMSize} -; #INCLUDE "${ConfigFile}" ; "@ | Out-File "build.inc" -Encoding ASCII @@ -134,6 +119,5 @@ ROMSIZE .EQU ${ROMSize} set Platform=${Platform} set Config=${Config} set ROMName=${ROMName} -set ROMSize=${ROMSize} set CPUType=${CPUType} "@ | Out-File "build_env.cmd" -Encoding ASCII diff --git a/Source/HBIOS/Build.sh b/Source/HBIOS/Build.sh index ad8cd3d0..37c54583 100755 --- a/Source/HBIOS/Build.sh +++ b/Source/HBIOS/Build.sh @@ -9,35 +9,35 @@ export ROMSIZE if [ "${ROM_PLATFORM}" == "dist" ] ; then echo "!!!DISTRIBUTION BUILD!!!" - ROM_PLATFORM="DYNO"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="EZZ80"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="EZZ80"; ROM_CONFIG="tz80"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="MK4"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="N8"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ180"; ROM_CONFIG="ext"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ180"; ROM_CONFIG="nat"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ280"; ROM_CONFIG="ext"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat_zz"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat_zzr"; ROMSIZE="256"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="kio"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="mt"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="duart"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="skz"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc_ram"; ROMSIZE="0"; bash Build.sh - ROM_PLATFORM="RPH"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="SBC"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="SBC"; ROM_CONFIG="simh"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="MBC"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="SCZ180"; ROM_CONFIG="126"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="SCZ180"; ROM_CONFIG="130"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="SCZ180"; ROM_CONFIG="131"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="SCZ180"; ROM_CONFIG="140"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="UNA"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="ZETA"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh - ROM_PLATFORM="ZETA2"; ROM_CONFIG="std"; ROMSIZE="512"; bash Build.sh + ROM_PLATFORM="DYNO"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="EZZ80"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="EZZ80"; ROM_CONFIG="tz80"; bash Build.sh + ROM_PLATFORM="MK4"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="N8"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="RCZ180"; ROM_CONFIG="ext"; bash Build.sh + ROM_PLATFORM="RCZ180"; ROM_CONFIG="nat"; bash Build.sh + ROM_PLATFORM="RCZ280"; ROM_CONFIG="ext"; bash Build.sh + ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat"; bash Build.sh + ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat_zz"; bash Build.sh + ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat_zzr"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="kio"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="mt"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="duart"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="skz"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc_ram"; bash Build.sh + ROM_PLATFORM="RPH"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="SBC"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="SBC"; ROM_CONFIG="simh"; bash Build.sh + ROM_PLATFORM="MBC"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="SCZ180"; ROM_CONFIG="126"; bash Build.sh + ROM_PLATFORM="SCZ180"; ROM_CONFIG="130"; bash Build.sh + ROM_PLATFORM="SCZ180"; ROM_CONFIG="131"; bash Build.sh + ROM_PLATFORM="SCZ180"; ROM_CONFIG="140"; bash Build.sh + ROM_PLATFORM="UNA"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="ZETA"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="ZETA2"; ROM_CONFIG="std"; bash Build.sh exit fi @@ -59,15 +59,6 @@ done CONFIGFILE=Config/${ROM_PLATFORM}_${ROM_CONFIG}.asm -if [ -z "${ROMSIZE}" ] ; then - ROMSIZE="512" -fi - -while [ ! '(' "${ROMSIZE}" = 1024 -o "${ROMSIZE}" = 512 -o "${ROMSIZE}" = 256 -o "${ROMSIZE}" = 128 -o "${ROMSIZE}" = 0 ')' ] ; do - echo -n "Romsize :" - read ROMSIZE -done - if [ -z "${ROMNAME}" ] ; then ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG} fi @@ -93,12 +84,15 @@ cat <<- EOF > build.inc ; #DEFINE TIMESTAMP "${TIMESTAMP}" ; -ROMSIZE .EQU ${ROMSIZE} -; #INCLUDE "${CONFIGFILE}" ; EOF +make hbios_env.sh +source hbios_env.sh + +cat hbios_env.sh + export OBJECTS OBJECTS="${ROMNAME}.rom" if [ "${ROM_PLATFORM}" != "UNA" ] ; then diff --git a/Source/HBIOS/Clean.cmd b/Source/HBIOS/Clean.cmd index d35f7fcb..432d4166 100644 --- a/Source/HBIOS/Clean.cmd +++ b/Source/HBIOS/Clean.cmd @@ -14,3 +14,4 @@ if exist *.sys del *.sys if exist build.inc del build.inc if exist font*.asm del font*.asm if exist build_env.cmd del build_env.cmd +if exist hbios_env.cmd del hbios_env.cmd diff --git a/Source/HBIOS/Config/RCZ280_nat_zzr.asm b/Source/HBIOS/Config/RCZ280_nat_zzr.asm index 4439f45d..4832805b 100644 --- a/Source/HBIOS/Config/RCZ280_nat_zzr.asm +++ b/Source/HBIOS/Config/RCZ280_nat_zzr.asm @@ -31,6 +31,7 @@ CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ ; RAMSIZE .SET 256 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 256 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) ROMSIZE_CHK .SET 256 ; ROMSIZE VALUE VEREIFICATION (0=DISABLED) ; RAMLOC .SET 18 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE diff --git a/Source/HBIOS/Config/RCZ80_zrc_ram.asm b/Source/HBIOS/Config/RCZ80_zrc_ram.asm index cd68248d..99fea429 100644 --- a/Source/HBIOS/Config/RCZ80_zrc_ram.asm +++ b/Source/HBIOS/Config/RCZ80_zrc_ram.asm @@ -31,6 +31,7 @@ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ ; RAMSIZE .SET 2048 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] ; MDROM .SET FALSE ; MD: ENABLE ROM DISK diff --git a/Source/HBIOS/Makefile b/Source/HBIOS/Makefile index eaad9983..abf6854c 100644 --- a/Source/HBIOS/Makefile +++ b/Source/HBIOS/Makefile @@ -6,7 +6,7 @@ MOREDIFF = game.bin hbios_rom.bin nascom.bin usrrom.bin \ SUBDIRS = DEST = ../../Binary TOOLS =../../Tools -OTHERS = *.img *.rom *.com *.upd *.bin *.z80 cpm.sys zsys.sys Build.inc font*.asm *.dat +OTHERS = *.img *.rom *.com *.upd *.bin *.z80 cpm.sys zsys.sys Build.inc font*.asm *.dat hbios_env.sh include $(TOOLS)/Makefile.inc FONTS := font8x11c.asm font8x11u.asm font8x16c.asm font8x16u.asm font8x8c.asm font8x8u.asm fontcgac.asm fontcgau.asm @@ -39,11 +39,11 @@ endif ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG} -#$(info DEPS=$(DEPS)) -#$(info ROM_PLATFORM=$(ROM_PLATFORM)) -#$(info ROM_CONFIG=$(ROM_CONFIG)) -#$(info ROMSIZE=$(ROMSIZE)) -#$(info ROMNAME=$(ROMNAME)) +$(info DEPS=$(DEPS)) +$(info ROM_PLATFORM=$(ROM_PLATFORM)) +$(info ROM_CONFIG=$(ROM_CONFIG)) +$(info ROMSIZE=$(ROMSIZE)) +$(info ROMNAME=$(ROMNAME)) all:: if [ -z "$(OBJECTS)" ] ; then \ @@ -99,6 +99,12 @@ hbios_app.bin: hbios.asm build.inc $(DEPS) hbios_img.bin: hbios.asm build.inc $(DEPS) $(TASM) -dIMGBOOT hbios.asm hbios_img.bin hbios_img.lst +hbios_env.com: hbios_env.asm build.inc + $(TASM) -dBASH hbios_env.asm hbios_env.com hbios_env.lst + +hbios_env.sh: hbios_env.com + $(ZXCC) hbios_env.com >hbios_env.sh + romldr.bin: build.inc dbgmon.bin: build.inc nascom.bin: build.inc diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index a5400782..50785e2e 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -33,6 +33,7 @@ INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) DEFSERCFG .EQU SER_38400_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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] RAMLOC .EQU 19 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE diff --git a/Source/HBIOS/cfg_ezz80.asm b/Source/HBIOS/cfg_ezz80.asm index ebc35644..ffdb7586 100644 --- a/Source/HBIOS/cfg_ezz80.asm +++ b/Source/HBIOS/cfg_ezz80.asm @@ -33,6 +33,7 @@ INTMODE .EQU 2 ; 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 VEREIFICATION (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) diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 22e0f27b..526d829e 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -30,6 +30,7 @@ INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) DEFSERCFG .EQU SER_38400_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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_NONE ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] RAMLOC .EQU 19 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index 048a4b9b..5cfbcb4c 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -33,6 +33,7 @@ INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) DEFSERCFG .EQU SER_38400_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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_MBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 466e84ff..c5108411 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -33,6 +33,7 @@ INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) DEFSERCFG .EQU SER_38400_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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] RAMLOC .EQU 19 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index f303b55f..c5d8ba50 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -33,6 +33,7 @@ INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) DEFSERCFG .EQU SER_38400_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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_N8 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] RAMBIAS .EQU 0 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 66536de4..373f23ec 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -33,6 +33,7 @@ INTMODE .EQU 2 ; 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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] RAMLOC .EQU 19 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 58fe389d..95d86e91 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -33,6 +33,7 @@ INTMODE .EQU 0 ; 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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] RAMLOC .EQU 19 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index ee0cf84a..805cecff 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -33,6 +33,7 @@ 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 VEREIFICATION (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) diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index ebba0a25..a17fbf99 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -33,6 +33,7 @@ INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) DEFSERCFG .EQU SER_38400_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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_RPH ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] RAMBIAS .EQU 0 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 6295cb71..26c945c0 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -33,6 +33,7 @@ INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) DEFSERCFG .EQU SER_38400_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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_SBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index a8947263..978ecc86 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -33,6 +33,7 @@ INTMODE .EQU 2 ; 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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] RAMLOC .EQU 19 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE diff --git a/Source/HBIOS/cfg_una.asm b/Source/HBIOS/cfg_una.asm index eae041fb..469e0f65 100644 --- a/Source/HBIOS/cfg_una.asm +++ b/Source/HBIOS/cfg_una.asm @@ -26,6 +26,7 @@ CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) ; RTCIO .EQU $70 ; RTC LATCH REGISTER ADR ; diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 3ac56328..8f080708 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -33,6 +33,7 @@ INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) DEFSERCFG .EQU SER_38400_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 VEREIFICATION (0=DISABLED) MEMMGR .EQU MM_SBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH] MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 8c40e759..ec794f13 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -33,6 +33,7 @@ INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) DEFSERCFG .EQU SER_38400_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 VEREIFICATION (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) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index e729f5c2..cfb04eec 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -219,6 +219,7 @@ RTCDEF .SET RTCDEF | %00001000 ; INITIAL SPEED LOW ; .FILL (000H - $),0FFH ; RST 0 JP HB_START + .DB 0 ; SIG PTR STARTS AT $0004 .DW ROM_SIG .FILL (008H - $),0FFH ; RST 8 JP HB_INVOKE ; INVOKE HBIOS FUNCTION diff --git a/Source/HBIOS/hbios_env.asm b/Source/HBIOS/hbios_env.asm new file mode 100644 index 00000000..16356176 --- /dev/null +++ b/Source/HBIOS/hbios_env.asm @@ -0,0 +1,61 @@ +; +;================================================================================================== +; HBIOS ENVIRONMENT EXPORT +;================================================================================================== +; +; Do we need a private stack??? +; Use a macro do dump each variable? +; +#include "std.asm" +; + .org $100 ; Normal CP/M start address +; + ; Dump ROMSIZE + call PRTSTRD +#ifdef CMD + .text "set ROMSize=$" +#endif +#ifdef BASH + .text "ROMSIZE=$" +#endif + ld hl,ROMSIZE + call PRTDEC + call EOL +; + ret ; Return +; +; Output end-of-line. Handles differences between +; Windows CMD file and Bash. +; +EOL: +#ifdef CMD + ld a,13 + call COUT +#endif + ld a,10 + call COUT + ret + +; +; Print a single character from register A. +; This routine is required by the utility routines included below. +; +COUT: + push af + push bc + push de + push hl + ld e,a + ld c,2 + call $0005 + pop hl + pop de + pop bc + pop af + ret +; +; Include the utility routines +; +#include "util.asm" +; + .end \ No newline at end of file diff --git a/Source/ReadMe.txt b/Source/ReadMe.txt index 701a3da2..a187e8c1 100644 --- a/Source/ReadMe.txt +++ b/Source/ReadMe.txt @@ -296,13 +296,10 @@ For example: In this case, you will not be prompted. This is useful if you wish to automate your build process. -There is a third parameter that you can specify to the BuildROM -command via a command line. If you want to build a 1024K (1MB) ROM, -you can add "1024" to the end of the line, like this: - - C:\RomWBW\Source> BuildROM MK4 cust 1024 - -You must ensure that your system actually supports a 1024K ROM. +In the past, the size of the ROM could be specified as the third +parameter of the command. This parameter is now deprecated and +the size of the ROM is specified in your configuration file +using the ROMSIZE variable. Special Build Commands ---------------------- diff --git a/Source/ver.inc b/Source/ver.inc index d28d93cf..5dfe1610 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.179" +#DEFINE BIOSVER "3.1.1-pre.180" diff --git a/Source/ver.lib b/Source/ver.lib index 17bcfe0b..78f63bde 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.179" + db "3.1.1-pre.180" endm