Installing VAX BASIC 3.3

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:

  1. Wait for VMSINSTAL to prompt us to change tapes
  2. In the SIMH console window, press CTRL-E to pause SIMH
  3. 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
  4. 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