*DECK MALET12 
          IDENT  MALET12
          LCC    OVERLAY(1,2,O=AREA2) 
*CALL,VERS
          COMMENT OVERLAY FOR MALET  "VERS" 
          TITLE  MALET12 - PPU MONITOR
*CALL ASSYTAG 
          TITLE 
*CALL MALMAC
* 
*         OVERLAY SUBROUTINE ENTRY TABLE
* 
*                -MUST LOAD AT FRONT OF OVERLAY-
* 
          USE    /ENTRY12/
 ENTRIES  SET    1
*CALL MALNK12 
          USE    *
* 
*         SUBROUTINES IN LOWER LEVEL OVERLAYS 
* 
          EXT    GO 
          EXT    FILL 
          EXT    INRMOD 
          EXT    LSTERR 
          EXT    MSG
          EXT    PICTURE
          EXT    POST 
          EXT    PRINT
          EXT    RDSFILE
          EXT    STOP 
          EXT    STRPPU 
          EXT    SVREG
          EXT    UPDIS
          EXT    UPPU 
* 
*         DATA AREAS IN MALET00 
* 
          EXT    OUTPUT 
          EXT    SCRATCH
          EXT    LSCR 
          EXT    RUNDIS 
          EXT    IRB
          EXT    ORB
          EXT    DB 
          EXT    PB 
          EXT    CB 
          EXT    SCR
          EXT    IPIBUF 
          EXT    FMAXDM 
          EXT    LIPIBUF
          EXT    MODULE 
          EXT    CRKBUF 
          EXT    CLINE
          EXT    SBPIR
          EXT    SVRBUF6
          EXT    UPPBUF 
          EXT    MTRA 
          EXT    MTRIN
          EXT    MTRCUR 
          EXT    MTRLST 
          EXT    PPUDIS 
          EXT    STPMSG 
          EXT    PPUD 
          EXT    MSGE19 
          EXT    MSGE21 
          EXT    MSGE21A
          EXT    MSGE32 
          EXT    MSGE34 
          EXT    MSGE35 
          EXT    MSGE42 
          EXT    MSGE43 
          EXT    MSGE43A                                                 MAL026G
          EXT    MSGE92 
          EXT    BLANKS 
* 
*         FLAGS FOR EXECUTIVE ( IN MALET00 )
* 
          EXT    FCHK 
          EXT    FLCM 
          EXT    FMAXCM 
          EXT    FDIS 
          EXT    FEOFI
          EXT    FESM 
          EXT    FMAXE
          EXT    FLOG 
          EXT    FTERM
          EXT    FDROP
          EXT    FSTOP
          EXT    FDRP 
          EXT    FRUN 
          EXT    FSBPC
          EXT    FSBPR
          EXT    FSCR 
          EXT    FSUSPI 
          EXT    FSYSRD 
          EXT    FSYSWR 
          EXT    FTINT
          EXT    FTSTP
          EXT    FKL
          EXT    FRM
          EXT    FRT
          EXT    FSE
          EXT    FTL
* 
*         DATA AREAS IN MALET10 
* 
          EXT    UPKL 
          EXT    LODA 
          EXT    LODB 
          EXT    LODC 
          EXT    LODD 
          EXT    RUNAME 
          EXT    RUNSH
          EXT    RUNTBL 
          EXT    RUNWD
          EXT    TRUN 
*CALL MALCD1
          EJECT 
 RMPPU    TITLE  RMPPU - REPEAT MODULE. 
**        RMPPU - REPEAT MODULE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         ENTRY  FRM = 1 IF REPEAT MODULE.
*                FRM = 0 IF NO REPEAT MODULE. 
* 
*         EXIT   X1 = 0  IF NO REPEAT OR ERRORS IN LOADING. 
*                X1 = 1  IF REPEAT MODULE.
* 
*         ROUTINES CALLED -  RDSFILE- READ MODULE FROM RANDOM FILE. 
*                            STRPPU - START PPU EXECUTION.
* 
*         DATA AREAS USED -  FRM  - REPEAT MODULE FLAG. 
*                            FSTOP- STOP MODULE FLAG. 
*                            LODA - LAST MODULE LOADED NAME.
*         USES   A - 1. 
*                X - 1, 2, 5. 
*                B - 2. 
* 
*         MESSAGES  NONE. 
* 
  
**        STEP -01- CHECK REPEAT MODULE FLAG IF NOT SET THE STEP 3, 
*                   ELSE STEP 2.
* 
 RMPPU    DATA   0
          SA1    FRM
          ZR     X1,RMP2     IF REPEAT MODULE OFF 
  
**        STEP -02- READ LAST PRIMARY MODULE LOADED IF ERRORS THEN
*                   STEP 3, ELSE START MODULE THEN STEP 4.
* 
          SA1    LODA 
          SA2    MODULE 
          MX5    42 
          BX2    X5*X2
          BX2    X1-X2
          ZR     X2,RMP0     IF SAME MODULE BINARY ON REPEAT MODULE 
          RJ     RDSFILE     GO READ LAST PRIMARY MODULE RUN
          NZ     X1,RMP1     IF ERRORS IN LOADING DO NOT REPEAT MODULE
 RMP0     SB2    F.RUN
          RJ     STRPPU      EXECUTE START FUNCTION TO PPU
          SX1    B1          FLAG REPEAT MODULE 
          EQ     RMP2 
  
**        STEP -03- SET FLAG FOR NO REPEAT THEN STEP 4. 
* 
 RMP1     MX1    0
  
**        STEP -04- RETURN TO CALLER. 
* 
 RMP2     EQ     RMPPU
          EJECT 
 RTPPU    TITLE  RTPPU - REPEAT TEST. 
**        RTPPU - REPEAT TEST.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         ENTRY  FRT = 1 IF REPEAT TEST.
*                FRT = 0 IF NO EPEAT TEST.
* 
*         EXIT   X1 = 0  IF NO REPEAT OR ERRORS IN LOADING. 
*                X1 = 1  IF REPEAT TEST.
* 
*         ROUTINES CALLED -  RDSFILE- READ MODULE FROM RANDOM FILE. 
*                            STRPPU - START PPU EXECUTION.
*                            INRMOD - INCREMENT MODULE NUMBER.
* 
*         DATA AREAS USED -  FRT    - REPEAT TEST FLAG. 
*                            FSTOP  - STOP FLAG.
*                            RUNTBL - RUN TABLE FLAG. 
*                            RUNSH  - SHIFT COUNT FOR RUN TABLE.
*                            TRUN   - TABLE OF MODULE NUMBERS.
*                            RUNAME - MODULE NAME TO RUN. 
*                            LODA   - LAST MODULE LOADED NAME.
*                            FLOG   - LOG MSG FLAG TO RDSFILE.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 5, 6.
*                B - 2. 
* 
*         MESSAGES  NONE. 
* 
  
**        STEP -01- CHECK REPEAT TEST FLAG IF SET THEN STEP 7 ELSE, 
*                   STEP 2. 
* 
 RTPPU    DATA   0
          SA1    FRT
          ZR     X1,RTP6     IF REPEAT TEST OFF 
  
**        STEP -02- CHECK IF RUN TABLE USED FOR MODULE IF NOT USED
*                   THEN STEP 4 ELSE STEP 3.
* 
          SA1    RUNTBL 
          ZR     X1,RTP2     IF RUN TABLE NOT USED
  
**        STEP -03- GET MODULE NAME FROM RUN TABLE THEN STEP 5. 
* 
 RTP1     SX6    60-36
          SA6    RUNSH       STORE SHIFT COUNT
          SX6    TRUN 
          SA6    RUNWD       STORE START WORD ADDRESS 
          SA1    RUNAME 
          SA2    TRUN 
          LX2    12          POSITION MODULE NUMBER IN LOWER
          MX5    -12
          BX2    -X5*X2      CLEAR ALL BUT OUR MODULE NO
          ZR     X2,RTP2     IF MODULE NUMBER NOT PRESENT 
          LX2    42-12       POSITION MODULE NUMBER 
          BX1    X2+X1       COMBINE MODULE NUMBER WITH NAME
          EQ     RTP3        GO LOAD MODULE 
  
**        STEP -04- GET MODULE NAME IF PRESENT THEN STEP 5,ELSE CALL
*                   ELSE CYCLE THRU NAMES IF FOUND THEN STEP 6  ELSE
*                   STEP 7. 
* 
 RTP2     SA1    RUNAME 
          MX5    -42
          BX2    -X5*X1 
          BX6    X1 
          SA6    LODA 
          NZ     X2,RTP3     IF NUMBER PART OF MODULE SERIES MNENN
          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,RTP4     IF FOUND MODULE GO START EXECUTION 
          RJ     INRMOD      GO INCREMENT NUMBER TO FIRST ONE IN SERIES 
          BX6    X1 
          SA6    LODA        STORE MODULE NUMBER AND NAME 
          NZ     X1,RTP4     IF FOUND MODULE GO START EXECUTION 
          EQ     RTP5        NO MODULE FOUND TERMINATE REPEAT TEST
  
**        STEP -05- GET MODULE FROM RANDOM FILE THEN STEP 7.
* 
 RTP3     RJ     RDSFILE     GO READ MODULE NAME
          NZ     X1,RTP5     IF ERRORS IN LOADING EXIT
  
**        STEP -06- START MODULE RUNNING THEN STEP 8. 
* 
 RTP4     SB2    F.RUN
          RJ     STRPPU      START PPU EXECUTION
          SX1    B1          FLAG REPEAT TEST IN X1 
          EQ     RTP6 
  
**        STEP -07- CLEAR REPEAT TEST FLAG THEN STEP 8. 
* 
 RTP5     MX1    0           FLAG NO REPEAT TEST
  
**        STEP -08- RETURN TO CALLER. 
* 
 RTP6     EQ     RTPPU
          EJECT 
 MTRPPU   TITLE  MTRPPU - MOINTER PPU FOR FUNCTIONS.
**        MTRPPU - MOINTER PPU FOR FUNCTIONS. 
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         PPU COMUNICATION ROUTINE USED TO PROCESS ALL FUNCTIONS FROM 
*         THE PPU.  CALLS THE PROPER ROUTINE NEEDED BY THE PPU. 
* 
*         THE  FOLLOWING DOCUMENTS THE FUNCTION REQUESTS THAT THE PPU 
*         DRIVER MAKES TO THE CPU EXECUTIVE,THE FORMAT OF THE REQUEST 
*         AND THE EXPECTED RESPONSE FROM THE EXECUTIVE. 
* 
*         WITH  ONE  EXCEPTION,  ALL DRIVER REQUESTS TO THE EXECUTIVE 
*         CAUSE THE PPU DRIVER TO CHECKPOINT THE  PPU  DRIVER/PRODUCT 
*         OVERLAY  TO CENTRAL MEMORY BEFORE THE REQUEST IS WRITTEN TO 
*         THE OUTPUT REGISTER AND THE PPU  DROPS  AFTER  WRITING  THE 
*         REQUEST  WITHOUT WAITING FOR A RESPONSE FROM THE EXECUTIVE. 
*         AFTER THE REQUEST HAS BEEN PROCESSED BY THE EXECUTIVE,  THE 
*         PPU  DRIVER MUST  BE CALLED WITH A *GO* DIRECTIVE TO RESTART
*         EXECUTION OF THE MODULE AT THE POINT SUSPENDED. 
* 
*         THE EXCEPTION IS *SYS* STATEMENTS  WHEN  THE  PPU IS EXECU- 
*         TING  CHAINING  I/O.   UNDER THIS SITUATION, THE PPU DRIVER 
*         CANNOT RELEASE THE DEVICE AND I/O CHANNEL SINCE THE  MODULE 
*         EXPECTS THIS CONDITION TO EXIST  ACROSS  *SYS*  STATEMENTS. 
*         DURING THE LOADING OF CONTROLWARE,A TYPICAL SEQUENCE  WOULD 
*         BE  TO  PERFORM A *SYSRD* FOLLOWED BY A CHAINING OUTPUT AND 
*         REPEAT THIS SEQUENCE UNTIL THE TOTAL DOWN-LOAD OF  CONTROL- 
*         WARE  HAS  BEEN  COMPLETED  ).  FOR THIS EXCEPTION, THE PPU 
*         DRIVER SETS THE UPPER BIT  OF  THE  FUNCTION  BYTE  IN  THE 
*         OUTPUT  REGISTER  WHEN  MAKING  THE  *SYS*  REQUEST  TO THE 
*         EXECUTIVE TO INDICATE THAT THE PPU DRIVER IS  IN  EXECUTION 
*         AND  HAS  NOT  DROPPED.   AFTER THE EXECUTIVE COMPLETES THE 
*         REQUESTED FUNCTION, ZERO FILLING THE FUNCTION BYTE  OF  THE 
*         OUTPUT REGISTER THE PPU DRIVER CONTINUES EXECUTION. 
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         ROUTINES CALLED -  PPUABT - ABORT FUNCTION. 
*                            PPUBLK - BLANK FUNCTION. 
*                            PPUDRP - DROP FUNCTION.
*                            PPUEND - END FUNCTION. 
*                            PPUERR - ERROR FUNCTION. 
*                            PPUHLT - HALT FUNCTION.
*                            PPULOD - LOAD FUNCTION.
*                            PPUMSG - PROCESS PPU MESSAGE FUNCTION. 
*                            PPUPIC - PICTURE FUNCTION. 
*                            PPUSYS - SCRATCH FILE FUNCTION.
*                            PPUTERM- TERMINATE MALET FUNCTION. 
*                            POST   - POST MESSAGE. 
*                            UPPU   - UPDATE PPU DISPLAY DATA.
*                            STOP   - STOP MODULE RUNNING.
* 
*         DATA AREAS USED -  FDRP  - DROP FLAG PENDING. 
*                            FDROP - DROP FLAG. 
*                            IRB   - PPU INPUT REGISTER.
*                            ORB   - PPU OUTPUT REGISTER. 
*                            RUNDIS- DISPLAY CODE STATUS WORD.
*                            STPMSG- DISPLAY CODE STOP MSG. 
*                            FRUN  - MODULE RUNNING FLAG. 
*                            FCHK  - CHECKPOINT FLAG. 
* 
*         USES   A - 1, 2, 3, 6.
*                X - 1, 2, 3, 5, 6. 
*                B - 2, 3.
* 
*         MESSAGES   PPU FUNCTION OUT OF RANGE. 
* 
  
