          EJECT
*         CTEXT  CTP$DFT_PVA_TO_RMA_ROUTINES
*
*         C. L. WILSON       09/28/87
          SPACE 4,10

**        DPS -  DEFINE PAGE SIZE.
*
*         ENTRY  (PSMV) = CONTENTS OF PAGE SIZE MASK REGISTER.
*
*         EXIT   (PSMV) = PAGE SIZE MASK.
*                (DPSA) = SHIFT INSTRUCTION TO EXTRACT PAGE NUMBER.


 DPS      SUBR               ENTRY/EXIT
          LDC    SHNI+100
          STM    DPSA        SET SHIFT INTO PAGE TABLE SEARCH
          LDM    PSMV
          LMC    0#7F
          STD    T2
          STM    PSMV        SET PAGE SIZE MASK
          SHN    9D
          ADC    777
          STML   PSMV1
 DPS1     SOM    DPSA        ADD TO SHIFT COUNT
          LDD    T2
          SHN    21-0        REMOVE LOWEST BIT
          STD    T2
          NJN    DPS1        IF MORE BITS PRESENT
          UJN    DPSX        RETURN

 DPSA     CON    0
 PSMV1    CON    0
          EJECT
**        LWA -  LOAD WORD ADDRESS.
*
*         ENTRY  (A) = POINTER TO WORD ADDRESS.
*
*         EXIT   (W4 - W5) = R-REGISTER VALUE.
*                (A) = CM ADDRESS.
*                (W6) = OFFSET FROM R-REGISTER.


 LWA      SUBR               ENTRY/EXIT
          STD    W6
          LDML   1,W6
          SHN    -6
          STDL   W5          10 BITS OF R UPPER
          LDI    W6
          LPN    3
          SHN    12          POSITION 2 BITS
          RAD    W5          R-REGISTER UPPER (12 BITS)
          LDI    W6
          SHN    -2
          STD    W4          R-REGISTER LOWER (10 BITS)
          LRD    W4
          LDML   1,W6
          LPN    77
          STD    W6          SET OFFSET
          LMC    RR          ACTIVATE R-REGISTER
          UJN    LWAX        RETURN
          EJECT
**        PVC -  PRESET VIRTUAL ADDRESS CONSTANTS.
*
*         ENTRY  NONE.
*
*         EXIT   (PTAV - PTAV+1) = PAGE TABLE ADDRESS.
*                (PSMV) = PAGE SIZE MASK.
*                (PTLV) = PAGE TABLE LENGTH MASK.
*                (STLV) = SEGMENT TABLE LENGTH
*                (STAV) = SEGMENT TABLE ADDRESS
*
*         USES   T4, T5, RN.
*
*         CALLS  DPS.
*
*         MACROS READMR.


 PVC      SUBR               ENTRY/EXIT
          LDN    PVCAL
          STD    T5
 PVC1     LDM    PVCA+1,T5
          STD    T4          SET DATA ADDRESS
          LDM    PVCA,T5     GET REGISTER NUMBER
          STD    RN
          READMR RDATA,HBUF+CPRPC
          LDM    RDATA+4     FORM 32 BIT VALUE
          SHN    10
          LMM    RDATA+5
          STIL   T4
          LDM    RDATA+6
          SHN    10
          LMM    RDATA+7
          STML   1,T4
          LCN    2
          RAD    T5
          MJN    PVC2        IF NOT MORE REGISTERS TO READ
          LJM    PVC1        GO BACK FOR MORE

 PVC2     RJM    DPS         DEFINE PAGE SIZE
          LJM    PVCX        RETURN

 PVCA     BSS    0           TABLE OF REGISTERS
          LOC    0
          CON    PPTA,PTAV
          CON    PPSM,PSMV-1
          CON    PPTL,PTLV-1
          CON    PSTL,STLV-1
 PVCAL    CON    PSTA,STAV
          LOC    *O
 PTAV     CON    0,0         PAGE TABLE ADDR
 PSMV     CON    0           PAGE SIZE MASK
 PTLV     CON    0           PAGE TABLE LENGTH
 STLV     CON    0           SEGMENT TABLE LENGTH
 STAV     CON    0,0         SEGMENT TABLE ADDRESS
          EJECT
**        SPT -  SEARCH PAGE TABLE.
*
*         ENTRY  (CM - CM+2) = SYSTEM VIRTUAL ADDRESS.
*
*         EXIT   (A) = ADDRESS OF WORD.
*                (SPTJ) = PAGE TABLE ENTRY.
*
*         USES   T1, T2, T3, T4 ,T5 ,T7, W0 - W4.
*
*         CALLS  LWA.


 SPT      SUBR               ENTRY/EXIT
          LDM    DPSA        GET SEARCH PAGE TABLE SHIFT
          STM    SPTA
          STM    SPTC
          STM    SPTH
          ADN    10
          LPC    1077        CREATE 7-SHIFT COUNT
          STM    SPTB
          LDM    DPSA
          LMC    77          COMPLEMENT SHIFT
          STM    SPTF
          STM    SPTI
          LDM    DPSA
          SBN    12
          STM    SPTG

*         FORM PAGE NUMBER

          LDDL   CM+2        PAGE OFFSET
          SHN    -9D
 SPTA     SHN    -0          MODIFIED
          STDL   T2
          LDDL   CM+1        PAGE NUMBER
          LPML   PSMV1       SAVE CORRECT NUMBER OF BITS
 SPTB     SHN    0           POSITION (MODIFIED)
          RADL   T2          T2 = PN (L)
          LDDL   CM+1
          SHN    -9D
 SPTC     SHN    -0          MODIFIED
          STDL   T1          T1 = PN (U)

*         FORM HASH INDEX

          LDDL   T2
          LMDL   CM          EXCLUSIVE OR WITH ASID
          SHN    1           FORM WORD ADDRESS
          STDL   T4          T4 = HASH INDEX (L)
          SHN    -20
          STDL   T3          LEFT MOST BIT (1)
          LDDL   CM
          SHN    -12
          STM    SPTD+1      FORM INSTRUCTION
          LDDL   T2
          LPN    77
 SPTD     LMC    0
          SHN    1
          RAD    T3          T3 = HASH INDEX (U)

*         FORM PAGE TABLE LENGTH MASK

          LDML   PTLV        PAGE TABLE LENGTH
          LPC    177         SAVE 7 BITS
          SHN    9D
          LMC    777         FOR MASK
          STDL   T6          T6 = PAGE TABLE LENGTH MASK (L)
          LDML   PTLV
          SHN    -7
          STD    T5          T5 = PTL MASK (U)

*         MODIFY PAGE NUMBER FOR COMPARE WITH PTE

          LDDL   T1
 SPTF     SHN    0           MODIFIED
          STDL   T1
          LDDL   T2
 SPTG     SHN    -0          MODIFIED
          RAD    T1          T1 = PN UPPER (SHIFTED)
          LDC    0#FFFF      MASK
 SPTH     SHN    -0          MODIFIED
          LPDL   T2
 SPTI     SHN    0           MODIFIED
          STDL   T2          T2 = PN LOWER (SHIFTED)

*         SEARCH PAGE TABLE

          LDML   PTAV+1      FORM WORD ADDRESS OF PTA
          SHN    -3
          STML   PTAW+1
          LDML   PTAV
          LPN    7
          SHN    13D
          RAML   PTAW+1
          LDML   PTAV
          SHN    -3
          STML   PTAW
          LDN    32D
          STD    T7          SET SEARCH LIMIT
 SPT1     LDDL   T4          HASH INDEX (L)
          LPDL   T6          MASK WITH PTL MASK (L)
          STML   SPTK+1
          LDDL   T3          HASH INDEX (U)
          LPDL   T5          MASK WITH PTL MASK (U)
          STML   SPTK
          LDML   PTAW+1
          ADML   SPTK+1      ADD NEW VALUE TO PTA
          STML   PTAV1+1
          SHN    -20         SAVE POSSIBLE CARRY BIT
          STM    PTAV1
          LDML   PTAW
          ADML   SPTK
          RAML   PTAV1       SPT ADDRESS TO BEGIN SEARCH
          LDC    PTAV1
          RJM    LWA         SET ADDR OF PAGE TABLE IN R-REGISTER
          LDDL   W6          PAGE TABLE OFFSET FROM R
          LMC    RR          ACTIVATE R-REGISTER
          CRDL   W0          PAGE TABLE ENTRY
          CRML   SPTJ,ON     SAVE PTE
          LDDL   W0
          SHN    21-17
          PJN    SPT2        IF INVALID PAGE
          SHN    2
          SCN    0#F
          STDL   W0
          LDDL   W1
          SHN    4-20
          RADL   W0          COMPLETE ASID
          LMDL   CM
          NJN    SPT2        IF NOT CORRECT ASID
          LDDL   W1          EXTRACT SPID AND POSITION
          SHN    -6
          LPN    77
          STD    W0
          LDDL   W1
          LPN    77
          SHN    12
          STDL   W1
          LDDL   W2
          SHN    -6
          RADL   W1          W0/W1 = SPID
          LMDL   T2          COMPARE WITH PN
          NJN    SPT2        IF NO MATCH (ON LOWER)
          LDDL   W0
          LMDL   T1
          ZJN    SPT3        IF MATCH (ON UPPER)
SPT2      AODL   T4          INCREMENT PAGE TABLE HASH INDEX
          SHN    -20         SAVE POSSIBLE CARRY BIT
          RADL   T3
          SOD    T7          DECREMENT SEARCH COUNT
          ZJN    SPT4        IF NO MORE TO SEARCH
          LJM    SPT1        CONTINUE SEARCH

 SPT3     LDDL   CM+2
          LPML   PSMV1
          SHN    -9D
          STD    T5          SAVE PAGE OFFSET FOR A-REGISTER

*         SET UP R-REGISTER AND A-REGISTER OFFSET

          LDDL   W3          CREATE RMA
          STD    T2
          SHN    -14
          STD    T1
          LDD    W2          GET UPPER SIX BITS
          LPN    77
          SHN    4
          RAD    T1          (T1 T2) = R-REGISTER
          LDD    CM+2
          LPC    770
          SHN    11
          LMD    T5          INCLUDE UPPER BITS OF BYTE NUMBER
          SHN    6
          LMC    RR          ACTIVATE R-REGISTER
          LRD    T1
 SPT4     UJP    SPTX        RETURN

 SPTJ     CON    0,0,0,0
 SPTK     CON    0,0
 PTAV1    CON    0,0
 PTAW     CON    0,0
          EJECT
**        WMB -  WRITE TO MODEL DEPENDENT BUFFER
*
*         METHOD             INCREMENT THE PTR TO THE
*                            MODEL DEPENDENT BUFFER AND
*                            WRITE DATA FROM MRVAL.
*
*         ENTRY              (MRVAL) - DATA TO BE WRITTEN TO
*                                      MODEL DEP BUFFER
*
*         CALLED             BY RWP, LMB
*
*         USES               RS, MRVAL
*
*         CALLS



 WMB      SUBR               ENTRY/EXIT
          AOML   LTOL        INCREMENT AMOUNT TO LOG COUNTER
          AOD    RS          INCREMENT OFFSET
          LRD    RS+1
          ADC    RR
          CWML   MRVAL,ON
          UJP    WMBX
          EJECT
**        WRZ -  WRITE ZEROS TO MDB
*
*         METHOD             WRITE (A) WORDS OF ZEROS TO
*                            THE MODEL DEPENDENT BUFFER.
*
*         ENTRY              (A) - # OF WORDS
*
*         CALLED             BY RWP, GPP, GNP, WPC
*
*         USES               MRVAL,W6
*
*         CALLS              WMB


 WRZ      SUBR               ENTRY/EXIT
          STDL   W6          # OF WORDS
          LDN    0
          STML   MRVAL
          STML   MRVAL+1
          STML   MRVAL+2
          STML   MRVAL+3
 WRZ0     RJM    WMB         WRITE MODEL DEP BUFFER
          SODL   W6
          NJP    WRZ0
          UJP    WRZX
          EJECT
**        RWP -  READ, WRITE PROGRAM CONTENTS
*
*         METHOD             ADJUST R-RGTR (W5) LOCATIONS.
*                            READ (A) CM WORDS AND WRITE
*                            DATA TO THE MDB.
*
*         ENTRY              (W4)  - # WORDS TO READ
*                            (A) - START READ - RELATIVE TO RMA
*                            (T1 -T2) R-RGTR VALUE
*                            (T3) - OFFSET
*
*         CALLED             BY WPC, GPP, GNP
*
*         USES               T1 - T3, W4, W5, RS
*
*         CALLS


 RWP      SUBR               ENTRY/EXIT
          MJN    RWP1        IF T3-OFFSET < 0
          STDL   T3
 RWP0     LDDL   T3
          ADC    RR
          LRD    T1
          CRML   MRVAL,ON    READ PROGRAM CONTENTS
          RJM    WMB         WRITE MODEL DEP BUFFER
          SODL   W4
          ZJP    RWPX
          AODL   T3          INCREMENT R-RGTR
          UJP    RWP0        READ NEXT WORD

 RWP1     ADC    0#40
          STDL   T3
          LDDL   T2
          ZJP    RWP2        IF NEED TO BORRW FROM T1
          SODL   T2
          UJP    RWP0

 RWP2     LDDL   T1
          ZJN    RWP4        IF (R-RGTR) < (W5)
          SODL   T1
          LDC    0#FFF
          STDL   T2
          UJP    RWP0

 RWP4     LDDL   W4
          RJM    WRZ         WRITE (W4) WORDS OF ZERO
          UJP    RWPX

          EJECT
**        GPP -  GET PREVIOUS PAGE
*
*         METHOD             SUBTRACT 5 WORDS FROM SVA POINTING TO
*                            TO P.  IF RESULT IS NEG, ZEROS ARE
*                            WRITTEN TO MDB.  OTHERWISE CALCULATE
*                            A NEW RMA, AND WRITE THE PTE TO MDB.
*                            WRITE CONTENTS OF CM STARTING AT NEW
*                            RMA FOR A CALCULATED # OF WORDS.
*                            RESTORE ORIGINAL RMA AND COMPLETE
*                            WRITING DATA (INSTRUCTIONS) TO MDB.
*
*         ENTRY              WPCA - RMA POINTING TO P
*                            WPCB - PAGE OFFSET OF P (WORDS)
*
*         CALLED             BY WPC
*
*         USES               T1 - T4, W5, CM
*
*         CALLS              SPT, RWP, WRZ


 GPP      SUBR               ENTRY/EXIT

*         SAVE PTE OF P

          LDD    RS
          LRD    RS+1
          ADC    RR
          CRML   GPPA,ON

*         SUBTRACT 5 WORDS FROM ORIG SVA

          LDDL   CM+2        SVA.BN (BITS 48-63)
          SBN    40D
          PJN    GPP0        IF NO BORROW NEEDED
          LDDL   CM+1
          ZJP    GPP2        IF (SVA.BN - 40) < 0
          SODL   CM+1
          LDC    0#FFFF
          ADDL   CM+2
          SBN    32D         (-5) + 1 WORDS
 GPP0     STDL   CM+2

*         CALCULATE NEW RMA, WRITE TO MDB

          RJM    SPT         GET NEW RMA
          ZJP    GPP2        IF PAGE MISS
          STDL   T3          STORE OFFSET
          AOML   LTOL        INCREMENT AMOUNT TO LOG COUNTER
          LDD    RS
          LRD    RS+1
          ADC    RR
          CWML   SPTJ,ON     WRITE NEW PTE
          AOD    RS
          ADC    RR
          CWML   GPPA,ON     WRITE PTE OF P
          LDN    5
          SBML   WPCB        5 - PG OFFSET = # WORDS TO READ
          STDL   W4
          LDDL   T3
          RJM    RWP         WRITE PROGRAM CONTENTS

*         RESTORE ORIG RMA, COMPLETE WRITE TO MDB

 GPP1     LDML   WPCA        RE-STORE RMA TO P
          STDL   T1
          LDML   WPCA+1
          STDL   T2
          LDML   WPCB
          ADN    6           # WORDS TO READ
          STDL   W4
          LDN    0
          RJM    RWP         WRITE PROGRAM CONTENTS
          LJM    GPPX

 GPP2     LDN    6
          SBML   WPCB
          RJM    WRZ         WRITE (5 - PG.OFFSET) WORDS W/ZEROS
          UJP    GPP1        FINISH WRITING TO MDB
          SPACE  1
 GPPA     CON    0,0,0,0     SAVED PTE
          EJECT
**        GNP - GET NEXT PAGE
*
*         METHOD             WRITE INSTRUCTIONS FROM FIRST PAGE
*                            TO MDB.  ADD (6-(T4)) TO ORIGINAL
*                            SVA AND USE TO CALCULATE NEW RMA.
*                            FILL IN CALCULATED PTE, AND COMPLETE
*                            WRITING (T4) INSTRUCTIONS TO THE MDB.
*
*         ENTRY              (T4) - # WORDS TO READ FROM NEXT PAGE
*
*         CALLED             BY WPC
*
*         USES               T4 W0 - W5, CM
*
*         CALLS              SPT, RWP, WRZ


 GNP      SUBR               ENTRY/EXIT

*         WRITE INSTRUCTIONS FROM ORIG PAGE

          STML   GNPA        # WORDS ON NEXT PAGE
          LDN    1
          RJM    WRZ         WRITE ZEROS TO 2ND PTE
          LDN    11D
          SBDL   T4
          STDL   W4          # WORDS ON ORIG PAGE
          STML   GNPB
          LDDL   T3
          SBN    5           READ ADDR - RELATIVE TO RMA
          RJM    RWP         READ, WRITE PROGRAM CONTENTS

*         FIND NEXT PAGE, WRITE TO MDB

          LDN    6
          SBDL   T4
          SHN    3           CHANGE TO BYTES
          RADL   CM+2        CALC NEW SVA
          SHN    -20
          RADL   CM+1
          SHN    2
          MJN    GNP0        IF OVERFLOW
          RJM    SPT         SEARCH PAGE TABLE
          ZJN    GNP0        IF PAGE MISS
          STDL   T3          STORE OFFSET
          LRD    RS+1
          LDD    RS
          SBML   GNPB        RESET MDB PTR
          ADC    RR
          CWML   SPTJ,ON     WRITE PAGE TABLE ENTRY
          LDML   GNPA
          STDL   W4
          LDN    0
          RJM    RWP         WRITE DATA FROM 2ND PAGE
          LJM    GNPX

 GNP0     LDML   GNPA        WORDS ON NEXT PAGE
          RJM    WRZ         WRITE (GNPA) WORDS OF ZEROS
          LJM    GNPX
          SPACE  1
*         SAVE AREA

 GNPA     CON    0           # WORDS ON NEXT PAGE
 GNPB     CON    0           # WORDS ON ORIG PAGE

*         END    CTP$DFT_PVA_TO_RMA_ROUTINES
