SUBTTL DDT /TW/PFC/TWE/EJW/JNG/RDH/DIB/DLM/JBS/PTR/JM/RCB 18-Sep-89 COMMENT \ DDT -- "Dynamic Debugging Technique" for TOPS-10/TOPS-20 ;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1970,1980,1983,1984,1987,1988,1989. ;ALL RIGHTS RESERVED. ; ; ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ;TRANSFERRED. ; ;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ;CORPORATION. ; ;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ;SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL. \ ;DDT VERSION IDENTIFICATION MAJVER==45 ;MAJOR VERSION LEVEL MINVER==1 ;MINOR (MAINTENANCE RELEASE) LEVEL CSTVER==0 ;CUSTOMER VERSION (WHO LAST . . .) EDTVER==715 ;EDIT LEVEL %%DDT==: IF2 ; TABLE OF CONTENTS FOR DDT ; ; ; SECTION PAGE ; 1. REVISION HISTORY.......................................... 5 ; 2. DDT ASSEMBLY SWITCHES..................................... 10 ; 3. TITLE AND VERSION SETTING................................. 11 ; 4. OPDEFS, MACROS, ETC....................................... 12 ; 5. DDT SYMBOLS............................................... 16 ; 6. GLOBAL SYMBOLS FOR USE BY THE OUTSIDE WORLD............... 17 ; 7. MEMORY ALLOCATION PARAMETERS.............................. 18 ; 8. MISCELLANEOUS DDT SYMBOLS................................. 20 ; 9. FILDDT ; 9.1 COMMAND SCANNER................................... 25 ; 9.2 SETUP PAGE BUFFERS AND SYMBOLS.................... 53 ; 10. START DDT................................................. 59 ; 11. DDT COMMAND PARSER........................................ 60 ; 12. COMMAND DISPATCH TABLE.................................... 65 ; 13. COMMAND ROUTINES ; 13.1 CLASS 1........................................... 66 ; 13.2 CLASS 2........................................... 84 ; 13.3 CLASS 3........................................... 85 ; 13.4 CLASS 4........................................... 86 ; 13.5 CLASS 5........................................... 87 ; 13.6 CLASS 6........................................... 89 ; 13.7 REGISTER DEPOSIT AND OPEN......................... 89 ; 13.8 RETYPE LAST QUANTITY.............................. 97 ; 13.9 TYPEOUT MODE CONTROL.............................. 98 ; 13.10 LIMITS AND PATCHING............................... 100 ; 13.11 MEMORY AND PAGING CONTROL......................... 105 ; 13.12 BREAKPOINT FACILITY............................... 111 ; 13.13 EXECUTE AND SINGLE STEP........................... 118 ; 13.14 PUNCH PAPER TAPE.................................. 144 ; 13.15 SEARCHING......................................... 148 ; 13.16 COMMAND FILE INPUT................................ 150 ; 13.17 MISCELLANEOUS COMMANDS............................ 153 ; 14. FILE SPECIFICATION PARSING AND ERROR ROUTINES............. 159 ; SECTION PAGE ; 15. ENTER AND LEAVE DDT ; 15.1 SAVE.............................................. 169 ; 15.2 RESTOR............................................ 174 ; 15.3 SWAP.............................................. 176 ; 15.4 BCOM.............................................. 177 ; 16. WORD TYPEOUT AND FORMATTING ROUTINES...................... 180 ; 17. OUTPUT SUBROUTINES........................................ 187 ; 18. SYMBOL TABLE ROUTINES ; 18.1 CHECK POINTERS.................................... 192 ; 18.2 CONVERT SYMBOL TO VALUE........................... 194 ; 18.3 CONVERT VALUE TO SYMBOL........................... 196 ; 18.4 HARDWARE OPCODE PROCESSING........................ 199 ; 18.5 FIND PROGRAM NAME................................. 209 ; 18.6 REMOVE AN UNDEFINED SYMBOL........................ 210 ; 18.7 SYMSET, USYSET, AND ADVSYM........................ 211 ; 19. MEMORY MANAGEMENT ROUTINES ; 19.1 FETCH............................................. 218 ; 19.2 DEPOSIT........................................... 226 ; 19.3 ADDRESS MAPPING................................... 238 ; 19.4 PHYSICAL MEMORY................................... 243 ; 19.5 FILDDT I/O........................................ 246 ; 19.6 SYMBOL TABLE ACCESS............................... 252 ; 19.7 ADDRESS CHECKING.................................. 259 ; 19.8 MISCELLANEOUS..................................... 270 ; 20. PRESERVATION ROUTINES..................................... 286 ; 21. TELETYPE IO LOGIC ; 21.1 DEFINITIONS....................................... 288 ; 21.2 INPUT ROUTINES.................................... 291 ; 21.3 LINE BUFFERING ROUTINES........................... 295 ; 21.4 UTILITY ROUTINES.................................. 312 ; 21.5 OUTPUT SUBROUTINES................................ 319 ; 21.6 SAVE/RESTORE...................................... 324 ; 22. STORAGE ; 22.1 LITERALS AND END OF CODE.......................... 336 ; 22.2 ALLOCATION MACROS................................. 337 ; 22.3 MISCELLANEOUS..................................... 339 ; 22.4 $X LOGIC AND PATCH COMMAND........................ 341 ; 22.5 BREAKPOINTS....................................... 342 ; 22.6 SYMBOL TABLE LOGIC................................ 344 ; 22.7 ADDRESSING DATA................................... 346 ; 22.8 SAVE AREAS FOR PREVIOUS CONTEXT................... 347 ; 22.9 STATE VARIABLES................................... 349 ; 22.10 FILDDT............................................ 350 ; 22.11 PUSH DOWN LIST.................................... 353 SUBTTL REVISION HISTORY ;THE REVISION HISTORY STARTS SUDDENLY AT EDIT 200 ; ; DDT %37(200) RDH 14-NOV-76 ;200 RDH 14-NOV-76 SPR 10-17714 ; VALIDITY-CHECK THE SYMBOL POINTER FOR THE HIGH-SEG SYMBOL ; TABLE (.JBHSM) RATHER THAN ARBITRARILY BELIEVING IT (AND ; SUBSEQUENTLY ILL MEM REF'ING, ETC.). ;201 RDH 14-NOV-76 SPR 10-18806 ; MORE OF EDIT 200, AT DEF1: ;202 RDH 14-NOV-76 SPR 10-19661 ; TREAT THE MAP INSTRUCTION "E" FIELD AS AN IMMEDIATE QUANTITY ; RATHER THAN AS A MEMORY REFERENCE. ;203 RDH 14-NOV-76 ; EXPAND FILDDT TO HANDLE FULL 22-BIT ADDRESSING IN EXE-FORMAT ; FILES (SPECIFICALLY CRASH.EXE). ;204 RDH 14-NOV-76 SPR 10-20165 ; IMPLEMENT SPECIAL BYTE-FORMAT TYPEOUT FOR THE VARIOUS ; BYTE MANIPULATION INSTRUCTIONS. CODE COURTESY OF THE ; UNIVERSITY OF ARIZONA. ;205 RDH 15-NOV-76 ; PUT TAG PTDFLG: UNDER FTYANK RATHER THAN FTEXEC!FTFILE FOR ; THOSE SITES THAT WISH TO TAKE THEIR CHANCES WITH $Y IN EITHER ; UDDT OR VMDDT (NOTE: $Y USES I/O CHANNEL 17 - BE WARNED) ;206 RDH 4-DEC-76 ; REWRITTEN CODE IN CHKADR (TO BETTER HANDLE KL'S) FORGOT HOW ; KA'S WORKED AND LOST THE APR PI ASSIGNMENT. ;207 RDH 4-DEC-76 ; IMPLEMENT "/D" FOR FILDDT -- TREAT FILE SPECIFIED AS PURE ; DATA FILE - DON'T CRUMP ON FIRST 20 LOCATIONS (THE "ACS"), ; DON'T LOOK FOR SYMBOL TABLE. IF NOT .EXE FORMAT AND NOT .XPN ; FORMAT THEN "/D" IS ASSUMED. ;210 RDH 6-DEC-76 ; EXTEND THE $M COMMAND -- $M -- WHERE IS THE ; MASK NUMBER AND IS THE ASSOCIATED MASK. ; ; = 0 OR NOT-SPECIFIED THEN IS THE SEARCH MASK ; = 1 THEN IS TTY CONTROL MASK: ; 1B35 = 1 THEN "ECHO" 'S AS ;211 RDH 6-DEC-76 ; NEW ASSEMBLY PARAMETER "SKPMAX" TO SET MAXIMUM NUMBER OF ; LOCATIONS SKIPPED FOR $X LOGIC. IF $X THEN TYPE ; FOR EACH LOCATION SKIPPED. IF $$X THEN DO INDEFINITE ; $X UNTIL OLD-PC .LT. NEW-PC .LE. OLD-PC+SKPMAX ;212 RDH 7-DEC-76 ; MATCH ANGLE BRACKETTS -- << ; WHEN PATCHING ($>) DON'T INSERT A 0 WORD UNLESS USER EXPLICITLY ; TYPED IT - I.E., ALLOW THE $> TO APPEAR BY ITSELF - THE WAY MOST ; PEOPLE TEND TO USE IT. ;213 RDH 9-DEC-76 ; CHANGE SKIPN'S TO SKIPE'S IN [207] AND CAILE TO CAIL IN [210] ;214 RDH 18-DEC-76 ; MATCH ANGLE BRACKETTS IN EDIT [212] COMMENTS TO KEEP VARIOUS ; AND SUNDRY PEOPLE HAPPY. ;215 RDH 19-DEC-76 ; IF SPYSEG THEN NO HISEG SYMBOL TABLE. ;216 RDH 19-DEC-76 ; CHKHSM ROUTINE ([200],[201]) IS TOO RESTRICTIVE, WON'T ALLOW ; .JBHSM TO POINT TO LOW SEG; CHKADR ROUTINE WON'T ALLOW RANDOM ; NON-CONTIGUOUS PAGES. ;217 RDH 19-DEC-76 ; NAMSET ROUTINE (TO HANDLE MODULE$:) ASSUMES HIGH SEGMENT ALWAYS ; STARTS AT 400000, LEADING TO SUBSEQUENT ILL MEM REF'S. ;220 JNG 28-JAN-77 ; PREVENT ILL MEM REF ON PATCH CLOSE WHEN USING A WRITE-LOCKED ; (E.G. HISEG) SYMBOL TABLE. ;DDT %40(220) MARCH, 1977 ;221 TAH 13-MAR-77 ; ADD COMMAND FRONT END TO INTERFACE FILDDT TO TOPS-20 SYSTEM. ; ADD KL PAGING CODE TO CVTADR, ALL UNDER FTFD20 CONDITIONAL ; (FTFILE MUST STILL BE ON ALSO). ;222 ASM 13-MAR-77 ; IN EXEC DDT DETERMINE EXEC VIRTUAL ADDRESS OF EPT BY SCANNING ; EXEC VIRT ADR SPACE IF PAGING IS ON. ;223 TAH 13-MAR-77 ; MAKE LPDL LARGER FOR TOPS-20 MDDT ;224 RDH 13-MAR-77 ; MAKE SEARCHES HANDLE NON-CONTIGUOUS CORE/FILE IMAGES, ADD ; TWO NEW ASSEMBLY PARAMETERS: ; ; INDPTH ;MAX INDIRECT NESTING FOR $E SEARCHES ; LISCNT ;NUM OF 'S TWEEN INCHRS'S ;225 RDH 13-MAR-77 ; HANDLE TYPEOUT RADIX .GE. 10 (E.G., HEX) MORE GRACEFULLY ;226 RDH 13-MAR-77 ; EDIT 215 IS WRONG, .GTSGN == 14 ;227 JNG 13-MAR-77 ; ADD CODE TO DDT TO WRITE-ENABLE PAGES ON TOPS-20 BEFORE ; ATTEMPTING TO WRITE THEM - E.G., FOR BREAKPOINTS, PATCHS, ; AND SO FORTH. IF PAGE NOT WRITE-ENABLED, SET COPY-ON-WRITE ; SO AS NOT TO ZAP OTHER USERS "SHARING" THE PAGE. ;230 RDH 13-MAR-77 ; WHEN IN A COMMAND FILE ($Y) THEN DO NOT CHECK THE COMMAND ; FILE FOR INPUT ON CALLS TO LISTEN - ONLY ACCEPT PHYSICAL ; TTY INPUT. ;231 RDH 14-MAR-77 ; CLEAR $U POINTERS IN FILDDT ON ^Z, START SEQUENCE ;232 RDH 14-MAR-77 ; UPDATE LH(.JBSA) ON PATCH END IF .JBFF WAS DEFAULTED TO ; ON PATCH BEGIN. THIS WAY THE PATCH IS AT LEAST SAVED ON ; SAVE'S, RESET'S, AD NAUSEUM. ;233 RDH 14-MAR-77 ; REVAMP PATCH LOGIC ($< AND $>) TO DISPLAY LOCATION BEFORE ; MODIFYING SAME LOCATION SO THAT FILDDT CAN PATCH RUNNING ; MONITOR (ALSO LOOKS NEATER). ;234 RDH 23-MAR-77 ; ADD NEW "MASK" COMMAND $2M TO SET THE SYMBOL OFFSET RANGE ; (I.E. THE RANGE IN WHICH VALUES WILL BE TYPED IN THE FORM ; SYMBOL+) TO . ADD ASSEMBLY PARAMETER "ADRNGE" ; AS THE DEFAULT VALUE. ALSO MAKE $1M/ ETC. WORK. ;235 RDH 24-MAR-77 ; REVAMP BYTE TYPEOUT LOGIC: ADD $3M AS BYTE TYPEOUT MASK ; (EACH "1" BIT IN THE MASK MARKS THE END OF A BYTE, BIT 35 ; IS ALWAYS CONSIDERED THE END OF A BYTE). FOR VALUES OF ; SUCH THAT 1 .LE. .LE. 36(10) THE COMMANDS $O & $$O ; WORK AS USUAL BY SETTING AN INTERNAL BYTE MASK. FOR = 0 ; THE $3M BYTE MASK WILL BE USED. FOR = (I.E. THE ; $O COMMAND) THE CURRENTLY PREVAILING $O OR $$O MASK WILL ; BE USED IF NON-BLANK, ELSE THE $3M MASK WILL BE USED. ; $$O MAKES PERMANENT THE CURRENTLY PREVAILING $O (OR $$O) ; BYTE MASK. ;236 RDH 14-APR-77 ; ADD IFN FTYANK CONDITIONALS SO THAT FILDDT CAN BE ASSEMBLED ; WITH FTYANK TURNED OFF. ;237 RDH 17-APR-77 ; GENERAL CLEANUP AND REARRANGEMENT. MAKE TOPS-10 DDT SEARCH ; THE "C" UNIVERSAL FILE. TYPE OUT "DDT" WHEN USER MODE DDT ; IS ENTERED. PUT TOPS-10-SPECIFIC CODE UNDER "IFN FTDEC10" ; RATHER THAN "IFE FTDEC20". ;240 RDH 15-JUN-77 ; ADD CODE TO TYPE OUT SYMBOLIC WORDS WITH USER-DEFINED SYMBOLS ; SUCH AS THE CALLI OR JSYS MNEMONICS. ORDER OF SEARCH IS: ; 1) OPCODE & AC & I & X & Y FIELDS ; 2) OPCODE & I & X & Y FIELDS (E.G. CALLI OR JSYS) ; 3) OPCODE & AC FIELDS (E.G. TTCALLS) ; 4) OPCODE ONLY ; 5) HARDWARE-KNOWN OPCODE (JRST, ETC.) ; PUT CODE UNDER FTOPX .NE. 0 CONDITIONAL SINCE UNTIL SORTED ; SYMBOL TABLES AVAILABLE THIS CODE TAKES MUCH RUN TIME. ; ALSO MAKE TRXX AND TLXX TYPE OUT ADDRESS AS OCTAL RATHER ; THAN SYMBOL+OFFSET. ;241 RDH 15-SEP-77 SPR # 10-22011 ; "777777" COULD GET TYPED OUT AS "-1" WHEN $X'ING IF THE ; AC BEING TYPED OUT WAS TYPED OUT IN XWD FORMAT. ;242 RDH 16-SEP-77 SPR # 10-22616 ; "AOS UND#(AC)" LOST BOTH THE UND SYMBOL AND THE AC IN ; THE WORD BEING BUILT (I.E., LEFT ONLY THE AOS). ;243 RDH 16-SEP-77 SPR # 10-22788 ; PATCHING WITH FILDDT WRONG IF NONE OF THE USUAL PATCHING ; SYMBOLS (PAT.., PAT, PATCH) ARE PRESENT AND THUS PATCHING ; DEFAULTS TO C(.JBFF) - THE .JBFF USED WAS FILDDT'S, NOT ; THE FILE'S. ;244 RDH 16-SEP-77 SPR # 10-22894 ; SOME RUBOUT'S STILL GET TYPED OUT. ;245 RDH 17-SEP-77 SPR # 10-23013 ; AFTER REFERENCING AN UNDEFINED SYMBOL, THE UNDEFINED SYMBOL ; IS LEFT IN THE SYMBOL CACHE WITH ITS BOGUS VALUE (E.G., THE ; ADDRESS TO FIX UP). ;246 RDH 25-SEP-77 ; BE MORE CHOOSEY ABOUT TYPE-IN INVOLVING UNDEFINEDS - CATCH ERRORS ; SUCH AS "PUSHJ UND#,FOO" OR "MOVE 4,(UND#)" ;247 RDH/JNG 16-OCT-77 TO 28-JUN-78 ; MASSIVE DEVELOPMENT AND REVAMPING: EXTENDED ADDRESSING; JSYSIZE FILDDT; ; REMOVE SYMBOL CACHE; ADD $0W AND $1W; DISK SUPER I/O (FILDDT); ; PHYSICAL MEMORY ADDRESSING; KS-10 SUPPORT; KI/KL PAGING SUPPORT; ; $Z; $8T AND $9T; $.; $U ENHANCEMENTS; $B ENHANCEMENTS; $X EN- ; HANCEMENTS; DECOMMIT EXEC PAPER TAPE STUFF; SYMBOLIC TYPEOUT ; ENHANCEMENTS; $Y ENHANCEMENTS (TOPS-10 ONLY); NUMEROUS RANDOM ; BUG FIXES. CALL VERSION 41. ;250 JNG 15-AUG-78 ; SEARCH UUOSYM, MACTEN INSTEAD OF C. ;DDT %40A(250) OCTOBER, 1978 ;251 JNG/RDH 15-AUG-78 TO 26-JAN-79 ; CONTINUING AND FIXING BUGS IN 247: IMPLEMENT HISEG SYMBOL TABLES ; IN FILDDT; ALLOW THE SYMBOL TABLE TO BE IN ANOTHER ADDRESS SPACE ; FOR EDDT AND MDDT; ADD $: WITH NO ARGUMENT; ADD "M" ERROR. ;252 JNG 4-FEB-79 ; CHANGE HIDDEN SYMBOL LOGIC TO DO EXEC VIRTUAL BLT'S INSTEAD ; OF SWITCHING THE EPT BASE ADDRESS. ;253 DIB 8-MAR-79 ; INSERT A NEW SYMBOL TABLE CACHE FOR OUTPUT ONLY. ALSO MOVE ; DATA PAGES BELOW CODE PAGES SO SYMBOL CACHE WILL FIT IN UDDT. ;254 JNG/RDH 8-MAR-79 ; GET FAKEAC LOGIC RIGHT IN $U COMMANDS. BROKEN BY 251. ONLY ; SETUP .JBVER IF FILDDT. ADD /A (ABORT ON COMMAND ERROR) FOR ; $Y. MAKE ^W WORK MORE REASONABLY ON -10. MAKE FANCY RUBOUT ; HANDLING AUTOMATIC ON -10 (7.01 ONLY). ADD $$. AS PREVIOUS ; $. (USEFUL FOR $$.<$$X ETC.). ; (MATCH ANGLE BRACKETS:>) ;255 RDH 31-MAR-79 ; LOST INSTRUCTION IN EDDT FOR KI-10'S. SUPPRESS ADDRESS BREAKS ; IN FETCH AND STORE LOGIC. IF $$X'ING (OR $W'ING (SEARCHING) ; OR $Z'ING (DEPOSITING)) AND USER TYPES A ? THEN GIVE A QUICKIE ; TYPEOUT STATUS. SECOND FIELD TEST FOR TOPS-10 7.00. ;256 RDH 17-APR-79 ; RANDOM VERSION 41 BUGS (IN PARTICULAR $P OF A BREAKPOINT CAUSED ; BY XCT'ING A BREAKPOINT LOCATION FAILED). HANDLE ERCAL/JMP ON ; $P. HANDLE INIT UUO. ;257 JNG 21-APR-79 ; CONVERT $U COMMAND TO FUNCTION CODES. ;260 RDH 13-MAY-79 ; ADD ADR$V COMMAND TO "WATCH" A LOCATION AND REPORT ANY CHANGE IN ; ITS CONTENTS (ADR DEFAULTS TO LAST LOCATION OPENED). ;261 RDH 22-MAY-79 ; STUPID LITTLE BUGS. ;262 RDH 8-JUL-79 ; XJRSTF AND FRIENDS WANT ALL 36 BITS OF PC FLAGS, NOT JUST THE ; LEFT-MOST 18 BITS. $I+3 IS 36-BIT PC FLAGS, $I+4 IS 36-BIT PC. ;263 RDH 16-JUL-79 ; MORE STUPID LITTLE BUGGIES. IN PARTICULAR, N$P BROKE. ;264 DZN 25-OCT-79 ; REPLACE SUB IN LOOKDN WITH EQUIVALENT CODE THAT DOESN'T OVERFLOW. ;265 DZN 6-NOV-79 ; REMOVE MULTIPLY-DEFINED GLOBALS $nB, $I, $M WHEN KDDT AND MDDT ARE ; LOADED TOGETHER. ;DDT %41(265) RELEASED MAY, 1980 ;VERSION 41A BEGINS ;266 DIB 18-FEB-80 ; ADD RP20 SUPPORT TO FILDDT. ;267 BPK 11-APR-80 ; REPLACE SUB IN LOOK10 WITH EQUIVALENT CODE THAT DOESN'T OVERFLOW. ;270 BPK 17-APR-80 ; TURN OFF CTRL-O WHENEVER WE STOP AT A BREAKPOINT. ;271 DLM 4-OCT-79 ; FLAG IN TTYMSK FOR INST TYPEOUT ON BPT; WARNING IF BPT INSERTION/REMOVAL ; FAILS; DIAGNOSTICS ON MEM REF FAILURE; RUN IN NON-0 SEC IF POSSIBLE. ;272 JBS 9-NOV-80 SPR 10-30155 ; ADD ^E TEXT TO -10 HELP MESSAGE. ;273 JBS 10-NOV-80 SPR 10-30019 ; FIX OVERFLOW IN ADD INSTR. AT L4+18. ;274 JBS 12-NOV-80 SPR 10-30058 ; FIX SUB AT DOITX0 THAT SET CARRY1 AND CARRY0 IN USER CONTEXT. ;275 JBS 14-NOV-80 ; FIX ERJMP/ERCAL $X ROUTINES TO AGREE WITH EDIT 274. ;276 JBS 17-NOV-80 SPR 10-30156 ; MOVE "PUSH" OUT OF CONDITIONALS TO AGREE WITH "POP" IN RDBIN. ;277 JBS 18-NOV-80 SPR 20-15067 ; FIX $ AFTER $. ;300 JBS 19-NOV-80 SPR 10-30237 ; ADD USER TTY CONTROL BIT FOR $Y ECHO DURING FILE READ/EXECUTION. ;301 JBS 25-NOV-80 ; ALL KINDS OF MISC. EDITS TO FIX LITTLE THINGS HERE AND THERE. ;302 JBS 3-DEC-80 SPR 10-30277 ; FIX MOVING OF PAT.. IN $< MODE. ;303 JBS 4-DEC-80 ; MAKE $Z ABORT WITH "?" IF ANY MEM. WRITE FAILS, REMOVE $$Z, ; MOVE /H TEXT AROUND FOR -10 VERSION, FIX EXTENDED ADDRESSING BUG. ;304 JBS 10-DEC-80 SPR 10-30337 ; FIX ILDB TYPEOUT IN EXTENDED ADDRESSING MODE - WAS MESSING UP SECTION # ; WHEN AN AC WAS USED. ;305 JBS 29-DEC-80 ; REMOVE TEMPORARY PATCH THAT BYPASSED MACRO BUG, REVISE EDIT 300. ;306 JBS 29-DEC-80 SPR 10-30404 ; ADD $$1X FEATURE TO DO QUICKER $$X BY NOT CHECKING FOR DANGEROUS ; INSTRUCTIONS. USED OVER LONG BUT SAFE PUSHJ'S, ETC. ;307 JBS/RDH 30-JAN-81 ; SETUP LOCATION .JBBPT WITH $0BPT FOR TOPS-10 USER/EXEC DDT'S, ; CHANGE FLOATING OUTPUT SUBROUTINE "TFLOT" TO USE "FLOUT" JSYS ON ; TOPS-20, ADD $2F DOUBLE-PRECISION FLOATING TYPEOUT ON TOPS-20, ; ALLOW READING $M AND $U MASKS IN FILDDT (SPECIAL-CASE THEM), ; REMOVE $L PAPER TAPE PUNCH CODE, ADD $[ANY DIGIT] COMMAND TO ; ABORT PATCH INSERT MODE, MAKE $[ANY DIGIT]< ILLEGAL, ; CLEAR "PATCH MODE" FLAG AND RESET LOCATION POINTERS AT START-UP, ; DON'T ALLOW NESTED PATCHING, CHANGE AND ^H TO RECOGNIZE ; DOUBLE-WORD MODE ON TOPS20 (I.E., DOUBLE PRECISION FLOATING TYPEOUT), ; CHANGE $X CODE TO CLEAR INPUT BUFFER AND RESET ^O BEFORE NEXT ; INSTRUCTION TYPEOUT. ; (MATCH ANGLE BRACKETS IN [302] >) ;310 JBS 22-JAN-81 SPR 20-15518 ; CHANGE HANDLING OF TEXT INSERTION - AUTOMATICALLY CLOSE LOCATION ; UPON RECEIPT OF TEXT DELIMITER. ;311 JBS 6-FEB-81 ; REDEFINE PATCH ABORT COMMAND TO $0>, FIX BREAKPOINT TYPEAHEAD ; CLEARING BUG - WAS MUNCHING FIRST CHR. TYPED AFTER BREAKPOINT ; STUFF BEGAN TYPING OUT, FIX FILDDT BUG WHICH WOULD SETUP PAGTBL ; WRONG (SOMETIMES) FOR PAGES OVER 4000, CHANGE TEXT INSERTION MODE ; SO IT WON'T FORCE A CRLF IF A LOCATION IS OPEN BUT NOTHING HAS ; BEEN DEPOSITED YET (REVISION OF EDIT 310), REINSTALL EDIT 273 ; WITH A CHANGE (EDIT 303 REMOVED EDIT 273). ;312 RDH/JBS 4-MAR-81 ; (<, MAKE A BOTCHED ; PATCH-INSERT FIX PTLOC BEFORE LOSING, MAKE $N> SET MAXIMUM SKIP ; RETURNS FROM PATCH (N=1 GIVES 1 JUMPA, ETC.), FIX BUG THAT WOULD SET ; "." TO ZERO AFTER ^C/DDT COMMANDS, ADD $0T/$$0T COMMAND TO TYPE THE ; ASCIZ STRING STARTING AT ".", MAKE XMOVEI TYPE OUT AC CONTENTS AFTER ; $X. ;313 JBS 10-APR-81 ; EDITS 302 AND 312 MUST BE INSTALLED FIRST - ; ADD $0T TO TYPE ASCIZ STRING AT , CHANGE $0T CODE TO ; BE MORE EFFICIENT, ALLOW USER TO STOP $0T TYPEOUT ANYTIME, MORE WORK ; TO GET $T TO WORK RIGHT FOR RIGHT-JUSTIFIED SINGLE CHR., HANDLE RPACS% ; ERROR IF SECTION DOESN'T EXIST, MAKE FILDDT STOP SEARCHING AFTER EOF ; ON DATA FILES, FIX MOVING OF PAT.. WHEN AN UNDEFINED SYMBOL EXISTS ; AND A NEW DEFINITION IS MADE (CACHE PROBLEM), MAKE CONDITIONAL ; BREAKPOINT INSTRUCTION EXECUTE IN USER CONTEXT, DON'T FORCE $P ; DEFAULT TO 1 IF USER HAS SPECIFIED OWN NUMBER. ;314 JBS 10-AUG-81 ; REMOVE AUTO CRLF AFTER LONG STRING INSERTION, FIX ANOTHER BUG WITH ; UNDEFINED SYMBOLS NOT GETTING FIXED UP. ;315 JBS 13-AUG-81 SPR 10-31459 ; OUTPUT RADIX WASN'T SETUP BEFORE TYPING FILOP. ERROR CODE, CAUSING ; GARBAGE TO PRINT OUT. FILDDT-10 ONLY. ;316 JBS 17-AUG-81 ; FIND "REAL" EOF FOR A TOPS-20 FILE - EDIT 313 BROKE THIS BECAUSE IT ; ASSUMED SIZEF% RETURNED EOF. BUT EOF DOESN'T REALLY EXIST IN TOPS-20! ;317 JBS/RDH 19-AUG-81 ; [JBS] FIX FILDDT FOR BIG DATA FILES AGAIN. ; [RDH] HANDLE ^S/^Q IN EXEC MODE, IMPLEMENT EXEC MODE TYPEAHEAD, ; IMPLEMENT XXXN$B WHERE "ADR" IS ADDRESS OF COMMAND STRING TO ; BE EXECUTED ON BREAKPOINT (DEPENDS ON FTYANK), HANDLE $X'ING IN ; THE ACS IN NON-ZERO SECTION (PC ALWAYS LOCAL, THEREFORE ALWAYS ; A "REGISTER" ADDRESS) ;THIS SOURCE FILE IS MADE FROM FIELD-IMAGE DDT 42(320), AS RELEASED WITH ;TOPS-20 V5. IT INCLUDES SOME PUBLISHED AND UNPUBLISHED EDITS MADE TO DDT ;41A. ;320 RDH/JBS 30-SEP-81 ; EDIT 317 BROKE TYPING SOMETHING TO GET OUT OF A (E.G.) SEARCH LOOP ; (EXEC MODE ONLY), PRESERVE APR BITS IN EXEC MODE, TYPE "/" INSTEAD OF A ; SPACE IN $0T COMMAND. NOTE: THIS EDIT IS NOT IN 42(320). ;321 JBS 30-SEP-81 10-31641 ; REMOVE DEFINITION OF RADIX50 PAT FROM LIST OF PATCH LOCATIONS IN ; USER MODE. ;322 JBS 6-OCT-81 ; PHYSICALLY REMOVE DESUPPORTED $L CODE. ;323 ALREADY INSTALLED IN 42(320). ;324 JBS 27-JAN-82 ; FIX TYPO IN EDIT 317 THAT CAUSED EDDT-10 TO HANG ON STARTUP. ;DDT %41A(324) RELEASED FEB, 1982 ;%42(320) RELEASED ON TOPS-20 VERSION 5 SYSTEMS SUMMER 1982. ;325 RDH/JBS 3-FEB-82 ; FIX PUSH/POPJ MISMATCH THAT HAPPENS IF NO SPT SETUP IN KL-PAGING. ;326 JBS/RDH 19-MAR-82 ; CHANGE CONDITIONAL BREAKPOINT CODE TO COMPLETELY RESTORE THE WORLD ; BEFORE EXECUTING (IN CASE OF CONSZ PI, ETC. IN EXEC MODE). ;327 JBS 12-MAY-82 20-17648 ; TYPE SYMBOL IN OPEN MODULE IN PREFERENCE TO A GLOBAL, IF THEY BOTH HAVE ; THE SAME VALUE. ;330 NOT INSTALLED. ;331 JBS/RDH 17-DEC-82 20-17727 ; REWORK $X CODE TO MINIMIZE PROBLEMS WITH PSI SWITCHING. USER WOULD ; GET PSI TRAPS WITH DDT'S ACS SET UP, OR NOT GET PSI AT ALL. THIS DOES ; NOT ELIMINATE THE PROBLEM COMPLETELY (CAN'T BE DONE ANYWAY), IT JUST ; HELPS IT A LOT. ;332 JBS 1-SEP-82 10-32308 ; MAKE RDIO NOT CRASH THE SYSTEM WHEN $X'ED ON A KS. FIXED ON TOPS-10 ; AND EDDT-20; S/UDDT DON'T HAVE ENOUGH ROOM LEFT TO BE FIXED. ;333 DLM/RDH 25-DEC-82 ; NOTE: THIS EDIT IS NOT INSTALLED. IT IS ONLY FOR FURTHER DOCUMENTATION ; OF 42(320) AS RELEASED. ; CREATE SECTIONS AS NEEDED FOR TOPS-20 USER-MODE DDTS; DEFAULT ; THE SECTION IN ADDRESS EXPRESSION IF ADDRESS IS .LT. 18 BITS, OR ; IF SPACE OR COMMA TYPED, BUT NEVER IF COMMA-COMMA TYPED; IMPLEMENT ; "INTERNAL" ADDRESSES (E.G., FOR $M, $I, ETC.) - MAKE $NI, $NM, AND ; $NU CONSISTENT (ALLOW SETTING AS WELL AS READING OF ALL). ;334 JBS 31-JAN-83 10-33035, 10-33811 ; TYPE I/O INSTRUCTIONS CORRECTLY. ;335 NOT INSTALLED. ;336 JBS 25-MAR-83 ; FIX ERROR MESSAGE TYPEOUT AT REMOER. ;337 JBS 2-FEB-83 ; FIX INEFFICIENT CODE AFTER SYMBOL TABLE CACHE FEATURE TEST WAS ADDED. ;< (match angle brackets) ;340 JBS 2-FEB-83 ; REMOVE $$0> AS PATCH ABORT COMMAND. LEAVE $0< AS THE COMMAND. ;> (more matching anglies) ;341 NOT INSTALLED. ;342 JBS 16-FEB-83 ; FIX $G TO USE 30 BIT START ADDRESSES ON TOPS-20. ;343 JBS 25-FEB-83 ; REMOVE EXEC-MODE ONLY CODE FROM USER DDTS. EDIT 331 MUST BE INSTALLED ; FIRST. ;344 JBS 14-MAR-83 ; DON'T DIE IF USER GIVES BAD FORK NUMBER IN FORK<$$?. ;(MATCH ANGLE BRACKETS:>) ;345 JBS 4-APR-83 ; MOVE SOME CODE TO PAGES 764 AND 765 IN UDDT-20 TO GET CODE SPACE. ;346 JBS 4-APR-83 ; FIX EDIT 343 SO TOPS-10 USER MODE WORKS. EDIT 343 MUST BE INSTALLED. ;347 JBS 6-APR-83 ; EXPAND EDIT 332 TO WORK IN UDDT-20 AND SDDT-20 ON THE KS. EDIT 345 ; MADE ENOUGH ROOM TO INSTALL THIS BUG FIX. ;350 JBS 8-APR-83 ; FIX EXEC TYPEAHEAD CHECK AT LOOK2 + A FEW. ;351 JBS 8-APR-83 ; REMOVE DEFINITION OF MRPAC% JSYS FROM SOURCE. ;352 JBS 8-APR-83 20-19074 ; FIX $W IN FILDDT-20. ;353 JBS 6-MAY-83 ; FIX $? COMMAND TO NOT TYPE GARBAGE STRINGS. ;354 JBS 9-MAY-83 ; REMOVE $$? COMMAND FROM FILDDT-20. ;355 JBS 8-JUL-83 ; MOVE SAVE4 LABEL SO EXEC DDT'S START. FIX TO EDIT 331 AND 332. ;356 NOT INSTALLED. ;357 JBS 26-JUL-83 ; FIX $W FOR DISKS - PAGE ACCESS BITS WERE NOT UPDATED. ;360 JBS 28-JUL-83 ; DO MONITOR FIXUPS RIGHT - PEEK JUST BEFORE POKE.'ING. ;361 RDH 15-NOV-83 ; KEEP THE LAWYERS HAPPY - PUT COPYRIGHT IN THE BINARIES ;362 PTR 20-DEC-83 20-17198 ; FIX NON-ZERO SECTION $X OF XMOVEI, XHLLI, LDB ET AL. BY ; REMEMBERING THE LOCAL/GLOBAL PART OF THE EA CALC. ; MAKE A NEW ENTRY IN $XTBL FOR XHLLI, SO SECTION NO. IS PRINTED. ; ADD CODE TO TBPNT TO DECODE ALL FORMS OF BYTE POINTERS. ; FIX EA CALC OF BYTE POINTERS AT IXBP; HANDLE ALL THE FORMATS. ;DDT %42A(362) SHIPPED WITH TOPS-10 7.02 ;363 JBS 1-FEB-84 RAW ; MAKE PSECT XCODE READ-ONLY. ;364 PTR 7-FEB-84 10-34464 ; WRTWIN THOUGHT THE REFERENCED ADDRESS WAS ALWAYS IN R; IT ISN'T. ; USE THE FILE PAGE NUMBER INSTEAD. ;365 RDH 21-FEB-84 ; ONLY GIVE HARDWARE 8 BITS OF CHAR IN EXEC MODE. ;366 PTR 21-FEB-84 ; DON'T CONFUSE FLOAT INPUT AND SYMBOLS STARTING WITH ".E" SO MUCH ;367 JM 21-JUN-84 ; FIX $O TYPEOUT MODE (N-BIT BYTES) SO THAT ADDRESSES ARE RENDERED ; SYMBOLICALLY RATHER THAN ABSOLUTELY. ;370 JM 30-AUG-84 10-34852 ; MOVE TYPEOUT MODE SAVE FROM DD2: TO AFTER LIS1: ;371 JM 2-OCT-84 ; CAUSE RUBOUT OF TEMPORARY TYPEOUT MODE TO WORK AGAIN (BROKEN BY ; EDIT 370). ;372 JM 21-NOV-84 ; FIX SINGLESTEP OF XPCW: RESTORE CORRECT CONTEXT; DON'T OVERWRITE ; SAVED FLAGS WITH SAVED PC. ;373 PTR 6-DEC-84 ; NOT INSTALLED, EQUIVALENT TO EDIT 621. ;374 PTR 6-DEC-84 ; ALREADY INSTALLED AS EDIT 601. ;375 PTR 6-DEC-84 ; NOT INSTALLED, EQUIVALENT TO EDIT 622. ;376 PTR 6-DEC-84 ; NOT INSTALLED (PARTLY INSTALLED AS EDIT 422). ;377 PTR 6-DEC-84 ; ALLOW < > AS PATH DELIMITERS AS WELL AS [ ] IN TOPS-10 FILESPECS. ; MINOR BUG IN RE TYPEOUT MODE FLAG. ;EDIT NUMBERS THRU 417 RESERVED FOR DDT V42 SPR'S. ;DDT V43 DEVELOPMENT BEGINS AT EDIT 420. ;420 PTR 9-JAN-84 ; CREATE THIS SOURCE FILE FROM DDT V42(362). CLEAN UP COMMENTS, ; MAKE CODE FORMAT CONSISTENT AS POSSIBLE. NO CODE CHANGES. ;421 PTR 9-JAN-84 ; SUPPORT INTER-SECTION BREAKPOINTS. IMPLEMENT $4M. ;422 PTR 18-JAN-84 ; ADD SUPPORT FOR $X OF XJRST INSTRUCTION. FIX IO INSTRUCTION ; RESULTS TYPEOUT. ;423 PTR 19-JAN-84 ; NOT INSTALLED. ;424 PTR 19-JAN-84 ; REVISE INSTRUCTION TYPEOUT CODE TO ALLOW FOR SYMBOLS WITH ; NON-ZERO LEFT HALVES. ;425 PTR 20-JAN-84 ; FIX $X OF STACK INSTRUCTIONS TO WORK WITH LOCAL STACK POINTERS ; IN NON-DDT SECTIONS. ;426 PTR 23-JAN-84 ; ALWAYS INSERT/REMOVE BREAKPOINTS AROUND INSTRUCTIONS. JSYS CAN ; CAUSE RANDOM DISPATCHES, INTERRUPT OR ARITH OVL MAY OCCUR; ; MAKE SURE DDT HAS A CHANCE OF RECOVERING. ;427 PTR 24-JAN-84 ; REDO SAVEG: A BIT. MOVE SOME EXEC MODE TYPEAHEAD CHECKS. ;430 PTR 24-JAN-84 ; INSTALL DLM'S SYMBOL TABLE CHANGES VERBATIM -- WILL CHANGE TO ; MEET SPEC LATER. INCLUDES MDDT STUFF; RIP OUT WINDOWING CODE. ; NO MORE "HIDDEN" SYMBOLS ON -20. ;431 PTR 25-JAN-84 ; ADD STACK/ARITH TRAP-CAUSING INSTRUCTIONS TO DANGEROUS OPCODE ; TABLE; FIX [426] TO INSERT/REMOVE BPTS ONLY FOR DANGEROUS ; INSTRUCTIONS. REORGANIZE DANGEROUS OPCODE TABLE DEFINITION. ;432 PTR 26-JAN-84 ; FIX UP SYTSEC TO ASSUME -1,,N FORMAT. IF WORD IS 0, DEFAULT ; TO SECDDT. CLEAR CACHE IF STUFFING NEW SYMBOL POINTERS (SYMCHK). ;433 PTR 30-JAN-84 ; MAKE FILDDT ASSEMBLE AGAIN. CNTRLZ/CNTRLE WERE TOO BIG FOR COMMAND ; DISPATCH TABLE. ;434 PTR 3-FEB-84 ; KEEP SYMCHK FROM SWITCHING SYMBOL TABLES IN MDDT/KDDT. ; NEVER LOOK OUTSIDE SECTION 0 FOR SYMBOL TABLES IF RUNNING IN ZERO. ;435 PTR 3-FEB-84 ; FIX [430] TO USE IFIW WHEN ZEROING "@SYMP". ; CHANGE MAP AC,(R) AND SKIP (R) TO USE @R (SO SEC. 0 REFS FROM ; NON-ZERO WILL WORK). ;436 PTR 6-FEB-84 ; FIX [430] SO DOESN'T REFERENCE .EDSEC ON -10. ;437 PTR 6-FEB-84 ; SPECIAL MDDT BREAKPOINT INTERLOCK; ONLY ONE FORK CAN SET BREAKPOINTS ; AT A TIME. SET DEFAULT MDDT/KDDT BREAKPOINT BLOCKS. ; CHANGE MDDT/KDDT PSECT NAMES. ;440 PTR 15-FEB-84 ; MAKE $X DO THE INSTRUCTION IN USER'S SECTION, NOT DDT'S SECTION. ; FIX CNTRLZ NOT TO USE $X CODE. ;441 PTR 15-FEB-84 ; MAKE $V DEFAULT SECTION IF NONE TYPED. ;442 PTR 16-FEB-84 ; FIX HANDLING OF SYTSEC SO SDDT STILL WORKS. ; MAKE HISEG S.T. CHECKS DO LOCAL FETCHES. ;443 PTR 23-FEB-84 ; DEFAULT BPBLK TO LAST N WORDS IN SECTION. MAKE SURE IT HAS ROOM ; FOR $X NEEDS. ;444 PTR 24-FEB-84 ; FIX SYTSEC HANDLING SOME MORE SO S.T. STUFFING (INCL SDDT) WORKS IN ; NON-ZERO SECTIONS. ;445 PTR 27-FEB-84 ; MAKE MDDT STACK POINTER GLOBAL. OTHERS SHOULD STILL BE LOCAL. ;446 PTR 27-FEB-84 ; DON'T DIDDLE PSI STATUS IN MDDT. STACK NOT SET UP AT THAT POINT ANYWAY. ;447 PTR 27-FEB-84 ; IN $X, DON'T INSERT BREAKPOINTS UNLESS WE'RE REALLY GOING ; TO EXECUTE THE INSTRUCTION. ;450 PTR 27-FEB-84 ; TURN SOME RAW NUMBERS INTO SYMBOLS IN KL PAGING STUFF. ; FIX EXEC MODE $W, INCLUDE CST WRITE BIT. ;451 PTR 27-FEB-84 ; IMPLEMENT "PERMANENT DEFAULT SECTION," $6M. IF SET, USE IT INSTEAD ; OF LLOCS IN DEFSEC. REWRITE DEFSEC TO INCLUDE NEW ROUTINE GDFSEC ; (GET DEFAULT SECTION). ;452 PTR 28-FEB-84 ; WHEN A LOCAL AND GLOBAL HAVE THE SAME VALUE, CONSISTENTLY PICK ; THE GLOBAL FOR TYPEOUT. IMPROVEMENT ON [327]. ;453 PTR 28-FEB-84 ; FIX PROBLEM WITH OKAF. CLEAR IT IN MORE PLACES, SO # APPEARS ; AFTER LOCALS CONSISTENTLY. ;454 PTR 2-MAR-84 ; FIX PROBLEM WITH [447]. INSTR$X COULD DIE IF BREAKPOINTS SET. ;455 PTR 5-MAR-84 ; IN KDDT USER MODE, JUMP INTO MONITOR ON ^Z SO IT CAN PLAY MAPPING ; GAMES. THIS IS SO "@GET SYSTEM:MONITR @START 140" WILL WORK. ;456 PTR 21-MAR-84 ; OPDEF SOME OPCODES SO THAT DECREPIT VERSIONS OF MACRO CAN STILL ; ASSEMBLE DDT. ;457 PTR 22-MAR-84 ; FIX SYMCHK NOT TO STEP ON FILDDT'S SYMBOL POINTERS. FOR NOW ; FILDDT WILL IGNORE $5M. ;460 PTR 30-MAR-84 ; MAKE $X OF PC-SECTION-REF INSTRUCTIONS (BYTE, EXTEND, BLT, JSYS) ; EXECUTE IN ORIGINAL PC SECTION. ;461 PTR 18-APR-84 ; MASSIVE EDIT TO RECOGNIZE PDV'S AND THEIR SYMBOL VECTORS. ; THE IOWD IS HEREBY DEFUNCT. SYMBOL TABLE POINTERS ARE NOW KEPT ; INTERNALLY AS TWO-WORD ADDRESS/LENGTH PAIRS. SYMP AND FRIENDS ARE ; NOW BLOCKS OF SYMBOL TABLE INFORMATION. THIS CHANGES HOW SYMBOL ; TABLES ARE HANDLED ALL OVER DDT. IN PARTICULAR, SYMFIX, SYMCHK ; AND CLSFIL HAVE BASICALLY BEEN REWRITTEN. ALL OTHER PLACES THAT ; TOUCH SYMBOL TABLE POINTERS HAVE BEEN CHANGED TO ACCOUNT FOR THE ; NEW FORMAT. NOTE THIS EDIT NEVER REFLECTS CHANGES TO SYMBOL TABLE ; POINTERS IN THE USER'S ORIGINAL COPY (EXCEPT FILDDT). ;462 PTR 18-APR-84 ; PROHIBIT PATCHING ACROSS SECTION BOUNDARIES. USE PATCHED SECTION'S ; .JBFF, NOT SECTION ZERO'S, WHEN NO SYMBOLS EXIST. ;463 PTR 18-APR-84 ; SIMULATE $X OF JRSTF IN SECTION ZERO WHEN RUNNING IN NON-ZERO. ;464 PTR 19-APR-84 ; PRESERVE SECTION NUMBER OF PATCH SYMBOL. ;465 PTR 19-APR-84 ; PERMANENTLY WRITE-ENABLE BREAKPOINT BLOCK WHEN DOING AN $X, ; SO THE "SOS FOO" DOESN'T CAUSE AN ILL MEM WRITE. ;466 PTR 23-APR-84 ; IMPLEMENT $$:/TEXT/ TO LOOK UP FIRST PDV WITH NAME TEXT AND ; SET $5M TO ITS ADDRESS. USER-FRIENDLY VERSION OF $5M. ; $$1: TYPES OUT CURRENT PDV NAME IF ANY. ;467 PTR 23-APR-84 ; FIX [461] SO DEFINING NEW SYMBOLS WORKS. ;470 PTR 24-APR-84 ; NEW ROUTINE INCSYP TO UPDATE INTERNAL SYMBOL TABLE POINTERS AS ; WELL AS USER'S ORIGINAL POINTERS (EXCEPT FILDDT, WHICH UPDATES ; POINTERS ONLY ON CLOSE). ;471 PTR 25-APR-84 ; FIX SYMCHK TO ALWAYS SET ESTUT (PREVENTS STARTUP PROBLEMS). ;472 PTR 27-APR-84 ; HAVE TTYSAV CALL SYMCHK, SO POINTERS WILL REALLY BE SET UP ; ON ENTRY. THAT WAY IF THE FIRST THING THE USER DOES IS "$5M/" ; IT WILL ALREADY BE SET UP. MAKE AN EFFORT TO KEEP TOPS-10 EDDT ; WORKING WITH THIS (NOT TESTED). NUDGE CONDITIONALS TO PREVENT ; SOME UNDEFINEDS. ;473 PTR 30-APR-84 ; BYTE POINTERS GIVEN TO A JSYS IN SECTION ZERO MUST BE 1-WORD LOCALS. ;474 PTR 1-MAY-84 ; TURN ON FTPAGM IN -20 EXEC MODE. ;475 PTR 3-MAY-84 ; LOOK FOR HISEG TABLE EVEN IF POINTERS ARE STUFFED. ;476 PTR 7-MAY-84 ; TEACH INCSYP ABOUT 0$5M. DON'T CALL SYMCHK SO OFTEN (DEPRA). ; LET FILDDT READ DUMPS AGAIN. MAKE ERROR MESSAGE IF USER TRIES TO ; CREATE A PAGE WHEN $$1W. ;477 PTR 8-MAY-84 ; FIX $NM (OTHER THAN $5M) IN FILDDT TO LOOK LIKE IT ALWAYS DID. ;500 PTR 8-MAY-84 ; IF DDT IN NON-ZERO, PC IN ZERO, XMOVEI BECOMES PC REF INSTRUCTION. ; (XMOVEI 1,0 WOULD RETURN 1,,0 INSTEAD OF 0,,0.) ; FIX TYPEOUT OF XMOVEI 1,0 SO 0 TYPES OUT. ;501 PTR 9-MAY-84 ; SWITCH MONITOR DDTS BACK TO USING EDV ([430] AND OTHERS HAD THEM ; USING JOBDAT). MAKE TTYRE6 LOOK MORE LIKE V42. ;502 PTR 12-MAY-84 ; MAKE SYMCHK SET .JBUSY IF CREATING AN UNDEFINED SYMBOL POINTER ; OUT OF THIN AIR (JOBDAT ONLY). MAKE IOWBLK WORK FOR MONITORS. ; MAKE SURE SYMBOL BLOCKS CLEARED IF NO POINTERS FOUND. ;503 PTR 14-MAY-84 ; IN SAVEG, DON'T SET LLOCS IF IN AN $X SITUATION (SCREWED UP ; HISEG SYMBOL TABLE). FIX BUG IN [502]. DON'T MAKE TTYSAV CALL ; SYMCHK, IT'LL HAPPEN TOO OFTEN -- CALL SYMCHK DIRECTLY WHEN DDT ; IS STARTED. DON'T NEED TO ON BREAKPOINT, DISPLAY ROUTINES WILL ; TAKE CARE OF IT. ;504 PTR 22-MAY-84 ; MAKE UDDT-20 LIVE IN ITS OWN SECTION. CREATE AN "EXPORT" VECTOR ; TO BE POINTED TO BY DDT'S PDV. KEEP DDT FROM FINDING ITS OWN ; PDV UNLESS RUNNING ALONE IN THE FORK (DETERMINED VIA ENTRY VECTOR). ; DEFAULT LLOCS TO STUB'S SECTION OR ENTRY VECTOR SECTION (USER-20) ; OR DDT'S SECTION (MONITOR-20, ALL-10). ;505 JM 31-MAY-84 ; GET DDT TO UNDERSTAND $N"C$ AND $N"/.../ SYNTAX. REPLACE PEEK ; JSYS WITH XPEEK% IN FILDDT. ;506 PTR 5-JUN-84 ; FIX OVERFLOW AT NUM+10. FIX 3.2E2$F; BUG. MAKE SURE WE HAVE ; AN IFIW AT HIDPD1. ONLY LOOK IN DDT'S SECTION FOR ITS PDV. ;507 PTR 5-JUN-84 ; TEACH CODE AT UND1, DEF5, AND DEPRA THAT UNDEFINED SYMS HAVE 30-BIT ; ADDRESS VALUES, SO FIXUPS CAN BE OUTSIDE SYM TAB'S SECTION. ; CHAINS STILL CAN'T CROSS SECTION BOUNDARIES THOUGH. ; FIX WHERE [505] BROKE $$: COMMAND. ;510 PTR 7-JUN-84 ; SUPPORT ERJMPR/ERCALR/ERJMPS/ERCALS IN $X CODE. ;511 PTR 7-JUN-84 ; TURN HIDPDV INTO ONCE-ONLY CODE TO PROTECT OURSELVES AGAINST OLD LINKS. ; DDT 43 WILL GO OUT BEFORE LINK 6 SO WE HAVE TO BE CAREFUL. ;512 PTR 8-JUN-84 ; SPLIT THE "DANGEROUS OPCODE" TABLE INTO TWO PARTS, THE MEMORY MUNGERS ; AND THE TRULY DANGEROUS. MEMORY MUNGERS FORCE RECHECK OF SYMTAB, ; TRULY DANGEROUS GET FULL ENVIRONMENT AND BREAKPOINTS AROUND THE XCT. ; RESTORE TEMP DISPLAY MODES AT TELLX, SINCE DANGEROUS XCT SMASHES THEM. ;513 PTR 8-JUN-84 ; $G WOULDN'T WORK FOR A TOPS-10 STYLE ENTRY VECTOR IN A NON-ZERO SECTION. ; MAKE IT LOOK AT ,,.JBSA INSTEAD OF 0,,.JBSA TO ; DETERMINE THE SECTION-RELATIVE START ADDRESS. ;514 PTR 12-JUN-84 ; $X OF A DANGEROUS INSTRUCTION FROM SECTION ZERO MUST BE EXECUTED ; IN ZERO SO ANY GENERATED TRAP/INTERRUPT CAN BE DEALT WITH BY A ; SECTION ZERO HANDLER. ;515 JM 13-JUN-84 ; FILDDT(TOPS-20): ADD "ENABLE THAWED" COMMAND AND "GET /THAWED" ; OPTION. OPEN FILE FOR UNRESTRICTED READ ACCESS WHEN READ ONLY. ;516 PTR 14-JUN-84 ; ADD XMOVEI AND XHLLI TO THE HARDWARE OPCODE TABLE, PERSERVING ; HLLI AND SETMI FOR TYPEIN. ;517 PTR 14-JUN-84 ; IMPLEMENT $1: COMMAND TO TYPE OUT CURRENT OPEN MODULE (GIVEN IN ; LAST $: COMMAND). ;520 JM 14-JUN-84 ; IMPLEMENT $1T COMMAND TO SET BYTE POINTER TYPEOUT MODE. ;521 PTR 15-JUN-84 ; REDO $XBLK NOT TO USE SOS'S, SINCE SOS CAN CHANGE USER'S FLAGS. ; FIX DANGEROUS JRST'S (E.G. XJEN) TO SET DANGEROUS FLAG. ; HANDLE LUUO'S OUTSIDE SECTION ZERO ON TOPS-20. ;522 PTR 15-JUN-84 ; CLEAN UP WHAT KINDS OF $$? ARE LEGAL IN WHAT FLAVORS. ;523 PTR 18-JUN-84 ; MAKE XDDT BE PSECTED LIKE UDDT WAS (SO CODE PSECT IS WRITE-LOCKED). ; FIX HIDPDV SO XDDT CAN MODIFY THE (WRITE-LOCKED) PDV, AND SO RDDT ; WON'T FALL OVER DEAD IN A USER PROGRAM. ;524 PTR 20-JUN-84 ; ON TOPS-20, IF A SECTION ZERO PROGRAM USES OLD-STYLE PSI TABLES TO ; TRAP PAGE CREATES (E.G. PA1050) AND DDT CAUSES A PAGE CREATE FROM ; OUTSIDE SECTION ZERO, THE MONITOR TERMINATES THE PROCESS SINCE THE ; SECTION ZERO TABLE HAS NO PLACE FOR A 30-BIT PC. TURNING OFF THE ; PSI SYSTEM ONLY DEFERS THE INTERRUPT, WE MUST ACTUALLY DEACTIVATE ; THE CHANNEL TO PREVENT TERMINATION. ;525 PTR 20-JUN-84 ; MISCELLANEOUS MINOR FIXES, MOSTLY COSMETIC. UNDEFINE FLAG POWF ; (BIT 24) SINCE IT WASN'T DOING ANYTHING USEFUL. ;526 JM 20-JUN-84 ; MOVE THE ROUTINE "TBPNT" OUT OF SINGLE STEPPING CODE INTO GENERAL ; TYPEOUT SECTION. THIS WILL MAKE EDIT 520 WORK FOR FILDDT. ;527 PTR 22-JUN-84 ; REDO $X SOME MORE TO LET $X OF ERSTR% JSYS WORK. ;530 JM 25-JUN-84 ; SET DEFAULT SECTION WITH $V, $G, $B, $W, $N, $E, $Z, AND $U. ;531 JM 26-JUN-84 ; MAKE $Z CONSISTENT WITH $W, $N, AND $E IN SETTING "." TO THE LAST ; LOCATION ZAPPED. ;532 PTR 26-JUN-84 ; CLEAN UP REFERENCES TO SECUDD, ONLY USE IT IN USER DDT. ; SINCE FETCHL NOW USED ONLY TO CHASE JOBDAT STUFF, MAKE IT RETURN ; FAILURE IF SYTLOC INDICATES A PDV. ;533 PTR 26-JUN-84 ; CLEAN UP SYMBOL STUFF IN EDDT SO USER MODE EDDT IS MORE LIKE NORMAL ; USER DDT. MAKE GEVECS SKIP IF ENTRY VECTOR EXISTS, NON-SKIP IF NOT. ; FIX SOME SYMBOLS SO DDT STILL ASSEMBLES FOR TOPS-10. ; HAVE TOPS-20 MONITOR DDTS CHECK MONPDV IN CASE TOPS-20 HAS A PDV. ;534 JM 27-JUN-84 ; SAVE THE STATE OF THE COMF FLAG FOR OBJECTS SCANNED BY THE SYNTAX ; "LOWER". USE THIS INFORMATION IN SECTION DEFAULTING FOR THE ; COMMANDS $Z, $E, $W, AND $N. ;535 JM 29-JUN-84 ; EXECUTE THE CONDITIONAL BREAKPOINT INSTRUCTION IN THE SECTION OF THE ; BREAKPOINT. ;536 PTR 2-JUL-84 ; DON'T FORCE SECTION-REF $X TO BE DANGEROUS. CLEAR I.CJMP FLAG IN THE ; CONDITIONAL BREAKPOINT INSTRUCTION CODE. ;537 PTR 2-JUL-84 ; KEEP XDDT FROM INCORRECTLY REMEMBERING TTY STATE AFTER ONCE-ONLY CODE. ;540 JM/PTR 3-JUL-84 ; PARSE SIGNED EXPONENTS CORRECTLY IN FLOATING POINT TYPEIN. BAD ; BEHAVIOR ASCRIBED TO EDIT 506. ;541 PTR 5-JUL-84 ; FIX HIDPDV TO HANDLE LINK 5.1 CASE CORRECTLY. ;542 JM 9-JUL-84 ; MAKE LEFT HALF OF ACCCF A DOUBLE COMMA FLAG SO THAT DEFAULT SECTIONING ; WORKS PROPERLY WITH AND "\". (CF. TOPS-10 MAINTENANCE VERSION) ;543 PTR 10-JUL-84 ; IN DEPMEM WHEN WRITE-ENABLING A PAGE, TURN ON FH%EPN SO REFS TO ; SECTION 0 WORK. ;544 PTR 10-JUL-84 ; FIX INCSYP ET AL. TO NOT INVALIDATE THE SYMBOL POINTER THEY JUST ; UPDATED. ALSO DO BETTER ERROR CHECKING IN DEFIN:. THIS MAKES ; DEFINING NEW SYMBOLS WORK (BROKEN SINCE [470]). ; DON'T CHECK FOR INDIRECTION IN PDV OR SYMBOL VECTOR, ADDRESSES ; MUST BE EITHER "IFIW LOCAL-ADDR" OR "GLOBAL-ADDR". ;545 PTR 11-JUL-84 ; FIX DEF5 NOT TO STOMP ON W1 (NEEDED FOR THE CALL TO REMUN). THIS ; WILL CAUSE DEFINING UNDEFINED SYMBOLS TO WORK AGAIN. ; REPLACE SAVE OF W DONE IN SYMCHK (REMOVED BY 544). ;546 PTR 11-JUL-84 ; IN WRTSYM, DON'T CHECK FOR HISEG SYMTAB IF PDV. ;547 JM 11-JUL-84 ; GET/SET CORRECT DEFAULT SECTION FOR EFFECTIVE ADDRESS SEARCH. ;550 PTR 13-JUL-84 ; MAKE REFS TO TOPS-20 DATA/CODE BE GLOBAL REFS TO SECTION 1 WHERE ; NECESSARY, SO SEC. 1 DOESN'T NEED TO BE MAPPED TO DDT'S SECTION. ;551 PTR 17-JUL-84 ; FIX $D SO YOU CAN SUPPRESS THE FIRST SYMBOL IN THE TABLE. ;552 PTR 19-JUL-84 ; MAKE SURE DDTSYV POINTS TO SYMTAB LOCALLY. ;553 PTR 19-JUL-84 ; ADD AN ERJMP AFTER THE PDVOP% IN PDVSE2, JUST IN CASE. ; .POLOC CAN BE PRONE TO CAUSING ILL INSTR TRAPS. ;554 JM 23-JUL-84 ; SET FLOATING DEFAULT SECTION WHEN OPENING LOCATIONS VIA THE LOCATION ; SEQUENCE STACK. ;555 PTR 23-JUL-84 ; TRY DOING A PEEK IF XPEEK% FAILS (SO FILDDT WILL RUN ON 5.1 SYSTEMS). ;556 PTR 25-JUL-84 ; IF RESTOR IS GOING BACK TO SEC. 0 AND THE PSI NEEDS TO BE TURNED ; BACK ON, DON'T DO IT TILL WE'RE ALREADY IN SEC. 0. THAT WAY DEFERRED ; INTERRUPTS WON'T CAUSE THE FORK TO HALT. DON'T BOTHER TREATING ; PAGE-CREATES AS A SPECIAL CASE ANYMORE (REMOVE [524]). ; MAKE ^Z RETURN TO THE STUB IF THERE IS ONE (SO PA1050 WILL SEE A HALT ; PC IN SEC. 0). EDIT 6 OF UDDT.MAC MUST BE INSTALLED. ;557 JM 2-AUG-84 ; FILDDT: IF A LOCATION IS OPENED WITH AN EXPLICIT SECTION TYPED IN, ; USE THAT SECTION VALUE TO SET THE FLOATING DEFAULT SECTION. ALSO, ; DON'T SET THE FLOATING DEFAULT SECTION IF AN ACCUMULATOR IS POPPED ; OFF OF THE LOCATION SEQUENCE STACK. ;560 PTR 2-AUG-84 ; RESERVE A FULL 100 WORDS FOR THE BREAKPOINT BLOCK. MAKE SYMBOLS ; FOR PC FLAGS. DON'T REF SECUDD IN EDDT. ;561 PTR 8-AUG-84 ; MOVE DEFINITION OF SKPUSR ETC. TO AFTER THE .PSECT STATEMENT (SO ; KDDT CAN BE LOADED IN A NON-ZERO SECTION, AND NOT HAVE THE OPDEFS ; GET FIXED UP WITH SECTION NUMBERS). ;562 PTR 10-AUG-84 ; REDO $X OF PUSH(J) SO WE DON'T USE STACK MEMORY BEFORE ALLOCATING ; IT IN THE STACK POINTER. CAN KILL US IF PSI TRAPS WAITING. ;563 PTR 11-AUG-84 ; MAKE BUNCHES OF EDDT REFS TO EPT (AND OTHERS) BE INDIRECT INSTEAD ; INDEXED. THEN THE EPT DOESN'T HAVE TO BE IN EDDT'S SECTION. ;564 PTR 13-AUG-84 ; [461] INADVERTENTLY REMOVED THE LENGTH CHECK FROM CHKSYP. PUT ; IN A LENGTH CHECK. ;565 PTR 16-AUG-84 ; ADD FAKDDT ROUTINE TO KDDT. CALLED DIRECTLY BY MONITOR AFTER KDDT ; HAS CHANGED SECTIONS, SO BREAKPOINTS BREAK TO PROPER PLACES. ;566 JM 23-AUG-84 ; DEFSEC: WHEN AN EXPLICIT SECTION IS TYPED IN (EITHER WITH ",," OR BY ; USING A SYMBOL WITH A SECTION NUMBER IN THE LEFT HALF, ALWAYS SET THE ; DEFAULT SECTION, EVEN WHEN REFERENCE IS MADE TO AN ACCUMULATOR ; (E.G. 1,,7). ;567 PTR 23-AUG-84 ; MAKE KDDT USE MONEDV IN PREFERENCE TO JOBDAT, EVEN IN USER MODE. ;570 PTR 7-SEP-84 ; PREVENT PAGE CREATES FROM GENERATING PAGE-CREATE INTERRUPTS. THIS ; IS SO CREATING THE PAGE WHERE THE BREAKPOINT BLOCK SITS DOESN'T MAKE ; TROUBLE. THIS ALSO ALLOWS THE USER TO CREATE RANDOM PAGES WITHOUT ; CAUSING AN INTERRUPT (FORMERLY, CREATING A PAGE WOULD CAUSE AN ; INTERRUPT WHICH MOST LIKELY WOULD BE ASYNCHRONOUSLY HANDLED/REPORTED). ;571 JM 10-SEP-84 ; NEVER "FIX UP" A BLT INSTRUCTION FOR SINGLESTEPPING. ADD THE SPECIAL ; ENTRY "FETCHI" TO THE "FETCH" PROCEDURE. "FETCHI" IS FOR FETCHING ; INSTRUCTIONS, AND IT TREATS MEMORY ADDRESSES WITH RIGHT HALF IN THE ; RANGE 0 THROUGH 20 AS ACCUMULATOR ADDRESSES. ;572 JM 10-SEP-84 ; MONITOR EDDT RUNNING IN USER MODE WILL NOT ATTEMPT TO LEAVE SECTION 0 ; IF IT SHOULD HAPPEN TO FIND ITSELF THERE. ;573 JM 10-SEP-84 ; WHEN PRINTING AN IFIW SECOND WORD OF A 2-WORD BYTE POINTER DISPLAY ; "<2>" AS WITH AN EFIW WORD. ;574 PTR 12-SEP-84 ; USER-MODE KDDT SHOULD REF MONPDV IN SECTION ZERO, NOT SECTION 1. ;575 PTR 13-SEP-84 ; USER-MODE KDDT SHOULD BE MORE LIKE USER DDT. DO NORMAL PDV ; SEARCHING FOR 6.1, STILL WIND UP WITH JOBDAT IN 6.0. ;576 PTR 13-SEP-84 ; GIVE SINGLE-STEP $X AND INSTR$X DISTINCT PORTIONS OF THE BREAKPOINT ; BLOCK, SO THEY DON'T INTERFERE WITH ONE ANOTHER (WILL HAPPEN IF ; "CALL FOO$X" AND FOO HAS A BREAKPOINT IN IT). REQUIRES RECLAIMING ; THE BREAKPOINT BLOCK SPACE RESERVED FOR BREAKPOINT 0 (WHICH WILL ; NEVER BE USED). ;577 PTR 19-SEP-84 ; IN FILDDT, CHECK FOR THE LAST EXISTING PAGE IN THE FILE INSTEAD OF ; ALWAYS USING THE MAXIMUM POSSIBLE LENGTH. THAT WAY SEARCHES ETC. ; WILL STOP AT "REAL EOF." ;600 PTR 26-SEP-84 ; SPEED UP FNDPAG, FPVPG AND FRIENDS BY TRYING TO GUESS WHAT THE ; VIRTUAL PAGE IS GOING TO BE, INSTEAD OF PLODDING THROUGH EVERY ; PAGE EVERY TIME. ;601 PTR 27-SEP-84 ; ADD "FOO$?" COMMAND TO TYPE ALL SYMBOLS BEGINNING WITH CHARS "FOO". ;602 JM 29-SEP-84 ; IF DDT WAS STARTED FROM THE STUB (UDDT) AND $5M POINTS TO JOBDAT IN ; THE SAME SECTION OR $5M IS 0, CHECK FOR STUFFED SYMBOL TABLE VALUES ; ON EACH PASS THROUGH SYMCHK. ;603 PTR 10-OCT-84 ; ADD NEW $L COMMANDS TO TYPE OUT SECTION/PAGE ACCESSES. ;604 PTR 10-OCT-84 ; REVISE [600] SO ONE NEED NOT SUPPLY A GUESS TO FPVPG. ;605 PTR 15-OCT-84 ; CALL LISTEN DURING "FOO$?" SO USER CAN ABORT HIS FOOLISH CHOICE OF ; PREFIX CHARACTERS. ;606 PTR 18-OCT-84 ; HAVE FILDDT-20 PARSE UNIT, CHANNEL, CONTROLLER NUMBERS IN DECIMAL ; INSTEAD OF OCTAL. ;607 PTR 18-OCT-84 ; GROW DATA PAGES TO THREE, INCREASE STACK SIZE SO MDDT WON'T ; FALL OVER FROM DECNET, REVERT MDDT TO LOCAL STACK POINTER IN 6.1. ;610 PTR 18-OCT-84 ; FIX HIDPDV AGAIN SO $W DEFAULT IS PRESERVED. ;611 PTR 22-OCT-84 ; FIX $L NOT TO REPORT BOTH WRITE AND COPY-ON-WRITE FOR THE SAME PAGE. ;612 JM 22-OCT-84 ; DEFINE A GENERAL PURPOSE CHECKPOINT FOR MDDT, AND INSTALL IT AROUND ; THE BREAKPOINT BLOCK. ;613 PTR 31-OCT-84 ; FIX [600]/[604] AGAIN. ;614 JM 7-NOV-84 ; CORRECT MDDT INTERLOCK LOGIC (CF. [612]); ALSO MIGRATE TBPNT TO WORD ; TYPEOUT ROUTINES FROM COMMAND ROUTINES. ;615 JM 9-NOV-84 ; IF NO ENTRY VECTOR IN FORK, USER DDT20 SETS $5M TO -1,,0 RATHER THAN ; -1,,SECDDT. VT2XX COMPATIBILITY FEATURE: "`" WORKS LIKE "". ;616 PTR 12-NOV-84 ; MAKE "ADDR$0T" DO DEFAULT SECTIONING. ;617 PTR 12-NOV-84 ; MINOR BUGS IN FOO$? COMMAND. ;620 JM 16-NOV-84 ; USER DDT: IF NO ENTRY VECTOR AND NO STUB, SET FLOATING DEFAULT ; SECTION TO 0 ON ENTRY. ANALOGOUS TO [615]. ;621 RCB/PTR 6-DEC-84 ; ALLOW TYPEOUT AND TYPEIN OF N-BIT ASCII STRINGS. $NT AND $N" ; NOW ALLOW N FROM 5 THRU 36 (DECIMAL). ;622 JMF/PTR 6-DEC-84 ; PREVENT CLOBBERING PREVIOUS-CONTEXT SECTION WHEN JUMPING INTO ; NON-ZERO SECTION IN EDDT. ;623 DPM/PTR 6-DEC-84 ; FIXES TO $L: MAKE SURE NOT IN SYMBOL SPACE IN TOPS-10 EXEC MODE, ; DON'T MAKE RASH ASSUMPTIONS ABOUT LOWSEG IN CHKADR, DO MORE ; RATIONAL ARG CHECKING IN FILDDT. ;624 JM 8-DEC-84 ; FIX SINGLESTEP OF ILDB/IDPB WITH LOCAL ACCUMULATOR REFERENCE TO BYTE ; POINTER. ;625 PTR 12-DEC-84 ; SPEED UP CHKADR IN FILDDT-20 BY NOT DOING AN RPACS% ON EVERY ; CALL. INSTEAD DO THE RPACS% WHEN THE PAGE IS MAPPED IN AND ; REMEMBER THE BITS. THIS WINS BIG ESPECIALLY IN SEARCHES WHEN ; THE USER HAS SPECIFIED SOME KIND OF MAPPING (E.G. EP$U). ;626 PTR 22-MAR-85 ; FIX TEXTNT TO NOT TYPE GARBAGE FROM THE LEFTOVER BITS IN THE WORD. ;627 JM 10-APR-85 ; TEXTNT TYPES OUT LEFT-JUSTIFIED BYTES ONLY. ;DDT %43(627) SHIPPED WITH TOPS-20 6.1 ;630 PTR/RCB/RDH 25-SEP-85 ; FOR TOPS-10, IF .JBSYM .GT. 0 THEN IT IS THE GLOBAL ADDRESS OF A ; SYMBOL TABLE VECTOR. DITTO $5M. LOOK FOR TOPS-10 ENTRY VECTOR ; ON $G. FIX UP $L, $Y COMMANDS. CHKADR, FETCH, STORE CAN SEE ; BEYOND SEC. 0 FROM SEC. 0 (TOPS-10 EDDT ONLY). FIX EXEC-MODE CHKSEC. ;631 RCB 3-OCT-85 ; MAKE DEFAULT PAGING BE KL ALWAYS. ADD BLTBU/BLTUB TO $X (KS-10). ;632 RDH 7-OCT-85 ; MAKE IO INSTRUCTION TYPEOUT PAY ATTENTION TO CPU TYPE (KS HAS DIFFERENT ; IO INSTRUCTION SET). ADD $20/21/22/23U TO SET KA/KI/KL/KS CPU TYPE. ;633 RDH/PTR 8-OCT-85 ; MAKE SYMBOL "$NB" GLOBAL AS # BREAKPOINTS AVAILABLE (EDDT-10 ONLY); ; ENHANCE BREAKPOITN INSERT/REMOVE TO DEAL WITH ERRORS (PARTICULARLY ; BREAKPOINTS THAT MOVED); ONLY TYPE ONE ERROR MESSAGE PER BREAKPOINT ; FAILURE. ;634 RDH 29-OCT-85 ; MAKE DDT %43 WORK ON TOPS-10 (ASSORTED TYPOS, ETC.). *NEVER* INSERT ; BREAKPOINTS ON $X (IT CAN'T WORK). IF AN $4M BLOCK HAS BEEN SPECIFIED, ; UNCONDITIONALLY USE IT (ALWAYS 3-WORD JSR'S, ETC.), OTHERWISE VERIFY ; THAT DDT IS MAPPED INTO THE APPROPRIATE SECTION AND BLINDLY JUMP ; INTO THAT SECTION FOR $X'ING. ALLOW NZS REFERENCES FROM SECTION ZERO ; (RENAMES NZSXCT INTO PZAFI, CALLED LIKE PCAFI; RENAMES DEFSEC INTO ; CEFFAS). FIX $L. IF NZS SYMBOL TABLE(S) AND DDT IN SECTION 0 THEN ; TRY FOR NZS, MAPPING SECTION 0 INTO SECTION 1 (USER MODE ONLY) IF ; POSSIBLE. MAKE $$NX TRY TO EXECUTE THE INSTRUCTION IN SECTION ; "N" (IF BLANK, THEN OK TO EXECUTE IN DDT SECTION). ALLOW BOTH .JBSYM ; AND .JBHSM TO POINT TO GLOBAL SYMBOL VECTOR ADDRESS (BUT UNDEFINEDS ; ONLY FROM .JBSYM). ;635 RCB 9-JAN-86 ; FIX $X OF NZS LUUO (TOPS10). FIX USAGE OF ENTVC. UUO (TOPS10) ; IN PARTICULAR TO HELP LOCATE USER'S SYMBOL TABLE FOR RUN/USE:N WHERE ; PROGRAM CAN GET "RELOCATED" TO DIFFERENT SECTION. ;636 RDH 10-JAN-86 ; $M, $I, AND $U DON'T RETURN ADDRESS AS VALUE (EDIT 333 LOST). ;637 RDH 11-JAN-86 ; FILDDT CAN'T UPDATE 7.03 EXE FILE SYMBOL TABLE. ;640 RDH 19-JAN-86 ; MAKE THE "N" OF $NM AND $NI COMMANDS BE *DECIMAL*. ;641 PTR 30-JAN-86 ; MAKE CEFFAS DEAL WITH IMPOSSIBLE SECTION NUMBERS A BIT BETTER. ; MAKE $X ALWAYS EXECUTE IN THE DEFAULT SECTION, INSTEAD OF ; SOMETIMES IN DDT'S SECTION. ;642 RDH 4-MAR-86 ; MAKE TAG DEFINITIONS TAKE FULL 36-BIT VALUE, RATHER THAN JUST THE ; RIGHT-HALF (18-BIT) VALUE OF "." ;DDT %44(642) Released with TOPS10 version 7.03, Spring 1986 ;643 RDH 12-Apr-86 QAR 869027 ; $4M falls off end of literal, Ill Mem Refs (typo in [636]). ;DDT %44A(643) Released on Autopatch tape 14, Summer 1986 ;644 RCB 1-Jul-86 ; Introduce $X to PMOVE & PMOVEM. Add them to the opcode tables. ;645 RCB 10-Jul-86 ; Fix effective address calculation wrt global references to ACs. ; Needed for LUUO handlers and $1T typeout. ;646 RCB 11-Jul-86 ; Fix some problems with supporting $$Y. Only changes the I/O setup, ; doesn't add any logic for interpreting .SYM files. ;647 RCB 11-Jul-86 ; Prepare for further changes to TOPS-10 entry vector format by allowing ; IFIW as well as global address in $[n]G. ;650 RCB 11-Jul-86 ; I don't know what the authors of 626 & 627 meant to accomplish, but ; those edits broke the symmetry of $nT with $7T. Restore it, this ; time correctly. ;651 RCB 15-Jul-86 ; Finally teach EDDT about CPNDDT. Accomplished via new EDV words: ; .EDCPN (physical address of CPNDDT) and .EDCPU (AOBJN-style pointer ; to table of APR serial numbers). ;652 RCB 15-Jul-86 ; Finally teach FILDDT about the EDV. This allows FILDDT to set up ; mapping on a crash dump (if MCO 12993 is installed). Requires EDV ; word .EDCAC (pointer to crash ACs). ;653 RCB 16-Jul-86 ; Enhance foo$? (ABBREV) to accept LLIMIT, ULIMIT, and WRD2O for ; additional constraints upon symbol value, flags, and module. ; $1? will dump the open module (error if none). $4? will dump only ; globals. $40? will dump only half-killed symbols. The 74 mask ; is anded and then compared. 2 is reserved. LLIMIT and ULIMIT are ; used in the obvious fashion for restricting possible values of ; symbols to be displayed. ;654 RCB 19-Sep-86 ; Fix up changing sections for NZS symbol table access to account for ; the fact that the flags are changed by PUSHJ, and hence not always ; what we expect at the first entry in PDL. ;655 RCB 30-Sep-86 ; Fix up changing sections for $X of pc-reference instructions. Always ; do RESTOR/SAVE (rather than SWAP) so that SECDDT and the various ; SKPS0/SKPNS0 side-effects will be right. ;656 DPM 30-Sep-86 ; Enhance FILDDT-10 by making it type the filespec being examined ; or patched like the -20 version does. Also type filespec of ; file being yanked and the number of symbols loaded. ;DDT %44B(656) released on Autopatch tape 15, Fall 1986 ;657 RCB 4-Nov-86 ; Fixup symbol table information typed out by $1: in FILDDT. ;660 RCB 21-Nov-86 ; Fix 0$nB in non-zero sections not to set 1,,0 as the B.P. address. ;661 RCB 6-Jan-87 ; Fix global breakpoints using the breakpoint block not to assume the ; JSR came from section 0. ;662 RCB 16-Jan-87 ; Fix hidden symbol processing problems with TOPS-10 EDDT, especially ; for SMP. This has the side-effect of replacing edit 657. ;663 RCB 21-Jan-87 ; Finally physically remove the papertape code. This finishes edits 247, ; 307, and 322. FTPTP has been completely removed. ;664 RCB 26-Jan-87 ; Fix up all symbol tables in the ring of EDVs when using hidden symbol ; processing. EDDT-10 only. ;665 RCB 1-Feb-87 ; Fix up $? for NZS DDT examining a program's symbols in S0. ;666 RCB 6-Mar-87 ; Fix up $X of ILDB/IDPB with byte pointer in an AC and PC not in DDT's ; section to not increment the B.P. twice. ;667 RCB 6-Mar-87 ; Fix up for "3/-1,,400" nonsense. ; Don't mistake garbage for an attempt at a DDT internal address, and ; allow space after a comma to override the left half for section ; defaulting. ;670 RCB 10-Mar-87 ; Revoke the second half of 667. ;671 RCB 15-May-87 ; Fix PDFSEC. It gets in TOPS-20's way, too. ;672 RCB 02-Jun-87 ; Fixup some definitions for TOPS-20 to account for the continued ; existance of 4.1 monitors. ;673 RCB 03-Jun-87 ; 672 is incomplete. Forgot about FILDDT and XPEEK%. Deal with it. ;674 RCB 28-Aug-87 ; CEFFAS calls too many low core address ACs. Fix the mask. ;675 RCB 28-Aug-87 ; Default MDDT's initial floating section to MSEC1 rather than to MDDT's ; own executing section. Too many problems with ill-advised $X'ing from ; section 6 happen otherwise. ;676 RCB 26-Feb-88 ; Fix the copyrights for TOPS-20 7.0 and TOPS-10 7.04. ;677 RCB 26-Feb-88 ; Fix problem with building WHO and with the TOPS-10 monitor's symbol ; table size in general. Add FTDSYM, debugging symbols, which defaults ; off for FTEX10 and on for all other cases. If FTDSYM is off, then ; all of DDT's local symbols will be expunged at assembly time. ;700 RCB 26-Feb-88 ; Add the clearmvalue$nM flavor of $M. The 'clearm' is a mask ; to clear and the 'setm' is a mask to set. The masking arguments ; are applied after the 'value' argument if it is also present. ; This applies to $I as well as to $M, but it's more useful for $M. ;701 RCB 26-Feb-88 ; Fix DEPMEM to be able to handle SEGOP. and .PAGWL for 7.04. ;702 RCB 06-Oct-88 ; Add the $$ flavors of searches to type out the number of matches. ;703 RCB 08-Nov-88 ; Finally handle SEGOP.s for 7.04. $$:/text/ looks for a hiseg named ; 'text' to use for the hiseg symbol table on a -10. Also handle ; name$$: appropriately (even for the -20). ;Become version 45 (due mainly to SEGOP.) ;704 RCB 10-Jan-88 ; Fix "c$ (single-character ASCII input). Probably broken by edit 703, ; but I'm not sure. ;705 RCB 11-Mar-89 ; Fix $L typeout for spy pages. They are off by one when adjacent to any ; (different) existing pages within a section. ;706 RCB 27-Apr-89 ; Fix $L for virtual spy pages. The virtual bit was getting lost. ;707 RCB 20-Jun-89 ; Fix $$W, $$N, $$E to type match count again. ;710 RCB 20-Jun-89 ; Fix $U in FILDDT on a crash file when the EDV was good. Re-use the EDV ; information rather than reverting to $$U. ;711 RCB 21-Jun-89 ; Fix $L in FILDDT for a .EXE file with mapping in use. Don't compare ; virtual page numbers against physical limits. Translate first. ;712 RCB 22-Jun-89 ; Clean up some symbol definitions (PC$xxx and PG$xxx) by borrowing SYSPRM ; from GLXMAC. ;713 RCB 23-Jun-89 ; Add FTPURE for starting to do XDDT on the -10. ;714 RCB 23-Jun-89 ; Make $G and ^Z clear BPTIP so that we won't allow $X after a restart. ;715 RCB 18-Sep-89 ; Fix reference to JOBEDV in FILDDT startup (broken on TOPS-20). SUBTTL DDT ASSEMBLY SWITCHES ;SWITCHES FOR DDT FEATURES ;FTDEC10 ;TOPS-10 FACILITIES ;FTDEC20 ;TOPS-20 FACILITIES ;FTEXEC ;EXEC MODE FACILITIES (ALSO RUNS IN USER MODE) ;FTEX20 ;TOPS-20 MONITOR EDDT (LOADS ONLY WITH TOPS-20 MONITOR) ;FTFILE ;FILE DDT ;FTYANK ;PAPER TAPE INPUT FACILITIES ($Y) ;FTVMX ;BUILD DDT.VMX FOR TOPS-10 VIRTUAL MEMORY ;FTMON ;TOPS-20 MONITOR DDT ;FTOPX ;EXTENDED OPCODE DECODING FOR TYPEOUT ;FTDBUG ;DEBUGGING FACILITIES FOR DDT ITSELF (ESP EXEC MODE) ;FTPAGM ;PAGE MAPPING FEATURES ;FTSCSH ;SYMBOL TABLE CACHE ;FTUD20 ;TOPS-20 USER DDT (SHORTHAND SYMBOL) ;FTEX10 ;TOPS-10 EXEC DDT (SHORTHAND FOR FTDEC10&FTEXEC) ;FTUE10 ;TOPS-10 NON-FILE DDT (SHORTHAND SYMBOL) ;FTDSYM ;DEBUGGING SYMBOLS (DDT'S OWN SYMBOLS INCLUDED) ;FTPURE ;READ-WRITE PSECT STARTS OUT EMPTY (TWOSEG ON -10) IFNDEF FTDEC10,< IFNDEF FTDEC20,< FTDEC10==-1 FTDEC20==0>> IFNDEF FTDEC10, IFNDEF FTDEC20, IFNDEF FTFILE, IFNDEF FTYANK, IFNDEF FTEX20, IFNDEF FTEXEC,< IFN FTEX20, IFE FTEX20,> IFNDEF FTVMX,< FTVMX==0> IFNDEF FTMON,< FTMON==0> IFNDEF FTOPX, IFNDEF FTDBUG, IFNDEF FTPAGM, ;NEVER ON TOPS20 USER MODE IFNDEF FTSCSH, ;HAVE CACHE UNLESS EXCLUDED ;NORMALIZE ALL SWITCH VALUES TO 0 OR -1 SO BOOLEAN EXPRESSIONS IN ;CONDITIONALS WORK CORRECTLY. DEFINE ..N (SW)< IRP SW,< IFN SW,>> ..N ..N FTUD20==FTDEC20&<^-FTEXEC>&<^-FTFILE>&<^-FTMON> ;USER -20 FTEX10==FTDEC10&FTEXEC ;EDDT-10 FTUE10==FTDEC10&<^-FTFILE> ;NON-FILE -10 IFNDEF FTDSYM,> IFNDEF FTPURE, ;MDDT INITIALIZES IN THE PSB ..N IFN FTDEC10&, IFN FTDEC20&, IFN FTEXEC&, IFN ^-FTEXEC&, IFN FTFILE&, IFN FTPURE&FTEXEC, SUBTTL TITLE SETTING AND UNIVERSAL SEARCHING SALL ;CLEAN LISTINGS .DIREC FLBLST ;CLEANER LISTINGS IFN FTDEC10,< ;TOPS-10 VERSIONS SEARCH JOBDAT,MACTEN,UUOSYM ;ALL STANDARD TOPS-10 DEFINITIONS IFE FTDBUG,< IFN FTEXEC, IFN FTFILE,<TITLE FILDDT -- TOPS-10 FILE DDT> IFN FTVMX,< IFN FTPURE,<TITLE XDDT -- TOPS-10 EXTENDED DDT> IFE FTPURE,<TITLE VMDDT -- TOPS-10 VM DDT> > IFE FTFILE!FTEXEC!FTVMX,< TITLE UDDT -- TOPS-10 USER MODE DDT> > ;END OF IFE FTDBUG > ;END OF TOPS-10 TITLES IFN FTDEC20,< ;TOPS-20 VERSIONS SEARCH JOBDAT,MONSYM,MACSYM ;ALL STANDARD TOPS-20 DEFINITIONS IFE FTDBUG,< IFN FTEXEC&<^-FTEX20>,<TITLE EDDT -- TOPS-20 EXEC MODE DDT> IFN FTEXEC&FTEX20,<TITLE KDDT -- TOPS-20 MONITOR KERNAL DDT> IFN FTFILE,<TITLE FILDDT -- TOPS-20 FILE DDT> IFN FTMON,<TITLE MDDT -- TOPS-20 MONITOR DDT> IFE FTEXEC!FTFILE!FTMON,<TITLE UDDT -- TOPS-20 USER MODE DDT> > ;END IFE FTDBUG > ;END OF TOPS-20 TITLES IFN FTDBUG,<TITLE DEBDDT -- DEBUGGING VERSION OF DDT> SUBTTL PROGRAM (JOB CONTEXT) PARAMETERS IFN FTFILE!FTVMX,< ;ONLY FILDDTS SET UP VERSION NUMBER LOC .JBVER ;WHERE THE TOPS-10 VERSION INFO GOES %%DDT ;SET THE VERSION WORD RELOC ;BACK TO NORMAL > ;END IFN FTFILE!FTVMX IFN FTDEC10,< ;ONLY TOPS-10 USES .JBDDT IFE FTFILE,< LOC .JBDDT ;CONTAINS DDT END AND START ADDRESSES XWD DDTEND,DDTX ;SET DDT END AND START ADDRESS RELOC ;BACK TO NORMAL > ;END IFE FTFILE ;ONLY TOPS-10 USES .JBBPT IFE FTFILE,< ;BUT ONLY IF NOT FILDDT LOC .JBBPT ;WHERE THE BREAKPOINT PROCESSOR GOES $0BPT ;ADDRESS OF UNSOLICITED BREAKPOINT HANDLER RELOC ;BACK TO NORMAL > ;END IFE FTFILE > ;END IFN FTDEC10 SUBTTL MACROS, ETC. ;.PHASE AND .DEPHASE MACRO DEFINITIONS ;NEEDED BECAUSE PHASE AND DEPHASE DON'T NEST ;USE THESE IN ALL CASES INSTEAD OF PHASE AND DEPHASE ..PLVL==0 ;INITIAL PHASE NESTING LEVEL ;MACRO TO REFERENCE THE LAST LOCATION AT PHASE LEVEL N DEFINE ..PL(N)<..PL'N> ;SYMBOL DEFINED BY .PHASE ;SUBSTITUTE FOR PHASE STATEMENT DEFINE .PHASE(N),< ..==10 ;;SAVE RADIX RADIX 10 ;;MOST LEVELS PER CHAR ..PL(\..PLVL)==. ;;REMEMBER WHERE WE ARE RADIX .. ;;RESTORE THE RADIX IFE <..PLVL-^D99>,<PRINTX ? .PHASE NESTING OVERFLOW> ..PLVL==..PLVL+1 ;;BUMP NESTING LEVEL PHASE N > ;END OF .PHASE DEFINITION ;SUBSTITUTE FOR DEPHASE DEFINE .DEPHASE,< ..PLVL==..PLVL-1 IFL ..PLVL,<PRINTX ? .PHASE NESTING UNDERFLOW> IFG ..PLVL,< ..==10 ;;SAVE RADIX RADIX 10 ;;USE RADIX WE WANT PHASE .+..PL(\..PLVL) ;;BACK TO PREVIOUS PHASE LEVEL RADIX .. ;;BACK TO OLD RADIX > IFE ..PLVL,< DEPHASE ;;JUST DEPHASE AT OUTER LEVEL > > ;END OF .DEPHASE DEFINITION ;SYMBOLS NOT OTHERWISE DEFINED IN STANDARD UNIVSERALS ;TOPS-10 SPECIFIC IFN FTDEC10,< DEFINE TMSG(TEXT)< OUTSTR [ASCIZ\TEXT\] ;;DEFINED IN MACSYM FOR TOPS-20 > > ;END OF IFN FTDEC10 ;TOPS-20 SPECIFIC IFN FTDEC20,< DEFINE ND(S,V),<IF2,<IFDEF S,<S==S>> IFNDEF S,<S==V>> ;NOT IN MACSYM ND .CHCNH,.CHBSP ;THE -10 AND THE -20 USE DIFFERENT NAMES IF2 <PURGE .CHBSP> ;DON'T CLUTTER UP THE SYM TABLE OPDEF PJRST [JRST] ;NOT IN MACSYM .NODDT PJRST ;NO TYPEOUT IN OPCODE FIELD > ;END OF IFN FTDEC20 ;GENERAL MACROS ;SAVE ERROR MESSAGE STRING FOR POSSIBLE LATER TYPEOUT ;REMOVE IFN FTDEC20 DEFINE SMERS (MSG)< PUSH P,[[ASCIZ \MSG\]] POP P,MEMERS> ;TYPE LITERAL STRING DEFINE TSTR (MSG)< MOVEI W1,[ASCIZ \MSG\] PUSHJ P,TSTRG> ;INIT DDT STACK IFN FTMON,< DEFINE INIPDL< MOVEI P,DDTPGA ;;WHERE MDDT THINKS ITS VARS ARE CAIN P,DDTPXA ;;DIRECTLY MAPPED INTO PSB? SKIPA P,[IOWD LPDL,PDL] ;;YES, WE CAN USE A LOCAL STACK POINTER XMOVEI P,PDL-1> ;;MDDT STACK PTR IS GLOBAL > ;END IFN FTMON IFE FTMON,< DEFINE INIPDL<MOVE P,[IOWD LPDL,PDL]>> ;OTHERS ARE LOCAL ;MDDT CHECKPOINT DEFINITIONS IFN FTMON,< DEFINE CHKIN (%CKLAB) < SKIPLE CHKCNT ;;DO WE ALREADY HAVE THE LOCK? JRST %CKLAB ;;YES AOSE @[MSEC1,,MDDLCK] ;;NO, ATTEMPT TO TAKE LOCK JRST [ TSTR <?MDDT BREAKPOINT BLOCK ALREADY IN USE> POPJ P,] ;;FAIL PUSH P,@[MSEC1,,FORKX] ;;SUCCEED POP P,@[MSEC1,,MDDFX] ;;SHOW THE LOCK IS OURS. %CKLAB: AOS CHKCNT> ;;INCREMENT OUR USE COUNT. DEFINE CHKOUT< SKIPG CHKCNT ;;DO WE HAVE THE LOCK? JRST .+3 ;;NO, DON'T TOUCH IT. SOSG CHKCNT ;;DECREMENT USE COUNT. SETOM @[MSEC1,,MDDLCK]> ;;GIVE UP THE LOCK. DEFINE BRKLCK< SKIPG CHKCNT ;;DO WE HAVE THE LOCK? JRST .+3 ;;NO, DON'T TOUCH IT. SETZM CHKCNT ;;YES, CLEAR USE COUNT SETOM @[MSEC1,,MDDLCK]> ;;GIVE UP THE LOCK. > ;END IFN FTMON SUBTTL DDT SYMBOLS ;DEFINE ACCUMULATORS F=0 ;FLAGS P=1 ;PUSH DOWN R=<A==2> ;POINTERS TO TABLES, CORE, ETC. S=<B==3> W=<C==4> ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER T=5 ;TRANSFER DATA W1=6 W2=7 SCH=10 ;MODE CONTROL SWITCH FOR OUTPUT AR=11 ;MODE CONTROL SWITCH FOR OUTPUT ODF=12 ;MODE CONTROL SWITCH FOR OUTPUT - CURRENT RADIX TT=13 ;TEMPORARY TT1=14 ;TEMPORARY TT2=15 ;TEMPORARY TT3=16 ;TEMPORARY .XCREF F, P, R, S, W, A, B, C, T, W1, W2, TT, TT1, TT2, TT3 ;SAVE SOME PAPER .XCREF ..DD IFN FTDEC20,< T1=1 T2=2 T3=3 T4=4 P=17 ;OVERRIDES P=1 ABOVE .XCREF T1, T2, T3, T4, P ;SAVE SOME MORE PAPER .XCREF ..MX1, ..MX2, ..TX1, ..TX2 ;SUPPRESS JUNK SYMBOLS > ;END OF IFN FTDEC20 ;DEFINE PUSHDOWN LIST LENGTH ND LPDL,400 ;400 WORDS IS ENOUGH FOR EVERYBODY ;(INCLUDING MDDT) ;DEFINE NUMBER OF DATA PAGES (MUST AGREE WITH MONITOR FOR MDDT) ND NDDTPG,3 ;HERE TO AVOID MACRO BUG WITH FORWARD REF BELOW SUBTTL GLOBAL SYMBOLS FOR USE BY THE OUTSIDE WORLD IFE FTFILE,< ;FILDDT HAS NO GLOBAL SYMBOLS IFE FTMON,< ;DON'T CONFLICT MDDT WITH EDDT ENTRY DDT ;DEFINE THE MAIN DDT START ADDRESS ;USED ON "R DDT", "DDT$G", ETC. IFN FTEXEC,< ENTRY DDTX ;ENTRY POINT USED BY MONITORS ;ALSO ON TOPS-10 "DDT" MONITOR ;COMMAND TO CLEAR $Y IN PROGRESS > ;END IFN FTEXEC INTERN DDTEND ;END OF DDT, FOR USERS AND MONITOR > ;END IFE FTMON IFN FTDEC20,< ;TOPS-20 SPECIFIC DEFINITIONS IFN FTUD20,< ;TOPS-20 USER DDT DEFINITIONS INTERN DDTEXP ;"EXPORT" VECTOR FOR STUB > ;END IFN FTUD20 IFN FTEX20,< ;TOPS-20 EDDT DEFINITIONS ENTRY $EDDT ;FORCES LOADING OF EDDT IN LIB SEARCH $EDDT==0 ;DON'T CARE ABOUT THE DEFINITION EXTERN EDDBLK ;BREAKPOINT BLOCK FOR KDDT EXTERN DDTCZ ;KDDT USER-MODE EXIT ROUTINE INTERN FAKDDT ;RECOVER AFTER CHANGING SECTIONS > ;END IFN FTEX20 IFN FTEX20!FTMON,< ;COMMON TOPS-20 MONITOR DEFINITIONS EXTERN MSEC1 ;USEFUL MONITOR SECTION EXTERN MONPDV ;MONITOR'S PDVA IF ANY > ;END IFN FTEX20!FTMON IFN FTMON,< ;TOPS-20 MDDT DEFINITIONS ENTRY $MDDT ;FORCES LOADING OF MDDT IN LIBRARY SEARCH $MDDT==0 ;DON'T CARE ENTRY MDDTX ;MDDT EQUIVALENT OF DDTX MDDTX=DDTX EXTERN DDTPGA,DDTPXA ;MONITOR'S PLACE FOR MDDT'S VARIABLES EXTERN FORKX,MDDLCK,MDDFX ;MONITOR BPT INTERLOCK LOCATIONS EXTERN MDDBLK ;BREAKPOINT BLOCK FOR MDDT EXTERN MRETN ;MDDT RETURN ON ^Z EXTERN SWPMWE,SWPMWP ;WRITE-ENABLE/LOCK SWAPPABLE MONITOR EXTERN KIEPT,SPT ;ADDRESSES OF USEFUL TABLES INTERN NDDTPG ;MUST AGREE WITH SPACE IN PSB > ;END IFN FTMON > ;END IFN FTDEC20 > ;END IFE FTFILE SUBTTL MEMORY ALLOCATION PARAMETERS ;THE FOLLOWING PARAMETERS CONTROL WHERE DDT GETS LOADED. ;RUNLOC WHERE DDT'S CODE WILL GO AT RUNTIME. IF NEGATIVE, ; DDT'S CODE WILL START AT RELOCATABLE ZERO. THIS ; PARAMETER IS IGNORED IF FTMON OR FTEX20, SINCE THESE ; FLAVORS OF DDT GO IN SPECIFIC PSECTS OF THE TOPS-20 ; MONITOR. ; ;VARLOC WHERE DDT'S VARIABLES WILL GO AT RUNTIME. IF ; NEGATIVE, DDT'S VARIABLES WILL IMMEDIATELY ; FOLLOW THE CODE. IGNORED IF FTMON OR FTEX20. ;THE FOLLOWING VARIABLES DESCRIBE/REMEMBER DDT'S MEMORY LAYOUT ;BEG.C THE FIRST LOCATION CONTAINING CODE ;END.C THE LAST LOCATION CONTAINING CODE + 1 ;LEN.C THE LENGTH OF THE CODE (END.C-BEG.C) ;BEG.V THE FIRST LOCATION CONTAINING VARIABLE STORAGE ;END.V THE LAST LOCATION CONTAINING VARIABLE STORAGE + 1 ;LEN.V THE LENGTH OF THE VARIABLE AREA (END.V-BEG.V) ;PHVAR THE LOCATION INSIDE THE CODE AREA WHERE A PURE ; COPY OF THE VARIABLE AREA STARTS. ;DDTBEG THE LOWEST ADDRESS THAT IS PART OF DDT (FOR $$Z CODE) ;DDTEND THE HIGHEST ADDRESS (+1) THAT IS PART OF DDT ;DEFAULT RUNLOC AND VARLOC IFN FTVMX,< ND RUNLOC,700000 ;VMDDT DEFAULT ORIGIN IFN FTPURE,<ND VARLOC,770000> ;TWOSEG VERSION'S VARIABLES > IFN FTUD20,< ND RUNLOC,740000 ;TOPS-20 USER DDT'S DEFAULT ORIGIN ND VARLOC,RUNLOC-NDDTPG*1000 ;ORIGIN OF -20 UDDT'S VARS > ND RUNLOC,-1 ;DEFAULT TO RELOCATABLE IF NOT GIVEN ND VARLOC,-1 ; . . . ;SETUP TO ALLOCATE DDT'S CODE AT THE RIGHT PLACE IFN FTEX20,< .PSECT ERCOD ;-20 EDDT IN EXTENDED RESIDENT CODE > ;END IFN FTEX20 IFN FTMON,< .PSECT ENCOD ;-20 MDDT IN EXTENDED NON-RESIDENT CODE > ;END IFN FTMON IFE FTEX20!FTMON,< IFGE RUNLOC,< IFGE VARLOC,< IFN FTPURE&FTDEC10,<.PSECT .HIGH.,RUNLOC> ;HISEG ON -10 IFE FTPURE&FTDEC10,<.PSECT DDTCOD/RONLY,RUNLOC> ;READ-ONLY IF VARS GO ELSEWHERE > ;END IFGE VARLOC IFL VARLOC,< .PSECT DDTALL/RWRITE,RUNLOC ;READ/WRITE IF WE GET VARS TOO > ;END IFL VARLOC > ;END IFGE RUNLOC IFL RUNLOC,< RELOC 0 ;START AT RELOCATABLE 0 IF NO RUNLOC > ;END IFL RUNLOC > ;END IFE FTEX20!FTMON IFGE VARLOC,<IFGE RUNLOC,<IFL <VARLOC-RUNLOC>,< ;>>> DDTBEG:! ;PUT DDTBEG HERE UNLESS SURE VARS ARE LOWER BEG.C:! ;START OF CODE DDTOFS:! ;OFFSET FOR COMMAND DISPATCH SUBTTL OPDEFS ;GENERAL OPDEF SKPUSR [SKIPL USRFLG] ;SKIP IN USER MODE OPDEF SKPEXC [SKIPGE USRFLG] ;SKIP IN EXEC MODE OPDEF SKPKA [SKIPN KAFLG] ;SKIP FOR KA10 OPDEF SKPNKA [SKIPE KAFLG] ;SKIP NOT KA10 OPDEF SKPKI [SKIPN KIFLG] ;SKIP FOR KI10 OPDEF SKPNKI [SKIPE KIFLG] ;SKIP NOT KI10 OPDEF SKPKL [SKIPN KLFLG] ;SKIP FOR KL10 OPDEF SKPNKL [SKIPE KLFLG] ;SKIP NOT KL10 OPDEF SKPKS [SKIPN KSFLG] ;SKIP FOR KS10 OPDEF SKPNKS [SKIPE KSFLG] ;SKIP NOT KS10 OPDEF SKPKLS [SKIPN KLSFLG] ;SKIP FOR KL10 OR KS10 OPDEF SKPKIP [SKIPN KIPAG] ;SKIP FOR KI-PAGING OPDEF SKPKLP [SKIPN KLPAG] ;SKIP FOR KL-PAGING OPDEF SKPS0 [SKIPE SECDDT] ;SKIP IF IN ZERO SECTION OPDEF SKPNS0 [SKIPN SECDDT] ;SKIP IF IN NON-ZERO SECTION ;PROCESSOR OPDEF APRID [700000,,000000];KL-10/KS-10 READ APR ID OPDEF RDAPR [700240,,000000];KS-10 CONI APR, OPDEF WRAPR [700200,,000000];KS-10 CONO APR, OPDEF RDCSB [702040,,000000];KS-10 READ CST BASE OPDEF RDSPB [702000,,000000];KS-10 READ SPT BASE OPDEF RDTIMS [702200,,000000];KS-10 RDTIME OPDEF WRTIMS [702600,,000000];KS-10 WRTIME OPDEF BLTBU [716000,,000000];KS-10 BLT BYTE TO UNIBUS OPDEF BLTUB [717000,,000000];KS-10 BLT UNIBUS TO BYTE OPDEF PMOVE [052000,,000000];KL-10 PHYSICAL MOVE OPDEF PMOVEM [053000,,000000];KL-10 PHYSICAL MOVEM OPDEF GFAD [102B8] ;G-FLOATING ADD OPDEF GFSB [103B8] ;G-FLOATING SUBTRACT OPDEF GFMP [106B8] ;G-FLOATING MULTIPLY OPDEF GFDV [107B8] ;G-FLOATING DIVIDE OPDEF XMOVEI [SETMI] ;MACRO HASN'T GOT IT YET OPDEF IFIW [1B0] ; . . . .NODDT IFIW ;DON'T WANT TO OVERRIDE SETZ OPDEF NOP [TRN] ;FAST NO-OP SUBTTL MISCELLANEOUS DDT SYMBOLS ;ASSEMBLY CONSTANTS ND PAGSIZ,1000 ;"BLOCK" SIZE OF LOGICAL DISK/MEMORY ALLOCATION PAGMSK==PAGSIZ-1 ;"AND" TO MASK TO ADDRESS WITHIN PAGE PG2WRD==^D36-^L<PAGSIZ-1> ;"LSH" FOR PAGE TO WORD ADDRESS WRD2PG==-PG2WRD ;"LSH" FOR WORD TO PAGE ADDRESS VMADR==7777,,777777 ;MASK FOR VIRTUAL MEMORY ADDRESS VSECNO==7777,,0 ;VIRTUAL SECTION NUMBER MASK PCFLGS==777740,,0 ;PC FLAG MASK DDAF==1B0 ;DDT INTERNAL ADDRESS EFIWX==17B5 ;INDEX FIELD IN EFIW EFIWI0==1B0 ;EFIW INDIRECT BIT 0 EFIWI1==1B1 ;EFIW INDIRECT BIT 1 ND BLKSIZ,200 ;"BLOCK" SIZE OF PHYSICAL DISK ALLOCATION BLKMSK==BLKSIZ-1 ;"AND" TO MASK TO ADDRESS WITHIN BLOCK BL2WRD==^D36-^L<BLKSIZ-1> ;"LSH" FOR BLOCK TO WORD ADDRESS WRD2BL==-BL2WRD ;"LSH" FOR WORD TO BLOCK ADDRESS PG2BLK==PG2WRD-BL2WRD ;"LSH" FOR PAGE TO BLOCK ADDRESS BLK2PG==-PG2BLK ;"LSH" FOR BLOCK TO PAGE ADDRESS ND SKPMAX,3 ;MAX NUMBER OF SKP'S IN $X LOGIC ND NSAVTB,^D17 ;NUMBER OF PC'S IN RING BUFFER ($<CR> ETC.) ND INDPTH,100 ;MAX NESTING IN $E SEARCHES ND ADRNGE,1000 ;ADDRESS RANGE FOR SYMBOL+VALUE TYPEOUT ND XTYPAV,4321 ;EXEC-MODE TYPEAHEAD CHECK INTERVAL ND XTYPAW,4 ;WORDS OF BUFFER FOR EXEC-MODE TYPEAHEAD ND PVNAML,^D39 ;PDV NAME LENGTH FOR TYPEIN PVNMSZ==<PVNAML/5>+1 ;WORDS TO STORE PDV NAME IFN FTFILE,<ND SCSIZ,^D200> ;SIZE OF SYMBOL TABLE CACHE FOR FILDDT IFE FTFILE,<ND SCSIZ,^D100> ; ALL OTHER DDTS ;BREAKPOINT SYMBOLS, BREAKPOINT BLOCK ALLOCATION ; REPEAT NBP,<BLOCK NBPBW> ;STORAGE FOR EACH BREAKPOINT (1-12) ; ;(NOTE: BREAKPOINT 0 DOESN'T NEED SPACE HERE) ; BLOCK BPBRST ; FOR USE BY RESTOR ; BLOCK BPB$XL ; FOR USE BY $X CODE ; BLOCK BPI$XL ; FOR USE BY INSTR$X CODE ND NBP,^D12 ;NUMBER OF BREAKPOINTS IFN FTEX10,<$NB==:NBP> ;FOR TOPS-10 MONITOR ND NBPBW,3 ;WORDS PER ENTRY IN BREAKPOINT BLOCK BPBRST==NBP*NBPBW ;1ST BPBLK WORD AVAIL TO RESTOR ND BPBRSL,4 ;WORDS NEEDED BY RESTOR IN BPBLK BPB$X==BPBRST+BPBRSL ;1ST BPBLK WORD AVAIL TO $X ND BPB$XL,2*<SKPMAX+1>+5;WORDS NEEDED BY $X IN BPBLK BPI$X==BPB$X+BPB$XL ;1ST BPBLK WORD AVAIL TO INSTR$X ND BPI$XL,2*<SKPMAX+1>+1;WORDS NEEDED BY INSTR$X IN BPBLK BPBLEN==BPI$X+BPI$XL ;TOTAL LENGTH OF USED BREAKPOINT BLOCK BPBMAX==100 ;ADVERTISED LENGTH OF BREAKPOINT BLOCK ; (MUST AGREE W/ TOPS-20 EDDBLK, MDDBLK) IF2,<IFL <BPBMAX-BPBLEN>,<PRINTX ?BREAKPOINT BLOCK TOO LONG>> ;ADDRESS (PAGE) ACCESS BIT DEFINITIONS DEFINE SYSPRM(NAM,T10,T20),< IFN FTDEC10,<NAM==<T10>> IFN FTDEC20,<NAM==<T20>>> SYSPRM PG$EXI, PA.GNE, PA%PEX ;PAGE EXISTS SYSPRM PG$REA, PA.GRD, PA%RD ;PAGE CAN BE READ SYSPRM PG$WRT, PA.GWR, 1B15 ;PAGE HAS SOME KIND OF WRITE ACCESS SYSPRM PG$WT, PG$WRT, PA%WT ;PAGE IS REALLY WRITABLE SYSPRM PG$CPY, 0, PA%CPY ;PAGE IS COPY-ON-WRITE SYSPRM PG$EXE, 0, PA%EX ;PAGE IS EXECUTABLE SYSPRM PG$ACC, PA.GAA, 0 ;PAGE ACCESS ALLOWED SYSPRM PG$PRV, 0, PA%PRV ;PAGE IS PRIVATE SYSPRM PG$SHR, PA.GSH, 0 ;PAGE IS SHARABLE SYSPRM PG$HGH, PA.GHI, 0 ;PAGE IS PART OF HIGH SEGMENT SYSPRM PG$ABZ, PA.GAZ, 1B17 ;PAGE IS ALLOCATED BUT ZERO SYSPRM PG$SPY, PA.GSP, 0 ;PAGE IS ACTUALLY SPYING ON SOMEONE SYSPRM PG$VIR, PA.GVR, 0 ;SPY PAGE IS VIRTUAL (ON MONITOR) SYSPRM PG$NPG, PA.GCP, 0 ;PAGE CANNOT BE PAGED OUT SYSPRM PG$PGO, PA.GPO, 0 ;PAGE IS PAGED OUT SYSPRM PG$LCK, PA.GLK, 0 ;PAGE IS LOCKED IN MEMORY SYSPRM PG$NCA, PA.GNC, 0 ;PAGE IS NOT CACHED SYSPRM PG$SXI, PA.GSN, PA%PEX ;SECTION EXISTS SYSPRM PG$SMA, PA.GIN, 1B12 ;SECTION MAPPED ELSEWHERE SYSPRM PG$SIN, PA.GIN, SM%IND ;SECTION MAPPED INDIRECTLY SYSPRM PG$SFJ, 0, 1B11 ;SECTION MAPPED TO FORK OR JFN SYSPRM PG$SEC, PA.GSC, 37B17 ;SECTION NUMBER MAPPED TO SYSPRM PG$FRK, 0, 777777 ;FORK/JFN MAPPED TO ;BITS AND FIELDS RELEVANT TO KL PAGING. IFN FTEXEC!FTMON!FTPAGM,< AGEMSK==777B5 ;AGE FIELD CSWRB==1B18 ;CST WRITE ENABLE BIT CORMB==1B35 ;CST MODIFIED BIT PTRCOD==7B2 ;POINTER CODE FIELD IMMCOD==1 ;IMMEDIATE POINTER CODE SHRCOD==2 ;SHARED POINTER CODE INDCOD==3 ;INDIRECT POINTER CODE IMMPTR==<IMMCOD>B2 ;IMMEDIATE POINTER PTPUB==1B3 ;POINTER PUBLIC BIT PTWR==1B4 ;POINTER WRITE BIT PTCACH==1B6 ;POINTER CACHE BIT MSECTB==540 ;MONITOR SECTION TABLE IN EPT PGKLMD==1B21 ;KL PAGING MODE (IN CONI PAG,) PGTPEN==1B22 ;TRAP ENABLE (PAGING ON) (IN CONI PAG,) TWUSR==1B0 ;USER MODE BIT IN PF AND MAP WORD TWHPFF==1B1 ;HARD FAILURE BIT TWVALD==1B2 ;VALID BIT TWWRT==1B5 ;WRITE REF BIT > ;END OF IFN FTEXEC!FTMON!FTPAGM ;PC BITS OF INTEREST SYSPRM PC$AFI, PC.AFI, PC%AFI ;ADDRESS FAILURE INHIBIT SYSPRM PC$USR, PC.USR, PC%USR ;USER MODE SYSPRM PC$BIS, PC.BIS, PC%BIS ;FIRST PART DONE SYSPRM PC$UIO, PC.UIO, PC%UIO ;USER IO MODE ;TERMINAL CONTROL (IN TTYMSK, N$1M COMMAND) ;LEFT HALF BITS, PRESERVED AND SET ONLY BY USER TT$EYB==1B15 ;ECHO $Y BIT (0=ECHO, 1=SUPPRESS) TT$BPI==1B16 ;PRINT INSTRUCTION ON BPT (0=YES, 1=NO) TT$SPC==1B17 ;3 SPACES OR TAB (0=SPACES, 1=TAB) ; (CONTROLS ONLY TTAB; TEXT OUTPUT OK) ;RIGHT HALF BITS, SET AUTOMATICALLY ON USER DDT ENTRY (NOT APPLICABLE ;TO TOPS-20), PRESERVED IN EXEC DDT (WHERE THEY MUST MANUALLY BE SET). TT$TAB==1B34 ;TAB CAPABILITY ; (IF 1 THEN TERMINAL HANDLES TABS) TT$DEL==1B35 ;FANCY DELETE HANDLING ; (IF 1 THEN <BS><SP><BS>) ;FOR FILE DDT ONLY IFN FTFILE,< FIL==1 ;PRIMARY FILE I/O CHANNEL ND WINMAX,^D20 ;PAGE "CACHE" SIZE - PAGES KEPT IN CORE ND MEXSIZ,^D512*^D32 ;MAX PAGES IN REASONABLE .EXE FILE ;.EXE DIRECTORY INFORMATION SV$HIS==SV%HIS ;PAGE IS PART OF HIGH SEGMENT SV$SHR==SV%SHR ;PAGE IS SHARABLE SV$WRT==SV%WRT ;PAGE IS WRITABLE SV$CON==SV%CON ;PAGE IS CONCEALED SV$ABZ==SV%ABZ ;PAGE IS ZERO SV$MOD==1B17 ;PAGE HAS BEEN MODIFIED (WINDIR BIT) SV$FPN==777,,777777 ;FILE PAGE NUMBER MASK > ;END OF IFN FTFILE ;************************************************************ ; ; TEMP DEFS TIL UNIVERSALS HAVE THEM INCORPORATED ; ;************************************************************ IFN FTDEC10,< ;SOME TOPS-10 STUFF .PVCNT==0 ;PDV LENGTH .PVNAM==1 ;POINTER TO NAME STRING .PVSYM==6 ;SYMBOL VECTOR WORD .PVLVR==12 ;LINK VERSION WORD SV%ABZ==0 ;EXE DIRECTORY - PAGE IS ZERO > ;END OF TOPS-10 STUFF IFN FTDEC20,< ;AND SOME TOPS-20 STUFF .SVDIR==1776 ;EXE DIRECTORY HEADER TYPE SV%HIS==1B0 ;EXE DIRECTORY - PAGE IS HISEG PAGE SV%SHR==1B1 ;EXE DIRECTORY - PAGE IS SHARABLE SV%WRT==1B2 ;EXE DIRECTORY - PAGE IS WRITABLE SV%CON==0 ;EXE DIRECTORY - PAGE IS CONCEALED SV%ABZ==1B3 ;EXE DIRECTORY - PAGE IS ZERO .PVEXP==.PVSTR ;"EXPORT" VECTOR (USED TO BE START ADR) > ;END OF FTDEC20 STUFF .SVVEC==1775 ;EXE DIRECTORY ENTRY VECTOR TYPE .SVPDV==1774 ;EXE DIRECTORY PDV TYPE ;PDV SYMBOL VECTOR SYMBOLS .STLEN==0 ;LENGTH WORD IN SYMBOL VECTOR .STDAT==0 ;TYPE/LENGTH WORD IN SUBTABLE .STPTR==1 ;ADDRESS WORD IN SUBTABLE ST%TYP==77B5 ;TYPE FIELD IN .STDAT WORD ST%LEN==^-ST%TYP ;LENGTH FIELD IN .STDAT WORD .UNDFD==0 ;UNDEFINED SYMBOL TYPE CODE .R50D==1 ;RADIX-50 DEFINED TYPE CODE .R50U==2 ;RADIX-50 UNDEFINED TYPE CODE ;*** FLAGS IN F *** FEF== 1B0 ;"E" FLAG COMF== 1B1 ;COMMA TYPED TIF== 1B2 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA DVF== 1B3 ;DIVIDE FPF== 1B4 ;"." TYPED CCF== 1B5 ;"$$" TYPED STF== 1B6 ;SUPPRESS TYPEOUT SAF== 1B7 ;RIGHT ANGLEBRACKET TYPED FAF== 1B8 ;LEFT ANGLEBRACKET TYPED SPF== 1B9 ;SPACE TYPED (USED BY CEFFAD) MLF== 1B10 ;MULTIPLY PTF== 1B11 ;ARITHMETIC OPERATOR TYPED CF== 1B12 ;"$" TYPED LTF== 1B13 ;LETTER TYPED IN CURRENT SYLLABLE DTF== 1B14 ;DIGIT TYPED SF== 1B15 ;SYLLABLE MF== 1B16 ;MINUS SIGN TYPED QF== 1B17 ;QUANTITY TYPED IN TO WORD ASSEMBLER DDLF== 1B18 ;DDT INTERNAL SYMBOL TYPED ROF== 1B19 ;REGISTER OPEN TXF==1B20 ;IN TEXT ([$]"/---/) COMMAND USYMF==1B21 ;R POINTS TO THE UNDEFINED SYMBOL TABLE MDLCLF==1B22 ;MULT DEF LOCAL SYMBOL (EVAL) PNAMEF==1B23 ;PROGRAM NAME SEEN IN SYM TABLE SEARCH ;BIT 24 AVAILABLE LF1== 1B25 ;OUTPUT ONE REGISTER IN FORCED MODE OLF== 1B26 ;OUTSIDE LOCAL FLAG IN LOOK CF1== 1B27 ;OUTPUT ONE REGISTER AS CONSTANT NAF== 1B28 ;NEGATIVE ADDRESSES PERMISSABLE FANYSF==1B29 ;EVAL OR LOOK HAS FOUND A SYMBOL OPTRYF==1B30 ;WE'RE TRYING TO DECODE A SYMBOLIC OPCODE HSYMF== 1B31 ;R POINTS TO HISEG SYMBOL TABLE OKAF== 1B32 ;OK AMBIGUOUS (LOOK ROUTINE) OUTF== 1B33 ;OUTPUT ITF== 1B34 ;INSTRUCTION TYPED Q2F== 1B35 ;NUMBER TYPED AFTER $ ;DEFINE SYMBOL TABLE SYMBOL TYPES GLOBL== 04B5 ;GLOBAL SYMBOL LOCL== 10B5 PNAME== 74B5 ;PROGRAM NAME DELI== 20B5 ;DELETE INPUT DELO== 40B5 ;DELETE OUTPUT ;DEFINE UNDEFINED SYMBOL TABLE (.JBUSY) TYPES STADD== 1B0 ;IF 1, THEN ADDITIVE REQUEST STLH== 1B1 ;IF 1, THEN REQUEST FOR LEFT HALF STNEG== 1B4 ;IF 1, THEN NEGATIVE REQUEST ;RANDOM SYMBOL DEFINITIONS FOR TOPS-10 IFN FTDEC10,< ;THE FSBLK BITS FS$SWT==1B0 ;SWITCH SPECIFIED FS$DEV==1B2 ;DEVICE SPECIFIED FS$NAM==1B3 ;FILENAME SPECIFIED FS$EXT==1B4 ;EXTENSION (FILE TYPE) SPECIFIED FS$PTH==1B5 ;DIRECTORY PATH SPECIFIED FS$FIL==FS$DEV!FS$NAM!FS$EXT!FS$PTH ;FILE SPEC WAS SPECIFIED ;I/O CHANNELS IFN FTYANK,< CM==17 ;I/O CHANNEL TO READ COMMAND FILES ND YBFSIZ,203 ;SIZE OF [INTERNAL] BUFFER FOR COMMAND FILES > ;END IFN FTYANK > ;END OF IFN FTDEC10 SUBTTL START DDT IFE FTFILE,< IFN FTDBUG,< DEBDDT::> DDTX: DDT: IFN FTPURE&FTDEC10,<DEFINE SETRT1<@[0,,.JBBLT]>> IFN FTPURE,< MOVEM T,SETRT1 ;SAVE AN AC IFN FTDEC10,< DMOVEM TT1,@[0,,.JBBLT+1] ;SAVE SOME MORE ACS MOVNI TT1,<<END.V!PAGMSK+1>-<BEG.V&<^-PAGMSK>>>/PAGSIZ XMOVEI TT2,BEG.V ;GET -VE LENGTH AND ADDRESS LSH TT2,WRD2PG ;CONVERT TO STARTING PAGE NUMBER TXO TT2,PA.GDC ;OK IF PAGES ALREADY EXIST MOVE T,[.PAGCD,,TT1] ;UUO ARGUMENT POINTER PAGE. T, ;TRY TO CREATE THE PAGES TRNA ;CAN'T CREATE IN PHYSICAL MEMORY JRST DDTIN0 ;PAGES CREATED TXO TT2,PA.GSL ;TRY TO MAKE THE PAGES ABZ INSTEAD MOVE T,[.PAGCD,,TT1] ;UUO ARGUMENT POINTER PAGE. T, ;TRY TO ALLOCATE THE PAGES TRN ;GIVE UP AND HOPE FOR THE BEST DDTIN0: DMOVE TT1,@[0,,.JBBLT+1] ;RESTORE UUO ARGUMENT ACS > ;END OF IFN FTDEC10 MOVE T,BPT$B+B$JSR CAMN T,[JSR BCOM] ;VARIABLES AREA INITIALIZED? JRST DDTIN1 ;YES MOVE T,[PHVAR,,BEG.V] ;NO, DO IT BLT T,VAREND-1 IFN FTDEC10,< XMOVEI T,$0BPT ;WHERE ^D SHOULD GO MOVEM T,@[0,,.JBBPT] ;SET IT UP SKIPE @[0,,.JBDDT] ;IF ALREADY HAVE THIS, JRST DDTIN1 ;DON'T WASTE THE UUO MOVE T,[DDTEND,,DDT] ;NO--WE NEED TO SET THIS UP SETDDT T, ;SO DO IT > ;END OF IFN FTDEC10 DDTIN1: MOVE T,SETRT1 ;RESTORE SCRATCH AC > ;END IFN FTPURE IFN FTYANK,< SETZM COMAND> ;INDICATE NO COMMAND FILE IF ;STARTING BY DDT COMMAND JSR SAVE PUSHJ P,REMOVB IFN FTUD20,< ;CHECK DDTPDV BEFORE CALLING SYMCHK SKIPN DDTPDV ;DID WE LOOK FOR IT YET? PUSHJ P,HIDPDV ;NO, FIND IT. COME BACK IF NON-EXISTANT. SKIPL T,DDTPDV ;ALREADY LOCATE DDT'S PDV? HLL T,SECDDT ;YES, FIX UP SECTION NUMBER MOVEM T,DDTPDV ;REMEMBER PDVA IN OUR SECTION > ;END IFN FTUD20 PUSHJ P,SYMCHK ;MAKE SURE SYMBOLS ARE OK IFE FTVMX!FTMON,<MOVE W1,[ASCII /DDT/]> ;IDENTIFY USER MODE DDT IFN FTVMX,< IFE FTPURE,<MOVE W1,[ASCII /VMDDT/]> ;IDENTIFY TOPS-10 VM DDT IFN FTPURE,<MOVE W1,[ASCII /XDDT/]> ;IDENTIFY TOPS-10 X DDT > IFN FTMON,<MOVE W1,[ASCII /MDDT/]> ;IDENTIFY TOPS-20 MDDT IFN FTEXEC&<^-FTMON>,< SKPUSR ;IF EXEC MODE, THEN MOVE W1,[ASCII /EDDT/] ;IDENTIFY EXEC MODE DDT > ;END OF IFN FTEXEC PUSHJ P,TEXT2 ;TYPE MESSAGE SAYING WHICH DDT IFN FTDBUG,< MOVEI W1,[ASCIZ/ (debugging)/] PUSHJ P,TSTRG ;DIFFERENTIATE FROM REGULAR DDT(S) > ;END IFN FTDBUG JRST DD1.0 ;GO FOR IT! > ;END IFE FTFILE ;RUDE HACK TO TRY TO GET THE COPYRIGHT TO BE INTACT IN DDT.REL .ORG 0 EXP 0 .ORG ;LEGAL NOTICE FOR BINARIES ASCIZ " COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1970,1989. ALL RIGHTS RESERVED. " SUBTTL DDT COMMAND PARSER DD1.0: SKIPE T,PTLLC ;GET LAST PATCH LOCATION CHANGED MOVEM T,LLOC ;SET . TO IT, IF WE WERE PATCHING SETZM PTLOC ;DEFINE NO PATCH IN PROGRESS DD1: PUSHJ P,TCRLF DD1.5: TXZ F,ROF ;CLOSE ANY OPEN REGISTER MOVE T,[XWD SCHM,SCH] BLT T,ODF ;LOAD ACS MOVE T,PSVBTS MOVEM T,SVBTS MOVE T,PBYSS MOVEM T,BYSS SKIPA ;SKIP TAB TYPEOUT RET: PUSHJ P,TTAB ;TYPE A TAB AND FALL THROUGH TO DD2 IFN FTMON,<BRKLCK> ;GIVE UP MDDT LOCK IF HOLDING IT. DD2: MOVE T,[SCH,,SCHR] ;SAVE CURRENT TYPEOUT MODES BLT T,ODFR ;IN CASE REPARSE NEEDED SETZM PRNC ;PARENTHESES COUNT INIPDL ;INIT STACK POINTER SETZM WAKALL ;SET WAKEUP SET TO PUNCT AND CTRLS XMOVEI T,RET ;INIT TOP OF STACK TO RET MOVEM T,XPDL ;SO COMMAND ROUTINES CAN POPJ DMOVE T,USYMP+S$ADR ;GET ORIGINAL UNDEFINED SYMBOL PTR DMOVEM T,ESTUT ;INIT UNDEFINED SYM ASSEMBLER COPY LIS0C: TXZ F,<^-<STF>&<-1,,0>>!LF1!CF1!OKAF!ITF!Q2F LIS0E: TXZ F,<^-<STF!FAF!SAF>&<-1,,0>>!NAF!DDLF SETZM ACCCF ;CLEAR COMMACOMMA FLAG/VALUE SETZM WRD LIS1: SETZM FRASE TXZ F,FEF ;TURN OFF SCIENTIFIC EXPONENT FLAG LIS2: MOVEI T,1 MOVEM T,FRASE1 TXZ F,MLF!DVF L1: TXZ F,CF!CCF!SF!FPF!Q2F!LTF!TXF!DTF ;TURN OFF CONTROL, SYL, PERIOD FLAG L1A: SETZM SYL L1RPR: SETZM SYM MOVEI T,6 MOVEM T,TEM ;INIT SYMBOL COUNTER MOVE T,[POINT 7,OPTXT] MOVEM T,CHP ;SETUP FOR OPEVAL SYMBOL SETZM DEN SETZM WRD2D SETZM WRD2O ;CONTINUED ON NEXT PAGE ;CONTINUED FROM PREVIOUS PAGE L2: PUSHJ P,TIN ;PICK UP CHARACTER CAIL T,"A"+40 ;LOWER CASE A CAILE T,"Z"+40 ;LOWER CASE Z JRST .+2 TRC T,40 ;CHANGE LOWER CASE TO UPPER CASE TXNE F,CF ;CONTROL FLAG JRST L21 CAIG T,"Z" ;Z CAIGE T,"A" ;A JRST .+2 JRST LET L21: CAIN T,"`" ;<GRAVE> MAPPED TO <ESC> MOVEI T,.CHESC MOVE R,T CAILE T,137 ;DISPATCH TABLE HAS ENTRIES ONLY .LE. 137 JRST ERR IDIVI R,3 ;REMAINDER GIVES COLUMN, QUOTIENT GIVES ROW LDB W,BDISP(R+1) ;GET 12 BIT ADDRESS FROM DISPATCH TABLE CAIGE W,MULT-DDTOFS ;FIRST EVAL ROUTINE JRST DDTOFS(W) L0: MOVE T,SYL TXNN F,LTF JRST POWER ;TIME TO EVALUATE A SYMBOL. IF THIS IS IN THE OPCODE FIELD (1ST THING ;TYPED AND TERMINATED WITH A SPACE), THEN SEARCH ORDER IS: ;1. OPDEFS FROM THE S.T. (B0-8 .NE. 0) 2. BUILT-IN OPCODES 3. REST OF S.T. ;IF THE SYMBOL TYPED IS NOT IN THE OPCODE FIELD, THEN THE ORDER IS: ;1. ANY MATCH IN THE S.T. 2. DDT'S BUILT-IN OPCODES. ;THE FLAG OPTRYF INDICATES THAT WE ARE TRYING TO SEARCH FOR AN OPCODE. TXO F,OPTRYF ;ASSUME WE ARE IN THE OPCODE FIELD CAIN W,SPACE-DDTOFS ;IS TERMINATOR A SPACE? SKIPE WRD ;IS CONSTRUCTED WORD SO FAR ZERO? TXZ F,OPTRYF ;NO, NOT AN OPCODE PUSHJ P,EVAL ;TRY FOR A MATCH IN THE S.T. JRST [ TXZ F,OPTRYF ;SO UNDEF TEST BELOW WILL WORK JRST L27] ;TRY BUILT-IN OPCODES TXNE F,OPTRYF ;ONLY WANT OPDEFS? TXNE T,777B8 ;YES, IS THIS ONE? JRST L3 ;WE'LL TAKE ANYTHING OR THIS IS AN OPCODE MOVEM T,TENSYM ;ONLY NON-OPCODE FOUND, SAVE TENATIVE MATCH L27: PUSHJ P,OPEVAL ;SEARCH FOR A (BETTER?) MATCH IN OPCODES SKIPA T,TENSYM ;NOTHING, HAD BETTER BE A SAVED VAL JRST L3 ;BETTER MATCH FOUND, GO WITH IT TXZN F,OPTRYF ;DID EARLIER EVAL FIND ANYTHING? JRST UND1 ;NO, GIVE UP ;CONTINUED ON NEXT PAGE ;CONTINUED FROM PREVIOUS PAGE L3: CAIN W,ASSEM-DDTOFS ;DEFINED SYMBOL FOLLOWED BY #? JRST ERR ;IF DEFINED, DON'T ALLOW # L4: TXZE F,MF MOVN T,T TXNN F,SF CAIE W,LPRN-DDTOFS JRST .+2 JRST LPRN EXCH T,FRASE1 TXNN F,DVF IMULB T,FRASE1 TXZE F,DVF IDIVB T,FRASE1 CAIGE W,ASSEM-DDTOFS JRST DDTOFS(W) ;MULTIPLY OR DIVIDE ADDB T,FRASE CAIGE W,SPACE-DDTOFS JRST DDTOFS(W) ; + - @ , MOVE W1,T ;GET A WORKING COPY OF ARGUMENT XOR W1,WRD ;WILL ADD OVERFLOW? JUMPL W1,SKP311 ;NO, DO IT NORMALLY TLC T,(1B0) ;YES, TURN OFF SIGN BIT ADD T,WRD ;NOW DO THE ADD TLCA T,(1B0) ;FIX THE SIGN BIT AND SKIP SKP311: ADD T,WRD TXNE F,TIF ;TRUNCATE INDICATOR FLAG HLL T,WRD ;TRUNCATE MOVEM T,WRD TXNN F,QF MOVE T,LWT SETZM R DMOVE W1,ESTUT ;GET ADR AND LENGTH FOR DEPRA CAMN W1,USYMP+S$ADR ;IF THERE ARE ANY UNDEFINED SYMBOLS IN JRST L5 ;THE CURRENT EXPRESSION, ANYTHING EXCEPT CAILE W,CARR-DDTOFS ;FURTHER EXPRESSION INPUT, OR DEPOSITING JRST ERR ; INTO MEMORY IS ILLEGAL L5: CAIG W,RPRN-DDTOFS JRST DDTOFS(W) SKIPN PRNC ;WHEN INSIDE ( ), CURRENT EXPRESSION INVALID JRST DDTOFS(W) ;FOR ANYTHING OTHER THAN MORE EXPRESSION INPUT JRST ERR ;CALL TO EVAL ARGUMENT IF NOT ALREADY DONE (I.E. CODE WAS IN "NO-EVAL" ;ADDRESS RANGE) XEVAL: MOVEI W,[POPJ P,] ;COUNT ON THIS LITERAL BEING AFTER EVERYTHING SUBI W,DDTOFS ;ADJUST FOR OFFSET JRST L0 ;GO EVAL, THEN JUMP TO THE POPJ ;HANDLE AN UNDEFINED SYMBOL UND1: SKIPN ESTUT ;ANY UNDEFINED SYMBOL TABLE? JRST UNDEF ;NO, CAN'T DO THIS PUSHJ P,EVALU ;SEE IF SYM IS IN THE UNDEFINED TABLE JRST UND3 ;SYMBOL DOES NOT EXIST TXNE F,ROF ;SYM EXISTS, LOCATION OPEN CAILE W,CARR-DDTOFS ;AND STILL BUILDING WORD FOR IT? JRST UNDEF ;NO - THEN "U" ERROR (E.G. "=" CMD) CAIE W,ACCF-DDTOFS ;EXPRESSION INVOLVING A COMMA? SKIPE PRNC ;OR INSIDE PARENTHESIS? JRST UNDEF ;YES - "U" ERROR JRST UND4 ;NO, CONTINUE UND3: CAIN W,ASSEM-DDTOFS ;DEFINING SYMBOL VIA "#" CMD TXNN F,ROF ;FOR A LOCATION THAT IS OPEN? JRST UNDEF ;NO - THEN "U" ERROR SKIPE PRNC ;YES - INSIDE PARENTHESIS? JRST ERR ;YES - ILLEGAL, "?" ERROR UND4: MOVEI T,"#" CAIE W,ASSEM-DDTOFS PUSHJ P,TOUT SOS ESTUT ;MAKE ROOM IN UNDEF TABLE SOS ESTUT AOS ESTUTL ;UPDATE LENGTH TOO AOS ESTUTL MOVE T,SYM TXO T,GLOBL MOVX R,1B1 ;DEPOSIT INTO 1ST WORD OF UNDEF TABLE PUSHJ P,DSYMER ;DEPOSIT AND TYPE ? IF IT FAILS MOVE T,LLOCO ;WANT 30-BIT FIXUP ADDRESS TXNE F,MF TXO T,STNEG ;SET FLAG TO SHOW SUBTRACTIVE REQUEST TXO T,STADD ;SET FLAG TO SHOW UNCHAINED REQUEST ADDI R,1 PUSHJ P,DSYMER SETZ T, JRST L4 ;DDT'S COMMAND PARSER DETERMINES WHAT TYPE OF COMMAND THIS IS BY ;RANGE-CHECKING THE DISPATCH ADDRESS OF THE COMMAND TO SEE WHICH ;ONE OF THE BELOW REGIONS IT FALLS INTO, THEREFORE: ; ; ; ***** WARNING ****** ; ;DO NOT MOVE A COMMAND ROUTINE ACROSS A REGION BOUNDARY UNLESS YOU KNOW ;WHAT YOU ARE DOING! THE PARSER IS VERY UNFORGIVING IN THIS RESPECT! ; ; ;THE FOLLOWING CLASSES OF COMMAND EXIST: ; ;CLASS 1: COMMANDS THAT TAKE NO ARGUMENT, OR THAT TAKE A SYMBOL ; NAME WITHOUT EVALUATION. ; ;CLASS 2: MULTIPLY AND DIVIDE. ; ;CLASS 3: COMMANDS THAT ADD SOME FUNCTION OF THE UPCOMING QUANTITY ; TO THE ACCUMULATING RESULT. ; ;CLASS 4: LAST COMMANDS THAT ARE LEGAL INSIDE PARENTHESES. ; ;CLASS 5: LAST COMMANDS THAT ARE LEGAL WHEN THE EXPRESSION ; CONTAINS UNDEFINED SYMBOLS. ; ;CLASS 6: EVERYTHING ELSE. THESE COMMANDS TYPICALLY TAKE A ; COMPLETELY EVALUATED EXPRESSION, THAT CANNOT CONTAIN ; REFERENCES TO UNDEFINED SYMBOLS. ; ; ;NOTE THAT THESE CLASSES ARE ONLY APPROXIMATE. REFER TO THE CODE IN ;THE COMMAND PARSER FOR DEFINITIVE INFORMATION. SUBTTL COMMAND DISPATCH TABLE BDISP: POINT 12,DISP(R),11 POINT 12,DISP(R),23 POINT 12,DISP(R),35 DISP: DEFINE D (Z1,Z2,Z3)< BYTE (12) Z1-DDTOFS,Z2-DDTOFS,Z3-DDTOFS IFN <<Z1-DDTOFS>!<Z2-DDTOFS>!<Z3-DDTOFS>>&<-1,,770000>, <PRINTX Z1, Z2, OR Z3 TOO LARGE FOR DISPATCH TABLE> > ;THIS MACRO PACKS 3 ADDRESSES INTO ONE WORD; EACH ADR IS 12 BITS D (ERR,ERR,ERR); (0) ^@ ^A ^B D (CNTRLZ,ERR,CNTRLE); (3) ^C ^D ^E D (ERR,ERR,VARRW); (6) ^F ^G ^H D (TAB,LINEF,ERR); (11) ^I ^J ^K D (ERR,CARR,ERR); (14) ^L ^M ^N D (ERR,ERR,ERR); (17) ^O ^P ^Q D (ERR,ERR,ERR); (22) ^R ^S ^T D (ERR,ERR,ERR); (25) ^U ^V ^W D (ERR,ERR,CNTRLZ); (30) ^X ^Y ^Z D (CONTROL,ERR,ERR); (33) ^[ ^\ ^] D (ERR,ERR,SPACE); (36) ^^ ^_ D (SUPTYO,TEXI,ASSEM); (41) ! " # D (DOLLAR,PERC,ERR); (44) $ % & D (DIVD,LPRN,RPRN); (47) ' ( ) D (MULT,PLUS,ACCF); (52) * + , D (MINUS,PERIOD,SLASH); (55) - . / D (NUM,NUM,NUM); (60) 0 1 2 D (NUM,NUM,NUM); (63) 3 4 5 D (NUM,NUM,NUM); (66) 6 7 8 D (NUM,TAG,SEMIC); (71) 9 : ; D (LLIM,EQUAL,ULIM); (74) < = > D (QUESTN,INDIRE,ABSA); (77) ? @ A D (BPS,CON,SYMD); (102) B C D D (EFFEC,SFLOT,GO); (105) E F G D (HWRDS,PILOC,ERR); (110) H I J D (KILL,PAGMAP,MASK); (113) K L M D (NWORD,BITO,PROCD); (116) N O P D (QUAN,RELA,SYMBOL); (121) Q R S D (TEXO,SETPAG,WATCH); (124) T U V D (DBLU,XEC,TAPIN); (127) W X Y D (ZERO,OCON,ICON); (132) Z [ \ D (OSYM,VARRW,UNDRL); (135) ] ^ _ ;THIS TABLE DOES NOT HAVE ENTRIES FOR CHARS .GE. 140; THESE ; ARE DETECTED AS ERRORS NEAR L21: SUBTTL COMMAND ROUTINES -- CLASS 1 ;*************** START OF CLASS ONE COMMANDS *************** ;"ERR" IS THE DISPATCH FOR ALL UNDEFINED COMMANDS. VARIOUS COMMANDS ;ALSO JUMP TO ERR, WRONG, ETC. IF THEY DETECT SOME KIND OF ERROR. WRONG: MOVE W1,[ASCII /XXX/] PUSHJ P,TEXT JRST WRONG6 RERR: SETZ T, ;ERROR RETURN WO PRINTING ANYTHING JRST WRONG2 ERR: MOVEI T,"?" ;DDT'S UBIQUITOUS QUESTION MARK JRST WRONG2 ;JOIN COMMON ERROR PROCESSING MULDEF: SKIPA T,["M"] ;MULTIPLY-DEFINED SYMBOL UNDEF: MOVEI T,"U" ;UNDEFINED SYMBOL WRONG2: INIPDL ;ENSURE FRESH STACK IFN FTYANK,< ;IF COMMAND FILES SUPPORTED SKIPE COMAND ;IN A COMMAND FILE? SKIPN YASWF ;YES, ABORT ON COMMAND ERROR? JRST WRONG3 ;NO,KEEP ON GOING (IGNORE ERROR) PUSH P,T ;YES, SAVE ERROR SYMBOL PUSHJ P,PTRKIL ;KILL OFF THE COMMAND FILE POP P,T ;RESTORE ERROR SYMBOL TXZ F,ROF ;ARBITRARILY CLOSE OPEN LOCATION > ;END IFN FTYANK WRONG3: JUMPE T,WRONG4 ;SKIP DINK IF NOTHING TO TYPE HERE PUSHJ P,TOUT ;ISSUE ERROR MESSAGE PUSHJ P,TBEL ;AND DINK THE USER WRONG4: PUSHJ P,TTYCLR ;CLEAR INPUT BUFFER WRONG6: TXNN F,ROF ;REGISTER OPEN? JRST DD1 ;NO, CRLF. OTHERWISE, FALL INTO RET JRST RET ;HERE ON A DIGIT NUM: TXO F,DTF ;DIGIT TYPED ANDI T,17 ;T HOLDS CHARACTER TXNE F,CF!FPF JRST NM1 MOVE W,SYL LSH W,3 ADD W,T MOVEM W,SYL MOVE W1,DEN MULI W1,12 ;CONVERT TO DECIMAL WITHOUT OVERFLOW ADD W2,T MOVEM W2,DEN AOJA T,LE1A DOLLAR: SKIPA T,[46+101-13] ;RADIX 50 $ TO BE PERC: MOVEI T,47+101-13 ;PERCENT SIGN LET: TXC F,SF!FPF!DTF ;EXPONENT IFF (LTF)'*(FEF)'*(T=105)*(SF)*(FPF)*(DTF)=1 TXZN F,LTF!FEF!SF!FPF!DTF CAIE T,"E" TXOA F,LTF TXOA F,FEF JRST LET1 TXZN F,MF SKIPA W1,SYL MOVN W1,SYL MOVEM W1,FSV SETZM DEN LET1: SUBI T,101-13 ;FORM RADIX 50 SYMBOL LE1A: TXO F,SF!QF LE2: SOSGE TEM ;IGNORE CHARACS AFTER 6 JRST L2 MOVEI W,50 IMULM W,SYM ;MULTIPLY BY RADIX 50 ADDM T,SYM ; AND ADD NEW CHAR INTO SYM PUSHJ P,PSYMT ;CONVERT LETTERS BACK TO ASCII IDPB T,CHP JRST L2 NUM1: MOVE W,WRD2O ;OCTAL FORM OF NUMBER AFTER $ LSH W,3 ADD W,T MOVEM W,WRD2O EXCH T,WRD2D ;DECIMAL FORM OF NUMBER AFTER $ IMULI T,12 ADDM T,WRD2D TRO F,Q2F JRST L2 NM1: TXNE F,CF JRST NUM1 MOVEI W1,6 ;FORM FLOATING POINT NUMBER AOS NM1A XCT NM1A ;MOVEI W2,.. MOVSI R,201400 NM1A1: TRZE W2,1 FMPR R,FT(W1) JUMPE W2,NM1B LSH W2,-1 SOJG W1,NM1A1 NM1B: MOVSI W1,211000(T) FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT FADRB R,FH ;ADD VALUE INTO FLOATING NO. MOVEM R,SYL AOJA T,LE1A POWER: TXNN F,FEF JRST L4 ;NO EXPONENT ;REMOVE USELESS CODE MOVE W2,DEN SETZM FRASE MOVEI W1,FT-1 TXZE F,MF MOVEI W1,FT01 SKIPA T,FSV POW2: LSH W2,-1 TRZE W2,1 FMPR T,(W1) JUMPE W2,L4 SOJA W1,POW2 PERIOD: TXNN F,CF!CCF ;$. OR $$. COMMAND? JRST PERIO2 ;NO, JUST . CHARACTER BY ITSELF IFE FTFILE,< ;YES SKIPN BPTIP ;BREAKPOINT IN PROGRESS? JRST ERR ;NO, THEN NOT LEGAL AFTER ALL TXNN F,CCF ;$. OR $$. COMMAND? SKIPA T,PCWRD ;$. -- CURRENT $X PC MOVE T,I.NPC ;$$. -- PREVIOUS $X PC TXZA F,CF!CCF ;CLEAR CONTROL FLAGS > ;END IFE FTFILE IFN FTFILE,< JRST ERR> ;ILLEGAL IN FILDDT PERIO2: MOVE T,LLOC ;JUST ".", LAST LOCATION OPENED TXNE F,SF MOVE T,DEN MOVEM T,SYL TXNE F,FPF ;HAS A PERIOD BEEN SEEN BEFORE? TXO F,LTF ;YES, TWO PERIODS MAKES A SYMBOL TXON F,FPF!SF!QF SETZ T, IDIVI T,400 SKIPE T TLC T,243000 TLC W1,233000 FAD T,[0] ;NORMALIZE T AND W1 FAD W1,[0] FADR T,W1 MOVEM T,FH HLLZS NM1A MOVEI T,45 ;RADIX 50 PERIOD JRST LE2 QUAN: TXNN F,CCF ;$Q OR $$Q, WHICH? SKIPA T,LWT ;$Q STRAIGHT MOVS T,LWT ;$$Q SWAPPED QUAN1: MOVEM T,SYL QUAN2: TXO F,SF!QF ;WRD,SYL STARTED TXZ F,CF!CCF JRST L2 ;HERE WHEN ESC TYPED CONTRO: TXOE F,CF TXO F,CCF SETOM WAKALL ;SET WAKEUP ON EVERYTHING JRST L2 QUESTN: PUSHJ P,TCRLF ;HERE FOR "?" IFN FTDEC20,< TXNE F,CCF ;TWO ESC? JRST [ PUSHJ P,XEVAL ;YES, EVAL PREV EXPRESSION MOVEI T1,.PRIOU HRLOI T2,.FHSLF ;ASSUME THIS FORK, LAST ERROR IFN FTEXEC,< SKPUSR ;ONLY LEGAL IN USER MODE JRST ERR ;EXEC MODE, ERROR > ;END IFN FTEXEC IFN FTFILE,< TXC F,QF ;TEST FOR ILLEGAL COMBINATIONS TXNE F,QF!FAF ;FOO$$? IS ONLY LEGAL FORM JRST ERR ;FORK OR NO ERR CODE, NO GOOD > ;END IFN FTFILE IFE FTFILE,< TXNE F,FAF ;FORK SPECIFIED? HRL T2,LLIMIT ;YES TXNE F,QF ;ERROR CODE SPECIFIED? > ;END IFE FTFILE HRR T2,WRD ;YES SETZ T3, ERSTR% ERJMP ERR ;TRAP ILLEGAL FORK NUMBER FROM USER JRST ERR JRST DD1] ;DONE > ;END IFN FTDEC20 TXNE F,CF ;ONE ESC? JRST [ TXNE F,QF!SAF!FAF!Q2F ;YES, ANYTHING TYPED IN FRONT? JRST ABBREV ;YES, GO TYPE SOME SYMBOLS SKIPE W1,MEMERS ;YES, TYPE LAST ERROR MESSAGE PUSHJ P,TSTRG JRST DD1] TXNE F,LTF ;HAS A SYMBOL BEEN TYPED? JRST QLIST ;YES PUSHJ P,USYSET ;NO, LIST UNDEFINED SYMBOLS QUEST2: SOSGE R ;POINT TO NAME WORD OF PREVIOUS SYMBOL PUSHJ P,ADVSYM ;DONE, SEE IF ANY MORE TABLE SKIPA W2,@SYPTR ;GET THE NAME JRST DD1 ;ALL DONE, <CRLF> AND RESTART TXZ W2,PNAME ;CLEAR FLAGS PUSHJ P,PSYM ;TYPE THE SYMBOL PUSHJ P,TCRLF ;END WITH A CRLF SOJA R,QUEST2 ;SKIP VAL WORD OF NEXT SYMBOL AND LOOP ;HERE TO LIST ALL REFERENCES TO A SYMBOL QLIST: PUSHJ P,SYMSET ;SET UP TO WALK THROUGH TABLE QLIST2: SOSGE R ;ANY MORE TABLE? PUSHJ P,ADVSYM ;MAYBE NOT, CHECK IT OUT SKIPA W1,@SYPTR ;YES, GET THE NEXT NAME JRST DD1 ;ALL DONE, <CRLF> AND GET NEXT COMMAND TXZE W1,PNAME ;IS THIS THE NEXT MODULE NAME? JRST QLIST4 ;NO, GO SEE IF THE SYMBOL NAME MATCHES MOVE W2,W1 ;SAVE THIS MODULE NAME IN CASE WE MATCH SOJA R,QLIST2 ;GET NEXT NAME QLIST4: CAME W1,SYM ;A MATCH? SOJA R,QLIST2 ;NO, PROCEED PUSHJ P,PSYM ;YES, TYPE CURRENT MODULE NAME MOVE W1,@SYPTR ;RETRIEVE FLAGS TXNN W1,GLOBL ;A GLOBAL SYMBOL? JRST QLIST6 ;NO, GO TYPE CRLF PUSHJ P,TSPC ;YES, TYPE " G" MOVEI T,"G" ; . . . PUSHJ P,TOUT ; . . . QLIST6: PUSHJ P,TCRLF ;END LINE SOJA R,QLIST2 ;ON TO ANOTHER SYMBOL ;FOO$? COMMAND -- TYPE OUT SYMBOLS STARTING WITH FOO ABBREV: TXNE F,TIF!COMF!PTF!MF!CCF ;CHECK FOR LEGAL ARGUMENTS JRST ERR ;$$ AND EXPRESSION ARE ILLEGAL SKIPN W1,SYM ;ANYTHING RESEMBLING A SYMBOL TYPED? TXNE F,SAF!FAF!Q2F ;NO, IS IT OK ANYWAY? SKIPA W2,W1 ;YES, GET ANOTHER COPY JRST ERR ;NO, COMPLAIN TXNN F,Q2F ;DID WE GET ANY FLAGS? SETZM WRD2O ;NO, MAKE SURE WE KNOW IT MOVX T,1B0 ;NEGATIVE INFINITY TXNN F,FAF ;HAVE A LOWER LIMIT? MOVEM T,LLIMIT ;NO, SET IT UP TXNE F,FAF ;CHECK AGAIN SKIPA T,LLIMIT ;YES, COPY IT MOVX T,<^-<1B0>> ;NO, USE POSITIVE INFINITY TXNN F,SAF ;IF NO UPPER LIMIT GIVEN, MOVEM T,ULIMIT ;USE WHAT WE JUST SET UP MOVE T,ULIMIT ;GET UPPER LIMIT CAMGE T,LLIMIT ;LIMITS IN THE RIGHT ORDER? JRST ERR ;NO, COMPLAIN MOVEI T,75 ;ONLY MASKS CURRENTLY DEFINED ANDCA T,WRD2O ;SEE IF ANY UNKNOWN BITS ARE ON JUMPN T,ERR ;COMPLAIN IF SO ABBRE1: CAMLE W2,[RADIX50 0,%%%%%] ;PADDED ENOUGH YET? JRST ABBRE2 ;YES IMULI W1,50 ;SHIFT SYM ONE PLACE TO THE LEFT IMULI W2,50 ;THIS ONE TOO ADDI W2,47 ;AND PAD TO BE UPPER LIMIT JRST ABBRE1 ;SEE IF IT'S ENOUGH ;HERE WITH W1 LEFT JUSTIFIED, BLANK PADDED, AND W2 LEFT JUSTIFIED, MAX PADDED. ABBRE2: DMOVEM W1,ABBSY1 ;SAVE THE PADDED SYMBOLS PUSHJ P,SYMSET ;SET UP TO LOOK AT SYMBOL TABLE MOVE T,WRD2O ;GET FLAGS AGAIN TRZE T,1 ;WANT ONLY OPEN SYMBOL TABLE? TXNN F,PNAMEF ;YES, IS THERE ONE OPEN? CAIA ;IT'S OK, PROCEED JRST ERR ;NO, GIVE UP ANDCAM T,WRD2O ;MAKE 0/NON-0 FLAG FOR LATER ROT T,-6 ;SHIFT TO MATCH PNAME MOVEM T,ABBSY3 ;SAVE FOR FLAG TESTING ABBRE3: TRNN R,36 ;EVERY FEW SYMBOLS JRST [ PUSHJ P,LISTEN ;CHECK FOR TYPEIN JRST .+1 ;NOTHING, KEEP GOING JRST DD1] ;USER WANTS TO ABORT SOSGE R ;COUNT DOWN SYMBOLS PUSHJ P,ADVSYM ;REACHED END, ANY MORE? SKIPA W2,@SYPTR ;FETCH THE SYMBOL JRST DD1 ;NO MORE SYMBOLS, ALL DONE MOVE T,W2 ;KEEP A COPY WITH THE FLAGS TXZE W2,PNAME ;IS IT A MODULE NAME? TDZA W1,W1 ;NO, REMEMBER THAT SETO W1, ;YES, REMEMBER THAT ABBRE5: CAMG W2,[RADIX50 0,%%%%%] ;PADDED TO SIX CHARS? JRST [ IMULI W2,50 ;NO, SHIFT ONE PLACE JRST ABBRE5] ;AND TRY AGAIN JUMPE W1,ABBRE7 ;IS IT A MODULE NAME? MOVE W,W2 ;YES, SAVE (PADDED) NAME SKIPN WRD2O ;IF ALL MODULES DESIRED, SOJA R,ABBRE3 ;TRY NEXT SYMBOL AOS T,WRD2O ;INCREMENT COUNTER CAIN T,2 ;IF JUST PASSING OUR DESIRED MODULE NAME, SOJA R,ABBRE3 ;KEEP GOING JRST DD1 ;ELSE DONE ABBRE7: CAML W2,ABBSY1 ;IS IT IN RANGE? CAMLE W2,ABBSY2 SOJA R,ABBRE3 ;NO, TRY NEXT SYMBOL AND T,ABBSY3 ;YES, GET ITS FLAGS CAME T,ABBSY3 ;SEE IF A MATCH SOJA R,ABBRE3 ;NO, TRY NEXT XMOVEI T,@SYPTR ;POINT TO SYMBOL ENTRY AOJ T, ;WANT VALUE WORD MOVE T,@T ;FETCH IT CAML T,LLIMIT ;IN RANGE? CAMLE T,ULIMIT ;BOTH WAYS? SOJA R,ABBRE3 ;NO, TRY NEXT SYMBOL PUSH P,R ;YES, SAVE SYMBOL INDEX PUSH P,T ;AND VALUE PUSHJ P,PSYM ;YES, TYPE OUT THE (PADDED) SYMBOL PUSHJ P,TTAB ;WHITE SPACE MOVE W2,W ;GET MODULE NAME PUSHJ P,PSYM ;TYPE THAT TOO (ALSO PADDED) PUSHJ P,TSPC ;A SPACE MOVE W1,@SYPTR ;GET SYMBOL FLAGS MOVEI T,"G" ;INDICATE GLOBAL SYMBOL TXNN W1,GLOBL ;UNLESS OF COURSE... MOVEI T," " ;IT'S A LOCAL PUSHJ P,TOUT ;TYPE THE INDICATOR PUSHJ P,TTAB ;MORE WHITE SPACE MOVE T,(P) ;RETRIEVE VALUE PUSHJ P,TOC ;TYPE VALUE NUMERICALLY POP P,W1 ;GET VALUE BACK MOVN W2,W1 ;(X .AND. -X) = RIGHTMOST BIT OF X AND W2,W1 ;FIND THE BIT CAMN W2,W1 ;TYPE BIT NUMBER ONLY IF SINGLE-BIT VALUE JFFO W1,.+2 ;FIND THE BIT NUMBER INTO W2 JRST ABBRE9 ;NOT EXACTLY ONE BIT, DON'T TYPE IT MOVE W1,[ASCII / (1B/] ;SEPARATING TEXT PUSHJ P,TEXT ;TYPE IT OUT MOVE A,W2 ;GET THE NUMBER (NOTE: A=R) PUSHJ P,FP7 ;TYPE IT IN DECIMAL MOVEI T,")" ;CLOSING TEXT PUSHJ P,TOUT ;TYPE IT ABBRE9: POP P,R ;RESTORE SYM INDEX PUSHJ P,TCRLF ;CLOSE OUT THE LINE SOJA R,ABBRE3 ;AND GO FOR NEXT SYMBOL ;$K COMMAND -- SUPPRESS A SYMBOL TO DDT TYPEOUT OR DELETE IT ENTIRELY KILL: TXNN F,LTF ;DELETE SYMBOLS JRST ERR MOVE S,SYM ;GET SYMBOL IFN FTSCSH,< ;ONLY IF USING SYMBOL TABLE CACHE PUSHJ P,DELCSH ;REMOVE SYMBOL FROM SYMBOL TABLE CACHE > ;END IFN FTSCSH PUSHJ P,EVAL JRST KILL2 MOVE R,W1 ;SYMBOL INDEX INTO R MOVE T,W2 ;FLAGS INTO T TXO T,DELO ;ASSUME DELETE OUTPUT TXNE F,CCF ;$$K? MOVX T,DELO!DELI!37777B17 ;MAKE SYM DELETED IN AND OUT PJRST DSYMER ;DEPOSIT IF POSSIBLE KILL2: SKIPN ESTUT ;ANY UNDEFINED TABLE? JRST UNDEF ;NO, CAN'T FIND THE SYMBOL KILL4: PUSHJ P,EVALU ;SEE IF ANY MORE OCCURENCES OF SYM POPJ P, ;NO, DONE PUSHJ P,REMUN JRST ERR ;CAN'T MODIFY SYMTAB JRST KILL4 ;LOOK FOR MORE OCCURENCES ;$D ;DELETE LAST SYM & PRINT NEW SYMD: SKIPL R,SPSAV ;PICK UP POINTER TO LAST SYM PUSHJ P,FETSYM ;PICK UP SYMBOL JRST ERR ;CAN'T GET IT? MOVE S,T ;COPY SYMBOL IFN FTSCSH,< ;ONLY IF USING SYMBOL TABLE CACHE PUSHJ P,DELCSH ;REMOVE IT FROM THE SYMBOL TABLE CACHE > ;END IFN FTSCSH TXO T,DELO ;TURN ON "SUPPRESS OUTPUT" BIT PUSHJ P,DSYMER ;STORE BACK IN SYMBOL TABLE MOVE T,LWT JRST CONSYM ;PRINT OUT NEXT BEST SYMBOL ;COLON OR ALT COLON OR ALT ALT COLON COMMANDS TAG: TXNE F,CCF ;SYMBOL OR PDV? JRST PDVSET ;PDV NAME TXNE F,CF ;DEFINE SYMBOL OR OPEN SYMBOL TABLE? JRST NAMSET ;OPEN (SELECT) LOCAL SYMBOL TABLE TXNN F,LTF ; NO LETTERS IS ERROR JRST ERR ; GO SAY ERROR TXNE F,FAF ; DEFINE SYMBOLS JRST DEFIN ;A.LT.B: MOVE W,LLOCO ;DEFINE SYMBOL (TAG) TO BE "." MOVEM W,LLIMIT ;SAVE NEW TAG VALUE DEFIN: MOVE S,LLIMIT ;GET VALUE BEING DEFINED IFN FTSCSH,< ;ONLY IF USING SYMBOL TABLE CACHE PUSHJ P,DELCSV ;REMOVE ANY CACHE SYMBOL USING THIS VALUE > ;END IFN FTSCSH PUSHJ P,EVAL ;DEFINED SYMBOL? JRST DEF1 ;NO - DEFINE MOVE S,SYM ;YES - GET SYMBOL NAME BEING DEFINED IFN FTSCSH,< ;ONLY IF USING SYMBOL TABLE CACHE PUSHJ P,DELCSH ;REMOVE THE SYMBOL FROM THE CACHE > ;END IFN FTSCSH MOVE R,W1 ;REMEMBER SYMBOL INDEX IN R JRST DEF4 ;REDEFINE EXISTING SYMBOL DEF1: TXZ F,HSYMF ;ASSUME LOWSEG SYMBOL TABLE SKIPN SYMP+S$ADR ;DEFINE A NEW SYMBOL JRST [ SKIPN HSYMP+S$ADR ;NO ST, TRY HISEG PTR JRST ERR ;NONE THERE EITHER MOVEI W1,HSYMP ;WANT TO UPDATE HISEG POINTER PUSHJ P,INCSYP ;GO TRY JRST DMER1 ;COULDN'T, GO SAY WHY TXO F,HSYMF ;REMEMBER HISEG TABLE USED SKIPL PRGM ;AN OPEN MODULE IN THE HIGH SEG? JRST DEF2 ;NO, CONTINUE JRST DEFF] ;YES, COMPENSATE FOR SUB FIRST MOVEI W1,SYMP ;WANT TO UPDATE LO SEG POINTER PUSHJ P,INCSYP ;GO DO IT JRST DMER1 ;CAN'T, GO SAY WHY SKIPG PRGM ;AN OPEN MODULE IN THE LOWSEG TABLE? JRST DEF2 ;NO, CONTINUE DEFF: AOS PRGM ;YES, COMPENSATE FOR THE SUB AOS PRGM ; . . . DEF2: AOS PTFIX ;COMPENSATE FOR THE SUB HERE TOO AOS PTFIX ;SO PAT.. WILL BE MOVED IFN FTSCSH,< ;ONLY IF USING SYMBOL TABLE CACHE PUSHJ P,CLRCSH ;CLEAR CACHE, ALL INDEXES NOW WRONG > ;END IFN FTSCSH SOS ESTUT ;EAT TWO WORDS OF PATCH SPACE SOS ESTUT ; FOR NEW SYMBOL TO LIVE IN SKIPN R,ESTUTL ;DOES AN UNDEFINED TABLE EXIST? JRST DEF3 ;NO, JUST DEC ADDRESS OF WHERE IT WOULD EXIST ;FALL THROUGH TO NEXT PAGE ;HERE WHEN WE WANT TO INSERT A NEW SYMBOL, BUT THE UNDEFINED SYMBOL ;TABLE IS IN THE WAY. MOVE THE LAST SYMBOL OF THE UNDEFINED TABLE TO ;RIGHT BEFORE THE FIRST ONE, AND USE THE WORDS FREED TO INSERT THE NEW ;DEFINED SYMBOL. THIS IS OK BECAUSE THE UNDEFINED TABLE IS NOT ORDERED. TXO R,1B1 ;FORM AN UNDEFINED ST SYMBOL INDEX PUSHJ P,FETSYM ;GET 1ST WORD OF LAST SYMBOL JRST ERR ;ERROR? MOVE W1,R ;SAVE WHERE WE GOT IT MOVX R,1B1 ;POINT TO 1ST WORD (USED TO BE IN PATCH AREA) PUSHJ P,DSYMER ;STORE SYMBOL IN NEW HOME AOS R,W1 ;POINT TO 2ND WORD OF LAST SYMBOL PUSHJ P,FETSYM ;GET IT JRST ERR ;ERROR MOVX R,1B1+1 ;2ND WORD OF TABLE PUSHJ P,DSYMER ;DEPOSIT ;NOW TO STORE THE SYMBOL TO BE DEFINED. ENTER AT DEF3 TO APPEND TO THE ;SYMBOL TABLE AS A GLOBAL DEFINITION IN MODULE PAT.., AND AT DEF4 TO ;UPDATE AN EXISTING SYMBOL. DEF3: MOVEI W1,USYMP ;IT ALL WORKED, MAKE OUR WORKING COPY PUSHJ P,DECSYA ; OFFICIAL BY DECREMENTING UNDEF PTR JRST DMER1 ;BUT... BUT... PUSH P,SYM ;IF APPENDING, NEED TO UPDATE THE MODULE MOVX R,<RADIX50 0,PAT..> ; LENGTH FOR THE MODULE "PAT.." MOVEM R,SYM ;SAVE WHERE NAMSRH CAN FIND IT PUSHJ P,NAMSRH ;LOOK UP PAT.. IN THE TABLE JRST DEF3A ;NOT THERE, GIVE UP PUSHJ P,FETSYM ;GET ITS VALUE WORD JRST DEF3A ;NOT ACCESSIBLE? JUMPGE T,DEF3A ;DON'T IF COUNT IS 0 (OLD LINK BUG) SUB T,[2,,0] ;COUNT ANOTHER SYMBOL PUSHJ P,DEPSYM ;STORE NEW VALUE JFCL ;?? DEF3A: POP P,SYM ;RESTORE SYM FOR DEF4 TXNN F,HSYMF ;CHANGING HISEG TABLE? TDZA R,R ;NO, POINT TO 0'TH WORD OF LOWSEG TABLE MOVX R,1B0 ;YES, POINT TO 0'TH WORD OF HISEG TABLE DEF4: MOVX T,GLOBL IOR T,SYM PUSHJ P,DSYMER MOVE T,LLIMIT ADDI R,1 PUSHJ P,DSYMER ;FALL THROUGH TO NEXT PAGE ;NOW TO SEARCH THE UNDEFINED TABLE, LOOKING FOR REFERENCES TO THIS SYMBOL. ;IF WE FIND ANY, FIX UP THE LOCATION(S) THEY POINT TO, AND REMOVE THEM ;FROM THE UNDEFINED TABLE. DEF5: PUSHJ P,EVALU ;SEARCH UNDEFINED TABLE POPJ P, ;NOT FOUND, ALL DONE SKIPL R,T ;ADDITIVE OR CHAINED FIXUP? JRST DEF7 ;CHAINED, GO HANDLE MOVE W2,R ;GET A COPY OF THE FIXUP FLAGS ANDX R,VMADR ;REDUCE R TO 30-BIT ADDRESS PUSHJ P,FETCHV ;GET OBJECT CELL JRST ERR TXNN W2,STNEG ;ADDITIVE OR SUBTRACTIVE? SKIPA S,LLIMIT ;ADDITIVE MOVN S,LLIMIT ;SUBTRACTIVE TXNE W2,STLH ;RIGHT OR LEFT HALF? JRST [ HRLZS S ;LEFT HALF ADD T,S ;ADD INTO LEFT HALF JRST DEF6] ADD S,T ;RIGHT HALF, ADD HALVES HRR T,S ; AND REPLACE RIGHT HALF DEF6: ;DO FIXUPS RIGHT IN TOPS-10 MONITOR IFN FTFILE&FTDEC10,< ;PEEK BEFORE POKE SKIPE FILING ;POKING MONITOR? JRST DEF60 ;NO, SKIP AHEAD PUSH P,T ;SAVE NEW WORD TO POKE PUSHJ P,FETCHV ;YES, GET CURRENT WORD IN MONITOR JRST ERR ;PEEK FAILED MOVEM T,POKBLK+1 ;PUT INTO POKE. BLOCK POP P,T ;RESTORE T DEF60: > ;END IFN FTFILE&FTDEC10 PUSHJ P,STOREV ;STORE RESULT BACK INTO MEMORY JRST ERR ;FAILED JRST DEF8 ;GO REMOVE SYMBOL AND TRY AGAIN DEF7: MOVE S,R ;COPY INITIAL FIXUP ADDRESS DEF7A: JUMPE S,DEF8 ;IF CHAIN REACHES 0, WE'RE DONE PUSHJ P,FETCHV ;GET OBJECT CELL JRST ERR HRRZ S,T ;SAVE CHAIN POINTER HRR T,LLIMIT ;REPLACE WITH NEW VALUE PUSHJ P,STOREV ;AND STORE BACK INTO MEMORY JRST ERR ;FAILED HRR R,S ;LOOP IN-SECTION TO END JRST DEF7A ; OF CHAIN DEF8: PUSHJ P,REMUN JRST ERR ;CAN'T MODIFY SYMTAB JRST DEF5 ;HERE ON A NAME$: COMMAND -- OPEN A MODULE'S SYMBOL TABLE NAMSET: TXNE F,Q2F ;2ND QUANTITY TYPED? SKIPA TT,WRD2D ;YES, FETCH IT SETZ TT, ;NO, DEFINITELY OURS JUMPN TT,NAMTYP ;IF NOT $0:, GO SEE IF $1: TXNE F,FAF!SAF!TIF!COMF!PTF!MF ;MOST ARGS BEFORE $0: ARE ILLEGAL JRST ERR ;RESERVE THEM TXNE F,QF ;ANYTHING TYPED? JRST NAMS2 ;YES, SET NEW MODULE SETZM PRGM ;NO, JUST CLEAR CURRENT MODULE SETZM SEGNAM ;AND HISEG IT CAME FROM IFN FTSCSH,< JRST CLRCSH> ;CLEAR SYMBOL TABLE CACHE IFE FTSCSH,< POPJ P,> ;HERE TO SET A NEW MODULE NAME. NAMS2: PUSHJ P,NAMSRH ;SEARCH FOR THE NAME JRST UNDEF ;NOT FOUND IFN FTSCSH,< ;ONLY IF USING SYMBOL TABLE CACHE PUSHJ P,CLRCSH ;FOUND IT, CLEAR THE SYMBOL TABLE CACHE > ;END OF IFN FTSCSH MOVEM R,PRGM ;STORE AS NEW OPEN MODULE JUMPGE R,CPOPJ ;DONE IF R POINTS TO LOW SEG MOVEI R,.JBHNM ;POINTS TO HI SEG, POINT TO SEGMENT NAME PUSHJ P,HFETCH ;GET IT SETZ T, ;NO HI SEG, OR EXEC MODE MOVEM T,SEGNAM ;STORE SEGMENT NAME FOR SYMCHK POPJ P, ;DONE ;HERE TO TYPE OUT CURRENT OPEN MODULE NAME NAMTYP: SOJN TT,NAMLST ;IF NOT $1:, SEE IF $2: TXNE F,QF!FAF!SAF!SF ;MOST ARGS ILLEGAL FOR $1: JRST ERR ;RESERVE THEM SKIPN T,PRGM ;IS THERE AN OPEN MODULE? POPJ P, ;NO, JUST RETURN SOS R,T ;POINT TO FIRST WORD OF SYMBOL ENTRY PUSHJ P,FETSYM ;GET THE WORD JRST ERR ;CAN'T HAPPEN PUSH P,T ;SAVE OVER TOUT CALL MOVEI T,"/" ;SEPARATE TEXT FROM COMMAND PUSHJ P,TOUT ; WITH A SLASH POP P,W2 ;GET SYMBOL BACK PUSHJ P,PSYM ;TYPE IT OUT SKIPG PRGM ;HISEG MODULE? SKIPN T,SEGNAM ;WITH A NAME? POPJ P, ;NO OR NO, ALL DONE MOVEM T,LWT ;YES, SAVE IT AWAY PUSHJ P,TTAB ;SEPARATE THE NAMES PJRST SIXBP ;AND GO TYPE THE HISEG NAME ;HERE FOR $2: TO LIST ALL KNOWN MODULES NAMLST: SOJN TT,ERR ;$2: WAS YOUR LAST CHANCE TXNE F,QF!FAF!SAF!SF ;MOST ARGS ILLEGAL FOR $2: JRST ERR ;RESERVE THEM PUSHJ P,SYMCHK ;MAKE SURE OF SYMBOLS BEFORE HFETCH MOVEI R,.JBHNM ;OFFSET FOR HISEG NAME PUSHJ P,HFETCH ;GET THE NAME SETZ T, ;NONE THERE MOVE W,T ;SAVE THE HISEG NAME FOR LATER USE PUSHJ P,SYMSET ;SETUP TO SEARCH THE SYMBOL TABLE SOJ R, ;ACCOUNT FOR AOSGE BELOW PUSHJ P,TCRLF ;START AT LEFT MARGIN ;HERE TO GET NEXT MODULE NAMLS2: AOSGE R ;IF OUT OF SYMBOLS IN THIS TABLE, PUSHJ P,ADVSYM ;THEN ADVANCE THE POINTER SKIPA T,@SYPTR ;GET NEXT VALUE WORD JRST DD1 ;DONE WITH LISTING HLRE T,T ;GET -VE LENGTH OF THIS TABLE SOSGE R ;BACK OFF TO MODULE NAME WORD PUSHJ P,ADVSYM ;ADVANCING IF NECESSARY SKIPA W2,@SYPTR ;GET THE NAME JRST ERR ;VALUE BUT NO NAME IS BAD FORMAT TXNE W2,PNAME ;MUST LOOK LIKE A MODULE NAME JRST ERR ;ELSE IS BAD FORMAT ADD R,T ;BACKUP POINTER TO NEXT MODULE SKIPN T ;ZERO IS PAT.. BEFORE LINK BUG WAS FIXED, MOVNI R,2 ;SO SET TO ADVANCE TABLES PUSHJ P,PSYM ;TYPE THE MODULE NAME TXNE F,HSYMF ;IF NOT HISEG, SKIPN W ;OR NAME NOT KNOWN, JRST NAMLS3 ;SKIP TYPING THE SEGMENT NAME MOVE W1,TOHPS ;GET CURRENT HPOS SUBI W1,7 ;GET -VE DISTANCE UNTIL WE'VE PADDED ENOUGH MOVEI T," " ;LOAD UP A SPACE PUSHJ P,TOUT ;TYPE ONE AOJL W1,.-1 ;PAD UNTIL DONE MOVE W1,W ;GET THE SEGMENT NAME PUSHJ P,TSIXN ;TYPE IT IN SIXBIT NAMLS3: PUSHJ P,TCRLF ;END THE LINE JRST NAMLS2 ;TYPE ALL KNOWN MODULES ;HERE ON $$: COMMAND -- READ PDV NAME AND SET $5M IFN FTEX20!FTMON!<FTDEC10&FTFILE>,<PDVSET==ERR> ;ILLEGAL IN MONITORS, -10 IFE FTEX20!FTMON!<FTDEC10&FTFILE>,< PDVSET: IFN FTFILE,< SKIPE FILING ;MUST BE LOOKING AT A FILE SKIPN EXEFMT ;IN .EXE FORMAT JRST ERR ;OR WE CAN'T DO IT > ;END IFN FTFILE IFN FTEXEC,< SKPUSR ;MUST BE IN USER MODE JRST ERR ;OR WE CAN'T DO IT > ;END IFN FTEXEC TXNE F,Q2F ;$$1: ? SKIPA T,WRD2D ;MAYBE, GET THE FLAG SETZ T, ;NO, IT'S OURS JUMPN T,PDVTYP ;IF NOT $$0:, GO SEE IF $$1: TXNE F,FAF!SAF!TIF!COMF!PTF!MF ;MOST ARGS BEFORE $$0: ARE ILLEGAL JRST ERR ;BAD SYNTAX IFN FTDEC20,< TXZ F,CF!TXF ;CLEAR SOME FLAGS FOR TEXI XMOVEI T,1(P) ;STORE PDV NAME ON STACK MOVEM T,TEM ;REMEMBER WHERE MOVEM T,WRD ;KEEP AN ORIGINAL COPY ADJSP P,PVNMSZ ;MAKE ROOM FOR NAME ADDI T,PVNMSZ-1 ;GET LAST ADDRESS OF BLOCK MOVEM T,TEM1 ;SAVE THAT TOO MOVEI T,7 ;NORMAL ASCII BYTE SIZE > ;END IFN FTDEC20 IFN FTDEC10,< TXZ F,ROF!TXF ;CLEAR SOME FLAGS FOR TEXI MOVEI T,6 ;BYTE SIZE FOR SIXBIT TYPEIN > ;END IFN FTDEC10 MOVEM T,WRD2D ; FOR BUILDING BYTE POINTERS TXNN F,QF ;IF NO ARG, JRST TEXI1 ;GO READ THE STRING SETZ T, ;GET A NULL IDPB T,CHP ;FINISH THE SYMBOL TYPEIN IFN FTDEC20,< DMOVE TT,OPTXT ;GET THE TEXT DMOVEM TT,@WRD ;PUT IT WHERE WE LOOK FOR IT MOVE R,TEM1 ;POINT PAST THE COPIED OPTXT ;FALL INTO PDVSE2 > ;END IFN FTDEC20 IFN FTDEC10,< MOVE TT,[POINT 7,OPTXT] ;SOURCE BYTE POINTER MOVE W2,[POINT 6,W] ;DESTINATION BYTE POINTER SETZ W, ;CLEAR ACCUMULATOR PDVSE1: ILDB T,TT ;GET SOURCE BYTE JUMPE T,PDVSE2 ;DONE AT END OF STRING SUBI T," " ;CONVERT TO SIXBIT IDPB T,W2 ;APPEND TO SEGMENT NAME JRST PDVSE1 ;LOOP OVER THE PROPOSED NAME > ;END IFN FTDEC10 ;HERE AFTER THE STRING HAS BEEN READ IN PDVSE2: IFN FTDEC20,< CAMG R,TEM1 ;PAST END OF BLOCK? MOVEM W,(R) ;NO, STORE END OF STRING MOVEI R,377 ;RIGHT-MOST BYTE ANDCAM R,@TEM1 ;MAKE SURE WE'RE ASCIZ IFE FTFILE,< ;FIRST THE NON-FILDDT CASE PUSHJ P,PDVINI ;SET UP PDVOP% ARG BLOCK MOVEI T1,.POLOC ;LOCATE FUNCTION XMOVEI T2,PDVARG ;ADDRESS OF ARG BLOCK HRRO T3,WRD ;MAKE A BYTE POINTER TO PDV NAME PDVOP% ;FIND THE PDV ERJMP ERR ;SOMETHING DIED, GUESS IT'S NOT THERE SKIPN PDVARG+.POCT2 ;ANYTHING FOUND? JRST ERR ;NO, DON'T DIDDLE ANYTHING ADJSP P,-PVNMSZ ;RECLAIM STACK SPACE MOVE T1,PDVA ;GET THE PDVA MOVEM T1,SYTLOC ;SET $5M SETZM SYMVAL ;DON'T TRUST IT PJRST SYMCHK ;GO CHECK IT OUT NOW > ;END IFE FTFILE ;STILL IFE FTEX20!FTMON!<FTDEC10&FTFILE> AND IFN FTDEC20 ;FILDDT CASE AFTER THE STRING HAS BEEN READ IN ;FALL IN FROM PDVSE2 IFN FTFILE,< SKIPG W1,PDVNUM ;ANY PDVS EXIST? JRST ERR ;NO, DON'T BOTHER LOOKING SETO W2, ;START WITH FIRST ONE PDVSE3: PUSHJ P,NXTPDV ;GET THE PDVA ADDI R,.PVNAM ;GET NAME ENTRY PUSHJ P,FETCH ;GRAB THE WORD JRST ERR ;NAUGHTY! TXNE T,IFIW ;IS NAME POINTER LOCAL? HLL T,R ;YES, SET REAL SECTION NUMBER MOVE R,T ;MOVE INTO RIGHT AC SKIPN @WRD ;USER TYPE NULL STRING? JRST [ JUMPE R,PDVSE5 ;YES, ZERO ADDRESS IS A MATCH PUSHJ P,FETCH ;FETCH FIRST STRING WORD JRST ERR ;BAD POINTER TLNN T,774000 ;IS FIRST BYTE ZERO? JRST PDVSE5 ;YES, STRING IS NULL JRST PDVSE4] ;NO, TRY TRY AGAIN JUMPE R,PDVSE4 ;ZERO ADDRESS WILL NEVER MATCH MOVE T,WRD ;USER'S STRING ADDRESS PUSHJ P,CMPSTR ;COMPARE NAMES PDVSE4: SOJG W1,PDVSE3 ;NO MATCH, TRY AGAIN JUMPE W1,ERR ;DIDN'T FIND ANY MATCHES PDVSE5: MOVE T,@PDVTBL ;MATCHED, GET THE PDVA MOVEM T,SYTLOC ;SET $5M ADJSP P,-PVNMSZ ;RECLAIM STACK SPACE JRST MASK5C ;GO TRADE SYMBOL TABLES ;STILL IFE FTEX20!FTMON!<FTDEC10&FTFILE> AND IFN FTDEC20 AND IFN FTFILE ;CMPSTR -- COMPARE TWO ASCIZ STRINGS ;CALL: ; MOVX T,<GLOBAL ADDRESS OF INTERNAL STRING> ; MOVX R,<GLOBAL ADDRESS OF PROG'S STRING> ; PUSHJ P,CMPSTR ;RETURNS +1: STRINGS NOT IDENTICAL ; +2: STRINGS IDENTICAL ;USES ONLY TT,TT1,TT2 CMPSTR: PUSHJ P,SAVRST ;AS ADVERTISED PUSH P,W1 ;SAVE SOME MORE ACS PUSH P,W2 TLO T,610000 ;MAKE GLOBAL "POINT 7," MOVE W1,T ;SAVE IN ANOTHER AC CMPST1: MOVE W2,[POINT 7,T] ;MAKE A POINTER FOR PROG PUSHJ P,FETCH ;GET A WORD OF PROG'S STRING JRST ERR ;SIGH.... MOVEI TT,5 ;FIVE BYTES TO A WORD CMPST2: ILDB TT1,W1 ;GET SOME BYTES ILDB TT2,W2 ; TO LOOK AT CAIL TT1,"a" ;SEARCH MUST BE CAILE TT1,"z" ; CASE INSENSITIVE CAIA ;DON'T CONVERT TRC TT1,40 ;CONVERT CAIL TT2,"a" ;SEARCH MUST BE CAILE TT2,"z" ; CASE INSENSITIVE CAIA ;DON'T CONVERT TRC TT2,40 ;CONVERT CAME TT2,TT1 ;SAME? JRST CMPST4 ;NO, ALL DONE JUMPE TT1,CMPST3 ;LOOP UNLESS WE GOT A NULL SOJG TT,CMPST2 ;LOOP THROUGH THIS WORD AOJA R,CMPST1 ;TRY NEXT WORD CMPST3: AOS -2(P) ;SUCCESS!! CMPST4: POP P,W2 ;RESTORE THE ACS POP P,W1 POPJ P, ;ALL DONE > ;END IFN FTFILE ;STILL IFE FTEX20!FTMON!<FTDEC10&FTFILE> AND IFN FTDEC20 ;HERE TO TYPE OUT CURRENT PDV NAME PDVTYP: SOJN T,PDVLST ;IF NOT $$1:, SEE IF $$2: TXNE F,QF!FAF!SAF!SF!LTF ;NO ARGS DEFINED JRST ERR ;RESERVE THEM SKIPG R,SYTLOC ;PDV OR JOBDAT? POPJ P, ;JOBDAT, DON'T TYPE ANYTHING ADDI R,.PVNAM ;POINT TO NAME WORD PUSHJ P,FETCH ;GET THE POINTER JRST ERR ;CAN'T DO IT JUMPE T,CPOPJ ;AIN'T ONE TXNE T,IFIW ;LOCAL POINTER? HLL T,R ;YES, GET REAL ADDRESS PUSH P,LLOCO ;TYPZ WILL BOMB THIS MOVEM T,LLOCO ;WHERE TYPZ EXPECTS ADDR PUSHJ P,TYPZ ;TYPE USER STRING POP P,LLOCO ;RESTORE ADDRESS POPJ P, ;ALL DONE PDVLST: SOJN T,ERR ;$$2: WAS YOUR LAST CHANCE TXNE F,QF!FAF!SAF!SF!LTF ;NO ARGS DEFINED JRST ERR ;RESERVE THEM PUSHJ P,TCRLF ;START OFF AT LEFT MARGIN IFN FTFILE,< ;FILDDT CASE SKIPG W1,PDVNUM ;IF NO PDVS, JRST DD1 ;END COMMAND NOW SETO W2, ;SETUP TO GET THE FIRST ONE > ;END IFN FTFILE IFE FTFILE,< ;NON-FILDDT SETUP PUSHJ P,PDVINI ;SETUP THE ARG BLOCK SETZM PDVA ;START FROM THE BEGINNING PUSHJ P,NXTPDV ;GET THE FIRST PDVA HLRZ W1,PDVARG+.POCT2 ;SEE HOW MANY PDVS EXIST JUMPE W1,DD1 ;GET OUT NOW IF NONE TRNA ;KEEP THIS ADDRESS FIRST TIME THROUGH > ;END IFE FTFILE PDVLS1: PUSHJ P,NXTPDV ;GET NEXT ADDRESS ADDI R,.PVNAM ;OFFSET TO THE NAME POINTER PUSHJ P,FETCH ;GET NAME POINTER SETZ T, ;SIGH TXNE T,IFIW ;IF SECTION-LOCAL, HLL T,R ;MAKE IT GLOBAL SKIPN R,T ;PUT IN RIGHT REGISTER JRST PDVLS3 ;ZERO NAME ADDRESS MEANS DON'T TYPE IT PUSHJ P,FETCH ;GET FIRST WORD FROM NAME SETZ T, ;SIGH TLNN T,(177B6) ;SEE IF NON-NULL JRST PDVLS3 ;SKIP NAME IF NULL PUSH P,W1 ;NO, SAVE SOME NEEDED REGISTERS PUSH P,W2 ;AROUND TYPZ0 PUSH P,LLOCO ;AND THE OPEN LOCATION MOVEM R,LLOCO ;FAKE IT OUT PUSHJ P,TYPZ0 ;TYPE ASCIZ NAME WITHOUT LEADING SLASH POP P,LLOCO ;RESTORE OPEN CELL ADDRESS POP P,W2 ;AND PDVTBL INDEX POP P,W1 ;AND REMAINING COUNT OF PDVS PUSHJ P,TCRLF ;END THE LINE PDVLS3: SOJG W1,PDVLS1 ;LOOP OVER ALL KNOWN PDVS JRST DD1 ;TYPE EXTRA CRLF AND END WHEN DONE WITH LIST > ;END IFN FTDEC20 ;STILL IN FTEX20!FTMON!<FTDEC10&FTFILE> ;HERE FOR TOPS-10 CASES IFN FTDEC10,< ;REST OF PDVSET FOR TOPS-10 PDVSE2: JUMPE W,[SETZM SYTLOC ;0$5M SETZM SYMVAL ;MAKE SURE WE CHECK PJRST SYMCHK] ;GO VALIDATE IT MOVEM W,SEGOPB+.SGSNM ;SET UP THE SEGMENT NAME SETZM SEGOPB+.SGSGN ;DON'T KNOW THE NUMBER SETZM SEGOPB+.SGFLG ;CLEAR THE STEP FLAG MOVSI W,.SGORG+1 ;GET THE DESIRED LENGTH HLLM W,SEGOPB ;SET FOR THE UUO XMOVEI W,SEGOPB ;POINT TO THE ARG BLOCK SEGOP. W, ;FIND THE SEGMENT JRST PDVSE3 ;CAN'T DO IT THIS WAY, SEE IF OLD WAY WORKS HRRZ R,SEGOPB+.SGORG ;GET LOCAL PAGE ORIGIN LSH R,PG2WRD ;CONVERT TO ADDRESS JRST PDVSE4 ;HAVE THE HISEG ORIGIN, GO VALIDATE IT PDVSE3: MOVE W1,SYTLOC ;SAVE THE CURRENT POINTER SETZM SYTLOC ;MAKE GETHSO LOOK HARD PUSHJ P,GETHSO ;SEE IF WE HAVE A HISEG ORIGIN MOVEM W1,SYTLOC ;RESTORE CURRENT $5M JUMPE T,ERR ;NO HISEG MOVE R,T ;COPY THE POINTER ADDI R,.JBHNM ;POINT AT THE SEGMENT NAME PUSHJ P,FETCHV ;AND GRAB IT JRST ERR ;NO GO CAME T,W ;IF NOT THE RIGHT SEGMENT, JRST ERR ;CAN'T USE IT TRZ R,PAGMSK ;BACK OFF TO THE ORIGIN AGAIN ;FALL INTO PDVSE4 PDVSE4: ADDI R,.JBHSM ;POINT TO ITS SYMBOL TABLE POINTER PUSHJ P,FETCHV ;GET ITS SYMBOL LIST JRST ERR ;NO GO JUMPE T,[SMERS <No symbols> ;SAY WHAT'S WRONG JRST ERR] ;AND PUNT SKIPG T ;IF GLOBAL POINTER, JUST USE IT MOVE T,R ;NO, USE ADDRESS OF IOWBLK POINTER MOVEM T,SYTLOC ;SET AS $5M ARGUMENT SETZM SYMVAL ;DON'T TRUST IT YET PJRST SYMCHK ;GO VALIDATE IT PDVTYP: SOJN T,PDVLST ;IF NOT $$1:, SEE IF $$2: TXNE F,QF!FAF!SAF!SF!LTF ;NO ARGS DEFINED JRST ERR ;RESERVE THEM SKIPG R,SYTLOC ;GET ADDRESS OF SYMBOL TABLE POPJ P, ;BE SILENT IF JOBDAT FORMAT PUSHJ P,CHKADR ;SEE IF WE KNOW ITS BITS TXNE TT,PG$HGH ;MUST BE PART OF A HISEG TXNE TT,PG$SPY ;AND NOT A SPY-SEG POPJ P, ;WRONG, TYPE NOTHING PUSHJ P,GETHSO ;GET THE START OF ITS SEGMENT JUMPE T,CPOPJ ;SHOULD NEVER HAPPEN.... MOVE R,T ;COPY THE ADDRESS ADDI R,.JBHNM ;POINT TO ITS NAME WORD PUSHJ P,FETCHV ;GET ITS NAME JRST ERR ;THIS IS BAD NEWS MOVE W1,T ;COPY THE NAME TO SOMEWHERE SAFE MOVEI T,"/" ;INTRODUCER CHARACTER PUSHJ P,TOUT ;TYPE IT PJRST TSIXN ;TYPE THE SIXBIT SEGMENT NAME AND RETURN PDVLST: SOJN T,ERR ;$$2: WAS YOUR LAST CHANCE TXNE F,QF!FAF!SAF!SF!LTF ;NO ARGS DEFINED JRST ERR ;RESERVE THEM PUSHJ P,TCRLF ;START AT LEFT MARGIN IFE FTFILE,< SETZM SEGOPB+.SGSGN ;START WITH FIRST SEGMENT SETZM SEGOPB+.SGSNM ;NAME NOT KNOWN YET MOVSI R,.SGSNM+1 ;THE DESIRED LENGTH HLLM R,SEGOPB ;SET UP FOR UUO MOVX R,SG.STP ;THE STEP FLAG MOVEM R,SEGOPB+.SGFLG ;SET TO FIND ALL HISEGS PDVLS1: XMOVEI R,SEGOPB ;POINT AT UUO BLOCK SEGOP. R, ;GET THE NEXT HISEG JRST PDVLS3 ;OLD MONITOR? SKIPN SEGOPB+.SGSGN ;IF NO NEXT SEGMENT NUMBER, JRST DD1 ;WE'RE DONE SKIPN W1,SEGOPB+.SGSNM ;IF BLANK NAME, JRST PDVLS1 ;SKIP THIS SEGMENT PUSHJ P,TSIXN ;TYPE THE NAME PUSHJ P,TCRLF ;END THE LINE JRST PDVLS1 ;LOOP OVER ALL KNOWN SEGMENTS > ;END IFE FTFILE PDVLS3: MOVEI R,.JBHNM ;OLD MONITOR PUSHJ P,HFETCH ;TRY FOR NAME OF THE ONLY HISEG JRST DD1 ;NONE AT ALL JUMPE T,DD1 ;DON'T BOTHER WITH A BLANK NAME MOVE W1,T ;POSITION FOR TYPEOUT PUSHJ P,TSIXN ;TYPE THE NAME PUSHJ P,TCRLF ;END THE LINE JRST DD1 ;END THE COMMAND > ;END IFN FTDEC10 > ;END IFE FTEX20!FTMON!<FTDEC10&FTFILE> ;TEXT COMMANDS: $n"c$, $n"/.../, XXXX$5" ; "X$ (same as $7c$), ; $"X$ ($6c$), ; "/.../ ($7"/.../), ; $"/.../ ($6"/.../) TEXI: MOVEI T,7 ;START OFF AS "X$ OR "/.../ TXNE F,CF ;<ESC> SEEN? SOS T ;YES, CHANGE TO $"X$ OR $"/.../ TXZN F,Q2F ;NUMBER AFTER <ESC>? MOVEM T,WRD2D ;NO, SIMULATE CORRECT VALUE. MOVE T,WRD2D ;GET THE BYTE WIDTH. CAIL T,5 ;WIDTH MUST BE BETWEEN 5 AND CAILE T,^D36 ;36 INCLUSIVE. JRST ERR CAIN T,5 ;XXXX$5" ? JRST [ MOVE T,SYM ;YES, TAKE PREVIOUS SYL AS RADIX50 TXZ F,FPF!FEF!LTF ;REINIT SYL JRST QUAN1] CAIE T,6 ;SIXBIT? TXZ F,CF ;NO, CLEAR <ESC> SEEN FLAG. TXO F,TXF ;FLAG PROCESSING TEXT MOVE T,LLOCO ;GET ADR OF OPEN REG MOVEM T,TEM ;SAVE IT FOR LOCAL USE TEXI1: PUSHJ P,TIN ;GET TERMINATOR MOVEM T,SYL ;SAVE TERMINATOR PUSHJ P,TIN ;GET FIRST CHARACTER IFE FTEX20!FTMON!<FTDEC10&FTFILE>,< ;IF USER MODE -20 OR -10, TXNN F,TXF ;IN TEXT COMMAND? JRST TEXI4 ;NO, SKIP TEST > ;END IFE FTEX20!FTMON!<FTDEC10&FTFILE> TXNN F,CCF ;DOUBLE-ESCAPE MEANS NO SINGLE-CHARACTER MODE CAIE T,.CHESC ;ESC? JRST TEXI4 ;NO, HANDLE AS TEXT MOVE T,SYL ;YES, RESTORE THE CHARACTER PUSHJ P,TEXIN1 ;CONVERT TO SIXBIT IF NECESSARY JRST QUAN1 ;EQUALS ONE ASCII/SIXBIT CHAR TEXI4: MOVE W1,WRD2D ;FETCH BYTE SIZE LSH W1,^D24 ;SHIFT BYTE SIZE TO PROPER PLACE IOR W1,[POINT 0,W] ;BUILD THE REST OF THE BYTE POINTER SETZ W, ;INIT WORD TO 0 TEXI2: CAMN T,SYL ;REACHED TERMINATOR? JRST [ MOVE R,TEM ;LAST ADDRESS IFE FTEX20!FTMON!<FTDEC10&FTFILE>,< ;MONITORS DON'T HAVE PDVS TXNN F,TXF ;PDV NAME? JRST PDVSE2 ;YES, GO CHECK IT OUT > ;END IFE FTEX20!FTMON!<FTDEC10&FTFILE> MOVEM R,LLOC ;SET LOC TO END OF INPUT MOVEM R,LLOCO ;UPDATE LLOCO TOO MOVE T,W ;GET LAST WORD JRST QUAN1] ;NO, DONE IBP W1 ;POINT TO NEXT BYTE. TRNE W1,^-W ;STILL POINTING TO W? JRST TEXI3 ;NO PUSHJ P,TEXIN1 ;CONVERT TO SIXBIT IF NECESSARY DPB T,W1 ;BYTE GOES INTO W. PUSHJ P,TIN ;GET ANOTHER INPUT CHARACTER JRST TEXI2 ;HERE WHEN WORD FULL TEXI3: MOVEI W1,W ;ONLY GET HERE ONCE IF NO LOC OPEN MOVE R,TEM ;GET LOC OF NEXT REGISTER IFE FTMON!FTEX20!FTDEC10,< ;NO REAL PDV ON A -10 OR -20 MONITORS TXNN F,TXF ;IF READING A PDV NAME JRST [ CAMLE R,TEM1 ;PAST END OF BLOCK? JRST TEXI2 ;YES, STOP STORING MOVEM W,(R) ;NO, STORE THE WORD JRST TEXI5] ;AND CONTINUE > ;END IFE FTMON!FTEX20!FTDEC10 TXNN F,ROF ;REGISTER OPEN? JRST TEXI2 ;NO, LOSE ANY ADDITIONAL INPUT PUSH P,T ;SAVE CHARACTER MOVE T,W ;GET FULL WORD PUSHJ P,DMEMER ;STORE WORD IF POSSIBLE POP P,T ;RECOVER CHARACTER TEXI5: AOS TEM ;BUMP LOC JRST TEXI4 ;GO REINIT WORD AND CONTINUE INPUT ;CONVERT INPUT CHARACTER TO SIXBIT IF NECESSARY TEXIN1: TXNN F,CF ;SIXBIT MODE? POPJ P, ;NO CAIL T,"A"+40 ;IS CHAR BETWEEN LOWER CASE "A" AND CAILE T,"Z"+40 ; LOWER CASE "Z"? SKIPA ;NO TRC T,40 ;YES, CONVERT TO UPPER CASE CAIL T," " ;IS CHAR IN SIXBIT SET? CAILE T,"_" JRST ERR ;NO ANDI T,77 ;YES, MASK TO 6 BITS TRC T,40 ;CONVERT TO SIXBIT FORM POPJ P, ;DDT EXIT AND RESTART COMMANDS (^C, ^E, AND ^Z) ;FIRST, THE NON-FILDDT CASE IFE FTFILE,< CNTRLZ: IFN FTEXEC,< SKPUSR ;SEE IF USER MODE JRST ERR ;NO--ERROR > ;END IFN FTEXEC IFN FTMON,< MOVE T,[MSEC1,,MRETN]> ;MDDT RETURN IFN FTEX20,< MOVEI T,DDTCZ> ;KDDT USER-MODE RETURN IFE FTMON!FTEX20,< XMOVEI T,HLTA ;NORMAL DDT RETURN IFN FTUD20,< ;NO STUB EXCEPT USER-20 SKIPGE R,SECUDD ;IS THERE A STUB? JRST CTLZ1 ;NO HRRI R,770003 ;RETURN @770003 OF STUB PUSHJ P,FETCH ;GET THE ADDRESS JRST ERR ;CAN'T?? HLL T,R ;FIX UP SECTION NUMBER CTLZ1: > ;END IFN FTUD20 > ;END IFE FTMON!FTEX20 JRST GO1 ;RESTORE CONTEXT AND JUMP ;HERE AFTER ^Z WITH ALL BREAKPOINTS INSERTED AND CONTEXT RESTORED. IFE FTMON,< HLTA: IFN FTDEC10,< EXIT 1,> ;TOPS-10 MONRET IFN FTDEC20,< HALTF%> ;TOPS-20 MONRET JRST DDT ;CONTINUE IS LIKE START NOW > ;END IFE FTMON CNTRLE==ERR ;^E ONLY WORKS IN FILDDT > ;END IFE FTFILE ;NOW THE FILDDT CASE IFN FTFILE,< CNTRLZ: JRST CTLZ ;JUMP TO REAL ROUTINE CNTRLE: JRST CTLE ;JUMP TO REAL ROUTINE > ;END IFN FTFILE SUBTTL COMMAND ROUTINES -- CLASS 2 ;*************** START OF CLASS TWO COMMANDS *************** MULT: TXOA F,PTF!MLF ;* DIVD: TXO F,DVF!PTF ;SINGLE QUOTE JRST L1 SUBTTL COMMAND ROUTINES -- CLASS 3 ;*************** START OF CLASS THREE COMMANDS *************** ASSEM: JRST LIS2 ;# MINUS: TXO F,MF PLUS: TXO F,PTF JRST LIS2 LPRN: PUSH P,F ;RECURSE FOR OPEN PAREN PUSH P,ACCCF ;PUSH COMMACOMMA FLAG/VALUE PUSH P,WRD PUSH P,FRASE PUSH P,FRASE1 AOS PRNC SETZM WAKALL ;SET WAKEUP SET TO PUNCT AND CTRLS JRST LIS0C ;AND READ NEW EXPRESSION INDIRE: HRLZI W,20 ;@ IORB W,WRD TXO F,QF JRST LIS2 ACCF: MOVE R,ESTUT ;GET UNDEFINED PROCESSOR SO FAR CAME R,USYMP+S$ADR ;ANY UNDEFINED'S CREATED YET? JRST ERR ;YES, ERROR ;(CAN ONLY GET HERE ON "FOO#," ETC.) MOVE R,T ;COMMA PROCESSOR TXOE F,COMF ;COMMA TYPED BEFORE? JRST ACCF1 ;YES HRRZM R,ACCCF ;NO, SAVE POTENTIAL "A" OF "A,,B" HLLZ T,R LDB W1,[POINT 3,WRD,2] ;CHECK FOR IO INSTRUCTION CAIE W1,7 ;7XX? JRST ACCF0 ;NO, ASSUME AC FIELD MOVX W1,774B11 ;YES, CHECK DEVICE CODE FIELD TDNE W1,WRD ;DEVICE CODE FILLED IN YET? ACCF0: TDZA W1,W1 ;YES, OPCODE WAS UMOVE, RDTIME, ETC. ; ASSUME AC FIELD MOVEI W1,1 ;NO, OPCODE WAS CONO, DATAO, ETC. ; ASSUME DEVICE CODE LSH R,27(W1) ;MOVE QUANTITY TO CORRECT FIELD ADD T,R ADDB T,WRD JRST SPACE1 ACCF1: HRRZ T,ACCCF ;RETRIEVE "A" OF "A,,B" EXPRESSION ADD T,WRD ;FOR ",," GET LEFT HALF TOGETHER HRLZM T,WRD ; AND PUT IT IN LEFT HALF HRROM T,ACCCF ;FLAG COMMACOMMA CONSTRUCTION JRST SPACE1 SUBTTL COMMAND ROUTINES -- CLASS 4 ;*************** START OF CLASS FOUR COMMANDS *************** SPACE: TXO F,SPF ;(E.G., "JRST PAT..") FLAG SPACE TYPED SPACE1: TXO F,TIF ;FLAG TRUNCATE (ADD MOD 2**18) TXZ F,MF!PTF JRST LIS1 RPRN: TXNN F,QF ;) SETZ T, MOVS T,T SOSGE PRNC JRST ERR POP P,FRASE1 POP P,FRASE POP P,WRD POP P,ACCCF ;POP COMMACOMMA FLAG/VALUE POP P,F TXNE F,PTF TXNE F,SF JRST RPRN1 MOVEM T,SYL TXO F,QF!SF JRST L1RPR RPRN1: ADDB T,WRD TXO F,QF JRST L1A SUBTTL COMMAND ROUTINES -- CLASS 5 ;*************** START OF CLASS FIVE COMMANDS *************** ;CRLF AND OPEN NEXT REGISTER SUBROUTINE LI0: PUSHJ P,TCRLF ;TYPE <CR><LF> JRST LINEF0 ;JOIN COMMON CODE ;"^" COMMAND - CLOSE CURRENT AND OPEN PREVIOUS SEQUENTIAL LOCATION VARRW: PUSHJ P,DEPRA ;^ PUSHJ P,TCRLF ;TYPE <CR><LF> MOVE T,LLOC HRRI T,-1(T) ;DECREMENT CURRENT LOC JRST LI1 ;JOIN COMMON CODE ;<LF> COMMAND, CLOSE CURRENT AND OPEN NEXT SEQUENTIAL LOCATION LINEF: PUSHJ P,DEPRA ;NEXT REGISTER PUSHJ P,TCR ;DO CR ONLY LINEF0: MOVE T,LLOC ;BUMP LOC HRRI T,1(T) ;BUT DON'T CHANGE SECTION LI1: MOVEM T,LLOC ;NEW LAST LOCATION MOVEM T,LLOCO ;NEW LAST LOCATION OPEN LI1P: PUSHJ P,PADR ;PRINT AS ADDRESS MOVEI T,"/" ;"/" TO INDICATE OPEN ADDRESS CAME SCH,SCHM ;TEMP MODE SAME AS PERM? JRST [ CAIN SCH,FTOC ;NO, CONSTANT? MOVEI T,"[" ;YES - INDICATE "[" MODE CAIE SCH,PINQ ;EITHER KIND OF CAIN SCH,PIN ;INSTRUCTION? MOVEI T,"]" ;YES - INDICATE "]" MODE JRST .+1] ;USE APPROPRIATE INDICATION TXNE F,STF ;SUPPRESSING OUTPUT? MOVEI T,"!" ;YES - THEN OVER-RIDE WITH "!" MODE PUSHJ P,TOUT ;TELL USER WHAT IS HAPPENING LI2: PUSHJ P,TTAB ;TYPE A <TAB> TXO F,ROF ;MARK REGISTER OPEN TXNE F,STF ;SUPPRESS TYPEOUT OF LOCATION? POPJ P, ;YES, DONE MOVE R,LLOCO ;GET ADDRESS OF OPEN LOC MOVEI W1,"?" ;TYPE ? IF FETCH FAILS PUSHJ P,FETCH ;FETCH CONTENTS JRST TEXT ;CAN'T -- GO TYPE ? PJRST CONSYM ;LIST CONTENTS OF OPEN LOC ;<CR> COMMAND - CLOSE CURRENT LOCATION CARR: PUSHJ P,DEPRA ;CLOSE REGISTER PUSHJ P,TIN ;GLOBBLE UP FOLLOWING LINEFEED SETZM CHINP ;REINIT INPUT LINE SETZM CHINC TXZ F,STF ;DON'T SUPPRESS TYPEOUT ANYMORE MOVE T,LLOC ;GET CURRENT LOC TXNE F,CF ; $ PRECEEDED? JRST LI1 ;YES, GO OPEN REGISTER JRST DD1.5 ;NO, JUST GO AWAIT COMMAND SUBTTL COMMAND ROUTINES -- CLASS 6 ;*************** START OF CLASS SIX COMMANDS *************** SUBTTL COMMAND ROUTINES -- REGISTER DEPOSIT AND OPEN ;"\" COMMAND - OPEN NEW LOCATION, PRESERVING PC SEQUENCE ICON: PUSHJ P,DEPRA0 ;BACKSLASH PUSHJ P,CEFFAD ;COMPUTE EFF ADR JRST ERR ;MEMORY READ ERROR JRST SLASH4 ;JOIN COMMON CODE ;<TAB> COMMAND - OPEN NEW LOCATION, BREAKING PC SEQUENCE TAB: PUSHJ P,DEPRA0 ;OPEN REGISTER OF Q PUSHJ P,CEFFAD ;COMPUTE EFF ADR JRST ERR ;MEMORY READ ERROR HRRI T,-1(T) ;CAUSE LI0 AOS'S LLOC PUSHJ P,PSHLLC ;PUSH OLD SEQUENCE MOVEM T,LLOC ;SETUP NEW SEQUENCE JRST LI0 ;JOIN COMMON OPEN/TYPEOUT CODE ;"[" COMMAND - OPEN LOCATION IN CONSTANT TYPEOUT MODE OCON: TXNE F,QF ;QUANT TYPED? MOVEI SCH,FTOC ;YES, CHANGE TEMP MODE TO CONSTANT TRO F,LF1+CF1 ;OPEN AS CONSTANT JRST SLASH ;TYPE ;"]" COMMAND - OPEN LOCATION IN SYMBOLIC TYPEOUT MODE OSYM: TXNE F,QF ;QUANT TYPED? MOVEI SCH,PIN ;YES, CHANGE TEMP MODE TO INSTRUCTION TRZ F,CF1 ;OPEN SYMBOLICALLY TROA F,LF1 ; . . . ;SKIP/FALL INTO SLASH ROUTINE ;"!" COMMAND - OPEN LOCATION SUPPRESSING TYPEOUT OF CONTENTS SUPTYO: TXOA F,STF ;SUPPRESS TYPEOUT ;SKIP/FALL INTO COMMON CODE ;"/" COMMAND - OPEN A NEW LOCATION IN CURRENT TYPEOUT MODE SLASH: TXZ F,STF ;TYPE OUT NOT SUPPRESSED PUSHJ P,CEFFAD ;COMPU