;----------------------------------------------------------
; Code Produced by the Proton+ 3.3.4.8
; Copyright Rosetta Technologies/Crownhill Associates Ltd
; Written by Les Johnson. July 2008
;----------------------------------------------------------
;
#DEFINE CONFIG_REQ 1
 LIST  P = 18F452, F = INHX32, W = 2, X = ON, R = DEC, MM = ON, N = 0, C = 255
TOSU EQU 0X0FFF
TOSLH EQU 0X0FFE
TOSH EQU 0X0FFE
TOSL EQU 0X0FFD
STKPTR EQU 0X0FFC
PCLATU EQU 0X0FFB
PCLATH EQU 0X0FFA
PCL EQU 0X0FF9
TBLPTRLHH EQU 0X0FF8
TBLPTRU EQU 0X0FF8
TBLPTRLH EQU 0X0FF7
TBLPTRH EQU 0X0FF7
TBLPTRL EQU 0X0FF6
TABLAT EQU 0X0FF5
PRODLH EQU 0X0FF4
PRODH EQU 0X0FF4
PRODL EQU 0X0FF3
INTCON EQU 0X0FF2
INTCON1 EQU 0X0FF2
INTCON2 EQU 0X0FF1
INTCON3 EQU 0X0FF0
INDF0 EQU 0X0FEF
POSTINC0 EQU 0X0FEE
POSTDEC0 EQU 0X0FED
PREINC0 EQU 0X0FEC
PLUSW0 EQU 0X0FEB
FSR0LH EQU 0X0FEA
FSR0H EQU 0X0FEA
FSR0L EQU 0X0FE9
WREG EQU 0X0FE8
INDF1 EQU 0X0FE7
POSTINC1 EQU 0X0FE6
POSTDEC1 EQU 0X0FE5
PREINC1 EQU 0X0FE4
PLUSW1 EQU 0X0FE3
FSR1LH EQU 0X0FE2
FSR1H EQU 0X0FE2
FSR1L EQU 0X0FE1
BSR EQU 0X0FE0
INDF2 EQU 0X0FDF
POSTINC2 EQU 0X0FDE
POSTDEC2 EQU 0X0FDD
PREINC2 EQU 0X0FDC
PLUSW2 EQU 0X0FDB
FSR2LH EQU 0X0FDA
FSR2H EQU 0X0FDA
FSR2L EQU 0X0FD9
STATUS EQU 0X0FD8
TMR0LH EQU 0X0FD7
TMR0H EQU 0X0FD7
TMR0L EQU 0X0FD6
T0CON EQU 0X0FD5
OSCCON EQU 0X0FD3
LVDCON EQU 0X0FD2
HLVDCON EQU 0X0FD2
WDTCON EQU 0X0FD1
RCON EQU 0X0FD0
TMR1LH EQU 0X0FCF
TMR1H EQU 0X0FCF
TMR1L EQU 0X0FCE
T1CON EQU 0X0FCD
TMR2 EQU 0X0FCC
PR2 EQU 0X0FCB
T2CON EQU 0X0FCA
SSPBUF EQU 0X0FC9
SSPADD EQU 0X0FC8
SSPSTAT EQU 0X0FC7
SSPCON1 EQU 0X0FC6
SSPCON2 EQU 0X0FC5
ADRESLH EQU 0X0FC4
ADRESH EQU 0X0FC4
ADRESL EQU 0X0FC3
ADCON0 EQU 0X0FC2
ADCON1 EQU 0X0FC1
CCPR1LH EQU 0X0FBF
CCPR1H EQU 0X0FBF
CCPR1L EQU 0X0FBE
CCP1CON EQU 0X0FBD
CCPR2LH EQU 0X0FBC
CCPR2H EQU 0X0FBC
CCPR2L EQU 0X0FBB
CCP2CON EQU 0X0FBA
TMR3LH EQU 0X0FB3
TMR3H EQU 0X0FB3
TMR3L EQU 0X0FB2
T3CON EQU 0X0FB1
SPBRG EQU 0X0FAF
RCREG EQU 0X0FAE
TXREG EQU 0X0FAD
TXSTA EQU 0X0FAC
RCSTA EQU 0X0FAB
EEADR EQU 0X0FA9
EEDATL EQU 0X0FA8
EEDATA EQU 0X0FA8
EECON2 EQU 0X0FA7
EECON1 EQU 0X0FA6
IPR2 EQU 0X0FA2
PIR2 EQU 0X0FA1
PIE2 EQU 0X0FA0
IPR1 EQU 0X0F9F
PIR1 EQU 0X0F9E
PIE1 EQU 0X0F9D
TRISE EQU 0X0F96
TRISD EQU 0X0F95
TRISC EQU 0X0F94
TRISB EQU 0X0F93
TRISA EQU 0X0F92
LATE EQU 0X0F8D
LATD EQU 0X0F8C
LATC EQU 0X0F8B
LATB EQU 0X0F8A
LATA EQU 0X0F89
PORTE EQU 0X0F84
PORTD EQU 0X0F83
PORTC EQU 0X0F82
PORTB EQU 0X0F81
PORTA EQU 0X0F80
_I2C_SCL_PORT = TRISC
_I2C_SCL_PIN = 3
_I2C_SDA_PORT = TRISC
_I2C_SDA_PIN = 4
STKFUL=7
STKUNF=6
GIE=7
GIEH=7
PEIE=6
GIEL=6
TMR0IE=5
T0IE=5
INT0IE=4
INT0E=4
RBIE=3
TMR0IF=2
T0IF=2
INT0IF=1
INT0F=1
RBIF=0
NOT_RBPU=7
RBPU=7
INTEDG0=6
INTEDG1=5
INTEDG2=4
TMR0IP=2
T0IP=2
RBIP=0
INT2IP=7
INT1IP=6
INT2IE=4
INT1IE=3
INT2IF=1
INT1IF=0
N=4
OV=3
Z=2
DC=1
C=0
TMR0ON=7
T08BIT=6
T0CS=5
T0SE=4
PSA=3
T0PS2=2
T0PS1=1
T0PS0=0
SCS=0
IRVST=5
LVDEN=4
LVDL3=3
LVDL2=2
LVDL1=1
LVDL0=0
SWDTE=0
SWDTEN=0
IPEN=7
NOT_RI=4
RI=4
NOT_TO=3
TO=3
NOT_PD=2
PD=2
NOT_POR=1
POR=1
NOT_BOR=0
BOR=0
RD16=7
T1CKPS1=5
T1CKPS0=4
T1OSCEN=3
NOT_T1SYNC=2
T1SYNC=2
T1INSYNC=2
TMR1CS=1
TMR1ON=0
TOUTPS3=6
TOUTPS2=5
TOUTPS1=4
TOUTPS0=3
TMR2ON=2
PP_TMR2ON=2
T2CKPS1=1
PP_T2CKPS1=1
T2CKPS0=0
PP_T2CKPS0=0
SMP=7
CKE=6
D=5
I2C_DAT=5
NOT_A=5
NOT_ADDRESS=5
D_A=5
DATA_ADDRESS=5
P=4
I2C_STOP=4
S=3
I2C_START=3
R=2
I2C_READ=2
NOT_W=2
NOT_WRITE=2
R_W=2
PP_R_W=2
READ_WRITE=2
UA=1
BF=0
WCOL=7
SSPOV=6
SSPEN=5
CKP=4
SSPM3=3
SSPM2=2
SSPM1=1
SSPM0=0
GCEN=7
ACKSTAT=6
ACKDT=5
ACKEN=4
PP_ACKEN=4
RCEN=3
PP_RCEN=3
PEN=2
PP_PEN=2
RSEN=1
PP_RSEN=1
SEN=0
PP_SEN=0
ADCS1=7
ADCS0=6
CHS2=5
CHS1=4
CHS0=3
GO=2
NOT_DONE=2
DONE=2
GO_DONE=2
PP_GO_DONE=2
ADON=0
PP_ADON=0
ADFM=7
ADCS2=6
PCFG3=3
PCFG2=2
PCFG1=1
PCFG0=0
DC1B1=5
CCP1X=5
DC1B0=4
CCP1Y=4
CCP1M3=3
CCP1M2=2
CCP1M1=1
CCP1M0=0
DC2B1=5
CCP2X=5
DC2B0=4
CCP2Y=4
CCP2M3=3
CCP2M2=2
CCP2M1=1
CCP2M0=0
RD16=7
T3CCP2=6
T3CKPS1=5
T3CKPS0=4
T3CCP1=3
NOT_T3SYNC=2
T3SYNC=2
T3INSYNC=2
TMR3CS=1
TMR3ON=0
CSRC=7
TX9=6
NOT_TX8=6
TX8_9=6
TXEN=5
SYNC=4
BRGH=2
TRMT=1
TX9D=0
TXD8=0
SPEN=7
RX9=6
RC9=6
NOT_RC8=6
RC8_9=6
SREN=5
CREN=4
PP_CREN=4
ADDEN=3
FERR=2
OERR=1
PP_OERR=1
RX9D=0
RCD8=0
EEIP=4
BCLIP=3
LVDIP=2
TMR3IP=1
CCP2IP=0
EEIF=4
BCLIF=3
LVDIF=2
TMR3IF=1
CCP2IF=0
EEIE=4
BCLIE=3
LVDIE=2
TMR3IE=1
CCP2IE=0
PSPIP=7
ADIP=6
RCIP=5
TXIP=4
SSPIP=3
CCP1IP=2
TMR2IP=1
TMR1IP=0
PSPIF=7
ADIF=6
RCIF=5
PP_RCIF=5
TXIF=4
PP_TXIF=4
SSPIF=3
CCP1IF=2
TMR2IF=1
TMR1IF=0
PSPIE=7
ADIE=6
RCIE=5
TXIE=4
SSPIE=3
CCP1IE=2
TMR2IE=1
TMR1IE=0
IBF=7
OBF=6
IBOV=5
PSPMODE=4
TRISE2=2
TRISE1=1
TRISE0=0
EEPGD=7
PP_EEPGD=7
CFGS=6
FREE=4
WRERR=3
WREN=2
PP_WREN=2
WR=1
PP_WR=1
RD=0
PP_RD=0
RA0=0
AN0=0
RA1=1
AN1=1
RA2=2
AN2=2
VREFM=2
RA3=3
AN3=3
VREFP=3
RA4=4
T0CKI=4
RA5=5
AN4=5
SS=5
LVDIN=5
RA6=6
OSC2=6
CLKO=6
RB0=0
INT0=0
RB1=1
INT1=1
RB2=2
INT2=2
RB3=3
CCP2A=3
RB4=4
RB5=5
RB6=6
RB7=7
RC0=0
T1OSO=0
T1CKI=0
RC1=1
T1OSI=1
CCP2=1
RC2=2
CCP1=2
RC3=3
SCK=3
SCL=3
RC4=4
SDI=4
SDA=4
RC5=5
SDO=5
RC6=6
TX=6
CK=6
RC7=7
RX=7
RD0=0
PSP0=0
RD1=1
PSP1=1
RD2=2
PSP2=2
RD3=3
PSP3=3
RD4=4
PSP4=4
RD5=5
PSP5=5
RD6=6
PSP6=6
RD7=7
PSP7=7
RE0=0
RD=0
PP_RD=0
AN5=0
RE1=1
WR=1
PP_WR=1
AN6=1
RE2=2
CS=2
AN7=2
  __MAXRAM 0XFFF
  __BADRAM 0X600-0XF7F
  __BADRAM 0XF85-0XF88
  __BADRAM 0XF8E-0XF91
  __BADRAM 0XF97-0XF9C
  __BADRAM 0XFA3-0XFA5
  __BADRAM 0XFAA
  __BADRAM 0XFB4-0XFB9
