DAT-off routines

The z/OS nucleus is mapped and fixed in central storage without attempting to make its virtual storage addresses equal to its real addresses. Systems that use 31-bit addressing save a V=F (virtual=fixed) nucleus.

Because the z/OS nucleus is not V=R, the nucleus code cannot turn DAT-off and expect the next instruction executed to be the same as if DAT was on.

To allow for the execution of DAT-off nucleus code, the z/OS nucleus consists of two load modules, one that runs with DAT on and one that runs with DAT off. Nucleus code that needs to run with DAT off must reside in the DAT-off portion of the nucleus.

When the system is initialized, the DAT-off portion of the nucleus is loaded into the highest contiguous central storage. Therefore, you must modify any user modules in the nucleus that run with DAT off so that they operate correctly above 16 megabytes. Among the things you may have to consider are:
  • All modules in the DAT-off portion of the nucleus have the attributes AMODE 31, RMODE ANY. They may reside above 16 megabytes.
  • These modules must return control via a BSM 0,14.
  • Register 0 must not be destroyed on return.
To support modules in the DAT-off nucleus:
  • Move the DAT-off code to a separate module with AMODE 31, RMODE ANY attributes. Use as its entry point, IEAVEURn where n is a number from 1 to 4. (MVS™ reserves four entry points in the DAT-off nucleus for users.) Use BSM 0,14 as the return instruction. Do not destroy register 0.
  • Code a DATOFF macro to invoke the DAT-off module:
        DATOFF INDEX=INDUSRn
    The value of n in INDUSRn must be the same as the value of n in IEAVEURn, the DAT-off module's entry point.
  • Link edit the DAT-off module (IEAVEURn) into the IEAVEDAT member of SYS1.NUCLEUS (the DAT-off nucleus).

See z/OS MVS Programming: Authorized Assembler Services Guide and z/OS MVS Programming: Authorized Assembler Services Reference ALE-DYN for more information about modifying the DAT-off portion of the nucleus and the DATOFF macro.