*DECK MALET10 
          IDENT  MALET10
          LCC    OVERLAY(1,0,C000000) 
*CALL,VERS
          COMMENT OVERLAY FOR MALET  "VERS" 
          TITLE  MALET10 - DIRECTIVE PROCESSORS 
*CALL ASSYTAG 
          TITLE 
*CALL MALMAC
* 
*         OVERLAY SUBROUTINE ENTRY TABLE
* 
*                - MUST LOAD AT FRONT OF OVERLAY -
* 
          USE    /ENTRY10/
 ENTRIES  SET    1
*CALL MALNK10 
*CALL MALNK11 
*CALL MALNK12 
          USE    *
* 
*         OVERLAY SUBROUTINE ENTRY POINTS 
* 
          ENTRY  CVTHEX 
          ENTRY  GO 
          ENTRY  INRMOD 
          ENTRY  LSTERR 
          ENTRY  RDSFILE
          ENTRY  UPDIS
          ENTRY  PICTURE
          ENTRY  STOP 
          ENTRY  STRPPU 
          ENTRY  UPPU 
* 
*         SUBROUTINES IN MAIN OVERLAY 
* 
          EXT    BLK
          EXT    CHKSUM 
          EXT    CVTDEC 
          EXT    CVTDIS 
          EXT    CVTINT 
          EXT    CVTHXB 
          EXT    FILL 
          EXT    LOADOVL
          EXT    MSG
          EXT    POST 
          EXT    PRINT
          EXT    SBYTE
          EXT    SEARCH 
          EXT    SVREG
          EXT    UPS
* 
*         DATA AREAS IN MALET00 
* 
          EXT    AA 
          EXT    BLANKS 
          EXT    BUFIN
          EXT    CALLMLD
          EXT    CALLMSB
          EXT    CALLWLD
          EXT    CB 
          EXT    CLINE
          EXT    CNTMAX 
          EXT    CNTLINE
          EXT    CRKBUF 
          EXT    DB 
          EXT    DS 
          EXT    DUMFET 
          EXT    EMB
          EXT    EMBL 
          EXT    END0 
          EXT    FORMAT 
          EXT    INDEX
          EXT    INPUT
          EXT    IRB
          EXT    KEY
          EXT    KLDC1
          EXT    KLMSG
          EXT    KLPAR
          EXT    KLPAR0 
          EXT    KLPPU
          EXT    KLRSW
          EXT    KLSW 
          EXT    LINDEXL
          EXT    LINES
          EXT    LMODULE
          EXT    LSOURCE
          EXT    MB 
          EXT    MLDCIO 
          EXT    MLDCPM 
          EXT    SBPCIO 
          EXT    SBPCPM 
          EXT    WLDCIO 
          EXT    WLDCPM 
          EXT    MODULE 
          EXT    MSGBUF 
          EXT    MTRIN
          EXT    ORB
          EXT    PB 
          EXT    PLINE
          EXT    PURA 
          EXT    RDIC 
          EXT    RDID 
          EXT    RFILE
          EXT    RUNDIS 
          EXT    SBPIR
          EXT    SECURE 
          EXT    SOURCE 
          EXT    STATUSX
          EXT    SVRB2
          EXT    SVRB7
          EXT    TPARM1 
          EXT    TPARM1L
          EXT    UPKL 
          EXT    UPPBUF 
          EXT    VERSION
          EXT    WBFZ 
          EXT    WCH1 
          EXT    WCSU 
          EXT    WDB
          EXT    WDEVIC 
          EXT    WDEVIC2
          EXT    WDSN 
          EXT    WEQIP
          EXT    WMSID
          EXT    WMST 
          EXT    WMSTPH 
          EXT    WUNIT
* 
*         MESSAGES IN MALET00 
* 
          EXT    MSGE1
          EXT    MSGE1A 
          EXT    MSGE2
          EXT    MSGE2A 
          EXT    MSGE4
          EXT    MSGE5
          EXT    MSGE7
          EXT    MSGE8
          EXT    MSGE9
          EXT    MSGE9A 
          EXT    MSGE12 
          EXT    MSGE13 
          EXT    MSGE14 
          EXT    MSGE16 
          EXT    MSGE17 
          EXT    MSGE20 
          EXT    MSGE23 
          EXT    MSGE25 
          EXT    MSGE28 
          EXT    MSGE33 
          EXT    MSGE36 
          EXT    MSGE37 
          EXT    MSGE60 
          EXT    MSGE61 
          EXT    MSGE63 
          EXT    MSGE63A
          EXT    MSGE99 
          EXT    MSGE114
          EXT    MSGE115
          EXT    MSG16
* 
*         FLAGS FOR EXECUTIVE (IN MALET00)
* 
          EXT    FAL
          EXT    FCHK 
          EXT    FDFT 
          EXT    FCIO 
          EXT    FDIS 
          EXT    FDL
          EXT    FDROP
          EXT    FDRP 
          EXT    FEOFI
          EXT    FKL
          EXT    FLL
          EXT    FLOG 
          EXT    FPL
          EXT    FRC
          EXT    FRM
          EXT    FRT
          EXT    FRUN 
          EXT    FRUNUP 
          EXT    FSB
          EXT    FSBPC
          EXT    FSE
          EXT    FSHARE 
          EXT    FSTOP
          EXT    FSUSPI 
          EXT    FTERM
          EXT    FTL
          EXT    F16SN
          EXT    F721 
* 
*         DATA AREA ENTRY POINTS
* 
          ENTRY  LODA 
          ENTRY  LODB 
          ENTRY  LODC 
          ENTRY  LODD 
          ENTRY  TRUN 
          ENTRY  TRUNL
          ENTRY  RUNAME 
          ENTRY  RUNWD
          ENTRY  RUNSH
          ENTRY  RUNB4
          ENTRY  RUNB5
          ENTRY  RUNTBL 
* 
*         SECOND OVERLAY AREA 
* 
          ENTRY  AREA2
*CALL MALCD1
 LODA     DATA   0           LAST MODULE NUMBER LOADED IF 2 NUMBER
 LODB     DATA   0           CODE FOR RESUME/RUN MODULE 
 LODC     DATA   0           LAST CALL OUTPUT REGISTER
 LODD     DATA   0           LAST CALL MODULE NAME
  
**        TABLE TRUN CONTAINS THE MODULE NUMBERS IN FIVE GROUPS OF TWO
*         DISPLAY CODE NUMBERS FOR A MAXIMUM PF TRUNL WORDS.
* 
 TRUN     BSSZ   20          MODULE NO. TABLE STORED IN 12 BIT BYTES. 
 TRUNL    EQU    *-TRUN      LENGTH OF TABLE TRUN.
 RUNAME   DATA   0           MODULE NAME UPPER 3 CHARACTERS.
 RUNWD    VFD    60/TRUN     ADDRESS OF CURRENT WORD.(USED FOR LOADING) 
 RUNSH    DATA   12          SHIFT COUNT TO GET CURRENT MODULE NO.
 RUNB4    DATA   0           CONTAINS B4 ON INCOMPLETE RUN DIRECTIVE. 
 RUNB5    DATA   0           CONTAINS B5 ON INCOMPLETE RUN DIRECTIVE. 
 RUNTBL   DATA   0
          EJECT 
 LOAD11   TITLE  LOAD OVERLAY MALET11 
**        LOAD11 - LOAD MALET11 OVERLAY 
* 
*         K. B. SMITH  78/3/21
* 
* 
*         EXIT   MALET11 OVERLAY HAS BEEN LOADED
* 
*         ROUTINES CALLED - LOADOVL 
* 
* 
**        STEP 01 - LOAD OVERLAY THEN RETURN
* 
 LOAD11   DATA   0
          SX1    LOAD11A
          RJ     LOADOVL
          EQ     LOAD11 
 LOAD11A  OVLTAB  7LMALET11,1,1 
          EJECT 
 CLRDS    TITLE  CLRDS - PROCESS CLRDS DIRECTIVE. 
**        CLRDS - PROCESS CLRDS DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         CLRDS - PROCESS OFF DS REGISTER SWITCHS DIRECTIVE.
* 
*           DIRECTIVE 'CLRDS SE,RM,TE,BM,BT'
* 
*              SE = STOP ON ERROR.
*              RM = REPEAT MODULE.
*              RT = REPEAT TEST.
*              RC = REPEAT CONDITION. 
* 
*         ENTRY  CRKBUF = DISPLAY CODE DIRECTIVE PLUS PARAMETERS. 
* 
*                TBLRSW   59-36 = DISPLAY CODE NAME.
*                         35-18 = DISPLAY ADDRESS TO BE UPDATED.
*                         17-00 = FLAG ADDRESS. 
* 
*         EXIT   DS  = SWITCHES THAT ARE SET. 
*                K/L = DISPLAY UPDATED WITH NEW SWITCHE SETTINGS. 
* 
*         ROUTINES CALLED -  UPDIS   - CHANGE DISPLAY TO PARAM. 
*                            POST    - POST MESSAGE.
* 
*         DATA AREAS USED -  TBLRSW - REMOTE SWITCH TABLE.
*                            IRB  -  PPU INPUT REGISTER.
* 
*         USES   A - 1, 2, 3, 6.
*                X - 1, 2, 3, 4, 5, 6.
*                B - 2, 3, 4. 
* 
*         MESSAGES   (PARAMETER ERROR .. PARAMETER) 
* 
  
**        STEP -01- INITIALIZE REGISTERS THEN STEP 2. 
* 
 CLRDS    DATA   0           ENTRY/EXIT 
          SA3    DS          (X3) = PPU INPUT REGISTER
          SB2    CRKBUF+1    (B2) = ADDRESS WITHIN CRKBUF 
          SB3    B0          (B3) = BIT NUMBER TO CLEAR 
          SB4    TBLRSW      (B4) = ADDRESS OF SSW TABLE
          MX5    18          (X5) = 18 BIT MASK 
  
**        STEP -02- SEARCH TABLE TBLRSW FOR ENTRY THAT MATCHES
*                   PARAMETER ON CLRSW CALL IF NO ENTRY PRESENT 
*                   THEN STEP 5, IF END OF TABLE AND MATCH NOT
*                   FOUND THEN STEP 4, IF MATCH FOUND THEN STEP 3.
* 
 CRR1     SA1    B2          GET PARAMETER
          ZR     X1,CRR4     IF PARAMETER NOT PRESENT 
          SA2    B4+B3       GET DISPLAY CODE VALUE FROM TABLE
          ZR     X2,CRR3     IF END OF TABLE
          MX6    54 
          BX1    X6*X1       CLEAR LOWER CHARACTER
          BX6    X5*X2
          BX6    X6-X1
          ZR     X6,CRR2     IF MATCH FOUND 
          SB3    B3+B1       INCREMENT INDEX INTO TABLE 
          EQ     CRR1        LOOP UNTIL MATCH FOUND OR END OF TABLE 
  
**        STEP -03- POSITION BIT TO CORRECT POSITION FOR SWITCH AND 
*                   UPDATE SWITCH THEN STORE OFF INTO DISPLAY THEN
*                   INCREMENT TO NEXT PARAMETER THEN STEP 2.
* 
 CRR2     SX6    B1 
          LX6    B3          SHIFT MASK TO CORRECT POSITION 
          BX3    -X6*X3      CLEAR BIT
          SA1    CRRA        GET DISPLAY CODE ON LEFT JUSTIFIED 
          SA2    X2          GET DISPLAY LINE 
          MX4    -42         MASK BITS 59-41  18 BITS  3 CHAR 
          BX2    -X4*X2      CLEAR UPPER 18 BITS
          BX6    X1+X2       .OR. OFF INTO UPPER BITS 
          SA6    A2          STORE UPDATED DISPLAY
          SB3    B0          RESET INDEX INTO TABLE 
          SB2    B2+B1       INCREMENT TO NEXT PARAMETER
          EQ     CRR1        LOOP UNTIL DONE
  
**        STEP -04- POST PARAMETER ERROR MESSAGE THEN STEP 2. 
* 
 CRR3     SX6    B2 
          SA6    CRRB 
          BX6    X1 
          SA6    MSGE1A 
          SB2    MSGE1
          BX6    X3 
          SA6    CRRC        SAVE (X3)
          RJ     POST        POST PARAMETER ERROR .. PARAMETER
          SA3    CRRC        RESTORE X3 
          SA1    CRRB 
          SB2    X1+1        RESTORE B2 TO B2+1 
          SB3    B0          RESET INDEX INTO TABLE 
          SB4    TBLRSW      (B4) = ADDRESS OF SSW TABLE
          MX5    18 
          EQ     CRR1        LOOP UNTIL DONE
  
**        STEP -05- STORE UPDATED SWITCHES INTO IRB AND UPDATE
*                   DISPLAY IF KL DISPLAY FLAG ON THEN STEP 6.
* 
 CRR4     BX6    X3 
          SA6    DS          STORE NEW WORD WITH RSW UPDATED
          SB3    DPARAM 
          RJ     UPDIS       UPDATE DISPLAY WITH PARAMETERS 
  
**        STEP -06- RETURN. 
* 
 CRR5     EQ     CLRDS       RETURN 
  
 CRRA     VFD    60/3LOFF 
 CRRB     DATA   0
 CRRC     DATA   0
  
**        REMOTE SWITCH DEFINITION TABLE BITS.
* 
*         59-36 = DISPLAY CODE NAME 
*         35-18 = UNUSED
*         17-00 = DISPLAY ADDRESS TO BE UPDATED 
* 
 TBLRSW   VFD    24/2LSE,18/0,18/KLRSW+00  STOP ON ERROR      BIT 00
          VFD    24/2LRM,18/0,18/KLRSW+06  REPEAT MODULE      BIT 01
          VFD    24/2LRC,18/0,18/KLRSW+09  REPEAT CONDITION   BIT 02
          VFD    24/2LBC,18/0,18/KLRSW+12  BEGINNING OF COND  BIT 03
          VFD    24/2LBM,18/0,18/KLRSW+15  BEGINNING OF MOD   BIT 04
          VFD    24/2LBT,18/0,18/KLRSW+18  BEGINNING OF TEST  BIT 05
          VFD    24/2LTE,18/0,18/KLRSW+21  TEST END           BIT 06
          VFD    24/2LCE,18/0,18/KLRSW+24  CONDITION END      BIT 07
          VFD    24/2LME,18/0,18/KLRSW+27  MODULE END         BIT 08
          VFD    24/2LS1,18/0,18/KLRSW+30  PROGRAMABLE SWITCH BIT 09
          VFD    24/2LRT,18/0,18/KLRSW+03  REPEAT TEST        BIT 10
          VFD    24/2LS2,18/0,18/KLRSW+33  PROGRAMABLE SWITCH BIT 11
          VFD    60/0 
          EJECT 
 CLRSW    TITLE  CLRSW - PROCESS CLRSW DIRECTIVE. 
**        CLRSW - PROCESS CLRSW DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         CLEAR SSW SWITCH OPTION AND CALL PPCOM TO SEND IT TO PPU. 
* 
*           DIRECTIVE 'CLRSW SE,RM,PL,DL,RT,SB,RC'
* 
*              SE = STOP ON ERROR.
*              RM = REPEAT MODULE.
*              PL = PRINT LOG.
*              DL = DAYFILE LOG.
*              RT = REPEAT TEST.
*              KL = K/L DISPLAY.
*              SB = CALL STAND BY PPU FOR I/O.
*              RC = REPEAT CONDITION. 
* 
*         ENTRY  CRKBUF = CRACKED ENTRY.
* 
*         EXIT   IRB - UPDATED WITH SWITCHES
*                FSE - STOP ON ERROR OFF IF SE PARAMETER. 
*                FRM - REPEAT MODULE OFF IF RM PARAMETER. 
*                FPL - PRINT OUTPUT OFF IF PL PARAMETER.
*                FDL - DAYFILE LOG OFF IF DL PARAMETER. 
*                FRT - REPEAT TEST OFF IF RT PARAMETER. 
*                FKL - K/L DISPLAY OFF IF KL PARAMETER. 
*                FSB - STAND BY OFF IF SB PARAMETER.
*                FRC - REPEAT CONDITION OFF IF RC PARAMETER.
* 
*         ROUTINES CALLED -  POST    - POST MESSAGE.
*                            UPDIS   - UPDATE DISPLAY.
* 
*         DATA AREAS USED -  IRB  -  PPU INPUT REGISTER.
*                            FKL  -  K/L DISPLAY ACTIVE FLAG. 
*                            FDL  -  DAYFILE LOG. 
*                            FPL  -  PRINT OUTPUT.
*                            FRA  -  REPORT ALL DATA ERRORS.
*                            FRM  -  REPEAT MODULE. 
*                            FRT  -  REPEAT TEST. 
*                            FSE  -  STOP ON ERROR. 
*                            FSB  -  STAND BY PPU FOR I/O.
*                            FRC  -  REPEAT CONDITION.
* 
*         USES   A - 1, 2, 3, 6.
*                X - 1, 2, 3, 4, 5, 6.
*                B - 2, 3, 4. 
* 
*         MESSAGES   (PARAMETER ERROR .. PARAMETER) 
* 
  
**        STEP -01- INITIALIZE REGISTERS THEN STEP 2. 
* 
 CLRSW    DATA   0           ENTRY/EXIT 
          SA3    IRB         (X3) = PPU INPUT REGISTER
          SB2    CRKBUF+1    (B2) = ADDRESS WITHIN CRKBUF 
          SB3    B0          (B3) = BIT NUMBER TO CLEAR 
          SB4    TBLSSW      (B4) = ADDRESS OF SSW TABLE
          MX5    12          (X5) = 12 BIT MASK 
  
**        STEP -02- SEARCH TABLE TBLSSW FOR ENTRY THAT MATCHES
*                   PARAMETER ON CLRSW CALL IF NO ENTRY PRESENT 
*                   THEN STEP 5, IF END OF TABLE AND MATCH NOT
*                   FOUND THEN STEP 4, IF MATCH FOUND THEN STEP 3.
* 
 CLR1     SA1    B2          GET PARAMETER
          ZR     X1,CLR4     IF NO ENTRY PRESENT
          SA2    B4+B3       GET DISPLAY CODE VALUE FROM TABLE
          ZR     X2,CLR3     IF END OF TABLE GO POST SYNTAX ERROR MSG 
          BX6    X5*X2       CLEAR ADDRESS FROM WORD IN TABLE 
          BX6    X6-X1
          ZR     X6,CLR2     IF MATCH FOUND GO UPDATE BIT 
          SB3    B3+B1       INCREMENT INDEX INTO TABLE 
          EQ     CLR1        LOOP UNTIL MATCH FOUND OR END OF TABLE 
  
**        STEP -03- POSITION BIT TO CORRECT POSITION FOR SWITCH AND 
*                   UPDATE SWITCH THEN STORE OFF INTO DISPLAY THEN
*                   INCREMENT TO NEXT PARAMETER THEN STEP 2.
* 
 CLR2     SX6    B1 
          LX6    B3 
          BX3    -X6*X3      CLEAR BIT FOR SWITCH 
          MX6    0
          SA6    X2          CLEAR FLAG WORD USING LOWER 12 BITS
          SA1    CLRA        GET DISPLAY CODE OFF LEFT JUSTIFIED
          LX2    59-17
          SA2    X2          GET DISPLAY LINE 
          MX4    -42
          BX2    -X4*X2      CLEAR UPPER ON/OFF DISPLAY WORD
          BX6    X1+X2       .OR. OFF INTO UPPER BITS 
          SA6    A2 
          SB3    B0          RESET INDEX INTO TABLE 
          SB2    B2+B1       INCREMENT TO NEXT PARAMETER
          EQ     CLR1        LOOP UNTIL DONE
  
**        STEP -04- POST PARAMETER ERROR MESSAGE THEN STEP 2. 
* 
 CLR3     SX6    B2 
          SA6    CLRB 
          BX6    X1 
          SA6    MSGE1A 
          SB2    MSGE1
          BX6    X3 
          SA6    CLRC        SAVE (X3)
          RJ     POST        POST PARAMETER ERROR .. PARAMETER
          SA3    CLRC        RESTORE X3 
          SA1    CLRB 
          SB2    X1+1        RESTORE B2 TO B2+1 
          SB3    B0          RESET INDEX INTO TABLE 
          SB4    TBLSSW      (B4) = ADDRESS OF SSW TABLE
          MX5    12 
          EQ     CLR1        LOOP UNTIL DONE
  
**        STEP -05- CHECK FOR SCOPE LOOP SET BIT IF PRESENT THEN
*                   DISPLAY IF KL DISPLAY FLAG ON THEN STEP 6.
* 
 CLR4     SX1    SW.SL
          BX3    -X1*X3      CLEAR SCOPE LOOP BIT 
          SA1    FSE
          NZ     X1,CLR4B    IF STOP ON ERROR OFF 
          SA1    FRC
          NZ     X1,CLR4A    IF REPEAT CONDITION  ON
          SA1    FRM
          ZR     X1,CLR4B    IF REPEAT MODULE OFF 
 CLR4A    SX1    SW.SL       TURN ON SCOPE LOOP SWITCH
          BX3    X3+X1
 CLR4B    BX6    X3 
          SA6    IRB         UPDATED IRB STORE
          SB3    DPARAM 
          RJ     UPDIS       UPDATE DISPLAY WITH PARAMETERS 
  
**        STEP -06- RETURN. 
* 
 CLR5     EQ     CLRSW
  
 CLRA     VFD    60/3LOFF 
 CLRB     DATA   0
 CLRC     DATA   0
  
**        SWITCH DEFINITION TABLE  BITS.
* 
*           59-36 = DISPLAY CODE NAME.
*           35-18 = DISPLAY ADDRESS TO BE UPDATED.
*           17-00 = FLAG ADDRESS. 
* 
*         POSITION IN TABLE IS USED FOR BIT LOCATION IN IRB.
* 
  
 TBLSSW   VFD    24/2LSE,18/KLSW+00,18/FSE    STOP ON ERROR  BIT 0
          VFD    24/2LRM,18/KLSW+03,18/FRM    REPEAT MODULE  BIT 1
          VFD    24/2LRC,18/KLSW+21,18/FRC    REPEAT COND.   BIT 2
          VFD    24/2LRC,18/KLSW+21,18/FRC    SCOPE LOOP     BIT 3
          VFD    24/2LRC,18/KLSW+21,18/FRC    RESERVED DROP  BIT 4
          VFD    24/2LRC,18/KLSW+21,18/FRC    RESERVED CKP   BIT 5
          VFD    24/2LPL,18/KLSW+12,18/FPL    PRINT LOG      BIT 6
          VFD    24/2LDL,18/KLSW+15,18/FDL    DAYFILE LOG    BIT 7
          VFD    24/2LKL,18/KLSW+18,18/FKL    K/L DISPLAY    BIT 8
          VFD    24/2LSB,18/KLSW+09,18/FSB    STANDBY PPU    BIT 9
          VFD    24/2LRT,18/KLSW+06,18/FRT    REPEAT TEST    BIT 10 
          VFD    24/2LRT,18/KLSW+06,18/FRT    TERMINAL MODE  BIT 11 
          VFD    60/0                         END OF TABLE
          EJECT 
          EJECT 
 CVTDECI  TITLE  CVTDECI - CONVERT INTEGER TO DISPLAY CODE DECIMAL. 
**        CVTDECI - CONVERT WORD TO DECIMAL DISPLAY CODE. 
* 
*         G. L. GOLDEN. 76/12/08. 
*         M. S. FABBRINI. 82/10/14.   ADAPTED FOR USE BY 16-BIT MALET.
* 
*         WHEN 16BIT IS PRESENT IN MODULE+5, CVTDECI CONVERTS A WORD
*         TO DECIMAL DISPLAY CODE.  CONVERTS ONLY THE BOTTOM 6 DIGITS 
*         ALLOWING A MAXIMUM VALUE OF 177777B.
* 
*         ENTRY      (X1) = WORD TO CONVERT.
* 
*         EXIT       (X7) = CONVERTED DISPLAY CODE DIGITS.
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  (DECIA-DECIE) CONSTANTS USED IN CONVERSION.
* 
*         USES   A - 2. 
*                X - 1, 2, 3, 5, 6, 7.
*                B - NONE.
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- INITIALIZE FINAL CONVERTED VALUE TO ZERO. MASK
*                   VALUE  WITH 177777B.  MAXIMUM VALUE  FOR FINAL
*                   ANSWER IS 65535 DECIMAL.
* 
 CVTDECI  DATA   0           ENTRY/EXIT 
          MX5    -16
          BX1    -X5*X1      CLEAR BITS  16-60
          MX7    0
          SA2    DECIA-1
  
**        STEP -02- LOOP UNTIL ALL DIGITS CONVERTED.  THEN RETURN WITH
*                   CONVERTED DISPLAY CODE VALUE. 
* 
 DECI1    SA2    A2+B1
          ZR     X2,CVTDECI  IF DONE ZERO WORD TO SUBTRACT
          SX6    1R0
 DECI2    IX3    X1-X2
          NG     X3,DECI3    IF DONE WITH THIS SUBTRACT 
          BX1    X3 
          SX6    X6+B1
          EQ     DECI2
  
 DECI3    LX7    59-53
          BX7    X7+X6       COMBINE VALUE CONVERTED WITH ANY PREVIOUS
          EQ     DECI1       GO TO NEXT CONSTANT
  
*         DECIMAL CONSTANTS USED IN CONVERSION. 
  
 DECIA    DATA   100000 
 DECIB    DATA   10000
 DECIC    DATA   1000 
 DECID    DATA   100
 DECIE    DATA   10 
 DECIF    DATA   1
 DECIG    DATA   0
 CVTHEX   TITLE  CVTHEX - CONVERT BINARY TO HEX DISPLAY CODE. 
**        CVTHEX - CONVERT BINARY TO HEX DISPLAY CODE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         ENTRY (X1) = NUMBER TO CONVERT. 
*               (B2) = NUMBER OF HEX DIGITS  1-10.
* 
*         EXIT  (X7) = CONVERTED DISPLAY CODE VALUE RIGHT JUSTIFIED.
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  NONE.
* 
*         USES   A - NONE.
*                X - 1, 4, 5, 6, 7. 
*                B - 2, 5.
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- INITIALIZE ANSWER TO ZERORS AND INITIALIZE MASK.
* 
 CVTHEX   DATA   0
          MX7    0
          MX5    -4          MASK FOR HEX NUMBER
          SB5    0
  
**        STEP -02- CONVERT B2 DIGITS TO HEX DISPLAY CODE AND RETURN. 
* 
 HEX1     BX6    -X5*X1 
          AX1    4           SHIFT X1 FOR NEXT CHARACTER
          SX6    X6+1R0      ADD 33B DISPLAY CODE 0 
          SX4    X6-1R+ 
          NG     X4,HEX2     IF GT 9 IN DISPLAY CODE 44B
          SX6    X6-1R9      SUBTRACT NINE TO CONVERT TO A-F
 HEX2     LX6    B5          POSITION DIGIT 
          BX7    X7+X6       COMBINE DIGIT CONVERTED WITH PREVIOUS
          SB5    B5+6        DECREMENT SHIFT
          SB2    B2-B1       DECREMENT DIGITS DONE
          NZ     B2,HEX1     IF NOT DONE WITH ALL DIGITS
          EQ     CVTHEX 
          EJECT 
 DISPLAY  TITLE  DISPLAY - PROCESS DISPLAY CHANGE DIRECTIVES. 
**        DISPLAY - PROCESS DISPLAY CHANGE DIRECTIVES.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         DISPLAY DIRECTIVE IS USED TO CHANGE THE DISPLAY ON THE K/L
*         DISPLAY.. 
* 
*           DIRECTIVE FORM 'TYPE'.
* 
*                TYPE    DESCRIPTION
* 
*           1.   SOURCE  DISPLAY SOURCE LINES.
*           2.   MALET   MALET DIRECTIVES.
*           3.   PPU     PPU MESSAGE DISPLAY. 
*           4.   DEVICES DEVICE CODES TO BE USED IN THE ASSIGN COMMAND. 
*           5.   MODULES DISPLAY MODULES ON RANDOM FILE.
* 
*         ENTRY  (CRKBUF) = TYPE IN DISPLAY CODE. 
* 
*         EXIT   FDIS = DISPLAY TYPE VALUE. 
* 
*         ROUTINES CALLED -  UPDIS   - DISPLAY UPDATE.
*                            POST    - POST MESSAGE.
* 
*         DATA AREAS USED -  CRKBUF - CRACK PARAMETER STRING. 
*                            TDIS   - TABLE OF DISPLAY TYPES. 
* 
*         USES   A - 1, 2.
*                X - 1, 2, 5. 
*                B - 2, 3.
* 
*         MESSAGES   SYNTAX ERROR.
* 
  
**        STEP -01- INITIALIZE VARIBLES USED BY DISPLAY 
* 
 DISPLAY  VFD    60/8RLDISPLAY   ENTRY/EXIT 
          SA1    CRKBUF+1 
          NZ     X1,DIS2     IF GARBAGE BEYOND DIRECTIVE
          SB3    B0          INITIALIZE INDEX 
          SA1    CRKBUF      GET PARAMETER FROM CRACKED STRING
          MX5    42          FORM MASK
  
**        STEP -02- GET TABLE ENTRY THEN STEP 3 
* 
 DIS1     SA2    TDIS+B3     GET VALUE FROM TABLE 
          BX2    X5*X2       MASK DISPLAY CODE FIELD
          BX2    X2-X1
  
**        STEP -03- IF ENTRY MATCHES THEN STEP 5, ELSE ADVANCE INDEX
*                   IF END OF TABLE THEN STEP 04, ELSE STEP 2.
* 
          ZR     X2,DIS3     IF MATCH FOUND GO TO UPDATE DISPLAY
          SB3    B3+B1       INCREMENT INDEX
          LT     B3,B4,DIS1  IF NOT END OF TABLE
  
**        STEP -04- CALL POST    ENTRY THEN STEP 6. 
* 
 DIS2     SB2    MSGE60 
          RJ     POST        POST SYNTAX ERROR MESSAGE
          EQ     DIS4 
  
**        STEP -05-  CALL UPDIS THEN STEP 6.
* 
 DIS3     SA2    A2 
          SB3    X2          MOVE DISPLAY TYPE FIELD TO B3
          RJ     UPDIS       UPDATE DISPLAY 
  
