&DL      PROC  &P,3,&IRL=DEFAULT,&QUE=DEFAULT                           00000000
XSVCCALL NAME  X         . 02/26/76 VERSION OF ICAM SVC GENERATION PROC 00000100
CYIELD   NAME  0                   . USER/MCP YIELD                     00000200
RELEASE  NAME  1                   . RELEASE CONTROL                    00000300
TL#RELSE NAME  1                   . RELEASE CONTROL                    00000400
CANUSER  NAME  2                   . CANCEL ICAM USER (R6 = TCB ADDR)   00000500
RTNUSER  NAME  2                   . OLD NAME FOR CANUSER (UNIQUE IRL)  00000600
SCHEDULE NAME  3                   . SCHEDULE ACTIVITY VIA ARP PACKET   00000700
TL#SCHED NAME  3                   . SCHEDULE ACTIVITY VIA ARP PACKET   00000800
ETPTG    NAME  4                   . ELAPSED TIME SCHEDULE REQUEST      00000900
TL#CLOCK NAME  4                   . ELAPSED TIME SCHEDULE REQUEST      00001000
CCRCALL  NAME  5                   . USER/MCP I/O DISPATCH              00001100
TL#IOCAL NAME  5                   . USER/MCP I/O DISPATCH              00001200
CAWAKE   NAME  6                   . USER AWAKE                         00001300
CCTIMER  NAME  7                   . ICAM/V LINE TIME OUT SVC TO CPIOCS 00001400
NONINT   NAME  14                  . LOCK OUT INTERRUPTS                00001500
INTRPT   NAME  15                  . RELEASE INTERRUPT LOCK OUT         00001600
MCPCALL  NAME  (B,1)               . DDI USER CALL                      00001700
.* ***   NAME  8 RESERVED FOR $ITRAC TRACE ROUTINE                  *** 00001800
.* .                                                                    00001900
.* . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** 00002000
.* .                                                                  * 00002100
.* . THIS AND ALL RELATED PROGRAMS ARE PROPERTY OF                    * 00002200
.* .                                                                  * 00002300
.* . UNIVAC CONTAINING ITS CONFIDENTIAL INFORMATION                   * 00002400
.* .                                                                  * 00002500
.* . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** 00002600
         GBL   &MCP                                                     00002700
         GBL   &VS9                                                     00002800
         GBL   &USER94                                                  00002900
         LCL   &FUNCT                                                   00003000
         LCL   &AAAAA,&BBBBB,&CCCCC,&DDDDD                              00003100
         LCL   &EEEEE,&FFFFF,&GGGGG,&HHHHH                              00003200
         LCL   &JJJJJ,&KKKKK,&MMMMM,&NNNNN                              00003300
         LCL   &PPPPP                                                   00003400
.* .                                                                    00003500
.*                                 . INITIALIZE SET SYMBOLS             00003600
&AAAAA   SET   '&P(1)'                                                  00003700
&BBBBB   SET   0                   . IRL SUB-FUNC CODE BIT SETTING      00003800
&CCCCC   SET   0                   . TASK SUB-FUNC CODE BIT SETTING     00003900
&HHHHH   SET   0                   . 2NDARY TASK ID IN SUB-FUNC CODE    00004000
&EEEEE   SET   0                   . INDICATES DON'T SAVE R14 AND R15   00004100
&FFFFF   SET   0                   . INDICATES DON'T LOAD R1            00004200
&DDDDD   SET   1                   . INDICATES P1 = (1)                 00004300
&KKKKK   SET   0                   . INDICATES REQUEST WILL NOT BE QUED 00004400
&NNNNN   SET   0                   . INDICATES REQUEST IS NOT RTNUSER   00004500
&PPPPP   SET   0                   . INDICATES NO IRL LM AFTER BALR     00004600
         PRINT OFF                                                      00004700
.*                                                                      00004800
         SYSTEM                                                         00004900
         PRINT ON                                                       00005000
         DO    &VS9                                                     00005100
         CNOP  0,4                                                      00005200
         ENDO                                                           00005300
         DO    '&P(1)'='(1)'                                            00005400
&DDDDD   SET   0                                                        00005500
         ENDO                                                           00005600
.*                                                                      00005700
&MMMMM   SET   0                                                        00005800
         DO    &MCP                . DETERMINE SVC OR BAL               00005900
&MMMMM   SET   1                   . USE BALR FOR MCP INTERFACE         00006000
         ENDO                                                           00006100
         DO    '&P(0)'='0'         . FORCE CYIELD TO USE SVC            00006200
