Contact

IBM System 360/370 Compiler and Historical Documentation

O. Dahl K. Nygaard

This site is a tribute to the fathers of Simula, Ole-Johan Dahl and Kristen Nygaard.

Around 2006, I discovered the Hercules IBM mainframe emulator. This IS NOT a simulation. AND there is also also the free IBM MVS 3.8 system.

I became motivated AT once TO REACTIVATE STEP by STEP my collection of SIMULA related goodies, documents AND, in particular, an original IBM 360/370 system from the NCC. IF you do NOT like THIS simset QUA Peter; THEN you may PASSIVATE or detach, I will NOT ACTIVATE OR resume(you). OTHERWISE, feel free TO BEGIN INSPECT without DELAY UNTIL the END. WHEN looking INTO the Internet at that time, documentation FOR old SIMULA compilers AND even the original language definition seemed rather rare TO find. Things have changed a lot in the meantime.

The Beta Language Book Home page once introduced: "In the beginning there was Simula - designed by Kristen  Nygaard and Ole-Johan  Dahl at the Norwegian Computing Center in the 1960s, the first language to introduce the techniques now known as Object-Oriented Programming (OOP)".

Dave Parnas wrote about the Turing prize: "Finally, they have given this prize to people who have really made a difference. In more ways than I can ever explain, your work has changed the way people think about software and write about software."

My motivation to set up this site can also be understood bymy presentation at the ASU 2017 meeting. during the 2017 special event: 50 years anniversary of Simula, the first object-oriented programming language.

>

Simsalabim. Free or not? Yes, it is.

SIMULA is a trademark of Simula a.s., OSLO.

Helle to you, as well. Your e-mail was finally passed on to me. I worked at the Norwegian Computing Center (NR), way back. I worked in Simula a.s. afterwards, as long as we managed to keep the company going. I was responsible for the IBM SIMULA system, among others, in both cases. I am actually very pleased that you have managed to get the old IBM SIMULA system up and running on an MVS emulator. Impressive! Yes, of course you may continue to use it! I was the last person in Simula a.s. I maintained a website and an e-mail address a number of years after the company terminated its operation, to keep the PC SIMULA system available for those who wanted to use it. It is still available for those who know where to find it. I am not working with SIMULA at present, but keep those interested up to date as to what is still available.

Best regards,
Gunnar Syrrist

Simula

My question is whether I can give it out into the public.
With all relevant references, credits, etc, whatever necessary
.
There is a TURNKEY MVS system and people try to collect "free" compilers for this beast.

Yes, by all means, make it available.

Best regards
Gunnar

Software and Prerequisites

Here you can find the SIMULA system and prerequisites. When I wrote this paragraph, I had forgotten that not all users and developers in the mainframe area have become system programmer later in their career. In fact, it takes some time to install an MVS system for a newbee, unless:

For Windows fans, Karel Babcicky has setup a complete system including a remote station ; Description, Setup file. Using this, you get an almost blackboxed MVS together with a card reader and printer implemented as an RJE station. No need to learn fancy modern stuff like TSO. Good old batch processing. The system is obviously also good for anything written in JCL. In 1973, that's how we used sthe IBM/168 at University Bonn, with real cards and paper, of course. You can replace the Hercules part and MVS by current versions as described below. You may also run all this under Linux with the RJE component under Wine. MacOS seems possible, too.

The Hercules System/370, ESA/390, and z/Architecture Emulator

Hercules Emulator The first thing you need is a machine. Since one can assume that at home or even in your office many don't just have place for iron wrapped in blue, here you can find the tool you need, the Hercules System/370, ESA/390, and z/Architecture Emulator. This is the official web page for the SoftDevLabs maintained version of the original 4.0 version of the hercules-390 mainframe emulator, code named "Hyperion".

The MVS Tur(n)key System, Version 3

MVS turnkey You may probably be able to use all kinds of MVS derived systems, the Simula system below was used by me until MVS/ESA. To use it under z/OS, see below under bugs and remedies. I used the MVS Tur(n)key System, Version 3 nicely packaged together by Volker Bandke. The MVS Tur(n)key system is a package of freely available parts of the MVS3.8j Operating System. There are some nice extensions to MVS which make life a little bit more easy that the native environment.

The MVS 3.8j Tur(n)key 4- System

Jürgen Winkelmann has integrated the SIMULA system into his remake/update of Volker's work. Thus, the SIMULA system has found a new haven. Karel Babicky, former head of the SIMULA group Norsk Regnesentral, has contributed a newer version of the self reproducing test program (compatible with the language standard and working both in ascii and ebcdic).

The SIMULA System 360/370 Compiler and Runtime system

Simula XMI This is the Simula compiler and its runtime system. This Simula system was partially implemented with PL/360. The compiler had a year 2000 problem. After patching one octet in the load module the beast became tame. There is some protection technique in the code which made it a bit difficult to use TSO TEST.

The file contains compiler and runtime system in XMIT/RECEIVE format. You can use the hercules dasdload program to install it at whatever location you want. I assume that you know what is a disk, you know what is a catalogue, and other things. The original installation tape had some JCL to do this.

SIMULA 360 Users Guide

Simula Users Guide Unfortunately the quality of the scanned text is rather bad, some of the original pages having almost no contrast. I have not integrated revised pages. The image is a scanned part of a real original binder.

Simula Programmer's Guide IBM System 360/370

Simula Programmer's GuideThe writers of the texts seems to like drinking, there is a built-inn feature. Don't use the report procedure. Rather write to me.

There is also the External Procedure Library documentation that make available various external functions via the EXTERNAL ASSEMBLY interface. They form an integral part of the run-time system and allow to access to various features of the run-time system and of the operating system in general, e.g., you can execute any arbitary pieces of code without the need to program you own assembly functions.

The first two pages of appendix J contain @ characters instead of 0 for some unknown reason.

The inevitable hello world example.

We are dinosauursHere you find a sample program, a job written in Job Control Language to run it under MVS and the output.

The Hello world job file.

You may need to change the location of the simula.linklib and make other adaptions according to the requirements of your actual Job Entry System.

//SIMULA  JOB ,MSGLEVEL=(1,1),REGION=1024K
//*
//* This job compiles and runs a simula program
//* A simpler version of it is 
//*
//*    BEGIN outtext("Hello world"); outimage; END
//*
// EXEC PGM=SIMULA,PARM='INDENT=3,SYMBDUMP=3,RESWD=4,LIST,XREF'
//*
//* indent the listing 3 cols after each begin
//* creation symbolic dump information
//* uppercase reserved words, an first char uppercase known functions
//* show aseember listing
//* and cross references
//*
//STEPLIB DD DSN=HERC01.SIMULA.LINKLIB,DISP=SHR
//SYSPRINT DD SYSOUT=A
//SYSTERM DD SYSOUT=A
//SYSUT1  DD UNIT=VIO,DISP=(NEW,DELETE),SPACE=(3200,(20,20))
//SYSUT2  DD UNIT=VIO,DISP=(NEW,DELETE),SPACE=(3200,(20,20))
//SYSUT3  DD UNIT=VIO,DISP=(NEW,DELETE),SPACE=(3200,(20,20))
//SYSUT4  DD UNIT=SYSDA,DISP=(NEW,DELETE),SPACE=(1024,256),
// DCB=DSORG=DA
//SYSGO DD DSN=&&OBJ,DISP=(NEW,PASS,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(1,1)),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PS)
begin
class word(t); value t; text t; 
begin
while true do begin
detach;
outtext(t);
end 
end *** word ***;

ref(word) h,w;
h :- new word("Hello");
w :- new word("world");
resume(h);
outchar(' ');
resume(w);
outimage;

end of program
//GO EXEC PGM=LOADER,
// PARM='EP=ZYQENT,MAP,PRINT/DUMP=5,SYMBDUMP=6,TERM,TRACE=1' 
//*
//* maximum postmoretm dump in case of error
//* and symbolic dumps also
//* all debugging output to systerm
//* allow trace facility
//* 
//SYSLIN DD DSN=&&OBJ,DISP=(OLD,DELETE)
//SYSLIB DD DISP=SHR,DSN=HERC01.SIMULA.LINKLIB
//SYSLOUT DD SYSOUT=A
//SYSOUT DD SYSOUT=A
//SYSTERM DD SYSOUT=A
//

Here is one page of the Simula Reference Card from 1971 which resumes some JCL parameters.

The output

It's rather long because all features of debugging information output are enabled. The printer output created by hercules has been processed by the following perl:


#!/usr/bin/perl
print '<html><head><title>Simula Hello world</title></head><body bgcolor="#ffffe0">';
print "<tt>\n<pre>\n";
while (<STDIN>) {
  s|(\r)*\f(\n)*|</pre>\n<hr>\n<pre>|g;
  print;
}
print '</pre></tt></body></html>';

A quine, a self-reproducing program

This is a self-reproducing program, a quine, written by Karel Babcicky. It was used a a test program to verify the installation of the Simula system. The original version only supported EBCDIC. This version also works in in ASCII environments, e;g. with the cim system.

Bugs and Remedies

bugs at work

As indicated already above, the original system had a year 2000 problem.

Don't expect me to correct errors in the system but I might try. But please send me your observations.

My second try was to produce a nice post-mortem dump using a program like BEGIN INTEGER i; i:= i/i; END This provoked a error that hit us starting with MVS bu we never looked at it seriously. Finally I got it: Thou shalt not try to access to a byte in a page that does't belong to you. The explanation: Register 1 pointing to the last word in a page UNPK 0(9,R2),0(5,R1). This technique is used in a few parts of the run time system but without real consequences.

With Z/OS you will get:

IEW2551E 4606 THE ENTRY NAME ZYQENT ON THE CURRENT OBJECT MODULE END
   RECORD IS NOT A DEFINED NAME IN THIS MODULE.

One cure is to patch the object deck, change ZYQENT to blanks on the END card, and ensure to have EP=ZYQENT as part of the loader parameters. What to do for the linkage editor is left as an exercise. Thanks to Roger Bowler for providing this patch to the compiler. It blanks out the entry point in the generated object deck. Why IBM has changed the behaviour of the binder, who knows?

ZYG: indicating a pair or a union, ENT: Don't be hasty.

The runtime system had a small year 2000 problem which doesn't prohibit execution. Look at when the sample program starts its execution; it seems thtat there were at least two programmers at work. Jürgen Winkelmann fixed this issue until 2100. Karel Babcicky confirmed the correction by providing a copy of the original source. Note here, that [ comes instead of #, \ instead of @, left arrow instead of _.

The language standards

There are several version of the Simula language. The 1986 version of the language standard is not fully supported by this Simula Compiler. Hidden and Protected is only implemented syntactically for example. The programmer should assume responsibily for the code anyway.

Some other material is waiting to be liberated into wilderness after getting scanned, registered, passported, certified and tortured.

Simula I (fifth edition 1967)

SIMULA I manual cover

The SIMULA 67 COMMON BASE LANGUAGE

This is scanned copy containing some hand-made annotations corresponding to corrections that have been made later. Each chapter really starts on on odd page number. No pages are missing.

Simula - its feature and prospects

A lecture delivered by Graham Birtwistle at the B.C.S. Conference on "High level Language", York, October 1972.

For implementors

The Simula Implementation Guide

The 1986 version was also accepted as Swedish standard SS 63 61 14.

Links

The number of documents concerning SIMULA is growing now. It is like a colossal cave where caves are added and sometimes removed.

Thanks to Максим Игоревич Соболев for some information and corrections to links.



View Larger Map