**        STEP -01- CHECK  FOR  FUNCTION  CODE IF NOT PRESENT THEN STEP 
*                   15, ELSE UPDATE PPU  DISPLAY,  IF  MODULE  WAS  NOT 
*                   CHECKPOINTED  THEN STEP 2, ELSE SET SET FCHK, CLEAR 
*                   FRUN, STORE STOPPED MESSAGE INTO K/L DISPLAY BUFFER 
*                   FOR STATUS THEN STEP 2. 
* 
 MTRPPU   DATA   0
          SA1    ORB         GET PPU OUTPUT REGISTER
          MX5    12 
          BX1    X5*X1       GET FUNCTION CODE
          ZR     X1,PPU12    IF NO FUNCTION CODES PRESENT 
  
          SA1    FDIS 
          BX6    X1 
          SA6    PPUD        SAVE DISPLAY TYPE
          SB3    DPPU 
          RJ     UPDIS       UPDATE PPU DISPLAY 
          SA1    PPUD 
          SB3    X1 
          RJ     UPDIS       UPDATE WITH  DISPLAY BEING DISPLAYED 
          SA1    ORB
          BX6    X1 
          SA6    MTRA        SAVE LAST FUNCTION 
          MX5    12 
          BX1    X5*X1
          PL     X1,PPU0     IF CHECKPOINTED
          MX6    59-58
          BX1    -X6*X1      CLEAR UPPER BIT
          EQ     PPU0A
  
 PPU0     SX6    B1 
          SA6    FCHK        SET CHECKPOINTED FLAG
          SA2    STPMSG 
          BX6    X2 
          SA6    RUNDIS 
          MX6    12 
          SA6    SBPIR       SEND STANDBY DROP FLAG 
          MX6    0
          SA6    FRUN        CLEAR RUN FLAG 
 PPU0B    BX6    X1          SAVE ORB 
          SA6    PPUSAV 
          RTIME  MTRIN
          SA1    FSBPC
          ZR     X1,PPU0D    EXIT SBP NOT CALLED
          SA1    FSBPR
          NZ     X1,PPU0D    EXIT SBP NOT RESPONDING
 PPU0C    RECALL
          RTIME  MTRCUR 
          SA3    SBPIR
          PL     X3,PPU0D    EXIT STANDBY PP HAS DROPPED
          SA1    MTRIN       (X1) = START TIME
          SA2    MTRCUR      (X2) = CURRENT TIME
          MX6    24 
          BX1    -X6*X1 
          BX2    -X6*X2 
  
          IFEQ   NOSBE,1,1
          SX6    10000B      (X6) = 1 SEC TIME LIMIT
  
          IFEQ   NOS,1,1
          SX6    3750        (X6) = 1 SEC TIME LIMIT
  
          SX3    7           SET TIME LIMIT 7 SECONDS 
          IX6    X6*X3
          IX1    X2-X1
          IX1    X1-X6
          NG     X1,PPU0C    IF TIME LIMIT HAS NOT ELAPSED
          SX6    1
          SA6    FSBPR       SET STANDBY PP NOT RESPONDING FLAG 
 PPU0D    SA1    PPUSAV      REREAD ORB 
          MX5    12 
  
 PPU0A    BX2    X5*X1       GET FUNCTION 
          LX2    12-00       MOVE FUNCTION TO BITS 0-12 
  
**        STEP -02- CHECK  FOR  ABORT FUNCTION IF NOT THEN STEP 3, ELSE 
*                   CALL PPUABT THEN STEP 16. 
* 
          SX3    X2-F.ABT 
          NZ     X3,PPU1     IF NOT ABORT FUNCTION
          RJ     PPUABT      PROCESS PPU ABORT FUNCTION 
          EQ     PPU20
  
**        STEP -03- CHECK FOR DROP FUNCTION IF NOT THEN  STEP  4,  ELSE 
*                   CALL PPUDRP THEN STEP 15. 
* 
 PPU1     SX3    X2-F.DRP 
          NZ     X3,PPU2     IF NOT DROP FUNCTION 
          RJ     PPUDRP      PROCESS DROP FUNCTION
          SA1    FTSTP
          NZ     X1,PPU13B   IF TERMINAL STOP FLAG SET
          EQ     PPU12
  
**        STEP -04- CHECK FOR END FUNCTION IF NOT  THEN  STEP  5,  ELSE 
*                   CALL PPUEND THEN STEP 15. 
* 
 PPU2     SX3    X2-F.END 
          NZ     X3,PPU3     IF NOT END FUNCTION
          RJ     PPUEND      PROCESS END FUNCTION 
          EQ     PPU12
  
**        STEP -05- CHECK FOR ERR FUNCTION IF NOT  THEN  STEP  6,  ELSE 
*                   CALL PPUERR THEN STEP 15. 
* 
 PPU3     SX3    X2-F.ERR 
          NZ     X3,PPU4     IF NOT ERR FUNCTION
          RJ     PPUERR      PROCESS ERROR FUNCTION 
          EQ     PPU12
  
**        STEP -07- CHECK FOR HALT FUNCTION IF NOT THEN  STEP  8,  ELSE 
*                   CALL PPUHLT THEN STEP 15. 
* 
 PPU4     SX3    X2-F.HLT 
          NZ     X3,PPU5     IF NOT HALT FUNCTION 
          RJ     PPUHLT      PROCESS HALT FUNCTION
          EQ     PPU12
  
**        STEP -08- CHECK FOR LOAD FUNCTION IF NOT THEN  STEP  9,  ELSE 
*                   CALL PPULOD THEN STEP 15. 
* 
 PPU5     SX3    X2-F.LOD 
          NZ     X3,PPU6     IF NOT LOAD FUNCTION 
          RJ     PPULOD      PROCESS LOAD FUNCTION
          EQ     PPU12
  
**        STEP -09- CHECK FOR PICTURE FUNCTION IF NOT THEN STEP 10,ELSE 
*                   CALL PPUPIC THEN STEP 15. 
* 
 PPU6     SX3    X2-F.PIC 
          NZ     X3,PPU7     IF NOT PICTURE FUNCTION
          RJ     PPUPIC      PROCESS PICTURE FUNCTION 
          EQ     PPU12
  
**        STEP -10- CHECK FOR SCRATCH FILE FUNCTION IF NOT  POST  ERROR 
*                   MESSAGE THEN STEP 9, ELSE CALL PPUSYS THEN STEP 15. 
* 
 PPU7     SX3    X2-F.SYS 
          NZ     X3,PPU8     IF NOT SYS FUNCTION
          RJ     PPUSYS      PROCESS SCRATCH FILE FUNCTION
          EQ     PPU12
  
  
**        STEP -11- CHECK  FOR  BLANK FILL DB/PB IF EQUAL NOT THEN STEP 
*                   12, ELSE CALL PPUBLK THEN STEP 15.
* 
 PPU8     SX3    X2-F.BLK 
          NZ     X3,PPU9     IF NOT BLANK FUNCTION
          RJ     PPUBLK      PROCESS BLANK FUNCTION 
          EQ     PPU12
  
**        STEP -12- PROCESS TERMINATE COMMAND FROM PPU IF TERM FUNCTION 
*                   THEN STEP 15, ELSE STEP 13. 
* 
 PPU9     SX3    X2-F.TERM
          NZ     X3,PPU9A    IF NOT TERMINATE FUNCTION
          RJ     PPUTERM     PROCESS TERMINATE FUNCTION 
          EQ     PPU12
  
**        STEP -13- PROCESS PPU MSG FUNCTION FROM PPU IF MSG FUNCTION 
*                   THEN STEP 15, ELSE STEP 14. 
* 
 PPU9A    SX3    X2-F.MSG 
          NZ     X3,PPU10    IF NOT MESSAGE FUNCTION
          RJ     PPUMSG      PROCESS PPU MESSAGE FUNCTION 
          EQ     PPU12
  
  
**        STEP -13A- START PPU IF ROLLOUT FUNCTION SET ELSE 
*                    STEP 14. 
PPU10     SX3    X2-F.ROLL
          NZ     X3,PPU11    ROLLOUT NOT SET
          SA1    FTINT
          ZR     X1,PPU12    NO TERMINAL INTERRUPT
          MX6    0
          SA6    FTINT
          SB2    MSGE92      POST TERMINAL INTERRUPT MESSAGE
          RJ     POST 
          EQ     PPU12
  
  
**        STEP -14- CALL POST TO SEND MSG (ILLEGAL FUNCTION CODE
*                   FROM PPU.)  THEN ABORT. 
* 
 PPU11    SB2    MSGE19      FUNCTION OUT OF RANGE
          RJ     POST 
          ABORT 
  
**        STEP -15- MOINTER CLOCK FOR TIME LIMIT IF TERMINAL MODE.
* 
 PPU12    SA1    FRUN 
          ZR     X1,PPU20    IF PPU NOT RUNNING 
          RTIME  MTRCUR      STORE CURRENT TIME IN MTRCUR 
          SA1    FTERM
          ZR     X1,PPU14    IF NOT TERMINAL MODE 
          SA1    MTRIN       (X1) = TIME PPU CALLED 
          SA2    MTRCUR      (X2) = CURRENT RTIME 
          MX6    24 
          BX2    -X6*X2 
          BX1    -X6*X1 
  
          IFEQ   NOSBE,1,1
          SX6    10000B      (X6) = 1 SEC  TIME LIMIT 
  
          IFEQ   NOS,1,1
          SX6    3750        (X6) = 1 SEC TIME LIMIT
  
          SA3    FTL
          ZR     X3,PPU12A   IF TIME LIMIT ZERO STOP PPU EACH PASS
          IX6    X6*X3
          IX1    X2-X1
          IX1    X1-X6
          NG     X1,PPU14    IF TIME NOT ELAPSED
 PPU12A   RJ     STOP        STOP PPU 
 PPU13    RECALL
          MX5    12 
          SA1    ORB
          BX1    X5*X1
          ZR     X1,PPU13    IF PPU NOT RESPONDING
          NG     X1,PPU20    IF PPU NOT CHECKPOINTED
          MX6    0
          SA6    FRUN 
          SX6    B1 
          SA6    FTSTP       SET TERM STOP FLAG 
          SA1    FTINT
          IFEQ   NOS+NOS4+NOS5+NOSBE+NOSBE3,1,1 
          EQ     PPU13A 
          IFEQ   NOS+NOS4+NOS5+NOSBE+NOSBE3,2,1 
          ZR     X1,PPU13A   IF TERMINAL INTERRUPT NOT SET
          SA6    FCHK        SET PPU CHECKPOINTED FLAG
          SA2    STPMSG      SET PPU STATUS TO STOPPED
          BX6    X2 
          SA6    RUNDIS 
          EQ     PPU20       RETURN 
  
 PPU13A   SX6    B1 
          SA6    FRUN 
          EQ     PPU20
  
 PPU13B   SA1    FTERM
          ZR     X1,PPU20    IF NOT TERMINAL MODE 
          MX6    0
          SA6    FTSTP       CLEAR TERM STOP FLAG 
          RJ     GO          RESUME RUNNING PPU IF STOPPED BY CPU 
 PPU14    SA1    MTRLST 
          SX2    PPUDIS 
          IX2    X1-X2
          NZ     X2,PPU15    IF NOT TIME TO UPDATE DISPLAY
          RJ     UPPU        UPDATE DISPLAY 
          MX1    0
 PPU15    SX6    X1+B1
          SA6    MTRLST      STORE UPDATED COUNT FOR DISPLAY UPDATE 
  
**        STEP -16- RETURN TO CALLER
* 
 PPU20    EQ     MTRPPU      RETURN 
  
 PPUSAV   DATA   0           LOC TO SAVE ORB
 PPUABT   TITLE  PPUABT -  PROCESS PPU ABORT FUNCTION.
