COMCCDP 
COMMON
          CTEXT  COMCCDP - CPU DEBUGGING PACKAGE. 
 CDP      SPACE  4,10 
          IF     -DEF,QUAL$,1 
          QUAL   COMCCDP
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CDP      SPACE  4,10 
***       CDP - CPU DEBUGGING PACKAGE.
*         J. C. BOHNHOFF.    71/02/13.
*         J. C. BOHNHOFF.    75/08/16.
*         J. L. LARSON.      76/10/29.
          SPACE  4,10 
***              *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 SEPARATED 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,10 
**        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,30 
**        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,10 
***       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      SUBR               ENTRY/EXIT 
          RJ     SVR         SAVE REGISTERS 
          SA2    CDB         MOVE RETURN INSTRUCTION
          SA1    REGX+1      READ (X1)
          BX6    X2 
          SA1    X1          READ LABEL 
          SA6    CDPX 
          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
          EQ     CDI1        PROCESS BREAKPOINT 
  
  
 CDBA     RJ     CDI
-         VFD    30/0 
 CDC      SPACE  4,10 
***       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      SUBR               ENTRY/EXIT 
          RJ     SVR         SAVE REGISTERS 
          SA2    CDC         MOVE RETURN INSTRUCTION
          SA1    REGX+1      READ (X1)
          BX6    X2 
          SA6    CDPX 
          SA5    X1          READ FIRST WORD OF COMMAND 
          LX6    30          SET PROPER *P* 
          SX6    X6-1 
          SA6    REGP 
 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 
 CDC2     GE     B7,B2,CDC3  IF END OF COMMAND
          SA1    B7 
          BX7    X1 
          SA7    B7-B6
          SB7    B7+B1
          EQ     CDC2        CONTINUE MOVING COMMAND
  
 CDC3     SX7    B1          SET PROGRAMMED COMMAND FLAG
          SA6    B7-B6       STORE LAST COMMAND WORD
          SA7    PROC 
          SX7    0           CLEAR BREAKPOINT LABEL 
          EQ     CDP2        PROCESS BREAKPOINT 
  
  
 CDCA     BSS    0
          POS    60-1R/ 
          VFD    1/1
          VFD    $/0
          BSS    0
 CDI      SPACE  4,25 
***       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      SUBR               ENTRY/EXIT 
          RJ     SVR         SAVE REGISTERS 
          SA1    CDI         MOVE RETURN INSTRUCTION
          BX7    X1 
          SA7    CDPX 
          LX7    30          SET PROPER *P* 
          SX6    X7-1 
          MX0    30 
          SA1    X6          CHECK BREAKPOINT LABEL 
 CDI1     SA6    REGP 
          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 
          EQ     CDC1        PROCESS PROGRAMMED COMMAND 
  
 CDI2     RJ     ZTB         SPACE FILL LABEL 
          LX6    -6 
          MX0    6*6
          BX7    X0*X6
          EQ     CDP2        PROCESS BREAKPOINT 
  
  
 CDIA     RJ     CDI         CRITERION FOR BREAKPOINT LABEL 
-         SB0    B0+46000B
 CDP      SPACE  4,10 
**        CDP - INTERACTIVELY SELECTED BREAKPOINT ENTRY.
  
  
 CDP      SUBR               ENTRY/EXIT 
          RJ     SVR         SAVE REGISTERS 
 CDP1     RJ     RPB         RESTORE PREVIOUS BREAKPOINT
          SA1    CDPX        DECREMENT RETURN ADDRESS 
          SX7    B0          CLEAR NEXT BREAKPOINT ADDRESS
          LX1    30 
          SX2    B1 
          SA7    IBPA 
          IX6    X1-X2
          LX6    30 
          BX7    X7-X7
          SA6    CDPX 
          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
          EQ     CDPX        RETURN TO CALLING PROGRAM
          TITLE  COMCCDP - CPU DEBUGGING PACKAGE - COMMAND PROCESSING.
 POC      SPACE  4,10 
