Michael.

Originally, I started on this project to build a PC service provider
address space. The address space acquired several 64-bit areas with the
IARV64 GETSHARED service, and the service provider would allow problem
state address spaces to acquire interest into these 64-bit areas. The
64-bit areas were buffers for monitoring data. I also wanted a 3270
interface for administrative management of the configurations and the
monitoring data. Now, this project has morphed into something different.

For the register equates, I only use the equates when the equate is related
to an active USING statement. With registers 0,1,12 (if not
baseless),13,14,and 15 unavailable, it really limits the number of
registers for addressing control blocks. I find the register equate
methodology very useful and descriptive when managing many DSECTs.

I found the solution to my bind problem. All of the examples and most of
the manuals referenced the alternate area for bind information. I found one
manual that referenced 'Record area' and 'RECLEN'. I change the VTAM
INQUIRE macro from AAREA and AAREALN to AREA and AREALEN, and the INQUIRE
and OPNDST worked successfully with the bind information returned.

Here is the updated source:
**-----------------------------------------------------------------**
** PROGRAM     : PORTDSPI                                          **
** AUTHOR      : BRIAN CHAPMAN                                     **
** WRITTEN ON  : 23 AUGUST 2017                                    **
** MODIFIED ON :                                                   **
** ASM OPTIONS : RENT,REUS AMODE=31 RMODE=31 AC=0                  **
** DESCRIPTION : TASK INITIALIZATION ROUTINE                       **
**             : THIS PROGRAM BUILDS THE INITIAL TASK RELATED      **
**             : CONTROL BLOCKS FOR A NEW TASK TO BE DISPATCHED.   **
**-----------------------------------------------------------------**
**                                                                 *
*         REGEQU                                                   *
**                                                                 *
*         COPY  PORTKERN                                           *
*         COPY  PORTDMH                                            *
*         COPY  TASKANCH                                           *
*         COPY  SESSVTAM                                           *
*         COPY  SESSSOKT                                           *
**                                                                 *
*         EJECT                                                    *
*         IFGRPL AM=VTAM                                            *
*         EJECT                                                    *
*         ISTUSFBC       *
*         EJECT          *
*         IFGACB AM=VTAM *
*         EJECT          *
*         IFGEXLST AM=VTAM*
*         EJECT          *
*         ISTDNIB         *
*         ISTDBIND       *
**                       *
*WORKAREA DSECT          *
*WORKNAME DS    CL8      *
*SAVEAREA DS    18F      *
*SAVERC   DS    F        *
*SAVEANCH DS    F        *
**                       *
*VTAMRETC DS    F        *
*VTAMFDB2 DS    F        *
**                       *
*CALLPLST DS    0F       *
*CALLPRM1 DS    F        *
*CALLPRM2 DS    F        *
*CALLPRM3 DS    F        *
*CALLPRM4 DS    F        *
*CALLPRM5 DS    F                                         *
**                                                       *
*WORKLEN  EQU   *-WORKAREA                               *
**                                                       *
*WORKREG  EQU   R3                                       *
*KERNREG  EQU   R4                                       *
*ANCHREG  EQU   R5                                       *
*DMHREG   EQU   R6                                       *
*VTAMREG  EQU   R6                                       *
*RPLREG   EQU   R7                                        *
*NIBREG   EQU   R8                                       *
*ACBREG   EQU   R9                                       *
*BINDREG  EQU   R10                                      *
**                                                       *
*PORTDSPI CSECT                                          *
*PORTDSPI AMODE 31                                       *
*PORTDSPI RMODE ANY                                      *
*         STM   R14,R12,12(R13)         SAVE REGISTERS   *
*         LR    R12,R15                 ESTABLISH BASE   *
*         USING PORTDSPI,R12            SET ADDRESSIBILITY*
*         B     START                                    *
**                                                       *
*         DC    CL9'PORTDSPI'                             *
*         DC    CL9'&SYSDATC'                                         *
*         DC    CL5'&SYSTIME'                                         *
**                                                                    *
*START    DS    0H                                                     *
*         LR    R2,R1                   SAVE REGISTER 1               *
*         LHI   R7,WORKLEN              LOAD WORK AREA LENGTH         *
*         GETMAIN RU,LV=(7),LOC=31                                    *
*         LR    WORKREG,R1              *                             *
*         USING WORKAREA,WORKREG        SET ADDRESSIBILITY            *
**                                                                    *
*         LR    R6,WORKREG              LOAD REGISTER                 *
*         SR    R15,R15                 ZERO FROM LENGTH              *
*         MVCL  R6,R14                  INITIALIZE WITH LOW VALUES    *
**                                                                    *
*         ST    R13,SAVEAREA+4          CHAIN CALLER'S SAVEAREA ADDRESS*
*         LA    R13,SAVEAREA                                          *
*         ST    R13,SAVEAREA+8          SAVE CURRENT SAVEAREA ADDRESS *
*         MVC   SAVEAREA(4),=CL4'F1SA'                                 *
*         MVC   WORKNAME(8),=CL8'PORTDSPI'                            *
**                                                                    *
*         SGR   R15,R15                                               *
**                                                                    *
*GETLINK  DS    0H                                                    *
*         LR    R1,R2                   RESTORE REGISTER 1           *
*         LT    KERNREG,0(R1)           GET ADDRESS OF KERNEL        *
*         BZ    BADLINK                 NO LINKAGE PASSED            *
*         USING PORTKERN,KERNREG        SET ADDRESSIBILITY           *
**                                                                    *
*ALLOCATE DS    0H                                                   *
*         LHI   R7,TASKANCH_LEN         LOAD SESSION ANCHOR LENGTH   *
*         GETMAIN R,LV=(7),LOC=31                                     *
*         LR    R6,R1                   LOAD REGISTER                *
**                                                                   *
*         LA    R8,0                    SET DUMMY FROM ADDRESS       *
*         SR    R15,R15                 ZERO FROM LENGTH             *
*         MVCL  R6,R14                  INITIALIZE WITH LOW VALUES   *
**                                                                   *
*         LR    ANCHREG,R1              LOAD REGISTER                *
*         ST    ANCHREG,SAVEANCH        SAVE CURRENT ANCHOR          *
*         USING TASKANCH,ANCHREG        SET ADDRESSIBILITY           *
*         MVC   TASKANCH_EYE(8),=CL8'TASKANCH' SET EYECATCHER        *
**                                                                    *
*         L     DMHREG,KERNDMH          GET ADDRESS OF DISPATCH HEADER*
*         USING PORTDMH,DMHREG          SET ADDRESSIBILITY           *
*         ST    KERNREG,ANCHKERN        STORE KERNEL ADDRESS         *
**                                                                    *
*         ST    ANCHREG,DMHRANCH        STORE ANCHOR ADDRESS        *
*         MVC   ANCHPROG,DMHRPROG       MOVE PROGRAM NAME TO ANCHOR *
*         MVC   ANCHTYP,DMHRTYPE        MOVE INIT TYPE TO ANCHOR    *
*         MVC   ANCHPARM,DMHRPARM       MOVE PARAMETER AREA TO ANCHOR*
*         DROP  DMHREG                                              *
**                                                                  *
*         TM    ANCHTYP,TYPTERM         TERMINAL TASK?              *
*         BO    TERMTASK                YES. CHECK FOR VTAM BLOCK   *
*         TM    ANCHTYP,TYPSOKT         SOCKET TASK?                *
*         BO    SOKTTASK                YES. COPY SOCKET FOR CHILD  *
*         B     GETKENUM                NO. SETUP KERNEL            *
**                                                                  *
*TERMTASK DS    0H                                                  *
*         LT    R1,ANCHPARM             LOAD ACB ADDRESS            *
*         BZ    BADLINK                 NO LINKAGE PASSED           *
**                                                                  *
*         LHI   R7,SESSVTAM_LEN         LOAD SESSION STORAGE LENGTH *
*         GETMAIN R,LV=(R7),LOC=BELOW                                *
**                                                                  *
*         LR    R6,R1                   LOAD DYNAMIC SESSION        *
*         LA    R8,INITVTAM             LOAD INIT MODEL             *
*         LHI   R9,INITVTAL             LOAD INIT MODEL LENGTH      *
*         MVCL  R6,R8                   COPY INIT MODEL SESSION     *
**                                                                     *
*         ST    R1,ANCHVTAM             STORE SESSION VTAM BLOCK       *
*         LR    VTAMREG,R1              LOAD STORAGE ADDRESS           *
*         USING SESSVTAM,VTAMREG                                       *
*         L     R1,ANCHPARM             LOAD ACB ADDRESS               *
*         L     ACBREG,0(R1)            PICK UP ACB ADDRESS            *
**                                                                     *
*         MVC   SESSVTAM_EYE,=CL8'SESSVTAM' SET EYECATCHER             *
*         LA    RPLREG,SESSRPL          SET UP BASE FOR RPL DSECT      *
*         LA    NIBREG,SESSNIB          LOAD BASE FOR NIB DSECT        *
*         USING IFGRPL,RPLREG                                          *
*         USING ISTDNIB,NIBREG                                         *
**                                                                      *
*         L     R2,4(R1)                POINT TO THE SYMBOLIC NAME OF  *
**                                      THE LOGICAL UNIT               *
*         MVC   NIBSYM,0(R2)            GET THE SYMBOLIC LUNAME        *
*         MVC   NIBUSER,4(R2)           USE LAST 4 BYTES OF LUNAME     *
*         MVC   NIBCID,20(R1)           PUT CID INTO NIB FOR OPNDST    *
**                                                                     *
*         ST    ACBREG,RPLDACB          STORE ACB ADDRESS IN SESSION RPL*

