.MB +5
.MT -3
.LL 65
.PN 107
.HE MP/M User's Guide
.FT   (All Information Herein is Proprietary to Digital Research.)
.sp
.pp
3.4  System File Components
.pp
The MP/M system file, 'MPM.SYS' consists of five components: the
system data page, the customized XIOS, the BDOS or ODOS, the XDOS, and the
resident system processes.
MPM.SYS resides in the directory with a user code of 0 and is
usually read only.  The MP/M loader reads and relocates the MPM.SYS
file to bring up the MP/M system.
.SP 2
.ce
SYSTEM DATA
.sp
.PP
The system data page contains 256 bytes used by the loader to
dynamically configure the system.  The system data page can be
prepared using the GENSYS program or it can be manually prepared
using DDT or SID.  The following table describes the byte
assignments:
.LI

	Byte	Assignment
	----    ----------

	000-000 Top page of memory
	001-001 Number of consoles
	002-002 Breakpoint restart number
	003-003 Allocate stacks for user system calls, boolean
	004-004 Bank switched memory, boolean
	005-005 Z80 CPU, boolean
	006-006 Banked BDOS file manager, boolean
	007-015 Unassigned, reserved
	016-047 Initial memory segment table
	048-079 Breakpoint vector table, filled in by DDTs
	080-111 Stack addresses for user system calls
	112-122 Scratch area for memory segments
	123-127 Unassigned, reserved
	128-143 Submit flags
	144-255 Reserved

.AD
.SP 2
.ce
CUSTOMIZED XIOS
.sp
.PP
The customized XIOS is obtained from a file named 'XIOS.SPR'. The
'XIOS.SPR' file is actually a file of type PRL containing the
page relocatable version of the user customized XIOS.  A submit
file on the distribution diskette named 'MACSPR.SUB' or 'ASMSPR.SUB' can be used
to generate the user customized XIOS.  The following sequence of
commands will produce a 'XIOS.SPR' file given a user 'XIOS.ASM'
file:
.LI

	A>SUBMIT MACSPR XIOS

.AD
.sp 2
.ce
BDOS/ODOS
.sp
.pp
The Basic Disk Operating System (BDOS) file named 'BDOS.SPR' is a page
relocatable
file essentially containing the CP/M 2.0 disk file management.
This module handles all the BDOS system calls providing both multiple
console support and disk file management.
.pp
In systems with a banked BDOS, the file named 'ODOS.SPR' is a page
relocatable file containing the resident portion of the banked BDOS.
.SP 2
.ce
XDOS
.sp
.PP
The XDOS file named 'XDOS.SPR' is a page relocatable file
containing the priority driven MP/M nucleus.  The nucleus contains
the following code pieces: root module, dispatcher,
queue management, flag management, memory management, terminal
handler, terminal message process, command line interpreter, file
name parser, and time base management.
.SP 2
.ce
RESIDENT SYSTEM PROCESSES
.sp
.PP
Resident system processes are identified by a file type of RSP.  The
RSP files distributed with MP/M include: run-time system
status display (MPMSTAT), printer spooler (Spool), abort named
process (ABORT), and a scheduler (SCHED).
.PP
At system generation time the user is prompted to select which RSPs
are to be concatenated to the 'MPM.SYS' file.
.PP
It is possible for the user to prepare custom resident system
processes.  The resident system processes must follow these rules:
.PP
* The file itself must be page relocatable. Page relocatable files
can be simply generated using the submit file 'MACSPR.SUB' or 'ASMSPR.SUB'
and then renaming the file to change the type from 'SPR' to 'RSP'.
.PP
* The first two bytes of the resident system process are reserved
for the address of the BDOS/XDOS.  Thus a resident system process can
access the BDOS/XDOS by loading the two bytes at relative 0000-0001H
and then performing a PCHL.
.PP
* The process descriptor for the resident system process must begin at
the third byte position.  The contents of the process descriptor are
described in section 2.3.
.SP 2
.ce
BNKBDOS
.sp
.PP
In addition to the MPM.SYS file a file named 'BNKBDOS.SPR' is used in
systems with a banked BDOS.  It is a page relocatable file containing
the non-resident portion of the banked BDOS.
This file is not used by systems without banked memory.
.bp
.sp
.pp
3.5 System Generation
.pp
MP/M system generation consists of the preparation of a system
data file and the concatenation of both required and optional code
files to produce a file named 'MPM.SYS'.  The operation is performed
using a GENSYS program which can be run under either MP/M or
CP/M.  The GENSYS automates the system generation process by
prompting the user for optional parameters and then prepares the
'MPM.SYS' file.
.PP
The operation of GENSYS is illustrated with two sample executions
shown below:
.LI

	A>GENSYS

	MP/M System Generation
	======================

	Top page of memory = ff
	Number of consoles = 2
	Breakpoint RST #   = 6
	Add system call user stacks (Y/N)? y
	Z80 CPU (Y/N)? y
	Bank switched memory (Y/N)? n
	Memory segment bases, (ff terminates list)
	 : 00
	 : 50
	 : a0
	 : ff
	Select Resident System Processes: (Y/N)
	ABORT    ? n
	SPOOL    ? n
	MPMSTAT  ? y
	SCHED    ? y