**        STEP -06- RETURN. 
* 
 DIS4     EQ     DISPLAY     RETURN TO CALLER 
  
**        TABLE TDIS CONTAINS VALUE ON DIRECTIVE + DISPLAY TYPE CODE. 
* 
*                59-18 = DISPLAY CODE VALUE.
*                17-00 = DISPLAY TYPE CODE FOR UPDIS. 
* 
 TDIS     VFD    42/6LSOURCE,18/DSOURCE 
          VFD    42/5LMALET,18/DMALET 
          VFD    42/3LPPU,18/DPPU 
          VFD    42/7LDEVICES,18/DDEVICE
          VFD    42/5LPARAM,18/DPARAM 
          VFD    42/7LMODULES,18/DMOD 
 TDISL    EQU    *-TDIS 
          EJECT 
 DROP     TITLE  DROP - PROCESS DROP DIRECTIVE. 
**        DROP - PROCESS DROP DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         FLAG THE PPU TO DROP IF RUNNING THEN SET MALET DROP FLAG. 
* 
*         ENTRY (CRKBUF) = DROP LEFT JUSTIFIED DISPLAY CODE.
* 
*         EXIT  FDROP = 1   IF PPU NOT RUNNING. 
*               FDRP  = 1   IF PPU RUNNING. 
* 
*         ROUTINES CALLED -  POST  - POST DROP MESSAGE. 
*                            MSG   - SEND MESSAGE TO DAYFILE. 
* 
*         DATA AREAS USED -  FDROP - DROP FLAG. 
*                            IRB   - PPU INPUT REGISTER.
*                            FRUN  - RUNNING FLAG.
* 
*         USES   A - 1, 6.
*                X - 1, 6.
*                B - 2. 
* 
*         MESSAGES    DROPPED BY USER.
* 
  
**        STEP -01- CHECK IF RUNNING IF NOT THEN STEP 2, ELSE SEND
*                   DROP FLAG TO PPU THEN SET FDRP FLAG THEN STEP 3.
* 
 DROP     DATA   0           ENTRY/EXIT 
          SX6    SW.DRP 
          SA1    FRUN 
          ZR     X1,DRP1     IF NOT RUNNING 
          SA6    FDRP        SET DROP FLAG FOR PPUDRP 
          SA1    IRB
          BX6    X6+X1
          SA6    A1          SET DROP BIT FOR PPU DRIVER TO SEE 
          EQ     DRP2        RETURN 
  
**        STEP -02- SET FLAG FDROP THEN STEP 3. 
* 
 DRP1     SA6    FDROP       SET DROP FLAG
  
**        STEP -03- POST MESSAGE DROPPED BY USER THEN RETURN. 
* 
 DRP2     SB2    MSGE14 
          RJ     MSG         SEND MESSAGE TO DAYFILE
          RJ     POST        SEND DROP MESSAGE TO USER
          EQ     DROP        RETURN TO CALLER 
          EJECT 
 GO       TITLE  GO - PROCESS GO DIRECTIVE. 
**        GO - PROCESS GO DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         RESUME A MODULE THAT IS CHECKPOINTED. 
* 
*         ENTRY   CRKBUF(0) = GO LEFT JUSTIFIED DISPLAY CODE. 
*                 FCHK = 1 IF MODULE WAS CHECKPOINTED.
*                 FCHK = 0 IF MODULE WAS NOT CHECKPOINTED.
* 
*         EXIT    MODULE IS RESUMED IF FCHK = 1.
* 
*         ROUTINES CALLED -  STRPPU  - RESUME PPU EXECUTION.
*                            POST    - POST MESSAGE.
*                            FILL    - FILL BUFFER WITH DATA. 
*                            UPDIS   - UPDATE K/L DISPLAY.
* 
*         DATA AREAS USED -  FRUN    - MODULE RUNNING FLAG. 
*                            FKL     - K/L DISPLAY FLAG.
*                            BLANKS  - WORD CONTAING BLANK CHARACTERS.
*                            FCHK    - CHECKPOINT FLAG. 
*                            FSTOP   - MODULE STOP FLAG.
*                            KLMSG   - LINE 50B K/L MESSAGE DATA. 
*                            MTRIN   - PPU START TIME USED BY MTRPPU. 
* 
*         USES   A - 1, 6.
*                X - 1, 6.
*                B - 2, 3.
* 
*         MESSAGES   ILLEGAL WHEN MODULE RUNNING. 
*                    MODULE NOT CHECKPOINTED. 
* 
  
**        STEP -01- CHECK IF MODULE RUNNING IF YES POST ERROR MESSAGE 
*                   THEN STEP  , ELSE STEP 2. 
* 
 GO       DATA   0           ENTRY/EXIT 
          SA1    FRUN        GET RUN FLAG 
          ZR     X1,GOA1     IF MODULE NOT RUNNING
          SB2    MSGE7
          RJ     POST        POST ILLEGAL MESSAGE 
          EQ     GOA3 
  
**        STEP -02- CHECK IF MODULE WAS CHECKPOINTED IF NOT THEN STEP 4 
*                   ELSE CLEAR  LINE 50 MESSAGE,  CLEAR CHECKPOINT BIT, 
*                   THEN RESUME MODULE EXECUTION BY CALLING STRPPU THEN 
*                   CAPTURE START TIME THEN STEP 3. 
* 
 GOA1     SA1    FCHK 
          ZR     X1,GOA2     IF MODULE NOT CHECKPOINTED 
          SA1    BLANKS 
          SB2    KLMSG
          SB3    KLMSG+5
          RJ     FILL        CLAER KL DISPLAY LINE 50 MESSAGE 
          SA1    IRB
          SX6    SW.CHK 
          BX6    -X6*X1      CLEAR CHECKPOINT BIT 
          SA6    A1 
          MX6    0
          SA6    FSTOP       CLEAR STOP FLAG
          SB2    F.RES       RESUME EXECUTION FLAG
          RJ     STRPPU      START PPU
          RTIME  MTRIN       START CLOCK FOR PPU START
  
**        STEP -03- CHECK IF K/L DISPLAY ON IF YES UPDATE DISPLAY WITH
*                   PPU MESSAGE DISPLAY THEN STEP 5, ELSE STEP 5. 
* 
          SB3    DPPU 
          RJ     UPDIS       CHANGE DISPLAY TO PPU DISPLAY
          MX6    0
          SA6    FSUSPI      CLEAR SUSPEND READING INPUT FLAG 
          SA1    FTERM
          ZR     X1,GOAC     IF TERMINAL MODE NOT ON
          SA1    RDIC 
          ZR     X1,GOAC     IF NAME WAS NOT CHANGED
          SB5    6
          SB4    B0 
 GOAA     SA1    RDIC+B4     MOVE THE ALTERNATE FILE FET
          MX6    0
          SA6    RDIC+B4     CLEAR THE FET HOLDER 
          BX6    X1 
          SA6    INPUT+B4 
          SB4    B4+B1
          LT     B4,B5,GOAA     IF SIX WORDS NOT MOVED
          SB5    65 
          SB4    B0 
 GOAB     SA1    RDID+B4     MOVE THE ALTERNATE FILE FET
          MX6    0
          SA6    RDID+B4     CLEAR THE FET HOLDER 
          BX6    X1 
          SA6    BUFIN+B4 
          SB4    B4+B1
          LT     B4,B5,GOAB     IF SIXTY FIVE WORDS NOT MOVED 
          EQ     GOAD 
 GOAC     SA1    FKL
          ZR     X1,GOA3     IF K/L DISPLAY OFF 
 GOAD     MX6    0
          SA6    FEOFI       TURN ON INPUT FILE IF K/L DISPLAY OFF
          EQ     GOA3 
  
**        STEP -04- POST MESSAGE MODULE NOT CHECKPOINTED THEN STEP 5. 
* 
 GOA2     SB2    MSGE4
          RJ     POST        POST MSG (MODULE NOT CHECKPOINTED) 
  
**        STEP -05- RETURN. 
* 
 GOA3     EQ     GO          RETURN 
          EJECT 
 INRMOD   TITLE  INRMOD - READ NEXT MODULE IN SERIES. 
**        INRMOD - READ NEXT MODULE IN SERIES.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         ENTRY  (LODA) = LAST PRIMARY MODULE LOADED. 
* 
*         EXIT   (MODULE) = NEXT MODULE TO RUN. 
*                (X1) = MODULE NAME.
*                (X1) = 0 IF NO NAME FOUND. 
* 
*         ROUTINES CALLED -  CVTINT - CONVERT BINARY TO DISPLAY CODE. 
*                            CVTDEC - CONVERT DISPLAY CODE TO INTEGER.
*                            RDSFILE- READ MODULE FROM RANDOM FILE. 
* 
*         DATA AREAS USED -  LODA   - CONTAINS LAST MODULE RUN. 
*                            INRA   - TEMPORARY STORAGE OF TEST NAME. 
*                            FLOG   - LOG ERROR FLAG FOR RDSFILE. 
* 
*         USES   A - 1, 6.
*                X - 1, 5, 6. 
*                B - 2, 7.
* 
*         MESSAGES    END OF TEST SERIES  MNENNN. 
* 
  
**        STEP -01- SAVE CURRENT MODULE NAME, SET NO LOG ERROR  FLAG GO 
*                   READ MODULES IN ASSENDING ORDER UNTIL NEXT MODULE 
*                   FOUND OR MODULE 99 IS READ (NOT FOUND) THEN STEP 3
*                   IF FOUND, ELSE STEP 2.
* 
 INRMOD   DATA   0
          SA1    LODA 
          BX6    X1 
          SA6    INRA        STORE MODULE NAME
          SA6    FLOG        FLAG NO LOG FOR RDSFILE
 INR1     SA1    INRA        GET LAST MODULE NAME AND NUMBER
          LX1    59-29
          MX5    -12
          BX5    -X5*X1 
          LX5    59-11       POSITION MODULE NUMBER TO UPPER
          SB7    B1 
          RJ     CVTINT 
          NZ     X4,INR2     IF CONVERSION ERRORS 
          MX5    -12
          BX6    -X5*X6 
          SX1    1
          IX1    X6+X1       ADD ONE TO CURRENT NUMBER
          SX6    100
          BX6    X1-X6
          ZR     X6,INR2     IF HIT MODULE NUMBER 100 
          RJ     CVTDEC      CONVERT BACK TO DECIMAL DISPLAY CODE 
          MX5    -12
          BX6    -X5*X7      CLEAR GARBAGE
          SA1    LODA 
          LX1    59-29
          MX5    48 
          BX1    X5*X1       CLEAR NUMBER FROM OLD MODULE NUMBER
          BX1    X1+X6       .OR. NEW MODULE NUMBER INTO NAME 
          LX1    59-29
          BX6    X1 
          SA6    INRA        STORE NEW NAME 
          RJ     RDSFILE
          NZ     X1,INR1     IF LOAD ERROR
          SA1    INRA        (X1) = FILE NAME LOADED
          EQ     INR3 
  
**        STEP -02- CLEAR X1 TO INDICATE END OF TEST. 
* 
 INR2     MX1    0           CLEAR X1 FOR END OF TEST SERIES
  
**        STEP -03- CLEAR NO LOG ERROR FLAG AND RETURN TO CALLER. 
* 
 INR3     MX6    0
          SA6    FLOG        CLEAR LOG FLAG 
          EQ     INRMOD      RETURN 
  
 INRA     DATA   0           SCRATCH WORD FOR MODULE NAME 
          EJECT 
 LINE     TITLE  LINE - PROCESS LINE DIRECTIVE. 
**        LINE - PROCESS LINE DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         USED TO SET THE IN POINTER FOR THE NEXT SOURCE LINE 
*         FROM INPUT. 
* 
*          DIRECTIVE 'LINE=AAA' 
* 
*           AAA = LINE NUMBER TO SET THE IN POINTER TO. 
* 
* 
*         ENTRY  (CRKBUF) = CRACKED DISPLAY CODE ENTRY WITH PARAMETERS. 
* 
*         EXIT   PLINE  = AAA    FLAG WITH OCTAL INPUT LINE NUMBER. 
*                FDIS = SOURCE FLAG FOR K/L DISPLAY.
* 
*         ROUTINES CALLED -  CVTINT  - CONVERSION ROUTINE.
*                            UPDIS   - DISPLAY UPDATE ROUTINE.
*                            POST    - POST MESSAGE.
* 
*         DATA AREAS USED -  PLINE - LINE NUMBER BINARY.
*                            CRKBUF- CRACKED ENTRY. 
* 
*         USES   A - 5, 6.
*                X - 4, 5, 6. 
*                B - 2, 3, 7. 
* 
*         MESSAGES  CVT ERROR  = NNNNNN.
*                   VALUE OUT OF RANGE. 
* 
  
**        STEP -01- GET LINE NUMBER FROM CRKBUF AND CONVERT TO INTEGER
*                   THEN STEP 2.
* 
 LINE     DATA   0           ENTRY/EXIT 
          MX6    0
          SB7    B0 
          SA5    CRKBUF+1 
          ZR     X5,LIN1A    IF (L) ENTERED 
          SX6    X5-1R= 
          NZ     X6,LIN1     IF NOT = SIGN
  
          SA5    A5+B1       GET NEXT WORD
 LIN1     ZR     X5,LIN1A    IF NO VALUE ENTERED ON DIRECTIVE ASSUME 0
          RJ     CVTINT      CONVERT DATA 
  
**        STEP -02- IF CONVERT ERROR THEN STEP 4, ELSE STEP 3.
* 
          NZ     X4,LIN3     IF CONVERT ERROR 
  
**        STEP -03- IF LINE NUMBER .GE. MAXIMUM STORE THEN STEP 4, ELSE 
*                   STEP 7. 
* 
          SA5    A5+B1
          ZR     X5,LIN1A    IF NO TRAILER GARBAGE
          SB2    MSGE60      SYNTAX ERROR 
          EQ     LIN4 
 LIN1A    SX4    170B 
          IX4    X6-X4
          PL     X4,LIN2     IF .GE. 170B 
          NG     X6,LIN2     IF NEGATIVE VALUE
          SA6    PLINE       RESET IN POINTER 
          SB3    DSOURCE
          RJ     UPDIS       UPDATE DISPLAY 
          EQ     LIN5        RETURN 
  
**        STEP -04- SET INDEX TO MESSAGE (LINE VALUE OUT OF RANGE) THEN 
*                   STEP 6. 
* 
 LIN2     SB2    MSGE13 
          EQ     LIN4 
  
**        STEP -05- SET INDEX TO MESSAGE (CVT ERROR) THEN STEP 6. 
* 
 LIN3     SA5    A5          GET WORD THAT WAS CONVERTED
          BX6    X5          MOVE WORD TO X6 FOR STORE
          SA6    MSGE2A      STORE ILLEGAL DATA 
          SB2    MSGE2
  
**        STEP -06- POST MESSAGE BY CALLING POST THEN STEP 7. 
* 
 LIN4     RJ     POST        POST ILLEGAL MESSAGE 
  
**        STEP -07- RETURN. 
* 
 LIN5     EQ     LINE        RETURN 
 LIST     TITLE  LIST - PROCESS LIST DIRECTIVE. 
**        LIST - PROCESS LIST DIRECTIVE.
* 
*         G. L. GOLDEN.   77/07/15. 
* 
*         USED TO LIST SOURCE LINES FROM THE INPUT POINTER FOR
*         N LINES.  COMMAND FORMAT (LIST N) WHERE N IS THE NUMBER 
*         OF LINES TO LIST. 
* 
*         ENTRY  - (CRKBUF) = CRACKED DISPLAY CODE FOR DIRECTIVE. 
*                  PLINE    = CURRENT LINE NUMBER.
* 
*         EXIT   - DISPLAY CHANGED TO SOURCE. 
* 
*         ROUTINES CALLED -  CVTDIS - CONVERT INTEGER TO DISPLAY CODE.
*                            UPDIS  - DISPLAY UPDATE ROUTINE. 
*                            PRINT  - OUTPUT ROUTINE. 
*                            CVTINT - CONVERSION ROUTINE. 
* 
*         DATA AREAS USED -  CLINE  - PRINT LINE BUFFER.
*                            SOURCE - SOURCE CODE BUFFER. 
*                            PLINE  - CURRENT LINE NUMBER FOR INPUT.
* 
*         USES   - A - 1, 2, 5, 6, 7. 
*                  X - 1, 2, 5, 6, 7. 
*                  B - 2, 4, 5, 6, 7. 
* 
*         MESSAGES - CVT ERROR     NUMBER.
*                    SYNTAX ERROR.
* 
  
**        STEP -01- GET DISPLAY CODE VALUE FOR NN, IF GARBAGE AFTER 
*                   DIRECTIVE THEN STEP 7, ELSE STEP 2. 
* 
 LIST     DATA   0           ENTRY EXIT 
          SA5    CRKBUF+1 
          ZR     X5,LIS2     IF NO DATA AFTER DIRECTIVE 
          SX2    X5-1R= 
          NZ     X2,LIS1     IF NOT EQUAL SIGN
          SA5    CRKBUF+2    LIST=NN DIRECTIVE
          SA2    CRKBUF+3 
          NZ     X2,LIS7     IF GARBAGE AFTER GOOD DATA 
          EQ     LIS2 
  
 LIS1     SA2    CRKBUF+2    LIST,NN DIRECTIVE
          NZ     X2,LIS7     IF GARBAGE AFTER GOOD DATA 
  
**        STEP -02- CONVERT VALUE FOR N TO INTEGER CALLING CVTINT THEN
*                   GOTO STEP 3 IF NO CONVERT ERRORS ELSE POST MESSAGE
*                   CVT ERROR THEN STEP 7.
* 
 LIS2     SB7    B0 
          RJ     CVTINT      CONVERT NUMBER TO INTEGER
          ZR     X4,LIS3     IF NO CONVERSION ERRORS
          SA5    A5 
          BX6    X5 
          SA6    MSGE2A 
          SB2    MSGE2       POST CVT ERROR MESSAGE 
          EQ     LIS8 
  
**        STEP -03- SET N TO ONE IF ZERO THEN STEP 4. 
* 
 LIS3     SB4    X6          (B4) = LINES TO LIST 
          NZ     B4,LIS4     IF N NOT SET TO ZERO 
          SB4    B1          FORCE N TO BE 1
  
**        STEP -04- GET CURRENT IN POINTER AND COMPUTE ACTUAL ADDRESS 
*                   OF SOURCE DATA AND INITIALIZE REGS., THEN STEP 5. 
* 
 LIS4     SA1    PLINE
          SB5    X1          (B5) = CURRENT LINE NUMBER 
          BX2    X1 
          LX2    2
          IX2    X2+X1
          IX2    X2+X1
          SB6    X2+SOURCE   (B6) = SOURCE ADDRESS
          SB7    167B        (B7) = LAST LINE TO LIST 
  
**        STEP -05- IF LAST LINE THEN STEP 8, ELSE CONVERT LINE NUMBER
*                   TO DISPLAY CODE AND STORE INTO CLINE, THEN ADVANCE
*                   LINE NUMBER, THEN STEP 06.
* 
 LIS5     GT     B5,B7,LIS9  IF CURRENT LINE GT 167 
          SX1    B5 
          RJ     CVTDIS      CONVERT LINE NUMBER TO DISPLAY CODE
          SA1    PICA        GET CONSTANT FOR BBBBBBNN= CONVERSION
          SA2    B5+LINES 
          SX2    X2 
          ZR     X2,LIS5A    IF NO COMPILER ERRORS ON THIS LINE 
          MX7    0
          SA1    PICB        FLAG WITH ** FOR LINE NUMBER IF ERROR
 LIS5A    LX7    6
          IX7    X7+X1
          SA7    CLINE
          SB5    B5+B1
          SB3    5           NUMBER OF WORDS PER SOURCE LINE - 1
  
**        STEP -06- MOVE SOURCE DATA INTO CLINE FOR PRINT, THEN CALL
*                   PRINT TO OUTPUT LINE OF SOURCE, THEN DECREMENT
*                   LINES DONE, IF NOT DONE THEN STEP 5, ELSE STEP 8. 
* 
 LIS6     SA1    B6+B3
          BX6    X1 
          SA6    B3+CLINE+1  STORE DATA INTO CLINE
          SB3    B3-1 
          PL     B3,LIS6     IF NOT 6 WORDS MOVED YET 
          MX6    0
          SA6   CLINE+7     CLEAR LAST WORD 
          SB2    CLINE
          RJ     PRINT       OUTPUT LINE OF SOURCE
          SB6    B6+6        INCREMENT TO NEXT SOURCE LINE
          SB4    B4-B1
          NZ     B4,LIS5     IF NOT DONE YET
          EQ     LIS9 
  
**        STEP -07- POST MESSAGE SYNTAX ERROR THEN STEP 8.
* 
 LIS7     SB2    MSGE60 
 LIS8     RJ     POST        POST MESSAGE SYNTAX ERROR
  
**        STEP -08- RETURN TO CALLER. 
* 
 LIS9     EQ     LIST        RETURN 
          EJECT 
 LSTERR   TITLE  LSTERR - FORMAT ERROR MESSAGE WITH MODULE NAME.
**        LSTERR - FORMAT ERROR MESSAGE WITH MODULE NAME. 
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         LSTERR - FORMATS ERROR MESSAGE AND STORES IT IN THE ADDRESS 
*         SPECIFIED.
* 
*         ENTRY  (B3) = ADDRESS OF STORE. 
*                (B5) = ADDRESS OF DATA.
* 
*                     0         1         2         3        4
*               --------------------------------------------------- 
*               I         I   MSG   I  ERROR  I  ERROR  I         I 
*         ((B5))I   XXXX  I  INDEX  I  CODE   I ADDRESS I  XXXX   I 
*               --------------------------------------------------- 
* 
*           BYTE 0 = NOT USED.
*           BYTE 1 = INDEX TO PRODUCT OVERLAY ERROR MESSAGE.
*           BYTE 2 = OCTAL ERROR CODE DESCRIBING THE ERROR. 
*           BYTE 3 = LINE NUMBER BEING EXECUTED AT TIME OF ERROR. 
*           BYTE 4 = XXXX INDICATES NOT USED. ( ANY VALUE)
* 
*         EXIT   (B3) = ADDRESS OF STORE. 
*                (B5) = ADDRESS OF DATA.
* 
*         ROUTINES CALLED -  CVTDIS - CONVERT BINARY TO DISPLAY CODE. 
*                          LSTERR16 - FORMATS .GT. 100B CONVERSION FOR
*                                     16-BIT MALET. 
* 
*         DATA AREAS USED -  CLINE - MESSAGE BUFFER AREA. 
*                            ORB   - OUTPUT REGISTER. 
*                            K/L   - K/L DISPLAY BUFFER AREA. 
* 
*         USES   A - 1, 3, 6, 7.
*                X - 1, 2, 3, 5, 6, 7.
*                B - NONE.
* 
*         MESSAGES    FORMAT WAS OUT OF RANGE.
* 
  
**        STEP -01- MOVE MESSAGE FROM MODULE BUFFER TO ADDRESS IN B3
*                   THEN RETURN.
* 
 LSTERR   DATA   0           ENTRY/EXIT 
          SA1    MODULE+5    GET 16BIT FLAG 
          LX1    59-12
          PL     X1,LST      IF NOT 16-BIT MALET
          RJ     LSTERR16    IF 16-BIT MALET
          EQ     LSTERR      RETURN 
  
 LST      SA1    LODC        IF NO CALL ACTIVE
          ZR     X1,LST0     IF NO CALL ACTIVE
          SA1    LODD 
          EQ     LST0A
  
 LST0     SA1    MODULE 
 LST0A    SA3    LSTA 
          MX6    30          (X6) = 5 CHARACTER MASK
          BX2    X6*X1
          MX5    36          (X5) = 6 CHARACTER MASK
          BX1    X5*X1
          LX6    59-5 
          LX2    59-5 
          LX1    59-5 
          BX6    -X6*X3 
          BX6    X6+X2       SUBTITUTE 5 CHARACTER MODULE NAME
          BX5    X1-X2
          ZR     X5,LST1     IF MODULE NAME WAS 5 CHARACTERS
          MX5    -24
          LX5    54 
          BX6    -X5*X3 
          BX6    X6+X1       SUBTITUTE 6 CHARACTER MODULE NAME
 LST1     SA6    B3          STORE FIRST WORD OF MESSAGE
          SA1    B5 
          MX5    -12         (X5) = MASK FOR ERROR CODE 
          LX1    59-23
          BX1    -X5*X1      (X1) = ERROR CODE
          RJ     CVTDIS 
          LX7    59-23       POSITION ERROR CODE NUMBER 
          MX5    24 
          SA1    LSTA+1 
          BX6    -X5*X1 
          BX7    X5*X7
          BX6    X6+X7       SUBSTITUTE ERROR CODE  IN MESSAGE
          SA6    B3+B1
          SA1    B5 
          MX5    48 
          LX1    59-11
          BX1    -X5*X1 
          RJ     CVTDIS      CONVERT TO OCTAL DISPLAY CODE
          MX5    42 
          BX7    -X5*X7      (X7) = 0000000NNN
          LX7    59-53       (X7) = 000000NNN0
          SA1    B3+1 
          LX5    59-53
          BX1    X5*X1
          BX7    X7+X1       (X7) = NNNNBLNNNB
          MX5    54 
          SA1    B3          GET FIRST WORD OF MESSAGE
          BX6    X5*X1       CLEAR LOWER CHARACTER
          MX5    6
          BX1    X5*X7       GET UPPER CHARACTER
          LX1    6           POSITION CHARACTER TO LOWER POSITION 
          BX6    X6+X1
          SA6    B3          STORE WORD OF MESSAGE
          BX7    -X5*X7      CLEAR UPPER CHARACTER POSITION 
          LX7    6
          SX1    1R 
          BX7    X1+X7       COMBINE BLANK WITH MESSAGE 
          SA7    B3+1        STORE SECOND WORD OF MESSAGE 
          SA1    B5 
          LX1    59-35       POSITION INDEX INTO LOWER 12 BITS
          MX5    48 
          BX1    -X5*X1 
          SX1    X1-100B
          PL     X1,LST2     NUMBER WAS .GT. 100B 
          SX1    X1+100B     NUMBER WAS .LT. 100B 
 LST2     SX2    X1 
          LX2    1
          IX1    X1+X2       MULTIPLY INDEX * 3 
          SX2    EMBL 
          IX2    X1-X2
          NG     X2,LST3     IF MESSAGE IS IN RANGE 
          SA1    MSGE33      MESSAGE IS OUT OF RANGE
          EQ     LST4 
  
 LST3     SA1    EMB+X1 
 LST4     BX6    X1 
          SA6    B3+2        STORE FIRST WORD OF MESSAGE
          SA1    A1+B1
          BX6    X1 
          SA6    A6+B1       STORE SECOND WORD OF MESSAGE 
          SA1    A1+B1
          BX6    X1 
          SA6    A6+B1       STORE THIRD WORD OF MESSAGE
 LST5     EQ     LSTERR      RETURN TO CALLER 
  
 LSTA     DATA   20H        ER0000 L000 
          EJECT 
 LSTERR16 TITLE LSTERR16 - FORMAT ERROR MESSAGE WITH MODULE NAME. 
**        LSTERR16 - FORMAT ERROR MESSAGE WITH MODULE NAME. 
* 
*         G. L. GOLDEN. 76/12/08. 
*         M. S. FABBRINI. 82/10/18.   ADAPTED FOR 16-BIT MALET USE. 
* 
*         LSTERR16 - FORMATS ERROR MESSAGE AND STORES IT IN THE ADDRESS 
*                    SPECIFIED. 
* 
*         ENTRY  (B3) = ADDRESS OF STORE. 
*                (B5) = ADDRESS OF DATA.
* 
*                     0         1         2         3 
*               I---------I---------I---------I---------I 
*               I         I   MSG   I  ERROR  I  ERROR  I 
*         ((B5))I   XXXX  I  INDEX  I  CODE   I ADDRESS I 
*               I---------I---------I---------I---------I 
*           BITS   59-48     47-32     31-16     15-0 
* 
*           BYTE 0 = NOT USED.
*           BYTE 1 = INDEX TO PRODUCT OVERLAY ERROR MESSAGE.
*           BYTE 2 = OCTAL ERROR CODE DESCRIBING THE ERROR. 
*           BYTE 3 = LINE NUMBER BEING EXECUTED AT TIME OF ERROR. 
* 
*         EXIT   (B3) = ADDRESS OF STORE. 
*                (B5) = ADDRESS OF DATA.
* 
*         ROUTINES CALLED -  CVTDIS - CONVERT BINARY TO DISPLAY CODE. 
* 
*         DATA AREAS USED -  CLINE - MESSAGE BUFFER AREA. 
*                            ORB   - OUTPUT REGISTER. 
*                            K/L   - K/L DISPLAY BUFFER AREA. 
* 
*         USES   A - 1, 3, 6, 7.
*                X - 1, 2, 3, 5, 6, 7.
*                B - NONE.
* 
*         MESSAGES    FORMAT WAS OUT OF RANGE.
* 
  
