- 「メインフレーム・コンピューター」で遊ぼう - http://www.arteceed.net -

OS名とバージョン番号の求め方

OS名とバージョンを求める方法

MSPもVOS3も互換OSなので、プログラムの一部だけを対応すれば、残りはMVSのコードのままで問題なく動く、ということは多々ある。そのような場合、OS毎にソースやオブジェクトを分けると反って煩わしいため、同じロードモジュールのままでMVS、MSP、VOS3に対応させたいことも多い。そこで現在プログラムが動いているOS名がわかれば、それに応じて飛び先を変える、OSに対応した処理モジュールを呼び出す、などの作り方をすることもできる。

OSがMVSなのかMSPなのかVOS3なのかを判定する

    *                                  *----------------------------------*
    *                                  *  LOAD CVT AND CVT PREFIX         *
    *                                  *----------------------------------*
             L     R9,CVTPTR                GR9 --> CVT
             USING CVTMAP,R9                ADDRESS TO CVT
             LR    R8,R9                    COPY CVT ADDRESS
             SH    R8,=Y(CVTMAP-CVTFIX)     LOCATE TO CVT PREFIX
             USING CVTFIX,R8                ADDRESS TO CVT PREFIX
             SPACE ,
    *                                  *----------------------------------*
    *                                  *  MVS CVTPRODN(CVT-X28) INCLUDED  *
    *                                  *  CL8'SPN.N.N '                   *
    *                                  *----------------------------------*
             CLC   CVTPRODN(2),=CL2'SP'     ARE WE UNDER MVS ?
             BE    OPSYSMVS                 YES, DO MVS WAY
             LR    R1,R9                    TEST UNDER VOS3
             SH    R1,=H'4'                 GET CVT -X4
             CLC   0(4,R1),=CL4'2000'       ARE WE UNDER VOS3 ?
             BNL   OPSYSVOS                 YES, DO VOS3 WAY
             B     OPSYSFUJ                 NO, IT WILL BE FACOM OS
             :
             :
             :
             IHAPSA ,                       PSA MAP
             CVT   DSECT=YES,PREFIX=YES     CVT MAP
             IHAECVT ,                      ECVT MAP
             :
    

    プログラムはMVSのマクロを使ってアセンブルするものである。CVTプレフィックスのCVTPRODNの先頭2文字が’SP’ならOSはMVSと判定してよい。そうでなければCVTの-4番地の4バイトが文字’2000’以上かを判定しそうであればOSはVOS3と判定してよい。残りは富士通のOSとなる。
    なお、具体的なOS名称やバージョン番号の格納場所には互換はない。

MVSのOS名とバージョンを求める

    *                                  *----------------------------------*
    *                                  *  GET MVS OS NAME AND VERSION     *
    *                                  *----------------------------------*
    OPSYSMVS DS    0H
             MVC   OSNAME,=CL8'MVS'         SET OS NAME AS 'MVS'
             MVC   OSVERS,CVTPRODN          MOVE OS LEVEL(SPN.N.N)
             OI    OSVERS+7,C' '            TRANSLATE TO UPPER CASE
             SPACE ,
             TM    CVTOSLV1,CVTOS390        OS/390 OR HIGHER ?
             BNO   DONE...                  NO, DONE...
             SPACE ,
             L     R1,CVTECVT               LOAD EXTEND CVT ADDRESS
             USING ECVT,R1                  ADDRESS IT
             MVC   OSNAME,ECVTPNAM          MOVE OS NAME FROM ECVT
             MVC   OSVERS,=CL8'V99R9999'    INIT OS LEVEL(V99R9999)
             MVC   OSVERS+1(2),ECVTPVER     MOVE OS VERSION
             MVC   OSVERS+4(2),ECVTPREL     MOVE OS RELEASE LEVEL
             MVC   OSVERS+6(2),ECVTPMOD     MOVE OS MODIFY LEVEL
             DROP  R1                       FORGET ECVT
             B     DONE...                  DONE...
             SPACE ,
             :
             :
    OSNAME   DC    CL8' '                   FORMATTED OS NAME
    OSVERS   DC    CL8' '                   FORMATTED OS VERSION
             :
    

    OS/390以降のMVSではECVTにOS名(z/OSとか)とバージョン番号が格納されているのでそれをそのまま参照できる。それ以前のMVS/ESAまではCVTPRODNに格納されているSPレベル番号をバージョン番号として利用する。SPレベル番号はMVS/SPならSP1、MVS/XAはSP2、MVS/ESAはSP3?SP5となる。

