TSS-8 User Tutorial
This documents the use of https://tss8.sdf.org
TSS/8 is a timesharing system for the DEC PDP-8 originally designed by Adrian van de Goor, a grad student at CMU and later enhanced and sold as a complete system by DEC in 1968. It originally required a PDP-8, 8I or 8E with an RF08 or DF32 attached to at least one RS08 or a DS32 drive for swapping and filesystem.
Each user gets a virtual PDP-8 with 4KW of memory, and a directory on disk for file storage.
After connecting, you will be at the login “.” prompt. Type
LOGIN <PPN> <PASSWORD>
Substituting your PPN and password. NONE OF THE ABOVE INPUT WILL ECHO – if it does it means you've connected to a session that was not properly logged out – type “LOGOUT” to log out and then try logging in again.
KJOB command will log you out of the system.
K can be used as a shorthand for this. It is important to log out before disconnecting as the system will not automatically log you out.
If for some reason you seem to be stuck, try
CTRL-B S. Further details about what
^B does can be found down below in the Stopping a running program section.
Running a program from the system library or from your directory can be accomplished via the
will run the CATALOG program, displaying the contents of your directory. The currently available programs in the system library are:
DISK FILES FOR USER 0, 2 ON 19-DEC-79 NAME SIZE PROT DATE PALD .SAV 16 12 31-MAR-76 - PAL Assembler LOADER.SAV 4 12 31-MAR-76 - Binary loader FORT .SAV 6 12 31-MAR-76 - FORTRAN II FOSL .SAV 6 12 31-MAR-76 - FORTRAN system PIP .SAV 10 12 31-MAR-76 - Peripheral Interchange Program SYSTAT.SAV 5 12 31-MAR-76 - Displays system status EDIT .SAV 8 12 31-MAR-76 - Line-oriented text editor FOCAL .SAV 16 12 31-MAR-76 - FOCAL language interpreter BASIC .SAV 38 12 31-MAR-76 - BASIC language interpreter CAT .SAV 6 12 31-MAR-76 - Disk catalog PUTR .SAV 21 12 3-FEB-84 - File transfer utility ODTHI .SAV 2 12 29-FEB-84 - ODT debugger FLAP .SAV 1 12 7-APR-84 - Absolute assembler PTLOAD.SAV 1 12 29-APR-84 - Paper tape loader CHESS .SAV 17 12 11-NOV-74 - CHEKMO II chess program ALGOL .SAV 32 12 21-NOV-79 - TSS/8 ALGOL (DECUS 8-330) ACTUNG.SAV 5 12 21-NOV-79 - Prints a cute message
Stopping a running program
CTRL-B indicates to the system that you want send a command to the
Monitor. Once you hit Ctrl-B, the following input will be sent to the monitor and executed. To stop any program while it is running, Type
CTRL-B followed by
S and Carriage return.
S is the monitor's STOP command, sending it will cause the currently executing program to stop. The program can be restarted from the monitor with the
Talking to other users
TALK program can be used to send messages to other terminals. Use
SYSTAT to see what other users are logged onto the system, e.g.:
.SYSTAT STATUS OF TSS/8.24 DEC PDP-8 #1 AT 12:47:30 ON 19 DEC 79 UPTIME 19:06:31 JOB WHO WHERE WHAT STATUS RUNTIME 1 10, 0 K00 BASIC KEY ^Q 00:00:04 2 10, 0 K01 SYSTAT ^BS ^Q 00:00:00 4 10, 0 K04 HI ^BS ^Q 00:00:00 5 0, 2 K06 CAT ^BS ^Q 00:00:00 6 0, 1 K07 SYSTAT RUN ^Q 00:00:00 AVAILABLE CORE 4K FREE CORE=252 BUSY DEVICES NONE 3269 FREE DISK SEGMENTS
The “WHERE” column shows the console (K00 through K07) the user is logged into. To send a message to a specific console, type:
TALK <CONSOLE #> <YOUR MESSAGE HERE>
So for example,
TALK 2 HEY, CHECK OUT THIS COOL PROGRAM I WROTE
Sends a friendly message to console K02.
The Edusystem-50 manual provides fairly accurate documentation for the version of TSS/8.24 running at LCM+L, and is available at http://bitsavers.org/pdf/dec/pdp8/tss8/DEC-08-E50UA-A-D_UG_Aug75.pdf. It covers user-related activities on the system and covers using the PAL-D assembler, BASIC, FOCAL and numerous utilities.
Detailed documentation for BASIC is available at http://bitsavers.org/pdf/dec/pdp8/tss8/DEC-T8-KJZA-D-TSS-8_BASIC_8_Programming_Manual_Mar1969.pdf.
ALGOL documentation can be found at http://svn.so-much-stuff.com/svn/trunk/pdp8/src/decus/8-213/decus-8-213.pdf with http://www.bitsavers.org/pdf/dec/decus/pdp8/8-330_tss8_ALGOL.pdf covering the TSS/8-specific changes.
LISP is documented at http://svn.so-much-stuff.com/svn/trunk/pdp8/src/decus/8-102a/decus-8-102A.pdf
Logging in Login using the following command:
LOGIN USERNAME PASSWORD The login command does not display or echo.
We cover more on user management later on in the article, including how to create and modify users.
To login as user 1, the system user enter this:
TSS/8.24 JOB 01 [01,10] K00 12:12:36 SYSTEM IS DOWN, INC.
Primitive ls, CAT (catalog) TSS/8 Monitor maintains a library of disk files for each user. The System Library Program CAT is used to obtain a catalog of the contents of this library. For each file, CAT types the size of the File in units of disk segments. The size of a disk segment may vary among installations. Generally, it is 256 (decimal) words of disk storage. The protection code for the file is also given. (See the section on the PROTECT Monitor command (Chapter 9 of the manual) for a precise explanation of protection codes.) If the program was created by any of the System Library Programs, it has a protection code of l2, meaning that other users can read the File, but only the owner can change it.
When the CAT program is used by the SYSTEM ADMINISTRATOR (user 1), it prints out accounting information. This report consists out of the accumulated time (in hours, minutes and seconds) for central processor usage and connect time as well as the number of disk segments currently being used.
To see the contents of a users library, run the .R CAT:L command. It will ask for an account number, after which it prints out the users directory. This way you can trace which user is using an abnormal amount of diskspace.
If you login as the user 2, you can execute the following command to see the contents of the disk:
.R CAT Output: DISK FILES FOR USER 0, 2 ON 1-JAN-75 NAME SIZE PROT DATE PALD .SAV 16 12 31-MAR-76 LOADER.SAV 4 12 31-MAR-76 FORT .SAV 6 12 31-MAR-76 FOSL .SAV 6 12 31-MAR-76 PIP .SAV 10 12 31-MAR-76 TSTLPT.SAV 2 12 31-MAR-76 LOGOUT.SAV 6 12 31-MAR-76 SYSTAT.SAV 5 12 31-MAR-76 EDIT .SAV 8 12 31-MAR-76 FOCAL .SAV 16 12 31-MAR-76 BASIC .SAV 38 12 31-MAR-76 COPY .SAV 10 12 31-MAR-76 CAT .SAV 6 12 31-MAR-76 GRIPE .SAV 5 12 31-MAR-76 LOGID .SAV 4 12 31-MAR-76 PUTR .SAV 21 12 3-FEB-84 ODTHI .SAV 2 12 29-FEB-84 FLAP .SAV 1 12 7-APR-84 PTLOAD.SAV 1 12 29-APR-84 BLANK .SAV 1 12 9-JUN-84 DTTEST.SAV 2 12 26-JUN-84 INIT .SAV 17 12 29-JUL-84 BAS000.TMP 1 17 1-JAN-84 BAS100.TMP 1 17 1-JAN-84 INTER .BAS 1 12 1-JAN-75 REMY .ASC 1 12 1-JAN-75 TOTAL DISK SEGMENTS: 189 QUOTA: 1575
System Status With the SYSTAT command you get a full printout of what the system is doing, who is logged in and more:
SYSTAT STATUS OF TSS/8.24 DEC PDP-8 #1 AT 12:19:14 ON 1 JAN 75 UPTIME 00:07:14 JOB WHO WHERE WHAT STATUS RUNTIME 1 0, 2 K00 FOCAL ^BS ^Q 00:00:01 2 1,50 K01 SYSTAT RUN ^Q 00:00:00 AVAILABLE CORE 16K FREE CORE=312 BUSY DEVICES NONE 103 FREE DISK SEGMENTS
There are two users logged in, user 2 on teletype 0, user 50 on teletype 1. User 2 is was FOCAL but is now on the prompt (STATUS ^BS means monitor mode, that is the prompt), user 50 is executing the SYSTAT command.
The manual has more information on SYSTAT, listed here for convenience.
It is frequently useful to know the status of the system as a whole; how many users are online, where they are, what they are doing, etc. The SYSTAT program provides this capability.
SYSTAT responds by printing on the first line: the version of the TSS/8 Monitor being run, the time, and the date. SYSTAT reports the uptime which is the length of time in hours, minutes, and seconds since the system was last put online.
SYSTAT lists all online users. Each user is identified by his account number. The job number assigned to him and the number of the console he is using are indicated, as is the particular System Program he is running. The exact running state of each user, whether he is actually running (RUN), typing in (KEY) or out (TTY), doing input/output on another system device (IO or FIP), or not running (iB), is indicated.
The amount of computer time used by each user since he logged in is given.
It more users are online than the system has core Fields to hold them, the Fact that the system is swapping is reported. The number of Free core blocks used internally by TSS/8 Monitor for Teletype buffering and various other purposes is typed out.
Then SYSTAT reports any unavailable devices, i.e. , devices which are assigned to individual users. The job to which they are attached and their status (AS if they are assigned but not active, AS+INIT if they are assigned and active) is also indicated.
Finally, the number of available segments of disk storage is reported.
To see the time that you have been logged in:
To see the system time:
.TIME 0 12:20:44
FOCAL69 You can start up the FOCAL69 programming environment with the R FOCAL command, output below:
.R FOCAL SHALL I RETAIN LOG, EXP, ATN ?:NO SHALL I RETAIN SINE, COSINE ?:NO PROCEED. *_TYPE "HELLO WORLD" HELLO WORLD* To exit FOCAL, press CTRL+B followed by the S. Your prompt will be back to a dot (.): *^BS .
Chatting You can use the TALK command to talk to other users logged in. Fire up TELNET on port 4000 on a terminal or two and login with the users 2, and 1,50 (password JERK). On the 1,50 terminal, enter the following command to talk to the system administrator (on teletype 0):
.TALK 0 PLEASE HELP ME!!!
On the 2 telnet session you will see this:
** K01 [01,50] ** PLEASE HELP ME!!!
You can talk back:
.TALK 1 WHATS UP DOC? Telnet 1,50 will see this: ** K00 [00,02] ** WHATS UP DOC?
BASIC-8 TSS/8 has a BASIC programming environment. Start it up with the R BASIC command. It will ask you if you want to create a NEW file or load an OLD one.
Here's an example program, from the TSS/8 manual, to calculate loan interest. We first enter a line number, then the instruction. Afterwards we save the file as INTER.BAS with the SAVE command. We then run the script with the RUN command.
.R BASIC NEW OR OLD--NEW NEW PROGRAM NAME--INTER READY 10 REM - PROGRAM TO COMPUTE INTEREST ON A LOAD 20 PRINT "INTEREST IN PERCENT"; 30 INPUT J 40 LET J=J/100 50 PRINT "AMOUNT OF LOAN"; 60 INPUT A 70 PRINT "NUMBER OF YEARS"; 80 INPUT N 90 print "NUMBER OF PAYMENTS PER YEAR"; 100 INPUT M 110 LET N=N*M 120 LET I=J/M 130 LET B=1+I 140 LET R = A*I/(1-1/B^N) 150 PRINT "MONTHLY PAYMENT ="R 160 PRINT "TOTAL INTEREST ="R*N-A 170 END SAVE INTER RUN INTEREST IN PERCENT? 8 AMOUNT OF LOAN? 25000 NUMBER OF YEARS? 20 NUMBER OF PAYMENTS PER YEAR? 12 MONTHLY PAYMENT = 209.1103 TOTAL INTEREST = 25186.46 READY
|BYE||Exit back to the TSS/8 Monitor|
|CAT||Catalogue of files on disk|
|DELETE n||Delete line number n|
|DELETE n1,n2||Delete line numbers n1 through n2|
|LIST||List the current program|
|LIST n||List a specific line number|
|NEW||BASIC will ask for a new program name|
|OLD||BASIC will ask for an old program name currently saved on disk and load it into memory|
|RUN||Compile and run the program currently in memory|
|SAVE||Save the contents of memory to disk using the current name|
|SAVE [name]||Save the contents of memory to disk using the give name|
|UNSAVE||Delete the program with the current name on disk (required before saving a new version with the same name)|
|UNSAVE [name]||Delete the program with [name] from the disk (does not affect the program in memory)|
|CTRL-B S||Stop the running program (CTRL-B then press the 'S' key)|
EDIT, the line editor TSS/8 Editor provides the user with a powerful tool for creating and modifying source files on-line. EDIT allows the user to insert, change and append lines of text; and then obtain a clean listing of the updated file. EDIT also contains commands for searching the file for a given character.
Page 56, 6-1, DEC TSS/8 User guide EDIT considers a file to be divided into logical units, called pages. A page of text is geranlly 50-60 lines long, and hence corresponds to a physical page of program listing. A FORTRAN-D program is generally 1-3 pages in length; a program prepared for PAL-D (the assembler) may be several pages in length. EDIT operates on one page of text at a time, allowing the user to relate his editing to the physical pages of his listing. EDIT reads a page of text from the input file into its internal buffer where the page becomes available for editing. When a page has been completely updated, it is written onto the output file and the next page of input is made available. EDIT provides several powerful commands for “paging” through the source file quickly and conveniently.
The end of a page of text is marked by a form feed (CTRL+L) character. Form feed is ignored by all TSS/8 language processors.
Here is the EDIT Command summary table from the manual.
|READ||R||Read text from the input file and append to buffer until a form feed is encountered.|
|APPEND||A||Append incoming text from keyboard to any already in buffer until a form feed is encountered.|
|m,nL||List the entire buffer.|
|List||lines m through n inclusive.|
|n,mP||Output the contents of the buffer to the output file, followed by a form feed.|
|Output||line n, followed by a form feed.|
|Output||lines m through n inclusive followed by a form feed.|
|TERMINATE||T||Close out the output file and return to TSS/8 Monitor.|
|nN||Output the entire buffer and a form feed, kill the buffer and read the next page. Repeat the above sequence n times.|
|n,mD||Delete line n of the text. Delete lines m through n inclusive.|
|nI||Insert before line 1 all the text from the keyboarduntil a form feed is entered. Insert before line n until a form feed is entered.|
|m,nC||Delete line n, replace it with any number of lines from the keyboard until a form feed is entered. Delete|
|lines m through n, replace from keyboard as above until form feed is entered.|
|MOVE||m,n$kM||Move lines m through n inclusive to before line k.|
|GET||G||Get and list the next line beginning with a tag.|
|m,nS||Search the entire buffer for the character specified (but not echoed) after the carriage return. Allow|
|Search||line n, as above, allow modification.|
|END||E||Output the contents of the buffer. Read in any pages remaining in the input file, outputting them to the|
|output file. When everythingin the input file has been moved to the output file, close it out and retum to the TSS/8 Monitor.|
|E||is equivalent to a sufficient number of N's followed by a T command.|
|C||CTRL+C||Stop listing and return to Command Mode.|
Using the I command you can enter text, with a CTRL+L you exit insert mode. Save your file with E.