**        STEP -01- MOVE MESSAGE FROM MODULE BUFFER TO ADDRESS IN B3
*                   THEN RETURN.
* 
 LSTERR16 DATA   0           ENTRY/EXIT 
          SA1    LODC 
          ZR     X1,LST16    IF NO CALL ACTIVE
          SA1    LODD 
          EQ     LST16A 
  
 LST16    SA1    MODULE 
 LST16A   SA3    LST16G 
          MX6    30          (X6) = 5 CHARACTER MASK
          BX2    X6*X1
          MX5    36          (X5) = 6 CHARACTER MASK
          BX1    X5*X1
          LX6    59-5 
          LX2    59-5 
          LX1    59-5 
          BX6    -X6*X3 
          BX6    X6+X2       SUBTITUTE 5 CHARACTER MODULE NAME
          BX5    X1-X2
          ZR     X5,LST16B   IF MODULE NAME WAS 5 CHARACTERS
          MX5    -24
          LX5    54 
          BX6    -X5*X3 
          BX6    X6+X1       SUBTITUTE 6 CHARACTER MODULE NAME
 LST16B   SA6    B3          STORE FIRST WORD OF MESSAGE
          SA1    B5 
          LX1    12 
          MX5    -16         (X5) = MASK FOR ERROR CODE 
          LX1    59-27
          BX1    -X5*X1      (X1) = ERROR CODE
          RJ     CVTDIS 
          LX7    59-23       POSITION ERROR CODE INTO UPPER 24-BITS 
          MX5    24          (X5) =  MASK FOR CONVERTED ERROR CODE
          SA1    LST16G+1 
          BX6    -X5*X1 
          BX7    X5*X7
          BX6    X6+X7       SUBSTITUTE ERROR CODE  IN MESSAGE
          SA6    B3+B1
          SA1    B5 
          MX5    44 
          BX1    -X5*X1      ERROR ADDRESS IN LOWER 16-BITS 
          RJ     CVTDIS      CONVERT TO OCTAL DISPLAY CODE
          MX5    42 
          BX7    -X5*X7      (X7) = 0000000NNN
          LX7    59-53       (X7) = 000000NNN0
          SA1    B3+1 
          LX5    59-53
          BX1    X5*X1
          BX7    X7+X1       (X7) = NNNNBLNNNB
          MX5    54 
          SA1    B3          GET FIRST WORD OF MESSAGE
          BX6    X5*X1       CLEAR LOWER CHARACTER
          MX5    6
          BX1    X5*X7       GET UPPER CHARACTER
          LX1    6           POSITION CHARACTER TO LOWER POSITION 
          BX6    X6+X1
          SA6    B3          STORE WORD OF MESSAGE
          BX7    -X5*X7      CLEAR UPPER CHARACTER POSITION 
          LX7    6
          SX1    1R 
          BX7    X1+X7       COMBINE BLANK WITH MESSAGE 
          SA7    B3+1        STORE SECOND WORD OF MESSAGE 
          SA1    B5 
          LX1    12 
          LX1    59-43       POSITION INDEX INTO LOWER 16 BITS
          MX5    44 
          BX1    -X5*X1 
          SX1    X1-100B
          PL     X1,LST16C   NUMBER WAS .GT. 100B 
          SX1    X1+100B     NUMBER WAS .LT. 100B 
 LST16C   SX2    X1 
          LX2    1
          IX1    X1+X2       MULTIPLY INDEX * 3 
          SX2    EMBL 
          IX2    X1-X2
          NG     X2,LST16D   IF MESSAGE IS IN RANGE 
          SA1    MSGE33      MESSAGE IS OUT OF RANGE
          EQ     LST16E 
  
 LST16D   SA1    EMB+X1 
 LST16E   BX6    X1 
          SA6    B3+2        STORE FIRST WORD OF MESSAGE
          SA1    A1+B1
          BX6    X1 
          SA6    A6+B1       STORE SECOND WORD OF MESSAGE 
          SA1    A1+B1
          BX6    X1 
          SA6    A6+B1       STORE THIRD WORD OF MESSAGE
 LST16F   EQ     LSTERR16    RETURN TO CALLER 
  
 LST16G   DATA   20H        ER0000 L000 
          EJECT 
 MINUS    TITLE  MINUS - PROCESS - DIRECTIVE. 
**        MINUS - PROCESS - DIRECTIVE.
* 
*         G. L. GOLDEN. 77/03/03. 
* 
*         DECREMENT CURRENT PAGE OF DATA ON THE K/L DISPLAY.
* 
*         ENTRY  PLINE = CURRENT LINE NUMBER. 
*                FDIS  = CURRENT DISPLAY TYPE.
* 
*         EXIT   FDIS  = NEW DISPLAY TYPE.
*                PLINE = NEW LINE NUMBER. 
* 
*         ROUTINE CALLED     - UPDIS = UPDATE DISPLAY.
* 
*         DATA AREAS USED    - PLINE = LINE NUMBER. 
*                              FDIS  = DISPLAY TYPE.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
*                B - 3, 4.
* 
*         MESSAGE   NONE. 
* 
  
**        STEP -01- CHECK DISPLAY TYPE BEING DISPLAYED IF NOT SOURCE
*                   THEN STEP 3, ELSE STEP 2. 
* 
 MINUS    DATA   0           ENTRY/EXIT 
          SA1    CRKBUF+1 
          ZR     X1,MIN0A 
          SB2    MSGE60 
          RJ     POST        SYNTAX ERROR GO POST MESSAGE 
          EQ     MIN3 
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
 MIN0A    SA1    FTERM
          ZR     X1,MIN4     NOT A TERMINAL REDO MINUS
          SA1    FDIS 
          ENDIF 
          IFEQ   NOS+NOS4+NOS5+NOS6+NOSBE+NOSBE4+NOSBE5+NOSBE6,2,1
 MIN0A    SA1    FDIS 
          NZ     X1,MIN1     IF NOT SOURCE DISPLAY
  
**        STEP -02- DECREMENT LINE NUMBER BY ONE PAGE IF LEGAL THEN 
*                   STEP 4,ELSE SET LINE AND DISPLAY TO MAXIMUM VALUE 
*                   THEN STEP 3.
* 
 MIN0     SA2    PLINE
          SX6    X2-50B 
          SA6    PLINE
          SB3    B0 
          PL     X6,MIN2     IF PLINE IN RANGE DISPLAY SOURCE 
          SX6    120B 
          SA6    PLINE
          SX1    TDISL
  
**        STEP -03- DECREMENT DISPLAY TYPE BY ONE THEN STEP 4.
* 
 MIN1     SB3    X1-1        DECREMENT DISPLAY PAGE 
  
**        STEP -04- CALL UPDIS TO UPDATE DISPLAY THEN RETURN. 
* 
 MIN2     RJ     UPDIS
 MIN3     EQ     MINUS
  
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
 MIN4     SA1    FDIS 
          NZ     X1,MIN5
          SA2    PLINE
          SX6    X2-24B 
          SA6    PLINE
          SB3    B0 
          PL     X6,MIN2     IF PLINE IN RANGE DISPLAY SOURCE 
          SX6    144B 
          SA6    PLINE
          SX1    TDISL+6
          EQ     MIN1 
  
 MIN5     SB3    X1-6 
          SB4    B0 
          GE     B3,B4,MIN2  DISPLAY IF NOT LE 0
          SB3    X1+5 
          SB4    6
          EQ     B3,B4,MIN6  IF DISPLAY TYPE EQUAL 6 SKIP IT
          SB4    9           CHECK FOR 2ND DEVICES DISPLAY
          EQ     B3,B4,MIN7 
          SB4    B0 
          GE     B3,B4,MIN2  DISPLAY IF NOT LE 0
          SB3    12 
          EQ     MIN2 
  
 MIN6     SB3    B0 
          EQ     MIN2        RESET DISPLAY TO TYPE TO SOURCE AND EXIT 
  
 MIN7     SB3    15          SET FOR THIRD DEVICES
          EQ     MIN2        DISPLAY THIRD DEVICES
          ENDIF 
          EJECT 
 PARAM    TITLE  PARAM - PROCESS PARAM DIRECTIVE. 
**        PARAM - PROCESS PARAM DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
*         M. S. FABBRINI. 82/10/28. 
* 
*         STORES PROGRAM PARAMETERS USED BY THE PPU DRIVERS MLD OR
*         WLD. 10 PARAMETERS CAN BE SET TO THEIR 16-BIT VALUES  IN
*         P0 - P9. PLUS TL AND LL.
* 
*           PARAM P0=AAAAAA, P1=BBBBBB, P9=CCCCCC, TL=DDDDDD, TL=EEEEEE.
* 
*           AAAAAA - CCCCCC = VALUES TO STORE IN THEIR ASSOCIATED 
*           PARAMETER. THE VALUE CAN BE OCTAL, DECIMAL, OR HEX, AND 
*           ONLY 6 DIGITS ARE STORED. 
* 
*         ENTRY  (CRKBUF) CONTAINS DIRECTIVE PLUS PARAMETERS. 
* 
*         EXIT   PARAMETERS AND DISPLAY UPDATED.
* 
*         ROUTINES CALLED -  CVTINT - CONVERT DISPLAY CODE TO INTEGER.
*                            CVTDIS - CONVERT INTEGER TO OCTAL DISPLAY. 
*                            UPDIS  - DISPLAY UPDATE ROUTINE. 
*                            POST   - POST MESSAGE. 
* 
*         DATA AREAS USED -  FRUN  - MODULE RUNNING FLAG. 
*                            CRKBUF- BUFFER FOR CRACKED PARAMETER.
*                            TPARM - TABLE OF LEGAL PARAMETERS. 
*                            TPARM1- TABLE OF CONVERTED PARAMETERS. 
*                            SVRB7 - DATA AREA TO SAVE (B7) 
* 
*         USES   A - 1, 2, 5, 6.
*                X - 1, 2, 5, 6, 7. 
*                B - 2, 3, 5, 6, 7. 
* 
*         MESSAGES  ILLEGAL WHEN MODULE RUNNING.
*                   SYNTAX ERROR. 
*                   CVT ERROR        NUMBER.
* 
  
**        STEP -01- CHECK IF RUNNING IF YES THEN STEP 7, ELSE 
*                   INITIALIZE INDEX INTO PARAMETERS THEN STEP 2. 
* 
 PARAM    DATA   0           ENTRY/EXIT 
          SA1    FLL
          BX6    X1 
          SA6    PARA 
          SA1    CRKBUF+1 
          ZR     X1,PAR8     IF NO PARAMETERS GO UPDATE DISPLAY 
          SA1    FRUN 
          NZ     X1,PAR4     IF MODULE RUNNING
          SB6    CRKBUF+1    (B6) ADDR OF PARAM PARAMETER 
  
**        STEP -02- GET NEXT PARAMETER FROM CRACKBUF USING INDEX IF 
*                   ABSENT THEN STEP 11, ELSE STEP 3. 
* 
 PAR1     SA1    B6          GET FIRST VALUE
          ZR     X1,PAR8     IF DONE WITH PARAMETERS
          MX6    0
          SA6    FCHK        CLEAR CHECKPOINT FLAG
  
**        STEP -03- SEARCH TABLE TPARM FOR PARAMETER IF FOUND STEP 4, 
*                   ELSE STEP 8.
* 
          MX5    24 
          SB5    TPARML      (B5) = MAXIMUM TABLE ENTRY INDEX 
          SB7    B0          (B7) = INDEX INTO TPARM TABLE
 PAR2     SA2    TPARM+B7 
          BX2    X2*X5
          BX2    X2-X1
          ZR     X2,PAR3     IF MATCH FOUND GO TO PROCESS 
          SB7    B7+B1       INCREMENT INDEX
          LT     B7,B5,PAR2  IF NOT THRU TABLE
          EQ     PAR5        SYNTAX ERROR 
  
**        STEP -04- GET NEXT VALUE IN CRACKBUF AND CHECK FOR = SIGN IF
*                   ABSENT THEN STEP 8, ELSE STEP 5.
* 
 PAR3     SA1    A1+B1       GET NEXT WORD OF CRACKED BUFFER
          SX1    X1-1R= 
          NZ     X1,PAR5     IF SYNTAX ERROR .NE. = 
  
**        STEP -05- CONVERT VALUE TO INTEGER VALUE IF CONVERSION ERRORS 
*                   THEN STEP 9, ELSE STEP 6. 
* 
          SX6    B7 
          SA6    SVRB7       SAVE B7 FOR LATER USE
          SB7    B0          CLEAR B7 FOR DEFAULT OCTAL CONVERSION
          SA5    A1+B1       GET NEXT WORD OF CRACKED BUFFER
          BX6    X5 
          MX1    42 
          BX2    -X1*X5      MASK FOR 7 DISPLAY CODE DIGITS 
          NZ     X2,PAR3B    IF MORE THAN 7 DIGITS
          SA6    PARB        SAVE VALUE 
          RJ     CVTINT      CONVERT TO INTEGER 
          ZR     X4,PAR3A    IF NO ERROR IN CONVERSION
          SA5    PARB        GET DISPLAY CODE PARAMETER 
          RJ     CVTHXB      CONVERT TO BINARY IF HEX 
          NZ     X4,PAR6     IF CVT ERROR 
 PAR3A    MX5    44          MASK FOR UP TO 16-BITS 
          BX1    X5*X6
          ZR     X1,PAR3C    IF VALUE IN RANGE
 PAR3B    SB2    MSGE63      STORE DISPLAY CODE VALUE INTO MSG
          SA5    A5          GET VALUE
          BX6    X5 
          SA6    MSGE63A     STORE DISPLAY CODE VALUE INTO MSG
          EQ     PAR7        GO TO PRINT MSG
  
**        STEP -06- STORE CONVERTED INTEGER VALUE INTO TPARM1 TABLE 
*                   AND THE DISPLAY CODE PARAMETER INTO THE DISPLAY 
*                   PAGE, THEN STEP 02. 
* 
 PAR3C    BX7    X6          (X7) = CONVERTED PARAMETER VALUE 
          SA1    SVRB7       GET PARAMETER NUMBER 
          SB7    X1          RESTORE (B7) 
          SB3    10          CHECK FOR TIME LIMIT 
          NE     B7,B3,PAR3D
          SA7    FTL         UPDATE TIME LIMIT
          EQ     PAR3E
 PAR3D    SB3    B3+B1       CHECK FOR LINE LIMIT 
          NE     B7,B3,PAR3E
          SA7    FLL         UPDATE LINE LIMIT
 PAR3E    SA7    TPARM1+B7   STORE VALUE INTO ASSOCIATED PARAMETER WORD 
          SA1    PARB        GET DISPLAY CODE PARAMETER 
          RJ     BLK         BLANK FILL PARAMETER VALUE 
          MX5    42 
          BX7    X5*X6       (X7) = DISPLAY CODE PARAMETER
          SX2    B7 
          LX2    1
          SX2    X2+B1       MULTIPLY BY 3
          SB3    X2          (B3) = INDEX TO DISPLAY PAGE 
          SA1    B3+KLPAR0   GET WORD WITH DISPLAY CODE PARAMETER IN IT 
          MX5    42 
          BX1    -X5*X1      CLEAR OLD DISPLAY CODE VALUE 
          BX7    X7+X1       COMBINE NEW PARAMETER WITH DISPLAY 
          SA7    A1          SAVE IT IN DISPLAY PAGE
          SB6    B6+3        ADVANCE TO NEXT PARAMETER WORD 
          EQ     PAR1        PROCESS NEXT PARAMETER FROM CRACKBUF 
  
**        STEP -07- SET MSG POINTER TO, ( ILLEGAL WHEN MODULE RUNNING)
*                   MESSAGE THEN STEP 10. 
* 
 PAR4     SB2    MSGE7       MSG ( ILLEGAL WHEN MODULE RUNNING) 
          EQ     PAR7 
  
**        STEP -08- SET MESSAGE POINTER TO SYNTAX ERROR MESSAGE GO TO 
*                   STEP 10.
* 
 PAR5     SB2    MSGE60      MSG  ( SYNTAX ERROR) 
          EQ     PAR7 
  
**        STEP -09- SET MESSAGE POINTER TO CVT ERROR MSG GO TO STEP 10. 
*                   STEP 10.
* 
 PAR6     SB2    MSGE2       MSG ( CVT ERROR NNNNNN)
          SA5    A5 
          BX6    X5 
          SA6    MSGE2A      STORE BAD DATA 
  
**        STEP -10- CALL ROUTINE ILLEGAL TO POST MESSAGE ON ALL ACTIVE
*                   DEVICES AND GO TO STEP 11.
* 
 PAR7     RJ     POST        POST MESSAGE FOR USER
  
**        STEP -11- IF K/L DISPLAY ACTIVE UPDATE DISPLAY WITH PARAM 
*                   TEHN RETURN, ELSE RETURN. 
* 
 PAR8     SB3    DPARAM 
          RJ     UPDIS       UPDATE DISPLAY WITH PARAMETERS 
          SA1    PARA 
          SA2    FLL
          BX1    X1-X2
          ZR     X1,PAR9     IF LINE LIMIT NOT CHANGED
          BX6    X2 
          SA6    FDFT        RESET DEFAULT LINE LIMIT ON LINE LIMIT 
 PAR9     EQ     PARAM       RETURN TO CALLER 
  
**        TABLE TPARM CONTAINS THE DISPLAY CODE PARAMETER.
* 
 TPARM    VFD    60/2LP0
          VFD    60/2LP1
          VFD    60/2LP2
          VFD    60/2LP3
          VFD    60/2LP4
          VFD    60/2LP5
          VFD    60/2LP6
          VFD    60/2LP7
          VFD    60/2LP8
          VFD    60/2LP9
          VFD    60/2LTL
          VFD    60/2LLL
 TPARML   EQU    *-TPARM
  
**        TABLE TPARM1 CONTAINS THE CONVERTED INTEGER VALUE OF THE
*         DISPLAY CODE PARAMETER. 
* 
  
 PARA     DATA   0           TEMPORARY STORAGE FOR LINE LIMIT ON ENTRY
 PARB     DATA   0           TEMPORARY STORAGE FOR PARAMETER VALUE
          EJECT 
 PICTURE  TITLE  PICTURE - PROCESS PICTURE DIRECTIVE. 
**        PICTURE - PROCESS PICTURE DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         OUTPUT A PICTURE OF THE CURRENT K/L DISPLAU AND SEND
*         TO THE ACTIVE OUTPUT FILE.
* 
*           DIRECTIVE 'PICTURE TYPE'
*                     'PICTURE' 
* 
*         ENTRY  IF TYPE ABSENT FDIS CONTAINS CURRENT DISPLAY TYPE FOR
*                PICTURE. 
* 
*         EXIT   DISPLAY UPDATE TO TYPE ON DIRECTIVE. 
* 
*         ROUTINES CALLED -  PRINT   - OUTPUT ROUTINE.
*                            CVTINT  - CONVERT DISPLAY CODE TO INTEGER. 
*                            CVTDIS  - BINARY TO OCTAL DISPLAY CODE.
*                            FILL    - BUFFER FILL. 
*                            UPDIS   - UPDATE K/L DISPLAY.
*                            POST    - POST MESSAGE.
* 
*         DATA AREAS USED -  CLINE   - PRINT LINE DATA. 
*                            CNTLINE   - CURRENT LINE NUMBER. 
* 
*         USES   A - 1, 2, 6, 7.
*                X - 1, 2, 3, 5, 6, 7.
*                B - 2, 3, 4, 5, 6, 7.
* 
*         MESSAGES   SYNTAX ERROR.
* 
  
**        STEP -01- GET TYPE FROM PICTURE DIRECTIVE PARAMETER IF NO 
*                   PARAMETER PRESENT THEN STEP 2, ELSE SCAN TABLE TDIS 
*                   FOR MATCH IF FOUND SET INDEX TO TYPE FOR PICTURE
*                   THEN STEP 2, ELSE CALL POST    TO POST SYNTAX ERROR 
*                   THEN STEP 8.
* 
 PICTURE  DATA   0           ENTRY/EXIT 
          SA1    FDIS 
          SB3    X1 
          SA1    CRKBUF+1 
          ZR     X1,PIC2     IF NO PARAMETERS ON PICTURE DIRECTIVE
          SB4    B0 
          SB5    TDISL
          MX5    42 
          SX6    X1-1R= 
          NZ     X6,PIC1     IF EQUAL SIGN NOT PRESENT
          SA1    A1+B1       USE NEXT WORD EQUAL SIGN PRESENT 
 PIC1     SA2    TDIS+B4
          SB3    X2          SET DISPLAY TYPE 
          BX2    X5*X2       CLEAR GARBAGE
          BX2    X2-X1
          ZR     X2,PIC2     IF DISPLAY TYPE FOUND
          SB4    B4+B1
          LT     B4,B5,PIC1  IF NOT END OF TABLE
          SB2    MSGE60      SYNTAX ERROR 
          RJ     POST        POST MESSAGE 
          EQ     PIC16       GO TO RETURN 
  
**        STEP -02- CALL UPDIS TO UPDATE DISPLAY THEN STEP 3. 
* 
 PIC2     RJ     UPDIS
          SA1    BLANKS 
          SB4    KLMSG-8
          SB5    AA-1 
          SB6    50          (B6) = NUMBER OF LINE TO PRINT 
 PIC3     SB3    6
 PIC3A    SA2    B4+B3
          BX2    X2-X1
          SB3    B3-B1       DECREMENT INDEX INTO CURRENT LINE
          ZR     X2,PIC3A    IF BLANK WORD
          PL     B3,PIC3B    IF NON BLANK FOUND AND NOT END OF LINE 
          SB4    B4-7        DECREMENT DISPLAY LINE 
          SB6    B6-B1       DECREMENT NUMBER OF LINES
          GE     B4,B5,PIC3  IF NOT DONE YET
 PIC3B    SB4    B4+6        (B4) SET TO LAST NON BLANK TO PRINT
  
*         STEP -03- CHECK DISPLAY TYPE IF SOURCE THEN STEP 5, ELSE
*                   STEP 4. 
* 
 PIC4     SA1    FDIS 
          ZR     X1,PIC9     IF SOURCE PICTURE
  
**        STEP -04- MOVE LINE OF K/L DISPLAY TO CLINE AND CALL PRINT
*                   TO SEND IT TO THE ACTIVE OUTPUT FILE LOOP UNTIL 
*                   ALL LINES PRINTED THEN STEP 6.
* 
          SA5    BLANKS      GET WORDS OF BLANKS
          SB3    AA-1        (B3) = SOURCE ADDRESS
  
          SB5    CLINE+6     (B5) = LAST WORD OF CURRENT LINE 
 PIC5     SB6    CLINE       (B6) = CURRENT CLINE STORE ADDRESS 
          BX6    X5 
          SA6    B6 
          SA1    FDIS 
          SX1    X1-DPPU
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          ZR     X1,PIC51    IF PPU DISPLAY 
          SX1    X1-6        CHECK FOR SECOND HALF
          ENDIF 
          NZ     X1,PIC5A    IF NOT PPU DISPLAY 
 PIC51    CLOCK  CLINE
 PIC5A    MX2    54          (X2) = MASK OF 54 BITS 
          MX4    6           (X4) = MASK OF 6 BITS
          BX7    X4*X5       (X7) = 55550000000000000000B 
 PIC6     SB3    B3+B1       INCREMENT SOURCE ADDRESS 
          SB6    B6+B1       INCREMENT STORE ADDRESS
          GT     B6,B5,PIC7  IF LINE DONE 
          SA1    B3          GET SOURCE WORD
          BX3    -X2*X1      (X3) = LOWER TWO FROM WORD TO PRINT
          AX1    6
          BX6    -X4*X1      CLEAR ANY SIGN EXTENSION 
          BX6    X7+X6       (X6) = LOWER 2+ UPPER 8 CHARACTERS 
          BX7    X3          (X7) = LOWER 2 FROM CURRENT WORD 
          LX7    54          POSITION LOWER 6 TO UPPER 6
          SA6    B6          STORE SOURCE WORD
          EQ     PIC6        LOOP TO MOVE LINE TO PRINT 
  
 PIC7     SA7    B6          STORE LAST TWO CHARACTERS
          SB2    CLINE       FIRST WORD TO PRINT
          SB6    B6+B1       ADVANCE POINTER TO STORE 
          MX6    0
          SA6    B6 
          SA1    FDIS                                                    MAL0063
          SX1    X1-DPPU                                                 MAL0063
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          ZR     X1,PIC8     IF PPU DISPLAY 
          SX1    X1-6        CHECK FOR SECOND HALF
          ENDIF 
          ZR     X1,PIC8     IF PPU DISPLAY IS UP                        MAL0063
          SB2    CLINE+1     SKIP TIME FIELD ON OUTPUT                   MAL0063
 PIC8     RJ     PRINT       GO PRINT LINE
          LE    B3,B4,PIC5   IF NOT DONE YET
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          SA1    FDIS 
          SX1    X1-9 
          ZR     X1,PIC8AA   IF THIRD PASS OF DEVICES 
          SX1    X1-3 
          PL     X1,PIC8A    THIRD PASS EXIT
          SA1    FDIS 
          SX1    X1-6 
          PL     X1,PIC8A    SECOND PASS EXIT 
 PIC8AA   SA1    FDIS 
          SX1    X1+6 
          SB3    X1          SET SB3 TO SECOND PART OF DISPLAY
          EQ     PIC2        AND PICTURE
  
 PIC8A    SB3    X1 
          SA1    FTERM
          NZ     X1,PIC15    DO NOT RE-DISPLAY FIRST PART ON TERM 
          RJ     UPDIS
          ENDIF 
          EQ    PIC15 
  
**        STEP -05- MOVE LINE OF SOURCE TO CLINE ADD LINE NUMBER TO 
*                   BEGINNING OF LINE USING CVTDIS TO CONVERT LINE
*                   NUMBER TO DISPLAY CODE THEN CALL PRINT TO OUTPUT
*                   CLINE TO THE ACTIVE OUTPUT DEVICE.  LOOP UNTIL ALL
*                   SOURCE LINES PRINTED THEN STEP 7. 
* 
 PIC9     SB5    B0          (B5) = LINE COUNTER
          SX6    CNTMAX 
          SA6    CNTLINE     SET LINE NO. TO FORCE PAGE EJECT 
          SB4    SOURCE      (B4) = SOURCE FOR PRINTING 
          SB6    SOURCE 
          SB6    B6+LSOURCE        (B6)=LAST LINE TO PRINT
 PIC10    SB3    CLINE+6     (B3) = LAST WORD OF CURRENT ENTRY
          SX1    B5 
          RJ     CVTDIS      CONVERT LINE NUMBER TO DISPLAY CODE
          SA2    B5+LINES 
          SA1    PICA        GET CONSTANT FOR BBBBBBNN=B CONVERSION 
          SX2    X2 
          ZR     X2,PIC10A   IF NO COMPILER ERRORS ON THIS LINE 
          MX7    0
          SA1    PICB        FLAG ERROR LINE WITH **
 PIC10A   LX7    6           POSITION NUMBER LEFT ONE CHARACTER 
          IX7    X7+X1       CONVERT WORD TO BLANKS + LINE NO=
          SA7    CLINE       STORE WORD TO BE PRINTED 
          SB5    B5+B1       ADVANCE LINE NUMBER
          SX3    6
 PIC11    SA1    B4          GET SOURCE WORD
          SA2    BLANKS 
          BX2    X2-X1
          NZ     X2,PIC12    IF WORD NOT ALL BLANKS 
          SX3    X3-1        DECREMENT NUMBER OF WORDS NOT BLANK
 PIC12    BX7    X1 
          SA7    A7+B1       STORE SOURCE WORD IN PRINT LINE
          SB4    B4+B1
          SB7    A7 
          LT     B7,B3,PIC11 IF SIX SOURCE WORDS NOT DONE 
          ZR     X3,PIC13    IF ALL SOURCE WORDS CONTAINED BLANKS 
          SB2    CLINE
          SB1    B0          USE PAGING FORMAT FOR PRINTING 
          RJ     PRINT       PRINT LINE OF SOURCE 
 PIC13    LT     B4,B6,PIC10 IF LAST SOURCE WORD NOT DONE 
  
          SX6    3RLIN
          SA2    BLANKS      GET WORD OF BLANKS 
          MX5    42 
          BX5    X5*X2       CLEAR LOWER 3 CHARACTERS 
          BX6    X5+X6
          SA6    CLINE       STORE FIRST WORD OF MESSAGE BBBBBBBIN= 
          SB2    B0 
 PIC14    SA1    STATUSX+B2  GET STATUS WORD
          BX6    X1 
          SA6    CLINE+1+B2  STORE STATUS WORD INTO PRINT LINE
          SB2    B2+B1
          SX6    B2-6 
          NZ     X6,PIC14    IF SIX WORDS FROM STATUSX NOT DONE 
          SB2    CLINE
          RJ     PRINT       PRINT LINE WITH STATUS MESSAGE 
  
  
**        STEP -07- CHECK IF TERMINAL MODE IF YES THEN CLEAR K/L
*                   LINE 50 MESSAGE THEN STEP 8, ELSE STEP 8. 
* 
 PIC15    SA1    FTERM
          ZR     X1,PIC16    IF NOT TERMINAL DONT CLEAR K/L DISPLAY MSG 
          SB2    KLMSG
          SB3    KLMSG+5
          SA1    BLANKS 
          RJ     FILL        BLANK FILL KLMSG IF TERMINAL MODE
  
**        STEP -08- RETURN. 
* 
 PIC16    EQ     PICTURE     RETURN TO CALLER 
  
 PICA     DATA    22222222222200000021B USED TO CONVERTING LINE NO. 
 PICB     DATA   10H        **          USED TO FLAG COMPILER ERROR.
          EJECT 
 PLUS     TITLE  PLUS - PROCESS + DIRECTIVE.
**        PLUS - PROCESS + DIRECTIVE. 
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         ADVANCE PAGE CURRENTLY BEING ON K/L DISPLAY BY ONE PAGE.
* 
*         ENTRY  CRKBUF(0) = +   (IN DISPLAY CODE LEFT JUSTIFIED) 
*                PLINE = CURRENT LINE NUMBER. 
*                FDIS  = CURRENT DISPLAY TYPE.
* 
*         EXIT   DISPLAY PAGE ADVANCED. 
*                PLINE =   0B IF SOURCE LINE   0B.
*                PLINE =  50B IF SOURCE LINE  50B.
*                PLINE = 120B IF SOURCE LINE 120B.
*                PLINE =   0B IF ANY OTHER PAGE DISPLAYED.
* 
*         ROUTINES CALLED  - UPDIS - UPDATE K/L DISPLAY.
* 
*         DATA AREAS USED  - PLINE = LINE COUNT.
*                            FDIS  =  DISPLAY TYPE. 
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
*                B - 3, 4.
* 
*         MESSAGES  NONE. 
* 
  
**        STEP -01- CHECK DISPLAY TYPE BEING DISPLAY IF SOURCE THEN 
*                   STEP 2, ELSE STEP 3.
* 
 PLUS     DATA   0           ENTRY/EXIT 
          SA1    CRKBUF+1 
          ZR     X1,PLU0     IF NO MORE GARBAGE 
          SB2    MSGE60 
          RJ     POST        POST MESSAGE SYNTAX ERROR
          EQ     PLU3 
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
 PLU0     SA1    FTERM
          ZR     X1,PLU4     NOT A TERM USE NEW DISPLAY 
          SA1    FDIS 
          ENDIF 
          IFEQ   NOS+NOS4+NOS5+NOS6+NOSBE+NOSBE4+NOSBE5+NOSBE6,2,1
 PLU0     SA1    FDIS 
          NZ     X1,PLU1     IF DISPLAY IS NOT SOURCE 
  
