Technical Memorandum No. 101 03674-21-M 4K-CPS A PROGRAMMING SYSTEM FOR THE PDP-8 SIDE OF THE DEC LINC-8 COMPUTER by K. Metzger G. Cederquist Approved by:k~~~., & for COOLEY ELECTRONICS LABORATORY Department of Electrical Engineering The University of Michigan Ann Arbor, Michigan Contract No. Nonr-1224(36) NR187-200 Office of Naval Research Department of the Navy Washington, D.C. 20360 November 1969 Reproduction in whole or in part is permitted for any purpose of the U. S. Government

ABSTRACT The 4K-Cooley Programming System (4K-CPS) is a collection of programs designed to aid in programming the PDP-8 side of Digital Equipment Corporation's LINC-8 computer. This collection of programs consists of a file system, a loader, a symbolic text editor, and an assembler. These programs are structured so that a user can enter, edit, assemble, load, and execute programs entirely from the Teletype keyboard. The system architecture is modular, and future components are easily "plugged-in" as needed. 111

FOREWORD This report describes and documents the programming system 4K-CPS. 4K-CPS is a programming and file management system intended for use in programming the PDP-8 side of the Digital Equipment Corporation LINC-8 computer. 4K-CPS was written at the Cooley Electronics Laboratory (CEL) of The University of Michigan and is based on a larger and more comprehensive system (CPS) designed for the 8-K LINC-8 written by Gerald Cederquist of CEL. When the original CPS was written, it was intended for use only on the CEL 8-K LINC-8. However, CEL is affiliated with the Institute of Marine Sciences (IMS) of The University of Miami in the MIMI project, and IMS has two 4-K LINC-8 computers. It soon became obvious that a 4-K version of CPS would give IMS a greatly increased programming capability and would aid in the transferral of programs between the two facilities. Thus, in the two-month period of June and July, 1969 4K-CPS was developed by CEL for use at IMS. In producing 4K-CPS the basic CPS data structures were retained; however, because of the smaller amount of available memory the internal coding was extensively restructured. The resulting system closely approximates the external features of the current version of CPS. iv

TABLE OF CONTENTS Page ABSTRACT iii FOREWORD iv CHAPTER 1: INTRODUCTION 1 1.1 Why 4K-CPS? 1 1.2 4K-CPS General Structure 3 1.3 Operational Procedure 4 CHAPTER 2: BASIC 4K-CPS 8 2.1 File System 8 2. 1. 1 Getting Into the File System 8 2.1.2 Input Line Editing 9 2.1.3 Prefix Characters 9 2.1.4 Commands 10 2.2 Symbolic Text Editor 13 2.2.1 Operating Modes 13 2.2.2 Commands 14 2.2.3 Special Features 16 2.3 Assembler 1 7 2.3.1 Running *ASM 17 2.3.2 Listing Control 18 2.3.3 Reference Material 19 2.4 Loader 23 2.4.1 Running *LOAD 24 2.4.2 Operation 24 2.4.3 Commands 24 CHAPTER 3: ADVANCED 4K-CPS 27 3.1 Tape Organization 27 3. 2 Structure of 4K-CPS File Indexes 28 3.3 Key for Updating the Free Names, -S and -B 29 3.4 File System Command Line Structure 29 3.5 Communication Area Structure 30 3.6 Special Commands 32

TABLE OF CONTENTS (Cont.) Page 3.7 4K-CPS Data Structures 32 3.7.1 Symbolic Text Files 32 3.7.2 Absolute Binary Files 33 3.7.3 Core Image Files 33 CHAPTER 4: SYSTEM DOCUMENTATION 35 4.1 Bootstraps 35 4.1.1 SCLD 35 4.1.2 SBOOT 35 4.1.3 SBOOT2 36 4.1.4 TAPEMIX 36 4.2 The File System 36 4.3 The Loader 37 4.4 The Editor 37 4.5 The Assembler 38 CHAPTER 5: CONCLUSION 39 APPENDIX A 40 APPENDIX B 42 APPENDIX C 43 APPENDIX D 54 APPENDIX E 58 DISTRIBUTION LIST 63 vi

1. INTRODUC TION The 4K- Cooley Programming System (4K-CPS) is a collection of programs designed to aid in programming the PDP-8 side of Digital Equipment Corporation's LINC-8 computer. This collection of programs consists of a file system, a loader, a symbolic text editor, and an assembler. These programs are structured so that a user can enter, edit, assemble, load, and execute programs entirely from the Teletype keyboard. The system architecture is modular and future components are easily "plugged-in" as needed. The 4K-CPS, as described in this report, uses the two tape units present on all LINC-8 computers. However it should be easy to modify 4K-CPS to run on any PDP-8 using two TU-55 tape drives or a disc. The programming system 4K-CPS is based on an operating system (CPS) developed and in use at the Cooley Electronics Laboratory of the University of Michigan. CPS itself is based on the Michigan Terminal System for the IBM 360/67 and requires 8-K words of memory. 4K-CPS is intended to represent a benchmark in the external structure of CPS and serve as a relatively fixed programming tool. -Care has been taken to allow for limited future expansion. The 4K in 4K-CPS refers only to the minimum required memory size. 4K-CPS is fully capable of producing programs that occupy thorough 16-K of memory and of loading these programs properly. Although 4K-CPS and CPS are almost identical externally, the internal structures differ radically. This is mainly due to the more severe space limitation imposed by the smaller memory. In order to run 4K-CPS a minor hardware (or software) modification is required. Appendix A contains a description of both alterations. In addition 4K-CPS uses LINC tapes marked using 128 word blocks. (A utility program is included for marking such tapes. ) 1.1 Why 4K-CPS? Or for that matter, why an operating system? As an answer to this question, look at the steps involved in preparing a program using paper tape. It is assumed that the reader knows how to write programs in PDP-8 machine language and wishes to use the PDP-8 side of the LINC -8.

(1) Write the program down on paper. (2) Load in the symbolic editor, and enter the program into the computer. (3) When satisfied with the program, punch a paper tape. (4) Load and start the assembler. (5) Feed the paper tape prepared in step 3 through the assembler at least 2 times. (a) If any errors occur, reload the editor, read the source tapes back in, then go to step 3. (b) If the program assembles, punch a binary paper tape. (6) Load the binary loader. (7) Load the binary paper tapes. (8) Try the program. (a) If it is bad, go back to step 5 (a). (b) If it works, save the binary paper tape. With the basic PDP-8 using an ASR-33 Teletype, paper tape is read and punched at 10 characters per second. The time spent in steps 3, 5, 5(a), 5(b), 7, 8(a) (even assuming the editor, assembler, and loader are loaded in zero time) can easily run into hours for even a small program of one or two memory pages in length. DEC's 8-LIBRARY SYSTEM offers some speed-up but still requires paper tape input and output for the assembler. All of the steps are still required when using 4K-CPS; however, those steps involving paper tape only require typing short command lines on the Teletype. The hours become fractions of a minute. This speed-up is due to the use of high speed bulk storage (LINC tape in this case) at each stage where paper tape would have been used before. However, just as the programmer had to properly store, handle, and load the paper tapes, the proper sections of magnetic tape must be kept track of, filed, and loaded when required. This could all be done by a programmer with a scratch pad, a simple tape routine, and a lot of patience. 4K-CPS is an attempt at providing an automatic scratch pad and tape routine. 2

4K-CPS allows the user to store program segments in files, to call them into memory at will, edit them, save them in files, assemble programs from files, and to run programs stored in files. In addition, these programs may operate on data stored in other files. Each one of these steps requires only a single typewritten command from the user. The file system is intelligent enough to know, on its own, whether a file contains symbolic text, binary frames, or a core image. 1. 2 4K-CPS General Structure The heart of 4K-CPS is a powerful, comprehensive, easy-to-use file system. In fact, the file system along with its conventions could be considered to be 4K-CPS in its entirety. This system allocates file storage, transfers files, and links files as well as loading and starting program execution. It also maintains the system indexes, keeping track not only of where data and program files are located but also remembering the type of material stored in each file. All other system functions, such as assemblies, are performed by programs stored in program files using information supplied by the user and the file system. The structure of 4K-CPS is illustrated in Fig. 1. FILE SYSTEM: PROGRAM MASS STORAGE Fig. 1. 4K-CPS organization 3

In the current version of 4K-CPS magnetic tape is used to provide mass storage for programs, data and for the file system. The three main system programs provided with the 4K-CPS file system are: (1) A loader, *LOAD. This loader combines core images and absolute binary (terms to be defined later) into core images which are in the form required by the file system "RUN" command. (2) A symbolic text editor, *ED. This is a greatly modified version of Digital-08-ESAA supplied by DEC. (3) An assembler, *ASM. This is a cut-down version of DEC's MACRO-8 assembler. The macro and number processors have been deleted because of the support code required for interfacing to 4K-CPS. The symbol table capability is the same as for the standard version of MACRO-8 with all options present. In putting these programs into 4K-CPS it was decided to borrow as much as possible of DEC's software and modify it in order to speed system development. 1.3 Operational Procedure This section illustrates the procedures involved in entering, assembling, loading and executing programs using 4K-CPS. Typical commands are used in order to aid in illustrating the basic system operation. Section 2 contains a more detailed description of the various system commands and facilities. The following operations are performed when using 4K-CPS to prepare and run programs. (1) The file system must be loaded into core. (See Section 2. 1. 1 for instructions. ) (Mount tapes, lift LOAD. ) (2) The user's program must either be typed or read from paper tape into the system. Symbolic programs are entered into 4K-CPS through the use of the symbolic text editor, *ED. To invoke the editor, use the file system command RUN *ED This command causes the editor to be loaded into core and started in the command mode with an empty text buffer. 4

