This is the DOC file extracted from XB11.LBR, which I have moved to floppy
archives for lack of disk space. If you are interested in downloading the
full file (about 160K), leave a request message on the BBS and I will be
happy to make it available. Jay Sage, December 26, 1987
-----------------------------
XBD.DOC
The development of XB, a banked RCP and FCP for ZCPR3 systems is the
product of Edi Cramp and Ron Schwabel, with some minor assistance
from Steve Kapplin.
This release of XB is placed into the Public Domain for free distri-
bution so long as the use of the product is not for commercial sale
or gain, but for personal and non-profit usage. Any commercial use
of XB or derivatives of XB must be done with the consent of the above
named author(s). Failure to comply with this request may result in
legal action under the Trade Secrets Act.
The authors assume no responsibility direct or consequential for any
damage caused by XB, nor any obligation that XB work on your system
or any other system.
Development file name conventions....
filename.typ
12345678.123
|||||||| +++--------> File type - standard unless documented.
|||||||| .Z80 - source file
|||||||| .LIB - library
|||||||| .ZEX - Indirect command file
|||+++++------------> Module name.
||+-----------------> Package type, G = global.
|| B = banked.
|| S = system.
|| D = Documentation.
|| L = Library.
|| O = Overlay.
++------------------> Package ID.
Banked Command Processor (BCP) Features:-
1. Better and more accurate messages. Several of the less commonly
used commands have standard ZCPR help built in (via //).
2. Full FCP implementation is standard. IF level 15 with the exception
of file lists (do I hear volunteers?). "IF IN {string}" implemented.
3. Source is a collection of files (1 per command) instead of one huge
file so that debug and editing is less of an exercise in disk access
time.
4. Smaller resident packages, FCP is 128 bytes, RCP is 256 bytes. This
is offset (and obtained) to some extent by the requirment that the
system have some extra buffers. However, I feel that this will make
porting the BCP to new systems easier, and will enable additional
features to be implemented to expand use of additional memory.
Required buffers (and suggested sizes) are:-
SYS$$POOL - 256 bytes - for use by any program (bank-bank
copy etc).
SYS$$EXEC - 256 bytes - all memory managment code goes here.
SYS$$COMN - 80 bytes - used to transfer and store system
parameters.
The addresses for these buffers are set in SYSTEM.LIB, but space
must be provided for them. The allocations are done in Z3BASE.LIB
by designating room in the allocation of space for the RCP.
5. Memory managment is a seperate package. This should make porting
to a new system somewhat easier.
6. TYPE command is more video orientated and finally supports xon/xoff
and optional paging (still room for improvment though).
7. New IF command "EXIF" that flushes all IFs regardless of the current
IF state (XIF only runs if current state is TRUE). Using EXIF at the
end of ZEX and ALIAS files means you don't need those FI;FI;FI strings
and also offers some new posibilities (see XBSREL.ZEX). A new form
of the IF IN command is permitted. This form is IF IN <prompt>,
where <prompt> is an alternative prompt line. If no prompt is pro-
vided, then the standard form is default. Also the IF IN <prompt>
can be completely aborted by typing ^C as a response. This permits
using IF IN like SAK. ^C will completely abort the remaining
command line.
8. New RCP command SET /[no]option that tweeks various registers and
the QUIET flag in the environment.
9. RCP commands are quite terse if QUIET is ON "SET /QUIET".
10. FCP "NOISE" can be controlled via the SET /[NO]NOISE command. Now
you can figure out why your IF aliases don't work.
11. Internal help command "H" gives a full list of FCP commands, however
the FCP still won't parse the longforms correctly.
12. New LDR package to load programs (.SEG) anywhere in memory in any
page. It also responds to the QUIET flag and will give loading info
if run "NOQUIET" to help debugging.
13. PEEK and POKE display the full 24 bit address.
14. REG command display reformatted and now displays both the DEBUG and
NOISE registers. These are two USER registers that can be easily
set and reset via the "SET /option" command. NOISE is used by the FCP
while DEBUG is intended to provide an easy way of turning debugging
messages and actions on or off.
15. MU now includes use of '?' for a help screen, and a hex calculator
has been added so that the resident MU contains the same functions
as the transient version.
16. The 'S' (space) command has been added to RCP. This command has the
format S d: and will give the remaining space on the selected drive.
The CP and ERA commands will echo the remaining space on the desti-
nation drive automatically.
17. The TST command accepts 'M'80, 'Z'AS, 'S'LR, or '8'0A for Microsoft's
M80 assembler, ZAS assembler, SLR Systems SLRMAC assembler, and SLR
Systems Z80ASM assembler, respectively. M80 is version 3.45, ZAS is
version 2.0, SLRMAC is version 1.06, and Z80ASM is version 1.2.
* * * * * * * * *
INSTALLATION REQUIREMENTS
XB requires the following for installation:
1. A Z80 CPU
2. ZCPR3 installed with segments for RCP, FCP, ENV, message
buffers, stacks, etc.
3. 128k of memory in two (2) 64k banks. The first bank is the
TPA bank and the second is the SYSTEM bank. The first and
second banks should have the bottom 48k bank-selected using
a bank port. The TPA bank should have the top 16k set as
global. The top 16k in the SYSTEM bank is not enabled. In
a typical setup, the TPA bank is assigned to bank 0 while
the SYSTEM bank is assigned to bank 1. You must check your
memory manuals to determine what byte must be sent to the
bank port address to enable each bank.
4. SLR Systems Z80ASM assembler and SLRNK (or SLRNK+) linker.
5. About 500k of disk space for source files. A RAM drive
will greatly speed up assembly time.
This next section started out as a list of improvements that might
be desirable in the BCP. Looking over it a month or so afterwards
I have to admit that it seems to be becoming a list of ideas for the
system as a whole. This is more or less along the lines of the
original concept for the BCP when I started modifing the original
ZCPR3 code to build an "Operating System" instead of what seemed to
be ZCPR+BDOS+BIOS. The general view is that the BDOS is in control
of the computer, ZCPR is a useful improvement on the D.R. CCP and
if you're lucky your BIOS won't have too many bugs in it.
I believe that this is the wrong approach, in that the control of the
whole system is in the I/O and that the way the BIOS is implemented
is the key to a usable system. Thus the CCP and BDOS are programs
that are used by the BIOS to control the system.
* * * * * * * * *
Wish List:-
1. FCP. a. File lists accepted by FCP utilities.
b. Better REG processing... 8-bit arithmetic on registers and
more logical negate handling (ie IF R1 ~0 or IF R1 -1).
c. How about LABELs?, GOTOs and IF <cond> GOTO...
2. RCP. a. The current utilities package is a kluge and the whole RCP
would benefit from a more consitent utilities treatment. Of
course if SYSLIB, Z3LIB and VLIB could be linked to the
banked portion everything would be much easier.
b. I should like to see a "No Message" option added to CP and
REN so that files can be manipulated without the user
having to answer questions ie.
CP b:=filename.typ /nm
would copy the file to B: without asking questions even if
a copy exists on B.
Also it would be very nice if CP accepted file lists as
input.
c. Replace the DIR program with SD or similar.
d. TYPE and LIST could handle SQ files and offer a list of
filetype that they would refuse to print eg. COM, SYS etc.
e. MU needs some work, it still has bugs and I don't like the
HEX line editor. It also fails to stop ZEX processing when
it is run.
f. CP does a fair bit of bank switching and copying. Most
systems should be able to eliminate 50% of the overheads in
CP by setting the DMA address to the target buffer instead
of copying everything through the TPA buffers.
g. REN internal logic checks for the target file and may erase
it before it looks to see if the source file exists.
16-Mar-86 h. LIST command is designed to dump ASCII to a printer and so
does TAB expansion. This trashes Graphics Dumps therefore
we need a /BIN (or similar) argument to LIST to kill TAB
processing and make sure 8-bit chars are sent.
There is no reason why LIST cannot spool the output to the
printer (Get code from UNSPOOL). The spooler performance
would be helped if the IOP provided a small buffer (2-4k)
for LST: device output.
i. Need to add redirection commands to pass status via SYSCOMN
to the IOP for CON: and LST: redirection to files ie.
OPEN filename.typ > {LST:/CON:}
SHUT - close any open file and flush to disk.
j. Key redefinition is very desirable but needs some thought,
the place for key redefinition is the IOP.
k. It is intended that the 16k buffer in the SYSTEM bank be
allocatable in 2k chunks - so far this has not been done
but the buffer could have multiple uses.
l. These additions are starting to point to the requirement
for some sort of multiprocessing facility in the BIOS to
handle the I/O. Implementing interupt I/O drivers and
buffering all I/O would be a good substitute.
29-Mar-86 m. Add a "PORT" command to access I/O ports directly...
"PORT pp nn" would write the value "nn" to port "pp"
"PORT pp" would return the current value of port "pp"
Information:-
SYS.SEG This should contain all memory management utilities so that
it will be easier to port the package to other systems. I
have only put in the stuff that is required at the moment
but I plan to include all my system memory managment here.
MVERSN This macro is placed prior to each package entry point and
I plan to be able to display the version number of each
package as it is run by setting the DEBUG register.
LDR18 I have modified this ZCPR3 utility to accept a filetype of
".SEG" if the file has a 128 byte header as the 1st sector.
This header contains the destination information so that
we do not have to change the Z3ENV descriptions. LDR18 will
load a .SEG file to any bank of memory that it supports.
Since one of the files that I plan to load is the memory
management library, it is currently nessesary that LDR18
contain its own memory routines.
* * * * * * * * *
Files supplied in XB11.LBR
Note:-
1. Files marked (*) may need to be modified for system memory management.
2. Files marked (#) should be read first.
SYSCOMN .Z80 * System common definitions - a BIOS/SYSTEM "environment".
SYSEXEC .Z80 * All memory managment routines.
SYSTEM .LIB # System addresses (non-ZCPR3) and partitions.
XB .Z80 # Main file to assemble the banked portion of the BCP.
XBDNEW .DOC # General documentation and definitions.
XBGFCP .Z80 - Global portion of FCP.
XBGRCP .Z80 - Global portion of RCP.
XBLDEF .LIB # Combination of SYSRCP.LIB and SYSFCP.LIB
XBSDIR .SUB - File list for assembler/linker.
XBSHEAD .Z80 - Header definition for .SEG files.
XBSREL .ZEX - ZEX file to rebuild SYS.SEG, BNK.SEG, SYS.FCP and SYS.RCP
Catch 22 - requires new FCP to run.
Z3BASE .LIB # Version of Rick Conns original for my system.
Ammendments
***********
04-Mar-1986 DIR sort bug fixed (??)
8 bit chars now sent to printer by LIST cmd.
16-Mar-1986 LIST still expands TABs so above mod is somewhat useless.
***********
Additional installation notes from Steven D. Kapplin 4/12/86
The following notes should help in the installation of XBCP.
1. The space reserved for the RCP and FCP in the BIOS cold boot can
be reduced. Only one 256 byte block need be reserved for the RCP and
one 128 byte block for the FCP. Additionally, you must reserve one
256 byte block for SYS$$EXEC and one 256 byte block for SYS$$POOL. An 80
byte block must be reserved for SYS$$COMN. The addresses for these blocks
are EQUated in SYSTEM.LIB. Space is reserved in the RCP and should be
allocated in your Z3BASE.LIB. A sample Z3BASE.LIB is included to show the
allocation required. An easy way to accomplish this is to set RCPS
in Z3BASE.LIB to 7. This reserves adequate space for the RCP and
the XB system space. Also note that the byte values for selecting memory
banks is also in SYSTEM.LIB. They are TPA$$PAR and SYS$$PAR for TPA bank
and SYSTEM bank, respectively. They are currently EQUated to 1 and 2. If
your system requires something different, change these values. The bank
port address BANK is also EQUated in SYSTEM.LIB. It is set for 040h. If
you use a different bank port address, change the value of BANK.
2. Check the file XBLDEF.LIB and determine what options you want turned
on (or off) in your system. As delivered, the entire RCP and FCP options
are available including a resident version of MU. Note that the EQUates
for the error addresses for M80, ZAS, SLRMAC and Z80ASM are contained in
the module XBBCLRT.Z80. If you have different versions from those supported
here, then you will need to change them. Note that TST command no longer
supports Microsoft's F80 Fortran compiler.
3. Configure SYSTEM.LIB for the proper addresses for SYSCOMN, SYSEXEC,
and SYSPOOL. These equates are labelled as SYS$$COMN, SYS$$EXEC, and
SYS$$POOL in SYSTEM.LIB. The easy way to do this is to set them up
starting immediately after the RCP. One 256 byte block is needed for
the RCP, then these three addresses come immediately after in the
memory map. (See accompanying Z3BASE.LIB.) For instance if your RCP is
set to begin at 0F600h, then set SYS$$POOL at 0F700h, SYS$$EXEC at 0F800h,
and SYS$$COMN at 0F900h. The RCP is now 256 bytes long, SYSPOOL and
SYSEXEC are allocated 256 bytes each. SYS$$COMN needs only 80 bytes, so
your next system address can begin at 0F980h. This actually allocates
128 bytes. However RCPS can only be allocated in 128 byte chunks. Set
RCPS to 7 for this example.
4. The .ZEX files should be checked to be sure drive specifications are
proper for your system. If not, make appropriate changes. However, do
not change anything else in the .ZEX files other than drive specifiers or
the filenames for the assembler and linker.
5. XB is setup to be assembled with the SLR Z80ASM assembler and
SLRNK+ linker. Major modifications may be needed to assemble with
M80 or ZAS.
6. LDR18.Z80 requires SYSLIB.REL and Z3LIB.REL for assembly. Be
sure to use the LDR18.ZEX file for assembly.
7. There is a slight bug in the bank routines which causes the default
user bank to be set to whatever byte is located at the memory address
of PBA
NK. Thus, MU and BANK may report some bank other than the ones
actually in use on your system. Under use this is a minor aggrevation,
but no serious problem. It does not affect how the banked system works,
but when you use PEEK or POKE, BANK or MU, set the user bank to the one
you want. BANK <bank> will set the user bank to the value specified in
<bank>. For instance, BANK 1 sets the user bank to 1. For simplicity
you could do this as part of your STARTUP.
8. XB is assembled by the command -- ZEX XBSREL <cr>. Answer 'Y' to
each of the first three questions. The rest is automatic. LDR18 is
assembled by the command -- ZEX LDR18 <cr>.
9. Questions can be directed to Edi Cramp, Ron Schwabel, or Steve Kapplin
at the Tampa ZNODE -- 813-831-RCMP (7276).
SUMMARY OF FEATURES
a. Added MU as a resident command. MU has a help menu and hex calculator
built in, so that it closely resembles its transient counterpart. A BANK
command permits the user to set the memory bank to be examined by MU. This
is a feature missing from DDT and its ilk. MU provides most of the features
of DDT, except for the ability to move memory and read in files.
b. All RCP commands are implemented including several new ones. New commands
are BANK, R, and S. The BANK command permits changing the user memory bank.
R will reset the disk system (for those not using ZRDOS+ with auto disk
relogging). The S command provides remaining space on designated drive. The
S command is executed automatically after an ERA or CP finishes normal
execution.
c. The IF processor has been completely updated to include all features of
the transient version of IF, except for file lists. The IF IN now permits
a user-prompt (IF IN <prompt>) and allows an entire multiple command line
to be aborted by responding with ^C. IF now provides most features of SAK
in a resident command. EXIF has been added to the IF commands. EXIF
effectively removes all pending IFs, eliminating the need to follow nested
IFs with a series of FIs.
d. The banked system will free up about 1.5k of additional TPA space, while
permitting a combined RCP and FCP totaling about 9k.
e. The modular design makes it relatively easy to add commands to the
existing command set. Once familiar with the structure of a command source
module, adding new commands becomes relatively simple.