**        STEP -02- INCREMENT LINE NUMBER BY 50B (ONE PAGE) IF LESS 
*                   THAN OR EQUAL MAXIMUM THEN STEP 4, ELSE SET LINE
*                   NUMBER TO ZERO THEN STEP 3. 
* 
          SA2    PLINE       GET CURRENT LINE NUMBER
          SX6    X2+50B 
          SA6    PLINE       STORE NEW LINE NUMBER
          SB3    B0 
          SX2    X6-170B
          NG     X2,PLU2     IF PLINE IN RANGE DISPLAY SOURCE 
          SX6    120B 
          SA6    PLINE       RESET LINE NUMBER
  
**        STEP -03- ADVANCE K/L DISPLAY TYPE IF TOO LARGE SET DISPLAY 
*                   TYPE TO ZERO THEN STEP 4, ELSE STEP 4.
* 
 PLU1     SB3    X1+B1       ADVANCE K/L DISPLAY TYPE 
 PLU1A    SB4    TDISL
          LT     B3,B4,PLU2  IF DISPLAY NOT ADVANCE TOO FAR 
          SB3    DSOURCE     SET DISPLAY TO SOURCE
  
          MX6    0
          SA6    PLINE       RESET LINE NUMBER TO 0 
**        STEP -04- CALL UPDIS TO UPDATE DISPLAY PAGE THEN RETURN.
* 
 PLU2     RJ     UPDIS       UPDATE DISPLAY 
 PLU3     EQ     PLUS        RETURN TO CALLER 
  
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
 PLU4     SA1    FDIS 
          NZ     X1,PLU5     NOT SOURCE 
          SA2    PLINE
          SX6    X2+24B      ADVANCE TO NEXT PAGE 
          SA6    PLINE
          SB3    B0 
          SX2    X6-170B
          NG     X2,PLU2     IF NOT THE END 
          SX6    144B        SET TO LAST DISPLAY
          SA6    PLINE
          EQ     PLU1        ADVANCE K/L DISPLAY TYPE 
  
 PLU5     SB3    X1+6 
          SB4    TDISL+6
          LT     B3,B4,PLU2  SECOND PART OF DISPLAY 
          SB4    15          CHECK FOR 3RD DEVICES DISPLAY
          EQ     B3,B4,PLU2 
          LT     B3,B4,PLU6 
          SB4    21          CHECK FOR 3RD PLUS DEVICES DISPLAY 
          NE     B3,B4,PLU6 
          SB3    X1-11
          EQ     PLU1A       RESET AND EXIT 
  
 PLU6     SB3    X1-5 
          EQ     PLU1A       RESET AND EXIT 
          ENDIF 
          EJECT 
 RDSFILE  TITLE  RDSFILE- READ RANDOM FILE TO MODULE BUFFER.
**        RDSFILE - READ RANDOM FILE TO MODULE BUFFER.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         SCAN  THE  RFILE  INDEX  TABLE FOR MATCHING  NAME IF FOUND
*         RDSFILE WILL READ IT INTO THE MODULE BUFFER AND UPDATE THE
*         DISPLAY WITH SOURCE DATA IF PRESENT.
* 
* 
*         ENTRY (X1) = NAME OF ROUTINE TO READ. 
*               FLOG = LOG MESSAGE VIA POST    IF=0  NO LOG IF=1. 
* 
*         EXIT  (X1)    = ZERO IF ROUTINE FOUND.
*               (X1)    = NON-ZERO IF ROUTINE NOT FOUND.
*               MODULE  = BINARY OF MODULE. 
*               SOURCE  = SOURCE IF PRESENT.
*               FDIS    = 1  DISPLAY SOURCE K/L DISPLAY.
* 
*         ROUTINES CALLED -  UPDIS  - DISPLAY UPDATE. 
*                            FILL   - FILL BUFFER.
*                            CHKSUM - CHECKSUM MODULE BUFFER. 
*                            POST   - POST MESSAGE ON ACTIVE FILES. 
*                            SEARCH - SEARCH INDEX BUFFER FOR NAME. 
*                            UPS    - MOVE SOURCE TO UNPACKED POSITION. 
* 
*         DATA AREAS USED -  MODULE - MODULE BUFFER CONTAINS MODULE.
*                            SOURCE - MODULE SOURCE DATA. 
* 
*         USES   A - 1, 2, 5, 6, 7. 
*                X - 1, 2, 5, 6, 7. 
*                B - 2, 3.
* 
*         MESSAGES -  MODULE CHECKSUM ERR.
*                     RANDOM FILE NOT OPEN. 
*                     NO NAME FOR MODULE. 
*                     MODULE NOT FOUND = NAME.
* 
  
**        STEP -01- CHECK  FOR  ERRORS  IF ERROS THEN STEP 4, ELSE READ 
*                   MODULE THEN STEP 2. 
* 
 RDSFILE  DATA   0
          SB2    MSGE8
          ZR     X1,RDS7     IF RECORD NAME NOT GIVEN 
          RJ     SEARCH 
          NZ     X6,RDS6     IF MODULE NAME NOT IN THE INDEX BUFFER 
  
          IFEQ   NOSBE,1,3
          SA1    B5 
          BX7    X1 
          SA7    RDS1+2      STORE FILE NAME IN READ FUNCTION 
  
          SB2    SOURCE 
          SB3    SOURCE 
          SB3    B3+LSOURCE 
          SA1    BLANKS 
          RJ     FILL        CLEAR SOURCE BUFFER WITH BLANKS
  
          IFEQ   NOS,1
          SA2    B5-1 
          BX6    X2 
          SA6    RFILE+6     PUT PRU NUMBER INTO FET
          READ   RFILE,R     PRIME THE BUFFER 
          READW  RFILE,MODULE,LMODULE 
          ENDIF 
  
          IFEQ   NOSBE,1,1
 RDS1     READIN RFILE,/Z/
  
          SB2    B1 
          RJ     CHKSUM      COMPARE CHECKSUM WITH CHECKSUM IN MODULE 
          NZ     B2,RDS5     IF CHECKSUM ERRORS 
          MX1    0
          SB2    DB 
          SB3    PB-1 
          RJ     FILL        CLEAR PLOT/DISPLAY BUFFERS 
          SA1    MODULE 
          MX5    30 
          BX2    X5*X1
          MX5    36 
          BX1    X5*X1
          BX1    X1-X2
          NZ     X1,RDS1A    IF NOT PRIMARY MODULE LOAD 
          SA1    IRB
          MX5    12 
          LX1    24 
          BX1    X5*X1
          NZ     X1,RDS1A    IF A SUB CALL RETURN 
          SB2    UPPBUF 
          SB3    UPPBUF+245 
          SA1    BLANKS 
          RJ     FILL        SET PPU BUFER TO BLANKS
          MX1    0
          SB2    PB 
          SB3    CB-1 
          RJ     FILL        CLEAR PLOT BUFFER
  
**        STEP -02- MOVE SOURCE TO ITS CORRECT POSITION THEN STEP 3.
* 
 RDS1A    RJ     UPS         MOVE SOURCE TO CORRECT POSITION
          SA1    MODULE 
          LX1    47 
          MI     X1,RDS5A          IF COMPILER ERRORS 
  
**        STEP -03- UPDATE DISPLAY IF PPU NOT CHECKPOINTED AND K/L
*                   DISPLAY FLAG NOT SET THEN STEP 6, ELSE STEP 6.
* 
          SA1    FCHK 
          NZ     X1,RDS2     IF CHECK POINT PPU DONT UPDATE DISPLAY 
          SA1    FKL
          ZR     X1,RDS2     IF NOT KL DISPLAY ON 
          SB3    DSOURCE
          RJ     UPDIS       UPDATE DISPLAY FOR SOURCE
 RDS2     MX1    0           FLAG LOAD OK TO CALLING PROGRAM
          EQ     RDS10
  
**        STEP -04- POST ERROR MESSAGE THEN STEP 5. 
* 
 RDS5     SB2    MSGE5       CHECKSUM ERROR 
          EQ     RDS7A
  
 RDS5A    SB2    MSG16             ERROR MESSAGE
          SA1    A1 
          MX2    36 
          BX6    X1*X2
          SA6    B2+3              ADD MODULE NAME
          EQ     RDS7 
  
 RDS6     SB2    MSGE9
          LX1    24 
          BX7    X1 
          SA7    MSGE9A      STORE NAME INTO MESSAGE
 RDS7     SA1    FLOG 
          NZ     X1,RDS8     IF NO LOG FLAG SET/ON
 RDS7A    RJ     POST        SEND MSG TO USER 
 RDS8     SX1    B2          FLAG ERROR IN LOADING IN X1 WITH MSG ADDR
  
**        STEP -05- RETURN TO CALLER. 
* 
 RDS10    EQ     RDSFILE     RETURN 
          EJECT 
 RUN      TITLE  RUN - PROCESS RUN DIRECTIVE. 
**        RUN - PROCESS RUN DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         INITIATES  THE  MODULE  EXECUTION. EXAMPLE OF INPUT DIRECTIVE 
*         FORMAT IS;
* 
*         RUN AAA(BB,CC,DD,EE,FF,GG,HH,II,JJ,KK,LL,MM,
*         NN) 
* 
*         WHERE BB-NN ARE THE MODULE NUMBERS, AN ORDER TO EXECUTE IN. 
*         THE RUN DIRECTIVE IS NOT TERMINATED UNTIL A RIGHT PARENTHESIS 
*         IS ENCOUNTERED IF A LEFT ONE WAS ENCOUNTERED. 
* 
*         RUN AAA      RUNS TEST SERIES AAA UNTIL AN END IS ENCOUNTERED.
*         RUN AAA20    RUNS TEST SERIES FROM MODULE AAA20.
*         RUN          RUNS TEST SERIES CURRENTLY LOADED TO END.
* 
*         ENTRY  (CRKBUF) CONTAINS CRACKED DIRECTIVE. 
* 
*         EXIT   (FRUN) = 1  IF NO ERRORS ENCOUNTERED.
* 
*         ROUTINES CALLED -  RDSFILE- RETREIVE BINARY OF MODULE.
*                            POST   - POST MESSAGE. 
*                            CVTINT - CONVERT DISPLAY CODE TO INTEGER.
*                            FILL   - BUFFER FILL.
*                            STRPPU - START PPU EXECUTION.
*                            INRMOD - INCREMENT MODULE NUMBER.
* 
*         DATA AREAS USED -  LODA   - MODULE NAME.
*                            RUNAME - MODULE NAME UPPER 3 CHARACTERS. 
*                            TRUN   - RUN TABLE OF MODULE NUMBERS.
*                            RUNSH  - SHIFT COUNT TO EXTRACT MODULE NO. 
*                            RUNWD  - POINTS TO TRUN WORD TO USE. 
*                            FRUN   - RUN FLAG 1=RUNNING,0=NOT RUNNING. 
*                            FRUNUP - RUN REQUEST INCOMPLETE FLAG.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 5, 6.
*                B - 2, 3, 4, 5, 6, 7.
* 
*         MESSAGES   RUN DIRECTIVE INCOMPLETE NEEDS ).
*                    TOO MANY MODULES ON RUN DIRECTIVE. 
*                    ILLEGAL WHEN MODULE RUNNING. 
*                    MODULE NUMBERS MUST BE 2 DIGITS. 
* 
  
**        STEP -01- CHECK IF MODULE IS CURRENTLY RUNNING IF NO THEN 
*                   STEP 2, ELSE CALL POST  TO POST MESSAGE 
*                   ( ILLEGAL WHEN MODULE RUNNING) THEN STEP  . 
* 
 RUN      DATA   0           ENTRY/EXIT 
          SA1    FRUN 
          ZR     X1,RUN1     IF MODULE NOT RUNNING
          SB2    MSGE7
          RJ     POST        POST (ILLEGAL WHEN MODULE RUNNING) MESSAGE 
          EQ     RUN14
  
**        STEP -02- CLEAR STOP FLAG TEST IF PREVIOUS RUN DIRECTIVE
*                   ACTIVE IF NO THEN STEP 3, ELSE RESTORE REGISTERS
*                   THEN STEP 4.
* 
 RUN1     MX6    0
          SA6    FSTOP       CLEAR STOP FLAG
          SB5    B0          (B5) = INDEX INTO TRUN 
          SB6    TRUNL       LENGTH OF TRUN TABLE 
          SA1    FRUNUP 
          ZR     X1,RUN2     IF RUN DIRECTIVE NOT ACTIVE
          SA1    RUNB4       RESTORE (B4) 
          SB4    X1          RESTORE B4 
          SA1    RUNB5
          SB5    X1          RESTORE B5 
          SA1    CRKBUF-1 
          EQ     RUN4        RESTART CRACKING FOR INCOMPLETE DIRECTIVE
  
**        STEP -03- INITIALIZE REGISTERS FOR CRACKING RUN DIRECTIVE 
*                   CALL FILE TO CLEAR  MODULE NOS. STORE MODULE
*                   NAME CHECK FOR LEFT PARENTHESIS IF PRESENT THEN 
*                   STEP 8, ELSE STEP 4.
* 
 RUN2     SX6    59-47
          SA6    RUNSH       STORE SHIFT COUNT
          SX6    TRUN 
          SA6    RUNWD       STORE START WORD ADDRESS 
          MX1    0
          SB2    TRUN 
          SB3    TRUN 
          SB3    B3+TRUNL 
          RJ     FILL        CLEAR MODULE NUMBER BUFFER 
          MX6    0
          SA6    LODC        CLEAR CALL SUBROUTINE WORD 
          SA6    LODD        CLEAR CALL SUBROUTINE WORD 
          SA6    RUNTBL      CLEAR RUN TABLE USE FLAG 
          SA1    CRKBUF+1    (A1) = CRKBUF INDEX
          BX6    X1 
          SA6    RUNAME      STORE SERIES NAME
          ZR     X1,RUN7     IF NO NAME GIVEN USE MODULE NAME 
          MX5    18 
          BX5    -X5*X1 
          NZ     X5,RUN8     IF MORE THAN TEST SERIES GIVEN 
          SA1    A1+B1
          SX6    X1-1R( 
          NZ     X6,RUN8     IF NOT ( IN DISPLAY CODE 
          SX6    B1 
          SA6    RUNTBL      SET RUN TABLE USE FLAG 
  
**        STEP -04- CHECK IF END OF PARAMETERS REACHED ) IF YES THEN
*                   STEP 6, ELSE CHECK IF ONLY TWO CHARACTERS IF YES
*                   THEN STEP 5, ELSE POST MESSAGE MODULE NUMBERS MUST
*                   BE 2 CHARACTERS THEN STEP 13. 
* 
 RUN3     SB4    59-11       (B4) = SHIFT COUNT FOR STORE 
 RUN4     SA1    A1+B1
          ZR     X1,RUN6     IF EOL REACHED NO ) DISPLAY CODE 
          SX6    X1-1R) 
          ZR     X6,RUN9     IF END OF PARAMETERS 
          MX5    -48
          BX2    -X5*X1 
          ZR     X2,RUN5     IF ONLY TWO CHARACTERS USED
          SB2    MSGE17 
          RJ     POST        SEND ERROR MESSAGE 17
          EQ     RUN13       GO CLEAR FRUNUP FLAG AND RETURN
  