*         MVC   RPLUSFLD,4(R2)          PUT USER FIELD IN OPNDST RPL ...*
**                                      VTAM DOES NOT SET IT ON OPNDST *
*         B     TERMINQ                                                *
**                                                                       *
*TERMINQ  DS    0H                                                      *
*         SR    R15,R15                                                 *
**                                                                       *
*         LA    BINDREG,SESSBIND        LOAD ADDRESS OF BIND AREA       *
**                                                                      *
*         INQUIRE RPL=(RPLREG),NIB=(NIBREG),OPTCD=SESSPARM,             **
*               AREA=(BINDREG),AREALEN=L'SESSBIND                       *
*         LTR   R15,R15                 SESSION INQUIRE SUCCESSFUL?     *
*         BZ    TERMOPEN                YES. OPEN SESSION               *
**                                                                       *
*         LA    R1,=CL8'PRT106E'                                        *
*         ST    R1,CALLPRM1             STORE ADDRESS IN PARM LIST      *
**                                                                      *
*         LA    R1,NIBSYM               LOAD ADDRESS OF VTAM LU NAME    *
*         ST    R1,CALLPRM2                                             *
**                                                                      *
*         LA    R1,RPLRTNCD             LOAD ADDRESS OF VTAM RETURN CODE*
*         ST    R1,CALLPRM3                                             *
**                                                                       *
*         LA    R1,VTAMFDB2             LOAD ADDRESS OF VTAM FEEDBACK2  *
*         ST    R1,CALLPRM4                                             *
**                                                                      *
*         LA    R1,RPLSSNSI             LOAD ADDRESS OF VTAM SENSE CODE*
*         ST    R1,CALLPRM5                                           *
*         OI    CALLPRM5,X'80'          FLIP HIGH ORDER BIT           *
**                                                                     *
*         LA    R1,CALLPLST             LOAD ADDRESS OF PARM LIST     *
*         L     R15,KERNWTO             LOAD ADDRESS                  *
*         CALL  (R15)                   CALL WTO DRIVER MODULE        *
**                                                                     *
*TERMOPEN DS    0H                                                    *
*         USING ISTDBIND,BINDREG                                      *
*         ST    BINDREG,SESSBNDA        STORE IN VTAM SESSION BLK     *
*         MVHI  SESSBNDL,L'SESSBIND     MOVE BIND AREA LENGTH         *
**                                                                    *
*         OPNDST RPL=(RPLREG),NIB=(NIBREG),OPTCD=(ACCEPT,SPEC,NQ)     *
*         LTR   R15,R15                 SESSION ESTABLISHED?          *
**                                                                    *
*         BZ    GETKENUM                YES.                          *
*         TM    KERNFLG3,KERNVRBS       VERBOSE MESSAGING ENABLED?    *
**                                                                     *
*         ST    R0,VTAMFDB2             STORE IN VTAM FEEBACK2        *
*         ST    R15,VTAMRETC            STORE IN VTAM RETURN CODE     *
*         ST    R15,SAVERC              STORE IN PROGRAM RETURN CODE  *
**                                                                    *
*         LA    R1,=CL8'PRT103E'                                       *
*         ST    R1,CALLPRM1             STORE ADDRESS IN PARM LIST     *
**                                                                     *
*         LA    R1,NIBSYM               LOAD ADDRESS OF VTAM LU NAME   *
*         ST    R1,CALLPRM2                                            *
**                                                                      *
*         LA    R1,RPLRTNCD             LOAD ADDRESS OF VTAM RETURN CODE*
*         ST    R1,CALLPRM3                                            *
**                                                                      *
*         LA    R1,VTAMFDB2             LOAD ADDRESS OF VTAM FEEDBACK2 *
*         ST    R1,CALLPRM4                                            *
**                                                                     *
*         LA    R1,RPLSSNSI             LOAD ADDRESS OF VTAM SENSE CODE*
*         ST    R1,CALLPRM5                                            *
*         OI    CALLPRM5,X'80'          FLIP HIGH ORDER BIT            *
**                                                                      *
*         LA    R1,CALLPLST             LOAD ADDRESS OF PARM LIST      *
*         L     R15,KERNWTO             LOAD ADDRESS                   *
*         CALL  (R15)                   CALL WTO DRIVER MODULE         *
**                                                                      *
**                                                                     *
*TERMDISC DS    0H                                                     *
*         CLSDST RPL=(RPLREG),OPTCD=SYN,ACB=(ACBREG),NIB=(NIBREG)       *
**                                                                     *
*         B     RETURN                                                 *
**                                                                     *
*SOKTTASK DS    0H                                                      *
*         OI    ANCHRTYP,TYPCSOKT       SET SOCKET CHILD FLAG          *
**                                                                     *
*         LT    R10,ANCHPARM            GET ADDRESS OF SOCKET BLOCK    *
*         BZ    BADLINK                 NO LINKAGE PASSED              *
**                                                                     *
*         LHI   R9,SESSSOKT_LEN         LOAD SESSION SOCKET LENGTH     *
*         GETMAIN R,LV=(R9),LOC=31                                     *
*         ST    R1,ANCHSOKT             STORE NEW SOCKET BLOCK IN ANCHOR*
**                                                                     *
*         LR    R8,R1                   LOAD REGISTER                  *
*         LR    R11,R9                  SET LENGTH OF SESSSOKT         *
*         MVCL  R8,R10                  COPY SOCKET BLOCK              *
**                                                                      *
*         USING SESSSOKT,R1                                            *
*         XC    EZAAREA,EZAAREA         CLEAR EZASMI API AREA          *
*         XC    SOKTSAVE,SOKTSAVE       CLEAR SOCKET SAVE AREA         *
*         DROP  R1                                                     *
**                                                                     *
*         B     GETKENUM                                               *
**                                                                   *
*GETKENUM DS    0H                                                  *
*         L     R1,KERNNUM              LOAD CURRENT KERNEL NUMBER  *
*         ST    R1,ANCHNUM              STORE CURRENT TASK NUMBER   *
*         AP    KERNNUM,=P'1'           INCREMENT KERNEL NUMBER     *
**                                                                  *
*UPDTKERN DS    0H                                                  *
*         L     R9,KERNLAST             LOAD LAST ANCHOR            *
*         ST    R9,ANCHPREV             STORE LAST ANCHOR AS PREVIOUS*
*         ST    ANCHREG,KERNLAST        STORE AS LAST KERNEL ANCHOR *
*         LT    R1,KERNFRST             FIRST ANCHOR ZERO?          *
*         BZ    STORFRST                YES. SET AS FIRST ANCHOR    *
*         B     STORLAST                NO. APPEND AS LAST ANCHOR   *
**                                                                   *
*STORFRST DS    0H                                                  *
*         ST    ANCHREG,KERNFRST        STORE AS FIRST KERNEL ANCHOR*
*         B     INITANCH                INITIALIZE ANCHOR           *
**                                                                   *
*STORLAST DS    0H                                                  *
*         LR    ANCHREG,R9              LOAD LAST KERNEL FOR UPDATE *
*         L     R9,SAVEANCH             RELOAD CURRENT ANCHOR       *
*         ST    R9,ANCHNEXT             STORE CURRENT ANCHOR AS NEXT*
**                                                                  *
*INITANCH DS    0H                                                *
*         L     ANCHREG,SAVEANCH        RELOAD CURRENT ANCHOR     *
*         OI    ANCHSTS,STSATCH         SET AS ATTACH STATUS      *
**                                                                *
*         POST  KERNTECB                POST TASK CONTROL ECB     *
**                                                                 *
*         B     RETURN                                            *
**                                                                *
*BADLINK  DS    0H                                                *
*         WTO   'PORTDSPI BADLINK'                                 *
*         ABEND 99,DUMP                                           *
*         B     RETURN                                            *
**                                                                *
*RETURN   DS    0H                                                 *
*         L     R13,SAVEAREA+4          RESTORE R13               *
*         L     R2,SAVERC               LOAD RC                   *
**                                                                *
*         LHI   R0,WORKLEN              LOAD WORK AREA LENGTH     *
*         FREEMAIN RU,LV=(R0),A=(WORKREG)                         *
**                                                                 *
*         LR    R15,R2                  LOAD RC FROM R2           *
*         L     R14,12(R13)             RESTERE R14               *
*         LM    R0,R12,20(R13)          RESTORE R0-R12 (RETAIN R15)*
*         BR    R14                     RETURN TO CALLER*
**                                                     *
*         LTORG                                        *
**                                                     *
*INITVTAM DS    0F                                     *
*         ORG   INITVTAM+SESSVTAM_INIT                 *
*INITRPL  RPL   AM=VTAM,RESPOND=FME                    *
*INITNIB  NIB   MODE=RECORD,PROC=(RESPX,TRUNC,NEGBIND) *
*INITBIND DS    CL256                                  *
*INITVTAL EQU   *-INITVTAM                              *
**                                                     *
*         END                                          *

