.ENABLE SUBSTITUTION
.ENABLE ESCAPE
; DDT BUILD COMMAND FILE.
.ASK VERB WANT LONG EXPLANATION MODE
.IFT VERB .GOTO VV1
;Explanations of options will be available for questions starting with
;(+ if ESC is typed.
.VV1:
.IFF VERB .GOTO V1
.E1:
;	This command file generates versions of DDT with many options.
;however, REMEMBER that there are more options that are NOT generated here
;and, especially on IAS systems, you may wish to edit this file to produce
;a version of DDT that suits your needs. This file addresses only
;RSX11M, RSX11M-Plus, and IAS systems; DOS and RT11 users should assemble by
;making parameter files by hand...see the DDT listing.
.V1:
.SETS IAS31 ";"
.SETF MPSID
.SETF MPSID2
.SETF DBLSW
.SETF IMGG
.SETS PFWS "0"
.SETF ISDDO
.SETF MEMTR
.SETF MDBGS
.SETS LRKVAL "0"
.SETF CDBP
.SETF MPDSB
.SETF V411M
.SETF OVLQ
.SETF SRQ
.SETF LRKFLG
.SETF MCRDBF
.SETN SRQV 0
.SETF MPQ
.SETF CDQ
.IFF VERB .GOTO V2
;DDT BUILD FILE FOR VARIOUS TYPES OF DDT
.E2:
;If you select conditional breakpoints you may fill in a mask
;in the array D.BMSK with any nonzero mask and if the corresponding
;breakpoint is reached, that mask will be ANDed with the value at
;the location you specified to open at the breakpoint, and if the
;result is different from the value you specified in the array
;D.BTST at the corresponding position, the breakpoint will be
;ignored. The sign bit is a likely bit to test this way by setting
;the mask to 100000 octal and testing from 100000 or 000000.
.V2:
.ASK CDBP (+WANT CONDITIONAL BREAKPOINT SUPPORT
.IFT <ESCAPE> .GOTO E2
.L1:
.IFF VERB .GOTO V3
.E3:
;DDT may be built to run as part of the user task (1-task DDT) or to
;run in a separate task DDT22M. The next question asks which you
;want to create here. Reply Yes for a version that runs as part of
;your task, No for the version that is a separate task.
.V3:
.ASK SU (+BUILDING 1-TASK DDT
.IFT <ESCAPE> .GOTO E3
.IFF VERB .GOTO V4
.E4:
;DDT may be built to be able to display or insert 32 bit integers in
;storage order (low,high) using the addr$J command to display, and
; the addr$1Jnumber command to insert the numbers.
.V4:
.ASK DBLSW (+Should DDT be able to handle 32 bit integer display/exam
.IFT <ESCAPE> .GOTO E4
.SETT MM
.SETT FLS
.IFF SU .GOTO XMMM
.IFF VERB .GOTO XMMM
.E5:
;If you wish to build a version of DDT that lives in your task but
;can access memory anywhere in the machine (via a common in the I/O page
;or being privileged), reply Yes next. If you will want to be able to access
;core image files you must reply yes.
.XMMM:
.IFT SU .ASK MM (+BUILDING MEMORY-ACCESS DDT
.IFT SU .IFT <ESCAPE> .GOTO E5
.IFF SU .ASK IMGG SHOULD DDT22M ISSUE ITS OWN $G TO START AUTOMATICALLY
.IFT SU .ASK FLS WANT ABILITY TO READ SYM TBL FILES
.IFF FLS .GOTO NISDD
.IFF VERB .GOTO V6
.E6:
;DDT may be set up to treat ISD object declarations (internal symbols)
;as valid symbols in a .STB file. If so, the behavior is controlled by
;MDLCTL which will not do so if 0, will select on module name for ISD
;blocks only if MDLCTL is (+, or select on module name for both ISD and GSD
;blocks if MDLCTL is negative. The module selected will be the one whose
;name is stored (as 2 RAD50 words) in MODULE, symbolically available
;inside DDT. This permits one to examine global symbols for
;only a single module in symbol table (.STB) files, and with a suitable
;relocator module, to examine internal symbols of programs. The option is
;not very useful without the relocator module however.
.V6:
.ASK ISDDO (+Should the Internal Symbol Block readin code be included
.IFT <ESCAPE> .GOTO E6
.IFF VERB .GOTO V29A
.E29A:
;The debug kernel can be set up to allow DDT to be installed as an MCR
;task of name ...DDT (instead of DDT22M) so it will run at any terminal
;(though the task name MUST then be of form DDTTnn, as normal in RSX11M+)
;and not require that the task name DDT22M be used. This allows multiple
;copies of DDT22M to be active at different terminals with one unmodified
;debug kernel. The kernel does get bigger if this happens.
; DDTKNL may also be built to "auto-start" a task provided the line is
;included in your task build as follows:
; GBLPAT=title:L$URK:1 (or with value 0 if the default is set to 1).
;This enlarges DDTKNL too, though only by a few words, and does not allow
;DDT to initialize breakpoint tables. That's OK if DDT22M has just been
;run, and allows the debugger to "lurk" in the background, to be
;activated if any errors occur. Note that the DDT debugger task must be
;separately started; DDTKNL does not have the code to request it even in
;the case of a "lurking" debugger. This option is for cases where a
;program is nearing completion and is to be tested by people other than
;the developer, who may not be able to start up the program if it comes
;up in DDT mode.
.V29A:
;N.B.  Lurk ability increases size of DDTKNL
.ASK LRKFLG (+Should DDTKNL be able to auto-start tasks
.IFT <ESCAPE> .GOTO E29A
.IFT LRKFLG .ASKS LRKVAL Enter default for auto start (0=no,1=yes)
;The DDTTnn option is experimental...
.ASK MCRDBF (+Should the task name of DDT22M be DDTTnn instead of DDT22M
.IFT <ESCAPE> .GOTO E29A
.NISDD:
.ASKS OPSYS WHAT IS OPERATING SYSTEM (POS,IAS,RSX11M,RSX11MPLUS)
.IF OPSYS NE "IAS" .GOTO NOWRN
.IFT SU .IFF MM .GOTO NOWRN
.IFF VERB .GOTO V7
;NOTE FOR IAS USERS: This DDT version [2/19/1981] supports IAS V3.0
;data structures and can locate tasks in physical memory in IAS V3.0.
;HOWEVER, it may NOT access tasks' memory correctly in IAS V3.1 and in
;that case, you should specify access to other tasks' space either
;via pure send-receive directives [see below] or not at all. The
;code after DBG11M: will need to be altered for IAS V3.1 once it becomes
;clear how task memory use can be determined. Access to memory spaces
;such as "Kernel space" [or arbitrary spaces via setting PAR0-PAR7]
;is still legal in IAS V3.1.
;	FURTHER NOTE:
;DDT22M needs to run realtime to work.
.V7:
.NOWRN:
.ASK FP DO YOU HAVE FPU SUPPORT
.IFF VERB .GOTO V8
.E8:
;DDT may be used as a code profiler by setting PRFCTL to 1, setting
;PRFBAS to the base address to profile, setting PRFSHF to the shift
;count right (0,1,2,3,...) to shift address offsets to define bin size,
;and going into multiple single step mode to execute in single step and
;record executions of each address (or address bin) in a histogram
;area called PRFHST and of size (bytes) of PRFSIZ. This area can be
;examined by DDT in DDT space later.
.V8:
.ASK PRFLR (+DO YOU WANT TO BE ABLE TO PROFILE CODE?
.IFT <ESCAPE> .GOTO E8
.IFT PRFLR .ASKS PFWS HOW MANY WORDS OF PROFILER HISTOGRAM WANTED?
.SETN COR 256
.IFT MM ;give the amount of memory on your machine followed by decimal point
.IFT MM .ASKN COR WHAT IS CORE SIZE IN K WORDS (K=1024)
.SETN COR8 COR*32.
.SETN COR8 COR8-1
.SETF FCSR
.SETF M32
.SETF DDBG
.SETF SAST
.SETT BIT22
.IFF VERB .GOTO V8A
.E8A:
;DDT can be built to save the last 32 PC locations in an array MT.BUF
;(pointed to by MT.PTR and ending at MT.TOP) which will be filled
;circularly at each breakpoint trap (breaks or single step instructions)
;and then incremented. If you enable this feature, you can use a large
;proceed count in single step mode plus a breakpoint at a weird place
;you've found your program is going to, and be able when you hit
;the breakpoint to find out where you got there from. Since watchpoints
;are done in single step mode, this automatically works when you hit
;a watchpoint too, to see how you got to this strange place. Many stack
;errors result in branches to weird locations and this gives an ideal
;tool for tracking them down.
.V8A:
.ASK MEMTR (+Want records kept of last 32 PCs in single step mode?
.IFT <ESCAPE> .GOTO E8A
.IFT SU .GOTO XSRQQ
.IFF VERB .GOTO V9
.E9:
;If you wish, DDT may have the option of either mapping into the target
;task's space directly for speed, but with some risk of error if the target
;task is shuffled/checkpointed, or via sends and receives exclusively. The
;send/receive method is much slower, but safe against shuffling, etc.
;If you select the ability to modify via send/rcv, the mapping ability
;remains and the state of variable SR.CTL determines which is used. If
;you answer Yes to the next question, you will be asked for the initial
;state to select a mapping method.
.V9:
.XSRQQ:
.IFF SU .ASK SRQ (+MODIFY TASKS VIA SEND/RCV DATA
.IFF SU .IFT <ESCAPE> .GOTO E9
.;NOTE THAT IF WE DEFINED MT.NUM IN PREFIX FILE WE COULD HAVE
.;MORE OR LESS THAN 32 SAVED PCS (MT.NUM IS NUMBER ALLOWED)
.IFT SRQ .ASKN SRQV WHAT IS INIT STATE OF SND/RCV CONTROL (1=0N,0=OFF)
.IFF VERB .GOTO V10
.E10:
;a special variable OVRBRK may be set to a breakpoint's address to
;prevent loading any other instructions back at that breakpoint only.
;It is intended that $ALBP2 be the location normally to allow a break
;in overlay load code (you then remove and reset breaks yourself)
;but the option may not always be desired.
.V10:
.ASK OVLQ (+WANT SPECIAL OVERLAY-CODE BREAK FLAG
.IFT <ESCAPE> .GOTO E10
.IFF VERB .GOTO V11
.E11:
;DDT may examine memory image files as though they were core, when $UM
;mode is in effect and the $1L command has been used to open a memory
;image file. All other options remain if this is selected, but DDT
;will then need to do file access which will add to its size.
.V11:
.ASK CDQ (+WANT ABILITY TO EXAMINE MEM IMAGE FILES
.IFT <ESCAPE> .GOTO E11
.SETF XMPRC
.IFT SRQ .GOTO TCDQ
.IFF CDQ .GOTO XDCDQ
.IFF SU .GOTO XDCDQ
.TCDQ:
.IFF VERB .GOTO V12
.E12:
;Normal assembly options require a DDT able to access memory image files
;to also have total memory access. This may be disabled optionally so
;the resulting DDT can access files or its own memory, but not arbitrary
;system memory.
;DDT also does not really need to access arbitrary memory if it may
;use send/receive to communicate with other tasks.
;Reply Y to the next question to prevent DDT from having
;access to arbitrary memory:
.V12:
.ASK XMPRC (+DISABLE DDT ACCESS TO ARBITRARY MEMORY
.IFT <ESCAPE> .GOTO E12
.IFT XMPRC .SETT MDBGS
.XDCDQ:
.IFF SU .ASK DDBG WANT INTERNAL DDT DEBUG CAPABILITY (normal No)
.IFF SU .ASK SAST SHOULD MESSAGE ASTS BE DISABLED DURING BREAKS (Y NORMAL)
.IF OPSYS EQ "IAS" .GOTO XMPQ
.IFF SU .IFT MDBGS .SETF MPQ
.IFF SU .IFT MDBGS .GOTO XMPQV
.IFT SU .GOTO XMPQ
.IFF VERB .GOTO V13
.E13:
;Normally DDT22M maps to the target task at each break. You may get
;it to map at every reference, but at substantial time overhead cost
;by replying Yes to the next question. Normally reply No.
.V13:
.XMPQ:
.IF OPSYS NE "IAS" .IFF SU .ASK MPQ (+MAP TO TARGET TASK AT EVERY READ/WRITE
.IF OPSYS NE "IAS" .IFF SU .IFT <ESCAPE> .GOTO E13
.XMPQV:
.ASK CLENE CLEAN UP CREATED FILES
.IF COR GT 124. .GOTO B22Y
.IFT MM .ASK BIT22 IS YOUR MACHINE A 22-BIT PDP11 (11/44 OR 11/70)
.B22Y:
.IF OPSYS EQ "IAS" .GOTO DOIAS
.IF OPSYS EQ "RSX11M" .GOTO DO11M
.IF OPSYS EQ "RSX11MPLUS" .GOTO DOMPL
.IF OPSYS EQ "POS" .GOTO DOMPL
;OPERATING SYSTEM UNKNOWN... RETRY.
; operating system must be IAS (enter IAS for RSX11D), RSX11M, or RSX11MPLUS
.GOTO L1
.DOIAS:
.ASK V31 Is your system  IAS V3.1 ??
.IFT V31 .SETS IAS31 "I$AS31=0"
.SETT IAS
.SETF RMM
.SETF RMP
.SETF RXM
.GOTO DOCMN
.DO11M:
.SETF IAS
.SETT RMM
.SETF RMP
.SETT RXM
;Tell the system whether M V4 or M+ V2 special structures support needed.
.ASK V411M Is your system RSX11M V4 or later or RSX11M+ V2 or later
.GOTO DOCMN
.DOMPL:
.SETF IAS
.SETT M32
.SETF RMM
.SETT RMP
.SETT RXM
;Tell the system whether M V4 or M+ V2 special structures support needed.
.ASK V411M Is your system RSX11M V4 or later or RSX11M+ V2 or later
.IFF V411M .GOTO DOCMN
.IFF VERB .GOTO V27
.E27:
;If RSX11M Plus V02 is in use, user mode I and D space may be permitted.
;DDT can handle some forms of I/D space. However, it MUST be mapped to
;the I/O page to do so.
; This code sets the mapping hardware to set I space, so requires an I/O
;page common (in APR 7). It works only in single task version DDT correctly
;though it will allow some setting of your own mapping (by hand) to
;map the tasks you like. It may fail... code is untested.
.V27:
.ASK MPSID (+User Mode I/D Space Support Via Direct Set (normal N)
.IFT <ESCAPE> .GOTO E27
.IFF VERB .GOTO V28
.E28:
;RSX11M+ V2 has a directive to access I/D space which DDT can use
;either in single or dual task DDT. In dual task mode it assumes
;that you selected send-receive mode support and that that
;support defaults to ON. Be sure you set DDT up that way. It will
;allow DDT to work with I/D space and should be OK. If using M+ v1
;for testing, edit DDTPRM and DDTPRM2 to define ..MVTS also to
;give a dummy definition of the macro that works in M+ V1. This
;code has NO provision for DDT "mapping to" tasks, so answering Yes
;will attempt to turn off DDT's auto-mapping code. Conditional
;assembly may work wrong in that case... the code can't really be
;tested until RSX11M+ V2 arrives.
.V28:
.ASK MPSID2 (+User Mode I/D support using new MVTS$ directive (M+ V2)
.IFT <ESCAPE> .GOTO E28
.IFF SU .IFT MPSID2 .SETT SRQ
.IFF SU .IFT MPSID2 .SETN SRQV 1
.IFF SU .SETT MPSDSB
.IFT MPSID2 .IFF SU .GOTO X29
.DOCMN:
.IFT SU .GOTO X29
.IF OPSYS EQ "POS" .GOTO XE29
.IFF RXM .GOTO X29
.IFF V411M .GOTO X29
.XE29:
.IF OPSYS EQ "POS" ;NORMALLY REPLY Y FOR P/OS TO NEXT.
.IFF VERB .GOTO V29
.E29:
;Reply Y to disable code that tries to look in RSX tables to find
;tasks. This may be redundant if general mapping is disabled
;but otherwise only disables the AUTOMATIC setting of DDT virtual
;APRs when a second task's breakpoints are seen.
; NORMALLY Y FOR P/OS.
.V29:
.ASK MPDSB (+Disable automatic mapping to tasks at break
.IFT <ESCAPE> .GOTO E29
.X29:
.SETF DAPR
.IFF RXM .GOTO FM1
.IFF VERB .GOTO V17
.E17:
;If auto proceed is permitted at RSX breakpoints, DDT can allow it. However,
;due to interactions with the terminal driver, typing a character to stop
;auto proceeds will not work. DDT can be built with auto proceed permitted
;at breaks, or not. Answer Y to the next question to allow auto proceed.
; This will enable auto display of locations at breaks with proceeds.
.V17:
.ASK DAPR (+Want DDT auto proceed at breakpoint support with display
.IFT <ESCAPE> .GOTO E17
.FM1:
.IFT RMM .ASK M32 IS THIS RSX11M 3.2 OR LATER WITH FULL DUPLEX TT HANDLER
.IFT RMM .ASK FCSR IS THERE AN FCSRES TO LINK TO
.IFF CDQ .GOTO XXCDQ
;The Logical Unit you choose for core images should be one legal
;for the task you'll build DDT with. 3 is a good choice for DDT22M.
.XXCDQ:
.SETS CDLN "0"
.IFT CDQ .ASKS CDLN WHAT LUN SHOULD BE USED FOR CORE IMAGE FILES
.OPEN DDTPRM.MAC
.DATA X$RSX=0 ;LOCAL DEFS FOR RSX VERSION
.DATA Q$UIET=0 ;OMIT DDT ASSEMBLY PRINTS FOR NON-SUSPICIOUS CONDITIONS
.IFT IMGG .DATA IM$$G=0
.DATA CL.ZIT=0 ;CLOSE FILE A LOT ON SYMBOL TABLE (DEFINED)
.IFT CDBP .DATA CND$BK=0
.IFF BIT22 .DATA $ADR18=0 ;I/O PAGE IS UNIBUS TYPE.
.IFT CDQ .DATA CD$FIL=0 ;ALLOW CORE IMAGE DUMPS
.IFT CDQ .DATA CD.LUN='CDLN'
.IFT PRFLR .DATA PR$FIL=0 ;ALLOW PROFILER CODE
.IFT PRFLR .DATA PF$SZZ='PFWS' ;LENGTH IN WORDS OF HISTOGRAM
.IFT MPSID .DATA U$ID.=0 ;I/D SPACE SUPPORT FOR 11M+ V2
.IFT ISDDO .DATA I$$SD=0 ;ALLOW ISD SYMBOL DECLARATIONS TO BE CONSIDERED
.IFT IAS .DATA 'IAS31'	;NULL OR CONDITIONAL FOR IAS V3.1 SUPPORT
.IFT MEMTR .DATA MEM$TR=0 ;ENABLE TRACING OF LAST 32 PCs AT BPT
.IFT MPQ .DATA MP$ONE=0 ;MAP AT EACH GETCAD OR PUTCAD TO TGT TASK
.IFT DBLSW .DATA DB$L=0 ;ALLOW 32 BIT INTEGER COMMANDS
.IFT XMPRC .DATA X$MPP=0 ;DISABLE ACCESS TO ARBITRARY MEMORY
.DATA $$RSX=0 ;SOME KIND OR RSX/IAS
.IFT DAPR .GOTO FM2
.IFT RXM .DATA .NAP.=0 ;NO AUTO PROCEED WITH PRINT IN RSX11M
.GOTO FM3
.FM2:
.IFT RXM .DATA .RPT.=0 ;AUTO PROCEED ENABLED IN 11M/11M+
.FM3:
.IFT SU .DATA MSX11D=0 ;NO DDT TRAP INSTRUCTION INTERCEPT IF DEFINED
.DATA D.MCRO=0 ;ALLOW DDT MACROS
.IFT RXM .DATA $RSXMM=0 ;RSX11M OR M+
.IFT RMP .DATA K$ID=0 ;RSX11M+ KNL I/D SPACE
.DATA MAXBK='COR8'.
.DATA $XOK=0	;ALLOW INST$X IN OTHER TASK
.IFT OVLQ .DATA X$OVL=0
.IFT OVLQ .DATA XX$OVL=0 ;NO SPECIAL ACTION ON RESTORE
.IFF SU .IFT SRQ .DATA SPC$MP='SRQV'
.IFT MM .DATA $VMEM=0
.IFF SU .DATA MU$DBG=0 ;INTERTASK DEBUGGER
.IFT FLS .DATA SM$FIL=0 ;ALLOW SYMBOL TBL LOOKUPS
.DATA MEM$BK=0	;ALLOW MEMORY BREAKS
.IFT MDBGS .GOTO XMDBGG
.IFT RXM .IFT MPDSB .GOTO XMDBGG
.IFF SU .IFT IAS .DATA R$XDDB=0 ;IAS INTERTASK FINDER VERSION
.IFF SU .IFT RXM .DATA R$XMDB=0 ;RSX11M/M+ INTERTASK FINDER VERSION
.XMDBGG:
.IFT MPSID2 .DATA MPV2.=0 ;RSX11M+ V2 I/D SUPPORT
.IFT FP .DATA $D$FPU=1
.IFT FP .DATA $FOP$=0
.IFT M32 .DATA MV3.2=0 ;RSX11M V3.2
.IFT M32 .DATA MMV3.2=0 ;TERMINAL HANDLING
.IFT DDBG .DATA ER$SV=0 ;ALLOW DDT INTERNAL ERROR DIAGNOSIS
.IFT M32 .DATA F$DPX=0 ;FULL DUPLEX NO-ECHO READ
.IFT IAS .DATA F$DPX=0 ;READ NO-ECHO AND DDT EXPLICIT TYPE OF ECHO
.IFF SU .DATA $$SDT=0 ;SYSTEM DEBUGGER OPTION
.DATA KDPAR0=172360
.DATA UDPAR0=177660
.CLOSE
.IFT SU .GOTO NOPR2
.OPEN DDTPRM2.MAC
.DATA X$RSX=0 ;LOCAL DEFS FOR RSX VERSION
.DATA ..XID$=0 ;***$$$ EXPERIMENTAL SWITCH TO LOOP AT DDTIDL
.IFT SAST .DATA X$AST=0 ;TURN OFF ASTS IN TGT TSKS DURING BRKPTS
.IFT CDBP .DATA CND$BK=0
.DATA $$RSX=0 ;SOME KIND OR RSX/IAS
.IFT RXM .DATA $RSXMM=0 ;RSX11M OR M+
.IFT RMP .DATA K$ID=0 ;RSX11M+ KNL I/D SPACE
.IFT LRKFLG .DATA L$URK=0 ;ALLOW LURKING DEBUGGER
.IFT LRKFLG .DATA L$$RK='LRKVAL' ;WITH USERS DEFAULT STATE (0=NORMAL DDT)
.IFT MCRDBF .DATA M$CRDB=0 ;ALLOW DDT22M TASK NAME INSTALLED AS ...DDT
.IFT OVLQ .DATA X$OVL=0
.IFT OVLQ .DATA XX$OVL=0 ;NO SPECIAL ACTION ON RESTORE
.IFF SU .IFT SRQ .DATA SPC$MP='SRQV'
.IFT IAS .DATA 'IAS31'	;NULL OR CONDITIONAL FOR IAS V3.1 SUPPORT
.DATA SM$FIL=0 ;ALLOW SYMBOL TBL LOOKUPS
.DATA $VMEM=0
.IFT MPSID .DATA U$ID.=0 ;I/D SPACE SUPPORT FOR 11M+ V2
.IFT MPSID2 .DATA MPV2.=0 ;RSX11M+ V2 I/D SUPPORT
.DATA MU$DBG=0 ;INTERTASK DEBUGGER
.IFT MDBGS .GOTO XMDBGH
.IFT RXM .IFT MPDSB .GOTO XMDBGH
.DATA R$XMDB=0 ;UST THIS TO USE WHATEVER INTERTASK FINDER IS IN DDT
.XMDBGH:
.DATA $XOK=0
.IFT FP .DATA $D$FPU=1
.IFT FP .DATA $FOP$=0
.DATA MEM$BK=0	;ALLOW MEMORY BREAKS
.IFT M32 .DATA MV3.2=0 ;RSX11M V3.2
.IFT M32 .DATA MMV3.2=0 ;TERMINAL HANDLING
.IFT M32 .DATA F$DPX=0 ;FULL DUPLEX NO-ECHO READ
.IFT IAS .DATA F$DPX=0 ;READ NO-ECHO AND DDT EXPLICIT TYPE OF ECHO
.DATA $$SDT=0 ;SYSTEM DEBUGGER OPTION
.CLOSE
.NOPR2:
.IF OPSYS EQ "POS" .GOTO DCLMC
.IFF SU .IFT RXM MAC DDT22=LB:[1,1]EXEMC/ML,SY:'<UIC>'DDTPRM,DDT22
.IFT SU .IFT RXM MAC DDT22=DDTPRM,DDT22
.IFT IAS MAC DDT22=DDTPRM,DDT22
.IFF SU MAC DDTMU=DDTPRM2,DDTMU
.IFF SU MAC DDTKNL=DDTPRM2,DDTKNL
.IFT SU .IFT CLENE PIP DDTPRM.MAC;0/DE/NM
.GOTO MCRMC
.DCLMC:
.IFT SU MACRO/OBJ=DDT22 DDTPRM,DDT22
.IFF SU MACRO/OBJ=DDT22 DDTPRM,DDT22
.IFF SU MACRO/OBJ=DDTMU DDTPRM2,DDTMU
.IFF SU MACRO/OBJ=DDTKNL DDTPRM2,DDTKNL
.MCRMC:
.IFT SU .GOTO ALLDUN
.SETS FPS "/FP"
.IFF FP .SETS FPS ""
;NOTE IF DDTPRM SPECIFIES FLOATING POINT ISSUE
;MAC DDTKNL=DDTKNL
;FOR NON-FLOATING-POINT TASKS DEBUGS
.OPEN DDT22MBLD.CMD
.IFT IAS .DATA DDT22M'FPS'/CP/PR=DDTMU,DDT22/DA,[11,17]EXECUTIVE.STB/SS
.IF OPSYS EQ "POS" .GOTO TLPOS
.IFT RXM .DATA DDT22M'FPS'=DDTMU,DDT22/DA,LB:[1,54]RSX11M.STB/SS
.GOTO TLMCR
.TLPOS:
.DATA DDT22M'FPS'=DDTMU,DDT22/DA
.TLMCR:
.DATA /
.IFF MCRDBF .DATA TASK=DDT22M
.IFT MCRDBF .DATA TASK=...DDT
.IFT IAS .DATA LIBR=EXTCOM:RW
.IF OPSYS NE "POS" .IFT RXM .DATA COMMON=EXTCOM:RW:7
.IF OPSYS EQ "POS" .DATA COMMON=CTPAGE:RW:7
.IF OPSYS NE "POS" .IFT RMP .DATA SUPLIB=FCSFSL:SV
.IFT IAS .DATA ACTFIL=4
.IFT IAS .DATA LIBR=SYSRES:RO
.IFT RMM .IFT FCSR .DATA LIBR=FCSRES:RO
.DATA PRI=50
.DATA ASG=TI:1:2:3:4:5:6
.DATA //
.CLOSE
.IFF VERB .GOTO V14
;NOTE: This build file may fail unless there is a Position Independent
;I/O page common called EXTCOM to permit the task to map to the I/O
;page. If you prefer the I/O page to be mapped via another common
;edit DDTBLD.CMD to reflect the correct common and then build DDT.
;The EXTCOM file may be created as follows:
;[extcom.mac]:
;	.TITLE EXTCOM
;	.PSECT X$K$.,RW
;EXTCOM::
;	.BLKW 4095.
;	.END
;[EXTCOM.CMD] - FOR TASKBUILD
;[1,1]EXTCOM/PI/-HD,,[1,1]EXTCOM=EXTCOM
;/
;STACK=0
;UNITS=0
;//
; THEN CREATE A PARTITION "EXTCOM" OF TYPE "DEV" (TO GET IT INTO
; THE I/O PAGE) AND IF REQUIRED (M PROBABLY WILL REQUIRE IT, M+ NOT)
; INSTALL EXTCOM/PAR=EXTCOM.
; THE ADDRESSES OF THE PARTITION SHOULD BE THE PHYSICAL I/O PAGE.
; NOTE THAT THE .BLKW 4095. IS TO MAKE SURE IT FITS. THE 32-WORD
; PDP11 MAPPING GRANULARITY ENSURES THAT THE FULL I/O PAGE IS IN
; FACT MAPPED. THE IAS PROCEDURE IS SIMILAR BUT YOU MUST SPECIFY
; AN OWNING UIC AND NONOWNER ACCESS=RW IN THE INSTALL COMMAND. IN IAS,
; INSTALL IN PAR=$$$EXT.
.V14:
.IF OPSYS NE "POS" TKB @DDT22MBLD
;NOTE WE WILL BUILD AN I/O PAGE COMMON HERE FOR DDT TO LINK TO
.IF OPSYS EQ "POS" MACRO EXTCOM
.IF OPSYS EQ "POS" LINK @CTPAGE
.IF OPSYS EQ "POS" COPY CTPAGE.* [1,5]
.IF OPSYS EQ "POS" LINK @DDT22MBLD
.IFT CLENE PIP DDTPRM.MAC;0,DDTPRM2.MAC;0,DDT22MBLD.CMD;0/DE/NM
.IFT CLENE PIP DDTMU.OBJ;0,DDT22.OBJ;0/DE/NM
;DONE. LINK TO DDTKNL/DA TO USE. RUN DDT22M FIRST, WITH
;TASK NAME DDT22M. MUST ABORT DDT22M AFTER DONE.
.ALLDUN:
