$CONTROL USLINIT,CODE,SOURCE,MAP                                        00010000
<< DEBUG -- MODULE 75 >>                                       <<01549>>00015000
<< HP32002C MPE SOURCE C.00.00 >>                                       00020000
$COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980. ",            & 00025000
$     "THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A ",      & 00030000
$     "TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR ",    & 00035000
$     "STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION ",& 00040000
$     "OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED ",  & 00045000
$     "WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY."   00050000
$THIRTY                                                                 00055000
$CONTROL SEGMENT=DEBUG                                                  00060000
$PAGE "          SYSTEM BREAKPOINT TABLE -- DESCRIPTION"       <<01007>>00065000
                                                                        00070000
            << >>                                                       00075000
            <<  D E B U G  (SYSTEMDEBUG)  >>                            00080000
            << >>                                                       00085000
            << >>                                                       00090000
$PAGE "          SYSGLOB AND LOW CORE POINTERS"                <<01007>>00095000
BEGIN                                                                   00100000
ARRAY QARRAY(*) = Q+0;                                         <<*7769>>00105000
$INCLUDE INCLPXDL                                              <<*7769>>00110000
$INCLUDE INCLPXFT                                              <<*7769>>00115000
$INCLUDE INCLPXGT                                              <<*7769>>00120000
$INCLUDE INCLPCB5                                              <<06671>>00125000
                                                                        00130000
$INCLUDE INCLOBJ  << DOUBLEWORD OBJID DEFINES AND EQUATES >>   <<06663>>00135000
                                                                        00140000
INTEGER  ARRAY MEM(*) =DB,                                     <<01549>>00145000
               STOP(*)=DB+0, << BREAK POINT TABLE >>           <<01549>>00150000
               AQ0(*) =Q-0;                                    <<01549>>00155000
EQUATE   CSTB      =1,                                                  00160000
         DSTB      =2,                                                  00165000
         PCBB      =3,                                                  00170000
         CSTX      =1,                                                  00175000
         LPDTN     =%10,                                                00180000
         BPTN      =%25,  <<BREAK POINT WORD IN SYSDB>>        <<06904>>00185000
         DFCN      =%32,                                                00190000
         DFSN      =%33,                                                00195000
         CSTBLKN   =%51,                                                00200000
         STOPDSTN  =%30,                                                00205000
         NBANKSN   =%47,                                                00210000
         BTRINFO   = 6,                                        <<06103>>00215000
         LASTBANKN =%361,               <<ADDRESS OF LAST...>> <<01549>>00220000
         ENDLBANKN =%362,               <<WORD IN MEMORY    >> <<01549>>00225000
         QI        =5,                                                  00230000
         ZI        =6,                                                  00235000
         CCG       =0,                                                  00240000
         RESABORTWD= RESABORTINFOWORDNUM,                      <<06671>>00245000
         CCL       =1,                                                  00250000
         CCE       =2,                                                  00255000
         DFC'      =DFCN+%1000,                                         00260000
         DFS'      =DFSN+%1000,                                         00265000
         STOPB'    =BPTN+%1000,                                         00270000
         BRPT      =%36000,                                             00275000
         SYSLDEV   =1,                                                  00280000
         NBANKS'   =NBANKSN+%1000,                                      00285000
         LASTBANK' =LASTBANKN+%1000,                           <<01549>>00290000
         ENDLBANK' =ENDLBANKN+%1000,                           <<01549>>00295000
         LDTDST    =14,                                                 00300000
         LDTSIZE   =7,                                         <<06671>>00305000
         SEGTABSIR =17,                                        <<01069>>00310000
         JIT'UCAP2 =39,                 <<INX USER CAP WORD 2>><<01069>>00315000
         LASTN     =0,                                         <<01069>>00320000
         ABS'SEG   =0,                                         <<01549>>00325000
         SSL'SEG   =1,                                         <<01549>>00330000
         PSL'SEG   =2,                                         <<01549>>00335000
         GSL'SEG   =3,                                         <<01549>>00340000
         PROG'SEG  =15,                                        <<06103>>00345000
         ALL'SEGS  =-1;                                        <<01549>>00350000
INTEGER  POINTER                                                        00355000
         PS0       =S-0,                                       <<01069>>00360000
         DSTI      =DB+DSTB,            <<DST TABLE>>                   00365000
         DSTI'     =DSTB,                                               00370000
         PCBI      =DB+PCBB,            <<PROCESS CTRL BLK TABLE>>      00375000
         PCBI'     =PCBB,                                               00380000
         LPDT      =DB+LPDTN,           <<LOGICAL-PHYS DEV TABLE>>      00385000
         LPDT'     =LPDTN,                                              00390000
         CSTBLK    =DB+CSTBLKN,           <<CST EXT BLOCK>>             00395000
         CSTBLK'   =CSTBLKN,                                            00400000
         CSTI      =DB+CSTB,            <<CODE SEG TABLE>>              00405000
         CSTI'     =CSTB;                                               00410000
INTEGER  DFCX      =DB+DFCN,            <<@CST-@DST>>                   00415000
         DFSX      =DB+DFSN,            <<@CST(LAST)-@DST>>             00420000
         STATUS    =Q-1,                                                00425000
         DELTAP    =Q-2,                                       <<06103>>00430000
         DELTAQ    =Q,                                         <<01549>>00435000
         S0        = S-0,                                      <<06671>>00440000
         X         =X;                  <<THE X-REGISTER>>              00445000
LOGICAL  PARMMASK  =Q-4;                                       <<01069>>00450000
DEFINE   F         =ABSOLUTE#,                                          00455000
         ASMB      =ASSEMBLE#,                                          00460000
         DUPLICATE =ASMB(DUP)#,                                         00465000
         TRIPLICATE=ASMB(DUP,DUP)#,                                     00470000
         EXCHANGE  =ASMB(XCH)#,                                         00475000
         PDISABLE  =ASMB(PSDB)#,                                        00480000
         PENABLE   =ASMB(PSEB)#,                                        00485000
         DISABLE   =ASMB(SED 0)#,                                       00490000
         ENABLE    =ASMB(SED 1)#,                                       00495000
         TRAPSOFF  =PUSH(STATUS);TOS.(2:1)_0;SET(STATUS)#,              00500000
         PIX       =curprc#,                                   <<06671>>00505000
         PIN       =(PIX/PCBSIZE)#,                                     00510000
         FORCESTKO =ASMB(ADDS 100;SUBS 100)#,                           00515000
         LMEM      =ASMB(LSEA)#,                                        00520000
         SMEM      =ASMB(SSEA)#,                                        00525000
         LMEMD     =ASMB(LDEA)#,                                        00530000
         SMEMD     =ASMB(SDEA)#,                                        00535000
         CCFLD     =( 6: 2)#,                                  <<01832>>00540000
         STATUS'M  =( 0: 1)#,   << MODE BIT >>                 <<01832>>00545000
         STATUS'I  =( 1: 1)#,   << INTERRUPT BIT >>            <<01832>>00550000
         STATUS'T  =( 2: 1)#,   << TRAP BIT >>                 <<01832>>00555000
         ABIT      =( 0: 1)#,                                           00560000
         CSFLD     =( 4:12)#,                                           00565000
         DSFLD     =( 3:13)#,                                           00570000
         DST'LENFLD=( 3:13)#,   << LENGHT/4 >>                 <<01549>>00575000
         ABSDB     =( 0: 1)#,   << ABS. DB OF PCB >>           <<01069>>00580000
         PTYPE     =ptypefield#, << PROC. TYPE - PCB >>        <<06671>>00585000
         UCAP'PM   =( 9: 1)#,   << PM USER -- JIT >>           <<01069>>00590000
SYSTEMFLAG=(6:1)#,                                             <<01549>>00595000
         ROC       =( 1: 1)#,                                  <<01549>>00600000
         DFC       =F(DFC')#,                                           00605000
         DFS       =F(DFS')#,                                           00610000
         NUMBANKS  =F(NBANKS')#,                                        00615000
         LASTBANK  =F(LASTBANK')#,                             <<01549>>00620000
         LASTADDR  =F(ENDLBANK')#,                             <<01549>>00625000
         LIVBIT    =( 0: 1)#,                                  <<01549>>00630000
         BREAKTYPE =( 2: 1)#,                                  <<01069>>00635000
         NUMPCBS'  =PCBI'(0)#,                                 <<01549>>00640000
         STOPB     =F(STOPB')#;                                <<01549>>00645000
                                                               <<01549>>00650000
         << BREAK POINT TABLE DEFINES >>                       <<01549>>00655000
DEFINE                                                         <<01549>>00660000
         << BITS OF FLAG WORD         >>                       <<01549>>00665000
         BKPT'PRIV        =( 1: 1)#,                           <<01549>>00670000
         BKPT'SYS         =( 2: 1)#,                           <<01549>>00675000
         BKPT'VALID       =( 3: 1)#,                           <<01549>>00680000
         BKPT'DBLTRAP     =( 4: 1)#,                           <<01549>>00685000
         BKPT'FAKE        =( 5: 1)#,                           <<01549>>00690000
         BKPT'TW          =( 6: 1)#,                           <<01549>>00695000
         BKPT'USERLBL     =( 7: 1)#,                           <<01549>>00700000
         BKPT'PERM        =( 8: 1)#,                           <<01549>>00705000
         BKPT'COND        =( 9: 1)#,                           <<01549>>00710000
         BKPT'UPDATING    =(10: 1)#,                           <<01549>>00715000
         BKPT'FLAGS       =( 1:10)#,                           <<01549>>00720000
         BKPT'SIZE        =(11: 5)#,                           <<01549>>00725000
         BKPT'TAG         =( 0: 1)#, <<FREE/USED ENTRY>>       <<01549>>00730000
         BKPT'USERMODE    =( 0: 1)#,                           <<06103>>00735000
         BKPT'TRACE       =(15: 1)#,                           <<07319>>00740000
                                                               <<01549>>00745000
         << DEFINES FOR CONDITION >>                           <<01549>>00750000
         BKPT'BASE        =( 6:10)#, <<SEG/BANK#>>             <<01549>>00755000
         BKPT'REG         =( 0: 6)#, <<DA,Q,... >>             <<01549>>00760000
         BKPT'OP1INFO     =( 0: 2)#,                           <<01549>>00765000
         BKPT'OP1IND      =( 0: 1)#,                           <<01549>>00770000
         BKPT'OP2INFO     =( 2: 2)#,                           <<01549>>00775000
         BKPT'OP2IND      =( 2: 1)#,                           <<01549>>00780000
         BKPT'CONDTYPE    =( 8: 8)#,                           <<01549>>00785000
                                                               <<01549>>00790000
         SIZEOP1          =(IF STOP(LINK).BKPT'OP1INFO=0 THEN 1<<01549>>00795000
                           ELSE 2+STOP(LINK).BKPT'OP1IND)#,    <<01549>>00800000
         SIZEOP2          =(IF STOP(LINK).BKPT'OP2INFO=0 THEN 1<<01549>>00805000
                            ELSE 2+STOP(LINK).BKPT'OP2IND)#,   <<01549>>00810000
         LINKOP1           =(LINK - SIZEOP2 -SIZEOP1)#,        <<01549>>00815000
         LINKOP2           =(LINK - SIZEOP2)#,                 <<01549>>00820000
                                                               <<01549>>00825000
         << INDEXES OF ENTRY 0 & 1 >>                          <<01549>>00830000
         IND'ENT0         =STOP(0)#,                           <<01549>>00835000
         BKPT'WD'USED     =STOP(IND'ENT0+2)#,                  <<06103>>00840000
         BKPT'MAXWD'USED  =STOP(IND'ENT0+3)#,                  <<06103>>00845000
         IND'ENT1        =(IND'ENT0+7)#,                       <<06663>>00850000
                                                               <<01549>>00855000
         AVAIL            =STOP(IND'ENT0+1)#,                  <<01549>>00860000
         BKPT'DST'SIZE    =(STOP(IND'ENT0)+STOP(0))#,          <<01549>>00865000
         NO'BKPT'ENTRIES  =(STOP(SYS'BKPT'EXT'X) = 0 LAND      <<01549>>00870000
                            STOP(PROC'CNT) = 0)#,              <<01549>>00875000
         BKPT'TAB'LOCKED  =F(STOPB').(14:1)#,                  <<01549>>00880000
                                                               <<01549>>00885000
         << FREE ENTRY >>                                      <<01549>>00890000
         FREE'SIZE        =( 1:15)#,                           <<01549>>00895000
                                                               <<01549>>00900000
         << BREAK POINT BITS IN PCB >>                         <<01549>>00905000
       <<DEBUGDST         =F(STOPB').(1:8)#,    TEMP KLUDGE >> <<01549>>00910000
                                                               <<01549>>00915000
         << SYSTEM BREAK POINT FLAG >>                         <<01549>>00920000
         SYS'BKPT         =F(STOPB').(15:1)#;                  <<01549>>00925000
                                                               <<01549>>00930000
         << BREAK POINT TABLE EQUATES >>                       <<01549>>00935000
EQUATE                                                         <<01549>>00940000
         DEBUGDST         =%36,                                <<01549>>00945000
         BKPTSIR          =%41,                                <<01549>>00950000
                                                               <<01549>>00955000
         << EQUATES FOR IN USE ENTRY >>                        <<01549>>00960000
         FLAGS2OFFSET     =1,                                  <<07319>>00965000
         USERLBLMODEOFFSET=1,                                  <<06103>>00970000
         OBJIDOFFSET      =2,<<CF OBJID DOUBLEWORD IN INCLOBJ>><<06663>>00975000
         PLOCOFFSET       =4,                                  <<06103>>00980000
         INSTROFFSET      =5,                                  <<06103>>00985000
         LINKOFFSET       =6,                                  <<06103>>00990000
         USERLBLOFFSET    =7,                                  <<06103>>00995000
         MIN'ENT'SIZE     =7,                                  <<06103>>01000000
         MAX'COND'SIZE    =7,                                  <<01549>>01005000
         ENTRYSIZE'CNT    =3,                                  <<01549>>01010000
         MAX'BKPT'SIZE    =MIN'ENT'SIZE+MAX'COND'SIZE+1,       <<01549>>01015000
                                                               <<01549>>01020000
         << OFFSETS IN FREE ENTRY >>                           <<01549>>01025000
         FORWLINK         =1,                                  <<01549>>01030000
         BKWLINK          =2,                                  <<01549>>01035000
                                                               <<01549>>01040000
         << PCB-BREAK POINT EXT. TABLE >>                      <<01549>>01045000
         SYS'BKPT'EXT'X   =1,                                  <<01549>>01050000
         PROC'CNT         =2,                                  <<01549>>01055000
                                                               <<01549>>01060000
         << PCB TABLE >>                                       <<01549>>01065000
         PCB'BKPT'WD      =bptlinkwordnum;                     <<06671>>01070000
                                                               <<01549>>01075000
         << EQUATES FOR REG NUMBERS >>                         <<01549>>01080000
EQUATE                                                         <<01549>>01085000
         REGR             = 0,REGST = 1,REGX  = 2,             <<01549>>01090000
         REGA             = 3,REGSY = 4,REGV  = 5,             <<01549>>01095000
         REGCO            = 6,REGDA = 7,REGDX = 8,             <<01549>>01100000
         REGDB            = 9,REGDL =10,REGQ  =11,REGS  =12,   <<01549>>01105000
         REGZ             =13,                                 <<01549>>01110000
         REGPB            =14,REGP  =15,REGPL =16,REGEA =17,   <<01549>>01115000
         REG1             =18,REG2  =19,REG3  =20,REG4  =21,   <<01549>>01120000
         REGEND           =22,REGBNK=22,REGDBV=23,REGDBX=24,   <<01549>>01125000
         REGLOG           =25,REGTC =26,REGTL =27,REGTP =28,   <<01549>>01130000
         REGMF            =29,REGLSTT=30,REGEXX=30;            <<06103>>01135000
                                                               <<01069>>01140000
         << ERROR EQUATES >>                                   <<01069>>01145000
                                                               <<01069>>01150000
EQUATE   INVALID'PLOC     =1,                                  <<01069>>01155000
         INVALID'PIN      =5,                                  <<01549>>01160000
         INVALID'SEG      =6,                                  <<01069>>01165000
         INVALID'TYPESEG  =7,                                  <<01069>>01170000
         INVALID'CNT      =8,                                  <<01069>>01175000
         INVALID'CAP      =9,                                  <<01069>>01180000
         INVALID'PLABEL   =10,                                 <<01069>>01185000
         INVALID'BRKTYPE  =11,                                 <<01069>>01190000
         EVERYTHINGOK     =0,                                  <<01069>>01195000
                                                               <<01549>>01200000
         << GLOBAL EQUATES >>                                  <<01069>>01205000
         MAX'NUMPROGSEG   =%377,                               <<06103>>01210000
                                                               <<01549>>01215000
         << EQUATE FOR PROCESSING BKPT CONDITION >>            <<01549>>01220000
         STAK'SEG         =0,                                  <<01549>>01225000
         DA'SEG           =1,                                  <<01549>>01230000
         ABS'ADDR         =2,                                  <<01549>>01235000
         SYS'GLOB'ADDR    =3,                                  <<01549>>01240000
         GOT'OPERAND      =0,                                  <<01549>>01245000
         BOUNDSV          =1,                                  <<01549>>01250000
         NOT'INCORE       =2,                                  <<01549>>01255000
         COND'TRUE        =GOT'OPERAND,                        <<01549>>01260000
         COND'FALSE       =BOUNDSV,                            <<01549>>01265000
         UNABLETESTCOND   =NOT'INCORE,                         <<01549>>01270000
         TIME'FOR'BREAK   =GOT'OPERAND,                        <<01549>>01275000
         NOT'THIS'TIME    =COND'FALSE,                         <<01549>>01280000
                                                               <<01549>>01285000
         << TOKEN NUMBERS: 1 CHAR SPECIALS MUST  >>            <<01549>>01290000
         << BE IN SAME ORDER AS ARRAY 'SPECIALS' >>            <<01549>>01295000
         T'IDENT          =0,                                  <<01549>>01300000
         T'NUMBER         =1,                                  <<01549>>01305000
         T'INVALID        =2,                                  <<01549>>01310000
         T'LT             =3,                                  <<01549>>01315000
         T'GT             =4,                                  <<01549>>01320000
         T'EQ             =5,                                  <<01549>>01325000
         T'ATSIGN         =6,                                  <<01549>>01330000
         T'POUNDSIGN      =7,                                  <<01549>>01335000
         T'COLON          =8,                                  <<01549>>01340000
         T'LTE            =9,                                  <<01549>>01345000
         T'GTE            =10,                                 <<01549>>01350000
         T'NEQ            =11,                                 <<01549>>01355000
                                                               <<01549>>01360000
         FIRSTSPECIAL     =T'LT,                               <<01549>>01365000
         << LAST 1 CHAR. SPECIAL: >>                           <<01549>>01370000
         LASTSPECIAL      =T'COLON,                            <<01549>>01375000
         NUM'SPECIALS     =LASTSPECIAL-FIRSTSPECIAL+1,         <<01549>>01380000
         SPECIALS'END     =NUM'SPECIALS-1;                     <<01549>>01385000
                                                               <<01549>>01390000
         << DEF FOR ENTERSTOP & REMOVESTOP CALL SEQUENCE >>    <<01549>>01395000
DEFINE   CURRENTPCBBIT    =( 0: 1)#,                           <<01549>>01400000
         PRIVBIT          =( 1: 1)#,                           <<01549>>01405000
         LOCBIT           =( 2: 1)#,                           <<01549>>01410000
         DBLTRAP          =( 4: 1)#,                           <<01069>>01415000
         PERMBIT          =( 5: 1)#,                           <<01069>>01420000
         LABELBIT         =( 6: 1)#,                           <<01069>>01425000
         TRACEBIT         =( 7: 1)#,                           <<07319>>01430000
                                                               <<01069>>01435000
         << DEF FOR PROGRAMATIC SET/CLEAR BRKPNT >>            <<01069>>01440000
         SYSBRKPNT        =(13: 3)#,                           <<01069>>01445000
         PERMBRKPNT       =(12: 1)#;                           <<01069>>01450000
                                                               <<01069>>01455000
DEFINE   DEF'MOVEFROMDSEG =                                    <<01069>>01460000
            MOVEFROMDSEG(TARGET,DSTN,OFFSET,COUNT);            <<01069>>01465000
               VALUE TARGET,DSTN,OFFSET,COUNT;                 <<01069>>01470000
               LOGICAL TARGET,DSTN,OFFSET,COUNT;               <<01069>>01475000
            BEGIN                                              <<01069>>01480000
               X := TOS; << SAVE RETURN ADDRESS >>             <<01069>>01485000
               ASSEMBLE(MFDS 0);                               <<01069>>01490000
               TOS := X; << RESTORE RETURN ADDRESS >>          <<01069>>01495000
            END #,                                             <<01069>>01500000
                                                               <<01069>>01505000
         DEF'MOVETODSEG =                                      <<01069>>01510000
            MOVETODSEG(DSTN,OFFSET,SOURCE,COUNT);              <<01069>>01515000
               VALUE DSTN,OFFSET,SOURCE,COUNT;                 <<01069>>01520000
               LOGICAL DSTN,OFFSET,SOURCE,COUNT;               <<01069>>01525000
            BEGIN                                              <<01069>>01530000
               X := TOS;                                       <<01069>>01535000
               ASSEMBLE(MTDS 0);                               <<01069>>01540000
               TOS := X;                                       <<01069>>01545000
            END #,                                             <<01069>>01550000
                                                               <<01069>>01555000
         GETJITINDEX =                                         <<06671>>01560000
            PXGLOBAL;                                          <<06671>>01565000
            TOS := PXG'JITDST#,                                <<06671>>01570000
         LOCK'BKPT'TAB =                                       <<01549>>01575000
            BEGIN                                              <<01549>>01580000
            LOCKSEG (DEBUGDST,1,0);                            <<01549>>01585000
            BKPT'TAB'LOCKED := TRUE;                           <<01549>>01590000
            END#,                                              <<01549>>01595000
                                                               <<01549>>01600000
         UNLOCK'BKPT'TAB =                                     <<01549>>01605000
            BEGIN                                              <<01549>>01610000
            BKPT'TAB'LOCKED := FALSE;                          <<01549>>01615000
            UNLOCKSEG (DEBUGDST,1,0);                          <<01549>>01620000
            END#;                                              <<01549>>01625000
<<***********************************************************>><<06103>>01630000
<< SEGMENT DESCRIPTOR "DEBUGID" DEFINITION                   >><<06103>>01635000
<< DOUBLE "DEBUGID" IS PASSED AMOUNG PROCEDURES AS FOLLOWS:  >><<06103>>01640000
<<                                                           >><<06103>>01645000
<<    0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5         >><<06103>>01650000
<<  |--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|        >><<06103>>01655000
<<  |SW| X|     UNUSED                  |  TYPE     |        >><<06103>>01660000
<<  |--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|        >><<06103>>01665000
<<  |            SEGMENT NUMBER                     |        >><<06103>>01670000
<<  |-----------------------------------------------|        >><<06103>>01675000
<<                                                           >><<06103>>01680000
<<  SW  : :@ OR SWITCH BREAKPOINTS IF DOUBLE AND TEST COND   >><<06103>>01685000
<<  TYPE : = 0 ABSOLUTE SEGMENT                              >><<06103>>01690000
<<         = 1 SSL SEGMENT                                   >><<06103>>01695000
<<         = 2 PSL SEGMENT                                   >><<06103>>01700000
<<         = 3 GSL SEGMENT                                   >><<06103>>01705000
<<         =15 PROGRAM SEGMENT                               >><<06103>>01710000
<<  IF TYPE = ABSOLUTE SEGMENT THEN                          >><<06103>>01715000
<<     X   : XFLAG INDICATES THAT SEGMENT IS IN CSTX AREA    >><<06103>>01720000
<<           IF XFLAG = FALSE THEN SEGMENT IS IN CST AREA    >><<06103>>01725000
<<     SEGMENT NUMBER : ABSOLUTE SEGMENT NUMBER              >><<06103>>01730000
<<  ELSE                                                     >><<06103>>01735000
<<     SEGMENT NUMBER : LOGICAL SEGMENT NUMBER               >><<06103>>01740000
<<     IGNOR XFLAG                                           >><<06103>>01745000
<<***********************************************************>><<06103>>01750000
                                                               <<06103>>01755000
DEFINE DEBUGIDDEF = INTEGER DEBUGID1 = DEBUGID;                <<06103>>01760000
                    INTEGER DEBUGID2 = DEBUGID+1#;             <<06103>>01765000
DEFINE SW = DEBUGID1.(0:1)#,                                   <<06103>>01770000
       SEGTYPE = DEBUGID1.(12:4)#,                             <<06103>>01775000
       XFLAG = DEBUGID1.(1:1)#,                                <<06103>>01780000
       SEGNR = DEBUGID2#;                                      <<06103>>01785000
DEFINE LOGICALMAPPING = LOGICAL(F(%1220))#;                    <<06103>>01790000
DEFINE PMBC'UCODE = LOGICAL(F(%1220)).(14:1)#;                 <<07319>>01795000
$PAGE "          EXTERNAL & FORWARD DECLARATIONS"              <<01069>>01800000
            << >>                                              <<01069>>01805000
            <<FORWARD DECLARATIONS>>                           <<01069>>01810000
            << >>                                              <<01069>>01815000
PROCEDURE DEBUG;                                               <<01069>>01820000
   OPTION FORWARD;                                             <<01069>>01825000
                                                               <<01069>>01830000
            << >>                                              <<01549>>01835000
PROCEDURE SET'DB'DSEG (DB'STATE,XDS,ORIG'DB,DSTNUM);           <<01549>>01840000
   VALUE DB'STATE,XDS,ORIG'DB,DSTNUM;                          <<01549>>01845000
   INTEGER DB'STATE,XDS,DSTNUM;                                <<01549>>01850000
   DOUBLE ORIG'DB;                                             <<01549>>01855000
   OPTION FORWARD;                                             <<01549>>01860000
            << >>                                              <<01549>>01865000
PROCEDURE SET'DB (DB'STATE,XDS,DB'REG);                        <<01549>>01870000
   VALUE DB'STATE,XDS,DB'REG;                                  <<01549>>01875000
   INTEGER DB'STATE,XDS;                                       <<01549>>01880000
   DOUBLE DB'REG;                                              <<01549>>01885000
   OPTION FORWARD;                                             <<01549>>01890000
            << >>                                              <<01549>>01895000
            << >>                                                       01900000
            <<EXTERNAL PROCEDURES>>                                     01905000
            << >>                                                       01910000
LOGICAL PROCEDURE PHYSICALCST(PINN,LOGCST);                             01915000
  VALUE PINN,LOGCST;LOGICAL PINN,LOGCST;OPTION EXTERNAL;                01920000
            << >>                                                       01925000
DOUBLE PROCEDURE LOGICALCST'(PLABEL, PINX );                   <<06903>>01930000
   VALUE PLABEL, PINX;                                         <<06103>>01935000
   INTEGER PLABEL, PINX;                                       <<06103>>01940000
   OPTION EXTERNAL;                                            <<06103>>01945000
            << >>                                                       01950000
PROCEDURE SUDDENDEATH(ERRNUM);                                          01955000
   VALUE      ERRNUM;                                                   01960000
   INTEGER    ERRNUM;                                                   01965000
   OPTION     EXTERNAL;                                                 01970000
            << >>                                                       01975000
LOGICAL PROCEDURE SETSYSDB;                                             01980000
  OPTION EXTERNAL;                                                      01985000
            << >>                                                       01990000
LOGICAL PROCEDURE GETSIR (SIR);                                <<01549>>01995000
   VALUE SIR;                                                  <<01549>>02000000
   INTEGER SIR;                                                <<01549>>02005000
   OPTION EXTERNAL;                                            <<01549>>02010000
            << >>                                              <<01549>>02015000
PROCEDURE RELSIR (SIR,FLAG);                                   <<01549>>02020000
   VALUE SIR,FLAG;                                             <<01549>>02025000
   INTEGER SIR,FLAG;                                           <<01549>>02030000
   OPTION EXTERNAL;                                            <<01549>>02035000
            << >>                                              <<01549>>02040000
LOGICAL PROCEDURE TRAPLABEL(N,MASK,PLAB,XMASK,XPLAB,PLABMODE); <<06103>>02045000
   VALUE   N,MASK,PLAB;                                        <<06103>>02050000
   INTEGER N,MASK,PLAB,XMASK,XPLAB,PLABMODE;                   <<06103>>02055000
   OPTION  PRIVILEGED,UNCALLABLE,EXTERNAL;                     <<01069>>02060000
            << >>                                              <<01069>>02065000
DOUBLE PROCEDURE BUILDOBJID(SEG'TYPE,SEGNUMBER,PIN');          <<06663>>02070000
   VALUE SEG'TYPE,SEGNUMBER,PIN';                              <<01610>>02075000
   INTEGER SEG'TYPE,SEGNUMBER,PIN';                            <<01610>>02080000
   OPTION EXTERNAL;                           << IN KERNELC >> <<06663>>02085000
           << >>                                               <<06663>>02090000
INTEGER PROCEDURE CSTCONV ( SEG, PINX );                       <<06103>>02095000
   VALUE SEG, PINX;                                            <<06103>>02100000
   INTEGER SEG, PINX;                                          <<06103>>02105000
   OPTION EXTERNAL;                                            <<06103>>02110000
           << >>                                               <<06103>>02115000
DOUBLE PROCEDURE MAPPEDCSTTOPHYCST(OBJNO,PCBPT);               <<06663>>02120000
   VALUE OBJNO,PCBPT;                                          <<06663>>02125000
   INTEGER PCBPT,OBJNO;                                        <<06663>>02130000
   OPTION EXTERNAL;                           << IN KERNELC >> <<06663>>02135000
            << >>                                              <<06663>>02140000
INTEGER PROCEDURE CONVSEGIDTOSTINX(OBJ);                       <<06663>>02145000
   VALUE OBJ;                                                  <<06663>>02150000
   DOUBLE OBJ;                                                 <<06663>>02155000
   OPTION EXTERNAL;                           << IN KERNELC >> <<06663>>02160000
            << >>                                              <<06663>>02165000
PROCEDURE BLKLABEL;                                                     02170000
   OPTION    EXTERNAL;                                                  02175000
            << >>                                                       02180000
PROCEDURE RESETDB(D);                                                   02185000
  VALUE D;LOGICAL D;OPTION EXTERNAL;                                    02190000
            << >>                                                       02195000
LOGICAL PROCEDURE SETCRITICAL;                                          02200000
  OPTION EXTERNAL;                                                      02205000
            << >>                                                       02210000
LOGICAL PROCEDURE SYSTEM(CSTNUM);                              <<06103>>02215000
   VALUE CSTNUM;                                               <<06103>>02220000
   INTEGER CSTNUM;                                             <<06103>>02225000
   OPTION EXTERNAL;                                            <<06103>>02230000
PROCEDURE RESETCRITICAL(C);                                             02235000
  VALUE C;LOGICAL C;OPTION EXTERNAL;                                    02240000
            << >>                                                       02245000
PROCEDURE ERRORON;                                                      02250000
   OPTION     EXTERNAL;                                                 02255000
            << >>                                                       02260000
PROCEDURE ERROREXIT(I,E,P);                                             02265000
   VALUE      I,E,P;                                                    02270000
   LOGICAL    I,E,P;                                                    02275000
   OPTION     EXTERNAL;                                                 02280000
            << >>                                                       02285000
DOUBLE PROCEDURE CHEK (INTRINSIC, FLAGS, PARMS, CAPMASK,       <<01069>>02290000
                       OPTVMASK);                              <<01069>>02295000
   VALUE INTRINSIC, FLAGS, PARMS, CAPMASK, OPTVMASK;           <<01069>>02300000
   LOGICAL INTRINSIC, FLAGS, OPTVMASK;                         <<01069>>02305000
   DOUBLE PARMS, CAPMASK;                                      <<01069>>02310000
   OPTION VARIABLE,EXTERNAL;                                   <<01069>>02315000
            << >>                                              <<01069>>02320000
PROCEDURE TERMINATE;                                                    02325000
   OPTION     EXTERNAL;                                                 02330000
            << >>                                                       02335000
LOGICAL PROCEDURE EXCHANGEDB(D);                                        02340000
  VALUE D;LOGICAL D;OPTION EXTERNAL;                                    02345000
            << >>                                                       02350000
                                                               <<06663>>02355000
                                                               <<06663>>02360000
                                                               <<06663>>02365000
            << >>                                                       02370000
LOGICAL PROCEDURE GETENTRY(IX);                                         02375000
  VALUE IX;LOGICAL IX;OPTION EXTERNAL;                                  02380000
            << >>                                                       02385000
            << >>                                              <<01549>>02390000
INTEGER PROCEDURE GETDATASEG (MEM,VIRT);                       <<01549>>02395000
  VALUE MEM,VIRT;INTEGER MEM,VIRT; OPTION EXTERNAL;            <<01549>>02400000
            << >>                                              <<01549>>02405000
PROCEDURE RELDATASEG (EN);                                     <<01549>>02410000
  VALUE EN;INTEGER EN; OPTION EXTERNAL;                        <<01549>>02415000
            << >>                                              <<01549>>02420000
PROCEDURE RELCODESEG(IX);                                               02425000
  VALUE IX;LOGICAL IX;OPTION EXTERNAL;                                  02430000
            << >>                                              <<01549>>02435000
LOGICAL PROCEDURE DEASSEMBLE(RESULT,STRING,INSTR'1,INSTR'2);   <<01549>>02440000
  VALUE INSTR'1,INSTR'2;                                       <<01549>>02445000
  INTEGER RESULT,INSTR'1,INSTR'2;                              <<01549>>02450000
  BYTE ARRAY STRING; OPTION VARIABLE,EXTERNAL;                 <<01549>>02455000
            << >>                                                       02460000
INTEGER PROCEDURE DLSIZE(N);                                            02465000
  VALUE N;INTEGER N;OPTION EXTERNAL;                                    02470000
            << >>                                                       02475000
INTEGER PROCEDURE ZSIZE(N);                                             02480000
  VALUE N;INTEGER N;OPTION EXTERNAL;                                    02485000
            << >>                                                       02490000
PROCEDURE FWRITE(F',B,L,C);                                             02495000
  VALUE F',L,C;INTEGER F',L,C;ARRAY B;OPTION EXTERNAL;                  02500000
            << >>                                                       02505000
PROCEDURE FCLOSE(F',D,S);                                               02510000
  VALUE F',D,S;INTEGER F',D,S;OPTION EXTERNAL;                          02515000
            << >>                                                       02520000
INTEGER PROCEDURE FOPEN(F',FP,A,R,D,FM,U,B,N,FS,X,I,FC);                02525000
  VALUE   FP,A,R,U,B,N,FS,X,I,FC;                                       02530000
  LOGICAL FP,A;                                                         02535000
  INTEGER R,U,B,N,X,I,FC;                                               02540000
  DOUBLE  FS;                                                           02545000
  BYTE ARRAY F',D,FM;                                                   02550000
  OPTION EXTERNAL,VARIABLE;                                             02555000
            << >>                                                       02560000
DOUBLE PROCEDURE ATTACHIO(LDEV,QMISC,DX,T,FUNC,CNT,P1,P2,FLGS);         02565000
  VALUE   LDEV,QMISC,DX,T,FUNC,CNT,P1,P2,FLGS;                          02570000
  INTEGER LDEV,QMISC,DX,T,FUNC,CNT,P1,P2,FLGS;                          02575000
  OPTION EXTERNAL;                                                      02580000
            << >>                                                       02585000
PROCEDURE FREEZE(EN,TEST,PINX);                                         02590000
   VALUE      EN,TEST,PINX;                                             02595000
   INTEGER    EN,PINX;                                                  02600000
   LOGICAL    TEST;                                                     02605000
   OPTION     EXTERNAL;                                                 02610000
            << >>                                                       02615000
PROCEDURE UNFREEZE(EN,TEST,PINX);                                       02620000
   VALUE      EN,TEST,PINX;                                             02625000
   INTEGER    EN,PINX;                                                  02630000
   LOGICAL    TEST;                                                     02635000
   OPTION     EXTERNAL;                                                 02640000
            << >>                                                       02645000
PROCEDURE LOCKSEG(EN,TEST,PINX);                               <<01549>>02650000
   VALUE      EN,TEST,PINX;                                    <<01549>>02655000
   INTEGER    EN,PINX;                                         <<01549>>02660000
   LOGICAL    TEST;                                            <<01549>>02665000
   OPTION     EXTERNAL;                                        <<01549>>02670000
            << >>                                              <<01549>>02675000
PROCEDURE UNLOCKSEG(EN,TEST,PINX);                             <<01549>>02680000
   VALUE      EN,TEST,PINX;                                    <<01549>>02685000
   INTEGER    EN,PINX;                                         <<01549>>02690000
   LOGICAL    TEST;                                            <<01549>>02695000
   OPTION     EXTERNAL;                                        <<01549>>02700000
            << >>                                              <<01549>>02705000
INTEGER PROCEDURE THISCPU;                                     <<00315>>02710000
   OPTION     EXTERNAL;                                        <<00315>>02715000
            << >>                                              <<00315>>02720000
PROCEDURE HELP;                                                         02725000
   OPTION     EXTERNAL;                                                 02730000
                                                               <<01549>>02735000
INTEGER PROCEDURE CONVEXTLABELTODELTAP(EXTLABEL);              <<01549>>02740000
VALUE EXTLABEL;                                                <<01549>>02745000
INTEGER EXTLABEL;                                              <<01549>>02750000
OPTION EXTERNAL;                                               <<01549>>02755000
                                                               <<01549>>02760000
PROCEDURE LOCKSEG'(OBJ,BLOCKFLAG);                             <<06663>>02765000
   VALUE OBJ,BLOCKFLAG;                                        <<06663>>02770000
   DOUBLE  OBJ;                                                <<06663>>02775000
   LOGICAL BLOCKFLAG;                                          <<06663>>02780000
   OPTION EXTERNAL;                           << IN KERNELC >> <<06663>>02785000
                                                               <<06103>>02790000
PROCEDURE UNLOCKSEG'(OBJ);                                     <<06663>>02795000
   VALUE OBJ;                                                  <<06663>>02800000
   DOUBLE  OBJ;                                                <<06663>>02805000
   OPTION EXTERNAL;                           << IN KERNELC >> <<06663>>02810000
                                                               <<06103>>02815000
PROCEDURE FREEZESEG'(OBJ,BLOCKFLAG);                           <<06663>>02820000
   VALUE OBJ,BLOCKFLAG;                                        <<06663>>02825000
   DOUBLE OBJ;                                                 <<06663>>02830000
   LOGICAL BLOCKFLAG;                                          <<06663>>02835000
   OPTION EXTERNAL;                           << IN KERNELC >> <<06663>>02840000
                                                               <<06103>>02845000
PROCEDURE UNFREEZESEG'(OBJ);                                   <<06663>>02850000
   VALUE OBJ;                                                  <<06663>>02855000
   DOUBLE OBJ;                                                 <<06663>>02860000
   OPTION EXTERNAL;                           << IN KERNELC >> <<06663>>02865000
                                                               <<06103>>02870000
LOGICAL PROCEDURE LABEL'IS'SL'SEG (PLBL,PINX);                 <<06663>>02875000
   VALUE PLBL,PINX;                                            <<06663>>02880000
   INTEGER PLBL,PINX;                                          <<06663>>02885000
   OPTION EXTERNAL;                                            <<06663>>02890000
                                                               <<06663>>02895000
            << >>                                                       02900000
            << >>                                                       02905000
            << >>                                                       02910000
                                                                        02915000
          << >>                                                <<01549>>02920000
LOGICAL PROCEDURE TRANS'PROCOFFSET (PROCDESIG,SEG,DISP);       <<01549>>02925000
   INTEGER SEG,DISP;                                           <<01549>>02930000
   BYTE POINTER PROCDESIG;                                     <<01549>>02935000
   OPTION INTERNAL;                                            <<01549>>02940000
   BEGIN                                                       <<01549>>02945000
       << DUMMY PROCEDURE >>                                   <<01549>>02950000
       DISP := %2;                                             <<01549>>02955000
       SEG  := %301;                                           <<01549>>02960000
       TRANS'PROCOFFSET := TRUE;                               <<01549>>02965000
   END;                                                        <<01549>>02970000
                                                               <<01549>>02975000
          << >>                                                         02980000
COMMENT     SETS UP A SEGMENT IN MEMORY UNDER A                <<06663>>02985000
            FREEZE/EXCHANGEDB/ABSOLUTE DB.                              02990000
              MODE.( 8:1) D DATA SEGMENT                                02995000
                  .( 9:1) F FREEZE                                      03000000
                  .(10:1) X EXCHANGEDB                                  03005000
                  .(11:1) S SYSTEM/ABS DB                               03010000
                  .(7:1) = 0 SEG IN OBJID FORM.                <<06663>>03015000
                         = 1 SEG IN PLABEL FORM                         03020000
                         THIS BIT IS CHECKED ONLY WHEN                  03025000
                         OBJ IS A CODE SEGMENT.                <<06663>>03030000
              OBJ  CODE/DATA SEG OR ABS ADDRESS                <<06663>>03035000
              BANK # IF ABS ADDRESS                                     03040000
              PINX PCB INDEX OF PIN (OPTIONAL)                 ((MPEIV))03045000
            ASSUME DB=STACK DB                          ;      <<06663>>03050000
          << >>                                                         03055000
LOGICAL PROCEDURE SETOBJ(MODE,OBJ,BANK,PINX);                  <<06663>>03060000
   VALUE   MODE,OBJ,BANK,PINX;                                 <<06663>>03065000
   LOGICAL MODE,BANK,PINX;                                     <<06663>>03070000
   DOUBLE  OBJ;                                                <<06663>>03075000
   OPTION VARIABLE,UNCALLABLE,PRIVILEGED;                      <<01549>>03080000
   BEGIN                                                                03085000
          DEFINE PINX'PASSED = PARMMASK.(15:1)#;               <<01549>>03090000
          INTEGER ADDR = OBJ+1;                                <<06663>>03095000
          LOGICAL ARRAY OBJID(*)=OBJ;                          <<06663>>03100000
          << >>                                                         03105000
          << SET UP DEFAULT PINX IF NECESSARY >>               <<01549>>03110000
          IF NOT PINX'PASSED THEN PINX := PIX;                 <<01549>>03115000
          IF MODE.(8:1) THEN                                            03120000
             BEGIN            <<DATA SEG>>                              03125000
             IF NOT MODE.(11:1) THEN                                    03130000
                BEGIN                                                   03135000
                  IF MODE.(9:1) THEN                           <<06663>>03140000
                  BEGIN                                        <<06663>>03145000
                  TOS:=OBJID(OBJIDNUMFIELD);                   <<06663>>03150000
                  TOS:=TRUE;                                   <<06663>>03155000
                  TOS:=PINX;                                   <<06663>>03160000
                  FREEZE(*,*,*);                               <<06663>>03165000
                  END;                                         <<06663>>03170000
                IF MODE.(10:1) THEN EXCHANGEDB                 <<06663>>03175000
                   (OBJID(OBJIDNUMFIELD));                     <<06663>>03180000
                SETOBJ_TRUE;                                   <<06663>>03185000
                END;                                                    03190000
             END                                                        03195000
          ELSE                                                          03200000
             BEGIN            <<CODE SEG/ABS DB>>                       03205000
             IF NOT MODE.(10:1) THEN                                    03210000
                BEGIN                                                   03215000
                IF MODE.(9:1) THEN                                      03220000
                   BEGIN                                                03225000
                   IF MODE.(7:1) THEN                          <<06103>>03230000
                      OBJ:=MAPPEDCSTTOPHYCST                   <<06663>>03235000
                           (OBJID(OBJIDNUMFIELD),PINX);        <<06663>>03240000
                   FREEZESEG'(OBJ,0);                          <<06663>>03245000
                   BANK:=DSTI'(CONVSEGIDTOSTINX(OBJ)+2);       <<06663>>03250000
                   ADDR_DSTI'(X_X+1);                                   03255000
                END;                                                    03260000
             IF MODE.(11:1) THEN                                        03265000
                BEGIN                                                   03270000
                SETSYSDB;                                               03275000
                TOS_BANK;                                               03280000
                TOS_ADDR;                                               03285000
                ASSEMBLE(XCHD);                                         03290000
                DDEL;                                                   03295000
                END;                                                    03300000
             SETOBJ_TRUE;                                      <<06663>>03305000
             END;                                                       03310000
          END;                                                          03315000
   END;                                                                 03320000
                                                                        03325000
                                                                        03330000
          COMMENT                                              <<06663>>03335000
            RESETS TO STACK DB A SEGMENT IN MEMORY UPON        <<06663>>03340000
            WHICH A SETOBJ HAS BEEN PERFORMED.                 <<06663>>03345000
            THE MODE PASSED IS ASSUMED TO BE IDENTICAL ;       <<06663>>03350000
          << >>                                                         03355000
LOGICAL PROCEDURE RESETOBJ(MODE,OBJ,PINX);                     <<06663>>03360000
   VALUE   MODE,OBJ,PINX;                                      <<06663>>03365000
   LOGICAL MODE,PINX;                                          <<06663>>03370000
   DOUBLE  OBJ;                                                <<06663>>03375000
   OPTION VARIABLE,UNCALLABLE,PRIVILEGED;                      <<01549>>03380000
   BEGIN                                                                03385000
          DEFINE PINX'PASSED = PARMMASK.(15:1)#;               <<01549>>03390000
          LOGICAL ARRAY OBJID(*)=OBJ;                          <<06663>>03395000
          << >>                                                         03400000
          << SET UP DEFAULT PINX IF NECESSARY >>               <<01549>>03405000
          IF NOT PINX'PASSED THEN PINX := PIX;                 <<01549>>03410000
          IF MODE.(8:1) THEN                                            03415000
             BEGIN           <<DATA SEG>>                               03420000
             IF NOT MODE.(11:1) THEN                                    03425000
                BEGIN                                                   03430000
                IF MODE.(10:1) THEN EXCHANGEDB(0);                      03435000
                IF MODE.( 9:1) THEN UNFREEZE                   <<06663>>03440000
                   (OBJID(OBJIDNUMFIELD),1,PINX);              <<06663>>03445000
                RESETOBJ_TRUE;                                 <<06663>>03450000
                END;                                                    03455000
             END                                                        03460000
          ELSE                                                          03465000
             BEGIN             <<CODE SEG>>                             03470000
             IF NOT MODE.(10:1) THEN                                    03475000
                BEGIN                                                   03480000
                IF MODE.(11:1) THEN RESETDB(-1);                        03485000
               IF MODE.(9:1) THEN                              <<06103>>03490000
                  BEGIN                                        <<06103>>03495000
                  IF MODE.(7:1) THEN                           <<06103>>03500000
                     OBJ:=MAPPEDCSTTOPHYCST                    <<06663>>03505000
                          (OBJID(OBJIDNUMFIELD),PINX);         <<06663>>03510000
                  UNFREEZESEG'(OBJ);                           <<06663>>03515000
                  END;                                         <<06103>>03520000
                RESETOBJ_TRUE;                                 <<06663>>03525000
                END;                                                    03530000
             END;                                                       03535000
   END;                                                                 03540000
double  procedure convtoobjid(debugid,pinn);                   <<06671>>03545000
   << CONVERT IDENTIFIER FROM DEBUGID FORMAT TO OBJID FORMAT>> <<06663>>03550000
   VALUE DEBUGID,PINN;                                         <<06671>>03555000
   INTEGER PINN;                                               <<06671>>03560000
   DOUBLE DEBUGID;                                             <<06103>>03565000
   OPTION INTERNAL,UNCALLABLE;                                 <<06103>>03570000
                                                               <<06103>>03575000
BEGIN                                                          <<06103>>03580000
                                                               <<06103>>03585000
   DEBUGIDDEF;                                                 <<06103>>03590000
                                                               <<06103>>03595000
   INTEGER                                                     <<06103>>03600000
      OBJIDTYPE',                                              <<06663>>03605000
      PHYSEG;                                                  <<06103>>03610000
                                                               <<06103>>03615000
   DEFINE                                                      <<06103>>03620000
      TYPEFIELD = (0:4)#;                                      <<06103>>03625000
                                                               <<06103>>03630000
   IF SEGTYPE = ABS'SEG THEN                                   <<06103>>03635000
      BEGIN                                                    <<06103>>03640000
         IF LOGICALMAPPING THEN                                <<06103>>03645000
            OBJIDTYPE':=IF LOGICAL(XFLAG) THEN OBJIDPGMTYPE    <<06663>>03650000
                                          ELSE OBJIDSLTYPE     <<06663>>03655000
         ELSE                                                  <<06103>>03660000
            OBJIDTYPE':=IF SEGNR > %300 THEN OBJIDPGMTYPE      <<06663>>03665000
                                        ELSE OBJIDSLTYPE;      <<06663>>03670000
         convtoobjid:=buildobjid(objidtype',segnr,pinn);       <<06671>>03675000
      END                                                      <<06103>>03680000
   ELSE                                                        <<06103>>03685000
      BEGIN                                                    <<06103>>03690000
         SEGNR.TYPEFIELD:=SEGTYPE-1;                           <<06103>>03695000
         PHYSEG:=PHYSICALCST(PINN,SEGNR);                      <<06671>>03700000
         OBJIDTYPE':=IF SEGTYPE=PROG'SEG THEN OBJIDPGMTYPE     <<06663>>03705000
                                         ELSE OBJIDSLTYPE;     <<06663>>03710000
         convtoobjid:=buildobjid(objidtype',physeg,pinn);      <<06671>>03715000
      END;                                                     <<06103>>03720000
END;                                                           <<06103>>03725000
          << >>                                                <<01069>>03730000
          <<THIS PROCEDURE VALIDATES                           ((TB.MM))03735000
            A PIN AND SEGMENT NUMBER. IF A PIN                 ((TB.MM))03740000
            NUMBER IS NOT PASSED, THE PIN OF                   ((TB.MM))03745000
            THE CALLER IS USED TO DETERMINE                    ((TB.MM))03750000
            THE VALIDITY OF THE SEGMENT #.                     ((TB.MM))03755000
            THIS ROUTINE MAY BE CALLED PDISABLED.              ((TB.MM))03760000
                                                               ((TB.MM))03765000
            VALIDATE = 0 OK                                    ((TB.MM))03770000
                       1 INVALID PIN NUMBER                    ((TB.MM))03775000
                       2 INVALID SEG NUMBER                    ((MPEIV))03780000
            ASSUMES:   IF PIN IS NOT THE CURRENT PROCESS       ((MPEIV))03785000
                       THEN THE CALLER IS EITHER               ((MPEIV))03790000
                       PDISABLED OR HAS SEGTAB. SIR   >>       <<01549>>03795000
          << >>                                                <<01069>>03800000
INTEGER PROCEDURE VALIDATE(PIN'NUM,DEBUGID,STDINDEX);          <<06103>>03805000
   VALUE PIN'NUM,DEBUGID;                                      <<06103>>03810000
   INTEGER PIN'NUM,STDINDEX;                                   <<06103>>03815000
   DOUBLE DEBUGID;                                             <<06103>>03820000
   OPTION   VARIABLE,UNCALLABLE,PRIVILEGED;                    <<01069>>03825000
                                                               <<01069>>03830000
   BEGIN                                                       <<01069>>03835000
          DEBUGIDDEF;                                          <<06103>>03840000
          LOGICAL IT'IS'SL;                                    <<06103>>03845000
          INTEGER SEG;  <<DST STANDARD INDEX>>                 <<06663>>03850000
          DOUBLE  OBJID;                                       <<06663>>03855000
          LOGICAL                                              <<01069>>03860000
             PARMMASK = Q-4;                                   <<01069>>03865000
          INTEGER                                              <<01069>>03870000
             LENGTH,                                           <<01069>>03875000
             PINX;                                             <<01069>>03880000
          DEFINE                                               <<01069>>03885000
             VALIDATE'PIN = PARMMASK.(13:1) #,                 <<06103>>03890000
             VALIDATE'SEG = PARMMASK.(14:1) #,                 <<06103>>03895000
             STDINDEX'SPE = PARMMASK.(15:1) #;                 <<06103>>03900000
          DEFINE                                               <<01069>>03905000
             RETURN'ERR'PIN =                                  <<01069>>03910000
                BEGIN                                          <<01069>>03915000
                VALIDATE := 1;                                 <<01069>>03920000
                RETURN;                                        <<01069>>03925000
                END; #,                                        <<01069>>03930000
             RETURN'ERR'SEG =                                  <<01069>>03935000
                BEGIN                                          <<01069>>03940000
                VALIDATE := 2;                                 <<01069>>03945000
                RETURN;                                        <<01069>>03950000
                END; #;                                        <<01069>>03955000
                                                               <<01069>>03960000
          << >>                                                <<01069>>03965000
          << SET UP PCB INDEX >>                               <<01069>>03970000
          IF VALIDATE'PIN THEN                                 <<01069>>03975000
             BEGIN                                             <<01069>>03980000
             IF NOT (1 <= PIN'NUM <= NUMPCBS')                 <<01549>>03985000
             THEN RETURN'ERR'PIN;                              <<01069>>03990000
             << IF THE PIN NOT THE CALLERS PIN THEN >>         <<01069>>03995000
             << THE PROCESS MUST BE ALIVE           >>         <<01069>>04000000
             PINX := PIN'NUM*PCBSIZE;                          <<01549>>04005000
             IF PINX <> PIX AND not logical                    <<06671>>04010000
                (PCBI'(pinx+procstatewordnum).aliveflag)       <<06671>>04015000
             THEN RETURN'ERR'PIN;                              <<01069>>04020000
             END;                                              <<01069>>04025000
                                                               <<01069>>04030000
          IF VALIDATE'SEG THEN                                 <<01069>>04035000
             BEGIN                                             <<01069>>04040000
             IF NOT VALIDATE'PIN THEN PINX := PIX;             <<01069>>04045000
             IF SEGTYPE <> ABS'SEG THEN SUDDENDEATH(10000);    <<06103>>04050000
             SEG:=SEGNR;                                       <<06103>>04055000
             IF SEG <= 0 THEN  RETURN'ERR'SEG;                 <<01069>>04060000
             IF LOGICALMAPPING THEN                            <<06103>>04065000
                IF LOGICAL(XFLAG) THEN IT'IS'SL:=FALSE         <<06103>>04070000
                        ELSE IT'IS'SL:=TRUE                    <<06103>>04075000
             ELSE                                              <<06103>>04080000
                IF SEG > %300 THEN BEGIN                       <<06103>>04085000
                                        IT'IS'SL:=FALSE;       <<06103>>04090000
                                        SEG:=SEG-%300;         <<06103>>04095000
                                     END                       <<06103>>04100000
                                ELSE IT'IS'SL:=TRUE;           <<06103>>04105000
             IF IT'IS'SL THEN                                  <<06103>>04110000
                BEGIN                                          <<01069>>04115000
                IF SEG > CSTI'(0) THEN RETURN'ERR'SEG;         <<01069>>04120000
                END                                            <<01069>>04125000
             ELSE                                              <<01069>>04130000
                BEGIN                                          <<01069>>04135000
                << CHECK FOR CSTX >>                           <<01069>>04140000
                IF PCBI'(PINX+pbxwordnum) = 0 then             <<06671>>04145000
              RETURN'ERR'SEG;                                  <<06103>>04150000
                << SEG # IN RANGE? >>                          <<01069>>04155000
                IF SEG > DSTI'(CSTBLK'(PCBI'                   <<06103>>04160000
                   (PINX+pbxwordnum))) then return'err'seg;    <<06671>>04165000
                END;                                           <<01069>>04170000
             << ALLOCATED SEGMENT ? >>                         <<01832>>04175000
             OBJID:=BUILDOBJID(IF IT'IS'SL THEN OBJIDSLTYPE    <<06663>>04180000
                               ELSE OBJIDPGMTYPE,SEGNR,        <<06663>>04185000
                               PINX/PCBSIZE);                  <<06663>>04190000
             IF (SEG:=CONVSEGIDTOSTINX(OBJID)) = 0 THEN        <<06663>>04195000
                RETURN'ERR'SEG;                                <<06103>>04200000
             END;                                              <<01069>>04205000
                                                               <<01069>>04210000
          IF STDINDEX'SPE THEN                                 <<06103>>04215000
             STDINDEX:=SEG;                                    <<06103>>04220000
          VALIDATE := 0;  << EVERYTHING OK >>                  <<01069>>04225000
   END;                                                        <<01069>>04230000
$PAGE "           BREAKPOINT TABLE MANAGEMENT PROCEDURES"      <<01549>>04235000
          << >>                                                <<01549>>04240000
          << THIS ROUTINE PERFORMS 2 FUNCTIONS:                ((MPEIV))04245000
                                                               ((MPEIV))04250000
               1) IT FINDS/RETURNS A FREE BREAKPOINT           ((MPEIV))04255000
                  ENTRY.                                       ((MPEIV))04260000
               2) COALESCES THE FREE LIST AS IT                ((MPEIV))04265000
                  SEARCHES FOR AN ENTRY.                       ((MPEIV))04270000
                                                               ((MPEIV))04275000
             PARAMETERS:                                       ((MPEIV))04280000
                SIZE: THE SIZE OF THE REQUESTED ENTRY          ((MPEIV))04285000
                                                               ((MPEIV))04290000
             RETURNS:                                          ((MPEIV))04295000
                0:    UNABLE TO FIND ENTRY OF THE              ((MPEIV))04300000
                      REQUESTED SIZE.                          ((MPEIV))04305000
                <>0:  INDEX OF ENTRY.                          ((MPEIV))04310000
                      STOP(INDEX).BKPT'SIZE IS THE             ((MPEIV))04315000
                      ACTUAL SIZE OF THE ENTRY,                ((MPEIV))04320000
                      THE ACTUAL SIZE MAY BE GREATER           ((MPEIV))04325000
                      THAN THE REQUESTED SIZE.                 ((MPEIV))04330000
                                                               ((MPEIV))04335000
             ASSUMES:                                          ((MPEIV))04340000
                      DB IS SET TO BREAKPOINT TABLE.           ((MPEIV))04345000
                      ENTER PDISABLED.                         ((MPEIV))04350000
          >>                                                   <<01549>>04355000
          << >>                                                <<01549>>04360000
INTEGER PROCEDURE GET'BKPT'ENTRY (SIZE);                       <<01549>>04365000
  VALUE SIZE;                                                  <<01549>>04370000
  INTEGER SIZE;                                                <<01549>>04375000
  OPTION UNCALLABLE,PRIVILEGED;                                <<01549>>04380000
  BEGIN                                                        <<01549>>04385000
          EQUATE                                               <<01549>>04390000
             MIN'FREE'SIZE = 3; << MIN. SIZE OF FREE ENTRY >>  <<01549>>04395000
          INTEGER                                              <<01549>>04400000
             P,                                                <<01549>>04405000
             NEXT,                                             <<01549>>04410000
             LEFTOVER,                                         <<01549>>04415000
             LINK = GET'BKPT'ENTRY;                            <<01549>>04420000
          LOGICAL                                              <<01549>>04425000
             SUCCESS;                                          <<01549>>04430000
          << >>                                                <<01549>>04435000
          GET'BKPT'ENTRY := 0;                                 <<01549>>04440000
                                                               <<01549>>04445000
          IF AVAIL <> 0 THEN                                   <<01549>>04450000
             BEGIN << THERE ARE FREE ENTRIES >>                <<01549>>04455000
             P := AVAIL; << P POINTS TO 1ST ENT. >>            <<01549>>04460000
             SUCCESS := FALSE;                                 <<01549>>04465000
             DO                                                <<01549>>04470000
                BEGIN                                          <<01549>>04475000
                << IF THE PHYSICAL ENTRY FOLLOWING P >>        <<01549>>04480000
                << IS FREE, COALESCE ENTRIES         >>        <<01549>>04485000
                NEXT := P + STOP(P).FREE'SIZE;                 <<01549>>04490000
                WHILE STOP(NEXT).BKPT'TAG = 1 DO               <<01549>>04495000
                   BEGIN                                       <<01549>>04500000
                   << COALESEC ENTRIES -- REMOVE NEXT  >>      <<01549>>04505000
                   << FROM LIST: FORW'LINK OF NEXT'S   >>      <<01549>>04510000
                   << PREDECESSOR GETS NEXT'S FORWLINK >>      <<01549>>04515000
                   STOP(STOP(NEXT+BKWLINK)+FORWLINK) :=        <<01549>>04520000
                      STOP(NEXT+FORWLINK);                     <<01549>>04525000
                   << BKWLINK OF NEXT'S SUCCESSOR GETS >>      <<01549>>04530000
                   << BKWLINK OF NEXT                  >>      <<01549>>04535000
                   STOP(STOP(NEXT+FORWLINK)+BKWLINK) :=        <<01549>>04540000
                      STOP(NEXT+BKWLINK);                      <<01549>>04545000
                   << MERGE ENTRIES P AND NEXT         >>      <<01549>>04550000
                   STOP(P).FREE'SIZE := STOP(NEXT).FREE'SIZE   <<01549>>04555000
                                        + STOP(P).FREE'SIZE;   <<01549>>04560000
                   << ZERO OUT NEXT'S LINKS >>                 <<01549>>04565000
                   STOP(NEXT) := STOP(NEXT+FORWLINK) :=        <<01549>>04570000
                      STOP(NEXT+BKWLINK) := 0;                 <<01549>>04575000
                   << HAVE WE COME FULL CIRCLE? >>             <<01549>>04580000
                   IF NEXT = AVAIL THEN AVAIL := P;            <<01549>>04585000
                   NEXT := P + STOP(P).FREE'SIZE;              <<01549>>04590000
                   END;                                        <<01549>>04595000
                                                               <<01549>>04600000
                IF STOP(P).FREE'SIZE >= SIZE THEN              <<01549>>04605000
                   SUCCESS := TRUE                             <<01549>>04610000
                ELSE P := STOP(P+FORWLINK);                    <<01549>>04615000
                END                                            <<01549>>04620000
             UNTIL SUCCESS OR P = AVAIL;                       <<01549>>04625000
             << IF P=AVAIL --> SEARCHED ENTIRE LIST >>         <<01549>>04630000
                                                               <<01549>>04635000
             IF SUCCESS THEN                                   <<01549>>04640000
                BEGIN                                          <<01549>>04645000
                << ADVANCE AVAIL -- SO THAT NEXT TIME >>       <<01549>>04650000
                << START AT NEW LOC WHEN SEARCH LIST  >>       <<01549>>04655000
                AVAIL := STOP(P+FORWLINK);                     <<01549>>04660000
                LEFTOVER := STOP(P).FREE'SIZE - SIZE;          <<01549>>04665000
                IF LEFTOVER < MIN'FREE'SIZE  THEN              <<01549>>04670000
                   BEGIN                                       <<01549>>04675000
                   << TAKE WHOLE ENTRY, DONT ALLOW FREE >>     <<01549>>04680000
                   << ENTRIES TO BECOME TOO SMALL.      >>     <<01549>>04685000
                   << ARE WE REMOVING THE LAST ENTRY?   >>     <<01549>>04690000
                   IF AVAIL = P THEN                           <<01549>>04695000
                      BEGIN                                    <<01549>>04700000
                      AVAIL := 0;                              <<01549>>04705000
                      GET'BKPT'ENTRY := P;                     <<01549>>04710000
                      END                                      <<01549>>04715000
                   ELSE                                        <<01549>>04720000
                      BEGIN << REMOVE FROM LIST >>             <<01549>>04725000
                      << FORWLINK OF P'S PREDECESSOR >>        <<01549>>04730000
                      << GETS P'S FORWLINK           >>        <<01549>>04735000
                      STOP(STOP(P+BKWLINK)+FORWLINK) :=        <<01549>>04740000
                         STOP(P+FORWLINK);                     <<01549>>04745000
                      << BKWARD LINK OF P'S SUCCESSOR >>       <<01549>>04750000
                      << GETS P'S BKWARD LINK         >>       <<01549>>04755000
                      STOP(STOP(P+FORWLINK)+BKWLINK) :=        <<01549>>04760000
                         STOP(P+BKWLINK);                      <<01549>>04765000
                      GET'BKPT'ENTRY := P;                     <<01549>>04770000
                      END                                      <<01549>>04775000
                   END                                         <<01549>>04780000
                ELSE                                           <<01549>>04785000
                    BEGIN << TAKE SPACE FROM END OF ENTRY >>   <<01549>>04790000
                    GET'BKPT'ENTRY := P + LEFTOVER;            <<01549>>04795000
                    STOP(P).FREE'SIZE := LEFTOVER;             <<01549>>04800000
                    STOP(LINK).BKPT'SIZE := SIZE;              <<01549>>04805000
                    END;                                       <<01549>>04810000
                                                               <<01549>>04815000
                STOP(LINK).BKPT'TAG := 0; << MARK AS IN USE >> <<01549>>04820000
                BKPT'WD'USED:=BKPT'WD'USED+                    <<06103>>04825000
                              STOP(LINK).BKPT'SIZE;            <<06103>>04830000
                IF BKPT'WD'USED > BKPT'MAXWD'USED THEN         <<06103>>04835000
                   BKPT'MAXWD'USED:=BKPT'WD'USED;              <<06103>>04840000
                END; << SUCCESSFULL >>                         <<01549>>04845000
             END;                                              <<01549>>04850000
                                                               <<01549>>04855000
  END; << GET'BKPT'ENTRY >>                                    <<01549>>04860000
                                                                        04865000
          << >>                                                <<01549>>04870000
          << THIS PROCEDURE RETURNS THE INDEX OF A             ((MPEIV))04875000
             FREE USER BKPT'EXT INDEX.                         ((MPEIV))04880000
                                                               ((MPEIV))04885000
             RETURNS:                                          ((MPEIV))04890000
                0:    NO FREE ENTRIES IN TABLE                 ((MPEIV))04895000
                <>0:  INDEX OF FREE ENTRY                      ((MPEIV))04900000
                                                               ((MPEIV))04905000
             ASSUMES:                                          ((MPEIV))04910000
                      DB IS SET TO BREAK POINT TABLE.          ((MPEIV))04915000
                      ENTER PDISABLED.                         ((MPEIV))04920000
           >>                                                  <<01549>>04925000
           << >>                                               <<01549>>04930000
INTEGER PROCEDURE GET'BKPT'EXT'X;                              <<01549>>04935000
  OPTION PRIVILEGED,UNCALLABLE;                                <<01549>>04940000
  BEGIN                                                        <<01549>>04945000
           INTEGER I;                                          <<01549>>04950000
           << >>                                               <<01549>>04955000
           GET'BKPT'EXT'X := 0;                                <<01549>>04960000
           I := PROC'CNT + 1;  << FIRST USER INDEX >>          <<01549>>04965000
           WHILE (I < STOP) AND (STOP(I) <> 0) DO I := I+1;    <<01549>>04970000
           IF I < STOP THEN                                    <<01549>>04975000
              BEGIN                                            <<01549>>04980000
              GET'BKPT'EXT'X := I;                             <<01549>>04985000
              << INCREMENT # USED USER ENTRIES >>              <<01549>>04990000
              STOP(PROC'CNT) := STOP(PROC'CNT) + 1;            <<01549>>04995000
              END;                                             <<01549>>05000000
  END;                                                         <<01549>>05005000
                                                               <<01549>>05010000
          << THIS PROCEDURE RETURNS THE INDEX TO THE           ((MPEIV))05015000
             FREE BKPT'EXT LIST.                               ((MPEIV))05020000
                                                               ((MPEIV))05025000
             PARAMETERS:                                       ((MPEIV))05030000
                INDEX:  INDEX OF ENTRY BEING FREED             ((MPEIV))05035000
                                                               ((MPEIV))05040000
             ASSUMES:                                          ((MPEIV))05045000
                        DB IS SET TO BREAK POINT TABLE.        ((MPEIV))05050000
                        ENTER PDISABLED.                       ((MPEIV))05055000
           >>                                                  <<01549>>05060000
           << >>                                               <<01549>>05065000
PROCEDURE FREE'BKPT'EXT'X (INDEX);                             <<01549>>05070000
  VALUE INDEX;                                                 <<01549>>05075000
  INTEGER INDEX;                                               <<01549>>05080000
  OPTION UNCALLABLE,PRIVILEGED;                                <<01549>>05085000
  BEGIN                                                        <<01549>>05090000
           << >>                                               <<01549>>05095000
           STOP(INDEX) := 0;  << MARK AVAILABLE >>             <<01549>>05100000
           STOP(PROC'CNT) := STOP(PROC'CNT) - 1;               <<01549>>05105000
  END;                                                         <<01549>>05110000
          << >>                                                         05115000
$PAGE "          BREAKPOINT ENTRY HANDLING PROCEDURES"         <<01549>>05120000
          << >>                                                <<01549>>05125000
          <<CHECK EQUIV OF P LOCATIONS>>                                05130000
          << >>                                                         05135000
LOGICAL PROCEDURE TESTPSTOP(LINK,PLOC,FLAG);                            05140000
  VALUE   LINK,PLOC,FLAG;                                               05145000
  INTEGER LINK,PLOC,FLAG;                                               05150000
  OPTION  UNCALLABLE,PRIVILEGED,INTERNAL;                               05155000
  BEGIN                                                                 05160000
          << >>                                                         05165000
          TOS_STOP(LINK);                                               05170000
          IF STOP(X_X+PLOCOFFSET)=PLOC THEN GOTO L;            <<06103>>05175000
          TOS_FLAG;                                                     05180000
          TOS.(14:1)_0;                                                 05185000
          IF = THEN GOTO LL;                                            05190000
          FLAG_TOS;                                                     05195000
          ASSEMBLE(TBC 4);                                              05200000
          IF = THEN                                                     05205000
               BEGIN TOS_STOP(X);                                       05210000
                     DUPLICATE;                                         05215000
               END ELSE                                                 05220000
               BEGIN ASSEMBLE(TBC 5);                                   05225000
                     IF <> THEN TOS_0                                   05230000
                           ELSE TOS_1;                                  05235000
                     TOS_TOS+STOP(X);                                   05240000
                     ASSEMBLE(DUP,DECA);                                05245000
               END;                                                     05250000
          COMMENT:                                             <<00873>>05255000
             AT S-1 IS THE UPPER LIMIT OF THE BREAKPT          <<00873>>05260000
             (IE. P+1 FOR DBL ENTRY, P FOR SINGLE).  S-0       <<00873>>05265000
             CONTAINS THE LOWER LIMIT (P).  THESE LIMITS       <<01040>>05270000
             MUST BE ADJUSTED FOR 2 WORD INSTR.;               <<01040>>05275000
          IF STOP(LINK).(6:1) = 1 THEN                         <<01040>>05280000
             BEGIN << IF STOP(X)=P THEN LOWER LIMIT OK >>      <<01040>>05285000
                   << BUT MUST INC UPPER LIMIT ELSE    >>      <<01040>>05290000
                   << STOP(X)=P+2 AND MUST DEC LOWER   >>      <<01040>>05295000
                   << LIMIT                            >>      <<01040>>05300000
             IF STOP(X).(5:1) = 0 THEN ASSEMBLE(INCB)          <<01040>>05305000
             ELSE ASSEMBLE(DECA);                              <<01040>>05310000
             END;                                                       05315000
          TOS_PLOC;                                                     05320000
          << GET UPPER LIMIT OF NEW BRKPNT             >>      <<00873>>05325000
          << ADD ONE FOR DBL ENTRY AND/OR 2 WORD INSTR >>      <<00873>>05330000
          TOS_PLOC+FLAG.(15:1)+FLAG.(13:1);                    <<00873>>05335000
          COMMENT:                                             <<00873>>05340000
             IF THE UPPER LIMIT OF THE NEW BRKPNT IS           <<00873>>05345000
             LESS THAN THE LOWER LIMIT OF THE OLD, OR          <<00873>>05350000
             THE LOWER OF THE NEW IS GREATER THEN THE          <<00873>>05355000
             UPPER OF THE OLD THEN NO CONFLICT;                <<00873>>05360000
          ASSEMBLE(CAB,CMP);                                            05365000
          IF < THEN GOTO LL;                                            05370000
          ASSEMBLE(XCH,CMP);                                            05375000
          IF > THEN GOTO LL;                                            05380000
  L:      TESTPSTOP_1;                                                  05385000
  LL:                                                                   05390000
  END;                                                                  05395000
                                                                        05400000
                                                                        05405000
          << >>                                                         05410000
          <<SEARCH COMPLETE B.P. TABLE FOR ENTRY                        05415000
               FLAG  =0 SEARCH TO ENTRY                                 05420000
                     =1  SEARCH TO ENTRY+INSTR                          05425000
                     =2 VALIDATE NEW(+S VS D)                           05430000
                     =3 VALIDATE NEW(+D VS D)                           05435000
               SEARCHSTOP<>0 ENTRY LINK                                 05440000
                          =0 FAILURE                                    05445000
            ASSUME:  DB=BREAKPOINT TABLE                       ((MPEIV))05450000
                     PSEUDODISABLE MODE          >>                     05455000
          << >>                                                         05460000
INTEGER PROCEDURE SEARCHSTOP(LINK,OBJ,PLOC,FLAG);              <<06663>>05465000
  VALUE     LINK,OBJ,PLOC,FLAG;                                <<06663>>05470000
  INTEGER   LINK,PLOC,FLAG;                                    <<06663>>05475000
  DOUBLE    OBJ;                                               <<06663>>05480000
  OPTION  UNCALLABLE,PRIVILEGED,INTERNAL;                               05485000
  BEGIN                                                                 05490000
          DOUBLE BPT'OBJ;                                      <<06663>>05495000
          INTEGER NUM,                                         <<06663>>05500000
                  BPT'OBJ0 = BPT'OBJ,                          <<06663>>05505000
                  BPT'OBJ1 = BPT'OBJ + 1;                      <<06663>>05510000
                                                               <<06663>>05515000
                                                               <<06663>>05520000
          << >>                                                         05525000
          NUM_BKPT'DST'SIZE;                                   <<01549>>05530000
          WHILE LINK < NUM -1 DO                               <<06663>>05535000
               BEGIN IF STOP(LINK)<0 THEN GOTO L;                       05540000
                     BPT'OBJ0 := STOP(LINK+OBJIDOFFSET);       <<06663>>05545000
                     BPT'OBJ1 := STOP(LINK+OBJIDOFFSET+1);     <<06663>>05550000
                     IF BPT'OBJ <> OBJ THEN GO TO L;           <<06663>>05555000
                                                               <<06663>>05560000
                     IF TESTPSTOP(LINK,PLOC,FLAG) THEN                  05565000
                           BEGIN IF FLAG=1 AND STOP(LINK)               05570000
                                       .(3:1)=0 THEN GOTO L;            05575000
                                 SEARCHSTOP_LINK;                       05580000
                                 RETURN;                                05585000
                           END;                                         05590000
  L:                 LINK_LINK+(IF STOP(LINK)<0 THEN           <<01549>>05595000
                                   STOP(LINK).FREE'SIZE        <<01549>>05600000
                                ELSE STOP(LINK).BKPT'SIZE);    <<01549>>05605000
               END;                                                     05610000
  END;                                                                  05615000
                                                                        05620000
                                                                        05625000
          << >>                                                         05630000
          <<SET/RESET BRPT AND SEARCH FOR INSTR                         05635000
               FLAG  =0 SET B.P. AND GET INSTR                          05640000
                     =1 RESET B.P.                                      05645000
            ASSUME:  DB=BREAKPOINT TABLE                       ((MPEIV))05650000
                     PSEUDODISABLE MODE          >>                     05655000
          << >>                                                         05660000
PROCEDURE MANAGESTOP(LINK,FLAG,PINX);                                   05665000
  VALUE     LINK,FLAG,PINX;                                             05670000
  INTEGER   LINK,FLAG,PINX;                                             05675000
  OPTION  INTERNAL;                                                     05680000
  BEGIN                                                                 05685000
     DOUBLE BPT'OBJ;     << OBJID FROM BREAK POINT TABLE >>    <<06663>>05690000
      INTEGER                                                  <<06663>>05695000
         BPT'OBJ0 = BPT'OBJ,                                   <<06663>>05700000
         BPT'OBJ1 = BPT'OBJ + 1;                               <<06663>>05705000
          INTEGER  LOC,SINSTR,INDEX;                           <<00821>>05710000
          << >>                                                         05715000
          IF STOP(LINK)<0 THEN GOTO FIN;                                05720000
          BPT'OBJ0 := STOP(LINK+OBJIDOFFSET);                  <<06663>>05725000
          BPT'OBJ1 := STOP(LINK+OBJIDOFFSET+1);                <<06663>>05730000
          LOC := SEARCHSTOP(IND'ENT1,BPT'OBJ,                  <<06663>>05735000
                           STOP(LINK+PLOCOFFSET),1);           <<01549>>05740000
          TOS := CONVSEGIDTOSTINX (BPT'OBJ);                   <<06663>>05745000
          TOS _ DSTI'(INDEX:=TOS);       <<DESCRIPTOR>>        <<00821>>05750000
          COMMENT:                                             <<00821>>05755000
             IF THE SEGMENT IS PRESENT OR ON THE OVERLAY       <<00821>>05760000
             SELECTION QUEUE THEN UPDATE THE SEGMENT           <<01549>>05765000
             ELSE WE ARE THROUGH.;                             <<01549>>05770000
          IF < AND DSTI'(INDEX+1).ROC=0                        <<01549>>05775000
             THEN IF LOC=0 THEN GOTO FIN ELSE GOTO COPY;       <<00821>>05780000
          TOS:=DSTI'(INDEX+2);                                 <<01549>>05785000
          TOS _ DSTI'(INDEX+3);          <<ADR IN BANK>>       <<00821>>05790000
          TOS _ TOS+STOP(LINK+PLOCOFFSET);<<BASE+PB-REL LOC>>  <<06103>>05795000
          IF LOGICAL(FLAG) THEN                                         05800000
               BEGIN IF LOC=0 THEN                                      05805000
                       BEGIN SUDDENDEATH(199);                          05810000
                             GOTO FIN;                                  05815000
                       END;                                             05820000
                     TOS_STOP(LOC+INSTROFFSET);                <<06103>>05825000
                     SMEM;             <<STORE INSTR>>                  05830000
                     GOTO COPY;                                         05835000
               END ELSE                                                 05840000
               BEGIN LMEM;                                              05845000
                     SINSTR _ TOS;     <<SAVE INSTR>>                   05850000
                     TOS _ BRPT;                                        05855000
                     SMEM;             <<STORE BREAK POINT>>            05860000
                     IF LOC<>0 THEN GOTO COPY;                          05865000
                     TOS _ SINSTR; DUPLICATE;                           05870000
                     IF TOS <> BRPT THEN GOTO SAVE                      05875000
                                  ELSE GOTO FIN;                        05880000
               END;                                                     05885000
  COPY:   TOS_STOP(LOC+INSTROFFSET);                           <<06103>>05890000
  SAVE:   STOP(LINK+INSTROFFSET)_TOS;                          <<06103>>05895000
          STOP(LINK).(3:1)_1;                                           05900000
  FIN:                                                                  05905000
  END;                                                                  05910000
                                                                        05915000
                                                                        05920000
          << >>                                                         05925000
          <<SCAN LINKED SET OF B.P. FOR ENTRY                           05930000
               FLAG  =0 SEARCH TO ENTRY                                 05935000
                     =2 VAL NEW(S VS D)                                 05940000
                     =3 VAL NEW(+D VS D)                                05945000
               SCANSTOP<>0 ENTRY LINK                                   05950000
                        =0 FAILURE                                      05955000
            ASSUME:  DB=BREAKPOINT TABLE                       ((MPEIV))05960000
                     PSEUDODISABLE MODE          >>                     05965000
          << >>                                                         05970000
INTEGER PROCEDURE SCANSTOP(LINK,OBJ,PLOC,FLAG);                <<06663>>05975000
  VALUE   LINK,OBJ,PLOC,FLAG;                                  <<06663>>05980000
  INTEGER LINK,PLOC,FLAG;                                      <<06663>>05985000
  DOUBLE  OBJ;                                                 <<06663>>05990000
  OPTION  UNCALLABLE,PRIVILEGED,INTERNAL;                               05995000
  BEGIN                                                                 06000000
   DOUBLE BPT'OBJ;     << OBJID FROM BREAK POINT TABLE >>      <<06663>>06005000
   INTEGER                                                     <<06663>>06010000
      BPT'OBJ0  = BPT'OBJ,                                     <<06663>>06015000
      BPT'OBJ1  = BPT'OBJ + 1;                                 <<06663>>06020000
                                                               <<06663>>06025000
          INTEGER NEXTLINK;                                    <<01549>>06030000
          << >>                                                         06035000
          WHILE LINK <> 0 DO                                   <<01549>>06040000
             BEGIN                                             <<01549>>06045000
             NEXTLINK := STOP(LINK+LINKOFFSET);                <<01549>>06050000
             BPT'OBJ0 := STOP(LINK+OBJIDOFFSET);               <<06663>>06055000
             BPT'OBJ1 := STOP(LINK+OBJIDOFFSET+1);             <<06663>>06060000
             IF BPT'OBJ = OBJ AND                              <<06663>>06065000
                TESTPSTOP(LINK,PLOC,FLAG)                      <<01549>>06070000
             THEN                                              <<01549>>06075000
                BEGIN                                          <<01549>>06080000
                SCANSTOP := LINK;                              <<01549>>06085000
                LINK := 0;                                     <<01549>>06090000
                END                                            <<01549>>06095000
             ELSE LINK := NEXTLINK;                            <<01549>>06100000
             END;                                              <<01549>>06105000
  END;                                                                  06110000
                                                                        06115000
                                                                        06120000
          << >>                                                         06125000
          <<TEST VALIDITY OF ILLEGAL INSTR TRAP                         06130000
               CCE   = VALID                                            06135000
               CCG   =OTHER PROCESS(RESET IT)                           06140000
               CCL   =ILLEGAL                                           06145000
            IF CCE THEN                                                 06150000
               TESTSTOP   =CONTROL FLAGS OF ENTRY      >>      <<01549>>06155000
          << >>                                                         06160000
DOUBLE PROCEDURE TESTSTOP(OBJ,PLOC,PINX);                      <<07319>>06165000
  VALUE     OBJ,PLOC,PINX;                                     <<06663>>06170000
  INTEGER   PLOC,PINX;                                         <<06663>>06175000
  DOUBLE    OBJ;                                               <<06663>>06180000
  OPTION    UNCALLABLE,PRIVILEGED;                                      06185000
  BEGIN                                                                 06190000
          INTEGER DB'STATE;  << DB STATE UPON ENTRY >>         <<01549>>06195000
          LOGICAL XDS;                                         <<01549>>06200000
          DOUBLE ORIG'DB;                                      <<01549>>06205000
          INTEGER RESULT1 = TESTSTOP;                          <<07319>>06210000
          INTEGER RESULT2 = TESTSTOP+1;                        <<07319>>06215000
          << >>                                                         06220000
          PDISABLE;                                                     06225000
          IF NOT BKPT'TAB'LOCKED THEN                          <<01549>>06230000
             BEGIN << TABLE EMPTY >>                           <<01549>>06235000
             STATUS.CCFLD := CCL;                              <<01549>>06240000
             PENABLE;                                          <<01549>>06245000
             RETURN;                                           <<01549>>06250000
             END;                                              <<01549>>06255000
          TOS_0;                                                        06260000
          << SET DB TO BREAK POINT TABLE >>                    <<01549>>06265000
          SET'DB'DSEG (0,0,0D,DEBUGDST);                       <<01549>>06270000
          << ORIGNAL DB STATE LEFT ON TOS >>                   <<01549>>06275000
          ORIG'DB := TOS;                                      <<01549>>06280000
          XDS := TOS;                                          <<01549>>06285000
          DB'STATE := TOS;                                     <<01549>>06290000
          << GET PCB BREAKPOINT EXT. INDEX >>                  <<01549>>06295000
          X := PCBI'(PINX+bptlinkwordnum);                     <<06671>>06300000
          IF X <> 0 THEN                                       <<01549>>06305000
             BEGIN << PROCESS HAS BREAKPOINTS >>               <<01549>>06310000
             X := SCANSTOP(STOP(X),OBJ,PLOC,0);                <<06663>>06315000
             IF <> THEN GOTO OK; << FOUND IT >>                <<01549>>06320000
             END;                                              <<01549>>06325000
          << SEARCH SYSTEM LIST >>                             <<01549>>06330000
          X _ SCANSTOP(STOP(SYS'BKPT'EXT'X),OBJ,PLOC,0);       <<06663>>06335000
          IF <> THEN GOTO OK;                                           06340000
          << NOW SEARCH ENTIRE TABLE >>                        <<01549>>06345000
          X _ SEARCHSTOP(IND'ENT1,OBJ,PLOC,0);                 <<06663>>06350000
          IF = THEN GOTO ERR;                                           06355000
          << REPLACE BREAKPOINT WITH INSTRUCTION >>            <<01549>>06360000
          MANAGESTOP(X,1,PINX);                                         06365000
          TOS_CCG;                                                      06370000
          GOTO FIN;                                                     06375000
  OK:     RESULT1:=STOP(X);                                    <<07319>>06380000
          RESULT2:=STOP(X+1);                                  <<07319>>06385000
          TOS_CCE;                                                      06390000
          GOTO FIN;                                                     06395000
  ERR:    TOS_CCL;                                                      06400000
  FIN:    STATUS.CCFLD _ TOS;                                           06405000
          EXCHANGEDB (0);                                      <<01549>>06410000
          SET'DB (DB'STATE,XDS,ORIG'DB);                       <<01549>>06415000
          PENABLE;                                                      06420000
  END;                                                                  06425000
                                                               <<01069>>06430000
                                                               <<01069>>06435000
          << >>                                                <<01069>>06440000
          <<TEST WHETHER BREAK PNT IS THE                               06445000
            REQUESTED TRAP TYPE                                         06450000
                                                                        06455000
              LINK     INDEX OF ENTRY                                   06460000
              TRAP     = 0 --> ANY TRAP                                 06465000
                       = 1 --> USER TRAP ONLY                           06470000
                       = 2 --> DEBUG TRAP ONLY                          06475000
                       = @DEBUG --> NON-USER TRAP                       06480000
                       = @LABEL --> USER TRAP THIS                      06485000
                                    LABEL ONLY                          06490000
              RETURNS:                                                  06495000
                       TRUE:  IF MATCH                                  06500000
                       FALSE: NO MATCH                                  06505000
          >>                                                   <<01069>>06510000
          << >>                                                <<01069>>06515000
LOGICAL PROCEDURE TRAP'MATCH(LINK,TRAP);                       <<01069>>06520000
  VALUE     LINK,TRAP;                                         <<01069>>06525000
  INTEGER   LINK,TRAP;                                         <<01069>>06530000
  OPTION    UNCALLABLE,PRIVILEGED;                             <<01069>>06535000
  BEGIN                                                        <<01069>>06540000
          DEFINE                                               <<01069>>06545000
             ANY'TRAP      = 0 #,                              <<01069>>06550000
             ANY'USERTRAP  = 1 #,                              <<01069>>06555000
             ANY'DEBUGTRAP = 2 #;                                       06560000
          << >>                                                <<01069>>06565000
          TRAP'MATCH := FALSE;                                 <<01069>>06570000
                                                               <<01069>>06575000
          IF TRAP = ANY'TRAP THEN TRAP'MATCH := TRUE           <<01069>>06580000
          ELSE IF TRAP=@DEBUG OR TRAP=ANY'DEBUGTRAP THEN       <<01069>>06585000
             BEGIN                                             <<01549>>06590000
             IF STOP(LINK).BKPT'USERLBL = 0 THEN               <<01549>>06595000
                TRAP'MATCH := TRUE;                            <<01549>>06600000
             END                                               <<01069>>06605000
          ELSE                                                 <<01069>>06610000
             BEGIN << CHECK FOR USER TRAP >>                   <<01069>>06615000
             IF STOP(LINK).BKPT'USERLBL = 1 AND                <<01549>>06620000
                (TRAP=ANY'USERTRAP OR                          <<01069>>06625000
                 TRAP=STOP(LINK+USERLBLOFFSET))                <<06103>>06630000
             THEN TRAP'MATCH := TRUE;                          <<01069>>06635000
             END;                                              <<01069>>06640000
  END;                                                         <<01069>>06645000
                                                               <<01549>>06650000
          << >>                                                <<01549>>06655000
          << THIS ROUTINE CHECKS WHETHER THE ADDRESS IS WITHIN ((MPEIV))06660000
             'BOUNDS' OF THE SPECIFIED SEG/BANK. THE 'BOUNDS' FOR       06665000
             A STAK ARE DEPENDENT ON WHETHER OR NOT PRIV IS TRUE.       06670000
                                                               ((MPEIV))06675000
             PARAMETERS:                                       ((MPEIV))06680000
                BASETYPE:  DA'SEG                              ((MPEIV))06685000
                           STAK'SEG                            ((MPEIV))06690000
                           ABS'ADDR (BANK)                     ((MPEIV))06695000
                BASE:      SEG NUMBER (DA'SEG/STAK'SEG)        ((MPEIV))06700000
                           BANK NUMBER (BANK)                  ((MPEIV))06705000
                OFFSET:    DB REL. OFFSET (DA'SEG/STAK'SEG)    ((MPEIV))06710000
                           BANK ADDRESS                        ((MPEIV))06715000
                REGINFO:   Q-REL. OFFSET OF CALLER TO          ((MPEIV))06720000
                           DEBUGS ARRAY 'REG'                  ((MPEIV))06725000
                PRIV:      ASSUME PRIV CAP. WHEN VALIDATING    ((MPEIV))06730000
                                                               ((MPEIV))06735000
             RETURNS:                                          ((MPEIV))06740000
                TRUE:      OK                                  ((MPEIV))06745000
                FALSE:     NOT VALID                           ((MPEIV))06750000
          >>                                                   <<01549>>06755000
          << >>                                                <<01549>>06760000
LOGICAL PROCEDURE CHECKADDRESS(BASETYPE,BASE,OFFSET,PRIV,      <<01549>>06765000
                               REGINFO);                       <<01549>>06770000
  VALUE   BASETYPE,BASE,OFFSET,REGINFO,PRIV;                   <<01549>>06775000
  INTEGER BASETYPE,BASE,OFFSET,REGINFO;                        <<01549>>06780000
  LOGICAL PRIV;                                                <<01549>>06785000
  OPTION  UNCALLABLE,PRIVILEGED;                               <<01549>>06790000
  BEGIN                                                        <<01549>>06795000
          INTEGER                                              <<01549>>06800000
             UPBOUND;                                          <<01549>>06805000
          << >>                                                <<01549>>06810000
          << GET Q-REL LOC OF REGINFO >>                       <<01549>>06815000
          REGINFO := REGINFO - DELTAQ;                         <<01549>>06820000
                                                               <<01549>>06825000
          IF BASETYPE = STAK'SEG AND PRIV THEN                 <<01549>>06830000
             BEGIN                                             <<01549>>06835000
             << PRIV --> RANGE = ENTIRE SEG >>                 <<01549>>06840000
             << CHANGE OFFSET TO 0 RELATIVE >>                 <<01549>>06845000
             << OFFSET.  GET PCBX SIZE      >>                 <<01549>>06850000
             TOS := DSTI'(BASE*4+2);                           <<01549>>06855000
             TOS := DSTI'(X+1)+1;                              <<01549>>06860000
             LMEM;                                             <<01549>>06865000
             OFFSET := OFFSET + TOS;                           <<01549>>06870000
             BASETYPE := DA'SEG;                               <<01549>>06875000
             END;                                              <<01549>>06880000
                                                               <<01549>>06885000
         CHECKADDRESS := FALSE;                                <<01549>>06890000
         IF BASETYPE = STAK'SEG THEN                           <<01549>>06895000
            BEGIN  << MUST BE BETWEEN DL/DS >>                 <<01549>>06900000
            IF AQ0(REGINFO+REGDL) <= OFFSET <=                 <<01549>>06905000
               AQ0(REGINFO+REGS)                               <<01549>>06910000
            THEN CHECKADDRESS := TRUE;                         <<01549>>06915000
            END                                                <<01549>>06920000
         ELSE IF BASETYPE = DA'SEG THEN                        <<01549>>06925000
            BEGIN  << DATA SEG SIZE <= 32 K >>                 <<01549>>06930000
            UPBOUND := (DSTI'(BASE*4).DST'LENFLD) & LSL(2) - 1;<<01549>>06935000
            IF  0 <= OFFSET <= UPBOUND                         <<01549>>06940000
            THEN CHECKADDRESS := TRUE;                         <<01549>>06945000
            END                                                <<01549>>06950000
         ELSE                                                  <<01549>>06955000
            BEGIN  << BANK SIZE <= 64 K >>                     <<01549>>06960000
            << LAST BANK MAY BE 1/2 BANK >>                    <<01549>>06965000
            IF BASE <> LASTBANK OR                             <<01549>>06970000
               LOGICAL(OFFSET) <= LASTADDR                     <<01549>>06975000
            THEN CHECKADDRESS := TRUE;                         <<01549>>06980000
            END;                                               <<01549>>06985000
                                                               <<01549>>06990000
                                                               <<01549>>06995000
  END;                                                         <<01549>>07000000
          << >>                                                <<01549>>07005000
          << THIS ROUTINE TRANSLATE THE OPERAND AT             ((MPEIV))07010000
             STOP(LINK) TO A BASE AND OFFSET.                  ((MPEIV))07015000
                                                               ((MPEIV))07020000
             PARAMETERS:                                       ((MPEIV))07025000
                LINK:     INDEX OF OPERAND IN BKPT TAB         ((MPEIV))07030000
                REGINFO:  Q-REL OFFSET OF CALLER TO            ((MPEIV))07035000
                          DEBUGS ARRAY 'REG'                   ((MPEIV))07040000
                                                               ((MPEIV))07045000
             RETURNS:     0N TOS-- S3/S0 ARE AS FOLLOW:        ((MPEIV))07050000
                TYPE:     STAK'SEG                             ((MPEIV))07055000
                (S3)      DA'SEG                               ((MPEIV))07060000
                          ABS'ADDR                             ((MPEIV))07065000
                                                               ((MPEIV))07070000
                BASE:     SEG NUMBER (DA'SEG/STAK'SEG)         ((MPEIV))07075000
                (S2)      BANK NUMBER  (ABS'ADDR)              ((MPEIV))07080000
                                                               ((MPEIV))07085000
                BASEADDR: DB'S OFFSET TO BASE STAK (STAK'SEG/DA'SEG)    07090000
                (S1)      OFFSET FROM BANK BASE (ABS'ADDR)     ((MPEIV))07095000
                                                               ((MPEIV))07100000
                OFFSET:   DB-REL OFFSET FOR DA'SEG/STAK'SEG    ((MPEIV))07105000
                (S0)      BASE REL. ADDRESS FOR ABS'ADDR       ((MPEIV))07110000
                                                               ((MPEIV))07115000
             ASSUMES:                                          ((MPEIV))07120000
                          DB AT BREAKPOINT TABLE               ((MPEIV))07125000
                          PDISABLED                            ((MPEIV))07130000
                                                               ((MPEIV))07135000
          >>                                                   <<01549>>07140000
          << >>                                                <<01549>>07145000
PROCEDURE TRANSLATE (TYPE,BASE,BASEADDR,OFFSET,LINK,REGINFO);  <<01549>>07150000
  VALUE   TYPE,BASE,BASEADDR,OFFSET,LINK,REGINFO;              <<01549>>07155000
  INTEGER TYPE,BASE,BASEADDR,OFFSET,LINK,REGINFO;              <<01549>>07160000
  OPTION  PRIVILEGED, UNCALLABLE;                              <<01549>>07165000
  BEGIN                                                        <<01549>>07170000
          EQUATE                                               <<01549>>07175000
             NUMPARM = 2;  << LINK & REGINFO >>                <<01549>>07180000
          INTEGER                                              <<01549>>07185000
             REGTYPE;                                          <<01549>>07190000
          << >>                                                <<01549>>07195000
          << GET Q-REL LOC OF REGINFO >>                       <<01549>>07200000
          REGINFO := REGINFO-DELTAQ;                           <<01549>>07205000
          OFFSET := STOP(LINK+1);                              <<01549>>07210000
          REGTYPE := STOP(LINK).BKPT'REG;                      <<01549>>07215000
                                                               <<01549>>07220000
          IF REGTYPE = REGDX AND AQ0(REGINFO+REGDX) = 0        <<01549>>07225000
          THEN REGTYPE := REGDB;  << DB AT STAK >>             <<01549>>07230000
                                                               <<01549>>07235000
          IF REGTYPE = REGDX THEN                              <<01549>>07240000
             BEGIN  << ABSOLUTE DB >>                          <<01549>>07245000
             IF AQ0(REGINFO+REGDX) = 1 THEN                    <<01549>>07250000
                BEGIN << XCHG DB >>                            <<01549>>07255000
                TYPE := DA'SEG;                                <<01549>>07260000
                BASE := AQ0(REGINFO+REGDBX);                   <<01549>>07265000
                BASEADDR := 0;                                 <<01549>>07270000
                END                                            <<01549>>07275000
             ELSE                                              <<01549>>07280000
                BEGIN << SET DB >>                             <<01549>>07285000
                TYPE := ABS'ADDR;                              <<01549>>07290000
                BASE := AQ0(REGINFO+REGBNK);                   <<01549>>07295000
                BASEADDR := AQ0(REGINFO+REGDBV);               <<01549>>07300000
                END                                            <<01549>>07305000
             END                                               <<01549>>07310000
          ELSE IF REGTYPE = REGEA OR REGTYPE =REGA THEN        <<01549>>07315000
             BEGIN                                             <<01549>>07320000
             TYPE := ABS'ADDR;                                 <<01549>>07325000
             BASE := STOP(LINK).BKPT'BASE;                     <<01549>>07330000
             BASEADDR := 0;                                    <<01549>>07335000
             END                                               <<01549>>07340000
          ELSE IF REGTYPE = REGSY THEN                         <<01549>>07345000
             BEGIN                                             <<01549>>07350000
             TYPE := ABS'ADDR;                                 <<01549>>07355000
             BASE := STOP(LINK).BKPT'BASE;                     <<01549>>07360000
             BASEADDR := %1000;                                <<01549>>07365000
             END                                               <<01549>>07370000
          ELSE IF REGTYPE = REGDA THEN                         <<01549>>07375000
             BEGIN                                             <<01549>>07380000
             TYPE := DA'SEG;                                   <<01549>>07385000
             BASE := STOP(LINK).BKPT'BASE;                     <<01549>>07390000
             BASEADDR := 0;                                    <<01549>>07395000
             END                                               <<01549>>07400000
          ELSE IF REGDB <= REGTYPE <= REGS THEN                <<01549>>07405000
             BEGIN                                             <<01549>>07410000
             TYPE := STAK'SEG;                                 <<01549>>07415000
             BASE := AQ0(REGINFO+REGDB);                       <<01549>>07420000
             << GET DB REL. OFFSET TO BASE OF STAK >>          <<01549>>07425000
             TOS := DSTI'(BASE&LSL(2)+2);                      <<01549>>07430000
             TOS := DSTI'(X+1)+1;                              <<01549>>07435000
             LMEM; << GET DB-A >>                              <<01549>>07440000
             BASEADDR := TOS; DDEL;                            <<01549>>07445000
             << CHANGE REG OFFSET TO DB REL OFFSET >>          <<01549>>07450000
             IF REGTYPE <> REGDB THEN                          <<01549>>07455000
                OFFSET := OFFSET+AQ0(REGINFO+REGTYPE);         <<01549>>07460000
             END;                                              <<01549>>07465000
                                                               <<01549>>07470000
             << LEAVE TYPE, BASE, BASEADDR, OFFSET ON STAK >>  <<01549>>07475000
                                                               <<01549>>07480000
          RETURN NUMPARM;                                      <<01549>>07485000
  END;                                                         <<01549>>07490000
          << >>                                                <<01549>>07495000
          << THIS PROCEDURE RETRIEVES THE OPERAND WHOSE        ((MPEIV))07500000
             ADDRESS OR VALUE IS AT STOP(LINK).                ((MPEIV))07505000
                                                               ((MPEIV))07510000
             PARAMETERS:                                       ((MPEIV))07515000
                LINK:     INDEX OF OPERAND                     ((MPEIV))07520000
                INFO:     DESCRIPTOR OF OPERAND:               ((MPEIV))07525000
                             (15:1) = 0  CONSTANT              ((MPEIV))07530000
                                      1  ADDRESS               ((MPEIV))07535000
                             (14:1) = 0  NO INDIRECTION        ((MPEIV))07540000
                                      1  IND. ADDRESS          ((MPEIV))07545000
                PRIV:     ASSUME PRIV CAP WHEN GETTING OP.     ((MPEIV))07550000
                REGINFO:  Q-REL OFFSET OF CALLER TO DEBUGS     ((MPEIV))07555000
                          ARRAY 'REG'                          ((MPEIV))07560000
                                                               ((MPEIV))07565000
             RETURNS      ON TOS -- S1/S0                      ((MPEIV))07570000
                RESULT:   GOT'OPERAND                          ((MPEIV))07575000
                (S1)      BOUNDSV   (BOUNDS VIOLATION)         ((MPEIV))07580000
                          NOT'INCORE                           ((MPEIV))07585000
                OPERAND:  THE OPERAND                          ((MPEIV))07590000
                (S0)                                           ((MPEIV))07595000
                                                               ((MPEIV))07600000
             ASSUMES:                                          ((MPEIV))07605000
                          DB AT BREAKPOINT TABLE               ((MPEIV))07610000
                          PDISABLED                            ((MPEIV))07615000
          >>                                                   <<01549>>07620000
          << >>                                                <<01549>>07625000
PROCEDURE GETOPERAND (RESULT,OPERAND,LINK,INFO,PRIV,REGINFO);  <<01549>>07630000
  VALUE   RESULT,OPERAND,LINK,INFO,PRIV,REGINFO;               <<01549>>07635000
  INTEGER RESULT,OPERAND,LINK,INFO,REGINFO;                    <<01549>>07640000
  LOGICAL PRIV;                                                <<01549>>07645000
  OPTION  PRIVILEGED,UNCALLABLE;                               <<01549>>07650000
  BEGIN                                                        <<01549>>07655000
          EQUATE                                               <<01549>>07660000
             NUMPARM   = 4,<< LEAVE RESULT & OPERAND ON STAK >><<01549>>07665000
             ADDR'OPER = 1;                                    <<01549>>07670000
          DEFINE                                               <<01549>>07675000
             IND'BITS  = (14:1)#,                              <<01549>>07680000
             OPTYPE    = (15:1)#;                              <<01549>>07685000
          INTEGER                                              <<01549>>07690000
             TYPE,                                             <<01549>>07695000
             BASE,                                             <<01549>>07700000
             BASEADDR,                                         <<01549>>07705000
             OFFSET,                                           <<01549>>07710000
             INDIRECT;                                         <<01549>>07715000
          << >>                                                <<01549>>07720000
          << GET Q-REL ADDRESS OF REGINFO >>                   <<01549>>07725000
          REGINFO := REGINFO - DELTAQ;                         <<01549>>07730000
          INDIRECT := INFO.IND'BITS;                           <<01549>>07735000
                                                               <<01549>>07740000
          IF INFO.OPTYPE = ADDR'OPER THEN                      <<01549>>07745000
             BEGIN                                             <<01549>>07750000
             TRANSLATE (0,0,0,0,LINK,REGINFO);                 <<01549>>07755000
             << SAVE RESULTS OF TRANSLATE >>                   <<01549>>07760000
             OFFSET := TOS;                                    <<01549>>07765000
             BASEADDR := TOS;                                  <<01549>>07770000
             BASE := TOS;                                      <<01549>>07775000
             TYPE := TOS;                                      <<01549>>07780000
                                                               <<01549>>07785000
             DO                                                <<01549>>07790000
                BEGIN << GO GET IT >>                          <<01549>>07795000
                IF NOT CHECKADDRESS (TYPE,BASE,OFFSET,         <<01549>>07800000
                                     PRIV,REGINFO) THEN        <<01549>>07805000
                   BEGIN                                       <<01549>>07810000
                   RESULT := BOUNDSV;                          <<01549>>07815000
                   RETURN NUMPARM;                             <<01549>>07820000
                   END                                         <<01549>>07825000
                ELSE IF TYPE = DA'SEG AND                      <<01549>>07830000
                        DSTI'(BASE*4) < 0 THEN                 <<01549>>07835000
                   BEGIN                                       <<01549>>07840000
                   RESULT := NOT'INCORE;                       <<01549>>07845000
                   RETURN NUMPARM;                             <<01549>>07850000
                   END                                         <<01549>>07855000
                ELSE                                           <<01549>>07860000
                   BEGIN                                       <<01549>>07865000
                   << EVERYTHING OK, GO GET IT. >>             <<01549>>07870000
                   << SET UP FOR 'LSEA'         >>             <<01549>>07875000
                   IF TYPE = DA'SEG OR TYPE = STAK'SEG THEN    <<01549>>07880000
                      BEGIN                                    <<01549>>07885000
                      TOS := DSTI'(BASE&LSL(2)+2);             <<01549>>07890000
                      TOS := DSTI'(X+1) + BASEADDR + OFFSET;   <<01549>>07895000
                      END                                      <<01549>>07900000
                   ELSE IF TYPE = ABS'ADDR THEN                <<01549>>07905000
                      BEGIN                                    <<01549>>07910000
                      TOS := BASE;                             <<01549>>07915000
                      TOS := BASEADDR + OFFSET;                <<01549>>07920000
                      END;                                     <<01549>>07925000
                   LMEM;                                       <<01549>>07930000
                   OPERAND := TOS; DDEL;                       <<01549>>07935000
                                                               <<01549>>07940000
                   IF INDIRECT > 0 THEN                        <<01549>>07945000
                      OFFSET := OPERAND+STOP(LINK+1+INDIRECT); <<01549>>07950000
                   INDIRECT := INDIRECT - 1;                   <<01549>>07955000
                   END;                                        <<01549>>07960000
                END                                            <<01549>>07965000
             UNTIL INDIRECT < 0;                               <<01549>>07970000
             RESULT := GOT'OPERAND;                            <<01549>>07975000
             END                                               <<01549>>07980000
          ELSE << CONSTANT >>                                  <<01549>>07985000
             BEGIN                                             <<01549>>07990000
             OPERAND := STOP(LINK);                            <<01549>>07995000
             RESULT := GOT'OPERAND;                            <<01549>>08000000
             END;                                              <<01549>>08005000
                                                               <<01549>>08010000
          RETURN NUMPARM;                                      <<01549>>08015000
  END;                                                         <<01549>>08020000
          << >>                                                <<01549>>08025000
          << THIS PROCEDURE TESTS THE CONDITION WHOSE          ((MPEIV))08030000
             STAK BASE IS AT STOP(LINK). IT ALSO UPDATES       ((MPEIV))08035000
             THE CONDITION IF NEEDED (EG. FOR COUNTS).         ((MPEIV))08040000
                                                               ((MPEIV))08045000
             PARAMETERS:                                       ((MPEIV))08050000
                LINK:     INDEX OF BASE OF CONDITION STAK      ((MPEIV))08055000
                PRIV:     ASSUME PRIV CAP. WHEN CHECKING COND  ((MPEIV))08060000
                REGINFO:  Q-REL OFFSET OF CALLER TO DEBUG'S    ((MPEIV))08065000
                          ARRAY REG                            ((MPEIV))08070000
                                                               ((MPEIV))08075000
             RETURNS:                                          ((MPEIV))08080000
                0:        COND'TRUE                            ((MPEIV))08085000
                1:        COND'FASLE                           ((MPEIV))08090000
                2:        UNABLETESTCOND                       ((MPEIV))08095000
                                                               ((MPEIV))08100000
             ASSUMES:                                          ((MPEIV))08105000
                          DB AT BREAKPOINT TABLE               ((MPEIV))08110000
                          ENTER PDISABLED                      ((MPEIV))08115000
          >>                                                   <<01549>>08120000
          << >>                                                <<01549>>08125000
INTEGER PROCEDURE PROCESS'CONDITION (LINK,PRIV,REGINFO);       <<01549>>08130000
  VALUE   LINK,PRIV,REGINFO;                                   <<01549>>08135000
  INTEGER LINK,REGINFO;                                        <<01549>>08140000
  LOGICAL PRIV;                                                <<01549>>08145000
  OPTION  UNCALLABLE,PRIVILEGED;                               <<01549>>08150000
  BEGIN                                                        <<01549>>08155000
          INTEGER                                              <<01549>>08160000
             OP1,                                              <<01549>>08165000
             OP2,                                              <<01549>>08170000
             RELOP,                                            <<01549>>08175000
             RESULT = PROCESS'CONDITION;                       <<01549>>08180000
          << >>                                                <<01549>>08185000
          << GET Q-REL OFFSET OF 'REG' >>                      <<01549>>08190000
          REGINFO := REGINFO - DELTAQ;                         <<01549>>08195000
                                                               <<01549>>08200000
          << CONDITION IS EITHER A COUNT >>                    <<01549>>08205000
          << OR A TEST OF A LOCATION     >>                    <<01549>>08210000
          IF STOP(LINK).BKPT'CONDTYPE = T'NUMBER THEN          <<01549>>08215000
             BEGIN << COUNT >>                                 <<01549>>08220000
             STOP(LINK-1) := STOP(LINK-1)+1; <<UPDATE CNT>>    <<01549>>08225000
             IF STOP(LINK-1) = STOP(LINK-2) THEN               <<01549>>08230000
                BEGIN << COND TRUE >>                          <<01549>>08235000
                STOP(LINK-1) := 0; <<REINITIALIZE>>            <<01549>>08240000
                RESULT := COND'TRUE;                           <<01549>>08245000
                END                                            <<01549>>08250000
             ELSE RESULT := COND'FALSE;                        <<01549>>08255000
             END                                               <<01549>>08260000
          ELSE                                                 <<01549>>08265000
             BEGIN                                             <<01549>>08270000
             << GET OPERANDS >>                                <<01549>>08275000
             GETOPERAND (0,0,LINKOP1,STOP(LINK).BKPT'OP1INFO,  <<01549>>08280000
                         PRIV,REGINFO);                        <<01549>>08285000
             OP1 := TOS; << SAVE RESULTS >>                    <<01549>>08290000
             RESULT := TOS;                                    <<01549>>08295000
             IF RESULT <> GOT'OPERAND THEN RETURN;             <<01549>>08300000
             GETOPERAND (0,0,LINKOP2,STOP(LINK).BKPT'OP2INFO,  <<01549>>08305000
                         PRIV,REGINFO);                        <<01549>>08310000
             OP2 := TOS;                                       <<01549>>08315000
             RESULT := TOS;                                    <<01549>>08320000
             IF RESULT <> GOT'OPERAND THEN RETURN;             <<01549>>08325000
                                                               <<01549>>08330000
             << TEST CONDITION >>                              <<01549>>08335000
             RESULT := COND'FALSE;                             <<01549>>08340000
             RELOP := STOP(LINK).BKPT'CONDTYPE;                <<01549>>08345000
                                                               <<01549>>08350000
             IF (OP1>OP2) AND (RELOP=T'GT OR RELOP=T'GTE       <<01549>>08355000
                OR RELOP=T'NEQ) THEN RESULT := COND'TRUE       <<01549>>08360000
             ELSE IF (OP1<OP2) AND (RELOP=T'LT OR RELOP=T'LTE  <<01549>>08365000
                OR RELOP=T'NEQ) THEN RESULT := COND'TRUE       <<01549>>08370000
             ELSE IF (OP1=OP2) AND (RELOP=T'EQ OR RELOP=T'LTE  <<01549>>08375000
                OR RELOP=T'GTE) THEN RESULT := COND'TRUE;      <<01549>>08380000
             END;                                              <<01549>>08385000
                                                               <<01549>>08390000
  END;                                                         <<01549>>08395000
                                                               <<01549>>08400000
          comment                                              <<06671>>08405000
          REMOVE B.P. AND DELETE ENTRY                         <<06671>>08410000
               FLAGS          .(0:1)=1                         <<06671>>08415000
                              .(2:1)=1 PROCESS LOCAL BRKPNT    <<06671>>08420000
                                    =0 SYSTEM BREAK POINT      ((MPEIV))08425000
                                                               <<06671>>08430000
               pinn                                            <<06671>>08435000
               DEBUGID    = 0 ALL SEGMENT                      ((*MAP*))08440000
                          <> 0 SEGMENT (DEFINITION IN 642.01)  ((*MAP*))08445000
               PLOC       >=0 LOCATION                         ((MPEIV))08450000
                          <0  ALL LOCATIONS                    ((MPEIV))08455000
                                                               ((MPEIV))08460000
               REGINFO    ARRAY CONTAINING LOCATION OF         ((MPEIV))08465000
                          REGISTERS WHEN BREAKPOINT HIT        ((MPEIV))08470000
                          (REQUIRED IF SW=1)                   ((*MAP*))08475000
                                                               ((MPEIV))08480000
               PLABEL     = 0 REMOVE ALL BRK PNT               ((MPEIV))08485000
                              IN GIVEN RANGE (DEFAULT)         ((MPEIV))08490000
                          = 1 REMOVE USER TRAPS ONLY           ((MPEIV))08495000
                              (IN GIVEN RANGE)                 ((MPEIV))08500000
                          = 2 REMOVE DEBUG TRAPS ONLY          ((MPEIV))08505000
                          = @LABEL:  REMOVE ONLY IF            ((MPEIV))08510000
                              TRAP LABELS MATCH                ((MPEIV))08515000
                          = @DEBUG:  REMOVE NON-USER           ((MPEIV))08520000
                              TRAPS ONLY                       ((MPEIV))08525000
                          (MEANINGFULL ONLY WHEN CLEARING     )((MPEIV))08530000
                          (BREAKPOINT (SW=0). OPTIONAL )       ((*MAP*))08535000
                          (THIS PARM. IS ALSO USED FOR A      )((MPEIV))08540000
                          (RETURNED VALUE -- SEE BELOW        )((MPEIV))08545000
                                                               ((MPEIV))08550000
               RETURNS:                                        ((MPEIV))08555000
               REMOVESTOP =0 OK                                ((MPEIV))08560000
                           1 INVALID PIN                       ((MPEIV))08565000
                           2 INVALID SEG                       ((MPEIV))08570000
                                                               ((MPEIV))08575000
               XREG       SET IF HIT BREAKPOINT (SW=1).        ((*MAP*))08580000
                          X = 0 NOT YET                        ((MPEIV))08585000
                            = 1 BREAK COND. TRUE               ((MPEIV))08590000
                            = 2 BREAK USER TRAP                ((MPEIV))08595000
               PLABEL     USER TRAP LABEL WHEN X=2             ((MPEIV))08600000
                          REGUIRED WHEN SW = 1                 ((*MAP*))08605000
               PLABELMODE USER LABEL MODE.                     ((*MAP*))08610000
                                                               ((MPEIV))08615000
               ASSUMES:    PENABLED UPON ENTRY                 ((MPEIV))08620000
                                                               <<06671>>08625000
          ;  << end comment >>                                 <<06671>>08630000
INTEGER PROCEDURE REMOVESTOP(FLAGS,PINN,DEBUGID,PLOC,          <<06671>>08635000
                             REGINFO,PLABEL,PLABELMODE);       <<06103>>08640000
  VALUE FLAGS,PINN,DEBUGID,PLOC;                               <<06671>>08645000
  INTEGER FLAGS,PINN,PLOC,PLABEL,PLABELMODE;                   <<06671>>08650000
   DOUBLE DEBUGID;                                             <<06103>>08655000
  INTEGER   ARRAY REGINFO;                                     <<01549>>08660000
  OPTION    UNCALLABLE,PRIVILEGED,VARIABLE;                    <<01549>>08665000
  BEGIN                                                        <<01549>>08670000
          DEBUGIDDEF;                                          <<06103>>08675000
   DOUBLE BPT'OBJ;   << OBJID FROM BREAK POINT TABLE >>        <<06663>>08680000
   INTEGER                                                     <<06663>>08685000
      BPT'OBJ0 = BPT'OBJ,                                      <<06663>>08690000
      BPT'OBJ1 = BPT'OBJ + 1;                                  <<06663>>08695000
                                                               <<06663>>08700000
          INTEGER PRC,LINK,LINKX,LOC,PINX,INSTR'LEN;           <<06663>>08705000
          DOUBLE OBJ;                                          <<06663>>08710000
          INTEGER RESULT,TEMP,LOC'PLABEL,LOC'REGINFO,EXT'X,I,J;<<01549>>08715000
          INTEGER LOC'MODE,SEG'ID'TYPE';                       <<06103>>08720000
          INTEGER SAVESEGSIR,SAVEBKPTSIR,XREG=Q-3;             <<01549>>08725000
          INTEGER XDS,DB'STATE;                                <<01549>>08730000
          << INTEGERS USED WHEN UNABLE TO PROCESS CONDITION >> <<01549>>08735000
          << DUE TO ABSENT DATA SEG                         >> <<01549>>08740000
          INTEGER OP1BASE,OP2BASE,OP1TYPE,OP2TYPE,OLD'OP1BASE; <<01549>>08745000
          INTEGER OLD'OP2BASE;                                 <<01549>>08750000
          INTEGER OLD'OP1TYPE := STAK'SEG;                     <<01549>>08755000
          INTEGER OLD'OP2TYPE := STAK'SEG;                     <<01549>>08760000
                                                               <<01549>>08765000
          DOUBLE ORIG'DB;                                      <<01549>>08770000
                                                               <<01549>>08775000
          LOGICAL EXCHDB := FALSE,  << EXCH'DB TO BKPT TAB. >> <<01549>>08780000
                  UNLOCK := FALSE;  << UNLOCK BKPT TAB. >>     <<01549>>08785000
          DEFINE                                               <<01549>>08790000
             PLABEL'PASSED = PARMMASK.(14:1) #,                <<06103>>08795000
             REG'PASSED    = PARMMASK.(13:1)#,                 <<06103>>08800000
             LOCALBRKPNT   = LOGICAL(FLAGS.LOCBIT) #,          <<06671>>08805000
             HIT'BRKPNT    = (SW <> 0)#,                       <<06103>>08810000
             CLEAR'BRKPNT  = (SW = 0)#;                        <<06103>>08815000
          EQUATE                                               <<01549>>08820000
             INVALIDPIN  = 1,                                  <<01549>>08825000
             INVALIDSEG  = 2,                                  <<01549>>08830000
             FREEZEDSEG  = %300;                               <<01549>>08835000
          << >>                                                <<01549>>08840000
          LOGICAL SUBROUTINE MATCHENTRY;                       <<01549>>08845000
             BEGIN                                             <<01549>>08850000
             COMMENT:                                          <<01549>>08855000
                THIS ROUTINE DECIDES WHETHER STOP(LINK) IS     <<01549>>08860000
                A REQUESTED ENTRY                              <<01549>>08865000
                ;                                              <<01549>>08870000
             MATCHENTRY := TRUE;                               <<01549>>08875000
             IF CLEAR'BRKPNT AND PLABEL'PASSED AND NOT         <<01549>>08880000
                TRAP'MATCH(LINK,LOC'PLABEL)                    <<01549>>08885000
             THEN MATCHENTRY := FALSE                          <<01549>>08890000
             ELSE IF SEGNR <> 0 THEN                           <<06103>>08895000
                BEGIN << REMOVING FROM PARTICULAR SEG >>       <<01549>>08900000
                BPT'OBJ0 := STOP(LINK+OBJIDOFFSET);            <<06663>>08905000
                BPT'OBJ1 := STOP(LINK+OBJIDOFFSET+1);          <<06663>>08910000
                IF BPT'OBJ <> OBJ THEN                         <<06663>>08915000
                   MATCHENTRY := FALSE                         <<01549>>08920000
                ELSE  << SEGS MATCH, DO PLOCS? >>              <<01549>>08925000
                   BEGIN                                       <<01549>>08930000
                   IF PLOC >= 0 AND NOT TESTPSTOP(LINK,PLOC,2) <<01549>>08935000
                      THEN MATCHENTRY := FALSE;                <<01549>>08940000
                   END;                                        <<01549>>08945000
                END;                                           <<01549>>08950000
             END; << MATCHENTRY >>                             <<01549>>08955000
                                                               <<01549>>08960000
          SUBROUTINE SWITCH'PLOC;                              <<01549>>08965000
             BEGIN                                             <<01549>>08970000
             COMMENT:                                          <<01549>>08975000
                IF THE ENTRY IS A FAKE BKPT. THEN RESET BREAK  <<01549>>08980000
                TO REAL PLOC & VISA VERSA.  THIS ROUTINE CALLS <<01549>>08985000
                MANAGE STOP                                    <<01549>>08990000
                ;                                              <<01549>>08995000
             INSTR'LEN := 1+STOP(LINK).BKPT'TW;                <<01549>>09000000
             IF STOP(LINK).BKPT'FAKE=1 THEN                    <<01549>>09005000
                BEGIN                                          <<01549>>09010000
                STOP(LINK+PLOCOFFSET) := STOP(LINK+PLOCOFFSET)-<<01549>>09015000
                                         INSTR'LEN;            <<01549>>09020000
                STOP(LINK).BKPT'FAKE := 0;                     <<01549>>09025000
                END                                            <<01549>>09030000
             ELSE << SET TO FAKE >>                            <<01549>>09035000
                BEGIN                                          <<01549>>09040000
                STOP(LINK+PLOCOFFSET) := STOP(LINK+PLOCOFFSET)+<<01549>>09045000
                                         INSTR'LEN;            <<01549>>09050000
                STOP(LINK).BKPT'FAKE := 1;                     <<01549>>09055000
                END;                                           <<01549>>09060000
             STOP(LINK).BKPT'VALID := 0;                       <<01549>>09065000
             STOP(LINK).BKPT'UPDATING := 0;<< DONE MODIFYING >><<01549>>09070000
             MANAGESTOP(LINK,0,PINX);                          <<01549>>09075000
                                                               <<01549>>09080000
             END; << SWITCH'PLOC >>                            <<01549>>09085000
                                                               <<01549>>09090000
          SUBROUTINE REMOVE'ENTRY;                             <<01549>>09095000
             BEGIN                                             <<01549>>09100000
             COMMENT:                                          <<01549>>09105000
                THIS ROUTINE REMOVES ENTRY STOP(LINK) FROM     <<01549>>09110000
                THE BREAK POINT CHAIN AND UPDATES THE PCB,     <<01549>>09115000
                PCB EXTENSION IF NEC. THE ENTRY IS RETURNED    <<01549>>09120000
                TO THE FREE LIST                               <<01549>>09125000
                CONVENTION:                                    <<01549>>09130000
                   ENTRY:   LINK IS INDEX OF ENTRY TO BE       <<01549>>09135000
                            REMOVED                            <<01549>>09140000
                   EXIT:    LINK IS INDEX OF NEXT ENTRY IN     <<01549>>09145000
                            CHAIN.                             <<01549>>09150000
                ;                                              <<01549>>09155000
             << REMOVE FROM BKPT CHAIN >>                      <<01549>>09160000
             IF LINKX <> EXT'X THEN                            <<01549>>09165000
                BEGIN << NOT FIRST ITEM IN CHAIN >>            <<01549>>09170000
                STOP(LINKX+LINKOFFSET) :=                      <<01549>>09175000
                   STOP(LINK+LINKOFFSET);                      <<01549>>09180000
                END                                            <<01549>>09185000
             ELSE << 1ST ITEM IN CHAIN >>                      <<01549>>09190000
                BEGIN                                          <<01549>>09195000
                STOP(EXT'X) := STOP(LINK+LINKOFFSET);          <<01549>>09200000
                IF STOP(EXT'X) = 0 THEN                        <<01549>>09205000
                   BEGIN << CHAIN IS EMPTY >>                  <<01549>>09210000
                   IF PRC = 0 THEN SYS'BKPT := 0               <<01549>>09215000
                   ELSE                                        <<01549>>09220000
                      BEGIN                                    <<01549>>09225000
                      PCBI'(PRC) := 0;                         <<06671>>09230000
                      FREE'BKPT'EXT'X (EXT'X);                 <<01549>>09235000
                      END;                                     <<01549>>09240000
                   END;                                        <<01549>>09245000
                END;                                           <<01549>>09250000
             << GET READY TO RETURN TO FREE LIST >>            <<01549>>09255000
             LOC := LINK; << SAVE LINK >>                      <<01549>>09260000
             LINK := STOP(LINK+LINKOFFSET);                    <<01549>>09265000
                                                               <<01549>>09270000
             << RETURN TO FREE LIST >>                         <<01549>>09275000
             IF AVAIL <> 0 THEN                                <<01549>>09280000
                BEGIN  << INSERT BEFORE ENTRY >>               <<01549>>09285000
                       << POINTED TO BY AVAIL >>               <<01549>>09290000
                STOP(LOC+FORWLINK) := AVAIL;                   <<01549>>09295000
                STOP(LOC+BKWLINK) := STOP(AVAIL+BKWLINK);      <<01549>>09300000
                << THE PREDECESSOR OF THE OLD HEAD >>          <<01549>>09305000
                << NOW POINTS TO THE NEW HEAD: LOC >>          <<01549>>09310000
                STOP(STOP(AVAIL+BKWLINK)+FORWLINK) := LOC;     <<01549>>09315000
                << THE OLD HEAD PTS BACK TO LINK >>            <<01549>>09320000
                STOP(AVAIL+BKWLINK) := LOC;                    <<01549>>09325000
                END                                            <<01549>>09330000
             ELSE                                              <<01549>>09335000
                BEGIN << 1ST ENTRY IN LIST >>                  <<01549>>09340000
                STOP(LOC+FORWLINK) :=                          <<01549>>09345000
                   STOP(LOC+BKWLINK) := LOC;                   <<01549>>09350000
                END;                                           <<01549>>09355000
             AVAIL := LOC;                                     <<01549>>09360000
                                                               <<01549>>09365000
             << MARK AS AVAILABLE & ZERO ENTRY >>              <<01549>>09370000
             J := STOP(LOC) := STOP(LOC).BKPT'SIZE;            <<01549>>09375000
             STOP(LOC).BKPT'TAG := 1; << FREE >>               <<01549>>09380000
             I := 2;                                           <<01549>>09385000
             WHILE (I:=I+1) < J DO STOP(LOC+I) := 0;           <<01549>>09390000
             BKPT'WD'USED:=BKPT'WD'USED-J;                     <<06103>>09395000
             END; << REMOVE'ENTRY >>                           <<01549>>09400000
                                                               <<01549>>09405000
          INTEGER SUBROUTINE COND'LINK;                        <<01549>>09410000
             BEGIN                                             <<01549>>09415000
             COMMENT:                                          <<01549>>09420000
                THIS ROUTINE RETURNS THE INDEX OF              <<01549>>09425000
                THE BASE OF THE CONDITION FOR                  <<01549>>09430000
                STOP(LINK)                                     <<01549>>09435000
                ;                                              <<01549>>09440000
             I := LINK + STOP(LINK).BKPT'SIZE -1;              <<01549>>09445000
             WHILE STOP(I) = 0 DO I:=I-1;                      <<01549>>09450000
             COND'LINK := I;                                   <<01549>>09455000
             END; << COND'LINK >>                              <<01549>>09460000
                                                               <<01549>>09465000
          INTEGER SUBROUTINE OPER'LINK (LINK,OPNUM);           <<01549>>09470000
             VALUE LINK,OPNUM;                                 <<01549>>09475000
             INTEGER LINK,OPNUM;                               <<01549>>09480000
             BEGIN                                             <<01549>>09485000
             COMMENT:                                          <<01549>>09490000
                THIS RETURNS THE INDEX OF THE DESIRED          <<01549>>09495000
                OPERAND OF BREAKPNT ENTRY STOP(LINK).          <<01549>>09500000
                OPNUM IS THE OPERAND NUMBER (1 OR 2).          <<01549>>09505000
                ;                                              <<01549>>09510000
             LINK := COND'LINK;                                <<01549>>09515000
             << DEFINES LINKOP1,LINKOP2 KEY OFF OF 'LINK' >>   <<01549>>09520000
             IF OPNUM = 1 THEN OPER'LINK := LINKOP1            <<01549>>09525000
             ELSE OPER'LINK := LINKOP2;                        <<01549>>09530000
             END; << OPER'LINK >>                              <<01549>>09535000
                                                               <<01549>>09540000
          << >>                                                <<01549>>09545000
          COMMENT:                                             <<01549>>09550000
                          ***** WARNING *****                  <<01549>>09555000
             MUCH OF THE CODE OF THIS PROCEDURE IS DUPLICATED  <<01549>>09560000
             IN ENTERSTOP.  THEREFORE, ANY BUGS FOUND IN THIS  <<01549>>09565000
             ROUTINE MAY ALSO EXIST IN ENTERSTOP.              <<01549>>09570000
                                                               <<01549>>09575000
             IF REMOVING BREAKPOINTS FROM ANOTHER PROCESS      <<01549>>09580000
             THEN GET THE SEGMENT TAB. SIR. THIS PREVENTS A    <<01549>>09585000
             PROCESS OR DYNAMICALLY LOADED PROCEDURE           <<01549>>09590000
             FROM BEING UNLOADED FROM THE TIME WE GET THE      <<01549>>09595000
             PHYSICAL CST NUMBER UNTIL REMOVE BREAKPOINT.      <<01549>>09600000
             (NOTE THAT A PROCESS MAY BE PROCREATED BUT NOT    <<01549>>09605000
             CREATED).;                                        <<01549>>09610000
          << SET DB TO STAK >>                                 <<01549>>09615000
          SET'DB'DSEG (0,0,0D,0<<STAK>>);                      <<01549>>09620000
          << ORIGNAL DB STATE LEFT ON TOS >>                   <<01549>>09625000
          ORIG'DB := TOS;                                      <<01549>>09630000
          XDS := TOS;                                          <<01549>>09635000
          DB'STATE := TOS;                                     <<01549>>09640000
          IF FLAGS.CURRENTPCBBIT = 1 THEN                      <<06671>>09645000
             BEGIN<< CURRENT PROCESS-SET UP PROC >>            <<01549>>09650000
                  << ZERO IGNORED FIELDS         >>            <<01549>>09655000
             IF FLAGS.LOCBIT = 1 THEN                          <<06671>>09660000
                BEGIN                                          <<01549>>09665000
                PINN:= (PINX:=PIX)/PCBSIZE;                  <<<<06671>>09670000
                FLAGS.LOCBIT := 1;                             <<06671>>09675000
                END                                            <<01549>>09680000
             ELSE pinn:= (PINX:=PIX)/PCBSIZE;                  <<06671>>09685000
             END                                               <<01549>>09690000
          ELSE                                                 <<01549>>09695000
             BEGIN                                             <<01549>>09700000
             PINX := pinn*pcbsize;                             <<06671>>09705000
             IF PINX = 0 THEN PINX := PIX;                     <<01549>>09710000
             END;                                              <<01549>>09715000
          Comment                                              <<04498>>09720000
          The loader SIR has to be obtained,to avoid a deadlock<<04498>>09725000
          with the break point table SIR. This happens because <<04498>>09730000
          the call to PHYSICALCST will inevitably need the     <<04498>>09735000
          loader SIR. The proper oerder of getting these SIR's <<04498>>09740000
          is to first get the loader SIR and than the break    <<04498>>09745000
          point table SIR.                                     <<04498>>09750000
          ;                                                    <<04498>>09755000
          SAVESEGSIR := GETSIR(SEGTABSIR);                     <<04498>>09760000
          << GET BKTP SIR TO MAKE SURE NO ONE LOCK/UNLOCKS >>  <<01549>>09765000
          << BKPT TABLE                                    >>  <<01549>>09770000
          SAVEBKPTSIR := GETSIR (BKPTSIR);                     <<01549>>09775000
          PDISABLE;                                            <<01549>>09780000
          IF NOT BKPT'TAB'LOCKED THEN                          <<01549>>09785000
             BEGIN << NO BREAK POINTS >>                       <<01549>>09790000
             RESULT := 0;                                      <<01549>>09795000
             XREG := 0;                                        <<02001>>09800000
             GOTO FIN;                                         <<01549>>09805000
             END;                                              <<01549>>09810000
          IF SEGTYPE <> ABS'SEG THEN                           <<06103>>09815000
             BEGIN << GET THE PHYSICAL CST NUMBER >>           <<01549>>09820000
             TEMP := 0;                                        <<01549>>09825000
             TEMP.(0:4) := SEGTYPE-1;                          <<06103>>09830000
             TEMP.(8:8) := SEGNR;                              <<06103>>09835000
             PENABLE;                                          <<01549>>09840000
             RESULT := PHYSICALCST(pinn,temp);                 <<06671>>09845000
             PDISABLE;                                         <<01549>>09850000
             IF > THEN GOTO ER'SEG;                            <<01549>>09855000
             IF < THEN                                         <<01549>>09860000
                BEGIN                                          <<01549>>09865000
                IF VALIDATE(pinn) = 0 and                      <<06671>>09870000
                   PCBI'(PINX+9).(6:2) <> 0                    <<01549>>09875000
                THEN                                           <<01549>>09880000
                   BEGIN << SYS PROC--NOT IN LST           >>  <<01549>>09885000
                         << MUST SPECIFY A SSL OR PROG SEG >>  <<01549>>09890000
                   IF SEGTYPE = SSL'SEG THEN                   <<06103>>09895000
                      BEGIN                                    <<01549>>09900000
                      PENABLE;                                 <<01549>>09905000
                      RESULT := PHYSICALCST(0,TEMP);           <<01549>>09910000
                      PDISABLE;                                <<01549>>09915000
                      IF <> THEN GOTO ER'SEG;                  <<01549>>09920000
                      END                                      <<01549>>09925000
                   ELSE IF SEGTYPE = PROG'SEG THEN             <<06103>>09930000
                      RESULT:=IF LOGICALMAPPING THEN SEGNR+1   <<06103>>09935000
                                   ELSE SEGNR + %301           <<06103>>09940000
                   ELSE GOTO ER'SEG;                           <<01549>>09945000
                   END                                         <<01549>>09950000
                ELSE GOTO ER'PIN;                              <<01549>>09955000
                END;                                           <<01549>>09960000
             SEGNR := RESULT;                                  <<06103>>09965000
             IF LOGICALMAPPING THEN                            <<06103>>09970000
                IF SEGTYPE = PROG'SEG THEN                     <<06103>>09975000
                   XFLAG := 1                                  <<06103>>09980000
                ELSE                                           <<06103>>09985000
                   XFLAG := 0;                                 <<06103>>09990000
             SEGTYPE := ABS'SEG;                               <<06103>>09995000
             END;                                              <<01549>>10000000
          COMMENT:                                             <<01549>>10005000
             MUST MAKE SURE THAT THE PIN IS A VALID            <<01549>>10010000
             PIN NUMBER (IN CASE ABS'SEG SPECIFIED),           <<01549>>10015000
             THAT THE PROCESS IS STILL ALIVE                   <<01549>>10020000
             (IE. THAT REMOVESTOP HASN'T BEEN CALLED)          <<01549>>10025000
             AND THAT WE HAVE A VALID PHYSICAL SEG #.;         <<01549>>10030000
          RESULT := IF SEGNR=0 THEN VALIDATE(pinn)             <<06671>>10035000
                    ELSE VALIDATE(pinn,debugid);               <<06671>>10040000
          IF RESULT <> 0 THEN GOTO FIN;                        <<01549>>10045000
          IF SEGNR<>0 THEN OBJ := CONVTOOBJID(DEBUGID,         <<06663>>10050000
                                              PINX/PCBSIZE);   <<06663>>10055000
                                                               <<01549>>10060000
TRYAGAIN: << THIS LABEL MARKS THE BEGINNING OF CODE   >>       <<01549>>10065000
          << TO BE REEXECUTED IF A DATA SEG OF THE    >>       <<01549>>10070000
          << BREAKPOINT CONDITION IS ABSENT.          >>       <<01549>>10075000
                                                               <<01549>>10080000
          << LINK GETS INDEX OF FIRST ENTRY IN CHAIN  >>       <<01549>>10085000
          << EXT'X  =  INDEX IN PCB BKPT. EXT. TABLE  >>       <<01549>>10090000
          << LINKX = INDEX OF LINK'S PREDECESSOR      >>       <<01549>>10095000
                                                               <<01549>>10100000
          IF LOCALBRKPNT THEN                                  <<01549>>10105000
             BEGIN                                             <<01549>>10110000
             PRC := pinn*pcbsize + pcb'bkpt'wd;                <<06671>>10115000
             EXT'X := LINKX := PCBI'(PRC);                     <<06671>>10120000
             END                                               <<01549>>10125000
          ELSE                                                 <<01549>>10130000
             BEGIN << SYSTEM BKPT >>                           <<01549>>10135000
             PRC := 0;                                         <<01549>>10140000
             EXT'X := LINKX := IF SYS'BKPT=1 THEN              <<01549>>10145000
                                  SYS'BKPT'EXT'X               <<01549>>10150000
                               ELSE 0;                         <<01549>>10155000
             END;                                              <<01549>>10160000
          IF EXT'X = 0 THEN                                    <<01549>>10165000
             BEGIN << NO BREAK POINTS >>                       <<01549>>10170000
             RESULT := 0;                                      <<01549>>10175000
             XREG := 0;                                        <<02001>>10180000
             GOTO FIN;                                         <<01549>>10185000
             END;                                              <<01549>>10190000
          << THERE ARE BREAKPOINTS. MAKE LOCAL >>              <<01549>>10195000
          << COPY OF VARIABLES BEFORE XCHDB    >>              <<01549>>10200000
          IF PLABEL'PASSED THEN                                <<06103>>10205000
          LOC'PLABEL := PLABEL;                                <<01549>>10210000
          << GET Q-REL LOC OF REGINFO >>                       <<01549>>10215000
          PUSH (Q);                                            <<01549>>10220000
          IF REG'PASSED THEN                                   <<06103>>10225000
          LOC'REGINFO := -(TOS-@REGINFO);                      <<01549>>10230000
          EXCHANGEDB (DEBUGDST);                               <<01549>>10235000
          EXCHDB := TRUE;                                      <<01549>>10240000
          LINK := STOP(EXT'X);                                 <<01549>>10245000
                                                               <<01549>>10250000
          IF HIT'BRKPNT THEN                                   <<01549>>10255000
             BEGIN                                             <<01549>>10260000
             XREG := 0; << INITIALIZE XREG >>                  <<01549>>10265000
             << FIND ENTRY >>                                  <<01549>>10270000
             WHILE LINK <> 0 AND NOT MATCHENTRY DO             <<01549>>10275000
                BEGIN                                          <<01549>>10280000
                LINKX := LINK;                                 <<01549>>10285000
                LINK := STOP(LINK+LINKOFFSET);                 <<01549>>10290000
                END;                                           <<01549>>10295000
             IF LINK <> 0 THEN                                 <<01549>>10300000
                BEGIN   << FOUND MATCH >>                      <<01549>>10305000
                << TELL DISC MONITOR TO IGNORE ENTRY >>        <<01549>>10310000
                STOP(LINK).BKPT'UPDATING := 1;                 <<01549>>10315000
                << REMOVE BKPT FROM CODE >>                    <<01549>>10320000
                MANAGESTOP (LINK,1,PINX);                      <<01549>>10325000
                IF STOP(LINK).BKPT'FAKE = 1 THEN               <<01549>>10330000
                   BEGIN                                       <<01549>>10335000
                   SWITCH'PLOC;                                <<01549>>10340000
                   XREG := 0;                                  <<01549>>10345000
                   END                                         <<01549>>10350000
                ELSE                                           <<01549>>10355000
                   BEGIN << REAL THING >>                      <<01549>>10360000
                   IF STOP(LINK).BKPT'COND = 1 THEN            <<01549>>10365000
                      BEGIN                                    <<01549>>10370000
                      << CONDITIONAL BKPT         >>           <<01549>>10375000
                                                               <<01549>>10380000
                      RESULT := PROCESS'CONDITION (COND'LINK,  <<01549>>10385000
                                STOP(LINK).BKPT'PRIV,          <<01549>>10390000
                                LOC'REGINFO);                  <<01549>>10395000
                      END                                      <<01549>>10400000
                   ELSE RESULT := TIME'FOR'BREAK;              <<01549>>10405000
                   IF RESULT = TIME'FOR'BREAK THEN             <<01549>>10410000
                      BEGIN                                    <<01549>>10415000
                      << RETURN INFO >>                        <<01549>>10420000
                      IF STOP(LINK).BKPT'USERLBL = 1 THEN      <<01549>>10425000
                         BEGIN                                 <<01549>>10430000
                         LOC'PLABEL:=STOP(LINK+USERLBLOFFSET); <<01549>>10435000
                         LOC'MODE:=STOP(LINK+USERLBLMODEOFFSET)<<06103>>10440000
                                       .BKPT'USERMODE;         <<06103>>10445000
                         XREG := 2;                            <<01549>>10450000
                         END                                   <<01549>>10455000
                      ELSE XREG := 1;                          <<01549>>10460000
                      IF STOP(LINK).BKPT'PERM = 1 THEN         <<01549>>10465000
                         SWITCH'PLOC                           <<01549>>10470000
                      ELSE REMOVE'ENTRY;                       <<01549>>10475000
                      END                                      <<01549>>10480000
                   ELSE IF RESULT = NOT'THIS'TIME THEN         <<01549>>10485000
                      BEGIN                                    <<01549>>10490000
                      SWITCH'PLOC; << SET FAKE >>              <<01549>>10495000
                      XREG := 0;                               <<01549>>10500000
                      END                                      <<01549>>10505000
                   ELSE << UNABLE TO TEST CONDITION >>         <<01549>>10510000
                      BEGIN                                    <<01549>>10515000
                      COMMENT:                                 <<01549>>10520000
                         ONE OR MORE DATA SEGS, NOT PRESENT.   <<01549>>10525000
                         WILL ENABLE AND FREEZE SEGS. DUE TO   <<01549>>10530000
                         ENABLE MUST GO CHECK THINGS OUT AGAIN <<01549>>10535000
                         (BREAKPOINT MAY HAVE BEEN ALTERED OR  <<01549>>10540000
                         REMOVED UNDER US);                    <<01549>>10545000
                      << TRANSLATE OPERANDS TO BASE, OFFSET >> <<01549>>10550000
                      TRANSLATE (0,0,0,0,OPER'LINK(LINK,1),    <<01549>>10555000
                                 LOC'REGINFO);                 <<01549>>10560000
                      << SAVE RESULTS >>                       <<01549>>10565000
                      DDEL;  << DELETE OFFSET >>               <<01549>>10570000
                      OP1BASE := TOS;                          <<01549>>10575000
                      OP1TYPE := TOS;                          <<01549>>10580000
                      TRANSLATE (0,0,0,0,OPER'LINK(LINK,2),    <<01549>>10585000
                                 LOC'REGINFO);                 <<01549>>10590000
                      DDEL;                                    <<01549>>10595000
                      OP2BASE := TOS;                          <<01549>>10600000
                      OP2TYPE := TOS;                          <<01549>>10605000
                                                               <<01549>>10610000
                      PENABLE; EXCHANGEDB (0);                 <<01549>>10615000
                      << UNFREEZE ANY PREVIOUSLY FROZESEG >>   <<01549>>10620000
                      IF OLD'OP1TYPE = DA'SEG THEN RESETOBJ    <<06663>>10625000
                         (FREEZEDSEG,DOUBLE(OLD'OP1BASE));     <<06663>>10630000
                      IF OLD'OP2TYPE = DA'SEG THEN RESETOBJ    <<06663>>10635000
                         (FREEZEDSEG,DOUBLE(OLD'OP2BASE));     <<06663>>10640000
                      << FREEZE NEW SEGMENTS >>                <<01549>>10645000
                      IF (OLD'OP1TYPE:=OP1TYPE) = DA'SEG THEN  <<01549>>10650000
                         SETOBJ (FREEZEDSEG,DOUBLE             <<06663>>10655000
                                 (OLD'OP1BASE:=OP1BASE),J);    <<01549>>10660000
                      IF (OLD'OP2TYPE:=OP2TYPE) = DA'SEG THEN  <<01549>>10665000
                         SETOBJ (FREEZEDSEG,DOUBLE             <<06663>>10670000
                                 (OLD'OP2BASE:=OP2BASE),J);    <<01549>>10675000
                      PDISABLE;                                <<01549>>10680000
                      GOTO TRYAGAIN;                           <<01549>>10685000
                      END                                      <<01549>>10690000
                   END                                         <<01549>>10695000
                END                                            <<01549>>10700000
             END                                               <<01549>>10705000
          ELSE  << CLEARING ENTRIES >>                         <<01549>>10710000
             BEGIN                                             <<01549>>10715000
             WHILE LINK <> 0 DO                                <<01549>>10720000
                BEGIN                                          <<01549>>10725000
                IF MATCHENTRY THEN                             <<01549>>10730000
                   BEGIN                                       <<01549>>10735000
                   << TELL DISC MONITOR TO IGNORE ENTRY >>     <<01549>>10740000
                   STOP(LINK).BKPT'UPDATING := 1;              <<01549>>10745000
                   << REMOVE BKPT FROM CODE >>                 <<01549>>10750000
                   MANAGESTOP(LINK,1,PINX);                    <<01549>>10755000
                   REMOVE'ENTRY;                               <<01549>>10760000
                   END                                         <<01549>>10765000
                ELSE                                           <<01549>>10770000
                   BEGIN                                       <<01549>>10775000
                   << GET NEXT ENTRY - SAVE PREDECESSOR >>     <<01549>>10780000
                   LINKX := LINK;                              <<01549>>10785000
                   LINK := STOP(LINK+LINKOFFSET);              <<01549>>10790000
                   END;                                        <<01549>>10795000
                END                                            <<01549>>10800000
             END;                                              <<01549>>10805000
                                                               <<01549>>10810000
          << UNLOCK IF NO MORE ENTRIES >>                      <<01549>>10815000
          UNLOCK := NO'BKPT'ENTRIES;                           <<01549>>10820000
          RESULT := 0;                                         <<01549>>10825000
  FIN:    REMOVESTOP := RESULT;                                <<01549>>10830000
          PENABLE;                                             <<01549>>10835000
          IF EXCHDB THEN                                       <<01549>>10840000
             BEGIN                                             <<01549>>10845000
             EXCHANGEDB (0);                                   <<01549>>10850000
             IF PLABEL'PASSED THEN                             <<06103>>10855000
             BEGIN                                             <<06103>>10860000
             PLABEL := LOC'PLABEL;                             <<01549>>10865000
             PLABELMODE:=LOC'MODE;                             <<06103>>10870000
             END;                                              <<06103>>10875000
             END;                                              <<01549>>10880000
          << IF WE EMPTIED TABLE THEN UNLOCK IT >>             <<01549>>10885000
          IF UNLOCK THEN UNLOCK'BKPT'TAB;                      <<01549>>10890000
          RELSIR (BKPTSIR,SAVEBKPTSIR);                        <<01549>>10895000
          IF SAVESEGSIR<>-1 THEN RELSIR (SEGTABSIR,SAVESEGSIR);<<01549>>10900000
          << UNFREEZE ANY SEGMENT FROZE WHILE PROCESSING >>    <<01549>>10905000
          << BREAKPOINT CONDITION                        >>    <<01549>>10910000
          IF OLD'OP1TYPE = DA'SEG THEN                         <<01549>>10915000
             RESETOBJ (FREEZEDSEG,DOUBLE(OLD'OP1BASE));        <<06663>>10920000
          IF OLD'OP2TYPE = DA'SEG THEN                         <<01549>>10925000
             RESETOBJ (FREEZEDSEG,DOUBLE(OLD'OP2BASE));        <<06663>>10930000
          << RESTORE ORIGINAL DB STATE >>                      <<01549>>10935000
          SET'DB (DB'STATE,XDS,ORIG'DB);                       <<01549>>10940000
          RETURN;                                              <<01549>>10945000
  ER'PIN: RESULT := INVALIDPIN;                                <<01549>>10950000
          GOTO FIN;                                            <<01549>>10955000
  ER'SEG: RESULT := INVALIDSEG;                                <<01549>>10960000
          GOTO FIN;                                            <<01549>>10965000
  END;                                                         <<01549>>10970000
                                                                        10975000
                                                                        10980000
          comment                                              <<06671>>10985000
          <<VALIDATE AND SET UP B.P. +ENTRY                             10990000
              FLAGS.(0: 1)=  RESERVED                          <<06671>>10995000
                   .(1: 1)=1 PRIV                                       11000000
                          =0 NON PRIV                                   11005000
                   .(2: 1)=1 PROCESS LOCAL BREAK PNT           ((MPEIV))11010000
                          =0 SYSTEM BREAK PNT                  ((MPEIV))11015000
                   .(4: 1)=1 DOUBLE TRAP                       ((TB.MM))11020000
                   .(5: 1)=1 PERMANENT B.P.                             11025000
                   .(6: 1)=1 USER TRAP                         ((TB.MM))11030000
                   .(8: 8)=  unused pin # is a separate param  <<06671>>11035000
                                                               <<06671>>11040000
               PINN       =  pin number                        <<06671>>11045000
                                                               ((MPEIV))11050000
               COND       = ARRAY CONTAINING BKPT CONDITION    ((MPEIV))11055000
                            SEE 'CONDITION' IN DEBUG FOR       ((MPEIV))11060000
                            ARRAY FORMAT (OPTIONAL)            ((MPEIV))11065000
                                                               ((MPEIV))11070000
               PARM       = TRAP LABEL IF PROC.(6:1)=1         ((MPEIV))11075000
                            OPTIONAL                           ((MPEIV))11080000
                                                               ((MPEIV))11085000
               PLABELMODE = TRAP LABEL MODE.                   ((*MAP*))11090000
               ENTERSTOP  =0 OK                                ((MPEIV))11095000
                          =1 ERROR                             ((MPEIV))11100000
                          =2 TABLE FULL                        ((MPEIV))11105000
                          =3 PROCESS/SYSTEM CONFLICT           ((MPEIV))11110000
                          =4 LOCATION CONFLICT                 ((MPEIV))11115000
                          =5 INVALID PIN                       ((MPEIV))11120000
                          =6 INVALID SEG                       ((MPEIV))11125000
                                                               ((MPEIV))11130000
               ASSUMES:   PENABLED UPON ENTRY  >>              <<01549>>11135000
          << >>                                                         11140000
          ; <<end comment>>                                    <<06671>>11145000
INTEGER PROCEDURE ENTERSTOP(FLAGS,PINN,DEBUGID,PLOC,           <<06671>>11150000
                            COND,PARM,PLABELMODE);             <<06103>>11155000
   VALUE FLAGS,PINN,DEBUGID,PLOC,PARM,PLABELMODE;              <<06671>>11160000
   INTEGER FLAGS,PINN,PLOC,PARM,PLABELMODE;                    <<06671>>11165000
   DOUBLE DEBUGID;                                             <<06103>>11170000
  ARRAY     COND;                                              <<01549>>11175000
  OPTION    UNCALLABLE,PRIVILEGED;                                      11180000
  BEGIN                                                                 11185000
          DEBUGIDDEF;                                          <<06103>>11190000
          EQUATE FREEZE = %100;                                <<00873>>11195000
          DOUBLE  OBJ;                                         <<06663>>11200000
          INTEGER                                              <<06663>>11205000
            OBJ0 = OBJ,                                        <<06663>>11210000
            OBJ1 = OBJ + 1;                                    <<06663>>11215000
                                                               <<06663>>11220000
          INTEGER PRC,LINK,LOC,PINX;                                    11225000
          INTEGER RESULT,TEMP,SAVESEGSIR,I,J,PCB'EXT'X;        <<01549>>11230000
          INTEGER DUB,ABS'SEGNUM,INSTR,BANK,SAVEBKPTSIR;       <<06663>>11235000
          INTEGER SEG'ID'TYPE';                                <<06103>>11240000
          INTEGER RETURNVAL = ENTERSTOP;                       <<01549>>11245000
          LOGICAL FREEZESEG   := FALSE, << FROZE CODE >>       <<01549>>11250000
                  FOUND'EMPTY := FALSE, << TABLE EMPTY >>      <<01549>>11255000
                  EXCHDB      := FALSE;<< EXCH'DB TO BKPTTAB >><<01549>>11260000
          INTEGER ARRAY LOC'COND(0:MAX'COND'SIZE) = Q;         <<01549>>11265000
          DEFINE                                               <<01549>>11270000
             LOCALBRKPNT = LOGICAL(FLAGS.LOCBIT) #;            <<06671>>11275000
          << >>                                                         11280000
          LOGICAL SUBROUTINE TWO'WORDINSTR(INSTR);             <<00873>>11285000
            VALUE INSTR;                                       <<00873>>11290000
            INTEGER INSTR;                                     <<00873>>11295000
          BEGIN                                                <<00873>>11300000
             COMMENT:                                          <<00873>>11305000
                DETERMINE WHETHER OR NOT  INSTR IS A TWO       <<00873>>11310000
                WORD INSTRUCTION;                              <<00873>>11315000
             TWO'WORDINSTR := IF INSTR = %20477 THEN TRUE      <<00873>>11320000
                              ELSE FALSE;                      <<00873>>11325000
          END;                                                 <<00873>>11330000
          << >>                                                <<00873>>11335000
          COMMENT:                                             <<01549>>11340000
                          ***** WARNING *****                  <<01549>>11345000
             MUCH OF THE CODE OF THIS PROCEDURE IS DUPLICATED  <<01549>>11350000
             IN REMOVESTOP.  THEREFORE, ANY BUGS FOUND IN THIS <<01549>>11355000
             ROUTINE MAY ALSO EXIST IN REMOVESTOP.             <<01549>>11360000
                                                               <<01549>>11365000
             IF ENTERING BREAKPOINT IN ANOTHER PROCESS         <<01549>>11370000
             THEN GET THE SEGMENT TAB SIR. THIS PREVENT A      <<01549>>11375000
             PROCESS OR ANY DYNAMICALLY LOADED PROCEDURE       <<01549>>11380000
             FROM BEING UNLOADED FROM THE TIME WE GET THE      <<01549>>11385000
             PHYSICAL CST NUMBER UNTIL ENTER BREAKPOINT.       <<01549>>11390000
             (NOTE THAT A PROCESS MAY BE PROCREATED BUT NOT    <<01549>>11395000
             CREATED).;                                        <<01549>>11400000
          PINX := pinn * pcbsize;                              <<06671>>11405000
          IF = THEN PINX _ PIX;                                         11410000
          Comment                                              <<04498>>11415000
          The loader SIR has to be obtained,to avoid a deadlock<<04498>>11420000
          with the break point table SIR. This happens because <<04498>>11425000
          the call to PHYSICALCST will inevitably need the     <<04498>>11430000
          loader SIR. The proper order of getting these SIR's  <<04498>>11435000
          is to first get the loader SIR and than the break    <<04498>>11440000
          point table SIR.                                     <<04498>>11445000
          ;                                                    <<04498>>11450000
          SAVESEGSIR := GETSIR(SEGTABSIR);                     <<04498>>11455000
          SAVEBKPTSIR := GETSIR (BKPTSIR);                     <<01549>>11460000
          IF NOT BKPT'TAB'LOCKED THEN<< DEBUG MUST LOCK TAB >> <<01549>>11465000
             BEGIN                                             <<01549>>11470000
             LOCK'BKPT'TAB;                                    <<01549>>11475000
             FOUND'EMPTY := TRUE;                              <<01549>>11480000
             END;                                              <<01549>>11485000
          PDISABLE;                                            <<01549>>11490000
          TOS_0;                                                        11495000
          IF SEGTYPE <> ABS'SEG THEN                           <<06103>>11500000
             BEGIN << GET THE PHYSICAL CST NUMBER >>           <<01549>>11505000
             TEMP := 0;                                        <<01549>>11510000
             TEMP.(0:4) := SEGTYPE-1;                          <<06103>>11515000
             TEMP.(8:8) := SEGNR;                              <<06103>>11520000
             PENABLE;                                          <<01549>>11525000
             RESULT := PHYSICALCST(pinn,temp);                 <<06671>>11530000
             PDISABLE;                                         <<01549>>11535000
             IF > THEN GOTO ER'SEG;                            <<01549>>11540000
             IF < THEN                                         <<01549>>11545000
                BEGIN                                          <<01549>>11550000
                IF VALIDATE(pinn) = 0 and                      <<06671>>11555000
                   PCBI'(PINX+PROCSTATEWORDNUM).PTYPEFIELD'    <<06671>>11560000
                   <> 0 THEN                                   <<06671>>11565000
                   BEGIN << SYS PROC--NOT IN LST           >>  <<01549>>11570000
                         << MUST SPECIFY A SSL OR PROG SEG >>  <<01549>>11575000
                   IF SEGTYPE = SSL'SEG THEN                   <<06103>>11580000
                      BEGIN                                    <<01549>>11585000
                      PENABLE;                                 <<01549>>11590000
                      RESULT := PHYSICALCST(0,TEMP);           <<01549>>11595000
                      PDISABLE;                                <<01549>>11600000
                      IF <> THEN GOTO ER'SEG;                  <<01549>>11605000
                      END                                      <<01549>>11610000
                   ELSE IF SEGTYPE = PROG'SEG THEN             <<06103>>11615000
                      RESULT:=IF LOGICALMAPPING THEN SEGNR+1   <<06103>>11620000
                                   ELSE SEGNR + %301           <<06103>>11625000
                   ELSE GOTO ER'SEG;                           <<01549>>11630000
                   END                                         <<01549>>11635000
                ELSE GOTO ER'PIN;                              <<01549>>11640000
                END;                                           <<01549>>11645000
             SEGNR := RESULT;                                  <<06103>>11650000
             IF LOGICALMAPPING THEN                            <<06103>>11655000
                IF SEGTYPE = PROG'SEG THEN                     <<06103>>11660000
                   XFLAG := 1                                  <<06103>>11665000
                ELSE                                           <<06103>>11670000
                   XFLAG := 0;                                 <<06103>>11675000
             SEGTYPE := ABS'SEG;                               <<06103>>11680000
             END;                                              <<01549>>11685000
          COMMENT:                                             <<01549>>11690000
             MUST MAKE SURE THAT THE PIN IS A VALID            <<01549>>11695000
             PIN NUMBER (IN CASE ABS'SEG SPECIFIED),           <<01549>>11700000
             THAT THE PROCESS IS STILL ALIVE                   <<01549>>11705000
             (IE. THAT REMOVESTOP HASN'T BEEN CALLED)          <<01549>>11710000
             AND THAT WE HAVE A VALID PHYSICAL SEG #.;         <<01549>>11715000
          << VALIDITY CHECKS >>                                <<01549>>11720000
          CASE VALIDATE(pinn,debugid) of                       <<06671>>11725000
             BEGIN                                             <<01549>>11730000
             <<0>>  BEGIN END; << OK >>                        <<01549>>11735000
             <<1>>  GOTO ER'PIN;                               <<01549>>11740000
             <<2>>  GOTO ER'SEG;                               <<01549>>11745000
             END;                                              <<01549>>11750000
             IF LOGICALMAPPING THEN                            <<06103>>11755000
                IF LOGICAL(XFLAG) THEN                         <<06103>>11760000
                   SEG'ID'TYPE' := OBJIDPGMTYPE                <<06663>>11765000
                ELSE                                           <<06103>>11770000
                   SEG'ID'TYPE' := OBJIDSLTYPE                 <<06663>>11775000
             ELSE                                              <<06103>>11780000
                SEG'ID'TYPE' := IF SEGNR>%300 THEN OBJIDPGMTYPE<<06663>>11785000
                                              ELSE OBJIDSLTYPE;<<06663>>11790000
             OBJ := BUILDOBJID (SEG'ID'TYPE',                  <<06663>>11795000
                                SEGNR,pinn);                   <<06671>>11800000
          RESULT:=CONVSEGIDTOSTINX(OBJ);                       <<06663>>11805000
          TOS:=DSTI'(RESULT)&LSR(14);                          <<06103>>11810000
          IF TOS AND NOT LOGICAL(FLAGS&LSR(14)) THEN GOTO ERR; <<06671>>11815000
          DUB := FLAGS.DBLTRAP;                                <<06671>>11820000
          IF (PLOC+DUB)>=DSTI'(X)&LSL(4)&LSR(2) THEN GOTO ERR;          11825000
          COMMENT:                                             <<01549>>11830000
             GET INSTRUCTION SO THAT WE CAN LATER DETERMINE    <<01549>>11835000
             WHETHER BREAKPOINT IS BEING SET ON TWO-WORD       <<01549>>11840000
             INSTRUCTION;                                      <<01549>>11845000
          IF DSTI'(RESULT) < 0 THEN                            <<06103>>11850000
             BEGIN << SEGMENT ABSENT >>                        <<00873>>11855000
             PENABLE;                                          <<00873>>11860000
             SETOBJ(FREEZE,OBJ,BANK,PINX);                     <<06663>>11865000
             FREEZESEG := TRUE;                                <<00873>>11870000
             PDISABLE;                                         <<00873>>11875000
             END;                                              <<00873>>11880000
          << GET INSTRUCTION >>                                <<00873>>11885000
          TOS:=DSTI'(RESULT+2);                                <<06103>>11890000
          TOS:=DSTI'(RESULT+3)+PLOC;                           <<06103>>11895000
          LMEM;                                                <<00873>>11900000
          INSTR := TOS;                                        <<00873>>11905000
          DDEL;  << REMOVE BANK ADDRESS >>                     <<00873>>11910000
          IF INSTR = %36000 THEN                               <<00873>>11915000
             BEGIN                                             <<00873>>11920000
             << IF ANOTHER PROCESS HAS BRKPNT AT >>            <<00873>>11925000
             << THIS LOC, GET THE INSTRUCTION    >>            <<00873>>11930000
             TESTSTOP(OBJ,PLOC,PINX);                          <<06663>>11935000
             IF > THEN                                         <<00873>>11940000
                BEGIN                                          <<00873>>11945000
             TOS:=DSTI'(RESULT+2);                             <<06103>>11950000
             TOS:=DSTI'(RESULT+3)+PLOC;                        <<06103>>11955000
                LMEM;                                          <<00873>>11960000
                INSTR := TOS;                                  <<00873>>11965000
                DDEL;  << REMOVE BANK ADDRESS >>               <<00873>>11970000
                END;                                           <<00873>>11975000
             END;                                              <<00873>>11980000
          << SET DB TO BREAKPOINT TABLE              >>        <<01549>>11985000
          << MAKE LOCAL COPY OF ARRAY BEFORE EXCH'DB >>        <<01549>>11990000
          MOVE LOC'COND := COND, (COND(0)+1);                  <<01549>>11995000
          EXCHANGEDB (DEBUGDST);                               <<01549>>12000000
          EXCHDB := TRUE;                                      <<01549>>12005000
          << CHECK FOR SYSTEM/PROCESS CONFLICT          >>     <<01549>>12010000
          << OR SYSTEM/SYSTEM DUPLICATION               >>     <<01549>>12015000
          << SET UP FLAG 'DUB' FOR SEARCH/SCAN ROUTINES >>     <<01549>>12020000
          DUB_DUB+(IF TWO'WORDINSTR(INSTR) THEN 6 ELSE 2);     <<01549>>12025000
          IF SCANSTOP(STOP(SYS'BKPT'EXT'X),OBJ,PLOC,DUB)       <<06663>>12030000
             <> 0 THEN                                         <<01549>>12035000
                IF LOCALBRKPNT THEN GOTO ERY ELSE GOTO ERZ;    <<01549>>12040000
          IF LOCALBRKPNT THEN                                  <<01549>>12045000
             BEGIN                                             <<01549>>12050000
             << PROCESS-LOCAL BREAKPOINT:       >>             <<01549>>12055000
             << HAS THIS PROCESS BEEN ALLOCATED >>             <<01549>>12060000
             << AN ENTRY IN PCB'EXT TABLE?      >>             <<01549>>12065000
             PRC := PCBSIZE*pinn + pcb'bkpt'wd;                <<06671>>12070000
             PCB'EXT'X := PCBI'(PRC);                          <<06671>>12075000
             IF PCB'EXT'X = 0 THEN                             <<01549>>12080000
                BEGIN << GET EXT. INDEX >>                     <<01549>>12085000
                PCB'EXT'X := GET'BKPT'EXT'X;                   <<01549>>12090000
                IF PCB'EXT'X = 0 THEN GOTO ERX; <<FULL>>       <<01549>>12095000
                END;                                           <<01549>>12100000
             LINK := STOP(PCB'EXT'X);                          <<01549>>12105000
             << CHECK FOR DUPLICATE >>                         <<01549>>12110000
             IF SCANSTOP(LINK,OBJ,PLOC,DUB) <> 0 THEN          <<06663>>12115000
                GOTO ERZ;                                      <<01549>>12120000
             END                                               <<01549>>12125000
          ELSE                                                 <<01549>>12130000
             BEGIN                                             <<01549>>12135000
             << SYSTEM BREAK-POINT: CHECK FOR CONFLICT >>      <<01549>>12140000
             << WITH PROCESS BREAKPOINT                >>      <<01549>>12145000
             IF SEARCHSTOP(IND'ENT1,OBJ,PLOC,DUB) <> 0         <<06663>>12150000
                THEN GOTO ERY;                                 <<01549>>12155000
             LINK := STOP(SYS'BKPT'EXT'X);                     <<01549>>12160000
             END;                                              <<01549>>12165000
          << FIGURE OUT SIZE NEEDED FOR ENTRY >>               <<01549>>12170000
          I := MIN'ENT'SIZE + LOC'COND + FLAGS.LABELBIT;       <<06671>>12175000
          LOC := GET'BKPT'ENTRY (I);                           <<01549>>12180000
          IF LOC = 0 THEN                                      <<01549>>12185000
             BEGIN << BKPT TABLE FULL >>                       <<01549>>12190000
             << RETURN EXT. ENTRY IF GOT NEW ONE >>            <<01549>>12195000
             IF LOCALBRKPNT AND STOP(PCB'EXT'X) = 0 THEN       <<01549>>12200000
                FREE'BKPT'EXT'X (PCB'EXT'X);                   <<01549>>12205000
             GOTO ERX;                                         <<01549>>12210000
             END;                                              <<01549>>12215000
          << SET UP FLAGS WORD-- SIZE FIELD SET BY GETENTRY  >><<01549>>12220000
          I := FLAGS; << SETS TAG,PRIV,SYS,DBLTRAP BITS >>     <<06671>>12225000
          I.BKPT'VALID := 0;                                   <<01549>>12230000
          I.BKPT'FAKE := 0;                                    <<01549>>12235000
          I.BKPT'TW := IF TWO'WORDINSTR (INSTR) THEN 1         <<01549>>12240000
                       ELSE 0;                                 <<01549>>12245000
          I.BKPT'USERLBL := FLAGS.LABELBIT;                    <<06671>>12250000
          I.BKPT'PERM := FLAGS.PERMBIT;                        <<06671>>12255000
          I.BKPT'COND := IF LOC'COND > 0 THEN 1 ELSE 0;        <<01549>>12260000
          I.BKPT'UPDATING := 0;                                <<01549>>12265000
          STOP(LOC).BKPT'FLAGS := I.BKPT'FLAGS;                <<01549>>12270000
          STOP(LOC+FLAGS2OFFSET).BKPT'TRACE := FLAGS.TRACEBIT; <<07319>>12275000
          STOP(LOC+OBJIDOFFSET) := OBJ0;                       <<06663>>12280000
          STOP(LOC+OBJIDOFFSET+1) := OBJ1;                     <<06663>>12285000
          STOP(LOC+PLOCOFFSET) := PLOC;                        <<01549>>12290000
          << WILL BE 1ST ENTRY IN CHAIN >>                     <<01549>>12295000
          STOP(LOC+LINKOFFSET) := LINK;                        <<01549>>12300000
                                                               <<01549>>12305000
          << SET UP VARIABLE PART OF ENTRY >>                  <<01549>>12310000
          IF FLAGS.LABELBIT = 1 THEN                           <<06671>>12315000
             BEGIN                                             <<06103>>12320000
             STOP(LOC+USERLBLOFFSET) := PARM;                  <<01549>>12325000
             STOP(LOC+USERLBLMODEOFFSET).BKPT'USERMODE         <<06103>>12330000
                        :=PLABELMODE;                          <<06103>>12335000
             END;                                              <<06103>>12340000
          IF STOP(LOC).BKPT'COND = 1 THEN                      <<01549>>12345000
             BEGIN << COPY CONDITION >>                        <<01549>>12350000
             I := LOC + MIN'ENT'SIZE + FLAGS.LABELBIT - 1;     <<06671>>12355000
             J := 0;                                           <<01549>>12360000
             WHILE (J:=J+1) <= LOC'COND DO                     <<01549>>12365000
                 STOP(I+J) := LOC'COND(J);                     <<01549>>12370000
             END;                                              <<01549>>12375000
                                                               <<01549>>12380000
          << EVERYTHING OK, ENTER IN BKPT CHAIN >>             <<01549>>12385000
          IF NOT LOCALBRKPNT THEN                              <<01549>>12390000
             BEGIN                                             <<01549>>12395000
             << IF 1ST SYSTEM BREAK POINT THEN MARK >>         <<01549>>12400000
             << SYSTEM BREAK POINTS PRESENT         >>         <<01549>>12405000
             IF STOP(SYS'BKPT'EXT'X) = 0 THEN SYS'BKPT := 1;   <<01549>>12410000
             STOP(SYS'BKPT'EXT'X) := LOC;                      <<01549>>12415000
             END                                               <<01549>>12420000
          ELSE                                                 <<01549>>12425000
             BEGIN                                             <<01549>>12430000
             << 1ST ENTRY IN CHAIN ? >>                        <<01549>>12435000
             IF STOP(PCB'EXT'X) = 0 THEN                       <<01549>>12440000
                PCBI'(PRC) := pcb'ext'x;                       <<06671>>12445000
             STOP(PCB'EXT'X) := LOC;                           <<01549>>12450000
             END;                                              <<01549>>12455000
          << PLACE BREAKPOINT IN CODE >>                       <<01549>>12460000
          MANAGESTOP(LOC,0,PINX);                              <<01549>>12465000
          GOTO FIN;                                                     12470000
                                                               <<01549>>12475000
  ER'SEG: TOS_TOS+1;                                           <<01549>>12480000
  ER'PIN: TOS_TOS+1;                                           <<01549>>12485000
  ERZ:    TOS_TOS+1;                                                    12490000
  ERY:    TOS_TOS+1;                                                    12495000
  ERX:    TOS_TOS+1;                                                    12500000
  ERR:    TOS_TOS+1;                                                    12505000
  FIN:    ENTERSTOP_TOS;                                                12510000
          PENABLE;                                                      12515000
          IF EXCHDB THEN EXCHANGEDB(0);                        <<01549>>12520000
          IF FOUND'EMPTY AND RETURNVAL<>0 THEN UNLOCK'BKPT'TAB;<<01549>>12525000
          RELSIR (BKPTSIR,SAVEBKPTSIR);                        <<01549>>12530000
          IF SAVESEGSIR<>-1 THEN RELSIR (SEGTABSIR,SAVESEGSIR);<<01549>>12535000
          IF FREEZESEG THEN RESETOBJ(FREEZE,OBJ,PINX);         <<06663>>12540000
  END;                                                                  12545000
                                                                        12550000
                                                                        12555000
$PAGE " "                                                      <<01007>>12560000
                                                                        12565000
$CONTROL SEGMENT=DEBUG                                         <<01549>>12570000
            << >>                                                       12575000
  <<*************************>>                                         12580000
            << >>                                                       12585000
            << D E B U G (SYSTEMDEBUG) >>                               12590000
            << >>                                                       12595000
  <<*************************>>                                         12600000
            << >>                                                       12605000
PROCEDURE DEBUG;                                                        12610000
  OPTION  PRIVILEGED;                                                   12615000
    BEGIN                                                               12620000
                                                                        12625000
          ENTRY SYSTEMDEBUG;                                            12630000
          ENTRY SNOOP;                                                  12635000
                                                                        12640000
          EQUATE     BRPTCSTN=1,                                        12645000
                     TOOTHPICK=2,                              <<00315>>12650000
                     CHARCR=%15,                               <<01.KM>>12655000
                     CRBLANK=[8/CHARCR,8/" "];                 <<01.KM>>12660000
          EQUATE     CMNPC=0,                                           12665000
                     RMNPR=2,                                           12670000
                     BMNPD=4,                                           12675000
                     BMNPM=6,                                           12680000
                     BMPMD=8,                                           12685000
                     BMPMM=10;                                          12690000
          EQUATE                                               <<01549>>12695000
                     MSG'SYNTAX  = 0,                          <<01549>>12700000
                     MSG'NONO    = 1,                          <<01549>>12705000
                     MSG'BOUNDS  = 2,                          <<01549>>12710000
                     MSG'FULL    = 3,                          <<01549>>12715000
                     MSG'SAME    = 4,                          <<01549>>12720000
                     MSG'CHECK   = 5;                          <<01549>>12725000
          << >>                                                <<01549>>12730000
          << SUBROUTINE EQUATES >>                             <<01549>>12735000
          EQUATE                                               <<01549>>12740000
                     INBUF'END       = 46,                     <<01549>>12745000
                     << 'INFO' INDEXES FOR LOCATION >>         <<01549>>12750000
                     IND'NUM'FIELDS  = INBUF'END+1,            <<01549>>12755000
                     IND'PROCOFFSET  = IND'NUM'FIELDS+1,       <<01549>>12760000
                     IND'LOC'SEGTYPE = IND'PROCOFFSET+1,       <<01549>>12765000
                     IND'PROC'FLAG   = IND'LOC'SEGTYPE+1,      <<06671>>12770000
                     IND'PINNR'NUM   = IND'PROC'FLAG+1,        <<06671>>12775000
                     IND'DELIM       = IND'PINNR'NUM+1,        <<06671>>12780000
                     LAST'IND'LOC    = IND'DELIM,              <<01549>>12785000
                     << 'INFO' INDEXES FOR CONDITION >>        <<01549>>12790000
                     IND'PRIM'INFO   = LAST'IND'LOC+1,         <<01549>>12795000
                     IND'OP'INFO     = IND'PRIM'INFO+1,        <<01549>>12800000
                     LAST'IND'COND   = IND'OP'INFO,            <<01549>>12805000
                     << 'INFO' INDEXES FOR SENDIT    >>        <<01549>>12810000
                     IND'DECOMP'STATE= LAST'IND'COND + 1,      <<01549>>12815000
                     IND'ROW'SIZE    = IND'DECOMP'STATE +1,    <<01549>>12820000
                     LAST'IND'SENDIT = IND'ROW'SIZE,           <<01549>>12825000
                     << 'INFO' INDEX FOR COND'STAK(0:X) >>     <<01549>>12830000
                     IND'COND'STAK   = LAST'IND'SENDIT+1,      <<01549>>12835000
                     IND'WORKAREA    = IND'COND'STAK+          <<01549>>12840000
                                       MAX'COND'SIZE,          <<01549>>12845000
                     LAST'IND        = IND'WORKAREA +          <<01549>>12850000
                                       MAX'BKPT'SIZE;          <<01549>>12855000
          EQUATE                                               <<01549>>12860000
                     << EXPRESSION >>                          <<01549>>12865000
                     INVAL'EXP     = 0,                        <<01549>>12870000
                     VALID'EXP     = 1,                        <<01549>>12875000
                     NULL'EXP      = 2,                        <<01549>>12880000
                     << FIELD >>                               <<01549>>12885000
                     RHSMATCH      = 0,                        <<01549>>12890000
                     LHSMATCH      = 1,                        <<01549>>12895000
                     << L'PRIMARY >>                           <<01549>>12900000
                     CONST'PRIMARY = 0,                        <<01549>>12905000
                     ADDR'PRIMARY  = 1,                        <<01549>>12910000
                     NULL'PRIMARY  = 2,                        <<01549>>12915000
                     IND'PRIMARY   = 3,                        <<01549>>12920000
                     << SENDIT / MODES >>                      <<01549>>12925000
                     CODE          = 4,  << CODE MODE >>       <<01549>>12930000
                     NUM'MODES     = 5,                        <<01549>>12935000
                     OK'OPCODE     = 0,                        <<01549>>12940000
                     INGNORE'WD2   = -1,                       <<01549>>12945000
                     INSTR'1STWORD = 0,                        <<01549>>12950000
                     INSTR'2NDWORD = 1,                        <<01549>>12955000
                     << ASSUME %36000 NOT >>                   <<01549>>12960000
                     << VALID 2ND OP      >>                   <<01549>>12965000
                     BAD'2NDWORD   = %36000,                   <<01549>>12970000
                     INSTR'PER'ROW = 1,                        <<01549>>12975000
                     MAX'INSTR'ROW = 4,                        <<01549>>12980000
                     LEN'CODEFIELD = 16;                       <<01549>>12985000
          << >>                                                <<01549>>12990000
          << SUBROUTINE DEFINES >>                             <<01549>>12995000
          DEFINE                                               <<01549>>13000000
                     << DEFINES FOR FIELD >>                   <<01549>>13005000
                     NULL'FIELDBIT    = (13:1)#,               <<01549>>13010000
                     CRBIT            = (14:1)#,               <<01549>>13015000
                     DELIMBITS        = (14:2)#,               <<01549>>13020000
                     << DEFINES FOR GETTOKEN >>                <<01549>>13025000
                     TOKEN'TYPE       = (8:8)#,                <<01549>>13030000
                     TOKEN'LEN        = (0:8)#,                <<01549>>13035000
                     << DEFINES FOR CONDITION >>               <<01549>>13040000
                     OP1TYPE          = (0:2)#,                <<01549>>13045000
                     OP2TYPE          = (2:2)#,                <<01549>>13050000
                     RELOPTYPE        = (8:8)#,                <<01549>>13055000
                     << DEFINES FOR LOCATION >>                <<01549>>13060000
                     PINFIELD'PRESENT = (NUM'FIELDS >= 3)#,    <<01549>>13065000
                     SEGFIELD'PRESENT = (NUM'FIELDS >= 2)#,    <<01549>>13070000
                     SPECIFIED'PIN    = LOCBIT#;               <<01549>>13075000
          << >>                                                         13080000
          DEFINE     XCR           = %20015#,                  <<01040>>13085000
                     BREAK         = BREAKFLAG.(15:1)#,        <<01040>>13090000
                     PMBC'OFF      = BREAKFLAG.(12:1)#,        <<07319>>13095000
                     B'TRACE       = BREAKFLAG.(13:1)#,        <<07319>>13100000
                     DBL'INSTR'ADJ = BREAKFLAG.(14:1)#;        <<01040>>13105000
          << >>                                                         13110000
          ARRAY COMMAND(0:14)=PB_                                       13115000
                      "D ", <<DUMP REGISTERS/MEMORY>>                   13120000
                      "M ", <<MODIFY REGISTERS/MEMORY>>                 13125000
                      "L ", <<SWITCH LIST LOG DEVICE>>                  13130000
                      "B ", <<SET BREAKPOINT>>                          13135000
                      "C ", <<CLEAR BREAKPOINT>>                        13140000
                      "T ", <<TRACE>>                                   13145000
                      "F ", <<FREEZE SEGMENT>>                          13150000
                      "U ", <<UNFREEZE SEGMENT>>                        13155000
                      "R ", <<RETURN>>                                  13160000
                      "= ", <<CALCULATE>>                               13165000
                      "A ", <<ACCEPT BREAKPOINT MODE>>                  13170000
                      "E ", <<EXIT N / TERMINATE>>                      13175000
                      "H ", <<CALL HELP>>                               13180000
                      "$ ", <<SET REG VALUE>>                           13185000
                      "  "; <<FINI>>                                    13190000
          ARRAY REGY(0:REGEND)=PB_                                      13195000
                     "R ", "ST", "X ",                                  13200000
                     "A ", "SY", "V ",                                  13205000
                     "CO", "DA", "DX",                                  13210000
                     "DB", "DL", "Q ", "S ", "Z ",                      13215000
                     "PB", "P ", "PL", "EA",                            13220000
                     "1 ", "2 ", "3 ", "4 ";                            13225000
          ARRAY MASK(0:11)=PB_                                          13230000
                     %176324,0,                                         13235000
                     %060075,%036000,                                   13240000
                     %000173,%100000,                                   13245000
                     %000170,0,                                         13250000
                     %017773,%140000,                                   13255000
                     %014770,%040000;                                   13260000
          ARRAY LIB(0:5)=PB_                                            13265000
                     "A ", <<ABSOLUTE>>                                 13270000
                     "S ", <<SYSTEM SL>>                                13275000
                     "P ", <<PUBLIC SL>>                                13280000
                     "G ", <<GROUP SL>>                                 13285000
                     "  "; <<PROGRAM>>                                  13290000
          ARRAY XINDICATOR(0:0)=PB:="X ";                      <<06103>>13295000
          ARRAY CHARM(0:4)=PB_                                          13300000
                     "O ",   <<OCTAL>>                                  13305000
                     "I ",   <<DECIMAL>>                                13310000
                     "A ",   <<ASCII>>                                  13315000
                     "H ",   <<HEXIDECIMAL>>                            13320000
                     "C ",   <<CODE>>                          <<01549>>13325000
                     "  ";                                              13330000
          ARRAY SPECIALS(0:SPECIALS'END)=PB_                   <<01549>>13335000
                      "< ",                                    <<01549>>13340000
                      "> ",                                    <<01549>>13345000
                      "= ",                                    <<01549>>13350000
                      "@ ",                                    <<01549>>13355000
                      "# ",                                    <<01549>>13360000
                      ": ",                                    <<01549>>13365000
                      "<=",                                    <<01549>>13370000
                      ">=",                                    <<01549>>13375000
                      "<>";                                    <<01549>>13380000
          ARRAY ERRMSX(0:20)=PB_                                        13385000
                     "SYNTAX",         <<0>>                            13390000
                     "NO-NO ",         <<1>>                            13395000
                     "BOUNDS",         <<2>>                            13400000
                     "FULL  ",         <<3>>                            13405000
                     "SAME  ",         <<4>>                            13410000
                     "CHECK ";         <<5>>                            13415000
          ARRAY READMSG(0:6)=PB_                                        13420000
                     "READ PENDING";                                    13425000
            << >>                                                       13430000
          INTEGER X=X;                                                  13435000
          ARRAY BASE(*)=DB+0;                                           13440000
          ARRAY AS0(*)=S-0;                                    <<01069>>13445000
          ARRAY AS4(*)=S-4;                                    <<01069>>13450000
          INTEGER Q0=Q-0;                                      <<01069>>13455000
          ARRAY STAK(*)=Q+0;                                            13460000
          INTEGER S1=S-1, S2=S-2, S3=S-3, S4=S-4, S5=S-5, S6=S-6;       13465000
          INTEGER S0=S-0, S7=S-7;                                       13470000
          DOUBLE DS1=S-1,DS2=S-2,DS3=S-3,DS4=S-4,DS5=S-5;      <<06103>>13475000
          DOUBLE DS6=S-6,DS7=S-7;                              <<06103>>13480000
          POINTER P1=S-1, P2=S-2, P3=S-3, P4=S-4, P5=S-5, P6=S-6;       13485000
          BYTE B1=S-1;                                                  13490000
          BYTE POINTER BPS0=S-0;                               <<01549>>13495000
          INTEGER USERS=Q-4, XREGISTER=Q-3, DELTAP=Q-2,                 13500000
                  MARK=Q+0;                                             13505000
          LOGICAL BREAKFLAG;       <<=Q+1>>                    <<01040>>13510000
          DOUBLE DEBUGID;                                      <<06663>>13515000
          DOUBLE  OBJ;                                         <<06663>>13520000
          LOGICAL ARRAY OBJID(*)=OBJ;                          <<06663>>13525000
          DEBUGIDDEF;                                          <<06103>>13530000
          LOGICAL EXIT'TO'TRAP;    << USER TRAP >>             <<01069>>13535000
          INTEGER PLABEL;                                      <<01069>>13540000
          INTEGER PLABELMODE;                                  <<06103>>13545000
          INTEGER J;               <<SUBR LOCALS>>                      13550000
          INTEGER NEG;                                                  13555000
          LOGICAL EXPRLAB;         <<EXPRESSION SUBR LABEL>>            13560000
          LOGICAL CONTLAB;         <<CONTENTS SUBR LABEL>>              13565000
          LOGICAL RVALLAB;         <<REGVALUE SUBR LABEL>>              13570000
          logical printflag,ldev'in,ldev'out,device,fnum;      <<06671>>13575000
          LOGICAL PRIV,SYS,DUMPFLAG,FLAG,SYSBRK,CRIT;                   13580000
          INTEGER I,K,CHAR,INDEX,MODE,DISPL,CNT,RCNT;          <<06663>>13585000
          DOUBLE  OBJR;   <<REPLACES "RESULT" UTILITY VAR>>    <<06663>>13590000
          LOGICAL ARRAY OBJIDR(*) = OBJR;                      <<06663>>13595000
          DOUBLE  OBJS;   <<REPLACES "SEGID" SINGLEWORD SEGID>><<06663>>13600000
          LOGICAL ARRAY OBJIDS(*) = OBJS;                      <<06663>>13605000
          DOUBLE  OBJTEMP;<<TEMPORARY HOLDER                 >><<06663>>13610000
          INTEGER STDINDEX;                                    <<06103>>13615000
          INTEGER CHMODE,INX,PINX,BANK;                        <<06663>>13620000
          LOGICAL FLAGX,FLAGY,WARN;                                     13625000
          INTEGER SEGX,DISPLX;                                          13630000
          BYTE POINTER PINFO,POUT,PIN'LOC,SEG'LOC,PROCDESIG;   <<01549>>13635000
          POINTER COND'STAK;                                   <<01549>>13640000
          ARRAY   REG(0:REGEXX)=Q;                                      13645000
          ARRAY   TEMP(0:7)=Q;                                          13650000
          INTEGER    RPCB=REG+REGR   ,RSTK=REG+REGDB  ,                 13655000
                     RBNK=REG+REGBNK ,                                  13660000
                     RDBV=REG+REGDBV ,RDBX=REG+REGDBX ,                 13665000
                     RX  =REG+REGX   ,RST =REG+REGST  ,                 13670000
                     RDL =REG+REGDL  ,RQ  =REG+REGQ   ,                 13675000
                     RS  =REG+REGS   ,RZ  =REG+REGZ   ,                 13680000
                     RCST=REG+REGPB  ,RP  =REG+REGP   ,                 13685000
                     RPL =REG+REGPL , REA =REG+REGEA,                   13690000
                     RLOG=REG+REGLOG ,RDX =REG+REGDX  ,                 13695000
                     RTC =REG+REGTC  ,RTL =REG+REGTL  ,                 13700000
                     RMF =REG+REGMF  ,RLSTT=REG+REGLSTT,       <<06103>>13705000
                     RTP =REG+REGTP  ;                                  13710000
          INTEGER    STTLEN;   <<LENGTH OF STT>>               <<00180>>13715000
          DOUBLE  DRDBV=RBNK;                                           13720000
          INTEGER MAXSTACK; << MAXIMUM STK RELATIVE TO DB >>   <<01.03>>13725000
          ARRAY QARRAY(*) = Q+0;                               <<06633>>13730000
          INTEGER PCBGLOBLOC;                                  <<06633>>13735000
          LOGICAL PXFIXEDLOC;                                  <<06633>>13740000
          COMMENT:        **** WARNING ****                    <<01069>>13745000
                   ARRAY INFO MUST BE DECLARED LAST;           <<01069>>13750000
          ARRAY   INFO(0:LAST'IND)=Q;                          <<01549>>13755000
                                                               <<01549>>13760000
          << SUBROUTINE LOCALS >>                              <<01549>>13765000
          DEFINE                                               <<01549>>13770000
                     << LOCATION >>                            <<01549>>13775000
                     NUM'FIELDS    = INFO(IND'NUM'FIELDS)#,    <<01549>>13780000
                     PROCOFFSET'OK = INFO(IND'PROCOFFSET)#,    <<01549>>13785000
                     LOC'SEGTYPE   = INFO(IND'LOC'SEGTYPE)#,   <<01549>>13790000
                     PROC'FLAGS    = INFO(IND'PROC'FLAG)#,     <<06671>>13795000
                     PINNR         = INFO(IND'PINNR'NUM)#,     <<06671>>13800000
                     DELIM         = INFO(IND'DELIM)#,         <<01549>>13805000
                     << CONDITION >>                           <<01549>>13810000
                     PRIM'INFO     = INFO(IND'PRIM'INFO)#,     <<01549>>13815000
                     OP'INFO       = INFO(IND'OP'INFO)#,       <<01549>>13820000
                     << SENDIT >>                              <<01549>>13825000
                     DECOMP'STATE  = INFO(IND'DECOMP'STATE)#,  <<01549>>13830000
                     ROW'SIZE      = INFO(IND'ROW'SIZE)#,      <<01549>>13835000
                     << GENERAL SUBROUTINE TEMP >>             <<01549>>13840000
                     S'TEMP        = INFO(LAST'IND)#;          <<01549>>13845000
            << >>                                                       13850000
          SWITCH SWCOM_ DUMPL  ,MODIFYL,LISTL  ,BREAKL ,CLEARL ,        13855000
                        TRACEL ,FREEZL ,UNFRZL ,RETURNL,                13860000
                        CALCL  ,ACCEPT ,EXITL  ,HELPL  ,SETRL  ;        13865000
          SWITCH MRSW _ LLNO,LLST,LLXR,                                 13870000
                        LLNO,LLNO,LLNO,                                 13875000
                        LLNO,LLNO,LLNO,                                 13880000
                        LLNO,LLDL,LLQ ,LLS ,LLZ ,                       13885000
                        LLNO,LLP ,LLNO,LLNO,                            13890000
                        LLN ,LLN ,LLN ,LLN ;                            13895000
$PAGE "          I/O SUBROUTINES"                              <<01007>>13900000
            << >>                                                       13905000
  SUBROUTINE CLEAR;          <<CLEAR BUFFER>>                           13910000
    BEGIN                                                               13915000
          INFO_"  ";                                                    13920000
          MOVE INFO(1)_INFO,(46);                                       13925000
          TOS_@INFO&LSL(1);                                             13930000
          ASSEMBLE(DUP);                                                13935000
          @PINFO_TOS;                                                   13940000
          @POUT_TOS+2;                                                  13945000
    END;                                                                13950000
            << >>                                                       13955000
  SUBROUTINE GETCHAR;              <<SCAN TO NON BLANK OR CR>>          13960000
    BEGIN                                                               13965000
          IF LOGICAL(PINFO)=CHARCR THEN RETURN;                         13970000
          TOS_X;                                                        13975000
          SCAN PINFO(1) WHILE " ",1;                                    13980000
          @PINFO_TOS;                                                   13985000
          X_TOS;                                                        13990000
    END;                                                                13995000
            << >>                                                       14000000
  SUBROUTINE TYPE;                 <<TYPE PROMPT LINE - NO CRLF>>       14005000
    BEGIN                                                               14010000
          TOS_@INFO(1)&LSL(1)-@POUT;                                    14015000
          TOS_0D;                                                       14020000
          TOS_PRINTFLAG;                                                14025000
          IF = THEN                                                     14030000
               BEGIN DEL;                                               14035000
                   tos:=ldev'out;                              <<06671>>14040000
               END;                                                     14045000
      IF SYS>1 THEN <<NEED TO BE IN CONSOLE MODE>>             <<00601>>14050000
      BEGIN                                                    <<00601>>14055000
         ASSEMBLE(DUP,DZRO); ASSEMBLE(CAB);                    <<00601>>14060000
         ATTACHIO(*,0,0,0,31,0,1,0,%411);<<CONSOLE MODE>>      <<00601>>14065000
         ATTACHIO(*,0,0,@INFO(1),1,S3,%320,0,%401);<<DO PROMPT><<00601>>14070000
      END                                                      <<00601>>14075000
      ELSE <<NORMAL I/O>>                                      <<00601>>14080000
          ATTACHIO(*,0,0,@INFO(1),1,S3,%320,0,1);                       14085000
          DEL;                                                          14090000
    END;                                                                14095000
            << >>                                                       14100000
  SUBROUTINE OUTPUT;                 <<OUTPUT LINE TO DEV>>             14105000
    BEGIN                                                               14110000
          X_47;                                                         14115000
          WHILE (X_X-1)>1 DO                                            14120000
               IF INFO(X)<>"  " THEN GOTO L;                            14125000
    L:    TOS_X;                                                        14130000
          TOS_0D;                                                       14135000
          TOS_PRINTFLAG;                                                14140000
          IF < THEN                                                     14145000
               BEGIN FWRITE(FNUM,INFO(1),S3,0);                         14150000
                     ASSEMBLE(DDEL,DDEL);                               14155000
                     RETURN;                                            14160000
               END;                                                     14165000
          IF = THEN                                                     14170000
               BEGIN DEL;                                               14175000
                   tos:=ldev'out;                              <<06671>>14180000
               END;                                                     14185000
      ATTACHIO(*,0,0,@INFO(1),1,S3,0,0,(IF SYS>1 THEN %401 ELSE 1));    14190000
          DEL;                                                          14195000
    END;                                                                14200000
            << >>                                                       14205000
  SUBROUTINE INPUT;                <<TERMINAL INPUT>>                   14210000
    BEGIN                                                               14215000
    LL:   CLEAR;                                                        14220000
    tos:=attachio(ldev'in,0,0,@info(1),0,34,5,0,               <<06671>>14225000
                    (IF SYS>1 THEN %401  ELSE 1));             <<00601>>14230000
          DEL;                                                          14235000
   IF TOS.(8:8)=%173 AND PCBI'(PINX+RESABORTWD).               <<01549>>14240000
      CRITFLAG = 0 THEN                                        <<01549>>14245000
             BEGIN CLEAR;                                               14250000
                   MOVE INFO(2)_READMSG(0),(6);                         14255000
                   OUTPUT;                                              14260000
                   GOTO LL;                                             14265000
             END;                                                       14270000
    if sys>1 then attachio(ldev'in,0,0,0,31,0,0,0,%401);       <<06671>>14275000
          X_47;                                                         14280000
          WHILE(X_X-1)>0 DO                                             14285000
               IF INFO(X)<>"  " THEN GOTO L;                            14290000
    L:    INFO(X_X+1)_XCR;                                              14295000
          GETCHAR;                                                      14300000
    END;                                                                14305000
            << >>                                                       14310000
  SUBROUTINE LINE;                   <<LINE SPACE>>                     14315000
    BEGIN                                                               14320000
          CLEAR;                                                        14325000
          OUTPUT;                                                       14330000
    END;                                                                14335000
            << >>                                                       14340000
  LOGICAL SUBROUTINE GETSTRING;                                         14345000
          <<RETURNS - 0 CR, 1 OK, 2 ">>                                 14350000
    BEGIN                                                               14355000
          @PINFO_@PINFO+1;                                              14360000
          TOS_1;                                                        14365000
          IF LOGICAL(PINFO)=CHARCR THEN TOS_TOS-1;                      14370000
          IF PINFO=%42 THEN TOS_TOS+1;                                  14375000
          S2_TOS;                                                       14380000
    END;                                                                14385000
            << >>                                              <<01549>>14390000
  SUBROUTINE GETTOKEN (TOKEN,DESCRIPTOR,STATE);                <<01549>>14395000
    VALUE STATE;                                               <<01549>>14400000
    INTEGER STATE, DESCRIPTOR;                                 <<01549>>14405000
    BYTE POINTER TOKEN;                                        <<01549>>14410000
    BEGIN                                                      <<01549>>14415000
    COMMENT:                                                   <<01549>>14420000
          THIS ROUTINE GETS THE NEXT TOKEN AND RETURNS         <<01549>>14425000
          A BYTE POINTER TO IT IN TOKEN.  STATE INDICATES      <<01549>>14430000
          WHETHER OR NOT BLANKS ARE IMPORTANT, AND THUS        <<01549>>14435000
          AFFECTS THE DEFINITION OF IDENTIFIERS. FOR STATE=0   <<01549>>14440000
          BLANKS ARE NOT IMPORTANT ( G 1. = G1.) AND           <<01549>>14445000
          IDENTIFIERS CONSIST OF ALPHA CHARACTERS ONLY.        <<01549>>14450000
          WHEN STATE=1 BLANKS ARE SIGNIFICANT AND IDENT.       <<01549>>14455000
          CONSIST OF ALPHANUMERICS AND "'"S. DESCRIPTOR IS     <<01549>>14460000
          DEFINED AS FOLLOWS:                                  <<01549>>14465000
             DESCRIPTOR.(8:8) = TOKEN NUMBER                   <<01549>>14470000
             DESCRIPTOR.(0:8) = TOKEN LENGTH <<IDENT&NUM ONLY>><<01549>>14475000
          CONVENTIONS:                                         <<01549>>14480000
             THIS ROUTINE ASSUMES PINFO IS POINTING TO THE     <<01549>>14485000
             FIRST CHARACTER OF THE TOKEN TO BE RETURNED.      <<01549>>14490000
             IT LEAVES PINFO POINTING TO THE 1ST CHARACTER     <<01549>>14495000
             OF THE NEXT TOKEN.;                               <<01549>>14500000
                                                               <<01549>>14505000
          @TOKEN := @PINFO;  << RETURN POINTER >>              <<01549>>14510000
          DESCRIPTOR.TOKEN'TYPE := T'INVALID;                  <<01549>>14515000
                                                               <<01549>>14520000
          IF PINFO = ALPHA THEN                                <<01549>>14525000
             BEGIN                                             <<01549>>14530000
             IF STATE=0 THEN                                   <<01549>>14535000
                BEGIN                                          <<01549>>14540000
                MOVE PINFO:=PINFO WHILE A,1;                   <<02344>>14545000
                @PINFO := TOS-1;                               <<01549>>14550000
                END                                            <<01549>>14555000
             ELSE                                              <<01549>>14560000
                BEGIN                                          <<01549>>14565000
                TOS := @PINFO-1; << SET UP POINTER >>          <<01549>>14570000
                DO                                             <<01549>>14575000
                  BEGIN                                        <<01549>>14580000
                  @BPS0 := @BPS0+1;                            <<01549>>14585000
                  MOVE * := BPS0 WHILE AN,1;                   <<02344>>14590000
                  END                                          <<01549>>14595000
                UNTIL PINFO <> "'";                            <<01549>>14600000
                @PINFO := TOS-1;                               <<01549>>14605000
                END;                                           <<01549>>14610000
             DESCRIPTOR.TOKEN'TYPE := T'IDENT;                 <<01549>>14615000
             DESCRIPTOR.TOKEN'LEN := @PINFO-@TOKEN+1;          <<01549>>14620000
             GETCHAR;  << PINFO SET TO BEGINNING NEXT TOKEN >> <<01549>>14625000
             END                                               <<01549>>14630000
          ELSE IF PINFO=NUMERIC OR PINFO="%" OR PINFO="#" THEN <<01549>>14635000
             BEGIN                                             <<01549>>14640000
             IF PINFO="#" OR PINFO="%" THEN GETCHAR;<<SKIP#-%>><<01549>>14645000
             WHILE PINFO=NUMERIC DO @PINFO := @PINFO+1;        <<01549>>14650000
             @PINFO := @PINFO-1;                               <<01549>>14655000
             DESCRIPTOR.TOKEN'TYPE := T'NUMBER;                <<01549>>14660000
             DESCRIPTOR.TOKEN'LEN := @PINFO-@TOKEN+1;          <<01549>>14665000
             GETCHAR; << PINFO SET TO BEGINNING NEXT TOKEN >>  <<01549>>14670000
             END                                               <<01549>>14675000
          ELSE  << SPECIAL >>                                  <<01549>>14680000
             BEGIN                                             <<01549>>14685000
             X := -1;                                          <<01549>>14690000
             WHILE (X:=X+1) < NUM'SPECIALS AND                 <<01549>>14695000
                   LOGICAL(PINFO) <> SPECIALS(X)&LSR(8) DO     <<01549>>14700000
                BEGIN END;                                     <<01549>>14705000
             IF X < NUM'SPECIALS THEN                          <<01549>>14710000
                BEGIN << HAD A MATCH >>                        <<01549>>14715000
                DESCRIPTOR.TOKEN'TYPE := X+FIRSTSPECIAL;       <<01549>>14720000
                IF DESCRIPTOR.TOKEN'TYPE = T'LT THEN           <<01549>>14725000
                   BEGIN << CHECK FOR "<>" & "<=" >>           <<01549>>14730000
                   GETCHAR;                                    <<01549>>14735000
                   IF PINFO = ">" THEN                         <<01549>>14740000
                      BEGIN                                    <<01549>>14745000
                      DESCRIPTOR.TOKEN'TYPE := T'NEQ;          <<01549>>14750000
                      GETCHAR;                                 <<01549>>14755000
                      END                                      <<01549>>14760000
                   ELSE IF PINFO = "=" THEN                    <<01549>>14765000
                      BEGIN                                    <<01549>>14770000
                      DESCRIPTOR.TOKEN'TYPE := T'LTE;          <<01549>>14775000
                      GETCHAR;                                 <<01549>>14780000
                      END;                                     <<01549>>14785000
                   END                                         <<01549>>14790000
                ELSE IF DESCRIPTOR.TOKEN'TYPE = T'GT THEN      <<01549>>14795000
                   BEGIN << CHECK FOR ">=" >>                  <<01549>>14800000
                   GETCHAR;                                    <<01549>>14805000
                   IF PINFO = "=" THEN                         <<01549>>14810000
                      BEGIN                                    <<01549>>14815000
                      DESCRIPTOR.TOKEN'TYPE := T'GTE;          <<01549>>14820000
                      GETCHAR;                                 <<01549>>14825000
                      END;                                     <<01549>>14830000
                   END                                         <<01549>>14835000
                ELSE GETCHAR;                                  <<01549>>14840000
                END;                                           <<01549>>14845000
             END;                                              <<01549>>14850000
                                                               <<01549>>14855000
    END; << GETTOKEN >>                                        <<01549>>14860000
                                                               <<01549>>14865000
            << >>                                              <<01549>>14870000
  INTEGER SUBROUTINE NEXTTOKEN;                                <<01549>>14875000
    BEGIN                                                      <<01549>>14880000
    COMMENT:                                                   <<01549>>14885000
          THIS ROUTINE RETURNS THE TYPE OF THE NEXT            <<01549>>14890000
          TOKEN.                                               <<01549>>14895000
          CONVENTIONS:                                         <<01549>>14900000
             ENTRY&   PINFO IS POINTING TO 1ST CHARACTER       <<01549>>14905000
             EXIT:    OF NEXT TOKEN.;                          <<01549>>14910000
                                                               <<01549>>14915000
          NEXTTOKEN := T'INVALID;                              <<01549>>14920000
          IF PINFO=ALPHA THEN NEXTTOKEN := T'IDENT             <<01549>>14925000
          ELSE IF PINFO=NUMERIC OR PINFO="#" OR PINFO="%" THEN <<01549>>14930000
             NEXTTOKEN := T'NUMBER                             <<01549>>14935000
          ELSE << SPECIAL >>                                   <<01549>>14940000
             BEGIN                                             <<01549>>14945000
             X := -1;                                          <<01549>>14950000
             WHILE (X:=X+1) < NUM'SPECIALS AND                 <<01549>>14955000
                   LOGICAL(PINFO) <> SPECIALS(X)&LSR(8) DO     <<01549>>14960000
                BEGIN END;                                     <<01549>>14965000
             IF X < NUM'SPECIALS THEN                          <<01549>>14970000
                BEGIN                                          <<01549>>14975000
                NEXTTOKEN := X+FIRSTSPECIAL;                   <<01549>>14980000
                IF PINFO = "<" THEN                            <<01549>>14985000
                   BEGIN << CHECK FOR "<>" OR "<=" >>          <<01549>>14990000
                   SCAN PINFO(1) WHILE " ",1;                  <<01549>>14995000
                   IF BPS0 = ">" THEN                          <<01549>>15000000
                      BEGIN                                    <<01549>>15005000
                      DEL;                                     <<01549>>15010000
                      NEXTTOKEN := T'NEQ;                      <<01549>>15015000
                      END                                      <<01549>>15020000
                   ELSE IF BPS0 = "=" THEN                     <<01549>>15025000
                      BEGIN                                    <<01549>>15030000
                      DEL;  << DELETE POINTER >>               <<01549>>15035000
                      NEXTTOKEN := T'LTE;                      <<01549>>15040000
                      END                                      <<01549>>15045000
                   ELSE DEL; << REMOVE BYTE POINTER >>         <<01549>>15050000
                   END                                         <<01549>>15055000
                ELSE IF PINFO = ">" THEN                       <<01549>>15060000
                   BEGIN << CHECK FOR ">=" >>                  <<01549>>15065000
                   SCAN PINFO(1) WHILE " ",1;                  <<01549>>15070000
                   IF BPS0 = "=" THEN                          <<01549>>15075000
                      BEGIN                                    <<01549>>15080000
                      DEL; << DELETE POINTER >>                <<01549>>15085000
                      NEXTTOKEN := T'GTE;                      <<01549>>15090000
                      END                                      <<01549>>15095000
                   ELSE DEL; << DELETE BYTE POINTER >>         <<01549>>15100000
                   END                                         <<01549>>15105000
                END;                                           <<01549>>15110000
             END;                                              <<01549>>15115000
                                                               <<01549>>15120000
    END; << NEXTTOKEN >>                                       <<01549>>15125000
            << >>                                              <<01549>>15130000
  LOGICAL SUBROUTINE OCTAL;        <<ASCII TO OCTAL IN X>>     <<01549>>15135000
          <<RETURNS - 0 ERROR, 1 OK, 2 NULL >>                          15140000
    BEGIN                                                               15145000
          X_0;                                                          15150000
          TOS_0;                                                        15155000
          IF PINFO=%42 THEN            <<">>                            15160000
               BEGIN TOS_1;                                             15165000
                     TOS_0;                                             15170000
                     TOS_GETSTRING;                                     15175000
                     TOS_TOS-1;                                         15180000
                     DEL;                                               15185000
                     IF < THEN GOTO LZ;                                 15190000
                     IF > THEN GOTO LA;                                 15195000
                     TOS_PINFO;                                         15200000
                     TOS_TOS LOR TOS;                                   15205000
                     TOS_GETSTRING;                                     15210000
                     TOS_TOS-1;                                         15215000
                     DEL;                                               15220000
                     IF < THEN GOTO LZ;                                 15225000
                     IF > THEN GOTO LA;                                 15230000
                     TOS_TOS&LSL(8);                                    15235000
                     TOS_PINFO;                                         15240000
                     TOS_TOS LOR TOS;                                   15245000
                     TOS_GETSTRING;                                     15250000
                     IF TOS<>2 THEN GOTO LZ;                            15255000
    LA:              ASSEMBLE(DUP,STAX);                                15260000
                     GETCHAR;                                           15265000
                     GOTO LX;                                           15270000
               END;                                                     15275000
          IF PINFO="#" THEN                                             15280000
               BEGIN TOS_TOS+1;                                         15285000
                     GETCHAR;                                           15290000
                     GOTO LL;                                           15295000
               END;                                                     15300000
          IF PINFO="%" THEN GETCHAR;                                    15305000
    LL:   TOS_2;                                                        15310000
    L:    TOS_PINFO;                                                    15315000
          IF <= THEN GOTO LX;                                           15320000
          TOS_TOS LAND %17;                                             15325000
          ASSEMBLE(DUP);                                                15330000
          IF LOGICAL(S3) THEN                                           15335000
               BEGIN IF TOS>9 THEN GOTO LX;                             15340000
                     TOS_10;                                            15345000
               END ELSE                                                 15350000
               BEGIN IF TOS>7 THEN GOTO LX;                             15355000
                     TOS_8;                                             15360000
               END;                                                     15365000
          TOS_X;                                                        15370000
          ASSEMBLE(LMPY);                                               15375000
          ASSEMBLE(XCH,DEL);                                            15380000
          IF <> THEN GOTO LY;                                           15385000
          TOS_TOS+TOS;                                                  15390000
          IF LOGICAL(S2) THEN                                           15395000
               BEGIN ASSEMBLE(TEST);                                    15400000
                     IF < THEN GOTO LZ;                                 15405000
               END;                                                     15410000
          X_TOS;                                                        15415000
          GETCHAR;                                                      15420000
          DEL;                                                          15425000
          TOS_1;                                                        15430000
          GOTO L;                                                       15435000
    LY:   DEL;                                                          15440000
    LZ:   ASSEMBLE(ZROB);                                               15445000
    LX:   ASSEMBLE(DEL,DELB);                                           15450000
          S2_TOS;                                                       15455000
    END;                                                                15460000
$PAGE "          ARITHMETIC SYNTAX ANALYZER AND EVALUATOR"     <<01007>>15465000
  LOGICAL SUBROUTINE FACTOR;       <<RESULT IN X>>                      15470000
          <<RETURNS - 0 ERROR, 1 OK, 2 NULL >>                          15475000
    BEGIN                                                               15480000
          IF PINFO="(" THEN GOTO L;                                     15485000
          IF PINFO="'" THEN GOTO L1;                                    15490000
          IF PINFO="$" THEN GOTO L2;                                    15495000
          TOS_OCTAL;                                                    15500000
          ASSEMBLE(DUP);                                                15505000
          IF NOT LOGICAL(TOS) THEN                                      15510000
             BEGIN S2_TOS; RETURN; END;                                 15515000
          DEL;                                                          15520000
          GOTO LX;                                                      15525000
    L:    GETCHAR;                                                      15530000
          TOS_0;                                                        15535000
          TOS_EXPRLAB;                                                  15540000
          ASSEMBLE(SCAL 0);                                             15545000
          IF NOT LOGICAL(TOS) THEN RETURN;                              15550000
          IF PINFO<>")" THEN RETURN;                                    15555000
          GETCHAR;                                                      15560000
          GOTO LX;                                                      15565000
    L1:   GETCHAR;                                                      15570000
          TOS_0;                                                        15575000
          TOS_CONTLAB;                                                  15580000
          ASSEMBLE(SCAL 0);                                             15585000
          IF NOT LOGICAL(TOS) THEN RETURN;                              15590000
          IF PINFO<>"'" THEN RETURN;                                    15595000
          GETCHAR;                                                      15600000
          GOTO LX;                                                      15605000
    L2:   GETCHAR;                                                      15610000
          TOS_0;                                                        15615000
          TOS_RVALLAB;                                                  15620000
          ASSEMBLE(SCAL 0);                                             15625000
          IF NOT LOGICAL(TOS) THEN RETURN;                              15630000
          GOTO LX;                                                      15635000
    LX:   IF PINFO="!" THEN                                             15640000
             BEGIN GETCHAR;                                             15645000
                   IF PINFO<>"(" THEN RETURN;                           15650000
                   GETCHAR;                                             15655000
                   TOS_X;                                               15660000
                   TOS_0;                                               15665000
                   TOS_EXPRLAB;                                         15670000
                   ASSEMBLE(SCAL 0);                                    15675000
                   IF NOT LOGICAL(TOS) OR PINFO<>":" THEN               15680000
                      BEGIN DEL; RETURN; END;                           15685000
                   GETCHAR;                                             15690000
                   TOS_X;                                               15695000
                   TOS_0;                                               15700000
                   TOS_EXPRLAB;                                         15705000
                   ASSEMBLE(SCAL 0);                                    15710000
                   IF NOT LOGICAL(TOS) OR PINFO<>")" THEN               15715000
                      BEGIN DDEL; RETURN; END;                          15720000
                   GETCHAR;                                             15725000
                   TOS_%26400;                                          15730000
                   ASSEMBLE(XCH);                                       15735000
                   TOS.( 8:4)_TOS;                                      15740000
                   TOS.(12:4)_X;                                        15745000
                   ASSEMBLE(XCH);                                       15750000
                   ASSEMBLE(XEQ 1);                                     15755000
                   X_TOS;                                               15760000
                   DEL;                                                 15765000
             END;                                                       15770000
          FACTOR_1;                                                     15775000
          RETURN;                                                       15780000
    END;                                                                15785000
           << >>                                                        15790000
  LOGICAL SUBROUTINE OPER(S);      <<CHAR TERMINATORS>>                 15795000
COMMENT:                                                       <<01007>>15800000
  FUNCTION: Test the next byte in the input buffer against     <<01007>>15805000
            two bytes in the parameter S.                      <<01007>>15810000
  INPUT: S=>Integer by value: Usually contains 2 ASCII chars   <<01007>>15815000
  OUTPUT: OPER=>Specifies which, if either, of the two bytes   <<01007>>15820000
                in S matches the next character in the input   <<01007>>15825000
                buffer "PINFO".   0=>No match                  <<01007>>15830000
                                  1=>Matches left byte of S    <<01007>>15835000
                                  2=>Matches right byte of S   <<01007>>15840000
  ;                                                            <<01007>>15845000
    VALUE   S;                                                          15850000
    INTEGER S;                                                          15855000
    BEGIN                                                               15860000
          IF INTEGER(PINFO)=S.(0:8) THEN                                15865000
               BEGIN TOS_1; GOTO L; END;                                15870000
          IF INTEGER(PINFO)=S.(8:8) THEN                                15875000
               BEGIN TOS_2; GOTO L; END;                                15880000
          TOS_0;                                                        15885000
    L:    S3_TOS;                  <<OPER>>                             15890000
    END;                                                                15895000
            << >>                                                       15900000
  LOGICAL SUBROUTINE TERM;         <<RESULT IN X>>                      15905000
Comment:                                                       <<01007>>15910000
  FUNCTION:Evaluate a single term of an arithmetic expression  <<01007>>15915000
           doing the multiply, devide, & calculations within   <<01007>>15920000
           parenthesis.                                        <<01007>>15925000
  OUTPUT:Value of expression is contained in the X-register.   <<01007>>15930000
        TERM => Indicates type of arithmetic term encountered  <<01007>>15935000
                0=>Invalid term or error                       <<01007>>15940000
                1=>Valid term      OK                          <<01007>>15945000
                2=>Null term                                   ((DL114))15950000
  ;                                                            <<01007>>15955000
    BEGIN                                                               15960000
          TERM_FACTOR;                                                  15965000
          IF NOT LOGICAL(S1) THEN RETURN;                               15970000
          TOS_X;                                                        15975000
          GOTO LL;                                                      15980000
    L:    GETCHAR;                                                      15985000
          IF NOT FACTOR THEN GOTO L2;                                   15990000
          IF TOS=1 THEN TOS_TOS*X ELSE                                  15995000
               IF X=0 THEN GOTO L1                                      16000000
                      ELSE TOS_TOS/X;                                   16005000
    LL:   TOS_OPER("*/");                                               16010000
          ASSEMBLE(TEST);                                               16015000
          IF <> THEN GOTO L;                                            16020000
          DEL;                                                          16025000
          X_TOS;                                                        16030000
          RETURN;                                                       16035000
    L2:   DEL;                                                          16040000
    L1:   DEL;                                                          16045000
          TERM_0;                                                       16050000
    END;                                                                16055000
            << >>                                                       16060000
  LOGICAL SUBROUTINE EXPRESSION;   <<RESULT IN X>>                      16065000
Comment:                                                       <<01007>>16070000
  FUNCTION:Evaluate an arithmetic expression of the form       <<01007>>16075000
           Term +or- Term  Where "Term" can be a single numeric<<01007>>16080000
           value, Term*Term, Term/Term, or (Term).             <<01007>>16085000
  OUTPUT:  Value of expression in X-register.                  <<01007>>16090000
   EXPRESSION=>Validity of expression syntax  0=>Error         <<01007>>16095000
                                              1=>Valid         <<01007>>16100000
                                              2=>Null          <<01007>>16105000
  ;                                                            <<01007>>16110000
    BEGIN                                                               16115000
          EXPRESSION_1;                                                 16120000
          TOS:=0;           <<Accumulator of expression value>><<01007>>16125000
          TOS:=OPER("+-");          <<Valid leading operators>><<01007>>16130000
          ASSEMBLE(TEST);                                               16135000
          IF <> THEN GOTO L;                                            16140000
          DDEL;                  <<Not +or- better be numeric>><<01007>>16145000
          EXPRESSION_TERM;                                              16150000
          IF NOT LOGICAL(S1) THEN RETURN;   <<Invalid of null>><<01007>>16155000
          TOS:=X;                             <<Value of term>><<01007>>16160000
          GOTO LL;                                                      16165000
    L:    GETCHAR;                    <<Bypass +or- character>><<01007>>16170000
          IF NOT TERM THEN GOTO L2;                            <<01007>>16175000
                         <<Must be a term after a +- operator>><<01007>>16180000
          IF TOS=1 THEN TOS:=TOS+X        <<Add term to accum>><<01007>>16185000
                   ELSE                                                 16190000
                    BEGIN                                               16195000
                     TOS _ TOS-X;                                       16200000
                     NEG:=1;<<This is a global flag to signal>><<01007>>16205000
                     <<a special type of syntax error in some>><<01007>>16210000
                                                   <<commands>><<01007>>16215000
                    END;                                                16220000
    LL:   TOS_OPER("+-");                                               16225000
          ASSEMBLE(TEST);                                               16230000
          IF <> THEN GOTO L;                                            16235000
          DEL;  <<Something other than +or- between two terms>><<01007>>16240000
                                                 <<is invalid>><<01007>>16245000
          X:=TOS;              <<Set expression value to zero>><<01007>>16250000
          RETURN;                                                       16255000
    L2:   DDEL;                                                         16260000
          EXPRESSION_0;                                                 16265000
    END;                                                                16270000
            << >>                                              <<01549>>16275000
            << >>                                                       16280000
  LOGICAL SUBROUTINE FIELD(F');    <<RESULT IN X>>                      16285000
Comment:                                                       <<01007>>16290000
  FUNCTION:Evaluate field of a debug command with the general  <<01007>>16295000
          format: Expression Delimiter  Where "Expression" is  <<01007>>16300000
          defined under the subroutine of the same name and    <<01007>>16305000
          "Delimiter" is either a carriage return or one of two<<01007>>16310000
          special delimiting characters specified in F'.       <<01007>>16315000
  OUTPUT:X-register is set by EXPRESSION.                      <<01007>>16320000
        FIELD=>The syntax of the expression and the delimiter  <<01007>>16325000
        0=>Valid syntax delimited by right byte of F'          <<01007>>16330000
        1=>Valid syntax delimited by left byte of F'           <<01007>>16335000
        2=>Valid syntax delimited by CR                        <<01007>>16340000
        3=>Unused                                              <<01007>>16345000
          4=>Invalid                   Right                   <<01007>>16350000
          5=>Invalid                   Left                    <<01007>>16355000
          6=>Invalid                   CR                      <<01007>>16360000
          SPECIAL CASE:If signbit of F' is set, any delimiter  <<01007>>16365000
                          will due and                         <<01007>>16370000
          2=>Valid expression with any delimiter               <<01007>>16375000
          6=>Null expression with any delimiterR               <<01007>>16380000
  ;                                                            <<01007>>16385000
    VALUE   F';                                                         16390000
    INTEGER F';                                                         16395000
    BEGIN                                                               16400000
          TOS_EXPRESSION;                                               16405000
          TOS_(TOS-1)&LSL(2);                                           16410000
          IF < THEN GOTO ERROR;       <<Zero return from EXPR>><<01007>>16415000
          TOS_OPER(S2.(1:15));                                          16420000
          TOS_TOS-1;                                                    16425000
          IF < THEN GOTO L;           <<Zero return from OPER>><<01007>>16430000
          GETCHAR;                                                      16435000
          GOTO LX;                                                      16440000
    L:    IF S3<0 THEN GOTO LX;                                         16445000
             <<Unexpected delimiters are non-fatal if signbit>><<01007>>16450000
                                               <<of F' was on>><<01007>>16455000
          IF LOGICAL(PINFO)<>CHARCR THEN GOTO ERROR;                    16460000
                                     <<CR is not fatal either>><<01007>>16465000
    LX:   TOS_TOS-1;                                                    16470000
          TOS_TOS-TOS;                                                  16475000
          S3_TOS;                  <<FIELD>>                            16480000
    END;                                                                16485000
$PAGE "          I/O SUBROUTINES"                              <<01007>>16490000
  SUBROUTINE SEND(N);              <<INSERT CHAR IN BUFFER>>            16495000
    VALUE   N;                                                          16500000
    INTEGER N;                                                          16505000
<< THE PRINTABLE ASCII CHARACTER SET LIES IN THE OCTAL >>      <<01161>>16510000
<< RANGE FROM %40 TO %176 INCLUSIVE.  A "." IS SUB-    >>      <<01161>>16515000
<< TITUTED FOR VALUES PASSED TO THIS ROUTINE THAT FALL >>      <<01161>>16520000
<< OUTSIDE THIS RANGE.  TERMINALS THAT DO NOT SUPPORT  >>      <<01161>>16525000
<< THE FULL RANGE TEND TO SUBSTITUTE UP-SHIFTED CHAR-  >>      <<01161>>16530000
<< ACTERS FOR ANY UNSUPPORTED CHARACTERS.              >>      <<01161>>16535000
    BEGIN                                                               16540000
          IF N<%40 THEN N_".";                                          16545000
          IF N > %176 THEN N := ".";                           <<01161>>16550000
          POUT_N;                                                       16555000
          @POUT_@POUT+1;                                                16560000
    END;                                                                16565000
            << >>                                                       16570000
  SUBROUTINE SENDID(N);            <<INSERT ID IN BUFFER>>              16575000
    VALUE   N;                                                          16580000
    INTEGER N;                                                          16585000
    BEGIN                                                               16590000
          IF N="  " THEN RETURN;                                        16595000
          SEND(N.(0:8));                                                16600000
          TOS_N.(8:8);                                                  16605000
          DUPLICATE;                                                    16610000
          IF TOS=" " THEN DEL                                           16615000
                     ELSE SEND(*);                                      16620000
    END;                                                                16625000
            << >>                                                       16630000
  SUBROUTINE SENDHEX(N);                                                16635000
     VALUE N;                                                           16640000
     INTEGER N;                                                         16645000
     BEGIN                                                              16650000
            N:=N+%60;                                                   16655000
            IF N > %71 THEN N:=N+%7; <<TO ADJUST FOR A-F>>              16660000
            SEND(N);                                                    16665000
     END;                                                               16670000
            <<  >>                                             <<01549>>16675000
  SUBROUTINE SENDIT(NUM,NUM'WORD2,M,FLUG);                     <<01549>>16680000
    VALUE   NUM,NUM'WORD2,M,FLUG;                              <<01549>>16685000
    LOGICAL NUM,NUM'WORD2,M,FLUG;                              <<01549>>16690000
    BEGIN                                                      <<01549>>16695000
          <<O/I/A/H/C TO ASCII>>                               <<01549>>16700000
                                                               <<01549>>16705000
          IF M = 4 THEN                                        <<01549>>16710000
             BEGIN << CODE >>                                  <<01549>>16715000
             COMMENT:                                          <<01549>>16720000
                DECODE 1 & 2 WORD INSTRUCTIONS. FOR 2 WORD     <<01549>>16725000
                INSTRUCTIONS 2 CALLS WILL BE MADE TO SENDIT.   <<01549>>16730000
                THE 1ST CALL WILL COME IN WITH THE 2ND         <<01549>>16735000
                OPERAND IN NUM'WORD2 AND ASCII IS SENT. THE    <<01549>>16740000
                2ND CALL WILL HAVE THE SAME 2ND OP. IN NUM, &  <<01549>>16745000
                BLANKS ARE EMITTED. DECOMP'STATE INDICATES     <<01549>>16750000
                WHETHER NUM IS NEW INSTR OR 2ND WORD OF INSTR. <<01549>>16755000
                ;                                              <<01549>>16760000
             << SEND OCTAL IF NOT IN CALC. (SHORT) MODE >>     <<01549>>16765000
             IF FLUG THEN                                      <<01549>>16770000
                BEGIN                                          <<01549>>16775000
                SENDIT(NUM,NUM'WORD2,0,FLUG);                  <<01549>>16780000
                SEND(" "); SEND(" ");                          <<01549>>16785000
                END;                                           <<01549>>16790000
             IF DECOMP'STATE = INSTR'2NDWORD THEN              <<01549>>16795000
                BEGIN << HAVE ALREADY OUTPUT ASCII >>          <<01549>>16800000
                MOVE POUT := "      ";                         <<01549>>16805000
                @POUT := @POUT + 6;                            <<01549>>16810000
                DECOMP'STATE := INSTR'1STWORD; << NEXT STATE >><<01549>>16815000
                END                                            <<01549>>16820000
             ELSE                                              <<01549>>16825000
                BEGIN                                          <<01549>>16830000
                S'TEMP := DEASSEMBLE (J,POUT,NUM,NUM'WORD2);   <<01549>>16835000
                << SET STATE OF NUM'WORD2 ... >>               <<01549>>16840000
                << FOR NEXT SENDIT CALL       >>               <<01549>>16845000
                IF J = OK'OPCODE THEN                          <<01549>>16850000
                   BEGIN << 2 WORD INSTR, NEEDED BOTH WORDS >> <<01549>>16855000
                   DECOMP'STATE := INSTR'2NDWORD;              <<01549>>16860000
                   @POUT := LOGICAL(@POUT) + S'TEMP;           <<01549>>16865000
                   END                                         <<01549>>16870000
                ELSE                                           <<01549>>16875000
                   BEGIN << ONLY USED 'NUM' >>                 <<01549>>16880000
                   DECOMP'STATE := INSTR'1STWORD;              <<01549>>16885000
                   << TEST FOR ERROR >>                        <<01549>>16890000
                   IF J<>INGNORE'WD2 THEN                      <<01549>>16895000
                      BEGIN << ERROR >>                        <<01549>>16900000
                      MOVE POUT := "......";                   <<01549>>16905000
                      @POUT := @POUT + 6;                      <<01549>>16910000
                      END                                      <<01549>>16915000
                   ELSE @POUT := LOGICAL(@POUT) + S'TEMP;      <<01549>>16920000
                   END;                                        <<01549>>16925000
                END;                                           <<01549>>16930000
             RETURN;                                           <<01549>>16935000
             END;                                              <<01549>>16940000
         IF M = 3 THEN                                                  16945000
            BEGIN                                                       16950000
              SENDHEX(NUM.(0:4));                                       16955000
              SENDHEX(NUM.(4:4));                                       16960000
              SENDHEX(NUM.(8:4));                                       16965000
              SENDHEX(NUM.(12:4));                                      16970000
              RETURN;                                                   16975000
            END;                                                        16980000
                                                                        16985000
          IF M=2 THEN                                                   16990000
               BEGIN SEND(NUM.(0:8));                                   16995000
                     SEND(NUM.(8:8));                                   17000000
                     RETURN;                                            17005000
               END;                                                     17010000
          IF M=1 THEN                                                   17015000
               BEGIN IF INTEGER(NUM)>=0 THEN TOS_"+" ELSE               17020000
                       BEGIN NUM_-INTEGER(NUM);                         17025000
                     TOS_"-";                                           17030000
                       END;                                             17035000
                     SEND(*);                                           17040000
                     X_4;                                               17045000
                     TOS_10;                                            17050000
                     TOS_10000;                                         17055000
               END ELSE                                                 17060000
               BEGIN X_5;                                               17065000
                     TOS_8;                                             17070000
                     TOS_%100000;                                       17075000
               END;                                                     17080000
          TOS_S6;                                              <<01549>>17085000
    L:    ASSEMBLE(ZERO,XCH);                                           17090000
          TOS_S2;                                                       17095000
          ASSEMBLE(LDIV,XCH);                                           17100000
          IF <> THEN GOTO LL;                                           17105000
          IF X=0 THEN GOTO LL;                                          17110000
          IF LOGICAL(S5) THEN GOTO LL;                                  17115000
          DEL;                                                          17120000
          GOTO LN;                                                      17125000
    LL:   S5_1;                                                         17130000
          TOS_TOS+"0";                                                  17135000
          SEND(*);                                                      17140000
    LN:   S1_LOGICAL(S1)/LOGICAL(S2);                                   17145000
          IF (X_X-1)>=0 THEN GOTO L;                                    17150000
          DEL;                                                          17155000
          DDEL;                                                         17160000
    END;                                                                17165000
            << >>                                                       17170000
  SUBROUTINE SENDOCT(N);           <<TRUNC OCT TO ASCII>>               17175000
    VALUE   N;                                                          17180000
    INTEGER N;                                                          17185000
    BEGIN                                                               17190000
          SENDIT(N,0,0,FALSE);                                 <<01549>>17195000
    END;                                                                17200000
            << >>                                                       17205000
  SUBROUTINE ERRMSG(N);                                                 17210000
    VALUE   N;                                                          17215000
    INTEGER N;                                                          17220000
    BEGIN                                                               17225000
          PRINTFLAG_0;                                                  17230000
          N_N*3;                                                        17235000
          TOS_@PINFO-(@INFO(1)&LSL(1));                                 17240000
          IF < THEN ASSEMBLE(DEL,ZERO);                                 17245000
          CLEAR;                                                        17250000
          MOVE INFO(2)_ERRMSX(S2),(3);                                  17255000
          @POUT_@POUT+10;                                               17260000
          SENDOCT(*);                                                   17265000
          OUTPUT;                                                       17270000
    END;                                                                17275000
            << >>                                                       17280000
  SUBROUTINE GETMODE;                                                   17285000
    BEGIN                                                               17290000
          X_-1;                                                         17295000
         WHILE(X:=X+1)<NUM'MODES DO                            <<01549>>17300000
               BEGIN TOS_CHARM(X)&LSR(8);                               17305000
                    IF TOS = (LOGICAL(PINFO) LAND %137) THEN   <<02344>>17310000
                       BEGIN GETCHAR;                                   17315000
                             RETURN;                                    17320000
                       END;                                             17325000
               END;                                                     17330000
          IF LOGICAL(PINFO)<>CHARCR THEN GOTO ERROR;                    17335000
          X_0;                                                          17340000
    END;                                                                17345000
            << >>                                                       17350000
  LOGICAL SUBROUTINE INOCTAL(NUM,P);                                    17355000
    VALUE   P;                                                          17360000
    INTEGER NUM,P;                                                      17365000
    BEGIN                                                               17370000
    L:    @POUT_P;                                                      17375000
          SEND(":");                                                    17380000
          SEND("=");                                                    17385000
          TYPE;                                                         17390000
          INPUT;                                                        17395000
          TOS_EXPRESSION;                                               17400000
          TOS_TOS-1;                                                    17405000
          IF < THEN                                                     17410000
    L1:        BEGIN CLEAR;                                             17415000
                     DEL;                                               17420000
                     GOTO L;                                            17425000
               END;                                                     17430000
          IF = THEN P3_X;          <<NUM>>                              17435000
          IF PINFO="." THEN                                             17440000
               BEGIN TOS_TOS+2;                                         17445000
                     GETCHAR;                                           17450000
               END;                                                     17455000
          IF LOGICAL(PINFO)<>CHARCR THEN GOTO L1;                       17460000
          S4_TOS;                  <<INOCTAL>>                          17465000
    END;                                                                17470000
            << >>                                                       17475000
  SUBROUTINE GETID(NUM);           <<ID IN X>>                          17480000
    VALUE   NUM;                                                        17485000
    LOGICAL NUM;                                                        17490000
    BEGIN                                                               17495000
          TOS_"  ";                                                     17500000
           TOS.(0:8):= IF PINFO=ALPHA THEN                     <<02344>>17505000
                        LOGICAL(PINFO) LAND %137   <<UPSHIFT>> <<02344>>17510000
                       ELSE PINFO;                             <<02344>>17515000
          IF PINFO<>ALPHA THEN                                          17520000
             BEGIN IF NOT LOGICAL(S2) THEN                              17525000
                      BEGIN DEL;X_-1;RETURN;END;                        17530000
                   GETCHAR;                                             17535000
             END ELSE                                                   17540000
             BEGIN GETCHAR;                                             17545000
                   IF PINFO=ALPHA THEN                                  17550000
                      BEGIN                                    <<02344>>17555000
                          TOS.(8:8):=LOGICAL(PINFO) LAND %137; <<02344>>17560000
                            GETCHAR;                                    17565000
                      END;                                              17570000
             END;                                                       17575000
          X_-1;                                                         17580000
          WHILE (X_X+1)<=REGEND DO                                      17585000
               BEGIN ASSEMBLE(DUP);                                     17590000
                     IF TOS=REGY(X) THEN                                17595000
                       BEGIN DEL; RETURN; END;                          17600000
               END;                                                     17605000
          GOTO ERROR;                                                   17610000
    END;                                                                17615000
$PAGE "          PRIMARILY CAPABILITY/BOUNDS CHECKING RELATED" <<01007>>17620000
  SUBROUTINE CHEKM(M,I);                                                17625000
    VALUE   M,I;                                                        17630000
    INTEGER M,I;                                                        17635000
    BEGIN                                                               17640000
          X_M;                                                          17645000
          TOS_I;                                                        17650000
          IF < THEN TOS_-TOS                                            17655000
               ELSE IF PRIV THEN GOTO L;                                17660000
          ASSEMBLE(TRBC 11);                                            17665000
          IF <> THEN X_X+1;                                             17670000
          TOS_MASK(X);                                                  17675000
          ASSEMBLE(XCH,STAX);                                           17680000
          TOS_TOS&LSL(X);                                               17685000
          IF >= THEN GOTO ERROR;                                        17690000
    L:    DEL;                                                          17695000
    END;                                                                17700000
          << >>                                                         17705000
  LOGICAL SUBROUTINE REGVALUE;  <<RESULT IN X>>                         17710000
    BEGIN          <<RETURNS - 0 ERROR, 1 OK >>                         17715000
          GETID(TRUE);                                                  17720000
          IF X<0 THEN RETURN;                                           17725000
          TOS_X;                                                        17730000
          CHEKM(RMNPR,-S0);                                             17735000
          X_TOS;                                                        17740000
          X_REG(X);                                                     17745000
          REGVALUE_1;                                                   17750000
    END;                                                                17755000
            << >>                                                       17760000
  LOGICAL SUBROUTINE GETLCST(C);                                        17765000
    VALUE   C;                                                          17770000
    LOGICAL C;                                                          17775000
    BEGIN                                                               17780000
       TOS := LOGICALCST'(C, 0 ); <<GET LOG SEG#, AND LIB SOURC<<06903>>17785000
       IF <> THEN                                              <<06103>>17790000
          BEGIN  << INVALID CST >>                             <<06103>>17795000
          ASSEMBLE( DDEL, ZERO );                              <<06103>>17800000
          END                                                  <<06103>>17805000
       ELSE                                                    <<06103>>17810000
          BEGIN  << VALID CST >>                               <<06103>>17815000
          ASSEMBLE( XCH, INCA ); << INC SEG SOURCE >>          <<06103>>17820000
          TOS.(0:4) := TOS;      << MERGE SEG SOURCE WITH LOG S<<06103>>17825000
          END;                                                 <<06103>>17830000
       S3 := TOS;                                              <<06103>>17835000
    END;                                                                17840000
            << >>                                                       17845000
  SUBROUTINE SENDLCST(LC);                                     <<06663>>17850000
    VALUE   LC;                                                <<06663>>17855000
    LOGICAL LC;      << LOGICAL CST SEGMENT # >>               <<06663>>17860000
    BEGIN                                                      <<06663>>17865000
    << OBJ (OR OBJID) IS PASSED IN AS GLOBAL >>                <<06663>>17870000
      IF LC <> 0 THEN                                          <<06103>>17875000
         BEGIN                                                 <<06103>>17880000
            IF LC.(0:4) < 15 THEN                              <<06103>>17885000
               SENDID(LIB(LC.(0:4)))                           <<06103>>17890000
            ELSE                                               <<06103>>17895000
               SENDID(LIB(4));                                 <<06103>>17900000
            SENDOCT(LC.(8:8));                                 <<06103>>17905000
         END                                                   <<06103>>17910000
      ELSE                                                     <<06103>>17915000
         BEGIN                                                 <<06103>>17920000
            IF OBJID(OBJIDNUMFIELD)=0 THEN                     <<07319>>17925000
                  BEGIN TOS:=RTC.(8:8); TOS:="A "; END         <<07319>>17930000
            ELSE                                               <<07319>>17935000
            IF OBJID(OBJIDTYPEFIELD) = OBJIDSLTYPE THEN        <<06663>>17940000
               BEGIN                                           <<06103>>17945000
                  TOS := OBJID(OBJIDNUMFIELD);                 <<06663>>17950000
                  TOS := "A ";                                 <<06103>>17955000
               END                                             <<06103>>17960000
            ELSE                                               <<06103>>17965000
               BEGIN                                           <<06103>>17970000
                  IF LOGICALMAPPING THEN                       <<06103>>17975000
                     BEGIN                                     <<06103>>17980000
                        TOS := OBJID (OBJIDNUMFIELD);          <<06663>>17985000
                        TOS := "AX";                           <<06103>>17990000
                     END                                       <<06103>>17995000
                  ELSE                                         <<06103>>18000000
                     BEGIN                                     <<06103>>18005000
                        TOS := OBJID (OBJIDNUMFIELD) + %300;   <<07319>>18010000
                        TOS := "A ";                           <<06103>>18015000
                     END;                                      <<06103>>18020000
               END;                                            <<06103>>18025000
             SENDID(*);                                        <<06103>>18030000
             SENDOCT(*);                                       <<06103>>18035000
         END;                                                  <<06103>>18040000
    END;                                                                18045000
            << >>                                                       18050000
  SUBROUTINE SENDREG(N,M,I);                                            18055000
    VALUE   N,M,I;                                                      18060000
    LOGICAL N,M,I;                                                      18065000
    BEGIN                                                               18070000
          IF @POUT<>@INFO(1)&LSL(1) THEN SEND(",");                     18075000
          IF N=0 THEN SENDID(REGY(I)) ELSE                              18080000
               BEGIN SENDID(N);                                         18085000
                     SENDID(M);                                         18090000
               END;                                                     18095000
          SEND("=");                                                    18100000
          IF I<>REGLOG AND I<>REGTL                                     18105000
               THEN SENDOCT(REG(I))                                     18110000
               ELSE BEGIN                                      <<06663>>18115000
                    OBJTEMP:=OBJ;       <<DO NOT DISTURB   >>  <<06663>>18120000
                    OBJ:=0D;            <<OBJ IS PASSED BY >>  <<06663>>18125000
                    SENDLCST(REG(I));   <<BEING GLOBAL     >>  <<06663>>18130000
                    OBJ:=OBJTEMP;       <<RESTORE OLD VALUE>>  <<06663>>18135000
                    END;                                       <<06663>>18140000
    END;                                                                18145000
            << >>                                                       18150000
  SUBROUTINE FORMT;                                                     18155000
    BEGIN                                                               18160000
          RTL_GETLCST(RTC);                                             18165000
          TOS_@POUT;                                                    18170000
          SENDREG("LC","ST",REGTL);                                     18175000
          TOS_TOS+10;                                                   18180000
          DUPLICATE;                                                    18185000
          @POUT_TOS;                                                    18190000
          SENDREG("P ","  ",REGTP);                                     18195000
          TOS_TOS+8;                                                    18200000
          DUPLICATE;                                                    18205000
          @POUT_TOS;                                                    18210000
          IF PRIV THEN                                                  18215000
             BEGIN                                             <<06663>>18220000
                OBJR  :=MAPPEDCSTTOPHYCST(RTC,                 <<07319>>18225000
                                          PINNR*pcbsize);      <<06671>>18230000
                TOS:=RTC;                                      <<06663>>18235000
                RTC:=OBJIDR(OBJIDNUMFIELD);                    <<07319>>18240000
                IF OBJIDR(OBJIDTYPEFIELD)=OBJIDSLTYPE THEN     <<07319>>18245000
                   SENDREG("CS","T ",REGTC)                    <<07319>>18250000
                ELSE                                           <<07319>>18255000
                   IF LOGICALMAPPING THEN                      <<07319>>18260000
                      SENDREG("CS","TX",REGTC)                 <<07319>>18265000
                   ELSE                                        <<07319>>18270000
                      BEGIN                                    <<07319>>18275000
                         RTC:=RTC+%300;                        <<07319>>18280000
                         SENDREG("CS","T ",REGTC);             <<07319>>18285000
                      END;                                     <<07319>>18290000
                   RTC:=TOS;                                   <<06663>>18295000
                   TOS:=TOS+10;                                <<06663>>18300000
                                                               <<06663>>18305000
               END;                                                     18310000
          @POUT _ TOS;                                                  18315000
    END;                                                                18320000
            << >>                                                       18325000
  LOGICAL SUBROUTINE CHEKK(MODE,DEBUGID1,DEBUGID2,BANK,        <<06103>>18330000
                           DISPL,CNT);                         <<06103>>18335000
    VALUE   MODE,DEBUGID1,DEBUGID2,BANK,DISPL,CNT;             <<06103>>18340000
    INTEGER MODE,DEBUGID1,DEBUGID2,BANK,DISPL,CNT;             <<06103>>18345000
    BEGIN                                                               18350000
          IF MODE.(8:4)=0 THEN                                          18355000
             IF NOT PRIV THEN    <<STACK>>                              18360000
                BEGIN IF NOT(RDL<=DISPL<=RS) THEN GO BOUNDS;            18365000
                      X_RS;                                             18370000
                      GOTO LY;                                          18375000
                END ELSE                                                18380000
                BEGIN SEGNR_RSTK;                              <<06103>>18385000
                      DISPL_DISPL-RDL+INTEGER(BASE(RDL-1));             18390000
                      MODE_%300;                                        18395000
                END;                                                    18400000
          IF MODE.(8:4)=1 THEN                                          18405000
             BEGIN IF NOT(0<=BANK<=NUMBANKS) THEN GO NONO;              18410000
                   X_IF BANK=LASTBANK THEN LASTADDR            <<01549>>18415000
                     ELSE %177777;                             <<01549>>18420000
                   DISPL_DISPL+SEGNR;                          <<06103>>18425000
                   GOTO LX;                                             18430000
             END;                                                       18435000
          IF SEGNR<=0 THEN GOTO NONO;                          <<06103>>18440000
          IF MODE.(8:1)=1 THEN         <<DATA SEGMENT>>                 18445000
             BEGIN IF SEGNR>DSTI'(0) THEN GO NONO;             <<06103>>18450000
                   TOS_DSTI'(SEGNR&LSL(2))&LSL(2);             <<06103>>18455000
                   TOS.(0:1)_0;                                         18460000
                   ASSEMBLE(TEST);                                      18465000
                   IF = THEN GOTO NONO;                                 18470000
                   X_TOS-1;                                             18475000
                   GOTO LX;                                             18480000
             END;                                                       18485000
          IF MODE.(9:1)=1 THEN         <<CODE SEGMENT>>                 18490000
             BEGIN                                             <<06103>>18495000
                IF VALIDATE(PINX/PCBSIZE,DS5,STDINDEX) <> 0    <<06663>>18500000
                   THEN GO NONO;                               <<06663>>18505000
                TOS:=DSTI'(STDINDEX) & LSL(2);                 <<06103>>18510000
                   TOS.(0:2)_0;                                         18515000
                   ASSEMBLE(TEST);                                      18520000
                   IF = THEN GOTO NONO;                                 18525000
                   X_TOS-1;                                             18530000
                   GOTO LX;                                             18535000
              END;                                                      18540000
          GOTO ERROR;                                                   18545000
    LX:   IF LOGICAL(DISPL)>LOGICAL(X) THEN GOTO BOUNDS;                18550000
    LY:   X_X-DISPL;                                                    18555000
          IF LOGICAL(X)>=LOGICAL(CNT-1) THEN CHEKK_TRUE;                18560000
          X_X+1;                                                        18565000
    END;                                                                18570000
            << >>                                                       18575000
  LOGICAL SUBROUTINE DEVTYPE(LDEV);                                     18580000
    VALUE   LDEV;                                                       18585000
    INTEGER LDEV;                                                       18590000
    BEGIN                                                               18595000
          EXCHANGEDB(LDTDST);                                           18600000
        if 1<=ldev<=integer(base(0))                           <<06671>>18605000
             THEN TOS_BASE(LDEV*LDTSIZE+2).(10:6)                       18610000
             ELSE TOS_-1;                                               18615000
          EXCHANGEDB(0);                                                18620000
          ASSEMBLE(TEST);                                               18625000
          IF < THEN GOTO NONO;                                          18630000
          S3_TOS;                                                       18635000
    END;                                                                18640000
          << >>                                                         18645000
  SUBROUTINE MEMBASE(INDEX,MODE,DEBUGID1,DEBUGID2,BANK,DISPL); <<06103>>18650000
    VALUE   INDEX,MODE,DEBUGID1,DEBUGID2,BANK,DISPL;           <<06103>>18655000
    INTEGER INDEX,MODE,DEBUGID1,DEBUGID2,BANK,DISPL;           <<06103>>18660000
    BEGIN                                                               18665000
          IF INDEX=REGDX THEN                                           18670000
             IF RDX<1 THEN INDEX_REGDB ELSE                             18675000
                IF =  THEN                                              18680000
                   BEGIN MODE_%242;                                     18685000
                         SEGNR_RDBX;                           <<06103>>18690000
                         GOTO L;                                        18695000
                   END ELSE                                             18700000
                   BEGIN MODE_%22;                                      18705000
                         SEGNR_RDBV;                           <<06103>>18710000
                         BANK_RBNK;                                     18715000
                         GOTO L;                                        18720000
                   END;                                                 18725000
          IF INDEX=REGEA THEN                                           18730000
             BEGIN IF FACTOR=0 THEN GOTO ERROR;                         18735000
                   BANK_X;                                              18740000
                   GOTO LABS;                                           18745000
             END;                                                       18750000
          IF INDEX<=REGSY THEN                                          18755000
    LABS:    BEGIN X_INDEX;                                             18760000
                   SEGNR_REG(X);                               <<06103>>18765000
                   MODE_%22;                                            18770000
                   GOTO L;                                              18775000
             END;                                                       18780000
          IF INDEX<=REGDA THEN                                          18785000
             BEGIN                                             <<06103>>18790000
                IF INDEX = REGCO THEN                          <<06103>>18795000
                   IF (LOGICAL(PINFO) LAND %137) =             <<06103>>18800000
                      (XINDICATOR & LSR(8)) THEN               <<06103>>18805000
                      BEGIN                                    <<06103>>18810000
                         XFLAG:=1;                             <<06103>>18815000
                         GETCHAR;                              <<06103>>18820000
                      END                                      <<06103>>18825000
                   ELSE                                        <<06103>>18830000
                      XFLAG:=0;                                <<06103>>18835000
                IF FACTOR = 0 THEN GO TO ERROR;                <<06103>>18840000
                SEGNR:=X;                                      <<06103>>18845000
                SEGTYPE:=ABS'SEG;                              <<06103>>18850000
                MODE := IF INDEX=REGDA THEN %246               <<06103>>18855000
                                        ELSE %126;             <<06103>>18860000
                GO TO L;                                       <<06103>>18865000
             END;                                                       18870000
          IF INDEX>=REGPB THEN                                          18875000
             BEGIN IF > THEN                                            18880000
                      BEGIN MODE_1;                                     18885000
                            DISPL_REG(INDEX);                           18890000
                      END;                                              18895000
                   MODE_MODE+%120;                                      18900000
                   XFLAG:=0;                                   <<06103>>18905000
                   IF OBJID(OBJIDTYPEFIELD) = OBJIDSLTYPE THEN <<06663>>18910000
                      SEGNR := OBJID(OBJIDNUMFIELD)            <<06663>>18915000
                   ELSE                                        <<06103>>18920000
                      IF LOGICALMAPPING THEN                   <<06103>>18925000
                         BEGIN                                 <<06103>>18930000
                            XFLAG:=1;                          <<06103>>18935000
                            SEGNR:=OBJID(OBJIDNUMFIELD);       <<06663>>18940000
                         END                                   <<06103>>18945000
                      ELSE                                     <<06103>>18950000
                         SEGNR:=OBJID(OBJIDNUMFIELD)+%300;     <<06663>>18955000
                   SEGTYPE := ABS'SEG;                         <<06103>>18960000
                   GOTO L;                                              18965000
             END;                                                       18970000
          IF INDEX>=REGDB THEN                                          18975000
             BEGIN IF > THEN                                            18980000
                      BEGIN MODE_1;                                     18985000
                            DISPL_REG(INDEX);                           18990000
                      END;                                              18995000
                   GO TO L;                                             19000000
             END;                                                       19005000
    L:    CHEKK(MODE,DEBUGID1,DEBUGID2,BANK,DISPL,0);          <<06103>>19010000
          RETURN 0;                                                     19015000
    END;                                                                19020000
          << >>                                                         19025000
  LOGICAL SUBROUTINE CONTENTS;    <<RESULT IN X>>                       19030000
          <<RETURNS - 0 ERROR, 1 OK, 2 NULL >>                          19035000
    BEGIN                                                               19040000
          GETID(FALSE);                                                 19045000
          IF X=0 OR X=REGV THEN GOTO ERROR;                             19050000
          TOS_X;                                                        19055000
          IF < THEN                                                     19060000
             BEGIN DEL; TOS_REGDB; END;                                 19065000
          CHEKM(BMNPD,S0);                                              19070000
          CHEKM(BMPMD,-S0);                                             19075000
          MEMBASE(*,0,0,0,0,0);                                <<06103>>19080000
          IF PINFO="'" THEN                                             19085000
             BEGIN TOS_@PINFO;                                          19090000
                   GETCHAR;                                             19095000
                   IF OPER("+-")<>0 OR OPER("*/")<>0                    19100000
                      OR LOGICAL(PINFO)=CHARCR THEN                     19105000
                         BEGIN @PINFO_TOS;X_0;GOTO L;END;               19110000
                   @PINFO_TOS;                                          19115000
             END;                                                       19120000
          TOS_EXPRESSION;                                               19125000
          IF TOS=0 OR PINFO<>"'" THEN                                   19130000
             BEGIN DDEL; DDEL; DDEL; RETURN; END;              <<06103>>19135000
    L:    TOS_TOS+X;                                                    19140000
          CHEKK(S4,S3,S2,S1,S0,0);                             <<06103>>19145000
          J:=TOS;                                              <<07319>>19150000
          IF S3.(8:3) = 2 THEN                                 <<06103>>19155000
             OBJR  := CONVTOOBJID(DS2,PINX/PCBSIZE)            <<06663>>19160000
          ELSE                                                 <<06103>>19165000
            BEGIN                                              <<07319>>19170000
             OBJR  := 0D;    <<FIRST WORD IS DUMMY, NOT USED->><<06663>>19175000
             OBJIDR(OBJIDNUMFIELD) := S1;  <<BY SETOBJ       >><<06663>>19180000
            END;                                               <<07319>>19185000
          SETOBJ(S3,OBJR  ,S0);                                <<06663>>19190000
          X := BASE(J);                                        <<07319>>19195000
          RESETOBJ(S3,OBJR);                                   <<06663>>19200000
          DDEL;                                                         19205000
          DDEL;                                                         19210000
          DEL;                                                 <<06103>>19215000
          CONTENTS_1;                                                   19220000
    END;                                                                19225000
            << >>                                                       19230000
  SUBROUTINE GETVIRT;                                                   19235000
    BEGIN                                                               19240000
          IF SEGNR=0 THEN                                      <<06103>>19245000
               BEGIN DISPLX_DISPL;                                      19250000
                     RCNT_RCNT*%200;                                    19255000
                     GOTO L;                                            19260000
               END;                                                     19265000
          DISPLX_DISPLX+1;                                              19270000
          IF = THEN SEGX_SEGX+1;                                        19275000
  L:      SEGNR_GETENTRY(CSTB);                                <<06103>>19280000
          DSTI'(SEGNR&LSL(2)+DFC) _ %100040;                   <<06103>>19285000
          DSTI'(X_X+1) _ 0;                                             19290000
          DSTI'(X_X+1) _ SEGX;                                          19295000
          DSTI'(X_X+1) _ DISPLX;                                        19300000
          DISPL_0;                                                      19305000
    END;                                                                19310000
            << >>                                                       19315000
  SUBROUTINE RELVIRT;                                                   19320000
    BEGIN                                                               19325000
          RELCODESEG(SEGNR);                                   <<06103>>19330000
    END;                                                                19335000
$PAGE "          EXTRACT SEGMENT.OFFSET AND CONDITION",&       <<01549>>19340000
$     " FROM INPUT BUFFER"                                     <<01549>>19345000
  SUBROUTINE L'PRIMARY (STAK,STAKSIZE,PRI'TYPE);               <<01549>>19350000
    INTEGER ARRAY STAK;                                        <<01549>>19355000
    INTEGER STAKSIZE,PRI'TYPE;                                 <<01549>>19360000
    BEGIN                                                      <<01549>>19365000
    COMMENT:                                                   <<01549>>19370000
          THIS ROUTINE PARSES A LOGICAL PRIMARY OF THE         <<01549>>19375000
          FORM:                                                <<01549>>19380000
             <LPRIM>:  <MODBASE><OFFSET>|<EXPRESSION>          <<01549>>19385000
          RETURNS:                                             <<01549>>19390000
             STAK:     PUSHES THE PRIMARY ON STAK IN FORM      <<01549>>19395000
                       DESCRIBED IN SUBROUTINE 'CONDITION'     <<01549>>19400000
             PRI'TYPE: 0  -> CONSTANT PRIMARY                  <<01549>>19405000
                       1  -> ADDRESS (DOUBLE WORD).            <<01549>>19410000
                       2  -> NULL PRIMARY                      <<01549>>19415000
          CONVENTION:                                          <<01549>>19420000
             ENTRY:    STAKSIZE IS INDEX OF LAST ELEMENT       <<01549>>19425000
                       IN STAK. PINFO PTS TO NEXT TOKEN.       <<01549>>19430000
             EXIT:     STAKSIZE IS INDEX OF LAST ELEMENT       <<01549>>19435000
                       IN STAK. PINFO PTS TO NEXT TOKEN;       <<01549>>19440000
                                                               <<01549>>19445000
          IF NEXTTOKEN = T'IDENT THEN                          <<01549>>19450000
             BEGIN << MODBASE SPECIFIED >>                     <<01549>>19455000
             GETID (FALSE);   << GET REGISTER ID IN X >>       <<01549>>19460000
             STAK(STAKSIZE := STAKSIZE+1) := X;                <<01549>>19465000
             << CHECK VALIDITY OF REGISTER SPECIFIED >>        <<01549>>19470000
             IF NOT PRIV THEN CHEKM (BMNPM,STAK(STAKSIZE))     <<01549>>19475000
             ELSE CHEKM (BMPMM,-STAK(STAKSIZE));               <<01549>>19480000
             STAK(STAKSIZE).BKPT'REG := STAK(STAKSIZE);        <<01549>>19485000
             IF STAK(STAKSIZE).BKPT'REG = REGDA THEN           <<01549>>19490000
                BEGIN                                          <<01549>>19495000
                << GET SEG NUMBER >>                           <<01549>>19500000
                IF FACTOR=0 THEN GOTO ERROR;                   <<01549>>19505000
                J := X; << SAVE BASE >>                        <<01549>>19510000
                IF J <= 0 OR J > DSTI'(0) THEN GOTO NONO;      <<01549>>19515000
                END                                            <<01549>>19520000
             ELSE IF STAK(STAKSIZE).BKPT'REG = REGEA THEN      <<01549>>19525000
                BEGIN <<GET BANK NUMBER >>                     <<01549>>19530000
                IF FACTOR = 0 THEN GOTO ERROR;                 <<01549>>19535000
                J := X;  << SAVE BANK >>                       <<01549>>19540000
                IF NOT (0 <= J <= NUMBANKS) THEN GOTO NONO;    <<01549>>19545000
                END                                            <<01549>>19550000
             ELSE J := 0; << STK REL OR A OR SY SPECIFIED >>   <<01549>>19555000
                                                               <<01549>>19560000
             STAK(STAKSIZE).BKPT'BASE := J;                    <<01549>>19565000
             J := EXPRESSION;   << GET OFFSET >>               <<01549>>19570000
             IF J=INVAL'EXP THEN GOTO ERROR                    <<01549>>19575000
             ELSE IF J=NULL'EXP THEN X := 0;                   <<01549>>19580000
             STAK(STAKSIZE := STAKSIZE+1) := X;                <<01549>>19585000
             IF NEXTTOKEN = T'COLON THEN                       <<01549>>19590000
                BEGIN << INDIRECTION >>                        <<01549>>19595000
                TOS := 0; << SPACE FOR PNTR RET. BY GETTOKEN >><<01549>>19600000
                GETTOKEN (BPS0,J,0); DEL; << SKIP :,DEL PNTR >><<01549>>19605000
                J := EXPRESSION;                               <<01549>>19610000
                IF J=INVAL'EXP THEN GOTO ERROR;                <<01549>>19615000
                IF J=NULL'EXP THEN X := 0;                     <<01549>>19620000
                STAK(STAKSIZE := STAKSIZE+1) := X;             <<01549>>19625000
                PRI'TYPE := IND'PRIMARY;                       <<01549>>19630000
                END                                            <<01549>>19635000
             ELSE PRI'TYPE := ADDR'PRIMARY;                    <<01549>>19640000
             END                                               <<01549>>19645000
          ELSE                                                 <<01549>>19650000
             BEGIN << DISPLACEMENT ONLY >>                     <<01549>>19655000
             J := EXPRESSION;                                  <<01549>>19660000
             IF J=NULL'EXP THEN PRI'TYPE := NULL'PRIMARY       <<01549>>19665000
             ELSE IF J=INVAL'EXP THEN GOTO ERROR               <<01549>>19670000
             ELSE                                              <<01549>>19675000
                BEGIN                                          <<01549>>19680000
                STAK(STAKSIZE := STAKSIZE+1) := X;             <<01549>>19685000
                PRI'TYPE := CONST'PRIMARY;                     <<01549>>19690000
                END;                                           <<01549>>19695000
             END;                                              <<01549>>19700000
                                                               <<01549>>19705000
    END;  << L'PRIMARY >>                                      <<01549>>19710000
            << >>                                              <<01549>>19715000
  SUBROUTINE CONDITION (STAK,STAKSIZE);                        <<01549>>19720000
    INTEGER STAKSIZE;                                          <<01549>>19725000
    INTEGER ARRAY STAK;                                        <<01549>>19730000
    BEGIN                                                      <<01549>>19735000
    COMMENT:                                                   <<01549>>19740000
          THIS ROUTINE PARSES A CONDITION OF THE FORM:         <<01549>>19745000
                                                               <<01549>>19750000
          1)  <EXP>                                            <<01549>>19755000
                                                               <<01549>>19760000
          2)  <LEXP> <RELOP> <LEXP>                            <<01549>>19765000
                                                               <<01549>>19770000
              <LEXP>:  EXPRESSION\<MODBASE><OFFSET>            <<01549>>19775000
                                                               <<01549>>19780000
          THE RESULT IS ENTERED IN STAK IN POLISH (POSTFIX)    <<01549>>19785000
          FORM AS FOLLOWS:                                     <<01549>>19790000
                                                               <<01549>>19795000
             --------------------        --------------------  <<01549>>19800000
          1) |  OPERAND1        |     2) |  OPERAND1        |  <<01549>>19805000
             --------------------        --------------------  <<01549>>19810000
             |     0            |        |  OPERAND2        |  <<01549>>19815000
             --------------------        --------------------  <<01549>>19820000
             |         | T'NUM. |        |OPT1|OPt2| RELOP  |  <<01549>>19825000
             --------------------        --------------------  <<01549>>19830000
                                                               <<01549>>19835000
          T'NUM -> (8:8) TOKEN NUMBER OF A NUMBER -> COUNT     <<01549>>19840000
          RELOP -> (8:8) TOKEN NUMBER OF RELATIONAL OPERATOR   <<01549>>19845000
          OPT1  -> (0:2) OPERAND1'S TYPE                       <<01549>>19850000
          OPT2  -> (2:2) OPERAND2'S TYPE                       <<01549>>19855000
                                                               <<01549>>19860000
          OPERAND TYPES:                                       <<01549>>19865000
             0 ->  CONSTANT (SINGLE WORD)                      <<01549>>19870000
             1 ->  ADDRESS (DOUBLE WORD)                       <<01549>>19875000
             3 ->  INDIRECT ADDRESS (TRIPLE WORD)              <<01549>>19880000
                                                               <<01549>>19885000
          OPERAND FORMS:                                       <<01549>>19890000
             CONSTANT ->  -------------                        <<01549>>19895000
                          | CONST     |                        <<01549>>19900000
                          -------------                        <<01549>>19905000
                                                               <<01549>>19910000
             ADDRESS  ->  -------------                        <<01549>>19915000
                          | REG | BASE|                        <<01549>>19920000
                          -------------                        <<01549>>19925000
                          |  OFFSET   |                        <<01549>>19930000
                          -------------                        <<01549>>19935000
                          |IND. OFFSET|                        <<01549>>19940000
                          -------------                        <<01549>>19945000
                                                               <<01549>>19950000
             REG      -> (0:6)  CORRESPONDING INDEX INTO 'REGY'<<01549>>19955000
             BASE     -> (6:10) SEG # OR BANK # FOR EA/A/SY    <<01549>>19960000
                                                               <<01549>>19965000
          CONVENTIONS:                                         <<01549>>19970000
             ENTRY:   STAKSIZE IS INDEX OF LAST ELEMENT IN     <<01549>>19975000
                      STAK                                     <<01549>>19980000
             EXIT:    STAKSIZE IS INDEX OF LAST ELEMENT IN     <<01549>>19985000
                      STAK.;                                   <<01549>>19990000
                                                               <<01549>>19995000
          << GET LOGICAL EXPRESSION >>                         <<01549>>20000000
          L'PRIMARY (STAK,STAKSIZE,PRIM'INFO);                 <<01549>>20005000
          IF PRIM'INFO = NULL'PRIMARY THEN RETURN;             <<01549>>20010000
          OP'INFO.OP1TYPE := PRIM'INFO;                        <<01549>>20015000
                                                               <<01549>>20020000
          PRIM'INFO := NEXTTOKEN;                              <<01549>>20025000
          IF PRIM'INFO <> T'LT AND PRIM'INFO <> T'GT AND       <<01549>>20030000
             PRIM'INFO <> T'EQ AND PRIM'INFO <> T'GTE AND      <<01549>>20035000
             PRIM'INFO <> T'LTE AND PRIM'INFO <> T'NEQ         <<01549>>20040000
          THEN                                                 <<01549>>20045000
             BEGIN << NO RELOP-1ST OPERAND MUST BE COUNT >>    <<01549>>20050000
             IF OP'INFO.OP1TYPE <> CONST'PRIMARY THEN GO ERROR;<<01549>>20055000
             STAK(STAKSIZE := STAKSIZE+1) := 0;                <<01549>>20060000
             STAK(STAKSIZE := STAKSIZE+1) := T'NUMBER;         <<01549>>20065000
             END                                               <<01549>>20070000
          ELSE                                                 <<01549>>20075000
             BEGIN << RELOP PRESENT >>                         <<01549>>20080000
             TOS := 0; << SPACE FOR PNT'R RET. BY GETTOKEN >>  <<01549>>20085000
             GETTOKEN (BPS0,PRIM'INFO,0);                      <<01549>>20090000
             DEL;  << DEL RETURNED POINTER >>                  <<01549>>20095000
             OP'INFO.RELOPTYPE := PRIM'INFO.TOKEN'TYPE;        <<01549>>20100000
             << GET 2ND OPERAND >>                             <<01549>>20105000
             L'PRIMARY (STAK,STAKSIZE,PRIM'INFO);              <<01549>>20110000
             IF PRIM'INFO = NULL'PRIMARY THEN GOTO ERROR       <<01549>>20115000
             ELSE OP'INFO.OP2TYPE := PRIM'INFO;                <<01549>>20120000
             IF OP'INFO.OP1TYPE = CONST'PRIMARY AND            <<01549>>20125000
                OP'INFO.OP2TYPE = CONST'PRIMARY                <<01549>>20130000
             THEN GOTO ERROR;                                  <<01549>>20135000
             << PUSH OPERAND AND RELOP INFO >>                 <<01549>>20140000
             STAK (STAKSIZE := STAKSIZE+1) := OP'INFO;         <<01549>>20145000
             END;                                              <<01549>>20150000
                                                               <<01549>>20155000
    END; << CONDITION >>                                       <<01549>>20160000
            << >>                                              <<01549>>20165000
  LOGICAL SUBROUTINE LOCATION(FLAGS,PINN,DEBUGID1,             <<06671>>20170000
                              DEBUGID2,DISP,COND'STAK);        <<06671>>20175000
          <<RETURNS - 0 OK, 2 OK CR, 4 NO, 6 NO CR >>          <<01549>>20180000
          <<          1 OK :, 3 OK :CR             >>          <<01549>>20185000
          <<DEBUGID RETURNED                       >>          <<06103>>20190000
          <<  SEGNR = -1   ALL LOCATION            >>          <<06103>>20195000
          <<        <> -1 SEG NUMBER               >>          <<06103>>20200000
          <<  SW = 1 :@                            >>          <<06103>>20205000
          <<                                       >>          <<01549>>20210000
          << FLAGS.LOCBIT=1 --> THEN PIN SPECIFIED   >>        <<06671>>20215000
          <<PINN       =PIN NUMBER                 >>          <<06671>>20220000
    INTEGER FLAGS,PINN,DEBUGID1,DEBUGID2,DISP;                 <<06671>>20225000
    INTEGER ARRAY COND'STAK;                                   <<01549>>20230000
    BEGIN                                                      <<01549>>20235000
    COMMENT:                                                   <<01549>>20240000
          THIS ROUTINE PARSES ENTRIES OF THE FORM              <<01549>>20245000
          1) [[PIN'.][SEGTYPE]SEG.]DISP[:[@]COND]              <<01549>>20250000
          2) [PINUM..]PROCOFFSET [:[@]COND]                    <<01549>>20255000
          THE LOCATION MUST END IN A "," OR CR.                <<01549>>20260000
          THE CONDITION IS RETURNED IN INTERNAL FORM           <<01549>>20265000
          IN COND'STAK;                                        <<01549>>20270000
                                                               <<01549>>20275000
          << DETERMINE THE NUMBER OF FIELDS IN THE LOC >>      <<01549>>20280000
          << DESIGNATOR (1-3).  FIELDS ARE DELIMITED   >>      <<01549>>20285000
          << BY "." --> "." NOT ALLOWED IN EXPRESSIONS >>      <<01549>>20290000
                                                               <<01549>>20295000
          TOS := @PINFO-1;  << SET UP BYTE POINTER >>          <<01549>>20300000
          NUM'FIELDS := 1;                                     <<01549>>20305000
          DO                                                   <<01549>>20310000
             BEGIN                                             <<01549>>20315000
             @BPS0 := @BPS0 + 1;                               <<01549>>20320000
             MOVE * := BPS0 WHILE AN,1; << FIND DELIM >>       <<01549>>20325000
             IF BPS0 = "." THEN NUM'FIELDS := NUM'FIELDS+1;    <<01549>>20330000
             END                                               <<01549>>20335000
          UNTIL BPS0 = ":" OR BPS0 = "," OR BPS0 = CHARCR      <<01549>>20340000
                OR BPS0 = "@";                                 <<01549>>20345000
          << CHECK FOR [PIN.]@ --> NO DISP FIELD >>            <<01549>>20350000
          << --> MUST UP NUM'FIELDS              >>            <<01549>>20355000
          IF BPS0 = "@" THEN NUM'FIELDS := NUM'FIELDS+1;       <<01549>>20360000
          DEL;  << REMOVE BYTE POINTER >>                      <<01549>>20365000
                                                               <<01549>>20370000
          IF PINFIELD'PRESENT THEN                             <<01549>>20375000
             BEGIN                                             <<01549>>20380000
             J := FIELD (".");  << GET FIELD >>                <<01549>>20385000
             PINN := X;  << SAVE X -- BEFORE IT IS DESTROYED >><<06671>>20390000
             IF J.NULL'FIELDBIT = 1 THEN GOTO ERROR;           <<01549>>20395000
             IF PINN <> RPCB AND NOT PRIV THEN GOTO NONO;      <<06671>>20400000
<<           IF LOGICAL(PINN)>%377 THEN GOTO NONO;  >>         <<06671>>20405000
             FLAGS.LOCBIT := 1;                                <<06671>>20410000
             END                                               <<01549>>20415000
          ELSE                                                 <<01549>>20420000
             BEGIN << NO PIN SPECIFIED >>                      <<01549>>20425000
             PINN := RPCB;                                     <<06671>>20430000
             END;                                              <<01549>>20435000
          @PIN'LOC := @PINFO; << SAVE POINTER FOR ERROR >>     <<01549>>20440000
                                                               <<01549>>20445000
          IF SEGFIELD'PRESENT THEN                             <<01549>>20450000
             BEGIN                                             <<01549>>20455000
             IF NEXTTOKEN = T'ATSIGN THEN                      <<01549>>20460000
                BEGIN << ALL LOCATIONS >>                      <<01549>>20465000
                SEGNR := ALL'SEGS;                             <<06103>>20470000
                TOS := 0; << SPACE FOR PNTR RET. BY G'T >>     <<01549>>20475000
                GETTOKEN (BPS0,J,0); << SCAN PAST @ >>         <<01549>>20480000
                DEL;  << REMOVE POINTER >>                     <<01549>>20485000
                << MUST END IN "," OR CR >>                    <<01549>>20490000
                J := FIELD (",");                              <<01549>>20495000
                IF J.NULL'FIELDBIT <> 1 THEN GOTO ERROR;       <<01549>>20500000
                LOCATION.CRBIT := J.CRBIT;                     <<01549>>20505000
                RETURN;                                        <<01549>>20510000
                END;                                           <<01549>>20515000
             << GET TYPE OF SEG >>                             <<01549>>20520000
             X := -1;                                          <<01549>>20525000
             WHILE (X:=X+1) < 4 AND                            <<01549>>20530000
               (LIB(X)&LSR(8)) <> (LOGICAL(PINFO) LAND %137) DO<<02344>>20535000
                BEGIN   END;                                   <<01549>>20540000
             IF X = 4 THEN X := PROG'SEG;                      <<06103>>20545000
             LOC'SEGTYPE := X;                                 <<01549>>20550000
             IF LOC'SEGTYPE < 2 AND NOT PRIV THEN GOTO ERROR;  <<01549>>20555000
             << SCAN PASS LIB SPECIFICATION IF PRESENT >>      <<01549>>20560000
             IF LOC'SEGTYPE < 4 THEN GETCHAR;                           20565000
             IF LOGICALMAPPING AND LOC'SEGTYPE = ABS'SEG THEN  <<07319>>20570000
                IF (LOGICAL(PINFO) LAND %137) =                <<06103>>20575000
                   (XINDICATOR & LSR(8)) THEN                  <<06103>>20580000
                   BEGIN                                       <<06103>>20585000
                      XFLAG:=1;                                <<06103>>20590000
                      GETCHAR;                                 <<06103>>20595000
                   END                                         <<06103>>20600000
                ELSE                                           <<06103>>20605000
                   XFLAG:=0;                                   <<06103>>20610000
             J := FIELD (".");  << GET SEG >>                  <<01549>>20615000
             SEGNR:=X;                                         <<06103>>20620000
             IF J.NULL'FIELDBIT = 1 THEN                       <<01549>>20625000
                BEGIN                                          <<01549>>20630000
                << UNTIL PMAP INFO AVAILABLE: >>               <<01549>>20635000
                GOTO ERROR;                                    <<01549>>20640000
                << MUST BE OF FORM PIN..DISP >>                <<01549>>20645000
                IF NOT PINFIELD'PRESENT OR LOC'SEGTYPE < 4     <<01549>>20650000
                   THEN GOTO ERROR                             <<01549>>20655000
                ELSE PROCOFFSET'OK := TRUE;                    <<01549>>20660000
                END                                            <<01549>>20665000
             ELSE                                              <<01549>>20670000
                BEGIN                                          <<01549>>20675000
                IF LOC'SEGTYPE <> ABS'SEG AND                  <<06103>>20680000
                   (SEGNR > %377)                              <<06103>>20685000
                THEN GOTO NONO;                                <<01549>>20690000
                PROCOFFSET'OK := FALSE;                        <<01549>>20695000
                END;                                           <<01549>>20700000
             END                                               <<01549>>20705000
          ELSE << NO SEG FIELD >>                              <<01549>>20710000
             BEGIN                                             <<01549>>20715000
             XFLAG:=0;                                         <<06103>>20720000
             IF OBJID(OBJIDTYPEFIELD) = OBJIDSLTYPE THEN       <<06663>>20725000
                SEGNR := OBJID(OBJIDNUMFIELD)                  <<06663>>20730000
             ELSE                                              <<06103>>20735000
                IF LOGICALMAPPING THEN                         <<06103>>20740000
                   BEGIN                                       <<06103>>20745000
                      XFLAG:=1;                                <<06103>>20750000
                      SEGNR:=OBJID(OBJIDNUMFIELD);             <<06663>>20755000
                   END                                         <<06103>>20760000
                ELSE                                           <<06103>>20765000
                   SEGNR:=OBJID(OBJIDNUMFIELD)+%300;           <<06663>>20770000
             LOC'SEGTYPE := ABS'SEG;                           <<01549>>20775000
             PROCOFFSET'OK := FALSE; << UNTIL PMAP AVAIL >>    <<01549>>20780000
             END;                                              <<01549>>20785000
                                                               <<01549>>20790000
          SEGTYPE := LOC'SEGTYPE;  << RETURN SEGTYPE >>        <<06103>>20795000
          @SEG'LOC := @PINFO; << FOR FUTURE ERROR MESS.  >>    <<01549>>20800000
                                                               <<01549>>20805000
          << IF PROCDESIGNATOR PRESENT, THEN TRANSLATE >>      <<01549>>20810000
          IF NEXTTOKEN = T'IDENT THEN                          <<01549>>20815000
             BEGIN                                             <<01549>>20820000
             IF NOT PROCOFFSET'OK THEN GOTO ERROR;             <<01549>>20825000
             << PROCOFFSET: PROCNAME[#SEGNAME] >>              <<01549>>20830000
             GETTOKEN (PROCDESIG,J,1);                         <<01549>>20835000
             << SCAN PASS #SEGNAME >>                          <<01549>>20840000
             IF NEXTTOKEN = T'POUNDSIGN THEN                   <<01549>>20845000
                BEGIN                                          <<01549>>20850000
                TOS := 0;<< SPACE FOR PNT'R RET. BY GETTOKEN >><<01549>>20855000
                GETTOKEN (BPS0,J,1);                           <<01549>>20860000
                IF NEXTTOKEN=T'IDENT THEN GETTOKEN (BPS0,J,1); <<01549>>20865000
                DEL;  << POINTER RETURNED BY GETTOKEN >>       <<01549>>20870000
                END;                                           <<01549>>20875000
             IF NOT TRANS'PROCOFFSET(PROCDESIG,SEGNR,DISP) THEN<<06103>>20880000
                GOTO ERROR;                                    <<01549>>20885000
             << GET DISPLACEMENT >>                            <<01549>>20890000
             J := FIELD (":" LOR %100000);                     <<01549>>20895000
             IF J.NULL'FIELDBIT = 0 THEN DISP := DISP+X;       <<01549>>20900000
             END                                               <<01549>>20905000
          ELSE << NO PROCOFFSET, JUST DISPLACEMENT >>          <<01549>>20910000
             BEGIN                                             <<01549>>20915000
             J := FIELD( ":" LOR %100000);                     <<01549>>20920000
             DISP := X;                                        <<01549>>20925000
             << CHECK FOR ':' & NULL FIELD >>                  <<01549>>20930000
             IF J.NULL'FIELDBIT = 1 AND                        <<01549>>20935000
                ((J.DELIMBITS = RHSMATCH) OR SEGFIELD'PRESENT) <<01549>>20940000
             THEN GOTO ERROR;                                  <<01549>>20945000
             LOCATION.NULL'FIELDBIT := J.NULL'FIELDBIT;        <<01549>>20950000
             END;                                              <<01549>>20955000
                                                               <<01549>>20960000
          SW:=0;                                               <<06103>>20965000
          << CHECK FOR CONDITION >>                            <<01549>>20970000
          IF J.DELIMBITS = RHSMATCH THEN                       <<01549>>20975000
             BEGIN << LAST DELIM WAS ":", PROCESS COND. >>     <<01549>>20980000
             LOCATION.(15:1) := 1;  << RETURN ":" SEEN >>      <<01549>>20985000
             IF NEXTTOKEN = T'ATSIGN THEN                      <<01549>>20990000
                BEGIN                                          <<01549>>20995000
                SW:=1;                                         <<06103>>21000000
                TOS := 0; << SPACE FOR PNT'R RET. BY G'T >>    <<01549>>21005000
                GETTOKEN (BPS0,J,0); << SCAN PASS @ >>         <<01549>>21010000
                DEL;  << REMOVE RETURNED POINTER >>            <<01549>>21015000
                END;                                           <<01549>>21020000
             << GET CONDITION IF PRESENT >>                    <<01549>>21025000
             COND'STAK(0) := 0;  << EMPTY STAK >>              <<01549>>21030000
             CONDITION (COND'STAK,COND'STAK(0));               <<01549>>21035000
             END                                               <<01549>>21040000
          ELSE  << TAKE DEFAULT: COUNT := 1 >>                 <<01549>>21045000
             BEGIN                                             <<01549>>21050000
             COND'STAK(0) := 0;                                <<01549>>21055000
             END;                                              <<01549>>21060000
                                                               <<01549>>21065000
          << MUST END IN "," OR CR >>                          <<01549>>21070000
          J := FIELD (",");                                    <<01549>>21075000
          LOCATION.CRBIT := J.CRBIT;                           <<01549>>21080000
                                                               <<01549>>21085000
    END; << LOCATION >>                                        <<01549>>21090000
$PAGE "          BREAKPOINT ENTRY MANIPULATORS"                <<01007>>21095000
  SUBROUTINE SETBREAK(FLAGS,PINN,DEBUGID,PLOC,COND,PARM);      <<06671>>21100000
    VALUE FLAGS,PINN,DEBUGID,PLOC,PARM;                        <<06671>>21105000
    INTEGER FLAGS,PINN,PLOC,PARM;                              <<06671>>21110000
    DOUBLE DEBUGID;                                            <<06103>>21115000
    INTEGER ARRAY COND;                                        <<01549>>21120000
    BEGIN                                                               21125000
          FLAGS.PRIVBIT := PRIV;                               <<06671>>21130000
          << IF REQUESTED LOCAL MODE THEN LOC. MODE >>         <<01549>>21135000
          << ELSE TAKE DEFAULT - SYS MODE IF SYSBRK >>         <<01549>>21140000
          FLAGS.LOCBIT := IF FLAGS.LOCBIT = 1 OR NOT SYSBRK    <<06671>>21145000
                         THEN 1                                <<01549>>21150000
                         ELSE 0;                               <<01549>>21155000
          FLAGS.PERMBIT := DEBUGID < 0D;  << @ SEEN >>         <<06671>>21160000
          << DBLTRAP IF CONDITION SPEICIED OR ... >>           <<01549>>21165000
          << COUNT SPECIFIED                      >>           <<01549>>21170000
          FLAGS.DBLTRAP := IF COND(0) > 0 OR                   <<06671>>21175000
                          FLAGS.PERMBIT = 1 THEN 1 ELSE 0;     <<06671>>21180000
          TOS:=DEBUGID; << CLEAR PERM BIT >>                   <<06103>>21185000
          S1.(0:1):=0;                                         <<06103>>21190000
          DS7:=TOS;                                            <<06103>>21195000
          J := ENTERSTOP(FLAGS,PINN,DEBUGID,PLOC,COND,         <<06671>>21200000
                         PLABEL,PLABELMODE);                   <<06671>>21205000
          IF J <> 0 THEN                                       <<01549>>21210000
             BEGIN << PROCESS ERROR >>                         <<01549>>21215000
             IF J = 1 THEN GOTO NONO                           <<01549>>21220000
             ELSE IF J = 4 THEN WARN_5                         <<01549>>21225000
             ELSE IF J = 5 THEN GOTO NONO'PIN                  <<01549>>21230000
             ELSE IF J = 6 THEN GOTO NONO'SEG                  <<01549>>21235000
             ELSE                                              <<01549>>21240000
                BEGIN                                          <<01549>>21245000
                ERRMSG(J+1);                                   <<01549>>21250000
                GOTO NEXT;                                     <<01549>>21255000
                END;                                           <<01549>>21260000
             END;                                              <<01549>>21265000
    END;                                                                21270000
            << >>                                                       21275000
  SUBROUTINE RELBREAK(FLAGS,PINN,DEBUGID,P,PLABEL);            <<06671>>21280000
    VALUE   FLAGS,PINN,DEBUGID,P;                              <<06671>>21285000
    INTEGER FLAGS,PINN,P,PLABEL;                               <<06671>>21290000
    DOUBLE DEBUGID;                                            <<06103>>21295000
    BEGIN                                                               21300000
          << IF REQUESTED LOCAL MODE THEN LOC. MODE >>         <<01549>>21305000
          << ELSE TAKE DEFAULT - SYS MODE IF SYSBRK >>         <<01549>>21310000
          FLAGS.locbit := if FLAGS.locbit=1 OR                 <<06671>>21315000
                             NOT SYSBRK                        <<06671>>21320000
                         THEN 1                                <<01549>>21325000
                         ELSE 0;                               <<01549>>21330000
          J := REMOVESTOP(FLAGS,PINN,DEBUGID,P,REG,            <<06671>>21335000
                          plabel,plabelmode);                  <<06671>>21340000
          IF J = 1 THEN GOTO NONO'PIN                          <<01549>>21345000
          ELSE IF J=2 THEN GOTO NONO'SEG;                      <<01549>>21350000
    END;                                                                21355000
            << >>                                              <<01549>>21360000
  SUBROUTINE DEF'MOVEFROMDSEG;                                 <<01549>>21365000
            << >>                                              <<01549>>21370000
  INTEGER SUBROUTINE OPER'LINK (STOP,LINK,OPNUM);              <<01549>>21375000
    VALUE LINK,OPNUM;                                          <<01549>>21380000
    INTEGER LINK,OPNUM;                                        <<01549>>21385000
    INTEGER ARRAY STOP;                                        <<01549>>21390000
    BEGIN                                                      <<01549>>21395000
    COMMENT:                                                   <<01549>>21400000
          THIS ROUTINE RETURNS THE LINK OF THE                 <<01549>>21405000
          REQUESTED OPERAND.                                   <<01549>>21410000
          PARAMETERS:                                          <<01549>>21415000
             STOP:    ARRAY CONTAINING BREAKPOINT              <<01549>>21420000
                      ENTRY                                    <<01549>>21425000
             LINK:    INDEX OF COND. IN STOP.                  <<01549>>21430000
             OPNUM:   OPERAND NUMBER (1/2)                     <<01549>>21435000
          RETURNS:                                             <<01549>>21440000
                      INDEX OF OPERAND IN ARRAY STOP           <<01549>>21445000
          NOTE:                                                <<01549>>21450000
                      NAMES OF PARAMETERS MUST NOT             <<01549>>21455000
                      BE CHANGED. THEY ARE NEEDED FOR          <<01549>>21460000
                      THE DEFINES LINKOPX;                     <<01549>>21465000
                                                               <<01549>>21470000
          IF OPNUM = 1 THEN OPER'LINK := LINKOP1               <<01549>>21475000
          ELSE OPER'LINK := LINKOP2;                           <<01549>>21480000
                                                               <<01549>>21485000
  END;                                                         <<01549>>21490000
            << >>                                              <<01549>>21495000
  SUBROUTINE FORMAT'OPER (OPARR,INFO);                         <<01549>>21500000
    VALUE INFO;                                                <<01549>>21505000
    INTEGER INFO;                                              <<01549>>21510000
    INTEGER ARRAY OPARR;                                       <<01549>>21515000
    BEGIN                                                      <<01549>>21520000
                                                               <<01549>>21525000
    COMMENT:                                                   <<01549>>21530000
          THIS ROUTINE FORMATS THE OPERAND IN OPARR.           <<01549>>21535000
          OPERAND IS EITHER A CONSTANT OR AN ADDRESS.          <<01549>>21540000
          PARAMAETERS:                                         <<01549>>21545000
             OPARR:  ARRAY CONTAINING THE OPERAND              <<01549>>21550000
             INFO:   DESCRIPTOR OF OPERAND                     <<01549>>21555000
          RESULTS:                                             <<01549>>21560000
                     FORMATTED OPERAND PLACED AT NEXT          <<01549>>21565000
                     LOCATION IN OUTPUT ARRAY.;                <<01549>>21570000
                                                               <<01549>>21575000
          IF INFO <> CONST'PRIMARY THEN                        <<01549>>21580000
             BEGIN  << ADDRESS >>                              <<01549>>21585000
             SENDID (REGY(OPARR.BKPT'REG)); << SEND REG >>     <<01549>>21590000
             IF OPARR.BKPT'REG = REGEA OR                      <<01549>>21595000
                OPARR.BKPT'REG = REGDA                         <<01549>>21600000
             THEN SENDOCT (OPARR.BKPT'BASE); << BANK-DST NUM >><<01549>>21605000
             << HANDLE OFFSET >>                               <<01549>>21610000
             IF OPARR.BKPT'REG = REGA THEN SENDOCT (OPARR(1))  <<01549>>21615000
             ELSE IF OPARR.BKPT'REG = REGEA THEN               <<01549>>21620000
                BEGIN                                          <<01549>>21625000
                SEND ("+");                                    <<01549>>21630000
                SENDOCT (OPARR(1));                            <<01549>>21635000
                END                                            <<01549>>21640000
             ELSE                                              <<01549>>21645000
                BEGIN << SEND + OR - >>                        <<01549>>21650000
                IF OPARR(1) >= 0 THEN SEND ("+")               <<01549>>21655000
                ELSE SEND ("-");                               <<01549>>21660000
                SENDOCT (\OPARR(1)\);                          <<01549>>21665000
                END;                                           <<01549>>21670000
             << INDIRECTION >>                                 <<01549>>21675000
             IF INFO = IND'PRIMARY THEN                        <<01549>>21680000
                BEGIN                                          <<01549>>21685000
                SEND (":");                                    <<01549>>21690000
                IF OPARR(2) < 0 THEN SEND ("-");               <<01549>>21695000
                SENDOCT (\OPARR(2)\);                          <<01549>>21700000
                END                                            <<01549>>21705000
             END  << ADDRESS >>                                <<01549>>21710000
          ELSE                                                 <<01549>>21715000
             BEGIN << CONSTANT >>                              <<01549>>21720000
             IF OPARR < 0 THEN SEND ("-");                     <<01549>>21725000
             SENDOCT (\OPARR\);                                <<01549>>21730000
             END;                                              <<01549>>21735000
    END;                                                       <<01549>>21740000
            << >>                                              <<01549>>21745000
  SUBROUTINE FORMAT'COND (STOP,COND'LINK);                     <<01549>>21750000
    VALUE COND'LINK;                                           <<01549>>21755000
    INTEGER COND'LINK;                                         <<01549>>21760000
    INTEGER ARRAY STOP;                                        <<01549>>21765000
    BEGIN                                                      <<01549>>21770000
    COMMENT:                                                   <<01549>>21775000
          THIS ROUTINE FORMATS THE CONDITION WHOSE             <<01549>>21780000
          BASE IS AT STOP(COND'LINK).                          <<01549>>21785000
          (A CONDITON IS EITHER A COUNT OR                     <<01549>>21790000
          'OPER RELOP OPER');                                  <<01549>>21795000
                                                               <<01549>>21800000
          IF STOP(COND'LINK).BKPT'CONDTYPE  <> T'NUMBER THEN   <<01549>>21805000
             BEGIN << CONDITON >>                              <<01549>>21810000
             J := OPER'LINK (STOP,COND'LINK,1);<<LINK 1ST OP>> <<01549>>21815000
             FORMAT'OPER(STOP(J),STOP(COND'LINK).BKPT'OP1INFO);<<01549>>21820000
             << SEND RELOP >>                                  <<01549>>21825000
             J := STOP(COND'LINK).BKPT'CONDTYPE-FIRSTSPECIAL;  <<01549>>21830000
             SENDID (SPECIALS(J));                             <<01549>>21835000
             J := OPER'LINK (STOP,COND'LINK,2);<<LINK 2ND OP>> <<01549>>21840000
             FORMAT'OPER(STOP(J),STOP(COND'LINK).BKPT'OP2INFO);<<01549>>21845000
             END                                               <<01549>>21850000
          ELSE                                                 <<01549>>21855000
             BEGIN << COUNT >>                                 <<01549>>21860000
             FORMAT'OPER (STOP(COND'LINK-2),CONST'PRIMARY);    <<01549>>21865000
             SEND ("/");                                       <<01549>>21870000
             << NUMBER OF HITS >>                              <<01549>>21875000
             FORMAT'OPER (STOP(COND'LINK-1),CONST'PRIMARY);    <<01549>>21880000
             END;                                              <<01549>>21885000
    END;                                                       <<01549>>21890000
                                                               <<01549>>21895000
            << >>                                              <<01549>>21900000
  SUBROUTINE FORMAT'BKPT (STOP);                               <<01549>>21905000
    INTEGER ARRAY STOP;                                        <<01549>>21910000
    BEGIN                                                      <<01549>>21915000
    COMMENT:                                                   <<01549>>21920000
          THIS ROUTINE FORMATS THE BREAKPOINT ENTRY            <<01549>>21925000
          STARTING AT STOP(0);                                 <<01549>>21930000
          RTC := STOP (OBJIDOFFSET+1); <<PASSED TO LOGICALCST>><<06663>>21935000
          << TRANSLATE OBJIDTYPE TO PHYSICAL CST >>            <<06663>>21940000
          OBJIDR := STOP(OBJIDOFFSET);                         <<06663>>21945000
          IF OBJIDR(OBJIDTYPEFIELD)= OBJIDSLTYPE THEN          <<06663>>21950000
                << SL SEGMENT - CHANGE TO SEG # >>             <<06663>>21955000
                IF LOGICALMAPPING THEN                         <<06663>>21960000
                   RTC.(0:1):=1 <<PGM TYPE>>                   <<06663>>21965000
                ELSE                                           <<06663>>21970000
             ELSE <<PROGRAM SEGMENT IDENTIFIER>>               <<06663>>21975000
                IF NOT LOGICALMAPPING THEN                     <<06663>>21980000
                RTC:=RTC+%300;                                 <<06663>>21985000
                                                               <<06663>>21990000
                                                               <<06663>>21995000
                                                               <<06663>>22000000
                                                               <<06663>>22005000
                                                               <<06663>>22010000
                                                               <<06663>>22015000
          RTP := STOP(PLOCOFFSET);                             <<01549>>22020000
          << ADJUST FOR FAKE BREAKPOINT >>                     <<01549>>22025000
          IF STOP.BKPT'FAKE = 1 THEN                           <<01549>>22030000
             RTP := RTP - 1 - STOP.BKPT'TW;                    <<01549>>22035000
          FORMT;  << FORMAT LOCATION >>                        <<01549>>22040000
          SEND(",");                                           <<07319>>22045000
          IF STOP(FLAGS2OFFSET).BKPT'TRACE = 1 THEN            <<07319>>22050000
             SEND("T")                                         <<07319>>22055000
          ELSE                                                 <<07319>>22060000
             SEND("B");                                        <<07319>>22065000
          IF STOP.BKPT'COND = 1 OR STOP.BKPT'PERM = 1 THEN     <<01549>>22070000
             BEGIN                                             <<01549>>22075000
             SEND (",");                                       <<01549>>22080000
             IF STOP.BKPT'PERM = 1 THEN SEND ("@");            <<01549>>22085000
             IF STOP.BKPT'COND = 1 THEN                        <<01549>>22090000
                FORMAT'COND (STOP,(STOP.BKPT'SIZE-1));         <<01549>>22095000
             END;                                              <<01549>>22100000
    END;                                                       <<01549>>22105000
                                                               <<01549>>22110000
            << >>                                              <<01549>>22115000
  INTEGER SUBROUTINE HEAD'BKPT'LIST (PROC,DSTNUM);             <<01549>>22120000
    VALUE PROC,DSTNUM;                                         <<01549>>22125000
    INTEGER PROC,DSTNUM;                                       <<01549>>22130000
    BEGIN                                                      <<01549>>22135000
    COMMENT:                                                   <<01549>>22140000
          THIS ROUTINE RETURNS THE INDEX OF THE                <<01549>>22145000
          1ST ENTRY OF THE BREAKPOINT CHAIN OF                 <<01549>>22150000
          PROC.                                                <<01549>>22155000
          PARAMETERS:                                          <<01549>>22160000
             PROC:    IF 0 THEN SYS BREAKPOINT CHAIN           <<01549>>22165000
                      ELSE PIN NUMBER                          <<01549>>22170000
             DSTNUM:  DST NUMBER OF SEGMENT CONTAINING         <<01549>>22175000
                      TABLE                                    <<01549>>22180000
          RETURNS:                                             <<01549>>22185000
             <> 0:    INDEX OF 1ST ENTRY                       <<01549>>22190000
                0:    CHAIN IS EMPTY;                          <<01549>>22195000
                                                               <<01549>>22200000
          IF PROC = 0 THEN J := SYS'BKPT'EXT'X                 <<01549>>22205000
          ELSE J := PCBI'                                      <<01549>>22210000
                    (PROC*PCBSIZE+PCB'BKPT'WD);                <<06671>>22215000
          IF J <> 0 THEN MOVEFROMDSEG (@J,DSTNUM,J,1);         <<01549>>22220000
          HEAD'BKPT'LIST := J;                                 <<01549>>22225000
    END;                                                       <<01549>>22230000
                                                               <<01549>>22235000
            << >>                                              <<01549>>22240000
  SUBROUTINE COPY'BKPT'ENTRY (INDEX,DSTNUM,RESULT);            <<01549>>22245000
    VALUE INDEX,DSTNUM;                                        <<01549>>22250000
    INTEGER INDEX,DSTNUM;                                      <<01549>>22255000
    INTEGER ARRAY RESULT;                                      <<01549>>22260000
    BEGIN                                                      <<01549>>22265000
    COMMENT:                                                   <<01549>>22270000
          THIS ROUTINE COPYS THE REQUEST BREAKPOINT            <<01549>>22275000
          ENTRY.                                               <<01549>>22280000
          PARAMETERS:                                          <<01549>>22285000
             INDEX:    INDEX OF ENTRY IN THE BREAKPOINT        <<01549>>22290000
                       TABLE                                   <<01549>>22295000
             DSTNUM:   DST NUMBER OF THE BREAKPOINT TABLE      <<01549>>22300000
          RETURNS:                                             <<01549>>22305000
             RESULT:   THE REQUESTED BREAKPOINT ENTRY          <<01549>>22310000
                       (TRAILING ZEROS HAVE BEEN REMOVED);     <<01549>>22315000
                                                               <<01549>>22320000
          MOVEFROMDSEG (@RESULT,DSTNUM,INDEX,1);               <<06663>>22325000
          MOVEFROMDSEG (@RESULT+1,DSTNUM,INDEX+1,              <<06663>>22330000
                        RESULT.BKPT'SIZE-1);                   <<06663>>22335000
          J := RESULT.BKPT'SIZE - 1;                           <<01549>>22340000
          WHILE RESULT(J) = 0 DO J := J-1;                     <<01549>>22345000
          RESULT.BKPT'SIZE := J+1;                             <<01549>>22350000
    END;                                                       <<01549>>22355000
                                                               <<01549>>22360000
$PAGE "          ENTER AND DETERMINE ENVIRONMENT"              <<01007>>22365000
            << >>                                                       22370000
                                                                        22375000
                                                                        22380000
  SYSTEMDEBUG:                                                          22385000
  SNOOP:                                                                22390000
                                                                        22395000
          TRAPSOFF;                                                     22400000
          BREAKFLAG:=FALSE;                                    <<07319>>22405000
          IF STATUS.(8:8)=BRPTCSTN THEN                                 22410000
             IF NOT LOGICALMAPPING OR                          <<06103>>22415000
                LOGICALMAPPING AND LOGICAL (DELTAP.(1:1)) THEN <<06103>>22420000
               BEGIN DISABLE;      <<BREAKPOINT>>                       22425000
                     X_XREGISTER; << SAVE X FROM ININ >>       <<01040>>22430000
                     TOS_MARK;                                          22435000
                     DUPLICATE;                                         22440000
                     PUSH(S,Q);                                         22445000
                     ASSEMBLE(CAB,SUB; XCH,CAB; SUB,XCH);               22450000
                     SET(Q,S);                                          22455000
                     ENABLE;                                            22460000
                     BREAKFLAG:=0;                             <<06103>>22465000
                     IF X=TRUE THEN DBL'INSTR'ADJ_1;           <<01040>>22470000
                     BREAK_TRUE;                                        22475000
               END;                                                     22480000
          DISABLE;                                                      22485000
          X_@INFO(LAST'IND)-@MARK;                             <<01549>>22490000
          ENABLE;                                                       22495000
          WHILE (X_X-1)>1 DO STAK(X)_0;                                 22500000
          ERRORON;                                                      22505000
          IF PMBC'UCODE THEN                                   <<07319>>22510000
             IF STATUS.STATUS'M = 1 THEN   << PRIV >>          <<07319>>22515000
                BEGIN                                          <<07319>>22520000
                   TOS:=%100003;    << DISABLE PMBC >>         <<07319>>22525000
                   ASSEMBLE(CON %20104, %11);                  <<07319>>22530000
                   PMBC'OFF := TRUE;                           <<07319>>22535000
                END;                                           <<07319>>22540000
          CRIT_SETCRITICAL;                                             22545000
          RDX_0;                   <<SAVE DB ENVIRONMENT>>              22550000
          TOS _ PCBI'((PINX_PIX)+dbxdsinfowordnum);            <<06671>>22555000
          IF >= THEN TOS _ 0D ELSE                                      22560000
               BEGIN PUSH(DB);                                          22565000
                     RDX_2;                                             22570000
                     RESETDB(-1);                                       22575000
               END;                                                     22580000
          DRDBV _ TOS;       <<BANK,DB>>                                22585000
          TOS_TOS.(2:14);                                      <<06671>>22590000
          DUPLICATE;                                                    22595000
          RDBX_TOS;                                                     22600000
          IF TOS<>0 THEN                                                22605000
               BEGIN RDX_RDX+1;                                         22610000
                     EXCHANGEDB(0);                                     22615000
               END;                                                     22620000
          PXGLOBAL;                                            <<06633>>22625000
          ldev'in:=pxg'inputldev;                              <<06671>>22630000
          ldev'out:=pxg'outputldev;                            <<06671>>22635000
         K:=F(%1074).(8:8);<<CONSOLE LDEV #>>                  <<00552>>22640000
         IF  PXG'INTERACTIVE=0  THEN                           <<06633>>22645000
            BEGIN                                              <<00829>>22650000
                                                               <<00829>>22655000
            <<BATCH JOBS WHOSE INPUT DEVICE IS NOT CONSOLE MAY <<00829>>22660000
            <<USE DEBUG IF THEY ARE IN BREAK MODE, AND THEN THE<<00829>>22665000
            <<INPUT & OUTPUT DEVICES ARE THE SYSTEM CONSOLE>>  <<00829>>22670000
                                                               <<00829>>22675000
            IF NOT BREAK THEN GO TO FINI;<<DEBUG NOT ALLOWED>> <<00829>>22680000
            ldev'in:=ldev'out:=k <<console is in and out ldev>><<06671>>22685000
         END;                                                  <<00829>>22690000
         SYS := PCBI'(PINX+PROCSTATEWORDNUM).PTYPEFIELD';      <<06671>>22695000
         IF SYS<>0 THEN <<SYSTEM PROCESS>>                     <<00590>>22700000
         BEGIN                                                 <<00590>>22705000
            PRIV := TRUE;                                               22710000
            IF PCBI'(PINX+PROCSTATEWORDNUM).PTYPEFIELD = 2 THEN<<06671>>22715000
               SYSBRK := FALSE                                          22720000
            ELSE                                                        22725000
            BEGIN                                              <<00590>>22730000
            ldev'in:=ldev'out:=k;<<console is in and out ldev>><<06671>>22735000
               SYSBRK:=TRUE;  <<PRIVILEGED, SYSTEM BREAK>>     <<00590>>22740000
            END;                                               <<00590>>22745000
         END                                                   <<00590>>22750000
         ELSE       <<NON-SYSTEM PROCESS>>                     <<00590>>22755000
         BEGIN                                                 <<00590>>22760000
            K:=PXG'JITDST;  <<JIT>>                            <<06633>>22765000
            EXCHANGEDB(K);                                     <<00552>>22770000
            SYSBRK := FALSE;                                   <<00590>>22775000
            PRIV:=BASE(39).(9:1);<<GET PRIVILEGED BIT>>        <<00590>>22780000
            EXCHANGEDB(0);                                     <<00552>>22785000
         END;                                                  <<00552>>22790000
          REG(REGSY) _ %1000;          <<PROCESS REGISTERS>>            22795000
          RPCB _ PINX/PCBSIZE;                                          22800000
          RSTK := PCBI'(PINX+stkinfowordnum).stkdstfield;      <<06671>>22805000
          RLSTT := PCBI'(PINX+MAPDSTWORDNUM);                  <<06671>>22810000
          RS  _@USERS;                                                  22815000
          RQ  _@MARK-MARK;                                              22820000
          PUSH(Z,DL);                                                   22825000
          RDL _TOS;                                                     22830000
          RZ  _TOS;                                                     22835000
          RX  _XREGISTER;                                               22840000
          RP  _DELTAP.(2:14);                                           22845000
          TOS_STATUS;                                                   22850000
          DUPLICATE;                                                    22855000
          RST _TOS;                                                     22860000
          RCST _TOS.(8:8);                                              22865000
          IF LOGICALMAPPING THEN                               <<06103>>22870000
             RMF := DELTAP.(1:1)                               <<06103>>22875000
          ELSE                                                 <<06103>>22880000
             RMF := 0;                                         <<06103>>22885000
          RCST.(0:1) := RMF;                                   <<06103>>22890000
          PDISABLE;                                                     22895000
          OBJ   := MAPPEDCSTTOPHYCST(RCST,PINX);               <<06663>>22900000
          TOS := CONVSEGIDTOSTINX (OBJ);  <<OBJ IS DOUBLEWORD>><<06663>>22905000
          RPL _ (DSTI'(TOS).(4:12))&LSL(2)-1;                           22910000
          PENABLE;                                                      22915000
          SETOBJ(%120,OBJ  ,BANK); <<FREEZE CURRENT CODE SEG>> <<06663>>22920000
          STTLEN:=BASE(RPL).(8:8)+1; <<LAST STT ENTRY + 1>>    <<00180>>22925000
          RESETOBJ(%120,OBJ  );  <<UNFREEZE CODE SEGMENT>>     <<06663>>22930000
          EXIT'TO'TRAP := FALSE; << USER TRAP >>               <<01069>>22935000
          IF BREAK THEN                                                 22940000
               BEGIN                                           <<01040>>22945000
                     COMMENT: RP POINTS TO 1ST WORD            <<01040>>22950000
                        OF INSTR. IF DBL'INSTR'ADJ THEN        <<01040>>22955000
                        %36000 AT RP+1;                        <<01040>>22960000
                     TOS _ TESTSTOP(OBJ,                       <<06663>>22965000
                            RP+INTEGER(DBL'INSTR'ADJ),PINX);   <<01040>>22970000
                     IF TOS.BKPT'TRACE = 1 THEN                <<07319>>22975000
                        B'TRACE := TRUE;                       <<07319>>22980000
                     ASSEMBLE(TBC 1);                                   22985000
                     IF <> THEN PRIV_TRUE;                              22990000
                     ASSEMBLE(TBC 2);                                   22995000
                     DEL;                                               23000000
                     IF = THEN SYSBRK_TRUE ELSE SYSBRK_FALSE;  <<01549>>23005000
                     IF STATUS<0 THEN PRIV_TRUE;                        23010000
                     SEGTYPE:=ABS'SEG;                         <<06103>>23015000
                     SW:=1;                                    <<06103>>23020000
                     XFLAG:=0;                                 <<06103>>23025000
                     SEGNR:=OBJID(OBJIDNUMFIELD);              <<06663>>23030000
                     IF OBJID(OBJIDTYPEFIELD)=OBJIDPGMTYPE THEN<<06663>>23035000
                        IF LOGICALMAPPING THEN                 <<06663>>23040000
                           XFLAG:=1                            <<06663>>23045000
                        ELSE                                   <<06663>>23050000
                           SEGNR:=SEGNR+%300;                  <<06663>>23055000
                     RELBREAK(0,rpcb,debugid,                  <<06671>>23060000
                             RP+INTEGER(DBL'INSTR'ADJ),PLABEL);<<01549>>23065000
                     IF X=0 THEN GOTO FINI   <<NULL BREAK>>    <<01069>>23070000
                     ELSE IF X=2 THEN        <<USER TRAP>>     <<01069>>23075000
                        BEGIN                                  <<01069>>23080000
                        << IF ARMED IN USER MODE AND EXEC.  >> <<01069>>23085000
                        << IN PRIV MODE THEN IGNORE ELSE OR >> <<01069>>23090000
                        IF NOT (PLABELMODE = 1 LAND STATUS < 0)<<06103>>23095000
                           THEN EXIT'TO'TRAP := TRUE;          <<01069>>23100000
                        GOTO FINI;                             <<01069>>23105000
                        END                                    <<01069>>23110000
                     ELSE PLABEL := 0;<< WILL CLEAR USER &...>><<01069>>23115000
                                      << DEBUG TRAPS FOR 'C' >><<01069>>23120000
               END;                                                     23125000
          RLOG_IF SYS<>0 THEN 0 ELSE GETLCST(RCST);                     23130000
          LINE;                                                         23135000
          TOS_@POUT;                                                    23140000
          IF BREAK THEN IF B'TRACE THEN MOVE *:="*TRACE* ",2   <<07319>>23145000
                                   ELSE MOVE *:="*BREAK* ",2   <<07319>>23150000
                     ELSE MOVE *_"*DEBUG* ",2;                          23155000
          IF SYSBRK THEN MOVE *_"SYS.",2;                               23160000
          IF PRIV THEN MOVE *_"PRIV.",2;                                23165000
          @POUT_TOS;                                                    23170000
          SENDLCST(RLOG);                                      <<06663>>23175000
          SEND(".");                                                    23180000
          SENDOCT(RP+INTEGER(DBL'INSTR'ADJ));                  <<01040>>23185000
          OUTPUT;                                                       23190000
          IF DBL'INSTR'ADJ THEN                                <<01040>>23195000
               BEGIN << WARN BREAK AT 2ND WORD OF >>           <<01040>>23200000
                     << INSTR. BUT P AT 1ST       >>           <<01040>>23205000
                     CLEAR;                                    <<01040>>23210000
                     MOVE POUT :=                              <<01040>>23215000
                        ( "**WARNING: BREAK AT 2ND OF TWO",    <<01040>>23220000
                          " WORD INSTRUCTION ==> P = "),2;     <<01040>>23225000
                     @POUT := TOS;                             <<01040>>23230000
                     SENDLCST(RLOG);                           <<06663>>23235000
                     SEND(".");                                <<01040>>23240000
                     SENDOCT(RP);                              <<01040>>23245000
                     OUTPUT;                                   <<01040>>23250000
               END;                                            <<01040>>23255000
          WARN_0;                                                       23260000
          EXPRLAB_@EXPRESSION;                                          23265000
          CONTLAB_@CONTENTS;                                            23270000
          RVALLAB_@REGVALUE;                                            23275000
          @COND'STAK := @INFO(IND'COND'STAK);                  <<01549>>23280000
        <<HELP;>>                                              <<01549>>23285000
        <<SETUPTABLE;>>                                        <<01549>>23290000
  NEXT:                                                                 23295000
          IF WARN<>0 THEN GOTO WARNING;                                 23300000
          TOS_@INFO(LAST'IND);                                 <<01549>>23305000
          SET(S);                                                       23310000
          RESETCRITICAL(CRIT);                                          23315000
          PRINTFLAG_0;                                                  23320000
          IF B'TRACE THEN GO TO DUMPL;                         <<07319>>23325000
          CLEAR;                                                        23330000
          SEND("?");                                                    23335000
          TYPE;                                                         23340000
          INPUT;                                                        23345000
          CRIT_SETCRITICAL;                                             23350000
          TOS_"  ";                                                     23355000
         TOS.(0:8) := IF PINFO=ALPHA                           <<02344>>23360000
                       THEN LOGICAL(PINFO) LAND %137           <<02344>>23365000
                      ELSE PINFO;                              <<02344>>23370000
          CHAR_TOS;                                                     23375000
          GETCHAR;                                                      23380000
          INDEX_-1;                                                     23385000
          WHILE (INDEX_INDEX+1)>=0 DO                                   23390000
               BEGIN TOS_COMMAND(INDEX);                                23395000
                     DUPLICATE;                                         23400000
                     IF TOS="  " THEN GOTO ERROR;                       23405000
                     IF TOS=CHAR THEN                                   23410000
                       BEGIN CHEKM(CMNPC,INDEX);                        23415000
                             GOTO SWCOM(INDEX);                         23420000
                       END;                                             23425000
               END;                                                     23430000
$PAGE "          ERROR CONDITION HANDLERS"                     <<01007>>23435000
  ERROR:                                                                23440000
          ERRMSG(0);                   <<SYNTAX>>                       23445000
          GOTO NEXT;                                                    23450000
  NONO:                                                                 23455000
          ERRMSG(1);                   <<ERROR>>                        23460000
          GOTO NEXT;                                                    23465000
  NONO'PIN:                                                    <<01549>>23470000
          << SET UP POINTER TO PIN >>                          <<01549>>23475000
          @PINFO := @PIN'LOC;                                  <<01549>>23480000
          GOTO NONO;                                           <<01549>>23485000
  NONO'SEG:                                                    <<01549>>23490000
          << SET UP POINTER TO SEG >>                          <<01549>>23495000
          @PINFO := @SEG'LOC;                                  <<01549>>23500000
          GOTO NONO;                                           <<01549>>23505000
  BOUNDS:                                                               23510000
          ERRMSG(2);                   <<BOUNDS>>                       23515000
          GOTO NEXT;                                                    23520000
  WARNING:                                                              23525000
          ERRMSG(WARN);                <<WARNING MSG>>                  23530000
          WARN_0;                                                       23535000
          GOTO NEXT;                                                    23540000
$PAGE "          HELP/SET REGISTER VALUE COMMANDS"             <<01007>>23545000
            << >>                                                       23550000
            << H E L P >>                                               23555000
            << >>                                                       23560000
  HELPL:                                                                23565000
          COMMENT:                                             <<01.KM>>23570000
            COMMAND MUST HAVE ONE OF THE FOLLOWING FORMS:      <<01.KM>>23575000
              (H   ) <BLANKS> (TERM    )                       <<01.KM>>23580000
              (HELP)          (TERMINAL)                       <<01.KM>>23585000
            WE DISALLOW "H T" TO AVOID CONFUSION WITH USER     <<01.KM>>23590000
            HELP FACILITY, "T" REFERRING TO DEBUG T-COMMAND;   <<01.KM>>23595000
                                                               <<01.KM>>23600000
          MOVE PINFO := PINFO WHILE ANS; <<UPSHIFT>>           <<00590>>23605000
          IF PINFO(-1)="HELP" THEN                             <<01.KM>>23610000
            BEGIN                                              <<01.KM>>23615000
            @PINFO:=@PINFO(2);         <<PTR TO "P">>          <<01.KM>>23620000
            GETCHAR;                   <<SKIP ANY BLANKS>>     <<01.KM>>23625000
            END;                                               <<01.KM>>23630000
          MOVE PINFO := PINFO WHILE ANS; <<UPSHIFT>>           <<00590>>23635000
          IF PINFO<>"TERMINAL",2 AND                           <<01.KM>>23640000
             PINFO<>"TERM",2 THEN GOTO ERROR;                  <<01.KM>>23645000
          SCAN * WHILE CRBLANK;                                <<01.KM>>23650000
          IF NOCARRY THEN GOTO ERROR;  <<NOT END OF LINE>>     <<01.KM>>23655000
          HELP;                                                         23660000
          GOTO NEXT;                                                    23665000
          << >>                                                         23670000
          << SET REGISTER VALUE >>                                      23675000
          << >>                                                         23680000
  SETRL:                                                                23685000
          GETID(TRUE);                                                  23690000
          INDEX_X;                                                      23695000
          IF < THEN GOTO ERROR;                                         23700000
          CHEKM(RMNPR,-INDEX);                                          23705000
          IF PINFO<>"_" THEN                                            23710000
             BEGIN                                                      23715000
             IF PINFO<>":" THEN GOTO ERROR;                             23720000
             GETCHAR;                                                   23725000
             IF PINFO<>"=" THEN GOTO ERROR;                             23730000
             END;                                                       23735000
          GETCHAR;                                                      23740000
          TOS_FIELD(0);                                                 23745000
          IF TOS=6 THEN GOTO NEXT;                                      23750000
          K_X;                                                          23755000
          FLAGY_1;                                                      23760000
          GOTO MRSW(INDEX);                                             23765000
          GOTO NEXT;                                                    23770000
$PAGE "          DUMP/MODIFY COMMANDS"                         <<01007>>23775000
            << >>                                                       23780000
            << DUMP REGISTERS/MEMORY >>                                 23785000
            << >>                                                       23790000
  DUMPL:                                                                23795000
          DUMPFLAG_TRUE;                                                23800000
          PRINTFLAG_DEVICE;                                             23805000
          TOS_BMNPD;                                                    23810000
          TOS_BMPMD;                                                    23815000
          GOTO DML;                                                     23820000
            << >>                                                       23825000
            << MODIFY REGISTERS/MEMORY >>                               23830000
            << >>                                                       23835000
  MODIFYL:                                                              23840000
          DUMPFLAG_FALSE;                                               23845000
          TOS_BMNPM;                                                    23850000
          TOS_BMPMM;                                                    23855000
  DML:                                                                  23860000
          K_TOS;                                                        23865000
          MODE_TOS;                                                     23870000
          IF B'TRACE THEN GO TO LREG;                          <<07319>>23875000
          GETID(FALSE);                                                 23880000
          INDEX_X;                                                      23885000
          IF = THEN GOTO LREG;                                          23890000
          IF < THEN INDEX_REGDB;                                        23895000
          CHEKM(MODE,INDEX);                                            23900000
          CHEKM(K,-INDEX);                                              23905000
          IF INDEX=REGV THEN GOTO LVIRT;                                23910000
          GOTO LMEMO;                                                   23915000
  LREG:   I_K_0;                                                        23920000
          IF B'TRACE THEN GO TO LR2;                           <<07319>>23925000
  LR1:    IF LOGICAL(PINFO)=CHARCR THEN GOTO LR2;                       23930000
          IF PINFO<>"," THEN GOTO ERROR;                                23935000
          GETCHAR;                                                      23940000
          GETID(TRUE);                                                  23945000
          INDEX_X;                                                      23950000
          IF < THEN GOTO LR1;                                           23955000
          CHEKM(RMNPR,-INDEX);                                          23960000
          TOS_1&CSR(INDEX+1);                                           23965000
          IF INDEX>=16                                                  23970000
               THEN  K_TOS LOR LOGICAL(K)                               23975000
               ELSE  I_TOS LOR LOGICAL(I);                              23980000
          GOTO LR1;                                                     23985000
  LR2:    IF (LOGICAL(I) LOR LOGICAL(K))=0 THEN                         23990000
               BEGIN I_MASK(RMNPR);                                     23995000
                     K_MASK(X_X+1);                                     24000000
                     MODE_0;                                            24005000
               END;                                                     24010000
          INDEX_0;                                                      24015000
          FLAGY_0;                                                      24020000
          TOS_I;                                                        24025000
          TOS_K;                                                        24030000
  LLNO:   CLEAR;                                                        24035000
  LR5:    IF (INDEX_INDEX+1)>REGEND THEN GOTO LR6;                      24040000
          IF INDEX=REG1 AND MODE=0 AND DUMPFLAG THEN                    24045000
             BEGIN OUTPUT;                                              24050000
                   CLEAR;                                               24055000
             END;                                                       24060000
          TOS_TOS&DLSL(1);                                              24065000
          IF >= THEN GOTO LR5;                                          24070000
          SENDREG(0,0,INDEX);                                           24075000
          IF DUMPFLAG THEN GOTO LR5;                                    24080000
          I_@POUT;                                                      24085000
  LR7:    TOS_INOCTAL(K,I);                                             24090000
          TOS.(14:1)_0;                                                 24095000
          IF <> THEN                                                    24100000
               BEGIN ASSEMBLE(DELB,DELB);                               24105000
                     TOS_0D;                                            24110000
                     ASSEMBLE(CAB);                                     24115000
               END;                                                     24120000
          IF TOS<>0 THEN GOTO LLNO;                                     24125000
          GOTO MRSW(INDEX);                                             24130000
  LLST:   IF NOT PRIV THEN K_STATUS CAT K(2:2:6);                       24135000
          STATUS_K;                                                     24140000
          GOTO LLYES;                                                   24145000
  LLXR:   XREGISTER_K;                                                  24150000
          GOTO LLYES;                                                   24155000
  LLDL:   IF K>0 THEN GOTO LLERR;                                       24160000
          K_DLSIZE(K);                                                  24165000
          GOTO LLYES;                                                   24170000
  LLQ:    IF K>RS THEN GOTO LLERR;                                      24175000
          COMMENT:                                             <<00445>>24180000
            DL MAY MOVE THEREFORE MUST ALWAYS REPEG;           <<00445>>24185000
          PXFIXED;                                             <<06633>>24190000
          IF K<INTEGER(PXFXQREG) THEN GOTO LLERR;              <<06633>>24195000
          MARK_@MARK-K;                                                 24200000
          GOTO LLYES;                                                   24205000
  LLS:    IF K<RQ THEN GOTO LLERR;                                      24210000
          IF K>RZ THEN GOTO LLERR;                                      24215000
          PXGLOBAL;                                            <<06633>>24220000
          PXFIXED;                                             <<06633>>24225000
          MAXSTACK:=PXFXMAXSTK-PXG'RELATIVE'DB;                <<06633>>24230000
          IF K > MAXSTACK THEN << Z MAY BE BEYOND MAXSTACK >>  <<01.03>>24235000
            << BECAUSE OF A STKOVERFLOW AND THUS THIS EXTRA >> <<01.03>>24240000
            << CHECK IS NEEDED FOR S                        >> <<01.03>>24245000
            GOTO LLERR;  << CANNOT MODIFY S BEYOND MAXSTACK >> <<01.03>>24250000
          X_K-RS;                                                       24255000
          IF = THEN GOTO LLYES;                                         24260000
          MARK_MARK+X;                                                  24265000
          IF X<0 THEN                                                   24270000
               BEGIN TOS_K+1;      <<DECREMENT>>                        24275000
                     ASSEMBLE(DUP);                                     24280000
                     TOS_TOS-X;                                         24285000
                     PUSH(S);                                           24290000
                     TOS_TOS-2-RS;                                      24295000
                     ASSEMBLE(MOVE 3);                                  24300000
                     PUSH(S);                                           24305000
                     TOS_TOS+X;                                         24310000
               END ELSE                                                 24315000
               BEGIN PUSH(S);      <<INCREMENT>>                        24320000
                     TOS_TOS+X;                                         24325000
                     SET(S);                                            24330000
                     PUSH(S);                                           24335000
                     ASSEMBLE(DUP);                                     24340000
                     TOS_TOS-X;                                         24345000
                     ASSEMBLE(DUP);                                     24350000
                     TOS_TOS-RS;                                        24355000
                     TOS_-TOS;                                          24360000
                     ASSEMBLE(MOVE 3);                                  24365000
                     PUSH(S);                                           24370000
               END;                                                     24375000
          PUSH(Q);                                                      24380000
          TOS_TOS+X;                                                    24385000
          SET(Q,S);                                                     24390000
          GOTO LLYES;                                                   24395000
  LLZ:    IF K<RS THEN GOTO LLERR;                                      24400000
          K_ZSIZE(K);                                                   24405000
          GOTO LLYES;                                                   24410000
  LLP:    IF K>RPL-STTLEN THEN GOTO LLERR;                     <<00180>>24415000
          IF K<0 THEN GOTO LLERR;                                       24420000
          DELTAP.(2:14)_K;                                              24425000
          GOTO LLYES;                                                   24430000
  LLN:    GOTO LLYES;                                                   24435000
  LLERR:  CLEAR;                                                        24440000
          IF FLAGY THEN GOTO NONO;                                      24445000
          GOTO LR7;                                                     24450000
  LLYES:  REG(INDEX)_K;                                                 24455000
          PUSH(Z);                                                      24460000
          RZ  _TOS;                                                     24465000
          IF FLAGY THEN GOTO NEXT;                                      24470000
          GOTO LLNO;                                                    24475000
  LR6:    IF NOT DUMPFLAG THEN GOTO NEXT;                               24480000
          IF MODE<>0 THEN GOTO LR3;                                     24485000
          IF LOGICALMAPPING THEN                               <<06671>>24490000
             BEGIN                                             <<06671>>24495000
                SENDREG("MF","  ",REGMF);                      <<06671>>24500000
                SENDREG("MD","ST",REGLSTT);                    <<06671>>24505000
             END;                                              <<06671>>24510000
          IF NOT PRIV THEN GOTO LR8;                                    24515000
          OUTPUT;                                                       24520000
          CLEAR;                                                        24525000
          SENDREG("PC","B ",REGR );                                     24530000
          TOS := RCST; <<SAVE RSCT>>                           <<06103>>24535000
          IF LOGICALMAPPING THEN                               <<06103>>24540000
             IF OBJID(OBJIDTYPEFIELD)=OBJIDSLTYPE THEN         <<06663>>24545000
                BEGIN                                          <<06103>>24550000
                   RCST := OBJID(OBJIDNUMFIELD);               <<06663>>24555000
                   SENDREG("CS","T ",REGPB);                   <<06103>>24560000
                END                                            <<06103>>24565000
             ELSE                                              <<06103>>24570000
                BEGIN                                          <<06103>>24575000
                   RCST := OBJID(OBJIDNUMFIELD);               <<06663>>24580000
                   SENDREG("CS","TX",REGPB);                   <<06103>>24585000
                END                                            <<06103>>24590000
          ELSE                                                 <<06103>>24595000
             SENDREG("CS","T ",REGPB);                         <<06103>>24600000
          RCST := TOS;                                         <<06103>>24605000
  LR8:    RLOG_GETLCST(RCST);                                           24610000
          SENDREG("LC","ST",REGLOG);                                    24615000
          IF NOT PRIV THEN GOTO LR3;                                    24620000
          SENDREG("ST","AK",REGDB);                                     24625000
          TOS_RDX-1;                                                    24630000
          DEL;                                                          24635000
          IF < THEN GOTO LR3;                                           24640000
          IF = THEN SENDREG("DS","T ",REGDBX)                           24645000
               ELSE BEGIN SENDREG("BA","NK",REGBNK);                    24650000
                          SENDREG("D ","X ",REGDBV);                    24655000
                    END;                                                24660000
  LR3:    OUTPUT;                                                       24665000
          IF PRINTFLAG<>0 THEN LINE;                                    24670000
          IF B'TRACE THEN GO TO FINI;                          <<07319>>24675000
          GOTO NEXT;                                                    24680000
  LVIRT:  TOS_1;                                                        24685000
          TOS_INDEX;                                                    24690000
          IF FACTOR=0 THEN GOTO ERROR;                                  24695000
          TOS_X;                                                        24700000
          IF = THEN TOS_TOS+SYSLDEV;                                    24705000
          SEGX_TOS;                                                     24710000
          IF DEVTYPE(SEGX)>=8 THEN GOTO NONO;                           24715000
          SEGX_SEGX&LSL(8);                                             24720000
          IF OPER("++")=0 THEN GOTO NONO;  <<MISSING +>>       <<00282>>24725000
          TOS_%136;                                                     24730000
          TOS_0D;                                              <<06103>>24735000
          TOS_0D;                                                       24740000
          GOTO LLX;                                                     24745000
  LMEMO:  TOS_0;                                                        24750000
          MEMBASE(INDEX,0,0,0,0,0);                            <<06103>>24755000
  LLX:    DISPL_TOS;                                                    24760000
          BANK_TOS;                                                     24765000
          SEGNR_TOS;                                           <<06103>>24770000
          DEBUGID1:=TOS;                                       <<06103>>24775000
          MODE_TOS;                                                     24780000
          INDEX_TOS;                                                    24785000
          FLAGX_TOS;                                                    24790000
          FLAGY_0;                                                      24795000
          NEG _ 0;                                                      24800000
  LLY:    TOS_FIELD(":,");                                              24805000
          DISPL_DISPL+X;                                                24810000
          IF NEG = 0 THEN FLAGY _ 1;                                    24815000
          IF NOT FLAGX THEN CHEKK(MODE,DEBUGID1,DEBUGID2,BANK, <<06103>>24820000
                                  DISPL,0);                    <<06103>>24825000
          IF LOGICAL(TOS) THEN                                          24830000
               BEGIN IF FLAGX THEN                                      24835000
                       BEGIN TOS_FIELD(":,");                           24840000
                             IF LOGICAL(TOS) THEN GOTO ERROR;           24845000
                             IF X>%17 OR X<0  THEN GOTO ERROR; <<00264>>24850000
                             SEGX_SEGX+X;                               24855000
                             GOTO LLYC;                                 24860000
                       END;                                             24865000
                     FLAGY _ 1;                                         24870000
                     TOS_MODE;                                          24875000
                     ASSEMBLE(TRBC 15);                                 24880000
                     IF <> THEN                                         24885000
                       BEGIN ASSEMBLE(TEST);                            24890000
                             IF = THEN TOS_REGDB ELSE                   24895000
                               BEGIN                           <<06103>>24900000
                                XFLAG:=0;                      <<06103>>24905000
                                SEGNR:=OBJID(OBJIDNUMFIELD);   <<06663>>24910000
                                IF OBJID(OBJIDTYPEFIELD) =     <<06663>>24915000
                                   OBJIDPGMTYPE THEN           <<06663>>24920000
                                                               <<06663>>24925000
                                                               <<06663>>24930000
                                                               <<06663>>24935000
                                  IF LOGICALMAPPING THEN       <<06663>>24940000
                                     XFLAG:=1                  <<06663>>24945000
                                  ELSE                         <<06663>>24950000
                                     SEGNR:=SEGNR+%300;        <<06663>>24955000
                                                               <<06663>>24960000
                                                               <<06663>>24965000
                                                               <<06663>>24970000
                                SEGTYPE:=ABS'SEG;              <<06103>>24975000
                                TOS:=REGPB;                    <<06103>>24980000
                               END;                                     24985000
                             INDEX_TOS;                                 24990000
                       END;                                             24995000
                     MODE_TOS;                                          25000000
                     IF MODE.(8:3)=2 THEN                      <<06103>>25005000
                        OBJR := CONVTOOBJID(DEBUGID,           <<06663>>25010000
                                            PINX/PCBSIZE)      <<06663>>25015000
                     ELSE                                      <<06103>>25020000
                        OBJIDR(OBJIDNUMFIELD):=SEGNR;          <<06663>>25025000
                     SETOBJ(MODE,OBJR,BANK);                   <<06663>>25030000
                     DISPL_BASE(DISPL);                                 25035000
                     RESETOBJ(MODE,OBJR);                      <<06663>>25040000
                     GOTO LLY;                                          25045000
               END;                                                     25050000
  LLYC:   X _ 0;                                                        25055000
          IF PINFO <> ALPHA THEN FIELD(",");                            25060000
          TOS_X;                                                        25065000
          IF = THEN TOS_TOS+1;                                          25070000
          RCNT_TOS;                                                     25075000
          CNT_0;                                                        25080000
          IF NOT FLAGX AND NOT CHEKK(MODE,DEBUGID1,DEBUGID2,   <<06103>>25085000
                                     BANK,DISPL,RCNT) THEN     <<06103>>25090000
             BEGIN WARN_2;                                              25095000
                   RCNT_X;                                              25100000
             END;                                                       25105000
          GETMODE;                                                      25110000
          CHMODE_X;                                                     25115000
          << SET NUMBER OF WORDS DUMPED PER ROW >>             <<01549>>25120000
          ROW'SIZE := IF CHMODE=CODE THEN INSTR'PER'ROW ELSE 8;<<01549>>25125000
  CONT:                                                                 25130000
          IF FLAGX THEN                                        <<06103>>25135000
             BEGIN                                             <<06103>>25140000
                GETVIRT;                                       <<06103>>25145000
                SEGTYPE:=ABS'SEG;                              <<06103>>25150000
                XFLAG:=0;                                      <<06103>>25155000
                OBJIDR(OBJIDNUMFIELD):=SEGNR;                  <<06663>>25160000
                OBJIDR(OBJIDTYPEFIELD):=OBJIDSLTYPE;           <<06663>>25165000
             END                                               <<06103>>25170000
          ELSE                                                 <<06103>>25175000
             IF MODE.(8:3) = 2 THEN                            <<06103>>25180000
                OBJR  :=CONVTOOBJID(DEBUGID,PINX/PCBSIZE)      <<06663>>25185000
             ELSE                                              <<06103>>25190000
                OBJR := DOUBLE(SEGNR);                         <<06663>>25195000
          SETOBJ(MODE,OBJR,BANK);                              <<06663>>25200000
          K_-1;                                                         25205000
          WHILE(K_K+1)<INTEGER(ROW'SIZE) DO                    <<01549>>25210000
               BEGIN TEMP(K)_BASE(DISPL+K);                             25215000
                     IF CHMODE = CODE THEN                     <<01549>>25220000
                        BEGIN << GET 2ND WORD >>               <<01549>>25225000
                        TEMP(MAX'INSTR'ROW+K) :=               <<01549>>25230000
                           IF (CNT+1)<RCNT THEN BASE(DISPL+K+1)<<01549>>25235000
                           ELSE BAD'2NDWORD;                   <<01549>>25240000
                        END;                                   <<01549>>25245000
                     IF (CNT_CNT+1)>=RCNT THEN GOTO CONTX;              25250000
                     IF NOT DUMPFLAG THEN GOTO CONTX;                   25255000
               END;                                                     25260000
          K_K-1;                                                        25265000
  CONTX:  RESETOBJ(MODE,OBJR);                                 <<06663>>25270000
          K_K+1;                                                        25275000
          CLEAR;                                                        25280000
          IF FLAGX=2 THEN GOTO CONTW;                                   25285000
          SENDID(REGY(INDEX));                                          25290000
          IF INDEX = REGCO AND LOGICAL(XFLAG) THEN SEND("X");  <<06103>>25295000
          IF FLAGX THEN                                                 25300000
               BEGIN SENDOCT(SEGX.(0:8));                               25305000
                     SEND("+");                                         25310000
                     TOS_SEGX.(12:4);                                   25315000
                     IF = THEN DEL ELSE SENDOCT(*);                     25320000
                     SENDOCT(DISPLX);                                   25325000
                     OUTPUT;                                            25330000
                     CLEAR;                                             25335000
                     GOTO CONTW;                                        25340000
               END;                                                     25345000
          IF LOGICAL(MODE.(13:1)) THEN SENDOCT(SEGNR);         <<06103>>25350000
          IF INDEX=REGEA THEN SENDOCT(BANK);                            25355000
  CONTW:  TOS_DISPL;                                                    25360000
          IF INDEX=REGA THEN GOTO CONTY;                                25365000
          IF INDEX=REGEA THEN                                           25370000
             BEGIN SEND("+");                                           25375000
                   GOTO CONTY;                                          25380000
             END;                                                       25385000
          IF INDEX = REGDB AND FLAGY THEN                               25390000
           BEGIN                                                        25395000
            SEND("+");                                                  25400000
            GOTO CONTY;                                                 25405000
           END;                                                         25410000
          IF LOGICAL(MODE) THEN TOS_TOS-REG(INDEX);                     25415000
          ASSEMBLE(TEST);                                               25420000
          IF >= THEN SEND("+") ELSE                                     25425000
               BEGIN SEND("-");                                         25430000
                     TOS_-TOS;                                          25435000
               END;                                                     25440000
  CONTY:  TOS_@POUT;                                                    25445000
          EXCHANGE;                                                     25450000
          SENDOCT(*);                                                   25455000
          @POUT_TOS+7;                                                  25460000
          I_-1;                                                         25465000
          WHILE (I_I+1)<K DO                                            25470000
               BEGIN IF CHMODE = CODE                          <<01549>>25475000
                     THEN SENDIT(TEMP(I),TEMP(MAX'INSTR'ROW+I),<<01549>>25480000
                                 CHMODE,TRUE)                  <<01549>>25485000
                     ELSE SENDIT(TEMP(I),0,CHMODE,TRUE);       <<01549>>25490000
                     IF CHMODE<>2 THEN SEND(" ");                       25495000
               END;                                                     25500000
          DISPL_DISPL+K;                                                25505000
          IF DUMPFLAG THEN OUTPUT ELSE                                  25510000
               BEGIN                                                    25515000
                     TOS_INOCTAL(K,@POUT);                              25520000
                     TOS.(14:1)_0;                                      25525000
                     IF <> THEN CNT_RCNT;                               25530000
                     IF TOS=0 THEN                                      25535000
                       BEGIN                                   <<06103>>25540000
                             IF MODE.(8:3)=2 THEN              <<06103>>25545000
                                OBJR := CONVTOOBJID(DEBUGID,   <<06663>>25550000
                                               PINX/PCBSIZE)   <<06663>>25555000
                             ELSE OBJR:=DOUBLE(SEGNR);         <<06663>>25560000
                             SETOBJ(MODE,OBJR,BANK);           <<06663>>25565000
                             BASE(DISPL-1)_K;                           25570000
                             RESETOBJ(MODE,OBJR);              <<06663>>25575000
                       END;                                             25580000
               END;                                                     25585000
          IF INDEX=REGV THEN                                            25590000
               BEGIN TOS_CNT;                                           25595000
                     TOS_TOS LAND %177;                                 25600000
                     DEL;                                               25605000
                     FLAGX_IF = THEN 1 ELSE 2;                          25610000
               END;                                                     25615000
          IF FLAGX THEN RELVIRT;                                        25620000
          IF INDEX<>REGV OR FLAGX THEN                                  25625000
               BEGIN RESETCRITICAL(CRIT);                               25630000
                     CRIT_SETCRITICAL;                                  25635000
               END;                                                     25640000
          IF CNT<RCNT THEN GOTO CONT;                                   25645000
          IF PRINTFLAG<>0 THEN LINE;                                    25650000
          GOTO NEXT;                                                    25655000
            << >>                                                       25660000
            << SWITCH LIST LOGICAL DEVICE >>                            25665000
            << >>                                                       25670000
  LISTL:                                                                25675000
          IF PINFO=ALPHA THEN GOTO LS1;                                 25680000
          FIELD(0);                                                     25685000
          TOS_X;                                                        25690000
          IF <> THEN                                                    25695000
             BEGIN IF NOT PRIV THEN GOTO ERROR;                         25700000
                   ASSEMBLE(DUP,ZERO; XCH);                             25705000
                   TOS_DEVTYPE(*);                                      25710000
                   I_TOS;                                               25715000
                   IF I<>16 AND I<>32 THEN GOTO NONO;                   25720000
             END;                                                       25725000
          IF INTEGER(DEVICE)<0 THEN FCLOSE(FNUM,0,0);                   25730000
          DEVICE_TOS;                                                   25735000
          GOTO NEXT;                                                    25740000
  LS1:    IF LOGICAL(SYS.(14:1)) THEN GOTO ERROR;                       25745000
          TOS_"LP";                                                     25750000
          TOS_0;                                                        25755000
          TOS_FOPEN(PINFO,%107,2,-128,B1);                              25760000
          IF <> THEN GOTO NONO;                                         25765000
          IF INTEGER(DEVICE)<0 THEN FCLOSE(FNUM,0,0);                   25770000
          FNUM_TOS;                                                     25775000
          DEVICE_-1;                                                    25780000
          GOTO NEXT;                                                    25785000
$PAGE "          BREAK/CLEAR COMMANDS"                         <<01007>>25790000
            << SET BREAKPOINT >>                                        25795000
            << >>                                                       25800000
  BREAKL:                                                               25805000
          I_1;                                                          25810000
          IF (LOGICAL(PINFO) LAND %137) = "T " & LSR(8) THEN   <<07319>>25815000
             BEGIN                                             <<07319>>25820000
                I:=2;                                          <<07319>>25825000
                GETCHAR;                                       <<07319>>25830000
             END;                                              <<07319>>25835000
          GOTO BC4;                                                     25840000
            << >>                                                       25845000
            << CLEAR BREAKPOINT >>                                      25850000
            << >>                                                       25855000
  CLEARL:                                                               25860000
          I_0;                                                          25865000
  BC4:    PROC'FLAGS := 0;                                     <<07319>>25870000
          TOS := LOCATION(PROC'FLAGS,PINNR,DEBUGID1,DEBUGID2,  <<07319>>25875000
                       DISPL,COND'STAK);                       <<06671>>25880000
          DUPLICATE;                                                    25885000
          IF TOS=6 THEN GOTO ERROR;   <<No allowable defaults>><<01007>>25890000
          IF SEGNR = ALL'SEGS THEN                             <<06103>>25895000
             BEGIN << @ >>                                     <<01549>>25900000
             << (FOR NOW) MUST BE ONLY COM. ON LINE >>         <<01549>>25905000
             IF TOS <> 2 THEN GOTO ERROR;                      <<01549>>25910000
             IF I = 0 THEN                                     <<01549>>25915000
                BEGIN                                          <<01549>>25920000
                RELBREAK (PROC'FLAGS,PINNR,0D,0,PLABEL);       <<06671>>25925000
                GOTO NEXT;                                     <<01549>>25930000
                END                                            <<01549>>25935000
             ELSE GOTO BC5; << DISPLAY ALL BREAKPOINTS >>      <<01549>>25940000
             END;                                              <<01549>>25945000
          GOTO BC2;                                                     25950000
  BC1:    TOS := LOCATION(proc'FLAGS,pinnr,DEBUGID1,DEBUGID2,  <<06671>>25955000
                       DISPL,COND'STAK);                       <<06671>>25960000
  BC2:    ASSEMBLE(TBC 15);<<Test for location delimited by :>><<01007>>25965000
          IF <> THEN IF I=0 THEN GOTO ERROR;                            25970000
                         <<Not valid syntax for clear command>><<01007>>25975000
                    <<Check displ within bounds for this user>><<01007>>25980000
          TOS_TOS&LSR(1);                                               25985000
          ASSEMBLE(TBC 14);                                             25990000
                <<Test for null location field delimited by ,>><<01007>>25995000
          IF <> THEN GOTO BC3;              <<It was null, so>><<01007>>26000000
          TOS := PROC'FLAGS;                                   <<07319>>26005000
          IF I=2 THEN TOS.TRACEBIT := 1;                       <<07319>>26010000
          TOS := PINNR;                                        <<06671>>26015000
          TOS_DEBUGID;                                         <<06103>>26020000
          TOS_DISPL;                                                    26025000
          IF I=0 THEN RELBREAK(*,*,*,*,PLABEL)                 <<06671>>26030000
                 ELSE SETBREAK(*,*,*,*,COND'STAK,0);           <<06671>>26035000
  BC3:    IF LOGICAL(TOS) THEN GOTO NEXT;                               26040000
               <<If location not followed by a comma, go read>><<01007>>26045000
                                 <<next command from terminal>><<01007>>26050000
          GOTO BC1;               <<Handle next BP of command>><<01007>>26055000
                  <<----------------------------------------->><<01007>>26060000
                  << Print list of breakpoints on list device>><<01007>>26065000
                  <<----------------------------------------->><<01007>>26070000
  BC5:    PRINTFLAG_DEVICE;                                    <<01549>>26075000
          << GET SIR TO PREVENT ANYONE FROM UNLOCK SEG >>      <<01549>>26080000
          TEMP := GETSIR (BKPTSIR);                            <<01549>>26085000
          IF NOT BKPT'TAB'LOCKED THEN                          <<01549>>26090000
             BEGIN << NOTHING TO DISPLAY >>                    <<01549>>26095000
             RELSIR (BKPTSIR,TEMP);                            <<01549>>26100000
             GOTO NEXT;                                        <<01549>>26105000
             END;                                              <<01549>>26110000
          I := DSTI'(DEBUGDST*4).DST'LENFLD & LSL(2);          <<01549>>26115000
          I := GETDATASEG (I,I);                               <<01549>>26120000
          IF <> THEN                                           <<01549>>26125000
             BEGIN                                             <<01549>>26130000
             WARN := MSG'FULL;                                 <<01549>>26135000
             RELSIR (BKPTSIR,TEMP);                            <<01549>>26140000
             GOTO NEXT;                                        <<01549>>26145000
             END;                                              <<01549>>26150000
          << EXCHANGEDB TO I >>                                <<01549>>26155000
          SETOBJ (%240,DOUBLE(I),0); <<WORD 1 NOT USED>>       <<06663>>26160000
          << COPY BKPT TABLE >>                                <<01549>>26165000
          PDISABLE;                                            <<01549>>26170000
          MOVEFROMDSEG (@BASE,DEBUGDST,0,                      <<01549>>26175000
                        DSTI'(DEBUGDST*4).DST'LENFLD & LSL(2));<<01549>>26180000
          RESETOBJ (%240,DOUBLE(I)); <<BACK TO STACK>>         <<06663>>26185000
                                                               <<01549>>26190000
          IF PINNR <> LOGICAL(RPCB) AND                        <<06671>>26195000
             VALIDATE (PINNR) <> 0                             <<06671>>26200000
          THEN                                                 <<01549>>26205000
             BEGIN                                             <<01549>>26210000
             TEMP(1) := INVALID'PIN; << FLAG ERROR >>          <<01549>>26215000
             K := 0; << MARK LIST EMPTY >>                     <<01549>>26220000
             END                                               <<01549>>26225000
          ELSE                                                 <<01549>>26230000
             BEGIN                                             <<01549>>26235000
             TEMP(1) := EVERYTHINGOK; << NO ERRORS >>          <<01549>>26240000
             << DETERMINE WHETHER LIST PROC OR SYS >>          <<01549>>26245000
             << BREAK POINTS                       >>          <<01549>>26250000
             IF PROC'FLAGS.SPECIFIED'PIN OR NOT SYSBRK THEN    <<06671>>26255000
                PROC'FLAGS := 0                                <<06671>>26260000
             ELSE                                              <<06671>>26265000
                BEGIN                                          <<06671>>26270000
                PROC'FLAGS := 0;                               <<06671>>26275000
                PINNR := 0;                                    <<06671>>26280000
                END;                                           <<06671>>26285000
             K := HEAD'BKPT'LIST (PINNR,I);                    <<06671>>26290000
             END;                                              <<01549>>26295000
          PENABLE;                                             <<01549>>26300000
          RELSIR (BKPTSIR,TEMP);                               <<01549>>26305000
          WHILE K <> 0 DO                                      <<01549>>26310000
             BEGIN                                             <<01549>>26315000
             CLEAR;                                            <<01549>>26320000
             COPY'BKPT'ENTRY (K,I,INFO(IND'WORKAREA));         <<01549>>26325000
             FORMAT'BKPT (INFO(IND'WORKAREA));                 <<01549>>26330000
             OUTPUT;                                           <<01549>>26335000
             K := INFO(IND'WORKAREA+LINKOFFSET);               <<01549>>26340000
             END;                                              <<01549>>26345000
          RELDATASEG (I);                                      <<01549>>26350000
          RESETCRITICAL (CRIT);                                <<01549>>26355000
          CRIT := SETCRITICAL;                                 <<01549>>26360000
          IF TEMP(1) = INVALID'PIN THEN GOTO NONO'PIN          <<01549>>26365000
          ELSE GOTO NEXT;                                      <<01549>>26370000
$PAGE "          ACCEPT/TRACE/FREEZE/UNFREEZE COMMANDS"        <<01007>>26375000
            << >>                                                       26380000
            << ACCEPT BREAKPOINT MODE >>                                26385000
            << >>                                                       26390000
  ACCEPT:                                                               26395000
          IF (LOGICAL(PINFO) LAND %137) = "S" THEN             <<02344>>26400000
               BEGIN SYSBRK_TRUE;GOTO NEXT; END;                        26405000
          IF (LOGICAL(PINFO) LAND %137) = "P" THEN             <<02344>>26410000
               BEGIN SYSBRK_FALSE;GOTO NEXT; END;                       26415000
          GOTO ERROR;                                                   26420000
            << >>                                                       26425000
            << TRACE >>                                                 26430000
            << >>                                                       26435000
  TRACEL:                                                               26440000
          K_BASE(RDL-INTEGER(BASE(RDL-2))+3);                           26445000
          K_K-@MARK;                                                    26450000
          IF SYS=0 THEN K_K+2;                                          26455000
          PRINTFLAG_DEVICE;                                             26460000
          I_0;                                                          26465000
  TL:     CLEAR;                                                        26470000
          DISPL_STAK(I);                                                26475000
          IF DISPL<4 THEN GOTO NONO;                                    26480000
          I_I-DISPL;                                                    26485000
          IF I>=0 OR I<=K THEN GOTO TX;                                 26490000
          RTC_STAK(I-1).(8:8);                                          26495000
          RTP_STAK(X_X-1).(2:14);                                       26500000
          TOS:=RMF;                                            <<06103>>26505000
          IF LOGICALMAPPING THEN                               <<06103>>26510000
             RTC.(0:1):=RMF:=STAK(I-2).(1:1);                  <<06103>>26515000
          TOS_@POUT;                                                    26520000
          SEND("Q");                                                    26525000
          SEND("-");                                                    26530000
          SENDOCT(-I-INTEGER(STAK(0)));                                 26535000
          TOS_TOS+8;                                                    26540000
          @POUT_TOS;                                                    26545000
          PINNR := RPCB;                                       <<06671>>26550000
          FORMT;                                                        26555000
          IF LOGICALMAPPING THEN                               <<06103>>26560000
             SENDREG("MF","  ",REGMF);                         <<06103>>26565000
          OUTPUT;                                                       26570000
          RMF:=TOS;                                            <<06103>>26575000
          RESETCRITICAL(CRIT);                                          26580000
          CRIT_SETCRITICAL;                                             26585000
          GOTO TL;                                                      26590000
  TX:     IF PRINTFLAG<>0 THEN LINE;                                    26595000
          GOTO NEXT;                                                    26600000
            << >>                                                       26605000
            << FREEZE SEGMENT >>                                        26610000
            << >>                                                       26615000
  FREEZL:                                                               26620000
          I_1;                                                          26625000
          GOTO FUL;                                                     26630000
            << >>                                                       26635000
            << UNFREEZE SEGMENT >>                                      26640000
            << >>                                                       26645000
  UNFRZL:                                                               26650000
          I_0;                                                          26655000
  FUL:    GETID(FALSE);                                                 26660000
          INDEX_X;                                                      26665000
          IF NOT (REGCO<=INDEX<=REGDA) THEN GOTO ERROR;                 26670000
          MODE_IF INDEX=REGDA THEN %300 ELSE %100;                      26675000
          IF INDEX = REGCO THEN                                <<06103>>26680000
             BEGIN                                             <<06103>>26685000
                IF LOGICALMAPPING THEN                         <<06103>>26690000
                   IF (LOGICAL(PINFO) LAND %137) =             <<06103>>26695000
                      (XINDICATOR & LSR(8)) THEN               <<06103>>26700000
                      BEGIN                                    <<06103>>26705000
                         XFLAG:=1;                             <<06103>>26710000
                         GETCHAR;                              <<06103>>26715000
                      END                                      <<06103>>26720000
                   ELSE                                        <<06103>>26725000
                      XFLAG:=0;                                <<06103>>26730000
                SEGTYPE := ABS'SEG;                            <<06103>>26735000
             END;                                              <<06103>>26740000
          FIELD(0);                                                     26745000
          SEGNR_X;                                             <<06103>>26750000
          CHEKK(MODE,DEBUGID1,DEBUGID2,0,0,0);                 <<06103>>26755000
          IF INDEX = REGCO THEN                                <<06103>>26760000
             OBJS :=  CONVTOOBJID(DEBUGID,PINX/PCBSIZE)        <<06663>>26765000
          ELSE                                                 <<06663>>26770000
             OBJS := DOUBLE(SEGNR);                            <<06663>>26775000
          IF I=0 THEN RESETOBJ(MODE,OBJS)                      <<06663>>26780000
                 ELSE SETOBJ(MODE,OBJS,0);                     <<06663>>26785000
          GOTO NEXT;                                                    26790000
$PAGE "          CALCULATE/EXIT/RETURN COMMANDS"               <<01007>>26795000
            << >>                                                       26800000
            << CALCULATE >>                                             26805000
            << >>                                                       26810000
  CALCL:                                                                26815000
          FIELD(",");                                                   26820000
          I_X;                                                 <<01549>>26825000
          GETMODE;                                                      26830000
          CHMODE_X;                                            <<01549>>26835000
          CLEAR;                                                        26840000
          SEND(" ");                                                    26845000
          SEND("=");                                                    26850000
          SENDIT(I,BAD'2NDWORD,CHMODE,FALSE);                  <<01549>>26855000
          OUTPUT;                                                       26860000
          GOTO NEXT;                                                    26865000
            << >>                                                       26870000
            <<EXIT / TERMINATE>>                                        26875000
            << >>                                                       26880000
  EXITL:                                                                26885000
          IF PINFO="@" THEN                                             26890000
               BEGIN RESETCRITICAL(CRIT);                               26895000
                     TERMINATE;                                         26900000
               END;                                                     26905000
          FIELD(0);                                                     26910000
          IF X > MARK-4 THEN GOTO NONO;                                 26915000
          TOS_X;                                                        26920000
          IF < THEN GOTO NONO;                                          26925000
          IF INTEGER(DEVICE)<0 THEN FCLOSE(FNUM,0,0);          <<00.04>>26930000
          GOTO FXL;                                                     26935000
            << >>                                                       26940000
            << R E T U R N >>                                           26945000
            << >>                                                       26950000
  RETURNL:                                                              26955000
          TOS := LOCATION(PROC'FLAGS,PINNR,DEBUGID1,DEBUGID2,  <<06671>>26960000
                       DISPL,COND'STAK);                       <<06671>>26965000
          ASSEMBLE(TBC 14);                                             26970000
          IF = THEN GOTO ERROR;                                         26975000
          IF TOS<>6 THEN                                                26980000
             BEGIN                                             <<06671>>26985000
             SETBREAK(PROC'FLAGS,PINNR,DEBUGID,DISPL,          <<06671>>26990000
                      COND'STAK,0);                            <<06671>>26995000
             END;                                                       27000000
          IF WARN THEN GOTO WARNING;                                    27005000
          IF INTEGER(DEVICE)<0 THEN FCLOSE(FNUM,0,0);                   27010000
          LINE;                                                         27015000
  FINI:   TOS _ 0;                                                      27020000
          IF EXIT'TO'TRAP THEN                                 <<01069>>27025000
             BEGIN                                             <<01069>>27030000
             COMMENT:                                          <<01069>>27035000
                EXIT TO USER TRAP PROCEDURE. BUILD STAK        <<01069>>27040000
                MARKER. ADD 4 WORDS TO STACK AND MOVE DEBUG'S  <<01069>>27045000
                VARIABLES UP 4 WORDS. SET Q TO Q+4 AND BUILD   <<01069>>27050000
                MARKER AT STAK(Q-3) TO STAK(Q);                <<01069>>27055000
             ASSEMBLE( ADDS 4);                                <<01069>>27060000
             << MOVE VARIABLES UP >>                           <<01069>>27065000
             MOVE AS0 := AS4, (-(@S4-@Q0)); << MOVE REVERSE >> <<01069>>27070000
             TOS := @Q0 + 4;                                   <<01069>>27075000
             SET(Q);                                           <<01069>>27080000
             STAK(-3) := 0;     << X REGISTER >>               <<01069>>27085000
             << GET PB RELATIVE PLOC >>                        <<01069>>27090000
I:=PLABEL.(8:8);                                               <<01549>>27095000
STAK(-2):=CONVEXTLABELTODELTAP(PLABEL);                        <<01549>>27100000
             << SET UP NEW STATUS REG, OLD STATUS = STAK(-5) >><<01832>>27105000
             TOS := I;         << CST NUMBER >>                <<01832>>27110000
             TOS.STATUS'I := 1;<< INTERRUPTS ENABLED >>        <<01832>>27115000
             TOS.STATUS'T := STAK(-5).STATUS'T; << TRAPS >>    <<01832>>27120000
             COMMENT:                                          <<01832>>27125000
                IF THE USER WAS EXECUTING IN PRIV MODE THEN    <<01832>>27130000
                HE CONTINUES TO EXECUTE IN PRIV MODE.;         <<01832>>27135000
                                                               <<01832>>27140000
             IF  STAK(-5).STATUS'M THEN TOS.STATUS'M := 1      <<01832>>27145000
             ELSE                                              <<01069>>27150000
                BEGIN  << GET PRIV MODE BIT FROM CST >>        <<01069>>27155000
                IF LABEL'IS'SL'SEG(PLABEL,0) THEN              <<06663>>27160000
                   X:=0                                        <<06663>>27165000
                ELSE                                           <<06663>>27170000
                   BEGIN                                       <<06663>>27175000
                      X:=1;                                    <<06663>>27180000
                      IF NOT LOGICALMAPPING THEN               <<06663>>27185000
                         I:=I-%300;                            <<06663>>27190000
                   END;                                        <<06663>>27195000
                DISABLE;                                       <<01069>>27200000
                TOS.STATUS'M := F(F(X)+I&LSL(2))&CSL(2);       <<01832>>27205000
                ENABLE;                                        <<01069>>27210000
                END;                                           <<01069>>27215000
             STAK(-1) := TOS; << STATUS REGISTER >>            <<01069>>27220000
             STAK(0) := 4;    << DELTA Q >>                    <<01069>>27225000
             END;                                              <<01069>>27230000
  FXL:    IF LOGICAL(RDX) THEN EXCHANGEDB(RDBX);                        27235000
          IF RDX>=2 THEN                                                27240000
               BEGIN SETSYSDB;                                          27245000
                     TOS_DRDBV;                                         27250000
                     SET(DB);                                           27255000
               END;                                                     27260000
          RESETCRITICAL(CRIT);                                          27265000
          IF PMBC'OFF THEN                                     <<07319>>27270000
             BEGIN    << ENABLE PMBC >>                        <<07319>>27275000
                TOS:=%3;                                       <<07319>>27280000
                ASSEMBLE(CON %20104, %11);                     <<07319>>27285000
             END;                                              <<07319>>27290000
          TOS.(0:10) _ 99;    <<SPECIAL #>>                             27295000
          ERROREXIT(*,0,0);                                             27300000
            << >>                                                       27305000
$TITLE "          LOCAL VARIABLES, EQUATES, AND DEFINES"                27310000
    END;                                                                27315000
$TITLE "     PROGRAMMTIC SET/CLEAR BKPT. ROUTINES"             <<01549>>27320000
$CONTROL SEGMENT=DEBUG                                         <<01549>>27325000
                                                                        27330000
INTEGER PROCEDURE ABSOLUTESEG( TYPESEG,SEG,ERROR );            <<01069>>27335000
   VALUE TYPESEG,SEG;                                          <<01069>>27340000
   INTEGER TYPESEG,SEG,ERROR;                                  <<01069>>27345000
   OPTION PRIVILEGED, UNCALLABLE;                              <<01069>>27350000
BEGIN                                                          <<01069>>27355000
   COMMENT:                                                    <<01069>>27360000
      THIS PROCEDURE TRANSLATES SEG TO AN ABSOLUTE             <<01069>>27365000
      SEGMENT. IT IS ASSUMED THAT SEG IS A SEGMENT             <<01069>>27370000
      OF THE CALLING PROCESS.                                  <<01069>>27375000
         TYPESEG = 0 --> ABSOLUTE SEGMENT                      <<01069>>27380000
                   1 --> SSL                                   <<01069>>27385000
                   2 --> PSL                                   <<01069>>27390000
                   3 --> GSL                                   <<01069>>27395000
                  15 --> PROG SEG                              <<06103>>27400000
         SEG     = SEGMENT NUMBER                              <<01069>>27405000
         ERROR   = 0 --> NOERR                                 <<01069>>27410000
                   6 --> INVALID SEG                           <<01069>>27415000
      RETURNS THE ABSOLUTE SEGMENT NUMBER;                     <<01069>>27420000
                                                               <<01069>>27425000
   INTEGER                                                     <<01069>>27430000
      TEMP;                                                    <<01069>>27435000
                                                               <<01069>>27440000
   ERROR := 0;                                                 <<01069>>27445000
   IF TYPESEG = ABS'SEG THEN ABSOLUTESEG := SEG                <<01069>>27450000
   ELSE                                                        <<01069>>27455000
      BEGIN                                                    <<01069>>27460000
      TEMP := 0;                                               <<01069>>27465000
      TEMP.(0:4) := TYPESEG-1;                                 <<06103>>27470000
      TEMP.(8:8) := SEG.(8:8);                                 <<01069>>27475000
      TEMP := PHYSICALCST( PIN,TEMP );                         <<01069>>27480000
      IF = THEN ABSOLUTESEG := TEMP                            <<06103>>27485000
      ELSE IF > THEN ERROR := INVALID'SEG                      <<01069>>27490000
      ELSE IF < THEN                                           <<01069>>27495000
         BEGIN << INVALID PIN >>                               <<01069>>27500000
         IF PCBI'(PIX+PROCSTATEWORDNUM).PTYPEFIELD >= 2 THEN   <<06671>>27505000
            BEGIN << SYS PROC--NOT IN LST         >>           <<01069>>27510000
                  << MUST SPECIFY SSL OR PROG SEG >>           <<01069>>27515000
            IF TYPESEG = SSL'SEG THEN                          <<01069>>27520000
               BEGIN                                           <<01069>>27525000
               ABSOLUTESEG := PHYSICALCST( 0,TEMP );           <<01069>>27530000
               IF <> THEN ERROR := INVALID'SEG;                <<01069>>27535000
               END                                             <<01069>>27540000
            ELSE IF TYPESEG = PROG'SEG AND                     <<01069>>27545000
                    SEG.(8:8) <= MAX'NUMPROGSEG                <<01069>>27550000
               THEN                                            <<06103>>27555000
                  ABSOLUTESEG:=IF LOGICALMAPPING THEN          <<06103>>27560000
                                  SEG+1                        <<06103>>27565000
                               ELSE                            <<06103>>27570000
                                  SEG+%301                     <<06103>>27575000
            ELSE ERROR := INVALID'SEG;                         <<01069>>27580000
            END;                                               <<01069>>27585000
          END;                                                 <<01069>>27590000
      END;                                                     <<01069>>27595000
END;  << ABSOLUTESEG >>                                        <<01069>>27600000
                                                               <<01549>>27605000
PROCEDURE SET'DB'DSEG( DB'STATE,XDS,ORIG'DB,DSTNUM );          <<01549>>27610000
   VALUE DB'STATE,XDS,ORIG'DB,DSTNUM;                          <<01549>>27615000
   INTEGER DB'STATE,XDS,DSTNUM;                                <<01549>>27620000
   DOUBLE ORIG'DB;                                             <<01549>>27625000
   OPTION PRIVILEGED, UNCALLABLE;                              <<01549>>27630000
BEGIN                                                          <<01549>>27635000
   COMMENT:                                                    <<01549>>27640000
      THIS PROCEDURE SETS DB TO THE XTRA DATA SEG. 'DSTNUM'    <<01549>>27645000
      AND RETURNS DB'S ORGINAL STATE.                          <<01549>>27650000
                                                               <<01549>>27655000
      RETURNS: (ON TOS)                                        <<01549>>27660000
         DB'STATE = 0 ==> DB ORIG. AT STAK                     <<01549>>27665000
         S3         1 ==> DB AT XDS                            <<01549>>27670000
                    2 ==> DB AT ABSDB -- NO XDS                <<01549>>27675000
                    3 ==> DB AT ABSDB -- XDS                   <<01549>>27680000
         XDS      = XDS NUMBER IF DB'STATE = 1,3               <<01549>>27685000
         S2                                                    <<01549>>27690000
         ORIG'DB  = ORIGINAL DB IF ABSDB                       <<01549>>27695000
         S1/S0                                                 <<01549>>27700000
         ;                                                     <<01549>>27705000
   EQUATE NUMPARM = 1; << DELETE DSTNUM >>                     <<01549>>27710000
                                                               <<01549>>27715000
   DB'STATE := 0; <<SET STATE TO DB ORIG AT STACK >>           <<01549>>27720000
   XDS := PCBI'(PIX+DBXDSINFOWORDNUM);                         <<06743>>27725000
   << CHECK FOR ABSOLUTE DB >>                                 <<01549>>27730000
   IF XDS.ABSDBFLAG = 1 THEN                                   <<06743>>27735000
      BEGIN                                                    <<01549>>27740000
      PUSH(DB);                                                <<01549>>27745000
      ORIG'DB := TOS;                                          <<01549>>27750000
      DB'STATE := 2; << ABS DB ON ENTRY >>                     <<01549>>27755000
      RESETDB(-1);  << RESETS DB TO XDS OR STACK >>            <<01549>>27760000
      END;                                                     <<01549>>27765000
                                                               <<01549>>27770000
   << CHECK FOR EXCHANGE TO XTRA DATA SEGMENT >>               <<01549>>27775000
   IF (XDS := XDS.XDSDSTFIELD) <> 0 THEN                       <<06743>>27780000
      BEGIN                                                    <<01549>>27785000
      DB'STATE := DB'STATE + 1;                                <<01549>>27790000
      END;                                                     <<01549>>27795000
   EXCHANGEDB (DSTNUM);                                        <<01549>>27800000
   RETURN NUMPARM;                                             <<01549>>27805000
END; << SET'DB'STAK >>                                         <<01549>>27810000
                                                               <<01069>>27815000
PROCEDURE SET'DB( DB'STATE,XDS,DB'REG );                       <<01069>>27820000
   VALUE DB'STATE,XDS,DB'REG;                                  <<01069>>27825000
   INTEGER DB'STATE,XDS;                                       <<01069>>27830000
   DOUBLE DB'REG;                                              <<01069>>27835000
   OPTION PRIVILEGED, UNCALLABLE;                              <<01069>>27840000
BEGIN                                                          <<01069>>27845000
   COMMENT:                                                    <<01069>>27850000
      THIS PROCEDURE SETS DB TO THE REQUESTED                  <<01069>>27855000
      STATE. IT ASSUMES THAT UPON ENTRY DB IS                  <<01069>>27860000
      POINTING TO THE STAK.                                    <<01069>>27865000
                                                               <<01069>>27870000
         DB'STATE = 0 ==> SET DB TO STAK                       <<01069>>27875000
                    1 ==> DB TO EXTRA DS                       <<01069>>27880000
                    2 ==> DB TO ABSDB -- NO XDS                <<01069>>27885000
                    3 ==> DB AT ABSDB -- XDS                   <<01069>>27890000
         XDS      = XDS NUMBER IS DB'STATE = 1,3               <<01069>>27895000
         DB'REG   = DB IF ABSDB IS REQUESTED;                  <<01069>>27900000
                                                               <<01069>>27905000
   IF DB'STATE = 1 OR DB'STATE = 3 THEN EXCHANGEDB( XDS );     <<01069>>27910000
   IF DB'STATE >= 2 THEN                                       <<01069>>27915000
      BEGIN                                                    <<01069>>27920000
      SETSYSDB;                                                <<01069>>27925000
      TOS := DB'REG;                                           <<01069>>27930000
      SET(DB);                                                 <<01069>>27935000
      END;                                                     <<01069>>27940000
                                                               <<01069>>27945000
END;  << SET'DB >>                                             <<01069>>27950000
                                                               <<01069>>27955000
LOGICAL PROCEDURE PRIVBREAKPNT;                                <<01069>>27960000
   OPTION PRIVILEGED, UNCALLABLE;                              <<01069>>27965000
BEGIN                                                          <<01069>>27970000
   COMMENT:                                                    <<01069>>27975000
      THIS PROCEDURE DETERMINES WHETHER BREAKPOINTS SET        <<01069>>27980000
      BY THIS PROCESS ARE PRIVILEGED, IF SO THEN RETURN        <<01069>>27985000
      TRUE.  THE BREAK POINTS WILL BE PRIVILEGED IF WE         <<01069>>27990000
      ARE IN A SYSTEM PROCESS OR IF ARE CALLED BY A PRIV       <<01069>>27995000
      USER;                                                    <<01069>>28000000
                                                               <<01069>>28005000
   INTEGER                                                     <<01069>>28010000
      PCBGLOBLOC,                                              <<06671>>28015000
      I;                                                       <<01069>>28020000
   LOGICAL                                                     <<01069>>28025000
      PRIV;                                                    <<01069>>28030000
                                                               <<01069>>28035000
ARRAY QARRAY(*) = Q+0;                                         <<06671>>28040000
                                                               <<06671>>28045000
   SUBROUTINE DEF'MOVEFROMDSEG;                                <<01069>>28050000
                                                               <<01069>>28055000
   IF PCBI'(PIX+PROCSTATEWORDNUM).PTYPEFIELD >= 2              <<06671>>28060000
      THEN PRIVBREAKPNT := TRUE                                <<06671>>28065000
   ELSE                                                        <<01069>>28070000
      BEGIN << USER PROCESS >>                                 <<01069>>28075000
      GETJITINDEX;                                             <<06671>>28080000
      I := TOS; << JIT INDEX >>                                <<01069>>28085000
      MOVEFROMDSEG(@PRIV,I,JIT'UCAP2,1);                       <<01069>>28090000
      PRIVBREAKPNT := PRIV.UCAP'PM                             <<01069>>28095000
      END;                                                     <<01069>>28100000
END;  << PRIVBREAKPNT >>                                       <<01069>>28105000
                                                               <<01069>>28110000
PROCEDURE VALIDATE'BREAKPNT( ERROR,SEG,PLOC,TYPESEG,           <<01069>>28115000
                             BREAKPNT'TYPE,CNT,FLAGS );        <<01069>>28120000
   VALUE SEG,PLOC,TYPESEG,BREAKPNT'TYPE,CNT,FLAGS;             <<01069>>28125000
   INTEGER ERROR,SEG,PLOC,TYPESEG,CNT;                         <<01069>>28130000
   LOGICAL BREAKPNT'TYPE,FLAGS;                                <<01069>>28135000
   OPTION VARIABLE, PRIVILEGED, UNCALLABLE;                    <<01069>>28140000
BEGIN                                                          <<01069>>28145000
   COMMENT:                                                    <<01069>>28150000
      THIS PROCEDURE VALIDATES THE LOCATION AND                <<01069>>28155000
      TYPE OF BREAK POINT THAT IS TO BE SET.                   <<01069>>28160000
      ERROR IS SET TO 0 IF EVERYTHING IS OK, ELSE ERROR        <<01069>>28165000
      CONTAINS THE ERROR NUMBER AS DEFINED IN                  <<01069>>28170000
      SET'BREAKPOINT & CLEAR'BREAKPOINT;                       <<01069>>28175000
                                                               <<01069>>28180000
   DEFINE                                                      <<01069>>28185000
      CNT'PASSED           = PARMMASK.(14:1)#,                 <<01069>>28190000
      BREAKPNT'TYPE'PASSED = PARMMASK.(13:1)#,                 <<01069>>28195000
      TYPESEG'PASSED       = PARMMASK.(12:1)#,                 <<01069>>28200000
      PLOC'PASSED          = PARMMASK.(11:1)#,                 <<01069>>28205000
      SEG'PASSED           = PARMMASK.(10:1)#,                 <<01069>>28210000
      PRIV                 = FLAGS.(15:1)#,                    <<01069>>28215000
      ABS'SEG'OK           = FLAGS.(14:1)#;                    <<01069>>28220000
   DOUBLE DEBUGID:=0D;                                         <<06103>>28225000
   DEBUGIDDEF;                                                 <<06103>>28230000
                                                               <<01069>>28235000
   ERROR := 0;                                                 <<01069>>28240000
                                                               <<01069>>28245000
   << VALIDATE TYPESEG >>                                      <<01069>>28250000
   IF TYPESEG'PASSED THEN                                      <<01069>>28255000
      BEGIN                                                    <<01069>>28260000
      IF NOT ( ABS'SEG <= TYPESEG <= PROG'SEG ) OR             <<01069>>28265000
         TYPESEG = SSL'SEG AND NOT PRIV OR                     <<01069>>28270000
         TYPESEG = ABS'SEG AND NOT PRIV AND NOT ABS'SEG'OK     <<01069>>28275000
      THEN                                                     <<01069>>28280000
         BEGIN                                                 <<01069>>28285000
         ERROR := INVALID'TYPESEG;                             <<01069>>28290000
         RETURN;                                               <<01069>>28295000
         END;                                                  <<01069>>28300000
       END;                                                    <<01069>>28305000
                                                               <<01069>>28310000
   << VALIDATE SEG >>                                          <<01069>>28315000
   IF SEG'PASSED THEN                                          <<01069>>28320000
      BEGIN                                                    <<01069>>28325000
      IF TYPESEG = PROG'SEG AND SEG > MAX'NUMPROGSEG OR        <<06103>>28330000
         TYPESEG<>PROG'SEG AND TYPESEG<>ABS'SEG AND SEG>%377   <<06103>>28335000
      THEN                                                     <<01549>>28340000
         BEGIN                                                 <<01069>>28345000
         ERROR := INVALID'SEG;                                 <<01069>>28350000
         RETURN;                                               <<01069>>28355000
         END;                                                  <<01069>>28360000
      IF TYPESEG <> ABS'SEG THEN                               <<01069>>28365000
         BEGIN                                                 <<01069>>28370000
         << TRANSLATE SEG TO ABSOLUTE SEG NUMBER >>            <<01069>>28375000
         SEG := ABSOLUTESEG( TYPESEG,SEG,ERROR );              <<01069>>28380000
         IF ERROR <> 0 THEN                                    <<01069>>28385000
            BEGIN                                              <<01069>>28390000
            ERROR := INVALID'SEG;                              <<01069>>28395000
            RETURN;                                            <<01069>>28400000
            END;                                               <<01069>>28405000
          END;                                                 <<01069>>28410000
      SEGNR:=SEG;                                              <<06103>>28415000
      XFLAG:=IF TYPESEG=PROG'SEG THEN 1 ELSE 0;                <<06103>>28420000
      IF VALIDATE(,DEBUGID) <> 0 THEN                          <<06103>>28425000
         BEGIN                                                 <<01069>>28430000
         ERROR := INVALID'SEG;                                 <<01069>>28435000
         RETURN;                                               <<01069>>28440000
         END;                                                  <<01069>>28445000
      END;                                                     <<01069>>28450000
                                                               <<01069>>28455000
   IF PLOC'PASSED AND PLOC < 0 THEN                            <<01069>>28460000
      BEGIN                                                    <<01069>>28465000
      ERROR := INVALID'PLOC;                                   <<01069>>28470000
      RETURN;                                                  <<01069>>28475000
      END;                                                     <<01069>>28480000
                                                               <<01069>>28485000
   IF BREAKPNT'TYPE'PASSED THEN                                <<01069>>28490000
      BEGIN                                                    <<01069>>28495000
      IF BREAKPNT'TYPE.SYSBRKPNT=1 AND NOT PRIV THEN           <<01069>>28500000
         BEGIN                                                 <<01069>>28505000
         ERROR := INVALID'CAP;                                 <<01069>>28510000
         RETURN;                                               <<01069>>28515000
         END                                                   <<01069>>28520000
      ELSE IF BREAKPNT'TYPE.SYSBRKPNT > 1 THEN                 <<01069>>28525000
         BEGIN                                                 <<01069>>28530000
         ERROR := INVALID'BRKTYPE;                             <<01069>>28535000
         RETURN;                                               <<01069>>28540000
         END;                                                  <<01069>>28545000
      END;                                                     <<01069>>28550000
                                                               <<01069>>28555000
   IF CNT'PASSED THEN                                          <<01069>>28560000
      BEGIN                                                    <<01069>>28565000
      IF CNT <= 0 THEN                                         <<01069>>28570000
         BEGIN                                                 <<01069>>28575000
         ERROR := INVALID'CNT;                                 <<01069>>28580000
         RETURN;                                               <<01069>>28585000
         END;                                                  <<01069>>28590000
      END;                                                     <<01069>>28595000
                                                               <<01069>>28600000
END;  << VALIDATE'BREAKPNT >>                                  <<01069>>28605000
                                                               <<01069>>28610000
                                                               <<01069>>28615000
PROCEDURE SET'BREAKPNT( ERROR,SEG,PLOC,TYPESEG,BREAKPNT'TYPE,  <<01069>>28620000
                        CNT,BREAKPNT'COND,PLABEL );            <<01069>>28625000
                                                               <<01069>>28630000
   VALUE SEG,PLOC,TYPESEG,BREAKPNT'TYPE,CNT,PLABEL;            <<01069>>28635000
   INTEGER ERROR,SEG,PLOC,TYPESEG,CNT,PLABEL;                  <<01069>>28640000
   LOGICAL BREAKPNT'TYPE;                                      <<01069>>28645000
   LOGICAL ARRAY BREAKPNT'COND;                                <<01069>>28650000
   OPTION VARIABLE, PRIVILEGED;                                <<01069>>28655000
BEGIN                                                          <<01069>>28660000
   COMMENT:                                                    <<01069>>28665000
      This procedure permits the programmatic setting of break <<01069>>28670000
      points within the calling process.  When the break point <<01069>>28675000
      is encountered control is transfered to a user defined   <<01069>>28680000
      trap procedure.  The procedure is defined as follows:    <<01069>>28685000
                                                               <<01069>>28690000
      seg           Integer by value - optional.               <<01069>>28695000
                    The segment in which the break point is to <<01069>>28700000
                    be set.  Default: the segment from which   <<01069>>28705000
                    the procedure is invoked.                  <<01069>>28710000
                                                               <<01069>>28715000
      ploc          Integer by value - required.               <<01069>>28720000
                    The PB relative location of the break point<<01069>>28725000
                                                               <<01069>>28730000
      segtype       Integer by value - optional                <<01069>>28735000
                    The segment type of the segment number.    <<01069>>28740000
                                                               <<01069>>28745000
                    0 --> absolute segment number  (*)         <<01069>>28750000
                    1 --> SSL segment number (*)               <<01069>>28755000
                    2 --> PSL segment number                   <<01069>>28760000
                    3 --> GSL segment number                   <<01069>>28765000
                    4 --> Program segment (default)            <<01069>>28770000
                                                               <<01069>>28775000
      breakpnt'type Logical by value - optional.               <<01069>>28780000
                    This word describes the type of break point<<01069>>28785000
                                                               <<01069>>28790000
                    (13:3) = 0   process local break point     <<01069>>28795000
                                 (default).                    <<01069>>28800000
                           = 1   system break point (*)        <<01069>>28805000
                             2/7 currently undefined           <<01069>>28810000
                    (12:1) = 0   non-permanent break point     <<01069>>28815000
                                 (default)                     <<01069>>28820000
                           = 1   permanent                     <<01069>>28825000
                    (0:11)       ignored                       <<01069>>28830000
                                                               <<01069>>28835000
      frequency     Integer by value - optional.               <<01069>>28840000
                    The frequency of the break point (i.e. the <<01069>>28845000
                    break point is to be recognized the nth    <<01069>>28850000
                    time the instruction is executed)          <<01069>>28855000
                                                               <<01069>>28860000
      break'cond    Logical array - optional.                  <<01069>>28865000
                    Currently unused.  In the future it may be <<01069>>28870000
                    used to pass qualifying information such   <<01069>>28875000
                    as break when DB+7=3.                      <<01069>>28880000
                                                               <<01069>>28885000
      plabel        Integer by value - optional.               <<01069>>28890000
                    The external label of the user's trap      <<01069>>28895000
                    procedure.                                 <<01069>>28900000
                    Default: DEBUG wil be invoked when the trap<<01069>>28905000
                    is encountered.                            <<01069>>28910000
                                                               <<01069>>28915000
      error         Integer by reference - required            <<01069>>28920000
                    0 --> no error                             <<01069>>28925000
                    1 --> invalid ploc                         <<01069>>28930000
                    2 --> break point table full               <<01069>>28935000
                    3 --> process/system conflict              <<01069>>28940000
                    4 --> location conflict (process/process   <<01069>>28945000
                          or system/system)                    <<01069>>28950000
                    5 --> reserved for future use              <<01069>>28955000
                    6 --> invalid segment                      <<01069>>28960000
                    7 --> invalid segment type                 <<01069>>28965000
                    8 --> invalid frequency                    <<01069>>28970000
                    9 --> insufficient capability              <<01069>>28975000
                   10 --> invalid plabel                       <<01069>>28980000
                   11 --> invalid break point type             <<01069>>28985000
                                                               <<01069>>28990000
      (*)          privileged users or system processes only   <<01069>>28995000
                                                               <<01069>>29000000
      condition code returned:                                 <<01069>>29005000
                   cce:  successful completion of procedure    <<01069>>29010000
                   ccl:  unsuccessful ( error > 0 )            <<01069>>29015000
                   ccg:  not currently returned;               <<01069>>29020000
                                                               <<01069>>29025000
                                                               <<01069>>29030000
   DOUBLE DEBUGID:=0D;                                         <<06103>>29035000
   DEBUGIDDEF;                                                 <<06103>>29040000
   INTEGER USERLABEL;                                          <<06103>>29045000
   INTEGER PLABELMODE;                                         <<06663>>29050000
   DOUBLE OBJ;                                                 <<06663>>29055000
   LOGICAL ARRAY OBJID(*)=OBJ;                                 <<06663>>29060000
   LOGICAL CCODE;                                              <<06103>>29065000
                                                               <<01069>>29070000
   DEFINE                                                      <<01069>>29075000
      PLABEL'PASSED        = PARMMASK.(15:1) #,                <<01069>>29080000
      BREAKPNT'COND'PASSED = PARMMASK.(14:1) #,                <<01069>>29085000
      CNT'PASSED           = PARMMASK.(13:1) #,                <<01069>>29090000
      BREAKPNT'TYPE'PASSED = PARMMASK.(12:1) #,                <<01069>>29095000
      TYPESEG'PASSED       = PARMMASK.(11:1) #,                <<01069>>29100000
      PLOC'PASSED          = PARMMASK.(10:1) #,                <<01069>>29105000
      SEG'PASSED           = PARMMASK.( 9:1) #,                <<01069>>29110000
      PRIV                 = FLAGS.(15:1)#,                    <<01069>>29115000
      ABS'SEG'OK           = FLAGS.(14:1)#;                    <<01069>>29120000
   EQUATE                                                      <<01069>>29125000
      DEBUGTRAP            = -1,  << TYPE TRAP LABEL >>        <<06668>>29130000
      NUMPARM              = 9,   << NUM OF PARM WORDS >>      <<01069>>29135000
      INTRIN'NUM           = 97,                               <<01069>>29140000
      NUM'ACTUALPARM       = 8,   << NUM OF PARMS IN CALL >>   <<01069>>29145000
      << CHEK ADD. OF ERROR,COND >>                            <<01069>>29150000
      PARMCHEK             = [2/0,2/2,10/0,2/2],               <<01069>>29155000
      OPTVMASK             = %137;<< ERROR,PLOC REQUIRED >>    <<01069>>29160000
   INTEGER ARRAY                                               <<01549>>29165000
      COND(0:ENTRYSIZE'CNT);                                   <<01549>>29170000
   INTEGER                                                     <<01069>>29175000
      DB'STATE,     << ORIG LOC OF DB ON ENTRY >>              <<01069>>29180000
      XDS,          << ORIG EXTRA DS NUM       >>              <<01069>>29185000
      FLAGS',                                                  <<06671>>29190000
      PINN,                                                    <<06671>>29195000
      I,                                                       <<01069>>29200000
      CRITICAL,                                                <<01069>>29205000
      INTRINFLAG := [10/INTRIN'NUM,6/NUMPARM];                 <<01069>>29210000
   DOUBLE                                                      <<01069>>29215000
      ORIG'DB;      << ORIG DB REGISTER        >>              <<01069>>29220000
   LOGICAL                                                     <<01069>>29225000
      FLAGS := 0;   << USED FOR VALIDATION     >>              <<01069>>29230000
                                                               <<01069>>29235000
   SUBROUTINE PROC'EXIT( EXITSTATE );                          <<01069>>29240000
      VALUE EXITSTATE;                                         <<01069>>29245000
      INTEGER EXITSTATE;                                       <<01069>>29250000
   BEGIN                                                       <<01069>>29255000
      COMMENT: THIS SUBROUTINE DOES ANY NECESSARY              <<01069>>29260000
         CLEANUP AND EXITS PROCEDURE;                          <<01069>>29265000
      ERROR := EXITSTATE;                                      <<01069>>29270000
      IF ERROR = EVERYTHINGOK THEN STATUS.CCFLD := CCE         <<01069>>29275000
      ELSE STATUS.CCFLD := CCL;                                <<01069>>29280000
      ERROREXIT( INTRINFLAG,0,0 );                             <<01069>>29285000
      ASSEMBLE ( EXIT NUMPARM );                               <<01069>>29290000
   END;                                                        <<01069>>29295000
                                                               <<01069>>29300000
   LOGICAL SUBROUTINE SYSTEM'( CSTNUM );                       <<06103>>29305000
      VALUE CSTNUM;                                            <<01069>>29310000
      INTEGER CSTNUM;                                          <<01069>>29315000
   BEGIN                                                       <<01069>>29320000
      COMMENT: THIS SUBROUTINE CHECKS WHETHER THE              <<01069>>29325000
         SPECIFIED SEGMENT IS A SYSTEM SEGMENT;                <<01069>>29330000
      IF CSTNUM <= %377 AND XFLAG = 0 AND                      <<06103>>29335000
         LOGICAL(CSTI'(CSTNUM&LSL(2)+2)).SYSTEMFLAG            <<01549>>29340000
      THEN SYSTEM' := TRUE                                     <<06103>>29345000
      ELSE SYSTEM' := FALSE;                                   <<06103>>29350000
   END;                                                        <<01069>>29355000
                                                               <<01069>>29360000
                                                               <<01069>>29365000
   ERRORON;                                                    <<01069>>29370000
   CHEK( INTRINFLAG,NUM'ACTUALPARM,DOUBLE(PARMCHEK),           <<01069>>29375000
         <<CAP>>,OPTVMASK );                                   <<01069>>29380000
                                                               <<01069>>29385000
   COMMENT:                                                    <<01069>>29390000
      IF WE WERE CALLED BY A SYSTEM PROCESS OR                 <<01069>>29395000
      A PRIVILEGED USER THAN ANY BREAKPOINTS WHICH ARE         <<01069>>29400000
      SET ARE PRIVILEGED BREAK POINTS.;                        <<01069>>29405000
   PRIV := PRIVBREAKPNT;                                       <<01069>>29410000
                                                               <<01069>>29415000
   << *** VALIDATE PARAMETERS *** >>                           <<01069>>29420000
                                                               <<01069>>29425000
   << SET UP DEFAULT VALUES >>                                 <<01069>>29430000
                                                               <<01069>>29435000
   IF NOT SEG'PASSED THEN                                      <<01069>>29440000
      BEGIN                                                    <<01069>>29445000
      USERLABEL:=STATUS.(8:8);                                 <<06103>>29450000
      USERLABEL.(0:1):=DELTAP.(1:1);                           <<06103>>29455000
      OBJ := MAPPEDCSTTOPHYCST(USERLABEL,0);                   <<06663>>29460000
      IF OBJID(OBJIDTYPEFIELD)=OBJIDSLTYPE THEN                <<06663>>29465000
          SEG:=OBJID(OBJIDNUMFIELD)                            <<06663>>29470000
      ELSE                                                     <<06103>>29475000
         BEGIN                                                 <<06103>>29480000
            XFLAG:=1;                                          <<06103>>29485000
            IF NOT LOGICALMAPPING THEN SEG:=SEG+%300;          <<06663>>29490000
         END;                                                  <<06103>>29495000
      TYPESEG := ABS'SEG; << IGNORE PASSED TYPESEG >>          <<01069>>29500000
      ABS'SEG'OK := TRUE;                                      <<01069>>29505000
      END                                                      <<01069>>29510000
   ELSE IF NOT TYPESEG'PASSED THEN TYPESEG := PROG'SEG;        <<01069>>29515000
   IF TYPESEG=4 THEN TYPESEG:=PROG'SEG;                        <<06103>>29520000
                                                               <<01069>>29525000
   IF NOT BREAKPNT'TYPE'PASSED THEN BREAKPNT'TYPE := 0;        <<01069>>29530000
   IF NOT CNT'PASSED THEN CNT := 1;                            <<01069>>29535000
                                                               <<01069>>29540000
   VALIDATE'BREAKPNT( ERROR,SEG,PLOC,TYPESEG,                  <<01069>>29545000
                      BREAKPNT'TYPE,CNT,FLAGS );               <<01069>>29550000
   IF ERROR <> 0 THEN PROC'EXIT( ERROR );<< ERROR RETURN >>    <<01069>>29555000
   COMMENT:                                                    <<01549>>29560000
      VALIDATE'BREAKPNT HAS ALREADY DONE CHECKING -->          <<01069>>29565000
      NO ERROR CHECK NEEDED AFTER CALL TO ABSOLUTESEG;         <<01069>>29570000
   SEGNR := ABSOLUTESEG ( TYPESEG,SEG,ERROR );                 <<06103>>29575000
   IF TYPESEG = PROG'SEG THEN XFLAG:=1                         <<06103>>29580000
                         ELSE XFLAG:=0;                        <<06103>>29585000
   SEGTYPE:=ABS'SEG;                                           <<06103>>29590000
                                                               <<01069>>29595000
   IF PLABEL'PASSED AND PLABEL<>@DEBUG THEN                    <<01069>>29600000
      BEGIN                                                    <<01069>>29605000
      CCODE:=TRAPLABEL( DEBUGTRAP,I,PLABEL,I,I,PLABELMODE );   <<06103>>29610000
      IF CCODE=CCL THEN PROC'EXIT( INVALID'PLABEL );           <<06103>>29615000
      << CANNOT TRAP IN SYSTEM SEG UNLESS TRAP IS SYS SEG >>   <<01069>>29620000
      IF SYSTEM'(SEGNR) AND NOT SYSTEM(PLABEL) THEN            <<06103>>29625000
         PROC'EXIT( INVALID'PLABEL );                          <<01069>>29630000
      END;                                                     <<01069>>29635000
                                                               <<01069>>29640000
   << SET UP CALL TO ENTERSTOP >>                              <<01069>>29645000
   FLAGS' := 0; <<proc holds flags>>                           <<06671>>29650000
   pinn:= IF BREAKPNT'TYPE.SYSBRKPNT=1 THEN 0 ELSE PIN;        <<06671>>29655000
   FLAGS'.LOCBIT := IF BREAKPNT'TYPE.SYSBRKPNT=1 THEN 0        <<06671>>29660000
                  ELSE 1;                                      <<01549>>29665000
   FLAGS'.PRIVBIT := PRIV;                                     <<06671>>29670000
   FLAGS'.DBLTRAP := IF CNT > 1 OR                             <<06671>>29675000
                      BREAKPNT'TYPE.PERMBRKPNT THEN 1          <<01069>>29680000
                    ELSE 0;                                    <<01069>>29685000
   FLAGS'.PERMBIT := BREAKPNT'TYPE.PERMBRKPNT;                 <<06671>>29690000
   FLAGS'.LABELBIT := IF PLABEL'PASSED AND PLABEL<>@DEBUG      <<06671>>29695000
                         THEN 1                                <<06671>>29700000
                    ELSE 0;                                    <<01069>>29705000
   << SET UP COND FOR ENTER STOP >>                            <<01549>>29710000
   IF CNT = 1 THEN COND(0) := 0  << NO CONDITION >>            <<01549>>29715000
   ELSE                                                        <<01549>>29720000
      BEGIN                                                    <<01549>>29725000
      COND(0) := ENTRYSIZE'CNT;                                <<01549>>29730000
      COND(1) := CNT;                                          <<01549>>29735000
      COND(2) := 0;   << NUMBER OF HITS >>                     <<01549>>29740000
      COND(3) := T'NUMBER;                                     <<01549>>29745000
      END;                                                     <<01549>>29750000
   CRITICAL := SETCRITICAL;                                    <<01069>>29755000
   ERROR:=ENTERSTOP(FLAGS',PINN,DEBUGID,PLOC,COND,             <<06671>>29760000
                    plabel,plabelmode);                        <<06671>>29765000
   RESETCRITICAL( CRITICAL );                                  <<01069>>29770000
                                                               <<01069>>29775000
   << CLEANUP AND RETURN >>                                    <<01069>>29780000
   PROC'EXIT( ERROR );                                         <<01069>>29785000
END; << SET'BREAKPOINT >>                                      <<01069>>29790000
                                                               <<01069>>29795000
PROCEDURE CLEAR'BREAKPNT( ERROR,SEG,PLOC,TYPESEG,              <<01069>>29800000
                          BREAKPNT'TYPE,PLABEL );              <<01069>>29805000
   VALUE SEG,PLOC,TYPESEG,BREAKPNT'TYPE,PLABEL;                <<01069>>29810000
   INTEGER ERROR,SEG,PLOC,TYPESEG,PLABEL;                      <<01069>>29815000
   LOGICAL BREAKPNT'TYPE;                                      <<01069>>29820000
   OPTION VARIABLE, PRIVILEGED;                                <<01069>>29825000
                                                               <<01069>>29830000
BEGIN                                                          <<01069>>29835000
   COMMENT:                                                    <<01069>>29840000
      This procedure permits the programmatic clearing         <<01069>>29845000
      of break points within the calling process. The          <<01069>>29850000
      procedure is defined as follows:                         <<01069>>29855000
                                                               <<01069>>29860000
      seg           Integer by value - optional                <<01069>>29865000
                    =-1  --> clear all break points            <<01069>>29870000
                             in specified domain (proc/sys)    <<01069>>29875000
                    >0   --> segment number                    <<01069>>29880000
                             default: currently executing seg. <<01069>>29885000
                                                               <<01069>>29890000
      ploc          Integer by value - required if seg <> -1.  <<01069>>29895000
                    =-1  --> clear all break points            <<01069>>29900000
                             in the specified segment.         <<01069>>29905000
                    >=0  --> PB relative location of break     <<01069>>29910000
                             point                             <<01069>>29915000
                                                               <<01069>>29920000
//                                                                     29925000
      segtype       Integer by value - optional                <<01069>>29930000
                    The segment type of the segment number.    <<01069>>29935000
                                                               <<01069>>29940000
                    0 --> absolute segment number (*)          <<01069>>29945000
                    1 --> SSL segment number (*)               <<01069>>29950000
                    2 --> PSL segment number                   <<01069>>29955000
                    3 --> GSL segment number                   <<01069>>29960000
                    4 --> Program segment (default)            <<01069>>29965000
                                                               <<01069>>29970000
      breakpnt'type Logical by value - optional.               <<01069>>29975000
                    This word describes the type of break point<<01069>>29980000
                                                               <<01069>>29985000
                    (13:3) = 0   process local break point     <<01069>>29990000
                                 (default)                     <<01069>>29995000
                           = 1   system break point (*)        <<01069>>30000000
                           = 2/7 currently undefined           <<01069>>30005000
                    (0:12)   ignored                           <<01069>>30010000
                                                               <<01069>>30015000
      plabel        Integer by value - optional.               <<01069>>30020000
                    Specifies which traps are to be            <<01069>>30025000
                    removed -- user/debug.                     <<01069>>30030000
                                                               <<01069>>30035000
                    0 -->   remove all traps in specified      <<01069>>30040000
                            range (default)                    <<01069>>30045000
                    1 -->   remove only user traps within the  <<01069>>30050000
                            specified range                    <<01069>>30055000
                    2 -->   remove only DEBUG break points     <<01069>>30060000
                            within the specified range         <<01069>>30065000
                    @label  within the specified range,        <<01069>>30070000
                            remove break points whose trap     <<01069>>30075000
                            routine is defined by this         <<01069>>30080000
                            external plabel.                   <<01069>>30085000
                                                               <<01069>>30090000
      error         Integer by reference - required            <<01069>>30095000
                    Errors defined as in SET'BREAKPOINT        <<01069>>30100000
                    (errors 2/4 not returned by this procedure)<<01069>>30105000
                                                               <<01069>>30110000
      (*)           privileged users or system processes only  <<01069>>30115000
                                                               <<01069>>30120000
                                                               <<01069>>30125000
      condition code returned:                                 <<01069>>30130000
                    cce:  successful completion of procedure   <<01069>>30135000
                    ccl:  unsuccessful ( error > 0 )           <<01069>>30140000
                    ccg:  currently not returned;              <<01069>>30145000
                                                               <<01069>>30150000
                                                               <<01069>>30155000
   DOUBLE DEBUGID:=0D;                                         <<06663>>30160000
   DOUBLE OBJ;                                                 <<06663>>30165000
   LOGICAL ARRAY OBJID(*)=OBJ;                                 <<06663>>30170000
   DEBUGIDDEF;                                                 <<06103>>30175000
   INTEGER PLABELMODE,USERLABEL;                               <<06663>>30180000
   DEFINE                                                      <<01069>>30185000
      PLABEL'PASSED        = PARMMASK.(15:1) #,                <<01069>>30190000
      BREAKPNT'TYPE'PASSED = PARMMASK.(14:1) #,                <<01069>>30195000
      TYPESEG'PASSED       = PARMMASK.(13:1) #,                <<01069>>30200000
      PLOC'PASSED          = PARMMASK.(12:1) #,                <<01069>>30205000
      SEG'PASSED           = PARMMASK.(11:1) #,                <<01069>>30210000
      PRIV                 = FLAGS.(15:1)#,                    <<01069>>30215000
      ABS'SEG'OK           = FLAGS.(14:1)#;                    <<01069>>30220000
   EQUATE                                                      <<01069>>30225000
      NUMPARM              = 6+1,  << NUM PARM WORDS >>        <<01069>>30230000
      NUM'ACTUALPARM       = 6,    << NUM PARM IN CALL >>      <<01069>>30235000
      ALLSEG               = -1,                               <<01069>>30240000
      ALLPLOC              = -1,                               <<01069>>30245000
      INTRIN'NUM           = 98,                               <<01069>>30250000
      << CHEK ADD OF ERROR >>                                  <<01069>>30255000
      PARMCHEK             = [14/0,2/2],                       <<01069>>30260000
      OPTVMASK             = %37;  << ERROR REQUIRED >>        <<01069>>30265000
   DOUBLE                                                      <<01069>>30270000
      ORIG'DB;      << ORIG DB REGISTER        >>              <<01069>>30275000
   INTEGER                                                     <<01069>>30280000
      DB'STATE,     << ORIG DB LOC ON ENTRY    >>              <<01069>>30285000
      XDS,          << ORIG EXTRA DS NUMBER    >>              <<01069>>30290000
      FLAGS',                                                  <<06671>>30295000
      PINN,                                                    <<06671>>30300000
      INTRINFLAG := [10/INTRIN'NUM,6/NUMPARM],                 <<01069>>30305000
      CRITICAL;                                                <<01069>>30310000
   LOGICAL                                                     <<01069>>30315000
      FLAGS := 0;   << USED FOR VALIDATION     >>              <<01069>>30320000
                                                               <<01069>>30325000
   SUBROUTINE PROC'EXIT( EXITSTATE );                          <<01069>>30330000
      VALUE EXITSTATE;                                         <<01069>>30335000
      INTEGER EXITSTATE;                                       <<01069>>30340000
   BEGIN                                                       <<01069>>30345000
      COMMENT: THIS SUBROUTINE DOES ANY NECESSARY              <<01069>>30350000
         CLEANUP AND EXITS PROCEDURE;                          <<01069>>30355000
      ERROR := EXITSTATE;                                      <<01069>>30360000
      IF ERROR = EVERYTHINGOK THEN STATUS.CCFLD := CCE         <<01069>>30365000
      ELSE STATUS.CCFLD := CCL;                                <<01069>>30370000
      ERROREXIT( INTRINFLAG,0,0 );                             <<01069>>30375000
      ASSEMBLE ( EXIT NUMPARM );                               <<01069>>30380000
   END;                                                        <<01069>>30385000
                                                               <<01069>>30390000
   ERRORON;                                                    <<01069>>30395000
   CHEK( INTRINFLAG,NUM'ACTUALPARM,DOUBLE(PARMCHEK),           <<01069>>30400000
         <<CAP>>,OPTVMASK );                                   <<01069>>30405000
                                                               <<01069>>30410000
   COMMENT:                                                    <<01069>>30415000
      IF WE WERE CALLED BY A SYSTEM PROCESS OR                 <<01069>>30420000
      A PRIVILEGED USER THAN ANY BREAKPOINTS WHICH ARE         <<01069>>30425000
      SET ARE PRIVILEGED BREAK POINTS.;                        <<01069>>30430000
   PRIV := PRIVBREAKPNT;                                       <<01069>>30435000
                                                               <<01069>>30440000
                                                               <<01069>>30445000
   << SET UP DEFAULT VALUES >>                                 <<01069>>30450000
                                                               <<01069>>30455000
   IF NOT SEG'PASSED THEN                                      <<01069>>30460000
      BEGIN                                                    <<01069>>30465000
      USERLABEL:=STATUS.(8:8);                                 <<06103>>30470000
      USERLABEL.(0:1):=DELTAP.(1:1);                           <<06103>>30475000
      OBJ := MAPPEDCSTTOPHYCST(USERLABEL,0);                   <<06663>>30480000
      IF OBJID(OBJIDTYPEFIELD) = OBJIDSLTYPE THEN              <<06663>>30485000
         SEG:=OBJID(OBJIDNUMFIELD)                             <<06663>>30490000
      ELSE                                                     <<06663>>30495000
         BEGIN                                                 <<06663>>30500000
            XFLAG:=1;                                          <<06663>>30505000
            IF NOT LOGICALMAPPING THEN SEG:=SEG+%300;          <<06663>>30510000
         END;                                                  <<06663>>30515000
                                                               <<06663>>30520000
                                                               <<06663>>30525000
                                                               <<06663>>30530000
                                                               <<06663>>30535000
      TYPESEG := ABS'SEG; << IGNORE PASSED TYPESEG >>          <<01069>>30540000
      ABS'SEG'OK := TRUE;                                      <<01069>>30545000
      END                                                      <<01069>>30550000
   ELSE IF NOT TYPESEG'PASSED THEN TYPESEG := PROG'SEG;        <<01069>>30555000
   IF TYPESEG=4 THEN TYPESEG:=PROG'SEG;                        <<06103>>30560000
   IF NOT PLOC'PASSED AND SEG <> ALLSEG THEN                   <<01069>>30565000
      PROC'EXIT( INVALID'PLOC );                               <<01069>>30570000
   IF NOT BREAKPNT'TYPE'PASSED THEN BREAKPNT'TYPE := 0;        <<01069>>30575000
   IF NOT PLABEL'PASSED THEN PLABEL := 0; <<ALL TRAPS>>        <<01069>>30580000
                                                               <<01069>>30585000
   << TRANSLATE/VALIDATE PARAMETERS >>                         <<01069>>30590000
                                                               <<01069>>30595000
   IF SEG = ALLSEG THEN VALIDATE'BREAKPNT( ERROR,<<SEG>>,      <<01069>>30600000
      <<PLOC>>,<<TYPESEG>>,BREAKPNT'TYPE,<<CNT>>,FLAGS )       <<01069>>30605000
   ELSE IF PLOC = ALLPLOC THEN VALIDATE'BREAKPNT( ERROR,       <<01069>>30610000
      SEG,<<PLOC>>,TYPESEG,BREAKPNT'TYPE,<<CNT>>,FLAGS )       <<01069>>30615000
   ELSE VALIDATE'BREAKPNT( ERROR,SEG,PLOC,TYPESEG,             <<01069>>30620000
      BREAKPNT'TYPE,<<CNT>>,FLAGS );                           <<01069>>30625000
   IF ERROR <> 0 THEN PROC'EXIT( ERROR );                      <<01069>>30630000
                                                               <<01069>>30635000
   << SET UP CALL TO REMOVESTOP >>                             <<01069>>30640000
   pinn:= IF BREAKPNT'TYPE.SYSBRKPNT=1 THEN 0 ELSE PIN;        <<06671>>30645000
   FLAGS'.LOCBIT := IF BREAKPNT'TYPE.SYSBRKPNT=1 THEN 0        <<06671>>30650000
                  ELSE 1;                                      <<01549>>30655000
   COMMENT:                                                    <<01549>>30660000
      VALIDATE'BREAKPNT HAS ALREADY DONE CHECKING -->          <<01069>>30665000
      NO ERROR CHECK NEEDED AFTER CALL TO ABSOLUTESEG;         <<01069>>30670000
   SEGNR := IF SEG=ALLSEG THEN 0 ELSE                          <<06103>>30675000
             ABSOLUTESEG( TYPESEG,SEG,ERROR );                 <<01069>>30680000
   IF TYPESEG = PROG'SEG THEN XFLAG:=1                         <<06103>>30685000
                         ELSE XFLAG:=0;                        <<06103>>30690000
   SEGTYPE:=ABS'SEG;                                           <<06103>>30695000
   CRITICAL := SETCRITICAL;                                    <<01069>>30700000
   REMOVESTOP(FLAGS',PINN,DEBUGID,PLOC,,PLABEL,PLABELMODE );   <<06671>>30705000
   RESETCRITICAL( CRITICAL );                                  <<01069>>30710000
                                                               <<01069>>30715000
   << CLEANUP AND RETURN >>                                    <<01069>>30720000
   PROC'EXIT( ERROR );                                         <<01069>>30725000
END;  << CLEAR'BREAKPNT >>                                     <<01069>>30730000
                                                               <<01069>>30735000
                                                               <<01069>>30740000
$CONTROL SEGMENT=MAIN                                          <<01069>>30745000
$TITLE "          SYSTEM GLOBAL EQUATES AND DEFINES"           <<01069>>30750000
END.                                                                    30755000