The use of the editor is described in Section 2. 2. When the desired program (or as much of it as the editor can handle in a single text buffer) has been typed in, and is in satisfactory shape, the editor should be placed in the command mode and the "S" command given. This command causes the editor to write its current text buffer into the temporary file -S and then return control of the computer to the file system. (3) Since *ED always stores its text buffer in the file named -S, the contents of -S should be saved into a permanent file for later use and modification. This is done by giving the file system the command SAVE -S SFNAME This command causes the contents of -S to be copied into the file named SFNAME. SFNAME is a file name of 8 characters or less in length supplied by the user. If this file does not exist, the file system will create it on the proper tape unit and then copy the contents of -S into it. If SFNAME already exists on either tape the question #REPLACE will be typed. The only affirmative response is! (CR). A lone (CR) is the proper negative response. All other responses cause the comment ILLEGAL COMMAND to be typed; the command is then ignored. If the! is given, the contents of -S will replace the contents of SFNAME. If it becomes necessary to modify the contents of SFNAME it can be reloaded into *ED through the use of the command RUN *ED SFNAME (4) Once the symbolic version of the program has been stored in the file SFNAME it can be assembled (converted into binary form). This involves using the program *ASM which is a modified version of DEC's MACRO-8 assembler. Note: it is assumed that the symbolic program stored in SFNAME conforms to the rules imposed by MACRO-8. (See Section 2.3 and the MACRO-8 manual. ) The assembly procedure converts the contents of SFNAME into a binary representation that ends up in the temporary file named -B. The contents of SFNAME are unaffected. To run the assembler use the command RUN *ASM SFNAME Often it is necessary to partition a program into several segments because it cannot be contained within a single editor text buffer; in fact, a good rule of thumb is to allot one page of code per editor buffer. 5

The individual segments can effectively be combined into one large file through the use of the concatenation feature of 4K-CPS. The use of concatenation will allow up to 16 symbolic files to be assembled together as if they were one large file. For example, if four files were to be combined in this manner the resulting command would take the form RUN *ASM FN1+FN2+FN3+FN4 Control automatically returns to the file system upon completion of assembly with the resulting binary output stored in the temporary file -B. The contents of -B should be saved in a permanent file through the use of the command SAVE -B BFNAME The operation of the above command is the same as in Part 3 above. An assembly listing will be provided if the parameter string construction P=L is used. For example, RUN *ASM SFNAME P=L See Section 2.3 for further details. (5) Once the binaries required for a particular program have been generated it is necessary to put them into the form required by the 4K-CPS RUN command. The program *LOAD is used for this purpose. To invoke *LOAD use the command RUN *LOAD *LOAD is very similar to the file system in its operation and uses the "." as its command line prefix character. Using this program is analogous to loading paper tapes into core using DEC's binary loader. However, instead of loading programs directly into core, *LOAD loads them into an image of core, which it maintains on magnetic tape. When the loading procedure is completed, this core image is compressed into the format required by the file system RUN command loader. The core images formed in this manner end up in -B and can be saved in permanent files for later use. The loader GET command is used to load binary files and core image files into the working core image. For example, suppose that in addition to the main program, the floating point package (FPPVB) and a tape routine (RWTAPE) are required to complete a program. These can be loaded using the single command 6

GET MAIN+FPPVB+RWTAPE Up to eight files can be loaded with a single GET command. Several GET commands can be used in the course of building up a program using various standard subroutines which have been assembled at some earlier time. When all of the needed subroutines and subprograms have been loaded, the core image must be compressed and placed into the form required by the RUN command. This involves removing all empty pages and placing a core image descriptor block at the beginning of the compressed core image to form a core image module. A starting address is also supplied at this time. These operations are invoked through the use of the simple command BUILD SA=XXXXX XXXXX is a starting address furnished by the user; if it is missing, 7777, the address of a HALT command, is used. When the BUILD command is given, the contents of -B are replaced (and not before this time) by the new core image module, and control of the computer is returned to the file system. (6) The resulting core image module is in -B and can be saved through the use of the command SAVE -B CFNAME See part 3 above for an explanation of the SAVE command. (7) The newly-produced core image module can now be loaded into core and started through the use of the command RUN C FNAME or RUN -B 7

2. BASIC 4K-CPS This section is devoted to describing the use of the file system, text editor, assembler and loader. 2. 1 File System The file system is responsible for all file management and is the portion of 4K-CPS with which the user most often "converses. " The file system accepts command lines typed by the user as its input and prefixes each new command line with a #. The user responds by typing a command. Line and character editing facilities are provided in order to allow the user to correct typing errors before he terminates the command line with a carriage return (CR). 2. 1. 1 Getting Into the File System. The following procedure is used to load and start 4K-CPS: (1) Mount the two 4K-CPS tapes on units 0 (left) and 1 (right) as marked on the tapes. Spool 10 to 15 feet of tape onto the takeup reels. (2) Lift the LINC LOAD switch that is on the left side of the machine. This causes the system to be loaded. (3) 4K-CPS informs the user when it is ready to accept input by prefixing a line with a "#". (4) 4K-CPS can be restarted at any time through the following procedure: Press the PDP-8 STOP Place 7600 in the right switches Press the PDP-8 LOAD ADDRESS Press the PDP-8 START The system will reload if the bootstrap program is present. If it does not, lift the LOAD switch. 8

4K-CPS should never be manually restarted during a "SAVE" or "DESTROY" operation. This can cause the index to differ from the actual tape content. 2.1. 2 Input Line Editing. Commands are entered into 4K-CPS by typing on the Teletype keyboard. A command line is not accepted until it is terminated by a carriage return. In order to aid the user in recovering from typing errors the following special editing characters are provided. RUBOUT Deletes the last character (if any) from the current line and types a back slash (\) to record this action. BACKARROW Deletes the entire line and starts a new one. LINEFEED Echos the current line. The echo uses an "=" for its prefix. This feature is useful if a number of rubouts have been made. Additional input may still be appended. (CTRL-P) Causes the line editor to accept the next character (except for leadertrailer). This is useful for placing a BACKARROW in a parameter string. CARRIAGE RETURN Terminates the current line. MINUS When immediately followed by a carriage return causes the current command line to be extended to the next line. The - is not inserted in the buffer in this case. A single command entry cannot contain more than 127 characters and spaces although it may extend over many typed lines. Also, when a command is echoed through the use of the LINEFEED, up to 64 characters are typed on the first line with the remainder being placed on the next line. 2. 1.3 Prefix Characters. In 4K-CPS extensive use is made of prefix characters typed at the start of every line. The characters used by the file system are: 9

# start of a command line = start of a command line echo? request for information 2.1.4 Commands. Commands are entered using one of the following structures. (Other structures are available and are described in detail in Section 3.4; the structures presented below represent the standard ones. ) (1) COMMAND (2) COMMAND FNAME (3) COMMAND FNAME1+FNAME2+...+FNAMEN (4) COMMAND FNAME FNAME1 (5) COMMAND FNAME FNAME1+...+FNAMEN P=... Spaces in front of a file name are ignored but extraneous spaces after a file name and in front of a "+" change the character of the command. The 11 commands implemented in 4K-CPS are described below. Only the first two letters are used by the system to determine the requested command. File names may be any length, however, only the first eight letters are used and retained in the index. File names are terminated by pluses (within a string) or by blanks (at the end of a string). Files are automatically generated through the use of the "SAVE" command. The following characters should not be used in making up file names: CR (carriage return) LF (line feed) leader-trailer non-printing characters 10

The file system recognizes the following commands: COMMENT This command line is ignored. SAVE FROMFILE TOFILE [!] The contents of FROMFILE are copied into TOFILE. If TOFILE does not exist, then the required file is created on the appropriate tape (binary and core images on unit 1, symbolic on unit 0). The proper index entry is also made. If TOFILE exists and the! is supplied, the copy operation will proceed. If TOFILE is too small or on the wrong unit, it will automatically be destroyed and a new file with the same name will be created. The only exceptions to this are -S and -B. These cannot be destroyed but may be enlarged through the use of the ]SET command. If TOFILE exists and is larger than necessary, the extra space will not be returned to the system. If TOFILE exists and the! is not given, the question #REPLAC E will be typed. The only affirmative response is! (CR). All other responses are negative. Responses other than!(CR) or just (CR) cause the comment "ILLEGAL COMMAND" to be typed. The command is then ignored. DESTROY FILE1+FILE2+... +FILE8 The files FILE1 through FILE8 will be destroyed. A maximum of eight files can be destroyed with a single command. It is not possible to destroy the file names -B and -S. File names starting with an * cannot be directly destroyed. (These are system files and so are protected. ) Such files must be renamed before they can be destroyed. Destruction is most rapid if the list starts at the end of the index list and works its way upward. This is not a necessity. 11

INDEX [A] [B] [S] [D] [0] [1] This command types out the index information specified by the trailing parameters. The parameter list should be separated from the command by one blank and is terminated by a blank or carriage return. If no parameter string is present, BS is assumed. Option A List all files including those starting with an * B List binary (non-system) files; i. e., unit 1 S List symbolic (non-system) files, i.e., unit 0 D Type the associated tape location data 0 same as S 1 same as B Typing (CTRL-C) will terminate an index listing if the user becomes impatient. FIND FILE1+... +FILE17 This command is used to verify the presence of a file name in an index without having to type out the entire index. The detailed index parameters are typed out. If a file name is not present, a line is not typed for it. RENAME OLDNAME NEWNAME All files except -B and -S can be renamed through the use of this command. Files starting with an * can be destroyed if they are renamed. RUN COREIMAGE FNAME1+... +FNAME16 P=... This is the standard construct for the RUN command. Advanced users should see Section 3.4 for an explanation of other possible constructs. The RUN command is used to load user and system programs into core and to start them. 12

