ITS 1.5 Reference Manual Massachusetts Institute of Technology Artificial Intelligence Laboratory MAC-M-377 July 1969 Artificial Intelligence Memo No. 161A (Revised 161, June 1968) D. EastlakeAuthor of this memo, R. Greenblatt, J. Holloway, T. Knight, S. Nelson This reference manual consists of two parts. The first (sections 1 through 6) is intended for those who are either interested in the ITS 1.5 time sharing monitor for its own sake or who wish to write machine language programs to run under it. Some knowledge of PDP-6 (or PDP-10) machine language is useful in reading this part. The second part (sections 7, 8 and 9) describes three programs that run under ITS. The first program (DDT) is a modified machine language debugging program that also replaces the "monitor command" level (where the user is typing directly at the monitor) present in most time-sharing systems. The remaining two (PEEK and LOCK) are a status display and a miscellaneous utility program. It should be remembered that the McCulloch Laboratory PDP-6 and PDP-10 installation is undergoing continuous software and hardware development which may rapidly outdate this manual. * * * Work reported herein was supported by the Warren McCulloch Laboratory, an M.I.T. research program sponsored by the Advanced Research Projects Agency of the Department of Defense under Office of Naval Research contract number N00014-70-A-0362-0002. Reproduction of this document, in whole or in part, is permitted for any purpose of the United States Government. This manual was transcribed by David Carter from a scanned, typewritten original between February 27, 2004 and March 10, 2004. Effort has been put into being as accurate as possible in the transcription process, but due to the condition of the original, some errors have no doubt been made. Where there is uncertainty about a particular character or word, a best guess has been made. Please send any corrections to dcarter at sigfs dot org, especially if you have page 19 of the original! The original file came from ftp://publications.ai.mit.edu/ai-publications/0-499/AIM-161A.ps so refer to that if you're in doubt about anything. This came from http://www.sigfs.org/its-reference/ so you should check there for any updates. This file is available in PDF, HTML, ASCII, LaTeX and the original LyX, so hopefully one of those formats fits your need. If you convert this file to another widely-used format, please send me a copy so I can post it. Table of Contents 0.1 Introduction 0.2 Notation Used in this Manual 0.2.1 Numbers 0.2.2 Character Objects and Strings 0.2.3 Bit Positions and Intervals 0.2.4 Internal References 0.2.5 Other Conventions 0.3 Introduction to ITS 0.3.1 Preview of Section 1 0.3.2 Preview of Sections 2 and 3 0.3.3 Preview of Section 4 0.3.4 Preview of Section 5 0.3.5 Preview of Section 6 0.4 Introduction to DDT, PEEK, and LOCK 0.4.1 Preview of DDT 0.4.2 Preview of PEEK and LOCK 0.4.3 Preview of Appendices Chapter 1 Transmitting Commands to ITS 1.1 Control Z 1.1.1 Control Z on an Idle Teletype 1.1.2 Control Z on an Active Console 1.2 Trapping Instructions 1.2.1 UUO's 1.2.2 Non-UUO Trapping Instructions Chapter 2 The General Transaction of Input-Output 2.1 Philosophy and Organization 2.2 The .OPEN UUO 2.2.1 File Directories 2.2.2 The Translation Table 2.2.2.1 The .TRANS UUO 2.2.2.2 The .TRANAD UUO 2.2.2.3 The .TRANDL UUO 2.2.3 System Names 2.3 The .IOT UUO 2.3.1 The End of File Condition 2.3.2 The Device Full Condition 2.3.3 Non-Recoverable Data Errors 2.4 The .FDELE UUO 2.5 The .STATUS UUO 2.6 The Input-Output Channel Push Down Facility 2.6.1 The .IOPUSH and .IOPOP UUO's 2.6.2 The .IOPDL UUO 2.7 Miscellaneous Input-Output Related System Calls 2.7.1 The .CLOSE UUO 2.7.2 The .RESET UUO 2.7.3 The .ITYIC UUO 2.7.4 The .ACCESS UUO Chapter 3 Properties of Particular Devices 3.1 File Structured Devices 3.1.1 The DSK, DKn, and Pnm Devices 3.1.1.1 Links 3.1.2 The UTn Devices 3.1.2.1 The .UDISMT UUO 3.1.2.2 The .ASSIGN and .DESIGN UUO's 3.1.2.3 The .UBLAT UUO 3.1.2.4 The .UTNAM UUO 3.1.2.5 The .UINIT UUO 3.1.3 The COM and SYS Devices 3.2 Unit Character Oriented Devices 3.2.1 The Tnm and TTY Devices 3.2.1.1 The .ATTY and .DTTY UUO's 3.2.1.2 The .LISTEN UUO 3.2.1.3 The Dial Feature 3.2.2 The LPT Device 3.2.3 The PLT Device 3.2.4 The PTP and PTR Device 3.2.4.1 The .FEED UUO 3.2.5 The COD Device 3.3 Robotic Oriented Devices 3.3.1 The NVD, TVC, and VID Devices 3.3.1.1 The .VSCAN and .VSTST UUO's 3.3.2 The OMX Device 3.3.2.1 The .ARMOVE and .ARMOFF UUO's 3.3.3 The IMX Device 3.3.3.1 The .POTSET UUO 3.4 Miscellaneous Devices 3.4.1 The DIS and IDS Devices 3.4.1.1 The .DSTART and .DSTRTL UUO's 3.4.1.2 The .LTPEN UUO 3.4.1.3 The .DCLOSE UUO 3.4.1.4 The .DSTOP UUO 3.4.1.5 The .NDIS UUO 3.4.2 The USR Device 3.4.2.1 The PDP-10 3.4.3 The CLA, CLI, CLO and CLU Devices 3.4.4 The ERR Device 3.4.5 The TPL Device 3.4.6 The NUL Device Chapter 4 The Procedure 4.1 Philosophy and Organization 4.2 User Interrupts 4.2.1 The .SETM2 UUO 4.2.2 The .DISMISS UUO 4.3 The Core Allocator 4.3.1 The .CORE UUO 4.4 The Scheduler 4.5 The .SUSET UUO Chapter 5 Procedure Interaction 5.1 The Hierarchical Organization of Procedures 5.1.1 Procedure Creation 5.1.2 Attaching Disowned Procedure Trees 5.1.3 The .UTRAN UUO 5.2 Controls over an Immediately Inferior Procedure 5.2.1 The .UCLOSE UUO 5.2.2 The .DISOWN UUO 5.2.3 The .USET UUO 5.3 Communication to an Immediately Superior Procedure 5.3.1 The .VALUE UUO 5.3.2 The .BREAK UUO 5.4 The .GUN UUO Chapter 6 Miscellaneous System Calls and Features 6.1 The .LOGIN and .LOGOUT UUO's 6.2 Nonstandard Devices 6.2.1 The .RDSW UUO 6.2.2 The .RD760 and .WR760 UUO's 6.2.3 The .RD710 UUO 6.2.4 The .RD500 UUO 6.3 Various Times and the Date 6.3.1 The .RDTIME UUO 6.3.2 The .RTIME UUO 6.3.3 The .RDATE UUO 6.4 The MAR Feature 6.5 The System Job 6.5.1 The .SUPSET UUO 6.5.2 The System Going Down Feature 6.5.2.1 The .SHUTDN UUO 6.5.2.2 The .DIETIM UUO 6.6 Examining ITS 6.6.1 The .GETSYS UUO 6.6.2 The .GETLOC UUO 6.6.3 The .RSYSI UUO 6.6.4 The .EVAL UUO 6.7 The One Proceed Feature 6.8 Miscellaneous 6.8.1 The .SLEEP UUO 6.8.2 The .GENSYM UUO 6.8.3 The .IOTLSR UUO 6.8.4 The .SETLOC and .IFSET UUO's 6.8.5 The .MASTER UUO 6.8.6 The .REDEF UUO Chapter 7 DDT 7.1 Introduction 7.1.1 When DDT Starts 7.2 Monitor Mode Commands 7.2.1 Logging In and Out 7.2.2 Inter User Communication 7.2.3 Inferior Procedures 7.2.4 Files and Input-Output 7.2.5 The Control-P Feature 7.2.6 Miscellaneous 7.3 Interrupt Level and Context Tree Commands 7.4 Error Comments 7.5 DDT Mode Commands Chapter 8 PEEK 8.1 Introduction 8.2 Modes Available 8.3 IO Control 8.4 Miscellaneous Chapter 9 LOCK 9.1 Introduction 9.2 Commands Chapter 10 References Appendix A System Calls in Numeric Order Appendix B System Calls in Alphabetic Order Appendix C Available Symbolic Devices in Alphabetic Order Appendix D System Variables per User Appendix E Relics of ITS's Past Appendix F Further Sources of Information on ITS Appendix G Illustrative Console Output 0.1 Introduction The reader will find below in section 0.2 a few notes on the notation used in this manual. This is followed in section 0.3 by fairly extensive introductory and overview material on the Incompatible Time Sharing system monitor (ITS), the body of the information which appears in sections 1 through 6. Then in section 0.4 will be found a brief preview of the information appearing in sections 7, 8, and 9 about the three programs DDT, PEEK, and LOCK respectively. The first of these is a modified machine language debugging program that replaces the "monitor command" level (where the user is typing directly at the monitor) present in most time sharing systems. The remaining two are of a status display and miscellaneous utility nature. These three sections are each fairly self-contained as opposed to any particular section of the six on ITS which may be highly interdependent with other ITS sections. Finally, in section 0.5, appears a summary of the appendices to this manual. It should be remembered that Project MAC, AI Group, PDP-6 and PDP-10 installation is undergoing continuous software and hardware development that may rapidly outdate this manual. Please direct all corrections, additions or comments to the author at: Donald E. Eastlake III, Room 915, 545 Technology Square, Cambridge, Mass. 02139 0.2 Notation Used in this Manual 0.2.1 Numbers All numbers written in arabic numerals are octal except as follows: 1. those part of a name, such as a type "35" teletype 2. those part of the meta-structure of this manual (a page or section number for example) 3. or those that are floating point, which will always have more than one digit to the right of the decimal point such as 3.14159 For the meaning of numbers which appear to be floating point with one digit to the right of the decimal point and which are not section numbers, see section 0.2.3 below. Numbers that are written alphabetically are decimal. 0.2.2 Character Objects and Strings Character objects and strings are usually surrounded by quotation marks ("") and are relatively clear from context. Non-graphic characters typed by holding down the control key of a teletype and striking a graphic are represented by the graphic preceeded by a "^" as in ^A for "control-A". The special character alt.-mode (or escape or prefix) is represented by "$". 0.2.3 Bit Positions and Intervals Bit positions in thirty-six bit words (word length on the PDP-6 and PDP-10) are represented by the concatenation of a digit from 1 through 4, a ".", and a digit from 1 through 9. The first digit is a quadrant number starting from the right or least arithmetically significant part of the word. The second digit is a bit number in the quadrant, also starting from the right or least significant bit. Thus 1.1 is the lowest bit and 4.9 the sign bit. Bit intervals are represented by the concatenation of an included starting bit position, a "--", and an included terminating position. Thus 3.3--3.1 is the lowest octal digit in the left half of a word. 0.2.4 Internal References Most internal references in the text of this manual are of the following form: [App x], [Ref x], and [Sec x]. These refer, respectively, to the x'th appendix, the x'th item in the section of this manual entitled "References", and the x'th numbered section of this manual. Some internal references are written out in less formality and combined forms are allowed, such as the following, whose meaning should be evident: [Sec x, y], [App x; Ref x, y], etc. 0.2.5 Other Conventions UUO's ("UnUsed Operations[Ref 1]) that trap to the system [Sec 1.2.1] to request action by it are frequently referred to as " system calls". (This should not be confused with the .CALL subclass of systems calls.) Individually they are written in all capital letters with a preceding period. The reasons for this is that the MIDAS [Ref 3] assembler has just these character strings (actually the first six characters including the period) pre-defined as symbols. In pronouncing them, the period should be ignored. The use of the system calls described in this manual is frequently illustrated by a short excerpt of pseudo-assembly-language. In such examples, the tag CALL will appear on the line of the system call in question. Frequently set-up instructions precede the call to emphasize certain of its properties. They should not be taken too literally. 0.3 Introduction to ITS The Incompatible Time Sharing system (ITS) is a control program tailored to the Project MAC Artificial Intelligence (AI) Group PDP-6 and PDP-10 installation. It was designed in an attempt to provide the following potential advantages of a time sharing system: 1. More than one person can perform tasks not requiring all available computer resources with seeming simultaneity; one person can similarly perform several tasks. 2. Simple device independent input-output facilities should relieve the user of having to worry about hardware interface routines. 3. Jobs which would otherwise require excessive continuous blocks of time can be performed automatically in small parts over long periods of time at reduced priority. 4. Various debugging and other facilities can be designed-in using the mechanisms necessary to protect user programs from each other. To achieve these advantages and the particular goals of Project MAC's AI Group, which require a high level of sophisticated service to a limited number of users, ITS is designed with the following properties: 1. ITS sits in control of the PDP-6 performing most input-output for and allocating machine resources among various user programs. 2. All user programs reside in core storage so it is possible to switch between programs with great rapidity and have sufficiently short quanta to allow character response without undue inefficiency. (Swapping of programs may soon be added but it is expected that only dormant programs will be swapped out.) A user may have many programs running for him "simultaneously". 3. ITS has a minimal direct user command facility to assure users that they can maintain control over their programs. For the utmost in flexibility almost all system actions are the result of systems calls executed by the user's programs. 4. ITS attempts to provide not only simple standardized input-output and other system calls but also much more complex and specialized calls which reduce overhead or enable the use of special devices and features. MIDAS, a machine language assembler with macro facilities [Ref 3, 10], was chosen for writing ITS because of the resultant efficiency, flexibility, ease in writing, and ease in debugging. For information more detailed or more recent than this manual consult the sources listed in Appendix F. 0.3.1 Preview of Section 1 The user of ITS normally commands a hierarchy of programs in machine storage organized in an inverted tree. The top procedure [Sec 7] is initially loaded for him by the system when he informs it of his presence by typing a ^Z on an idle console [Sec 1.1.1]. All programs may have inferior procedures which they can control. Almost all commands to the system are machine instructions [App A, B; Ref 1], which trap to the monitor, executed for the user by his programs [Sec 1.2]. The only exception is that he may interrupt the superior procedure of the program with which he is conversing by typing ^Z [Sec 1.2.1]. By this method the user can return to his top procedure at which point ^Z's typed on his console are ignored by the system. 0.3.2 Preview of Sections 2 and 3 The majority of the code in the ITS monitor is devoted to input-output. It has been organized with such goals in mind as flexibility, speed, and generality. Simple device-independent system calls applicable to all devices where they are meaningful, more complex but efficient calls applicable to most devices, and specialized system calls enabling nearly full use of some special devices are all available. Most devices are referenced symbolically [App C] and procedures may cause symbolic translations such that an inferior procedure referencing a particular device will in fact get a different device. Input-output may be done a character or word per system call or, for less overhead per character or word, an arbitrary size block of words may be transferred into or out of the user program's core with one system call. The user program is not required to have any buffers in its core image. Many special features relate to consoles or special devices on the PDP-6 such as eyes, arms and the DEC 340 display. 0.3.3 Preview of Section 4 A feature of the ITS monitor not frequently found in time sharing systems and contributing greatly to its flexibility and generally is that user programs may receive software implemented interrupts in much the same way that ITS receives hardware interrupts. The system is so designed that the user is rarely involuntarily uninterruptable for more than a few hundred microseconds. If the interrupt is dismissed in a normal manner the non-interrupt portion of the program can proceed even from the "middle" of a system call taking an arbitrary amount of time. The ITS core allocator keeps a record of the status of each 2000 word block of memory and the 200 word sub-blocks into which some of these are divided. It allocates and de-allocates memory for and at the request of procedures and system input-output routines. Most of its complexity is due to the lack of paging on the PDP-6 which makes it sometimes necessary to "shuffle" memory to provide sufficient contiguous space for a procedure. A scheduling algorithm is used which tries primarily to equalize machine time used by each active procedure tree (console) and secondarily to equalize machine time among those procedures in each tree. The system variables related to a particular procedure [App D] used by the scheduler and other parts of ITS are kept in system memory and do not impinge on the user's core image. 0.3.4 Preview of Section 5 User programs operating within the environment provided by ITS are organized (as mentioned in section 0.3.2) as inverted tree hierachies. Superior procedures can retrieve and store words in their inferior procedures as if they were input-output devices. There also exists a large set of special system calls for controlling procedures immediately beneath them and several special ways that procedures may communicate with their superior procedure. Buffered communication between arbitrary pairs of procedures treating each other as input-output devices is also provided [Sec 3.4.3]. 0.3.5 Preview of Section 6 A large number of miscellaneous system calls and features exist for a variety of purposes. Some provide easy input-output to devices which do not fit the forms of standard ITS devices. Others provide the use of certain hardware modifications to the PDP-6 which enable the simulation of certain features of manual control of the PDP-6 such as address stop [Ref 1]. The remainder are such minor but necessary functions as login and logout. A special procedure, known as the system job, exists under ITS. it performs various low priority functions for the system and can check constant portions of ITS against a copy in an attempt to detect some forms of system or hardware failure. 0.4 Introduction to DDT, PEEK, and LOCK These three programs all run under ITS but are more closely related to it than most other systems programs. The editor (TECO), assembler (MIDAS [Ref 3]), list processing language (LISP), etc. used by the Project MAC AI Group have also been modified to run under ITS but have very similar non-time-sharing versions. PEEK and LOCK would generally be meaningless outside ITS and while there is a non-time-sharing DDT, the version for ITS has been very extensively modified. 0.4.1 Preview of DDT DDT originated as a general machine language debugging program on the Digital Equipment Corporation PDP-1 computer. When the hierarchical organization of procedures [Sec 5] and logical simplicity of procedure origination of almost all system actions [Sec 1.2] had been decided upon, the need for a conversational " monitor command" program was recognized. An extensively modified DDT, with commands relating to various ITS features and modifications so as to be able to control multiple procedures was the obvious answer. For historic reasons a top level modified DDT under ITS is known as a "HACTRN". 0.4.2 Preview of PEEK and LOCK The first of these utility programs, PEEK, is described in section 8 of this manual. It provides periodically updated displays or printouts of various aspects of the time sharing system's status. The second and smaller program, LOCK, is described in section 9 of this manual. It performs a variety of miscellaneous functions, some related to testing or debugging ITS. DDT, described in section 7, is the normal means by which the user may load and transfer control to these programs. Note that the commands P, Q, and ? have the same meaning for both programs. The ? command causes each of them to print a list of their commands with short explanations. 0.4.3 Preview of Appendices The first three appendices to this manual are for cross-reference and index usage (although important cross-references are frequently included in the text [Sec 0.2.4]). Appendices A and B list system calls [Sec 0.2.5, 1.2.1] in numeric and alphabetic order, respectively, with the number of the manual section most relevant to the call. Appendix C lists symbolicly referenceable input-output devices in alphabetic order with the section or sections most relevant to them. Appendix D is nearly a direct extract from the source listing of ITS. It is the initial "dummy" image of the user variable area, one of which exists for each procedure [Sec 4, 5] in a system. Appendix E, included for completeness, lists certain system calls that are being phased out along with their replacements and short descriptions of their functions. Appendix F lists persons to consult for further information on ITS. The last appendix, denominated G, gives a single console session with ITS as an illustration in which the self documenting features of DDT, PEEK, and LOCK are exercised. Transmitting Commands to ITS See also section 0.3.1. 1.1 Control Z The only item of input-output data recognized by ITS directly as a command is the character ^Z when received from an idle teletype or from an active console, that is a teletype in control of a procedure tree [Sec 5]. A teletype is a member of the class of devices that may be consoles, currently either a GE Datanet 760 terminal or a KSR 35/37. Teletypes may also be in use as ordinary devices (as Tnm instead of TTY [Sec 3.2.1]) in which case ITS ignores ^Z's typed on them. 1.1.1 Control Z on an Idle Teletype If the teletype is idle, ^Z normally causes the teletype to become a console and loads and starts as its top level procedure [Sec 5.1, 7] the dump file named "@ HACTRN" on device SYS, or if not found there from device UT2 (see section 2.1 for a discussion of file and device names). The JNAME of a thus initiated procedure is HACTRN and its UNAME and SNAME are set to the value minus 1 [Sec 2.2.3, 5.1; App D]. This will not happen if there is insufficient memory available or if too many people type ^Z simultaneously. ITS will echo a ^Z typed on an idle teletype if and only if it succeeded in starting a top procedure. If a failure to start a top procedure is due to a lack of memory, a console free message will be typed out [Sec 6.5]. 1.1.2 Control Z on an Active Console The effect of ^Z in the second case, that of an active console, is intended to be such that the user at the console may cause control of his console to revert to higher level procedures and ultimately to his top level procedure even in the face of hostile inferiors. A ^Z typed on an active console is ignored by ITS if the console is being controlled by its top level procedure. Otherwise it sets a flag associated with the console so that it may not be assigned downward in the procedure tree [Sec 3.2.1.1]. This flag is cleared only by typing any character other than ^Z on the console. ITS also sets the ^Z interrupt bit, a class on interrupt [Sec 4.2], for the procedure controlling the console and possible for an arbitrary number of procedures, each the immediate superior of the last, extending upward in the tree from the procedure controlling the console. The condition for each step upward in the procedure tree is that either the superior to the procedure having its ^Z interrupts bit set is stopped or the current procedure was found to already have its ^Z bit on. Action on ^Z interrupt bits set will be taken in less than one quantum time when the scheduler [Sec 4.4] next runs. 1.2 Trapping Instructions With the exception of ^Z all commands to ITS are given by instructions which trap to the monitor. All valid commands are from a class of instructions called UUO's which are characterized by an initial octal digit of 0. These are discussed in section 1.2.1 and listed in Appendices A and B. Section 1.2.2 concerns all other trapping instructions. It is a useful characteristic of the PDP-6 and PDP-10 that an identical effective address calculation is performed on all words fetched as instructions regardless of their operation code or legality [Ref 1]. Thus indexing and indirect addressing are available on all trapping instructions. Interrupts to the monitor as a result of conditions encountered in the execution of an instruction (such as memory protection violation, AR overflow, PDF overflow, etc) rather than the type of instruction are discussed in section 4.2. 1.2.1 UUO's The instruction as instructions or words with an operation code [Ref 1] of from 000 to 077 normally results in the instruction word being stored in absolute location 40 modified by having had its effective address computed and stored in its address field and its indirect and index fields cleared. The instruction in absolute location 41 is then executed. Since all ITS system calls utilize only UUO's 040 through 047 the Project MAC AI Group's PDP-6 has been modified so that UUO's 001 through 037 and 050 through 077 will trap, as described above, but directly to the user program's relocated core image with no extra overhead. UUO 000 will also appear to trap to the user but this occurs via monitor simulation that checks to see if relocated location 41 directly addresses (indexing or indirect addressing ignored) a location between 20 and the location 6 less than the top of the user's core image inclusive. If so, a JSR to that location is simulated. If not, the user's illegal instruction interrupt bit, a class two interrupt [Sec 4.2], is turned on and a schedule [Sec 4.4] immediately performed. Complete lists of system calls appear in numeric order in Appendix A and in alphabetic order in Appendix B. However, a list classified by operation code is listed here: UUO Symbol Description 040 .IOT Executed for each item or block of data transmitted between a user program and a symbolic input-output device [Sec 2.3]. 041 .OPEN Used to initialize input-output between a device and a program [Sec 2.2]. 042 .OPER A class of system calls further decoded by the value of their effective address. 043 .CALL A class of system calls further decoded by the value of their accumulator field. 044 .USET Executed by procedures to examine and set some of the system variables associated with their inferior procedures [Sec 5.2.3]. 045 .BREAK Executed by a procedure to signal its superior [Sec 4.3.2]. 046 .STATUS Used to ascertain the status of an input-output device, channel, or transfer [Sec 2.5]. 047 .ACCESS Used in input-output to randomly addressable devices [Sec 2.7.4]. ITS system calls were designed to be numerically rather than symbolically decoded to decrease their cumbersomeness and increase monitor efficiency. 1.2.2 Non-UUO Trapping Instructions The only other trapping instructions are those whose first octal digit is 7 and the instruction JRST with the 10 or 4 bit on in its accumulator field [Ref 1]. The first of these two includes all instructions which effect hardware input-output and most of those affecting the state of the PDP-6 instruction processor (including user/executive mode). In the second the 10 and 4 bits respectively dismiss a hardware interrupt and stop the PDP-6. The execution of any of these trapping instructions causes an illegal instruction interrupt to the user (a class two interrupt [Sec 4.2]) unless the user's procedure is in iot-user mode [Sec 5.8.3]. The remaining way to affect the state of the processor is a JRST instruction with the 2 bit on in the accumulator field; however, in user mode this will not effect the state of the user, special or iot-user [Sec 6.8.3] modes except that it may turn off iot-user mode. The General Transaction of Input-Output 2.1 Philosophy and Organization [original document missing page 19 here] user core image input-output is negligible in comparison to any significant processing of the data. Using system buffers has the following advantages: 1. The user may be interrupted, swapped out, moved in core, or otherwise molested during an .IOT [Sec 2.3] as it is the software transfer of data between system buffers and his core. 2. Real input-output transfers may proceed without consideration of the state of the user program they are occuring for as they are into or out of system controlled memory. 3. Higher memory efficiency is obtained due to the dynamic nature of major file device buffers. Even for devices with fixed buffers, such as the line printer, only one large buffer need exist regardless of how many programs that could use the device are in the system. 4. User programs need not concern themselves with the size of physical blocks on devices. Some devices do not fit this framework very well and system calls relating to them are not included in section 6. Miscellaneous calls and special features related to particular symbolic devices are, however, included under the device in section 3. 2.2 The .OPEN UUO CALL: .OPEN CHNUM,FILNAM ;error return ;normal return FILNAM: MODE,,(SIXBIT /DEV/) SIXBIT /FILNM1/ SIXBIT /FILNM2/ Input-output on a particular channel is initialized by executing a .OPEN. The channel is numerically specified by the accumulator field of the .OPEN (CHNUM in the illustration above) and any previous transfer of that channel is terminated as if by a .CLOSE [Sec 2.7.1]. If the user is interrupted [Sec 4.2] during a .OPEN the channel may have been closed and not yet reopened. The effective address of the .OPEN should point to the first word of a block of three words in the user's core image which specify a device, mode, and file. The second two words specify the two file names (FILNM1 and FILNM2 in the above illustration). As a convention, the file names are usually thought of as up to six left-justified sixbit characters rather than thiry-six bit quantities. Some devices ignore the supplied file names. Other devices augment the file names by the procedure's system name as explained in section 2.2.3 below. These properties are indicated in the device descriptions in section 3. The first word has the three character sixbit device name in its right half (DEV in the above illustration) and the direction and mode in its left. Immediately below are the standard mode bits from this left half. Bit(s) Meaning 4.9 Always ignored. 4.8-3.4 Device dependant but using zero should be safe. 3.3 \Rightarrow 1Image mode. \Rightarrow 0ASCII mode, alias character mode. 3.2 \Rightarrow 1Block mode. \Rightarrow 0Unit mode. 3.1 \Rightarrow 1Output. \Rightarrow 0Input. The device and file specified will be altered by entries in the translation table [Sec 2.2.2] made by either the procedure or any of its superior procedures. Because of this translation and the symbolic nature of .OPEN, it is one of the slower ITS system calls. If the .OPEN is successful it will skip the immediately following instruction. If not successful it will not skip and will set a " most recent channel in error" system variable associated with the procedure to the channel number on which the .OPEN was attempted. The reason for the failure may be ascertained with a .STATUS [Sec 2.5] or via the ERR device [Sec 3.4.4]. Zero file names are not allowed on many devices and attempts to use them will cause the .OPEN to fail. Any .OPEN closes previously opened devices on that channel whether or not the .OPEN is successful. 2.2.1 File Directories For devices with true file structure a file directory of the device may be read by trying to input the file with the name ".FILE.(DIR)" . If character mode is used, a readable file directory terminated by a ^L and ^C results. If this pseudo-file is read from the DSK, DKn, or Pnm device, only files with the system name [Sec 2.2.3] of the reading procedure will be listed. Both block and unit modes are available [Sec 2.3]. For non-file devices character input of this file name will yield the string "NON-DIRECTORY DEVICE". Attempted binary input will fail (the .OPEN will not skip) except for the UTn devices [Sec 3.1.2] and the DSK family of devices [Sec 3.1.1, 3.1.3] where an actual device dependant binary of the directory will be read. For the DSK family of devices a pseudo-file "M.F.D. (FILE)" is also recognized by the system and yields a list of the system names [Sec 2.2.3] for which directories exist on the disk. In general files may be written with these pseudo-file names and then renamed [Sec 2.4] so their contents can be read back. In an ITS-produced readable file directory, an "*" by a file name indicates the file is inaccessible. This may be due to the fact that it is just then being written or it may have been deleted while open for reading and will vanish when closed. 2.2.2 The Translation Table Entries in the translation table may be made or deleted by any procedure and have effect only at .OPEN time for the procedure making the entry and its inferiors. The entry consists of the following: 1. The UNAME and JNAME of the procedure making the entry 2. The JNAME of the procedure it is to apply to ("*" means all JNAME's) 3. Whether it is to apply to input, output, or both 4. Whether its resultant is to be considered final or be retranslated 5. The from device and pair of file names, where "*"s in from positions match any device or file name 6. The to device and pair of file names, where "*"s in to positions indicate no substitution At .OPEN time all entries in the table are examined to see if the device and file names of the .OPEN and the UNAME and JNAME of the procedure executing the .OPEN match them. If so and the procedure which made the entry is the same or superior to the procedure executing the .OPEN, the substitution for device and file names specified by the entry is made and unless prohibited by the entry this process is repeated. Should eight successful and sequential translations be made the .OPEN will fail leaving a "too many translations" indication [Sec 2.5] and no further attempt will be made to translate. 2.2.2.1 The .TRANS UUO CALL: .TRANS FILNAM ;error return ;normal return FILNAM: MODE,,(SIXBIT /DEV/) SIXBIT /FILNM1/ SIXBIT /FILNM2/ This system call is expected to point to a three word block in the same manner as a .OPEN [Sec 2.2]. It normally skips and returns with the block replaced by its translation (the block pointed to by a .OPEN is never changed by the execution of the .OPEN). If too many levels of translation are required it will not skip and the block will be unchanged. 2.2.2.2 The .TRANAD UUO CALL: .TRANAD TBLOCK ;error return ;normal return TBLOCK: UNAME ;UNAME of procedure making & subject to entry JNAME ;JNAME for procedure subject to entry ATMIO,,DEV1 ;4.9 = 0 \Rightarrow retranslate ;4.9 = 1 \Rightarrow atomic, don't retranslate ;3.2 = 1 \Rightarrow applies to output .OPEN's ;3.1 = 1 \Rightarrow applies to input .OPEN's ;DEV1 = from device FN11 ;from file names FN12 ,,DEV2 ;to device FN21 ;to file names FN22 This system call makes new entries in the translation table. All information for the entry is specified by an eight word block pointed to by the UUO (TBLOCK in the illustration above). Before trying to insert a new entry in the translation table, this system call simulates a .TRANDL pointing at the same block to eliminate redundant entries. If a .TRANAD is successful in creating an entry it skips. If not, because the first entry in the block is incorrect or the translation table is full, it returns without skipping. 2.2.2.3 The .TRANDL UUO This system call deletes entries in the translation table and normally points at an eight word block identical to the one which was used by the corresponding .TRANAD. See section 2.2.2.2 immediately above for the contents of this normal block. If may, if appropriate, modify the ATMIO bits of an entry for both input and output to delete one or the other. It skips if successful in deleting an entry or removing one of the directions to which it applies. If it effects no change in the translation table, it returns without skipping. It also has a special form where the first work of the block is zero (not a possible UNAME). In this case all entries previously made by the procedure doing the .TRANDL relating to the JNAME in the second word of the block are deleted. This special form always skips and does not examine the remaining six words of the block. 2.2.3 System Names In order to distinguish the files of different users of ITS on shared devices with common file directories a third file name is used. This file name is referred to as a procedure's "system name" or SNAME. In reading, writing, deleting, etc. files on the DSK and related devices [Sec 3.1.1] and on the core link devices [Sec 3.4.3], ITS obtains a third file name from the SNAME [App D] associated with the procedure. This variable is set, when the procedure is initially created, to the common UNAME [App D] of the procedure tree [Sec 5.1] the procedure is in. This is normally the name the user has logged in as [Sec 5.1] so his procedures will initially refer to his files. However, a procedure may examine and change its own SNAME by means of an .SUSET [Sec 4.5] and may examine and change the SNAME of any of its inferiors with a .USET [Sec 5.2.3]. The system name facility is also used to simulate certain pseudo-devices as explained in sections 3.1.3 and 3.4.5. 2.3 The .IOT UUO ;unit mode CALL: .IOT CHNUM,DATLOC ;return DATLOC: ;place char or word read into or written from ;block mode CALL: .IOT CHNUM,PNTR PNTR: --LENGTH,,DATLOC ;pointer, modified during transfer DATLOC: BLOCK LENGTH ;block read into or written from All actual data transfers to or from devices being handled via input-output channels are initiated by .IOT's. The accumulator field of a .IOT should contain the number of an input-output channel (CHNUM in the above illustrations) that has been set up for transfer in a particular mode between the procedure and a particular device by a successful .OPEN [Sec 2.2]. If the channel has not been .OPEN'ed the procedure will receive an input-output channel error interrupt (a class two interrupt [Sec 4.2]). Also the number of the channel on which the .IOT was attempted will be remembered as the most recent erroneous channel for use by the ERR device [Sec 3.4.4]. The effective address of a .IOT is used somewhat differently depending on whether the channel is open in unit or block mode. For unit mode (the first of the two illustrations above) the effective address points to a word to be written from or read into. For character unit modes the character is right justified and the rest of the word is ignored on output and zeroed (except as mentioned in section 2.3.1 on input. Some devices, which are classified as input, use the contents of the effective address as an argument to determine what they will store back (see devices IMX, VID, and NVD). Block modes always read or write to a contiguous block of words. The contents of the effective address of the .IOT is interpreted as having minus the length of the block in its left half and the address of the first word in its right half (see second illustration above). Block mode normally treats each word in the block identically to the corresponding unit mode except that block character modes pack five characters of seven bits per word left adjusted. The block pointer word pointed to by the .IOT is advanced as the transfer progresses so that if it completes the left half will be zero and the right half will point to one greater than the last word processed. If a procedure is interrupted out of a block mode .IOT the pointer word will reflect the progress of the transfer when it was interrupted. Block character input-output from some devices which are naturally one character at a time is limited to blocks of length 77777 words or less and the top three bits of the pointer word are used during the transfer as a character count. When a .IOT returns to the user without causing an input-output channel error, the transfer it requested will have been completed for unit mode input or output or block mode output. For block mode input, the count in the pointer word will indicate the amount transferred which may be less than that requested if an end of file is reached [Sec 2.3.1]. 2.3.1 The End of File Condition For devices on which the end of file while reading condition is meaningful it is signaled to the user in various ways depending on the transfer mode. For character devices in the character at a time mode a ^C will be read with the left half of the word read into set to minus one. In block character mode the last word will be filled out with ^C's. Usually the pointer word will not have counted out as the end of file did not occur on a block boundary. For word devices, the user must normally determine the logical end of file from the data being read although physical end of file is detectable in block mode by the lack of advancement of the pointer word. On some devices, attempts to read beyond an end of file will cause the input-output channel to be automatically .CLOSE'ed [Sec 2.7.1] and further .IOT's will cause input-output channel errors (class two interrupts [Sec 4.2]). When packed characters are being read from a word device the physical block is normally filled out with ^C's but some older files on DEC tape [Sec 3.1.2] are filled out with the character whose ASCII value is 141 ("a"). The end of file character for a particular file can be determined after the file has been opened by putting the number of the input-output channel it is open on in the accumulator specified by an .EOFC. This channel number will be replaced with the end of file character for that channel by the execution of the .EOFC. See following illustration: MOVEI AC,CHNUM CALL: .EOFC AC, ;replaces CHNUM in AC with eof character ;return 2.3.2 The Device Full Condition Attempted output on a full file structured device (UTn, DSK) results in an input-output channel error (a class two interrupt [Sec 4.2]) for the outputing procedure. This interrupt will occur for the .IOT that failed in such a way that it may be successfully resumed if the procedure's interrupt routine or some other procedure deletes material from the full device. The channel on which the error occured is saved by ITS for the ERR device. 2.3.3 Non-Recoverable Data Errors ITS normally encounters non-recoverable data errors when reading into its buffer for the user asynchronously with any UUO's by the user. After a fixed number of attempts it accepts the possible erroneous data which it will later give to the user if her reads far enough. It also sets a flag related to the channel so the next .IOT performed on it will give an input-output channel error interrupt. The purpose of this flag is to avoid giving the user a channel error interupt with no indication of which channel it is on. The user's program may return to the .IOT and continue reading the file after handling the interrupt. 2.4 The .FDELE UUO The system call .FDELE is used for deleting and renaming files. It points at a five word block which, for the three types of .FDELE's, contain the following: CALL: .FDELE FBLOCK ;error return ;normal return ;file delete FBLOCK: ---,,DEV ;device on which to find file FN1 ;names of file to be deleted FN2 0 ;zero --- ;unexamined ;normal file rename FBLOCK: ---,,DEV ;device on which to find file FN11 ;old file names FN12 FN21 ;new file names FN22 | ;rename of file while open for writing FBLOCK: --- ;unexamined CHNUM ;channel on which open FN1 ;new file names FN2 An .FDELE on a device that is not truly file structured has no effect but skips as do all successful effective .FDELE's. If a .FDELE does not skip the reason for its failue may be determined with a .STATUS as though the .FDELE had been a failing .OPEN on channel zero [Sec 2.5]. 2.5 The .STATUS UUO CALL: .STATUS CHNUM,DATLOC ;return DATLOC: ;location status information is stored in by call The accumulator field of this system call is the number of an input-output channel (CHNUM in the above illustration) whose status word replaces the contents of the effective address (DATLOC in the above illustration) of the UUO. This status word is described in detail by the tables below; however, its general composition is as follows: * The left half relates to the channel and it set by failing .OPEN's, failing .FDELE's and input-output channel errors * The right half relates to the device, if any, open on the channel and the state of the transfer between it and the user. Bit(s) Meaning 1.1-1.6 ITS physical device code (see table below). 1.7-1.9 Mode in which device was opened. 2.1 1 \Rightarrow buffering capacity empty. 2.2 1 \Rightarrow buffering capacity full. 2.3-2.9 Device dependent. 3.1-3.6 Set by failing .OPEN's and .FDELE's 3.7-3.9 Set by interpreted display [Sec 3.4.1] input-output channel errors (see table below). 4.1-4.5 Set by non-display input-output channel errors (see table below). 4.6-4.9 Always zero. The following is a table of ITS device codes (note that the 40 bit indicates that the file names used are significant and the 20 bit indictes a software device): Code Symbol Device 1 Tnm Teletype (KSR 35/37). 2 Tnm GE display and keyboard. 3 LPT Line printer. 4 VID Old vidisector ""(TVB). 5 NVD New vidisector ""(TVC). 6 PLT Calcomp plotter. 7 PTP Paper tape punch. 10 IMX Input multiplextor (A-D). 11 OMX Output multiplexor (D-A). 12 PTR Paper tape reader. 13 DIS DEC 340 display. 14 IDS Interpreted display. 15 COD Morse code transmitter. 16 COD Morse code receiver. 21 NUL Null device. 41 UTn DEC tape. 43 DSK 2311 disks. 60 USR A not immediately inferior procedure. 61 USR An inferior procedure. 62 CLx Core link device. 63 --- The directory service [Sec 2.2.1]. 64 USR PDP-10 device. The following is a list of the codes left by failing .OPEN's and .FDELE's: Code Reason 1 No such device. 2 Wrong direction. 3 Too many translations. 4 File not found. 5 Directory full. 6 Device full. 7 Device not ready. 10 Device not available. 11 Illegal file name. 12 Mode not available. 13 File already exists (attempted rename). 14 Bad channel number (attempted open rename). 15 Link depth limit exceeded (DSK). 16 Pack not mounted (Pnm). 17 Directory not now available. 20 User doesn't exist (DSK or USR). 21 Local service only. The following are the error codes left by the 340 interpretive display routines: Code Meaning 1 Illegal scope mode. 2 Scope hung. 3 More than 2000 words scope buffer. 4 Memory protection violation. 5 Illegal scope operation. 6 Memory protection violation on PDL pointer. 7 Illegal parameter set. The following are the non-display input-output channel error codes: Code Meaning 3 Non-recoverable data error on read [Sec 2.3.3]. 4 Non-existant sub-device (such as IMX channel [Sec 3.3.3]). 5 Over .IOPOP [Sec 2.6.1]. 6 Over .IOPUSH [Sec 2.6.1]. 7 Channel does not have a procedure open on it. 8 Channel not open. 9 Device full [Sec 2.3.2]. 2.6 The Input-Output Channel Push Down Facility For greater flexibility in input-output than that available with the basic input-output channel system [Sec 2.1], a facility is provided whereby a limited number of input-output transactions may be stored for later resumption. Meanwhile the channel they were being effected on may be otherwise utilized. 2.6.1 The .IOPUSH and .IOPOP UUO's CALL: .IOPUSH CHNUM, ;push channel number CHNUM ;return CALL: .IOPOP CHNUM, ;pop channel number CHNUM ;return These instructions treat input-output channels as the PUSH and POP instructions [Ref 1] do memory locations. A channel may be .IOPUSH'ed regardless of whether it is open or not and any transfer in progress on it will be inaccessable until the slot occupied by the information pushed is .IOPOP'ed (possible by .IOPDL [Sec 2.6.2]) into a channel (possible different from that from which it was .IOPUSH'ed). The error status and .ACCESS [Sec 2.7.4] pointer for a channel are also correctly stored and restored. Executing a .IOPOP into a channel first .CLOSE's the channel. Each procedure's input-output channel push down list [App D] has space for eight entries. 2.6.2 The .IOPDL UUO CALL: .IOPDL ;reset input-output channel pdl ;return This system call takes no arguments and is intended to reset a procedure's input-output channel push down list. Entries on a procedure's input-output channel push down list actually contain the number of the channel that was pushed to produce the entry. This information is used only by .IOPDL whose execution is equivalent to the number of .IOPOP's [Sec 2.6.1] equal to the number of entries in the procedure's input-output push down list and which .IOPOP each entry back into the channel from which it was .IOPUSH'ed. 2.7 Miscellaneous Input-Output Related System Calls The following system calls relate to most or all devices handled via input-output channels. 2.7.1 The .CLOSE UUO CALL: .CLOSE CHNUM, ;close input-output channel ;return This system call closes the input-output channel whose number (CHNUM in the above illustration) is in its accumulator field. It has no effect if the channel is not open. Executing a .IOT on the channel without reopening it will result in an input-output channel error. For devices with true file structure it is at close time that a file with the same name as one being written is deleted. 2.7.2 The .RESET UUO CALL: .RESET CHNUM, ;reset input-output channel ;return This system call is intended to reset system buffer pointers so that buffered data on an input-output channel (specified by the accumulator field as with CHNUM in the above illustration) will be ignored. It is currently implemented for the following devices: Tnm, TTY, LPT, PLT, PTR, TVC, and USR. For the USR device it has special effects [Sec 3.4.2]. 2.7.3 The .ITYIC UUO MOVEI AC, CHNUM ;set up for channel number CHNUM CALL: .ITYIC AC, ;get interrupt character ;error return ;none available ;normal return ;got one It is frequently desirable to examine the characters of an incoming stream at the interrupt [Sec 4.2] level of a procedure (for "quit" features, etc.). This system call provides the facility to read these characters from channels on which devices are open that will provide appropriate interrupts (TTY and Tnm). The accumulator referred to by an .ITYIC should have an appropriate channel number placed on it (see illustration above). The execution of an .ITYIC will then replace this number with the character read and skip. If no character is available the .ITYIC will return without skipping and if an improper channel is specified the procedure will receive an illegal instruction interrupt. 2.7.4 The .ACCESS UUO CALL: .ACCESS CHNUM,LOC ;set channel pointer to value LOC ;return This system call is intended to be used in accessing randomly addressable devices. A pointer is associated with each input-output channel which is set to the effective address of a .ACCESS executed with the channel's number (CHNUM in the above illustration) in its accumulator field. This pointer is set to zero whenever the channel is closed. Currently this pointer influences only the USR device [Sec 3.4.2] but it is hoped that random access will be added to the disk [Sec 3.1.1] routines soon. Properties of Particular Devices Properties and system calls related to particular devices handled via input-output channels are discussed below. Lower case letters in a device name indicate that there are several devices distinguished by numeric digits in their place. The phrase "all standard modes" in descriptions below implies that all combinations of ASCII/image and unit/block modes are available and that ASCII mode implies seven bit ASCII characters and image mode thirty-six bit binary words. 3.1 File Structured Devices 3.1.1 The DSK, DKn, and Pnm Devices These symbolic devices represent IBM 2311 units attached to the PDP-6. These disks are characterized by interchangable disk packs. A single logical directory is maintained by the system for the entire disk volume. Files are identified by two names [Sec 2.2] and a system name [Sec 2.2.3]. If a file is being read, which of the above symbolic device names is used is entirely immaterial. There are some special aspects to reading directories from these devices as explained in section 2.2.1. If a file is being written, the DSK device will physically write it on a particular drive whose number is assembled into the system. In contrast the DKn device will write the file on the n'th drive. The Pnm device will try to write on a pack with a particular two digit number. The actual directory for these devices consists of a master directory for each drive and a user directory for each system name that has been used to write files on the disk. The maximum number of user directories is one hundred. The maximum number of files per user is not fixed as the area in a users directory, used to describe the location of the blocks each file consists of is dynamically allocated. When as is occasionally necessary a garbage collection, to compact the information in a user directory, occurs, the system job [Sec 2.5] prints out a message on its teletype. This warning was added when the garbage collector was less reliable than it now is. The master directory for a drive is read in the first time the drive is referenced. A copy is written back out whenever the disks are idle and the master directory has been changed since it was last written out. User directories are read in when first referenced. If a currently nonexistant user directory is referenced to write it will be created. If rereferenced to read, a special open lose [Sec 2.5] will indicate this to the user. User directories are copied out whenever the disks are idle and they have been changed since last copied out. A user directory in memory may be erased if no files are open in it, a current copy has been written out, and a core request provokes the core allocator [Sec 4.3] to examine the status of an area of memory including the buffer. The IBM 2311 interface transfers information directly to memory in units of 2000 words. Dynamically allocated buffers in system memory are used for input and output. The capacity of each pack is about thirty times that of a reel of DEC tape [Sec 3.1.2]. 3.1.1.1 Links CALL: .FDELE FBLOCK ;error return ;normal return FBLOCK: 200000,,[SIXBIT /DSK/] SIXBIT /FFNAM1/ SIXBIT /FFNAM2/ SIXBIT /TFNAM1/ SIXBIT /TFNAM2/ SIXBIT /TSNAME/ A special feature of the disk device is that users may establish symbolic links. If the call illustrated above has been executed, then an attempt to read the file FFNAM1 FFNAM2 with the system name [Sec 2.2.3] that was being used by the procedure that established the link will actually refer to file TFNAM1 TFNAM2 with the system name TSNAME. A link may refer to another link and so on for up to eight levels. Attempting to write or delete through a link writes on top of or deletes the link rather than the file it refers to. 3.1.2 The UTn Devices The devices UT1, UT2, UT3 and UT4 represent the four DEC tape drives on the PDP-6. They are true file structured devices under ITS with all standard modes available. Data is dynamically buffered by ITS for both input and output. The file directory of a tape is read in by the system and retained when a drive is referenced and there is no directory being retained for it. An updated directory will be written out on a particular tape whenever the directory has been changed, no files are open on the tape, and no data transfers are in progress on any drive. Files on UTn do not have a system name [Sec 2.2.3] associated with them. Directories can be excised from core only by the .UDISMT UUO. 3.1.2.1 The .UDISMT UUO MOVEI AC,TAPEN CALL: .UDISMT AC, ;error return ;normal return This system call, if successful, causes a DEC tape's file directory to be excised from core and the tape to be physically demounted. The drive number must be in the accumulator specified by the UUO. Manually removing tapes or switching drive numbers of drives for which ITS is retaining a directory may result in out-of-date file entries left on tapes and directories for one tape being written on another. A .UDISMT skips if and only if successful. It will fail if any files are open on the tape. If a file is opened, deleted, or renamed on a tape while the tape is being dismounted by ITS the dismount will be aborted and the tape retained. 3.1.2.2 The .ASSIGN and .DESIGN UUO's MOVEI AC,TAPEN CALL: .ASSIGN AC, ;error return ;normal return MOVEI AC,TAPEN CALL: .DESIGN AC, ;error return ;normal return These system calls are to enable a user to protect against other users accidentally referencing his DEC tape to write or delete a file or rename [Sec 3.1.2.4] the tape. Both specify the drive numbers as the contents of their specified accumulator. The .ASSIGN UUO skips if successful and results in attempts to write on the designated drive failing unless the writing procedure has the same system name [Sec 2.2.3] as the UNAME of the procedure that executed the .ASSIGN. For a procedure in a disowned tree [Sec 5.2.2], an .ASSIGN will be treated as an illegal instruction. An .ASSIGN will fail only if the drive is already assigned. The .DESIGN UUO skips if successful and causes the drive to be unassigned. It fails if the drive is already unassigned or assigned to a different user. A drive may also be .DESIGN'ed by a .UDISMT [Sec 3.1.2.1] and the .ASSIGN'ing of a drive does not protect against other users dismounting it. 3.1.2.3 The .UBLAT UUO MOVEI AC,TAPEN CALL: .UBLAT AC, ;error return ;normal return This system call is intended for reading non-MAC format [Ref 4] (such as DEC format) DEC tapes. The contents of the specified accumulator must be a drive number for which ITS is not retaining a directory. If a directory is already being retained, the .UBLAT will fail and return without skipping. (The user might try first .UDISMT'ing the drive.) If successful, the .UBLAT skips. Instead of attempting to read in the directory from the tape mounted on the specified drive, ITS internally marks the drive so that its contents may not be changed (no writes, deletes, or renames). At this point a successful .OPEN of the tape may be executed with any file name and all blocks of the tape will be read consecutively. Thus the tape may only be referenced to read the file containing the entire contents or to .UDISMT [Sec 3.1.1] it. 3.1.2.4 The .UTNAM UUO MOVE AC,[(SIXBIT /lll/),,TAPEN CALL: .UTNAM AC, ;error return ;normal return This system call changes the three character tape name of a particular DEC tape. The tape drive number must be specified in the right half of the specified accumulator. The call will fail and return without skipping if there is no such drive or if the drive is in .UBLAT mode [Sec 3.1.2.3] or .ASSIGN'ed [Sec 3.1.2.2] to another user. Otherwise it modifies the tape's directory (reading it in if necessary) so as to have a tape name corresponding to the left half of the accumulator specified by the call and skips on return. 3.1.2.5 The .UINIT UUO MOVE AC,TAPEN CALL: .UINIT AC, ;error return ;normal return This system call initializes the directory for the DEC tape on the drive whose number is the contents of the accumulator it specifies. The tape must have been .ASSIGN'ed [Sec 3.1.2.2] to the user doing the .UINIT. If successful the .UINIT skips on returning. If the specified drive is nonexistant or the tape on it is not .ASSIGN'ed to the user doing the .UINIT, it returns without skipping. 3.1.3 The COM and SYS Devices The device SYS is used for storage of systems programs and the " message of the day" [Sec 7.1.1]. It is currently those files on device DSK with system name SYS. Reading or writing device SYS causes one to reference DSK as though one's system name were momentarily SYS. The device COM is used for commonly used user files and the mail feature [Sec 7.2.1, 7.2.2]. In a manner similar to device SYS it is DSK with system name COMMON. 3.2 Unit Character Oriented Devices 3.2.1 The Tnm and TTY Devices Device T00 is the console teletype. Devices T11 through T14 (the two digits are treated as an octal number) are GE Datanet 760 terminals with a character only display and keyboard. Devices T01 through T10 are available for more teletype and teletype-like hardware and are read and written through the Knight Teletype Kludge. Device TTY for a particular procedure is the console controlling the procedure tree it is on. All input-output to these devices is in ASCII characters and the "image" mode [Sec 2.2] has special meanings. Further detail on which Tnm is "where" is given in the following table (as of July 14, 1969): Tnm Location T0 Main console (by PDP-6). T1 Advanced Remote Display Station. T2 Outside line (or 1479 depending on switch). T3 Robot console. T4 PDP-10 console. T5 System console (by line printer). T6 Inside line 1425. T7 Inside line 1474 (or outside depending on switch) 15cps. T10 Spare. T11 GE console by plotter. T12 GE console on 8th floor. T13 GE console by air conditioner. T14 GE console by ham rig (in far corner). T15up Nonexistent. A procedure may not open its console by referring to it as Tnm for the corresponding n and m. Only one procedure at a time may have a teletype open as a device rather than a console. The procedure with T00 opened as a console (TTY) and that actually has control of it [Sec 3.2.1.1] can always seize the DEC 340 display [Sec 3.4.1]. Image mode output to KSR 35/37's is very straight forward and just sends the character to the teletype unmodified. ASCII mode differs only in the following: 1. The character whose value is 33 is printed as a "$". 2. Other characters with a value less than 40 that are not format effectors or bell are printed as a "~" followed by the character with an ASCII value 100 greater. 3. Tab is simulated with spaces. 4. The "delete" character doesn't type out. 5. New line is simulated for a carriage return. Output to GE terminals is the same as ASCII mode output to KSR 35/37's except for the following: 1. All line feeds (12) are ignored. 2. A ^L (form feed) clears the screen. 3. An automatic new line is inserted if the right margin is touched. 4. An " \ulcorner " as displayed by the GE terminal, is used instead of a "~" prefix. 5. Output beyond the bottom of the output area wraps around and overwrites from the top of the output area which does not include the bottom three lines unless the first input .OPEN [Sec 2.2] had the 3.4 mode bit on. 6. Finally, if the output is in image mode only, the character ^T will allow overwriting starting from the top of the output area without clearing the screen or wrapping off the bottom. For all the above output modes, adding block mode only affects individual character processing by causing ^C's that are output to be ignored. Input to keyboards (which are all full duplex) is buffered by ITS in relatively small fixed size buffers. Striking a key when this input buffer is full results only in a ^G (bell) (or "?" on a GE terminal) being output as echo. Any input when the keyboard is not in use, except ^Z [Sec 1.1.1], is ignored by ITS. Procedures may enable interrupts (class three) due to non-empty input buffers [Sec 4.2] and also examine the input characters at interrupt time with .ITYIC [Sec 2.7.3]. Image mode input is characterized by no ITS-supplied echo and no modofication of the character codes unless open mode [Sec 2.2] bit 3.5 ("old mode") is also on, in which case lower case KSR 37 characters are transformed to upper case KSR 35 characters. ASCII mode input provides echo in approximately the same manner as outputing the characters in ASCII mode. Procedure output has higher priority than echo output. On GE terminals input is normally echoed in the bottom three lines unless the 3.4 open mode bit was on, in which case characters are echoed where output is appearing except that a few characters are not echoed at all. In ASCII mode input, the characters whose values are 175 and 176 are input and echoed as if they were the character whose value is 33. Having open mode bit 3.5 on has the same effect for ASCII mode input as it did for image mode input. In general, all of the various mode bits affecting input are obtained from the first input .OPEN [Sec 2.2] executed by a procedure for a particular teletype. For all the above input modes, adding block mode results in input until the block input pointer runs out or until a ^C is typed at which point the .IOT [Sec 2.3] being executed terminates as on an end of file [Sec 2.3.2]. Any input or output TTY .OPEN by a procedure that has never had control of a console will fail. Any input or output .IOT or .OPEN executed on a TTY device by a procedure that has had control of the device while it is actually being controlled by another procedure [Sec 3.5.1] will hang until the executing procedure regains the device. The device dependent .STATUS [Sec 2.5] bits for the teletype devices are as follows: Bit Meaning 2.3 Channel open in "DDT "mode (3.4 mode bit). 2.4 A console (TTY device) open on this channel. 2.5--2.9 If channel open for output: Current line number if a GE console. 2.5--2.9 If channel open for input: 2.5 Indicates some characters have been seen at interrupt and not main program level. 2.8 Teletype is at the 340 [Sec 3.4.1] or a 340 slave. 2.9 Teletype is local, not dial in. 3.2.1.1 The .ATTY and .DTTY UUO's CALL: .ATTY CHNUM, ;error return ;normal return CALL: .DTTY CHNUM, ;error return ;normal return These system calls enable procedures in a single console controlled procedure tree to transfer control of their console between each other. The execution of either by a procedure that does not have control of the console, because it was taken away by a higher procedure's execution of a .DTTY, will hang until it regains control. The accumulator field of each must specify a channel (CHNUM in the above illustration) on which an immediate inferior procedure is open [Sec 3.4.2]. An .ATTY will pass control of the console to this open procedure unless the procedure executing the .ATTY has control of the teletype by taking it from some deeper inferior along the same procedure tree branch in which case it reverts to the procedure from which it came. An .ATTY will hang instead of doing the above if the last character typed on the console was a ^Z. A .DTTY retrieves control of the console from some inferior to the procedure executing it. Both of these calls skip if successful. An .ATTY will fail to skip only if no inferior is open on the channel it specifies. A .DTTY will fail to skip if no inferior is open on the channel it specifies or if the procedure executing it never had control of the console or never gave control away. All other conditions blocking the success of either system call cause them to hang. 3.2.1.2 The .LISTEN UUO CALL: .LISTEN AC, ;error return ;normal return This system call is usable only on the console a procedure is associated with. It will hang if control of the console [Sec 3.2.1.1] has been taken away from the procedure executing it and if all procedure output has not been typed. It then returns with the number of buffered input characters in the specified accumulator. If the procedure has never had control of the console or is in a disowned tree [Sec 5.2.2] zero will be returned. 3.2.1.3 The Dial Feature A feature is available under ITS that allows procedures to dial calls on the two dataphone lines now available. Caution should be exercised in using this feature if one is using the system over one of these lines. The computer may "hang-up" in a more literal sense than usual. MOVEI AC,[440600+DIALN,,DLBUF] CALL: .DIAL AC, ;error return ;normal return DLBUF: 010201,,020202 100506,,101000 The .DIAL call is used to initially associate a procedure with a dialer and to actually request dialing on the dataphone line associated with the dialer. The accumulator specified by the call, AC in the above example, should contain a byte pointer directly addressing a byte within the user's core image. Indirect addressing and indexing are ignored and in fact the index field is used to specify the dialer number, DIALN in the above example. This corresponds to a teletype as follows: Dialer Teletype 0 T07 1 T06 The .DIAL will have no effect and return without skipping if any of the following conditions hold: 1. A nonexistant dialer is specified. 2. The teletype associated with the dialer is in use by a procedure other than the dialing procedure. 3. The associated teletype is not in use but the dialer is assigned (by the execution of a .DIAL not yet followed by a .HANGUP (see below)) to a procedure other than the dialing procedure. If the .DIAL skips in returning it will have set up variables in the system to that dialing will proceed asynchronously with the procedure's execution. The byte string, which specifies what is to be dialed, can not be more than five words long. These words are transfered to the system by the .DIAL and dialing will be unaffected by the user's subsequent modification of his image of these words. However a later .DIAL without an intervening .DIALW or .HANGUP (see below) will simply overwrite these words and may cause garbled dialing. As dialing proceeds, each byte is examined in succession. A zero byte indicates the end of bytes to be processed. A byte whose value is between one and ten causes a similar number of dial pulses to be sent. Interdigital pauses are automatically inserted after each digit. Bytes with a value larger than ten cause a pause in dialing of as many tenths of a second as the byte's value minus ten. A special means is provided to send the "break" signal. If the accumulator specified by a .DIAL is zero except possibly for the index field (where the dialer number is specified), then a "break" will be sent after a .DIALW has been simulated to avoid garbling any dialing in progress. CALL: .DIALW DIALN, ;error return ;normal return This call refers to the dialer specified by its accumulator field (DIALN in the above example). It has no effect and returns without skipping if the dialer has not been assigned to the .DIALW'ing procedure by a successful .DIAL (see above). Otherwise it returns and skips after requested dialing by the dialer is complete. CALL: .HANGUP DIALN, ;error return ;normal return This call refers to the dialer specified by its accumulator field (DIALN in the above example). It has no effect and returns without skipping if the dialer has not been assigned to the .HANGUP'ing procedure by a successful .DIAL (see above). Otherwise it returns and skips after hanging up the line for at least three seconds and freeing the dialer so it is no longer assigned to any procedure. 3.2.2 The LPT Device A six hundred line per minute Data Products, Inc. line printer with one hundred and twenty print positions and sixty four printing characters is available for character output as device LPT. The ASCII/image mode bit [Sec 2.2] is ignored in .OPEN's on device LPT but either single ASCII characters or blocks of packed characters may be output as indicated by the block/unit mode bit. The following "transformations" are made to the output text: 1. Lower case characters are made upper case. 2. Characters beyond the one hundred and twentieth print position are ignored. 3. Format effectors (except for vertical tab) are simulated as for a model 35 teletype, thus overprinting can be accomplished by using carriage return without line feed. 4. Characters with an ASCII value below 40 other than the simulated format effectors and character 33, which is printed as a "$", are printed as a "~" followed by the character whose ASCII value is 100 greater. Only one procedure may have the LPT device open at one time but it may be open on more than one channel. Procedures in disowned trees are blocked from opening the LPT device but it will not be taken away from a procedure as the procedure is disowned [Sec 5.2.2]. (Disowned procedures may use the TPL [Sec 3.4.5] device.) A fixed 1000 word buffer in ITS is used for output to this device. The device dependent .STATUS [Sec 2.5] bits for the LPT device have in the 2.2-2.9 field the current character position in the print line. This count starts at zero at the left margin. 3.2.3 The PLT Device A CalComp model 565 plotter [Ref 9] is available via "character" output to device PLT. Available with the same modal restrictions as the LPT device [Sec 3.2.2], it is also similar to that device in that it may only be open by one procedure at a time but may be open on more than one channel. A fixed 200 word area is used in ITS to buffer output. Only the right most six bits of characters output to the PLT device have effect. They are as follows: Bit Effect if a one 1.1 drum down 1.2 drum up 1.3 carriage right 1.4 carriage left 1.5 pen up 1.6 pen down 3.2.4 The PTP and PTR Device The PTP and PTR devices represent, respectively, the sixty three and a third character per second paper tape punch and four hundred character per second photoelectric paper tape reader on the PLP-6 [Ref 1]. They are similar to the LPT and PLT devices [Sec 3.2.2, 3.2.3] in that only one procedure may have each open at one time but that procedure may have the device open on more than one channel possibly in different modes. Also output or input is buffered in ITS in fixed areas of 20 and 100 words, respectively. These devices differ from the LPT and PLT devices in that all standard modes [Sec 4] are available and the following special mode. If in a successful .OPEN for one of these devices, the 3.4 mode bit [Sec 2.2] is on then the 3.3 mode bit is ignored, the 3.2 mode bit must indicate unit mode, and all eight paper tape channels may be written or read from or into the eight rightmost bits of the word addresses by each .IOT [Sec 2.3] executed. 3.2.4.1 The .FEED UUO CALL: .FEED CHNUM, ;error return ;normal return This system call checks to see if the PTP device is open on the channel it specifies (CHNUM above). If not, it returns without skipping. If so, it causes one line of blank tape to be punched and skips. 3.2.5 The COD Device This is a character output device that may be used in block or unit mode but not any form of image mode and not by more than one procedure at a time. It causes transmission of low power FM Morse code at a frequency just off the bottom of the FM broadcast band. Characters for which there is no standard Morse code (such as line feed) are ignored except that the speed it set by characters whose value is greater than 137 to approximately, seventy five divided by the difference between the character value and 137, words per minute. It tries to interrupt on the input-output channel it is open on when the fixed buffer in ITS it uses is almost empty. 3.3 Robotic Oriented Devices 3.3.1 The NVD, TVC, and VID Devices The VID and NVD devices are somewhat similar to the IMX device [Sec 3.9] in that they may be open by any number of procedures, have block and unit modes, and "functional" word input where the quantity read is a function of the contents. They differ in that the ASCII/image .OPEN mode bit [Sec 2.2] is ignored and they represent vidissectors. The initial contents of words input into should be the coordinates of a point in the field of view of the particular vidissector at which it is desired to know the light intensity. This contents will be replaced by a function of said intensity. The exact form of these words and the use of any device dependent .OPEN mode bits [Sec 2.2] is listed in the table below. Item VID NVD X 2.3--1.1 4.5-3.2 Y 4.3--3.1 2.5-1.2 value 1.8--1.1 (reciprocal of intensity) 4.9-3.3 (normalized floating reciprocal intensity) 2.1-1.1 (integar logarithm reciprocal intensity) (too 400 3.1 (overflow) dark) 3.2 (dim cut off) dead --1 4000000 modes 3.6--3.4 (340 intensity) 3.5-3.4 (confidence level) 3.8-3.6 (dim cut off level) The VID device is of little use as it is a lower quality subset of the NVD device. The deflection signals for the VID device come from the DEC 340 display [Sec 3.4.1] whose use will be degraded by using device VID. The TVC device is the same as the NVD device except that it should be opened on two channels, one for output and one for input. Words with coordinates in them are output on one channel and stored in a fixed length buffer in system memory. There they are replaced by ITS, at its interrupt level, with the response word shown above (value). They may be read, in the same order as output, on the input channel. Unlike most devices, a block mode .IOT outputting to the TVC device when its buffer is full will not hang up but return with the block .IOT pointer word pointing at the first word not transferred. 3.3.1.1 The .VSCAN and .VSTST UUO's (Some of this section is taken from Reference 13.) PTABLE: WBIT,,VCONO ;+0 --LENGTH,,ARRAY ;+1 XRES,,YRES ;+2 R1 ;+3 R2 ;+4 C1 ;+5 R3 ;+6 R4 ;+7 C2 ;+10 P1 ;+11 P2 ;+12 ARRAY: BLOCK LENGTH This system call allows the user to read the light intensity at an array of points with low overhead and, if desired, overlapped computation. The effective address of a .VSCAN should point at an eleven word block of parameters defining the points to be scanned, the locations to read into, the mode they are to be read in, and whether the call should hang until the scan is through. The effect of the parameters, in order, is described below. The first word has in its right half the control bits for the vidisector as in section 3.3.1 for NVD. The sign bit, if a one, causes the .VSCAN to hang until the scan is over. If a zero, computation by the .VSCAN'ing user may procede while the scanning proceeds at ITS's interrupt level. The second word should be similar to a block mode .IOT [Sec 2.3] pointer word. Its right half should point to the beginning of an array to be read into in the response format of NVD in section 3.3.1. Its left half should be a negative count equal to or larger, in magnitude, than the number of points being scanned. (If in the above illustration either PTABLE+12 or ARRAY+LENGTH-1 were beyond the users memory bound, the .VSCAN would be treated as an illegal instruction.) The third word has in its left and right halves, as eighteen bit integers, the "X" and "Y" resolution or number of points to be scanned in each direction. The remaining nine parameters, which are fixed point quantities with the binary point between 2.9 and 3.1, define where the XRES by YRES points lie in vidissector coordinates according to the following ALGOL program: FOR Y1<--0 STEP 1 UNTIL YRES--1 DO BEGIN Y2<--(2*Y1+1)/(2*YRES) FOR X1<--0 STEP 1 UNTIL XRES--1 DO BEGIN X2<--(2*X1+1)/(2*XRES) TEMP<--P1*X2+P2*Y2+1 X<--(R1*X2+R2*Y2+C1)/TEMP Y<--(R3*X2+R4*Y2+C2)/TEMP ARRAY(Y1*XRES+X1)<--SCAN(X,Y) END END A .VSCAN will hang up until the NVD device is free. This device is then seized, not to be released until the scan is over or aborted. A scan is only aborted if the procedure it is being executed for is reset [Sec 3.4.2] or its core size reduced so as to exclude the array being read into (ARRAY in the above illustrations) or by .VSTST. MOVSI AC,1 ;or 0 or 400000 CALL: .VSTST AC, ;return This system call allows later control of and sensing by a procedure that has overlapped computation with a .VSCAN. It is illegal if executed when another procedure is .VSCAN'ing. If the contents of the specified accumulator is positive, the .VSTST hangs till the scan is over. If the contents of the specified accumulator is negative, any scan in progress is aborted. If the contents of the specified accumulator is zero, the user's location then being stored into by the scan, if any, replaces it. 3.3.2 The OMX Device A multiplexed digital to analog converter on the PDP-6 is available via word output to the OMX device [Ref 5, 6]. Block and unit modes are available and the "ASCII/image" mode bit [Sec 2.2] has a special significance explained below. Each word output should have the desired channel number in bits 4.9-4.4 and the value to be converted in bits 4.3-3.1. Thus channel numbers range from zero to 77 and values from zero to 7777. These output channels decay exponentially with some large time constant so ITS stores the current desired value for each channel and outputs them every half second as long as the OMX device is open by some procedure. Output in "ASCII" mode immediately affects the channel as well as storing a value to be output periodically. Slightly less overhead occurs in "image" mode which only stores a value in ITS and may have no effect for up to half a second. Any number of users may have the OMX device open, possibly on more than one channel and possible in different modes. Current OMX channel assignments are as follows: Channel Effect 0--31 Unused. 32 NVD iris. 33 NVD focus. 34 NVD mirror. 35-55 Unused. 56 TVB pan. 57 TVB tilt. 60 MA3 hand extend. 61 MA3 hand rotate. 62 MA3 hand grasp. 63 Cannon lens zoom (MA3 hand finger #1). 64 Cannon lens focus (MA3 hand finger #2). 65 MA3 hand tilt. 66 Alles hand grip. 67 Alles hand tilt. 70 Alles hand extend. 71 Alles hand rotate. 72 AMF arm wrist roll. 73 AMF arm wrist yaw. 74 TDR horizontal. 75 AMF arm horizontal. 76 AMF arm vertical. 77 AMF arm swing. 3.3.2.1 The .ARMOVE and .ARMOFF UUO's (Some of this section is taken from Reference 13.) MOVE AC,[--LENGTH,,ARMBLK] CALL: .ARMOVE AC, ;normal return ;test successful return ARMBLK: BLOCK LENGTH This system call allows one procedure at a time to exercise special control over several digital to analog multiplexor channels [Sec 3.3.2]. It provides acceleration and velocity limiting, software limit stops, and conversion from joint number to multiplexor channel. To avoid certain timing problems, the transmission of commands to the multiplexor control routines in ITS is noninterruptable (but for a limited length of time as only a limited number of commands may be transmitted). Each command is a single word in a block pointed at by the contents of the accumulator specified in the call. The format of these words is as follows: Bits Significance 4.9--4.4 joint number 4.3--3.7 command 3.6 unused 3.5 indirect 3.4--3.1 index 2.9--1.1 address or operand The currently available joint addresses are as follows: Address Significance 0 AMF swing 1 AMF vertical 2 AMF horizontal 3 AMF yaw (inoperative) 4 Alles hand tilt 5 Alles hand grip 6 Alles hand rotate 7 Alles hand extend 10 AMF roll (inoperative) The currently available commands are as follows: Command Significance 0 set destination 1 set velocity limit 2 test magnitude of position error 3 test magnitude of velocity The operand is computed by adding the contents of the specified index register (if any) to the right half of the command. The result is masked to 13 bits. If the indirect bit is a one, the right half of the word addressed is used as the operand. No further indexing or indirecting is interpreted. The test commands are "true" if the quantity tested exceeds the operand. If any tests are "true" the .ARMOVE will skip. CALL: .ARMOFF ;return The multiplexor control routines are activated by the first .ARMOVE and are turned off by an .ARMOFF or killing the .ARMOVE'ing procedure. An .ARMOVE is illegal if: 1. The arm is in use by another user. 2. The block extends above the user's memory bound. 3. An indirect reference is out of bounds. 4. An unused command code or joint number is specified. 5. The block is over 100 words long. 3.3.3 The IMX Device A multiplexed analog to digital converter attached to the PDP-6 is available via word input from the IMX device [Ref 5, 6]. Block and unit modes are available but the "ASCII/image" mode bit [Sec 2.2] has a special significance explained below. Each word input into must initially contain a number from zero to 177. This number will be replaced with the twelve bit digitalization of the analog quantity associated with the multiplexor channel of the same number. If it is desired to read in values converted at each .IOT [Sec 2.4] time then device IMX should be opened in "ASCII" mode. Opening device IMX in "image" mode causes ITS to continuously read all input multiplexor channels into system core a minimum of about ten times a second. Executing a .IOT on a channel opened in this manner will result in values up to one tenth of a second old but without the overhead necessary to read in new values. Any number of procedures may have the IMX device open, possibly on different channels and possibly in different modes. Current IMX channel assignments are as follows: Channel Input function 0--21 Unused. 22 MA3 hand extend. 23 MA3 hand rotate. 24 MA3 hand grasp. 25 Cannon lens zoom (MA3 hand finger #1). 26 Cannon lens focus (MA3 hand finger #2). 27 MA3 hand tilt. 30--32 Unused. 33 NVD iris. 34 NVD focus. 35 NVD mirror. 36 Rhomboidal test table pot A. 37 Rhomboidal test table pot B. 40 Rhomboidal test table pot C. 41 Rhomboidal test table pot D. 42 Pot box upper left. 43 Pot box upper right. 44 Pot box lower right. 45 Pot box lower left. 46--57 Unused. 60 TDR output. 61 Alles hand tilt. 62 Alles hand extend. 63 Alles hand rotate. 64 Alles hand grasp. 65 AMF arm wrist roll. 66 AMF arm wrist yaw. 67--70 AMF arm horizontal high resolution. 71 AMF arm horizontal absolute position. 72--73 AMF arm swing high resolution. 74 AMF arm swing absolute position. 75--76 AMF arm vertical high resolution. 77 AMF arm vertical absolute position. 100--111 Unused. 112 Joy stick X. 113 Joy stick Y. 114--131 Unused. 132 TVC pot box one (manual iris control). 133 TVC pot box two (manual focus control). 134 TVC pot box three. 135 TVC pot box four. 136 TVC pot box five. 137 TVC pot box six. 140 New pot box pot one. 141 New pot box pot two. 142 New pot box pot three. 143 New pot box pot four. 144 New pot box pot five. 145 New pot box pot six. 146 New pot box pot seven. 147 New pot box pot eight. 150--155 Unused. 156 Pot box two, one. 157 Pot box two, two. 160 Pot box two, three. 161 Pot box two, four. 162 Pot box two, five. 163 Pot box two, six. 164 Pot box two, seven. 165 Pot box two, eight. 166 Joy stick console pot ten. 167 Joy stick console pot nine. 170 Joy stick console pot eight. 171 Joy stick console pot seven. 172 Joy stick console pot six. 173 Joy stick console pot five. 174 Joy stick console pot four. 175 Joy stick console pot three. 176 Joy stick console pot two. 177 Joy stick console pot one. 3.3.3.1 The .POTSET UUO (some of this section is taken from Reference 13.) CALL: .POTSET PTABLE ;return PTABLE: BLOCK 4*NUMENTRIES 0 This call gives the user a flexible means of controlling program parameters via the input multiplexor. A maximum of 20 simultaneous connections between pots and variables is permitted. Each may be variable fixed or floating point. If fixed point, it may be an arbitrary byte within a word. The user may specify a mapping from pot values to variable values by giving an upper and lower limit. These may be inverted to give a backward mapping. Two types of control are provided, absolute and incremental. In absolute mode, the true pot position sets the value. This may be useful for positioning displayed objects with a joystick. The incremental mode permits a variable or set of variables to be changed slightly without causing a discontinuous jump in their values. The value is unchanged at connect time, but rotating the pot adds its scaled increment to the variable. Turning it down in the bottom third, or up in the top third of the pot's range causes a faster change so as to keep the control near center. The increase in gain is inhibited at low speeds to prevent drift due to noise. The address of the call points to a table of pot connection (or disconnect) specifications. This table consists of blocks of 4 words, followed by a zero word. The block format is as follows: Location Variable F00+0 Multiplexor channel,,control bits (see below) F00+1 Byte specification (see below),,variable address F00+2 Lower limit (value at pot = 0) F00+3 Upper limit (value at pot = 100000) The control bits are as follows: Bit Meaning 2.9 \Rightarrow 1disconnect pot \Rightarrow 0connect pot 1.2 \Rightarrow 1absolute \Rightarrow 0incremental 1.1 \Rightarrow 1floating \Rightarrow 0fixed The byte specification should be in machine byte pointer format (no index or indirect allowed) for a partial word and may be zero for a full word. A .POTSET call is illegal if: 1. The user tries to connect a pot already in use by another user. 2. The table is more than twenty blocks long. 3. An attempt is made to connect a pot when twenty pots are already connected. 4. The address exceeds the user's memory bound. A pot is disconnected when: 1. The user disconnects it with a .POTSET. 2. The user reduces his memory bound below the address the pot controls. 3. The job is killed. 3.4 Miscellaneous Devices 3.4.1 The DIS and IDS Devices The DEC 340 display [Ref 1] differs significantly from all other devices usable in ITS. In order to maintain an image on the display it is necessary to repeatedly output to it a list of display words. This list must be stored in main memory and the various means of using the display may be divided into those that maintain this list in system memory (discussed in this section) and those that allow the list to be maintained in the user's core image [Sec 3.4.1.1]. Only one procedure at a time may use the 340 display and in only one of its three modes (as symbolic device DIS, as symbolic device IDS, or via the .DSTART and .STRTL UUO's). If the display is free, any procedure may seize it by executing a proper .OPEN on device DIS or IDS or by executing a .DSTART or .DSTRTL UUO. If the display is in use, however, a procedure will succeed in any of the above UUO's only if it is the procedure that has the display or it has control of device T00 as a console [Sec 3.5]. If the second case applies, the channels, if any, on which the other procedure had the DIS or IDS open will be modified to the corresponding (block or unit) NUL device [Sec 3.4] output. .CLOSE'ing [Sec 2.8.1] all input-output channels in which device DIS or IDS are open is the same as executing a .DCLOSE [Sec 3.4.1.3]. The DIS symbolic device allows the user to output single or packed blocks of ASCII characters in ASCII mode and single or blocks of 340 display list half words [Ref 1] in image mode. This device may be open on more than one channel at a time in possibly different modes. If the user outputs characters and then halfwords, ITS will automatically insert intervening items to cause the display to escape to parameter mode. If the user outputs half words and then character, ITS assumes that he has inserted items to cause the display to escape to parameter mode. A display list produced by output to the DIS device will start by setting the 340 display intensity to 7, its x and y coordinates to zero and 7000, and its scale to one larger than the 3.4-3.5 field of .OPEN mode bits [Sec 2.2] used unless that field is 3 in which case the scale is set to zero. Lines of character output that extend beyond the right edge of the screen will wrap around and continue, superimposed on their beginning, from the left. Lines of character output that extend beyond the bottom of the screen similarly continue from the top. The amount of display information created by DIS output may not exceed 2000 words. After that, further output is ignored. The stored information created by output to the DIS device may be deleted to accept new information by outputting a ^T or ^L (form feed) character. In the latter case, this action will be delayed for a few seconds. The IDS symbolic device allows the user to use a semi-idealized display. This device is known as the interpreted display since the user writes "instructions" to be executed by a display processor which are then interpreted by ITS simulating the processor and creating a 340 display list to actually display. The IDS device may only be opened in unit output mode and what the user outputs to it is the location, in the user core image, for the display processor to start "executing". .IOT DISCHN,PC ... FC: STRTLC ;location to start ;updated during execution Almost all error conditions encountered during this "execution" cause interrupts to the user [Sec 4.2]. The simulated display processor has a push down list facility with its push down list pointer in the user's location 43. The information to be sent by the .IOT'ing [Sec 2.4] of each starting location to the IDS device is normally terminated by the display processor POPJ'ing to zero. Frequently this is made to happen by over popping by the display processor. The information stored by the IDS device is currently limited to 2000 words. If the 340 display is being run by the IDS device when a .IOT is executed on it, the display will stop and the stored information will be over-written. If the 340 display is not being run, output from simulation is appended to that already present. Whether the 340 display is started at the end of the simulation initiated by a .IOT is determined by a display processor parameter that may be set during simulation. Instructions for the IDS simulated display processor are thiry-six bit words interpreted as five left justified ASCII characters if bit 1.1 is zero. If bit 1.1 is a one, bits 1.4--1.6 are interpreted as the following commands: 1.4--1.6 Command Other fields 0 Illegal. 1 Point. 4.9--3.4 Y, 3.3--1.7 X, 1.2 intensify. 2 Rel vector. 4.9--3.4 Y, 3.3--1.7 X, 1.2 intensify. 3 Increment. 5 left justified 5 bit fields each: 1.1--1.2 length 1.3 intensify 1.4--1.6 direction (clockwise from vertical). 4 See below. 1.7--1.9 subcommand function. 5 Abs vector. 4.9--3.4 Y, 3.3--1.7 X, 1.2 intensify. 6 Illegal. 7 Illegal. 1.7--1.9 Function Other fields 0 Illegal. 1 PUSHJ. 4.9--3.1 address. 2 POPJ. 4.9--3.1 address. 3 JRST. 4.9--3.1 address. 4 POP. 4.9--3.1 address. 5 PUSH. 4.9--3.1 address. 6 See below. 2.3--2.9 parameter to set from 4.9--3.1. 7 Illegal. 2.3--2.9 Parameter 0 Illegal. 1 Start mode (nonzero means start after .IOT). 2 Character scale. 3 Increment mode. 4 Vector scale. 5 All scales. 6 Coordinate of left edge of displayed area. 7 Coordinate of bottom edge of displayed area. 10--77 Illegal. 3.4.1.1 The .DSTART and .DSTRTL UUO's CALL: .DSTART DPNTR ;error return ;normal return DPNTR: --LENGTH,,DISLIST--1 DISLIST: BLOCK LENGTH CALL: .DSTRTL PHTRL ;error return ;normal return PHTRL: DPNT2+1,,.+1 DPNT2+1,,0 DPNT2: --LENGTH,,DISLIST DISLIST: BLOCK LENGTH These UUO's enable the user to display lists that are in his core image. The execution of either attempts to seize the 340 display and skips only if successful. A .DSTART should point at a location that will always contain either a BLK0 [Ref 1] type output pointer, if one block of data is to be displayed, or the first word of a linked list of display blocks. In this linked list, the right half of each entry points to the next entry, or, if zero, indicated the end of the list. The left half of each word should be positive and is a pointer to a BLK0 pointer or is ignored if it is zero or points to a zero word. .DSTRTL differs from .DSTART only in that, if it is used to display a list of blocks, the left halves of its linked list words are interpreted as pointing to the word after not a BLK0 pointer but a regular block mode output pointer [Sec 2.4]. 3.4.1.2 The .LTPEN UUO MOVE AC,[CONTROL] MOVEM AC,LBLOCK CALL: .LTPEN LBLOCK ;return LBLOCK: BLOCK 6 The 340 display is equipped with a light pen that causes a hardware interrupt when the light intensity it sees increases suddenly as when a spot is displayed under it. The display also stops when this occurs and its current coordinates can be read in by the PDP-6. The user may enable software interrupts (class three) to his procedures when the light pen is seen and he has the display seized [Sec 4.2]. This system call enabled the user with the display seized to read information about where the light pen has been seen and the state of the current transfer to the display. Results are returned in the contents of the effective address and following five locations. The contents of the effective address also acts as an argument. If bit 4.9 is zero the rest is ignored. But if bit 4.9 is a one then bit 3.1 will cause the .LTPEN to hang until the light pen has been seen at least once and bit 1.1 will be used to set the multiple sighting mode. If this mode is on, the light pen may be seen many times while a display block is displayed once. If this mode is off (zero) the light pen may be seen only once and ignored thereafter for each display of a display block. The six words returned to the user are as follows: 1. The actual word DATAI'ed [Ref 1] from the 340 display at the time of the last light pen interrupt. 2. The number of times the light pen was seen since the last .LTPEN. 3. The sum of the y coordinates at the points the light pen was seen since the last .LTPEN. 4. The corresponding sum of x coordinates. 5. The current linked list pointer. 6. The current BLK0 pointer. 3.4.1.3 The .DCLOSE UUO CALL: .DCLOSE ;return This system call releases the 340 display if executed by the user who has the display seized, closing any channels on which it is open. Otherwise it does nothing. 3.4.1.4 The .DSTOP UUO CALL: .DSTOP ;return This system call stops the 340 display, but does not release it, if executed by the user who has the display seized. Otherwise it does nothing. It is intended for use in conjunction with the .DSTART or .DSTRTL UUO. 3.4.1.5 The .NDIS UUO MOVEI AC,69. CALL: .NDIS AC, ;error return ;normal return This system call is intended for use in taking pictures of 340 displays. It sets a display control variable from the contents of the accumulator it specifies. This variable has no effect if it is negative but if zero it inhibits display completely and if positive it is decremented by one each time the current display block or list of blocks is displayed. This call skips unless executed by a procedure that does not have the display assigned to it. 3.4.2 The USR Device The USR device actually represents procedures. A successful .OPEN [Sec 2.2] executed on device USR will either create a new procedure [Sec 5.1.1], attach a disowned procedure tree [Sec 5.1.2], associate with the input-output channel on which it was executed an existant procedure or allow the user access to the PDP-10's memory [Sec 3.4.2.1]. The file names are the UNAME and JNAME of the procedure being .OPEN'ed. Only immediate inferiors may be .OPEN'ed to write into but any procedure may be examined. If an inferior procedure has been opened, it may be destroyed by a .UCLOSE [Sec 5.2.1] but will be entirely unaffected by a .CLOSE [Sec 2.7.1] executed on the channel. The same procedure may be open on more than one channel of its superior, possibly in different modes. It is as first .OPEN time that an interrupt bit [Sec 5.1.3] is assigned by ITS to a procedure. The number of inferior procedures a procedure may have is currently limited to eight. The 3.3 mode bit [Sec 2.2] is ignored in .OPEN's on device USR but both block and unit modes are available. Executing .IOT's on channels opened on device USR results in the transfer of a thirty-six bit binary word or words between the procedures. The location in the .OPEN'ed procedure of the first word to be transferred is specified by the .ACCESS [Sec 2.7.5] pointer associated with the input-output channel on which the transfer is occuring. Each word transferred advances the appropriate pointer by one even in unit mode which ITS treats internally as blocks of length one. An attempt to read a word beyond the core allocated [Sec 4.3] will result in a class two interrupt [Sec 4.2] but in a similar attempt to write (possible only for an immediate inferior) ITS will attempt to extend the procedure's core image and and interrupt will result only if more core is unobtainable. Executing a .RESET [Sec 2.7.2] on a channel with an inferior procedure open on it is equivalent to executing a .UCLOSE and then a .OPEN to recreate the procedure (with reset variables, one 2000 word block of cleared core, etc.) but with less overhead. 3.4.2.1 The PDP-10 An .OPEN on device USR with a second file name of "PDP10" may be made, in all the modes allowed for regular procedures, to access the memory of the PDP-10. .IOTs attempting to read or write the PDP-10's accumulators will be ineffective and read or write the core locations shadowed by the accumulators. Attempting to reference above the PDP-10's memory will result in illegal user address interrupts. Only the procedures of one procedure tree may have the PDP-10 open at a time, possibly on more than one channel at a time in different modes. Attempts to set or read variables for the PDP-10 "inferior" are ignored except that 40000 will be read as its memory bound. A .RESET executed on a channel on which the PDP-10 is open will clear its memory. 3.4.3 The CLA, CLI, CLO and CLU Devices These symbolic devices enable arbitrary pairs of procedures to talk to each other as buffered input-output devices. Each file on any of these "core link" devices represents a 200 word area, most of which is buffer, which may be simultaneously open for reading, writing, both or neither. The files are identified by two regular file names and a system name [Sec 2.2, 2.2.3]. Only one procedure at a time may have a core link open to write or read on one channel. All standard modes are available. The CLO (Core Link Open) device may be used to open any core link file and (whether reading or writing) will create one if none exists with the name used. The CLU (Core Link Use) device is identical except that an .OPEN on it will fail if the referenced file does not already exist. Core link "files" have some peculiar properties. When writing a core link, a procedure will hang if the buffer is full and will write an end-of-file mark outside of the data stream when it closes the channel it has the file open on. However, opening and writing again the same file name essentially pushes a new block of data into the pipeline to be removed by a reading procedure. A procedure reading a core link can not read past an end-of-file and must close and reopen the file if it suspects that there is more to follow. If a reading procedure closes a core link before encountering an end-of-file, remaining information until the end-of-file is ignored. Core link "files" cease to exist only if empty and open for neither reading nor writing or not empty and not open for from two to four minutes. In the later case they are expunged by the system job [Sec 6.5] to unclutter the system. The CLI (Core Link Interrupt) device may only be opened to write. The two file names specified should be the UNAME and JNAME [Sec 5.1] of a procedure in the system with the CLI interrupt [Sec 4.2] enabled. If ther is no existing core link with the file names and system name used, the .OPEN will succeed in creating a link and interrupting the specified procedure. In addition ITS inserts in the created link two words of information as the start of the first file. These are the UNAME and JNAME of the .OPEN'ing procedure. The CLA (Core Link Answer) device is to be used in response to a CLI interrupt. It may only be opened for reading and scans through all existing links for one with file names the same as the UNAME and JNAME [Sec 5.1] of the procedure doing the CLA open. If one is found not already open for reading, the .OPEN succeeds. 3.4.4 The ERR Device This device, by a mechanism similar to that used for the "directory device" [Sec 2.2.1], allows the user to input a character string explaining whatever error indication there may be in a .STATUS word [Sec 2.5]. The first file name specified on an .OPEN on device ERR must numerically be either 1, 2 or 3. If it is 1, the status of the last input-output channel on which there was an error will be analyzed. If it is a 2, the bottom four bits of the second file name specify which input-output channel to examine. If a 3, the second file name is treated as the .STATUS word to analyze. 3.4.5 The TPL Device This device allows a user to output a file to be line printed [Sec 3.2.2] at some later time when the line printer is free and such print out has not been inhibited [Sec 6.5.1]. In a manner similar to the COM and SYS [Sec 3.1.3], this device refers to files on the disk with system name ".LPTR.". However, renames are ignored on the TPL device and, while reads work normally, on writes the supplied file names are ignored. Instead, the UNAME of the procedure writing is used as the first file name and a counter of how many files have been written on the TPL device in the current system run is used as the second file name. Files written on the TPL device are printed out by the system job [Sec 6.5] when the line printer is free. A significant length of time (up to two minutes) is left between non-TPL line printer use and TPL print out and between successive TPL output to allow local users to seize and use the line printer directly. 3.4.6 The NUL Device This device has all standard modes and is a high speed infinite sink on output and source of zeros on input. The Procedure See also section 0.3.3. 4.1 Philosophy and Organization The use of ITS is entirely procedure oriented. Almost all system actions are caused by trapping instructions [Sec 1.2; App A, B] executed by user programs that are hierarchially organized [Sec 5.1]. A large number of variables [App D; Sec 4.5] is associated with each procedure by the ITS system. These variables are stored in the system and do not impinge on the user's core image. These procedures are run for short fixed lengths of time or until they become unrunnable (whichever comes sooner) in an order determined by the scheduler [Sec 4.4]. The scheduler also handles software interrupts to the user [Sec 4.2]. When in execution, user programs run with the PDP-6 in user mode [Sec 1.2.2] which enabled protection and relocation hardware that ITS sets in accordance with the length [Sec 4.3] and location in absolute memory of the particular procedure's core image. The following are among the advantages of this storage of user variables: 1. No effort by a user's procedure to randomize its core image can effect system variables related to the procedure and thus erase evidence of system malfunction or lack of malfunction. 2. A procedure's core image may be easily swapped out without significant reduction in information concerning it of interest to the system or the necessity to retain some portion of it. 4.2 User Interrupts ITS provides software implemented interrupts to the user program similar to the hardware interrupts it receives. Only one level of interrupt is simulated but this makes little difference due to the ease with which the user can inhibit or enable various types of interrupt [Sec 4.2.1] and may also re-enable interrupts without immediately or ever returning to the location his program was interrupted from. Each procedure has in system memory two interrupt enable mask words, two interrupt request words, and a flag indicating interrupt level status [App D]. Various conditions that can cause interrupts are assigned bits in these interrupt request words. These conditions are divided into three classes according to severity as follows: 1. Class one conditions, the most severe, can not be enabled. They always cause the "interrupted" program to be stopped and its superior procedure to receive an interrupt. 2. Class two conditions are of moderate severity. They may be enabled to interrupt the user but if they occur while not enabled or while the user's interrupt level flag indicates he is currently processing an interrupt, he will be stopped and his superior procedure interrupted. 3. Class three conditions are the least severe and may also be enabled to interrupt the user. While not enabled they have no effect. If enabled and they occur while the user's interrupt level flag indicates he is free to receive interrupts he will not be interrupted but if the user's flag indicates he is not free they will be stored in the interrupt request words to be presented to the user as soon as he allows unless reset with an .SUSET [Sec 4.5]. In cases mentioned above (for class one and two) when a procedure's superior is interrupted, the particular bit used to interrupt the immediately superior procedure is in its second interrupt request word. A bit is assigned by ITS to that inferior at the time it was created [Sec 5.1.3] and can be read with a .USET [Sec 5.2.3]. When conditions that would cause a procedure's superior to be interrupted occur in a top level procedure one of two things may happen. If the procedure tops a console controlled tree, a new HACTRN will be loaded (as in section 1.1) and all inferior procedures will be lost. If the procedure tops a disowned tree [Sec 5.2.2] it will be immediately stopped and when next attached [Sec 5.1.2] by a job tree the attaching procedure will be appropriately interrupted. ITS determines that it should actually interrupt a procedure when it schedules [Sec 4.4], or the procedure executes a .DISMISS [Sec 4.2.2], or .SUSET [Sec 4.5] of the PICLR variable if there are corresponding bits on in one or both of the procedure's interrupt request and mask words and its interrupt level flag (PICLR) indicates interrupts are enabled. ITS examines the contents of the procedure's location 42 to see if its direct address (indexing and indirect addressing ignored) is between location 20 and the location 6 less than the top of the user's core image, inclusive. If not, the user receives a class one interrupt for a bad location 42. If so, the user's appropriate interrupt word (first word has higher priority than the second), containing bits on for interrupts the user is being presented with, is placed in the word directly addressed by the user's location 42 and bit 4.9 of that location is turned on if second word requests are stored. The interrupt request word stored is then cleared to receive further interrupts. The user's interrupt level flag is also set to inhibit further interrupts. Finally a JSR [Ref 1] is simulated to a location one greater than that in which the interrupts were just stored. The normal manner to return from an interrupt is with a .DISMISS [Sec 4.2.2]. The following is a list of word one interrupt bits: Bit(s) Class Condition 1.1 3 Character typed at console [Sec 3.2.1]. 1.2 1 ^Z typed [Sec 1.1.2]. 1.3 1 Bad location 42. 1.4 3 AR overflow [Ref 1]. 1.5 2 Display list memory protection violation [Sec 3.4.1]. 1.6 2 Illegal instruction. 1.7 3 System going down in 5 minutes [Sec 6.5.2]. 1.8 1 .VALUE executed [Sec 5.3.1]. 1.9 2 Input-output channel error. This interrupt always occurs at an .IOT [Sec 2.3] or .OPER [Sec 1.2.1] that refers, with its ac field, to the channel on which the error occured. For more exact cause of interrupt use a .STATUS [Sec 2.6] or the ERR device [Sec 3.4.4]. 2.1 2 Memory protection violation on reference to inferior procedure [Sec 3.4.2]. 2.2 1 .BREAK executed [Sec 5.3.2]. 2.3 1 Return from single instruction proceed [Sec 6.7]. 2.4 3 Slow clock (every half second). 2.5 2 Memory protection violation [Ref 1]. 2.6 2 MAR interrupt [Sec 6.4]. 2.7 3 Light pen [Sec 3.4.1.2]. 2.8 3 PDL overflow [Ref 1]. 2.9 3 Not used. 3.1--4.8 --- Not used 4.9 --- Indicates rest of bits to be interpreted as below. In the second word of interrupt requests, bits 3.1-3.8 represent inferior procedures [Sec 5.1.3] and bits 1.1--2.7 represents input-output channels [Sec 2.1] with 1.1 for channel zero. Interrupts occur from inferior procedures as described above for class one or two interrupts to the inferiors while an input-output channel will try to interrupt if there is buffered teletype [Sec 3.2.1] input on the channel. These buffered characters may be examined at the interrupt level with .ITYIC [Sec 2.7.3]. 4.2.1 The .SETM2 UUO A procedure can examine and modify all of the five variable words associated with interrupts to it by means of the .SUSET UUO [Sec 4.5]. When a procedure is first created [Sec 5.1.1] or has a .RESET executed on it [Sec 3.4.2] all of these five variables are zero except PICLR which is set to minus one. For the mask (MSKST and MSKST2) and request (PIRQC and IFPIR) words a one bit represents an enabled interrupt of pending request and a zero represents an inhibited interrupt or lack of request. ITS will ignore attempts by the user to enable a class one interrupt (first word mask bits 1.2, 1.3, 2.2, and 2.3). To avoid certain timing errors, special .SUSET means (APIRQ and IPIRQ) are provided to turn on or off bits in the first request word without affecting other bits in that word. The procedure's interrupt level flag (PICLR) can also be read or set. Its zero state indicated that interrupts are inhibited and class two interrupts become fatal. If nonzero, interrupts are enabled. ITS sets this variable to minus one when it executes a .DISMISS from a user, but when a user attempts to set it the word he stores there with .SUSET will be shifted right thirty five places. Thus the user can set his PICLR to either zero or one depending on the sign bit of the word he stores. As a result he can enable interrupts (even in the middle of his "interrupt routine" in a manner distinguishable from the automatic enablement performed by ITS or inhibit interrupts. The above discussion also applies to examining and modifying these variables in inferiors with .USET [Sec 5.2.3]. To avoid certain timing problems there is a special UUO by which a procedure may set both its mask words at once as follows: MOVE AC,[MASKW1] ;set up first word of mask bits MOVE AC+1,[MASKW2] ;set up second word of mask bits CALL: .SETM2 AC, ;set both mask vars from AC & AC+1 ;return 4.2.2 The .DISMISS UUO LOC 42 JSR TSINT TSINT: 0 ;interrupt bits stored here 0 ;loc interrupted from stored here ... ;interrupt routine ... ... CALL: .DISMISS TSINT+1 ;returns to where interrupted from This system call provides the normal means to return to an interrupted routine. It simultaneously re-enables interrupts and transfers to the location addressed by the right half of the contents of its effective address, restoring flags from the left half. This is normally, but not necessarily, the pseudo-JSR word stored by ITS as it simulates an interrupt. If there are pending conditions in the user's interrupt request words he will be immediately re-interrupted. 4.3 The Core Allocator The core allocator consists of a single special procedure, called the core job, that does most of the work and various routines that signal to it their interest in acquiring or releasing core. An internal map of the status of every 2000 word block of memory exists in the system and is maintained by the core allocator. The majority of the complexity of the core allocator is not due to maintaining this table but to the actions it must sometimes take to relocate input-output buffers and other occupants of core when a procedure wishes to expand. The lack of paging on the PDP-6 makes it sometimes neccessary to "shuff'le" core to make a sufficient contiguous block. Each 2000 word block must, except for two transient states, be devoted to one of the following uses: 1. Part of a procedure's core image (ITS code and variables appear as core allocated for the system job [Sec 6.5]). 2. A disk buffer or directory [Sec 3.1.1]. 3. A display buffer. 4. Unused. 5. Further divided into 200 word blocks. These 200 word blocks are used for core link device buffers [Sec 3.4.3] or for DEC tape buffers or directories [Sec 3.1.2]. A procedure may request more or less core by means of a .CORE [Sec 4.3.1] and determine its memory bound without making protection violations with a .SUSET [Sec 4.5]. Other than the .CORE UUO a procedure's memory bound may be affected only by its destruction, when all blocks in its core image are marked free, or a .USET [Sec 5.2.3] or .IOT on device USR [Sec 3.4.2] executed by its immediate superior. 4.3.1 The .CORE UUO CALL: .CORE NUMBLK ;error return ;normal return This system call requests for the procedure executing it as many 2000 word blocks as the value of its effective address except that if this value is zero it will be treated as if it were one. If and only if the .CORE is successful it skips. Only a .CORE to acquire more core may fail. If it does and a more than one block increase was being requested, some smaller number than requested may have been obtained. 4.4 The Scheduler The scheduler runs when a quantum time-out occurs or when the physically running procedure encounters a blocking condition or causes an interrupt by some program action (memory protection violation, PDL overflow, etc.). The scheduler decides which procedure should run next by an examination of the variables [App D] in the system for each procedure. It simultaneously performs those modifications of these variables necessary to provide the simulated interrupt feature [Sec 4.2]. For those procedures that have their stop word (USTP [App D]) zero, their runnability is determined by a variable known as the flush instruction (FLSINS) which is set when the procedure becomes blocked. If this variable is zero the procedure is runnable. if nonzero it is executed with the procedure's EPDL2 variable [App D] loaded into ITS symbolic accumulator T. If the instruction skips then the procedure is runnable and has just become unblocked. If the flush instruction does not skip the procedure is still blocked. The next procedure to be run is picked from among the runnable procedures by a scan which considers two "resource" variables per procedure. Both of these are quantized approximations to exponential decays toward proportions of machine time. The JTMU variable is associated with a particular procedure while the UTMPTR variable pointer for that procedure points to a quantity similar to JTMU maintained for all procedures in one console controlled tree. During the scan to select the next procedure to run, a procedure will be preferred to the best so far if its console tree has used less time recently than that of the best so far or its console tree has used exactly the same amount and the procedure has used less time recently. Exceptions to this are that a procedure is always preferred to the best so far if it has used less than one eighth as much time recently and never preferred if it has used more than eight times as much. Also the procedure, if any, that has seized the .MASTER [Sec 6.8.5] facility is given double priority and disowned procedures are given one eighth priority unless they have the line printer (device LPT) assigned to them or are running in executive mode when scheduled. All disowned [Sec 5.1] job's UTMPTR's point to a single word which is given less resource than that for a normal console tree. The systems job [Sec 5.5] and core job [Sec 4.3] have UTAPTR's to seperate words given the same priority as a normal tree. The general properties of this scheduling system can be described as follows: 1. Machine time is normally equally divided between consoles and then between all the procedures running for each console. 2. Machine time used by a procedure is integrated with decay (time constant about seven seconds) so (a) a procedure that is frequently blocked for a short period of time (compared with a quantum, currently one fifteenth of a second) should receive equal service with a pure compute job and (b) an interactive program called on infrequently by a user is essentially guaranteed good service as it starts to think of a reply but can not, on average, use more time than a pure compute job. 4.5 The .SUSET UUO CALL: .SUSET [DIRECTION+VARIABLE,,DATLOC] ;return DATLOC: ;location read into or written from Procedures may examine and modify some of their system variables [App D] by means of this system call. The contents of its effective address (a constant in the illustration above) is viewed as two half words. The right half should point at the word from which the variable is to be set or into which the variable is to be read. The left half specifies by its top bit (4.9) whether the variable is to be read (zero) or written (one) and by the value of its remaining bits which system variable. The following table lists permissible values: Name Value Type Variable UPC 0 07 Program counter word [Ref 1]. VALUE 1 17 Contents of effective address of most recent .VALUE [Sec 5.3.1]. TTY 2 05 Status relative to console [Sec 3.2.1]. FLSIMS 3 01 Blocking condition [Sec 4.4]. UNAME 4 05 UNAME [Sec 3.4.2]. JNAME 5 07 JNAME [Sec 3.4.2]. MASK 6 17 Interrupt mask word [Sec 4.2]. USTP 7 03 Stop word (usually only bit 4.7 can be written) [Sec 4.4]. PIRQC 10 17 First interrupt request word [Sec 4.2]. IMTS 11 01 Bit used to interrupt superior [Sec 5.1.3]]. MEMT 12 07 Memory bound [Sec 4.3], first location it would be illegal to reference. SV40 13 05 Last executed UUO trapping to system [Sec 1.2.1]. IPIRQ 14 17 Interrupt request word (written by an IORM). APIRQ 15 17 Interrupt request word (written by an ARDCAM). SNAME 16 17 System name [Sec 2.2.3]. PICLR 17 17 Interrupt level status word [Sec 4.2]. MARA 20 17 MAR register and control bits [Sec 6.4]. MARPC 21 17 Program counter at last MAR interrupt [Sec 6.4]. UUOH 22 05 Program counter word at last system UUO. UIND 23 05 User index. RUNT 24 05 Total run time in 4.069 microsecond units. MSK2 25 17 Interrupt mask word two [Sec 4.2]. IFPIR 26 17 Interrupt request word two [Sec 4.2]. APRC 27 05 Disowned and processor cono status. SV60 30 05 Saved absolute location 60. 31--77 00 Unused. IOC 100+N 01 Input-output channel word for channel N. IOS 120+N 01 Status word for input-output channel N. IOP 140+N 01 Nth word of input-output channel push down list [Sec 2.6], two words per entry. In the above table the 1.3 bit on in the type column implies that the variable can be read with .SUSET and the 1.4 bit implies it can be written with .SUSET. The other type bits relate to the .USET UUO [Sec 5.2.3]. Pre-defined symbols are available in the MIDAS assembler consisting of a "." followed by an "R" for read or a "S" for set followed by the string in the name column of the above table for all its entries. Procedure Interaction See also section 0.3.4 and 3.4.2. 5.1 The Hierarchical Organization of Procedures All procedures operating under ITS are members of a tree structure recorded in the system by associating with each a pointer to its immediate superior. If this pointer is minus one it indicates that the procedure tops a tree. These trees may be of two types, those under the control of a console and those that are disowned [Sec 5.2.2]. Console "controlled" trees have had their top level procedure automatically loaded by ITS [Sec 1.1]. Since procedures may control their inferiors and the most that the user can do in appealing for aid when confronted with recalcitrant programs is to cause his console to converse with higher level procedures [Sec 1.1.2], he is actually at the mercy of this top level program. It is currently a DDT expanded by the addition of new commands related to time sharing [Sec 7]. About the only restrictions deliberately inserted in it relate to logging in [Sec 6.1]. Disowned procedure trees differ from console controlled trees only in the following ways: 1. The have no console associated with them. 2. Class one interrupts in a top level procedure are handled differently [Sec 4.2]. 3. They are scheduled with lower priority [Sec 4.4]. 4. Certain system calls, when executed in them, are treated as illegal instructions. 5. Certain input-output devices are not accessible by them. There exist a variety of means for procedures immediately above and below each other to interact [Sec 5.2, 5.3]. Procedures may also affect any procedure beneath them in the procedure tree by means of input-output translation table entries [Sec 2.2.2] and an arbitrary pair of procedures may converse treating each other as input-output devices [Sec 3.4.3]. Among the advantages of the above system of procedure organization are the following: 1. The highest level command processor (the top level procedure of a console controlled tree) may vary arbitrarily from user to user. In actual operation it is normal to see a HACTRN's whose inferior procedure variables and symbol tables much exceed their code. 2. New versions of the highest level command processor may be introduced simply by writing a file on the dik with no interruption to system continuity. 3. New versions of the highest level command processor may be easily and safely debugged by loading them as inferior procedures. In this position they can exercise all their normal functions except logging in and out. 4. It is not necessary to make every effort to remove all bugs from the highest level command processor for fear that the system may be destroyed by them, a consideration often inhibiting more complex and powerful command languages. A fatal error simply results in the program being reloaded. 5. Users have great generality in creating command levels of their own. 6. Multi-task programs may be organized in a consistent manner. Items 1, 2 and 4 above argue to various extents against pure procedures as does their inherent speed inefficiency. Having to maintain seperate copies of the highest level command processor for each user is not that significant a disadvantage if one considers the amount of each copy's core image unique to each user and that while not in actual use they could be swapped out of the system. 5.1.1 Procedure Creation Procedures may be created only by typing ^Z on an idle teletype [Sec 1.1.1] or by executing a .OPEN [Sec 2.2] on device USR [Sec 3.4.2]. In the second case, which is discussed here, there are strict requirements on the "file name" used in the .OPEN. The first file name, which will be the UNAME of the created procedure, must be the same as the UNAME of the procedure executing the .OPEN. The second file name, which will be the JNAME of the created procedure, must be different from the JNAME of all jobs then in existence that have the UNAME being used. A procedure may have a maximum of eight directly inferior procedures. A newly created procedure will have one 2000 word block of cleared memory and all of its system variables initialized. 5.1.2 Attaching Disowned Procedure Trees The only case in which a successful .OPEN [Sec 2.2] on device USR [Sec 3.4.2] may be executed to provide an inferior procedure (as opposed to opening a procedure for examination only) with a first file name different from the UNAME of the procedure executing the .OPEN is that in which the top procedure of a disowned tree is being opened. This type of .OPEN will be treated as an illegal instruction if executed by a procedure in a disowned tree. If not and the opening procedure has less than eight inferiors the open will succeed and ITS will modify the UNAME of the opened procedure and its inferior tree to agree with the opening procedure. It will then take each UNAME JNAME pair in the attached tree and make it unique by incrementing the JNAME part if necessary. 5.1.3 The .UTRAN UUO CALL: .UTRAN FBLOCK ;error return ;no inferior found for int bit ;normal return ;inferior found FBLOCK: INTBIT,, ;UNAME stored here by call 0 ;JNAME stored here by call When a procedure is first created by a .OPEN, ITS assigns to it a bit for use in interrupts [Sec 4.2] to its superior procedure different from that for any other inferior procedure its superior may have. Since inferior procedures can only be directly controlled when open on input-output channels, the loss of the name of an inferior by its superior while it was not open would result in complete loss of communication. Although procedures that have inferiors normally keep close track of their names and interrupt bits as read by .USET's [Sec 5.2.3], this system call has been provided to translate from particular interrupt bit to name of inferior. The left half of the contents of the effective address must have only the appropriate interrupt bit on. If a corresponding inferior procedure is found, the .UTRAN skips and the UNAME and JNAME of the inferior are stored in the two words after the word containing the interrupt bit. If not corresponding inferior is found the .UTRAN will fail to skip and the two locations after the location it effectively addresses will be unmodified. 5.2 Controls over an Immediately Inferior Procedure See also section 3.2.1.1. 5.2.1 The .UCLOSE UUO CALL: .UCLOSE CHNUM, ;return Procedures may be destroyed only by the execution of a .LOGOUT [Sec 6.1] or a .UCLOSE. The second of these two system calls, which is discussed here, destroys the inferior procedure open on the channel specified by its accumulator field (CHNUM in the above illustration) and the entire procedure subtree of which this inferior is the top procedure. If an inferior is not open on the channel, the .UCLOSE'ing procedure will receive an input-output channel error interrupt. .CLOSE's [Sec 2.7.1] are automatically effected on all channels of all destroyed procedures and any system resources they claim are surrendered (by possibly simulating a .DCLOSE, .HANGUP, and/or .MASTER). In order to kill certain cancerous types of procedure subtrees it has been found necessary to implement this system call such that it first stops all procedures in the subtree and then destroys them. 5.2.2 The .DISOWN UUO CALL: .DISOWN CHNUM, ;return This system call requires that an inferior procedure be open on the channel specified by its accumulator field (CHNUM in the above illustration) or the .DISOWN'ing procedure will receive an input-output channel error interrupt. It causes this open procedure to become the top procedure of a disowned tree [Sec 5.1] and in the process closes all channels on which the disowning procedure has it open. A procedure in a disowned tree that tries to execute this system call will be unsuccessful and receive an illegal instruction interrupt [Sec 4.2] as will a procedure trying to disown a subtree that controls the tree's console [Sec 3.2.1.1]. 5.2.3 The .USET UUO CALL: .USET,[DIRECTION+VARIABLE,,DATLOC] ;return DATLOC: ;location read into or set from This system call was created to allow a procedure to set and read many of the system variables [App D] associated with its inferiors and to read variables associated with other procedures. When executed its accumulator field must contain the number of a channel (CHNUM in the above illustration) on which a procedure open or the .USET'ing procedure will receive an input-output channel error interrupt. Otherwise it is very similar to .SUSET [Sec 4.5]. Reading is allowed if the 1.1 bit is on in the type column of the table in section 4.5. Setting is allowed for immediate inferiors if the 1.2 bit is on in that table. 5.3 Communication to an Immediately Superior Procedure 5.3.1 The .VALUE UUO CALL: .VALUE ARGLOC ;return if restarted ARGLOC: ARG ;transmitted to superior procedure A procedure executing this system call receives a class one interrupt [Sec 4.2] stopping it and interrupting its superior procedure. The contents of the effective address is saved in a system variable associated with the procedure [App D] so its superior can easily retreive it with a .USET [Sec 5.2.3]. 5.3.2 The .BREAK UUO CALL: .BREAK ARG1,ARG2 ;return if restarted The accumulator field and effective address of this UUO are ignored by ITS. A procedure executing it receives a class one interrupt [Sec 4.2] stopping it and interrupting its superior procedure. 5.4 The .GUN UUO MOVEI AC,USRINDEX CALL: .GUN AC, ;failure return ;normal return This system call, intended for use as a last resort, allows any procedure in a console controlled tree to expunge another tree from the system. The procedure specifies the tree to by .GUN'ed down by the user index (see section 8.2, mode N) of its top procedure. This is used instead of the normally unique UNAME JNAME pair so that easy reference may be had to procedures not logged in [Sec 6.1]. The contents of the accumulator specified by a .GUN must be the user index (can be read with .USET) of a top level [Sec 5.1] procedure other than the system job [Sec 6.5] or core job [Sec 4.3]. If the procedure executing the .GUN is in a disowned tree it will receive an illegal instruction interrupt. The .GUN skips if successful at which point the system job will have been informed of the tree it is desired to expunge, which action the system job will, in due course, perform, also typing out an appropriate message. If the above restrictions on the specified user index are not met the .GUN will return without skipping. Miscellaneous System Calls and Features See also section 0.3.5. 6.1 The .LOGIN and .LOGOUT UUO's These two system calls are the only ones that are effective only at the top level. CALL: .LOGOUT ;return if not top level .LOGOUT has no effect and simply returns from the system to the instruction following if not executed in a top level procedure. It causes the procedure tree in whose top procedure it is executed in to be expunged from the system. It works for both console controlled trees and disowned trees. Since the normal means to create [Sec 5.1.1] and destroy [Sec 5.2.1] a procedure under ITS are calls in a superior procedure, the special case of the top level procedure must be handled differently as it is by ^Z [Sec 1.1.1] and .LOGOUT. MOVE AC,[SIXBIT /NAME/] CALL: .LOGIN AC, ;error return ;normal return .LOGIN is not restricted to top level procedures by ITS but rather by HACTRN, the top level procedure ITS automatically loads [Sec 7]. A .LOGIN represents an attempt by a procedure to set its UNAME to the contents of the accumulator specified. This is allowed by ITS only if the procedures's current UNAME is minus one (as the UNAME of initial HACTRN's is set) and the desired UNAME is neither zero, minus one, nor the UNAME of an extant console controlled tree. The success of a .LOGIN is signalled by its skipping. HACTRN will not open inferior procedures for a user until he has successfully logged in at which point his inferior procedures will have UNAME's dooming future .LOGIN's in that tree to failure. 6.2 Nonstandard Devices 6.2.1 The .RDSW UUO CALL: .RDSW AC, ;return This system call reads (DATAI's [Ref 1]) the contents of the data switches on the PDP-6's console into the specified accumulator. 6.2.2 The .RD760 and .WR760 UUO's CALL: .RD760 AC, ;return CALL: MOVE AC,[BITS] .WR760 AC, ;return These system calls respectively read the data register (DATAI) of the device whose PDP-6 device number is 760 into the specified accumulator and output (DATAC) from the specified accumulator to the data register of the device [Ref 1]. The bits in the data register of this device are usually used for temporary direct control or sense hookups. Currently the bottom six bits control lights on the hand of the AMF arm [Sec 3.3.2]. 6.2.3 The .RD710 UUO CALL: .RD710 AC, ;return The real time clock, which ITS currently uses to time user quanta, has, as well as an interval timing counter, a clock counter which is neither set or stopped by ITS. This system call reads into the specified accumulator a word whose bottom twenty four bits are this clock counter. It is incremented once every 4.069 microseconds. 6.2.4 The .RD500 UUO CALL: .RD500 AC, ;return This call reads (DATAI's) into the specified accumulator from device 500. This device is purported to be or become yet another kind of clock. See Paul DeCoriolis for more information. 6.3 Various Times and the Date 6.3.1 The .RDTIME UUO CALL: .RDTIME AC, ;return This system call reads into the specified accumulator the internal system time which is a word set to zero when a system is first loaded and is incremented every thirtieth of a second thereafter. This quantity is useful in conjunction with .SLEEP [Sec 6.8.1]. 6.3.2 The .RTIME UUO CALL: .RTIME AC, ;return After the system has determined real (24 hour system) time, it maintains this internally as a number in units of one half second since the last midnight. This system call reads into the specified accumulator in sixbit characters this time in pairs of digits, reading from the left, hours, minutes, and seconds. If the time has not yet been determined, minus one will be read. 6.3.3 The .RDATE UUO CALL: .RDATE AC, ;return After the system has determined the calendar date, it maintains it internally as a word with sixbit characters in it. These characters are all numeric. The first two are the last two digits of the year, the next two are the month number, and the last two digits are the day of the month. This system call reads this word into the specified accumulator. If the date has not yet been determined, minus one will be read. In the current implementation, the date being determined implies that the time [Sec 6.3.2] has been determined. The date is correctly incremented every midnight. 6.4 The MAR Feature In order to simulate the address stop facility of the PDP-6 in a time shared mode, it was decided to introduce a new hardware register, the MAR register, to cause interrupts when a particular location was addressed by the computer. To increase the flexibility of this feature, three control bits were added which further define the interrupt condition given that a memory address match has occurred. Among the system variables [App D] kept by ITS for each procedure are its MAR register contents and control bits. These are loaded into the hardware as the user is started. Since the MAR feature is intended primarily as a debugging aid, it causes a class two interrupt [Sec 4.2] and a .USET [Sec 5.2.3] is used to set it from DDT [Sec 7] more frequently than a procedure sets its own with an .SUSET [Sec 4.5]. .USET and .SUSET take the right half of the word set from as the new address to be put in the MAR register and the low three bits of the left half as control bits as follows: Bit Meaning (one state) 3.3 Interrupt if data read or written is negative 3.2 Interrupt if data read or written is positive 3.1 Interrupt only on a write At this time, attempts to differentiate read cycles on the basis of sign will fail as, due to a timing error, the data always appears positive. If a write cycle is interrupted on, the protected location will have been modified when the interrupt is processed. When an MAR interrupt occurs, further MAR interrupts are disabled until the MAR is again set. A .SUSET or .USET may be used to read the word stored by the JSR at the system's processor interrupt channel location when the last MAR interrupt occurred. Although, for their own safety, some parts of executive code inhibit MAR interrupts, it is quite possible for the user to cause some system calls to interrupt to the user, on reference to his core image where his MAR is pointing. The program counter word stored by the JSR at the user's location 42 [Sec 4.2] will be the location in his core image of the offending system call. The word read by a .SUSET or .USET will be an executive program counter word showing the absolute location at which the system call first attempted to reference the user's protected location. 6.5 The System Job There are various tasks ITS would like to perform, most of which include input-output or waiting indefinite periods of time, which would be inconvenient to implement directly due to the procedure originated orientation of almost all system routines. Because of this a procedure was synthesized, known as the system job, that is actually a part of the monitor and always runs in executive mode. To aid in debugging ITS a feature was added to the system job so that when it had no other tasks to perform it would compare constant parts of ITS against a copy it makes initially [Sec 6.5.1]. The following are some of the other tasks the system job performs: 1. Does .CORE's [Sec 4.3.1] for ITS to make room for more blocks of user variables or for the system job's copy of constant parts of ITS. 2. Prints messages on the system console whenever an effective .SETLOC, .GUN, .IOTLSR, .LOGIN, .LOGOUT, or .OPEN for output or .FDELE on device SYS is executed. 3. Prints messages on the system console when a parity error, unrequested change in teletype priority interrupt channel allocation, memory excessively full condition, or garbage collection of DSK user directory is detected. 4. Initially determines the 24 hour time and calendar date [Sec 6.3.2, 6.3.3]. 5. Prints a message on all teletypes when the system is first loaded. 6. Outputs a "CONSOLE FREE" message on any teletype when it is no longer open by any procedure. 7. Various tasks related to the system going down feature [Sec 6.5.2] and TPL device [Sec 3.4.5]. 6.5.1 The .SUPSET UUO MOVEI AC,2 CALL: .SUPSET AC, ;return The system job is partially controlled by ITS through a word in system memory. Bits to the left of 2.8 in this system word represent requests for some transient action. In the right half the bottom two bits (1.1--1.2) are currently used. Bit 1.1 controls the system checking feature. If this bit is on, the system job makes a copy of the constant parts of ITS and procedes to spend its spare time checking the areas it copied against the copy. If a discrepency occurs, a message is printed and the copy corrected. If this bit is off, the system job will destroy any copy it may have, freeing that memory and most of the fraction of the machine time the system job uses when in checking mode. Bit 1.2 affects the TPL device [Sec 3.4.5]. If it is on, TPL use of the LPT device is inhibited. Furthermore if a TPL file is being printed when this bit is turned on, it will be deleted, output will be aborted, and the LPT device freed. The .SUPSET system call enables the user to control the system checking bit by XOR'ing [Ref 1] bits 1.1--2.8 of the specified accumulator into the system job control word and returning the resulting value in the specified accumulator. It also types out a message on the system job console like the message for .SETLOC. 6.5.2 The System Going Down Feature To provide an orderly means for the termination of the operation of ITS, a special feature has been added. It is activated by setting absolute location 37 negative (either with the PDP-6 console keys [Ref 1] or a .SETLOC [Sec 3.8.4]) or using .SHUTDN [Sec 6.5.2.1]. After a negative location 37 is noticed, all procedures for which it is enabled will receive a system going down interrupt [Sec 4.2] and all free teletypes have an appropriate message typed on them. Then a five minute timer is started and new console trees started [Sec 1.1.1] will be given a system going down interrupt right after they are created. When the timer times out or when the number of console controlled trees in which successful .LOGIN's [Sec 6.1] have been executed goes to zero, all trees are forcably logged out and a message typed on all teletypes. All DEC tapes [Sec 3.1.2] for which the system is retaining a directory are flapped. 6.5.2.1 The .SHUTDN UUO MOVE AC, [TIME] CALL: .SHUTDN AC, ;error return ;normal return This system call, which is illegal for procedures in a disowned tree, is a request for the system to go down [Sec 6.5.2] in as many thirtieths of a second as the contents of the specified accumulator. If an amount less than five minutes is specified, it will be treated as though it had been five minutes. If the system is already going down in less time than specified, this call will be ignored and return without skipping. If the system is going down in a longer time than specified or not going down at all the call will succeed and skip. It will cause a system going down interrupt to all enabled procedures and start a timer for the specified length of time. New console trees created thereafter [Sec 1.1.1] will also receive a system going down interrupt when created. If the time till system death passes through five minutes, all enabled procedures will be interrupted again. The conditions for and actions on actual death are as in section 6.5.2. 6.5.2.2 The .DIETIM UUO CALL: .DIETIM AC, ;return This system call sets its specified accumulator to minus one if the then running ITS is not going down [Sec 6.5.2]. If it is, the accumulator is set to the maximum time till system death in thirtieths of a second. 6.6 Examining ITS 6.6.1 The .GETSYS UUO MOVE AC,[--LENGTH,,DATLOC] MOVE AC+1,[SIXBIT /AREA/] CALL: .GETSYS AC, ;error return ;normal return DATLOC: BLOCK LENGTH ;area read into This system call enables a procedure to receive copies of various internal monitor areas in such a way that the data in those areas must be consistent. The specified accumulator contains a pointer word as for a block mode .IOT [Sec 2.3]. If the left half of the accumulator is zero, the block is treated as running to the end of the user's core image. The location following the specified accumulator contains, in left justified sixbit, the area requested as follows: Sixbit Area TRANS Translation table [Sec 2.2.2]. GETS List of things which can be requested with .GETSYS. DEVS List of available symbolic input-output devices [App C]. MEMORY Memory allocation tables [Sec 4.3]. UTAPE DEC tape routine variables [Sec 3.1.2]. CLINK Core link variables [Sec 3.4.3]. CALLS List of symbols in squoze [Ref 3] for system calls [App A] and .SUSET [Sec 4.5] left halves and their values. DSYMS Symbol table for ITS. IMPX Area input multiplextor cycled into [Sec 3.3.3]. OMPX Area output multiplexor cycled from [Sec 3.3.2]. USERS User variables for all procedures [App D]. USER User variables for particular user specified by UNAME and JNAME in locations two and three greater than the specified accumulator [App D]. If user not found location containing UNAME will be zeroed. Interrupts are inhibited to a sufficient extent that the data obtained can not be inconsistent due to the area's modification while being transferred to the user. A successful .GETSYS will skip. One that fails, due to non-recognition of its sixbit word or insufficient memory specified by its pointer word, will not skip and in the former case the sixbit word will be zeroed. 6.6.2 The .GETLOC UUO MOVE AC,[ABSLOC,,DATLOC] CALL: .GETLOC AC, ;return DATLOC: 0 ;contents of ABSLOC stored here This system call simply transfers the contents of the absolute location pointed to by the left half of the specified accumulator to the user's relative location pointed to by the right half. If the right half points beyond the user's memory bound he will receive an illegal instruction interrupt [Sec 4.2]. 6.6.3 The .RSYSI UUO CALL: .RSYSI AC, ;return This system call reads into the specified accumulator the sixbit representations of the second file name of the symbolic file that was assembled to produce the running version of ITS. 6.6.4 The .EVAL UUO MOVE AC,[SQUOZE sym] CALL: .EVAL AC, ;error return ;normal return The .EVAL system call allows a user to easily look up symbols in high core DDT's table of system symbols. The "squoze" code [Ref 3] for the symbol should be put in the accumulator specified. If the symbol is not found, the call will return without skipping. If it is found its value will be placed in the specified accumulator and the call will skip on returning. 6.7 The One Proceed Feature The Project MAC AI Group PDP-6 has been modified so that there exists a mode in which it executes one instruction and then traps. This mode is properly stored when an interrupt occurs and is restored by JRST 2, [Ref 1]. For users it causes a class one interrupt and is expected to be used by superior (such as DDT [Sec 7] procedures by .USET'ing [Sec 5.2.3] the 3.9 bit of their inferior's program counter word. There is coding in ITS such that all system calls will appear to be single instructions using this mode. While in this mode a user interrupt may be serviced and the user's status, including this mode, will be restored by a normal .DISMISS [Sec 4.2.2]. 6.8 Miscellaneous 6.8.1 The .SLEEP UUO MOVE AC,[TIME] CALL: .SLEEP AC, ;return eventually This system call allows a procedure to stop running, while remaining interruptable, by either specifying a length of time to remain quiescent or a particular time to wake up. If the specified accumulator contains a positive number it is considered the length of time, in thirtieths of a second, that the procedure wishes to sleep. If the specified accumulator contains a negative number then the procedure will sleep until the magnitude of system time (as read by .RDTIME [Sec 6.3.1]) is greater than the magnitude of this negative number. When a .SLEEP returns, the accumulator specified will be zero, but if a program is interrupted out of either type of .SLEEP the accumulator will be seen to contain the appropriate negative number. 6.8.2 The .GENSYM UUO CALL: .GENSYM AC, ;return This system call returns in the specified accumulator a valid sixbit file-name-like symbol that will be unique among those returned by .GENSYM's for a particular system run. 6.8.3 The .IOTLSR UUO MOVSI AC,400000 ;or 0 to release CALL: .IOTLSR AC, ;return Procedures run by ITS in IOT-user mode may execute hardware input-output instructions which would otherwise be ineffective and trap to the monitor. This system call sets the IOT-user status of the procedure executing it from the sign bit of the specified accumulator. If this bit is a one the procedure will attempt to enter IOT-user mode. If it is not currently in IOT-user mode it will enter it and a message will be output by the system job [Sec 6.5] unless the procedure is in a disowned tree in which case it will receive an illegal instruction interrupt [Sec 4.2]. If this bit is a zero, the procedure will not be in IOT-user mode after the .IOTLSR. 6.8.4 The .SETLOC and .IFSET UUO's MOVE AC,[DATLOC,,ABSLOC] CALL: .SETLOC AC, ;return DATLOC: ... ;data from here written in ABSLOC The .SETLOC system call treats the specified accumulator as two half word pointers. It takes the contents of the relative user location pointed to by the left half and places it in the absolute location pointed to by the right half and causes the system job to output an appropriate message [Sec 6.5] unless the procedure executing it is in a disowned tree in which case the procedure will receive an illegal instruction interrupt [Sec 4.2]. MOVE AC,[DATBLK,,ABSLOC] CALL: .IFSET AC, ;error return ;normal return DATBLK: TESTWD ;tested against c(ABSLOC) SETWRD ;set into ABSLOC if test succeeds The .IFSET system call is very similar to .SETLOC. The left half of its accumulator, however, points to a two word block. It first compares the first of these two words against the specified absolute location. If they are not equal, it returns immediately without skipping. If they are equal, it proceeds as for .SETLOC but sets from the second word of the block and skips on returning. Going to the extra effort to use .IFSET is much safer of you think there is some chance that the absolute location you are setting may be moved by the core allocator. 6.8.5 The .MASTER UUO MOVSI AC,400000 ;or 0 to release CALL: .MASTER AC, ;error return ;normal return ITS has a specified feature whereby one procedure can receive peferential treatment. It will be scheduled [Sec 4.4] with twice the priority of a normal procedure (running in competition with a second running job, it would reach an equilibrium where it was using twice as much machine time) and is given preference in the use of the DEC 340 display [Sec 3.4.1]. To request this status a procedure should execute a .MASTER with the 4.9 bit of the specified accumulator a one. It will succeed, and the .MASTER will skip, if no procedure has the facility seized or if the procedure executing the .MASTER has control [Sec 3.2.1.1] of teletype T00 (the "main console" in front of the 340 display). If the later case, the facility may be removed from another procedure having it. A failing .MASTER returns without skipping. The facility may be released by executing a .MASTER with the specified accumulator having bit 4.9 zero. This always skips even if the procedure does not have the facility to release. 6.8.6 The .REDEF UUO MOVEI AC,SYMBLK CALL: .REDEF AC, ;error return ;normal return SYMBLK: SQUOZE BITS,sym VALUE This system call allows the user to define, redefine, and delete system symbols from high core DDT's symbol table. It is illegal for a procedure in a disowned procedure tree. The accumulator specified by it should contain a pointer to a two word block. The first word in this block should be the "squoze" code [Ref 3] for the symbol to be affected. The second word is the new value for a define (the symbol is not currently in the table) or redefine (the symbol currently is in the table). A delete request is indicated by having all four squoze flag bits (BITS in the above illustration) on. The call skips if successful. It can fail only on an attempt to define a new symbol when there is no more room above the time sharing system. DDT See also section 0.4.1. 7.1 Introduction DDT is a general purpose machine language debugging program that has been extensively modified to act as a supervisory procedure in ITS. It is automatically loaded by ITS [Sec 1.1.1] when a user informs ITS of his presence at an idle teletype. All further requests of the system by the user, until he logs out, are by means of trapping instructions [Sec 1.2] executed for the user, possibly as a result of characters he types in, by DDT or procedures inferior [Sec 5.1] to and under the control of DDT. The current binary of DDT exists as the file "@ HACTRN" on device SYS [Sec 3.1.3]. For historic reasons, a top level DDT is known as a HACTRN (pronounced hack-tran). The initial command structure of DDT provided single character debugging commands of limited mnemonicity. This structure was badly strained by the introduction of time-shared related commands. Then a new set of multi-letter commands was introduced. This set was expanded with the thought of providing all the most frequently used commands that did not relate to machine language debugging. Since a beginning or transient user might wish to use only these mnemonic commands, a mode switch was added to DDT. There is a "monitor mode" in which only the multi-letter commands are available besides a few interrupt level commands that are unaffected by mode. In "DDT mode" all of the single character debugging commands are also available. Section 7.2 below gives more information on monitor mode and describes almost all monitor mode commands. Section 7.3 describes the few interrupt mode commands in HACTRN and section 7.4 explains how DDT tells the user about error conditions. The information in these three sections should be more than enough to enable extensive use of ITS, particularly the conversational and interpretive programs avaiable under it (such as TECO, LISP and STRING). The remaining section (7.5) gives information on finding out about DDT mode commands. These would be important to someone developing a machine language program. 7.1.1 When DDT Starts When a new copy of DDT is started, it types out certain useful information. If output is to a GE Datanet 760 console, it first clears the screen. Then it types out "DDT.xxx." where xxx is the version number of the DDT so that bugs can be correctly matched to version. Then, if ITS is in the system going down mode [Sec 6.5.2], a message indicating its remaining life span is output. Finally, if a file named "SYSTEM MAIL" is found on device SYS [Sec 3.1.3], it is typed out. 7.2 Monitor Mode Commands When in monitor mode [Sec 7.1], DDT indicates its readiness to accept a command by typing out a ":". At this point the user can type a series of letters followed by a break character (normally space or carriage return). DDT looks up this symbol (or its first six letters if longer) in a table of monitor mode commands. A user may also type a comment that will be ignored by DDT in or before this string by beginning and ending it with an "^$" (alt.-mode). No "^$" s may be embedded in the comment. If the symbol is found, control is transferred to a routine associated with it which may perform immediate actions or wait for more information to be typed by the user. At any time during the typing of a command, the user can abort and start over by typing a rubout. If the string (say "llll") after the ":" is not found in DDT's command table, it looks for a file called "TS llll" on device SYS [Sec 3.1.3]. If not found an error comment [Sec 7.4] to that effect is output. If found, an inferior procedure is created, this file loaded into the inferior core image, and it is then started. The effect is as though the following [Sec 7.2] were typed: :JOB llll :LOAD SYS: TS llll except that symbols for the program are not loaded into DDT from the file and the normal effects of :LOAD on the current file and device names in DDT is absent. 7.2.1 Logging In and Out :LOGIN uname This command takes as its argument the "uname" that the user wishes to log in with [Sec 6.2]. A "?" will be typed out and the command will be ineffective if someone is already logged in with that name. For ease in accessing his disk files, a user should use a consistent UNAME. At the time the user logs in, DDT looks for a file names "uname MAIL" on device COM [Sec 3.1.3]. If not found, no action is taken by DDT. If found, DDT types it out, deletes the file "uname OMAIL", if any, on device COM, and renames the "uname MAIL" file as "uname OMAIL". :LOGOUT This command expunges all of the user's procedures from the system including the user's HACTRN [Sec 6.1]. The teletype the user was typing on will become free and a message to that effect will be typed out on it by the system job [Sec 6.5]. DDT also deletes the file "uname OMAIL" on device COM at this time (where "uname) is the name the user logged in as). 7.2.2 Inter User Communication :MAIL uname string...^C This command takes as its first argument the user name of someone who uses ITS and as its second argument a string terminated by a "^C" . The command prefixes the string to the file "uname MAIL" on device COM [Sec 3.1.3] if such a file exists. If no such file exists, one is created with the string as its contents. This file is presented to the specified user when he logs in [Sec 7.2.1]. The user can rubout individual characters while typing the string or cancel the command by typing enough rubouts. :BUG string...^C This command is intended for use in reporting bugs in systems software. It is identical to ":MAIL SYS string...^C". :SEND uname string...^C This command takes arguments like :MAIL above but attempts to send the message string supplied to the user specified in a direct manner so that, if he is logged in, his HACTRN will type the string out on his console. If he is not logged in, DDT will type out "(MAIL)" and perform the actions specified under :MAIL above. :GAG number This command enables a user to gag messages that other users may attempt to send the him with :SEND (above). It takes a numeric argument that is bit decoded as per the table below. Bit Source 1.1 Other user's inferiors. 1.2 Other user's HACTRN's. 1.3 Your inferiors. 1.4 Your HACTRN (yourself). If a bit is on it inhibits messages from the source listed. If off, messages are not inhibited. The initial state is :GAG 1. The current implementation gives no way to tell if a message sent was gagged by the intended receiver. 7.2.3 Inferior Procedures :JOB {jname} This command may be followed by an optional job name [Sec 5.1]. If there is an inferior procedure with this JNAME it will be selected by HACTRN as its "current job" (possibly attaching a disowned tree [Sec 5.1.2]). Many commands in DDT affect the current job only as this changes infrequently and one would not want to respecify it with each command. If there is no inferior with the specified name, one will be created [Sec 5.1.1] and selected as the current job. The job names SYS and PDP10 are special. The first allows the user limited access to absolute core. The second allows full access to the core image of the PDP-10 [Sec 3.4.2.1] to one user. If no argument is supplied to :JOB it attempts to select some job different from the current one and types out "jname$J" to inform the user it has selected job "jname". If there is no current or other job, nothing it typed out. If the current job is the only inferior of HACTRN it will be reselected. If other inferiors exist one is selected in such a way that all inferiors are cycled through by successive :JOB's with no argument. :KILL This command obliterates [Sec 5.2.1] the current job and all its inferiors if it is an immediate inferior. If not an immediate inferior the variable space for it in HACTRN is reclaimed and logical pointers to it obliterated. In either case a :JOB with no argument is then simulated to minimize the time during which there is no current job. :LISTJ This command lists all of the inferiors of which HACTRN is aware. An "*" is printed before the current job, if any. After each job will be a character indicating its state as follows: Character Status -- Just created or loaded. R Running. P Procedable from random interrupt. Bn Procedable from breakpoint n [Sec 7.5]. W Interrupt/message to HACTRN pending. After this letter is the user index of the procedure (see section 8.2, mode N). An example of :LISTJ output appears in Appendix G. :DISOWN This command disowns [Sec 5.2.2] the current job, deselecting it, expunging all information about it in HACTRN, and simulating a :JOB with no argument. :LOAD {file specification} This command attempts to load a file into the current job. HACTRN has a current device, system name [Sec 2.2.3], and pair of file names which it will use if nothing is specified after a command taking a file argument. This current file is initially device DSK, file name "@ BIN", and the system name the user logged in as [Sec 7.2.1]. Various fields can appear in the file specification distinguished by their terminating character. A "dev:" field sets the device to "dev". An "sname;" sets the system name to "sname". A field terminated by a space or carriage return (the later indicating the end of the file specification) is treated differently depending on how many of this type of field have been seen. The first, if any, such becomes the first file name. The second, if any, becomes the second file name. A third, if supplied, becomes the device name (as if followed by a ":") and indicates the end of the file specification. :DUMP {file specification} This command dumps the current job as a file optionally specified as in :LOAD above. :START {number} This command starts the current job, giving it control of the user's console [Sec 3.2.1.1]. If no argument is supplied it is started at the last place it was started with a :START. if not :START'ed before then at the assembled-in starting address that was read in as the program was loaded. If no starting address was supplied a "?" is typed out. If a numeric argument is supplied, the job is started at the specified address which is stored away for future :START's without argument. :CONFIX{UE} This restarts the current job if it is stopped and gives it control of the user's console. It can be used to continue after returning to HACTRN with a "^Z" [Sec 1.1.2]. :PROCED This command restarts the current job if it is stopped but leaves HACTRN in control of the user's console. Using this command the user can easily get several inferiors running at the same time. 7.2.4 Files and Input-Output :PRINT {file specification} This command treats a file as ASCII characters and prints it out. It accepts an optional file specification as described under :LOAD [Sec 7.2.3] above. :DELETE {file specification} This command deletes [Sec 2.4] a file. It takes an optional file specification as described under :LOAD [Sec 7.2.3] above. :LISTF {device name} This command lists the files on HACTRN's current device or the device specified as an argument [Sec 2.2.1]. :FLAP number This command must be followed by the number of a DEC tape drive. It causes the tape on the specified drive to by physically demounted and its directory to be excised from ITS [Sec 3.1.2.1]. :LINK {file name pair} sname; fnam1 fnam2 This command creates a link [Sec 3.1.1.1] under HACTRN's current system name to the file "fname1 fname2" under system name "sname". The link's file name is also "fnam1 fnam2" unless the optional file names shown above are supplied. 7.2.5 The "Control-P" Feature DDT has a feature which is designed to reduce the need to repeatedly type the same or very similar file names at different systems programs. For historic reasons this is called a "Control-P" feature. This feature is implemented using a block of four locations in DDT. These are deposited in the core image of a newly loaded inferior by the execution of certain DDT mode [Sec 7.5] commands and certain of the commands explained below. The locations set in an inferior and their significance are as follows: Location Significance 50 First file name. 51 New second file name. 52 Current second file name. 53 Old second file name. :CR This command reads in a file name as for :LOAD [Sec 7.2.3]. It puts the first file name read in the DDT word to be deposited in location 50. It puts the second file name in the DDT word to be deposited in location 52 and the second file name incremented in the word to be deposited in location 51. It clears the word to be deposited in 53 and finally loads, deposits in 50 through 53, and starts a copy of TECO, the normal ITS editing program, as for a :TECO [Sec 7.2] except for the depositing in 50 through 53. :ED This command increments the file name in the location to be put in 51 and then puts the incremented file name back after moving what was there into the location to be put in 52 and similarly moving that word into the location to be put into 53. it then loads, deposits in, and starts a copy of TECO, the normal ITS editor, as for a :TECO [Sec 7.2] except for the depositing in 50 through 53. :ST This command simply reads a file name and does the same thing with it as :CR (described above) except it does not load or start a TECO. 7.2.6 Miscellaneous :? This command lists all important monitor mode commands with a short explanation of each. An example is shown in Appendix G. :DDT This command switches HACTRN to DDT mode [Sec 7.1]. :MON This command switches HACTRN to monitor mode [Sec 7.1]. :XFILE {file specification} This command reads the file, optionally specified as for :LOAD [Sec 7.2.3] above, and, treating it as ASCII, executes it as HACTRN commands. :SYNLOD Mostly useful in conjunction with DDT mode [Sec 7.5] commands, this command loads symbols only for the current job. It takes an optional file specification as for :LOAD [Sec 7.2.3] above. :ERR Mostly useful in conjunction with DDT mode [Sec 7.5] commands, this command interprets the last quantity typed out by HACTRN as a .STATUS [Sec 2.5] word using the ERR device [Sec 3.4.4]. 7.3 Interrupt Level and Context Tree Commands There are six single character commands to HACTRN that are interpreted at its interrupt level or at its top level in a manner independent of and not affecting the context in which they occur. They are presented in alphabetic order below. Two provide the user with the ability to "silence" any particular output of his HACTRN and abort it from a hung state. The remaining four control where HACTRN's output goes. Character Effect ^B Attempts to seize the line printer [Sec 3.2.2]. If successful, causes HACTRN output to be printed. ^E Releases the line printer [Sec 3.2.2] and stops HACTRN output from being printed. ^G Interpreted at the interrupt level, this command causes HACTRN to abort from whatever it is doing, type out ""QUIT?, and wait for new commands. This command should only be used when necessary (ie HACTRN seems to be permanently hung up) as there is almost no protection from interrupting out of embarrasing places where variables are out of phase, etc. All buffered type in and out is also reset [Sec 2.7.2]. ^S This character is interpreted at both interrupt and top level. It inhibits HACTRN output, also doing a type out reset [Sec 2.7.2], between these two interpretations. Thus ""^S is a much less drastic step than ""^G (above) to be used when the only trouble is that HACTRN is being somewhat long winded. It re-enables output when HACTRN gets around to it at the top level. ^V This command causes HACTRN output to be typed. It is the initial state. ^W This command stops HACTRN output from being typed. 7.4 Error Comments DDT used to have two error comments, "U" and "?". The first of these is typed out when an undefined symbol is evaluated, usually when it is terminated by a non-symbol-constituent. The second was typed out for all other errors. it has been significantly augmented. Errors in attempting to open, rename, or delete a file are indicated by the comment produced by the ERR device [Sec 3.4.4] followed by the symbolic name of the device and a question mark. In the case of an input-output error interrupt from an .IOT or .OPER, a special check is made to see if the error is device full on the input-output channel on which dumps are written. If so, the partial dump is deleted and an appropriate message output. Otherwise, the following error comment is output. n, m, p, IOC? where n is the error number, m the input-output channel on which it occurred, and p the location of the offending .IOT or .OPER. For other errors indicated by interrupts the following is output: n, p, INT? where n is a number with the interrupt bits on and p is the location interrupted from. Other error comment listed in the following table: Output Meaning NML? Interrupt from unknown inferior. TMJ? Attempt to have too many inferiors. CKS? Checksum error on load. EOF? Unexpected end-of-file on read. CFT? Unable to assign console to inferior. COR? Can't get more core. JOB? No current job. UNF? DEC tape unflappable. DSK? Disown failed. TMS? Too many undefined symbols. ILUUC? Illegal UUO executed in DDT. LOGIN? You are not logged in. 7.5 DDT Mode Commands Monitor mode commands may also be used in DDT mode. It is simply necessary for the user to type the initial ":". For further information on DDT mode commands, references 2, 7 and 8 of this memo are recommended. Also one might try next year's edition of this memo. PEEK 8.1 Introduction PEEK is a utility program operating under ITS. It enables a user to monitor a variety of aspects of the time sharing system by providing periodically updated display output or periodic character string output to teletype or line printer. Commands to PEEK are single letters sometimes preceded by numeric arguments. When initially started, PEEK is in N, or normal, mode [Sec 8.2]. If the uder is on a GE console [Sec 3.2.1] PEEK will initially start outputing by typing (which, on a GE console, is effectively displaying). If the user is on a teletype, PEEK will try to seize the 340 display [Sec 3.4.1] and either display on the 340 or type its output depending on whether it succeeds or fails, respectively. This may be disconcerting if you are at a teletype not in view of the 340 because it will appear that the PEEK is just sitting there. This can be rectified with the ^N command [Sec 8.3]. The first line of all pages output by PEEK is as follows: ITS xxx PEEK yyy mm/dd/yy hh:mm:ss where xxx is the version number of the system in use [Sec 6.5.3], yyy is the version number of the PEEK in use (so bugs can be matched to exact version), and mm/dd/yy is the date and hh:mm:ss the time according to ITS [Sec 6.3.2, 6.3.3]. If any core or disk parity errors have occured during the current system run, a second line is displayeed listing the number of each. The last line of all pages displayed on the 340 by PEEK is a list of mode commands which can be given by light-penning [Sec 3.4.1.2] them with effects identical to typing them. All characters typed at PEEK are interpreted at its interrupt level and have effect, if any, immediately. Characters that are not commands, digits, or ^Z are completely ignored. Digits are accumulated as an octal number until a non-digit is typed at which time the accumulated number is made available (if the non-digit is a command taking a numeric argument) and reset. The amount of memory occupied by PEEK varies with mode but the present minimum is three memory blocks (a total of 5000 words). 8.2 Modes Available The particular subset of the time sharing system's status being output by PEEK is controlled by its mode. Initially PEEK is in N mode but it may be changed to any of those listed below by typing the letter indicated or light penning [Sec 3.4.1.2] it if PEEK is displaying on the 340. Unless otherwise specified the output repetition rate for those modes is the standard rate initially set to 5 seconds delay after end of page output before starting on the next update. This is variable by the user with the Z command [Sec 8.4]. D This mode outputs system supplied directories [Sec 2.2.1] for the disk device [Sec 3.1.1]. The directory output will list only those files for the system name [Sec 2.2.3] of the PEEK. If the PEEK is running as an inferior of DDT [Sec 7], this system name may be easily changed by a DDT command. If output is to the 340 display, the user directory is preceded by a list of the extant user directories which may be individually light penned to change PEEK's system names and select a different directory to display. G This mode lists the sixbit symbols recognized by .GETSYS [Sec 6.6.1] in the system in use. Output is updated after a ten second delay. H Only available with the 340 display, this mode outputs a graph of memory with different memory users [Sec 4.3] on different vertical levels and location represented by horizontal coordinate. I The symbolic devices implemented in the system in use [App A, B] are listed by this mode. Output is updated after a ten second delay. M This mode is somewhat reminiscent of H mode. It lists all memory users and the amount of memory they are using in decreasing order. An ""* is also output by stopped jobs as are the characters for special resources being used by any job (see table below). V This is the most frequently used mode of PEEK. It tries to give a snapshot of the status of all user jobs in the system. Different amounts of information are displayed depending on the particular output device in use, but in all cases the following additional information is output: 1. Above the list of user jobs, the number of free blocks (each 2000 words) of memory (MEMFR), the number of areas that are allocated for user variable [App D] (USRRI), and the number of user programs that were runnable last schedule time (RNABLU); 2. Below the list of user jobs, the number of blocks of memory occupied by user programs (USR MEM) (the sum of this figure and MEMFR is not constant due to dynamic IO buffers), the total percentage of machine time being used by the listed programs (USR TIM) (less than one hundred due to scheduling and other overhead), the amount of time that the running system has been up (STIME), and the total amount of machine time used by users that have logged out (LOUTIN). Between the two sets of information described above, there is one line of information for each procedure in the system topped by a title line which provides a heading for each column of information. The first item on the line for any particular procedure will be the user index of the procedure, a number that uniquely refers to it (see mode V). The second item will be either the UNAME for top level procedures and the JNAME for inferiors or the UNAME, JNAME, and SNAME for each procedure depending on the line width of the output device. This second item also portrays the existant procedure tree structure in that each procedure not at the top level is an inferior of the nearest procedure above it whose name is not indented as far. Other items include an exponential approximation to the percentage of machine time the procedure has been receiving, the number of core blocks it is occupying, a column labeled "TTY" that has a "T" concatenated with the console number opposite procedures controlling a console, various letters immediately after the "TTY" column for system resources controlled by the procedure (see the table below), and a column labelled "STATUS". The character string opposite a procedure in the STATUS column should be interpreted as follows: 1. A leading "*" indicates that the procedure is processing a software interrupt [Sec 4.2]. 2. RUN indicates that the program is running in user mode. 3. A pair of numbers separated by an "!" indicates that the procedure is stopped. 4. Most other strings represent a system call (with S used for the very common .SLEEP call) or input-output device and type of transfer. (a) If preceded by a "+" the procedure is running in executive move performing the call or input-output. (b) If not it is hung on the call or input-output. T The contents of the system translation table [Sec 2.2.2] is output. U This mode displays the status of the DEC tape drives [Sec 3.1.2] and of the open DEC tape files. For the normal user, the most useful information per tape is the drive number in the leftmost column and the DIR variable in the next to rightmost (UTASS) column. If the DIR variable is minus one, ITS is not retaining a directory for that drive and a tape mounted on it could be removed manually. Otherwise it is the absolute location of the directory. The per open file information includes the names of the procedure using the file, its direction, and the number of buffers (200 words each) currently being used for the file by the system. V This mode command should be proceeded by the user index (see mode K above) of some user. It displays many of his user variables [App D] and the channel word and status word for each of his input-ouput channels [Sec 2.1, 2.5]. If output is to the 340 or line printer, the contents of the selected user's accumulators are also output. X This mode outputs the digitalization of all the multiplexed analog to digital input channels [Sec 3.3.3] and the value being output on each of the multiplexed digital to analog channels [Sec 3.3.2]. Y This mode outputs system supplied [Sec 2.2.1] directories for DEC tapes. It shoud be proceeded by a drive number. ? This mode outputs a list and brief explanation of PEEK's commands. An example of its use is included in Appendix G. Output is updated after a ten second delay. The following are the system resource letters used in modes N and M above: C Indicates that the procedure is now or was the last to use the core allocator. D Indicates that the procedure has seized control of the DEC 340 display. F Indicates that the procedure has control of the COD device. I This letter can be present for more than one procedure. It indicates that the procedure it appears with is in ""IOT-user mode [Sec 6.8.3]. L Indicates that the procedure has control of the line printer. M Indicates that the procedure has seized the .MASTER [Sec 6.8.5] facility. P Indicates that the procedure has seized control of the plotter. R Indicates that the procedure has control of the paper tape reader. T Indicates that the procedure has control of the paper tape punch. 10 Indicates that the user has the PDP-10 core image open on device USR [Sec 4.3.2.1]. 8.3 IO Control PEEK will output to only one device at a time. The initial device is chosen as explained in section 8.1. All of the following four commands for changing PEEK's output device also cause PEEK to immediately restart output for its current mode [Sec 8.2]: ^B This switches output to the line printer if it is available. If not available the output device will be unchanged. ^E This command will terminate PEEK output to the line printer and cause it to either type or display its output. ^N This command terminates 340 display output, starts typed output, and sets a flag in PEEK that is cleared only by the ^Y command. This flag inhibits PEEK's attempts to seize the 340 as described in section 8.1 ^Y PEEK will attempt to seize the 340 display for output on receipt of this command. If it is unsuccessful, output will revert to typing. In any case the flag mentioned under ^N above is cleared. 8.4 Miscellaneous The following are miscellaneous PEEK commands: P If the PEEK is running under DDT [Sec 7], this command will return control of the user's console to DDT but leave PEEK running and, if the 340 display or line printer is selected, producing output. It uses .VALUE to return the string ""^P as a command to DDT. Q If the PEEK is running under DDT [Sec 7], this command will destroy the PEEK it is typed at and return control of the user's console to DDT. It uses .VALUE to return the string ""$^X. as a command to DDT. Z This command should be preceded by a small number. It sets the standard update delay to as many seconds [Sec 8.2]. ! This command will probably go away when swapping is added to the system. Under normal circumstances it will cause the procedure tree in which is found the pEEK it is typed at to be replaced by a single newly loaded PEEK at the top level. This saves memory if several people want to leave a PEEK at a single console running for their joint enlightenment. A top level PEEK will commit suicide if a ^Z is typed at it. LOCK 9.1 Introduction LOCK is a utility program operating under ITS performing a multitude of infrequently required tasks. Its name derives from the fact that the function it was originally written for was to "lock" and "unlock" teletypes (see the + and -- commands [Sec 9.2]). Most of LOCK's commands are single characters. In contrast to PEEK [Sec 8], which interprets commands at the interrupt level, commands to LOCK are read at the main program level. Thus commands will in general have no effect before previous commands have been completed. In fact, some commands cause a change in the state of LOCK such that following letters are interpreted as arguments. LOCK occupies only one block (2000 words) of memory except after the "T" command. 9.2 Commands The following are the current LOCK commands: + This command should be preceeded by a teletype number [Sec 3.2.1]. The LOCK will try to open the specified teletype as an input-output device. it will be successful only if the teletype is not in use. If it successful, the teletype will become impervious to ^Z's so no user can log in on it. LOCK will type out an appropriate message on the now locked teletype, and LOCK will type a ""W to the LOCK user. If the LOCK fails in opening the teletype it will type an ""L at the LOCK user. -- This command should be preceeded by a teletype number. If LOCK has the specified teletype locked (see ""+ above) it will unlock it and type out an ""*. Otherwise it will type a ""?. _ This command should be preceded by the octal code for a character. LOCK will type out the character represented in image mode [Sec 3.2.1]. This is useful for determining the reaction of a console to various codes. G This command should be preceded by the user index [Sec 8.2, see mode N] of the top procedure in a tree that the user wishes to obliterate. It must be followed by the characters ""UN. If the user deviates from this sequence, a ""? will be typed and LOCK will listen for a new command. If the user does not deviate the system job [Sec 6.5] forceably logs out [Sec 5.4] the tree and types out a message on the system job teletype. I A series of magic characters must be typed at a model 37 teletype to allow its use in full duplex, the mode assumed by most programs operating under ITS. This command causes LOCK to type the requisite characters in image mode [Sec 3.2.1]. K This command must be immediately followed by the characters ""ILL (see G above) and should be preceded by a number. It will activate the system going down feature [Sec 6.5.2] with a time limit of five or the number preceding the command minutes, whichever is larger. O When it receives this command, LOCK will permanently go into a mode where characters typed at it are echoed as their ASCII values in octal. To ultimately escape from LOCK in this mode, the user should use ^Z [Sec 1.1.2]. P If LOCK is running under a DDT [Sec 7], this command causes control of a user's console to revert to it. The command uses .VALUE to return a null string. Q If LOCK is running under a DDT [Sec 7], this command causes control of a user's console to revert to his DDT and his LOCK to be destroyed. Note that this will unlock all teletypes previously locked (see ""+ above) by the destroyed LOCK as destroying a procedure closes all its channels. It uses .VALUE to return the string "":KILL. S This command complements the run status of the system checking feature of the system job [Sec 6.5.1]. It will type out the resultant state as either ""START or ""STOP. T This command causes complex and nonterminating gyrations on the part of the LOCK it is typed at and the procedures the LOCK will create as a result of this command. Its purpose is to test the core allocator [Sec 4.3] and other components of the ITS system. Its casual use is not recommended. ? This command causes LOCK to type out an up-to-date list of its commands with a brief explanation of each. An example appears in Appendix G. References 1. Digital Equipment Corporation Programmed-Data-Processor-6 Handbook (P-65) August 1964, DEC, Maynard, Massachusetts. 2. Digital Equipment Corporation DDT (DEC-6-0-UP-DDT-U4-FP-ACT00), April 1965, DEC, Maynard, Massachusetts. 3. Peter R. Samson MIDAS (MAC-M-279, AI-90) October 1965, Project MAC memo. 4. Peter R. Samson MAC PDP-6 DEC-tape File Structure (MAC-M-249, AI-82) Project MAC memo. 5. Michael D. Beeler [untitled] (AI-128) March 1967, MAC AI group memo. 6. Michael D. Beeler IO Test (AI-144) October 1967, MAC AI group memo. 7. Digital Equipment Corporation DDT-10 (DEC-10-CDDB-D) June 1958, DEC, Maynard, Massachusetts. 8. Thomas F. Knight A Multiple Procedure DDT (AI-147) January 1958, MAC AI group memo. 9. John T. Holloway Output to the PDP-6 Calcomp Plotter (AI-104) August 1966, MAC AI group memo. 10. Donald E. Eastlake III PDP-6 Software Update (Revised AI-118) June 1967, MAC AI group memo. 11. Donald E. Eastlake III ITS 1.4 Reference Manual (MAC-C-377, AI-161) June 1968, MAC memo. 12. Donald E. Eastlake III PEEK and LOCK (MAC-M-367, AI-169) November 1968, MAC memo. 13. Stewart Nelson, Michael Levitt Robot Utility Functions (AI-172) February 1969, MAC AI Group memo. System Calls in Numeric Order (correct as of ITS version 528) Name Number Section .IOT UUO 040 2.3 .OPEN UUO 041 2.2 .OPER UUO 042 1.2.1 .ITYI .OPER 1 App E .LISTE .OPER 2 3.2.1.2 .SLEEP .OPER 3 6.8.1 .SETMS .OPER 4 App E .SETM2 .OPER 5 4.2.1 .LOGIN .OPER 6 6.1 .CLOSE .OPER 7 2.7.1 .UCLOS .OPER 10 5.2.1 .ATTY .OPER 11 3.2.1.1 .DTTY .OPER 12 3.2.1.1 .IOPUS .OPER 13 2.6.1 .IOPOP .OPER 14 2.6.1 .DCLOS .OPER 15 3.4.1.3 .DSTOP .OPER 16 3.4.1.4 .RDTIM .OPER 17 6.3.1 .RDSW .OPER 20 6.2.1 .GUN .OPER 21 5.4 .UDISM .OPER 22 3.1.2.1 .GETSY .OPER 23 6.6.1 .RD500 .OPER 24 6.2.4 .GETLO .OPER 25 6.6.2 .SETLO .OPER 26 6.8.4 .DISOW .OPER 27 5.2.2 .RD760 .OPER 30 6.2.2 .WR760 .OPER 31 6.2.2 .GEHSY .OPER 32 6.8.2 .LOGOU .OPER 33 6.1 .GSNAM .OPER 34 App E .WSNAM .OPER 35 App E .UPISE .OPER 36 App E .RESET .OPER 37 2.7.3 .ARMOV .OPER 40 3.3.2.1 .WMAR .OPER 41 App E .RRTIM .OPER 42 App E .ASSIG .OPER 43 3.1.2.2 .DESIG .OPER 44 3.1.2.2 .RTIME .OPER 45 6.3.2 .RDATE .OPER 46 6.3.3 .RD710 .OPER 47 6.2.3 .EOFC .OPER 50 2.3.1 .IOTLS .OPER 51 6.8.3 .RSYSI .OPER 52 6.6.3 .SUPSE .OPER 53 6.5.1 .UBLAT .OPER 56 3.1.2.3 .IOPDL .OPER 57 2.6.2 .ITYIC .OPER 60 2.7.3 .MASTE .OPER 61 6.8.5 .VSTST .OPER 62 3.3.1.1 .DIAL .OPER 63 3.2.1.3 .DIALW .OPER 64 3.2.1.3 .HANGU .OPER 65 3.2.1.3 .DIETI .OPER 66 6.5.2.2 .SHUTD .OPER 67 6.5.2.1 .ARMOP .OPER 70 3.3.2.1 .NDIS .OPER 71 3.4.1.5 .FEED .OPER 72 3.2.4.1 .EVAL .OPER 73 6.6.4 .REDEF .OPER 74 6.8.6 .ITSET .OPER 75 6.8.4 .UTNAM .OPER 76 3.1.2.4 .UINIT .OPER 77 3.1.2.5 .CALL UUO 043 1.2.1 .DISMI .CALL 1, 4.2.2 .TRANS .CALL 2, 2.2.2.1 .TRANA .CALL 3, 2.2.2.2 .VALUE .CALL 4, 5.3.1 .UTRAN .CALL 5, 5.1.3 .CORE .CALL 6, 4.3.1 .TRAND .CALL 7, 2.2.2.3 .DSTAR .CALL 10, 3.4.1.1 .FDELE .CALL 11, 2.4 .DSTRT .CALL 12, 3.4.1.1 .SUSET .CALL 13, 4.5 .LTPEN .CALL 14, 3.4.1.2 .VSCAN .CALL 15, 3.3.1.1 .POTSE .CALL 16, 3.3.3.1 .USET UUO 044 5.2.3 .BREAK UUO 045 5.3.2 .STATU UUO 046 2.5 .ACCES UUO 047 2.7.4 System Calls in Alphabetic Order (correct as of ITS version 528) Name Number Section .ACCES UUO 047 2.7.4 .ARMOF .OPER 70 3.3.2.1 .ARMOV .OPER 40 3.3.2.1 .ASSIG .OPER 43 3.1.2.2 .ATTY .OPER 11 3.2.1.1 .BREAK UUO 045 5.3.2 .CALL UUO 043 1.2.1 .CLOSE .OPER 7 2.7.1 .CORE .CALL 6, 4.3.1 .DCLOS .OPER 15 3.4.1.3 .DESIG .OPER 44 3.1.2.2 .DIAL .OPER 53 3.2.1.3 .DIALW .OPER 64 3.2.1.3 .DIETI .OPER 66 6.5.2.2 .DISMI .CALL 1, 4.2.2 .DISOW .OPER 27 5.2.2 .DSTAR .CALL 10, 3.4.1.1 .DSTOP .OPER 16 3.4.1.4 .DSTRT .CALL 12, 3.4.1.1 .DTTY .OPER 12 3.2.1.1 .EOFC .OPER 50 2.3.1 .EVAL .OPER 73 6.6.4 .FDELE .CALL 11, 2.4 .FEED .OPER 72 3.2.4.1 .GENSY .OPER 32 6.8.2 .GETLO .OPER 25 6.6.2 .GETSY .OPER 23 6.6.1 .GSNAM .OPER 34 App E .GUN .OPER 21 5.4 .HANGU .OPER 65 3.2.1.3 .IFSET .OPER 75 6.8.4 .IOPDL .OPER 57 2.6.2 .IOPOP .OPER 14 2.6.1 .IOPUS .OPER 13 2.6.1 .IOT UUO 040 2.3 .IOTLS .OPER 51 6.8.3 .ITYI .OPER 1 App E .ITYIC .OPER 60 2.7.3 .LISTE .OPER 2 3.2.1.2 .LOGIN .OPER 5 6.1 .LOGOU .OPER 33 6.1 .LTPEN .CALL 14, 3.4.1.2 .MASTE .OPER 61 6.8.5 .NDIS .OPER 71 3.4.1.5 .OPEN UUO 041 2.2 .OPER UUO 042 1.2.1 .POTSE .CALL 16, 3.3.3.1 .RD500 .OPER 24 6.2.4 .RD710 .OPER 47 6.2.3 .RD760 .OPER 30 6.2.2 .RDATE .OPER 46 6.3.3 .RDSW .OPER 20 6.2.1 .RDTIM .OPER 17 6.3.1 .REDEF .OPER 74 6.8.6 .RESET .OPER 37 2.7.3 .RRTIM .OPER 42 App E .RSYSI .OPER 52 6.6.3 .RTIME .OPER 45 6.3.2 .SETLO .OPER 26 6.8.4 .SETM2 .OPER 5 4.2.1 .SETMS .OPER 4 App E .SHUTD .OPER 67 6.5.2.1 .SLEEP .OPER 3 6.8.1 .STATU UUO 046 2.5 .SUPSE .OPER 53 6.5.1 .SUSET .CALL 13, 4.5 .TRANA .CALL 3, 2.2.2.2 .TRAND .CALL 7, 2.2.2.3 .TRANS .CALL 2, 2.2.2.1 .UBLAT .OPER 56 3.1.2.3 .UCLOS .OPER 10 5.2.1 .UDISM .OPER 22 3.1.2.1 .UINIT .OPER 77 3.1.2.5 .UPISE .OPER 36 App E .USET UUO 044 5.2.3 .UTNAM .OPER 76 3.1.2.4 .UTRAN .CALL 5, 5.1.3 .VALUE .CALL 4, 5.3.1 .VSCAN .CALL 15, 3.3.1.1 .VSTST .OPER 62 3.3.1.1 .WMAR .OPER 41 App E .WR760 .OPER 31 6.2.2 .WSNAM .OPER 35 App E Available Symbolic Devices in Alphabetic Order (correct as of ITS version 528) Device Type Section CLA 5 3.4.3 CLI 3 3.4.3 CLO 7 3.4.3 CLU 7 3.4.3 COD 6 3.2.5 COM 7 3.1.3 DIS 2 3.4.1 DKn 7 3.1.1 DSK 7 3.1.1 ERR 4 3.4.4 IDS 2 3.4.1 IMX 4 3.3.3 LPT 2 3.2.2 NUL 6 3.4.6 NVD 6 3.3.1 OMX 2 3.3.2 PLT 2 3.2.3 Pnm 7 3.1.1 PTP 2 3.2.4 PTR 4 3.2.4 SYS 7 3.1.3 Tnm 6 3.2.1 TPL 7 3.4.5 TTY 6 3.2.1 TVC 6 3.3.1 USR 6 3.4.2 UTn 7 3.1.2 VID 6 3.3.1 System Variables per User (correct as of ITS version 528) ICCHNM: REPEAT 20,0 ;input-output channel assignment words ;right half, index into IOTTB, CLSTB ;left half, device dependent SIOCHN: BLOCK LUIOP ;input-output channel push down list SIOCP: SIOCHN--1 ;pointer into input-output push down list IOCHST: BLOCK 20 ;input-output channel status for channels at IOCHNM ;3.1--4.9 input-output status ;1.1--2.9 .ACCESS pointer UPC: 0 ;stores program counter when not running UPR: 0 ;user protection and relocation registers MEMTOP: 0 ;six less than first illegal location RMEMT: 0 ;first illegal location CORRQ: --1 ;request to core job ;1.1--1.8 number of blocks, 3.1--4.8 user requested for ;4.9=0 means request present, 4.9=0 means no request ACOS: BLOCK 15 ;swap out accumulators AC15S: 0 ;commonly referenced swap out accumulator AC16S: 0 ;commonly referenced swap out accumulator AC17S: 0 ;commonly referenced swap out accumulator UUO: ;the following three locations swapped in & out of ;UEXIT, UUOH, etc with user SUEXIT: JRST 2,@UUOH ;user UUO exit instruction SUUOH: 0 ;contents of @41 (absolute) SAC17P: MOVEM U, ;accumulator 17 in user's shadow memory SV40: 0 ;last interrupting UUO ;(contents of 40 when user out) SV60: 0 ;contents of 60 when user out AC14P: 0 ;points to accumulator 14 in shadow memory AC15P: 0 ;points to accumulator 15 in shadow memory AC16P: 0 ;points to accumulator 16 in shadow memory 40P: 0 ;points to user's relative location 40 41P: 0 ;points to user's relative location 41 APRC: APRCHN ;right half is cono to processor ;4.9 implies user is in a disowned tree ;4.8 implies user being .UCLOS'ed ;4.7 user has been cored zero ;4.6 core request pending on this user ;4.1--4.4 number of last channel on which an ;error occurred USTP: 0 ;stop word ;zero implies runnable ;4.9 stopped to be moved by core allocator ;4.8 general core allocator stop bit ;4.7 controlled by superior procedure ;4.6 special bit, see URMEMT & UMEMEX ;1.1--2.9 count of transient reasons to be stopped PIRQC: 0 ;pending first word interrupts MSKST: 0 ;interrupt enable mask for PIRQC IFPIR: 0 ;second wod of interrupt requests ;3.8--3.1 inferior procedure interrupts ;2.7--1.1 input-output channel interrupts ;1.1 for channel 1, etc. MSKST2: 0 ;second word interrupt enable mask PICLR: 0 ;interrupt level status flag SUPPRO: 0 ;pointer and interrupt bit to superior procedure ;--1 for top level procedure FLSINS: 0 ;blocking condition instruction ;zero implies runnable UFINAL: 0 ;nonzero implies finalization required to interrupt RPCL: 0 ;0 implies no RPCLosering in progress ;0,,n RPLSR'ing user n ;--1,,n being RPCLSR'ed by user n UNAME: 0 ;user name ;This word for each procedure is copied from the ;UNAME of the procedure that creates it (see USR ;device). For an initial top level procedure it is --1 but ;is modified by .LOGIN. It is the same for all procedures ;in a tree. JNAME: 0 ;job name ;Each logged in procedure has a unique UNAME, ;JNAME pair. The JNAME of an initial top level ;job is ""HACTRN. For other jobs it is the second ;file name specified in the .OPEN on the USR device ;that creates them. USYSNM: 0 ;current system name ;This variable is initially set equal to the procedure's ;UNAME. It can be read or set by the procedure or its ;superior (.SUSET, .USET). It is used as the third file ;name on certain shared devices. USYSN1: 0 ;system name used inside disk routines ;This variable is normally equal to USYSNM but see ;devices COM, SYS and TPL. TTYTEL: 0 ;console assignment for this procedure UQUAN: 0 ;quantum time UTRNTM: 0 ;total run time UTMPTR: 0 ;pointer to procedure tree resource word JTMU: 0 ;procedure resource word IOTLSR: 0 ;4.9 a one implies iot-user mode ;4,5--4.3 MAR conditions ;2.9--1.1 contents of MAR register UMARPC: 0 ;program counter at last MAR interrupt VALUE: 0 ;contents of effective address of last .VALUE UOUT: 0 ;4.9=1 \Rightarrow user not completely in core ;4.8 in transit in ;4.7 in transit out ;4.6 ref to disk in progress ;4.5 back in core but needs to be blessed before starting ;1.1--1.9 core blocks needed for swap in USRPDL: --LUPDL,,UPDL--1 ;push down list pointer for system calls UPDL: BLOCK LUPDL--2 ;push down list area for system calls EPDL1: 0 ;link depth for 2311 routines EPDL: 0 ;temporarily saves accumulator B for ACORE EPDL2: 0 ;temporarily saves accumulator T for FLSINS Relics of ITS's Past The following system calls, while still effective as of ITS version 523, can be expected to ultimately disappear. They are redundant, more specialized, older versions of their replacements. Name Number Replacement Function .ITYI .OPER 1 .ITYIC Read interrupt level characters from open TTY device, if any. .SETMS .OPER 4 .SUSET Set own user variable MSKST. .GSNAM .OPER 34 .SUSET Read own user variable USYSNM. .WSNAM .OPER 35 .SUSET Set own user variable USYSNM. .UPISE .OPER 36 .SUSET Set own user variable PICLR. .WMAR .OPER 41 .SUSET Set own user variable IOTLSR. .RRTIM .OPER 42 .SUSET Read own user variable UTRNTM. Further Sources of Information on ITS Information further than or more recent than that contained in this manual may usually be obtained by consulting the symbolic listings of ITS, DDT, PEEK, or LOCK. The following persons may also be helpful: Donald E. Eastlake III Jerry S. Freiberg Richard D. Greenblatt Thomas F. Knight John T. Holloway Stewart B. Nelson Frederick H.G. Wright II Illustrative Console Output The following pages are a sample console session with ITS illustrating several features documented in this memo. \uparrow Z DDT.198. :LOGIN DE :PEEK! \uparrow N ITS 530 PEEK 142 07/14/69 00:22:15 PARITY ERRORS: DISK = 11 CORE = 0 MEMFR=267 USRMI=11 RNABLU=2 I= U-JNAME STATUS TTY CORE %TIM 0 SYS TYO T5 25 0% 1 CORE UUO ? 0 1% 3 PEEK +GETSY T4 C 5 3% 10 MS EOAMIC RUN DISOWN 20 91% USR MEM= 60 USR TIM= 97% STIME = 7:03:22 LOUTIM = 0 ? ITS 530 PEEK 142 07/14/69 00:22:58 MODE CONTROL: D DISK DIRECTORY G AVAILABLE .GETSYS'S H MEMORY GRAPH (340 ONLY) I AVAILABLE IO DEVICES M MEMORY USE LIST N NORMAL MODE T TRANSLATION ENTRIES U DEC TAPE STATUS V SINGLE USER (PRECEDE BY INDEX) X MULTIPLEXORS MODE Y DEC TAPE DIRECTORY (PRECEDE BY #) ? EXPLANATION MODE IO CONTROL: \uparrow B USE LINE PRINTER \uparrow E STOP USING LINE PRINTER \uparrow Y USE 340 \uparrow N STOP USING 340 OTHER: P PROCEED BUT RETURN TTY TO DDT Q QUIT Z SET DOZE IN SECONDS ! STAND ALONE Q $ \uparrow X. :LOCK! LOCK.39 \leftarrow ? + LOCK TTY (PRECEDE BY #) - UNLOCK TTY (") \leftarrow OUTPUT CHARACTER WITH ASCII VALUE # (") GUN KILL USER WITH # INDEX (") I INITIALIZE A MODEL 37 TTY KILL SYSTEM DOWN IN # MINUES (") O OUTPUT CHARACTERS IN OCTAL P RETURN TO DDT Q VALRET AN $ \uparrow X. S COMPLEMENT RUN STATUS OF SYS JOB T TEST CORE ALLOCATOR ? LIST COMMANDS \leftarrow Q $ \uparrow X. :? ? = LIST MODE COMMANDS DISOWN = DISOWN CURRENT JOB LOGOUT = AUTO-EXPUNGE SYMLOD = LOAD SYMBOLS ONLY XFILE = EXECUTE FILE AS DDT COMMANDS CR = ENTER TECO AND CREATE FILE ED = ENTER TECO AND EDIT LOAD = LOAD FROM FOLLOWING FILE INTO CURRENT JOB DUMP = DUMP INTO " " FROM " " KILL = KILL CURRENT JOB LOGIN = LOGIN AS FOLLOWING NAME SEND = SEND MESSAGE GAG = CONTROL RECEIPT OF MESSAGES BUG = DOCUMENT BUG MAIL = ADD TO USER'S MAIL FILE JOB = CREATE OR SELECT JOB LISTJ = LIST JOBS FLAP = FLAP DECTAPE, FOLLOW BY DRIVE # LISTF = LIST FILES DELETE = DELETE FILE PRINT = PRINT FILE LINK = CREATE LINK ERR = IOC ERROR STATUS DDT = ENTER DDT MODE MON = ENTER MONITOR MODE START = START INFERIOR CONTIN = CONTINUE GIVING INF. TTY PROCED = PROCEDE INF., LEAVE TTY WITH DDT WALLP = \uparrow B TO SPECIFIED FILE :LOGOUT ITS 530 CONSOLE 4 FREE. 00:25:57