;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Copyright (c) 2001-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  :  HwMacro.h
;
; Macro Names:
;
;   MCU:
;       HW_INIT_MCU_SINGLE_CHIP_MODE -      Initialize the MCU to MCU single chip mode and reset 
;                                           stack page.
;       HW_ENABLE_INTERRUPTS -              Enable all interrupts.
;       HW_DISABLE_INTERRUPTS -             Disable all interrupts.
;       HW_DISABLE_LOW_PRIORITY_INTERRUPTS -Disable all interrupts with anything priority lower than
;                                           the highest allowed.    
;       HW_SP_RESET -                       Resets stack pointer to top of stack.
;       HW_INIT_BR -                        Initialize the BR register to the I/O Page HWBASEADDRESS.
;       HW_RESET_MCU -                      Reset the MCU by setting low the Reset pin.
;
;   HSO:
;       HW_HSO_INIT -                       Initializes HSO to ower off, OSC1 selected.
;       HW_HSO_POWER_ON -                   Turns OSC3 power on.
;       HW_HSO_ON   -                       Selects OSC3 as main oscillator. Assumes OSC3 power is on.
;       HW_HSO_OFF -                        Selects OSC1 as main oscillator, and powers down OSC3.
;       HW_HSO_NORMAL -                     Selects OSC1 as main oscillator, DOES NOT power down OSC3.
;       HW_HSO_SELECT -                     Powers up HSO, waits 5mSec, and selects HSO.
;
;   Priority:
;       HW_INT_PRIORITY_DEFAULT -           The default interrupt priority.
;
;   Clock Interrupts:
;       HW_CLK_INIT -                       Initialize Clock Timer.
;       HW_CLK_STOP -                       Stops Clock Timer.
;       HW_CLK_RUN -                        Starts Clock Timer.
;       HW_CLK_RESET -                      Resets Clock Timer.
;       HW_CLK_INT_ENABLE -                 Enables 1/2/8/32Hz interrupts.
;       HW_CLK_INT_DISABLE -                Disables 1/2/8/32Hz interrupts.
;       HW_CLK_SYNCHRONIZE -                Resets main clock timer count to 0.
;
;   WatchDog:
;       HW_RESET_WATCHDOG -                 Resets watchdog timer.
;
;   Lamp:
;       HW_INIT_LAMP -                      Initialize the Lamp ports to off the LAMP.
;       HW_LAMP_REQUEST -                   Turns EL lamp on and tells CORE lamp request is on.
;       HW_LAMP_REQUEST_OFF -               Turns EL lamp off and tells CORE lamp request is off.
;       HW_LAMP_POPUP_REQUEST -             Sets lamp during popup request bit to enable lamp 
;                                           flashing during a popup.
;       HW_LAMP_POPUP_REQUEST_OFF -         Clears lamp during popup request bit to disable lamp 
;                                           flashing during a popup.
;       HW_LAMP_ON -                        Turns EL lamp on.
;       HW_LAMP_OFF -                       Turns EL Lamp off.
;
;   Stopwatch:
;       HW_STP_INIT -                       Initialize Stopwatch to off, reset, and disable interrupts.
;       HW_STP_STOP -                       Stops stopwatch 100s counter.
;       HW_STP_RUN -                        Starts stopwatch 100s counter.
;       HW_STP_READ -                       Reads the stopwatch 100s counter.
;       HW_STP_RESET -                      Resets stopwatch 100s counter to 0. Does not affect the operstion
;                                           (ie, running or stopped).
;       HW_STP_COPY_BUFFER_DATA             Copies the data in the Hardware stopwatch buffers to the 
;                                           Resource stopwatch buffers.
;       HW_RES_UPDATE_STOPWATCH_BUFFERS     Updates the data in the Hardware stopwatch buffers and copies 
;                                           it to the Resource stopwatch buffers.
;   Alerts:
;       HW_ALERT_INIT -                     Initialize Buzzer output.
;       HW_ALERT_START -                    Enables alert generation.
;       HW_ALERT_STOP   -                   Immediately cancels alert.
;       HW_ALERT_TOGGLE -                   Toggles the alert stat.
;       HW_ALERT_SET_DUTY   -               Sets the alert duty.
;       HW_ALERT_SET_FREQ   -               Sets the alert Frequency.
;
;   Programmable Timer:
;       HW_PT_CONFIG -                      Sets the basic configuration of the programmable timer.
;       HW_PT_PTOUT_ON -                    Turns on the TOUT output pin frequencey on.
;       HW_PT_PTOUT_OFF -                   Turns off the TOUT output pin frequencey off. DC High output.
;       HW_PT_CONFIG_TIMER0 -               Set the Basic config for Timer0.
;       HW_PT_TRIGGER_PRESET_VALUE_TIMER0 - Load the preset value in timer0 reload register to thetimer0 
;                                           counter register.
;       HW_PT_RUN_TIMER0 -                  Trigger Timer 0 to begin the count down.
;       HW_PT_STOP_TIMER0 -                 Stop Timer 0 count down.
;       HW_PT_INIT -                        Initialize the Programmable Timer.
;       HW_PT_TIMER0_INT_ENABLE -           Enable Programmable Timer0 Interrupt.
;       HW_PT_TIMER0_INT_DISABLE -          Disable Programmable Timer0 Interrupt
;       HW_PT_TIMER0_CLEAR_FACTOR_FLAG -    Clear Programmable Timer0 Factor Flag.
;       HW_PT_TURN_TIMER0_ON -              Start Timer0. This clears the factor flags, loads 
;                                           an initial count, enables the interrupt, and runs the timer.
;       HW_PT_TURN_TIMER0_OFF -             Stop Timer0. This clears the factor flags,  
;                                           disables the interrupt, and stops the timer.
;       
;   Supply Voltage Detection:
;       HW_SVD_POWER_ON  -                  Power on the SVD circuitry in continuous sampling mode.
;       HW_SVD_POWER_OFF -                  Power down the SVD circuitry.
;       HW_SVD_GET_LEVEL -                  Get the SVD detection level output level in A register.
;       HW_SVD_GET_BATTERY_LEVEL -          Sample the SVD circuit to check the battery level.
;
;   EEPROM:
;
;       EEPROM macros:
;
;       HW_EE_INIT -                        Initialize EEPROM ports & powerdown the EEPROM.
;       HW_EEPROM_ENABLE_POWER -            Power up the EEPROM VCC pin ONLY.
;       HW_EEPROM_DISABLE_POWER -           Power down the EEPROM VCC pin ONLY.
;       HW_EE_POWER_ON -                    Power up and initialize I/O ports for the EEPROM.
;       HW_EE_POWER_OFF -                   Power down the EEPROM VCC set all I/O pins to prevent 
;                                           excess current drain.
;                               
;       HW_EE_WRITE -                       Write a block of data to serial EEPROM.
;       HW_EE_READ  -                       Read a block of data from serial EEPROM and store it 
;                                           in RAM.
;       HW_EE_CURRENT_HIGH -                Sets a flag to indicate the EEPROM is in a condition
;                                           where it is using a lot of current.
;       HW_EE_CURRENT_LOW  -                Clears a flag to indicate the EEPROM is in a condition
;                                           where it is not using a lot of current.
;
;       Bit level communication with the EEPROM:
;
;       HW_EE_SCLK_LEADING -                Simulates a RISING edge of clock signal. This is the 
;                                           synchronous serial clock between the micro and the EEPROM.
;       HW_EE_SCLK_TRAILING -               Simulates a TRAILING edge of clock signal. This is the 
;                                           synchronous serial clock between the micro and the EEPROM.
;       HW_EE_INPUT_BIT -                   Reads the bit output of the EEPROM.
;       HW_EE_OUTPUT_BIT_HIGH -             Send a high data signal to the EEPROM.
;       HW_EE_OUTPUT_BIT_LOW  -             Send a low data signal to the EEPROM. 
;       HW_EE_SDA_INPUT -                   Configure SDA line as an input port.
;       HW_EE_SDA_OUTPUT -                  Configure SDA line as an output port.
;       HW_EE_SDA_PULL_UP_DEACTIVE -        De-activate the SDA pull-up resistor.
;       HW_EE_SDA_PULL_UP_ACTIVE -          Activate the SDA pull-up resistor.
;
;   Keyboard:
;       HW_KBD_INIT -                       Initialize the KBD and disable all their interrupts.
;       HW_KBD_CANCEL_CURRENT_SWITCH_RELEASE - Tells KBD driver not to pass release event.
;                                              for the currently depressed switch.
;       HW_KBD_INTERRUPTS_INIT -            Initializes KBD hardware for Interrupts.
;       HW_KBD_SET_INTERRUPT_FLAG -         Tells the core a keybord task is pending.
;       HW_KBD_CLEAR_INTERRUPT_FLAG -       Cancels telling the core a keybord task is pending.
;       HW_KBD_READ_PORT_DATA -             Reads an input 3x to guarantee timing spec is met.      
;
;   Bond Options:
;       HW_READ_BOND_OPTIONS -              Initializes bond option variables, and sets bond ports 
;                                           to outputs to save current.
;               
;   Debug pin set and clear commands:
;       HW_SET_R14 -                        Sets the R20 out High. Used in ISR for Ring monitoring. 
;       HW_CLEAR_R14 -                      Sets the R20 out Low. Used in ISR  for Ring monitoring. 
;       HW_SET_R15 -                        Sets the R22 out High. Used in ISR for Ring monitoring. 
;       HW_CLEAR_R15 -                      Sets the R22 out Low. Used in ISR  for Ring monitoring.
;       HW_SET_R16 -                        Sets the R26 out High. Used for 1Hz Isr timing monitoring.
;       HW_CLEAR_R16 -                      Sets the R26 out Low. Used for 1Hz Isr timing monitoring.
;       HW_SET_R17 -                        Sets the R23 out High. Used in ISR for Ring debounce. 
;       HW_CLEAR_R17 -                      Sets the R23 out Low. Used in ISR  for Ring debounce.
;                   
;   Miscellaneous:
;       HW_DELAY_WITH_OSC1 -                "Dead" delay loop. Allows the micro to delay for a specified 
;                                           time when OSC1 is the selected oscillator.
;       HW_DELAY_WITH_OSC3 -                "Dead" delay loop. Allows the micro to delay for a specified 
;                                           time when OSC3 is the selected oscillator.
;       HW_A_TO_D_INIT_OUT -                Initialize A to D input pins as outputs, LOW.
;       HW_UNPACK_CLEAR -                   Clear the bUnpackFlag flag. This forces 8 bit math operations to 
;                                           execute on both nibbles of a byte.
;       HW_UNPACK_SET -                     Set the bUnpackFlag flag. This forces 8 bit math operations to 
;                                           execute on only the lower nibble of a byte, and clears the upper 
;                                           nibble (ie, forces the micro to simulate a 4 bit processor).
;   
; Purpose    : Contains all hardware macros.             
;
; File Change History:
;
;               02/28/2002 RVD - Created hwmacro.h for m851
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_INIT_MCU_SINGLE_CHIP_MODE
;
; Description:  Initialize the MCU to MCU single chip mode and reset stack page.
; 
; Assumptions:  BRReg is set to HWBASEADDRESS
;               P07 is connected to the RESET pin.
;               MCU mode is selected in hardware.
;
; Usage      :  HW_INIT_MCU_SINGLE_CHIP_MODE
;       
; Input(s)   :  None   
;
; Output(s)  :  None   
;
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_INIT_MCU_SINGLE_CHIP_MODE    MACRO

                ; Set Reset Line to inputt, so ALL CLEAR switch can reset chip.
                and     [BR:@LOW(P00Control)], #@LOW(~bIOC07)
                ; Must write to the next two adresses to enable interrupts
                ; Next instruction sets CE0 to activate when external accesses are made
                ; to the 64K memory space.
                ; CE0 WILL NOT activate, as we are in single chip, MCU mode, and we 
                ; force all CE0-CE3 lines to inactive state with this write.
                ld      [BR:@LOW(MCUBusControl)], #(bCEMD0|bCEMD1)
                ; Forced to zero in single chip mode
                ; Must write anyway
                ld      [BR:@LOW(MCUStackPage)], #00H

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_ENABLE_INTERRUPTS
;
; Description:  Enable interrupts globally.
;
; Assumptions:  None.
;
; Usage      :  HW_ENABLE_INTERRUPTS
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_ENABLE_INTERRUPTS MACRO
            
                and     SC, #@LOW(~bI0I1)

                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_DISABLE_INTERRUPTS
