;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Copyright (c) 2002 TIMEX Corporation.
; 
; This document is the property of, and contains information proprietary to
; TIMEX Corporation.  It is to be returned upon request.  Reproduction by any
; means, disclosure, or use of its contents for other than the expressed
; purpose for which it is loaned, without the written consent of TIMEX
; Corporation, is strictly prohibited.
;
; File Name      : utlMthMc.h
;
; Macro Names    : UTL_BINARY_MATH_MODE               - Setup micro-processor to perform math in binary mode.
;                  UTL_DECIMAL_MATH_MODE              - Setup micro-processor to perform math in decimal mode.
;                  
;                  UTL_CONVERT_HEX_TO_3DIGIT_BCD      - Converts a 1-byte HEX number to 2-byte BCD number.
;                  UTL_CONVERT_1BYTE_HEX_TO_2BYTE_BCD - Converts a 1-byte HEX number to 2-byte BCD number.
;                  
;                  UTL_CONVERT_HEX_TO_2DIGIT_BCD      - Converts a 1-byte HEX number to 1-byte BCD number.
;                  UTL_CONVERT_1BYTE_HEX_TO_1BYTE_BCD - Converts a 1-byte HEX number to 1-byte BCD number.
;                  
;                  UTL_CONVERT_2BYTE_HEX_TO_2BYTE_BCD - Converts a 2-byte HEX number to 2-byte BCD number.
;                  
;                  UTL_CONVERT_1BYTE_BCD_TO_1BYTE_HEX - Converts a 1-byte BCD number to 1-byte HEX number.
;
;                  UTL_CONVERT_4BYTE_FROM_BCD_TO_HEX  - Converts a 4 byte buffer from BCD to HEX.
;                  
;                  UTL_CONVERT_4BYTE_FROM_HEX_TO_BCD  - Converts a 4 byte buffer from HEX to BCD.
;                  
;                  UTL_DIVIDE_HMSH_BY_N_IN_HEX        - Divides a data buffer of the format Hr:Min:Sec.Hun 
;                                                         by a divisor N and places the result in the buffer.
;                                                         Input HMSh is in HEX format.
;                  
;                  UTL_DIVIDE_HMSH_BY_N_IN_BCD        - Divides a data buffer of the format Hr:Min:Sec.Hun 
;                                                         by a divisor N and places the result in the buffer.
;                                                         Input HMSh is in BCD format.
;                  
;                  UTL_ADD_HMSH                       - Adds data in the UTL Hr:Min:Sec:Hun buffer to user data.
;
;                  UTL_SUBTRACT_HMSH                  - Subtracts data in the UTL Hr:Min:Sec:Hun buffer to user data.
;
;                  UTL_CONVERT_TO_12HR_FORMAT         - Converts the 24 hour data into 12 hour data and determine if
;                                                         it is AM or PM.
;                  
;
;
;
;
;
; Purpose        : Math utility.
;
; Change History : 
;
;               06/03/2000 RVD - Created utlbmac.h for m841
;
;   M851 Development:
;
;               02/12/2002 FSU - Modified for M851 development.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_BINARY_MATH_MODE    
;
; Description : Setup micro-processor to perform math in binary mode.
;
; Assumptions : None 
;               
; Usage       : UTL_BINARY_MATH_MODE
;               
; Input(s)    : None
;
; Output(s)   : None
;
;               ( Destroyed: None )
;
; Macro Change History : 
;
;               07/13/2000 RVD - Created Macro 
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                        
UTL_BINARY_MATH_MODE    MACRO

                and     SC, #@LOW(~bDecimalFlag)
                                
        ENDM
              

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_DECIMAL_MATH_MODE   
;
; Description : Setup micro-processor to perform math in decimal mode.
;
; Assumptions : None 
;               
; Usage       : UTL_DECIMAL_MATH_MODE
;               
; Input(s)    : None
;
; Output(s)   : None
;
;               ( Destroyed: None )
;
; Macro Change History : 
;
;               07/13/2000 RVD - Created Macro 
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_DECIMAL_MATH_MODE   MACRO

                or      SC, #bDecimalFlag
                                
        ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_CONVERT_HEX_TO_3DIGIT_BCD/UTL_CONVERT_1BYTE_HEX_TO_2BYTE_BCD