This command loads the specified core image and provides it with access to the designated files. The P=- construct allows the user to transmit to the core image the characters immediately following the equal sign. The maximum number of characters which can be supplied is 10 + 32 - 2* (# file names present). This provides for a minimum of ten characters. Additional characters are ignored. SIGNOF F This command shuts 4K-CPS down gracefully and in the process rewinds the tapes and copies the indexes into "safe" areas at the front of the tapes. (This is useful in restoring wiped out tapes.) The S]ET LIDENTIFY and LNUMBER commands are for use by the experienced user and are described in Section 3.6. 2. 2 Symbolic Text Editor The file named *ED contains a modified version of the symbolic editor (Digital-8-1-S, also called DEC-08-ESAA) as supplied by DEC. This program allows the user to type symbolic text into the PDP-8 and to perform line editing operations. This section contains a brief summary of the available commands and indicates their affect on the stored text. For further information consult the appropriate DEC manual. The editor is invoked from 4K-CPS by the command RUN *ED [FNAME] where FNAME consists of a concatenated string of file names which have been assigned to files containing symbolic text. 2. 2.1 Operating Modes. Two modes of operation are available, the command mode and the text mode. Command Mode: In this mode all characters typed on the keyboard are interpreted as commands to the editor. When the editor is in the command mode, it prefixes all lines with a ":". The editor is started in the command mode. Commands must be entered in one of the following forms: 13

X NX N, MX where "X" represents a general command; N and M represent decimal numbers specifying lines in the editor text buffer. All commands are terminated by a carriage return (CR). Text Mode: This mode can only be entered by an appropriate command. When in the text mode, the editor prefixes lines with a "%". In this mode, the editor accepts all characters [except for (CTRL-C), LINEFEED, LEADERTRAILER, BACKARROW and RUBOUT] and places them into the text buffer in accord with the immediately preceding command. When the *ED text buffer becomes full, the control mode is immediately (and automatically) re-entered. 2.2.2 Commands. The commands marked with an asterisk (*) leave the editor in the text mode. To return to the command mode the user must type a (CTRL-C) (no CR required). Commands without an "*" remain in the command mode. The prefix character typed by the editor is a ready guide in determining the editor mode. All commands should be terminated by a CR. Input: R * Read incoming text from the reader. Append to the text buffer. When a (CTRL-C) is encountered, operation is resumed in the command mode. A * Append the incoming text to the text buffer. (CTRL-C) immediately returns the editor to the command mode. Editing: L List the entire text buffer. NL List line N. N, ML List lines N through M. 14

NC * Change line N (decimal). (CTRL-C) returns the editor back to the command mode. This instruction is equivalent to deleting line N and inserting in its place the lines of text which follow until a (CTRL-C) is entered. N, MC * Change lines N through M. It is not necessary to furnish the same number of lines to the editor as were changed. NI * Insert the following lines in front of line N. ND Delete line N. N, MD Delete lines N through M. Output: P Punch the entire buffer. This command halts the machine first to allow the user to turn on the paper tape punch. Press "CONT" to start the punching. NP Punch line N. N, MP Punch lines N through M. F Punch LEADERTRAILER code and a (CTRL-C). This command halts the machine before and after operation. Pressing "CONT" restarts the machine. Special: E Exit immediately to CPS without modifying -S. S Store the current text buffer in the temporary file -S and return to 4K-CPS T Compress the text buffer and type out the approximate number of decimal locations available for storing text. Text is stored 2 characters to a location. 15

2.2.3 Special Features. Special Characters: BACKARROW Cancel the present line. (BACKARROW= SHIFT-O) CTRL-TAB Tab six spaces. This is suppressed on input and output if right switch 1 is up. / Decimal value of the last line present. Decimal value of the current line. Type decimal value of preceding symbol. - and + Allow line specification relative to line (.) or (/). Errors: If illegal commands or meaningless arguments are entered, the editor responds with a?. The editor may be halted at any time during a listing by pressing the PDP-8 "STOP" switch. Restarting the editor at location 177 will preserve the text in the buffer. Line Editing: The following capabilities are available in the text mode only: (1) Typing RUBOUT deletes the last character on a line and echoes a back slash (\) for each deletion. When all of the characters on a line have been deleted, back slashes are no longer echoed. (2) Typing a line feed echoes the current line. Text may be appended. (3) The read option (R) does not halt the machine when a (CTRL-C) is entered. However the command mode is re-entered. (4) A (CTRL-P) serves as a literal next character. This may be used to enter the back-arrow (-) into editor text. Avoid using it for anything else! 16

(5) The back-arrow still restarts the current line when it does not follow a (CTRL-P). (6) A (CTRL-C) will return the user to the command mode whenever it is typed. 2. 3 Assembler The assembler supplied in the file *ASM is a cut-down version of DEC's MACRO-8 assembler. *ASM is used to convert symbolic text stored in 4K-CPS files into the binary form acceptable to the loader program *LOAD. The binary output of *ASM is placed in the temporary file named -B. *ASM differs from MACRO-8 in that the following operations have been removed: (1) FLTG pseudo-op (2) DUBL pseudo-op (3) PAUSE pseudo-op (4) The MACRO processor These operations were removed in order to allow room for the support routines required to interface *ASM with 4K-CPS. The symbol table capability of *ASM is the same as for MACRO-8 with all of the above features present. The symbol table supplied with *ASM is found in Appendix B. 2.3.1 Running *ASM. The assembler is invoked by giving the following command to the file system: RUN *ASM F1+...+F16 P=... It is assumed that the files F1 through F16 contain a symbolic program written using the standard MACRO-8 conventions. A maximum of 16 files can be assembled as one program (a restriction imposed by the file system —however, this many files usually causes the symbol table to overflow anyway). The last file must contain a $ in order to terminate the assembly. If the P= construct is not used, passes 1 and 2 of the assembler will automatically be provided. The temporary file -B will contain the resulting binary output. If no error messages are typed out, then the 17

binary can be assumed to be "good." Error messages should be taken as being fatal. Pass and listing control can be exercised by the user through the parameter string. *ASM recognizes the following control characters in the parameter string (all others are ignored): B Generate a binary and place it in -B, i. e., pass 2. NB Skip pass 2. L Generate a listing on the Teletype, i. e., pass 3. S List the symbol table. NS Do not list the symbol table. Not typing P=... is equivalent to typing P=BNLNS. Pass 1 is always provided. Errors encountered in the assembly do not terminate the assembly and all passes requested are supplied. Exceptions to this consist of internal table overflows which immediately return the user to 4K-CPS. 2. 3. 2 Listing Control. Listing control for assembly listings has been incorporated in the I/O support code for *ASM. Pagination and print control are exercised through the inclusion of listing control lines within the input text stream. Listing control lines are defined as lines whose first character is either an (ALT-MODE) or (CTRL-H). The remaining characters are used to determine the desired control action. Listing control lines are not passed to the assemblers. The valid control characters are: E Start the next line on a new page. P Turn the print operation on (normally on). NP Turn the print off. The following structure has been found to provide "nice-looking" listings. 18

*xxx / the first line starts on a new sheet text PAGE / dumps the literal pool on the current sheet (ALT-MODE)E *xyz / now on a new sheet text PAGE / dump literal pool (ALT-MODE)E 2. 3. 3 Reference Material. The following information has been taken from DEC's "Introduction to Programming. " For further information on the MACRO-8 language consult the DEC MACRO-8 manual. *ASM SYMBOLIC ASSEMBLER The *ASM Symbolic Assembler is a service program used to translate symbolic programs that are written in the MACRO-8 symbolic language into binary programs. The MACRO-8 Language as found in 4K-CPS can be generally considered as PAL III with the following additional features: Operators —Symbols and integers may be combined with a number of operators. Literals —Symbolic or integer literals (constants) are automatically assigned. Text Facility —There are text facilities for single characters and blocks of text. Link Generation- -Links are automatically generated for off-page references. 19

LITERALS. Since the symbolic expressions which appear in the address part of an instruction usually refer to the address of locations containing the quantities being operated upon, the programmer must explicitly reserve the locations holding his constants. The MACRO-8 programming language provides a means for using a constant directly. Suppose, for example, that the programmer has an index which is incremented by two. One way of coding this operation would be as follows. CLA TAD INDEX TAD C2 DCA INDEX C2, 2 Using a literal, this would become CLA TAD INDEX TAD (2) DCA INDEX The left parenthesis is a signal to the assembler that the expression following is to be evaluated and assigned a location in the constants table of the current page. This is the same table in which the indirect address linkages are stored. In the above example, the quantity 2 is stored in a location in a list beginning at the top of the memory page (page address 177), and the instruction in which it appears in encoded with an address referring to that location. A literal is assigned to storage the first time it is encountered, and subsequent references will be to the same location. If the programmer wishes to assign literals to page 0 rather than the current page, he may use square brackets, [ and ], in place of the parentheses. However, in both cases, the right or closing member may be omitted, as in the example below. 20

Literals may be nested. For example: *200 TAD (TAD (30 will generate 0200 1376 0376 1377 0377 0030 This type of nesting may be carried to as many levels as desired. PSEUDO-OPS. *ASM has available a number of useful pseudo-ops, which are listed and briefly explained below: PAGE When used without an argument, the current location counter is reset to the first location on the next succeeding page. With an argument (PAGE n), the current location counter is reset to the first location on the specified page, page n. DECIMAL When this pseudo-op occurs, all integers encountered in subsequent coding will be taken as decimal until the occurrence of OCTAL, OCTAL which will reset the radix to its original base. EXPUNGE When used, the entire permanent symbol table (excluding pseudo-ops) is erased. This pseudo-op is used when the programmer wishes to provide more core for the user program symbols. Then, with FIXTAB, FIXTAB the programmer can build a customized permanent symbol table, containing only those permanent symbols required for his user program. The preceding pseudo-ops and a few others are described in detail in the MACRO-8 Assembler manual. 21

OFF-PAGE REFERENCING. During assembly, the page bits of the address field are compared with the page bits of the current location counter. If the page bits of the address field are nonzero and do not equal the page bits of the current location counter, an off-page reference is being attempted. If the reference is to an address not on the page where the instruction will be located, the assembler will set the indirect bit (bit 3) and an indirect address linkage will be automatically generated on the current memory page. Although the assembler will recognize and automatically generate an indirect address linkage when necessary, the programmer may still indicate an explicit indirect address using the special symbol "I" between the operation code and the address field. ERROR MESSAGES. The assembler is constantly checking for assembly errors, and when one is detected, an error message is printed on the teleprinter. Error messages are printed in the following format. xx yyyyyy where xx is a two-letter code which specifies one of the type of errors listed below, and yyyyyy is either the absolute octal address where the error occurred or the address of the error relative to the last symbolic tag (if there was one) on the current page. Following is a descriptive list of the error messages, some are printed out during Pass 1, others during Pass 2, and some of which are printed out during both passes. Error Code Meaning BE MACRO-8 internal tables have overlapped IC Illegal character ID Illegal redefinition of a symbol IE Illegal equal sign II Illegal indirect address ND No $ PE Current, nonzero page exceeded SE Symbol table exceeded US Undefined symbol ZE Page zero exceeded For a thorough description of MACRO-8, see MACRO-8 Assembler, Order No. DEC-08-CMAA-D. 22

2.4 Loader The loader stored in the file *LOAD is used to combine binary and core image files into new core image files which can be loaded into core and started by the file system RUN command. Instead of loading into core as does the paper tape binary loader, *LOAD places the contents of designated files into an image of core which it maintains on magnetic tape. Inthis core image one tape block (128 words long) corresponds to one page of memory and 32 (decimal) tape blocks correspond to one memory field. Capacity for up through four memory fields is provided. When loading *ASM output (absolute binary files), the loader addresses the core image in the same manner as the paper tape binary loader addresses memory. (In fact, it is essentially the same loader.) Each computer word content is placed into the specified location of the core image without disturbing the contents of any other location. However, when loading a core image file the data transfer consists of copying entire pages from the designated file directly into the core image; the previous contents of the corresponding pages in the core image are lost. It is possible to patch existing programs by loading their core images first and then overlaying them with the desired patches which are stored in files produced by *ASM. When a value is stored in any location of a particular memory page, this page is said to be "referenced. " Referenced pages contain a core constant in all locations not stored into. This core constant is 7402 (PDP-8 halt). When all of the desired binary and core image files have been loaded, the loading procedure is terminated and the core image module is produced by the use of the BUILD command. The desired core image module is formed by deleting all unreferenced pages from the core image and placing a core image descriptor block at the front of the resultant compressed core image. The core image descriptor block provides the file system RUN loader with sufficient information to allow reconstruction of the original uncompressed core image. In no case will a core image module contain the top page in memory field 0. The system boot and system communications area reside in this page and the loader protects it. The final core image module is left in -B (-B is not altered until the BUILD command is given) and may be saved in a permanent file. 23

The 4K-CPS loader is designed to load into as much as 16-K of memory. It is up to the user to insure that all addresses and origins are within the capacity of his own particular machine. 2.4. 1 Running *LOAD. The loader is loaded into core and started by the following file system command RUN *LOAD 2. 4.2 Operation. The operation of *LOAD is very similar to that of the file system. The input to *LOAD consists of command lines typed by the user. The same line editing facilities are available in *LOAD as are available in the file system (Section 2. 1.2). The loader uses the "."as its prefix character. 2.4.3 Commands. The loader recognizes the following commands (these may be abbreviated to two characters): GET FILE1+... +FILE8 The contents of files FILE1 through FILE8 are placed into the core image. A maximum of eight files can be loaded with a single GET command. Files are loaded in the order in which they are named. Several GET commands can be used during the formation of a core image module. Only valid core images or *ASM produced files resident on tape unit 1 can be loaded. In many cases the user may have page relocatable subroutines which he may wish to load into a page other than that for which the subroutine was originally assembled. This type of relocation can be accomplished using the construct, e.g., GET TAPEROUT@7000 This command causes TAPEROUT to be loaded into the core image starting at location 7000. All origins contained in the file TAPEROUT (assuming it to an absolute binary file) are taken modulo-200 and are added to the relocation constant, in this case 7000. When core images are relocated this way, each segment is relocated starting at location 7000, thus only single segment core images should be relocated using this facility. Any number of files named in a GET command may be relocated in this fashion. 24

REPLACE LOCN CONT CONT CONT... This command is used to modify the contents of individual locations in the core image from the keyboard. LOCN is the first location in the core image to be modified. CONT means the octal numbers to be placed in successive locations starting with location LOCN. Replacement proceeds until all values have been placed or until an invalid value is encountered. LOCN DUMPSTART END This command causes the contents of LOCN, or the contents of locations START through END (inclusive), to be typed out on the Teletype. Typing a (CTRL-C) will terminate a dump for the impatient user. INDEX This command causes a list of all loadable files contained on tape unit 1 to be typed out. Each name is followed either by an A or a C depending upon whether the file contains absolute binary (*ASM output) or a core image (*LOAD output). Typing (CTRL-C) causes the typing to be terminated. UNREFERENCE LOCI LOC2 LOC3... This command causes the pages containing the designated locations to be erased from the core image under construction. EXIT This command causes the 4K-CPS file system to be restarted with the contents of -B unaltered. 25

MAP The referenced sections of PDP-8 memory are listed on the Teletype. Each line represents a segment in the present core image. A maximum of 42 (decimal) segments can be incorporated into one core image module. BUILD [[SA=] LOCN] This command causes the loader to form a core image module from the current core image and place it into -B. LOCN is an optionally specified starting address supplied by the user. If no starting address is specified, value of 7777 (which is a HLT in the system boot) is used. The resulting core image module is placed in -B and is in the proper format for being loaded directly into core using the file system RUN command. 26

3. ADVANCED 4K-CPS This section is intended for the programmer who wants to interface additional system program modules to the 4K-CPS file system. It is not the intention of this section to provide detailed documentation of the internal structure of 4K-CPS. The program listings and Appendix C should be consulted for this purpose. 3. 1 Tape Organization The LINC tapes used for 4K-CPS are marked using 128 (decimal) word blocks and are written using a checksum which is the arithmetic sum of the words in the blocks. Each tape contains 1024 (decimal) blocks. Unit 0 Structure Block Numbers Contents (octal) 0 cold start loader 1-6 "safe" index copy for unit 0 7 spare 10-307 scratch area 310 system boot 311 system loader 312-333 file system 334-341 unit 0 index 342-377 reserved for system expansion 400-1777 file storage Unit 1 Structure 0 load error routine 1-6 "safe" index copy for unit 1 7 spare 10-217 scratch area 220-225 unit 1 index 226 RUN command loader 227-246 *LOAD 247-266 *ED 267-326 *ASM 327-1777 file storage 27

3. 2 Structure of 4K-CPS File Indexes INDEX HEADER The first six words of each index describe the current state of the index and the file tape. Word # Contents 0 2's complement of the number of index entries 1 next free block on file tape 2 space remaining on tape (in blocks) 3 tape identification number 4 unused 5 unused INDEX ENTRIES The total index size is six pages giving room for 127 entries. The first file entry in each index is protected and cannot be renamed or destroyed. Each index entry is structured in the following manner: first word first two characters in file name, packed using stripped ASCII second word third and fourth characters in name third word fifth and sixth characters of name fourth word seventh and eighth characters of name fifth word 4000*unit file is on + starting block number sixth word 1000*file descriptor + file size in blocks For file names shorter than eight characters in length, trailing blanks are supplied by the file system. File descriptors currently used are: 0 packed ASCII - using *ED packing conventions 1 absolute assembler output - *ASM output packed 3 paper tape frames per two 12 bit words 2 reserved for SABR output if ever placed in 4K-CPS 28

3 core image loadable by the RUN command loader 4 straight ASCII packed 3 frames per two 12 bit words 5 unassigned 6 unassigned 7 unassigned 3.3 Key for Updating the Free Names, -S and -B In order to alter the attributes of -S and -B the following procedure is used: A "key" word whose structure is described below must be placed in location 7715 and its l's complement must be placed in location 7724 before reloading the system. This informs the 4K-CPS file system that an update is desired. The file system then takes the new attributes for -S (if it is to be updated) from locations 7725 and 7726 and the new attributes for -B (if it is to be updated) from locations 7727 and 7730 and places them in the appropriate indexes without modification. The contents of the attribute words are precisely those parameters used in the actual index, 4000*UNIT+BLN and 1000*FILE DESCRIPTOR+ SIZE IN BLOCKS. The "key" constant is +1 if the 4K-CPS identification header is to be typed 0250 +4000 if -S is to be updated +2000 if -B is to be updated or any combination. 3.4 File System Command Line Structure In its most general form, the 4K-CPS input command line consists of a command verb followed by three groups or strings of file names. These groups are ordered by the numbers 0, 1 and 2. These numbers may in fact explicitly appear before the file name groups: COMMAND 0=NAMESTRINGO 1=NAMESTRING1 2=NAMESTRING2 P=... For example RUN *ASM F1+F2 P=L 29

is equivalent to RUN O-*ASM 1= F1+F2 P= L and DES QA+DE is equivalent to DES O=QA+DE The only restriction in this scheme is that the groups must be assigned in order; i. e., 0 must precede 1, etc. The meaning and utilization of the various file strings are dependent upon the specified command. From the command descriptions given in Section 2.4. 1, it should be apparent which commands use which group numbers. Further exposition on the structure of the RUN command is in order at this point. The action of the RUN command is to put into execution the program stored in the file assigned to group 0. This command also passes to the program a string of file addresses corresponding to the file names specified in groups 1 and 2. (This is done via the communication area, Section 3. 5.) Routines in the specified program can then access these user specified files. Thus specifying file names in groups 1 and 2 in a RUN command, in a sense, sets up a logical I/O interface between the program and the file system. It is for this reason that it is often said that the files in group 1 are "attached to Logical I/O Device 1,' etc. At the present time no program uses a device number greater than 1. However, at some future time it may become necessary to use device 2 for assigning output files or for establishing explicit program overlays. 3. 5 Communication Area Structure When a core image module is loaded into core and started by the file system RUN command, the following information is available: 30

Name Location Function STRBLN 7723 The location of the descriptor block for the current core image in core. This is in the form 4000*UNIT+BLOCK NUMBER. BLN 7711 The location of the next tape block immediately after the last one loaded. This is in the form O*UNIT+BLOCK NUMBER. NUMD1 7721 The number of files assigned to device 1. NUMD2 7722 The number of files assigned to device 2. FILEADR 7725 The start of the file address chain. The following information is stored sequentially in the same order as named in the invoking RUN command. The device 1 assignments are immediately followed by the device 2 assignments. The file pointers are in the form 4000*UNIT+BLOCK NUMBER 1000*ATTRIBUTE+SIZE A combined total of 16 (decimal) files can be assigned to devices 1 and 2. PARLIST The parameter list starts immediately after the file string. Thus PARLIST starts at location FILEADR+2*NUMD1+2*NUMD2. A minimum of ten locations is available if all 16 available file pointers are used. The system boot tape routine shares the top page of memory of field 0 with the communication area. It should be pointed out that the updating of -S and -B alters the contents of the input file string starting in location FILEADR. This can cause problems in multi-pass programs such as *ASM 31

3.6 Special Commands The following commands have been included in 4K-CPS in order to aid in the system development and maintenance. ]SET FNAME The next two lines are input using a 4-digit octal input routine (NOT the normal input line editor). The first line contains 4000*UNIT+BLOCK NUMBER and the second line 1000*ATTRIBUTE+SIZE. NO editing is available on these numbers other than the back-arrow (-) which deletes the entry (setting it to 0) and allows input of another number. Any other non-octal character terminates the line. This command replaces the descriptors of the designated file with those entered from the keyboard. This command is primarily intended to allow changing the attributes of -B and -S from the keyboard. Do not attempt to use this command to alter the location of the last used block on either tape. Use at your own risk. ]IDENTIFY This command causes the first six Vocations in each index to be typed. See Section 3.2 for a description of these locations. ]NUMBER The next line is read in using the 4-digit octal input routine described along with the ] SET command. This value is placed in the tape user identification n-umber location of both indexes. CEL uses 4000+TAPE NUMBER to identify its 4K-CPS tapes. 3. 7 4K-CPS Data Structures This section describes the data structures used in symbolic text files, absolute binary files and core image files. 3. 7. 1 Symbolic Text Files. Symbolic text files are line oriented and use the 6-bit compressed format followed in DEC's symbolic text editor. Each ASCII character is coded into either one or two groups of 6 bits. Each 6-bit group is put into the file immediately after the last group, and groups are packed two per computer word. The only exception is the line terminator, the carriage return. By convention each line starts at the left-end of a computer word. 32

