;---------------------------------------
;PREREQUISITE: LOADF HIGH_BYTE
; LOADF LOW_BYTE
HEX_TO_DEC
;0X2710=10,OOO, 0X3E8=1,000, 0X64=100, 0X0A=10, 0X01=1
;0X270F = 9999
MOVF_F LOW_BYTE, TEMP_LOW
CLRF THOUSANDS
CLRF HUNDREDS
CLRF TENS
CLRF ONES
CHECK_H
MOVF_F TEMP_LOW, TEMP
MOVLW .100
SUBWF TEMP, F
BTFSC STATUS, C
GOTO $ + 2
GOTO CHECK_T
INCF HUNDREDS, F
MOVF_F TEMP, TEMP_LOW
GOTO CHECK_H
CHECK_T MOVF_F TEMP_LOW, TEMP
MOVLW .10
SUBWF TEMP, F
BTFSC STATUS, C
GOTO $ + 2
GOTO CHECK_O
INCF TENS, F
MOVF_F TEMP, TEMP_LOW
GOTO CHECK_T
CHECK_O MOVF_F TEMP_LOW, TEMP
MOVLW .1
SUBWF TEMP, F
BTFSC STATUS, C
GOTO $ + 2
GOTO HEXDEC2
INCF ONES, F
MOVF_F TEMP, TEMP_LOW
GOTO CHECK_O
HEXDEC2
HI_0 BTFSC HIGH_BYTE, 0
GOTO $ + 2
GOTO HI_1
MOVLW .2
ADDWF HUNDREDS, F
MOVLW .5
ADDWF TENS, F
MOVLW .6
ADDWF ONES, F
HI_1 BTFSC HIGH_BYTE, 1
GOTO $ + 2
GOTO HI_2
MOVLW .5
ADDWF HUNDREDS, F
MOVLW .1
ADDWF TENS, F
MOVLW .2
ADDWF ONES, F
HI_2 BTFSC HIGH_BYTE, 2
GOTO $ + 2
GOTO HI_3
MOVLW .1
ADDWF THOUSANDS, F
MOVLW .2
ADDWF TENS, F
MOVLW .4
ADDWF ONES, F
HI_3 BTFSC HIGH_BYTE, 3
GOTO $ + 2
GOTO HI_4
MOVLW .2
ADDWF THOUSANDS, F
MOVLW .4
ADDWF TENS, F
MOVLW .8
ADDWF ONES, F
HI_4 BTFSC HIGH_BYTE, 4
GOTO $ + 2
GOTO HI_5
MOVLW .4
ADDWF THOUSANDS, F
MOVLW .9
ADDWF TENS, F
MOVLW .6
ADDWF ONES, F
HI_5 BTFSC HIGH_BYTE, 5
GOTO $ + 2
GOTO ENDBITSUM
MOVLW .8
ADDWF THOUSANDS, F
MOVLW .1
ADDWF HUNDREDS, F
MOVLW .9
ADDWF TENS, F
MOVLW .2
ADDWF ONES, F
ENDBITSUM
;PROCESS OVERFLOW
ONES_OVER
MOVLW .9
SUBWF ONES, W
BTFSC STATUS, Z
GOTO TENS_OVER
BTFSS STATUS, C
GOTO TENS_OVER
INCF TENS, F
MOVLW .10
SUBWF ONES, F
TENS_OVER
MOVLW .9
SUBWF TENS, W
BTFSC STATUS, Z
GOTO HUNDREDS_OVER
BTFSS STATUS, C
GOTO HUNDREDS_OVER
INCF HUNDREDS, F
MOVLW .10
SUBWF TENS, F
HUNDREDS_OVER
MOVLW .9
SUBWF HUNDREDS, W
BTFSC STATUS, Z
GOTO ENDHEX_TO_DEC
BTFSS STATUS, C
GOTO ENDHEX_TO_DEC
INCF THOUSANDS, F
MOVLW .10
SUBWF HUNDREDS, F
ENDHEX_TO_DEC
RETURN