ASMB,R,L,C   *** RTE-IV PARITY ERROR MODULE *** 
*     DATE:   7/26/77 
*     NAME:   PERR4 
*     SOURCE: 92067-18113 
*     RELOC:  PART OF 92067-16103 
*     PGMR:   E.WONG,M.MANLEY,G.MCANALLY
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
      NAM PERR4,0 92067-16103 REV.1903 790102 
      ENT $PERR,$PETB 
      EXT $CNV1,$CNV3,$YMG,$ERMG,$XCQ,$UNPE,$MAXP 
      EXT $MATA,$DMS,$ABXY,$CIC,$BFOT,$LU?? 
      EXT $IOCL,$ABRT 
A     EQU 0 
B     EQU 1 
* 
*   THIS MODULE OF RTE-IV HANDLES PARITY ERRORS.
*   CALL SEQUENCE FROM RTIO4: 
*     JMP $PERR 
*      <$PERR EXITS VIA $CIC,I> 
* 
*   IF THE PARITY ERROR IS IN THE OPERATING SYSTEM OR CONFIGURATOR PROGRAM, 
*    $PERR HALTS:  HLT 5
*                  (A) = PHYSICAL PAGE NUMBER 
*                  (B) = LOGICAL ADDRESS
* 
*   IF THE PARITY ERROR IS DETECTED IN A DCPC TRANSFER
*   WHILE THE OPERATING SYSTEM IS EXECUTING IN THE SYSTEM MAP,
*    $PERR HALTS:  HLT 5,C
*                  (A) = PHYSICAL PAGE NUMBER 
*                  (B) = LOGICAL ADDRESS
* 
*   IF THE PARITY ERROR IS A SOFT ERROR (UNREPRODUCABLE), 
*    $PERR PRINTS THE MESSAGES: 
*           "PE @ #####"
*           "DMS STAT = ######" 
* 
*   IF THE PARITY ERROR IS IN A PARTITION,
*    $PERR UNLINKS THE PARTITION FROM THE SYSTEM (UNTIL 
*    NEXT BOOT UP).  IT THEN RETURNS WITH : 
*           "PART'N  ##  DOWN"
*           "PART'N  ##  DOWN"   (IF THERE IS A MOTHER PTTN)
* 
*   IF THE PARITY ERROR WAS IN A MEMORY RESIDENT PROGRAM, 
*    $PERR WILL ONLY PRINT THE FOLLOWING MESSAGES 
*    (THESE WILL FOLLOW THE PARTITION DOWN MESSAGES 
*    IN THE CASE OF A PARTITION RESIDENT PROGRAM):
*           "PE PG# ##### BAD"
*           "ABE ###### ###### #" 
*           "XYO ###### ###### #" 
*           "PE  XXXXX #####" 
*           "XXXXX ABORTED" 
* 
* 
*   NOTE THAT THE PROGRAM THAT ENCOUNTERED THE PARITY ERROR 
*   IS NOT NECESSARIALLY THE CURRENTLY EXECUTING PROGRAM. 
*   IE, THE PE ERROR MAY HAVE OCCURED DURING A DMA TRANSFER.
      SKP 
$PERR STA SAVA      INTERRUPT SYSTEM IS TURNED OFF BY RTIO4 
      STB SAVB      SAVE ALL USER REGISTERS 
      LDA $CIC      IN CASE OF
      STA SAVAD       POWER FAIL
      ERA,ALS       (DMS STATUS SAVED IN $DMS BY RTIO4) 
      SOC 
      INA 
      STA SAVEO 
      CXB 
      STB SAVX
      CYB 
      STB SAVY