The following encoding scheme is used: ASCII 6-BIT 340-276 the lower 6 bits in the ASCII representation 300-33 [ 200-237 {a 77 group followed by the lower 6 bits in 340-376 he ASCII representation 277 The RUBOUT character is not included in the above scheme. For example, the two lines I(CR) DO(CR) would be encoded as 1177 1500 0417 7715 Symbolic text files are terminated by the occurrence of the (CTRL-C) character. (*ED automatically provides this character on its own line. ) 3. 7.2 Absolute Binary Files. Absolute binary files contain binary paper tape frames packed three 8-bit frames per two computer words. LOC frame 1 top 4 bits frm 2 LOC+1 bot 4 bits frm 2 frame 3 l Absolute binary files start with a 200 frame (leader-trailer) and terminate with a 200 frame. 3. 7.3 Core Image Files. Core image files must be structured in the following manner in order to be properly loaded by the file system RUN command. The first block of the core image contains a set of descriptors which describe the following core image segments. Three words are used to describe each segment except for the last segment which is described by five words. The regular 3-word descriptor is structured as follows: 33

word 1 The number of tape blocks contained in the segment. This number should be less than or equal to 40 (octal) except for field 0 where it must be less than or equal to 37 (octal). Bit 0 of this word is set equal to 1 to indicate when the last segment in the current core image module is being described. word 2 Bits 6 through 8 of this word contain the memory field into which the segment being described is to be loaded. All other bits in the word must be zero since this entry is added to a CDF instruction. word 3 The full 12-bit address within the designated field where the described segment is to be placed. The fourth word in the descriptor for the last segment contains the field in which the program is to be started. The format of word two is used. The fifth and final word contains the full 12-bit starting address in the designated field. Memory fields can be loaded in any order with the exception of field 0 which must be the last field loaded. Loading should proceed from the bottom of a memory field to the top. (This is a must for field 0.) 34

4. SYSTEM DOCUMENTATION The Master System Development tapes contain the symbolics for the entire 4K-CPS system. Instructions are given below for assembling and updating the system. Appending a P=L to the assembler commands will provide the user with a complete set of listings. Appendix C contains additional details on the internal structure of the file system, *LOAD, *ASM and *ED. 4. 1 Bootstraps There are four programs which are termed bootstraps. The symbolic versions are found in files: SCLD SBOOT SBOOT2 TAPEMIX 4. 1. 1 SCLD. SCLD is the cold start boot routine located in block 0 of unit 0. This routine is loaded by lifting the LINC LOAD switch, and reads in the system boot SBOOT. RUN *ASM SCLD RUN *LOAD GET -B BUILD RUN *TCOPY (copy 1 block from block 11 of unit 1 to block 0 of unit 0) 4. 1.2 SBOOT. This boot is the resident system boot and is located in the top page of memory field 0. Its starting address is 7600 and its purpose is to read in the main system loading routine SBOOT2. SBOOT does not provide checksum protection and is only used to read in the SBOOT2 or the page starting at 7400 in memory field 0, if required, during a RUN command. The SBOOT tape search and wait routines are used by *ED and *ASM in their tape operations. This routine is stored in block 310 of unit 0. RUN *ASM SBOOT RUN *LOAD GET -B BUILD RUN *TCOPY (copy 1 block from block 11 of unit 1 to block 310 of unit 0) 35

4.1.3 SBOOT2. This boot loads in the file system and the unit 0 index. It is stored in block 311 of unit 0 and is read into the page starting at location 7200 by SBOOT. It should be noted that the tape routines in these boots are arranged so that the tape operation involved in loading the system into core, started by lifting the LOAD switch, is one smooth continuous forward motion. The unit 1 index is loaded by the system and overlays SBOOT2. RUN *ASM SBOOT2 RUN *LOAD GET -B BUILD RUN *TCOPY (copy 1 block from block 11 of unit 1 to block 311 of unit 0) 4.1.4 TAPEMIX. This routine is not really a boot but an antiboot. It is called into action only if the tapes are mounted on the wrong units. This fact is pointed out to the user by TAPEMIX. RUN *ASM TAPEMIX RUN *LOAD GET -B BUILD RUN *TCOPY (copy 1 block from block 11 of unit 1 to block 0 of unit 1) 4.2 The File System The file system is assembled in four separate parts. These parts are later combined using the loader *LOAD. IOC RUN *ASM SIOC1+SIOC2+$ SAVE -B IOC SPART1 RUN *ASM SOOA+S06+S10O+S12+S14+$ SAVE -B SPARTI SPART2 RUN *ASM SOOB+S1 6+S20+S22+S24+S26+S30+ S32+S34+S36+S40+$ SAVE -B SPART2 RUNLDR RUN *ASM S74+$ SAVE -B RUNLDR 36

RUN *LOAD GET IOC+SPART1+SPART2+RUNLDR BUILD To update the main body of the system use *TCOPY to copy 22 (octal) blocks from block 11 of unit 1 to block 312 of unit 0. To generate a "clean" index on unit 0 (rarely done), copy 6 blocks from block 33 of unit 1 to block 334 of unit 0. To generate a "clean" index on unit 1 (rarely done), copy 6 blocks from block 41 of unit 1 to block 220 of unit 1. To update the RUN loader, copy 1 block from block 47 of unit 1 to block 226 of unit 1. 4.3 The Loader The loader is an overlay onto the file system and uses many of its routines. RUN *ASM L00+L06+L20+L22+L24+L26+L30+L32+L34+L36+ L40+L74+$ RUN *LOAD GET -B UNREF 100 BUILD SA=4000 SAVE -B *LOAD 4. 4 The Editor The editor and its support package are assembled separately. RUN *ASM EO+E1+E2+E3+E4+E5+$ SAVE -B BINED RUN *ASM EDMA+EDMB+EDMC+$ RUN *LOAD GET BINED+-B BUILD SA=2000 SAVE -B *ED 37

4. 5 The Assembler The assembler and its support package are assembled separately. RUN *ASM AO+AI+A2+A3+A4+A5+A6+A7+A8+A9+AEND SAVE -B BINASM RUN *ASM AS0+AS1+AS2+AS3+AS4+AS5+AS6+$ RUN *LOAD GET BINASM+-B BUILD SA=4600 SAVE -B *ASM 38

5. CONCLUSION This report and the symbolics contained on the 4K-CPS Master System Development tapes are intended to serve as the total 4K-CPS system documentation, although this is admittedly incomplete. The following procedure is recommended in generating and maintaining 4K-CPS tapes: (1) Upon receipt of a set of 4K-CPS Master tapes make two copies using *MARKP8 and *TCOPY. (2) Keep one copy as a backup to the Master set and update this copy each time the system is modified. (3) On the other copy delete all files which are only relevent to the system. This would include all the files named in Section 4 with the possible exceptions of the files SIOC1, SIOC2, and $. Add any useful "standard" routines. Use this set of tapes as the Distribution and Library Master tapes. (It may be desirable to have a backup copy of this set also. ) (4) Using the ] NUMBER command it should be possible to keep track of the various sets of tapes and their owners. At present there is no convenient way to transfer files between sets of 4K-CPS tapes. One approach to this problem is to use the program *ED to transfer symbolic files by loading a symbolic file into *ED from one set of tapes and then writing it out onto another set of tapes using the "S" command. Another approach is to use *TCOPY to copy the desired programs into the scratch areas of the new tapes, use the ] SET command to make -S or -B correspond to the data being transferred and then save -S or -B in the normal manner. Using this method it is possible to transfer several files at one time. A general file transfer program is in development. In addition to the material presented in the preceding sections, Appendix D contains the operating instructions for three additional utility programs and Appendix E describes the 4K-CPS I/O controller. It is hoped that DEC's 4K-FORTRAN-D will eventually be incorporated into 4K-CPS. 39

