gtps1m29System Macros

CXFRC-Create a New ECB and Transfer Control

Use this system macro to create an entry control block (ECB) and permit the control program (CP) to transfer control to another program that is then free to use any CP macros.

Format




label
A symbolic name may be assigned to the macro statement.

EXEC=R6|Rz|NONE
This parameter specifies the code (if any) to be processed after the ECB is dispatched. The parameter specifies a register that contains the address of 8 bytes of code to be processed (normally an enter expansion) or the value NONE, which indicates that the calling program will perform appropriate ECB formatting and scheduling). If the parameter is omitted, the default value is register R6. The NONE option is restricted to ECB=IMMED, LIST=NONE type calls.

LOWCORE=symbol1
Symbolic name of the user's routine for use in case of a low-core condition. If no routine is supplied, no check will be performed for the low-core condition. This parameter is only meaningful with DEFERred ECBs. See Programming Considerations for more information.

CBRW=Ry
When no core block reference word (CBRW) is specified, the macro service routine will initialize CBRW 0 in the created ECB to empty.

When CBRW=Ry is specified, Rx designates a general purpose register which must point to an 8-byte field formatted as a CBRW. The block address in the CBRW must be a system virtual memory (SVM) address that will be valid on the target I-stream.

When CXFRC macro processing is complete, the 8-byte field pointed to by Ry will be formatted as an empty CBRW.

The CXFRC post interrupt will attach the storage at the SVM address to the address space of the created ECB (the ECB virtual memory), and initialize CBRW 0 with the data passed. The SVM address in the CBRW will be converted to the appropriate ECB virtual address.

PRIORITY=LOW|HIGH
Normally, a transfer block created to temporarily contain information relating to the ECB will be added to the bottom of the Ready List. This mode of processing reflects PRIORITY=LOW (ECB=DEFER, and LIST=READY), the defaults for each of these parameters. If the block (or ECB) is to be added to the top of the desired list, specify PRIORITY=HIGH.

LIST
The transfer block (or ECB) is added to the list specified for subsequent dispatching by the CPU loop.

READY,
Requests that the block be added to the Ready List.

INPUT
Requests that the block be added to the Input List.

NONE
Requests that the transfer block or ECB be created and its address be returned to the caller, and that the block is not to be added to any CPU loop lists at this time.

ECB
Specify one of the following:

DEFER
Specifies whether a transfer block is to be created to temporarily hold ECB information for later ECB creation, or whether the ECB is to be created immediately. The default is DEFER. If the ECB is created immediately, its address is returned to the caller in the register specified by the BLOCK parameter. If ECB creation is deferred, the address returned is that of the transfer block.

IMMED
Is restricted to code processing in the system virtual memory (SVM).

BLOCK=R6|Rw
Upon return from CXFRC macro processing, the register specified will contain either the address of the transfer block created to hold ECB information or the address of the ECB if the caller requested immediate ECB creation. The default value is register R6.

PIADDR=Rv
Upon return from CXFRC macro processing, the register specified will contain the address of CXFRC Post Interrupt Routine. If LIST=NONE was specified, this address may be used in a subsequent ADDxC macro call to request that the block being added to the desired list be processed by the appropriate Post Interrupt Routine. There is no default value for this parameter.

FORMFLAG=selfdef
A one-byte self-defining term may be supplied to be used to initialize the FORMAT FLAG field of the ECB. If the parameter is omitted, a default value of CFCXE will be provided by the TPF system.

UEXIT=exit_label
This parameter specifies a label used in the CXFRC expansion to identify the origin of the control transfer. The label is used in the UCCCMXF user exit.

SAVREG
The specified volatile registers will be saved by the macro in the stack area or in the registers specified by the WKREG parameter. Up to 3 registers can be specified. Those registers are R0, R1, R2. If this keyword is omitted, none of the 3 registers will be saved. You should not save a volatile register if you expect it to contain an output parameter. The register will be overwritten with its original contents, since the reload is the last thing performed by the macro.

WKREG
The specified symbolic register names are free to be used by the macro to save the volatile registers coded on the SAVREG parameter. Up to 3 registers can be specified, but the standard linkage registers R13 through R2 cannot be used here. This parameter is used in conjunction with the SAVREG parameter to generate efficient code and enhance the performance of the macro. The number of registers specified by WKREG should be less than or equal to the number of registers specified by SAVREG. If this parameter is omitted or not used to its maximum capacity, code optimization is sacrificed.

RTTMSG=Ru
The RTTMSG parameter passes the address of the message block to the Realtime Trace (RTT) interface.

There is no default. RTTMSG has no meaning when ECB=DEFER is used.

DSECT=NO|YES
Optional parameter used to request the generation of a DSECT describing the parameter list generated for the CXFRC call. The use of this parameter should be limited to the CXFRC service routines. If DSECT=YES is coded, no CXFRC expansion is generated. The default is DSECT=NO.

Entry Requirements

The EXEC parameter must specify a general purpose register that contains the address of 8 bytes of code (normally an enter expansion) that will be processed when the ECB is selected for processing.

Return Conditions

Programming Considerations

Examples