$A TAB=5, 10; CAPO=0; CAPSHO=0; INVERT=1; PAGENO=1 $A JUST=1; LINE=72; PAGE=59; TOP=3; BOTTOM=4; MARK=2 $L1CM DEBUGGING PROGRAM $B2 $L1C OBJECT: DBUG $A INDENT=1 $P2 @THIS PROGRAM IS USED AS AN AID TO DEBUGGING PROGRAMS, IT MAY BE USED TO:- $A INDENT=2 $B0 1) .SET AND .CLEAR BREAKPOINTS $B0 2) @DUMP OUT THE .PSECT, .REGISTERS AND/OR THE .IMP .STACK. $B0 3) .EXAMINE AND .CHANGE LOCATIONS IN CORE. $B0 4) .DUMP GENERAL AREAS OF CORE. $A INDENT=1 $P2 .DEBUG INDICATES ITS READINESS TO ACCEPT COMMANDS BY TYPING .'DEBUG:'. @THE FOLLOWING COMMANDS MAY BE USED. $A INDENT=2 $B1 $I-1 .T - $T+1 @SET @TASK NUMBER OF PROGRAM TO BE DEBUGGED. $I-1 .B - $T+1 @SET BREAKPOINT. $I-1 .C - $T+1 @CLEAR BREAKPOINT. $I-1 .N - $T+1 @SET A NEW PROGRAM CODE BASE. $I-1 .R - $T+1 @DUMP THE .REGISTERS, LINE NUMBER ETC. $I-1 .P - $T+1 @DUMP THE .PSECT. $I-1 .E - $T+1 @LIST THE LOADED .EXTERNALS. $I-1 .I - $T+1 @DUMP THE .IMP STACK. $I-1 .A - $T+1 @DO .'P', .'R', .'E', AND .'I'. $I-1 .D - $T+1 @DUMP AN AREA OF CORE. $I-1 .O - $T+1 @CHANGE THE OUTPUT DEVICE. $I-1 .W - $T+1 .WAIT .DEBUG. $I-1 .S - $T+1 @STOP .DEBUG. $I-1 .? - $T+1 @PRINT OPTIONS. $A INDENT=1 $P1 @IN ADDITION TO THESE COMMANDS, THERE IS AN IMPLIED COMMAND, ACTIVATED BY TYPING AN OCTAL DIGIT, THAT ENTERS THE LOCATION EXAMINATION/CHANGE PART OF .DEBUG. $P2 @A DETAILED DESCRIPTION OF EACH COMMAND FOLLOWS. $B3 $L1C T - SET TASK NUMBER $P1 @THE PROMPT .'TASK .NUMBER .(OCTAL):' IS OUTPUT AND THE (OCTAL) .ID OF THE PROGRAM TO BE DEBUGGED SHOULD BE ENTERED. @IT SHOULD BE NOTED THAT COMMANDS .'R', .'P', .'I', AND .'A' WILL ONLY EXECUTE IF A TASK NUMBER IS SET. .'B' WILL USE A BASE OF .ZERO FOR BREAKPOINTS. $B3 $L1C B - SET BREAKPOINT $P1 @THE PROMPT .'ADDR:' IS OUTPUT, THE REPLY IS THE .RELATIVE ADDRESS (WRT THE START OF THE PROGRAM) OF THE DESIRED BREAKPOINT. @DEBUG WILL REMEMBER THE CONTENTS AND PLACE A .'BR $.' IN THE LOCATION. @THIS WILL CAUSE THE PROGRAM TO SIT IN A LOOP IF IT EXECUTES THAT INSTRUCTION. $P1 @DEBUG REPLIES: $B0 .BP: N .ADDR: N2 .CONT= N3 - WHERE 'N' IS THE BREAKPOINT NUMBER (BETWEEN 0 AND 20), 'N2' IS THE PHYSICAL ADDRESS, AND 'N3' THE ORIGINAL CONTENTS. $P1 @THE MESSAGE .'BP .TABLE .FULL' IS OUTPUT IF MORE THAN 21 BREAKPOINTS ARE USED. @SEE THE COMMAND .'N' FOR SETTING BREAKPOINTS IN EXTERNAL ROUTINES. $B3 $L1C C - CLEAR BREAKPOINTS $P1 @PROMPTS .'NO?'. @THE BREAKPOINT NUMBER SHOULD BE TYPED. .'A' OR '-1' IS TYPED IF .ALL THE BREAKPOINTS ARE TO BE CLEARED. @IF THE SPECIFIC BREAKPOINT HAS NOT BEEN SET, THE MESSAGE '?' IS OUTPUT. @THE ORIGINAL CONTENTS ARE REPLACED. $B3 $L1C N - SET A NEW PROGRAM CODE BASE $P1 @PROMPTS .'NEW .PROGRAM .CODE:'. @REPLY GIVING THE NEW ADDRESS. @THIS COMMAND IS USEFUL FOR PROGRAMS USING EXTERNAL ROUTINES. @TO SET A BREAKPOINT IN AN EXTERNAL ROUTINE , THE CODE BASE IS SET TO THAT OF THE EXTERNAL ROUTINE AND THE RELATIVE ADDRESS SPECIFIED. @THIS DOES NOT EFFECT ANY PREVIOUSLY SET BREAKPOINTS. $P1 @A SECOND USE IS TO PUT A BREAKPOINT INTO A PROGRAM BEFORE IT STARTS EXECUTING. IE THE CODE IS .LOADED FROM DISC, THE BASE SET BY .'N', BREAKPOINTS SET WITH RELATIVE ADDRESSES AND FINALLY THE PROGRAM IS .STARTED USING .'OIT'. @THIS ALLOWS DEBUGGING OF A PROGRAM THAT CRASHES IMMEDIATELY AFTER STARTUP. $B3 $L1C R - PRINT REGISTERS AND OTHER PROGRAM INFORMATION. $P1 @THIS COMMAND PRINTS THE REGISTERS OF THE NOMINATED TASK. @IN ADDITION, IF THE TASK HAS HAD AN ADDRESS ERROR OR SIMILAR FAULT, THE REGISTERS AT THE TIME OF THE CRASK ARE ALSO PRINTED (ALTHOUGH .R3 IS DESTROYED BY THE SYSTEM). $P1 @THE .LINE .NUMBER OF THE PROGRAM, ITS .CODE .ADDRESS, THE .IMP .DISPLAY ADDRESS AND THE .MINIMUN .STACK ARE ALSO PRINTED. $B3 $L1C P - PRINT THE PSECT $P1 @THE .PSECT (OWN SYSTEM VARIABLES) OF THE NOMINATED TASK IS PRINTED. $V6 $V10 $B3 $L1C E - LIST THE EXTERNALS USED BY THE PROGRAM $P2 @THIS COMMAND WILL LIST THE EXTERNAL ROUTINES WHICH HAVE BEEN LOADED BY THE PROGRAM, GIVING THE NAME FOLLOWED BY THE ADDRESS IT WAS LOADED AT. $V10 $B3 $L1C I - PRINT THE IMP STACK $P1 @THE ENTIRE .IMP .STACK IS PRINTED ON THE OUTPUT DEVICE. $B0 .NOTE: @THE BASE OF THE .DISPLAY (IE THE START OF THE VARIABLES) IS NOT THE SAME AS THE START OF THE STACK. @THERE ARE .PERM VARIABLES ON THE TOP OF THE STACK. .'R' GIVES THE START OF THE .DISPLAY. $B3 $L1C A - PRINT ALL $P1 @THE COMMAND EXECUTES A PRINT PSECT .(P), PRINT REGISTERS .(R) , LIST OF EXTERNALS .(E) AND THE .IMP STACK .(I). @THIS COMMAND IS USEFUL FOR DUMPING ALL THE RELEVANT INFORMATION ABOUT A PROGRAM ONTO THE LINE PRINTER (SEE COMMAND .'O'). $B3 $L1C D - DUMP AN AREA OF CORE $P1 @PROMPTS .'FROM:' AND .'LENGTH:'. @BOTH NUMBERS SHOULD BE TYPED IN OCTAL AND THE AREA OF CORE FROM .'FROM' TO .'FROM+LENGTH' IS OUTPUT. $B1 .NOTE: 1) @ON ALL THE DUMPS .'ZEROES' IS OUPUT IF ONE OR MORE ENTIRE LINE CONTAINS ZERO. $B0 2) @AN .ISO EQUIVALENT IS PRINTED ON THE .RHS OF THE DUMP. $B3 $L1C O - CHANGE THE OUTPUT DEVICE $P1 @PROMPTS .'STREAM:'. @THE REPLY IS THE STREAM NUMBER FOR THE OUTPUT OF COMMANDS .R,P,I,A AND .D. @THE LINE PRINTER IS '2' AND THE TELETYPE '0'. $P1 @THIS COMMAND WILL CHANGE TO SPECIFY A DEVICE OR FILE BY NAME IN THE NEAR FUTURE. $B3 $L1C W - WAIT DEBUG $P1 @THIS COMMAND IS USED TO SUSPEND .DEBUG IF IT IS NECESSARY TO INPUT TO A PROGRAM ON THE SAME TELETYPE. @IT IS RESTARTED BY $B0 .'OIT:CO .DBUG'. $B3 $L1C S - STOP DEBUG $P1 @DEBUG HALTS. $B0 @NOTE: AT PRESENT BREAKPOINTS ARE NOT CLEARED. $V10 $B3 $L1C IMPLIED COMMAND TO EXAMINE/CHANGE CORE ADDRESSES $P1 @THIS COMMAND ACCEPTS THE FOLLOWING INSTRUCTIONS:- $A INDENT=2 @PLEASE NOTE THAT ALL NUMBERS ARE TYPED IN OCTAL. $B0 .N $T4 : PRINTS CONTENTS OF .N. $B0 .N+C $T4 : PRINTS CONTENTS OF .(N+ PROGRAM BASE). $B0 .N+I $T4 : PRINTS CONTENTS OF .(N+ .IMP .STK BASE). $B0 .N+RM $T4 : PRINTS CONTENTS OF .(N+REGISTER .M) $B1 .N(+ OPTIONS)=M $T4 : PUTS .M INTO .N $A INDENT=1 $B2 EG: .DEBUG:100 (CR) - WILL PRINT CONTENTS OF LOCN 100. $B0 $C+4 .DEBUG:100+R5 (CR) - WILL PRINT CONTENTS OF 100 ON FROM REG. 5. $B0 $C+4 .DEBUG:100+R5=200 (CR) - DIITO, EXCEPT PLANTS 200. $E