;--------------------------------------------------------
; File Created by SDCC : free open source ANSI-C Compiler
; Version 2.8.3 #5235 (Sep 15 2008) (UNIX)
; This file was generated Mon Sep 15 21:41:10 2008
;--------------------------------------------------------
; PIC16 port for the Microchip 16-bit core micros
;--------------------------------------------------------

	.ident "SDCC version 2.8.3 #5235 [pic16 port]"
	.file	"carLog1.c"
	list	p=18f2520

	radix dec

;--------------------------------------------------------
; public variables in this module
;--------------------------------------------------------
	global _buttonsLastTime
	global _stack
	global _stack_end
	global _timerHigh
	global _battery
	global _mode
	global _displayMode
	global _buttonsLast
	global _voltage
	global _current
	global _temperature
	global _speed
	global _distanceTicks
	global _timeNextMicroSec
	global _distance
	global _speedTickCount
	global _speedTickSTime
	global _speedTickETime
	global _charge
	global _charge0
	global _charge1
	global _warnings
	global _voltageMin
	global _voltageCount
	global _voltageWarning
	global _speedPeak
	global _speedPeakCurrent
	global _speedAvg
	global _currentAvg
	global _currentAvgNum
	global _buffer
	global _delayMs
	global _i2cReset
	global _i2cInit
	global _i2cWaitForIdle1
	global _i2cWaitForIdle
	global _i2cStart
	global _i2cRepStart
	global _i2cStop
	global _i2cPutByte
	global _i2cGetByte
	global _i2cWrite
	global _i2cRead
	global _lcdInit
	global _lcdPutChar
	global _lcdWriteStr
	global _lcdPutHexByte
	global _strByte
	global _strWordDec
	global _usartInit
	global _usartRxRdy
	global _usartGetc
	global _usartPutc
	global _usartPuts
	global _usartWrite
	global _eepromRead8
	global _eepromWrite8
	global _eepromRead16
	global _eepromWrite16
	global _eepromRead32
	global _eepromWrite32
	global _timerInit
	global _timerClear
	global _timerTick
	global _timerGetMicroSec
	global _timerGetMilliSec
	global _timerGetSec
	global _adcInit
	global _adcRead
	global _displayDo
	global _displayWarnings
	global _speedInterrupt
	global _speedCalculate
	global _distanceCalculate
	global _chargeCalculate
	global _dataLoad
	global _dataLog
	global _dataDump
	global _serialSetTime
	global _reset
	global _serialProcess
	global _buttonsProcess
	global _bootTest
	global _isr
	global _main

;--------------------------------------------------------
; extern variables in this module
;--------------------------------------------------------
	extern __gptrget1
	extern __gptrput1
	extern __divuchar
	extern __moduchar
	extern _PORTAbits
	extern _PORTBbits
	extern _PORTCbits
	extern _PORTDbits
	extern _PORTEbits
	extern _LATAbits
	extern _LATBbits
	extern _LATCbits
	extern _LATDbits
	extern _LATEbits
	extern _DDRAbits
	extern _TRISAbits
	extern _DDRBbits
	extern _TRISBbits
	extern _DDRCbits
	extern _TRISCbits
	extern _DDRDbits
	extern _TRISDbits
	extern _DDREbits
	extern _TRISEbits
	extern _OSCTUNEbits
	extern _PIE1bits
	extern _PIR1bits
	extern _IPR1bits
	extern _PIE2bits
	extern _PIR2bits
	extern _IPR2bits
	extern _EECON1bits
	extern _RCSTAbits
	extern _TXSTAbits
	extern _T3CONbits
	extern _CMCONbits
	extern _CVRCONbits
	extern _ECCP1ASbits
	extern _PWM1CONbits
	extern _BAUDCONbits
	extern _BAUDCTLbits
	extern _CCP2CONbits
	extern _CCP1CONbits
	extern _ADCON2bits
	extern _ADCON1bits
	extern _ADCON0bits
	extern _SSPCON2bits
	extern _SSPCON1bits
	extern _SSPSTATbits
	extern _T2CONbits
	extern _T1CONbits
	extern _RCONbits
	extern _WDTCONbits
	extern _HLVDCONbits
	extern _LVDCONbits
	extern _OSCCONbits
	extern _T0CONbits
	extern _STATUSbits
	extern _INTCON3bits
	extern _INTCON2bits
	extern _INTCONbits
	extern _STKPTRbits
	extern _PORTA
	extern _PORTB
	extern _PORTC
	extern _PORTD
	extern _PORTE
	extern _LATA
	extern _LATB
	extern _LATC
	extern _LATD
	extern _LATE
	extern _DDRA
	extern _TRISA
	extern _DDRB
	extern _TRISB
	extern _DDRC
	extern _TRISC
	extern _DDRD
	extern _TRISD
	extern _DDRE
	extern _TRISE
	extern _OSCTUNE
	extern _PIE1
	extern _PIR1
	extern _IPR1
	extern _PIE2
	extern _PIR2
	extern _IPR2
	extern _EECON1
	extern _EECON2
	extern _EEDATA
	extern _EEADR
	extern _RCSTA
	extern _TXSTA
	extern _TXREG
	extern _RCREG
	extern _SPBRG
	extern _SPBRGH
	extern _T3CON
	extern _TMR3L
	extern _TMR3H
	extern _CMCON
	extern _CVRCON
	extern _ECCP1AS
	extern _PWM1CON
	extern _BAUDCON
	extern _BAUDCTL
	extern _CCP2CON
	extern _CCPR2
	extern _CCPR2L
	extern _CCPR2H
	extern _CCP1CON
	extern _CCPR1
	extern _CCPR1L
	extern _CCPR1H
	extern _ADCON2
	extern _ADCON1
	extern _ADCON0
	extern _ADRES
	extern _ADRESL
	extern _ADRESH
	extern _SSPCON2
	extern _SSPCON1
	extern _SSPSTAT
	extern _SSPADD
	extern _SSPBUF
	extern _T2CON
	extern _PR2
	extern _TMR2
	extern _T1CON
	extern _TMR1L
	extern _TMR1H
	extern _RCON
	extern _WDTCON
	extern _HLVDCON
	extern _LVDCON
	extern _OSCCON
	extern _T0CON
	extern _TMR0L
	extern _TMR0H
	extern _STATUS
	extern _FSR2L
	extern _FSR2H
	extern _PLUSW2
	extern _PREINC2
	extern _POSTDEC2
	extern _POSTINC2
	extern _INDF2
	extern _BSR
	extern _FSR1L
	extern _FSR1H
	extern _PLUSW1
	extern _PREINC1
	extern _POSTDEC1
	extern _POSTINC1
	extern _INDF1
	extern _WREG
	extern _FSR0L
	extern _FSR0H
	extern _PLUSW0
	extern _PREINC0
	extern _POSTDEC0
	extern _POSTINC0
	extern _INDF0
	extern _INTCON3
	extern _INTCON2
	extern _INTCON
	extern _PROD
	extern _PRODL
	extern _PRODH
	extern _TABLAT
	extern _TBLPTR
	extern _TBLPTRL
	extern _TBLPTRH
	extern _TBLPTRU
	extern _PC
	extern _PCL
	extern _PCLATH
	extern _PCLATU
	extern _STKPTR
	extern _TOS
	extern _TOSL
	extern _TOSH
	extern _TOSU
	extern _strcpy
	extern __divuint
	extern __moduint
	extern __divulong
	extern __divsint
	extern __mulint
	extern __mullong
	extern __modulong
;--------------------------------------------------------
;	Equates to used internal registers
;--------------------------------------------------------
STATUS	equ	0xfd8
PCL	equ	0xff9
PCLATH	equ	0xffa
PCLATU	equ	0xffb
WREG	equ	0xfe8
BSR	equ	0xfe0
FSR0L	equ	0xfe9
FSR0H	equ	0xfea
FSR1L	equ	0xfe1
FSR2L	equ	0xfd9
POSTDEC1	equ	0xfe5
PREINC1	equ	0xfe4
PLUSW2	equ	0xfdb
PRODL	equ	0xff3
PRODH	equ	0xff4


; Internal registers
.registers	udata_ovr	0x0000
r0x00	res	1
r0x01	res	1
r0x02	res	1
r0x03	res	1
r0x04	res	1
r0x05	res	1
r0x06	res	1
r0x07	res	1
r0x08	res	1
r0x09	res	1
r0x0a	res	1
r0x0b	res	1

udata_carLog1_0	udata
_buttonsLastTime	res	2

udata_carLog1_1	udata
_lcdInit_dat_1_1	res	3

udata_carLog1_2	udata
_lcdPutChar_dat_1_1	res	2

udata_carLog1_3	udata
_lcdPutHexByte_dat_1_1	res	3

udata_carLog1_4	udata
_timerHigh	res	2

udata_carLog1_5	udata
_current	res	2

udata_carLog1_6	udata
_displayMode	res	1

udata_carLog1_7	udata
_displayDo_str_1_1	res	17

udata_carLog1_8	udata
_speed	res	2

udata_carLog1_9	udata
_battery	res	1

udata_carLog1_10	udata
_charge	res	4

udata_carLog1_11	udata
_distance	res	2

udata_carLog1_12	udata
_voltage	res	2

udata_carLog1_13	udata
_currentAvgNum	res	2

udata_carLog1_14	udata
_speedAvg	res	4

udata_carLog1_15	udata
_currentAvg	res	4

udata_carLog1_16	udata
_speedPeak	res	2

udata_carLog1_17	udata
_speedPeakCurrent	res	2

udata_carLog1_18	udata
_warnings	res	1

udata_carLog1_19	udata
_speedTickETime	res	2

udata_carLog1_20	udata
_distanceTicks	res	4

udata_carLog1_21	udata
_speedTickCount	res	2

udata_carLog1_22	udata
_speedTickSTime	res	2

udata_carLog1_23	udata
_buffer	res	32

udata_carLog1_24	udata
_charge0	res	2

udata_carLog1_25	udata
_charge1	res	2

udata_carLog1_26	udata
_temperature	res	2

udata_carLog1_27	udata
_mode	res	1

udata_carLog1_28	udata
_dataDump_block_1_1	res	4

udata_carLog1_29	udata
_dataDump_num_1_1	res	2

udata_carLog1_30	udata
_serialSetTime_buf_1_1	res	8

udata_carLog1_31	udata
_buttonsLast	res	2

udata_carLog1_32	udata
_voltageMin	res	2

udata_carLog1_33	udata
_voltageCount	res	1

udata_carLog1_34	udata
_voltageWarning	res	1

udata_carLog1_35	udata
_timeNextMicroSec	res	4


ustat_carLog1_00	udata	0X0200
_stack	res	255
_stack_end	res	1

;--------------------------------------------------------
; interrupt vector 
;--------------------------------------------------------

;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
; ; Starting pCode block for absolute section
; ;-----------------------------------------
S_carLog1_ivec_0x1_isr	code	0X000008
ivec_0x1_isr:
	GOTO	_isr

; I code from now on!
; ; Starting pCode block
S_carLog1__main	code
_main:
	.line	626; carLog1.c	OSCCON = 0x00;				// External 4MHZ
	CLRF	_OSCCON
	.line	630; carLog1.c	TRISA = 0xFF;				// PORTA Input
	MOVLW	0xff
	MOVWF	_TRISA
	.line	631; carLog1.c	TRISB = 0x0F;           		// PORTB top 4 bits Output
	MOVLW	0x0f
	MOVWF	_TRISB
	.line	632; carLog1.c	TRISC = 0xFF;				// PORTC Input
	MOVLW	0xff
	MOVWF	_TRISC
	.line	637; carLog1.c	PORTB = 0;				// LED's off
	CLRF	_PORTB
	.line	640; carLog1.c	mode = 1;
	MOVLW	0x01
	BANKSEL	_mode
	MOVWF	_mode, B
	BANKSEL	_displayMode
	.line	641; carLog1.c	displayMode = 0;
	CLRF	_displayMode, B
	.line	642; carLog1.c	charge0 = eepromRead16(EE_CHARGE0);
	MOVLW	0x06
	MOVWF	POSTDEC1
	CALL	_eepromRead16
	BANKSEL	_charge0
	MOVWF	_charge0, B
	MOVFF	PRODL, (_charge0 + 1)
	INCF	FSR1L, F
	.line	643; carLog1.c	charge1 = eepromRead16(EE_CHARGE1);
	MOVLW	0x08
	MOVWF	POSTDEC1
	CALL	_eepromRead16
	BANKSEL	_charge1
	MOVWF	_charge1, B
	MOVFF	PRODL, (_charge1 + 1)
	INCF	FSR1L, F
	BANKSEL	_speed
	.line	645; carLog1.c	speed = 0;
	CLRF	_speed, B
	BANKSEL	(_speed + 1)
	CLRF	(_speed + 1), B
	BANKSEL	_temperature
	.line	646; carLog1.c	temperature = 0;
	CLRF	_temperature, B
	BANKSEL	(_temperature + 1)
	CLRF	(_temperature + 1), B
	BANKSEL	_distanceTicks
	.line	648; carLog1.c	distanceTicks = 0;
	CLRF	_distanceTicks, B
	BANKSEL	(_distanceTicks + 1)
	CLRF	(_distanceTicks + 1), B
	BANKSEL	(_distanceTicks + 2)
	CLRF	(_distanceTicks + 2), B
	BANKSEL	(_distanceTicks + 3)
	CLRF	(_distanceTicks + 3), B
	BANKSEL	_distance
	.line	649; carLog1.c	distance = 0;
	CLRF	_distance, B
	BANKSEL	(_distance + 1)
	CLRF	(_distance + 1), B
	BANKSEL	_speedTickCount
	.line	650; carLog1.c	speedTickCount = 0;
	CLRF	_speedTickCount, B
	BANKSEL	(_speedTickCount + 1)
	CLRF	(_speedTickCount + 1), B
	BANKSEL	_speedTickSTime
	.line	651; carLog1.c	speedTickSTime = 0;PORTBbits.RB0 = 1;
	CLRF	_speedTickSTime, B
	BANKSEL	(_speedTickSTime + 1)
	CLRF	(_speedTickSTime + 1), B
	BSF	_PORTBbits, 0
	BANKSEL	_speedTickETime
	.line	652; carLog1.c	speedTickETime = 0;
	CLRF	_speedTickETime, B
	BANKSEL	(_speedTickETime + 1)
	CLRF	(_speedTickETime + 1), B
	BANKSEL	_warnings
	.line	653; carLog1.c	warnings = 0;
	CLRF	_warnings, B
	BANKSEL	_voltageMin
	.line	654; carLog1.c	voltageMin = 0;
	CLRF	_voltageMin, B
	BANKSEL	(_voltageMin + 1)
	CLRF	(_voltageMin + 1), B
	BANKSEL	_voltageCount
	.line	655; carLog1.c	voltageCount = 0;
	CLRF	_voltageCount, B
	BANKSEL	_voltageWarning
	.line	656; carLog1.c	voltageWarning = 0;
	CLRF	_voltageWarning, B
	BANKSEL	_speedPeak
	.line	657; carLog1.c	speedPeak = 0;
	CLRF	_speedPeak, B
	BANKSEL	(_speedPeak + 1)
	CLRF	(_speedPeak + 1), B
	BANKSEL	_speedPeakCurrent
	.line	658; carLog1.c	speedPeakCurrent = 0;
	CLRF	_speedPeakCurrent, B
	BANKSEL	(_speedPeakCurrent + 1)
	CLRF	(_speedPeakCurrent + 1), B
	BANKSEL	_speedAvg
	.line	659; carLog1.c	speedAvg = 0;
	CLRF	_speedAvg, B
	BANKSEL	(_speedAvg + 1)
	CLRF	(_speedAvg + 1), B
	BANKSEL	(_speedAvg + 2)
	CLRF	(_speedAvg + 2), B
	BANKSEL	(_speedAvg + 3)
	CLRF	(_speedAvg + 3), B
	BANKSEL	_currentAvg
	.line	660; carLog1.c	currentAvg = 0;
	CLRF	_currentAvg, B
	BANKSEL	(_currentAvg + 1)
	CLRF	(_currentAvg + 1), B
	BANKSEL	(_currentAvg + 2)
	CLRF	(_currentAvg + 2), B
	BANKSEL	(_currentAvg + 3)
	CLRF	(_currentAvg + 3), B
	BANKSEL	_currentAvgNum
	.line	661; carLog1.c	currentAvgNum = 0;
	CLRF	_currentAvgNum, B
	BANKSEL	(_currentAvgNum + 1)
	CLRF	(_currentAvgNum + 1), B
	.line	664; carLog1.c	battery = PORTCbits.RC0;
	CLRF	r0x00
	BTFSC	_PORTCbits, 0
	INCF	r0x00, F
	MOVFF	r0x00, _battery
	BANKSEL	_battery
	.line	665; carLog1.c	if(battery)
	MOVF	_battery, W, B
	BZ	_00691_DS_
	.line	666; carLog1.c	charge = (UInt32)charge1 << 16;
	MOVFF	_charge1, r0x00
	MOVFF	(_charge1 + 1), r0x01
	CLRF	r0x02
	CLRF	r0x03
	MOVF	r0x01, W
	BANKSEL	(_charge + 3)
	MOVWF	(_charge + 3), B
	MOVF	r0x00, W
	BANKSEL	(_charge + 2)
	MOVWF	(_charge + 2), B
	BANKSEL	_charge
	CLRF	_charge, B
	BANKSEL	(_charge + 1)
	CLRF	(_charge + 1), B
	BRA	_00692_DS_
_00691_DS_:
	.line	668; carLog1.c	charge = (UInt32)charge0 << 16;
	MOVFF	_charge0, r0x00
	MOVFF	(_charge0 + 1), r0x01
	CLRF	r0x02
	CLRF	r0x03
	MOVF	r0x01, W
	BANKSEL	(_charge + 3)
	MOVWF	(_charge + 3), B
	MOVF	r0x00, W
	BANKSEL	(_charge + 2)
	MOVWF	(_charge + 2), B
	BANKSEL	_charge
	CLRF	_charge, B
	BANKSEL	(_charge + 1)
	CLRF	(_charge + 1), B
_00692_DS_:
	.line	671; carLog1.c	i2cInit();
	CALL	_i2cInit
	.line	672; carLog1.c	lcdInit();
	CALL	_lcdInit
	.line	673; carLog1.c	usartInit();
	CALL	_usartInit
	.line	674; carLog1.c	timerInit();
	CALL	_timerInit
	.line	675; carLog1.c	adcInit();
	CALL	_adcInit
	.line	685; carLog1.c	if(RCONbits.TO)
	BTFSS	_RCONbits, 3
	BRA	_00694_DS_
	.line	686; carLog1.c	bootTest();			// Initial boot test, don't do this if a Watchdog reset has occurred
	CALL	_bootTest
