Up to parent directory

CDC 6600 mainframe
Jitze Couperus, CC BY 2.0, via Wikimedia Commons

CDC Schoonschip

Schoonschip was originally developed by Prof. Veltman for the IBM 7090 in 1963, but was rewritten for the CDC 6600 in 1965. Since that time, there are been many updates and improvements to the code. Most notably, from 1972 to 1978, Hugo Strubbe was responsible for maintaining CDC Schoonschip at CERN. His contributions include restructuring the original code into overlays in order to make more efficient use of limited memory, adding extensions and fixing errors. He was also responsible for distribution of the code and international promotional seminars.

After Prof. Veltman arrived at the Physics Department of the University of Michigan in 1981, he continued to run Schoonschip on the Michigan State University CDC Cybers. This source code to CDC Schoonschip is for the version dated March 1, 1983, and is presumably the last available CDC code, as soon thereafter Prof. Veltman began the conversion to the M680x0 platform.

The CDC Schoonschip code was obtained from Prof. Veltman's computer files and is being made available with permision of the Veltman family. CDC Schoonschip is primarily written in CDC COMPASS CP, with the program entry and some support routines in Fortran. The source file was presumably obtained as a dump from the MSU computing facilities on April 21, 1983 and is presented here in raw form, with the exception that the original CR line endings have been translated to LF.
S83C.txt CDC Schoonschip source – March 1, 1983 version.
While early CDC machines used CDC display code, the above source is in standard ASCII


The above code is not directly valid CDC code, as it is meant to be processed by DOMOR, which is a code maintenance and updating program written by Prof. Veltman. One of the main features of DOMOR is its ability to patch lines of code, which was non-trivial in the era of batch jobs. To assist in doing so, it would take a 'card deck' (generally stored on disk) and catalog and number its lines. For example, the first line of S83C.txt (not including the dump header) is
1    0       OVERLAY   (SCHIP,0,0)
This is a Fortran card, but with "routine 1" and "card 0" prepended to it.

DOMOR also acts as a preprocessor and provides a set of convenience functions. Of particular note are the following three:

  1. Macros: Macros start with a card with DEF in column 1 and ends with a card with ENDM in column 1. Macros are called by a card with MACRO in column 1. In particular, this allows the use of macros in Fortran programs. A typical use in Schoonschip is to declare COMMON blocks in macros, so they only need to be entered once.
  2. COMPASS substitutions: DOMOR defines the LOCAL and LOCALZ commands and converts them into appropriate COMPASS BSS and BSSZ statements. It will convert Fortran COMMON blocks into COMPASS BSSS statements where BSSS is a macro that is defined to be either BSSZ or BSS by the user depending on wheher they want zero filled storage or not.
  3. COMPASS convenience: Perhaps the most noteworthy feature of DOMOR input is the ability to combine several COMPASS statements on a single line, such as
     1  220           SX3 X3 $ BX0 -X0*X4 $ NO $ IX6 X0-X3
    Here the $ separates COMPASS commands, and DOMOR expands the above to
             X (SX3 X3),(BX0 -X0*X4),(NO),(IX6 X0-X3)
    where X needs to be defined as a macro that takes four arguments and writes them out on four separate lines. This allows for more compact assembler source, and is a recurring theme in Prof. Veltman's software, as can be seen from a similar multiple instruction per line format for the Ann Arbor Macro Assembler.


CDC Schoonschip compiles and runs under dtCyber. It has been verified to work in NOS 2 with COMPASS and FTN5 after slight modifications. These include
  1. Conversion from FTN4 to FTN5 involves replacing DOUBLE with DOUBLE PRECISION and changing how octal and Hollerith constants are written.
  2. The code uses the instruction
             SB0 B0
    in a few places. Technically, COMPASS expands this to SB0 B0+B0 (octal 66000) which sets register B0 to the sum B0+B0. However, register B0 is hardwired to the number zero, so this instruction functions as a nop (although it is not the official NO pass instruction). While this is fine on the CDC 6600 and most Cyber machines, the 800 series of Cyber 170 and 180 reuse the SB0 Bj+Bk and SB0 Bj-Bk instructions as CR Xj,Xk and CW Xj,Xk. To avoid this conflict, it is recommended to replace SB0 B0 in the Schoonschip code with NO. Presumably SB0 B0 may have been preferred, as lore has it that early machines actually processed the NO instruction (octal 46000) through the divide unit, which could have taken additional time and resources. Here it should be mentioned that Prof. Veltman took great pride in writing tight assembly code and getting as much performance as possible with optimal use of the instruction stack.
For convenience, the DOMOR format CDC Schoonschip source has been expanded with macro and all COMPASS substitutions taken care of. The resulting card deck is provided here.
schip-new.deck Expanded CDC Schoonschip source deck

Software Licenses

Schoonschip was originally developed in 1963 to run on an IBM 7094, and subsequently ported to the CDC 6600 in 1965. CDC Schoonschip is written in a combination of assembly and Fortran. The present source code is for the version dated March 1, 1983, and is:
Copyright © 1963, 1965 by Martinus J. G. Veltman
Copyright © 1983 by Martinus J. G. Veltman and Hugo Strubbe
This code is dual-licensed under the GNU Lesser General Public License and the 3-clause BSD License. The aim is to allow the software to be used, published, developed, and modified in the unrestrictive style of public scientific research, while ensuring that there is always a branch of the software which protects free access to the original source and to modifications within that branch.

Schoonschip is free software. You can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either Version 3 of the license, or (at your option) any later version. See the Free Software Foundation site.

You can also redistribute and/or modify Schoonschip under the terms of the 3-clause BSD License. See the Open Source Initiative site.

Users who distribute the software with or without modification are encouraged to maintain the dual-licensing system.