Burroughs MCP: WIPL Programming
So one of the languages available on the CUBE tape for the Burroughs B5500 is WIPL. Let's find out what this is and get it running.
What is WIPL?
From the Algol source code of the language:
WIPL - WISCONSIN INTERACTIVE PROBLEM-SOLVING LANGUAGE
BY ED HARRIS AND BOB JANOSKI
UNIV. OF WISCONSIN COMPUTING CENTER (MADISON)
VERSION 1.50 (9/1/70)
So we know its name and source, but this is not much help - there is no documentation preserved and an internet search does not turn up much detail. I did find a UW report about a simulation program written in WIPL for school administration from 1969 at the Internet Archive. This includes an instruction manual for running the simulation, showing how to start WIPL and load the program - looks like this was run on the DCMCP rather than via CANDE. But no information on the language itself.
However, the CUBE tape also contains an online help file for the
system which defines its syntax and how to use it. Looking at this,
what stands out is its use of decimal line numbers and references to
PART, for example in this fragment of a sample program:
3.0 TYPE "ENTER THE DEGREE OF THE POLYNOMIAL" 3.1 ACCEPT DEGREE 4.0 TYPE "ENTER THE COEFFICIENTS" 4.1 DO PART 30 FOR I=1 TO DEGREE+1
This makes me think this must be a JOSS clone.
What is JOSS?
JOSS - the JOHNNIAC Open Shop System - was an early time-shared language created at the RAND corporation in 1963. This ran on the one-of-a-kind computer JOHNNIAC and offered 20-30 users the ability to write simple programs that looked like this:
1.3 Do part 5 for i=1(1)100.
5.1 Type "Hello, Wikipedia!".
5.2 Type "This is JOSS.".Many places implemented their own version of JOSS under different names (presumably because RAND held the copyright on the name JOSS) - for example BBN developed TELCOMP, DEC had FOCAL and the University of Pittsburgh had PIL. Each version made changes to the syntax but the core of the language was the same - interactive interpreter, decimal line numbers, simple loops and conditionals. The intended user was a scientist or engineer that wanted to do quick calculations but did not want to have to learn a full programming language.
Getting WIPL running
First off, I assume you have the contents of the 'extras' tape installed: if not see this article.
You will need one additional file from the source CUBE tape. Get the file CUBEB13.BCD from Github and attach it to your emulator tape drive, either from the retro-b5500 tape window or via the simh command
at mt0 -r -f p7b /path/to/CUBEB13.bcd
Then switch to the operator's console, press Escape and type:
? LOAD FROM CUBEB13 ERRORS/CARDS; END
This may take a minute or so while the file is located on the tape.
Finally, you will need to rename some files. On the operator console, enter each of these commands:
? CHANGE WIPL/DISK TO 0WIPL/DISK; END ? CHANGE HELPFIL/CARDS TO WIPLS/HELPFIL; END ? ?CHANGE ERRORS/CARDS TO WIPLS/ERRORS; END
You can now run WIPL from CANDE via the RUN WIPL/DISK command. A
quick example of starting WIPL, viewing the first help page and trying
some immediate mode calculations before quitting and returning to
CANDE:
RUN WIPL/DISK
RUNNING
TYPE HELP IF YOU HAVE QUESTIONS (WIPL VERSION 1.5)
?HELP
PLEASE WAIT.
YOU ARE USING WIPL, A B5500 INTERACTIVE LANGUAGE DEVELOPED
BY THE UNIVERSITY OF WISCONSIN COMPUTING CENTER. TO OBTAIN
INFORMATION ON THE USE OF ONE OF THE STATEMENT TYPES, TYPE
"HELP" FOLLOWED BY THE STATEMENT TYPE, SUCH AS "HELP SET".
IF YOU WOULD LIKE TO KNOW ABOUT ANY SPECIFIC AREA OF THE
LANGUAGE, YOU MAY CHOOSE FROM THE FOLLOWING LIST OF TOPICS:
(TO SELECT TOPIC 2.00 TYPE "HELP 2)
2.00 GENERAL INFORMATION
3.00 CALCULATOR MODE
4.00 STORED PROGRAM MODE
5.00 SPECIAL STATEMENTS
6.00 DEBUGGING AIDS
7.00 SAMPLE PROGRAM
?SET A = 2
?SET B = 40
?SET C = A + B
?TYPE C
42
?QUIT
END WIPL .0 SEC.
You can also use SAVE and LOAD to store programs in the file system.
So with this, we can implement the TPK algorithm in WIPL.
TPK in WIPL
1.000 REM TPK ALGORITHM IN WIPL
1.010 DIM A[11]
1.020 PRINT "PLEASE ENTER 11 NUMBERS"
1.030 DO PART 2 FOR J = 1 TO 11 BY 1
1.040 PRINT "RESULTS ARE"
1.050 DO PART 3 FOR J = 11 TO 1 BY -1
1.999 STOP
2.000 REM GET EACH NUMBER AND STORE IN ARRAY
2.010 ACCEPT A[J]
3.000 REM CALCULATE TPK AND DISPLAY RESULTS
3.010 RESULT = SQRT(ABS(A[J])) + 5 * A[J] ** 3
3.020 IF RESULT GTR 400 PRINT "TOO LARGE" ELSE PRINT RESULTI think this is fairly easy to understand, but here are a few notes. WIPL (and JOSS) programs are separated into parts (the number before the decimal point), each of which may have several lines (the number after the decimal point). A part is like a subroutine with an implicit return when the next part starts. So here we have part 1 for the entry point. It calls part 2 using a loop to input numbers, and then part 3 with a reversed loop to calculate TPK.
Variables are floating point only. Arrays need to be dimensioned before use, and are 1-indexed.
Source and a transcript of its execution can be found on Github. I have also provided a version of the code in JOSS, so you can see how the syntax has changed for WIPL.
Another JOSS on MCP
While researching this post I found this message by Paul Kimpel.
Burroughs had their own version of JOSS, originally called BOSS and
later renamed to INTERP. This is actually installed on disk as part of
MCP Mark XIII set up. as INTERP/DISK. However, no documentation or
help file is available. I can start it, but get the error message:
-INVALID USER INTERPS SAVFILE, S = 43, A = 37
suggesting there may be a step needed to grant access to the program. The source of INTERP is available on the MCP symbol tapes, however, so this would be an interesting project to understand the code and get this version of JOSS working.
Further information
Questions, corrections, comments
I welcome any questions or comments, and also especially any corrections if I have got something wrong. Please email me at rupert@timereshared.com and I will add it here and update the main text.