&MMMMM   SET   0                                                        00006300
         ENDO                                                           00006400
         DO    '&P(0)'='7'         . FORCE SVC FOR CCTIMER              00006500
&MMMMM   SET   0                                                        00006600
         DO    &VS9=0                                                   00006700
         DC    X'07000700'                                              00006800
         PNOTE 'P','CCTIMER MACRO NOT SUPPORTED UNDER OS/3'             00006900
         GOTO  .EXIT                                                    00007000
         ENDO                                                           00007100
         ENDO                                                           00007200
.*                                                                      00007300
         DO    N'&P(0)=1                                                00007400
&FUNCT   SET   &P(0)               . GROUP A SVC FUNCTION               00007500
         DO    &MCP=0              . CHECK FOR ILG USER GROUP A MACRO   00007600
         DO    ((&FUNCT>0)**(&FUNCT<5))++(&FUNCT>7) . GT 0 & LT 5; GT 7 00007700
         DC    X'07000700'                                              00007800
         PNOTE 'P','REQUESTED ICAM MACRO NOT SUPPORTED TO USERS'        00007900
         GOTO  .EXIT                                                    00008000
         ENDO                                                           00008100
         ENDO                                                           00008200
&GGGGG   SET   X'00'               . GROUP A SVC CALL                   00008300
         DO    &FUNCT=2                                                 00008400
&EEEEE   SET   1                   . SAVE IRL REGS UNLESS IRL=NO        00008500
&NNNNN   SET   1                   . SET RTNUSER FLAG                   00008600
         ENDO                                                           00008700
         DO    (&FUNCT=3)++(&FUNCT=4)                                   00008800
&KKKKK   SET   1                   . SET QUEUEING FLAG (SCHEDULE/ETPTG) 00008900
         ENDO                                                           00009000
         DO    (&FUNCT=1)**&VS9    . DO FOR VS/9 RELEASE                00009100
&EEEEE   SET   1                   . SAVE REGISTERS FOR VS/9 RELEASE    00009200
&PPPPP   SET   1                   . NO IRL LM AFTER BALR               00009300
         ENDO                                                           00009400
         DO    ('&P(0)'>'2')**('&P(0)'<'6')  . GT 2 AND LT 6            00009500
&EEEEE   SET   1                   . SAVE R14 AND R15 UNLESS IRL=NO     00009600
&FFFFF   SET   1                   . P1 MUST HAVE ADDRESS               00009700
         ENDO                                                           00009800
         DO    &VS9**(&FUNCT=6)                                         00009900
         DC    X'07000700'                                              00010000
         PNOTE 'P','CAWAKE MACRO NOT SUPPORTED UNDER VS/9'              00010100
         GOTO  .EXIT                                                    00010200
         ENDO                                                           00010300
         DO    &FUNCT=14                                                00010400
         DO    &VS9=0                                                   00010500
         SSM   TN#GZRO                                                  00010600
         GOTO  .EXIT                                                    00010700
         ENDO                                                           00010800
*                                      GO NON INTERRUPTABLE             00010900
         L     R3,TN#GXVT                                               00011000
         L     R3,ESQCAT-EXVT(,R3) . GET ACTIVE TCB ADDRESS             00011100
         L     R3,TTICAM-ETCB(,R3) . GET ICAM WORK AREA                 00011200
         STM   R4,R5,TT#TINTS-TT#TSKWK(R3)                              00011300
         L     R4,=V(EXVTBASE)                        R4=A(XVT)         00011400
         L     R5,ESQCAT-EXVT(0,R4)                   R5=A(TCB)         00011500
         L     R5,ETCBSTA-ETCB(0,R5)                  R5=A(STACK)       00011600
         MVC   TT#TMSK-TT#TSKWK(L'TT#TMSK,R3),KKIMR-KKSTK(R5) SAVE MASK 00011700
         NC    KKIMR-KKSTK(3,R5),XXMKNINT-EXVT(R4)    NEW INT MASK      00011800
         EX    0,XXMKNINT-EXVT(0,R4)                  SSM               00011900
         LM    R4,R5,TT#TINTS-TT#TSKWK(R3)                              00012000
         L     R3,TT#TIRLL-TT#TSKWK(,R3)                                00012100
         GOTO  .EXIT                                                    00012200
         ENDO                                                           00012300
         DO    &FUNCT=15                                                00012400
         DO    &VS9=0                                                   00012500
         SSM   TN#GRIL                                                  00012600
         GOTO  .EXIT                                                    00012700
         ENDO                                                           00012800
