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.