Im posting he results of my sampe program for loading a 64BIT Amode program and invoking it via BSSM. . The Driving program is AMODE31 RMODE ANY The program that is loaded was Linked Edit as AMODE 64 and RMODE ANY. . I wanted to accomplish two methods of invoking the same 64BIT AMODE program. The function of 64BIT AMODE Program (PROG64) is simplistic;(1) established the save areas, (2) acquire a Memory Segment, (3) DETACHE the memory Segment, and (4)restores the callers environment and return. . . The Driver Routine issues a LINK to PROG64 And Upond Return LOADs PROG64 and then BASSM to it. . . I had to use a LINKX macro as LINK incurred an ABEND of 0C6. Then the BASSM failed because PROG64 returned witha BR14. I then modified the PROG64 program to issue a BSM 0,14 as the return instruction. This succeded for both LINKX and LOAD/BASSM, I am still fine tuning this logic. . . The Driveing routine is posted below:
GOCHECK CNOP 2,4 ALIGNMENT BAKR
R14,0 SAVE CALLERS ENVIRONMENT
LARL R12,DRIV64A ESTABLISH BASE REGISTER
LARL R13,SAVE64 REGISTER SAVE Area
* *
WTO '&CSECT - LINK Routine'
SYSSTATE ASCENV=P,AMODE64=YES,ARCHLVL=2
LARL R2,PROG64$
LINKX EPLOC=(R2),AMODE64OK=YES ISSUE LINKX
SYSSTATE AMODE64=NO
*
WTO '&CSECT - LOAD Routine'
LARL R2,PROG64$
LOAD EPLOC=(R2) ISSUE LOAD
STM R15,R1,LOADREGS REGS AFTER LOAD
STG R0,MOD@ 64Bit Module
LGR R15,R0 64Bit Address
BASSM R14,R15 Invoke 64Bit Module
*
WTO '&CSECT - Return'
*
DS 0D
DC CL8'SAVEAREA'
SAVE64 DS 34A
DS 0D
DC CL8'LOADREGS'
LOADREGS DC 4A(0) REGISTERS AFTER LOAD
DS 0AD
MOD@ DC AD(0)
SAVEG15 DC AD(0)
DC AD(0)
DC AD(0)
DC AD(0)
*
*****************************************************************
Paul D'Angelo
*************
