BASIC was available from DEC as a “layered product” for VAX/VMS systems. I’m running VMS 5.3 on my circa-1989 VAX. So I figured it was appropriate to install a version of BASIC from around the same time period: VAX BASIC 3.3.
The first challenge was finding a copy of this software. The only version I’ve been able to find so far is an imaged copy of the TU58 distribution which I downloaded from http://iamvirtual.ca/VAX11/VAX-11-software.html. At that link you will find the 5 TU58 tape images and associated documentation. Links to each tape are provided in the table below.
The install files are stored in a “save-set” format and can’t be just copied across to a hard drive on the VAX, for two reasons. Firstly, they are designed to be installed using the VAX utility VMSINSTAL.COM. Secondly, some of the save-set files span across a tape boundary. So VMSINSTAL has to be used to extract them from the TU58 tapes (or in my case, from the TU58 images mounted on a virtual VAX in SIMH).
Because I want to install BASIC on a real VAX (VAXserver 3400), I needed a way to make these TU58 images available to it. Fortunately the VAX simulators in SIMH support TU58 drives. I found that I could use VMSINSTAL on my SIMH VAX to extract (rather than install) the install files to a directory on my SIMH VAX. With the SIMH VAX connected to the real VAX over DECnet, I was then able to run VMSINSTAL on the real VAX, pulling the install files across from the SIMH VAX as required to install it on the real VAX.
Downloading and renaming the TU58 images
The table below shows the DEC part number of each tape, and the name I gave it when copied to my SIMH directory:
DEC P/N | SIMH Filename | Description |
---|---|---|
BE-N984I-BE | vax-basic-33-1.tu58 | VAX BASIC V3.3 BINARY TAPE 1 OF 5 |
BE-N985H-BE | vax-basic-33-2.tu58 | VAX BASIC V3.3 BINARY TAPE 2 OF 5 |
BE-N986I-BE | vax-basic-33-3.tu58 | VAX BASIC V3.3 BINARY TAPE 3 OF 5 |
BE-N987G-BE | vax-basic-33-4.tu58 | VAX BASIC V3.3 BINARY TAPE 4 OF 5 |
BE-HX00D-BE | vax-basic-33-5.tu58 | VAX BASIC V3.3 BINARY TAPE 5 OF 5 |
Starting up the SIMH VAX
Installing a SIMH VAX, installing VMS on it, and getting DECnet running are beyond the scope of this article. But to assist in replicating this process, here’s the simh.ini file that I used to configure the SIMH MicroVAX 3900:
; This virtual machine has 64M memory set cpu 64m ; SIMH supports: SET CPU MODEL=(MicroVAX|VAXServer|VAXStation) SET CPU MODEL=VAXServer ; Ask SIMH to recognise when the system is idle set cpu idle ; Attach VAX BASIC 3.3 TU58 tape 1 of 5 set tdc enabled set tdc0 locked attach tdc0 vax-basic-33-1.tu58 ; Define disk drive types. RA92 is largest-supported VAX drive. set rq0 ra80 set rq1 disable set rq2 disable set rq3 disable ; Attach defined drives to local files attach rq0 d0.dsk ; Disable unused devices. It's also possible to disable individual devices, ; using a construction like "set rq2 disable" if desired. set rl disable set ts disable ; The next command lists the eth[x] interfaces show xq eth ; Setup the Ethernet interface set xq enabled set xq mac=08-00-2B-AA-BB-CC ; Attach to the HP8440p's LAN adapter (which equates to eth1) attach xq eth1 ; Show the configuration of our Ethernet connection show xq ; Setup PUTTY to start up and connect to the VAX automatically set console telnet=11111 ! start /b cmd /c ""putty" "telnet://127.0.0.1:11111/"" ; Lets capture the SIMH console messages (this won't include the VAX console) set console log=console-log.txt ; Now start the simulated VAXServer 3900 boot cpu
Details of the simulated VAX can be seen in the first line of SIMH console output:
MicroVAX 3900 simulator V4.0-0 Beta git commit id: 3a4e879c
Extracting the BASIC install files from TU58 images
Create an empty directory on the SIMH VAX hard drive, ready to store the extracted install files. We’ll also run a DIR command to check that the directory has been created:
$ CREATE/DIRECTORY DUA0:[MAL] ↵ $ DIR DUA0:[000000] ↵ Directory DUA0:[000000] 000000.DIR;1 BACKUP.SYS;1 BADBLK.SYS;1 BADLOG.SYS;1 BITMAP.SYS;1 CONTIN.SYS;1 CORIMG.SYS;1 INDEXF.SYS;1 MAL.DIR;1 SYS0.DIR;1 SYSEXE.DIR;1 VMS$COMMON.DIR;1 VOLSET.SYS;1 Total of 13 files. $
We’ve already got the first TU58 tape “ATTACH’d” to the VAX (we set this up in simh.ini). There’s no need to “MOUNT” it in VMS. In fact, if you do mount it, the VMSINSTAL process that we’re about to do will fail, as it won’t prompt you to change tapes.
Before we start VMSINSTAL, it’s helpful to remind ourselves how we are going to change TU58 tapes in SIMH, when prompted by VMSINSTAL to do so. Here’s how the process works:
- Wait for VMSINSTAL to prompt us to change tapes
- In the SIMH console window, press CTRL-E to pause SIMH
- Still in the SIMH console window, attach the next tape by using the command “AT TDC0 vax-basic-33-2.tdc”, and then press “c” to continue
- Switch back to the VAX console window (in PUTTY) and type “YES” to confirm that the tape has been changed
Repeat the above process as requested by VMSINSTAL, obviously incrementing the filename of the TU58 tape each time.
Let’s extract the files. Here’s the dialog in VMS. Note the use of “OPTIONS G” in the VMSINSTAL command:
$ @SYS$UPDATE:VMSINSTAL.COM BASIC DDA0: OPTIONS G DUA0:[MAL] ↵ VAX/VMS Software Product Installation Procedure V5.3 It is 4-MAY-2016 at 23:39. Enter a question mark (?) at any time for help. Please mount the first volume of the set on DDA0:. * Are you ready? Y ↵ %MOUNT-I-MOUNTED, BASIC01 mounted on _DDA0: The following products will be processed: BASIC V3.3 %VMSINSTAL-I-CREATEDIR, Creating temporary directory _DUA0:[VMIWORK]. Because VMSINSTAL does not know how many save sets comprise a software product, it will simply copy as many as it can find. Do not be concerned about error messages from BACKUP after all save sets have been copied. Getting save sets for BASIC V3.3 %VMSINSTAL-I-RESTORE, Restoring product save set A ... %BACKUP-I-STARTVERIFY, starting verification pass %VMSINSTAL-I-RESTORE, Restoring product save set B ... %BACKUP-I-RESUME, resuming operation on volume 2 %BACKUP-I-READYREAD, mount volume 2 on _DDA0: for reading Enter "YES" when ready: YES ↵ %BACKUP-I-NEXTVOL, volume 2 mounted - operation continues %BACKUP-I-RESUME, resuming operation on volume 3 %BACKUP-I-READYREAD, mount volume 3 on _DDA0: for reading Enter "YES" when ready: YES ↵ %BACKUP-I-NEXTVOL, volume 3 mounted - operation continues %BACKUP-I-STARTVERIFY, starting verification pass %VMSINSTAL-I-RESTORE, Restoring product save set C ... %BACKUP-I-RESUME, resuming operation on volume 4 %BACKUP-I-READYREAD, mount volume 4 on _DDA0: for reading Enter "YES" when ready: YES ↵ %BACKUP-I-NEXTVOL, volume 4 mounted - operation continues %BACKUP-I-STARTVERIFY, starting verification pass %VMSINSTAL-I-RESTORE, Restoring product save set D ... %BACKUP-I-STARTVERIFY, starting verification pass %VMSINSTAL-I-RESTORE, Restoring product save set E ... %BACKUP-I-RESUME, resuming operation on volume 5 %BACKUP-I-READYREAD, mount volume 5 on _DDA0: for reading Enter "YES" when ready: YES ↵ %BACKUP-I-NEXTVOL, volume 5 mounted - operation continues %BACKUP-I-STARTVERIFY, starting verification pass %VMSINSTAL-I-RESTORE, Restoring product save set F ... %BACKUP-I-STARTVERIFY, starting verification pass %VMSINSTAL-I-RESTORE, Restoring product save set G ... %BACKUP-I-STARTVERIFY, starting verification pass %VMSINSTAL-I-RESTORE, Restoring product save set H ... %BACKUP-F-OPENIN, error opening DDA0:[000000]BASIC033.H; as input -SYSTEM-W-NOSUCHFILE, no such file Please mount the next distribution volume on DDA0:. (If no more volumes, answer NO.) * Are you ready? NO ↵ * Is it impossible to fulfill the request? YES ↵ %VMSINSTAL-E-NOSAVESET, Save set H cannot be restored. A total of 7 save sets copied for BASIC V3.3 VMSINSTAL procedure done at 23:40 $
Let’s use the DIRECTORY command to verify that the install files have been extracted:
$ DIR DUA0:[MAL] ↵
Directory DUA0:[MAL]
BASIC033.A;1 BASIC033.B;1 BASIC033.C;1 BASIC033.D;1
BASIC033.E;1 BASIC033.F;1 BASIC033.G;1
Total of 7 files.
$
Installing BASIC on our real VAX hardware
Now that we have the 7 save-set files stored on our SIMH VAX, we can run VMSINSTAL locally on the real VAX, and pull the save-set files across over DECnet as VMSINSTAL runs. The dialog below shows the install process. All commands were entered through the operator’s console on the real VAX (a VAXserver 3400 with VMS 5.3.2 installed, with DECnet node name CAEPG2).
Note that before attempting this you should verify that DECnet is running correctly and you’ve used the VMS command “UAF> add/proxy [etc]” on the SIMH VAX, to allow the real VAX to grab the files over DECnet. Try copying a file or two manually, to make sure it’s all working fine (and without the need to specify a username and password during the file-copy operation).
Once you’re happy that DECnet is behaving itself, here’s what we’ll see in VMS during the install process:
CAEPG2::system> @SYS$UPDATE:VMSINSTAL BASIC 8440P::DUA0:[MAL] ↵ VAX/VMS Software Product Installation Procedure V5.3-2 It is 1-MAY-2016 at 21:41. Enter a question mark (?) at any time for help. * Are you satisfied with the backup of your system disk [YES]? ↵ The following products will be processed: BASIC V3.3 Beginning installation of BASIC V3.3 at 21:41 %VMSINSTAL-I-RESTORE, Restoring product save set A ... %VMSINSTAL-I-RELMOVED , The product's release notes have been successfully moved to SYS$HELP. VAX BASIC V3.3 Installation Procedure There are three possible installation options. They are described as follows: 1) Perform a normal installation of BASIC. 2) Install VAX/VMS system definitions text library only (10-45 minutes). 3) Obtain a copy of the BASIC message text for modification. * Which option do you want to use [1]: 1 ↵ * Do you want to install the BASIC HELP files [YES]? ↵ * Do you want to install the VAX/VMS system definitions [NO]? ↵ * Do you want to install the sample graphics programs [YES]? ↵ * Do you want to purge files replaced by this installation [YES]? ↵ Product: BASIC Producer: DEC Version: 3.3 Release Date: 1-MAY-1988 * Does this product have an authorization key registered and loaded? NO ↵ %VMSINSTAL-W-NOIVP, IVP will not be run since license is not installed. %VMSINSTAL-I-IVP, It is recommended that the IVP be run after the license has be en installed. %VMSINSTAL-I-RUNIVP, To run the IVP, invoke @SYS$SYSROOT:[SYSTEST.BASIC]BASIC$IV P.COM. %VMSINSTAL-I-RESTORE, Restoring product save set B ... %VMSINSTAL-I-SYSDIR, This product creates system disk directory VMI$ROOT:[SYSTE ST.BASIC]. ************************************************************************ If you have VAX GKS V2.0 or later on your system, VAX BASIC V3.3 allows you to use graphics language statements. The procedure: SYS$SYSROOT:[SYSTEST.BASIC]BASIC$GRAPHICS_IVP.COM will verify that VAX BASIC graphics capabilities work on your system. You must execute this procedure on a terminal with graphics capabilities. ************************************************************************ %VMSINSTAL-I-INSHELP, Installing BASIC Help files %VMSINSTAL-I-RESTORE, Restoring product save set C ... %VMSINSTAL-I-INSSAMPLE, Installing sample programs and PICTURE libraries %VMSINSTAL-I-RESTORE, Restoring product save set E ... %VMSINSTAL-I-RESTORE, Restoring product save set F ... %VMSINSTAL-I-SYSDIR, This product creates system disk directory VMI$ROOT:[SYSHL P.EXAMPLES.BASIC]. ********************************************************************* A number of sample programs demonstrating BASIC graphics statements have been copied to [SYSHLP.EXAMPLES.BASIC]. Read [SYSHLP.EXAMPLES.BASIC]BASIC_EXAMPLES.TXT for information on the sample programs provided. ********************************************************************* %VMSINSTAL-I-MOVEFILES, Files will now be moved to their target directories... Installation of BASIC V3.3 completed at 21:44 VMSINSTAL procedure done at 21:44 CAEPG2::system>
Installing the BASIC license PAK
Like VAX/VMS itself, the layered products such as BASIC require a license PAK to be registered and loaded in VMS before the software can be used.
The license PAK for BASIC can be installed before or after installing BASIC. Because the PAK was not installed when I installed BASIC, you can see in the dialog above that I answered “NO” when asked “Does this product have an authorization key registered and loaded?”. Because the PAK was not loaded, the install process did not run the “installation verification process” (IVP). So we will now load the PAK, so we can run IVP and also run BASIC.
Fortunately the OpenVMS Hobbyist Licenses currently issued by HP will activate VAX BASIC V3.3. The example shown below uses my current Hobbyist License, though each “x” shown below obscures the real details.
License PAKs can be entered at the VMS command line, or through the interactive menu-driven process provided by @SYS$UPDATE:VMSLICENSE.COM. We’re going to use the latter approach:
CAEPG2::system> SET DEF SYS$UPDATE ↵ CAEPG2::system> @VMSLICENSE.COM ↵ VMS License Management Utility Options: 1. Register a Product Authorization Key 2. Amend an existing Product Authorization Key 3. Cancel an existing Product Authorization Key 4. List Product Authorization Keys 5. Modify an existing Product Authorization Key 9. Exit this procedure Type '?' at any prompt for a description of the information requested. Enter one of the above choices [4]: 1 ↵ Do you have your Product Authorization Key? [YES]: ↵ The REGISTER option allows you add a new license to a license database. A Product Authorization Key (PAK) provides the product name and information you need to register the license. You must enter all the information provided by your PAK exactly as specified. PAK ID: Issuer [DEC]: ↵ Authorization Number []: HOBBYIST-VA-KEYxxxxx-xxxxxx ↵ PRODUCT ID: Product Name [*]: BASIC ↵ Producer [DEC]: ↵ NUMBER OF UNITS: Number of Units []: 0 ↵ KEY LEVEL: Version []: ↵ Product Release Date []: ↵ KEY TERMINATION DATE: Key Termination Date []: 28-APR-2017 ↵ RATING: Availability Table Code []: ↵ Activity Table Code []: 100 ↵ MISCELLANEOUS: Key Options []: ↵ Product Token []: ↵ Hardware-Id []: ↵ Checksum []: 2-NEFB-BGNI-OFJP-PFEE ↵ License Database File: SYS$COMMON:[SYSEXE]LMF$LICENSE.LDB Issuer: DEC Authorization: HOBBYIST-VA-KEYxxxxx-xxxxxx Producer: DEC Product Name: BASIC Units: 0 Date: Version: Termination Date: 28-APR-2017 Availability: Activity: CONSTANT=100 Options: Token: Hardware ID: Checksum: 2-NEFB-BGNI-OFJP-PFEE Is this information correct? [YES]: ↵ Registering BASIC license in SYS$COMMON:[SYSEXE]LMF$LICENSE.LDB... Do you want to LOAD this license on this system? [YES]: ↵ %LICENSE-I-LOADED, DEC BASIC was successfully loaded with 0 units VMS License Management Utility Options: 1. Register a Product Authorization Key 2. Amend an existing Product Authorization Key 3. Cancel an existing Product Authorization Key 4. List Product Authorization Keys 5. Modify an existing Product Authorization Key 9. Exit this procedure Type '?' at any prompt for a description of the information requested. Enter one of the above choices [1]: 9 ↵ CAEPG2::system>
Running the Installation Verification Procedure
With the BASIC license PAK loaded, we can now run the IVP:
CAEPG2::system> @SYS$SYSROOT:[SYSTEST.BASIC]BASIC$IVP.COM ↵
Executing VAX BASIC installation verification procedure
%VMSINSTAL-I-IVPSUCCESS, VAX BASIC V3.3 Installation test PASSED
The BASIC IVP has succeeded
CAEPG2::system>
Running BASIC
Our installation is complete. We can now run BASIC from any terminal that that is connected to the system, provided the user has adequate privileges. So BASIC can be run from the system console, or from any number of terminals (VT100, VT220, etc) connected to a terminal server.
Here’s how we start BASIC, type in and run a simple program. Note that we have to type “EXIT” twice to return back to VMS. When we first attempt to EXIT, BASIC warns us that we have unsaved changes. No such warning is given on the second attempt to EXIT.
CAEPG2::system> BASIC ↵ VAX BASIC V3.3 Ready 10 FOR I = 1 TO 10 ↵ 20 PRINT "Welcome to the VAXserver 3400!" ↵ 30 NEXT i ↵ 40 END ↵ LIST ↵ NONAME 1-MAY-2016 21:57 10 FOR I = 1 TO 10 20 PRINT "Welcome to the VAXserver 3400!" 30 NEXT I 40 END Ready RUN ↵ NONAME 1-MAY-2016 21:57 Welcome to the VAXserver 3400! Welcome to the VAXserver 3400! Welcome to the VAXserver 3400! Welcome to the VAXserver 3400! Welcome to the VAXserver 3400! Welcome to the VAXserver 3400! Welcome to the VAXserver 3400! Welcome to the VAXserver 3400! Welcome to the VAXserver 3400! Welcome to the VAXserver 3400! Ready EXIT ↵ %BASIC-W-CHANGES, unsaved change has been made, CTRL/Z or EXIT to exit Ready EXIT ↵ CAEPG2::system>
Still to do:
* Add a download file with the 5 tapes and various docs