**        PPUABT -  PROCESS PPU ABORT FUNCTION. 
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*           F.ABT  - ABORT TESTING. 
* 
*         THIS REQUEST  IS MADE WHEN A FATAL ERROR CONDITION HAS BEEN 
*         DETECTED BY THE PPU DRIVER  OR PRODUCT  OVERLAY  SUCH  THAT 
*         TESTING CANNOT BE CONTINUED.
* 
*         THE  EXECUTIVE WRITES THE REQUESTED ERROR MESSAGE TO ACTIVE 
*         OUTPUT DEVICES. THE MODULE NAME, ERROR CODE AND  ERROR ADD- 
*         RESS ARE  INSERTED IN FRONT OF THE REQUESTED MESSAGE IN THE 
*         FORMAT FOLLOWING; 
* 
*           WWWWWW ERXXXX LYYY ZZZZZZZ(BODY OF MESSAGE)ZZZZZZZ
* 
*         THE EXECUTIVE THEN READS DATA FROM THE K/L DISPLAY IF ON
*         AND FROM THE ACTIVE INPUT FILE. 
* 
*         ENTRY       0         1         2         3        4
*               --------------------------------------------------- 
*               I         I   MSG   I  ERROR  I  ERROR  I         I 
*           ORB I   0001  I  INDEX  I  CODE   I ADDRESS I  XXXX   I 
*               --------------------------------------------------- 
* 
*           BYTE 0 = FUNCTION CODE. 
*           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   ORB = 0     OUTPUT REGISTER CLEARED. 
*                FCHK= 0     CHECKPOINT FLAG CLEARED. 
* 
*         ROUTINES CALLED -  LSTERR - FORMAT ERROR MESSAGE. 
*                            POST   - POST MESSAGE. 
* 
*         DATA AREAS USED -  FCHK   - PPU CHECKPOINTED. 
*                            CLINE  - PRINT LINE BUFFER.
*                            ABTMSG - DISPLAY CODE ABORT MESSAGE. 
*                            RUNDIS - K/L DISPLAY BUFFER STATUS WORD. 
*                            BLANKS - DIPALY CODE BLANK WORD. 
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
*                B - 2, 3, 5. 
* 
*         MESSAGES  ( AAANNN ENNN LNNN MESSAGE) 
* 
  
**        STEP -01- PUT ABORT MESSAGE IN K/L DISPLAY WORD THEN STEP 2.
* 
 PPUABT   DATA   0           ENTRY/EXIT 
          SA2    MODULE+5    GET 16BIT FLAG 
          LX2    59-12
          PL     X2,ABT2     IF NOT 16-BIT MALET
          SB5    3           BYTES TO DO
          SA2    ORB         GET ORB
          LX2    12 
          MX5    48 
          BX6    -X5*X2 
 ABT1     MX5    48          BYTE MASK
          LX2    12          POSITION 12-BIT ORB
          LX6    16          POSITION 16-BIT ORB
          BX5    -X5*X2      MASK BYTE
          BX6    X6+X5       SAVE BYTE IN 16-BIT ORB
          SB5    B5-B1       DECREMENT BYTES TO DO
          NE     B5,ABT1     IF MORE BYTES TO DO
          SA6    ORB         STORE 16-BIT ORB 
 ABT2     SA2    ABTMSG 
          BX6    X2 
          SA6    RUNDIS 
  
**        STEP -02- CLEAR WORD ONE OF CLINE MESSAGE AND CALL LSTERR TO
*                   FORMAT MESSAGE FOR POSTING THEN STEP 3. 
  
          SA6    CLINE       STORE CLINE WORD ONE WITH ABORT
          SB3    CLINE+1
          SB5    ORB
          RJ     LSTERR 
          MX6    0
          SA6    CLINE+6     STORE ZERO WORD
  
**        STEP -03- POST MESSAGE ON ALL ACTIVE FILES AND B DISPLAY, 
*                   CLEAR CHECKPOINT FLAG AND RETURN. 
* 
          SB2    CLINE
          RJ     POST        POST MESSAGE 
          MX6    0
          SA6    FCHK        CLEAR CHECKPOINT FLAG
          EQ     PPUABT 
  
 ABTMSG   DATA   10H ABORT
          EJECT 
 PPUBLK   TITLE  PPUBLK - BLANK FILL PB/DB USING FLAG IN OUTPUT REG.
**        PPUBLK - BLANK FILL PB/DB USING FLAG IN OUTPUT REG. 
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         CLEAR PB/DB  USING FLAG BYTE IN OUTPUT REGISTER.
* 
*         ENTRY      ------------------------------------ 
*                ORB I 0002 I XXXX I XXXX I XXXX I FLAG I 
*                    ------------------------------------ 
*                    FLAG = 0 DO NOT CLEAR. 
*                         = 1 CLEAR PB. 
*                         = 2 CLEAR DB. 
*                         = 3 CLEAR PB/DB.
* 
*         EXIT   PB-PB+39 = 0 IF FLAG = 1/3.
*                DB-DB+122= 0 IF FLAG = 2/3.
*                DB-PB+39 = 0 IF FLAG = 3.
* 
*         ROUTINES CALLED -  FILL   - FILL BUFFER AREA WITH DATA. 
*                            STRPPU - RESUME MODULE EXECUTION.
* 
*         DATA AREAS USED -  PB     - PLOT BUFFER.
*                            DB     - DISPLAY BUFFER. 
*                            ORB    - PPU OUTPUT REGISTER.
*                            BLANKS - TEN DISPLAY CODE BLANKS.
* 
*         USES   A - 1, 2.
*                X - 1, 2, 5. 
*                B - 2, 3.
* 
*         MESSAGES  NONE. 
* 
  
**        STEP -01- GET PPU  OUTPUT REGISTER TO DETEMINE WHAT TO CLEAR
*                   THEN STEP 2.
* 
 PPUBLK   DATA   0
          SA2    ORB
          MX5    -12
          BX2    -X5*X2      CLEAR OUTPUT REGISTER BITS 59-11 
  
**        STEP -02- IF NO CLEAR REQUEST THEN STEP 6, ELSE STEP 3. 
* 
          ZR     X2,BLK4     IF FLAG BYTE ZERO
          SB2    PB          (B2) = START ADDRESS CLEAR 
          SB3    CB-1        (B3) = END ADDRESS FOR CLEAR 
          SX2    X2-1        (X2) = FLAG -1 
  
**        STEP -03- IF FLAG = 1 THEN STEP 5,ELSE STEP 4.
* 
          ZR     X2,BLK1     IF CLEAR PB ONLY FLAG = 1
  
**        STEP -04- CLEAR LINE 50B MESSAGE FROM DISPLAY, DETERMINE IF 
*                   CLEAR PB+DB IF NOT SET B2,B3 FOR DB THEN STEP 5,
*                   ELSE SET B2,B3 FOR DB+PB THEN STEP 5. 
* 
          SA1    BLANKS 
          SB2    UPPBUF 
          SB3    UPPBUF+245 
          RJ     FILL        CLEAR LINE 50B MESSAGE WITH BLANKS 
          SB2    DB 
          SB3    PB-1 
          SX2    X2-1 
          ZR     X2,BLK1     IF CLEAR DB
          SB2    DB 
          SB3    CB-1        CLEAR DB+PB
  
**        STEP -05- CLEAR BUFFER(S) REQUEST BY B2,B3 CALL FILL ROUTINE
*                   THEN CHECK IF PPU DISPLAU UP IF YES CLEAR DISPLAY 
*                   CALL UPPU THEN STEP 6.
* 
 BLK1     MX1    0
          RJ     FILL        FILL PB/DB WITH ZEROS
          SA1    FDIS 
          SB3    X1 
          RJ     UPDIS       UPDATE DISPLAY 
  
**        STEP -06- RESUME PPU AND RETURN TO CALLER 
* 
 BLK4     SB2    F.RES       FLAG CHECKPOINT START
          RJ     STRPPU      START PPU EXECUTION
          EQ     PPUBLK 
          EJECT 
 PPUDRP   TITLE  PPUDRP - PROCESS PPU DROP FUNCTION.
**        PPUDRP - PROCESS PPU DROP FUNCTION
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         THIS REQUEST IS MADE FOR THE FOLLOWING CIRCUMSTANCES; 
* 
*           1. THE  CPU EXECUTIVE HAS COMMANDED THE PPU DRIVER TO DROP. 
*              (DROP OR CHECKPOINT FLAGS SET IN THE INPUT REGISTER).
* 
*           2. SYSTEM RESOURCES DEMAND THAT OUR PPU BE RELEASED.
* 
*           3. PRODUCT OVERLAY REQUIRES A DROP FOR A SPECIFIC AMOUNT OF 
*              TIME.
* 
*         BYTE 4 ( OCTAL SECONDS TO DELAY) IS ONLY VALID IF THE DROP
*         IS DUE TO ITEMS 2 AND 3 ABOVE ( SYSTEM RESOURCE AND PRODUCT 
*         OVERLAY INITIATED DROP).
* 
*         THE EXECUTIVE RECOGNIZES THE REQUEST, NOTES THAT THE PPU IS 
*         DROPPING AND ZEROS THE FUNCTION BYTE ( BYTE  0  ).   IF THE 
*         DROP WAS NOT DUE TO AN EXECUTIVE COMMAND TO DROP, THE EXEC- 
*         UTIVE DELAYS THE NUMBER OF OCTAL SECONDS SPECIFIED BY BYTE
*         4 AND CALLS THE DRIVER WITH A *RESUME* REQUEST. OTHERWISE,
*         THE PPU DRIVER IS NOT RECALLED UNTIL MANUALLY RESTARTED.
* 
*         ENTRY          0        1         2         3        4
*                   --------------------------------------------------- 
*                   I         I         I         I         I SECONDS I 
*               ORB I   0003  I  XXXX   I  XXXX   I  XXXX   I  DELAY  I 
*                   --------------------------------------------------- 
*                   FCHK=1  STOP WAS SENT BY EXECUTIVE
*                   FDRP =1  DROP WAS SENT BY EXECUTIVE 
*                   FDRP=FCHK=0 RESOURCE DROP SENT BY PPU RESUME
* 
*         EXIT  FDROP = 1  IF FDRP=1. 
* 
*         ROUTINES CALLED -  STRPPU  - START MODULE EXECUTION.
*                            POST    - POST MESSAGE.
* 
*         DATA AREAS USED -  ORB    - MODULE OUTPUT REGISTER. 
*                            FDRP   - DROP PENDING FLAG.
*                            FTERM  - TERMINAL MODE FLAG. 
*                            FCHK   - MODULE CHECKPOINTED FLAG. 
*                            PDPA   - TEMPORARY START CLOCK.
*                            PDPB   - TEMPORARY CURRENT CLOCK.
*                            PDPC   - TEMPORARY OUTPUT REGISTER.
*                            RUNDIS - MODULE STATUS WORD. 
*                            FSTOP  - STOP FLAG.
*                            PDPA   - CURRENT MSEC CLOCK. 
*                            DRECALL- DISPLAY CODE RECALL DATA. 
* 
*         USES   A - 1, 2, 3, 6.
*                X - 1, 2, 3, 5, 6. 
*                B - 2. 
* 
*         MESSAGES  MSGS THAT COULD NOT BE POSTED DUE TO PPU RUNNING. 
* 
  
**        STEP -01- CLEAR PPU OUTPUT REGISTER. CHECK FDRP IF NON
*                   ZERO, SET FDROP TO ONE THEN STEP 4, ELSE
*                   STEP 2. 
* 
 PPUDRP   DATA   0           ENTRY/EXIT 
          SA2    ORB         SAVE OUTPUT REGISTER 
          SA1    FDRP 
          ZR     X1,PDP1     IF DROP NOT REQUEST BY EXECUTIVE 
          SX2    X1-1 
          ZR     X2,PDP0     IF NOT ADDRESS 
          SA2    FTERM       TERMINAL MODE FLAG 
          ZR     X2,PDP0     IF NOT TERMINAL MODE 
          SB2    X1          X1 = ADDRESS OF MESSAGE FOR OUTPUT 
          RJ     POST 
          EQ     PDP6        RETURN 
  
 PDP0     SX6    B1 
          SA6    FDROP       SET DROP FLAG
          MX6    0
          SA6    FCHK        CLEAR CHECK POINT FLAG 
          EQ     PDP6        GO TO RETURN 
  
**        STEP -02- CHECK STOP FLAG IF NON ZERO RETURN WE ARE STOPPED,
*                   ELSE STEP 3.
* 
 PDP1     SA1    FSTOP
          ZR     X1,PDP2     IF STOP OFF
          SA1    STPMSG 
          BX6    X1 
          SA6    RUNDIS 
          EQ     PDP6 
  