;
; Description : Converts a 1-byte HEX number to 2-byte BCD number.
;
; Assumptions : Maximum HEX number that can be converted is 'FF'.
;           
; Usage       : UTL_CONVERT_HEX_TO_3DIGIT_BCD/UTL_CONVERT_1BYTE_HEX_TO_2BYTE_BCD
;           
; Input(s)    : LReg - hex data to be converted
;
; Output(s)   : BReg - 100's digit BCD data
;               AReg - 10's digit BCD data (high nibble)
;                      1's digit BCD data (low nibble)
;               LReg - AReg (high nibble)
;               HReg - AReg (low nibble)
;               
;
;               ( Destroyed: None ) 
;
; Macro Change History:
;
;               07/10/2000 LBC - Created macro.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_CONVERT_HEX_TO_3DIGIT_BCD   MACRO

                car     utlConvert1ByteHEXTo2ByteBCD

        CALLS   SUBROUTINE , 'utlConvert1ByteHEXTo2ByteBCD'

        ENDM


UTL_CONVERT_1BYTE_HEX_TO_2BYTE_BCD  MACRO

                car     utlConvert1ByteHEXTo2ByteBCD

        CALLS   SUBROUTINE , 'utlConvert1ByteHEXTo2ByteBCD'

        ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_CONVERT_HEX_TO_2DIGIT_BCD/UTL_CONVERT_1BYTE_HEX_TO_1BYTE_BCD
;
; Description : Converts a 1-byte HEX number to 1-byte BCD number.
;
; Assumptions : Maximum HEX number that can be converted is '63' since the 
;                 1-byte BCD can only hold up to '99'.
;           
; Usage       : UTL_CONVERT_HEX_TO_2DIGIT_BCD/UTL_CONVERT_1BYTE_HEX_TO_1BYTE_BCD
;           
; Input(s)    : LReg - hex data to be converted
;
; Output(s)   : AReg - 10's digit BCD data (high nibble)
;                      1's digit BCD data (low nibble)
;               HReg - AReg (low nibble)
;               LReg - AReg (high nibble)
;
;               ( Destroyed: None ) 
;
; Macro Change History:
;
;               07/10/2000 LBC - Created macro.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_CONVERT_HEX_TO_2DIGIT_BCD   MACRO

                car     utlConvert1ByteHEXTo1ByteBCD

        CALLS   SUBROUTINE , 'utlConvert1ByteHEXTo1ByteBCD'

        ENDM


UTL_CONVERT_1BYTE_HEX_TO_1BYTE_BCD  MACRO

                car     utlConvert1ByteHEXTo1ByteBCD

        CALLS   SUBROUTINE , 'utlConvert1ByteHEXTo1ByteBCD'

        ENDM



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_CONVERT_2BYTE_HEX_TO_2BYTE_BCD
;
; Description : Converts a 2-byte HEX number to 2-byte BCD number.
;
; Assumptions : Maximum HEX number that can be converted is '270F' since the 
;                 2-byte BCD can only hold up to '9999'.
;           
; Usage       : UTL_CONVERT_2BYTE_HEX_TO_2BYTE_BCD
;           
; Input(s)    : HLReg - HEX data to be converted.
;
; Output(s)   : BAReg - BCD equivalent.
;               HReg  - Low nibble of low byte BCD equivalent.
;               LReg  - High nibble of low byte BCD equivalent.
;
;               ( Destroyed: None ) 
;
; Macro Change History:
;
;               02/25/2002 FSU - Created for M851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_CONVERT_2BYTE_HEX_TO_2BYTE_BCD  MACRO

                car     utlConvert2ByteHEXTo2ByteBCD

        CALLS   SUBROUTINE, 'utlConvert2ByteHEXTo2ByteBCD'

        ENDM
       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_CONVERT_1BYTE_BCD_TO_1BYTE_HEX
