CTSS: A quick tour using s709
In this post I will show how to get CTSS running using the s709 emulator.
Running s709 and a login session. Source: Rupert Lane. License: CC0.
Get the kit
We'll use my eliza-ctss repo to get set up as this automates several of the steps involved. You can also get the components directly from the s709 page and set it up following the instructions there - both methods will yield the same system.
You will need a Unix like environment that can compile C code, run shell scripts etc. You will also need a telnet CLI or GUI client.
Start by cloning the repo and changing into its directory. All commands will be run from there.
$ git clone https://github.com/rupertl/eliza-ctss
$ cd eliza-ctss
Set up the system
(Numbers in square brackets refer to notes below, do not enter these on your terminal.)
$ source env.sh [1]
$ make-binaries [2]
$ make-disks [3]
$ format-disks [4]
$ install-disk-loader [5]
$ installctss [6]
- Set up the path and environment variables needed. Run this before any other commands.
- Compile the s709 and utility binaries, and place them
into
ctss/bin
. - Create files in
dasd/
representing the disk and drums needed for CTSS. - Format the disks and drums. You will be prompted to press Enter a
few times and type
q
and Enter when done. This may take 60s. - Install a basic disk loader on the disks to prepare for the full CTSS install.
- Install the base CTSS components on the disks.
Start the system and log in
$ source env.sh
$ runctss
This will start CTSS and begin accepting logins. The simulator window will show log in/out activity.
In another window, telnet to port 7094 on your local machine. Type
login guest
and at the password prompt type system
.
$ telnet 0 7094 Trying 0.0.0.0... Connected to 0. Escape character is '^]'. s709 2.4.1 COMM tty0 (KSR-37) from 127.0.0.1 MIT8C0: 1 USER AT 12/30/14 852.7, MAX = 30 READY. login guest W 852.8 Password M1416 5 LOGGED IN 12/30/14 852.8 FROM 700000 LAST LOGOUT WAS 12/25/14 1626.0 FROM 700000 HOME FILE DIRECTORY IS M1416 GUEST THIS IS A RECONSTRUCTED CTSS SYSTEM. IT IS A DEBUG AND NOT FULLY FUNCTIONAL VERSION. CTSS BEING USED IS: MIT8C0 R .050+.000
Your two windows should now look like the image at the top of this post.
Orientation
- CTSS communicates in upper case, but you can type in lower case and it will be translated to upper automatically.
- There is no prompt, but you will know CTSS is ready for input when
it prints
R
followed by 2 numbers (which represent the CPU time and swapping time for the last command run). Delete
will delete the last character andControl-U
will kill a whole line. This is an affordance of the emulator; on a a real teletype you'd type#
to delete and@
to kill; these keys still work as such on the emulator.Control-C
will interrupt a program andControl-\
(backslash) will quit it.- Commands are in the familiar format of the program name followed by parameters. Optional arguments are enclosed in brackets.
- When you enter a command, CTSS will first type something like
W 1724.3
. TheW
means you are waiting for the command to load and the numbers are the time of day the command started (using tenths of minutes after the decimal point).
Looking at directories and files
CTSS has the concept of a Master File Directory containing several User File Directories, one for each user. It is not possible to make further sub-directories. There is the concept of a shared directory which we will look at in a later post.
To view the contents of your directory, type listf
.
listf W 1305.9 9 FILES 90 RECORDS NAME1 NAME2 MOD NOREC USED CQA1 MAD 000 3 12/30/14 HELLO MAD 000 1 PRIMES MADTRN 000 2 MYLISP SAVED 000 77 12/26/14 FACT LISP 000 1 DEFINE LISP 000 2 FFACT LISP 000 1 12/13/14 PROCAL LISP 000 2 BOTTLE MAD 000 1 R .016+.016
You can give parameters to change the display order and select which files are printed. For example, to show MAD source code files in alphabetic order:
listf (sna1) * mad W 1328.5 3 FILES 5 RECORDS NAME1 NAME2 MOD NOREC USED BOTTLE MAD 000 1 12/13/14 CQA1 MAD 000 3 12/30/14 HELLO MAD 000 1 R .016+.016
File names have two parts, called name1 and name2, each up to six
characters long. Note the first and second parts are not separated by
a dot, so what we'd call "hello.mad" would be "HELLO MAD" on CTSS. The
first part of the name is called name1, hence the parameter to sort
by name1 is (sna1)
. As shown, you can use *
as a wildcard.
You can print a file to the console with P
. This will include some
blank lines at the end so you will need to scroll up your terminal to
see it.
p hello mad W 1332.4 VECTOR VALUES HELLO = $12H HELLO WORLD*$ PRINT FORMAT HELLO END OF PROGRAM R .000+.033
Compiling and running a program
Let's compile and run the above file.
mad hello (list) W 1333.7 LENGTH 00020. TV SIZE 00003. ENTRY 00011 R .016+.033
As the name2 of the file was MAD
, we don't need to give it. If the
file had been called hello mymad
we'd have entered mad hello
mymad
.
The compile did not produce any errors. If you do a listf
for files
you will see two new ones.
listf hello * W 855.3 3 FILES 3 RECORDS NAME1 NAME2 MOD NOREC USED HELLO MAD 000 1 01/05/14 HELLO BSS 000 1 HELLO BCD 000 1 R .016+.016
The BCD
file contains a listing of the compilation. The BSS
file
contains object code.
There is no separate linker step required to get this in a runnable
state. Instead, the loader will bring this into memory and find any
called routines. By typing LOADGO
you can then run ut immediately.
loadgo hello W 1335.0 EXECUTION. HELLO WORLD EXIT CALLED. PM MAY BE TAKEN. R .166+.016
Logging off
Type logout
. The system will also log you off after a period of
inactivity. You can start the telnet session again if you want to
login again.
CTSS will support up to 30 simultaneous users, but note if you are already logged in with a certain user ID, you cannot start a second session.
Shutdown
It's important to shut down CTSS cleanly when finished to avoid corrupting its disks.
You will need to switch back to the main emulator window you started earlier - this cannot be done from the telnet session.
Execute the following, pressing Enter after each non Control-C line.
- Press Control-C
- Type
ek 40017
- Type
st
- Press Control-C
- Type
ek 0
- Type
st
- Press Control-C
- Type
ek 40032
- Type
st
- Type
q
and Enter to exit.
What is going on here? On the real IBM 7094 the operator would
initiate shutdown by toggling in a value on the front panel (ek
, for
enter keys, in the emulator)
You can start CTSS again by running runctss
as before.
Dealing with disk errors
If you forget to do the above, or your machine crashes, or if there
are any problems starting CTSS again, all is not lost. Run this
command to do the equivalent of a fsck
or chkdsk
.
$ source env.sh
$ salvagectss
You will need to type st
a couple of times to start the machine.
When the output says QUIT
, type q
.
Further reading
The CTSS Programmer's Guide section AA.2 has a contemporary "Time-sharing Primer" showing nee users how to perform simple tasks.