mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-27 10:24:19 +00:00
Upload
Digital Research
This commit is contained in:
933
MPM OPERATING SYSTEMS/MPM I/MPM I SOURCE/14/mpmug23.tex
Normal file
933
MPM OPERATING SYSTEMS/MPM I/MPM I SOURCE/14/mpmug23.tex
Normal file
@@ -0,0 +1,933 @@
|
||||
.MB +5
|
||||
.MT -3
|
||||
.LL 65
|
||||
.PN 62
|
||||
.HE MP/M User's Guide
|
||||
.FT (All Information Herein is Proprietary to Digital Research.)
|
||||
.sp
|
||||
.pp
|
||||
2.4 Extended Disk Operating System Functions
|
||||
.pp
|
||||
The Extending Disk Operating System (XDOS) functions are covered in
|
||||
this section by describing the entry parameters and returned values
|
||||
for each XDOS function. The XDOS calling conventions are identical
|
||||
to those of the BDOS which are described in
|
||||
OPERATING SYSTEM CALL CONVENTIONS in section 2.1.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 128: ABSOLUTE MEMORY *
|
||||
* REQUEST *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 80H *
|
||||
* DE: MD Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Return code *
|
||||
* MD filled in *
|
||||
***************************************
|
||||
.pp
|
||||
The ABSOLUTE MEMORY REQUEST function allocates
|
||||
an absolute block of memory specified by the passed memory descriptor
|
||||
parameter. This
|
||||
function allows non-relocatable programs,
|
||||
such as CP/M *.COM files based at the absolute TPA address of
|
||||
0100H, to run in
|
||||
the MP/M 1.0 environment. The single passed parameter is the address
|
||||
of a memory descriptor. The memory descriptor contains four bytes:
|
||||
the memory segment base page address, the memory segment page size,
|
||||
the memory segment attributes, and bank. The only parameters
|
||||
filled in by the user
|
||||
are the base and size, the other parameters are filled in by XDOS.
|
||||
.pp
|
||||
The operation returns a "boolean" indicating whether or not the
|
||||
allocation was made.
|
||||
A returned value of FFH indicates failure to allocate the requested
|
||||
memory and a value of 0 indicates success.
|
||||
Note that base and size specify base page address and page size where
|
||||
a page is 256 bytes.
|
||||
.li
|
||||
|
||||
Memory Descriptor Data Structure:
|
||||
|
||||
PL/M:
|
||||
Declare memory$descriptor structure (
|
||||
base byte,
|
||||
size byte,
|
||||
attrib byte,
|
||||
bank byte );
|
||||
|
||||
.ad
|
||||
.cp 10
|
||||
.li
|
||||
Assembly Language:
|
||||
MEMDES:
|
||||
DS 1 ; base
|
||||
DS 1 ; size
|
||||
DS 1 ; attributes
|
||||
DS 1 ; bank
|
||||
.ad
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 129: RELOCATABLE MEMORY *
|
||||
* REQUEST *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 81H *
|
||||
* DE: MD Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Return code *
|
||||
* MD filled in *
|
||||
***************************************
|
||||
.PP
|
||||
The RELOCATABLE MEMORY REQUEST function allocates
|
||||
the requested contiguous memory to the calling program. The
|
||||
single passed parameter is the address of a memory descriptor. The
|
||||
only memory descriptor parameter filled in by the calling program is
|
||||
the
|
||||
size, the other parameters, base, attributes and bank, are filled in by
|
||||
XDOS.
|
||||
.pp
|
||||
The operation returns a boolean indicating whether or not the memory
|
||||
request could be satisifed.
|
||||
A returned value of FFH indicates failure to
|
||||
satisfy the request and a value of 0 indicates success.
|
||||
.pp
|
||||
Note that base and size specify base page address and page size where
|
||||
a page is 256 bytes.
|
||||
(See function 128: ABSOLUTE MEMORY REQUEST for a description of
|
||||
the memory descriptor data structure.)
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 130: MEMORY FREE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 82H *
|
||||
* DE: MD Address *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The MEMORY FREE function releases the
|
||||
specified memory segment back to the operating system. The passed
|
||||
parameter is the address of a memory descriptor.
|
||||
Nothing is returned as
|
||||
a result of this operation.
|
||||
(See function 128: ABSOLUTE MEMORY REQUEST for a description of
|
||||
the memory descriptor data structure.)
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 131: POLL *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 83H *
|
||||
* E: Device Number *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The POLL function polls the specified device
|
||||
until a ready condition is received. The calling process relinquishes
|
||||
the processor until the poll is satisfied, allowing other processes
|
||||
to execute.
|
||||
.pp
|
||||
Note that the POLL function is intended for use in the custom XIOS
|
||||
since an association is made in the XIOS between the device number
|
||||
and the actual code executed for the poll operation. This does not
|
||||
exclude other uses of the poll function but it does mean that an
|
||||
application program making a poll call must be matched to a specific
|
||||
XIOS.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 132: FLAG WAIT *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 84H *
|
||||
* E: Flag Number *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Return code *
|
||||
***************************************
|
||||
.PP
|
||||
The FLAG WAIT function causes a process to
|
||||
relinquish the processor until the flag specified in the call is set.
|
||||
The flag wait operation is used in an interrupt driven
|
||||
system to cause the calling process to 'wait' until a specific
|
||||
interrupt condition occurs.
|
||||
.pp
|
||||
The operation returns a boolean indicating whether or not a successful
|
||||
FLAG WAIT was performed. A returned value of FFH indicates that no
|
||||
flag wait occurred because another process was already waiting on
|
||||
the specified flag. A returned value of 0 indicates success.
|
||||
.pp
|
||||
Note that flags are non-queued, which means that access to flags
|
||||
must be carefully managed. Typically the physical interrupt handlers
|
||||
will set flags while a single process will wait on each flag.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 133: FLAG SET *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 85H *
|
||||
* E: Flag Number *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Return code *
|
||||
***************************************
|
||||
.PP
|
||||
The FLAG SET function wakes up a waiting process.
|
||||
The FLAG SET function is usually called by an interrupt service
|
||||
routine after servicing an interrupt and determining which flag is
|
||||
to be set.
|
||||
.ti +6
|
||||
The operation returns a boolean indicating whether or not a successful
|
||||
FLAG SET was performed. A returned value of FFH indicates that a flag
|
||||
over-run has occurred, i.e. the flag was already set when a flag set
|
||||
function was called. A returned value of 0 indicates success.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 134: MAKE QUEUE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 86H *
|
||||
* DE: QCB Address *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The MAKE QUEUE function sets up a queue control
|
||||
block. A queue is configured as either circular or linked depending
|
||||
upon the message size. Message sizes of 0 to 2 bytes use circular
|
||||
queues while message sizes of 3 or more bytes use linked queues.
|
||||
.PP
|
||||
A single parameter is passed to make a queue, the queue control block
|
||||
address. The queue control block must contain the queue name, message
|
||||
length, number of messages, and sufficient space to accomodate the
|
||||
messages (and links if the queue is linked).
|
||||
.pp
|
||||
The queue control block data structures for both circular and linked
|
||||
queues are described in section 2.3.
|
||||
.pp
|
||||
Queues can only be created either in common memory or by
|
||||
user programs in non-banked systems. The reason is that
|
||||
queues are all maintained on a linked list which must be
|
||||
accessible at all times. I.E., a queue cannot reside in a
|
||||
memory segment which is bank switched. However, a queue
|
||||
created in common memory can be accessed by all system and
|
||||
user programs.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 135: OPEN QUEUE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 87H *
|
||||
* DE: UQCB Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Return code *
|
||||
***************************************
|
||||
.PP
|
||||
The OPEN QUEUE function places the actual queue
|
||||
control block address into the user queue control block.
|
||||
The result of this function is that a user program can obtain access
|
||||
to queues by knowing only the queue name, the actual address
|
||||
of the queue itself is obtained as a result of opening the queue.
|
||||
Once a queue has been opened, the queue may be read from or written to
|
||||
using the queue read and write operations.
|
||||
.PP
|
||||
The function returns a boolean indicating whether or not the open
|
||||
queue operation found the queue to be opened. A returned value of
|
||||
0FFH indicates failure while a zero indicates success.
|
||||
.pp
|
||||
The user queue control block data structure is described in section
|
||||
2.3.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 136: DELETE QUEUE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 88H *
|
||||
* DE: QCB Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Return Code *
|
||||
***************************************
|
||||
.PP
|
||||
The DELETE QUEUE function removes the specified
|
||||
queue from the queue list.
|
||||
A single parameter is passed to delete a queue, the address of the
|
||||
actual queue.
|
||||
.PP
|
||||
The function returns a boolean indicating whether or not the delete
|
||||
queue operation deleted the queue. A returned value of
|
||||
0FFH indicates failure, usually because some process is DQing from
|
||||
the queue. A returned value of 0 indicates success.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 137: READ QUEUE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 89H *
|
||||
* DE: UQCB Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Message read *
|
||||
***************************************
|
||||
.PP
|
||||
The READ QUEUE function reads a message from
|
||||
a specified queue. If no message is available at the queue the
|
||||
calling process relinquishes the processor until a message is posted
|
||||
at the queue. The single passed parameter is the address of a user
|
||||
queue control block.
|
||||
When a message is available at the queue, it is copied into the
|
||||
buffer pointed to by the MSGADR field of the user queue control block.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 138: CONDITIONAL READ *
|
||||
* QUEUE *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 8AH *
|
||||
* DE: UQCB Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Return code *
|
||||
* Message read if available *
|
||||
***************************************
|
||||
.PP
|
||||
The CONDITIONAL READ QUEUE function reads
|
||||
a message from a specified queue if a message is available.
|
||||
The single passed parameter is the address of a user
|
||||
queue control block.
|
||||
If a message is available at the queue, it is copied into the
|
||||
buffer pointed to by the MSGADR field of the user queue control block.
|
||||
.PP
|
||||
The operation returns a boolean indicating whether or not a
|
||||
message was available at the queue. A returned value of
|
||||
0FFH indicates no message while a zero indicates that a message was
|
||||
available and that it was copied into the user buffer.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 139: WRITE QUEUE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 8BH *
|
||||
* DE: UQCB Address *
|
||||
* Message to be sent *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The WRITE QUEUE function writes a message to
|
||||
a specified queue. If no buffers are available at the queue, the
|
||||
calling process relinquishes the processor until a buffer is available
|
||||
at the queue. The single passed parameter is the address of a user
|
||||
queue control block.
|
||||
When a buffer is available at the queue, the
|
||||
buffer pointed to by the MSGADR field of the user queue control block
|
||||
is copied into the actual queue.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 140: CONDITIONAL WRITE *
|
||||
* QUEUE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 8CH *
|
||||
* DE: UQCB Address *
|
||||
* Message to be sent *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Return code *
|
||||
***************************************
|
||||
.PP
|
||||
The CONDITIONAL WRITE QUEUE function writes
|
||||
a message to a specified queue if a buffer is available.
|
||||
The single passed parameter is the address of a user
|
||||
queue control block.
|
||||
If a buffer is available at the queue, the
|
||||
buffer pointed to by the MSGADR field of the user queue control block
|
||||
is copied into the actual queue.
|
||||
.PP
|
||||
The operation returns a boolean indicating whether or not a
|
||||
buffer was available at the queue. A returned value of
|
||||
0FFH indicates no buffer while a zero indicates that a buffer was
|
||||
available and that the user buffer was copied into it.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 141: DELAY *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 8DH *
|
||||
* DE: Number of Ticks *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The DELAY function delays execution of the
|
||||
calling process for the specified number of system time units.
|
||||
Use of the delay operation avoids the typical programmed delay
|
||||
loop. It allows other processes to use the processor while the
|
||||
specified period of time elapses. The system time unit is typically
|
||||
60 Hz (16.67 milliseconds) but may vary according to application.
|
||||
For example it is likely that in Europe it would be 50 Hz (20
|
||||
milliseconds).
|
||||
.PP
|
||||
The delay is specifed as a 16-bit integer. Since calling the delay
|
||||
procedure is usually asynchronous to the actual time base itself, there
|
||||
is up to one tick of uncertainty in the exact amount of time delayed.
|
||||
Thus a delay of 10 ticks gaurantees a delay of at least 10 ticks, but
|
||||
it may be nearly 11 ticks.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 142: DISPATCH *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 8EH *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The DISPATCH operation allows the operating system
|
||||
to determine the highest priority ready process and then to give it the
|
||||
processor. This call is provided in XDOS to allow systems without
|
||||
interrupts the capability of sharing the processor among compute
|
||||
bound processes. Since all user processes usually run at the same
|
||||
priority, invoking the dispatch operation at various points
|
||||
in a program will allow other users to obtain the processor
|
||||
in a round-robin fashion.
|
||||
Invoking the dispatch function does not take the calling process off
|
||||
of the ready list.
|
||||
.PP
|
||||
Dispatch is intended for non-interrupt driven environments in
|
||||
which it is desirable to enable a compute bound process
|
||||
to relinquish the use of the processor.
|
||||
.pp
|
||||
Another use of the dispatch function is to safely enable interrupts
|
||||
following the execution of a disable interrupt instruction (DI).
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 143: TERMINATE PROCESS *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 8FH *
|
||||
* D: Conditional *
|
||||
* Memory Free *
|
||||
* E: Terminate Code *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The TERMINATE PROCESS function terminates
|
||||
the calling process. The passed parameters indicate whether
|
||||
or not the process should be terminated if it is a system process
|
||||
and if the memory segment is to be released.
|
||||
A 0FFH in the E register indicates that the process should be unconditionally terminated,
|
||||
a zero indicates that only a user process is to be deleted.
|
||||
If a user process is being terminated and Register D is a
|
||||
0FFH, the memory segment is not released. Thus a process
|
||||
which is a child of a parent process both executing in the
|
||||
same memory segment can terminate without freeing the
|
||||
memory segment which is also occupied by the parent.
|
||||
.pp
|
||||
There are no results
|
||||
returned from this operation, the calling process simply ceases
|
||||
to exist as far as MP/M is concerned.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 144: CREATE PROCESS *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 90H *
|
||||
* DE: PD Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* PD filled in *
|
||||
***************************************
|
||||
.PP
|
||||
The CREATE PROCESS function creates one
|
||||
or more processes by placing the passed process descriptors
|
||||
on the MP/M ready list.
|
||||
.PP
|
||||
A single parameter is passed, the address of a process
|
||||
descriptor. The first field of the process descriptor is a link
|
||||
field which may point to another process descriptor.
|
||||
.pp
|
||||
Processes can only be created either in common memory or by
|
||||
user programs in non-banked systems. The reason is that
|
||||
process descriptors are all maintained on linked lists
|
||||
which must be accessible at all times.
|
||||
.pp
|
||||
The process descriptor data structure is described in section 2.3.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 145: SET PRIORITY *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 91H *
|
||||
* E: Priority *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The SET PRIORITY function sets the priority of
|
||||
the calling process to that of the passed parameter. This function
|
||||
is useful in situations where a process needs to have a high priority
|
||||
during an initialization phase, but after that is to run at a lower
|
||||
priority.
|
||||
.PP
|
||||
A single passed parameter contains the new process priority. There
|
||||
are no results returned from setting priority.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 146: ATTACH CONSOLE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 92H *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The ATTACH CONSOLE function attaches the console
|
||||
specified in the CONSOLE field of the process descriptor
|
||||
to the calling process. If the console is already attached to some
|
||||
other process,
|
||||
the calling process relinquishes the processor until the console
|
||||
is detached from that process and the calling process is the highest
|
||||
priority process waiting for the console.
|
||||
.PP
|
||||
There are no passed parameters and there are no returned results.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 147: DETACH CONSOLE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 93H *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The DETACH CONSOLE function detaches the console
|
||||
specified in the CONSOLE field of the process descriptor
|
||||
from the calling process. If the console is not currently attached
|
||||
no action takes place.
|
||||
.PP
|
||||
There are no passed parameters and there are no returned results.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 148: SET CONSOLE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 94H *
|
||||
* E: Console *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The SET CONSOLE function detaches the currently
|
||||
attached console and then attaches the console specified as a calling
|
||||
parameter. If the console to be attached is already attached to
|
||||
another process descriptor, the calling process relinquishes the
|
||||
processor until the console is available.
|
||||
.PP
|
||||
A single passed parameter contains the console number to be attached.
|
||||
There are no returned results.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 149: ASSIGN CONSOLE *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 95H *
|
||||
* DE: APB Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Return code *
|
||||
***************************************
|
||||
.PP
|
||||
The ASSIGN CONSOLE function directly assigns
|
||||
the console to a specified process. This assignment is done regardless
|
||||
of whether or not the console is currently attached to some other
|
||||
process.
|
||||
A single parameter is passed to assign console which is the address
|
||||
of a data structure containing the console number for the assignment,
|
||||
an 8 character ASCII process name, and a boolean indicating whether
|
||||
or not a match with the console field of the process descriptor
|
||||
is required (true or 0FFH indicates it is required).
|
||||
.PP
|
||||
The operation returns a boolean indicating whether or not the
|
||||
assignment was made. A returned value of 0FFH indicates failure to
|
||||
assign the console, either because a process descriptor with the
|
||||
specified name could not be found, or that a match was required and
|
||||
the console field of the process descriptor did not match the
|
||||
specified console. A returned value of zero indicates a successful
|
||||
assignment.
|
||||
.sp 2
|
||||
.cp 24
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 150: SEND CLI COMMAND *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 96H *
|
||||
* DE: CLICMD Address *
|
||||
* *
|
||||
***************************************
|
||||
.PP
|
||||
The SEND CLI COMMAND function permits running
|
||||
programs to send command lines to the Command Line Interpreter.
|
||||
A single parameter is passed which is the address of a data
|
||||
structure containing the default disk/user code, console and command
|
||||
line itself (shown below).
|
||||
.pp
|
||||
The default disk/user code is the first byte of the data structure.
|
||||
The high order four bits contain the default disk drive and the low
|
||||
order four bits contain the user code. The second byte of the data
|
||||
structure
|
||||
contains the console number for the program being executed. The
|
||||
ASCII command line begins with the third byte and is terminated with
|
||||
a null byte.
|
||||
.PP
|
||||
There are no results returned to the calling program.
|
||||
.pp
|
||||
The following example illustrates the SEND CLI COMMAND data
|
||||
structure:
|
||||
.li
|
||||
|
||||
PL/M:
|
||||
Declare CLI$command structure (
|
||||
disk$user byte,
|
||||
console byte,
|
||||
command$line (129) byte);
|
||||
|
||||
Assembly Language:
|
||||
CLICMD:
|
||||
DS 1 ; default disk / user code
|
||||
DS 1 ; console number
|
||||
DS 129 ; command line
|
||||
.ad
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 151: CALL RESIDENT *
|
||||
* SYSTEM PROCEDURE *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 97H *
|
||||
* DE: CPB Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Registers HL: Return code *
|
||||
***************************************
|
||||
.PP
|
||||
The CALL RESIDENT SYSTEM PROCEDURE function
|
||||
permits programs to call the optional resident system procedures.
|
||||
A single passed parameter is the address of a call parameter
|
||||
block data structure (shown below) which contains the address of an 8 character ASCII
|
||||
resident
|
||||
system procedure name followed by a two byte parameter to be passed
|
||||
to the resident system procedure.
|
||||
.PP
|
||||
The operation returns a 0001H if the resident system procedure called
|
||||
is not present, otherwise it returns the code passed back from
|
||||
the resident system procedure. Typically a returned value of FFH
|
||||
indicates failure while a zero indicates success.
|
||||
.pp
|
||||
The following example illustrates the call parameter block data
|
||||
structure:
|
||||
.li
|
||||
|
||||
PL/M:
|
||||
Declare CALL$PB structure (
|
||||
Name$adr address,
|
||||
Param address ) initial (
|
||||
.name,0);
|
||||
|
||||
Declare name (8) byte initial (
|
||||
'Proc1 ');
|
||||
|
||||
Assembly Language:
|
||||
CALLPB:
|
||||
DW NAME
|
||||
DW 0 ; parameter
|
||||
|
||||
NAME:
|
||||
DB 'Proc1 '
|
||||
|
||||
.ad
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 152: PARSE FILENAME *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 98H *
|
||||
* DE: PFCB Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Registers HL: Return code *
|
||||
* Parsed file control block *
|
||||
***************************************
|
||||
.PP
|
||||
The PARSE FILENAME function prepares a file
|
||||
control block from an input ASCII string containing a file name
|
||||
terminated by a null or a carriage return.
|
||||
The parameter is the address of a data structure (shown below) which contains
|
||||
the address of the ASCII file name string followed by the address of
|
||||
the target file control block.
|
||||
.PP
|
||||
The operation returns an FFFFH if the input ASCII string contains an
|
||||
invalid file name. A zero is returned if the ASCII string contains
|
||||
a single valid file name, otherwise the address of the first character
|
||||
following the file name is returned.
|
||||
.pp
|
||||
The following example illustrates the parse file name control block
|
||||
data structure:
|
||||
.li
|
||||
|
||||
PL/M:
|
||||
Declare Parse$FN$CB structure (
|
||||
File$name$adr address,
|
||||
FCB$adr address ) initial (
|
||||
.file$name,.fcb );
|
||||
|
||||
Declare file$name (128) byte;
|
||||
Declare fcb (36) byte;
|
||||
|
||||
Assembly Language:
|
||||
PFNCB:
|
||||
DW FLNAME
|
||||
DW FCB
|
||||
|
||||
FLNAME:
|
||||
DS 128
|
||||
DS 36
|
||||
|
||||
.ad
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 153: GET CONSOLE NUMBER *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 99H *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Console Number *
|
||||
***************************************
|
||||
.PP
|
||||
The GET CONSOLE NUMBER funtion obtains
|
||||
the value of the console field from the process descriptor of
|
||||
the calling program. There are no passed parameters and the
|
||||
returned result is the console number of the calling process.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 154: SYSTEM DATA ADDRESS *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 9AH *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Registers HL: System Data Page*
|
||||
* Address *
|
||||
***************************************
|
||||
.PP
|
||||
The SYSTEM DATA ADDRESS function obtains
|
||||
the base address of the system data page. The system data page
|
||||
resides in the top 256 bytes of available memory. It contains
|
||||
configuration information used by the MP/M loader as well as
|
||||
run time data including the submit flags.
|
||||
The contents of the system data page are described in section 3.4
|
||||
under SYSTEM DATA.
|
||||
.pp
|
||||
There are no passed parameters and the returned result is the
|
||||
base address of the system data page.
|
||||
.sp 2
|
||||
.cp 18
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 155: GET DATE AND TIME *
|
||||
* *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 9BH *
|
||||
* DE: TOD Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Time and date *
|
||||
***************************************
|
||||
.PP
|
||||
The GET DATE AND TIME function obtains the
|
||||
current encoded date and time. A single passed parameter is the
|
||||
address of a data structure (shown below) which is to contain the date and time.
|
||||
The date is represented as a 16-bit integer with day 1 corresponding
|
||||
to January 1, 1978. The time is respresented as three bytes:
|
||||
hours, minutes and seconds, stored as two BCD digits.
|
||||
.pp
|
||||
The following example illustrates the TOD data structure:
|
||||
.li
|
||||
|
||||
PL/M:
|
||||
Declare TOD structure (
|
||||
date address,
|
||||
hour byte,
|
||||
min byte,
|
||||
sec byte );
|
||||
|
||||
Assembly Language:
|
||||
TOD: DS 2 ; Date
|
||||
DS 1 ; Hour
|
||||
DS 1 ; Minute
|
||||
DS 1 ; Second
|
||||
.ad
|
||||
.sp 2
|
||||
.cp 15
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 156: RETURN PROCESS *
|
||||
* DESCRIPTOR ADDRESS *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 9CH *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register HL: PD Address *
|
||||
***************************************
|
||||
.pp
|
||||
The RETURN PROCESS DESCRIPTOR ADDRESS function obtains the
|
||||
address of calling processes process descriptor. By definition
|
||||
this is the head of the ready list.
|
||||
.sp 2
|
||||
.cp 17
|
||||
.li
|
||||
***************************************
|
||||
* *
|
||||
* FUNCTION 157: ABORT SPECIFIED *
|
||||
* PROCESS *
|
||||
***************************************
|
||||
* Entry Parameters: *
|
||||
* Register C: 9DH *
|
||||
* Register DE: APB Address *
|
||||
* *
|
||||
* Returned Value: *
|
||||
* Register A: Return Code *
|
||||
***************************************
|
||||
.pp
|
||||
The ABORT SPECIFIED PROCESS function permits a process to
|
||||
terminate another specified process. The passed parameter is the
|
||||
address of an Abort Parameter Block (ABTPB) which contains the
|
||||
following data structure:
|
||||
.li
|
||||
|
||||
PL/M:
|
||||
Declare Abort$paramter$block structure (
|
||||
pdadr address,
|
||||
termination$code address,
|
||||
name (8) byte,
|
||||
console byte );
|
||||
|
||||
Assembly Language:
|
||||
APB:
|
||||
DS 2 ; process desciptor address
|
||||
DS 2 ; termination code
|
||||
DS 8 ; process name
|
||||
DS 1 ; console used by process
|
||||
.ad
|
||||
.pp
|
||||
If the process descriptor address is known it can be filled in and
|
||||
the process name and console can be omitted. Otherwise the process
|
||||
descriptor address field should be a zero and the process name and
|
||||
console must be specified. In either case the termination code
|
||||
must be supplied which is the parameter passed to FUNCTION 143:
|
||||
TERMINATE PROCESS.
|
||||
.br
|
||||
|
||||
Reference in New Issue
Block a user