forked from MirrorRepos/RomWBW
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
12 KiB
229 lines
12 KiB
BPBIOS for RomWBW / HBIOS
|
|
-------------------------
|
|
|
|
The build process included in this directory constructs multiple BPBIOS OS images that
|
|
can be loaded dynamically on a running RomWBW CP/M-like system. Normally, you would
|
|
boot CP/M and then load the desired variant. On a running system, you would enter
|
|
something like "LDSYS BP34T". This document describes the specifics of the build
|
|
process and the image variations which are identified by naming convention.
|
|
|
|
Each image is composed of three basic components: Command Processor (CCP), Disk
|
|
Operating System (DOS), and Basic I/O System (BIOS). The CCP and DOS components
|
|
are pre-built, relocatable binaries. The BIOS (BPBIOS) is assembled into a relocatable
|
|
binary by the build, then the build links together all three components to form the
|
|
final loadable image (.IMG) file. The linking process is performed by the custom BPBIOS
|
|
linker (BPBUILD.COM). In addition to linking the 3 components, BPBUILD also sets
|
|
adjusts the ZCPR environment configuration.
|
|
|
|
BPBUILD is designed to be run interactively. However, it can be started with an
|
|
existing OS image to edit an existing image file. In order to achieve an automated
|
|
build process with no interaction, this directory contains several template image (.DAT)
|
|
files that have environment configurations defined below. The build process passes the desired
|
|
tempate file to BPBUILD on the command line and uses input redirection to automate the
|
|
running of BPBUILD.
|
|
|
|
The CCP can be ZCPR 3.3 (ZCPR33?.REL), ZCPR 3.4 (Z34.REL), or ZCPR 4.1 (Z41.ZRL). ZCPR 3.3
|
|
uses static references to the ZCPR segments, so a custom version of it must be assembled.
|
|
The ZCPR33 subdirectory provides a build process for doing this. It produces a specific
|
|
version for each of the memory segment configurations (ZCPR33T.REL & ZCPR33N.REL).
|
|
|
|
The DOS can be ZSDOS 1.1 (ZSDOS.ZRL) or ZSDOS 2.03 (ZS203.ZRL). These are both pre-built
|
|
relocatable binaries. Note that only certain version combinations of ZSDOS and ZCPR are
|
|
possible as indicated below. Additionally, ZSDOS 2.X requires a banked BIOS.
|
|
|
|
ZCPR 3.X == ZSDOS 1.X
|
|
ZCPR 4.X == ZSDOS 2.X
|
|
|
|
BPBIOS must be assembled for the target configuration. BPBIOS includes a DEF-WW-???????.LIB
|
|
file during assembly which sets various equates to contol the features and behavior of
|
|
BPBIOS. The most critical ones are:
|
|
|
|
BANKED: If YES, BPBIOS implements memory banking features
|
|
ZSDOS2: If YES, BPBIOS is built to utilize ZSDOS 2.X specifics features
|
|
INTPXY: If YES, BPBIOS implements HBIOS proxy code internally w/ stub at FFE0H-FFFFH
|
|
|
|
The table below illustrates the target build configurations along with the
|
|
.DAT and .LIB files which are utilized for the specific configuration. The "?"
|
|
is replaced with a letter that represents one of the ZCPR memory segment configurations
|
|
described later in this document.
|
|
|
|
BP33?.DAT DEF-WW-Z33?.LIB Non-Banked BPBIOS w/ ZCPR 3.3 & ZSDOS 1.1
|
|
BP33?BNK.DAT DEF-WW-Z33?BNK.LIB Banked BPBIOS w/ ZCPR 3.3 & ZSDOS 1.1
|
|
BP34?.DAT DEF-WW-Z34?.LIB Non-Banked BPBIOS w/ ZCPR 3.4 & ZSDOS 1.1
|
|
BP34?BNK.DAT DEF-WW-Z34?BNK.LIB Banked BPBIOS w/ ZCPR 3.4 & ZSDOS 1.1
|
|
BP41?BNK.DAT DEF-WW-Z41?BNK.LIB Banked BPBIOS w/ ZCPR 4.1 & ZSDOS 2.03
|
|
|
|
The table below illustrates the BPBIOS equates used and the specific CCP/DOS/BIOS
|
|
components that are used to generate each configuration. As above, the "?" is
|
|
replaced with a letter that represents one of the ZCPR memory segment configurations
|
|
described later in this document.
|
|
|
|
BP33? BP33?BNK BP34? BP34?BNK BP41?BNK
|
|
-------------- -------------- -------------- -------------- -------------- --------------
|
|
BANKED NO YES NO YES YES
|
|
ZSDOS2 NO NO NO NO YES
|
|
-------------- -------------- -------------- -------------- -------------- --------------
|
|
CCP ZCPR33?.REL ZCPR33?.REL Z34.REL Z34.REL Z41.ZRL
|
|
DOS ZSDOS.ZRL ZSDOS.ZRL ZSDOS.ZRL ZSDOS.ZRL ZS203.ZRL
|
|
BIOS BP33.REL BP33BNK.REL BP34.REL BP34BNK.REL BP41.REL
|
|
-------------- -------------- -------------- -------------- -------------- --------------
|
|
|
|
In addition to the configuration options above, ZCPR also utilizes a
|
|
defined set of memory segments in upper memory. The location and size of these
|
|
segments have many ramifications and general ZCPR / BPBIOS documents
|
|
should be consulted to understand these. The build process used here
|
|
produces several different configurations which can be loaded at runtime.
|
|
The original distributed memory segment configuration occupies the top
|
|
of memory which, unfortunately, conflicts with the RomWBW HBIOS need to
|
|
occupt this space.
|
|
|
|
Although RomWBW HBIOS is implemented in it's own dedicated memory bank, it
|
|
requires a small proxy at the top of memory which acts as a mechansim to
|
|
route calls to HBIOS. There are two ways to implement this upper memory
|
|
proxy. The full proxy occupies FE00H-FFFFH and implements all of the
|
|
HBIOS routing code. Alternatively, a mini proxy can be utilized to
|
|
minimize the dedicated proxy space in upper memory. The mini proxy
|
|
requires just 20H bytes at the top of memory (FFE0H-FFFFH), but requires
|
|
that the bulk of the proxy code be implemented internally in BPBIOS.
|
|
|
|
Taking the above into account, the build process implements a couple of
|
|
memory segment configurations that are compatible with RomWBW HBIOS.
|
|
Essentially, these configurations rearrange the ZCPR memory segments
|
|
to free up the area required by the HBIOS full or mini proxy. Note
|
|
that this is a bit complicated because there are some constraints on
|
|
the locations of certain segments.
|
|
|
|
First, the RCP, FCP, and IOP segments contain executable code which is
|
|
pre-built and intended to run at specific locations. Specifically, the
|
|
SYS.RCP, SYS.FCP, and SYS.IOP files provided with the BPBIOS distribution
|
|
must be loaded at their original intended location. In theory, new
|
|
versions of these files could be created to load at different locations,
|
|
but that is not the approach taken here. Instead, the memory segment
|
|
configurations are designed to keep these 3 components at the same
|
|
location as the original distribution.
|
|
|
|
BPBIOS is assembled as relocatable code. Subsequently, the BPBUILD tool
|
|
is used to link BPBIOS with the CCP and DOS relocatable code to produce
|
|
the absolute image (.IMG file). Note that BPBUILD does more than just
|
|
linking. As part of it's work, BPBUILD adjusts the built-in environment
|
|
segment to customize the final image for the desired location and size
|
|
of Z-System segments.
|
|
|
|
The following table summarizes the original memory segment configuration and the
|
|
two new configurations utilized by this build process. As indicated above, the
|
|
original configuration is incompatible with RomWBW HBIOS because it occupies the
|
|
very top of memory. This configuration is shown below purely to document the
|
|
original distribued configuration.
|
|
|
|
SEGMENT Original T Config N Config
|
|
-------------- -------------- -------------- --------------
|
|
Environment FE00 EA00* FE00
|
|
# Recs 2 2 2
|
|
Flow Ctl Pkg FA00 FA00 FA00
|
|
# Recs 4 4 4
|
|
I/O Pkg EC00 EC00 EC00
|
|
# Recs 12 12 12
|
|
Res Cmd Pkg F200 F200 F200
|
|
# Recs 16 16 16
|
|
Cmd Line FF00 EB00* FF00
|
|
# Bytes 203 203 171*
|
|
Named Dirs FC00 FC00 FC00
|
|
# Ents 14 14 14
|
|
Ext Path FDF4 FDF4 FDF4
|
|
# Ents 5 5 5
|
|
Shell Stack FD00 FD00 FD00
|
|
# Ents 4 4 4
|
|
Ent Size 32 32 32
|
|
Msg Buffer FD80 FD80 FD80
|
|
Ext FCB FDD0 FDD0 FDD0
|
|
Ext Stack FFD0 EBD0* FFB0*
|
|
|
|
User Space E900 E700* E900
|
|
Size 300 300 300
|
|
|
|
Wheel Byte FDFF FDFF FDFF
|
|
|
|
The sections below provide a more detailed description of the memory
|
|
segment configurations.
|
|
|
|
=============================================================================
|
|
ORIGINAL DISTRIBUTION CONFIGURATION (NO HBIOS):
|
|
This is the original distribution configuration of BPBIOS which
|
|
occupies all upper RAM (to FFFFH). So, there is no room for the
|
|
HBIOS proxy and, therefore, is not compatibile with RomWBW. This
|
|
configuration is documented only for reference. It is not built
|
|
by the build process and is not compatible with RomWBW HBIOS.
|
|
-----------------------------------------------------------------------------
|
|
A - Environment - FE00H F - Named Dirs - FC00H
|
|
Size (# recs)- 2 # of Entries - 14
|
|
B - Flow Ctrl Pkg - FA00H G - External Path - FDF4H
|
|
Size (# recs)- 4 # of Entries - 5
|
|
C - I/O Package - EC00H H - Shell Stack - FD00H
|
|
Size (# recs)- 12 # of Entries - 4
|
|
D - Res Cmd Proc - F200H Entry Size - 32
|
|
Size (# recs)- 16 I - Msg Buffer - FD80H
|
|
E - Command Line - FF00H J - Ext. FCB - FDD0H
|
|
Size (bytes) - 203 K - Ext. Stack - FFD0H
|
|
=============================================================================
|
|
|
|
=============================================================================
|
|
T CONFIGURATION (HBIOS FULL PROXY @ FE00-FFFF):
|
|
This configuration uses a modified layout of the ZSystem segments so
|
|
that critical segments can be located at the same address as the
|
|
"stock" configuration. Some segments are built with an assumed
|
|
memory location and will generally fail if they are not loaded in
|
|
that location. The Flow Control Package (FCP) and Resident
|
|
Command Processor (RCP) are very sensitive to this. This configuration
|
|
places them at their original locations, so they work well.
|
|
-----------------------------------------------------------------------------
|
|
A - Environment - EA00H F - Named Dirs - FC00H
|
|
Size (# recs)- 2 # of Entries - 14
|
|
B - Flow Ctrl Pkg - FA00H G - External Path - FDF4H
|
|
Size (# recs)- 4 # of Entries - 5
|
|
C - I/O Package - EC00H H - Shell Stack - FD00H
|
|
Size (# recs)- 12 # of Entries - 4
|
|
D - Res Cmd Proc - F200H Entry Size - 32
|
|
Size (# recs)- 16 I - Msg Buffer - FD80H
|
|
E - Command Line - EB00H J - Ext. FCB - FDD0H
|
|
Size (bytes) - 203 K - Ext. Stack - EBD0H
|
|
=============================================================================
|
|
|
|
=============================================================================
|
|
N CONFIGURATION (HBIOS MINI PROXY @ FFE0-FFFF):
|
|
This configuration frees up the top 20H bytes of memory to make space for the
|
|
HBIOS mini-proxy. It does this by shrinking Cmd Line and shifting the Ext Stack
|
|
down by 32 bytes. This configuration will only work if INTPXY=YES in HBIOS.
|
|
-----------------------------------------------------------------------------
|
|
A - Environment - FE00H F - Named Dirs - FC00H
|
|
Size (# recs)- 2 # of Entries - 14
|
|
B - Flow Ctrl Pkg - FA00H G - External Path - FDF4H
|
|
Size (# recs)- 4 # of Entries - 5
|
|
C - I/O Package - EC00H H - Shell Stack - FD00H
|
|
Size (# recs)- 12 # of Entries - 4
|
|
D - Res Cmd Proc - F200H Entry Size - 32
|
|
Size (# recs)- 16 I - Msg Buffer - FD80H
|
|
E - Command Line - FF00H J - Ext. FCB - FDD0H
|
|
Size (bytes) - 171 K - Ext. Stack - FFB0H
|
|
=============================================================================
|
|
|
|
BPBIOS is designed to invoke a command at startup (autostart command). There
|
|
are 3 ZEX command files customized for this build. They are Z33.ZEX, Z34.ZEX,
|
|
and Z41.ZEX. BPBIOS is customized to launch the ZEX command file corresponding
|
|
to the version of ZCPR being linked with it.
|
|
|
|
The table below summarizes the loadable image files created by the build
|
|
process:
|
|
|
|
ZCPR ZSDOS BPBIOS STARTUP T (INTPXY=NO) N (INTPXY=YES)
|
|
------ ------ -------------- -------------- -------------- --------------
|
|
v3.3 v1.1 NON-BANKED Z33.ZEX BP33T.IMG BP33N.IMG
|
|
v3.3 v1.1 BANKED Z33.ZEX BP33TBNK.IMG BP33NBNK.IMG
|
|
v3.4 v1.1 NON-BANKED Z34.ZEX BP34T.IMG BP34N.IMG
|
|
v3.4 v1.1 BANKED Z34.ZEX BP34TBNK.IMG BP34NBNK.IMG
|
|
v4.1 v2.03 BANKED Z41.ZEX BP41TBNK.IMG BP41NBNK.IMG
|
|
|
|
WARNING: Once an N configuration image has been loaded, it is no longer
|
|
possible to load a T configuration without rebooting. This constraint
|
|
exists because the N configurations wipe out all but the top 20H bytes
|
|
of memory. The T configurations rely on the full 200H byte HBIOS
|
|
proxy.
|
|
|