MME.MME - execute a given batch MME (system call).

Alternate Entry Name: MME_MME

Usage:

B:
   extrn mme.a, mme.q;
   ...
   mme.mme(number [,arg1, arg2, ...])
C:
   extern int mme_a, mme_q;
   void mme_mme(int number, ...);

Where:

number
is the number of the MME to be executed.
arg1, arg2, ...
is a list of words to follow the MME machine instruction.

Description:

MME.MME allows direct access to the MME functions. The A and Q registers are loaded from the externals "mme.a" and "mme.q" respectively. After the MME has been executed, these externals are set to the contents of the A and Q registers.

MME.MME arranges things so that the MME is executed in the stack, using the caller's stack pointer. Because of this, your program can accept a return to some point other than the instruction immediately following the last argument passed to the MME. For example,

%b/manif/mmes
TRA_ = 0710000; /* "tra" op code */
...
mme.q = catfile<<18 | 0600000 | filecode;
mme.mme( GEMORE_, 05000000 | buffer, bad | TRA_ );
     return( 0 ); /* good return */
bad: return( -1 ); /* error return */
...

Notes:

The MME number is an 18 bit quantity. Make sure the upper 18 bits of "number" are zero. The upper 18 bits are added to the MME opcode, and may be used for such purposes as specifying the inhibit bit in the MME.

See Also:

expl b lib external sy.reg

Copyright © 1996, Thinkage Ltd.