All

From at least MVS 3.8 on there is standard TIME macro provided for use in 
assembler.  The z390 portable mainframe assembler tool for Windows, Linux, and 
Apple OSX includes a compatible TIME macro.  Also available from the z390 
website is zip of the MVS 3.8 public domain standard macros including TIME.  
The regression test zip for z390, includes the following test of the TIME macro 
options which you may find useful:

*********************************************************************
* Copyright 2005 Automated Software Tools Corporation               *
* This source code is part of z390 assembler/emulator package       *
* The z390 package is distributed under GNU general public license  *
* Author - Don Higgins                                              *
* Date   - 09/30/05                                                 *
*********************************************************************
* 11/02/05 RPI  68 ADD CLOCK=STCK, CLOCK=STCKE, CLOCK=JAVA EXTENSIONS
* 02/07/07 RPI 532 SHORTEN STCKF CLOCK COMPARE TO 16 BITS           
*********************************************************************
         TITLE 'TESTTIM1 REGRSSION TEST TIME MACRO FUNCTIONS'
*
* NOTE THIS REGRESSION TEST REQUIRES EZ390 BE RUN WITH NOTIMING
* OPTION IN ORDER FOR TIMESTAMP TO BE FORCED TO 22:33:44:567 2005.002
*
TESTIM1  RT1   MAIN
         EQUREGS
PWORK    DC    XL8'FF'
WORK8    DC    XL8'FF'
WORK16   DC    XL16'FF'
CLOCK    DC    XL16'00'
IBM_INC  DC    XL8'0000020250EB7B80'  MICROSECONDS FROM 1900 TO 1970
WTOMSG1  DC    0F'0',AL2(MSG1END-*,0)
         DC    C' TIME ='
TIMEDATE DC    X'402120',C':',X'2020',C':',X'2020',C':',X'2020'
         DC    C'  DATE = '
         DC    X'20202020',C'.',X'202020'
MSG1END  EQU   *
*
* TIME CONSTANTS WHEN RUNNING EZ390 WITH OPTION NOTIMING
*
SVC_DATE   EQU X'0105002F'                DATE CCYYDDDF
SYS_DATE   EQU X'02005002'                DATE 0YYYYDDD
TOD_DEC    EQU X'22334456'                TOD  HHMMSSTH
TOD_BIN    EQU ((22*60+33)*60+44)*100+56  TOD  0.01 SEC
TOD_MIC    DC  XL8'00'                    TOD  MIC
TOD_TU     DC  F'0'                       TOD  26.04166 MIC UNITS
TOD_STCK   DC  XL8'00'                    TOD  BIT 51   MIC
TOD_STCKE  DC  XL16'00'                   TOD  BIT 59   MIC
         RT1   START
*
* INITIALIZE CALCULATED TOD CONSTANTS USING NOTIMING DEFAULT TIME
*
         LG    R3,=AL8(TOD_BIN)
         MSGF  R3,=A(10)           R3 = MILLISECONDS
         AG    R3,=FL8'7'
         MSGF  R3,=F'1000'         R3 = MICROSECONDS
         STG   R3,TOD_MIC        SET TOD IN MICROSECONDS
         MSGF  R3,=F'100000'       R3 =  MIC SCALED UP FOR INT DIV
         DSGF  R2,=F'2604166'      DIV MICS BY 26.04166
         ST    R3,TOD_TU         SET TOD IN TIMER UNITS
         LG    R3,TOD_MIC
         SLLG  R2,R3,(63-51)          MAKE BIT 51 MICROSECONDS
         STG   R2,TOD_STCK       SET TOD IN STCK CLOCK UNITS
         LG    R3,TOD_MIC        SET TOD IN TIMER UNITS
         SLLG  R2,R3,(63-59)          MAKE BIT 59 MICROSECONDS
         STG   R2,TOD_STCKE      SET TOD IN STCK CLOCK UNITS
* SVC DEC
         TIME  DEC
         STM   R0,R1,PWORK
         RT1   CCE,PWORK(4),=A(TOD_DEC)
         RT1   CCE,PWORK+4(4),=A(SVC_DATE)
         MVI   PWORK+4,X'20'  CHANGE CC TO 20
         ED    TIMEDATE(MSG1END-TIMEDATE),PWORK
         WTO   MF=(E,WTOMSG1)
