Compare commits
127 Commits
v3.5.0-bet
...
v3.5.1-rc.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e67b0f7e24 | ||
|
|
96d0900cf7 | ||
|
|
98441355c9 | ||
|
|
2e0f7922ec | ||
|
|
df3a9e7756 | ||
|
|
5e7f359b82 | ||
|
|
4ef452bcd8 | ||
|
|
d1af2ea8c0 | ||
|
|
cda51f7277 | ||
|
|
094545dcbb | ||
|
|
d79dce64fe | ||
|
|
c1152cfe17 | ||
|
|
ea418f9dc4 | ||
|
|
5118ab8d0a | ||
|
|
e42c04d40f | ||
|
|
3618e0a976 | ||
|
|
d0aad220df | ||
|
|
98e633461f | ||
|
|
cb33018341 | ||
|
|
07c08e2817 | ||
|
|
37f01810f5 | ||
|
|
9b4dd7b1bb | ||
|
|
98414da4d5 | ||
|
|
3450ce71a6 | ||
|
|
f162081ec1 | ||
|
|
6222f7410a | ||
|
|
665067eb25 | ||
|
|
dd25180f7c | ||
|
|
ea38e8e93b | ||
|
|
ddb2da2b8f | ||
|
|
3268d99b43 | ||
|
|
a5314c992d | ||
|
|
683f31438f | ||
|
|
69e9eb0805 | ||
|
|
d18208ef6b | ||
|
|
9ec4b0aa4d | ||
|
|
10dcc4300e | ||
|
|
ce65f8dce0 | ||
|
|
ad4c4ac81b | ||
|
|
31dc8a72d4 | ||
|
|
e4daa2d727 | ||
|
|
a8d2017abc | ||
|
|
f81e089d63 | ||
|
|
acc32dc819 | ||
|
|
ca29e429e7 | ||
|
|
39afeda279 | ||
|
|
23c5f7b8c0 | ||
|
|
91c7349026 | ||
|
|
80995f5264 | ||
|
|
56c9edb547 | ||
|
|
af21691d4e | ||
|
|
3a228e3c1f | ||
|
|
d299a9009f | ||
|
|
667aeeb24d | ||
|
|
067560ae74 | ||
|
|
ef0656f162 | ||
|
|
a8a5a85c5c | ||
|
|
4dcd00089e | ||
|
|
f4caf244af | ||
|
|
a91deeb347 | ||
|
|
3804c69428 | ||
|
|
1b45d32af2 | ||
|
|
83e3b8f24f | ||
|
|
29f6fea4aa | ||
|
|
bf61350280 | ||
|
|
ecf2cdfba2 | ||
|
|
9fc2c6129b | ||
|
|
8f80f2f9cd | ||
|
|
81d81952d3 | ||
|
|
ed532cb51b | ||
|
|
a46e05258c | ||
|
|
a35dbefeda | ||
|
|
74f4149034 | ||
|
|
34cc40f459 | ||
|
|
6f5aa06fb3 | ||
|
|
b28e308bfd | ||
|
|
3d23cea071 | ||
|
|
f7b8efd964 | ||
|
|
3c7e3d7586 | ||
|
|
f359f5fb61 | ||
|
|
50deb280b5 | ||
|
|
7654a6b2ed | ||
|
|
dd9e7d6532 | ||
|
|
37ebfefea3 | ||
|
|
6d8ecbb49a | ||
|
|
dfb005ae9e | ||
|
|
5806522402 | ||
|
|
930bcce7da | ||
|
|
ad7d7638d3 | ||
|
|
da05245b4a | ||
|
|
9469aaf333 | ||
|
|
363218b0eb | ||
|
|
1de5458ad7 | ||
|
|
3c0e4a195e | ||
|
|
30866ccbae | ||
|
|
858d680371 | ||
|
|
252e9077e6 | ||
|
|
6c06413dfe | ||
|
|
a8ee0ca19b | ||
|
|
5a48cc5b42 | ||
|
|
ae9b9f9c14 | ||
|
|
874f1b999e | ||
|
|
64611e1df4 | ||
|
|
ebe1504d75 | ||
|
|
6dc4be24e1 | ||
|
|
257fa5407b | ||
|
|
b8fbe0094c | ||
|
|
9c815a6b4c | ||
|
|
2d854510e3 | ||
|
|
374c0675f1 | ||
|
|
766a65bed0 | ||
|
|
7ecd0aa574 | ||
|
|
c5280b3ebd | ||
|
|
8756937946 | ||
|
|
de94085558 | ||
|
|
7d1cbe0f70 | ||
|
|
8e189b4a4a | ||
|
|
c1866d7091 | ||
|
|
eca0370c65 | ||
|
|
ee7c28c119 | ||
|
|
1ae6274e45 | ||
|
|
0adef71f6a | ||
|
|
d4195b2908 | ||
|
|
33603ed826 | ||
|
|
1279daa2fc | ||
|
|
ab4f43c6bb | ||
|
|
e4bbeece09 |
2
.github/workflows/release.yml
vendored
@@ -31,6 +31,8 @@ jobs:
|
||||
echo "Tag: ${{github.ref_name}}"
|
||||
if grep -q "dev" <<< "${{github.ref_name}}"; then
|
||||
TITLE="RomWBW Development Snapshot"
|
||||
elif grep -q "beta" <<< "${{github.ref_name}}"; then
|
||||
TITLE="RomWBW Beta Release"
|
||||
elif grep -q "pre" <<< "${{github.ref_name}}"; then
|
||||
TITLE="RomWBW Prerelease"
|
||||
elif grep -q "rc" <<< "${{github.ref_name}}"; then
|
||||
|
||||
@@ -9,5 +9,8 @@ if exist Tunes\*.pt? del Tunes\*.pt?
|
||||
if exist Tunes\*.mym del Tunes\*.mym
|
||||
if exist Tunes\*.vgm del Tunes\*.vgm
|
||||
if exist bbcbasic.txt del bbcbasic.txt
|
||||
if exist *.cfg del *.cfg
|
||||
if exist *.fon del *.fon
|
||||
|
||||
pushd Test && call Clean || exit /b 1 & popd
|
||||
pushd ZDE && call Clean || exit /b 1 & popd
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
TOOLS = ../../Tools
|
||||
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.com)
|
||||
SUBDIRS = Test
|
||||
SUBDIRS = Test ZDE
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
@@ -8,4 +8,4 @@ all::
|
||||
mkdir -p Tunes
|
||||
|
||||
clean::
|
||||
@rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.ovr *.hlp *.doc *.COM *.BIN Tunes/*.mym Tunes/*.pt? Tunes/*.vgm bbcbasic.txt
|
||||
@rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.ovr *.hlp *.doc *.COM *.BIN Tunes/*.mym Tunes/*.pt? Tunes/*.vgm bbcbasic.txt *.cfg *.fon
|
||||
|
||||
4
Binary/Apps/ZDE/Clean.cmd
Normal file
@@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.com del *.com
|
||||
6
Binary/Apps/ZDE/Makefile
Normal file
@@ -0,0 +1,6 @@
|
||||
TOOLS = ../../../Tools
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
clean::
|
||||
@rm -f *.com
|
||||
10
Binary/Apps/ZDE/ReadMe.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
***********************************************************************
|
||||
*** ***
|
||||
*** R o m W B W ***
|
||||
*** ***
|
||||
*** Z80/Z180 System Software ***
|
||||
*** ***
|
||||
***********************************************************************
|
||||
|
||||
This directory contains the ZDE executable binaries. They are
|
||||
in their original, unconfigured state.
|
||||
@@ -1,3 +1,12 @@
|
||||
Version 3.5.1
|
||||
-------------
|
||||
- WBW: Fix CPMLDR.SYS & ZPMLDR.SYS for SYSCOPY (reported by Guido Santer)
|
||||
- MAP: Enhanced SLR Tools Disk Image with Plus versions
|
||||
- WBW: Add missing BCLOAD file to MS BASIC Compiler Disk Image (reported by Marshall Gates)
|
||||
- WBW: Doc improvements (per Fraser and Rob Gowin)
|
||||
- WBW: Correct ZMP application crash
|
||||
- MAP: Contribution of the SLABEL.COM tool for displaying and changing slice labels.
|
||||
|
||||
Version 3.5
|
||||
-----------
|
||||
- M?F: Fix for hours display in HBRTC application
|
||||
@@ -38,8 +47,8 @@ Version 3.5
|
||||
- WBW: Add CPU speed selection for HEATH platform to HBIOS
|
||||
- WBW: Add Warm/Cold reboot options to CPUSPD utility
|
||||
- D?N: Added support for eZ80 CPU
|
||||
- MAP: Contributed COPYSL utility
|
||||
- MAP: Added new HBIOS function EXT_SLICE (orginally SYSGET_DIOMED)
|
||||
- MAP: Contributed COPYSL utility that allows disk slices to be copied
|
||||
- MAP: Added new HBIOS function EXT_SLICE, extended disk slice info
|
||||
- MAP: ROMLDR now uses EXT_SLICE to get Slice Sector for boot
|
||||
- MAP: CBIOS now uses EXT_SLICE during drive selection
|
||||
- MAP: CPM3 Boot Loader, and BIOS (drive select) now use EXT_SLICE
|
||||
@@ -47,12 +56,17 @@ Version 3.5
|
||||
- MAP: Significant improvement in Disk Catalog document
|
||||
- MAP: Added Disk Image for the Z3PLUS (Z-System for CP/M-Plus) os.
|
||||
- H?H: Fix XModem 12.3 WRERR to put CAN char in proper register to send.
|
||||
- MAP: Initial NVRAM configuration infrastructure, and boot device selection.
|
||||
- MAP: Added support for dynamic HBIOS config via (RTC) NVRAM
|
||||
- MAP: Added boot application to allow config of NVRAM options
|
||||
- MAP: Configuration of autoboot disk/app added to NVRAM config
|
||||
- WBW: Autoboot is now handled in separate prompt during RomWBW startup
|
||||
- MAP: Added additional tools (Linker/Disasembler) to the Z80ASM Disk Image
|
||||
- PMS: Support interrupt-driven PS2 Keyboard Interface
|
||||
- D?M: Added NetBoot support for Duodyne
|
||||
- WBW: Add options to TUNE/HBIOS to force detection of MSX and RC AY/YM standard PSG ports
|
||||
- MAP: Added /B=OPTIONS for automated drive assignment to ASSIGN.COM
|
||||
- WBW: Added TE Editor (Ladislau Szilagyi)
|
||||
- WBW: Refrech Cowgol disk image (Ladislau Szilagyi)
|
||||
|
||||
Version 3.4
|
||||
-----------
|
||||
|
||||
BIN
Doc/Language/The Cowgol Language.pdf
Normal file
@@ -31,9 +31,9 @@ Log of changes in RomWBW by version.
|
||||
RomWBW User Guide ("RomWBW User Guide.pdf")
|
||||
RomWBW System Guide ("RomWBW System Guide.pdf")
|
||||
RomWBW Applications ("RomWBW Applications.pdf")
|
||||
RomWBW ROM Applications ("RomWBW ROM Applications.pdf")
|
||||
RomWBW Disk Catalog ("RomWBW Disk Catalog.pdf")
|
||||
RomWBW Errata ("RomWBW Errata.pdf")
|
||||
RomWBW Hardware ("RomWBW Hardware.pdf")
|
||||
|
||||
-------------------------------------------------------
|
||||
|
||||
Documentation set for RomWBW. The primary document is the
|
||||
|
||||
BIN
Doc/RomWBW Hardware.pdf
Normal file
BIN
Doc/RomWBW Introduction.pdf
Normal file
98
RELEASE_NOTES.md
Normal file
@@ -0,0 +1,98 @@
|
||||
# RomWBW Release Notes
|
||||
|
||||
This file contains information useful to those upgrading to a new
|
||||
release of RomWBW.
|
||||
|
||||
## All Versions
|
||||
|
||||
- **Please** review the "Upgrading" Section of the RomWBW User Guide.
|
||||
|
||||
- The RomWBW ROM and the RomWBW disk images are intended to be a
|
||||
matched set. After upgrading your ROM, it is important to update
|
||||
the OS boot tracks of your disks as well as the RomWBW-specific
|
||||
applications. This is discussed in the "Upgrading" section of the
|
||||
RomWBW User Guide.
|
||||
|
||||
## Version 3.5
|
||||
|
||||
### Upgrade Notes
|
||||
|
||||
- RomWBW is now more strict with respect to hard disk partition
|
||||
tables. If your hard disk media was created using any of the
|
||||
pre-built disk image files, this will **not** affect you. Otherwise,
|
||||
you may find you are unable to access slices beyond the first
|
||||
slice. If so, use `FDISK80` to reset the partition table on the
|
||||
disk. This will restore normal access to all slices. **Only** do
|
||||
this if you are having an issue.
|
||||
|
||||
- For those building custom ROMs that are overriding `DEFSERCFG`, note
|
||||
that this setting has been moved to a `#DEFINE` instead of an equate
|
||||
(`.SET` or `.EQU`). You will find this `#DEFINE` at the top of all
|
||||
standard config files. You will need to change your setting to a
|
||||
`#DEFINE` at the top of your config file and remove any `.SET` or
|
||||
`.EQU` lines for `DEFSERCFG`.
|
||||
|
||||
- Combining config settings `AUTOCON` and `VDAEMU_SERKBD` causes issues
|
||||
at the boot loader prompt. So, all config files have been changed to
|
||||
consistently enable `AUTOCON` and disable `VDAEMU_SERKBD` (`$FF`). If
|
||||
are want to use `VDAEMU_SERKBD`, you need to set it in your config
|
||||
file as well as disabling AUTOCON.
|
||||
|
||||
### New Features
|
||||
|
||||
- RC2014 Front Panel and LCD Screen support.
|
||||
|
||||
- Console "takeover" support at Boot Loader prompt by pressing the
|
||||
<space> key twice on an alternate console device.
|
||||
|
||||
- Cowgol disk image based on the work of Ladislau Szilagyi.
|
||||
|
||||
- TMS video is automatically reset after an OS warm boot which
|
||||
allows OS to recover from applications that reprogram the TMS
|
||||
video display controller.
|
||||
|
||||
- Implemented "application" RAM banks that can be discovered via
|
||||
the HBIOS API.
|
||||
|
||||
- Documentation improvements (Mark Pruden), including:
|
||||
|
||||
- Reorganization into multiple directories.
|
||||
- Improved Disk Management section in User Guide.
|
||||
- Overhaul of Disk Catalog.
|
||||
|
||||
- Disk image for Z3PLUS (Mark Pruden).
|
||||
|
||||
- `REBOOT` application added (Martin R). Also, reboot capability
|
||||
added to `CPUSPD` utility.
|
||||
|
||||
- `COPYSL` slice copy application (Mark Pruden).
|
||||
|
||||
- `SLABEL` slice label display/edit tool (Mark Pruden).
|
||||
|
||||
- Improved disk slice management and protection (Mark Pruden).
|
||||
|
||||
- Initial NVRAM configuration support (Mark Pruden).
|
||||
|
||||
- Enhancements to ASSIGN command to automatically assign drives
|
||||
(Mark Pruden).
|
||||
|
||||
|
||||
### New Hardware Support
|
||||
|
||||
- NABU w/ RomWBW Option Board.
|
||||
|
||||
- EF9345 video display controller driver (Laszlo Szolnoki).
|
||||
|
||||
- Duodyne Disk I/O (CP/NET) and Media boards.
|
||||
|
||||
- PS/2 keyboard interface on RCBus systems.
|
||||
|
||||
- S100 FPGA-based Z80 including console, SD Cards, and RTC.
|
||||
|
||||
- Support for 16C550-family UART support on additional platforms.
|
||||
|
||||
- Genesis STD Bus Z180 platform (Doug Jackson).
|
||||
|
||||
- Support for Dinoboard eZ80 CPU board provided by Dean Netherton.
|
||||
|
||||
- Added interrupt support to PS/2 keyboard driver by Phil Summers.
|
||||
273
ReadMe.md
@@ -1,17 +1,22 @@
|
||||
|
||||
|
||||
**RomWBW ReadMe** \
|
||||
|
||||
|
||||
|
||||
|
||||
**RomWBW Introduction** \
|
||||
Version 3.5 \
|
||||
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \
|
||||
05 Jan 2025
|
||||
08 May 2025
|
||||
|
||||
# Overview
|
||||
|
||||
RomWBW software provides a complete, commercial quality implementation
|
||||
of CP/M (and workalike) 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:
|
||||
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>)
|
||||
@@ -23,10 +28,21 @@ communities:
|
||||
- [Small Computer Central](https://smallcomputercentral.com/)
|
||||
(<https://smallcomputercentral.com/>)
|
||||
|
||||
A complete list of the currently supported platforms is found in the
|
||||
\[Installation\] section.
|
||||
A complete list of the currently supported platforms is found in [RomWBW
|
||||
Hardware](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Hardware.pdf)
|
||||
.
|
||||
|
||||
General features include:
|
||||
# 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
|
||||
@@ -36,34 +52,19 @@ General features include:
|
||||
- Video drivers including TMS9918, SY6545, MOS8563, HD6445
|
||||
- Keyboard (PS/2) drivers via VT8242 or PPI interfaces
|
||||
- Real time clock drivers including DS1302, BQ4845
|
||||
- OSes: CP/M 2.2, ZSDOS, CP/M 3, NZ-COM, ZPM3, QPM, p-System, and
|
||||
FreeRTOS
|
||||
- Support for CP/NET networking using Wiznet, MT011 or Serial
|
||||
- Built-in VT-100 terminal emulation support
|
||||
|
||||
RomWBW is distributed as both source code and pre-built ROM and disk
|
||||
images. Some of the provided software can be launched directly from the
|
||||
ROM firmware itself:
|
||||
|
||||
- System Monitor
|
||||
- Operating Systems (CP/M 2.2, ZSDOS)
|
||||
- ROM BASIC (Nascom BASIC and Tasty BASIC)
|
||||
- ROM Forth
|
||||
|
||||
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 accessible storage on a single device.
|
||||
OSes and allows up to 2GB of addressable storage on a single device,
|
||||
with up to 128MB accessible at any one time.
|
||||
|
||||
The pre-built ROM firmware images are generally suitable for most users.
|
||||
However, 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.
|
||||
## Included Software
|
||||
|
||||
Multiple disk images are provided in the distribution. Most disk images
|
||||
contain a complete, bootable, ready-to-run implementation of a specific
|
||||
@@ -72,37 +73,79 @@ 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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
# Acquiring RomWBW
|
||||
## 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. 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
|
||||
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. Expand the “Assets” drop-down
|
||||
for the release you want to download, then select the asset named
|
||||
RomWBW-vX.X.X-Package.zip. The Package asset 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.
|
||||
stick to the most recent stable release.
|
||||
|
||||
All source code and distributions are maintained on GitHub. Code
|
||||
contributions are very welcome.
|
||||
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.
|
||||
|
||||
# Installation & Operation
|
||||
#### 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
|
||||
@@ -113,21 +156,79 @@ 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
|
||||
|
||||
Documentation for RomWBW includes:
|
||||
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)
|
||||
- [RomWBW System
|
||||
Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20System%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)
|
||||
- [RomWBW
|
||||
Errata](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Errata.pdf)
|
||||
is a reference for the ROM-hosted and OS-hosted applications created
|
||||
or customized to enhance the operation of RomWBW.
|
||||
|
||||
# Acknowledgments
|
||||
- [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.
|
||||
|
||||
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
|
||||
@@ -198,11 +299,14 @@ let me know if I missed you!
|
||||
- Martin R has provided substantial help reviewing and improving the
|
||||
User Guide and Applications documents.
|
||||
|
||||
- Mark Pruden has also contributed a great deal of content to the Disk
|
||||
Catalog, User Guide as well as contributing the disk image for the
|
||||
Z3PLUS operating system, the COPYSL utility, and also implemented a
|
||||
feature for RomWBW configuration by NVRAM, and added the /B bulk mode
|
||||
of disk assignment to the ASSIGN utility.
|
||||
- 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
|
||||
- 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.
|
||||
|
||||
@@ -235,10 +339,47 @@ let me know if I missed you!
|
||||
|
||||
- Les Bird has contributed support for the NABU w/ Option Board
|
||||
|
||||
Contributions of all kinds to RomWBW are very welcome.
|
||||
## 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
|
||||
@@ -278,19 +419,3 @@ 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.
|
||||
|
||||
# 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>.
|
||||
|
||||
439
ReadMe.txt
@@ -1,6 +1,9 @@
|
||||
RomWBW ReadMe
|
||||
RomWBW Introduction
|
||||
Wayne Warthen (wwarthen@gmail.com)
|
||||
05 Jan 2025
|
||||
08 May 2025
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -9,41 +12,45 @@ OVERVIEW
|
||||
|
||||
RomWBW software provides a complete, commercial quality implementation
|
||||
of CP/M (and workalike) 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:
|
||||
Z80/180/280 retro-computing hardware systems.
|
||||
|
||||
- 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 wide variety of platforms are supported including those produced by
|
||||
these developer communities:
|
||||
|
||||
A complete list of the currently supported platforms is found in the
|
||||
[Installation] section.
|
||||
- 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/)
|
||||
|
||||
General features include:
|
||||
A complete list of the currently supported platforms is found in RomWBW
|
||||
Hardware .
|
||||
|
||||
- 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
|
||||
- Keyboard (PS/2) drivers via VT8242 or PPI interfaces
|
||||
- Real time clock drivers including DS1302, BQ4845
|
||||
- OSes: CP/M 2.2, ZSDOS, CP/M 3, NZ-COM, ZPM3, QPM, p-System, and
|
||||
FreeRTOS
|
||||
- Built-in VT-100 terminal emulation support
|
||||
|
||||
RomWBW is distributed as both source code and pre-built ROM and disk
|
||||
images. Some of the provided software can be launched directly from the
|
||||
ROM firmware itself:
|
||||
|
||||
- System Monitor
|
||||
- Operating Systems (CP/M 2.2, ZSDOS)
|
||||
- ROM BASIC (Nascom BASIC and Tasty BASIC)
|
||||
- ROM Forth
|
||||
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
|
||||
- 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.
|
||||
@@ -51,15 +58,11 @@ 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 accessible storage on a single device.
|
||||
OSes and allows up to 2GB of addressable storage on a single device,
|
||||
with up to 128MB accessible at any one time.
|
||||
|
||||
The pre-built ROM firmware images are generally suitable for most users.
|
||||
However, 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.
|
||||
|
||||
Included Software
|
||||
|
||||
Multiple disk images are provided in the distribution. Most disk images
|
||||
contain a complete, bootable, ready-to-run implementation of a specific
|
||||
@@ -68,11 +71,24 @@ 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.
|
||||
|
||||
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.
|
||||
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
|
||||
@@ -80,30 +96,67 @@ slices or on stand-alone media. This makes exchanging files with modern
|
||||
OSes such as Windows, MacOS, and Linux very easy.
|
||||
|
||||
|
||||
|
||||
ACQUIRING ROMWBW
|
||||
|
||||
ROM Distribution
|
||||
|
||||
The RomWBW Repository (https://github.com/wwarthen/RomWBW) on GitHub is
|
||||
the official distribution location for all project source and
|
||||
documentation. 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. Expand
|
||||
the “Assets” drop-down for the release you want to download, then select
|
||||
the asset named RomWBW-vX.X.X-Package.zip. The Package asset 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.
|
||||
documentation.
|
||||
|
||||
All source code and distributions are maintained on GitHub. Code
|
||||
contributions are very welcome.
|
||||
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
|
||||
|
||||
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
|
||||
@@ -112,138 +165,231 @@ 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.
|
||||
in the RomWBW User Guide. It is also a good idea to review the Release
|
||||
Notes for helpful release-specific information.
|
||||
|
||||
|
||||
Documentation
|
||||
|
||||
Documentation for RomWBW includes:
|
||||
There are several documents that form the core of the RomWBW
|
||||
documentation:
|
||||
|
||||
- RomWBW User Guide
|
||||
- RomWBW System Guide
|
||||
- RomWBW Applications
|
||||
- RomWBW Errata
|
||||
- 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.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
|
||||
ACKNOWLEDGMENTS
|
||||
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.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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.
|
||||
- The CP/NET client files were developed by Douglas Miller.
|
||||
|
||||
- Phillip Stevens contributed support for FreeRTOS.
|
||||
- Phillip Stevens contributed support for FreeRTOS.
|
||||
|
||||
- Curt Mayer contributed the original Linux / MacOS build process.
|
||||
- Curt Mayer contributed the original Linux / MacOS build process.
|
||||
|
||||
- UNA BIOS and FDISK80 are the products of John Coffman.
|
||||
- UNA BIOS and FDISK80 are the products of John Coffman.
|
||||
|
||||
- FLASH4 is a product of Will Sowerbutts.
|
||||
- FLASH4 is a product of Will Sowerbutts.
|
||||
|
||||
- CLRDIR is a product of Max Scane.
|
||||
- CLRDIR is a product of Max Scane.
|
||||
|
||||
- Tasty Basic is a product of Dimitri Theulings.
|
||||
- Tasty Basic is a product of Dimitri Theulings.
|
||||
|
||||
- Dean Netherton contributed eZ80 CPU support, the sound driver
|
||||
interface, and the SN76489 sound driver.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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.
|
||||
- Martin R has provided substantial help reviewing and improving the
|
||||
User Guide and Applications documents.
|
||||
|
||||
- Mark Pruden has also contributed a great deal of content to the Disk
|
||||
Catalog, User Guide as well as contributing the disk image for the
|
||||
Z3PLUS operating system, the COPYSL utility, and also implemented a
|
||||
feature for RomWBW configuration by NVRAM, and added the /B bulk
|
||||
mode of disk assignment to the ASSIGN utility.
|
||||
- Mark Pruden has made a wide variety of contributions including:
|
||||
|
||||
- Jacques Pelletier has contributed the DS1501 RTC driver code.
|
||||
- significant content in the Disk Catalog and User Guide
|
||||
- creation of the Introduction and Hardware documents
|
||||
- Z3PLUS operating system disk image
|
||||
- COPYSL utility
|
||||
- a feature for RomWBW configuration by NVRAM
|
||||
- the /B bulk mode of disk assignment to the ASSIGN utility
|
||||
|
||||
- Jose Collado has contributed enhancements to the TMS driver
|
||||
including compatibility with standard TMS register configuration.
|
||||
- Jacques Pelletier has contributed the DS1501 RTC driver code.
|
||||
|
||||
- Kevin Boone has contributed a generic HBIOS date/time utility
|
||||
(WDATE).
|
||||
- Jose Collado has contributed enhancements to the TMS driver including
|
||||
compatibility with standard TMS register configuration.
|
||||
|
||||
- Matt Carroll has contributed a fix to XM.COM that corrects the port
|
||||
specification when doing a send.
|
||||
- Kevin Boone has contributed a generic HBIOS date/time utility (WDATE).
|
||||
|
||||
- Dean Jenkins enhanced the build process to accommodate the Raspberry
|
||||
Pi 4.
|
||||
- Matt Carroll has contributed a fix to XM.COM that corrects the port
|
||||
specification when doing a send.
|
||||
|
||||
- Tom Plano has contributed a new utility (HTALK) to allow talking
|
||||
directly to HBIOS COM ports.
|
||||
- Dean Jenkins enhanced the build process to accommodate the Raspberry
|
||||
Pi 4.
|
||||
|
||||
- Lars Nelson has contributed several generic utilities such as a
|
||||
universal (OS agnostic) UNARC application.
|
||||
- Tom Plano has contributed a new utility (HTALK) to allow talking
|
||||
directly to HBIOS COM ports.
|
||||
|
||||
- Dylan Hall added support for specifying a secondary console.
|
||||
- Lars Nelson has contributed several generic utilities such as a
|
||||
universal (OS agnostic) UNARC application.
|
||||
|
||||
- Bill Shen has contributed boot loaders for several of his systems.
|
||||
- Dylan Hall added support for specifying a secondary console.
|
||||
|
||||
- Laszlo Szolnoki has contributed an EF9345 video display controller
|
||||
driver.
|
||||
- Bill Shen has contributed boot loaders for several of his systems.
|
||||
|
||||
- Ladislau Szilagyi has contributed an enhanced version of CP/M Cowgol
|
||||
that leverages RomWBW memory banking.
|
||||
- Laszlo Szolnoki has contributed an EF9345 video display controller
|
||||
driver.
|
||||
|
||||
- Les Bird has contributed support for the NABU w/ Option Board
|
||||
- Ladislau Szilagyi has contributed an enhanced version of CP/M Cowgol
|
||||
that leverages RomWBW memory banking.
|
||||
|
||||
Contributions of all kinds to RomWBW are very welcome.
|
||||
- Les Bird has contributed support for the NABU w/ Option Board
|
||||
|
||||
|
||||
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
|
||||
@@ -283,20 +429,3 @@ 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.
|
||||
|
||||
|
||||
|
||||
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.
|
||||
|
||||
@@ -1,16 +1,21 @@
|
||||
This is a RomWBW HBIOS adaptation of BBCBASIC v5.00. The
|
||||
cursor and screen management assumes the use of an ANSI/VT-100 terminal
|
||||
which is generally correct for RomWBW. Support for a hardware system
|
||||
timer is also implemented. If your system does not have a hardware
|
||||
timer, the TIME function will always return 0 and the timeout
|
||||
This is a RomWBW HBIOS adaptation of BBCBASIC v5.00 by R.T.Russell.
|
||||
This implementation was adapted from the source code found at
|
||||
https://github.com/rtrussell/BBCZ80.
|
||||
|
||||
The cursor and screen management assumes the use of an ANSI/VT-100
|
||||
terminal which is generally correct for RomWBW. Support for a hardware
|
||||
system timer is also implemented. If your system does not have a
|
||||
hardware timer, the TIME function will always return 0 and the timeout
|
||||
parameter of the INKEY(n) function will not be observed (will never
|
||||
timeout).
|
||||
|
||||
What follows is some basic information on BBCBASIC from the
|
||||
distribution. Note that it starts with the v3.00 information and
|
||||
later on provides information on the changes in v5.00.
|
||||
later on provides information on the changes in v5.00. Complete
|
||||
documentation for the BBC BASIC (Z80) is found online at
|
||||
https://www.bbcbasic.co.uk/bbcbasic/mancpm/index.html.
|
||||
|
||||
-- WBW 1:15 PM 5/30/2024
|
||||
-- WBW 4:21 PM 2/17/2025
|
||||
|
||||
|
||||
|
||||
@@ -23,55 +28,55 @@ later on provides information on the changes in v5.00.
|
||||
|
||||
1. INTRODUCTION
|
||||
|
||||
BBC BASIC (Z80) has been designed to be as compatible as possible with
|
||||
Version 4 of the 6502 BBC BASIC resident in the BBC Micro Master series.
|
||||
The language syntax is not always identical to that of the 6502 version,
|
||||
BBC BASIC (Z80) has been designed to be as compatible as possible with
|
||||
Version 4 of the 6502 BBC BASIC resident in the BBC Micro Master series.
|
||||
The language syntax is not always identical to that of the 6502 version,
|
||||
but in most cases the Z80 version is more tolerant.
|
||||
|
||||
BBC BASIC (Z80) is as machine independent as possible and, as supplied,
|
||||
it will run on any CP/M 2.2 (or later) system using a Z80 processor
|
||||
(checks are carried out to ensure that the processor is a Z80 and that
|
||||
the version of CP/M is at least 2.2). It is minimally configured for an
|
||||
BBC BASIC (Z80) is as machine independent as possible and, as supplied,
|
||||
it will run on any CP/M 2.2 (or later) system using a Z80 processor
|
||||
(checks are carried out to ensure that the processor is a Z80 and that
|
||||
the version of CP/M is at least 2.2). It is minimally configured for an
|
||||
ADM3a-compatible VDU.
|
||||
|
||||
Few CP/M systems offer colour graphics of the quality provided as
|
||||
standard on the BBC Microcomputer, and no software can provide colour
|
||||
high-resolution graphics from a monochrome character-orientated computer.
|
||||
However, many CP/M system users are interested in the advanced program
|
||||
structures available from BBC BASIC and, within the limitations of the
|
||||
host computer, BBC BASIC (Z80) provides the programming structures and
|
||||
Few CP/M systems offer colour graphics of the quality provided as
|
||||
standard on the BBC Microcomputer, and no software can provide colour
|
||||
high-resolution graphics from a monochrome character-orientated computer.
|
||||
However, many CP/M system users are interested in the advanced program
|
||||
structures available from BBC BASIC and, within the limitations of the
|
||||
host computer, BBC BASIC (Z80) provides the programming structures and
|
||||
the non-graphic commands and functions specified for BBC BASIC.
|
||||
|
||||
In order to make full use of the facilities available in BBC BASIC (Z80)
|
||||
it is necessary to install a small patch to adapt it to the capabilities
|
||||
of the host computer. The source code of the patch present in the
|
||||
In order to make full use of the facilities available in BBC BASIC (Z80)
|
||||
it is necessary to install a small patch to adapt it to the capabilities
|
||||
of the host computer. The source code of the patch present in the
|
||||
distribution version is supplied as BBCDIST.MAC.
|
||||
|
||||
This documentation should be read in conjunction with a standard BBC
|
||||
BASIC manual. Only those features which differ from the standard Acorn
|
||||
This documentation should be read in conjunction with a standard BBC
|
||||
BASIC manual. Only those features which differ from the standard Acorn
|
||||
versions are documented here.
|
||||
|
||||
|
||||
2. MEMORY UTILISATION
|
||||
|
||||
BBC BASIC (Z80) requires about 16 Kbytes of code space, resulting in a
|
||||
value of PAGE of about &3E00. The remainder of the user memory is
|
||||
available for BASIC programs, variables (heap) and stack. Depending on
|
||||
BBC BASIC (Z80) requires about 16 Kbytes of code space, resulting in a
|
||||
value of PAGE of about &3E00. The remainder of the user memory is
|
||||
available for BASIC programs, variables (heap) and stack. Depending on
|
||||
the system configuration, HIMEM can have a value up to &FE00.
|
||||
|
||||
|
||||
3. COMMANDS, STATEMENTS AND FUNCTIONS
|
||||
|
||||
The syntax of BASIC commands, statements and functions is in most cases
|
||||
identical to that of the BBC Micro version (BASIC 4). The few
|
||||
The syntax of BASIC commands, statements and functions is in most cases
|
||||
identical to that of the BBC Micro version (BASIC 4). The few
|
||||
differences are documented here:
|
||||
|
||||
ADVAL
|
||||
This function is not implemented.
|
||||
|
||||
CALL
|
||||
CALL sets up a table in RAM containing details of the parameters; the
|
||||
processor's IX register is set to the address of this parameter table.
|
||||
CALL sets up a table in RAM containing details of the parameters; the
|
||||
processor's IX register is set to the address of this parameter table.
|
||||
The other processor registers are initialised as follows:
|
||||
|
||||
A is initialised to the least significant byte of A%
|
||||
@@ -92,7 +97,7 @@ later on provides information on the changes in v5.00.
|
||||
128 Fixed string $A%
|
||||
129 Movable string A$
|
||||
|
||||
On entry to the subroutine the parameter table contains the following
|
||||
On entry to the subroutine the parameter table contains the following
|
||||
values:
|
||||
|
||||
Number of parameters 1 byte (at IX)
|
||||
@@ -103,29 +108,29 @@ later on provides information on the changes in v5.00.
|
||||
Parameter type ) repeated as often as necessary
|
||||
Parameter address )
|
||||
|
||||
Except in the case of a movable string (normal string variable), the
|
||||
parameter address given is the absolute address at which the item is
|
||||
stored. In the case of movable strings (type 129) it is the address of a
|
||||
4-byte parameter block containing the current length, the maximum length
|
||||
Except in the case of a movable string (normal string variable), the
|
||||
parameter address given is the absolute address at which the item is
|
||||
stored. In the case of movable strings (type 129) it is the address of a
|
||||
4-byte parameter block containing the current length, the maximum length
|
||||
and the start address of the string (LSB first) in that order.
|
||||
|
||||
Integer variables are stored in twos complement form with their least
|
||||
Integer variables are stored in twos complement form with their least
|
||||
significant byte first.
|
||||
|
||||
Fixed strings are stored as the characters of the string followed by a
|
||||
Fixed strings are stored as the characters of the string followed by a
|
||||
carriage return (&0D).
|
||||
|
||||
Floating point variables are stored in binary floating point format with
|
||||
their least significant byte first; the fifth byte is the exponent. The
|
||||
mantissa is stored as a binary fraction in sign and magnitude format.
|
||||
Bit 7 of the most significant byte is the sign bit and, for the purposes
|
||||
of calculating the magnitude of the number, this bit is assumed to be set
|
||||
to one. The exponent is stored as an integer in excess 127 format (to
|
||||
Floating point variables are stored in binary floating point format with
|
||||
their least significant byte first; the fifth byte is the exponent. The
|
||||
mantissa is stored as a binary fraction in sign and magnitude format.
|
||||
Bit 7 of the most significant byte is the sign bit and, for the purposes
|
||||
of calculating the magnitude of the number, this bit is assumed to be set
|
||||
to one. The exponent is stored as an integer in excess 127 format (to
|
||||
find the exponent subtract 127 from the value in the fifth byte).
|
||||
|
||||
If the exponent byte of a floating point number is zero, the number is an
|
||||
integer stored in integer format in the mantissa bytes. Thus an integer
|
||||
can be represented in two different ways in a real variable. For example
|
||||
If the exponent byte of a floating point number is zero, the number is an
|
||||
integer stored in integer format in the mantissa bytes. Thus an integer
|
||||
can be represented in two different ways in a real variable. For example
|
||||
the value +5 can be stored as:
|
||||
|
||||
05 00 00 00 00 Integer 5
|
||||
@@ -138,15 +143,15 @@ later on provides information on the changes in v5.00.
|
||||
This statement is not implemented.
|
||||
|
||||
EDIT
|
||||
A command to edit or concatenate and edit the specified program line(s).
|
||||
The specified lines (including their line numbers) are listed as a single
|
||||
line. By changing only the line number you can use EDIT to duplicate a
|
||||
A command to edit or concatenate and edit the specified program line(s).
|
||||
The specified lines (including their line numbers) are listed as a single
|
||||
line. By changing only the line number you can use EDIT to duplicate a
|
||||
line.
|
||||
|
||||
EDIT 230
|
||||
EDIT 200,230
|
||||
|
||||
The following control functions are active both in the EDIT mode and in
|
||||
The following control functions are active both in the EDIT mode and in
|
||||
the immediate entry mode (i.e. at the BASIC prompt):
|
||||
|
||||
Move the cursor one character position to the left
|
||||
@@ -159,8 +164,8 @@ later on provides information on the changes in v5.00.
|
||||
Delete all characters to the left of the cursor
|
||||
Delete all characters from the cursor to the end of the line
|
||||
|
||||
The choice of which keys activate these functions is made when BBC BASIC
|
||||
is configured for a particular system. The distribution version uses ^H,
|
||||
The choice of which keys activate these functions is made when BBC BASIC
|
||||
is configured for a particular system. The distribution version uses ^H,
|
||||
^I, ^K, ^J, ^A, ^E, DEL (&7F), ^L and ^X.
|
||||
|
||||
To exit EDIT mode and replace the edited line, type RETURN (ENTER).
|
||||
@@ -171,28 +176,28 @@ later on provides information on the changes in v5.00.
|
||||
This statement is not implemented.
|
||||
|
||||
GET
|
||||
This function waits for a character to be typed at the keyboard, and
|
||||
This function waits for a character to be typed at the keyboard, and
|
||||
returns the ASCII code.
|
||||
|
||||
GET can also be used to read data from a processor I/O port; full 16-bit
|
||||
GET can also be used to read data from a processor I/O port; full 16-bit
|
||||
port addressing is available:
|
||||
|
||||
N% = GET(X%) : REM input from port X%
|
||||
|
||||
INKEY
|
||||
This function waits for a specified maximum number of centiseconds for a
|
||||
character to be typed at the keyboard. If no character is typed in that
|
||||
time, the value -1 is returned. In the distribution version the delay is
|
||||
determined by a simple software timing loop, and may be very inaccurate.
|
||||
The customisation patch allows this to be adjusted to suit the system in
|
||||
This function waits for a specified maximum number of centiseconds for a
|
||||
character to be typed at the keyboard. If no character is typed in that
|
||||
time, the value -1 is returned. In the distribution version the delay is
|
||||
determined by a simple software timing loop, and may be very inaccurate.
|
||||
The customisation patch allows this to be adjusted to suit the system in
|
||||
use.
|
||||
|
||||
INPUT#
|
||||
The format of data files is different from that used by the BBC Micro, in
|
||||
part to improve compatibility with standard CP/M files. Numeric values
|
||||
are stored as five bytes in the format documented under CALL; if the
|
||||
fifth byte is zero the value is an integer. Strings are stored as the
|
||||
characters of the string (in the correct order!) followed by a carriage
|
||||
The format of data files is different from that used by the BBC Micro, in
|
||||
part to improve compatibility with standard CP/M files. Numeric values
|
||||
are stored as five bytes in the format documented under CALL; if the
|
||||
fifth byte is zero the value is an integer. Strings are stored as the
|
||||
characters of the string (in the correct order!) followed by a carriage
|
||||
return (&0D).
|
||||
|
||||
MODE
|
||||
@@ -208,15 +213,15 @@ later on provides information on the changes in v5.00.
|
||||
This function is not implemented.
|
||||
|
||||
PRINT#
|
||||
The format of data files is different from that used by the BBC Micro, in
|
||||
part to improve compatibility with standard CP/M files. Numeric values
|
||||
are stored as five bytes in the format documented under CALL; if the
|
||||
fifth byte is zero the value is an integer. Strings are stored as the
|
||||
characters of the string (in the correct order!) followed by a carriage
|
||||
The format of data files is different from that used by the BBC Micro, in
|
||||
part to improve compatibility with standard CP/M files. Numeric values
|
||||
are stored as five bytes in the format documented under CALL; if the
|
||||
fifth byte is zero the value is an integer. Strings are stored as the
|
||||
characters of the string (in the correct order!) followed by a carriage
|
||||
return (&0D).
|
||||
|
||||
PUT
|
||||
A statement to output data to a processor port. Full 16-bit addressing
|
||||
A statement to output data to a processor port. Full 16-bit addressing
|
||||
is available.
|
||||
|
||||
PUT A%,N% : REM Output N% to port A%
|
||||
@@ -225,7 +230,7 @@ later on provides information on the changes in v5.00.
|
||||
This statement is not implemented.
|
||||
|
||||
TIME
|
||||
This pseudo-variable is not implemented in the distribution version, but
|
||||
This pseudo-variable is not implemented in the distribution version, but
|
||||
can be supported by means of the customisation patch. See BBCDIST.MAC.
|
||||
|
||||
USR
|
||||
@@ -240,34 +245,34 @@ later on provides information on the changes in v5.00.
|
||||
H is initialised to the least significant byte of H%
|
||||
L is initialised to the least significant byte of L%
|
||||
|
||||
USR returns a 32-bit integer result composed of the processor's H, L, H'
|
||||
USR returns a 32-bit integer result composed of the processor's H, L, H'
|
||||
and L' registers, with H being the most significant.
|
||||
|
||||
|
||||
4. RESIDENT Z80 ASSEMBLER
|
||||
|
||||
The in-line assembler is accessed in exactly the same way as the 6502
|
||||
assembler in the BBC Micro version of BBC BASIC. That is, '[' enters
|
||||
The in-line assembler is accessed in exactly the same way as the 6502
|
||||
assembler in the BBC Micro version of BBC BASIC. That is, '[' enters
|
||||
assembler mode and ']' exits assembler mode.
|
||||
|
||||
All standard Zilog mnemonics are accepted: ADD, ADC and SBC must be
|
||||
followed by A or HL. For example, ADD A,C is accepted but ADD C is not.
|
||||
However, the brackets around the port number in IN and OUT are optional.
|
||||
Thus both OUT (5),A and OUT 5,A are accepted. The instruction IN F,(C)
|
||||
All standard Zilog mnemonics are accepted: ADD, ADC and SBC must be
|
||||
followed by A or HL. For example, ADD A,C is accepted but ADD C is not.
|
||||
However, the brackets around the port number in IN and OUT are optional.
|
||||
Thus both OUT (5),A and OUT 5,A are accepted. The instruction IN F,(C)
|
||||
is not accepted, but the equivalent code is produced from IN (HL),C
|
||||
|
||||
The pseudo-ops DEFB, DEFW and DEFM are included. DEFM works like EQUS in
|
||||
The pseudo-ops DEFB, DEFW and DEFM are included. DEFM works like EQUS in
|
||||
the 6502 version.
|
||||
|
||||
|
||||
5. OPERATING SYSTEM INTERFACE
|
||||
|
||||
The following resident Operating System ("star") commands are
|
||||
implemented. They may be accessed directly (e.g. *BYE) or via the OSCLI
|
||||
The following resident Operating System ("star") commands are
|
||||
implemented. They may be accessed directly (e.g. *BYE) or via the OSCLI
|
||||
statement (OSCLI "BYE").
|
||||
|
||||
Control characters, lower-case characters, DEL and quotation marks may be
|
||||
incorporated in filenames by using the 'escape' character '|'. However,
|
||||
Control characters, lower-case characters, DEL and quotation marks may be
|
||||
incorporated in filenames by using the 'escape' character '|'. However,
|
||||
there is no equivalent to the BBC Microcomputer's '|!' to set bit 7.
|
||||
|
||||
*BYE
|
||||
@@ -278,7 +283,7 @@ later on provides information on the changes in v5.00.
|
||||
|
||||
*. [filespec]
|
||||
*DIR [filespec]
|
||||
List the files which match the (optional) ambiguous filespec. If the
|
||||
List the files which match the (optional) ambiguous filespec. If the
|
||||
filespec is omitted, all .BBC files are listed:
|
||||
*DIR List all .BBC files on the disk
|
||||
*DIR B:*.* List all files on disk B:
|
||||
@@ -288,53 +293,53 @@ later on provides information on the changes in v5.00.
|
||||
Select drive d as the default drive for subsequent disk operations.
|
||||
|
||||
*ERA filespec
|
||||
Erase (delete) the specified disk file or files. The extension defaults
|
||||
Erase (delete) the specified disk file or files. The extension defaults
|
||||
to .BBC if omitted.
|
||||
|
||||
*ESC [ON|OFF]
|
||||
*ESC OFF disables the abort action of the ESCape key; after *ESC OFF the
|
||||
ESCape key simply returns the ASCII code ESC (27). *ESC ON, or *ESC,
|
||||
*ESC OFF disables the abort action of the ESCape key; after *ESC OFF the
|
||||
ESCape key simply returns the ASCII code ESC (27). *ESC ON, or *ESC,
|
||||
restores the normal action of the ESCape key.
|
||||
|
||||
*EXEC filespec
|
||||
Accept console input from the specified file instead of from the
|
||||
Accept console input from the specified file instead of from the
|
||||
keyboard. If the extension is omitted, .BBC is assumed.
|
||||
|
||||
*LOAD filespec aaaa
|
||||
Loads the specified file into memory at address aaaa. The load address
|
||||
Loads the specified file into memory at address aaaa. The load address
|
||||
must be specified. If the extension is omitted, .BBC is assumed.
|
||||
|
||||
*OPT [n]
|
||||
Select the destination for console output characters. The value n is in
|
||||
Select the destination for console output characters. The value n is in
|
||||
the range 0 to 2, as follows:
|
||||
|
||||
|
||||
0 Send characters to the console output
|
||||
1 Send characters to the auxiliary output
|
||||
2 Send characters to the printer (list) output
|
||||
|
||||
*REN newfile=oldfile
|
||||
*RENAME newfile=oldfile
|
||||
Renames 'oldfile' as 'newfile'. If the extension is omitted, .BBC is
|
||||
Renames 'oldfile' as 'newfile'. If the extension is omitted, .BBC is
|
||||
assumed.
|
||||
|
||||
*RESET
|
||||
Rest the disk system (CP/M function 13). This command does not close any
|
||||
files nor does it perform any other housekeeping function. You should
|
||||
Rest the disk system (CP/M function 13). This command does not close any
|
||||
files nor does it perform any other housekeeping function. You should
|
||||
use *RESET after you have changed a disk.
|
||||
|
||||
*SAVE filespec aaaa bbbb
|
||||
*SAVE filespec aaaa +llll
|
||||
This command saves a specified range of memory to disk. The address range
|
||||
is specified either as start (aaaa) and end+1 (bbbb) or as start (aaaa)
|
||||
This command saves a specified range of memory to disk. The address range
|
||||
is specified either as start (aaaa) and end+1 (bbbb) or as start (aaaa)
|
||||
and length (llll). If the extension is omitted, .BBC is assumed.
|
||||
|
||||
*SPOOL [filespec]
|
||||
Copy all subsequent console output to the specified file. If the filename
|
||||
is omitted, any current spool file is closed and spooling is terminated.
|
||||
Copy all subsequent console output to the specified file. If the filename
|
||||
is omitted, any current spool file is closed and spooling is terminated.
|
||||
If the extension is omitted, .BBC is assumed.
|
||||
|
||||
*TYPE filespec
|
||||
Type the specified file to the screen. If the extension is omitted, .BBC
|
||||
Type the specified file to the screen. If the extension is omitted, .BBC
|
||||
is assumed.
|
||||
|
||||
*| comment
|
||||
@@ -352,7 +357,7 @@ later on provides information on the changes in v5.00.
|
||||
Trappable - BASIC:
|
||||
|
||||
1 Out of range 24 Exp range
|
||||
2 25
|
||||
2 25
|
||||
3 26 No such variable
|
||||
4 Mistake 27 Missing )
|
||||
5 Missing , 28 Bad HEX
|
||||
@@ -383,9 +388,9 @@ later on provides information on the changes in v5.00.
|
||||
198 Disk full 254 Bad command
|
||||
200 Close error 255 CP/M error
|
||||
204 Bad name
|
||||
|
||||
|
||||
New features in BBC BASIC (Z80) version 5.00, May 2024:
|
||||
|
||||
New features in BBC BASIC (Z80) version 5.00, January 2025:
|
||||
|
||||
1. BASIC V statements
|
||||
|
||||
@@ -394,7 +399,7 @@ New features in BBC BASIC (Z80) version 5.00, May 2024:
|
||||
1.3 CASE...WHEN...OTHERWISE...ENDCASE
|
||||
1.4 LOCAL DATA / RESTORE DATA
|
||||
1.5 ON ERROR LOCAL / RESTORE ERROR
|
||||
1.6 DIM var LOCAL size
|
||||
1.6 DIM var LOCAL size
|
||||
1.7 ERROR err, message$
|
||||
1.8 RESTORE +n
|
||||
1.9 SWAP var1,var2
|
||||
@@ -408,10 +413,10 @@ New features in BBC BASIC (Z80) version 5.00, May 2024:
|
||||
2.3 REPORT$
|
||||
2.4 Binary constants
|
||||
2.5 LEFT$ & RIGHT$ with last parameter omitted
|
||||
2.6 MOD(array)
|
||||
2.7 SUM(array)
|
||||
2.8 SUMLEN(array)
|
||||
2.9 GET$#file
|
||||
2.6 MOD(array())
|
||||
2.7 SUM(array())
|
||||
2.8 SUMLEN(array())
|
||||
2.9 GET$#file
|
||||
|
||||
3. BASIC V whole array operations
|
||||
|
||||
@@ -423,9 +428,12 @@ New features in BBC BASIC (Z80) version 5.00, May 2024:
|
||||
3.6 Array initialisation lists
|
||||
3.7 Array compound assignment (+= etc.)
|
||||
3.8 Make a whole array LOCAL
|
||||
3.9 DIM a LOCAL array (on the stack) +
|
||||
3.9 DIM a LOCAL array (on the stack) +
|
||||
|
||||
* String array expressions are not currently supported, instead of using
|
||||
a$() = b$() + c$() use a$() = b$() : a$() += c$()
|
||||
The use of EVAL with whole-array expressions is not currently supported.
|
||||
|
||||
* String array expressions A$() = B$() + C$() are not currently supported.
|
||||
+ LOCAL string arrays should be initialised to their maximum needed length
|
||||
to eliminate the risk of a memory leak each time the PROC/FN is called:
|
||||
LOCAL a$() : DIM a$(size%) : a$() = STRING$(max%, "a") : a$() = ""
|
||||
@@ -434,22 +442,27 @@ New features in BBC BASIC (Z80) version 5.00, May 2024:
|
||||
|
||||
4.1 Bit-shifts <<, >>, >>>
|
||||
4.2 Floating-point indirection (|)
|
||||
4.3 RETURNed parameters from FN/PROC
|
||||
4.4 Compound assignment (+=, -=, *=, /= etc.)
|
||||
4.5 Assigning to a sub-string: LEFT$()=, MID$()= , RIGHT$()=
|
||||
4.6 Hooks for CIRCLE,ELLIPSE,FILL,LINE,MOUSE,ORIGIN,RECTANGLE,TINT,SYS,WAIT
|
||||
4.7 Hooks for WIDTH function, TINT function, MODE function
|
||||
4.3 Additional VDU delimiter '|'
|
||||
4.4 RETURNed parameters from FN/PROC
|
||||
4.5 Compound assignment (+=, -=, *=, /= etc.)
|
||||
4.6 Assigning to a sub-string: LEFT$()=, MID$()= , RIGHT$()=
|
||||
4.7 Hooks for CIRCLE, ELLIPSE, FILL, LINE, ORIGIN, RECTANGLE (graphics)
|
||||
4.8 Hooks for MOUSE, OFF, ON, SYS, TINT, WAIT (statements)
|
||||
4.9 Hooks for MODE function, TINT function, WIDTH function
|
||||
|
||||
5. Extensions to Acorn's BASIC V, compatible with BB4W, BBCSDL and BBCTTY
|
||||
|
||||
5.1 EXIT REPEAT / WHILE / FOR [var]
|
||||
5.2 Address-of operator ^
|
||||
5.3 Byte variables and arrays (& suffix)
|
||||
5.2 Address-of operator (^)
|
||||
5.3 Byte (unsigned 8-bit) variables and arrays (& suffix)
|
||||
5.4 'BY len' and 'TO term' qualifiers to GET$#file
|
||||
5.5 ELSE IF <condition> THEN; (trailing semicolon)
|
||||
5.6 == synonymous with = in comparisons
|
||||
5.7 DIM a global array inside a FN/PROC (use RETURN)
|
||||
5.8 DIM var LOCAL -1 returns the stack pointer, even outside a FN/PROC
|
||||
5.9 RESTORE LOCAL restores local variables without exiting the FN/PROC
|
||||
|
||||
Note: The token for PUT has changed from &CE in version 3 to &0E in version 5.
|
||||
If this token is present in existing programs it will list as ENDWHILE rather
|
||||
than PUT, and the programs will need to be modified to restore functionality.
|
||||
than PUT, and the programs will need to be modified to restore functionality.
|
||||
|
||||
@@ -1,64 +1,68 @@
|
||||
NAME ('HOOK')
|
||||
;
|
||||
GLOBAL CLG
|
||||
GLOBAL COLOUR
|
||||
GLOBAL DRAW
|
||||
GLOBAL ENVEL
|
||||
GLOBAL GCOL
|
||||
GLOBAL MODE
|
||||
GLOBAL MOVE
|
||||
GLOBAL PLOT
|
||||
GLOBAL SOUND
|
||||
GLOBAL PUTIMS
|
||||
GLOBAL CIRCLE
|
||||
GLOBAL ELLIPSE
|
||||
GLOBAL FILL
|
||||
GLOBAL MOUSE
|
||||
GLOBAL ORIGIN
|
||||
GLOBAL RECTAN
|
||||
GLOBAL LINE
|
||||
GLOBAL TINT
|
||||
GLOBAL WAIT
|
||||
GLOBAL SYS
|
||||
;
|
||||
GLOBAL ADVAL
|
||||
GLOBAL POINT
|
||||
GLOBAL GETIMS
|
||||
GLOBAL TINTFN
|
||||
GLOBAL MODEFN
|
||||
GLOBAL WIDFN
|
||||
;
|
||||
EXTRN EXTERR
|
||||
;
|
||||
CLG:
|
||||
COLOUR:
|
||||
DRAW:
|
||||
ENVEL:
|
||||
GCOL:
|
||||
MODE:
|
||||
MOVE:
|
||||
PLOT:
|
||||
SOUND:
|
||||
ADVAL:
|
||||
POINT:
|
||||
GETIMS:
|
||||
PUTIMS:
|
||||
CIRCLE:
|
||||
ELLIPSE:
|
||||
FILL:
|
||||
MOUSE:
|
||||
ORIGIN:
|
||||
RECTAN:
|
||||
LINE:
|
||||
TINT:
|
||||
TINTFN:
|
||||
MODEFN:
|
||||
WIDFN:
|
||||
WAIT:
|
||||
SYS:
|
||||
XOR A
|
||||
CALL EXTERR
|
||||
DEFM 'Sorry'
|
||||
DEFB 0
|
||||
;
|
||||
END
|
||||
NAME ('HOOK')
|
||||
;
|
||||
GLOBAL CLG
|
||||
GLOBAL COLOUR
|
||||
GLOBAL DRAW
|
||||
GLOBAL ENVEL
|
||||
GLOBAL GCOL
|
||||
GLOBAL MODE
|
||||
GLOBAL MOVE
|
||||
GLOBAL PLOT
|
||||
GLOBAL SOUND
|
||||
GLOBAL PUTIMS
|
||||
GLOBAL CIRCLE
|
||||
GLOBAL ELLIPS
|
||||
GLOBAL FILL
|
||||
GLOBAL MOUSE
|
||||
GLOBAL ORIGIN
|
||||
GLOBAL RECTAN
|
||||
GLOBAL LINE
|
||||
GLOBAL TINT
|
||||
GLOBAL WAIT
|
||||
GLOBAL SYS
|
||||
GLOBAL CSRON
|
||||
GLOBAL CSROFF
|
||||
;
|
||||
GLOBAL ADVAL
|
||||
GLOBAL POINT
|
||||
GLOBAL GETIMS
|
||||
GLOBAL TINTFN
|
||||
GLOBAL MODEFN
|
||||
GLOBAL WIDFN
|
||||
;
|
||||
EXTRN EXTERR
|
||||
;
|
||||
CLG:
|
||||
COLOUR:
|
||||
DRAW:
|
||||
ENVEL:
|
||||
GCOL:
|
||||
MODE:
|
||||
MOVE:
|
||||
PLOT:
|
||||
SOUND:
|
||||
ADVAL:
|
||||
POINT:
|
||||
GETIMS:
|
||||
PUTIMS:
|
||||
CIRCLE:
|
||||
ELLIPS:
|
||||
FILL:
|
||||
MOUSE:
|
||||
ORIGIN:
|
||||
RECTAN:
|
||||
LINE:
|
||||
TINT:
|
||||
TINTFN:
|
||||
MODEFN:
|
||||
WIDFN:
|
||||
WAIT:
|
||||
SYS:
|
||||
CSRON:
|
||||
CSROFF:
|
||||
XOR A
|
||||
CALL EXTERR
|
||||
DEFM 'Sorry'
|
||||
DEFB 0
|
||||
;
|
||||
END
|
||||
|
||||
19
Source/Apps/BBCBASIC/licence.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2024, Richard T. Russell, http://www.rtrussell.co.uk/
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
@@ -29,6 +29,8 @@ call :build Survey || exit /b
|
||||
call :build HTalk || exit /b
|
||||
call :build BBCBASIC || exit /b
|
||||
call :build copysl || exit /b
|
||||
call :build slabel || exit /b
|
||||
call :build ZDE || exit /b
|
||||
|
||||
goto :eof
|
||||
|
||||
|
||||
@@ -24,6 +24,8 @@ call :clean Survey || exit /b
|
||||
call :clean HTalk || exit /b
|
||||
call :clean BBCBASIC || exit /b
|
||||
call :clean copysl || exit /b
|
||||
call :clean slabel || exit /b
|
||||
call :clean ZDE || exit /b
|
||||
|
||||
goto :eof
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
SUBDIRS = HTalk XM FDU FAT Tune Test ZMP ZMD Dev VGM cpuspd reboot Survey BBCBASIC copysl \
|
||||
sysgen syscopy assign format talk mode rtc timer
|
||||
slabel sysgen syscopy assign format talk mode rtc timer ZDE
|
||||
TOOLS =../../Tools
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
@@ -146,6 +146,13 @@ MINIT_UB1:
|
||||
LD A,E ; Put in A
|
||||
LD (CPUSPD),A ; Save it
|
||||
;
|
||||
LD A,(UNIT) ; get current unit specified
|
||||
CP 0FFH ; check for undefined
|
||||
JR NZ,MINIT_UB2 ; if already specified, go ahead
|
||||
XOR A ; default is unit 0
|
||||
LD (UNIT),A ; and save it
|
||||
;
|
||||
MINIT_UB2:
|
||||
JP UB_INIT ; UNA BIOS init
|
||||
;
|
||||
MINIT_RET:
|
||||
@@ -284,7 +291,7 @@ EXTRA3:
|
||||
BIOID DB 0 ; BIOS ID, 1=HBIOS, 2=UBIOS
|
||||
CPUSPD DB 10 ; CPU speed in MHz
|
||||
RCVSCL DW 6600 ; RECV loop timeout scalar
|
||||
UNIT DB 0 ; BIOS serial device unit number
|
||||
UNIT DB 0FFH ; BIOS serial device unit number
|
||||
BIOSBID DB 00H ; BIOS bank id
|
||||
;
|
||||
TAG DB "RomWBW, 30-May-2020$"
|
||||
@@ -323,7 +330,7 @@ HB_JPTBL:
|
||||
JP HB_GETCHR ; get character from modem
|
||||
JP HB_RCVRDY ; check receive ready
|
||||
JP HB_SNDRDY ; check send ready
|
||||
JP HB_SPEED ; get speed value for file transfer time
|
||||
JP HB_SPEED ; get speed value for file transfer time
|
||||
;
|
||||
;-----------------------------------------------------------------------
|
||||
;
|
||||
@@ -535,8 +542,10 @@ UB_SENDR:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD BC,0012H ; unit 0, func 12h (write char)
|
||||
LD E,A ; character to E
|
||||
LD A,(UNIT) ; unit
|
||||
LD B,A ; to B
|
||||
LD C,12H ; func 12h (write char)
|
||||
RST 08
|
||||
POP HL
|
||||
POP DE
|
||||
@@ -568,7 +577,9 @@ UB_MDIN:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD BC,0011H ; unit 0, func 12h (write char)
|
||||
LD A,(UNIT) ; unit
|
||||
LD B,A ; to B
|
||||
LD C,11H ; func 11h (read char)
|
||||
RST 08
|
||||
LD A,E ; byte received to A
|
||||
POP HL
|
||||
@@ -586,12 +597,14 @@ UB_RCVRDY:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD BC,0013H ; unit 0, func 13h (input stat)
|
||||
LD A,(UNIT) ; unit
|
||||
LD B,A ; to B
|
||||
LD C,13H ; func 13h (input stat)
|
||||
RST 08
|
||||
XOR A ; zero accum ; 4
|
||||
CP E ; CF means not zero ; 4
|
||||
CCF ; CF means zero ; 4
|
||||
RLA ; ZF means not zero ; 4
|
||||
LD A,E ; move char count to accum
|
||||
SUB 1 ; CF set IFF zero
|
||||
RL A ; CF to bit 0 of A
|
||||
AND 01H ; set Z flag as needed
|
||||
LD A,0 ; report no line errors
|
||||
POP HL
|
||||
POP DE
|
||||
@@ -606,12 +619,14 @@ UB_SNDRDY:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD BC,0014H ; unit 0, func 14h (output stat)
|
||||
LD A,(UNIT) ; unit
|
||||
LD B,A ; to B
|
||||
LD C,14H ; func 14h (output stat)
|
||||
RST 08
|
||||
XOR A ; zero accum ; 4
|
||||
CP E ; CF means not zero ; 4
|
||||
CCF ; CF means zero ; 4
|
||||
RLA ; ZF means not zero ; 4
|
||||
LD A,E ; char avail to send to accum
|
||||
SUB 1 ; CF set IFF zero
|
||||
RL A ; CF to bit 0 of A
|
||||
AND 01H ; set Z flag as needed
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
@@ -804,7 +819,6 @@ UF_INIT:
|
||||
; Send character on top of stack
|
||||
;
|
||||
UF_SENDR:
|
||||
|
||||
POP AF ; get character to send from stack
|
||||
OUT (0FFH),A ; write to fifo
|
||||
UF_SCDP EQU $-1 ; data port
|
||||
|
||||
35
Source/Apps/ZDE/Build.cmd
Normal file
@@ -0,0 +1,35 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set TOOLS=../../../Tools
|
||||
|
||||
set PATH=%TOOLS%\tasm32;%TOOLS%\zxcc;%PATH%
|
||||
|
||||
set TASMTABS=%TOOLS%\tasm32
|
||||
|
||||
set CPMDIR80=%TOOLS%/cpm/
|
||||
|
||||
:: These variations of ZDE are built here as reference copies. They
|
||||
:: are not copied anywhere else during the build.
|
||||
:: The resulting .COM files are manually
|
||||
:: copied to /Source/Images/d_ws/u1 as needed.
|
||||
|
||||
zxcc ZMAC -ZDE16 -/P -/H || exit /b
|
||||
zxcc MLOAD25 ZDE16 || exit /b
|
||||
copy /Y zde16.com ..\..\..\Binary\Apps\ZDE\ || exit /b
|
||||
|
||||
zxcc ZMAC ZDE16A.PAT -/H || exit /b
|
||||
zxcc MLOAD25 ZDE16A=ZDE16.COM,ZDE16A.HEX || exit /b
|
||||
copy /Y zde16a.com ..\..\..\Binary\Apps\ZDE\ || exit /b
|
||||
|
||||
zxcc ZMAC -ZDE17 -/P -/H || exit /b
|
||||
zxcc MLOAD25 ZDE17 || exit /b
|
||||
copy /Y zde17.com ..\..\..\Binary\Apps\ZDE\ || exit /b
|
||||
|
||||
zxcc ZMAC -ZDE18 -/P -/H || exit /b
|
||||
zxcc MLOAD25 ZDE18 || exit /b
|
||||
copy /Y zde18.com ..\..\..\Binary\Apps\ZDE\ || exit /b
|
||||
|
||||
zxcc ZMAC -ZDE19 -/P -/H || exit /b
|
||||
zxcc MLOAD25 ZDE19 || exit /b
|
||||
copy /Y zde19.com ..\..\..\Binary\Apps\ZDE\ || exit /b
|
||||
9
Source/Apps/ZDE/Clean.cmd
Normal file
@@ -0,0 +1,9 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.prn del *.prn
|
||||
if exist *.err del *.err
|
||||
if exist *.rel del *.rel
|
||||
if exist *.com del *.com
|
||||
if exist *.hex del *.hex
|
||||
if exist *.sym del *.sym
|
||||
15
Source/Apps/ZDE/Makefile
Normal file
@@ -0,0 +1,15 @@
|
||||
# These variations of ZDE are built here as reference copies. They
|
||||
# are not copied anywhere else during the build.
|
||||
# The resulting .COM files are manually
|
||||
# copied to /Source/Images/d_ws/u1 as needed.
|
||||
|
||||
OBJECTS = zde16.com zde16a.com zde17.com zde18.com zde19.com
|
||||
DEST = ../../../Binary/Apps/ZDE
|
||||
TOOLS = ../../../Tools
|
||||
OTHERS = *.hex
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
zde16a.com: zde16.com zde16a.pat
|
||||
$(ZXCC) ZMAC zde16a.pat -/H
|
||||
$(ZXCC) MLOAD25 zde16a=zde16.com,zde16a.hex || exit /b
|
||||
38
Source/Apps/ZDE/ReadMe.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# ZDE 1.6 (Z-System Display Editor) reconstituted source - MECPARTS
|
||||
11/19/2020
|
||||
|
||||
Using the source code of [VDE 2.67]
|
||||
(http://www.classiccmp.org/cpmarchives/cpm/Software/WalnutCD/enterprs/cpm/utils/s/vde267sc.lbr)
|
||||
as a guide, I've reconstituted the source code for [ZDE 1.6](http://www.classiccmp.org/cpmarchives/cpm/Software/WalnutCD/cpm/editor/zde16.lbr).
|
||||
The resulting source code is available from the GitHub repository
|
||||
https://github.com/mecparts/zde.
|
||||
|
||||
The source has been assembled with:
|
||||
|
||||
* Al Hawley's ZMAC: assemble as is.
|
||||
* MicroSoft's M80: rename to ZDE16.MAC, un-comment the first two lines
|
||||
and assemble. Use RELHEX to create ZDE16.HEX.
|
||||
* ZASM (Cromemco's ASMB): Rename to ZDE16.Z80 and assemble. Use RELHEX
|
||||
to create ZDE16.HEX.
|
||||
|
||||
Use MLOAD to create ZDE16.COM.
|
||||
|
||||
There are still a couple of routines new to ZDE that I haven't figured
|
||||
out (yet). But most of them have been sussed out.
|
||||
|
||||
## ZDE 1.7 - MECPARTS 11/24/2020
|
||||
|
||||
I've fixed the "doesn't preserve timestamps for files larger than a
|
||||
single extent under ZSDOS" bug that was present in v1.6. The existing
|
||||
ZDENST16.COM program will work with the 1.7 to set the program up for
|
||||
your terminal and printer.
|
||||
|
||||
## ZDE 1.8 - Lars Nelson 12/3/2022
|
||||
|
||||
Added routine to save create time stamp under CP/M Plus since
|
||||
CP/M Plus, unlike ZSDOS, has no native ability to set time stamps.
|
||||
|
||||
## ZDE 1.9 - Peter Onion 03/27/2025
|
||||
|
||||
- Added support for ANSI PgUp, PgDn, Home, & End.
|
||||
- Support ANSI F1 key for menu/error escape.
|
||||
8111
Source/Apps/ZDE/zde16.z80
Normal file
102
Source/Apps/ZDE/zde16a.pat
Normal file
@@ -0,0 +1,102 @@
|
||||
; This patch file modifies the officially-distributed .COM file
|
||||
; for ZDE Ver 1.6 (copyright by Carson Wilson) to:
|
||||
; - Correct a bug which did not preserve create times when
|
||||
; editing files > 1 extent.
|
||||
; - Use an apparently 'dead' byte in the configuration area as
|
||||
; a configuration flag to allow disabling the 'Auto-Indent'
|
||||
; feature which was always 'on' in ZDE1.6.
|
||||
;
|
||||
; With the second change, you may configure the 'Auto-Indent'
|
||||
; feature to be active (as distributed) or disabled (as this patch
|
||||
; is configured) by altering the DB at label 'AIDflt' in the
|
||||
; second part of this patch file below.
|
||||
;
|
||||
; Assemble this file to a .HEX file (example uses ZMAC) as:
|
||||
;
|
||||
; ZMAC ZDE16A.PAT /H
|
||||
;
|
||||
; then overlay the resulting ZDE16.HEX onto ZDE16.COM with MYLOAD
|
||||
; (or equivalent) as:
|
||||
;
|
||||
; MYLOAD ZDE.COM=ZDE.COM,ZDE16.HEX
|
||||
;
|
||||
; The resulting ZDE.COM will be identified as 'ZDE 1.6a' in the
|
||||
; text identification string near the beginning of the .COM file.
|
||||
;
|
||||
; Harold F. Bower, 18 July 2001.
|
||||
;
|
||||
; CP/M Standard Equates
|
||||
;
|
||||
BDOS EQU 0005H
|
||||
FCB EQU 005CH
|
||||
DMA EQU 0080H
|
||||
TPA EQU 0100H
|
||||
;
|
||||
SDMA EQU 26 ; CP/M Function to set DMA Address
|
||||
;
|
||||
; Needed locations within ZDE 1.6
|
||||
;
|
||||
Fill EQU TPA+0F8BH ; For Date Patch
|
||||
TimBuf EQU TPA+3B3FH ; " " "
|
||||
;
|
||||
VTFlg EQU TPA+3ADAH ; For Auto-Ins Patch
|
||||
HCRFlg EQU TPA+3AE3H ; " " " "
|
||||
LfMarg EQU TPA+3AFDH ; " " " "
|
||||
;
|
||||
; ----------- Begin Patch File -----------
|
||||
;
|
||||
; --- Fix Create Time Stamp Preservation Error ---
|
||||
|
||||
ORG TPA+0029H
|
||||
; was:
|
||||
DB 'a, (C)' ; DB ', Copr.'
|
||||
ORG TPA+2461H
|
||||
; was:
|
||||
LD (FCB+13),A ; CALL ClUsrF
|
||||
;
|
||||
ORG TPA+2F10H
|
||||
; was:
|
||||
LD B,4 ; CALL ClUsrF
|
||||
CALL ClUsrF ; LD DE,TimBuf
|
||||
LD DE,TimBuf ; LD C,SDMA
|
||||
CALL SetDMA ; CALL BDOS
|
||||
;
|
||||
ORG TPA+30AAH
|
||||
; was:
|
||||
LD DE,DMA ; LD C,SDMA
|
||||
SetDMA: LD C,SDMA ; LD DE,DMA
|
||||
;
|
||||
ORG TPA+30B4H
|
||||
; was:
|
||||
ClUsrF: XOR A ; XOR A
|
||||
EX DE,HL ; LD (FCB+13),A
|
||||
JP Fill ; RET
|
||||
;
|
||||
; --- Usurp Config Flag for Auto-Insert use, sense on startup ---
|
||||
;
|
||||
ORG TPA+0057H
|
||||
; was: 0FFH
|
||||
AIDflt: DB 00H ; Set Desired default (0=Off, FF=On)
|
||||
;
|
||||
ORG TPA+262AH
|
||||
; was:
|
||||
LD (LfMarg),HL ; LD HL,0101H
|
||||
XOR A ; LD (LfMarg),HL
|
||||
LD (VTFlg),A ; XOR A
|
||||
LD (HCRFlg),A ; LD (VTFlg),A
|
||||
NOP ; LD (HCRFlg),A
|
||||
LD A,(AIDflt) ; DEC A
|
||||
;
|
||||
ORG TPA+2711H
|
||||
; was:
|
||||
NOP ; LD A,(0157H) {Unknown Use}
|
||||
NOP ; OR A
|
||||
NOP ; JP Z,Error2
|
||||
NOP
|
||||
NOP
|
||||
NOP
|
||||
NOP
|
||||
;
|
||||
;------------ End of Patch File ------------
|
||||
END
|
||||
|
||||
8111
Source/Apps/ZDE/zde17.z80
Normal file
8567
Source/Apps/ZDE/zde18.z80
Normal file
8598
Source/Apps/ZDE/zde19.z80
Normal file
@@ -81,7 +81,7 @@ MINIT1:
|
||||
SUB '0' ; Got it, convert to binary
|
||||
LD (UNIT),A ; Save it
|
||||
LD A,' ' ; Space character to accum
|
||||
LD (HL),A ; Remove numberic from FCB
|
||||
LD (HL),A ; Remove numeric from FCB
|
||||
JR MINIT3 ; Proceed with initialization
|
||||
|
||||
MINIT2:
|
||||
@@ -181,6 +181,13 @@ MINIT_UB1:
|
||||
LD A,E ; Put in A
|
||||
LD (CPUSPD),A ; Save it
|
||||
;
|
||||
LD A,(UNIT) ; get current unit specified
|
||||
CP 0FFH ; check for undefined
|
||||
JR NZ,MINIT_UB2 ; if already specified, go ahead
|
||||
XOR A ; default is unit 0
|
||||
LD (UNIT),A ; and save it
|
||||
;
|
||||
MINIT_UB2:
|
||||
JP UB_INIT ; UNA BIOS init
|
||||
;
|
||||
MINIT_RET:
|
||||
@@ -213,7 +220,6 @@ MINIT_RET:
|
||||
;
|
||||
; Return with CPU speed in A
|
||||
LD A,(CPUSPD) ; A := CPU speed in MHz
|
||||
LD HL,(RCVSCL) ; HL := receive scalar
|
||||
RET ; and return
|
||||
;
|
||||
;-----------------------------------------------------------------------
|
||||
@@ -299,6 +305,22 @@ FAIL:
|
||||
CALL BDOS ; Do it
|
||||
JP 0 ; Bail out!
|
||||
;
|
||||
; Adjust CPUSPD to account for overhead of HBIOS or UBIOS. It appears
|
||||
; that dividing CPU speed in MHz by 8 results in timeouts that are
|
||||
; roughly correct.
|
||||
;
|
||||
SLOW:
|
||||
LD A,(CPUSPD) ; Get true CPU speed
|
||||
ADD A,4 ; Add for rounding
|
||||
SRL A ; Divide by 8
|
||||
SRL A
|
||||
SRL A
|
||||
JR NZ,SLOW1 ; If not zero, we are good
|
||||
LD A,1 ; else, make it 1
|
||||
SLOW1:
|
||||
LD (CPUSPD),A ; Save it
|
||||
RET
|
||||
;
|
||||
;-----------------------------------------------------------------------
|
||||
;
|
||||
; The following are all dummy routines that are unused because MINIT
|
||||
@@ -318,7 +340,6 @@ EXTRA3:
|
||||
;
|
||||
BIOID DB 0 ; BIOS ID, 1=HBIOS, 2=UBIOS
|
||||
CPUSPD DB 10 ; CPU speed in MHz
|
||||
RCVSCL DW 6600 ; RECV loop timeout scalar
|
||||
UNIT DB 0FFH ; BIOS serial device unit number
|
||||
BIOSBID DB 00H ; BIOS bank id
|
||||
;
|
||||
@@ -365,8 +386,7 @@ HB_JPTBL:
|
||||
; HBIOS initialization
|
||||
;
|
||||
HB_INIT:
|
||||
LD HL,2150 ; Smaller receive loop timeout scalar
|
||||
LD (RCVSCL),HL ; ... to compensate for BIOS overhead
|
||||
CALL SLOW ; Adjust CPUSPD for HBIOS overhead
|
||||
;
|
||||
; Patch SENDR w/ FastPath addresses
|
||||
LD BC,0F801H ; Get CIO func/data adr
|
||||
@@ -404,10 +424,6 @@ HB_INIT:
|
||||
RST 08
|
||||
JP NZ,APIERR ; handle API error
|
||||
LD (HB_SRFN),HL ; Plug in func adr
|
||||
;
|
||||
; Claim 1 MHz CPU to offset overhead of HBIOS
|
||||
LD A,1
|
||||
LD (CPUSPD),A ; Save it
|
||||
;
|
||||
LD HL,HB_JPTBL
|
||||
LD DE,HB_LBL
|
||||
@@ -556,14 +572,8 @@ UB_INIT:
|
||||
;
|
||||
; TODO:
|
||||
; - TEST!!!
|
||||
; - ADJUST RCVSCL?
|
||||
;
|
||||
LD HL,3000 ; Smaller receive loop timeout scalar
|
||||
LD (RCVSCL),HL ; ... to compensate for BIOS overhead
|
||||
;
|
||||
; Claim 1 MHz CPU to offset overhead of HBIOS
|
||||
LD A,1
|
||||
LD (CPUSPD),A ; Save it
|
||||
CALL SLOW ; Adjust CPUSPD for UBIOS overhead
|
||||
;
|
||||
LD HL,UB_JPTBL
|
||||
LD DE,UB_LBL
|
||||
@@ -578,8 +588,10 @@ UB_SENDR:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD BC,0012H ; unit 0, func 12h (write char)
|
||||
LD E,A ; character to E
|
||||
LD A,(UNIT) ; unit
|
||||
LD B,A ; to B
|
||||
LD C,12H ; func 12h (write char)
|
||||
RST 08
|
||||
POP HL
|
||||
POP DE
|
||||
@@ -611,7 +623,9 @@ UB_MDIN:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD BC,0011H ; unit 0, func 12h (write char)
|
||||
LD A,(UNIT) ; unit
|
||||
LD B,A ; to B
|
||||
LD C,11H ; func 11h (read char)
|
||||
RST 08
|
||||
LD A,E ; byte received to A
|
||||
POP HL
|
||||
@@ -629,12 +643,14 @@ UB_RCVRDY:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD BC,0013H ; unit 0, func 13h (input stat)
|
||||
LD A,(UNIT) ; unit
|
||||
LD B,A ; to B
|
||||
LD C,13H ; func 13h (input stat)
|
||||
RST 08
|
||||
XOR A ; zero accum ; 4
|
||||
CP E ; CF means not zero ; 4
|
||||
CCF ; CF means zero ; 4
|
||||
RLA ; ZF means not zero ; 4
|
||||
LD A,E ; move char count to accum
|
||||
SUB 1 ; CF set IFF zero
|
||||
RL A ; CF to bit 0 of A
|
||||
AND 01H ; set Z flag as needed
|
||||
LD A,0 ; report no line errors
|
||||
POP HL
|
||||
POP DE
|
||||
@@ -649,12 +665,14 @@ UB_SNDRDY:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD BC,0014H ; unit 0, func 14h (output stat)
|
||||
LD A,(UNIT) ; unit
|
||||
LD B,A ; to B
|
||||
LD C,14H ; func 14h (output stat)
|
||||
RST 08
|
||||
XOR A ; zero accum ; 4
|
||||
CP E ; CF means not zero ; 4
|
||||
CCF ; CF means zero ; 4
|
||||
RLA ; ZF means not zero ; 4
|
||||
LD A,E ; char avail to send to accum
|
||||
SUB 1 ; CF set IFF zero
|
||||
RL A ; CF to bit 0 of A
|
||||
AND 01H ; set Z flag as needed
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
@@ -705,9 +723,6 @@ UA_JPTBL:
|
||||
; UART initialization
|
||||
;
|
||||
UA_INIT:
|
||||
LD DE,13000 ; receive loop timeout scalar
|
||||
LD (RCVSCL),DE ; ... for UART RCVRDY timing
|
||||
;
|
||||
LD A,L ; get base I/O port address
|
||||
LD (UA_SCP),A ; set port value in SENDR
|
||||
LD (UA_GCP),A ; set port value in GETCHR
|
||||
@@ -826,9 +841,6 @@ UF_JPTBL:
|
||||
; USB-FIFO initialization
|
||||
;
|
||||
UF_INIT:
|
||||
LD DE,12000 ; receive loop timeout scalar
|
||||
LD (RCVSCL),DE ; ... for UART RCVRDY timing
|
||||
;
|
||||
LD A,L ; get base I/O port address (data port)
|
||||
LD (UF_SCDP),A ; set data port in SENDR
|
||||
LD (UF_GCDP),A ; set data port in GETCHR/MDIN
|
||||
@@ -847,7 +859,6 @@ UF_INIT:
|
||||
; Send character on top of stack
|
||||
;
|
||||
UF_SENDR:
|
||||
|
||||
POP AF ; get character to send from stack
|
||||
OUT (0FFH),A ; write to fifo
|
||||
UF_SCDP EQU $-1 ; data port
|
||||
|
||||
@@ -7,10 +7,13 @@ set PATH=%TOOLS%\zxcc;%PATH%
|
||||
|
||||
set CPMDIR80=%TOOLS%/cpm/
|
||||
|
||||
zxcc Z80ASM -ZMO-RW01/H || exit /b
|
||||
zxcc MLOAD25 -ZMP.COM=ZMPX.COM,ZMO-RW01 || exit /b
|
||||
:: zxcc Z80ASM -ZMO-RW01/LH || exit /b
|
||||
zxcc Z80ASM -ZMO-WBW/LH || exit /b
|
||||
zxcc MLOAD25 -ZMP.COM=ZMPX.COM,ZMO-WBW || exit /b
|
||||
|
||||
copy /Y zmp.com ..\..\..\Binary\Apps\ || exit /b
|
||||
copy /Y *.ovr ..\..\..\Binary\Apps\ || exit /b
|
||||
copy /Y zmp.cfg ..\..\..\Binary\Apps\ || exit /b
|
||||
copy /Y zmp.fon ..\..\..\Binary\Apps\ || exit /b
|
||||
copy /Y *.hlp ..\..\..\Binary\Apps\ || exit /b
|
||||
copy /Y zmp.doc ..\..\..\Binary\Apps\ || exit /b
|
||||
@@ -1,10 +1,10 @@
|
||||
OBJECTS = zmp.com *.ovr *.hlp zmp.doc
|
||||
OBJECTS = zmp.com *.ovr zmp.cfg zmp.fon *.hlp zmp.doc
|
||||
DEST = ../../../Binary/Apps
|
||||
TOOLS = ../../../Tools
|
||||
OTHERS = *.hex
|
||||
NODELETE = *.ovr zmp.doc *.hlp
|
||||
NODELETE = *.ovr zmp.doc zmp.cfg zmp.fon *.hlp
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
|
||||
zmp.com: zmo-rw01.hex
|
||||
$(ZXCC) MLOAD25 -ZMP.COM=ZMPX.COM,ZMO-RW01
|
||||
zmp.com: zmo-wbw.hex
|
||||
$(ZXCC) MLOAD25 -ZMP.COM=ZMPX.COM,ZMO-WBW
|
||||
|
||||
@@ -27,4 +27,15 @@ as at Aug 23rd, 2021.
|
||||
Untested on Ron Murrays ZMP15
|
||||
- Space getting short so messages shortened.
|
||||
|
||||
--PMS 8/24/2021
|
||||
--PMS 8/24/2021
|
||||
|
||||
- Refactored overlay to resolve some stack issues.
|
||||
- Removed support for setport because it didn't make much sense
|
||||
with ability to specify port on command line.
|
||||
- Added an equate (pcfg) which controls whether port configuration
|
||||
is implemented. It is set to false (no port configuration).
|
||||
because ZMP it is unable to handle many RomWBW serial port settings
|
||||
(notably the hard-wired 115200 baud of many RCBus systems). You
|
||||
must now used MODE to configure port before starting ZMP.
|
||||
|
||||
--WBW 1:55 PM 4/16/2025
|
||||
844
Source/Apps/ZMP/zmo-wbw.z80
Normal file
@@ -0,0 +1,844 @@
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
; Overlay for ZMP (Z-Modem Program)
|
||||
;
|
||||
; Name ZMO-WBW.Z80
|
||||
;
|
||||
; Dated April 14, 2025
|
||||
;
|
||||
; Written by -
|
||||
; Phil Summers, Wayne Warthen
|
||||
;
|
||||
; ROMWBW version using HBIOS and https://github.com/mecparts/zmp
|
||||
; version of zmodem
|
||||
;
|
||||
; - All modem/serial i/o is through RomWBW HBIOS.
|
||||
;
|
||||
; - Data bits, stop bits, and parity are determined by HBIOS.
|
||||
; The ZMP settings will have no effect. Use RomWBW MODE
|
||||
; command to set serial port config before starting ZMP.
|
||||
;
|
||||
; - Timing delay calculations based on HBIOS reported CPU speed.
|
||||
;
|
||||
; - The pcfg equate determines whether the overlay will
|
||||
; implement port initialization. Normally, pcfg will be
|
||||
; set to false because ZMP does not allow configuring
|
||||
; many HBIOS speeds (notably the 115200 baud hardwired
|
||||
; into many RCBus systems). In this case, you must
|
||||
; configure the modem port using the RomWBW
|
||||
; MODE command as desired before starting ZMP.
|
||||
;
|
||||
; - The modem port is assigned to an HBIOS character unit. By
|
||||
; default, the modem is assigned to HBIOS character unit 1.
|
||||
; An alternate HBIOS character unit may be specified as a
|
||||
; parameter on the command line as a single number. For
|
||||
; example, the following will assign HBIOS port 3 as the
|
||||
; ZMP modem port:
|
||||
;
|
||||
; ZMP 3
|
||||
;
|
||||
; - The original version of ZMP from Ron Murray allows you to
|
||||
; select from 2 logical modem ports. This overlay ignores
|
||||
; any attempt to select ports from within ZMP. The desired
|
||||
; modem port should be assigned using the command line
|
||||
; parameter as described above.
|
||||
;
|
||||
; - Teraterm users may need to change the ZmodemWinSize value
|
||||
; to 1024 in the teraterm.ini configuration file.
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
;
|
||||
; System-dependent code overlay for ZMODEM
|
||||
;
|
||||
;
|
||||
;
|
||||
; Insert your own code as necessary in this file. Code contained herein
|
||||
; has been written in Z80 code for use with M80 or SLR. Assemble as follows:
|
||||
;
|
||||
; SLR ZMO-xx01/h
|
||||
; MLOAD ZMP.COM=ZMODEM.COM,ZMO-xx01.HEX
|
||||
; or
|
||||
; M80 =ZMO-xx01.Z80
|
||||
; RELHEX ZMO-xx01
|
||||
; MLOAD ZMP.COM=ZMODEM.COM,ZMO-xx01.HEX
|
||||
;
|
||||
;
|
||||
; (Don't use L80 without changing the source for assembly as a
|
||||
; cseg file.)
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
;
|
||||
; Notes on modifying this file:
|
||||
;
|
||||
; C requires that functions do not change either index register (IX or IY).
|
||||
; If your overlay requires either of these to be changed, ensure they are
|
||||
; restored to the original values on return.
|
||||
; Since collecting parameters from C functions can be tricky, only change
|
||||
; the parts marked 'Insert your own code here'. Do NOT modify the jump
|
||||
; table at the start. Do NOT modify the entry/exit sections of each
|
||||
; function. Do NOT pass 'GO'. Do NOT collect $200.
|
||||
; Apart from defining modem functions, this file also defines terminal
|
||||
; characteristics. Examples provided are for ADM-3A (with a few of my own
|
||||
; additions). Modify to suit your own terminal. An inline print routine
|
||||
; is provided for printing strings in the usual way: usage is
|
||||
;
|
||||
; call print
|
||||
; db 'required string',0
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
;
|
||||
; Don't forget to set your clock speed at the clkspd variable.
|
||||
;
|
||||
;
|
||||
; If you find your overlay exceeds the maximum size (currently 0400h),
|
||||
; you will have to contact me for another version. If too many people need
|
||||
; to do it, we haven't allowed enough room.
|
||||
;
|
||||
; Ron Murray 15/8/88
|
||||
;
|
||||
;
|
||||
;
|
||||
;---------------------------------------------------------------------------
|
||||
|
||||
false equ 0
|
||||
true equ not false
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
; User-set variables:
|
||||
|
||||
debug equ false ; to allow debugging of overlay with Z8E etc.
|
||||
clkspd equ 8 ; Processor clock speed in MHz
|
||||
pcfg equ false ; Allow ZMP to configure port
|
||||
|
||||
;
|
||||
;Set the following two equates to the drive and user area which will contain
|
||||
; ZMP's .OVR files, .CFG file, .FON file and .HLP file. Set both to zero
|
||||
; (null) to locate them on the drive from which ZMP was invoked.
|
||||
|
||||
overdrive equ 0 ; Drive to find overlay files on ('A'-'P')
|
||||
overuser equ 0 ; User area to find files
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
|
||||
; NOT user-set variables
|
||||
|
||||
userdef equ 0145h ; origin of this overlay
|
||||
; This address should not change with
|
||||
; subsequent revisions.
|
||||
mspeed equ 03ch ; location of current baud rate.
|
||||
ovsize equ 0400h ; max size of this overlay
|
||||
|
||||
fcb equ 05ch ; primary command line CP/M fcb
|
||||
|
||||
.z80 ; use z80 code
|
||||
aseg ; absolute
|
||||
|
||||
if debug
|
||||
org 100h ; so you can debug it with cebug, zsid, etc
|
||||
else
|
||||
org userdef
|
||||
endif
|
||||
|
||||
|
||||
esc equ 1bh
|
||||
ctrlq equ 11h
|
||||
cr equ 0dh
|
||||
lf equ 0ah
|
||||
bdos equ 5
|
||||
|
||||
|
||||
codebgn equ $
|
||||
|
||||
;Jump table for the overlay: do NOT change this
|
||||
jump_tab:
|
||||
jp scrnpr ; screen print
|
||||
jp mrd ; modem read with timeout
|
||||
jp mchin ; get a character from modem
|
||||
jp mchout ; send a character to the modem
|
||||
jp mordy ; test for tx buffer empty
|
||||
jp mirdy ; test for character received
|
||||
jp sndbrk ; send break
|
||||
jp cursadd ; cursor addressing
|
||||
jp cls ; clear screen
|
||||
jp invon ; inverse video on
|
||||
jp invoff ; inverse video off
|
||||
jp hide ; hide cursor
|
||||
jp show ; show cursor
|
||||
jp savecu ; save cursor position
|
||||
jp rescu ; restore cursor position
|
||||
jp mint ; service modem interrupt
|
||||
jp invec ; initialise interrupt vectors
|
||||
jp dinvec ; de-initialise interrupt vectors
|
||||
jp mdmerr ; test uart flags for error
|
||||
jp dtron ; turn DTR on
|
||||
jp dtroff ; turn DTR OFF
|
||||
jp init ; initialise uart
|
||||
jp wait ; wait seconds
|
||||
jp mswait ; wait milliseconds
|
||||
jp userin ; user-defined entry routine
|
||||
jp userout ; user-defined exit routine
|
||||
jp getvars ; get system variables
|
||||
jp setport ; set port (0 or 1)
|
||||
|
||||
; Spare jumps for compatibility with future versions
|
||||
jp spare ; spare for later use
|
||||
jp spare ; spare for later use
|
||||
jp spare ; spare for later use
|
||||
jp spare ; spare for later use
|
||||
jp spare ; spare for later use
|
||||
jp spare ; spare for later use
|
||||
|
||||
; Local storage
|
||||
|
||||
hbunit db 1 ; Active HBIOS unit for modem I/O
|
||||
cpumhz db clkspd ; CPU clock speed in MHz
|
||||
|
||||
;
|
||||
; Main code starts here
|
||||
;
|
||||
;Screen print function
|
||||
scrnpr:
|
||||
; <== Insert your own code here
|
||||
call print
|
||||
db 'Screen print not supported.',cr,lf,0
|
||||
; <== End of your own code
|
||||
spare:
|
||||
ret
|
||||
|
||||
|
||||
; User-defined entry routine: leave empty if not needed
|
||||
userin:
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
|
||||
call print
|
||||
db cr,lf,'ZMP Overlay for RomWBW HBIOS v1.0',cr,lf,0
|
||||
|
||||
; Scan and parse default FCB to initialize HBIOS unit if
|
||||
; specified.
|
||||
ld a,(fcb + 1) ; get parm from fcb
|
||||
cp ' ' ; anything there?
|
||||
jr z,userin1 ; if empty, done
|
||||
sub '0' ; ASCII to binary
|
||||
jr c,parmerr ; less than 0, parm error
|
||||
cp 10 ; >= 10?
|
||||
jr nc,parmerr ; greater than 9, parm error
|
||||
ld (hbunit),a ; save it
|
||||
|
||||
userin1:
|
||||
call showcom ; show com port info
|
||||
|
||||
; check that unit is actually available in HBIOS
|
||||
ld bc,0f800h ; get HBIOS char unit count
|
||||
rst 8 ; do it
|
||||
ld a,(hbunit) ; get active modem unit
|
||||
cp e ; compare to units available
|
||||
jr nc,porterr ; unit too high, port error
|
||||
|
||||
if pcfg
|
||||
|
||||
; Force port initialization by setting an invalid
|
||||
; baud rate (mspeed).
|
||||
; speed to an arbitrary value of 8 (9600 baud).
|
||||
ld a,-1
|
||||
ld (mspeed),a
|
||||
|
||||
else
|
||||
|
||||
; We don't support port configuration. Here we set the modem
|
||||
; speed to an arbitrary value of 8 (9600 baud).
|
||||
ld a,8
|
||||
ld (mspeed),a
|
||||
|
||||
endif
|
||||
|
||||
|
||||
ld bc,0f8f0h ; HBIOS func get CPU info
|
||||
rst 08 ; do it, l = CPU speed in MHz
|
||||
ld a,l ; to accum
|
||||
ld (cpumhz),a ; and save it for wait loop
|
||||
|
||||
ld hl,2
|
||||
call waithls
|
||||
|
||||
pop hl
|
||||
pop de
|
||||
pop bc
|
||||
ret
|
||||
|
||||
parmerr:
|
||||
; Handle a bad parameter
|
||||
call print ; print error message
|
||||
db cr,lf,'ZMP parameter error!',cr,lf,0
|
||||
rst 0 ; bail out to OS
|
||||
|
||||
porterr:
|
||||
; Handle a bad port
|
||||
call print ; print error message
|
||||
db cr,lf,'Invalid HBIOS unit for ZMP Modem port!',cr,lf,0
|
||||
rst 0 ; bail out to OS
|
||||
|
||||
showcom:
|
||||
; Display the HBIOS unit to be used for the ZMP Modem
|
||||
call print
|
||||
db cr,lf,'ZMP Modem on HBIOS Unit #',0
|
||||
ld a,(hbunit)
|
||||
add a,'0'
|
||||
call cout
|
||||
call print
|
||||
db cr,lf,0
|
||||
|
||||
; User-defined exit routine: leave empty if not needed
|
||||
userout:
|
||||
ret
|
||||
|
||||
;Get a character from the modem: return in HL
|
||||
mchin:
|
||||
push bc
|
||||
|
||||
; <== Insert your own code here
|
||||
ld a,(hbunit)
|
||||
ld c,a
|
||||
ld b,00h
|
||||
rst 08
|
||||
ld a,e
|
||||
; <== End of your own code
|
||||
|
||||
ld l,a ; put in HL
|
||||
ld h,0
|
||||
or a ; set/clear Z
|
||||
pop bc
|
||||
ret
|
||||
|
||||
;Send a character to the modem
|
||||
mchout:
|
||||
ld hl,2 ; get the character
|
||||
add hl,sp
|
||||
ld a,(hl)
|
||||
|
||||
; <== Insert your own code here
|
||||
push bc
|
||||
ld e,a
|
||||
ld a,(hbunit)
|
||||
ld c,a
|
||||
ld b,01h
|
||||
rst 08
|
||||
pop bc
|
||||
; <== End of your own code
|
||||
|
||||
ret ; done
|
||||
|
||||
;Test for output ready: return TRUE (1) in HL if ok
|
||||
mordy:
|
||||
; <== Insert your own code here
|
||||
push bc
|
||||
ld a,(hbunit)
|
||||
ld c,a
|
||||
ld b,03h
|
||||
rst 08
|
||||
ld h,0
|
||||
ld l,a
|
||||
pop bc
|
||||
; <== End of your own code
|
||||
|
||||
ld a,l ; set/clear Z
|
||||
or a
|
||||
ret
|
||||
|
||||
;Test for character at modem: return TRUE (1) in HL if so
|
||||
mirdy:
|
||||
; <== Insert your own code here
|
||||
push bc
|
||||
ld a,(hbunit)
|
||||
ld c,a
|
||||
ld b,02h
|
||||
rst 08
|
||||
ld h,0
|
||||
ld l,a
|
||||
pop bc
|
||||
; <== End of your own code
|
||||
|
||||
ld a,l ; set/clear Z
|
||||
or a
|
||||
ret
|
||||
|
||||
;Send a break to the modem: leave empty if your system can't do it
|
||||
sndbrk:
|
||||
; <== Insert your own code here
|
||||
ld hl,300 ; wait 300 mS
|
||||
call waithlms
|
||||
; <== End of your own code
|
||||
|
||||
ret
|
||||
;
|
||||
;Test UART flags for error: return TRUE (1) in HL if error.
|
||||
mdmerr:
|
||||
; <== Insert your own code here
|
||||
xor a ; not implemented
|
||||
; <== End of your own code
|
||||
|
||||
ld a,l ; set/clear Z
|
||||
or a
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;Turn DTR ON
|
||||
dtron:
|
||||
; <== Insert your own code here
|
||||
|
||||
; <== End of your own code
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;Turn DTR OFF
|
||||
dtroff:
|
||||
; <== Insert your own code here
|
||||
|
||||
|
||||
; <== End of your own code
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;Initialise the uart
|
||||
init:
|
||||
ld hl,2 ; get parameters
|
||||
add hl,sp
|
||||
ex de,hl
|
||||
call getparm ; in HL
|
||||
ld (brate),hl ; baud rate
|
||||
call getparm
|
||||
ld (parity),hl ; parity
|
||||
call getparm
|
||||
ld (data),hl ; data bits (BINARY 7 or 8)
|
||||
call getparm
|
||||
ld (stop),hl ; stop bits (BINARY 1 or 2)
|
||||
|
||||
; <== Insert your own code here
|
||||
; using values below
|
||||
; don't forget to load mspeed with the
|
||||
; current brate value if the new rate is
|
||||
; valid. See table of values below.
|
||||
|
||||
push bc
|
||||
|
||||
; If pcfg is true, attempt to initialize the active
|
||||
; HBIOS unit. If false, initialization if bypassed with
|
||||
; the assumption that the RomWBW MODE command was used
|
||||
; to initialize the port priot to running ZMP.
|
||||
|
||||
if pcfg
|
||||
|
||||
call print
|
||||
db 'Initializing device: ',0
|
||||
call diport
|
||||
|
||||
ld a,(hbunit) ; get device type
|
||||
ld c,a
|
||||
ld b,06h
|
||||
rst 08
|
||||
or a ; check if valid
|
||||
jr nz,initerr
|
||||
|
||||
ld a,(brate) ; get baud rate to set
|
||||
ld c,a
|
||||
ld b,0
|
||||
ld hl,baudtbl
|
||||
add hl,bc
|
||||
ld a,(hl) ; convert to encoded hbios
|
||||
cp a,-1
|
||||
jr z,initerr
|
||||
|
||||
push af
|
||||
ld a,(hbunit) ; get line characteristics
|
||||
ld c,a
|
||||
ld b,05h
|
||||
rst 08
|
||||
ld a,d ; mask out exisitng
|
||||
and 11100000b ; replace with rate
|
||||
ld d,a
|
||||
pop af
|
||||
or d
|
||||
ld d,a
|
||||
|
||||
ld b,04h ; set new
|
||||
ld a,(hbunit) ; speed
|
||||
ld c,a
|
||||
rst 08
|
||||
or a
|
||||
jr nz,initerr
|
||||
|
||||
ld a,(brate) ; load mspeed with the current brate value if
|
||||
ld (mspeed),a ; the new rate is valid. See table of values below.
|
||||
|
||||
call print
|
||||
db lf,lf,'Initization completed, device: ',0
|
||||
call diport
|
||||
|
||||
jr init_z
|
||||
|
||||
initerr:call print
|
||||
db lf,lf,'Initization failed, device: ',0
|
||||
call diport
|
||||
|
||||
jr init_z
|
||||
|
||||
diport: ld a,(hbunit) ; Display port
|
||||
diport1:add a,'0'
|
||||
call cout
|
||||
call print
|
||||
db cr,lf,0
|
||||
ld hl,2
|
||||
call waithls
|
||||
ret
|
||||
|
||||
else
|
||||
|
||||
;call print
|
||||
;db cr,lf,'Modem port initialization...',0
|
||||
;ld hl,2
|
||||
;call waithls
|
||||
|
||||
ld b,05h ; HBIOS port reset function
|
||||
ld a,(hbunit) ; get active modem port
|
||||
ld c,a ; and put in accum
|
||||
rst 8 ; reset port
|
||||
or a ; check result
|
||||
jr nz,init1 ; if error, handle it
|
||||
ld a,8 ; dummy value for speed
|
||||
ld (mspeed),a ; save it
|
||||
jr init_z ; done
|
||||
|
||||
init1:
|
||||
; Handle error return from initialization
|
||||
call print
|
||||
db cr,lf,'Modem port initialization failed!',cr,lf,0
|
||||
ld hl,2
|
||||
call waithls
|
||||
|
||||
jr init_z
|
||||
|
||||
endif
|
||||
|
||||
init_z:
|
||||
pop bc
|
||||
|
||||
; <== End of your own code
|
||||
|
||||
ret
|
||||
;--------------------------------------------------------------------------
|
||||
|
||||
stop: dw 1 ; stop bits
|
||||
parity: dw 'N' ; parity
|
||||
data: dw 8 ; data bits
|
||||
brate: dw 7 ; baud rate:
|
||||
|
||||
;--------------------------------------------------------------------------
|
||||
;
|
||||
;Values of brate for each baud rate
|
||||
;
|
||||
; hb encode baud rate brate
|
||||
;
|
||||
baudtbl:
|
||||
db -1 ; 110 0 not supported
|
||||
db 2 ; 300 1
|
||||
db 17 ; 450 2
|
||||
db 3 ; 600 3
|
||||
db -1 ; 710 4 not supported
|
||||
db 4 ; 1200 5
|
||||
db 5 ; 2400 6
|
||||
db 6 ; 4800 7
|
||||
db 7 ; 9600 8
|
||||
db 8 ; 19200 9
|
||||
db 9 ; 38400 10
|
||||
db 24 ; 57600 11
|
||||
db 10 ; 76800 12
|
||||
;
|
||||
; Set the port. ZMP supplies either 0 or 1 as a parameter. You're on your
|
||||
; own here -- your system is bound to be different from any other! You may
|
||||
; implement a software switch on all the modem-dependent routines, or perhaps
|
||||
; you can have one or two centralised routines for accessing the UARTs and
|
||||
; modify the code from this routine to select one or the other. (Who said
|
||||
; there was anything wrong with self-modifying code?). If you have only one
|
||||
; UART port, or if you don't want to go through all the hassles, just have
|
||||
; this routine returning with no changes made. Note that ZMP calls this
|
||||
; routine with both values for the port on initialisation.
|
||||
;
|
||||
; Only originl ZMP calls setport. MECPARTS variant does not.
|
||||
;
|
||||
; We ignore this call. Since we are using a command line parameter
|
||||
; to specify the desired modem port, it makes no sense.
|
||||
;
|
||||
setport:
|
||||
ld hl,2 ; get port number
|
||||
add hl,sp
|
||||
ex de,hl
|
||||
call getparm ; in HL (values are 0 and 1)
|
||||
|
||||
; <== Insert your own code here
|
||||
|
||||
; <== End of your own code
|
||||
|
||||
ret
|
||||
|
||||
|
||||
;
|
||||
;****************************************************************************
|
||||
;Video terminal sequences: these are for VT-100: Modify as you wish
|
||||
;Cursor addressing:
|
||||
cursadd:
|
||||
ld hl,2 ; get parameters
|
||||
add hl,sp
|
||||
ex de,hl
|
||||
call getparm ; in HL
|
||||
inc hl
|
||||
ld (row),hl ; row
|
||||
call getparm
|
||||
inc hl
|
||||
ld (col),hl ; column
|
||||
;
|
||||
push bc
|
||||
|
||||
call print
|
||||
db esc,'[',0
|
||||
ld a,(row) ; row first
|
||||
call cursconv
|
||||
ld a,';'
|
||||
call cout
|
||||
ld a,(col) ; same for column
|
||||
call cursconv
|
||||
ld a,'H'
|
||||
call cout
|
||||
|
||||
pop bc
|
||||
|
||||
ret
|
||||
;
|
||||
cursconv:
|
||||
ld b,a
|
||||
xor a
|
||||
ca1: add a,1
|
||||
daa
|
||||
djnz ca1
|
||||
ld (num),a
|
||||
and 0f0h
|
||||
jr z,ca2
|
||||
srl a
|
||||
srl a
|
||||
srl a
|
||||
srl a
|
||||
or '0'
|
||||
call cout
|
||||
ca2: ld a,(num)
|
||||
and 0fh
|
||||
or '0'
|
||||
call cout
|
||||
ret
|
||||
;
|
||||
row: ds 2 ; row
|
||||
col: ds 2 ; column
|
||||
num: ds 1
|
||||
;
|
||||
;Clear screen:
|
||||
cls:
|
||||
call print
|
||||
db esc,"[H",esc,"[2J",0
|
||||
ret
|
||||
;
|
||||
;Inverse video on:
|
||||
invon:
|
||||
call print
|
||||
db esc,"[7m",0
|
||||
ret
|
||||
;
|
||||
;Inverse video off:
|
||||
invoff:
|
||||
call print
|
||||
db esc,"[m",0
|
||||
ret
|
||||
;
|
||||
;Turn off cursor:
|
||||
hide:
|
||||
call print
|
||||
db esc,'[?25l',0
|
||||
ret
|
||||
;
|
||||
;Turn on cursor:
|
||||
show:
|
||||
call print
|
||||
db esc,'[?25h',0
|
||||
ret
|
||||
;
|
||||
;Save cursor position:
|
||||
savecu:
|
||||
call print
|
||||
db esc,'[7',0
|
||||
ret
|
||||
;
|
||||
;Restore cursor position:
|
||||
rescu:
|
||||
call print
|
||||
db esc,'[8',0
|
||||
ret
|
||||
|
||||
;****************************************************************************
|
||||
|
||||
;Service modem interrupt:
|
||||
mint:
|
||||
ret ; handled in HBIOS
|
||||
|
||||
;Initialise interrupt vectors:
|
||||
invec:
|
||||
ret ; ditto
|
||||
|
||||
;De-initialise interrupt vectors:
|
||||
dinvec:
|
||||
ret ; ditto
|
||||
|
||||
;****************** End of user-defined code ********************************
|
||||
; Do not change anything below here.
|
||||
|
||||
;Modem character test for 100 ms
|
||||
mrd:
|
||||
push bc ; save bc
|
||||
ld bc,100 ; set limit
|
||||
mrd1:
|
||||
call mirdy ; char at modem?
|
||||
jr nz,mrd2 ; yes, exit
|
||||
ld hl,1 ; else wait 1ms
|
||||
call waithlms
|
||||
dec bc ; loop till done
|
||||
ld a,b
|
||||
or c
|
||||
jr nz,mrd1
|
||||
ld hl,0 ; none there, result=0
|
||||
xor a
|
||||
mrd2:
|
||||
pop bc
|
||||
ret
|
||||
|
||||
; Inline print routine: destroys A and HL
|
||||
|
||||
print:
|
||||
ex (sp),hl ; get address of string
|
||||
ploop:
|
||||
ld a,(hl) ; get next
|
||||
inc hl ; bump pointer
|
||||
or a ; done if zero
|
||||
jr z,pdone
|
||||
call cout ; else print
|
||||
jr ploop ; and loop
|
||||
pdone:
|
||||
ex (sp),hl ; restore return address
|
||||
ret ; and quit
|
||||
|
||||
;
|
||||
;Output a character in A to the console
|
||||
;
|
||||
cout:
|
||||
push bc ; save regs
|
||||
push de
|
||||
push hl
|
||||
ld e,a ; character to E
|
||||
ld c,2
|
||||
call bdos ; print it
|
||||
pop hl
|
||||
pop de
|
||||
pop bc
|
||||
ret
|
||||
|
||||
|
||||
;Wait seconds
|
||||
wait:
|
||||
ld hl,2
|
||||
add hl,sp
|
||||
ex de,hl ; get delay size
|
||||
call getparm
|
||||
; fall thru to..
|
||||
;Wait seconds in HL
|
||||
waithls:
|
||||
push hl ; save loop control
|
||||
ld hl,1000 ; 1000ms = 1 second
|
||||
call waithlms
|
||||
pop hl ; restore loop control
|
||||
dec hl
|
||||
ld a,h
|
||||
or l
|
||||
jr nz,waithls
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;Wait milliseconds
|
||||
mswait:
|
||||
ld hl,2
|
||||
add hl,sp
|
||||
ex de,hl ; get delay size
|
||||
call getparm
|
||||
; fall thru to..
|
||||
;Wait milliseconds in HL
|
||||
waithlms:
|
||||
; burn 1000us (1ms)
|
||||
ld a,(cpumhz)
|
||||
ld e,a
|
||||
hlms1:
|
||||
; burn 1000 t-states
|
||||
; 50 * 20 = 1000 t-states
|
||||
ld d,50
|
||||
hlms2:
|
||||
nop ; 4
|
||||
dec d ; 4
|
||||
jr nz,hlms2 ; 12 20
|
||||
|
||||
dec e
|
||||
jr nz,hlms1
|
||||
|
||||
dec hl
|
||||
ld a,h
|
||||
or l
|
||||
jr nz,waithlms
|
||||
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;Get next parameter from (de) into hl
|
||||
getparm:
|
||||
ex de,hl ; get address into hl
|
||||
ld e,(hl) ; get lo
|
||||
inc hl
|
||||
ld d,(hl) ; then hi
|
||||
inc hl ; bump for next
|
||||
ex de,hl ; result in hl, address still in de
|
||||
ret
|
||||
|
||||
;Get address of user-defined variables
|
||||
|
||||
getvars:
|
||||
ld hl,uservars
|
||||
ret
|
||||
|
||||
uservars:
|
||||
dw overdrive ; .OVR etc. drive/user
|
||||
dw overuser
|
||||
|
||||
|
||||
if ($ - codebgn) gt ovsize
|
||||
toobig: jp errval ; Overlay too large!
|
||||
endif
|
||||
|
||||
end
|
||||
|
||||
@@ -26,11 +26,11 @@
|
||||
; has been written in Z80 code for use with M80 or SLR. Assemble as follows:
|
||||
;
|
||||
; SLR ZMO-xx01/h
|
||||
; MLOAD ZMP.COM=ZMODEM.COM,ZMO-xx01.HEX
|
||||
; MLOAD ZMP.COM=ZMPX.COM,ZMO-xx01.HEX
|
||||
; or
|
||||
; M80 =ZMO-xx01.Z80
|
||||
; RELHEX ZMO-xx01
|
||||
; MLOAD ZMP.COM=ZMODEM.COM,ZMO-xx01.HEX
|
||||
; MLOAD ZMP.COM=ZMPX.COM,ZMO-xx01.HEX
|
||||
;
|
||||
;
|
||||
; (Don't use L80 without changing the source for assembly as a
|
||||
@@ -570,4 +570,3 @@ toobig: jp errval ; Overlay too large!
|
||||
endif
|
||||
|
||||
end
|
||||
|
||||
@@ -12,6 +12,10 @@ awhile (some, a few decades):
|
||||
* In keyboard macros, ! translates to a CR now, not CR/LF.
|
||||
* \ escapes ! and ~ so those literal characters can be used in
|
||||
keyboard macros.
|
||||
* Waits in keyboard macros now allow characters from the modem to
|
||||
be handled.
|
||||
* Keys in keyboard macros now have 25ms waits between them as to
|
||||
not overrun the remove system.
|
||||
* Long distance access code has been removed.
|
||||
* Quick dialing letters limited to A-T.
|
||||
|
||||
@@ -23,5 +27,5 @@ version in ZMP15.LBR. So, to quote the original author,
|
||||
new one with the config option. There have again been changes to
|
||||
the format of this file."
|
||||
|
||||
June 7, 2021
|
||||
|
||||
August 15, 2023
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
:: copysl.com is currently distributed as a binary application, so
|
||||
:: it is not built here.
|
||||
set TOOLS=../../../Tools
|
||||
set PATH=%TOOLS%\tasm32;%PATH%
|
||||
set TASMTABS=%TOOLS%\tasm32
|
||||
|
||||
tasm -t80 -g3 -fFF copysl.asm copysl.com copysl.lst || exit /b
|
||||
|
||||
copy /Y copysl.com ..\..\..\Binary\Apps\ || exit /b
|
||||
copy /Y copysl.doc ..\..\..\Binary\Apps\ || exit /b
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
:: copysl.com is currently distributed as a binary application, so
|
||||
:: we do not delete the .COM file.
|
||||
if exist *.com del *.com
|
||||
if exist *.lst del *.lst
|
||||
if exist *.bin del *.bin
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
OBJECTS = copysl.com
|
||||
NODELETE = $(OBJECTS)
|
||||
DOCS = copysl.doc
|
||||
DEST = ../../../Binary/Apps
|
||||
DOCDEST = ../../../Binary/Apps
|
||||
TOOLS=../../../Tools
|
||||
include $(TOOLS)/Makefile.inc
|
||||
TOOLS =../../../Tools
|
||||
|
||||
USETASM=1
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
16
Source/Apps/copysl/bdos.asm
Normal file
@@ -0,0 +1,16 @@
|
||||
;
|
||||
bdos .EQU 5
|
||||
;
|
||||
; Force BDOS to reset (logout) all drives
|
||||
;
|
||||
drvrst:
|
||||
ld c,$0D ; BDOS Reset Disk function
|
||||
call bdos ; do it
|
||||
;
|
||||
ld c,$25 ; BDOS Reset Multiple Drives
|
||||
ld de,$FFFF ; all drives
|
||||
call bdos ; do it
|
||||
;
|
||||
xor a ; signal success
|
||||
ret
|
||||
;
|
||||
328
Source/Apps/copysl/cio.asm
Normal file
@@ -0,0 +1,328 @@
|
||||
|
||||
BDOS .EQU 5
|
||||
|
||||
; bdos commands
|
||||
CONIN .EQU 1
|
||||
CONOUT .EQU 2
|
||||
DIRCONIO .EQU 6
|
||||
|
||||
; TODO for more routines see assign.asm
|
||||
|
||||
; ===============
|
||||
; INPUT
|
||||
|
||||
; Console Input
|
||||
getchr:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD C,CONIN
|
||||
CALL BDOS
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
RET
|
||||
|
||||
; direct console io
|
||||
; BDOS 6 - FF FE FD - commands
|
||||
conread:
|
||||
RET
|
||||
constatus:
|
||||
RET
|
||||
coninput:
|
||||
RET
|
||||
|
||||
; =======================================
|
||||
; STANDARD OUTPUT
|
||||
|
||||
;
|
||||
; Print character in A without destroying any registers
|
||||
;
|
||||
prtchr:
|
||||
; PUSH AF
|
||||
PUSH HL ; We must preserve HL, as the BDOS call sets it
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
LD C, CONOUT
|
||||
LD E, A
|
||||
CALL BDOS
|
||||
POP DE
|
||||
POP BC
|
||||
POP HL
|
||||
; POP AF
|
||||
RET
|
||||
;
|
||||
prtdot:
|
||||
push af
|
||||
ld a, '.'
|
||||
call prtchr
|
||||
pop af
|
||||
ret
|
||||
;
|
||||
; Print a zero terminated string at (HL) without destroying any registers
|
||||
;
|
||||
prtstr:
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
push de
|
||||
prtstr1:
|
||||
ld a,(hl)
|
||||
or 0
|
||||
jr z,prtstr2
|
||||
ld c, CONOUT
|
||||
ld e,a
|
||||
push hl
|
||||
call BDOS
|
||||
pop hl
|
||||
inc hl
|
||||
jr prtstr1
|
||||
prtstr2:
|
||||
pop de
|
||||
pop bc
|
||||
pop af
|
||||
ret
|
||||
|
||||
;
|
||||
; Print the value in A in hex without destroying any registers
|
||||
;
|
||||
prthex:
|
||||
push af ; save AF
|
||||
push de ; save DE
|
||||
call hexascii ; convert value in A to hex chars in DE
|
||||
ld a,d ; get the high order hex char
|
||||
call prtchr ; print it
|
||||
ld a,e ; get the low order hex char
|
||||
call prtchr ; print it
|
||||
pop de ; restore DE
|
||||
pop af ; restore AF
|
||||
ret ; done
|
||||
|
||||
;
|
||||
; print the hex word value in bc
|
||||
;
|
||||
prthexword:
|
||||
push af
|
||||
ld a,b
|
||||
call prthex
|
||||
ld a,c
|
||||
call prthex
|
||||
pop af
|
||||
ret
|
||||
;
|
||||
; Convert binary value in A to ascii hex characters in DE
|
||||
;
|
||||
hexascii:
|
||||
ld d,a ; save A in D
|
||||
call hexconv ; convert low nibble of A to hex
|
||||
ld e,a ; save it in E
|
||||
ld a,d ; get original value back
|
||||
rlca ; rotate high order nibble to low bits
|
||||
rlca
|
||||
rlca
|
||||
rlca
|
||||
call hexconv ; convert nibble
|
||||
ld d,a ; save it in D
|
||||
ret ; done
|
||||
;
|
||||
; Convert low nibble of A to ascii hex
|
||||
;
|
||||
hexconv:
|
||||
and 0Fh ; low nibble only
|
||||
add a,90h
|
||||
daa
|
||||
adc a,40h
|
||||
daa
|
||||
ret
|
||||
;
|
||||
; Print the decimal value of A, with leading zero suppression
|
||||
;
|
||||
prtdec:
|
||||
push hl
|
||||
ld h,0
|
||||
ld l,a
|
||||
call prtdecword ; print it
|
||||
pop hl
|
||||
ret
|
||||
;
|
||||
; Print the Decimal value (word) in HL
|
||||
;
|
||||
prtdecword:
|
||||
push af
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
call prtdec0
|
||||
pop hl
|
||||
pop de
|
||||
pop bc
|
||||
pop af
|
||||
ret
|
||||
;
|
||||
prtdec0:
|
||||
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
|
||||
prtdec1:
|
||||
ld a,'0' - 1
|
||||
prtdec2:
|
||||
inc a
|
||||
add hl,bc
|
||||
jr c,prtdec2
|
||||
sbc hl,bc
|
||||
cp e
|
||||
ret z
|
||||
ld e,0
|
||||
call prtchr
|
||||
ret
|
||||
;
|
||||
; Print a byte buffer in hex pointed to by DE
|
||||
; Register A has size of buffer
|
||||
;
|
||||
prthexbuf:
|
||||
or a
|
||||
ret z ; empty buffer
|
||||
prthexbuf1:
|
||||
ld a,' '
|
||||
call prtchr
|
||||
ld a,(de)
|
||||
call prthex
|
||||
inc de
|
||||
djnz prthexbuf1
|
||||
ret
|
||||
;
|
||||
; Start a new Line
|
||||
;
|
||||
prtcrlf2:
|
||||
call prtcrlf
|
||||
prtcrlf:
|
||||
push hl
|
||||
ld hl, prtcrlf_msg
|
||||
call prtstr
|
||||
pop hl
|
||||
ret
|
||||
prtcrlf_msg:
|
||||
.DB 13,10,0
|
||||
|
||||
; =================================
|
||||
; following is from dmamon util.asm
|
||||
;
|
||||
; IMMEDIATE PRINT
|
||||
; =================================
|
||||
;
|
||||
; PRINT A CHARACTER REFERENCED BY POINTER AT TOP OF STACK
|
||||
; USAGE:
|
||||
; CALL IPRTCHR
|
||||
; .DB 'X'
|
||||
;
|
||||
iprtchr:
|
||||
EX (SP),HL
|
||||
PUSH AF
|
||||
LD A,(HL)
|
||||
CALL prtchr
|
||||
POP AF
|
||||
INC HL
|
||||
EX (SP),HL
|
||||
RET
|
||||
|
||||
; Print a string referenced by pointer at top of stack
|
||||
; Usage
|
||||
; call iprtstr
|
||||
; .DB "text", 0
|
||||
;
|
||||
iprtstr:
|
||||
EX (SP),HL
|
||||
CALL prtstr
|
||||
INC HL
|
||||
EX (SP),HL
|
||||
RET
|
||||
;
|
||||
; ===========================================================
|
||||
;
|
||||
; Following is for INPUT, used to process command line args
|
||||
;
|
||||
; ===========================================================
|
||||
;
|
||||
; Skip whitespace at buffer adr in DE, returns with first
|
||||
; non-whitespace character in A.
|
||||
;
|
||||
skipws:
|
||||
ld a,(hl) ; get next char
|
||||
or a ; check for eol
|
||||
ret z ; done if so
|
||||
cp ' ' ; blank?
|
||||
ret nz ; nope, done
|
||||
inc hl ; bump buffer pointer
|
||||
jr skipws ; and loop
|
||||
|
||||
;
|
||||
; Uppercase character in A
|
||||
;
|
||||
upcase:
|
||||
cp 'a' ; below 'a'?
|
||||
ret c ; if so, nothing to do
|
||||
cp 'z'+1 ; above 'z'?
|
||||
ret nc ; if so, nothing to do
|
||||
and ~020h ; convert character to lower
|
||||
ret ; done
|
||||
|
||||
;
|
||||
; Get numeric chars at HL and convert to number returned in A
|
||||
; Carry flag set on overflow
|
||||
; C is used as a working register
|
||||
;
|
||||
getnum:
|
||||
ld c,0 ; C is working register
|
||||
|
||||
getnum1:
|
||||
ld a,(hl) ; get the active char
|
||||
cp '0' ; compare to ascii '0'
|
||||
jr c,getnum2 ; abort if below
|
||||
cp '9' + 1 ; compare to ascii '9'
|
||||
jr nc,getnum2 ; abort if above
|
||||
;
|
||||
ld a,c ; get working value to A
|
||||
rlca ; multiply by 10
|
||||
ret c ; overflow, return with carry set
|
||||
rlca ; ...
|
||||
ret c ; overflow, return with carry set
|
||||
add a,c ; ...
|
||||
ret c ; overflow, return with carry set
|
||||
rlca ; ...
|
||||
ret c ; overflow, return with carry set
|
||||
ld c,a ; back to C
|
||||
ld a,(hl) ; get new digit
|
||||
sub '0' ; make binary
|
||||
add a,c ; add in working value
|
||||
ret c ; overflow, return with carry set
|
||||
ld c,a ; back to C
|
||||
;
|
||||
inc hl ; bump to next char
|
||||
jr getnum1 ; loop
|
||||
;
|
||||
getnum2:
|
||||
ld a,c ; return result in A
|
||||
or a ; with flags set, CF is cleared
|
||||
ret
|
||||
;
|
||||
; Is character in A numeric? NZ if not
|
||||
;
|
||||
isnum:
|
||||
cp '0' ; compare to ascii '0'
|
||||
jr c,isnum1 ; abort if below
|
||||
cp '9' + 1 ; compare to ascii '9'
|
||||
jr nc,isnum1 ; abort if above
|
||||
cp a ; set Z
|
||||
ret
|
||||
isnum1:
|
||||
or 0FFh ; set NZ
|
||||
ret ; and done
|
||||
|
||||
|
||||
1324
Source/Apps/copysl/copysl.asm
Normal file
@@ -1,6 +1,6 @@
|
||||
==========================================================================
|
||||
CopySlice Utility v0.2 for RomWbW computers
|
||||
written by Mark Pruden (Sept 2024)
|
||||
CopySlice Utility v0.3 for RomWbW computers
|
||||
written by Mark Pruden (March 2025)
|
||||
==========================================================================
|
||||
|
||||
Purpose:
|
||||
@@ -12,37 +12,37 @@ from one disk slice to another slice
|
||||
Background
|
||||
----------
|
||||
|
||||
This tool is only supported by RomWBW HBIOS, it uses HDIOS for all its
|
||||
disk IO. UNA UBIOS is not supported by this tool.
|
||||
This tool is only supported by RomWBW HBIOS, it uses HDIOS for all its
|
||||
disk IO. UNA UBIOS is not supported by this tool.
|
||||
|
||||
This tool is running on CP/M 2.2 or 3.0 and has access to full 64kb of
|
||||
RAM, with a minimum of 48kb TPA
|
||||
|
||||
This tool only works with hard disk devices, other media types like
|
||||
floppy, are not supported at this time. This tool works across different
|
||||
This tool only works with hard disk devices, other media types like
|
||||
floppy, are not supported at this time. This tool works across different
|
||||
hard disk device types, even of different physical type
|
||||
|
||||
Both hd1k and hd512 are fully supported, however copying from one layout
|
||||
Both hd1k and hd512 are fully supported, however copying from one layout
|
||||
type to the other is not supported.
|
||||
|
||||
During operation data is copied in a single read/write pass, data is not
|
||||
During operation data is copied in a single read/write pass, data is not
|
||||
verified by default. If there is a write error, it will be reported, and
|
||||
operation will stop.
|
||||
|
||||
General Usage
|
||||
-------------
|
||||
This tool operates at the disk level via RomWBW, thus all disk identifiers
|
||||
This tool operates at the disk level via RomWBW, thus all disk identifiers
|
||||
are in the RomWBW <disk>.<unit> format
|
||||
|
||||
The syntax (similar to copy) for the command is:
|
||||
|
||||
COPYSL <destunit>[.<slice>]=<srcunit>[.<slice>] [/options]
|
||||
|
||||
|
||||
E.g.
|
||||
|
||||
|
||||
COPYSL 3.3=2.10 /U
|
||||
|
||||
Means copy from slice 10 on disk 2, onto disk 3 slice 3. This is in
|
||||
Means copy from slice 10 on disk 2, onto disk 3 slice 3. This is in
|
||||
unattended mode, so you will not be asked to confirm the copy operation.
|
||||
|
||||
Options
|
||||
@@ -54,39 +54,40 @@ V - Verify. Does an additional read and verify after write.
|
||||
Description
|
||||
-----------
|
||||
|
||||
When run COPYSL will perform command line argument validation and display
|
||||
When run COPYSL will perform command line argument validation and display
|
||||
an error if they are illegal. Also any disk IO errors will cause COPYSL
|
||||
to exit.
|
||||
|
||||
When specifying slice number(s) a check is made that the slice number is
|
||||
valid, i.e. not too large that it would extend past the end of the
|
||||
When specifying slice number(s) a check is made that the slice number is
|
||||
valid, i.e. not too large that it would extend past the end of the
|
||||
partition (hd1k), or the end of the media (hd512). For hd512 a check is
|
||||
also performed to ensure that the slice would not extend into the first
|
||||
also performed to ensure that the slice would not extend into the first
|
||||
defined partition.
|
||||
|
||||
The copy operation will be faster if the source disk has been formatted
|
||||
with the CP/M file system, since during copy the CP/M directory is scanned,
|
||||
and unused blocks are not copied.
|
||||
with the CP/M file system, since during copy the CP/M directory is scanned,
|
||||
and unused blocks are not copied.
|
||||
|
||||
If a filesystem is not found, (or the /F option is chosen) all data is
|
||||
If a filesystem is not found, (or the /F option is chosen) all data is
|
||||
copied.
|
||||
|
||||
Verification (if option chosen) will do an aditional read (after write)
|
||||
and compare the data read matches what was written. This compare is only
|
||||
on every 32'nd byte. This is done for efficiency.
|
||||
on every 32'nd byte. This is done for efficiency.
|
||||
|
||||
During copy dots "." will be displayed to indicate progress of the copy.
|
||||
Each "." represents 16 kBytes of data. Each line of "." 's is 1 mBytes.
|
||||
|
||||
Testing
|
||||
-------
|
||||
This tool has been writen and tested on a SC126 computer. Testing been on both
|
||||
This tool has been writen and tested on a SC126 computer. Testing been on both
|
||||
SD and CF media types, and with both hd1k and hd512 formats
|
||||
|
||||
History
|
||||
-------
|
||||
* v 0.1 Initial Release
|
||||
* v 0.2 Added the /v command option to read and verify after write
|
||||
* v 0.3 Refresh CP/M disk buffers after completion
|
||||
|
||||
Future
|
||||
------
|
||||
@@ -95,4 +96,3 @@ Future
|
||||
This would be at the cost of performance
|
||||
* ability to abort once the copy has started <ctrl><c>
|
||||
|
||||
|
||||
110
Source/Apps/copysl/crc.asm
Normal file
@@ -0,0 +1,110 @@
|
||||
|
||||
;
|
||||
; Simple Block Compare for Comparison purposes
|
||||
; Both HL and DL contain Block pointers to compare
|
||||
; HL MUST start on an even block e.g. 8000h
|
||||
; RET NZ - Failure, Z if no issue
|
||||
;
|
||||
_cmp20block
|
||||
; inc de ; uncommnet to test crc fail!
|
||||
ld bc, 20h ; 10t Size of Pointer Increment
|
||||
_cmp20block1:
|
||||
ld a, (de) ; 7t Do The comparison itself
|
||||
cp (hl) ; 7t
|
||||
JR NZ, _cmp20block2 ; 7t / 12t = 21t
|
||||
|
||||
add hl, bc ; 11t Add the Increment to both pointers
|
||||
ex de, hl ; 4t
|
||||
add hl, bc ; 11t
|
||||
ex de, hl ; 4t = 30t
|
||||
|
||||
ld a, h ; 4t High order byte on Even Boundary
|
||||
bit 4, a ; 8t has bit 4 been set then exceeded 1000h (4k boundary)
|
||||
JR Z, _cmp20block1 ; 12t / 7t = 24t
|
||||
xor a ; 4t
|
||||
RET ; 10t Return Success
|
||||
_cmp20block2:
|
||||
scf ; signal CARRY FLAG Also
|
||||
RET ; This is the error
|
||||
|
||||
; clock cycles for above
|
||||
; add 40h -> 64 (loop) * 73t =>> 4,672 - 1.56%
|
||||
; add 20h ->128 (loop) * 73t =>> 9,344 - 3.13% <= WENT WITH THIS
|
||||
; add 10h ->256 (loop) * 73t =>> 18,688 - 6.25%
|
||||
; accuracy = 88/4096 => 2.1%
|
||||
|
||||
; =====================================================================
|
||||
; From : https://tomdalby.com/other/crc.html
|
||||
; And : https://map.grauw.nl/sources/external/z80bits.html#6.1
|
||||
; =====================================================================
|
||||
;
|
||||
; =====================================================================
|
||||
; input - hl=start of memory to check, de=length of memory to check
|
||||
; returns - a=result crc
|
||||
; 20b
|
||||
; =====================================================================
|
||||
|
||||
; THE COMMNETED LINES NEED TO BE UNCOMMENTED
|
||||
|
||||
_crc8b:
|
||||
xor a ; 4t - initial value so first byte can be XORed in (CCITT)
|
||||
; ld c, 07h ; 7t - c=polyonimal used in loop (small speed up)
|
||||
_byteloop8b:
|
||||
xor (hl) ; 7t - xor in next byte, for first pass a=(hl)
|
||||
inc hl ; 6t - next mem
|
||||
; ld b, 8 ; 7t - loop over 8 bits
|
||||
_rotate8b:
|
||||
; add a,a ; 4t - shift crc left one
|
||||
; jr nc, _nextbit8b ; 12/7t - only xor polyonimal if msb set (carry=1)
|
||||
; xor c ; 4t - CRC8_CCITT = 0x07
|
||||
_nextbit8b:
|
||||
; djnz _rotate8b ; 13/8t
|
||||
ld b,a ; 4t - preserve a in b
|
||||
dec de ; 6t - counter-1
|
||||
ld a,d ; 4t - check if de=0
|
||||
or e ; 4t
|
||||
ld a,b ; 4t - restore a
|
||||
jr nz, _byteloop8b ; 12/7t
|
||||
ret ; 10t
|
||||
|
||||
; Clock Cycle For above with 4k bypes
|
||||
; Loop = 4096 * 47 cycles + 11 => 192,523 x 2 (src/dest) => 385,046
|
||||
; acuracy = 1 / 256 => 0.4 %
|
||||
|
||||
; =====================================================================
|
||||
; CRC-CCITT
|
||||
;
|
||||
; CCITT polynomial 1021h
|
||||
; Initial Value FFFFh
|
||||
;
|
||||
; input - de=start of memory to check, bc=length of memory to check
|
||||
; returns - hl=result crc
|
||||
; =====================================================================
|
||||
|
||||
_crc16:
|
||||
ld hl, 0ffffh ; 10t - initial crc = $ffff
|
||||
_byte16:
|
||||
; push bc ; 11t - preserve counter
|
||||
ld a,(de) ; 7t - get byte
|
||||
inc de ; 6t - next mem
|
||||
; xor h ; 4t - xor byte into crc high byte
|
||||
; ld h,a ; 4t - back into high byte
|
||||
; ld b,8 ; 7t - rotate 8 bits
|
||||
_rotate16:
|
||||
; add hl,hl ; 11t - rotate crc left one
|
||||
; jr nc,_nextbit16 ; 12/7t - only xor polyonimal if msb set
|
||||
; ld a,h ; 4t
|
||||
; xor 10h ; 7t - high byte with $10
|
||||
; ld h,a ; 4t
|
||||
; ld a,l ; 4t
|
||||
; xor 21h ; 7t - low byte with $21
|
||||
; ld l,a ; 4t - hl now xor $1021
|
||||
_nextbit16:
|
||||
; djnz _rotate16 ; 13/8t - loop over 8 bits
|
||||
; pop bc ; 10t - bring back main counter
|
||||
dec bc ; 6t
|
||||
ld a,b ; 4t
|
||||
or c ; 4t
|
||||
jr nz,_byte16 ; 12/7t
|
||||
ret ; 10t
|
||||
;
|
||||
178
Source/Apps/copysl/hbios.asm
Normal file
@@ -0,0 +1,178 @@
|
||||
;
|
||||
; HBIOS FUNCTIONS
|
||||
;
|
||||
;
|
||||
BF_DIO .EQU 010H
|
||||
BF_DIOSTATUS .EQU BF_DIO + 0 ; DISK STATUS
|
||||
BF_DIORESET .EQU BF_DIO + 1 ; DISK RESET
|
||||
BF_DIOSEEK .EQU BF_DIO + 2 ; DISK SEEK
|
||||
BF_DIOREAD .EQU BF_DIO + 3 ; DISK READ SECTORS
|
||||
BF_DIOWRITE .EQU BF_DIO + 4 ; DISK WRITE SECTORS
|
||||
BF_DIOVERIFY .EQU BF_DIO + 5 ; DISK VERIFY SECTORS
|
||||
BF_DIOFORMAT .EQU BF_DIO + 6 ; DISK FORMAT TRACK
|
||||
BF_DIODEVICE .EQU BF_DIO + 7 ; DISK DEVICE INFO REPORT
|
||||
BF_DIOMEDIA .EQU BF_DIO + 8 ; DISK MEDIA REPORT
|
||||
BF_DIODEFMED .EQU BF_DIO + 9 ; DEFINE DISK MEDIA
|
||||
BF_DIOCAP .EQU BF_DIO + 10 ; DISK CAPACITY REPORT
|
||||
BF_DIOGEOM .EQU BF_DIO + 11 ; DISK GEOMETRY REPORT
|
||||
;
|
||||
BF_SYS .EQU 0F0H
|
||||
BF_SYSRESET .EQU BF_SYS + 0 ; SOFT RESET HBIOS
|
||||
BF_SYSVER .EQU BF_SYS + 1 ; GET HBIOS VERSION
|
||||
BF_SYSSETBNK .EQU BF_SYS + 2 ; SET CURRENT BANK
|
||||
BF_SYSGETBNK .EQU BF_SYS + 3 ; GET CURRENT BANK
|
||||
BF_SYSSETCPY .EQU BF_SYS + 4 ; BANK MEMORY COPY SETUP
|
||||
BF_SYSBNKCPY .EQU BF_SYS + 5 ; BANK MEMORY COPY
|
||||
BF_SYSALLOC .EQU BF_SYS + 6 ; ALLOC HBIOS HEAP MEMORY
|
||||
BF_SYSFREE .EQU BF_SYS + 7 ; FREE HBIOS HEAP MEMORY
|
||||
BF_SYSGET .EQU BF_SYS + 8 ; GET HBIOS INFO
|
||||
BF_SYSSET .EQU BF_SYS + 9 ; SET HBIOS PARAMETERS
|
||||
BF_SYSPEEK .EQU BF_SYS + 10 ; GET A BYTE VALUE FROM ALT BANK
|
||||
BF_SYSPOKE .EQU BF_SYS + 11 ; SET A BYTE VALUE IN ALT BANK
|
||||
BF_SYSINT .EQU BF_SYS + 12 ; MANAGE INTERRUPT VECTORS
|
||||
;
|
||||
BF_SYSGET_CIOCNT .EQU 00h ; GET CHAR UNIT COUNT
|
||||
BF_SYSGET_CIOFN .EQU 01h ; GET CIO UNIT FN/DATA ADR
|
||||
BF_SYSGET_DIOCNT .EQU 10h ; GET DISK UNIT COUNT
|
||||
BF_SYSGET_DIOFN .EQU 11h ; GET DIO UNIT FN/DATA ADR
|
||||
BF_SYSGET_RTCCNT .EQU 20h ; GET RTC UNIT COUNT
|
||||
BF_SYSGET_DSKYCNT .EQU 30h ; GET DSKY UNIT COUNT
|
||||
BF_SYSGET_VDACNT .EQU 40h ; GET VDA UNIT COUNT
|
||||
BF_SYSGET_VDAFN .EQU 41h ; GET VDA UNIT FN/DATA ADR
|
||||
BF_SYSGET_SNDCNT .EQU 50h ; GET VDA UNIT COUNT
|
||||
BF_SYSGET_SNDFN .EQU 51h ; GET SND UNIT FN/DATA ADR
|
||||
BF_SYSGET_TIMER .EQU 0D0h ; GET CURRENT TIMER VALUE
|
||||
BF_SYSGET_SECS .EQU 0D1h ; GET CURRENT SECONDS VALUE
|
||||
BF_SYSGET_BOOTINFO .EQU 0E0h ; GET BOOT INFORMATION
|
||||
BF_SYSGET_CPUINFO .EQU 0F0h ; GET CPU INFORMATION
|
||||
BF_SYSGET_MEMINFO .EQU 0F1h ; GET MEMORY CAPACTITY INFO
|
||||
BF_SYSGET_BNKINFO .EQU 0F2h ; GET BANK ASSIGNMENT INFO
|
||||
BF_SYSGET_CPUSPD .EQU 0F3h ; GET CLOCK SPEED & WAIT STATES
|
||||
BF_SYSGET_PANEL .EQU 0F4h ; GET FRONT PANEL SWITCHES VAL
|
||||
BF_SYSGET_APPBNKS .EQU 0F5h ; GET APP BANK INFORMATION
|
||||
;
|
||||
; MEDIA ID VALUES
|
||||
;
|
||||
MID_NONE .EQU 0
|
||||
MID_MDROM .EQU 1
|
||||
MID_MDRAM .EQU 2
|
||||
MID_RF .EQU 3
|
||||
MID_HD .EQU 4
|
||||
MID_FD720 .EQU 5
|
||||
MID_FD144 .EQU 6
|
||||
MID_FD360 .EQU 7
|
||||
MID_FD120 .EQU 8
|
||||
MID_FD111 .EQU 9
|
||||
MID_HDNEW .EQU 10
|
||||
|
||||
; -----------------
|
||||
;
|
||||
; Read timer in sconds.
|
||||
;
|
||||
sysgetseconds:
|
||||
ld b,BF_SYSGET
|
||||
ld c,BF_SYSGET_SECS
|
||||
rst 08 ; do it
|
||||
ret
|
||||
|
||||
; -----------------
|
||||
;
|
||||
; Return non zero if A (media ID)
|
||||
; is a type of hard drive
|
||||
; If not A=0 and Z flag is set
|
||||
;
|
||||
isaharddrive:
|
||||
cp MID_HD
|
||||
jr z, ishdd1
|
||||
cp MID_HDNEW
|
||||
jr z, ishdd1
|
||||
xor a ; clear A and set Z flag
|
||||
ret
|
||||
ishdd1:
|
||||
or a ; set Z flag and return
|
||||
ret
|
||||
|
||||
; -------------------------------------
|
||||
;
|
||||
; used to pass the buffer address argument
|
||||
;
|
||||
bankid .DB 0 ; bank id used for read writes
|
||||
dma .DW 8000h ; address argument for read write
|
||||
;
|
||||
;
|
||||
; basic setup for disk io
|
||||
; call to get the current bank IO
|
||||
;
|
||||
initdiskio:
|
||||
; Get current RAM bank
|
||||
ld b,BF_SYSGETBNK ; HBIOS GetBank function
|
||||
RST 08 ; do it via RST vector, C=bank id
|
||||
JP NZ, err_hbios
|
||||
ld a,c ; put bank id in A
|
||||
ld (bankid),a ; put bank id in Argument
|
||||
RET
|
||||
;
|
||||
;
|
||||
; Read disk sector(s)
|
||||
; DE:HL is LBA, B is sector count, C is disk unit
|
||||
; (dma) is the buffer address
|
||||
; (bankid) is the memory bank
|
||||
; Returns E sectors read, and A status
|
||||
;
|
||||
diskread:
|
||||
; Seek to requested sector in DE:HL
|
||||
push bc ; save unit & count
|
||||
set 7,d ; set LBA access flag
|
||||
ld b,BF_DIOSEEK ; HBIOS func: seek
|
||||
rst 08 ; do it
|
||||
pop bc ; recover unit & count
|
||||
jp nz,err_diskio ; handle error
|
||||
|
||||
; Read sector(s) into buffer
|
||||
ld e,b ; transfer count
|
||||
ld b,BF_DIOREAD ; HBIOS func: disk read
|
||||
ld hl,(dma) ; read into info sec buffer
|
||||
ld a,(bankid) ; user bank
|
||||
ld d,a
|
||||
rst 08 ; do it
|
||||
jp nz,err_diskio ; handle error
|
||||
xor a ; signal success
|
||||
ret ; and done
|
||||
;
|
||||
; Write disk sector(s)
|
||||
; DE:HL is LBA, B is sector count, C is disk unit
|
||||
; (dma) is the buffer address
|
||||
; (bankid) is the memory bank
|
||||
; Returns E sectors written, and A status
|
||||
;
|
||||
diskwrite:
|
||||
; Seek to requested sector in DE:HL
|
||||
push bc ; save unit & count
|
||||
set 7,d ; set LBA access flag
|
||||
ld b,BF_DIOSEEK ; HBIOS func: seek
|
||||
rst 08 ; do it
|
||||
pop bc ; recover unit & count
|
||||
jp nz,err_diskio ; handle error
|
||||
|
||||
; Write sector(s) from buffer
|
||||
ld e,b ; transfer count
|
||||
ld b,BF_DIOWRITE ; HBIOS func: disk write
|
||||
ld hl,(dma) ; write from sec buffer
|
||||
ld a,(bankid) ; user bank
|
||||
ld d,a
|
||||
rst 08 ; do it
|
||||
jp nz,err_diskio ; handle error
|
||||
xor a ; signal success
|
||||
ret ; and done
|
||||
;
|
||||
err_diskio:
|
||||
; push hl
|
||||
; ld hl,str_err_prefix
|
||||
; call prtstr
|
||||
; pop hl
|
||||
; or 0ffh ; signal error
|
||||
ret ; done
|
||||
|
||||
;str_err_prefix db 13,10,13,10,"*** ",0
|
||||
|
||||
|
||||
10
Source/Apps/slabel/Build.cmd
Normal file
@@ -0,0 +1,10 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set TOOLS=../../../Tools
|
||||
set PATH=%TOOLS%\tasm32;%PATH%
|
||||
set TASMTABS=%TOOLS%\tasm32
|
||||
|
||||
tasm -t80 -g3 -fFF slabel.asm slabel.com slabel.lst || exit /b
|
||||
|
||||
copy /Y slabel.com ..\..\..\Binary\Apps\ || exit /b
|
||||
6
Source/Apps/slabel/Clean.cmd
Normal file
@@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
if exist *.com del *.com
|
||||
if exist *.lst del *.lst
|
||||
if exist *.bin del *.bin
|
||||
7
Source/Apps/slabel/Makefile
Normal file
@@ -0,0 +1,7 @@
|
||||
OBJECTS = slabel.com
|
||||
DEST = ../../../Binary/Apps
|
||||
TOOLS =../../../Tools
|
||||
|
||||
USETASM=1
|
||||
|
||||
include $(TOOLS)/Makefile.inc
|
||||
763
Source/Apps/slabel/slabel.asm
Normal file
@@ -0,0 +1,763 @@
|
||||
;==============================================================================
|
||||
; SLICE LABEL - Update Disk Labels
|
||||
; Version December-2024
|
||||
;==============================================================================
|
||||
;
|
||||
; Author: Mark Pruden
|
||||
;______________________________________________________________________________
|
||||
;
|
||||
; Usage:
|
||||
; SLABEL [unit.slice,label] [/?]
|
||||
; ex: SLABEL Display current list of Labels
|
||||
; SLABEL unit.slice=label Assign a disk Label to the Slice on Unit
|
||||
; SLABEL /? Display version and usage
|
||||
;
|
||||
; Operation:
|
||||
; Print and Assign a Disk Label to a Hard Disk Slice.
|
||||
;
|
||||
; Technical:
|
||||
; On the third sector of "bootable" Disk Slice there is metadata used by RomWBW to know how
|
||||
; to boot the OS found on the slice. This includes a Label for the volume, which is printed
|
||||
; out by RomWBW during the boot process.
|
||||
; Note this label is not associated to any label the OS may assign to the volume.
|
||||
; See loader.asm in each of the O/S directories e.g. /src/CPM22 which describe these sectors
|
||||
;
|
||||
; This ony works on slices which have existing media information in the third sector.
|
||||
; There is no capabiity to write this information on demand.
|
||||
;
|
||||
; known Issues:
|
||||
; - Listing the slabel for all slices can be time consuming, because of the use of the EXT_MEDIA
|
||||
; function call. This function reads the partition table (on each call) to assert (if valid)
|
||||
; the LBA location of the requested slice. Ideally we would only need to read the partition
|
||||
; table once (per device), and work out all the LBA's from this single read.
|
||||
; Note this doesnt omit the fact that the 3 rd sector of each slice wold need to be read regarless.
|
||||
; To slightly reduce some IO only slices < 64 are considered.
|
||||
;
|
||||
; This code will only execute on a Z80 CPU (or derivitive)
|
||||
; This code requirs the use of HBIOS
|
||||
;
|
||||
;______________________________________________________________________________
|
||||
;
|
||||
; Change Log:
|
||||
; 2024-12-11 [MAP] Started - Reboot v1.0 used as the basis for this code
|
||||
; 2024-12-14 [MAP] Initial 0.9 alpha with basic working functionality
|
||||
; 2025-04-21 [MAP] Initial v1.0 release for distribution, fixing all issues
|
||||
;______________________________________________________________________________
|
||||
;
|
||||
; Include Files
|
||||
;
|
||||
#include "../../ver.inc" ; to ensure it is the correct ver
|
||||
#include "../../HBIOS/hbios.inc"
|
||||
;
|
||||
;===============================================================================
|
||||
;
|
||||
; General operational equates (should not requre adjustment)
|
||||
;
|
||||
stksiz .equ $40 ; Working stack size
|
||||
;
|
||||
restart .equ $0000 ; CP/M restart vector
|
||||
bdos .equ $0005 ; BDOS invocation vector
|
||||
cmdbuf .equ $0081 ; CPM command buffer
|
||||
;
|
||||
bf_sysreset .equ $F0 ; restart system
|
||||
bf_sysres_int .equ $00 ; reset hbios internal
|
||||
bf_sysres_warm .equ $01 ; warm start (restart boot loader)
|
||||
;
|
||||
ident .equ $FFFE ; loc of RomWBW HBIOS ident ptr
|
||||
;
|
||||
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
|
||||
;
|
||||
;===============================================================================
|
||||
;
|
||||
.org $0100 ; standard CP/M TPA executable
|
||||
;
|
||||
ld (stksav),sp ; save stack
|
||||
ld sp,stack ; set new stack
|
||||
;
|
||||
ld de,str_banner
|
||||
call prtstr ; print the banner
|
||||
;
|
||||
call init ; initialize
|
||||
jr nz,exit ; abort if init fails
|
||||
;
|
||||
call main ; do the real work
|
||||
;
|
||||
exit:
|
||||
call crlf ; print terminating crlf
|
||||
ld sp,(stksav) ; restore stack to prior state
|
||||
jp restart ; return to CP/M via restart
|
||||
;
|
||||
;===============================================================================
|
||||
; Initialization
|
||||
;
|
||||
init:
|
||||
; check for UNA (UBIOS)
|
||||
ld a,($FFFD) ; fixed location of UNA API vector
|
||||
cp $C3 ; jp instruction?
|
||||
jr nz,initwbw ; if not, not UNA
|
||||
ld hl,($FFFE) ; get jp address
|
||||
ld a,(hl) ; get byte at target address
|
||||
cp $FD ; first byte of UNA push ix instruction
|
||||
jr nz,initwbw ; if not, not UNA
|
||||
inc hl ; point to next byte
|
||||
ld a,(hl) ; get next byte
|
||||
cp $E5 ; second byte of UNA push ix instruction
|
||||
jr nz,initwbw ; if not, not UNA
|
||||
jp err_una ; UNA not supported
|
||||
;
|
||||
initwbw:
|
||||
; get location of config data and verify integrity
|
||||
ld hl,(ident) ; HL := adr or RomWBW HBIOS ident
|
||||
ld a,(hl) ; get first byte of RomWBW marker
|
||||
cp 'W' ; match?
|
||||
jp nz,err_inv ; abort with invalid config block
|
||||
inc hl ; next byte (marker byte 2)
|
||||
ld a,(hl) ; load it
|
||||
cp ~'W' ; match?
|
||||
jp nz,err_inv ; abort with invalid config block
|
||||
inc hl ; next byte (major/minor version)
|
||||
ld a,(hl) ; load it
|
||||
cp rmj << 4 | rmn ; match?
|
||||
jp nz,err_ver ; abort with invalid os version
|
||||
;
|
||||
initz:
|
||||
; initialization complete
|
||||
xor a ; signal success
|
||||
ret ; return
|
||||
;
|
||||
;===============================================================================
|
||||
; Main Execution
|
||||
;
|
||||
main:
|
||||
call initdiskio ; initi DiskIO routines (bank ID)
|
||||
;
|
||||
ld de,cmdbuf ; start of command input buffer
|
||||
call skipws ; skip whitespace on cmd line
|
||||
;
|
||||
ld a,(de) ; get first non-ws char
|
||||
or a ; test for terminator, no parms
|
||||
jr z,prtslc ; if so, print details, and return
|
||||
;
|
||||
call isnum ; do we have a number?
|
||||
jp z,setlabel ; if so, then we are setting Label.
|
||||
;
|
||||
jp usage ; otherwise print usage and return
|
||||
ret ; and exit
|
||||
;
|
||||
;===============================================================================
|
||||
; Print Usage /? Information
|
||||
;
|
||||
usage:
|
||||
ld de,str_usage ; display the cmd options for this utility
|
||||
call prtstr
|
||||
;
|
||||
ret ; exit back out to CP/M CCP
|
||||
;
|
||||
;===============================================================================
|
||||
; 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
|
||||
;
|
||||
ret ; loop has finished
|
||||
;
|
||||
;-------------------------------------------------------------------------------
|
||||
; 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
|
||||
;
|
||||
;===============================================================================
|
||||
; Set Label Information onto disk
|
||||
;
|
||||
setlabel:
|
||||
call getnum ; parse a number
|
||||
jp c,err_parm ; handle overflow error
|
||||
ld (currunit),a ; save boot unit
|
||||
xor a ; zero accum
|
||||
ld (currslice),a ; save default slice
|
||||
call skipws ; skip possible whitespace
|
||||
ld a,(de) ; get separator char
|
||||
or a ; test for terminator
|
||||
jp z,err_parm ; if so, incomplete
|
||||
cp '=' ; otherwise, is ','?
|
||||
jr z,setlabel4 ; if so, skip the Slice parm
|
||||
cp '.' ; otherwise, is '.'?
|
||||
jp NZ,err_parm ; if not, format error
|
||||
;
|
||||
inc de ; bump past separator
|
||||
call skipws ; skip possible whitespace
|
||||
call isnum ; do we have a number?
|
||||
jp nz,err_parm ; if not, format error
|
||||
call getnum ; get number
|
||||
jp c,err_parm ; handle overflow error
|
||||
ld (currslice),a ; save boot slice
|
||||
setlabel3:
|
||||
call skipws ; skip possible whitespace
|
||||
ld a,(de) ; get separator char
|
||||
or a ; test for terminator
|
||||
jp z,err_parm ; if so, then an error
|
||||
cp '=' ; otherwise, is ','?
|
||||
jp nz,err_parm ; if not, format error
|
||||
setlabel4:
|
||||
inc de ; bump past separator
|
||||
call skipws ; skip possible whitespace
|
||||
ld (newlabel),de ; address of disk label after '='
|
||||
;
|
||||
ld a,(currunit) ; passing boot unit
|
||||
ld d,a
|
||||
ld a,(currslice) ; and slice
|
||||
ld e,a
|
||||
ld b,BF_EXTSLICE ; HBIOS func: SLICE CALC - extended
|
||||
rst 08 ; info for the Device, and Slice
|
||||
;
|
||||
; Check errors from the Function
|
||||
cp ERR_NOUNIT ; compare to no unit error
|
||||
jp z,err_nodisk ; handle no disk err
|
||||
cp ERR_NOMEDIA ; no media in the device
|
||||
jp z,err_nomedia ; handle the error
|
||||
cp ERR_RANGE ; slice is invalid
|
||||
jp z,err_badslice ; bad slice, handle err
|
||||
or a ; any other error
|
||||
jp nz,err_diskio ; handle as general IO error
|
||||
;
|
||||
call thirdsector ; point to the third sector of partition
|
||||
;
|
||||
call diskread ; read the sector
|
||||
jp nz,err_diskio ; abort on error
|
||||
;
|
||||
; Check signature
|
||||
ld de,(bb_sig) ; get signature read
|
||||
ld a,sigbyte1 ; expected value of first byte
|
||||
cp d ; compare
|
||||
jp nz,err_sig ; handle error
|
||||
ld a,sigbyte2 ; expected value of second byte
|
||||
cp e ; compare
|
||||
jp nz,err_sig ; handle error
|
||||
;
|
||||
ld b,16 ; loop down counter (max size of label)
|
||||
ld de,(newlabel) ; reading from cmd line
|
||||
ld hl,bb_label ; writing to disk label in sector buffer
|
||||
updatelabel:
|
||||
ld a,(de) ; read input
|
||||
or a ; look for string terminator
|
||||
jr z,updatelabel2 ; if terminator then complete
|
||||
ld (hl),a ; store char in sector buff
|
||||
inc de ; update pointers
|
||||
inc hl
|
||||
djnz updatelabel ; loop for next character
|
||||
updatelabel2:
|
||||
ld a,labelterm
|
||||
ld (hl),a ; store the final terminator $ char
|
||||
writelabel:
|
||||
; write the sector
|
||||
ld hl,(lba) ; lba, low word, same as read sector
|
||||
ld de,(lba+2) ; lba, high word
|
||||
call diskwrite ; write the sector back to disk
|
||||
jp nz,err_diskio ; abort on error
|
||||
;
|
||||
; print the outcome.
|
||||
ld de,PRTSLC_HDR ; Header for list of Slices
|
||||
call prtstr ; Print header
|
||||
call prtslc3 ; print updated label for unit/slice
|
||||
;
|
||||
ret
|
||||
;
|
||||
;-------------------------------------------------------------------------------
|
||||
; 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
|
||||
;
|
||||
;===============================================================================
|
||||
; Error Handlers
|
||||
;
|
||||
err_una:
|
||||
ld de,str_err_una
|
||||
jr err_ret
|
||||
err_inv:
|
||||
ld de,str_err_inv
|
||||
jr err_ret
|
||||
err_ver:
|
||||
ld de,str_err_ver
|
||||
jr err_ret
|
||||
err_parm:
|
||||
ld de,str_err_parm
|
||||
jr err_ret
|
||||
err_nodisk:
|
||||
ld de,str_err_nodisk
|
||||
jr err_ret
|
||||
err_nomedia:
|
||||
ld de,str_err_nomedia
|
||||
jr err_ret
|
||||
err_badslice:
|
||||
ld de,str_err_badslc
|
||||
jr err_ret
|
||||
err_sig:
|
||||
ld de,str_err_sig
|
||||
jr err_ret
|
||||
err_diskio:
|
||||
ld de,str_err_diskio
|
||||
jr err_ret
|
||||
err_ret:
|
||||
call crlf2
|
||||
call prtstr
|
||||
or $FF ; signal error
|
||||
ret
|
||||
;
|
||||
;===============================================================================
|
||||
; Utility Routines
|
||||
;-------------------------------------------------------------------------------
|
||||
; Print a dot on console
|
||||
;
|
||||
pdot:
|
||||
push af
|
||||
ld a,'.'
|
||||
call cout
|
||||
pop af
|
||||
ret
|
||||
;
|
||||
;-------------------------------------------------------------------------------
|
||||
; Print character in A without destroying any registers
|
||||
;
|
||||
prtchr:
|
||||
cout:
|
||||
push af ; save registers
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
ld e,a ; character to print in E
|
||||
ld c,$02 ; BDOS function to output a character
|
||||
call bdos ; do it
|
||||
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
|
||||
;
|
||||
;-------------------------------------------------------------------------------
|
||||
; INPUT ROUTINES
|
||||
;-------------------------------------------------------------------------------
|
||||
; Skip whitespace at buffer adr in DE, returns with first
|
||||
; non-whitespace character in A.
|
||||
;
|
||||
skipws:
|
||||
ld a,(de) ; get next char
|
||||
or a ; check for eol
|
||||
ret z ; done if so
|
||||
cp ' ' ; blank?
|
||||
ret nz ; nope, done
|
||||
inc de ; bump buffer pointer
|
||||
jr skipws ; and loop
|
||||
;
|
||||
;-------------------------------------------------------------------------------
|
||||
; Convert character in A to uppercase
|
||||
;
|
||||
upcase:
|
||||
cp 'a' ; if below 'a'
|
||||
ret c ; ... do nothing and return
|
||||
cp 'z' + 1 ; if above 'z'
|
||||
ret nc ; ... do nothing and return
|
||||
res 5,a ; clear bit 5 to make lower case -> upper case
|
||||
ret ; and return
|
||||
;
|
||||
;-------------------------------------------------------------------------------
|
||||
; Get numeric chars at DE and convert to number returned in A
|
||||
; Carry flag set on overflow
|
||||
;
|
||||
getnum:
|
||||
ld c,0 ; C is working register
|
||||
getnum1:
|
||||
ld a,(de) ; get the active char
|
||||
cp '0' ; compare to ascii '0'
|
||||
jr c,getnum2 ; abort if below
|
||||
cp '9' + 1 ; compare to ascii '9'
|
||||
jr nc,getnum2 ; abort if above
|
||||
;
|
||||
; valid digit, add new digit to C
|
||||
ld a,c ; get working value to A
|
||||
rlca ; multiply by 10
|
||||
ret c ; overflow, return with carry set
|
||||
rlca ; ...
|
||||
ret c ; overflow, return with carry set
|
||||
add a,c ; ...
|
||||
ret c ; overflow, return with carry set
|
||||
rlca ; ...
|
||||
ret c ; overflow, return with carry set
|
||||
ld c,a ; back to C
|
||||
ld a,(de) ; get new digit
|
||||
sub '0' ; make binary
|
||||
add a,c ; add in working value
|
||||
ret c ; overflow, return with carry set
|
||||
ld c,a ; back to C
|
||||
;
|
||||
inc de ; bump to next char
|
||||
jr getnum1 ; loop
|
||||
;
|
||||
getnum2: ; return result
|
||||
ld a,c ; return result in A
|
||||
or a ; with flags set, CF is cleared
|
||||
ret
|
||||
;
|
||||
;-------------------------------------------------------------------------------
|
||||
; Is character in A numeric? NZ if not
|
||||
;
|
||||
isnum:
|
||||
cp '0' ; compare to ascii '0'
|
||||
jr c,isnum1 ; abort if below
|
||||
cp '9' + 1 ; compare to ascii '9'
|
||||
jr nc,isnum1 ; abort if above
|
||||
cp a ; set Z
|
||||
ret
|
||||
isnum1:
|
||||
or $FF ; set NZ
|
||||
ret ; and done
|
||||
;
|
||||
;-------------------------------------------------------------------------------
|
||||
; DISK IO ROUTINES
|
||||
;-------------------------------------------------------------------------------
|
||||
; Init Disk IO
|
||||
;
|
||||
initdiskio:
|
||||
; Get current RAM bank
|
||||
ld b,BF_SYSGETBNK ; HBIOS GetBank function
|
||||
RST 08 ; do it via RST vector, C=bank id
|
||||
RET NZ ; had to replace this line below.
|
||||
ld a,c ; put bank id in A
|
||||
ld (BID_USR),a ; put bank id in Argument
|
||||
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
|
||||
;
|
||||
;-------------------------------------------------------------------------------
|
||||
; WRITE disk sector(s)
|
||||
; DE:HL is LBA, B is sector count, C is disk unit
|
||||
;
|
||||
diskwrite:
|
||||
;
|
||||
ld a,(currunit) ; disk unit to read
|
||||
ld c,a ; put in C
|
||||
ld b,1 ; one sector
|
||||
;
|
||||
; Seek to requested sector in DE:HL
|
||||
push bc ; save unit & count
|
||||
set 7,d ; set LBA access flag
|
||||
ld b,BF_DIOSEEK ; HBIOS func: seek
|
||||
rst 08 ; do it
|
||||
pop bc ; recover unit & count
|
||||
ret nz ; handle error
|
||||
;
|
||||
; Read sector(s) into buffer
|
||||
ld e,b ; transfer count
|
||||
ld b,BF_DIOWRITE ; HBIOS func: disk read
|
||||
ld hl,(dma) ; read into info sec buffer
|
||||
ld a,(BID_USR) ; get user bank to accum
|
||||
ld d,a ; and move to D
|
||||
rst 08 ; do it
|
||||
ret ; and done
|
||||
;
|
||||
;===============================================================================
|
||||
; Constants
|
||||
;===============================================================================
|
||||
;
|
||||
str_banner .db "\r\n"
|
||||
.db "Slice Label, v1.0, April 2025 - M.Pruden",0
|
||||
;
|
||||
str_err_una .db " ERROR: UNA not supported by application",0
|
||||
str_err_inv .db " ERROR: Invalid BIOS (signature missing)",0
|
||||
str_err_ver .db " ERROR: Unexpected HBIOS version",0
|
||||
str_err_parm .db " ERROR: Parameter error (SLABEL /? for usage)",0
|
||||
str_err_nodisk .db " ERROR: Disk unit not available",0
|
||||
str_err_nomedia .db " ERROR: Media not present",0
|
||||
str_err_badslc .db " ERROR: Slice specified is illegal",0
|
||||
str_err_sig .db " ERROR: No system image on disk",0
|
||||
str_err_diskio .db " ERROR: Disk I/O failure",0
|
||||
;
|
||||
str_usage .db "\r\n\r\n"
|
||||
.db " Usage: SLABEL - list current labels\r\n"
|
||||
.db " SLABEL unit[.slice]=label - Defines a label\r\n"
|
||||
.db " SLABEL /? - Display this help info.\r\n"
|
||||
.db " Options are case insensitive.\r\n",0
|
||||
;
|
||||
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
|
||||
newlabel .dw 0 ; address of parameter, new label to write
|
||||
;
|
||||
BID_USR .db 0 ; Bank ID for user bank
|
||||
dma .dw bl_infosec ; address for disk buffer
|
||||
;
|
||||
stksav .dw 0 ; stack pointer saved at start
|
||||
.fill stksiz,0 ; stack
|
||||
stack .equ $ ; stack top
|
||||
;
|
||||
;===============================================================================
|
||||
; Disk Buffer
|
||||
;===============================================================================
|
||||
;
|
||||
; define origin of disk buffer above 8000 for performance.
|
||||
.org $8000
|
||||
;
|
||||
; 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
|
||||
@@ -668,15 +668,15 @@ lba ds 4 ; current lba
|
||||
stack equ $
|
||||
stksav ds 2
|
||||
|
||||
csvbufs equ 256
|
||||
alvbufs equ 512
|
||||
dirbufs equ 512
|
||||
dtabufs equ 512
|
||||
; CPMLDR.SYS must be a multiple of 512 bytes (one sector)
|
||||
; for the RomWBW loader. Below padding as needed to force
|
||||
; this.
|
||||
ds 80h
|
||||
|
||||
;csvbuf ds 256 ; length (CSV) = ((DRM+1)/4)
|
||||
;alvbuf ds 512 ; length (ALV) = ((DSM+1)/4)
|
||||
;dirbuf ds 512 ; sector buffer
|
||||
;dtabuf ds 512 ; sector buffer
|
||||
csvbufs equ 256 ; length (CSV) = ((DRM+1)/4)
|
||||
alvbufs equ 512 ; length (ALV) = ((DSM+1)/4)
|
||||
dirbufs equ 512 ; sector buffer
|
||||
dtabufs equ 512 ; sector buffer
|
||||
|
||||
; Trying to save space. The loader must fit underneath
|
||||
; the start of BNKBDOS3 and we have a big BNKBDOS because
|
||||
|
||||
@@ -8,11 +8,12 @@ $define{doc_date}{$date{%d %b %Y}$}$
|
||||
$ifndef{doc_authmail}$ $define{doc_authmail}{wwarthen@gmail.com}$ $endif$
|
||||
$define{doc_orgname}{RetroBrew Computers Group}$
|
||||
$define{doc_orgurl}{www.retrobrewcomputers.org}$
|
||||
$define{doc_intro}{[RomWBW Introduction]($doc_root$/RomWBW Introduction.pdf)}$
|
||||
$define{doc_user}{[RomWBW User Guide]($doc_root$/RomWBW User Guide.pdf)}$
|
||||
$define{doc_sys}{[RomWBW System Guide]($doc_root$/RomWBW System Guide.pdf)}$
|
||||
$define{doc_apps}{[RomWBW Applications]($doc_root$/RomWBW Applications.pdf)}$
|
||||
$define{doc_catalog}{[RomWBW Disk Catalog]($doc_root$/RomWBW Disk Catalog.pdf)}$
|
||||
$define{doc_errata}{[RomWBW Errata]($doc_root$/RomWBW Errata.pdf)}$
|
||||
$define{doc_hardware}{[RomWBW Hardware]($doc_root$/RomWBW Hardware.pdf)}$
|
||||
|
||||
---
|
||||
title: $doc_product$ $doc_title$
|
||||
|
||||
@@ -15,20 +15,24 @@ set PATH=%TOOLS%\gpp;%PATH%
|
||||
|
||||
if not "%1"=="" (call :GenDoc %1 & goto :eof)
|
||||
|
||||
call :GenDoc ReadMe || exit /b
|
||||
:: call :GenDoc ReadMe || exit /b
|
||||
call :GenDoc Introduction || exit /b
|
||||
call :GenDoc UserGuide || exit /b
|
||||
call :GenDoc SystemGuide || exit /b
|
||||
call :GenDoc Applications || exit /b
|
||||
call :GenDoc Catalog || exit /b
|
||||
call :GenDoc Errata || exit /b
|
||||
call :GenDoc Hardware || exit /b
|
||||
|
||||
if exist ReadMe.gfm copy Readme.gfm ..\..\ReadMe.md || exit /b
|
||||
if exist ReadMe.txt copy ReadMe.txt ..\..\ReadMe.txt || exit /b
|
||||
:: if exist ReadMe.gfm copy Readme.gfm ..\..\ReadMe.md || exit /b
|
||||
:: if exist ReadMe.txt copy ReadMe.txt ..\..\ReadMe.txt || exit /b
|
||||
if exist Introduction.gfm copy Introduction.gfm ..\..\ReadMe.md || exit /b
|
||||
if exist Introduction.txt copy Introduction.txt ..\..\ReadMe.txt || exit /b
|
||||
if exist Introduction.pdf copy Introduction.pdf "..\..\Doc\RomWBW Introduction.pdf" || exit /b
|
||||
if exist UserGuide.pdf copy UserGuide.pdf "..\..\Doc\RomWBW User Guide.pdf" || exit /b
|
||||
if exist SystemGuide.pdf copy SystemGuide.pdf "..\..\Doc\RomWBW System Guide.pdf" || exit /b
|
||||
if exist Applications.pdf copy Applications.pdf "..\..\Doc\RomWBW Applications.pdf" || exit /b
|
||||
if exist Catalog.pdf copy Catalog.pdf "..\..\Doc\RomWBW Disk Catalog.pdf" || exit /b
|
||||
if exist Errata.pdf copy Errata.pdf "..\..\Doc\RomWBW Errata.pdf" || exit /b
|
||||
if exist Hardware.pdf copy Hardware.pdf "..\..\Doc\RomWBW Hardware.pdf" || exit /b
|
||||
|
||||
echo.
|
||||
goto :eof
|
||||
@@ -53,4 +57,4 @@ pandoc %1.tmp -f markdown -t gfm-yaml_metadata_block -s -o %1.gfm --default-imag
|
||||
::pandoc %1.tmp -f markdown -t gfm-yaml_metadata_block -s -o %1.txt --markdown-headings=setext --default-image-extension=png || exit /b
|
||||
pandoc %1.tmp -f markdown -t plain+gutenberg -s -o %1.txt || exit /b
|
||||
|
||||
goto :eof
|
||||
goto :eof
|
||||
|
||||
@@ -381,11 +381,10 @@ The following files appear in User Area 0
|
||||
| `GET.COM` | DRI CPM+ Temporarily get console input form a disk file |
|
||||
| `HELP.COM` | DRI CPM+ Display information on how to use commands |
|
||||
| `HELP.HLP` | DRI CPM+ Databse of help information for HELP.COM |
|
||||
| `HEXCOM.COM` | DRI CPM+ Create a COM file from a hex file output by MAC |
|
||||
| `HEXCOM.COM` | DRI CPM+ Create a COM file from a hex file (replaces LOAD.COM) |
|
||||
| `INITDIR.COM` | DRI CPM+ Initializes a disk to allow time and date stamping |
|
||||
| `LIB.COM` | DRI object file library manager |
|
||||
| `LINK.COM` | DRI object file linker |
|
||||
| `LOAD.COM` | DRI loader for Intel hex files |
|
||||
| `MAC.COM` | DRI 8080 macro assembler |
|
||||
| `PATCH.COM` | DRI CPM+ Display or install patch to the CPM+ system or command files |
|
||||
| `PIP.COM` | DRI CPM+ Periperal Interchange Program |
|
||||
@@ -671,6 +670,8 @@ The following are found in
|
||||
| CPN3MT.LBR | CP/NET 3 | CP/M 3 | RCBus w/ MT011 |
|
||||
| CPN12DUO.LBR | CP/NET 1.2 | CP/M 2.2 | Duodyne w/ Disk I/O |
|
||||
| CPN3DUO.LBR | CP/NET 3 | CP/M 3 | Duodyne w/ Disk I/O |
|
||||
| CPN12SER.LBR | CP/NET 1.2 | CP/M 2.2 | RomWBW Serial Port |
|
||||
| CPN3SER.LBR | CP/NET 3 | CP/M 3 | RomWBW Serial Port |
|
||||
|
||||
## General Purpose Applications
|
||||
|
||||
@@ -687,34 +688,34 @@ RomWBW enhancements. These applications are typically documented in the
|
||||
"RomWBW Applications.pdf" document in the Doc directory of the
|
||||
RomWBW Distribution.
|
||||
|
||||
| **File** | **Source** | **Description** |
|
||||
|----------------|-----------------|---------------------------------------------------------------|
|
||||
| `ASSIGN.COM` | RomWBW | Assign,remove,swap drive letters of RomWBW disk slices |
|
||||
| `CLRDIR.COM` | Max Scane | Initializes the directory area of a disk |
|
||||
| `COPYSL.COM` | M.Pruden | Copy CPM Hard Disk Slices |
|
||||
| `COPYSL.DOC` | M.Pruden | Documentation for COPYSL.COM |
|
||||
| `CPUSPD.COM` | RomWBW | CPU Speed |
|
||||
| `FAT.COM` | RomWBW | MS-DOS FAT filesystem tool (list, copy, delete, format, etc.) |
|
||||
| `FDISK80.COM` | John Coffman | Hard disk partitioning tool |
|
||||
| `FDU.COM` | RomWBW | Floppy Disk Utility, Test and format floppy disks |
|
||||
| `FDU.DOC` | RomWBW | Documentation for FDU |
|
||||
| `FLASH.COM` | Will Sowerbutts | Program FLASH chips in-situ |
|
||||
| `FLASH.DOC` | Will Sowerbutts | Documentation for FLASH |
|
||||
| `FORMAT.COM` | RomWBW | Placeholder application with formatting instructions |
|
||||
| `HTALK.COM` | Tom Plano | Terminal utility talking directly to HBIOS Character Units |
|
||||
| `MODE.COM` | RomWBW | Change serial line characteristics (baud rate, etc.) |
|
||||
| `REBOOT.COM` | MartinR | Cold or Warm Boot the RomWBW System |
|
||||
| `RTC.COM` | Andrew Lynch | Test real time clock hardware on your system |
|
||||
| `SURVEY.COM` | RomWBW | Display system resources summary |
|
||||
| `SYSCOPY.COM` | RomWBW | Copy system tracks to disks (make bootable) |
|
||||
| `TALK.COM` | RomWBW | Route console I/O to & from specified serial port |
|
||||
| `TIMER.COM` | RomWBW | Test and display system timer ticks |
|
||||
| `TUNE.COM` | RomWBW | Play .PT2, .PT3, and .MYM audio files on supported hardware |
|
||||
| `VGMPLAY.COM` | | Simple player for VGM (Video Game Music) files. |
|
||||
| `WDATE.COM` | Kevin Boone | Utility to configure RTC Date. |
|
||||
| `XM.COM` | RomWBW | XModem file transfer application |
|
||||
| **File** | **Source** | **Description** |
|
||||
|----------------|-------------------|---------------------------------------------------------------|
|
||||
| `ASSIGN.COM` | RomWBW | Assign,remove,swap drive letters of RomWBW disk slices |
|
||||
| `CLRDIR.COM` | Max Scane | Initializes the directory area of a disk |
|
||||
| `COPYSL.COM` | M.Pruden | Copy CPM Hard Disk Slices |
|
||||
| `COPYSL.DOC` | M.Pruden | Documentation for COPYSL.COM |
|
||||
| `CPUSPD.COM` | RomWBW | CPU Speed |
|
||||
| `FAT.COM` | RomWBW | MS-DOS FAT filesystem tool (list, copy, delete, format, etc.) |
|
||||
| `FDISK80.COM` | John Coffman | Hard disk partitioning tool |
|
||||
| `FDU.COM` | RomWBW | Floppy Disk Utility, Test and format floppy disks |
|
||||
| `FDU.DOC` | RomWBW | Documentation for FDU |
|
||||
| `FLASH.COM` | Will Sowerbutts | Program FLASH chips in-situ |
|
||||
| `FLASH.DOC` | Will Sowerbutts | Documentation for FLASH |
|
||||
| `FORMAT.COM` | RomWBW | Placeholder application with formatting instructions |
|
||||
| `HTALK.COM` | Tom Plano | Terminal utility talking directly to HBIOS Character Units |
|
||||
| `MODE.COM` | RomWBW | Change serial line characteristics (baud rate, etc.) |
|
||||
| `REBOOT.COM` | MartinR | Cold or Warm Boot the RomWBW System |
|
||||
| `RTC.COM` | Andrew Lynch | Test real time clock hardware on your system |
|
||||
| `SURVEY.COM` | RomWBW | Display system resources summary |
|
||||
| `SYSCOPY.COM` | RomWBW | Copy system tracks to disks (make bootable) |
|
||||
| `TALK.COM` | RomWBW | Route console I/O to & from specified serial port |
|
||||
| `TIMER.COM` | RomWBW | Test and display system timer ticks |
|
||||
| `TUNE.COM` | RomWBW | Play .PT2, .PT3, and .MYM audio files on supported hardware |
|
||||
| `VGMPLAY.COM` | | Simple player for VGM (Video Game Music) files. |
|
||||
| `WDATE.COM` | Kevin Boone | Utility to configure RTC Date. |
|
||||
| `XM.COM` | RomWBW | XModem file transfer application |
|
||||
|
||||
Then we have some more general purpose applcations.
|
||||
Then we have some more general purpose applications.
|
||||
In general, there is no documentation for these applications included with the RomWBW
|
||||
distribution. Some provide command line help themselves. Some are fairly obvious.
|
||||
|
||||
@@ -741,7 +742,9 @@ distribution. Some provide command line help themselves. Some are fairly obvio
|
||||
| `SUPERSUB.DOC` | | Documentation for SUPERSUB |
|
||||
| `SYSGEN.COM` | DRI | Copy system tracks to disks |
|
||||
| `TBASIC.COM` | Dimitri Theulings | Tasty Basic. This also exists as a Rom appication |
|
||||
| `TDLBASIC.COM` | | TDL Zapple 12K BASIC language interpreter |
|
||||
| `TDLBASIC.COM` | | TDL Zapple 12K BASIC language interpreter |
|
||||
| `TE.COM` | Ladislau Szilagyi | RomWBW enhanced version of TE editor |
|
||||
| `TE.DOC` | Ladislau Szilagyi | TE Editor Documentation |
|
||||
| `UNARC.COM` | | Extract file(s) from .ARC or .ARK archive |
|
||||
| `UNARC.DOC` | | Documentation for UNARC |
|
||||
| `UNCR.COM` | | Decompress Crunched file(s). See CRUNCH.COM |
|
||||
@@ -1306,7 +1309,7 @@ Also contained on this image in User Area 1 are.
|
||||
| Floppy Disk Image: **fd_z80asm.img**
|
||||
| Hard Disk Image: **hd_z80asm.img**
|
||||
|
||||
This disk contains 4 major components
|
||||
This disk contains 6 major components
|
||||
|
||||
* Z80ASM is a relocating macro assembler for CP/M. It takes assembly language
|
||||
source statements from a disk file, converts them into their binary equivalent,
|
||||
@@ -1316,22 +1319,30 @@ listing output may be sent to a disk file, the console and/or the printer, in
|
||||
any combination. Output files may also be generated containing cross-reference
|
||||
information on each symbol used.
|
||||
|
||||
* Z80ASMP (Z80ASM Plus). Referred to as the "Virtual Memory" version which
|
||||
uses disk for working storage, thus not constrained by RAM.
|
||||
|
||||
* SLR180 is a powerful relocating macro assembler for Z80
|
||||
compatible CP/M systems. It takes assembly language source
|
||||
statements from a disk file, converts them into their binary
|
||||
equivalent, and stores the output in either a core-image, Intel
|
||||
hex format, or relocatable object file. The mnemonics recognized
|
||||
are those of Zilog/Hitachi. The optional listing output may be
|
||||
are those of Zilog (Z180)/Hitachi. The optional listing output may be
|
||||
sent to a disk file, the console and/or the printer, in any
|
||||
combination. Output files may also be generated containing
|
||||
cross-reference information on each symbol used.
|
||||
|
||||
* SLRMAC relocating macro assembler for Intel 8080 mnemonics
|
||||
|
||||
* SLRNK is a powerful linking loader for Z80-based CP/M systems.
|
||||
It takes relocatable binary information in either Microsoft or
|
||||
SLR Systems format from a disk file, resolves external and entry
|
||||
point references, and stores the output in memory for execution
|
||||
or outputs it to a disk file.
|
||||
|
||||
* SLRNKP (SLRNK Plus). Referred to as the "Virtual Memory" version which
|
||||
uses disk for working storage, thus not constrained by RAM.
|
||||
|
||||
* Z80DIS is an entirely new disassembler for Z80 based CP/M sys-
|
||||
tems. Z80DIS is written in TURBO PASCAL. Z80DIS generates Z80
|
||||
mnemonics and prepares an assembly language file with many
|
||||
@@ -1363,18 +1374,21 @@ User Area 0 - Assembler
|
||||
| 180FIG.COM | Configuration utility for SLR180.COM |
|
||||
| 8080.MAC | ? |
|
||||
| CONFIG.COM | Configuration utility for Z80ASM.COM |
|
||||
| CONFIGP.COM | Configuration utility for Z80ASMP.COM |
|
||||
| DUMP.* | Sample Program |
|
||||
| MAKESYM.COM | Symbol File .SYM file generation |
|
||||
| MAKESYM.DOC | Documentation for MAKESYM.COM |
|
||||
| SLR180.COM | HD64180 Relocating Macro Assembler |
|
||||
| SLR180.COM | HD64180 (Z180) Relocating Macro Assembler |
|
||||
| SLR180.DOC | Release Notes for SLR180.COM |
|
||||
| SLRMAC.COM | 8080 Relocating Macro Assembler |
|
||||
| SYNTAX.HLP | Documentation basic usage for all SLR Tools |
|
||||
| SYNTAX.TXT | Documentation basic usage for all SLR Tools |
|
||||
| TEST.* | Sample Program |
|
||||
| Z80ASM.COM | Z80 Relocating Macro Assembler |
|
||||
| Z80ASMP.COM | Z80 Relocating Macro Assembler (PLUS) |
|
||||
| Z80ASM.DOC | Release Notes for Z80ASM.COM |
|
||||
|
||||
User Area 1 - Linker
|
||||
User Area 1 - Linker and Library Management
|
||||
|
||||
| **File** | **Description** |
|
||||
|--------------|-----------------------------------------------|
|
||||
@@ -1382,6 +1396,7 @@ User Area 1 - Linker
|
||||
| NZLNKFIX.ZEX | ? |
|
||||
| SLRIB.COM | SuperLibrarian, library manager |
|
||||
| SLRNK.COM | SuperLinker, the main linker tool |
|
||||
| SLRNKP.COM | SuperLinker (PLUS) |
|
||||
| SLRNK.DOC | Release Notes for SLRNK.COM |
|
||||
| SLRNKFIX.ZEX | ? |
|
||||
| SYNTAX.HLP | Documentation basic usage for all SLR Tools |
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
$define{doc_title}{Errata}$
|
||||
$include{"Book.h"}$
|
||||
|
||||
# Errata
|
||||
|
||||
The following errata apply to $doc_product$ $doc_ver$:
|
||||
|
||||
* The use of high density floppy disks requires a CPU speed of 8 MHz or
|
||||
greater.
|
||||
|
||||
* The PropIO support is based on RomWBW specific firmware. Be sure to
|
||||
program/update your PropIO firmware with the corresponding firmware
|
||||
image provided in the Binary directory of the RomWBW distribution.
|
||||
|
||||
* Reading bytes from the video memory of the VDU board (not Color
|
||||
VDU) appears to be problematic. This is only an issue when the driver
|
||||
needs to scroll a portion of the screen which is done by applications
|
||||
such as WordStar or ZDE. You are likely to see screen corruption in
|
||||
this case.
|
||||
2166
Source/Doc/Hardware.md
Normal file
409
Source/Doc/Introduction.md
Normal file
@@ -0,0 +1,409 @@
|
||||
$define{doc_title}{Introduction}$
|
||||
$include{"Book.h"}$
|
||||
|
||||
# Overview
|
||||
|
||||
RomWBW software provides a complete, commercial quality
|
||||
implementation of CP/M (and workalike) 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
|
||||
$doc_hardware$ .
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
# 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
|
||||
* 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.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
## 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. |
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
#### 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 $doc_user$. 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:
|
||||
|
||||
* $doc_user$ 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
|
||||
|
||||
* $doc_hardware$ contains a description of all the hardware platforms,
|
||||
and devices supported by RomWBW.
|
||||
|
||||
* $doc_apps$ is a reference for the ROM-hosted and OS-hosted applications
|
||||
created or customized to enhance the operation of RomWBW.
|
||||
|
||||
* $doc_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
|
||||
|
||||
* $doc_sys$ discusses much of the internal design and construction
|
||||
of RomWBW. It includes a reference for the RomWBW HBIOS API
|
||||
functions.
|
||||
|
||||
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 $doc_author$ at [$doc_authmail$](mailto:$doc_authmail$).
|
||||
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
|
||||
- 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
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
## 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:
|
||||
|
||||
> $doc_author$ \
|
||||
> [$doc_authmail$](mailto:$doc_authmail$)
|
||||
|
||||
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.
|
||||
@@ -9,7 +9,7 @@
|
||||
# On Ubuntu Linux:
|
||||
# apt install gpp pandoc texlive texlive-luatex texlive-fonts-extra
|
||||
#
|
||||
OBJECTS = ReadMe.gfm ReadMe.txt UserGuide.pdf SystemGuide.pdf Applications.pdf Catalog.pdf Errata.pdf
|
||||
OBJECTS = Introduction.gfm Introduction.txt Introduction.pdf UserGuide.pdf SystemGuide.pdf Applications.pdf Catalog.pdf Hardware.pdf
|
||||
# DEST = ../../Doc
|
||||
TOOLS = ../../Tools
|
||||
OTHERS = *.tmp
|
||||
@@ -31,16 +31,17 @@ all :: deploy
|
||||
pandoc $< -f markdown -t dokuwiki -s -o $@ --default-image-extension=pdf
|
||||
|
||||
%.gfm : %.tmp
|
||||
pandoc $< -f markdown -t gfm -s -o $@ --default-image-extension=pdf
|
||||
pandoc $< -f markdown -t gfm-yaml_metadata_block -s -o $@ --default-image-extension=pdf
|
||||
|
||||
%.txt : %.tmp
|
||||
pandoc $< -f markdown -t plain -s -o $@ --default-image-extension=pdf
|
||||
|
||||
deploy :
|
||||
cp ReadMe.gfm "../../ReadMe.md"
|
||||
cp ReadMe.txt "../../ReadMe.txt"
|
||||
cp Introduction.gfm "../../ReadMe.md"
|
||||
cp Introduction.txt "../../ReadMe.txt"
|
||||
cp Introduction.pdf "../../Doc/RomWBW Introduction.pdf"
|
||||
cp UserGuide.pdf "../../Doc/RomWBW User Guide.pdf"
|
||||
cp SystemGuide.pdf "../../Doc/RomWBW System Guide.pdf"
|
||||
cp Applications.pdf "../../Doc/RomWBW Applications.pdf"
|
||||
cp Catalog.pdf "../../Doc/RomWBW Disk Catalog.pdf"
|
||||
cp Errata.pdf "../../Doc/RomWBW Errata.pdf"
|
||||
cp Hardware.pdf "../../Doc/RomWBW Hardware.pdf"
|
||||
|
||||
@@ -3,9 +3,10 @@ $include{"Basic.h"}$
|
||||
|
||||
# Overview
|
||||
|
||||
RomWBW software provides a complete, commercial quality
|
||||
implementation of CP/M (and workalike) operating systems and
|
||||
RomWBW software provides a complete, commercial quality
|
||||
implementation of CP/M (and workalike) 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:
|
||||
|
||||
@@ -22,7 +23,7 @@ produced by these developer communities:
|
||||
A complete list of the currently supported platforms is found in the
|
||||
[Installation] section.
|
||||
|
||||
General features include:
|
||||
Supported hardware features of RomWBW include:
|
||||
|
||||
* Z80 Family CPUs including Z80, Z180, and Z280
|
||||
* Banked memory services for several banking designs
|
||||
@@ -31,7 +32,7 @@ General features include:
|
||||
* Video drivers including TMS9918, SY6545, MOS8563, HD6445
|
||||
* Keyboard (PS/2) drivers via VT8242 or PPI interfaces
|
||||
* Real time clock drivers including DS1302, BQ4845
|
||||
* OSes: CP/M 2.2, ZSDOS, CP/M 3, NZ-COM, ZPM3, QPM, p-System, and FreeRTOS
|
||||
* Support for CP/NET networking using Wiznet, MT011 or Serial
|
||||
* Built-in VT-100 terminal emulation support
|
||||
|
||||
RomWBW is distributed as both source code and pre-built ROM and disk
|
||||
@@ -43,13 +44,14 @@ ROM firmware itself:
|
||||
* ROM BASIC (Nascom BASIC and Tasty BASIC)
|
||||
* ROM Forth
|
||||
|
||||
A dynamic disk drive letter assignment mechanism allows mapping
|
||||
operating system drive letters to any available disk media.
|
||||
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
|
||||
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 accessible storage on a single device.
|
||||
OSes and allows up to 2GB of accessible storage on a single device,
|
||||
with up to 128MB accessible at any one time.
|
||||
|
||||
The pre-built ROM firmware images are generally suitable for most
|
||||
users. However, it is also very easy to modify and build custom ROM
|
||||
@@ -72,25 +74,25 @@ 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.
|
||||
|
||||
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
|
||||
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.
|
||||
|
||||
# Acquiring RomWBW
|
||||
|
||||
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. The
|
||||
fully-built distribution releases are available on the
|
||||
(<https://github.com/wwarthen/RomWBW>) on GitHub is the official
|
||||
distribution location for all project source and documentation.
|
||||
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
|
||||
(<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. Expand the "Assets" drop-down
|
||||
for the release you want to download, then select the asset named
|
||||
RomWBW-vX.X.X-Package.zip. The Package asset includes all pre-built ROM
|
||||
and Disk images as well as full source code. The other assets contain
|
||||
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.
|
||||
|
||||
All source code and distributions are maintained on GitHub. Code
|
||||
@@ -105,16 +107,20 @@ 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 $doc_user$.
|
||||
found in the $doc_user$. 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
|
||||
|
||||
Documentation for $doc_product$ includes:
|
||||
|
||||
* $doc_intro$
|
||||
* $doc_user$
|
||||
* $doc_sys$
|
||||
* $doc_apps$
|
||||
* $doc_errata$
|
||||
* $doc_catalog$
|
||||
* $doc_hardware$
|
||||
|
||||
# Acknowledgments
|
||||
|
||||
@@ -188,12 +194,14 @@ please let me know if I missed you!
|
||||
|
||||
* Martin R has provided substantial help reviewing and improving the
|
||||
User Guide and Applications documents.
|
||||
|
||||
* Mark Pruden has also contributed a great deal of content to the
|
||||
Disk Catalog, User Guide as well as contributing the disk image
|
||||
for the Z3PLUS operating system, the COPYSL utility, and also
|
||||
implemented a feature for RomWBW configuration by NVRAM,
|
||||
and added the /B bulk mode of disk assignment to the ASSIGN utility.
|
||||
|
||||
* 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 and 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.
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ constraints, new hardware platforms can be supported by simply
|
||||
adjusting values in a build configuration file.
|
||||
|
||||
RomWBW is geared toward hardware being developed in modern
|
||||
retro-computing hobbyist communities, not as a replacement for
|
||||
retro-computing hobbyist communities, not as replacement software for
|
||||
legacy hardware. As a result, RomWBW requires at least 128KB
|
||||
of bank switched RAM.
|
||||
|
||||
@@ -42,11 +42,11 @@ RomWBW firmware (ROM) includes:
|
||||
|
||||
It is appropriate to note that much of the code and components that make
|
||||
up a complete RomWBW package are derived from pre-existing work. Most
|
||||
notably, the embedded operating system is simply a ROM-based copy of
|
||||
notably, the embedded operating systems are simply ROM-based copies of
|
||||
generic CP/M or ZSDOS. Much of the hardware support code was originally
|
||||
produced by other members of the RetroBrew Computers Community.
|
||||
|
||||
The remainder of this document focuses on HBIOS which is the
|
||||
The remainder of this document focuses on RomWBW HBIOS which is the
|
||||
fundamental basis of RomWBW.
|
||||
|
||||
# Background
|
||||
@@ -61,13 +61,13 @@ space that is much larger than the CPU address space (typically 512K or
|
||||
the CPU using a technique called bank switching. To achieve this, the
|
||||
physical memory is divided up into chunks (banks) of 32K each. A
|
||||
designated area of the CPU's 64K address space is then reserved to "map"
|
||||
any of the physical memory chunks. You can think of this as a window
|
||||
any of the physical memory chunks. You can think of this as a window
|
||||
that can be adjusted to view portions of the physical memory in 32K
|
||||
blocks. In the case of RomWBW, the lower 32K of the CPU address space is
|
||||
used for this purpose (the window). The upper 32K of CPU address space
|
||||
used for this purpose (the window). The upper 32K of CPU address space
|
||||
is assigned a fixed 32K area of physical memory that never changes. The
|
||||
lower 32K can be "mapped" on the fly to any of the 32K banks of physical
|
||||
memory at a time. The only constraint is that the CPU cannot be
|
||||
memory at a time. The primary constraint is that the CPU cannot be
|
||||
executing code in the lower 32K of CPU address space at the time that a
|
||||
bank switch is performed.
|
||||
|
||||
@@ -91,6 +91,17 @@ operating system is unaware this has occurred. As control is returned to
|
||||
the operating system, the lower 32KB of memory is switched back to the
|
||||
original memory bank.
|
||||
|
||||
The HBIOS functions are invoked simply by placing function parameters
|
||||
in Z80 registers and calling an address within the HBIOS proxy.
|
||||
Additionally, HBIOS implements a complete hardware interrupt management
|
||||
framework. When a hardware interrupt occurs, control vectors through
|
||||
the HBIOS proxy which saves the machine state, selects the HBIOS
|
||||
driver bank into memory, and transfers control to the registered
|
||||
driver's interrupt handler. Upon completion of interrupt processing,
|
||||
control returns via the HBIOS proxy, machine state is restored, and
|
||||
normal processing resumes. The interrupt management framework supports
|
||||
Z80 interrupt modes 1, 2, and 3 (Z280).
|
||||
|
||||
HBIOS is completely agnostic with respect to the operating system (it
|
||||
does not know or care what operating system is using it). The operating
|
||||
system makes simple calls to HBIOS to access any desired hardware
|
||||
@@ -124,8 +135,23 @@ execution.
|
||||
|
||||
# Runtime Memory Layout
|
||||
|
||||
{ width=100% }
|
||||
RomWBW divides the standard 64KB Z80 address space into 2 sections.
|
||||
The lower 32KB is the "banked" area. This is the area that will
|
||||
contain any of the 32KB chunks of physical RAM based on which bank is
|
||||
currently selected. The upper 32KB is "fixed". This area of memory
|
||||
is never swapped out and is used to contain software and operating
|
||||
systems that must remain in the Z80 address space.
|
||||
|
||||
Figure 4.1 depicts the memory layout for a system running the CP/M
|
||||
operating system. Applications residing in TPA invoke BDOS services
|
||||
of CP/M, BDOS invokes the custom CBIOS APIs, and finally CBIOS
|
||||
invokes HBIOS functions as needed by calling into the HBIOS proxy.
|
||||
The HBIOS proxy swaps in the HBIOS bank as needed to perform the
|
||||
requested function.
|
||||
|
||||
Additional banks of RAM are used to create a virtual disk drive.
|
||||
|
||||
{ width=100% }
|
||||
|
||||
## Bank Id
|
||||
|
||||
@@ -139,16 +165,17 @@ a ROM bank is being referred to. If it is 1, it indicates a RAM bank
|
||||
is being referred to.
|
||||
|
||||
For example, let's say we have a typical system with 512KB of ROM and
|
||||
512KB of RAM. The Bank Ids would look like this:
|
||||
512KB of RAM. The following table demonstrates how Bank Ids represent
|
||||
areas of physical memory.
|
||||
|
||||
| Physical Memory | Type | Physical Bank | Bank Id |
|
||||
|-------------------|------|---------------|-----------|
|
||||
| 0x000000-0x007FFF | ROM | 0 | 0x00 |
|
||||
| 0x008000-0x00FFFF | ROM | 1 | 0x01 |
|
||||
| 0x010000-0x07FFFF | ROM | 2-15 | 0x02-0x0F |
|
||||
| 0x080000-0x087FFF | RAM | 16 | 0x80 |
|
||||
| 0x088000-0x08FFFF | RAM | 17 | 0x81 |
|
||||
| 0x090000-0x0FFFFF | RAM | 18-31 | 0x82-0x8F |
|
||||
| **Physical Memory** | **Type** | **Physical Bank** | **Bank Id** |
|
||||
|-----------------------|----------|-------------------|---------------|
|
||||
| 0x000000-0x007FFF | ROM | 0 | 0x00 |
|
||||
| 0x008000-0x00FFFF | ROM | 1 | 0x01 |
|
||||
| 0x010000-0x07FFFF | ROM | 2-15 | 0x02-0x0F |
|
||||
| 0x080000-0x087FFF | RAM | 16 | 0x80 |
|
||||
| 0x088000-0x08FFFF | RAM | 17 | 0x81 |
|
||||
| 0x090000-0x0FFFFF | RAM | 18-31 | 0x82-0x8F |
|
||||
|
||||
Note that Bank Id 0x00 is **always** the first bank of ROM and 0x80 is
|
||||
**always** the first bank of RAM. If there were more banks of physical ROM,
|
||||
@@ -170,23 +197,23 @@ table describes the way the banks are assigned. The Typical column
|
||||
shows the specific values that would be assigned for a common system
|
||||
with 512KB of ROM and 512KB of RAM (nROM=16, nRAM=16).
|
||||
|
||||
| Bank Id | Identity | Typical | Purpose |
|
||||
|-------------------|-----------|---------|------------------------------------------|
|
||||
| 0x00 |BID_BOOT | 0x00 | Boot Bank (HBIOS image) |
|
||||
| 0x01 |BID_IMG0 | 0x01 | Boot Loader, Monitor, ROM OSes, ROM Apps |
|
||||
| 0x02 |BID_IMG1 | 0x02 | ROM Apps |
|
||||
| 0x03 |BID_IMG2 | 0x03 | \<Reserved\> |
|
||||
| 0x04 |BID_ROMD0 | 0x04 | First ROM Disk Bank |
|
||||
| nROM - 1 | | 0x0F | Last ROM Disk Bank |
|
||||
| 0x80 |BID_BIOS | 0x80 | HBIOS (working copy) |
|
||||
| 0x81 |BID_RAMD0 | 0x81 | First RAM Disk Bank |
|
||||
| 0x80 + nRAM - 8 | | 0x88 | Last RAM Disk Bank |
|
||||
| 0x80 + nRAM - 7 |BID_APP0 | 0x89 | First Application Bank |
|
||||
| 0x80 + nRAM - 5 | | 0x8B | Last Application Bank |
|
||||
| 0x80 + nRAM - 4 |BID_BUF | 0x8C | OS Disk Buffers |
|
||||
| 0x80 + nRAM - 3 |BID_AUX | 0x8D | OS Code Bank |
|
||||
| 0x80 + nRAM - 2 |BID_USR | 0x8E | User Bank (CP/M TPA) |
|
||||
| 0x80 + nRAM - 1 |BID_COM | 0x8F | Common Bank |
|
||||
| **Bank Id** | **Identity** | **Typical** | **Purpose** |
|
||||
|---------------------|--------------|-------------|--------------------------------------------|
|
||||
| 0x00 | BID_BOOT | 0x00 | Boot Bank (HBIOS image) |
|
||||
| 0x01 | BID_IMG0 | 0x01 | Boot Loader, Monitor, ROM OSes, ROM Apps |
|
||||
| 0x02 | BID_IMG1 | 0x02 | ROM Apps |
|
||||
| 0x03 | BID_IMG2 | 0x03 | \<Reserved\> |
|
||||
| 0x04 | BID_ROMD0 | 0x04 | First ROM Disk Bank |
|
||||
| nROM - 1 | | 0x0F | Last ROM Disk Bank |
|
||||
| 0x80 | BID_BIOS | 0x80 | HBIOS (working copy) |
|
||||
| 0x81 | BID_RAMD0 | 0x81 | First RAM Disk Bank |
|
||||
| 0x80 + nRAM - 8 | | 0x88 | Last RAM Disk Bank |
|
||||
| 0x80 + nRAM - 7 | BID_APP0 | 0x89 | First Application Bank |
|
||||
| 0x80 + nRAM - 5 | | 0x8B | Last Application Bank |
|
||||
| 0x80 + nRAM - 4 | BID_BUF | 0x8C | OS Disk Buffers |
|
||||
| 0x80 + nRAM - 3 | BID_AUX | 0x8D | OS Code Bank |
|
||||
| 0x80 + nRAM - 2 | BID_USR | 0x8E | User Bank (CP/M TPA) |
|
||||
| 0x80 + nRAM - 1 | BID_COM | 0x8F | Common Bank |
|
||||
|
||||
In this table, nROM and nRAM refer to the number of corresponding
|
||||
ROM and RAM banks in the the system.
|
||||
@@ -265,28 +292,72 @@ hence the name "Common".
|
||||
|
||||
# Disk Layout
|
||||
|
||||
RomWBW supports two hard disk layouts: the Classic layout used by
|
||||
RomWBW with 512 directory entries per slice and a Modern layout with
|
||||
1024 directory entries per slice. These layouts are referred to as
|
||||
hd512 and hd1k respectively.
|
||||
## Floppy Disk Layout
|
||||
|
||||
RomWBVW generally handles floppy disks in the same physical formats
|
||||
as MS-DOS. However, the filesystem will normally be CP/M. The following
|
||||
table lists the floppy disk formats used by RomWBW. In all cases,
|
||||
the sector size is 512 bytes.
|
||||
|
||||
| **HBIOS Media ID** | **Capacity** | **Tracks** | **Heads** | **Sectors** |
|
||||
|--------------------|-------------:|-----------:|----------:|------------:|
|
||||
| MID_FD720 | 720KB | 80 | 2 | 9 |
|
||||
| MID_FD144 | 1440KB | 80 | 2 | 18 |
|
||||
| MID_FD360 | 360KB | 40 | 2 | 9 |
|
||||
| MID_FD120 | 1200KB | 80 | 2 | 15 |
|
||||
| MID_FD111 | 1155KB | 77 | 2 | 15 |
|
||||
|
||||
## Hard Disk Layout
|
||||
|
||||
RomWBW supports the use of PC MBR hard disk partitioning (see
|
||||
<https://en.wikipedia.org/wiki/Disk_partitioning>). When accessing
|
||||
a hard disk device, HBIOS will look for a partition with type id 0x2E
|
||||
and will use that partition exclusively for all storage. If a hard
|
||||
disk does not have a valid partition table with a partition of type
|
||||
0x2E, the HBIOS will treat the hard disk as dedicated storage and
|
||||
will store data starting at the first sector of the disk.
|
||||
|
||||
The use of a partition of type 0x2E is preferred for RomWBW and is
|
||||
referred to as a "Modern" disk layout. If there is no RomWBW
|
||||
partition on the disk, then the disk is designated as having a
|
||||
"Classic" disk layout.
|
||||
|
||||
When a disk uses a RomWBW partition (type 0x2E) for storage (Modern
|
||||
layout), the CP/M filesystems on that disk will utilize a format with
|
||||
1,024 directory entries per filesystem. If there is no RomWBW
|
||||
partition, the CP/M filesystems will have 512 directory entries per
|
||||
filesystem. As a result, the Modern disk layout with a RomWBW partition
|
||||
is also referred to as the "hd1k" layout indicating 1024 directory
|
||||
entries. Similarly, the Classic disk layout (no partition of type 0x2E)
|
||||
is also referred to as the "hd512" layout indicating 512 directory
|
||||
entries.
|
||||
|
||||
The layout type of any hard disk is simply dictated by the existence of
|
||||
a RomWBW partition. This also means that if you add or remove a
|
||||
partition table entry of type 0x2E on existing hard disk media, you will
|
||||
lose access to any pre-existing CP/M data on the disk. If used,
|
||||
partitioning should be done before putting any data on the disk.
|
||||
|
||||
WARNING: You **can not** mix the two hard disk layouts on one hard
|
||||
disk device. You can use different layouts on different hard disk
|
||||
devices in a single system though.
|
||||
|
||||
RomWBW determines which of the hard disk layouts to use for a given
|
||||
hard disk device based on whether there is a RomWBW hard disk
|
||||
partition on the disk containing the slices. If there is no RomWBW
|
||||
partition, then RomWBW will assume the 512 directory entry format for
|
||||
all slices and will assume the slices start at the first sector of
|
||||
the hard disk. If there is a RomWBW partition on the hard disk
|
||||
device, then RomWBW will assume the 1024 directory entry format for
|
||||
all slices and will assume the slices are located in the defined
|
||||
partition.
|
||||
Regardless of whether a disk is Modern or Classic, RomWBW supports
|
||||
the concept of CP/M filesystem slices. In general, CP/M filesystems are
|
||||
limited to 8MB. Since current disk media is dramatically larger than
|
||||
this, RomWBW implements a mechanism to put many (up to 256) CP/M
|
||||
filesystems on a single disk. Each such filesystem is called a slice
|
||||
referring to the idea that the disk has been sliced into many
|
||||
independent CP/M filesystems. RomWBW allows the disk slices to be
|
||||
mapped to the limited (16) drive letters of CP/M. The mapping can be
|
||||
modified on-the-fly on a running system as desired.
|
||||
|
||||
RomWBW supports up to 256 CP/M slices (0-255). Under hd512, the slices
|
||||
begin at the start of the hard disk. Under hd1k, the slices reside
|
||||
within partition type 0x2E.
|
||||
If the case of a Modern disk layout (with a RomWBW partition), the
|
||||
slices are contained within the defined partition area and the number
|
||||
of slices is dictated by the size of the partition. In the case of a
|
||||
Classic disk layout (no RomWBW partition), the slices are located at the
|
||||
start of the disk (first sector). In either case, the slices are just
|
||||
sequential areas of space on the hard disk.
|
||||
|
||||
RomWBW accesses all hard disks using Logical Block Addressing (pure
|
||||
sector offset). When necessary, RomWBW simulates the following disk
|
||||
@@ -315,17 +386,16 @@ and CP/M knows nothing about the FAT partition. However, the FAT
|
||||
application can be run under CP/M to access the FAT partition
|
||||
programmatically.
|
||||
|
||||
A CP/M slice is (re)initialized using the CP/M command CLRDIR. A CP/M
|
||||
slice can be made bootable by copying system image to the System Area
|
||||
using SYSCOPY.
|
||||
Before being used, A CP/M slice must be (re)initialized using the CP/M
|
||||
command CLRDIR. A CP/M slice can be made bootable by copying a system
|
||||
image to the System Area using SYSCOPY.
|
||||
|
||||
The FAT partition can be created from CP/M using the FDISK80 application.
|
||||
|
||||
The FAT partition can be initialized using the FAT application from CP/M
|
||||
using the command `FAT FORMAT n:` where n is the RomWBW disk unit
|
||||
number containing the FAT partition to be formatted.
|
||||
|
||||
## Modern Disk Layout (hd1k)
|
||||
### Modern Hard Disk Layout (hd1k)
|
||||
|
||||

|
||||
|
||||
@@ -336,7 +406,7 @@ The CP/M slices reside entirely within a hard disk partition of type
|
||||
0x2E. The number of slices is determined by the number of slices that
|
||||
fit within the partition spaces allocated up to the maximum of 256.
|
||||
|
||||
## Classic Disk Layout (hd512)
|
||||
### Classic Hard Disk Layout (hd512)
|
||||
|
||||

|
||||
|
||||
@@ -363,27 +433,25 @@ application. The user is responsible for ensuring that the start of the
|
||||
FAT partition does not overlap with the area they intend to use for
|
||||
CP/M slices. FDISK80 has a Reserve option to assist with this.
|
||||
|
||||
## Mapping to Media ID
|
||||
### Mapping to Media ID
|
||||
|
||||
HBIOS has a definition of "Media ID", which defines the type and physical
|
||||
properties of disk media provided by an underlying storage device. For a
|
||||
complete list of Media ID's please see the following section
|
||||
|
||||
[Disk Input/Output (DIO)]
|
||||
complete list of Media ID's please see [Disk Input/Output (DIO)].
|
||||
|
||||
There are two important Media ID's relating to Hard Disk Layouts:
|
||||
|
||||
| **Media** | **ID** | **Format / Meaning** |
|
||||
|------------|-------:|-------------------------------------------------------------|
|
||||
| MID_HD | 4 | Classic Disk Layout (hd512) *--and--* HBIOS Hard Disk Drive |
|
||||
| MID_HDNEW | 10 | Modern Disk Layout (hd1k) |
|
||||
| **Media** | **ID** | **Format / Meaning** |
|
||||
|----------------|-------:|-------------------------------------------------------------|
|
||||
| MID_HD | 4 | Classic Disk Layout (hd512) *--and--* HBIOS Hard Disk Drive |
|
||||
| MID_HDNEW | 10 | Modern Disk Layout (hd1k) |
|
||||
|
||||
HBIOS typically does not understand the format of data on a device,
|
||||
instead just treating all hard disks as raw sectors. `MID_HD` is the typical
|
||||
Media ID used by HBIOS to describe high capaity hard disk media
|
||||
Media ID used by HBIOS to describe high capacity hard disk media
|
||||
|
||||
When the Modern Disk Layout was added, the `MID_HDNEW`, was added to
|
||||
differentiate (at the oerating system level) between the Classic and Modern layouts.
|
||||
differentiate (at the operating system level) between the Classic and Modern layouts.
|
||||
|
||||
However HBIOS itself typically does NOT make this distinction, since the use
|
||||
of these two formats is determined by the operating system based on the
|
||||
@@ -464,8 +532,10 @@ of a system image before programming it to the ROM; or 2) easily switch
|
||||
between system images on the fly.
|
||||
|
||||
During the RomWBW build process, one of the output files produced is an
|
||||
actual CP/M application (an executable .COM program file). Once you have
|
||||
a running CP/M (or compatible) system, you can upload/copy this
|
||||
actual CP/M application (an executable .COM program file). Like the
|
||||
normal .ROM files, this file is placed in the Binary directory with the
|
||||
same name as the ROM file, but with the file extension of .ROM. Once
|
||||
you have a running CP/M (or compatible) system, you can upload/copy this
|
||||
application file to the filesystem. By executing this file, you will
|
||||
initiate an Application Boot using the system image contained in the
|
||||
application file itself.
|
||||
@@ -501,7 +571,7 @@ and control is passed to the Boot Loader.
|
||||
|
||||
## Boot Recovery
|
||||
|
||||
To assist users when driver faults or misconfiguration causes a boot
|
||||
To assist users when driver faults or mis-configuration causes a boot
|
||||
failure, RomWBW supports a limited recovery capability. This is
|
||||
achieved by allowing the user to reboot their machine, loading
|
||||
a minimal driver set. Implementation of this feature requires a
|
||||
@@ -638,7 +708,7 @@ CRT character device, the data is actually passed to a built-in terminal
|
||||
emulator which, in turn, utilizes a set of VDA (Video Display Adapter)
|
||||
functions (such as cursor positioning, scrolling, etc.).
|
||||
|
||||
Figure 7.1 depicts the relationship between these components
|
||||
Figure 9.1 depicts the relationship between these components
|
||||
of HBIOS video processing:
|
||||
|
||||
{ width=100% }
|
||||
@@ -689,7 +759,7 @@ must be careful not to modify the operating environment in any way that
|
||||
the operating system does not expect.
|
||||
|
||||
In general, the desired function is placed in the B register. Register C
|
||||
is frequently used to specify a subfunction or a target device unit
|
||||
is frequently used to specify a sub-function or a target device unit
|
||||
number. Additional registers are used as defined by the specific
|
||||
function. Register A should be used to return function result
|
||||
information. See below for result code definitions.
|
||||
@@ -712,7 +782,7 @@ lower 32K of CPU address space. For optimal performance, such buffers
|
||||
should be placed in the upper 32K of CPU address space.
|
||||
|
||||
HBIOS also implements a small number of core functions in the HBIOS
|
||||
proxy area at the top of RAM. These exist primarily to faciliate the
|
||||
proxy area at the top of RAM. These exist primarily to facilitate the
|
||||
operation of normal HBIOS function calls. However, they are available
|
||||
to be used by OSes and applications. These functions can only be
|
||||
invoked by calling into a jump table in upper RAM.
|
||||
@@ -766,10 +836,11 @@ below enumerates these values.
|
||||
| CIODEV_DUART | 0x09 | SCC2681 Family Dual UART | duart.asm |
|
||||
| CIODEV_Z2U | 0x0A | Zilog Z280 Built-in Serial Ports | z2u.asm |
|
||||
| CIODEV_LPT | 0x0B | Parallel I/O Controller | lpt.asm |
|
||||
| CIODEV_ESPCON | 0x0B | ESP32 VGA Console | esp.asm |
|
||||
| CIODEV_ESPSER | 0x0B | ESP32 Serial Port | esp.asm |
|
||||
| CIODEV_SCON | 0x0B | S100 Console | scon.asm |
|
||||
| CIODEV_EZ80UART | 0x11 | eZ80 Built-in UART0 Interface | ez80uart.asm |
|
||||
| CIODEV_ESPCON | 0x0C | ESP32 VGA Console | esp.asm |
|
||||
| CIODEV_ESPSER | 0x0D | ESP32 Serial Port | esp.asm |
|
||||
| CIODEV_SCON | 0x0E | S100 Console | scon.asm |
|
||||
| CIODEV_SSER | 0x0F | Simple Serial Console | sser.asm |
|
||||
| CIODEV_EZ80UART | 0x10 | eZ80 Built-in UART0 Interface | ez80uart.asm |
|
||||
|
||||
Character devices can usually be configured with line characteristics
|
||||
such as speed, framing, etc. A word value (16 bit) is used to describe
|
||||
@@ -906,7 +977,9 @@ Returns the current Line Characteristics (DE) of the specified Character
|
||||
Returns device information for the specified Character Unit (C). The
|
||||
status (A) is a standard HBIOS result code.
|
||||
|
||||
Device Attribute (C) values are: 0 = RS/232, 1 = Terminal, 2 = Parallel.
|
||||
The two high bits of Device Attribute (C) are: 00 = RS/232, 01 = Terminal,
|
||||
10 = Parallel. The remaining bits should be ignored and are used
|
||||
internally.
|
||||
|
||||
Device Type (D) indicates the specific hardware driver that handles the
|
||||
specified Character Unit. Values are listed at the start of this
|
||||
@@ -932,7 +1005,7 @@ during the boot process that identifies all disk devices uniquely.
|
||||
|
||||
All character units are assigned a Device Type ID which indicates
|
||||
the specific hardware device driver that handles the unit. The table
|
||||
below enumerates there values.
|
||||
below enumerates their values.
|
||||
|
||||
| **Device Type** | **ID** | **Description** | **Driver** |
|
||||
|-----------------|-------:|------------------------------------------|------------|
|
||||
@@ -1074,6 +1147,13 @@ contain all sectors requested. Disk data transfers will be faster if
|
||||
the buffer resides in the top 32K of memory because it avoids a
|
||||
double buffer copy.
|
||||
|
||||
Also for buffers in the top 32K of memory the Bank ID is not
|
||||
strictly required as this memory is alway mapped to the common bank.
|
||||
For buffers in the bottom 32KB ram, the Bank ID is used to identify
|
||||
the bank to use for the buffer. If you do not wih to use banked memory
|
||||
you will need to provide the current Bank ID, which can be obtained
|
||||
using [Function 0xF3 -- System Get Bank (SYSGETBNK)]
|
||||
|
||||
### Function 0x14 -- Disk Write (DIOWRITE)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
@@ -1618,7 +1698,7 @@ keyboard functions should return a failure status.
|
||||
|
||||
All video units are assigned a Device Type ID which indicates
|
||||
the specific hardware device driver that handles the unit. The table
|
||||
below enumerates there values.
|
||||
below enumerates their values.
|
||||
|
||||
| **Device Type** | **ID** | **Description** | **Driver** |
|
||||
|-----------------|-------:|------------------------------------------|------------|
|
||||
@@ -1981,15 +2061,19 @@ standard HBIOS result code.
|
||||
| | E: Keycode |
|
||||
|
||||
Read the next key data from keyboard of the specified Video Unit (C). If
|
||||
a keyboard buffer is used, return the next key code in the buffer. If
|
||||
a keyboard buffer is used, return the next Keycode in the buffer. If
|
||||
no key data is available, this function will wait indefinitely for a
|
||||
keypress. The Status (A) is a standard HBIOS result code.
|
||||
|
||||
The Scancode (C) value is the raw scancode from the keyboard for the
|
||||
keypress. Scancodes are from the PS/2 scancode set 2 standard.
|
||||
keypress. Scancodes are optional and may not be implemented by the
|
||||
driver. The Scancode values are driver dependent. In the case of a
|
||||
PS/2 keyboard driver, they should be the PS/2 scancode. Other keyboard
|
||||
drivers may return values appropriate for their specific keyboard. If
|
||||
the driver does not implement this, it should return 0 in C.
|
||||
|
||||
The Keystate (D) is a bitmap representing the value of all modifier keys
|
||||
and shift states as they existed at the time of the keystroke. The
|
||||
and shift states as they existed at the time of the keystroke. The
|
||||
bitmap is defined as:
|
||||
|
||||
| **Bit** | **Keystate Indication** |
|
||||
@@ -2003,6 +2087,9 @@ bitmap is defined as:
|
||||
| 1 | Control key was held down |
|
||||
| 0 | Shift key was held down |
|
||||
|
||||
Not all of these bits may be relevant for all keyboards. Any bit that
|
||||
is not relevant should be returned as 0.
|
||||
|
||||
The Keycode (E) is generally returned as appropriate ASCII values, if
|
||||
possible. Special keys, like function keys and arrows, are returned as
|
||||
reserved codes as described at the start of this section.
|
||||
@@ -2331,7 +2418,7 @@ start of the Slice (E). The Status (A) is a standard HBIOS result code.
|
||||
This function extends upon [Function 0x18 -- Disk Media (DIOMEDIA)] for hard
|
||||
disk media by scanning for a partition to determine if the disk uses HD512
|
||||
or HD1K, correctly reporting MID_HD or MID_HDNEW respectively.
|
||||
See the folowing for some background [Mapping to Media ID]
|
||||
See the following for some background [Mapping to Media ID]
|
||||
|
||||
It will also return the sector number of the first sector in the
|
||||
slice if the slice number is valid. If the slice number is invalid
|
||||
@@ -2410,26 +2497,34 @@ version 3.1.0, build 2.
|
||||
|
||||
The hardware Platform (L) is identified as follows:
|
||||
|
||||
| **Name** | **Id** | **Platform ** |
|
||||
| **Name** | **Id** | **Platform ** |
|
||||
|---------------|-------:|-----------------------------------------|
|
||||
| PLT_SBC |1 | ECB Z80 SBC |
|
||||
| PLT_ZETA |2 | ZETA Z80 SBC |
|
||||
| PLT_ZETA2 |3 | ZETA Z80 V2 SBC |
|
||||
| PLT_N8 |4 | N8 (HOME COMPUTER) Z180 SBC |
|
||||
| PLT_MK4 |5 | MARK IV |
|
||||
| PLT_UNA |6 | UNA BIOS |
|
||||
| PLT_RCZ80 |7 | RCBUS W/ Z80 |
|
||||
| PLT_RCZ180 |8 | RCBUS W/ Z180 |
|
||||
| PLT_EZZ80 |9 | EASY/TINY Z80 |
|
||||
| PLT_SCZ180 |10 | RCBUS SC126, SC130, SC131, SC140 |
|
||||
| PLT_DYNO |11 | DYNO MICRO-ATX MOTHERBOARD |
|
||||
| PLT_RCZ280 |12 | RCBUS W/ Z280 |
|
||||
| PLT_MBC |13 | NHYODYNE MULTI-BOARD COMPUTER |
|
||||
| PLT_RPH |14 | RHYOPHYRE GRAPHICS SBC |
|
||||
| PLT_Z80RETRO |15 | Z80 RETRO COMPUTER |
|
||||
| PLT_S100 |16 | S100 COMPUTERS Z180 |
|
||||
| PLT_DUO |17 | DUODYNE Z80 SYSTEM |
|
||||
| PLT_RCEZ80 |24 | RCBUS W/ eZ80 |
|
||||
| PLT_SBC | 1 | ECB Z80 SBC |
|
||||
| PLT_ZETA | 2 | ZETA Z80 SBC |
|
||||
| PLT_ZETA2 | 3 | ZETA Z80 V2 SBC |
|
||||
| PLT_N8 | 4 | N8 (HOME COMPUTER) Z180 SBC |
|
||||
| PLT_MK4 | 5 | MARK IV |
|
||||
| PLT_UNA | 6 | UNA BIOS |
|
||||
| PLT_RCZ80 | 7 | RCBUS W/ Z80 |
|
||||
| PLT_RCZ180 | 8 | RCBUS W/ Z180 |
|
||||
| PLT_EZZ80 | 9 | EASY/TINY Z80 |
|
||||
| PLT_SCZ180 | 10 | SMALL COMPUTER CENTRAL Z180 |
|
||||
| PLT_DYNO | 11 | DYNO MICRO-ATX MOTHERBOARD |
|
||||
| PLT_RCZ280 | 12 | RCBUS W/ Z280 |
|
||||
| PLT_MBC | 13 | NHYODYNE MULTI-BOARD COMPUTER |
|
||||
| PLT_RPH | 14 | RHYOPHYRE GRAPHICS SBC |
|
||||
| PLT_Z80RETRO | 15 | Z80 RETRO COMPUTER |
|
||||
| PLT_S100 | 16 | S100 COMPUTERS Z180 |
|
||||
| PLT_DUO | 17 | DUODYNE Z80 SYSTEM |
|
||||
| PLT_HEATH | 18 | HEATHKIT H8 Z80 SYSTEM |
|
||||
| PLT_EPITX | 19 | Z180 MINI-ITX |
|
||||
| PLT_MON | 20 | MONSPUTER (DEPRECATED) |
|
||||
| PLT_GMZ180 | 21 | GENESIS Z180 SYSTEM |
|
||||
| PLT_NABU | 22 | NABU PC W/ ROMWBW OPTION BOARD |
|
||||
| PLT_FZ80 | 23 | S100 FPGA Z80 |
|
||||
| PLT_RCEZ80 | 24 | RCBUS W/ eZ80 |
|
||||
|
||||
For more information on these platforms see $doc_hardware$
|
||||
|
||||
### Function 0xF2 -- System Set Bank (SYSSETBNK)
|
||||
|
||||
@@ -2721,7 +2816,7 @@ Switches may be returned as a 16 bit (HL) or 8 bit (L) value. It is up to the ca
|
||||
to process the returned value correctly. Note for Switch 0xFF (status) the returned value
|
||||
is primarily in the Status (A) register.
|
||||
|
||||
Errors are signalled in the return by setting the NZ flag. When set the
|
||||
Errors are signaled in the return by setting the NZ flag. When set the
|
||||
(A) register may contain an error code, but this code does not conform to RomWBW standard
|
||||
|
||||
Success is indicated by setting the Z flag
|
||||
@@ -3039,7 +3134,7 @@ Status (A) is a standard HBIOS result code.
|
||||
This function allows the caller to query information about the interrupt
|
||||
configuration of the running system and allows adding or hooking
|
||||
interrupt handlers dynamically. Register C is used to specify a
|
||||
subfunction. Additional input and output registers may be used as
|
||||
sub-function. Additional input and output registers may be used as
|
||||
defined by the sub-function. The Status (A) is a standard
|
||||
HBIOS result code.
|
||||
|
||||
@@ -3099,13 +3194,11 @@ with the handler prior to uninstalling it.
|
||||
| C: 0x00 | D: Interrupt Mode |
|
||||
| | E: IVT Size |
|
||||
|
||||
Return current Interrupt Mode (D) of the system. Also return the
|
||||
number of Interrupt Vector Table (IVT) entries in IVT Size (E).
|
||||
interrupt mode in D and size of interrupt vector table in E. For
|
||||
IM1, the size of the table is the number of vectors chained together.
|
||||
For IM2, the size of the table is the number of slots in the vector
|
||||
table. The Status (A) is a standard
|
||||
HBIOS result code.
|
||||
Return current Interrupt Mode (D) of the system. Also return the number
|
||||
of Interrupt Vector Table (IVT) entries in IVT (E). For IM1, the size
|
||||
of the table is the number of vectors chained together. For IM2, the
|
||||
size of the table is the number of slots in the vector table. The
|
||||
Status (A) is a standard HBIOS result code.
|
||||
|
||||
#### SYSINT Subfunction 0x10 -- Get Interrupt (INTGET)
|
||||
|
||||
@@ -3468,5 +3561,3 @@ The following section outlines the read only data referenced by the
|
||||
| DCNTL* | 14 | 1 | Z180 DMA/WAIT CONTROL |
|
||||
|
||||
* ONLY PRESENT FOR Z180 BUILDS
|
||||
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
BIN
Source/Fonts/fontcga.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 9.1 KiB |
BIN
Source/Fonts/fontvgarc.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
@@ -6,7 +6,7 @@ BF_SYSRESET EQU 0F0h ; RESTART SYSTEM
|
||||
BF_SYSRES_WARM EQU 01h ; WARM START (RESTART BOOT LOADER)
|
||||
|
||||
|
||||
; THE FOLLOWING NEED TO BE SYNCED WITH STD.ASM SO ROMLDR
|
||||
; THE FOLLOWING NEED TO BE SYNCED WITH INCLUDE.ASM SO ROMLDR
|
||||
; KNOWS WHERE THIS EXECUTES AT
|
||||
|
||||
FTH_SIZ EQU 1700h
|
||||
@@ -31,7 +31,7 @@ HB_LOC EQU 0FD80h
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
; Commercial inquiries should be directed to the author at
|
||||
; Commercial inquiries should be directed to the author at
|
||||
; 115 First St., #105, Collingwood, Ontario L9Y 4W3 Canada
|
||||
; or via email to bj@camelforth.com
|
||||
;
|
||||
@@ -68,18 +68,18 @@ HB_LOC EQU 0FD80h
|
||||
; keywords are being passed in a
|
||||
; macro.
|
||||
; b1ackmai1er difficultylevelhigh@gmail.com
|
||||
; 03-Dec 20 v1.02 Add James Bowmans double
|
||||
; 03-Dec 20 v1.02 Add James Bowmans double
|
||||
; precision words as per RC2014
|
||||
; version. Increase terminal
|
||||
; version. Increase terminal
|
||||
; input buffer (TIB) size.
|
||||
; b1ackmai1er difficultylevelhigh@gmail.com
|
||||
; b1ackmai1er difficultylevelhigh@gmail.com
|
||||
; 22-Jan 21 v1.02 Adjust for revised HBIOS
|
||||
; proxy size.
|
||||
; b1ackmai1er difficultylevelhigh@gmail.com
|
||||
; 07-Sep 21 v1.02 Separate additions.
|
||||
; 07-Sep 21 v1.02 Separate additions.
|
||||
; 05-Oct 21 v1.02 Add Douglas Beattie Jr.'s
|
||||
; API call and port read and
|
||||
; write words.
|
||||
; write words.
|
||||
; ===============================================
|
||||
; Macros to define Forth headers
|
||||
; HEAD label,length,name,action
|
||||
@@ -296,7 +296,7 @@ dodoes: ; -- a-addr
|
||||
next
|
||||
|
||||
; CP/M TERMINAL I/O =============================
|
||||
|
||||
|
||||
;C EMIT c -- output character to console
|
||||
head EMIT,4,EMIT,docode
|
||||
PUSH DE
|
||||
@@ -309,7 +309,7 @@ dodoes: ; -- a-addr
|
||||
POP DE
|
||||
pop BC ; PUT TOP OF STACK IN BC
|
||||
next
|
||||
;
|
||||
;
|
||||
;Z SAVEKEY -- addr temporary storage for KEY?
|
||||
head savekey,7,SAVEKEY,dovar
|
||||
SVKY: DW 0
|
||||
@@ -318,7 +318,7 @@ SVKY: DW 0
|
||||
head querykey,4,KEY?,docode
|
||||
PUSH BC ; SAVE TOP OF STACK
|
||||
PUSH DE
|
||||
PUSH HL ; GET CONSOLE INPUT STATUS VIA HBIOS
|
||||
PUSH HL ; GET CONSOLE INPUT STATUS VIA HBIOS
|
||||
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C
|
||||
LD B,CIOIST ; HBIOS FUNC: INPUT STATUS
|
||||
RST 08 ; HBIOS RETURNS STATUS IN A
|
||||
@@ -334,7 +334,7 @@ key3: LD C,0
|
||||
LD (HL),B
|
||||
INC HL
|
||||
LD (HL),C
|
||||
POP HL
|
||||
POP HL
|
||||
POP DE
|
||||
next
|
||||
|
||||
@@ -1090,6 +1090,6 @@ ELSE
|
||||
nop
|
||||
ENDIF
|
||||
.DEPHASE
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ Bank ID Usage
|
||||
0x82 User TPA
|
||||
0x83 Common
|
||||
|
||||
ROMless Standard Bank Layout (512K)
|
||||
ROMless Standard Bank Layout (512K): ZRC, ZRC512, EZ512, Z1RCC, ZZRCC, FZ80
|
||||
|
||||
Bank ID Usage
|
||||
------- ------
|
||||
|
||||
@@ -227,9 +227,10 @@ call Build ZETA2 std || exit /b
|
||||
call Build N8 std || exit /b
|
||||
call Build MK4 std || exit /b
|
||||
call Build RCZ80 std || exit /b
|
||||
call Build RCEZ80 std || exit /b
|
||||
call Build RCZ80 kio_std || exit /b
|
||||
call Build RCZ80 easy_std || exit /b
|
||||
call Build RCZ80 tiny_std || exit /b
|
||||
call Build EZZ80 easy_std || exit /b
|
||||
call Build EZZ80 tiny_std || exit /b
|
||||
call Build RCZ80 skz_std || exit /b
|
||||
call Build RCZ80 zrc_std || exit /b
|
||||
call Build RCZ80 zrc_ram_std || exit /b
|
||||
|
||||
@@ -27,7 +27,7 @@ $ErrorAction = 'Stop'
|
||||
# UNA BIOS is simply imbedded, it is not built here.
|
||||
#
|
||||
|
||||
$PlatformListZ80 = "SBC", "MBC", "ZETA", "ZETA2", "RCZ80", "Z80RETRO", "DUO", "UNA", "HEATH", "MON", "NABU", "FZ80", "RCEZ80"
|
||||
$PlatformListZ80 = "SBC", "MBC", "ZETA", "ZETA2", "RCZ80", "EZZ80", "Z80RETRO", "DUO", "UNA", "HEATH", "MON", "NABU", "FZ80", "RCEZ80"
|
||||
$PlatformListZ180 = "N8", "MK4", "RCZ180", "SCZ180", "DYNO", "RPH", "S100", "EPITX", "GMZ180"
|
||||
$PlatformListZ280 = "RCZ280"
|
||||
|
||||
|
||||
@@ -18,10 +18,11 @@ if [ "${ROM_PLATFORM}" == "dist" ] ; then
|
||||
ROM_PLATFORM="ZETA2"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="N8"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="MK4"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="RCEZ80"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="RCZ80"; ROM_CONFIG="std"; bash Build.sh
|
||||
ROM_PLATFORM="RCZ80"; ROM_CONFIG="kio_std"; bash Build.sh
|
||||
ROM_PLATFORM="RCZ80"; ROM_CONFIG="easy_std"; bash Build.sh
|
||||
ROM_PLATFORM="RCZ80"; ROM_CONFIG="tiny_std"; bash Build.sh
|
||||
ROM_PLATFORM="EZZ80"; ROM_CONFIG="easy_std"; bash Build.sh
|
||||
ROM_PLATFORM="EZZ80"; ROM_CONFIG="tiny_std"; bash Build.sh
|
||||
ROM_PLATFORM="RCZ80"; ROM_CONFIG="skz_std"; bash Build.sh
|
||||
ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc_std"; bash Build.sh
|
||||
ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc_ram_std"; bash Build.sh
|
||||
|
||||
@@ -42,11 +42,16 @@
|
||||
; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT
|
||||
; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU".
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_DUO.asm"
|
||||
;
|
||||
BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
|
||||
BOOT_PRETTY .SET FALSE ; BOOT WITH PRETTY PLATFORM NAME
|
||||
BT_REC_TYPE .SET BT_REC_NONE ; BOOT RECOVERY METHOD TO USE: BT_REC_[NONE|FORCE|SBCB0|SBC1B|SBCRI|DUORI]
|
||||
AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT
|
||||
;
|
||||
BATCOND .SET TRUE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
|
||||
@@ -57,11 +62,28 @@ ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
PCFENABLE .SET TRUE ; ENABLE PCF8584 I2C CONTROLLER
|
||||
;
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
;
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
;
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958
|
||||
;
|
||||
MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
;
|
||||
CHENABLE .SET TRUE ; CH: ENABLE CH375/376 USB SUPPORT
|
||||
ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
|
||||
AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER
|
||||
;
|
||||
DMAENABLE .SET TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
|
||||
@@ -42,11 +42,13 @@
|
||||
; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT
|
||||
; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU".
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_DYNO.asm"
|
||||
;
|
||||
AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT
|
||||
;
|
||||
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
|
||||
;
|
||||
Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
|
||||
@@ -44,8 +44,8 @@
|
||||
;
|
||||
#DEFINE PLATFORM_NAME "Z180 MiniITX"
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_EPITX.asm"
|
||||
;
|
||||
|
||||
@@ -43,13 +43,14 @@
|
||||
; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU".
|
||||
;
|
||||
#DEFINE PLATFORM_NAME "Easy-Z80", " [", CONFIG, "]"
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_RCZ80.asm"
|
||||
#INCLUDE "cfg_EZZ80.asm"
|
||||
;
|
||||
PLATFORM .SET PLT_EZZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80]
|
||||
BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
|
||||
BOOT_PRETTY .SET FALSE ; BOOT WITH PRETTY PLATFORM NAME
|
||||
AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT
|
||||
;
|
||||
CPUOSC .SET 10000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
|
||||
@@ -59,18 +60,18 @@ CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER
|
||||
CTCMODE .SET CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256]
|
||||
CTCOSC .SET 921600 ; CTC CLOCK FREQUENCY
|
||||
WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
WDOGIO .SET $6F ; WATCHDOG REGISTER ADR
|
||||
;
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
LCDENABLE .SET TRUE ; ENABLE LCD DISPLAY
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
;
|
||||
DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM)
|
||||
;
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
|
||||
SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
@@ -87,18 +88,28 @@ TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
|
||||
EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM)
|
||||
;
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC]
|
||||
FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
;
|
||||
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
;
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
;
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDMODE .SET SDMODE_PIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM|EZ512|K80W]
|
||||
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY
|
||||
;
|
||||
CHENABLE .SET TRUE ; CH: ENABLE CH375/376 USB SUPPORT
|
||||
;
|
||||
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
PPAENABLE .SET FALSE ; PPA: ENABLE IOMEGA ZIP DRIVE (PPA) DISK DRIVER (PPA.ASM)
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IOMEGA ZIP PLUS DRIVE (IMM) DISK DRIVER (IMM.ASM)
|
||||
SYQENABLE .SET FALSE ; SYQ: ENABLE SYQUEST SPARQ DISK DRIVER (SYQ.ASM)
|
||||
;
|
||||
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
|
||||
;
|
||||
@@ -43,13 +43,14 @@
|
||||
; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU".
|
||||
;
|
||||
#DEFINE PLATFORM_NAME "Tiny-Z80", " [", CONFIG, "]"
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_RCZ80.asm"
|
||||
#INCLUDE "cfg_EZZ80.asm"
|
||||
;
|
||||
PLATFORM .SET PLT_EZZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80]
|
||||
BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
|
||||
BOOT_PRETTY .SET FALSE ; BOOT WITH PRETTY PLATFORM NAME
|
||||
AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT
|
||||
;
|
||||
CPUOSC .SET 16000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
|
||||
@@ -62,18 +63,20 @@ CTCOSC .SET 921600 ; CTC CLOCK FREQUENCY
|
||||
EIPCENABLE .SET TRUE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
WDOGIO .SET $6F ; WATCHDOG REGISTER ADR
|
||||
;
|
||||
FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS
|
||||
FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES
|
||||
LCDENABLE .SET TRUE ; ENABLE LCD DISPLAY
|
||||
LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED)
|
||||
LEDPORT .SET $6E ; STATUS LED PORT ADDRESS
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
;
|
||||
DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM)
|
||||
;
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
|
||||
SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
@@ -93,18 +96,30 @@ EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM)
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC]
|
||||
FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
;
|
||||
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
IDE0BASE .SET $90 ; IDE 0: IO BASE ADDRESS
|
||||
;
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
;
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDMODE .SET SDMODE_PIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM|EZ512|K80W]
|
||||
SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY
|
||||
;
|
||||
CHENABLE .SET TRUE ; CH: ENABLE CH375/376 USB SUPPORT
|
||||
;
|
||||
PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
|
||||
;
|
||||
LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
PPAENABLE .SET FALSE ; PPA: ENABLE IOMEGA ZIP DRIVE (PPA) DISK DRIVER (PPA.ASM)
|
||||
IMMENABLE .SET FALSE ; IMM: ENABLE IOMEGA ZIP PLUS DRIVE (IMM) DISK DRIVER (IMM.ASM)
|
||||
SYQENABLE .SET FALSE ; SYQ: ENABLE SYQUEST SPARQ DISK DRIVER (SYQ.ASM)
|
||||
;
|
||||
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER
|
||||
AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU]
|
||||
AY_FORCE .SET FALSE ; AY: BYPASS AUTO-DETECT, FORCED PRESENT
|
||||
@@ -42,10 +42,15 @@
|
||||
; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT
|
||||
; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU".
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_FZ80.asm"
|
||||
;
|
||||
CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
;
|
||||
LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
|
||||
@@ -42,13 +42,13 @@
|
||||
; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT
|
||||
; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU".
|
||||
;
|
||||
#DEFINE PLATFORM_NAME "GM STD BUS Z180", " [", CONFIG, "]"
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_GMZ180.asm"
|
||||
;
|
||||
AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT
|
||||
;
|
||||
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
|
||||
;
|
||||
Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
@@ -60,7 +60,7 @@ FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS
|
||||
LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED)
|
||||
LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU]
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
|
||||
@@ -42,7 +42,32 @@
|
||||
; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT
|
||||
; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU".
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_HEATH.asm"
|
||||
;
|
||||
BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
|
||||
BOOT_PRETTY .SET FALSE ; BOOT WITH PRETTY PLATFORM NAME
|
||||
AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT
|
||||
;
|
||||
CPUOSC .SET 16384000 ; CPU OSC FREQ IN MHZ
|
||||
;
|
||||
INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
;
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
;
|
||||
TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU]
|
||||
TMS80COLS .SET TRUE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958
|
||||
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC]
|
||||
FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
;
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
;
|
||||
AY38910ENABLE .SET TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER
|
||||
AYMODE .SET AYMODE_MSX ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU]
|
||||
|
||||
@@ -42,11 +42,15 @@
|
||||
; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT
|
||||
; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU".
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_MBC.asm"
|
||||
;
|
||||
BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
|
||||
BOOT_PRETTY .SET FALSE ; BOOT WITH PRETTY PLATFORM NAME
|
||||
AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT
|
||||
;
|
||||
BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE
|
||||
CPUSPDDEF .SET SPD_LOW ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW
|
||||
CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ
|
||||
@@ -60,17 +64,22 @@ ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218)
|
||||
PKDENABLE .SET TRUE ; ENABLES DSKY NG PKD DRIVER (8259)
|
||||
;
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
|
||||
;
|
||||
CVDUMON .SET CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA]
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
;
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
;
|
||||
LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
|
||||
;
|
||||
ESPENABLE .SET TRUE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
|
||||
;
|
||||
DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
|
||||
|
||||
@@ -42,11 +42,15 @@
|
||||
; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT
|
||||
; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU".
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_MK4.asm"
|
||||
;
|
||||
BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
|
||||
BOOT_PRETTY .SET FALSE ; BOOT WITH PRETTY PLATFORM NAME
|
||||
AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT
|
||||
;
|
||||
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
|
||||
;
|
||||
@@ -54,18 +58,26 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM)
|
||||
;
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM)
|
||||
SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
;
|
||||
VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
|
||||
CVDUENABLE .SET TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958
|
||||
VGAENABLE .SET TRUE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .SET FDMODE_DIDE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC]
|
||||
FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2)
|
||||
FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8]
|
||||
;
|
||||
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
@@ -73,3 +85,11 @@ SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDMODE .SET SDMODE_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM|EZ512|K80W]
|
||||
;
|
||||
PRPENABLE .SET TRUE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM)
|
||||
;
|
||||
PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
;
|
||||
SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
|
||||
;
|
||||
AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER
|
||||
;
|
||||
YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT
|
||||
; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU".
|
||||
;
|
||||
#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD FOR EMPTY CMD LINE
|
||||
#DEFINE AUTO_CMD "" ; AUTO CMD WHEN BOOT_TIMEOUT IS ENABLED
|
||||
#DEFINE DEFSERCFG SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL CONFIGURATION
|
||||
;
|
||||
#INCLUDE "cfg_MON.asm"
|
||||
;
|
||||
|
||||