From 7d19d3e403b51962bf2b6437ba85849ae8398476 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Mon, 13 Feb 2023 19:32:43 -0800 Subject: [PATCH] More Cleanup --- Doc/RomWBW Applications.pdf | Bin 216070 -> 216070 bytes Doc/RomWBW Disk Catalog.pdf | Bin 124529 -> 124529 bytes Doc/RomWBW Errata.pdf | Bin 28682 -> 28682 bytes Doc/RomWBW ROM Applications.pdf | Bin 159779 -> 159778 bytes Doc/RomWBW System Guide.pdf | Bin 528323 -> 528324 bytes Doc/RomWBW User Guide.pdf | Bin 510650 -> 511987 bytes ReadMe.md | 2 +- ReadMe.txt | 2 +- Source/Build.cmd | 2 +- Source/BuildZZR.cmd | 4 - Source/BuildZZRC.cmd | 4 + Source/Clean.cmd | 2 + Source/Doc/UserGuide.md | 115 +++++++++++------- Source/HBIOS/Build.cmd | 12 +- Source/HBIOS/Build.sh | 12 +- Source/HBIOS/Config/DYNO_std.asm | 1 + Source/HBIOS/Config/MBC_std.asm | 23 +++- .../Config/{SCZ180_140.asm => RCZ180_126.asm} | 35 ++++-- .../Config/{SCZ180_130.asm => RCZ180_130.asm} | 30 +++-- .../Config/{SCZ180_131.asm => RCZ180_131.asm} | 20 +-- .../Config/{SCZ180_126.asm => RCZ180_140.asm} | 27 ++-- Source/HBIOS/Config/RCZ180_ext.asm | 5 + Source/HBIOS/Config/RCZ180_nat.asm | 5 + Source/HBIOS/Config/RCZ280_ext.asm | 1 + Source/HBIOS/Config/RCZ280_nat.asm | 1 + Source/HBIOS/Config/RCZ280_nat_zz.asm | 32 ----- Source/HBIOS/Config/RCZ280_nat_zzr.asm | 43 ------- Source/HBIOS/Config/RCZ280_zz80mb.asm | 68 +++++++++++ Source/HBIOS/Config/RCZ280_zzrc.asm | 76 ++++++++++++ Source/HBIOS/Config/RCZ80_easy.asm | 1 + Source/HBIOS/Config/RCZ80_kio.asm | 3 +- Source/HBIOS/Config/RCZ80_skz.asm | 3 +- Source/HBIOS/Config/RCZ80_std.asm | 3 +- Source/HBIOS/Config/RCZ80_tiny.asm | 1 + Source/HBIOS/Config/RCZ80_zrc.asm | 17 ++- Source/HBIOS/Config/RCZ80_zrc_ram.asm | 16 ++- Source/HBIOS/Config/RPH_std.asm | 3 +- Source/HBIOS/cfg_dyno.asm | 61 +++++++++- Source/Makefile | 2 +- Source/ZZR/Build.cmd | 42 ------- Source/ZZR/Makefile | 33 ----- Source/ZZR/zzr_cfldr.bin | Bin 256 -> 0 bytes Source/ZZR/zzr_fill_1.bin | Bin 126464 -> 0 bytes Source/ZZR/zzr_fill_2.bin | Bin 16384 -> 0 bytes Source/ZZR/zzr_fill_3.bin | Bin 638976 -> 0 bytes Source/ZZR/zzr_mon.bin | Bin 4096 -> 0 bytes Source/ZZR/zzr_ptbl.bin | Bin 256 -> 0 bytes Source/{ZZR => ZZRC}/Bank Layout.txt | 0 Source/ZZRC/Build.cmd | 42 +++++++ Source/{ZZR => ZZRC}/Clean.cmd | 0 Source/ZZRC/Makefile | 33 +++++ .../ZZRC Disk Layout.txt} | 0 Source/ver.inc | 2 +- Source/ver.lib | 2 +- 54 files changed, 501 insertions(+), 285 deletions(-) delete mode 100644 Source/BuildZZR.cmd create mode 100644 Source/BuildZZRC.cmd rename Source/HBIOS/Config/{SCZ180_140.asm => RCZ180_126.asm} (59%) rename Source/HBIOS/Config/{SCZ180_130.asm => RCZ180_130.asm} (68%) rename Source/HBIOS/Config/{SCZ180_131.asm => RCZ180_131.asm} (81%) rename Source/HBIOS/Config/{SCZ180_126.asm => RCZ180_140.asm} (73%) delete mode 100644 Source/HBIOS/Config/RCZ280_nat_zz.asm delete mode 100644 Source/HBIOS/Config/RCZ280_nat_zzr.asm create mode 100644 Source/HBIOS/Config/RCZ280_zz80mb.asm create mode 100644 Source/HBIOS/Config/RCZ280_zzrc.asm delete mode 100644 Source/ZZR/Build.cmd delete mode 100644 Source/ZZR/Makefile delete mode 100644 Source/ZZR/zzr_cfldr.bin delete mode 100644 Source/ZZR/zzr_fill_1.bin delete mode 100644 Source/ZZR/zzr_fill_2.bin delete mode 100644 Source/ZZR/zzr_fill_3.bin delete mode 100644 Source/ZZR/zzr_mon.bin delete mode 100644 Source/ZZR/zzr_ptbl.bin rename Source/{ZZR => ZZRC}/Bank Layout.txt (100%) create mode 100644 Source/ZZRC/Build.cmd rename Source/{ZZR => ZZRC}/Clean.cmd (100%) create mode 100644 Source/ZZRC/Makefile rename Source/{ZZR/ZZR Disk Layout.txt => ZZRC/ZZRC Disk Layout.txt} (100%) diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 4ec31625686e6be24929170eeb1e0bdbaeb77043..bceb29e6cc1a13bf05d7c3f0f249c85904a173a6 100644 GIT binary patch delta 330 zcmZph!P_>2cS93n{idkQwFmr_6OUisVOZF=(-0L-K5*WSK<(z9*G@VrW zaF58!x7QM7t7l~SuJ#GK-uz3W>eITLVwQKE^(OAxkTd1peXH&A>)B_?hzM7BuWMUt zk{gxVQ|c7@UwN-^we9Bo)t@Zi_i0tXx^nW~|Cdv)UccKgqqcHeBF~1OIH#W31G&3=te2-b2$H>^g$Pg;9 zJyVR?#?;x|)y%}z(#6EZ*wVn<(ZbZ&)Wpch!qLgq&C$}?($LsW!G@5M=`XyQ2cS93n{ilqsY}Ps{PV0Gj%b&=2?!F%troh#?=UQasL8d7&H|Ov>XQ_NX zRH+$sd+lMXZw6Oqh0R>Dj{R%kmnX5Cb&Gbj$0(I1-qhH;zckN2j^D&mL+!(~7~bg2 zTU%~Pylz?b&%H|hTUFZqu&2fMWJAAQSvh&{|I3=I*Y9RD{QW71`SVrhWf7Zm)@YO=p4k2Eu#d+uk?Iyb`{qd$%Tbje7Q@9~FugwY=wl zZCmQ>Y+JJ7vW?99U`9G~{(K5E9k{9QPcwDNmm%AZ;`d0XboOKtMbe)Tyc;>*1h?d~^ z7Vjb%p$!wfE%R#f-PL;cY51%;>ZhHOpgpT(s)_d+(u>=gH?C`KV7Ns7t6BOSu_8y&|%w~Pq*|5 zn)5GlzCHVj^7e{(?eRV5PFGA9Y-SX0)@0hQ$;3GIqL#6trJ=cjg|2~xx`BbZrh>k2 zeu_(CNveW|iJcjE#8oZ9a) delta 571 zcmex(hW+Ci_6Z&JM+|uOeAoWNJo~G%KWFHoH%$-NUhx(>HC^U9_+Ng*?Ila97lvM2 zncRQ;vCbiN1sk4!rKm6T+?<;4v$M$&s?6guDd3~1U>mNqm zFDuDd(au*ktNn4Umcr46EPV#`Ih;z5Y+Sb|-6n}6?FF7kP5f9RE!O*#2#J| ze>h2|okizKP@nYu+Y>$4>T?NaZ@kPUd813sR`sjUYp%1(_Z}S&3hpeM?{?~q(*=Rk zPI=ikq)ZJbgzUbvV}e_7j_8lFdX+U5b)P2{sl?}I=~gSe?b>oJ?)n>+(?yA!3d|Qx zO^LJ6cU==J9eV$8imCI|nu~{LZP}OoX?|MtlP&ErN`DU(E&cL2a_3%~5|f*iveqw; zo?dD)D={m($4v3^{^jLI@5OHp|E>SNORIimu6T7G zbKWJ+x4W+>n^(_kkMFv3x_r7|Gox^`CewCJCdR23wTuicjf_l8bqy@k4Gh#Z74&`c zQ(O{DQWZ2@tc(ndj17zop-Q&DxXh>_lxXQFVn2 rW@ut&;AW>_Ls&_yf}I^#aY=bMWDVh8>Ulsso CVTx)1 delta 330 zcmeBrz}WSGaYHp@y~k$FZ(KF@LS{Dm=S?b7xu5iElC8i_m#EhldM3+ zj>_jpi$o1~%JfUAtEfAM?scjn$>`IY7&H`n>~zWI3m>CM*>>n zc0%#tt+&ti>n;qta5;PNhYJ}W%AY-Xv}s#t_3M&T=brsxkJ$at_rjw4La$>UFRJ|f zOyP&j{AUm4H|0Hhwb_;_I77?G(9+1r)J)gFLfybXT~k5dH$TNCu_RSN!^O(Tz{uFZ z$PlVz^RBE9EY2q8CXOafE(YeN7G`ed=7z4WZm#AAZWhKa&PLAW<|cLuHiVQ+ew!}~ E05W2blK=n! diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 65d3e0ebf4942076d9d3997a8f046c94befce8bd..95eb34f07fdfdea00d6252081dfbbb013a092250 100644 GIT binary patch delta 9157 zcmai4eXN#c8JDvfa&W_;6Ko2n5wcd<{r$n<7>5qk;nRUFBuxt}YBk{GbmSBr%yJ&CUeNmgRJP{hs$d@AJOz^?SDt|G<6j>%Oo1 zcYXb?>*2BU6ZV~-uzmeFzhlFc;<+WqKXS#;83@zH@kV$;;;sJ^jMT_4Cg8BgfCYK7IM7PtQ5BZ0N#^@A=t@-aA%& zxOd8?3#X6XblJw@T{nLIhmU=E(q&g4`s+=<9JzMezVV+ucFnedH@2*t`}P$Fw{+d* zFWqzXw!dtD^O@IXKC*WAANPOj)X;l3-~P~o2?uA+`1PMIpQD$bojhyl&g=9$yDkho zFgoG%@V+ab{P_=#+_LC*%TL|5V)Cvv!-w{tnKH5er4P<}@)uwKh_`zxw^7$FCXu$+b6p^ZWZ>erWCe_usvG=cL))2aZ3o zaOLXfk9=zS7l-fu_o~hJymtKPJDXSh=f!mg9+-IjqD%kWFm-6(z|icz_aAMg#K_4o?y9f(u3_Ib?nl0>Ytq8; zR%ac&A6dA#>$>V6>lb(Joojnk`O~w$r@QtSrJ~kyP3M^8nlaIgELzevt5Eza9opBl zGx!l})@19%n$gC~ea`qm*Q=0xUAAcIu2T>PDy6fb_jqgRK<_f|3y$#dF}KSWz|Ch* z8-rHu8?i5#!26u$eLnKOXn0>rwrGbC22}jIs52oGt)l~@S9EaEbz)|% zlQvljCzFJYl}gSw4y?{gKJ&ilgl_@=lrmkCm8TbHqvR!8carU360bNejLoX2w0~;= zWg93WytYDXrGupdbq-0I#8^wdWvq)8GR0Wr8tb7=yD}yQvayLVNEA#=Nh)ZPQW8OH zw3AU%SYznL*4QXbVvWo4Vqirtwt>xLgEdk?o4p1KHTBkClC z2+kzY(pJl~th6;rnhv{M>4YWz6|5Rg$Qz@~={PWRC_3av`8sE+MAOI%+Bw^TbUpsG z4mE9Bl~LJIUeKj8$V)Uwgm=32l3G}K2M-pq-W8UrlXs57$%l}n?E)gK*)D)$kY_FsB1|ogA{<%YkF08Bpb@GtNo@lNe%yG6Wci0 zD1~)UL?yKIoCyOMOUotYZ92fy#Kj$^WcT#PzU784d-Dyc+0h z8FnaG#H6fFqN2k8t?}d_cpartxCf))GnoV^2$G3Af+CY35?z%159KpRZ$;T?(B;Zm zEj*ZBoM9*dwGG}#6WeSnYF6<-3lmGPMvZ10=RiconcSg7Yb77zI3fyEV^8*UPRWKt zIk-P7m|ALiy_7o}f^;~PjU@R3QUywMz5Z0Nf<#CPjqWFsjU6hgRK`Vkjey@FjOE2H z>Za)${LeW}r4nU>Aq4-UOFD$Ci(su%nGRuGKtqa8@KbUmkJK-didTl33zxLy_zG1#5gB0;iyhF(Q*0E;%?;tJbB`U_K;^3@jWI6o&^93DdQ)q}SwsSd_^Jl_XIP zNWpZt7&Nn8LCAJ^aR7;H+XwuS^Q?F=gaf019V6%O6Xw7;UeXJ$ST3-0c(s@oKmE`fW9@uS!?;PnP?IU7F~>LEJ`$l;fC_X2~367 z2tmjq`8W18_+LUYV`0o=8XN0#LI|TTZ(qX<&Jj1jnuH&+p6)180!g9+qdXA8jw&0n zyi^d%P{@|DltnT1E!({s{#6CUqO=`^4UK3LI&eZEQ?CeFrfUg#t4U}suQv@TkKDYz z>#71Ii@?ap*%BapF%ZcQcPVxq)ETlW8YmGgn2Es*xT8d)2?km`$(~Y1>1tP|6y|)B zc|eL$xy)&h1=Vk!SC58_j4i?x#Kg!sC4><|O=0K`4ycSwh*-n0v3*}DOU+VN1zOYg zjS%*-jfb!!l8b%BIkM^mwQVtf-TIhj);|^D{T2LhCk}hu+XC0vi^<`kG!0CkbT#y7 zxdXhR<-s-l!MmixLm0TWY^*`8G25aw45QoEFf+~6EPRM<%M zC__cz>E*Dt(>`jT@O9JFQE0L;2s8c1#;R~NND=aNs|T0BK-SAT1EtY9(?dkJ5BwqQ zXxfr>Cgz3DQS8;WIa#R`1gj^fMpY1NxYy)DqTDFner`+0xhhAF4G7@z*=V&p-YF$)cHCl^7_r~+djeO<>IeJX-1P502H(KrZe zWouc>e^m;GXJT|DUV?r?eu;rO5ukD(`Uw#^Xr+lLmFhK#k{e@LDCII{u@OUNaS4W4 zDvW$(Ls#FO{Z{4q^RkT}ouAP>^rZ#!`tUys7K8=;x?j!j@9mlM|F_)M)7#tqrJ*|q XhwdF*b5}R+M1AO(UZQqEG)XSQnCQ@bGdGwO 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 delta 23118 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
X)sicRaY*kEm9 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 diff --git a/ReadMe.md b/ReadMe.md index d8e10ca6..03041195 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ **RomWBW ReadMe** \ Version 3.1 Pre-release \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -12 Feb 2023 +13 Feb 2023 # Overview diff --git a/ReadMe.txt b/ReadMe.txt index 0ab2d7e4..27a9166f 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -12 Feb 2023 +13 Feb 2023 diff --git a/Source/Build.cmd b/Source/Build.cmd index 82506681..e349a4d1 100644 --- a/Source/Build.cmd +++ b/Source/Build.cmd @@ -8,7 +8,7 @@ call BuildShared || exit /b call BuildImages || exit /b call BuildROM %* || exit /b call BuildZRC || exit /b -call BuildZZR || exit /b +call BuildZZRC || exit /b if "%1" == "dist" ( call Clean || exit /b diff --git a/Source/BuildZZR.cmd b/Source/BuildZZR.cmd deleted file mode 100644 index 36ec56a7..00000000 --- a/Source/BuildZZR.cmd +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -setlocal - -pushd ZZR && call Build || exit /b & popd diff --git a/Source/BuildZZRC.cmd b/Source/BuildZZRC.cmd new file mode 100644 index 00000000..4f5d2fa1 --- /dev/null +++ b/Source/BuildZZRC.cmd @@ -0,0 +1,4 @@ +@echo off +setlocal + +pushd ZZRC && call Build || exit /b & popd diff --git a/Source/Clean.cmd b/Source/Clean.cmd index d3b69d40..ebd9f7d4 100644 --- a/Source/Clean.cmd +++ b/Source/Clean.cmd @@ -20,3 +20,5 @@ pushd Images && call Clean & popd pushd Prop && call Clean & popd pushd RomDsk && call Clean & popd pushd Doc && call Clean & popd +pushd ZRC && call Clean & popd +pushd ZZRC && call Clean & popd diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index c33cfe8d..1d7cdfa1 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -190,16 +190,16 @@ below, **carefully** pick the appropriate ROM image for your hardware. | [Easy Z80 SBC]^2^ | RCBus | RCZ80_easy.rom | 115200 | | [Tiny Z80 SBC]^2^ | RCBus | RCZ80_tiny.rom | 115200 | | [Z80-512K CPU/RAM/ROM Module]^2^ | RCBus | RCZ80_skz.rom | 115200 | -| [SC126 Z180 SBC]^5^ | BP80 | SCZ180_126.rom | 115200 | -| [SC130 Z180 SBC]^5^ | RCBus | SCZ180_130.rom | 115200 | -| [SC131 Z180 Pocket Computer]^5^ | - | SCZ180_131.rom | 115200 | -| [SC140 Z180 CPU Module]^5^ | Z50 | SCZ180_140.rom | 115200 | +| [SC126 Z180 SBC]^5^ | BP80 | RCZ180_126.rom | 115200 | +| [SC130 Z180 SBC]^5^ | RCBus | RCZ180_130.rom | 115200 | +| [SC131 Z180 Pocket Computer]^5^ | - | RCZ180_131.rom | 115200 | +| [SC140 Z180 CPU Module]^5^ | Z50 | RCZ180_140.rom | 115200 | | [Dyno Z180 SBC]^6^ | Dyno | DYNO_std.rom | 38400 | | [Nhyodyne Z80 MBC]^1^ | MBC | MBC_std.rom | 38400 | | [Rhyophyre Z180 SBC]^1^ | - | RPH_std.rom | 38400 | | [Z80 ZRC CPU Module]^7^ | RCBus | RCZ80_zrc.rom | 115200 | -| [Z280 ZZRCC CPU Module]^7^ | RCBus | RCZ280_nat_zzr.rom | 115200 | -| [Z280 ZZ80MB SBC]^7^ | RCBus | RCZ280_nat_zz.rom | 115200 | +| [Z280 ZZRCC CPU Module]^7^ | RCBus | RCZ280_zzrc.rom | 115200 | +| [Z280 ZZ80MB SBC]^7^ | RCBus | RCZ280_zz80mb.rom | 115200 | | ^1^Designed by Andrew Lynch | ^2^Designed by Sergey Kiselev @@ -3147,6 +3147,10 @@ In some cases, support for multiple hardware components with potentially conflicting resource usage are handled by a single ROM image. It is up to the user to ensure that no conflicting hardware is in use. +The RomWBW `TUNE` application will detect an AY-3-8910/YM2149 +Sound Module regardless of whether support for it is included in +the RomWBW HBIOS configuration. + `\clearpage`{=latex} ### RetroBrew Z80 SBC @@ -3274,14 +3278,13 @@ to the user to ensure that no conflicting hardware is in use. |-------------------|---------------| | ROM Image File | RCZ80_std.rom | | Console Baud Rate | 115200 | -| Interrupt Mode | 1 | +| Interrupts | Mode 1 | - CPU speed is detected at startup if DS1302 RTC is active - Otherwise 7.3728 MHz assumed - Requires 512K RAM/ROM Module - Hardware auto-detected: - DS1302 RTC - - RP5C01 RTC - ACIA Serial Interface Module - SIO Serial Interface Module - EP Dual UART Serial Interface Module @@ -3295,7 +3298,7 @@ to the user to ensure that no conflicting hardware is in use. |-------------------|---------------| | ROM Image File | RCZ80_kio.rom | | Console Baud Rate | 38400 | -| Interrupt Mode | 2 | +| Interrupts | Mode 2 | - Equivalent to RCZ80_std w/ following modifications: - KIO-SIO Serial Interface uses KIO port standards @@ -3313,7 +3316,7 @@ to the user to ensure that no conflicting hardware is in use. | ROM Image Files | RCZ180_ext.rom | | | RCZ180_nat.rom | | Console Baud Rate | 115200 | -| Interrupt Mode | 2 | +| Interrupts | Mode 2 | - CPU speed is detected at startup if DS1302 RTC is active - Otherwise 18.432 MHz assumed @@ -3336,14 +3339,16 @@ to the user to ensure that no conflicting hardware is in use. ### RCBus Z280 CPU Module -| | | -|-------------------|-------------------| -| ROM Image Files | RCZ280_ext.rom | -| | RCZ280_nat.rom | -| Console Baud Rate | 115200 | -| Interrupt Mode | 1 (ext) / 3 (nat) | +| | | +|-------------------|----------------| +| ROM Image Files | RCZ280_ext.rom | +| | RCZ280_nat.rom | +| Console Baud Rate | 115200 | +| Interrupts | Mode 1 (ext) | +| | Mode 3 (nat) | - CPU speed is assumed to be 12 MHz (24 MHz oscillator) + - System timer is generated by Z280 CPU - Hardware auto-detected: - DS1302 RTC - Z280 Z2U Serial Ports @@ -3412,6 +3417,8 @@ to the user to ensure that no conflicting hardware is in use. |-------------------|----------------| | ROM Image File | RCZ80_skz.rom | | Console Baud Rate | 115200 | +| Interrupt Mode | 1 | + - CPU speed is detected at startup if DS1302 RTC is active - Otherwise 7.3728 MHz assumed @@ -3421,7 +3428,6 @@ to the user to ensure that no conflicting hardware is in use. - SIO Serial Interface Module - EP Dual UART Serial Interface Module - WDC Floppy Disk Controller w/ 3.5" HD Drives - - AY-3-8910/YM2149 Sound Module - IDE Hard Disk Interface Module - PPIDE Hard Disk Interface Module - Serial baud rate is determined by hardware for ACIA and SIO @@ -3433,20 +3439,24 @@ to the user to ensure that no conflicting hardware is in use. | | | |-------------------|----------------| -| ROM Image Files | SCZ180_126.rom | +| ROM Image Files | RCZ180_126.rom | | Console Baud Rate | 115200 | +| Interrupts | Mode 2 | - CPU speed is detected at startup if DS1302 RTC is active - Otherwise 18.432 MHz assumed + - System timer is generated by Z180 CPU - Hardware auto-detected: - DS1302 RTC - Z180 ASCI Serial Ports + - SIO Serial Interface Module - EP Dual UART Serial Interface Module - WDC Floppy Disk Controller w/ 3.5" HD Drives - - AY-3-8910/YM2149 Sound Module - - Onboard SD Card Interface - IDE Hard Disk Interface Module - PPIDE Hard Disk Interface Module + - Onboard SD Card Interface + - Use of Interrupt Mode 2 requires proper IEI/IEO configuration + for all peripherals generating interrupts `\clearpage`{=latex} @@ -3454,19 +3464,24 @@ to the user to ensure that no conflicting hardware is in use. | | | |-------------------|----------------| -| ROM Image Files | SCZ180_130.rom | +| ROM Image Files | RCZ180_130.rom | | Console Baud Rate | 115200 | +| Interrupts | Mode 2 | - - CPU speed assumed to be 18.432 MHz + - CPU speed is detected at startup if DS1302 RTC is active + - Otherwise 18.432 MHz assumed + - System timer is generated by Z180 CPU - Hardware auto-detected: - - Interrupt-driven RTC + - DS1302 RTC - Z180 ASCI Serial Ports + - SIO Serial Interface Module - EP Dual UART Serial Interface Module - WDC Floppy Disk Controller w/ 3.5" HD Drives - - AY-3-8910/YM2149 Sound Module - - Onboard SD Card Interface - IDE Hard Disk Interface Module - PPIDE Hard Disk Interface Module + - Onboard SD Card Interface + - Use of Interrupt Mode 2 requires proper IEI/IEO configuration + for all peripherals generating interrupts `\clearpage`{=latex} @@ -3474,10 +3489,12 @@ to the user to ensure that no conflicting hardware is in use. | | | |-------------------|----------------| -| ROM Image Files | SCZ180_131.rom | +| ROM Image Files | RCZ180_131.rom | | Console Baud Rate | 115200 | +| Interrupts | Mode 2 | - CPU speed assumed to be 18.432 MHz + - System timer is generated by Z180 CPU - Hardware auto-detected: - Interrupt-driven RTC - Z180 ASCI Serial Ports @@ -3489,19 +3506,24 @@ to the user to ensure that no conflicting hardware is in use. | | | |-------------------|----------------| -| ROM Image Files | SCZ180_140.rom | +| ROM Image Files | RCZ180_140.rom | | Console Baud Rate | 115200 | +| Interrupts | Mode 2 | - CPU speed is detected at startup if DS1302 RTC is active - Otherwise 18.432 MHz assumed + - System timer is generated by Z180 CPU - Hardware auto-detected: - DS1302 RTC - Z180 ASCI Serial Ports + - SIO Serial Interface Module + - EP Dual UART Serial Interface Module - WDC Floppy Disk Controller w/ 3.5" HD Drives - - AY-3-8910/YM2149 Sound Module - - Onboard SD Card Interface - IDE Hard Disk Interface Module - PPIDE Hard Disk Interface Module + - Onboard SD Card Interface + - Use of Interrupt Mode 2 requires proper IEI/IEO configuration + for all peripherals generating interrupts `\clearpage`{=latex} @@ -3511,8 +3533,10 @@ to the user to ensure that no conflicting hardware is in use. |-------------------|----------------| | ROM Image Files | DYNO0_std.rom | | Console Baud Rate | 38400 | +| Interrupts | Mode 2 | - CPU speed is assumed to be 18.432 MHz + - System timer is generated by Z180 CPU - Hardware auto-detected: - BQ4845P RTC - Z180 ASCI Serial Ports @@ -3527,6 +3551,7 @@ to the user to ensure that no conflicting hardware is in use. |-------------------|---------------| | ROM Image File | MBC_std.rom | | Console Baud Rate | 38400 | +| Interrupts | None | - CPU speed is detected at startup if DS1302 RTC is active - Otherwise 8.000 MHz assumed @@ -3534,17 +3559,18 @@ to the user to ensure that no conflicting hardware is in use. - Hardware auto-detected: - DS1302 RTC - Zilog CTC + - Zilog DMA Module - UART Serial Adapter - - PPIDE Hard Disk Interface - SIO Serial Interface - - CVDU Display Adapter - - TMS9938/58 Display Adapter - - Floppy Disk Controller w/ 3.5" HD Drives - LPT Printer Interface - Zilog Parallel Interface - - AY-3-8910/YM2149 Sound Module - - Zilor DMA Module + - CVDU Display Adapter + - TMS9938/58 Display Adapter - PS/2 Keyboard Interface + - AY-3-8910/YM2149 Sound Module + - Floppy Disk Controller w/ 3.5" HD Drives + - PPIDE Hard Disk Interface + - Interrupts may be enabled in build options `\clearpage`{=latex} @@ -3554,13 +3580,16 @@ to the user to ensure that no conflicting hardware is in use. |-------------------|---------------| | ROM Image File | RPH_std.rom | | Console Baud Rate | 38400 | +| Interrupts | None | - CPU speed is detected at startup if DS1302 RTC is active + - Otherwise 18.432 MHz assumed - System timer is generated by Z180 CPU - Hardware auto-detected: - Onboard Z180 ASCI Serial Ports - Onboard PPIDE CF Interface - Onboard PS/2 Keyboard Controller + - Interrupts may be enabled in build options `\clearpage`{=latex} @@ -3570,16 +3599,16 @@ to the user to ensure that no conflicting hardware is in use. |-------------------|--------------------| | ROM Image Files | RCZ80_zrc.rom | | Console Baud Rate | 115200 | +| Interrupts | Mode 1 | - CPU speed is detected at startup if DS1302 RTC is active - - Otherwise 7.3728 MHz assumed + - Otherwise 14.7456 MHz assumed - Hardware auto-detected: - DS1302 RTC - - Onboard ACIA Serial Interface Module + - ACIA Serial Interface Module - SIO Serial Interface Module - EP Dual UART Serial Interface Module - WDC Floppy Disk Controller w/ 3.5" HD Drives - - AY-3-8910/YM2149 Sound Module - Onboard IDE Hard Disk Interface Module - PPIDE Hard Disk Interface Module - Serial baud rate is usually determined by hardware for ACIA and @@ -3587,16 +3616,16 @@ to the user to ensure that no conflicting hardware is in use. `\clearpage`{=latex} -`\clearpage`{=latex} - ### Z280 ZZRCC CPU Module | | | |-------------------|--------------------| -| ROM Image Files | RCZ280_nat_zzr.rom | +| ROM Image Files | RCZ280_zzrc.rom | | Console Baud Rate | 115200 | +| Interrupts | Mode 3 | - CPU speed is assumed to be 12 MHz (24 MHz oscillator) + - System timer is generated by Z280 CPU - Hardware auto-detected: - DS1302 RTC - Z280 Z2U Serial Ports @@ -3614,10 +3643,12 @@ to the user to ensure that no conflicting hardware is in use. | | | |-------------------|-------------------| -| ROM Image Files | RCZ280_nat_zz.rom | +| ROM Image Files | RCZ280_zz80mb.rom | | Console Baud Rate | 115200 | +| Interrupts | Mode 3 | - CPU speed is assumed to be 12 MHz (24 MHz oscillator) + - System timer is generated by Z280 CPU - Hardware auto-detected: - DS1302 RTC - Z280 Z2U Serial Ports diff --git a/Source/HBIOS/Build.cmd b/Source/HBIOS/Build.cmd index 0f3486f5..d520cd06 100644 --- a/Source/HBIOS/Build.cmd +++ b/Source/HBIOS/Build.cmd @@ -213,12 +213,12 @@ 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 RCZ280 zz80mb || exit /b +call Build RCZ280 zzrc || exit /b +call Build RCZ180 126 || exit /b +call Build RCZ180 130 || exit /b +call Build RCZ180 131 || exit /b +call Build RCZ180 140 || exit /b call Build DYNO std || exit /b call Build UNA std || exit /b call Build RPH std || exit /b diff --git a/Source/HBIOS/Build.sh b/Source/HBIOS/Build.sh index 069887bd..6d0793d8 100755 --- a/Source/HBIOS/Build.sh +++ b/Source/HBIOS/Build.sh @@ -17,8 +17,8 @@ if [ "${ROM_PLATFORM}" == "dist" ] ; then 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="RCZ280"; ROM_CONFIG="zz80mb"; bash Build.sh + ROM_PLATFORM="RCZ280"; ROM_CONFIG="zzrc"; 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 @@ -32,10 +32,10 @@ if [ "${ROM_PLATFORM}" == "dist" ] ; then 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="RCZ180"; ROM_CONFIG="126"; bash Build.sh + ROM_PLATFORM="RCZ180"; ROM_CONFIG="130"; bash Build.sh + ROM_PLATFORM="RCZ180"; ROM_CONFIG="131"; bash Build.sh + ROM_PLATFORM="RCZ180"; 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 diff --git a/Source/HBIOS/Config/DYNO_std.asm b/Source/HBIOS/Config/DYNO_std.asm index 2a3f825d..176b9786 100644 --- a/Source/HBIOS/Config/DYNO_std.asm +++ b/Source/HBIOS/Config/DYNO_std.asm @@ -27,6 +27,7 @@ #include "cfg_dyno.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) diff --git a/Source/HBIOS/Config/MBC_std.asm b/Source/HBIOS/Config/MBC_std.asm index 682639ee..f7370980 100644 --- a/Source/HBIOS/Config/MBC_std.asm +++ b/Source/HBIOS/Config/MBC_std.asm @@ -26,13 +26,30 @@ ; #include "cfg_mbc.asm" ; -BATCOND .SET FALSE +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +; +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +; +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE ; CPUSPDDEF .SET SPD_LOW ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW ; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) ; -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM ; DSKYENABLE .SET FALSE ; ENABLES DSKY DSKYMODE .SET DSKYMODE_NG ; DSKY VERSION: DSKYMODE_[V1|NG] +; +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +;UARTCFG .SET UARTCFG | SER_RTS +; +CVDUMON .SET CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) diff --git a/Source/HBIOS/Config/SCZ180_140.asm b/Source/HBIOS/Config/RCZ180_126.asm similarity index 59% rename from Source/HBIOS/Config/SCZ180_140.asm rename to Source/HBIOS/Config/RCZ180_126.asm index 03a6667c..89e89555 100644 --- a/Source/HBIOS/Config/SCZ180_140.asm +++ b/Source/HBIOS/Config/RCZ180_126.asm @@ -1,6 +1,6 @@ ; ;================================================================================================== -; SC140 STANDARD CONFIGURATION +; SC126 STANDARD CONFIGURATION ;================================================================================================== ; ; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE @@ -22,36 +22,47 @@ ; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO ; DIRECTORIES ABOVE THIS ONE). ; -#include "cfg_scz180.asm" +#DEFINE PLATFORM_NAME "Small Computer SC126", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#include "cfg_rcz180.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; -HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -; -LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) -; DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT +DIAGPORT .SET $0D ; DIAGNOSTIC PORT ADDRESS ; DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) ; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) ; -SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.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|RC|RCV9958|RCKBD] +MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_LINC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] +AYMODE .SET AYMODE_RCZ180 ; 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|DIDE|N8|DIO3] +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC] ; IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -; PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -; SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/SCZ180_130.asm b/Source/HBIOS/Config/RCZ180_130.asm similarity index 68% rename from Source/HBIOS/Config/SCZ180_130.asm rename to Source/HBIOS/Config/RCZ180_130.asm index ef3a4a15..b44e0ee6 100644 --- a/Source/HBIOS/Config/SCZ180_130.asm +++ b/Source/HBIOS/Config/RCZ180_130.asm @@ -22,43 +22,47 @@ ; 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 +#DEFINE PLATFORM_NAME "Small Computer SC130", " [", CONFIG, "]" ; -#include "cfg_scz180.asm" +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +#include "cfg_rcz180.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; -HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -; LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) -; DIAGENABLE .SET FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; -DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) ; UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.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|RC|RCV9958|RCKBD] +MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER ; -FDENABLE .SET TRUE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC] -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|DIDE|N8|DIO3] +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|EPWDC] ; IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -; PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -; SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY ; PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/SCZ180_131.asm b/Source/HBIOS/Config/RCZ180_131.asm similarity index 81% rename from Source/HBIOS/Config/SCZ180_131.asm rename to Source/HBIOS/Config/RCZ180_131.asm index eacbe6fe..67cefbe9 100644 --- a/Source/HBIOS/Config/SCZ180_131.asm +++ b/Source/HBIOS/Config/RCZ180_131.asm @@ -22,11 +22,11 @@ ; 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 +#DEFINE PLATFORM_NAME "Small Computer SC131", " [", CONFIG, "]" ; -#include "cfg_scz180.asm" +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +#include "cfg_rcz180.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ ; @@ -34,10 +34,7 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; -HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -; LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) -; DIAGENABLE .SET FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT ; DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) @@ -48,15 +45,8 @@ ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) ; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 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|EPWDC] -; IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -; PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -; SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY diff --git a/Source/HBIOS/Config/SCZ180_126.asm b/Source/HBIOS/Config/RCZ180_140.asm similarity index 73% rename from Source/HBIOS/Config/SCZ180_126.asm rename to Source/HBIOS/Config/RCZ180_140.asm index 72796034..0ddb9fc9 100644 --- a/Source/HBIOS/Config/SCZ180_126.asm +++ b/Source/HBIOS/Config/RCZ180_140.asm @@ -1,6 +1,6 @@ ; ;================================================================================================== -; SC126 STANDARD CONFIGURATION +; SC140 STANDARD CONFIGURATION ;================================================================================================== ; ; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE @@ -22,11 +22,11 @@ ; 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 +#DEFINE PLATFORM_NAME "Small Computer SC140", " [", CONFIG, "]" ; -#include "cfg_scz180.asm" +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +#include "cfg_rcz180.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ ; @@ -34,25 +34,28 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; -HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) +DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT +DIAGPORT .SET $0D ; DIAGNOSTIC PORT ADDRESS +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) ; UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) ; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_LINC ; 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|EPWDC] ; IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -; PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -; SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY ; PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ180_ext.asm b/Source/HBIOS/Config/RCZ180_ext.asm index 48842e6e..c3c793db 100644 --- a/Source/HBIOS/Config/RCZ180_ext.asm +++ b/Source/HBIOS/Config/RCZ180_ext.asm @@ -35,6 +35,9 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) @@ -45,7 +48,9 @@ TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCK MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; +; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER ; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) diff --git a/Source/HBIOS/Config/RCZ180_nat.asm b/Source/HBIOS/Config/RCZ180_nat.asm index 295b2387..623cdce0 100644 --- a/Source/HBIOS/Config/RCZ180_nat.asm +++ b/Source/HBIOS/Config/RCZ180_nat.asm @@ -35,6 +35,9 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) @@ -45,7 +48,9 @@ TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCK MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; +; AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER ; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) diff --git a/Source/HBIOS/Config/RCZ280_ext.asm b/Source/HBIOS/Config/RCZ280_ext.asm index eb4f2682..f2dd7592 100644 --- a/Source/HBIOS/Config/RCZ280_ext.asm +++ b/Source/HBIOS/Config/RCZ280_ext.asm @@ -48,6 +48,7 @@ MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VD 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) diff --git a/Source/HBIOS/Config/RCZ280_nat.asm b/Source/HBIOS/Config/RCZ280_nat.asm index a8f38801..7a82be80 100644 --- a/Source/HBIOS/Config/RCZ280_nat.asm +++ b/Source/HBIOS/Config/RCZ280_nat.asm @@ -48,6 +48,7 @@ MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VD 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) diff --git a/Source/HBIOS/Config/RCZ280_nat_zz.asm b/Source/HBIOS/Config/RCZ280_nat_zz.asm deleted file mode 100644 index e74f9d28..00000000 --- a/Source/HBIOS/Config/RCZ280_nat_zz.asm +++ /dev/null @@ -1,32 +0,0 @@ -; -;================================================================================================== -; RC2014 Z280 STANDARD CONFIGURATION (NATIVE Z280 MMU W/ LINEAR MEMORY ON ZZ80MB) -;================================================================================================== -; -; 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 "Config/RCZ280_nat.asm" -; -RAMLOC .SET 23 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE -RAMBIAS .SET (1 << (RAMLOC - 10)) ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -; -Z2U0HFC .SET TRUE ; Z2U 0: ENABLE HARDWARE FLOW CONTROL diff --git a/Source/HBIOS/Config/RCZ280_nat_zzr.asm b/Source/HBIOS/Config/RCZ280_nat_zzr.asm deleted file mode 100644 index 9f7b81d1..00000000 --- a/Source/HBIOS/Config/RCZ280_nat_zzr.asm +++ /dev/null @@ -1,43 +0,0 @@ -; -;================================================================================================== -; RC2014 Z280 STANDARD CONFIGURATION (NATIVE Z280 MMU W/ LINEAR MEMORY ON ZZRCC) -;================================================================================================== -; -; 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 "Config/RCZ280_nat.asm" -; -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 -RAMBIAS .SET (1 << (RAMLOC - 10)) ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -; -MDROM .SET TRUE ; MD: ENABLE ROM DISK -MDRAM .SET FALSE ; MD: ENABLE RAM DISK -; -; -Z2UOSC .SET (CPUOSC / 8) ; Z2U: OSC FREQUENCY IN MHZ -Z2U0HFC .SET TRUE ; Z2U0: ENABLE HARDWARE FLOW CONTROL diff --git a/Source/HBIOS/Config/RCZ280_zz80mb.asm b/Source/HBIOS/Config/RCZ280_zz80mb.asm new file mode 100644 index 00000000..f1feaba4 --- /dev/null +++ b/Source/HBIOS/Config/RCZ280_zz80mb.asm @@ -0,0 +1,68 @@ +; +;================================================================================================== +; RC2014 Z280 STANDARD CONFIGURATION (NATIVE Z280 MMU W/ LINEAR MEMORY ON ZZ80MB) +;================================================================================================== +; +; 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 PLATFORM_NAME "ZZ80MB", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#include "cfg_rcz280.asm" +; +CPUOSC .SET 12000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +; +MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] +; +RAMLOC .SET 23 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE +RAMBIAS .SET (1 << (RAMLOC - 10)) ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +; +Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) +Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) +Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) +; +Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +Z2U0HFC .SET TRUE ; Z2U 0: ENABLE HARDWARE FLOW CONTROL +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +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|EPWDC] +; +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) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ280_zzrc.asm b/Source/HBIOS/Config/RCZ280_zzrc.asm new file mode 100644 index 00000000..32b4a4cd --- /dev/null +++ b/Source/HBIOS/Config/RCZ280_zzrc.asm @@ -0,0 +1,76 @@ +; +;================================================================================================== +; RC2014 Z280 STANDARD CONFIGURATION (NATIVE Z280 MMU W/ LINEAR MEMORY ON ZZRC) +;================================================================================================== +; +; 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 PLATFORM_NAME "ZZRC", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#include "cfg_rcz280.asm" +; +CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ +INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +; +MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] +; +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 VERIFICATION (0=DISABLED) +; +RAMLOC .SET 18 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE +RAMBIAS .SET (1 << (RAMLOC - 10)) ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +; +Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) +Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) +Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) +; +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET FALSE ; MD: ENABLE RAM DISK +; +Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +Z2UOSC .SET (CPUOSC / 8) ; Z2U: OSC FREQUENCY IN MHZ +Z2U0HFC .SET TRUE ; Z2U0: ENABLE HARDWARE FLOW CONTROL +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +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|EPWDC] +; +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) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ80_easy.asm b/Source/HBIOS/Config/RCZ80_easy.asm index 3245a621..01d45484 100644 --- a/Source/HBIOS/Config/RCZ80_easy.asm +++ b/Source/HBIOS/Config/RCZ80_easy.asm @@ -62,6 +62,7 @@ MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VD 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) diff --git a/Source/HBIOS/Config/RCZ80_kio.asm b/Source/HBIOS/Config/RCZ80_kio.asm index 2c1c7029..424e29b8 100644 --- a/Source/HBIOS/Config/RCZ80_kio.asm +++ b/Source/HBIOS/Config/RCZ80_kio.asm @@ -31,7 +31,7 @@ INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -RP5RTCENABLE .SET TRUE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) KIOENABLE .SET TRUE ; ENABLE ZILOG KIO SUPPORT ; CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT @@ -58,6 +58,7 @@ MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VD 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) diff --git a/Source/HBIOS/Config/RCZ80_skz.asm b/Source/HBIOS/Config/RCZ80_skz.asm index 08bb1d57..2c4f8841 100644 --- a/Source/HBIOS/Config/RCZ80_skz.asm +++ b/Source/HBIOS/Config/RCZ80_skz.asm @@ -37,7 +37,7 @@ LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) LEDPORT .SET $6E ; STATUS LED PORT ADDRESS ; DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -RP5RTCENABLE .SET TRUE ; RP5C01 RTC BASED CLOCK (RP5RTC.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) @@ -53,6 +53,7 @@ MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VD 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) diff --git a/Source/HBIOS/Config/RCZ80_std.asm b/Source/HBIOS/Config/RCZ80_std.asm index 6ee7124d..ed0a7e1a 100644 --- a/Source/HBIOS/Config/RCZ80_std.asm +++ b/Source/HBIOS/Config/RCZ80_std.asm @@ -30,7 +30,7 @@ CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -RP5RTCENABLE .SET TRUE ; RP5C01 RTC BASED CLOCK (RP5RTC.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) @@ -44,6 +44,7 @@ MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VD 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) diff --git a/Source/HBIOS/Config/RCZ80_tiny.asm b/Source/HBIOS/Config/RCZ80_tiny.asm index fed4d843..20663e88 100644 --- a/Source/HBIOS/Config/RCZ80_tiny.asm +++ b/Source/HBIOS/Config/RCZ80_tiny.asm @@ -67,6 +67,7 @@ MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VD 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) diff --git a/Source/HBIOS/Config/RCZ80_zrc.asm b/Source/HBIOS/Config/RCZ80_zrc.asm index 44997489..5afc93d1 100644 --- a/Source/HBIOS/Config/RCZ80_zrc.asm +++ b/Source/HBIOS/Config/RCZ80_zrc.asm @@ -22,31 +22,38 @@ ; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO ; DIRECTORIES ABOVE THIS ONE). ; +#DEFINE PLATFORM_NAME "ZRC", " [", CONFIG, "]" +; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; #include "cfg_rcz80.asm" -; +CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; -CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ -; RAMSIZE .SET 1536 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] ; 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) ; 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|RC|RCV9958|RCKBD] +MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +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|EPWDC] ; 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) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY ; PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ80_zrc_ram.asm b/Source/HBIOS/Config/RCZ80_zrc_ram.asm index 99fea429..f900abc1 100644 --- a/Source/HBIOS/Config/RCZ80_zrc_ram.asm +++ b/Source/HBIOS/Config/RCZ80_zrc_ram.asm @@ -22,13 +22,14 @@ ; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO ; DIRECTORIES ABOVE THIS ONE). ; +#DEFINE PLATFORM_NAME "ZRC", " [", CONFIG, "]" +; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; #include "cfg_rcz80.asm" ; -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; RAMSIZE .SET 2048 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) @@ -39,17 +40,24 @@ MDROM .SET FALSE ; MD: ENABLE ROM DISK 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) ; 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|RC|RCV9958|RCKBD] +MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +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|EPWDC] ; 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) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY ; PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RPH_std.asm b/Source/HBIOS/Config/RPH_std.asm index ce191500..3dedea59 100644 --- a/Source/HBIOS/Config/RPH_std.asm +++ b/Source/HBIOS/Config/RPH_std.asm @@ -27,6 +27,7 @@ #include "cfg_rph.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; @@ -36,6 +37,4 @@ Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) ; -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index dab43fb5..1ab0c143 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -3,7 +3,7 @@ ; ROMWBW 2.X CONFIGURATION DEFAULTS FOR DYNO ;================================================================================================== ; -; THIS FILE CONTAINS THE FULL EQU OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; 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. @@ -56,6 +56,9 @@ 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 ; EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION ; @@ -80,7 +83,12 @@ 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) +PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .EQU KBD_US ; KBD 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 FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC] @@ -103,8 +111,25 @@ 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 FALSE ; 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 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 TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 @@ -118,6 +143,25 @@ Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) ; SIOENABLE .EQU FALSE ; 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] +SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .EQU 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .EQU SER_115200_8N1 ; 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 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .EQU SER_115200_8N1 ; 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] +SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .EQU 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .EQU SER_115200_8N1 ; 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 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .EQU SER_115200_8N1 ; 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 ; @@ -125,7 +169,7 @@ 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_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; @@ -173,6 +217,12 @@ PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP PPIDE0BASE .EQU $4C ; 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_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] @@ -180,14 +230,21 @@ 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/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) ; 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) ; diff --git a/Source/Makefile b/Source/Makefile index b012323f..74e1fa94 100644 --- a/Source/Makefile +++ b/Source/Makefile @@ -15,7 +15,7 @@ SUBDIRS += RomDsk SUBDIRS += HBIOS SUBDIRS += Images SUBDIRS += ZRC -SUBDIRS += ZZR +SUBDIRS += ZZRC #SUBDIRS += Doc TOOLS = ../Tools include $(TOOLS)/Makefile.inc diff --git a/Source/ZZR/Build.cmd b/Source/ZZR/Build.cmd deleted file mode 100644 index fea6f6bd..00000000 --- a/Source/ZZR/Build.cmd +++ /dev/null @@ -1,42 +0,0 @@ -@echo off -setlocal - -set ROMFILE=..\..\Binary\RCZ280_nat_zzr.rom -set ROMSIZE=262144 - -if not exist %ROMFILE% goto :eof - -:: -:: The ROM image *must* be exactly 256K or the resulting disk -:: image produced below will be invalid. Check for the proper size. -:: - -call :filesize %ROMFILE% - -if "%FILESIZE%" neq "%ROMSIZE%" ( - echo. - echo. - echo ERROR: "%ROMFILE%" is not exactly %ROMSIZE% bytes as required!!! - echo You must specify a ROMSIZE of "256" when building the ZZRCC ROM image. - echo. - echo. - exit /b 1 -) - -rem ..\..\Tools\srecord\srec_cat.exe ..\..\Binary\RCZ280_nat_zzr.rom -Binary -Exclude 0x5000 0x7000 zzr_romldr.hex -Intel -Output ..\..\Binary\RCZ280_nat_zzr.hex -Intel || exit /b - -..\..\Tools\srecord\srec_cat.exe ..\..\Binary\RCZ280_nat_zzr.rom -Binary -Output ..\..\Binary\RCZ280_nat_zzr.hex -Intel || exit /b - -rem ..\..\Tools\srecord\srec_cat.exe ..\..\Binary\RCZ280_nat_zzr.hex -Intel -Output ..\..\Binary\RCZ280_nat_zzr_ldr.rom -Binary || exit /b - -rem copy /b zzr_cfldr.bin + zzr_ptbl.bin + zzr_fill_1.bin + zzr_mon.bin + zzr_fill_2.bin + ..\..\Binary\RCZ280_nat_zzr_ldr.rom + zzr_fill_3.bin ..\..\Binary\hd1k_zzr_prefix.dat || exit /b - -copy /b zzr_cfldr.bin + zzr_ptbl.bin + zzr_fill_1.bin + zzr_mon.bin + zzr_fill_2.bin + ..\..\Binary\RCZ280_nat_zzr.rom + zzr_fill_3.bin ..\..\Binary\hd1k_zzr_prefix.dat || exit /b - -copy /b ..\..\Binary\hd1k_zzr_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\hd1k_zzr_combo.img || exit /b - -goto :eof - -:filesize -set FILESIZE=%~z1 -goto :eof \ No newline at end of file diff --git a/Source/ZZR/Makefile b/Source/ZZR/Makefile deleted file mode 100644 index 7e369338..00000000 --- a/Source/ZZR/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -HD1KZZRPREFIX = hd1k_zzr_prefix.dat -HD1KZZZROMBOIMG = hd1k_zzr_combo.img -ZZRROM = ../../Binary/RCZ280_nat_zzr.rom -ZZRROMHEX = RCZ280_nat_zzr.hex -HD1KIMGS = ../../Binary/hd1k_cpm22.img ../../Binary/hd1k_zsdos.img ../../Binary/hd1k_nzcom.img \ - ../../Binary/hd1k_cpm3.img ../../Binary/hd1k_zpm3.img ../../Binary/hd1k_ws4.img -ZZRROMSIZE = 262144 - -OBJECTS := - -ifneq ($(wildcard $(ZZRROM)),) - OBJECTS += $(ZZRROMHEX) $(HD1KZZRPREFIX) $(HD1KZZZROMBOIMG) -endif - -DEST=../../Binary - -TOOLS = ../../Tools - -include $(TOOLS)/Makefile.inc - -DIFFPATH = $(DIFFTO)/Binary - -zzrromchk: - [ `wc -c $(ZZRROM) | awk '{print $$1}'` = $(ZZRROMSIZE) ] - -$(HD1KZZRPREFIX): zzrromchk - cat zzr_cfldr.bin zzr_ptbl.bin zzr_fill_1.bin zzr_mon.bin zzr_fill_2.bin $(ZZRROM) zzr_fill_3.bin >$@ - -$(HD1KZZZROMBOIMG): zzrromchk $(HD1KZZRPREFIX) $(HD1KIMGS) - cat $(HD1KZZRPREFIX) $(HD1KIMGS) > $@ - -$(ZZRROMHEX): zzrromchk $(ZZRROM) - srec_cat $(ZZRROM) -Binary -Output $(ZZRROMHEX) -Intel -CRLF diff --git a/Source/ZZR/zzr_cfldr.bin b/Source/ZZR/zzr_cfldr.bin deleted file mode 100644 index 04b6c228f2d6728d2587b2f02032c46423bafa20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmc(XJq|%p6ojuvRL0NqUO8;!ZpA)ScEAqK4tNp0#Ot)DR2&VRXm!^}>_H}zX})hV zOYtBxZ}h0OJ$Q_f`6_M=uhH-kYn-uV%e}eH#8s^M=7I?=hZu>LWfQLGHr2;m`*W8A YT)30lN5b=T;J1~CyLFp{qdxwb4}%glE&u=k diff --git a/Source/ZZR/zzr_fill_1.bin b/Source/ZZR/zzr_fill_1.bin deleted file mode 100644 index 705bedcddb656bcfd4ad4f83690b66be3a6d6e7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126464 zcmeIufdBvi0K=g9Q(xf#g-~I@fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA;2#+7 C4*&rG diff --git a/Source/ZZR/zzr_fill_2.bin b/Source/ZZR/zzr_fill_2.bin deleted file mode 100644 index 294f4016d05bdd696670c4840f1f36a71f9239de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeIuF#!Mo0K%a4Pi+hzh(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM q7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjMyaxtA00031 diff --git a/Source/ZZR/zzr_fill_3.bin b/Source/ZZR/zzr_fill_3.bin deleted file mode 100644 index 38b2e993350011e5b3c7e3f0f8a6ffe2ef362cc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638976 zcmeIu0Sy2E0K%a6Pi+o2h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<_~|fdRmW B00961 diff --git a/Source/ZZR/zzr_mon.bin b/Source/ZZR/zzr_mon.bin deleted file mode 100644 index e9a04d7459570e959ce63495effc30735dc8ab69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 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 T($ezgfCgEx0U`M>L)!lWH-cUr diff --git a/Source/ZZR/zzr_ptbl.bin b/Source/ZZR/zzr_ptbl.bin deleted file mode 100644 index 5e3a2a4d5810860783a54d96f0114ee66e39c27d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 scmZQz7@9!0O>rj3<%}G9{1^T+aDdnXKz#5&8<-Dd|KJA+;sv3r0Ji-JT>t<8 diff --git a/Source/ZZR/Bank Layout.txt b/Source/ZZRC/Bank Layout.txt similarity index 100% rename from Source/ZZR/Bank Layout.txt rename to Source/ZZRC/Bank Layout.txt diff --git a/Source/ZZRC/Build.cmd b/Source/ZZRC/Build.cmd new file mode 100644 index 00000000..700e21b7 --- /dev/null +++ b/Source/ZZRC/Build.cmd @@ -0,0 +1,42 @@ +:: @echo off +setlocal + +set ROMFILE=..\..\Binary\RCZ280_zzrc.rom +set ROMSIZE=262144 + +if not exist %ROMFILE% goto :eof + +:: +:: The ROM image *must* be exactly 256K or the resulting disk +:: image produced below will be invalid. Check for the proper size. +:: + +call :filesize %ROMFILE% + +if "%FILESIZE%" neq "%ROMSIZE%" ( + echo. + echo. + echo ERROR: "%ROMFILE%" is not exactly %ROMSIZE% bytes as required!!! + echo You must specify a ROMSIZE of "256" when building the ZZRCC ROM image. + echo. + echo. + exit /b 1 +) + +rem ..\..\Tools\srecord\srec_cat.exe ..\..\Binary\RCZ280_zzrc.rom -Binary -Exclude 0x5000 0x7000 zzrc_romldr.hex -Intel -Output ..\..\Binary\RCZ280_zzrc.hex -Intel || exit /b + +..\..\Tools\srecord\srec_cat.exe ..\..\Binary\RCZ280_zzrc.rom -Binary -Output ..\..\Binary\RCZ280_zzrc.hex -Intel || exit /b + +rem ..\..\Tools\srecord\srec_cat.exe ..\..\Binary\RCZ280_zzrc.hex -Intel -Output ..\..\Binary\RCZ280_zzrc_ldr.rom -Binary || exit /b + +rem copy /b zzrc_cfldr.bin + zzrc_ptbl.bin + zzrc_fill_1.bin + zzrc_mon.bin + zzrc_fill_2.bin + ..\..\Binary\RCZ280_zzrc_ldr.rom + zzrc_fill_3.bin ..\..\Binary\hd1k_zzrc_prefix.dat || exit /b + +copy /b zzrc_cfldr.bin + zzrc_ptbl.bin + zzrc_fill_1.bin + zzrc_mon.bin + zzrc_fill_2.bin + ..\..\Binary\RCZ280_zzrc.rom + zzrc_fill_3.bin ..\..\Binary\hd1k_zzrc_prefix.dat || exit /b + +copy /b ..\..\Binary\hd1k_zzrc_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\hd1k_zzrc_combo.img || exit /b + +goto :eof + +:filesize +set FILESIZE=%~z1 +goto :eof \ No newline at end of file diff --git a/Source/ZZR/Clean.cmd b/Source/ZZRC/Clean.cmd similarity index 100% rename from Source/ZZR/Clean.cmd rename to Source/ZZRC/Clean.cmd diff --git a/Source/ZZRC/Makefile b/Source/ZZRC/Makefile new file mode 100644 index 00000000..935a7bf2 --- /dev/null +++ b/Source/ZZRC/Makefile @@ -0,0 +1,33 @@ +HD1KZZRCPREFIX = hd1k_zzrc_prefix.dat +HD1KZZRCCOMBOIMG = hd1k_zzrc_combo.img +ZZRCROM = ../../Binary/RCZ280_zzrc.rom +ZZRCROMHEX = RCZ280_zzrc.hex +HD1KIMGS = ../../Binary/hd1k_cpm22.img ../../Binary/hd1k_zsdos.img ../../Binary/hd1k_nzcom.img \ + ../../Binary/hd1k_cpm3.img ../../Binary/hd1k_zpm3.img ../../Binary/hd1k_ws4.img +ZZRCROMSIZE = 262144 + +OBJECTS := + +ifneq ($(wildcard $(ZZRCROM)),) + OBJECTS += $(ZZRCROMHEX) $(HD1KZZRCPREFIX) $(HD1KZZRCCOMBOIMG) +endif + +DEST=../../Binary + +TOOLS = ../../Tools + +include $(TOOLS)/Makefile.inc + +DIFFPATH = $(DIFFTO)/Binary + +zzrcromchk: + [ `wc -c $(ZZRCROM) | awk '{print $$1}'` = $(ZZRCROMSIZE) ] + +$(HD1KZZRCPREFIX): zzrcromchk + cat zzrc_cfldr.bin zzrc_ptbl.bin zzrc_fill_1.bin zzrc_mon.bin zzrc_fill_2.bin $(ZZRCROM) zzrc_fill_3.bin >$@ + +$(HD1KZZRCCOMBOIMG): zzrcromchk $(HD1KZZRCPREFIX) $(HD1KIMGS) + cat $(HD1KZZRCPREFIX) $(HD1KIMGS) > $@ + +$(ZZRCROMHEX): zzrcromchk $(ZZRCROM) + srec_cat $(ZZRCROM) -Binary -Output $(ZZRCROMHEX) -Intel -CRLF diff --git a/Source/ZZR/ZZR Disk Layout.txt b/Source/ZZRC/ZZRC Disk Layout.txt similarity index 100% rename from Source/ZZR/ZZR Disk Layout.txt rename to Source/ZZRC/ZZRC Disk Layout.txt diff --git a/Source/ver.inc b/Source/ver.inc index c8c96fad..81181ce0 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.196" +#DEFINE BIOSVER "3.1.1-pre.197" diff --git a/Source/ver.lib b/Source/ver.lib index 37e1da89..b10a6bff 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.196" + db "3.1.1-pre.197" endm