Program Uses Memory Below and Above the Line

Restriction: This topic applies to Windows environments only.

If your program needs to address both types of memory, that is, you have a mix of some modules that use memory below the line and others that use memory above the line, you should:

  1. Set Max. memory below 16Mb line to the maximum amount of memory below the line that your program requires. The default is 3Mb and the maximum is 16Mb.
  2. Set Max. memory above 16Mb line to the maximum amount of memory above the line that your program requires. The default is 3Mb and the maximum is 2Gb.
  3. Set Addressing mode to AMODE (24) for each program to be loaded that uses memory below the line.
  4. Set Addressing mode to AMODE (31) for each program to be loaded that uses memory above the line.
  5. To allocate memory below the line, omit the LOC parameter from all GETMAIN and STORAGE OBTAIN macros that the module issues.
  6. To allocate memory above the line, set LOC=ANY in all GETMAIN and STORAGE OBTAIN macros that the module issues.
  7. Use the Assembler instructions BASSM or BSM to transfer control between programs that use different addressing modes.
Note:
  • If a program that uses 31-bit addressing needs to manipulate 24-bit addresses, you must include code to clear the unused byte of the address before any instruction that sets a register to a new address. These instructions include LA, BAL, BALR, EDMK and TRT.
  • You can only set LOC=ANY on the RU and RC formats of the GETMAIN macro. The R format of GETMAIN is restricted to memory below the line.