APPENDIX A The Cooley Electronics Laboratory LINC-8 computer has been modified in order to allow proper I/O processing when reading paper tapes under interrupts. This minor modification permits clearing the reader flag without advancing the reader. IOT device code 13 (which conflicts with DEC's real-time clock) is used for this purpose. The operation of the device 13 op-codes is identical to that of the standard device 03 codes except that the reader is not advanced when the reader flag is cleared. This modification is reflected in 4K-CPS by the occurrence of a 6132 instruction in the I/O controller, IOC. A device 35 op-code (6354) is also used in IOC. If the hardware modification described below is found to be impractical, the following procedure can be used to remove these two instructions from 4K-CPS. (1) Mount the 4K-CPS tapes on the proper units (2) Lift the LINC LOAD switch (3) After 4K-CPS identifies itself and the tapes stop moving, press the PDP-8 STOP switch (4) Toggle in and verify the following small program LOC CONT 0212 7200 was 6354 0224 6032 was 6132 4200 4431 reset IOC 4201 4427 write tape 4202 0313 unit 0 block 313 4203 0001 one block 4204 0200 starting at loc 200 4205 4430 wait for tape to finish 4206 6002 IOF 4207 5610 JMP I + 1 4210 7600 reload the modified system (5) Place 4200 in the right switches 40

(6) Press the PDP-8 LOAD ADDRESS (7) Press the PDP-8 START (8) The system will be modified and reloaded. This fix takes care of all system programs using the I/O controller, IOC. No further modification (except to the IOC symbolics) should be necessary. Modification to LINC-8 MB5(0) is disconnected from the keyboard select AND gate (teleprinter drawing, location ME17, Pin D). This enables the use of both a 603X and 613X since the AND gate would see a 13 code as an 03 code. The ground is then disconnected from the DCD gate on the "READER RUN" flip flop (teleprinter drawing, location ME 21, Pin V). MB5(1) is then connected to this point. This will not allow the flip flop to be set on a 613X code. 41

APPENDIX B This appendix contains the symbol table used in the CEL version of *ASM. This symbol table can be tailored to any installation's needs by making the desired modifications in the assembler symbolics and re-assembling the assembler (see Section 4.5). There is room for 246 user defined symbols in the CEL version of *ASM. Assembler Symbol Table AND=0000 ION=6001 IACA=6167 TAD=1000 IO F=6002 ISSP=6165 ISZ=2000 KSF=6031 IACS=6163 DCA=3000 KCC=6032 IACB=6161 JMS=4000 KRS=6034 IMBS=6155 JMP=5000 KRB=6036 ICS2=6153 IOT=6000 TSF=6041 ICS1=6151 OPR=7000 TCF=6042 INTS=6147 NOP=7000 TPC=6044 ILES=6145 CLA=7200 TLS=6046 IBAC=6143 CLL=7100 FEXT=0000 ICON=6141 CMA=7040 FADD=1000 SQROOT=0002 CML=7020 FSUB=2000 SQUARE=0001 RAR=7010 FMPY=3000 RRB= 6136 RTR=7012 FDIV=4000 RRS= 6134 RAL=7004 FGET=5000 RCC=6132 RTL=7006 FPUT= 6000 RSF= 6131 IAC=7001 FNOR=7000 EXIT=5400 SMA=7500 RDF=6214 CALL=4400 SZA=7440 RIF=6224 SPA=7510 RMF=6244 SNA=7450 RIB=6234 SNL=7420 CDF=6201 SZL=7430 CIF=6202 SKP=7410 EOF=6354 OSR=7404 EON=6352 HLT=7402 ECF=6352 CIA=7041 ESF=6351 LAS=7604 ITAC=6177 STA=7240 IAC F=6175 STL=7120 IZSA=6173 GLK=7204 IAAC=6171 42

APPENDIX C This appendix contains material descriptive of the internal structure of the 4K-CPS system. Detailed 4K-CPS File System Core Map Page Location Tape Location Contents 0000-0177 0312 Constants, variables and pointers 0200-0377 0313 I/O controller 0400-0577 0314 I/O controller 0600-0777 0315 TCOPY, CALCPY 1000-1177 0316 PLIB, DPOSIT, CRLF, RDRIN, PREF 1200-1377 0317 OBI, EXCHR, GWFLB, SPRSPA, TABTST 1400-1577 0320 MESAGE, OCTIN, OCTOUT 1600-1777 0321 ISRCH, GETW, PUTW, SYSTST, SVS, FIND command 2000-2177 0322 WVTOC, SIGN command, CCOMAR 2200-2377 0323 Messages 2400-2577 0324 DESTROY command, DELETE 2600-2777 0325 SAVE command 3000-3177 0326 SAVE command, RENAME command, TSTCTC 3200-3377 0327 INDEX command, INTYP 3400-3577 0330 RUN command, SEEK 3600-3777 0331 Main entry point (internal), TERMTST 4000-4177 0332 ] SET command, ] NUMBER command, ] IDENTIFY command, D01CHK 4200-4377 0333 System start (from boot). Command line buffer 4400-4577 0334 Start of unit 0 index 4600-4777 0335 5000-5177 0336 5200-5377 0337 5400-5577 0340 5600-5777 0341 End of unit 0 index 6000-6177 4220 Start of unit 1 index 6200-6377 4221 6400-6577 4222 6600-6777 4223 7000-7177 4224 7200-7377 4225 End of unit 1 index 7400-7577 4226 RUN command loader 7600-7777 0310 System boot (4000=Tape unit 1) 43