* 
      LIB 5 
      RBL,CLE,ERB 
      STB LOGPE     SAVE LOGICAL PARITY ERROR ADDR
      LDA 5         PE ALREADY TURNED OFF PE INTERRUPTS 
      STA SAV5      SAVE TRAP CELL 5
      LDA JMPPE 
      STA 5         SWITCH TRAP CELL TO LOCAL 
      CLB 
      STB PTNPE     INITIALIZE PTTN# TO ZERO
      STB PEID      INITIALIZE ID SEG ADDR TO ZERO
      STB PHYPG     INITIALIZE PHYSICAL PAGE # TO ZERO
      JSB TRYPE     TRY FOR P.E. IN SYSTEM MAP (B)=0
* 
*     NOT IN SYSTEM MAP , TRY DCPC MAPS 
* 
DCPC? LDA SAVEU     SAVE CURRENT USER MAP 
      USA 
      LDA INTBA,I 
      SZA,RSS       IS PORT A BUSY? 
      JMP DCPCB      NO, TRY PORT B 
* 
      LDA SAVEP     GET A COPY OF PORT A MAP
      PAA 
      LDA RSTRP      TO PUT INTO USER MAP 
      USA 
      LDB D6
      JSB TRYPE     TRY FOR P.E. IN PORT A  (B)=6 
* 
DCPCB LDA INTBA      TRY IT IN PORT B 
      INA 
      LDA A,I 
      SZA,RSS       PORT B BUSY?
      JMP USEPE      NO, WE'LL TRY USER MAP FINALLY.
* 
      LDA SAVEP     GET A COPY OF PORT B MAP
      PBA 
      LDA RSTRP      TO PUT INTO USER MAP 
      USA 
      LDB D7
      JSB TRYPE     TRY FOR P.E. IN PORT B  (B)=7 
* 
*     TRY USER MAP
* 
USEPE LDA RSTRU     RESTORE USER MAP
      USA 
      CCB 
      JSB TRYPE     TRY FOR P.E. IN USER MAP  (B)=-1
* 
*     NOT IN SYSTEM, USER, PORT A, NOR PORT B.  SOFT PARITY ERROR.
* 
SOFPE LDA SAV5
      STA 5         RESTORE LOCATION 5 FOR $CIC 
      CLE           SET UP FOR OCTAL ASCII CONVERSION 
      LDA $DMS      GET THE DMS STATUS VALUE
      JSB $CNV3     CONVERT TO ASCII
      LDB A,I       GET THE 1ST WORD
      STB SOFT2+8 
      CLE,INA 
      DLD A,I       AND THE SECOND
      DST SOFT2+9 
* 
      LDA LOGPE     GET LOGICAL PARITY ERROR ADDR 
      JSB $CNV3     CONVERT TO ASCII
      LDB A,I       GET THE 1ST WORD
      STB SOFT1+4   AND PUT INTO BUFFER 
      INA 
      DLD A,I       AND NOW THE LAST TWO
      DST SOFT1+5 
* 
      LDA SOFT1     GET THE 1ST MESSAGE 
      JSB $YMG     AND REPORT TO USER 
      LDA SOFT2     GET THE SECOND MESSAGE
      JSB $YMG     AND REPORT IT TOO
* 
PEDON LDB SAVY      RESTORE REGISTERS BEFORE RETURNING
      CBY 
      LDB SAVX
      CBX 
      LDA SAVEO 
      CLO 
      SLA,ELA 
      STF 1 
      LDB SAVB
      CLA 
      CPA $INT,I    IS INT SYS ON?  $INT=0? 
      JMP INTON      YES
* 
      STA $INT,I     NO, CLEAR $INT 
      LDA SAVA      RESTORE A-REG 
      JMP EXIT      REENABLE PARITY ERROR AND RETURN
* 
INTON LDA SAVA      RESTORE A-REG 
      STF 0         TURN ON INTERRUPT SYSTEM
EXIT  STF 5         REENABLE PARITY ERROR 
      JRS $DMS *   RETURN 
SAVAD EQU *-1 
* 
* 
SOFT1 DEF *+1 
      DEC -10 
      ASC 5,PE @ XXXXX
SOFT2 DEF *+1 
      DEC -18 
      ASC 9,DMS STAT =  XXXXXX
