home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
ZCPR33
/
BANKSYS.DOC
< prev
next >
Wrap
Text File
|
2000-06-30
|
10KB
|
237 lines
FROM: CAMERON W. COTRILL
TO: ALL ZSYSTEM SOFTWARE DEVELOPERS
Revised 01/09/88 Cameron W. Cotrill
BANKED CP/M 2.2 COMPATIBLE OS
With the advent of the 64180 and Z280, having more than 64k
of memory has become easy. Prior to this, there have been ways
of bank switching a Z80 system, and most use similar methods -
low memory is swapped while high memory is retained. Despite the
fact that banking methods used are similar, nobody has proposed
any details of extending the CP/M 2.2 and ZCPR3 environment to
support banked memory. This document is a proposal to set forth
the hardware and software interfaces to support such a system in
a manner that is consistent with the hardware independence of
ZCPR3 and CP/M 2.2.
The starting point for this definition is a Z80 system using
ZCPR3 and ZSDOS, and supporting at least 2 banks of memory. In
requiring the ZCPR3 environment specification, more information
on the system is available and the OS can take advantage of this.
One important application of the environment (and required TCAP
definition) is enhanced line editing is possible using BDOS
function 10 (A superset of CP/M+). The address that banking
takes place is not important, but must be a page boundary between
8000h and 0F000h. Most banked Z80 systems fit this
specification.
In order to support banking, the entire operating system must
be altered. Naturally, backward compatibility with existing
programs and utilities must be maintained to the maximum degree
possible. This means that CCP, BDOS, and BIOS entry points must
be maintained as in CP/M 2.2, and all functions supported by CP/M
BDOS and BIOS must also be maintained.
I. MEMORY MANAGEMENT
Currently, extended ram (above 64k) is used for RAM disk on
most systems that have it. A few bank part of the BIOS to allow
for larger TPA's, but no uniform specification to use this memory
is yet available to applications programs.
In order to allow applications programs to use banked memory,
system independent memory management routines must be added to
BDOS. Naturally, the hardware dependent parts of bank switching
must be handled by new BIOS entry points. The necessary added
routines would spill BDOS over the 3.5k space it has allotted to
it. However, since we are banking the system, the overflow can
be stuck in a reserved bank and swapped in and out as needed.
The same follows for BIOS.
To facilitate this, we will reserve bank 0 as the system
bank. The normal TPA will be located in bank 1, with banks 2-nnnn
available as extended memory for the application or the system.
Starting at address 0 in the system bank is the Banked BIOS area.
This area is 8k long and is reserved for BIOS (and boot ROM if
desired). Above this, at address 2000h, is the banked BDOS area.
This reserved area is also 8k. At 4000h is the 2k CCP buffer.
The BIOS should load CCP from this buffer instead of from disk.
BDOS is never re-loaded. The memory above CCP BUFFER (starting
at 4800h) and extending up to the bank boundary is used for
system extensions.
System Bank
-----------
Z3ENV
Z3 BUF Must not be banked
RES BIOS
RES BDOS (3.5k)
CCP (2k)
-----------
TOP TPA May be banked
-----------
SYS EXTEND
CCP BUFFER (2k) Must be banked
BANKED BDOS (8k)
BANKED BIOS (8k)
It is important to note which addresses are fixed in the
system and which addresses are not. The addresses of Banked
BIOS, Banked BDOS, CCP Buffer, and the starting address of SYS
Extend are fixed. All other addresses in the system may be
adjusted as required by the system implementor, so long as
modules with specified sizes (CCP, BDOS) are kept to the proper
size and in order.
In order to provide maximum utility for programs using
banking, the following types of services must be provided by the
OS -
1. Allocate bank to application
2. Free bank
3. Call routine in bank nnnn
4. Jump to routine in bank nnnn
5. Get data from bank nnnn
6. Store data to bank nnnn
7. Get bank size
8. Get/Set DMA bank (for disk ops)
This set of functions will allow a program to use banked memory
for either program memory, data memory, or both. No restrictions
are placed upon how banks of memory may be requested by the
application.
For the purposes of this document, the term application
shall be defined as a transient program, RSX, or Device Driver.
In order to prevent undue restrictions on memory size, the
bank number will be a 16 bit unsigned number. This will allow up
to 65536 banks of memory (about 3.14 gigabytes if 48k banks are
used). This should be enough memory capacity for a while.
Physical memory need not be this big, nor does BIOS need to
allocate the banks in sequential order. BDOS will call the BIOS
alloc entry point to get a bank of memory. In order for BIOS to
keep track of what application owns what memory, a task number
will be passed to BIOS in BC. If a bank is available, BIOS will
return the bank number in HL. If no bank is available, 0 is
returned in HL. Note that 0 is a valid bank but is never used by
an application as it is reserved for the system. It is proposed
that task numbers 0-3f be reserved for BIOS. All other task
numbers will be assigned by BDOS.
Since BIOS handles the details of memory allocation, this
means BIOS may allocate memory to itself. Note that since BIOS
takes care of the physical details of banking, it is possible to
support virtual memory for banking. This is probably best used
with the Z280 which has direct MMU support for this, but could be
used with any system.
Note that the 2k used by CCP must not be banked. The primary
reason for this is to allow banked programs a guaranteed 2k of
global memory that can be used for data and program common to all
banks.
Upon termination of an application, all banks used by the
application will be freed by OS.
Note that what is required for BDOS/BIOS compatibility is an
offset of 0DFAH from BDOS entry point to BIOS Warm Boot. If the
resident portion of BDOS is under 0E00H in length, the remaining
space may be used for system segments or BIOS.
II. SYSTEM EXTENSIONS
System extensions are additions to either BDOS or BIOS that
can define new functions or alter existing functions. A Device
Driver (DD) alters BIOS functions and a Resident System Extension
(RSX) alters BDOS functions. As such, the DD is hardware
dependent and the RSX is hardware independent. Both are
relocatable modules that are loaded into the System Extension
Area on the system page or into an alternate bank if the system
area is full.
Several new BDOS calls need to be provided to manipulate
these modules. The modules themselves have a similar structure.
Pertinent information about the module is kept in the module
header. Details of the added BDOS calls and the module header
structure need to be defined.
III. ENHANCED BDOS FUNCTIONS
Several enhancements to the internal operation of BDOS are
proposed:
1. Hashed directory buffer to speed unambig file directory
searches.
2. Multisector I/O support.
3. Enhanced Function 10 including last line recall and
insert/overwrite editing.
4. I/O redirection. The following capabilities are
suggested: Unix-like STDIN, STDOUT, STDERR logical device
assignment, re-assign RDR: and PUN: as single AUX: device, make
device names valid as files with BDOS doing the stream to block
conversion.
Several BDOS utility functions are proposed in order to make
life easier for the programmer.
1. Parse FCB. Parses the next token in the command line into
a FCB. This includes named directory resolution, password
protection, etc.
2. Full screen STDOUT string I/O functions.
3. AUX: status (used for modem)
Recommended BIOS revisions are:
1. Full track buffering.
2. Disk caching (write thru)
In addition, there may be other SYSLIB functions such as
those that get system addresses that may be desirable to
implement as BDOS/BIOS calls.
IV. MULTITASKING
Multitasking will require BDOS and BIOS to be-reenterant (or
alternatively, BIOS can be maintained as non-reenterant if a task
switch is disallowed until the IO operation is completed). BDOS
must have a separate RAM area for each task (which must include a
separate DIR buffer). Clearly, common memory can't be used for
this. The data could be located in the system bank, but a better
solution would be to limit multitasking to the 180 and 280
processors, where changing the memory partitions on the fly is
simple. This fits well with the current location of RAM in
ZSDOS. BIOS variables could be stored in a similar matter.
TPA bank Alt bank
bios bank point +-----------------+ +---------------+
| bdos | | bios bank ram |
bdos bank point +-----------------+ +---------------+
| | | bdos bank ram |
normal bank point +-----------------+ +---------------+
Due to possible severe compatibility problems, I recommend
that multitasking be implemented only after the banked OS is
defined and implemented. This suggestion does not mean that we
shouldn't carefully consider the impact of multitasking on the
banked standards!
V. SUMMARY
This represents some of my thoughts on banking. I don't
make any claims to have all the answers - indeed my motivation to
write this document is to spur others to think, question, ponder,
and suggest improvements to the ideas presented here. We don't
have anybody like Microsoft or IBM to drag us along. This means
that for better or worse, we control our own destiny. Let's get
together and discuss the issues banking raises so together we can
define the next generation of ZSystem.
I can be reached on the Ladera Z-Node (Al Hawley's wonderful
board) and on Z Node Central. Leave a message for Cameron W.
Cotrill.