IBM System 360/370 Compiler and Historical Documentation


Simsalabim Free or not? Yes, it is.
Software and Prerequisites
SIMULA 360 Users Guide
Simula Programmer's Guide...
The inevitable hello world example.
Bugs and Remedies
The language standards
For implementers
Links
Maintenance of this site
This site is dedicated to the fathers of Simula.

The Beta Language Book Home page introduces: 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."
WHEN looking INTO the Internet, documentation FOR old SIMULA compilers AND even the original language definitions are difficult TO find. Well, UNTIL I discovered the Hercules, which IS NOT a SIMULATION, AND the free IBM MVS system. I became motivated TO REACTIVATE my collection of SIMULA things, documents AND the original IBM 360/370 compiler. IF you don't like THIS SIMSET, please DETACH, we will not RESUME you. OTHERWISE, feel free TO INSPECT.

Simsalabim. Free or not? Yes, it is.

Software and Prerequisites

Here you can find the Simula system and prerequisites.

The Hercules System/370, ESA/390, and z/Architecture 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.

The MVS Tur(n)key System, Version 3

TYou may probably be able to use all kinds of MVS derived systems, the Simula system below was used under MVS/XA. 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 MVS 3.8J Operating System. There are some nice extensions to MVS which make life a little bit more easy that the native environment.

The SIMULA System 360/370 Compiler and Runtime system

Here you can have the Simula compiler and its runtime system. To my knowledge, this Simula implentation was done with PL/360. The compiler had a year 2000 problem. After patching one octet in the load module the beast became tame. There are some funny protection techniques in the code which made it 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.

SIMULA 360 Users Guide

Unfortunately the quality of the scanned text is bad, some of the original pages having almost no contrast. I am working on that. I haven't integrated the revised pages their place.

Title, Preface, Content and Part 1: BASIC SIMULA

First half of Part 2: THE SYNTAX AND SEMANTICS OF SIMULA

Second half of Part 2: THE SYNTAX AND SEMANTICS OF SIMULA

Part 3: PROGRAM STRUCTURE AND SYSTEM FEATURES

Appendices

Revised pages

Simula Programmer's Guide IBM System 360/370

The 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.

Title, Contents, Appendices, Introduction

1. System requirements

2. System elements

3. Hardware and implementation defined restrictions and capacity limitations

4. Implementation defined parts of the SIMULA language

5. Object program input/output

6. Debugging aids

7. Dynamic profile of program execution

A. Hardware representation

B. Compiler diagnostics

C. Run-time diagostics

D. Sizes of run-time library elements

E. How to design an overlay structure

F. Internal representation of data structures

G. How to write an external assembly and or fortran procedure

H. Specifying user exits

I. Sample Job listing

J. Catalogued procedures

K. Report Procedure

System 360/370 External Produre Library

The inevitable hello world example.

Here 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 you 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
//

The output

It's rather long because all kinds of debbuging information output is enabled to show the features.

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>';

Bugs and Remedies

Don't assume that I will correct errors in the system before it has become totally open source. But you may send me your observations

  1. 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 me 20 years ago from time to time. Finally I got it: Thou shallst not try to access to a byte in a page that does't belong to you. The explanation: Assume register one pointing to the last word in a page UNPK 0(9,R2),0,5(R2) followed by a TRT of the first 8 octets and setting the 9th to blank. Works almost, but not for the last word in page where you cannot access the next. This editing technique is used in various parts of the run time system but without real consequences.
  2. z/OS will experience

    IEW2551E 4606 THE ENTRY NAME ZYQENT ON THE CURRENT OBJECT MODULE END
                  RECORD IS NOT A DEFINED NAME IN THIS MODULE.
    
    One remedy is to edit 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 testing this and to provide this patch for the compiler that blanks out the entry point in the generated object deck.

    The runtime system also has a small year 2000 problem which doesn't prohibit execution. Look at when the sample program starts its execution, so one may assume that there were at least two programmers at work.

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 not really implemented for example, but that doesn't hurt very much.

The COMMON BASE LANGUAGE, a 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.

Title, Preface and Index

1. Introduction

2. Class Declarations

3. Types and Variables

4. Expressions

5. Relations

6. Statements

7. Remote accessing

8. Procedures and parameter transmission

9. Sequencing

10. The type "text"

11. Input-Output

12.Random Drawing

13. Utility Procedures/a>

14. System Classes

15. Separate compilation

16. Common Base restrictions

17. Recommended Extensions

18. Features being investigated

19. References

20. Alphabetic INdex of syntactical units

The 67 version of the language is here (in its fifth edition).

Title, Table of Content and Preface

1. SIMULATION AND DISCRETE EVENT SYSTEMS

2. PROCESSES

3. ELEMENTS AND SETS

4. SEQUENCING

5. CONNECTION

6. THE MAIN PROGRAM

7. RANDOM DRAWING

8. DATA ANALYSIS

9. THE SIMULA SYNTAX

10. THE UNIVAC 1107 SIMULA

11. ALGOL FUNDAMENTALS

12. A SIMPLE SIMULA DESCRIPTION

13. A WORKED EXAMPLE and ANNEX

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

For implementers

The Simula Implementation Guide

Title and Introduction

1. Introduction Compiler

2. Introduction Runtime system

3. Types

4. Sub-Blocks

5. Procedure Declaration

6. Class Declaration

7. Expressions

8. Actual parameters

9. Assignement

10. Denotes

11. Relations

12. For-Statements

13. Remote Identifiers

14. Connections

15. Block Prefixing

16. Sequenceing Statements

17. Labels and Switches

18. Random Drawing and Data Analysis

19. System Classes

20. Separate Compilation

21. Store Collapse

22. Formal Description of Simula Common Base Runtime System

Links

  • Cetus Links - Simula - Includes FAQs, mailing lists, books, an FTP archive, and links to general articles.
  • Montreal Simula Site - Designed to help with teaching and popularity by providing, eventually, a full online reference, and useful web pointers and access to Simula application software.
  • Holmevik, J.R. (1994). "Compiling SIMULA: a historical study of technological genesis." IEEE Annals of the History of Computing, 16 (4), p. 25-37, 1994. The article was also presented at the 18th ASU Conference in 1992, and published in the SIMULA Newsletter Vol.20(1), October 1992.
    According to Jaroslav.sklenar, Mr. Holmevik's permits to download a copy of his paper at Compiling SIMULA
  • Gunnar Syrrist's Simula site
  • The CIM site and The CIM download server. Depending on your version of GCC, you may need to remove the obstack.[c|h] from the source directory. The 4.3 version does not include a little patch of 3.37 that avoids an fclose twice, something that glibc doesn't really like.

  • .

Maintenance of this site: Peter Sylvester <peter.sylvester@edelweb.fr>