_00694_DS_:
	.line	688; carLog1.c	WDTCONbits.SWDTEN = 1;			// Watchdog enable
	BSF	_WDTCONbits, 0
	.line	690; carLog1.c	displayDo();
	CALL	_displayDo
	.line	693; carLog1.c	INTCON = 0;				// Clear interrupt flag bits
	CLRF	_INTCON
	.line	694; carLog1.c	INTCONbits.PEIE = 1;			// Enable peripheral interrupts
	BSF	_INTCONbits, 6
	.line	695; carLog1.c	PIE2bits.TMR3IE = 1;			// TMR3 overflow interrupt enable
	BSF	_PIE2bits, 1
	.line	696; carLog1.c	INTCON2bits.INTEDG0 = 1;		// INT0 Interrupt on +ve edge 
	BSF	_INTCON2bits, 6
	.line	697; carLog1.c	INTCONbits.INT0IE = 1;			// Enable INT0 Speed interrupt
	BSF	_INTCONbits, 4
	.line	698; carLog1.c	INTCONbits.GIE = 1;			// Global interrupt enable
	BSF	_INTCONbits, 7
	.line	713; carLog1.c	timerClear();
	CALL	_timerClear
	.line	714; carLog1.c	timeNextMicroSec = 100000;
	MOVLW	0xa0
	BANKSEL	_timeNextMicroSec
	MOVWF	_timeNextMicroSec, B
	MOVLW	0x86
	BANKSEL	(_timeNextMicroSec + 1)
	MOVWF	(_timeNextMicroSec + 1), B
	MOVLW	0x01
	BANKSEL	(_timeNextMicroSec + 2)
	MOVWF	(_timeNextMicroSec + 2), B
	BANKSEL	(_timeNextMicroSec + 3)
	CLRF	(_timeNextMicroSec + 3), B