**        STEP -03- DELAY (ORB(4)) SECONDS AND RESUME PPU EXECUTION 
*                   THEN STEP 4.
* 
 PDP2     MX5    -12
          BX6    -X5*X2      GET DROP TIME REQUESTED BY PPU 
          SA6    PDPC        SAVE OBR 
          SA1    DRECALL
          BX6    X1 
          SA6    RUNDIS      SET K/L RECALL STATE 
 PDP3     RTIME  PDPA        CAPTURE CURRENT TIME 
 PDP4     RECALL
          RTIME  PDPB        GET CURRENT TIME 
          SA1    PDPA        GET TIME ENTERED 
          SA2    PDPB        GET CURRENT TIME 
          MX6    24 
          BX2    -X6*X2      MASK LOWER 36 BITS INTO X2 
          BX1    -X6*X1      MASK LOWER 36 BITS INTO X1 
          IFEQ   NOSBE,1,1
          SX6    10000B 
  
          IFEQ   NOS,1,1
          SX6    3750        SET TIME TO 1 SECOND 
  
          SA3    PDPC        GET TIME REQUESTED BY PPU
          ZR     X3,PDP5     IF NO TIME PRESENT USE DEFAULT 1 SEC 
          IX6    X6*X3
 PDP5     IX1    X2-X1       FORM TOTAL TIME IN X1
          NG     X1,PDP3     IF WRAPED AROUND RESTART 
          IX1    X1-X6
          NG     X1,PDP4     IF TIME HAS NOT ELAPSED
          SB2    F.RES
          RJ     STRPPU      RESUME PPU 
  
**        STEP -04- RETURN. 
* 
 PDP6     EQ     PPUDRP      RETURN TO CALLER 
  
 PDPA     DATA   0           RTIME OF START CLOCK 
 PDPB     DATA   0           RTIME OF CURRENT CLOCK 
 PDPC     DATA   0           BUFFER FOR ORB 
 DRECALL  DATA   10H RECALL 
          EJECT 
 PPUEND   TITLE  PPUEND - PROCESS PPU END FUNCTION. 
**        PPUEND - PROCESS PPU END FUNCTION.
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         F.END - TERMINATE TESTING IF EXECUTING A TEST SERIES. 
* 
*         THIS REQUEST IS MADE WHEN THE *END*  STATEMENT  IS  EXECUTED. 
*         THE EXECUTIVE RECOGNIZES THE REQUEST AND DETERMINES IF WE ARE 
*         EXECUTING A TEST SERIES OR SPECIFIC MODULES OF A TEST SERIES. 
* 
*         IF EXECUTING A TEST SERIES, THE EXECUTIVE ZEROS BYTE 0 OF THE 
*         OUTPUT REGISTER AND READS MORE INPUT FROM THE K/L DISPLAY  IF 
*         ASSIGNED OR FROM THE SPECIFIED INPUT FILE.
* 
*         IF  EXECUTING  SPECIFIC MODULES, THE EXECUTIVE LOADS THE NEXT 
*         MODULE IN THE STRING AND CLEARS BYTE 0 OF THE OUTPUT REGISTER 
*         AND CALLS THE PPU DRIVER WITH A *RESUME* FUNCTION TO CONTINUE 
*         EXECUTION OF THE NEXT MODULE. 
* 
*         ENTRY 
*                       0         1        2         3         4
*                  ---------------------------------------------------
*           ORB    I   0004  I  XXXX   I  XXXX   I  XXXX   I  XXXX   I
*                  ---------------------------------------------------
* 
*         EXIT
* 
*         ROUTINES CALLED -  STRPPU  - START PPU EXECUTION. 
*                            RDSFILE - READ RANDOM FILE.
*                            RTPPU   - REPEAT TEST. 
*                            RMPPU   - REPEAT MODULE. 
*                            POST    - POST MESSAGE.
*                            FILL    - FILL BUFFER. 
* 
*         DATA AREAS USED -  ENDMSG  - END MESSAGE IN DISPLAY CODE. 
*                            RUNDIS  - K/L DISPLAY STATUS WORD. 
*                            RUNAME  - TEST SERIES NAME.
*                            RUNSH   - MODULE NIMBER SHIFT COUNT. 
*                            RUNWD   - MODULE NUMBER WORD ADDRESS.
*                            LODA    - LAST MODULE LOADED NAME. 
*                            BLANKS  - DISPLAY CODE BLANKS. 
*                            IRB     - PPU INPUT REGISTER.
*                            FCHK    - MODULE CHECKPOINTED FLAG.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 5, 6.
*                B - 2, 3.
* 
*         MESSAGES   END OF TEST SERIES MNENN.
* 
  
**        STEP -01- MOVE END MESSAGE TO K/L DISPLAY THEN STEP 2.
* 
 PPUEND   DATA   0           ENTRY/EXIT 
          SA2    ENDMSG 
          BX6    X2 
          SA6    RUNDIS 
          MX6    0
          SA6    LODC        CLEAR SUBROUTINE CALL ACTIVE FLAG
          SA6    LODD 
  
**        STEP -02- CHECK FOR REPEAT MODULE IF SET THEN STEP 6, ELSE
*                   GET NEXT MODULE TO RUN IF NO MODULE NAME PRESENT
*                   THEN STEP 5, ELSE STEP 3. 
* 
          RJ     RMPPU
          NZ     X1,PEND4    IF REPEAT MODULE FLAG SET
          SA1    RUNAME      GET TEST SERIES NAME 
          SA2    RUNSH       GET SHIFT COUNT
          SB3    X2          (B3) = SHIFT COUNT 
          SA2    RUNWD       GET ADDRESS OF RUN WORD
          SA2    X2          GET RUN WORD 
          LX2    B3          POSITION MODULE NUMBER IN LOWER
          MX5    -12
          BX2    -X5*X2      CLEAR ALL BUT OUR MODULE NO
          ZR     X2,PEND2    IF NO MODULE NUMBER GO TO END TEST SERIES
  
**        STEP -03- POSITION MODULE NAME, UPDATE POINTERS FOR NEXT
*                   MODULE CALL RDSFILE TO LOAD MODULE THEN STEP 4. 
* 
          LX2    42-12
          BX1    X2+X1       (X1) = MODULE NAME COMPLETE
          SX6    B3+12       FORM NEXT SHIFT COUNT
          SB3    B3-60
          NZ     B3,PEND1    IF NOT NEXT WORD 
          SX6    A2+B1       INCREMENT RUN WORD 
          SA6    RUNWD       STORE RUN WORD 
          SX6    59-47       NEW SHIFT COUNT
 PEND1    SA6    RUNSH       STORE NEW SHIFT COUNT
          BX6    X1 
          SA6    LODA        STORE NEW MODULE NUMBER
          RJ     RDSFILE     GO LOAD RFILE
  
**        STEP -04- IF ERROR IN LOADING MODULE THEN STEP 6, ELSE SET
*                   FUNCTION CODE FOR RESUME IN PPU INPUT REGISTER AND
*                   CALL STRPPU TO RESUME MODULE EXECUTION THEN STEP 6. 
* 
          NZ     X1,PEND4    IF ERRORS IN READING MODULE
          SB2    F.RUN
          RJ     STRPPU      START EXECUTION
          EQ     PEND4       RETURN 
  
**        STEP -05- GET TEST SERIES NAME STORE IT INTO MESSAGE AND
*                   CALL POST TO POST MESSAGE, CALL RTPPU TO TEST 
*                   FOR REPEAT TEST IF ON THEN STEP 6, ELSE CLEAR 
*                   CHECKPOINT FLAG THEN STEP 6.
* 
 PEND2    SA1    LODA        GET TEST SERIES NAME 
          BX6    X1 
          SA6    MSGE21A     STORE TEST SERIES NAME INTO MSG
          SB2    MSGE21 
          RJ     POST        MSG (END OF TEST SERIES NNN )
          RJ     RTPPU
          NZ     X1,PEND4    IF REPEAT TEST ON
          MX6    0
          SA6    FCHK        CLEAR CHECK POINT FLAG 
  
**        STEP -06- RETURN. 
* 
 PEND4    EQ     PPUEND      RETURN 
  
 ENDMSG   DATA   10H  END 
          EJECT 
 PPUERR   TITLE  PPUERR - PROCESS PPU ERR FUNCTION. 
**        PPUERR - PROCESS PPU ERR FUNCTION.
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         F.ERR - POST AN ERROR MESSAGE TO ALL ACTIVE OUTPUT DEVICES. 
* 
*         THIS REQUEST IS MADE WHEN AN ERROR IS DETECTED WHICH PREVENTS 
*          CONTINUATION FROM THE CURRENT  POINT  WITHIN  A  MODULE  THE 
*         FOLLOWING FORMAT IS WRITTEN TO THE OUTPUT REGISTER. 
* 
*         THE  EXECUTIVE  WRITES  THE REQUESTED ERROR MESSAGE TO ACTIVE 
*         OUTPUT DEVICES.  THE MODULE NAME, ERR CODE  AND  ERR  ADDRESS 
*         ARE  INSERTED  IN  FRONT  OF  THE REQUESTED MSG IN THE FORMAT 
*         FORMAT BELOW; 
* 
*           WWWWWW ERXXXX LYYY ZZZZZZZ(BODY OF MESSAGE)ZZZZZZZ
* 
*         AFTER PROCESSING THE ERROR MESSAGE,  THE  EXECUTIVE  EXAMINES 
*         THE  STOP-ON-ERROR  SWITCH.   IF  THIS  SWITCH IS NOT SET, IT 
*         CALLS THE PPU DRIVER WITH A *RESUME* COMMAND TO  RESTART  THE 
*         CURRENT  MODULE  AT ITS ENTRY POINT(SCOPING LOOP IN PROGRESS) 
*         IF THE SWITCH IS SET, THE EXECUTIVE READS MORE INPUT FROM THE 
*         SYSTEM K/L DISPLAY IF ON OR THE ACTIVE INPUT FILE.
* 
*         ENTRY          0        1          2         3         4
*                    -------------------------------------------------- 
*                    I        I   MSG   I  ERROR  I  ERROR  I         I 
*                ORB I  0005  I  INDEX  I  CODE   I ADDRESS I  XXXX   I 
*                    -------------------------------------------------- 
* 
*                   BYTE 0 = FUNCTION CODE. 
*                   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 ERR. 
*                   BYTE 4 = XXXX INDICATES NOT USED. (ANY VALUE) 
* 
*         EXIT     NONE.
* 
*         ROUTINES CALLED -  LSTERR - POST PPU ERR MESSAGE. 
*                            STRPPU - START PPU EXECUTION.
*                            POST   - POST MESSAGE. 
* 
*         DATA AREAS USED -  ERMSG  - ERROR IN DISPLAY CODE.
*                            CLINE  - OUTPUT LINE BUFFER. 
*                            BLANKS - BLANKS IN DISPLAY CODE. 
*                            FSE    - STOP ON ERROR FLAG. 
*                            RUNDIS - K/L DISPLAY STATUS WORD.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
*                B - 2, 3, 5. 
* 
*         MESSAGES   ( XXXXXX ENNN AMMM  MESSAGE )
* 
  
**        STEP -01- PUT ERROR INTO K/L DISPLAY FOR PPU STATUS, CLEAR
*                   CLINE WORD ONE, CALL LSTERR TO FORMAT ERROR MESSAGE 
*                   THEN CALL POST TO POST MESSAGE THEN STEP 2. 
* 
 PPUERR   DATA   0
          SA2    ERRMSG 
          BX6    X2 
          SA6    RUNDIS 
          SA6    CLINE       STORE CLINE WORD ONE WITH ERROR
          SB3    CLINE+1
          SB5    ORB
          RJ     LSTERR 
          MX6    0
          SA6    CLINE+6     STORE ZERO WORD
          SB2    CLINE
          RJ     POST        POST MESSAGE 
  
**        STEP -02- CHECK STOP ON ERROR IF ON THEN STEP 3, ELSE CALL
*                   STRPPU TO RESUME MODULE EXECUTION THEN STEP 3.
* 
          SA1    FSE
          NZ     X1,ERR1     IF STOP ON ERROR ON  (SE)
          SB2    F.RES
          RJ     STRPPU      RESUME PPU EXECUTION 
  
**        STEP -03- RETURN
* 
 ERR1     EQ     PPUERR      RETURN 
  
 ERRMSG   DATA   10H ERROR
          EJECT 
 PPUHLT   TITLE  PPUHLT - PROCESS PPU HALT FUNCTION.
**        PPUHLT - PROCESS PPU HALT FUNCTION. 
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         THIS REQUEST IS MADE WHEN THE *HALT* STATEMENT  IS  EXECUTED. 
*         THE EXECUTIVE SETS THE PAUSE BIT IF TERMINAL MODE FLAG OFF
*         AND K/L DISPLAY FLAG OFF.  THE EXECUTIVE THEN WAITS FOR THE 
*         PAUSE BIT TO CLEAR BEFORE A RESUME IS DONE.  IF TERMINAL MODE 
*         OR K/L DISPLAY ON PPUHLT RETURNS WITHOUT A RESUME.
* 
*         ENTRY         0         1         2        3         4
*                  ---------------------------------------------------
*             ORB  I   0006  I  XXXX   I  XXXX   I  XXXX   I  YYYY   I
*                  ---------------------------------------------------
* 
*                  YYYY = NONE ZERO IF PAUSE COMMAND. 
* 
*         EXIT   MODULE RESUMED IF FTERM = 0  AND FKL=0.
* 
*         ROUTINES CALLED -  STRPPU - START PPU EXECUTION.
* 
*         DATA AREAS USED -  HLTMSG - DISPLAY CODE HALT MESSAGE.
*                            FKL    - K/L DISPLAY ON/OFF FLAG.
*                            FTERM  - TERMINAL MODE FLAG. 
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
*                B - 2. 
* 
*         MESSAGES  HALT  MESSAGE TO THE B DISPLAY. 
*                   HALT - STOPPED ON ERROR 
*                   N.GO/DROP HALT STOPPED ON ERROR.                     MAL026G
* 
  
**        STEP -01- MOVE HALT/PAUSE TO STATUS WORD. THEN GO TO STEP 2 
*                   IF PAUSE COMMAND, ELSE POST MESSAGE ON B DISPLAY
*                   (HALT - STOPPED ON ERROR) 
* 
 PPUHLT   DATA   0           ENTRY/EXIT 
          SA2    HLTMSG 
          BX6    X2 
          SA6    RUNDIS 
          SA1    ORB
          MX5    -12
          BX1    -X5*X1 
          ZR     X1,HLT1     IF NOT  PAUSE COMMAND
          SA1    PAUMSG 
          BX6    X1 
          SA6    RUNDIS      STORE PAUSE MESSAGE
          EQ     HLT2 
  
 HLT1     SB2    MSGE43 
          SA1    FTERM                                                   MAL026G
          NZ     X1,HLT1A    IF TERMINAL                                 MAL026G
          SA1    FKL                                                     MAL026G
          NZ     X1,HLT1A    IF KL                                       MAL026G
          SB2    MSGE43A     N.GO/DROP STOPPED ON ERROR                  MAL026G
 HLT1A    RJ     POST        SEND MESSAGE                                MAL026G
**        STEP -02- CHECK IF TERMINAL MODE IF YES THEN STEP 3, ELSE SET 
*                   PAUSE BIT AT RA THEN WAIT FOR PAUSE TO CLEAR THEN 
*                   STEP 3. 
* 
 HLT2     SA1    FTERM
          NZ     X1,HLT21    IF TERMINAL MODE ON
          SA1    FKL
          ZR     X1,HLT2A    IF K/L DISPLAY OFF 
 HLT21    SX6    B1 
          SA6    FEOFI       TURN OFF INPUT FILE
          SA6    FSUSPI      SET SUSPEND INPUT ON HALT
          EQ     HLT4 
 HLT2A    SX6    10000B 
          SA6    B0 
  
 HLT3     RECALL
          SA1    B0 
          SX6    10000B 
          BX1    X1*X6
          NZ     X1,HLT3     LOOP UNTIL PAUSE CLEAR 
          SB2    F.RES
          RJ     STRPPU      RESUME PPU 
          RTIME  MTRIN       RESET CLOCK OF PPU START TIME
  
**        STEP -03- RETURN. 
* 
 HLT4     EQ     PPUHLT      RETURN 
  
 HLTMSG   DATA   10H HALT 
 PAUMSG   DATA   10H PAUSE
          EJECT 
 PPULOD   TITLE  PPULOD - PROCESS LOAD PPU FUNCTION.
**        PPULOD - PROCESS LOAD PPU FUNCTION. 
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         F.LOD - LOAD A MODULE FROM THE RANDOM FILE FOR EXECUTION. 
* 
*         THIS REQUEST IS MADE WHEN THE *EXIT* STATEMENT IS EXECUTED BY 
*         THE PPU DRIVER. 
* 
*         BYTES 3 AND 4 ARE ZERO IF THERE IS NO MODULE NUMBER SPECIFIED 
*         BY THE *EXIT* STATEMENT.  IF THEY  ARE  ZERO,  THE  EXECUTIVE 
*         TESTS THE REPEAT-MODULE SWITCH.  IF SET, IT RE-LOADS THE LAST 
*         PRIMARY MODULE ( TWO DIGIT NUMBERED MODULE).  IF NOT SET,  IT 
*         CONTINUES  THE  SEQUENCE  BELOW TO DETERMINE WHICH MODULE, IF 
*         ANY, TO LOAD.  THIS TECHNIQUE MUST BE USED WHEN A MODULE  HAS 
*         SUB-MODULES AND THE CURRENT CONTENT OF THE MODULE BUFFER IS A 
*         SUB-MODULE- THE PRIMARY MODULE MUST BE  RE-LOADED.  IF  THERE 
*         HAVE  BEEN  NO SUB-MODULES EXECUTED FOR A PRIMARY MODULE, THE 
*         PPU DRIVER HANDLES THE REPEAT-MODULE WITHOUT A REQUEST TO THE 
*         EXECUTIVE.
* 
*         IF THERE IS A MODULE NUMBER SPECIFIED,IT IS A THREE CHARACTER 
*         DISPLAY-CODE NUMBER OF THE MODULE TO LOAD. (RIGHT  JUSTIFIED, 
*         BINARY ZERO FILLED).
* 
*         THE  EXECUTIVE  RECOGNIZES  THE  REQUEST AND DETERMINES WHICH 
*         MODULE TO LOAD.  IF NO MODULE NUMBER IS SPECIFIED, A TEST  IS 
*         MADE TO FIND THE NEXT SEQUENTIAL MODULE IN THE SERIES.  IF WE 
*         ARE EXECUTING OUT OF A TEST STRING, THE NEXT  MODULE  IN  THE 
*         STRING  IS  SELECTED.  IF ANY OF THE FOLLOWING CONDITIONS ARE 
*         DETECTED, THE EXECUTIVE READS MORE INPUT FROM THE SYSTEM  K/L 
*         DISPLAY IF ACTIVE OR FROM THE ACITIVE INPUT FILE. 
* 
*           1. ALL MODULES HAVE BEEN EXECUTED  AND  REPEAT-TEST  IS NOT 
*              SELECTED  ( IF REPEAT TEST IS SELECTED, THE FIRST MODULE 
*              IN THE STRING IS RE-LOADED FOR EXECUTION)
* 
*           2. THE SPECIFIC MODULE REQUESTED  DOES  NOT  EXIST  ON  THE 
*              RANDOM FILE. 
* 
*           3. A CHECKSUM ERROR OCCURS WHEN READING THE NEXT MODULE.
* 
*           4. THE NEXT MODULE DOES NOT SUPPORT THE DEVICE CODE THAT IS 
*              CURRENTLY ASSIGNED.
* 
*         IF A MODULE IS LOADED,THE EXECUTIVE CALLS THE PPU DRIVER WITH 
*         A *RESUME* REQUEST TO EXECUTE THE  NEW  MODULE.   IT  MAY  BE 
*         NECESSARY FOR THE DRIVER TO LOAD AND INITIALIZE A NEW PRODUCT 
*         OVERLAY IF THERE IS A CHANGE FROM HIGH-TO-LOW OR  LOW-TO-HIGH 
*         LANGUAGE LEVELS BETWEEN THIS AND THE LAST EXECUTED MODULE.THE 
*         DRIVER VERIFIES THE VERSION OF THE  MODULE  AGRESS  WITH  THE 
*         VERSION OF THE PRODUCT OVERLAY BEFORE EXECUTION BEGINS (ISSUE 
*         AN *F.ABT* FUNCTION IF NOT) 
* 
*         ENTRY    59       47        35         23    17 
*                 ----------------------------------------------------
*           IRB   I  0000  I  XXXXXX I XXXXXXXX I         I SWITCHES I
*                 I--------I---------I----------I--------------------I
*           ORB   I  0007  I  P ADDR I STK ADDR I     I MODULE  NAME I
*                 ----------------------------------------------------
* 
*         EXIT   MODULE RESUMED IF SUBMODULE LOADED.
*                MODULE START IF PRIMARY MODULE LOAD. 
* 
*         ROUTINES CALLED -  RDSFILE - READ RANDOM FILE.
*                            FILL    - FILL BUFFER WITH DATA. 
*                            RMPPU   - TEST FOR REPEAT MODULE.
*                            POST    - POST ERROR MESSAGE.
*                            RTPPU   - TEST FOR REPEAT TEST.
*                            STRPPU  - START MODULE EXECUTION.
*                            INRMOD  - INCREMENT MODULE NUMBERS.
* 
*         DATA AREAS USED -  LODMSG - DISPLAY CODE LOAD MESSAGE.
*                            RUNDIS - K/L DISPLAY STATUS WORD.
*                            LODA   - LAST PRIMARY MODULE LOADED WORD.
*                            IRB    - PPU INPUT REGISTER. 
*                            ORB    - PPU OUTPUT REGISTER.
*                            RUNAME - TEST SERIES NAME. 
*                            RUNSH  - SHIFT COUNT FOR SERIES NUMBER.
*                            RUNWD  - ADDRESS OF SERIES NUMBER. 
*                            TRUN   - TABLE OF MODULE NUMBERS.
*                            BLANKS - DISPLAY CODE BLANKS.
* 
*         USES   A - 1, 2, 6, 7.
*                X - 1, 2, 5, 6, 7. 
*                B - 2, 3.
* 
*         MESSAGES   END OF TEST SERIES MNENN.
* 
  
**        STEP -01- MOVE LOAD INTO K/L DISPLAY OF MODULE STATUS,
*                   GET INPUT REGISTER MODULE NAME IF NOT SPECIFIED 
*                   THEN STEP 3, ELSE STEP 2. 
* 
 PPULOD   DATA   0           ENTRY/EXIT 
          SA2    LODMSG 
          BX6    X2 
          SA6    RUNDIS 
          SX6    F.RUN
          SA6    LODB        INITIALIZE FOR RUN 
          SA1    ORB
          MX5    -18         (X5) = MASK BITS 59-17 
          BX1    -X5*X1 
          ZR     X1,LOD1     IF NO MODULE NAME SPECIFIED
  
**        STEP -02- GET TEST SERIES NAME COMBINE IT WITH NUMBER THEN
*                   STEP 10.
* 
          SA2    ORB
          MX5    12 
          LX2    59-35
          BX2    X5*X2
          ZR     X2,LOD0B    IF NOT SUB CALL
          SA2    LODC 
          ZR     X2,LOD0A    IF NO CALL ACTIVE
          SB2    MSGE42 
          RJ     POST        POST MSG MULTIPLE CALLS-MODULE TERMINATED
          EQ     LOD8 
  
 LOD0A    SA2    ORB
          BX6    X2 
          SA6    LODC        STORE OUTPUT REGISTER FROM CALL
          SA2    MODULE 
          BX6    X2 
          SA6    LODD        STORE NAME OF CALLER 
 LOD0B    LX1    41-17
          SA2    LODA        GET MODULE SERIES NAME 
          MX5    18 
          BX2    X5*X2       CLEAR MODULE NUMBER FROM MODULE NAME 
          BX1    X1+X2       ADD MODULE NAME FOR CALL FROM ORB
          SX6    F.RES
          SA6    LODB        STORE RESUME CODE FOR MODULE 
          SA2    IRB
          SX6    L.SUB       FLAG SUB-MODULE LOAD 
          LX6    36 
          BX6    X6+X2
          SA6    A2          STORE PRIMARY LOAD INTO INPUT REGISTER 
          EQ     LOD7        JUMP TO GET MODULE BUT DO NOT UPDATE NAME
  
**        STEP -03- TEST CALL RETURN ACTIVE IF NO SET THEN STEP 5, ELSE 
*                   SET UP REGISTERS THEN STEP 10.
* 
 LOD1     SA1    LODC 
          ZR     X1,LOD1B    IF NO CALL ACTIVE
          SX6    F.RES
          SA6    LODB        STORE RESUME CODE
          LX1    12 
          MX5    24 
          BX6    X5*X1
          LX6    36 
          SA1    IRB
          MX5    -12
          BX1    -X5*X1      EXTRACT SWITCHES 
          BX6    X6+X1
          SA6    A1 
          SA1    LODD 
          MX6    0
          SA6    LODC        CLEAR SUBROUTINE CALL ACTIVE FLAG
          SA6    LODD 
          MX5    36 
          BX1    X5*X1       (X1) = MODULE NAME CALL CAME FROM
          MX5    30 
          BX5    X5*X1
          BX5    X5-X1
          SX6    L.SUB
          SA2    IRB
          NZ     X5,LOD1A    IF SUB MODULE LOAD 
          SX6    L.PRI
 LOD1A    LX6    36 
          BX6    X6+X2
          SA6    A2          STORE MODULE TYPE (SUB OR PRIMARY) 
          MX6    0
          SA6    LODC        CLEAR ENTRY FOR NEXT CALL
          SA6    LODD        CLEAR ENTRY FOR NEXT CALL
          EQ     LOD7        GO LOAD MODULE 
  
*         STEP -04- CALL RMPPU TO TEST FOR REPEAT  MODULE  IF  ON  THEN 
*                   STEP 11, ELSE STEP 5. 
  
 LOD1B    RJ     RMPPU       CHECK FOR REPEAT MODULE
          NZ     X1,LOD8     IF REPEAT MODULE ON
  
**        STEP -05- GET MODULE NAME FROM TABLE IF PRESENT THEN STEP 8,
*                   ELSE STEP 6.
* 
          SA1    RUNAME      (X1) = TEST SERIES NAME
          SA2    RUNSH
          SB3    X2          (B3) = SHIFT COUNT 
          SA2    RUNWD       GET ADDRESS OF RUN WORD
          SA2    X2 
          LX2    B3          POSITION MODULE NUMBER IN LOWER
          MX5    -12
          BX2    -X5*X2      CLEAR ALL BUT OUR MODULE NO
          NZ     X2,LOD3     IF MODULE NUMBER PRESENT 
  
**        STEP -06- CHECK IF ANY MODULE NUMBERS WERE IN TABLE, IF SOME
*                   WERE IN TABLE THEN STEP 7, ELSE CALL INRMOD TO GET
*                   NEXT MODULE IF ANY PRESENT THEN STEP 9, ELSE
*                   STEP 7. 
* 
          SA2    TRUN 
          NZ     X2,LOD2     IF MODULES IN TABLE
          RJ     INRMOD      GO GET NEXT INCREMENT OF MODULE NUMBER 
          NZ     X1,LOD6     IF MODULE PRESENT
  
**        STEP -07- GET LAST MODULE LOADED STORE IT IN END OF TEST
*                   SERIES MESSAGE AND CALL POST TO SEND IT TO USER 
*                   THEN STEP 11. 
* 
 LOD2     SA1    LODA        GET LAST MODULE RUN WORD 
          BX6    X1 
          SA6    MSGE21A
          SB2    MSGE21 
          RJ     POST        POST END OF TEST SERIES MESSAGE
          RJ     RTPPU
          EQ     LOD8 
  
**        STEP -08- FORMAT MODULE NAME AND UPDATE RUNWD AND RUNSH FOR 
*                   NEXT MODULE THEN STEP 9.
* 
 LOD3     LX2    41-11       MOVE MODULE NUMBER INTO POSITION 
          BX1    X2+X1       (X1) = MODULE NAME COMPLETE
          SX6    B3+12       FORM NEXT SHIFT COUNT
          SB3    B3-60
          NZ     B3,LOD4     IF NOT NEXT WORD 
          SX6    A2+B1       INCREMENT RUN WORD 
          SA6    RUNWD       STORE RUN WORD 
          SX6    59-47       NEW SHIFT COUNT
 LOD4     SA6    RUNSH       STORE NEW SHIFT COUNT
  
**        STEP -09- UPDATE MODULE NAME THEN STEP 10.
* 
 LOD6     BX6    X1 
          SA6    LODA        STORE NEW MODULE NUMBER
          SA2    IRB
          SX6    L.PRI       FLAG PRIMARY LOAD
          LX6    36 
          BX6    X6+X2
          SA6    A2          STORE PRIMARY LOAD INTO INPUT REGISTER 
  
**        STEP -10- CALL RDSFILE TO LOAD MODULE FROM RANDOM FILE IF 
*                   ERROR IN LOADING THEN STEP 11, ELSE CALL STRPPU TO
*                   RESUME MODULE EXECUTION THEN STEP 11. 
* 
 LOD7     RJ     RDSFILE     GO LOAD RFILE
          NZ     X1,LOD8     IF ERRORS DO NOT START MODULE
          SA1    LODB 
          SB2    X1 
          RJ     STRPPU      START PPU EXECUTION
  
**        STEP -11- RETURN. 
* 
 LOD8     SA1    IRB
          MX6    -36
          BX6    -X6*X1 
          SA6    A1          CLEAR INPUT REGISTER UPPER 24 BITS 
          MX6    0
          SA6    FCHK        CLEAR CHECKPOINT FLAG
          EQ     PPULOD 
  
 LODMSG   DATA   10H LOAD 
          EJECT 
 PPUMSG   TITLE  PPUMSG - PROCESS PPU MSG FUNCTION. 
**        PPUMSG - PROCESS PPU MSG FUNCTION.
* 
*         G. L. GOLDEN.  77/03/01.
* 
*         PPUMSG IS USED TO PROCESS THE PPU MSG STATEMENT WHEN IT IS
*         USED TO PRINT OR POST A MESSAGE ONTO THE OUTPUT FILE OR INTO
*         THE DAYFILE.
* 
* 
*         ENTRY          0      1       2      3      4 
*                    -------------------------------------- 
*                ORB I  0013 I XXXX  I XXXX I XXXX I XXXX I 
*                    -------------------------------------- 
* 
*                DB(120) = BYTE 3 IS USED TO DIRECT WHERE TO PLACE MSG. 
* 
*                          50  = DISPLAY
*                          51  = DAYFILE
*                          52  = PRINT
*                          53  = PRINT+DAYFILE
*                          54  = DISPLAY
*                          55  = DISPLAY+DAYFILE
*                          56  = DISPLAY+PRINT
*                          57  = DISPLAY+PRINT+DAYFILE
* 
* 
*         EXIT   MESSAGE PRINTED OR PLACED INTO DAYFILE.
* 
*         ROUTINES CALLED    PRINT  - PRINT LINE ON OUTPUT FILE.
*                            STRPPU - START MODULE EXECUTION. 
*                            FILL   - FILL BUFFER AREA. 
*                            MSG    - PLACE MESSAGE INTO DAYFILE. 
*                            PPUMSG16 PROCESS PPU MSG FUNCTION
*                                     WHEN 16-BIT MALET.
* 
*         DATA AREAS USED    CLINE  - PRINT LINE BUFFER.
*                            PMSGA  - CONSTANT FOR MSG STATUS MSG.
* 
*         USES   A - 1, 6.
*                X - 1, 2, 5, 6.
*                B - 2, 3.
* 
*         MESSAGES  NONE. 
* 
  
**        STEP -01- PLACE MSG INTO STATUS DISPLAY THEN STEP 2.
* 
 PPUMSG   DATA   0           ENTRY/EXIT 
          SA1    MODULE+5    GET 16BIT FLAG 
          LX1    59-12
          PL     X1,PMSG     IF NOT 16-BIT MALET
          RJ     PPUMSG16    IF 16-BIT MALET
          EQ     PPUMSG      RETURN 
 PMSG     SA1    PMSGA
          BX6    X1 
          SA6    RUNDIS      STORE MSG INTO STATUS WORD FOR DISPLAY 
  
**        STEP -02- CHECK IF DISPLAY ONLY IF  YES  THEN  STEP  6,  ELSE 
*                   CHECK IF PLACE MESSAGE INTO DAYFILE IF NO THEN STEP 
*                   3, ELSE CALL MSG TO PLACE MESSAGE INTO DAYFILE,THEN 
*                   STEP 4. 
* 
          SA1    DB+120 
          AX1    12 
          SX2    X1-50B 
          ZR     X1,PMSG4    IF DISPLAY ONLY
          SX5    SUB.DAY
          BX2    X5*X1
          ZR     X2,PMSG2    IF NOT MESSAGE BIT 
          LX5    12 
          SA1    DB+120 
          BX6    -X5*X1      CLEAR SUB.DAY BIT FROM MSG 
          SA6    A1 
          SB2    UPKL 
          SB3    5
          SB4    PMSGB
 PMSG1    SA1    B2+B3             READ K/L AREA
          SX5    55B
          SX4    77B
          SB5    10 
          BX7    X1 
 PMSG1A   BX3    X7*X4
          ZR     X3,PMSG1B         IF ZERO BYTE 
          BX3    X3-X5
          NZ     X3,PMSG1C         IF NOT BLANK 
          BX7    -X4*X7            CLEAR TRAILING BLANK 
 PMSG1B   LX4    6
          LX5    6
          SB5    B5-B1
          NZ     B5,PMSG1A         IF NOT DONE W/ WORD
          SA7    B3+B4             STORE WORD 
          SB3    B3-B1
          GE     B3,PMSG1          IF ALL WORDS NOT DONE
          EQ     PMSG1D            BLANK MESSAGE
 PMSG1C   SA7    B3+B4             STORE WORD 
          SB3    B3-B1
          LT     B3,PMSG1D         IF ALL DONE
          SA1    B2+B3             READ WORD
          BX7    X1 
          EQ     PMSG1C 
 PMSG1D   SB2    B4 
          RJ     MSG         GO POST MESSAGE INTO DAYFILE 
          SA1    DB+120 
          AX1    12 
  
**        STEP -04- CHECK IF MESSAGE TO BE SENT TO PRINT IF NO THEN 
*                   STEP 5, ELSE CALL PRINT TO PLACE MESSAGE ON OUTPUT
*                   FILE THEN STEP 5. 
* 
 PMSG2    SA1    DB+120 
          AX1    12 
          SX5    SUB.PRT
          BX2    X5*X1
          ZR     X2,PMSG3    IF NOT PRINT 
          LX5    12 
          SA1    DB+120 
          BX6    -X5*X1      CLEAR SUB.DAY BIT FROM MSG 
          SA6    A1 
          SA1    UPKL-1 
          SA2    BLANKS 
          BX6    X1 
          SA6    PMSGC
          BX6    X2 
          SA6    A1 
          CLOCK  UPKL-1 
          SB2    UPKL-1 
          RJ     PRINT       GO PRINT LINE
          SA1    PMSGC
          BX6    X1 
          SA6    UPKL-1 
  
**        STEP -05- CHECK IF MESSAGE TO BE SENT TO DISPLAY IF YES THEN
*                   STEP 6, ELSE CLEAR DB ENTRY AND THEN STEP 6.
* 
 PMSG3    SA1    DB+120 
          AX1    12 
          SX5    SUB.DIS
          BX2    X5*X1
          NZ     X2,PMSG4    IF DISPLAY DO NOT CLEAR
          SB2    DB+120 
          SB3    DB+122 
          MX1    0
          RJ     FILL        CLEAR DB ENTRY NO DISPLAY
  
**        STEP -06- RESUME PPU, THEN RETURN.
* 
 PMSG4    SB2    F.RES
          RJ     STRPPU      RESUME PPU 
          EQ     PPUMSG      RETURN 
  
 PMSGA    DATA   10H MSG
 PMSGB    BSSZ   6                 PPU MESSAGE PUT HERE 
 PMSGC    DATA   0
          EJECT 
 PPUMSG16 TITLE  PPUMSG16 - PROCESS PPU MSG FUNCTION. 
**        PPUMSG16 - PROCESS PPU MSG FUNCTION.
* 
*         G. L. GOLDEN.  77/03/01.
*         M. S. FABBRINI.  82/10/07.     ADAPTED FOR USE BY 16-BIT MALET. 
* 
*         PPUMSG16 IS USED TO PROCESS THE PPU MSG STATEMENT WHEN IT IS
*         USED TO PRINT OR POST A MESSAGE ONTO THE OUTPUT FILE OR INTO
*         THE DAYFILE.
* 
* 
*         ENTRY          0      1       2      3      4 
*                    -------------------------------------- 
*                ORB I  0013 I XXXX  I XXXX I XXXX I XXXX I 
*                    -------------------------------------- 
* 
*                DB(160) = BYTE 3 IS USED TO DIRECT WHERE TO PLACE MSG. 
* 
*                          50  = DISPLAY
*                          51  = PRINT
*                          52  = DAYFILE
*                          53  = PRINT+DAYFILE
*                          54  = DISPLAY
*                          55  = DISPLAY+DAYFILE
*                          56  = DISPLAY+PRINT
*                          57  = DISPLAY+PRINT+DAYFILE
* 
* 
*         EXIT   MESSAGE PRINTED OR PLACED INTO DAYFILE.
* 
*         ROUTINES CALLED    PRINT  - PRINT LINE ON OUTPUT FILE.
*                            STRPPU - START MODULE EXECUTION. 
*                            FILL   - FILL BUFFER AREA. 
*                            MSG    - PLACE MESSAGE INTO DAYFILE. 
* 
*         DATA AREAS USED    CLINE  - PRINT LINE BUFFER.
*                            PMSGA  - CONSTANT FOR MSG STATUS MSG.
* 
*         USES   A - 1, 6.
*                X - 1, 2, 5, 6.
*                B - 2, 3.
* 
*         MESSAGES  NONE. 
* 
  
**        STEP -01- PLACE MSG INTO STATUS DISPLAY THEN STEP 2.
* 
 PPUMSG16 DATA   0           ENTRY/EXIT 
          SA1    PMSG16E
          BX6    X1 
          SA6    RUNDIS      STORE MSG INTO STATUS WORD FOR DISPLAY 
  
**        STEP -02- CHECK IF DISPLAY ONLY IF  YES  THEN  STEP  6,  ELSE 
*                   CHECK IF PLACE MESSAGE INTO DAYFILE IF NO THEN STEP 
*                   3, ELSE CALL MSG TO PLACE MESSAGE INTO DAYFILE,THEN 
*                   STEP 4. 
* 
          SA1    DB+160 
          SX5    SUB.DAY
          BX2    X5*X1
          ZR     X2,PMSG16B  IF NOT MESSAGE BIT 
          BX6    -X5*X1      CLEAR SUB.DAY BIT FROM MSG 
          SA6    A1 
          SB2    UPKL 
          SB3    5
          SB4    PMSG16F
 PMSG16   SA1    B2+B3             READ K/L AREA
          SX5    55B
          SX4    77B
          SB5    10 
          BX7    X1 
 PMSG16A  BX3    X7*X4
          ZR     X3,PMSG16A1       IF ZERO BYTE 
          BX3    X3-X5
          NZ     X3,PMSG16A2       IF NOT BLANK 
          BX7    -X4*X7            CLEAR TRAILING BLANK 
 PMSG16A1 LX4    6
          LX5    6
          SB5    B5-B1
          NZ     B5,PMSG16A        IF NOT DONE W/ WORD
          SA7    B3+B4             STORE WORD 
          SB3    B3-B1
          GE     B3,PMSG16         IF ALL WORDS NOT DONE
          EQ     PMSG16A3          BLANK MESSAGE
 PMSG16A2 SA7    B3+B4             STORE WORD 
          SB3    B3-B1
          LT     B3,PMSG16A3       IF ALL DONE
          SA1    B2+B3             READ WORD
          BX7    X1 
          EQ     PMSG16A2 
 PMSG16A3 SB2    B4 
          RJ     MSG         GO POST MESSAGE INTO DAYFILE 
  
**        STEP -04- CHECK IF MESSAGE TO BE SENT TO PRINT IF NO THEN 
*                   STEP 5, ELSE CALL PRINT TO PLACE MESSAGE ON OUTPUT
*                   FILE THEN STEP 5. 
* 
 PMSG16B  SA1    DB+160 
          SX5    SUB.PRT
          BX2    X5*X1
          ZR     X2,PMSG16C  IF NOT PRINT 
          BX6    -X5*X1      CLEAR SUB.PRT BIT FROM MSG 
          SA6    A1 
          SA1    UPKL-1 
          SA2    BLANKS 
          BX6    X1 
          SA6    PMSG16G
          BX6    X2 
          SA6    A1 
          CLOCK  UPKL-1 
          SB2    UPKL-1 
          RJ     PRINT       GO PRINT LINE
          SA1    PMSG16G
          BX6    X1 
          SA6    UPKL-1 
  
**        STEP -05- CHECK IF MESSAGE TO BE SENT TO DISPLAY IF YES THEN
*                   STEP 6, ELSE CLEAR DB ENTRY AND THEN STEP 6.
* 
 PMSG16C  SA1    DB+160 
          SX5    SUB.DIS
          BX2    X5*X1
          NZ     X2,PMSG16D  IF DISPLAY DO NOT CLEAR
          SB2    DB+160 
          SB3    DB+163 
          MX1    0
          RJ     FILL        CLEAR DB ENTRY NO DISPLAY
  
**        STEP -06- RESUME PPU, THEN RETURN.
* 
 PMSG16D  SB2    F.RES
          RJ     STRPPU      RESUME PPU 
          EQ     PPUMSG16    RETURN 
  
 PMSG16E  DATA   10H MSG
 PMSG16F  BSSZ   6                 PPU MESSAGE PUT HERE 
 PMSG16G  DATA   0
          EJECT 
 PPUPIC   TITLE  PPUPIC - PROCESS PPU PICTURE FUNCTION. 
**        PPUPIC - PROCESS PPU PICTURE FUNCTION.
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         F.PIC - TAKE A SNAPSHOT OF THE DISPLAY AND PLOT BUFFERS.
* 
*         THE  CPU  RECOGNIZES THE REQUEST AND PROCESSES THE PPU BUFFER 
*         DB AND PB TO THE CURRENTLY ACTIVE  OUTPUT  DEVICES.  IT  THEN 
*         ZEROS  THE  REQUESTED BUFFER AS SPECIFIED BY BYTE 4.  IT THEN 
*         ZEROS THE FUNCTION BYTE OF THE OUTPUT REGISTER AND CALLS  PPU 
*         DRIVER WITH A *RESUME* REQUEST TO CONTINUE EXECUTION FROM THE 
*         POINT SUSPENDED.
* 
*         ENTRY            0      1       2      3      4 
*                    -------------------------------------- 
*                ORB I  0007 I XXXX  I XXXX I XXXX I FLAG I 
*                    -------------------------------------- 
* 
*                 BYTE 0 = FUNCTION CODE. 
* 
*                 BYTE 4 = BLANK FLAG.
* 
*                      0 = DO NOT CHANGE DISPLAY/PLOT.
*                      1 = ZERO FILL PLOT BUFFER. 
*                      2 = ZERO FILL DISPLAY BUFFER.
*                      3 = ZERO FILL PLOT AND DISPLAY.
* 
*         EXIT   ORB = 0
*                PB  = 0  IF FLAG = 1 OR 3
*                DB  = 0  IF FLAG = 2 OR 3
* 
*         ROUTINES CALLED -  PPUBLK  - CLEAR DISPLAY USING FLAG.
*                            PICTURE - OUTPUT PICTURE TO ACTIVE FILE. 
*                            UPDIS   - UPDATE K/L DISPLAY.
* 
*         DATA AREAS USED -  CLINE   - PRINT LINE BUFFER. 
*                            PPCA    - CONTAINS CURRENT DISPLAY.
*                            FDIS    - DISPLAY TYPE FLAG. 
*                            PICMSG  - PICTURE IN DISPLAY CODE. 
*                            RUNDIS  - DISPLAY CODE MODULE STATUS WORD. 
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
*                B - 3. 
* 
*         MESSAGES  NONE. 
* 
  
**        STEP -01- SAVE CURRENT DISPLAY TYPE FLAG IN PPCA, CHANGE
*                   DISPLAY TO PPU AND CALL PICTURE TO OUTPUT CURRENT 
*                   PPU DISPLAY THEN RETURN DISPLAY TO ORGINAL DISPLAY, 
*                   CALL PPUBLK TO BLANK FILL DB AND/OR PB  AND RETURN
*                   TO CALLER.
* 
 PPUPIC   DATA   0           ENTRY/EXIT 
          SA2    PICMSG 
          BX6    X2 
          SA6    RUNDIS 
          SA1    FDIS 
          BX6    X1 
          SA6    PPCA        SAVE CURRENT DISPLAY 
          SB3    DPPU 
          RJ     UPDIS       UPDATE DISPLAY TO PPU DISPLAY
          MX6    0
          SA6    CRKBUF+1    CLEAR CRACK BUF
          RJ     PICTURE     OUTPUT PICTURE 
          SA1    PPCA 
          SX2    X1-DPPU
          ZR     X2,PPC1     IF PPU DISPLAY WAS PREVIOUSLY UP 
          SB3    X1 
          RJ     UPDIS       CHANGE DISPLAY BACK TO ORGINAL 
 PPC1     RJ     PPUBLK      CLEAR DISPLAY BY BYTE 4 ORB
          EQ     PPUPIC      RETURN TO CALLER 
  
 PPCA     DATA   0           LAST DISPLAY TYPE
 PICMSG   DATA   10H PICTURE
          EJECT 
 PPUSYS   TITLE  PPUSYS - PROCESS PPU SCRATCH FILE FUNCTIONS
**        PPUSYS - PROCESS PPU SCRATCH FILE FUNCTIONS.
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         F.SYS -PERFORM THE REQUESTED SUBFUNCTION ON THE SCRATCH FILE. 
* 
*         THIS  REQUEST  IS  MADE  WHEN  A  *SYSRD*, *SYSWR*, *SYSREW*
*         *SYSRDESM*, *SYSWRESM*, OR  *SYSREWESM*  IS  EXECUTED.
* 
*         WHEN KEYWORD 16BIT IS PRESENT IN THE MODULE CARD, 12-BIT
*         WORDS ARE READ  AND THE ESM FORMS OF THE *SYS*  COMMANDS
*         ARE ILLEGAL.
* 
*         THE EXECUTIVE RECOGNIZES THE REQUEST AND EXECUTES IT.  IF  AN 
*         ERROR  CONDITION  IS DETECTED AND THE DRIVER IS STILL UP, THE 
*         DROP SWITCH IS SEO BEFORE BYTE 0 IS CLEARED TO FORCE THE  PPU 
*         TO DROP AS SOON AS IT NOTES BYTE 0 IS CLEARED.
* 
*         IF  THE PPU IS NOT STILL IN EXECUTION AND THE *SYS* STATEMENT 
*         IS COMPLETED SUCCESSFULLY,THE EXECUTIVE CALLS THE PPU WITH  A 
*         *RESUME*  FUNCTION  TO  CONTINUE  EXECUTION  FROM  THE  POINT 
*         SUSPENDED.
* 
*         ENTRY         0       1         2       3       4 
*                   ------------------------------------------
*                ORB I 4010 I SUBFUNC I WC FOR I XXXX I XXXX I
*                    I      I  CODE   I  READ  I      I      I
*                   ------------------------------------------
* 
*               BYTE 0 = FUNCTION  CODE ( BIT 11 OF THIS BYTE IS SET IF 
*                        CHAINING I/O IS ACTIVE TO  INDICATE  THAT  THE 
*                        PPU DRIVER IS STILL IN EXECUTION.  IF CHAINING 
*                        IS NOT IN  PROGRESS,  THIS  BIT  IS  CLEAR  TO 
*                        INDICATE THAT THE PPU HAS DROPPED. 
* 
*               BYTE 1 = SUBFUNCTION CODE; 0 = SYSRDESM. 1 = SYSWRESM.
*                                          2 = SYSRD.    3 = SYSREW.
*                                          4 = SYSWR.    5 = SYSREWESM. 
*                                          6 = SYSWRCM.  7 = SYSRDCM. 
*                                         10 = SYSRWCM. 
*                                         12 = SYSRDDMA 13 = SYSRWDMA.
*                                         14 = SYSWRDMA.
* 
*         EXIT  ON THE *SYSRD* SUBFUNCTION, THE  EXECUTIVE  STORES  THE 
*               FOLLOWING DATA INTO THE OUTPUT REGISTER.
* 
*                      0         1         2         3         4
*                 --------------------------------------------------- 
*                 I         I         I         I WC FOR  I STATUS  I 
*             ORB I  0000   I  XXXX   I  XXXX   I  READ   I ON READ I 
*                 --------------------------------------------------- 
* 
*                 BYTE 0 = FUNCTION CODE CLEARED TO INDICATE COMPLETION 
*                 BYTE 3 = NUMBER OF BYTES READ FROM THE SCRATCH FILE 
*                 BYTE 4 = STATUS OF THE READ 
* 
*                          0 = NO ERRORS. 
*                          1 = END-OF-RECORD READ 
*                          2 = END-OF-INFORMATION 
*                              OR END-OF-FILE 
*                          3 = ECS/ESM SYSTRANSFER ERROR
* 
* 
*         ROUTINES CALLED -  STRPPU - START PPU EXECUTION.
*                            POST   - POST MESSAGE. 
* 
*         DATA AREAS USED -  FSCR - SCRATCH FILE OPEN FLAG. 
*                            ORB  - PPU OUTPUT REGISTER.
*                            FCHK - PPU CHECKPOINTED FLAG.
*                            FDRP - DROP PPU FLAG PENDING.
*                            FDROP- DROP PPU FLAG.
*                            SCR  - SCRATCH BUFFER FOR DATA.
* 
*         USES   A - 1, 2, 6, 7.
*                X - 1, 2, 3, 5, 6, 7.
*                B - 2. 
* 
*         MESSAGES  MODULE FUNCTION OUT OF RANGE. 
* 
  
**        STEP -01- OPEN SCRATCH FILE IF NOT OPENED ALLREADY THEN  STEP 
*                   2, ELSE STEP 2. 
* 
 PPUSYS   DATA   0           ENTRY/EXIT 
          SA2    SYSMSG 
          BX6    X2 
          SA6    RUNDIS 
          SA1    FSCR        GET SCRATCH FILE OPEN FLAG 
          NZ     X1,SYS0     IF FILE OPEN 
          OPEN   SCRATCH,READ,R 
          REWIND SCRATCH,R
          SX7    B1 
          SA7    FSCR 
  
**        STEP -02- GET SUB FUNCTION CODE AND JUMP  TO  PROCESS  IF  IF 
*                   LEGAL  IF  NOT LEGAL POST MESSAGE -PPU FUNCTION OUT 
*                   OF RANGE) SET DROP FLAG THEN STEP 7.
* 
 SYS0     SA1    ORB         GET INPUT REGISTER 
          MX5    -12
          LX1    36                                                      MAL027K
          BX6    -X5*X1      EXTRACT WORD COUNT                          MAL027K
          SX2    LSCR                                                    MAL027K
          IX2    X2-X6                                                   MAL027K
          PL     X2,SYS1                                                 MAL027K
          IX6    X2+X6       X6=LSCR                                     MAL027K
 SYS1     SA6    SYSB        SAVE FOR I/O                                MAL027K
          AX1    12          POSITION SUBFUNCTION                        MAL027K
          BX1    -X5*X1      CLEAR ALL BUT SUB FUNCTION 
          SX2    X1-SUB.RD
          ZR     X2,SYS4     IF READ 64 WORDS 
          SX2    X1-SUB.REW 
          ZR     X2,SYS5     IF REWIND
          SX2    X1-SUB.WR
          ZR     X2,SYS6     IF WRITE RECORD
          SX2    X1-SUB.RDE 
          ZR     X2,SYS4B    IF READ ESM
          SX2    X1-SUB.WRE 
          ZR     X2,SYS6B    IF WRITE ESM 
          SX2    X1-SUB.REWE
          ZR     X2,SYS5B    IF REWIND ESM
          SX2    X1-SUB.WRC 
          ZR     X2,SYS6D    IF WRITE CM
          SX2    X1-SUB.RDC 
          ZR     X2,SYS4D    IF READ CM 
          SX2    X1-SUB.RWC 
          ZR     X2,SYS5C    IF REWIND CM 
          SX2    X1-SUB.WRD 
          ZR     X2,SYS6K    IF WRITE DMA 
          SX2    X1-SUB.RDD 
          ZR     X2,SYS4K    IF READ DMA
          SX2    X1-SUB.RWD 
          ZR     X2,SYS5C    IF REWIND DMA
          SA1    IRB
          SX6    SW.DRP 
          BX6    X1+X6
          SA6    A1 
          SX6    MSGE19 
          SA6    FDRP 
          SB2    X6 
          RJ     POST 
          SA1    ORB
          BX6    X1 
          SA6    SYSA        SAVE ORB FOR PPU FUNCTION RANGE ERROR
          SA1    FCHK 
          ZR     X1,SYS10    IF MODULE NOT CHECKPOINTED 
          SX6    B1 
          SA6    FDROP       SET DROP FLAG
          EQ     SYS10       RETURN 
  
