>>37<<5552 >>37<>16<< >>37<<5552 44444 s>>37<<0 >>16<>12<< >>16<>16<< >>37<<242>>37<< >>37<<5552 >>17<<000>>17<< 11>>37<<11 >>37<>37<<55>>15<>13<>40<<>40<<<3) to start the file system on tape unit n (See memo PDP-42, Microtape File System). When the user runs any program (either his own program or a system program such as Expensive Typewriter), his ID is inactive. It will be restarted if the program executes any illegal instruction or the console's "call" button is pressed (see the section on breakpoints). After a normal assembly, ID is started in a special way by the assembler (see description of mta 5). ID loads the program and obtains its symbols. Typing P will begin execution of the program at the address specified to the assembler in the "start" pseudo-instruction. For the sake of accuracy, descriptions of commands include their effect, if any, on programs with several processes. The user unfamiliar with multiprocessing should assume that only one process exists. >>13<<( Fields ID allows operations to be carried out on the core fields of the user, or of spheres owned by the user, or on drum fields owned by the user, or absolute drum fields, by making the field involved the "current field". Initially ID is set up so that the user's core 0 is the current field. This is the usual state. The current field is normally specified by the underbar command. Typing>>40<<. x>>40<< causes field x to become the current field. ? is typed by ID if the field does not exist, i.e. the user does not own the corresponding core or drum field. Typing underbar (>>40<< ) alone will cause the current field to be printed out. The "field" assignment is as follows>>40<<. 0-5 core fields 100-177 drum fields assigned to user 200-377 absolute drum fields (read only) 1MNN core field M of sphere owned by user at index NN This numbering is used for commands H, O, S, U, V, and Z (explained later) as well as underbar (>>40<< ). For example, typing>>40<<. 224V verifies the current field against absolute drum field 24. In this memo, "field" always refers to this numbering unless "drum field" or "core field" is explicitly stated. The "current location" is the 12-bit address of the last register opened by a command other than one of those few that open a register without changing the current location. The character point (.) , when not part of a symbol or number, has the value of the current location. The character Q has the value of the last quantity typed by ID or the user. >>13<< Register Examination Commands Command Action / When preceded by an argument, slash opens the register in the current field whose address is specified by the low 12 bits of the argument, sets the current location to that address, and (unless in type-in mode) types the contents of the regis- ter according to the current type-out mode. When not preceded by an argument, slash (/) behaves just like Q/, except that it does not change the current location. | Similar to slash (/), but uses a 15-bit address. In particular, when preceded by an argument, it changes the current field to the core field specified in bits 3-5 of the argument, then does what slash does. Without an argument, it behaves like slash (/) except that the field specified in bits 3-5 of Q will be used, rather than the current field. The current field is not changed. [ Similar to slash (/), but types the contents of the register as a positive number, regardless of the current type-out mode. Does not change the type-out mode. ] Similar to [, but types the contents of the register as an instruction. ( Similar to slash (/),but causes ID to enter type- in mode. In this mode, contents of registers are not typed out at all. Type-in mode is left when a carriage return is typed in or out, except that commands ^, backspace and tab keep ID in type-in mode. Type-in mode is useful for typing short programs directly into core. >>13<>40<<. whenever carriage return is typed by ID (after certain commands), any open register becomes closed>>40<<, however the register is not modified. backspace Same action as carriage return, and in addition opens the next register the way .+1/ does. This command types a carriage return, the current field (unless zero), the address (in the address type- out mode), a slash (/), tab, and (unless in the type-in mode) the contents of the register (in the current type-out mode) and another tab. Note that if . was 7777, location 0 of the current field will be opened. ^ Like backspace except that it opens .-1 tab Same action as carriage return, and in addition opens a register the way slash (/) does. That is, the low 12-bits of the argument to the tab (or, if no argument, Q) will be used as an address in the current field. The address is typed as for backspace. > Without argument, same as slash (/). With an argument, deposits the argument in the currently open register (if any), then does what slash (/) does except that the current location (.) is not changed. >>13<<>>35<< Type-out Mode Command Action S Without argument, sets the type-out mode to sym- bolic mode. This is its initial state. The contents of registers will be typed as symbolic instructions unless the mode is overridden with [, ], =, ~, or >>20<<. Numbers in the range 777700 to 777777 are typed as negative numbers. C Without argument, sets the type-out mode to con- stants mode. The contents of registers will be typed as unsigned numbers, unless the mode is overridden. T Without argument, sets the type-out mode to text mode. The contents of the registers will be typed out as flexo code characters unless the mode is overridden. >>20<< Types the argument (if none, Q) as a symbolic instruction, regardless of the type-out mode. Neither opens, closes, nor modifies any register. = Types the argument (if none, Q) as an unsigned number. Neither opens, closes, nor modifies any register. ~ Types the argument (if none, Q) as flexo code characters. Neither opens, closes, nor modifies any register. R Without argument, sets the address type-out mode to symbolic (Relative) mode. This is its initial state. Addresses (printed by commands backspace, tab, ^, etc.,) will be typed symbolically. O Without argument, sets the address type-out mode to octal mode. Addresses will be typed out as numbers. numR Sets the radix to num. Num is interpreted as a decimal number, regardless of the previous radix. The radix is initially 8. H (Hoctal) Without argument, same as 8R U (Unoctal) Without argument, same as 10R >>13<>13<>40<<. 00100| first address of symbol table 00101| last address of symbol table 00102| number of symbols fH (Hoard) Saves ID's symbol table (except initial symbols) on field f. ID prints the lowest address occupied by the symbol table, which extends from there to 7777 on field f. fO (Obtain) Kills all symbols like K, then reads the symbol table stored on field f by an "H" command. x>13<<6 val sym) Defines symbol sym with value val. sym, Defines symbol sym with the current value of the current location counter (.). sym>>04<< Defines the symbol sym with the value equal to the low 12 bits of Q. symK (Kill) Deletes symbol sym from the symbol table. K With no argument, deletes all symbols except the PDP-1 instruction mnemonics. If these were rede- fined, the original value is restored. symC (Calm) Half kills the symbol sym. ID will recog- nize it when typed in, but will not type it out. symL (Loud) Undoes the effect of symC, so ID will type out the symbol in symbolic instructions. >>13<>40<<. 'SXXP The special character overbar (>>56<< ) has a value of -0. If an undefined symbol is typed, ID types "U" and ignores everything typed since the last tab or carriage return. Command Action ? Typing a question mark (?) causes ID to ignore everything typed since the last tab or carriage return. " Causes the previous 1, 2, or 3 characters to be taken as their flexo code value. ' Causes the previous 1, 2, or 3 characters to be taken as their squoze code value. The following connectives are performed in left-to- right order. space Same as + + 18 bit 1's complement addition - 18 bit 1's complement subtraction. Unary - is complementation, so -0=777777 >>06<< Logical and >>05<< Logical or >>13<<>>35<< Special Registers The following special registers may be referred to from any field, and opened and modified in the same manner as other registers, except that [ and ] do not change the current location. For example, to examine the accumulator, type>>40<<. A/ The following registers appear to be consecutive>>40<<, i.e., backspace, ^, and expressions like .+3 will work for them the way they do for ordinary registers. These special registers refer to the current user process (see centerdot (>>40<< ) command). A Accumulator I In-Out Register X Index Register F Flag Register, which contains 0 1 2 3 4 5 . . . . . . . 12 13 14 15 16 17 Program Flags AMD AEF AAL SBM SBH PRL 1 2 3 4 5 6 bits 0-1 are decoded as the address mode 00 nam normal mode 01 bam base mode 10 iam index mode 11 dam defer mode G Program Counter, bit 0 contains overflow, bit 1 contains extend mode. W W Register, (used for communication with the supervisor) >>13<>40<<. only the low 12 bits of M+1 and M+2 are used. B Breakpoint locations B+1 B+2 B+3 When preceded by an argument, the commands A, I, X, and M deposit the argument in the corresponding register. The command x>40<<. M>>56<< Resets M, M+1, and M+2 to their initial contents. B>>56<< Resets all breakpoint registers. >>13<<1 Searches Command Action W (Word) With an argument, searches the current field between the limits in M+1 and M+2 (inclu- sive) and prints all registers which are equal to the argument when both are and'ed with the mask (M). In other words, only those bit positions which are 1 in the mask are compared. N (Non-word) With an argument, searches the current field between the limits in M+1 and M+2 (inclu- sive) and prints all registers which are not equal to the argument when both are and'ed with the mask. The most frequent use of this command is 0N, a search for non-zero locations. E (Effective address search) Used with an argument, searches the current field between the limits in M+1 and M+2 (inclusive) and prints all registers which effectively adddress the argument>>40<<, ID as- sumes that instructions are executed in extend mode, normal mode, and not under aam's. An E search never prints skp, sft, law, iot, ivk, or opr instuctions. This command is of limited value if the program being debugged does any indexed addressing. For the commands W, N, E, S, U, V, and Z>>40<<, if the current field (or either field f or the current field in the case of fS, fU, fV, or fZ) is a PRL protected field (core 0 of a sphere with PRL on), the lower limit actually used is the maximum of 100 and the lower limit specified in M+1 or an argument to the command. In other words, these commands avoid trying to reference C-lists. >>13<<0 Miscellaneous Command Action Z With no argument, sets all of the current field to zero. fZ Zeros field f between the limits in M+1 and M+2 (inclusive). x>40<<, j/ contents of current field, contents of field f, location j location j+x >>13<<>>16<< Commands for Paper Tape Command Action Y (Yank) Without argument, reads a tape in standard binary format into the current field. Words outside the limits in M+1 and M+2 are ignored. The core modules specified in the data block origins are ignored. The address in the start block is put in the G register (Program Counter). fY Like Y, except reads into field f. x>40<<. if a checksum error occurs while reading, ID types "cksm". Typing "d" will cause the blocks to be accepted as read and ID will continue reading. By moving the tape one block back and typing "c", ID will read the block again. Typing any other character will cause ID to give up and accept another command. L (Label) Letters typed after this command are punched in readable form on tape. There are three characters which terminate the label, having the following effect>>40<<. carriage return Punches the standard input routine and sets ID to punch standard binary blocks. backspace Punches a "jmp 7752" instead of the input routine and sets ID to punch standard binary blocks. tab Sets ID to punch readin mode tapes, i.e., alternate dio instructions and data words. >>13<<4 D (Dump or Data) Without argument, same as 0<7777D x>13<>40<< (Centerdot) Types the current process number. Types 0 if no process exists. x>>40<< Makes process x current. >>04<>04<>13<<6 Breakpoints Breakpoints are the primary tools for debugging pro- grams. They provide a convenient means for interrupting a program to examine intermediate results, trace the flow of control, etc. The four breakpoint registers B, B+1, B+2, and B+3 contain the addresses of breakpoints in the user's program. No breakpoint is indicated by -0. The command xB puts the low 12 bits of x in the low 12 bits of special register B, and puts the current field number, if less than 6 (a user core), and bits 3-5 of x otherwise, in bits 3-5 (the core module) of register B. n>56<< or -0) in the breakpoint register, typing B>>56<< (which clears all breakpoints), or by commands E or nF (see below). CAUTION>>40<<. Breakpoints should not be placed at locations which are examined or modified by the program, since ID saves their contents and substitutes the trap (bpt) instruc- tion. The command P (Proceed) is used to resume execution after a breakpoint has been reached. The instruction at the breakpoint will be executed once, and the user's process will continue running. If the breakpoint is reached again it will trap again. xP will proceed through the breakpoint x times before trapping to ID. If a different breakpoint is reached, during a multiple proceed, it will trap immediately regardless of the proceed count. The P command may be used even when no breakpoint has been reached (e.g. when ID is entered by hitting the call button). In this case, ID simply starts all processes running, giving control of the typewriter to the user. >>13<>40<<, if the program counter was incremented by two, (i.e., the instruction skipped), three carriage returns are typed. y>13<>40<<. >>04<>04<<" is followed by a descriptive command name, which may be abbreviated down to the point of ambiguity. Each command may take zero, one, or two parameters. These are the i and n fields of the command. These parameters are always taken as octal numbers, regard- less of the current radix. The parameter i is always a capability index. If this parameter is required and is missing, the first free capability index will be assumed. If the parameter n is required and is missing, 0 will be assumed. For a discussion of the objects mentioned below, see memo PDP-35, Instruction Manual, Parts 4 and 5. Command Action >>04<>34<>04<>04<>04<>04<