_00746_DS_:
	.line	717; carLog1.c	PORTBbits.RB4 = !PORTBbits.RB4;		// Flash orange LED
	CLRF	r0x00
	BTFSC	_PORTBbits, 4
	INCF	r0x00, F
	MOVF	r0x00, W
	BSF	STATUS, 0
	TSTFSZ	WREG
	BCF	STATUS, 0
	CLRF	r0x00
	RLCF	r0x00, F
	MOVF	r0x00, W
	ANDLW	0x01
	SWAPF	WREG, W
	MOVWF	PRODH
	MOVF	_PORTBbits, W
	ANDLW	0xef
	IORWF	PRODH, W
	MOVWF	_PORTBbits
	.line	720; carLog1.c	if(battery != PORTCbits.RC0){		// Save Values in EEPROM
	CLRF	r0x00
	BTFSC	_PORTCbits, 0
	INCF	r0x00, F
	MOVFF	_battery, r0x01
	MOVF	r0x01, W
	XORWF	r0x00, W
	BNZ	_00781_DS_
	BRA	_00699_DS_
_00781_DS_:
	BANKSEL	_battery
	.line	721; carLog1.c	if(battery){
	MOVF	_battery, W, B
	BZ	_00696_DS_
	BANKSEL	(_charge + 2)
	.line	722; carLog1.c	charge1 = charge >> 16;
	MOVF	(_charge + 2), W, B
	MOVWF	r0x00
	BANKSEL	(_charge + 3)
	MOVF	(_charge + 3), W, B
	MOVWF	r0x01
	CLRF	r0x02
	CLRF	r0x03
	MOVF	r0x00, W
	BANKSEL	_charge1
	MOVWF	_charge1, B
	MOVF	r0x01, W
	BANKSEL	(_charge1 + 1)
	MOVWF	(_charge1 + 1), B
	BANKSEL	(_charge1 + 1)
	.line	723; carLog1.c	eepromWrite16(EE_CHARGE1, charge1);
	MOVF	(_charge1 + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_charge1
	MOVF	_charge1, W, B
	MOVWF	POSTDEC1
	MOVLW	0x08
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	.line	724; carLog1.c	charge = (UInt32)charge0 << 16;
	MOVFF	_charge0, r0x00
	MOVFF	(_charge0 + 1), r0x01
	CLRF	r0x02
	CLRF	r0x03
	MOVF	r0x01, W
	BANKSEL	(_charge + 3)
	MOVWF	(_charge + 3), B
	MOVF	r0x00, W
	BANKSEL	(_charge + 2)
	MOVWF	(_charge + 2), B
	BANKSEL	_charge
	CLRF	_charge, B
	BANKSEL	(_charge + 1)
	CLRF	(_charge + 1), B
	BRA	_00697_DS_
_00696_DS_:
	BANKSEL	(_charge + 2)
	.line	727; carLog1.c	charge0 = charge >> 16;
	MOVF	(_charge + 2), W, B
	MOVWF	r0x00
	BANKSEL	(_charge + 3)
	MOVF	(_charge + 3), W, B
	MOVWF	r0x01
	CLRF	r0x02
	CLRF	r0x03
	MOVF	r0x00, W
	BANKSEL	_charge0
	MOVWF	_charge0, B
	MOVF	r0x01, W
	BANKSEL	(_charge0 + 1)
	MOVWF	(_charge0 + 1), B
	BANKSEL	(_charge0 + 1)
	.line	728; carLog1.c	eepromWrite16(EE_CHARGE0, charge0);
	MOVF	(_charge0 + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_charge0
	MOVF	_charge0, W, B
	MOVWF	POSTDEC1
	MOVLW	0x06
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	.line	729; carLog1.c	charge = (UInt32)charge1 << 16;
	MOVFF	_charge1, r0x00
	MOVFF	(_charge1 + 1), r0x01
	CLRF	r0x02
	CLRF	r0x03
	MOVF	r0x01, W
	BANKSEL	(_charge + 3)
	MOVWF	(_charge + 3), B
	MOVF	r0x00, W
	BANKSEL	(_charge + 2)
	MOVWF	(_charge + 2), B
	BANKSEL	_charge
	CLRF	_charge, B
	BANKSEL	(_charge + 1)
	CLRF	(_charge + 1), B
_00697_DS_:
	.line	731; carLog1.c	battery = PORTCbits.RC0;
	CLRF	r0x00
	BTFSC	_PORTCbits, 0
	INCF	r0x00, F
	MOVFF	r0x00, _battery
_00699_DS_:
	.line	735; carLog1.c	voltage = (adcRead(0) * 38) / 11;	// Calibrated for 33K/5K6 resistors
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_adcRead
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	INCF	FSR1L, F
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x26
	MOVWF	POSTDEC1
	CALL	__mulint
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVLW	0x04
	ADDWF	FSR1L, F
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0b
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	__divuint
	BANKSEL	_voltage
	MOVWF	_voltage, B
	MOVFF	PRODL, (_voltage + 1)
	MOVLW	0x04
	ADDWF	FSR1L, F
	BANKSEL	_voltageMin
	.line	738; carLog1.c	if(voltageMin == 0){
	MOVF	_voltageMin, W, B
	BANKSEL	(_voltageMin + 1)
	IORWF	(_voltageMin + 1), W, B
	BNZ	_00774_DS_
	.line	739; carLog1.c	if(voltage > 2000)
	MOVLW	0x07
	BANKSEL	(_voltage + 1)
	SUBWF	(_voltage + 1), W, B
	BNZ	_00782_DS_
	MOVLW	0xd1
	BANKSEL	_voltage
	SUBWF	_voltage, W, B
_00782_DS_:
	BNC	_00701_DS_
	.line	740; carLog1.c	voltageMin = 2100;
	MOVLW	0x34
	BANKSEL	_voltageMin
	MOVWF	_voltageMin, B
	MOVLW	0x08
	BANKSEL	(_voltageMin + 1)
	MOVWF	(_voltageMin + 1), B
	BRA	_00774_DS_
_00701_DS_:
	.line	742; carLog1.c	voltageMin = 1050;
	MOVLW	0x1a
	BANKSEL	_voltageMin
	MOVWF	_voltageMin, B
	MOVLW	0x04
	BANKSEL	(_voltageMin + 1)
	MOVWF	(_voltageMin + 1), B
_00774_DS_:
	.line	745; carLog1.c	for(i = 0; i < 10; i++){
	CLRF	r0x00
_00748_DS_:
	MOVLW	0x0a
	SUBWF	r0x00, W
	BTFSC	STATUS, 0
	BRA	_00751_DS_
_00705_DS_:
	.line	747; carLog1.c	while((time = timerGetMicroSec()) < timeNextMicroSec);		// Synchronise to first second, should look at RTC
	CALL	_timerGetMicroSec
	MOVWF	r0x01
	MOVFF	PRODL, r0x02
	MOVFF	PRODH, r0x03
	MOVFF	FSR0L, r0x04
	BANKSEL	(_timeNextMicroSec + 3)
	MOVF	(_timeNextMicroSec + 3), W, B
	SUBWF	r0x04, W
	BNZ	_00784_DS_
	BANKSEL	(_timeNextMicroSec + 2)
	MOVF	(_timeNextMicroSec + 2), W, B
	SUBWF	r0x03, W
	BNZ	_00784_DS_
	BANKSEL	(_timeNextMicroSec + 1)
	MOVF	(_timeNextMicroSec + 1), W, B
	SUBWF	r0x02, W
	BNZ	_00784_DS_
	BANKSEL	_timeNextMicroSec
	MOVF	_timeNextMicroSec, W, B
	SUBWF	r0x01, W
_00784_DS_:
	BNC	_00705_DS_
	.line	748; carLog1.c	timeNextMicroSec = timeNextMicroSec + 100000;
	MOVLW	0xa0
	BANKSEL	_timeNextMicroSec
	ADDWF	_timeNextMicroSec, F, B
	MOVLW	0x86
	BANKSEL	(_timeNextMicroSec + 1)
	ADDWFC	(_timeNextMicroSec + 1), F, B
	MOVLW	0x01
	BANKSEL	(_timeNextMicroSec + 2)
	ADDWFC	(_timeNextMicroSec + 2), F, B
	MOVLW	0x00
	BANKSEL	(_timeNextMicroSec + 3)
	ADDWFC	(_timeNextMicroSec + 3), F, B
	.line	751; carLog1.c	v = adcRead(1) - 500;			// Calibrated offset to read 0 when no current draw
	MOVLW	0x01
	MOVWF	POSTDEC1
	CALL	_adcRead
	MOVWF	r0x01
	MOVFF	PRODL, r0x02
	INCF	FSR1L, F
	MOVLW	0x0c
	ADDWF	r0x01, F
	MOVLW	0xfe
	ADDWFC	r0x02, F
	.line	752; carLog1.c	if(v > 511)				// Ignore negative charging currents
	MOVLW	0x02
	SUBWF	r0x02, W
	BNZ	_00785_DS_
	MOVLW	0x00
	SUBWF	r0x01, W
_00785_DS_:
	BNC	_00709_DS_
	.line	753; carLog1.c	v = 0;
	CLRF	r0x01
	CLRF	r0x02
_00709_DS_:
	.line	754; carLog1.c	current = (v * 121) / 6;		// Calibrated current setting
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x79
	MOVWF	POSTDEC1
	CALL	__mulint
	MOVWF	r0x01
	MOVFF	PRODL, r0x02
	MOVLW	0x04
	ADDWF	FSR1L, F
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x06
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	CALL	__divuint
	BANKSEL	_current
	MOVWF	_current, B
	MOVFF	PRODL, (_current + 1)
	MOVLW	0x04
	ADDWF	FSR1L, F
	BANKSEL	(_voltageMin + 1)
	.line	758; carLog1.c	if(voltage < voltageMin){
	MOVF	(_voltageMin + 1), W, B
	BANKSEL	(_voltage + 1)
	SUBWF	(_voltage + 1), W, B
	BNZ	_00786_DS_
	BANKSEL	_voltageMin
	MOVF	_voltageMin, W, B
	BANKSEL	_voltage
	SUBWF	_voltage, W, B
_00786_DS_:
	BC	_00715_DS_
	BANKSEL	_warnings
	.line	759; carLog1.c	warnings |= WARNING_BATTERY_LOW;
	BSF	_warnings, 0, B
	BANKSEL	_voltageCount
	.line	760; carLog1.c	voltageCount++;
	INCF	_voltageCount, F, B
	.line	761; carLog1.c	if(voltageCount > 40){
	MOVLW	0x29
	BANKSEL	_voltageCount
	SUBWF	_voltageCount, W, B
	BNC	_00716_DS_
	.line	762; carLog1.c	voltageWarning = 20;
	MOVLW	0x14
	BANKSEL	_voltageWarning
	MOVWF	_voltageWarning, B
	BANKSEL	_voltageCount
	.line	763; carLog1.c	voltageCount = 0;
	CLRF	_voltageCount, B
	BRA	_00716_DS_
_00715_DS_:
	BANKSEL	_voltageWarning
	.line	766; carLog1.c	else if(!voltageWarning){
	MOVF	_voltageWarning, W, B
	BNZ	_00716_DS_
	BANKSEL	_warnings
	.line	767; carLog1.c	warnings &= ~WARNING_BATTERY_LOW;
	BCF	_warnings, 0, B
	BANKSEL	_voltageCount
	.line	768; carLog1.c	voltageCount = 0;
	CLRF	_voltageCount, B
_00716_DS_:
	.line	773; carLog1.c	buttonsProcess();
	CALL	_buttonsProcess
	.line	775; carLog1.c	if(i == 1)
	MOVF	r0x00, W
	XORLW	0x01
	BNZ	_00737_DS_
	.line	776; carLog1.c	speedCalculate();
	CALL	_speedCalculate
	BRA	_00750_DS_
_00737_DS_:
	.line	777; carLog1.c	else if(i == 2)
	MOVF	r0x00, W
	XORLW	0x02
	BNZ	_00734_DS_
	.line	778; carLog1.c	displayWarnings();
	CALL	_displayWarnings
	BRA	_00750_DS_
_00734_DS_:
	.line	779; carLog1.c	else if(i == 3)
	MOVF	r0x00, W
	XORLW	0x03
	BNZ	_00731_DS_
	.line	780; carLog1.c	distanceCalculate();
	CALL	_distanceCalculate
	BRA	_00750_DS_
_00731_DS_:
	.line	781; carLog1.c	else if(i == 4)
	MOVF	r0x00, W
	XORLW	0x04
	BNZ	_00728_DS_
	.line	782; carLog1.c	chargeCalculate();			// Calculate battery charge
	CALL	_chargeCalculate
	BRA	_00750_DS_
_00728_DS_:
	.line	783; carLog1.c	else if(i == 5){
	MOVF	r0x00, W
	XORLW	0x05
	BZ	_00799_DS_
	BRA	_00725_DS_
_00799_DS_:
	.line	784; carLog1.c	t8 = eepromRead16(EE_LOG_SECONDS);
	MOVLW	0x0c
	MOVWF	POSTDEC1
	CALL	_eepromRead16
	MOVWF	r0x01
	MOVFF	PRODL, r0x02
	INCF	FSR1L, F
	.line	785; carLog1.c	if(((timeNextMicroSec / 1000000) % t8) == 0)
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0f
	MOVWF	POSTDEC1
	MOVLW	0x42
	MOVWF	POSTDEC1
	MOVLW	0x40
	MOVWF	POSTDEC1
	BANKSEL	(_timeNextMicroSec + 3)
	MOVF	(_timeNextMicroSec + 3), W, B
	MOVWF	POSTDEC1
	BANKSEL	(_timeNextMicroSec + 2)
	MOVF	(_timeNextMicroSec + 2), W, B
	MOVWF	POSTDEC1
	BANKSEL	(_timeNextMicroSec + 1)
	MOVF	(_timeNextMicroSec + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_timeNextMicroSec
	MOVF	_timeNextMicroSec, W, B
	MOVWF	POSTDEC1
	CALL	__divulong
	MOVWF	r0x02
	MOVFF	PRODL, r0x03
	MOVFF	PRODH, r0x04
	MOVFF	FSR0L, r0x05
	MOVLW	0x08
	ADDWF	FSR1L, F
	CLRF	r0x06
	CLRF	r0x07
	CLRF	r0x08
	MOVF	r0x08, W
	MOVWF	POSTDEC1
	MOVF	r0x07, W
	MOVWF	POSTDEC1
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	__modulong
	MOVWF	r0x01
	MOVFF	PRODL, r0x02
	MOVFF	PRODH, r0x03
	MOVFF	FSR0L, r0x04
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVF	r0x01, W
	IORWF	r0x02, W
	IORWF	r0x03, W
	IORWF	r0x04, W
	BNZ	_00750_DS_
	.line	786; carLog1.c	dataLog();
	CALL	_dataLog
	BRA	_00750_DS_
_00725_DS_:
	.line	788; carLog1.c	else if(i == 6)
	MOVF	r0x00, W
	XORLW	0x06
	BNZ	_00722_DS_
	.line	789; carLog1.c	serialProcess();
	CALL	_serialProcess
	BRA	_00750_DS_
_00722_DS_:
	.line	790; carLog1.c	else if(i == 9)
	MOVF	r0x00, W
	XORLW	0x09
	BNZ	_00750_DS_
	.line	791; carLog1.c	displayDo();
	CALL	_displayDo
_00750_DS_:
	.line	745; carLog1.c	for(i = 0; i < 10; i++){
	INCF	r0x00, F
	BRA	_00748_DS_
_00751_DS_:
	BANKSEL	_battery
	.line	801; carLog1.c	if(battery){
	MOVF	_battery, W, B
	BZ	_00740_DS_
	BANKSEL	(_charge + 2)
	.line	802; carLog1.c	charge1 = charge >> 16;
	MOVF	(_charge + 2), W, B
	MOVWF	r0x00
	BANKSEL	(_charge + 3)
	MOVF	(_charge + 3), W, B
	MOVWF	r0x01
	CLRF	r0x02
	CLRF	r0x03
	MOVF	r0x00, W
	BANKSEL	_charge1
	MOVWF	_charge1, B
	MOVF	r0x01, W
	BANKSEL	(_charge1 + 1)
	MOVWF	(_charge1 + 1), B
	BANKSEL	(_charge1 + 1)
	.line	803; carLog1.c	eepromWrite16(EE_CHARGE1, charge1);
	MOVF	(_charge1 + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_charge1
	MOVF	_charge1, W, B
	MOVWF	POSTDEC1
	MOVLW	0x08
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	BRA	_00741_DS_
_00740_DS_:
	BANKSEL	(_charge + 2)
	.line	806; carLog1.c	charge0 = charge >> 16;
	MOVF	(_charge + 2), W, B
	MOVWF	r0x00
	BANKSEL	(_charge + 3)
	MOVF	(_charge + 3), W, B
	MOVWF	r0x01
	CLRF	r0x02
	CLRF	r0x03
	MOVF	r0x00, W
	BANKSEL	_charge0
	MOVWF	_charge0, B
	MOVF	r0x01, W
	BANKSEL	(_charge0 + 1)
	MOVWF	(_charge0 + 1), B
	BANKSEL	(_charge0 + 1)
	.line	807; carLog1.c	eepromWrite16(EE_CHARGE0, charge0);
	MOVF	(_charge0 + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_charge0
	MOVF	_charge0, W, B
	MOVWF	POSTDEC1
	MOVLW	0x06
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
_00741_DS_:
	.line	811; carLog1.c	if((speed > 3400) && (current > 1200)){
	MOVLW	0x0d
	BANKSEL	(_speed + 1)
	SUBWF	(_speed + 1), W, B
	BNZ	_00804_DS_
	MOVLW	0x49
	BANKSEL	_speed
	SUBWF	_speed, W, B
_00804_DS_:
	BTFSS	STATUS, 0
	BRA	_00743_DS_
	BANKSEL	(_current + 1)
	MOVF	(_current + 1), W, B
	ADDLW	0x80
	ADDLW	0x7c
	BNZ	_00805_DS_
	MOVLW	0xb1
	BANKSEL	_current
	SUBWF	_current, W, B
_00805_DS_:
	BNC	_00743_DS_
	.line	812; carLog1.c	speedAvg += speed;
	MOVFF	_speed, r0x00
	MOVFF	(_speed + 1), r0x01
	CLRF	r0x02
	CLRF	r0x03
	MOVF	r0x00, W
	BANKSEL	_speedAvg
	ADDWF	_speedAvg, F, B
	MOVF	r0x01, W
	BANKSEL	(_speedAvg + 1)
	ADDWFC	(_speedAvg + 1), F, B
	MOVF	r0x02, W
	BANKSEL	(_speedAvg + 2)
	ADDWFC	(_speedAvg + 2), F, B
	MOVF	r0x03, W
	BANKSEL	(_speedAvg + 3)
	ADDWFC	(_speedAvg + 3), F, B
	.line	813; carLog1.c	currentAvg += current;
	MOVFF	_current, r0x00
	MOVFF	(_current + 1), r0x01
	CLRF	WREG
	BANKSEL	(_current + 1)
	BTFSC	(_current + 1), 7
	MOVLW	0xff
	MOVWF	r0x02
	MOVWF	r0x03
	MOVF	r0x00, W
	BANKSEL	_currentAvg
	ADDWF	_currentAvg, F, B
	MOVF	r0x01, W
	BANKSEL	(_currentAvg + 1)
	ADDWFC	(_currentAvg + 1), F, B
	MOVF	r0x02, W
	BANKSEL	(_currentAvg + 2)
	ADDWFC	(_currentAvg + 2), F, B
	MOVF	r0x03, W
	BANKSEL	(_currentAvg + 3)
	ADDWFC	(_currentAvg + 3), F, B
	BANKSEL	_currentAvgNum
	.line	814; carLog1.c	currentAvgNum++;
	INCF	_currentAvgNum, F, B
	BNC	_10690_DS_
	BANKSEL	(_currentAvgNum + 1)
	INCF	(_currentAvgNum + 1), F, B
_10690_DS_:
_00743_DS_:
	clrwdt 
	GOTO	_00746_DS_
	RETURN	

; ; Starting pCode block
S_carLog1__isr	code
_isr:
	.line	575; carLog1.c	void isr(void) interrupt 1 {
	MOVFF	WREG, POSTDEC1
	MOVFF	STATUS, POSTDEC1
	MOVFF	BSR, POSTDEC1
	MOVFF	PRODL, POSTDEC1
	MOVFF	PRODH, POSTDEC1
	MOVFF	FSR0L, POSTDEC1
	MOVFF	FSR0H, POSTDEC1
	MOVFF	PCLATH, POSTDEC1
	MOVFF	PCLATU, POSTDEC1
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	577; carLog1.c	if(PIR2bits.TMR3IF){
	BTFSS	_PIR2bits, 1
	BRA	_00682_DS_
	.line	578; carLog1.c	timerTick();
	CALL	_timerTick
	.line	580; carLog1.c	PIR2bits.TMR3IF = 0;			// Clear timer interrupt flag
	BCF	_PIR2bits, 1
_00682_DS_:
	.line	582; carLog1.c	if(INTCONbits.INT0IF){
	BTFSS	_INTCONbits, 1
	BRA	_00685_DS_
	.line	584; carLog1.c	speedInterrupt();
	CALL	_speedInterrupt
	.line	585; carLog1.c	INTCONbits.INT0IF = 0;
	BCF	_INTCONbits, 1
_00685_DS_:
	MOVFF	PREINC1, FSR2L
	MOVFF	PREINC1, PCLATU
	MOVFF	PREINC1, PCLATH
	MOVFF	PREINC1, FSR0H
	MOVFF	PREINC1, FSR0L
	MOVFF	PREINC1, PRODH
	MOVFF	PREINC1, PRODL
	MOVFF	PREINC1, BSR
	MOVFF	PREINC1, STATUS
	MOVFF	PREINC1, WREG
	RETFIE	

; ; Starting pCode block
S_carLog1__bootTest	code
_bootTest:
	.line	568; carLog1.c	void bootTest(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	569; carLog1.c	lcdWriteStr(0, 0, "Car X");
	MOVLW	UPPER(__str_10)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_10)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_10)
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
	.line	570; carLog1.c	lcdWriteStr(0, 1, "Ready to Roll ....");
	MOVLW	UPPER(__str_11)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_11)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_11)
	MOVWF	POSTDEC1
	MOVLW	0x01
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
	.line	571; carLog1.c	delayMs(2000);
	MOVLW	0x07
	MOVWF	POSTDEC1
	MOVLW	0xd0
	MOVWF	POSTDEC1
	CALL	_delayMs
	MOVLW	0x02
	ADDWF	FSR1L, F
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__buttonsProcess	code
_buttonsProcess:
	.line	529; carLog1.c	void buttonsProcess(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	.line	534; carLog1.c	b = (adcRead(9) + 32) / 64;
	MOVLW	0x09
	MOVWF	POSTDEC1
	CALL	_adcRead
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	INCF	FSR1L, F
	MOVLW	0x20
	ADDWF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	RLCF	r0x00, F
	RLCF	r0x01, F
	RLCF	r0x00, F
	RLCF	r0x01, F
	RLCF	r0x00, W
	ANDLW	0x03
	XORWF	r0x01, W
	XORWF	r0x01, F
	XORWF	r0x01, W
	MOVWF	r0x00
	.line	536; carLog1.c	if(b && (b != buttonsLast)){
	MOVF	r0x00, W
	BTFSC	STATUS, 2
	BRA	_00642_DS_
	MOVFF	r0x00, r0x01
	CLRF	r0x02
	MOVF	r0x01, W
	BANKSEL	_buttonsLast
	XORWF	_buttonsLast, W, B
	BNZ	_00657_DS_
	MOVF	r0x02, W
	BANKSEL	(_buttonsLast + 1)
	XORWF	(_buttonsLast + 1), W, B
	BNZ	_00657_DS_
	BRA	_00642_DS_
_00657_DS_:
	.line	537; carLog1.c	if(b == 10){
	MOVF	r0x00, W
	XORLW	0x0a
	BNZ	_00639_DS_
	.line	538; carLog1.c	reset();
	CALL	_reset
	BRA	_00642_DS_
_00639_DS_:
	.line	540; carLog1.c	else if(b == 1){
	MOVF	r0x00, W
	XORLW	0x01
	BNZ	_00636_DS_
_00661_DS_:
	BANKSEL	_displayMode
	.line	541; carLog1.c	displayMode++;
	INCF	_displayMode, F, B
	.line	542; carLog1.c	if(displayMode > 3)
	MOVLW	0x04
	BANKSEL	_displayMode
	SUBWF	_displayMode, W, B
	BTFSS	STATUS, 0
	BRA	_00642_DS_
	BANKSEL	_displayMode
	.line	543; carLog1.c	displayMode = 0;
	CLRF	_displayMode, B
	BRA	_00642_DS_
_00636_DS_:
	.line	545; carLog1.c	else if(b == 0x02){
	MOVF	r0x00, W
	XORLW	0x02
	BNZ	_00633_DS_
_00664_DS_:
	BANKSEL	_displayMode
	.line	546; carLog1.c	if(displayMode == 3){
	MOVF	_displayMode, W, B
	XORLW	0x03
	BZ	_00666_DS_
	BRA	_00642_DS_
_00666_DS_:
	.line	547; carLog1.c	t = eepromRead16(EE_LOG_SECONDS);
	MOVLW	0x0c
	MOVWF	POSTDEC1
	CALL	_eepromRead16
	MOVWF	r0x01
	MOVFF	PRODL, r0x02
	INCF	FSR1L, F
	.line	548; carLog1.c	t += 1;
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	549; carLog1.c	eepromWrite16(EE_LOG_SECONDS, t);
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVLW	0x0c
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	BRA	_00642_DS_
_00633_DS_:
	.line	552; carLog1.c	else if(b == 0x04){
	MOVF	r0x00, W
	XORLW	0x04
	BNZ	_00642_DS_
_00668_DS_:
	BANKSEL	_displayMode
	.line	553; carLog1.c	if(displayMode == 3){
	MOVF	_displayMode, W, B
	XORLW	0x03
	BNZ	_00642_DS_
	.line	554; carLog1.c	t = eepromRead16(EE_LOG_SECONDS);
	MOVLW	0x0c
	MOVWF	POSTDEC1
	CALL	_eepromRead16
	MOVWF	r0x01
	MOVFF	PRODL, r0x02
	INCF	FSR1L, F
	.line	555; carLog1.c	t -= 1;
	MOVLW	0xff
	ADDWF	r0x01, F
	BTFSS	STATUS, 0
	DECF	r0x02, F
	.line	556; carLog1.c	if(t < 1)
	MOVLW	0x00
	SUBWF	r0x02, W
	BNZ	_00671_DS_
	MOVLW	0x01
	SUBWF	r0x01, W
_00671_DS_:
	BC	_00626_DS_
	.line	557; carLog1.c	t = 1;
	MOVLW	0x01
	MOVWF	r0x01
	CLRF	r0x02
_00626_DS_:
	.line	558; carLog1.c	eepromWrite16(EE_LOG_SECONDS, t);
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVLW	0x0c
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
_00642_DS_:
	.line	564; carLog1.c	buttonsLast = b;
	MOVFF	r0x00, _buttonsLast
	BANKSEL	(_buttonsLast + 1)
	CLRF	(_buttonsLast + 1), B
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__serialProcess	code
_serialProcess:
	.line	502; carLog1.c	void serialProcess(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	.line	505; carLog1.c	if(usartRxRdy()){
	CALL	_usartRxRdy
	MOVWF	r0x00
	MOVF	r0x00, W
	BZ	_00594_DS_
	.line	506; carLog1.c	c = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x00
	.line	507; carLog1.c	switch(c){
	MOVF	r0x00, W
	XORLW	0x52
	BZ	_00590_DS_
	MOVF	r0x00, W
	XORLW	0x63
	BZ	_00587_DS_
	MOVF	r0x00, W
	XORLW	0x64
	BZ	_00588_DS_
	MOVF	r0x00, W
	XORLW	0x6d
	BZ	_00583_DS_
	MOVF	r0x00, W
	XORLW	0x72
	BZ	_00586_DS_
	MOVF	r0x00, W
	XORLW	0x74
	BZ	_00589_DS_
	BRA	_00594_DS_
_00583_DS_:
	BANKSEL	_displayMode
	.line	509; carLog1.c	displayMode++;
	INCF	_displayMode, F, B
	.line	510; carLog1.c	if(displayMode > 3)
	MOVLW	0x04
	BANKSEL	_displayMode
	SUBWF	_displayMode, W, B
	BNC	_00594_DS_
	BANKSEL	_displayMode
	.line	511; carLog1.c	displayMode = 0;
	CLRF	_displayMode, B
	.line	512; carLog1.c	break;
	BRA	_00594_DS_
_00586_DS_:
	.line	513; carLog1.c	case 'r':	mode = 1;	break;
	MOVLW	0x01
	BANKSEL	_mode
	MOVWF	_mode, B
	BRA	_00594_DS_
_00587_DS_:
	.line	514; carLog1.c	case 'c':	mode = 3;	break;
	MOVLW	0x03
	BANKSEL	_mode
	MOVWF	_mode, B
	BRA	_00594_DS_
_00588_DS_:
	BANKSEL	_mode
	.line	516; carLog1.c	mode = 0;
	CLRF	_mode, B
	.line	517; carLog1.c	dataDump();
	CALL	_dataDump
	.line	518; carLog1.c	break;
	BRA	_00594_DS_
_00589_DS_:
	.line	520; carLog1.c	serialSetTime();
	CALL	_serialSetTime
	.line	521; carLog1.c	break;
	BRA	_00594_DS_
_00590_DS_:
	.line	523; carLog1.c	reset();
	CALL	_reset
_00594_DS_:
	.line	525; carLog1.c	}
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__reset	code
_reset:
	.line	487; carLog1.c	void reset(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	488; carLog1.c	charge0 = 1000;
	MOVLW	0xe8
	BANKSEL	_charge0
	MOVWF	_charge0, B
	MOVLW	0x03
	BANKSEL	(_charge0 + 1)
	MOVWF	(_charge0 + 1), B
	.line	489; carLog1.c	charge1 = 1000;
	MOVLW	0xe8
	BANKSEL	_charge1
	MOVWF	_charge1, B
	MOVLW	0x03
	BANKSEL	(_charge1 + 1)
	MOVWF	(_charge1 + 1), B
	BANKSEL	_charge
	.line	490; carLog1.c	charge = (UInt32)charge0 << 16;
	CLRF	_charge, B
	BANKSEL	(_charge + 1)
	CLRF	(_charge + 1), B
	MOVLW	0xe8
	BANKSEL	(_charge + 2)
	MOVWF	(_charge + 2), B
	MOVLW	0x03
	BANKSEL	(_charge + 3)
	MOVWF	(_charge + 3), B
	BANKSEL	_distanceTicks
	.line	491; carLog1.c	distanceTicks = 0;
	CLRF	_distanceTicks, B
	BANKSEL	(_distanceTicks + 1)
	CLRF	(_distanceTicks + 1), B
	BANKSEL	(_distanceTicks + 2)
	CLRF	(_distanceTicks + 2), B
	BANKSEL	(_distanceTicks + 3)
	CLRF	(_distanceTicks + 3), B
	BANKSEL	_speedPeak
	.line	492; carLog1.c	speedPeak = 0;
	CLRF	_speedPeak, B
	BANKSEL	(_speedPeak + 1)
	CLRF	(_speedPeak + 1), B
	BANKSEL	_speedPeakCurrent
	.line	493; carLog1.c	speedPeakCurrent = 0;
	CLRF	_speedPeakCurrent, B
	BANKSEL	(_speedPeakCurrent + 1)
	CLRF	(_speedPeakCurrent + 1), B
	.line	495; carLog1.c	eepromWrite16(EE_LOGADDRESS, 0);
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	BANKSEL	(_charge0 + 1)
	.line	496; carLog1.c	eepromWrite16(EE_CHARGE0, charge0);
	MOVF	(_charge0 + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_charge0
	MOVF	_charge0, W, B
	MOVWF	POSTDEC1
	MOVLW	0x06
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	BANKSEL	(_charge1 + 1)
	.line	497; carLog1.c	eepromWrite16(EE_CHARGE1, charge1);
	MOVF	(_charge1 + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_charge1
	MOVF	_charge1, W, B
	MOVWF	POSTDEC1
	MOVLW	0x08
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	.line	498; carLog1.c	eepromWrite16(EE_LOG_SECONDS, OPT_LOG_SECONDS);
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x08
	MOVWF	POSTDEC1
	MOVLW	0x0c
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__serialSetTime	code
_serialSetTime:
	.line	459; carLog1.c	void serialSetTime(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	.line	461; carLog1.c	char*	p = buf;
	MOVLW	HIGH(_serialSetTime_buf_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_serialSetTime_buf_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	.line	463; carLog1.c	usartPutc('t');
	MOVLW	0x74
	MOVWF	POSTDEC1
	CALL	_usartPutc
	INCF	FSR1L, F
	clrwdt 
	.line	465; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	466; carLog1.c	usartPutc('t');
	MOVLW	0x74
	MOVWF	POSTDEC1
	CALL	_usartPutc
	INCF	FSR1L, F
	.line	467; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	468; carLog1.c	usartPutc('t');
	MOVLW	0x74
	MOVWF	POSTDEC1
	CALL	_usartPutc
	INCF	FSR1L, F
	.line	469; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	470; carLog1.c	usartPutc('t');
	MOVLW	0x74
	MOVWF	POSTDEC1
	CALL	_usartPutc
	INCF	FSR1L, F
	.line	471; carLog1.c	*p++ = 0x03;
	MOVLW	0x03
	MOVWF	POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	clrwdt 
	.line	474; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	475; carLog1.c	usartPutc('t');
	MOVLW	0x74
	MOVWF	POSTDEC1
	CALL	_usartPutc
	INCF	FSR1L, F
	.line	476; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	477; carLog1.c	usartPutc('t');
	MOVLW	0x74
	MOVWF	POSTDEC1
	CALL	_usartPutc
	INCF	FSR1L, F
	.line	478; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	479; carLog1.c	usartPutc('t');
	MOVLW	0x74
	MOVWF	POSTDEC1
	CALL	_usartPutc
	INCF	FSR1L, F
	.line	480; carLog1.c	*p++ = 0x10;
	MOVLW	0x10
	MOVWF	POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	clrwdt 
	.line	483; carLog1.c	i2cWrite(0xD0, 0, I2cSlow8, buf, 8);
	MOVLW	HIGH(_serialSetTime_buf_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_serialSetTime_buf_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVLW	0x08
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0xd0
	MOVWF	POSTDEC1
	CALL	_i2cWrite
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__dataDump	code
_dataDump:
	.line	413; carLog1.c	void dataDump(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVFF	r0x06, POSTDEC1
	.line	419; carLog1.c	char*	p = (char*)&block;
	MOVLW	HIGH(_dataDump_block_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_dataDump_block_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	.line	421; carLog1.c	usartPutc('d');
	MOVLW	0x64
	MOVWF	POSTDEC1
	CALL	_usartPutc
	INCF	FSR1L, F
	.line	424; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	425; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	426; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	427; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	.line	429; carLog1.c	p = (char*)&num;
	MOVLW	HIGH(_dataDump_num_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_dataDump_num_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	.line	430; carLog1.c	*p++ = usartGetc();
	MOVFF	r0x00, r0x03
	MOVFF	r0x01, r0x04
	MOVFF	r0x02, r0x05
	CALL	_usartGetc
	MOVWF	r0x06
	MOVFF	r0x06, POSTDEC1
	MOVFF	r0x03, FSR0L
	MOVFF	r0x04, PRODL
	MOVF	r0x05, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	431; carLog1.c	*p++ = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	.line	433; carLog1.c	for(i = 0; i < num; i++){
	CLRF	r0x00
	CLRF	r0x01
_00554_DS_:
	BANKSEL	(_dataDump_num_1_1 + 1)
	MOVF	(_dataDump_num_1_1 + 1), W, B
	SUBWF	r0x01, W
	BNZ	_00565_DS_
	BANKSEL	_dataDump_num_1_1
	MOVF	_dataDump_num_1_1, W, B
	SUBWF	r0x00, W
_00565_DS_:
	BTFSC	STATUS, 0
	BRA	_00558_DS_
	.line	434; carLog1.c	c = usartGetc();
	CALL	_usartGetc
	MOVWF	r0x02
	.line	435; carLog1.c	if(c == 'r')
	MOVF	r0x02, W
	XORLW	0x72
	BNZ	_00567_DS_
	BRA	_00558_DS_
_00567_DS_:
	BANKSEL	(_dataDump_block_1_1 + 3)
	.line	446; carLog1.c	i2cRead(chipAdd, block * 32, I2cFast16, buffer, 32);
	MOVF	(_dataDump_block_1_1 + 3), W, B
	MOVWF	POSTDEC1
	BANKSEL	(_dataDump_block_1_1 + 2)
	MOVF	(_dataDump_block_1_1 + 2), W, B
	MOVWF	POSTDEC1
	BANKSEL	(_dataDump_block_1_1 + 1)
	MOVF	(_dataDump_block_1_1 + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_dataDump_block_1_1
	MOVF	_dataDump_block_1_1, W, B
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x20
	MOVWF	POSTDEC1
	CALL	__mullong
	MOVWF	r0x02
	MOVFF	PRODL, r0x03
	MOVFF	PRODH, r0x04
	MOVFF	FSR0L, r0x05
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVLW	HIGH(_buffer)
	MOVWF	r0x05
	MOVLW	LOW(_buffer)
	MOVWF	r0x04
	MOVLW	0x80
	MOVWF	r0x06
	MOVLW	0x20
	MOVWF	POSTDEC1
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVLW	0x03
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVLW	0xa0
	MOVWF	POSTDEC1
	CALL	_i2cRead
	MOVLW	0x08
	ADDWF	FSR1L, F
	.line	447; carLog1.c	usartWrite("AA", 2);
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVLW	UPPER(__str_9)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_9)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_9)
	MOVWF	POSTDEC1
	CALL	_usartWrite
	MOVLW	0x04
	ADDWF	FSR1L, F
	.line	448; carLog1.c	usartWrite(buffer, 32);
	MOVLW	HIGH(_buffer)
	MOVWF	r0x03
	MOVLW	LOW(_buffer)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVLW	0x20
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_usartWrite
	MOVLW	0x04
	ADDWF	FSR1L, F
	.line	449; carLog1.c	block++;
	MOVFF	_dataDump_block_1_1, r0x02
	MOVFF	(_dataDump_block_1_1 + 1), r0x03
	MOVFF	(_dataDump_block_1_1 + 2), r0x04
	MOVFF	(_dataDump_block_1_1 + 3), r0x05
	MOVF	r0x02, W
	ADDLW	0x01
	BANKSEL	_dataDump_block_1_1
	MOVWF	_dataDump_block_1_1, B
	MOVLW	0x00
	ADDWFC	r0x03, W
	BANKSEL	(_dataDump_block_1_1 + 1)
	MOVWF	(_dataDump_block_1_1 + 1), B
	MOVLW	0x00
	ADDWFC	r0x04, W
	BANKSEL	(_dataDump_block_1_1 + 2)
	MOVWF	(_dataDump_block_1_1 + 2), B
	MOVLW	0x00
	ADDWFC	r0x05, W
	BANKSEL	(_dataDump_block_1_1 + 3)
	MOVWF	(_dataDump_block_1_1 + 3), B
	.line	450; carLog1.c	if(block >= LOG_END)
	MOVLW	0x00
	BANKSEL	(_dataDump_block_1_1 + 3)
	SUBWF	(_dataDump_block_1_1 + 3), W, B
	BNZ	_00568_DS_
	MOVLW	0x00
	BANKSEL	(_dataDump_block_1_1 + 2)
	SUBWF	(_dataDump_block_1_1 + 2), W, B
	BNZ	_00568_DS_
	MOVLW	0x04
	BANKSEL	(_dataDump_block_1_1 + 1)
	SUBWF	(_dataDump_block_1_1 + 1), W, B
	BNZ	_00568_DS_
	MOVLW	0x00
	BANKSEL	_dataDump_block_1_1
	SUBWF	_dataDump_block_1_1, W, B
_00568_DS_:
	BNC	_00553_DS_
	BANKSEL	_dataDump_block_1_1
	.line	451; carLog1.c	block = 0;
	CLRF	_dataDump_block_1_1, B
	BANKSEL	(_dataDump_block_1_1 + 1)
	CLRF	(_dataDump_block_1_1 + 1), B
	BANKSEL	(_dataDump_block_1_1 + 2)
	CLRF	(_dataDump_block_1_1 + 2), B
	BANKSEL	(_dataDump_block_1_1 + 3)
	CLRF	(_dataDump_block_1_1 + 3), B
_00553_DS_:
	clrwdt 
	.line	433; carLog1.c	for(i = 0; i < num; i++){
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BRA	_00554_DS_
_00558_DS_:
	MOVFF	PREINC1, r0x06
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__dataLog	code
_dataLog:
	.line	380; carLog1.c	void dataLog(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVFF	r0x06, POSTDEC1
	.line	384; carLog1.c	logAddress = eepromRead16(EE_LOGADDRESS);
	MOVLW	0x02
	MOVWF	POSTDEC1
	CALL	_eepromRead16
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	INCF	FSR1L, F
	.line	386; carLog1.c	if(logAddress >= LOG_END)
	MOVLW	0x04
	SUBWF	r0x01, W
	BNZ	_00544_DS_
	MOVLW	0x00
	SUBWF	r0x00, W
_00544_DS_:
	BNC	_00537_DS_
	.line	387; carLog1.c	logAddress = 0;
	CLRF	r0x00
	CLRF	r0x01
_00537_DS_:
	.line	390; carLog1.c	dataLoad();
	CALL	_dataLoad
	.line	398; carLog1.c	i2cWrite(chipAdd, logAddress * 32, I2cFast16, buffer, 32);
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x20
	MOVWF	POSTDEC1
	CALL	__mulint
	MOVWF	r0x02
	MOVFF	PRODL, r0x03
	MOVLW	0x04
	ADDWF	FSR1L, F
	MOVLW	HIGH(_buffer)
	MOVWF	r0x05
	MOVLW	LOW(_buffer)
	MOVWF	r0x04
	MOVLW	0x80
	MOVWF	r0x06
	MOVLW	0x20
	MOVWF	POSTDEC1
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVLW	0x03
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVLW	0xa0
	MOVWF	POSTDEC1
	CALL	_i2cWrite
	MOVLW	0x08
	ADDWF	FSR1L, F
	BANKSEL	_mode
	.line	400; carLog1.c	if(mode & 0x02){
	BTFSS	_mode, 1, B
	BRA	_00539_DS_
	.line	402; carLog1.c	usartWrite("AA", 2);
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVLW	UPPER(__str_9)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_9)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_9)
	MOVWF	POSTDEC1
	CALL	_usartWrite
	MOVLW	0x04
	ADDWF	FSR1L, F
	.line	403; carLog1.c	usartWrite(buffer, 32);
	MOVLW	HIGH(_buffer)
	MOVWF	r0x03
	MOVLW	LOW(_buffer)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVLW	0x20
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_usartWrite
	MOVLW	0x04
	ADDWF	FSR1L, F
_00539_DS_:
	.line	407; carLog1.c	logAddress++;
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	.line	409; carLog1.c	eepromWrite16(EE_LOGADDRESS, logAddress);
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	MOVFF	PREINC1, r0x06
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__dataLoad	code
_dataLoad:
	.line	250; carLog1.c	void dataLoad(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	.line	254; carLog1.c	i2cRead(0xD0, 0, I2cSlow8, buffer, 3);
	MOVLW	HIGH(_buffer)
	MOVWF	r0x01
	MOVLW	LOW(_buffer)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVLW	0x03
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0xd0
	MOVWF	POSTDEC1
	CALL	_i2cRead
	MOVLW	0x08
	ADDWF	FSR1L, F
	.line	255; carLog1.c	i2cRead(0xD0, 4, I2cSlow8, &buffer[3], 3);
	MOVLW	HIGH(_buffer + 3)
	MOVWF	r0x01
	MOVLW	LOW(_buffer + 3)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVLW	0x03
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x04
	MOVWF	POSTDEC1
	MOVLW	0xd0
	MOVWF	POSTDEC1
	CALL	_i2cRead
	MOVLW	0x08
	ADDWF	FSR1L, F
	.line	257; carLog1.c	p = &buffer[6];
	MOVLW	HIGH(_buffer + 6)
	MOVWF	r0x01
	MOVLW	LOW(_buffer + 6)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	BANKSEL	_voltage
	.line	258; carLog1.c	*p++ = voltage;				// 0
	MOVF	_voltage, W, B
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	(_voltage + 1)
	.line	259; carLog1.c	*p++ = voltage >> 8;
	MOVF	(_voltage + 1), W, B
	MOVWF	r0x03
	CLRF	r0x04
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	_current
	.line	260; carLog1.c	*p++ = current;
	MOVF	_current, W, B
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	(_current + 1)
	.line	261; carLog1.c	*p++ = current >> 8;
	MOVF	(_current + 1), W, B
	MOVWF	r0x03
	CLRF	r0x04
	BTFSC	r0x03, 7
	SETF	r0x04
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	_charge0
	.line	262; carLog1.c	*p++ = charge0;
	MOVF	_charge0, W, B
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	(_charge0 + 1)
	.line	263; carLog1.c	*p++ = charge0 >> 8;
	MOVF	(_charge0 + 1), W, B
	MOVWF	r0x03
	CLRF	r0x04
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	_charge1
	.line	264; carLog1.c	*p++ = charge1;
	MOVF	_charge1, W, B
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	(_charge1 + 1)
	.line	265; carLog1.c	*p++ = charge1 >> 8;
	MOVF	(_charge1 + 1), W, B
	MOVWF	r0x03
	CLRF	r0x04
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	_speed
	.line	266; carLog1.c	*p++ = speed;
	MOVF	_speed, W, B
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	(_speed + 1)
	.line	267; carLog1.c	*p++ = speed >> 8;
	MOVF	(_speed + 1), W, B
	MOVWF	r0x03
	CLRF	r0x04
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	_distance
	.line	268; carLog1.c	*p++ = distance;
	MOVF	_distance, W, B
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	(_distance + 1)
	.line	269; carLog1.c	*p++ = distance >> 8;
	MOVF	(_distance + 1), W, B
	MOVWF	r0x03
	CLRF	r0x04
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	270; carLog1.c	*p++ = 0;				// Throttle
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	271; carLog1.c	*p++ = 0;
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BANKSEL	_temperature
	.line	272; carLog1.c	*p++ = temperature;
	MOVF	_temperature, W, B
	MOVWF	r0x03
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	273; carLog1.c	*p++ = battery;
	MOVFF	_battery, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	274; carLog1.c	*p++ = 0;				// Motor Speed
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	275; carLog1.c	*p++ = 0;				// 17
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	276; carLog1.c	t = eepromRead16(EE_CURRENT_AVG);
	MOVLW	0x0a
	MOVWF	POSTDEC1
	CALL	_eepromRead16
	MOVWF	r0x03
	MOVFF	PRODL, r0x04
	INCF	FSR1L, F
	.line	277; carLog1.c	*p++ = t;
	MOVF	r0x03, W
	MOVWF	r0x05
	MOVFF	r0x05, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	278; carLog1.c	*p++ = t >> 8;				// 19
	MOVF	r0x04, W
	MOVWF	r0x03
	CLRF	r0x04
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__chargeCalculate	code
_chargeCalculate:
	.line	234; carLog1.c	void chargeCalculate(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	.line	238; carLog1.c	c = current + current / 4;
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x04
	MOVWF	POSTDEC1
	BANKSEL	(_current + 1)
	MOVF	(_current + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_current
	MOVF	_current, W, B
	MOVWF	POSTDEC1
	CALL	__divsint
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVLW	0x04
	ADDWF	FSR1L, F
	BANKSEL	_current
	MOVF	_current, W, B
	ADDWF	r0x00, F
	BANKSEL	(_current + 1)
	MOVF	(_current + 1), W, B
	ADDWFC	r0x01, F
	.line	239; carLog1.c	c = (c * 12) / 4;
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0c
	MOVWF	POSTDEC1
	CALL	__mulint
	MOVWF	r0x02
	MOVFF	PRODL, r0x03
	MOVLW	0x04
	ADDWF	FSR1L, F
	BCF	STATUS, 0
	RRCF	r0x03, W
	MOVWF	r0x01
	RRCF	r0x02, W
	MOVWF	r0x00
	BCF	STATUS, 0
	RRCF	r0x01, F
	RRCF	r0x00, F
	.line	241; carLog1.c	if(charge > c){
	CLRF	r0x02
	CLRF	r0x03
	BANKSEL	(_charge + 3)
	MOVF	(_charge + 3), W, B
	SUBWF	r0x03, W
	BNZ	_00526_DS_
	BANKSEL	(_charge + 2)
	MOVF	(_charge + 2), W, B
	SUBWF	r0x02, W
	BNZ	_00526_DS_
	BANKSEL	(_charge + 1)
	MOVF	(_charge + 1), W, B
	SUBWF	r0x01, W
	BNZ	_00526_DS_
	BANKSEL	_charge
	MOVF	_charge, W, B
	SUBWF	r0x00, W
_00526_DS_:
	BC	_00521_DS_
	.line	242; carLog1.c	charge -= c;
	MOVF	r0x00, W
	BANKSEL	_charge
	SUBWF	_charge, F, B
	MOVF	r0x01, W
	BANKSEL	(_charge + 1)
	SUBWFB	(_charge + 1), F, B
	MOVF	r0x02, W
	BANKSEL	(_charge + 2)
	SUBWFB	(_charge + 2), F, B
	MOVF	r0x03, W
	BANKSEL	(_charge + 3)
	SUBWFB	(_charge + 3), F, B
	BRA	_00523_DS_
_00521_DS_:
	BANKSEL	_charge
	.line	245; carLog1.c	charge = 0;
	CLRF	_charge, B
	BANKSEL	(_charge + 1)
	CLRF	(_charge + 1), B
	BANKSEL	(_charge + 2)
	CLRF	(_charge + 2), B
	BANKSEL	(_charge + 3)
	CLRF	(_charge + 3), B
_00523_DS_:
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__distanceCalculate	code
_distanceCalculate:
	.line	230; carLog1.c	void distanceCalculate(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	.line	231; carLog1.c	distance = ((distanceTicks / 10) * wheelCircumference) / 100;
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0a
	MOVWF	POSTDEC1
	BANKSEL	(_distanceTicks + 3)
	MOVF	(_distanceTicks + 3), W, B
	MOVWF	POSTDEC1
	BANKSEL	(_distanceTicks + 2)
	MOVF	(_distanceTicks + 2), W, B
	MOVWF	POSTDEC1
	BANKSEL	(_distanceTicks + 1)
	MOVF	(_distanceTicks + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_distanceTicks
	MOVF	_distanceTicks, W, B
	MOVWF	POSTDEC1
	CALL	__divulong
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVFF	PRODH, r0x02
	MOVFF	FSR0L, r0x03
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x92
	MOVWF	POSTDEC1
	CALL	__mullong
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVFF	PRODH, r0x02
	MOVFF	FSR0L, r0x03
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x64
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	__divulong
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVFF	PRODH, r0x02
	MOVFF	FSR0L, r0x03
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVF	r0x00, W
	BANKSEL	_distance
	MOVWF	_distance, B
	MOVF	r0x01, W
	BANKSEL	(_distance + 1)
	MOVWF	(_distance + 1), B
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__speedCalculate	code
_speedCalculate:
	.line	203; carLog1.c	void speedCalculate(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	BANKSEL	_speedTickCount
	.line	206; carLog1.c	if(speedTickCount){
	MOVF	_speedTickCount, W, B
	BANKSEL	(_speedTickCount + 1)
	IORWF	(_speedTickCount + 1), W, B
	BTFSC	STATUS, 2
	BRA	_00499_DS_
	BANKSEL	_speedTickSTime
	.line	212; carLog1.c	v = (speedTickETime - speedTickSTime) / 10;	// The time in ms / 10
	MOVF	_speedTickSTime, W, B
	BANKSEL	_speedTickETime
	SUBWF	_speedTickETime, W, B
	MOVWF	r0x00
	BANKSEL	(_speedTickSTime + 1)
	MOVF	(_speedTickSTime + 1), W, B
	BANKSEL	(_speedTickETime + 1)
	SUBWFB	(_speedTickETime + 1), W, B
	MOVWF	r0x01
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0a
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	__divuint
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVLW	0x04
	ADDWF	FSR1L, F
	BANKSEL	(_speedTickCount + 1)
	.line	213; carLog1.c	v1 = speedTickCount * wheelCircumference * 10;	// Km/s
	MOVF	(_speedTickCount + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_speedTickCount
	MOVF	_speedTickCount, W, B
	MOVWF	POSTDEC1
	MOVLW	0x05
	MOVWF	POSTDEC1
	MOVLW	0xb4
	MOVWF	POSTDEC1
	CALL	__mulint
	MOVWF	r0x02
	MOVFF	PRODL, r0x03
	MOVLW	0x04
	ADDWF	FSR1L, F
	.line	214; carLog1.c	speed = (v1 / v) * 36;
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	__divuint
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVLW	0x04
	ADDWF	FSR1L, F
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x24
	MOVWF	POSTDEC1
	CALL	__mulint
	BANKSEL	_speed
	MOVWF	_speed, B
	MOVFF	PRODL, (_speed + 1)
	MOVLW	0x04
	ADDWF	FSR1L, F
	BRA	_00500_DS_
_00499_DS_:
	BANKSEL	_speed
	.line	218; carLog1.c	speed = 0;
	CLRF	_speed, B
	BANKSEL	(_speed + 1)
	CLRF	(_speed + 1), B
_00500_DS_:
	BANKSEL	(_speed + 1)
	.line	221; carLog1.c	if((speed > speedPeak) && (current > 1200)){
	MOVF	(_speed + 1), W, B
	BANKSEL	(_speedPeak + 1)
	SUBWF	(_speedPeak + 1), W, B
	BNZ	_00509_DS_
	BANKSEL	_speed
	MOVF	_speed, W, B
	BANKSEL	_speedPeak
	SUBWF	_speedPeak, W, B
_00509_DS_:
	BC	_00502_DS_
	BANKSEL	(_current + 1)
	MOVF	(_current + 1), W, B
	ADDLW	0x80
	ADDLW	0x7c
	BNZ	_00510_DS_
	MOVLW	0xb1
	BANKSEL	_current
	SUBWF	_current, W, B
_00510_DS_:
	BNC	_00502_DS_
	.line	222; carLog1.c	speedPeak = speed;
	MOVFF	_speed, _speedPeak
	MOVFF	(_speed + 1), (_speedPeak + 1)
	.line	223; carLog1.c	speedPeakCurrent = current;
	MOVFF	_current, _speedPeakCurrent
	MOVFF	(_current + 1), (_speedPeakCurrent + 1)
_00502_DS_:
	BANKSEL	_speedTickCount
	.line	226; carLog1.c	speedTickCount = 0;
	CLRF	_speedTickCount, B
	BANKSEL	(_speedTickCount + 1)
	CLRF	(_speedTickCount + 1), B
	.line	227; carLog1.c	speedTickSTime = speedTickETime;
	MOVFF	_speedTickETime, _speedTickSTime
	MOVFF	(_speedTickETime + 1), (_speedTickSTime + 1)
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__speedInterrupt	code
_speedInterrupt:
	.line	183; carLog1.c	void speedInterrupt(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	.line	187; carLog1.c	t = timerGetMilliSec();
	CALL	_timerGetMilliSec
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	BANKSEL	_speedTickETime
	.line	191; carLog1.c	if((t - speedTickETime) > 50){
	MOVF	_speedTickETime, W, B
	SUBWF	r0x00, W
	MOVWF	r0x02
	BANKSEL	(_speedTickETime + 1)
	MOVF	(_speedTickETime + 1), W, B
	SUBWFB	r0x01, W
	MOVWF	r0x03
	MOVLW	0x00
	SUBWF	r0x03, W
	BNZ	_00493_DS_
	MOVLW	0x33
	SUBWF	r0x02, W
_00493_DS_:
	BNC	_00490_DS_
	.line	193; carLog1.c	speedTickETime = t;
	MOVFF	r0x00, _speedTickETime
	MOVFF	r0x01, (_speedTickETime + 1)
	BANKSEL	_distanceTicks
	.line	196; carLog1.c	distanceTicks++;
	INCF	_distanceTicks, F, B
	BNC	_20691_DS_
	BANKSEL	(_distanceTicks + 1)
	INCF	(_distanceTicks + 1), F, B
_20691_DS_:
	BNC	_30692_DS_
	BANKSEL	(_distanceTicks + 2)
	INCF	(_distanceTicks + 2), F, B
_30692_DS_:
	BNC	_40693_DS_
	BANKSEL	(_distanceTicks + 3)
	INCF	(_distanceTicks + 3), F, B
_40693_DS_:
	BANKSEL	_speedTickCount
	.line	199; carLog1.c	speedTickCount++;
	INCF	_speedTickCount, F, B
	BNC	_50694_DS_
	BANKSEL	(_speedTickCount + 1)
	INCF	(_speedTickCount + 1), F, B
_50694_DS_:
_00490_DS_:
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__displayWarnings	code
_displayWarnings:
	.line	172; carLog1.c	void displayWarnings(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	BANKSEL	_warnings
	.line	173; carLog1.c	if(warnings & WARNING_BATTERY_LOW){
	BTFSS	_warnings, 0, B
	BRA	_00478_DS_
	.line	174; carLog1.c	lcdWriteStr(0, 1, "Battery Low     ");
	MOVLW	UPPER(__str_8)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_8)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_8)
	MOVWF	POSTDEC1
	MOVLW	0x01
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
	.line	175; carLog1.c	PORTBbits.RB7 = 1;
	BSF	_PORTBbits, 7
	BRA	_00480_DS_
_00478_DS_:
	.line	178; carLog1.c	PORTBbits.RB7 = 0;
	BCF	_PORTBbits, 7
_00480_DS_:
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__displayDo	code
_displayDo:
	.line	113; carLog1.c	void displayDo(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVFF	r0x06, POSTDEC1
	MOVFF	r0x07, POSTDEC1
	MOVFF	r0x08, POSTDEC1
	.line	117; carLog1.c	switch(displayMode){
	MOVLW	0x04
	BANKSEL	_displayMode
	SUBWF	_displayMode, W, B
	BTFSC	STATUS, 0
	GOTO	_00467_DS_
	MOVFF	r0x09, POSTDEC1
	MOVFF	r0x0a, POSTDEC1
	CLRF	r0x0a
	BANKSEL	_displayMode
	RLCF	_displayMode, W, B
	RLCF	r0x0a, F
	RLCF	WREG, W
	RLCF	r0x0a, F
	ANDLW	0xfc
	MOVWF	r0x09
	MOVLW	UPPER(_00472_DS_)
	MOVWF	PCLATU
	MOVLW	HIGH(_00472_DS_)
	MOVWF	PCLATH
	MOVLW	LOW(_00472_DS_)
	ADDWF	r0x09, F
	MOVF	r0x0a, W
	ADDWFC	PCLATH, F
	BTFSC	STATUS, 0
	INCF	PCLATU, F
	MOVF	r0x09, W
	MOVFF	PREINC1, r0x0a
	MOVFF	PREINC1, r0x09
	MOVWF	PCL
_00472_DS_:
	GOTO	_00459_DS_
	GOTO	_00460_DS_
	GOTO	_00461_DS_
	GOTO	_00465_DS_
_00459_DS_:
	.line	119; carLog1.c	strcpy(str, "S       B      %");
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVLW	UPPER(__str_0)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_0)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_0)
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_strcpy
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	120; carLog1.c	strWordDec(&str[1], 2, speed);
	MOVLW	HIGH(_displayDo_str_1_1 + 1)
	MOVWF	r0x01
	MOVLW	LOW(_displayDo_str_1_1 + 1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	BANKSEL	(_speed + 1)
	MOVF	(_speed + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_speed
	MOVF	_speed, W, B
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	122; carLog1.c	str[9] = battery + '0';
	MOVLW	0x30
	BANKSEL	_battery
	ADDWF	_battery, W, B
	MOVWF	r0x00
	MOVF	r0x00, W
	BANKSEL	(_displayDo_str_1_1 + 9)
	MOVWF	(_displayDo_str_1_1 + 9), B
	.line	123; carLog1.c	strByte(&str[12], (charge >> 16) / 10);
	MOVLW	HIGH(_displayDo_str_1_1 + 12)
	MOVWF	r0x01
	MOVLW	LOW(_displayDo_str_1_1 + 12)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	BANKSEL	(_charge + 2)
	MOVF	(_charge + 2), W, B
	MOVWF	r0x03
	BANKSEL	(_charge + 3)
	MOVF	(_charge + 3), W, B
	MOVWF	r0x04
	CLRF	r0x05
	CLRF	r0x06
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0a
	MOVWF	POSTDEC1
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	CALL	__divulong
	MOVWF	r0x03
	MOVFF	PRODL, r0x04
	MOVFF	PRODH, r0x05
	MOVFF	FSR0L, r0x06
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_strByte
	MOVLW	0x04
	ADDWF	FSR1L, F
	.line	124; carLog1.c	lcdWriteStr(0, 0, str);
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
	.line	126; carLog1.c	strcpy(str, "I       D       ");
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVLW	UPPER(__str_1)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_1)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_1)
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_strcpy
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	127; carLog1.c	strWordDec(&str[1], 2, current);
	MOVLW	HIGH(_displayDo_str_1_1 + 1)
	MOVWF	r0x01
	MOVLW	LOW(_displayDo_str_1_1 + 1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVFF	_current, r0x03
	MOVFF	(_current + 1), r0x04
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	128; carLog1.c	strWordDec(&str[9], 2, distance);
	MOVLW	HIGH(_displayDo_str_1_1 + 9)
	MOVWF	r0x01
	MOVLW	LOW(_displayDo_str_1_1 + 9)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	BANKSEL	(_distance + 1)
	MOVF	(_distance + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_distance
	MOVF	_distance, W, B
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	130; carLog1.c	lcdWriteStr(0, 1, str);
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x01
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
	.line	131; carLog1.c	break;
	GOTO	_00467_DS_
_00460_DS_:
	.line	133; carLog1.c	t = (voltage / 100) * (current / 100);
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x64
	MOVWF	POSTDEC1
	BANKSEL	(_voltage + 1)
	MOVF	(_voltage + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_voltage
	MOVF	_voltage, W, B
	MOVWF	POSTDEC1
	CALL	__divuint
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVLW	0x04
	ADDWF	FSR1L, F
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x64
	MOVWF	POSTDEC1
	BANKSEL	(_current + 1)
	MOVF	(_current + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_current
	MOVF	_current, W, B
	MOVWF	POSTDEC1
	CALL	__divsint
	MOVWF	r0x02
	MOVFF	PRODL, r0x03
	MOVLW	0x04
	ADDWF	FSR1L, F
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	__mulint
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVLW	0x04
	ADDWF	FSR1L, F
	.line	134; carLog1.c	strcpy(str, "V       I       ");
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVLW	UPPER(__str_2)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_2)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_2)
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strcpy
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	135; carLog1.c	strWordDec(&str[1], 2, voltage);
	MOVLW	HIGH(_displayDo_str_1_1 + 1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	BANKSEL	(_voltage + 1)
	MOVF	(_voltage + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_voltage
	MOVF	_voltage, W, B
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	136; carLog1.c	strWordDec(&str[9], 2, current);
	MOVLW	HIGH(_displayDo_str_1_1 + 9)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 9)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVFF	_current, r0x05
	MOVFF	(_current + 1), r0x06
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	137; carLog1.c	lcdWriteStr(0, 0, str);
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
	.line	139; carLog1.c	strcpy(str, "P       T       ");
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVLW	UPPER(__str_3)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_3)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_3)
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strcpy
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	140; carLog1.c	strWordDec(&str[2], 0, t);
	MOVLW	HIGH(_displayDo_str_1_1 + 2)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 2)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	141; carLog1.c	strWordDec(&str[10], 0, timerGetSec());
	MOVLW	HIGH(_displayDo_str_1_1 + 10)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 10)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	CALL	_timerGetSec
	MOVWF	r0x05
	MOVFF	PRODL, r0x06
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	142; carLog1.c	lcdWriteStr(0, 1, str);
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVLW	0x01
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
	.line	143; carLog1.c	break;
	BRA	_00467_DS_
_00461_DS_:
	.line	146; carLog1.c	strcpy(str, "SA      IA      ");
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVLW	UPPER(__str_4)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_4)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_4)
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strcpy
	MOVLW	0x06
	ADDWF	FSR1L, F
	BANKSEL	_currentAvgNum
	.line	147; carLog1.c	if(currentAvgNum){
	MOVF	_currentAvgNum, W, B
	BANKSEL	(_currentAvgNum + 1)
	IORWF	(_currentAvgNum + 1), W, B
	BTFSC	STATUS, 2
	BRA	_00463_DS_
	.line	148; carLog1.c	strWordDec(&str[1], 2, speedAvg/currentAvgNum);
	MOVLW	HIGH(_displayDo_str_1_1 + 1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVFF	_currentAvgNum, r0x05
	MOVFF	(_currentAvgNum + 1), r0x06
	CLRF	r0x07
	CLRF	r0x08
	MOVF	r0x08, W
	MOVWF	POSTDEC1
	MOVF	r0x07, W
	MOVWF	POSTDEC1
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	BANKSEL	(_speedAvg + 3)
	MOVF	(_speedAvg + 3), W, B
	MOVWF	POSTDEC1
	BANKSEL	(_speedAvg + 2)
	MOVF	(_speedAvg + 2), W, B
	MOVWF	POSTDEC1
	BANKSEL	(_speedAvg + 1)
	MOVF	(_speedAvg + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_speedAvg
	MOVF	_speedAvg, W, B
	MOVWF	POSTDEC1
	CALL	__divulong
	MOVWF	r0x05
	MOVFF	PRODL, r0x06
	MOVFF	PRODH, r0x07
	MOVFF	FSR0L, r0x08
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	149; carLog1.c	strWordDec(&str[9], 2, currentAvg/currentAvgNum);
	MOVLW	HIGH(_displayDo_str_1_1 + 9)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 9)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVFF	_currentAvgNum, r0x05
	MOVFF	(_currentAvgNum + 1), r0x06
	CLRF	r0x07
	CLRF	r0x08
	MOVF	r0x08, W
	MOVWF	POSTDEC1
	MOVF	r0x07, W
	MOVWF	POSTDEC1
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	BANKSEL	(_currentAvg + 3)
	MOVF	(_currentAvg + 3), W, B
	MOVWF	POSTDEC1
	BANKSEL	(_currentAvg + 2)
	MOVF	(_currentAvg + 2), W, B
	MOVWF	POSTDEC1
	BANKSEL	(_currentAvg + 1)
	MOVF	(_currentAvg + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_currentAvg
	MOVF	_currentAvg, W, B
	MOVWF	POSTDEC1
	CALL	__divulong
	MOVWF	r0x05
	MOVFF	PRODL, r0x06
	MOVFF	PRODH, r0x07
	MOVFF	FSR0L, r0x08
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	BRA	_00464_DS_
_00463_DS_:
	.line	152; carLog1.c	strWordDec(&str[1], 2, 0);
	MOVLW	HIGH(_displayDo_str_1_1 + 1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	153; carLog1.c	strWordDec(&str[9], 2, 0);
	MOVLW	HIGH(_displayDo_str_1_1 + 9)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 9)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
_00464_DS_:
	.line	155; carLog1.c	lcdWriteStr(0, 0, str);
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
	.line	157; carLog1.c	strcpy(str, "SP      IP      ");
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVLW	UPPER(__str_5)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_5)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_5)
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strcpy
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	158; carLog1.c	strWordDec(&str[1], 2, speedPeak);
	MOVLW	HIGH(_displayDo_str_1_1 + 1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	BANKSEL	(_speedPeak + 1)
	MOVF	(_speedPeak + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_speedPeak
	MOVF	_speedPeak, W, B
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	159; carLog1.c	strWordDec(&str[9], 2, speedPeakCurrent);
	MOVLW	HIGH(_displayDo_str_1_1 + 9)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 9)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	BANKSEL	(_speedPeakCurrent + 1)
	MOVF	(_speedPeakCurrent + 1), W, B
	MOVWF	POSTDEC1
	BANKSEL	_speedPeakCurrent
	MOVF	_speedPeakCurrent, W, B
	MOVWF	POSTDEC1
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	160; carLog1.c	lcdWriteStr(0, 1, str);
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVLW	0x01
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
	.line	161; carLog1.c	break;
	BRA	_00467_DS_
_00465_DS_:
	.line	163; carLog1.c	lcdWriteStr(0, 0, "Parameter Set   ");
	MOVLW	UPPER(__str_6)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_6)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_6)
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
	.line	164; carLog1.c	strcpy(str, "LogSeconds      ");
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVLW	UPPER(__str_7)
	MOVWF	POSTDEC1
	MOVLW	HIGH(__str_7)
	MOVWF	POSTDEC1
	MOVLW	LOW(__str_7)
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strcpy
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	165; carLog1.c	t = eepromRead16(EE_LOG_SECONDS);
	MOVLW	0x0c
	MOVWF	POSTDEC1
	CALL	_eepromRead16
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	INCF	FSR1L, F
	.line	166; carLog1.c	strWordDec(&str[11], 0, t);
	MOVLW	HIGH(_displayDo_str_1_1 + 11)
	MOVWF	r0x03
	MOVLW	LOW(_displayDo_str_1_1 + 11)
	MOVWF	r0x02
	MOVLW	0x80
	MOVWF	r0x04
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	CALL	_strWordDec
	MOVLW	0x06
	ADDWF	FSR1L, F
	.line	167; carLog1.c	lcdWriteStr(0, 1, str);
	MOVLW	HIGH(_displayDo_str_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_displayDo_str_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x01
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_lcdWriteStr
	MOVLW	0x05
	ADDWF	FSR1L, F
_00467_DS_:
	.line	169; carLog1.c	}
	MOVFF	PREINC1, r0x08
	MOVFF	PREINC1, r0x07
	MOVFF	PREINC1, r0x06
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__adcRead	code
_adcRead:
	.line	660; /data/src/greenpower/carComputer/softwareC/picLib3.c	UInt16 adcRead(UInt8 channel){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	.line	662; /data/src/greenpower/carComputer/softwareC/picLib3.c	ADCON0 = (channel << 2) | 0x03;
	RLNCF	r0x00, W
	RLNCF	WREG, W
	ANDLW	0xfc
	MOVWF	r0x01
	MOVLW	0x03
	IORWF	r0x01, W
	MOVWF	_ADCON0
_00451_DS_:
	.line	664; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(ADCON0bits.NOT_DONE){
	BTFSC	_ADCON0bits, 1
	BRA	_00451_DS_
	.line	668; /data/src/greenpower/carComputer/softwareC/picLib3.c	return (ADRESH << 8) + ADRESL;
	MOVFF	_ADRESH, r0x00
	CLRF	r0x01
	MOVF	r0x00, W
	MOVWF	r0x03
	CLRF	r0x02
	MOVFF	_ADRESL, r0x00
	CLRF	r0x01
	MOVF	r0x00, W
	ADDWF	r0x02, F
	MOVF	r0x01, W
	ADDWFC	r0x03, F
	MOVFF	r0x03, PRODL
	MOVF	r0x02, W
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__adcInit	code
_adcInit:
	.line	654; /data/src/greenpower/carComputer/softwareC/picLib3.c	void adcInit(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	655; /data/src/greenpower/carComputer/softwareC/picLib3.c	ADCON0 = 0x01;		// Enable ADC
	MOVLW	0x01
	MOVWF	_ADCON0
	.line	656; /data/src/greenpower/carComputer/softwareC/picLib3.c	ADCON1 = 0x05;		// Enable first 9 ADC inputs and use internal voltage reference
	MOVLW	0x05
	MOVWF	_ADCON1
	.line	657; /data/src/greenpower/carComputer/softwareC/picLib3.c	ADCON2 = 0x94;		// Setup Aquisition times for 4MHz Clock
	MOVLW	0x94
	MOVWF	_ADCON2
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__timerGetSec	code
_timerGetSec:
	.line	644; /data/src/greenpower/carComputer/softwareC/picLib3.c	UInt16 timerGetSec(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	.line	645; /data/src/greenpower/carComputer/softwareC/picLib3.c	return timerGetMicroSec() / 1000000;
	CALL	_timerGetMicroSec
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVFF	PRODH, r0x02
	MOVFF	FSR0L, r0x03
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0f
	MOVWF	POSTDEC1
	MOVLW	0x42
	MOVWF	POSTDEC1
	MOVLW	0x40
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	__divulong
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVFF	PRODH, r0x02
	MOVFF	FSR0L, r0x03
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVFF	r0x01, PRODL
	MOVF	r0x00, W
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__timerGetMilliSec	code
_timerGetMilliSec:
	.line	640; /data/src/greenpower/carComputer/softwareC/picLib3.c	UInt16 timerGetMilliSec(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	.line	641; /data/src/greenpower/carComputer/softwareC/picLib3.c	return timerGetMicroSec() / 1000;
	CALL	_timerGetMicroSec
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVFF	PRODH, r0x02
	MOVFF	FSR0L, r0x03
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x03
	MOVWF	POSTDEC1
	MOVLW	0xe8
	MOVWF	POSTDEC1
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	__divulong
	MOVWF	r0x00
	MOVFF	PRODL, r0x01
	MOVFF	PRODH, r0x02
	MOVFF	FSR0L, r0x03
	MOVLW	0x08
	ADDWF	FSR1L, F
	MOVFF	r0x01, PRODL
	MOVF	r0x00, W
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__timerGetMicroSec	code
_timerGetMicroSec:
	MOVFF r0x00, POSTDEC1
	MOVFF r0x01, POSTDEC1
	MOVFF r0x02, POSTDEC1
	MOVFF r0x03, POSTDEC1
	MOVFF r0x04, POSTDEC1
	MOVFF r0x05, POSTDEC1
	; t1 = (TMR3H << 8) | TMR3L;
	MOVFF _TMR3L, r0x00
	MOVFF _TMR3H, r0x01
	MOVFF _timerHigh, r0x02
	MOVFF (_timerHigh + 1), r0x03
	; t3 = (TMR3H << 8) | TMR3L;
	MOVFF _TMR3L, r0x04
	MOVFF _TMR3H, r0x05
	; if(t3 < t1){
	MOVF r0x01, W
	SUBWF r0x05, W
	BNZ _00001
	MOVF r0x00, W
	SUBWF r0x04, W
_00001:
	BC _00002
	MOVFF _timerHigh, r0x02
	MOVFF (_timerHigh + 1), r0x03
_00002:
	; return ((UInt32)timerHigh << 16) | t3;
	MOVFF r0x03, FSR0L
	MOVFF r0x02, PRODH
	MOVFF r0x05, PRODL
	MOVF r0x04, W
	MOVFF PREINC1, r0x05
	MOVFF PREINC1, r0x04
	MOVFF PREINC1, r0x03
	MOVFF PREINC1, r0x02
	MOVFF PREINC1, r0x01
	MOVFF PREINC1, r0x00
	RETURN
	
; ; Starting pCode block
S_carLog1__timerTick	code
_timerTick:
	.line	574; /data/src/greenpower/carComputer/softwareC/picLib3.c	void timerTick(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	BANKSEL	_timerHigh
	.line	575; /data/src/greenpower/carComputer/softwareC/picLib3.c	timerHigh++;
	INCF	_timerHigh, F, B
	BNC	_60695_DS_
	BANKSEL	(_timerHigh + 1)
	INCF	(_timerHigh + 1), F, B
_60695_DS_:
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__timerClear	code
_timerClear:
	.line	567; /data/src/greenpower/carComputer/softwareC/picLib3.c	void timerClear(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	568; /data/src/greenpower/carComputer/softwareC/picLib3.c	TMR3H = 0;
	CLRF	_TMR3H
	.line	569; /data/src/greenpower/carComputer/softwareC/picLib3.c	TMR3L = 0;
	CLRF	_TMR3L
	BANKSEL	_timerHigh
	.line	571; /data/src/greenpower/carComputer/softwareC/picLib3.c	timerHigh = 0;
	CLRF	_timerHigh, B
	BANKSEL	(_timerHigh + 1)
	CLRF	(_timerHigh + 1), B
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__timerInit	code
_timerInit:
	.line	558; /data/src/greenpower/carComputer/softwareC/picLib3.c	void timerInit(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	560; /data/src/greenpower/carComputer/softwareC/picLib3.c	T3CON = 0x81;
	MOVLW	0x81
	MOVWF	_T3CON
	.line	561; /data/src/greenpower/carComputer/softwareC/picLib3.c	TMR3H = 0;
	CLRF	_TMR3H
	.line	562; /data/src/greenpower/carComputer/softwareC/picLib3.c	TMR3L = 0;
	CLRF	_TMR3L
	BANKSEL	_timerHigh
	.line	564; /data/src/greenpower/carComputer/softwareC/picLib3.c	timerHigh = 0;
	CLRF	_timerHigh, B
	BANKSEL	(_timerHigh + 1)
	CLRF	(_timerHigh + 1), B
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__eepromWrite32	code
_eepromWrite32:
	.line	483; /data/src/greenpower/carComputer/softwareC/picLib3.c	void eepromWrite32(UInt8 address, UInt32 value){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVFF	r0x06, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
	MOVLW	0x04
	MOVFF	PLUSW2, r0x02
	MOVLW	0x05
	MOVFF	PLUSW2, r0x03
	MOVLW	0x06
	MOVFF	PLUSW2, r0x04
	.line	484; /data/src/greenpower/carComputer/softwareC/picLib3.c	eepromWrite16(address, value);
	MOVF	r0x01, W
	MOVWF	r0x05
	MOVF	r0x02, W
	MOVWF	r0x06
	MOVF	r0x06, W
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	.line	485; /data/src/greenpower/carComputer/softwareC/picLib3.c	eepromWrite16(address + 2, value >> 16);
	INCF	r0x00, F
	INCF	r0x00, F
	MOVF	r0x03, W
	MOVWF	r0x01
	MOVF	r0x04, W
	MOVWF	r0x02
	CLRF	r0x03
	CLRF	r0x04
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_eepromWrite16
	MOVLW	0x03
	ADDWF	FSR1L, F
	MOVFF	PREINC1, r0x06
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__eepromRead32	code
_eepromRead32:
	.line	475; /data/src/greenpower/carComputer/softwareC/picLib3.c	UInt32 eepromRead32(UInt8 address){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVFF	r0x06, POSTDEC1
	MOVFF	r0x07, POSTDEC1
	MOVFF	r0x08, POSTDEC1
	MOVFF	r0x09, POSTDEC1
	MOVFF	r0x0a, POSTDEC1
	MOVFF	r0x0b, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	.line	478; /data/src/greenpower/carComputer/softwareC/picLib3.c	v = eepromRead16(address);
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_eepromRead16
	MOVWF	r0x01
	MOVFF	PRODL, r0x02
	INCF	FSR1L, F
	CLRF	r0x03
	CLRF	r0x04
	.line	479; /data/src/greenpower/carComputer/softwareC/picLib3.c	v |= ((UInt32)eepromRead16(address + 2) << 16);
	INCF	r0x00, F
	INCF	r0x00, F
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_eepromRead16
	MOVWF	r0x00
	MOVFF	PRODL, r0x05
	INCF	FSR1L, F
	CLRF	r0x06
	CLRF	r0x07
	MOVF	r0x05, W
	MOVWF	r0x0b
	MOVF	r0x00, W
	MOVWF	r0x0a
	CLRF	r0x08
	CLRF	r0x09
	MOVF	r0x08, W
	IORWF	r0x01, F
	MOVF	r0x09, W
	IORWF	r0x02, F
	MOVF	r0x0a, W
	IORWF	r0x03, F
	MOVF	r0x0b, W
	IORWF	r0x04, F
	.line	480; /data/src/greenpower/carComputer/softwareC/picLib3.c	return v;
	MOVFF	r0x04, FSR0L
	MOVFF	r0x03, PRODH
	MOVFF	r0x02, PRODL
	MOVF	r0x01, W
	MOVFF	PREINC1, r0x0b
	MOVFF	PREINC1, r0x0a
	MOVFF	PREINC1, r0x09
	MOVFF	PREINC1, r0x08
	MOVFF	PREINC1, r0x07
	MOVFF	PREINC1, r0x06
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__eepromWrite16	code
_eepromWrite16:
	.line	445; /data/src/greenpower/carComputer/softwareC/picLib3.c	void eepromWrite16(UInt8 address, UInt16 value){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
	MOVLW	0x04
	MOVFF	PLUSW2, r0x02
	.line	447; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.EEPGD = 0;
	BCF	_EECON1bits, 7
	.line	448; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.CFGS = 0;
	BCF	_EECON1bits, 6
	.line	449; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.WREN = 1;		// Enable writes to data EEPROM
	BSF	_EECON1bits, 2
	.line	450; /data/src/greenpower/carComputer/softwareC/picLib3.c	INTCONbits.GIE = 0;		// Disable interrupts
	BCF	_INTCONbits, 7
	.line	452; /data/src/greenpower/carComputer/softwareC/picLib3.c	EEADR = address;
	MOVFF	r0x00, _EEADR
	.line	453; /data/src/greenpower/carComputer/softwareC/picLib3.c	EEDATA = value;
	MOVF	r0x01, W
	MOVWF	_EEDATA
	.line	454; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON2 = 0x55;
	MOVLW	0x55
	MOVWF	_EECON2
	.line	455; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON2 = 0x0AA;
	MOVLW	0xaa
	MOVWF	_EECON2
	.line	456; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.WR = 1;		// Start writing
	BSF	_EECON1bits, 1
_00395_DS_:
	.line	457; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(EECON1bits.WR);
	BTFSC	_EECON1bits, 1
	BRA	_00395_DS_
	.line	459; /data/src/greenpower/carComputer/softwareC/picLib3.c	EEADR = address + 1;
	INCF	r0x00, W
	MOVWF	_EEADR
	.line	460; /data/src/greenpower/carComputer/softwareC/picLib3.c	EEDATA = value >> 8;
	MOVF	r0x02, W
	MOVWF	r0x01
	CLRF	r0x02
	MOVF	r0x01, W
	MOVWF	_EEDATA
	.line	461; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON2 = 0x55;
	MOVLW	0x55
	MOVWF	_EECON2
	.line	462; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON2 = 0x0AA;
	MOVLW	0xaa
	MOVWF	_EECON2
	.line	463; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.WR = 1;		// Start writing
	BSF	_EECON1bits, 1
_00398_DS_:
	.line	464; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(EECON1bits.WR);
	BTFSC	_EECON1bits, 1
	BRA	_00398_DS_
	.line	471; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.WREN = 0;
	BCF	_EECON1bits, 2
	.line	472; /data/src/greenpower/carComputer/softwareC/picLib3.c	INTCONbits.GIE = 1;  // enable interrupts
	BSF	_INTCONbits, 7
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__eepromRead16	code
_eepromRead16:
	.line	431; /data/src/greenpower/carComputer/softwareC/picLib3.c	UInt16 eepromRead16(UInt8 address){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	.line	434; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.CFGS = 0;
	BCF	_EECON1bits, 6
	.line	435; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.EEPGD = 0;
	BCF	_EECON1bits, 7
	.line	436; /data/src/greenpower/carComputer/softwareC/picLib3.c	EEADR = address;
	MOVFF	r0x00, _EEADR
	.line	437; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.RD = 1;
	BSF	_EECON1bits, 0
	.line	438; /data/src/greenpower/carComputer/softwareC/picLib3.c	v = EEDATA;
	MOVFF	_EEDATA, r0x01
	CLRF	r0x02
	.line	439; /data/src/greenpower/carComputer/softwareC/picLib3.c	EEADR = address + 1;
	INCF	r0x00, W
	MOVWF	_EEADR
	.line	440; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.RD = 1;
	BSF	_EECON1bits, 0
	.line	441; /data/src/greenpower/carComputer/softwareC/picLib3.c	v |= (EEDATA << 8);
	MOVFF	_EEDATA, r0x00
	CLRF	r0x03
	MOVF	r0x00, W
	MOVWF	r0x05
	CLRF	r0x04
	MOVF	r0x04, W
	IORWF	r0x01, F
	MOVF	r0x05, W
	IORWF	r0x02, F
	.line	442; /data/src/greenpower/carComputer/softwareC/picLib3.c	return v;
	MOVFF	r0x02, PRODL
	MOVF	r0x01, W
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__eepromWrite8	code
_eepromWrite8:
	.line	409; /data/src/greenpower/carComputer/softwareC/picLib3.c	void eepromWrite8(UInt8 address, UInt8 value){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
	.line	411; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.EEPGD = 0;
	BCF	_EECON1bits, 7
	.line	412; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.CFGS = 0;
	BCF	_EECON1bits, 6
	.line	413; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.WREN = 1;		// Enable writes to data EEPROM
	BSF	_EECON1bits, 2
	.line	414; /data/src/greenpower/carComputer/softwareC/picLib3.c	INTCONbits.GIE = 0;		// Disable interrupts
	BCF	_INTCONbits, 7
	.line	416; /data/src/greenpower/carComputer/softwareC/picLib3.c	EEDATA = value;
	MOVFF	r0x01, _EEDATA
	.line	417; /data/src/greenpower/carComputer/softwareC/picLib3.c	EEADR = address;
	MOVFF	r0x00, _EEADR
	.line	418; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON2 = 0x55;
	MOVLW	0x55
	MOVWF	_EECON2
	.line	419; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON2 = 0x0AA;
	MOVLW	0xaa
	MOVWF	_EECON2
	.line	420; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.WR = 1;		// Start writing
	BSF	_EECON1bits, 1
_00382_DS_:
	.line	421; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(EECON1bits.WR);
	BTFSC	_EECON1bits, 1
	BRA	_00382_DS_
	.line	427; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.WREN = 0;
	BCF	_EECON1bits, 2
	.line	428; /data/src/greenpower/carComputer/softwareC/picLib3.c	INTCONbits.GIE = 1;  // enable interrupts
	BSF	_INTCONbits, 7
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__eepromRead8	code
_eepromRead8:
	.line	401; /data/src/greenpower/carComputer/softwareC/picLib3.c	UInt8 eepromRead8(UInt8 address){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	.line	402; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.CFGS = 0;
	BCF	_EECON1bits, 6
	.line	403; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.EEPGD = 0;
	BCF	_EECON1bits, 7
	.line	404; /data/src/greenpower/carComputer/softwareC/picLib3.c	EEADR = address;
	MOVFF	r0x00, _EEADR
	.line	405; /data/src/greenpower/carComputer/softwareC/picLib3.c	EECON1bits.RD = 1;
	BSF	_EECON1bits, 0
	.line	406; /data/src/greenpower/carComputer/softwareC/picLib3.c	return EEDATA;
	MOVF	_EEDATA, W
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__usartWrite	code
_usartWrite:
	.line	389; /data/src/greenpower/carComputer/softwareC/picLib3.c	void usartWrite(char* buffer, UInt8 len){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
	MOVLW	0x04
	MOVFF	PLUSW2, r0x02
	MOVLW	0x05
	MOVFF	PLUSW2, r0x03
	.line	392; /data/src/greenpower/carComputer/softwareC/picLib3.c	for(i = 0; i < len; i++){
	CLRF	r0x04
_00363_DS_:
	MOVF	r0x03, W
	SUBWF	r0x04, W
	BC	_00367_DS_
	.line	393; /data/src/greenpower/carComputer/softwareC/picLib3.c	usartPutc(*buffer++);
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrget1
	MOVWF	r0x05
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	CALL	_usartPutc
	INCF	FSR1L, F
	.line	392; /data/src/greenpower/carComputer/softwareC/picLib3.c	for(i = 0; i < len; i++){
	INCF	r0x04, F
	BRA	_00363_DS_
_00367_DS_:
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__usartPuts	code
_usartPuts:
	.line	356; /data/src/greenpower/carComputer/softwareC/picLib3.c	void usartPuts(char* p){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
	MOVLW	0x04
	MOVFF	PLUSW2, r0x02
_00355_DS_:
	.line	357; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(*p){
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrget1
	MOVWF	r0x03
	MOVF	r0x03, W
	BZ	_00358_DS_
_00352_DS_:
	.line	358; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(!TXSTAbits.TRMT);
	BTFSS	_TXSTAbits, 1
	BRA	_00352_DS_
	.line	359; /data/src/greenpower/carComputer/softwareC/picLib3.c	TXREG = *p++;
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrget1
	MOVWF	_TXREG
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BRA	_00355_DS_
_00358_DS_:
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__usartPutc	code
_usartPutc:
	.line	351; /data/src/greenpower/carComputer/softwareC/picLib3.c	void usartPutc(UInt8 c){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
_00344_DS_:
	.line	352; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(!TXSTAbits.TRMT);
	BTFSS	_TXSTAbits, 1
	BRA	_00344_DS_
	.line	353; /data/src/greenpower/carComputer/softwareC/picLib3.c	TXREG = c;
	MOVFF	r0x00, _TXREG
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__usartGetc	code
_usartGetc:
	.line	346; /data/src/greenpower/carComputer/softwareC/picLib3.c	unsigned char usartGetc(void){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
_00336_DS_:
	.line	347; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(PIR1bits.RCIF == 0);
	BTFSS	_PIR1bits, 5
	BRA	_00336_DS_
	.line	348; /data/src/greenpower/carComputer/softwareC/picLib3.c	return RCREG;
	MOVF	_RCREG, W
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__usartRxRdy	code
_usartRxRdy:
	.line	342; /data/src/greenpower/carComputer/softwareC/picLib3.c	unsigned char usartRxRdy(void){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	.line	343; /data/src/greenpower/carComputer/softwareC/picLib3.c	return PIR1bits.RCIF;
	CLRF	r0x00
	BTFSC	_PIR1bits, 5
	INCF	r0x00, F
	MOVF	r0x00, W
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__usartInit	code
_usartInit:
	.line	328; /data/src/greenpower/carComputer/softwareC/picLib3.c	void usartInit(void){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	329; /data/src/greenpower/carComputer/softwareC/picLib3.c	TXSTA = 0x20;
	MOVLW	0x20
	MOVWF	_TXSTA
	.line	330; /data/src/greenpower/carComputer/softwareC/picLib3.c	RCSTA = 0x90;
	MOVLW	0x90
	MOVWF	_RCSTA
	.line	336; /data/src/greenpower/carComputer/softwareC/picLib3.c	SPBRG = 12;		// 4800 Baud 4MHz Clock
	MOVLW	0x0c
	MOVWF	_SPBRG
	.line	339; /data/src/greenpower/carComputer/softwareC/picLib3.c	delayMs(1);
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x01
	MOVWF	POSTDEC1
	CALL	_delayMs
	MOVLW	0x02
	ADDWF	FSR1L, F
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__strWordDec	code
_strWordDec:
	.line	297; /data/src/greenpower/carComputer/softwareC/picLib3.c	void strWordDec(char* str, UInt8 decPlace, UInt16 v){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVFF	r0x06, POSTDEC1
	MOVFF	r0x07, POSTDEC1
	MOVFF	r0x08, POSTDEC1
	MOVFF	r0x09, POSTDEC1
	MOVFF	r0x0a, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
	MOVLW	0x04
	MOVFF	PLUSW2, r0x02
	MOVLW	0x05
	MOVFF	PLUSW2, r0x03
	MOVLW	0x06
	MOVFF	PLUSW2, r0x04
	MOVLW	0x07
	MOVFF	PLUSW2, r0x05
	.line	298; /data/src/greenpower/carComputer/softwareC/picLib3.c	char*	p = str;
	MOVFF	r0x00, r0x06
	MOVFF	r0x01, r0x07
	MOVFF	r0x02, r0x08
	.line	300; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(decPlace)
	MOVF	r0x03, W
	BZ	_00289_DS_
	.line	301; /data/src/greenpower/carComputer/softwareC/picLib3.c	decPlace = 5 - decPlace;
	MOVF	r0x03, W
	SUBLW	0x05
	MOVWF	r0x03
_00289_DS_:
	.line	303; /data/src/greenpower/carComputer/softwareC/picLib3.c	*p++ = (v / 10000) + '0';
	MOVLW	0x27
	MOVWF	POSTDEC1
	MOVLW	0x10
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	CALL	__divuint
	MOVWF	r0x09
	MOVFF	PRODL, r0x0a
	MOVLW	0x04
	ADDWF	FSR1L, F
	MOVLW	0x30
	ADDWF	r0x09, F
	MOVFF	r0x09, POSTDEC1
	MOVFF	r0x06, FSR0L
	MOVFF	r0x07, PRODL
	MOVF	r0x08, W
	CALL	__gptrput1
	INCF	r0x06, F
	BTFSC	STATUS, 0
	INCF	r0x07, F
	BTFSC	STATUS, 0
	INCF	r0x08, F
	.line	304; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(!--decPlace) *p++ = '.';
	DECF	r0x03, F
	MOVF	r0x03, W
	BNZ	_00291_DS_
	MOVLW	0x2e
	MOVWF	POSTDEC1
	MOVFF	r0x06, FSR0L
	MOVFF	r0x07, PRODL
	MOVF	r0x08, W
	CALL	__gptrput1
	INCF	r0x06, F
	BTFSC	STATUS, 0
	INCF	r0x07, F
	BTFSC	STATUS, 0
	INCF	r0x08, F
_00291_DS_:
	.line	305; /data/src/greenpower/carComputer/softwareC/picLib3.c	v = v % 10000;
	MOVLW	0x27
	MOVWF	POSTDEC1
	MOVLW	0x10
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	CALL	__moduint
	MOVWF	r0x04
	MOVFF	PRODL, r0x05
	MOVLW	0x04
	ADDWF	FSR1L, F
	.line	306; /data/src/greenpower/carComputer/softwareC/picLib3.c	*p++ = (v / 1000) + '0';
	MOVLW	0x03
	MOVWF	POSTDEC1
	MOVLW	0xe8
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	CALL	__divuint
	MOVWF	r0x09
	MOVFF	PRODL, r0x0a
	MOVLW	0x04
	ADDWF	FSR1L, F
	MOVLW	0x30
	ADDWF	r0x09, F
	MOVFF	r0x09, POSTDEC1
	MOVFF	r0x06, FSR0L
	MOVFF	r0x07, PRODL
	MOVF	r0x08, W
	CALL	__gptrput1
	INCF	r0x06, F
	BTFSC	STATUS, 0
	INCF	r0x07, F
	BTFSC	STATUS, 0
	INCF	r0x08, F
	.line	307; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(!--decPlace) *p++ = '.';
	DECF	r0x03, F
	MOVF	r0x03, W
	BNZ	_00293_DS_
	MOVLW	0x2e
	MOVWF	POSTDEC1
	MOVFF	r0x06, FSR0L
	MOVFF	r0x07, PRODL
	MOVF	r0x08, W
	CALL	__gptrput1
	INCF	r0x06, F
	BTFSC	STATUS, 0
	INCF	r0x07, F
	BTFSC	STATUS, 0
	INCF	r0x08, F
_00293_DS_:
	.line	308; /data/src/greenpower/carComputer/softwareC/picLib3.c	v = v % 1000;
	MOVLW	0x03
	MOVWF	POSTDEC1
	MOVLW	0xe8
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	CALL	__moduint
	MOVWF	r0x04
	MOVFF	PRODL, r0x05
	MOVLW	0x04
	ADDWF	FSR1L, F
	.line	309; /data/src/greenpower/carComputer/softwareC/picLib3.c	*p++ = (v / 100) + '0';
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x64
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	CALL	__divuint
	MOVWF	r0x09
	MOVFF	PRODL, r0x0a
	MOVLW	0x04
	ADDWF	FSR1L, F
	MOVLW	0x30
	ADDWF	r0x09, F
	MOVFF	r0x09, POSTDEC1
	MOVFF	r0x06, FSR0L
	MOVFF	r0x07, PRODL
	MOVF	r0x08, W
	CALL	__gptrput1
	INCF	r0x06, F
	BTFSC	STATUS, 0
	INCF	r0x07, F
	BTFSC	STATUS, 0
	INCF	r0x08, F
	.line	310; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(!--decPlace) *p++ = '.';
	DECF	r0x03, F
	MOVF	r0x03, W
	BNZ	_00295_DS_
	MOVLW	0x2e
	MOVWF	POSTDEC1
	MOVFF	r0x06, FSR0L
	MOVFF	r0x07, PRODL
	MOVF	r0x08, W
	CALL	__gptrput1
	INCF	r0x06, F
	BTFSC	STATUS, 0
	INCF	r0x07, F
	BTFSC	STATUS, 0
	INCF	r0x08, F
_00295_DS_:
	.line	311; /data/src/greenpower/carComputer/softwareC/picLib3.c	v = v % 100;
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x64
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	CALL	__moduint
	MOVWF	r0x04
	MOVFF	PRODL, r0x05
	MOVLW	0x04
	ADDWF	FSR1L, F
	.line	312; /data/src/greenpower/carComputer/softwareC/picLib3.c	*p++ = (v / 10) + '0';
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0a
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	CALL	__divuint
	MOVWF	r0x09
	MOVFF	PRODL, r0x0a
	MOVLW	0x04
	ADDWF	FSR1L, F
	MOVLW	0x30
	ADDWF	r0x09, F
	MOVFF	r0x09, POSTDEC1
	MOVFF	r0x06, FSR0L
	MOVFF	r0x07, PRODL
	MOVF	r0x08, W
	CALL	__gptrput1
	INCF	r0x06, F
	BTFSC	STATUS, 0
	INCF	r0x07, F
	BTFSC	STATUS, 0
	INCF	r0x08, F
	.line	313; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(!--decPlace) *p++ = '.';
	DECF	r0x03, F
	MOVF	r0x03, W
	BNZ	_00297_DS_
	MOVLW	0x2e
	MOVWF	POSTDEC1
	MOVFF	r0x06, FSR0L
	MOVFF	r0x07, PRODL
	MOVF	r0x08, W
	CALL	__gptrput1
	INCF	r0x06, F
	BTFSC	STATUS, 0
	INCF	r0x07, F
	BTFSC	STATUS, 0
	INCF	r0x08, F
_00297_DS_:
	.line	314; /data/src/greenpower/carComputer/softwareC/picLib3.c	v = v % 10;
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0a
	MOVWF	POSTDEC1
	MOVF	r0x05, W
	MOVWF	POSTDEC1
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	CALL	__moduint
	MOVWF	r0x04
	MOVFF	PRODL, r0x05
	MOVLW	0x04
	ADDWF	FSR1L, F
	.line	315; /data/src/greenpower/carComputer/softwareC/picLib3.c	*p++ = v + '0';
	MOVLW	0x30
	ADDWF	r0x04, F
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x06, FSR0L
	MOVFF	r0x07, PRODL
	MOVF	r0x08, W
	CALL	__gptrput1
	INCF	r0x06, F
	BTFSC	STATUS, 0
	INCF	r0x07, F
	BTFSC	STATUS, 0
	INCF	r0x08, F
	.line	316; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(!--decPlace) *p++ = '.';
	DECFSZ	r0x03, F
	BRA	_00315_DS_
	MOVLW	0x2e
	MOVWF	POSTDEC1
	MOVFF	r0x06, FSR0L
	MOVFF	r0x07, PRODL
	MOVF	r0x08, W
	CALL	__gptrput1
_00315_DS_:
	.line	319; /data/src/greenpower/carComputer/softwareC/picLib3.c	for(p = str; (p < str + 4) && (*p == '0'); p++)
	MOVF	r0x00, W
	ADDLW	0x04
	MOVWF	r0x03
	MOVLW	0x00
	ADDWFC	r0x01, W
	MOVWF	r0x04
	MOVLW	0x00
	ADDWFC	r0x02, W
	MOVWF	r0x05
_00301_DS_:
	MOVF	r0x02, W
	ADDLW	0x80
	MOVWF	PRODL
	MOVF	r0x05, W
	ADDLW	0x80
	SUBWF	PRODL, W
	BNZ	_00319_DS_
	MOVF	r0x04, W
	SUBWF	r0x01, W
	BNZ	_00319_DS_
	MOVF	r0x03, W
	SUBWF	r0x00, W
_00319_DS_:
	BC	_00305_DS_
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrget1
	MOVWF	r0x06
	MOVF	r0x06, W
	XORLW	0x30
	BNZ	_00305_DS_
	.line	320; /data/src/greenpower/carComputer/softwareC/picLib3.c	*p = ' ';
	MOVLW	0x20
	MOVWF	POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	.line	319; /data/src/greenpower/carComputer/softwareC/picLib3.c	for(p = str; (p < str + 4) && (*p == '0'); p++)
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BRA	_00301_DS_
_00305_DS_:
	MOVFF	PREINC1, r0x0a
	MOVFF	PREINC1, r0x09
	MOVFF	PREINC1, r0x08
	MOVFF	PREINC1, r0x07
	MOVFF	PREINC1, r0x06
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__strByte	code
_strByte:
	.line	283; /data/src/greenpower/carComputer/softwareC/picLib3.c	void strByte(char* str, UInt8 v){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVFF	r0x06, POSTDEC1
	MOVFF	r0x07, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
	MOVLW	0x04
	MOVFF	PLUSW2, r0x02
	MOVLW	0x05
	MOVFF	PLUSW2, r0x03
	.line	286; /data/src/greenpower/carComputer/softwareC/picLib3.c	*p++ = (v / 100) + '0';
	MOVLW	0x64
	MOVWF	POSTDEC1
	MOVFF	r0x03, POSTDEC1
	CALL	__divuchar
	MOVWF	r0x04
	MOVF	PREINC1, W
	MOVF	PREINC1, W
	MOVLW	0x30
	ADDWF	r0x04, F
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	MOVF	r0x00, W
	ADDLW	0x01
	MOVWF	r0x04
	MOVLW	0x00
	ADDWFC	r0x01, W
	MOVWF	r0x05
	MOVLW	0x00
	ADDWFC	r0x02, W
	MOVWF	r0x06
	.line	287; /data/src/greenpower/carComputer/softwareC/picLib3.c	v = v % 100;
	MOVLW	0x64
	MOVWF	POSTDEC1
	MOVFF	r0x03, POSTDEC1
	CALL	__moduchar
	MOVWF	r0x03
	MOVF	PREINC1, W
	MOVF	PREINC1, W
	.line	288; /data/src/greenpower/carComputer/softwareC/picLib3.c	*p++ = (v / 10) + '0';
	MOVLW	0x0a
	MOVWF	POSTDEC1
	MOVFF	r0x03, POSTDEC1
	CALL	__divuchar
	MOVWF	r0x07
	MOVF	PREINC1, W
	MOVF	PREINC1, W
	MOVLW	0x30
	ADDWF	r0x07, F
	MOVFF	r0x07, POSTDEC1
	MOVFF	r0x04, FSR0L
	MOVFF	r0x05, PRODL
	MOVF	r0x06, W
	CALL	__gptrput1
	INCF	r0x04, F
	BTFSC	STATUS, 0
	INCF	r0x05, F
	BTFSC	STATUS, 0
	INCF	r0x06, F
	.line	289; /data/src/greenpower/carComputer/softwareC/picLib3.c	v = v % 10;
	MOVLW	0x0a
	MOVWF	POSTDEC1
	MOVFF	r0x03, POSTDEC1
	CALL	__moduchar
	MOVWF	r0x03
	MOVF	PREINC1, W
	MOVF	PREINC1, W
	.line	290; /data/src/greenpower/carComputer/softwareC/picLib3.c	*p++ = v + '0';
	MOVLW	0x30
	ADDWF	r0x03, F
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, FSR0L
	MOVFF	r0x05, PRODL
	MOVF	r0x06, W
	CALL	__gptrput1
	.line	293; /data/src/greenpower/carComputer/softwareC/picLib3.c	for(p = str; (p < str + 2) && (*p == '0'); p++)
	MOVF	r0x00, W
	ADDLW	0x02
	MOVWF	r0x03
	MOVLW	0x00
	ADDWFC	r0x01, W
	MOVWF	r0x04
	MOVLW	0x00
	ADDWFC	r0x02, W
	MOVWF	r0x05
_00271_DS_:
	MOVF	r0x02, W
	ADDLW	0x80
	MOVWF	PRODL
	MOVF	r0x05, W
	ADDLW	0x80
	SUBWF	PRODL, W
	BNZ	_00281_DS_
	MOVF	r0x04, W
	SUBWF	r0x01, W
	BNZ	_00281_DS_
	MOVF	r0x03, W
	SUBWF	r0x00, W
_00281_DS_:
	BC	_00275_DS_
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrget1
	MOVWF	r0x06
	MOVF	r0x06, W
	XORLW	0x30
	BNZ	_00275_DS_
	.line	294; /data/src/greenpower/carComputer/softwareC/picLib3.c	*p = ' ';
	MOVLW	0x20
	MOVWF	POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	.line	293; /data/src/greenpower/carComputer/softwareC/picLib3.c	for(p = str; (p < str + 2) && (*p == '0'); p++)
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	BRA	_00271_DS_
_00275_DS_:
	MOVFF	PREINC1, r0x07
	MOVFF	PREINC1, r0x06
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__lcdPutHexByte	code
_lcdPutHexByte:
	.line	260; /data/src/greenpower/carComputer/softwareC/picLib3.c	void lcdPutHexByte(UInt8 v){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	.line	264; /data/src/greenpower/carComputer/softwareC/picLib3.c	c = v / 16;
	SWAPF	r0x00, W
	ANDLW	0x0f
	MOVWF	r0x01
	.line	265; /data/src/greenpower/carComputer/softwareC/picLib3.c	c += '0';
	MOVLW	0x30
	ADDWF	r0x01, F
	.line	266; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(c > '9')
	MOVLW	0x3a
	SUBWF	r0x01, W
	BNC	_00256_DS_
	.line	267; /data/src/greenpower/carComputer/softwareC/picLib3.c	c += 7;
	MOVLW	0x07
	ADDWF	r0x01, F
_00256_DS_:
	.line	269; /data/src/greenpower/carComputer/softwareC/picLib3.c	dat[0] = c;
	MOVF	r0x01, W
	BANKSEL	_lcdPutHexByte_dat_1_1
	MOVWF	_lcdPutHexByte_dat_1_1, B
	.line	271; /data/src/greenpower/carComputer/softwareC/picLib3.c	c = v & 0x0F;
	MOVLW	0x0f
	ANDWF	r0x00, W
	MOVWF	r0x01
	.line	272; /data/src/greenpower/carComputer/softwareC/picLib3.c	c += '0';
	MOVLW	0x30
	ADDWF	r0x01, F
	.line	273; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(c > '9')
	MOVLW	0x3a
	SUBWF	r0x01, W
	BNC	_00258_DS_
	.line	274; /data/src/greenpower/carComputer/softwareC/picLib3.c	c += 7;
	MOVLW	0x07
	ADDWF	r0x01, F
_00258_DS_:
	.line	275; /data/src/greenpower/carComputer/softwareC/picLib3.c	dat[1] = c;
	MOVF	r0x01, W
	BANKSEL	(_lcdPutHexByte_dat_1_1 + 1)
	MOVWF	(_lcdPutHexByte_dat_1_1 + 1), B
	BANKSEL	(_lcdPutHexByte_dat_1_1 + 2)
	.line	276; /data/src/greenpower/carComputer/softwareC/picLib3.c	dat[2] = 0xFF;
	SETF	(_lcdPutHexByte_dat_1_1 + 2), B
	.line	278; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWrite(0xC6, 0, I2cSlow8, dat, 3);
	MOVLW	HIGH(_lcdPutHexByte_dat_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_lcdPutHexByte_dat_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVLW	0x03
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0xc6
	MOVWF	POSTDEC1
	CALL	_i2cWrite
	MOVLW	0x08
	ADDWF	FSR1L, F
	.line	279; /data/src/greenpower/carComputer/softwareC/picLib3.c	delayMs(10);
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0a
	MOVWF	POSTDEC1
	CALL	_delayMs
	MOVLW	0x02
	ADDWF	FSR1L, F
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__lcdWriteStr	code
_lcdWriteStr:
	.line	237; /data/src/greenpower/carComputer/softwareC/picLib3.c	void lcdWriteStr(UInt8 x, UInt8 y, char* str){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
	MOVLW	0x04
	MOVFF	PLUSW2, r0x02
	MOVLW	0x05
	MOVFF	PLUSW2, r0x03
	MOVLW	0x06
	MOVFF	PLUSW2, r0x04
	.line	238; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWaitForIdle();
	CALL	_i2cWaitForIdle
	.line	240; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPADD = 0x09;		// Set the baud rate to 100KHz at 4MHz CLK
	MOVLW	0x09
	MOVWF	_SSPADD
	.line	242; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cStart();
	CALL	_i2cStart
	.line	244; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(0xC6);
	MOVLW	0xc6
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	.line	245; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(0x00);
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	.line	246; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(0xFE);
	MOVLW	0xfe
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
; ;multiply lit val:0x40 by variable r0x01 and store in r0x01
; ;Unrolled 8 X 8 multiplication
; ;FIXME: the function does not support result==WREG
	.line	247; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(128 + (y * 64) + x);
	MOVF	r0x01, W
	MULLW	0x40
	MOVFF	PRODL, r0x01
	MOVLW	0x80
	ADDWF	r0x01, F
	MOVF	r0x01, W
	ADDWF	r0x00, F
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	.line	249; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(*str){
	MOVFF	r0x02, r0x00
	MOVFF	r0x03, r0x01
	MOVFF	r0x04, r0x02
_00247_DS_:
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrget1
	MOVWF	r0x03
	MOVF	r0x03, W
	BZ	_00249_DS_
	.line	250; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(*str++);
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	BRA	_00247_DS_
_00249_DS_:
	.line	253; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(0xFF);
	MOVLW	0xff
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	.line	255; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cStop();
	CALL	_i2cStop
	.line	256; /data/src/greenpower/carComputer/softwareC/picLib3.c	delayMs(10);
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0a
	MOVWF	POSTDEC1
	CALL	_delayMs
	MOVLW	0x02
	ADDWF	FSR1L, F
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__lcdPutChar	code
_lcdPutChar:
	.line	227; /data/src/greenpower/carComputer/softwareC/picLib3.c	void lcdPutChar(char c){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	.line	230; /data/src/greenpower/carComputer/softwareC/picLib3.c	dat[0] = c;
	MOVF	r0x00, W
	BANKSEL	_lcdPutChar_dat_1_1
	MOVWF	_lcdPutChar_dat_1_1, B
	BANKSEL	(_lcdPutChar_dat_1_1 + 1)
	.line	231; /data/src/greenpower/carComputer/softwareC/picLib3.c	dat[1] = 255;
	SETF	(_lcdPutChar_dat_1_1 + 1), B
	.line	233; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWrite(0xC6, 0, I2cSlow8, dat, 2);
	MOVLW	HIGH(_lcdPutChar_dat_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_lcdPutChar_dat_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVLW	0x02
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0xc6
	MOVWF	POSTDEC1
	CALL	_i2cWrite
	MOVLW	0x08
	ADDWF	FSR1L, F
	.line	234; /data/src/greenpower/carComputer/softwareC/picLib3.c	delayMs(10);
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0a
	MOVWF	POSTDEC1
	CALL	_delayMs
	MOVLW	0x02
	ADDWF	FSR1L, F
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__lcdInit	code
_lcdInit:
	.line	219; /data/src/greenpower/carComputer/softwareC/picLib3.c	void lcdInit(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	.line	220; /data/src/greenpower/carComputer/softwareC/picLib3.c	UInt8	dat[] = { 254,1,255 };
	MOVLW	0xfe
	BANKSEL	_lcdInit_dat_1_1
	MOVWF	_lcdInit_dat_1_1, B
	MOVLW	0x01
	BANKSEL	(_lcdInit_dat_1_1 + 1)
	MOVWF	(_lcdInit_dat_1_1 + 1), B
	BANKSEL	(_lcdInit_dat_1_1 + 2)
	SETF	(_lcdInit_dat_1_1 + 2), B
	.line	223; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWrite(0xC6, 0, I2cSlow8, dat, sizeof(dat));
	MOVLW	HIGH(_lcdInit_dat_1_1)
	MOVWF	r0x01
	MOVLW	LOW(_lcdInit_dat_1_1)
	MOVWF	r0x00
	MOVLW	0x80
	MOVWF	r0x02
	MOVLW	0x03
	MOVWF	POSTDEC1
	MOVF	r0x02, W
	MOVWF	POSTDEC1
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0xc6
	MOVWF	POSTDEC1
	CALL	_i2cWrite
	MOVLW	0x08
	ADDWF	FSR1L, F
	.line	224; /data/src/greenpower/carComputer/softwareC/picLib3.c	delayMs(10);
	MOVLW	0x00
	MOVWF	POSTDEC1
	MOVLW	0x0a
	MOVWF	POSTDEC1
	CALL	_delayMs
	MOVLW	0x02
	ADDWF	FSR1L, F
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cRead	code
_i2cRead:
	.line	183; /data/src/greenpower/carComputer/softwareC/picLib3.c	Int8 i2cRead(UInt8 chipAddress, UInt16 regAddress, I2cMode mode, UInt8* dat, UInt8 len){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVFF	r0x06, POSTDEC1
	MOVFF	r0x07, POSTDEC1
	MOVFF	r0x08, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
	MOVLW	0x04
	MOVFF	PLUSW2, r0x02
	MOVLW	0x05
	MOVFF	PLUSW2, r0x03
	MOVLW	0x06
	MOVFF	PLUSW2, r0x04
	MOVLW	0x07
	MOVFF	PLUSW2, r0x05
	MOVLW	0x08
	MOVFF	PLUSW2, r0x06
	MOVLW	0x09
	MOVFF	PLUSW2, r0x07
	.line	184; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWaitForIdle();
	CALL	_i2cWaitForIdle
	.line	186; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(mode & 0x01)
	BTFSS	r0x03, 0
	BRA	_00212_DS_
	.line	187; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPADD = 0x02;		// Set the baud rate to 333KHz at 4MHz CLK
	MOVLW	0x02
	MOVWF	_SSPADD
	BRA	_00213_DS_
_00212_DS_:
	.line	189; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPADD = 0x09;		// Set the baud rate to 100KHz at 4MHz CLK
	MOVLW	0x09
	MOVWF	_SSPADD
_00213_DS_:
	.line	191; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cStart();
	CALL	_i2cStart
	.line	193; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(chipAddress);
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	.line	194; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(mode & 0x02)
	BTFSS	r0x03, 1
	BRA	_00215_DS_
	.line	195; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(regAddress >> 8);
	MOVF	r0x02, W
	MOVWF	r0x03
	CLRF	r0x08
	MOVF	r0x03, W
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
_00215_DS_:
	.line	196; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(regAddress);
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	.line	198; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cRepStart();
	CALL	_i2cRepStart
	.line	200; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(chipAddress | 0x01);
	BSF	r0x00, 0
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	.line	202; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(len > 1){
	MOVFF	r0x04, r0x00
	MOVFF	r0x05, r0x01
	MOVFF	r0x06, r0x02
	MOVFF	r0x07, r0x03
_00216_DS_:
	MOVLW	0x02
	SUBWF	r0x03, W
	BNC	_00218_DS_
	.line	203; /data/src/greenpower/carComputer/softwareC/picLib3.c	*dat++ = i2cGetByte(1);
	MOVLW	0x01
	MOVWF	POSTDEC1
	CALL	_i2cGetByte
	MOVWF	r0x04
	INCF	FSR1L, F
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	.line	204; /data/src/greenpower/carComputer/softwareC/picLib3.c	len--;
	DECF	r0x03, F
	BRA	_00216_DS_
_00218_DS_:
	.line	206; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(len != 0){
	MOVF	r0x03, W
	BZ	_00220_DS_
	.line	207; /data/src/greenpower/carComputer/softwareC/picLib3.c	*dat++ = i2cGetByte(0);
	MOVLW	0x00
	MOVWF	POSTDEC1
	CALL	_i2cGetByte
	MOVWF	r0x03
	INCF	FSR1L, F
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrput1
_00220_DS_:
	.line	210; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cStop();
	CALL	_i2cStop
	.line	212; /data/src/greenpower/carComputer/softwareC/picLib3.c	return 0;
	CLRF	WREG
	MOVFF	PREINC1, r0x08
	MOVFF	PREINC1, r0x07
	MOVFF	PREINC1, r0x06
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cWrite	code
_i2cWrite:
	.line	158; /data/src/greenpower/carComputer/softwareC/picLib3.c	Int8 i2cWrite(UInt8 chipAddress, UInt16 regAddress, I2cMode mode, UInt8* dat, UInt8 len){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVFF	r0x04, POSTDEC1
	MOVFF	r0x05, POSTDEC1
	MOVFF	r0x06, POSTDEC1
	MOVFF	r0x07, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
	MOVLW	0x04
	MOVFF	PLUSW2, r0x02
	MOVLW	0x05
	MOVFF	PLUSW2, r0x03
	MOVLW	0x06
	MOVFF	PLUSW2, r0x04
	MOVLW	0x07
	MOVFF	PLUSW2, r0x05
	MOVLW	0x08
	MOVFF	PLUSW2, r0x06
	MOVLW	0x09
	MOVFF	PLUSW2, r0x07
	.line	159; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWaitForIdle();
	CALL	_i2cWaitForIdle
	.line	161; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(mode & 0x01)
	BTFSS	r0x03, 0
	BRA	_00191_DS_
	.line	162; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPADD = 0x02;		// Set the baud rate to 333KHz at 4MHz CLK
	MOVLW	0x02
	MOVWF	_SSPADD
	BRA	_00192_DS_
_00191_DS_:
	.line	164; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPADD = 0x09;		// Set the baud rate to 100KHz at 4MHz CLK
	MOVLW	0x09
	MOVWF	_SSPADD
_00192_DS_:
	.line	166; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cStart();
	CALL	_i2cStart
	.line	168; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(chipAddress);
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	.line	169; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(mode & 0x02)
	BTFSS	r0x03, 1
	BRA	_00194_DS_
	.line	170; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(regAddress >> 8);
	MOVF	r0x02, W
	MOVWF	r0x00
	CLRF	r0x03
	MOVF	r0x00, W
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
_00194_DS_:
	.line	171; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(regAddress);
	MOVF	r0x01, W
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	.line	173; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(len--){
	MOVFF	r0x04, r0x00
	MOVFF	r0x05, r0x01
	MOVFF	r0x06, r0x02
	MOVFF	r0x07, r0x03
_00195_DS_:
	MOVFF	r0x03, r0x04
	DECF	r0x03, F
	MOVF	r0x04, W
	BZ	_00197_DS_
	.line	174; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cPutByte(*dat++);
	MOVFF	r0x00, FSR0L
	MOVFF	r0x01, PRODL
	MOVF	r0x02, W
	CALL	__gptrget1
	MOVWF	r0x04
	INCF	r0x00, F
	BTFSC	STATUS, 0
	INCF	r0x01, F
	BTFSC	STATUS, 0
	INCF	r0x02, F
	MOVF	r0x04, W
	MOVWF	POSTDEC1
	CALL	_i2cPutByte
	INCF	FSR1L, F
	BRA	_00195_DS_
_00197_DS_:
	.line	177; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cStop();
	CALL	_i2cStop
	.line	179; /data/src/greenpower/carComputer/softwareC/picLib3.c	return 0;
	CLRF	WREG
	MOVFF	PREINC1, r0x07
	MOVFF	PREINC1, r0x06
	MOVFF	PREINC1, r0x05
	MOVFF	PREINC1, r0x04
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cGetByte	code
_i2cGetByte:
	.line	139; /data/src/greenpower/carComputer/softwareC/picLib3.c	UInt8 i2cGetByte(UInt8 ack){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	.line	142; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWaitForIdle();
	CALL	_i2cWaitForIdle
	.line	143; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON2bits.RCEN = 1;
	BSF	_SSPCON2bits, 3
	.line	144; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWaitForIdle();
	CALL	_i2cWaitForIdle
	.line	145; /data/src/greenpower/carComputer/softwareC/picLib3.c	v = SSPBUF;
	MOVFF	_SSPBUF, r0x01
	.line	146; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWaitForIdle();
	CALL	_i2cWaitForIdle
	.line	148; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(ack)
	MOVF	r0x00, W
	BZ	_00183_DS_
	.line	149; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON2bits.ACKDT = 0;
	BCF	_SSPCON2bits, 5
	BRA	_00184_DS_
_00183_DS_:
	.line	151; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON2bits.ACKDT = 1;
	BSF	_SSPCON2bits, 5
_00184_DS_:
	.line	153; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON2bits.ACKEN = 1;				// Send acknowledge sequence
	BSF	_SSPCON2bits, 4
	.line	155; /data/src/greenpower/carComputer/softwareC/picLib3.c	return v;
	MOVF	r0x01, W
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cPutByte	code
_i2cPutByte:
	.line	128; /data/src/greenpower/carComputer/softwareC/picLib3.c	void i2cPutByte(UInt8 v){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVLW	0x02
	MOVFF	PLUSW2, _SSPBUF
	.line	134; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWaitForIdle();
	CALL	_i2cWaitForIdle
	.line	135; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPBUF = v;
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cStop	code
_i2cStop:
	.line	122; /data/src/greenpower/carComputer/softwareC/picLib3.c	void i2cStop(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	123; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWaitForIdle();
	CALL	_i2cWaitForIdle
	.line	124; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON2bits.PEN = 1;
	BSF	_SSPCON2bits, 2
_00169_DS_:
	.line	125; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(SSPCON2bits.PEN);
	BTFSC	_SSPCON2bits, 2
	BRA	_00169_DS_
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cRepStart	code
_i2cRepStart:
	.line	116; /data/src/greenpower/carComputer/softwareC/picLib3.c	void i2cRepStart(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	117; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWaitForIdle();
	CALL	_i2cWaitForIdle
	.line	118; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON2bits.RSEN = 1;
	BSF	_SSPCON2bits, 1
_00161_DS_:
	.line	119; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(SSPCON2bits.RSEN);
	BTFSC	_SSPCON2bits, 1
	BRA	_00161_DS_
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cStart	code
_i2cStart:
	.line	110; /data/src/greenpower/carComputer/softwareC/picLib3.c	void i2cStart(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	111; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cWaitForIdle();
	CALL	_i2cWaitForIdle
	.line	112; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON2bits.SEN = 1;
	BSF	_SSPCON2bits, 0
_00153_DS_:
	.line	113; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(SSPCON2bits.SEN);
	BTFSC	_SSPCON2bits, 0
	BRA	_00153_DS_
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cWaitForIdle	code
_i2cWaitForIdle:
	.line	99; /data/src/greenpower/carComputer/softwareC/picLib3.c	Int8 i2cWaitForIdle(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	.line	102; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(((SSPCON2 & 0x1F) | SSPSTATbits.R_W) && --to);	// Wait for idle and not writing
	MOVLW	0xff
	MOVWF	r0x00
_00138_DS_:
	MOVLW	0x1f
	ANDWF	_SSPCON2, W
	MOVWF	r0x01
	CLRF	r0x02
	BTFSC	_SSPSTATbits, 2
	INCF	r0x02, F
	MOVF	r0x02, W
	IORWF	r0x01, F
	MOVF	r0x01, W
	BZ	_00148_DS_
	DECF	r0x00, F
	MOVF	r0x00, W
	BNZ	_00138_DS_
_00148_DS_:
	MOVFF	r0x00, r0x01
	.line	105; /data/src/greenpower/carComputer/softwareC/picLib3.c	if(!to)
	MOVF	r0x00, W
	BNZ	_00142_DS_
	.line	106; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cReset();
	CALL	_i2cReset
_00142_DS_:
	.line	107; /data/src/greenpower/carComputer/softwareC/picLib3.c	return !to;
	MOVF	r0x01, W
	BSF	STATUS, 0
	TSTFSZ	WREG
	BCF	STATUS, 0
	CLRF	r0x01
	RLCF	r0x01, F
	MOVF	r0x01, W
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cWaitForIdle1	code
_i2cWaitForIdle1:
	.line	95; /data/src/greenpower/carComputer/softwareC/picLib3.c	void i2cWaitForIdle1(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
_00129_DS_:
	.line	96; /data/src/greenpower/carComputer/softwareC/picLib3.c	while((SSPCON2 & 0x1F) | SSPSTATbits.R_W);	// Wait for idle and not writing
	MOVLW	0x1f
	ANDWF	_SSPCON2, W
	MOVWF	r0x00
	CLRF	r0x01
	BTFSC	_SSPSTATbits, 2
	INCF	r0x01, F
	MOVF	r0x01, W
	IORWF	r0x00, F
	MOVF	r0x00, W
	BNZ	_00129_DS_
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cInit	code
_i2cInit:
	.line	75; /data/src/greenpower/carComputer/softwareC/picLib3.c	void i2cInit(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	76; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPSTAT &= 0x3f;
	MOVLW	0x3f
	ANDWF	_SSPSTAT, F
	.line	78; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON1 = 0x28;		// Set I2C master mode
	MOVLW	0x28
	MOVWF	_SSPCON1
	.line	79; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON2 = 0x00;
	CLRF	_SSPCON2
	.line	80; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPADD = 0x09;		// Set the baud rate to 100KHz at 4MHz
	MOVLW	0x09
	MOVWF	_SSPADD
	.line	82; /data/src/greenpower/carComputer/softwareC/picLib3.c	TRISCbits.TRISC3 = 1;	// Enable pins
	BSF	_TRISCbits, 3
	.line	83; /data/src/greenpower/carComputer/softwareC/picLib3.c	TRISCbits.TRISC4 = 1;
	BSF	_TRISCbits, 4
	.line	88; /data/src/greenpower/carComputer/softwareC/picLib3.c	PIR1bits.SSPIF = 0;	// clear SSPIF interrupt flag
	BCF	_PIR1bits, 3
	.line	89; /data/src/greenpower/carComputer/softwareC/picLib3.c	PIR2bits.BCLIF = 0;	// clear bus collision flag
	BCF	_PIR2bits, 3
	.line	91; /data/src/greenpower/carComputer/softwareC/picLib3.c	i2cReset();
	CALL	_i2cReset
	.line	92; /data/src/greenpower/carComputer/softwareC/picLib3.c	PORTBbits.RB5 = 0;
	BCF	_PORTBbits, 5
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__i2cReset	code
_i2cReset:
	.line	52; /data/src/greenpower/carComputer/softwareC/picLib3.c	void i2cReset(){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	.line	53; /data/src/greenpower/carComputer/softwareC/picLib3.c	PORTBbits.RB5 = 1;
	BSF	_PORTBbits, 5
	.line	55; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON1bits.SSPEN = 0;	// Disable I2C hardware
	BCF	_SSPCON1bits, 5
	.line	56; /data/src/greenpower/carComputer/softwareC/picLib3.c	TRISCbits.TRISC3 = 0;
	BCF	_TRISCbits, 3
	.line	57; /data/src/greenpower/carComputer/softwareC/picLib3.c	PORTCbits.RC3 = 1;
	BSF	_PORTCbits, 3
_00116_DS_:
	.line	60; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(!PORTCbits.RC4){
	BTFSC	_PORTCbits, 4
	BRA	_00118_DS_
	.line	61; /data/src/greenpower/carComputer/softwareC/picLib3.c	PORTCbits.RC3 = 0;
	BCF	_PORTCbits, 3
	.line	62; /data/src/greenpower/carComputer/softwareC/picLib3.c	PORTCbits.RC3 = 1;
	BSF	_PORTCbits, 3
	BRA	_00116_DS_
_00118_DS_:
	.line	66; /data/src/greenpower/carComputer/softwareC/picLib3.c	TRISCbits.TRISC4 = 0;
	BCF	_TRISCbits, 4
	.line	67; /data/src/greenpower/carComputer/softwareC/picLib3.c	PORTCbits.RC4 = 0;
	BCF	_PORTCbits, 4
	.line	68; /data/src/greenpower/carComputer/softwareC/picLib3.c	PORTCbits.RC4 = 1;
	BSF	_PORTCbits, 4
	.line	70; /data/src/greenpower/carComputer/softwareC/picLib3.c	TRISCbits.TRISC3 = 1;	// Enable pins
	BSF	_TRISCbits, 3
	.line	71; /data/src/greenpower/carComputer/softwareC/picLib3.c	TRISCbits.TRISC4 = 1;
	BSF	_TRISCbits, 4
	.line	72; /data/src/greenpower/carComputer/softwareC/picLib3.c	SSPCON1bits.SSPEN = 1;	// Re-enable I2C hardware
	BSF	_SSPCON1bits, 5
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
S_carLog1__delayMs	code
_delayMs:
	.line	27; /data/src/greenpower/carComputer/softwareC/picLib3.c	void delayMs(UInt16 n){
	MOVFF	FSR2L, POSTDEC1
	MOVFF	FSR1L, FSR2L
	MOVFF	r0x00, POSTDEC1
	MOVFF	r0x01, POSTDEC1
	MOVFF	r0x02, POSTDEC1
	MOVFF	r0x03, POSTDEC1
	MOVLW	0x02
	MOVFF	PLUSW2, r0x00
	MOVLW	0x03
	MOVFF	PLUSW2, r0x01
_00105_DS_:
	.line	30; /data/src/greenpower/carComputer/softwareC/picLib3.c	while(n--){
	MOVFF	r0x00, r0x02
	MOVFF	r0x01, r0x03
	MOVLW	0xff
	ADDWF	r0x00, F
	BTFSS	STATUS, 0
	DECF	r0x01, F
	MOVF	r0x02, W
	IORWF	r0x03, W
	BZ	_00111_DS_
	.line	31; /data/src/greenpower/carComputer/softwareC/picLib3.c	for(c = 0; c < 250; c++){
	MOVLW	0xfa
	MOVWF	r0x02
_00110_DS_:
	nop 
	DECFSZ	r0x02, F
	BRA	_00110_DS_
	.line	31; /data/src/greenpower/carComputer/softwareC/picLib3.c	for(c = 0; c < 250; c++){
	BRA	_00105_DS_
_00111_DS_:
	MOVFF	PREINC1, r0x03
	MOVFF	PREINC1, r0x02
	MOVFF	PREINC1, r0x01
	MOVFF	PREINC1, r0x00
	MOVFF	PREINC1, FSR2L
	RETURN	

; ; Starting pCode block
__str_0:
	DB	0x53, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x42, 0x20, 0x20, 0x20
	DB	0x20, 0x20, 0x20, 0x25, 0x00
; ; Starting pCode block
__str_1:
	DB	0x49, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x20, 0x20, 0x20
	DB	0x20, 0x20, 0x20, 0x20, 0x00
; ; Starting pCode block
__str_2:
	DB	0x56, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x20, 0x20, 0x20
	DB	0x20, 0x20, 0x20, 0x20, 0x00
; ; Starting pCode block
__str_3:
	DB	0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x20, 0x20, 0x20
	DB	0x20, 0x20, 0x20, 0x20, 0x00
; ; Starting pCode block
__str_4:
	DB	0x53, 0x41, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x41, 0x20, 0x20
	DB	0x20, 0x20, 0x20, 0x20, 0x00
; ; Starting pCode block
__str_5:
	DB	0x53, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x20
	DB	0x20, 0x20, 0x20, 0x20, 0x00
; ; Starting pCode block
__str_6:
	DB	0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x53, 0x65
	DB	0x74, 0x20, 0x20, 0x20, 0x00
; ; Starting pCode block
__str_7:
	DB	0x4c, 0x6f, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x20
	DB	0x20, 0x20, 0x20, 0x20, 0x00
; ; Starting pCode block
__str_8:
	DB	0x42, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x20, 0x4c, 0x6f, 0x77, 0x20
	DB	0x20, 0x20, 0x20, 0x20, 0x00
; ; Starting pCode block
__str_9:
	DB	0x41, 0x41, 0x00
; ; Starting pCode block
__str_10:
	DB	0x43, 0x61, 0x72, 0x20, 0x58, 0x00
; ; Starting pCode block
__str_11:
	DB	0x52, 0x65, 0x61, 0x64, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x52, 0x6f, 0x6c
	DB	0x6c, 0x20, 0x2e, 0x2e, 0x2e, 0x2e, 0x00


; Statistics:
; code size:	11752 (0x2de8) bytes ( 8.97%)
;           	 5876 (0x16f4) words
; udata size:	  387 (0x0183) bytes (30.23%)
; access size:	   12 (0x000c) bytes


	end
