1 Copyright (c) 1999 Massachusetts Institute of Technology
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2 of the License, or (at
6 your option) any later version.
8 This program is distributed in the hope that it will be useful, but
9 WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 General Public License for more details.
13 You should have received a copy of the GNU General Public License
14 along with this program; if not, write to the Free Software
15 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16 ------------------------------
20 This file attempts to maintain up-to-date documentation on
21 all non-symbolic ("old") system calls. Those wonderful
22 souls who update the information in any way (additions,
23 deletions, corrections) should describe their
24 modifications in a brief note to INFO-ITS@AI so
25 that interested parties can correct their copies or
26 conceptions without needing to print or read the
27 entire file again. For example:
29 :QMAIL INFO-ITS@AI I added more details to the .FOO uuo ^C
31 If you want to be put on the INFO-ITS mailing list,
32 just say so in a message to it.
33 -------------------------------------------------
35 On the PDP-10, opcodes 0 through 77 are deliberately "not
36 defined", and are called uuos ("unimplemented user operations").
37 Also, certain other opcodes are either illegal in user mode
38 or undefined (for example, I/O instructions, JRST 4,).
40 When an undefined instruction is executed, it "traps to 40":
41 it is stored in location 40
42 with the index and indirect fields zeroed and the address field
43 replaced by the effective address, and then the instruction
44 in 41 is executed (it is usually a subroutine call).
45 (Some instructions actually trap to 60 on KA's, but ITS contrives
46 to make them appear to have trapped to 40 just like all
49 uuos 1 through 37 are reserved for user programs. They
50 go through the entire trap sequence remaining in user mode,
51 so it is the user's locations 40 and 41 that are used.
52 The operating system is not involved at all.
53 These uuos are called "user uuos".
55 The other undefined opcodes enter exec mode during the trap,
56 so that the system's 40 and 41 are used; the PC saved by the
57 subroutine call will say "user mode" if the uuo was executed
58 in user mode, however. These instructions are the normal way
59 of calling any PDP-10 operating system.
61 ITS interprets uuos 40 through 47 as monitor calls; those
62 uuos are called "system uuos". The bulk of this file is devoted
63 to describing how to use them. In addition, ITS will simulate
64 some I/O instructions for the user (for example, any CONI, and
65 DATAI 0,). All other instructions that trap to the system
66 will be signaled to the user (they are "returnable uuos").
67 For simple programs, they will cause an ILOPR interrupt
68 (%PIILO, bit 1.6 of .PIRQC). For programs that appear able to
69 handle them, they are "returned" to the user, pretending to
70 be user uuos - that is, the system makes it appear that they had
71 trapped to the user's 40. However, they do not act precisely
73 1) The system can't simulate any trap instruction but
74 unindexed, direct JSR. If the user's trap instruction is
75 not a JSR, or is indexed or indirect, the system assumes that
76 the user can't handle the returnable uuos, and causes an ILOPR
77 interrupt instead. Also, if the AC field of the JSR is nonzero,
78 the system will interrupt instead of returning the uuo; this
79 is a way for a program to say explicitly that it doesn't want
80 to have uuos returned, but still handle user uuos.
81 2) If the opcode in 41 is 0, the system treats it as if it
83 3) 0 is not considered a reasonable place to JSR to. If the
84 address field of 41 is 0, the system will interrupt instead of
86 4) While the addresses 40 and 41 are fixed by hardware for
87 user uuos, for system returned uuos they are not. They must
88 always be consecutive, but the address of the first one is
89 kept in the RH of the .USET variable .40ADDR (whose initial value is,
90 of course, 40). Thus, the user may have one handler for user uuos
91 and another for returned uuos.
92 Note that the system uses "42" for interrupts and "43" and "44"
93 for the "locks" feature; those locations are also shifted
95 5) Returnable UUOs have complicated interactions with DDT.
96 When proceeding from a breakpoint, DDT must simulate certain
97 instructions, including all those that can transfer control.
98 User uuos can be simulated properly, but not returnable ones
99 since DDT does not know how to decide whether they are to cause
100 ILOPRs. So DDT treats those uuos like the typical instructions;
101 it puts the uuo in 31, a jump to 1 + the actual address of the
102 uuo in 32, and a jump to 2 + that address in 33. It then starts
103 the job at 31. If the returnable uuo handler does nothing with
104 the PC except possibly return to it, and does not try to examine
105 the uuo except by looking at 40, this causes no problem. However,
106 if the uuo is followed by arguments, or if it can skip more than
107 once, or if it tries to remember the PC somewhere, the handler
108 must understand that if the PC is 31 (+1) special treatment is required.
109 In addition, the real location of the uuo will contain not the
110 uuo but a .BREAK, which will be there to implement the breakpoint.
112 If the .UTRAP variable of a job is nonzero, ALL instructions
113 that trap to the system will cause ILOPR interrupts - even those
114 that are usually treated as system calls. In addition, the
115 job will not handle any of its own interrupts - they all interrupt
116 its superior. Thus, the superior can make the job believe it is
117 running under a non-ITS environment. User uuos are not affected.
118 The .UTRAP variable is the same as the %OPTRP bit in the LH of .OPTION.
120 If the %OPDEC bit in the LH of .OPTION is set, uuos 40, 41 and 47
121 (as well as those I/O instructions which ITS usually simulates)
122 become returnable uuos instead of system calls. By a lucky
123 coincidence, those uuos, which are the only ones used by both
124 ITS and TOPS-10, are not really necessary in ITS (they are
125 .OPEN, .IOT and .ACCESS, and all have alternative forms using .CALL).
126 In this mode, all uuos used as system calls by TOPS-10 are
127 returnable. One of the TOPS-10 simulators works by setting
128 this bit, and making .40ADDR point into the simulator where
129 it lives at the top of core (to avoid conflicting with the user
130 uuo handlers of the simulated programs).
132 CALLS: Overview of ITS System Calls
134 ITS system calls come in two kinds: the older, numerically
135 decoded, non-standardized kind, and the newer "symbolic
136 system calls" with a standard calling sequence.
138 Each of the numerically decoded system calls is distinguished
139 from all of the others by the values of specific fields
140 in the instruction (the opcode, and maybe the AC and address
141 fields). Each specific system call is known as "a uuo", and
142 its name is a predefined symbol in the assembler, whose value
143 is the appropriate instruction. For example, one uuo is
144 .ACCESS; it is distinguished by the opcode field alone, which means
145 that the AC field and address are available as arguments.
146 The symbol .ACCESS is defined as the appropriate opcode.
147 .RCHST, however, is distinguished by its opcode and its address,
148 so that only the AC field can be used as an argument. The uuos
149 distinguished by opcode and address all have the same opcode,
150 which is called .OPER; thus, all such uuos are called ".OPER's".
151 .FDELE is distinguished by opcode and ac field, leaving the address
152 as an argument; such uuos are called ".CALL's" since they all have
153 .CALL as their opcode. Each uuo is described individually in this file.
155 The symbolic system calls all use the uuo .CALL. They are
156 distinguished by the contents of the block addressed by the .CALL,
157 which also points to the arguments. Ths symbolic system calls
158 are described in more detail in the file .INFO.;ITS .CALLS.
160 .ACCESS chnum,[access pointer] set file access pointer
162 Sets the access pointer for the I/O channel <chnum>
163 for the next input/output operation. This is used to
164 effect random access. On the DSK device (and DSK-like
165 JOB devices) the access pointer is the number of "bytes"
166 from the beginning of the file. Bytes are normally the
167 same as words, but in unit ascii mode there are five
168 seven-bit bytes per word. In the future there may be
169 the ability to have bytes of any size from 1 to 36 bits.
170 On the USR device the access pointer is the address
171 within the job's memory.
172 Random access on the USR device can also be effected
173 via page mapping (see the .CBLK uuo and the CORBLK
174 symbolic system call). If the channel number <chnum>
175 is variable, the symbolic system call ACCESS may
176 be used in place of the .ACCESS uuo.
177 The symbolic call RFPNTR may be used to read the current
178 access pointer for a file.
182 This uuo was for hacking the AMF arm. The arm no longer exists.
186 This uuo was for hacking the AMF arm. The arm no longer exists.
190 This uuo was for hacking the AMF arm. The arm no longer exists.
192 .ASSIGN ac, assign a microtape
195 The accumulator <ac> should contain the number of a
196 microtape drive. If it succeeds, it assigns the drive
197 to the user who executed the .ASSIGN. When a job
198 attempts to use a microtape drive,
199 it will succeed only if it has the same
200 sname as the uname of the job which did the .ASSIGN.
201 A .ASSIGN will fail only if the drive is already
202 assigned to a different user (i.e. a different uname),
203 or if an invalid drive number is given.
204 See also the .DESIGN and .RCHST uuo's.
206 .ATTY chnum, assign tty to inferior
209 Puts the job in the state of wishing to pass control of
210 the tty to the direct inferior open on the specified
211 channel. It skips if successful; it fails if the
212 channel does not have a direct inferior open, if the
213 executing job had never had the tty, or if it had not
214 been in the state of wishing to retain the tty. If the
215 job had the tty, after the .ATTY the tty will belong
216 to the specified inferior, or one of its inferiors.
217 A job need not have the tty to do an .ATTY.
218 See the .DTTY uuo, and the .TTY user variable.
221 .BREAK ac,address breakpoint instruction, etc.
223 The <ac> and <address> fields of this uuo are totally
224 ignored by ITS. The procedure executing it receives
225 a class 1 interrupt (bit 2.2 of the .PICLR user
226 variable, called %PIBRK), stopping it and interrupting
229 The standard superior procedure, DDT, assigns
230 the following semantics to .BREAK, dependent on
231 the <ac> field (for full information see DDT ORDER):
234 1-10 Breakpoint number <n> in the program, for <n>
236 12 Request for information transfer.
237 15 Temporary breakpoint number 1.
238 16 Request for program suspension or termination.
239 17 Temporary breakpoint number 2.
241 The "normal termination" instruction is .BREAK 16,160000
242 (but also see .LOGOUT).
244 When DDT sets a breakpoint in a program on a given
245 instruction, it replaces the opcode with .BREAK
246 and the ac field with the breakpoint number. Thus
247 the instruction will still calculate its usual effective
248 address before breaking. The two temporary breakpoints
249 are used for
\e^N (multiple instruction proceed), etc.
251 .BREAK 12, is used to transfer information between
252 DDT and the executing program at the latter's request.
253 .BREAK 12, is like .SUSET in that it points
254 either to a specification word or to an AOBJN
255 pointer of such words. Bit 4.9=0 means read, =1 means
256 write (from the program's point of view). Writing can
257 be illegal if the ..PERMIT variable in DDT for
258 the job is set appropriately. Bits 4.7-3.1
259 determine the type of information transferred:
260 ..RSTA 1 Starting address of program.
261 ..RLFI 2 Loaded file name.
262 Four words: device, sname, file name 1, file name 2.
263 ..RSTP 3 (read only) AOBJN pointer to program's symbol table
264 in DDT. The left half is the negative of
265 the symbol table size. See type 7 (..RSTB).
266 ..RSYM 4 Symbol definition. Uses two words.
267 Read: first word contains squoze for symbol.
268 Second word receives value.
269 If undefined, first word is zeroed.
270 Write: first word contains squoze, second value.
271 ..RJCL 5 Read: fetches command string for program.
272 Set by : command or via :JCL.
273 Always transfers at least one word of
274 packed ascii, then more until either a
275 zero word is transferred or until a
276 non-zero is about to be transferred into.
277 String is terminated by ^M if non-null.
278 Write: clear command string.
279 ..RPFI 6 File name defaults used for :PRINT.
280 Four words: device, sname, file name 1, file name 2.
281 ..RSTB 7 Symbol table. Allows transfers of many
282 symbols in either direction.
283 ..RCON 10 (read only) Number to symbol conversion.
284 Uses two words. The first should initially
285 contain a value. It receives squoze for
286 a symbol, and the next word receives a delta.
287 The value of the symbol plus the delta equals
288 the original argument. The lookup used by DDT
289 for symbolic typeout is employed here.
290 If the lookup fails, the first word receives
291 zero and the second receives what the first held.
292 ..RXUN 11 (read only) The XUNAME (a uname to be used for
293 getting mail, etc.). This is like the UNAME, but
294 has trailing digits stripped off, etc. This is
295 OBSOLETE; use the .XUNAME user variable.
296 ..RXJN 12 (read only) The XJNAME (what this job should think
297 of as its "real" name). This is like the JNAME,
298 but has trailing digits stripped off, etc. This is
299 OBSOLETE; use the .XJNAME user variable.
300 ..RLJB 13 (read only) Read index of previously current job.
301 ..RRND 14 Reads or writes the ..URANDM variable in DDT for
303 ..RPUR 15 Unpurify page.
304 ..RHSN 16 (read only) Ask to lookup an HSNAME from an XUNAME.
305 ..RMAI 17 (read only) Ask to lookup user's mail file name.
306 (Symbols with names starting with "..S" exist for all those not
307 marked as read only. For example ..RSTA==1 and ..SSTA==400001.)
309 Illegal .BREAK 12,'s cause DDT to give the program an
310 illegal operation interrupt (bit 1.6 in the .PIRQC
313 .BREAK 16, is used to return to DDT in various
314 nice ways. The effective address is decoded as follows:
315 2.9 Return from
\eX. (Do not use unless you understand it!)
316 2.8 Type extra carriage return in DDT.
317 2.7 Do not reset TTY input (effective only if
318 executing job has the TTY).
319 "Normal" returns to DDT should always have
321 2.6 Kill executing job:
322 Immediately, if it has the TTY.
323 When it gets the TTY, if current job.
324 Otherwise when
\eJ'd to in DDT.
325 Will print ":KILL" when killed.
326 2.5 Kill executing job:
327 Like 2.6 if job current.
328 Otherwise is killed silently.
329 2.6&2.5 Together mean kill executing job:
330 Like 2.6 if job current.
331 Otherwise kill immediately, and print
332 JOB <jname> FINISHED on TTY.
333 2.4 Conditional breakpoint return.
334 2.8=1 => condition true.
335 2.8=0 => condition false.
336 Used by DDT. Dangerous for users to play with.
337 2.3 Don't type even a carriage return. Don't close
338 the currently open location. If killing self
340 2.2-1.1 Illegal. (Reserved for expansion.)
342 DDT sets the %OPCMD and %OPBRK bits for
343 its inferiors appropriately. See the .OPTION
346 .CALL [ SETZ ? SIXBIT \name\ ? -- args -- ] symbolic system call
349 The .CALL uuo is used to invoke a large class of
350 operations which are distinguished by a sixbit name.
351 See the file ITS .CALLS for more information.
353 .CALL is sometimes used in a generic sense to denote
354 the set of uuo's with the same opcode as .CALL; they
355 are distinguished by their accumulator fields:
373 .CBLK ac, hack a core block
376 This uuo is ARCHAIC. Its use should be avoided
377 in new programs, since the CORBLK symbolic system call
378 is much more flexible and easy to understand.
380 The contents of accumulator <ac> specify an operation
381 on the executing job's core. It modifies the job's
382 page map entry for one page. The contents of <ac>
383 should be as follows:
385 4.3-4.1 Desired operation:
386 0 Get page from self.
388 2 Get a page from the user open on
389 the channel specified by bits 3.8-3.1.
390 3 Get a page from the user whose user
391 index is in bits 3.8-3.1.
394 6 Make my page public.
395 7 Make my page private.
396 3.9 If 1, request write permission for the page.
397 Assumed 1 for operation 4 (fresh page).
398 Otherwise valid only for self, public page,
399 or direct inferior open on channel.
400 3.8-3.1 User index or USR device channel.
401 If the executing job is a job device, then
402 377 will refer to the job which invoked it.
403 2.9 1 = insert page in core map.
404 0 = delete page. If the operation is 6 or 7,
405 this bit is ignored. Otherwise, the operation
406 is ignored for deletion.
407 2.8-2.1 Virtual page to be affected within the core map
408 of the executing job.
409 1.9-1.1 Block number within source specified by
412 Sample contents of <ac> for various operations:
413 Delete my page 43: 0,,43000
414 Create a fresh page 217: 4400,,517000
415 Make my page 45 be read-only: 0,,445045
416 Make my read-only page 45 writable: 400,,445045
417 Make page 16 of job 34 read-only
418 as my page 377: 3034,,777016
420 This uuo is all right for hacking single pages within
421 your own core map. To alter another job's core map,
422 or to hack many pages at once, use the CORBLK
423 symbolic system call.
424 For more information on core blocks, see ITS CORBLK.
426 .CLOSE chnum, close a file
428 The input/output channel <chnum> is closed. All
429 operations associated with that channel are completed.
430 For file structured devices, if another file with
431 the same name exists (if <chnum> was being used for
432 output), that file is deleted at this time and the new
434 Any further attempts to use the channel without re-opening
435 it will cause errors.
436 .CLOSE does nothing if the channel is not open.
437 If the USR device is open on the specified channel,
438 the job is not killed by .CLOSE; it is merely made
439 to be no longer open on the channel. To kill a USR
440 device job, the .UCLOSE uuo must be used.
441 If the channel number is a variable, the CLOSE
442 symbolic system call may be used.
444 .CORE <number of blocks> set core limit
447 This uuo is a relic of the old pre-paging version of ITS.
448 For applications which want to be relatively clever
449 about paging and core allocation, see the .CBLK uuo
450 and the CORBLK symbolic system call.
451 The effective address of .CORE should be a number between
452 0 and 400 octal. The core of the procedure executing it
453 is modified as follows:
456 (DO ((K (// (*SUSET *RMEMT) 2000)
457 (// (*SUSET *RMEMT) 2000)))
459 (COND ((< K N) (CREATE-PAGE K))
460 (T (DELETE-PAGE (- K 1))))))
462 That is, at each step a page is either added or deleted
463 at the top of the job's memory until page <n-1> is the
464 highest one in the job's memory. Only a .CORE to
465 acquire more core can fail. If a .CORE fails to skip,
466 some of the requested core may have been obtained,
469 .DCLOSE display close
471 This system call releases the 340 display or the
472 E&S display, if possessed by the executing job, and
473 closes all channels on which the display is open.
474 If the display is being hacked via .DSTART, this
475 won't be any channels. In the case of the 340, the
476 display is made available to the pdp-6.
477 If the executing job does not possess the
478 display, .DCLOSE does nothing but return.
480 .DCONTIN display continue
482 This system call will restart the E&S display after stopping
483 or single stepping (.DSTOP, .DSTEP). If the display is
484 stopped because of a Display MPV, a Hit Stop, WCR stop or
485 PROG Stop, the condition will NOT be cleared and the display
486 NOT restarted. If the display is not stopped or does not
487 belong to the executing job, no action is taken.
489 This system call is ignored by the 340 display.
491 .DEMON acknowledge one demon request
492 .DEMON ac, acknowledge <n> demon requests
493 ;skip if successful and more requests pending
495 As of September 1, 1976, only the DM machine has this.
497 If the executing job is not a demon, the uuo merely returns
498 without skipping. If it is a demon, then either 1 or
499 the contents of the specified non-zero <ac> are subtracted
500 from the demon's request count, and the uuo skips iff the
501 resulting count is still positive.
502 See the DEMSIG, RDDMST, and STDMST symbolic system calls.
504 .DESIGN ac, de-assign a microtape
507 The accumulator <ac> should contain the number of a
508 microtape drive. It reverses the effect of a .ASSIGN
509 uuo by making the drive unassigned again. A .DESIGN
510 will fail only if an invalid drive number is given,
511 or if the drive is assigned to some other user than
512 the one owning the job trying to do the .DESIGN.
513 It will succeed if the drive is already unassigned.
515 .DIAL ac, ANCIENT HISTORY dial a dataphone line
518 This uuo NO LONGER EXISTS.
519 It is documented here for historical purposes only.
520 Its function is obsolete.
521 Its opcode has been recycled as .NETAC.
523 The accumulator <ac> should contain a byte pointer
524 of the following form:
526 where <n> is not an index field, but the number of
527 a dialer (0 or 1), and <data> is a series of dialing
528 bytes. The byte string may not be longer than 5 words.
529 Each byte specifies a dialing step as follows:
531 1-10. Send 1-10. dialing pulses. Pauses are supplied
532 between digits automatically.
533 > 10. Pause <<byte>-10.> seconds in dialing.
534 If the accumulator is zero except for the dialer number,
535 then the "break" signal is sent after any previous
536 dialing has been completed.
537 A .DIAL will fail if the dialer number is invalid,
538 if the TTY associated with the dialer (0=T07, 1=T06)
539 is in use by another job, or if the dialer is being used
540 by some other job (the other job has not done .HANGUP yet).
541 See the .DIALW and .HANGUP uuos.
543 .DIALW dialnum, ANCIENT HISTORY wait for dialing to finish
546 This uuo NO LONGER EXISTS.
547 It is documented here for historical purposes only.
548 Its function is obsolete.
549 Its opcode has been recycled as .NETS.
551 If dialer number <dialnum> is assigned to the job
552 executing the .DIALW (i.e. the job has done a .DIAL
553 but not a .HANGUP), then .DIALW skips after waiting
554 for dialing to be completed. Otherwise it fails.
555 See the .DIAL and .HANGUP uuos.
557 .DIETIME ac, OBSOLETE time until system dies
559 This uuo is ARCHAIC and OBSOLETE.
560 It is documented here for historical purposes only.
561 Its use in new programs is to be avoided.
562 Its function has been superseded by the SSTATU
563 symbolic system call.
565 The accumulator <ac> is set to the maximum time
566 (in thirtieths of a second) before ITS will go
567 down. If the system is not planning to go down
568 (the normal case, we hope!) <ac> is set to -1.
569 See also the .REVIVE and .SHUTDN uuos.
571 .DISMISS [new PC] dismiss an interrupt
573 Dismiss an interrupt. The user variable .PICLR
574 is set to -1, thereby enabling interrupts, and the PC
575 receives the quantity <new PC>.
577 This is for the so-called "old-style" interrupt scheme.
578 See also the DISMIS symbolic system call, which
579 is ordinarily used with the "new-style" vectored
580 interrupt scheme, but may be used in either case.
582 Typically .DISMISS is used in this manner:
585 JSR TSINT ;pointer to interrupt handler
587 TSINT: 0 ;interrupt flags
588 0 ;PC as of interrupt
590 TSINT1: TLZE A,<bit1> ;check for various interrupts
591 JRST <handler1> ;handlers return to TSINT1
595 MOVE A,TSINT ;restore accumulator
596 .DISMISS TSINT+1 ;dismiss interrupt
598 See ITS INTRUP for more information on interrupts.
600 .DISOWN chnum, disown an inferior
602 An inferior job should be open on channel <chnum>.
603 The job is caused to be no longer an inferior of
604 the executing job, and is made to be the top level
605 job of a disowned job tree. The usual reason for
606 disowning a job is so that it can continue to exist
607 after its former superior has been killed (for instance,
608 after the user who disowned it has logged out).
609 Another reason for disowning a subtree is to reown it
610 under a different superior, thus altering the shape
611 of the system's job-tree structure.
612 All channels on which the executing job has open the
613 job being disowned will be closed in the process of
614 disowning (see the .CLOSE uuo). Disowning is illegal if
615 <chnum> does not have an inferior open, or if the
616 subtree being disowned controls the console (see the
617 .ATTY uuo). If the jobs of the subtree have opened
618 the console, then the channels are not closed, but
619 are marked as "disowned tty"; certain operations
620 on such a channel will succeed, and others will hang
621 until the tree is re-owned and a console tty given
622 to the job. Such channels appear to be open on
623 tty number %TINON=77 octal.
624 A disowned job is distinguished by the fact that
625 bit 4.9 of its .APRC user variable is set.
626 A disowned job never succeeds in executing the RELOAD symbolic
627 system call, even if it is the top level job in its tree.
628 When a job tree is logged out, any micro-tapes assigned
629 to the uname of that job tree are de-assigned (see the
630 .ASSIGN and .DESIGN uuo's), but only if the job tree is
632 All disowned jobs share a resource word for purposes of
633 scheduling, in the same way that all jobs in a single
634 non-disowned tree share a resource word. Thus all disowned
635 jobs tend collectively to use no more runtime than any
636 single non-disowned job tree.
637 Furthermore, individual disowned jobs are given only 1/4
638 the priority to run as a non-disowned job. This does
639 not apply, however, if the disowned job in question has
640 .MASTER mode, or controls the 340 display, the E&S display,
641 the vidisector, the arm, the LPT (line printer), or the
643 When operating under heavy loads, the swapper prefers to
644 swap out disowned jobs rather than non-disowned jobs.
646 The DETACH symbolic system call makes a non-disowned tree
649 When a non-disowned top-level job encounters
650 a fatal interrupt, the system will make it disowned and
651 print a suitable message on the system console and on
652 the job's console (if it has one). The disowned tree
653 can then be reowned with DDT and debugged.
655 .DMPCH ac, OBSOLETE mung dump check bit
657 This uuo is ARCHAIC and OBSOLETE.
658 It is documented here for historical purposes only.
659 Its use in new programs is to be avoided.
660 Its function has been superseded by the RDMPBT
661 and SDMPBT symbolic system calls.
663 The accumulator should contain a channel number
664 in the right half, which should have a disk channel
665 open on it. The left half describes any alterations
666 to be made to the dump check bit for the open file:
667 4.9 Set dump check bit.
668 4.8 Clear dump check bit.
669 The state of the dump check bit (possibly after setting)
670 is returned in accumulator <ac> in bit 1.1.
671 The dump check bit is used by the magtape file backup
672 system to keep track of which files have been backed
673 up on magtape. This bit therefore should not be
674 twiddled light-heartedly. The "!" you sometimes see
675 in front of a date in a disk file directory is present
676 iff the dump check bit for the file is zero.
678 .DSTART [start-addr] start the display
681 This system call is used to start the E&S or 340 display processor,
682 whichever one the system has. If it has neither, the uuo is
683 an illegal operation and gives a %PIILO interrupt.
684 .DSTART assigns the display to the executing job if it is available,
685 and skips if successful. If the display is not available
686 .DSTART does not skip.
688 In the case of the 340 display, the effective address of the
689 .DSTART is the address of the user's display list. This can
690 be either a single BLKO pointer (if the word is negative), or
691 the first word in a linked list (if the word is positive).
692 The right half of each word in the linked list is zero
693 to end the list, or the address of the next word in the list.
694 The left half of each word in the linked list is the address
695 (which must be less than 400000!) of a BLKO pointer. If this
696 address is zero, or the BLKO pointer is zero, it is ignored
697 (this allows "jump-type" entries in the list.)
698 The display will continually execute the commands pointed
699 to by this list. It is OK to change the list, or the single
700 BLKO pointer, while the display is running, provided everything
701 always points to valid data.
702 The .DSTRTL uuo is the same as .DSTART except that it uses
703 regular AOBJN pointers instead of BLKO pointers.
705 In the case of the E&S display, the argument to .DSTART contains
706 in the right half, the address at which the display program will
707 start, and in the left half, a code to determine modes of
708 operation: There are four 3-bit fields in this code:
710 3.1-3.3 Start mode. Only the 3.1 bit is significant. If set,
711 the display is started in single step mode.
712 3.4-3.6 Action to take on Program stop.
713 3.7-3.9 Action to take on Hit stop.
714 4.1-4.3 Action to take on Memory stop.
716 Each of the three Action fields is decoded as follows:
718 0 Restart from address of the last .DSTART.
719 1 Continue after the stop condition has been reset.
722 4 Interrupt and restart.
723 5 Interrupt and continue.
724 6 Interrupt and stop.
726 .DSTEP step the E&S display
728 The .DSTEP call will step the display processor one instruction
729 cycle if it has been stopped (.DSTOP) or started (.DSTART) in
730 step mode. If the display is not stopped, .DSTEP will first
731 simulate a .DSTOP. If the display is not the executing job's,
734 The .DSTEP call is ignored by the 340 display.
736 .DSTOP stop the display
738 The .DSTOP call will stop the E&S or 340 display processor,
739 if the display belongs to the executing job.
741 .DSTRTL start the display
743 In the case of the 340 display, this is the same as
744 .DSTART (q.v.) except that the display will use AOBJN
745 pointers instead of BLKO pointers.
747 In the case of the E&S display, this
748 crashes the system. Maybe someday this will be fixed.
752 .DTTY is used when a job decides that it wishes to
753 retain the tty. It skips if it succeeds; it fails if
754 the job was already in the state of wishing to retain
755 the tty, or if it had never had the tty. If the tty had
756 actually belonged to some (possibly indirect) inferior, it
757 will belong after the .DTTY to the job that executed it.
758 A job need not have the tty to do a .DTTY.
759 See ITS TTY for a full explanation of .DTTY.
760 See also the .ATTY uuo, and the .TTY user variable.
762 .DWORD [word] send word to E&S display
764 The specified word is sent to the E&S display via
765 the DATAO instruction. The display is stopped first
766 via .DSTOP if necessary.
768 This system call is ignored if there is no E&S display
769 or the executing job does not own it.
771 .EOFC ac, OBSOLETE end of file character
773 This uuo is ARCHAIC and OBSOLETE.
774 It is documented here for historical purposes only.
775 Its use in new programs is to be avoided.
776 Its function has been obsoleted and not replaced.
778 Accumulator <ac> receives the eof character used to
779 pad the end of the file open on the channel specified
780 by the contents of <ac> before the uuo is executed.
781 Apparently early microtape files used 141 as the pad
784 .EVAL ac, evaluate squoze symbol
787 Before the uuo is executed, accumulator <ac> should
788 contain the squoze code for a symbol. This symbol
789 is looked up in the symbol table used by exec DDT
790 (the one used to debug ITS); this table contains
791 symbols defined within ITS. The uuo fails to
792 skip if the symbol is not found; otherwise the value
793 is placed in <ac> and the uuo skips.
795 This uuo offers a useful method of obtaining
796 information from ITS, when combined with the .GETLOC
797 uuo or with absolute memory pages; for example,
798 to find out how many irrecoverable disk errors there
799 have been, PEEK .EVAL's the symbol QIRRCV and examines
800 that location in the system. Naturally, this is more
801 risky than using a system call, since the system's
802 symbols may be changed. One protection against that
803 is to make an entry in the file AI:SYSTEM;EVSYMS >
804 mentioning which symbol is being .EVAL'ed by which
805 program. Then, there will probably be warning from
806 ITS hackers of any change.
808 .FDELE fblock OBSOLETE delete or rename file
811 This uuo is ARCHAIC and OBSOLETE.
812 It is documented here for historical purposes only.
813 Its use in new programs is to be avoided.
814 Its function has been superseded by the DELETE,
815 RENAME, and RENMWO symbolic system calls.
817 This uuo may be used to delete and rename files.
818 It points to a five-word block describing the
819 operation to be performed. There are three cases.
823 fblock: SIXBIT \ dev\ ;right-justified device name
824 SIXBIT \fname1\ ;file name 1
825 SIXBIT \fname2\ ;file name 2
829 [2] Rename a file open for writing on channel <chnum>.
831 fblock: --- ;not examined
833 <chnum> ;channel number
834 SIXBIT \fname1\ ;new file name 1
835 SIXBIT \fname2\ ;new file name 2
837 [3] Rename an arbitrary file.
839 fblock: SIXBIT \ dev\ ;right-justified device name
840 SIXBIT \fname1\ ;old file name 1
841 SIXBIT \fname2\ ;old file name 2
842 SIXBIT \fname1\ ;new file name 1
843 SIXBIT \fname2\ ;new file name 2
845 In cases [1] and [3], if the device specified has
846 true directory structure, the .SNAME user variable
847 for the executing job is used as the directory name.
848 Also, the file names (for case [1]) or the old file
849 names (for case [3]) are subject to input translation
850 (see the TRANAD symbolic system call).
851 If the device is not file structured, .FDELE
852 succeeds and skips. If .FDELE fails, it returns
853 an error code on channel 0 which can be retrieved via
854 the .STATUS uuo or the ERR device.
856 .FEED chnum, feed paper tape
859 If device PTP (the paper tape punch) is open on
860 channel <chnum>, the uuo punches one line of blank
861 tape and skips. Otherwise it fails and does not skip.
863 .GENNUM ac, generate number
865 Accumulator <ac> receives a unique generated number
866 which will not be generated again for a very long
867 time (unless the system crashes, in which case the
868 counter is reset, of course).
869 [ In ITS 1554 and later. ]
871 .GENSYM ac, generate symbol
873 Accumulator <ac> receives the sixbit name of a
874 unique generated symbol which will not be generated
875 again for a very long time (unless the system
876 crashes, in which case the counter is reset, of
879 .GETLOC ac, get absolute location
881 The accumulator <ac> should contain
882 an absolute address in the left half and an address
883 within the executing job in the right half.
884 The contents of the absolute location specified is
885 deposited in the location specified within the job.
886 This is useful for examining locations within the
887 system. However, if many locations are to be
888 examined, or if a location is to be examined many
889 times, it is far more efficient to map the absolute
890 page(s) containing the location(s) of interest into
891 the job's core map as read-only memory; the job
892 can then examine the locations at top speed without
893 having to go through the system uuo handler.
894 Such page mappings can be established via the .CBLK
895 uuo or the CORBLK symbolic system call.
897 .GETSYS ac, get system data
900 Accumulator <ac> should contain an AOBJN pointer to a data area in
901 the user's core. (A zero left half means the data area extends to
902 the end of core.) Accumulator <ac+1> should contain the sixbit
903 name of a system data area. The specified system data area is
904 transferred into the user's core in such a way that the data is
905 consistent (i.e. interrupts are inhibited in appropriate ways,
906 etc.). If the .GETSYS is successful, <ac> is updated to point to
907 the unused part of the user's data area.
909 If the named data area does not exits, <ac+1> is cleared. If the
910 area in the user's core is too small, the left half of <ac> is
911 replaced with the negative of the correct size. In both of these
912 cases .GETSYS fails to skip.
914 Valid data areas are:
915 MEMORY Memory tables.
916 UTAPE Micro-tape variables.
917 NCPSM Network control program socket map.
918 NCPPQ Network control program pending RFC queue.
919 NCPHT Network control program host table.
920 USERS User variables for all jobs.
921 USER User variables for job whose user index is in <ac+2>.
922 Formerly a uname-jname pair was accepted in <ac+2>
923 and <ac+3>, but this is no longer true (ANCIENT HISTORY).
924 GETS Valid sixbit .GETSYS area names.
925 DEVS Valid sixbit built-in device names. (Doesn't include those on
927 CALLS Official system symbol table. Squoze symbols and values for
928 UUO's, .USET variables, and bits DEFSYM'ed in SYSTEM;BITS.
929 IMPX Input multiplexor data area.
930 CLINK Core link device variables.
931 DSYMS Exec DDT symbol table. Squoze symbols and values.
932 USYMS Squoze symbols and values for .USET variables only.
933 (Does -not- contain .RMEMT or .SMEMT, but rather .MEMT.
934 Used by DDT when you type ".MEMT/".)
935 CHDEVS Device names, from .RCHST table.
936 NCALLS Valid sixbit names for symbolic system calls.
937 USRVAR Valid sixbit user variable names for USRVAR system call.
938 TTYVAR Valid sixbit tty variable names for TTYVAR system call.
939 ITSNMS Valid sixbit names of all local ITS machines.
941 Names which used to be valid but are no longer (ANCIENT HISTORY):
942 TRANS Translation tables.
943 OMPX Output multiplexor data area.
945 PEEK used to use this uuo to get system information.
946 Nowadays it merely maps systems pages into its core
947 image, thereby gaining efficiency at some small cost
950 .GSNAME ac, ANCIENT HISTORY get system name
952 This uuo NO LONGER EXISTS.
953 It is documented here for historical purposes only.
954 Its function has been superseded by .SUSET of .RSNAM.
955 Its opcode has been recycled as .REALT.
957 Put the executing job's .SNAM user variable
958 into accumulator <ac>; this is the default directory
959 name ("system name") for the job.
961 .GUN ac, gun down a job tree
964 Accumulator <ac> should contain the user index of the
965 top level job of a job tree. That job tree is expunged
966 from the system. All the jobs are closed and killed.
967 This is to be used as a last resort to flush hung
968 and worthless jobs. The system program LOCK
969 contains a command which performs this operation.
970 The system job will print a message on the system console
971 describing what job was gunned and who gunned it.
973 .HANG hang until condition satisfied
975 The .HANG uuo is to make it easy for programs to wait for various
976 conditions. It should be used the way a JRST .-1 would be used in
977 a stand-alone program. Explicitly, it should be preceded by an
978 instruction that will skip or jump if the awaited condition is
979 true. Because the system must understand that instruction, only
980 certain instructions are allowed to be used (any others cause
981 illegal operation interrupts (%PIILO, bit 1.6 of the .PIRQC user
982 variable)). They are: SKIP, JUMP, AOS, SOS, AOJ, SOJ, CAI, and CAM
983 class instructions, -all- test instructions, CONSO and CONSZ (which
984 work only if the job is in .IOTLSR mode, and the processor is not a
985 KS10), SKIP and JFCL, which are used to hang forever (really, until
986 some interrupt routine jumps away instead of returning), SKIPA and
987 CAIA, which are used to cause rescheduling but don't actually hang,
988 and JFFO. XCT is also allowed, but the ultimate end of the chain
989 of XCT's must be one of the instructions listed above.
991 In the case of hanging forever, the job is specified to be
992 desirable to swap out, since it may hang for a long time.
994 .HANG conditional instructions which reference only ACs are treated
995 as hang-forever, except that they don't set the desire-to-swap-out
996 flag, since the contents of the AC can't change without the job
997 being interrupted out of the .HANG.
999 When a job executes a .HANG, the system effectively executes the
1000 preceding instruction at each schedule to decide whether the job
1001 may be run (cf. the .FLS user variable). If the job is
1002 interrupted, the interrupt routine will find that the saved PC
1003 points to the instruction before the .HANG instruction. It may
1004 dismiss normally, in which case the .HANG will be executed again
1005 unless the condition has become true (of course, the interrupt
1006 routine may do something to make the condition true).
1008 .HANG takes care to be certain that any side effects of the
1009 instruction will be performed when the condition finally becomes
1010 true. .HANG does this by always exiting by jumping to .-1. Thus
1011 an AOSE instruction followed by a .HANG really will increment the
1012 referenced location after it becomes -1, JFFO AC, followed by .HANG
1013 really will store a bit number into AC+1, and TLZN followed by
1014 .HANG really will clear out the bit after it comes on.
1016 While a job is waiting in a .HANG, the system does not re-examine
1017 the AC used by the conditional instruction each time it executes
1018 that instruction; it uses what was in the AC when the .HANG was
1019 entered. However, there is no way for this AC to change without
1020 the job being interrupted of the .HANG so it can change it, or
1021 PCLSRed out when it's superior changes it. Also, the effective
1022 address calculation is not repeated, and if the actual instruction
1023 supplied is an XCT, the XCT'd instruction is not re-fetched.
1024 Therefore, it does not work to expect the condition to become true
1025 because the contents of a memory location indirected through or
1026 XCTed will change. Because an interrupt always causes the .HANG to
1027 be redone, it does work to expect the interrupt routine to change
1028 the AC or the indirect pointer in order to make the instruction
1031 In the special case of waiting for a specific interval of time to
1032 pass, the .SLEEP uuo (q.v.) may be useful. In the special case of
1033 waiting for a network socket to change state, the NETBLK symbolic
1034 system call may be useful.
1036 .HANG ac, .HANG with timeout
1038 [In ITS version 1622 and later]
1040 .HANG with a non-zero AC field acts as the disjuction of .HANG and
1041 .SLEEP, allowing a program to wait either for a condition to become
1042 true or for some time to pass. The contents of accumulator <ac>
1043 specify when the .HANG should stop waiting for the condition to
1044 become true by returning to the instruction following the .HANG.
1045 If non-negative, it is a length of time to wait in thirtieths of a
1046 second. If negative, it means to wait until the system TIME
1047 variable exceeds its absolute value.
1049 As with .SLEEP, if the job is interrupted while .HANGing, the
1050 accumulator will be found to contain the appropriate negative
1051 number to allow the .HANG to be resumed properly when the interrupt
1054 If .HANG times out before the awaited condition becomes true, the
1055 accumulator will contain 0. This is the only case in which .HANG
1056 will exit to the following instruction.
1058 If the awaited condition becomes true, so that the previous
1059 instruction skips or jumps away, the accumulator will contain the
1060 negative of the time at which the .HANG would have timed out.
1063 .HANGUP dialnum, ANCIENT HISTORY hang up a dialed line
1066 This uuo NO LONGER EXISTS.
1067 It is documented here for historical purposes only.
1068 Its function is obsolete.
1069 Its opcode has been recycled as .REVIVE.
1071 This uuo was used to hang up on a line which had
1072 been dialed by the .DIAL uuo.
1074 .IFSET ac, if location contains what I think, set it
1077 The accumulator <ac> should contain an absolute 18.-bit
1078 address in the right half and a pointer to a two-word block
1079 in the left half. The first word of the two-word block
1080 contains a test word, and the second a new value.
1082 If the absolute core location specified contains exactly
1083 the quantity specified by the test word, then the contents
1084 of that location are replaced by the new value specified,
1085 and the .IFSET skips. If the contents of the location
1086 are not the same as the test word, the .IFSET fails.
1088 This is similar to the .SETLOC uuo, but provides a
1089 measure of safety if the contents of the location
1090 may be volatile. Like the .SETLOC uuo, if the .IFSET
1091 succeeds the system job prints out a message on the
1092 system console detailing the old and new contents
1093 of the location and who modified it.
1095 .IOPDL reset I/O pdl
1097 The I/O channel pdl of the executing job is reset.
1098 Entries on the I/O pdl contain the channel number
1099 from which they were pushed; .IOPDL is equivalent
1100 to just enough .IOPOP's (possibly none) to clear
1101 the I/O pdl, popping each entry into the channel
1103 See the .IOPUSH and .IOPOP uuos, and the .IOC, .IOS,
1104 .IOP user variables.
1106 .IOPOP chnum, pop I/O channel
1108 This uuo is the inverse of the .IOPUSH uuo.
1109 The top entry of the I/O pdl is popped into
1110 channel <chnum>, which may be a different channel
1111 from the one the entry was pushed from.
1112 A .CLOSE is first performed on the channel popped into.
1113 If the channel originally pushed was a closed channel,
1114 then after popping channel <chnum> will be closed.
1115 If the I/O pdl has no entries on it, IOC error
1116 number 5 is signaled on channel <chnum>, giving the
1117 job a class 2 interrupt (%PIIOC, bit 1.9 of the .PIRQC
1120 If the channel number is variable, the IOPOP symbolic
1123 See the .IOPUSH and .IOPDL uuos, and the .IOC, .IOS,
1124 and .IOP user variables.
1125 See also the .UCLOSE uuo for a discussion of what
1126 occurs when a job open on a pushed channel is killed.
1128 .IOPUSH chnum, push I/O channel
1130 The channel <chnum> is pushed onto the I/O pdl
1131 for the executing job. A channel may be pushed
1132 whether or not it is actually open; if it is open,
1133 transactions on the channel are suspended when
1134 it is pushed, and any transfer on that channel is
1135 inaccessible until the pushed entry is popped
1136 again. The error status and access pointer are
1137 correctly saved as well. The channel number <chnum>
1138 is also saved in the pdl entry for use by the .IOPDL uuo.
1139 After the channel has been pushed it is returned to
1140 a non-open state (this is not the same as being closed
1141 since closing implies terminating the I/O transaction).
1142 The I/O pdl for each job has room for eight entries;
1143 if all are in use .IOPUSH will signal IOC error
1144 number 6 on channel <chnum>, giving the job a
1145 class 2 interrupt (%PIIOC, bit 1.9 of the .PIRQC user variable).
1147 If the channel number is variable, the IOPUSH
1148 symbolic call may be used.
1150 See the .IOPOP and .IOPDL uuos, and the .IOC, .IOS,
1151 and .IOP user variables.
1152 See also the .UCLOSE uuo for a discussion of what
1153 occurs when a job open on a pushed channel is killed.
1155 .IOT chan,[foo] input/output transfer
1157 Input or output is performed, according to the device
1158 open on the specified channel and the mode in which it
1159 was opened. If an error occurs, any of several IOC
1160 errors may occur, giving the job a class 2 interrupt
1161 (%PIIOC, bit 1.9 of the .PIRQC user variable.)
1163 In "unit mode", foo is the datum to be transferred
1164 in or out. (In the case of input, the word pointed
1165 to by the effective address of the .IOT is modified.)
1167 In "block mode", foo is an AOBJN pointer to the data
1168 to be transferred in or out. The left half is the
1169 negative of the number of words, the right half is
1170 the address of the first word. The pointer is updated
1171 as the transfer proceeds. When the .IOT returns the
1172 pointer will have been fully counted out, that is
1173 the left half will be zero, except in the case of input
1174 that stops because the end of the file was reached.
1176 In the case of block mode on an intrinsically character
1177 device, such as TTY, bits 4.9-4.7 of the pointer are
1178 fiddled to indicate which byte in the word is being
1181 The VID, NVD, and IMX devices handle .IOT in a non-standard
1182 way because they do both input and output at the same time.
1184 The symbolic system calls IOT and SIOT are versions of
1185 .IOT which have additional features.
1187 .IOTLSR ac, iot loser mode
1189 This uuo is used to request permission from
1190 the system to run in user I/O mode (bit 4.3 of the PC).
1191 In this mode a program is in user mode (and thus is
1192 subject to user mode page mapping), but may perform
1193 I/O instructions without trapping to the system.
1194 This facility must naturally be used with discretion.
1195 It should be noted that ITS will interpretively
1196 simulate most I/O instructions anyway, if it thinks
1197 that the operation will not harm the time-sharing
1198 system. For example, one may use DATAI to read the
1199 console switches even when not in .IOTLSR mode.
1200 This simulation is slower than direct execution
1201 of I/O instructions, but much safer.
1203 If bit 4.9 (the sign bit) of accumulator <ac> is zero,
1204 .IOTLSR mode is relinquished, even if it was not formerly
1205 possessed by the job.
1206 If bit 4.9 is one, then the executing job is granted .IOTLSR
1207 mode, and the system job prints a message on the system
1208 console to document the fact.
1210 .IPDP chnum, interrupt PDP-6
1212 Channel <chnum> should have the PDP-6 open as an
1213 inferior procedure; if it does not, .IPDP does nothing.
1214 Otherwise the PDP-6 receives an interrupt.
1216 The PDP-6 can also interrupt the PDP-10; when this occurs
1217 a job with the PDP-6 open as an inferior will receive
1218 an interrupt if enabled for it. See the .IFPIR
1219 user variable for PDP-6 channel interrupts.
1221 The interface between the PDP-6 and the PDP-10
1223 The interrupts are given via a CONO:
1224 1.5 Interrupt other processor.
1225 1.4 Clear interrupt flag.
1226 1.3-1.1 Priority interrupt assignment.
1227 The bits read by CONI are as follows:
1229 1.3-1.1 Clear interrupt flag.
1231 .ITYI ac, OBSOLETE input tty interrupt
1234 This uuo is ARCHAIC and OBSOLETE.
1235 It is documented here for historical purposes only.
1236 Its use in new programs is to be avoided.
1237 Its function has been superseded by the .ITYIC uuo.
1239 This uuo is exactly like .ITYIC except that it applies
1240 only to the job's console, if any. This uuo is to be
1243 .ITYIC ac, input tty interrupt on channel
1246 The specified accumulator <ac> should contain the
1247 number of a channel which is open for tty input.
1248 If an interrupt character is pending in that tty's
1249 input buffer, that character replaces the channel number
1250 in <ac> and the .ITYIC skips. It will fail if the
1251 channel is bad, if it does not have a tty open, if the
1252 tty is the job's console but the job does not possess it,
1253 or if there is no interrupt character pending.
1254 If the job does not possess its console and the job's
1255 %TBINT bit is set in the .TTY user variable, the job
1256 receives a class 2 word 1 interrupt (bit 4.2 in the
1257 .PIRQC user variable).
1259 This uuo is typically used in an interrupt routine
1260 invoked by bit 1.1 (%PITYI) in the .PIRQC user variable or by
1261 a word 2 I/O interrupt on a tty input channel.
1262 If the .ITYIC does not skip the program should ignore
1263 the interrupt entirely; this can happen due to certain
1264 timing screws related to passing the console around
1267 See the TTYGET and TTYSET symbolic system calls, which
1268 manipulate bits relevant to interrupt characters.
1269 See the WHYINT system call, which (in the case of
1270 TTY channels) is another way to do the same function
1272 See the .PIRQC and .TTY user variables.
1273 See ITS TTY for a complete explanation of .ITYIC.
1275 .LISTEN ac, listen to tty
1277 If the job possesses its console, .LISTEN waits
1278 for any output to be completed, and then returns the
1279 number of input characters pending in the input
1280 buffer. If the job does not possess a console, zero is
1282 See also the LISTEN symbolic system call.
1284 .LOGIN ac, ANCIENT HISTORY log in
1287 This uuo NO LONGER EXISTS.
1288 It is documented here for historical purposes only.
1289 Its function has been superseded by the LOGIN symbolic system call.
1290 Its opcode has been recycled as .DEMON.
1292 Accumulator <ac> contains the sixbit name to log in as.
1293 Attempting to log in with a uname equal to 0 or -1 fails,
1294 as does attempting to log in when already logged in.
1298 The executing job and all direct inferiors are killed,
1299 providing that it is the top-level job of its job tree.
1300 All resources used by such jobs are freed. If the job
1301 tree was console-controlled, the system job will print
1302 a "console free" message on the freed console.
1304 If the executing job is not top-level, .LOGOUT with zero
1305 in the AC field merely returns without skipping.
1306 (An inferior job may not commit suicide without the consent
1307 of its superior.) .LOGOUT with a nonzero AC field will
1308 cause a fatal %PIBRK interrupt which will inform the superior
1309 that the job wants to be killed. If the superior is DDT,
1310 it will kill the job. Here is how a program should exit:
1312 SKIPE DEBUG ;optional debugging aid:
1313 .VALUE ; job hangs if being debugged
1314 .LOGOUT 1, ;log out or be killed.
1316 .LOSE lossage-code report lossage
1318 The job's Program Counter is set to the address of the
1319 .LOSE minus one, the job's .VAL user variable is set
1320 to the new PC,,the magic bits, and the
1321 job is given a %PILOS interrupt. If the job does not
1322 enable this interrupt, and it's superior is DDT, a
1323 helpful error message will be printed.
1325 The magic bits are documented in DDT ORDER.
1326 The most useful ones are 0 for a random error,
1327 1000 to ask DDT to type the error message corresponding
1328 to the most recent system call error return, and
1329 1400 if DDT should attempt to print the names of
1330 the file that the call was opening/referring to.
1332 The lossage codes are defined by DDT's interpretation of them.
1333 The defined values are:
1335 %LSSYS==1000 The last error code returned by a failing
1336 system call describes the problem.
1338 %LSFIL==1400 The last error code returned by a failing
1339 system call, together with the name of the file
1340 it was operating on, describe the problem.
1341 That system call should be right before the .LOSE.
1342 DDT will decode it to determine the filenames
1343 (if it is an OPEN) or the channel number and then
1344 the filenames via an RFNAME.
1346 %LSSYS+errcode Means that the system call error code
1347 <errcode> describes the problem.
1349 %LSFIL+errcode Means that the error code <errcode>
1350 together with the filenames being used
1351 describe the problem.
1353 1+.LZ <interrupt bit>
1354 Means that the error should be handled as if it
1355 were a fatal interrupt on the specified interrupt
1356 bit. For example, the lossage code 1+.LZ %PIMPV
1357 will to cause DDT to print out an MPV error message.
1358 These lossage codes are more useful with the
1359 LOSE and DISMIS symbolic system calls.
1361 0 Signifies some other nondescript error condition.
1363 The usual way of using this uuo is to put it
1364 after a system call which is expected always to
1365 skip. If it fails to skip, DDT will print an error
1366 message based on what the system call is and what
1367 it was failing to do (if you said 1000 or 1400).
1368 Proceeding the job will retry the call.
1370 See also the LOSE symbolic system call.
1372 This call never gets an error, and never returns.
1374 .LTPEN block hack light pen
1376 This uuo hacks the light pen on the 340 display.
1377 The address <block> should be the start of a six-word
1378 block. The first word controls the mode:
1379 4.9 0 => ignore other bits, 1 => examine them.
1380 3.1 1 => hang until light pen seen at least once.
1381 1.1 Used to set the multiple sighting mode (1 = on).
1382 The six words of data returned are as follows:
1383 wd 0 The word read by DATAI from the 340 display at
1384 the last light pen interrupt.
1385 wd 1 Number of times the light pen interrupted
1386 since the last .LTPEN uuo.
1387 wd 2 Sum of all Y coordinates since the last .LTPEN uuo.
1388 wd 3 Sum of all X coordinates since the last .LTPEN uuo.
1389 wd 4 The current linked display list pointer.
1390 wd 5 The current BLKO display pointer.
1391 If the job does not currently possess the 340 display,
1392 words 0 and 1 are set to zero.
1394 If the system has no 340, .LTPEN is ignored.
1396 .MASTER ac, request/release master mode
1399 Accumulator <ac> should have bit 4.9=1 to request
1400 master mode, or =0 to release it. Releasing master
1401 mode always succeeds, even if the job did not have it.
1402 Requesting master mode succeeds if the job already has
1403 master mode, or if it has control of its tty (as determined
1404 by bit 4.9 (%TBNOT) of the .TTY user variable).
1405 Only one job at a time may have master mode; thus requesting
1406 master mode may imply taking it from some other job.
1408 A job in master mode gets double priority for run time;
1409 that is, it tends to get twice as much run time as any other
1410 job competing for run time. Furthermore, it has priority
1411 in grabbing the 340 display from another user. (The precise
1412 algorithm for grabbing the 340 is actually a function of
1413 who has master mode and of the %TT340 and %TT3HP bits of
1414 the TTYTYP variables of the jobs involved.)
1416 Master mode should be used only when absolutely necessary.
1417 Needless use of it is considered to be antisocial, and may
1418 be grounds for harassment.
1420 .MTAPE ac, hack magtape
1423 Accumulator <ac> should have a channel number in the
1424 left half and an address in the right half.
1425 (An illegal channel number causes an illegal operation
1426 interrupt (%PIILO, bit 1.6 of the .PIRQC user variable).)
1427 The channel should have device MTn open on it.
1428 The address should point to a word with a signed count <n>
1429 in the left half and a function code in the right half.
1430 Valid function codes are:
1431 0 Hang until tape motion done.
1433 2 Rewind and dismount.
1434 3 Write end-of-record (i.e. force current output buffer).
1435 4 Write three inches of blank tape.
1436 5 Write end-of-file.
1437 6 Space over <n> records (negative => backwards).
1438 Illegal for output channel.
1439 7 Space over <n> files (negative => backwards).
1440 Illegal for output channel.
1441 10 Space to end-of-tape.
1442 11 Stop all commands on this channel.
1443 12 Set block size for writing to <n> words.
1444 13 Return block size in <ac>. For reading, this is the size
1445 of the record most recently swallowed by an IOT.
1446 This operation may trigger one of the following IOC errors,
1447 causing an interrupt (%PIIOC, bit 1.9 of the .PIRQC user variable):
1448 1 ILLEGAL HARDWARE OPERATION ATTEMPTED
1449 3 NON-RECOVERABLE DATA ERROR
1452 .NDIS ac, display <n> times
1455 This uuo is intended for use in taking pictures of
1456 the 340 display screen. It sets a display control
1457 variable from the contents of accumulator <ac>.
1458 This variable has no effect if negative, but if
1459 zero it inhibits display completely, and if positive
1460 is decremented by 1 each time the current display
1461 block or list of blocks is displayed. This call
1462 fails to skip if the job does not possess the 340 display.
1464 On systems which don't have a 340, .NDIS is ignored.
1466 .NETAC chnum, OBSOLETE accept network connection
1469 This UUO is obsolete.
1470 It is documented here for historical purposes only.
1471 It now ALWAYS fails to skip.
1473 Channel <chnum> should be be a network channel in
1474 the "RFC received while listening" (%NSRFC) state (see
1476 This is used to accept a connection on a socket opened
1477 with mode bit 1.5=1 (see the OPEN symbolic system call).
1478 An RFC is sent back and the channel put into the
1479 "connection open" state.
1481 To reject a connection, the channel should be closed with
1482 either the .CLOSE uuo or the CLOSE symbolic system call.
1484 .NETINT chnum, OBSOLETE network interrupt
1486 This UUO is obsolete.
1487 It is documented here for historical purposes only.
1488 It is now always a no-op.
1490 Sends an interrupt out on the network socket associated
1491 with channel number <chnum>, which should be open on
1492 the NET device. If the local socket number is even
1493 (receiving), an INR message is sent; otherwise, INS
1496 .NETS chnum, network send
1498 Channel number <chnum> should be open for network
1499 output. The .NETS uuo forces the current output buffer
1500 to be sent. If the channel is open in the wrong direction,
1501 IOC error 1 (ILLEGAL HARDWARE OPERATION ATTEMPTED) will occur,
1502 possibly giving the user an IOC interrupt (%PIIOC, bit 1.9 of
1503 the .PIRQC user variable).
1505 .OPEN chnum,block open a file
1508 This uuo is semi-obsolete. The OPEN symbolic system
1509 call is somewhat more flexible and consistent.
1510 However, it is still reasonable to use .OPEN for
1511 devices which do not use directory names.
1513 A file is opened on the channel specified by <chnum>.
1514 That channel number is then used to specify the file
1515 on all further I/O transactions on that file.
1516 The address <block> should be the first of several
1518 wd 0 <mode bits>,,<device name>
1519 wd 1 File name 1, if applicable.
1520 wd 2 File name 2, if applicable.
1521 wd 3 For the NET device, the foreign host number.
1522 The directory name, if applicable, is taken from the
1523 .SNAME user variable. Note that the device name may
1524 be only three characters. The mode bits are as for
1525 the OPEN symbolic system call.
1527 If bits 4.9-4.7 of word 0 contain 2, then a link is
1528 created. Words 1-5 are then as follows:
1529 wd 1 From file name 1.
1530 wd 2 From file name 2.
1531 wd 3 To file name 1.
1532 wd 4 To file name 2.
1534 .OPEN should never be used in this way in new programs;
1535 use the MLINK symbolic system call instead.
1537 If the .OPEN fails to skip, an error code as for
1538 .CALL OPEN will be returned on channel <chnum>.
1540 .OPER random operation
1542 The term .OPER is used to refer to a class of uuo's
1543 which all have the same op-code and are decoded by
1544 the value of their effective address. Those .OPER's
1545 which take arguments generally specify either an
1546 accumulator or an I/O channel number in the accumulator
1548 If the effective address is not a valid .OPER number,
1549 then the job executing the .OPER receives an illegal
1550 operation interrupt (%PIILO, bit 1.6 of the .PIRQC user
1552 A list of currently valid .OPER's is given below in
1632 Returns in accumulator <ac> the time since the beginning of the
1633 year, measured in sixtieths of a second. If the time is not known,
1634 -1 is returned. PD = Paul DeCoriolis, who hacked the original
1635 clock on which this was based. Said clock ceased to work many
1640 .RBTC ac, robot console switches
1642 The contents of accumulator <ac> are sent to the
1643 robot console (device 514) with a DATAO. After a short
1644 delay the result of a DATAI are returned in <ac>.
1646 What the heck is device 514???
1648 .RCHST ac, OBSOLETE read channel status
1650 This uuo is ARCHAIC and OBSOLETE.
1651 It is documented here for historical purposes only.
1652 Its use in new programs is to be avoided.
1653 Its function has been superseded by the RCHST
1654 and RFNAME symbolic system calls.
1656 Accumulator <ac> should contain a channel number
1657 in the left half and an address in the right half
1658 pointing to a block of several words.
1659 The executing job receives an illegal operation
1660 interrupt (%PIILO, bit 1.6 of the .PIRQC user variable)
1661 if the channel number is illegal.
1663 The block of words is filled with information
1664 about the status of the channel. The general
1665 pattern of this information is as follows, though
1666 not all devices adhere to it strictly:
1667 wd 0 Device name in the right half.
1668 wd 1 First file name, if applicable.
1669 wd 2 Second file name, if applicable.
1670 wd 3 Sname (directory name), if applicable.
1671 wd 4 Access pointer. Measured in words.
1672 A byte pointer if in character mode, for some devices.
1673 -1 if not randomly accessible.
1674 wds 5-n Other data. May be garbage, or not stored,
1675 depending on the device as specified by word 0.
1677 See the RCHST symbolic system call for details
1678 of what information is returned for specific devices.
1679 Wd 0 from .RCHST has in its RH the LH of symbolic
1680 RCHST's 1st value. Wds 1-4 from .RCHST are the same as
1681 the 2nd-5th values returned by symbolic RCHST.
1682 Wds 5 and up from .RCHST are the same as values 7 and up
1683 of symbolic RCHST, except that they are not stored for
1684 devices which do not return significant information in
1685 them. Note that value 6 of the RCHST symbolic system
1686 call is not available from .RCHST.
1688 .RD500 ac, ANCIENT HISTORY read device 500
1690 This uuo NO LONGER EXISTS.
1691 It is documented here for historical purposes only.
1692 Its function is obsolete.
1693 Its opcode has been recycled as .IPDP.
1695 Device 500 formerly purported to be some kind of clock.
1697 .RD710 ac, ANCIENT HISTORY read device 710
1699 This uuo NO LONGER EXISTS.
1700 It is documented here for historical purposes only.
1701 Its function is obsolete.
1702 Its opcode has been recycled as .HANG.
1704 Device 710 used to be a kind of clock on the PDP-6.
1705 This uuo read a 24.-bit quantity from this clock,
1706 measured in 4-microsecond ticks.
1708 .RD760 ANCIENT HISTORY
1710 This uuo NO LONGER EXISTS.
1711 It is documented here for historical purposes only.
1712 Its function is obsolete.
1713 Its opcode has been recycled as .DWORD.
1715 Device 760 of the PDP-6 used to be used for temporary
1716 direct sense hookups. (For example, the low six
1717 bits controlled lights on the hand of the AMF arm.)
1718 This uuo returned the result of a DATAI on this device.
1720 .RDATE ac, read date
1722 The current date is returned in accumulator <ac> as a
1723 word of sixbit characters "YYMMDD", where YY is the
1724 year (modulo 100.), MM is the month, and DD is the day,
1725 all as two-digit decimal numbers.
1726 If the system does not know what the current date is,
1729 .RDATIM ac, read date and time
1731 This is exactly like the sequence
1734 except that the timing error involved with crossing
1735 midnight between execution of the two uuo's is avoided.
1736 Thus accumulator <ac> receives the time of day as a word
1737 of sixbit "HHMMSS", where HH is the hour (in 24.-hour
1738 notation), MM is the minute, and SS is the second,
1739 all as two-digit decimal numbers.
1740 Accumulator <ac+1> receives the date as a word of sixbit
1741 characters "YYMMDD" where YY is the year (modulo
1742 100.), MM is the month, and DD is the day,
1743 all as two-digit decimal numbers.
1744 If one of the quantities is not known by the system,
1745 -1 is returned for that quantity.
1747 .RDSW ac, OBSOLETE read switches
1749 This uuo is ARCHAIC and OBSOLETE.
1750 It is documented here for historical purposes only.
1751 Its use in new programs is to be avoided.
1752 Its function has been superseded by DATAI.
1754 The contents of the data switches on the PDP-10 console
1755 are returned in accumulator <ac>.
1756 The same effect can be achieved by using DATAI 0,<ac>
1757 (or any arbitrary location instead of <ac>), which, if
1758 the job is not in .IOTLSR mode, ITS will interpret
1759 specially and simulate.
1760 Neither .RDSW nor DATAI works correctly on KL10s.
1761 Hopefully this will not inconvenience anyone.
1762 On KS10s .RDSW no longer exists.
1764 .RDTIME ac, read system time
1766 The time since the system started running, measured in
1767 thirtieths of a second, is returned in accumulator <ac>.
1768 Thus the difference between two successive values gives
1769 the amount of real time which passed between the two
1770 executions of .RDTIME. This time does not include time
1771 during which the system was temporarily down, for instance
1772 stopped at a bug halt from which it was later continued
1775 .REALT ac, real time hackery
1776 ;maybe skip on success (see below)
1778 This uuo controls a fairly complex facility allowing
1779 a job to get good service in real time. The contents
1780 of the specified accumulator are decoded as follows:
1781 %RLFLS 4.9 Turn off old clock rate, zero the tick count,
1782 and release the real time facility.
1783 %RLSET 4.8 Turn on new clock rate.
1784 %RLUSR 4.7 Attempt to seize the real time facility.
1785 %RLNPS 4.6 Do not settle for pseudo-real time status.
1786 %RLPSD 4.5 Insist on pseudo-real time status.
1787 %RLBLK 4.4 Block me except during high priority period.
1788 %RLGET 4.3 Read into words 2-3 (see below) before
1789 interpreting the other bits.
1790 4.2-3.1 Reserved. Should be zero.
1791 2.9-1.1 Pointer to four word block:
1792 wd0 Frame time in sixtieths of a second.
1793 Must fit in the right half.
1794 wd1 Priority time in sixtieths of a second.
1795 Must be less than 15 octal, and less
1796 than or equal to half the contents
1798 wd2 If bit 4.3 on, set the right half to
1799 the frame time, and the left half to
1800 the tick count since last examined.
1801 wd3 If bit 4.3 on, set the right half to
1802 the high priority time, and the left
1803 half to 0 if currently at low priority
1804 or -1 if currently at high priority.
1806 The real time facility is interpreted as follows:
1807 real time is broken up into cycles, each the number
1808 of sixtieths of a second in length specified by the frame
1809 time. At the beginning of each frame, the %PIRLT
1810 bit (4.8) in the job's .PIRQC user variable is turned
1811 on. This causes an interrupt if the corresponding
1812 bit is on in the .MASK user variable.
1813 Within each frame, the first <n> sixtieths are
1814 high priority time for the job with the real time
1815 facility, where <n> is the specified high priority time.
1816 If a job has the facility, presently has high priority,
1817 and otherwise wants to run, then it is scheduled above
1818 all other jobs. This guarantees that a job will
1819 get a certain amount of run time at specified intervals;
1820 this is useful for responding to real-time conditions.
1821 The system will not schedule the job during its low-priority
1822 phase if it has requested that it be blocked (bit 4.4),
1823 unless it gets an interrupt and is not using the new-style
1825 The .REALT uuo will skip only if the facility
1826 was requested and successfully seized. In all other
1827 cases it does not skip, even if the requested operation
1828 succeeded. If an invalid quantity is supplied for
1829 a frame time, or for the high priority time, an
1830 illegal operation interrupt occurs
1831 (%PIILO, bit 1.6 of the .PIRQC user variable).
1833 .REDEF ac, redefine symbol to exec DDT
1836 The specified accumulator should contain the address of
1838 wd0 SQUOZE bits,symbol
1840 If the <bits> are all ones, then the symbol is deleted.
1841 Otherwise it is defined with the specified value,
1842 replacing any old value. This occurs in the symbol
1843 table used by exec DDT, which is used to debug the
1844 system, and which is used by the .EVAL uuo.
1845 A .REDEF fails to skip only if it tries to add
1846 a new symbol and fails for lack of room in the system.
1848 .RESET chnum, reset I/O channel
1850 I/O channel <chnum> is reset. This is exactly
1851 like the symbolic system call RESET. What happens
1852 is device-dependent; see the description of that call.
1854 .REVIVE revive system
1856 This uuo reverses the effect of the .SHUTDN uuo.
1857 It is used by the REVIVE command of LOCK.
1858 Jobs which have enabled it will receive an
1859 interrupt (bit 1.7 of the .PIRQC user variable).
1860 See the .DIETIME and .SHUTDN uuo's, and the SSTATU
1861 symbolic system call.
1863 .RLPDTM ac, read localized PD time and .RYEAR
1865 This returns the time and date in <ac> and <ac+1>, in a binary
1866 form. <ac+1> contains the result of .RYEAR; see the description
1867 of that uuo for details. <ac> contains the "localized" number
1868 of seconds since the beginning of the year. If this is divided
1869 by the number of seconds in a day (86400.), the remainder will
1870 be the number of seconds since midnight local time, and the
1871 quotient will be the number of days since the beginning of the
1872 year, with the (mis)feature that all years are considered to
1873 include February 29. This is done so that date-printing
1874 routines do not have to check for leap-year, but it does mean
1875 that during the last 10 months of non-leap years the day number
1876 is 1 greater than the correct Julian day. Bit 4.9 of <ac+1> is
1879 Note also that when daylight savings time is in effect <ac> will
1880 be advanced by one hour. Again this is done to simplify date
1881 and time printing routines. Bit 4.7 of <ac+1> is set in this
1884 Note that .RLPDTM should be used instead of .PDTIME followed by
1885 .RYEAR, since it guarantees consistency of the two values
1889 .RRTIM ac, ANCIENT HISTORY read run time
1891 This uuo NO LONGER EXISTS.
1892 It is documented here for historical purposes only.
1893 Its function has been superseded by the .RUNT user variable.
1894 Its opcode has been recycled as .CBLK.
1896 The job's run time is returned in accumulator <ac>.
1897 See the .RUNT user variable.
1899 .RSYSI ac, read system incarnation
1901 Returns in <ac> the .FNAM2 of the system when it
1902 was assembled. Thus, it is a version number in sixbit.
1903 This is the same as the seventh value of the
1904 SSTATU symbolic system call.
1906 .RTIME ac, read time
1908 The time of day is returned in accumulator <ac> as a word
1909 of sixbit characters "HHMMSS", where HH is the hour
1910 (in 24.-hour notation), MM is the minute, and SS is
1911 the second, all as two-digit decimal numbers.
1912 If the system does not know the time, -1 is returned.
1915 .RYEAR ac, read year
1917 Returns in accumulator <ac> a word as follows:
1919 4.9 This year has 365. days, and it is after February 28.
1920 4.8 This year is a leap year (366. days).
1921 4.7 Daylight savings time is in effect.
1922 4.6 The time of year is known.
1923 4.2-3.9 If bit 4.6 set, the current day of the week.
1924 Sunday=0, Monday=1, etc.
1925 3.8-3.6 The day of the week of January 1 of this year.
1927 2.9-1.1 The year, not modulo 100., but as a full quantity,
1930 If the system does not know the time, zero is returned.
1932 .SETLOC ac, deposit in system
1934 Expects the rh of <ac> to contain the address of a
1935 location in physical core, and the lh of <ac> to point
1936 to a word of data in the executing job's memory.
1937 The job's argument word is copied into the addressed
1938 location in physical core, and a message is printed
1939 on the system console.
1941 .SETM2 OBSOLETE set two interrupt masks
1943 This uuo is ARCHAIC and OBSOLETE.
1944 It is documented here for historical purposes only.
1945 Its use in new programs is to be avoided.
1946 Its function has been superseded by block-mode
1947 .SUSET of .MASK and .MSK2.
1949 The job's .MASK and .MSK2 user variables are set to
1950 the respective contents of accumulators <ac> and <ac+1>.
1952 .SETMSK ac, OBSOLETE set interrupt mask
1954 This uuo is ARCHAIC and OBSOLETE.
1955 It is documented here for historical purposes only.
1956 Its use in new programs is to be avoided.
1957 Its function has been superseded by .SUSET of .MASK.
1959 The job's .MASK user variable is set to the contents of
1962 .SHUTDN ac, shut down system
1965 This uuo causes the system to prepare to go down.
1966 (It is used by the KILL command in LOCK.)
1967 Accumulator <ac> should contain a time interval,
1968 in thirtieths of a second. The system will go down
1969 exactly that much time after the present moment.
1971 When the system prepares to go down, all jobs enabled
1972 for it receive a system going down interrupt (%PIDWN, bit 1.7
1973 of the .PIRQC user variable). (DDT prints a message when it
1974 receives such an interrupt; part of this message is the
1975 contents of the file SYS:DOWN MAIL.) This interrupt will
1976 occur repeatedly every time 3/4 of the time from the previous
1977 interrupt to the time of shutdown has elapsed, except that
1978 interrupts will not occur less than ten seconds before shutdown.
1979 (Thus, if the system were scheduled to go down in ten minutes,
1980 interrupts would happen at the following times before shutdown:
1981 10:00, 2:30, 0:37. If in five minutes: 5:00, 1:15, 0:17.)
1982 When the magic moment arrives, all users are forceably logged
1983 out, all jobs killed (except job trees whose top-level jobs
1984 have the %OPLIV bit set in their respective .OPTION user variables
1985 -- a feature used primarily by system daemons. Such trees are
1986 expected to log out on their own after finishing their work),
1987 all micro-tapes are flapped, the file SYS:DOWN MAIL is deleted,
1988 "ITS NOT IN OPERATION" messages are printed on all consoles,
1989 all Terminet motors are stopped, all files, directories, and TUTs
1990 are written out, and everything generally put into a good state;
1991 the system then calls DDT. It may be brought back up again
1992 with XREVIV$X, which reloads demons and allows ^Z'ing once more.
1994 The effects of a .SHUTDN may be reversed by a .REVIVE uuo.
1995 See the .DIETIME and .REVIVE uuo's, and the SSTATU symbolic
2000 The .SLEEP uuo temporarily puts the executing job into
2001 a dormant but interruptable state. The job consumes no
2002 run time until the specified time interval has elapsed,
2003 unless an interrupt occurs.
2004 The contents of accumulator <ac> specify how long the
2005 job is to sleep. If non-negative, it is the length
2006 of time to sleep in thirtieths of a second. If negative,
2007 it means to sleep until the system TIME variable (which
2008 is read by the .RDTIME uuo (q.v.)) exceeds the absolute
2009 value of the specified quantity; thus one can sleep
2010 until a specific time.
2012 If the job is interrupted in the middle of a .SLEEP,
2013 the accumulator will be seen to contain the appropriate
2014 negative number, either the one originally there or one
2015 calculated from the original positive argument. Thus
2016 re-executing the .SLEEP after dismissing the interrupt
2017 will cause the .SLEEP to be resumed correctly.
2019 Often it is desirable to "sleep" until some condition
2020 other than the passing of time occurs. For this see
2021 the .HANG uuo. For the special case of sleeping until
2022 a network socket changes state, see the NETBLK symbolic
2025 .STATUS chnum,loc I/O channel status
2027 The status of I/O channel <chnum> is placed in
2028 location <loc>. This is exactly like the STATUS
2029 symbolic system call.
2031 .SUPSET ac, SUPCOR set
2033 The system job is partially controlled by a variable
2034 called SUPCOR; .SUPSET XOR's the contents of accumulator
2035 <ac> with that variable, returning the result of
2036 the XOR in <ac>. Not all bits specified by <ac> take
2037 effect; some are AND'ed out first. A message is printed on
2038 the system console as for the .IFSET and .SETLOC uuo's.
2040 The only really useful bits to set are as follows:
2041 1.6 Update TV who lines.
2042 1.2 Kill current file being spooled from TPL to LPT
2043 (this is what the TPL command in LOCK uses).
2045 .SUSET [suset spec] self USET
2047 This uuo is used to examine and set user variables
2048 associated with the executing job. See ITS USETS
2049 for more information on .SUSET and .USET.
2051 .SWAP ac, hack swapping
2053 This uuo is illegal unless the system is being
2054 debugged (the SYSDBG variable in the system is
2055 non-zero; see the SSTATU symbolic system call).
2057 The bits in the specified accumulator indicate
2058 a test of the page swapping software in the
2060 4.9-4.7 Operation to perform.
2061 0 Swap out the number of pages
2062 specified in 2.9-1.1.
2063 1,3,5,7 Go into a loop, waiting for
2064 a few seconds and then referencing
2065 location 2000 octal.
2066 2 Hack the PCLSR test feature on
2067 this job. Bits 2.9-1.1 specify
2069 -1 Enter in hold mode.
2070 0 Leave PCLSR test mode.
2071 1 Enter in advance mode.
2072 2 Enter in advance but don't ^Z.
2073 4 Swap out the virtual page specified
2074 by bits 2.9-1.1 for the user specified
2076 6 Swap out all pages for the user
2077 specified by bits 3.9-3.1.
2078 3.9-3.1 User index, for operations 4 and 6. A user
2079 index of zero means the job executing the .SWAP.
2080 (After all, it's hard to swap out the system!)
2081 2.9-1.1 Number of pages for operation 0.
2082 Test mode for operation 2.
2083 Virtual page number for operation 4.
2085 .TRANAD OBSOLETE translation-list add
2087 .TRANDL OBSOLETE translation-list delete
2089 .TRANS ANCIENT HISTORY translate file name
2091 .UBLAT ac, micro-tape blat (?)
2094 The specified accumulator should contain a micro-tape
2095 drive number. If the uuo succeeds, the drive is marked
2096 as being in .UBLAT mode. In this mode, there are
2097 only two permissible operations on the drive: to dismount
2098 (flap) it, and to open it as one giant file. This uuo
2099 is intended for use in reading micro-tapes written in
2100 non-standard (e.g. DEC) format. Any .OPEN
2101 on a micro-tape in .UBLAT mode will ignore the
2102 file names, and all the blocks of the tape except block 0
2103 will be read or written consecutively. No deletes, renames,
2104 etc. are permitted. A .UBLAT will fail if the drive does
2105 not exist, if the micro-tape directory has been read in
2106 already by the system, or if the drive is not assigned
2107 to the user whose job is trying to do a .UBLAT.
2109 .UCLOSE chnum, USR close
2111 This uuo is used to explicitly kill an inferior
2112 open on channel <chnum>. Merely performing a
2113 .CLOSE on the channel is not enough - that
2114 dissociates the inferior from the I/O channel,
2115 but does not destroy the inferior procedure.
2116 When the procedure is destroyed, all of its
2117 inferiors, direct or indirect, are destroyed also.
2118 As each job is destroyed, its I/O channels
2119 are automatically .CLOSE'd, and any facilities
2120 such as .MASTER mode are released. The translation
2121 lists are cleared for all destroyed jobs.
2123 If any procedure whatever has a destroyed job
2124 open on an I/O channel, that channel is automatically
2125 closed; in particular, the channel <chnum> is
2126 closed. All jobs with channels which have the job open
2127 as a foreign user (as opposed to an inferior or a
2128 job device) also receive a word 2 I/O interrupt on each
2129 such channel (see the .IFPIR user variable).
2130 If a procedure has pushed a channel with a job to be
2131 destroyed onto its I/O pdl (see the .IOPUSH, .IOPOP, and
2132 .IOPDL uuos, and the .IOC, .IOS, and .IOP user variables),
2133 then that I/O pdl entry is replaced on the pdl with a special
2134 entry for a pseudo-device called the "interrupt on .IOPOP
2135 device", which delivers a word 2 interrupt when popped from
2136 the I/O pdl and then closes its channel (thus it should be
2137 impossible to perform any operation on this "device" except
2138 .IOPOP). In this way a job can detect the fact that a
2139 foreign job disappeared while it was pushed.
2141 A procedure which executes a .UCLOSE receives
2142 an I/O channel error interrupt (%PIIOC, bit 1.9 of the
2143 .PIRQC user variable) if the specified channel
2144 does not have an immediately inferior procedure
2147 .UDISMT ac, micro-tape dismount
2150 The specified accumulator should contain a micro-tape
2151 drive number. If the uuo succeeds, the directory
2152 is written back onto the micro-tape and excised from
2153 the system's memory. The micro-tape is then physically
2154 dismounted (this is known as "flapping" the tape, since
2155 when it runs off the reel it goes flap, flap).
2156 Micro-tapes should not be manually dismounted, for this
2157 will cause the directories to get out of phase, messing
2158 up that micro-tape and the next one to use that drive.
2159 The .UDISMT will fail if any files are still
2160 open on the micro-tape, or if someone else has the
2161 drive assigned to him.
2162 DDT makes this available via its command :FLAP.
2163 See also the FLAP symbolic system call.
2165 .UINIT ac, initialize micro-tape
2168 The specified accumulator should contain a micro-tape
2169 drive number. If the uuo succeeds, the directory
2170 of the micro-tape is initialized (containing no files).
2171 The uuo fails if the drive does not exist, or if the
2172 drive is not assigned to the user whose job is trying
2174 See the .ASSIGN and .DESIGN uuos.
2176 .UPISET ac, OBSOLETE user priority interrupt set
2178 This uuo is ARCHAIC and OBSOLETE.
2179 It is documented here for historical purposes only.
2180 Its use in new programs is to be avoided.
2181 Its function has been superseded by .SUSET of .PICLR
2182 and/or the .DISMISS uuo and the DISMIS symbolic system
2185 The value of the ac is converted to -1 or 0 on the basis
2186 of bit 4.9; this value is then exchanged with the .PICLR
2187 user variable for the executing job. Thus the accumulator
2188 gets the old value of .PICLR even as it specifies a
2189 new value. This allows enabling and disabling of
2192 .USET chnum,[uset spec] set (or get) user variable
2194 This uuo is used to inspect or alter the user variables
2195 of a job open on channel <chnum>, which may be a channel
2196 open on the USR or BOJ device.
2197 See ITS USETS for further information on .USET and .SUSET.
2199 .UTNAM ac, set micro-tape name
2202 The specified accumulator should contain a micro-tape
2203 drive number in the right half and a three character
2204 sixbit name in the left half. If the uuo succeeds,
2205 the name of the micro tape will be changed to the one
2206 specified. The uuo fails if there is no such drive,
2207 if it is in .UBLAT mode, or if it is assigned
2209 The name of a micro-tape can be examined with the .RCHST uuo.
2211 .UTRAN loc user interrupt bit translate
2215 The effective address of .UTRAN must be a three-word
2217 loc: bit,, ;interrupt bit of inferior
2218 0 ;uname returned here
2219 0 ;jname returned here
2221 The first word should be all zero, except for one
2222 of bits 3.1-3.8; these correspond to inferior
2223 interrupt bits in the .IFPIR user variable.
2224 If the job executing job has an inferior for that
2225 interrupt bit, .UTRAN stores the uname and jname
2226 of the inferior in the second and third words and skips;
2227 otherwise it fails to skip.
2229 DDT uses this to find jobs which have been :FORGET'ed, or
2230 accidentally created by open's of the USR: device via :PRINT
2231 etc. Normally, superiors should keep track of the interrupt bit
2232 and job names when the job is created, and this UUO should be
2233 used only for exceptional cases.
2235 See the .IFPIR, .UNAME, .JNAME, and .UIND user variables.
2237 .VALUE [item] return value to superior
2239 The job which executes a .VALUE receives a class 1
2240 interrupt, which stops the job, turns on %PIVAL (bit 1.8)
2241 in its .PIRQC variable, and interrupts its superior.
2242 The word <item> is placed in the .VAL variable of
2243 the executing job (this fact is a historical artifact,
2244 relatively useless now).
2246 The standard superior procedure (DDT) imposes the
2247 following additional semantics on .VALUE:
2248 If the effective address is zero, then DDT prints
2249 out a message to that effect, and the job is left stopped.
2250 This used to be the standard way to crap out from a grossly
2251 irrecoverable situation (e.g. can't get core, or can't
2252 open the TTY when started). Now .LOSE (q.v.) is preferred.
2253 A typical sequence is:
2255 GO: .OPEN TTYC,[SIXBIT \ !TTY\]
2256 .VALUE ;unhappy if never got TTY
2257 .CALL [ SETZ ? 'TTYGET ? 1000,,TTYC ? 2000,,A ? 402000,,B ]
2258 .VALUE ;shouldn't lose if .OPEN succeeded
2260 If the effective address is not zero, it is assumed to
2261 point to an ASCIZ string in the memory of the job
2262 which executed the .VALUE. DDT proceeds to
2263 interpret these characters as if they were typed to
2264 DDT on the console. Thus a job might execute
2266 .VALUE [ASCIZ \:PROCED :DISOWN
\e\eV\]
2268 or something similar, to get itself running again and
2269 disowned from its superior. See the DDT documentation
2270 for specific details on .VALUE.
2276 .WMAR ac, ANCIENT HISTORY write mar address
2278 This uuo NO LONGER EXISTS.
2279 It is documented here for historical purposes only.
2280 Its function has been superseded by .SUSET of .MARA.
2281 Its opcode has been recycled as .DCONT.
2283 The user's mar address variable is set from the
2284 contents of the specified accumulator.
2286 .WR760 ac, ANCIENT HISTORY write device 760
2288 This uuo NO LONGER EXISTS.
2289 It is documented here for historical purposes only.
2290 Its function is obsolete.
2291 Its opcode has been recycled as .DSTEP.
2293 Device 760 of the PDP-6 used to be used for temporary
2294 direct sense hookups. (For example, the low six
2295 bits controlled lights on the hand of the AMF arm.)
2296 This uuo used the contents of accumulator <ac> for a
2297 DATAO to device 760.
2299 .WSNAME ac, OBSOLETE write system name
2301 This uuo is ARCHAIC and OBSOLETE.
2302 It is documented here for historical purposes only.
2303 Its use in new programs is to be avoided.
2304 Its function has been superseded by .SUSET of .SNAME.
2306 The system name for the job (used as a file directory name)
2307 is set to the sixbit contents of accumulator <ac>.