WAITS: A quick tour using simh

In this post I will show how to get the 1974 snapshot of WAITS running using the simh emulator. We'll use the command line on the console, run a AI program from 50 years ago, write a short program and use the display terminal for some vector graphics.

/images/waits/waits-simh.png Running WAITS on simh. Source: Rupert Lane. License: CC0.

The quick start repo

I have put together a repo on Github that uses Richard Cornwell's KA PDP-10 simh emulator along with a ready-to-use disk image of WAITS from Lars Brinkhoff's sailing-on-arpanet project. This builds on the simh disk images from Richard Cornwell and ultimately Bruce Guenther Baumgart's saildart archive.

To use this, you will need a Unix-like environment capable of running a shell, git, make, a C compiler, bunziip2 and the SDL library. An optional requirement is a telnet client. See the README for more details.

First, clone the repo and cd into it

git clone https://github.com/timereshared/stanford-waits-simh-quickstart.git
cd stanford-waits-simh-quickstart

Then type ./build.sh. This will

  • Download opensimh using git and compile the pdp10-ka emulator binary.
  • Download a copy of the WAITS disk images.
  • Apply some missing system files.

Start WAITS

Type ./run.sh. An III display terminal window will pop up, and the system will boot, showing the below on the main console window.

Stanford 6.17/K 08-16-74

CTY	SYSTEM LOADED ON (date, time)

Using the WAITS CLI

The main window now acts as the PDP-10 console. You can log into it using the LOGIN command which can be abbreviated as L. As this is a snapshot of a live system, it has several accounts set up already. Let's use REG, which was the account of Ralph Gorin, a system programmer at SAIL. By defailt, no password is needed so just type L 1, REG

L 1,REG
JOB 1    STANFORD 6.17/K 08-16-74
FRIDAY  26-JUL-74       1105


EXIT
^C
.

It prints EXIT and ^C to show the login job has finished, then prompts you to enter commands with a dot.

Type TTY FULL to let it use upper and lower case letters (the console would normally only print capitals).

If you have tried TOPS-10 the interface will look familiar, and indeed most of the commands work the same way. Type DIR to get a directory listing; you can use wildcards to limit the search, so to find all SAIL programs:

.dir *.sai

26-JUL-74  1132
FILNAM  EXT   SIZE LAST WRITTEN

   [1,REG]
FORTUN  SAI    256  30-MAY-72
        TOTAL=   256


EXIT
^C

You can view the contents of files by using the TYPE command, so to see the above you'd enter TYPE FORTUN.SAI

The help system is invoked by typing HELP; to see a summary of commands type HELP HELPER.

.help helper
ALIAS   Command to change default directory used for disk files
ARPA    Basic information for users from other ARPA network sites
ASSIGN  Command to acquire use of non-sharable device
ATTACH  Command to attach terminal to a detached job
BINCOM  Program to compare binary files
...

Running programs

As a snapshot of a running system rather than a freshly installed but blank operating systen, there are several commands available to run that were created by the researchers at the AI Lab. One example is PARRY, which was an attemp by psychiatrist Kenneth Colby to simulate a person with paranoid schizophrenia. You can invoke this with the R command. It asks you some questions to set up the parameters for the interaction than lets you start talking to Parry. Press Control-C to exit.

.r parry

END INPUT PARAMETERS WITH CARRIAGE RETURN OR ALTMODE

PRINT NON VERBAL FEATURE? [Y,N]
*y
[...] 
END INPUT WITH A PERIOD OR QUESTION MARK, 
   FOLLOWED BY CARRIAGE RETURN. 
TO INDICATE SILENCE, TYPE   . 
   WHEN FINISHED, TYPE   BYE. 
USE PERIODS ONLY AT THE ENDS OF SENTENCES,
   NOT IN ABBREVIATIONS.

READY:
*why is the sky blue?

THAT'S THE WAY IT GOES

READY:
*tell me about your past.

I'M QUITE UPSET

READY:
*why are you upset?

PEOPLE GET ON MY NERVES SOMETIMES

READY:
*^C
^C

Creating a simple program

Let's create a simple hello world program using Fortran. We will use the SOS editor to create the source file then compile it and run it.

Type CREATE HWORLD.F4 to create a new file and put us in the editor. As this is a new file, the editor will allow you enter text immediately. It will precede each line with a line number (which is not a Fortran label) automatically. So the screen will look something like this after you run CREATE