.pp
The queries made during the system generation shown above are
described as follows:
.sp
.pp
Top page of memory:  Two hex ASCII digits are to be entered giving
the top page of memory.  A value of 0 can be entered in which case
the MP/M loader will determine the size of memory at load time
by finding the top page of RAM.
.pp
Number of consoles:  Each console specified will require 256
bytes of memory.  MP/M release 1 supports up to 16 consoles.
During MP/M initialization an XIOS call is made to obtain the
actual maximum number of physical consoles supported by the
XIOS.  This number is used if it is less than the number specified
during the GENSYS.
.pp
Breakpoint RST #:  The breakpoint restart number to be used by the
SID and DDT debuggers is specified.  Restart 0 is not allowed.
Other restarts required by the XIOS should also not be used.
.pp
Add system call user stacks (Y/N)?:  If you desire to
execute CP/M *.COM files then your response should be Y.  A 'Y'
response forces a stack switch with each system call from a
user program.
MP/M requires more stack space than CP/M.
.pp
Bank switched memory (Y/N)?:  If your system does not have bank switched
memory then you should respond with a 'N'.  Otherwise
respond with a 'Y' and additional questions and responses (as shown in
the second example) will be required.
.pp
Memory segment bases:  Memory segmentation is defined by the
entries which are made.
Care must be taken in the entry of memory bases as all entries
must be made with successively higher bases.
If your system has ROM at 0000H then the first memory segment
base which you specify should be your first actual RAM location.
Only page relocatable (PRL) programs can be run in systems that
do not have RAM at location 0000H.
.pp
Select Resident System Processes:  A directory search is made for
all files of type RSP.  Each file found is listed and included in
the generated system file if you respond with a 'Y'.
.sp 2
.pp
The second example illustrates a more complicated GENSYS in which
a system is setup with bank switched memory and a banked BDOS.
This procedure requires an intial GENSYS and MPMLDR execution to
determine the exact size of the operating system, followed by
a second GENSYS.
.li

	A>GENSYS

	MP/M System Generation
	======================

	Top page of memory = ff
	Number of consoles = 2
	Breakpoint RST #   = 6
	Add system call user stacks (Y/N)? y
	Z80 CPU (Y/N) y
	Bank switched memory (Y/N)? y
	Banked BDOS file manager (Y/N)? y
	Enter memory segment table: (ff terminates list)
	 Base,size,attrib,bank = 0,50,0,0
	 Base,size,attrib,bank = ff
	Select Resident System Processes: (Y/N)
	ABORT    ? n
	SPOOL    ? n
	MPMSTAT  ? n
	SCHED    ? y

.ad
.pp
The queries made during the system generation shown above
which relate to bank switched memory are described as follows:
.sp
.pp
Bank switched memory:  Respond with a 'Y'.
.pp
Bank switched BDOS file manager:  Respond with a 'Y' if
a bank switched BDOS is to be used, this will provide an additional
0C00H bytes of common area for large XIOS's and possibly some
RSP's.
The banked BDOS is slower than the non-banked because FCB's must
be copied from the bank of the calling program to common and then
back again each time a BDOS disk function is invoked.
.pp
Memory segment bases:  When bank switched memory has been
specified, you are prompted for the base, size, attributes, and
bank for each memory segment.
Extreme care must be taken when making these entries as there is
no error checking done by GENSYS regarding this function.  The first
entry made will determine the bank in which the banked BDOS is to
reside.  It is further assumed that the bank specified in the first
entry is the bank which is switched in at the time the MPMLDR is
executed.
The attribute byte is normally defined as 00.   However, if 
you  wish  to pre-allocate a memory segment a value of  FFH 
should  be  specified.   The bank byte  value  is  hardware 
dependent  and  is  usually  the value  sent  to  the  bank 
switching hardware to select the specified bank.
.sp 3
Then execute the MPMLDR in order to obtain the base address of
the operating system.  The base address in this example will be
the address of BNKBDOS.SPR (BC00H).
.li

	A>MPMLDR

	MP/M Loader
	===========

	Number of consoles =  2
	Breakpoint RST #   =  6
	Z80 CPU
	Banked BDOS file manager
	Top of memory      =  FFFFH

	Memory Segment Table:
	SYSTEM  DAT  FF00H  0100H
	CONSOLE DAT  FD00H  0200H
	USERSYS STK  FC00H  0100H
	XIOS    SPR  F600H  0600H
	BDOS    SPR  EE00H  0800H
	XDOS    SPR  CF00H  1F00H
	Sched   RSP  CA00H  0500H
	BNKBDOS SPR  BC00H  0E00H
	-------------------------
	Memseg  Usr  0000H  5000H  Bank 00H


.ad
Using the information obtained from the initial GENSYS and MPMLDR
execution the following GENSYS can be executed:
.li

	A>GENSYS

	MP/M System Generation
	======================

	Top page of memory = ff
	Number of consoles = 2
	Breakpoint RST #   = 6
	Add system call user stacks (Y/N)? y
	Z80 CPU (Y/N)? y
	Bank switched memory (Y/N)? y
	Banked BDOS file manager (Y/N)? y
	Enter memory segment table: (ff terminates list)
	 Base,size,attrib,bank = 0,bc,0,0
	 Base,size,attrib,bank = 0,c0,0,1
	 Base,size,attrib,bank = 0,c0,0,2
	 Base,size,attrib,bank = ff
	Select Resident System Processes: (Y/N)
	ABORT    ? n
	SPOOL    ? n
	MPMSTAT  ? n
	SCHED    ? y

.ad
.bp
.sp
.pp
3.6 MP/M Loader
.pp
The MPMLDR program loads the 'MPM.SYS' file and dynamically relocates
and configures the MP/M operating system.  MPMLDR can be run
under CP/M
or loaded from the first two tracks of a disk by the cold start loader.
.PP
The MPMLDR provides a display of the system loading and configuration.
It does not require any operator interaction.
.pp
In the following example
the 'MPM.SYS' file prepared by the first GENSYS example shown in
section 3.5 is loaded:
.LI

	A>MPMLDR

	MP/M Loader
	===========

	Number of consoles = 2
	Breakpoint RST #   = 6
	Z80 CPU
	Top of memory      = FFFFH

	Memory Segment Table:
	SYSTEM  DAT  FF00H  0100H
	CONSOLE DAT  FD00H  0200H
	USERSYS STK  FC00H  0100H
	XIOS    SPR  F600H  0600H
	BDOS    SPR  E200H  1400H
	XDOS    SPR  C300H  1F00H
	MPMSTAT RSP  B600H  0D00H
	Sched   RSP  B100H  0500H
	-------------------------
	Memseg  Usr  A000H  1100H
	Memseg  Usr  5000H  5000H
	Memseg  Usr  0000H  5000H

	MP/M
 	0A>
.ad
.sp 2
.cp 30
In the following example
the 'MPM.SYS' file prepared by the second GENSYS example shown in
section 3.5 is loaded:
.LI

	A>MPMLDR

	MP/M Loader
	===========

	Number of consoles = 2
	Breakpoint RST #   = 6
	Z80 CPU
	Banked BDOS file manager
	Top of memory      =  FFFFH

	Memory Segment Table:
	SYSTEM  DAT  FF00H  0100H
	CONSOLE DAT  FD00H  0200H
	USERSYS STK  FC00H  0100H
	XIOS    SPR  F600H  0600H
	BDOS    SPR  EE00H  0800H
	XDOS    SPR  CF00H  1F00H
	Sched   RSP  CA00H  0500H
	BNKBDOS SPR  BC00H  0E00H
	-------------------------
	Memseg  Usr  0000H  C000H  Bank 02H
	Memseg  Usr  0000H  C000H  Bank 01H
	Memseg  Usr  0000H  BC00H  Bank 00H

	MP/M
	0A>

.br
