Trailing-Edge
-
PDP-10 Archives
-
BB-BT99S-BB_1990
-
10,7/ddt/ddt.mac
Click 10,7/ddt/ddt.mac to
see without markup as text/plain
There are 31 other files named ddt.mac in the archive. Click here to see a list.
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==:<BYTE (3)CSTVER(9)MAJVER(6)MINVER(18)EDTVER>
IF2 <PURGE MAJVER,MINVER,CSTVER,EDTVER>
; 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>$<N>M -- WHERE <N> IS THE
; MASK NUMBER AND <M> IS THE ASSOCIATED MASK.
;
; <N> = 0 OR NOT-SPECIFIED THEN <M> IS THE SEARCH MASK
; <N> = 1 THEN <M> IS TTY CONTROL MASK:
; 1B35 = 1 THEN "ECHO" <DEL>'S AS <BS><SP><BS>
;211 RDH 6-DEC-76
; NEW ASSEMBLY PARAMETER "SKPMAX" TO SET MAXIMUM NUMBER OF
; LOCATIONS SKIPPED FOR $X LOGIC. IF <INSTR>$X THEN TYPE
; <SKP> 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 <PUSHJ P,LISTEN>'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 <N>$2M TO SET THE SYMBOL OFFSET RANGE
; (I.E. THE RANGE IN WHICH VALUES WILL BE TYPED IN THE FORM
; SYMBOL+<OFFSET>) TO <N>. ADD ASSEMBLY PARAMETER "ADRNGE"
; AS THE DEFAULT VALUE. ALSO MAKE $1M/ ETC. WORK.
;235 RDH 24-MAR-77
; REVAMP BYTE TYPEOUT LOGIC: ADD <N>$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 <N>
; SUCH THAT 1 .LE. <N> .LE. 36(10) THE COMMANDS $<N>O & $$<N>O
; WORK AS USUAL BY SETTING AN INTERNAL BYTE MASK. FOR <N> = 0
; THE $3M BYTE MASK WILL BE USED. FOR <N> = <NULL> (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 $<RET> AFTER $<TAB>.
;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 <LF> 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
; (<<MATCH ANGLE BRACKETS)
; FIX BROKEN NEGATIVE INTEGER TYPEOUT, FIX TOPS-10 OUTPUT BROKEN BY
; EDIT 305, MAKE $7T MODE DO RIGHT-JUSTIFIED TYPEOUT ONLY IF LEFT 29
; BITS ARE ALL NULL, CHANGE PATCH ABORT (AGAIN) TO $$0>, 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 <ADDR.>$0T TO TYPE ASCIZ STRING AT <ADDR.>, 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 XXX<ADR>N$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 <LF> 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 <FOO>$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 <INSTR>$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 <ENTRY VECTOR SECTION>,,.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 <FILE>/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<UPPER>". 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 <TAB> 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 "<ESC>".
;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 <INSTR>$$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 <INSTR>$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<SP><TAB>" 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 clearm<setm>value$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,<FTDEC10==0>
IFNDEF FTDEC20,<FTDEC20==0>
IFNDEF FTFILE,<FTFILE==0>
IFNDEF FTYANK,<FTYANK==0>
IFNDEF FTEX20,<FTEX20==0>
IFNDEF FTEXEC,<
IFN FTEX20,<FTEXEC==-1>
IFE FTEX20,<FTEXEC==0>>
IFNDEF FTVMX,< FTVMX==0>
IFNDEF FTMON,< FTMON==0>
IFNDEF FTOPX,<FTOPX==-1>
IFNDEF FTDBUG,<FTDBUG==0>
IFNDEF FTPAGM,<FTPAGM==FTFILE!FTEXEC!FTDEC10> ;NEVER ON TOPS20 USER MODE
IFNDEF FTSCSH,<FTSCSH==-1> ;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,<SW==-1>>>
..N <FTDEC10,FTDEC20,FTEXEC,FTEX20,FTFILE,FTYANK,FTVMX,FTMON>
..N <FTOPX,FTDBUG,FTPAGM,FTSCSH>
FTUD20==FTDEC20&<^-FTEXEC>&<^-FTFILE>&<^-FTMON> ;USER -20
FTEX10==FTDEC10&FTEXEC ;EDDT-10
FTUE10==FTDEC10&<^-FTFILE> ;NON-FILE -10
IFNDEF FTDSYM,<FTDSYM==FTDBUG!<^-FTEX10>>
IFNDEF FTPURE,<FTPURE==FTMON> ;MDDT INITIALIZES IN THE PSB
..N <FTDSYM,FTPURE>
IFN FTDEC10&<FTDEC20!FTMON!FTEX20>,<PRINTX ? Illegal FTDEC10>
IFN FTDEC20&<FTDEC10!FTYANK!FTVMX>,<PRINTX ? Illegal FTDEC20>
IFN FTEXEC&<FTFILE!FTVMX!FTMON>,<PRINTX ? Illegal FTEXEC>
IFN ^-FTEXEC&<FTEX20>,<PRINTX ? Illegal ^-FTEXEC>
IFN FTFILE&<FTEXEC!FTVMX!FTMON!FTEX20>,<PRINTX ? Illegal FTFILE>
IFN FTPURE&FTEXEC,<PRINTX ? Illegal FTPURE>
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,<TITLE EDDT -- TOPS-10 EXEC MODE DDT>
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 ?