A brief description of each routine used in the 4K-CPS file system is given below. CALCPY Makes calls to TCOPY using a list of copy operations previously set up by the DESTROY and SAVE commands. When the list has been exhausted, CALCPY restores the system (TCOPY reads over most of the system) and returns to the caller. CCOMAR Zeros the communication area and places a HLT in location 7777. Also clears the write VTOC (index, if you prefer) switches. CRLF Uses IOC to type out a carriage return followed by a line feed. DELETE Deletes the file specified in locations W1-W4 from the appropriate index, determines the required tape operation and sets the appropriate write VTOC switch. If the specified name is not present (i. e., appears twice in a destroy string), the system is reloaded thus restoring the indexes to their original state. DESTROY Command Destroys up through 8 file names assigned to logical device 0 (all files must be on device 0). Absence of input file names causes the ILLEGAL COMMAND comment to be typed. DESTROY uses the DELETE routine and sets up CALCPY for the actual tape operations. Files are destroyed in the specified order as if each had been named in a separate DESTROY command (lack of room necessitated a dumb command). DPOSIT Places the contents of the AC into the command line input buffer. If the buffer overflows, an error message is typed and the current line is lost. This routine must be initialized. 44

DOCHK Checks to see if all assigned file names are present, the ILLEGAL COMMAND comment is typed and the current command is ignored. DO1CHK Checks to see if precisely 1 file name has been specified on logical device 0 and precisely 1 file name has been specified on logical device 1. If not, the ILLEGAL COMMAND comment is typed. Device 2 is not checked. EXCHR Extracts characters from the input command line buffer. This routine is initialized by OBI. Separate return points are provided for a normal return with a character in the AC and for an end of buffer return. FIND Command Searches the indexes (VTOCs) for the file names attached to device 0. If an entry is located, the name along with the index parameters are typed. If a name is not located, it is ignored. All file names must be attached to device 0. GETW Transfers the contents of W1-W4 to the four locations starting at the contents+1 of auto-index register 10. GWFLB Gets the first eight characters of the next word in the command line buffer. Separate return points are used for a normal return and for an end of command line return. GWFLB recognizes (space), + and = as break characters. The eight text characters are left in locations W1-W4. Trailing blanks are provided if necessary. 45

INDEX Command Types out the indexes as requested by the specified parameters. INTYP Does the typing for the INDEX command. ISRCH Searches the index specified by the contents of the AC for the name contained in W1-W4. Separate return points are used depending on whether or not the specified file name is found in the specified index. ISRCH also sets up various pointers if a file name is located. IOC.. I/O Controller See Appendix E for a description of the 4K-CPS I/O controller. Main Entry Point (internal) This is the point to which all commands (except RUN) and errors eventually return. A new command line is read in, decoded, checked for gross errors and the command dispatched. MESAGE This is a modified version of DIGITAL 8-18-U. It is used to type messages produced using the MACRO-8 TEXT command. OBI Initializes the EXCHR routine. OCTIN Accepts a four digit octal number typed from the keyboard. Used in the ]SET and ] NUMBER commands. Any non-octal input except for the back-arrow terminates the input number. Back arrow restarts OCTIN. 46

OCTOUT Used to type four-digit octal numbers. PLIB Used to input a line into the command line input buffer. Also contains the line editing support code. PREF Types a carriage return-line feed followed by the current prefix character. PUTW Transfers the contents of the four locations starting at the contents+1 of auto-index register 11 into locations W1-W4. If the first word in this string is zero, a special return is made to the caller. Otherwise the return is normal. RENAME Command This command allows the user to rename the file whose name is assigned to device 0 using the name assigned to device 1. RDRIN Used by PLIB to read characters. RUN Command Used to load programs. Sets up the file and parameter strings in the communication area, reads in the core image descriptor block of the specified program file and exits to the RUN Command Loader with the tapes moving forward. 47

RUN Command Loader Performs the actual booting in of core image modules. Uses the system boot search and wait routines. If the last page to be loaded overlays this loader, it sets the system boot to read in this page and goes to the boot. When started, it assumes the proper core image descriptor is in core and the tapes are moving forward. SAVE Command Copies the file designated on device 0 into the file designated on device 1. Creates new files and allocates storage on tapes as required. Performs the actual copying through the CALCPY-TCOPY routines. SEEK Searches both indexes for the file name contained in W1-W4. Two return options are possible. If SEEKSW=0 and file name cannot be located, a replacement or carriage return is requested. If SEEKSW has been set to -1, then a special return is made. SEEK always resets SEEKSW to 0 upon exiting. SIGN Command Causes the current indexes to be copied to the front of the tapes and types out BYE. This is done in order to rewind the tapes for the user and to provide a backup copy of his indexes in case the primary versions are accidentally destroyed. SPRSPA Places four words containing 4040 starting at a specified location. This is a relatively worthless routine. SVS Used to set the write VTOC switches. 48

System Bootstrap Loads in the system load tape routine from block 311 of unit 0 and starts it. System Start (external) The point at which the file system is started after being loaded. This code updates the index entries for -S and -B as needed and types the 4K-CPS identification. This code resides in the command line buffer and is lost after start-up. SYSTST Tests file names for * as the first character. This routine is invoked when it is not desired to alter files whose names start with an * TABTST This is a routine which checks the value of the AC against the values stored in a specified table. The specified return point is determined by where the match (if any) occurs. TCOPY Performs a tape copy operation determined by the parameters stored in locations immediately following the call to TCOPY. Uses locations 1000 through 7577 as a buffer. TERMTST Used to check the word terminator encountered by GWFLB. TSTCTC Checks to see if a (CTRL-C) has been typed. Used to terminate various operations at the users "request. " 49

