I do wonder if it's possible to get CP/M 2.2 (rather than 3) running on a stock Nabu. Might allow for a larger TPA.
If you want the largest of TPA (62K!) you need to run SUPERCPM on the NABU. It used two NABU PCs connected by RS422 in tandem to create one magical CP/M multitasking system. Here is a taste:
SUPERCPM
1.0 Principles of Operation:
The NABU Tandem PC development system fully utilizes the
resources available with a NABU Cabserve development configuration
(two NABU PCs and a 1600 mass storage unit). The system software
physically partitions the system into a system PC and a user PC
(host and target respectively). The systems are coupled via the
RS-422 interface normally connected to the NABU adaptor.
A small software module in the user PC routes system calls and
relevant information to the system PC where they are received by a
conversion program which routes the calls to the CP/M BDOS and acts
as a receptor to the CP/M request's results. The results are returned
to the user PC. This operation is effectively transparent to the
application program.
The software module in the user PC effectively appears as
the CP/M BDOS and BIOS to the user program. It also maintains an
accurate copy of the CP/M system control block. Note that for
-version 2.1 of the Tandem system, not all BIOS calls are supported
precluding the use of certain NABU utilities (those which use
direct BIOS access). These functions may be accessed via BDOS
call 50 (although it is not recommended).
2.0 Narrative of Operation:
2.1) Startup:
When SUPERCPM is run on the System-PC it allocates additional
BCB's for the E: drive. (Normally A:,B:,E: and F: all
share the same BCB's). It then starts monitoring the RS422 port for
CABSERVE and extended CABSERVE requests. The User-PC is then either
reset or powered up. The User-PC requests segment 1 from the System-PC.
SUPERCPM.PAK is loaded into the User-PC and is run.
Once the User stub has been loaded it signals the System-PC
that it has started running. The System-PC removes CABSERVE's FCB's
from the stack and allocates the RAM disk. The RAM disk control routines
are patched into the BIOS jump table.
The initialization software obtains SCB and DEVICE TABLE
information from the System-PC and then loads CCP.COM via system
calls using the extended CABSERVE protocol. From then on the User-PC
functions as a CP/M 3.0 environment routing calls to the System-PC
and obtaining results via the extended protocol.
2.2) System data field updates:
Certain operations are performed at specific times above and
beyond the basic operations requested. CP/M utilities, CCP, and
most CP/M System Extensions modify system fields directly. When
a potentially modified field is critical to an operation, the
System-PC is updated in conjunction with the operation.
2.3) RAM disk:
The RAM disk is a dynamically allocated linked list of sector
buffers used by the hard disk only. ( This eliminates the additional
overhead required checking for media changes etc.). Once the space
has been allocated, the BIOS routines SELECT, SET_TRACK, SET_SECTOR,
SET_DMA_ADDRESS, READ and WRITE are intercepted.
When a read request occurs, the RAM disk block list is checked
to see if the sector is in memory. If so, it is delinked from it's
position in the chain and moved to the top of the list as Most Recently
Used block and the data is copied to the buffer specified by CP/M. If it
is not found, either the first unused block or the last block in
the chain (which will be least recently used) is migrated to the top
of the chain (making it most recently used ) and the sector copied
to it once it has been fetched from the disk.
When a write request occurs, the RAM disk block is checked
to see if the sector is in memory. If so, it is delinked from it's
position in the chain and moved to the top of the list as Most Recently
Used block and the data is copied from the buffer specified by CP/M. If it
is not found, either the first unused block or the last block in
the chain (which will be least recently used) is migrated to the top
of the chain (making it most recently used ) and the sector copied
to it from the CP/M buffer. The write is then performed normally.
Note that all writes are write-through, the write is never deferred.
2.4) Spooler:
SUPERCPM 2.1 has an embedded print spooler which
communicates with physical device LST:. (unfortunately there is
no way to poll status on logical device LST: so LST redirection
will not affect where the print spooler outputs to!). The print
spooler utilizes the idle time on the System-PC to output files
specified by the user. The time utilized is when the System-PC is
awaiting User-PC requests, and console or input.
Up to eight files may be queued for printing at any one time.
Extended BDOS calls (113 spool file ,114 display spool queue,
115 cancel job and 117 restart queue) are provided to allow manipulation
of the spooler from user programs. In addition the programs SPOOL, QUEUE,
CANCEL, and RESTART are provided to allow access from the CCP level.
3.0) Discrepancies:
Due to the necessity of maintaining two sets of data structures
some data areas are not updated until the next warm boot. These are:
1) when Device Table is modified by DEVICE. Change will not
come into effect until device exits.
4.0) Peculiarities Discovered:
1) PIP expects the directory error code (from file operations)
to be in the 'L' register.
2) The LOADER RSX (in CCP) checks the zero bit (set = error)
instead of checking the value of the 'A' reg. on all BDOS calls.
3) Perfectwriter, when editing a new file, MAKEs it, corrupts
the allocation block field, and then OPEN's the file.
4) SUBMIT creates a temporary file, writes to it, closes it,
and then starts reading it again without re-opening it.
5) PIP disables other than Ctrl^C recognition on BDOS11 (expecting
CCP to put it back as required).
6) BDOS11 discards Ctrl^P's and similar control characters when
scannning for console input. The impact of this is that BDOS 06
was used for scanning console input to allow spooling to
continue during BDOS 1 and BDOS 10 functions while maintaining
support of intercepted functons. However when
spooling a file, pressing Ctrl^Q, Ctrl^P, or Ctrl^S after
the CCP prompt will suspend Spooling until a non control
character is pressed.
That console status cannot be sampled for a non-interceptable
character without disabling some of the intercept functions
(i.e. Ctrl^P) seems to be a defeciency of the BDOS.
...I will be releasing this in the new year, as I recover all the components...
I promise it will be more fun than one NABU should be allowed.
Leo