ITS wiki

The Incompatible Timesharing System

User Tools

Site Tools


Some notes on setting up an ITS system

2021: The stuff below is old (but most of it probably still applies). You should use the Github repository as a primary source of code and information.

These are some brief notes on setting up an ITS system based on klh10 and the PI (Public ITS) distribution.

These pages were initially written by Björn Victor (so that's who most references to “I” or “me” indicate). I work on it very occasionally, but it may help some people along the way. No, I'm not an ITS wizard, just an old TOPS-20 hacker. Any comments, corrections, or suggestions for improvements are very welcome!

Keep a copy of .INFO.;DDTORD > within arms reach at any point (or read it here). Read .../doc/ksits.txt (but see below) and .../run/ksits/pubits/doc/distrib.its carefully. The ITS Reference Manual is also worth reading, at some point.

See also my Luser's Guide to ITS, and the ITS Primer by V. Ellen Golden, and Getting Started Computing at the AI Lab (especially chapter 6), and the DDT Primer and Reference Manual. In the not-so-related-but-still-fun department, HAKMEM, especially the “Programming Hacks” section. On the historical side, see also A Guide to ITS Operations - Useful Spells And Incantations by Christopher C. Stacy.

Making klh10

  1. Use the latest klh10. The original at trailing-edge lacks a lot of things. The Panda version has almost all you need - and includes a full TOPS-20 distribution. You can find the PI “starter ITS filesystem” here, and the “AI and MC archives” hidden in here.
  2. If you run gcc version 4 (or later?) you will NEED to apply a patch to the file src/kn10def.h - download it here (patch found by Roch Kusiak, see here).
  3. Follow the instructions which came with your klh10.

To get it running decently

  1. Run MD instead of PI. Instead of using PI, as suggested in …/doc/ksits.txt, use MD. I.e., use klh10-md.ini instead of klh10-pi.ini.
    Using PI gives a system that runs, but many many programs don't know the PI machine, so you'll typically get .VALUE 0 breakpoints when running INQUIR, LISP etc. MD is more “well-known” (except to COMPLR), so you'll get a system which is easier to use. After getting everything running, you may want to consider renaming your system to something more unique.
  2. Get networking up. Since the console gets random typeouts from the system (it is intended as a paper console logging what's happening to the system), it's a good idea to use the system over Telnet or Supdup.
    • If you run Linux, you may be interested in a patch to support the tun/tap device in Linux (e.g the patch by MMcM); at least this gives you local access, which is all you dare before you get PWORD/PANDA running. Note that this is not included in klh10-2.0h (the Panda version, see above).
    • You can try my iptables script to set up restricted external access (and forwarding of the Supdup port from the host to ITS). No guarantees it'll work in your setup. (See also my notes for Raspberry pi setup.)
    • You may also be interested in my patched Supdup client for Linux.
    • If you want to use features like the SAIL character set, Ctrl+8 etc, you may want to try a Supdup client in Java.

Minor caveats

  • Check that DEVICE;JOBDEV DIRMD exists and is a link to DEVICE;ATSIGN DIRDEV, otherwise Dired in Emacs won't work (unless you do 0m.vDIRED use DIR device$ in your emacs init file). To create the link, use the :LINK command.
  • Putting 223fs Help Char$ in your Emacs init file may help, since the default help char is Top+H, and you probably don't have a Top key on your keyboard… (223 is ^_ (which you have to type twice, by the way, see Info node (ITSTTY)A/5.))
  • Set up mail aliases. It's probably a good idea to edit .MAIL.;NAMES >, basically replacing KLH with your own uname, and replacing @NX with @MD and *NX with *MD
  • Greetings.
    1. The file SYS;NET MAIL is printed when people connect from the network. Unfortunately this output is erased when Supdup clears the screen immediately after.
    2. Maybe SYS;SYSTEM MAIL is a better place for greetings, since it's printed after the version/fair share message. (The file SYS;LOCAL MAIL is shown to non-network/dialup connections.)
    3. The standard contents of SYS;NET MAIL points at HACK;PI NEWS, which you'll like to update.
  • INQUIR will still not work if you started from a PI image. If you get the following error
    A bug in INQUIR has been encountered.
    This should never happen.
    Please send a message explaining the circumstances leading to this
    to Bug-INQUIR@MIT-MC.   Thank you.

    then your problem is probably a broken LISP; directory in the PI distribution disk. To fix:

    1. Fetch the LISP directory from the AI archive here.
    2. Unpack it with tar zxf lisp.tgz.
    3. Make an ITS tape from the new lisp directory using ITStar (local copy here, doc here, text format):
      itstar -cf lisp.tap lisp
    4. Mount it as a tape:
      1. Press ^\ (to get a klh10 prompt)
      2. devmount mta0 lisp.tap (where lisp.tap is the file created by itstar)
      3. cont (to continue klh10)
      4. :DUMP (if you get a warning message, press ^Z, type :sl ⟨ENTER⟩, then wrong/0 ⟨ENTER⟩ and $P)
      5. reload crdir links sorry (answer y if asked)
      6. quit (when done)
    5. You now have a fresh LISP directory, and INQUIR will work again.

Setting up COMSAT

In addition to setting up mailing lists, you'll need to set up COMSAT (the mailer demon) properly.

  1. As mentioned in distrib.its, you need to set BUGHST, DOMGAT and TCPGAT. BUGHST is most likely the local IP address ( for MD), the others are most likely your klh10 gwaddr ( for MD).
  2. Put your IP addresses in the appropriate locations of .MAIL.;COMSAT BIN, set DEBUG/ 0 and XVERS/ 0, and start at PURIFY.
  3. To type in an address like, say

    to DDT. Note the “.” (to make decimal numbers) and that $ is Escape.

I have some notes on my external email setup - YMMV (certainly).

You may also want to get the DNS resolver going (DOMAIN: device + resolver library). I will document this “soon”.



  1. Mount a tape: give klh10 the command devmount mta0 tapefile rw (where tapefile is a new file), and continue.
  2. To see which tape number to use (if you are disciplined about tape use), issue the TAPES command, specifying TTY: as the LIST DEV(ice).
    1. Full backup: give DUMP the command DUMP FULL LINKS, followed by REWIND, and ICHECK to check tape contents and set dumped bit on checked files.
    2. Incremental backup: DUMP INCREM LINKS (checks and sets bits)
  3. Backup done: QUIT
  4. Done: give klh10 the command devunmount mta0


  1. Mount the tape: devmount mta0 tapefile, and continue
  2. Restore: give DUMP the command RELOAD LINKS CRDIR SORRY
  3. Dismount tape: devunmount mta0

Setting up PANDA/PWORD

PWORD is a replacement for HACTRN which doesn't let you log in as anyone without a password (except on the console and local terminals). PANDA is the administrative tool to set passwords, accept account applications, etc.

  1. Set the master password for PANDA.
    $l sysbin;panda bin
    ttyhak+7/ CAME T,SPWORD .$b

    Now type in a password. When you hit the breakpoint, its encrypted form is in T. Copy it (573037415503 in the example below), and then set it in the real copy:

    t[ 573037415503
    $l sysbin;panda bin     (re-load a pure copy)
    spword/ 573037415503
    :pdump sysbin;panda bin 

    To make it easy to run, make a link to it in SYS;TS PANDA (so you can run it by :panda).

  2. Create ACOUNT; which is needed for account applications etc.
  3. Add mail aliases for ACCOUNTS-NOTIFICATION, USER-ACCOUNTS, ACCOUNTS-HELD-REFUSED, USER-ACCOUNTS-ARCHIVE, PASSWORD-SYSTEM, and BUGGY-PWORD (see above). If you expect account applications, read the mail coming to these addresses…
  4. Make PWORD the replacement for HACTRN.
    You may want to start by setting a password for your uname:
    set uname -pw     (where uname is your uname)
    Is this OK? (Y or N) Y
    Enter new password.
    Password: f00

    Now just make a link to SYS;ATSIGN PWORD in SYS;ATSIGN HACTRN (not the other way!) and you're done. To change your password later, use :login uname -pw.
    Note that logging in on the console never requires a password.


To do

Finish moving stuff from the old web pages to this Wiki.

If you know how to do these things, please let me know:

  1. DONE through the Github repo: Get all the sources missing from the PI distribution (and from Alan's archive). It seems some EMACS sources are missing too (e.g. PURIFY). (The sources of :DATE aren't among PI, AI or MC sources, but Paul Svensson has them.)
  2. The “Fair share” is very wrong. The “host” device (idling the kn10 process in the null job) seems to be the root of this. There is very little idle/lost time on an ITS system under klh10 with the host device+patch. If this is disabled, the fair share and idle time works better. See also notes here.


In the movie Swordfish (Jackman, Travolta, Berry), the hacker played by Jackman connects to an ITS system in the basement of Caltech to retrieve his worm. In the script, the ITS machine is at MIT, which is surprisingly well written by the author, Skip Woods. Would anyone know how he would know about ITS? Would anyone have a guess why the machine was moved to Caltech in the movie?

setup.txt · Last modified: 2021-07-19 12:34 by victor