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.
- 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.
- 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:
The value of n in INDUSRn must be the same as the value of n in IEAVEURn, the DAT-off module's entry point.DATOFF INDEX=INDUSRn
- 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.