;
; Description:  Disable interrupts globally.
;
; Assumptions:  None 
;
; Usage      :  HW_DISABLE_INTERRUPTS
;       
; Input(s)   :  None.   
;
; Output(s)  :  None.
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_DISABLE_INTERRUPTS   MACRO

                or      SC, #bI0I1

                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_DISABLE_LOW_PRIORITY_INTERRUPTS
;
; Description:  Disable all interrupts with anything priority lower than
;               the highest allowed.    
;
; Assumptions:  None 
;
; Usage      :  HW_DISABLE_LOW_PRIORITY_INTERRUPTS
;       
; Input(s)   :  None.   
;
; Output(s)  :  None.
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_DISABLE_LOW_PRIORITY_INTERRUPTS  MACRO
                
                ; Disable all interrupts (set priority to 3)
                HW_DISABLE_INTERRUPTS;
                ; Allow only the highest priority interrupts (set priority to 2)
                and     SC, #bI0Flag

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_SP_RESET 
;
; Description:  Resets Stack pointer to top of stack.
;
; Assumptions:  None 
;
; Usage      :  HW_SP_RESET
;       
; Input(s)   :  None.   
;
; Output(s)  :  Stack pointer reset to top of stack.
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_SP_RESET     MACRO

                ld      SP, #(HWMAXRAMADDRESS+1)

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_INIT_BR 
;
; Description:  initialize the BR register to HWBASEADDRESS.
;
; Assumptions:  None 
;
; Usage      :  HW_INIT_BR
;       
; Input(s)   :  None.   
;
; Output(s)  :  BRReg 0FFH
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_INIT_BR      MACRO
        
                ld      BR, #HWBASEADDRESS

                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_RESET_MCU 
;
; Description:  Reset the MCU by setting the Reset pin to LOW
;
; Assumptions:  The pin PO7 is attached to the RESET line, and the internal pull up option
;               is selected for the reset line.
;               P07 is configures as an input until we need to reset the MCU. Thepin is pulled
;               low, and the port is reconfigured as an output.
;               This pin going low will cause a reset. After the reset has started, this 
;               pin P07 re-initializes as an input, allowing the RESET pin's internal pull-up to
;               force the RESET line to transition to high, completing the boot up sequence.
;
; Usage      :  HW_RESET_MCU
;       
; Input(s)   :  None.    
;
; Output(s)  :  Chip is reset.
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_RESET_MCU        MACRO

                and     [BR:@LOW(InOutPortP00)], #@LOW(~bP01)
                or      [BR:@LOW(P00Control)], #bIOC01

                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; NOTE Regarding power management of the MCU as it relates to the HSO.