.create hworld.f4
00100

Type the following program. Where you see below you should press the Tab key rather than typing spaces.

	DO 1 J=1,5
1 	WRITE(5, 2)
2 	FORMAT(' HELLO, WORLD')
	END

Type Alt-mode (which is Esc on your keyboard) to exit input mode, and then type g at the * prompt. This uses the Rapid Program Generator facility in WAITS to save the file and invoke the correct sequence of commands to compile and run the program. Your screen will look something like the below.

.create hworld.f4

00100           DO 1 J=1,5
00200   1       WRITE(5, 2)
00300   2       FORMAT(' HELLO, WORLD')
00400           END
00500   $
*g


FORTRAN:  HWORLD.F4
LOADING

LOADER 5K CORE
EXECUTION

HELLO, WORLD
HELLO, WORLD
HELLO, WORLD
HELLO, WORLD
HELLO, WORLD
EXIT
^C
.

The program is still in core memory at this point, so if you want to save a permanent copy to disk use the SAVE command

.save hworld
JOB SAVED IN 4K

^C

If you now use DIR you can see the files you created.

.dir hworld.*

26-JUL-74  1122
FILNAM  EXT   SIZE LAST WRITTEN

   [1,REG]
HWORLD  F4      19  26-JUL-74
HWORLD  DMP    3.5  26-JUL-74
HWORLD  REL     57  26-JUL-74
        TOTAL=   3.6

EXIT
^C

The .rel file is the object code and the .dmp the executable, which you can run again by typing RUN HWORLD (RUN rather than R as R is for system programs)

Using the display terminal

So far we've done everything using the console, but you probably noticed the III display terminal that appeared when simh started with its welcoming prompt.

/images/waits/waits-iii-prompt.png Prompt on WAITS display terminals. Source: Rupert Lane. License: CC0.

All the login and command line programs we have used so far will work on this terminal as well. But this is a vector terminal that can draw text and graphics, along with a keyboard that can enter more characters than the traditional teletype.

Let's login this time as BGB, the main archivist of the saildart.org site. Type L 1,BGB and then try a few commands. You will note that pressing Delete will delete the last character rather than reprinting it as it does on the teletype; in fact there is an extensive command line editor which we will look at in a later post. A warning: the system does not handle type-ahead that well, so it's best to type slowly.

The video display can show more than just the interaction with the monitor command line. Press F2 then W and a dynamic display of system usage will appear at the top of the screen - called the WHO line. Press F3 and then W to turn it off. A more extensive set of system information cab be displayed in the main area by typing WHO; press any key to exit.

Next, type COPY MON ← MONCOM.BH[S,DOC]: you can get the left arrow by pressing your left cursor keu. And then type TV MON.

This will open up the TV editor on a copy of the monitor command manual. Type Control-P to advance by page and Control-minus then Control-P to go back. Press Control-Alt-E to exit back to the prompt.

/images/waits/waits-tv-editor.png Running the TV editor. Source: Rupert Lane. License: CC0.

There are also a number of graphical demos. Try running each of these with R, eg R DAZZLE

  • armdpy
  • dazzle
  • hypno
  • petal
  • repent

When done with each, press F1 twice and type CORE 0 to clear the screen.

/images/waits/waits-iii-display-hacks.png Display hacks running on the III. Source: Rupert Lane. License: CC0.

Maybe finish with a game? Two which have graphical versions for the III are Go (R IIIGO) and AI Monopoly (R MONPLY).

/images/waits/waits-games-montage.png Two games on the III. Source: Rupert Lane. License: CC0.

Logging off and shutting down the system

Type K, short for KJOB on any logged in terminal to log off. Or get a more personalised signoff by typing K/ME.

There is no procedure to shut down the operating system. Just switch over to the main simh window, press Control-E and type q.

You can restart the operating system with ./run.sh as needed.

Further information

Read the Monitor Command Manual on saildart.org for more information on WAITS commands (this was the document we saw in the TV edit session above).

See PARRY Parries Again for a recreation of a dialogue between ELIZA and PARRY.

Questions, corrections, comments

I welcome any questions or comments, and also especially any corrections if I have got something wrong. Please email me at rupert@timereshared.com and I will add it here and update the main text.


Stanford WAITS

WAITS was the operating system for the PDP-6 and PDP-10 at the first incarnation of the Stanford AI Laboratory (SAIL), running continuously from 1966 to 1991. Uniquely, its full file system was preserved and a snapshot of the system can be run under emulation.

/images/waits/sail-collage.jpg Collage of images from a visit from DEC staff to SAIL, 1976. Source: CHM.

SAIL was founded by John McCarthy in 1963 (before Stanford even had a CS department) with 6 researchers. This grew to 128 people by 1973, by which time the lab had became one of the principal centres for AI research. Work spanned robotics, heuristic programming, NLP and computational theory. Among its alumni were Arthur Samuel, Raj Reddy, Hans Moravec and Alan Kay. Several people not associated with AI also made the lab their home, including Whitfield Diffie, John Chowning and Donald Knuth.

SAIL started out with a PDP-1, for which they implemented a time-sharing system with interactive displays. No traces of this remain, but there is an amusing film about its superiority to batch computing. In 1966, they got a PDP-6. WAITS started off as a version of DEC's Monitor (the forerunner of TOPS-10) but was extensively modified to suit the needs of the lab. It was notable for its support of experimental peripherals - robot arms, autonomous vehicles, display terminals, audio/visual support, and the XGP, one of the first laser printers. Over its lifetime it moved from the PDP-6 to the PDP-10 KA in 1968 and then the KL, added paging (from Tenex) and more memory and disk. As of 1973, it had 256k words of memory, 86M words of disk and 64 display terminals. It was one of the first machines connected to the Arpanet. It was also installed on machines outside of SAIL for a brief time, including at Lawrence Livermore National Labs.

On the software side, most AI research was done in Lisp, but it also spawned its own dialect of Algol called SAIL, and a powerful assembler called FAIL. It had several text editors that made use of its interactive terminals, and had document compilers that could use the XGP, including the first version of TeX.

Incidentally, the name WAITS was adopted several years after the system was introduced, and there are multiple explanations for the name: Western AI Time-sharing System, West coast Alternative to ITS, Worst Acronym for a Time-sharing System, or simply that it waits on you hand and foot.

Preservation status

/images/waits/saildart.org.png Screenshot of saildart.org. Source: Rupert Lane. License: CC0.

The complete backup tapes for WAITS have been preserved and are available for access. Bruce Guenther Baumgart, who worked at SAIL, was asked by John McCarthy to preserve the tapes produced by the DART archive tool when the system was shut down. He has built an amazing archive site, saildart.org, where you can access files, documents and other information about the system. (Personal files are not publicly available.)

For most operating systems we will look at, we only have the material to install the officially published software. But in this case we have the full file system, so we get to see all the surrounding files that made up a living system. Most of the documentation for WAITS was produced on WAITS, so it is available in its original digital form. Also, as an incremental backup, we can see how files changed over time.

Beyond the file archive, Bruce has produced a snapshot of the system as of July 1974 - representative of the lab's peak activity period - that can be used by emulators.

Emulation status

There are two emulators for WAITS.

/images/waits/waits-saildart-emu-montage.png WAITS running on saildart.org's emulator. Source: Rupert Lane. License: CC0.

Bruce has produced an emulator that uses the 1974 snapshot and runs in your web browser at saildart.org. This has demonstrations of a number of interesting systems such as SUDS, the Stanford University Drawing System. It also has interactive access to the complete system using either the console or the III display terminal, so you can login and run commands. Without any additional setup, this allows you to try out the system, but note that your work is not persisted across sessions.

/images/waits/waits-simh.png WAITS running on simh. Source: Rupert Lane. License: CC0.

Richard Cornwell has adapted his simh PDP-10 KA emulator to incorporate some of the special hardware used by WAITS, and has provided disk images on his site. The emulator contains support for the III and DD display terminals, along with networking capabilities, which Lars Brinkhoff is currently trying to recreate its Arpanet connection at sailing-on-arpanet. The simh version needs some set up, but does allow you to import/export files and keep your changes over several runs of the system.

One important thing to note: neither emulator has complete coverage of WAITS features, and some programs do not work. This is not due to lack of effort on the part of the authors, rather due to the non-standard nature of the SAIL hardware, which often lacks docs and diagnostics, and the fact this is a snapshot of a running system rather than an official release.

Topics

In this series of blog posts I plan to cover

  • A quick tour of running WAITS on simh
  • Using the terminals
  • Files and directories
  • Users, jobs and security
  • Utilities and tools
  • Text editors
  • Getting data in and out of the system
  • Printing and documentation tools

    • The XGP
    • PUB
    • POX
    • TeX
  • Programming

    • SAIL
    • LISP