OSCS_ON_1 EQU 0XDF
OSCS_OFF_1 EQU 0XFF
LP_OSC_1 EQU 0XF8
XT_OSC_1 EQU 0XF9
HS_OSC_1 EQU 0XFA
RC_OSC_1 EQU 0XFB
EC_OSC_1 EQU 0XFC
ECIO_OSC_1 EQU 0XFD
HSPLL_OSC_1 EQU 0XFE
RCIO_OSC_1 EQU 0XFF
BOR_ON_2 EQU 0XFF
BOR_OFF_2 EQU 0XFD
PWRT_OFF_2 EQU 0XFF
PWRT_ON_2 EQU 0XFE
BORV_20_2 EQU 0XFF
BORV_27_2 EQU 0XFB
BORV_42_2 EQU 0XF7
BORV_45_2 EQU 0XF3
WDT_ON_2 EQU 0XFF
WDT_OFF_2 EQU 0XFE
WDTPS_128_2 EQU 0XFF
WDTPS_64_2 EQU 0XFD
WDTPS_32_2 EQU 0XFB
WDTPS_16_2 EQU 0XF9
WDTPS_8_2 EQU 0XF7
WDTPS_4_2 EQU 0XF5
WDTPS_2_2 EQU 0XF3
WDTPS_1_2 EQU 0XF1
CCP2MX_ON_3 EQU 0XFF
CCP2MX_OFF_3 EQU 0XFE
STVR_ON_4 EQU 0XFF
STVR_OFF_4 EQU 0XFE
LVP_ON_4 EQU 0XFF
LVP_OFF_4 EQU 0XFB
DEBUG_ON_4 EQU 0X7F
DEBUG_OFF_4 EQU 0XFF
CP0_ON_5 EQU 0XFE
CP0_OFF_5 EQU 0XFF
CP1_ON_5 EQU 0XFD
CP1_OFF_5 EQU 0XFF
CP2_ON_5 EQU 0XFB
CP2_OFF_5 EQU 0XFF
CP3_ON_5 EQU 0XF7
CP3_OFF_5 EQU 0XFF
CPB_ON_5 EQU 0XBF
CPB_OFF_5 EQU 0XFF
CPD_ON_5 EQU 0X7F
CPD_OFF_5 EQU 0XFF
WRT0_ON_6 EQU 0XFE
WRT0_OFF_6 EQU 0XFF
WRT1_ON_6 EQU 0XFD
WRT1_OFF_6 EQU 0XFF
WRT2_ON_6 EQU 0XFB
WRT2_OFF_6 EQU 0XFF
WRT3_ON_6 EQU 0XF7
WRT3_OFF_6 EQU 0XFF
WRTC_ON_6 EQU 0XDF
WRTC_OFF_6 EQU 0XFF
WRTB_ON_6 EQU 0XBF
WRTB_OFF_6 EQU 0XFF
WRTD_ON_6 EQU 0X7F
WRTD_OFF_6 EQU 0XFF
EBTR0_ON_7 EQU 0XFE
EBTR0_OFF_7 EQU 0XFF
EBTR1_ON_7 EQU 0XFD
EBTR1_OFF_7 EQU 0XFF
EBTR2_ON_7 EQU 0XFB
EBTR2_OFF_7 EQU 0XFF
EBTR3_ON_7 EQU 0XF7
EBTR3_OFF_7 EQU 0XFF
EBTRB_ON_7 EQU 0XBF
EBTRB_OFF_7 EQU 0XFF
CONFIG1L EQU 0X300000
CONFIG1H EQU 0X300001
CONFIG2L EQU 0X300002
CONFIG2H EQU 0X300003
CONFIG3L EQU 0X300004
CONFIG3H EQU 0X300005
CONFIG4L EQU 0X300006
CONFIG4H EQU 0X300007
CONFIG5L EQU 0X300008
CONFIG5H EQU 0X300009
CONFIG6L EQU 0X30000A
CONFIG6H EQU 0X30000B
CONFIG7L EQU 0X30000C
CONFIG7H EQU 0X30000D
DEVID1 EQU 0X3FFFFE
DEVID2 EQU 0X3FFFFF
IDLOC0 EQU 0X200000
__IDLOC0 EQU 0X200000
IDLOC1 EQU 0X200001
__IDLOC1 EQU 0X200001
IDLOC2 EQU 0X200002
__IDLOC2 EQU 0X200002
IDLOC3 EQU 0X200003
__IDLOC3 EQU 0X200003
IDLOC4 EQU 0X200004
__IDLOC4 EQU 0X200004
IDLOC5 EQU 0X200005
__IDLOC5 EQU 0X200005
IDLOC6 EQU 0X200006
__IDLOC6 EQU 0X200006
IDLOC7 EQU 0X200007
__IDLOC7 EQU 0X200007
#DEFINE __18F452 1
#DEFINE XTAL 4
#DEFINE _CORE 16
#DEFINE _MAXRAM 1536
#DEFINE _RAM_END 1536
#DEFINE _MAXMEM 32768
#DEFINE _ADC 8
#DEFINE _ADC_RES 10
#DEFINE _EEPROM 256
#DEFINE RAM_BANKS 6
#DEFINE _USART 1
#DEFINE _USB 0
#DEFINE _FLASH 1
#DEFINE _CWRITE_BLOCK 8
#DEFINE BANK0_START 128
#DEFINE BANK0_END 255
#DEFINE BANK1_START 256
#DEFINE BANK1_END 511
#DEFINE BANK2_START 512
#DEFINE BANK2_END 767
#DEFINE BANK3_START 768
#DEFINE BANK3_END 1023
#DEFINE BANK4_START 1024
#DEFINE BANK4_END 1279
#DEFINE BANK5_START 1280
#DEFINE BANK5_END 1535
#DEFINE BANKA_START 0
#DEFINE BANKA_END 127
#DEFINE _SYSTEM_VARIABLE_COUNT 51
RAM_BANK = 0
#DEFINE LCD#DTPORT PORTD
#DEFINE LCD#DTPIN 4
#DEFINE LCD#RSPORT PORTB
#DEFINE LCD#RSPIN 0
#DEFINE LCD#ENPORT PORTB
#DEFINE LCD#ENPIN 1
#DEFINE LCD#RWPORT PORTB
#DEFINE LCD#RWPIN 2
#DEFINE LCD#CS1PORT PORTB
#DEFINE LCD#CS1PIN 3
#DEFINE LCD#CS2PORT PORTB
#DEFINE LCD#CS2PIN 4
#DEFINE LCD#TYPE 1
#DEFINE INTERNAL#FONT 1
#DEFINE CLRW CLRF WREG
#DEFINE NEGW NEGF WREG
#DEFINE SKPC BTFSS STATUS,0
#DEFINE SKPNC BTFSC STATUS,0
#DEFINE CLRC BCF STATUS,0
#DEFINE SETC BSF STATUS,0
#DEFINE SKPZ BTFSS STATUS,2
#DEFINE SKPNZ BTFSC STATUS,2
#DEFINE CLRZ BCF STATUS,2
#DEFINE SETZ BSF STATUS,2
MOVFW MACRO M#VARIN
        MOVF M#VARIN,W
        ENDM
RLF MACRO M#VARIN,M#DEST
        RLCF M#VARIN,M#DEST
        ENDM
RRF MACRO M#VARIN,M#DEST
        RRCF M#VARIN,M#DEST
        ENDM
JUMP MACRO LABEL
        GOTO LABEL
        ENDM