**        STEP -03- PROCESS READ 64 WORDS TO WORKING STORAGE FUNCTION 
*                   THEN STEP 6.
* 
          IFEQ   NOS,1
 SYS4     SA1    FSYSRD 
          NZ     X1,SYS4A    IF FILE PRIMED WITH READ 
          READ   SCRATCH,R   PRIME FILE 
          SX6    B1 
          SA6    FSYSRD      FLAG FILE PRIMED FOR NEXT READ 
 SYS4A    SA1    SYSB        GET WORD COUNT                              MAL027K
          READW  SCRATCH,SCR,X1                                          MAL027K
          PL     X1,SYS7
          MX6    0
          SA6    FSYSRD       FLAG FILE NOT INITIALIZED 
          SA6    FSYSWR      FLAG FILE NOT READY FOR WRITEF 
          ENDIF 
  
          IFEQ   NOSBE,1                                                 MAL027K
 SYS4     SA1    SYSB        GET WORD COUNT                              MAL027K
          SX6    X1+SCR      FORM LWA+1                                  MAL027K
          SA1    SCRATCH+5                                               MAL027K
          MX2    -18                                                     MAL027K
          BX2    X1*X2                                                   MAL027K
          BX6    X2+X6                                                   MAL027K
          SA6    A1          STORE IN FET                                MAL027K
          READIN SCRATCH,,R                                              MAL027K
          ENDIF                                                          MAL027K
  
          EQ     SYS7 
  
 SYS4B    SA1    FMAXE
          SA2    FESM 
          IX1    X1-X2
          ZR     X1,SYS4C    IF ESM EOI 
          NG     X1,SYS4C    IF ESM EOI 
          SA0    SCR
          BX0    X2          READ ESM FILE
          SB2    100B 
+         RE     B2 
          JP     SYRDER       IF ESM ERROR
          SX2    X2+B2       SET NEXT READ ADDRESS IN ESM 
          BX6    X2 
          SA6    FESM 
          MX1    0
          SX2    B2          SET WORD COUNT 
 SYS4C    MX5    36 
          EQ     SYS7A
  
 SYS4D    SA1    FMAXCM 
          SA2    FLCM 
          IX1    X1-X2
          ZR     X1,SYS4F    IF CM EOI
          NG     X1,SYS4F    IF CM EOI
          SB2    100B 
          SB3    100B 
          SX6    B3 
          SA6    FLCM        SET WORDS TRANSFERRED
          MX1    0
          SX2    B2          SET WORD COUNT 
 SYS4F    MX5    36 
          EQ     SYS7A
  
 SYS4K    SA1    FMAXDM 
          SA2    FLCM 
          IX1    X1-X2
          ZR     X1,SYS4F    IF CM EOI
          NG     X1,SYS4F    IF CM EOI
          SB2    4000B
          SB3    4000B
          SX6    B3 
          SA6    FLCM        SET WORDS TRANSFERRED
          MX1    0
          SX2    B2          SET WORD COUNT 
          EQ     SYS4F
  
**        STEP -04- PROCESS REWIND SCRATCH FILE FUNCTION THEN STEP 7. 
* 
 SYS5     SA1    FSYSWR       GET WRITE FLAG
          ZR     X1,SYS5A    IF FILE NOT WRITTEN ON YET 
          WRITEF SCRATCH,R
 SYS5A    REWIND SCRATCH,R
          IFEQ   NOS+NOS4+NOS5,1,1
          SETFS  SCRATCH,0
          MX6    0
          SA6    FSYSRD      FLAG FILE NOT PRIMED 
          SA6    FSYSWR      FLAG FILE NOT PRIMED FOR WRITEF
          EQ     SYS10       RETURN 
  
 SYS5B    MX6    0
          SA6    FESM        REWIND POINTERS
          EQ     SYS10
  
 SYS5C    MX6    0
          SA6    FLCM        REWIND POINTERS
          EQ     SYS10
  
**        STEP -05- PROCESS WRITE RECORD FROM WORKING STORAGE FUNCTION
*                   THEN STEP 7.
* 
          IFEQ   NOS,1                                                   MAL027K
 SYS6     SA1    SYSB        GET WORD COUNT                              MAL027K
          WRITEW SCRATCH,SCR,X1                                          MAL027K
          ENDIF                                                          MAL027K
  
          IFEQ   NOSBE,1                                                 MAL027K
 SYS6     SA1    SYSB        GET WORD COUNT                              MAL027K
          SX6    X1+SCR      FORM LWA+1                                  MAL027K
          SA1    SCRATCH+5                                               MAL027K
          MX2    -18                                                     MAL027K
          BX2    X1*X2                                                   MAL027K
          BX6    X2+X6                                                   MAL027K
          SA6    A1          STORE IN FET                                MAL027K
          WRITOUT  SCRATCH,,RECALL                                       MAL027K
          ENDIF                                                          MAL027K
          SX6    B1 
          SA6    FSYSWR      FLAG FILE PRIMED FOR WRITEF ON REWIND
          MX6    0
          SA6    FSYSRD      FLAG FILE NOT PRIMED 
  
          EQ     SYS10
  
 SYS6B    SA1    FMAXE
          SA2    FESM 
          IX1    X1-X2
          ZR     X1,SYS6C    IF ESM EOI 
          NG     X1,SYS6C    IF WRITING PAST EOI
          SA0    SCR
          BX0    X2          WRITE ESM FILE 
          SB2    100B 
+         WE     B2 
          JP     SYWRER 
          SX2    X2+B2       SET UP FOR NEXT ESM WRITE
          BX6    X2 
          SA6    FESM 
          EQ     SYS10
  
 SYS6C    EQ     SYS5B       REWIND ESM 
  
 SYS6D    SA1    FMAXCM 
          SA2    FLCM 
          IX1    X1-X2
          ZR     X1,SYS6F    IF CM EOI
          NG     X1,SYS6F    IF WRITING PAST EOI
          SB2    100B 
          SB3    100B 
          SX6    B3 
          SA6    FLCM 
          EQ     SYS10
  
 SYS6F    EQ     SYS5C       REWIND CM
  
 SYS6K    SA1    FMAXDM 
          SA2    FLCM 
          IX1    X1-X2
          ZR     X1,SYS6F    IF DMA EOI 
          NG     X1,SYS6F    IF WRITING PAST EOI
          SB2    4000B
          SB3    4000B
          SX3    B3 
          SA6    FLCM 
          EQ     SYS10
  
**        STEP -06- STORE STATUS IN ORB THEN STEP 7.
* 
 SYS7     MX5    36 
          SA2    SYSB        GET WORD COUNT                              MAL027K
 SYS7A    SX6    5
          IX6    X6*X2       PP BYTES                                    MAL027K
          SA2    ORB
          BX2    X5*X2       CLEAR LOWER BYTES 3 AND 4 FOR STATUS 
          MX5    -12
          MX7    0
          NG     X1,SYS8     IF EOF/EOI ON SCRATCH FILE 
          ZR     X1,SYS9     IF 500B BYTES READ 
          IFEQ   NOS,1,1
          SA7    FSYSRD      SET READ REQUIRED BEFORE READW 
          SX7    B1          SET EOR STATUS 
          SX3    SCR
          IX1    X1-X3             FORM WORD COUNT
          SX3    5
          IX6    X1*X3       MULTIPLY BY FIVE TO FORM BYTE COUNT
          BX6    -X5*X6      CLEAR GARBAGE
          EQ     SYS9 
  
 SYS8     BSS    0
          IFEQ   NOS,1,1
          SA7    FSYSRD      SET READ REQUIRED BEFORE READW 
          BX6    X7          CLEAR WT ON EOF/EOI
          SX7    B1+B1       SET EOF/EOI STATUS (2) 
 SYS9     BX7    -X5*X7 
          BX7    X7+X2       COMBINE STATUS WITH ORB
          LX6    12          POSITION WORD COUNT TO BYTE 3
          BX7    X7+X6
          SA7    ORB         STORE STATUS IN OUTPUT REGISTER
  
**        STEP -07- CLEAR OUTPUT REGISTER FUNCTION CALL STRPPU TO 
*                   RESUME MODULE IF IT WAS CHECKPOINTED THEN STEP 8. 
*                   ELSE STEP 8.
* 
 SYS10    SA1    ORB
          MX5    -48
          BX6    -X5*X1 
          SA6    A1          CLEAR UPPER BITS OF ORB
          SA1    FCHK 
          ZR     X1,SYS12    IF MODULE WAS NOT CHECKPOINTED 
          SB2    F.RES
          RJ     STRPPU      START PPU EXECUTION
  
**        STEP -08- RETURN. 
* 
 SYS12    EQ     PPUSYS      RETURN WE ARE DONE 
  
**        STEP -09- PROCESS ERRORS FOR ECS/ESM TRANSFERS. 
* 
 SYRDER   MX5    36 
          SA2    ORB
          BX2    X5*X2
          MX6    0           CLEAR WT ON ERROR
          SX7    3           SET ECS/ESM TRANSFER ERROR CODE
          EQ     SYS9 
  
 SYWRER   SB2    0
 SYWRER1  SA2    SYERMSG+B2 
          BX6    X2          SET UP SYSTRANSFER ERROR MESSAGE 
          SA6    CLINE+B2 
          SB2    B2+1 
          NZ     X6,SYWRER1   IF MESSAGE NOT COMPLETE 
          SA1    FRUN 
          NZ     X1,SYS10    IF CHAINING CONTINUE 
          SB2    CLINE
          RJ     POST        POST ERROR MESSAGE 
          EQ     SYS12       EXIT 
  
 SYSA     DATA   0           STORAGE FOR PPU ORB IF FUNCTION RANGE ERR
 SYSB     DATA   0           SAVE WORD COUNT                             MAL027K
 SYSMSG   DATA   10H SYSTEM 
 SYERMSG  DIS    ,* ECS/ESM SYSTRANSFER ERROR*
          DATA   0           TERMINATOR FOR MESSAGE 
          EJECT 
 PPUTERM  TITLE  PPUTERM - TERMINATE MALET PPU LOAD ERROR 
**        PPUTERM - TERMINATE MALET PPU LOAD ERROR
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         PPUTERM- FUNCTION IS SENT BY THE PPU IF A PPU LOAD ERROR IS 
*         ENCOUNTERED.  PPUTERM SETS THE DROP FLAG IF THE K/L DISPLAY 
*         NOT ON. 
* 
*         ENTRY  PPU FUNTION = F.TERM.
* 
*         EXIT   (FDROP) = 1. 
* 
*         ROUTINES CALLED -  POST   - POST MESSAGE. 
* 
*         DATA AREAS USED -  FDROP  - CONTAINS DROP FLAG. 
*                            TERMSG - TERMINATE IN DISPLAY CODE.
*                            RUNDIS - K/L DISPLAY MODULE STATUS.
* 
*         USES   A - 2, 6.
*                X - 2, 6.
*                B - 2. 
* 
*         MESSAGES   MODULE INITILIZE ERROR MALET DROPPED.
*                    MODULE INITILIZE ERROR -- SEE DAYFILE. 
* 
  
**        STEP -01- POST MESSAGE PPU LOAD ERROR MALET DROPPED 
*                   SET DROP FLAG THEN RETURN.
* 
 PPUTERM  DATA   0           ENTRY/EXIT 
          SA2    TERMSG 
          BX6    X2 
          SA6    RUNDIS      STORE TERMINATE MESSAGE INTO DISPLAY 
          SA1    FKL
          ZR     X1,TERM1    IF K/L DISPLAY SWITCH OFF
          SB2    MSGE34      K/L DISPLAY ON POST LOAD ERROR MSG 
          RJ     POST 
          EQ     TERM2
  
 TERM1    SB2    MSGE35 
          RJ     POST        POST MODULE LOAD ERROR MALET DROPPED.
          SX6    B1 
          SA6    FDROP       SET DROP FLAG
 TERM2    MX6    0
          SA6    FCHK        CLEAR CHECKPOINT FLAG
          EQ     PPUTERM     RETURN 
  
 TERMSG   DATA   10H TERMINATE
          EJECT 
*         DUMMY ENTRY 
 MALET12  BSS    0
          ENTRY  MALET12
          END    MALET12