The main focus of this blog is the operating system and its associated tools, so I will not look in detail at all the user programs available on WAITS - but if time permits, I will try to cover some interesting examples.

Further information

For background information on the PDP-10, see my previous article.

As mentioned, there is a great deal of information on saildart.org. A good place to start is the booklet which gives an overview of SAIL WAITS, and the archive project. The Visitor 1976 gives a photo tour of the lab along with some of its equipment and people.

For more detail, look at the collection of AI Memos and SAIL Operation Notes, or dig further into specialised areas on the main page such as music.

References to files on the SAIL system can be viewed by prepending saildart.org. For example, to read the Lisp manual LISP.WD[S,DOC] you would go to https://www.saildart.org/LISP.WD[S,DOC]

AI Memo 228 gives a good overview of the work done at SAIL in its first 10 years.

Questions, corrections, comments

I welcome any questions or comments, and also especially any corrections if I have got something wrong. Please email me at rupert@timereshared.com and I will add it here and update the main text.


Site Update

That's all, for now, on TOPS-10. I've concentrated on the roughly pre-1975 era, using the PDP-10 KA CPU and operating system version 6.03; I may come back to this in the future and look at later versions if I find anything interesting.

Next update to this blog will be in June, where we will look at the Stanford University A.I. lab's operating system for the PDP-10, WAITS. This started out as a version of DEC's PDP-6 Monitor (which became TOPS-10) but WAITS evolved over the years to add support for experimental peripherals - display terminals, laser printers, robotics - and many interesting software features, as well as being an important platform for A.I. research.

As a taste of WAITS, here's a small demo I was involved in recently. PARRY, a chat program that mimics a paranoid patient, was written by Kenneth Colby on WAITS in 1972. Using simh, Lars Brinkhoff got PARRY running on WAITS for the first time in many years. I then got this talking to the ELIZA chat program running on CTSS, recreating a dotctor/patient dialogue done in 1973 as RFC 439. See Jeff Shrager's writeup, PARRY Parries Again, for more details.

Questions, corrections, comments

May 2026: Lars Brinkhoff correctly pointed out that WAITS derived from the PDP-6 Monitor rather than TOPS-10.

I welcome any questions or comments, and also especially any corrections if I have got something wrong. Please email me at rupert@timereshared.com and I will add it here and update the main text.


TOPS-10: Essex BCPL

BCPL - Basic Combined Programming Language - is probably best known as the ancestor of the C programming language made famous by Unix. But BCPL was an important and widely used language in its own right. First implemented by Martin Richards for CTSS, it spread to many different architectures during the 1970s, especially in the UK where it was used for teaching computer science, AI and in industry.

(Incidentally my first ever job, as an intern in 1990 working for the former British semiconductor company Inmos, was writing CAD tools using BCPL on a micro-VAX).

Essex BCPL for TOPS-10

The version we are looking at today for TOPS-10 is from the University of Essex and dates from the mid 1970s. The original compiler by Richards generated machine code for a generic stack machine, called OCODE, and the compiler itself was available in OCODE, so it was easy to port to new machines. Essex produced a version for the ICL 1900 to start with, and moved this across to TOPS-10 on their new PDP-10 in 1970. They then rewrote the compiler to remove the OCODE layer and improve performance.

This second implementation of BCPL is included in the TOPS-10 6.03 disk images we are using so there are no special set up instructions. The compilation system recognises files with a .BCP extension by default. Here's what a hello world program looks like and how to run it:

.type hello.bcp
GET "BCL:BCPLIB"
LET START() BE
$(
	WRITES(TTY,"Hello, world*C*L")
$)

.execute hello.bcp
BCPL:  HELLO	400031/2	32%
LINK:	Loading
[LNKXCT BCPL Execution]
Hello, world

EXIT

TPK in BCPL

Let's use the compiler to run the TPK algorithm. The source code can be found here. This can be loaded onto the disk using the techniques described in this article.

The TPK formula (√|x | + 5x³) is implemented as a function with a single expression:

LET TPK(X) = SQRT(#ABS X) #+ 5.0 #* X ** 3

As BCPL is typeless, different operators are needed for floating point and integer arithmetic such as #+ for floating point add. Note also that #ABS is a unary operator.

However, we have a problem in that SQRT is not part of the language library at this point in history. We can implement it using the Babylonian approximation:

LET SQRT(X) = VALOF
$(
    LET X1, X2 = X, X #/ 2.0
    WHILE #ABS (X1 #- X2) #> 0.0001 DO
    $(
        LET OLD = X2
        X2 := 0.5 #* (X1 #+ (X2 #/ X1))
        X1 := OLD
    $)
    RESULTIS X2
$)

This uses a VALOF expression which yields its results using RESULTIS. As there is more than one statement we use a block, marked by $( ... $). Semicolon can be used to separate statements, but is not needed if there is a single statement per line.

Inside the block we define a variable, LET OLD = X2, but note that assignment uses := ad plain = is used for comparison.

With this, we can supply the driving logic in START, BCPL's equivalent of C's main.

// Define constants
MANIFEST $( N = 11; IOVS = 300 $)

// Main program
LET START() BE
$(
    LET A = VEC N
    LET IOVECTOR = VEC IOVS
    INITIALISEIO(IOVECTOR, IOVS)
    WRITE(TTY, "Please enter :N numbers*C*L", N)
    FOR J = 0 TO N-1 DO A!J := RDF(TTY)
    WRITE(TTY, "Results are*C*L")
    FOR J = N-1 TO 0 BY -1 DO
    $(
        LET R = TPK(A!J)
        TEST R #> 400.0 THEN
            WRITE(TTY, "Too large*C*L")
        OR
            WRITE(TTY, ":F*C*L", R)
     $)
$)

BCPL allows both single line comments with // and block comments with /* ... */. C initially only took block comments, with single line comments first re-implemented by C++ and coming back to C in the 1999 standard.

MANIFEST sets up compile time constants, which we can use when declaring the stack vector LET A = VEC N. Elements of this vector can be accessed using infix !, eg A!2. Two FOR loops are used, one counting forwards to read in numbers and the second counting backwards to calculate and print results. BCPL has IF, but it only supports a single clause for the true case; TEST ... THEN ... OR supports both true and false cases.

I/O is done using RDF to read in a single floating point value and WRITE for output. I/O is stream based, and we use the predefined value TTY to communicate with the user's console. INITIALISEIO is needed before we use I/O to allocate buffers. WRITE supports output of different types using : as positional markers, eg :F for a floating point number. *C*L in the string means carriage return / line feed.

A full transcript of the program execution can be found here.

Further information

The Github PDP-10 organisation has the essex-bcpl repo which contains the source tape and manual for the version of the language. There is also MUD1 which is an early multi-user dungeon written in BCPL; this looks like it needs TOPS-10 7.03 and a KI CPU to run, however.

A completely separate implementation of BCPL on TENEX from BBN can also be found at tenex-bcpl.

The Computer History Museum Software Preservation Group has a detailed history of BCPL, including links to documents, papers and other implementations.

The classic reference to BCPL (and what I originally leaned the language from) is "BCPL - the language and its compiler" by Martin Richards and Colin Whitby-Strevens; there's a copy at the Internet Archive.

Martin Richards continues to work on BCPL and his home page has links to implementations for modern computers.

Questions, corrections, comments

I welcome any questions or comments, and also especially any corrections if I have got something wrong. Please email me at rupert@timereshared.com and I will add it here and update the main text.


AID - the JOSS language for TOPS-10

AID, or the Algebraic Interpretive Dialogue, was DEC's first public version of the JOSS interpreter for the PDP-6/10.

JOSS - the JOHNNIAC Open Shop System - was an early time-shared language created at the RAND corporation in 1963. This ran on JOHNNIAC, a computer they had built in house, and offered 20-30 users who were not expert programmers the ability to write short mathematical programs.

By 1964 the JOHNNIAC was not powerful enough to support demand so RAND and DEC worked together on a successor, JOSS-II, to run on the new PDP-6. This was a complete operating system allowing multiple users to run JOSS from their own teletype.

AID is a standalone version of JOSS that runs as a normal program on TOPS-10. I'm not sure on how much of the code of JOSS-II is in AID, but DEC's manual says:

Digital Equipment Corporation is grateful to The RAND Corporation for permission to adapt the language processors of JOSS for the PDP-l0.

Installing AID

By default, AID does not come with the 6.03 version of TOPS-10 we are using, so we will need to restore it first from a tape of customer supported programs from pdp-10.trailing-edge.com.

  • Get a copy of this tape file and decompress it using bunzip or similar.
  • Copy it to your simh installation directory.
  • With TOPS-10 running, press Control-E on the simh console and attach the tape file to MTA0
sim> at mta0 bb-x130a-sb.tap
%SIM-INFO: MTA0: Tape Image 'bb-x130a-sb.tap' scanned as SIMH format
sim> continue
  • Log in to TOPS-10 as user [1,2], password FAILSA. Run BACKUP and restore the executable file to SYS:
.r backup

/tape mta0:
/rewind
/restore dskb:[1,4]=aid.exe
!
"Done

/exit
  • Finally, still as [1,2], set permissions:
.protect sys:aid.exe <155>

AID can now be run via R AID by any user.

Using AID

After you start AID, you can enter simple expressions at the * prompt.

.r aid
AID 20A(32) AT YOUR SERVICE ...

*type 22/7
	22/7 =	      3.14285714
*a = 12
*b = 30
*type a+b
	 a+b =	     42

or you can enter programs, using decimal line numbers:

*1.0 Do part 5 for i=1(1)5
*5.0 Type "Hello, world"
*do part 1
Hello, world
Hello, world
Hello, world
Hello, world
Hello, world

Note that loops can be added at the end of any expression: here we call part 5 (the hello world print) via for i=1(1)5 with the numbers being the initial, step and final value.

Just like the original JOSS, any errors you make will be reported with the single message "Eh?"

It's possible to save your code (and variables defined in the environment) to a disk file. First you specify a file number to work with:

*use file 123
Roger.

and then save your code to a item number under that file:

*file all parts as item 5
Done.

If you quit out of AID with a Control-C and do a DIR you can see the file that has been created - in this case QQ0123.J05. This is in binary format and so cannot be easily manipulated by editors such as SOS

To load in the code from disk:

*use file 123
Roger.
*recall item 5
Done.
*list all parts

1.0 Do part 5 for i=1(1)5
...

Running TPK

Let's use AID to run the TPK algorithm. The source code can be found here but will need to be typed in to the interpreter directly.

.r aid


AID 20A(32) AT YOUR SERVICE ...

*1.000 Let t(x) = sqrt(!x!) + 5 * x ^ 3.
*1.010 Type "Please enter 11 numbers".
*1.020 Do part 2 for j=1(1)11.
*1.030 Type "Results are".
*1.040 Do part 3 for j=11(-1)1.
*1.050 Stop.
*
*2.000 Demand a(j).
*
*3.000 Let r = t(a(j)).
*3.010 Type "Too large" if r > 400.
*3.020 Type r if r <= 400.
*
*do part 1
Please enter 11 numbers
	a(1) = *10
	a(2) = *-1
	a(3) = *1
	a(4) = *2
	a(5) = *3
	a(6) = *4
	a(7) = *4.3
	a(8) = *4.305
	a(9) = *4.303
       a(10) = *4.302
       a(11) = *4.301
Results are
	   r =	    399.8863
Too large
Too large
Too large
	   r =	    399.608644
	   r =	    322
	   r =	    136.732051
	   r =	     41.4142136
	   r =	      6
	   r =	     -4
Too large
Stopped by step 1.05.

This exposed a number of differences from the original JOSS:

  • Variables and functions are single characters, but are case sensitive.
  • The character set is different: use * for multiplication. ^ for exponentiation and !x! to find the absolute value of x.
  • There is no support for comments (which JOSS defines as lines starting with or ending with *.

Further information

On Bitsavers, DEC's documentation of the AID system can be found in the PDP-10 Timesharing Handbook from 1970: see the section "Conversational Programming With AID" starting on page 123.

RAND's documentation for JOSS, such as The JOSS Primer, can be used for AID with small modifications.

There's a reconstruction effort for the original JOSS-II on github. This includes source code, and also many other JOSS documents in the doc/ directory.

Later on, DEC created FOCAL which made more extensive changes to the JOSS language. This is available on the 6.03 distribution we are using (via R FOCAL) but I will look at this later on when I cover TOPS-20.

I've written about other JOSS dialects before: WIPL for MCP on the Burroughs B5500 and PIL for the Michigan Terminal System on the IBM System/360.

Questions, corrections, comments

I welcome any questions or comments, and also especially any corrections if I have got something wrong. Please email me at rupert@timereshared.com and I will add it here and update the main text.


Next →