mirror of
https://github.com/PDP-10/its.git
synced 2026-01-13 15:27:28 +00:00
.MSPACE is from ITS 674. .ORGI and .ORGO are from AI memo 161. .ARMOFF, .ARMOVE, .POTSET, .VSCAN, and .VSTST are from AI memo 161A.
2355 lines
89 KiB
Plaintext
Executable File
2355 lines
89 KiB
Plaintext
Executable File
Copyright (c) 1999 Massachusetts Institute of Technology
|
||
See the COPYING file at the top-level directory of this project.
|
||
------------------------------
|
||
|
||
ITS UUOS:
|
||
|
||
This file attempts to maintain up-to-date documentation on
|
||
all non-symbolic ("old") system calls. Those wonderful
|
||
souls who update the information in any way (additions,
|
||
deletions, corrections) should describe their
|
||
modifications in a brief note to INFO-ITS@AI so
|
||
that interested parties can correct their copies or
|
||
conceptions without needing to print or read the
|
||
entire file again. For example:
|
||
|
||
:QMAIL INFO-ITS@AI I added more details to the .FOO uuo ^C
|
||
|
||
If you want to be put on the INFO-ITS mailing list,
|
||
just say so in a message to it.
|
||
-------------------------------------------------
|
||
|
||
On the PDP-10, opcodes 0 through 77 are deliberately "not
|
||
defined", and are called uuos ("unimplemented user operations").
|
||
Also, certain other opcodes are either illegal in user mode
|
||
or undefined (for example, I/O instructions, JRST 4,).
|
||
|
||
When an undefined instruction is executed, it "traps to 40":
|
||
it is stored in location 40
|
||
with the index and indirect fields zeroed and the address field
|
||
replaced by the effective address, and then the instruction
|
||
in 41 is executed (it is usually a subroutine call).
|
||
(Some instructions actually trap to 60 on KA's, but ITS contrives
|
||
to make them appear to have trapped to 40 just like all
|
||
the others).
|
||
|
||
uuos 1 through 37 are reserved for user programs. They
|
||
go through the entire trap sequence remaining in user mode,
|
||
so it is the user's locations 40 and 41 that are used.
|
||
The operating system is not involved at all.
|
||
These uuos are called "user uuos".
|
||
|
||
The other undefined opcodes enter exec mode during the trap,
|
||
so that the system's 40 and 41 are used; the PC saved by the
|
||
subroutine call will say "user mode" if the uuo was executed
|
||
in user mode, however. These instructions are the normal way
|
||
of calling any PDP-10 operating system.
|
||
|
||
ITS interprets uuos 40 through 47 as monitor calls; those
|
||
uuos are called "system uuos". The bulk of this file is devoted
|
||
to describing how to use them. In addition, ITS will simulate
|
||
some I/O instructions for the user (for example, any CONI, and
|
||
DATAI 0,). All other instructions that trap to the system
|
||
will be signaled to the user (they are "returnable uuos").
|
||
For simple programs, they will cause an ILOPR interrupt
|
||
(%PIILO, bit 1.6 of .PIRQC). For programs that appear able to
|
||
handle them, they are "returned" to the user, pretending to
|
||
be user uuos - that is, the system makes it appear that they had
|
||
trapped to the user's 40. However, they do not act precisely
|
||
like user uuos:
|
||
1) The system can't simulate any trap instruction but
|
||
unindexed, direct JSR. If the user's trap instruction is
|
||
not a JSR, or is indexed or indirect, the system assumes that
|
||
the user can't handle the returnable uuos, and causes an ILOPR
|
||
interrupt instead. Also, if the AC field of the JSR is nonzero,
|
||
the system will interrupt instead of returning the uuo; this
|
||
is a way for a program to say explicitly that it doesn't want
|
||
to have uuos returned, but still handle user uuos.
|
||
2) If the opcode in 41 is 0, the system treats it as if it
|
||
were a JSR.
|
||
3) 0 is not considered a reasonable place to JSR to. If the
|
||
address field of 41 is 0, the system will interrupt instead of
|
||
returning the uuo.
|
||
4) While the addresses 40 and 41 are fixed by hardware for
|
||
user uuos, for system returned uuos they are not. They must
|
||
always be consecutive, but the address of the first one is
|
||
kept in the RH of the .USET variable .40ADDR (whose initial value is,
|
||
of course, 40). Thus, the user may have one handler for user uuos
|
||
and another for returned uuos.
|
||
Note that the system uses "42" for interrupts and "43" and "44"
|
||
for the "locks" feature; those locations are also shifted
|
||
by setting .40ADDR.
|
||
5) Returnable UUOs have complicated interactions with DDT.
|
||
When proceeding from a breakpoint, DDT must simulate certain
|
||
instructions, including all those that can transfer control.
|
||
User uuos can be simulated properly, but not returnable ones
|
||
since DDT does not know how to decide whether they are to cause
|
||
ILOPRs. So DDT treats those uuos like the typical instructions;
|
||
it puts the uuo in 31, a jump to 1 + the actual address of the
|
||
uuo in 32, and a jump to 2 + that address in 33. It then starts
|
||
the job at 31. If the returnable uuo handler does nothing with
|
||
the PC except possibly return to it, and does not try to examine
|
||
the uuo except by looking at 40, this causes no problem. However,
|
||
if the uuo is followed by arguments, or if it can skip more than
|
||
once, or if it tries to remember the PC somewhere, the handler
|
||
must understand that if the PC is 31 (+1) special treatment is required.
|
||
In addition, the real location of the uuo will contain not the
|
||
uuo but a .BREAK, which will be there to implement the breakpoint.
|
||
|
||
If the .UTRAP variable of a job is nonzero, ALL instructions
|
||
that trap to the system will cause ILOPR interrupts - even those
|
||
that are usually treated as system calls. In addition, the
|
||
job will not handle any of its own interrupts - they all interrupt
|
||
its superior. Thus, the superior can make the job believe it is
|
||
running under a non-ITS environment. User uuos are not affected.
|
||
The .UTRAP variable is the same as the %OPTRP bit in the LH of .OPTION.
|
||
|
||
If the %OPDEC bit in the LH of .OPTION is set, uuos 40, 41 and 47
|
||
(as well as those I/O instructions which ITS usually simulates)
|
||
become returnable uuos instead of system calls. By a lucky
|
||
coincidence, those uuos, which are the only ones used by both
|
||
ITS and TOPS-10, are not really necessary in ITS (they are
|
||
.OPEN, .IOT and .ACCESS, and all have alternative forms using .CALL).
|
||
In this mode, all uuos used as system calls by TOPS-10 are
|
||
returnable. One of the TOPS-10 simulators works by setting
|
||
this bit, and making .40ADDR point into the simulator where
|
||
it lives at the top of core (to avoid conflicting with the user
|
||
uuo handlers of the simulated programs).
|
||
|
||
CALLS: Overview of ITS System Calls
|
||
|
||
ITS system calls come in two kinds: the older, numerically
|
||
decoded, non-standardized kind, and the newer "symbolic
|
||
system calls" with a standard calling sequence.
|
||
|
||
Each of the numerically decoded system calls is distinguished
|
||
from all of the others by the values of specific fields
|
||
in the instruction (the opcode, and maybe the AC and address
|
||
fields). Each specific system call is known as "a uuo", and
|
||
its name is a predefined symbol in the assembler, whose value
|
||
is the appropriate instruction. For example, one uuo is
|
||
.ACCESS; it is distinguished by the opcode field alone, which means
|
||
that the AC field and address are available as arguments.
|
||
The symbol .ACCESS is defined as the appropriate opcode.
|
||
.RCHST, however, is distinguished by its opcode and its address,
|
||
so that only the AC field can be used as an argument. The uuos
|
||
distinguished by opcode and address all have the same opcode,
|
||
which is called .OPER; thus, all such uuos are called ".OPER's".
|
||
.FDELE is distinguished by opcode and ac field, leaving the address
|
||
as an argument; such uuos are called ".CALL's" since they all have
|
||
.CALL as their opcode. Each uuo is described individually in this file.
|
||
|
||
The symbolic system calls all use the uuo .CALL. They are
|
||
distinguished by the contents of the block addressed by the .CALL,
|
||
which also points to the arguments. Ths symbolic system calls
|
||
are described in more detail in the file .INFO.;ITS .CALLS.
|
||
|
||
.ACCESS chnum,[access pointer] set file access pointer
|
||
|
||
Sets the access pointer for the I/O channel <chnum>
|
||
for the next input/output operation. This is used to
|
||
effect random access. On the DSK device (and DSK-like
|
||
JOB devices) the access pointer is the number of "bytes"
|
||
from the beginning of the file. Bytes are normally the
|
||
same as words, but in unit ascii mode there are five
|
||
seven-bit bytes per word. In the future there may be
|
||
the ability to have bytes of any size from 1 to 36 bits.
|
||
On the USR device the access pointer is the address
|
||
within the job's memory.
|
||
Random access on the USR device can also be effected
|
||
via page mapping (see the .CBLK uuo and the CORBLK
|
||
symbolic system call). If the channel number <chnum>
|
||
is variable, the symbolic system call ACCESS may
|
||
be used in place of the .ACCESS uuo.
|
||
The symbolic call RFPNTR may be used to read the current
|
||
access pointer for a file.
|
||
|
||
.ARMOFF turn AMF arm off
|
||
|
||
Turn the ARM arm off. The arm no longer exists.
|
||
|
||
.ARMOVE ac, move AMF arm
|
||
;normal return
|
||
;test successful return
|
||
|
||
This system call allows one job at at time to exercise
|
||
special control over several D/A multiplexor channels.
|
||
It provides acceleration and velicoty limiting, software
|
||
limit stops, and conversion from joint number to multiplexor
|
||
channel. The accumulator <ac> should contain -<length>,,<addr>
|
||
pointing to a block of words, each specifying a command.
|
||
If any test command is true, the .ARMOVE will skip.
|
||
|
||
.ARMRS reset AMF arm lock flags
|
||
|
||
Reset the AMF arm lock flags. The arm no longer exists.
|
||
|
||
.ASSIGN ac, assign a microtape
|
||
;skip if successful
|
||
|
||
The accumulator <ac> should contain the number of a
|
||
microtape drive. If it succeeds, it assigns the drive
|
||
to the user who executed the .ASSIGN. When a job
|
||
attempts to use a microtape drive,
|
||
it will succeed only if it has the same
|
||
sname as the uname of the job which did the .ASSIGN.
|
||
A .ASSIGN will fail only if the drive is already
|
||
assigned to a different user (i.e. a different uname),
|
||
or if an invalid drive number is given.
|
||
See also the .DESIGN and .RCHST uuo's.
|
||
|
||
.ATTY chnum, assign tty to inferior
|
||
;skip if successful
|
||
|
||
Puts the job in the state of wishing to pass control of
|
||
the tty to the direct inferior open on the specified
|
||
channel. It skips if successful; it fails if the
|
||
channel does not have a direct inferior open, if the
|
||
executing job had never had the tty, or if it had not
|
||
been in the state of wishing to retain the tty. If the
|
||
job had the tty, after the .ATTY the tty will belong
|
||
to the specified inferior, or one of its inferiors.
|
||
A job need not have the tty to do an .ATTY.
|
||
See the .DTTY uuo, and the .TTY user variable.
|
||
Also see ITS TTY.
|
||
|
||
.BREAK ac,address breakpoint instruction, etc.
|
||
|
||
The <ac> and <address> fields of this uuo are totally
|
||
ignored by ITS. The procedure executing it receives
|
||
a class 1 interrupt (bit 2.2 of the .PICLR user
|
||
variable, called %PIBRK), stopping it and interrupting
|
||
its superior.
|
||
|
||
The standard superior procedure, DDT, assigns
|
||
the following semantics to .BREAK, dependent on
|
||
the <ac> field (for full information see DDT ORDER):
|
||
|
||
<ac> meaning
|
||
1-10 Breakpoint number <n> in the program, for <n>
|
||
between 1 and 10.
|
||
12 Request for information transfer.
|
||
15 Temporary breakpoint number 1.
|
||
16 Request for program suspension or termination.
|
||
17 Temporary breakpoint number 2.
|
||
|
||
The "normal termination" instruction is .BREAK 16,160000
|
||
(but also see .LOGOUT).
|
||
|
||
When DDT sets a breakpoint in a program on a given
|
||
instruction, it replaces the opcode with .BREAK
|
||
and the ac field with the breakpoint number. Thus
|
||
the instruction will still calculate its usual effective
|
||
address before breaking. The two temporary breakpoints
|
||
are used for ^N (multiple instruction proceed), etc.
|
||
|
||
.BREAK 12, is used to transfer information between
|
||
DDT and the executing program at the latter's request.
|
||
.BREAK 12, is like .SUSET in that it points
|
||
either to a specification word or to an AOBJN
|
||
pointer of such words. Bit 4.9=0 means read, =1 means
|
||
write (from the program's point of view). Writing can
|
||
be illegal if the ..PERMIT variable in DDT for
|
||
the job is set appropriately. Bits 4.7-3.1
|
||
determine the type of information transferred:
|
||
..RSTA 1 Starting address of program.
|
||
..RLFI 2 Loaded file name.
|
||
Four words: device, sname, file name 1, file name 2.
|
||
..RSTP 3 (read only) AOBJN pointer to program's symbol table
|
||
in DDT. The left half is the negative of
|
||
the symbol table size. See type 7 (..RSTB).
|
||
..RSYM 4 Symbol definition. Uses two words.
|
||
Read: first word contains squoze for symbol.
|
||
Second word receives value.
|
||
If undefined, first word is zeroed.
|
||
Write: first word contains squoze, second value.
|
||
..RJCL 5 Read: fetches command string for program.
|
||
Set by : command or via :JCL.
|
||
Always transfers at least one word of
|
||
packed ascii, then more until either a
|
||
zero word is transferred or until a
|
||
non-zero is about to be transferred into.
|
||
String is terminated by ^M if non-null.
|
||
Write: clear command string.
|
||
..RPFI 6 File name defaults used for :PRINT.
|
||
Four words: device, sname, file name 1, file name 2.
|
||
..RSTB 7 Symbol table. Allows transfers of many
|
||
symbols in either direction.
|
||
..RCON 10 (read only) Number to symbol conversion.
|
||
Uses two words. The first should initially
|
||
contain a value. It receives squoze for
|
||
a symbol, and the next word receives a delta.
|
||
The value of the symbol plus the delta equals
|
||
the original argument. The lookup used by DDT
|
||
for symbolic typeout is employed here.
|
||
If the lookup fails, the first word receives
|
||
zero and the second receives what the first held.
|
||
..RXUN 11 (read only) The XUNAME (a uname to be used for
|
||
getting mail, etc.). This is like the UNAME, but
|
||
has trailing digits stripped off, etc. This is
|
||
OBSOLETE; use the .XUNAME user variable.
|
||
..RXJN 12 (read only) The XJNAME (what this job should think
|
||
of as its "real" name). This is like the JNAME,
|
||
but has trailing digits stripped off, etc. This is
|
||
OBSOLETE; use the .XJNAME user variable.
|
||
..RLJB 13 (read only) Read index of previously current job.
|
||
..RRND 14 Reads or writes the ..URANDM variable in DDT for
|
||
this job.
|
||
..RPUR 15 Unpurify page.
|
||
..RHSN 16 (read only) Ask to lookup an HSNAME from an XUNAME.
|
||
..RMAI 17 (read only) Ask to lookup user's mail file name.
|
||
(Symbols with names starting with "..S" exist for all those not
|
||
marked as read only. For example ..RSTA==1 and ..SSTA==400001.)
|
||
|
||
Illegal .BREAK 12,'s cause DDT to give the program an
|
||
illegal operation interrupt (bit 1.6 in the .PIRQC
|
||
user variable).
|
||
|
||
.BREAK 16, is used to return to DDT in various
|
||
nice ways. The effective address is decoded as follows:
|
||
2.9 Return from X. (Do not use unless you understand it!)
|
||
2.8 Type extra carriage return in DDT.
|
||
2.7 Do not reset TTY input (effective only if
|
||
executing job has the TTY).
|
||
"Normal" returns to DDT should always have
|
||
this bit set.
|
||
2.6 Kill executing job:
|
||
Immediately, if it has the TTY.
|
||
When it gets the TTY, if current job.
|
||
Otherwise when J'd to in DDT.
|
||
Will print ":KILL" when killed.
|
||
2.5 Kill executing job:
|
||
Like 2.6 if job current.
|
||
Otherwise is killed silently.
|
||
2.6&2.5 Together mean kill executing job:
|
||
Like 2.6 if job current.
|
||
Otherwise kill immediately, and print
|
||
JOB <jname> FINISHED on TTY.
|
||
2.4 Conditional breakpoint return.
|
||
2.8=1 => condition true.
|
||
2.8=0 => condition false.
|
||
Used by DDT. Dangerous for users to play with.
|
||
2.3 Don't type even a carriage return. Don't close
|
||
the currently open location. If killing self
|
||
don't type :KILL.
|
||
2.2-1.1 Illegal. (Reserved for expansion.)
|
||
|
||
DDT sets the %OPCMD and %OPBRK bits for
|
||
its inferiors appropriately. See the .OPTION
|
||
user variable.
|
||
|
||
.CALL [ SETZ ? SIXBIT \name\ ? -- args -- ] symbolic system call
|
||
;skip if successful
|
||
|
||
The .CALL uuo is used to invoke a large class of
|
||
operations which are distinguished by a sixbit name.
|
||
See the file ITS .CALLS for more information.
|
||
|
||
.CALL is sometimes used in a generic sense to denote
|
||
the set of uuo's with the same opcode as .CALL; they
|
||
are distinguished by their accumulator fields:
|
||
.CALL 0, .CALL
|
||
.CALL 1, .DISMISS
|
||
.CALL 2, .LOSE
|
||
.CALL 3, .TRANAD
|
||
.CALL 4, .VALUE
|
||
.CALL 5, .UTRAN
|
||
.CALL 6, .CORE
|
||
.CALL 7, .TRANDL
|
||
.CALL 10, .DSTART
|
||
.CALL 11, .FDELE
|
||
.CALL 12, .DSTRT
|
||
.CALL 13, .SUSET
|
||
.CALL 14, .LTPEN
|
||
.CALL 15, .VSCAN
|
||
.CALL 16, .POTSET
|
||
.CALL 17, unused
|
||
|
||
.CBLK ac, hack a core block
|
||
;skip if successful
|
||
|
||
This uuo is ARCHAIC. Its use should be avoided
|
||
in new programs, since the CORBLK symbolic system call
|
||
is much more flexible and easy to understand.
|
||
|
||
The contents of accumulator <ac> specify an operation
|
||
on the executing job's core. It modifies the job's
|
||
page map entry for one page. The contents of <ac>
|
||
should be as follows:
|
||
4.9 Must be zero.
|
||
4.3-4.1 Desired operation:
|
||
0 Get page from self.
|
||
1 Get absolute page.
|
||
2 Get a page from the user open on
|
||
the channel specified by bits 3.8-3.1.
|
||
3 Get a page from the user whose user
|
||
index is in bits 3.8-3.1.
|
||
4 Get fresh page.
|
||
5 Get public page.
|
||
6 Make my page public.
|
||
7 Make my page private.
|
||
3.9 If 1, request write permission for the page.
|
||
Assumed 1 for operation 4 (fresh page).
|
||
Otherwise valid only for self, public page,
|
||
or direct inferior open on channel.
|
||
3.8-3.1 User index or USR device channel.
|
||
If the executing job is a job device, then
|
||
377 will refer to the job which invoked it.
|
||
2.9 1 = insert page in core map.
|
||
0 = delete page. If the operation is 6 or 7,
|
||
this bit is ignored. Otherwise, the operation
|
||
is ignored for deletion.
|
||
2.8-2.1 Virtual page to be affected within the core map
|
||
of the executing job.
|
||
1.9-1.1 Block number within source specified by
|
||
bits 4.3-4.1.
|
||
|
||
Sample contents of <ac> for various operations:
|
||
Delete my page 43: 0,,43000
|
||
Create a fresh page 217: 4400,,517000
|
||
Make my page 45 be read-only: 0,,445045
|
||
Make my read-only page 45 writable: 400,,445045
|
||
Make page 16 of job 34 read-only
|
||
as my page 377: 3034,,777016
|
||
|
||
This uuo is all right for hacking single pages within
|
||
your own core map. To alter another job's core map,
|
||
or to hack many pages at once, use the CORBLK
|
||
symbolic system call.
|
||
For more information on core blocks, see ITS CORBLK.
|
||
|
||
.CLOSE chnum, close a file
|
||
|
||
The input/output channel <chnum> is closed. All
|
||
operations associated with that channel are completed.
|
||
For file structured devices, if another file with
|
||
the same name exists (if <chnum> was being used for
|
||
output), that file is deleted at this time and the new
|
||
file replaces it.
|
||
Any further attempts to use the channel without re-opening
|
||
it will cause errors.
|
||
.CLOSE does nothing if the channel is not open.
|
||
If the USR device is open on the specified channel,
|
||
the job is not killed by .CLOSE; it is merely made
|
||
to be no longer open on the channel. To kill a USR
|
||
device job, the .UCLOSE uuo must be used.
|
||
If the channel number is a variable, the CLOSE
|
||
symbolic system call may be used.
|
||
|
||
.CORE <number of blocks> set core limit
|
||
;skip if successful
|
||
|
||
This uuo is a relic of the old pre-paging version of ITS.
|
||
For applications which want to be relatively clever
|
||
about paging and core allocation, see the .CBLK uuo
|
||
and the CORBLK symbolic system call.
|
||
The effective address of .CORE should be a number between
|
||
0 and 400 octal. The core of the procedure executing it
|
||
is modified as follows:
|
||
|
||
(DEFUN *CORE (N)
|
||
(DO ((K (// (*SUSET *RMEMT) 2000)
|
||
(// (*SUSET *RMEMT) 2000)))
|
||
((= K N))
|
||
(COND ((< K N) (CREATE-PAGE K))
|
||
(T (DELETE-PAGE (- K 1))))))
|
||
|
||
That is, at each step a page is either added or deleted
|
||
at the top of the job's memory until page <n-1> is the
|
||
highest one in the job's memory. Only a .CORE to
|
||
acquire more core can fail. If a .CORE fails to skip,
|
||
some of the requested core may have been obtained,
|
||
though not all.
|
||
|
||
.DCLOSE display close
|
||
|
||
This system call releases the 340 display or the
|
||
E&S display, if possessed by the executing job, and
|
||
closes all channels on which the display is open.
|
||
If the display is being hacked via .DSTART, this
|
||
won't be any channels. In the case of the 340, the
|
||
display is made available to the pdp-6.
|
||
If the executing job does not possess the
|
||
display, .DCLOSE does nothing but return.
|
||
|
||
.DCONTIN display continue
|
||
|
||
This system call will restart the E&S display after stopping
|
||
or single stepping (.DSTOP, .DSTEP). If the display is
|
||
stopped because of a Display MPV, a Hit Stop, WCR stop or
|
||
PROG Stop, the condition will NOT be cleared and the display
|
||
NOT restarted. If the display is not stopped or does not
|
||
belong to the executing job, no action is taken.
|
||
|
||
This system call is ignored by the 340 display.
|
||
|
||
.DEMON acknowledge one demon request
|
||
.DEMON ac, acknowledge <n> demon requests
|
||
;skip if successful and more requests pending
|
||
|
||
As of September 1, 1976, only the DM machine has this.
|
||
|
||
If the executing job is not a demon, the uuo merely returns
|
||
without skipping. If it is a demon, then either 1 or
|
||
the contents of the specified non-zero <ac> are subtracted
|
||
from the demon's request count, and the uuo skips iff the
|
||
resulting count is still positive.
|
||
See the DEMSIG, RDDMST, and STDMST symbolic system calls.
|
||
|
||
.DESIGN ac, de-assign a microtape
|
||
;skip if successful
|
||
|
||
The accumulator <ac> should contain the number of a
|
||
microtape drive. It reverses the effect of a .ASSIGN
|
||
uuo by making the drive unassigned again. A .DESIGN
|
||
will fail only if an invalid drive number is given,
|
||
or if the drive is assigned to some other user than
|
||
the one owning the job trying to do the .DESIGN.
|
||
It will succeed if the drive is already unassigned.
|
||
|
||
.DIAL ac, ANCIENT HISTORY dial a dataphone line
|
||
;skip if successful
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function is obsolete.
|
||
Its opcode has been recycled as .NETAC.
|
||
|
||
The accumulator <ac> should contain a byte pointer
|
||
of the following form:
|
||
440600,,[data](n)
|
||
where <n> is not an index field, but the number of
|
||
a dialer (0 or 1), and <data> is a series of dialing
|
||
bytes. The byte string may not be longer than 5 words.
|
||
Each byte specifies a dialing step as follows:
|
||
0 End of data.
|
||
1-10. Send 1-10. dialing pulses. Pauses are supplied
|
||
between digits automatically.
|
||
> 10. Pause <<byte>-10.> seconds in dialing.
|
||
If the accumulator is zero except for the dialer number,
|
||
then the "break" signal is sent after any previous
|
||
dialing has been completed.
|
||
A .DIAL will fail if the dialer number is invalid,
|
||
if the TTY associated with the dialer (0=T07, 1=T06)
|
||
is in use by another job, or if the dialer is being used
|
||
by some other job (the other job has not done .HANGUP yet).
|
||
See the .DIALW and .HANGUP uuos.
|
||
|
||
.DIALW dialnum, ANCIENT HISTORY wait for dialing to finish
|
||
;skip if successful
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function is obsolete.
|
||
Its opcode has been recycled as .NETS.
|
||
|
||
If dialer number <dialnum> is assigned to the job
|
||
executing the .DIALW (i.e. the job has done a .DIAL
|
||
but not a .HANGUP), then .DIALW skips after waiting
|
||
for dialing to be completed. Otherwise it fails.
|
||
See the .DIAL and .HANGUP uuos.
|
||
|
||
.DIETIME ac, OBSOLETE time until system dies
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been superseded by the SSTATU
|
||
symbolic system call.
|
||
|
||
The accumulator <ac> is set to the maximum time
|
||
(in thirtieths of a second) before ITS will go
|
||
down. If the system is not planning to go down
|
||
(the normal case, we hope!) <ac> is set to -1.
|
||
See also the .REVIVE and .SHUTDN uuos.
|
||
|
||
.DISMISS [new PC] dismiss an interrupt
|
||
|
||
Dismiss an interrupt. The user variable .PICLR
|
||
is set to -1, thereby enabling interrupts, and the PC
|
||
receives the quantity <new PC>.
|
||
|
||
This is for the so-called "old-style" interrupt scheme.
|
||
See also the DISMIS symbolic system call, which
|
||
is ordinarily used with the "new-style" vectored
|
||
interrupt scheme, but may be used in either case.
|
||
|
||
Typically .DISMISS is used in this manner:
|
||
|
||
LOC 42
|
||
JSR TSINT ;pointer to interrupt handler
|
||
LOC 100 ;or wherever
|
||
TSINT: 0 ;interrupt flags
|
||
0 ;PC as of interrupt
|
||
EXCH A,TSINT
|
||
TSINT1: TLZE A,<bit1> ;check for various interrupts
|
||
JRST <handler1> ;handlers return to TSINT1
|
||
TLZE A,<bit2>
|
||
JRST <handler2>
|
||
. . . .
|
||
MOVE A,TSINT ;restore accumulator
|
||
.DISMISS TSINT+1 ;dismiss interrupt
|
||
|
||
See ITS INTRUP for more information on interrupts.
|
||
|
||
.DISOWN chnum, disown an inferior
|
||
|
||
An inferior job should be open on channel <chnum>.
|
||
The job is caused to be no longer an inferior of
|
||
the executing job, and is made to be the top level
|
||
job of a disowned job tree. The usual reason for
|
||
disowning a job is so that it can continue to exist
|
||
after its former superior has been killed (for instance,
|
||
after the user who disowned it has logged out).
|
||
Another reason for disowning a subtree is to reown it
|
||
under a different superior, thus altering the shape
|
||
of the system's job-tree structure.
|
||
All channels on which the executing job has open the
|
||
job being disowned will be closed in the process of
|
||
disowning (see the .CLOSE uuo). Disowning is illegal if
|
||
<chnum> does not have an inferior open, or if the
|
||
subtree being disowned controls the console (see the
|
||
.ATTY uuo). If the jobs of the subtree have opened
|
||
the console, then the channels are not closed, but
|
||
are marked as "disowned tty"; certain operations
|
||
on such a channel will succeed, and others will hang
|
||
until the tree is re-owned and a console tty given
|
||
to the job. Such channels appear to be open on
|
||
tty number %TINON=77 octal.
|
||
A disowned job is distinguished by the fact that
|
||
bit 4.9 of its .APRC user variable is set.
|
||
A disowned job never succeeds in executing the RELOAD symbolic
|
||
system call, even if it is the top level job in its tree.
|
||
When a job tree is logged out, any micro-tapes assigned
|
||
to the uname of that job tree are de-assigned (see the
|
||
.ASSIGN and .DESIGN uuo's), but only if the job tree is
|
||
not disowned.
|
||
All disowned jobs share a resource word for purposes of
|
||
scheduling, in the same way that all jobs in a single
|
||
non-disowned tree share a resource word. Thus all disowned
|
||
jobs tend collectively to use no more runtime than any
|
||
single non-disowned job tree.
|
||
Furthermore, individual disowned jobs are given only 1/4
|
||
the priority to run as a non-disowned job. This does
|
||
not apply, however, if the disowned job in question has
|
||
.MASTER mode, or controls the 340 display, the E&S display,
|
||
the vidisector, the arm, the LPT (line printer), or the
|
||
PLT (plotter).
|
||
When operating under heavy loads, the swapper prefers to
|
||
swap out disowned jobs rather than non-disowned jobs.
|
||
|
||
The DETACH symbolic system call makes a non-disowned tree
|
||
disowned.
|
||
|
||
When a non-disowned top-level job encounters
|
||
a fatal interrupt, the system will make it disowned and
|
||
print a suitable message on the system console and on
|
||
the job's console (if it has one). The disowned tree
|
||
can then be reowned with DDT and debugged.
|
||
|
||
.DMPCH ac, OBSOLETE mung dump check bit
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been superseded by the RDMPBT
|
||
and SDMPBT symbolic system calls.
|
||
|
||
The accumulator should contain a channel number
|
||
in the right half, which should have a disk channel
|
||
open on it. The left half describes any alterations
|
||
to be made to the dump check bit for the open file:
|
||
4.9 Set dump check bit.
|
||
4.8 Clear dump check bit.
|
||
The state of the dump check bit (possibly after setting)
|
||
is returned in accumulator <ac> in bit 1.1.
|
||
The dump check bit is used by the magtape file backup
|
||
system to keep track of which files have been backed
|
||
up on magtape. This bit therefore should not be
|
||
twiddled light-heartedly. The "!" you sometimes see
|
||
in front of a date in a disk file directory is present
|
||
iff the dump check bit for the file is zero.
|
||
|
||
.DSTART [start-addr] start the display
|
||
; skip if successful
|
||
|
||
This system call is used to start the E&S or 340 display processor,
|
||
whichever one the system has. If it has neither, the uuo is
|
||
an illegal operation and gives a %PIILO interrupt.
|
||
.DSTART assigns the display to the executing job if it is available,
|
||
and skips if successful. If the display is not available
|
||
.DSTART does not skip.
|
||
|
||
In the case of the 340 display, the effective address of the
|
||
.DSTART is the address of the user's display list. This can
|
||
be either a single BLKO pointer (if the word is negative), or
|
||
the first word in a linked list (if the word is positive).
|
||
The right half of each word in the linked list is zero
|
||
to end the list, or the address of the next word in the list.
|
||
The left half of each word in the linked list is the address
|
||
(which must be less than 400000!) of a BLKO pointer. If this
|
||
address is zero, or the BLKO pointer is zero, it is ignored
|
||
(this allows "jump-type" entries in the list.)
|
||
The display will continually execute the commands pointed
|
||
to by this list. It is OK to change the list, or the single
|
||
BLKO pointer, while the display is running, provided everything
|
||
always points to valid data.
|
||
The .DSTRTL uuo is the same as .DSTART except that it uses
|
||
regular AOBJN pointers instead of BLKO pointers.
|
||
|
||
In the case of the E&S display, the argument to .DSTART contains
|
||
in the right half, the address at which the display program will
|
||
start, and in the left half, a code to determine modes of
|
||
operation: There are four 3-bit fields in this code:
|
||
|
||
3.1-3.3 Start mode. Only the 3.1 bit is significant. If set,
|
||
the display is started in single step mode.
|
||
3.4-3.6 Action to take on Program stop.
|
||
3.7-3.9 Action to take on Hit stop.
|
||
4.1-4.3 Action to take on Memory stop.
|
||
|
||
Each of the three Action fields is decoded as follows:
|
||
|
||
0 Restart from address of the last .DSTART.
|
||
1 Continue after the stop condition has been reset.
|
||
2 Stop.
|
||
3 (Reserved).
|
||
4 Interrupt and restart.
|
||
5 Interrupt and continue.
|
||
6 Interrupt and stop.
|
||
|
||
.DSTEP step the E&S display
|
||
|
||
The .DSTEP call will step the display processor one instruction
|
||
cycle if it has been stopped (.DSTOP) or started (.DSTART) in
|
||
step mode. If the display is not stopped, .DSTEP will first
|
||
simulate a .DSTOP. If the display is not the executing job's,
|
||
no action is taken.
|
||
|
||
The .DSTEP call is ignored by the 340 display.
|
||
|
||
.DSTOP stop the display
|
||
|
||
The .DSTOP call will stop the E&S or 340 display processor,
|
||
if the display belongs to the executing job.
|
||
|
||
.DSTRTL start the display
|
||
|
||
In the case of the 340 display, this is the same as
|
||
.DSTART (q.v.) except that the display will use AOBJN
|
||
pointers instead of BLKO pointers.
|
||
|
||
In the case of the E&S display, this
|
||
crashes the system. Maybe someday this will be fixed.
|
||
|
||
.DTTY devour the tty
|
||
|
||
.DTTY is used when a job decides that it wishes to
|
||
retain the tty. It skips if it succeeds; it fails if
|
||
the job was already in the state of wishing to retain
|
||
the tty, or if it had never had the tty. If the tty had
|
||
actually belonged to some (possibly indirect) inferior, it
|
||
will belong after the .DTTY to the job that executed it.
|
||
A job need not have the tty to do a .DTTY.
|
||
See ITS TTY for a full explanation of .DTTY.
|
||
See also the .ATTY uuo, and the .TTY user variable.
|
||
|
||
.DWORD [word] send word to E&S display
|
||
|
||
The specified word is sent to the E&S display via
|
||
the DATAO instruction. The display is stopped first
|
||
via .DSTOP if necessary.
|
||
|
||
This system call is ignored if there is no E&S display
|
||
or the executing job does not own it.
|
||
|
||
.EOFC ac, OBSOLETE end of file character
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been obsoleted and not replaced.
|
||
|
||
Accumulator <ac> receives the eof character used to
|
||
pad the end of the file open on the channel specified
|
||
by the contents of <ac> before the uuo is executed.
|
||
Apparently early microtape files used 141 as the pad
|
||
character.
|
||
|
||
.EVAL ac, evaluate squoze symbol
|
||
;skip if successful
|
||
|
||
Before the uuo is executed, accumulator <ac> should
|
||
contain the squoze code for a symbol. This symbol
|
||
is looked up in the symbol table used by exec DDT
|
||
(the one used to debug ITS); this table contains
|
||
symbols defined within ITS. The uuo fails to
|
||
skip if the symbol is not found; otherwise the value
|
||
is placed in <ac> and the uuo skips.
|
||
|
||
This uuo offers a useful method of obtaining
|
||
information from ITS, when combined with the .GETLOC
|
||
uuo or with absolute memory pages; for example,
|
||
to find out how many irrecoverable disk errors there
|
||
have been, PEEK .EVAL's the symbol QIRRCV and examines
|
||
that location in the system. Naturally, this is more
|
||
risky than using a system call, since the system's
|
||
symbols may be changed. One protection against that
|
||
is to make an entry in the file AI:SYSTEM;EVSYMS >
|
||
mentioning which symbol is being .EVAL'ed by which
|
||
program. Then, there will probably be warning from
|
||
ITS hackers of any change.
|
||
|
||
.FDELE fblock OBSOLETE delete or rename file
|
||
;skip if successful
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been superseded by the DELETE,
|
||
RENAME, and RENMWO symbolic system calls.
|
||
|
||
This uuo may be used to delete and rename files.
|
||
It points to a five-word block describing the
|
||
operation to be performed. There are three cases.
|
||
|
||
[1] Delete a file.
|
||
|
||
fblock: SIXBIT \ dev\ ;right-justified device name
|
||
SIXBIT \fname1\ ;file name 1
|
||
SIXBIT \fname2\ ;file name 2
|
||
0 ;zero
|
||
--- ;not examined
|
||
|
||
[2] Rename a file open for writing on channel <chnum>.
|
||
|
||
fblock: --- ;not examined
|
||
0 ;zero
|
||
<chnum> ;channel number
|
||
SIXBIT \fname1\ ;new file name 1
|
||
SIXBIT \fname2\ ;new file name 2
|
||
|
||
[3] Rename an arbitrary file.
|
||
|
||
fblock: SIXBIT \ dev\ ;right-justified device name
|
||
SIXBIT \fname1\ ;old file name 1
|
||
SIXBIT \fname2\ ;old file name 2
|
||
SIXBIT \fname1\ ;new file name 1
|
||
SIXBIT \fname2\ ;new file name 2
|
||
|
||
In cases [1] and [3], if the device specified has
|
||
true directory structure, the .SNAME user variable
|
||
for the executing job is used as the directory name.
|
||
Also, the file names (for case [1]) or the old file
|
||
names (for case [3]) are subject to input translation
|
||
(see the TRANAD symbolic system call).
|
||
If the device is not file structured, .FDELE
|
||
succeeds and skips. If .FDELE fails, it returns
|
||
an error code on channel 0 which can be retrieved via
|
||
the .STATUS uuo or the ERR device.
|
||
|
||
.FEED chnum, feed paper tape
|
||
;skip if successful
|
||
|
||
If device PTP (the paper tape punch) is open on
|
||
channel <chnum>, the uuo punches one line of blank
|
||
tape and skips. Otherwise it fails and does not skip.
|
||
|
||
.GENNUM ac, generate number
|
||
|
||
Accumulator <ac> receives a unique generated number
|
||
which will not be generated again for a very long
|
||
time (unless the system crashes, in which case the
|
||
counter is reset, of course).
|
||
[ In ITS 1554 and later. ]
|
||
|
||
.GENSYM ac, generate symbol
|
||
|
||
Accumulator <ac> receives the sixbit name of a
|
||
unique generated symbol which will not be generated
|
||
again for a very long time (unless the system
|
||
crashes, in which case the counter is reset, of
|
||
course).
|
||
|
||
.GETLOC ac, get absolute location
|
||
|
||
The accumulator <ac> should contain
|
||
an absolute address in the left half and an address
|
||
within the executing job in the right half.
|
||
The contents of the absolute location specified is
|
||
deposited in the location specified within the job.
|
||
This is useful for examining locations within the
|
||
system. However, if many locations are to be
|
||
examined, or if a location is to be examined many
|
||
times, it is far more efficient to map the absolute
|
||
page(s) containing the location(s) of interest into
|
||
the job's core map as read-only memory; the job
|
||
can then examine the locations at top speed without
|
||
having to go through the system uuo handler.
|
||
Such page mappings can be established via the .CBLK
|
||
uuo or the CORBLK symbolic system call.
|
||
|
||
.GETSYS ac, get system data
|
||
;skip if successful
|
||
|
||
Accumulator <ac> should contain an AOBJN pointer to a data area in
|
||
the user's core. (A zero left half means the data area extends to
|
||
the end of core.) Accumulator <ac+1> should contain the sixbit
|
||
name of a system data area. The specified system data area is
|
||
transferred into the user's core in such a way that the data is
|
||
consistent (i.e. interrupts are inhibited in appropriate ways,
|
||
etc.). If the .GETSYS is successful, <ac> is updated to point to
|
||
the unused part of the user's data area.
|
||
|
||
If the named data area does not exits, <ac+1> is cleared. If the
|
||
area in the user's core is too small, the left half of <ac> is
|
||
replaced with the negative of the correct size. In both of these
|
||
cases .GETSYS fails to skip.
|
||
|
||
Valid data areas are:
|
||
MEMORY Memory tables.
|
||
UTAPE Micro-tape variables.
|
||
NCPSM Network control program socket map.
|
||
NCPPQ Network control program pending RFC queue.
|
||
NCPHT Network control program host table.
|
||
USERS User variables for all jobs.
|
||
USER User variables for job whose user index is in <ac+2>.
|
||
Formerly a uname-jname pair was accepted in <ac+2>
|
||
and <ac+3>, but this is no longer true (ANCIENT HISTORY).
|
||
GETS Valid sixbit .GETSYS area names.
|
||
DEVS Valid sixbit built-in device names. (Doesn't include those on
|
||
DEVICE directory.)
|
||
CALLS Official system symbol table. Squoze symbols and values for
|
||
UUO's, .USET variables, and bits DEFSYM'ed in SYSTEM;BITS.
|
||
IMPX Input multiplexor data area.
|
||
CLINK Core link device variables.
|
||
DSYMS Exec DDT symbol table. Squoze symbols and values.
|
||
USYMS Squoze symbols and values for .USET variables only.
|
||
(Does -not- contain .RMEMT or .SMEMT, but rather .MEMT.
|
||
Used by DDT when you type ".MEMT/".)
|
||
CHDEVS Device names, from .RCHST table.
|
||
NCALLS Valid sixbit names for symbolic system calls.
|
||
USRVAR Valid sixbit user variable names for USRVAR system call.
|
||
TTYVAR Valid sixbit tty variable names for TTYVAR system call.
|
||
ITSNMS Valid sixbit names of all local ITS machines.
|
||
|
||
Names which used to be valid but are no longer (ANCIENT HISTORY):
|
||
TRANS Translation tables.
|
||
OMPX Output multiplexor data area.
|
||
|
||
PEEK used to use this uuo to get system information.
|
||
Nowadays it merely maps systems pages into its core
|
||
image, thereby gaining efficiency at some small cost
|
||
in accuracy.
|
||
|
||
.GSNAME ac, ANCIENT HISTORY get system name
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function has been superseded by .SUSET of .RSNAM.
|
||
Its opcode has been recycled as .REALT.
|
||
|
||
Put the executing job's .SNAM user variable
|
||
into accumulator <ac>; this is the default directory
|
||
name ("system name") for the job.
|
||
|
||
.GUN ac, gun down a job tree
|
||
;skip if successful
|
||
|
||
Accumulator <ac> should contain the user index of the
|
||
top level job of a job tree. That job tree is expunged
|
||
from the system. All the jobs are closed and killed.
|
||
This is to be used as a last resort to flush hung
|
||
and worthless jobs. The system program LOCK
|
||
contains a command which performs this operation.
|
||
The system job will print a message on the system console
|
||
describing what job was gunned and who gunned it.
|
||
|
||
.HANG hang until condition satisfied
|
||
|
||
The .HANG uuo is to make it easy for programs to wait for various
|
||
conditions. It should be used the way a JRST .-1 would be used in
|
||
a stand-alone program. Explicitly, it should be preceded by an
|
||
instruction that will skip or jump if the awaited condition is
|
||
true. Because the system must understand that instruction, only
|
||
certain instructions are allowed to be used (any others cause
|
||
illegal operation interrupts (%PIILO, bit 1.6 of the .PIRQC user
|
||
variable)). They are: SKIP, JUMP, AOS, SOS, AOJ, SOJ, CAI, and CAM
|
||
class instructions, -all- test instructions, CONSO and CONSZ (which
|
||
work only if the job is in .IOTLSR mode, and the processor is not a
|
||
KS10), SKIP and JFCL, which are used to hang forever (really, until
|
||
some interrupt routine jumps away instead of returning), SKIPA and
|
||
CAIA, which are used to cause rescheduling but don't actually hang,
|
||
and JFFO. XCT is also allowed, but the ultimate end of the chain
|
||
of XCT's must be one of the instructions listed above.
|
||
|
||
In the case of hanging forever, the job is specified to be
|
||
desirable to swap out, since it may hang for a long time.
|
||
|
||
.HANG conditional instructions which reference only ACs are treated
|
||
as hang-forever, except that they don't set the desire-to-swap-out
|
||
flag, since the contents of the AC can't change without the job
|
||
being interrupted out of the .HANG.
|
||
|
||
When a job executes a .HANG, the system effectively executes the
|
||
preceding instruction at each schedule to decide whether the job
|
||
may be run (cf. the .FLS user variable). If the job is
|
||
interrupted, the interrupt routine will find that the saved PC
|
||
points to the instruction before the .HANG instruction. It may
|
||
dismiss normally, in which case the .HANG will be executed again
|
||
unless the condition has become true (of course, the interrupt
|
||
routine may do something to make the condition true).
|
||
|
||
.HANG takes care to be certain that any side effects of the
|
||
instruction will be performed when the condition finally becomes
|
||
true. .HANG does this by always exiting by jumping to .-1. Thus
|
||
an AOSE instruction followed by a .HANG really will increment the
|
||
referenced location after it becomes -1, JFFO AC, followed by .HANG
|
||
really will store a bit number into AC+1, and TLZN followed by
|
||
.HANG really will clear out the bit after it comes on.
|
||
|
||
While a job is waiting in a .HANG, the system does not re-examine
|
||
the AC used by the conditional instruction each time it executes
|
||
that instruction; it uses what was in the AC when the .HANG was
|
||
entered. However, there is no way for this AC to change without
|
||
the job being interrupted out of the .HANG so it can change it, or
|
||
PCLSRed out when it's superior changes it. Also, the effective
|
||
address calculation is not repeated, and if the actual instruction
|
||
supplied is an XCT, the XCT'd instruction is not re-fetched.
|
||
Therefore, it does not work to expect the condition to become true
|
||
because the contents of a memory location indirected through or
|
||
XCTed will change. Because an interrupt always causes the .HANG to
|
||
be redone, it does work to expect the interrupt routine to change
|
||
the AC or the indirect pointer in order to make the instruction
|
||
skip.
|
||
|
||
In the special case of waiting for a specific interval of time to
|
||
pass, the .SLEEP uuo (q.v.) may be useful. In the special case of
|
||
waiting for a network socket to change state, the NETBLK symbolic
|
||
system call may be useful.
|
||
|
||
.HANG ac, .HANG with timeout
|
||
|
||
[In ITS version 1622 and later]
|
||
|
||
.HANG with a non-zero AC field acts as the disjuction of .HANG and
|
||
.SLEEP, allowing a program to wait either for a condition to become
|
||
true or for some time to pass. The contents of accumulator <ac>
|
||
specify when the .HANG should stop waiting for the condition to
|
||
become true by returning to the instruction following the .HANG.
|
||
If non-negative, it is a length of time to wait in thirtieths of a
|
||
second. If negative, it means to wait until the system TIME
|
||
variable exceeds its absolute value.
|
||
|
||
As with .SLEEP, if the job is interrupted while .HANGing, the
|
||
accumulator will be found to contain the appropriate negative
|
||
number to allow the .HANG to be resumed properly when the interrupt
|
||
is dismissed.
|
||
|
||
If .HANG times out before the awaited condition becomes true, the
|
||
accumulator will contain 0. This is the only case in which .HANG
|
||
will exit to the following instruction.
|
||
|
||
If the awaited condition becomes true, so that the previous
|
||
instruction skips or jumps away, the accumulator will contain the
|
||
negative of the time at which the .HANG would have timed out.
|
||
|
||
|
||
.HANGUP dialnum, ANCIENT HISTORY hang up a dialed line
|
||
;skip if successful
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function is obsolete.
|
||
Its opcode has been recycled as .REVIVE.
|
||
|
||
This uuo was used to hang up on a line which had
|
||
been dialed by the .DIAL uuo.
|
||
|
||
.IFSET ac, if location contains what I think, set it
|
||
;skip if successful
|
||
|
||
The accumulator <ac> should contain an absolute 18.-bit
|
||
address in the right half and a pointer to a two-word block
|
||
in the left half. The first word of the two-word block
|
||
contains a test word, and the second a new value.
|
||
|
||
If the absolute core location specified contains exactly
|
||
the quantity specified by the test word, then the contents
|
||
of that location are replaced by the new value specified,
|
||
and the .IFSET skips. If the contents of the location
|
||
are not the same as the test word, the .IFSET fails.
|
||
|
||
This is similar to the .SETLOC uuo, but provides a
|
||
measure of safety if the contents of the location
|
||
may be volatile. Like the .SETLOC uuo, if the .IFSET
|
||
succeeds the system job prints out a message on the
|
||
system console detailing the old and new contents
|
||
of the location and who modified it.
|
||
|
||
.IOPDL reset I/O pdl
|
||
|
||
The I/O channel pdl of the executing job is reset.
|
||
Entries on the I/O pdl contain the channel number
|
||
from which they were pushed; .IOPDL is equivalent
|
||
to just enough .IOPOP's (possibly none) to clear
|
||
the I/O pdl, popping each entry into the channel
|
||
it was pushed from.
|
||
See the .IOPUSH and .IOPOP uuos, and the .IOC, .IOS,
|
||
.IOP user variables.
|
||
|
||
.IOPOP chnum, pop I/O channel
|
||
|
||
This uuo is the inverse of the .IOPUSH uuo.
|
||
The top entry of the I/O pdl is popped into
|
||
channel <chnum>, which may be a different channel
|
||
from the one the entry was pushed from.
|
||
A .CLOSE is first performed on the channel popped into.
|
||
If the channel originally pushed was a closed channel,
|
||
then after popping channel <chnum> will be closed.
|
||
If the I/O pdl has no entries on it, IOC error
|
||
number 5 is signaled on channel <chnum>, giving the
|
||
job a class 2 interrupt (%PIIOC, bit 1.9 of the .PIRQC
|
||
user variable).
|
||
|
||
If the channel number is variable, the IOPOP symbolic
|
||
call may be used.
|
||
|
||
See the .IOPUSH and .IOPDL uuos, and the .IOC, .IOS,
|
||
and .IOP user variables.
|
||
See also the .UCLOSE uuo for a discussion of what
|
||
occurs when a job open on a pushed channel is killed.
|
||
|
||
.IOPUSH chnum, push I/O channel
|
||
|
||
The channel <chnum> is pushed onto the I/O pdl
|
||
for the executing job. A channel may be pushed
|
||
whether or not it is actually open; if it is open,
|
||
transactions on the channel are suspended when
|
||
it is pushed, and any transfer on that channel is
|
||
inaccessible until the pushed entry is popped
|
||
again. The error status and access pointer are
|
||
correctly saved as well. The channel number <chnum>
|
||
is also saved in the pdl entry for use by the .IOPDL uuo.
|
||
After the channel has been pushed it is returned to
|
||
a non-open state (this is not the same as being closed
|
||
since closing implies terminating the I/O transaction).
|
||
The I/O pdl for each job has room for eight entries;
|
||
if all are in use .IOPUSH will signal IOC error
|
||
number 6 on channel <chnum>, giving the job a
|
||
class 2 interrupt (%PIIOC, bit 1.9 of the .PIRQC user variable).
|
||
|
||
If the channel number is variable, the IOPUSH
|
||
symbolic call may be used.
|
||
|
||
See the .IOPOP and .IOPDL uuos, and the .IOC, .IOS,
|
||
and .IOP user variables.
|
||
See also the .UCLOSE uuo for a discussion of what
|
||
occurs when a job open on a pushed channel is killed.
|
||
|
||
.IOT chan,[foo] input/output transfer
|
||
|
||
Input or output is performed, according to the device
|
||
open on the specified channel and the mode in which it
|
||
was opened. If an error occurs, any of several IOC
|
||
errors may occur, giving the job a class 2 interrupt
|
||
(%PIIOC, bit 1.9 of the .PIRQC user variable.)
|
||
|
||
In "unit mode", foo is the datum to be transferred
|
||
in or out. (In the case of input, the word pointed
|
||
to by the effective address of the .IOT is modified.)
|
||
|
||
In "block mode", foo is an AOBJN pointer to the data
|
||
to be transferred in or out. The left half is the
|
||
negative of the number of words, the right half is
|
||
the address of the first word. The pointer is updated
|
||
as the transfer proceeds. When the .IOT returns the
|
||
pointer will have been fully counted out, that is
|
||
the left half will be zero, except in the case of input
|
||
that stops because the end of the file was reached.
|
||
|
||
In the case of block mode on an intrinsically character
|
||
device, such as TTY, bits 4.9-4.7 of the pointer are
|
||
fiddled to indicate which byte in the word is being
|
||
processed.
|
||
|
||
The VID, NVD, and IMX devices handle .IOT in a non-standard
|
||
way because they do both input and output at the same time.
|
||
|
||
The symbolic system calls IOT and SIOT are versions of
|
||
.IOT which have additional features.
|
||
|
||
.IOTLSR ac, iot loser mode
|
||
|
||
This uuo is used to request permission from
|
||
the system to run in user I/O mode (bit 4.3 of the PC).
|
||
In this mode a program is in user mode (and thus is
|
||
subject to user mode page mapping), but may perform
|
||
I/O instructions without trapping to the system.
|
||
This facility must naturally be used with discretion.
|
||
It should be noted that ITS will interpretively
|
||
simulate most I/O instructions anyway, if it thinks
|
||
that the operation will not harm the time-sharing
|
||
system. For example, one may use DATAI to read the
|
||
console switches even when not in .IOTLSR mode.
|
||
This simulation is slower than direct execution
|
||
of I/O instructions, but much safer.
|
||
|
||
If bit 4.9 (the sign bit) of accumulator <ac> is zero,
|
||
.IOTLSR mode is relinquished, even if it was not formerly
|
||
possessed by the job.
|
||
If bit 4.9 is one, then the executing job is granted .IOTLSR
|
||
mode, and the system job prints a message on the system
|
||
console to document the fact.
|
||
|
||
.IPDP chnum, interrupt PDP-6
|
||
|
||
Channel <chnum> should have the PDP-6 open as an
|
||
inferior procedure; if it does not, .IPDP does nothing.
|
||
Otherwise the PDP-6 receives an interrupt.
|
||
|
||
The PDP-6 can also interrupt the PDP-10; when this occurs
|
||
a job with the PDP-6 open as an inferior will receive
|
||
an interrupt if enabled for it. See the .IFPIR
|
||
user variable for PDP-6 channel interrupts.
|
||
|
||
The interface between the PDP-6 and the PDP-10
|
||
is device 20 octal.
|
||
The interrupts are given via a CONO:
|
||
1.5 Interrupt other processor.
|
||
1.4 Clear interrupt flag.
|
||
1.3-1.1 Priority interrupt assignment.
|
||
The bits read by CONI are as follows:
|
||
1.4 Interrupt flag.
|
||
1.3-1.1 Priority interrupt assignment.
|
||
|
||
.ITYI ac, OBSOLETE input tty interrupt
|
||
;skip if successful
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been superseded by the .ITYIC uuo.
|
||
|
||
This uuo is exactly like .ITYIC except that it applies
|
||
only to the job's console, if any. This uuo is to be
|
||
flushed eventually.
|
||
|
||
.ITYIC ac, input tty interrupt on channel
|
||
;skip if successful
|
||
|
||
The specified accumulator <ac> should contain the
|
||
number of a channel which is open for tty input.
|
||
If an interrupt character is pending in that tty's
|
||
input buffer, that character replaces the channel number
|
||
in <ac> and the .ITYIC skips. It will fail if the
|
||
channel is bad, if it does not have a tty open, if the
|
||
tty is the job's console but the job does not possess it,
|
||
or if there is no interrupt character pending.
|
||
If the job does not possess its console and the job's
|
||
%TBINT bit is set in the .TTY user variable, the job
|
||
receives a class 2 word 1 interrupt (bit 4.2 in the
|
||
.PIRQC user variable).
|
||
|
||
This uuo is typically used in an interrupt routine
|
||
invoked by bit 1.1 (%PITYI) in the .PIRQC user variable or by
|
||
a word 2 I/O interrupt on a tty input channel.
|
||
If the .ITYIC does not skip the program should ignore
|
||
the interrupt entirely; this can happen due to certain
|
||
timing screws related to passing the console around
|
||
among several jobs.
|
||
|
||
See the TTYGET and TTYSET symbolic system calls, which
|
||
manipulate bits relevant to interrupt characters.
|
||
See the WHYINT system call, which (in the case of
|
||
TTY channels) is another way to do the same function
|
||
as .ITYIC.
|
||
See the .PIRQC and .TTY user variables.
|
||
See ITS TTY for a complete explanation of .ITYIC.
|
||
|
||
.LISTEN ac, listen to tty
|
||
|
||
If the job possesses its console, .LISTEN waits
|
||
for any output to be completed, and then returns the
|
||
number of input characters pending in the input
|
||
buffer. If the job does not possess a console, zero is
|
||
returned.
|
||
See also the LISTEN symbolic system call.
|
||
|
||
.LOGIN ac, ANCIENT HISTORY log in
|
||
;skip if successful
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function has been superseded by the LOGIN symbolic system call.
|
||
Its opcode has been recycled as .DEMON.
|
||
|
||
Accumulator <ac> contains the sixbit name to log in as.
|
||
Attempting to log in with a uname equal to 0 or -1 fails,
|
||
as does attempting to log in when already logged in.
|
||
|
||
.LOGOUT log out
|
||
|
||
The executing job and all direct inferiors are killed,
|
||
providing that it is the top-level job of its job tree.
|
||
All resources used by such jobs are freed. If the job
|
||
tree was console-controlled, the system job will print
|
||
a "console free" message on the freed console.
|
||
|
||
If the executing job is not top-level, .LOGOUT with zero
|
||
in the AC field merely returns without skipping.
|
||
(An inferior job may not commit suicide without the consent
|
||
of its superior.) .LOGOUT with a nonzero AC field will
|
||
cause a fatal %PIBRK interrupt which will inform the superior
|
||
that the job wants to be killed. If the superior is DDT,
|
||
it will kill the job. Here is how a program should exit:
|
||
|
||
SKIPE DEBUG ;optional debugging aid:
|
||
.VALUE ; job hangs if being debugged
|
||
.LOGOUT 1, ;log out or be killed.
|
||
|
||
.LOSE lossage-code report lossage
|
||
|
||
The job's Program Counter is set to the address of the
|
||
.LOSE minus one, the job's .VAL user variable is set
|
||
to the new PC,,the magic bits, and the
|
||
job is given a %PILOS interrupt. If the job does not
|
||
enable this interrupt, and it's superior is DDT, a
|
||
helpful error message will be printed.
|
||
|
||
The magic bits are documented in DDT ORDER.
|
||
The most useful ones are 0 for a random error,
|
||
1000 to ask DDT to type the error message corresponding
|
||
to the most recent system call error return, and
|
||
1400 if DDT should attempt to print the names of
|
||
the file that the call was opening/referring to.
|
||
|
||
The lossage codes are defined by DDT's interpretation of them.
|
||
The defined values are:
|
||
|
||
%LSSYS==1000 The last error code returned by a failing
|
||
system call describes the problem.
|
||
|
||
%LSFIL==1400 The last error code returned by a failing
|
||
system call, together with the name of the file
|
||
it was operating on, describe the problem.
|
||
That system call should be right before the .LOSE.
|
||
DDT will decode it to determine the filenames
|
||
(if it is an OPEN) or the channel number and then
|
||
the filenames via an RFNAME.
|
||
|
||
%LSSYS+errcode Means that the system call error code
|
||
<errcode> describes the problem.
|
||
|
||
%LSFIL+errcode Means that the error code <errcode>
|
||
together with the filenames being used
|
||
describe the problem.
|
||
|
||
1+.LZ <interrupt bit>
|
||
Means that the error should be handled as if it
|
||
were a fatal interrupt on the specified interrupt
|
||
bit. For example, the lossage code 1+.LZ %PIMPV
|
||
will to cause DDT to print out an MPV error message.
|
||
These lossage codes are more useful with the
|
||
LOSE and DISMIS symbolic system calls.
|
||
|
||
0 Signifies some other nondescript error condition.
|
||
|
||
The usual way of using this uuo is to put it
|
||
after a system call which is expected always to
|
||
skip. If it fails to skip, DDT will print an error
|
||
message based on what the system call is and what
|
||
it was failing to do (if you said 1000 or 1400).
|
||
Proceeding the job will retry the call.
|
||
|
||
See also the LOSE symbolic system call.
|
||
|
||
This call never gets an error, and never returns.
|
||
|
||
.LTPEN block hack light pen
|
||
|
||
This uuo hacks the light pen on the 340 display.
|
||
The address <block> should be the start of a six-word
|
||
block. The first word controls the mode:
|
||
4.9 0 => ignore other bits, 1 => examine them.
|
||
3.1 1 => hang until light pen seen at least once.
|
||
1.1 Used to set the multiple sighting mode (1 = on).
|
||
The six words of data returned are as follows:
|
||
wd 0 The word read by DATAI from the 340 display at
|
||
the last light pen interrupt.
|
||
wd 1 Number of times the light pen interrupted
|
||
since the last .LTPEN uuo.
|
||
wd 2 Sum of all Y coordinates since the last .LTPEN uuo.
|
||
wd 3 Sum of all X coordinates since the last .LTPEN uuo.
|
||
wd 4 The current linked display list pointer.
|
||
wd 5 The current BLKO display pointer.
|
||
If the job does not currently possess the 340 display,
|
||
words 0 and 1 are set to zero.
|
||
|
||
If the system has no 340, .LTPEN is ignored.
|
||
|
||
.MASTER ac, request/release master mode
|
||
;skip if successful
|
||
|
||
Accumulator <ac> should have bit 4.9=1 to request
|
||
master mode, or =0 to release it. Releasing master
|
||
mode always succeeds, even if the job did not have it.
|
||
Requesting master mode succeeds if the job already has
|
||
master mode, or if it has control of its tty (as determined
|
||
by bit 4.9 (%TBNOT) of the .TTY user variable).
|
||
Only one job at a time may have master mode; thus requesting
|
||
master mode may imply taking it from some other job.
|
||
|
||
A job in master mode gets double priority for run time;
|
||
that is, it tends to get twice as much run time as any other
|
||
job competing for run time. Furthermore, it has priority
|
||
in grabbing the 340 display from another user. (The precise
|
||
algorithm for grabbing the 340 is actually a function of
|
||
who has master mode and of the %TT340 and %TT3HP bits of
|
||
the TTYTYP variables of the jobs involved.)
|
||
|
||
Master mode should be used only when absolutely necessary.
|
||
Needless use of it is considered to be antisocial, and may
|
||
be grounds for harassment.
|
||
|
||
.MSPACE ac, ANCIENT HISTORY hack magtape unit 0
|
||
;skip if successful
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function has been superseded by .MTAPE.
|
||
Its opcode has been recycled as .DWORD.
|
||
|
||
Accumulator <ac> should have a function code.
|
||
The job should have device MT0 open.
|
||
Valid function codes are:
|
||
0 Rewind tape.
|
||
1 Space to end-of-tape.
|
||
2 Write end-of-file.
|
||
17 Hang until interrupt routine dies.
|
||
|
||
.MTAPE ac, hack magtape
|
||
;skip if successful
|
||
|
||
Accumulator <ac> should have a channel number in the
|
||
left half and an address in the right half.
|
||
(An illegal channel number causes an illegal operation
|
||
interrupt (%PIILO, bit 1.6 of the .PIRQC user variable).)
|
||
The channel should have device MTn open on it.
|
||
The address should point to a word with a signed count <n>
|
||
in the left half and a function code in the right half.
|
||
Valid function codes are:
|
||
0 Hang until tape motion done.
|
||
1 Rewind tape.
|
||
2 Rewind and dismount.
|
||
3 Write end-of-record (i.e. force current output buffer).
|
||
4 Write three inches of blank tape.
|
||
5 Write end-of-file.
|
||
6 Space over <n> records (negative => backwards).
|
||
Illegal for output channel.
|
||
7 Space over <n> files (negative => backwards).
|
||
Illegal for output channel.
|
||
10 Space to end-of-tape.
|
||
11 Stop all commands on this channel.
|
||
12 Set block size for writing to <n> words.
|
||
13 Return block size in <ac>. For reading, this is the size
|
||
of the record most recently swallowed by an IOT.
|
||
This operation may trigger one of the following IOC errors,
|
||
causing an interrupt (%PIIOC, bit 1.9 of the .PIRQC user variable):
|
||
1 ILLEGAL HARDWARE OPERATION ATTEMPTED
|
||
3 NON-RECOVERABLE DATA ERROR
|
||
9 DEVICE FULL
|
||
|
||
.NDIS ac, display <n> times
|
||
;skip if successful
|
||
|
||
This uuo is intended for use in taking pictures of
|
||
the 340 display screen. It sets a display control
|
||
variable from the contents of accumulator <ac>.
|
||
This variable has no effect if negative, but if
|
||
zero it inhibits display completely, and if positive
|
||
is decremented by 1 each time the current display
|
||
block or list of blocks is displayed. This call
|
||
fails to skip if the job does not possess the 340 display.
|
||
|
||
On systems which don't have a 340, .NDIS is ignored.
|
||
|
||
.NETAC chnum, OBSOLETE accept network connection
|
||
;skip if successful
|
||
|
||
This UUO is obsolete.
|
||
It is documented here for historical purposes only.
|
||
It now ALWAYS fails to skip.
|
||
|
||
Channel <chnum> should be be a network channel in
|
||
the "RFC received while listening" (%NSRFC) state (see
|
||
the ITS NCP file.)
|
||
This is used to accept a connection on a socket opened
|
||
with mode bit 1.5=1 (see the OPEN symbolic system call).
|
||
An RFC is sent back and the channel put into the
|
||
"connection open" state.
|
||
|
||
To reject a connection, the channel should be closed with
|
||
either the .CLOSE uuo or the CLOSE symbolic system call.
|
||
|
||
.NETINT chnum, OBSOLETE network interrupt
|
||
|
||
This UUO is obsolete.
|
||
It is documented here for historical purposes only.
|
||
It is now always a no-op.
|
||
|
||
Sends an interrupt out on the network socket associated
|
||
with channel number <chnum>, which should be open on
|
||
the NET device. If the local socket number is even
|
||
(receiving), an INR message is sent; otherwise, INS
|
||
is sent.
|
||
|
||
.NETS chnum, network send
|
||
|
||
Channel number <chnum> should be open for network
|
||
output. The .NETS uuo forces the current output buffer
|
||
to be sent. If the channel is open in the wrong direction,
|
||
IOC error 1 (ILLEGAL HARDWARE OPERATION ATTEMPTED) will occur,
|
||
possibly giving the user an IOC interrupt (%PIIOC, bit 1.9 of
|
||
the .PIRQC user variable).
|
||
|
||
.OPEN chnum,block open a file
|
||
;skip if successful
|
||
|
||
This uuo is semi-obsolete. The OPEN symbolic system
|
||
call is somewhat more flexible and consistent.
|
||
However, it is still reasonable to use .OPEN for
|
||
devices which do not use directory names.
|
||
|
||
A file is opened on the channel specified by <chnum>.
|
||
That channel number is then used to specify the file
|
||
on all further I/O transactions on that file.
|
||
The address <block> should be the first of several
|
||
locations:
|
||
wd 0 <mode bits>,,<device name>
|
||
wd 1 File name 1, if applicable.
|
||
wd 2 File name 2, if applicable.
|
||
wd 3 For the NET device, the foreign host number.
|
||
The directory name, if applicable, is taken from the
|
||
.SNAME user variable. Note that the device name may
|
||
be only three characters. The mode bits are as for
|
||
the OPEN symbolic system call.
|
||
|
||
If bits 4.9-4.7 of word 0 contain 2, then a link is
|
||
created. Words 1-5 are then as follows:
|
||
wd 1 From file name 1.
|
||
wd 2 From file name 2.
|
||
wd 3 To file name 1.
|
||
wd 4 To file name 2.
|
||
wd 5 To sname.
|
||
.OPEN should never be used in this way in new programs;
|
||
use the MLINK symbolic system call instead.
|
||
|
||
If the .OPEN fails to skip, an error code as for
|
||
.CALL OPEN will be returned on channel <chnum>.
|
||
|
||
.OPER random operation
|
||
|
||
The term .OPER is used to refer to a class of uuo's
|
||
which all have the same op-code and are decoded by
|
||
the value of their effective address. Those .OPER's
|
||
which take arguments generally specify either an
|
||
accumulator or an I/O channel number in the accumulator
|
||
field of the .OPER.
|
||
If the effective address is not a valid .OPER number,
|
||
then the job executing the .OPER receives an illegal
|
||
operation interrupt (%PIILO, bit 1.6 of the .PIRQC user
|
||
variable).
|
||
A list of currently valid .OPER's is given below in
|
||
numerical order.
|
||
|
||
.OPER 0 illegal
|
||
.OPER 1 .ITYI
|
||
.OPER 2 .LISTEN
|
||
.OPER 3 .SLEEP
|
||
.OPER 4 .SETMSK
|
||
.OPER 5 .SETM2
|
||
.OPER 6 .DEMON
|
||
.OPER 7 .CLOSE
|
||
.OPER 10 .UCLOSE
|
||
.OPER 11 .ATTY
|
||
.OPER 12 .DTTY
|
||
.OPER 13 .IOPUSH
|
||
.OPER 14 .IOPOP
|
||
.OPER 15 .DCLOSE
|
||
.OPER 16 .DSTOP
|
||
.OPER 17 .RDTIME
|
||
.OPER 20 .RDSW
|
||
.OPER 21 .GUN
|
||
.OPER 22 .UDISMT
|
||
.OPER 23 .GETSYS
|
||
.OPER 24 .IPDP
|
||
.OPER 25 .GETLOC
|
||
.OPER 26 .SETLOC
|
||
.OPER 27 .DISOWN
|
||
.OPER 30 .DWORD
|
||
.OPER 31 .DSTEP
|
||
.OPER 32 .GENSYM
|
||
.OPER 33 .LOGOUT
|
||
.OPER 34 .REALT
|
||
.OPER 35 .WSNAME
|
||
.OPER 36 .UPISET
|
||
.OPER 37 .RESET
|
||
.OPER 40 .ARMOVE
|
||
.OPER 41 .DCONT
|
||
.OPER 42 .CBLK
|
||
.OPER 43 .ASSIGN
|
||
.OPER 44 .DESIGN
|
||
.OPER 45 .RTIME
|
||
.OPER 46 .RDATE
|
||
.OPER 47 .HANG
|
||
.OPER 50 .EOFC
|
||
.OPER 51 .IOTLSR
|
||
.OPER 52 .RSYSI
|
||
.OPER 53 .SUPSET
|
||
.OPER 54 .PDTIME
|
||
.OPER 55 .ARMRS
|
||
.OPER 56 .UBLAT
|
||
.OPER 57 .IOPDL
|
||
.OPER 60 .ITYIC
|
||
.OPER 61 .MASTER
|
||
.OPER 62 .VSTST
|
||
.OPER 63 .NETAC
|
||
.OPER 64 .NETS
|
||
.OPER 65 .REVIVE
|
||
.OPER 66 .DIETIME
|
||
.OPER 67 .SHUTDN
|
||
.OPER 70 .ARMOFF
|
||
.OPER 71 .NDIS
|
||
.OPER 72 .FEED
|
||
.OPER 73 .EVAL
|
||
.OPER 74 .REDEF
|
||
.OPER 75 .IFSET
|
||
.OPER 76 .UTNAM
|
||
.OPER 77 .UINIT
|
||
.OPER 100 .RYEAR
|
||
.OPER 101 .RLPDTM
|
||
.OPER 102 .RDATIM
|
||
.OPER 103 .RCHST
|
||
.OPER 104 .RBTC
|
||
.OPER 105 .DMPCH
|
||
.OPER 106 .SWAP
|
||
.OPER 107 .MTAPE
|
||
.OPER 110 .GENNUM
|
||
.OPER 111 .NETINT
|
||
|
||
.ORGI ac, ANCIENT HISTORY read organ keboard
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function is obsolete.
|
||
Its opcode has been recycled as .PDTIME.
|
||
|
||
Read input from an electric organ keyboard and store in <ac>
|
||
through <ac+2>.
|
||
|
||
.ORGO ac, ANCIENT HISTORY write tone generator
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function is obsolete.
|
||
Its opcode has been recycled as .ARMRS.
|
||
|
||
Write output to a tone generator from <ac> through <ac+2>.
|
||
|
||
.PDTIME ac, PD time
|
||
|
||
Returns in accumulator <ac> the time since the beginning of the
|
||
year, measured in sixtieths of a second. If the time is not known,
|
||
-1 is returned. PD = Paul DeCoriolis, who hacked the original
|
||
clock on which this was based. Said clock ceased to work many
|
||
years ago.
|
||
|
||
.POTSET [block] read pots
|
||
|
||
This call gives the user a flexible means of controlling
|
||
program parameters via the input multiplexer.
|
||
|
||
.RBTC ac, robot console switches
|
||
|
||
The contents of accumulator <ac> are sent to the
|
||
robot console (device 514) with a DATAO. After a short
|
||
delay the result of a DATAI are returned in <ac>.
|
||
|
||
What the heck is device 514???
|
||
|
||
.RCHST ac, OBSOLETE read channel status
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been superseded by the RCHST
|
||
and RFNAME symbolic system calls.
|
||
|
||
Accumulator <ac> should contain a channel number
|
||
in the left half and an address in the right half
|
||
pointing to a block of several words.
|
||
The executing job receives an illegal operation
|
||
interrupt (%PIILO, bit 1.6 of the .PIRQC user variable)
|
||
if the channel number is illegal.
|
||
|
||
The block of words is filled with information
|
||
about the status of the channel. The general
|
||
pattern of this information is as follows, though
|
||
not all devices adhere to it strictly:
|
||
wd 0 Device name in the right half.
|
||
wd 1 First file name, if applicable.
|
||
wd 2 Second file name, if applicable.
|
||
wd 3 Sname (directory name), if applicable.
|
||
wd 4 Access pointer. Measured in words.
|
||
A byte pointer if in character mode, for some devices.
|
||
-1 if not randomly accessible.
|
||
wds 5-n Other data. May be garbage, or not stored,
|
||
depending on the device as specified by word 0.
|
||
|
||
See the RCHST symbolic system call for details
|
||
of what information is returned for specific devices.
|
||
Wd 0 from .RCHST has in its RH the LH of symbolic
|
||
RCHST's 1st value. Wds 1-4 from .RCHST are the same as
|
||
the 2nd-5th values returned by symbolic RCHST.
|
||
Wds 5 and up from .RCHST are the same as values 7 and up
|
||
of symbolic RCHST, except that they are not stored for
|
||
devices which do not return significant information in
|
||
them. Note that value 6 of the RCHST symbolic system
|
||
call is not available from .RCHST.
|
||
|
||
.RD500 ac, ANCIENT HISTORY read device 500
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function is obsolete.
|
||
Its opcode has been recycled as .IPDP.
|
||
|
||
Device 500 formerly purported to be some kind of clock.
|
||
|
||
.RD710 ac, ANCIENT HISTORY read device 710
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function is obsolete.
|
||
Its opcode has been recycled as .HANG.
|
||
|
||
Device 710 used to be a kind of clock on the PDP-6.
|
||
This uuo read a 24.-bit quantity from this clock,
|
||
measured in 4-microsecond ticks.
|
||
|
||
.RD760 ANCIENT HISTORY
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function is obsolete.
|
||
Its opcode has been recycled as .DWORD.
|
||
|
||
Device 760 of the PDP-6 used to be used for temporary
|
||
direct sense hookups. (For example, the low six
|
||
bits controlled lights on the hand of the AMF arm.)
|
||
This uuo returned the result of a DATAI on this device.
|
||
|
||
.RDATE ac, read date
|
||
|
||
The current date is returned in accumulator <ac> as a
|
||
word of sixbit characters "YYMMDD", where YY is the
|
||
year (modulo 100.), MM is the month, and DD is the day,
|
||
all as two-digit decimal numbers.
|
||
If the system does not know what the current date is,
|
||
-1 is returned.
|
||
|
||
.RDATIM ac, read date and time
|
||
|
||
This is exactly like the sequence
|
||
.RTIME ac,
|
||
.RDATE ac+1,
|
||
except that the timing error involved with crossing
|
||
midnight between execution of the two uuo's is avoided.
|
||
Thus accumulator <ac> receives the time of day as a word
|
||
of sixbit "HHMMSS", where HH is the hour (in 24.-hour
|
||
notation), MM is the minute, and SS is the second,
|
||
all as two-digit decimal numbers.
|
||
Accumulator <ac+1> receives the date as a word of sixbit
|
||
characters "YYMMDD" where YY is the year (modulo
|
||
100.), MM is the month, and DD is the day,
|
||
all as two-digit decimal numbers.
|
||
If one of the quantities is not known by the system,
|
||
-1 is returned for that quantity.
|
||
|
||
.RDSW ac, OBSOLETE read switches
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been superseded by DATAI.
|
||
|
||
The contents of the data switches on the PDP-10 console
|
||
are returned in accumulator <ac>.
|
||
The same effect can be achieved by using DATAI 0,<ac>
|
||
(or any arbitrary location instead of <ac>), which, if
|
||
the job is not in .IOTLSR mode, ITS will interpret
|
||
specially and simulate.
|
||
Neither .RDSW nor DATAI works correctly on KL10s.
|
||
Hopefully this will not inconvenience anyone.
|
||
On KS10s .RDSW no longer exists.
|
||
|
||
.RDTIME ac, read system time
|
||
|
||
The time since the system started running, measured in
|
||
thirtieths of a second, is returned in accumulator <ac>.
|
||
Thus the difference between two successive values gives
|
||
the amount of real time which passed between the two
|
||
executions of .RDTIME. This time does not include time
|
||
during which the system was temporarily down, for instance
|
||
stopped at a bug halt from which it was later continued
|
||
by a system hacker.
|
||
|
||
.REALT ac, real time hackery
|
||
;maybe skip on success (see below)
|
||
|
||
This uuo controls a fairly complex facility allowing
|
||
a job to get good service in real time. The contents
|
||
of the specified accumulator are decoded as follows:
|
||
%RLFLS 4.9 Turn off old clock rate, zero the tick count,
|
||
and release the real time facility.
|
||
%RLSET 4.8 Turn on new clock rate.
|
||
%RLUSR 4.7 Attempt to seize the real time facility.
|
||
%RLNPS 4.6 Do not settle for pseudo-real time status.
|
||
%RLPSD 4.5 Insist on pseudo-real time status.
|
||
%RLBLK 4.4 Block me except during high priority period.
|
||
%RLGET 4.3 Read into words 2-3 (see below) before
|
||
interpreting the other bits.
|
||
4.2-3.1 Reserved. Should be zero.
|
||
2.9-1.1 Pointer to four word block:
|
||
wd0 Frame time in sixtieths of a second.
|
||
Must fit in the right half.
|
||
wd1 Priority time in sixtieths of a second.
|
||
Must be less than 15 octal, and less
|
||
than or equal to half the contents
|
||
of word 0.
|
||
wd2 If bit 4.3 on, set the right half to
|
||
the frame time, and the left half to
|
||
the tick count since last examined.
|
||
wd3 If bit 4.3 on, set the right half to
|
||
the high priority time, and the left
|
||
half to 0 if currently at low priority
|
||
or -1 if currently at high priority.
|
||
|
||
The real time facility is interpreted as follows:
|
||
real time is broken up into cycles, each the number
|
||
of sixtieths of a second in length specified by the frame
|
||
time. At the beginning of each frame, the %PIRLT
|
||
bit (4.8) in the job's .PIRQC user variable is turned
|
||
on. This causes an interrupt if the corresponding
|
||
bit is on in the .MASK user variable.
|
||
Within each frame, the first <n> sixtieths are
|
||
high priority time for the job with the real time
|
||
facility, where <n> is the specified high priority time.
|
||
If a job has the facility, presently has high priority,
|
||
and otherwise wants to run, then it is scheduled above
|
||
all other jobs. This guarantees that a job will
|
||
get a certain amount of run time at specified intervals;
|
||
this is useful for responding to real-time conditions.
|
||
The system will not schedule the job during its low-priority
|
||
phase if it has requested that it be blocked (bit 4.4),
|
||
unless it gets an interrupt and is not using the new-style
|
||
interrupt system.
|
||
The .REALT uuo will skip only if the facility
|
||
was requested and successfully seized. In all other
|
||
cases it does not skip, even if the requested operation
|
||
succeeded. If an invalid quantity is supplied for
|
||
a frame time, or for the high priority time, an
|
||
illegal operation interrupt occurs
|
||
(%PIILO, bit 1.6 of the .PIRQC user variable).
|
||
|
||
.REDEF ac, redefine symbol to exec DDT
|
||
;skip if successful
|
||
|
||
The specified accumulator should contain the address of
|
||
a two word block:
|
||
wd0 SQUOZE bits,symbol
|
||
wd1 value
|
||
If the <bits> are all ones, then the symbol is deleted.
|
||
Otherwise it is defined with the specified value,
|
||
replacing any old value. This occurs in the symbol
|
||
table used by exec DDT, which is used to debug the
|
||
system, and which is used by the .EVAL uuo.
|
||
A .REDEF fails to skip only if it tries to add
|
||
a new symbol and fails for lack of room in the system.
|
||
|
||
.RESET chnum, reset I/O channel
|
||
|
||
I/O channel <chnum> is reset. This is exactly
|
||
like the symbolic system call RESET. What happens
|
||
is device-dependent; see the description of that call.
|
||
|
||
.REVIVE revive system
|
||
|
||
This uuo reverses the effect of the .SHUTDN uuo.
|
||
It is used by the REVIVE command of LOCK.
|
||
Jobs which have enabled it will receive an
|
||
interrupt (bit 1.7 of the .PIRQC user variable).
|
||
See the .DIETIME and .SHUTDN uuo's, and the SSTATU
|
||
symbolic system call.
|
||
|
||
.RLPDTM ac, read localized PD time and .RYEAR
|
||
|
||
This returns the time and date in <ac> and <ac+1>, in a binary
|
||
form. <ac+1> contains the result of .RYEAR; see the description
|
||
of that uuo for details. <ac> contains the "localized" number
|
||
of seconds since the beginning of the year. If this is divided
|
||
by the number of seconds in a day (86400.), the remainder will
|
||
be the number of seconds since midnight local time, and the
|
||
quotient will be the number of days since the beginning of the
|
||
year, with the (mis)feature that all years are considered to
|
||
include February 29. This is done so that date-printing
|
||
routines do not have to check for leap-year, but it does mean
|
||
that during the last 10 months of non-leap years the day number
|
||
is 1 greater than the correct Julian day. Bit 4.9 of <ac+1> is
|
||
set in this case.
|
||
|
||
Note also that when daylight savings time is in effect <ac> will
|
||
be advanced by one hour. Again this is done to simplify date
|
||
and time printing routines. Bit 4.7 of <ac+1> is set in this
|
||
case.
|
||
|
||
Note that .RLPDTM should be used instead of .PDTIME followed by
|
||
.RYEAR, since it guarantees consistency of the two values
|
||
returned.
|
||
|
||
|
||
.RRTIM ac, ANCIENT HISTORY read run time
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function has been superseded by the .RUNT user variable.
|
||
Its opcode has been recycled as .CBLK.
|
||
|
||
The job's run time is returned in accumulator <ac>.
|
||
See the .RUNT user variable.
|
||
|
||
.RSYSI ac, read system incarnation
|
||
|
||
Returns in <ac> the .FNAM2 of the system when it
|
||
was assembled. Thus, it is a version number in sixbit.
|
||
This is the same as the seventh value of the
|
||
SSTATU symbolic system call.
|
||
|
||
.RTIME ac, read time
|
||
|
||
The time of day is returned in accumulator <ac> as a word
|
||
of sixbit characters "HHMMSS", where HH is the hour
|
||
(in 24.-hour notation), MM is the minute, and SS is
|
||
the second, all as two-digit decimal numbers.
|
||
If the system does not know the time, -1 is returned.
|
||
See also .RDATIM.
|
||
|
||
.RYEAR ac, read year
|
||
|
||
Returns in accumulator <ac> a word as follows:
|
||
|
||
4.9 This year has 365. days, and it is after February 28.
|
||
4.8 This year is a leap year (366. days).
|
||
4.7 Daylight savings time is in effect.
|
||
4.6 The time of year is known.
|
||
4.2-3.9 If bit 4.6 set, the current day of the week.
|
||
Sunday=0, Monday=1, etc.
|
||
3.8-3.6 The day of the week of January 1 of this year.
|
||
3.5-3.1 Zero.
|
||
2.9-1.1 The year, not modulo 100., but as a full quantity,
|
||
e.g. 1969. or 1975.
|
||
|
||
If the system does not know the time, zero is returned.
|
||
|
||
.SETLOC ac, deposit in system
|
||
|
||
Expects the rh of <ac> to contain the address of a
|
||
location in physical core, and the lh of <ac> to point
|
||
to a word of data in the executing job's memory.
|
||
The job's argument word is copied into the addressed
|
||
location in physical core, and a message is printed
|
||
on the system console.
|
||
|
||
.SETM2 OBSOLETE set two interrupt masks
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been superseded by block-mode
|
||
.SUSET of .MASK and .MSK2.
|
||
|
||
The job's .MASK and .MSK2 user variables are set to
|
||
the respective contents of accumulators <ac> and <ac+1>.
|
||
|
||
.SETMSK ac, OBSOLETE set interrupt mask
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been superseded by .SUSET of .MASK.
|
||
|
||
The job's .MASK user variable is set to the contents of
|
||
accumulator <ac>.
|
||
|
||
.SHUTDN ac, shut down system
|
||
;skip on success
|
||
|
||
This uuo causes the system to prepare to go down.
|
||
(It is used by the KILL command in LOCK.)
|
||
Accumulator <ac> should contain a time interval,
|
||
in thirtieths of a second. The system will go down
|
||
exactly that much time after the present moment.
|
||
|
||
When the system prepares to go down, all jobs enabled
|
||
for it receive a system going down interrupt (%PIDWN, bit 1.7
|
||
of the .PIRQC user variable). (DDT prints a message when it
|
||
receives such an interrupt; part of this message is the
|
||
contents of the file SYS:DOWN MAIL.) This interrupt will
|
||
occur repeatedly every time 3/4 of the time from the previous
|
||
interrupt to the time of shutdown has elapsed, except that
|
||
interrupts will not occur less than ten seconds before shutdown.
|
||
(Thus, if the system were scheduled to go down in ten minutes,
|
||
interrupts would happen at the following times before shutdown:
|
||
10:00, 2:30, 0:37. If in five minutes: 5:00, 1:15, 0:17.)
|
||
When the magic moment arrives, all users are forceably logged
|
||
out, all jobs killed (except job trees whose top-level jobs
|
||
have the %OPLIV bit set in their respective .OPTION user variables
|
||
-- a feature used primarily by system daemons. Such trees are
|
||
expected to log out on their own after finishing their work),
|
||
all micro-tapes are flapped, the file SYS:DOWN MAIL is deleted,
|
||
"ITS NOT IN OPERATION" messages are printed on all consoles,
|
||
all Terminet motors are stopped, all files, directories, and TUTs
|
||
are written out, and everything generally put into a good state;
|
||
the system then calls DDT. It may be brought back up again
|
||
with XREVIV$X, which reloads demons and allows ^Z'ing once more.
|
||
|
||
The effects of a .SHUTDN may be reversed by a .REVIVE uuo.
|
||
See the .DIETIME and .REVIVE uuo's, and the SSTATU symbolic
|
||
system call.
|
||
|
||
.SLEEP ac, sleep
|
||
|
||
The .SLEEP uuo temporarily puts the executing job into
|
||
a dormant but interruptable state. The job consumes no
|
||
run time until the specified time interval has elapsed,
|
||
unless an interrupt occurs.
|
||
The contents of accumulator <ac> specify how long the
|
||
job is to sleep. If non-negative, it is the length
|
||
of time to sleep in thirtieths of a second. If negative,
|
||
it means to sleep until the system TIME variable (which
|
||
is read by the .RDTIME uuo (q.v.)) exceeds the absolute
|
||
value of the specified quantity; thus one can sleep
|
||
until a specific time.
|
||
|
||
If the job is interrupted in the middle of a .SLEEP,
|
||
the accumulator will be seen to contain the appropriate
|
||
negative number, either the one originally there or one
|
||
calculated from the original positive argument. Thus
|
||
re-executing the .SLEEP after dismissing the interrupt
|
||
will cause the .SLEEP to be resumed correctly.
|
||
|
||
Often it is desirable to "sleep" until some condition
|
||
other than the passing of time occurs. For this see
|
||
the .HANG uuo. For the special case of sleeping until
|
||
a network socket changes state, see the NETBLK symbolic
|
||
system call.
|
||
|
||
.STATUS chnum,loc I/O channel status
|
||
|
||
The status of I/O channel <chnum> is placed in
|
||
location <loc>. This is exactly like the STATUS
|
||
symbolic system call.
|
||
|
||
.SUPSET ac, SUPCOR set
|
||
|
||
The system job is partially controlled by a variable
|
||
called SUPCOR; .SUPSET XOR's the contents of accumulator
|
||
<ac> with that variable, returning the result of
|
||
the XOR in <ac>. Not all bits specified by <ac> take
|
||
effect; some are AND'ed out first. A message is printed on
|
||
the system console as for the .IFSET and .SETLOC uuo's.
|
||
|
||
The only really useful bits to set are as follows:
|
||
1.6 Update TV who lines.
|
||
1.2 Kill current file being spooled from TPL to LPT
|
||
(this is what the TPL command in LOCK uses).
|
||
|
||
.SUSET [suset spec] self USET
|
||
|
||
This uuo is used to examine and set user variables
|
||
associated with the executing job. See ITS USETS
|
||
for more information on .SUSET and .USET.
|
||
|
||
.SWAP ac, hack swapping
|
||
|
||
This uuo is illegal unless the system is being
|
||
debugged (the SYSDBG variable in the system is
|
||
non-zero; see the SSTATU symbolic system call).
|
||
|
||
The bits in the specified accumulator indicate
|
||
a test of the page swapping software in the
|
||
system:
|
||
4.9-4.7 Operation to perform.
|
||
0 Swap out the number of pages
|
||
specified in 2.9-1.1.
|
||
1,3,5,7 Go into a loop, waiting for
|
||
a few seconds and then referencing
|
||
location 2000 octal.
|
||
2 Hack the PCLSR test feature on
|
||
this job. Bits 2.9-1.1 specify
|
||
the test mode:
|
||
-1 Enter in hold mode.
|
||
0 Leave PCLSR test mode.
|
||
1 Enter in advance mode.
|
||
2 Enter in advance but don't ^Z.
|
||
4 Swap out the virtual page specified
|
||
by bits 2.9-1.1 for the user specified
|
||
by bits 3.9-3.1.
|
||
6 Swap out all pages for the user
|
||
specified by bits 3.9-3.1.
|
||
3.9-3.1 User index, for operations 4 and 6. A user
|
||
index of zero means the job executing the .SWAP.
|
||
(After all, it's hard to swap out the system!)
|
||
2.9-1.1 Number of pages for operation 0.
|
||
Test mode for operation 2.
|
||
Virtual page number for operation 4.
|
||
|
||
.TRANAD OBSOLETE translation-list add
|
||
|
||
.TRANDL OBSOLETE translation-list delete
|
||
|
||
.TRANS ANCIENT HISTORY translate file name
|
||
|
||
.UBLAT ac, micro-tape blat (?)
|
||
;skip if successful
|
||
|
||
The specified accumulator should contain a micro-tape
|
||
drive number. If the uuo succeeds, the drive is marked
|
||
as being in .UBLAT mode. In this mode, there are
|
||
only two permissible operations on the drive: to dismount
|
||
(flap) it, and to open it as one giant file. This uuo
|
||
is intended for use in reading micro-tapes written in
|
||
non-standard (e.g. DEC) format. Any .OPEN
|
||
on a micro-tape in .UBLAT mode will ignore the
|
||
file names, and all the blocks of the tape except block 0
|
||
will be read or written consecutively. No deletes, renames,
|
||
etc. are permitted. A .UBLAT will fail if the drive does
|
||
not exist, if the micro-tape directory has been read in
|
||
already by the system, or if the drive is not assigned
|
||
to the user whose job is trying to do a .UBLAT.
|
||
|
||
.UCLOSE chnum, USR close
|
||
|
||
This uuo is used to explicitly kill an inferior
|
||
open on channel <chnum>. Merely performing a
|
||
.CLOSE on the channel is not enough - that
|
||
dissociates the inferior from the I/O channel,
|
||
but does not destroy the inferior procedure.
|
||
When the procedure is destroyed, all of its
|
||
inferiors, direct or indirect, are destroyed also.
|
||
As each job is destroyed, its I/O channels
|
||
are automatically .CLOSE'd, and any facilities
|
||
such as .MASTER mode are released. The translation
|
||
lists are cleared for all destroyed jobs.
|
||
|
||
If any procedure whatever has a destroyed job
|
||
open on an I/O channel, that channel is automatically
|
||
closed; in particular, the channel <chnum> is
|
||
closed. All jobs with channels which have the job open
|
||
as a foreign user (as opposed to an inferior or a
|
||
job device) also receive a word 2 I/O interrupt on each
|
||
such channel (see the .IFPIR user variable).
|
||
If a procedure has pushed a channel with a job to be
|
||
destroyed onto its I/O pdl (see the .IOPUSH, .IOPOP, and
|
||
.IOPDL uuos, and the .IOC, .IOS, and .IOP user variables),
|
||
then that I/O pdl entry is replaced on the pdl with a special
|
||
entry for a pseudo-device called the "interrupt on .IOPOP
|
||
device", which delivers a word 2 interrupt when popped from
|
||
the I/O pdl and then closes its channel (thus it should be
|
||
impossible to perform any operation on this "device" except
|
||
.IOPOP). In this way a job can detect the fact that a
|
||
foreign job disappeared while it was pushed.
|
||
|
||
A procedure which executes a .UCLOSE receives
|
||
an I/O channel error interrupt (%PIIOC, bit 1.9 of the
|
||
.PIRQC user variable) if the specified channel
|
||
does not have an immediately inferior procedure
|
||
open on it.
|
||
|
||
.UDISMT ac, micro-tape dismount
|
||
;skip if successful
|
||
|
||
The specified accumulator should contain a micro-tape
|
||
drive number. If the uuo succeeds, the directory
|
||
is written back onto the micro-tape and excised from
|
||
the system's memory. The micro-tape is then physically
|
||
dismounted (this is known as "flapping" the tape, since
|
||
when it runs off the reel it goes flap, flap).
|
||
Micro-tapes should not be manually dismounted, for this
|
||
will cause the directories to get out of phase, messing
|
||
up that micro-tape and the next one to use that drive.
|
||
The .UDISMT will fail if any files are still
|
||
open on the micro-tape, or if someone else has the
|
||
drive assigned to him.
|
||
DDT makes this available via its command :FLAP.
|
||
See also the FLAP symbolic system call.
|
||
|
||
.UINIT ac, initialize micro-tape
|
||
;skip if successful
|
||
|
||
The specified accumulator should contain a micro-tape
|
||
drive number. If the uuo succeeds, the directory
|
||
of the micro-tape is initialized (containing no files).
|
||
The uuo fails if the drive does not exist, or if the
|
||
drive is not assigned to the user whose job is trying
|
||
to do the .UINIT.
|
||
See the .ASSIGN and .DESIGN uuos.
|
||
|
||
.UPISET ac, OBSOLETE user priority interrupt set
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been superseded by .SUSET of .PICLR
|
||
and/or the .DISMISS uuo and the DISMIS symbolic system
|
||
call.
|
||
|
||
The value of the ac is converted to -1 or 0 on the basis
|
||
of bit 4.9; this value is then exchanged with the .PICLR
|
||
user variable for the executing job. Thus the accumulator
|
||
gets the old value of .PICLR even as it specifies a
|
||
new value. This allows enabling and disabling of
|
||
interrupts.
|
||
|
||
.USET chnum,[uset spec] set (or get) user variable
|
||
|
||
This uuo is used to inspect or alter the user variables
|
||
of a job open on channel <chnum>, which may be a channel
|
||
open on the USR or BOJ device.
|
||
See ITS USETS for further information on .USET and .SUSET.
|
||
|
||
.UTNAM ac, set micro-tape name
|
||
;skip if successful
|
||
|
||
The specified accumulator should contain a micro-tape
|
||
drive number in the right half and a three character
|
||
sixbit name in the left half. If the uuo succeeds,
|
||
the name of the micro tape will be changed to the one
|
||
specified. The uuo fails if there is no such drive,
|
||
if it is in .UBLAT mode, or if it is assigned
|
||
to another user.
|
||
The name of a micro-tape can be examined with the .RCHST uuo.
|
||
|
||
.UTRAN loc user interrupt bit translate
|
||
;skip if successful
|
||
|
||
|
||
The effective address of .UTRAN must be a three-word
|
||
block:
|
||
loc: bit,, ;interrupt bit of inferior
|
||
0 ;uname returned here
|
||
0 ;jname returned here
|
||
|
||
The first word should be all zero, except for one
|
||
of bits 3.1-3.8; these correspond to inferior
|
||
interrupt bits in the .IFPIR user variable.
|
||
If the job executing job has an inferior for that
|
||
interrupt bit, .UTRAN stores the uname and jname
|
||
of the inferior in the second and third words and skips;
|
||
otherwise it fails to skip.
|
||
|
||
DDT uses this to find jobs which have been :FORGET'ed, or
|
||
accidentally created by open's of the USR: device via :PRINT
|
||
etc. Normally, superiors should keep track of the interrupt bit
|
||
and job names when the job is created, and this UUO should be
|
||
used only for exceptional cases.
|
||
|
||
See the .IFPIR, .UNAME, .JNAME, and .UIND user variables.
|
||
|
||
.VALUE [item] return value to superior
|
||
|
||
The job which executes a .VALUE receives a class 1
|
||
interrupt, which stops the job, turns on %PIVAL (bit 1.8)
|
||
in its .PIRQC variable, and interrupts its superior.
|
||
The word <item> is placed in the .VAL variable of
|
||
the executing job (this fact is a historical artifact,
|
||
relatively useless now).
|
||
|
||
The standard superior procedure (DDT) imposes the
|
||
following additional semantics on .VALUE:
|
||
If the effective address is zero, then DDT prints
|
||
out a message to that effect, and the job is left stopped.
|
||
This used to be the standard way to crap out from a grossly
|
||
irrecoverable situation (e.g. can't get core, or can't
|
||
open the TTY when started). Now .LOSE (q.v.) is preferred.
|
||
A typical sequence is:
|
||
|
||
GO: .OPEN TTYC,[SIXBIT \ !TTY\]
|
||
.VALUE ;unhappy if never got TTY
|
||
.CALL [ SETZ ? 'TTYGET ? 1000,,TTYC ? 2000,,A ? 402000,,B ]
|
||
.VALUE ;shouldn't lose if .OPEN succeeded
|
||
|
||
If the effective address is not zero, it is assumed to
|
||
point to an ASCIZ string in the memory of the job
|
||
which executed the .VALUE. DDT proceeds to
|
||
interpret these characters as if they were typed to
|
||
DDT on the console. Thus a job might execute
|
||
|
||
.VALUE [ASCIZ \:PROCED :DISOWN V\]
|
||
|
||
or something similar, to get itself running again and
|
||
disowned from its superior. See the DDT documentation
|
||
for specific details on .VALUE.
|
||
|
||
.VSCAN <block> read vidissector data
|
||
|
||
The effective address should point at an eleven word
|
||
block of parameters defining the points to be scanned,
|
||
the locations to be read into, the mode they are to be
|
||
read in, and whether the call should hang until the
|
||
scan is through.
|
||
|
||
.VSTST ac, test vidissector
|
||
|
||
This system call allows later control of and sensing by
|
||
a job that has overlapped computation with a .VSCAN. If
|
||
the contents of <ac> is positive, the .VSTST hangs till
|
||
the scan is over. If the contents of <ac> is negative,
|
||
any scan in progress is aborted. If the contents is zero,
|
||
the user's location then being stored into by the scan,
|
||
if any, replaces it.
|
||
|
||
.WMAR ac, ANCIENT HISTORY write mar address
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function has been superseded by .SUSET of .MARA.
|
||
Its opcode has been recycled as .DCONT.
|
||
|
||
The user's mar address variable is set from the
|
||
contents of the specified accumulator.
|
||
|
||
.WR760 ac, ANCIENT HISTORY write device 760
|
||
|
||
This uuo NO LONGER EXISTS.
|
||
It is documented here for historical purposes only.
|
||
Its function is obsolete.
|
||
Its opcode has been recycled as .DSTEP.
|
||
|
||
Device 760 of the PDP-6 used to be used for temporary
|
||
direct sense hookups. (For example, the low six
|
||
bits controlled lights on the hand of the AMF arm.)
|
||
This uuo used the contents of accumulator <ac> for a
|
||
DATAO to device 760.
|
||
|
||
.WSNAME ac, OBSOLETE write system name
|
||
|
||
This uuo is ARCHAIC and OBSOLETE.
|
||
It is documented here for historical purposes only.
|
||
Its use in new programs is to be avoided.
|
||
Its function has been superseded by .SUSET of .SNAME.
|
||
|
||
The system name for the job (used as a file directory name)
|
||
is set to the sixbit contents of accumulator <ac>.
|