Writing user DAT-OFF routines

As shown in 1, there are eight DAT-OFF indexes that users can define. These indexes are INDUSR1, INDUSR2, INDUSR3, INDUSR4, INDUSR641, INDUSR642, INDUSR643, and INDUSR644. The entry points corresponding to these indexes are IEAVEUR1, IEAVEUR2, IEAVEUR3, IEAVEUR4, IEAV64U1, IEAV64U2, IEAV64U3, and IEAV64U4, respectively.

User written DAT-OFF routines are restricted as follows:
  • The user of the DATOFF macro must be in key 0, supervisor state, and executing with DAT turned on.
  • DAT-OFF routines INDUSR1, INDUSR2, INDUSR3, and INDUSR4 must have the attributes AMODE=31 and RMODE=ANY.
  • DAT-OFF routines INDUSR641, INDUSR642, INDUSR643, and INDUSR644 must have the attributes AMODE=64 and RMODE=ANY.
  • The DAT-OFF routine must preserve register 0 because register 0 contains the return address of the module that issued the DATOFF macro.
  • The DAT-OFF routine must use branch instructions to link to other DAT-OFF routines.
  • The DAT-OFF function must use BSM 0,14 to return from INDUSR1, INDUSR2, INDUSR3, and INDUSR4.
  • The DAT-OFF function must return via BR 14 from INDUSR641, INDUSR642, INDUSR643, and INDUSR644.