**        STEP -05- PACK MODULE NUMBER INTO TABLE FOR LATER USE IF NOT
*                   FULL THEN STEP 4, ELSE POST MSG ( TOO MANY MODULES
*                   RUN DIRECTIVE THEN STEP 13. 
* 
 RUN5     LX1    12          POSITION MODULE NUMBER IN LOWER 12 BITS
          BX6    X1 
          LX6    B4          POSITION MODULE NUMBER 
          SA2    TRUN+B5     GET ENTRY
          BX6    X2+X6       UPDATE WITH NEXT ENTRY 
          SA6    A2          STORE ENTRY
          SB4    B4-12
          GE     B4,RUN4     IF WORD NOT FULL YET 
          SB5    B5+B1
          LT     B5,B6,RUN3  IF INDEX .LT. 20 LOOP
          SB2    MSGE16      POST MESSAGE 
          RJ     POST        ( TOO MANY MODULES ON RUN DIRECTIVE) 
          EQ     RUN13       RETURN 
  
**        STEP -06- STORE REGISTERS FOR RESTART RIGHT PAREN WAS NOT 
*                   PROVIDED ON DIRECTIVE. SET FRUNUP FLAG FOR
*                   RESTART ON NEXT INPUT CARD THEN STEP 14.
* 
 RUN6     SX6    B4 
          SA6    RUNB4       STORE B4 FOR RESTART 
          SX6    B5 
          SA6    RUNB5       STORE B5 FOR RESTART 
          SX6    B1 
          SA6    FRUNUP      SET RUN ACTIVE FLAG
          EQ     RUN14       RETURN 
  
**        STEP -07- GET MODULE NAME FROM MODULE BUFFER THEN STEP 10.
* 
 RUN7     SA1    MODULE 
          MX5    30          MASK BITS 59-29
          BX1    X5*X1       MODULE NAME IN UPPER 30 BITS 
          BX6    X1 
          SA6    RUNAME      STORE NAME INTO RUNAME 
          EQ     RUN10       GO TO RUN MODULE NAME LOADED 
  
**        STEP -08- IF MODULE NAME WAS STORED IN RUNAME THEN STEP 10, 
*                   ELSE GO LOAD MODULE IF FOUND THEN STEP 12, ELSE 
*                   STEP 13.
* 
 RUN8     SA1    RUNAME 
          MX5    -42
          BX2    -X5*X1 
          NZ     X2,RUN10    IF NUMBER GIVEN ON DIRECTIVE 
          SX6    2R00 
          LX6    42-12       POSITION SERIES NUMBER TO CORRECT SPOT 
          BX1    X1+X6
          BX6    X1 
          SA6    LODA        STORE MODULE NAME
          SX6    B1 
          SA6    FLOG        SET NO LOG ERROR FLAG
          RJ     RDSFILE     READ RFILE 
          MX6    0
          SA6    FLOG        CLEAR NO LOG FLAG
          ZR     X1,RUN12    IF FOUND MODULE NAME 
          RJ     INRMOD      GO INCREMENT NUMBER TO FIRST ONE IN SERIES 
          BX6    X1 
          SA6    LODA        STORE MODULE NUMBER AND NAME 
          SA6    MSGE9A      STORE MODULE NAME
          NZ     X1,RUN12    IF FOUND MODULE NAME 
          SA1    RUNAME 
          BX6    X1 
          SA6    MSGE9A      STORE MODULE NAME NOT FOUND
          SB2    MSGE9
          RJ     POST        POST MESSAGE MODULE NOT FOUND
          EQ     RUN13       NO MODULE FOUND TERMINATE RUN DIRECTIVE
  
**        STEP -09- GET TEST SERIES NAME IF COMPLETE THEN STEP 10, ELSE 
*                   FORM COMPLETE MODULE NAME THEN STEP 10. 
* 
 RUN9     SA1    RUNAME      GET TEST SERIES NAME 
          MX5    -42
          BX2    -X5*X1 
          NZ     X2,RUN10    IF NUMBER GIVEN ON DIRECTIVE 
          SA2    RUNSH       GET SHIFT COUNT
          SB3    X2          (B3) = SHIFT COUNT 
          SA2    TRUN 
          LX2    B3          POSITION MODULE NUMBER IN LOWER
          MX5    -12
          BX2    -X5*X2      CLEAR ALL BUT FIRST MODULE NO
          LX2    42-12       MOVE MODULE NUMBER INTO POSITION 
          BX1    X2+X1       (X1) = MODULE NAME COMPLETE
          SX6    59-35       FORM NEXT SHIFT COUNT
          SA6    RUNSH       STORE NEW SHIFT COUNT
  
**        STEP -10- IF MODULE NAME GREATER THAN 5 CHARACTERS THEN CALL
*                   POST TO POST MESSAGE THEN STEP 13, ELSE STEP 11.
* 
 RUN10    MX5    -30
          BX6    -X5*X1 
          ZR     X6,RUN11    IF NAME HAD LE 5 CHARACTERS
          SB2    MSGE36 
          RJ     POST        POST MSG MODULE NAME MUST BE 5 CHARACTERS
          EQ     RUN13
  
**        STEP -11- STORE MODULE NAME IN LODA, CALL RDSFILE TO READ 
*                   IF ERROR IN READING THEN STEP 13, ELSE STEP 12. 
* 
 RUN11    BX6    X1 
          SA6    LODA        STORE MODULE NAME FOR PPULOD 
          RJ     RDSFILE
          NZ     X1,RUN13    IF RDSFILE HAD AN ERROR
  
**        STEP -12- CALL STRPPU TO START EXECUTION OF MODULE, CLEAR 
*                   PPU DISPLAY BUFFER, THEN IF K/L DISPLAY FLAG ON 
*                   THEN DISPLAY THEN STEP 13, ELSE STEP 13.
* 
 RUN12    SB2    F.RUN       RUN FLAG 
          SA1    IRB
          SX6    SW.CHK 
          BX6    -X6*X1      CLEAR CHECKPOINT BIT 
          SA6    A1          STORE PRIMARY LOAD INTO INPUT REGISTER 
          RJ     STRPPU      START PPU RUNNING
          RTIME  MTRIN       START CLOCK OF TIME IN 
          SB3    DPPU 
          RJ     UPDIS       UPDATE DISPLAY FOR PPU DISPLAY 
  
**        STEP -13- CLEAR FRUNUP FLAG FOR RUN DIRECTIVE INCOMPLETE THEN 
*                   STEP 14.
* 
 RUN13    MX6    0
          SA6    FRUNUP      CLEAR RUN DIRECTIVE ACTIVE FLAG
  
**        STEP -14- RETURN. 
* 
 RUN14    EQ     RUN         RETURN WE ARE DONE 
          EJECT 
 SEND     TITLE  SEND - PROCESS SEND DIRECTIVE
**        SEND - PROCESS SEND DIRECTIVE.
* 
*         G. L. GOLDEN. 78/07/10. 
* 
*         SEND - PROCESS SEND DIRECTIVE.
* 
*          DIRECTIVE *SEND,CONTENTS OF MESSAGE* 
* 
*         ENTRY  CRKBUF = DISPLAY CODE DIRECTIVE PLUS PARAMETERS. 
*                KEY    = DISPLAY CODE DIRECTIVE PLUS PARAMETERS. 
* 
*         EXIT   MESSAGE SENT TO B DISPLAY + OUTPUT FILE. 
* 
*         ROUTINES CALLED -  POST     - POST MESSAGE ON B DISPLAY+PRINT.
* 
*         DATA AREAS USED -  KEY      - ENTRY BUFFER. 
* 
*         USES   A - 1, 6.
*                X - 1, 5, 6. 
*                B - 2. 
* 
  
**        STEP -01- GET FIRST WORD OF MESSAGE AND CLEAR *SEND,* FROM IT.
* 
 SEND     DATA   0
          SA1    KEY
          MX5    30 
          BX6    -X5*X1 
  
**        STEP -02- GET WORD OF BLANKS OR BLANKS INTO MSG AND POST IT 
*                   THEN RETURN.
* 
          SA1    BLANKS 
          SX2    1R$
          LX2    59-5        POSITION IT TO UPPER CHARACTER 
          MX5    6
          BX1    -X5*X1      CLEAR UPPER CHARACTER WITH WORD OF BLANKS
          BX1    X1+X2
          MX5    30 
          BX1    X5*X1
          BX6    X6+X1       OR BLANKS IN FOR *SEND,* PART OF MSG 
          SA6    KEY
          SB2    KEY
          RJ     POST        POST MESSAGE ON B DISPLAY AND CALL PRINT 
  
          IFEQ   NOSBE,1,1
          SX6    110000B
  
          IFEQ   NOS,1,1
          SX6    10000B 
  
          SA6    B0          SET PAUSE BIT
  
          IFEQ   NOS+NOS4+NOS5,2,2
          EXT    MAL1A
          EREXIT SEN1 
          IFEQ   NOS+NOS5,2,1 
          SYSTEM CPM,R,,100B*100B 
          IFEQ   NOS+NOS4+NOS5,1,2
 OPL      XTEXT  COMCCMD
          FLASH 
          IFEQ   NOS+NOS4+NOS5,2
 SEN1     EREXIT MAL1A
          ENDIF 
  
 SEN2     RECALL
          SA1    B0 
          SX6    10000B 
          BX1    X1*X6
          NZ     X1,SEN2     IF PAUSE BIT SET 
          SB2    SEN3        POST OPERATOR GAVE 
          RJ     POST        GO MESSAGE 
          EQ     SEND        RETURN 
  
 SEN3     DATA   20L OPERATOR GAVE GO 
          DATA   0
          EJECT 
 SETDS    TITLE  SETDS - PROCESS SETDS DIRECTIVE. 
**        SETDS - PROCESS SETDS DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         SETDS - PROCESS ON SWITCH DIRECTIVE.
* 
*           DIRECTIVE 'SETDS SE,RM,TE,BM,BT'
* 
*              SE = STOP ON ERROR.
*              RM = REPEAT MODULE.
*              RT = REPEAT TEST.
*              RC = REPEAT CONDITION. 
* 
*         ENTRY  CRKBUF = DISPLAY CODE DIRECTIVE PLUS PARAMETERS. 
* 
*                TBLRSW   59-36 = DISPLAY CODE NAME.
*                         35-18 = UNUSED. 
*                         17-00 = DISPLAY ADDRESS TO BE UPDATED.
* 
*         EXIT   DS  = SWITCHES THAT ARE SET. 
*                K/L = DISPLAY UPDATED WITH NEW SWITCHE SETTINGS. 
* 
*         ROUTINES CALLED -  UPDIS   - CHANGE DISPLAY TO PARAM. 
*                            POST    - POST MESSAGE.
* 
*         DATA AREAS USED -  TBLRSW - REMOTE SWITCH TABLE.
*                            IRB  -  PPU INPUT REGISTER.
* 
*         USES   A - 1, 2, 3, 6.
*                X - 1, 2, 3, 4, 5, 6.
*                B - 2, 3, 4. 
* 
*         MESSAGES   (PARAMETER ERROR .. PARAMETER) 
* 
  
**        STEP -01- INITIALIZE REGISTERS THEN STEP 2. 
* 
 SETDS    DATA   0           ENTRY/EXIT 
          SA3    DS          (X3) = PPU INPUT REGISTER
          SB2    CRKBUF+1    (B2) = ADDRESS WITHIN CRKBUF 
          SB3    B0          (B3) = BIT NUMBER TO CLEAR 
          SB4    TBLRSW      (B4) = ADDRESS OF SSW TABLE
          MX5    18          (X5) = 18 BIT MASK 
  
**        STEP -02- SEARCH TABLE TBLSSW FOR ENTRY THAT MATCHES
*                   PARAMETER ON CLRSW CALL IF NO ENTRY PRESENT 
*                   THEN STEP 5, IF END OF TABLE AND MATCH NOT
*                   FOUND THEN STEP 4, IF MATCH FOUND THEN STEP 3.
* 
 SRT1     SA1    B2          GET PARAMETER
          ZR     X1,SRT4     IF PARAMETER NOT PRESENT 
          SA2    B4+B3       GET DISPLAY CODE VALUE FROM TABLE
          ZR     X2,SRT3     IF END OF TABLE
          MX6    54 
          BX1    X6*X1       CLEAR LOWER CHARACTER
          BX6    X5*X2
          BX6    X6-X1
          ZR     X6,SRT2     IF MATCH FOUND 
          SB3    B3+B1       INCREMENT INDEX INTO TABLE 
          EQ     SRT1        LOOP UNTIL MATCH FOUND OR END OF TABLE 
  
**        STEP -03- POSITION BIT TO CORRECT POSITION FOR SWITCH AND 
*                   UPDATE SWITCH THEN STORE OFF INTO DISPLAY THEN
*                   INCREMENT TO NEXT PARAMETER THEN STEP 2.
* 
 SRT2     SX6    B1 
          LX6    B3          SHIFT MASK TO CORRECT POSITION 
          BX3    X6+X3       SET BITS 
          SA1    SRTA        GET DISPLAY CODE ON LEFT JUSTIFIED 
          SA2    X2          GET DISPLAY LINE 
          MX4    -42         MASK BITS 59-41  18 BITS  3 CHAR 
          BX2    -X4*X2      CLEAR UPPER 18 BITS
          BX6    X1+X2       .OR. OFF INTO UPPER BITS 
          SA6    A2          STORE UPDATED DISPLAY
          SB3    B0          RESET INDEX INTO TABLE 
          SB2    B2+B1       INCREMENT TO NEXT PARAMETER
          EQ     SRT1        LOOP UNTIL DONE
  
**        STEP -04- POST PARAMETER ERROR MESSAGE THEN STEP 2. 
* 
 SRT3     SX6    B2 
          SA6    SRTB 
          BX6    X1 
          SA6    MSGE1A 
          SB2    MSGE1
          BX6    X3 
          SA6    SRTC        SAVE (X3)
          RJ     POST        POST PARAMETER ERROR .. PARAMETER
          SA3    SRTC        RESTORE X3 
          SA1    SRTB 
          SB2    X1+1        RESTORE B2 TO B2+1 
          SB3    B0          RESET INDEX INTO TABLE 
          SB4    TBLRSW      (B4) = ADDRESS OF SSW TABLE
          MX5    18 
          EQ     SRT1        LOOP UNTIL DONE
  
**        STEP -05- STORE UPDATED SWITCHES INTO IRB AND UPDATE
*                   DISPLAY IF KL DISPLAY FLAG ON THEN STEP 6.
* 
 SRT4     BX6    X3 
          SA6    DS          STORE NEW WORD WITH SSW UPDATED
          SB3    DPARAM 
          RJ     UPDIS       UPDATE DISPLAY WITH PARAMETERS 
  
**        STEP -06- RETURN. 
* 
 SRT5     EQ     SETDS       RETURN 
  
 SRTA     VFD    60/3L ON 
 SRTB     DATA   0
 SRTC     DATA   0
          EJECT 
 SETSW    TITLE  SETSW - PROCESS SETSW DIRECTIVE. 
**        SETSW - PROCESS SETSW DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         SETSW - PROCESS ON SWITCH DIRECTIVE.
* 
*           DIRECTIVE 'SETSW SE,RM,PL,DL,RT'
* 
*              SE = STOP ON ERROR.
*              RM = REPEAT MODULE.
*              PL = PRINT LOG.
*              DL = DAYFILE LOG.
*              RT = REPEAT TEST.
*              KL = K/L DISPLAY ACTIVE. 
*              SB = CALL STAND BY PPU FOR I/O.
*              RC = REPEAT CONDITION. 
* 
*         ENTRY  CRKBUF = DISPLAY CODE DIRECTIVE PLUS PARAMETERS. 
* 
*                TBLSSW   59-36 = DISPLAY CODE NAME.
*                         35-18 = DISPLAY ADDRESS TO BE UPDATED.
*                         17-00 = FLAG ADDRESS. 
* 
*         EXIT   IRB = SWITCHES THAT ARE SET. 
*                K/L = DISPLAY UPDATED WITH NEW SWITCHE SETTINGS. 
* 
*         ROUTINES CALLED -  UPDIS   - CHANGE DISPLAY TO PARAM. 
*                            POST    - POST MESSAGE.
* 
*         DATA AREAS USED -  TBLSSW - SSW TABLE.
*                            IRB  -  PPU INPUT REGISTER.
*                            FKL  -  FLAG K/L DISPLAY ACTIVE FLAG.
*                            FDL  -  FLAG DAYFILE LOG.
*                            FPL  -  FLAG PRINT OUTPUT. 
*                            FRA  -  FLAG REPORT ALL DATA ERRORS. 
*                            FRM  -  FLAG REPEAT MODULE.
*                            FRT  -  FLAG REPEAT TEST.
*                            FSE  -  FLAG STOP ON ERROR.
*                            FSB  -  FLAG STAND BY PPU FOR I/O. 
*                            FRC  -  FLAG REPEAT CONDITION FLAG.
* 
*         USES   A - 1, 2, 3, 6.
*                X - 1, 2, 3, 4, 5, 6.
*                B - 2, 3, 4. 
* 
*         MESSAGES   (PARAMETER ERROR .. PARAMETER) 
* 
  
**        STEP -01- INITIALIZE REGISTERS THEN STEP 2. 
* 
 SETSW    DATA   0           ENTRY/EXIT 
          SA3    IRB         (X3) = PPU INPUT REGISTER
          SB2    CRKBUF+1    (B2) = ADDRESS WITHIN CRKBUF 
          SB3    B0          (B3) = BIT NUMBER TO CLEAR 
          SB4    TBLSSW      (B4) = ADDRESS OF SSW TABLE
          MX5    12          (X5) = 12 BIT MASK 
  
**        STEP -02- SEARCH TABLE TBLSSW FOR ENTRY THAT MATCHES
*                   PARAMETER ON CLRSW CALL IF NO ENTRY PRESENT 
*                   THEN STEP 5, IF END OF TABLE AND MATCH NOT
*                   FOUND THEN STEP 4, IF MATCH FOUND THEN STEP 3.
* 
 SET1     SA1    B2          GET PARAMETER
          ZR     X1,SET4     IF PARAMETER NOT PRESENT 
          SA2    B4+B3       GET DISPLAY CODE VALUE FROM TABLE
          ZR     X2,SET3     IF END OF TABLE
          BX6    X5*X2
          BX6    X6-X1
          ZR     X6,SET2     IF MATCH FOUND 
          SB3    B3+B1       INCREMENT INDEX INTO TABLE 
          EQ     SET1        LOOP UNTIL MATCH FOUND OR END OF TABLE 
  
**        STEP -03- POSITION BIT TO CORRECT POSITION FOR SWITCH AND 
*                   UPDATE SWITCH THEN STORE OFF INTO DISPLAY THEN
*                   INCREMENT TO NEXT PARAMETER THEN STEP 2.
* 
 SET2     SX6    2RKL 
          LX6    59-11
          BX6    X6-X1
          NZ     X6,SET2A    IF NOT KL DO NOT CHECK TERMINAL MODE 
          SA1    FTERM
          ZR     X1,SET2A    IF NOT TERMINAL MODE CONTINUE
          SA1    SETD 
          EQ     SET3        POST PARAM ERROR 
  
 SET2A    SA1    B2          RESTORE X1 
          SX6    B1 
          LX6    B3          SHIFT MASK TO CORRECT POSITION 
          BX3    X6+X3       SET BITS 
          SX6    B1 
          SA6    X2          SET FLAG WORD USING LOWER 18 BITS OF TABLE 
          SA1    SETA        GET DISPLAY CODE ON LEFT JUSTIFIED 
          LX2    59-17       POSITION ADDRESS OF DISPLAY IN LOWER 18
          SA2    X2          GET DISPLAY LINE 
          MX4    -42         MASK BITS 59-41  18 BITS  3 CHAR 
          BX2    -X4*X2      CLEAR UPPER 18 BITS
          BX6    X1+X2       .OR. OFF INTO UPPER BITS 
          SA6    A2          STORE UPDATED DISPLAY
          SB3    B0          RESET INDEX INTO TABLE 
          SB2    B2+B1       INCREMENT TO NEXT PARAMETER
          EQ     SET1        LOOP UNTIL DONE
  
  
**        STEP -04- POST PARAMETER ERROR MESSAGE THEN STEP 2. 
* 
 SET3     SX6    B2 
          SA6    SETB 
          BX6    X1 
          SA6    MSGE1A 
          SB2    MSGE1
          BX6    X3 
          SA6    SETC        SAVE (X3)
          RJ     POST        POST PARAMETER ERROR .. PARAMETER
          SA3    SETC        RESTORE X3 
          SA1    SETB 
          SB2    X1+1        RESTORE B2 TO B2+1 
          SB3    B0          RESET INDEX INTO TABLE 
          SB4    TBLSSW      (B4) = ADDRESS OF SSW TABLE
          MX5    12 
          EQ     SET1        LOOP UNTIL DONE
  
**        STEP -05- STORE UPDATED SWITCHES INTO IRB AND UPDATE
*                   DISPLAY IF KL DISPLAY FLAG ON THEN STEP 6.
* 
 SET4     SX1    SW.SL
          BX3    -X1*X3      CLEAR SCOPE LOOP BIT 
          SA1    FSE
          NZ     X1,SET4B    IF STOP ON ERROR OFF 
          SA1    FRC
          NZ     X1,SET4A    IF REPEAT CONDITION  ON
          SA1    FRM
          ZR     X1,SET4B    IF REPEAT MODULE OFF 
 SET4A    SX1    SW.SL       TURN ON SCOPE LOOP SWITCH
          BX3    X3+X1
 SET4B    BX6    X3 
          SA6    IRB         STORE NEW WORD WITH SSW UPDATED
          SB3    DPARAM 
          RJ     UPDIS       UPDATE DISPLAY WITH PARAMETERS 
  
**        STEP -06- RETURN. 
* 
 SET5     EQ     SETSW       RETURN 
  
 SETA     VFD    60/3L ON 
 SETB     DATA   0
 SETC     DATA   0
 SETD     VFD    60/10LKL ILLEGAL 
          EJECT 
 STOP     TITLE  STOP - PROCESS STOP DIRECTIVE. 
**        STOP - PROCESS STOP DIRECTIVE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         CLEAR RUN FLAG AND SEND STOP TO PPU.
* 
*         ENTRY  CRKBUF(0) = STOP LEFT JUSTIFIED DISPLAY CODE.
* 
*         EXIT   (FSTOP) = 1  IF FRUN=1.
*                (IRB)   = (IRB).OR.SW.CHK. 
* 
*         ROUTINES CALLED -  POST    - POST MESSAGE.
* 
*         DATA AREAS USED -  FSTOP - STOP FLAG. 
*                            IRB   - PPU INPUT REGISTER.
*                            FRUN  - MODULE RUNNING FLAG. 
*                            IRB   - PPU INPUT REGISTER.
* 
*         USES   A - 1, 6.
*                X - 1, 6.
*                B - 2. 
* 
*         MESSAGES    ILLEGAL WHEN MODULE NOT RUNNING.
* 
  
**        STEP -01- CHECK RUN FLAG IF RUNNING CALL POST  TO POST MSG
*                   ILLEGAL WHEN MODULE NOT RUNNING THEN STEP 5, ELSE 
*                   STEP 2. 
* 
 STOP     DATA   0           ENTRY/EXIT 
          SA1    FRUN        GET RUN FLAG 
          NZ     X1,STP1     IF MODULE RUNNING
          SB2    MSGE12 
          RJ     POST        POST ILLEGAL ENTRY NOT RUNNING 
          EQ     STOP        RETURN 
  
**        STEP -02- STORE CHECKPOINT SWITCH INTO PPU INPUT REGISTER,
*                   SET STOP FLAG TO A ONE THEN STEP 3. 
* 
 STP1     SA1    IRB         (X1) = PPU INPUT REGISTER
          SX6    SW.CHK      CHECKPOINT SWITCH
          BX6    X6+X1       SET CHECKPOINT BIT 
          SA6    A1          STORE CHECKPOINT BIT INTO PPU IR 
          SX6    B1 
          SA6    FSTOP       SET STOP FLAG
  
**        STEP -03- SET THE SUSPEND READING INPUT FLAG, THEN RETURN.
* 
 STP2     SX6    B1 
          SA6    FSUSPI      SET THE SUSPEND READING INPUT FLAG 
          EQ     STOP        RETURN TO CALLER 
          EJECT 
 STRPPU   TITLE  STRPPU - START EXECUTION OF MODULE.
**        STRPPU - RESUME EXECUTION OF MODULE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         STRPPU IS USED TO START EXECUTION OF THE 12-BIT PPU DRIVER
*         MLD. WHEN THE 16BIT FLAG IS PRESENT IN MODULE+5, STRPPU IS
*         USED TO START EXECUTION OF THE 16-BIT PPU DRIVER WLD. 
* 
* 
*         ENTRY  (B2) = FUNCTION TYPE.
* 
*                       1 = START 
*                       2 = RESUME
* 
*         EXIT   AUTO-RECALL IS USED BY THE CPU TO CALL MLD WITH A
*                DUMMY FET. 
* 
*                AUTO-RECALL IS USED BY THE CPU TO CALL WLD WITH A
*                DUMMY FET. 
* 
*                    ---------------------------- 
*               (IRB)I FFFF LLLL 0000 0000 SSSS I 
*                    ---------------------------- 
* 
*                FFFF = 0001  FOR A START MLD OR WLD REQUEST. 
*                       0002  FOR A RESUME MLD OR WLD REQUEST.
* 
*                LLLL = IF NON-ZERO, THE MODULE BINARY HAS BEEN CHANGED 
*                       SINCE THE LAST TIME  THE  PPU  DRIVER  WAS  UP. 
* 
*                     = 1 IF NEW SUB MODULE LOAD BEING RESUMED. 
*                     = 2 IF NEW PRIMARY MODULE LOAD BEING RESUMED. 
* 
*                SSSS =  SWITCHES TO PPU
* 
*                               12-BIT MSG BUFFER FOR MLD 
*                      -------------------------------------------- 
*                MBR+0 I  DC   I AC AL I EQ UN I CH I  PROD OVL   I 
*                      I       I       I       I    I   NAME      I 
*                      I-------+-------+-------+----------+-------I 
*                   +1 I  P0   I  P1   I   P2  I    P3    I  P4   I 
*                      I-------+-------+-------+----------+-------I 
*                   +2 I  P5    I  P6   I   P7  I   P8    I  P9   I 
*                      I--------+-------+-------+---------+-------I 
*                   +3 I AC  SH I B T P I P P P I P  P  P I P P P I 
*                      I        I F C 9 I 8 7 6 I 5  4  3 I 2 1 0 I 
*                      I        I Z U   I       I         I       I 
*                      I------------------------------------------I 
* 
* 
*                               16-BIT MSG BUFFER FOR WLD 
*                      I------------------------------------------I 
*                 MB+0 I  DC   I SH AL I EQ UN I CH I  PROD OVL   I 
*                      I       I       I       I    I    NAME     I 
*                      I------------------------------------------I 
*                   +1 I UNDEF I    P0    I    P1     I    P2     I 
*                      I------------------------------------------I 
*                   +2 I UNDEF I    P3    I    P4     I    P5     I 
*                      I------------------------------------------I 
*                   +3 I UNDEF I    P6    I    P7     I    P8     I 
*                      I------------------------------------------I 
*                   +4 I UNDEF I    P9    IPORTI   SN   I   SN    I 
*                      I------------------------------------------I 
* 
* 
*         ROUTINES CALLED -  POST    - POST MESSAGE.
* 
*         DATA AREAS USED -  VERSION - MALET VERSION NUMBER.
*                            MODULE  - MODULE BUFFER. 
*                            WDEVIC  - DEVICE CODE. 
*                            FAL     - CURRENT ACCESS LEVEL.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 3, 5, 6. 
*                B - 2, 3, 4. 
* 
*         MESSAGES   VERSION NUMBER ERROR RE-ASSEMBLE.
*                    NO DEVICE ASSIGNED.
*                    MODULE DOES NOT SUPPORT DEVICE CODE. 
*                    MODULE WILL NOT RUN WITH AL LESS THAN 10B. 
*                    LANGUAGE CHANGE - MODULE TERMINATED. 
*                    PPU OVERLAY NAME NOT IN RANGE. 
* 
  
**        STEP -01- CHECK VERSION NUMBER IF OK THEN STEP 2, ELSE
*                   CALL POST TO POST MESSAGE VERSION NUMBER ERROR
*                   RE-ASSEMBLE.  THEN STEP 7.
* 
 STRPPU   DATA   0
          SA1    MODULE+3 
          MX5    -11
          LX1    12          POSITION VERSION INTO LOWER 12 BITS
          SA2    VERSION     GET OUR VERSION
          BX1    -X5*X1      CLEAR BITS 59-11 
          BX1    X1-X2       FORM DIFFERENCE
          ZR     X1,STR0           IF VERSION IN BINARY MATCHES OURS
          SB2    MSGE23 
          RJ     POST        POST ILLEGAL VERSION 
          EQ     STR7 
 STR0     SA1    SECURE 
          BX6    -X5*X2 
          BX1    X5*X1
          BX6    X1+X6             PASS VERSION TO PPU
          SA6    A1 
  
**        STEP -02- GET DEVICE CODE.  IF NON-ZERO, THEN STEP 3.  IF 
*                   ZERO, SKIP THE CHECK FOR A DEVICE CODE MATCH IF 
*                   THE MODULE IS A LOW-LEVEL LANGUAGE MODULE WITH NO 
*                   I/O COMMANDS IN IT. 
* 
 STR1     SA1    WDEVIC2
          MX5    -12
          BX1    -X5*X1 
          NZ     X1,STR2     IF DEVICE ASSIGNED 
          SA1    WDEVIC 
          BX1    -X5*X1 
          NZ     X1,STR2     IF DEVICE ASSIGNED 
          SA2    MODULE 
          SX2    X2-3 
          PL     X2,STR1A    IF NOT LOW-LEVEL LANGUAGE
          SA2    MODULE+5 
          MX6    12 
          LX6    36 
          BX2    X6*X2
          IX7    X2-X6       LOW LEVEL, NO I/O IN MODULE FLAG TO X7 
          ZR     X7,STR5     IF LOW LEVEL AND NO I/O IN THE MODULE
 STR1A    SB2    MSGE20 
          RJ     POST        POST MESSAGE 
          EQ     STR7 
  
**        STEP -03- GET ACCESS LEVEL, EQUIP. NUMBER, UNIT, CHANNEL, 
*                   OVERLAY NAME, P0-P9, AND STORE INTO MB.  IF LOW 
*                   LEVEL MODULE CHECK ACCESS LEVEL, IF NOT GE 10 
*                   CALL POST TO POST ERROR MSG, THEN STEP 07, ELSE 
*                   STEP 04.
* 
 STR2     SA2    MODULE+1 
          SB4    2
 STR3     SB3    5
 STR4     LX2    59-47
          BX3    -X5*X2 
          BX3    X3-X1
          ZR     X3,STR5     IF DEVICE CODE MATCHES ONE IN TABLE
          SB3    B3-B1
          NZ     B3,STR4     IF NOT PROCESSED 5 DEVICE CODES
          SB4    B4-B1
          SA2    A2+B1
          NZ     B4,STR3     IF NOT PROCESSED 2 WORDS 
          SB2    MSGE28 
          RJ     POST        MSG (MODULE DOES NOT SUPPORT DEVICE CODE)
          EQ     STR7 
  
 STR5     LX1    59-11       POSITION DEVICE CODE 
          SA2    FAL         GET ACCESS LEVEL 
          BX2    -X5*X2 
          LX2    48-12
          BX6    X1+X2       COMBINE ACCESS LEVEL WITH DEVICE CODE
          SA1    WEQIP       GET EQUIPMENT NUMBER 
          BX2    -X5*X1 
          LX2    12-3 
          SA1    WDEVIC                                                  MAL31A1
          BX1    -X5*X1      EXTRACT DEVICE CODE (DC)                    MAL31A1
          SX1    X1-100B                                                 MAL31A1
          ZR     X1,STRMSS1  IF MSS DC=100B                              MAL31A1
          SX1    X1-1                                                    MAL31A1
          ZR     X1,STRMSS2  IF DC=101B MSS-CSU 
          SX1    X1+101B-300B 
          ZR     X1,STRLCN   IF DC=300B LCN-NAD LOCAL 
          SX1    X1+300B-301B 
          NZ     X1,STRMSS2  IF NOT DC=301B LCN-NAD REMOTE
 STRLCN   SA1    WDSN 
          MX5    -6 
          AX1    10 
          BX1    -X5*X1      (X1) = UPPER 6 BITS OF AC FIELD
          LX1    47-5        POSITION AC FIELD TO BITS 2**47-2**39
          BX6    X1+X6       COMBINE AC WITH MB 
          MX5    -10
          SA1    MB+3        GET MESSAGE BUFFER WORD
          BX7    X1 
          SA1    WDSN        GET AC WORD
          BX1    -X5*X1      GET LOWER 8 BITS OF AC FIELD 
          LX1    59-9        POSITION AC FIELD TO BITS 2**59-2**51
          MX5    10 
          BX7    -X5*X7      CLEAR AC FIELD 
          BX7    X1+X7
          SA7    MB+3        STORE UPDATE MESSAGE BUFFER WORD 3 
          MX5    -12         RESTORE MASK IN X5 
          SA1    WMSTPH 
          BX1    -X5*X1      GET LTA FOR LCN-NAD
          EQ     STRMSS3
  
 STRMSS1  SA1    WCSU                                                    MAL31A1
          BX1    -X5*X1                                                  MAL31A1
          BX2    X1+X2       COMBINE EQ AND CSU                          MAL31A1
          SA1    WUNIT                                                   MAL31A1
          MX5    -3                                                      MAL31A1
          LX5    3                                                       MAL31A1
          BX1    -X5*X1                                                  MAL31A1
          MX5    -12                                                     MAL31A1
          EQ     STRMSS3                                                 MAL31A1
                                                                         MAL31A1
 STRMSS2  SA1    WUNIT                                                   MAL31A1
          BX1    -X5*X1 
 STRMSS3  BX1    X1+X2                                                   MAL31A1
          LX1    36-12       POSITION CONNECT CODE
          BX6    X6+X1
          SA1    WCH1        GET I/O CHANNEL
          MX5    -6          SET MASK FOR 6 BITS OF CHANNEL 
          BX1    -X5*X1 
          LX1    24-6 
          BX6    X6+X1
          SA1    MODULE 
          MX5    -12
          SX2    X1-3 
          PL     X2,STR5A    IF NOT LOW LEVEL OVERLAY 
          SA2    FAL
          BX2    -X5*X2 
          SX2    X2-10B 
          PL     X2,STR5A    IF AL .GE. 10B 
          SA2    MODULE+5 
          MX7    12 
          LX7    36 
          BX2    X7*X2
          IX7    X7-X2       LOW LEVEL, NO I/O IN MODULE FLAG TO X7 
          NZ     X7,STR5AAA  IF NOT LOW LEVEL MODULE WITH NO I/O
          MX7    48 
          LX7    36 
          BX6    X7*X6       MASK OUT CURRENTLY ASSIGNED ACCESS LEVEL 
          SX7    10B
          LX7    48-12
          BX6    X6+X7       FAKE AN ACCESS LEVEL 10 FOR NON-I/O
          EQ     STR5A
  
 STR5AAA  SB2    MSGE37 
          RJ     POST        ACCESS LEVEL NOT HIGH ENOUGH TO RUN MODULE 
          EQ     STR7 
  
 STR5A    BX1    -X5*X1      (X1) = OVERLAY NUMBER
          SA3    MODULE+5    GET 16BIT FLAG 
          LX3    59-12
          PL     X3,STR5A1   IF NOT 16-BIT MALET
          SA3    FSHARE 
          BX7    X3 
          SA3    MB 
          MX5    6
          LX5    48 
          BX3    -X5*X3 
          LX7    42 
          BX7    X3+X7
          EQ     STR5A2 
  
 STR5A1   SA3    FSHARE 
          BX7    X3 
          SA3    MB+3        GET SN WORD FROM MESSAGE BUFFER
          MX5    2
          LX5    50 
          BX3    -X5*X3 
          LX7    48 
          BX7    X3+X7
          SA2    WMSTPH                                                  MAL31A1
          MX5    -12                                                     MAL31A1
          BX4    -X5*X2                                                  MAL31A1
          LX4    3                                                       MAL31A1
          SA2    WMST                                                    MAL31A1
          BX2    -X5*X2                                                  MAL31A1
          BX2    X4+X2       COMBINE MSTPH AND MST                       MAL31A1
          LX2    36          POSITION BD.EQ1 TO BYTE 1                   MAL31A1
          LX5    36 
          BX7    X5*X7
          BX7    X7+X2                                                   MAL31A1
 STR5A2   SA7    A3          STORE MB WITH SHARE BYTE ADDED 
          SA5    MODULE+5    GET THE 16BIT FLAG 
          LX5    59-12
          PL     X5,STR5A3   IF NOT 16-BIT MALET
          SX2    X1-3 
          PL     X2,STR5A3   IF 16-BIT HIGH LEVEL OVERLAY 
          SX2    X1-TOVL16L  END OF 16-BIT OVERLAY TABLE
          NG     X2,STR5AA   IF OVERLAY IN RANGE
          SB2    MSGE61 
          RJ     POST 
          EQ     STR7 
  
 STR5A3   SX2    X1-TOVLL    END OF 12/16-BIT OVERLAY TABLE 
          NG     X2,STR5AA   IF OVERLAY IN RANGE
          SB2    MSGE61 
          RJ     POST 
          EQ     STR7 
  
 STR5AA   SA5    MODULE+5    GET 16BIT FLAG 
          LX5    59-12
          PL     X5,STR5AA2  IF NOT 16-BIT MALET
          MX7    0
          SB3    2           (B3) = BYTE COUNT OF MB WORD 
          SB4    B0          (B4) = INDEX TO TPARM1 TABLE 
          SB5    9           (B5) = MAX TABLE ENTRY 
          SB6    B1          (B6) = MB WORD TO STORE
 STR5AA1  SA2    TPARM1+B4   GET CONVERTED INTEGER VALUE OF PARAMETER 
          LX7    16 
          MX3    44          BYTE MASK
          BX2    -X3*X2      CLEAR OLD PARAMETER
          BX7    X7+X2       SET NEW PARAMETER INTO WORD
          SB4    B4+B1       INCREMENT INDEX
          GT     B4,B5,STR5AA1A  IF ALL PARAMETERS DONE 
          SB3    B3-B1       DECREMENT SHIFT COUNT
          PL     B3,STR5AA1  IF ALL BYTES NOT DONE
          SA7    MB+B6
          MX7    0
          SB3    2           RESET SHIFT COUNT
          SB6    B6+B1       GET NEXT PARAMETER WORD OF MB
          EQ     STR5AA1     PROCESS NEXT WORD
 STR5AA1A SA2    MB+4 
          SA3    F16SN       DISK SN FOR MB+4 WHEN 16-BIT MALET 
          MX2    0           CLEAR MB+4 
          LX7    32 
          BX7    X7+X3
          SA3    WCH1        PORT FOR IPI CHANNELS
          MX5    -1          MASK FOR UPPER BITS
          LX5    7
          BX3    -X5*X3 
          LX3    17          PORT IN MB+4 BIT 24
          BX7    X7+X3
          SA7    A2 
          EQ     STR5AC 
  
 STR5AA2  MX7    0
          SB3    4           (B3) = BYTE COUNT
          SB4    B0          (B4) = INDEX TO TPARM1 TABLE 
          SB5    9           (B5) = MAX TPARM1 TABLE ENTRY
 STR5AA3  SA2    TPARM1+B4   GET CONVERTED INTEGER
          LX7    12 
          MX3    -12
          BX2    -X3*X2      CLEAR OLD PARAMETER
          BX7    X7+X2       SET NEW PARAMETER INTO WORD
          SB4    B4+B1       INCREMENT INDEX
          GT     B4,B5,STR5AA4  IF ALL PARAMETERS DONE
          SB3    B3-B1       DECREMENT SHIFT COUNT
          PL     B3,STR5AA3  IF ALL BYTES NOT DONE
          SA7    MB+1 
          SB3    4           RESET SHIFT COUNT
          MX7    0
          EQ     STR5AA3     PROCESS NEXT WORD
  
 STR5AA4  SA7    MB+2 
          MX5    -12
          SA2    WDEVIC 
          BX2    -X5*X2      GET DEVICE CODE
          SX2    X2-300B
          ZR     X2,STR5AB   IF DC=300B  LCN-NAD LOCAL
          SX2    X2+300B-301B 
          NZ     X2,STR5AC   IF NOT DC=301B  LCN-NAD REMOTE 
 STR5AB   MX7    0
          SB4    10          (B4) = INDEX TO TPARM1 TABLE 
 STR5AB1  SA2    TPARM1+B4   GET CONVERTED PARAMETER VALUE
          MX3    55 
          LX7    4
          AX2    12          POSITION UPPER 4-BITS OF PARAM INTO LOWER
          BX2    -X3*X2 
          BX7    X7+X2       SET NEW PARAMETER INTO WORD
          SB4    B4-B1       DECREMENT INDEX
          NG     B4,STR5AB2  IF ALL PARAMETERS DONE 
          EQ     STR5AB1
  
 STR5AB2  SA2    WMSID       GET TCU ENABLES
          MX5    -8 
          BX2    -X5*X2 
          LX2    40          BUFFER SIZE AND TCU BITS 2**47-2**40 
          BX7    X7+X2
          SA2    MB+3 
          MX5    12 
          BX2    X5*X2       CLEAR LOWER BITS 
          BX7    X7+X2       COMBINE BUFFER SIZE,TCU ENABLE,SHARE,AND P0-P9 
          SA7    A2          STORE BACK INTO MB+3 
  
 STR5AC   SA5    MODULE+5    GET THE 16BIT FLAG 
          LX5    59-12
          PL     X5,STR5AD   IF NOT 16-BIT MALET
          SX5    X1-3 
          PL     X5,STR5AD   IF HIGH LEVEL OVERLAY
          SA1    X1+TOVL16   (X1) = 16-BIT OVERLAY NAME 
          EQ     STR5AE 
  
 STR5AD   SA1    X1+TOVL     (X1) = 12/16-BIT OVERLAY NAME
 STR5AE   BX6    X1+X6
          SA6    MB          STORE DATA INTO CALL 
          SA2    LODC 
          ZR     X2,STR5B    IF NO CALL ACTIVE
          SA2    STRA 
          BX2    X2-X1
          ZR     X2,STR5B    IF SAME OVERLAY NAME 
          SB2    MSGE25 
          RJ     POST        MSG  LANGUAGE CHANGE - MODULE TERMINATED 
          EQ     STR7 
  
 STR5B    BX6    X1 
          SA6    STRA        SAVE LAST OVERLAY NAME 
          SX6    B2 
          LX6    59-11       (X6) = START/RESUME REQUEST
  
**        STEP -04- GET INPUT REGISTER CLEAR LAST FUNCTION, THEN STORE
*                   TWO INTO LOWER POSITION OF DUMFET THEN STEP 5.
* 
          SA1    IRB         GET INPUT REGISTER 
          MX5    -48
          BX1    -X5*X1      CLEAR LAST FUNCTION
          BX6    X1+X6
          SA6    A1 
          SX6    2
          SA1    DUMFET 
          MX5    48 
          BX1    X5*X1       CLEAR RECALL COMPLETE BIT
          BX6    X1+X6
          SA6    DUMFET      SET RECALL BIT INTO DUMFET 
          MX6    -48
          SA1    ORB
          BX6    -X6*X1      CLEAR LAST PPU FUNCTION
          SA6    A1          STORE OUTPUT REGISTER
**        STEP -05- CALL PPU PROGRAM MLD OR WLD WITH AUTO RECALL AND
*                   CLEAR PPU INPUT REGISTER THEN STEP 6. 
* 
 STR5C    SA1    1
          NZ     X1,*        IF RA+1 NOT CLEAR
          MX6    0
          SA6    FSBPC       CLEAR STANDBY PP CALLED FLAG 
          SA1    FSB
          ZR     X1,STR5E    IF NO STANDBY PPU
          SA6    SBPIR
 STR5CA   SA1    FCIO 
          ZR     X1,STR5C1   IF NOT CIO PP REQUEST
          SA1    SBPCPM      CALL SBP INTO CIO PP 
          EQ     STR5C2 
  
 STR5C1   SA1    CALLMSB     GET STAND BY PPU CALL
 STR5C2   BX6    X1 
          SA6    1           CALL MTR FOR PPU PROGRAM SBP 
+         SA1    1
          NZ     X1,*        IF RA+1 NOT CLEAR
          SA1    FCIO 
          ZR     X1,STR5C3   IF NOT CIO PP
          SA1    SBPCIO 
          MX5    -1          MASK FOR COMPLETE BIT
          BX2    -X5*X1 
          ZR     X2,STR5CA   COMPLETE NOT SET RETRY 
          MX5    11 
          LX5    12 
          BX2    X1*X5
          ZR     X2,STR5C3   IF CIO PP ASSIGNED 
          SB2    MSGE114     CIO PP NOT AVAIALABLE TO MALET 
          RJ     POST 
          EQ     STR7        DO NOT DROP MALET BUT EXIT RUN DIRECTIVE 
  
 STR5C3   SA1    SBPCIO 
          MX5    12 
          LX5    24 
          BX6    X5*X1
          SA6    SBPCIO      CLEAR ALL BUT CHANNEL
          SX6    2
          SA6    FSBPC       SET STANDBY PP CALLED FLAG 
 STR5D    SA1    DUMFET 
          MX5    48 
          BX2    -X5*X1 
          SX3    3
          BX2    X2-X3
          NZ     X2,STR5D    IF COMPLETE NOT SET
          BX1    X5*X1       CLEAR RECALL COMPLETE BIT
          BX6    X1+X6
          SA6    DUMFET      SET RECALL BIT INTO DUMFET 
 STR5E    SA1    MODULE+5    GET 16-BIT FLAG
          LX1    59-12
          PL     X1,STR6     IF NOT 16-BIT MALET
          IFEQ   NOS+NOS4+NOS5+NOSBE+NOSBE4+NOSBE5,2
          SB2    MSGE99      PP PROGRAM WLD CALL ERROR
          RJ     POST 
          SX6    B1 
          SA6    FDROP       PREPARE TO EXIT MALET
          EQ     STR7 
          ENDIF 
 STR5F    SA1    FCIO 
          ZR     X1,STR5F1A  IF NOT CIO PP REQUEST
          SA1    CALLWLD     GET WLD CALL 
          SA2    WLDCPM      GET WLD CPM CALL 
          MX6    1
          LX6    41          POSITION AUTO RECALL BIT 
          BX1    -X6*X1      CLEAR AUTO RECALL BIT
          BX2    -X6*X2      CLEAR AUTO RECALL BIT
          SA3    FSB         GET SBP FLAG 
          NZ     X3,STR5FAA  IF SBP SET 
          IX1    X6+X1       ADD AUTO RECALL BIT
          IX2    X6+X2       ADD AUTO RECALL BIT
 STR5FAA  BX6    X1 
          SA6    CALLWLD     RESTORE CALL W/WO AUTO RECALL
          BX6    X2 
          SA6    WLDCPM      RESTORE CALL W/WO AUTO RECALL
          SA1    WLDCPM      CALL WLD INTO CIO PP 
          EQ     STR5F2 
  
 STR5F1A  SB2    MSGE115     CIO CH NOT ASSIGNED REASSIGN 
          RJ     POST 
          EQ     STR7 
 STR5F2   BX6    X1 
          SA6    1           CALL PPU PROGRAM WLD 
+         SA1    1
          NZ     X1,*        IF RA+1 NOT CLEAR
  
**        STEP -06- CLEAR CHECKPOINT AND STOP FLAGS, SET RUN FLAG 
*                   AND RUNNING MESSAGE INTO DISPLAY, THEN STEP 7.
* 
          IFEQ   NOS+NOS4+NOS5,1
          SA1    FCIO 
          ZR     X1,STR5F2B   IF NOT CIO PP 
 STR5F2A  SA1    WLDCIO 
          MX5    -1          MASK FOR COMPLETE BIT
          BX2    -X5*X1 
          ZR     X2,STR5F2A   COMPLETE NOT SET REREAD 
          MX5    11 
          LX5    12 
          BX2    X1*X5
          ZR     X2,STR5F2B   IF CIO PP ASSIGNED
          SB2    MSGE114     CIO PP NOT AVAIALABLE TO MALET 
          RJ     POST 
          EQ     STR7        DO NOT DROP MALET BUT EXIT RUN DIRECTIVE 
  
 STR5F2B  SA1    WLDCIO 
          MX5    12 
          LX5    24 
          BX6    X5*X1
          SA6    WLDCIO      CLEAR ALL BUT CHANNEL
          SA1    FSB
          ZR     X1,STR5F4    IF THE SBP FLAG NOT SET 
 STR5F3   SA1    DUMFET 
          MX5    48 
          BX2    -X5*X1      MASK OFF THE UPPER 
          SX3    3
          BX2    X2-X3
          NZ     X2,STR5F3    COMPLETION BIT NOT SET
          ENDIF 
 STR5F4   EQ     STR64
  
 STR6     SA1    FCIO 
          ZR     X1,STR61A   IF NOT CIO PP REQUEST
          SA1    CALLMLD     GET MLD CALL 
          SA2    MLDCPM      GET MLD CPM CALL 
          MX6    1
          LX6    41          POSITION AUTO RECALL BIT 
          BX1    -X6*X1      CLEAR AUTO RECALL BIT
          BX2    -X6*X2      CLEAR AUTO RECALL BIT
          SA3    FSB         GET SBP FLAG 
          NZ     X3,STR6AA   IF SBP SET 
          IX1    X6+X1       ADD AUTO RECALL BIT
          IX2    X6+X2       ADD AUTO RECALL BIT
 STR6AA   BX6    X1 
          SA6    CALLMLD     RESTORE CALL W/WO AUTO RECALL
          BX6    X2 
          SA6    MLDCPM      RESTORE CALL W/WO AUTO RECALL
          SA1    MLDCPM      CALL MLD INTO CIO PP 
          EQ     STR62
  
 STR61A   SA1    CALLMLD
          IFEQ   NOS+NOS4+NOS5,1
          SA1    FSB
          NZ     X1,STR61    IF THE SBP FLAG SET CLEAR AUTO RECALL
          SA1    CALLMLD     ELSE GET MLD CALL AND CONTINUE 
          EQ     STR62
 STR61    SA1    CALLMLD
          MX6    1
          LX6    41          POSITION BIT TO CLEAR AUTO RECALL
          BX1    -X6*X1      CLEAR AUTO RECALL IF MLD THE SECOND PP 
          ENDIF 
 STR62    BX6    X1 
          SA6    1           CALL PPU PROGRAM MLD 
+         SA1    1
          NZ     X1,*        IF RA+1 NOT CLEAR
  
**        STEP -06- CLEAR CHECKPOINT AND STOP FLAGS, SET RUN FLAG 
*                   AND RUNNING MESSAGE INTO DISPLAY, THEN STEP 7.
* 
          IFEQ   NOS+NOS4+NOS5,1
          SA1    FCIO 
          ZR     X1,STR62B   IF NOT CIO PP
 STR62A   SA1    MLDCIO 
          MX5    -1          MASK FOR COMPLETE BIT
          BX2    -X5*X1 
          ZR     X2,STR62A   COMPLETE NOT SET REREAD
          MX5    11 
          LX5    12 
          BX2    X1*X5
          ZR     X2,STR62B   IF CIO PP ASSIGNED 
          SB2    MSGE114     CIO PP NOT AVAIALABLE TO MALET 
          RJ     POST 
          EQ     STR7        DO NOT DROP MALET BUT EXIT RUN DIRECTIVE 
  
 STR62B   SA1    MLDCIO 
          MX5    12 
          LX5    24 
          BX6    X5*X1
          SA6    MLDCIO      CLEAR ALL BUT CHANNEL
          SA1    FSB
          ZR     X1,STR64    IF THE SBP FLAG NOT SET
 STR63    SA1    DUMFET 
          MX5    48 
          BX2    -X5*X1      MASK OFF THE UPPER 
          SX3    3
          BX2    X2-X3
          NZ     X2,STR63    COMPLETION BIT NOT SET 
          ENDIF 
 STR64    SA1    FSBPC
          ZR     X1,STR6A    IF SBP NOT CALLED
          SA1    SBPIR
          PL     X1,STR6A    IF NO ROLLOUT FLAG SET 
          MX6    0
          SA6    SBPIR       CLEAR SBP IR AFTER ROLLOUT 
          SX6    2
          SA1    DUMFET 
          MX5    48 
          BX1    X5*X1       CLEAR RECALL COMPLETE BIT
          BX6    X1+X6
          SA6    DUMFET      SET RECALL BIT INTO DUMFET 
 STR65    SA1    FCIO 
          ZR     X1,STR651   IF NOT CIO PP REQUEST
          SA1    SBPCPM      CALL SBP INTO CIO PP 
          EQ     STR652 
  
 STR651   SA1    CALLMSB     GET STAND BY PPU CALL
 STR652   BX6    X1 
          SA6    1           CALL MTR FOR SBP 
+         SA1    1
          NZ     X1,*        IF RA+1 NOT CLEAR
          SA1    FCIO 
          ZR     X1,STR6A    IF NOT CIO PP
          SA1    SBPCIO 
          MX5    -1          MASK FOR COMPLETE BIT
          BX2    -X5*X1 
          ZR     X2,STR65    COMPLETE NOT SET RETRY 
          MX5    11 
          LX5    12 
          BX2    X1*X5
          ZR     X2,STR653   IF CIO PP ASSIGNED 
          SB2    MSGE114     CIO PP NOT AVAIALABLE TO MALET 
          RJ     POST 
          EQ     STR7        DO NOT DROP MALET BUT EXIT RUN DIRECTIVE 
  
 STR653   SA1    SBPCIO 
          MX5    12 
          LX5    24 
          BX6    X5*X1
          SA6    SBPCIO      CLEAR ALL BUT CHANNEL
 STR6A    MX6    0
          SA6    FCHK        CLEAR PPU CHECKPOINTED FLAG
          SX6    B1 
          SA6    FRUN        SET RUN FLAG 
          SA1    RUNMSG 
          BX6    X1 
          SA6    RUNDIS      STORE RUNNING INTO K/L DISPLAY 
          SX1    STRX 
          RJ     LOADOVL           LOAD PPU OVERLAY 
  
**        STEP -07- RETURN. 
* 
 STR7     SA1    IRB
          MX6    48 
          BX6    -X6*X1 
          SA6    A1          CLEAR UPPER 48 BITS OF IRB 
          EQ     STRPPU 
  
 RUNMSG   DATA   10H RUNNING
 STRA     DATA   0           TEMPORARY STORAGE FOR OVL TYPE 
  
**        TABLE TOVL CONTAINS THE NAMES OF THE 12/16-BIT OVERLAYS FOR 
*         MLD/WLD. BY USING THE MODULE HEADER WORD 0, THE EXECUTIVE ADDS
*         BITS 11-0 TO TOVL TO OBTAIN THE OVERLAY NAME. 
* 
  
****
 TOVL     VFD    60/3R5LL    LOW LEVEL OVERLAY  3000
          VFD    60/3R5LL    LOW LEVEL OVERLAY  6000
          VFD    60/3R5LL    LOW LEVEL OVERLAY  BC
          VFD    60/3R56X    66X TAPE OVERLAY 
          VFD    60/3R58X    PRINTER OVERLAY
          VFD    60/3R5MU    MULTIPLEXER  OVERLAY 
          VFD    60/3R58H    844 HALF TRACK DISK OVERLAY
          VFD    60/3R58F    844 FULL TRACK DISK OVERLAY
          VFD    60/3R541    841 DISK OVERLAY 
          VFD    60/3R55X    65X TAPE OVERLAY 
          VFD    60/3R57X    67X TAPE OVERLAY 
          VFD    60/3R5FH    FMD HALF TRACK DISK OVERLAY
          VFD    60/3R5FF    FMD FULL TRACK DISK OVERLAY
          VFD    60/3R5SU    MSF CARTRIDGE STORAGE UNIT(CSU) OVERLAY
          VFD    60/3R5MT   MSF CARTRIDGE STORAGE UNIT(MST) OVERLAY 
          VFD    60/3R5CU    MSF CARTRIDGE STORAGE UNIT(MSC) OVERLAY     MAL013G
          VFD    60/3R5LC    LCN-LOOSELY COUPLED NETWORK OVERLAY
          VFD    60/3R5D1    DEMA1 DISK DRIVER
          VFD    60/3R5D2    DEMA2 DISK DRIVER
          VFD    60/3R5D3    DEMA3 DISK DRIVER
          VFD    60/3R5SE    FSD DISK DRIVER
          VFD    60/3R5S1    LSFMD1 12-BIT FULL-TRACK DISK DRIVER 
          VFD    60/3R5S2    LSFMD2 12-BIT FULL-TRACK DISK DRIVER 
          VFD    60/3R5L2    LCN2-LOOSELY COUPLED NETWORK OVERLAY 
          VFD    60/3R5CT    CCC CARTRIDGE TAPE OVERLAY 
          VFD    60/3R5P3    PFMDW3 16-BIT DISK DRIVER
          VFD    60/3R5SS    FMD ERROR STIMULATOR 
          VFD    60/3R5SF    FSD2 DISK DRIVER 
          VFD    60/3R589    895 DISK DRIVER
          VFD    60/3R5C9    P895D 895 DMA DRIVER 
          VFD    60/3R5EM    DESM ESM DRIVER
          VFD    60/3R5SI    CM-3 IPI DRIVER
          VFD    60/3R5DA    DAS IPI DRIVER 
 TOVLL    EQU    *-TOVL 
  
  
****
*         TABLE TOVL16 CONTAINS THE NAMES OF THE 16-BIT OVERLAYS FOR
*         WLD. TO OBTAIN THE OVERLAY NAME, THE EXECUTIVE BIASES TOVL16
*         BY BITS 11-0 OF THE MODULE HEADER WORD 0. 
* 
****
 TOVL16   VFD    60/3R5L6    3000 LOW LEVEL OVERLAY 
          VFD    60/3R5L6    6000 LOW LEVEL OVERLAY 
          VFD    60/3R5L6    BC LOW LEVEL OVERLAY 
          VFD    60/3R5SI    CM-3 IPI PRODUCT OVERLAY 
          VFD    60/3R5DA    DAS IPI PRODUCT OVERLAY
 TOVL16L  EQU    *-TOVL16 
  
  
****
*                                  LOAD PPU MONITOR OVERLAY 
 STRX     OVLTAB 7LMALET12,1,2
          EJECT 
 UPDIS    TITLE  UPDIS - UPDATE DISPLAY.
**        UPDIS - DISPLAY UPDATE. 
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         UPDATE THE CURRENT K/L DISPLAY BUFFER THAT IS BEING 
*         DISPLAY BY THE SYSTEM.
* 
*         MOVE NEW BUFFER INTO K/L BUFFER, CHANGE LINE NUMBERS TO 
*         MATCH DISPLAY TYPE. 
* 
*         ENTRY  (B3) =  DSOURCE - SOURCE DISPLAY.
*                (B3) =  DMALET  - MALET DIRECTIVES.
*                (B3) =  DPPU    - PPU DISPLAY. 
*                (B3) =  DDEVICE - DEVICES DISPLAY. 
*                (B3) =  DMOD    - MODULES DISPLAY. 
*                (B3) =  DPARAM  - PARAMETERS/LIMITS. 
* 
*         EXIT   (FDIS) = (B3)  FLAG FOR DISPLAY TYPE UPDATED.
* 
*         ROUTINES CALLED -  CVTDIS - CONVERT INTEGER TO DISPLAY CODE.
*                            UPPU   - UPDATE PPU DISPLAY. 
*                            BLK    - BLANK FILL REGISTER.
* 
*         DATA AREAS USED -  KL   - K/L DISPLAY BUFFER. 
*                            FDIS - DISPLAY TYPE FLAG.
* 
*         USES   A - 1, 3, 6, 7.
*                X - 1, 3, 5, 6, 7. 
*                B - 2, 3, 4, 5, 6, 7.
* 
*         MESSAGES  NONE. 
* 
  
**        STEP -01- STORE DISPLAY TYPE IN FDIS. CALL UPPU TO UPDATE PPU 
*                   DISPLAY THEN CHECK IF DISPLAY TYPE IS PPU IF YES
*                   THEN STEP 6,ELSE STEP 2.
* 
 UPDIS    DATA   0
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          MX6    0
          SA6    KLMAL1      SET DISPLAY TERMINATOR 
          SA6    KLDEV1      SAME FOR DEVICES 
          SA6    KLDEV2      SAME FOR DEVICES 
          SA6    KLDC1       SAME FOR PARAMETERS
 UPD01    SA1    FDIS 
          ENDIF 
          IFEQ   NOS+NOS4+NOS5+NOS6+NOSBE+NOSBE4+NOSBE5+NOSBE6,2,1
          SA1    FDIS 
          SX7    B3 
          SA7    FDIS        STORE DISPLAY TYPE 
          BX1    X7-X1
          ZR     X1,UPD0B    IF DISPLAY NOT CHANGED 
          SA1    BLANKS 
          BX6    X1 
          SB2    AA          FIRST LINE TO CLEAR
          SB3    KLMSG-1     LAST LINE+1 TO CLEAR 
  
 UPD0     SB4    6
 UPD0A    SA6    B2 
          SB2    B2+B1
          SB4    B4-B1
          NZ     B4,UPD0A 
          SB2    B2+B1       SKIP COORDINATE WORD 
          LT     B2,B3,UPD0  LOOP TO CLEAR DISPLAY
  
 UPD0B    RJ     UPPU        CALL PPU DISPLAY UPDATE ROUTINE
          SA1    FDIS 
          SB3    X1          MOVE DISPLAY TYPE TO B3
          SX1    X1-DPPU
          ZR     X1,UPD13    IF PPU DISPLAY 
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          SX1    X1-6 
          ZR     X1,UPD13    IF PPU DISPLAY 
          ENDIF 
  
**        STEP -02- INITIALIZE REGISTERS FOR DISPLAY UPDATE.
* 
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          EQ     UPD14       CHANGE SOURCE LINES
          ENDIF 
          SX6    SOURCE      INITIALIZE X6 TO ADDRESS OF SOURCE 
          SB5    50B
          SA1    PLINE       GET CURRENT LINE NUMBER
          SB6    X1 
          LT     B6,B5,UPD1  IF LINE NUMBER LT 50B
          SX6    X6+240      NEW LINE ADDRESS = OLD ADDR + 40*6 
          SB5    B5+50B      INCREMENT TO NEXT PAGE 
          LT     B6,B5,UPD1  IF LINE NUMBER LT 120B 
          SX6    X6+240      LINE NUMBER GT 120B
          SB5    B5+50B 
 UPD1     SA6    DISTBL      STORE ADDRESS OF SOURCE BUFFER 
          SB5    B5-50B      (B5) = START LINE NUMBER 
          SB2    AA-1        (B2) = FWA OF STORE
          SB4    KLMSG-1     (B4) = LWA OF STORE
          SA1    DISTBL+B3
          SB7    X1          (B7) = CURRENT NEW DISPLAY ADDRESS 
  
**        STEP -03- UPDATE DISPLAY WITH NEW PAGE OF DATA AND UPDATE 
*                   LINE NUMBERS IF NEEDED THEN STEP 4. 
* 
 UPD2     NE     B3,UPD5     IF NOT SOURCE DISPLAY
          SA1    LINES+B5 
          SX1    X1          CLEAR UPPER 42 BITS
          ZR     X1,UPD3     IF NO ERRORS FROM COMPILER 
          SX1    2R** 
          SX7    2R          FLAG ERRORS WITH ** IN PLACE OF NNN= 
          LX7    12 
          EQ     UPD4 
  
 UPD3     SX1    B5          MOVE B5 TO X1 FOR CONVERSION 
          RJ     CVTDIS      CONVERT X1 TO DISPLAY CODE 
          SX7    X7          CLEAR UPPER 42 BITS
          SX1    1R=
          LX7    6
 UPD4     BX7    X7+X1       OR IN AN EQUAL SIGN
          SB5    B5+B1       INCREMENT LINE NUMBER
 UPD5     MX5    36 
          ZR     B3,UPD6     IF SOURCE DISPLAY
  
          SA1    BLANKS 
          BX7    -X5*X1 
 UPD6     SA1    B2          GET CORDINATE WORD 
          BX1    X5*X1
          BX7    X1+X7       .OR. IN LINE NO OR BLANKS
          SA7    B2 
          SB6    6           (B6) = WORDS OF DATA TO STORE FOR LINE 
 UPD7     SB2    B2+B1       INCREMENT CURRENT K/L DISPLAY LINE 
          SA1    B7 
          NZ     X1,UPD8     IF NOT LAST WORD OF NEW DISPLAY
          SA1    BLANKS 
          SB7    B7-B1       DECREMENT DISPLAY ADDRESS
 UPD8     BX7    X1 
          SA7    B2 
          SB7    B7+B1       INCREMENT WORD OF SOURCE 
          SB6    B6-B1       DECREMENT WORDS LEFT TO MOVE 
          NE     B6,UPD7     IF 6 WORDS OF SOURCE NOT MOVED 
          SB2    B2+B1       INCREMENT K/L DISPLAY BUFFER ADDRESS 
          NE     B2,B4,UPD2  IF NOT DONE WITH MOVE
  
**        STEP -04- STORE CURRENT IN NUMBER INTO K/L DISPLAY THEN 
*                   STEP 5. 
* 
          SA1    PLINE       GET CURRENT LINE NUMBER
          RJ     CVTDIS      CONVERT TO DISPLAY CODE
          SX7    X7          CLEAR UPPER 42 BITS
          LX7    59-17       MOVE LINE NUMBER TO UPPER 18 BITS
          MX5    18          FORM MASK FOR LINE NUMBER
          SA1    STATUSX     GET K/L DISPLAY LINE CONTAINING LINE NO. 
          LX1    12 
          BX5    -X5*X1      CLEAR OLD LINE NUMBER
          BX7    X7+X5       .OR. NEW LINE NUMBER INTO DISPLAY LINE 
          LX7    48 
          SA7    A1          STORE NEW LINE INTO DISPLAY
  
**        STEP -05- IF DISPLAY NOT MODULES THEN STEP 6, ELSE STORE
*                   MODULE NAMES INTO DISPLAY THEN STEP 6.
* 
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
 UPD9     EQ     UPD17       GO TO NEW ROUTINE
          SB3    B3-DMOD
          ENDIF 
          IFEQ   NOS+NOS4+NOS5+NOS6+NOSBE+NOSBE4+NOSBE5+NOSBE6,2,1
 UPD9     SB3    B3-DMOD
          NE     B3,UPD13    IF DISPLAY NOT MODULES 
          SB3    INDEX+1     (B3) = ADDRESS OF MODULE NAME IN INDEX 
          SB4    AA+14       (B4) = ADDRESS OF DISPLAY LINE 
          SB6    LINDEXL
          MX5    36          (X5) = MASK FOR MODULE NAME 6 CHARACTERS 
          MX4    6           (X4) = MASK FOR 1 CHARACTER
 UPD10    SB5    6           (B5) = COUNT OF NUMBER OF NAMES/LINE 
 UPD11    SA1    B3          GET A NAME FROM INDEX BUFFER 
          ZR     X1,UPD13    IF ZERO NAME RETURN WE ARE DONE
          SA3    PURA 
          BX3    X3-X1
          ZR     X3,UPD12    IF MODULE PURGED 
          LX1    1
          BX2    X1*X4
          LX1    23          POSITION NAME TO UPPER 36 BITS 
          BX1    X5*X1       CLEAR LOWER 30 BITS
          RJ     BLK         BLANK FILL MODULE NAME 
          LX6    54          POSITION BLANK IN FRONT OF NAME
          PL     X2,UPD11A   IF NO COMPILER ERRORS IN MODULE
          BX7    -X4*X6      CLEAR UPPER CHARACTER
          SX1    1R*
          LX1    54          POSITION * TO UPPER CHARACTER
          BX6    X1+X7
 UPD11A   SA6    B4          STORE DISPLAY WORD 
          SB4    B4+B1       ADVANCE POINTER TO INDEX AND KL BUFFER 
          SB5    B5-B1
 UPD12    SB3    B3+2 
          EQ     B3,B6,UPD13 IF END OF INDEX TABLE
          NZ     B5,UPD11    IF LINE NOT COMPLETE 
          SB4    B4+B1       SKIP OVER COORDINATE WORD
          EQ     UPD10       LOOP TO ZERO ENTRY IN INDEX BUFFER 
  
**        STEP -05- RETURN. 
* 
 UPD13    EQ     UPDIS       RETURN TO CALLER 
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
  
**        THESE ROUTINES ARE FOR 721 SUPPORT. 
* 
*         THEY DO THE SAME AS THE STEPS ORIGINALLY INDICATED
*         ONLY FORMAT 23 DECIMAL LINES INSTEAD OF 41 DECIMAL
*         LINES.
 UPD14    SX6    SOURCE      ADDRESS OF SOURCE
          SB5    24B
          SA1    PLINE       GET CURRENT LINE NUMBER
          SB6    X1 
          LT     B6,B5,UPD15   IF LINE NUMBER LT 24B
          SX6    X6+120      NEW LINE ADDRESS = OLD ADDR +20*6
          SB5    B5+24B      INCREMENT TO NEXT PAGE 
          LT     B6,B5,UPD15   IF LINE NUMBER LT 50B
          SX6    X6+120      LINE NUMBER GT 50
          SB5    B5+24B      (B5) = START LINE NUMBER 
          LT     B6,B5,UPD15   IF LINE NUMBER LT 74B
          SX6    X6+120      LINE NUMBER GT 74
          SB5    B5+24B      (B5) = START LINE NUMBER 
          LT     B6,B5,UPD15   IF LINE NUMBER LT 120B 
          SX6    X6+120      LINE NUMBER GT 120 
          SB5    B5+24B      (B5) = START LINE NUMBER 
          LT     B6,B5,UPD15   IF LINE NUMBER LT 144B 
          SX6    X6+120      LINE NUMBER GT 144 
          SB5    B5+24B      (B5) = START LINE NUMBER 
 UPD15    SA6    DISTBL      STORE ADDRESS OF SOURCE BUFFER 
          SB5    B5-24B      (B5) = START LINE NUMBER 
          SB2    AA-1        (B2) = FWA OF STORE
          SA1    DISTBL+B3
          SB7    X1          (B7) = CURRENT NEW DISPLAY ADDRESS 
          NE     B3,UPD16    IF DISPLAY NOT SOURCE CLEAR 50B LINES
          SB4    KLMSG-1B    (B4) = LWA OF STORE
          EQ     UPD2        CONTINUE 
  
 UPD16    SB4    KLMSG-1     (B4) = LWA OF STORE
          EQ     UPD2        CONTINUE 
  
 UPD17    SB3    B3-DMOD
          EQ     B3,UPD18    IF MODULES 
          SB3    B3-6 
          NE     B3,UPD13    NOT MODULES EXIT 
          EQ     UPD19       PLUS DISPLAY SECOND HALF 
 UPD18    SB3    INDEX+1     (B3) = ADDRESS OF MODULE NAME IN INDEX 
          SB4    AA+14       (B4) = ADDRESS OF DISPLAY LINE 
          SB6    LINDEXL-195
          EQ     UPD20       CONTINUE 
  
 UPD19    SB3    INDEX+205   (B3) = ADDRESS OF MODULE NAME IN INDEX 
          SB4    AA+14       (B4) = ADDRESS OF DISPLAY LINE 
          SB6    LINDEXL
 UPD20    MX5    36          (X5) = MASK FOR MODULE NAME 6 CHARACTERS 
          MX4    6           (X4) = MASK FOR 1 CHARACTER
          EQ     UPD10       CONTINUE 
          ENDIF 
  
**        TABLE DISTBL CONTAINS ADDRESS TO GET DATA FROM FOR DIFFERENT
*         DISPLAY TYPES.  ORDER OF TABLE MUST BE THE SAME AS THE NUMBER 
*         ASSIGNED FOR EACH DISPLAY TYPE. 
* 
 DISTBL   VFD    60/SOURCE   ADDRESS OF SOURCE DATA 
          VFD    60/KLMAL    ADDRESS OF MALET DISPLAY DATA
          VFD    60/KLPPU    ADDRESS OF PPU DISPLAY DATA
          VFD    60/KLDEV    ADDRESS OF DEVICE CODE DATA
          VFD    60/KLMOD    ADDRESS OF MODULE DISPLAY HEADER DATA
          VFD    60/KLPAR    ADDRESS OF PARAM DISPLAY DATA
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          VFD    60/SOURCE     ADDRESS OF SOURCE DATA 
          VFD    60/KLMAL1+6   ADDRESS OF SECOND PART OF MALET DISPLAY
          VFD    60/KLPPU      ADDRESS OF PPU DISPLAY DATA
          VFD    60/KLDEV1+6   ADDRESS OF SECOND PART OF DEVICE DISPLAY 
          VFD    60/KLMOD      ADDRESS OF MODULE DISPLAY HE  ADER DATA
          VFD    60/KLDC1+12   ADDRESS OF SECOND PART OF PARAM DISPLAY
          VFD    60/SOURCE     ADDRESS OF SOURCE DATA 
          VFD    60/KLMAL1+6   ADDRESS OF SECOND PART OF MALET DISPLAY
          VFD    60/KLPPU      ADDRESS OF PPU DISPLAY DATA
          VFD    60/KLDEV2+6   ADDRESS OF SECOND PART OF DEVICE DISPLAY 
          VFD    60/KLMOD      ADDRESS OF MODULE DISPLAY HEADER DATA
          VFD    60/KLDC1+12   ADDRESS OF SECOND PART OF PARAM DISPLAY
          ENDIF 
  
*         MALET DISPLAY OF EXECUTIVE DIRECTIVES.
  
 KLMAL    DATA   40LDIRECTIVE            COMMENTS 
          DATA   20L
          DATA   40L ASSIGN   ASSIGN DEVICE FOR MALET USE 
          DATA   20L   *ASSIGN EST=AAA, 
          DATA   40L          CCH=BB,CH=CC,EQ=DD,UN=EE,DC=FF
          DATA   20L,SN=GGGGGGGG,AL=HH* 
          DATA    40L AUTO     RESUME READING FROM INPUT FILE 
          DATA    20L 
          DATA   40L CLRDS    CLEAR DS REGISTER SWITCHES *CL
          DATA   20LRDS SE,RT,RM,RC*
          DATA   40L CLRSW    CLEAR SWITCHES *CLRSW SE,RT,DL
          DATA   20L,RM,PL,SB,KL,RC*
          DATA   40L COMPILE  COMPILE SOURCE BUFFER *COMPILE
          DATA   20L,LIST,SOURCE* 
          DATA   40L DEVICES  DISPLAY DEVICE CODES *DEVICES*
          DATA   20L
          DATA   40L DROP     DROP MALET PPU AND CPU
          DATA   20L
          DATA   40L DUMP     DUMP RANDOM FILE TO BINARY FIL
          DATA   20LE *DUMP*
          DATA   40L GO       RESUME EXECUTION OF MODULE THA
          DATA   20LT WAS STOPPED *GO*
          DATA   40L LINE     SET LINE FOR NEXT ENTRY *LINE=
          DATA   20LNNN*
          DATA   40L LIST     LIST N LINES ON OUTPUT FILE. *
          DATA   20LLIST NN*
          DATA   40L LOAD     LOAD MODULE *LOAD MNENN*
          DATA   20L
          DATA   40L MALET    DISPLAY MALET EXECUTIVE DIRECT
          DATA   20LIVES *MALET*
          DATA   40L MODULES  DISPLAY MODULES CURRENTLY ON R
          DATA   20LANDOM FILE *MODULES*
          DATA   40L MOVE     *MOVE AAA UP BBB LINES* 
          DATA   20L
          DATA   40L MOVE     *MOVE AAA DOWN BBB LINES* 
          DATA   20L
 KLMAL1   DATA   40L
          DATA   20L
          DATA   40LDIRECTIVE            COMMENTS 
          DATA   20L
          DATA   40L PARAM    CHANGES PARAMETERS *PARAM P0=1
          DATA   20L23456,P1=123456,,,,,
          DATA   40L          P9=123456,TL=123456,LL=123456*
          DATA   20L  TL=PPU TIME LIMIT 
          DATA   40L          LL=LINE LIMIT 
          DATA   20L
          DATA   40L PICTURE  PRINT K/L DISPLAY ON OUTPUT FI
          DATA   20LLE *PICTURE=TYPE* 
          DATA   40L PPU      DISPLAY PPU MESSAGES/PLOTS *PP
          DATA   20LU*
          DATA   40L PUNCH    PUNCH SOURCE BUFFER  *PUNCH*
          DATA   20L
          DATA   40L PURGE X  PURGE X FROM RANDOM FILE
          DATA   20L
          DATA   40L RUN      RUN MODULE(S) *RUN MNE(01,02,0
          DATA   20L3,04,10,07)*
          DATA   40L SCRATCH  CHANGE SCRATCH FILE NAME *SCRA
          DATA   20LTCH=LFN*
          DATA   40L SEND     SEND MESSAGE TO B DISPLAY *SEN
          DATA   20LD,CONTENT OF MSG* 
          DATA   40L SETDS    SET DS REGISTER SWITCHES *SETD
          DATA   20LS,SE,RM,RT,RC*
          DATA   40L SETSW    SET SWITCHES *SETSW,PL,DL,SE,R
          DATA   20LM,RT,SB,KL,RC*
          DATA   40L SOURCE   DISPLAY SOURCE FOR MODULE *SOU
          DATA   20LRCE*
          DATA   40L STOP     STOP PPU EXECUTION USED ONLY O
          DATA   20LN K/L DISPLAY 
          DATA   40L +        ADVANCE PAGE ON K/L DISPLAY 
          DATA   20L
          DATA   40L -        DECREMENT PAGE ON K/L DISPLAY 
          DATA   20L
          DATA   0
  
*         DEVICE CODE DISPLAY DATA. 
  
 KLDEV    DATA   40L                  CODES FOR DEVICES 
          DATA   20L
          DATA   40L01=841 DISK                    02=7054/8
          DATA   20L44-2 DISK 
          DATA   40L03=7054/844-4 DISK             04=7154/8
          DATA   20L44-2 DISK 
          DATA   40L05=7154/7155/844-4 DISK        06=819 DI
          DATA   20LSK
          DATA   40L07=FMD-885                     10=FSC-10
          DATA   20L0 MBYTE 
          DATA   40L11=FSC-200 MBYTE               12=FSC-31
          DATA   20L7 MBYTE 
          DATA   40L13=RESERVED                    14=7155/8
          DATA   20L85-42 DISK (DEMA) 
          DATA   40L15=7155/885-42 DISK (PFMDW)    16=7155/8
          DATA   20L85-1X DISK (LSFMD)
          DATA   40L17=RESERVED                    20=405 CA
          DATA   20LRD READER 
          DATA   40L21=415 CARD PUNCH              22=512-LI
          DATA   20LNE PRINTER
          DATA   40L23=580-12 LINE PRINTER         24=580-16
          DATA   20L LINE PRINTER 
          DATA   40L25=580-20 LINE PRINTER         26=580-12
          DATA   20L PFC LINE PRINTER 
          DATA   40L27=580-16 PFC LINE PRINTER     30=580-20
          DATA   20L PFC LINE PRINTER 
          DATA   40L31=CCC/5870 PRINTER (NIP)      32=CCC/59
          DATA   20L70 PRINTER (NIP)
          DATA   40L33=RESERVED                    40=60X 7 
          DATA   20LTRK TAPE
          DATA   40L41=65X 7 TRK TAPE              42=66X 7 
          DATA   20LTK TAPE 
          DATA   40L43=RESERVED                    44=67X 7 
          DATA   20LTRK TAPE
          DATA   40L45=FSC 7 TRK TAPE              46=CCC/56
          DATA   20L80/5744 ACS 
          DATA   40L47=CCC/5680 CARTRIDGE TAPE     50=60X 9 
          DATA   20LTRK TAPE
          DATA   40L51=65X 9 TRK TAPE              52=66X 9 
          DATA   20LTRK TAPE
 KLDEV1   DATA   40L
          DATA   20L
          DATA   40L                  CODES FOR DEVICES 
          DATA   20L
          DATA   40L53=698 9 TRK TAPE              54=67X 9 
          DATA   20LTRK TAPE
          DATA   40L55=67X GCR 9 TRK TAPE          56=FSC 9 
          DATA   20LTRK TAPE
          DATA   40L57=639 9 TRK TAPE              60=6671 M
          DATA   20LUX
          DATA   40L61=6676 MUX                    62=2550-1
          DATA   20L00 EMULATING 6671 
          DATA   40L63=2550-100 EMULATING 6676     64=2550
          DATA   20L
          DATA   40L65=7077-1 LCC                  66=6673 D
          DATA   20LATA SET 
          DATA   40L67=6683 COUPLER                70=DDP 
          DATA   20L
          DATA   40L71=ECS COUPLER                 100=MSS-M
          DATA   20LST
          DATA   40L101=MSS-CSU                    104=CCC/M
          DATA   20LASSTOR SUBSYSTEM
          DATA   40L105=CCC/MASSTOR (CSS)          110=7255/
          DATA   20L834 DISK (FSDI) 
          DATA   40L111=7255/836 DISK (FSDII)      112=RESER
          DATA   20LVED 
          DATA   40L115=CCC/895 DISK               124=CM-3/
          DATA   20L9853 DISK SUBSYSTEM 
          DATA   40L129=RESERVED                   130=5830 
          DATA   20LDAS DISK (SSD 1X) 
          DATA   40L131=5830 DAS DISK (SSD 2X)     132=5830 
          DATA   20LDAS DISK (SABRE 1X) 
          DATA   40L133=5830 DAS DISK (SABRE 1XP)  134=5830 
          DATA   20LDAS DISK (SABRE 2X) 
          DATA   40L135=5830 DAS DISK (SABRE 3XP)  136=5830 
          DATA   20LDAS DISK (SABRE 4X) 
          DATA   40L137=5830 DAS DISK (SABRE 2XP)  140=RESER
          DATA   20LVED 
          DATA   40L142=5830 DAS DISK (ELITE 1X)   143=5830 
          DATA   20LDAS DISK (ELITE 1XP)
          DATA   40L144=5830 DAS DISK (ELITE 2X)   145=5830 
          DATA   20LDAS DISK (ELITE 3XP)
 KLDEV2   DATA   40L
          DATA   20L
          DATA   40L                  CODES FOR DEVICES 
          DATA   20L
          DATA   40L146=5830 DAS DISK (ELITE 4X)   171=ESM I
          DATA   20LI SUBSYSTEM 
          DATA   40L200=CYBER PLUS RING PORT       211=STORN
          DATA   20LET SUBSYSTEM
          DATA   40L300=LCN-NAD LOCAL              301=LCN-N
          DATA   20LAD REMOTE 
          DATA   40L400=CIU OUTPUT CONTRL          401=CIU I
          DATA   20LNPUT CONTRL 
          DATA   40L500=CYBER UNIBUS INTERFACE     7700-7777
          DATA   20L=QSE
          DATA   0
  
*         MODULE NAME HEADER DISPLAY DATA.
  
 KLMOD    DATA   40L             MODULES ON RANDOM FILE 
          DATA   20L
          DATA   0
          EJECT 
 UPPU     TITLE  UPPU - UPDATE PPU DISPLAY USING BUFFERS DB AND PB. 
**        UPPU - UPDATE PPU DISPLAY USING BUFFERS DB AND PB.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         ENTRY  (FDIS)     = DISPLAY TYPE CURRENTLY DISPLAYED. 
*                (FKL)      = FLAG FOR K/L DISPLAY ACTIVE.
*                (FL50)     = 1  UPDATE LINE 50 ONLY. 
*                (MODULE+4) = FORMAT BLOCK LENGTH BITS 47-36
* 
* 
*                DISPLAY BUFFER DATA FORMAT.
*                                               *** 
*                (DB+X+0)-NNNN AAAA BBBB CCCC DDDD *
*                (DB+X+1)-NNNN EEEE FFFF GGGG HHHH *** THREE WORDS/LINE 
*                (DB+X+2)-NNNN IIII JJJJ KKKK LLLL *     FOR 51 OCTAL 
*                                               ***        LINES. 
*                   DB   = DISPLAY BUFFER.
*                   X    = CURRENT LINE DATA IS FOR TIMES 3.
*                   NNNN = CURRENT MESSAGE NUMBER. (INCREMENTED BY PPU) 
*                   AAAA = FORMAT STATEMENT NUMBER. 
*                   BBBB = NUMBER OF SUBSTITUTIONS. 
*                   CCCC = LINE NUMBER TO POST DATA.
*                   DDDD = RESERVED 
*                   EEEE = SUBSTITUTION WORD 1
*                   FFFF = SUBSTITUTION WORD 2
*                   GGGG = SUBSTITUTION WORD 3
*                   HHHH = SUBSTITUTION WORD 4
*                   IIII = SUBSTITUTION WORD 5
*                   JJJJ = SUBSTITUTION WORD 6
*                   KKKK = SUBSTITUTION WORD 7
*                   LLLL = SUBSTITUTION WORD 8
* 
* 
*                PLOT BUFFER DATA FORMAT. 
* 
*                (PB+X) = ZZZZZZZZZZZZZZZZZZB 
* 
*                WHERE X = THE LINE NUMBER TO PLOT INFORMATION. 
*                      Z = CHARACTER LOCATION TO PLOT CHARACTER.
* 
*                          BIT 59 = CHARACTER POSITION 01.
*                          BIT 58 = CHARACTER POSITION 02.
*                          BIT 57 = CHARACTER POSITION 03.
*                           .  .  .  . . . .  . . . .  .. 
*                           .  .  .  . . . .  . . . .  .. 
* 
*                          BIT 02 = CHARACTER POSITION 58.
*                          BIT 01 = CHARACTER POSITION 59.
*                          BIT 00 = CHARACTER POSITION 60.
* 
*         EXIT   K/L DISPLAY UPDATED. 
* 
* 
*         ROUTINES CALLED -  SBYTE - STORE BYTE(S). 
*                            SVREG - SAVE/RESTORE REGISTERS.
*                            LSTERR- FORMATS .GT. 100B CONVERSION.
*                            CVTDIS- CONVERT BINARY TO OCTAL DISPLAY. 
*                            CVTHEX- CONVERT BINARY TO HEX DISPLAY. 
*                            CVTDEC- CONVERT BINARY TO DECIMAL DISPLAY. 
*                            UPPU16- UPDATE PPU DISPLAY WHEN 16BIT
*                                    IS PRESENT IN MODULE+5.
* 
* 
*         DATA AREAS USED -  K/L    - K/L DISPLAY BUFFER AREA.
*                            FRUN   - PPU RUNNING FLAG. 
*                            FDIS   - DISPLAY TYPE BEING DISPLAYED. 
*                            DB     - DISPLAY BUFFER DATA FROM PPU. 
*                            PB     - PLOT BUFFER DATA FROM PPU.
*                            MODULE - MODULE BUFFER.
*                            FORMAT - FORMAT STATEMENTS.
*                            MSGBUF - TEMPORARY STORAGE FOR LINE 50B. 
* 
*         USES   A - 1, 2, 3, 4, 6, 7.
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 1, 2, 3, 4, 5, 6, 7. 
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- INITIALIZE POINTERS AND CONSTANTS, CLEAR DISPLAY
*                   IF NEEDED THEN STEP 2.
* 
 UPPU     DATA   0           ENTRY/EXIT 
          SA1    MODULE+5    GET 16BIT FLAG 
          LX1    59-12
          PL     X1,UPP0     IF NOT 16-BIT
          RJ     UPPU16      IF 16-BIT MALET
          EQ     UPPU        RETURN 
  
 UPP0     SA1    FRUN 
          NZ     X1,UPP1     IF PPU RUNNING 
  
          SA1    FDIS 
          SX1    X1-DPPU
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          ZR     X1,UPP1     IF PPU DISPLAY 
          SX1    X1-6        CHECK SECOND PART OF PPU 
          ENDIF 
          NZ     X1,UPP31    IF NOT PPU DISPLAY 
  
 UPP1     SA1    AA-1 
          MX5    -24
          BX1    -X5*X1 
          SA2    BLANKS      (X2) = BBBB BBBB BBBB BBBB BBBB
          BX6    -X5*X2 
          BX1    X1-X6
          ZR     X1,UPP3     IF DISPLAY BUFFER DOES NOT NEED CLEARED
          SA1    FDIS 
          SX1    X1-DPPU
          NZ     X1,UPP3     IF PPU DISPLAY NOT UP
  
          SB2    END0 
          SB3    KLMSG-1
          BX6    -X5*X2      (X6) = 0000 0000 0000 BBBB BBBB
 UPP2     SA1    B2          GET COORDINATE WORD
          BX7    X5*X1
          BX7    X7+X6       .OR. BLANKS INTO COORDINATE WORD 
          SA7    A1 
          SB2    B2+7        ADVANCE TO NEXT COORDINATE WORD
          LE     B2,B3,UPP2  IF NOT DONE WITH LINE NUMBER DATA
  
 UPP3     SB2    UPPBUF 
          SB4    DB          (B4) = ADDRESS IN DISPLAY BUFFER 
          SB5    DB+120      (B5) = LAST DB ADDRESS 
  
          SA1    FDIS 
          SX1    X1-DPPU
          ZR     X1,UPP5     IF PPU DISPLAY IS UP 
  
 UPP4     SB2    UPKL 
          SB4    DB+120 
  
**        STEP -02- GET LINE SEE IF ENTRY PRESENT IF NOT THEN STEP 3, 
*                   ELSE STORE FORMAT INTO DISPLAY THEN CHECK IF FORMAT 
*                   GREATER THAN 100 IF YES THEN STEP 3, ELSE STEP 4. 
* 
 UPP5     SA1    B4          (X1) = ENTRY LINE 1
          ZR     X1,UPP18    IF NO ENTRY PRESENT
          MX5    12          (X5) = 12 BIT MASK BITS 59-47
          BX4    X5*X1
          SA2    A1+B1       (X2) = ENTRY LINE 2
          BX6    X5*X2
          SA3    A2+B1       (X3) = ENTRY LINE 3
          BX7    X5*X3
          BX4    X4-X6
          BX7    X6-X7
          BX4    X4-X7
          NZ     X4,UPP18    IF ENTRY NUMBERS DONT MATCH SKIP ENTRY 
          EQ     B4,B5,UPP5A IF LINE 50 BEING PROCESSED 
          MX7    0
          SA7    A1          CLEAR ENTRY AFTER PROCESSING 
 UPP5A    LX1    59-47       POSITION FORMAT TO UPPER 12 BITS 
          BX7    X5*X1
          LX7    12          (X7) = FORMAT STATEMENT NUMBER 
          SX4    X7-100B
          NG     X4,UPP6     IF FORMAT STATEMENT .LT.100B 
  
**        STEP -03- POST FORMATS GT 100 USING EMB BUFFER THEN STEP 6. 
* 
          SB1    B0 
          RJ     SVREG       SAVE REGISTERS 
          SB3    B2          (B3) = ADDRESS TO STORE DATA 
          SB5    B4+1        (B5) = ADDRESS OF DATA 
          RJ     LSTERR 
          RJ     SVREG       RESTORE REGISTERS
          EQ     UPP18
  
**        STEP -04- FIND FORMAT IN MODULE BUFFER IF NOT FOUND THEN
*                   STEP 6, ELSE MOVE FORMAT TO DISPLAY BUFFER THEN 
*                   CHECK IF SUBSTITUTIONS NECESSARY IF NO THEN 
*                   STEP 6, ELSE STEP 5.
* 
 UPP6     LX1    59-47
          MX5    12          (X5) = 12 BIT MASK BITS 59-47
          BX6    X5*X1
          LX6    59-47
          SB7    X6          (B7) = NUMBER OF SUBSTITUTIONS 
          SA4    MODULE+3 
          LX4    59-47
          BX4    X5*X4
          LX4    59-47
          SB6    FORMAT+X4   (B6) = LAST WORD OF FORMAT BLOCK 
          SA4    FORMAT      GET FIRST FORMAT STATEMENT 
          MX5    8           (X5) = 8 BIT MASK BITS 59-52 
 UPP7     BX6    X5*X4
          LX6    8
          BX6    X6-X7
          ZR     X6,UPP8     IF  MATCH FOUND GO XFER FORMAT 
          SA4    A4+7        GET NEXT FORMAT STATEMENT
          SB3    A4          (B7) = ADDRESS OF CURRENT FORMAT ENTRY 
          LT     B3,B6,UPP7  IF NOT THRU FORMAT BUFFER YET
          EQ     UPP18       NO MATCH FOUND 
  
 UPP8     BX6    X4          GET FIRST WORD OF DATA 
          SA6    UPPA        STORE FORMAT CONTROL WD-1
          SA4    A4+B1
          BX6    X4 
          SA6    UPPB        STORE FORMAT CONTROL WD-2
          SA4    A4+B1       GET FIRST WORD OF DATA 
          SB6    B2 
          SB3    5
 UPP9     BX6    X4 
          SA6    B6 
          SB6    B6+B1
          SA4    A4+B1
          SB3    B3-B1
          NZ     B3,UPP9     IF 5 WORDS  NOT DONE 
          ZR     B7,UPP18 
  
**        STEP -05- PERFORM SUBSTITUTIONS INTO DISPLAY THEN STEP 6. 
* 
          SB1    0
          RJ     SVREG       SAVE REGISTERS 
          BX7    X2 
          SA7    UPPC        (UPPC) = SUBSTITUTION CHAR WD-2
          BX7    X3 
          SA7    UPPD        (UPPD) = SUBSTITUTION CHAR WD-3
          SB6    8           (B6) = SHIFT COUNT TO GET BY FMT NO. 
          MX7    0
          SA7    UPPE        (UPPE) = SHIFT COUNT FOR BYTE NO.
          SX7    UPPA 
          SA7    UPPF        (UPPF) = CURRENT CONTROL WORD ADDRESS
          SX7    B7 
          SX1    X7-8 
          NG     X1,UPP10    IF LESS THAN 8 SUBSTITUTIONS 
          SX7    8           SET NUMBER OF SUBSTITUTIONS TO 8 
 UPP10    SA7    UPPG        (UPPG) = NUMBER OF SUBSTITUTIONS 
          SA1    UPPE        GET WORD SHIFT COUNT 
          SB7    X1+B6       (B7) = SHIFT COUNT 
          SB6    13 
          SX7    B7 
          SA7    A1          RESTORE UPDATED SHIFT COUNT
          SX7    X7-60
          NZ     X7,UPP11    IF NOT A SHIFT COUNT OF 60 
          SX7    UPPB 
          SA7    UPPF        (PDIF) = CURRENT CONTROL WORD ADDRESS
          SB7    8
          SX7    B7 
          SA7    A1          RESET SHIFT COUNT
 UPP11    SA1    UPPF 
          SA1    X1          GET CONTROL WORD 
          LX1    B7 
          MX5    13 
          BX1    X5*X1       CLEAR ALL BUT OUR CONTROL BYTE 
          ZR     X1,UPP17    IF CONTROL WORD ZERO 
          MX5    3
          BX6    X5*X1
          LX6    3
          SA2    SVRB2       GET B2 DESTINATION OF DATA IN DISPLAY
          SB6    X2 
          SB6    X6+B6       (B6)= WORD IN MESSAGE
          MX5    6
          LX1    3
          BX6    X5*X1
          LX6    6
          SB3    X6          (B3) = SKIP COUNT TO POSITION DATA 
          LX1    6
          MX5    4
          BX6    X5*X1
          LX6    4
          SB4    X6          (B4) = CONVERT CODE
          SA2    UPPF 
          SA2    X2+2        GET SUBSTITUTION WORD
          LX2    12 
          BX6    X2 
          SA6    A2          SAVE SHIFTED SUBSTITUTION WORD 
          MX5    12 
          BX1    X5*X2       GET FIRST SUBSTITUTION PARAMETER 
          LX1    59-47       POSITION TO LOWER 12 BITS
          ZR     B4,UPP17    IF CONTROL WORD IS ZERO
          SB5    B4-4 
          PL     B5,UPP13    IF NOT OCTAL SUBSTITUTION
          SB4    24          (B4) = NUMBER OF STORE BITS
 UPP12    SB5    B5+B1
          ZR     B5,UPP12A   IF NUMBER OF BITS FOUND
          SB4    B4-6 
          EQ     UPP12       LOOP 
  
 UPP12A   RJ     CVTDIS 
          EQ     UPP16
  
 UPP13    SB5    B4-6 
          NZ     B5,UPP14    IF NOT 2 HEX CHARACTERS
          SB2    2
          RJ     CVTHEX 
          SB4    12 
          EQ     UPP16
  
 UPP14    SB5    B4-7 
          NZ     B5,UPP15    IF NOT THREE HEX CHARACTERS
          SB2    3
          RJ     CVTHEX 
          SB4    18 
          EQ     UPP16
  
 UPP15    SB5    B4-10
          NG     B5,UPP17    IF ILLEGAL CONTROL WORD
          SB5    B4-13
          PL     B5,UPP15C   IF NOT DECIMAL 
          SB4    24 
 UPP15A   SB5    B5+B1
          ZR     B5,UPP15B    IF NUMBER OF CHARACTERS FOUND 
          SB4    B4-6 
          EQ     UPP15A      LOOP TO SET NUMBER OF BITS FOR STORE 
  
 UPP15B   RJ     CVTDEC      CONVERT TO DECIMAL 
          EQ     UPP16
  
 UPP15C   SB5    B4-15
          NZ     B5,UPP17    IF NOT ALPHA SUBSTITUTION
          SB4    12          (B4) = NUMBER OF BITS TO STORE 
          MX5    6
          LX1    48          POSITION FIRST CH TO UPPER 6 BITS
          BX7    X5*X1       EXTRACT UPPER CHARACTER
          LX7    6
          NZ     X7,UPP15D   IF NON-ZERO CHAR 
          SX7    1R 
          LX7    54 
          BX1    -X5*X1 
          BX1    X1+X7       FORCE BLANK FOR ZERO CHAR
 UPP15D   SX7    X7-60B 
          NG     X7,UPP15E   IF CHAR LT 60B 
          SX7    1R 
          BX1    -X5*X1 
          LX7    54 
          BX1    X1+X7       FORCE BLANKS FOR GE 60B CHAR 
 UPP15E   LX1    6
          BX7    X5*X1
          LX7    6           MOVE CHARACTER TO LOWER POSITION 
          NZ     X7,UPP16F   IF NON-ZERO CHAR 
          SX7    1R 
          LX7    54 
          BX1    -X5*X1 
          BX1    X7+X1       FORCE BLANK FOR ZERO CHAR
 UPP16F   SX7    X7-60B 
          NG     X7,UPP15G
          SX7    1R 
          LX7    54 
          BX1    -X5*X1 
          BX1    X1+X7       FORCE BLANK FOR GE 60B CHAR
 UPP15G   LX1    6
          BX7    X1          MOVE ALPHA CHARACTERS
 UPP16    SA7    UPPH        STORE CONVERTED DATA 
          SB1    B6          (B1) = DESTINATION 
          SB2    UPPH        (B2) = SOURCE
          SB5    B0          (B5) = SKIP BITS FOR NEXT WORD 
          SB6    B0          (B6) = NUMBER OF BYTES TO DO -1
          RJ     SBYTE       GO STORE CHARACTERS
 UPP16A   SA1    UPPG        GET NUMBER OF SUBSTITUTIONS
          SX7    X1-1 
          SB6    13          NUMBER OF BITS TO SKIP 
          NZ     X7,UPP10    IF ALL SUBSTITUTIONS NOT DONE YET
 UPP17    RJ     SVREG       RESTORE REGISTERS
  
**        STEP -06- INCREMENT ADDRESSES IF DONE THEN STEP 7,ELSE
*                   STEP 2. 
* 
 UPP18    SB4    B4+3        INCREMENT DB ADRES 
          SB2    B2+6        INCREMENT PPU BUFFER ADDRESS 
          LT     B4,B5,UPP5  IF NOT DONE WITH DB
          SX1    WDB
          BX1    -X1
          SX1    X1+B4
          NZ     X1,UPP5     PROCESS LINE 50 TO UPPBUF
  
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          EQ     UPP32        SET NEW DISPLAY 
          ENDIF 
          SA1    FDIS 
          SX1    X1-DPPU
          NZ     X1,UPP19    IF NOT PPU DISPLAY 
          SB2    AA 
          SB3    UPPBUF 
          SB4    KLMSG-1
 UPP18B   SB5    5
 UPP18C   SA1    B3+B5       GET DATA 
          BX6    X1 
          SA6    B2+B5       STORE DATA INTO DISPLAY
          SB5    B5-1        DECREMENT INDEX
          PL     B5,UPP18C   IF NOT 6 WORDS MOVED 
          SB2    B2+7        SKIP TO NEXT SOURCE LINE 
          SB3    B3+6        SKIP TO NEXT LINE
          LT     B2,B4,UPP18B IF NOT COMPLETE 
  
**        STEP -07- CHECK IF DISPLAY TYPE IS PPU IF NOT THEN STEP 9,
*                   ELSE CHECK IF LINE 50 UPDATE ONLY IF YES THEN 
*                   THEN STEP 9, ELSE UPDATE DISPLAY WITH PLOT DATA 
*                   THEN STEP 8.
* 
 UPP19    SB2    AA          (B2) = STORE CHARACTER ADDRESS 
          SB4    PB          (B4) = ADDRESS IN PLOT BUFFER
          SB5    PB+40       (B5) = LAST PB LINE + 1
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          EQ     UPP35       RESET POINTERS 
          ENDIF 
          SA1    FDIS 
          SX1    X1-DPPU
          NZ     X1,UPP27    IF NO PPU DISPLAY BY-PASS PLOT BUFFER
 UPP20    SB6    6           NUMBER OF SOURCE WORDS PER LINE
          SB3    59-5        (B3) = SHIFT COUNT 
          SA1    B4 
          NZ     X1,UPP21    IF PLOT PRESENT ON THIS LINE 
          NG     X1,UPP21    IF PLOT PRESENT ON THIS LINE ALL BITS
          SB2    B2+7        ADVANCE STORE
          EQ     UPP23
  
 UPP21    PL     X1,UPP22    IF NO PLOT THIS POSITION 
          SX7    1R*         PLOT CHARACTER = * 
          LX7    B3          POSITION CHARACTER 
          MX5    54          PLOT CHARACTER MASK
          LX5    B3          POSITION MASK
          SA2    B2 
          BX6    X5*X2
          BX6    X6+X7
          SA6    B2          STORE PLOT 
 UPP22    LX1    1           POSTION TO NEXT PLOT 
          SB3    B3-6        DECREMENT SHIFT
          PL     B3,UPP21    IF 10 BITS NOT DONE YET
          SB3    59-5 
          SB2    B2+B1       INCREMENT DISPLAY ADDRESS
          SB6    B6-B1
          NZ     B6,UPP21    IF 6 SOURCE WORDS NOT MOVED
          SB2    B2+B1       SKIP COORDINATE WORD 
 UPP23    SB4    B4+B1       ADVANCE PB ADDRESS 
          NE     B5,B4,UPP20 IF PB BUFFER NOT DONE
  
**        STEP -09- MOVE LINE 50 DISPLAY DATA TO MSGBUF IF NOT DISPLAY
*                   DATA THEN STEP 10, ELSE MOVE LINE 50 TO K/L DISPLAY 
*                   THEN STEP 10. 
* 
 UPP27    SB3    B0 
          SB2    B0 
          SA2    BLANKS 
          SA1    DB+120 
          AX1    12 
          MX5    -12
          BX1    -X5*X1 
          SX1    X1-50B 
          ZR     X1,UPP28    IF DISPLAY ENTRY 
          SX5    SUB.DIS
          BX1    X5*X1
          ZR     X1,UPP31    IF DISPLAY BIT NOT ON
 UPP28    SA1    UPKL+B2     GET LINE 50 DATA 
          BX6    X1 
          SA6    MSGBUF+B2   STORE K/L LINE INTO MSG BUFFER 
          BX6    X6-X2
          ZR     X6,UPP29    IF BLANK 
          SB3    B3+B1       FLAG NON BLANK WORD FOUND
 UPP29    SB2    B2+B1       ADVANCE INDEX
          SX6    B2-5 
          NZ     X6,UPP28    IF FIVE WORDS NOT DONE YET 
          NZ     B3,UPP29A   IF NON BLANK ENTRY PRESENT 
          SA2    DB+120 
          ZR     X2,UPP31    IF LINE 50 HAS NO DATA PRESENT 
 UPP29A   MX6    0
          SA6    B2+MSGBUF   ZERO LAST WORD 
          SB2    4
 UPP30    SA1    MSGBUF+B2   GET KLMSG WORD 
          BX6    X1 
          SA6    KLMSG+B2    STORE KLMSG WORD 
          SB2    B2-B1
          PL     B2,UPP30    IF SIX WORDS NOT MOVED TO KLMSG
  
          MESSAGE MSGBUF,2,R POST MESSAGE ON B DISPLAY
  
**        STEP -10- RETURN. 
* 
 UPP31    EQ     UPPU        RETURN 
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
  
**        THESE ROUTINES ARE FOR 721 SUPPORT. 
* 
*         THEY DO THE SAME AS THE STEPS ORIGINALLY INDICATED
*         ONLY FORMAT 23 DECIMAL LINES INSTEAD OF 41 DECIMAL
*         LINES.
 UPP32    SA1    FDIS 
          SX1    X1-DPPU
          ZR     X1,UPP33    IF PPU DISPLAY 
          SX1    X1-6 
          ZR     X1,UPP34    IF SECOND PART OF PPU
          EQ     UPP19       NOT PPU DISPLAY
  
 UPP33    SB2    AA          (B2) = DISPLAY ADDRESS 
          SB3    UPPBUF      (B3) = PPU BUFFER ADDRESS
          SB4    KLMSG-1B    LINE 20 OF DISPLAY 
          EQ     UPP18B      CONTINUE 
  
 UPP34    SB2    AA 
          SB3    UPPBUF+120  FIRST ADDRESS OF SECOND PART 
          SB4    KLMSG-1B 
          EQ     UPP18B      CONTINUE 
  
 UPP35    SA1    FDIS 
          SX1    X1-DPPU
          ZR     X1,UPP36    IF FIRST PPU DISPLAY 
          SX1    X1-6 
          NZ     X1,UPP27    IF NOT PPU DISPLAY BY-PASS PLOT
          SB2    AA          (B2) = STORE CHARACTER ADDRESS 
          SB4    PB+20       (B4) = ADDRESS IN PLOT BUFFER
          SB5    PB+40       (B5) = LAST PB LINE + 1
          EQ     UPP20       CONTINUE 
  
 UPP36    SB2    AA          (B2) = STORE CHARACTER ADDRESS 
          SB4    PB          (B4) = ADDRESS IN PLOT BUFFER
          SB5    PB+20       (B5) = LAST PB LINE + 1
          EQ     UPP20       CONTINUE 
          ENDIF 
  
 UPPA     DATA   0           CONTROL WORD 1 
 UPPB     DATA   0           CONTROL WORD 2 
 UPPC     DATA   0           SUBSTITUTION WORD 2
 UPPD     DATA   0           SUBSTITUTION WORD 3
 UPPE     DATA   0           SHIFT COUNT
 UPPF     DATA   0           CURRENT SUBSTITUTION WORD WORKING  WITH
 UPPG     DATA   0           NUMBER OF SUBSTITUTIONS
 UPPH     DATA   0           SUBSTITUTION CONVERTED VALUE 
          EJECT 
 UPPU16   TITLE  UPPU16 - UPDATE PPU DISPLAY USING BUFFERS DB AND PB. 
**        UPPU16 - UPDATE PPU DISPLAY USING BUFFERS DB AND PB.
* 
*         G. L. GOLDEN. 76/12/08. 
*         M. S. FABBRINI. 82/10/07.     ADAPTED FOR 16-BIT MALET USE. 
* 
*         ENTRY  (FDIS)     = DISPLAY TYPE CURRENTLY DISPLAYED. 
*                (FKL)      = FLAG FOR K/L DISPLAY ACTIVE.
*                (FL50)     = 1  UPDATE LINE 50 ONLY. 
*                (MODULE+4) = FORMAT BLOCK LENGTH BITS 47-36
* 
* 
*                DISPLAY BUFFER DATA IN 16-BIT FORMAT.
*                                              ****** 
*                (DB+X+0)-UUUU NNNNNN AAAAAA BBBCCC * 
*                (DB+X+1)-UUUU DDDDDD EEEEEE FFFFFF ** FOUR WORDS PER 
*                (DB+X+2)-UUUU GGGGGG HHHHHH IIIIII *  LINE FOR 51 OCT
*                (DB+X+3)-UUUU JJJJJJ KKKKKK NNNNNN *  LINES. 
*                                              ****** 
*                   DB   = DISPLAY BUFFER.
*                   X    = CURRENT LINE DATA IS FOR TIMES 4.
*                   UUUU = UNUSED 
*                 NNNNNN = CURRENT MESSAGE NUMBER. (INCREMENTED BY PPU) 
*                 AAAAAA = FORMAT STATEMENT NUMBER.   2**31 - 2**16 
*                    BBB = NUMBER OF SUBSTITUTIONS.   2**15 - 2**8
*                    CCC = LINE NUMBER TO POST DATA.  2**7  - 2**0
*                 DDDDDD = SUBSTITUTION WORD 1   BITS 2**47 - 2**32 
*                 EEEEEE = SUBSTITUTION WORD 2   BITS 2**31 - 2**16 
*                 FFFFFF = SUBSTITUTION WORD 3   BITS 2**15 - 2**0
*                 GGGGGG = SUBSTITUTION WORD 4   BITS 2**47 - 2**32 
*                 HHHHHH = SUBSTITUTION WORD 5   BITS 2**31 - 2**16 
*                 IIIIII = SUBSTITUTION WORD 6   BITS 2**15 - 2**0
*                 JJJJJJ = SUBSTITUTION WORD 7   BITS 2**47 - 2**32 
*                 KKKKKK = SUBSTITUTION WORD 8   BITS 2**31 - 2**16 
* 
* 
*                PLOT BUFFER DATA FORMAT. 
* 
*                (PB+X) = ZZZZZZZZZZZZZZZZZZB 
* 
*                WHERE X = THE LINE NUMBER TO PLOT INFORMATION. 
*                      Z = CHARACTER LOCATION TO PLOT CHARACTER.
* 
*                          BIT 59 = CHARACTER POSITION 01.
*                          BIT 58 = CHARACTER POSITION 02.
*                          BIT 57 = CHARACTER POSITION 03.
*                           .  .  .  . . . .  . . . .  .. 
*                           .  .  .  . . . .  . . . .  .. 
* 
*                          BIT 02 = CHARACTER POSITION 58.
*                          BIT 01 = CHARACTER POSITION 59.
*                          BIT 00 = CHARACTER POSITION 60.
* 
*         EXIT   K/L DISPLAY UPDATED. 
* 
* 
*         ROUTINES CALLED -  SBYTE - STORE BYTE(S). 
*                            SVREG - SAVE/RESTORE REGISTERS.
*                            LSTERR- FORMATS .GT. 100B CONVERSION.
*                            CVTDIS- CONVERT BINARY TO OCTAL DISPLAY. 
*                            CVTHEX- CONVERT BINARY TO HEX DISPLAY. 
*                            CVTDECI CONVERT BINARY TO DECIMAL DISPLAY. 
* 
* 
*         DATA AREAS USED -  K/L    - K/L DISPLAY BUFFER AREA.
*                            FRUN   - PPU RUNNING FLAG. 
*                            FDIS   - DISPLAY TYPE BEING DISPLAYED. 
*                            DB     - DISPLAY BUFFER DATA FROM PPU. 
*                            PB     - PLOT BUFFER DATA FROM PPU.
*                            MODULE - MODULE BUFFER.
*                            FORMAT - FORMAT STATEMENTS.
*                            MSGBUF - TEMPORARY STORAGE FOR LINE 50B. 
* 
*         USES   A - 1, 2, 3, 4, 6, 7.
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 1, 2, 3, 4, 5, 6, 7. 
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- INITIALIZE POINTERS AND CONSTANTS, CLEAR DISPLAY
*                   IF NEEDED THEN STEP 2.
* 
 UPPU16   DATA   0           ENTRY/EXIT 
          SA1    FRUN 
          NZ     X1,UPU16A   IF PPU RUNNING 
  
          SA1    FDIS 
          SX1    X1-DPPU
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          ZR     X1,UPU16A   IF PPU DISPLAY 
          SX1    X1-6        CHECK SECOND PART OF PPU 
          ENDIF 
          NZ     X1,UPP16AB  IF NOT PPU DISPLAY 
  
 UPU16A   SA1    AA-1 
          MX5    -24
          BX1    -X5*X1 
          SA2    BLANKS      (X2) = BBBB BBBB BBBB BBBB BBBB
          BX6    -X5*X2 
          BX1    X1-X6
          ZR     X1,UPP16C    IF DISPLAY BUFFER DOES NOT NEED CLEARED 
          SA1    FDIS 
          SX1    X1-DPPU
          NZ     X1,UPP16C   IF PPU DISPLAY NOT UP
  
          SB2    END0 
          SB3    KLMSG-1
          BX6    -X5*X2      (X6) = 0000 0000 0000 BBBB BBBB
 UPP16B   SA1    B2          GET COORDINATE WORD
          BX7    X5*X1
          BX7    X7+X6       .OR. BLANKS INTO COORDINATE WORD 
          SA7    A1 
          SB2    B2+7        ADVANCE TO NEXT COORDINATE WORD
          LE     B2,B3,UPP16B  IF NOT DONE WITH LINE NUMBER DATA
  
 UPP16C   SB2    UPPBUF 
          SB4    DB          (B4) = ADDRESS IN DISPLAY BUFFER 
          SB5    DB+160      (B5) = LAST DB ADDRESS 
          SA1    FDIS 
          SX1    X1-DPPU
          ZR     X1,UPP16E    IF PPU DISPLAY IS UP
  
 UPP16D   SB2    UPKL 
          SB4    DB+160 
  
**        STEP -02- GET LINE SEE IF ENTRY PRESENT IF NOT THEN STEP 3, 
*                   ELSE STORE FORMAT INTO DISPLAY THEN CHECK IF FORMAT 
*                   GREATER THAN 100 IF YES THEN STEP 3, ELSE STEP 4. 
* 
 UPP16E   SA1    B4          (X1) = ENTRY LINE 1
          ZR     X1,UPP16R   IF NO ENTRY PRESENT
          SA2    A1+B1       (X2) = ENTRY LINE 2
          SA3    A2+B1       (X3) = ENTRY LINE 3
          SA4    A3+B1       (X4) = ENTRY LINE 4
          BX6    X4 
          SA6    ENT4        ENT4 = ENTRY LINE 4
          LX1    12 
          MX5    16 
          BX4    X5*X1
          LX4    4
          MX7    -12
          BX6    -X7*X6 
          LX6    59-11        POSITION TO UPPER 12
          BX4    X4-X6
          NZ     X4,UPP16R   IF ENTRY NUMBERS DONT MATCH SKIP ENTRY 
          EQ     B4,B5,UPP16E1  IF LINE 50 BEING PROCESSED
          MX7    0
          SA7    A1          CLEAR ENTRY AFTER PROCESSING 
 UPP16E1  LX1    59-43       POSITION FORMAT TO UPPER 16 BITS 
          BX7    X5*X1
          LX7    16          (X7) = FORMAT STATEMENT NUMBER 
          SX4    X7-100B
          NG     X4,UPU16F   IF FORMAT STATEMENT .LT.100B 
  
**        STEP -03- POST FORMATS GT 100 USING EMB BUFFER THEN STEP 6. 
* 
          SB1    B0 
          RJ     SVREG       SAVE REGISTERS 
          SB3    B2          (B3) = ADDRESS TO STORE DATA 
          SB5    B4+1        (B5) = ADDRESS OF DATA 
          RJ     LSTERR 
          RJ     SVREG       RESTORE REGISTERS
          EQ     UPP16R 
  
**        STEP -04- FIND FORMAT IN MODULE BUFFER IF NOT FOUND THEN
*                   STEP 6, ELSE MOVE FORMAT TO DISPLAY BUFFER THEN 
*                   CHECK IF SUBSTITUTIONS NECESSARY IF NO THEN 
*                   STEP 6, ELSE STEP 5.
* 
 UPU16F   LX1    59-43       POSITION SUBSTITUTIONS TO UPPER 16 
          MX5    8           (X5) = 8 BIT MASK BITS 59-51 
          BX6    X5*X1
          LX6    59-51
          SB7    X6          (B7) = NUMBER OF SUBSTITUTIONS 
          SA4    MODULE+3 
          LX4    59-47
          MX5    12 
          BX4    X5*X4
          LX4    59-47
          SB6    FORMAT+X4   (B6) = LAST WORD OF FORMAT BLOCK 
          SA4    FORMAT      GET FIRST FORMAT STATEMENT 
          MX5    8           (X5) = 8 BIT MASK BITS 59-52 
 UPP16G   BX6    X5*X4
          LX6    8
          BX6    X6-X7
          ZR     X6,UPP16H   IF  MATCH FOUND GO XFER FORMAT 
          SA4    A4+7        GET NEXT FORMAT STATEMENT
          SB3    A4          (B3) = ADDRESS OF CURRENT FORMAT ENTRY 
          LT     B3,B6,UPP16G  IF NOT THRU FORMAT BUFFER YET
          EQ     UPP16R       NO MATCH FOUND
  
 UPP16H   BX6    X4           GET FIRST WORD OF DATA
          SA6    UPP16AC      STORE FORMAT CONTROL WD-1 
          SA4    A4+B1
          BX6    X4 
          SA6    UPP16AD      STORE FORMAT CONTROL WD-2 
          SA4    A4+B1        GET FIRST WORD OF DATA
          SB6    B2 
          SB3    5
 UPP16I   BX6    X4 
          SA6    B6 
          SB6    B6+B1
          SA4    A4+B1
          SB3    B3-B1
          NZ     B3,UPP16I    IF 5 WORDS  NOT DONE
          ZR     B7,UPP16R
  
**        STEP -05- PERFORM SUBSTITUTIONS INTO DISPLAY THEN STEP 6. 
* 
          SB1    0
          RJ     SVREG       SAVE REGISTERS 
          LX2    12 
          MX7    32 
          BX7    X7*X2
          SA7    UPP16AC1    SUBSTITUTION WORD BYTES DDDDDD EEEEEE
          LX2    32 
          MX5    16 
          BX7    X5*X2
          LX3    12 
          BX5    X5*X3
          LX5    59-15
          BX7    X7+X5
          SA7    UPP16AC2    SUBSTITUTION WORD BYTES FFFFFF GGGGGG
          LX3    16 
          MX7    32 
          BX7    X7*X3
          SA7    UPP16AD1    SUBSTITUTION WORD BYTES HHHHHH IIIIII
          SA1    ENT4 
          LX1    12 
          MX7    32 
          BX7    X7*X1
          SA7    UPP16AD2    SUBSTITUTION WORD BYTES JJJJJJ KKKKKK
          SB6    8           (B6) = SHIFT COUNT TO GET BY FMT NO. 
          MX7    0
          SA7    UPP16AG     (UPP16AG) = SHIFT COUNT FOR BYTE NO. 
          SX7    UPP16AC
          SA7    UPP16AH     (UPP16AH) = CURRENT CONTROL WORD ADDRESS 
          SX7    B7 
          SX1    X7-8 
          NG     X1,UPP16J   IF LESS THAN 8 SUBSTITUTIONS 
          SX7    8           SET NUMBER OF SUBSTITUTIONS TO 8 
 UPP16J   SA7    UPP16AI     (UPP16AI) = NUMBER OF SUBSTITUTIONS
          SA1    UPP16AG     GET WORD SHIFT COUNT 
          SB7    X1+B6       (B7) = SHIFT COUNT 
          SB6    13 
          SX7    B7 
          SA7    A1          RESTORE UPDATED SHIFT COUNT
          SX7    X7-60
          NZ     X7,UPP16K   IF NOT A SHIFT COUNT OF 60 
          SX7    UPP16AD
          SA7    UPP16AH     (PDIF) = CURRENT CONTROL WORD ADDRESS
          SB7    8
          SX7    B7 
          SA7    A1          RESET SHIFT COUNT
 UPP16K   SA1    UPP16AH
          SA1    X1          GET CONTROL WORD 
          LX1    B7 
          MX5    13 
          BX1    X5*X1       CLEAR ALL BUT OUR CONTROL BYTE 
          ZR     X1,UPP16Q   IF CONTROL WORD ZERO 
          MX5    3
          BX6    X5*X1
          LX6    3
          SA2    SVRB2       GET B2 DESTINATION OF DATA IN DISPLAY
          SB6    X2 
          SB6    X6+B6       (B6)= WORD IN MESSAGE
          MX5    6
          LX1    3
          BX6    X5*X1
          LX6    6
          SB3    X6          (B3) = SKIP COUNT TO POSITION DATA 
          LX1    6
          MX5    4
          BX6    X5*X1
          LX6    4
          SB4    X6          (B4) = CONVERT CODE
          SA2    UPP16AH
          SB4    34          CONTROL WORD PARAMETER WORD 3
          LT     B7,B4,UPP16K1   IF NOT PARAMETER WORD 3
          SX2    X2+1        BUMP ADDRESS 
 UPP16K1  SB4    X6          RESTORE B4 
          SA2    X2+1        GET SUBSTITUTION WORD
          BX6    X2 
          LX6    16          POSITION FOR NEXT SUBSTITUTION 
          SA6    A2          SAVE SHIFTED SUBSTITUTION WORD 
          MX5    16 
          BX1    X5*X2       GET FIRST SUBSTITUTION PARAMETER 
          LX1    59-43       POSITION TO LOWER 16 BITS
          ZR     B4,UPP16Q   IF CONTROL WORD IS ZERO
          SB5    B4-6        6 CHARACTER OCTAL
          PL     B5,UPP16M   IF NOT OCTAL SUBSTITUTION
          SB4    36          (B4) = NUMBER OF STORE BITS
 UPP16L   SB5    B5+B1
          ZR     B5,UPP16L1  IF NUMBER OF BITS FOUND
          SB4    B4-6 
          EQ     UPP16L      LOOP 
  
 UPP16L1  RJ     CVTDIS      CONVERT BINARY TO OCTAL DISPLAY
          EQ     UPP16P 
  
 UPP16M   SB5    B4-6 
          NZ     B5,UPP16N   IF NOT 2 HEX CHARACTERS
          SB2    2           2 CHARACTER HEX
          RJ     CVTHEX      CONVERT BINARY TO HEX DISPLAY
          SB4    12          (B4) = NUMBER OF BITS TO STORE 
          EQ     UPP16P 
  
 UPP16N   SB5    B4-7 
          NZ     B5,UPP16N1  IF NOT THREE HEX CHARACTERS
          SB2    3           3 CHARACTER HEX
          RJ     CVTHEX      CONVERT BINARY TO HEX DISPLAY
          SB4    18          (B4) = NUMBER OF BITS TO STORE 
          EQ     UPP16P 
  
 UPP16N1  SB5    B4-8 
          NZ     B5,UPP16O   IF NOT FOUR HEX CHARACTERS 
          SB2    4           4 CHARACTER HEX
          RJ     CVTHEX      CONVERT BINARY TO HEX DISPLAY
          SB4    24          (B4) = NUMBER OF BITS TO STORE 
          EQ     UPP16P 
  
 UPP16O   SB5    B4-10
          NG     B5,UPP16Q   IF ILLEGAL CONTROL WORD
          SB5    B4-14       5 CHARACTER DECIMAL
          PL     B5,UPP16O3  IF NOT DECIMAL 
          SB4    30          (B4) = NUMBER OF BITS TO STORE 
 UPP16O1  SB5    B5+B1
          ZR     B5,UPP16O2  IF NUMBER OF BITS FOUND
          SB4    B4-6 
          EQ     UPP16O1     LOOP TO SET NUMBER OF BITS FOR STORE 
  
 UPP16O2  RJ     CVTDECI     CONVERT BINARY TO DECIMAL DISPLAY
          EQ     UPP16P 
  
 UPP16O3  SB5    B4-15
          NZ     B5,UPP16Q   IF ILLEGAL CONTROL WORD
          SB4    12          (B4) = NUMBER OF BITS TO STORE 
          MX5    6
          LX1    48          POSITION FIRST CH TO UPPER 6 BITS
          BX7    X5*X1       EXTRACT UPPER CHARACTER
          LX7    6
          NZ     X7,UPP16O4  IF NON-ZERO CHAR 
          SX7    1R          BLANK
          LX7    54 
          BX1    -X5*X1      CLEAR CHARACTER
          BX1    X1+X7       FORCE BLANK FOR ZERO CHAR
 UPP16O4  SX7    X7-60B 
          NG     X7,UPP16O5  IF CHAR LT 60B 
          SX7    1R          BLANK
          BX1    -X5*X1      CLEAR CHARACTER
          LX7    54 
          BX1    X1+X7       FORCE BLANKS FOR GE 60B CHAR 
 UPP16O5  LX1    6
          BX7    X5*X1
          LX7    6           MOVE CHARACTER TO LOWER POSITION 
          NZ     X7,UPP16O6  IF NON-ZERO CHAR 
          SX7    1R          BLANK
          LX7    54 
          BX1    -X5*X1      CLEAR CHARACTER
          BX1    X7+X1       FORCE BLANK FOR ZERO CHAR
 UPP16O6  SX7    X7-60B 
          NG     X7,UPP16O7 
          SX7    1R          BLANK
          LX7    54 
          BX1    -X5*X1      CLEAR CHARACTER
          BX1    X1+X7       FORCE BLANK FOR GE 60B CHAR
 UPP16O7  LX1    6
          BX7    X1          MOVE ALPHA CHARACTERS
 UPP16P   SA7    UPP16AJ     STORE CONVERTED DATA 
          SB1    B6          (B1) = DESTINATION 
          SB2    UPP16AJ     (B2) = SOURCE
          SB5    B0          (B5) = SKIP BITS FOR NEXT WORD 
          SB6    B0          (B6) = NUMBER OF BYTES TO DO -1
          RJ     SBYTE       GO STORE CHARACTERS
 UPP16P1  SA1    UPP16AI     GET NUMBER OF SUBSTITUTIONS
          SX7    X1-1 
          SB6    13          NUMBER OF BITS TO SKIP 
          NZ     X7,UPP16J   IF ALL SUBSTITUTIONS NOT DONE YET
 UPP16Q   RJ     SVREG       RESTORE REGISTERS
  
**        STEP -06- INCREMENT ADDRESSES IF DONE THEN STEP 7,ELSE
*                   STEP 2. 
* 
 UPP16R   SB4    B4+4        INCREMENT DB ADDRESS BY FOUR WORDS 
          SB2    B2+6        INCREMENT PPU BUFFER ADDRESS 
          LT     B4,B5,UPP16E  IF NOT DONE WITH DB
          SX1    PB 
          BX1    -X1
          SX1    X1+B4
          NZ     X1,UPP16E   PROCESS LINE 50 TO UPPBUF
  
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          EQ     UPP16AK      SET NEW DISPLAY 
          ENDIF 
          SA1    FDIS 
          SX1    X1-DPPU
          NZ     X1,UPP16S  IF NOT PPU DISPLAY
          SB2    AA 
          SB3    UPPBUF 
          SB4    KLMSG-1
 UPP16R1  SB5    5
 UPP16R2  SA1    B3+B5       GET DATA 
          BX6    X1 
          SA6    B2+B5       STORE DATA INTO DISPLAY
          SB5    B5-1        DECREMENT INDEX
          PL     B5,UPP16R2  IF NOT 6 WORDS MOVED 
          SB2    B2+7        SKIP TO NEXT SOURCE LINE 
          SB3    B3+6        SKIP TO NEXT LINE
          LT     B2,B4,UPP16R1 IF NOT COMPLETE
  
**        STEP -07- CHECK IF DISPLAY TYPE IS PPU IF NOT THEN STEP 9,
*                   ELSE CHECK IF LINE 50 UPDATE ONLY IF YES THEN 
*                   THEN STEP 9, ELSE UPDATE DISPLAY WITH PLOT DATA 
*                   THEN STEP 8.
* 
 UPP16S   SB2    AA          (B2) = STORE CHARACTER ADDRESS 
          SB4    PB          (B4) = ADDRESS IN PLOT BUFFER
          SB5    PB+40       (B5) = LAST PB LINE + 1
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          EQ     UPP16AN     RESET POINTERS 
          ENDIF 
          SA1    FDIS 
          SX1    X1-DPPU
          NZ     X1,UPP16X   IF NO PPU DISPLAY BY-PASS PLOT BUFFER
 UPP16T   SB6    6           NUMBER OF SOURCE WORDS PER LINE
          SB3    59-5        (B3) = SHIFT COUNT 
          SA1    B4 
          NZ     X1,UPP16U   IF PLOT PRESENT ON THIS LINE 
          NG     X1,UPP16U   IF PLOT PRESENT ON THIS LINE ALL BITS
          SB2    B2+7        ADVANCE STORE
          EQ     UPP16W 
  
 UPP16U   PL     X1,UPP16V   IF NOPLOT THIS POSITION
          SX7    1R*         PLOT CHARACTER = * 
          LX7    B3          POSITION CHARACTER 
          MX5    54          PLOT CHARACTER MASK
          LX5    B3          POSITION MASK
          SA2    B2 
          BX6    X5*X2
          BX6    X6+X7
          SA6    B2          STORE PLOT 
 UPP16V   LX1    1           POSTION TO NEXT PLOT 
          SB3    B3-6        DECREMENT SHIFT
          PL     B3,UPP16U   IF 10 BITS NOT DONE YET
          SB3    59-5 
          SB2    B2+B1       INCREMENT DISPLAY ADDRESS
          SB6    B6-B1
          NZ     B6,UPP16U   IF 6 SOURCE WORDS NOT MOVED
          SB2    B2+B1       SKIP COORDINATE WORD 
 UPP16W   SB4    B4+B1       ADVANCE PB ADDRESS 
          NE     B5,B4,UPP16T  IF PB BUFFER NOT DONE
  
**        STEP -09- MOVE LINE 50 DISPLAY DATA TO MSGBUF IF NOT DISPLAY
*                   DATA THEN STEP 10, ELSE MOVE LINE 50 TO K/L DISPLAY 
*                   THEN STEP 10. 
* 
 UPP16X   SB3    B0 
          SB2    B0 
          SA2    BLANKS 
          SA1    DB+160 
          MX5    -8 
          BX1    -X5*X1 
          SX1    X1-50B 
          ZR     X1,UPP16Y   IF DISPLAY ENTRY 
          SX5    SUB.DIS
          BX1    X5*X1
          ZR     X1,UPP16AB  IF DISPLAY BIT NOT ON
 UPP16Y   SA1    UPKL+B2     GET LINE 50 DATA 
          BX6    X1 
          SA6    MSGBUF+B2   STORE K/L LINE INTO MSG BUFFER 
          BX6    X6-X2
          ZR     X6,UPP16Z   IF BLANK 
          SB3    B3+B1       FLAG NON BLANK WORD FOUND
 UPP16Z   SB2    B2+B1       ADVANCE INDEX
          SX6    B2-5 
          NZ     X6,UPP16Y   IF FIVE WORDS NOT DONE YET 
          NZ     B3,UPP16Z1  IF NON BLANK ENTRY PRESENT 
          SA2    DB+160 
          ZR     X2,UPP16AB  IF LINE 50 HAS NO DATA PRESENT 
 UPP16Z1  MX6    0
          SA6    B2+MSGBUF   ZERO LAST WORD 
          SB2    4
 UPP16AA  SA1    MSGBUF+B2   GET KLMSG WORD 
          BX6    X1 
          SA6    KLMSG+B2    STORE KLMSG WORD 
          SB2    B2-B1
          PL     B2,UPP16AA  IF SIX WORDS NOT MOVED TO KLMSG
  
          MESSAGE MSGBUF,2,R POST MESSAGE ON B DISPLAY
  
**        STEP -10- RETURN. 
* 
 UPP16AB  EQ     UPPU16        RETURN 
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
  
**        THESE ROUTINES ARE FOR 721 SUPPORT. 
* 
*         THEY DO THE SAME AS THE STEPS ORIGINALLY INDICATED
*         ONLY FORMAT 23 DECIMAL LINES INSTEAD OF 41 DECIMAL
*         LINES.
 UPP16AK  SA1    FDIS 
          SX1    X1-DPPU
          ZR     X1,UPP16AL  IF PPU DISPLAY 
          SX1    X1-6 
          ZR     X1,UPP16AM  IF SECOND PART OF PPU
          EQ     UPP16S      NOT PPU DISPLAY
  
 UPP16AL  SB2    AA          (B2) = DISPLAY ADDRESS 
          SB3    UPPBUF      (B3) = PPU BUFFER ADDRESS
          SB4    KLMSG-1B    LINE 20 OF DISPLAY 
          EQ     UPP16R1     CONTINUE 
  
 UPP16AM  SB2    AA 
          SB3    UPPBUF+120  FIRST ADDRESS OF SECOND PART 
          SB4    KLMSG-1B 
          EQ     UPP16R1     CONTINUE 
  
 UPP16AN  SA1    FDIS 
          SX1    X1-DPPU
          ZR     X1,UPP16AO  IF FIRST PPU DISPLAY 
          SX1    X1-6 
          NZ     X1,UPP16X   IF NOT PPU DISPLAY BY-PASS PLOT
          SB2    AA          (B2) = STORE CHARACTER ADDRESS 
          SB4    PB+20       (B4) = ADDRESS IN PLOT BUFFER
          SB5    PB+40       (B5) = LAST PB LINE + 1
          EQ     UPP16T      CONTINUE 
  
 UPP16AO  SB2    AA          (B2) = STORE CHARACTER ADDRESS 
          SB4    PB          (B4) = ADDRESS IN PLOT BUFFER
          SB5    PB+20       (B5) = LAST PB LINE + 1
          EQ     UPP16T      CONTINUE 
          ENDIF 
  
 ENT4     DATA   0           ENTRY LINE 4 
 UPP16AC  DATA   0           CONTROL WORD 1 
 UPP16AC1 DATA   0           SUBSTITUTION WORD BYTE DDDDDD EEEEEE 
 UPP16AC2 DATA   0           SUBSTITUTION WORD BYTE FFFFFF GGGGGG 
 UPP16AD  DATA   0           CONTROL WORD 2 
 UPP16AD1 DATA   0           SUBSTITUTION WORD BYTE HHHHHH IIIIII 
 UPP16AD2 DATA   0           SUBSTITUTION WORD BYTE JJJJJJ KKKKKK 
 UPP16AG  DATA   0           SHIFT COUNT
 UPP16AH  DATA   0           CURRENT SUBSTITUTION WORD WORKING  WITH
 UPP16AI  DATA   0           NUMBER OF SUBSTITUTIONS
 UPP16AJ  DATA   0           SUBSTITUTION CONVERTED VALUE 
          TITLE 
          EJECT 
 AREA2    =      *                 SECOND OVERLAY AREA
 OVAREA   EQU    AREA2
          BSS    5                 SPACE FOR OVERLAY TABLE
 ENTRIES  SET    0
*CALL MALNK11 
          ORG    ASSIGN 
*CALL MALNK12 
          ORG    *
*         DUMMY ENTRY 
 MALET10  BSS    0
          ENTRY  MALET10
          END    MALET10
