/ P?S/8 OCTAL DEBUGGING TECHNIQUE (ODT) / LAST EDIT: 05-JAN-1986 10:00:00 CJL / INVISIBLE ODT FOR THE NEW IMPROVED P?S/8 MONITOR SYSTEM. / CAN BE ASSEMBLED WITH '/J' SWITCH SET. / RESTRICTIONS OVER IDEAL INVISIBILITY: / A) FIELD 0: 07600-07777 / B) FIELD X (X>0) CONTAINING A BREAKPOINT: X7771-X7777 / N. B. X7600-X7770 ARE NOT USED! / C) FIELD Y (Y>=0) CONTAINING A BREAKPOINT: Y0004 / N. B. Y0004 ALWAYS CONTAINS 7771 / ODT WILL INHIBIT REFERENCES TO ANY NON-EXISTANT, NON-CONTIGUOUS, OR / RESTRICTED MEMORY. (EXAMPLE: 8K + FIELD 7 ROM FOR TD-8/E (MR-8/E-C) / CANNOT ADDRESS FIELD 2 AND ABOVE SO ROM'S CONTENTS ARE NOT AVAILABLE / FOR DIRECT EXAMINATION THROUGH ODT.) / BREAKPOINT RESTRICTIONS: / A) BREAKPOINT USAGE WILL DESTROY THE OUTPUT FILE COUNT WORD AT 07607 / (SOUTFLS) AND THE SWITCH SETTINGS /M-/X AT 07605 (SWMX) AND /Y-/9 / AT 07606 (SWY9). THE SWITCH SETTINGS /A-/L AT 07604 (SWAL) WILL BE / PRESERVED. / B) ALL FILE ARGUMENTS AT 07757-07777 (STARTING AT SFILES) WILL BE / DESTROYED. THE EQUALS PARAMETER AT 07756 (SPARM) WILL BE PRESERVED. / THE SYSTEM DATE WORD AT 07610 (SDATE) AND SYSTEM CORE SIZE WORD AT / 07611 (SCRSIZE) WILL ALSO BE PRESERVED. / C) THE SYSTEM LOADER AT 07632-07637 (SLOAD-SYSTART) CANNOT BE USED / FOR ANY NORMAL PURPOSE SUCH AS ATTEMPTING TO DETERMINE THE LOAD / BLOCK BY LOOKING AT THE BLOCK WORD AT 07635 (SBLOCK). / USE OF BREAKPOINTS DOES NOT CHANGE ANY OTHER LOCATIONS WITHIN THE / RANGE OF 07600-07777 AS THESE LOCATIONS ARE THE ACTUAL SYSTEM HANDLER / AT 07600-07603 (STARTING AT SBOOT), 07612-07631, AND 07640-07755 / (STARTING AT SYSIO). SINCE ALL ILLEGAL EXTENDED MEMORY REFERENCES ARE / INHIBITED, THE REST OF ANY EXTENDED HANDLER CODE CANNOT BE CHANGED / (NORMALLY) BY ODT. / ANY FIELD NOT CONTAINING BREAKPOINTS WILL HAVE ITS LOCATION 0004 / PRESERVED. ANY FIELD CONTAINING BREAKPOINTS WILL HAVE ITS LOCATION / 0004 CHANGED TO THE CONSTANT 7771. / ALL SYSTEM PARAMETERS ARE AVAILABLE UNDER ODT AS LONG AS PROGRAM / STARTUP IS BY THE "S" COMMAND ONLY. THIS IS A SUPERIOR METHOD TO THE / KEYBOARD MONITOR "START" COMMAND AS THIS DOES NOT RESTRICT THE EQUALS / PARAMETER AT 07756 (SPARM), OR THE SWITCHES /1-/7 AT 07606 (SWY9). / PRESSING <^A>, <^B>, <^C>, OR SAVES FIELD 0 (00000-07577) AND / RELOADS THE KEYBOARD MONITOR. / DEFINITIONS FROM P?S/8. BINADR= 0020 /DEFAULT BINARY AREA SBLOCK= 7635 /SYSTEM LOADER BLOCK ARGUMENT SBOOT= 7600 /SYSTEM BOOTSTRAPS HERE SBTFUN= 7602 /SYSTEM BOOTSTRAP FUNCTION SCORE= 7633 /SYSTEM LOADER CORE ARGUMENT SCRSIZE=7611 /SOFTWARE CORE SIZE SDATE= 7610 /SYSTEM LOW-ORDER DATE WORD SFILES= 7757 /FILE ARGUMENTS START HERE SFUN= 7634 /SYSTEM LOADER FUNCTION WORD SLOAD= 7632 /SYSTEM LOADER SYSIO= 7640 /SYSTEM I/O ENTRY SYSTART=7637 /SYSTEM LOADER STARTS SYSTEMS HERE SWMX= 7605 /SWITCHES /M-/X TTY= 0003 /DEVICE CODE OF CONSOLE TTY: WRITE= 4000 /SYSIO WRITE BIT / OTHER DEFINITIONS. INCON= 0031 /EQUATED FROM CONSOLE! JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL2000= CLA CLL CML RTR /LOAD AC WITH 2000 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 NL7777= CLA CMA /LOAD AC WITH 7777 NUMBRKS=0020 /20 BREAKPOINTS IN TABLE OUTCON= 0033 /EQUATED FROM CONSOLE! RELCORE=4000 /BEGINNING OF NON-VIRTUAL CORE / DEPENDENT DEFINITIONS. JMSSYSI=SYSIO&177+JMSC /CALL TO SYSIO ON ITS PAGE KEYCODE=TTY^10+6000 /SKELETON KEYBOARD CODE PRTCODE=TTY+1^10+6000 /SKELETON TELEPRINTER CODE KCCIOT= KEYCODE+2 /CLEAR KEYBOARD FLAG, AC, SET READER RUN KRSIOT= KEYCODE+4 /OR CHARACTER INTO AC, DON'T CLEAR KEYBOARD FLAG KSFIOT= KEYCODE+1 /SKIP ON KEYBOARD FLAG TCFIOT= PRTCODE+2 /CLEAR OUTPUT FLAG TLSIOT= PRTCODE+6 /LOAD OUTPUT BUFFER, CLEAR FLAG TSFIOT= PRTCODE+1 /SKIP ON OUTPUT FLAG FIELD 1 /GENASYS WANTS IT HERE NOPUNCH /FOOL THE ASSEMBLER FIELD 0 /WILL EXECUTE HERE ENPUNCH /UN-FOOL THE ASSEMBLER PAGE 0000 /START AT THE BEGINNING CNT, .-. /THIS IS USED BY SIMULATION ROUTINES, ETC. TEMP, HLT /STOP THE MACHINE TEMP2, JMP I 0 /IN CASE OF INTERRUPTS ADDRESS,JMP I INCHAR /**** INITIALIZED FOR BURP ROUTINE BRKPTR, BRKTBL /BREAKPOINT POINTER INCHAR, BURP /**** INITIALIZED FOR BURP ROUTINE CHECK, .-. /WORD SEARCH ADDRESS - HIGH CHECK1, SBOOT-1 /WORD SEARCH ADDRESS - LOW /INITIALIZED TO MAKE "P" COMMAND HARMLESS *10 /AUTO-INDEX AREA XR1, .-. /AUTO-INDEX NUMBER 1 XR2, -20 /AUTO-INDEX NUMBER 2; INITIALIZED FOR TTY: TIMEOUT ROUTINE BRKCNT, -NUMBRKS /BREAKPOINT RESTORE COUNTER SHUT, 7777 /LOCATION OPEN/CLOSED SWITCH SIMINST,NOP /SIMULATED INSTRUCTION STORFLG,0 /DIRTY BUFFER SWITCH TOTAL, .-. /DIGIT COUNTER TTYFLG, 7777 /TTY: FLAG CLEAR SWITCH *20 /GET PAST AUTO-INDEX AREA /------------------- THE FOLLOWING MUST BE IN ORDER. --------------------- / ! AC, .-. /SAVED AC ! LINK, .-. /SAVED LINK ! MQ, .-. /SAVED MQ ! DFIELD, 0 /DATA FIELD ! FFIELD, 0 /SEARCH FIELD ! N, 0 /BREAKPOINT NUMBER ! MASK, 7777 /WORD SEARCH MASK ! HOME, 0000 /HOME POSITION OF SEARCH (LOWER LIMIT) ! UPPER, SBOOT-1 /UPPER LIMIT OF SEARCH ! OTCONTR,1 /MEMORY SEARCH, DUMP OUTPUT CONTROL WORD ! VIEWCON,20 /MEMORY DUMP VIEW CONTROL WORD ! / ! /------------------------------------------------------------------------- / THE FOLLOWING IS HERE FOR THE BENEFIT OF CHEATING ON CORE SIZE! HIFELD, .-. /FIRST ILLEGAL FIELD (COMPLEMENTED) CASE, MSG /CURRENT CASE MODE; INITIALIZED FOR BAD TRAP ROUTINE CONTSW, 0 /CONTINUE ALLOWED SWITCH CURADR, 0 /CURRENT ADDRESS - HIGH CURAD1, 0200 /CURRENT ADDRESS - LOW DMPADR, .-. /"\" ADDRESS - HIGH DMPAD1, .-. /"\" ADDRESS - LOW ECHOSW, 0 /ECHO SWITCH NUMB, .-. /NUMERIC ARGUMENT - HIGH NUMB1, .-. /NUMERIC ARGUMENT - LOW PRVADR, 0 /PREVIOUS ADDRESS - HIGH PRVAD1, 0200 /PREVIOUS ADDRESS - LOW P7TEMP, .-. /TEMPORARY SIMADR, .-. /SIMULATING ADDRESS - HIGH SIMAD1, .-. /SIMULATING ADDRESS - LOW TRPADR, 7777 /TRAP ADDRESS - HIGH; THIS VALUE PREVENTS TRPAD1, 0 /TRAP ADDRESS - LOW; FALSE CONTINUES! WORD, .-. /SEARCH WORD / THE FOLLOWING LITERALS ALLOW FOR INSTRUCTIONS ON THE END OF PAGE ZERO. BAGAIN= [DCA NUMB] /0177 FOO= [DCA SHUT] /0176 FOO= [NL7777] /0175 BEGIN= [JMS I 173] /0174 FOO= [CRLF] /0173 P7CH, .-. /SEVEN-BIT OUTPUT ROUTINE DCA P7TEMP /SAVE PASSED VALUE P7AGN, JMS I [CHKUP] /CHECK FOR <^C>, ETC. TAD ECHOSW /GET ECHO SWITCH SPA CLA /SKIP IF ECHO ON JMP P7OFF /JUMP IF NOT TAD P7TEMP /GET THE PASSED VALUE JMS P7OUT /TRY TO OUTPUT IT JMP P7AGN /CHECK INPUT WHILE WAITING P7OFF, JMS I [CHKUP] /CHECK FOR <^C>, ETC. JMP I P7CH /RETURN P7OUT, .-. /SEVEN-BIT I/O ROUTINE P7TSF, TSFIOT /**** CONSOLE **** CIF MCS+10 P7JMP, JMP I P7OUT /**** CONSOLE **** JMS OUTCON P7TLS, TLSIOT /**** CONSOLE **** JMP I P7OUT CLA /CLEAN UP ISZ P7OUT /BUMP RETURN ADDRESS JMP I P7OUT /RETURN PAGE / THE FOLLOWING FOUR INSTRUCTIONS ARE ACTUALLY THERE IN LITERAL FORM! /BEGIN, JMS I [CRLF] /START ON A NEW LINE / NL7777 /CLOSE THE / DCA SHUT /LOCATION /BAGAIN,DCA NUMB /CLEAR OUT DCA NUMB1 /THE ARGUMENT TAD [-6] /RESET THE DCA TOTAL /DIGIT COUNT BEGNIN, JMS I [CHKUP] /CHECK FOR <^P>, ETC. TAD INCHAR /GET LATEST CHARACTER SNA /ANYTHING ELSE THERE? JMP BEGNIN /NO, GO GET SOMETHING TRYAGAN,DCA P7CH /YES, SAVE IT TAD [TABL1-1] /INITIALIZE THE DCA XR1 /POINTER TO COMMANDS CMDLUP, TAD I XR1 /GET A CHARACTER SPA /END OF LIST? JMP NUMRAL /YES, TRY NUMBERS INSTEAD STL CIA /NO, INVERT FOR COMPARISON TAD P7CH /SAME AS DESIRED? SZA CLA /SKIP IF SO JMP CMDLUP /JUMP IF NOT TAD XR1 /GET THE POINTER TAD (TABL2-TABL1) /ADJUST TO OTHER TABLE DCA COMMON /STASH THE POINTER TAD I COMMON /GET THE ADDRESS DCA COMMON /STASH IT TAD NUMB /GET FIELD ARGUMENT TAD HIFELD /COMPARE TO LARGEST ALLOWED SZL CLA /SKIP IF NOT TOO LARGE JMP I (NO1) /BARF IF SO TAD P7CH /GET THE CHARACTER JMS P7CH /PRINT IT JMP I COMMON /GOTO CHOSEN ROUTINE WITH CLEAR LINK EXAMIN, JMS I [CHKDIG] /ANY ARGUMENT? JMP EXCURR /NO, USE CURRENT ADDRESS TAD NUMB /YES, GET HIGH-ORDER DCA PRVADR /SAVE AS LATEST PREVIOUS TAD NUMB1 /GET LOW-ORDER DCA PRVAD1 /SAVE AS LATEST PREVIOUS LOW-ORDER EXAMAC, TAD NUMB /\ DCA CURADR / \MOVE IN THE TAD NUMB1 / /NEW ADDRESS DCA CURAD1 // EXCURR, JMS I [LOAD] /GET THE LATEST CURADR /LOCATION'S CONTENTS JMS I [PRTOCT] /GO PRINT IT JMP BAGAIN-1 /GO BACK FOR MORE NUMRAL, TAD P7CH /AC NOW CONTAINS CHARACTER-70 CLL /CLEAR LINK FOR TEST TAD ["8-"0] /ADD ON RANGE SNL /SKIP IF OCTAL JMP I (TRYLOWR) /JUMP OTHERWISE DCA COMMON /SAVE THE STRIPPED DIGIT TAD P7CH /GET THE DIGIT JMS P7CH /PRINT IT NL7775 /SETUP THE DCA I [CRLF] /SHIFT COUNT DBLROT, TAD NUMB1 /GET LOW ORDER CLL RAL /SHIFT IT DCA NUMB1 /SAVE IT BACK RTL;RAL /MOVE UP THE CARRY TAD NUMB /ADD ON HIGH VALUE RAL /MOVE OVER EVERYBODY DCA NUMB /SAVE IT BACK ISZ I [CRLF] /DONE ENOUGH? JMP DBLROT /NO, GO DO IT AGAIN TAD NUMB1 /GET LOW ORDER TAD COMMON /ADD ON LATEST DIGIT DCA NUMB1 /STORE IT BACK ISZ TOTAL /TOO MANY DIGITS? JMP BEGNIN /NO, GET MORE INPUT JMP I [NO0] /YES, COMPLAIN RETURN, JMS COMMON /DO COMMON FUNCTION JMP BEGIN /AND START AGAIN LNFEED, TAD [15] /GET A JMS P7CH /PRINT IT JMS COMMON /DO COMMON STUFF JMS P7CH /PRINT A AFTER ISZ CURAD1 /BUMP TO NEXT LOCATION NOP /JUST IN CASE UPARW3, JMS I [PRTDBL] /PRINT THE CURADR /FULL ADDRESS TAD ["/&77] /GET A "/" JMS I [P6CH] /PRINT IT JMP EXCURR /FINISH IN EXAMINE ROUTINE UPARW1, JMS COMMON /DO COMMON STUFF TAD CURADR /\ DCA PRVADR / \SAVE THE CURRENT ADDRESS TAD CURAD1 / /AS THE NEW PREVIOUS ADDRESS DCA PRVAD1 // JMS I [EFFADR] /GET THE OPERAND JMP UPARW2 /DISPLAY ITS VALUE INDRCT, JMS COMMON /DO COMMON STUFF TAD CURADR /\ DCA PRVADR / \SAVE THE CURRENT ADDRESS TAD CURAD1 / /AS THE NEW PREVIOUS ADDRESS DCA PRVAD1 // JMS I [LOAD] /GET THE CURADR /CONTENTS DCA CURAD1 /USE AS POINTER ADDRESS TAD FFIELD /GET THE SEARCH FIELD EXAMPRV,DCA CURADR /USE AS DATA FIELD UPARW2, JMS I [CRLF] /DO A , JMP UPARW3 /CONTINUE THERE SEMICOL,JMS COMMON /DO COMMON STUFF ISZ CURAD1 /BUMP TO NEXT ADDRESS NOP /JUST IN CASE JMP BAGAIN /GO BACK FOR MORE PREV, TAD PRVAD1 /GET PREVIOUS ADDRESS DCA CURAD1 /MAKE IT CURRENT TAD PRVADR /GET PREVIOUS FIELD JMP EXAMPRV /CONTINUE THERE COMMON, .-. /COMMON CLOSE ROUTINE TAD SHUT /LOCATION OPEN? SNA CLA /SKIP IF NOT JMS I [CHKDIG] /ANY DIGITS? JMP I COMMON /NO, FORGET IT TAD NUMB1 /YES, GET THE VALUE JMS I [STORE] /STORE IT CURADR /THROUGH HERE JMP I COMMON /RETURN PAGE ADDIT, NL7777 /INDICATE ADD SBTRCT, DCA TEMP /OR SUBTRACT JMS I [CHKDIG] /ANY ARGUMENT? ISZ NUMB1 /NO, ASSUME ONE TAD NUMB1 /GET THE ARGUMENT ISZ TEMP /POSITIVE? CIA /NO, MAKE NEGATIVE TAD CURAD1 /ADD ON TO CURRENT VALUE DCA CURAD1 /UPDATE IT JMS I [CRLF] /DO A , JMP I (UPARW3) /CONTINUE THERE INCN, ISZ N /BUMP TO NEXT BREAKPOINT NUMBER TAD N /GET THE NEW VALUE AND [NUMBRKS-1] /JUST VALID BITS DCA N /STORE BACK JMP BEGIN /CLOSE PREVIOUS AND RESTART COMMA, TAD NUMB1 /GET THE LOW-ORDER ARGUMENT AND [NUMBRKS-1] /JUST GOOD BITS DCA N /SAVE AS NEW BREAKPOINT NUMBER JMP BAGAIN /START OVER KAY, JMS I [FNDSLT] /SETUP BREAKPOINT POINTER ISZ BRKPTR /BUMP TO ADDRESS ISZ BRKPTR /BUMP TO INSTRUCTION ISZ BRKPTR /BUMP TO COUNT JMS I [CHKDIG] /CHECK IF ANY ARGUMENT JMP KOPEN /NONE, OPEN THE LOCATION ITSELF JMS I [OVCHK] /SETUP THE ARGUMENT AS THE COUNT (AS IN "C") JMP BEGIN /KEEP GOING KOPEN, TAD BRKPTR /POINT TO THE COUNT JMP KX /CONTINUE THERE VX, IAC /A(VIEWCON)-A(OTCONTROL) OX, IAC /A(OTCONTROL)-A(UPPER) UX, IAC /A(UPPER)-A(HOME) HX, IAC /A(HOME)-A(MASK) MX, IAC /A(MASK)-A(N) NX, IAC /A(N)-A(FFIELD) FX, IAC /A(FFIELD)-A(DFIELD) DX, IAC /A(DFIELD)-A(MQ) QUEUE, IAC /A(MQ)-A(LINK) LINKX, IAC /A(LINK)-A(AC) ACX, TAD [AC] /ADD A(AC) KX, DCA NUMB1 /SAVE AS ARGUMENT JMS P5BLNKS /PRINT FIVE CHARACTERS NL7777 /SETUP WX, DCA NUMB /INTERNAL MODE TAD ["/&77] /GET A "/" JMS I [P6CH] /PRINT IT JMP I (EXAMAC) /CONTINUE THERE TRYLOWR,TAD (-117) /AC NOW CONTAINS CHARACTER-177 CLL /CLEAR LINK FOR TEST TAD (36) /ADD ON RANGE SNL /SKIP IF VALID LOWER-CASE JMP NOQ /BARF OTHERWISE TAD ("A&177) /MAKE IT UPPER-CASE JMP I (TRYAGAN) /TRY IT AGAIN NOQ, NL0002 /CLEAN UP AND FORM BEGINNING OF RIGHT CONSTANT TAD ["?-"0-6-2] /??=BAD INPUT CHARACTER NO6, IAC /?6=NO ARGUMENT TO "G" OR "R" NO5, IAC /?5=DUPLICATE BREAKPOINT ATTEMPTED NO4, IAC /?4=ILLEGAL BREAKPOINT CONDITION (N=0) NO3, IAC /?3=BREAKPOINT LOOKUP FAILURE FROM "#" NO2, IAC /?2=NO ARGUMENT TO "#" NO1, IAC /?1=ILLEGAL ADDRESS OR VALUE NO0, DCA I [CRLF] /?0=TOO MANY DIGITS TAD ["?&77] /GET A "?" JMS I [P6CH] /PRINT IT TAD I [CRLF] /GET PASSED CODE TAD ["0&77] /MAKE INTO DIGIT JMS I [P6CH] /PRINT IT JMP BEGIN /START OVER P5BLNKS,.-. /PRINT FIVE CHARACTERS ROUTINE TAD (-5) /SETUP FOR DCA P5TEMP /FIVE TAD [" &177] /GET A JMS P7CH /PRINT IT ISZ P5TEMP /DONE YET? JMP .-3 /NO, KEEP GOING JMP I P5BLNKS /YES, RETURN P5TEMP, .-. /TEMPORARY PRTDBL, .-. /FULL ADDRESS PRINT ROUTINE TAD I PRTDBL /GET THE POINTER DCA TEMP /STASH IT NL0001 /SET INCREMENT TAD TEMP /GET HIGH-ORDER POINTER DCA TEMP2 /STASH LOW-ORDER POINTER TAD I TEMP /GET HIGH-ORDER CMA /INVERT FOR INTERNAL MODE TEST SNA /SKIP IF NOT INTERNAL MODE JMP PRTINT /JUMP IF INTERNAL MODE CLL CMA RTR;RAR /INVERT BACK AND MOVE OVER PRTSLSH,TAD ["0&77] /MAKE IT AN ASCII DIGIT JMS I [P6CH] /PRINT IT TAD I TEMP2 /GET THE VALUE JMS I [PRTOCT] /PRINT IT PRTDXIT,ISZ PRTDBL /BUMP PAST ARGUMENT JMP I PRTDBL /RETURN PRTINT, TAD I TEMP2 /GET LOW-ORDER ADDRESS TAD (-VIEWCONTROL-1) /SUBTRACT UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD (VIEWCONTROL+1-AC) /ADD ON RANGE SNL /SKIP IF IN RANGE JMP PRTINORMAL /JUMP IF NOT TAD (SPTABL) /ADD ON TABLE BASE DCA TEMP /STASH THE POINTER TAD I TEMP /GET THE CHARACTER JMS P7CH /PRINT IT JMS P5BLNKS /PRINT FIVE CHARACTERS JMP PRTDXIT /CONTINUE THERE PRTINOR,NL7777 /BACKUP TO "/" JMP PRTSLSH /CONTINUE THERE PAGE READBRK,NL0002 /GET INSTRUCTION-FIELD OFFSET TAD READNUM /ADD ON TO POINTER TO FIELD DCA TEMP /STASH IT TAD I TEMP /GET THE INSTRUCTION JMS I [STORE] /STORE IT BACK READNUM,BRKTBL /WHERE IT CAME FROM TAD READNUM /GET THE FIELD POINTER TAD L4 /UPDATE TO NEXT FIELD DCA READNUM /STORE IT BACK ISZ BRKCNT /DONE ALL YET? JMP READBRK /NO, GO BACK TAD N /GET THE BREAKPOINT NUMBER STL RTL /*4+2 TAD [BRKTBL] /MAKE IT ABSOLUTE DCA BRKPTR /SETUP BREAK POINTER TAD I BRKPTR /GET THE INSTRUCTION JMS I [SETCONT] /SETUP FOR POTENTIAL CONTINUATION NL7777 /\ TAD I BRKPTR / >BACKUP THE COUNT DCA I BRKPTR // TAD I BRKPTR /GET THE NEW COUNT SZA CLA /ZERO? JMP TESTCP /NO, TEST FOR <^P> HIT, ETC. JMS TIMOUT /YES, ESTABLISH TTY: STATE CPHIT, NL0001 /RESET THE DCA I BRKPTR /DEFAULT COUNT DCA I [PHIT2] /ALLOW NORMAL OPERATION PRNTRP, TAD ("#&77) /GET A "#" JMS I [P6CH] /PRINT IT TAD N /GET "N" CLL RTL;RTL;RTL /CLEAR LINK AND MOVE OVER DCA TEMP2 /STORE INTO PRTOCT'S TEMPORARY NL0002 /COUNTERACT 2 DIGITS JMP I (PRTOCT+2) /CONTINUE PRNTBAK,JMS I [PRTDBL] /PRINT OUT THE TRPADR /TRAPPED ADDRESS TAD LPAREN /GET A "(" JMS I [P6CH] /PRINT IT TAD LINK /GET THE LINK TAD ["0&77] /MAKE IT ASCII JMS I [P6CH] /PRINT IT TAD [";&77+7700] /GET A ";" JMS I [P6CH] /PRINT IT TAD AC /GET THE AC JMS I [PRTOCT] /PRINT IT TAD MQ /GET THE MQ JMS I [PRTOCT] /PRINT IT TAD I [DSPADR] /GET DISPLAY FIELD SPA CLA /SKIP IF ACTIVE JMP BEGIN /JUMP IF NOT TAD I [DSPAD1] /GET THE LOW ORDER VALUE DCA CURAD1 /MAKE IT THE CURRENT ONE TAD I [DSPADR] /GET THE FIELD AGAIN JMP I (EXAMPRV) /CONTINUE THERE TESTCP, JMS I [CHKUP] /CHECK FOR <^P>, ETC. ISZ TRPAD1 /BUMP UP RESTART ADDRESS JMP I (CONTX) /KEEP GOING UPHIT, JMS TIMOUT /ESTABLISH TTY: STATE TAD ["P&177] /GET A "P" JMS I [CONTPRT] /PRINT "^P" JMS I [CRLF] /DO A , JMP CPHIT /CONTINUE THERE TIMOUT, .-. /TTY: TIME-OUT ROUTINE TIMAGN, TSFIOT /**** CONSOLE **** SKP JMP TIMER /FLAG NOT UP, TIME IT OUT NL7777 /INDICATE IT SHOULD BE PRESERVED CLRTTY, DCA TTYFLG /OR DELETED JMP I TIMOUT /RETURN TIMER, ISZ XR1 /WASTE JMP TIMER /SOME TIME ISZ XR2 /WASTED ENOUGH TIME? JMP TIMAGN /NO, TRY AGAIN TLSIOT /YES, SET THE FLAG JMP CLRTTY /INDICATE IT SHOULD ULTIMATELY BE DELETED NUMSGN, JMS I [CHKDIG] /ANY ARGUMENT? JMP I (NO2) /NO, BARF JMS I [GETBRK] /TRY TO FIND IT IN THE TABLE NUMB-1 /USING ARGUMENT AS ADDRESS JMP I (NO3) /BARF JMP BAGAIN /OK, KEEP GOING OVCHK, .-. /SET COUNT AND CHECK IF OVER ROUTINE TAD NUMB /GET THE HIGH ORDER ARGUMENT SZA CLA /SKIP IF 0 JMP I [NO0] /BARF TAD NUMB1 /GET THE LOW ORDER ARGUMENT LPAREN, SNA /ZERO? NL0001 /YES, DEFAULT IS 0001 DCA I BRKPTR /STORE IN THE COUNT WORD JMP I OVCHK /RETURN CRLF, .-. /, ROUTINE TAD [15] /GET A JMS P7CH /PRINT IT TAD (12) /GET A JMS P7CH /PRINT IT ALSO JMP I CRLF /RETURN FNDSLT, .-. /FIND THE SLOT ROUTINE L4, 4 /DON'T MOVE THIS! TAD N /GET BREAKPOINT NUMBER AND [NUMBRKS-1] /JUST GOOD BITS SNA /SKIP IF ANY THERE JMP I [NO4] /BARF CLL RTL /ADJUST OFFSET TAD [BRKTBL] /ADD ON TABLE BASE DCA BRKPTR /SETUP THE POINTER JMP I FNDSLT /RETURN CORFNCT,SBOOT-RELCORE%2+.-. /**** UNIT BITS FROM SBTFUN **** CORMOVE,.-. /READ/WRITE REST OF CORE ROUTINE CLA RAR /MOVE IN THE READ/WRITE BIT TAD CORFNCT /ADD ON REST OF FUNCTION WORD DCA CORFUN /SAVE IN CALL JMS I [SYSIO] /\ RELCORE / \READ OR WRITE CORFUN, SBOOT-RELCORE%2+.-. / /REST OF CORE RELCORE%200+BINADR // JMP I CORMOVE /RETURN PAGE ZBLOCK 2 /EMPTY SPACE FOR ALIGNMENT DSPNBL, JMS I [CHKDIG] /ANY ARGUMENT? NL7777 /NO, RESET TO INTERNAL (DON'T PRINT) MODE TAD NUMB /GET HIGH ORDER DCA I [DSPADR] /STORE INTO DISPLAY FIELD TAD NUMB1 /GET LOW ORDER DCA I [DSPAD1] /STORE INTO DISPLAY ADDRESS JMP BEGIN /RESTART ODT CHKDIG, .-. /CHECK FOR ANY DIGITS ROUTINE TAD TOTAL /GET TOTAL DIGITS TYPED TAD L6/(6) /COMPARE TO LIMIT SZA CLA /SKIP IF NO DIGITS ISZ CHKDIG /BUMP RETURN IF ANY JMP I CHKDIG /RETURN AS NECESSARY CONTPRT,.-. /CONTROL CHARACTER PRINT ROUTINE DCA IOTTST /SAVE PASSED VALUE TAD ["^&177] /GET AN "^" JMS P7OUT /PRINT IT JMP .-1 /WAIT FOR IT TAD IOTTST /GET PASSED CHARACTER JMS P7OUT /PRINT IT JMP .-1 /WAIT FOR IT JMP I CONTPRT /RETURN IOTTST, .-. /IOT OR OPERATE TEST NL2000 /-6000 TAD SIMINST /COMPARE TO SIMULATED INSTRUCTION SZL CLA /SKIP IF MRI ISZ IOTTST /BUMP IF IOT OR OPR JMP I IOTTST /RETURN DUMP, .-. /DUMP THE BUFFER ROUTINE TAD STORFLG /GET DIRTY INDICATOR SNA CLA /SKIP IF DUMPING NEEDED JMP I DUMP /RETURN IF NOT JMS I [SYSIO] /\ RELCORE-1000 / \WRITE OUT THE BUFFER DMPFNCT,4^100+WRITE+.-. / /TO THE SYSTEM DEVICE VMBLK2, .-. // DCA STORFLG /NOT DIRTY ANYMORE JMP I DUMP /RETURN GOMVCT, -NUMBRKS /TABLE LENGTH COUNTER JMSI4, JMS I 4 /BREAKPOINT TRAP INSTRUCTION L6, 6 /CONSTANT 0006 CONTINU,TAD CONTSW /GET OUR SWITCH SZA CLA /SKIP IF CONTINUE ALLOWED JMP I [NO4] /ELSE BARF JMS I [GETBRK] /LOOKUP THE TRPADR-1 /TRAPPED LOCATION JMP CONTNOT /NOT THERE; MUST HAVE BEEN REMOVED JMS I [FNDSLT] /SETUP THE BREAK POINTER ISZ BRKPTR /BUMP TO ADDRESS ISZ BRKPTR /BUMP TO INSTRUCTION JMS I [LOAD] /GET THE TRPADR /INSTRUCTION JMS I [SETCONT] /SAVE AND SETUP ITS ADDRESS JMS I [OVCHK] /CHECK ARGUMENT AND SETUP THE COUNT ISZ TRPAD1 /BUMP PAST INSTRUCTION LNOP, NOP /JUST IN CASE JMP CONTENTRY /CONTINUE THERE ARE, JMS I [CHKDIG] /ANY DIGITS? JMP I [NO6] /NO, BARF JMP AREIN /YES, CONTINUE THERE GO, JMS I [CHKDIG] /ANY ARGUMENT? JMP I [NO6] /NO, BARF TAD NUMB /YES, GET THE FIELD DCA DFIELD /USE AS DATA FIELD DCA AC /CLEAR THE AC DCA LINK /AND LINK DCA MQ /AND THE MQ AREIN, TAD NUMB /GET THE FIELD DCA TRPADR /USE AS THE GO FIELD TAD NUMB1 /GET ADDRESS DCA TRPAD1 /USE AS THE GO ADDRESS CONTNOT,TAD LNOP /GET THE DEFAULT INSTRUCTION DCA SIMINST /USE TO EASE SIMULATION CONTENT,JMS I [CRLF] /DO A , TSFIOT /**** CONSOLE **** SKP JMP .-1 /WAIT FOR IT ISZ TTYFLG /SHOULD WE CLEAR IT? SAVINST,TCFIOT /YES, DO SO NOW CONTX, JMS I [LOAD] /GET CONTENTS OF MVPTR1, BRKTBL /BREAKPOINTED LOCATION DCA SAVINST /SAVE IT TAD MVPTR1 /GET THE POINTER DCA MVPTR2 /PUT INTO STORE ARGUMENT TAD JMSI4 /GET THE BREAK INSTRUCTION JMS I [STORE] /STORE IT OVER THE MVPTR2, .-. /BREAKPOINTED LOCATION ISZ MVPTR1 /BUMP TO ADDRESS ISZ MVPTR1 /BUMP TO INSTRUCTION TAD SAVINST /GET THE OLD INSTRUCTION DCA I MVPTR1 /STORE IT IN THE TABLE ISZ MVPTR1 /BUMP TO COUNT ISZ MVPTR1 /BUMP TO NEXT ONE'S FIELD TAD I MVPTR2 /GET THE FIELD WORD AGAIN SPA CLA /SKIP IF NOT INTERNAL JMP MOVGO /JUMP IF INTERNAL TAD I MVPTR2 /GET THE FIELD DCA I [FNDSLT] /STORE IN HEADER WHICH HAS 4 AFTER IT TAD EBPOINT /GET BREAKPOINT POINTER VALUE JMS I [STORE] /STORE INTO X0004 FOR FNDSLT /VALID BREAKPOINT'S SAKE JMS I [MOVE] /\ BRK4-1 / \MOVE DOWN THE EXTENDED EBPOINT,XBRKAC-1 / /MEMORY BREAKPOINT CODE XBRKAC // MOVGO, ISZ GOMVCT /DONE ALL BREAKPOINTS? JMP CONTX /NO, KEEP GOING JMS I [SYSIO] /\ BRKTBL&7600 / \WRITE THE BREAKPOINT TABLE ODFUN, 1^100+WRITE+.-. / /BACK TO THE ODT CORE IMAGE ODBLK, .-. // JUSTGO, DCA I [FNDSLT] /FIELD 0 FROM NOW ON STL /INDICATE SAVE JMS I [CORMOVE] /WRITE CORE BACK JMS IOTTST /CHECK IF INSTRUCTION IS IOT OR OPERATE JMS I [LOAD] /MUST BE MRI, SO LOAD THE OPERAND SIMADR /THIS IS A HARMLESS AND OTHERWISE DCA TEMP /SAVE THE CONTENTS TAD TEMP /GET IT BACK DCA 0000 /SAVE IN SIMULATOR OPERAND ADDRESS TAD MQ /GET THE MQ CONTENTS MQL /PUT INTO THE HARDWARE MQ JMS IOTTST /IOT OR OPERATE? TAD [777] /NO, GET INVERTED MRI MASK CMA /NOW HAVE DESIRED BITS MASK AND SIMINST /RETAIN UNSTRIPPED BITS RAL /SETUP THE TEST CML /INVERT LINK FOR PROPER TEST SMA SNL /JMP OR JMS? JMP JMSJMP /YES CML RAR /RESTORE THE STRIPPED INSTRUCTION DCA OPR8 /STORE IN-LINE TAD DFIELD /GET THE DATA FIELD AND [70] /JUST FIELD BITS TAD OCDF+BRK1-SWMX /MAKE INTO CDF INSTRUCTION DCA .+1 /STORE IN-LINE .-. /AND EXECUTE IT TAD LINK /GET THE LINK CLL RAR /LOAD IT CLA /CLEAR JUNK LINK BITS (USER FOOLISHNESS) TAD AC /GET THE AC NOW OPR8, .-. /EXECUTE THE SIMULATED INSTRUCTION SKP /DON'T BUMP IF IT DIDN'T SKIP ISZ TRPAD1 /OTHERWISE BUMP TO NEXT NOP /JUST IN CASE DCA AC /SAVE NEW AC RAL /GET THE LINK DCA LINK /SAVE THE NEW LINK RDF /GET THE DATA FIELD DCA DFIELD /SAVE THE NEW DATA FIELD CIF CDF 00 /CAN'T SIMULATE CIF! EOSIM, SZL /ARE WE FORCED HERE BY JMS? JMP JMSFRC /YES TAD 0 /NO, GET THE OPERAND CIA /INVERT FOR TEST TAD TEMP /COMPARE TO ORIGINAL VALUE SNA CLA /SKIP IF IT WAS CHANGED JMP SIMOVR /JUMP IF NOT JMSFRC, TAD 0 /GET NEW VALUE JMS I [STORE] /STORE IT BACK SIMADR /WHERE IT WOULD HAVE BEEN SIMOVR, NL0001 /SET VALID LINK BIT MASK AND LINK /GET NEW LINK CLL RTL /MOVE UP RTL /TO CML BIT TAD OLKNST+BRK2-SLOAD /ADD ON TO CLL INSTRUCTION DCA OLKNST+BRK2-SLOAD /STORE INTO FINAL LINK WORD TAD AC /GET THE AC DCA OAC+BRK3-OAC /STORE INTO FINAL AC TAD TRPADR /GET STARTUP FIELD TAD OCIF+BRK1-SWMX /MAKE INTO CIF INSTRUCTION DCA OCIF+BRK1-SWMX /STORE INTO FINAL CIF WORD TAD DFIELD /GET THE DATA FIELD TAD OCDF+BRK1-SWMX /MAKE INTO CDF INSTRUCTION DCA OCDF+BRK1-SWMX /STORE INTO FINAL CDF WORD TAD TRPAD1 /GET STARTUP ADDRESS DCA OPC+BRK3-OAC /STORE INTO FINAL STARTUP ADDRESS JMS I [DUMP] /DUMP LAST BUFFER (IF ANY) TAD [ORLOAD] /GET I/O CALL ADDRESS DCA I [SYSIO] /PUT INTO SYSIO'S HEADER JMS I [MOVE] /\ BRK1-1 / \MOVE DOWN THE SWMX-1 / /STARTUP CODE SWMX-SDATE // JMS I [MOVE] /\ BRK2-1 / \MOVE DOWN THE SLOAD-1 / /RELOAD CODE SLOAD-SYSIO // JMS I [MOVE] /\ BRK3-1 / \MOVE DOWN THE ODT OAC-1 / /RECOVERY ROUTINE OAC // JMP I .+1 /AND FAKE THE JMS SYSIO SYSIO+1 /THROUGH HERE JMSJMP, RAL /MOVE OVER SPA CLA /IS IT JMS? JMP JMPX /NO, JMP TAD TRPADR /GET THE FIELD DCA SIMADR /USE AS NEW FIELD TAD TRPAD1 /GET THE ADDRESS DCA 0 /SAVE AS NEW P. C. CLA STL IAC /GET JMS INCREMENT AND FORCE STORAGE OF OLD P. C. JMPX, TAD SIMAD1 /GET INSTRUCTION'S ADDRESS DCA TRPAD1 /MAKE IT THE NEW STARTUP LOCATION JMP EOSIM /FINISH UP THERE / ODT BREAKPOINT PROTOTYPE CODE FOR FIELD 0. / BREAKPOINTS ARE: JMS I 4; 0004/7771 BRK1, RELOC SWMX /WHERE THIS WILL GO OCDF, CDF 00 /USER'S DATA FIELD OCIF, CIF 00 /USER'S INSTRUCTION FIELD JMP I OPC /START USER UP RELOC /TURN OFF RELOCATION BRK2, RELOC SLOAD /WHERE THIS WILL GO ORLOAD, 0000 /CORE ARGUMENT USED BY FAKED OUT SYSIO CALL RLCFNCT,RELCORE%2+.-. /RELOAD SWAPPED OUT PORTION OF USER PROGRAM BINADR /FROM HERE OLKNST, CLL /OR STL TAD OAC /RESTORE AC JMP OCDF /I CONTINUE TO CONTINUE RELOC /TURN OFF RELOCATION BRK3, RELOC SFILES /WHERE THIS WILL GO OAC, .-. /AC TEMPORARY OMORE, JMS SYSIO /\ 0000 / \SAVE ALL OF CORE BRKFNCT,37^100+WRITE+.-. / /ON A BREAKPOINT BINADR // JMS SYSIO /RELOAD ODT 0000 /INTO 00000, ETC. OFUN, ODTEND%2+.-. /UNIT BITS WILL BE FILLED IN OBLK, .-. /BLOCK WILL BE FILLED IN JMP ADDRESS /RESTART ODT THERE OPC, .-. /USER'S P. C. STORED HERE OLINK, DCA OAC /SAVE AC RAL /GET THE LINK RDF /AND THE DATA FIELD DCA OLINK /SAVE THEM ALSO CDF 00 /NOW IN FIELD 0 JMP OMORE /CONTINUE THERE RELOC /TURN OFF RELOCATION / ODT EXTENDED MEMORY BREAKPOINT PROTOTYPE CODE. BRK4, RELOC OPC+1 /WHERE THIS GOES XBRKAC, DCA XBRKAC /SAVE AC XBRKDF, RDF /GET DATA FIELD DCA XBRKDF /SAVE IT RIF /GET OUR FIELD CIF CDF 00 /GOTO FIELD 0 JMS OPC /CONTINUE IN REST OF BREAKPOINT CODE RELOC /TURN OFF RELOCATION / "S" COMMAND SYSTEM LOADER CODE. STRCODE,RELOC SLOAD /WHERE THIS GOES SLOAD, JMS SYSIO /CALL I/O ROUTINES SCORE, 0000 /READ INTO 00000 SFUN, 37^100+.-. /UNIT BITS WILL BE FILLED IN SBLOCK, BINADR /BLOCK NUMBER JMP I SYSTART /START IT UP SYSTART,.-. /STARTING ADDRESS WILL BE FILLED IN RELOC /TURN OFF RELOCATION PAGE BRKTBL, ZBLOCK 100 /BREAKPOINTS SAVED HERE DSPADR, 7777 /DISPLAYED ADDRESS DSPAD1, .-. /ON A BREAKPOINT TABL1, " &177 /BLANK 12&177 /LINE FEED 15&177 /CARRIAGE RETURN "/&177 // SPTABL, "A&177 /A "L&177 /L "Q&177 /Q "D&177 /D "F&177 /F "N&177 /N "M&177 /M "H&177 /H "U&177 /U "O&177 /O "V&177 /V "\&177 /\ "(&177 /( "B&177 /B "I&177 /I "G&177 /G "R&177 /R ";&177 /; "C&177 /C "S&177 /S "E&177 /E "W&177 /W "X&177 /X "K&177 /K "^&177 /^ "+&177 /+ "-&177 /- "#&177 /# ",&177 /, "<&177 /< "P&177 /P 137 /BACK ARROW -70 /END OF LIST USED FOR NUMERIC CHECK TABL2, BEGNIN /BLANKS ARE IGNORED LNFEED /CLOSE PREVIOUS, OPEN + DISPLAY NEXT RETURN /CLOSE PREVIOUS EXAMIN /DISPLAY CURRENT ACX /OPEN AC LOCATION LINKX /OPEN LINK LOCATION QUEUE /OPEN MQ LOCATION DX /OPEN BREAK DATA FIELD LOCATION FX /OPEN SEARCH DATA FIELD LOCATION NX /OPEN BREAKPOINT NUMBER LOCATION MX /OPEN WORD SEARCH MASK LOCATION HX /OPEN HOME (LOWER SEARCH LIMIT) LOCATION UX /OPEN UPPER SEARCH LIMIT LOCATION OX /OPEN OUTPUT CONTROL WORD VX /OPEN VIEW CONTROL WORD BKSLSH /DUMP MEMORY DSPNBL /ENABLE BREAKPOINT DISPLAY BREAK /INSERT BREAKPOINT INCN /INCREMENT BREAKPOINT NUMBER GO /START PROGRAM ARE /RESUME FROM MANUAL SETTINGS SEMICOLON /SAME AS LINEFEED BUT NO DISPLAY CONTINUE /CONTINUE FROM A PREVIOUS BREAKPOINT START /START OR SAVE SBOOT /UNCONDITIONALLY (HASTILY) EXIT FROM ODT WRDSRCH /SEARCH CORE AGAINST MASK ECKS /SEARCH CORE AGAINST MASK (COMPLEMENTED) KAY /SET COUNT OF A BREAKPOINT UPARW1 /OPERAND OPEN ADDIT /OPEN .+ARGUMENT LOCATION SBTRCT /OPEN .-ARGUMENT LOCATION NUMSGN /FIND BREAKPOINT IN TABLE COMMA /SET BREAKPOINT NUMBER PREV /RESTORE PREVIOUS ADDRESS SRCPRC /PROCEED TO NEXT WORD SEARCH INDRCT /OPEN INDIRECTLY LOAD, .-. /LOAD A WORD ROUTINE TAD I LOAD /GET THE ARGUMENT JMS GETADR /SETUP THE ADDRESS L14, 14 /THIS CAN BE SKIPPED TAD I ADDRESS /GET THE VALUE CDF 00 /IN CASE OF EXTENDED MEMORY ISZ LOAD /BUMP PAST ARGUMENT JMP I LOAD /RETURN STORE, .-. /STORE A WORD ROUTINE DCA LOAD /SAVE THE VALUE TAD I STORE /GET THE ARGUMENT JMS GETADR /SETUP THE ADDRESS ISZ STORFLG /CORE IS NOW DIRTY TAD LOAD /GET THE VALUE AGAIN DCA I ADDRESS /STORE IT CDF 00 /IN CASE OF EXTENDED MEMORY ISZ STORE /BUMP PAST ARGUMENT JMP I STORE /RETURN GETBRK, .-. /SEARCH FOR BREAKPOINT ROUTINE TAD [BRKTBL] /SETUP THE DCA BRKPTR /TABLE POINTER TAD [-NUMBRKS] /SETUP THE DCA TEMP /BREAK COUNT TRYAGN, TAD I GETBRK /GET THE ARGUMENT ADDRESS DCA XR1 /SET IT UP TAD I BRKPTR /GET THE FIELD ISZ BRKPTR /BUMP TO THE ADDRESS CIA /INVERT FOR COMPARISON TAD I XR1 /COMPARE TO FIELD BITS SZA /SKIP IF EQUAL JMP BADBMP /JUMP IF NOT TAD I BRKPTR /GET AN ADDRESS WORD CIA /INVERT FOR COMPARISON TAD I XR1 /COMPARE TO ADDRESS BITS BADBMP, ISZ BRKPTR /BUMP TO INSTRUCTION SZA CLA /SKIP IF EQUAL JMP NOGOOD /JUMP IF NOT TAD BRKPTR /GET CURRENT POINTER RTR /TURN INTO "N" AND [NUMBRKS-1] /JUST "N" BITS DCA N /SAVE AS THE NEW "N" ISZ GETBRK /BUMP THE RETURN ADDRESS NOGOOD, ISZ BRKPTR /BUMP TO COUNT WORD ISZ BRKPTR /BUMP TO NEXT FIELD WORD ISZ TEMP /DONE ALL YET? JMP TRYAGN /NO, GO BACK ISZ GETBRK /ACCOUNT FOR IN-LINE ARGUMENT JMP I GETBRK /RETURN EITHER WAY MOVE, .-. /MOVE ROUTINE TAD I [FNDSLT] /GET FIELD TAD MVCDF /MAKE INTO CDF INSTRUCTION DCA MOVCDF /STORE IN-LINE TAD I MOVE /GET "FROM" ADDRESS DCA XR1 /SET IT UP ISZ MOVE /BUMP TO NEXT ARGUMENT TAD I MOVE /GET "TO" ADDRESS DCA XR2 /SET IT UP ISZ MOVE /BUMP TO NEXT ARGUMENT TAD I MOVE /GET COUNT DCA GETBRK /STASH IT ISZ MOVE /BUMP PAST LAST ARGUMENT MOVLUP, TAD I XR1 /GET A WORD MOVCDF, .-. /GOTO OUTPUT FIELD DCA I XR2 /PUT A WORD MVCDF, CDF 00 /BACK TO FIELD 0 ISZ GETBRK /DONE ALL YET? JMP MOVLUP /NO, GO BACK JMP I MOVE /YES, RETURN GETADR, .-. /GET ADDRESS ROUTINE DCA ADDRESS /SAVE PASSED ARGUMENT TAD I ADDRESS /GET HIGH ORDER ADDRESS WORD DCA FLDINST /STASH IT ISZ ADDRESS /BUMP TO LOW ORDER TAD I ADDRESS /GET THE LOW ORDER VALUE DCA ADDRESS /STASH IT TAD FLDINST /GET THE FIELD SNA /SKIP IF NOT FIELD 0 JMP CHKADR /JUMP IF FIELD 0 SPA /INTERNAL? CLA /YES, SO USE FIELD 0 ACTUALLY TAD MVCDF /MAKE INTO CDF INSTRUCTION DCA FLDINST /STORE IN-LINE FLDINST,.-. /GOTO APPROPRIATE DATA FIELD GETOUT, ISZ GETADR /BUMP PAST ARGUMENT JMP I GETADR /RETURN CHKADR, TAD ADDRESS /GET THE ADDRESS CLL /CLEAR LINK FOR TEST TAD (-RELCORE) /COMPARE TO END OF ODT AREA SZL CLA /SKIP IF SWAPPED OUT JMP GETOUT /JUMP IF NOT TAD ADDRESS /GET THE ADDRESS RTL /\ RTL / >%200 RTL // AND L14/(14) /JUST QUAD-PAGE BITS TAD [BINADR] /ADD ON CORE IMAGE BASE BLOCK DCA VMBLK1 /STASH IT TAD I (VMBLK2) /GET CURRENT BLOCK CIA /INVERT FOR COMPARISON TAD VMBLK1 /COMPARE TO LATEST SNA CLA /SKIP IF DIFFERENT JMP FINADR /JUMP IF EQUAL JMS I [DUMP] /WRITE OUT THE OLD BUFFER JMS I [SYSIO] /\ VMBUFP, RELCORE-1000 / \READ IN THE VMRFNCT,4^100+.-. / /NEW BUFFER VMBLK1, .-. // TAD VMBLK1 /SETUP THE DCA I (VMBLK2) /DUMPING FOR LATER FINADR, TAD ADDRESS /GET THE ADDRESS AND [777] /JUST THE ON-QUAD-PAGE BITS TAD VMBUFP /ADD ON THE BUFFER BASE DCA ADDRESS /SAVE AS EFFECTIVE ADDRESS JMP I GETADR /RETURN PAGE PRTOCT, PRNTBAK /OCTAL PRINT ROUTINE; INITIALIZED FOR PRNTRP DCA TEMP2 /SAVE THE NUMBER TAD [-4] /SETUP THE DCA TEMP /DIGIT COUNT PLOOP, TAD TEMP2 /GET THE NUMBER RTL;RAL /SHIFT IT THREE BITS DCA TEMP2 /SAVE IT BACK TAD TEMP2 /GET IT AGAIN RAL /ADJUST IT AND [7] /JUST ONE DIGIT TAD ["0&77] /MAKE IT ASCII JMS I [P6CH] /PRINT IT ISZ TEMP /DONE 4 YET? JMP PLOOP /NO, GO BACK TAD [" &77] /YES, GET A JMS I [P6CH] /PRINT IT ALSO JMP I PRTOCT /RETURN SETCONT,.-. /SETUP FOR CONTINUE ISZ BRKPTR /BUMP TO COUNT WORD DCA SIMINST /SAVE PASSED INSTRUCTION FOR SIMULATOR JMS I (IOTTST) /IS IT AN IOT OR OPERATE? SKP /SKIP IF NOT JMP I SETCONT /RETURN IF NOT TAD TRPADR /GET THE TRAPPED FIELD DCA CURADR /MAKE INTO CURRENT TAD TRPAD1 /GET THE TRAPPED ADDRESS DCA CURAD1 /MAKE INTO CURRENT JMS I [EFFADR] /CALCULATE EFFECTIVE ADDRESS TAD CURADR /GET NEW FIELD DCA SIMADR /SETUP SIMULATOR FIELD TAD CURAD1 /GET NEW ADDRESS DCA SIMAD1 /SETUP SIMULATOR ADDRESS JMP I SETCONT /RETURN WRDSRCH,TAD [SZA-SNA] /MAKE IT SZA CLA ECKS, TAD LSNACLA /OR SNA CLA DCA WINST /STORE IN TEST INSTRUCTION JMS I [CRLF] /START ON A NEW LINE TAD HOME /GET THE LOWER LIMIT DCA CHECK1 /SAVE AS STARTING ADDRESS TAD FFIELD /GET SEARCH FIELD AND [70] /JUST FIELD BITS DCA CHECK /SAVE AS SEARCHING FIELD TAD NUMB1 /GET SEARCH ARGUMENT DCA WORD /SAVE IT WLOOP1, JMS I [LOAD] /GET A CHECK /NEW WORD AND MASK /JUST DESIRED BITS CIA /INVERT FOR COMPARISON TAD WORD /COMPARE TO ARGUMENT OF SEARCH WINST, SZA CLA /EQUAL (OR UNEQUAL) UNDER THE MASK? JMP WLOOP2 /JUMP IF NOT JMS I [PRTDBL] /PRINT THE ADDRESS CHECK /OF THE GOOD WORD TAD OTCONTROL /GET CURRENT MODE SPA CLA /SKIP IF NORMAL JMP WPAUSE /JUMP IF SPECIAL TAD ["/&77] /GET A "/" JMS I [P6CH] /PRINT IT JMS I [LOAD] /GET THE CHECK /CONTENTS JMS I [PRTOCT] /PRINT IT ALSO SRCPRC, JMS I [CRLF] /DO A , WLOOP2, TAD CHECK1 /CHECK IF CIA /WE'VE TAD UPPER /GONE TOO FAR LSNACLA,SNA CLA /SKIP IF NOT JMP BEGIN /RESTART IF TOO FAR JMS I [CHKUP] /CHECK FOR ABORTING ISZ CHECK1 /BUMP TO NEXT L200, 200 /HERE JUST IN CASE JMP WLOOP1 /GO DO IT AGAIN WPAUSE, TAD CHECK1 /GET CURRENT LOW-ORDER DCA NUMB1 /MAKE IT GENERAL LOW-ORDER TAD CHECK /GET CURRENT HIGH-ORDER JMP I (WX) /FINISH IT THERE EFFADR, .-. /EFFECTIVE ADDRESS ROUTINE JMS I [LOAD] /GET THE CURADR /CURRENT INSTRUCTION DCA TEMP2 /SAVE IT TAD TEMP2 /GET IT BACK AND [177] /JUST PAGE BITS DCA TEMP /SAVE THEM TAD TEMP2 /GET INSTRUCTION AGAIN AND L200/(200) /JUST CURRENT PAGE BIT SNA CLA /SKIP IF SET JMP PAGZERO /JUMP IF NOT TAD CURAD1 /GET ORIGINAL ADDRESS AND [7600] /JUST THE PAGE'S BITS TAD TEMP /OR IN THE PAGE BITS DCA TEMP /SAVE THE FULL ADDRESS PAGZERO,TAD TEMP2 /GET INSTRUCTION AGAIN AND (400) /JUST INDIRECT BIT SNA CLA /SKIP IF SET JMP NOIND /JUMP IF NOT TAD TEMP /USE ADDRESS DCA CURAD1 /AS POINTER JMS I [LOAD] /GET THE CURADR /VALUE DCA TEMP /SAVE IT TAD CURAD1 /GET POINTER AGAIN AND [7770] /JUST MAJOR BITS TAD [7770] /COMPARE TO AUTO-INDEX SZA CLA /SKIP IF AUTO-INDEX JMP NOAUTO /JUMP IF NOT ISZ TEMP /BUMP TO NEXT AS IN HARDWARE TAD TEMP /GET THE NEW VALUE JMS I [STORE] /STORE IT BACK CURADR /IN THE AUTO-INDEX REGISTER NOAUTO, TAD FFIELD /GET THE SEARCH FIELD AND [70] /JUST FIELD BITS DCA CURADR /SAVE AS NEW FIELD NOIND, TAD TEMP /GET NEW ADDRESS DCA CURAD1 /STASH IT JMP I EFFADR /RETURN PAGE BREAK, JMS I [CHKDIG] /ANY ARGUMENT? JMP REMOVE /NO, REMOVE SOMETHING JMS I [GETBRK] /YES, LOOK IT UP NUMB-1 /FROM ARGUMENT SKP /BETTER BE MISSING JMP I (NO5) /BARF JMS I [FNDSLT] /SETUP THE POINTER TAD NUMB /GET THE FIELD DCA I BRKPTR /STASH IT ISZ BRKPTR /BUMP TO ADDRESS TAD NUMB1 /GET THE ADDRESS DCA I BRKPTR /STASH IT ISZ BRKPTR /BUMP TO INSTRUCTION ISZ BRKPTR /BUMP TO COUNT NL0001 /SETUP THE DCA I BRKPTR /DEFAULT COUNT JMP BEGIN /KEEP GOING REMOVE, JMS RMVBRK /REMOVE THE BREAKPOINT JMP BEGIN /KEEP GOING RMVBRK, .-. /BREAKPOINT REMOVAL ROUTINE TAD N /GET CURRENT "N" AND [NUMBRKS-1] /JUST GOOD BITS SZA CLA /SKIP IF ALL JMP RMVONE /JUST REMOVE ONE TAD [BRKTBL] /SETUP THE DCA BRKPTR /POINTER TAD [-NUMBRKS] /SETUP THE REMOV1, DCA TEMP /COUNT RMVLUP, NL7777 /SET INTERNAL MODE DCA I BRKPTR /STORE AS FIELD ISZ BRKPTR /BUMP TO ADDRESS DCA I BRKPTR /INTERNAL LOCATION 0 IS THE ADDRESS ISZ BRKPTR /BUMP TO INSTRUCTION TAD (NOP) /GET THE DEFAULT INSTRUCTION DCA I BRKPTR /STORE INTO THE TABLE ISZ BRKPTR /BUMP TO COUNT CLL NL0001 /GET DEFAULT COUNT; CLEAR LINK FOR SOME PEOPLE DCA I BRKPTR /STORE INTO THE TABLE ISZ BRKPTR /BUMP TO NEXT FIELD WORD ISZ TEMP /DONE ALL YET? JMP RMVLUP /NO, GO BACK JMP I RMVBRK /YES, RETURN RMVONE, JMS I [FNDSLT] /FIND THE BREAK ADDRESS IN TABLE NL7777 /INDICATE WE'RE REMOVING ONLY ONE THIS TIME JMP REMOV1 /CONTINUE THERE START, JMS I [CHKDIG] /ANY ARGUMENT? JMP SAVE /NO, JUST SAVE CORE JMS I [OVCHK] /CHECK ARGUMENT AND SET IT UP TAD NUMB1 /GET THE STARTING ADDRESS DCA I (SYSTART+STRCODE-SLOAD) /SET IT UP DCA CTLCTST /SET IT UP DCA I [FNDSLT] /USE FIELD 0 ONLY JMS I [MOVE] /\ STRCODE-1 / \MOVE DOWN THE SLOAD-1 / /SYSTEM LOADER SLOAD-SYSIO // JMS I [DUMP] /WRITE BACK THE LAST BUFFER STL /INDICATE SAVE JMS I [CORMOVE] /WRITE BACK THE REST OF CORE JMP I [SLOAD] /GO START IT UP SAVE, JMS I [DUMP] /WRITE OUT THE LAST BUFFER STL /INDICATE SAVE JMS I [CORMOVE] /WRITE OUT THE REST OF CORE JMP I [SBOOT] /BYE, BYE! CTLCTST,.-. /TEST FOR <^C>, ETC. CLA /CLEAN UP CHKKSF, KSFIOT /**** CONSOLE **** CIF MCS+10 CHKJMP, JMP I CTLCTST /**** CONSOLE **** JMS INCON CHKKRS, KRSIOT/OR KRBIOT /**** CONSOLE **** JMP I CTLCTST AND [177] /JUST SEVEN-BIT DCA INCHAR /SAVE THE CHARACTER NL7775 /-3 TAD INCHAR /COMPARE TO LATEST CHARACTER SNA /SKIP IF NOT <^C> ISZ I [SCRSIZE] /ELSE INDICATE SO SPA SNA CLA /SKIP IF <^D> OR GREATER JMP SAVE /JUMP IF <^C> OF LESS CHKKCC, KCCIOT/OR 0000 /**** CONSOLE **** 0000 TAD INCHAR /GET THE LATEST CHARACTER AGAIN JMP I CTLCTST /RETURN CHKUP, .-. /CHECK FOR <^P>, <^C>, ETC. JMS CTLCTST /TEST FOR <^C>, ETC. SZA /SKIP IF NOTHING THERE TAD [-"Q!300] /ELSE COMPARE TO <^Q> SNA /SKIP IF OTHER THAN ABOVE JMP CHKCLR /ELSE JUST IGNORE IT IAC /TAD (-"P+"Q)/IS IT <^P>? SNA /SKIP IF NOT JMP PHIT /JUMP IF SO IAC /TAD (-"O+"P)/IS IT <^O>? SNA /SKIP IF NOT JMP DOUO /JUMP IF SO TAD [-"S+"O] /IS IT <^S>? SZA CLA /SKIP IF SO JMP I CHKUP /RETURN IF NOT JMS CTLCTST /WAIT FOR <^Q> TAD [-"Q!300] /IS IT <^Q>? SZA CLA /SKIP IF SO JMP .-3 /GO BACK IF NOT CHKCLR, DCA INCHAR /CLEAR INPUT BUFFER JMP I CHKUP /RETURN DOUO, TAD ("O&177) /GET AN "O" JMS I [CONTPRT] /PRINT "^O" NL4000 /GET INVERSION BIT TAD ECHOSW /INVERT ECHO STATUS DCA ECHOSW /STORE IT BACK JMP CHKCLR /CONTINUE THERE PHIT, DCA ECHOSW /FORCE ECHO ON PHIT2, JMP I .+1 /**** ZAPPED BY ODT **** 0000 UPHIT /HARMLESS "AND" IF EXECUTED TAD ["P&177] /GET "P" JMS I [CONTPRT] /PRINT "^P" JMP BEGIN /RESTART ODT PAGE BKSLSH, TAD VIEWCONTROL /GET VIEW CONTROL WORD CIA /INVERT FOR COUNTING DCA CNT /SAVE AS LINE COUNT TAD NUMB1 /GET THE ADDRESS AND [7770] /JUST LINE BITS DCA DMPAD1 /SETUP OUR ARGUMENT TAD NUMB1 /GET THE ADDRESS WORD AGAIN RAR /INTERNAL MODE BIT TO LINK CLA /CLEAN UP TAD NUMB /GET FIELD ARGUMENT SZL /SKIP IF NORMAL NL7777 /USE INTERNAL MODE DCA DMPADR /SAVE OUR FIELD WORD DCA CASE /CLEAR CASE CODE BKLUP1, JMS I [CRLF] /DO A , NOW JMS I [PRTDBL] /PRINT OUT DMPADR /THE LINE ADDRESS TAD [7770] /SETUP THE DCA TOTAL /ON LINE COUNT BKLUP2, JMS I [LOAD] /GET A WORD DMPADR /FROM LATEST ADDRESS JMS I [PRTOCT] /PRINT IT ISZ DMPAD1 /BUMP TO NEXT NOP /JUST IN CASE ISZ TOTAL /DONE A LINE YET? JMP BKLUP2 /NO, GO DO ANOTHER ONE TAD OTCONTROL /GET CHARACTER MODE AND [7] /JUST GOOD BITS SZA CLA /SKIP IF NULL DISPLAY MODE JMP OUTOK /JUMP IF OTHERWISE BUMPIT, ISZ CNT /DONE ALL YET? JMP BKLUP1 /NO, GO DO ANOTHER LINE JMP BEGIN /YES, RESTART ODT OUTOK, TAD ("*&77) /GET A "*" JMS I [P6CH] /PRINT IT TAD [7770] /SETUP THE DCA TOTAL /WORD COUNT TAD DMPAD1 /GET ADDRESS TAD [7770] /BACKUP DCA DMPAD1 /SAVE AS FORMER VALUE BKLUP3, JMS I [LOAD] /GET THE LATEST WORD DMPADR /FROM OUR ADDRESS DCA TEMP /STASH IT TAD OTCONTROL /GET MODE AND [7] /JUST GOOD BITS TAD (MODTBL-1) /ADD ON TABLE ADDRESS DCA TEMP2 /STASH IT TAD I TEMP2 /GET THE PARTICULAR ADDRESS DCA TEMP2 /SET IT UP JMP I TEMP2 /GO THERE SXBIT, TAD [" &77] /GET INVERSION BIT TRIMD, DCA TEMP2 /CLEAR THE BIT TAD TEMP /GET THE CHARACTER PAIR RTR;RTR;RTR /MOVE OVER TAD TEMP2 /ADD ON INVERSION BIT JMS I [P6CH] /PRINT IT TAD TEMP /GET THE CHARACTER PAIR AGAIN TAD TEMP2 /ADD ON INVERSION BIT JMS I [P6CH] /PRINT IT COMPRT, ISZ DMPAD1 /BUMP THE ADDRESS NOP /JUST IN CASE COMPR2, ISZ TOTAL /DONE ALL YET? JMP BKLUP3 /NO, GO FOR ANOTHER PAIR TAD ("*&77) /YES, GET A "*" JMS I [P6CH] /PRINT IT JMP BUMPIT /CONTINUE THERE SVNBIT, JMS DO7 /DO A SINGLE SEVEN BIT OUTPUT JMP COMPRT /KEEP GOING T3FOR2, NL0001 /GET EVEN/ODD MASK AND DMPAD1 /GET EVEN/ODD BIT SZA CLA /SKIP IF EVEN JMP DOODD /JUMP IF ODD TAD TEMP /GET THE WORD RTR /MOVE DOWN 2 BITS AND (700) /JUST HIGH 3 BITS CLL RTR /MOVE DOWN 4 BITS DCA T3TEMP /SAVE IT JMS DO7 /DO FIRST CHARACTER JMP COMPRT /DONE FOR NOW DOODD, JMS DO7 /DO THE SECOND CHARACTER TAD TEMP /GET THE LATEST AGAIN RTL;RTL;RAL /MOVE DOWN EIGHT TO THE RIGHT AND [17] /JUST 4 BITS TAD T3TEMP /ADD ON FIRST WORD BITS DCA TEMP /STASH IT JMS DO7 /DO THIRD CHARACTER JMP COMPRT /CONTINUE THERE DO7, .-. /DO ONE SEVEN BIT CHARACTER TAD TEMP /GET THE CHARACTER AND (140) /JUST QUADRANT BITS SNA /SKIP IF NOT <^> TYPE JMP DOCNTRL /JUMP IF IT IS TAD [-140] /COMPARE TO LOWER CASE SNA CLA /SKIP IF NORMAL JMP DOLOWR /JUMP IF LOWER CASE CNTRLIN,TAD [" &77] /GET NORMAL JMS I [P6CH] /PRINT IT LOWRIN, TAD TEMP /GET THE CHARACTER ITSELF JMS I [P6CH] /PRINT IT AS TRIMMED ASCII JMP I DO7 /RETURN DOCNTRL,NL7776/TAD ("^-" -100)/"^"-" " JMP CNTRLIN /CONTINUE THERE DOLOWR, TAD ["'&77] /GET A "'" JMS I [P6CH] /PRINT IT TAD [" &77] /GET INVERSION BIT JMP LOWRIN /CONTINUE THERE P6CH, .-. /SIX-BIT PRINT TAD [" &77] /INVERT IT AND [77] /JUST SIX-BIT TAD [" &77] /NOW HAVE SEVEN-BIT JMS P7CH /GO PRINT IT JMP I P6CH /RETURN T3TEMP, .-. /TEMPORARY PAGE CASCODE,TAD TEMP /GET THE LATEST WORD DCA CASTEMP /SAVE IT TAD CASTEMP /GET IT BACK RTR;RTR;RTR /MOVE OVER HIGH-ORDER JMS DOCASE /PRINT LATEST HIGH-ORDER CHARACTER /(PERHAPS (WITH OR WITHOUT CASE AND) /INVERTED) OR JUST SET CASE FLAG TAD CASTEMP /GET THE WORD AGAIN JMS DOCASE /PRINT LATEST LOW-ORDER CHARACTER OR /JUST SET CASE FLAG TAD CASE /GET CURRENT CASE SZA CLA /SKIP IF NORMAL CASE TAD TOTAL /GET WORD COUNT IAC /CHECK IF ABOUT TO OVERFLOW SZA CLA /SKIP IF INVERTED CASE AND LAST CHARACTER ON LINE JMP I (COMPRT) /GO BACK FOR MORE TAD CNT /GET LINE COUNT IAC /CHECK IF ON LAST LINE SNA CLA /SKIP IF NOT LAST LINE JMP CASBLNK /JUMP IF IT IS THE FINAL CHARACTER ISZ DMPAD1 /BUMP TO NEXT NOP /JUST IN CASE NL4000 /SET CASE FOR PRINTING THE CHARACTER ONLY DCA CASE /ON THE NEXT LINE (FIRST TIME THROUGH) JMS I [LOAD] /GET NEXT WORD DMPADR /FROM THIS ADDRESS SMA CLA /SKIP IF LOWER-CASE CHARACTER TAD ["^-"'+7700] /MAKE IT "^" TAD ["'&77] /GET "'" JMS I [P6CH] /PRINT CASE AS LAST CHARACTER ON LINE JMP I (COMPR2) /CONTINUE WITH ADDRESS ALREADY BUMPED CASBLNK,TAD [" &77] /GET A JMS I [P6CH] /PRINT AS FINAL CHARACTER JMP I (COMPRT) /FINISH IT THERE RESRVD, TAD TOTAL /GET THE LINE COUNT TAD (RESMSG+10) /ADJUST TO MESSAGE CHARACTER ADDRESS DCA TEMP /STASH IT TAD I TEMP /GET THE CHARACTER JMS P7CH /PRINT IT JMP I (COMPRT) /KEEP GOING DOCASE, .-. /CASE CODE OUTPUT ROUTINE AND [77] /JUST SIX-BIT DCA TEMP /SAVE IT TAD CASE /GET CURRENT CASE SZA /SKIP IF REGULAR MODE JMP TSTCASE /JUMP IF NOT TAD TEMP /GET THE CHARACTER TAD (-77) /COMPARE TO CASE CHARACTER SNA /SKIP IF OTHERWISE JMP SETINV /JUMP IF IT IS TAD [-37+77] /IS IT THE "?"? SNA /SKIP IF NOT TAD [40] /ADJUST TO "?" TAD (37) /RESTORE TO SIX-BIT CASOUT, JMS I [P6CH] /PRINT IT CASDONE,DCA CASE /ENSURE NORMAL MODE JMP I DOCASE /RETURN SETINV, ISZ CASE /SET INVERTED MODE JMP I DOCASE /RETURN TSTCASE,SPA CLA /SKIP IF INVERTED MODE JMP PRTCASE /JUMP IF SPECIAL CASE TAD TEMP /GET THE CHARACTER AND [40] /JUST QUADRANT BIT CLL RAL /MAKE NEW LOWER-CASE BIT TAD TEMP /ADD ON ORIGINAL DCA TEMP /SETUP FOR SEVEN-BIT PRINT JMS I (DO7) /PRINT IN TWO-CHARACTER FORM JMP CASDONE /FINISH IT THERE PRTCASE,TAD TEMP /GET THE CHARACTER AND (37) /JUST WANT ALPHA AFTER PRIOR "^" OR "'" JMP CASOUT /FINISH IT THERE BCDOUT, TAD TEMP /GET THE WORD RTL;RTL;RAL /MOVE DOWN FIRST BCD DIGIT JMS PBCD /PRINT IT TAD TEMP /GET IT AGAIN RTR;RTR /MOVE DOWN THE SECOND BCD DIGIT JMS PBCD /PRINT IT TAD TEMP /GET THE THIRD BCD DIGIT JMS PBCD /PRINT IT JMP I (COMPRT) /FINISH IT THERE PBCD, .-. /HEXADECIMAL BCD PRINT ROUTINE AND [17] /JUST 4 BITS TAD [-11] /COMPARE TO NINE SPA SNA /SKIP IF GREATER THAN NINE TAD ("0&77+11) /ADJUST TO ASCII JMS I [P6CH] /PRINT IT JMP I PBCD /RETURN MODTBL, TRIMD /1=USE TRIMMED ASCII SXBIT /2=USE INVERTED SIX-BIT ASCII CASCODE /3=USE CASE-CODE SIX-BIT ASCII SVNBIT /4=USE SEVEN-BIT ASCII T3FOR2 /5=USE 3 FOR 2 PACKED SEVEN BIT ASCII BCDOUT /6=USE 3 BCD DIGITS PER WORD RESRVD /7=USE RESERVED MESSAGE CASTEMP,.-. /TEMPORARY RESMSG, "R;"E;"S;"E;"R;"V;"E;"D /"RESERVED" MESSAGE PAGE IFNZRO .&177 ODT= . /ODT SYSTEM STARTS HERE ODT, NOP /IN CASE WE ARE CHAINED TO NL7777 /REMOVE THE DCA I [DSPADR] /BREAKPOINT DISPLAY JMS I (RMVBRK) /REMOVE ALL BREAKPOINTS, FORMATTING THE TABLE ISZ N /SET DEFAULT "N" JMS I (SETUNIT) /SETUP ALL BOOTSTRAP UNIT FUNCTION BITS JMS I [CORMOVE] /LINK IS CLEAR, SO RELOAD CORE DCA I [PHIT2] /RESTORE NORMAL <^P> HANDLING JMS I (CORSIZE) /FIND LARGEST FIELD AND POSSIBLE CONSOLE SETUP TAD I (SBLOCK) /GET OUR LOAD BLOCK DCA I (OBLK+BRK3-OAC) /STORE FOR RELOADING TAD I (SBLOCK) /GET IT AGAIN TAD (BRKTBL%200) /ADD ON OFFSET DCA I (ODBLK) /SAVE BLOCK WHERE BREAK TABLE IS TAD I (SFUN) /GET OUR FUNCTION WORD AND [7] /JUST UNIT BITS TAD I (OFUN+BRK3-OAC) /ADD ONTO RELOAD FUNCTION DCA I (OFUN+BRK3-OAC) /STORE BACK UPDATED VALUE TAD I (SFUN) /GET IT AGAIN AND [7] /JUST UNIT BITS TAD I (ODFUN) /ADD ONTO WRITE TABLE FUNCTION WORD DCA I (ODFUN) /STORE BACK UPDATED VALUE JMP BEGIN /NOW STARTUP ODT FOR REAL BURP, IOF /PREVENT PROBLEMS TAD I (OPC) /GET APPARENT USER P. C. SNA CLA /SKIP IF FIELD 0 CASE JMP XMBURP /JUMP IF EXTENDED MEMORY TRAP DCA TRPADR /INDICATE FIELD 0 TAD I [OAC] /GET THE SAVED AC DCA AC /SAVE IT TAD I [OLINK] /GET THE SAVED LINK AND DATA FIELD XMBENT, AND [70] /JUST FIELD BITS DCA DFIELD /SAVE AS DATA FIELD TAD DFIELD /GET IT BACK DCA FFIELD /SAVE AS SEARCH FIELD NL7777 /BACKUP FOR JMS TAD I (OPC) /GET CALLING P. C. DCA TRPAD1 /STASH IT XMBCDF, CDF 00 /BACK TO FIELD 0 JUST IN CASE NL0001 /SETUP LINK MASK AND I [OLINK] /GET THE LINK BIT DCA LINK /STASH IT JMS I (SETUNIT) /SETUP ALL BOOTSTRAP UNIT FUNCTION BITS JMS I (CORSIZE) /SIZE UP CORE, ETC. JMS I [GETBRK] /TRY TO FIND THE BREAKPOINT TRPADR-1 /THAT GOT US HERE JMP BADTRP /BARF BADBAK, TAD I (OFUN) /GET OUR LOAD FUNCTION DCA I (OFUN+BRK3-OAC) /STORE INTO HOLDING LOCATION TAD I [OBLK] /GET OUR LOAD BLOCK DCA I (OBLK+BRK3-OAC) /STORE INTO HOLDING LOCATION TAD I [OBLK] /GET OUR LOAD BLOCK TAD (BRKTBL%200) /ADD ON TABLE OFFSET DCA I (ODBLK) /STORE IN TABLE SAVE CALL TAD I (OFUN) /GET OUR FUNCTION AGAIN AND [7] /JUST UNIT BITS TAD I (ODFUN) /ADD ON TABLE SAVE FUNCTION WORD DCA I (ODFUN) /STORE BACK UPDATED VALUE JMP I (READBRK) /CONTINUE THERE BADTRP, ISZ CONTSW /PREVENT BAD CONTINUES BADTLP, TAD I CASE /GET A CHARACTER SNA /SKIP IF MESSAGE CHARACTER JMP BADBAK /JUMP IF END OF MESSAGE JMS P7CH /GO PRINT IT ISZ CASE /BUMP TO NEXT JMP BADTLP /GO FOR THE NEXT ONE XMBURP, TAD I [OAC] /GET CALLING FIELD DCA TRPADR /STASH IT TAD I [OAC] /GET IT AGAIN TAD XMBCDF /MAKE INTO CDF CALLING FIELD INSTRUCTION DCA .+1 /STORE IN-LINE .-. /AND EXECUTE IT TAD I [XBRKAC] /GET SAVED AC DCA AC /STASH IT TAD I [XBRKDF] /GET SAVED DATA FIELD JMP XMBENTRY /CONTINUE THERE MSG, 7 / STARTS BAD BREAKPOINT MESSAGE 15 / 12 / "I&177 /I "L&177+40 /L "L&177+40 /L "E&177+40 /E "G&177+40 /G "A&177+40 /A "L&177+40 /L " &177 / "B&177 /B "R&177+40 /R "E&177+40 /E "A&177+40 /A "K&177+40 /K "P&177+40 /P "O&177+40 /O "I&177+40 /I "N&177+40 /N "T&177+40 /T "!&177 /! 15 / 12 / 0 /THIS ENDS THE LIST PAGE CORSIZE,.-. /CORE SIZE-UP AND CONSOLE TEST ROUTINE MQA /GET THE MQ DCA MQ /SAVE IT TAD I [SCRSIZE] /GET CORE SIZE WORD AND [70] /JUST LCS BITS TAD [10] /TO NEXT FIELD CIA /INVERT IT DCA HIFELD /SAVE FOR ODT'S USE TAD I [SBOOT] /GET BOOTSTRAP INSTRUCTION TAD (-JMSSYSIO) /COMPARE TO POSSIBLE VALUE SNA CLA /SKIP IF DIFFERENT JMP CHKCOVRLAY /JUMP IF IT MATCHES ISZ I (CHKKRS) /TURN "KRSIOT" ISZ I (CHKKRS) /INTO "KRBIOT" DCA I (CHKKCC) /DESTROY "KCCIOT" CHKCOVR,NL0002 /SET "C" BIT MASK AND I [SCRSIZE] /GET THE "C" BIT SNA CLA /SKIP IF CONSOLE OVERLAY PRESENT JMP I CORSIZE /ELSE JUST RETURN TAD I [SCRSIZE] /GET THE CORE SIZE WORD AGAIN RTR;RAR /MOVE OVER AND AND [70] /ISOLATE MCS BITS TAD (CIF 10) /TURN INTO CIF MCS+10 DCA P7TSF /STORE OVER "TSFIOT" TAD P7JMP /GET "JMP I P7OUT" DCA P7TLS /STORE OVER "TLSIOT" TAD (JMS OUTCON) /GET OUTPUT CALL INSTRUCTION DCA P7JMP /STORE OVER "JMP I P7OUT" TAD (SKP) /GET SKIP INSTRUCTION DCA I (CONTENT+1) /SO WE DON'T WAIT FOR TTY: TO FINISH TAD (SKP) /GET SKIP INSTRUCTION DCA I (TIMAGN) /PREVENT TTY: TIMEOUT TESTING TAD P7TSF /GET "CIF MCS+10" DCA I (CHKKSF) /STORE OVER "KSFIOT" TAD I (CHKJMP) /GET "JMP I CTLCTST" DCA I (CHKKRS) /STORE OVER "KRSIOT" (OR "KRBIOT") TAD (JMS INCON) /GET INPUT CALL INSTRUCTION DCA I (CHKJMP) /STORE OVER "JMP I CTLCTST" DCA I (CHKKCC) /DESTROY "KCCIOT" JMP I CORSIZE /RETURN SETUNIT,.-. /UNIT SETUP ROUTINE BUTUNIT,TAD I (SBTFUN) /GET SYSTEM BOOTSTRAP UNIT SETEMP, AND [7] /JUST UNIT BITS DCA BUTUNIT /SAVE FOR LATER UFIXUP, TAD I VLSTPTR /GET AN ADDRESS SNA /SKIP IF VALID JMP I SETUNIT /RETURN IF END OF LIST DCA SETEMP /ELSE STASH IT TAD I SETEMP /GET THE VALUE TAD BUTUNIT /ADD ON UNIT BITS DCA I SETEMP /STORE BACK ISZ VLSTPTR /BUMP TO NEXT JMP UFIXUP /KEEP GOING VLSTPTR,.+1 /POINTER TO FIXUP LOCATIONS BRKFNCT+BRK3-OAC /CORE-SAVE FUNCTION DURING A TRAP CORFNCT /NON-VIRTUAL CORE READ/WRITE FUNCTION DMPFNCT /VIRTUAL CORE DUMP FUNCTION RLCFNCT+BRK2-SLOAD /VIRTUAL CORE READ-BACK FUNCTION DURING USER SETUP SFUN+STRCODE-SLOAD /SYSTEM LOADER IMAGE FUNCTION WORD FOR "S" COMMAND VMRFNCT /VIRTUAL CORE READ FUNCTION 0 /THIS ENDS THE LIST PAGE ODTEND= . /END OF ODT CODE FOR RELOAD PURPOSES $ /HERE COME THE LITERALS!