;
; The 88348 can run in 3 different power modes: LOW, NORMAL, and HIGH.
; 
; LOW:      This mode is used when the micro is running with OSC1 as the clock. 
;           In this mode, you should not power on the HSO.
; NORMAL:   This mode allows you to select OSC1 or OSC3. It is primarily designed to
;           be used if OSC3 is under 5MHz, and you are using internal memeory.
; HIGH:     Designed for OSC3 speeds up to 8MHz, especially if external meemory is used.
;
; In this design, we will be using LOW mode when OSC1 is selected, and NORMAL when OSC3 
; is selected, for minimum power consumption.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_HSO_POWER_ON
;
; Description:  Sets MCU into NORMAL power mode, and turns OSC3 Power on, in that order.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_HSO_POWER_ON
;       
; Input(s)   :  None.
;
; Output(s)  :  OSC3 powered on
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_HSO_POWER_ON MACRO

                ; Clear bCLKCHG, ie select OSC1
                ; and switch to Normal power operation mode
                and     [BR:@LOW(MCUOperationalConfig)], #~(bCLKCHG) 
                and     [BR:@LOW(MCUOperationalConfig)], #~(bVDC0 | bVDC1 ) 
                ; Power on OSC3
                or      [BR:@LOW(MCUOperationalConfig)], #bOSCC 

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_HSO_ON
;
; Description:  Selects OSC3. 
;
; Assumptions:  BRReg = HWBASEADDRESS. MCU is in NORMAL power mode. OSC3 is powered 
;               on and stabilized (5mS for RC, 20mS for Crystal).
;
; Usage      :  HW_HSO_ON
;       
; Input(s)   :  None.   
;
; Output(s)  :  OSC3 is selected for CPU clock
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_HSO_ON           MACRO
                ; Set bCLKCHG, ie select OSC3
                or      [BR:@LOW(MCUOperationalConfig)],#bCLKCHG    

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_HSO_OFF
;
; Description:  Selects OSC1 as clock, turns OSC3 Power off, and selects LOW power mode.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_HSO_OFF
;       
; Input(s)   :  None.   
;
; Output(s)  :  OSC1 is selected for CPU clock
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_HSO_OFF      MACRO
                ; Clear bCLKCHG, ie select OSC1
                and     [BR:@LOW(MCUOperationalConfig)], #~bCLKCHG  
                ; Power down OSC3, 
                and     [BR:@LOW(MCUOperationalConfig)], #~(bOSCC)
                ; Switch to low power operation mode
                and     [BR:@LOW(MCUOperationalConfig)], #~bVDC1        
                or      [BR:@LOW(MCUOperationalConfig)], #bVDC0     

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_HSO_NORMAL
;
; Description:  Selects OSC1, leaves OSC3 power alone. 
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_HSO_NORMAL
;       
; Input(s)   :  None   
;
; Output(s)  :  OSC1 is selected, OSC3 power stays as is.  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_HSO_NORMAL       MACRO

                ; Clear bCLKCHG, ie select OSC1
                and     [BR:@LOW(MCUOperationalConfig)], #~bCLKCHG 

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_HSO_SELECT 
;
; Description:  Powers up HSO, waits 5mSec, and selects HSO.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_HSO_SELECT
;       
; Input(s)   :  None   
;
; Output(s)  :  OSC3 is selected  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_HSO_SELECT       MACRO

                ; Clear bCLKCHG, ie select OSC1
                car     hwHSOSelect 

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;                
; Macro Name :  HW_INT_PRIORITY_DEFAULT
;
; Description:  Sets the default interrupt priority.
;                                             P0 P1 
;                   Serial Input (SER)  IRQ3   1 1
;                   Main Clock (CLK)    IRQ1   0 1
;                   Keypad (KBD)        IRQ1   0 1
;                   Timer (TMR)         IRQ1   0 1
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_INT_PRIORITY_DEFAULT
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_INT_PRIORITY_DEFAULT MACRO
                ; Put K00-K07 interrupt at IRQ level 1,
                ; Put main clock interrupt at IRQ level 1 
                ; Put the Serial interface interrupt at IRQ level 3
                ld  [BR:@LOW(IntPriorityReg0)], #(bPK00|bPTM0|bPSIF0|bPSIF1)
                ; Put K10-K11 interrupt at IRQ1 level, 
                ; Put Programmable timer interrupt at IRQ1 level, 
                ld  [BR:@LOW(IntPriorityReg1)], #(bPK10|bPPT0)
           
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_CLK_STOP
;
; Description:  Stops Clock Timer.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_CLK_STOP
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_CLK_STOP     MACRO

                ; Clear bTMRUN to stop the Clk
                and     [BR:@LOW(ClkControl)], #~bTMRUN 

                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_CLK_RUN
;
; Description:  Starts Clock Timer.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_CLK_RUN
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_CLK_RUN      MACRO

                ; Set bTMRUN to start the Clk
                or      [BR:@LOW(ClkControl)], #bTMRUN  

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_CLK_RESET
;
; Description:  Resets Clock Timer.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_CLK_RESET
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_CLK_RESET        MACRO


                ; Set bSWRST to reset clock timebase
                or  [BR:@LOW(ClkControl)], #bTMRST  

                ; reset clock interrupt flags to clear pending interrupts
                or  [BR:@LOW(ClkIntFlags)], #(bFTM1|bFTM2|bFTM8|bFTM32)
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_CLK_INT_ENABLE
;
; Description:  Enables 1/2/8/32Hz interrupts. 
;
; Assumptions:  BRReg = HWBASEADDRESS.  
;
; Usage      :  HW_CLK_INT_ENABLE    INTXHZ
;               where X = 1/2/8/32
;       
; Input(s)   :  None   
;
; Output(s)  :  Destroys AReg, HLReg  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_CLK_INT_ENABLE   MACRO   INTXHZ  
                ; AReg = Interrupt enable mask
                ld      A, #INTXHZ                      
                ; Call main clock enable subroutine
                car     hwCLKIntEnable                  

                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_CLK_INT_DISABLE
;
; Description:  Disables 1/2/8/32Hz interrupts. 
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_CLK_INT_DISABLE   INTXHZ
;               where X = 1/2/8/32
;       
; Input(s)   :  None   
;
; Output(s)  :  Destroys AReg, BReg  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_CLK_INT_DISABLE  MACRO   INTXHZ  
                ; AReg = Interrupt disable mask
                ld      A, #INTXHZ                      
                ; Call main clock disable subroutine
                car     hwCLKIntDisable
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_CLK_INIT
;
; Description:  Init Clk Timer (Disables 1/2/8/32Hz interrupts. )
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_CLK_INIT  
;       
; Input(s)   :  None   
;
; Output(s)  :  Destroys AReg, BReg  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 HW_CLK_INIT        MACRO

                HW_CLK_INT_DISABLE (INT1HZ | INT2HZ | INT8HZ | INT32HZ)

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_CLK_SYNCHRONIZE 
;
; Description:  Resets main timer clock to 0.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_CLK_SYNCHRONIZE
;       
; Input(s)   :  None   
;
; Output(s)  :  None.  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_CLK_SYNCHRONIZE      MACRO
                car     hwCLKSynch
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_RESET_WATCHDOG
;
; Description:  Reset watchdog timer. 
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_RESET_WATCHDOG
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_RESET_WATCHDOG   MACRO

                ; write 1 to reset watchdog
                or      [BR:@LOW(Watchdog)], #bWDRST        

                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_INIT_LAMP
;
; Description:  Initialize the Lamp. Turn it of and ports idle low
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_INIT_LAMP
;       
; Input(s)   :  None   
;
; Output(s)  :  None   
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_INIT_LAMP    MACRO
                ; Set HON Low
                and     [BR:@LOW(ELPort)], #@LOW(~bLampOn)
                ; Turn OFF frequency, EL clock bits Lo
                and     [BR:@LOW(ELControl)], #@LOW(~bELFoutOn)
                ; Force EL clock line to idle low
                and     [BR:@LOW(ELPort)], #@LOW(~bELCLKOn)     

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_LAMP_REQUEST
;
; Description:  Sets lamp request bit and turns EL lamp ON if EEPROM is not in High 
;               current state.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_LAMP_REQUEST
;       
; Input(s)   :  None   
;
; Output(s)  :  HLReg is set to HWStatusFlag  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_LAMP_REQUEST MACRO
                ; Tell Core we are requesting LAMP service
                ld      HL,  #HWStatusFlag
                or     [HL],  #bHWLampRequestOn
                
                ; Check if EEPROM is powered up
                bit     [HL], #bHWEEHighCurrentState
                jr      nZ, ^hwLampReqExit
                
                ; EEPROM is not in HIGH current state, so turn On Lamp
                HW_LAMP_ON
^hwLampReqExit:
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_LAMP_REQUEST_OFF
;
; Description:  Clears lamp request bit and turns EL lamp OFF.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_LAMP_REQUEST_OFF
;       
; Input(s)   :  None   
;
; Output(s)  :  HLReg is set to HWStatusFlag  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_LAMP_REQUEST_OFF MACRO
                ; Tell Core we are cancelling LAMP service
                ld      HL,  #HWStatusFlag
                and     [HL],  #@LOW(~bHWLampRequestOn)
                
                ;Turn Off Lamp
                HW_LAMP_OFF
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_LAMP_POPUP_REQUEST
;
; Description:  Sets lamp during popup request bit to enable lamp flashing during a popup.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_LAMP_POPUP_REQUEST
;       
; Input(s)   :  None   
;
; Output(s)  :  HLReg is set to HWStatusFlag  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_LAMP_POPUP_REQUEST   MACRO
                ; Tell audio driver we are requesting LAMP service during a popup
                ld      HL,  #HWStatusFlag
                or     [HL],  #bHWLampPopupRequestOn
                
                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_LAMP_POPUP_REQUEST_OFF
