CAL Timesharing System source code
Paul McJones
Last modified 12 January 2024
Contents
Development of CAL TSS ended rather abruptly in late 1971,
and the developers were not careful to archive the machine-readable media (disk backup tapes with
source code and tools; dead-start tapes), although a few tapes were kept as souvenirs and some data
has been recovered from them by Paul Pierce (reading the 7-track 1/2 inch tapes) and Terry Heidelberg
(deciphering their contents and succeeding in partially dead-starting and initializing the system).
Another tape was read by Al Kossow and Len Shustek. Also a number of paper documents and listings,
as well as one small card deck, were preserved.
Here's the source code recovered by Terry as of April 2018 (updated January 2019):
- ECS system
- PPU programs
- XTEXT files
- CPU programs
- Bead (interim user-level system)
- TSS (final user-level system)
- Disk file system
- Command processor ...
- Utility programs
- Miscelleneous - development files belonging to Vance Vaughan
One other program was machine-readable, but not source code: a deck of cards that could be "deadstart-loaded" in order to dump the state of the system to magnetic tape after a crash:
- TSS PM DUMP. Binary card deck to be deadstart loaded.
At the April 1980 CAL TSS reunion, Paul McJones put out a call for materials to be archived,
and other team members gave their materials to Paul. In April 2018, Paul scanned the final
CAL Timesharing System listings from 1971 or earlier. A Panasonic KV-S3065C was used,
courtesy of Al Kossow. The grouping and order of the scans here corresponds to the
physical binders containing the listings.
ECS system
PPU programs
- catalog of executable files PDF
- listing dates PDF
- DDS - deadstart panel program PDF
- PRE - TSS deadstart preloader PDF
- DMP - dump PPUs and CPU to tape
(for use with DUMPSCAN; see document
and TSS PP DMP) PDF
- INI - initial load of PPUs and CPU PDF
- MPP - master PPU PDF
- DSD - display driver and operator interface
PDF
- MUX - multiplexor driver PDF
- MSM - MUX simulator (using display) PDF
- SDV - simple-device (tape) driver PDF
- PDV - printer, card reader, and card punch driver
PDF
- DSK - disk driver PDF
- DS2 - code to receive 2nd copy of disk driver
PDF
- See also CPU programs LOWCM, SYSPAR, GENLINT, MUXINT, SDVCINT, DSKINT, and DSPINT
XTEXT files
CPU programs
- LOWCM - pointers to interrupt storage; first initialization code PDF
- SYSPAR - system parameters (memory field lengths, ECS reference address, etc.)
- GENLINT - general data for interrupts PDF
- MUXINT - multiplexor interrupt PDF
- SDVCINT - simple-device interrupt (tapes, and also printer, card reader, and card punch?)
PDF
- DSKINT - disk interrupt PDF
- DSPINT - display interrupt PDF
- SYSERR - error recovery for ECS error PDF
- SYSENTR - system entry / exit (interface between system and user) PDF
- ERRCODE - entry points for transfers generated by ERROR macro PDF
- OPERATE - operations PDF
- EVENT - event channels PDF
- MAPS - subprocess memory<->file maps PDF
- CAPABLE - capability lists PDF
- MISC - subprocess class codes and miscellanous PDF
- FILES - ECS files PDF
- SCHED - process scheduler PDF
- PROCESS - processes PDF
- SUBPROC - subprocesses PDF
- ALOCBLK - allocation blocks PDF
- SWAP - swap process between central memory and ECS PDF
- INITL - initialize ECS and create initial objects PDF
- ECSINIT - zero ECS, move in ECS-resident actions, create free list and master object table, etc. PDF
- INTINIT - initialize interrupt objects (buffer files and event channels, with their pseudo-processes)
- IPROC - system initial loader (first process; repeatedly reads from tape, creating and running specified subprocesses) PDF
- load map, 1971/11/03 PDF
Test programs
- ECSTIMES_results - output from ??? PDF
- TESTIO - disk file write/read benchmark (written in BCPL) PDF
- ISUBP - interface twixt Bead and ECS system tests PDF
- LAST - storage allocation for ECS system tests PDF
- Allocation blocks
- TALOCX - allocation block test (force compaction)
PDF
loadmap
- TALOCX loadmap PDF
- TALOC1 - allocation block creation, destruction, display
PDF
- TALOC2 - move reserved space, steal ECS space, move CPU time
PDF
- TALOC3 - move MOT slots, increment charge rate, increment charge meter
PDF
- TALOC4 - return capability for Nth object, display object, display
allocator PDF
- TALOC1/2/3/4 load map PDF
- Capability lists
- TCLST1 - creation, indirect fetching of capabilities
PDF
- TCLST2 - creation, display capability from full capability list
PDF
- load map PDF
- Event channels
- TEVCH1 - creation, send event, get event
PDF
- TEVCH2 - send to another process, "you lose" event, get event or
FRETURN. PDF
- TEVCH3 - more testing with slave process
PDF
- TEVCH4 - multiple event channel operations
PDF
- TEVCH5 - test various error cases PDF
- load map PDF
- Files
- TFILE1 - creation of 1-level and multi-level files, creation of blocks,
moving blocks, testing dirty bit, testing errors
PDF
- load map PDF
- Miscellaneous
- TMISC1 - create class code, etc.
PDF
- load map PDF
- Subprocesses
- TSUBP1 - ??? PDF
- TSUBP2 - create an operation to call a subprocess PDF
- load map PDF
- Timing
- TTEST - test the TOPER test macro PDF
- load map PDF
- Timing
- TTIME1 - measure time spent in a loop ??? PDF
- load map PDF
- Test output
Bead (interim user-level system)
- BEAD1 -- initializes Bead directory (run once to initialize new disk ???) PDF
load map
- BEAD2 -- TTY scanner and panic handler (daemon process ???)
PDF
- ERROR -- print Bead error messages
PDF
- TTYLINE -- TTY line collector
PDF
- BEAD -- file handler / user executive
PDF
- DISK -- disk file manager (includes disk initialization, load, recover, dump)
PDF
TSS (final user-level system)
System initialization (IPROC/BUILDER)
Name files - these guide BUILDER
- OPNAMES_XTEXT - indexes of ECS operations in the operations capability list ??? PDF
- OPERCL - operations capability list PDF
- FULL -- list of names of all files following the ECS system itself on a system deadstart tape
PDF
loadmap
- USER -- names of TSS subprocesses to appear in user processes
PDF
loadmap
- TERMIN -- names of TSS subprocesses to appear in disk system TERMINATOR processes
PDF
loadmap
- HELPER -- names of TSS subprocesses to appear in disk system HELPER processes
PDF
loadmap
- ACCTP -- names of TSS subprocesses to appear in disk system ACCOUNTANT processes
PDF
loadmap
- TTYWTCH -- names of TSS subprocesses to appear in disk system TELETYPE WATCHER processes
PDF
loadmap
- JPROC -- names of TSS subprocesses to appear in JPROC
PDF
loadmap
- Name file generation dayfile PDF
IPROC subprocesses (each is linked with tss/init/OPERCL)
- NULLSUB - null subprocess
PDF
load map
- OPER1 - create operations capability list
PDF
- DISK1 - create global disk system operations
PDF
- DISK2 - initialize disk data (except allocation)
PDF
- DISK3 - initialize disk allocation tables
PDF
- DISK4A and DISK4B - create disk system class codes and call operations;
create initialization call operations
PDF
- DIR1 - initalize directory system (also linked with DRCTCL)
PDF
load map
- CMMD1 - initialize operations for command processor level
PDF
load map
- CMMD2 - TTY scanner and panic handler
PDF
- DISK5 - create global disk system processes (TERMINATOR, HELPER, ACCOUNTANT)
PDF
- OPER2 - create user operations capability list
PDF
- TTYW1 - create TELETYPE WATCHER process
PDF
- JANITOR - runs last in IPROC to clean up
PDF
Simulation for debugging
BUILDER - create and run subprocesses and processes at system initialization time and user process creation time
Disk file system
Code
- USERA - user process subprocess header PDF
- FRWA - F-RETURN subprocess header PDF
- TERMA - I/O request terminator process subprocess header PDF
- HELPERA - helper process subprocess header PDF
- ACCTP - accountant process PDF
- LOWCORE - bottom of address space (parameters, etc.) PDF
- COMCORE - common core cells used by everyone PDF
- LOCSYMB - local subprocess symbols PDF
- FRWLOC - F-RETURN subprocess local storage
PDF
- HELPLOC - HELPER subprocess local storage
PDF
- HEADERS buffers for file header block and file header record
PDF
- DABUF - "DAR/DAB buffer" - disk accounting record and disk allocation block ???
PDF
- DBUGLOC - data for DEBUG PDF
- DEBUG - debugging routine PDF
- USRDBUG - running DEBUG for user process
PDF
- RUNDBUG - running DEBUG PDF
dayfile
- GFILE - global file template PDF
- MAINCL - main capability list template PDF
- TERMIN - terminator process PDF
- HELPER - helper process: close, destroy, etc. PDF
- ENTRY - entry/exit PDF
- CREATE - create/destroy disk file PDF
- CREBLK - create/delete file blocks PDF
- OPNCLO - open/close disk file PDF
- ATTACH - attach/detach file blocks; map actions PDF
- CLAIM - shared/exclusive file claims (locks) PDF
- ASORT - assorted actions: probe for missing blocks, get and reset clocks, get file status, etc.
PDF
- FRWENT - F-RETURN read/write entry/exit PDF
- FRETRW - F-RETURN read/write action PDF
- SERVICE - service routines PDF
- ALLOC - disk allocator PDF
- ACCNT - accounting block manipulation routines PDF
- DARSPA - internal disk system accounting PDF
- TRAVERS - file tree traversal driver PDF
- COMMIO - I/O routines common to all subprocesses PDF
- USERIO - I/O routines appearing in user disk service subprocess
PDF
- FRETIO - I/O routines appearing in F-RETURN handler subprocess
PDF
- HELPIO - I/O routines appearing in HELPER subprocess PDF
- HASH - user disk subprocess hash control PDF
- CONSTR - construct local file table header, destroy a pointer block in DDS
PDF
- CONSTR1 - construct pointer block in DDS PDF
- USERC - user disk service subprocess tail PDF
- FRWC - F-RETURN handler subprocess tail PDF
- TERMC - terminator subprocess tail PDF
- HELPERC - helper subprocess tail PDF
Load maps
Development tools
XTEXT files
- PARAMS_XTEXT PDF
- SYSCALL_XTEXT PDF
- ERRNUMS_XTEXT PDF
- TYPES_XTEXT PDF
- OBBITS_XTEXT PDF
- SYSSUBP_XTEXT PDF
- USRSUBP_XTEXT PDF
- DSKOPS_XTEXT PDF
- DSKOPR_XTEXT PDF
- SYMBOLS_XTEXT PDF
- BEADTST_XTEXT PDF
Directory system
Command processor / load-dump-recover / accounting / debugging
CMMD - command processor subprocess
- CMMDA - login, built in commands, and more
PDF
- CMMDB - parse and evaluate parameters (expressions)
PDF
- CMMDC - character code conversion and input/output
PDF
- CMMDD - parser tables for parameters
PDF
- SYNTAXA_SNOBOL - first pass of generation of CMMDD from file GRAMMAR (missing)
PDF
- SYNTAXB_SNOBOL - second pass of generation of CMMDD
PDF
- CMMDE - parser tables for commands(?) PDF
- SYNTAX1_SNOBOL - first pass of generation of CMMDE from file GRAMMAR (missing)
PDF
- SYNTAX2_SNOBOL - second pass of generation of CMMDE
PDF
- CMMDF - translation of error codes to text messages
PDF
- OPERCL - see tss/init/OPERCL
- DRCTCL - see tss/dir/DRCTCL
- loadmap
BEADG - Bead ghost subprocess
- BEADG - Bead ghost: root subprocess for user process
PDF
- loadmap PDF
FAKEG - Fake Bead ghost subprocess, used for disk system
BEADS - Bead and command processor services subprocess
- BEADS - Bead and command processor services PDF
- PROFILE - profiles and accounting PDF
- OPERCL - see tss/init/OPERCL
- loadmap PDF
TLINE - TTY line collector subprocess
CLNPRF - clean profile ???
- HEAD - system interface BCPL code
PDF
- CLNPRF_BCPL PDF
- TAIL - defines first global data location (no listing available)
- OPERCL - see tss/init/OPERCL
- loadmap PDF
TEST - subprocess for testing CMMD debugging features ???
Miscellaneous
- Obsolete version of SYNTAX table generator ???
PDF
- Fragment of code from PROFILE ???
PDF
Utility programs
- BRDCST - broadcast messages to all teletypes PDF
- DUMPSCAN - interactive viewer for tape written by
DMP PPU program (see document)
- DMPSCN - header and scratch area PDF
- DMPSCAN - main program PDF
- load map PDF
- DUMPFIL - dump SCOPE files to tape
PDF
loadmap PDF
- DUMPTPE - dump the files in an interim TSS disk directory to a tape?
PDF
load map PDF
- EDITOR - text editor (see document) PDF
- GETCARD - read card deck
PDF
load map PDF
- GETFILE PDF load map PDF
- GETTPE PDF
load map PDF
- PRINTER - print file (see document)
- PRINTER - storage allocation, initialization, etc.
PDF
- PRINT - main loops PDF
- DSKTTY - teletype input and output -- borrowed from Load/Dump/Recover???
PDF
- ENDPRN - finalization PDF
- load map PDF
- SCOPE - SCOPE simulator (see documentation) PDF
Programming language systems
- BASIC (see documentation)
- UPDATEY log #1 PDF
- UPDATEY log #2 PDF
- BASIC PDF
- Dayfile PDF
- CALIDOSCOPE system messages from January 1971
PDF
- BCPL
(see 1969
and 1971 documentation and
Martin Richard's BCPL page)
PDF
- COOLAID - unfinished PL/360-like assembler for CDC 6x00 (see
documentation)
- TEST_COOLAID - examples of each instruction format
PDF
- DESCR - Bead-style subprocess descriptor amd data area
PDF
- FIRST - temporary initialization
PDF
- TOKPROC - tokenizer
PDF
- ASSMBLR - COOLAID tokens into object file
PDF
- SPITTER - instruction outputting routines
PDF
- SSST - system standard symbol table routines
PDF
- LAST - defines end of code segment
PDF
PDF
- loadmap
PDF
PDF
PDF (partial)
- COPYL loadmap - ???
PDF
Development tools
- NEWSYS - create a new system tape PDF
- SIMTSS - simulate CDC 6x00 system: CPU, PPUs, and devices
- CLKSYNC - clock synchronizer PDF
- CENTRAL - configure central memory size PDF
- PRINTL - print line, etc. PDF
- ECS - configure extended core storage size PDF
- PPUSIM - simulate peripheral processing units PDF
- DSPAN - simulate ??? PDF
- DISPLAY - simulate display ??? PDF
- TAPEDR - simulate tape drive PDF
- CPUSIM - simulate central processing unit PDF
- Listing prelude postlude
- TSSTYPS - program to generate ECS system type codes PDF
Operations
- Dayfile
- 1971/10/25 - 1971/10/31 PDF
- 1971/11/1 - 1971/11/30 PDF
- 1971/12/1 - 1972/01/21 PDF
- 1972/01/25 - 1972/05/24 "THE VERY LAST DAYFILE DUMP" PDF
- Crash dumps
- ECS system, 1971/10/14 PDF
- Debugging notes, Vaughan and Sturgis PDF