* SVC BIN
         TIME  BIN
         STM   R0,R1,PWORK
         RT1   CCE,PWORK(4),=A(TOD_BIN)
         RT1   CCE,PWORK+4(4),=A(SVC_DATE)
* SVC TU
         TIME  TU
         STM   R0,R1,PWORK
         RT1   CCE,PWORK(4),TOD_TU
         RT1   CCE,PWORK+4(4),=A(SVC_DATE)
* SVC MIC
         TIME  MIC,WORK8
         LG    R2,WORK8
         LG    R3,TOD_MIC
         STM   R0,R1,PWORK
         RT1   CCE,WORK8,TOD_MIC
         RT1   CCE,PWORK+4(4),=A(SVC_DATE)
* SVC STCK
         TIME  STCK,WORK8
         STM   R0,R1,PWORK
         RT1   CCE,WORK8,TOD_STCK
         RT1   CCE,PWORK+4(4),=A(SVC_DATE)
* SYS DEC
         TIME  DEC,WORK16,LINKAGE=SYSTEM
         RT1   CCE,WORK16(4),=A(TOD_DEC)
         RT1   CCE,WORK16+8(4),=A(SYS_DATE)
* SYS BIN
         TIME  BIN,WORK16,LINKAGE=SYSTEM
         RT1   CCE,WORK16(4),=A(TOD_BIN) 
         RT1   CCE,WORK16+8(4),=A(SYS_DATE)
* SYS MIC
         TIME  MIC,WORK16,LINKAGE=SYSTEM
         RT1   CCE,WORK16(8),TOD_MIC 
         RT1   CCE,WORK16+8(4),=A(SYS_DATE)
* SYS STCK
         TIME  STCK,WORK16,LINKAGE=SYSTEM
         RT1   CCE,WORK16(8),TOD_STCK
         RT1   CCE,WORK16+8(4),=A(SYS_DATE)
* SYS STCKE
         TIME  STCKE,WORK16,LINKAGE=SYSTEM
         RT1   CCE,WORK16,TOD_STCKE
* SYS ALTERNATE DATE TYPES
         TIME  DEC,WORK16,LINKAGE=SYSTEM,DATETYPE=YYYYDDD
         RT1   CCE,WORK16+8(4),=A(SYS_DATE)
         TIME  DEC,WORK16,LINKAGE=SYSTEM,DATETYPE=MMDDYYYY
         RT1   CCE,WORK16+8(4),=X'01022005'
         TIME  DEC,WORK16,LINKAGE=SYSTEM,DATETYPE=DDMMYYYY
         RT1   CCE,WORK16+8(4),=X'02012005'
         TIME  DEC,WORK16,LINKAGE=SYSTEM,DATETYPE=YYYYMMDD
         RT1   CCE,WORK16+8(4),=X'20050102'
* CLOCK=STCK   DOUBLE WORD WITH BIT 51 = MICROSECONDS FROM 1900
         TIME  CLOCK,WORK16,CLOCKTYPE=STCK
         STCKF CLOCK
         RT1   CCE,WORK16(2),CLOCK
* CLOCK=STCKE  2 DOUBLE WORDS WITH BIT 59 = MICROSECONDS FROM 1900
         TIME  CLOCK,WORK16,CLOCKTYPE=STCKE
         STCKE CLOCK
         RT1   CCE,WORK16(2),CLOCK
* CLOCK=JAVA   DOUBLE WORD WITH BIT 63 = MICROSECONDS FROM 1970
         TIME  CLOCK,WORK16,CLOCKTYPE=JAVA
         LG    R0,WORK16
         AG    R0,IBM_INC   CVT JAVA TO IBM EPOCH
         MSGF  R0,=F'1000'
         SLLG  R0,R0,(63-51)
         STG   R0,WORK16
         STCKF CLOCK
         RT1   CCE,WORK16(2),CLOCK
         WTO   'TESTTIM1 ENDED OK'
         RT1   END
         END

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to