;
; Description:  Clears lamp during popup request bit to disable lamp flashing during a popup.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_LAMP_POPUP_REQUEST_OFF
;       
; Input(s)   :  None   
;
; Output(s)  :  HLReg is set to HWStatusFlag  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_LAMP_POPUP_REQUEST_OFF   MACRO
                ; Tell  audio driver  we are no longer requesting LAMP service during a popup
                ld      HL,  #HWStatusFlag
                and     [HL],  #@LOW(~bHWLampPopupRequestOn)
                
                ENDM



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_LAMP_ON
;
; Description:  Turns EL lamp ON
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_LAMP_ON
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_LAMP_ON      MACRO
                ; Enable EL clock output line
                or      [BR:@LOW(ELPort)], #bELCLKOn        
                ; Turn on Clock
                or      [BR:@LOW(ELControl)], #bELFoutOn    
                ; Turn HON Hi
                or      [BR:@LOW(ELPort)], #bLampOn             

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_LAMP_OFF
;
; Description:  Turns EL lamp OFF
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_LAMP_OFF
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_LAMP_OFF     MACRO

                HW_INIT_LAMP

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_STP_INIT
;
; Description:  Initialize stopwatch. Stop the stopwatch and disable the interrupts
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_STP_INIT
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_STP_INIT     MACRO
                ; Clear Interruptfactor flag
                ld      [BR:@LOW(StpIntFlags)], #(bFSW1|bFSW10|bFSW100)  
                ; Clear bSWRUN to stop stopwatch
                and     [BR:@LOW(StpControl)], #~bSWRUN                  
                ; Disable interrupts 1, 10 and 100
                and     [BR:@LOW(StpIntEnable)], #~(bESW10|bESW100|bESW1)
                
                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_STP_STOP
;
; Description:  Shuts stopwatch 1/10/100s counter off, thereby stopping stopwatch.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_STP_STOP
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_STP_STOP     MACRO

                ; Clear bSWRUN to stop stopwatch
                and     [BR:@LOW(StpControl)], #~bSWRUN 

                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_STP_RUN
;
; Description:  Turns stopwatch 1/10/100s counter on, starting stopwatch.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_STP_RUN
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_STP_RUN      MACRO
                ; Clear Interruptfactor flag
                ld      [BR:@LOW(StpIntFlags)], #(bFSW1|bFSW10|bFSW100) 
                ; Set bSWRUN to start stopwatch
                or      [BR:@LOW(StpControl)], #bSWRUN
                                   
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_STP_READ
;
; Description:  Reads stopwatch data register and stores data in HWSTPDataBuffer
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_STP_READ
;       
; Input(s)   :  None   
;
; Output(s)  :  AReg = HWSTPdata
;               [HWSTPDataBuffer] = HWSTPdata
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_STP_READ MACRO
                                    
                ; Read data
                ; @LOW(HWSTPData)=BCD 1/100s
                ; @HIGH(HWSTPData)=BCD 1/10sld
                ld      A, [StpData]                            
                ; Store data in stopwatch buffer                            
                ld      [HWSTPDataBuffer], A
                                    
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_STP_RESET
;
; Description:  Resets the stopwatch counter to zero. Does not affect the operation
;               (running or stopped).
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_STP_RESET
;       
; Input(s)   :  None.   
;
; Output(s)  :  None.  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_STP_RESET        MACRO
                ; Set bSWRST to reset stopwatch
                or      [BR:@LOW(StpControl)],  #bSWRST 

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_STP_COPY_BUFFER_DATA
;
; Description:  Copies the data in the Hardware stopwatch buffers to the 
;               Resource stopwatch buffers.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_STP_COPY_BUFFER_DATA
;       
; Input(s)   :  None   
;
; Output(s)  :  Destroys HLReg, IXReg
;               Data pointed in KRESStopwatchSecondsDataBuffer:KRESStopwatchHundthsDataBuffer  is
;               set to the data in HWSTPSecondsDataBuffer:HWSTP100sDataBuffer.
;               32Hz interrupt is blocked while the copy is executing to prevent data corruption.
;
; Macro Change History:
;               02/27/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_STP_COPY_BUFFER_DATA MACRO

                car     hwSTPCopyBufferData

CALLS   SUBROUTINE,'hwSTPCopyBufferData'
                ENDM
                
                

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_RES_UPDATE_STOPWATCH_BUFFERS
;
; Description:  Updates the data in the Hardware stopwatch buffers and copies  
;               it to the Resource stopwatch buffers.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_RES_UPDATE_STOPWATCH_BUFFERS
;       
; Input(s)   :  None   
;
; Output(s)  :  Destroys HLReg, IXReg
;               Data pointed in KRESStopwatchSecondsDataBuffer:KRESStopwatchHundthsDataBuffer  is
;               set to the data in HWSTPSecondsDataBuffer:HWSTP100sDataBuffer.
;               32Hz interrupt is blocked while the copy is executing to prevent data corruption.
;
; Macro Change History:
;               02/27/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_RES_UPDATE_STOPWATCH_BUFFERS MACRO

                car     hwRESUpdateStopwatchBuffers