************************************************************************
** SESSION VTAM CONTROL BLOCK                                          *
** THIS CONTROL BLOCK CAN BE ADDRESS FROM THE BRIDGE CONTROL BLOCK.   *
************************************************************************
*SESSVTAM      DSECT                                                  *
*SESSVTAM_EYE  DS    CL8                VTAM EYE CATCHER              *
*SESSRECB      DS    F                  RECEIVE ECB                   *
*SESSPRI       DS    H                  PRIMARY SIZE                  *
*SESSALT       DS    H                  ALTERNATE SIZE                *
*SESSATTR      DS    F                  ATTRIBUTES                    *
*SESSBNDA      DS    F                  BIND ADDRESS                  *
*SESSBNDL      DS    F                  BIND LENGTH                   *
*              DS    CL4                                               *
*SESSVTAM_INIT EQU   *-SESSVTAM                                       *
*SESSRPL       RPL   AM=VTAM,RESPOND=FME                              *
*SESSNIB       NIB   MODE=RECORD,PROC=(RESPX,TRUNC,NEGBIND)           *
*SESSBIND      DS    CL256              BIND AREA                     *
*SESSVTAM_LEN  EQU   *-SESSVTAM                                       *



Thank you,

Brian Chapman


On Thu, Nov 10, 2022 at 12:21 PM Michael Stein <[email protected]> wrote:

