This is a text-only version of the following page on https://raymii.org:
---
Title       :   Running TSS/8 on the DEC PiDP-8/i and SIMH
Author      :   Remy van Elst
Date        :   26-07-2015
URL         :   https://raymii.org/s/articles/Running_TSS_8_on_the_DEC_PiDP-8_i_and_SIMH.html
Format      :   Markdown/HTML
---



In this guide I'll show you how run the TSS/8 operating system on the PiDP
replica by Oscar Vermeulen, and on SIMH on any other computer. I'll also cover a
few basic commands like the editor, user management and system information.

<p class="ad"> <b>Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below:</b><br><br> <a href="https://leafnode.nl">I'm developing an open source monitoring app called  Leaf Node Monitoring, for windows, linux & android. Go check it out!</a><br><br> <a href="https://github.com/sponsors/RaymiiOrg/">Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.</a><br><br> <a href="https://www.digitalocean.com/?refcode=7435ae6b8212">You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $100 credit for 60 days. </a><br><br> </p>


TSS-8 was a little time-sharing operating system released in 1968 and requires a
minimum of 12K words of memory and a swapping device; on a 24K word machine, it
supports up to 17 users. Each user gets a virtual 4K PDP-8; many of the
utilities users ran on these virtual machines were only slightly modified
versions of utilities from the Disk Monitor System or paper-tape environments.
Internally, TSS-8 consists of RMON, the resident monitor, DMON, the disk monitor
(file system), and KMON, the keyboard monitor (command shell). BASIC was well
supported, while restricted (4K) versions of FORTRAN D and Algol were available

### Introduction

[![pidp-8][2]][2]

 * The [PiDP-8/i remake by Oscar Vermeulen][3].

I've recently accuired a PDP-8 remake, the [PiDP-8/i by Oscar Vermeulen][3].
This beautiful piece of hand made hardware uses a Raspberry Pi to emulate a
PDP-8 with SIMH. The front panel actually works, you can use the switched to
load paper tapes, the RIM and BIN loader and all the other legacy goodness. It
is a bit smaller than a real PDP-8, it is scale 2:3. The real PDP-8 has 1.5 cm
switched, the PiDP-8 has 1.0 cm switches.

I have an interest in legacy systems like the PDP-11, VAX/VMS and other
mainframes and minicomputers. The PiDP-8/i allows me to have a small piece of
this legacy myself. It also motivated me to learn more about the PDP-8 and it's
hard and software. It also inspired me to write this article about it. Since
these systems are way older than me, emulation and recreation are the only way
for me to use them, sadly.

I really encourage you to check out the PiDP-8. Order one as well, you can
either get a kit to construct yourself, or order an assembled version. Support
this beautiful piece of work!

SIMH is an emulator which not only emulates a PDP-8, but a lot more older
mainframes and minicomputers. See the [website][4] for more information about
SIMH.

This guide shows you how to run the TSS/8 operating system on the PiDP-8/i
remake, and on a regular SIMH emulator. We will use Ubuntu 14.04 as our host
operating system, but any OS that runs SIMH will do.

[If you like this article, consider sponsoring me by trying out a Digital Ocean
VPS. With this link you'll get a $5 VPS for 2 months free (as in, you get $10
credit). (referral link)][1]

You can see all my PDP-8 [related articles here][5].

The official TSS/8 Users Guide manual can be downloaded online from [here][6],
and I've [mirrored it on this website as well][7].

The official Systems Managers guide can be found [here][8] and is mirrored [on
this website here][9]

You can read through the two guides to find out everything on TSS/8, including
loading tapes, assembler programming and more. This guide focusses on getting
you up and running with TSS/8.

### Preparing the PiDP-8/i

If you use the default software with the PiDP-8/i from Oscar you can set the IF
switches to octal 1 and toggle the Single Step switch to boot into TSS/8. The IF
switches are the leftmost white switches. The DF (Data Field) switches can be
used to mount USB sticks as different storage media. The DF switches are the
leftmost brown switches. See the image below:

![pidp][10]

Boot up the PiDP-8/i and hit the middle white switch. Toggle the single step
counter, the OS/8 will reboot to TSS/8.

Make sure you are logged in via SSH or the serial console, and connected to the
screen session.

If you receive an error message, check the `/opt/pidp8/bootscripts/2.script`
file. Make sure it is the same as the below SIMH config file.

### Installing and configuring SIMH

If you have a PiDP-8/i and want to run from there, skip this section. If you
don't and use your regular computer, read on to set up SIMH.

First create a folder where you will store the disk image and the configuration
files, and go in that folder:



   mkdir pdp8
   cd pdp8


Ubuntu, and many other operating systems, have packages available for SIMH. We
can use the built in package manager to install simh:



   apt-get install simh


If your distro doesn't have simh, see their website for installation
instructions.

Download the prepared disk image and loader:



   wget https://raymii.org/s/inc/downloads/pdp/tss8_init.bin
   wget https://raymii.org/s/inc/downloads/pdp/tss8_rf.dsk


To make the start up proces easier you can set up an 'pdp8.ini' file with a few
commands in it. SIMH will load and run these commands at startup if you execute
the `pdp8` command.

Our `pdp8.ini` file has the following in it:



   load tss8_init.bin
   set rf enabled
   set df disabled
   attach rf tss8_rf.dsk
   attach ttix 4000
   run 24200


It first loads the paper tape bootstrap. It mounts the TSS/8 disk image of the
RF08 and it assigns a TCP/IP port to the Telnet listener for the extra
terminals. It then runs the bootstrap.

Do note that you don't need to create this file, you can also enter these
commands manually at the simh prompt.

In the current folder, execute the following command to start up SIMH with our
configuration file:



   pdp8


### Running TSS/8

If all goes well, you should see something like below on the screen, PiDP-8/i
output:



   Rebooting /opt/pidp8/bootscripts/2.script


   HALT instruction, PC: 20512 (JMP 511)
   RX: writing buffer to file
   RX: buffering file in memory
   Listening on port 4000 (socket 7)

   LOAD, DUMP, START, ETC?


Type START followed by ENTER to begin the boot process of TSS/8.

You will be asked for a date and time:



   MONTH-DAY-YEAR: mm:dd:yy    -- numeric, yy in range [74:85]
   HR:MIN - hh:mm          -- numeric, 24 hour format


Enter for example `02:24:75` and `22:10`. Then type `cr` to continue to the
login prompt.

### Logging in

Login using the following command:



   LOGIN USERNAME PASSWORD


The login command does not display or echo.

The list of accounts and passwords in this specific image:



    PPN  Password
   [0,1]   VH3M
   [0,2]   LXHE
   [0,3]   SHUG
   [77,77]
   [1,10]  WBCN
   [20,1]  DT
   [20,2]  PT
   [20,3]  TSS8
   [20,4]  EDIT
   [20,5]  4TH
   [1,50]  JERK


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:



   LOGIN 1 VH3M


To login as user 1,10, (project 1, user 10) enter this:



   LOGIN 1,10 WBCN


You will receive the following prompt after logging in:



   .
   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 convinience.

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:



   .TIME
   00:00:20


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


On the `2` telnet session you will see this:



   ** K01  [01,50] **
    PLEASE HELP


You can talk back:



   .TALK 1 WHATS UP DOG


Telnet `1,50` will see this:



   ** K00  [00,02] **
    WHATS UP DOG


As the system administror (user 1) you can also send a message to all users at
one with the `BROADCAST` command. The following command:



   .BROADCAST THE SYSTEM WILL SHTUDOWN IN 5 MINUTES


Will result in the following messages on all terminals (they are interupted):



   *** THE SYSTEM WILL SHTUDOWN IN 5 MINUTES


### 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


Output:



   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


Exit BASIC with the `BYE` command.

### 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.

Command | Format(s) | Meaning
\---|---|---
READ | R | Read text from the input file and append to buffer until a formfeed
is encountered.
APPEND | A | Append incoming text from keyboard to any already in buffer untila
form feed is encountered.
LIST | L
nL
m,nL | List the entire buffer.
List line n.
List lines m through n inclusive.
PROCEED | P
nP
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.
NEXT | N
nN | Output the entire buffer and a form feed, kill the buffer and read the next
page.
Repeat the above sequence n times.
KILL | nD
n,mD | Delete line n of the text.
Delete lines m through n inclusive.
INSERT | I
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.
CHANGE | nC
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.
SEARCH | S

nS
m,nS | Search the entire buffer for the character specified (but not echoed)
after the carriage return. Allow modification when found. TSS/8Editor outputs a
slash (/) before beginning a SEARCH.