CALLS   SUBROUTINE,'hwRESUpdateStopwatchBuffers'
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; NOTES regarding the alert driver hardware characteristics.
; 
; The m851 has a grounded case, which requires that the piezo driver circuitry to work 
; opposite polarity from normal (ie, the buzzer is ON when the port is low, and OFF when
; the port is high. Thus, we set the output port HIGH when we wixh to shut of the buzzer.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_ALERT_START 
;
; Description:  Enables alert generation.
;
; Assumptions:  BRReg = HWBASEADDRESS, watch hardware is designed with  caseback at Vss.
;
; Usage      :  HW_ALERT_START
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_ALERT_START  MACRO
                ; put Buzzer Data Reg to 0 to enable the buzzer
                and  [BR:@LOW(OutPortR5)],  #~bR50    
                ; put Buzzer on
                ld   [BR:@LOW(BZControl)],  #bBZON   

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_ALERT_STOP 
;
; Description:  Immediately cancels alert.
;
; Assumptions:  BRReg = HWBASEADDRESS, watch hardware is designed with  caseback at Vss.
;
; Usage      :  HW_ALERT_STOP
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_ALERT_STOP       MACRO
                ; put  one shot Buzzer output low
                or   [BR:@LOW(BZControl)], #bBZSTP   
                ; put Buzzer output low
                and  [BR:@LOW(BZControl)], #~bBZON   
                ; put Buzzer Data Reg to 1 to disable the buzzer circuitry.
                or   [BR:@LOW(OutPortR5)], #bR50      
                
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_ALERT_INIT
;
; Description:  Initialize Buzzer output.
;
; Assumptions:  BRReg = HWBASEADDRESS, watch hardware is designed with  caseback at Vss.
;
; Usage      :  HW_ALERT_INIT
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_ALERT_INIT       MACRO

                HW_ALERT_STOP

                ENDM



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_ALERT_TOGGLE 
;
; Description:  Toggles the alert output pin, BZON.
;
; Assumptions:  BRReg = HWBASEADDRESS, watch hardware is designed with  caseback at Vss.
;
; Usage      :  HW_ALERT_TOGGLE
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_ALERT_TOGGLE MACRO
                ; toggle Buzzer output
                xor     [BR:@LOW(BZControl)],   #bBZON    
                
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_ALERT_SET_DUTY 
;
; Description:  Sets the alert duty
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_ALERT_SET_DUTY
;       
; Input(s)   :  AReg is set to DUTY_X, which consists of:
;               X = 0 to 7
;                    
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_ALERT_SET_DUTY   MACRO
                
                ; Clear duty cycle control bits
                and     [BR:@LOW(BZConfig)],#~DUTY_0    
                or      A, [BR:@LOW(BZConfig)]
                ; set current duty config
                ld      [BR:@LOW(BZConfig)],A           

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_ALERT_SET_FREQ 
;
; Description:  Sets the alert frequency
;
; Assumptions:  BRReg = HWBASEADDRESS.   
;
; Usage      :  HW_ALERT_SET_FREQ
;       
; Input(s)   :  AReg is set to frequency.
;               Available frequencies are:
;               FREQ_4096
;               FREQ_3276
;               FREQ_2730
;               FREQ_2340
;               FREQ_2048
;               FREQ_1638
;               FREQ_1365
;               FREQ_1170
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_ALERT_SET_FREQ   MACRO
				; Get current frequency data
				ld		B, [BR:@LOW(BZConfig)]
				; Mask off all frequency bits
				and		B, #@LOW(~FREQ_1170)
				; Or in other control bits.
				or		A, B
				; Load data to frequency control register
				ld		[BR:@LOW(BZConfig)], A

                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_CONFIG 
;
; Description:  Sets the basic configuration of the programmable timer
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_CONFIG PTMODE_X,PTCKSEL0_XXX,PTCKSEL1_XXX,PTCHSEL_X,PTPTOUT_XXX
;               where:
;               PTMODE_X:       PTMODE_8(8 bit mode 2 channel),PTMODE_16(16 bit mode 1 channel)
;               PTCKSEL0_XXX:   PTCKSEL0_OSC1,PTCKSEL0_OSC3 (Clock selection for Prescaler0)
;               PTCKSEL1_XXX:   PTCKSEL1_OSC1,PTCKSEL1_OSC3 (Clock selection for Prescaler1)
;               PTCHSEL_X:      PTCHSEL_TIMER0,PTCHSEL_TIMER1 (Timer selection(1|0) TOUT pin)
;               PTPTOUT_XXX:    PTPTOUT_OFF,PTPTOUT_ON  (TOUT output control)
;
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_PT_CONFIG        MACRO   PTMODE_X,PTCKSEL0_XXX,PTCKSEL1_XXX,PTCHSEL_X,PTPTOUT_XXX

                ld      [BR:@LOW(TimersControl)],#(PTMODE_X|PTCKSEL0_XXX|PTCKSEL1_XXX|PTCHSEL_X|PTPTOUT_XXX)

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_PTOUT_ON 
;
; Description:  Turns on the TOUT output pin frequencey on
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_PTOUT_ON
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_PTOUT_ON      MACRO
                ; Enable output pin for TOUT
                or      [BR:@LOW(OutPortR2)], #bR27             
                ; Enable TOUT as output to port
                or      [BR:@LOW(TimersControl)], #bPTOUT       

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_PTOUT_OFF 
;
; Description:  Turns off the TOUT output pin frequencey off. DC High output
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_PTOUT_OFF
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_PTOUT_OFF MACRO
                ; Disable TOUT as output to pin
                and     [BR:@LOW(TimersControl)], #@LOW(~bPTOUT) 
                ; Disble pin output
                and     [BR:@LOW(OutPortR2)], #@LOW(~bR27)       

                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_CONFIG_TIMER0 
;
; Description:  Set the Basic config for Timer0
;
; Assumptions:  BRReg = HWBASEADDRESS.
;               Timer0 is only used to generate the clock for the 4520 binary counter. 
;
; Usage      :  HW_PT_CONFIG_TIMER0
;               EVCNTMODE_XX:   EVCNTMODE_ON,EVCNTMODE_OFF  
;               CONTMODE_XX:    CONTMODE_ON,CONTMODE_OFF    
;               DIVRATIO_XX:    DIVRATIO_1,DIVRATIO_4,DIVRATIO_16,DIVRATIO_64       
;               PULSEPOL_X:     PULSEPOL_ON,PULSEPOL_OFF    
;               FUNCTIONSEL_X:  FUNCTIONSEL_ON,FUNCTIONSEL_OFF  
;       
; Input(s)   :  See above.
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_CONFIG_TIMER0 MACRO   EVCNTMODE_XX,CONTMODE_XX,DIVRATIO_XX,PULSEPOL_X,FUNCTIONSEL_X

                ld      [BR:@LOW(Timer0Control)], #(EVCNTMODE_XX|CONTMODE_XX|DIVRATIO_XX|PULSEPOL_X|FUNCTIONSEL_X)

                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_TRIGGER_PRESET_VALUE_TIMER0
;
; Description:  Load the preset value in timer0 reload register to the timer0 counter register.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;               Timer0 Reload Register already contains the correc value.
;
; Usage      :  HW_PT_TRIGGER_PRESET_VALUE_TIMER0
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_TRIGGER_PRESET_VALUE_TIMER0   MACRO

                or      [BR:@LOW(Timer0Control)], #bPSET0

                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_RUN_TIMER0
;
; Description:  Trigger Timer 0 to begin the count down.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_RUN_TIMER0
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_RUN_TIMER0    MACRO

                or      [BR:@LOW(Timer0Control)], #bPRUN0

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_STOP_TIMER0
;
; Description:  Stop Timer 0 count down
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_STOP_TIMER0
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_STOP_TIMER0       MACRO

                and     [BR:@LOW(Timer0Control)], #~bPRUN0

                ENDM
                
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_INIT 
;
; Description:  Init config for the programmable timer
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_INIT
;       
; Input(s)   :  None
;               
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_PT_INIT      MACRO   
                ; Timer init configurations:
                ;  2 8 bit timers
                ;  OSC1 is clock source for both 
                ;  Divide Ratios are set so clock is OSC1/64    for both
                ;  PulsePolarity is set for low (irrelevant, applies only to external clock
                ;  Event counter mode is off
                ;  Pulse width measurement function is off
                ;  Both are set for Single shot run mode.
                ; Set General configuration
                HW_PT_CONFIG PTMODE_8,PTCKSEL0_OSC1,PTCKSEL1_OSC1,PTCHSEL_TIMER0,PTPTOUT_OFF
                ; Set Timer0 specific parameters
                HW_PT_CONFIG_TIMER0 EVCNTMODE_OFF,CONTMODE_OFF,DIVRATIO_64,PULSEPOL_OFF,FUNCTIONSEL_OFF
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_TIMER0_INT_ENABLE
;
; Description:  Enable Programmable Timer0 Interrupt.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_TIMER0_INT_ENABLE
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/25/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_TIMER0_INT_ENABLE     MACRO

                or      [BR:@LOW(TimerIntEnable)], #bEPT0

                ENDM
                
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_TIMER0_INT_DISABLE
;
; Description:  Disable Programmable Timer0 Interrupt.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_TIMER0_INT_DISABLE
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/25/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_TIMER0_INT_DISABLE        MACRO

                and     [BR:@LOW(TimerIntEnable)], #@LOW(~bEPT0)

                ENDM
                
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_TIMER0_CLEAR_FACTOR_FLAG
;
; Description:  Clear Programmable Timer0 Factor Flag.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_TIMER0_CLEAR_FACTOR_FLAG
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/25/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_TIMER0_CLEAR_FACTOR_FLAG      MACRO

                ld      [BR:@LOW(TimerIntFlags)], #bFPT0

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_TURN_TIMER0_ON
;
; Description:  Start Timer0. This clears the factor flags, loads 
;               an initial count, enables the interrupt, and runs the timer.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_TURN_TIMER0_ON
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/25/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_TURN_TIMER0_ON        MACRO

                car     hwTMR0TurnOn

                ENDM
                
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_PT_TURN_TIMER0_OFF
;
; Description:  Stop Timer0. This clears the factor flags,  
;               disables the interrupt, and stops the timer.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_PT_TURN_TIMER0_OFF
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/25/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_PT_TURN_TIMER0_OFF       MACRO

                car     hwTMR0ShutOff

                ENDM                                
                
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_SVD_POWER_ON
;
; Description:  Power on the SVD circuitry in continuous sampling mode
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_SVD_POWER_ON
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_SVD_POWER_ON MACRO

                or      [BR:@LOW(SVDReg)],#bSVDON

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_SVD_POWER_OFF
;
; Description:  Power down the SVD circuitry
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_SVD_POWER_OFF
;       
; Input(s)   :  None
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_SVD_POWER_OFF    MACRO

                and     [BR:@LOW(SVDReg)],#~(bSVDON | bSVDSP)

                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_SVD_GET_LEVEL
;
; Description:  Get the SVD detection level output level in A register. 
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_SVD_GET_LEVEL
;       
; Input(s)   :  None.
;
; Output(s)  :  The SVD level is output in AReg.
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_SVD_GET_LEVEL    MACRO

                ld      A,[BR:@LOW(SVDReg)]
                and     A,#~(bSVDON | bSVDSP)

                ENDM

;        -          
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_SVD_GET_BATTERY_LEVEL
;
; Description:  Sample the SVD circuit to check the battery level. 
;               
; Assumptions:  BRReg = HWBASEADDRESS. 
;               Requires at least 7.8mSec to operate sample the power.
;
; Usage      :  HW_SVD_GET_BATTERY_LEVEL
;       
; Input(s):     HWICBLowBattDetectionLevel
;
; Output(s):    HWStatusFlag.bHWSVDBatteryLevelLow
;               bHWSVDBatteryLevelLow   = 0, Battery Voltage is OK. 
;                                   = 1, Battery Voltage is less than or equal to warning level. 
;               AReg is destroyed
;               BReg is destroyed
;               HLReg is destroyed
;
; Macro Change History:
;               02/27/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_SVD_GET_BATTERY_LEVEL    MACRO
                car     hwSVDGetBatteryLevel

CALLS   SUBROUTINE,'hwSVDGetBatteryLevel'
                ENDM
                

        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;      SERIAL INTERFACE  MACROS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;      EEPROM  MACROS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; NOTES Regarding EEPROM configuration: 
; 
; EEPROM type:
;                MICROCHIP        
;                24LC256      (32K x 8 bits)
; Power Consumption:
;       MICROCHIP DC and AC characteristics:
;              Write supply current:   3 mA
;              Read supply current:    400uA
;              Standby supply current: <1uA
;              Max. clock frequency:   400KHz
;              Power-up time:          1 ms
;              Power-up to write time: 5 ms
;       Power will require multiple Rxx pins to allow maximum current, or a transistor gated
;       supply from the battery.
;       Also, due to maximum power constraints, while the EEPROM is being accessed, the
;       EL, and Buzzer CANNOT be activated.
;
; Pinout:
;       The EEPROM uses the I2C two wire port protocol for communication. The EEPROM
;       acts as the slave device, and the Micro acts as the Master.
;       The following pins were chosen for EEPROM Communication:
;
;   Name                        Pin             Function
;   bHW_EEPROM_SDA              bP00            This pin is configured as the bi-directional 
;                                               data input/output port.
;
;   bxxxxxxxxxxxxx              bR11            Reserved for possble SPI interface. (MOSI)
;
;   HW_EEPROM_SCK               bR12            Master output serial clock
;
;   bxxxxxxxxxxxxx              bR13            Reserved for possible SPI interface. (CS, chip select)
;               
; NOTE that WP (write protect) and A0, A1, A2 (address lines) are left floating. This allows their 
;   internal pull-downs to de-activate WP, and set the chip adderss to 000.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_EE_READ 
;
; Description:  Read a block of data from serial EEPROM and store it in RAM
;
; Assumptions:  BRReg = HWBASEADDRESS.
;               1) The E2 has be previously powered on.
;
;               2) After reading at the end of the EEPROM (highest address), reading will continue
;                  at the beginning of the EEPROM (address 0).
;
;               3) The destination buffer (ram_buf) must be large enough to hold "size" number of
;                  bytes. "size16_const" can be up to the size of the EEPROM.
;
;               4) Macros will work with a serial MICROCHIP EEPROM of size 32K * 8.
;                  (see hweeprom.asm for more information on MICROCHIP EEPROMs)
;
; Usage      :  HW_EE_READ  ee_ad ram_buf size_var
;       
; Input(s)   :  
;               ee_ad        - 16-bit EEPROM address to read from
;               ram_buf      - RAM destination buffer (this is a fixed 16-bit label (address))
;               size16_var   - Number of bytes to read from the EEPROM (16-bit constant)
;
; Output(s)  :  AReg, BReg, HLReg, IXReg are destroyed.
;               HWRAMAddrLo, HWRAMAddrHi and HWSizeHi, HWSizeLo 
;               are updated to reflect the outcome of the read operation.
;               EEProm data is placed in RAM.
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_EE_READ  MACRO ee_ad,ram_buf,size_var
                ;[HWEEAddrHi]<-B,[HWEEAddrLo]<-A
                ld     BA, #ee_ad
                ld     [HWEEAddrLo], BA             
                ;[HWRAMAddrHi]<-B,[HWRAMAddrLo]<-A
                ld     BA,#ram_buf
                ld     [HWRAMAddrLo], BA                
                ;[HWSizeHi]<-B,[HWSizeLo]<-A
                ld     BA,#size_var
                ld     [HWSizeLo], BA               
                ; Read data from EEPROM into RAM
                car    hwEepromRead            