F@CALL MACRO M#DEST
IF (M#DEST < 1)
        CALL M#DEST
ELSE
IF (M#DEST > $)
        CALL M#DEST
ELSE
IF (M#DEST < ($ - 0X03FF))
        CALL M#DEST
ELSE
        RCALL M#DEST
ENDIF
ENDIF
ENDIF
        ENDM
F@JUMP MACRO M#DEST
IFDEF WATCHDOG_REQ
IF ($ == M#DEST)
        CLRWDT
ENDIF
ENDIF
IF (M#DEST < 1)
        GOTO M#DEST
ELSE
IF ((M#DEST) > $)
        GOTO M#DEST
ELSE
IF ((M#DEST) < ($ - 0X03FF))
        GOTO M#DEST
ELSE
        BRA M#DEST
ENDIF
ENDIF
ENDIF
        ENDM
IFDEF WATCHDOG_REQ
        CHK@SLF MACRO M#DEST
IF ($ == M#DEST)
        CLRWDT
ENDIF
        ENDM
ENDIF
G@OTO MACRO M#DEST
IF (M#DEST < 1)
        BTFSC STATUS,OV
        GOTO M#DEST
ELSE
IF (M#DEST > $)
        BTFSC STATUS,OV
        GOTO M#DEST
ELSE
IF (M#DEST < ($ - 127))
        BTFSC STATUS,OV
        GOTO M#DEST
ELSE
        BOV M#DEST
ENDIF
ENDIF
ENDIF
        ENDM
GO@TO MACRO M#DEST
IF (M#DEST < 1)
        GOTO M#DEST
ELSE
IF (M#DEST > $)
        GOTO M#DEST
ELSE
IF (M#DEST < ($ - 0X03FF))
        GOTO M#DEST
ELSE
        BRA M#DEST
ENDIF
ENDIF
ENDIF
        ENDM
S@B MACRO M#VARIN
IF ((M#VARIN > BANKA_END) & (M#VARIN < 0X0F80))
IF ((M#VARIN & 0X0F00) != (RAM_BANK << 8))
        MOVLB HIGH (M#VARIN)
        RAM_BANK = (M#VARIN >> 8)
ENDIF
ENDIF
        ENDM
R@B MACRO
IF(RAM_BANK != 0)
        MOVLB 0
        RAM_BANK = 0
ENDIF
        ENDM
WREG_BYTE MACRO M#BYTEOUT
        MOVFF WREG,M#BYTEOUT
        ENDM
WREG_BIT MACRO M#VAROUT,M#BITOUT
        S@B M#VAROUT
        BTFSC WREG,0
        BSF M#VAROUT,M#BITOUT
        BTFSS WREG,0
        BCF M#VAROUT,M#BITOUT
        R@B
        ENDM
WREG_WORD MACRO M#WORDOUT
        MOVFF WREG,M#WORDOUT
        MOVLW 0
        MOVFF WREG,M#WORDOUT + 1
        ENDM
WREG_DWORD MACRO M#DWORDOUT
        MOVFF WREG,M#DWORDOUT
        MOVLW 0
        MOVFF WREG,M#DWORDOUT + 3
        MOVFF WREG,M#DWORDOUT + 2
        MOVFF WREG,M#DWORDOUT + 1
        ENDM
BYTE_WREG MACRO M#BYTEIN
        MOVFF M#BYTEIN,WREG
        ENDM
NUM_WREG MACRO M#NUMIN
        MOVLW (M#NUMIN & 255)
        ENDM
NUM_BYTE MACRO M#NUMIN,M#BYTEOUT
        MOVLW (M#NUMIN & 255)
        MOVFF WREG,M#BYTEOUT
        ENDM
NUM_BIT MACRO M#NUMIN,M#VAROUT,M#BITOUT
        S@B M#VAROUT
IF((M#NUMIN & 1) == 1)
        BSF M#VAROUT,M#BITOUT
ELSE
        BCF M#VAROUT,M#BITOUT
ENDIF
        R@B
        ENDM
NUM_WORD MACRO M#NUMIN,M#WORDOUT
IFDEF _USELFSR
IF(M#WORDOUT == FSR0L)
        LFSR 0,M#NUMIN
        EXITM
ENDIF
IF(M#WORDOUT == FSR1L)
        LFSR 1,M#NUMIN
        EXITM
ENDIF
IF(M#WORDOUT == FSR2L)
        LFSR 2,M#NUMIN
        EXITM
ENDIF
ENDIF
        S@B M#WORDOUT
        MOVLW (M#NUMIN & 255)
        MOVWF M#WORDOUT
        S@B M#WORDOUT + 1
        MOVLW HIGH (M#NUMIN)
        MOVWF M#WORDOUT + 1
        R@B
        ENDM
NUM_DWORD MACRO M#NUMIN,M#DWORDOUT
        S@B M#DWORDOUT
        MOVLW LOW (M#NUMIN)
        MOVWF M#DWORDOUT
        S@B M#DWORDOUT + 1
        MOVLW HIGH (M#NUMIN)
        MOVWF M#DWORDOUT + 1
        S@B M#DWORDOUT + 2
        MOVLW ((M#NUMIN >> 16) & 255)
        MOVWF M#DWORDOUT + 2
        S@B M#DWORDOUT + 3
        MOVLW ((M#NUMIN >> 24) & 255)
        MOVWF M#DWORDOUT + 3
        R@B
        ENDM
BIT_WREG MACRO M#VARIN,M#BITIN
        S@B M#VARIN
        CLRW
        BTFSC M#VARIN,M#BITIN
        MOVLW 1
        R@B
        ENDM
BIT_BYTE MACRO M#VARIN,M#BITIN,M#BYTEOUT
        S@B M#VARIN
        CLRW
        BTFSC M#VARIN,M#BITIN
        MOVLW 1
        S@B M#BYTEOUT
        MOVWF M#BYTEOUT
        R@B
        ENDM
BIT_BIT MACRO M#VARIN,M#BITIN,M#VAROUT,M#BITOUT
IF ((M#VARIN & 0X0F00) == (M#VAROUT & 0X0F00))
        S@B M#VARIN
        BTFSC M#VARIN,M#BITIN
        BSF M#VAROUT,M#BITOUT
        BTFSS M#VARIN,M#BITIN
        BCF M#VAROUT,M#BITOUT
ELSE
IF ((M#VARIN <= BANKA_END) | (M#VARIN >= 0X0F80))
        S@B M#VAROUT
        BTFSC M#VARIN,M#BITIN
        BSF M#VAROUT,M#BITOUT
        BTFSS M#VARIN,M#BITIN
        BCF M#VAROUT,M#BITOUT
ELSE
IF ((M#VAROUT <= BANKA_END) | (M#VAROUT >= 0X0F80))
        S@B M#VARIN
        BTFSC M#VARIN,M#BITIN
        BSF M#VAROUT,M#BITOUT
        BTFSS M#VARIN,M#BITIN
        BCF M#VAROUT,M#BITOUT
ELSE
        S@B M#VARIN
        CLRDC
        BTFSC M#VARIN,M#BITIN
        SETDC
        S@B M#VAROUT
        SKPNDC
        BSF M#VAROUT,M#BITOUT
        SKPDC
        BCF M#VAROUT,M#BITOUT
ENDIF
ENDIF
ENDIF
        R@B
        ENDM
BIT_WORD MACRO M#VARIN,M#BITIN,M#WORDOUT
        S@B M#WORDOUT + 1
        CLRF M#WORDOUT + 1
        BIT_BYTE M#VARIN,M#BITIN,M#WORDOUT
        ENDM
BIT_DWORD MACRO M#VARIN,M#BITIN,M#DWORDOUT
        S@B M#DWORDOUT + 3
        CLRF M#DWORDOUT + 3
        S@B M#DWORDOUT + 2
        CLRF M#DWORDOUT + 2
        S@B M#DWORDOUT + 1
        CLRF M#DWORDOUT + 1
        BIT_BYTE M#VARIN,M#BITIN,M#DWORDOUT
        ENDM
WORD_WREG MACRO M#WORDIN
        BYTE_WREG M#WORDIN
        ENDM
WORD_BYTE MACRO M#WORDIN,M#BYTEOUT
        BYTE_BYTE M#WORDIN,M#BYTEOUT
        ENDM
WORD_BIT MACRO M#WORDIN,M#VAROUT,M#BITOUT
        BYTE_BIT M#WORDIN, M#VAROUT, M#BITOUT
        ENDM
WORD_WORD MACRO M#WORDIN,M#WORDOUT
        MOVFF M#WORDIN + 1,M#WORDOUT + 1
        MOVFF M#WORDIN,M#WORDOUT
        ENDM
WORD_DWORD MACRO M#WORDIN,M#DWORDOUT
        MOVLW 0
        MOVFF WREG,M#DWORDOUT + 3
        MOVFF WREG,M#DWORDOUT + 2
        WORD_WORD M#WORDIN,M#DWORDOUT
        ENDM
BYTE_BYTE MACRO M#BYTEIN,M#BYTEOUT
        MOVFF M#BYTEIN,M#BYTEOUT
        ENDM
BYTE_WORD MACRO M#BYTEIN,M#WORDOUT
        MOVLW 0
        MOVFF WREG,M#WORDOUT + 1
        BYTE_BYTE M#BYTEIN,M#WORDOUT
        ENDM
BYTE_DWORD MACRO M#BYTEIN,M#DWORDOUT
        MOVLW 0
        MOVFF WREG,M#DWORDOUT + 3
        MOVFF WREG,M#DWORDOUT + 2
        MOVFF WREG,M#DWORDOUT + 1
        BYTE_BYTE M#BYTEIN,M#DWORDOUT
        ENDM
BYTE_BIT MACRO M#BYTEIN,M#VAROUT,M#BITOUT
IF ((M#BYTEIN & 0X0F00) == (M#VAROUT & 0X0F00))
        S@B M#BYTEIN
        BTFSC M#BYTEIN,0
        BSF M#VAROUT,M#BITOUT
        BTFSS M#BYTEIN,0
        BCF M#VAROUT,M#BITOUT
ELSE
IF ((M#BYTEIN <= BANKA_END) | (M#BYTEIN >= 0X0F80))
        S@B M#VAROUT
        BTFSC M#BYTEIN,0
        BSF M#VAROUT,M#BITOUT
        BTFSS M#BYTEIN,0
        BCF M#VAROUT,M#BITOUT
ELSE
IF ((M#VAROUT <= BANKA_END) | (M#VAROUT >= 0X0F80))
        S@B M#BYTEIN
        BTFSC M#BYTEIN,0
        BSF M#VAROUT,M#BITOUT
        BTFSS M#BYTEIN,0
        BCF M#VAROUT,M#BITOUT
ELSE
        S@B M#BYTEIN
        RRF M#BYTEIN,W
        S@B M#VAROUT
        SKPNC
        BSF M#VAROUT,M#BITOUT
        SKPC
        BCF M#VAROUT,M#BITOUT
ENDIF
ENDIF
ENDIF
        R@B
        ENDM
DWORD_WREG MACRO M#DWORDIN
        BYTE_WREG M#DWORDIN
        ENDM
DWORD_BYTE MACRO M#DWORDIN,M#BYTEOUT
        BYTE_BYTE M#DWORDIN,M#BYTEOUT
        ENDM
DWORD_WORD MACRO M#DWORDIN,M#WORDOUT
        MOVFF M#DWORDIN + 1,M#WORDOUT + 1
        MOVFF M#DWORDIN,M#WORDOUT
        ENDM
DWORD_DWORD MACRO M#DWORDIN,M#DWORDOUT
        MOVFF M#DWORDIN + 3,M#DWORDOUT + 3
        MOVFF M#DWORDIN + 2,M#DWORDOUT + 2
        MOVFF M#DWORDIN + 1,M#DWORDOUT + 1
        MOVFF M#DWORDIN,M#DWORDOUT
        ENDM
DWORD_BIT MACRO M#DWORDIN,M#VAROUT,M#BITOUT
        BYTE_BIT M#DWORDIN,M#VAROUT,M#BITOUT
        ENDM
NUM_FLOAT MACRO M#NUMIN,FLOATOUT
        NUM_BYTE M#NUMIN,FLOATOUT + 3
        NUM_BYTE ((M#NUMIN >> 8) & 255),FLOATOUT + 2
        NUM_BYTE ((M#NUMIN >> 16) & 255),FLOATOUT + 1
        NUM_BYTE ((M#NUMIN >> 24) & 255),FLOATOUT
        ENDM
WREG_FLOAT MACRO FLOATOUT
        CALL FLO@0832U
        MOVFF PBP_AARG,FLOATOUT
        MOVFF PBP_AARGH,FLOATOUT + 1
        MOVFF PBP_AARGHH,FLOATOUT + 2
        MOVFF PBP_AARGHHH,FLOATOUT + 3
        ENDM
BIT_FLOAT MACRO M#VARIN,M#BITIN,FLOATOUT
        BIT_WREG M#VARIN,M#BITIN
        CALL FLO@0832U
        MOVFF PBP_AARG,FLOATOUT
        MOVFF PBP_AARGH,FLOATOUT + 1
        MOVFF PBP_AARGHH,FLOATOUT + 2
        MOVFF PBP_AARGHHH,FLOATOUT + 3
        ENDM
BYTE_FLOAT MACRO M#BYTEIN,FLOATOUT
        BYTE_WREG M#BYTEIN
        CALL FLO@0832U
        MOVFF PBP_AARG,FLOATOUT
        MOVFF PBP_AARGH,FLOATOUT + 1
        MOVFF PBP_AARGHH,FLOATOUT + 2
        MOVFF PBP_AARGHHH,FLOATOUT + 3
        ENDM
WORD_FLOAT MACRO M#WORDIN,FLOATOUT
        BYTE_BYTE M#WORDIN,PBP_AARG
        BYTE_BYTE M#WORDIN + 1,PBP_AARGH
        CALL FLO@1632U
        MOVFF PBP_AARG,FLOATOUT
        MOVFF PBP_AARGH,FLOATOUT + 1
        MOVFF PBP_AARGHH,FLOATOUT + 2
        MOVFF PBP_AARGHHH,FLOATOUT + 3
        ENDM
DWORD_FLOAT MACRO M#DWORDIN,FLOATOUT
        MOVFF M#DWORDIN,PBP_AARG
        MOVFF M#DWORDIN + 1,PBP_AARGH
        MOVFF M#DWORDIN + 2,PBP_AARGHH
        MOVFF M#DWORDIN + 3,PBP_AARGHHH
        CALL FLO@3232S
        MOVFF PBP_AARG,FLOATOUT
        MOVFF PBP_AARGH,FLOATOUT + 1
        MOVFF PBP_AARGHH,FLOATOUT + 2
        MOVFF PBP_AARGHHH,FLOATOUT + 3
        ENDM
FLOAT_FLOAT MACRO FLOATIN,FLOATOUT
        MOVFF FLOATIN,FLOATOUT
        MOVFF FLOATIN + 1,FLOATOUT + 1
        MOVFF FLOATIN + 2,FLOATOUT + 2
        MOVFF FLOATIN + 3,FLOATOUT + 3
        ENDM
FLOAT_WREG MACRO FLOATIN
        FLOAT_FLOAT FLOATIN,PBP_AARG
        CALL INT@3232
        ENDM
FLOAT_BIT MACRO FLOATIN,M#VAROUT,M#BITOUT
        FLOAT_FLOAT FLOATIN,PBP_AARG
        CALL INT@3232
        WREG_BIT M#VAROUT,M#BITOUT
        ENDM
FLOAT_BYTE MACRO FLOATIN,M#BYTEOUT
        FLOAT_FLOAT FLOATIN,PBP_AARG
        CALL INT@3232
        WREG_BYTE M#BYTEOUT
        ENDM
FLOAT_WORD MACRO FLOATIN,M#WORDOUT
        FLOAT_FLOAT FLOATIN,PBP_AARG
        CALL INT@3232
        MOVFF PBP_AARGHHH,M#WORDOUT
        MOVFF PBP_AARGHH,M#WORDOUT + 1
        ENDM
FLOAT_DWORD MACRO FLOATIN,M#DWORDOUT
        FLOAT_FLOAT FLOATIN,PBP_AARG
        CALL INT@3232
        MOVFF PBP_AARGHHH,M#DWORDOUT
        MOVFF PBP_AARGHH,M#DWORDOUT + 1
        MOVFF PBP_AARGH,M#DWORDOUT + 2
        MOVFF PBP_AARG,M#DWORDOUT + 3
        ENDM
NUM_FSR0 MACRO M#NUMIN
        LFSR 0, M#NUMIN
        ENDM
NUM_FSR1 MACRO M#NUMIN
        LFSR 1, M#NUMIN
        ENDM
NUM_FSR2 MACRO M#NUMIN
        LFSR 2, M#NUMIN
        ENDM
LABEL_WORD MACRO LABELIN,M#WORDOUT
        MOVLW LOW (LABELIN)
        MOVFF WREG, M#WORDOUT
        MOVLW HIGH (LABELIN)
        MOVFF WREG, M#WORDOUT + 1
        ENDM
BPF = 0
BPFH = 1
CSTR#CT = 2
GEN = 3
GEN3 = 4
GEN3H = 5
GEN4 = 6
GEN4H = 7
GPR = 8
PBP_AARG = 9
PBP_AARGH = 10
PBP_AARGHH = 11
PBP_AARGHHH = 12
PBP_BARG = 13
PBP_BARGH = 14
PBP_BARGHH = 15
PBP_BARGHHH = 16
PP0 = 17
PP0H = 18
PP0HH = 19
PP0HHH = 20
PP1 = 21
PP1H = 22
PP1HH = 23
PP1HHH = 24
PP2 = 25
PP2H = 26
PP2HH = 27
PP2HHH = 28
PP3 = 29
PP3H = 30
PP4 = 31
PP5 = 32
PP5H = 33
PP6 = 34
PP6H = 35
PP7 = 36
PP7H = 37
PP7HH = 38
PP7HHH = 39
PPZ = 40
PPZH = 41
PPZHH = 42
PPZHHH = 43
_AEXP = 44
_BEXP = 45
_FP_FLAGS = 46
_FP_TEMP = 47
_FP_TEMPB0 = 48
_GLCD_XPOS = 49
_SIGN = 50
DEVADDR = 51
VALUE_1ST = 52
VALUE_2ND = 53
VALUE_3RD = 54
CONFREG = 55
RAWMEASURE = 56
RAWMEASUREH = 57
RAWMEASUREHH = 58
RAWMEASUREHHH = 59
INPMEASURE = 60
INPMEASUREH = 61
INPMEASUREHH = 62
INPMEASUREHHH = 63
RESISTANCE = 64
RESISTANCEH = 65
RESISTANCEHH = 66
RESISTANCEHHH = 67
TEMPERATURE = 68
TEMPERATUREH = 69
TEMPERATUREHH = 70
TEMPERATUREHHH = 71
GAIN = 72
GAINH = 73
GAINHH = 74
GAINHHH = 75
R0 = 76
R0H = 77
R0HH = 78
R0HHH = 79
COEFFA = 80
COEFFAH = 81
COEFFAHH = 82
COEFFAHHH = 83
COEFFB = 84
COEFFBH = 85
COEFFBHH = 86
COEFFBHHH = 87
TRIALRES = 88
TRIALRESH = 89
TRIALRESHH = 90
TRIALRESHHH = 91
ERR = 92
ERRH = 93
ERRHH = 94
ERRHHH = 95
ABSERROR = 96
ABSERRORH = 97
ABSERRORHH = 98
ABSERRORHHH = 99
TEMPHIGH = 100
TEMPHIGHH = 101
TEMPHIGHHH = 102
TEMPHIGHHHH = 103
TEMPLOW = 104
TEMPLOWH = 105
TEMPLOWHH = 106
TEMPLOWHHH = 107
#DEFINE __LCD_DTPORT PORTD
#DEFINE __LCD_RSPORT PORTB
#DEFINE __LCD_ENPORT PORTB
#DEFINE __LCD_RWPORT PORTB
#DEFINE __LCD_CS1PORT PORTB
#DEFINE __LCD_CS2PORT PORTB
#DEFINE __SCL_PORT PORTC
#DEFINE __SDA_PORT PORTC
#DEFINE __XTAL 4
#DEFINE __INTERNAL_FONT 1
#DEFINE __LCD_RSPIN 0
#DEFINE __LCD_ENPIN 1
#DEFINE __LCD_RWPIN 2
#DEFINE __LCD_CS1PIN 3
#DEFINE __LCD_CS2PIN 4
#DEFINE __LCD_TYPE 1
#DEFINE __SCL_PIN 3
#DEFINE __SDA_PIN 4
PROTON#CODE#START
        ORG 0
        GOTO PROTON#MAIN#START
        ORG 8
OUT@FLOAT
        MOVWF 44
        BTFSS 37,7
        BRA OUT@FLOATSK1
        MOVLW 45
        CALL CH@SND
OUT@FLOATSK1
        CLRF 9
        CLRF 10
        CLRF 11
        CLRF 12
        BSF 37,7
        MOVLW 106
        ADDWF 36,F
OUT@FLOATSK2
        BCF 4056,0
        RRCF 37,F
        RRCF 38,F
        RRCF 39,F
        RRCF 12,F
        RRCF 11,F
        RRCF 10,F
        RRCF 9,F
        INCFSZ 36,F
        BRA OUT@FLOATSK2
        MOVF 39,W
        SUBWF 36,W
        ADDWF 39,F
        SUBWF 36,F
        MOVF 38,W
        SUBWF 37,W
        ADDWF 38,F
        SUBWF 37,F
        CLRF 7
        RCALL OUT@DEC32
        MOVLW 46
        CALL CH@SND
FL@OUT
        CLRF 45
        BCF 4056,0
        RLCF 9,W
        MOVWF 39
        RLCF 10,W
        MOVWF 38
        RLCF 11,W
        MOVWF 37
        RLCF 12,W
        MOVWF 36
        RLCF 45,F
        BCF 4056,0
        RLCF 39,F
        RLCF 38,F
        RLCF 37,F
        RLCF 36,F
        RLCF 45,F
        MOVF 9,W
        ADDWF 39,F
        MOVF 10,W
        BTFSC 4056,0
        INCFSZ 10,W
        ADDWF 38,F
        MOVF 11,W
        BTFSC 4056,0
        INCFSZ 11,W
        ADDWF 37,F
        MOVF 12,W
        BTFSC 4056,0
        INCFSZ 12,W
        ADDWF 36,F
        BTFSC 4056,0
        INCFSZ 45,F
        BCF 4056,0
        RLCF 39,F
        RLCF 38,F
        RLCF 37,F
        RLCF 36,F
        RLCF 45,F
        MOVF 45,W
        ADDLW 48
        CALL CH@SND
        MOVFF 39,9
        MOVFF 38,10
        MOVFF 37,11
        MOVFF 36,12
        DECFSZ 44,F
        BRA FL@OUT
        BCF 4056,0
        RETURN
OUT@DEC32
        BCF 0,3
        MOVF 7,W
        BNZ O@D32L1
        BSF 0,3
        MOVLW 10
        MOVWF 7
O@D32L1
        MOVFF 39,20
        MOVFF 38,19
        MOVFF 37,18
        MOVFF 36,17
        CLRF 6
O@D32L2
        CLRF 28
        CLRF 27
        CLRF 26
        MOVLW 10
        MOVWF 25
        CALL L@DIV
        INCF 6,F
        MOVF 6,W
        SUBWF 7,W
        BTFSS 4056,2
        BRA O@D32L2
        MOVF 25,W
        BTFSS 4056,2
        BCF 0,3
        BTFSS 0,3
        BRA O@D32SKP
        DECFSZ 7,W
        BRA O@D32L3
O@D32SKP
        MOVF 25,W
        ADDLW 48
        CALL CH@SND
O@D32L3
        DECFSZ 7,F
        BRA O@D32L1
        RETURN
PRINT@MSTR
PRINT@MSTRL
        CLRF 4006
        BSF 4006,PP_EEPGD
PRT@MTL2
        CLRF 2
PRT@MTL3
        MOVFF 6,4086
        MOVFF 7,4087
        TBLRD*+
        MOVF 4085,W
        BZ PRT@MTEXT
        RCALL PRINT
        INFSNZ 6,F
        INCF 7,F
        INCFSZ 2,F
        BRA PRT@MTL3
PRT@MTEXT
        RETURN
PRINT
        MOVWF 30
        CALL SETUP@LCD
GLCD@FLP
        MOVF 49,W
        CALL CHECK@PAGE
        MOVFF 25,4
        MOVFF 26,5
        MOVLW 6
        MULWF 30
        MOVLW LOW (FONT)
        ADDWF 4083,W
        MOVWF 4086
        MOVLW HIGH (FONT)
        BTFSC 4056,0
        ADDLW 1
        ADDWF 4084,W
        MOVWF 4087
        MOVLW 6
        MOVWF 34
GLCD_L@2
 IF (FONT > 65535)
        ERROR "GRAPHIC LCD'S INTERNAL FONT MUST BE LOCATED BELOW CODE ADDRESS 65535"
 ENDIF
        CLRF 4006
        BSF 4006,PP_EEPGD
        TBLRD*+
        MOVF 4085,W
        RCALL LCDWRITE@WREG
        DECFSZ 34,F
        BRA GLCD_L@2
        MOVFF 4,25
        MOVFF 5,26
LCD@DONE
        MOVF 30,W
        RETURN
LCDWRITE
        MOVF 25,W
LCDWRITE@WREG
        BCF PORTB,0
        RCALL READ@STATUS
        BSF PORTB,0
        RCALL TG@L
        MOVLW 125
        CPFSLT 49
        BRA $ + 6
        INCF 49,F
        BRA $ + 4
        CLRF 49
        MOVF 49,W
        RCALL CHECK@PAGE
        BCF PORTB,0
        MOVF 49,W
        RCALL READ@STATUS
        BRA TG@L
#DEFINE LCD#IS#SETUP 1
SETUP@LCD
        BTFSC 0,1
        BRA SKP@GCSIN
        MOVWF 33
        BCF TRISB,1
        BCF TRISB,0
        BCF TRISB,2
        BCF TRISB,3
        BCF TRISB,4
        CLRF TRISD
        BSF 0,1
        BCF LATB,1
        BCF LATB,2
        BCF LATB,0
        CLRF _GLCD_XPOS
        MOVLW 184
        RCALL READ@STATUS
        RCALL TG@L
        MOVLW 64
        RCALL READ@STATUS
        RCALL TG@L
        MOVLW 192
        RCALL READ@STATUS
        RCALL TG@L
        MOVLW 63
        RCALL READ@STATUS
        RCALL TG@L
        MOVF 33,W
SKP@GCSIN
        BCF PORTB,0
        RETURN
CHECK@PAGE
        BTFSC 4072,6
        BRA EN@RIGHT
        BCF PORTB,3
        NOP
        BSF PORTB,4
        RETURN
EN@RIGHT
        BSF PORTB,3
        NOP
        BCF PORTB,4
        RETURN
TG@L
        BSF PORTB,1
        MOVWF PORTD
        NOP
        BCF PORTB,1
        RETURN
READ@STATUS
        BSF PORTB,2
        SETF TRISD
        CLRF 17
R@SLP1
        BSF PORTB,1
        NOP
        BCF PORTB,1
        NOP
        BTFSS PORTD,7
        BRA $ + 6
        INCFSZ 17,F
        BRA R@SLP1
        BCF PORTB,2
        CLRF PORTD
        CLRF TRISD
        RETURN
GLCD@CUR
        RCALL SETUP@LCD
        MOVWF 49
        BCF PORTB,3
        BCF PORTB,4
        BSF 0,1
        MOVLW 63
        RCALL TG@L
        MOVLW 184
        IORWF 3,W
        RCALL READ@STATUS
        RCALL TG@L
        MOVF 49,W
        MULLW 6
        MOVF 4083,W
        RCALL CHECK@PAGE
        MOVF 4083,W
        ANDLW 127
        MOVWF 49
        IORLW 64
        RCALL READ@STATUS
        BRA TG@L
GLCD@CLS
        BCF 0,1
        CALL SETUP@LCD
        BCF PORTB,3
        NOP
        BCF PORTB,4
        MOVLW 62
        RCALL TG@L
        CLRF 34
GLD@L1
        BCF PORTB,0
        MOVF 34,W
        IORLW 184
        RCALL READ@STATUS
        RCALL TG@L
        CLRF 35
GLCD@L2
        BCF PORTB,0
        MOVF 35,W
        IORLW 64
        RCALL READ@STATUS
        RCALL TG@L
        MOVLW 0
        BCF PORTB,0
        RCALL READ@STATUS
        BSF PORTB,0
        RCALL TG@L
        INCF 35,F
        BTFSS 35,6
        BRA GLCD@L2
        INCF 34,F
        BTFSS 34,3
        BRA GLD@L1
        BCF PORTB,0
        BCF 0,1
        RCALL SETUP@LCD
        RETURN
CH@SND
        BTFSC 1,7
        GOTO PRINT
        BTFSC 1,1
        BRA HBUSOUT@STM1
        BTFSC 1,0
        GOTO HBUSOUT
HBUSOUT@STM1
HBUSINB
        BCF 0,4
        BSF 0,5
        BSF 0,6
        BSF 0,7
        BSF 0,2
        BRA HBUS@INA
HBUSIN2
        BSF 0,4
        BTFSS 0,4
HBUSIN
        BCF 0,4
        BTFSC 0,5
        BRA HBUS@ARR
        BSF 0,5
        RCALL HBUS@RST
        BC HBUS@STP
HBUS@ARR
        BCF 0,2
        RCALL HBUS@WAIT_FOR_IDLE
HBUS@INA
        BSF 4037,PP_RCEN
        RCALL HBUS@WAIT_FOR_IDLE
        MOVF 4041,W
        BTFSC 0,2
        BRA HI2C@EX
        BTFSC 0,4
        BRA HBUS@SKA
HBUS@ACK
        BSF 4037,PP_ACKEN
        BTFSC 4037,PP_ACKEN
        BRA $ - 2
        BTFSC 0,4
HBUS@SKA
        RCALL HBUS@STP
HI2C@EX
        BCF 4056,0
        MOVWF 21
        BRA HI2C@FIN
HBUSOUTB
        BSF 0,5
        BSF 0,6
        BSF 0,7
        BRA HBUSOUT
HBUSOUT2
        BSF 0,4
        BTFSS 0,4
HBUSOUT
        BCF 0,4
        BTFSC 0,6
        BRA HBUS@ARW
        ANDLW 254
        MOVWF 8
        BSF 0,6
        BCF 4056,0
        BRA HI2C@FIN
HBUS@ARW
        BTFSC 0,7
        BRA HBUS@SSC
        MOVWF 29
        BSF 0,7
        RCALL HBUS@ST
        BTFSC 4056,0
        BRA HBUS@STP
        MOVF 29,W
HBUS@SSC
        RCALL HBUS@WRC
        BC HBUS@STP
        BTFSS 0,4
        BRA HI2C@FIN
HBUS@STP
        BSF 4037,PP_PEN
        BTFSC 4037,PP_PEN
        BRA $ - 2
        BCF 0,6
        BCF 0,7
        BCF 0,5
        BCF 0,2
HI2C@FIN
        BSF 31,0
        BTFSS 4056,0
        BCF 31,0
        RETURN
HBUS@RST
        RCALL HBUS@RESTRT
        BRA $ + 4
HBUS@ST
        RCALL HBUS@STRT
        MOVF 8,W
        BTFSC 0,5
        IORLW 1
HBUS@WRC
        MOVWF 4041
        BRA HBUS@WAIT_FOR_IDLE_WITH_WRITE
HBUS@STRT
        BSF _I2C_SCL_PORT,_I2C_SCL_PIN
        BSF _I2C_SDA_PORT,_I2C_SDA_PIN
        BSF 4037,PP_SEN
        BTFSC 4037,PP_SEN
        BRA $ - 2
        RETURN
HBUS@RESTRT
        BSF 4037,PP_RSEN
        BTFSC 4037,PP_RSEN
        BRA $ - 2
        RETURN
HBUS@WAIT_FOR_IDLE_WITH_WRITE
        BTFSC 4039,PP_R_W
        BRA $ - 2
HBUS@WAIT_FOR_IDLE
        SETF 21
HBUS@LP1
        MOVF 4037,W
        ANDLW 31
        NOP
        BCF 4056,0
        BTFSC 4056,2
        RETURN
        DECFSZ 21,F
        BRA HBUS@LP1
        BSF 4056,0
        RETURN
DL@MS
        CLRF 22
DLY@W
        MOVWF 21
DLY@P
        MOVLW 255
        ADDWF 21,F
        ADDWFC 22,F
        BRA $ + 2
        BTFSS 4056,0
        RETURN
        MOVLW 3
        MOVWF 18
        MOVLW 223
        RCALL DLUS@W
        BRA DLY@P
DL@US
        CLRF 18
DLUS@W
        ADDLW 233
        MOVWF 17
        MOVLW 252
        BNC $ + 12
        NOP
        NOP
        ADDWF 17,F
        BC $ - 4
        NOP
        ADDWF 17,F
        DECF 18,F
        BC $ - 12
        BTFSC 17,0
        BRA $ + 2
        BTFSS 17,1
        BRA $ + 6
        BRA $ + 2
        NOP
        RETURN
L@DIV
L@MOD
        MOVF 20,W
        XORWF 28,W
        ANDLW 128
        MOVWF 4084
        BTFSS 20,7
        BRA DIVS@32X32SKIP1
        BSF 4056,0
        MOVLW 0
        SUBFWB 17,F
        SUBFWB 18,F
        SUBFWB 19,F
        SUBFWB 20,F
DIVS@32X32SKIP1
        BTFSS 28,7
        BRA DIVS@32X32SKIP2
        BSF 4056,0
        MOVLW 0
        SUBFWB 25,F
        SUBFWB 26,F
        SUBFWB 27,F
        SUBFWB 28,F
DIVS@32X32SKIP2
        CLRF 21
        CLRF 22
        CLRF 23
        CLRF 24
        CLRF 40
        CLRF 41
        CLRF 42
        CLRF 43
        MOVF 28,W
        IORWF 27,W
        IORWF 26,W
        IORWF 25,W
        BZ DIVS@32X32SKIP5
        MOVLW 32
        MOVWF 4083
DIVS@32X32LOOP
        BCF 4056,0
        RLCF 17,F
        RLCF 18,F
        RLCF 19,F
        RLCF 20,F
        RLCF 40,F
        RLCF 41,F
        RLCF 42,F
        RLCF 43,F
        MOVF 25,W
        SUBWF 40,W
        MOVF 26,W
        SUBWFB 41,W
        MOVF 27,W
        SUBWFB 42,W
        MOVF 28,W
        SUBWFB 43,W
        BNC DIVS@32X32SKIP4
        MOVF 25,W
        SUBWF 40,F
        MOVF 26,W
        SUBWFB 41,F
        MOVF 27,W
        SUBWFB 42,F
        MOVF 28,W
        SUBWFB 43,F
        BSF 4056,0
DIVS@32X32SKIP4
        RLCF 21,F
        RLCF 22,F
        RLCF 23,F
        RLCF 24,F
        DECFSZ 4083,F
        BRA DIVS@32X32LOOP
DIVS@32X32SKIP5
        BTFSS 4084,7
        BRA DIVS@32X32EXIT
        BSF 4056,0
        MOVLW 0
        SUBFWB 21,F
        SUBFWB 22,F
        SUBFWB 23,F
        SUBFWB 24,F
DIVS@32X32EXIT
        MOVFF 21,17
        MOVFF 22,18
        MOVFF 23,19
        MOVFF 24,20
        MOVFF 40,25
        MOVFF 41,26
        MOVFF 42,27
        MOVFF 43,28
        RETURN
TAGEB@32
        MOVF 14,W
        XORWF 10,W
        MOVWF 48
        BTFSC 48,7
        BRA TAGEB@32O
        BTFSC 14,7
        BRA TAGEB@32N
TAGEB@32P
        MOVF 13,W
        SUBWF 9,W
        BTFSS 4056,0
        RETLW 0
        BTFSS 4056,2
        RETLW 1
        MOVF 14,W
        SUBWF 10,W
        BTFSS 4056,0
        RETLW 0
        BTFSS 4056,2
        RETLW 1
        MOVF 15,W
        SUBWF 11,W
        BTFSS 4056,0
        RETLW 0
        BTFSS 4056,2
        RETLW 1
        MOVF 16,W
        SUBWF 12,W
        BTFSS 4056,0
        RETLW 0
        RETLW 1
TAGEB@32N
        MOVF 9,W
        SUBWF 13,W
        BTFSS 4056,0
        RETLW 0
        BTFSS 4056,2
        RETLW 1
        MOVF 10,W
        SUBWF 14,W
        BTFSS 4056,0
        RETLW 0
        BTFSS 4056,2
        RETLW 1
        MOVF 11,W
        SUBWF 15,W
        BTFSS 4056,0
        RETLW 0
        BTFSS 4056,2
        RETLW 1
        MOVF 12,W
        SUBWF 16,W
        BTFSS 4056,0
        RETLW 0
        RETLW 1
TAGEB@32O
        BTFSS 10,7
        RETLW 1
        RETLW 0
FPS@32
        MOVLW 128
        XORWF 14,F
FPA@32
        MOVF 13,W
        SUBWF 9,W
        MOVWF 45
        BC FL@ADD_1
        NEGF 45
        MOVF 9,W
        MOVFF 13,9
        MOVWF 13
        MOVF 10,W
        MOVFF 14,10
        MOVWF 14
        MOVF 11,W
        MOVFF 15,11
        MOVWF 15
        MOVF 12,W
        MOVFF 16,12
        MOVWF 16
FL@ADD_1
        MOVLW 26
        CPFSLT 45
        BRA FL@ADD_RET
        MOVF 13,F
        BZ FL@ADD_RET
        CLRF 44
        MOVF 10,W
        MOVWF 47
        XORWF 14,W
        MOVWF 50
        BSF 10,7
        BSF 14,7
FL@ADD_2
        MOVLW 8
        SUBWF 45,F
        BNC FL@ADD_3
        MOVFF 16,44
        MOVFF 15,16
        MOVFF 14,15
        CLRF 14
        BRA FL@ADD_2
FL@ADD_3
        ADDWF 45,F
        BZ FL@ADD_5
FL@ADD_4
        BCF 4056,0
        RRCF 14,F
        RRCF 15,F
        RRCF 16,F
        RRCF 44,F
        DECFSZ 45,F
        BRA FL@ADD_4
FL@ADD_5
        BTFSS 50,7
        BRA FL@ADD_11
        MOVF 16,W
        SUBWF 12,F
        MOVF 15,W
        SUBWFB 11,F
        MOVF 14,W
        SUBWFB 10,F
        BC FL@ADD_6
        BSF 4056,0
        MOVLW 0
        SUBFWB 12,F
        SUBFWB 11,F
        SUBFWB 10,F
        MOVLW 128
        XORWF 47,F
FL@ADD_6
        NEGF 44
        BZ FL@ADD_7
        DECF 12,F
        MOVLW 0
        SUBWFB 11,F
        SUBWFB 10,F
FL@ADD_7
        MOVLW 4
        MOVWF 45
FL@ADD_8
        TSTFSZ 10
        BRA FL@ADD_9
        MOVFF 11,10
        MOVFF 12,11
        MOVFF 44,12
        CLRF 44
        MOVLW 8
        SUBWF 9,F
        BNC FL@ADD_RES0
        DECFSZ 45,F
        BRA FL@ADD_8
        BRA FL@ADD_RES0
FL@ADD_9
        BTFSC 10,7
        BRA FL@ADD_10
        BCF 4056,0
        RLCF 44,F
        RLCF 12,F
        RLCF 11,F
        RLCF 10,F
        DECFSZ 9,F
        BRA FL@ADD_9
        BRA FL@ADD_RES0
FL@ADD_10
        BTFSS 46,6
        BRA FL@ADD_SET_SIGN
        BTFSS 44,7
        BRA FL@ADD_SET_SIGN
        CLRF 44
        BRA FL@ADD_INCREMENT
FL@ADD_11
        MOVF 16,W
        ADDWF 12,F
        MOVF 15,W
        ADDWFC 11,F
        MOVF 14,W
        ADDWFC 10,F
        BNC FL@ADD_13
FL@ADD_ADJUST_RIGHT
        RRCF 10,F
        RRCF 11,F
        RRCF 12,F
        RRCF 44,F
        INFSNZ 9,F
        BRA FL@ADD_OVERFLOW
FL@ADD_13
        BTFSS 46,6
        BRA FL@ADD_SET_SIGN
        BTFSS 44,7
        BRA FL@ADD_SET_SIGN
FL@ADD_INCREMENT
        INCFSZ 12,F
        BRA FL@ADD_SET_SIGN
        INCFSZ 11,F
        BRA FL@ADD_SET_SIGN
        INCFSZ 10,F
        BRA FL@ADD_SET_SIGN
        BSF 4056,0
        BCF 12,0
        BRA FL@ADD_ADJUST_RIGHT
FL@ADD_RES0
        CLRF 9
        BRA FL@ADD_MANTISSA
FL@ADD_OVERFLOW
        BSF 46,1
        SETF 9
FL@ADD_MANTISSA
        CLRF 12
        CLRF 11
        MOVLW 128
        MOVWF 10
FL@ADD_SET_SIGN
        BTFSS 47,7
        BCF 10,7
FL@ADD_RET
        MOVF 12,W
        RETURN
FPD@32
        MOVF 10,W
        MOVWF 42
        XORWF 14,W
        MOVWF 50
        MOVF 13,W
        BZ FL@DIV_DIV0
        MOVF 9,F
        BZ FL@DIV_RES0
        SUBWF 9,F
        MOVLW 127
        BC FL@DIV_1
        ADDWF 9,F
        BC FL@DIV_2
        BRA FL@DIV_UNDERFLOW
FL@DIV_1
        ADDWF 9,F
        BC FL@DIV_OVERFLOW1
FL@DIV_2
        MOVFF 12,40
        MOVFF 11,41
        BSF 42,7
        BSF 14,7
        MOVLW 24
        MOVWF 47
        CLRF 12
        CLRF 11
        CLRF 10
        BRA FP@DIV_START
FL@DIV_TEST_ZERO_L
        MOVF 16,W
        SUBWF 40,W
        MOVF 15,W
        SUBWFB 41,W
        BNC FL@DIV_SHIFT_IN_C
        MOVWF 41
        CLRF 42
        MOVF 16,W
        SUBWF 40,F
        BRA FL@DIV_SET_AND_SHIFT_IN_C
FL@DIV_LOOP
        BC FL@DIV_6
FP@DIV_START
        MOVF 14,W
        SUBWF 42,W
        BZ FL@DIV_TEST_ZERO_L
        BNC FL@DIV_SHIFT_IN_C
FL@DIV_6
        MOVF 16,W
        SUBWF 40,F
        MOVF 15,W
        SUBWFB 41,F
        MOVF 14,W
        SUBWFB 42,F
FL@DIV_SET_AND_SHIFT_IN_C
        BSF 4056,0
FL@DIV_SHIFT_IN_C
        RLCF 12,F
        RLCF 11,F
        RLCF 10,F
        RLCF 40,F
        RLCF 41,F
        RLCF 42,F
        DECFSZ 47,F
        BRA FL@DIV_LOOP
        BTFSC 10,7
        BRA FL@DIV_9
        MOVF 9,F
        BZ FL@DIV_UNDERFLOW
        RRCF 50,F
        DECF 9,F
        INCF 47,F
        RLCF 50,F
        BRA FL@DIV_LOOP
FL@DIV_9
        BTFSS 46,6
        BRA FL@DIV_SET_SIGN
        BC FL@DIV_10
        MOVF 16,W
        SUBWF 40,F
        MOVF 15,W
        SUBWFB 41,F
        MOVF 14,W
        SUBWFB 42,F
        BNC FL@DIV_SET_SIGN
FL@DIV_10
        INCFSZ 12,F
        BRA FL@DIV_SET_SIGN
        INCFSZ 11,F
        BRA FL@DIV_SET_SIGN
        INCFSZ 10,F
        BRA FL@DIV_SET_SIGN
        RRCF 10,F
        RRCF 11,F
        RRCF 12,F
        INCFSZ 9,F
        BRA FL@DIV_SET_SIGN
        BRA FL@DIV_OVERFLOW1
FL@DIV_DIV0
        BSF 46,3
        BRA FL@DIV_SATURATE
FL@DIV_UNDERFLOW
        BSF 46,2
FL@DIV_RES0
        CLRF 9
        BRA FL@DIV_MANTISSA
FL@DIV_OVERFLOW1
        BSF 46,1
FL@DIV_SATURATE
        SETF 9
FL@DIV_MANTISSA
        CLRF 12
        CLRF 11
        MOVLW 128
        MOVWF 10
FL@DIV_SET_SIGN
        BTFSS 50,7
        BCF 10,7
        MOVF 12,W
        RETURN
FPM@32
        MOVF 10,W
        MOVWF 42
        XORWF 14,W
        MOVWF 50
        MOVF 9,W
        BTFSS 4056,2
        MOVF 13,W
        BZ FP@MUL_RES0
        ADDWF 9,F
        MOVLW 126
        BNC FP@MUL_1
        SUBWF 9,F
        BNC FP@MUL_2
        BRA FP@MUL_OVERFLOW
FP@MUL_1
        SUBWF 9,F
        BNC FP@MUL_UNDERFLOW
FP@MUL_2
        MOVFF 12,40
        MOVFF 11,41
        BSF 42,7
        BSF 14,7
        CLRF 12
        CLRF 11
        CLRF 10
        MOVLW 24
        MOVWF 47
FP@MUL_3
        RRCF 42,F
        RRCF 41,F
        RRCF 40,F
        BNC FP@MUL_4
        MOVF 16,W
        ADDWF 12,F
        MOVF 15,W
        ADDWFC 11,F
        MOVF 14,W
        ADDWFC 10,F
FP@MUL_4
        RRCF 10,F
        RRCF 11,F
        RRCF 12,F
        DECFSZ 47,F
        BRA FP@MUL_3
        BTFSC 10,7
        BRA FP@MUL_5
        RLCF 12,F
        RLCF 11,F
        RLCF 10,F
        MOVF 9,F
        BZ FP@MUL_UNDERFLOW
        DECF 9,F
        RLCF 42,W
FP@MUL_5
        BTFSS 46,6
        BRA FP@MUL_SET_SIGN
        BNC FP@MUL_SET_SIGN
        INCFSZ 12,F
        BRA FP@MUL_SET_SIGN
        INCFSZ 11,F
        BRA FP@MUL_SET_SIGN
        INCFSZ 10,F
        BRA FP@MUL_SET_SIGN
        BSF 4056,0
        RRCF 10,F
        RRCF 11,F
        RRCF 12,F
        INCFSZ 9,F
        BRA FP@MUL_SET_SIGN
        BRA FP@MUL_OVERFLOW
FP@MUL_UNDERFLOW
        BSF 46,2
FP@MUL_RES0
        CLRF 9
        BRA FP@MUL_MANTISSA
FP@MUL_OVERFLOW
        BSF 46,1
        SETF 9
FP@MUL_MANTISSA
        CLRF 12
        CLRF 11
        MOVLW 128
        MOVWF 10
FP@MUL_SET_SIGN
        BTFSS 50,7
        BCF 10,7
        MOVF 12,W
        RETURN
FLO@3232S
        MOVF 9,W
        MOVFF 12,9
        MOVWF 12
        MOVF 11,W
        MOVFF 10,11
        MOVWF 10
INT32@TOFLOAT32
        MOVLW 150
        MOVWF 47
        CLRF 50
        BTFSS 9,7
        BRA ITO@F_1
        BSF 4056,0
        MOVLW 0
        SUBFWB 12,F
        SUBFWB 11,F
        SUBFWB 10,F
        SUBFWB 9,F
        BSF 50,7
ITO@F_1
        MOVF 9,F
        BZ ITO@F_3
        BTFSS 46,6
        BRA ITO@F_2
        BTFSS 12,7
        BRA ITO@F_2
        INCFSZ 11,F
        BRA ITO@F_2
        INCFSZ 10,F
        BRA ITO@F_2
        INCFSZ 9,F
        BRA ITO@F_2
        BSF 4056,0
        RRCF 9,F
        RRCF 10,F
        RRCF 11,F
        INCF 47,F
ITO@F_2
        MOVLW 8
        ADDWF 47,F
        MOVFF 11,12
        MOVFF 10,11
        MOVFF 9,10
        BRA ITO@F_6
ITO@F_3
        TSTFSZ 10
        BRA ITO@F_6
        MOVLW 8
        SUBWF 47,F
        MOVF 11,W
        BNZ ITO@F_4
        MOVLW 8
        SUBWF 47,F
        MOVF 12,W
        BZ ITO@F_7
        CLRF 12
ITO@F_4
        MOVWF 10
        MOVFF 12,11
        CLRF 12
        BRA ITO@F_6
ITO@F_5
        BCF 4056,0
        RLCF 12,F
        RLCF 11,F
        RLCF 10,F
        DECF 47,F
ITO@F_6
        BTFSS 10,7
        BRA ITO@F_5
        MOVFF 47,9
        BTFSS 50,7
        BCF 10,7
ITO@F_7
        MOVF 12,W
        RETURN
STR@LB1
        DB 32,80,84,49,48,48,32,80,114,101,99,105,115,105,111,110,32,0
STR@LB2
        DB 84,101,109,112,101,114,97,116,117,114,101,32,77,101,116,101,114,0
STR@LB3
        DB 84,101,109,112,32,58,32,0
STR@LB4
        DB 82,116,100,32,82,58,32,0
STR@LB5
        DB 32,48,46,48,48,48,0
STR@LB6
        DB 32,79,104,109,115,32,0
STR@LB7
        DB 32,79,104,109,115,32,0
PROTON#MAIN#START
        CLRF 4088
        MOVLW 64
        MOVWF 46
        CLRF 0
        CLRF 4011
        MOVLW 40
        MOVWF 4038
        MOVLW 9
        MOVWF 4040
        MOVLW 128
        MOVWF 4039
F2_SOF EQU $ ; PDS_TEST.PRP
F2_EOF EQU $ ; PDS_TEST.PRP
F1_SOF EQU $ ; PDS_TEST.BAS
F1_000035 EQU $ ; IN [PDS_TEST.BAS] ALL_DIGITAL = TRUE
        MOVLW 7
        MOVWF ADCON1,0
F1_000064 EQU $ ; IN [PDS_TEST.BAS] DEVADDR  = %11010000
        MOVLW 208
        MOVWF DEVADDR,0
F1_000066 EQU $ ; IN [PDS_TEST.BAS] GAIN     = 4.0
        CLRF GAINHHH,0
        CLRF GAINHH,0
        CLRF GAINH,0
        MOVLW 129
        MOVWF GAIN,0
F1_000067 EQU $ ; IN [PDS_TEST.BAS] R0       = 100.00
        CLRF R0HHH,0
        CLRF R0HH,0
        MOVLW 72
        MOVWF R0H,0
        MOVLW 133
        MOVWF R0,0
F1_000068 EQU $ ; IN [PDS_TEST.BAS] COEFFA   = 3.9083 / 1000.0
        MOVLW 50
        MOVWF COEFFAHHH,0
        MOVLW 17
        MOVWF COEFFAHH,0
        CLRF COEFFAH,0
        MOVLW 119
        MOVWF COEFFA,0
F1_000069 EQU $ ; IN [PDS_TEST.BAS] COEFFB   = -5.775 / 10000000.0
        MOVLW 128
        MOVWF COEFFBHHH,0
        MOVLW 5
        MOVWF COEFFBHH,0
        MOVLW 155
        MOVWF COEFFBH,0
        MOVLW 106
        MOVWF COEFFB,0
F1_000071 EQU $ ; IN [PDS_TEST.BAS] DELAYMS 100
        MOVLW 100
        F@CALL DL@MS
F1_000072 EQU $ ; IN [PDS_TEST.BAS] CLS
        F@CALL GLCD@CLS
F1_000073 EQU $ ; IN [PDS_TEST.BAS] PRINT AT 0,2,  " PT100 PRECISION "
        CLRF GEN,0
        MOVLW 2
        F@CALL GLCD@CUR
        MOVLW HIGH (STR@LB1)
        MOVWF GEN4H,0
        MOVLW LOW (STR@LB1)
        MOVWF GEN4,0
        F@CALL PRINT@MSTR
F1_000074 EQU $ ; IN [PDS_TEST.BAS] PRINT AT 1,2,  "TEMPERATURE METER"
        MOVLW 1
        MOVWF GEN,0
        MOVLW 2
        F@CALL GLCD@CUR
        MOVLW HIGH (STR@LB2)
        MOVWF GEN4H,0
        MOVLW LOW (STR@LB2)
        MOVWF GEN4,0
        F@CALL PRINT@MSTR
F1_000075 EQU $ ; IN [PDS_TEST.BAS] PRINT AT 12,1, "TEMP : "
        MOVLW 12
        MOVWF GEN,0
        MOVLW 1
        F@CALL GLCD@CUR
        MOVLW HIGH (STR@LB3)
        MOVWF GEN4H,0
        MOVLW LOW (STR@LB3)
        MOVWF GEN4,0
        F@CALL PRINT@MSTR
F1_000076 EQU $ ; IN [PDS_TEST.BAS] PRINT AT 30,1, "RTD R: "
        MOVLW 30
        MOVWF GEN,0
        MOVLW 1
        F@CALL GLCD@CUR
        MOVLW HIGH (STR@LB4)
        MOVWF GEN4H,0
        MOVLW LOW (STR@LB4)
        MOVWF GEN4,0
        F@CALL PRINT@MSTR
F1_000077 EQU $ ; IN [PDS_TEST.BAS] PRINT AT 12,72, " 0.00" , " "
        MOVLW 12
        MOVWF GEN,0
        MOVLW 72
        F@CALL GLCD@CUR
        MOVLW 32
        F@CALL PRINT
        MOVLW 48
        F@CALL PRINT
        MOVLW 46
        F@CALL PRINT
        MOVLW 48
        F@CALL PRINT
        F@CALL PRINT
        MOVLW 32
        F@CALL PRINT
F1_000078 EQU $ ; IN [PDS_TEST.BAS] PRINT AT 12,80, "DEGC"
        MOVLW 12
        MOVWF GEN,0
        MOVLW 80
        F@CALL GLCD@CUR
        MOVLW 100
        F@CALL PRINT
        MOVLW 101
        F@CALL PRINT
        MOVLW 103
        F@CALL PRINT
        MOVLW 67
        F@CALL PRINT
F1_000079 EQU $ ; IN [PDS_TEST.BAS] PRINT AT 30,72, " 0.000", " OHMS "
        MOVLW 30
        MOVWF GEN,0
        MOVLW 72
        F@CALL GLCD@CUR
        MOVLW HIGH (STR@LB5)
        MOVWF GEN4H,0
        MOVLW LOW (STR@LB5)
        MOVWF GEN4,0
        F@CALL PRINT@MSTR
        MOVLW HIGH (STR@LB6)
        MOVWF GEN4H,0
        MOVLW LOW (STR@LB6)
        MOVWF GEN4,0
        F@CALL PRINT@MSTR
F1_000082 EQU $ ; IN [PDS_TEST.BAS] CONFREG = %10011110
        MOVLW 158
        MOVWF CONFREG,0
F1_000083 EQU $ ; IN [PDS_TEST.BAS] GOSUB WRITEI2C
        F@CALL WRITEI2C
F1_000084 EQU $ ; IN [PDS_TEST.BAS] DELAYMS 50
        MOVLW 50
        F@CALL DL@MS
F1_000087 EQU $ ; IN [PDS_TEST.BAS] WHILE 1=1
BC@LL1
F1_000089 EQU $ ; IN [PDS_TEST.BAS] GOSUB READI2C
        F@CALL READI2C
F1_000091 EQU $ ; IN [PDS_TEST.BAS] GOSUB MEASURERES
        F@CALL MEASURERES
F1_000093 EQU $ ; IN [PDS_TEST.BAS] GOSUB COMPUTETEMP
        F@CALL COMPUTETEMP
F1_000096 EQU $ ; IN [PDS_TEST.BAS] PRINT AT 12,72, DEC2 TEMPERATURE, " "
        MOVLW 12
        MOVWF GEN,0
        MOVLW 72
        F@CALL GLCD@CUR
        MOVLW 128
        MOVWF BPFH,0
        MOVFF TEMPERATUREHHH,PP7HHH
        MOVFF TEMPERATUREHH,PP7HH
        MOVFF TEMPERATUREH,PP7H
        MOVFF TEMPERATURE,PP7
        MOVLW 2
        F@CALL OUT@FLOAT
        MOVLW 32
        F@CALL PRINT
F1_000097 EQU $ ; IN [PDS_TEST.BAS] PRINT AT 12,80, "DEGC"
        MOVLW 12
        MOVWF GEN,0
        MOVLW 80
        F@CALL GLCD@CUR
        MOVLW 100
        F@CALL PRINT
        MOVLW 101
        F@CALL PRINT
        MOVLW 103
        F@CALL PRINT
        MOVLW 67
        F@CALL PRINT
F1_000098 EQU $ ; IN [PDS_TEST.BAS] PRINT AT 30,72, DEC3 RESISTANCE,  " OHMS "
        MOVLW 30
        MOVWF GEN,0
        MOVLW 72
        F@CALL GLCD@CUR
        MOVLW 128
        MOVWF BPFH,0
        MOVFF RESISTANCEHHH,PP7HHH
        MOVFF RESISTANCEHH,PP7HH
        MOVFF RESISTANCEH,PP7H
        MOVFF RESISTANCE,PP7
        MOVLW 3
        F@CALL OUT@FLOAT
        MOVLW HIGH (STR@LB7)
        MOVWF GEN4H,0
        MOVLW LOW (STR@LB7)
        MOVWF GEN4,0
        F@CALL PRINT@MSTR
F1_000099 EQU $ ; IN [PDS_TEST.BAS] WEND
        F@JUMP BC@LL1
BC@LL2
MEASURERES
F1_000111 EQU $ ; IN [PDS_TEST.BAS] RAWMEASURE = VALUE_3RD
        CLRF RAWMEASUREHHH,0
        CLRF RAWMEASUREHH,0
        CLRF RAWMEASUREH,0
        MOVFF VALUE_3RD,RAWMEASURE
F1_000112 EQU $ ; IN [PDS_TEST.BAS] RAWMEASURE = RAWMEASURE + (VALUE_2ND << 8)
        CLRF PP7HHH,0
        CLRF PP7HH,0
        MOVFF VALUE_2ND,PP7H
        CLRF PP7,0
        MOVF PP7,W,0
        ADDWF RAWMEASURE,F,0
        MOVF PP7H,W,0
        ADDWFC RAWMEASUREH,F,0
        MOVF PP7HH,W,0
        ADDWFC RAWMEASUREHH,F,0
        MOVF PP7HHH,W,0
        ADDWFC RAWMEASUREHHH,F,0
F1_000113 EQU $ ; IN [PDS_TEST.BAS] RAWMEASURE = RAWMEASURE + (VALUE_1ST << 16)
        CLRF PP7HHH,0
        MOVFF VALUE_1ST,PP7HH
        CLRF PP7H,0
        CLRF PP7,0
        MOVF PP7,W,0
        ADDWF RAWMEASURE,F,0
        MOVF PP7H,W,0
        ADDWFC RAWMEASUREH,F,0
        MOVF PP7HH,W,0
        ADDWFC RAWMEASUREHH,F,0
        MOVF PP7HHH,W,0
        ADDWFC RAWMEASUREHHH,F,0
F1_000114 EQU $ ; IN [PDS_TEST.BAS] INPMEASURE = RAWMEASURE / 131071.0  ' 131071=2^18-1
        MOVLW 128
        MOVWF PBP_BARGHHH,0
        SETF PBP_BARGHH,0
        MOVLW 127
        MOVWF PBP_BARGH,0
        MOVLW 143
        MOVWF PBP_BARG,0
        MOVFF RAWMEASURE,PBP_AARG
        MOVFF RAWMEASUREH,PBP_AARGH
        MOVFF RAWMEASUREHH,PBP_AARGHH
        MOVFF RAWMEASUREHHH,PBP_AARGHHH
        F@CALL FLO@3232S
        F@CALL FPD@32
        MOVFF PBP_AARGHHH,INPMEASUREHHH
        MOVFF PBP_AARGHH,INPMEASUREHH
        MOVFF PBP_AARGH,INPMEASUREH
        MOVFF PBP_AARG,INPMEASURE
F1_000115 EQU $ ; IN [PDS_TEST.BAS] INPMEASURE = INPMEASURE * 2048.0    ' 2048=VREF/IEXC=2.048V/1.0MA
        MOVLW 11
        ADDWF INPMEASURE,W,0
        BNC E@LB7
        BSF _FP_FLAGS,1,0
        MOVLW 255
E@LB7
        MOVWF INPMEASURE,0
F1_000116 EQU $ ; IN [PDS_TEST.BAS] RESISTANCE = INPMEASURE / GAIN
        MOVFF INPMEASUREHHH,PBP_AARGHHH
        MOVFF INPMEASUREHH,PBP_AARGHH
        MOVFF INPMEASUREH,PBP_AARGH
        MOVFF INPMEASURE,PBP_AARG
        MOVFF GAINHHH,PBP_BARGHHH
        MOVFF GAINHH,PBP_BARGHH
        MOVFF GAINH,PBP_BARGH
        MOVFF GAIN,PBP_BARG
        F@CALL FPD@32
        MOVFF PBP_AARGHHH,RESISTANCEHHH
        MOVFF PBP_AARGHH,RESISTANCEHH
        MOVFF PBP_AARGH,RESISTANCEH
        MOVFF PBP_AARG,RESISTANCE
F1_000117 EQU $ ; IN [PDS_TEST.BAS] RETURN
        RETURN 0
COMPUTETEMP
F1_000130 EQU $ ; IN [PDS_TEST.BAS] TEMPHIGH = 850.0
        CLRF TEMPHIGHHHH,0
        MOVLW 128
        MOVWF TEMPHIGHHH,0
        MOVLW 84
        MOVWF TEMPHIGHH,0
        MOVLW 136
        MOVWF TEMPHIGH,0
F1_000131 EQU $ ; IN [PDS_TEST.BAS] TEMPLOW  = -200.0
        CLRF TEMPLOWHHH,0
        CLRF TEMPLOWHH,0
        MOVLW 200
        MOVWF TEMPLOWH,0
        MOVLW 134
        MOVWF TEMPLOW,0
TRIALVALUE
F1_000135 EQU $ ; IN [PDS_TEST.BAS] TEMPERATURE = (TEMPLOW + TEMPHIGH) * 0.5
        MOVFF TEMPLOWHHH,PBP_AARGHHH
        MOVFF TEMPLOWHH,PBP_AARGHH
        MOVFF TEMPLOWH,PBP_AARGH
        MOVFF TEMPLOW,PBP_AARG
        MOVFF TEMPHIGHHHH,PBP_BARGHHH
        MOVFF TEMPHIGHHH,PBP_BARGHH
        MOVFF TEMPHIGHH,PBP_BARGH
        MOVFF TEMPHIGH,PBP_BARG
        F@CALL FPA@32
        MOVFF PBP_AARGHHH,PP7HHH
        MOVFF PBP_AARGHH,PP7HH
        MOVFF PBP_AARGH,PP7H
        MOVFF PBP_AARG,PP7
        MOVFF PP7HHH,TEMPERATUREHHH
        MOVFF PP7HH,TEMPERATUREHH
        MOVFF PP7H,TEMPERATUREH
        MOVF PP7,W,0
        BTFSC STATUS,2,0
        BSF _FP_FLAGS,2,0
        BTFSS STATUS,2,0
        DECF PP7,W,0
        MOVWF TEMPERATURE,0
F1_000138 EQU $ ; IN [PDS_TEST.BAS] TRIALRES = TEMPERATURE * COEFFB + COEFFA
        MOVFF TEMPERATUREHHH,PBP_AARGHHH
        MOVFF TEMPERATUREHH,PBP_AARGHH
        MOVFF TEMPERATUREH,PBP_AARGH
        MOVFF TEMPERATURE,PBP_AARG
        MOVFF COEFFBHHH,PBP_BARGHHH
        MOVFF COEFFBHH,PBP_BARGHH
        MOVFF COEFFBH,PBP_BARGH
        MOVFF COEFFB,PBP_BARG
        F@CALL FPM@32
        MOVFF PBP_AARGHHH,PP7HHH
        MOVFF PBP_AARGHH,PP7HH
        MOVFF PBP_AARGH,PP7H
        MOVFF PBP_AARG,PP7
        MOVFF PP7HHH,PBP_AARGHHH
        MOVFF PP7HH,PBP_AARGHH
        MOVFF PP7H,PBP_AARGH
        MOVFF PP7,PBP_AARG
        MOVFF COEFFAHHH,PBP_BARGHHH
        MOVFF COEFFAHH,PBP_BARGHH
        MOVFF COEFFAH,PBP_BARGH
        MOVFF COEFFA,PBP_BARG
        F@CALL FPA@32
        MOVFF PBP_AARGHHH,TRIALRESHHH
        MOVFF PBP_AARGHH,TRIALRESHH
        MOVFF PBP_AARGH,TRIALRESH
        MOVFF PBP_AARG,TRIALRES
F1_000139 EQU $ ; IN [PDS_TEST.BAS] TRIALRES = TRIALRES * TEMPERATURE + 1.0
        MOVFF TRIALRESHHH,PBP_AARGHHH
        MOVFF TRIALRESHH,PBP_AARGHH
        MOVFF TRIALRESH,PBP_AARGH
        MOVFF TRIALRES,PBP_AARG
        MOVFF TEMPERATUREHHH,PBP_BARGHHH
        MOVFF TEMPERATUREHH,PBP_BARGHH
        MOVFF TEMPERATUREH,PBP_BARGH
        MOVFF TEMPERATURE,PBP_BARG
        F@CALL FPM@32
        MOVFF PBP_AARGHHH,PP7HHH
        MOVFF PBP_AARGHH,PP7HH
        MOVFF PBP_AARGH,PP7H
        MOVFF PBP_AARG,PP7
        CLRF PBP_AARGHHH,0
        CLRF PBP_AARGHH,0
        CLRF PBP_AARGH,0
        MOVLW 127
        MOVWF PBP_AARG,0
        MOVFF PP7HHH,PBP_BARGHHH
        MOVFF PP7HH,PBP_BARGHH
        MOVFF PP7H,PBP_BARGH
        MOVFF PP7,PBP_BARG
        F@CALL FPA@32
        MOVFF PBP_AARGHHH,TRIALRESHHH
        MOVFF PBP_AARGHH,TRIALRESHH
        MOVFF PBP_AARGH,TRIALRESH
        MOVFF PBP_AARG,TRIALRES
F1_000140 EQU $ ; IN [PDS_TEST.BAS] TRIALRES = TRIALRES * R0
        MOVFF TRIALRESHHH,PBP_AARGHHH
        MOVFF TRIALRESHH,PBP_AARGHH
        MOVFF TRIALRESH,PBP_AARGH
        MOVFF TRIALRES,PBP_AARG
        MOVFF R0HHH,PBP_BARGHHH
        MOVFF R0HH,PBP_BARGHH
        MOVFF R0H,PBP_BARGH
        MOVFF R0,PBP_BARG
        F@CALL FPM@32
        MOVFF PBP_AARGHHH,TRIALRESHHH
        MOVFF PBP_AARGHH,TRIALRESHH
        MOVFF PBP_AARGH,TRIALRESH
        MOVFF PBP_AARG,TRIALRES
F1_000143 EQU $ ; IN [PDS_TEST.BAS] ERR = RESISTANCE - TRIALRES
        MOVFF RESISTANCEHHH,PBP_AARGHHH
        MOVFF RESISTANCEHH,PBP_AARGHH
        MOVFF RESISTANCEH,PBP_AARGH
        MOVFF RESISTANCE,PBP_AARG
        MOVFF TRIALRESHHH,PBP_BARGHHH
        MOVFF TRIALRESHH,PBP_BARGHH
        MOVFF TRIALRESH,PBP_BARGH
        MOVFF TRIALRES,PBP_BARG
        F@CALL FPS@32
        MOVFF PBP_AARGHHH,ERRHHH
        MOVFF PBP_AARGHH,ERRHH
        MOVFF PBP_AARGH,ERRH
        MOVFF PBP_AARG,ERR
F1_000144 EQU $ ; IN [PDS_TEST.BAS] IF ERR > 0.0 THEN
        CLRF PBP_AARGHHH,0
        CLRF PBP_AARGHH,0
        CLRF PBP_AARGH,0
        CLRF PBP_AARG,0
        MOVFF ERRHHH,PBP_BARGHHH
        MOVFF ERRHH,PBP_BARGHH
        MOVFF ERRH,PBP_BARGH
        MOVFF ERR,PBP_BARG
        F@CALL TAGEB@32
        SUBLW 1
        BTFSC STATUS,2,0
        GO@TO BC@LL4
F1_000145 EQU $ ; IN [PDS_TEST.BAS] TEMPLOW = TEMPERATURE
        MOVFF TEMPERATUREHHH,TEMPLOWHHH
        MOVFF TEMPERATUREHH,TEMPLOWHH
        MOVFF TEMPERATUREH,TEMPLOWH
        MOVFF TEMPERATURE,TEMPLOW
        F@JUMP BC@LL5
BC@LL4
F1_000146 EQU $ ; IN [PDS_TEST.BAS] ELSE
F1_000147 EQU $ ; IN [PDS_TEST.BAS] TEMPHIGH = TEMPERATURE
        MOVFF TEMPERATUREHHH,TEMPHIGHHHH
        MOVFF TEMPERATUREHH,TEMPHIGHHH
        MOVFF TEMPERATUREH,TEMPHIGHH
        MOVFF TEMPERATURE,TEMPHIGH
F1_000148 EQU $ ; IN [PDS_TEST.BAS] END IF
BC@LL5
F1_000150 EQU $ ; IN [PDS_TEST.BAS] ABSERROR = ABS ERR
        MOVFF ERRHHH,ABSERRORHHH
        MOVFF ERRHH,ABSERRORHH
        MOVFF ERRH,ABSERRORH
        BCF ABSERRORH,7,0
        MOVFF ERR,ABSERROR
F1_000152 EQU $ ; IN [PDS_TEST.BAS] IF ABSERROR > 0.001 THEN TRIALVALUE
        MOVLW 111
        MOVWF PBP_AARGHHH,0
        MOVLW 18
        MOVWF PBP_AARGHH,0
        MOVLW 3
        MOVWF PBP_AARGH,0
        MOVLW 117
        MOVWF PBP_AARG,0
        MOVFF ABSERRORHHH,PBP_BARGHHH
        MOVFF ABSERRORHH,PBP_BARGHH
        MOVFF ABSERRORH,PBP_BARGH
        MOVFF ABSERROR,PBP_BARG
        F@CALL TAGEB@32
        SUBLW 1
        BTFSC STATUS,2,0
        GO@TO BC@LL7
        F@JUMP TRIALVALUE
BC@LL7
F1_000156 EQU $ ; IN [PDS_TEST.BAS] RETURN
        RETURN 0
WRITEI2C
F1_000163 EQU $ ; IN [PDS_TEST.BAS] HBUSOUT  DEVADDR, [CONFREG]
        MOVF DEVADDR,W,0
        F@CALL HBUSOUT
        MOVF CONFREG,W,0
        F@CALL HBUSOUT2
F1_000164 EQU $ ; IN [PDS_TEST.BAS] RETURN
        RETURN 0
READI2C
F1_000171 EQU $ ; IN [PDS_TEST.BAS] HBSTART
        F@CALL HBUS@STRT
F1_000172 EQU $ ; IN [PDS_TEST.BAS] HBUSOUT DEVADDR+1
        INCF DEVADDR,W,0
        F@CALL HBUSOUTB
F1_000173 EQU $ ; IN [PDS_TEST.BAS] HBUSIN  VALUE_1ST
        F@CALL HBUSINB
        MOVWF VALUE_1ST,0
F1_000174 EQU $ ; IN [PDS_TEST.BAS] HBUSACK
        F@CALL HBUS@ACK
F1_000175 EQU $ ; IN [PDS_TEST.BAS] HBUSIN  VALUE_2ND
        F@CALL HBUSINB
        MOVWF VALUE_2ND,0
F1_000176 EQU $ ; IN [PDS_TEST.BAS] HBUSACK
        F@CALL HBUS@ACK
F1_000177 EQU $ ; IN [PDS_TEST.BAS] HBUSIN  VALUE_3RD
        F@CALL HBUSINB
        MOVWF VALUE_3RD,0
F1_000178 EQU $ ; IN [PDS_TEST.BAS] HBUSACK
        F@CALL HBUS@ACK
F1_000179 EQU $ ; IN [PDS_TEST.BAS] HBUSIN  CONFREG
        F@CALL HBUSINB
        MOVWF CONFREG,0
F1_000181 EQU $ ; IN [PDS_TEST.BAS] WHILE  CONFREG AND $80
BC@LL8
        MOVLW 129
        SUBWF CONFREG,W,0
        BTFSS STATUS,0,0
        GO@TO BC@LL9
F1_000182 EQU $ ; IN [PDS_TEST.BAS] HBUSACK
        F@CALL HBUS@ACK
F1_000183 EQU $ ; IN [PDS_TEST.BAS] HBUSIN  CONFREG
        F@CALL HBUSINB
        MOVWF CONFREG,0
F1_000184 EQU $ ; IN [PDS_TEST.BAS] DELAYMS 10
        MOVLW 10
        F@CALL DL@MS
F1_000185 EQU $ ; IN [PDS_TEST.BAS] WEND
        F@JUMP BC@LL8
BC@LL9
F1_000186 EQU $ ; IN [PDS_TEST.BAS] HBUSOUT 0XFF    ' SEND A NAK
        MOVLW 255
        F@CALL HBUSOUTB
F1_000187 EQU $ ; IN [PDS_TEST.BAS] HBSTOP
        F@CALL HBUS@STP
F1_000188 EQU $ ; IN [PDS_TEST.BAS] RETURN
        RETURN 0
F3_SOF EQU $ ; FONT.INC
FONT
        DB 0,0,0,0,0,0
        DB 255,255,255,255,255,255
        DB 7,7,7,0,0,0
        DB 0,0,0,7,7,7
        DB 224,224,224,0,0,0
        DB 0,0,0,224,224,224
        DB 255,255,255,0,0,0
        DB 0,0,0,255,255,255
        DB 7,7,7,7,7,7
        DB 224,224,224,224,224,224
        DB 224,224,224,7,7,7
        DB 7,7,7,224,224,224
        DB 255,255,255,224,224,224
        DB 224,224,224,255,255,255
        DB 7,7,7,255,255,255
        DB 255,255,255,7,7,7
        DB 85,170,85,170,85,170
        DB 170,85,170,85,170,85
        DB 1,1,1,1,1,1
        DB 128,128,128,128,128,128
        DB 255,0,0,0,0,0
        DB 0,0,0,0,0,255
        DB 255,1,1,1,1,1
        DB 1,1,1,1,1,255
        DB 255,128,128,128,128,128
        DB 128,128,128,128,128,255
        DB 0,0,0,0,240,240
        DB 0,0,0,0,15,15
        DB 0,0,0,0,0,0
        DB 0,0,0,0,0,0
        DB 0,0,0,0,0,0
        DB 0,0,0,0,0,0
        DB 0,0,0,0,0,0
        DB 0,0,79,0,0,0
        DB 0,7,0,7,0,0
        DB 20,127,20,127,20,0
        DB 36,42,127,42,18,0
        DB 35,19,8,100,98,0
        DB 54,73,85,34,80,0
        DB 0,5,3,0,0,0
        DB 28,34,65,0,0,0
        DB 0,0,65,34,28,0
        DB 20,8,62,8,20,0
        DB 8,8,62,8,8,0
        DB 0,80,48,0,0,0
        DB 8,8,8,8,8,0
        DB 0,96,96,0,0,0
        DB 32,16,8,4,2,0
        DB 62,81,73,69,62,0
        DB 0,66,127,64,0,0
        DB 66,97,81,73,70,0
        DB 33,65,69,75,49,0
        DB 24,20,18,127,16,0
        DB 39,69,69,69,57,0
        DB 60,74,73,73,48,0
        DB 1,113,9,5,3,0
        DB 54,73,73,73,54,0
        DB 6,73,73,73,62,0
        DB 0,54,54,0,0,0
        DB 0,86,54,0,0,0
        DB 8,20,34,65,0,0
        DB 20,20,20,20,20,0
        DB 0,65,34,20,8,0
        DB 2,1,81,9,6,0
        DB 50,73,121,65,62,0
        DB 126,17,17,17,126,0
        DB 127,73,73,73,54,0
        DB 62,65,65,65,34,0
        DB 127,65,65,34,28,0
        DB 127,73,73,73,65,0
        DB 127,9,9,9,1,0
        DB 62,65,73,73,122,0
        DB 127,8,8,8,127,0
        DB 0,65,127,65,0,0
        DB 32,64,65,63,1,0
        DB 127,8,20,34,65,0
        DB 127,64,64,64,64,0
        DB 127,2,12,2,127,0
        DB 127,4,8,16,127,0
        DB 62,65,65,65,62,0
        DB 127,9,9,9,6,0
        DB 62,65,81,33,94,0
        DB 127,9,25,41,70,0
        DB 70,73,73,73,49,0
        DB 1,1,127,1,1,0
        DB 63,64,64,64,63,0
        DB 31,32,64,32,31,0
        DB 63,64,56,64,63,0
        DB 99,20,8,20,99,0
        DB 7,8,112,8,7,0
        DB 97,81,73,69,67,0
        DB 127,65,65,0,0,0
        DB 2,4,8,16,32,0
        DB 0,0,65,65,127,0
        DB 4,2,1,2,4,0
        DB 64,64,64,64,64,0
        DB 0,1,2,4,0,0
        DB 32,84,84,84,120,0
        DB 127,72,68,68,56,0
        DB 56,68,68,68,32,0
        DB 56,68,68,72,127,0
        DB 56,84,84,84,24,0
        DB 8,126,9,1,2,0
        DB 12,82,82,82,62,0
        DB 127,8,4,4,120,0
        DB 0,68,125,64,0,0
        DB 0,32,64,68,61,0
        DB 127,16,40,68,0,0
        DB 0,65,127,64,0,0
        DB 124,4,24,4,120,0
        DB 124,8,4,4,120,0
        DB 56,68,68,68,56,0
        DB 124,20,20,20,8,0
        DB 8,20,20,24,124,0
        DB 124,8,4,4,8,0
        DB 72,84,84,84,32,0
        DB 4,63,68,64,32,0
        DB 60,64,64,32,124,0
        DB 28,32,64,32,28,0
        DB 60,64,48,64,60,0
        DB 68,40,16,40,68,0
        DB 12,80,80,80,60,0
        DB 68,100,84,76,68,0
        DB 8,54,65,0,0,0
        DB 0,0,127,0,0,0
        DB 0,0,65,54,8,0
        DB 0,8,4,8,4,0
F3_EOF EQU $ ; FONT.INC
F1_000192 EQU $ ; IN [PDS_TEST.BAS] END
PB@LB11
        SLEEP
        BRA PB@LB11
F1_EOF EQU $ ; PDS_TEST.BAS
PB@LB12
        BRA PB@LB12
__EOF
CONFIG OSC = RC
CONFIG BORV = 25
CONFIG WDT = OFF
        END