D6    DEC 6 
D7    DEC 7 
SAVA  NOP           SAVE A-REGISTER 
SAVB  NOP           SAVE B-REGISTER 
SAVEO NOP           SAVE E AND O REGISTERS
SAVX  NOP           SAVE X-REGISTER 
SAVY  NOP           SAVE Y-REGISTER 
$INT  DEF $DMS+1
SAV5  NOP           SAVE LOCATION 5 CONTENTS
SAVEU DEF UMAP,I    SAVE USER MAP IN MEMORY 
RSTRU DEF UMAP      STORE MEMORY IN USER MAP
SAVEP DEF PMAP,I    SAVE PORT MAP IN MEMORY 
RSTRP DEF PMAP      STORE MEMORY IN PORT MAP
UMAP  BSS 32
PMAP  BSS 32
* 
* 
JMPPE JMP PELNK,I   TRAP CELL INSTRUCTION FOR P.E.
      ORB 
PELNK DEF GOTPE     BASE PAGE LINK TO PARITY ERROR CODE 
      ORR 
* 
* 
*     SUBROUTINE TO TRY TO GET PARITY ERROR AGAIN 
* CALL SEQUENCE:
*     (LOGPE)       = LOGICAL ADDRESS 
*     (B)           = 0  TRY IT IN SYSTEM MAP 
*     (B)           # 0  TRY IT IN CURRENT USER MAP 
*     JSB TRYPE     CALL
*      <RETURN>     NO PARITY ERROR OCCURRED
* 
TRYPE NOP           TRY TO VERIFY PARITY ERROR
      STB PORT      SAVE MAP INDICATOR
RETRY STF 5         ENABLE PARITY INTERRUPTS
      SZB           DO IT IN SYSTEM MAP?
      JMP TRYUS      NO, TRY IT IN USER MAP 
* 
      LDA LOGPE,I   DO READ OF SUSPECTED LOCATION 
      JMP NOPE      NO P.E.  RETURN 
* 
TRYUS XLA LOGPE,I   TRY READ OF SUSPECTED LOCATION
      NOP           WAIT FOR MX HARDWARE TO COOL OFF! 
NOPE  CLF 5         TURN OFF PE INT SO WE DON'T GET CONFUSED
      JMP TRYPE,I   NO P.E. IN USER MAP, RETURN 
* 
* 
*     GOT A PARITY ERROR FROM TRYPE SUBROUTINE
* 
GOTPE LIA 5         GOT A PARITY ERROR
      RAL,CLE,ERA    BUT IS IT A SECOND PE ERROR
      CPA LOGPE      OR IS IT A VERIFICATION OF SAME ONE? 
      RSS            SAME, SKIP 
      JMP RETRY      SECOND ONE, TRY AGAIN TO VERIFY FIRST
* 
      LDA SAV5      WE CAN NOW SAFELY RESTORE 
      STA 5          TRAP CELL FOR MP/DMS/PE INTERRUPTS 
* 
      LDA LOGPE     GET PE ADDR 
      AND B76K       GET LOGICAL PAGE # 
      ALF 
      RAL,RAL       (A) = LOGICAL PAGE #
      SZB           USING SYSTEM MAP? 
      ADA B40        NO, USE USER MAP REG#
      CCB 
      CBX           (X) = -1 FOR READ 1 REGISTER
      LDB DPHYP     READ IT INTO 'PHYPG'
      XMM           READ MAP REGISTER 
      LDA PHYPG 
      AND B1777     KEEP LOWER 10 BITS
      STA PHYPG      AS PHYSICAL PAGE NUMBER
* 
      LDB PORT
      SSB           WAS THE PE IN USER MAP? 
      JMP INPRG      -  YES, FIND PROGRAM 
* 
      SZB           WAS THE PE IN SYSTEM MAP? 
      JMP DMAPE      +  NO, FIND THE CURRENT DMA REQUESTOR
