*COMDECK  COMCCDP - CPU DEBUGGING PACKAGE.
          CTEXT  COMCCDP - CPU DEBUGGING PACKAGE. 
 CDP      SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   COMCCDP
          BASE   D
*         COMMENT COPYRIGHT CONTROL DATA CORP. 1975.
 CDP      SPACE  4
***       CDP - CPU DEBUGGING PACKAGE.
*         R. H. GOODELL.     76/07/28.
*         J. C. BOHNHOFF.    71/02/13.
*         J. C. BOHNHOFF.    75/08/16.
*         J. L. LARSON.      76/10/29.
          SPACE  4
***              CDP PROVIDES VARIOUS DEBUGGING AIDS FOR THE CP 
*         PROGRAMMER. 
* 
*                CONTROL IS INITIALLY GIVEN TO CDP BY THE EXECUTION OF
*         A RETURN JUMP TO *CDI* OR *CDB*. AT THIS POINT CDP ANNOUNCES
*         THE CURRENT PROGRAM LOCATION WITH *BK NNNNNN*. THE USER IS
*         THEN EXPECTED TO ENTER ONE OF THE FOLLOWING COMMANDS. 
*         CDP WILL ASK FOR COMMANDS UNTIL *GO.* OR A NULL LINE
*         IS ENTERED. AT THIS POINT THE PROGRAM IS RE-ENTERED AND 
*         EXECUTES UNTIL IT ENDS OR A BREAKPOINT IS ENCOUNTERED.
*         CDP MAINTAINS ITS OWN *INPUT* AND *OUTPUT* FETS SO THAT USER
*         FETS ARE NOT ALTERED. IN ADDITION, A FET POINTER IN LOW CORE
*         IS USED BUT ITS ORIGINAL CONTENTS ARE SAVED.
*         IN ANY OF THE FOLLOWING COMMANDS, IF A NUMERIC FIELD IS 
*         NEEDED, A POST-RADIX *B* (OCTAL) OR *D* (DECIMAL) MAY BE
*         SPECIFIED. IN THE ABSENCE OF THIS POST-RADIX SPECIFICATION, 
*         NUMBERS ARE ASSUMED TO BE OCTAL.
*         IN MOST CASES WHERE A NUMBER MAY BE SPECIFIED, A DEFINED
*         SYMBOL MAY BE USED INSTEAD OR IN COMBINATION. SYMBOLS ARE 
*         DEFINED USING THE *DEF* COMMAND. ALSO, A SYMBOL AND A 
*         NUMBER, A SYMBOL AND A SYMBOL, OR A NUMBER AND A NUMBER 
*         MAY BE GIVEN TOGETHER SEPERATED BY A + OR - OPERATOR
*         INDICATING ADDITION OR SUBTRACTION. 
* 
*                N.B. --- CDP IS NOT PROTECTED FROM THE PROGRAM TO BE 
*         DEBUGGED. IT MAY BE CLOBBERED AT ANY TIME BY A RUNAWAY
*         PROGRAM.
* 
*         REQUIRES PRESENCE OF COMMON DECKS - 
*                COMCMAC
*                COMCCMD
*                COMCCIO
*                COMCWTC
*                COMCRDC
*                COMCDXB
*                COMCWOD
*                COMCZTB
*                COMCCOD
*                COMCUPC
*                COMCWTW
*                COMCRDW
*                COMCSYS
*                COMCCPM
* 
*         TWO SYMBOLS MUST BE DEFINED BY THE CALLING PROGRAM -
*                CDPS - THE FWA OF CM PROTECTED AGAINST ALTERATION
*                CDPE - THE LWA+1 OF CM PROTECTED AGAINST ALTERATION
          TITLE  COMCCDP - CPU DEBUGGING PACKAGE - SYMBOLS, MACROS. 
 SYMBOLS  SPACE  4
**        LOCAL SYMBOL DEFINITIONS. 
  
  
 IBFL     EQU    101B        INPUT BUFFER SIZE
 OBFL     EQU    101B        OUTPUT BUFFER SIZE 
 DBFL     EQU    101B        DUMP FILE BUFFER SIZE
 BUFL     EQU    8           SIZE OF COMMAND BUFFER 
 TSYML    EQU    64          SIZE OF SYMBOL TABLE 
 COMAND   SPACE  4
**        COMAND - MACRO - FORM COMMAND TABLE ENTRY.
* 
* PROC    COMAND KEY,P0,P1,P2,NVC,NAV,VA1 
* 
*         WHERE  PROC = PROCESSOR ADDRESS.
*                KEY = COMMAND KEYWORD - 1 TO 6 CHARACTERS. 
*                P0 = PRESENT IF ZERO PARAMETERS LEGAL. 
*                P1 = PRESENT IF ONE PARAMETER LEGAL. 
*                P2 = PRESENT IF TWO PARAMETERS LEGAL.
*                NVC = PRESENT IF NO NUMERIC VALUE CONVERSION SHOULD BE 
*                      DONE ON THE COMMAND. 
*                NAV = PRESENT IF NO ADDRESS VALIDATION SHOULD BE DONE
*                      ON THE COMMAND.
*                VA1 = PRESENT IF ADDRESS VALIDATION ONLY ON FIRST
*                      PARAMETER. 
* 
*         PRODUCES -
* 
*T        36/KEY,1/A,1/B,1/C,1/N,1/V,1/A1,18/PROC 
* 
*         WHERE  A=1, IF P0 PRESENT.
*                B=1, IF P1 PRESENT.
*                C=1, IF P2 PRESENT.
*                N=1, IF NVC PRESENT
*                V=0, IF NAV PRESENT. 
*                A1 = 1, IF VA1 PRESENT.
  
  
          MACRO  COMAND,P,K,A,B,C,N,V,A1
 .1       MICRO  1,,$K$ 
 .10      IFC    EQ,$N$$
 .2       SET    0
 .10      ELSE
 .2       SET    1
 .10      ENDIF 
 .20      IFC    EQ,$V$$
 .3       SET    1
 .20      ELSE
 .3       SET    0
 .20      ENDIF 
 .21      IFC    EQ,$A1$$ 
 .31      SET    0
 .21      ELSE
 .31      SET    1
 .21      ENDIF 
 .30      IFC    EQ,$A$$
 .4       SET    0
 .30      ELSE
 .4       SET    1
 .30      ENDIF 
 .40      IFC    EQ,$B$$
 .5       SET    0
 .40      ELSE
 .5       SET    1
 .40      ENDIF 
 .50      IFC    EQ,$C$$
 .6       SET    0
 .50      ELSE
 .6       SET    1
 .50      ENDIF 
          VFD    36/0L".1",1/.4,1/.5,1/.6,1/.2,1/.3,1/.31,18/P
          ENDM
          TITLE  COMCCDP - CPU DEBUGGING PACKAGE - MAIN CONTROL.
 CDB      SPACE  4
***       CDB - PROGRAMMED BREAKPOINT ENTRY WITH LABEL ARGUMENT.
* 
*         CDB ACTS THE SAME AS CDI BELOW EXCEPT THAT THE BREAKPOINT 
*         LABEL IS GIVEN AS AN ARGUMENT FOLLOWING PRODUCT SET PARAMETER 
*         PASSING CONVENTIONS. THAT IS, X1 CONTAINS THE ADDRESS OF THE
*         LABEL. THE LABEL MAY BE ANY 1 TO 5 CHARACTER DISPLAY CODED
*         VALUE. USING FTN, A CALL MIGHT BE - 
*                CALL CDB(5LSAMMY)
  
  
 CDB      PS                 ENTRY
          RJ     SVR         SAVE REGISTERS 
          SA2    CDB         MOVE RETURN INSTRUCTION
          SA1    SVRX+1      READ (X1)
          BX6    X2 
          SA1    X1          READ LABEL 
          SA6    CDP
          MX0    30          MASK LABEL 
          LX6    30          SET PROPER *P* 
          SA2    CDBA        CONSTRUCT FAKE CDI CALL
          LX1    30 
          SX6    X6-1 
          BX1    -X0*X1 
          BX1    X1+X2
          JP     CDI1 
  
 CDBA     RJ     CDI
-         VFD    30/0 
 CDC      SPACE  4
***       CDC - PROGRAMMED COMMAND ENTRY. 
* 
*         CDC MAY BE CALLED TO PROCESS ANY CDP COMMAND. THE COMMAND MUST
*         BE DISPLAY CODED. AN FTN CALL MIGHT BE -
*                CALL CDC(11HDEF,SYM,6./) 
*         NOTE THAT THE COMMAND MUST BE TERMINATED BY A SLASH.
*         THE *EM* COMMAND WOULD BE - 
*                CALL CDC(17HEM,123,456.7704./) 
*         PRODUCT SET PARAMETER PASSING CONVENTIONS MUST BE USED. 
  
  
 CDC      PS                 ENTRY
          RJ     SVR         SAVE REGISTERS 
          SA2    CDC         MOVE RETURN INSTRUCTION
          SA1    SVRX+1      READ (X1)
          BX6    X2 
          SA6    CDP
          SA5    X1          READ FIRST WORD OF COMMAND 
          LX6    30          SET PROPER *P* 
          SX6    X6-1 
          SA6    SVRP 
 CDC1     SA3    CDCA        READ COMMAND TERMINATOR MASK 
          SB7    A5+         SAVE ADDRESS OF COMMAND
          RJ     FEC         FIND END OF COMMAND
          SB3    B3+B3
          SB2    B3+B3
          SA5    A5 
          SB2    B2+B3
          MX0    1
          SB2    B2-59
          LX0    X0,B2
          BX6    X0*X5
          SB2    A5+         MOVE COMMAND TO BUFFER 
          SB6    B7-BUF 
 CDC4     GE     B7,B2,CDC5  IF END OF COMMAND
          SA1    B7 
          BX7    X1 
          SA7    B7-B6
          SB7    B7+B1
          EQ     CDC4 
 CDC5     SX7    B1          SET PROGRAMMED COMMAND FLAG
          SA6    B7-B6       STORE LAST COMMAND WORD
          SA7    PROC 
          SX7    0           CLEAR BREAKPOINT LABEL 
          JP     CDP2 
  
 CDCA     BSS    0
          POS    60-1R/ 
          VFD    1/1
          VFD    $/0
          BSS    0
 CDI      SPACE  4
***       CDI - PROGRAMMED BREAKPOINT/COMMAND ENTRY (NO REGISTERS). 
* 
*         CDI MUST BE ENTERED TO INITIALLY GIVE CONTROL TO COMCCDP. 
*         SUBSEQUENTLY, CDI MAY BE ENTERED AT ANY POINT TO PROVIDE
*         PROGRAMMED BREAKPOINTS AS OPPOSED TO INTERACTIVELY SET
*         BREAKPOINTS.
* 
*         IF THE RETURN JUMP INSTRUCTION CALLING CDI STARTS IN THE UPPER
*         PARCEL OF A WORD AND THE LOWER PARCELS ARE NOT -
*                6100046000 (COMPASS PAD) 
*                00XXXXXXXX 
*         THEN THE LOW 30 BITS ARE TAKEN TO BE A DISPLAY CODED
*         BREAKPOINT LABEL AND ARE DISPLAYED WHEN THE BREAKPOINT IS 
*         ENCOUNTERED. IF THE LOW 30 BITS LOOK LIKE A PROGRAM STOP
*         INSTRUCTION, THEN THE LOW 18 BITS ARE TAKEN AS THE ADDRESS
*         OF A DISPLAY CODED CDP COMMAND FORMATTED AS EXPLAINED FOR 
*         CDC ABOVE. FOR EXAMPLE -
*         +      RJ   CDI 
*         -      PS   CMD 
*                ...... 
*         CMD    DATA 10HDMPR./ 
  
  
 CDI      PS                 ENTRY
          RJ     SVR         SAVE REGISTERS 
          SA1    CDI         MOVE RETURN INSTRUCTION
          BX7    X1 
          SA7    CDP
          LX7    30          SET PROPER *P* 
          SX6    X7-1 
          MX0    30 
          SA1    X6          CHECK BREAKPOINT LABEL 
 CDI1     SA6    SVRP 
          SA2    CDIA 
          BX7    X1-X2
          ZR     X7,CDP2     IF NO LABEL
          BX6    X0*X7
          SX7    B0 
          NZ     X6,CDP2     IF NOT RJ UPPER
          BX1    -X0*X1      EXTRACT BREAKPOINT LABEL 
          MX0    6           CHECK COMMAND ADDRESS
          LX1    30 
          BX6    X0*X1
          NZ     X6,CDI2     IF NOT PS INSTRUCTION
          LX1    30 
          SA5    X1 
          JP     CDC1        PROCESS PROGRAMMED COMMAND 
  
 CDI2     RJ     ZTB         SPACE FILL LABEL 
          LX6    -6 
          MX0    6*6
          BX7    X0*X6
          JP     CDP2 
  
 CDIA     RJ     CDI         CRITERION FOR BREAKPOINT LABEL 
-         SB0    B0+46000B
 CDP      SPACE  4
**        CDP - INTERACTIVELY SELECTED BREAKPOINT ENTRY.
  
  
 CDP      PS                 ENTRY/EXIT 
          RJ     SVR         SAVE REGISTERS 
 CDP1     RJ     RPB         RESTORE PREVIOUS BREAKPOINT
          SA1    CDP         DECREMENT RETURN ADDRESS 
          SX7    B0          CLEAR NEXT BREAKPOINT ADDRESS
          LX1    30 
          SX2    B1 
          SA7    IBPA 
          IX6    X1-X2
          LX6    30 
          BX7    X7-X7
          SA6    CDP
          SA7    PROC        CLEAR PROGRAMMED COMMAND FLAG
 CDP2     SA7    LCLC        SET BREAKPOINT LABEL 
          RJ     SFP         SET FET POINTER FOR TERMINAL I/O 
          RJ     LCL         LIST CURRENT LOCATION
          RJ     POC         PROCESS OPERATOR COMMANDS
          WRITER O,R         WRITE RESPONSE 
          RJ     RFP         RESTORE FET POINTER WORDS
          RJ     IBP         INSERT BREAKPOINT (IF NEEDED)
          RJ     RSR         RESTORE REGISTERS
          JP     CDP         RETURN TO PROGRAM
 CDS      SPACE  4,8
***       CDS - PROGRAMMED ENTRY TO DEFINE SYMBOLS. 
* 
*         CDS GIVES THE SAME EFFECT AS A SERIES OF *DEF* COMMANDS.
*         THE CALLING SEQUENCE IS 
*         +      RJ     CDS 
*         -      VFD    12/,18/LIST 
*         WHERE LIST IS THE FWA OF A SERIES OF WORDS OF THE FORM
*                VFD    42/0L NAME, 18/ VALUE 
*         ENDED BY A ZERO WORD. 
  
  
 CDS2     RJ     RSR         RESTORE REGISTERS
  
 CDS      PS     0           ENTRY/EXIT 
          RJ     SVR         SAVE REGISTERS 
          SA1    CDS
          AX1    30 
          SA1    X1-1        GET RJ WORD
          SA2    CDSA 
          SX5    X1          LIST FWA 
          BX6    X1-X2
          SX7    A1          SAVE *P* 
          AX6    17 
          SA7    SVRP 
          NZ     X6,CDS2     IF IMPROPER CALL 
          SA1    X5 
          ZR     X1,CDS2     IF LIST IS EMPTY 
  
 CDS1     RJ     SST         SEARCH SYMBOL TABLE
          SB2    A2-TSYM-TSYML
          BX6    X1 
          PL     B2,CDS2     IF SYMBOL TABLE FULL 
          SA6    A2          STORE NEW ENTRY
          SA1    A1+B1       ADVANCE TO NEXT SYMBOL 
          NZ     X1,CDS1     LOOP TO END OF LIST
          JP     CDS2        RETURN 
  
 CDSA     RJ     CDS
 -        VFD    12/,18/
          TITLE  COMCCDP - CPU DEBUGGING PACKAGE - COMMAND PROCESSING.
 POC      SPACE  4
**        POC - PROCESS OPERATOR COMMANDS.
  
  
          B1=1
 POC      PS                 ENTRY/EXIT 
 POCR     BSS    0           RETURN FROM COMMAND PROCESSORS 
          SA1    PROC        CHECK PROGRAMMED COMMAND 
          ZR     X1,POC1     IF NOT PROGRAMMED
          AX1    1
          NZ     X1,POC      IF COMMAND PROCESSED 
          SX6    B1+B1       SET COMMAND PROCESSED
          SA6    PROC 
          JP     POC2 
  
 POC1     READ   I           READ COMMAND 
          READC  I,BUF,BUFL 
          NZ     X1,POC      RETURN - IF NO DATA
          SX6    B6+
          SA6    BUFA 
 POC2     SA1    ECHO        CHECK ECHO NEEDED
          NZ     X1,POC3     IF NO ECHO 
          WRITEC O,BUF       ECHO COMMAND 
 POC3     SA5    BUF         READ FIRST COMMAND WORD
          SB7    UOC         DESTINATION FOR UNPACKED COMMAND 
          RJ     UPC         UNPACK COMMAND 
          ZR     X6,POC5     IF NO ERROR
 POCE     BSS    0           ERROR RETURN FROM COMMAND PROCESSORS 
 POC4     WRITEC O,POCA      *ILLEGAL*
          JP     POCR 
  
 POC5     SB4    B6-B1       SET ARGUMENT COUNT 
          SA1    UOC         READ FIRST ARGUMENT
          MX2    6*6
          SA6    NARG        CLEAR NUMBER OF ARGUMENTS
          SB2    TOCP        SET FWA OF TABLE 
          SB3    TOCPL       SET TABLE LENGTH 
          RJ     BST         SEARCH COMMAND TABLE 
          ZR     X3,POC4     IF COMMAND NOT FOUND 
          SB2    B4          VALIDATE PARAMETER COUNT 
          SB3    B0 
          RJ     CCA         CHECK FOR COMPOUND FIRST ARGUMENT
          NZ     B6,POC4     IF ILLEGAL SEPARATOR 
          SA6    POCB        SAVE COMPOUND ARGUMENT INDICATOR 
          RJ     CCA         CHECK FOR COMPOUND SECOND ARGUMENT 
          NZ     B6,POC4     IF ILLEGAL SEPARATOR 
          BX2    X3 
          SA6    A6+B1       SAVE COMPOUND ARGUMENT INDICATOR 
          LX2    59-23
          NZ     B2,POC4     IF TOO MANY ARGUMENTS
          LX2    B3          CHECK LEGAL NUMBER OF ARGUMENTS
          SA0    X3          PROCESSOR ADDRESS
          PL     X2,POC4     IF NUMBER OF ARGUMENTS NOT LEGAL 
          LX3    59-20
          NG     X3,POC6     IF NO CONVERSION 
          LX3    20-19       ADDRESS VALIDATION FIELDS
          MX1    2
          BX6    X1*X3
          RJ     SAD         CONVERT NUMERIC ARGUMENTS
  
*         ENTRY TO COMMAND PROCESSORS - 
*         (B4)= ARGUMENT COUNT. 
*         (B5)= SECOND NUMERIC ARGUMENT. (IF CONVERSION)
*         (X6)= FIRST NUMERIC ARGUMENT. (IF CONVERSION) 
*         (UOC-UOC+N)= UNPACKED COMMAND.
*         (ADR1, ADR2)= NUMERIC COMMAND ARGUMENTS. (IF CONVERSION)
  
 POC6     SB2    A0 
          JP     B2          PROCESS COMMAND
  
 POCA     DIS    ,* ILLEGAL*
  
 POCB     CON    0           NONZERO IF COMPOUND FIRST ARGUMENT 
          CON    0           NONZERO IF COMPOUND SECOND ARGUMENT
 TOCP     SPACE  4
**        TOCP - TABLE OF OPERATOR COMMANDS.
* 
*  *****  TABLE MUST BE IN ASCENDING ALPHABETIC ORDER.
*  *****  KEYWORD MUST BEGIN WITH A CHARACTER HAVING A DISPLAY CODE 
*         VALUE .LE. 37B. 
  
  
 TOCP     BSS    0
 LAR      COMAND A,,1,2,,V   A,N. OR A,N,MMMMMM.
 LBR      COMAND B,,1,2,,V   B,N. OR B,N,MMMMMM.
 SBP      COMAND BK,0,1,,,,A1 BK. OR BK,NNNNNN. 
 BKM      COMAND BM,0,1,,,,A1 BM. OR BM,NNNNNN. 
 BKP      COMAND BP,0,1,,,,A1 BP. OR BP,NNNNNN. 
 LMO      COMAND C,,1,2      C,MMMMMM. OR C,MMMMMM,NNNNNN.
 CKP      COMAND CKP,0,,,N   CKP. 
 LOD      COMAND D,,1,2      D,MMMMMM. OR D,MMMMMM,NNNNNN.
 DEF      COMAND DEF,0,,2,N  DEF. OR DEF,SSSSSSS,NNNNNN.
 DMC      COMAND DMPC,,1,2   DMPC,MMMMMM. OR DMPC,MMMMMM,NNNNNN.
 DMD      COMAND DMPD,,1,2   DMPD,MMMMMM. OR DMPD,MMMMMM,NNNNNN.
 DMM      COMAND DMPM,,1,2   DMPM,MMMMMM. OR DMPM,MMMMMM,NNNNNN.
 DMR      COMAND DMPR,0,,,N  DMPR.
 EMB      COMAND EB,,,2,,,A1 EB,MMMMMM,B.CCCC.
 ECH      COMAND ECHO,0,1,,N ECHO. OR ECHO,A. 
 EMD      COMAND ED,,1,2     ED,MMMMMM,NNNNNN.$DDD---DDD$ 
 EMO      COMAND EM,,1,2     EM,MMMMMM,NNNNNN.CCC---CCC.
 END      COMAND END,0,,,N   END. 
 ERE      COMAND EREXIT,0,,,N EREXIT. 
 FIL      COMAND FILE,,,2,N  FILE,X,AAAAAAA.
 RFL      COMAND FL,0,1,,,V  FL. OR FL,NNNNNN.
 POC      COMAND GO,0,,,N    GO.
 LMM      COMAND M,,1,2      M,MMMMMM. OR M,MMMMMM,NNNNNN.
 MOD      COMAND MODE,0,1,,,V MODE. OR MODE,N.
 STP      COMAND P,0,1,,,,A1 P. OR P,NNNNNN.
 LRC      COMAND R,0,,,N     R. 
 STL      COMAND SETTL,,1,,,V SETTL,NNNNNN. 
 LXR      COMAND X,,1,,,V    X,N. OR X,N.CCC---CCC. 
 TOCPL    EQU    *-TOCP      TABLE LENGTH 
 LAR      SPACE  4
***       A,N.
*         LIST CONTENTS OF *A* REGISTER N.
  
  
***       A,N,MMMMMM. 
*         ENTER *A* REGISTER N WITH CONTENTS MMMMMM.
  
  
**        LAR - SET/LIST CONTENTS OF *A* REGISTER.
  
  
 LAR      BSS    0
          SB6    SVRA 
          SB7    LRCA 
 LAR1     SX7    X6-8        CHECK FOR ILLEGAL NUMBER 
          PL     X7,POCE     IF NUMBER .GT. 7 
          NE     B4,B1,LAR2  IF SET REGISTER
          SB5    X6          SAVE REGISTER NUMBER 
          SA1    B6+X6       READ CONTENTS
          RJ     WOD         CONVERT CONTENTS TO DISPLAY
          RJ     SFZ         CONVERT LEADING DISPLAY ZEROS TO BLANKS
          MX0    -36
          SA1    B7          REGISTER NAME
          SX2    B5 
          BX6    -X0*X7 
          LX2    42 
          IX1    X1+X2
          MX7    0
          BX6    X1+X6
          SA6    LRCC 
          SA7    A6+1 
          WRITEC O,LRCC 
          JP     POCR        RETURN 
  
 LAR2     SX7    B5          STORE REGISTER CONTENTS
          SA7    B6+X6
          JP     POCR        RETURN 
 LBR      SPACE  4
***       B,N.
*         LIST CONTENTS OF *B* REGISTER N.
  
  
***       B,N,CCCCCC. 
*         ENTER *B* REGISTER N WITH CONTENTS CCCCCC.
  
  
**        LBR - LIST/SET CONTENTS OF *B* REGISTER.
  
  
 LBR      BSS    0           ENTRY
          SB6    SVRB 
          SB7    LRCB 
          JP     LAR1 
 SBP      SPACE  4
***       BK,NNNNNN.
*         SET NEXT BREAKPOINT AT ADDRESS NNNNNN.
*         IF *,NNNNNN* IS ABSENT, CLEAR BREAKPOINT. 
  
  
**        SBP - SET BREAKPOINT ADDRESS. 
  
  
 SBP      BSS    0           ENTRY
          SB6    0           SET NON-RELATIVE BREAKPOINT
 SBP1     SB7    B0 
          NZ     B4,SBP2     IF ADDRESS SPECIFIED 
          SX7    B0          CLEAR BREAKPOINT ADDRESS 
          SA7    IBPA 
          JP     POCR        RETURN 
  
 SBP2     ZR     B6,SBP4     IF ABSOLUTE BREAKPOINT 
          PL     B6,SBP3     IF POSITIVE ADDEND 
          BX6    -X6
 SBP3     SA1    SVRP        CURRENT BREAKPOINT ADDRESS 
          IX6    X1+X6
          NG     X6,POCE     IF NEGATIVE BREAKPOINT ADDRESS 
 SBP4     SB2    X6-CDPS     CHECK BREAKPOINT WITHIN DEBUGGER 
          SB3    X6-CDPE
          SB4    SBPA        BREAKPOINT WITHIN DEBUGGER 
          NG     B2,SBP5     IF BELOW DEBUGGER
          NG     B3,SBP4.1   IF IN DEBUGGER 
          SB4    SADC        ADDRESS OUT OF RANGE 
          SA1    SADD        GET CURRENT FL 
          AX1    30 
          IX1    X6-X1
          NG     X1,SBP5     IF ADDRESS .LT. FL 
 SBP4.1   WRITEC O,B4        ISSUE ERROR MESSAGE
          JP     POCR        RETURN 
  
 SBP5     SA6    IBPA        STORE BREAKPOINT ADDRESS 
          JP     POCR        RETURN 
  
 SBPA     DIS    ,* BREAKPOINT WITHIN DEBUGGER.*
 BKM      SPACE  4
***       BM,NNNNNN.
*         SET NEXT BREAKPOINT AT CURRENT MINUS NNNNNN.
  
  
**        BKM - SET RELATIVE BREAKPOINT MINUS.
  
  
 BKM      BSS    0           ENTRY
          SB6    -B1         SET NEGATIVE RELATIVE BREAKPOINT 
          JP     SBP1 
 BKP      SPACE  4
***       BP,NNNNNN.
*         SET BREAKPOINT AT CURRENT BREAKPOINT PLUS NNNNNN. 
  
  
**        BKP - SET NEXT BREAKPOINT AT CURRENT PLUS N.
  
  
 BKP      BSS    0           ENTRY
          SB6    B1          SET POSITIVE RELATIVE BREAKPOINT 
          JP     SBP1 
 LMO      SPACE  4
***       C,MMMMMM,NNNNNN.
*         LIST MEMORY IN OCTAL (EACH WORD 5 GROUPS OF 4 DIGITS).
*         LIST FROM MMMMMM THROUGH NNNNNN.
*         IF NNNNNN IS ABSENT, LIST ONLY MMMMMM.
  
  
**        LMO - LIST MEMORY OCTAL.
  
  
 LMO      BSS    0           ENTRY
          SA0    O           SET LIST FILE
 LMO1     SX6    0           SET 5 GROUPS OF 4 DIGITS 
          SA6    OCBF        SAVE FORMAT FLAG 
 LMO1A    SA1    ADR1        READ FIRST ADDRESS 
          SX2    B5+         UPPER BOUND
          SB6    X1+B1       SET NEXT ADDRESS 
          IX3    X2-X1       UPPER - CURRENT
          NG     X3,LMO3     IF UPPER BOUND HAS BEEN LISTED 
          RJ     COD         CONVERT ADDRESS
          LX6    6*4         PUT 4 SPACES LOW 
          SA6    LMOA        SET ADDRESS
          SA1    B6-B1       READ CONTENTS
          RJ     OCB         CONVERT CONTENTS 
          SB7    B6          CURRENT ADDRESS
          SB6    B6+1        ADVANCE NEXT ADDRESS 
          SB2    B5-B7       UPPER - CURRENT
          NG     B2,LMO2     IF UPPER BOUND LISTED
          SA1    B6-1        READ CONTENTS
          RJ     OCB         CONVERT CONTENTS 
          SX6    B6          SAVE NEXT ADDRESS
          SA6    ADR1 
          SX5    B5          SAVE UPPER BOUND 
          WRITEC A0,LMOA     LIST 2 WORDS 
          SB5    X5 
          JP     LMO1A       LOOP 
  
 LMO2     MX6    0           TERMINATE LINE 
          SA6    A6+B1
          WRITEC A0,LMOA     LIST 1 WORD
 LMO3     SX0    A0 
          SX1    O
          BX7    X0-X1
          ZR     X7,POCR     RETURN - IF LIST FILE IS *OUTPUT*
          WRITER A0,R        END RECORD 
          JP     POCR        RETURN 
  
 LMOA     CON    0
          CON    0
          CON    0
          CON    0
          CON    0
          CON    0
          CON    0
          CON    0
 CKP      SPACE  4
***       CKP.
*         CHECKPOINT PROGRAM. 
*         CHECKPOINT IS USED AS IN THE *CKP* CONTROL CARD.
*         ALL FILES ARE INCLUDED. THE CHECKPOINT NUMBER IS REPORTED 
*         AS AN OCTAL NUMBER. 
  
  
**        CKP - CHECKPOINT JOB. 
  
  
 KR       IF     DEF,.KRONOS
 KR       IF     MAC,CHECKPT
 CKP      BSS    0           ENTRY
          SA5    CKPA        CLEAR COMPLETION BIT 
          MX6    -1 
          BX7    X6*X5
          SA7    A5 
          CHECKPT A5,0       CHECKPOINT WITH ALL FILES
          SA1    A5          REPORT CHECKPOINT NUMBER 
          MX6    -12
          LX1    0-12 
          BX1    -X6*X1 
          RJ     COD         CONVERT NUMBER 
          LX4    -6 
          BX6    X4 
          SA6    CKPC 
          WRITEC O,CKPB 
          JP     POCR        RETURN 
  
 CKPA     VFD    12/0,30/0,6/0,11/0,1/0 
 CKPB     DATA   10HCHKPT. (B)
 CKPC     CON    0
          CON    0
 KR       ELSE   1
 CKP      EQU    POCE 
 LOD      SPACE  4
***       D,MMMMMM,NNNNNN.
*         LIST MEMORY IN OCTAL (5 GROUPS OF 4 DIGITS) AND CHARACTER.
*         LIST FROM MMMMMM THROUGH NNNNNN.
*         IF NNNNNN IS ABSENT, LIST ONLY MMMMMM.
  
  
**        LOD - LIST MEMORY OCTAL AND DISPLAY CODE. 
  
  
 LOD      BSS    0           ENTRY
          SA0    O           SET LIST FILE
 LOD1     SX6    0           SET 5 GROUPS OF 4 DIGITS 
          SA6    OCBF        SAVE FORMAT FLAG 
 LOD1A    SA1    ADR1        READ FIRST ADDRESS 
          SX2    B5+         UPPER BOUND
          SB6    X1+B1       SET NEXT ADDRESS 
          IX3    X2-X1       UPPER - CURRENT
          NG     X3,LOD2     IF UPPER BOUND HAS BEEN LISTED 
          RJ     COD         CONVERT ADDRESS
          LX6    6*4         PUT 4 SPACES LOW 
          SA6    LMOA        SET ADDRESS IN LINE
          SA1    B6-B1       READ CONTENTS
          RJ     OCB         CONVERT
          SA1    B6-1        SPACE FILL WORD
          RJ     ZTB
          MX7    0
          SA6    A6+B1       SET CHARACTER FIELD
          SA7    A6+B1       TERMINATE LINE 
          SX6    B6          SAVE CURRENT ADDRESS 
          SX5    B5+         SAVE UPPER BOUND 
          SA6    ADR1 
          WRITEC A0,LMOA     LIST WORD
          SB5    X5          NEXT ADDRESS 
          JP     LOD1A       LOOP 
  
 LOD2     SX0    A0 
          SX1    O
          BX7    X0-X1
          ZR     X7,POCR     RETURN - IF LIST FILE *OUTPUT* 
          WRITER A0,R        END RECORD 
          JP     POCR        RETURN 
 DEF      SPACE  4
***       DEF,SSSSSSS,NNNNNN. 
*         DEFINE SYMBOL SSSSSSS AS HAVING VALUE NNNNNN. 
*         SSSSSSS IS ANY 1-7 CHARACTER ALPHANUMERIC STRING EXCEPT 
*         THOSE THAT APPEAR TO BE NUMBERS - E.G. 27, 14B, 353D. 
  
  
***       DEF.
*         LIST DEFINED SYMBOLS AND VALUES.
  
  
**        DEF - LIST/DEFINE SYMBOLS.
  
  
 DEF      BSS    0           ENTRY
          NZ     B4,DEF2     IF DEFINITION REQUEST
          SA5    TSYM        LIST SYMBOLS AND VALUES
 DEF1     ZR     X5,POCR     IF END OF SYMBOLS
          MX0    7*6         SPACE FILL SYMBOL NAME 
          BX1    X0*X5
          RJ     ZTB
          SA6    DEFA 
          BX1    -X0*X5      CONVERT VALUE
          RJ     COD
          LX6    4*6
          SA6    DEFB 
          WRITEC O,DEFA 
          SA5    A5+1        READ NEXT SYMBOL 
          JP     DEF1 
  
 DEF2     SA1    POCB        CHECK COMPOUND FIRST ARGUMENT
          NZ     X1,POCE     IF ILLEGAL ARGUMENT
          SA1    UOC+1       CHECK SYMBOL ALREADY DEFINED 
          RJ     SST         SEARCH SYMBOL TABLE
          MX0    7*6
          SA5    A1+B1       READ VALUE 
          BX7    X0*X1       SYMBOL 
          SA0    A2          SAVE TABLE ADDRESS 
          SB2    A2-TSYM-TSYML  CHECK TABLE FULL
          SA7    DEFC        SAVE SYMBOL
          NG     B2,DEF3     IF TABLE NOT FULL
          WRITEC O,DEFD      *SYMBOL TABLE FULL*
          JP     POCR        RETURN 
  
 DEF3     RJ     CAD         CONVERT ADDRESS
          SA1    DEFC        SET TABLE ENTRY
          SX6    B7 
          BX7    X1+X6
          SA7    A0 
          JP     POCR        RETURN 
  
 DEFA     CON    0
 DEFB     CON    0
          CON    0
 DEFC     CON    0
 DEFD     DIS    ,*SYMBOL TABLE FULL.*
 DMC      SPACE  4
***       DMPC,MMMMMM,NNNNNN. 
*         LIST MEMORY IN OCTAL (5 GROUPS OF 4 DIGITS) TO FILE *DUMP*. 
*         ARGUMENTS SAME AS *C,MMMMMM,NNNNNN.*
  
  
**        DMC - LIST MEMORY TO FILE *DUMP*. 
  
  
 DMC      BSS    0           ENTRY
          SA0    D           SET LIST FILE
          SX5    B5+
          WRITEC A0,DAR      WRITE DUMP PREFIX
          SB5    X5 
          JP     LMO1 
 DMD      SPACE  4
***       DMPD,MMMMMM,NNNNNN. 
*         LIST MEMORY IN OCTAL AND CHARACTER TO FILE *DUMP*,
*         ARGUMENTS SAME AS *D,MMMMMM,NNNNNN.*. 
  
  
**        DMD - LIST MEMORY TO FILE *DUMP*. 
  
  
 DMD      BSS    0           ENTRY
          SA0    D           SET LIST FILE
          SX5    B5+
          WRITEC A0,DAR      WRITE DUMP PREFIX
          SB5    X5 
          JP     LOD1 
 DMM      SPACE  4,8
***       DMPM,MMMMMM,NNNNNN. 
*         LIST MEMORY IN OCTAL (4 GROUPS OF 5 DIGITS) TO FILE *DUMP*. 
*         ARGUMENTS SAME AS *M,MMMMMM,NNNNNN.*
  
  
**        DMM - LIST MEMORY TO FILE *DUMP*. 
  
  
 DMM      BSS    0           ENTRY
          SA0    D           SET LIST FILE
          SX5    B5+
          WRITEC A0,DAR      WRITE DUMP PREFIX
          SB5    X5 
          SX6    B1          SET 4 GROUPS OF 5 DIGITS 
          SA6    OCBF        SAVE FORMAT FLAG 
          JP     LMO1A
 DMR      SPACE  4
***       DMPR. 
*         LIST REGISTER CONTENTS ON FILE *DUMP*.
  
  
**        DMR - LIST REGISTER CONTENTS ON FILE *DUMP*.
  
  
 DMR      BSS    0           ENTRY
          SA0    D           SET LIST FILE
          WRITEC A0,DAR      LIST DUMP INDICATOR
          JP     LRC1 
 EMB      SPACE  4,10 
***       EB,MMMMMM,B.CCCC. 
*         ENTER MEMORY BYTE IN OCTAL. 
*         ENTER LOCATION MMMMMM BYTE B (NUMBERED 0 - 4 FROM LEFT) 
*         WITH OCTAL VALUE CCCC.  WITH THE EXCEPTION OF BLANKS, CCCC
*         MAY NOT CONTAIN NON-OCTAL DIGIT CHARACTERS. 
  
  
**        EMB - ENTER MEMORY BYTE.
  
  
 EMB      BSS    0           ENTRY
          SA5    BUF         FIND FIRST CONTENT CHARACTER 
          SA3    TERM        TERMINATOR MASK
          RJ     FEC         FIND END OF COMMAND
          SA1    BUFA        LWA+1 INPUT LINE 
          SX0    5
          SB6    X1 
          SB7    B1          CHECK FOR TERMINATOR 
          RJ     ASC         ASSEMBLE CHARACTERS
          ZR     X4,POCE     IF NO NON-BLANK CHARACTERS 
          SB2    X4-5 
          PL     B2,POCE     IF TOO MANY CHARACTERS 
          MX2    -6 
          BX7    X7-X7
 EMB1     LX6    6
          BX1    -X2*X6 
          SX3    X1-1R8 
          PL     X3,POCE     IF NOT OCTAL DIGIT 
          SX3    X1-1R0 
          NG     X3,POCE     IF NOT OCTAL DIGIT 
          LX7    3
          BX7    X7+X3
          SX4    X4-1 
          NZ     X4,EMB1     IF MORE CHARACTERS 
          SA1    ADR1 
          SB2    X1-CDPS
          NG     B2,EMB2     IF BELOW DEBUGGER
          SB2    X1-CDPE
          PL     B2,EMB2     IF ABOVE DEBUGGER
          WRITEC O,EMMS      ISSUE ERROR MESSAGE
          JP     POCR        RETURN 
  
 EMB2     SA1    X1          GET LOCATION CONTENTS
          MX0    12 
          SA2    ADR2        BYTE NUMBER
          SB2    X2-5 
          PL     B2,POCE     IF ILLEGAL BYTE NUMBER 
          SX3    -12         SET BYTE CONTENTS
          IX2    X2*X3
          LX7    -12
          SB2    X2+60
          LX0    B2 
          BX1    -X0*X1 
          LX7    B2 
          BX7    X1+X7
          SA7    A1 
          EQ     POCR        RETURN 
 ECH      SPACE  4
***       ECHO. 
*         ECHO BACK ALL COMMAND LINES.
*         THIS MAY BE USEFUL IF AN ALTERNATE INPUT FILE IS IN USE.
  
  
***       ECHO,OFF. 
*         DO NOT ECHO BACK COMMAND LINES. 
*         REVERSES THE EFFECT OF *ECHO.*. *OFF* MAY BE ANY 1-7 CHARACTER
*         ARGUMENT. 
  
  
**        ECH - TURN ON/OFF COMMAND ECHO. 
  
  
 ECH      BSS    0           ENTRY
          SA1    POCB        CHECK COMPOUND ARGUMENT
          NZ     X1,POCE     IF ILLEGAL ARGUMENT
          SX6    B4+         SET ECHO 
          SA6    ECHO 
          JP     POCR        RETURN 
 EMD      SPACE  4,10 
***       ED,MMMMMM,NNNNNN.$DDD---DDD$
*         ENTER MEMORY IN DISPLAY.
*         ENTER LOCATIONS MMMMMM THROUGH NNNNNN WITH DISPLAY CODE 
*         STRING DDD---DDD.  ANY CHARACTER CAN BE USED AS A DELIMITER.
*         WORD STORAGE TERMINATES WHEN THE MATCHING DELIMITER IS
*         ENCOUNTERED, THE STRING IS EXHAUSTED, OR MMMMMM THROUGH 
*         NNNNNN HAVE BEEN FILLED.  IF NNNNNN IS ABSENT, ONLY MMMMMM
*         IS FILLED.  ALL INPUT CHARACTERS BEYOND THE 78TH POSITION 
*         ARE TRUNCATED.
  
  
**        EMD - ENTER MEMORY DISPLAY. 
  
  
 EMD      BSS    0           ENTRY
          SA1    ADR1        FWA STORE WORDS
          SA2    ADR2        LWA STORE WORDS
          SB2    CDPS 
          SB3    CDPE 
          SB4    X1 
          SB5    X2 
          LT     B4,B2,EMD1  IF RANGE BELOW DEBUGGER
          GE     B5,B3,EMD1  IF RANGE ABOVE DEBUGGER
          WRITEC O,EMMS      ISSUE ERROR MESSAGE
          JP     POCR        RETURN 
  
 EMD1     SA5    BUF         FIND FIRST DISPLAY CHARACTER 
          SA3    TERM        TERMINATOR MASK
          RJ     FEC         FIND END OF COMMAND
          SA1    BUFA 
          SB6    X1          LWA+1 INPUT LINE 
          SX0    B1 
          SB7    -B1         NO CHECK FOR TERMINATOR/SEPARATOR
          RJ     ASC         GET DELIMITER
          NG     B6,POCE     IF END OF LINE 
          BX3    X7 
          SB7    B0          CHECK FOR DELIMITER, NO BLANK SUPPRESSION
 EMD2     SX0    10 
          RJ     ASC         ASSEMBLE WORD OF DATA
          SA6    B4 
          SB4    B4+B1
          GT     B4,B5,POCR  IF ALL LOCATIONS FILLED
          PL     B6,EMD2     IF MORE CHARACTERS IN STRING 
          EQ     POCR 
 EMO      SPACE  4
***       EM,MMMMMM,NNNNNN.CCCCCCCCCCCCCCCCCCCC.
*         ENTER MEMORY IN OCTAL OR DECIMAL. 
*         IF CCC---CCC CONTAINS 11 TO 20 NON-BLANK CHARACTERS,
*         IT MUST BE OCTAL.  IF CCC---CCC IS 10 OR LESS NON-BLANK 
*         CHARACTERS, OCTAL BASE IS ASSUMED, HOWEVER, A POST RADIX
*         B (OCTAL) OR D (DECIMAL) MAY BE SPECIFIED, AND THE PRESENCE 
*         OF AN 8 OR 9 WILL FORCE DECIMAL BASE.  WITH THE EXCEPTION 
*         OF THE POST RADIX AND BLANKS, CCC---CCC MAY NOT CONTAIN 
*         NON-DIGIT CHARACTERS, INCLUDING ARITHMETIC OPERATORS AND
*         SYMBOLIC VALUES.  IF NNNNNN IS ABSENT, ONLY MMMMMM IS FILLED. 
  
  
**        EMO - ENTER MEMORY OCTAL. 
  
  
 EMO      BSS    0           ENTRY
          SA1    EMOD        SET UP CONDITIONAL CODE
          BX6    X1 
          SA6    EMOA 
 EMO1     SA5    BUF         FIND FIRST CONTENT CHARACTER 
          SA3    TERM        READ TERMINATOR MASK WORD
          RJ     FEC         FIND END OF COMMAND
          SA1    BUFA        LWA+1 INPUT LINE 
          SX0    10          ASSEMBLE 10 CHARACTERS 
          SB6    X1 
          SB7    B1          CHECK FOR TERMINATOR, BLANK SUPPRESSION
          RJ     ASC         ASSEMBLE CHARACTERS
 EMOA     ZR     X4,POCE     IF NO NON-BLANK CHARACTERS 
          SX7    X4+
*         ZR     X4,LXR1     IF LIST *X* REGISTER OPTION
*         SX7    X4+
          SA6    EMOB        SAVE ASSEMBLED CHARACTERS
          SA7    EMOC        SAVE CHARACTER COUNT 
          NG     B6,EMO5     IF TERMINATOR/END-OF-LINE ENCOUNTERED
          SX0    10          ASSEMBLE 10 CHARACTERS 
          RJ     ASC
          ZR     X4,EMO5     IF 10 OR LESS CHARACTERS 
          SA1    EMOC        UPDATE CHARACTER COUNT 
          SA6    EMOB+1      SAVE ASSEMBLED CHARACTERS
          IX7    X4+X1
          SA7    A1 
          SX0    B1+
          NG     B6,EMO2     IF TERMINATOR/END-OF-LINE ENCOUNTERED
          RJ     ASC         ASSEMBLE NEXT CHARACTER
          NZ     X4,POCE     IF TOO MANY CHARACTERS 
 EMO2     SA1    EMOC 
          SB2    B0          CHARACTER COUNTER
          SB3    X1          ASSEMBLED CHARACTER COUNT
          SB4    10 
          BX6    X6-X6
          MX0    -6 
          SA5    EMOB 
 EMO3     EQ     B2,B3,EMO6  IF ALL CHARACTERS PROCESSED
          NE     B2,B4,EMO4  IF WORD NOT EXHAUSTED
          SA5    A5+1 
 EMO4     LX5    6
          BX1    -X0*X5 
          SB2    B2+1 
          SX2    X1-1R8 
          PL     X2,POCE     IF NOT OCTAL DIGIT 
          SX2    X1-1R0 
          NG     X2,POCE     IF NOT OCTAL DIGIT 
          LX6    3
          BX6    X6+X2
          EQ     EMO3 
  
 EMO5     SA5    EMOB        GET WORD TO CONVERT
          SB7    B0+
          RJ     DXB         DISPLAY CODE TO BINARY CONVERSION
          NZ     X4,POCE     IF ERROR 
 EMO6     SA1    ADR1        FWA STORE WORDS
          SA2    ADR2 
          SB2    X1          ADR1 
          SB3    X2          ADR2 
          NG     X1,EMO7     IF RANGE CHECK DISABLED
          SB4    CDPS        CHECK ALTERATION OF DEBUGGER 
          SB5    CDPE 
          LT     B3,B4,EMO7  IF RANGE BELOW DEBUGGER
          GE     B2,B5,EMO7  IF RANGE ABOVE DEBUGGER
          WRITEC O,EMMS      ISSUE ERROR MESSAGE
          JP     POCR        RETURN 
  
 EMO7     SA6    B2 
          SB2    B2+B1
          LE     B2,B3,EMO7  IF NOT ALL WORDS STORED
          JP     POCR        RETURN 
  
 EMOB     BSSZ   2           CHARACTER BUFFER 
 EMOC     CON    0           CHARACTER COUNT
  
 EMOD     ZR     X4,POCE     IF NO NON-BLANK CHARACTERS 
          SX7    X4+
 END      SPACE  4,8
***       END.
*         TERMINATE PROGRAM EXECUTION.
  
  
**        END - TERMINATE PROGRAM EXECUTION.
  
  
 END      BSS    0           ENTRY
          WRITEC O,ENDA      WRITE MESSAGE
          WRITER O,R         FLUSH OUTPUT BUFFER
          RJ     RFP         RESTORE FET POINTER WORD 
          RJ     RSR         RESTORE REGISTERS
          ENDRUN             STOP 
  
 ENDA     DIS    ,* EXECUTION TERMINATED.*
  
 EMMS     DIS    ,* THIS WOULD DESTROY DEBUGGER.* 
 ERE      SPACE  4
***       EREXIT. 
*         SET ERROR EXIT ADDRESS FOR CDP PROCESSING.
  
  
**        ERE - SET ERROR EXIT PROCESSING.
  
  
 KR       IF     DEF,.KRONOS
 KR       IF     MAC,EREXIT 
 ERE      BSS    0           ENTRY
          EREXIT XIT
          JP     POCR        RETURN 
 KR       ELSE   1
 ERE      EQU    POCE 
 FIL      SPACE  4
***       FILE,X,AAAAAAA. 
*         SET FILE TYPE X NAME TO AAAAAAA.
*         X MAY BE ANY 1-7 CHARACTERS STARTING WITH - 
*                I TO SET INPUT FILE NAME. (COMMANDS) (DEFAULT *INPUT*) 
*                L TO SET LIST FILE NAME. (DEFAULT *OUTPUT*)
*                D TO SET DUMP FILE NAME. (DEFAULT *DUMP*)
*         RESETTING THE INPUT FILE NAME WILL CAUSE CDP TO IMMEDIATELY 
*         BEGIN READING AND PROCESSING COMMANDS FROM THE NEW FILE.
  
  
**        FIL - SET FILE NAME.
  
  
 FIL      BSS    0           ENTRY
          SA1    POCB        CHECK COMPOUND ARGUMENTS 
          SA2    A1+B1
          BX2    X1+X2
          NZ     X2,POCE     IF ILLEGAL ARGUMENT
          SA1    UOC+1       IDENTIFY FILE TYPE 
          SX0    77B
          LX1    6
          BX6    X0*X1
          SB2    X6-1RI 
          SB3    I
          ZR     B2,FIL1     IF I 
          SB2    X6-1RL 
          SB3    O
          ZR     B2,FIL1     IF L 
          SB2    X6-1RD 
          SB3    D
          NZ     B2,POCE     IF NOT D 
 FIL1     SA1    B3          SET FET
          SA2    UOC+2
          MX0    7*6
          BX6    -X0*X1 
          BX7    X0*X2
          BX6    X6+X7
          SA6    A1 
          SB3    B3-O 
          NZ     B3,POCR     IF NOT OUTPUT FILE 
          SX1    O           RESET FET POINTER
          BX7    X7+X1
          SA7    B1+B1
          JP     POCR        RETURN 
 RFL      SPACE  4
***       FL. 
*         RETURN CURRENT FIELD LENGTH.
  
  
***       FL,NNNNNN.
*         SET FIELD LENGTH. 
  
  
**        RFL - SET/RETURN FIELD LENGTH.
  
  
 RFL      BSS    0           ENTRY
          NZ     B4,RFL1     IF *SET FIELD LENGTH*
          SX7    0
          SA7    RFLA 
          MEMORY CM,A7,R
          SA1    A7          CONVERT FIELD LENGTH 
          AX1    30 
          RJ     COD
          SA1    RFLB        SET MESSAGE
          MX0    60-36
          BX6    -X0*X6 
          BX7    X1+X6
          SA7    RFLC 
          WRITEC O,A7 
          JP     POCR        RETURN 
  
 RFL1     BX5    X6          SAVE FIELD LENGTH DESIGNATION
          LX6    30 
          SA6    RFLC 
 KR       IF     DEF,.KRONOS
 KR       IF     MAC,SETRFL 
          SETRFL X5          SET FIELD LENGTH 
 KR       ENDIF 
          MEMORY CM,RFLC,R
          JP     POCR        RETURN 
  
 RFLA     CON    0
 RFLB     CON    4L FL
 RFLC     CON    0
          CON    0
 LMM      SPACE  4,8
***       M,MMMMMM,NNNNNN.
*         LIST MEMORY IN OCTAL (EACH WORD 4 GROUPS OF 5 DIGITS).
*         LIST FROM MMMMMM THROUGH NNNNNN.
*         IF NNNNNN IS ABSENT, LIST ONLY MMMMMM.
  
  
**        LMM - LIST MEMORY.
  
  
 LMM      BSS    0           ENTRY
          SA0    O           SET LIST FILE
          SX6    1           SET 4 GROUPS OF 5 DIGITS 
          SA6    OCBF        SAVE FORMAT FLAG 
          JP     LMO1A
 MOD      SPACE  4
***       MODE. 
*         RETURN CURRENT EXIT MODE. 
  
  
***       MODE,N. 
*         SET EXIT MODE TO N. 
  
  
**        MOD - SET/RETURN EXIT MODE. 
  
  
 KR       IF     DEF,.KRONOS
 KR       IF     MAC,GETEM
 KR       IF     MAC,MODE 
 MOD      BSS    0           ENTRY
          NZ     B4,MOD1     IF *SET EXIT MODE* 
          GETEM  MODA        GET EXIT MODE
          SA1    MODA        CONVERT MODE 
          RJ     COD
          SA1    MODB        SET MESSAGE
          MX0    60-6 
          BX6    -X0*X6 
          LX6    5*6
          BX7    X1+X6
          SA7    MODA 
          WRITEC O,A7 
          JP     POCR        RETURN 
  
 MOD1     SX7    X6-10B      VERIFY MODE NUMBER 
          PL     X7,POCE     IF MODE TOO HIGH 
          MODE   X6          SET EXIT MODE
          JP     POCR        RETURN 
  
 MODA     CON    0
 MODB     CON    4L EM
 KR       ELSE   1
 MOD      EQU    POCE 
 STP      SPACE  4
***       P.
*         LIST *P* REGISTER CONTENTS. 
  
  
***       P,NNNNNN. 
*         SET *P* REGISTER TO NNNNNN. 
  
  
**        STP - LIST/SET P. 
  
  
 STP      BSS    0           ENTRY
          ZR     B4,STP1     IF LIST P
          SA6    SVRP        SET P
          SA1    STPA        SET PROPER RETURN ADDRESS
          BX6    X1+X6
          LX6    30 
          SA6    CDP
          JP     POCR        RETURN 
  
 STP1     SA1    SVRP        READ *P* 
          RJ     COD         CONVERT *P*
          MX5    3*6
          SA1    STPB        LIST (P) 
          BX6    -X5*X6 
          BX7    X1+X6
          SX6    B0 
          SA7    LRCC 
          SA6    A7+B1
          WRITEC O,LRCC 
          JP     POCR        RETURN 
  
 STPA     NO
          NO
          EQ     0
 STPB     CON    3L P 
 LRC      SPACE  4
***       R.
*         LIST REGISTER CONTENTS. 
  
  
**        LRC - LIST REGISTER CONTENTS. 
  
  
 LRC      BSS    0           ENTRY
          SA0    O           SET LIST FILE
 LRC1     SA1    SVRP        READ *P* 
          RJ     COD         CONVERT *P*
          MX5    3*6
          SA1    LRCG        LIST (P) 
          BX6    -X5*X6 
          BX7    X1+X6
          SX6    B0 
          SA7    LRCC 
          SA6    A7+B1
          WRITEC A0,LRCC
          SB5    0           INITIALIZE REGISTER INDEX
 LRC2     SA1    SVRA+B5     READ *A* REGISTER CONTENTS 
          RJ     WOD         CONVERT CONTENTS TO DISPLAY
          RJ     SFZ         CONVERT LEADING DISPLAY ZEROS TO BLANKS
          MX0    -36
          SX2    B5 
          SA1    LRCA        REGISTER NAME
          LX2    42 
          BX6    -X0*X7 
          IX1    X1+X2
          BX6    X1+X6
          SA6    LRCC        SET *A* CONTENTS 
          SA1    SVRB+B5     READ *B* REGISTER CONTENTS 
          RJ     WOD         CONVERT CONTENTS TO DISPLAY
          RJ     SFZ         CONVERT LEADING DISPLAY ZEROS TO BLANKS
          SX2    B5+
          SA1    LRCB        REGISTER NAME
          MX0    -36
          LX2    42 
          BX6    -X0*X7 
          IX1    X1+X2
          BX6    X1+X6
          SA6    LRCD        SET *B* CONTENTS 
          SX5    B5          SAVE INDEX 
          WRITEC A0,LRCC     LIST *A* AND *B* 
          SB5    X5+B1       ADVANCE REGISTER INDEX 
          SB6    B5-8 
          NZ     B6,LRC2     IF NOT DONE WITH *A* AND *B* REGISTERS 
          SX6    0           SET 5 GROUPS OF 4 DIGITS 
          SA6    OCBF        SAVE FORMAT FLAG 
          SB5    0
          SA2    LRCE        *      X0  * 
          BX6    X2 
          SA6    A2+B1       SET REGISTER TAG 
 LRC3     SA1    SVRX+B5     READ *X* REGISTER CONTENTS 
          RJ     OCB         CONVERT OCTAL BY BYTES 
          SA1    SVRX+B5     SET CHARACTER INTERPRETATION 
          RJ     ZTB
          SA6    A6+B1
          SX5    B5          SAVE REGISTER INDEX
          WRITEC A0,LRCF     LIST *X* REGISTER CONTENTS 
          SB5    X5+B1       ADVANCE REGISTER INDEX 
          SA2    LRCF        ADVANCE TAG
          MX0    60-1 
          SB6    B5-8 
          LX0    6*2
          IX6    X2-X0
          SA6    A2+
          NZ     B6,LRC3     IF NOT DONE WITH *X* REGISTERS 
          SX0    A0 
          SX1    O
          BX7    X0-X1
          ZR     X7,POCR     RETURN - IF LIST FILE *OUTPUT* 
          WRITER A0,R        END RECORD 
          JP     POCR        RETURN 
  
 LRCA     CON    4L A0
 LRCB     CON    4L B0
 LRCC     CON    0
 LRCD     CON    0
          CON    0
 LRCE     CON    10H      X0
 LRCF     CON    0
          CON    0
          CON    0
          CON    0
          CON    0
          CON    0
 LRCG     CON    3L P 
 STL      SPACE  4
***       SETTL,NNNN. 
*         SET CPU TIME LIMIT TO NNNN SECONDS. 
  
  
**        STL - SET TIME LIMIT. 
  
  
 KR       IF     DEF,.KRONOS
 KR       IF     MAC,SETTL
 STL      BSS    0           ENTRY
          SETTL  X6          SET TIME LIMIT 
          JP     POCR        RETURN 
 KR       ELSE   1
 STL      EQU    POCE 
 LXR      SPACE  4
***       X,N.
*         LIST CONTENTS OF *X* REGISTER N.
  
  
***       X,N.CCCCCCCCCCCCCCCCCCCC. 
*         ENTER *X* REGISTER N WITH CONTENTS CCC---CCC. 
*         IF CCC---CCC CONTAINS 11 TO 20 NON-BLANK CHARACTERS,
*         IT MUST BE OCTAL.  IF CCC---CCC IS 10 OR LESS NON-BLANK 
*         CHARACTERS, OCTAL BASE IS ASSUMED, HOWEVER, A POST RADIX
*         B (OCTAL) OR D (DECIMAL) MAY BE SPECIFIED, AND THE PRESENCE 
*         OF AN 8 OR 9 WILL FORCE DECIMAL BASE.  WITH THE EXCEPTION 
*         OF THE POST RADIX AND BLANKS, CCC---CCC MAY NOT CONTAIN 
*         NON-DIGIT CHARACTERS, INCLUDING ARITHMETIC OPERATORS AND
*         SYMBOLIC VALUES.
  
  
**        LXR - LIST/SET *X* REGISTER CONTENTS. 
  
  
 LXR      BSS    0           ENTRY
          SX7    X6-8        CHECK ILLEGAL NUMBER 
          PL     X7,POCE     IF NUMBER .GT. 7 
          SA6    LXRB 
          SX6    X6+SVRX     SET MEMORY ADDRESS 
          MX0    1           DISABLE ADDRESS RANGE CHECK
          BX6    X0+X6
          SA6    ADR1 
          SA6    A6+B1
          SA1    LXRA        SET RETURN CODE FOR LIST *X* REGISTER
          BX6    X1 
          SA6    EMOA 
          JP     EMO1        CHECK FINAL PARAMETER
  
*         LIST *X* REGISTER CONTENTS. 
  
 LXR1     SA3    LXRB        REGISTER NUMBER
          SA2    LRCE        READ REGISTER TAG
          SX6    0           SET 5 GROUPS OF 4 DIGITS 
          SA6    OCBF        SAVE FORMAT FLAG 
          SB5    X3 
          LX3    6*2
          SA1    SVRX+B5     READ REGISTER CONTENTS 
          IX6    X2+X3       FORM REGISTER NAME 
          SA6    A2+B1
          RJ     OCB         CONVERT REGISTER CONTENTS
          SA1    SVRX+B5     SET CHARACTER INTERPRETATION 
          RJ     ZTB
          SA6    A6+B1
          MX7    0           TERMINATE LINE 
          SA7    A6+1 
          WRITEC O,LRCF      LIST REGISTER CONTENTS 
          JP     POCR        RETURN 
  
  
 LXRA     ZR     X4,LXR1     IF NO NON-BLANK CHARACTERS 
          SX7    X4+
  
 LXRB     CON    0           REGISTER NUMBER
          TITLE  COMCCDP - CPU DEBUGGING PACKAGE - SUBROUTINES. 
 ASC      SPACE  4,35 
**        ASC - ASSEMBLE CHARACTERS.
* 
*         ENTRY  (A5) = ADDRESS OF WORD CONTAINING NEXT CHARACTER TO
*                       BE ASSEMBLED. 
*                (X0) = NUMBER OF CHARACTERS TO ASSEMBLE. 
*                (X3) = DELIMITER DISPLAY CODE OR POSITIONAL BIT
*                       TERMINATOR MASK.
*                (X5) = REMAINING CHARACTERS TO BE ASSEMBLED FROM 
*                       THIS WORD, LEFT-JUSTIFIED, ZERO FILLED. 
*                (B3) = NUMBER OF CHARACTERS REMAINING IN X5. 
*                (B6) = LWA+1 INPUT LINE. 
*                (B7) .LT. 0, IF NO CHECK FOR DELIMITER OR TERMINATOR,
*                       AND NO BLANK SUPPRESSION. 
*                (B7) .EQ. 0, IF CHECK FOR DELIMITER (DISPLAY CODE
*                       DELIMITER IN X3), AND NO BLANK SUPPRESSION. 
*                (B7) .GT. 0, IF CHECK FOR TERMINATOR (POSITIONAL BIT 
*                       TERMINATOR MASK IN X3), AND BLANK SUPPRESSION.
* 
*         EXIT   (A5) = ADDRESS OF WORD CONTAINING NEXT CHARACTER TO
*                       BE ASSEMBLED. 
*                (X4) = NUMBER OF CHARACTERS ASSEMBLED. 
*                (X5) = REMAINING CHARACTERS AFTER ASSEMBLY.
*                (X6) = ASSEMBLED CHARACTERS, LEFT-JUSTIFIED, 
*                       ZERO FILLED.
*                (X7) = ASSEMBLED CHARACTERS, RIGHT-JUSTIFIED,
*                       ZERO FILLED.
*                (B3) = NUMBER OF CHARACTERS REMAINING IN X5. 
*                (B6) .LT. 0, IF END OF LINE, FINAL DELIMITER, OR 
*                       TERMINATOR ENCOUNTERED, OTHERWISE UNCHANGED.
* 
*         USES   A - 1, 5, 6. 
*                B - 2, 3, 6. 
*                X - 0, 1, 2, 4, 5, 6, 7. 
  
  
 ASC5     SB6    -1 
 ASC6     SA1    ASCA 
          SX2    6
          IX4    X1-X0
          IX1    X4*X2
          BX1    -X1
          SB2    X1+60
          LX6    X7,B2
  
 ASC      SUBR               ENTRY/EXIT 
          MX4    -6 
          SX6    X0+
          BX7    X7-X7
          SA6    ASCA 
          ZR     X5,ASC4     IF NO MORE CHARACTERS IN THIS WORD 
 ASC1     ZR     X0,ASC6     IF ASSEMBLY COMPLETE 
          LX5    6
          BX2    -X4*X5 
          BX5    X5-X2
          SB3    B3-B1
          LT     B7,ASC3     IF NO CHECK FOR DELIMITER/TERMINATOR 
          NZ     B7,ASC2     IF POSITIONAL BIT TERMINATOR MASK
          IX1    X2-X3
          NZ     X1,ASC3     IF NOT FINAL DELIMITER 
          EQ     ASC5 
  
 ASC2     SX1    X2-1R
          ZR     X1,ASC4     IF BLANK 
          SB2    X2 
          LX1    X3,B2
          NG     X1,ASC5     IF TERMINATOR ENCOUNTERED
 ASC3     LX7    6
          BX7    X7+X2
          SX0    X0-1 
 ASC4     NZ     X5,ASC1     IF WORD NOT EXHAUSTED
          SB2    A5+B1
          SA1    B2 
          EQ     B2,B6,ASC5  IF END OF LINE 
          ZR     X1,ASC5     IF END OF LINE 
          NZ     B3,ASC1     IF ZERO CHARACTER TO PACK
          SB3    10 
          SA5    B2 
          EQ     ASC1 
  
  
ASCA      CON    0           NUMBER OF CHARACTERS TO ASSEMBLE 
 BST      SPACE  4
**        BST - BINARY SEARCH TABLE.
* 
*         ENTRY  (X1)= CRITERION. 
*                (X2)= MASK.
*                (B2)= FWA OF TABLE.
*                (B3)= LENGTH OF TABLE. 
* 
*         EXIT   (X1)= CRITERION. 
*                (X2)= MASK.
*                (X3)= 0 IF ENTRY NOT FOUND.
*                    = ENTRY IF FOUND.
*                (A3)= ADDRESS OF FOUND ENTRY.
* 
*         USES   B - 2,3. 
*                A - 3. 
*                X - 3,4,6. 
* 
*         CALLS  NONE.
  
  
 BST3     SX3    0           RETURN *NOT FOUND* 
 BST      PS                 ENTRY/EXIT 
          SB3    B2+B3       SET LWA+1 OF TABLE 
          SX3    B0 
          EQ     BST2        ENTER LOOP 
  
 BST1     SB2    A3+         SET NEW LOW LIMIT
 BST2     SX4    B3-B2       FIND MIDDLE
          AX4    1
          SA3    X4+B2       READ ENTRY 
          BX6    X2*X3       MASK ENTRY 
          IX6    X6-X1       ENTRY - CRITERION
          ZR     X6,BST      RETURN - IF FOUND
          ZR     X4,BST3     IF TABLE EXHAUSTED 
          NG     X6,BST1     IF ENTRY .LT. CRITERION
          SB3    A3          SET UPPER LIMIT
          EQ     BST2        CONTINUE 
 CAD      SPACE  4
**        CAD - CONVERT ADDRESS.
* 
*         ENTRY  (B1)= 1. 
*                (A5)= FWA OF UNPACKED ARGUMENT.
*                (X5)= ((A5)).
* 
*         EXIT   (B7)= CONVERSION.
*                (A5)= LWA OF UNPACKED ARGUMENT.
*                (B4)= 0 IF NOT A COMPOUND ARGUMENT.
*                (NARG) ADVANCED BY ONE.
* 
*         USES   B - 2,3,4,7. 
*                A - 1,2,3,5,6,7. 
*                X - 0,1,2,3,5,6,7. 
* 
*         CALLS  DXB,SST. 
  
  
 CAD      PS                 ENTRY/EXIT 
          MX0    -6          EXTRACT SEPARATOR
          BX6    -X0*X5 
          SB7    0           ASSUME OCTAL 
          SA6    CADA 
          RJ     DXB         CHECK FIRST SUB-ARGUMENT NUMERIC 
          ZR     X4,CAD1     IF NUMERIC 
          SA1    A5+         CHECK SYMBOL IN TABLE
          RJ     SST
          NZ     X6,POCE     IF NOT IN TABLE
          SX6    X2+         VALUE OF SYMBOL
 CAD1     SA1    CADA        CHECK OPERATOR PRESENT 
          SA6    CADB        STORE FIRST VALUE
          SB2    X1-1R+ 
          SB3    X1-1R- 
          ZR     B2,CAD2     IF + 
          NZ     B3,CAD4     IF NOT - 
 CAD2     SA5    A5+1        READ SECOND SUB-ARGUMENT 
          RJ     DXB         CHECK SECOND SUB-ARGUMENT NUMERIC
          ZR     X4,CAD3     IF NUMERIC 
          SA1    A5+         CHECK SYMBOL IN TABLE
          RJ     SST
          NZ     X6,POCE     IF NOT IN TABLE
          SX6    X2+         VALUE OF SYMBOL
 CAD3     SA6    CADC        STORE VALUE OF SECOND SUB-ARGUMENT 
 CAD4     SA1    CADA        COMPUTE FINAL VALUE
          SA2    A1+B1
          SA3    A2+B1
          SB2    X1-1R+ 
          SB3    X1-1R- 
          SB4    1
          ZR     B2,CAD6     IF + 
          ZR     B3,CAD5     IF - 
          BX3    X3-X3
          SB4    B0 
          JP     CAD6 
  
 CAD5     BX3    -X3
 CAD6     IX6    X2+X3
          SA1    NARG        ADVANCE NUMBER OF ARGUMENTS
          SB7    X6 
          SX7    X1+B1
          SA7    A1 
          JP     CAD         RETURN 
  
 CADA     CON    0           OPERATOR 
 CADB     CON    0           OPERAND 1
 CADC     CON    0           OPERAND 2
 CCA      SPACE  4,15 
**        CCA - CHECK FOR COMPOUND ARGUMENT.
* 
*         ENTRY  (A1) = PREVIOUS ARGUMENT ADDRESS.
*                (B2) = REMAINING ARGUMENT COUNT. 
*                (B3) = CUMMULATIVE SINGLE/COMPOUND ARGUMENT COUNT. 
* 
*         EXIT   (A1) = UPDATED ARGUMENT ADDRESS. 
*                (B2) = UPDATED REMAINING ARGUMENT COUNT. 
*                (B3) = UPDATED SINGLE/COMPOUND ARGUMENT COUNT. 
*                (B6) .NE. 0, IF ILLEGAL SEPARATOR ENCOUNTERED. 
*                (X6) .NE. 0, IF COMPOUND ARGUMENT PROCESSED. 
* 
*         USES   A - 1. 
*                B - 2, 3, 5, 6.
*                X - 1, 6.
  
  
 CCA      SUBR               ENTRY/EXIT 
          SB6    B0 
          BX6    X6-X6
          ZR     B2,CCAX     IF NO MORE ARGUMENTS 
          SA1    A1+B1
          SB3    B3+B1
          SB5    X1-1R+ 
          SB2    B2-1 
          ZR     B5,CCA1     IF + SEPARATES COMPOUND ARGUMENT 
          SB5    X1-1R- 
          NZ     B5,CCAX     IF NOT COMPOUND ARGUMENT 
 CCA1     SA1    A1+B1
          SB2    B2-B1
          SB5    X1-1R+ 
          SX6    B1+
          ZR     B5,CCA2     IF ILLEGAL SEPARATOR 
          SB5    X1-1R- 
          NZ     B5,CCAX     IF LEGAL SEPARATOR 
 CCA2     SB6    B1 
          EQ     CCAX        RETURN 
 FEC      SPACE  4
**        FEC - FIND END OF COMMAND.
* 
*         ENTRY  (A5)= ADDRESS OF COMMAND.
*                (X5)= ((A5)).
*                (X3)= TERMINATOR MASK WORD.
* 
*         EXIT   (A5)= ADDRESS OF WORD CONTAINING FIRST CHARACTER AFTER 
*                      TERMINATOR.
*                (X5) = REMAINING CHARACTERS AFTER TERMINATOR, LEFT-
*                       JUSTIFIED, ZERO FILLED. 
*                (B3) = NUMBER OF CHARACTERS REMAINING IN X5. 
* 
*         USES   A - 5. 
*                B - 2, 3.
*                X - 0, 2, 5, 7.
  
  
 FEC      PS                 ENTRY/EXIT 
          MX0    -6 
          SB3    10 
 FEC1     LX5    6           NEXT CHARACTER 
          BX7    -X0*X5      PICK 1 CHARACTER 
          SB3    B3-B1
          BX5    X5-X7
          SB2    X7 
          LX2    X3,B2       CHECK FOR TERMINATOR 
          GT     B3,FEC2     IF WORD NOT EXHAUSTED
          SA5    A5+1        READ NEXT BUF WORD 
          SB3    10 
 FEC2     PL     X2,FEC1     IF NOT TERMINATOR
          JP     FEC         RETURN 
 IBP      SPACE  4
**        IBP - INSERT BREAKPOINT INSTRUCTION.
* 
*         ENTRY  (IBPA)= NEXT BREAKPOINT ADDRESS. 
*                (IBPA)= 0 IF NO BREAKPOINT NEXT. 
* 
*         EXIT   (WORD SPECIFIED IN IBPA)= *RJ CDP 0000000000*
*                (RPBA)= ORIGINAL CONTENTS OF BREAKPOINT WORD.
* 
*         USES   A - 1,2,3,6,7. 
*                X - 1,2,3,6,7. 
* 
*         CALLS  NONE.
  
  
 IBP      PS                 ENTRY/EXIT 
          SA1    IBPA 
          ZR     X1,IBP      RETURN - IF NO ADDRESS SET 
          SA2    IBPB        READ INSTRUCTION 
          SA3    X1          READ CURRENT CONTENTS OF WORD
          BX6    X2 
          LX7    X3 
          SA6    X1          STORE INSTRUCTION
          SA7    RPBA        SAVE CONTENTS
          JP     IBP         RETURN 
  
 IBPA     CON    0           NEXT BREAKPOINT ADDRESS
 IBPB     RJ     CDP         BREAKPOINT INSTRUCTION 
-         VFD    30/0 
 LCL      SPACE  4
**        LCL - LIST CURRENT LOCATION.
* 
*         ENTRY  (SVRP)= CURRENT PROGRAM ADDRESS. 
* 
*         USES   A - 1,6. 
*                X - 0,1,6. 
* 
*         CALLS  COD, WTC 
  
  
 LCL      PS                 ENTRY/EXIT 
          SA1    SVRP        READ (P) 
          RJ     COD         CONVERT TO DISPLAY CODE
          SA1    LCLA        *BK *
          MX0    3*6
          BX6    -X0*X6 
          BX6    X1+X6       FORM *BP NNNNNN* 
          SA6    LCLB 
          WRITEC O,A6        LIST ADDRESS 
          JP     LCL         RETURN 
  
 LCLA     CON    3L BK
 LCLB     CON    0
 LCLC     CON    0
 OCB      SPACE  4
**        OCB - CONVERT OCTAL BY BYTES. 
* 
*         ENTRY  (X1) = WORD TO CONVERT.
*                (A6) = BUFFER ADDRESS. 
* 
*         EXIT   (A6) = BUFFER ADDRESS ADVANCED.
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6, 7.
*                B - NONE.
*                A - 6, 7.
* 
*         CALLS  WOD. 
  
  
 OCB      PS                 ENTRY/EXIT 
          RJ     WOD         CONVERT WORD (ABCDEFGHIJ KLMNOPQRST) 
          SA1    OCBF 
          NZ     X1,OCB1     IF 4 GROUPS OF 5 DIGITS WANTED 
          SA1    OCBA 
          MX2    -2*6 
          BX5    -X2*X6      ........IJ 
          MX0    4*6
          BX3    X0*X6       ABCD...... 
          LX0    -4*6 
          IX4    X1+X3       ABCD*....* 
          BX2    X0*X6
          LX2    -6          .....EFGH. 
          BX6    X4+X2       ABCD*EFGH* 
          LX7    -4*6        QRSTKLMNOP 
          SA6    A6+B1
          MX0    4*6
          BX6    X0*X7       QRST...... 
          LX5    8*6         IJ........ 
          BX7    -X0*X7      ....KLMNOP 
          LX7    2*6         ..KLMONP.. 
          IX2    X5+X7       IJKLMNOP.. 
          BX3    X0*X2       IJKL...... 
          LX0    -4*6 
          IX4    X1+X3       IJKL*....* 
          BX5    X0*X2       ....MNOP.. 
          SA1    A1+B1       ....****** 
          LX5    -6          .....MNOP. 
          IX7    X4+X5       IJKL*MNOP* 
          BX6    X1+X6       QRST****** 
          SA7    A6+B1
          SA6    A7+B1
          JP     OCB         RETURN 
 OCB1     SA1    OCBB        .....*.... 
          MX0    5*6
          MX5    -6 
          BX2    X0*X6       ABCDE..... 
          MX3    -4*6 
          BX4    -X5*X6      .........J 
          AX6    6           .ABCDEFGHI 
          IX2    X1+X2       ABCDE*.... 
          BX6    -X3*X6      ......FGHI 
          SA1    A1+B1       .*.....*.. 
          MX3    -3*6 
          IX6    X2+X6       ABCDE*FGHI 
          LX4    -6          J......... 
          BX3    -X3*X7      .......RST 
          SA6    A6+B1
          MX5    -2*6 
          BX0    X0*X7       KLMNO..... 
          IX4    X1+X4       J*.....*.. 
          AX7    3*6         ...KLMNOPQ 
          SA1    A1+B1       ...******* 
          LX0    -2*6        ..KLMNO... 
          BX5    -X5*X7      ........PQ 
          IX4    X4+X0       J*KLMNO*.. 
          LX3    -3*6        RST....... 
          BX7    X4+X5       J*KLMNO*PQ 
          IX6    X1+X3       RST******* 
          SA7    A6+B1
          SA6    A7+B1
          JP     OCB         RETURN 
  
 OCBA     VFD    24/0,6/1R ,24/0,6/1R 
          VFD    24/0,36/6H 
 OCBB     VFD    30/0,6/1R ,24/0
          VFD    6/0,6/1R ,30/0,6/1R ,12/0
          VFD    18/0,42/7H 
 OCBF     DATA   0           FORMAT FLAG --   0 = C/D,  1 = M 
 RFP      SPACE  4
**        RFP - RESTORE FET POINTER WORD. 
* 
*         ENTRY  (SFPA)= PREVIOUS CONTENTS OF FET POINTER WORD. 
* 
*         USES   A - 1,6. 
*                X - 1,6. 
* 
*         CALLS  NONE.
  
  
 RFP      PS                 ENTRY/EXIT 
          SA1    SFPA 
          BX6    X1 
          SA6    B1+B1
          JP     RFP         RETURN 
 RPB      SPACE  4
**        RPB - RESTORE PREVIOUS BREAKPOINT.
* 
*         ENTRY  (SVRP)= ADDRESS OF PROGRAM BREAKPOINT. 
*                (RPBA)= CONTENTS OF BREAKPOINT WORD. 
* 
*         USES   A - 1,2,7. 
*                X - 1,2,7. 
* 
*         CALLS  NONE.
  
  
 RPB      PS                 ENTRY/EXIT 
          SA1    SVRP        READ P 
          SA2    RPBA        READ PREVIOUS CONTENTS OF WORD 
          BX7    X2 
          SA7    X1          RESTORE WORD 
          JP     RPB         RETURN 
  
 RPBA     CON    0           CONTENTS OF BREAKPOINT WORD
 RSR      SPACE  4
**        RSR - RESTORE ALL REGISTERS.
* 
*         ENTRY  (SVRA-SVRX+7)= PREVIOUS REGISTER CONTENTS. 
  
  
 RSR      PS                 ENTRY/EXIT 
          MX0    18 
          SA5    SVRX+5      X5 
          SB2    B0 
          SA2    RSR2 
          SX1    74B
          BX7    -X1*X2      PRESET TO CORRECT SHIFT COUNT
          PL     X5,*+1 
          BX7    X7+X1
          SB4    8
          SB1    1
          LX0    33 
          SB3    B4-B1
          SB4    B4+B3
          MX4    0
 RSR1     SA2    A2+B1
          SA1    SVRB+1+B2
          IX6    X7+X4
          BX4    -X0*X2 
          LX3    X1,B4
          SB2    B2+B1
          SA6    A2-B1
          BX7    X0*X3
          NE     B2,B3,RSR1 
          LX0    15 
          SA3    SVRX        X0 
          UX5    X5,B6
          BX4    -X0*X2 
          LX7    15 
          SA1    A1+B1       A0 
          IX6    X7+X4
          MX4    60 
          BX0    X3          X0 
          LX5    11 
          SB7    X4+777777B  B7=-0
          SA0    X1+B7       A0 
          UX5    X5,B5
          SA1    SVRA+6      A6 
          SA6    A2 
          LX5    11 
          SA2    A1+B1       A7 
          SA3    X1+B7
          SA4    X2+B7
          BX6    X3 
          SA3    SVRA+1      A1 
          BX7    X4 
          SA6    X1+B7       A6 
          UX5    X5,B4
          SA7    X2+B7       A7 
          LX5    11 
          SA2    SVRX+6      X6 
          SA1    X3+B7       A1 
          BX6    X2          X6 
          UX5    X5,B3
          SA3    SVRX+7      X7 
          SA4    SVRX+1      X1 
          LX5    11 
          BX7    X3          X7 
          SA2    SVRA+2      A2 
          UX5    X5,B2
          BX1    X4          X1 
          SA3    SVRX+2      X2 
          LX5    11 
          SA2    X2+B7       A2 
          SA4    SVRA+3      A3 
          UX5    X5,B1
          BX2    X3          X2 
          SA3    X4+B7       A3 
          SA5    SVRX+3      X3 
          NO
          SA4    SVRA+4      A4 
          BX3    X5          X3 
          SA5    SVRX+4      X4 
          SA4    X4+B7       A4 
          NO
          BX4    X5          X4 
          SA5    SVRA+5      A5 
 RSR2     SA5    X5+B7       A5 
          NO
          NO
          MX5    0
          PX5    X5,B1       RESTORE B1-B7 AND X5 
          SB1    B7+0 
          LX5    49 
          PX5    X5,B2
          SB2    B7+0 
          LX5    49 
          PX5    X5,B3
          SB3    B7+0 
          LX5    49 
          PX5    X5,B4
          SB4    B7+0 
          LX5    49 
          PX5    X5,B5
          SB5    B7+0 
          LX5    49 
          PX5    X5,B6
          SB6    B7+0 
          SB7    B7+0 
          JP     RSR         RETURN 
 SAD      SPACE  4
**        SAD - SET ADDRESSES.
* 
*         ENTRY  (B4)= NUMBER OF COMMAND ARGUMENTS. 
*                (UOC+1 - UOC+2)= ADDRESS ARGUMENTS FROM COMMAND. 
*                (B1)= 1. 
*                (X6) = ADDRESS VALIDATION FLAGS, LEFT-JUSTIFIED. 
* 
*         EXIT   (ADR1)= FIRST ADDRESS. 
*                (ADR2)= SECOND ADDRESS.
*                (X6)= FIRST ADDRESS. 
*                (B5)= SECOND ADDRESS.
*                (B4)= NUMBER OF COMMAND ARGUMENTS. 
* 
*         USES   B - 4,5. 
*                A - 1,2,3,5,6,7. 
*                X - 1,2,3,5,6,7. 
* 
*         CALLS  CAD,SYS=,WTC=. 
  
  
 SAD5     BX6    X6-X6       SET VALUES TO ZERO 
          SA6    ADR1 
          SA6    A6+B1
 SAD6     SA1    ADR1        SET EXIT DATA
          SA2    ADR2 
          SA3    NARG 
          SX6    X1 
          SB5    X2 
          SB4    X3+
  
 SAD      PS                 ENTRY/EXIT 
          ZR     B4,SAD5     IF NO ARGUMENTS
          SA6    SADA        SAVE ADDRESS VALIDATION FLAGS
          SA5    UOC+1       CONVERT FIRST ADDRESS
          RJ     CAD
          SX6    B7          SECOND = FIRST 
          SA5    A5+B1       READ NEXT ARGUMENT 
          SA6    ADR1 
          SA6    ADR2 
          ZR     X5,SAD1     IF END OF ARGUMENTS
          RJ     CAD
          SX7    B7 
          SA7    ADR2 
 SAD1     SA1    SADA        VALIDATION FLAGS 
          PL     X1,SAD6     IF NO VALIDATION 
          BX7    X7-X7       GET CURRENT FL 
          LX0    X1,B1
          SA7    SADD 
          MEMORY CM,A7
          SA1    ADR1 
          SA2    ADR2 
          SA3    SADD 
          SB4    SADC 
          AX3    30 
          IX6    X1-X3
          PL     X6,SAD2     IF ADDRESS .GE. FL 
          NG     X0,SAD6     IF VALIDATION ONLY ON FIRST PARAMETER
          IX6    X7-X3
          IX7    X2-X1
          PL     X6,SAD2     IF ADDRESS .GE. FL 
          SB4    SADB 
          PL     X7,SAD6     IF FWA .LE. LWA
 SAD2     WRITEC O,B4        WRITE ERROR MESSAGE
          JP     POCR        RETURN 
  
 SADA     CON    0
 SADB     DIS    ,*FWA .GT. LWA.* 
 SADC     DIS    ,*ADDRESS OUT OF RANGE.* 
 SADD     CON    0
 SFP      SPACE  4
**        SFP - SET FET POINTER FOR TERMINAL I/O. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (2)= INPUT FET POINTER.
*                (SFPA)= PREVIOUS CONTENTS OF 2.
* 
*         USES   A - 1,2,6,7. 
*                X - 0,1,2,6,7. 
* 
*         CALLS  NONE.
  
  
 SFP      PS                 ENTRY/EXIT 
          SA1    B1+B1       SAVE CURRENT CONTENTS OF 2 
          SA2    O           SET FET POINTER
          MX0    7*6
          BX6    X1 
          BX7    X0*X2
          SA6    SFPA 
          SX2    A2 
          BX7    X7+X2
          SA7    A1+
          JP     SFP         RETURN 
  
 SFPA     CON    0           (2)
 SFZ      SPACE  4,15 
**        SFZ - SPACE FILL LEADING DISPLAY CODE ZEROS.
* 
*         ENTRY  (X7) = DISPLAY CODE NUMBER, RIGHT-JUSTIFIED, DISPLAY 
*                       CODE ZERO FILLED. 
* 
*         EXIT   (X7) = DISPLAY CODE NUMBER, RIGHT JUSTIFIED, BLANK 
*                       FILLED. 
* 
*         USES   A - 1. 
*                B - 2. 
*                X - 0, 1, 2, 3, 7. 
  
  
 SFZ2     MX2    -54
          BX0    -X2*X0 
          SA1    SFZA 
          LX0    6
          BX2    -X0*X7 
          BX1    X0*X1
          BX7    X1+X2
  
 SFZ      SUBR               ENTRY/EXIT 
          MX0    6
          BX3    X7 
          SB2    10 
          MX1    -6 
 SFZ1     LX3    6
          BX2    -X1*X3 
          SX2    X2-1R0 
          NZ     X2,SFZ2     IF NO MORE LEADING DISPLAY CODE ZEROS
          SB2    B2-1 
          EQ     B2,SFZ2     IF NO MORE DIGITS IN WORD
          AX0    6
          EQ     SFZ1 
  
  
 SFZA     CON    10H
 SST      SPACE  4
**        SST - SEARCH SYMBOL TABLE.
* 
*         ENTRY  (X1)= CRITERION. 
* 
*         EXIT   (A2)= ADDRESS OF ENTRY IF FOUND, ELSE NEXT AVAILABLE 
*                      ADDRESS. 
*                (X6)= 0 IF FOUND.
* 
*         USES   A - 2. 
*                X - 0,2,6. 
* 
*         CALLS 
  
  
 SST      PS                 ENTRY/EXIT 
          MX0    7*6         SYMBOL MASK
          SA2    TSYM-1      INITIALIZE TABLE ADDRESS 
          MX6    1           ASSUME NO FIND 
 SST1     SA2    A2+B1       READ NEXT ENTRY
          ZR     X2,SST      RETURN IF END OF TABLE 
          BX6    X2-X1
          BX6    X0*X6
          NZ     X6,SST1     LOOP IF NOT FOUND
          JP     SST         RETURN - ENTRY FOUND 
 SVR      SPACE  4
**        SVR - SAVE ALL REGISTERS. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (B1)= 1. 
  
  
 SVR      PS                 ENTRY/EXIT 
          PL     B7,*+2      CONSTRUCT TRAIL DESCRIBING B7
          RJ     *+1
 SVR1     CON    0
          DUP    17 
          SB7    B7+B7
          PL     B7,*+3 
          RJ     *+1
          CON    0
          ENDD
          SB7    A7          SAVE X7
          SA7    SVRX+7 
          SX7    A6          SAVE X6
          SA6    SVRX+6 
          SA7    SVRA+6      A6 
          BX6    X0 
          LX7    X1 
          SA6    SVRX        X0 
          SA7    SVRX+1      X1 
          BX6    X2 
          LX7    X3 
          SA6    SVRX+2      X2 
          SA7    SVRX+3      X3 
          BX6    X4 
          LX7    X5 
          SA6    SVRX+4      X4 
          SA7    SVRX+5      X5 
          SX6    A0 
          SX7    A1 
          SA6    SVRA        A0 
          SA7    SVRA+1      A1 
          SX6    A2 
          SX7    A3 
          SA6    SVRA+2      A2 
          SA7    SVRA+3      A3 
          SA3    SVR1        RECONSTRUCT B7 
          SX6    A4 
          SX7    A5 
          SA6    SVRA+4      A4 
          SA7    SVRA+5      A5 
          SX6    B7 
          SX7    B1 
          SA6    SVRA+7      A7 
          SA7    SVRB+1      B1 
          SB1    1
          SX6    B2 
          SX7    B3 
          SA6    A7+B1       B2 
          SA7    A6+B1       B3 
          SB2    17 
          SX6    B4 
          SX7    B5 
          SA6    A7+B1       B4 
          SA7    A6+B1       B5 
          SB3    3
          SX6    B6 
          SA6    A7+B1       B6 
          MX4    1
          SX7    B0 
          BX6    X0-X0
          LX4    57 
 SVR2     BX3    X3*X4       FOLLOW B7 TRAIL TO RECONSTRUCT 
          SA7    A3          CLEAR
          SB2    B2-B1
          IX6    X3+X6
          SA3    A3+B3
          LX6    1
          PL     B2,SVR2     LOOP 
          SA1    CDP         SAVE P 
          SA7    SVRB        B0 
          SA2    FIRST       CHECK FIRST ENTRY TO CDP 
          LX6    3
          LX1    30 
          SA6    SVRB+7      B7 
          SX7    X1-1 
          SA7    SVRP 
          NZ     X2,SVR      RETURN IF NOT FIRST ENTRY
          SX1    CDPS        ANNOUNCE LOCATION OF DEBUGGER
          RJ     COD
          SA1    SVRD 
          MX0    -4*6 
          LX6    4*6
          BX7    -X0*X1 
          BX6    X0*X6
          BX7    X6+X7
          SA7    A1 
          SX1    CDPE-1 
          RJ     COD
          BX6    X4 
          SA6    SVRE 
          SA6    FIRST
          WRITEC O,SVRC 
          JP     SVR         RETURN 
  
 SVRC     DATA   10H CDP FROM 
 SVRD     DATA   4A TO
 SVRE     CON    0
          CON    0
  
 SVRB     BSS    8           B REGISTERS
 SVRA     BSS    8           A REGISTERS
 SVRX     BSS    8           X REGISTERS
 SVRP     BSS    1           P REGISTER 
 XIT      SPACE  4
***       WHEN ERROR EXIT TAKEN, AND THE *EREXIT.* COMMAND WAS ENTERED, 
*         CDP WILL OUTPUT THE FOLLOWING PERTINENT INFORMATION - 
*           ERROR ADDRESS,
*           MODE ERROR INDICATOR, 
*           CONTROL POINT ERROR FLAG. 
* 
*         FURTHER DEBUGGING MAY BE RISKY, BUT DUMPS MAY BE TAKEN. 
  
  
**        XIT - PROCESS ERROR EXIT. 
* 
*         ENTRY  NONE.
* 
*         EXIT   TO CDP1. 
* 
*         CALLS  WTC=,COD.
  
  
 XIT      BSS    0           ENTRY
          RJ     SVR         SAVE REGISTERS 
          SA5    B0          READ ERROR INDICATOR WORD
          WRITEC O,XITA 
          SX0    77B
          AX5    24          SET ERROR FLAG 
          BX1    X0*X5
          RJ     COD
          SA6    XITC 
          WRITEC O,XITB 
          AX5    6           SET ERROR ADDRESS
          SX1    X5 
          RJ     COD
          SA6    XITE 
          WRITEC O,XITD 
          AX5    18          SET MODE INDICATOR 
          BX1    X0*X5
          RJ     COD
          SA6    XITG 
          WRITEC O,XITF 
          WRITEC O,XITH 
          JP     CDP1        EXIT 
  
 XITA     DIS    ,/ ***** ERROR EXIT *****/ 
 XITB     DATA   10H ERR. FLAG
 XITC     CON    0
          CON    0
 XITD     DATA   10H ADDRESS
 XITE     CON    0
          CON    0
 XITF     DATA   10H MODE 
 XITG     CON    0
 XITH     CON    0
          TITLE  COMCCDP - CPU DEBUGGING PACKAGE - FETS,BUFFERS,VARIABLE
 FETS     SPACE  4
**        FETS. 
  
 I        BSS    0           INPUT FET
 INPUT    FILEC  IBF,IBFL 
  
 O        BSS    0           OUTPUT FET 
 OUTPUT   FILEC  OBF,OBFL 
  
 D        BSS    0           DUMP FILE
 DUMP     FILEC  DUB,DBFL 
 BUFS     SPACE  4
**        BUFFERS AND GLOBAL VARIABLES. 
  
  
 TERM     BSS    0           COMMAND TERMINATOR MASK
          POS    60-1R) 
          VFD    1/1
          POS    60-1R. 
          VFD    1/1
          VFD    $/0
          BSS    0
 DAR      DATA   10H0  ---->     DUMP INDICATOR FOR DUMP FILE 
 .1       SET    BUFL*10+2
 UOC      BSS    .1/2        UNPACKED OPERATOR COMMAND
 BUF      BSS    BUFL        COMMAND WORKING BUFFER 
 BUFA     CON    0           LWA+1 DATA TRANSFERRED TO BUF
 TSYM     BSSZ   TSYML       SYMBOL TABLE 
 ECHO     CON    1           0=ECHO COMMANDS
 PROC     CON    0           NONZERO=PROGRAMMED COMMAND 
 NARG     CON    0           NUMBER OF COMMAND ARGUMENTS
 ADR1     CON    0           ADDRESS 1
 ADR2     CON    0           ADDRESS 2
 FIRST    CON    0           =0 IF FIRST ENTRY TO CDP 
 IBF      BSS    IBFL        INPUT BUFFER 
 OBF      BSS    OBFL        OUTPUT BUFFER
 DUB      BSS    DBFL        DUMP FILE BUFFER 
          SPACE  4
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 CDB      EQU    /COMCCDP/CDB 
 CDC      EQU    /COMCCDP/CDC 
 CDI      EQU    /COMCCDP/CDI 
 CDP      EQU    /COMCCDP/CDP 
 CDS      EQU    /COMCCDP/CDS 
 QUAL$    ENDIF 
          ENDX
