From 73b0a3d94173c4264f458c44af7f6a8925588d43 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 10 Dec 2022 16:58:37 -0800 Subject: [PATCH] User Defined SD Interface Integrated code from Lanea to allow for an easy way to define a custom SD Card interface. CSMODE_USR is not yet complete or tested! --- Doc/ChangeLog.txt | 1 + Doc/ROM Applications.pdf | Bin 194603 -> 194600 bytes Doc/RomWBW Applications.pdf | Bin 241657 -> 241652 bytes Doc/RomWBW Architecture.pdf | Bin 474178 -> 474458 bytes Doc/RomWBW Disk Catalog.pdf | Bin 134818 -> 134811 bytes Doc/RomWBW Getting Started.pdf | Bin 275727 -> 275725 bytes ReadMe.md | 308 ++++++++++++++++----------------- ReadMe.txt | 4 +- Source/HBIOS/cfg_dyno.asm | 2 +- Source/HBIOS/cfg_ezz80.asm | 2 +- Source/HBIOS/cfg_master.asm | 2 +- Source/HBIOS/cfg_mbc.asm | 2 +- Source/HBIOS/cfg_mk4.asm | 2 +- Source/HBIOS/cfg_rcz180.asm | 2 +- Source/HBIOS/cfg_rcz280.asm | 2 +- Source/HBIOS/cfg_rcz80.asm | 2 +- Source/HBIOS/cfg_rph.asm | 2 +- Source/HBIOS/cfg_sbc.asm | 2 +- Source/HBIOS/cfg_scz180.asm | 2 +- Source/HBIOS/cfg_zeta.asm | 2 +- Source/HBIOS/cfg_zeta2.asm | 2 +- Source/HBIOS/sd.asm | 58 ++++++- Source/HBIOS/std.asm | 1 + Source/ver.inc | 2 +- Source/ver.lib | 2 +- 25 files changed, 227 insertions(+), 175 deletions(-) diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index fc23271c..fc098d2c 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -64,6 +64,7 @@ Version 3.1.1 - WBW: Add support for "romless" booting - L?N: Fixes for ZCPR-D&J (buffer overflow, default drive/user) - J?P: Add support for DS1501 RTC +- LLS: Added a user defined mode for SD Card interfaces (not complete) Version 3.1 ----------- diff --git a/Doc/ROM Applications.pdf b/Doc/ROM Applications.pdf index 475d81ca728a7d3ed113aeb67eecb75fa91d3afa..3918e320839e19ba17c008f4b59000caf0962330 100644 GIT binary patch delta 11978 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 delta 11893 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 diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 92754f9c4c7973d28d3aa1f2c466fe196a3af16d..6a85a2efb052c485790a976c087d1d70ff735878 100644 GIT binary patch delta 16931 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 Lq_vm5X!HL8MbswR delta 16996 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 CIVU{; diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index d6637aa1b6516458c1ed0dedb04394251ffdb01f..a42e992024aa567e775920bf4e055485555385e8 100644 GIT binary patch delta 30609 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 X1A_hC+_?wYR delta 30134 zcmaidd05Tc_rHeIJWoQJG-`0>A(ci_8l_33q#~LlQ%8{|G}K$ zD3wx?#BZJZ`EsxK+w=VV(R1!Pd#}CrT5GT2wRhcD-=yw*m5R4vG)-dG(t{H>`}Sgm zBBs8H2Pz0=Jofu?J$QKzrWRum$aTbT#|xa$cGcb8?;EB}lDBs2Dd^pOTmK*~m#a&! z)a!kA`7v%us>7KKIci+;3cKES_IFKYPOYVRcel3E_?_!}@wX<^*UenI@>umnM)Q;2 zcVh?KKXF&&u}@f*Mq~H*Sxa!!`6dLbw{?Hpz8ET2dxm@u%e6yHKk=jW%;t2j7m>=Z z9o^2nPu#%mdxJao-J37(Tr_t-8R4wq7TNE)>z3$a=N;=}D|7AAHuoQx@83sP>36r- zRWGD0-4=~w#|eJzviod*adYrn|IVo!WvXhC&Z{n)d72&?)R1{V+?BeNkdbha&TUz6 zkZ0TXvTmv8Q?JSrcd{gA6mJ^MS8=6WOV?#$eG z$okveyYb!6d)JPCcvZZdU-FKgg%9@iL+wWWg=B1_}|dG%}4spi+o?TxqU&@=1k*RSE}L!ede2L{_q}R#mdFl|5v| z;TYB)Y-;L(t0*G%*s0@ub=UGsh++NOwgKps=VU%&c~tJi)Ct`+-W>MA^j4y7mE20 zRP5i_;CwtVz(07VH=44(ukp*AmVyjNcSX|WQ2&$BJLq3MhGcK@4fw{kao8j+4G3sj z?z~vdX%Q0P#j}2$O@SXSc&B#nW5GT@8H33mOHu}7OJ3J+9eK6dnLIx5wRbw8YkBa~ zxd_d5#T#GnUq1Hbj>WgG3!B=@55KnF-M4ax zyYZJu;~q6*dNy=jcJ6SSXG71I2Pzyg@r)C6rrJz@n7kq+95Yq;6T4%|$@^x_j-TB( zbv}64ImdOUzqm@Rrr-WPFVpWDShw#R{n1;u8r~K*L#^u1&2t`IkNNixiamN))fUvV zMZN5p>D?tu&!PH_H_z|WOZ^_9q(Og~JG%U5=#SaqiYp&2er}+rm+im%cG89ZEo3xY zs=DLGrUuKB#S=fhZ+mx*j?ypj(kbE(e`fFq9$Qa8)_1Wmp-O2Xq+6=)!!R%9c*BMI zy{TU&-}C?YRub{4*)8D4@YD}CGwmZiOSDx};nVJTM{;3K*um1<6I(e|G;>1MOgvs2 z+TW+4-uqmz`#`k@v6H^gTls2!f7IQcbH+`A4}2xkgYCVJcLt3<-Zi*lzo&8}NAL6% z!poTJlWF50+Mh&da5kIP`wW=dr#{}%`nmXJknV+@aoufOy*V)cWd6KiU3nQuKY6eWc;m7U|aem#%Mm^J3pOpMhDA`n~HD_0`i{~G{R>rru3BYH zS(f+Lgi3kev)uc9U|{L?4owfiSG#ov+vcJJs zhNwT|M?U$a*`xGwo|%rxa__A6tECS<2{y4633`N8sa|p%s=fF$sd0_z;>$*sc0UV; zq2|c~^-ufawwSWEcU>;!tHP1DyBM=p4HT79-Rle5)#pdKTGa*Ko;vUFv3&)tj81jW zCzZc+kvit?pC5Ac%ASOLb|d(~RbFml8??SmK1?~pH6h>KWLHAI*u6%1>&47>jtT{* zU&9ZUfie?Y%&>z(0nf^yKHa>;Mp4r}2@S8lHe0*)|H7`uz-2F{nDXvl% z*c`6n&7N{b1wQFZNG#@MmuF`mwBMEB!geZ8*&$o@h{WQy1ji%cUPi&{^WLWq-Po^M zs_Z2Z5>Ycj?I|0-l}2y zPI-RdF5ousrnjGINffo^#WRV9&^EyW+vQ z(Sw@y8p9N_$f~Q$$Xp;AKF+8VU5`#mHGlbRf9tJ#({$+IWFD7% zZRsi78Y?^h=VAufaG9U=IxC{Ml2h$2zA#fNv78+L;6lIHYgs8n?vegDd1*@b+l`>~ z^LuVyq&HkUb6qhjp?Bd>FJ(7@0HtuIQ$P-MF8`zT!u5 z$84?mGlBDq*I%ZmSv5btv3pxz!8W~j*T_%WP3P&i=+q49iP!aWjq>FUhZY`nc5eD2 z;F-4QvTohZ!GP^U^~$$X+QWN~T3%f9Q}N}GU8QpIQCn}!9BtvbyXoVUjvYg{dG>m) z_6^G}k3yCou2Mhy<%B>sXkCa-cKRYyFH}oeeT_>5A{BhjpKR_Ji@4!9 zTVnAjz1eDcxx?(CoY>|Ln~Sa4^t1hG>ZecNIf;2%N*dp#PbW&PR*%})$2Xxc9j?Wj z{nUHrUbq)uZkg;#(d+6_@19vn7zMWRMPQx=RhP=9v7`lMEAeJIN+w}`O2s!Bcv%#M zCajtCu9wtt7>?QJ8NF(wdFofE61&oSqD9TAW^#DP;j^ZDqDzbeOACzS%#KJH7I=#f zs{0#KW95RA%ihzw8?h3GPC|R0mhf+tFw%nXSZk47Dv56rvKzT#cCtBsVQq8vAgite zpQAiytejdKkYi3Ibh<6 z8)2JJ|90H1e4nD7>h2~P4$lSd!YtVoV>)}p8I{4+_4J;Ke%bd^D$ToAo1Y2b0wRy(xR;x)yhEsgZI;6((VUe< zr!M4kyI$OKMuIuVj(yzS?M4=SePeg2h0;dlQ*V`xmY-3qlpWjnoxb69|2XGPvhY?* z&%%KtuTOnxt5X5EwOfu=z5nJK{rbg&=ZTxt z_}gynEcw>s#(v@YzISeeyt@NldV7V{deQS8m5YlU{{auzpJy$j^P|qdKO++4Oa8cJ8EUJ>>_!#4w zMt4c;f6;w))%N8N^SR8oJp5X>y|<{hr@yO`+Oe448~G`&X*JE$dZ?DY%ZD@UQE4}4 z*iqBGt+*lUs@5~CmQHFpjRb!Qp%CJTb@;e6UMY_CP_k%@p>@kfvBejAKYR>h6&zuU zS;E=ysR*dbs3^_|7-uJ|I*CP>yE(v* zHQrVV54Y@x9|l-2OSv4C1~=C?_t>kaGhXxn^}z+6({eyCoXLk=H~zd1t9Zd}csLv_CpZdf+RqZm0H&+o1t zvm{MUtWXi@G0Hbq=@mI`?BBA<Zzm!cd5neW!G1cG7XJ6$~jOw&m+-k0XYKINkKy zGNoDxF@_l`_?V>()tn-Er$<>W>&{7vTXuvQ3}nAtXCN$YxobL^KW0g!b>&O1&AICt z{_JcT^vjWfqLQC>wHy{(JgKPPEJ~&FguBsqgYR`+SI+N`axj zio0pPAM1kvT}*S<`oO(t)-$GQH zUQ!+xud>1>T4u}TQ|ds}#*NwXUe%M9urx{7~1JAFGShy=0KHOKa-!t zo^e4QhDPAW6j(;}BqS_a5+s8YPXx+4m}q*&NC;FN_u$ zJ31%pCl`5yWF4*y_EBKx$+s6(G%{FyK4IoC`FVP@2tUnMTR(gC?LijSLt<9b?9p4e z=RC5FEIGt2<0V^~$VRxt?`sx9?)3j$y2>pmb1{DZc-^))oXQU$m}F-hyE;5P_Hppk zjXF<;zBWd*D)<0~gO!Dx)TFCcb=4QMiiJL97-RUMJ}ORpwAXdCEnvM%iOl2!x58B` zUo|hhoh<0@4-9#B#Mh@~M$U3At5)sbxc<^t zeX+8AhgO;e8cWAN*-5YQ{c2yLILnxupDZ{te~Es$Z$>vi>A}07L=BBs_PsBTsJK|{ z=AEK{G?W?XUHDP^w8paW!6N<+ zr>VQ&`U>Mt|12FiJo=@1pWs*8xq-TO7{-r@c2@el&s^yab>Gu>7G^xkG8%@)ca(gu zld2sd7|68b^Mz2k6?~9zQyH z*JHiZEhmktismT7s;c!drU&Z1)aRG7O6r#m{0Mm;U9(g+cvWK{r}torOx?Rj9?eJg zGeX97{OP6Mm3_f0_mV&I$4hOOjLhNW{q`&ebKJGN@%H4$A-4-fy1F#A>-O^+i$pQ$ z17*kG=T>Jo!_dfdS`czS%y0G4G0{Kl%&g?9FPfot(bF8{n<*P{s-@+ zz6>;fRhQne{oH{Mu@w^)pDks6#u>KyeL1mmUtb&>PVT&}u60*o#hjeao|z-Thv-J7 zCEbOQi>u#t%ycXj_D&uD64W9(wdUOp%?baX$2tlRWcCUkDbq>$ap>hy?w^v*PP1!x zom~%{k`L?kkacG6N~u&4UhTVE-NTlP?XJnI-^{t&Uu9#I zheUN_a&uO`pKIBMl`*AMvEyHw&ahvSOEAuMfC6e?(Wl1Yc=qJReKq$^Hw|}8dTYfl zxpmwbj#tQ~!%u2}hrbDaAN*MBAhTr4_S{kGS=5NSz%^OrwC!S~GHP!9<442sTF)KU zqgkNEQq&`nqj;xqvH($~0_|Y<$G0?>FWf^p% zM^BZ_vImE)id`zsY-`hzQ;GdPDYVDGg>Yv6@S{})rPLAe2t{SDNy0G)sfVntt=wti z5)Mn+s~nCiDvy9Z=TA3fTN$2>c$dnP2d$^! z<7~;MXKU4YOtZsQF?-kZviFCrf+Xq8kFTLIRfqn%NkNt?)=)%FU8l*Y(Uc$e6gt*; zNmKW;nZsPnZw*=7M)y=%C9&^Ja45g9SI?uB`-*VNT+K7vrf&fr`>eXWv-cXf0rA|H zRhLL#%<>$E#1mk7iA)+W?3qAXoIg@7;gqJuoLTg zXoP#j4ZW|!L9U4i70;JHp=TY`{c+>{rwZ;ue~0Zal+NOR_{m>Y{&|(!puMn8KD<)( ze~Dz_AV!Igl}u$!r(x6?jRWl5bm^BDE=(T&P%7@2Dx%zz+-(F5bby4^+Z4tw7AQgV7xMKAQJ zcYOS{h)k~jW?uDusd;K4vEuc-W9>(uvey!o$Ja0TEp@gw&$ZGmiC@gO)y^7+bzVu+ zupBsU^&-RayRB-YWWj^i<$EHYPS4-2)mmte){;D5a^tku_04Ox3Z3kiJ1WbU5-6Pf zHf-JD+=juMeX-ZLul)ES_~TJsZ18~3B>iEHhwfDG-1O5(kDKS;_CHWa_NdnDu6Xz3 z_Qg?A%JC|9mh5eFb0IDap`d=oeLIS%)QA?TawoY{A^A<1ws>5Hc9G=gW%Eaz#4e6Z zPCr=~ADpom9MJ4auWWDd=-<~_Odfx}+vETaTg9j3{BM^syT~IJj!JVDXWS z7lfg3<9xIK?MvH48&1btw8caFuwCoYUOZ56ZpL?|U7xLN+t7PkX5?|V_Q1`;TiyG~ z6Em(A4*jWvZ@VfljIz~j4|!y;`%Rnu{@Nuv|E(U<2A84@cLoLaT(x+^ssD1xQ9`jybXU7z`{T5U+KVzQe3c#hrzk~@)@*&QU~WnRzAy< zBe6&M`te+3rF(zRPn)}YJVA2&;Eh?2K=*0&#^49%X4QI{n_b#wT(_(}==7#9OvfZJ z{qrf$dxi5#ci#<{8KlhEZ`imc?&rfYis*ad$-v&Mrj?Gi?vT(LiPLf!eHPr)xHa_Eq0Ri4UoNyYB)%+8e|vtom@v6qpoj19 zr4_B@uhUJ@*bkIX8Xsf@&k^hD@YT5Z(t`u$?V4Awb}k?NKJ^y!b8&k4k3(~5KkL7( zSvvY?gA~u!*3$hq~oULbs(K5ev5K?tjpupHJTvxrklnc_4pmH)(R|SiaI5 zn_Ye>mTSM>u^k?;wc)&-(N5Qm{3+J=>AAjH*qZoxn<3(ssfb36Q?q>f9DRW*2CAPL z4;ia|YAHT{s!?ZA>e{)Z{Fjz42vOUE!^I-CS=M{0`tiQcquz6E)>556+Kw}eF+8*K zI`qw~2lA+50f`FiK8=ZD(bRJ@>{dJ(r*loY`ocDey%04%gEEaht zJTv!*4{^7Nf6LIPp)Fh)%T5AuH4o8XNZ=M@IDT5FUMzA8`?bi>D4veZ{#+ynBh4bR3e0g*ZN`G>4uM%F8u4#z>IgutM+J5!O{a4jRp& z@}F$x*cEuKHok1Vjc1(;+H!_Bw?Bp??~QD z-_=y+N5Q7eWrO##x-{4(#U$05L$5NYz2~DQx-}RIJ!-p%iLeEdzD32TeHQa zh-R;l@Z$+v!{Y0Sokf(i)jma*`^(%EYb2Y@G!!y#U>yrG^d6o_bTZZB zX);L>rBgdsc9D6*w)?TkiqlGL!o zwaW38yG&vXU$JaX5j8pLr_wC9S{B%}s90@`G2D1Ep+GqvCwr54icetOO|CFeb`5d; zvuujnEHY=wH6lreC2u#%vP(CarnGU1hg=I_&7z-HnX66|(jRMGA;)5BF3PRp0A$xA zi4!=QghK0-=m}tU&JECQ}W?%vp|GwzRM$o+ukL?kIIHFiQfPSm#wvwQUx% zJVSY@B0|PdHigM8Gdo~F%Syd#V^~LawVTN&_W$TOB~%?DyUj{=Tt7Nk`vgc!k3Xwt zQ=*i(bqEYOGW$tULe7s}ahs*=rd_!^%@sVE_D#MmBR98Co+fC+>!EV|jQLob(G1TS zTb;059EnE=3Ab33VSJoW?!XoWU;WK5L|fKl-9+W5!hRgqc^y)>*m3_ytf*LUXjM$o zMv14Nnz*L~b#46pkI!r{(#&Nk{HOe61f0V>W~bsc2@GLVj2Oc%4kM2t6E#VsBw-#= zMr0a>pP?Fu5#zvPahgODgCz|k%7~A{*fRLeWB3@?*J3!?aTGF+iOjC0oBw`bAwA0) zM5ztSc^h2b>eJ=8X}hj_;I7>0yD>&u$?hdTm)ty5dTh?;CKenTF69X6^qRf<;MV=z z=5%AHWBvgLLuYzMFD>V9YhFIOK{KEr)&$e@aQJ(`bpK56>*0eHy~P%aW96>FWAcxd zFD{ur3#f8=TYl@p6#aS?<8$*{kNSsu7d-0fYWkgL>l{tz-WK-HjaPIBCU|b0i!FO; zncn;3RNYePw;$gNla`MvH)M?XYZ)5e?|}h& ziNxTg?~4knSI%>rJo==>Tf*Hut7^5CzD(rWlA}zM$J9M}&l@&$_kebtv{g3gI?pdY zUG4u$C-w8p!sLvD*<_)30_L0o!U`gb7+1|8N8M~|3zuC@xba>%w zmzp}h^fG6B{Pn?O&)H|`V$&~-$0*BgNyxB_;ZCgEaFn*ZVanm!^|N_z96ogKjxPUb zeavg<)1!XBz>uMZwQeuQse6dv_pa zd_!B6fU8wtjm)_%T6@RXx&_$U-P<=rmgNlcbAFz`+xx-7X~3t_cVq7*o2wLS)~>VX zhX!_DUw8WQL3>7hR^W#pvnNK}=#kI5WJ&FLi*K_Uo=lSMIU5G%H7}H$esFS_ZQwyy zkan=qdg@ov_O!M6E#39H^Wy7yLCfvr z?G)!Tso%eQPQ>IChe}=>-KT@Kc@(*?CeGVY@Xf2j*9RNckK0aK9;M4X?Dn0aUy;7_ zBeZO=zy2b2RB}t~<>g=Oe}+h946nFm8HD2)C^4uw&ewM4n7bYA^iS1lJ%x%!@zj$T zpH2lc)^+)Bwme}G%!MoXSKcIvknuvvHDQ}vY)kp#&b((^&+XhXN(T6ZGj_>3vuW6h z8dLF7Cd^MFQfr@@`urEt5_MZrBR%l)I=J|Mc4&>d$Tnk1fMu>2OL6xtK5mz{K6`t? zEg|1d3|vcw-z0_CvUyg3%*$4)sg3$;2^f|+$)C>-{W)#N3nfxcE%co znsZB}U;5;RSoJL?khX8f&;V${;W{TU;VC$kxtL$|iE9H^&P-Yl+Ak z^2yDi2fWlv97+_`XVUfPjzw=Xm07tsTKF1i9W~psL$7h zSCYSk=c>=t874Q&2}(}Pr5>_%g|xcX%%Y>k5L zl%zUO@N?(AK6|awGO!*=9Nw(gSLi2+7G%<5zrTnFAV$N=&Mww&Q`QG=lHO5cTeX$u z7GB&J=0&RZsKBT2I}a5)u5hJgbnu-8=%y_JX7H-0CFyO)m?wJkH<>Dw5|yd|Gm`~C zL|ye1T~T>9MdA$LB-a`X%NtjxFh9vhlr^qmLN~M~fNnCF&<*dttguxgfY&%Pp__w} z@JY&VkH3n&ZED7@#Q0Oqa;-wCmv+hT$~%4jeNb{FyHEZF(#e=LWh3lKClu1!$AbhC z*$1qc$c;hi2z%$5`$u-{E!b60rx8dh-sxUWR)E5sz52?lv*Lb;)&ms=<~i7CK#UkklDt-?Cr zJ$LGAgP_Z^g|B7Y-iLL!zgT{@-?)=gIa~LeZgcGCq@Qe(9;XWaNuDfZM%W^ooCKLn zkj2W{@T{}h6X+WpuzOFSESZ@S^DtC~@p+603!Wjo4WrDU!)FORbExb(2S+Da9F{6e zBvCYRWIW^bc}T3a=P|;l0Ys`Mg+^u$P!K~*CeX;5M8=8>7)5d9H&mP^h0GW_4>{fQ z0!A41JrS>or~R|4G7Tj1b=$|ItUbPplR{)x7_6YDr<`n7jGi=%BnydIMyNBS(=i0DFg>=VuPgb< z499egj!3Qj0f}p+UIo!&Zv#3H9w%I_W8|k}NGxX=1L+uBx=+!y-m5$6&a9aj(==^s zDW?zIJX)Z3`N7ZNwU1v_TIMM@tR<#j@h#Z)nX|3(v1!)WMDazL_icsF>mLP4v~{jC z$X^I0#f$D4ys~OMwIzY0#7|bgWvhhAaoGd!T+8B;S1TDzf6Gv_d!b!0XZEdIH*fq_ zf6&BQO4ju0ao@IV`jh_N;|=|rPPbGNAI|t(s-ekb7h0xmvdhq1K4*lc7ZCfjDzs=?9ZAY%K z_P**G-{P3)>Y=@_hg@Ql5kTokI)3K}O*4QiC z?AF%!m;3C4n#y_|l>&q1-ho;fvL>TX zrQh&v2yM~iA;jln3+aLfrJ~ohZqu;1p7gl%LuKLGwL{*MiMAGb6SSdgO1x>ctNpeH z@93O+;j!~4|IM5)yK;DAlccd53koD+m9$RnOELQ4JRz~}>65i0=6FhSL541+NBi5D z*+|uGtA(xZZjCCb<3Uqcqpo*?UwpSV@3&W$pIEl3_GUgOX^QbEpMJAjXN?xi>5MOp z4~z0>${F#wlp9J4xJU($0%;FDd-{6sZ-i2XpytDG-fuEE+PKWqxN0QEzg$twGU> z+ytNN(RD`{k&2oHQ#-}uxH646R_bR>t}{5DyFT&ox84_OE45PW+pav({7i~9&3?Ai z&}v3@EsuRRi?O(G_8LZO!npNa_htU1tB(u|e5wu~&>;(-Iuqh~bD#1vy2xqH5~Cea zDetpupTAdm{M9$LuDH-xlfvQrA6l^*W0$u8dubL*c2Ej*V26*6F=v2e-vl zZV_MCKKFi2^Hh3UjjG3nS!Ip*tv#z#)zVzgge9}QeT(CemzJLVdHl<}$i?TJx`UQm z_kN?w*=%_Ct!(0IT->x){eGRt^sy;@eKR&EcTVc+$BDMbvM;~iowK0XdGSZ}kp~So z3XIO}tUY!}!Efy6o1ccZd97|HX1#rKV_3V1v2Cee^{(h79yPu&vR>bH{zz;3PAX5# z=A?V;?zoD{o?M%3udwXs3K7l&adNopId-*%4jFe|e^x#FJo~^|IsX9ZXRWbsJLnHu zNHJ?LPJ`ze)3Uc}G8kC}4H*oZZspS=w_2vjBZH*ZPTbFo)?sfPV}y?o$D7`If@Rhx zwbsjYU7I7bWw!ZTEh%Ol;t8uVKeSTpeoM?T`8lP|SH6p%bwm3$&vm~#r~g=fYhw5P zqmo*oRmdstqd@@`E7C%emJYuZ-&wV>X#zHhRvygh>+j+f3}H2ygq+#?#fIB}C@ z(cjZA;-=tSZQJWT62>>LrOr);pQIoAHr=~(swB6+>ac0WzRz!+UstHNKByBs=@?h{ z;GUws={<+!dm==yt?}-yi+l35yTrP0%axcOs~=GnFnc5Cc09BC(E1K@6X9ltoB9%c zT*~0##!a5Qo60VJ7cIRj{8C|3t*+mD)-qb{)d^G0;g#`1ZAMa&Z5u@W1CC8|vkCfh zhD)d_4d0044~q?1wmLrgtI%}d)6^la>#p*}D$hpl#2dz+<6Sy;NAW>~oM)4R=InaT zCjqWe`5bp6LM`RayuK69&|BQDIea6*SW}4p^vPqn$=jVA^mbQAtuNgeApB)0!Au>mR9KBwP*j*Cf~JX&VoxfBr-LYpT5Dq8@>{!-c^#|Z}M|Bc_8ZI zEcr}=7;ruF75{}pO2g6_?+h9QgsOAH>Cesl!(_z0ijT3b;E`;N2sQF^USL1V5k6$F zK`TDI%}KjMAPw|9@=)1pP2&;G*;U+^)UqJ!#*CX)4WS|tO0LDZ*1F@03X@5@Au*7YQuzj>+jX%bL4E94|ycAjous~ zx2iEPPxMCYReB9}L`RoGGMIPn~SG#!P z*$D$pzRkQXDHeJk8u!6R!An3jJz)i=6cMx6Wl3Qz&XLO}TED#$PdE6K=#AMX!EUeR z8gkLLw6#xg&~ul(bfaHhn-#C0^9S}bQkHV{f}@Zgc>?6vc*?pFD85 zOEZ)d0p@89PF`kx;+?6otSQ!c6St5!wK#|sBQ8{ZPDFNPJXq9-H_iOA0H3`U%hQu@ zv`kM(%KBZjF)*yB!-#wBo4txZVpsB?hCQ!je+0nIN;a_aiTh!@(yKX}Q!MpFm(}bv zH&SZ^b9R`1axPKIej!^u!|f$3)?FCw#V-q+x{hH^bmDa8^yuIaa`siazfM>c+)9hP zWzIuh3zMpL`Gm#E(IW)mi!4pR(o?_eKvaez+xMTJxf$JeA2^77YaRc0-{_c!Iljb#ujQgtY@Smr-jA6cG%K47sF_%8$vk0U^3$^7^4I6MId z7oBq)qAU~!W}ZV?96f?WBrx>nIYjADQ2uu^5q|TBLPXMVG^n8w)Z>57C145U zKWSJjj!Z(V0W=!v|M&^~M`|pN#CQ!dp*K##;SuX&u_QbNr63X!Pi5e~01MQPNtC~^ zpi*&2amiQ$krBpZf!Ya~fL1k`NJE)~OeR9P&18YvIGIL7D3@te8fqgHJPFH?`wA=& zI)>pS5(z0Zg@Q%1ppvl+eoXJe7cSARG={lE`pnvOuf|4`)G5e{KY51TsQDI6Q%=i?YA6 zfZuaN=mIcU0@7E2MuZc?@(sNaJeG#XA&iR0;|Vk*jYuGZ6xP6kj?e|3hD99`0uGB} zOCV#ZNXr3@MnUky;=rB=#Q+UY`@eDjIdn8CD0doU(ng5O98W}e4uK2}H)0%tOrz4E zNZ}Aeng`TKARtC#;UJTcR>wiqpfVB`(H3S}0*?>^q6CfEJOAOnI1+^j-Thx#kf=x} zVY0v?oC#tQmP};ezJqyCLX)wmV~eBGP;m{9gTsuF43GWG@-!R~xjeYhub9a5J0{{8 z);yfz8*oH~M}uh~T_9H?P^l;y4oAW>8&9L5JRe-{mmmK2 ze3*;}&A9%6Z6UP4 z*+XofK!SsSru}m4-`j%8WD=EO{S&<{EDd}Csa6`qM&$b7oHQ&Wi^&3UQkk)sjMxIu za0G z<5LniQTY&ugM)w+6Y4RfVt@mVhEI7791vcNgItF6I#4W`fG`)Nmpcy-3M` z2F@_avWrSB9`$QSkMu^^-sh>4u>d& zvJZ}F4aDXk+F+6PW=0^?8qj?H-x|N8B@DxnDU2|Vzt{&t70PEI-Xps)h_`T2#dr!V zv{9l#7(|Ii!eJ4jfrAlg3|UT2F=QqJiODpSZb@h-!BMDKs9re#whsyoj}nYRL$-u? z9F0OIFq)VwP{XOHEWsR(EX|;XB~#()2Nzfv>4HpSBBC%1M-@OoLbXOfgD{7%Iv!dg zgc@NSiHx!^$b=^`%0MQR;{pqmH-SjVq72yLNbp#N`!AY-;tF+C@KD5{M57XkWQH}c zKq3*q9f}C#?x?7y2oINI6!bV`Y{J4gD3B5Spn&^@cI^BeJPB9|BCs(hlZZ%F6R=cN zTm$&zS2X?)Kge|qeI8H~!usIgWMr)ec80`*l#_siRy={p0;xeLcBshs$85ZiDghb| zt|EbjFfyVL7;^laqALhwJpRvsj>Qv5RJh>8@xsC=-H~W$eL|;%*dx?IIOs9MfCb9L zU=Si|MZlF%OOXjU|l)bv*=z%h}EWQIeer2$mH!o4?`4=n}w5lRXu zN|C+=H9ZZ-aAmSU`WBQn1k~ohBTzH~4WuXo7N`scm+Y$d#VGyZAB(#AC8Y;37p_xRwEYMIVfk*{__kV8p zZ)AZiiR>a_5qQ{#IPMTvk$@}2S{xFyfVt4DG4ustk4U$N`WNLuBtT@44g@r0=?P0g zb%qp)fI~Lm5YHh%AdeOl4p0ui2ARx}HYSk)OhEF5HUPcWUu0*5NpOm4kjSX!7?K;R z)@RZn8$)c*C;$pWcCG6j%Viq@f}&6!bWx zVW&h>_`Rd80n-?Afo~XBuiBMrBd;zh(@LS zM#O*n0NmsJ3cUZGGb&V3fZ;3$_e5!sibF*p8WbN$IcZoT)Pt@}7RdNU!;+8)8r;{A zP}e&&=0zT(jL8Dcor(mbfCUv5foOnR;212Dpj?y`phy&3fW(oG&IEb?^f$Qnftxnu zA%TTZ-~iBmfdl-%G|sFqDU3|XzqH^qzzUJ)kp_@BYIz926vi~{N*gsCRECla!Wv>% zP@$0Fj%fu5fy@sOi+|l}{Sp}uf4CBdbOag=-~~p)3Q#TjD*%@eCl69Ns;Qy@@QT_S z+@B${8KeSaM-O!p5#_f)#1i1TdL_t&Pz-zp72uyT0Sz!LG!0orz&KPb!=xdr2m+S$ z8$I}amf)(D2F<`zkO_&(!g#o-L#_|i9@1EFGY^Hg+$!`z02a{PqFA7AcAx==RLt=I zI|~xB!-V0Gf01k{0JJfhm@E*+g%%x!1Of{P3kVj>TU5Bbmih||i0Vjq1E2&HyuqZw z<(Vt6K$#e#5Hf?naHwxlQa~yDCk+lIz{r2n0Hue}jG|$G-SPcvV(2U>5M@^XZCd~{ zAd(C41%E>Eh4{s=X0kwt22TLs(iS-!o-Cl*!ZjBo>#tG()Q=ht$ps|^vvpuhGg%-) zBcKH|(RefCVzX z!f@0>4<-#+c@pr9EEP^s#*hprJ2I=ncoGs802&!tOTzOJCN?f7`xj5c!`&&;?tlcM z;wB!@JSxKtp~qQ3wf>hD1mJ`@{Wm(%+pR0Ed8pBfJR`0P3_uSo;-4e&tx0 zi+Y3si$F$Wu*m<#R>I91sYUhj4WV*3c2uB z22qS-0f0r-;?Q10Y(gpqZU&G?4**kS_W^U^I_H0Le|H){#F0>w0m?=#0<92g-&C*@ zQWz-Vk@2623H-UnI(UWv7emN_P|%?=D6nJx^2?gPm=1tTqHmp!(Otp~XX9;=yDT(8r`95e1;3 zfIcP-(z%=>s0pD};6OxPZoq>NXseKN!izyDZGZ)`5QX7nWUt1gA&YFFQGUU0zt1Dk zkf=4>ol#I{8SdnM!7u;1ClTJjA;TaMu27M|0VGG;0un9CX3$q7LoJa8kA?ow1sxu% zKx9Uq0TLd1m_G)B8`I#92SNJ}`1o53fchaXzX&7}1yweaAb}C-NQNXT^7;cNQ<1k` zK%=2z8PJf840s+?%*ZtWulVJ;^#6O;3qFN<;02SRTtH36qY@r~nMf1}_yHb{m;nb@I5qd@(Il#_%`SOCQ$-HACDm3aZ4MIAJ#u79PO->Cv7!!;CYVR(Oz zqM_cRF*82ef>3v$HiEhyq{EKkq3FN9^M9^GMuA=MJ_?}JKZRk=MYYCIqyLV?zfLX% zVhegM+$@Ow$q*KS3o=HlI;R3VbW_lSs&gvRDabWoT@<1ZQ^6)Eb^tN|NrSmWB7z2U z;m-TdaX_Q}ubNZ%*PCE6WGVDO8i6sV!KugwZ%G)dH8~a42*^eOX2L^v8pR4EAK=*Vkk zUQ1NCx;kG~5Wa(U>RuPZ~796l5fWUxR|W{?Bnh`#)&)zwsO%!J;LF z4h3N^cv}TN^(RB1q54C(FN5n?#5f2~f1KKFaI`>bz!(q%nYbE43jj{QUl2i#gZID4 zMd1IRKxLL}ut`J|hA>7&{;nU;P{0yIMlAAL15c&vi7AoSkI>K-sN9P;i6Xz(Ns$q+IlY7wYt(KLt?Fqf(SUndTJlLd<` zuYm>#J8}^)0Gft+=LmEEtLlG>VW3g}TOIske>i)nyKbPtTVCYCBzOyfqCo?IqQRv+ zl14@~>;y*O#vr*0knE*|L>v-fM0IVTT4nT6K;|cG# z=}6oPE_(rl66iiRqzfgj?9F6bYKRFrdpqoZsLS4?OvK=eWF7y<~=SxMm5sEt6%6Gqw- z{^}B>1wE+$QRxe6Db%rtY>2E5n13*U#;DfjG}wjHH>7MdqT-E7Sbcp8&46ZPjH4PG u;f*OqRGJZ+u>Td zTiHQjSwUrKZQ8+B8d!AFL6B6Cs|H$9c9_`bvnf7+9SR=x~OsOEz>5xx@!5aOJ5#P)pfmif6kob ztlIq-&$|8au9xa{?e$gNT~Frp2dkDYyKn4==imGJm5;Z+J-nfJ(>)K2TfK6@w;z4{ z&-A(5vga(=K7H{gQ+^zO=Gou0Ue{;#u;m?lYU3@tMvu6>XLQ~2x80}1zTc2r{QT5M zx2>7DaP5vqrfwXzx^2~x)#Hb>W)~hE`eseb%AI>(o!fHin4f+z6OMM>yKBwwwSyIykeVbJo^u$A||<>{zgVeXk8GCk*O+QH)OvZO#rl^uqoN zGiS_e8M$K8ijFTnJ~XTOgx#H!C-;Bl{?>!t zbKcs#zUSv>{>z927moD!j#Vr8P|k0qn|7@09a3aVHl?r8&a0u^JK z678I!##n*46Jwl`k|a%dBSQsacvQXjCPxGci$6;9Ay8w4kD6sQ2urI}3U6uZq_Cxm z%#}JKC_}AA09jVwq^WKN_(GtR?#M90(A@R!Q!rzV^yWB3^d`&3dL+ku@r1S&L)exO4^P9)0hw5 zMH&-j73&D)AvfuUh#YMeEsUTv6nkrwOUD?Prj@4yM(9cco##<-hGCjER?!G*jA05vpan}Y4PY7> zV}yeQGIXer5*HYz=_puAjMODZN|ecBG|mL_79lklJ;*=)iiIS=rfH}#&>4VW@H1pLfrFG4 zo&k*&z?7mRrm$qe7ERm9!W`N$7tn2;FQ)P*_5}5 z)&hEfl@n-zLJL+mRDZe$oRgCFfHOc-#)r|yY;r1?f3O6FSOd^hw-Dl#XZnk2i|-pvM72bL`EIzUqaE8=20&H1+Jm8So>8!WOGKgR} z<8e39QUHzaL{Nn>LQ2Lv&mh`k@{!QtEe7$iw`H8ce#H9HdqKm5$M{DTd%+ed?Md}_d%i4tU!KE-(*ln%uaoYRd2K-ieoM*CLsg_f%kvchw$uVRpNf4^reRkn z@`Mk%2z|!|Ef`)O0ozd87(5Qdarli(gz;hEv+PGt-eNKbYy!0T0#1Q+bn|>ziHR{m z1e#UcNfqSbV*-srkXY^MW`^s8g)88Ypx)ssVk=?5+02Yq!IH@Xld+l=94T#PA-{}L z@3d!!PB4Nl#<(jLtxwP}ZK*u$A4Eq^1S{D@59QAhr9y%qZ1D)V|5@ssW*?FQmS7ec zG^wc>n4U@jOS(&bs77Njxu{wuBY#X%CxhXR2Ye2pd=XnSqrs?SwDJHBF*+<`y(=JG z#J3z;lCi>>kM>{-Vw9dHL*@_GVr3Mu0=4H0K9+2f_#A)*@q#`8ZsLQ){z2y;zW<@R z(!Sy=9PY!U4I=1X0ldM$rtButOAs*T=?(!}pdX$v$lw{3=Sp+1gh605wBSK=6wE;b zBr}1LE<;jz^gZSCh+T?S4}|rmnD}DBgT|&jXhFqfQ(wNA=fC)H+XK$slrE^kXC;?p z`c;j-2?sY0OWWw1M8uMJxfdcf;_@AX5^8eNG}MgzUzQtd8XBtSx3|t~zhhqZ=4yzC Nh1IpSjm=Hf{{nq$2G#%o delta 6316 zcmai2YlxL)5bkW@##)d{T4Z_hno{)MFIJnY?OIB0YHAr)YpI1|tQwi2Utwm1X&JU= zWub<7+oX#^7#f09mMMmbR+5!cVN&F!d(Sz0Zr{v8=hrej?>qB8GxN;M_tGopu6*U( zXGc^8+frvU{gd%ac1=4ZE~r2K$J2KV>v+qgGyC^HG{p>BUj4+R5%+y_U|rLJ*6s(_ z?%j6c!_}i!bg21= zb3bqVboj%Mc3u9|!AE?}Gef7>9hm&loK;&}Pt-m!_J$LC&v~>{t^at$b@BRF|82hb z-rm=IJb&Jk<8Ix5<0s3;?>pJF?}|$&{Qbb(mmgd(y1B!iF-JP=zGcC{r}hnh+)O@p zy6?!Z*6f&lW@)BFY`kpbndf2S7p)%j-cs@Xj^w+y&K%maX?=2Re&3BV z9?QP|?)@9SICj>Us(0?%+4ZA8M{fOR*^@W@c*)Ht*S_3z;P~Oiod;Y!`GHx77jGS~ zWx&Q^pRJg5;T402HXQ7>$@cBlxMtM1Yj>KJcXyoqOJ?b7VfE zy!q#Urf!Zq=8Rjkf6A_je|@5+g#$D4FjvdiHLkB$sJwSO{aueF<DNIo zdWMVz5LC}9ubIpQexJ}Wp^C~1LuJ+|CJO+E>IEsOVTq7X2bFRq8%Z&B0G6RBSiwW$ zlvE_1!W+biJHt`+J`g?Nj~u5S3LgS>M)+u0jDxT=fu-<{LXBdg$tpxpR%UbYuP7iK zE01$!C6|K zB9TEcSY;55TBHMD^ui!DGaMuhom56S`Vb{lz}YI6Lu$pck%A2?GM@sSHV5{b}JD z!)ZK)LI@e9Q6v`+oi;|ZvqpIezgCH7C8689(0Pu6Lt2xH(8lIrO`+c0n35g4g33U`KBu47gL-P0=DI-lJ9eFw7Fk?q!z@)@MqXQ!!BaP*H zF|jlz#_2lU2Jyc`OgNl7^;YAgUN#8MuKM4>ICqo_r)mEGT?6m0zedT zn7$ZEgBD2j6zGh~&;Xg9kgNkbbTL8aKM31Vlq|WB=$3}g8NqslQ%DBtppm{v^QHL@ zWY&(NijLH;T>JUXZO;n0pArZ8sMp~%uk04Xz!K~EzW z^88n>SuZ3b5Ql7~FZKcyLX3DNJ=4QP!(;O#pSouDxk-vHt%IIO-dw*!;&qv9}Sw0SU&nG_bF@L5|NO0Ih z3L%Ujcqzr4Vb2Q4W1UD}2)%%Xhn@|V=TSiIQj)}W$We%rhXgH(#S_aHttRZ!hE^$j z4n@5ZNn+h(b4U<@##jW5ChS6BNKpuquNc^$C|U^`HDBYQ#^%p})xPL;aeu{V;wV=I z?6fq2G5#=43mOSRNirBgr|=vG#cVBQbugCACg`&)9EA{gn4*sCA<^Yz`6g9{HAYY3 zDe*Cm!5@WXLs4w!8wI{HusJnKUlFFZC0Sy@rXM{Zv!z+0kZ|}2B`OZ*mtV*jf^gc= z#)@{X=|&(`qExyeKhws{sZs$F!lfd diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index 6fab424637f25dddd93219d48ff1aa6bfca603cf..25190fd9721ff2ce7060fed7c287e559d7ff39f4 100644 GIT binary patch delta 15854 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 diff --git a/ReadMe.md b/ReadMe.md index 2a7f6fc5..2463e551 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,23 +3,23 @@ ## Z80/Z180 System Software Version 3.1 Pre-release -05 Nov 2022 +10 Dec 2022 Wayne Warthen ### Download -- [RomWBW Distribution - Package](https://github.com/wwarthen/RomWBW/releases) +- [RomWBW Distribution + Package](https://github.com/wwarthen/RomWBW/releases) ### Related Pages -- [RomWBW Architecture - Document](https://www.retrobrewcomputers.org/lib/exe/fetch.php?media=software:firmwareos:romwbw:romwbw_architecture.pdf) -- [RomWBW - Applications](https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:romwbw:apps) -- [RomWBW - Errata](https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:romwbw:errata) +- [RomWBW Architecture + Document](https://www.retrobrewcomputers.org/lib/exe/fetch.php?media=software:firmwareos:romwbw:romwbw_architecture.pdf) +- [RomWBW + Applications](https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:romwbw:apps) +- [RomWBW + Errata](https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:romwbw:errata) # Overview @@ -27,28 +27,28 @@ RomWBW provides a complete software system for a wide variety of hobbyist Z80/Z180 CPU-based systems produced by these developer communities: -- [RetroBrew Computers](https://www.retrobrewcomputers.org) -- [RC2014](https://rc2014.co.uk) -- [retro-comp](https://groups.google.com/forum/#!forum/retro-comp) +- [RetroBrew Computers](https://www.retrobrewcomputers.org) +- [RC2014](https://rc2014.co.uk) +- [retro-comp](https://groups.google.com/forum/#!forum/retro-comp) General features include: -- Banked memory services for several banking designs -- Disk drivers for RAM, ROM, Floppy, IDE, CF, and SD -- Serial drivers including UART (16550-like), ASCI, ACIA, SIO -- Video drivers including TMS9918, SY6545, MOS8563, HD6445 -- Real time clock drivers including DS1302, BQ4845 -- Multiple OS support including CP/M 2.2, ZSDOS, CP/M 3, ZPM3 -- Built-in VT-100 terminal emulation support +- Banked memory services for several banking designs +- Disk drivers for RAM, ROM, Floppy, IDE, CF, and SD +- Serial drivers including UART (16550-like), ASCI, ACIA, SIO +- Video drivers including TMS9918, SY6545, MOS8563, HD6445 +- Real time clock drivers including DS1302, BQ4845 +- Multiple OS support including CP/M 2.2, ZSDOS, CP/M 3, ZPM3 +- Built-in VT-100 terminal emulation support RomWBW is distributed as both source code and pre-built ROM and disk images. Some of the provided software can be launched directly from the ROM firmware itself: -- System Monitor -- Operating Systems (CP/M 2.2, ZSDOS) -- ROM BASIC (Nascom BASIC and Tasty BASIC) -- ROM Forth +- System Monitor +- Operating Systems (CP/M 2.2, ZSDOS) +- ROM BASIC (Nascom BASIC and Tasty BASIC) +- ROM Forth A dynamic disk drive letter assignment mechanism allows mapping operating system drive letters to any available disk media. @@ -209,10 +209,10 @@ modular approach to implementing device drivers and presenting devices to the operating system. In general, all devices are classified as one of the following: -- Disk (Hard Disk, CF Card, SD Card, RAM/ROM Disk, etc.) -- Character (Serial Ports, Parallel Ports, etc.) -- Video (Video Display/Keyboard Interfaces) -- RTC/NVRAM (Real Time Clock, Non-volatile RAM) +- Disk (Hard Disk, CF Card, SD Card, RAM/ROM Disk, etc.) +- Character (Serial Ports, Parallel Ports, etc.) +- Video (Video Display/Keyboard Interfaces) +- RTC/NVRAM (Real Time Clock, Non-volatile RAM) HBIOS uses the concept of unit numbers to present a complex set of hardware devices to the operating system. As an example, a typical @@ -747,17 +747,17 @@ most stable and you are less likely to encounter problems. ### Notes -- You can change media, but it must be done while at the OS command - prompt and you **must** warm start CP/M by pressing ctrl-c. This is - a CP/M 2.2 constraint and is well documented in the DRI manuals. +- You can change media, but it must be done while at the OS command + prompt and you **must** warm start CP/M by pressing ctrl-c. This is a + CP/M 2.2 constraint and is well documented in the DRI manuals. -- The original versions of DDT, DDTZ, and ZSID used the RST 38 vector - which conflicts with interrupt mode 1 use of this vector. The DDT, - DDTZ, and ZSID applications in RomWBW have been modified to use RST - 30 to avoid this issue. +- The original versions of DDT, DDTZ, and ZSID used the RST 38 vector + which conflicts with interrupt mode 1 use of this vector. The DDT, + DDTZ, and ZSID applications in RomWBW have been modified to use RST 30 + to avoid this issue. -- Z-System applications will not run under CP/M 2.2. For example, the - `LDDS` date stamper will not run. +- Z-System applications will not run under CP/M 2.2. For example, the + `LDDS` date stamper will not run. ## ZSDOS 1.1 @@ -775,14 +775,13 @@ Manual.pdf”). ### Notes -- Although most CP/M 2.2 applications will run under Z-System, some - may not work as expected. The best example is PIP which is not aware - of the ZSDOS paths and will fail in some scenarios (use `COPY` - instead). +- Although most CP/M 2.2 applications will run under Z-System, some may + not work as expected. The best example is PIP which is not aware of + the ZSDOS paths and will fail in some scenarios (use `COPY` instead). -- Although ZSDOS can recognize a media change in some cases, it will - not always work. You should only change media at a command prompt - and be sure to warm start the OS with a ctrl-c. +- Although ZSDOS can recognize a media change in some cases, it will not + always work. You should only change media at a command prompt and be + sure to warm start the OS with a ctrl-c. ## NZCOM Automatic Z-System @@ -803,8 +802,8 @@ RomWBW Doc directory. ### Notes -- There is no `DIR` command, you must use `SDZ` instead. If you don’t - like this, look into the ALIAS facility. +- There is no `DIR` command, you must use `SDZ` instead. If you don’t + like this, look into the ALIAS facility. ## Digital Research CP/M 3 @@ -820,19 +819,18 @@ tracks. `CPMLDR.SYS` chain loads `CPM3.SYS`. ### Notes -- The `DATE` command cannot yet be used to **set** the RTC. The RTC is - used to read the current date/time for file stamping, etc. You can - use the `RTC` app to set the RTC clock. +- The `DATE` command cannot yet be used to **set** the RTC. The RTC is + used to read the current date/time for file stamping, etc. You can use + the `RTC` app to set the RTC clock. -- The `COPYSYS` command described in the DRI CP/M 3 documentation is - not provided with RomWBW. The RomWBW `SYSCOPY` command is used - instead. +- The `COPYSYS` command described in the DRI CP/M 3 documentation is not + provided with RomWBW. The RomWBW `SYSCOPY` command is used instead. -- Although CP/M 3 is generally able to run CP/M 2.2 programs, this is - not universally true. This is especially true of the utility - programs included with the operating system. For example, the - `SUBMIT` program of CP/M 3 is completely different from the `SUBMIT` - program of CP/M 2.2. +- Although CP/M 3 is generally able to run CP/M 2.2 programs, this is + not universally true. This is especially true of the utility programs + included with the operating system. For example, the `SUBMIT` program + of CP/M 3 is completely different from the `SUBMIT` program of CP/M + 2.2. ## Simeon Cran’s ZPM3 @@ -844,14 +842,14 @@ tracks of the disk. ### Notes -- `ZPMLDR` is equivalent to CPMLDR. Both are included. Previously, - ZPMLDR had issues that prevented it from properly booting RomWBW - ZPM3. However, those issues have been resolved. +- `ZPMLDR` is equivalent to CPMLDR. Both are included. Previously, + ZPMLDR had issues that prevented it from properly booting RomWBW ZPM3. + However, those issues have been resolved. -- The ZPM operating system is contained in the file called CPM3.SYS - which is confusing, but this is as intended by the ZPM3 - distribution. I believe it was done this way to make it easier for - users to transition from CP/M 3 to ZPM3. +- The ZPM operating system is contained in the file called CPM3.SYS + which is confusing, but this is as intended by the ZPM3 distribution. + I believe it was done this way to make it easier for users to + transition from CP/M 3 to ZPM3. ## FreeRTOS @@ -1036,10 +1034,10 @@ images. While John is likely to enhance UNA over time, there are currently a few things that UNA does not support: -- Floppy Drives -- Terminal Emulation -- Zeta 1, N8, RC2014, Easy Z80, and Dyno Systems -- Some older support boards +- Floppy Drives +- Terminal Emulation +- Zeta 1, N8, RC2014, Easy Z80, and Dyno Systems +- Some older support boards The UNA version embedded in RomWBW is the latest production release of UNA. RomWBW will be updated with John’s upcoming UNA release with @@ -1145,89 +1143,86 @@ If the disk is bootable, you need to update the system image on the disk using the procedure described below corresponsing to the operating system on your disk. -- **CP/M 2.2** +- **CP/M 2.2** - Boot to CP/M 2.2 from ROM, then use `SYSCOPY` to update the system - image on **all** CP/M 2.2 boot disks/slices. The CP/M 2.2 system - image is called CPM.SYS and is found on the ROM disk. For example: + Boot to CP/M 2.2 from ROM, then use `SYSCOPY` to update the system + image on **all** CP/M 2.2 boot disks/slices. The CP/M 2.2 system image + is called CPM.SYS and is found on the ROM disk. For example: - `B>SYSCOPY C:=CPM.SYS` + `B>SYSCOPY C:=CPM.SYS` -- **ZSDOS** +- **ZSDOS** - Boot to Z-System from ROM, then use `SYSCOPY` to update the system - image on **all** ZSDOS boot disks/slices. The ZSDOS system image is - called ZSYS.SYS and is found on the ROM disk. For example: + Boot to Z-System from ROM, then use `SYSCOPY` to update the system + image on **all** ZSDOS boot disks/slices. The ZSDOS system image is + called ZSYS.SYS and is found on the ROM disk. For example: - `B>SYSCOPY C:=ZSYS.SYS` + `B>SYSCOPY C:=ZSYS.SYS` -- **NZCOM** +- **NZCOM** - NZCOM runs on top of either CP/M 2.2 or ZSDOS. By default, the - RomWBW disk image for NZCOM uses ZSDOS. Follow the corresponding - procedure above to update the system image on the NZCOM boot - disks/slices. + NZCOM runs on top of either CP/M 2.2 or ZSDOS. By default, the RomWBW + disk image for NZCOM uses ZSDOS. Follow the corresponding procedure + above to update the system image on the NZCOM boot disks/slices. -- **CP/M 3** +- **CP/M 3** - CP/M 3 uses a multi-step boot process involving multiple files. The - CP/M 3 boot files are not included on the ROM disk due to space - constraints. You will need to transfer the files to your system from - the RomWBW distribution directory Binary\CPM3. + CP/M 3 uses a multi-step boot process involving multiple files. The + CP/M 3 boot files are not included on the ROM disk due to space + constraints. You will need to transfer the files to your system from + the RomWBW distribution directory Binary\CPM3. - After this is done, you will need to use `SYSCOPY` to place the CP/M - 3 loader image on the boot tracks of all CP/M 3 boot disks/slices. - The loader image is called `CPMLDR.SYS`. You must then copy (at a - minimum) `CPM3.SYS` and `CCP.COM` onto the disk/slice. Assuming you - copied the CP/M 3 boot files onto your RAM disk at A:, you would - use: + After this is done, you will need to use `SYSCOPY` to place the CP/M 3 + loader image on the boot tracks of all CP/M 3 boot disks/slices. The + loader image is called `CPMLDR.SYS`. You must then copy (at a minimum) + `CPM3.SYS` and `CCP.COM` onto the disk/slice. Assuming you copied the + CP/M 3 boot files onto your RAM disk at A:, you would use: - A>B:SYSCOPY C:=CPMLDR.SYS - A>B:COPY CPM3.SYS C: - A>B:COPY CCP.COM C: + A>B:SYSCOPY C:=CPMLDR.SYS + A>B:COPY CPM3.SYS C: + A>B:COPY CCP.COM C: -- **ZPM3** +- **ZPM3** - ZPM3 uses a multi-step boot process involving multiple files. The - ZPM3 boot files are not included on the ROM disk due to space - constraints. You will need to transfer the files to your system from - the RomWBW distribution directory Binary\ZPM3. + ZPM3 uses a multi-step boot process involving multiple files. The ZPM3 + boot files are not included on the ROM disk due to space constraints. + You will need to transfer the files to your system from the RomWBW + distribution directory Binary\ZPM3. - After this is done, you will need to use `SYSCOPY` to place the ZPM3 - loader image on the boot tracks of all ZPM3 boot disks/slices. The - loader image is called `ZPMLDR.SYS`. You must then copy (at a - minimum) `CPM3.SYS`, `ZCCP.COM`, `ZINSTAL.ZPM`, and `STARTZPM.COM` - onto the disk/slice. Assuming you copied the ZPM3 boot files onto - your RAM disk at A:, you would use: + After this is done, you will need to use `SYSCOPY` to place the ZPM3 + loader image on the boot tracks of all ZPM3 boot disks/slices. The + loader image is called `ZPMLDR.SYS`. You must then copy (at a minimum) + `CPM3.SYS`, `ZCCP.COM`, `ZINSTAL.ZPM`, and `STARTZPM.COM` onto the + disk/slice. Assuming you copied the ZPM3 boot files onto your RAM disk + at A:, you would use: - A>B:SYSCOPY C:=ZPMLDR.SYS - A>B:COPY CPM3.SYS C: - A>B:COPY ZCCP.COM C: - A>B:COPY ZINSTAL.ZPM C: - A>B:COPY STARTZPM.COM C: + A>B:SYSCOPY C:=ZPMLDR.SYS + A>B:COPY CPM3.SYS C: + A>B:COPY ZCCP.COM C: + A>B:COPY ZINSTAL.ZPM C: + A>B:COPY STARTZPM.COM C: - You may be wondering if the reference to `CPM3.SYS` is a typo. It is - not. The ZPM3 main system code file is called `CPM3.SYS` which is - the same name as CP/M 3 uses, but the file contents are not the - same. + You may be wondering if the reference to `CPM3.SYS` is a typo. It is + not. The ZPM3 main system code file is called `CPM3.SYS` which is the + same name as CP/M 3 uses, but the file contents are not the same. Finally, if you have copies of any of the RomWBW custom applications on your hard disk, you need to update them with the latest copies. The following applications are found on your ROM disk. Use COPY to copy them over any older versions of the app on your disk: -- ASSIGN.COM -- SYSCOPY.COM -- MODE.COM -- FDU.COM (was FDTST.COM) -- FORMAT.COM -- XM.COM -- FLASH.COM -- FDISK80.COM -- TALK.COM -- RTC.COM -- TIMER.COM -- INTTEST.COM +- ASSIGN.COM +- SYSCOPY.COM +- MODE.COM +- FDU.COM (was FDTST.COM) +- FORMAT.COM +- XM.COM +- FLASH.COM +- FDISK80.COM +- TALK.COM +- RTC.COM +- TIMER.COM +- INTTEST.COM For example: `B>COPY ASSIGN.COM C:` @@ -1236,8 +1231,8 @@ you are using any of these you will need to transfer them to your system and then update all copies. These applications are found in the Binary\Apps directory of the distribution and in all of the disk images. -- FAT.COM -- TUNE.COM +- FAT.COM +- TUNE.COM ## System Update @@ -1251,11 +1246,11 @@ and CP/M system. A System Update may be more favorable than a System Upgrade in cases such as: -- Overwriting of the ROM drive is not desired. -- Space is unavailable to hold a full ROMWBW ROM. -- To mimimize time taken to transfer and flash a full ROM. -- Configuration changes are only minor and do not impact disk - applications. +- Overwriting of the ROM drive is not desired. +- Space is unavailable to hold a full ROMWBW ROM. +- To mimimize time taken to transfer and flash a full ROM. +- Configuration changes are only minor and do not impact disk + applications. The ROMWBW build process generates a system upgrade file along with the normal ROM image and can be identified by the extension “.upd”. It will @@ -1306,22 +1301,22 @@ continue the maintenance of these applications and they have become unusable due to changes within RomWBW. As of RomWBW 2.6, these applications are no longer provided. -- David Giles contributed support for the CSIO support in the SD Card - driver. -- Ed Brindley contributed some of the code that supports the RC2014 - platform. -- Phil Summers contributed the Forth and BASIC adaptations in ROM, the - AY-3-8910 sound driver as well as a long list of general code - enhancements. -- Phillip Stevens contributed support for FreeRTOS. -- Curt Mayer contributed the original Linux / MacOS build process. -- UNA BIOS and FDISK80 are the products of John Coffman. -- FLASH4 is a product of Will Sowerbutts. -- CLRDIR is a product of Max Scane. -- Tasty Basic is a product of Dimitri Theulings. -- Dean Netherton contributed the sound driver interface and the - SN76489 sound driver. -- The RomWBW Disk Catalog document was produced by Mykl Orders. +- David Giles contributed support for the CSIO support in the SD Card + driver. +- Ed Brindley contributed some of the code that supports the RC2014 + platform. +- Phil Summers contributed the Forth and BASIC adaptations in ROM, the + AY-3-8910 sound driver as well as a long list of general code + enhancements. +- Phillip Stevens contributed support for FreeRTOS. +- Curt Mayer contributed the original Linux / MacOS build process. +- UNA BIOS and FDISK80 are the products of John Coffman. +- FLASH4 is a product of Will Sowerbutts. +- CLRDIR is a product of Max Scane. +- Tasty Basic is a product of Dimitri Theulings. +- Dean Netherton contributed the sound driver interface and the SN76489 + sound driver. +- The RomWBW Disk Catalog document was produced by Mykl Orders. Contributions of all kinds to RomWBW are very welcome. @@ -1372,12 +1367,11 @@ All contributions to RomWBW are subject to this license. The best way to get assistance with RomWBW or any aspect of the RetroBrew Computers projects is via the community forums: -- [RetroBrew Computers - Forum](https://www.retrobrewcomputers.org/forum/) -- [RC2014 Google - Group](https://groups.google.com/forum/#!forum/rc2014-z80) -- [retro-comp Google - Group](https://groups.google.com/forum/#!forum/retro-comp) +- [RetroBrew Computers Forum](https://www.retrobrewcomputers.org/forum/) +- [RC2014 Google + Group](https://groups.google.com/forum/#!forum/rc2014-z80) +- [retro-comp Google + Group](https://groups.google.com/forum/#!forum/retro-comp) Submission of issues and bugs are welcome at the [RomWBW GitHub Repository](https://github.com/wwarthen/RomWBW). diff --git a/ReadMe.txt b/ReadMe.txt index 213fb771..b9cafc21 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW Getting Started Wayne Warthen (mailto:wwarthen@gmail.com) -05 Nov 2022 +10 Dec 2022 @@ -17,7 +17,7 @@ RomWBW Z80/Z180 System Software Version 3.1 Pre-release -05 Nov 2022 +10 Dec 2022 Wayne Warthen wwarthen@gmail.com diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index 8de94ae0..5fc529be 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -174,7 +174,7 @@ PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER ; SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] +SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_ezz80.asm b/Source/HBIOS/cfg_ezz80.asm index 2f476e23..0e63f9c7 100644 --- a/Source/HBIOS/cfg_ezz80.asm +++ b/Source/HBIOS/cfg_ezz80.asm @@ -211,7 +211,7 @@ PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER ; SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] +SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 259e650d..82a45e48 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -279,7 +279,7 @@ 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_NONE ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] +SDMODE .EQU SDMODE_NONE ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index 4057e40a..096c85ac 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -208,7 +208,7 @@ 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_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] +SDMODE .EQU SDMODE_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index f04934e9..74d1a648 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -207,7 +207,7 @@ PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER ; SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] +SDMODE .EQU SDMODE_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 1e477427..9cdd961f 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -224,7 +224,7 @@ 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] +SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 6599438d..ab3ced93 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -239,7 +239,7 @@ 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] +SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 3cb827ff..23ac6d40 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -228,7 +228,7 @@ 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] +SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|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 ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index 1559a52f..2cd6cf62 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -209,7 +209,7 @@ 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_CSIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] +SDMODE .EQU SDMODE_CSIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] SDPPIBASE .EQU RPH_PPI0 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 00bd9613..79d2862c 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -208,7 +208,7 @@ 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_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] +SDMODE .EQU SDMODE_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 5a001c15..ca9a4d71 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -219,7 +219,7 @@ PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER ; SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] +SDMODE .EQU SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 38f0454d..09d3f31a 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -152,7 +152,7 @@ PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER ; SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] +SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index ad82124a..48c5532d 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -163,7 +163,7 @@ PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER ; SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] +SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 360e823b..ba8ad7f6 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -128,6 +128,7 @@ SD_CLK .EQU %00000010 ; RTC:1 IS CLOCK SD_DI .EQU %00000001 ; RTC:0 IS DATA IN (CARD <- CPU) SD_DO .EQU %10000000 ; RTC:7 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU SD_OPRREG ; IOBASE +SD_INVCS .EQU FALSE ; INVERT CS ; RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE #ENDIF @@ -143,6 +144,7 @@ SD_CLK .EQU %00000010 ; RTC:1 IS CLOCK SD_DI .EQU %00000001 ; RTC:0 IS DATA IN (CARD <- CPU) SD_DO .EQU %01000000 ; RTC:6 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU SD_OPRREG ; IOBASE +SD_INVCS .EQU FALSE ; INVERT CS ; RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE #ENDIF @@ -156,6 +158,7 @@ SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT SD_CNTR .EQU Z180_CNTR SD_TRDR .EQU Z180_TRDR SD_IOBASE .EQU SD_OPRREG ; IOBASE +SD_INVCS .EQU FALSE ; INVERT CS ; RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE #ENDIF @@ -174,6 +177,7 @@ SD_CLK .EQU %00000010 ; PPIC:1 IS CLOCK SD_DI .EQU %00000001 ; PPIC:0 IS DATA IN (CARD <- CPU) SD_DO .EQU %10000000 ; PPIB:7 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU SD_PPIBASE ; IOBASE +SD_INVCS .EQU TRUE ; INVERT CS #ENDIF ; #IF (SDMODE == SDMODE_UART) @@ -187,6 +191,7 @@ SD_CLK .EQU %00000100 ; UART MCR:2 IS CLOCK SD_DI .EQU %00000001 ; UART MCR:0 IS DATA IN (CARD <- CPU) SD_DO .EQU %00100000 ; UART MSR:5 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU UARTIOB ; IOBASE +SD_INVCS .EQU TRUE ; INVERT CS #ENDIF ; #IF (SDMODE == SDMODE_DSD) ; DUAL SD @@ -201,6 +206,7 @@ SD_CLK .EQU %00000010 ; RTC:1 IS CLOCK SD_DI .EQU %00000001 ; RTC:6 IS DATA IN (CARD <- CPU) SD_DO .EQU %00000001 ; RTC:0 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU SD_OPRREG ; IOBASE +SD_INVCS .EQU FALSE ; INVERT CS #ENDIF ; #IF (SDMODE == SDMODE_MK4) ; MARK IV (CSIO STYLE INTERFACE) @@ -211,6 +217,7 @@ SD_CS0 .EQU %00000100 ; SELECT ACTIVE SD_CNTR .EQU Z180_CNTR SD_TRDR .EQU Z180_TRDR SD_IOBASE .EQU SD_OPRREG ; IOBASE +SD_INVCS .EQU FALSE ; INVERT CS #ENDIF ; #IF (SDMODE == SDMODE_SC) ; SC @@ -223,6 +230,7 @@ SD_CS1 .EQU %00001000 ; RTC:3 IS SELECT FOR SECONDARY SPI CARD SD_CNTR .EQU Z180_CNTR SD_TRDR .EQU Z180_TRDR SD_IOBASE .EQU SD_OPRREG ; IOBASE +SD_INVCS .EQU TRUE ; INVERT CS ; RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE #ENDIF @@ -270,6 +278,30 @@ SD_CS0 .EQU %00100000 ; IN/OUT:SD_OPREG:5 = CS2, SDCARD2 CS, IN=1 Card present SD_CS1 .EQU %00010000 ; IN/OUT:SD_OPREG:4 = CS1, SDCARD1 CS, IN=1 Card present #ENDIF SD_IOBASE .EQU SD_BASE ; IOBASE +SD_INVCS .EQU FALSE ; INVERT CS +#ENDIF +; +; +#IF (SDMODE == SDMODE_USR) ; USER DEFINED HARDWARE CONFIGURATION +; +; THIS MODE IS INTENDED TO ALLOW A USER TO EASILY CONFIGURE A CUSTOM +; SD CARD INTERFACE. IT IS NOT YET COMPLETE OR TESTED AND PROBABLY DOES +; NOT YET WORK. +; +SD_DEVMAX .EQU 2 ; NUMBER OF PHYSICAL UNITS (SOCKETS) +SD_IOBASE .EQU $01 ; IO BASE ADDRESS FOR SD INTERFACE +SD_OPRREG .EQU SD_IOBASE ; OUTPUT PORT (OUTPUT: CS, CLK, DIN) +SD_OPRDEF .EQU %00000101 ; OUTPUT PORT DEFAULT STATE +SD_OPRMSK .EQU %00001111 ; OUTPUT PORT MASK +SD_INPREG .EQU SD_IOBASE ; INPUT REGISTER +SD_CS0 .EQU %00001000 ; SELECT +SD_CLK .EQU %00000100 ; CLOCK +SD_DI .EQU %00000010 ; DATA IN (CARD <- CPU) MOSI +SD_DO .EQU %00000001 ; DATA OUT (CARD -> CPU) MISO +SD_CINIT .EQU TRUE ; INITIALIZE OUTPUT PORT +SD_DDR .EQU $03 ; DATA DIRECTION REGISTER +SD_DDRVAL .EQU %00001101 ; DATA DIRECTION REGISTER VALUE +SD_INVCS .EQU FALSE ; INVERT CS #ENDIF ; #IF (SD_DEVCNT > SD_DEVMAX) @@ -477,6 +509,13 @@ SD_INIT: LD A,SD_BASE CALL PRTHEXBYTE #ENDIF +; +#IF (SDMODE == SDMODE_USR) + PRTS(" MODE=USER$") + PRTS(" IO=0x$") + LD A,SD_IOBASE + CALL PRTHEXBYTE +#ENDIF ; CALL SD_PROBE ; CHECK FOR HARDWARE JR Z,SD_INIT00 ; CONTINUE IF PRESENT @@ -1695,6 +1734,22 @@ SD_SETUP: LD (SD_OPRVAL),A ; RECORD THE WORKING VALLUE OUT (SD_OPRREG),A ; OPRREG == SIO_MCR #ENDIF +; +#IF (SDMODE == SDMODE_USR) + #IF (SD_CINIT == TRUE) + LD A,(SD_OPRMSK) ; GET OUTPUT PORT MASK + CPL ; INVERT ACCUMULATOR + LD C,A ; SAVE IT FOR LATER + LD A,(SD_DDR) ; GET DATA DIRECTION REGISTER VALUE + AND C ; ZERO ALL INTERESTING BITS + OR (SD_DDRVAL) ; ADD OUR VALUE + LD (SD_DDR),A ; WRITE IT + #ENDIF +; + LD A,SD_OPRDEF + LD (SD_OPRVAL),A + OUT (SD_OPRREG),A +#ENDIF ; XOR A RET @@ -1766,7 +1821,8 @@ SD_SELECT1: ; SD_SELECT2: ; ADJUST BIT(S) FOR INTERFACES USING INVERTED CS BITS -#IF ((SDMODE == SDMODE_PPI) | (SDMODE == SDMODE_UART) | (SDMODE == SDMODE_SC)) +;#IF ((SDMODE == SDMODE_PPI) | (SDMODE == SDMODE_UART) | (SDMODE == SDMODE_SC)) +#IF (SD_INVCS) #IF ((SDMODE == SDMODE_SC) & (SD_DEVCNT > 1)) XOR SD_CS0 | SD_CS1 #ELSE diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 5bcb465f..27edfd39 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -181,6 +181,7 @@ SDMODE_DSD .EQU 6 ; DUAL SD SDMODE_MK4 .EQU 7 ; MARK IV SDMODE_SC .EQU 8 ; SC (Steve Cousins) SDMODE_MT .EQU 9 ; MT (Shift register SPI WIZNET for RC2014) +SDMODE_USR .EQU 10 ; USER DEFINED (in sd.asm) (NOT COMPLETE) ; ; AY SOUND CHIP MODE SELECTIONS ; diff --git a/Source/ver.inc b/Source/ver.inc index b66c684d..b998e315 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.183" +#DEFINE BIOSVER "3.1.1-pre.184" diff --git a/Source/ver.lib b/Source/ver.lib index 291b4eda..70f898fa 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.183" + db "3.1.1-pre.184" endm