> On Thu, Nov 10, 2022 at 07:14:34AM -0500, Brian Chapman wrote:
> > Michael,
> >
> > Are you saying that sense code 084E is only applicable for LU6.2?
>
> I'm saying the page you linked to was for LU6.2 and as far as I know
> 3270s aren't LU6.2.
>
> Also I'm still very very uncertain what you are doing.  At least I now
> know you aren't running a TSO session, but what you are doing is still
> unclear.  I've just sort of assumed it's some sort of VTAM application
> and talks to 3270s.
>
> So what's unknown is the VTAM network environment like (modetab?, cross
> domain?), what kind of 3270 you have: LU type? (or emulate?), what the
> VTAM application is doing (like code?).
>
> In trying to guess what's needed (it's been a long time) I looked at some
> old VTAM application code which talked to 3270s (back then real 3270s).
> They don't seem to deal with the session parameters so they are getting
> set somewhere else than in the VTAM application...
>
> The question is then why is your application different?
>
> > You have 3 R6's?:
> ...
> > DMHREG is only in effect for the small section of code before the DROP
> > instruction. I could have used the VTAMREG equate in the MVCL section,
> but
> > I wanted to be sure that it utilized an even-odd pair. In this case it
> > would have, but I like the flexibility of changing my equate assignments
> if
> > necessary.
>
> Yes, even-odd pair is yet another reason to use only numbered registers.
>
> You can do whatever you want, but I'd recommend:
>
> a. only use r0-r15
> b. include comments on register usage at important points
>
> I feel that part of writing assembly code is register assignment and
> it should be clear from the code and comments what is assigned.
>
> And the information on register usage should be local to where the
> registers are used, not hidden at the beginning of the program (or worse
> hidden in another source / macro file).
>
> *VTAMREG  EQU   R6
> *NIBREG   EQU   R8
>
> # ----
>
> *ALLOCATE DS    0H
> *         LHI   R7,TASKANCH_LEN         LOAD SESSION ANCHOR LENGTH
> *         GETMAIN R,LV=(7),LOC=31
> *         LR    R6,R1                   LOAD REGISTER
> **
> *         LA    R8,0                    SET DUMMY FROM ADDRESS
> *         SR    R15,R15                 ZERO FROM LENGTH
> *         MVCL  R6,R14                  INITIALIZE WITH LOW VALUES
>
> So NIBREG has 0 now?
>
> # ----
>
> The following DS 0F and ORG leave a "hole" in your code which in the load
> module might contain anything.  And it might change every time your
> code was reassembled or linked.
>
> I don't know what is in that offset in the SESSVTAM DSECT but the
> begining of it is being initalized to unknown values...
>
> Likely the area should be zeroed after the GETMAIN and only the needed
> fields initialized (or else the ORG area replaced with zeros?).
>
> *INITVTAM DS    0F
> *         ORG   INITVTAM+SESSVTAM_INIT
> *INITRPL  RPL   AM=VTAM,RESPOND=FME
> *INITNIB  NIB   MODE=RECORD,PROC=(RESPX,TRUNC,NEGBIND)
> *INITVTAL EQU   *-INITVTAM
>
> PS: I believe that there are 3270 type VTAM application codes on the
>     cbttape as well as elsewhere.  While these may not be the best code,
>     they might give you hints as to what is needed to get you past
>     connecting to a 3270.
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to [email protected] with the message: INFO IBM-MAIN
>

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to