Search line n, as above, allow modification.
Search lines m through n inclusive, 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.

You can download the two pages from the manual PDF as well [from here][11].

Using the `I` command you can enter text, with a `CTRL+L` you exit insert mode.
Save your file with `E`.

### User management

Above in the article there was a list of users for this image. Here below we
cover the users, projects and permissions in more detail.

The account number is actually two numbers, a project number and a programmer
number. Account number 5440 is project number 54 and programmer number 40.
Account number 102 is project 1, programmer 2. For this reason, account numbers
may be specified as two numbers seperated by comma's (i.e. 1,2), as wel as a
single number (102). Users may specify that all other user may share their
files, only users whose project number is the same, or no users at all.

The library account number (2 or 0,2) is no different from any other account
number. Users logged in as account number 2 may use TSS/8 just as any other user
would. The one thing that makes it special is that the R command automatically
fetches the specified program from the library of account number 2. In this way
users may get programs from this library without knowing specifically its
account number. The reason the library password is kept secret is to prevent
users other than the system manager from altering its contents.

The system account number (1 or 0,1) is privileged. When logged in with this
account number and, password, the user has access to several unique
capabilities, such as defining new passwords. It is, therefore, quite important
that the system password remain secret.

`LOGID` is the program used to create new account number, password combinations.
It is only usable by a user logged in with the system password. Therefore, the
next step in the system building process is to log in with this password (the
account number is 1).

LOGID is then called by typing:



   .R LOGID


LOGID prints opening instructions, then an asterisk, and waits for you to
specify the user's account number and password separated by a space. As usual,
terminate the line with the RETURN key. After entering the combination, LOGID
prints an asterisk and waits for another user account number-password
combination.

When all desired users and passwords have been defined, type `CTRL+B` and then
`S`. Complete the process by logging out with the `LOGOUT` command followed by
RETURN.

To delete (close) a user, open the `LOGID` program like above, and enter the
username and password (can be any password), followed by the `ESC` key (ALT
mode). The account number and all the files will be deleted, LOGID will print
DELETED and another asterisk.

### Conclusion

This concludes my overview of TSS/8. You are now able to edit files and users,
gather some system information and run BASIC programs. This should get you
started with the system and allow you to explore it more yourself.

The two manuals cover way more on the system, like a full assembler, FORTRAN and
BASIC programming guide, and all aspects of interacting with peripherals like
disks, tape readers and teletypes. They both are quite an interesting read.

  [1]: https://www.digitalocean.com/?refcode=7435ae6b8212
  [2]: https://raymii.org/s/inc/img/pidp-8-i.jpg
  [3]: http://obsolescence.wix.com/obsolescence#!pidp-8/cbie
  [4]: http://simh.trailing-edge.com/
  [5]: https://raymii.org/s/tags/pdp.html
  [6]: http://bitsavers.trailing-edge.com/pdf/dec/pdp8/tss8/DEC-T8-MRFB-D_UserGde_Feb70.pdf
  [7]: https://raymii.org/s/inc/downloads/pdp/DEC-T8-MRFB-D_UserGde_Feb70.pdf
  [8]: http://www.textfiles.com/bitsavers/pdf/dec/pdp8/tss8/TSS8MgrsGuide.pdf
  [9]: https://raymii.org/s/inc/downloads/pdp/TSS8MgrsGuide.pdf
  [10]: https://raymii.org/s/inc/img/pidp-panel_funcs.png
  [11]: https://raymii.org/s/inc/downloads/pdp/tss-8-edit.pdf

---

License:
All the text on this website is free as in freedom unless stated otherwise.
This means you can use it in any way you want, you can copy it, change it
the way you like and republish it, as long as you release the (modified)
content under the same license to give others the same freedoms you've got
and place my name and a link to this site with the article as source.

This site uses Google Analytics for statistics and Google Adwords for
advertisements. You are tracked and Google knows everything about you.
Use an adblocker like ublock-origin if you don't want it.

All the code on this website is licensed under the GNU GPL v3 license
unless already licensed under a license which does not allows this form
of licensing or if another license is stated on that page / in that software:

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.

Just to be clear, the information on this website is for meant for educational
purposes and you use it at your own risk. I do not take responsibility if you
screw something up. Use common sense, do not 'rm -rf /' as root for example.
If you have any questions then do not hesitate to contact me.

See https://raymii.org/s/static/About.html for details.