mirror of https://github.com/wwarthen/RomWBW.git
137 changed files with 3676 additions and 2055 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,431 +1,433 @@ |
|||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
**RomWBW Introduction** \ |
|
||||
Version 3.6 \ |
|
||||
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ |
|
||||
19 Jun 2025 |
|
||||
|
|
||||
# Overview |
|
||||
|
|
||||
RomWBW software provides a complete, commercial quality implementation |
|
||||
of CP/M (and work-alike) operating systems and applications for modern |
|
||||
Z80/180/280 retro-computing hardware systems. |
|
||||
|
|
||||
A wide variety of platforms are supported including those produced by |
|
||||
these developer communities: |
|
||||
|
|
||||
- [RetroBrew Computers](https://www.retrobrewcomputers.org) |
|
||||
(<https://www.retrobrewcomputers.org>) |
|
||||
- [RC2014](https://rc2014.co.uk) (<https://rc2014.co.uk>), |
|
||||
[RC2014-Z80](https://groups.google.com/g/rc2014-z80) |
|
||||
(<https://groups.google.com/g/rc2014-z80>) |
|
||||
- [Retro Computing](https://groups.google.com/g/retro-comp) |
|
||||
(<https://groups.google.com/g/retro-comp>) |
|
||||
- [Small Computer Central](https://smallcomputercentral.com/) |
|
||||
(<https://smallcomputercentral.com/>) |
|
||||
|
|
||||
A complete list of the currently supported platforms is found in [RomWBW |
|
||||
Hardware](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Hardware.pdf) |
|
||||
. |
|
||||
|
|
||||
# Description |
|
||||
|
|
||||
## Primary Features |
|
||||
|
|
||||
By design, RomWBW isolates all of the hardware specific functions in the |
|
||||
ROM chip itself. The ROM provides a hardware abstraction layer such that |
|
||||
all of the operating systems and applications on a disk will run on any |
|
||||
RomWBW-based system. To put it simply, you can take a disk (or CF/SD/USB |
|
||||
Card) and move it between systems transparently. |
|
||||
|
|
||||
Supported hardware features of RomWBW include: |
|
||||
|
|
||||
- Z80 Family CPUs including Z80, Z180, and Z280 |
|
||||
- Banked memory services for several banking designs |
|
||||
- Disk drivers for RAM, ROM, Floppy, IDE ATA/ATAPI, CF, SD, USB, Zip, |
|
||||
Iomega |
|
||||
- Serial drivers including UART (16550-like), ASCI, ACIA, SIO |
|
||||
- Video drivers including TMS9918, SY6545, MOS8563, HD6445, Xosera |
|
||||
- Keyboard (PS/2) drivers via VT8242 or PPI interfaces |
|
||||
- Real time clock drivers including DS1302, BQ4845 |
|
||||
- Support for CP/NET networking using Wiznet, MT011 or Serial |
|
||||
- Built-in VT-100 terminal emulation support |
|
||||
|
|
||||
A dynamic disk drive letter assignment mechanism allows mapping |
|
||||
operating system drive letters to any available disk media. |
|
||||
Additionally, mass storage devices (IDE Disk, CF Card, SD Card, etc.) |
|
||||
support the use of multiple slices (up to 256 per device). Each slice |
|
||||
contains a complete CP/M filesystem and can be mapped independently to |
|
||||
any drive letter. This overcomes the inherent size limitations in legacy |
|
||||
OSes and allows up to 2GB of addressable storage on a single device, |
|
||||
with up to 128MB accessible at any one time. |
|
||||
|
|
||||
## Included Software |
|
||||
|
|
||||
Multiple disk images are provided in the distribution. Most disk images |
|
||||
contain a complete, bootable, ready-to-run implementation of a specific |
|
||||
operating system. A “combo” disk image contains multiple slices, each |
|
||||
with a full operating system implementation. If you use this disk image, |
|
||||
you can easily pick whichever operating system you want to boot without |
|
||||
changing media. |
|
||||
|
|
||||
Some of the included software: |
|
||||
|
|
||||
- Operating Systems (CP/M 2.2, ZSDOS, NZ-COM, CP/M 3, ZPM3, Z3PLUS, QPM |
|
||||
) |
|
||||
- Support for other operating systems, p-System, FreeRTOS, and FUZIX. |
|
||||
- Programming Tools (Z80ASM, Turbo Pascal, Forth, Cowgol) |
|
||||
- C Compiler’s including Aztec-C, and HI-TECH C |
|
||||
- Microsoft Basic Compiler, and Microsoft Fortran |
|
||||
- Some games such as Colossal Cave, Zork, etc |
|
||||
- Wordstar Word processing software |
|
||||
|
|
||||
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 |
|
||||
|
|
||||
A tool is provided that allows you to access a FAT-12/16/32 filesystem. |
|
||||
The FAT filesystem may be coresident on the same disk media as RomWBW |
|
||||
slices or on stand-alone media. This makes exchanging files with modern |
|
||||
OSes such as Windows, MacOS, and Linux very easy. |
|
||||
|
|
||||
## ROM Distribution |
|
||||
|
|
||||
The [RomWBW Repository](https://github.com/wwarthen/RomWBW) |
|
||||
(<https://github.com/wwarthen/RomWBW>) on GitHub is the official |
|
||||
distribution location for all project source and documentation. |
|
||||
|
|
||||
RomWBW is distributed as both source code and pre-built ROM and disk |
|
||||
images. |
|
||||
|
|
||||
The pre-built ROM images distributed with RomWBW are based on the |
|
||||
default system configurations as determined by the hardware |
|
||||
provider/designer. The pre-built ROM firmware images are generally |
|
||||
suitable for most users. |
|
||||
|
|
||||
The fully-built distribution releases are available on the [RomWBW |
|
||||
Releases Page](https://github.com/wwarthen/RomWBW/releases) |
|
||||
(<https://github.com/wwarthen/RomWBW/releases>) of the repository. |
|
||||
|
|
||||
On this page, you will normally see a Development Snapshot as well as |
|
||||
recent stable releases. Unless you have a specific reason, I suggest you |
|
||||
stick to the most recent stable release. |
|
||||
|
|
||||
The asset named RomWBW-vX.X.X-Package.zip includes all pre-built ROM and |
|
||||
Disk images as well as full source code. The other assets contain only |
|
||||
source code and do not have the pre-built ROM or disk images. |
|
||||
|
|
||||
#### Distribution Directory Layout |
|
||||
|
|
||||
The RomWBW distribution is a compressed zip archive file organized in a |
|
||||
set of directories. Each of these directories has its own ReadMe.txt |
|
||||
file describing the contents in detail. In summary, these directories |
|
||||
are: |
|
||||
|
|
||||
| **Directory** | **Description** | |
|
||||
|----|----| |
|
||||
| **Binary** | The final output files of the build process are placed here. Most importantly, the ROM images with the file names ending in “.rom” and disk images ending in .img. | |
|
||||
| **Doc** | Contains various detailed documentation, both RomWBW specifically as well as the operating systems and applications. | |
|
||||
| **Source** | Contains the source code files used to build the software and ROM images. | |
|
||||
| **Tools** | Contains the programs that are used by the build process or that may be useful in setting up your system. | |
|
||||
|
|
||||
#### Building from Source |
|
||||
|
|
||||
It is also very easy to modify and build custom ROM images that fully |
|
||||
tailor the firmware to your specific preferences. All tools required to |
|
||||
build custom ROM firmware under Windows are included – no need to |
|
||||
install assemblers, etc. The firmware can also be built using Linux or |
|
||||
MacOS after confirming a few standard tools have been installed. |
|
||||
|
|
||||
## Installation & Operation |
|
||||
|
|
||||
In general, installation of RomWBW on your platform is very simple. You |
|
||||
just need to program your ROM with the correct ROM image from the RomWBW |
|
||||
distribution. Subsequently, you can write disk images on your disk |
|
||||
drives (IDE disk, CF Card, SD Card, etc.) which then provides even more |
|
||||
functionality. |
|
||||
|
|
||||
Complete instructions for installation and operation of RomWBW are found |
|
||||
in the [RomWBW User |
|
||||
Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20User%20Guide.pdf). |
|
||||
It is also a good idea to review the [Release |
|
||||
Notes](https://github.com/wwarthen/RomWBW/blob/master/RELEASE_NOTES.md) |
|
||||
for helpful release-specific information. |
|
||||
|
|
||||
## Documentation |
|
||||
|
|
||||
There are several documents that form the core of the RomWBW |
|
||||
documentation: |
|
||||
|
|
||||
- [RomWBW User |
|
||||
Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20User%20Guide.pdf) |
|
||||
is the main user guide for RomWBW, it covers the major topics of how |
|
||||
to install, manage and use RomWBW, and includes additional guidance to |
|
||||
the use of some of the operating systems supported by RomWBW |
|
||||
|
|
||||
- [RomWBW |
|
||||
Hardware](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Hardware.pdf) |
|
||||
contains a description of all the hardware platforms, and devices |
|
||||
supported by RomWBW. |
|
||||
|
|
||||
- [RomWBW |
|
||||
Applications](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Applications.pdf) |
|
||||
is a reference for the ROM-hosted and OS-hosted applications created |
|
||||
or customized to enhance the operation of RomWBW. |
|
||||
|
|
||||
- [RomWBW Disk |
|
||||
Catalog](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Disk%20Catalog.pdf) |
|
||||
is a reference for the contents of the disk images provided with |
|
||||
RomWBW, with a description of many of the files on each image |
|
||||
|
|
||||
- [RomWBW System |
|
||||
Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20System%20Guide.pdf) |
|
||||
discusses much of the internal design and construction of RomWBW. It |
|
||||
includes a reference for the RomWBW HBIOS API functions. |
|
||||
|
|
||||
An online HTML version of this documentation is hosted at |
|
||||
<https://wwarthen.github.io/RomWBW>. |
|
||||
|
|
||||
Each of the operating systems and ROM applications included with RomWBW |
|
||||
are sophisticated tools in their own right. It is not reasonable to |
|
||||
fully document their usage. However, you will find complete manuals in |
|
||||
PDF format in the Doc directory of the distribution. The intention of |
|
||||
this documentation is to describe the operation of RomWBW and the ways |
|
||||
in which it enhances the operation of the included applications and |
|
||||
operating systems. |
|
||||
|
|
||||
Since RomWBW is purely a software product for many different platforms, |
|
||||
the documentation does **not** cover hardware construction, |
|
||||
configuration, or troubleshooting – please see your hardware provider |
|
||||
for this information. |
|
||||
|
|
||||
# Support |
|
||||
|
|
||||
## Getting Assistance |
|
||||
|
|
||||
The best way to get assistance with RomWBW or any aspect of the |
|
||||
RetroBrew Computers projects is via one of 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) |
|
||||
|
|
||||
Submission of issues and bugs are welcome at the [RomWBW GitHub |
|
||||
Repository](https://github.com/wwarthen/RomWBW). |
|
||||
|
|
||||
Also feel free to email Wayne Warthen at <wwarthen@gmail.com>. I am |
|
||||
happy to provide support adapting RomWBW to new or modified systems |
|
||||
|
|
||||
# Contributions |
|
||||
|
|
||||
All source code and distributions are maintained on GitHub. |
|
||||
Contributions of all kinds to RomWBW are very welcome. |
|
||||
|
|
||||
## Acknowledgments |
|
||||
|
|
||||
I want to acknowledge that a great deal of the code and inspiration for |
|
||||
RomWBW has been provided by or derived from the work of others in the |
|
||||
RetroBrew Computers Community. I sincerely appreciate all of their |
|
||||
contributions. The list below is probably missing many names – please |
|
||||
let me know if I missed you! |
|
||||
|
|
||||
- Andrew Lynch started it all when he created the N8VEM Z80 SBC which |
|
||||
became the first platform RomWBW supported. Some of his original code |
|
||||
can still be found in RomWBW. |
|
||||
|
|
||||
- Dan Werner wrote much of the code from which RomWBW was originally |
|
||||
derived and he has always been a great source of knowledge and advice. |
|
||||
|
|
||||
- Douglas Goodall contributed code, time, testing, and advice in “the |
|
||||
early days”. He created an entire suite of application programs to |
|
||||
enhance the use of RomWBW. Unfortunately, they have become unusable |
|
||||
due to internal changes within RomWBW. As of RomWBW 2.6, these |
|
||||
applications are no longer provided. |
|
||||
|
|
||||
- Sergey Kiselev created several hardware platforms for RomWBW including |
|
||||
the very popular Zeta. |
|
||||
|
|
||||
- David Giles created support for the Z180 CSIO which is now included SD |
|
||||
Card driver. |
|
||||
|
|
||||
- Phil Summers contributed the Forth and BASIC adaptations in ROM, the |
|
||||
AY-3-8910 sound driver, DMA support, and a long list of general code |
|
||||
and documentation enhancements. |
|
||||
|
|
||||
- Ed Brindley contributed some of the code that supports the RCBus |
|
||||
platform. |
|
||||
|
|
||||
- Spencer Owen created the RC2014 series of hobbyist kit computers which |
|
||||
has exponentially increased RomWBW usage. Some of his kits include |
|
||||
RomWBW. |
|
||||
|
|
||||
- Stephen Cousins has likewise created a series of hobbyist kit |
|
||||
computers at Small Computer Central and is distributing RomWBW with |
|
||||
many of them. |
|
||||
|
|
||||
- Alan Cox has contributed some driver code and has provided a great |
|
||||
deal of advice. |
|
||||
|
|
||||
- The CP/NET client files were developed by Douglas Miller. |
|
||||
|
|
||||
- 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 eZ80 CPU support, the sound driver |
|
||||
interface, and the SN76489 sound driver. |
|
||||
|
|
||||
- The RomWBW Disk Catalog document was produced by Mykl Orders. |
|
||||
|
|
||||
- Rob Prouse has created many of the supplemental disk images including |
|
||||
Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft BASIC Compiler, |
|
||||
Microsoft Fortran Compiler, and a Games compendium. |
|
||||
|
|
||||
- Martin R has provided substantial help reviewing and improving the |
|
||||
User Guide and Applications documents. |
|
||||
|
|
||||
- Mark Pruden has made a wide variety of contributions including: |
|
||||
|
|
||||
- significant content in the Disk Catalog and User Guide |
|
||||
- creation of the Introduction and Hardware documents |
|
||||
- Z3PLUS operating system disk image |
|
||||
- COPYSL utility |
|
||||
- SLABEL utility |
|
||||
- a feature for RomWBW configuration by NVRAM |
|
||||
- the /B bulk mode of disk assignment to the ASSIGN utility |
|
||||
|
|
||||
- Jacques Pelletier has contributed the DS1501 RTC driver code. |
|
||||
|
|
||||
- Jose Collado has contributed enhancements to the TMS driver including |
|
||||
compatibility with standard TMS register configuration. |
|
||||
|
|
||||
- Kevin Boone has contributed a generic HBIOS date/time utility (WDATE). |
|
||||
|
|
||||
- Matt Carroll has contributed a fix to XM.COM that corrects the port |
|
||||
specification when doing a send. |
|
||||
|
|
||||
- Dean Jenkins enhanced the build process to accommodate the Raspberry |
|
||||
Pi 4. |
|
||||
|
|
||||
- Tom Plano has contributed a new utility (HTALK) to allow talking |
|
||||
directly to HBIOS COM ports. |
|
||||
|
|
||||
- Lars Nelson has contributed several generic utilities such as a |
|
||||
universal (OS agnostic) UNARC application. |
|
||||
|
|
||||
- Dylan Hall added support for specifying a secondary console. |
|
||||
|
|
||||
- Bill Shen has contributed boot loaders for several of his systems. |
|
||||
|
|
||||
- Laszlo Szolnoki has contributed an EF9345 video display controller |
|
||||
driver. |
|
||||
|
|
||||
- Ladislau Szilagyi has contributed an enhanced version of CP/M Cowgol |
|
||||
that leverages RomWBW memory banking. |
|
||||
|
|
||||
- Les Bird has contributed support for the NABU w/ Option Board |
|
||||
|
|
||||
- Rob Gowin created an online documentation site via MkDocs, and |
|
||||
contributed a driver for the Xosera FPGA-based video controller. |
|
||||
|
|
||||
- Jörg Linder has contributed disassembled and nicely commented source |
|
||||
for ZSDOS2 and the BPBIOS utilities. |
|
||||
|
|
||||
## Related Projects |
|
||||
|
|
||||
Outside of the hardware platforms adapted to RomWBW, there are a variety |
|
||||
of projects that either target RomWBW specifically or provide a |
|
||||
RomWBW-specific variation. These efforts are greatly appreciated and are |
|
||||
listed below. Please contact the author if there are any other such |
|
||||
projects that are not listed. |
|
||||
|
|
||||
#### Z88DK |
|
||||
|
|
||||
Z88DK is a software powerful development kit for Z80 computers |
|
||||
supporting both C and assembly language. This kit now provides specific |
|
||||
library support for RomWBW HBIOS. The Z88DK project is hosted at |
|
||||
<https://github.com/z88dk/z88dk>. |
|
||||
|
|
||||
#### Paleo Editor |
|
||||
|
|
||||
Steve Garcia has created a Windows-hosted IDE that is tailored to |
|
||||
development of RomWBW. The project can be found at |
|
||||
<https://github.com/alloidian/PaleoEditor>. |
|
||||
|
|
||||
#### Z80 fig-FORTH |
|
||||
|
|
||||
Dimitri Theulings’ implementation of fig-FORTH for the Z80 has a |
|
||||
RomWBW-specific variant. The project is hosted at |
|
||||
<https://github.com/dimitrit/figforth>. |
|
||||
|
|
||||
#### Assembly Language Programming for the RC2014 Zed |
|
||||
|
|
||||
Bruce Hall has written a very nice document that describes how to |
|
||||
develop assembly language applications on RomWBW. It begins with the |
|
||||
setup and configuration of a new RC2014 Zed system running RomWBW. It |
|
||||
describes not only generic CP/M application development, but also RomWBW |
|
||||
HBIOS programming and bare metal programming. The latest copy of this |
|
||||
document is hosted at [http://w8bh.net/Assembly for |
|
||||
RC2014Z.pdf](http://w8bh.net/Assembly%20for%20RC2014Z.pdf). |
|
||||
|
|
||||
# Licensing |
|
||||
|
|
||||
## License Terms |
|
||||
|
|
||||
RomWBW is free software: you can redistribute it and/or modify it under |
|
||||
the terms of the GNU General Public License as published by the Free |
|
||||
Software Foundation, either version 3 of the License, or (at your |
|
||||
option) any later version. |
|
||||
|
|
||||
RomWBW is distributed in the hope that it will be useful, but WITHOUT |
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
|
||||
more details. |
|
||||
|
|
||||
You should have received a copy of the GNU General Public License along |
|
||||
with RomWBW. If not, see <https://www.gnu.org/licenses/>. |
|
||||
|
|
||||
Portions of RomWBW were created by, contributed by, or derived from the |
|
||||
work of others. It is believed that these works are being used in |
|
||||
accordance with the intentions and/or licensing of their creators. |
|
||||
|
|
||||
If anyone feels their work is being used outside of its intended |
|
||||
licensing, please notify: |
|
||||
|
|
||||
> Wayne Warthen |
|
||||
> <wwarthen@gmail.com> |
|
||||
|
|
||||
RomWBW is an aggregate work. It is composed of many individual, |
|
||||
standalone programs that are distributed as a whole to function as a |
|
||||
cohesive system. Each program may have its own licensing which may be |
|
||||
different from other programs within the aggregate. |
|
||||
|
|
||||
In some cases, a single program (e.g., CP/M Operating System) is |
|
||||
composed of multiple components with different licenses. It is believed |
|
||||
that in all such cases the licenses are compatible with GPL version 3. |
|
||||
|
|
||||
RomWBW encourages code contributions from others. Contributors may |
|
||||
assert their own copyright in their contributions by annotating the |
|
||||
contributed source code appropriately. Contributors are further |
|
||||
encouraged to submit their contributions via the RomWBW source code |
|
||||
control system to ensure their contributions are clearly documented. |
|
||||
|
|
||||
All contributions to RomWBW are subject to this license. |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
**RomWBW Introduction** \ |
||||
|
Version 3.6 \ |
||||
|
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ |
||||
|
06 Jul 2025 |
||||
|
|
||||
|
# Overview |
||||
|
|
||||
|
RomWBW software provides a complete, commercial quality implementation |
||||
|
of CP/M (and work-alike) operating systems and applications for modern |
||||
|
Z80/180/280 retro-computing hardware systems. |
||||
|
|
||||
|
A wide variety of platforms are supported including those produced by |
||||
|
these developer communities: |
||||
|
|
||||
|
- [RetroBrew Computers](https://www.retrobrewcomputers.org) |
||||
|
(<https://www.retrobrewcomputers.org>) |
||||
|
- [RC2014](https://rc2014.co.uk) (<https://rc2014.co.uk>), |
||||
|
[RC2014-Z80](https://groups.google.com/g/rc2014-z80) |
||||
|
(<https://groups.google.com/g/rc2014-z80>) |
||||
|
- [Retro Computing](https://groups.google.com/g/retro-comp) |
||||
|
(<https://groups.google.com/g/retro-comp>) |
||||
|
- [Small Computer Central](https://smallcomputercentral.com/) |
||||
|
(<https://smallcomputercentral.com/>) |
||||
|
|
||||
|
A complete list of the currently supported platforms is found in [RomWBW |
||||
|
Hardware](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Hardware.pdf) |
||||
|
. |
||||
|
|
||||
|
# Description |
||||
|
|
||||
|
## Primary Features |
||||
|
|
||||
|
By design, RomWBW isolates all of the hardware specific functions in the |
||||
|
ROM chip itself. The ROM provides a hardware abstraction layer such that |
||||
|
all of the operating systems and applications on a disk will run on any |
||||
|
RomWBW-based system. To put it simply, you can take a disk (or CF/SD/USB |
||||
|
Card) and move it between systems transparently. |
||||
|
|
||||
|
Supported hardware features of RomWBW include: |
||||
|
|
||||
|
- Z80 Family CPUs including Z80, Z180, and Z280 |
||||
|
- Banked memory services for several banking designs |
||||
|
- Disk drivers for RAM, ROM, Floppy, IDE ATA/ATAPI, CF, SD, USB, Zip, |
||||
|
Iomega |
||||
|
- Serial drivers including UART (16550-like), ASCI, ACIA, SIO |
||||
|
- Video drivers including TMS9918, SY6545, MOS8563, HD6445, Xosera |
||||
|
- Keyboard (PS/2) drivers via VT8242 or PPI interfaces |
||||
|
- Real time clock drivers including DS1302, BQ4845 |
||||
|
- Support for CP/NET networking using Wiznet, MT011 or Serial |
||||
|
- Built-in VT-100 terminal emulation support |
||||
|
|
||||
|
A dynamic disk drive letter assignment mechanism allows mapping |
||||
|
operating system drive letters to any available disk media. |
||||
|
Additionally, mass storage devices (IDE Disk, CF Card, SD Card, etc.) |
||||
|
support the use of multiple slices (up to 256 per device). Each slice |
||||
|
contains a complete CP/M filesystem and can be mapped independently to |
||||
|
any drive letter. This overcomes the inherent size limitations in legacy |
||||
|
OSes and allows up to 2GB of addressable storage on a single device, |
||||
|
with up to 128MB accessible at any one time. |
||||
|
|
||||
|
## Included Software |
||||
|
|
||||
|
Multiple disk images are provided in the distribution. Most disk images |
||||
|
contain a complete, bootable, ready-to-run implementation of a specific |
||||
|
operating system. A “combo” disk image contains multiple slices, each |
||||
|
with a full operating system implementation. If you use this disk image, |
||||
|
you can easily pick whichever operating system you want to boot without |
||||
|
changing media. |
||||
|
|
||||
|
Some of the included software: |
||||
|
|
||||
|
- Operating Systems (CP/M 2.2, ZSDOS, NZ-COM, CP/M 3, ZPM3, Z3PLUS, QPM |
||||
|
) |
||||
|
- Support for other operating systems, p-System, FreeRTOS, and FUZIX. |
||||
|
- Programming Tools (Z80ASM, Turbo Pascal, Forth, Cowgol) |
||||
|
- C Compiler’s including Aztec-C, and HI-TECH C |
||||
|
- Microsoft Basic Compiler, and Microsoft Fortran |
||||
|
- Some games such as Colossal Cave, Zork, etc |
||||
|
- Wordstar Word processing software |
||||
|
|
||||
|
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 |
||||
|
|
||||
|
A tool is provided that allows you to access a FAT-12/16/32 filesystem. |
||||
|
The FAT filesystem may be coresident on the same disk media as RomWBW |
||||
|
slices or on stand-alone media. This makes exchanging files with modern |
||||
|
OSes such as Windows, MacOS, and Linux very easy. |
||||
|
|
||||
|
## ROM Distribution |
||||
|
|
||||
|
The [RomWBW Repository](https://github.com/wwarthen/RomWBW) |
||||
|
(<https://github.com/wwarthen/RomWBW>) on GitHub is the official |
||||
|
distribution location for all project source and documentation. |
||||
|
|
||||
|
RomWBW is distributed as both source code and pre-built ROM and disk |
||||
|
images. |
||||
|
|
||||
|
The pre-built ROM images distributed with RomWBW are based on the |
||||
|
default system configurations as determined by the hardware |
||||
|
provider/designer. The pre-built ROM firmware images are generally |
||||
|
suitable for most users. |
||||
|
|
||||
|
The fully-built distribution releases are available on the [RomWBW |
||||
|
Releases Page](https://github.com/wwarthen/RomWBW/releases) |
||||
|
(<https://github.com/wwarthen/RomWBW/releases>) of the repository. |
||||
|
|
||||
|
On this page, you will normally see a Development Snapshot as well as |
||||
|
recent stable releases. Unless you have a specific reason, I suggest you |
||||
|
stick to the most recent stable release. |
||||
|
|
||||
|
The asset named RomWBW-vX.X.X-Package.zip includes all pre-built ROM and |
||||
|
Disk images as well as full source code. The other assets contain only |
||||
|
source code and do not have the pre-built ROM or disk images. |
||||
|
|
||||
|
#### Distribution Directory Layout |
||||
|
|
||||
|
The RomWBW distribution is a compressed zip archive file organized in a |
||||
|
set of directories. Each of these directories has its own ReadMe.txt |
||||
|
file describing the contents in detail. In summary, these directories |
||||
|
are: |
||||
|
|
||||
|
| **Directory** | **Description** | |
||||
|
|----|----| |
||||
|
| **Binary** | The final output files of the build process are placed here. Most importantly, the ROM images with the file names ending in “.rom” and disk images ending in .img. | |
||||
|
| **Doc** | Contains various detailed documentation, both RomWBW specifically as well as the operating systems and applications. | |
||||
|
| **Source** | Contains the source code files used to build the software and ROM images. | |
||||
|
| **Tools** | Contains the programs that are used by the build process or that may be useful in setting up your system. | |
||||
|
|
||||
|
#### Building from Source |
||||
|
|
||||
|
It is also very easy to modify and build custom ROM images that fully |
||||
|
tailor the firmware to your specific preferences. All tools required to |
||||
|
build custom ROM firmware under Windows are included – no need to |
||||
|
install assemblers, etc. The firmware can also be built using Linux or |
||||
|
MacOS after confirming a few standard tools have been installed. |
||||
|
|
||||
|
## Installation & Operation |
||||
|
|
||||
|
In general, installation of RomWBW on your platform is very simple. You |
||||
|
just need to program your ROM with the correct ROM image from the RomWBW |
||||
|
distribution. Subsequently, you can write disk images on your disk |
||||
|
drives (IDE disk, CF Card, SD Card, etc.) which then provides even more |
||||
|
functionality. |
||||
|
|
||||
|
Complete instructions for installation and operation of RomWBW are found |
||||
|
in the [RomWBW User |
||||
|
Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20User%20Guide.pdf). |
||||
|
It is also a good idea to review the [Release |
||||
|
Notes](https://github.com/wwarthen/RomWBW/blob/master/RELEASE_NOTES.md) |
||||
|
for helpful release-specific information. |
||||
|
|
||||
|
## Documentation |
||||
|
|
||||
|
There are several documents that form the core of the RomWBW |
||||
|
documentation: |
||||
|
|
||||
|
- [RomWBW User |
||||
|
Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20User%20Guide.pdf) |
||||
|
is the main user guide for RomWBW, it covers the major topics of how |
||||
|
to install, manage and use RomWBW, and includes additional guidance to |
||||
|
the use of some of the operating systems supported by RomWBW |
||||
|
|
||||
|
- [RomWBW |
||||
|
Hardware](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Hardware.pdf) |
||||
|
contains a description of all the hardware platforms, and devices |
||||
|
supported by RomWBW. |
||||
|
|
||||
|
- [RomWBW |
||||
|
Applications](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Applications.pdf) |
||||
|
is a reference for the ROM-hosted and OS-hosted applications created |
||||
|
or customized to enhance the operation of RomWBW. |
||||
|
|
||||
|
- [RomWBW Disk |
||||
|
Catalog](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Disk%20Catalog.pdf) |
||||
|
is a reference for the contents of the disk images provided with |
||||
|
RomWBW, with a description of many of the files on each image |
||||
|
|
||||
|
- [RomWBW System |
||||
|
Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20System%20Guide.pdf) |
||||
|
discusses much of the internal design and construction of RomWBW. It |
||||
|
includes a reference for the RomWBW HBIOS API functions. |
||||
|
|
||||
|
An online HTML version of this documentation is hosted at |
||||
|
<https://wwarthen.github.io/RomWBW>. |
||||
|
|
||||
|
Each of the operating systems and ROM applications included with RomWBW |
||||
|
are sophisticated tools in their own right. It is not reasonable to |
||||
|
fully document their usage. However, you will find complete manuals in |
||||
|
PDF format in the Doc directory of the distribution. The intention of |
||||
|
this documentation is to describe the operation of RomWBW and the ways |
||||
|
in which it enhances the operation of the included applications and |
||||
|
operating systems. |
||||
|
|
||||
|
Since RomWBW is purely a software product for many different platforms, |
||||
|
the documentation does **not** cover hardware construction, |
||||
|
configuration, or troubleshooting – please see your hardware provider |
||||
|
for this information. |
||||
|
|
||||
|
# Support |
||||
|
|
||||
|
## Getting Assistance |
||||
|
|
||||
|
The best way to get assistance with RomWBW or any aspect of the |
||||
|
RetroBrew Computers projects is via one of 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) |
||||
|
|
||||
|
Submission of issues and bugs are welcome at the [RomWBW GitHub |
||||
|
Repository](https://github.com/wwarthen/RomWBW). |
||||
|
|
||||
|
Also feel free to email Wayne Warthen at <wwarthen@gmail.com>. I am |
||||
|
happy to provide support adapting RomWBW to new or modified systems |
||||
|
|
||||
|
# Contributions |
||||
|
|
||||
|
All source code and distributions are maintained on GitHub. |
||||
|
Contributions of all kinds to RomWBW are very welcome. |
||||
|
|
||||
|
## Acknowledgments |
||||
|
|
||||
|
I want to acknowledge that a great deal of the code and inspiration for |
||||
|
RomWBW has been provided by or derived from the work of others in the |
||||
|
RetroBrew Computers Community. I sincerely appreciate all of their |
||||
|
contributions. The list below is probably missing many names – please |
||||
|
let me know if I missed you! |
||||
|
|
||||
|
- Andrew Lynch started it all when he created the N8VEM Z80 SBC which |
||||
|
became the first platform RomWBW supported. Some of his original code |
||||
|
can still be found in RomWBW. |
||||
|
|
||||
|
- Dan Werner wrote much of the code from which RomWBW was originally |
||||
|
derived and he has always been a great source of knowledge and advice. |
||||
|
|
||||
|
- Douglas Goodall contributed code, time, testing, and advice in “the |
||||
|
early days”. He created an entire suite of application programs to |
||||
|
enhance the use of RomWBW. Unfortunately, they have become unusable |
||||
|
due to internal changes within RomWBW. As of RomWBW 2.6, these |
||||
|
applications are no longer provided. |
||||
|
|
||||
|
- Sergey Kiselev created several hardware platforms for RomWBW including |
||||
|
the very popular Zeta. |
||||
|
|
||||
|
- David Giles created support for the Z180 CSIO which is now included SD |
||||
|
Card driver. |
||||
|
|
||||
|
- Phil Summers contributed the Forth and BASIC adaptations in ROM, the |
||||
|
AY-3-8910 sound driver, DMA support, and a long list of general code |
||||
|
and documentation enhancements. |
||||
|
|
||||
|
- Ed Brindley contributed some of the code that supports the RCBus |
||||
|
platform. |
||||
|
|
||||
|
- Spencer Owen created the RC2014 series of hobbyist kit computers which |
||||
|
has exponentially increased RomWBW usage. Some of his kits include |
||||
|
RomWBW. |
||||
|
|
||||
|
- Stephen Cousins has likewise created a series of hobbyist kit |
||||
|
computers at Small Computer Central and is distributing RomWBW with |
||||
|
many of them. |
||||
|
|
||||
|
- Alan Cox has contributed some driver code and has provided a great |
||||
|
deal of advice. |
||||
|
|
||||
|
- The CP/NET client files were developed by Douglas Miller. |
||||
|
|
||||
|
- 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 eZ80 CPU support, the sound driver |
||||
|
interface, and the SN76489 sound driver. |
||||
|
|
||||
|
- The RomWBW Disk Catalog document was produced by Mykl Orders. |
||||
|
|
||||
|
- Rob Prouse has created many of the supplemental disk images including |
||||
|
Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft BASIC Compiler, |
||||
|
Microsoft Fortran Compiler, and a Games compendium. |
||||
|
|
||||
|
- Martin R has provided substantial help reviewing and improving the |
||||
|
User Guide and Applications documents. |
||||
|
|
||||
|
- Mark Pruden has made a wide variety of contributions including: |
||||
|
|
||||
|
- significant content in the Disk Catalog and User Guide |
||||
|
- creation of the Introduction and Hardware documents |
||||
|
- Z3PLUS operating system disk image |
||||
|
- Infocom text adventure game disk image |
||||
|
- COPYSL, and SLABEL utilities |
||||
|
- Display of bootable slices via “S” command during startup |
||||
|
- Optimisations of HBIOS and CBIOS to reduce overall code size |
||||
|
- a feature for RomWBW configuration by NVRAM |
||||
|
- the /B bulk mode of disk assignment to the ASSIGN utility |
||||
|
|
||||
|
- Jacques Pelletier has contributed the DS1501 RTC driver code. |
||||
|
|
||||
|
- Jose Collado has contributed enhancements to the TMS driver including |
||||
|
compatibility with standard TMS register configuration. |
||||
|
|
||||
|
- Kevin Boone has contributed a generic HBIOS date/time utility (WDATE). |
||||
|
|
||||
|
- Matt Carroll has contributed a fix to XM.COM that corrects the port |
||||
|
specification when doing a send. |
||||
|
|
||||
|
- Dean Jenkins enhanced the build process to accommodate the Raspberry |
||||
|
Pi 4. |
||||
|
|
||||
|
- Tom Plano has contributed a new utility (HTALK) to allow talking |
||||
|
directly to HBIOS COM ports. |
||||
|
|
||||
|
- Lars Nelson has contributed several generic utilities such as a |
||||
|
universal (OS agnostic) UNARC application. |
||||
|
|
||||
|
- Dylan Hall added support for specifying a secondary console. |
||||
|
|
||||
|
- Bill Shen has contributed boot loaders for several of his systems. |
||||
|
|
||||
|
- Laszlo Szolnoki has contributed an EF9345 video display controller |
||||
|
driver. |
||||
|
|
||||
|
- Ladislau Szilagyi has contributed an enhanced version of CP/M Cowgol |
||||
|
that leverages RomWBW memory banking. |
||||
|
|
||||
|
- Les Bird has contributed support for the NABU w/ Option Board |
||||
|
|
||||
|
- Rob Gowin created an online documentation site via MkDocs, and |
||||
|
contributed a driver for the Xosera FPGA-based video controller. |
||||
|
|
||||
|
- Jörg Linder has contributed disassembled and nicely commented source |
||||
|
for ZSDOS2 and the BPBIOS utilities. |
||||
|
|
||||
|
## Related Projects |
||||
|
|
||||
|
Outside of the hardware platforms adapted to RomWBW, there are a variety |
||||
|
of projects that either target RomWBW specifically or provide a |
||||
|
RomWBW-specific variation. These efforts are greatly appreciated and are |
||||
|
listed below. Please contact the author if there are any other such |
||||
|
projects that are not listed. |
||||
|
|
||||
|
#### Z88DK |
||||
|
|
||||
|
Z88DK is a software powerful development kit for Z80 computers |
||||
|
supporting both C and assembly language. This kit now provides specific |
||||
|
library support for RomWBW HBIOS. The Z88DK project is hosted at |
||||
|
<https://github.com/z88dk/z88dk>. |
||||
|
|
||||
|
#### Paleo Editor |
||||
|
|
||||
|
Steve Garcia has created a Windows-hosted IDE that is tailored to |
||||
|
development of RomWBW. The project can be found at |
||||
|
<https://github.com/alloidian/PaleoEditor>. |
||||
|
|
||||
|
#### Z80 fig-FORTH |
||||
|
|
||||
|
Dimitri Theulings’ implementation of fig-FORTH for the Z80 has a |
||||
|
RomWBW-specific variant. The project is hosted at |
||||
|
<https://github.com/dimitrit/figforth>. |
||||
|
|
||||
|
#### Assembly Language Programming for the RC2014 Zed |
||||
|
|
||||
|
Bruce Hall has written a very nice document that describes how to |
||||
|
develop assembly language applications on RomWBW. It begins with the |
||||
|
setup and configuration of a new RC2014 Zed system running RomWBW. It |
||||
|
describes not only generic CP/M application development, but also RomWBW |
||||
|
HBIOS programming and bare metal programming. The latest copy of this |
||||
|
document is hosted at [http://w8bh.net/Assembly for |
||||
|
RC2014Z.pdf](http://w8bh.net/Assembly%20for%20RC2014Z.pdf). |
||||
|
|
||||
|
# Licensing |
||||
|
|
||||
|
## License Terms |
||||
|
|
||||
|
RomWBW is free software: you can redistribute it and/or modify it under |
||||
|
the terms of the GNU General Public License as published by the Free |
||||
|
Software Foundation, either version 3 of the License, or (at your |
||||
|
option) any later version. |
||||
|
|
||||
|
RomWBW is distributed in the hope that it will be useful, but WITHOUT |
||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
||||
|
more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License along |
||||
|
with RomWBW. If not, see <https://www.gnu.org/licenses/>. |
||||
|
|
||||
|
Portions of RomWBW were created by, contributed by, or derived from the |
||||
|
work of others. It is believed that these works are being used in |
||||
|
accordance with the intentions and/or licensing of their creators. |
||||
|
|
||||
|
If anyone feels their work is being used outside of its intended |
||||
|
licensing, please notify: |
||||
|
|
||||
|
> Wayne Warthen |
||||
|
> <wwarthen@gmail.com> |
||||
|
|
||||
|
RomWBW is an aggregate work. It is composed of many individual, |
||||
|
standalone programs that are distributed as a whole to function as a |
||||
|
cohesive system. Each program may have its own licensing which may be |
||||
|
different from other programs within the aggregate. |
||||
|
|
||||
|
In some cases, a single program (e.g., CP/M Operating System) is |
||||
|
composed of multiple components with different licenses. It is believed |
||||
|
that in all such cases the licenses are compatible with GPL version 3. |
||||
|
|
||||
|
RomWBW encourages code contributions from others. Contributors may |
||||
|
assert their own copyright in their contributions by annotating the |
||||
|
contributed source code appropriately. Contributors are further |
||||
|
encouraged to submit their contributions via the RomWBW source code |
||||
|
control system to ensure their contributions are clearly documented. |
||||
|
|
||||
|
All contributions to RomWBW are subject to this license. |
||||
|
|||||
@ -1,441 +1,428 @@ |
|||||
RomWBW Introduction |
|
||||
Wayne Warthen (wwarthen@gmail.com) |
|
||||
19 Jun 2025 |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
OVERVIEW |
|
||||
|
|
||||
|
|
||||
RomWBW software provides a complete, commercial quality implementation |
|
||||
of CP/M (and work-alike) operating systems and applications for modern |
|
||||
Z80/180/280 retro-computing hardware systems. |
|
||||
|
|
||||
A wide variety of platforms are supported including those produced by |
|
||||
these developer communities: |
|
||||
|
|
||||
- RetroBrew Computers (https://www.retrobrewcomputers.org) |
|
||||
- RC2014 (https://rc2014.co.uk), |
|
||||
RC2014-Z80 (https://groups.google.com/g/rc2014-z80) |
|
||||
- Retro Computing (https://groups.google.com/g/retro-comp) |
|
||||
- Small Computer Central (https://smallcomputercentral.com/) |
|
||||
|
|
||||
A complete list of the currently supported platforms is found in RomWBW |
|
||||
Hardware . |
|
||||
|
|
||||
|
|
||||
|
|
||||
DESCRIPTION |
|
||||
|
|
||||
|
|
||||
Primary Features |
|
||||
|
|
||||
By design, RomWBW isolates all of the hardware specific functions in the |
|
||||
ROM chip itself. The ROM provides a hardware abstraction layer such that |
|
||||
all of the operating systems and applications on a disk will run on any |
|
||||
RomWBW-based system. To put it simply, you can take a disk (or CF/SD/USB |
|
||||
Card) and move it between systems transparently. |
|
||||
|
|
||||
Supported hardware features of RomWBW include: |
|
||||
|
|
||||
- Z80 Family CPUs including Z80, Z180, and Z280 |
|
||||
- Banked memory services for several banking designs |
|
||||
- Disk drivers for RAM, ROM, Floppy, IDE ATA/ATAPI, CF, SD, USB, Zip, |
|
||||
Iomega |
|
||||
- Serial drivers including UART (16550-like), ASCI, ACIA, SIO |
|
||||
- Video drivers including TMS9918, SY6545, MOS8563, HD6445, Xosera |
|
||||
- Keyboard (PS/2) drivers via VT8242 or PPI interfaces |
|
||||
- Real time clock drivers including DS1302, BQ4845 |
|
||||
- Support for CP/NET networking using Wiznet, MT011 or Serial |
|
||||
- Built-in VT-100 terminal emulation support |
|
||||
|
|
||||
A dynamic disk drive letter assignment mechanism allows mapping |
|
||||
operating system drive letters to any available disk media. |
|
||||
Additionally, mass storage devices (IDE Disk, CF Card, SD Card, etc.) |
|
||||
support the use of multiple slices (up to 256 per device). Each slice |
|
||||
contains a complete CP/M filesystem and can be mapped independently to |
|
||||
any drive letter. This overcomes the inherent size limitations in legacy |
|
||||
OSes and allows up to 2GB of addressable storage on a single device, |
|
||||
with up to 128MB accessible at any one time. |
|
||||
|
|
||||
|
|
||||
Included Software |
|
||||
|
|
||||
Multiple disk images are provided in the distribution. Most disk images |
|
||||
contain a complete, bootable, ready-to-run implementation of a specific |
|
||||
operating system. A “combo” disk image contains multiple slices, each |
|
||||
with a full operating system implementation. If you use this disk image, |
|
||||
you can easily pick whichever operating system you want to boot without |
|
||||
changing media. |
|
||||
|
|
||||
Some of the included software: |
|
||||
|
|
||||
- Operating Systems (CP/M 2.2, ZSDOS, NZ-COM, CP/M 3, ZPM3, Z3PLUS, QPM |
|
||||
) |
|
||||
- Support for other operating systems, p-System, FreeRTOS, and FUZIX. |
|
||||
- Programming Tools (Z80ASM, Turbo Pascal, Forth, Cowgol) |
|
||||
- C Compiler’s including Aztec-C, and HI-TECH C |
|
||||
- Microsoft Basic Compiler, and Microsoft Fortran |
|
||||
- Some games such as Colossal Cave, Zork, etc |
|
||||
- Wordstar Word processing software |
|
||||
|
|
||||
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 |
|
||||
|
|
||||
A tool is provided that allows you to access a FAT-12/16/32 filesystem. |
|
||||
The FAT filesystem may be coresident on the same disk media as RomWBW |
|
||||
slices or on stand-alone media. This makes exchanging files with modern |
|
||||
OSes such as Windows, MacOS, and Linux very easy. |
|
||||
|
|
||||
|
|
||||
ROM Distribution |
|
||||
|
|
||||
The RomWBW Repository (https://github.com/wwarthen/RomWBW) on GitHub is |
|
||||
the official distribution location for all project source and |
|
||||
documentation. |
|
||||
|
|
||||
RomWBW is distributed as both source code and pre-built ROM and disk |
|
||||
images. |
|
||||
|
|
||||
The pre-built ROM images distributed with RomWBW are based on the |
|
||||
default system configurations as determined by the hardware |
|
||||
provider/designer. The pre-built ROM firmware images are generally |
|
||||
suitable for most users. |
|
||||
|
|
||||
The fully-built distribution releases are available on the RomWBW |
|
||||
Releases Page (https://github.com/wwarthen/RomWBW/releases) of the |
|
||||
repository. |
|
||||
|
|
||||
On this page, you will normally see a Development Snapshot as well as |
|
||||
recent stable releases. Unless you have a specific reason, I suggest you |
|
||||
stick to the most recent stable release. |
|
||||
|
|
||||
The asset named RomWBW-vX.X.X-Package.zip includes all pre-built ROM and |
|
||||
Disk images as well as full source code. The other assets contain only |
|
||||
source code and do not have the pre-built ROM or disk images. |
|
||||
|
|
||||
Distribution Directory Layout |
|
||||
|
|
||||
The RomWBW distribution is a compressed zip archive file organized in a |
|
||||
set of directories. Each of these directories has its own ReadMe.txt |
|
||||
file describing the contents in detail. In summary, these directories |
|
||||
are: |
|
||||
|
|
||||
------------------------------------------------------------------------- |
|
||||
DIRECTORY DESCRIPTION |
|
||||
----------- ------------------------------------------------------------- |
|
||||
BINARY The final output files of the build process are placed here. |
|
||||
Most importantly, the ROM images with the file names ending |
|
||||
in “.rom” and disk images ending in .img. |
|
||||
|
|
||||
DOC Contains various detailed documentation, both RomWBW |
|
||||
specifically as well as the operating systems and |
|
||||
applications. |
|
||||
|
|
||||
SOURCE Contains the source code files used to build the software and |
|
||||
ROM images. |
|
||||
|
|
||||
TOOLS Contains the programs that are used by the build process or |
|
||||
that may be useful in setting up your system. |
|
||||
------------------------------------------------------------------------- |
|
||||
|
|
||||
Building from Source |
|
||||
|
|
||||
It is also very easy to modify and build custom ROM images that fully |
|
||||
tailor the firmware to your specific preferences. All tools required to |
|
||||
build custom ROM firmware under Windows are included – no need to |
|
||||
install assemblers, etc. The firmware can also be built using Linux or |
|
||||
MacOS after confirming a few standard tools have been installed. |
|
||||
|
|
||||
|
|
||||
Installation & Operation |
|
||||
|
|
||||
In general, installation of RomWBW on your platform is very simple. You |
|
||||
just need to program your ROM with the correct ROM image from the RomWBW |
|
||||
distribution. Subsequently, you can write disk images on your disk |
|
||||
drives (IDE disk, CF Card, SD Card, etc.) which then provides even more |
|
||||
functionality. |
|
||||
|
|
||||
Complete instructions for installation and operation of RomWBW are found |
|
||||
in the RomWBW User Guide. It is also a good idea to review the Release |
|
||||
Notes for helpful release-specific information. |
|
||||
|
|
||||
|
|
||||
Documentation |
|
||||
|
|
||||
There are several documents that form the core of the RomWBW |
|
||||
documentation: |
|
||||
|
|
||||
- RomWBW User Guide is the main user guide for RomWBW, it covers the |
|
||||
major topics of how to install, manage and use RomWBW, and includes |
|
||||
additional guidance to the use of some of the operating systems |
|
||||
supported by RomWBW |
|
||||
|
|
||||
- RomWBW Hardware contains a description of all the hardware platforms, |
|
||||
and devices supported by RomWBW. |
|
||||
|
|
||||
- RomWBW Applications is a reference for the ROM-hosted and OS-hosted |
|
||||
applications created or customized to enhance the operation of RomWBW. |
|
||||
|
|
||||
- RomWBW Disk Catalog is a reference for the contents of the disk images |
|
||||
provided with RomWBW, with a description of many of the files on each |
|
||||
image |
|
||||
|
|
||||
- RomWBW System Guide discusses much of the internal design and |
|
||||
construction of RomWBW. It includes a reference for the RomWBW HBIOS |
|
||||
API functions. |
|
||||
|
|
||||
An online HTML version of this documentation is hosted at |
|
||||
https://wwarthen.github.io/RomWBW. |
|
||||
|
|
||||
Each of the operating systems and ROM applications included with RomWBW |
|
||||
are sophisticated tools in their own right. It is not reasonable to |
|
||||
fully document their usage. However, you will find complete manuals in |
|
||||
PDF format in the Doc directory of the distribution. The intention of |
|
||||
this documentation is to describe the operation of RomWBW and the ways |
|
||||
in which it enhances the operation of the included applications and |
|
||||
operating systems. |
|
||||
|
|
||||
Since RomWBW is purely a software product for many different platforms, |
|
||||
the documentation does NOT cover hardware construction, configuration, |
|
||||
or troubleshooting – please see your hardware provider for this |
|
||||
information. |
|
||||
|
|
||||
|
|
||||
|
|
||||
SUPPORT |
|
||||
|
|
||||
|
|
||||
Getting Assistance |
|
||||
|
|
||||
The best way to get assistance with RomWBW or any aspect of the |
|
||||
RetroBrew Computers projects is via one of the community forums: |
|
||||
|
|
||||
- RetroBrew Computers Forum |
|
||||
- RC2014 Google Group |
|
||||
- retro-comp Google Group |
|
||||
|
|
||||
Submission of issues and bugs are welcome at the RomWBW GitHub |
|
||||
Repository. |
|
||||
|
|
||||
Also feel free to email Wayne Warthen at wwarthen@gmail.com. I am happy |
|
||||
to provide support adapting RomWBW to new or modified systems |
|
||||
|
|
||||
|
|
||||
|
|
||||
CONTRIBUTIONS |
|
||||
|
|
||||
|
|
||||
All source code and distributions are maintained on GitHub. |
|
||||
Contributions of all kinds to RomWBW are very welcome. |
|
||||
|
|
||||
|
|
||||
Acknowledgments |
|
||||
|
|
||||
I want to acknowledge that a great deal of the code and inspiration for |
|
||||
RomWBW has been provided by or derived from the work of others in the |
|
||||
RetroBrew Computers Community. I sincerely appreciate all of their |
|
||||
contributions. The list below is probably missing many names – please |
|
||||
let me know if I missed you! |
|
||||
|
|
||||
- Andrew Lynch started it all when he created the N8VEM Z80 SBC which |
|
||||
became the first platform RomWBW supported. Some of his original code |
|
||||
can still be found in RomWBW. |
|
||||
|
|
||||
- Dan Werner wrote much of the code from which RomWBW was originally |
|
||||
derived and he has always been a great source of knowledge and advice. |
|
||||
|
|
||||
- Douglas Goodall contributed code, time, testing, and advice in “the |
|
||||
early days”. He created an entire suite of application programs to |
|
||||
enhance the use of RomWBW. Unfortunately, they have become unusable |
|
||||
due to internal changes within RomWBW. As of RomWBW 2.6, these |
|
||||
applications are no longer provided. |
|
||||
|
|
||||
- Sergey Kiselev created several hardware platforms for RomWBW including |
|
||||
the very popular Zeta. |
|
||||
|
|
||||
- David Giles created support for the Z180 CSIO which is now included SD |
|
||||
Card driver. |
|
||||
|
|
||||
- Phil Summers contributed the Forth and BASIC adaptations in ROM, the |
|
||||
AY-3-8910 sound driver, DMA support, and a long list of general code |
|
||||
and documentation enhancements. |
|
||||
|
|
||||
- Ed Brindley contributed some of the code that supports the RCBus |
|
||||
platform. |
|
||||
|
|
||||
- Spencer Owen created the RC2014 series of hobbyist kit computers which |
|
||||
has exponentially increased RomWBW usage. Some of his kits include |
|
||||
RomWBW. |
|
||||
|
|
||||
- Stephen Cousins has likewise created a series of hobbyist kit |
|
||||
computers at Small Computer Central and is distributing RomWBW with |
|
||||
many of them. |
|
||||
|
|
||||
- Alan Cox has contributed some driver code and has provided a great |
|
||||
deal of advice. |
|
||||
|
|
||||
- The CP/NET client files were developed by Douglas Miller. |
|
||||
|
|
||||
- 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 eZ80 CPU support, the sound driver |
|
||||
interface, and the SN76489 sound driver. |
|
||||
|
|
||||
- The RomWBW Disk Catalog document was produced by Mykl Orders. |
|
||||
|
|
||||
- Rob Prouse has created many of the supplemental disk images including |
|
||||
Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft BASIC Compiler, |
|
||||
Microsoft Fortran Compiler, and a Games compendium. |
|
||||
|
|
||||
- Martin R has provided substantial help reviewing and improving the |
|
||||
User Guide and Applications documents. |
|
||||
|
|
||||
- Mark Pruden has made a wide variety of contributions including: |
|
||||
|
|
||||
- significant content in the Disk Catalog and User Guide |
|
||||
- creation of the Introduction and Hardware documents |
|
||||
- Z3PLUS operating system disk image |
|
||||
- COPYSL utility |
|
||||
- SLABEL utility |
|
||||
- a feature for RomWBW configuration by NVRAM |
|
||||
- the /B bulk mode of disk assignment to the ASSIGN utility |
|
||||
|
|
||||
- Jacques Pelletier has contributed the DS1501 RTC driver code. |
|
||||
|
|
||||
- Jose Collado has contributed enhancements to the TMS driver including |
|
||||
compatibility with standard TMS register configuration. |
|
||||
|
|
||||
- Kevin Boone has contributed a generic HBIOS date/time utility (WDATE). |
|
||||
|
|
||||
- Matt Carroll has contributed a fix to XM.COM that corrects the port |
|
||||
specification when doing a send. |
|
||||
|
|
||||
- Dean Jenkins enhanced the build process to accommodate the Raspberry |
|
||||
Pi 4. |
|
||||
|
|
||||
- Tom Plano has contributed a new utility (HTALK) to allow talking |
|
||||
directly to HBIOS COM ports. |
|
||||
|
|
||||
- Lars Nelson has contributed several generic utilities such as a |
|
||||
universal (OS agnostic) UNARC application. |
|
||||
|
|
||||
- Dylan Hall added support for specifying a secondary console. |
|
||||
|
|
||||
- Bill Shen has contributed boot loaders for several of his systems. |
|
||||
|
|
||||
- Laszlo Szolnoki has contributed an EF9345 video display controller |
|
||||
driver. |
|
||||
|
|
||||
- Ladislau Szilagyi has contributed an enhanced version of CP/M Cowgol |
|
||||
that leverages RomWBW memory banking. |
|
||||
|
|
||||
- Les Bird has contributed support for the NABU w/ Option Board |
|
||||
|
|
||||
- Rob Gowin created an online documentation site via MkDocs, and |
|
||||
contributed a driver for the Xosera FPGA-based video controller. |
|
||||
|
|
||||
- Jörg Linder has contributed disassembled and nicely commented source |
|
||||
for ZSDOS2 and the BPBIOS utilities. |
|
||||
|
|
||||
|
|
||||
Related Projects |
|
||||
|
|
||||
Outside of the hardware platforms adapted to RomWBW, there are a variety |
|
||||
of projects that either target RomWBW specifically or provide a |
|
||||
RomWBW-specific variation. These efforts are greatly appreciated and are |
|
||||
listed below. Please contact the author if there are any other such |
|
||||
projects that are not listed. |
|
||||
|
|
||||
Z88DK |
|
||||
|
|
||||
Z88DK is a software powerful development kit for Z80 computers |
|
||||
supporting both C and assembly language. This kit now provides specific |
|
||||
library support for RomWBW HBIOS. The Z88DK project is hosted at |
|
||||
https://github.com/z88dk/z88dk. |
|
||||
|
|
||||
Paleo Editor |
|
||||
|
|
||||
Steve Garcia has created a Windows-hosted IDE that is tailored to |
|
||||
development of RomWBW. The project can be found at |
|
||||
https://github.com/alloidian/PaleoEditor. |
|
||||
|
|
||||
Z80 fig-FORTH |
|
||||
|
|
||||
Dimitri Theulings’ implementation of fig-FORTH for the Z80 has a |
|
||||
RomWBW-specific variant. The project is hosted at |
|
||||
https://github.com/dimitrit/figforth. |
|
||||
|
|
||||
Assembly Language Programming for the RC2014 Zed |
|
||||
|
|
||||
Bruce Hall has written a very nice document that describes how to |
|
||||
develop assembly language applications on RomWBW. It begins with the |
|
||||
setup and configuration of a new RC2014 Zed system running RomWBW. It |
|
||||
describes not only generic CP/M application development, but also RomWBW |
|
||||
HBIOS programming and bare metal programming. The latest copy of this |
|
||||
document is hosted at http://w8bh.net/Assembly for RC2014Z.pdf. |
|
||||
|
|
||||
|
|
||||
|
|
||||
LICENSING |
|
||||
|
|
||||
|
|
||||
License Terms |
|
||||
|
|
||||
RomWBW is free software: you can redistribute it and/or modify it under |
|
||||
the terms of the GNU General Public License as published by the Free |
|
||||
Software Foundation, either version 3 of the License, or (at your |
|
||||
option) any later version. |
|
||||
|
|
||||
RomWBW is distributed in the hope that it will be useful, but WITHOUT |
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
|
||||
more details. |
|
||||
|
|
||||
You should have received a copy of the GNU General Public License along |
|
||||
with RomWBW. If not, see https://www.gnu.org/licenses/. |
|
||||
|
|
||||
Portions of RomWBW were created by, contributed by, or derived from the |
|
||||
work of others. It is believed that these works are being used in |
|
||||
accordance with the intentions and/or licensing of their creators. |
|
||||
|
|
||||
If anyone feels their work is being used outside of its intended |
|
||||
licensing, please notify: |
|
||||
|
|
||||
Wayne Warthen |
|
||||
wwarthen@gmail.com |
|
||||
|
|
||||
RomWBW is an aggregate work. It is composed of many individual, |
|
||||
standalone programs that are distributed as a whole to function as a |
|
||||
cohesive system. Each program may have its own licensing which may be |
|
||||
different from other programs within the aggregate. |
|
||||
|
|
||||
In some cases, a single program (e.g., CP/M Operating System) is |
|
||||
composed of multiple components with different licenses. It is believed |
|
||||
that in all such cases the licenses are compatible with GPL version 3. |
|
||||
|
|
||||
RomWBW encourages code contributions from others. Contributors may |
|
||||
assert their own copyright in their contributions by annotating the |
|
||||
contributed source code appropriately. Contributors are further |
|
||||
encouraged to submit their contributions via the RomWBW source code |
|
||||
control system to ensure their contributions are clearly documented. |
|
||||
|
|
||||
All contributions to RomWBW are subject to this license. |
|
||||
|
RomWBW Introduction |
||||
|
Wayne Warthen (wwarthen@gmail.com) |
||||
|
06 Jul 2025 |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
Overview |
||||
|
|
||||
|
RomWBW software provides a complete, commercial quality implementation |
||||
|
of CP/M (and work-alike) operating systems and applications for modern |
||||
|
Z80/180/280 retro-computing hardware systems. |
||||
|
|
||||
|
A wide variety of platforms are supported including those produced by |
||||
|
these developer communities: |
||||
|
|
||||
|
- RetroBrew Computers (https://www.retrobrewcomputers.org) |
||||
|
- RC2014 (https://rc2014.co.uk), |
||||
|
RC2014-Z80 (https://groups.google.com/g/rc2014-z80) |
||||
|
- Retro Computing (https://groups.google.com/g/retro-comp) |
||||
|
- Small Computer Central (https://smallcomputercentral.com/) |
||||
|
|
||||
|
A complete list of the currently supported platforms is found in RomWBW |
||||
|
Hardware . |
||||
|
|
||||
|
Description |
||||
|
|
||||
|
Primary Features |
||||
|
|
||||
|
By design, RomWBW isolates all of the hardware specific functions in the |
||||
|
ROM chip itself. The ROM provides a hardware abstraction layer such that |
||||
|
all of the operating systems and applications on a disk will run on any |
||||
|
RomWBW-based system. To put it simply, you can take a disk (or CF/SD/USB |
||||
|
Card) and move it between systems transparently. |
||||
|
|
||||
|
Supported hardware features of RomWBW include: |
||||
|
|
||||
|
- Z80 Family CPUs including Z80, Z180, and Z280 |
||||
|
- Banked memory services for several banking designs |
||||
|
- Disk drivers for RAM, ROM, Floppy, IDE ATA/ATAPI, CF, SD, USB, Zip, |
||||
|
Iomega |
||||
|
- Serial drivers including UART (16550-like), ASCI, ACIA, SIO |
||||
|
- Video drivers including TMS9918, SY6545, MOS8563, HD6445, Xosera |
||||
|
- Keyboard (PS/2) drivers via VT8242 or PPI interfaces |
||||
|
- Real time clock drivers including DS1302, BQ4845 |
||||
|
- Support for CP/NET networking using Wiznet, MT011 or Serial |
||||
|
- Built-in VT-100 terminal emulation support |
||||
|
|
||||
|
A dynamic disk drive letter assignment mechanism allows mapping |
||||
|
operating system drive letters to any available disk media. |
||||
|
Additionally, mass storage devices (IDE Disk, CF Card, SD Card, etc.) |
||||
|
support the use of multiple slices (up to 256 per device). Each slice |
||||
|
contains a complete CP/M filesystem and can be mapped independently to |
||||
|
any drive letter. This overcomes the inherent size limitations in legacy |
||||
|
OSes and allows up to 2GB of addressable storage on a single device, |
||||
|
with up to 128MB accessible at any one time. |
||||
|
|
||||
|
Included Software |
||||
|
|
||||
|
Multiple disk images are provided in the distribution. Most disk images |
||||
|
contain a complete, bootable, ready-to-run implementation of a specific |
||||
|
operating system. A “combo” disk image contains multiple slices, each |
||||
|
with a full operating system implementation. If you use this disk image, |
||||
|
you can easily pick whichever operating system you want to boot without |
||||
|
changing media. |
||||
|
|
||||
|
Some of the included software: |
||||
|
|
||||
|
- Operating Systems (CP/M 2.2, ZSDOS, NZ-COM, CP/M 3, ZPM3, Z3PLUS, |
||||
|
QPM ) |
||||
|
- Support for other operating systems, p-System, FreeRTOS, and FUZIX. |
||||
|
- Programming Tools (Z80ASM, Turbo Pascal, Forth, Cowgol) |
||||
|
- C Compiler’s including Aztec-C, and HI-TECH C |
||||
|
- Microsoft Basic Compiler, and Microsoft Fortran |
||||
|
- Some games such as Colossal Cave, Zork, etc |
||||
|
- Wordstar Word processing software |
||||
|
|
||||
|
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 |
||||
|
|
||||
|
A tool is provided that allows you to access a FAT-12/16/32 filesystem. |
||||
|
The FAT filesystem may be coresident on the same disk media as RomWBW |
||||
|
slices or on stand-alone media. This makes exchanging files with modern |
||||
|
OSes such as Windows, MacOS, and Linux very easy. |
||||
|
|
||||
|
ROM Distribution |
||||
|
|
||||
|
The RomWBW Repository (https://github.com/wwarthen/RomWBW) on GitHub is |
||||
|
the official distribution location for all project source and |
||||
|
documentation. |
||||
|
|
||||
|
RomWBW is distributed as both source code and pre-built ROM and disk |
||||
|
images. |
||||
|
|
||||
|
The pre-built ROM images distributed with RomWBW are based on the |
||||
|
default system configurations as determined by the hardware |
||||
|
provider/designer. The pre-built ROM firmware images are generally |
||||
|
suitable for most users. |
||||
|
|
||||
|
The fully-built distribution releases are available on the RomWBW |
||||
|
Releases Page (https://github.com/wwarthen/RomWBW/releases) of the |
||||
|
repository. |
||||
|
|
||||
|
On this page, you will normally see a Development Snapshot as well as |
||||
|
recent stable releases. Unless you have a specific reason, I suggest you |
||||
|
stick to the most recent stable release. |
||||
|
|
||||
|
The asset named RomWBW-vX.X.X-Package.zip includes all pre-built ROM and |
||||
|
Disk images as well as full source code. The other assets contain only |
||||
|
source code and do not have the pre-built ROM or disk images. |
||||
|
|
||||
|
Distribution Directory Layout |
||||
|
|
||||
|
The RomWBW distribution is a compressed zip archive file organized in a |
||||
|
set of directories. Each of these directories has its own ReadMe.txt |
||||
|
file describing the contents in detail. In summary, these directories |
||||
|
are: |
||||
|
|
||||
|
------------------------------------------------------------------------- |
||||
|
Directory Description |
||||
|
----------- ------------------------------------------------------------- |
||||
|
Binary The final output files of the build process are placed here. |
||||
|
Most importantly, the ROM images with the file names ending |
||||
|
in “.rom” and disk images ending in .img. |
||||
|
|
||||
|
Doc Contains various detailed documentation, both RomWBW |
||||
|
specifically as well as the operating systems and |
||||
|
applications. |
||||
|
|
||||
|
Source Contains the source code files used to build the software and |
||||
|
ROM images. |
||||
|
|
||||
|
Tools Contains the programs that are used by the build process or |
||||
|
that may be useful in setting up your system. |
||||
|
------------------------------------------------------------------------- |
||||
|
|
||||
|
Building from Source |
||||
|
|
||||
|
It is also very easy to modify and build custom ROM images that fully |
||||
|
tailor the firmware to your specific preferences. All tools required to |
||||
|
build custom ROM firmware under Windows are included – no need to |
||||
|
install assemblers, etc. The firmware can also be built using Linux or |
||||
|
MacOS after confirming a few standard tools have been installed. |
||||
|
|
||||
|
Installation & Operation |
||||
|
|
||||
|
In general, installation of RomWBW on your platform is very simple. You |
||||
|
just need to program your ROM with the correct ROM image from the RomWBW |
||||
|
distribution. Subsequently, you can write disk images on your disk |
||||
|
drives (IDE disk, CF Card, SD Card, etc.) which then provides even more |
||||
|
functionality. |
||||
|
|
||||
|
Complete instructions for installation and operation of RomWBW are found |
||||
|
in the RomWBW User Guide. It is also a good idea to review the Release |
||||
|
Notes for helpful release-specific information. |
||||
|
|
||||
|
Documentation |
||||
|
|
||||
|
There are several documents that form the core of the RomWBW |
||||
|
documentation: |
||||
|
|
||||
|
- RomWBW User Guide is the main user guide for RomWBW, it covers the |
||||
|
major topics of how to install, manage and use RomWBW, and includes |
||||
|
additional guidance to the use of some of the operating systems |
||||
|
supported by RomWBW |
||||
|
|
||||
|
- RomWBW Hardware contains a description of all the hardware |
||||
|
platforms, and devices supported by RomWBW. |
||||
|
|
||||
|
- RomWBW Applications is a reference for the ROM-hosted and OS-hosted |
||||
|
applications created or customized to enhance the operation of |
||||
|
RomWBW. |
||||
|
|
||||
|
- RomWBW Disk Catalog is a reference for the contents of the disk |
||||
|
images provided with RomWBW, with a description of many of the files |
||||
|
on each image |
||||
|
|
||||
|
- RomWBW System Guide discusses much of the internal design and |
||||
|
construction of RomWBW. It includes a reference for the RomWBW HBIOS |
||||
|
API functions. |
||||
|
|
||||
|
An online HTML version of this documentation is hosted at |
||||
|
https://wwarthen.github.io/RomWBW. |
||||
|
|
||||
|
Each of the operating systems and ROM applications included with RomWBW |
||||
|
are sophisticated tools in their own right. It is not reasonable to |
||||
|
fully document their usage. However, you will find complete manuals in |
||||
|
PDF format in the Doc directory of the distribution. The intention of |
||||
|
this documentation is to describe the operation of RomWBW and the ways |
||||
|
in which it enhances the operation of the included applications and |
||||
|
operating systems. |
||||
|
|
||||
|
Since RomWBW is purely a software product for many different platforms, |
||||
|
the documentation does not cover hardware construction, configuration, |
||||
|
or troubleshooting – please see your hardware provider for this |
||||
|
information. |
||||
|
|
||||
|
Support |
||||
|
|
||||
|
Getting Assistance |
||||
|
|
||||
|
The best way to get assistance with RomWBW or any aspect of the |
||||
|
RetroBrew Computers projects is via one of the community forums: |
||||
|
|
||||
|
- RetroBrew Computers Forum |
||||
|
- RC2014 Google Group |
||||
|
- retro-comp Google Group |
||||
|
|
||||
|
Submission of issues and bugs are welcome at the RomWBW GitHub |
||||
|
Repository. |
||||
|
|
||||
|
Also feel free to email Wayne Warthen at wwarthen@gmail.com. I am happy |
||||
|
to provide support adapting RomWBW to new or modified systems |
||||
|
|
||||
|
Contributions |
||||
|
|
||||
|
All source code and distributions are maintained on GitHub. |
||||
|
Contributions of all kinds to RomWBW are very welcome. |
||||
|
|
||||
|
Acknowledgments |
||||
|
|
||||
|
I want to acknowledge that a great deal of the code and inspiration for |
||||
|
RomWBW has been provided by or derived from the work of others in the |
||||
|
RetroBrew Computers Community. I sincerely appreciate all of their |
||||
|
contributions. The list below is probably missing many names – please |
||||
|
let me know if I missed you! |
||||
|
|
||||
|
- Andrew Lynch started it all when he created the N8VEM Z80 SBC which |
||||
|
became the first platform RomWBW supported. Some of his original |
||||
|
code can still be found in RomWBW. |
||||
|
|
||||
|
- Dan Werner wrote much of the code from which RomWBW was originally |
||||
|
derived and he has always been a great source of knowledge and |
||||
|
advice. |
||||
|
|
||||
|
- Douglas Goodall contributed code, time, testing, and advice in “the |
||||
|
early days”. He created an entire suite of application programs to |
||||
|
enhance the use of RomWBW. Unfortunately, they have become unusable |
||||
|
due to internal changes within RomWBW. As of RomWBW 2.6, these |
||||
|
applications are no longer provided. |
||||
|
|
||||
|
- Sergey Kiselev created several hardware platforms for RomWBW |
||||
|
including the very popular Zeta. |
||||
|
|
||||
|
- David Giles created support for the Z180 CSIO which is now included |
||||
|
SD Card driver. |
||||
|
|
||||
|
- Phil Summers contributed the Forth and BASIC adaptations in ROM, the |
||||
|
AY-3-8910 sound driver, DMA support, and a long list of general code |
||||
|
and documentation enhancements. |
||||
|
|
||||
|
- Ed Brindley contributed some of the code that supports the RCBus |
||||
|
platform. |
||||
|
|
||||
|
- Spencer Owen created the RC2014 series of hobbyist kit computers |
||||
|
which has exponentially increased RomWBW usage. Some of his kits |
||||
|
include RomWBW. |
||||
|
|
||||
|
- Stephen Cousins has likewise created a series of hobbyist kit |
||||
|
computers at Small Computer Central and is distributing RomWBW with |
||||
|
many of them. |
||||
|
|
||||
|
- Alan Cox has contributed some driver code and has provided a great |
||||
|
deal of advice. |
||||
|
|
||||
|
- The CP/NET client files were developed by Douglas Miller. |
||||
|
|
||||
|
- 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 eZ80 CPU support, the sound driver |
||||
|
interface, and the SN76489 sound driver. |
||||
|
|
||||
|
- The RomWBW Disk Catalog document was produced by Mykl Orders. |
||||
|
|
||||
|
- Rob Prouse has created many of the supplemental disk images |
||||
|
including Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft |
||||
|
BASIC Compiler, Microsoft Fortran Compiler, and a Games compendium. |
||||
|
|
||||
|
- Martin R has provided substantial help reviewing and improving the |
||||
|
User Guide and Applications documents. |
||||
|
|
||||
|
- Mark Pruden has made a wide variety of contributions including: |
||||
|
|
||||
|
- significant content in the Disk Catalog and User Guide |
||||
|
- creation of the Introduction and Hardware documents |
||||
|
- Z3PLUS operating system disk image |
||||
|
- Infocom text adventure game disk image |
||||
|
- COPYSL, and SLABEL utilities |
||||
|
- Display of bootable slices via “S” command during startup |
||||
|
- Optimisations of HBIOS and CBIOS to reduce overall code size |
||||
|
- a feature for RomWBW configuration by NVRAM |
||||
|
- the /B bulk mode of disk assignment to the ASSIGN utility |
||||
|
|
||||
|
- Jacques Pelletier has contributed the DS1501 RTC driver code. |
||||
|
|
||||
|
- Jose Collado has contributed enhancements to the TMS driver |
||||
|
including compatibility with standard TMS register configuration. |
||||
|
|
||||
|
- Kevin Boone has contributed a generic HBIOS date/time utility |
||||
|
(WDATE). |
||||
|
|
||||
|
- Matt Carroll has contributed a fix to XM.COM that corrects the port |
||||
|
specification when doing a send. |
||||
|
|
||||
|
- Dean Jenkins enhanced the build process to accommodate the Raspberry |
||||
|
Pi 4. |
||||
|
|
||||
|
- Tom Plano has contributed a new utility (HTALK) to allow talking |
||||
|
directly to HBIOS COM ports. |
||||
|
|
||||
|
- Lars Nelson has contributed several generic utilities such as a |
||||
|
universal (OS agnostic) UNARC application. |
||||
|
|
||||
|
- Dylan Hall added support for specifying a secondary console. |
||||
|
|
||||
|
- Bill Shen has contributed boot loaders for several of his systems. |
||||
|
|
||||
|
- Laszlo Szolnoki has contributed an EF9345 video display controller |
||||
|
driver. |
||||
|
|
||||
|
- Ladislau Szilagyi has contributed an enhanced version of CP/M Cowgol |
||||
|
that leverages RomWBW memory banking. |
||||
|
|
||||
|
- Les Bird has contributed support for the NABU w/ Option Board |
||||
|
|
||||
|
- Rob Gowin created an online documentation site via MkDocs, and |
||||
|
contributed a driver for the Xosera FPGA-based video controller. |
||||
|
|
||||
|
- Jörg Linder has contributed disassembled and nicely commented source |
||||
|
for ZSDOS2 and the BPBIOS utilities. |
||||
|
|
||||
|
Related Projects |
||||
|
|
||||
|
Outside of the hardware platforms adapted to RomWBW, there are a variety |
||||
|
of projects that either target RomWBW specifically or provide a |
||||
|
RomWBW-specific variation. These efforts are greatly appreciated and are |
||||
|
listed below. Please contact the author if there are any other such |
||||
|
projects that are not listed. |
||||
|
|
||||
|
Z88DK |
||||
|
|
||||
|
Z88DK is a software powerful development kit for Z80 computers |
||||
|
supporting both C and assembly language. This kit now provides specific |
||||
|
library support for RomWBW HBIOS. The Z88DK project is hosted at |
||||
|
https://github.com/z88dk/z88dk. |
||||
|
|
||||
|
Paleo Editor |
||||
|
|
||||
|
Steve Garcia has created a Windows-hosted IDE that is tailored to |
||||
|
development of RomWBW. The project can be found at |
||||
|
https://github.com/alloidian/PaleoEditor. |
||||
|
|
||||
|
Z80 fig-FORTH |
||||
|
|
||||
|
Dimitri Theulings’ implementation of fig-FORTH for the Z80 has a |
||||
|
RomWBW-specific variant. The project is hosted at |
||||
|
https://github.com/dimitrit/figforth. |
||||
|
|
||||
|
Assembly Language Programming for the RC2014 Zed |
||||
|
|
||||
|
Bruce Hall has written a very nice document that describes how to |
||||
|
develop assembly language applications on RomWBW. It begins with the |
||||
|
setup and configuration of a new RC2014 Zed system running RomWBW. It |
||||
|
describes not only generic CP/M application development, but also RomWBW |
||||
|
HBIOS programming and bare metal programming. The latest copy of this |
||||
|
document is hosted at http://w8bh.net/Assembly for RC2014Z.pdf. |
||||
|
|
||||
|
Licensing |
||||
|
|
||||
|
License Terms |
||||
|
|
||||
|
RomWBW is free software: you can redistribute it and/or modify it under |
||||
|
the terms of the GNU General Public License as published by the Free |
||||
|
Software Foundation, either version 3 of the License, or (at your |
||||
|
option) any later version. |
||||
|
|
||||
|
RomWBW is distributed in the hope that it will be useful, but WITHOUT |
||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
||||
|
more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License along |
||||
|
with RomWBW. If not, see https://www.gnu.org/licenses/. |
||||
|
|
||||
|
Portions of RomWBW were created by, contributed by, or derived from the |
||||
|
work of others. It is believed that these works are being used in |
||||
|
accordance with the intentions and/or licensing of their creators. |
||||
|
|
||||
|
If anyone feels their work is being used outside of its intended |
||||
|
licensing, please notify: |
||||
|
|
||||
|
Wayne Warthen |
||||
|
wwarthen@gmail.com |
||||
|
|
||||
|
RomWBW is an aggregate work. It is composed of many individual, |
||||
|
standalone programs that are distributed as a whole to function as a |
||||
|
cohesive system. Each program may have its own licensing which may be |
||||
|
different from other programs within the aggregate. |
||||
|
|
||||
|
In some cases, a single program (e.g., CP/M Operating System) is |
||||
|
composed of multiple components with different licenses. It is believed |
||||
|
that in all such cases the licenses are compatible with GPL version 3. |
||||
|
|
||||
|
RomWBW encourages code contributions from others. Contributors may |
||||
|
assert their own copyright in their contributions by annotating the |
||||
|
contributed source code appropriately. Contributors are further |
||||
|
encouraged to submit their contributions via the RomWBW source code |
||||
|
control system to ensure their contributions are clearly documented. |
||||
|
|
||||
|
All contributions to RomWBW are subject to this license. |
||||
|
|||||
File diff suppressed because it is too large
@ -0,0 +1,30 @@ |
|||||
|
; |
||||
|
;============================================================================= |
||||
|
; HWMON.ASM - BARE METAL HARDWARE MONITOR |
||||
|
;============================================================================= |
||||
|
; |
||||
|
; THIS IS JUST A STUB FOR NOW. |
||||
|
; |
||||
|
#INCLUDE "std.asm" |
||||
|
; |
||||
|
; MONITOR WILL BE LOADED AT HWMON_LOC |
||||
|
; |
||||
|
.ORG HWMON_LOC |
||||
|
; |
||||
|
; IT IS CRITICAL THAT THE FINAL BINARY BE EXACTLY HWMON_SIZ BYTES. |
||||
|
; THIS GENERATES FILLER AS NEEDED. IT WILL ALSO FORCE AN ASSEMBLY |
||||
|
; ERROR IF THE SIZE EXCEEDS THE SPACE ALLOCATED. |
||||
|
; |
||||
|
SLACK .EQU (HWMON_END - $) |
||||
|
; |
||||
|
#IF (SLACK < 0) |
||||
|
.ECHO "*** HWMON IS TOO BIG!!!\n" |
||||
|
!!! ; FORCE AN ASSEMBLY ERROR |
||||
|
#ENDIF |
||||
|
; |
||||
|
.FILL SLACK,$00 |
||||
|
.ECHO "Hardware Monitor space remaining: " |
||||
|
.ECHO SLACK |
||||
|
.ECHO " bytes.\n" |
||||
|
; |
||||
|
.END |
||||
@ -0,0 +1,712 @@ |
|||||
|
;============================================================================== |
||||
|
; DEVIVE INVENTORY - Inventory Device |
||||
|
; Version June-2025 |
||||
|
;============================================================================== |
||||
|
; |
||||
|
; This was extracted from HBIOS and converted into a ROM Application |
||||
|
; |
||||
|
; This is a program CALLED from RomLoader, and is specific to RomWBW |
||||
|
;------------------------------------------------------------------------------ |
||||
|
; |
||||
|
; Change Log: |
||||
|
; 2025-06-30 [MAP] Initial Release copied from HBIOS.ASM |
||||
|
;______________________________________________________________________________ |
||||
|
; |
||||
|
; Include Files |
||||
|
; |
||||
|
#include "std.asm" ; standard RomWBW constants |
||||
|
; |
||||
|
;***************************************************************************** |
||||
|
; |
||||
|
; APPLICATION WILL WILL BE LOADED AT DEV_LOC. THEREFORE, THE CODE |
||||
|
; MUST "ORG" AT THIS ADDRESS. TO CHANGE THE LOAD LOCATION OF THIS |
||||
|
; CODE, YOU CAN UPDATE DEV_LOC IN LAYOUT.INC |
||||
|
; |
||||
|
.ORG DEV_LOC |
||||
|
; |
||||
|
;***************************************************************************** |
||||
|
; INIT CODE |
||||
|
;***************************************************************************** |
||||
|
; |
||||
|
; |
||||
|
;***************************************************************************** |
||||
|
; Main Code starts here |
||||
|
;***************************************************************************** |
||||
|
; |
||||
|
PRTSUM: |
||||
|
CALL NEWLINE2 ; SKIP A LINE |
||||
|
LD DE,PS_STRHDR ; POINT TO HEADER |
||||
|
CALL WRITESTR ; PRINT IT |
||||
|
; |
||||
|
LD C,BF_SYSGET_CIOCNT ; CHARACTER DEVICES |
||||
|
LD HL,PS_SERIAL |
||||
|
CALL PRT_ALLD |
||||
|
; |
||||
|
LD C,BF_SYSGET_DIOCNT ; DISK DRIVES |
||||
|
LD HL,PS_DISK |
||||
|
CALL PRT_ALLD |
||||
|
; |
||||
|
LD C,BF_SYSGET_VDACNT ; VIDEO DEVICES |
||||
|
LD HL,PS_VIDEO |
||||
|
CALL PRT_ALLD |
||||
|
; |
||||
|
LD C,BF_SYSGET_SNDCNT ; SOUND DEVICES |
||||
|
LD HL,PS_SOUND |
||||
|
CALL PRT_ALLD |
||||
|
RET |
||||
|
; |
||||
|
;***************************************************************************** |
||||
|
; Supporting Code Stars Here |
||||
|
;***************************************************************************** |
||||
|
; |
||||
|
PRT_ALLD: |
||||
|
LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET |
||||
|
RST 08 ; E := UNIT COUNT |
||||
|
LD B,E ; MOVE TO B FOR LOOP COUNT |
||||
|
LD A,E ; MOVE TO ACCUM |
||||
|
OR A ; SET FLAGS |
||||
|
RET Z ; IF NONE, JUST RETURN |
||||
|
LD C,0 ; C WILL BE UNIT INDEX |
||||
|
PRT_ALLD1: |
||||
|
PUSH BC ; SAVE LOOP CONTROL |
||||
|
PUSH DE |
||||
|
PUSH HL |
||||
|
CALL JPHL ; CALL THE ROUTINE PASSED IN HL |
||||
|
POP HL |
||||
|
POP DE |
||||
|
POP BC ; RESTORE LOOP CONTROL |
||||
|
INC C ; BUMP UNIT INDEX |
||||
|
DJNZ PRT_ALLD1 ; LOOP THRU ALL DEVICES |
||||
|
RET |
||||
|
; |
||||
|
; PRINT ONE LINE DISK UNIT/DEVICE INFO, DISK UNIT INDEX IN C |
||||
|
; |
||||
|
PS_DISK: |
||||
|
PUSH BC ; SAVE UNIT INDEX FOR LATER |
||||
|
; |
||||
|
; UNIT COLUMN |
||||
|
PRTS("Disk $") |
||||
|
LD A,C ; MOVE UNIT NUM TO A |
||||
|
CALL PRTDECB ; PRINT IT |
||||
|
CP 10 ; CHECK FOR MULTIPLE DIGITS |
||||
|
CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED |
||||
|
PRTS(" $") ; PAD TO NEXT COLUMN |
||||
|
; |
||||
|
; DEVICE COLUMN |
||||
|
LD B,BF_DIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C |
||||
|
RST 08 ; DE:=DEVTYP/NUM, C:=DISK ATTRIBUTES |
||||
|
PUSH BC ; SAVE ATTRIBUTES |
||||
|
LD HL,PS_DDMD ; POINT TO DISK DEVICE TYPE NAME TABLE |
||||
|
CALL PS_PRTDEV ; PRINT DISK DEVICE NMEMONIC PADDED TO FIELD WIDTH |
||||
|
POP DE ; RECOVER ATTRIBUTES TO DE |
||||
|
PUSH DE ; SAVE ATTRIBUTES AGAIN |
||||
|
CALL PS_PRTDT ; PRINT DISK TYPE |
||||
|
POP DE ; RESTORE ATTRIBUTES |
||||
|
POP BC ; RESTORE UNIT NUM |
||||
|
CALL PS_PRTDC ; PRINT DISK CAPACITY |
||||
|
; |
||||
|
CALL NEWLINE |
||||
|
RET |
||||
|
; |
||||
|
; PRINT DISK TYPE (DISK ATTRIBUTE IN E) |
||||
|
; |
||||
|
PS_PRTDT: |
||||
|
LD A,E ; ATTRIBUTES TO A |
||||
|
BIT 7,A ; FLOPPY BIT SET? |
||||
|
LD HL,PS_DTFLOP ; ASSUME FLOPPY |
||||
|
JP NZ,PS_PRT18 ; IF FLOPPY, JUMP AHEAD |
||||
|
LD C,E |
||||
|
LD DE,PS_DTHARD |
||||
|
LD A,00001111B |
||||
|
CALL PRTIDXMSK |
||||
|
CALL PS_PAD18 ; PAD TO 18 SPACES |
||||
|
RET |
||||
|
; |
||||
|
; PRINT DISK CAPACITY (UNIT IN C, ATTRIBUTE IN E) |
||||
|
; |
||||
|
PS_PRTDC: |
||||
|
; |
||||
|
LD A,E ; ATTRIBUTE TO ACCUM |
||||
|
BIT 7,A ; TEST FOR FLOPPY |
||||
|
JR NZ,PS_PRTDC2 ; HANDLE FLOPPY |
||||
|
AND $0F ; ISOLATE TYPE BITS |
||||
|
CP 4 ; ROM DISK? |
||||
|
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB |
||||
|
CP 5 ; RAM DISK? |
||||
|
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB |
||||
|
CP 7 ; FLASH DISK? |
||||
|
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB |
||||
|
; |
||||
|
; PRINT HARD DISK STORAGE SIZE IN MB |
||||
|
LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY |
||||
|
RST 08 ; DE:HL := BLOCKS |
||||
|
JP NZ,PS_PRTNUL ; MEDIA PROBLEM |
||||
|
RES 7,D ; CLEAR LBA BIT |
||||
|
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB |
||||
|
CALL SRL32 ; RIGHT SHIFT |
||||
|
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL |
||||
|
PRTS("MB$") ; PRINT SUFFIX |
||||
|
CALL PC_COMMA |
||||
|
PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA |
||||
|
RET ; DONE |
||||
|
; |
||||
|
PS_PRTDC1: |
||||
|
; PRINT ROM/RAM DISK CAPACITY IN KB |
||||
|
LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY |
||||
|
RST 08 ; DE:HL := BLOCKS |
||||
|
JP NZ,PS_PRTNUL ; MEDIA PROBLEM |
||||
|
RES 7,D ; CLEAR LBA BIT |
||||
|
LD B,1 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB |
||||
|
CALL SRL32 ; RIGHT SHIFT |
||||
|
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL |
||||
|
PRTS("KB$") ; PRINT SUFFIX |
||||
|
CALL PC_COMMA |
||||
|
PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA |
||||
|
RET ; DONE |
||||
|
; |
||||
|
PS_PRTDC2: |
||||
|
LD C,E ; ATTRIBUTE TO C FOR SAFE KEEPING |
||||
|
; |
||||
|
LD A,%00011000 ; DISPLAY FORM FACTOR |
||||
|
LD DE,PS_FLP_FSTR ; WHICH IS DEFINED IN |
||||
|
CALL PRTIDXMSK ; BITS 5 AND 6. |
||||
|
; |
||||
|
LD A,%00000100 ; DISPLAY SIDES |
||||
|
LD DE,PS_FLP_SSTR ; WHICH IS DEFINED |
||||
|
CALL PRTIDXMSK ; IN BIT 4 |
||||
|
; |
||||
|
LD A,%00000011 ; DISPLAY DENSITY |
||||
|
LD DE,PS_FLP_DSTR ; WHICH IS DEFINED IN |
||||
|
CALL PRTIDXMSK ; BITS 2 AND 3. |
||||
|
; |
||||
|
CALL PC_COMMA |
||||
|
PRTS("CHS$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA |
||||
|
; |
||||
|
RET ; DONE |
||||
|
; |
||||
|
; PRINT ONE LINE SERIAL UNIT/DEVICE INFO, SERIAL UNIT INDEX IN C |
||||
|
; |
||||
|
PS_SERIAL: |
||||
|
PUSH BC ; SAVE UNIT INDEX FOR LATER |
||||
|
; |
||||
|
; UNIT COLUMN |
||||
|
PRTS("Char $") |
||||
|
LD A,C ; MOVE UNIT NUM TO A |
||||
|
CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT |
||||
|
PRTS(" $") ; PAD TO NEXT COLUMN |
||||
|
; |
||||
|
; DEVICE COLUMN |
||||
|
LD B,BF_CIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C |
||||
|
RST 08 ; DE:=DEVTYP/NUM, C:=DEVICE ATTRIBUTES |
||||
|
PUSH BC ; SAVE ATTRIBUTES |
||||
|
LD HL,PS_SDUART ; POINT TO SERIAL DEVICE TYPE NAME TABLE |
||||
|
CALL PS_PRTDEV ; PRINT SERIAL DEVICE NMEMONIC PADDED TO FIELD WIDTH |
||||
|
POP BC ; RECOVER ATTRIBUTES |
||||
|
PUSH BC ; SAVE ATTRIBUTES AGAIN |
||||
|
CALL PS_PRTST ; PRINT SERIAL TYPE |
||||
|
POP BC ; RESTORE ATTRIBUTES |
||||
|
POP DE ; RESTORE UNIT NUM TO E |
||||
|
CALL PS_PRTSC ; PRINT SERIAL CONFIG |
||||
|
; |
||||
|
CALL NEWLINE |
||||
|
RET |
||||
|
; |
||||
|
; PRINT CHARACTER TYPE (SERIAL ATTRIBUTE IN C) |
||||
|
; |
||||
|
PS_PRTST: |
||||
|
LD HL,PS_STPPT |
||||
|
BIT 6,C |
||||
|
JP NZ,PS_PRT18 ; PARALLEL TYPE? |
||||
|
LD HL,PS_STRS232 ; ASSUME RS-232 |
||||
|
BIT 7,C ; 0=RS-232, 1=TERMINAL |
||||
|
JP Z,PS_PRT18 ; HANDLE TERMINAL TYPE |
||||
|
LD HL,PS_STTERM ; TYPE IS TERMINAL |
||||
|
JP PS_PRT18 |
||||
|
; |
||||
|
; PRINT SERIAL CONFIG (UNIT IN E, ATTRIBUTE IN C) |
||||
|
; |
||||
|
PS_PRTSC: |
||||
|
BIT 6,C ; PARALLEL TYPE? |
||||
|
JR NZ,PSPRTPC0 |
||||
|
|
||||
|
BIT 7,C ; 0=RS-232, 1=TERMINAL |
||||
|
JP NZ,PS_PRTSC1 ; PRINT TERMINAL CONFIG |
||||
|
; |
||||
|
; PRINT RS-232 CONFIG |
||||
|
LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG |
||||
|
LD C,E ; SET SERIAL UNIT NUM |
||||
|
RST 08 ; DE:HL := BAUD RATE |
||||
|
LD A,D ; TEST FOR $FF |
||||
|
AND E |
||||
|
INC A ; SET Z IF DE == $FF |
||||
|
JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED |
||||
|
; |
||||
|
PS_PRTSC0: |
||||
|
; PRINT BAUD RATE |
||||
|
PUSH DE ; PRESERVE DE |
||||
|
LD A,D |
||||
|
AND $1F ; ISOLATE ENCODED BAUD RATE |
||||
|
LD L,A ; PUT IN L |
||||
|
LD H,0 ; H IS ALWAYS ZERO |
||||
|
LD DE,75 ; BAUD RATE DECODE CONSTANT |
||||
|
CALL DECODE ; DE:HL := BAUD RATE |
||||
|
LD BC,HB_BCDTMP ; POINT TO TEMP BCD BUF |
||||
|
CALL BIN2BCD ; CONVERT TO BCD |
||||
|
CALL PRTBCD ; AND PRINT IN DECIMAL |
||||
|
POP DE ; RESTORE DE |
||||
|
; |
||||
|
; PRINT DATA BITS |
||||
|
PUSH DE ; PRESERVE DE |
||||
|
CALL PC_COMMA ; FORMATTING |
||||
|
LD A,E ; GET CONFIG BYTE |
||||
|
AND $03 ; ISOLATE DATA BITS VALUE |
||||
|
ADD A,'5' ; CONVERT TO CHARACTER |
||||
|
CALL COUT ; AND PRINT |
||||
|
POP DE ; RESTORE DE |
||||
|
; |
||||
|
; PRINT PARITY |
||||
|
PUSH DE ; PRESERVE DE |
||||
|
CALL PC_COMMA ; FORMATTING |
||||
|
LD A,E ; GET CONFIG BYTE |
||||
|
RRCA ; SHIFT RELEVANT BITS |
||||
|
RRCA ; ... |
||||
|
RRCA ; ... |
||||
|
AND $07 ; AND ISOLATE DATA BITS VALUE |
||||
|
LD HL,PS_STPARMAP ; CHARACTER LOOKUP TABLE |
||||
|
CALL ADDHLA ; APPLY OFFSET |
||||
|
LD A,(HL) ; GET CHARACTER |
||||
|
CALL COUT ; AND PRINT |
||||
|
POP DE ; RESTORE DE |
||||
|
; |
||||
|
; PRINT STOP BITS |
||||
|
CALL PC_COMMA ; FORMATTING |
||||
|
LD A,E ; GET CONFIG BYTE |
||||
|
RRCA ; SHIFT RELEVANT BITS |
||||
|
RRCA ; ... |
||||
|
AND $01 ; AND ISOLATE DATA BITS VALUE |
||||
|
ADD A,'1' ; MAKE IT A CHARACTER |
||||
|
CALL COUT ; AND PRINT |
||||
|
; |
||||
|
RET |
||||
|
; |
||||
|
PSPRTPC0: |
||||
|
LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG |
||||
|
LD C,E ; SET PARALLEL UNIT NUM |
||||
|
RST 08 ; DE:HL := I/O SETTING |
||||
|
LD A,D ; TEST FOR $FF |
||||
|
AND E |
||||
|
INC A ; SET Z IF DE == $FF |
||||
|
JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED |
||||
|
; |
||||
|
PS_PRTPC0: |
||||
|
LD C,E ; DISPLAY PIO TYPE |
||||
|
LD A,11000000B ; WHICH IS DEFINE BY |
||||
|
LD DE,PIO_MODE_STR ; BITS 6 AND 7 |
||||
|
JP PRTIDXMSK |
||||
|
; RET ; TRICK RETURN |
||||
|
; |
||||
|
PS_PRTSC1: |
||||
|
; PRINT TERMINAL CONFIG |
||||
|
LD A,C ; GET ATTRIBUTE VALUE |
||||
|
CP $BF ; NO ATTACHED VDA |
||||
|
JR Z,PS_PRTSC2 |
||||
|
PRTS("Video $") ; FORMATTING |
||||
|
AND $0F ; ISOLATE VIDEO UNIT NUM |
||||
|
CALL PRTDECB ; PRINT IT |
||||
|
CALL PC_COMMA |
||||
|
#IF (VDAEMU == EMUTYP_TTY) |
||||
|
PRTS("TTY$") |
||||
|
#ENDIF |
||||
|
#IF (VDAEMU == EMUTYP_ANSI) |
||||
|
PRTS("ANSI$") |
||||
|
#ENDIF |
||||
|
RET |
||||
|
; |
||||
|
PS_PRTSC2: |
||||
|
PRTS("Term Module$") |
||||
|
CALL PC_COMMA |
||||
|
PRTS("ANSI$") |
||||
|
RET |
||||
|
; |
||||
|
; PRINT ONE LINE VIDEO UNIT/DEVICE INFO, VIDEO UNIT INDEX IN C |
||||
|
; |
||||
|
PS_VIDEO: |
||||
|
PUSH BC ; SAVE UNIT INDEX FOR LATER |
||||
|
; |
||||
|
; UNIT COLUMN |
||||
|
PRTS("Video $") |
||||
|
LD A,C ; MOVE UNIT NUM TO A |
||||
|
CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT |
||||
|
PRTS(" $") ; PAD TO NEXT COLUMN |
||||
|
; |
||||
|
; DEVICE COLUMN |
||||
|
LD B,BF_VDADEV ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C |
||||
|
RST 08 ; DE:=DEVTYP/NUM, H:=DISK ATTRIBUTES |
||||
|
PUSH BC ; SAVE ATTRIBUTES |
||||
|
LD HL,PS_VDVDU ; POINT TO VIDEO DEVICE TYPE NAME TABLE |
||||
|
CALL PS_PRTDEV ; PRINT VIDEO DEVICE NMEMONIC PADDED TO FIELD WIDTH |
||||
|
POP DE ; RECOVER ATTRIBUTES |
||||
|
PUSH DE ; SAVE ATTRIBUTES AGAIN |
||||
|
CALL PS_PRTVT ; PRINT VIDEO TYPE |
||||
|
POP DE ; RESTORE ATTRIBUTES |
||||
|
POP BC ; RESTORE UNIT NUM |
||||
|
CALL PS_PRTVC ; PRINT VIDEO CONFIG |
||||
|
; |
||||
|
CALL NEWLINE |
||||
|
RET |
||||
|
; |
||||
|
; PRINT VIDEO TYPE (VIDEO ATTRIBUTE IN E) |
||||
|
; |
||||
|
PS_PRTVT: |
||||
|
LD HL,PS_VTCRT ; ASSUME CRT |
||||
|
JP PS_PRT18 ; PRINT |
||||
|
; |
||||
|
; PRINT VIDEO CONFIG (UNIT IN C, ATTRIBUTE IN E) |
||||
|
; |
||||
|
PS_PRTVC: |
||||
|
PRTS("Text$") |
||||
|
CALL PC_COMMA |
||||
|
LD B,BF_VDAQRY ; FUNC: QUERY FOR VDA CONFIG |
||||
|
RST 08 ; D:=ROWS, E:=COLS |
||||
|
LD A,E |
||||
|
CALL PRTDECB |
||||
|
LD A,'x' |
||||
|
CALL COUT |
||||
|
LD A,D |
||||
|
CALL PRTDECB |
||||
|
RET |
||||
|
; |
||||
|
; PRINT SOUND CONFIG |
||||
|
; |
||||
|
PS_SOUND: |
||||
|
PUSH BC |
||||
|
|
||||
|
; UNIT COLUMN |
||||
|
PRTS("Sound $") |
||||
|
LD A,C ; MOVE UNIT NUM TO A |
||||
|
CALL PRTDECB ; PRINT IT |
||||
|
CP 10 ; CHECK FOR MULTIPLE DIGITS |
||||
|
CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED |
||||
|
PRTS(" $") ; PAD TO NEXT COLUMN |
||||
|
|
||||
|
; DEVICE COLUMN |
||||
|
|
||||
|
PUSH BC |
||||
|
LD E,C |
||||
|
XOR A |
||||
|
LD DE,PS_SDSND ; POINT TO DEVICE TYPE NAME TABLE |
||||
|
CALL PRTIDXDEA ; PRINT DEVICE NMEMONIC PADDED TO FIELD WIDTH |
||||
|
LD A,C ; MOVE UNIT NUM TO A |
||||
|
CALL PRTDECB ; PRINT IT |
||||
|
CALL PC_COLON |
||||
|
LD A,(PRTIDXCNT) |
||||
|
SUB 12-1 ; SUBTRACT FIELD WIDTH (LESS THE COLON) |
||||
|
NEG ; MAKE IT A POSITIVE NUMBER |
||||
|
CALL PS_PAD ; PAD AS NEEDED |
||||
|
POP BC |
||||
|
|
||||
|
; DEVICE TYPE |
||||
|
; |
||||
|
LD B,BF_SNDQUERY ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C |
||||
|
LD E,BF_SNDQ_DEV |
||||
|
RST 08 |
||||
|
PUSH BC |
||||
|
LD A,B |
||||
|
LD DE,PS_SDSN76489 |
||||
|
CALL PRTIDXDEA |
||||
|
CALL PS_PAD18 |
||||
|
POP BC |
||||
|
; |
||||
|
; DEVICE CHARACTERISTICS |
||||
|
; |
||||
|
LD B,BF_SNDQUERY ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C |
||||
|
LD E,BF_SNDQ_CHCNT |
||||
|
RST 08 |
||||
|
LD A,B |
||||
|
CALL PRTDECB |
||||
|
LD A,'+' |
||||
|
CALL COUT |
||||
|
LD A,C |
||||
|
CALL PRTDECB |
||||
|
PRTS(" CHANNELS$") |
||||
|
CALL NEWLINE |
||||
|
; |
||||
|
POP BC |
||||
|
RET |
||||
|
; |
||||
|
; PRINT DEVICE NMEMONIC, DEVTYP/NUM SPECIFIED IN DE |
||||
|
; |
||||
|
PS_PRTDEV: |
||||
|
EX DE,HL |
||||
|
LD A,H ; TYPE ID |
||||
|
CALL PRTIDXDEA ; PRINT TYPE LABEL |
||||
|
LD A,L ; UNIT NUMBER |
||||
|
CALL PRTDECB ; PRINT NUM, ASSUME 1 CHAR |
||||
|
CALL PC_COLON ; PRINT COLON |
||||
|
LD A,(PRTIDXCNT) |
||||
|
SUB 12-2+1 ; 12 CHAR FIELD - 1 POS FOR UNIT NUM AND 1 POS FOR COLON |
||||
|
NEG |
||||
|
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) |
||||
|
RET |
||||
|
; |
||||
|
; PRINT DEVICE MNEMONIC, DEVTYP/NUM SPECIFIED IN DE |
||||
|
; |
||||
|
PS_PRTNUL: |
||||
|
LD HL,PS_STRNUL |
||||
|
; FALL THRU TO PS_PRT |
||||
|
; |
||||
|
; PRINT STRING AT (HL), $ TERM, RETURN CHARS PRINTED IN C |
||||
|
; |
||||
|
PS_PRT: LD C,0 ; INIT CHAR COUNT |
||||
|
PS_PRT1: |
||||
|
LD A,(HL) ; GET CHAR |
||||
|
INC HL ; BUMP INDEX |
||||
|
CP '$' ; TERM? |
||||
|
RET Z ; IF SO, DONE |
||||
|
CALL COUT ; PRINT IT |
||||
|
INC C ; BUMP COUNTER |
||||
|
JR PS_PRT1 ; AND LOOP |
||||
|
; |
||||
|
; PAD 18 CHARACTER FIELD |
||||
|
; |
||||
|
PS_PAD18: |
||||
|
LD A,(PRTIDXCNT) |
||||
|
LD C,A |
||||
|
JR PS_PRT18A |
||||
|
; |
||||
|
; PRINT STRING AT HL IN 18 CHARACTER FIELD |
||||
|
; |
||||
|
PS_PRT18: |
||||
|
CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED |
||||
|
PS_PRT18A: |
||||
|
LD A,18 ; 18 CHAR FIELD |
||||
|
SUB C |
||||
|
; CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) |
||||
|
; |
||||
|
; PAD N SPACES SPECIFIED IN A |
||||
|
; |
||||
|
PS_PAD: LD B,A |
||||
|
LD A,' ' |
||||
|
PS_PAD1: |
||||
|
CALL COUT |
||||
|
DJNZ PS_PAD1 |
||||
|
RET |
||||
|
; |
||||
|
;***************************************************************************** |
||||
|
; Support Routines |
||||
|
;***************************************************************************** |
||||
|
; |
||||
|
; TODO Ideally we wouldnt import all these here, as they take up quite a |
||||
|
; bit of space. Util.asm needs to be broken up, or copy required code here |
||||
|
; |
||||
|
#include "util.asm" |
||||
|
#include "decode.asm" |
||||
|
#include "bcd.asm" |
||||
|
; |
||||
|
;======================================================================= |
||||
|
; Console character I/O helper routines (registers preserved) |
||||
|
;======================================================================= |
||||
|
; |
||||
|
#if (BIOS == BIOS_WBW) |
||||
|
; |
||||
|
; Output character from A |
||||
|
; |
||||
|
COUT: |
||||
|
; Save all incoming registers |
||||
|
push af |
||||
|
push bc |
||||
|
push de |
||||
|
push hl |
||||
|
; |
||||
|
; Output character to console via HBIOS |
||||
|
ld e,a ; output char to E |
||||
|
ld c,CIO_CONSOLE ; output to current HBIOS console |
||||
|
ld b,BF_CIOOUT ; HBIOS func: output char |
||||
|
rst 08 ; HBIOS outputs character |
||||
|
; |
||||
|
; Restore all registers |
||||
|
pop hl |
||||
|
pop de |
||||
|
pop bc |
||||
|
pop af |
||||
|
ret |
||||
|
; |
||||
|
#endif |
||||
|
; |
||||
|
#if (BIOS == BIOS_UNA) |
||||
|
; |
||||
|
; Output character from A |
||||
|
; |
||||
|
COUT: |
||||
|
; Save all incoming registers |
||||
|
push af |
||||
|
push bc |
||||
|
push de |
||||
|
push hl |
||||
|
; |
||||
|
; Output character to console via UBIOS |
||||
|
ld e,a |
||||
|
ld bc,$12 |
||||
|
rst 08 |
||||
|
; |
||||
|
; Restore all registers |
||||
|
pop hl |
||||
|
pop de |
||||
|
pop bc |
||||
|
pop af |
||||
|
ret |
||||
|
; |
||||
|
#endif |
||||
|
; |
||||
|
;=============================================================================== |
||||
|
; Static Strings and Data |
||||
|
;=============================================================================== |
||||
|
; |
||||
|
PS_STRNUL .TEXT "--$" ; DISPLAY STRING FOR NUL VALUE |
||||
|
; |
||||
|
; DISK DEVICE STRINGS |
||||
|
; |
||||
|
PS_DDMD .TEXT "MD$" |
||||
|
PS_DDFD .TEXT "FD$" |
||||
|
PS_DDRF .TEXT "RF$" |
||||
|
PS_DDIDE .TEXT "IDE$" |
||||
|
PS_DDATAPI .TEXT "ATAPI$" |
||||
|
PS_DDPPIDE .TEXT "PPIDE$" |
||||
|
PS_DDSD .TEXT "SD$" |
||||
|
PS_DDPRPSD .TEXT "PRPSD$" |
||||
|
PS_DDPPPSD .TEXT "PPPSD$" |
||||
|
PS_DDHDSK .TEXT "HDSK$" |
||||
|
PS_DDPPA .TEXT "PPA$" |
||||
|
PS_DDIMM .TEXT "IMM$" |
||||
|
PS_DDSYQ .TEXT "SYQ$" |
||||
|
PS_DDCHUSB .TEXT "CHUSB$" |
||||
|
PS_DDCHSD .TEXT "CHSD$" |
||||
|
PS_DDCHNATUSB .TEXT "USB$" |
||||
|
; |
||||
|
; DISK TYPE STRINGS |
||||
|
; |
||||
|
PS_DTFLOP .TEXT "Floppy Disk$" |
||||
|
PS_DTHARD .TEXT "Hard Disk$" |
||||
|
PS_DTCF .TEXT "CompactFlash$" |
||||
|
PS_DTSD .TEXT "SD Card$" |
||||
|
PS_DTUSB .TEXT "USB Drive$" |
||||
|
PS_DTROM .TEXT "ROM Disk$" |
||||
|
PS_DTRAM .TEXT "RAM Disk$" |
||||
|
PS_DTFSH .TEXT "Flash ROM$" |
||||
|
PS_DTRF .TEXT "RAM Floppy$" |
||||
|
PS_DTCD .TEXT "CD-ROM$" |
||||
|
PS_DTCRT .TEXT "Cartridge$" |
||||
|
PS_DTOUSBSCI .TEXT "SCSI$" |
||||
|
PS_DTOUSBUFI .TEXT "UFI$" |
||||
|
PS_DTOTHER .TEXT "???$" |
||||
|
|
||||
|
; |
||||
|
; FLOPPY ATTRIBUTE STRINGS |
||||
|
; |
||||
|
PS_FLP_FSTR: .TEXT "8\",$" ; PS_FLP8 |
||||
|
.TEXT "5.25\",$" ; PS_FLP5 |
||||
|
.TEXT "3.5\",$" ; PS_FLP3 |
||||
|
.TEXT "???\",$" ; PS_FLPN |
||||
|
; |
||||
|
PS_FLP_SSTR: .TEXT "SS/$" ; PS_FLPSS |
||||
|
.TEXT "DS/$" ; PS_FLPDS |
||||
|
; |
||||
|
PS_FLP_DSTR: .TEXT "SD$" ; PS_FLPSD |
||||
|
.TEXT "DD$" ; PS_FLPDD |
||||
|
.TEXT "HD$" ; PS_FLPHD |
||||
|
.TEXT "ED$" ; PS_FLPED |
||||
|
; |
||||
|
; CHARACTER DEVICE STRINGS |
||||
|
; |
||||
|
PS_SDUART .TEXT "UART$" |
||||
|
PS_SDASCI .TEXT "ASCI$" |
||||
|
PS_SDTERM .TEXT "TERM$" |
||||
|
PS_SDPRPCON .TEXT "PRPCON$" |
||||
|
PS_SDPPPCON .TEXT "PPPCON$" |
||||
|
PS_SDSIO .TEXT "SIO$" |
||||
|
PS_SDACIA .TEXT "ACIA$" |
||||
|
PS_SDPIO .TEXT "PIO$" |
||||
|
PS_SDUF .TEXT "UF$" |
||||
|
PS_SDDUART .TEXT "DUART$" |
||||
|
PS_SDZ2U .TEXT "Z2U$" |
||||
|
PS_SDLPT .TEXT "LPT$" |
||||
|
PS_SDESPCON .TEXT "ESPCON$" |
||||
|
PS_SDESPSER .TEXT "ESPSER$" |
||||
|
PS_SDSCON .TEXT "SCON$" |
||||
|
PS_SDSSER .TEXT "SSER$" |
||||
|
PS_SDEZ80 .TEXT "EZ80$" |
||||
|
; |
||||
|
; CHARACTER SUB TYPE STRINGS |
||||
|
; |
||||
|
PS_STRS232 .TEXT "RS-232$" |
||||
|
PS_STTERM .TEXT "Terminal$" |
||||
|
PS_STPPT .TEXT "Parallel$" |
||||
|
; |
||||
|
PS_STPARMAP .DB "NONENMNS" |
||||
|
; |
||||
|
; PARALLEL TYPE STRINGS |
||||
|
; |
||||
|
PIO_MODE_STR: .TEXT "Output$" |
||||
|
.TEXT "Input$" |
||||
|
.TEXT "Bidirectional$" |
||||
|
.TEXT "BitCtrl$" |
||||
|
; |
||||
|
; VIDEO DEVICE STRINGS |
||||
|
; |
||||
|
PS_VDVDU .TEXT "VDU$" |
||||
|
PS_VDCVDU .TEXT "CVDU$" |
||||
|
PS_VDGDC .TEXT "GDC$" |
||||
|
PS_VDTMS .TEXT "TMS$" |
||||
|
PS_VDVGA .TEXT "VGA$" |
||||
|
PS_VDVRC .TEXT "VRC$" |
||||
|
PS_VDEF .TEXT "EF$" |
||||
|
PS_VDFV .TEXT "FV$" |
||||
|
PS_VDXOSERA .TEXT "XOSERA$" |
||||
|
; |
||||
|
; VIDEO TYPE STRINGS |
||||
|
; |
||||
|
PS_VTCRT .TEXT "CRT$" |
||||
|
; |
||||
|
; SOUND DEVICE STRINGS |
||||
|
; |
||||
|
PS_SDSND .TEXT "SND$" |
||||
|
; |
||||
|
; SOUND TYPE STRINGS |
||||
|
; |
||||
|
PS_SDSN76489 .TEXT "SN76489$" |
||||
|
PS_SDAY38910 .TEXT "AY-3-8910$" |
||||
|
PS_SDBITMODE .TEXT "I/O PORT$" |
||||
|
PS_SDYM2612 .TEXT "YM2612$" |
||||
|
; |
||||
|
; 0 1 2 3 4 5 6 7 |
||||
|
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 |
||||
|
PS_STRHDR .TEXT "Unit Device Type Capacity/Mode\r\n" |
||||
|
.TEXT "---------- ---------- ---------------- --------------------\r\n$" |
||||
|
; |
||||
|
;=============================================================================== |
||||
|
; Working data |
||||
|
;=============================================================================== |
||||
|
; |
||||
|
HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP) |
||||
|
; |
||||
|
;=============================================================================== |
||||
|
; |
||||
|
; IT IS CRITICAL THAT THE FINAL BINARY BE EXACTLY DEV_SIZ BYTES. |
||||
|
; THIS GENERATES FILLER AS NEEDED. IT WILL ALSO FORCE AN ASSEMBLY |
||||
|
; ERROR IF THE SIZE EXCEEDS THE SPACE ALLOCATED. |
||||
|
; |
||||
|
SLACK .EQU (DEV_END - $) |
||||
|
; |
||||
|
#IF (SLACK < 0) |
||||
|
.ECHO "*** INVENTORY SLICE IS TOO BIG!!!\n" |
||||
|
!!! ; FORCE AN ASSEMBLY ERROR |
||||
|
#ENDIF |
||||
|
; |
||||
|
.FILL SLACK,$00 |
||||
|
.ECHO "INVNTDEV Device Inventory space remaining: " |
||||
|
.ECHO SLACK |
||||
|
.ECHO " bytes.\n" |
||||
|
; |
||||
|
;=============================================================================== |
||||
|
; |
||||
|
.END |
||||
@ -0,0 +1,398 @@ |
|||||
|
;============================================================================== |
||||
|
; SLICE INVENTORY - Inventory Slice |
||||
|
; Version June-2025 |
||||
|
;============================================================================== |
||||
|
; |
||||
|
; Author: Mark Pruden |
||||
|
; |
||||
|
; This is a SUBSET of SLABEL.ASM -> Please See this program also when |
||||
|
; making changes, as most of the code found here exists there also |
||||
|
; |
||||
|
; This is a program CALLED from RomLoader, and is specific to RomWBW |
||||
|
; |
||||
|
; See SLABEL.ASM for ALL other Notes about This program. |
||||
|
;------------------------------------------------------------------------------ |
||||
|
; |
||||
|
; Change Log: |
||||
|
; 2025-06-30 [MAP] Initial v1.0 release for distribution |
||||
|
;______________________________________________________________________________ |
||||
|
; |
||||
|
; Include Files |
||||
|
; |
||||
|
#include "./hbios.inc" |
||||
|
#include "./layout.inc" |
||||
|
;______________________________________________________________________________ |
||||
|
; |
||||
|
; General operational equates (should not requre adjustment) |
||||
|
; |
||||
|
sigbyte1 .equ $A5 ; 1st sig byte boot info sector (bb_sig) |
||||
|
sigbyte2 .equ $5A ; 2nd sig byte boot info sector (bb_sig) |
||||
|
; |
||||
|
labelterm .equ '$' ; terminating charater for disk label |
||||
|
; |
||||
|
;***************************************************************************** |
||||
|
; |
||||
|
; APPLICATION WILL WILL BE LOADED AT USR_LOC. THEREFORE, THE CODE |
||||
|
; MUST "ORG" AT THIS ADDRESS. TO CHANGE THE LOAD LOCATION OF THIS |
||||
|
; CODE, YOU CAN UPDATE SLC_LOC IN LAYOUT.INC |
||||
|
; |
||||
|
.ORG SLC_LOC |
||||
|
; |
||||
|
;***************************************************************************** |
||||
|
; Main Code (shared) starts here |
||||
|
;***************************************************************************** |
||||
|
; |
||||
|
; Print list of all slices |
||||
|
; |
||||
|
prtslc: |
||||
|
ld de,PRTSLC_HDR ; Header for list of Slices |
||||
|
call prtstr ; Print It |
||||
|
; |
||||
|
ld bc,BC_SYSGET_DIOCNT ; FUNC: SYSTEM INFO GET DISK DRIVES |
||||
|
rst 08 ; E := UNIT COUNT |
||||
|
; |
||||
|
ld b,e ; MOVE Disk CNT TO B FOR LOOP COUNT |
||||
|
ld c,0 ; C WILL BE UNIT INDEX |
||||
|
prtslc1: |
||||
|
ld a,b ; loop counter |
||||
|
or a ; set flags |
||||
|
ret z ; IF no more drives, finished |
||||
|
; |
||||
|
ld a,c ; unit index |
||||
|
ld (currunit),a ; store the unit number |
||||
|
; |
||||
|
push bc ; save loop vars |
||||
|
call prtslc2 ; for each disk Unit, print its details |
||||
|
pop bc ; restore loop variables |
||||
|
; |
||||
|
inc c ; bump the unit number |
||||
|
djnz prtslc1 ; main disk loop |
||||
|
; |
||||
|
prtslcfin: |
||||
|
ret ; loop has finished, RETURN |
||||
|
; |
||||
|
;***************************************************************************** |
||||
|
; Supporting Code Stars Here |
||||
|
;***************************************************************************** |
||||
|
; |
||||
|
; Print list of All Slices for a given Unit |
||||
|
; |
||||
|
prtslc2: |
||||
|
; get the media infor |
||||
|
ld b,BF_DIOMEDIA ; get media information |
||||
|
ld e,1 ; with media discovery |
||||
|
rst 08 ; do media discovery |
||||
|
ret nz ; an error |
||||
|
; |
||||
|
ld a,MID_HD ; hard disk |
||||
|
cp e ; is it hard disk |
||||
|
ret nz ; if not noting to do |
||||
|
; |
||||
|
; setup the loop |
||||
|
ld b,64 ; arbitrary (?) number of slices to check. |
||||
|
; NOTE: could be higher, but each slice check has disk IO |
||||
|
ld c,0 ; starting at slice 0 |
||||
|
; |
||||
|
prtslc2a: |
||||
|
ld a,c ; slice number |
||||
|
ld (currslice),a ; save slice number |
||||
|
; |
||||
|
push bc ; save loop |
||||
|
call prtslc3 ; print detals of the slice |
||||
|
pop bc ; restore loop |
||||
|
ret nz ; if error dont continie |
||||
|
; |
||||
|
inc c ; next slice number |
||||
|
djnz prtslc2a ; loop if more slices |
||||
|
; |
||||
|
ret ; return from Slice Loop |
||||
|
; |
||||
|
;------------------------------------------------------------------------------- |
||||
|
; Print details of a Slice for a given Unit/Slice |
||||
|
; |
||||
|
prtslc3: |
||||
|
; get the details of the device / slice |
||||
|
ld a,(currunit) |
||||
|
ld d,a ; unit |
||||
|
ld a,(currslice) |
||||
|
ld e,a ; slice |
||||
|
ld b,BF_EXTSLICE ; EXT function to check compute slice offset |
||||
|
rst 08 ; noting this call checks partition table. |
||||
|
ret NZ ; an error, for lots of reasons, e.g. Slice not valid |
||||
|
; |
||||
|
call thirdsector ; point to the third sector of partition |
||||
|
; |
||||
|
call diskread ; do the sector read |
||||
|
ret nz ; read error. exit the slice loop |
||||
|
; |
||||
|
; Check signature |
||||
|
ld bc,(bb_sig) ; get signature read |
||||
|
ld a,sigbyte1 ; expected value of first byte |
||||
|
cp b ; compare |
||||
|
jr nz,prtslc5 ; ignore missing signature and loop |
||||
|
ld a,sigbyte2 ; expected value of second byte |
||||
|
cp c ; compare |
||||
|
jr nz,prtslc5 ; ignore missing signature and loop |
||||
|
; |
||||
|
; Print volume label string at HL, '$' terminated, 16 chars max |
||||
|
ld a,(currunit) |
||||
|
call prtdecb ; print unit number as decimal |
||||
|
call pdot ; print a DOT |
||||
|
ld a,(currslice) |
||||
|
call prtdecb |
||||
|
ld a,' ' |
||||
|
call cout ; print a space |
||||
|
call cout ; print a space |
||||
|
ld hl,bb_label ; point to label |
||||
|
call pvol ; print it |
||||
|
call crlf |
||||
|
; |
||||
|
prtslc5: |
||||
|
xor a |
||||
|
ret |
||||
|
; |
||||
|
;------------------------------------------------------------------------------- |
||||
|
; Print volume label string at HL, '$' terminated, 16 chars max |
||||
|
; |
||||
|
pvol: |
||||
|
ld b,16 ; init max char downcounter |
||||
|
pvol1: |
||||
|
ld a,(hl) ; get next character |
||||
|
cp labelterm ; set flags based on terminator $ |
||||
|
inc hl ; bump pointer regardless |
||||
|
ret z ; done if null |
||||
|
call cout ; display character |
||||
|
djnz pvol1 ; loop till done |
||||
|
ret ; hit max of 16 chars |
||||
|
; |
||||
|
;------------------------------------------------------------------------------- |
||||
|
; advance the DE HL LBA sector by 2, ie third sector |
||||
|
; |
||||
|
thirdsector: |
||||
|
ld bc,2 ; sector offset |
||||
|
add hl,bc ; add to LBA value low word |
||||
|
jr nc,sectornum ; check for carry |
||||
|
inc de ; if so, bump high word |
||||
|
sectornum: |
||||
|
ld (lba),hl ; update lba, low word |
||||
|
ld (lba+2),de ; update lba, high word |
||||
|
ret |
||||
|
; |
||||
|
;=============================================================================== |
||||
|
; |
||||
|
; Read disk sector(s) |
||||
|
; DE:HL is LBA, B is sector count, C is disk unit |
||||
|
; |
||||
|
diskread: |
||||
|
; |
||||
|
; Seek to requested sector in DE:HL |
||||
|
ld a,(currunit) |
||||
|
ld c,a ; from the specified unit |
||||
|
set 7,d ; set LBA access flag |
||||
|
ld b,BF_DIOSEEK ; HBIOS func: seek |
||||
|
rst 08 ; do it |
||||
|
ret nz ; handle error |
||||
|
; |
||||
|
; Read sector(s) into buffer |
||||
|
ld a,(currunit) |
||||
|
ld c,a ; from the specified unit |
||||
|
ld e,1 ; read 1 sector |
||||
|
ld hl,(dma) ; read into info sec buffer |
||||
|
ld a,(BID_USR) ; get user bank to accum |
||||
|
ld d,a ; and move to D |
||||
|
ld b,BF_DIOREAD ; HBIOS func: disk read |
||||
|
rst 08 ; do it |
||||
|
ret ; and done |
||||
|
; |
||||
|
;***************************************************************************** |
||||
|
; SUPPORT ROUTINES |
||||
|
;***************************************************************************** |
||||
|
; |
||||
|
; Print a dot on console |
||||
|
; |
||||
|
pdot: |
||||
|
push af |
||||
|
ld a,'.' |
||||
|
call cout |
||||
|
pop af |
||||
|
ret |
||||
|
; |
||||
|
;------------------------------------------------------------------------------- |
||||
|
; Print character in A without destroying any registers |
||||
|
; NOTE THIS CODE IS SPECIFIC AS IT USES HBIOS DIRECTLY |
||||
|
; |
||||
|
prtchr: |
||||
|
cout: |
||||
|
push af ; save registers |
||||
|
push bc |
||||
|
push de |
||||
|
push hl |
||||
|
LD B,BF_CIOOUT |
||||
|
LD C,CIO_CONSOLE |
||||
|
LD E,A |
||||
|
RST 08 |
||||
|
pop hl ; restore registers |
||||
|
pop de |
||||
|
pop bc |
||||
|
pop af |
||||
|
ret |
||||
|
; |
||||
|
;------------------------------------------------------------------------------- |
||||
|
; Start a newline on console (cr/lf) |
||||
|
; |
||||
|
crlf2: |
||||
|
call crlf ; two of them |
||||
|
crlf: |
||||
|
push af ; preserve AF |
||||
|
ld a,13 ; <CR> |
||||
|
call prtchr ; print it |
||||
|
ld a,10 ; <LF> |
||||
|
call prtchr ; print it |
||||
|
pop af ; restore AF |
||||
|
ret |
||||
|
; |
||||
|
;------------------------------------------------------------------------------- |
||||
|
; Print a zero terminated string at (de) without destroying any registers |
||||
|
; |
||||
|
prtstr: |
||||
|
push af |
||||
|
push de |
||||
|
; |
||||
|
prtstr1: |
||||
|
ld a,(de) ; get next char |
||||
|
or a |
||||
|
jr z,prtstr2 |
||||
|
call prtchr |
||||
|
inc de |
||||
|
jr prtstr1 |
||||
|
; |
||||
|
prtstr2: |
||||
|
pop de ; restore registers |
||||
|
pop af |
||||
|
ret |
||||
|
; |
||||
|
;------------------------------------------------------------------------------- |
||||
|
; Print value of a in decimal with leading zero suppression |
||||
|
; |
||||
|
prtdecb: |
||||
|
push hl |
||||
|
push af |
||||
|
ld l,a |
||||
|
ld h,0 |
||||
|
call prtdec |
||||
|
pop af |
||||
|
pop hl |
||||
|
ret |
||||
|
; |
||||
|
;------------------------------------------------------------------------------- |
||||
|
; Print value of HL in decimal with leading zero suppression |
||||
|
; |
||||
|
prtdec: |
||||
|
push bc |
||||
|
push de |
||||
|
push hl |
||||
|
ld e,'0' |
||||
|
ld bc,-10000 |
||||
|
call prtdec1 |
||||
|
ld bc,-1000 |
||||
|
call prtdec1 |
||||
|
ld bc,-100 |
||||
|
call prtdec1 |
||||
|
ld c,-10 |
||||
|
call prtdec1 |
||||
|
ld e,0 |
||||
|
ld c,-1 |
||||
|
call prtdec1 |
||||
|
pop hl |
||||
|
pop de |
||||
|
pop bc |
||||
|
ret |
||||
|
prtdec1: |
||||
|
ld a,'0' - 1 |
||||
|
prtdec2: |
||||
|
inc a |
||||
|
add hl,bc |
||||
|
jr c,prtdec2 |
||||
|
sbc hl,bc |
||||
|
cp e |
||||
|
jr z,prtdec3 |
||||
|
ld e,0 |
||||
|
call cout |
||||
|
prtdec3: |
||||
|
ret |
||||
|
; |
||||
|
;=============================================================================== |
||||
|
; |
||||
|
PRTSLC_HDR .TEXT "\r\n\r\n" |
||||
|
.TEXT "Un.Sl Drive \r\n" |
||||
|
.TEXT "----- ----------------\r\n" |
||||
|
.DB 0 |
||||
|
; |
||||
|
;=============================================================================== |
||||
|
; Working data |
||||
|
;=============================================================================== |
||||
|
; |
||||
|
currunit .db 0 ; parameters for disk unit, current unit |
||||
|
currslice .db 0 ; parameters for disk slice, current slice |
||||
|
lba .dw 0, 0 ; lba address (4 bytes), of slice |
||||
|
; |
||||
|
BID_USR .db 0 ; Bank ID for user bank |
||||
|
dma .dw bl_infosec ; address for disk buffer |
||||
|
; |
||||
|
;=============================================================================== |
||||
|
; |
||||
|
; IT IS CRITICAL THAT THE FINAL BINARY BE EXACTLY SLC_SIZ BYTES. |
||||
|
; THIS GENERATES FILLER AS NEEDED. IT WILL ALSO FORCE AN ASSEMBLY |
||||
|
; ERROR IF THE SIZE EXCEEDS THE SPACE ALLOCATED. |
||||
|
; |
||||
|
SLACK .EQU (SLC_END - $) |
||||
|
; |
||||
|
#IF (SLACK < 0) |
||||
|
.ECHO "*** INVENTORY SLICE IS TOO BIG!!!\n" |
||||
|
!!! ; FORCE AN ASSEMBLY ERROR |
||||
|
#ENDIF |
||||
|
; |
||||
|
.FILL SLACK,$00 |
||||
|
.ECHO "INVNTSLC Slice Inventory space remaining: " |
||||
|
.ECHO SLACK |
||||
|
.ECHO " bytes.\n" |
||||
|
; |
||||
|
;=============================================================================== |
||||
|
; Disk Buffer |
||||
|
;=============================================================================== |
||||
|
; |
||||
|
; define origin of disk buffer = 9000 |
||||
|
; Note this shares SAME Buffer Address as ROMLDR |
||||
|
.org $9000 |
||||
|
; |
||||
|
; Below is copied from ROM LDR |
||||
|
; Boot info sector is read into area below. |
||||
|
; The third sector of a disk device is reserved for boot info. |
||||
|
; |
||||
|
bl_infosec .equ $ |
||||
|
.ds (512 - 128) |
||||
|
bb_metabuf .equ $ |
||||
|
bb_sig .ds 2 ; signature (0xA55A if set) |
||||
|
bb_platform .ds 1 ; formatting platform |
||||
|
bb_device .ds 1 ; formatting device |
||||
|
bb_formatter .ds 8 ; formatting program |
||||
|
bb_drive .ds 1 ; physical disk drive # |
||||
|
bb_lu .ds 1 ; logical unit (lu) |
||||
|
.ds 1 ; msb of lu, now deprecated |
||||
|
.ds (bb_metabuf + 128) - $ - 32 |
||||
|
bb_protect .ds 1 ; write protect boolean |
||||
|
bb_updates .ds 2 ; update counter |
||||
|
bb_rmj .ds 1 ; rmj major version number |
||||
|
bb_rmn .ds 1 ; rmn minor version number |
||||
|
bb_rup .ds 1 ; rup update number |
||||
|
bb_rtp .ds 1 ; rtp patch level |
||||
|
bb_label .ds 16 ; 16 character drive label |
||||
|
bb_term .ds 1 ; label terminator ('$') |
||||
|
bb_biloc .ds 2 ; loc to patch boot drive info |
||||
|
bb_cpmloc .ds 2 ; final ram dest for cpm/cbios |
||||
|
bb_cpmend .ds 2 ; end address for load |
||||
|
bb_cpment .ds 2 ; CP/M entry point (cbios boot) |
||||
|
; |
||||
|
;=============================================================================== |
||||
|
|
||||
|
.END |
||||
@ -0,0 +1,135 @@ |
|||||
|
; |
||||
|
;============================================================================= |
||||
|
; ROMFONTS.ASM - ROM HOSTED FONTS |
||||
|
;============================================================================= |
||||
|
; |
||||
|
; THIS ASSEMBLY IS PURELY A DATA ASSEMBLY USED TO INCLUDE THE ROM-HOSTED |
||||
|
; FONTS. |
||||
|
; |
||||
|
; FOR NOW, WE ARE JUST INCLUDING 3 FONTS AND THEY ARE NOT COMPRESSED. |
||||
|
; |
||||
|
#INCLUDE "std.asm" |
||||
|
; |
||||
|
COMP .EQU $80 ; BIT MASK FOR COMPRESSED FONT |
||||
|
RAW .EQU $00 ; BIT MASK FOR RAW FONT |
||||
|
; |
||||
|
; FONT INCLUSION CONTROLS. THE FMT_XXX SETTING CONTROLS WHETHER THE |
||||
|
; FONT DATA WILL BE COMPRESSED OR NOT. GENERALLY, COMPRESSED IS USED |
||||
|
; TO SAVE SPACE. THE 6X8 FONT IS AN EXCEPTION BECAUSE IT IS USED BY |
||||
|
; THE TMS DRIVER WHICH RELOADS THE FONT ON-THE-FLY DURING SYSTEM |
||||
|
; OPERATION. SEE TMS.ASM. |
||||
|
; |
||||
|
USEFONT6X8 .EQU TRUE |
||||
|
FMT_6X8 .EQU RAW |
||||
|
; |
||||
|
USEFONT8X8 .EQU TRUE |
||||
|
FMT_8X8 .EQU COMP |
||||
|
; |
||||
|
USEFONT8X11 .EQU TRUE |
||||
|
FMT_8X11 .EQU COMP |
||||
|
; |
||||
|
USEFONT8X16 .EQU TRUE |
||||
|
FMT_8X16 .EQU COMP |
||||
|
; |
||||
|
.ORG FONTS_LOC |
||||
|
; |
||||
|
; FONT LOCATION MAP |
||||
|
; |
||||
|
.DB 'F','M' ; TABLE SIGNATURE |
||||
|
#IF USEFONT6X8 |
||||
|
.DB FONTID_6X8 | FMT_6X8 |
||||
|
.DW FONT6X8 |
||||
|
#ENDIF |
||||
|
; |
||||
|
#IF USEFONT8X8 |
||||
|
.DB FONTID_8X8 | FMT_8X8 |
||||
|
.DW FONT8X8 |
||||
|
#ENDIF |
||||
|
; |
||||
|
#IF USEFONT8X11 |
||||
|
.DB FONTID_8X11 | FMT_8X11 |
||||
|
.DW FONT8X11 |
||||
|
#ENDIF |
||||
|
; |
||||
|
#IF USEFONT8X16 |
||||
|
.DB FONTID_8X16 | FMT_8X16 |
||||
|
.DW FONT8X16 |
||||
|
#ENDIF |
||||
|
; |
||||
|
.DB 0 ; END OF TABLE |
||||
|
; |
||||
|
; INCLUDE ACTUAL FONT FILES |
||||
|
; |
||||
|
#IF USEFONT6X8 |
||||
|
.ECHO "FONT6X8: " |
||||
|
FONT6X8: |
||||
|
#IF (FMT_6X8 == COMP) |
||||
|
.ECHO "COMPRESSED " |
||||
|
#INCLUDE "font6x8c.asm" |
||||
|
#ELSE |
||||
|
.ECHO "RAW " |
||||
|
#INCLUDE "font6x8u.asm" |
||||
|
#ENDIF |
||||
|
.ECHO $ - FONT6X8 |
||||
|
.ECHO " BYTES\n" |
||||
|
#ENDIF |
||||
|
; |
||||
|
#IF USEFONT8X8 |
||||
|
.ECHO "FONT8X8: " |
||||
|
FONT8X8: |
||||
|
#IF (FMT_8X8 == COMP) |
||||
|
.ECHO "COMPRESSED " |
||||
|
#INCLUDE "font8x8c.asm" |
||||
|
#ELSE |
||||
|
.ECHO "RAW " |
||||
|
#INCLUDE "font8x8u.asm" |
||||
|
#ENDIF |
||||
|
.ECHO $ - FONT8X8 |
||||
|
.ECHO " BYTES\n" |
||||
|
#ENDIF |
||||
|
; |
||||
|
#IF USEFONT8X11 |
||||
|
.ECHO "FONT8X11: " |
||||
|
FONT8X11: |
||||
|
#IF (FMT_8X11 == COMP) |
||||
|
.ECHO "COMPRESSED " |
||||
|
#INCLUDE "font8x11c.asm" |
||||
|
#ELSE |
||||
|
.ECHO "RAW " |
||||
|
#INCLUDE "font8x11u.asm" |
||||
|
#ENDIF |
||||
|
.ECHO $ - FONT8X11 |
||||
|
.ECHO " BYTES\n" |
||||
|
#ENDIF |
||||
|
; |
||||
|
#IF USEFONT8X16 |
||||
|
.ECHO "FONT8X16: " |
||||
|
FONT8X16: |
||||
|
#IF (FMT_8X16 == COMP) |
||||
|
.ECHO "COMPRESSED " |
||||
|
#INCLUDE "font8x16c.asm" |
||||
|
#ELSE |
||||
|
.ECHO "RAW " |
||||
|
#INCLUDE "font8x16u.asm" |
||||
|
#ENDIF |
||||
|
.ECHO $ - FONT8X16 |
||||
|
.ECHO " BYTES\n" |
||||
|
#ENDIF |
||||
|
; |
||||
|
; IT IS CRITICAL THAT THE FINAL BINARY BE EXACTLY USR_SIZ BYTES. |
||||
|
; THIS GENERATES FILLER AS NEEDED. IT WILL ALSO FORCE AN ASSEMBLY |
||||
|
; ERROR IF THE SIZE EXCEEDS THE SPACE ALLOCATED. |
||||
|
; |
||||
|
SLACK .EQU (FONTS_END - $) |
||||
|
; |
||||
|
#IF (SLACK < 0) |
||||
|
.ECHO "*** FONTS IS TOO BIG!!!\n" |
||||
|
!!! ; FORCE AN ASSEMBLY ERROR |
||||
|
#ENDIF |
||||
|
; |
||||
|
.FILL SLACK,$00 |
||||
|
.ECHO "FONTS space remaining: " |
||||
|
.ECHO SLACK |
||||
|
.ECHO " bytes.\n" |
||||
|
; |
||||
|
.END |
||||
@ -0,0 +1,6 @@ |
|||||
|
@echo off |
||||
|
setlocal |
||||
|
|
||||
|
for %%f in (*.def) do ( |
||||
|
PowerShell -ExecutionPolicy Unrestricted .\BuildImg.ps1 %%~nf || exit /b |
||||
|
) |
||||
@ -0,0 +1,66 @@ |
|||||
|
param([string]$Image) |
||||
|
|
||||
|
# If a PowerShell exception occurs, just stop the script immediately. |
||||
|
$ErrorAction = 'Stop' |
||||
|
|
||||
|
$DefFile = $Image + ".def" |
||||
|
|
||||
|
$ImgFile = "..\..\Binary\hd1k_" + $Image + ".img" |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
$SliceList = @() |
||||
|
|
||||
|
ForEach ($Line in Get-Content $DefFile) |
||||
|
{ |
||||
|
$Line = $Line.Trim() |
||||
|
|
||||
|
if (($Line.Length -eq 0) -or ($Line[0] -eq "#")) |
||||
|
{ |
||||
|
continue |
||||
|
} |
||||
|
|
||||
|
$SliceList += $Line |
||||
|
} |
||||
|
|
||||
|
function CreateImageFile { |
||||
|
param ( |
||||
|
[string]$Format = "" # hd1k or hd512 |
||||
|
) |
||||
|
|
||||
|
$ImgFile = "..\..\Binary\" + $Format + "_" + $Image + ".img" |
||||
|
|
||||
|
$FileList = "" |
||||
|
|
||||
|
"Generating $ImgFile using $DefFile..." |
||||
|
|
||||
|
ForEach ($Slice in $SliceList) |
||||
|
{ |
||||
|
$File = "..\..\Binary\" + $Format + "_" + $Slice + ".img" |
||||
|
|
||||
|
if (!(Test-Path $File)) |
||||
|
{ |
||||
|
"Slice input file """ + $File + """ not found!!!" |
||||
|
exit 1 |
||||
|
} |
||||
|
|
||||
|
if ($FileList.Length -gt 0) |
||||
|
{ |
||||
|
$FileList += "+" |
||||
|
} |
||||
|
|
||||
|
$FileList += $File |
||||
|
} |
||||
|
|
||||
|
if ($Format -eq "hd1k") |
||||
|
{ |
||||
|
$FileList = "hd1k_prefix.dat+" + $FileList |
||||
|
} |
||||
|
cmd.exe /c copy /b $FileList $ImgFile |
||||
|
} |
||||
|
|
||||
|
CreateImageFile "hd512" |
||||
|
CreateImageFile "hd1k" |
||||
|
|
||||
|
exit 0 |
||||
@ -0,0 +1,25 @@ |
|||||
|
# This image definition shows how to generate |
||||
|
# an disk image containing all of the available |
||||
|
# slices. |
||||
|
|
||||
|
aztecc |
||||
|
bascomp |
||||
|
blank |
||||
|
cobol |
||||
|
cowgol |
||||
|
cpm22 |
||||
|
cpm3 |
||||
|
fortran |
||||
|
games |
||||
|
hitechc |
||||
|
infocom |
||||
|
msxroms1 |
||||
|
msxroms2 |
||||
|
nzcom |
||||
|
qpm |
||||
|
tpascal |
||||
|
ws4 |
||||
|
z3plus |
||||
|
z80asm |
||||
|
zpm3 |
||||
|
zsdos |
||||
@ -0,0 +1,8 @@ |
|||||
|
# This is the ubiquituous Combo image for RomWBW |
||||
|
|
||||
|
cpm22 |
||||
|
zsdos |
||||
|
nzcom |
||||
|
cpm3 |
||||
|
zpm3 |
||||
|
ws4 |
||||
@ -0,0 +1,117 @@ |
|||||
|
|
||||
|
===== INFOCOM GAMES ===== |
||||
|
|
||||
|
A collection of all official releases of the interactive fiction games |
||||
|
produced by Infocom in the 1980's. The copyright rests with Activision, |
||||
|
and since 2022 that transferred to Microsoft |
||||
|
|
||||
|
Game List follows including the revision number and release date |
||||
|
|
||||
|
amfv.z4 - (A Mind Forever Voyaging) - r77-s850814.z4 |
||||
|
arthur.z6 - (Arthur) - r74-s890714 |
||||
|
ballyhoo.z3 - (Ballyhoo) - r97-s851218 |
||||
|
beyond.z5 - (Beyond Zork) - r57-s871221 |
||||
|
border.z5 - (Border Zone) - r9-s871008 |
||||
|
bureau.z4 - (Bureaucracy) - r116-s870602 |
||||
|
cutthr.z3 - (Cutthroats) - r23-s840809 |
||||
|
deadline.z3 - (Deadline) - r27-s831005 |
||||
|
enchant.z3 - (Enchanter) - r29-s860820 |
||||
|
h2g2.z3 - (The Hitchhiker's Guide to the Galaxy) - r59-s851108 |
||||
|
hollyw.z3 - (Hollywood Hijinx) - r37-s861215 |
||||
|
infidel.z3 - (Infidel) - r22-s830916 |
||||
|
journey.z6 - (Journey) - r83-s890706 |
||||
|
leather.z3 - (Leather Goddesses of Phobos) - r59-s860730 |
||||
|
lurking.z3 - (The Lurking Horror) - r203-s870506 |
||||
|
moonmist.z3 - (Moonmist) - r9-s861022 |
||||
|
nordbert.z4 - (Nord and Bert Couldn't Make Head or Tail of It) - r19-s870722 |
||||
|
planet.z3 - (Planetfall) - r37-s851003 |
||||
|
plunder.z3 - (Plundered Hearts) - r26-s870730 |
||||
|
seastalk.z3 - (Seastalker) - r16-s850603 |
||||
|
sherlock.z5 - (Sherlock) - r26-s880127 |
||||
|
shogun.z6 - (Shogun) - r322-s890706 |
||||
|
sorcerer.z3 - (Sorcerer) - r15-s851108 |
||||
|
spellb.z3 - (Spellbreaker) - r87-s860904 |
||||
|
starcros.z3 - (Starcross) - r17-s821021 |
||||
|
stationf.z3 - (Stationfall) - r107-s870430 |
||||
|
suspect.z3 - (Suspect) - r14-s841005 |
||||
|
suspend.z3 - (Suspended) - r8-s840521 |
||||
|
trinity.z4 - (Trinity) - r12-s860926 |
||||
|
wishb.z3 - (Wishbringer) - r69-s850920 |
||||
|
witness.z3 - (Witness) - r22-s840924 |
||||
|
zork0.z6 - (Zork 0) - r393-s890714 |
||||
|
zork1.z3 - (Zork 1) - r88-s840726 |
||||
|
zork2.z3 - (Zork 2) - r48-s840904 |
||||
|
zork3.z3 - (Zork 3) - r17-s840727 |
||||
|
|
||||
|
The versions above are generally from the "Classic Text Adventure |
||||
|
Masterpieces" released by Activision in (1996) which is the source of |
||||
|
most modern releases. |
||||
|
|
||||
|
The version of Hitchhiker is the one that Douglas Adams postedon his web |
||||
|
site in the mid-90s. The BBC later posted an illustrated version based |
||||
|
on the same game file. |
||||
|
|
||||
|
The above games have been curated from here <https://eblong.com/infocom/>. |
||||
|
Full game documentation can be found here <https://infodoc.plover.net/> |
||||
|
|
||||
|
The game files are a virtual machine code commonly known as Z-Machine, they |
||||
|
are portable and will run on any machine that has a Z-Machine interpreter. |
||||
|
|
||||
|
All the Z3 games come with the official CP/M interpreter (Version C) last |
||||
|
updated by Inforcom on 5th Feb 1985 |
||||
|
|
||||
|
All latter games Z4, Z5,.. and above, are more sophisticated and require |
||||
|
a better interpreter. i.e. VEZZA. |
||||
|
|
||||
|
VEZZA |
||||
|
|
||||
|
Vezza is a modern Infocom/Inform/Z-machine text adventure interpreter for |
||||
|
8 bit z80 based computers. What makes it modern is that it is written in |
||||
|
hand-crafted z80 assembler for maximum speed, and can load not only the |
||||
|
classics such as Zork 1,2 and 3 but also the latter games. |
||||
|
|
||||
|
It can run Z1 up to Z8 inform format interactive fiction game files. To run |
||||
|
a game with Vezza just type Vezza followed by the game you want to run. e.g. |
||||
|
|
||||
|
`VEZZA ZORK0.Z6` |
||||
|
|
||||
|
**Note:** One of the bigger constraints is available RAM. An OS such as ZPM |
||||
|
since it uses banked RAM does have a good amount of available RAM and was |
||||
|
used to test these games work. |
||||
|
|
||||
|
This tool is free but the developer accepts your support by letting you |
||||
|
pay what you think is fair for the tool. If you find this useful consider |
||||
|
donating at: |
||||
|
|
||||
|
https://sijnstra.itch.io/vezza |
||||
|
|
||||
|
The following files are located in user area 15 |
||||
|
|
||||
|
Available builds (requires CP/M version 3 or compatible system): |
||||
|
vezza-b.com - 80x24 screen, vt52 + Banked CP/M 3 |
||||
|
vezza-FG.com - 80x30 screen, VT100/ANSI CP/M 3 (tested on Z80-MBC2 & FabGL) |
||||
|
|
||||
|
Other builds (Large memory CP/M 2.2, no timed input): |
||||
|
vezza-C2.com - 80x24 RunCPM VT100 - no colour |
||||
|
vezza-CC.com - 80x24 RunCPM VT100 with 256 ANSI colour codes |
||||
|
|
||||
|
Slow builds due to BIOS limitations (extra register presevation, less cache, |
||||
|
smaller memory build): |
||||
|
vezza-AV.com - CP/M 2.2 with VT100 codes plus 16 bit ANSI colour & high |
||||
|
RAM. Works on Agon Light CP/M 2.2 |
||||
|
Note: Issues with very high I/O such as screen animations |
||||
|
vezza-AX.com - CP/M 2.2 with VT100 codes plus 16 bit ANSI colour, high |
||||
|
RAM & FabGL Italic. Works on Agon Light CP/M 2.2 |
||||
|
Note: Issues with very high I/O such as screen animations |
||||
|
vezza-RW.com - CP/M 2.2 with VT100 codes plus 16 bit ANSI colour with low |
||||
|
RAM. Tested on RC 2014 SC-126 using TeraTerm |
||||
|
|
||||
|
You should (test and) choose one that works on you configuration, and |
||||
|
ideally copy and rename it as vezza.com, so the Alias COM files can find |
||||
|
and execute the game. |
||||
|
|
||||
|
The above is a subset of available builds. The full repository is available |
||||
|
at https://gitlab.com/sijnstra1/vezza/ |
||||
|
|
||||
|
|
||||
|
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue