/7 CASSETTE ODT (CODT) / DEC-8E-OODTA-A / COPYRIGHT 1973 / DIGITAL EQUIPMENT CORPORATION / MAYNARD, MASS. 01754 START=1000 ZPAT=4 FLD=20 /FIELD OF CODT SKON=6000 /SKIP IF INTERRUPTS ON [8/E] THEN TURN OFF /THIS IS A 4-PAGE, /PAGEWISE-RELOCATABLE, /OCTAL DEBUGGING SYSTEM CALLED / CODT /PRONOUNCED "COH-DEE-TEE" FIELD FLD%10 *START L277, "? JMP READ3 READ, TAD I (TRAD SNA JMP READ5 /NO BREAKPOINT IN PROGRESS DCA TEM4 /GET THE TRAP ADDRESS. TAD I (KEEP JMS I (SETD2F DCA I TEM4 /RESTORE CONTENT. READ3, CDF FLD READ4, JMS I (CRLF READ5, DCA WORD /CLEAR THE INPUT TAD (-5 DCA TOTE /SET THE LETTER COUNT. REA, KSF JMP .-1 /WAIT FOR COMMAND. KRB AND (177 TAD L200 JMS TYPN TAD (TABL1-1 /C0MPUTE ADDRESS OF COMMAND. DCA SPNTR GETC, ISZ SPNTR TAD I SPNTR /SEARCH FOR LEGAL CHARACTER. ISZ SPNTR FM270, SPA /TEST FOR END OF LIST JMP SEX /NOT SATISFIED. CIA CLL /COMPARE THE CHARACTER. TAD SCHAR SZA CLA /FOUND JMP GETC /NO, CONTINUE TAD I SPNTR /GET ADDRESS OF ROUTINE DCA SPNTR JMP I SPNTR /GO PROCESS. (WITH L ON) EXAM, TAD WORD /LOAD ADDRESS. SZA /IF ZERO, USE LAST. DCA CAD EX2, JMS I (SETD2F TAD I CAD /GET CONTENTS OF CURRENT LOCATION CDF FLD JMS I (PNUM /PRINT THESE CONTENTS OPN, DCA SHUT /SIGNALS OPEN REG. JMP READ5 /PROCESS OCTAL DIGITS. SEX, CLA TAD SCHAR /GET CHAR JUST TYPED TAD FM270 /(-8) CLL TAD (10 SNL JMP NO DCA TEM9 /SAVE TAD WORD /ASSEMBLE AN ADDRESS. RAL CLL RTL TAD TEM9 DCA WORD ISZ TOTE /ALLOW THIS MANY OCTAL DIGITS? JMP REA /YES. LESS THAN 5 /TYPE ERROR INDICATOR (?) NO, STA /5 DIGITS TYPED OR BAD CHARACTER L200, AND L277 /TYPE QUESTION MARK JMS TYPN JMP READ4 /TO OPEN LOCATION ZERO, /OPEN 7777 AND TYPE LINEFEED. /THE ADDRESS OF THE LAST REGISTER /EXAMINED REMAINS THE SAME AND MAY BE OPENED BY "/" /ROUTINE TO HANDLE REG. MODIFICATION AND INCREMENTAL EXAMINE SPNTR, TEM9, CRL, 0 JMS I (SETD2F TAD TOTE TAD L5 /WAS A NUMBER TYPED IN? SNA CLA JMP I CRL /NO MOD. INFO AVAILABLE TAD WORD /YES, A NUMBER CAME IN; USE IT TO MODIFY LOC ISZ SHUT /TEST FOR OPEN AND THEN CLOSE IT. DCA I CAD /MODIFY REGISTER CLA /FIX BUG IN OLD ODT JMP I CRL /RETURN WITH DF=F CRL1, JMS CRL /CARRIAGE RETURN TO CLOSE. JMP READ3 CRL2, TAD L215 /USER TYPED LF JMS TYPN /SO NOW WE DO CR JMS CRL /CLOSE PREVIOUS LOCATION IF OPEN /WARNING: DF=F JMS TYPN /TIME FOR CAR TO RET. ??? ISZ CAD /LINE FEED - EXAMINE NEXT L215, 215 JMP I (UPAR3 /GO PRINT ADDRESS OPIN, JMS CRL /CLOSE FIRST. TAD I CAD /OPEN LOCATION INDIRECTLY DCA CAD UPAR2, CDF FLD JMS I (CRLF JMP I (UPAR3 PUNC, JMS CRL /SEMI-COLON CDF FLD ISZ CAD /GOTO NEXT LOC L5, 5 JMP OPN /TYPE A CAR. RET. AND LINE FEED SCHAR, 0 TEM4, WORD, 0 /OCTAL NUMBER USER TYPED IN CAD, 0 /CURRENT ADDRESS. TOTE, 0 SHUT, 7777 /-1 MEANS REGISTER CLOSED /MEMORY REFERENCE OPENER. UPAR1, JMS CRL /CLOSE PREVIOUS LOCATION IF OPEN TAD I CAD AND (177 DCA TEM9 /SAVE LOWER BITS. TAD I CAD AND L200 CIA /0 OR 7600 AND CAD /ISOLATE PAGE OF ADDRESS TAD TEM9 DCA CAD JMP UPAR2 /TYPE A CHARACTER TYPN, 0 /MUST PRESERVE THE LINK TLS TSF JMP .-1 DCA SCHAR /HERB'S FUDGE JMP I TYPN PAGE *START+200 SP177, 177 /FIRST IN THIS PAGE. /THE TRAP IS SPRUNG /UPON ENTRY HERE, /'F' AND 'TF' ARE ALREADY SET TO FIELD OF TRAP /'TRAD' IS SET TO ADRESS OF TRAP /AND 'KEEP' CONTAINS THE ORIGINAL CONTENTS OF THIS TRAPPED LOCATION /THE DATA FIELD=F IN THIS ROUTINE BURP, DCA SAC /SAVE C(AC) RAL DCA LINK /SAVE C(L) RDF DCA D CDF FLD JMS I (SETD2F TAD KEEP DCA I TRAD /REPLACE INSTRUCTION CLA IAC TAD TRAD DCA GAME /SAVE CONTINUE ADDRESS STL RTR /2000 TAD KEEP CLA TAD KEEP SZL JMP LIP4 /IOT'S AND OPR'S JUST EXECUTE AND SP200 CIA /FORM 0 OR 7600 (AS PER Z OR I) AND TRAD /GET PAGE OF TRAPPED LOCATION DCA FROG /SAVE INITIAL ADDRESS OF TRAPPED PAGE TAD KEEP SP200, AND SP177 /ISOLATE PAGE ADDRESS TAD FROG DCA FROG /SAVE ABSOLUTE ADDRESS OF MEMORY REFERENCE TAD KEEP AND (400 SNA CLA /INDIRECT REFERENCES HERE. JMP LIP /DIRECT REFERENCE /ASSUME NOT ON JMP OR JMS IND OFF PAGE TAD I FROG DCA FROG LIP, STL CLA RAR /4000 TAD KEEP AND L7000 /ISOLATE OP CODE + 4000 SZA JMP LIP3 TAD GAME DCA I FROG ISZ FROG TAD (1000 /JMS'ES NEED SPECIAL ATTENTION LIP3, TAD (JMS I FROG /FORM INSTRUCTION BACK LIP4, DCA THE /STORE INST TO EXEC BEFORE RETURNING TO PROG CDF FLD ISZ EMP /TEST N-CONTINUE JMP XCONT /IGNORE THIS BREAK SKON /DETERMINE IF INTERRUPTS WERE ON CLA IAC /FORM 'IOF' TAD (ION /FORM 'ION' DCA RESION JMP I (PRIN /GO PRINT L;AC, ETC. /START AT A LOCATION JUMP, TAD I (WORD DCA GAME TAD JPIGAM /(JMP I GAME) DCA THE DCA SAC /CLEAR THE AC. TAD F DCA D /SET D=F JMP CON CONTIN, TAD TF DCA F TAD I (WORD CON, CMA DCA EMP /(PUNN)-EMP COUNTER. JMS I (CRLF TTYFLG, TCF /RESTORE TTY FLAG TO FORMER STATE JMS I (SETD2F TAD I TRAD /SAVE TRAP CONTENTS. CDF FLD DCA KEEP RESION, IOF XCONT, TAD TRAD SNA CLA /WAS A BREAKPOINT IN PROGRESS? JMP THERE /NO JMS I (SETD2F /YES, GO MAKE IT TAD (JMP Z ZPAT /FORM TRAP INSTRUCTION DCA I TRAD /INSERT TRAP INSTRUCTION JMS I (SETZ THERE, TAD D /MUST BE ON THIS PAGE TAD (CDF DCA NEWDF /GET DATA FIELD TO START-UP PROG WITH TAD F TAD (CIF DCA NEWIF /GET INSTRUCTION FIELD OF PROGRAM TAD LINK RAR CLL /RESTORE LINK. TAD SAC /AND C(AC) TEM5, NEWDF, HLT TEM6, NEWIF, HLT THE, HLT /ODT EXECUTION OF TRAPPED INST. AFTER PROCEED JPIGAM, JMP I GAME ISZ GAME /IMITATE SKIP CONDITION. L7000, NOP /PERFECTIONIST JMP I GAME /EXEC INSTR DOESN'T CONSIDER IF USING AUTO-INDEX REGISTER /VARIABLES MAY BE SCANNED VIA "A". SAC, 0 /AC LINK, 0 /LINK BIT TRAD, 0 /ADDRESS OF TRAP. KEEP, 0 /CONTENT OF TRAP GAME, 0 /ADDRESS FOR CONTINUE FROG, START-1 /MEMORY REFERENCE. EMP, 0 /COUNTS # OF TIMES THRU A CONTINUE LOOP F, FLD /USER FIELD^10 D, FLD /DATA FIELD^10 TF, FLD /FIELD OF TRAP PAGE *START+400 /ROUTINE TO PRINT OCTAL CONTENTS OF AC PNUM, 0 /DATA FIELD COULD BE F HERE DCA TEM2 TAD M4 DCA TEM3 TAD TEM2 RAL PN2, RAL RTL DCA TEM2 TAD TEM2 AND (7 /ONLY 7-DIGITS GUARANTEED. TAD TP260 /IN CASE BIT 8 CAME THROUGH. JMS I (TYPN TAD TEM2 ISZ TEM3 JMP PN2 L7600, 7600 TAD TP240 JMS I (TYPN JMP I PNUM /SEARCH VARIABLES. MASK, 7777 LIMLO, 0001 LIMHI, START TEM3, /MUST BE ENTERED WITH DF=FLD SETD2F, 0 /SET DATA FIELD TO FIELD OF USER EXEC (F) DCA TEM7 /PRESERVE AC AROUND CALL TAD I (F TAD (CDF DCA .+1 TEM2, HLT TAD TEM7 JMP I SETD2F /RETURN /WORD SEARCH ROUTINE WSER, JMS CRLF TAD LIMLO DCA CKT WSER1, JMS SETD2F TAD I CKT CDF FLD AND MASK CIA TAD I (WORD SZA CLA JMP WSER2 TAD CKT JMS PNUM TAD TP257 /(SLASH) JMS I (TYPN JMS SETD2F TAD I CKT CDF FLD JMS PNUM JMS CRLF WSER2, TAD CKT ISZ CKT CIA TAD LIMHI TP240, SZA CLA JMP WSER1 JMP I (READ4 /ROUTINES TO TYPE MASK AND LIMITS OPEND, IAC /DF-IF OPENF, TAD (F-LINK OPENL, IAC /LINK-SAC ACX, TAD (SAC-MASK MASKER, TAD (MASK DCA I (WORD /WORD RIF DCA I (F /SPECIAL EXAMINES FORCE F TO FIELD OF CODT TAD TP257 JMS I (TYPN JMP I PEXAM /EXAM TEM7, CRLF, 0 TAD CR /TYPE CARRIAGE RETURN JMS I (TYPN TAD LF /TYPE LINE FEED JMS I (TYPN TP260, STA CML /MINUS ONE DCA I (SHUT /SIGNALS CLOSED REGISTER JMP I CRLF /COMMAND LIST TABL1, LF, 212;CRL2 /LF CR, 215;CRL1 /CR TP257, "/;PEXAM,EXAM /SLASH "B;TRAP /BREAK "G;JUMP /GO ";;PUNC /SEMICOLON "C;CONTIN /CONTINUE "W;WSER /WORD SEARCH "^;UPAR1 /OPENS INDIRECT (I.E. MEMORY REFERENCE) "M;MASKER /MASK+UPPER+LOWER "A;ACX /AC "_;OPIN /OPEN INDIRECTLY 203;CTRLC /^C RETURN TO MONITOR VIA 7600 "F;OPENF "D;OPEND /DATA FIELD "L;OPENL /LINK M4, -4 /LOC AFTER TABLE MUST BE NEGATIVE CTRLC, CIF CDF 0 JMP I L7600 CKT, 0 PAGE *START+600 PRIN, L260, 260 L273, 273 L257, 257 JMS I (SETD2F /WASTE SOME TIME CDF FLD TSF /WHAT IS STATE OF USER'S TTY FLAG? TAD (TCF DCA I (TTYFLG /PREPARE TO RESTORE IT LATER ISZ ZERO JMP PRIN TAD I (TRAD JMS I (PNUM /(PRINT TRAP ADDRESS) TAD LPAR /LEFT PAREN. JMS I (TYPN TAD I (LINK TAD L260 JMS I (TYPN /PRINT LINK; TAD L273 JMS I (TYPN TAD I (SAC JMS I (PNUM JMP I (READ /RESORE LOCATION /SET A BREAK POINT TRAP, TAD I (WORD /GET ADDRESS OF TRAP DCA I (TRAD /SET IT TAD I (F DCA I (TF /SAVE FIELD OF TRAP JMP I (READ3 /IF NO TRAP IS SET, /LOC 'TRAD' WILL CONTAIN A ZERO ZERO, 0 UPAR3, CDF FLD TAD I (F LPAR, SNA JMP FIELD0 CLL RTR RAR TAD L260 JMS I (TYPN FIELD0, TAD I (CAD JMS I (PNUM /PRINT ADDRESS OF NEXT LOCATION TAD L257 JMS I (TYPN /PRINT A SLASH JMP I (EX2 /GO PRINT CONTENTS SETZ, 0 TAD (CIF FLD DCA I (ZPAT TAD (JMP I ZPAT+2 DCA I (ZPAT+1 TAD (BURP DCA I (ZPAT+2 JMP I SETZ *START /STARTING ADDRESS /CODT NORMALLY RUNS WITH DF=FLD BUT SOME ROUTINES /RUN WITH DF=F /THE STARTING LOCATION IS 'READ3', BUT YOU CAN START /AT LOCATION 'READ' IF YOU WANT TO RECOVER FROM A 'BOMB' /READ: READS A COMMAND LINE / RESTORES BP LOC IN CASE CODT WAS MANUALLY STARTED / IF FIRST CHAR IS IN TABLE, BRANCH TO APPROPRIATE ROUTINE / OTHERWISE ASSUMES DIGIT, GOES TO 'SEX' /SEX: BALKS IF NOT NUMBER / PUTS 4 DIGIT NUMBER IN 'WORD' / EVENTUALLY FINDS A LETTER AND BRANCHES THRU DISPATCH TABLE /'/' SENDS YOU TO 'EXAM' /EXAM: PUTS C(WORD) IN 'CAD' **SLOPPY NOTATION** / PRINTS C(CAD) IN FIELD F / SIGNALS OPEN REGISTER / GOES TO 'READ5' /CRL: IF NUMBER PRECEEDED, USE IT TO MODIFY PREVIOUS / LOCATION IF ONE WAS OPEN. / RETURNS WITH DF=F /CR SENDS TO CRL1 /CRL1: CALLS CRL / THEN GOES TO 'READ' /LF SENDS TO CRL2 /CRL2: TYPE CR / CALL CRL / BUMP 'CAD' / PRINT NEW CAD THEN / / THEN PRINT C(CAD) IN FIELD F / OPEN REGISTER /_ SENDS TO 'OPIN' /OPIN: CALLS CRL TO CLOSE / SETS CAD TO C(CAD) FROM FIELD F / PRINTS CR/LF / THEN GOES TO 'UPAR3' /^ SENDS TO UPAR1 /UPAR1: CALLS CRL TO CLOSE / OPENS LOCATION (IN FIELD F) REFERENCED BY MRI /B SENDS TO 'TRAP' /TRAP: STORES WORD IN 'TRAD' / SAVES F IN TF / GOES TO 'READ5' /BURP: COMES HERE UPON BEING TRAPPED / SAVE AC,L IN SAC, LINK / SAVE USER'S DF IN D / SET PROG DF TO F / 'GAME' IS SET UP AS CONTINUE ADDRESS (TRAD+1) / EXECUTE THE INSTRUCTION (TRICKY) / NOT ALL INSTRUCTIONS CAN BE SO EXECUTED / CIF'S, INST BETWEEN CIF AND JMP / INDIRECT REFERENCES TO AUTO-INDEX REGISTERS (NO ROOM) / 2-WORD INSTRUCTIONS / ETC. / INCREMENT CONTINUE COUNTER / IF NOT 0, GOTO 'XCONT' / FORM 'ION' OR 'IOF' DEPENDING ON WHETEHER ION OR IOF / THEN IOF / PRINT TRAD ( AC / GOTO 'READ' WHICH RESTORES TRAP LOCATION /G SENDS TO 'JUMP' /JUMP: MOVE 'WORD' TO 'GAME' / STORE 'JMP I GAME' IN 'THE' / CLEAR AC / SET D=F / SET CONTINUE COUNTER TO -1 / DO CR/LF / CLEAR TTY FLAG / GET CONTENTS OF TRAP LOCATION, STORE IN 'KEEP' / RESTORE INTERRUPTS IF NECESSARY /XCONT: IF BREAKPOINT IN PROGRESS, REPLACE LOC BY 'JMP Z ZPAT' / CHANGE DF AND IF TO D,F RESP. / SET LOCATION 4,5,6 OF BREAKPOINT FIELD / RESTORE L,AC / EXECUTE THE INSTRUCTION AT LOCATION 'THE' / CONTINUE $