SYM$JOB_FIXED_TEMPLATE   IDENT
.
.
.                ***** WARNING *****
.
.    The data structures defined in this module must be the first data loaded into
.    JOB_FIXED.  This is necessary for the proper initialization of the Base Constant
.    register in the XCB for Job Monitor. (and probably some other things too.)
.
.
*copy SYA$CONSTANTS
*copy OSA$BASIC_REGISTER_EQUATES
*copyc sya$xp_and_sf_constants
          page
.
.
.   Define static data.
.
jobfixl   equ      9000     .* * * assembler bug
jobfix    SECTION  working,read+write,OSS$JOB_FIXED,0,8,jobfixl
.
          USE       jobfix
jcb       bssz     jrootsiz           .Job control block. (JCB)
jxcb      bssz     xcbsize            .XCB for job monitor.
          align    0,8
jst       bssz     jstlen*8           .ST for job monitor.
jsdtx     bssz     jstlen*sdtxsize    .STX for job monitor.
jfheapp   vfd,16,32            0ffff(16),80000000(16)
jobtrapp  vfd,16,32,16,32      0FFFF(16),80000000(16),0FFFF(16),8000000(16)
          align    0,8
xcblist   vfd,16,32,16,192     0ffff(16),80000000(16),0,0     .Must be 0 mod 8.
tasktem   vfd,16,32,32,32,32   0ffff(16),80000000(16),0,0,0
sysjob    vfd,8    1
          align  0,8
.
.
.  Define external names for structures in job fixed.
.
          def      jst,jsdtx
          defg     jcb,jxcb
          defg     xcblist,tasktem,jobtrapp
          defg     sysjob
          def      jfheapp
sysjob    alias    JMV$EXECUTING_WITHIN_SYSTEM_JOB
JFHEAPP   ALIAS    OSV$JOB_FIXED_HEAP
jcb       alias    JMV$JCB
jxcb      alias    JMV$JMTR_XCB
jst       alias    JMV$SDT
jsdtx     alias    JMV$SDTX
.
xcblist   alias    JOB_XCB_LIST
tasktem   alias    PMV$TASK_TEMPLATE
jobtrapp  ALIAS    JMV$JOB_TRAP_HANDLER
.
jxcb_off  equ      #BOFF(jxcb)
sdtx_off  equ      #BOFF(jsdtx)
.
          ERROR,sdtx_off>2048         c'ST overflowed minimum page size'
.    Verify segment table is contained in a page - if crosses page boundary, give error.'
.
          ERROR,jxcb_off>0ffff(16)    c'xcb offset too large'
.    Base Constant register will not be initialized properly if offset for
.    JMV$JMTR_XCB is too large.
.
.
         xpareg   jxcb,a_tos,jobstk1
         xpareg   jxcb,a_csf,jobstk1
         xpareg   jxcb,a_psa,nil
         xpareg   jxcb,a_bindin,bindsec
         xpareg   jxcb,4,nil
         xpareg   jxcb,5,nil
         xpareg   jxcb,6,nil
         xpareg   jxcb,7,nil
         xpareg   jxcb,8,nil
         xpareg   jxcb,9,nil
         xpareg   jxcb,10,nil
         xpareg   jxcb,11,nil
         xpareg   jxcb,12,nil
         xpareg   jxcb,13,nil
         xpareg   jxcb,14,nil
         xpareg   jxcb,15,nil
         xpv      jxcb,xpstal,jst,16     .Segment table address
         xpv      jxcb,xpstl,jstlen-1,16  .Segment table length
         xpv      jxcb,xpflgte,00000(16),16   .Set trap-enable
         xpv      jxcb,xpmm,j_mtrmsk,16
         xpv      jxcb,xpum,j_usrmsk,16
         xpv      jxcb,xpkm,0,16
         xpv      jxcb,xppit,07fff(16),16
         xpv      jxcb,xppit+8,0ffff(16),16
         xpv      jxcb,xplrn,15,16
         xpv      jxcb,xpbc1,0,16          .task_id DIV 10000(16) for $JOBMNTR
         xpv      jxcb,xpbc2,jxcb_off,16   .task_id MOD 10000(16) for $JOBMNTR
         xpa      jxcb,xptp,pr_trap
         xpa      jxcb,xpdlp,nil
         xpa      jxcb,xptos,jobstk1
         xpa      jxcb,xptos+8,jobstk2
         xpa      jxcb,xptos+16,jobstk3
         xpa      jxcb,xptos+24,nil
         xpa      jxcb,xptos+32,nil
         xpa      jxcb,xptos+40,nil
         xpa      jxcb,xptos+48,nil
         xpa      jxcb,xptos+56,nil
         xpa      jxcb,xptos+64,nil
         xpa      jxcb,xptos+72,nil
         xpa      jxcb,xptos+80,nil
         xpa      jxcb,xptos+88,nil
         xpa      jxcb,xptos+96,nil
         xpa      jxcb,xptos+104,nil
         xpa      jxcb,xptos+112,nil
.
          page
.
.
.   Define Stack Segment for ring 1
.
jstack1   SECTION  extwork,read+write,jstack1,0,8,jstksiz1
          use      jstack1
          def      jobstk1
          bss      28(16)                  Ring Alarm Procedure offset
jobstk1   bss      jstksiz1-28(16)
.
.
.   Define Stack Segment for ring 2
.
jstack2   SECTION  extwork,read+write,jstack2,0,8,jstksiz2
          use      jstack2
          def      jobstk2
          bss      28(16)                  Ring Alarm Procedure offset
jobstk2   bss      jstksiz2-28(16)
.
.
.
.
.   Define Stack Segment for ring 3
.
jstack3   SECTION  extwork,read+write,jstack3,0,8,jstksiz3
          use      jstack3
          def      jobstk3
          bss      28(16)                  Ring Alarm Procedure offset
jobstk3   bss      jstksiz3-28(16)
          page
.
.   Define Binding Section
.
          USE      BINDING
          def      pr_trap
          ref      traprtn
          def      bindsec
bindsec   bss      0
pr_trap   address  ce,traprtn
.
traprtn   ALIAS    SYP$SYSTEM_CORE_TRAP_HANDLER
          end