**        POC - PROCESS OPERATOR COMMANDS.
* 
*         ENTRY  AT *POCE* IF ERROR IN COMMAND. 
*                AT *POCR* TO PROCESS NEXT COMMAND. 
  
  
 POC      SUBR               ENTRY/EXIT 
 POCR     BSS    0           RETURN FROM COMMAND PROCESSORS 
          SA1    PROC        CHECK PROGRAMMED COMMAND 
          ZR     X1,POC1     IF NOT PROGRAMMED
          AX1    1
          NZ     X1,POCX     IF COMMAND PROCESSED 
          SX6    B1+B1       SET COMMAND PROCESSED
          SA6    PROC 
          EQ     POC2        ANALYZE COMMAND
  
 POC1     READ   I           READ COMMAND 
          READC  I,BUF,BUFL 
          NZ     X1,POCX     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      * INCORRECT ENTRY.*
          EQ     POCR        PROCESS NEXT COMMAND 
  
 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 INCORRECT SEPARATOR 
          SA6    POCB        SAVE COMPOUND ARGUMENT INDICATOR 
          RJ     CCA         CHECK FOR COMPOUND SECOND ARGUMENT 
          NZ     B6,POC4     IF INCORRECT 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     DATA   C* INCORRECT ENTRY.* 
  
 POCB     CON    0           NONZERO IF COMPOUND FIRST ARGUMENT 
          CON    0           NONZERO IF COMPOUND SECOND ARGUMENT
 TOCP     SPACE  4,10 
**        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.
 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.
 ERE      COMAND EREXIT,0,,,N EREXIT. 
 FIL      COMAND FILE,,,2,N  FILE,X,AAAAAAA.
 RFL      COMAND FL,0,1,,,V  FL. OR FL,NNNNNN.
 POCX     COMAND GO,0,,,N    GO.
 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,10 
***       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           ENTRY
          SB6    REGA 
          SB7    LRCA 
 LAR1     SX7    X6-8        CHECK FOR INCORRECT 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 
          EQ     POCR        RETURN 
  
 LAR2     SX7    B5          STORE REGISTER CONTENTS
          SA7    B6+X6
          EQ     POCR        RETURN 
 LBR      SPACE  4,10 
***       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    REGB 
          SB7    LRCB 
          EQ     LAR1        DISPLAY REGISTER CONTENTS
 SBP      SPACE  4,10 
***       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 
          EQ     POCR        RETURN 
  
 SBP2     ZR     B6,SBP4     IF ABSOLUTE BREAKPOINT 
          PL     B6,SBP3     IF POSITIVE ADDEND 
          BX6    -X6
 SBP3     SA1    REGP        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,SBP6     IF BELOW DEBUGGER
          NG     B3,SBP5     IF IN DEBUGGER 
          SB4    SADC        ADDRESS OUT OF RANGE 
          SA1    SADD        GET CURRENT FL 
          AX1    30 
          IX1    X6-X1
          NG     X1,SBP6     IF ADDRESS .LT. FL 
 SBP5     WRITEC O,B4        ISSUE ERROR MESSAGE
          EQ     POCR        RETURN 
  
 SBP6     SA6    IBPA        STORE BREAKPOINT ADDRESS 
          EQ     POCR        RETURN 
  
  
 SBPA     DATA   C* BREAKPOINT WITHIN DEBUGGER.*
 BKM      SPACE  4,10 
***       BM,NNNNNN.
*         SET NEXT BREAKPOINT AT CURRENT MINUS NNNNNN.
  
  
**        BKM - SET RELATIVE BREAKPOINT MINUS.
  
  
 BKM      BSS    0           ENTRY
          SB6    -B1         SET NEGATIVE RELATIVE BREAKPOINT 
          EQ     SBP1        SET BREAKPOINT ADDRESS 
 BKP      SPACE  4,10 
***       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 
          EQ     SBP1        SET BREAKPOINT ADDRESS 
 LMO      SPACE  4,10 
***       C,MMMMMM,NNNNNN.
*         LIST MEMORY IN OCTAL. 
*         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     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 
          EQ     LMO1        CONTINUE LISTING WORDS 
  
 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     IF LIST FILE IS *OUTPUT* 
          WRITER A0,R        END RECORD 
          EQ     POCR        RETURN 
  
  
 LMOA     CON    0
          CON    0
          CON    0
          CON    0
          CON    0
          CON    0
          CON    0
          CON    0
 CKP      SPACE  4,10 
***       CKP.
*         CHECKPOINT PROGRAM. 
*         CHECKPOINT IS USED AS IN THE *CKP* COMMAND. 
*         ALL FILES ARE INCLUDED. THE CHECKPOINT NUMBER IS REPORTED 
*         AS AN OCTAL NUMBER. 
  
  
**        CKP - CHECKPOINT JOB. 
  
  
 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 
          EQ     POCR        RETURN 
  
  
 CKPA     VFD    12/0,30/0,6/0,11/0,1/0 
 CKPB     DATA   10HCHKPT. (B)
 CKPC     CON    0
          CON    0
 LOD      SPACE  4,10 
***       D,MMMMMM,NNNNNN.
*         LIST MEMORY IN OCTAL 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     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 
          EQ     LOD1        CONTINUE LISTING WORDS 
  
 LOD2     SX0    A0 
          SX1    O
          BX7    X0-X1
          ZR     X7,POCR     IF LIST FILE *OUTPUT*
          WRITER A0,R        END RECORD 
          EQ     POCR        RETURN 
 DEF      SPACE  4,15 
***       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 
          EQ     DEF1        CONTINUE LISTING SYMBOLS 
  
 DEF2     SA1    POCB        CHECK COMPOUND FIRST ARGUMENT
          NZ     X1,POCE     IF INCORRECT 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*
          EQ     POCR        RETURN 
  
 DEF3     RJ     CAD         CONVERT ADDRESS
          SA1    DEFC        SET TABLE ENTRY
          SX6    B7 
          BX7    X1+X6
          SA7    A0 
          EQ     POCR        RETURN 
  
  
 DEFA     CON    0
 DEFB     CON    0
          CON    0
 DEFC     CON    0
 DEFD     DATA   C*SYMBOL TABLE FULL.*
 DMC      SPACE  4,10 
***       DMPC,MMMMMM,NNNNNN. 
*         LIST MEMORY IN OCTAL 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 
          EQ     LMO1        LIST MEMORY WORDS
 DMD      SPACE  4,10 
***       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 
          EQ     LOD1        LIST MEMORY WORDS
 DMR      SPACE  4,10 
***       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
          EQ     LRC1        LIST REGISTER CONTENTS 
 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
          EQ     POCR        RETURN 
  
 EMB2     SA1    X1          GET LOCATION CONTENTS
          MX0    12 
          SA2    ADR2        BYTE NUMBER
          SB2    X2-5 
          PL     B2,POCE     IF INCORRECT 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,15 
***       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 INCORRECT ARGUMENT
          SX6    B4+         SET ECHO 
          SA6    ECHO 
          EQ     POCR        RETURN 
 EMD      SPACE  4,15 
***       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
          EQ     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        RETURN 
 EMO      SPACE  4,15 
***       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 
*         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        CONTINUE NUMBER CONVERSION 
  
 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
          EQ     POCR        RETURN 
  
 EMO7     SA6    B2 
          SB2    B2+B1
          LE     B2,B3,EMO7  IF NOT ALL WORDS STORED
          EQ     POCR        RETURN 
  
  
 EMOB     BSSZ   2           CHARACTER BUFFER 
 EMOC     CON    0           CHARACTER COUNT
  
 EMOD     ZR     X4,POCE     IF NO NON-BLANK CHARACTERS 
          SX7    X4+
  
 EMMS     DATA   C* THIS WOULD DESTROY DEBUGGER.* 
 ERE      SPACE  4,10 
***       EREXIT. 
*         SET ERROR EXIT ADDRESS FOR CDP PROCESSING.
  
  
**        ERE - SET ERROR EXIT PROCESSING.
  
  
 ERE      BSS    0           ENTRY
          EREXIT XIT
          EQ     POCR        RETURN 
 FIL      SPACE  4,15 
***       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. (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 INCORRECT ARGUMENT
          SA1    UOC+1       IDENTIFY FILE TYPE 
          SX0    77B
          LX1    6
          BX6    X0*X1
          SB2    X6-1RI 
          SB3    I
          ZR     B2,FIL1     IF INPUT FILE
          SB2    X6-1RL 
          SB3    O
          ZR     B2,FIL1     IF LIST FILE 
          SB2    X6-1RD 
          SB3    D
          NZ     B2,POCE     IF NOT DUMP FILE 
 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
          EQ     POCR        RETURN 
 RFL      SPACE  4,10 
***       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 
          EQ     POCR        RETURN 
  
 RFL1     BX5    X6          SAVE FIELD LENGTH DESIGNATION
          LX6    30 
          SA6    RFLC 
          SETRFL X5          SET FIELD LENGTH 
          MEMORY CM,RFLC,R
          EQ     POCR        RETURN 
  
  
 RFLA     CON    0
 RFLB     CON    4L FL
 RFLC     CON    0
          CON    0
 MOD      SPACE  4,10 
***       MODE. 
*         RETURN CURRENT EXIT MODE. 
  
  
***       MODE,N. 
*         SET EXIT MODE TO N. 
  
  
**        MOD - SET/RETURN EXIT 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 
          EQ     POCR        RETURN 
  
 MOD1     SX7    X6-10B      VERIFY MODE NUMBER 
          PL     X7,POCE     IF MODE TOO HIGH 
          MODE   X6          SET EXIT MODE
          EQ     POCR        RETURN 
  
  
 MODA     CON    0
 MODB     CON    4L EM
 STP      SPACE  4,10 
***       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    REGP        SET *P* REGISTER 
          SA1    STPA        SET PROPER RETURN ADDRESS
          BX6    X1+X6
          LX6    30 
          SA6    CDPX 
          EQ     POCR        RETURN 
  
 STP1     SA1    REGP        READ *P* REGISTER
          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 
          EQ     POCR        RETURN 
  
  
 STPA     NO
          NO
          EQ     0
  
 STPB     CON    3L P 
 LRC      SPACE  4,10 
***       R.
*         LIST REGISTER CONTENTS. 
  
  
**        LRC - LIST REGISTER CONTENTS. 
  
  
 LRC      BSS    0           ENTRY
          SA0    O           SET LIST FILE
 LRC1     SA1    REGP        READ *P* REGISTER
          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    REGA+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    REGB+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 
          SB5    0
          SA2    LRCE        *      X0  * 
          BX6    X2 
          SA6    A2+B1       SET REGISTER TAG 
 LRC3     SA1    REGX+B5     READ *X* REGISTER CONTENTS 
          RJ     OCB         CONVERT OCTAL BY BYTES 
          SA1    REGX+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     IF LIST FILE *OUTPUT*
          WRITER A0,R        END RECORD 
          EQ     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,10 
***       SETTL,NNNN. 
*         SET CPU TIME LIMIT TO NNNN SECONDS. 
  
  
**        STL - SET TIME LIMIT. 
  
  
 STL      BSS    0           ENTRY
          SETTL  X6          SET TIME LIMIT 
          EQ     POCR        RETURN 
 LXR      SPACE  4,20 
***       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 INCORRECT NUMBER 
          PL     X7,POCE     IF NUMBER .GT. 7 
          SA6    LXRB 
          SX6    X6+REGX     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 
          EQ     EMO1        CHECK FINAL PARAMETER
  
*         LIST *X* REGISTER CONTENTS. 
  
 LXR1     SA3    LXRB        REGISTER NUMBER
          SA2    LRCE        READ REGISTER TAG
          SB5    X3 
          LX3    6*2
          SA1    REGX+B5     READ REGISTER CONTENTS 
          IX6    X2+X3       FORM REGISTER NAME 
          SA6    A2+B1
          RJ     OCB         CONVERT REGISTER CONTENTS
          SA1    REGX+B5     SET CHARACTER INTERPRETATION 
          RJ     ZTB
          SA6    A6+B1
          MX7    0           TERMINATE LINE 
          SA7    A6+1 
          WRITEC O,LRCF      LIST REGISTER CONTENTS 
          EQ     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        SET EXIT CONDITIONS
  
 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        CONTINUE CHARACTER ASSEMBLY
  
  
ASCA      CON    0           NUMBER OF CHARACTERS TO ASSEMBLE 
 BST      SPACE  4,20 
**        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   A - 3. 
*                B - 2, 3.
*                X - 3, 4, 6. 
  
  
 BST3     SX3    0           RETURN *NOT FOUND* 
  
 BST      SUBR               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       COMPARE ENTRY WITH CRITERION 
          ZR     X6,BSTX     IF ENTRY FOUND 
          ZR     X4,BST3     IF TABLE EXHAUSTED 
          NG     X6,BST1     IF ENTRY .LT. CRITERION
          SB3    A3          SET UPPER LIMIT
          EQ     BST2        CONTINUE SEARCH
 CAD      SPACE  4,20 
**        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   A - 1, 2, 3, 5, 6, 7.
*                B - 2, 3, 4, 7.
*                X - 0, 1, 2, 3, 5, 6, 7. 
* 
*         CALLS  DXB, SST.
  
  
 CAD      SUBR               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 
          EQ     CAD6        RETURN SIMPLE ARGUMENT 
  
 CAD5     BX3    -X3
 CAD6     IX6    X2+X3
          SA1    NARG        ADVANCE NUMBER OF ARGUMENTS
          SB7    X6 
          SX7    X1+B1
          SA7    A1 
          EQ     CADX        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 INCORRECT 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 INCORRECT SEPARATOR 
          SB5    X1-1R- 
          NZ     B5,CCAX     IF LEGAL SEPARATOR 
 CCA2     SB6    B1 
          EQ     CCAX        RETURN 
 FEC      SPACE  4,15 
**        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      SUBR               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
          EQ     FECX        RETURN 
 IBP      SPACE  4,10 
**        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. 
  
  
 IBP      SUBR               ENTRY/EXIT 
          SA1    IBPA 
          ZR     X1,IBPX     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
          EQ     IBPX        RETURN 
  
  
 IBPA     CON    0           NEXT BREAKPOINT ADDRESS
 IBPB     RJ     CDP         BREAKPOINT INSTRUCTION 
-         VFD    30/0 
 LCL      SPACE  4,10 
**        LCL - LIST CURRENT LOCATION.
* 
*         ENTRY  (SVRP)= CURRENT PROGRAM ADDRESS. 
* 
*         USES   A - 1, 6.
*                X - 0, 1, 6. 
* 
*         CALLS  COD. 
* 
*         MACROS WRITEC.
  
  
 LCL      SUBR               ENTRY/EXIT 
          SA1    REGP        READ *P* REGISTER
          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 
          EQ     LCLX        RETURN 
  
  
 LCLA     CON    3L BK
 LCLB     CON    0
 LCLC     CON    0
 OCB      SPACE  4,15 
**        OCB - CONVERT OCTAL BY BYTES. 
* 
*         ENTRY  (X1) = WORD TO CONVERT.
*                (A6) = BUFFER ADDRESS. 
* 
*         EXIT   (A6) = BUFFER ADDRESS ADVANCED.
* 
*         USES   A - 1, 6, 7. 
*                X - ALL. 
* 
*         CALLS  WOD. 
  
  
 OCB      SUBR               ENTRY/EXIT 
          RJ     WOD         CONVERT WORD (ABCDEFGHIJ KLMNOPQRST) 
          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
          EQ     OCBX        RETURN 
  
  
 OCBA     VFD    24/0,6/1R ,24/0,6/1R 
          VFD    24/0,36/6H 
 RFP      SPACE  4,10 
**        RFP - RESTORE FET POINTER WORD. 
* 
*         ENTRY  (SFPA)= PREVIOUS CONTENTS OF FET POINTER WORD. 
* 
*         USES   A - 1, 6.
*                X - 1, 6.
  
  
 RFP      SUBR               ENTRY/EXIT 
          SA1    SFPA 
          BX6    X1 
          SA1    SFPB        GET *LIST OF FILES* ADDRESS
          SA6    X1 
          EQ     RFPX        RETURN 
 RPB      SPACE  4,10 
**        RPB - RESTORE PREVIOUS BREAKPOINT.
* 
*         ENTRY  (SVRP)= ADDRESS OF PROGRAM BREAKPOINT. 
*                (RPBA)= CONTENTS OF BREAKPOINT WORD. 
* 
*         USES   A - 1, 2, 7. 
*                X - 1, 2, 7. 
  
  
 RPB      SUBR               ENTRY/EXIT 
          SA1    REGP        READ *P* REGISTER
          SA2    RPBA        READ PREVIOUS CONTENTS OF WORD 
          BX7    X2 
          SA7    X1          RESTORE WORD 
          EQ     RPBX        RETURN 
  
  
 RPBA     CON    0           CONTENTS OF BREAKPOINT WORD
 RSR      SPACE  4,10 
**        RSR - RESTORE ALL REGISTERS.
* 
*         ENTRY  (SVRA-SVRX+7) = PREVIOUS REGISTER CONTENTS.
* 
*         EXIT   ALL REGISTERS RESET TO ORIGINAL VALUE AS BEFORE
*                BREAKPOINT.
  
  
 RSR      SUBR               ENTRY/EXIT 
          MX0    18 
          SA5    REGX+5      X5 
          SB2    B0 
          SA2    RSRA 
          SX1    74B
          BX7    -X1*X2      PRESET TO CORRECT SHIFT COUNT
          PL     X5,RSR1     IF (X5) POSITIVE 
          BX7    X7+X1
 RSR1     SB4    8
          SB1    1
          LX0    33 
          SB3    B4-B1
          SB4    B4+B3
          MX4    0
 RSR2     SA2    A2+B1
          SA1    REGB+1+B2
          IX6    X7+X4
          BX4    -X0*X2 
          LX3    X1,B4
          SB2    B2+B1
          SA6    A2-B1
          BX7    X0*X3
          NE     B2,B3,RSR2  IF MORE INSTRUCTIONS TO MODIFY 
          LX0    15 
          SA3    REGX        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    REGA+6      A6 
          SA6    A2 
          LX5    11 
          SA2    A1+B1       A7 
          SA3    X1+B7
          SA4    X2+B7
          BX6    X3 
          SA3    REGA+1      A1 
          BX7    X4 
          SA6    X1+B7       A6 
          UX5    X5,B4
          SA7    X2+B7       A7 
          LX5    11 
          SA2    REGX+6      X6 
          SA1    X3+B7       A1 
          BX6    X2          X6 
          UX5    X5,B3
          SA3    REGX+7      X7 
          SA4    REGX+1      X1 
          LX5    11 
          BX7    X3          X7 
          SA2    REGA+2      A2 
          UX5    X5,B2
          BX1    X4          X1 
          SA3    REGX+2      X2 
          LX5    11 
          SA2    X2+B7       A2 
          SA4    REGA+3      A3 
          UX5    X5,B1
          BX2    X3          X2 
          SA3    X4+B7       A3 
          SA5    REGX+3      X3 
          NO
          SA4    REGA+4      A4 
          BX3    X5          X3 
          SA5    REGX+4      X4 
          SA4    X4+B7       A4 
          NO
          BX4    X5          X4 
          SA5    REGA+5      A5 
          JP     RSR3        PURGE STACK BEFORE CONTINUING
 RSR3     SA5    X5+B7       A5 
 RSRA     EQU    *           CODE MODIFIED FROM HERE TO EXIT
          NO
          NO
          ERRNZ  $-14        ASSUMES MASK IN LOWER 15 BITS
          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 
          EQ     RSRX        RETURN 
 SAD      SPACE  4,20 
**        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   A - 1, 2, 3, 5, 6, 7.
*                B - 4, 5.
*                X - 0, 1, 2, 3, 5, 6, 7. 
* 
*         CALLS  CAD. 
* 
*         MACROS MEMORY, WRITEC.
  
  
 SAD3     BX6    X6-X6       SET VALUES TO ZERO 
          SA6    ADR1 
          SA6    A6+B1
 SAD4     SA1    ADR1        SET EXIT DATA
          SA2    ADR2 
          SA3    NARG 
          SX6    X1 
          SB5    X2 
          SB4    X3+
  
 SAD      SUBR               ENTRY/EXIT 
          ZR     B4,SAD3     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,SAD4     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,SAD4     IF VALIDATION ONLY ON FIRST PARAMETER
          IX6    X2-X3
          IX7    X2-X1
          PL     X6,SAD2     IF ADDRESS .GE. FL 
          SB4    SADB 
          PL     X7,SAD4     IF FWA .LE. LWA
 SAD2     WRITEC O,B4        WRITE ERROR MESSAGE
          EQ     POCR        RETURN 
  
  
 SADA     CON    0
 SADB     DATA   C*FWA .GT. LWA.* 
 SADC     DATA   C*ADDRESS OUT OF RANGE.* 
 SADD     CON    0
 SFP      SPACE  4,15 
**        SFP - SET FET POINTER FOR TERMINAL I/O. 
* 
*         EXIT   OUTPUT FET POINTER STORED IN RA+2 OR LIST OF FILES.
*                (SFPA) = PREVIOUS CONTENTS OF RA+2 OR LIST OF FILES. 
*                (SFPB) = ADDRESS OF OUTPUT FET POINTER (RA+2 OR LIST 
*                         OF FILES ADDRESS).
* 
*         USES   A - 1, 2, 6, 7.
*                X - 0, 1, 2, 6, 7. 
* 
*         MACROS GETLOF, ROLLOUT. 
  
  
 SFP      SUBR               ENTRY/EXIT 
          ROLLOUT            FORCE USER OUTPUT TO BE FLUSHED
          GETLOF SFPB        GET *LIST OF FILES* ADDRESS
          SA1    SFPB 
          SA2    O           SET OUTPUT FET POINTER 
          AX1    30 
          NZ     X1,SFP1     IF LIST OF FILES IN EFFECT 
          SX1    B1 
 SFP1     SX6    X1+B1
          MX0    42 
          SA6    A1 
          SA1    X6          SAVE ORIGINAL FET POINTER
          BX6    X1 
          BX7    X0*X2
          SA6    SFPA 
          SX2    A2 
          BX7    X7+X2
          SA7    A1+
          EQ     SFPX        RETURN 
  
  
 SFPA     CON    0           ORIGINAL FET POINTER 
 SFPB     CON    0           ADDRESS OF FET POINTER 
 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        CONTINUE CHECK FOR DISPLAY ZERO
  
  
 SFZA     CON    10H
 SST      SPACE  4,10 
**        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. 
  
  
 SST      SUBR               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,SSTX     IF END OF TABLE
          BX6    X2-X1
          BX6    X0*X6
          NZ     X6,SST1     IF NOT FOUND 
          EQ     SSTX        RETURN 
 SVR      SPACE  4,15 
**        SVR - SAVE ALL REGISTERS. 
* 
*         EXIT   (B1)= 1. 
* 
*         USES   A - 1, 2, 3, 6, 7. 
*                B - 2, 3, 7. 
*                X - 0, 1, 2, 3, 4, 6, 7. 
* 
*         CALLS  COD. 
* 
*         MACROS WRITEC.
  
  
 SVR      SUBR               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    REGX+7 
          SX7    A6          SAVE X6
          SA6    REGX+6 
          SA7    REGA+6      A6 
          BX6    X0 
          LX7    X1 
          SA6    REGX        X0 
          SA7    REGX+1      X1 
          BX6    X2 
          LX7    X3 
          SA6    REGX+2      X2 
          SA7    REGX+3      X3 
          BX6    X4 
          LX7    X5 
          SA6    REGX+4      X4 
          SA7    REGX+5      X5 
          SX6    A0 
          SX7    A1 
          SA6    REGA        A0 
          SA7    REGA+1      A1 
          SX6    A2 
          SX7    A3 
          SA6    REGA+2      A2 
          SA7    REGA+3      A3 
          SA3    SVR1        RECONSTRUCT B7 
          SX6    A4 
          SX7    A5 
          SA6    REGA+4      A4 
          SA7    REGA+5      A5 
          SX6    B7 
          SX7    B1 
          SA6    REGA+7      A7 
          SA7    REGB+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     IF MORE BITS TO RECONSTRUCT
          SA1    CDP         SAVE P 
          SA7    REGB        B0 
          SA2    FIRST       CHECK FIRST ENTRY TO CDP 
          LX6    3
          LX1    30 
          SA6    REGB+7      B7 
          SX7    X1-1 
          SA7    REGP 
          NZ     X2,SVRX     IF NOT FIRST ENTRY 
          SX1    CDPS        ANNOUNCE LOCATION OF DEBUGGER
          RJ     COD
          SA1    SVRB 
          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    SVRC 
          SA6    FIRST
          WRITEC O,SVRA 
          EQ     SVRX        RETURN 
  
  
 SVRA     DATA   10H CDP FROM 
 SVRB     DATA   4A TO
 SVRC     CON    0
          CON    0
  
 REGB     BSS    8           B REGISTERS
 REGA     BSS    8           A REGISTERS
 REGX     BSS    8           X REGISTERS
 REGP     BSS    1           P REGISTER 
 XIT      SPACE  4,20 
***       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. 
* 
*         EXIT   TO *CDP1*. 
* 
*         CALLS  COD, SVR.
* 
*         MACROS WRITEC.
  
  
 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 
          EQ     CDP1        EXIT 
  
  
 XITA     DATA   C/ ***** 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,10 
**        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,10 
**        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,10 
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 CDB      EQU    /COMCCDP/CDB 
 CDC      EQU    /COMCCDP/CDC 
 CDI      EQU    /COMCCDP/CDI 
 CDP      EQU    /COMCCDP/CDP 
 QUAL$    ENDIF 
          ENDX
