MVT Compilers from Source
In October, 2008 I started working toward building the MVT compilers from the available source. At that time I only completed the work on the Sort/Merge, which seemed to be the primary interest of everyone involved at the time. I made that available when it was complete from another link on this site. Because of a recent post on the Turnkey-MVS group I resurrected the partial work I had already done towards the remaining MVT compilers and have placed the results on this page. I was able to recover what I had started for COBOL and RPG, and then completed them to the same state as the Sort/Merge. I intended to include FORTRAN G and FORTRAN H, but ran into problems, the details of which I elaborate more on below.
As I was working on this, I dedicated a 3350 volume to the project and, since I have the space on the server for this site, I am making the entire volume image available for download. However, if you are only interested in a particular compiler, I have made DSSDUMP format tapes available for each of the compilers, so no one is required to download more than they are interested in. The links to the individual tapes are located in the section corresponding to each compiler below.
The 3350 volume contains its own User Catalog, into which all the datasets on the volume are catalogued. The volume and a jobstream to import the User Catalog are available from mvtsrc.tar.gz (24.1 MB) [MD5: 05470d014896e805526bd822b2580ad8]. An annotated VTOC listing for the volume may be viewed at: MVTSRC.3350 VTOC. Download the archive, extract the volume image into the directory where you store your MVS DASD volume images, and submit the import jobstream to import the User Catalog into your Master Catalog. If you prefer to utilize compressed DASD images, run the DASDCOPY utility to compress the volume image.
June 2016 Update - Phil Roberts pointed out to me that the MTS distributions included some source for the MVT FORTRAN compilers. I was able to retrieve the source for the IEYUNF module, which was the only roadblock to assembling the FORTRAN G compiler from source. The copy of IEYUNF that had been available prior to this was truncated following line 128 of the source. The 128 lines we had were identical to the first 128 lines of the IEYUNF module from the MTS distribution. Although the other source for the other FORTRAN G modules on the MTS distribution had been modified to run under MTS, it is likely that this source is the original source. Therefore I have added FORTRAN G (and a few days later, FORTRAN H) to this page. As with the other MVT material, I cannot verify that object/load modules built from source are a 100% match with the object/load modules obtained from the Rick Fochtman CD-ROM.
I have been away from this project for a long time, but with Phil's help I have now added the two FORTRAN compilers to the material here. I hope to devote more time to this project in the future, hopefully soon, but at least this may provide a starting point for anyone else who wants to attempt comparison of the object/load modules generated from source versus that installed from the object libraries included with OS/360 MVT.
If you had already downloaded this DASD volume and installed it on your MVS system, you may upgrade to the latest version by simply downloading the current archive, with Hercules/MVS shut down unpack it placing the DASD volume image in the location where your previous mvtsrc.3350 volume was (replacing it), and then IPL MVS. It is not necessary to re-import the catalog to have access to the new datasets on the volume.
I have not included the ALGOL compiler, simply because Tom Armstrong has completely refurbished the compiler and provided it to the Hercules' community. It is available from this site at ALGOL.
The datasets related to the COBOL compiler are:
Dataset Attributes Allocation Contents MVTSRC.CB545 FB/80/9440 456 Tracks/2 Dir Blocks/12 Members ALC source loaded from Rick Fochtman's CD MVTSRC.COBLIB U/13030 15 Tracks/13 Dir Blocks/73 Members COBOL library built from source MVTSRC.COBOL.CNTL FB/80/9440 30 Tracks/5 Dir Blocks/5 Members jobstreams to assemble, link, delink, and run a test compile MVTSRC.COBOL.LISTINGS FBA/121/9438 900 Tracks/4 Dir Blocks/58 Members listings from the assemble and link jobs MVTSRC.COBOL.LOAD U/19069 30 Tracks/5 Dir Blocks/12 Members load modules built from the source MVTSRC.COBOL.MACLIB FB/80/19040 30 Tracks/10 Dir Blocks/3 Members macros required to assemble the source MVTSRC.COBOL.OBJECT FB/80/3120 45 Tracks/5 Dir Blocks/56 Members object decks from assembling each source module MVTSRC.COBOL.XOBJECT F/80/80 30 Tracks/5 Dir Blocks/56 Members object decks from delinking the original load modules MVTSRC.LM546 FB/80/3120 42 Tracks/12 Dir Blocks/44 Members ALC source loaded from Rick Rochtman's CD MVTSRC.SYS1.COBLIB U/13030 90 Tracks/40 Dir Blocks/73 Members COBOL library from MVT System Generation MVTSRC.SYS1.MACLIB FB/80/3120 810 Tracks/100 Dir Blocks/381 Members Macro Library from MVT System Generation
A DSSDUMP format tape containing these eleven datasets and a jobstream to restore the tape (using DSSREST) is available in the archive mvtcobol.tar.gz (6.8 MB) [MD5: 572c1371029187b723eae0a4e8a6b319]. DSSREST is available on SYSCPK. The restore jobstream is written to restore to a 3350 volume with VOL=SER=MVTSRC, so you may need to adjust parameters if your target volume is not 3350.
The source for IKFCBL01 is generated during MVT System Generation and is determined by settings for default compile time options, which are specified in the MVT Stage 1 jobstream. I have included the System Generation macro and an annotated source member that will allow you to alter this source module to conform to your requirements.
I have not completed a suitable comparison of the assembled source to the distributed load modules, but my conclusion is that they do not match. The compiler built from the source performs as expected in the tests I have completed. I include the SYS1.MACLIB from MVT, because any meaningful attempt to compare the output from the compiled source to the load modules taken from a freshly generated MVT system will more closely match if the MVT system macros are used. Assembling the source using the MVS SYS1.MACLIB is guaranteed to result in object/load modules that are different from those that are the product of MVT System Generation.
The datasets related to the FORTRAN G compiler are:
Dataset Attributes Allocation Contents MVTSRC.FORTG.CNTL FB/80/9440 30 Tracks/5 Dir Blocks/5 Members jobstreams to assemble, link, delink, and run a test compile MVTSRC.FORTG.LISTINGS FBA/121/9438 600 Tracks/10 Dir Blocks/92 Members listings from the assemble and link jobs MVTSRC.FORTG.LOAD U/19069 30 Tracks/5 Dir Blocks/6 Members load modules built from the source MVTSRC.FORTG.MACLIB FB/80/19040 60 Tracks/10 Dir Blocks/111 Members macros required to assemble the source MVTSRC.FORTG.OBJECT FB/80/3120 30 Tracks/5 Dir Blocks/90 Members object decks from assembling each source module MVTSRC.FORTG.XOBJECT F/80/80 45 Tracks/5 Dir Blocks/76 Members object decks from delinking the original load modules MVTSRC.FORTLIB U/13030 30 Tracks/30 Dir Blocks/66 Members FORTRAN library built from source MVTSRC.FO520 FB/80/3120 180 Tracks/4 Dir Blocks/13 Members ALC source loaded from Rick Fochtman's CD MVTSRC.LM501 FB/80/3120 74 Tracks/20 Dir Blocks/78 Members ALC source loaded from Rick Fochtman's CD MVTSRC.SYS1.FORTLIB U/13030 120 Tracks/40 Dir Blocks/163 Members FORTRAN library from MVT System Generation MVTSRC.SYS1.MACLIB FB/80/3120 810 Tracks/100 Dir Blocks/381 Members Macro Library from MVT System Generation
A DSSDUMP format tape containing these eleven datasets and a jobstream to restore the tape (using DSSREST) is available in the archive mvtfortg.tar.gz (3.9 MB) [MD5: d6c020373956f18859b418fd7240c571]. DSSREST is available on SYSCPK. The restore jobstream is written to restore to a 3350 volume with VOL=SER=MVTSRC, so you may need to adjust parameters if your target volume is not 3350.
I have not completed a suitable comparison of the assembled source to the distributed load modules, but my conclusion is that they do not match. The compiler built from the source performs as expected in the tests I have completed. I include the SYS1.MACLIB from MVT, because any meaningful attempt to compare the output from the compiled source to the load modules taken from a freshly generated MVT system will more closely match if the MVT system macros are used. Assembling the source using the MVS SYS1.MACLIB is guaranteed to result in object/load modules that are different from those that are the product of MVT System Generation.
The datasets related to the FORTRAN H compiler are:
Dataset Attributes Allocation Contents MVTSRC.FORTH.CNTL FB/80/9440 30 Tracks/5 Dir Blocks/5 Members jobstreams to assemble, link, delink, and run a test compile MVTSRC.FORTH.LISTINGS VBA/137/9416 900 Tracks/10 Dir Blocks/134 Members listings from the assemble and link jobs MVTSRC.FORTH.LOAD U/19069 30 Tracks/5 Dir Blocks/1 Member load module built from the source MVTSRC.FORTH.MACLIB FB/80/19040 15 Tracks/5 Dir Blocks/3 Members macros required to assemble the source MVTSRC.FORTH.OBJECT FB/80/3120 79 Tracks/10 Dir Blocks/133 Members object decks from assembling each source module MVTSRC.FORTH.XOBJECT F/80/80 75 Tracks/7 Dir Blocks/133 Members object decks from delinking the original load modules MVTSRC.FORTLIB U/13030 30 Tracks/30 Dir Blocks/66 Members FORTRAN library built from source MVTSRC.FO500 FB/80/3120 180 Tracks/4 Dir Blocks/13 Members ALC source loaded from Rick Fochtman's CD MVTSRC.SYS1.MACLIB FB/80/3120 810 Tracks/100 Dir Blocks/381 Members Macro Library from MVT System Generation
A DSSDUMP format tape containing these nine datasets and a jobstream to restore the tape (using DSSREST) is available in the archive mvtforth.tar.gz (3.8 MB) [MD5: f53ba72fe3bd53c74f16a52e31a954d9]. DSSREST is available on SYSCPK. The restore jobstream is written to restore to a 3350 volume with VOL=SER=MVTSRC, so you may need to adjust parameters if your target volume is not 3350.
A significant portion of the FORTRAN H compiler is written in FORTRAN code and must be compiled with FORTRAN H with the undocumented XL parm specified. It is also necessary to specify OPT=02 to compile some of the modules, so I elected to compile all of the FORTRAN code with OPT=02. I do not think I would have figured out all the required permutations without the help of Phil Roberts. Phil was also able to track down the documentation (such as there is) for the XL compiler option: www.slac.stanford.edu/vault/collvault/greylit/cgtm/CGTM51.pdf
Note: the library modules (MVTSRC.FORTLIB) are built with the FORTRAN G compiler and are not re-built by the jobstreams for FORTRAN H.
I have not completed a suitable comparison of the assembled source to the distributed load modules, but my conclusion is that they do not match. The compiler built from the source performs as expected in the tests I have completed. I include the SYS1.MACLIB from MVT, because any meaningful attempt to compare the output from the compiled source to the load modules taken from a freshly generated MVT system will more closely match if the MVT system macros are used. Assembling the source using the MVS SYS1.MACLIB is guaranteed to result in object/load modules that are different from those that are the product of MVT System Generation.
I have not included the PL/I compiler, because Tom Armstrong is also working on updating it, as he did the ALGOL compiler. From statements he has made about the work in progress, I know that there are severe problems involved in attempting to build the compiler from the source we have, so there is simply not much point in providing the source at this point. Hopefully Tom will soon release the updated version of PL/I to share with the Hercules community.
The datasets related to the RPG compiler are:
Dataset Attributes Allocation Contents MVTSRC.RG038 FB/80/9440 192 Tracks/4 Dir Blocks/56 Members ALC source loaded from Rick Fochtman's CD MVTSRC.RPG.CNTL FB/80/9440 30 Tracks/5 Dir Blocks/5 Members jobstreams to assemble, link, delink, and run a test compile MVTSRC.RPG.LISTINGS FBA/121/9438 330 Tracks/4 Dir Blocks/57 Members listings from the assemble and link jobs MVTSRC.RPG.LOAD U/19069 30 Tracks/6 Dir Blocks/27 Members load modules built from the source MVTSRC.RPG.OBJECT FB/80/3120 15 Tracks/4 Dir Blocks/56 Members object decks from assembling each source module MVTSRC.RPG.XOBJECT F/80/80 45 Tracks/4 Dir Blocks/56 Members object decks from delinking the original load modules MVTSRC.SYS1.MACLIB FB/80/3120 810 Tracks/100 Dir Blocks/381 Members Macro Library from MVT System Generation
A DSSDUMP format tape containing these seven datasets and a jobstream to restore the tape (using DSSREST) is available in the archive mvtrpg.rar (3.2 MB) [MD5: 15e88f72fcbfd9def3816c7e469b8ef4]. DSSREST is available on SYSCPK. The restore jobstream is written to restore to a 3350 volume with VOL=SER=MVTSRC, so you may need to adjust parameters if your target volume is not 3350.
I have not completed a suitable comparison of the assembled source to the distributed load modules, but my conclusion is that they do not match. The compiler built from the source performs as expected in the tests I have completed. I include the SYS1.MACLIB from MVT, because any meaningful attempt to compare the output from the compiled source to the load modules taken from a freshly generated MVT system will more closely match if the MVT system macros are used. Assembling the source using the MVS SYS1.MACLIB is guaranteed to result in object/load modules that are different from those that are the product of MVT System Generation.
The datasets related to the SORT/MERGE utility are:
Dataset Attributes Allocation Contents MVTSRC.SM023 FB/80/9440 630 Tracks/13 Dir Blocks/252 Members ALC source loaded from Rick Fochtman's CD MVTSRC.SORT.CNTL FB/80/9440 30 Tracks/5 Dir Blocks/5 Members jobstreams to assemble, link, delink, and run a test compile MVTSRC.SORT.LISTINGS FBA/121/9438 330 Tracks/4 Dir Blocks/57 Members listings from the assemble and link jobs MVTSRC.SORT.LOAD U/19069 30 Tracks/6 Dir Blocks/27 Members load modules built from the source MVTSRC.SORT.MACLIB FB/80/19040 10 Tracks/2 Dir Blocks/10 Members macros required to assemble the source MVTSRC.SORT.OBJECT FB/80/3120 30 Tracks/52 Dir Blocks/250 Members object decks from assembling each source module MVTSRC.SORT.PROCLIB FB/80/19040 4 Tracks/2 Dir Blocks/2 Members JCL procedures to execute SORT/MERGE MVTSRC.SORT.XOBJECT F/80/80 60 Tracks/36 Dir Blocks/250 Members object decks from delinking the original load modules MVTSRC.SORTLIB U/13030 30 Tracks/36 Dir Blocks/214 Members SORT library built from the source MVTSRC.SYS1.MACLIB FB/80/3120 810 Tracks/100 Dir Blocks/381 Members Macro Library from MVT System Generation MVTSRC.SYS1.SORTLIB U/13030 90 Tracks/40 Dir Blocks/214 Members SORT library from MVT System Generation
A DSSDUMP format tape containing these eleven datasets and a jobstream to restore the tape (using DSSREST) is available in the archive mvtsort.rar (9.1 MB) [MD5: 534ef4970912ec979b21420a33905059]. DSSREST is available on SYSCPK. The restore jobstream is written to restore to a 3350 volume with VOL=SER=MVTSRC, so you may need to adjust parameters if your target volume is not 3350.
I have not completed a suitable comparison of the assembled source to the distributed load modules, but my conclusion is that they do not match. The Sort/Merge utility built from the source performs as expected in the tests I have completed. I include the SYS1.MACLIB from MVT, because any meaningful attempt to compare the output from the compiled source to the load modules taken from a freshly generated MVT system will more closely match if the MVT system macros are used. Assembling the source using the MVS SYS1.MACLIB is guaranteed to result in object/load modules that are different from those that are the product of MVT System Generation.
I hope that you have found my instructions useful. If you have questions that I can answer to help expand upon the information I have included here, please don't hesitate to send them to me: