*COMDECK COMBRK 
BRK       TITLE  BRK - BREAKPOINT PROCESSOR.
**        BRK - BREAKPOINT PROCESSOR. 
* 
*         THIS SUBROUTINE ALLOWS THE OPERATOR TO INTERFACE WITH 
*         PP EXECUTION AND PP MEMORY.  THE PP COMMUNICATION AREA
*         IS FORMATTED AS FOLLOWS:  
* 
*         IR     18/NDR, 2/0, 4/CP, 24/0, 12/RHF COMMUNICATION ADDRESS
* 
*         OR     12/PASS, 24/BRK NUM, 12/NEW BRK OR WINDOW ADR, 12/CMD
* 
*         MSG1   12/BRK ADR, 12/WINDOW ADR, 12/EC, 6/0, 18/RA 
* 
*         MSG2   60/PP MEMORY WINDOW WORD ONE 
* 
*         MSG3   60/PP MEMORY WINDOW WORD TWO 
* 
*         MSG4   60/RHF REQUEST WORD ONE
* 
*         MSG5   60/RHF REQUEST WORD TWO
* 
*         MSG6   12/D.T0, 12/D.T1, 12/D.T2, 12/D.T3, 12/D.T4
* 
*         MODIFICATION OF MSG1 THRU MSG6 WILL CAUSE CORRESPONDING 
*         CHANGES IN PP MEMORY, RA, AND RETURN ADDRESS. 
* 
*         CMD    0, CONTINUE PP EXECUTION.
* 
*                1, STORE OLD WINDOW AND READ NEW WINDOW. 
* 
*                2, ADD BREAK POINT.  EC=1 IF BAD OR EXISTING BREAK 
*                   POINT.  THE BREAK POINT MUST OCCUPY TWO CONSECUTIVE 
*                   LOCATIONS THAT CONTAIN INSTRUCTIONS THAT ARE NOT
*                   ADDRESS SENSITIVE LIKE RELATIVE BRANCHES. 
* 
*                3, DELETE BREAK POINT.  EC=1 IF NON-EXISTENT BREAK 
*                   POINT.
* 
*                .GT. 3, EC=1 FOR ILLEGAL CMD.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = (A) ON ENTRY OR OPERATOR MODIFIED. 
* 
*         USES   PRESERVES ALL DIRECT CELLS.
* 
*         CALLS  R.MTR. 
  
  
          LIST   F
 DEBUG    IFNE   DEBUG,0
          IF     DEF,NLD,1
 D.REQ1   SET    D.TW0
          IFNE   DEBUG,1,1
 BRKA     BSSZ   2                 ORIGINAL INSTRUCTIONS FOR INSERTED BR
 BRK      ENM    X                 ENTRY/EXIT 
          STM    BRKH+1            SAVE RA
          SHN    -12
          LPN    77B
          STM    BRKH 
          LDD    D.PPMES1 
          ADN    3
          CWM    D.REQ1,TWO        WRITE D.REQ1 - D.REQ2 TO MSG4 - MSG5 
          CWD    D.T0              WRITE D.T0 - D.T4 TO MSG6
          LDM    BRK
          SBN    2
          STM    BRKE              SAVE BREAK ADDRESS 
 DEBUG1   IFNE   DEBUG,1
          LDN    NUMBRK-1 
          STD    D.T0              NUMBER OF INSERTABLE BREAK POINTS
 BRK1     LDM    BRKI,D.T0
          LMM    BRKE 
          NJN    BRK2              IF NOT INSERTED BREAK POINT CALL 
          LDM    BRKJ,D.T0
          STM    BRKA              INSERT REPLACED INSTRUCTIONS 
          LDM    BRKK,D.T0
          STM    BRKA+1 
          LDK    BRKA              EXECUTE REPLACED INSTRUCTIONS ON RETU
          UJN    BRK3 
  
 BRK2     SOD    D.T0 
          PJN    BRK1              IF MORE INSERTABLE BREAK POINTS
          LDC    BRKX              NORMAL RETURN
 BRK3     STM    BRKD 
 DEBUG1   ENDIF 
 BRK4     LDD    D.PPMES1 
          CWM    BRKE,ONE          WRITE MSG1 INFORMATION 
          CWM    D.T5,TWO          WRITE WINDOW TO MSG2 - MSG3
 BRKB     EQU    *-1
          LDK    M.PASS 
          RJM    R.MTR             WAIT FOR OPERATOR COMMAND
          STM    BRKG              ZERO ERROR CODE
          LDD    D.PPMES1 
          ADN    1
          CRM    D.T5,TWO          READ WINDOW FROM MSG2 - MSG3 
 BRKC     EQU    *-1
          LDD    D.T4 
          ZJN    BRK5              IF CONTINUE COMMAND
          IFNE   DEBUG,1,2
          SBN    2
          PJN    BRK45             IF BREAK POINT COMMANDS
          LDD    D.T3 
          ZJN    BRK4              IF WINDOW ADDRESS IS ILLEGAL 
          STM    BRKB              SAVE NEW WINDOW ADDRESS
          STM    BRKC 
          STM    BRKF 
          UJN    BRK4 
  
          IFNE   DEBUG,1,1
 BRK45    UJN    BRK7 
  
 BRK5     LDD    D.PPMES1 
          CRM    BRKE,ONE          READ MSG1 INFORMATION
          ADN    2
          CRM    D.REQ1,TWO        READ MSG4 - MSG5 TO D.REQ1 - D.REQ2
          CRD    D.T0              READ MSG6 TO D.T0 - D.T4 
 DEBUG1   IFNE   DEBUG,1
          LDM    BRKE 
          ADN    2
          LMM    BRK
          ZJN    BRK6              IF SAME RETURN ADDRESS 
          LDM    BRKE 
          STM    BRKD              CONTINUE AT OPERATOR PC
 DEBUG1   ENDIF 
 BRK6     LDM    BRKH 
          LPN    77B
          SHN    12                RESTORE RA 
          LMM    BRKH+1 
          LJM    BRKX              RETURN 
 BRKD     EQU    *-1
  
 DEBUG1   IFNE   DEBUG,1
 BRK7     SBN    1
          MJN    BRK10             IF ADD BREAK POINT 
          NJN    BRK8              IF ILLEGAL COMMAND 
          LDD    D.T2 
          SBN    NUMBRK 
          PJN    BRK8              IF BAD BREAK NUMBER
          LDM    BRKI,D.T2
          ZJN    BRK8              IF NON-EXISTENT BREAK POINT
          STD    D.T0 
          LDM    BRKJ,D.T2         RESTORE ORIGINAL CODE
          STI    D.T0 
          LDM    BRKK,D.T2
          STM    1,D.T0 
          LDN    0
          STM    BRKI,D.T2         ZERO BREAK POINT ENTRY ADDRESS 
          UJN    BRK9 
  
 BRK8     LDN    1
          STM    BRKG              INDICATE ERROR 
 BRK9     LJM    BRK4 
  
 BRK10    LDD    D.T2 
          SBN    NUMBRK 
          PJN    BRK8              IF BAD BREAK NUMBER
          LDM    BRKI,D.T2
          NJN    BRK8              IF BREAK POINT IN USE
          LDD    D.T3 
          ZJN    BRK8              IF BAD BREAK ADDRESS 
          STM    BRKI,D.T2         SAVE BREAK ADDRESS 
          LDI    D.T3 
          STM    BRKJ,D.T2         SAVE ORIGINAL CODE 
          LDM    1,D.T3 
          STM    BRKK,D.T2
          LDK    0200B             INSERT CALL TO BRK 
          STI    D.T3 
          LDK    BRK
          STM    1,D.T3 
          UJN    BRK9 
 DEBUG1   ENDIF 
  
 BRKE     CON    0                 CURRENT BREAK POINT ADDRESS
 BRKF     CON    D.T5              WINDOW ADDRESS 
 BRKG     CON    0                 ERROR CODE 
 BRKH     BSSZ   2                 RA 
  
 DEBUG1   IFNE   DEBUG,1
 NUMBRK   EQU    4                 DEFINE 4 INSERTABLE BREAK POINTS 
 BRKI     BSSZ   NUMBRK            BREAK ADDRESS
 BRKJ     BSSZ   NUMBRK            ORIGINAL CODE
 BRKK     BSSZ   NUMBRK 
 DEBUG1   ENDIF 
 DEBUG    ENDIF 
          LIST   *