CALLS   SUBROUTINE,'hwEepromRead'

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_EE_WRITE
;
; Description:  Write a block of data to serial EEPROM
;
; Assumptions:  BRReg = HWBASEADDRESS.
;               1) The E2 has be previously powered on.
;
;               2) After writing to the end of the EEPROM (highest address), writing will continue
;                  at the beginning of the EEPROM (address 0).
;
;               3) Macros will work with a serial MICROCHIP EEPROM of size 32K * 8bit.
;                 (see hweeprom.asm for more information on MICROCHIP EEPROM)
;
; Usage:        HW_EE_WRITE ee_ad ram_buf size16_var
;       
; Input(s):  
;               ee_ad      - 16-bit EEPROM address to read from
;               ram_buf    - RAM destination buffer (this is a fixed 16-bit label (address))
;               size16_var - Number of bytes to read from the EEPROM (16-bit constant)
;
; Output(s)  :  AReg, BReg, HLReg are destroyed.
;               HWRAMAddrLo, HWRAMAddrHi    and HWSizeHi, HWSizeLo 
;               are updated to reflect the outcome of the write operation.
;
; Module Change History:
;               02/22/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_WRITE MACRO ee_ad,ram_buf,size_var
                ;[HWEEAddrHi]<-B,[HWEEAddrLo]<-A
                ld     BA, #ee_ad
                ld     [HWEEAddrLo], BA             
                ;[HWRAMAddrHi]<-B,[HWRAMAddrLo]<-A
                ld     BA, #ram_buf
                ld     [HWRAMAddrLo], BA                
                ;[HWSizeHi]<-B,[HWSizeLo]<-A
                ld     BA, #size_var
                ld     [HWSizeLo], BA               
                ; Write data to EEPROM
                car    hwEepromWrite                

CALLS   SUBROUTINE,'hwEepromWrite'

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EEPROM_ENABLE_POWER
;
; Description:  Power up the EEPROM VCC pin ONLY.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_EEPROM_ENABLE_POWER
;       
; Input(s)   :  None
;
; Output(s)  :  None.
;
; Macro Change History:
;               02/22/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EEPROM_ENABLE_POWER      MACRO
                ; Enable the power pin for the EEPROM, power option 1.
                and     [BR:@LOW(HWEEPROM_POWER_UP)], #@LOW(~bHWEEPROM_NOT_POWER_UP)
                ; Enable the power pins for the EEPROM, power option 2.
                ld      [BR:@LOW(HWEEPROM_POWER_UP_2)], #bHWEEPROM_POWER_UP_2
                    
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EEPROM_DISABLE_POWER
;
; Description:  Power down the EEPROM VCC pin   ONLY.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_EEPROM_ENABLE_POWER
;       
; Input(s)   :  None
;
; Output(s)  :  None.
;
; Macro Change History:
;               02/22/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EEPROM_DISABLE_POWER     MACRO
                ; Disable the power pin for the EEPROM, power option 1.
                or      [BR:@LOW(HWEEPROM_POWER_UP)], #bHWEEPROM_NOT_POWER_UP
                ; Disable the power pins for the EEPROM, power option 2.
                ld      [BR:@LOW(HWEEPROM_POWER_UP_2)], #@LOW(~bHWEEPROM_POWER_UP_2)
                    
                ENDM



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_POWER_ON
;
; Description:  Power up the EEPROM and initialze all I/O pins for EEPROM communication.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_EE_POWER_ON
;       
; Input(s)   :  None.
;
; Output(s)  :  None.
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_POWER_ON      MACRO
                ; Call routine to perform power up sequence.
                car     hwI2CEEPowerON
                
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_POWER_OFF
;
; Description:  Power down the EEPROM VCC set all I/O pins to prevent excess current drain.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_EE_POWER_OFF
;       
; Input(s)   :  None
;
; Output(s)  :  HLReg is destroyed.
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_POWER_OFF MACRO
                ; Call routine to perform the power down sequence.
                car     hwI2CEEPowerOFF
                
                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_INIT 