WVTOC Checks the write VTOC switches and writes out the current specified VTOCs (indexes) onto tape. ] IDENTIFY Command Types out the first six locations in each index. ] NUMBER Command Used to number each set of 4K-CPS tapes. Intended for use in keeping records of who has what set of tapes. ] SET Command Used to change the index parameters for the file specified on device 0. Primarily intended to be used on -S and -B. 4K-CPS Loader The loader, *LOAD, is an overlay onto the file system and uses several of the file system utilities. Detailed *LOAD Core Map Page Location Contents 0000-0177 file system.. pointers 0200-0377 file system.. IOC 0400-0577 file system.. IOC 0600-0777 TCOPY, PUTSEG 1000-1177 file system 1200-1377 file system 1400-1577 file system 1600-1777 file system 2000-2177 BUILD command, BLDFLD 2200-2377 GET command, BINARY 2400-2577 COREIM, READIN 2600-2777 GETFRM, GNXLOC, REFTST 3000-3177 TSTCOR, WBUF, DPIPT, OCTTST, REFER 3200-3377 INDEX command, LOCDTA, REPLACE command UNREFERENCE command, UNRF, DPOSIT 50

Page Location Contents 3400-3577 DUMP command, LHEAD, TSTCTC, EXIT command 3600-3777 LDRSTR, LDR 4000-4177 Loader system entry 4200-4377 4400-4577 4600-4777 5000-5177 5200-5377 5400-5577 5600-5777 6000-6177 Start of unit 1 index 6200-6377 6400-6577 6600-6777 7000-7177 7200-7377 End of unit 1 index 7400-7577 SETLOC, SETFLD, MAP command, LOCATE, PRNTADR 7600-7777 System boot 4K-CPS Assembler The assembler furnished with 4K-CPS is a modified version of DEC's MACRO-8 assembler. The following operations have been removed: PAUSE FLTG DUBL The MACRO processor The core is used as follows: 51

Page Locations Contents 0000-3577 MACRO-8 + some interface routines 3600-3777 Input routines 4000-4177 Pass control and tape routine Pass 1 4200-4777 Symbolic input buffer Pass 2 (overlay) 4200-4377 Binary output routines 4400-4577 Binary output buffer 4600- Symbolic input buffer.. max of 4 pages.. min of 1 page. Checks bottom of symbol table Pass 3 (overlay) 4200-4377 Listing control routines 4400-4777 Symbolic input buffer All Passes 5000-7577 Available for symbol table 7600-7777 System boot The assembler buffer management is a little sloppy in that *ASM always completely fills its symbolic input buffers. This can cause problems only if the unit 0 tape does not have the correct checksum in each block (*MARKP8 does not provide the proper checksum). Since the maximum buffer size is 4 blocks and blocks 2000 through 2007 really do exist, no problems would be encountered at the end of a tape. 4K-CPS Symbolic Text Editor The editor supplied with 4K-CPS is an extensively modified version of DEC's editor DIGITAL 8-1-S. The available core is used as follows: Page Locations Contents 0000-1377 Modified editor 1400-1777 Input-output tape routine 2000-7577 Text buffer + starter (used once at start-up) 7600-7777 System boot + tape rewinder 52

A special tape routine is used to load and write out the editor's text buffer. When loading the buffer, the placement of lines and line pointers is automatically done by the tape routine. Similarly, when writing the buffer back out onto tape, the tape routine traces out the scrambled line sequence, deletes the line pointers, writes tape, and provides the terminating 7703 character. The "T" command uses the section of tape starting at block 0200 on unit 0 as a temporary buffer. This command is used to return all unused buffer space to the user (the *ED internal line management leaves something to be desired). The "S" command writes the text buffer starting in block 0240 of unit 0 and returns to the file system with the -S update switches set properly. 53

APPENDIX D This appendix contains descriptions of three 4K-CPS utility programs. *PBIN This program reads binary paper tapes into 4K-CPS from either the LINC ASR-33 or from any remote 8-level Teletype through the data phone. The binary paper tape is read into the binary working area and can be saved in a file by 4K-CPS. Instructions To load and start *PBIN use the command RUN *PBIN The program is self-starting and will type out 4K-CPS PAPER BINARY INPUT PROGRAM When *PBIN is ready to start reading in the binary paper tape, the message START READER will be typed. This is the time to turn on the paper tape reader, not before! The program ignores leader code (200 octal) and also throws away the first character read in. Always start reading the paper tape in the leader section. The program terminates when 1 trailer (also 200 octal) code frame has been read. The binary working area then contains a copy of the information on the paper tape, properly formatted for the 4K-CPS loader. 4K-CPS is automatically reloaded after the comment DONE! is typed. Turn off the paper tape reader when this message appears. 54

Once back in 4K-CPS the binary can be saved using the command SAVE -B FNAME where FNAME is a file name chosen by the user. *TCOPY *TCOPY is a general purpose magnetic tape copying utility program. It can be used to copy blocks of PDP-8 formatted LINC magnetic tapes onto another or the same tape. Instructions The program *TCOPY is loaded and started by the command RUN *TCOPY The following heading is typed 4K-CPS TAPE COPY CTRL-C EXITS RUBOUT RESTARTS The following control options are provided to the user on the input lines. A (CTRL-C) on any line will immediately terminate program execution and will automatically return control of the computer to 4K-CPS (provided the proper 4K-CPS tapes are mounted at the time). A RUBOUT on any line will immediately delete all previously entered data and will cause a return to the first input request. A back-arrow (shift-O) deletes the information entered on the current line. The request is not retyped. Lines should be terminated by a carriage return or a (CTRL-C) or a RUBOUT. The following is a description of the input requests on a line by line basis. These requests are typed by the program and the user must type the appropriate responses. Minimal error checking is done by this program. Be careful! All numbers used below are octal. 55

Request 1 FROM BLOCK= The user should type in the tape block number on the source tape at which the transfer is to start. Inputs on this line must be less than or equal to 3777. Request 2 FROM UNIT= Type in the tape unit upon which the source tape is mounted. Only units 0 and 1 are valid inputs. Request 3 AMOUNT = Type in the octal number of blocks to be transferred. Values of 1 through 7777 are acceptable. (PDP-8 format tapes contain 2000 blocks. ) Request 4 TO BLOCK = Type the starting block number of the sink tape to which the transfer is to be made. This number must be less than or equal to 3777. Request 5 TO UNIT = Type the unit number upon which the sink tape is mounted. Only units 0 and 1 are valid inputs. At this point the program types CR STARTS COPY This is the last chance to back out. *MARKP8 *MARKP8 is a tape marking program which was generated by overlaying the program MARKL8 with a program called XMARK, available from DECUS as DECUS number L-32. XMARK was itself modified so that *MARKP8 will mark tapes with 20008 blocks of 2008 words apiece. *MARKP8 is interactive and is run using the LINC display and the 33ASR keyboard. It may be invoked from 4K-CPS by the command RUN *MARKP8 56

To return to 4K-CPS after marking a tape, be certain that both 4K-CPS system tapes are mounted, and then load address 7600 into the program counter and press START. Note that 4K-CPS tapes must be marked using *MARKP8. The tapes generated by *MARKP8 do NOT have the proper check sum. This can, and has, caused problems. To correct this, use the program *TCOPY (supplied with 4K-CPS) to either copy a good tape onto the one just marked or to copy the tape onto itself. The latter approach is somewhat slower since *TCOPY tries two times to get a good checksum before giving up. It is strongly urged that all newly marked tapes contain the proper checksum. 57

APPENDIX E Introduction This appendix describes the small general purpose I/O control package (IOC) used in 4K-CPS. This package is intended for use on the basic 4-K LINC-8 computer and permits operation of the low-speed reader-printer and magnetic tapes under interrupts. Although this package is a part of the 4K-CPS system, it can also be used for general programming applications. The symbolics for IOC can be found on the 4K-CPS Master Development Tapes stored in the files SIOC1 and SIOC2. Requirements IOC occupies locations 0-2, 20-77, and 200-577. The CEL LINC-8 computer has been modified to allow the clearing of the reader flag without advancing the reader. This was done in order to allow the proper handling of paper tapes when running under interrupts. The required modification can be found in DECUSCOPE, Vol. 6, Nos. 5 and 6 (also Appendix A). This modification is relatively minor and results in the use of device code 13 to clear the reader flag without advancing the reader. This modification is reflected in IOC by the use of a RCC (6132) instruction at location 0224. If it is not possible to make the required hardware modification, then location 0224 may be changed to a KCC (6032). The 6354 instruction at location 0212 can also be removed or NOP'ed (this is a special code used at CEL). Non-Magnetic Tape Operation IOC should be reset before any I/O operations are attempted. This procedure assures the user that all of the internal IOC flags and switches are in their proper state when I/O operations begin. It also causes the PDP-8 interrupt system to be enabled. Resetting is done through a subroutine call JMS I 31 (RESET=JMS I 31) IOC only needs to be reset once at program start-up. 58

The teleprinter I/O routines are not buffered and are divided into two parts, interrupt time and task time. The interrupt time portions are invoked when an interrupt occurs. The proper hardware flag is cleared and the corresponding software flag is set. Control is then returned to the user at the point at which he was interrupted. The task time routines are called by the user to either fetch or type a character. The task time routines are coded the same as "normal" Teletype routines except that software flags are used in place of hardware flags. The subroutine names used in the following illustrative program do not necessarily correspond to those used within IOC. To read a character JMS I 25 (RDRGET=JMS I 25) The associated routine is equivalent to RGET, 0 KSF JMP. -1 KRB JMP I RGET To type a character (PDP-8 AC not cleared) JMS I 23 (PTRPAS=JMS I 23) The associated routine is equivalent to PPAS, 0 TSF JMP. -1 TLS JMP I PPAS To type a character (PDP-8 AC cleared) JMS I 24 (PTRPUT=JMS I 24) The associated routine is equivalent to PPUT, 0 JMS PPAS CLA CLL JMP I PPUT 59

