* GO SEGMENTED PROCEDURE                                HEADER  CR.GOSG 0001.000
*                                                                       0002.000
*              C:GOSG --- GO SEGMENTED PROCEDURE                        0003.000
*                                                                       0004.000
****************************************************************        0005.000
*                                                              *        0006.000
* CR.GOSG - GO SEGMENTED                                       *        0007.000
*    THIS ROUTINE IS CALLED TO LOAD A NEW SEGMENT AND TRANSFER *        0008.000
*  CONTROL TO IT.  ARGUMENT-1 IS THE SEGMENT BASE.  IF IT IS   *        0009.000
*  EQUAL TO -1 OR X'0000FFFF' THEN ARGUMENT-2 IS THE TRANSFER  *        0010.000
*  ADDRESS.  OTHERWISE, THE SEGMENT BASE CONTAINS THE ADDRESS  *        0011.000
*  OF THE OVERLAY NAME TO BE LOADED, AND ARGUMENT-2 IS A SIT   *        0012.000
*  OFFSET                                                      *        0013.000
*                                                              *        0014.000
*    CALLING SEQUENCE                                          *        0015.000
*       LW    R1,SEGMENT BASE                                  *        0016.000
*       LW    R2,SIT-OFFSET                                    *        0017.000
*       BL    CR.GOSG                                          *        0018.000
*              (OR)                                            *        0019.000
*       BL    C:GOSG                                           *        0020.000
*       DATAW SEGMENT-BASE                                     *        0021.000
*       DATAW SIT-OFFSET                                       *        0022.000
****************************************************************        0023.000
         M.PGM     CR.GOSG,MPX-32,3.6.1,00                              0024.000
         DEF       CR.GOSG                                              0025.000
         DEF       C:GOSG                                               0026.000
         M.REQS                                                         0027.000
         COBOLDAT                                                       0028.000
C:SGCOM  COMMON    NMCURSEG,NMROOTSG,RTSEGLOC,SGDELTA,SGETLOC           0029.000
C:GOSG   EQU       $                                                    0030.000
         LOAD      2                                                    0031.000
CR.GOSG  EQU       $                                                    0032.000
*                                                                       0033.000
* JUMP TO DISPLACEMENT IF BASE = -1, I.E. JUMP IN SAME SEGMENT.         0034.000
         CAMW      R1,=X'0000FFFF'                                      0035.000
         BEQ       0,X2                                                 0036.000
         CI        R1,-1                                                0037.000
         BEQ       0,X2                                                 0038.000
*                                                                       0039.000
* IF SEGMENT IS THE ROOT THEN JUMP TO ROOT ENTRY.                       0040.000
         CAMW      R1,NMROOTSG                                          0041.000
         BNE       CHKCURSG                                             0042.000
         LW        R7,RTSEGLOC                                          0043.000
         BU        GOTOSEG                                              0044.000
*                                                                       0045.000
* IF SEGMENT IS CURRENTLY LOADED, THEN GET TRANSFER ADDRESS AND JUMP.   0046.000
CHKCURSG EQU       $                                                    0047.000
         CAMW      R1,NMCURSEG                                          0048.000
         BNE       LDSEG                                                0049.000
         LW        R7,SEGLOC                                            0050.000
         BU        GOTOSEG                                              0051.000
*                                                                       0052.000
* LOAD OVERLAY SEGMENT                                                  0053.000
LDSEG    EQU       $                                                    0054.000
         LW        R6,0W,X1                                             0055.000
         LW        R7,1W,X1                                             0056.000
         SVC       1,X'50'                                              0057.000
         STW       R1,NMCURSEG                                          0058.000
         STW       R7,SEGLOC                                            0059.000
*                                                                       0060.000
* PERFORM SEGMENTED JUMP                                                0061.000
GOTOSEG  EQU       $                                                    0062.000
         STW       R2,SGDELTA                                           0063.000
         TRSW      R7                                                   0064.000
         END                                                            0065.000
