Mercurial > public > mk2
changeset 79:69c462400279
Making CF edition esier
author | JeanDo |
---|---|
date | Mon, 06 Dec 2010 18:00:13 +0100 |
parents | bd16d5830b06 |
children | d2d7cb96100d |
files | code_part1/OSTC_code_asm_part1/menu_custom.asm code_part1/OSTC_code_asm_part1/menu_reset.asm |
diffstat | 2 files changed, 374 insertions(+), 307 deletions(-) [+] |
line wrap: on
line diff
--- a/code_part1/OSTC_code_asm_part1/menu_custom.asm Tue Dec 07 21:06:45 2010 +0100 +++ b/code_part1/OSTC_code_asm_part1/menu_custom.asm Mon Dec 06 18:00:13 2010 +0100 @@ -43,6 +43,19 @@ ; get values with GETCUSTOM8 .x with x=0...32 for 8 Bit values (stored in WREG) ; or with GETCUSTOM15 .x with x=0...32 for 15 Bit values (stored in lo and hi) +; [jDG] 2010-11-30 More fancy displsy of the various CF types +; data types. When we do have a 8bit data (bit16=0), the high byte serves to +; define the display format: + +CF_INT8 EQU 0 ; Default display, 8 or 15 bits values. +CF_PERCENT EQU 1 ; Displays 110% +CF_DECI EQU 2 ; Displays 1.6 +CF_CENTI EQU 3 ; Displays 1.50 +CF_MILI EQU 4 ; Displays 1.015 +CF_BOOL EQU 5 ; Displays ON/OFF +CF_SEC EQU 6 ; Displays 4:00 +CF_COLOR EQU 7 ; Display 240 plus a color watch (inverse video space) +CF_INT15 EQU 0x80; Default display. Flag for 15bit, typeless values. GETCUSTOM8 macro custom8 movlw custom8 @@ -150,6 +163,23 @@ WIN_INVERT .0 ; Init new Wordprocessor menu_custom_functions1: + +#ifndef NO_CF_TYPES + ;---- Clear color swatches area ------------------------------------------ + ; BEWARE: PLED_box reset the EEADRH register, so t should be + ; be done before setting CF page I/II... + clrf WREG ; Black background + movff WREG,box_temp+0 ; Set color + movlw .125 + movff WREG,box_temp+1 ; row top (0-239) + movlw .178 + movff WREG,box_temp+2 ; row bottom (0-239) + movlw .75 + movff WREG,box_temp+3 ; column left (0-159) + movlw .150 + movff WREG,box_temp+4 ; column right (0-159) + call PLED_box +#endif call PLED_standard_color movlw d'1' @@ -169,7 +199,7 @@ btfsc customfunction_page ; Add offset for display movlw d'32' addwf lo,F - movff lo,apnoe_mins ; apnoe_mins used as temp for binary CFs + movff lo, apnoe_mins ; Copy use when NO_CF_TYPES output_99x movlw ':' @@ -182,47 +212,74 @@ addwf decodata+0,W ; add # of current custom function, place result in wreg call displaytext1 ; shows descriptor + ; Read defaults into hi:lo + movf divemins+0,W + addlw 0x80 + movwf EEADR + call read_eeprom ; Lowbyte + movff EEDATA,lo + movf divemins+0,W + addlw 0x81 + movwf EEADR + call read_eeprom ; Highbyte + movff EEDATA,hi + +#ifdef NO_CF_TYPES movlw binary_cf1 subwf apnoe_mins,W ; Binary cf? - btfsc STATUS,Z - bra menu_custom_functions10c ; Yes + bz menu_custom_functions10c ; Yes movlw binary_cf2 subwf apnoe_mins,W ; Binary cf? - btfsc STATUS,Z - bra menu_custom_functions10c ; Yes + bz menu_custom_functions10c ; Yes movlw binary_cf3 subwf apnoe_mins,W ; Binary cf? - btfsc STATUS,Z - bra menu_custom_functions10c ; Yes + bz menu_custom_functions10c ; Yes movlw binary_cf4 subwf apnoe_mins,W ; Binary cf? - btfsc STATUS,Z - bra menu_custom_functions10c ; Yes + bz menu_custom_functions10c ; Yes movlw binary_cf5 subwf apnoe_mins,W ; Binary cf? - btfsc STATUS,Z - bra menu_custom_functions10c ; Yes + bz menu_custom_functions10c ; Yes movlw binary_cf6 subwf apnoe_mins,W ; Binary cf? - btfsc STATUS,Z - bra menu_custom_functions10c ; Yes + bz menu_custom_functions10c ; Yes - - bra menu_custom_functions10a ; Not a binary CF selected + bra menu_custom_functions10a ; Not a binary CF... +#else + movf hi,W ; Is it a ON/OFF flag ? + xorlw CF_BOOL + bnz menu_custom_functions10a ; Not a binary CF selected +#endif menu_custom_functions10c: - movlw d'1' - movwf apnoe_mins ; Yes, set apnoe_mins to "1" + setf apnoe_mins ; Yes, set apnoe_mins to 0xFF + + WIN_LEFT .20 + WIN_TOP .65 + lfsr FSR2,letter ; Make a string of 8 spaces + movlw ' ' + movwf POSTINC2 + movwf POSTINC2 + movwf POSTINC2 + movwf POSTINC2 + movwf POSTINC2 + movwf POSTINC2 + movwf POSTINC2 + movwf POSTINC2 + call word_processor ; Clear +/- line + + WIN_TOP .95 + call word_processor ; Clear 1/10 line bra menu_custom_functions10b menu_custom_functions10a: clrf apnoe_mins ; Yes, clear apnoe_mins -menu_custom_functions10b: + WIN_LEFT .20 WIN_TOP .65 lfsr FSR2,letter @@ -266,69 +323,42 @@ movwf POSTINC2 call word_processor +menu_custom_functions10b: WIN_LEFT .20 WIN_TOP .125 lfsr FSR2,letter OUTPUTTEXT d'89' ;"Default:" - - movf divemins+0,W - addlw 0x80 - movwf EEADR - call read_eeprom ; Lowbyte - movff EEDATA,lo - movf divemins+0,W - addlw 0x81 - movwf EEADR - call read_eeprom ; Highbyte - movff EEDATA,hi - bcf hi,7 ; clear Bit 7 of value - output_16 - movlw ',' + movlw ' ' movwf POSTINC2 - movlw '1' - btfss EEDATA,7 ; 15Bit? - movlw '8' ; 8Bit! - tstfsz apnoe_mins ; apnoe_mins=0? - movlw '1' ; No, 1Bit! - movwf POSTINC2 - - movlw '5' - btfsc EEDATA,7 ; 15Bit? - movwf POSTINC2 - movlw 'B' - movwf POSTINC2 - movlw ' ' - movwf POSTINC2 - movlw ' ' - movwf POSTINC2 - movlw ' ' - movwf POSTINC2 - call word_processor + call display_customfunction ; Typed display. WIN_LEFT .20 WIN_TOP .155 lfsr FSR2,letter OUTPUTTEXT d'97' ; "Current:" + movlw ' ' + movwf POSTINC2 movf divemins+0,W addlw 0x82 movwf EEADR call read_eeprom ; Lowbyte movff EEDATA,lo + movf divemins+0,W addlw 0x83 movwf EEADR call read_eeprom ; Highbyte + + btfss hi,7 ; A 15bit value ? + bra menu_custom_functions1b ; No : keep types there ! + movff EEDATA,hi - output_16 - movlw ' ' - movwf POSTINC2 - movlw ' ' - movwf POSTINC2 - movlw ' ' - movwf POSTINC2 - call word_processor + bsf hi,7 ; Mark it a 15bit value. + +menu_custom_functions1b: + call display_customfunction menu_custom_functions1a: DISPLAYTEXT .11 ; Exit @@ -378,6 +408,136 @@ bcf menubit3 ; clear flag bra customfunctions_loop +;----------------------------------------------------------------------------- +; Input : hi:lo = data to display, with type embebed into hi +; FSR2 = current string pointer. +; Trash : FSR1 (used to backup EEADRH and hi) + +display_customfunction: +#ifndef NO_CF_TYPES + movff EEADRH, FSR1H ; Backup... + movff hi, FSR1L + + ;---- decode type -------------------------------------------------------- + movf hi,W ; Just set N/Z flags + bn cf_type_0 ; Keep 15bits value in old format. + bz cf_type_99 ; 8bit standard mode + + ; Jump table: + dcfsnz hi + bra cf_type_01 + dcfsnz hi + bra cf_type_02 + dcfsnz hi + bra cf_type_03 + dcfsnz hi + bra cf_type_04 + dcfsnz hi + bra cf_type_05 + dcfsnz hi + bra cf_type_06 + dcfsnz hi + bra cf_type_07 + bra cf_type_99 ; Default to 8bit mode... + +cf_type_01: ; Type == 1 is percent mode + output_16dp 0 ; NOTE : hi is already reseted... + movlw '%' + movwf POSTINC2 + bra cf_done + +cf_type_02: ; Type == 2 is deci mode. + output_16dp 4 + bra cf_done + +cf_type_03: ; Type == 3 is centi mode. + output_16dp 3 + bra cf_done + +cf_type_04: ; Type == 4 is mili mode + output_16dp 2 + bra cf_done + +cf_type_05: ; Type == 5 is on/off mode. + movf lo,W ; Get flag value... + bz cf_type_off + OUTPUTTEXT d'130' ; ON + bra cf_done +cf_type_off: + OUTPUTTEXT d'131' ; OFF + bra cf_done + +cf_type_06: ; Type == 6 is mm:ss mode (... or hh:mm) + call convert_time ; Convert to min:sec into hi:low. + movff lo,wp_temp ; Save seconds, + movff hi,lo ; Get minutes + output_8 ; Print them + movlw ':' ; Separator + movwf POSTINC2 + movff wp_temp,lo ; Get back seconds + output_99x ; lo in 2 digits with trailing zeros. + bra cf_done + +cf_type_07: ; Type == 7 is Color swatch. + output_8 + + movf lo,W ; Get color. + movff WREG,box_temp+0 ; Set color + movff win_top,WREG ; BEWARE : this is a bank0 variable ! + movff WREG,box_temp+1 ; row top (0-239) + addlw .23 + movff WREG,box_temp+2 ; row bottom (0-239) + movlw .110 + movff WREG,box_temp+3 ; column left (0-159) + movlw .140 + movff WREG,box_temp+4 ; column right (0-159) + + call PLED_box + bra cf_done ; W/o trailling spaces... + +cf_type_99: ; 8bit mode. Or unrecognized type... + clrf hi + +cf_type_0: ; 15bit mode. + bcf hi,7 + output_16 + +cf_done: + movff FSR1L, hi ; Restore saved registers... + movff FSR1H, EEADRH +#else + bcf hi,7 ; clear Bit 7 of value + output_16 + + movff win_top,WREG ; Get "Default:" line position (BANK0 !) + xorlw .125 ; This is the default value ? + bnz cf_no_bits ; NO: skip bits for current value + + movlw ',' + movwf POSTINC2 + + movlw '1' + btfss EEDATA,7 ; 15Bit? + movlw '8' ; 8Bit! + tstfsz apnoe_mins ; apnoe_mins=0? + movlw '1' ; No, 1Bit! + movwf POSTINC2 + + movlw '5' + btfsc EEDATA,7 ; 15Bit? + movwf POSTINC2 + movlw 'B' + movwf POSTINC2 + +cf_no_bits: + movlw ' ' + movwf POSTINC2 + movwf POSTINC2 + movwf POSTINC2 +#endif + goto word_processor + +;----------------------------------------------------------------------------- do_customfunction: CLRF EEADRH @@ -475,8 +635,7 @@ call read_eeprom ; Highbyte movff EEDATA,divemins+1 ; Highbyte of default value - movlw d'1' - cpfseq apnoe_mins ; If apnoe_mins=1 then CF is binary + btfss apnoe_mins,0 ; If apnoe_mins=1 then CF is binary bra adjust_cfn_value1 ; Not Binary tstfsz lo ; =0? @@ -559,6 +718,11 @@ call read_eeprom ; Highbyte movff EEDATA,hi clrf EEADRH +#ifndef NO_CF_TYPES + btfss hi,7 ; Is it a 15bit value ? + clrf hi ; NO: clear type flags. +#endif + bcf hi,7 ; Always clear 15bit flag. return ; return custom_functions_check_divemode: ;displays warning if a critical custom function is not set to default
--- a/code_part1/OSTC_code_asm_part1/menu_reset.asm Tue Dec 07 21:06:45 2010 +0100 +++ b/code_part1/OSTC_code_asm_part1/menu_reset.asm Mon Dec 06 18:00:13 2010 +0100 @@ -27,6 +27,118 @@ ; routines to reset custom function, gases and decompression values ; does not reset clock +;============================================================================= +; CF default values +; + +; Macro to check values, and construct PROM CF default table. +; If in types mode, set flags into hi. If not, clear it. +CF_DEFAULT macro type, value + if ( type == CF_INT15 ) + if (HIGH value) > .127 + error "15bit default too big:", value + endif + DB LOW value, 0x80 + (HIGH value) + else + ; Basic sanity check for 8bit values: + if ( HIGH value ) > 0 + error "8bit default too big:", value + endif + if (type==CF_BOOL) && (value > 1) + error "BOOL default too big:", value + endif + ifdef NO_CF_TYPES + DB LOW value, HIGH value + else + DB LOW value, type + endif + endif + endm + +; resets all customfunctions to the following default values +cf_default_table: + ;---- BANK0 custom function defaults ------------------------------------- + CF_DEFAULT CF_CENTI, d'100' ; dive_threshold 100cm + CF_DEFAULT CF_CENTI, d'30' ; surf_threshold 30cm + CF_DEFAULT CF_SEC, d'240' ; diveloop_timeout 240s + CF_DEFAULT CF_SEC, d'120' ; surfloop_timeout 120s + CF_DEFAULT CF_SEC, d'5' ; premenu_timeout 5s + + CF_DEFAULT CF_INT8, d'7' ; minimum_velocity 7min/min + CF_DEFAULT CF_INT15, d'1160' ; pressure_offset_divemode 1160mBar + CF_DEFAULT CF_INT15, d'1100' ; max_surfpressure 1100mBar + CF_DEFAULT CF_PERCENT, d'20' ; min_gradient_factor 20% + CF_DEFAULT CF_PERCENT, d'20' ; oxygen_threshold 20% + + CF_DEFAULT CF_SEC, d'30' ; dive_menu_timeout 30s + CF_DEFAULT CF_PERCENT, d'110' ; saturation_multiplier x1.10 + CF_DEFAULT CF_PERCENT, d'90' ; desaturation_multiplier x0.90 + CF_DEFAULT CF_PERCENT, d'60' ; nofly_time_ratio 60% + CF_DEFAULT CF_PERCENT, d'100' ; gradient_factor_alarm1 100% + + CF_DEFAULT CF_PERCENT, d'10' ; cns_display_surface 10% + CF_DEFAULT CF_INT8, d'10' ; deco_distance_for_sim 1m + CF_DEFAULT CF_CENTI, d'019' ; ppo2_warning_low 0.19 Bar + CF_DEFAULT CF_CENTI, d'160' ; ppo2_warning_high 1.60 Bar + CF_DEFAULT CF_CENTI, d'150' ; ppo2_display_high 1.50 Bar + + CF_DEFAULT CF_INT8, d'10' ; sampling_rate 10s + CF_DEFAULT CF_INT8, d'6' ; sampling_divisor_temp /6 + CF_DEFAULT CF_INT8, d'6' ; sampling_divisor_deco /6 + CF_DEFAULT CF_INT8, d'0' ; sampling_divisor_tank never + CF_DEFAULT CF_INT8, d'0' ; sampling_divisor_ppo2 never + + CF_DEFAULT CF_INT8, d'0' ; sampling_divisor_deco2 never + CF_DEFAULT CF_INT8, d'0' ; sampling_divisor_nyu2 never + CF_DEFAULT CF_PERCENT, d'20' ; cns_display_high 20% + CF_DEFAULT CF_INT8, d'0' ; logbook_offset No Offset, but 15Bit value + CF_DEFAULT CF_INT8, d'3' ; last_deco_depth 3m + + CF_DEFAULT CF_SEC, d'10' ; timeout_apnoe_mode 10min + CF_DEFAULT CF_BOOL, d'0' ; show_voltage_value =1 Show value instead of symbol, =0 Show Symbol + + ;---- BANK1 custom function defaults ------------------------------------- + CF_DEFAULT CF_PERCENT, d'30' ; GF_low_default 30% + CF_DEFAULT CF_PERCENT, d'90' ; GF_high_default 90% + CF_DEFAULT CF_COLOR, d'199' ; color_battery_surface Color Battery sign: Deep blue + CF_DEFAULT CF_COLOR, d'255' ; color_standard1 Color Standard: White + CF_DEFAULT CF_COLOR, d'62' ; color_divemask Color Divemask: Light green + CF_DEFAULT CF_COLOR, d'224' ; color_warnings Color Warnings: Red + + CF_DEFAULT CF_BOOL, d'0' ; show_seconds_divemode =1 Show the seconds in Divemode + CF_DEFAULT CF_BOOL, d'0' ; show_clock_divemode =1 Show the clock in Divemode + CF_DEFAULT CF_BOOL, d'1' ; warn_ceiling_divemode =1 Warn ceiling violation in divemode + CF_DEFAULT CF_BOOL, d'0' ; start_with_stopwatch =1 start with stopwatch + CF_DEFAULT CF_BOOL, d'0' ; blink_gas_divemode =1 Show (resetable) average Depth instead of temperature + + CF_DEFAULT CF_INT15, d'13000' ; color_warn_depth_mBar Warn depths + CF_DEFAULT CF_PERCENT, d'101' ; color_warn_cns_percent Warn-% + CF_DEFAULT CF_PERCENT, d'101' ; color_warn_gf_percent Warn-% + CF_DEFAULT CF_CENTI, d'161' ; color_warn_ppo2_cbar ppO2 warn + CF_DEFAULT CF_INT8, d'15' ; color_warn_celocity_mmin warn at xx m/min + + CF_DEFAULT CF_SEC, d'42' ; time_correction_value_default Adds to Seconds on Midnight + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED + + CF_DEFAULT CF_INT15, 0 ; UNUSED + CF_DEFAULT CF_INT15, 0 ; UNUSED +;============================================================================= + menu_reset: movlw d'1' movwf menupos @@ -166,7 +278,6 @@ rcall reset_customfunction ; saves default and current value for gas #6 reset_all_cf: -; resets all customfunctions to the following default values movlw d'1' movwf EEDATA write_int_eeprom d'33' ; reset start gas @@ -211,270 +322,58 @@ movwf nofly_time+0 ; Clear nofly time clrf nofly_time+1 ; Clear nofly time -#DEFINE dive_threshold d'100' ; 8BIT 100cm -#DEFINE surf_threshold d'30' ; 8BIT 30cm -#DEFINE diveloop_timeout d'240' ; 8BIT 240s -#DEFINE surfloop_timeout d'120' ; 8BIT 120s -#DEFINE premenu_timeout d'5' ; 8BIT 5s - -#DEFINE minimum_velocity d'7' ; 8BIT 7min/min -#DEFINE pressure_offset_divemode d'1160' ; 15BIT 1160mBar -#DEFINE max_surfpressure d'1100' ; 15BIT 1100mBar -#DEFINE min_gradient_factor d'20' ; 8Bit 20% -#DEFINE oxygen_threshold d'20' ; 8Bit 20% - -#DEFINE dive_menu_timeout d'30' ; 8BIT 30s -#DEFINE saturation_multiplier d'110' ; 8BIT x1.1 -#DEFINE desaturation_multiplier d'90' ; 8BIT x0.9 -#DEFINE nofly_time_ratio d'60' ; 8BIT 60% -#DEFINE gradient_factor_alarm1 d'100' ; 8Bit 100% - -#DEFINE cns_display_surface d'10' ; 8Bit 10% -#DEFINE deco_distance_for_sim d'10' ; 8Bit 1m -#DEFINE ppo2_warning_low d'019' ; 8Bit 0.19 Bar -#DEFINE ppo2_warning_high d'160' ; 8Bit 1.60 Bar -#DEFINE ppo2_display_high d'150' ; 8Bit 1.50 Bar - -#DEFINE sampling_rate d'10' ; 8Bit 10s -#DEFINE sampling_divisor_temp d'6' ; 8Bit /6 -#DEFINE sampling_divisor_deco d'6' ; 8Bit /6 -#DEFINE sampling_divisor_tank d'0' ; 8Bit never -#DEFINE sampling_divisor_ppo2 d'0' ; 8Bit never - -#DEFINE sampling_divisor_deco2 d'0' ; 8Bit never -#DEFINE sampling_divisor_nyu2 d'0' ; 8Bit never -#DEFINE cns_display_high d'20' ; 8Bit 20% -#DEFINE logbook_offset d'0' ; 15Bit No Offset, but 15Bit value -#DEFINE last_deco_depth d'3' ; 8Bit 3m -#DEFINE timeout_apnoe_mode d'10' ; 8Bit 10min -#DEFINE show_voltage_value d'0' ; 1Bit =1 Show value instead of symbol, =0 Show Symbol - -#DEFINE GF_low_default d'30' ; 8Bit 30% -#DEFINE GF_high_default d'90' ; 8Bit 90% -#DEFINE color_battery_surface d'199' ; 8Bit Color Battery sign: Deep blue -#DEFINE color_standard1 d'255' ; 8Bit Color Standard: White -#DEFINE color_divemask d'62' ; 8Bit Color Divemask: Light green -#DEFINE color_warnings d'224' ; 8Bit Color Warnings: Red - -#DEFINE show_seconds_divemode d'0' ; 1Bit =1 Show the seconds in Divemode -#DEFINE show_clock_divemode d'0' ; 1Bit =1 Show the clock in Divemode -#DEFINE warn_ceiling_divemode d'1' ; 1Bit =1 Warn ceiling violation in divemode -#DEFINE start_with_stopwatch d'0' ; 1Bit =1 start with stopwatch -#DEFINE blink_gas_divemode d'0' ; 1Bit =1 Show (resetable) average Depth instead of temperature - -#DEFINE color_warn_depth_mBar d'13000' ; 15Bit Warn depths -#DEFINE color_warn_cns_percent d'101' ; 8Bit Warn-% -#DEFINE color_warn_gf_percent d'101' ; 8Bit Warn-% -#DEFINE color_warn_ppo2_cbar d'161' ; 8Bit ppO2 warn -#DEFINE color_warn_celocity_mmin d'15' ; 8Bit warn at xx m/min - -#DEFINE time_correction_value_default d'42' ; 8Bit Adds to Seconds on Midnight - +reset_all_cf_bank0: + clrf EEADRH movlw d'127' ; address of low byte of first custom function movwf EEADR - clrf hi ; only required once - movlw LOW dive_threshold ; 8Bit value - rcall reset_customfunction ; saves default and current value - movlw LOW surf_threshold - rcall reset_customfunction ; saves default and current value - - movlw LOW diveloop_timeout - rcall reset_customfunction ; saves default and current value - - movlw LOW surfloop_timeout - rcall reset_customfunction ; saves default and current value - - movlw LOW premenu_timeout - rcall reset_customfunction ; saves default and current value - - movlw LOW minimum_velocity - rcall reset_customfunction ; saves default and current value - - movlw HIGH pressure_offset_divemode - movwf hi - bsf hi,7 ; 15Bit value - movlw LOW pressure_offset_divemode - rcall reset_customfunction ; saves default and current value - - movlw HIGH max_surfpressure - movwf hi - bsf hi,7 ; 15Bit value - movlw LOW max_surfpressure - rcall reset_customfunction ; saves default and current value - - movlw LOW min_gradient_factor - rcall reset_customfunction ; saves default and current value - - movlw LOW oxygen_threshold - rcall reset_customfunction ; saves default and current value - - movlw LOW dive_menu_timeout - rcall reset_customfunction ; saves default and current value - - movlw LOW saturation_multiplier - rcall reset_customfunction ; saves default and current value - - movlw LOW desaturation_multiplier - rcall reset_customfunction ; saves default and current value - - movlw LOW nofly_time_ratio - rcall reset_customfunction ; saves default and current value - - movlw LOW gradient_factor_alarm1 - rcall reset_customfunction ; saves default and current value + movlw LOW cf_default_table ; Load PROM pointer. + movwf TBLPTRL,A + movlw HIGH cf_default_table + movwf TBLPTRH,A + movlw UPPER cf_default_table + movwf TBLPTRU,A - movlw LOW cns_display_surface - rcall reset_customfunction ; saves default and current value - - movlw LOW deco_distance_for_sim - rcall reset_customfunction ; saves default and current value - - movlw LOW ppo2_warning_low - rcall reset_customfunction ; saves default and current value - - movlw LOW ppo2_warning_high - rcall reset_customfunction ; saves default and current value - - movlw LOW ppo2_display_high - rcall reset_customfunction ; saves default and current value - - movlw LOW sampling_rate - rcall reset_customfunction ; saves default and current value +cf_bank0_loop: + ; Did we already read 32 (decimal) bytes ? + movf TBLPTRL,W + sublw LOW (cf_default_table+.64) + bz reset_all_cf_bank1 - movlw LOW sampling_divisor_temp - rcall reset_customfunction ; saves default and current value - - movlw LOW sampling_divisor_deco - rcall reset_customfunction ; saves default and current value - - movlw LOW sampling_divisor_tank + tblrd*+ + movf TABLAT, W ; Low byte in WREG, + tblrd*+ + movff TABLAT, hi ; High byte in hi rcall reset_customfunction ; saves default and current value - - movlw LOW sampling_divisor_ppo2 - rcall reset_customfunction ; saves default and current value - - movlw LOW sampling_divisor_deco2 - rcall reset_customfunction ; saves default and current value - - movlw LOW sampling_divisor_nyu2 - rcall reset_customfunction ; saves default and current value - - movlw LOW cns_display_high - rcall reset_customfunction ; saves default and current value - - clrf hi - bsf hi,7 ; 15Bit value - movlw LOW logbook_offset - rcall reset_customfunction ; saves default and current value - - movlw LOW last_deco_depth - rcall reset_customfunction ; saves default and current value - - movlw LOW timeout_apnoe_mode - rcall reset_customfunction ; saves default and current value - - movlw LOW show_voltage_value - rcall reset_customfunction ; saves default and current value + bra cf_bank0_loop reset_all_cf_bank1: movlw d'1' movwf EEADRH ; EEPROM BANK 1 !! movlw d'127' ; address of low byte of first custom function movwf EEADR - clrf hi ; only required once/bank - movlw LOW GF_low_default - rcall reset_customfunction ; saves default and current value - - movlw LOW GF_high_default - rcall reset_customfunction ; saves default and current value - - movlw color_battery_surface - rcall reset_customfunction ; saves default and current value - - movlw color_standard1 - rcall reset_customfunction ; saves default and current value - - movlw color_divemask - rcall reset_customfunction ; saves default and current value - - movlw color_warnings - rcall reset_customfunction ; saves default and current value - - movlw show_seconds_divemode - rcall reset_customfunction ; saves default and current value - - movlw show_clock_divemode - rcall reset_customfunction ; saves default and current value - - movlw warn_ceiling_divemode - rcall reset_customfunction ; saves default and current value - - movlw start_with_stopwatch - rcall reset_customfunction ; saves default and current value - - movlw blink_gas_divemode - rcall reset_customfunction ; saves default and current value - - movlw HIGH color_warn_depth_mBar - movwf hi - bsf hi,7 ; 15Bit value - movlw LOW color_warn_depth_mBar - rcall reset_customfunction ; saves default and current value - - movlw color_warn_cns_percent - rcall reset_customfunction ; saves default and current value +cf_bank1_loop: + ; Did we already read another 32 (decimal) bytes ? + movf TBLPTRL,W + sublw LOW (cf_default_table+.128) + bz cf_bank1_end - movlw color_warn_gf_percent - rcall reset_customfunction ; saves default and current value - - movlw color_warn_ppo2_cbar - rcall reset_customfunction ; saves default and current value - - movlw color_warn_celocity_mmin - rcall reset_customfunction ; saves default and current value - - movlw time_correction_value_default - rcall reset_customfunction ; saves default and current value - - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' + tblrd*+ + movf TABLAT, W ; Low byte in WREG, + tblrd*+ + movff TABLAT, hi ; High byte in hi rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value - movlw d'0' - rcall reset_customfunction ; saves default and current value + bra cf_bank1_loop +cf_bank1_end: clrf EEADRH ; EEPROM BANK 0 ! - ;call reset_external_eeprom ; delete profile memory goto restart ; all reset, quit to surfmode +; Write the four bytes lo:hi:lo:(hi w/o type flags) into EEPROM +; Don't change hi:lo values... reset_customfunction: movwf lo incf EEADR,F @@ -487,10 +386,14 @@ movff lo, EEDATA ; Lowbyte current value call write_eeprom incf EEADR,F - bcf hi,7 ; This bit will only be written for the default value movff hi, EEDATA ; Highbyte current value +#ifdef NO_CF_TYPES + bcf EEDATA,7 ; This bit will only be written for the default value +#else + btfss EEDATA,7 ; A 15bit value ? + clrf EEDATA ; Nope: clear type flag. +#endif call write_eeprom - clrf hi return