;
; Description : Converts a 1-byte BCD number to 1-byte HEX number.
;
; Assumptions : The BCD inputs will NEVER exceed 99Decimal, which means the 
;                 output restricted to 63H, a single byte value
;           
; Usage       : UTL_CONVERT_1BYTE_BCD_TO_1BYTE_HEX
;           
; Input(s)    : AReg - BCD data to be converted
;
; Output(s)   : AReg - is the hexadecimal byte.
;               
;               ( Destroyed: HLReg, BReg )
;
; Macro Change History:
;
;               02/25/2002 FSU - Created for M851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_CONVERT_1BYTE_BCD_TO_1BYTE_HEX  MACRO

                car     utlConvert1ByteBCDTo1ByteHEX

        CALLS   SUBROUTINE, 'utlConvert1ByteBCDTo1ByteHEX'

        ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_CONVERT_4BYTE_FROM_BCD_TO_HEX
;
; Description : Converts a 4 byte buffer from BCD to HEX.
;
; Assumptions : Dataset is stored in a consecutive 4 byte buffer, order least 
;                 significant to most significant. 
;           
; Usage       : UTL_CONVERT_4BYTE_FROM_BCD_TO_HEX
;           
; Input(s)    : IXReg - Points to the least significant byte of the data buffer.
;
; Output(s)   : IXReg - Points to the most significant byte of the data buffer.
;               The buffer contains the data in HEX format.
;              
;               ( Destroyed: BReg )
;
; Macro Change History:
;
;               02/25/2002 FSU - Created for M851.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_CONVERT_4BYTE_FROM_BCD_TO_HEX  MACRO

                car     utlConvert4BytesFromBCDToHEX

        CALLS   SUBROUTINE, 'utlConvert4BytesFromBCDToHEX'

        ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_CONVERT_4BYTE_FROM_HEX_TO_BCD
;
; Description : Converts a 4 byte buffer from HEX to BCD.
;
; Assumptions : Dataset is stored in a consecutive 4 byte buffer, order least 
;                 significant to most significant. 
;           
; Usage       : UTL_CONVERT_4BYTE_FROM_HEX_TO_BCD
;           
; Input(s)    : IXReg - Points to the least significant byte of the data buffer.
;
; Output(s)   : IXReg - Points to the most significant byte of the data buffer.
;               The buffer contains the data in BCD format.
;              
;               ( Destroyed: BReg )
;
; Macro Change History:
;
;               02/25/2002 FSU - Created for M851.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_CONVERT_4BYTE_FROM_HEX_TO_BCD  MACRO

                car     utlConvert4BytesFromHEXToBCD

        CALLS   SUBROUTINE, 'utlConvert4BytesFromHEXToBCD'

        ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_DIVIDE_HMSH_BY_N_IN_HEX
;
; Description : Divides a data buffer of the format Hr:Min:Sec.Hun by a divisor 
;                 N and places the result in the buffer.
;
; Assumptions : Dataset is stored in a consecutive 4 byte buffer, order least 
;                 significant to most significant. 
;
;               Data is unsigned, in Hexadecimal format.
;           
; Usage       : UTL_DIVIDE_HMSh_BY_N_IN_HEX
;           
; Input(s)    : IXReg - points to the most significant byte of the data buffer. (HEX data)
;               AReg  - is set to N, the divisor. (HEX data)
;
; Output(s)   : IXReg - points to the least significant byte of the data buffer.
;               The buffer contains the data (result) in hexadecimal format.
;
;               ( Destroyed: HLReg )
;
; Macro Change History:
;
;               02/25/2002 FSU - Modified for M851.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_DIVIDE_HMSh_BY_N_IN_HEX  MACRO

                car     utlDivideHMShByN

        CALLS   SUBROUTINE, 'utlDivideHMShByN'

        ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_DIVIDE_HMSH_BY_N_IN_BCD
;
; Description : Divides a data buffer of the format Hr:Min:Sec.Hun by a divisor
;                 N and places the result in the buffer.
;
; Assumptions : Structure format: Hundredths, Seconds, Minute, Hour
;           
; Usage       : UTL_DIVIDE_HMSH_BY_N_IN_BCD
;           
; Input(s)    : IXReg - Points to the LSB of the data buffer (BCD Format).
;               AReg  - Divisor (HEX Format).
;
; Output(s)   : IXReg - Points to the most significant byte of the data buffer.
;               The buffer contains the result.
;              
;               ( Destroyed: HLReg, BReg )
;
; Macro Change History:
;
;               02/25/2002 FSU - Modified for M851.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_DIVIDE_HMSH_BY_N_IN_BCD  MACRO

                car     utlDivideHMShByNInBCDFormat

        CALLS   SUBROUTINE, 'utlDivideHMShByNInBCDFormat'

        ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_ADD_HMSH 
;
; Description : Adds data in the UTL Hr:Min:Sec:Hun buffer to user data. 
;
; Assumptions : Data is already loaded into the UTL Hr:Min:Sec:Hun (KRESxxxBuffer)
;
; Input(s)    : HLReg - Points to the hundredths data of the user buffer.
;
; Output(s)   : HLReg - Points to last data location in buffer. (Hour data)
;               AReg  - Set to indicate data that was modified after addition.
;
;                   Bits are as follows:
;                       00000001b Set = Seconds Changed
;                       00000010b Set = Minutes Changed
;                       00000100b Set = Hours Changed
;
;               Data in buffer pointed to by HLReg has changed
;               
;               ( Destroyed: None )
;
; Macro Change History:
;
;               06/21/2000 RVD - Created Macro 
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_ADD_HMSH    MACRO

                car     kresHundSecMinHrUpd

        CALLS   SUBROUTINE , 'kresHundSecMinHrUpd'

        ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_SUBTRACT_HMSH 
;
; Description : Subtracts data in the UTL Hr:Min:Sec:Hun buffer from user data. 
;
; Assumptions : Data is already loaded into the  UTL Hr:Min:Sec:Hun (KRESxxxBuffer) 
;
; Input(s)    : HLReg - Points to the Hundreds data of the user buffer 
;
; Output(s)   : HLReg - Points to last data location in buffer. (Hour data)
;               AReg  - Set to indicate data that was modified after addition.
;
;                   Bits are as follows:
;                       00000001b Set = Seconds Changed
;                       00000010b Set = Minutes Changed
;                       00000100b Set = Hours Changed
;
;               Data in buffer pointed to by HLReg has changed
;               
;
; Macro Change History:
;
;               06/21/2000 RVD - Created Macro 
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_SUBTRACT_HMSH   MACRO

                car     kresHundSecMinHrSub

        CALLS   SUBROUTINE , 'kresHundSecMinHrSub'
        
        ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : UTL_CONVERT_TO_12HR_FORMAT
;
; Description : Converts the 24 hour data into 12 hour data and determine if
;                 it is AM or PM.
;
; Assumptions : Data is in BCD format.
;
; Usage       : UTL_CONVERT_TO_12HR_FORMAT
;       
; Input(s)    : AReg - Hour data to be formatted.
;
; Output(s)   : AReg - 12 hour format data.
;               bCarryFlag - TRUE  if 'AM'
;                          - FALSE if 'PM'
;
;               ( Destroyed: None )
;
; Macro Change History:
;
;               02/26/2002 FSU - Created Macro 
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

UTL_CONVERT_TO_12HR_FORMAT  MACRO

                car     utlConvertTo12HrFormat

        CALLS   SUBROUTINE, 'utlConvertTo12HrFormat'

        ENDM