VOS3のOS名とバージョンを求める

    OPSYSVOS DS    0H
             LA    2,OSNAME
             LA    3,OSVERS
             VOSVR# OS=(2),VR=(3)
             :
             :
    OSNAME   DC    CL8' '                   FORMATTED OS NAME
    OSVERS   DC    CL8' '                   FORMATTED OS VERSION
             :
    

    VOS3の場合は、VOSVR#マクロを使用する。指定したレジスターにOS名とリビジョン番号が入る。リビジョン番号からVOS3/LSやUSなどのバージョンを求めることができる。VOSVR#マクロはSYS1.MACLIBもしくはSYS1.VMODMACに入っているが、マクロの使用法はマニュアル公開されていないので詳細をここに載せることはできない。必要なら日立製作所に問い合わせる。
    モジュールをMVSでアセンブルするならVOSVR#マクロをコピーするか、インラインコードを直接書けばよい。

富士通のOS名とバージョンを求める

    *                                  *----------------------------------*
    *                                  *  ISSUE FACOM MODESEL SVC         *
    *                                  *----------------------------------*
    OPSYSFUJ DS    0H
             LA    R1,MSLSPARM              GR1 --> SYSTEM PLIST
             LA    RF,OSNAME                GR15 -> USER PLIST
             SVC   2                        ISSUE MODESEL SVC
             LA    RF,DPARM                 LOAD MODESEL USER PLIST
             USING MSLUPARM,RF              ADDRESSABILITY
             L     R1,MSLAFTAB              LOAD SYSTEM FUNCTION TABLE
             USING MSLFCTAB,R1              ADDRESSABILITY
             CLI   MSLOSID+3,MSLOSF4        ARE WE UNDER OSIV/F4 ?
             BE    OPSYSMSP                 YES,
             CLI   MSLOSID+3,MSLOSX8        ARE WE UNDER X8/FSP ?
             BE    OPSYSXSP                 YES,
             DROP  R1,RF                    FORGET MODESEL PARAMETERS
             B     DONE...                  NO, UNKNOWN OPERATING SYSTEM
             SPACE ,
    *                                  *----------------------------------*
    *                                  *  GET FOR MSP NAME AND VERSION    *
    *                                  *  GR1 INCLUDED SYSTEM FUNC TABLE  *
    *                                  *----------------------------------*
    OPSYSXSP DS    0H
    OPSYSMSP DS    0H
             USING MSLFCTAB,R1              ADDRESSABILITY
             MVC   OSNAME,MSLFCSCP          MOVE SCP NAME
             MVC   OSVERS,=CL8'V99L99'      SET  SCP VERSION SKELETON
             MVC   OSVERS+1(2),MSLFCVER     MOVE SCP VERSION
             MVC   OSVERS+4(2),MSLFCVER+2   MOVE SCP LEVEL
             DROP  R1                       FORGET FUNCTION TABLE
             B     DONE...                  DONE...
             :
             :
    OSNAME   DC    CL8' '                   FORMATTED OS NAME
    OSVERS   DC    CL8' '                   FORMATTED OS VERSION
    MSLSPARM DS    0F                       MODESEL SYSTEM PLIST
             DC    XL4'76131783'             KEY WORD
             DC    AL1(128),AL3(0)           FUNCTION CODE
             :
    ***********************************************************************
    *        FACOM OSIV/MSP MODELSEL MACRO PARAMETER DSECTS               *
    *        ==============================================               *
    ***********************************************************************
    MSLUPARM DSECT ,                        MODESEL USER PARAMETER LIST
    MSLOSID  DC    F'0'                     +0  OPERATING SYSTEM ID
    MSLOSF4  EQU   1                            ID=1: OS IS OS IV/F4
    MSLOSX8  EQU   2                            ID=2: OS IS OS IV/X8
             DC    F'0'                     +4  --- RESERVED ---
    MSLSINFO DC    F'0'                     +8  SYSTEM INFORMATION
    MSLAFTAB DC    A(0)                     +12 FUNCTION TABLE POINTER
    MSLUPLEN EQU   *-MSLUPARM               USER PLIST LENGTH
             SPACE ,
    MSLFCTAB DSECT ,                        MODESEL FUNCTION TABLE
             DC    XL2'00'
    MSLFCLEN DC    H'0'                     +2  TABLE LENGTH
    MSLFCSCP DC    XL20'00'
    MSLFCVER DC    CL4' '                   +24 SCP VERSION/LEVEL
             DC    XL16'00'
    MSLFCCPL DC    AL1(0)                   +44 CPUMODEL LENGTH
             DC    XL3'00'
    MSLFCCPU DC    CL8' '                   +48 CPUMODEL NAME
             DC    XL12'00'
    MSLFCFLG DC    XL188'00'                +68 FUNCTION FLAGS
    MSLFCSKL EQU   *-MSLFCTAB               FUNCTION TABLE STATIC LENGTH
             SPACE ,
    *                                       FUNCTION FLAGS EQUATES
    MSLSAE   EQU   MSLFCFLG+1
    MSLMAE   EQU   B'10000000'        (BIT08)SYSTEM F4/MSP E20-AE
    MSLSEX   EQU   MSLFCFLG+5
    MSLMEX   EQU   B'01000000'        (BIT41)SYSTEM MSP/EX
    MSLSCKD  EQU   MSLFCFLG+0
    MSLMCKD  EQU   B'00010000'        (BIT03)SUPPORTED CKD-DASD
    MSLSCMS  EQU   MSLFCFLG+0
    MSLMCMS  EQU   B'00000100'        (BIT05)SUPPORTED CROSS MEMORY SERVICE
    MSLSVTMG EQU   MSLFCFLG+1
    MSLMVTMG EQU   B'00000100'        (BIT13)SUPPORTED VTAM-G
    MSLSICFE EQU   MSLFCFLG+1
    MSLMICFE EQU   B'00000001'        (BIT15)SUPPORTED ICF/E
    MSLSECF  EQU   MSLFCFLG+5
    MSLMECF  EQU   B'01000000'        (BIT41)SUPPORTED ECF
    MSLSARM  EQU   MSLFCFLG+8
    MSLMARM  EQU   B'00000001'        (BIT71)SUPPORTED DATA SPACE
    MSLSRACF EQU   MSLFCFLG+5
    MSLMRACF EQU   B'00000010'        (BIT46)SUPPORTED RACF V11L10
    MSLSTISP EQU   MSLFCFLG+8
    MSLMTISP EQU   B'00000010'        (BIT70)SUPPORTED TISP(TCP/IP)
    MSLSUCB4 EQU   MSLFCFLG+9
    MSLMUCB4 EQU   B'01000000'        (BIT73)SUPPORTED 4DIGIT DEVICE
    MSLSSSU  EQU   MSLFCFLG+10
    MSLMSSU  EQU   B'00100000'        (BIT82)SUPPORTED SSU(GSEND/GRECV)
    MSLSSCMP EQU   MSLFCFLG+10
    MSLMSCMP EQU   B'00001000'        (BIT84)SUPPORTED S/SCMP SYSTEM
    MSLSR2GB EQU   MSLFCFLG+11
    MSLMR2GB EQU   B'01000000'        (BIT89)IMPLEMENTED LARGE REAL(2GB)
    MSLSVGTA EQU   MSLFCFLG+11
    MSLMVGTA EQU   B'00100000'        (BIT90)ACTIVATED VTAM-G/TISP
    MSLSVGTI EQU   MSLFCFLG+11
    MSLMVGTI EQU   B'00010000'        (BIT91)INSTALLED VTAM-G/TISP
    

    MSP(富士通OS)の場合は、MODESELマクロを使用すればOS名とバージョンだけでなく、そのシステムでどのようなオプションを利用できるかなども知ることができる。例えば2GB以上のラージ実記憶が実装されている、装置番号が4桁である、スケーラブルシステムである、データ空間が利用可能である、等々である。
    サンプルではモジュールをMVSでアセンブルするためMODESELマクロの展開形やパラメーターリストを直接コーディングしているが、MODESELマクロをコピーしてそれを使用してもよい。MODESELマクロはマニュアル(タスク管理マクロ命令文法書)に解説されている。