* 
*     PARITY ERROR WAS VERIFIED TO BE IN THE SYSTEM MAP 
*     OR IT WAS IN A USER PAGE CONTAINING SYSTEM TABLES.
*     AT HLT  (A)=PHYSICAL PAGE #   (B)=LOGICAL ADDR
* 
INSYS LDA PHYPG     PE IN SYS OR SYS TABLES 
      LDB LOGPE 
HLT05 HLT 5         102005 HALT FOR SYS PE ERROR
      JMP *-1        DON'T ALLOW TO PROCEED 
* 
* 
*     PARITY ERROR WAS VERIFIED TO BE IN A DCPC TRANSFER
*     WHILE THE SYSTEM MAP WAS ENABLED.  SINCE RTE IS NOT 
*     REENTRANT, WE CANNOT PROCESS ERROR MESSAGES OR ABORT
*     ANY PROGRAMS BECAUSE WE MAY HAVE INTERRUPTED FROM 
*     THAT CODE.
*     AT HLT  (A)=PHYSICAL PAGE #   (B)=LOGICAL ADDR
* 
INDMA LDA PHYPG     PE IN DCPC TRANSFER DURING SYS MAP
      LDB LOGPE 
HLTC5 HLT 5,C       103005 HALT FOR DCPC DURING SYS 
      JMP *-1        DON'T ALLOW TO PROCEED 
* 
* 
* 
$PETB EQU *         ENTRY POINT FOR ANALYSER
PHYPG NOP           $PETB+0  PHYSICAL PAGE NUMBER 
LOGPE NOP           $PETB+1  LOGICAL PARITY ERROR ADDRESS 
PORT  NOP           $PETB+2  MAP CONTAINING PARITY ERROR
PEID  NOP           $PETB+3  ID SEGMENT ADDRESS IF PROGRAM PE 
PTNPE NOP           $PETB+4  PARTITION NUMBER(S) IF PROGRAM PE
B1777 OCT 1777
B76K  OCT 76000 
B40   OCT 40
      HED  PARITY ERROR IN A PORT MAP 
DMAPE LDA $DMS      GET DMS STATUS AT PE INTERRUPT
      RAL 
      SSA,RSS       DID WE INTERRUPT FROM SYSTEM MAP? 
      JMP INDMA      YES, HLT 5,C 
* 
      LDA RSTRU     RESTORE ORIGINAL USER MAP 
      USA 
      LDA PORT
      AND D1
      ADA INTBA 
      LDA A,I       GET EQT ADDR OF DMA USER
      RAL,CLE,ERA    CLEAR SIGN BIT FIRST 
      LDB A,I       GET EQT LINK WORD 
      SSB,RSS       DOING SYSTEM CLEAR? 
      SZB,RSS        OR EQT ALREADY UNLINKED? 
      JMP INSYS      YES, JUST GIVE SYS PE, DON'T KNOW PROG 
* 
      LDA B 
      INA 
      LDA A,I       GET CONTROL WORD TO CHECK T 
      RAL 
      SSA           T=1 OR T=3? 
      JMP INSYS      YES, SYSTEM IS DOING I/O 
* 
      SLA,RSS       T=0?
      JMP PRGPE      YES, USER DOING I/O
* 
      ADB D4        T=2.
      LDB B,I       GET TYPE OF $XSIO CALL
      RBL,CLE,ERB   CLEAR SIGN, KEEP IT IN (E)
      SZB,RSS       IS IT A SYSTEM REQUEST? 
      JMP INSYS      YES, =0  OR  100000
      JMP PRGPE      NO, USER REQ  (B)=ID SEG ADDR
* 
* 
B77   OCT 77
D1    DEC 1 
D2    DEC 2 
D4    DEC 4 
D14   DEC 14
D15   DEC 15
D21   DEC 21
DPHYP DEF PHYPG 
      HED  PARITY ERROR IN A USER PROGRAM 
INPRG LDB XEQT       IN CURRENT USER MAP
      SZB           IS PROG = 0?
      JMP PRGPE      NO, PROG.  GET MAT INFO
* 
      LDB EQT1,I     YES, MAYBE INTERRUPT DRIVER. 
      RBL,CLE,ERB 
      SZB,RSS       I/O IN PROGRESS?
      JMP INSYS      NO, DO SYS PE HALT 
* 
      LDA B         LEAVE POSSIBLE ID ADDR IN (B) 
      INA 
      LDA A,I       CHECK T-FIELD IN CONTROL WORD 
      RAL,RAL 
      AND D3
      SZA           T=00?  (UNBUFFERED USER)
      JMP INSYS      NO, DO SYS PE HALT 
* 
PRGPE STB PEID      (B)=ID SEG ADDR OF USER 
* 
      JSB $LU??     FETCH THE TERMINAL LU FOR THIS PROG(LU RTNS IN (A)
       CLA          IF NOT SESSION/MTM, PRINT ON LU 1 ONLY
       INA          IF LU = 1 (LU=LU-1) SET ECH1=1 FOR TEST 
      STA ECH1
      LDB PEID      FETCH ID ADDR 
* 
      ADB D14 
      LDA B,I 
      AND D15       GET PROG TYPE 
      CPA D1        IS IT MEMORY RESIDENT PROG? 
      JMP ABPRG      YES, JUST ABORT PROG 
* 
      LDA PEID
      ADA D21       GET MAP ID WORD 
      LDA A,I 
      AND B77       GET PTTN #
      MPY MATSZ     MULT BY MAT ENTRY SIZE
      ADA $MATA 
      JSB MATAD     SET UP MAT PTRS 
* 
      LDA MLNK,I    GET THE LINK WORD 
      INA,SZA,RSS   DID WE ALREADY UNDEFINE THIS GUY ?
      JMP PEDON     YES, SO DON'T DO IT AGAIN.
* 
      LDA MADR,I    IS PE IN MOTHER PTTN? 
      SSA 
      JMP MOMPE      YES, HAVE TO FIND SUBPTTN
* 
*     PE IS IN A SUBPARTITION, FIND THE MOTHER PARTITION
* 
      JSB INPT?     IS LOCATION IN PTTN?
       JMP INSYS     NO, PE IN SYS PORTION OF USER MAP! 
      LDB MLNK      SUBPTTN OR REGULAR PTTN 
      STB SUB        HAS THE PE 
      JSB $UNPE     UNLINK FROM ALLOC LIST AND UNDEFINE 
NXSPE LDA MSUBL,I 
      STA MOM       SAVE POSSIBLE MOTHER PTTN ADDR
      SZA,RSS       IS THIS A SUBPTTN?
      JMP BLDPT      NO, GO BUILD PTTN PE WORD
* 
      JSB MATAD      YES, SEARCH FOR MOTHER PTTN
      LDA MADR,I
      SSA,RSS       IS THIS THE MOTHER? 
      JMP NXSPE      NO, TRY NEXT SUBPTTN LINK
* 
      LDB MLNK       YES, FOUND THE MOTHER LINK 
      JSB $UNPE     UNLINK MOTHER PTTN FROM FREE LIST 
      JMP BLDPT     FOUND IT ALL NOW
* 
* 
*     PE IS MOTHER PARTITION, FIND THE AFFECTED SUBPARTITION
* 
MOMPE JSB INPT?     IS PE ACTUALLY IN MOTHER PTTN?
       JMP INSYS     NO, SAY IT IS IN SYS.
      LDB MLNK       YES, PE OCCURRED IN MOTHER PTTN
      STB MOM       SAVE FOR PTTN PE WORD 
      JSB $UNPE     UNLINK MOTHER PTTN FROM ALLOC LIST
* 
NXSP2 LDA MSUBL,I 
      CPA MOM       DONE YET? 
      JMP BLDP2      YES, PE JUST IN MOTHER PTTN
* 
      STA SUB        NO, NEED TO FIND SUBPTTN WITH PE 
      JSB MATAD 
      JSB INPT?     IS PE IN THIS SUBPTTN?
       JMP NXSP2     NO, TRY NEXT 
* 
SBPPE LDB MLNK      UNLINK AND UNDEFINE 
      JSB $UNPE      THIS SUBPARTITION. 
* 
BLDPT LDB SUB       GET PTTN/SUBPTTN OF PE
      JSB PTTNO      CONVERT IT TO PTTN#
      STA PTNPE      SET INTO BITS 0-7 OF PTTN PE WORD
BLDP2 LDB MOM       GET POSSIBLY MOTHER PTTN ADDR 
      STB A 
      CPB SUB        BUT IF SAME AS SUBPTTN 
      CLA            THEN USE 0 IN PTTN PE WORD 
      SZA            THEN USE 0 IN PTTN PE WORD BITS 8-15 
      JSB PTTNO     CONVERT TO PTTN#
      ALF,ALF 
      IOR PTNPE 
      STA PTNPE     PUT INTO BITS 8-15
* 
UNCHN LDA MOM       NOW UNCHAIN SUBPTTNS
      SZA,RSS       ANY MOTHER PTTN AFFECTED? 
      JMP UPEDN      NO, USER PE. DONE. 
* 
UNCH2 JSB MATAD      YES, MOTHER PTTN INVOLVED
      LDA MLTH,I
      AND C40K      CLEAR "C" BITS IF SET 
      STA MLTH,I
      LDA MSUBL,I   GET NEXT SUBPTTN ADDR 
      CLB 
      STB MSUBL,I   CLEAR LINK WORD 
      CPA MOM       DONE YET? 
      JMP UPEDN      YES, RETURN PE TO EXEC 
      JMP UNCH2      NO, DO NEXT SUBPTTN
* 
UPEDN JSB $MAXP     RE-ESTABLISH MAX PTTN SIZES 
* 
* 
      LDA PTNPE     GET PTTN NUMBERS
      AND B377      SAVE LOWER BYTE 
      SZA,RSS       ANY SUBPTTN?
      JMP P1TRY      NO, JUST MOTHER PTTN?
* 
P1MOR CCE           COUNT FROM 1 & DO DECIMAL CONVERSION. 
      JSB $CNV1     CONVERT TO ASCII
      STA PEMSG+6   PUT INTO THE ERROR MESSAGE
      LDA PEMSG     GET THE LOCATION OF THE ERROR MESSAGE 
      LDB PEID      GET ID ADDR OF PROG 
      LDX ECH1      FETCH ECHO FLAG 
      DSX           IF IT WAS = 1, PRINT ON LU 1 ONLY 
      JSB $BFOT     NOPE-- ECHO ON USER TERMINAL
      JSB $YMG      ISSUE DOWN PTN ERROR TO LU 1
* 
P1TRY LDA PTNPE     GET THE PARTITION NUMBER(S) AGAIN 
      ALF,ALF       GET NEXT PARTITION TO LOWER BYTE
      AND B377      SAVE THE LOWER BYTE 
      SZA,RSS       IS THERE A MOTHER PARTITION ? 
      JMP ABPRG     NO,TELL BAD PAGE #
      STA PTNPE    SAVE PARTITION # 
      JMP P1MOR    DO IT ONCE MORE
* 
* 
ABPRG LDA PHYPG    GET THE BAD PG#
      CCE           DO DECIMAL CONVERSION FROM 0
      JSB $CNV3    AND CONVERT TO DECIMAL ASCII 
      LDB A,I      GET THE 1ST WORD 
      STB BDPG#+5  AND SAVE 
      INA 
      DLD A,I      NOW GET THE LAST TWO 
      DST BDPG#+6 
      LDA BDPG#     GET THE ADDRESS OF THE MESSAGE
      LDB PEID      FETCH ID ADDR OF PROG 
      LDX ECH1      FETCH ECHO FLAG 
      DSX           IF USER TERMINAL NOT = LU 1 
      JSB $BFOT     ISSUE PE ERROR TO SESSION TERM
      JSB $YMG      AND SEND IT TO THE SYS CON ALSO 
* 
* 
      LDB PEID      GET ID SEG ADDR OF PROG 
      SZB,RSS 
      JMP PEDON 
      STB XEQT      FAKE OUT ABORT PROCESSORS 
      CBX 
* 
      LDA LOGPE     GET LOGICAL PARITY ERROR ADDR 
      SAX D8,I      AND PUT IT INTO THE POINT OF SUSP WORD
      JSB $ABXY     DUMP A,B,E,X,Y,O REGS 
      LDA PE        NOW GO ABORT THE PROGRAM
      LDB BLANK 
* 
      JSB $ERMG     NOTE! SPECIAL PROCESSING: ONLY PRINTS MESSAGE 
* 
      STF 5         REENABLE PARITY ERROR 
* 
*  SPECIAL WORK MUST BE DONE HERE IN CASE THE PROGRAM CAUGHT
*  BY THE PARITY ERROR WAS I/O SUSPENDED. 
* 
      LDA PEID      FETCH ID ADDR OF PROG TO BE ABORTED 
      ADA D15       ADVANCE TO STATUS 
      LDA A,I 
      AND D15       ISOLATE STATUS
      LDB A         SAVE IN (B) 
      LDA PEID      FETCH ID ADDRESS FOR $IOCL OR $ABRT 
      CPB D2        IF I/O SUSPEND
      JMP $IOCL       YES, DO I/O CLEAN UP, ABORT , XEQ.
      JSB $ABRT       NO, JUST ABORT THE PROGRAM. 
      JMP $XCQ
* 
* 
* 
ECH1  NOP 
B377  OCT 377 
D8    DEC 8 
* 
BLANK ASC 1,
PEMSG DEF *+1 
      DEC -16 
      ASC 8,PART'N  XX  DOWN
BDPG# DEF *+1 
      DEC -16 
PE    ASC 8,PE PG# XXXXX BAD
* 
* 
*  INPT? - VERIFY IF PE PAGE IN IS A PARTITION
* 
*  CALL SEQUENCE: 
*     MATA ADDR SET UP BY MATAD 
*     JSB INPT? 
*      <RETURN, NOT IN PTTN>
*      <RETURN, PE IS IN PTTN>
*       REGISTERS ARE MEANINGLESS 
* 
INPT? NOP           IS PE IN PTTN PAGES?
      LDA MADR,I    TRY TO FIND IF PE OCCURRED IN PAGES 
      AND B1777      WITHIN THE SUBPTTN OR
      STA B          IT WAS IN THE SYSTEM PAGES 
      CMA,INA        OF THE USER MAP
      ADA PHYPG 
      SSA           PE PAGE# < FIRST PAGE PTTN? 
      JMP INPT?,I    YES, PE BELOW PTTN PAGES.  RETURN P+1
* 
      LDA MLTH,I
      AND B1777 
      ADA B         ADD #PAGES IN PTTN FOR LAST PAGE
      CMA,INA 
      ADA PHYPG 
      SZA 
      SSA           PE PAGE# > LAST PAGE PTTN?
      ISZ INPT?      NO, PE IN PTTN PAGES.  RETURN P+2
      JMP INPT?,I    YES, PE ABOVE PTTN PAGES.  RETURN P+1
* 
* 
*  PTTNO - CONVERT PTTN MAT ADDR TO PTTN NUMBER 
* 
*  CALL SEQUENCE: 
*     (B) = MAT ADDR
*     JSB PTTNO 
*      <RETURN> 
*      (A) = PTTN # 
* 
PTTNO NOP           (B) = MAT ADDR
      LDA $MATA 
      CMA,INA       SUBTRACT BEGINNING OF MAT 
      ADA B          TABLE FROM MAT ADDR
      CLB 
      DIV MATSZ     DIVIDE BY #WORDS PER ENTRY
      INA 
      JMP PTTNO,I   RETURN PTTN # IN (A)
* 
* 
C40K  OCT 137777
D3    DEC 3 
SUB   NOP           MAT ADDR OF SUBPTTN 
MOM   NOP           MAT ADDR OF MOTHER PTTN 
* 
* 
* 
      SKP 
*           MAT ENTRY 
* 
*   WORD   DESCRIPTION
*          !--!--.--.--!--.--.--!--.--.--!--.--.--!--.--.--!
*          !15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00!
*          !--!--.--.--!--.--.--!--.--.--!--.--.--!--.--.--!
*          !  !        !        !        !        !        !
* MLNK   0 !00!         LINK TO NEXT ENTRY IN LIST         !
*          !  !        !        !        !        !        !
*          !--!--------!--------!--------!--------!--------!
*          !  !        !        !        !        !        !
* MPRIO  1 !00!          PRIORITY OF PARTITION OCCUPANT    !
*          !  !        !        !        !        !        !
*          !--!--------!--------!--------!--------!--------!
*          !  !        !        !        !        !        !
* MID    2 !00!         ID SEGMENT ADDRESS OF OCCUPANT     !
*          !  !        !        !        !        !        !
*          !--!--------!--------!--------!--------!--------!
*          !  !        !        !        !        !        !
* MADR   3 ! M!**  D ********     BEGIN PHYSICAL PAGE#     !
*          !@@!        !      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@!
*          !--!--------!--------!--------!--------!--------!
*          !  !        !        !        !        !        !
* MLTH   4 ! R! C *****!*****     NUMBER OF PAGES IN PTTN  !
*          !@@!        !      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@!
*          !--!--------!--------!--------!--------!--------!
*          !  !        !        !        !        !        !
* MRDFL  5 !RT!***********************************! STATUS !
*          !@@!        !        !        !        !        !
*          !--!--------!--------!--------!--------!--------!
*          !  !        !        !        !        !        !
* MSUBL  6 !00!       POINTER TO NEXT SUBPTTN OR 0         !
*          !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!
*          !--!--.--.--!--.--.--!--.--.--!--.--.--!--.--.--!
*          !15!14 13 12!11 10 09!08 07 06!05 04 03!02 01 00!
*          !--!--.--.--!--.--.--!--.--.--!--.--.--!--.--.--!
* 
* "@" MARKS THE PARTS WHICH ARE SET AT GENERATION TIME: 
* "*" MARKS THE RESERVED PARTS
* 
**************************************
*  SET UP POINTERS TO ENTRY IN MAT
*  CALL: (A) = MAT ADDR 
*        JSB MATAD
*         <RETURN>
**************************************
* 
MATAD NOP 
      STA MLNK      SET MAT ENTRY POINTER 
      ADA D3
      STA MADR      MAP START ADR 
      INA 
      STA MLTH      PTTN LENGTH IN PAGES
      INA 
      STA MRDFL     READ COMPLETION FLAG
      INA 
      STA MSUBL     SUBPARTITION LINK WORD
      JMP MATAD,I 
* 
* 
MATSZ DEC 7 
MLNK  NOP            LINKAGE WORD 
MADR  NOP           MAP START,BITS 0-9
MLTH  NOP           PTTN LENGTH, BITS 0-9 
MRDFL NOP           READ FLG(0-2),RT FLAG(15) 
MSUBL NOP 
* 
* 
* 
XMATA EQU 1646B     ADDR OF CURR MAT ENTRY
INTBA EQU 1654B     INTERRUPT TABLE ADDR
EQT1  EQU 1660B     WORD 1 ADDR OF CURRENT EQT
XEQT  EQU 1717B     ADDR OF CURRENT PROG ID SEG 
* 
      BSS 0         SIZE OF MODULE
      END $PERR 
                                                                                                      