.MB +5 .MT -3 .LL 65 .PN 1 .HE MP/M User's Guide .FT (All Information Herein is Proprietary to Digital Research.) .sp 2 1. MP/M FEATURES AND FACILITIES .sp .pp 1.1 Introduction .pp The purpose of the MP/M multi-programming monitor control program is to provide a microcomputer operating system which supports multi-terminal access with multi-programming at each terminal. .sp .CE OVERVIEW .PP The MP/M operating system is an upward compatible version of CP/M 2.0 with a number of added facilities. These added facilities are contained in new logical sections of MP/M called the extended I/O system and the extended disk operating system. In this manual the name XIOS will refer to the combined basic and extended I/O system. BDOS will refer to the standard CP/M 2.0 basic disk operating system functions and XDOS will refer to the extended disk operating system. As an upward compatible version, users can easily make the transition from CP/M to the MP/M operating system. In fact, existing CP/M *.COM files can be run under MP/M, providing that the program has been correctly written. That is, BDOS calls are made for I/O, and the only direct BIOS calls made are for console and printer I/O. There must also be at least 4 bytes of extra stack in the CP/M *.COM program. .SP The following basic facilities are provided: .LI o Multi-terminal support o Multi-Programming at each terminal o Support for bank switched memory and memory protection o Concurrency of I/O and CPU operations o Inter-process communication, mutual exclusion and synchronization o Ability to operate in sequential, polled or interrupt driven environments o System timing functions o Logical interrupt system utilizing flags o Selection of system options at system generation time o Dynamic system configuration at load time The following optional facilities are provided: o Spooling list files to the printer o Scheduling programs to be run by date and time o Displaying complete system run-time status o Setting and reading of the date and time .AD .SP .CE HARDWARE ENVIRONMENT .PP The hardware environment for MP/M must include an 8080 or Z80 CPU, a minimum of 32K bytes of memory, 1 to 16 consoles, 1 to 16 logical (or physical) disk drives each containing up to eight megabytes, and a clock/timer interrupt. .PP The distributed form of the MP/M operating system is configured for a polled I/O environment on the Intel MDS-800 with two consoles and a real-time clock. Multi-programming at two terminals is supported with this configuration. To improve the system performance and capability the following incremental hardware additions can be utilized by the operating system: .SP .IN +3 a. Full Interrupt System .BR b. Banked Memory .BR c. Additional Consoles .QI .AD .SP .CE MEMORY SIZE .PP The MP/M operating system requires less than 15K bytes of memory when configured for two consoles and eight memory segments on the Intel MDS-800. Each additional console requires 256 bytes. .PP Optional resident system processes can be specified at system generation which require varying amounts of memory. .SP .CE PERFORMANCE .PP When MP/M is configured for a single console and is executing a single process, its speed approximates that of CP/M. In environments where either multiple processes and/or users are running, the speed of each individual process is degraded in proportion to the amount of I/O and compute resources required. A process which performs a large amount of I/O in proportion to computing exhibits only minor speed degradation. This also applies to a process that performs a large amount of computing, but is running concurrently with other processes that are largely I/O bound. On the other hand, significant speed degradation occurs in environments in which more than one compute bound process is running. .bp .sp .pp 1.2 Functional Description of MP/M .pp The MP/M Operating System is based on a real-time multi-tasking nucleus. This nucleus provides process dispatching, queue management, flag management, memory management and system timing functions. .pp MP/M is a priority driven system. This means that the highest priority ready process is given the CPU resource. The operation of determining the highest priority ready process and then giving it the CPU is called dispatching. Each process in the system has a process descriptor. The purpose of the process descriptor is to provide a data structure which contains all the information the system needs to know about a process. This information is used during dispatching to save the state of the currently running process, to determine which process is to be run, and then to restore that processes state. Process dispatching is performed at each system call, at each interrupt, and at each tick of the system clock. Processes with the same priority are "round-robin" scheduled. That is, they are given equal slices of CPU time. .pp Queues perform several critical functions in a real-time multi-tasking environment. They can be used for the communication of messages between processes, to synchronize processes, and for mutual exclusion. As the name "queue" implies, they provide a first in first out list of messages, and as implemented in MP/M, a list of processes waiting for messages. .pp The flag management provided by MP/M is used to synchronize processes by signaling a significant event. Flags provide a logical interrupt system for MP/M which is independent of the physical interrupt system. Flags are used to signal interrupts, mapping an arbitrary physical interrupt environment into a regular structure. .pp MP/M manages memory in pre-defined memory segments. Up to eight memory segments of 48K can be managed by MP/M. This management of memory is consistent with hardware environments where memory is banked and/or protected in fixed segments. .pp System timing functions provide time of day, the capability to schedule programs to be loaded from disk and executed, and the ability to delay the execution of a process for a specified period of time. .bp .sp .pp 1.3 Console Commands .PP The purpose of this section is to describe the console commands which make up the operator interface to the MP/M operating system. It is important to note from the outset that there are no system defined or built-in commands. That is, the system has no reserved or special commands. All commands in the system are provided by resident system processes specified during system generation and programs residing on disk in either the CP/M *.COM file format or in the MP/M *.PRL (page relocatable) file format. .pp When MP/M is loaded from disk a configuration table and memory segment map are displayed on console #0. When the loading is complete each of the 1 to 16 configured consoles is a system or master console. Additional slave consoles (maximum total of slave and master consoles is 16) can be accessed using XDOS system calls. .pp After loading, the following message is displayed on each console: .sp .ti +3 MP/M .ti +3 xA> .pp The 'x' shown in the prompt is the user code. At cold start an association is made between the user code and console number. The initial user code is equal to the console number. For example, console #0 is initialized to user #0 and the following prompt is displayed on console #0: .sp .ti +3 0A> .pp The default user code can then be changed to any desired user code with the USER command (see USER in section 1.4). All users have access to files with a user code of 0. Thus, system files and programs should have a user code of 0. Caution must be used when operating under a user code of 0 since all its files can be accessed while operating under any other user code. In general, user code 0 should be reserved for files which are accessed by all users. In the event that a file with the same name is present under user code 0 and another user code, the first file found in the directory will be accessed. .pp The 'A' in the prompt is the default (currently logged) disk for the console. This can be changed individually at any console by typing in a disk drive name (A,B,C,...,or P) followed by a colon (:) when the prompt has been received. Since there are no built-in commands, the default disk specified must contain the desired command files (such as DIR, REN, ERA etc.), or each command must be preceeded by an "A:". .SP .CE RUNNING A PROGRAM .PP A program is run by typing in the program name followed by a carriage return, . Some programs obtain parameters on the same line following the program name. Characters on the line following the program name constitute what is called the command tail. The command tail is copied into location 0080H (relative to the base of the memory segment in which the program resides) and converted to upper case by the Command Line Interpreter (CLI). The CLI also parses the command tail producing two file control blocks at 005CH and 006CH respectively. .PP The programs which are provided with MP/M are described in sections 1.4 and 1.5. .SP .CE ABORTING A PROGRAM .PP A program may be aborted by typing a control C (^C) at the console. The affect of the ^C is to terminate the program which currently owns the console. Thus, a detached program cannot be aborted with a ^C. A detached program must first be attached and then aborted. A running program may also be aborted using the ABORT command (see ABORT in section 1.5). .SP .CE RUNNING A RESIDENT SYSTEM PROCESS .PP At the operator interface there is no difference between running a program from disk and running a resident system process. The actual difference is that resident system processes do not need to be loaded from disk because they are loaded by the MP/M loader when a system cold start is performed and remain resident. .SP .CE DETACHING FROM A PROGRAM .PP There are two methods for detaching from a running program. The first is to type a control D (^D) at the console. The second method is for a program to make an XDOS detach call. .PP The restriction on the former method, typing ^D, is that the running program must be performing a check console status to observe the detach request. A check console status is automatically performed each time a user program makes a BDOS disk function call. .SP .CE ATTACHING TO A DETACHED PROGRAM .PP A program which is detached from a console, that is it does not own a console, may be attached to a console by typing 'ATTACH' followed by the program name. A program may only be attached to the console from which it was detached. If the terminal message process (TMP) has ownership of the console and the user enters a ^D, the next highest priority ready process which is waiting for the console begins running. .SP .CE LINE EDITING AND OUTPUT CONTROL .PP The Terminal Message Process (TMP) allows certain line editing functions while typing in command lines: .LI rubout Delete the last character typed at the console, removes and echoes the last character ctl-C MP/M abort program. Terminate running process. ctl-D MP/M detach console. ctl-E Physical end of line. ctl-H Delete the last character typed at the console, backspaces one character position. ctl-J (line feed) terminate current input. ctl-M (carriage return) terminates input. ctl-R Retype current command line: types a "clean line" following character deletion with rubouts. ctl-U Remove current line after new line. ctl-X Delete the entire line typed at the console, backspaces to the beginning of the current line ctl-Z End input from the console. The control functions ctl-P, ctl-Q and ctl-S affect console output as shown below. ctl-P Copy all subsequent console output to the list device. Output is sent to both the list device and the console device until the next ctl-P is typed. If the list device is not available a 'Printer busy' message is displayed on the console. ctl-Q Obtain ownership of the printer mutual exclusion message. Obtaining the printer using this command will ensure that the MP/M spooler, PIP, and other ctl-P or ctl-Q commands entered from other consoles will not be allowed access to the printer. The printer is "owned" by the TMP until another ctl-P or ctl-Q is entered, releasing the printer. The ctl-P should be used when a program (such as a CP/M *.COM file) is executed that does not obtain the printer mutual exclusion message prior to accessing the printer. If the list device is not available a 'Printer busy' message is displayed on the console. ctl-S Stop the console output temporarily. Program execution and output continue when the next character is typed at the console (e.g., another ctl-S). This feature is used to stop output on high speed consoles, such as CRT's, in order to view a segment of output before continuing. .AD .bp .sp .pp 1.4 Commonly Used System Programs .PP The commonly used system programs (CUSPs) or transient commands, as they are called in CP/M, are loaded from the currently logged disk and executed in a relocatable memory segment if their type is PRL or in an absolute TPA if their type is COM. .PP This section contains a brief description of the CUSPs. Operation of many of the CUSPs is identical to that under CP/M. In these cases the commands are marked with an asterisk '*' and the reader is referred to the Digital Research document titled "An Introduction to CP/M Features and Facilities" for a complete description of the CUSP. .SP .CE GET/SET USER CODE .PP The USER command is used to display the current user code as well as to set the user code value. Entering the command USER followed by a will display the current user code. Note that the user code is already displayed in the prompt. .sp .ti +3 1A>user .ti +3 user = 1 .pp Entering the command USER followed by a space, a user code and then a will set the user code to the specified user code. Legal user codes are in the range 0 to 15. .sp .ti +3 1A>user 3 .ti +3 user = 3 .ti +3 3A> .sp .CE CONSOLE .pp The CONSOLE command is used to determine the console number at which the command is entered. The console number is sometimes of interest when examining the system status to determine the processes which are detached from consoles. .sp .ti +3 1A>console .ti +3 Console = 0 .sp .ce DISK RESET .pp The DSKRESET (disk reset) command is used to enable the operator to change disks. If no parameter is entered all the drives are reset. Specific drives to be reset may be included as parameters. .sp .ti +3 1A>DSKRESET .sp .ti +3 1A>DSKRESET B:,E: .pp If there are any open files on the drive(s) to be reset, the disk reset is denied and the cause of the disk reset failure is shown: .sp .ti +3 1A>DSKRESET B: .sp .ti +3 Disk reset denied, Drive B: Console 0 Program Ed .pp The reason that disk reset is treated so carefully is that files left open (e.g. in the process of being written) will lose their updated information if they are not closed prior to a disk reset. .sp .ce ERASE FILE * .PP The ERA (erase) command removes specified files having the current user code. If no files can be found on the selected diskette which satisfy the erase request, then the message "No file" is displayed at the console. .sp An attempt to erase all files, .sp .ti +3 2B>ERA *.* .sp will produce the following response from ERA: .sp .ti +3 Confirm delete all user files (Y/N)? .pp A second form of the erase command (ERAQ) enables the operator to selectively delete files that match the specified filename reference. For example: .sp .ti +3 0A>ERAQ *.LST .sp .ti +3 A:XIOS LST? y .ti +3 A:MYFILE LST? n .SP .CE TYPE A FILE * .PP The TYPE command displays the contents of the specified ASCII source file on the console device. The TYPE command expands tabs (ctl-I characters), assuming tab positions are set at every eighth column. .pp The TYPE command has a pause mode which is specified by entering a 'P' followed by two decimal digits after the filename. For example: .sp .ti +3 0A>TYPE DUMP.ASM P23 .sp The specified number of lines will be displayed and then TYPE will pause until a is entered. .pp The TYPE program is small and relatively slow because it buffers only one sector at a time. The larger PIP program can be used for faster displays in the following manner: .sp .ti +3 0A>PIP CON:=MYFILE.TEX .SP .CE FILE DIRECTORY * .PP The DIR (directory) command causes the names of files on the specified or logged-in disk to be listed on the console device. If no files can be found on the selected diskette which satisfy the directory request, then the message "Not found" is typed at the console. .pp The DIR command can include files which have the system attribute set. This is done by using the 'S' option. For example: .sp .ti +3 0A>DIR *.COM S .SP .CE RENAME FILE * .PP The REN (rename) command allows the user to change the name of files on disk. If the destination filename exists the operator is given the option of deleting the current destination file before renaming the source file. .SP .CE TEXT EDITOR * .PP The ED (editor) command allows the user to edit ASCII text files. .SP .CE PERIPHERAL INTERCHANGE PROGRAM * .PP The PIP (peripheral interchange program) command allows the user to perform disk file and peripheral transfer operations. See the Digital Research document titled "CP/M 2.0 User's Guide for CP/M 1.4 Owners" for a detailed description of new PIP operations. .SP .CE ASSEMBLER * .PP The ASM (assembler) command allows the user to assemble the specified program on disk. .SP .CE SUBMIT * .PP The SUBMIT command allows the user to submit a file of commands for batch processing. .SP .CE STATUS * .PP The STAT (status) command provides general statistical information about the file storage. See the Digital Research document titled "CP/M 2.0 User's Guide for CP/M 1.4 Owners" for a detailed description of new STAT operations. .SP .CE DUMP * .PP The DUMP command types the contents of the specified disk file on the console in hexadecimal form. .SP .CE LOAD * .PP The LOAD command reads the specified disk file of type HEX and produces a memory image file of type COM which can subsequently be executed. .SP .CE GENMOD .PP The GENMOD command accepts a file which contains two concatenated files of type HEX which are offset from each other by 0100H bytes, and produces a file of type PRL (page relocatable). The form of the GENMOD command is as follows: .sp .ti +3 1A>genmod b:file.hex b:file.prl $1000 .sp The first parameter is the file which contains two concatenated files of type HEX. The second parameter is the name of the destination file of type PRL. The optional third parameter is a specification of additional memory required by the program beyond the explicit code space. The form of the third parameter is a '$' followed by four hex ASCII digits. For example, if the program has been written to use all of 'available' memory for buffers, specification of the third parameter will ensure a minimum buffer allocation. .SP .CE GENHEX .PP The GENHEX command is used to produce a file of type HEX from a file of type COM. This is useful to be able to generate HEX files for GENMOD input. The GENHEX command has two parameters, the first is the COM file name and the second is the offset for the HEX file. For example: .sp .ti +3 0A>GENHEX PROG.COM 100 .SP .CE PRLCOM .PP The PRLCOM command accepts a file of PRL type and produces a file of COM type. If the destination COM file exists, a query is made to determine if the file should be deleted before continuing. .sp .ti +3 0A>prlcom b:program.prl a:program.com .SP .CE DYNAMIC DEBUGGING TOOL * .PP The DDT (dynamic debugging tool) command loads and executes the MP/M debugger. In systems with banked memory multiple DDT programs can be running concurrently in absolute TPAs. A PRL (relocatable) version of DDT is also provided which enables mutiple DDTs to run in a non-banked system. The name of the relocatable DDT is RDT. .pp MP/M DDT enhancements are described in Appendix J. .BP .sp .pp 1.5 Standard Resident System Processes .PP The standard resident system processes (RSPs) are new programs specifically designed to facilitate use of the MP/M operating system. The RSPs may either be present on disk as files of the PRL type, or they may be resident system processes. Resident system processes are selected at the time of system generation. .SP .CE SYSTEM STATUS .PP The MPMSTAT command allows the user to display the run-time status of the MP/M operating system. MPMSTAT is invoked by typing 'MPMSTAT' followed by a . A sample MPMSTAT output is shown below: .LI ****** MP/M Status Display ****** Top of memory = FFFFH Number of consoles = 02 Debugger breakpoint restart # = 06 Stack is swapped on BDOS calls Z80 complementary registers managed by dispatcher Ready Process(es): MPMSTAT Idle Process(es) DQing: [Sched ] Sched [ATTACH ] ATTACH [CliQ ] cli Process(es) NQing: Delayed Process(es): Polling Process(es): PIP Process(es) Flag Waiting: 01 - Tick 02 - Clock Flag(s) Set: 03 Queue(s): MPMSTAT Sched CliQ ATTACH MXParse MXList [Tmp0 ] MXDisk Process(es) Attached to Consoles: [0] - MPMSTAT [1] - PIP Process(es) Waiting for Consoles: [0] - TMP0 DIR [1] - TMP1 Memory Allocation: Base = 0000H Size = 4000H Allocated to PIP [1] Base = 4000H Size = 2000H * Free * Base = 6000H Size = 1100H Allocated to DIR [0] .AD .bp .pp .cp 4 The MP/M status display is intepreted as follows: .in +6 .pp Ready Process(es): The ready processes are those processes which are ready to run and are waiting for the CPU. The list of ready processes is ordered by the priority of the processes and includes the console number at which the process was initiated. The highest priority ready process is the running process. .pp Process(es) DQing: The processes DQing are those processes which are waiting for messages to be written to the specified queue. The queue name is in brackets followed by the names of processes, in priority order, which have executed read queue operations on the queue. .pp Process(es) NQing: The processes NQing are those processes which are waiting for an available buffer to write a message to the specified queue. The queue name is in brackets followed by the names of the processes, in priority order, which are waiting for buffers. .pp Delayed Process(es): The delayed processes are those which are delaying for a specified number of ticks of the system time unit. .pp Polling Process(es): The polling processes are those which are polling a specified I/O device for a device ready status. .pp Process(es) Flag Waiting: The processes flag waiting are listed by flag number and process name. .pp Flag(s) Set: The flags which are set are displayed. .pp Queue(s): All the queues in the system are listed by queue name. Queue names which are all in capital letters are accessible by command line interpreter input. For example, the SPOOL queue can be sent a message to spool a file by entering 'SPOOL' followed by a file name. Processes DQing from queues which have a name that matches the process name are given the console resource when they receive a message. Queue names that begin with 'MX' are called mutual exclusion queues. The display of a mutual exclusion queue includes the name of the process, if any, which has the mutual exclusion message. .pp Process(es) Attached to Consoles: The process attached to each console is listed by console number and process name. .pp Process(es) Waiting for Consoles: The processes waiting for each console are listed by console number and process name in priority order. They are processes which have detached from the console and are then waiting for the console before they can continue execution. .pp Memory Allocation: The memory allocation map shows the base, size, bank, and allocation of each memory segment. Segments which are not allocated are shown as '* Free *', while allocated segments are identified by process name and the console in brackets associated with the process. Memory segments which are set as pre-allocated during system generation by specifying an attribute of 0FFH are shown as '* Reserved *'. .qi .sp .CE SPOOLER .PP The SPOOL command allows the user to spool ASCII text files to the list device. Multiple file names may be specified in the command tail. The spooler expands tabs (ctl-I characters), assuming tab positions are set at every eighth column. .PP The spooler queue can be purged at any time by using the STOPSPLR command. .PP An example of the SPOOL command is shown below: .sp .ti +3 1A>SPOOL LOAD.LST,LETTER.PRN .pp The non-resident version of the spooler (SPOOL.PRL) differs in its operation from the SPOOL.RSP as follows: it uses all of the memory available in the memory segment in which it is running for buffer space; it displays a message indicating its status and then detaches from the console; it may be aborted from a console other than the initiator only by specifying the console number of the initiator as a parameter of the STOPSPLR command. .sp .ti +3 3B>STOPSPLR 2 .SP .CE DATE AND TIME .PP The TOD (time of day) command allows the user to read and set the date and time. Entering 'TOD' followed by a will cause the current date and time to be displayed on the console. Entering 'TOD' followed by a date and time will set the date and time when a is entered following the prompt to strike a key. Each of these TOD commands is illustrated below: .sp .li 1A>TOD Wed 02/06/80 09:15:37 -or- 1A>TOD 2/9/80 10:30:00 Strike key to set time Sat 02/09/80 10:30:00 .AD .pp Entering 'TOD P' will cause the current time and date to be continuously displayed until a key is struck at the console. .SP .CE SCHEDULER .PP The SCHED (scheduler) command allows the user to schedule a program for execution. Entering 'SCHED' followed by a date, time and command line will cause the command line to be executed when the specified date and time is reached. .PP In the example shown below, the program 'SAMPLE' will be loaded from disk and executed on February 8, 1980 at 10:30 PM. Note that only hours and minutes are specified, not seconds. Programs are scheduled to the nearest minute. .sp .ti +3 1A>SCHED 2/8/79 22:30 SAMPLE .SP .CE ABORT .PP The ABORT command allows the user to abort a running program. The program to be aborted is entered as a parameter in the ABORT command. .sp .ti +3 1A>ABORT RDT .pp A program initiated from another console may only be aborted by including its console number as a parameter of the ABORT command. .sp .ti +3 3B>ABORT RDT 1 .sp .br