;
; Description:  Initialize EEPROM ports
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_EE_INIT
;       
; Input(s)   :  None
;
; Output(s)  :  HLReg is destroyed.
;
; Macro Change History:
;               02/22/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_INIT      MACRO

                HW_EE_POWER_OFF
                    
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_CURRENT_HIGH
;
; Description:  Sets a flag to indicate the EEPROM is in a condition
;               where it is using a lot of current
;
; Assumptions:  None. 
;
; Usage      :  HW_EE_CURRENT_HIGH
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Macro Change History:
;               03/01/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_CURRENT_HIGH  MACRO

                ld      HL, #HWStatusFlag
                or      [HL], #bHWEEHighCurrentState

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_CURRENT_LOW
;
; Description:  Clears a flag to indicate the EEPROM is in a condition
;               where it is not using a lot of current.
;
; Assumptions:  None. 
;
; Usage      :  HW_EE_CURRENT_LOW
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Macro Change History:
;               03/01/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_CURRENT_LOW   MACRO

                ld      HL, #HWStatusFlag
                and     [HL], #@LOW(~bHWEEHighCurrentState)

                ENDM






;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_SCLK_LEADING
;
; Description:  Simulates a rising edge of clock signal. This is the synchronous
;               serial clock between the micro and the EEPROM.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_EE_SCLK_LEADING
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_SCLK_LEADING  MACRO

                or      [BR:@LOW(HW_EEPROM_SCK)], #bHW_EEPROM_SCK

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_SCLK_TRAILING
;
; Description:  Simulates a trailing edge of clock signal. This is the synchronous
;               serial clock between the micro and the EEPROM.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_EE_SCLK_TRAILING
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Macro Change History:
;               02/22/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_SCLK_TRAILING MACRO

                and     [BR:@LOW(HW_EEPROM_SCK)], #~bHW_EEPROM_SCK

                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_INPUT_BIT
;
; Description:  Read and store a bit read from the EEPROM in the carry flag.
;               Checks the output of the EEPROM, Carry flag has the bit value. 
;
; Assumptions:  BRReg = HWBASEADDRESS.
;               Port HW_EEPROM_SDA is configured as an input.
;
; Usage      :  HW_EE_INPUT_BIT
;       
; Input(s)   :  None
;
; Output(s)  :  CarryFlag is set or cleared.
;
; Macro Change History:
;               02/23/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_INPUT_BIT     MACRO

                ; Clear carry flag, 
                and     SC, #@LOW(~bCarryFlag)
        
                ; 
                bit     [BR:@LOW(HW_EEPROM_SDA)], #bHW_EEPROM_SDA
                jrs     Z, ^HWEndEEInputComparison

                ; 
                or      SC, #bCarryFlag

^HWEndEEInputComparison:
    
                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_OUTPUT_BIT_HIGH
;
; Description:  Send a Hi data bit to the EEPROM.  This is accomplished by converting
;               HW_EEPROM_SDA to an input, and letting the SDA pull-up pull the line HIGH. 
;
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_EE_OUTPUT_BIT_HIGH
;       
; Input(s)   :  None
;
; Output(s)  :  Port HW_EEPROM_SDA is configured as an input. 
;               
; Macro Change History:
;               02/23/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_OUTPUT_BIT_HIGH MACRO
            
                HW_EE_SDA_INPUT
            
                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_OUTPUT_BIT_LOW
;
; Description:  Send a LOW data bit to the EEPROM. 
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_EE_OUTPUT_BIT_LOW
;       
; Input(s)   :  None
;
; Output(s)  :  Port HW_EEPROM_SDA is configured as an output. 
;
; Macro Change History:
;               02/23/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_OUTPUT_BIT_LOW    MACRO

                and     [BR:@LOW(HW_EEPROM_SDA)], #~bHW_EEPROM_SDA
                HW_EE_SDA_OUTPUT

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_SDA_INPUT
;
; Description:  Configure SDA line as an input port.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_EE_SDA_INPUT
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Macro Change History:
;               02/23/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_SDA_INPUT MACRO

                and     [BR:@LOW(HW_EEPROM_SDA_IO_CONTROL)], #@LOW(~bHW_EEPROM_SDA_IO_CONTROL)

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_SDA_OUTPUT
;
; Description:  Configure SDA line as an output port.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HW_EE_SDA_OUTPUT
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Macro Change History:
;               02/23/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_SDA_OUTPUT    MACRO

                or      [BR:@LOW(HW_EEPROM_SDA_IO_CONTROL)], #bHW_EEPROM_SDA_IO_CONTROL

                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_SDA_PULL_UP_DEACTIVE
;
; Description:  De-activate the SDA pull-up resistor.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;               Port HW_EEPROM_SDA_PULL_UP_CONTROL is configured as an output, NOT a Hi-Z port.
;
; Usage      :  HW_EE_SDA_PULL_UP_DEACTIVE
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Macro Change History:
;               02/23/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_SDA_PULL_UP_DEACTIVE  MACRO

                and     [BR:@LOW(HW_EEPROM_SDA_PULL_UP_CONTROL)], #@LOW(~bHW_EEPROM_SDA_PULL_UP_CONTROL)

                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_EE_SDA_PULL_UP_ACTIVE
;
; Description:  Activate the SDA pull-up resistor.
;
; Assumptions:  BRReg = HWBASEADDRESS.
;               Port HW_EEPROM_SDA_PULL_UP_CONTROL is configured as an output, NOT a Hi-Z port.
;
; Usage      :  HW_EE_SDA_PULL_UP_ACTIVE
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Macro Change History:
;               02/23/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_EE_SDA_PULL_UP_ACTIVE    MACRO

                or      [BR:@LOW(HW_EEPROM_SDA_PULL_UP_CONTROL)], #bHW_EEPROM_SDA_PULL_UP_CONTROL

                ENDM
        



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_KBD_INIT 
;
; Description:  Initializes KBD and disable all the interrupts
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;               External pull-ups connected to Rxx ports are set HIGH as outputs
;               automatically by chip reset. 
;
; Usage      :  HW_KBD_INIT
;       
; Input(s)   :  None   
;
; Output(s)  :  None  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_KBD_INIT     MACRO

                ; Disable KBD interrupts
                and     [BR:@LOW(IntEnableK00)], #~(bEK0L | bEK0H  | bEK1)  
                ; Clear interrupts factor flags
                ld      [BR:@LOW(InFlagK1)], #(bFK1|bFK0H|bFK0L)                

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_KBD_INTERRUPTS_INIT 
;
; Description:  Initializes KBD hardware for Interrupts
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;               External pull-ups connected to Rxx ports are set HIGH as outputs
;               automatically by chip reset. 
;
; Usage      :  HW_KBD_INTERRUPTS_INIT
;       
; Input(s)   :  None   
;
; Output(s)  :  IXReg is destroyed.  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_KBD_INTERRUPTS_INIT  MACRO

                ; Initialize Ring Stuck counter
                ld      IX, #HWKBDRingStuckCounter
                ld      [IX], #RINGSTUCKCOUNT
                
                ; Set Home Tracking bit (pull up is already activated on power up)
                ld      HL, #HWKBDTracking
                or      [HL], #bHWKBDHomeTracking

                ; Init the comparator register to 1 to accept a depress interrupt. 
                ld      [BR:@LOW(InCompK00)],#(HWCROWNMASK|HWTOPMASK)
                ld      [BR:@LOW(InCompK10)],#HWRINGMASK

                ; Reset previous KBD interrupt flags 
                ld      [BR:@LOW(InFlagK1)],#(bFK0L|bFK0H|bFK1)
                ; Enable the interrupt generation permission for K00-K06, K07 interrupt is disabled
                ld      [BR:@LOW(IntSelectionK00)],#(HW_CROWN_INTS_ON|HW_TOP_INTS_ON)
                ; Enable the interrupt generation permission for K10-K11
                ld      [BR:@LOW(IntSelectionK10)],#HW_RING_INTS_ON
                ; Enable KBD interrupts
                or      [BR:@LOW(IntEnableK00)],#(bEK1|bEK0H|bEK0L)


                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name :  HW_KBD_CANCEL_CURRENT_SWITCH_RELEASE