*                                      RESET INTERRUPTABILITY           00012900
         L     R3,TN#GXVT                                               00013000
         L     R3,ESQCAT-EXVT(,R3) . GET ACTIVE TCB ADDRESS             00013100
         L     R3,TTICAM-ETCB(,R3) . GET ICAM WORK AREA                 00013200
         STM   R4,R5,TT#TINTS-TT#TSKWK(R3)                              00013300
         L     R4,=V(EXVTBASE)                        R4=A(XVT)         00013400
         L     R5,ESQCAT-EXVT(0,R4)                   R5=A(TCB)         00013500
         L     R5,ETCBSTA-ETCB(0,R5)                  R5=A(STACK)       00013600
         MVC   KKIMR-KKSTK(L'TT#TMSK,R5),TT#TMSK-TT#TSKWK(R3) RESTR MSK 00013700
         EX    0,XXEXINST-EXVT(0,R4)                  SSM               00013800
         LM    R4,R5,TT#TINTS-TT#TSKWK(R3)                              00013900
         L     R3,TT#TIRLL-TT#TSKWK(,R3)                                00014000
         GOTO  .EXIT                                                    00014100
         ENDO                                                           00014200
         ENDO                      . ENDO N'&P(0)=1                     00014300
.*                                                                      00014400
         DO    N'&P(0)=2                                                00014500
&FUNCT   SET   &P(0,2)             . GROUP B SVC FUNCTION               00014600
&GGGGG   SET   X'80'               . GROUP B SVC CALL                   00014700
&FFFFF   SET   1                   . P1 MUST HAVE ADDRESS               00014800
         DO    &FUNCT=1                                                 00014900
&EEEEE   SET   1                   . SAVE R14 AND R15 UNLESS IRL=NO     00015000
         ENDO                                                           00015100
         ENDO                                                           00015200
.*                                                                      00015300
         DO    ('&IRL'='NO')**(&VS9=0)                                  00015400
&EEEEE   SET   0                   . INDICATES DON'T SAVE R14 AND R15   00015500
         ENDO                                                           00015600
.*                                                                      00015700
         DO    '&DL'=''=0                                               00015800
&DL      EQU   *                   . USERS CALL LINE LABEL              00015900
         ENDO                                                           00016000
         DO    &DDDDD**&FFFFF                                           00016100
         L     1,=A(&AAAAA)        . PARAMETER ADDRESS TO REG 1         00016200
         DO    N'&P(1)=0                                                00016300
         PNOTE 'P','POSITIONAL PARAMETER 1 MUST BE (1) OR A LABEL'      00016400
         ENDO                                                           00016500
         ENDO                                                           00016600
         DO    &VS9                                                     00016700
         DO    ('&IRL'='YES')**&EEEEE                                   00016800
&BBBBB   SET   X'80'               . IRL IN SFC                         00016900
         ENDO                                                           00017000
         ENDO                                                           00017100
.*                                                                      00017200
         DO    &MMMMM              . SET UP BALR LOGIC                  00017300
         DO    &FFFFF              . DO IF R1 HAS ARP ADDRESS           00017400
         DO    &KKKKK              . DO IF REQUEST WILL BE QUEUED       00017500
         DO    &VS9                                                     00017600
         DO    '&QUE'='FNA'                                             00017700
         OI    0(R1),TN#GFNAQ        . SET FNA QUE BIT IN ARP           00017800
         NI    0(R1),X'FF'-TN#GUARP  . CLEAR USER QUE BIT IN ARP        00017900
         ENDO                                                           00018000
         DO    '&QUE'='USER'                                            00018100
         OI    0(R1),TN#GUARP        . SET USER QUE BIT IN ARP          00018200
         NI    0(R1),X'FF'-TN#GFNAQ  . CLEAR FNA QUE BIT IN ARP         00018300
         ENDO                                                           00018400
         DO    '&QUE'='DUST'                                            00018500
         OI    0(R1),TN#GUARP++TN#GFNAQ  . SET 2NDARY QUE BITS IN ARP   00018600
         NI    0(R1),X'FF'-TN#GQRNG      . INDICATE DUST 2NDARY TASK    00018700
         ENDO                                                           00018800
         ENDO                      . ENDO &VS9                          00018900
         DO    N'&QUE=2                                                 00019000
         NI    0(R1),X'FF'-(TN#GUARP++TN#GFNAQ++TN#GQRNG) . MCP QUE     00019100
&JJJJJ   SET   '&QUE(2)'           . GET MCP QUE #                      00019200
         DO    &JJJJJ=1                                                 00019300
         OI    0(R1),TN#GHSP       . INDICATE HIGH MCP PRIORITY QUE     00019400
         ENDO                                                           00019500
         DO    &JJJJJ=2                                                 00019600
         OI    0(R1),TN#GMSP       . INDICATE MEDIUM MCP PRIORITY QUE   00019700
         ENDO                                                           00019800
         DO    &JJJJJ=3                                                 00019900
         OI    0(R1),TN#GLSP       . INDICATE LOW MCP PRIORITY QUE      00020000
         ENDO                                                           00020100
         DO    (&JJJJJ>4)++(&JJJJJ=0)  . DO IF GT 4 OR IF EQ 0          00020200
         PNOTE 'P','ILLEGAL MCP QUE DESIGNATION'                        00020300
         ENDO                                                           00020400
         ENDO                      . ENDO N'&QUE=2                      00020500
         DO    &VS9=0                                                   00020600
         DO    '&QUE'='DUST'                                            00020700
         NI    0(R1),X'FF'-(TN#GUARP++TN#GHSP) . CLEAR OTHER QUE BITS   00020800
         OI    0(R1),TN#GDUSQ      . SET DUST QUE BIT IN ARP            00020900
         ENDO                                                           00021000
         DO    '&QUE'='USER'                                            00021100
         OI    0(R1),TN#GUARP      . SET USER QUE BIT IN ARP            00021200
         ENDO                                                           00021300
         ENDO                                                           00021400
         ENDO                      . ENDO &KKKKK                        00021500
         ENDO                      . ENDO &FFFFF                        00021600
         DO    &EEEEE                                                   00021700
         DO    &VS9=0                                                   00021800
         STM   R14,R15,TN#G1415    . SAVE REGISTERS 14 AND 15           00021900
         ENDO                                                           00022000
         DO    &VS9                                                     00022100
         L     R3,TN#GXVT          . GET XVT ADDRESS                    00022200
         L     R3,ESQCAT-EXVT(,R3) . GET ACTIVE TCB ADDRESS             00022300
         L     R3,TTICAM-ETCB(,R3) . GET ICAM WORK AREA                 00022400
         STM   R4,R2,TT#TIRLS-TT#TSKWK(R3) . SAVE REGISTERS             00022500
         ENDO                                                           00022600
         ENDO                                                           00022700
         DO    (&VS9=0)++(&EEEEE=0)                                     00022800
         L     R15,TN#GBALR        . COVER MUST EXIST FOR GENERAL TABLE 00022900
         ENDO                                                           00023000
         DO    &VS9**&EEEEE                                             00023100
         L     R15,=V(TS#AMSVC)    . GET ACTIVITY CONTROL ENTRY         00023200
         ENDO                                                           00023300
         BALR  R14,R15             . BALR TO ACTIVITY CONTROL           00023400
         DC    AL2((&GGGGG*/8)++&FUNCT) . SUB-FUNCTION CODE             00023500
         DO    &EEEEE                                                   00023600
         DO    &VS9=0                                                   00023700
         LM    R14,R15,TN#G1415    . RESTORE REGISTERS 14 AND 15        00023800
         ENDO                                                           00023900
         DO    &VS9**(&PPPPP=0)                                         00024000
         LM    R3,R2,TT#TIRLL-TT#TSKWK(R12)  . RELOAD REGISTERS         00024100
         ENDO                                                           00024200
         ENDO                                                           00024300
         ENDO                      . ENDO &MMMMM                        00024400
.*                                                                      00024500
.*                                                                      00024600
         DO    &USER94                                                  00024700
         SVC   SV#MCP                                                   00024800
         DC    AL2((&GGGGG*/8)++&FUNCT)                                 00024900
         GOTO  .EXIT                                                    00025000
         ENDO                                                           00025100
         DO    &MMMMM=0            . SET UP SVC LOGIC                   00025200
         DO    &VS9                                                     00025300
         DO    &EEEEE**(&NNNNN=0)  . DO IF IRL ALLOWED & NOT RTNUSER    00025400
         DO    '&IRL'='DEFAULT'                                         00025500
         TM    0(1),X'80'          . IRL?                               00025600
         BNO   *+8                 .   NO                               00025700
         OI    *+7,X'80'           . MOVE IRL TO SVC SUB-FUNCTION CODE  00025800
         ENDO                                                           00025900
         ENDO                                                           00026000
         SVC   98                                                       00026100
         DC    AL2((&GGGGG*/8)++&FUNCT++&BBBBB)  . SUB-FUNCTION CODE    00026200
         GOTO  .EXIT                                                    00026300
         ENDO                                                           00026400
         SVC   09                                                       00026500
         DC    AL2((&GGGGG*/8)++&FUNCT)                                 00026600
         ENDO                                                           00026700
.EXIT    LABEL                                                          00026800
         END                                                            00026900
