Compiling PrBoom on OpenVMS 8.4 (Alpha)

This was something I have wanted to do in a while and could not find courage and time to do so. Who would not want to play the most legendary game from ID-Soft ever made  ?

!!! We will do so on the OpenVMS system !!!!

First of all I would like to mention that most of the porting of the SDL as well as the PrBoom code was done by Alexey Chupahin who’s original site is no longer accessible ( was located here http://fafner.dyndns.org/%7Ealexey/libsdl/public.html ) Unfortunately only  incomplete snapshots exist on archive.org from which we cannot download the needed OpenVMS configure.com files and the source code for the particular versions

Luckily almost complete archive for the needed source files as well as the VMS patches can be found here http://nchrem.tnw.tudelft.nl/openvms/software2.html#SDL

I have downloaded all the needed files so that it would be easier for us to compile and build the needed libraries in order to play Doom on OpenVMS, this is divided into multiple steps which we will go through.

All the files below are available from my archive here : http://45.76.81.249/OpenVMS/Alpha/

Pre-requizites 

– OpenVMS Alpha C and C++ compilers (Im using HP C V7.3-009 on OpenVMS Alpha V8.4   and HP C++ V7.3-009 for OpenVMS Alpha V8.4) and the corresponding licenses for these (you can get the hobbyist one as I have described it here ( https://astr0baby.wordpress.com/2017/10/22/setting-up-dw-motif-on-openvms-8-4-2-alphavm-linux64/)  As well as a fully working TCPIP environment and the DW-MOTIF X11 environment.   I am no going to cover the C and CXX installation procedure here.

Step 1. Building MMK

We first need to build an OpenVMS MMK  (Make) utility in order to work with the SDL and PRBOOM configure.com scripts

We can download the ZIP archive from here http://45.76.81.249/OpenVMS/Alpha/mmk.zip

The mmk.zip needs to be uploaded to the OpenVMS environment via FTP or SCP (I use FTP)   and lets create a remote OpenVMS Build directory infrastructure. In order to make things simple I’m running my simulation under SYSTEM account and create the following structure on my primary disk

SYS$SYSROOT:[SYSMGR.BUILD.MMK]   <– which will hold the mmk.zip (make sure to use bin format when uploading binary files)

230 User logged in.
Remote system type is VMS.
ftp> bin
200 TYPE set to IMAGE.
ftp> pwd
257 "SYS$SYSROOT:[SYSMGR.BUILD]" is current directory.
ftp> mkdir MMK
257 "SYS$SYSROOT:[SYSMGR.BUILD.MMK]" directory created.
ftp> cd MMK
250-CWD command successful.
250 New default directory is SYS$SYSROOT:[SYSMGR.BUILD.MMK]
ftp> put mmk.zip
local: mmk.zip remote: mmk.zip
200 PORT command successful.
150 Opening data connection for SYS$COMMON:[SYSMGR.BUILD.MMK]mmk.zip;1 (10.0.2.2,48665)
226 Transfer complete.
451343 bytes sent in 0.07 secs (6.5853 MB/s)
ftp>

We will also need to upload UNZIP.EXE from here http://45.76.81.249/OpenVMS/Alpha/unzip.exe and place it in the SYS$SYSROOT:[SYSMGR.BUILD.MMK] directory to extract the mmk.zip as well as VMSTAR.EXE from here http://45.76.81.249/OpenVMS/Alpha/vmstar.exe

ftp> pwd
257 "SYS$SYSROOT:[SYSMGR.BUILD]" is current directory.
ftp> mkdi MMK
257 "SYS$SYSROOT:[SYSMGR.BUILD.MMK]" directory created.
ftp> cd MMK
250-CWD command successful.
250 New default directory is SYS$SYSROOT:[SYSMGR.BUILD.MMK]
ftp> put mmk.zip
local: mmk.zip remote: mmk.zip
200 PORT command successful.
150 Opening data connection for SYS$COMMON:[SYSMGR.BUILD.MMK]mmk.zip;1 (10.0.2.2,44533)
226 Transfer complete.
451343 bytes sent in 0.05 secs (9.3386 MB/s)
ftp>


230 User logged in.
Remote system type is VMS.
ftp> bin
200 TYPE set to IMAGE.
ftp> cd BUILD
250-CWD command successful.
250 New default directory is SYS$SYSROOT:[SYSMGR.BUILD]
ftp> put vmstar.exe
local: vmstar.exe remote: vmstar.exe
200 PORT command successful.
150 Opening data connection for SYS$SYSROOT:[SYSMGR.BUILD]vmstar.exe;2 (10.0.2.2,57935)
226 Transfer complete.
42496 bytes sent in 0.00 secs (519.5814 MB/s)
ftp>

Now we can extract the mmk.zip and build it. This is done simply by defining the UNZIP.EXE path and running it against the ZIP archive

$ unzip :== $SYS$SYSROOT:[SYSMGR.BUILD.MMK]unzip.exe
$ unzip mmk.zip 
Archive: SYS$SYSROOT:[SYSMGR.BUILD.MMK]mmk.zip;1
<---cut--->
inflating: [.source]tpadef.h 
$

Next we run the @link.com script to build MMK

$ @link.com
$ LINK/EXEC=MMK.EXE/NOTRACE MMK.Alpha_OPT/OPT
COLLECT=CLUSTER1,$$$COPYRIGHT
BIN_DIR:MMK.OLB/INCLUDE=(MMK,DEFAULT_RULES)/LIB
$ dir *.exe

Directory SYS$SYSROOT:[SYSMGR.BUILD.MMK]

MMK.EXE;1 unzip.exe;1

We will now define the MMK.EXE path for the next builds since it is needed for the SDL and PrBoom configure.com scripts

$ mmk :== $SYS$SYSROOT:[SYSMGR.BUILD.MMK]mmk.exe

Step 2. Building SDL-1.2.14

Now we can return back to the core build directory and upload SDL

$ set def SYS$SYSROOT:[SYSMGR.BUILD]

SDL-1.2.14 can be downloaded from here

http://45.76.81.249/OpenVMS/Alpha/SDL-1_2_14.ZIP 

and the OpenVMS SDL-1_2_14-PATCH here

http://45.76.81.249/OpenVMS/Alpha/SDL-1_2_14-VMSPATCH.TAR

We extract the SDL-1_2_14.ZIP and the SDL-1_2_14-VMSPATCH.TAR archives , patch the sources and build the libraries.

$ unzip sdl-1_2_14.zip
$ vmstar :== $SYS$SYSROOT:[SYSMGR.BUILD]vmstar.exe
$ vmstar -xvf sdl-1_2_14-vmspatch.tar
$ set def SYS$SYSROOT:[SYSMGR.BUILD.sdl-1_2_14]

$ @configure.com
 
Configuring LIBSDL library
(c) Alexey Chupahin
alexey@vaxman.de
Rostov-on-Don, Russia
 
Checking architecture 	...  Alpha
Compiler		...  DEC C
Checking build utility	...  MMK
 
Checking for getenv ...   Yes
Checking for nanosleep ...   Yes
Checking for snprintf ...   Yes
Checking for vsnprintf ...   Yes
Checking for stdint.h ...   No
Checking for X11 ...   Yes
Checking for OpenVMS Multimedia  ...   No
OpenGL library support ...   No
*******************************************
Now type
@BUILD
$ 
$ @BUILD 

<-- cut -->  AFTER SOME TIME <-- cut --> 

COPY sdl$shr.exe SYS$SHARE:
 
***************************************************************************** 
LIBSDL$STARTUP.COM has been created. 
This file setups all logicals needed. It should be execute before using LibSDL 
Nice place to call it - LOGIN.COM 
Usage:
CC/INC=SDL TEST
LINK/THREAD=UP TEST,LIBSDL:LIBSDL$SHR/OPT
or
LINK/THREAD=UP TEST,LIBSDL:LIBSDL/OPT
for static libSDL
***************************************************************************** 


So now we are ready to define the SDL libraries for the next build of SDL-Mixer, which we will do simply by executing the LIBSDL$STARTUP.COM  script

$ @LIBSDL$STARTUP.COM

Step 3. Building SDL-mixer1.2.8b

We change back to the BUILD directory and upload and extract the SDL-Mixer source and Patches. You can get the SDL-Mixer source here

http://45.76.81.249/OpenVMS/Alpha/SDL-MIXER-1.2.8b.zip

and the OpenVMS patches here

http://45.76.81.249/OpenVMS/Alpha/SDL_MIXER-1_2_8b-VMSPATCH.zip

We upload them via FTP to the SYS$SYSROOT:[SYSMGR.BUILD]   and extract/patch and compile it

$ set def SYS$SYSROOT:[SYSMGR.BUILD]
$ unzip SDL_MIXER-1_2_8b.zip
$ unzip SDL_MIXER-1_2_8b-VMSPATCH.zip
$ set DEF SYS$SYSROOT:[SYSMGR.BUILD.sdl_mixer-1_2_8b]
$ @configure.com
 
Configuring SDL_Mixer library
(c) Alexey Chupahin aka CHAPG
 
Checking architecture   ...  Alpha
Checking OS             ...  OpenVMS V8.4    
Compiler		...  DEC C
Checking build utility	...  MMK
 
checking version libSDL  : 1.2.14
Checking for correct libSDL  ...   Yes
generating LIBSDL_MIXER$SHR.OPT
generating LIBSDL_MIXER.OPT
generating LIBSDL_MIXER$DEF.OPT
 
 
Now you can type @BUILD 
$ @build.com

<---- CUT   AFTER SOME TIME  CUT -----> 
***************************************************************************** 
LIBSDL_MIXER$STARTUP.COM has been created. 
This file setups all logicals needed. It should be execute before using 
Nice place to call it - LOGIN.COM 
***************************************************************************** 
Important! You are using shared library of libSDL. To compile a project with lib
SDL_MIXER you should: 
CC/INCL=(SDL,LIBSDL_MIXER) PROJECT.C
LINK/THREAD=UP  PROJECT,LIBSDL_MIXER:LIBSDL_MIXER$SHR/OPT,LIBSDL:LIBSDL$SHR/OPT

$ @LIBSDL_MIXER$STARTUP.COM 
%DCL-E-OPENIN, error opening SYS$SYSROOT:[SYSMGR.BUILD.SDL_MIXER-1_2_8B]LIBSDL_M
IXER$STARTUP.COM; as input
-RMS-E-FLK, file currently locked by another user

Now if  we get the above message that the file currently locked by another user we just need to relogin and re-define all the variables in the system (Im welcome for any suggestions on how to bypass this)

$ logout
SYSTEM logged out at 7-MAR-2019 23:55:10.78

Welcome to OpenVMS (TM) Alpha Operating System, Version V8.4

$ set def SYS$SYSROOT:[SYSMGR.BUILD.SDL-1_2_14]
$ @LIBSDL$STARTUP.COM
$ set def SYS$SYSROOT:[SYSMGR.BUILD.SDL_MIXER-1_2_8b]
$ @LIBSDL_MIXER$STARTUP.COM
$ set def SYS$SYSROOT:[SYSMGR.BUILD]              
$ vmstar :== $SYS$SYSROOT:[SYSMGR.BUILD]vmstar.exe
$ unzip :== $SYS$SYSROOT:[SYSMGR.BUILD]unzip.exe
$ mmk :== $SYS$SYSROOT:[SYSMGR.BUILD.MMK]mmk.exe

Step 4.Building PrBoom-2.5.0

Once we have finished building SDL-Mixer we can move on to PrBoom source compilation ! We are almost there. I have modified the configure.com OpenVMS patch for PrBoom to build on my emulated OpenVMS 8.4 Alpha without the need for zlib and libpng libraries since the original patch from here (http://nchrem.tnw.tudelft.nl/openvms/software2.html) required them, but they are not essential

Lets first get the sources and the patches for PrBoom 2.5.0 here

http://45.76.81.249/OpenVMS/Alpha/prboom-2_5_0.tar

and original and my customized VMS patches here

http://45.76.81.249/OpenVMS/Alpha/prboom-2_5_0_vmspatch.zip

http://45.76.81.249/OpenVMS/Alpha/CONFIGURE.COM IMPORTANT TO USE THIS CONFIGURE.COM !!!!!!

We upload them via FTP to the SYS$SYSROOT:[SYSMGR.BUILD]   and extract and patch the source code and as a final step replace with the above CONFIGURE.COM in SYS$SYSROOT:[SYSMGR.BUILD.prboom-2_5_0]

$ set def SYS$SYSROOT:[SYSMGR.BUILD]
$ vmstar -xvf prboom-2_5_0.tar
$ unzip prboom-2_5_0_vmspatch.zip
Archive: SYS$SYSROOT:[SYSMGR.BUILD]prboom-2_5_0_vmspatch.zip;1
inflating: [.prboom-2_5_0]configure.com 
replace [.prboom-2_5_0.src]m_fixed.h? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
$ copy CONFIGURE.COM SYS$SYSROOT:[SYSMGR.BUILD.prboom-2_5_0] 
$ set def SYS$SYSROOT:[SYSMGR.BUILD.prboom-2_5_0]
$ @CONFIGURE.COM;2 
 
Configuring PRBOOM
(c) Alexey Chupahin (aka CHAPG) 
 
Checking architecture   ...  Alpha
Checking OS             ...  OpenVMS V8.4    
Compiler		...  DEC C
Checking build utility	...  MMK
 
checking version libSDL  : 1.2.14
Checking for correct libSDL  ...   Yes
Checking for TCPIP ...   Yes
checking version LIBSDL_MIXER  : 1.2.8
Checking for correct LIBSDL_MIXER ...   Yes
Checking for vsnprintf ...   Yes
Generating CONFIG.H
Generating DESCRIP.MMS
Generating BUILD.COM 
 
 
Now you can type @BUILD 
$ set def SYS$SYSROOT:[SYSMGR.BUILD.PRBOOM-2_5_0]
$ @BUILD 

<--- CUT AFTER SOME TIME CUT ---> 

LINK/EXE=DOOM.EXE [.SDL]I_MAIN,[]DOOM/LIB,libsdl:libsdl$shr/opt,libsdl_mixer:lib
sdl_mixer/opt
%LINK-W-WRNERS, compilation warnings
in module i_main file SYS$SYSROOT:[SYSMGR.BUILD.prboom-2_5_0.src.SDL]I_M
AIN.OBJ;1
%LINK-W-WRNERS, compilation warnings
in module g_game file SYS$SYSROOT:[SYSMGR.BUILD.prboom-2_5_0.src]DOOM.OL
B;1
%LINK-W-WRNERS, compilation warnings
in module i_video file SYS$SYSROOT:[SYSMGR.BUILD.prboom-2_5_0.src]DOOM.O
LB;1
%LINK-W-WRNERS, compilation warnings
in module m_misc file SYS$SYSROOT:[SYSMGR.BUILD.prboom-2_5_0.src]DOOM.OL
B;1
%LINK-W-WRNERS, compilation warnings
in module v_video file SYS$SYSROOT:[SYSMGR.BUILD.prboom-2_5_0.src]DOOM.O
LB;1
%LINK-W-WRNERS, compilation warnings
in module w_mmap file SYS$SYSROOT:[SYSMGR.BUILD.prboom-2_5_0.src]DOOM.OL
B;1
$!
$ 

Make sure to copy the prboom.wad into the DOOM.EXE path as well as the DOOM.WAD of our choice

Doom1.wad can be downloaded from here

http://45.76.81.249/OpenVMS/Alpha/DOOM.WAD

And the configuration file (disables mouse movement) here

https://45.76.81.249/OpenVMS/Alpha/prboom.cfg

$ set def SYS$SYSROOT:[SYSMGR.BUILD.PRBOOM-2_5_0.data]
$ copy prboom.wad SYS$SYSROOT:[SYSMGR.BUILD.PRBOOM-2_5_0]
$ set def SYS$SYSROOT:[SYSMGR.BUILD.PRBOOM-2_5_0.src]
$ copy DOOM.EXE SYS$SYSROOT:[SYSMGR.BUILD.PRBOOM-2_5_0]
$ set def SYS$SYSROOT:[SYSMGR.BUILD.PRBOOM-2_5_0]

Following needs to be executed in the DW-MOTIF X11 windows 

$ doom :== $SYS$SYSROOT:[SYSMGR.BUILD.PRBOOM-2_5_0]doom.exe

That is it and now you can enjoy some Doom on the OpenVMS AXP ;)

Huge thanks go to the original Doom porter Alexey Chupahin (SDL, SDL-mixer, Prboom patches)

Also thanks go to joukj@hrem.nano.tudelft.nl for providing his sets of great OpenVMS patches for SDL and SDL-mixer as well as PrBoom http://nchrem.tnw.tudelft.nl/openvms/software2.html

 

About astr0baby

Please run Adblock or similar... we have been told to do so since Carl Sagan wrote the Contact .
This entry was posted in Uncategorized. Bookmark the permalink.

2 Responses to Compiling PrBoom on OpenVMS 8.4 (Alpha)

  1. Anthk says:

    Sorry if I’m late, but, as a curiosity, would Nethack/Slashem compile under VMS? Nethack 3.4.3 or Slashem v0.7 would be the easiest as the second is based on the first, and NH 3.4.3 has been ported to anything.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.