Magnetic Tape Operation The magnetic tape routines in IOC operate under interrupts and use LINC tapes marked with 128 word blocks (plus 1 word for checksum). IOC allows overlapping magnetic tape operations with normal Teletype I/O operations. This feature is used in 4K-CPS to allow the user to enter command lines while the unit i index is being read in. If swing buffers are used, it is possible to accept data continuously from the reader while writing processed input out on magnetic tape. (This is done in the program *PBIN. ) This mode of operation is particularly important when input is being accepted from a Data-Phone since, in this case, the computer cannot exert reader start-stop control. The following calling sequences are used in IOC magnetic tape operation: To read tape JMS I 26 (TREAD=JMS I 26) 4000*UNIT+BLN UNIT=1 or 0 AMOUNT LOCATION To write tape JMS I 27 (TWRITE=JMS I 27) 4000*UNIT+BLN UNIT=0 or 1 AMOUNT LOCATION To wait for the previous tape operation to be completed JMS I 32 (TCLOSE=JMS I 32) If no tape operation is in progress, the return is immediate. The IOC tape routines automatically wait for any previous tape operation to be completed before attempting to start a new operation. Control is returned to the user immediately after the tape routines have been set up to perform the requested operation. The specified operation will not have been completed at this time but will take place behind the user's program. The status of the current tape operation can be checked by the user in two ways. Location 22 (TFLAG) is 0 if the current tape operation has been completed and -1 if it is still in execution. The TCLOSE operation may be performed to cause a wait-state to be 60

entered until the current operation is ended. (This amounts to going into a loop until TFLAG is 0, then exiting. ) The following code could be used to return to 4K-CPS from a user program. TCLOSE IOF JMP 7600 Unless otherwise specified by the user, IOC clears the tape motion bits (MO and M1) at the end of each read-write operation. Because of timing restrictions in the LINC tape hardware, if the IOC tape routines are called and the motion bits are zero, then a 0.05 second delay is provided in order to allow the tape units to settle. This delay can be avoided in two ways. The user can select and start the appropriate tape unit before entering IOC, or he can leave the tapes moving after each tape operation. To select and start the desired tape unit (assuming it is not moving) CLA CLL TAD 4000*UNIT+0002 UNIT=0 or 1 ICON CLA TAD 4000*DIR+0001 DIR=0=FWD, DIR=1=REV To leave the tapes running after an operation make location 44 (TMOTION) nonzero. This location is not reset by IOC. The user may reset location 44 to zero at any time. Once location 44 is reset to 0 the tapes will be properly stopped. The IOC tape routine is moderately "intelligent. " It remembers the last used tape block number and starts the specified tape unit moving in the direction required by the current call. However, because of space limitations, the tape routines do not remember which tape unit was used last. It is felt that the resulting occasional wrong start is better than the tapes always starting in either the forward or reverse direction. If a checksum error is encountered in reading in a tape block, one additional attempt is made to read it properly. (This retry can cause the tapes to "hang up" searching for the block. ) If the second attempt is not successful, the results of this try are left in core and the contents of location 34 (ERRCNT) are incremented by 1. (ERRCNT is cleared by IOC whenever a read or write tape operation is started. ) 61

The following symbol definitions have been found to be useful: TREAD=-4426 TWRITE=4427 TC LOSE=4430 RESET=4431 RDRGET=4425 PTRPUT=4424 PTRPAS=4423 RFLAG=21 PFLAG=20 TFLAG=22 ERRCNT=34 TMOTION=44 62

DISTRIBUTION LIST No. of Copies Office of Naval Research (Code 468) 2 Navy Department Washington, D. C. 20360 Defense Documentation Center 2 Cameron Station Alexandria, Virginia Dr. John Steinberg 5 Institute of Marine Science The University of Miami Miami, Florida 33149 Dr. L. W. Nolte 2 Department of Electrical Engineering Duke University Durham, North Carolina Cooley Electronics Laboratory 39 The University of Michigan Ann Arbor, Michigan 63

Security Classification DOCUMENT CONTROL DATA- R&D (Security claeslicatfon of title, body of abstract and indoexina nnotation must be entered when the overall report i. classilfed) 1. ORIGINATIN G ACTIVITY (Corporate author) Za. REPORT SECURITY C LASSIFICATION Cooley Electronics Laboratory UNCLASSIFIED The University of Michigan 2b GRouP Ann Arbor_ Michigan 3. REPORT TITLE l4K-CPS: A Programming System for the PDP-8 Side of the DEC Linc-8 Computer 4. DESCRIPTIVE NOTES (Typo of report and incluelve datea) Technical Memorandum No. 101 - 03674-21-M November 1969 5. AUTHOR(S) (L.at nanme. firet name, Initial) Cederquist, Gerald Metzger, Kurt 6. REPORT D'ATE 7a. TOTAL NO. OF PAG"ES 7b. NO. OF REPS November 1969 Bea CONTRACT OR GRANT NO. 9. ORIOINATOR'S REPORT NUMEsR(S) Nonr-1224(36) b. PROJECT NO. TM101 c. | ib. OtMyNR R PO0RT NO(S) (A ny other number that may be asign*ed d, | 03674-21-M 10. AVA IL ABILITY/LIMITAtION NOTICES Reproduction in whole or in part is permitted for any purpose of the U. S. Government. 11. SUPPLEMENTARY NOTES 12. SPONSORING MILITARY ACTIVITY Office of Naval Research Department of the Navy Washington, D. C. 20360 13 ABSTRACT The 4K-Cooley Programming System (4K-CPS) is a collection of programs designed to aid in programming the PDP-8 side of Digital Equipment Corporation's LINC-8 computer. This collection of programs consists of a file system, a loader, a symbolic text editor, and an assembler. These programs are structured so that a user can enter, edit, assemble, load and execute programs entirely from the Teletype keyboard. The system architecture is modular, and future components are easily "plugged-in" as needed. DD 14 1473. I Security Classification

UNIVERSI OF MICHIGAN Security Classification I_________ ____1///_/_l/__llllllll___ _1,~~~~~~ ~3 9015 03483 5259Lt A LINK B LINK C KEY WORDS 3 ROLE Wt ROLE WT ROLE WT Digital Computer Programming System PDP-8 LINC -8 INSTRUCTIONS 1. ORIGINATING ACTIVITY: Enter the name and address imposed by security classification, using standard statements of the contractor, subcontractor, grantee, Department of De- such as: fense activity or other organization (corporate author) issuing (1) "Qualified requesters may obtain copies of this the report. report from DDC." 2a. REPORT SECURITY CLASSIFICATION: Enter the over2a. REPORT SECUITY CLASSIFICATION: Enter the. over (2) "Foreign announcement and dissemination of this all security classification of the report. Indicate whether "Restricted Data" is included. Marking is to be in accordance with appropriate security regulations. (3) "U. S. Government agencies may obtain copies of this report directly from DDC. Other qualified DDC 2b. GROUP: Automatic downgrading is specified in DoD Di- users shall request through rective 5200. 10 and Armed Forces Industrial Manual. Enter the group number. Also, when applicable, show that optional markings have been used for Group 3 and Group 4 as author- (4) "U. S. military agencies may obtain copies of this ized. report directly from DDC Other qualified users 3. REPORT TITLE: Enter the complete report title in all shall request through capital letters. Titles in all cases should be unclassified., If a meaningful title cannot be selected without classification, show title classification in all capitals in parenthesis (5) "All distribution of this report is controlled. Qualimmediately following the title. ified DDC users shall request through 4. DESCRIPTIVE NOTES: If appropriate, enter the type of.. report, e.g., interim, progress, summary, annual, or final. If the report has been furnished to the Office of Technical Give the inclusive dates when a specific reporting period is Services, Department of Commerce, for sale to the public, indicovered. cate this fact and enter the price, if known. 5. AUTHOR(S): Enter the name(s) of author(s) as shown on 11. SUPPLEMENTARY NOTES: Use for additional explanaor in the report. Enter last name, first name, middle initial. tory notes. If military, show rank and branch of service. The name of the principal.author is an absolute minimum requirement. 12. SPONSORING MILITARY ACTIVITY: Enter the name of the departmental project office or laboratory sponsoring (pay6. REPORT DATE: Enter the date of the report as day, ing for) the research and development. Include address. month, year; or month, year. If more than one date appears on the report, use date of publication. 13. ABSTRACT: Enter an abstract giving a brief and factual summary of the document indicative of the report, even though 7a. TOTAL NUMBER OF PAGES: The total page count it may also appear elsewhere in the body of the technical reshould follow normal pagination procedures, i.e., enter the port. If additional space is required, a continuation sheet shall number of pages containing information be attached. 7b. NUMBER OF REFERENCES: Enter the total number of W7. NUMBiER OF REFERENCE~S Enter the total number of It is highly desirable that the abstract of classified reports references cited in the.report. be unclassified. Each paragraph of the abstract shall end with 8a. CONTRACT OR GRANT NUMBER: If appropriate, enter an indication of the military security classification of the inthe applicable number of the contract or grant under which formation in the paragraph, represented as (TS), (S), (C). or (U) the report was written. There is no limitation on the length of the abstract. How8b, 8c, & 8d. PROJECT NUMBER: Enter the appropriate ever, the suggested length is from 150 to 225 words. military department identification, such as project number, 14. KEY WORDS: Key words are technically meaningful terms subproject number, system numbers, task number, etc. 14. KEY WORDS: Key words are technically meaningful terms subproject number, system numbers, task number, etc. or short phrases that characterize a report and may be used as 9a. ORIGINATOR'S REPORT NUMBER(S): Enter the offi- index entries for cataloging the report. Key words must be cial report number by which the document will be identified selected so that no security classification is required. Identiand controlled by the originating activity. This number must fiers, such as equipment model designation, trade name, military be unique to this report. project code name, geographic location, may be used as key 9b. OTHER REPORT NUMBER(S): If the report has been words but will be followed by an indication of technical conassigned any other reprt numbers either by text. The assignment of links, rules, and weights is optional or by the sponsor), also enter this number(s). 10. AVAILABILITY/LIMITATION NOTICES: Enter any limitations on further dissemination of the report, other than those Security Classification