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