;
; Description:  Tell KBD driver not to pass currently depressed switch's release
;               event to the core.
;
; Assumptions:  BRReg = HWBASEADDRESS. 
;
; Usage      :  HWKBDCANCLECURRENTSWITCHRELEASE
;       
; Input(s)   :  None   
;
; Output(s)  :  Destroys HLReg  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_KBD_CANCEL_CURRENT_SWITCH_RELEASE    MACRO

                car     hwKBDCancelCurrentSwitchRelease

CALLS   SUBROUTINE,'hwKBDCancelCurrentSwitchRelease'
                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_KBD_SET_INTERRUPT_FLAG
;
; Description:  Sets Keyboard task flag to tell CORE keyboard event is ready.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_KBD_SET_INTERRUPT_FLAG
;       
; Input(s)   :  None
;
; Output(s)  :  HLreg
;
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_KBD_SET_INTERRUPT_FLAG   MACRO

                car     hwKBDSetInterruptFlag

CALLS   SUBROUTINE,'hwKBDSetInterruptFlag'

                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_KBD_CLEAR_INTERRUPT_FLAG
;
; Description:  Clears Keyboard task flag to cancel telling CORE keyboard event is ready.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_KBD_CLEAR_INTERRUPT_FLAG
;       
; Input(s)   :  None
;
; Output(s)  :  HLreg
;
; Module Change History:                                         
;               02/26/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_KBD_CLEAR_INTERRUPT_FLAG MACRO

                car     hwKBDClearInterruptFlag

CALLS   SUBROUTINE,'hwKBDClearInterruptFlag'

                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_KBD_READ_PORT_DATA
;
; Description:  Reads input port 3x to guarantee data is read
;
; Assumptions:  None.
;
; Usage      :  HW_KBD_READ_PORT_DATA
;
; Inputs:       IXReg points to port to be read.
;
; Outputs:      AREg contains data in port.
;
; Macro Change History:                                         
;               07/18/2000 RVD - Created Macro for mm851 
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_KBD_READ_PORT_DATA   MACRO

                car     hwKBDReadPortData

CALLS   SUBROUTINE,'hwKBDReadPortData'

                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_READ_BOND_OPTIONS
;
; Description:  Initializes bond options
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_READ_BOND_OPTIONS
;       
; Input(s)   :  None
;
; Output(s)  :  Bond option values in RAM are set.
;               AReg destroyed.
;               HLReg destroyed.
;               IXReg destroyed.  
;   
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_READ_BOND_OPTIONS        MACRO

                car     hwBondOp

CALLS   SUBROUTINE,'hwBondOp'
        
                ENDM


; Compile option: only include these macros if Debugging is enabled.
        IF (DEBUG_ENABLE == 1)



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_SET_R14
;
; Description:  Sets the R14 out High. ISR Used for monitoring.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_SET_R14
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_SET_R14      MACRO

                or      [BR:@LOW(OutPortR1)], #bR14

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_CLEAR_R14
;
; Description:  Sets the R14 out Low. ISR Used for monitoring.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_CLEAR_R14
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_CLEAR_R14        MACRO

                and     [BR:@LOW(OutPortR1)], #@LOW(~bR14)

                ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_SET_R15
;
; Description:  Sets the R15 out High. ISR Used for monitoring.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_SET_R15
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_SET_R15      MACRO

                or      [BR:@LOW(OutPortR1)], #bR15

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_CLEAR_R15
;
; Description:  Sets the R15 out Low. ISR Used for monitoring.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_CLEAR_R15
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_CLEAR_R15        MACRO

                and     [BR:@LOW(OutPortR1)], #@LOW(~bR15)

                ENDM



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_SET_R16
;
; Description:  Sets the R16 out High. Used for 1Hz Isr timing monitoring.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_SET_R16
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_SET_R16      MACRO

                or      [BR:@LOW(OutPortR1)], #bR16

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_CLEAR_R16
;
; Description:  Sets the R16 out Low. Used for 1Hz Isr timing monitoring.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_CLEAR_R16
;       
; Input(s)   :  None
;               
; Output(s)  :  None
;
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_CLEAR_R16        MACRO

                and     [BR:@LOW(OutPortR1)], #@LOW(~bR16)

                ENDM

        ENDIF


; Compile Option - only inclde these macros if Ring Debugging is enabled 
        IF (DEBUG_RING_ENABLE == 1)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_SET_R17
;
; Description:  Sets the R17 out High. ISR Used for monitoring.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_SET_R17
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_SET_R17      MACRO

                or      [BR:@LOW(OutPortR1)], #bR17

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_CLEAR_R17
;
; Description:  Clears the R17 out High. ISR Used for monitoring.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_CLEAR_R17
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Module Change History:                                         
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_CLEAR_R17        MACRO

                and     [BR:@LOW(OutPortR1)], #@LOW(~bR17)

                ENDM


        ENDIF




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 
; Macro Name :  HW_DELAY_WITH_OSC1 
;
; Description:  "Dead" delay loop. Allows the micro to delay for a specified time.
;               when OSC1 is the selected oscillator.
;
; Assumptions:  None. 
;
; Usage      :  HW_DELAY_WITH_OSC1 HW_XX_MSEC
;               where XX can be 01,05,10,15,or 20
;       
; Input(s)   :  None   
;
; Output(s)  :  AReg is destroyed  
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_DELAY_WITH_OSC1  MACRO   HW_XX_MSEC
                ld      A, #HW_XX_MSEC
                car     hwShortDelay

CALLS   SUBROUTINE,'hwShortDelay'
                ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 
; Macro Name :  HW_DELAY_WITH_OSC3 
;
; Description:  "Dead" delay loop. Allows the micro to delay for a specified time.
;               when OSC3 is the selected oscillator.
;
; Assumptions:  None. 
;
; Usage      :  HW_DELAY_WITH_OSC3 HW_XX_MSEC
;               where XX can be 01,05,10,15,or 20
;       
; Input(s)   :  None   
;
; Output(s)  :  AReg is zero  
;               BReg is zero
;
; Macro Change History:
;               02/28/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HW_DELAY_WITH_OSC3  MACRO   HW_XX_MSEC
                ld      A, #HW_XX_MSEC
                car     hwLongDelay

CALLS   SUBROUTINE,'hwLongDelay'
                ENDM

;        -                
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name:   HW_A_TO_D_INIT_OUT
;
; Description:  Initialize A to D input pins as outputs, LOW.
; 
; Assumptions:  BRReg = HWBASEADDRESS.
;
; Usage      :  HW_A_TO_D_INIT_OUT
;       
; Input(s)   :  None
;
; Output(s)  :  None
;
; Module Change History:                                         
;               04/11/2002 RVD - Created Macro for m851
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HW_A_TO_D_INIT_OUT        MACRO

                ; Set output data to LOW
                and     [BR:@LOW(InOutPortP10)], #@LOW(~(bP14|bP15|bP16|bP17))
                ; Set pins to outputs
                or      [BR:@LOW(P10Control)], #(bIOC14|bIOC15|bIOC16|bIOC17)

                ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : HW_UNPACK_CLEAR    
;
; Description : Clear the bUnpackFlag flag. This forces 8 bit math operations to execute
;               on both nibbles of a byte.
;
; Assumptions : None 
;               
; Usage       : HW_UNPACK_CLEAR
;               
; Input(s)    : None
;
; Output(s)   : None
;
;               ( Destroyed: None )
;
; Macro Change History : 
;
;               04/17/2002 RVD - Created Macro 
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                        
HW_UNPACK_CLEAR    MACRO

                and     SC, #@LOW(~bUnpackFlag)
                                
        ENDM
              

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Macro Name  : HW_UNPACK_SET    
;
; Description : Set the bUnpackFlag flag. This forces 8 bit math operations to execute
;               on only the lower nibble of a byte, and clears the upper nibble (ie, forces the 
;               micro to simulate a 4 bit processor).
;
; Assumptions : None 
;               
; Usage       : HW_UNPACK_SET
;               
; Input(s)    : None
;
; Output(s)   : None
;
;               ( Destroyed: None )
;
; Macro Change History : 
;
;               04/17/2002 RVD - Created Macro 
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                        
HW_UNPACK_SET    MACRO

                or      SC, #bUnpackFlag
                                
        ENDM
              



