Mercurial > public > mk2
changeset 516:b498245da3f1
imperial units patch from Vlad
author | heinrichsweikamp |
---|---|
date | Mon, 05 Dec 2011 20:40:10 +0100 |
parents | cc09222a204f |
children | a73a452ca155 |
files | code_part1/OSTC_code_asm_part1/definitions.asm code_part1/OSTC_code_asm_part1/divemode.asm code_part1/OSTC_code_asm_part1/divemode_menu.asm code_part1/OSTC_code_asm_part1/english_text.asm code_part1/OSTC_code_asm_part1/menu_reset.asm code_part1/OSTC_code_asm_part1/pled_outputs.asm |
diffstat | 6 files changed, 338 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/code_part1/OSTC_code_asm_part1/definitions.asm Mon Dec 05 14:31:31 2011 +0100 +++ b/code_part1/OSTC_code_asm_part1/definitions.asm Mon Dec 05 20:40:10 2011 +0100 @@ -357,6 +357,7 @@ gaslist_active res 1 ; Holds flags for active gases desaturation_time_buffer res 2 ; buffer for desat time total_divetime_seconds res 2 ; counts dive seconds regardless of CF01 (18h max.) +temp11 res 1 ; used for unit conversion ;============================================================================= ; C-code Routines @@ -528,7 +529,7 @@ #DEFINE display_set_active flag13,2 ;=1: De/Activate gases underwater menu is visible #DEFINE deco_mode_changed flag13,3 ;=1: The Decomode was changes, show decomode description! #DEFINE pled_velocity_display flag13,4 ;=1: Velocity is displayed -#DEFINE depth_greater_100m flag13,5 ;=1: Depth is greater then 100m +#DEFINE depth_greater_100 flag13,5 ;=1: Depth is greater then 100 units #DEFINE display_set_setpoint flag13,6 ;=1: SetPoint list active #DEFINE toggle_customview flag13,7 ;=1: Next customview @@ -547,7 +548,7 @@ #DEFINE blinking_better_gas flag15,3 ;=1: Gas is currently blinking #DEFINE menu3_active flag15,4 ;=1: menu entry three in divemode menu is active #DEFINE no_deco_customviews flag15,5 ;=1: Selected mode is Apnoe or Gauge -#DEFINE maxdepth_greater_100m flag15,6 ;=1: Max Depth greater>100m +#DEFINE maxdepth_greater_100 flag15,6 ;=1: Max Depth greater>100 units #DEFINE show_cns_in_logbook flag15,7 ;=1: Show CNS value in logbook (>= V1.84)
--- a/code_part1/OSTC_code_asm_part1/divemode.asm Mon Dec 05 14:31:31 2011 +0100 +++ b/code_part1/OSTC_code_asm_part1/divemode.asm Mon Dec 05 20:40:10 2011 +0100 @@ -1744,7 +1744,7 @@ clrf average_depth_hold_total+1 clrf average_depth_hold_total+2 clrf average_depth_hold_total+3 ; Clear Non-Resettable Average - bcf depth_greater_100m ; clear flag + bcf depth_greater_100 ; clear flag setf last_diluent ; to be displayed after first calculation (range: 0 to 100 [%]) bcf dekostop_active bcf is_bailout ;=1: CC mode, but bailout active!
--- a/code_part1/OSTC_code_asm_part1/divemode_menu.asm Mon Dec 05 14:31:31 2011 +0100 +++ b/code_part1/OSTC_code_asm_part1/divemode_menu.asm Mon Dec 05 20:40:10 2011 +0100 @@ -351,6 +351,20 @@ divemode_menu_simulator2: dcfsnz menupos,F bra timeout_divemenu2 ; close underwater menu! + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfss WREG,0 ; Enabled ? + bra divemode_menu_simulator3 ; NO + dcfsnz menupos,F + bra divemode_menu_simulator_p1ft ; Adjust +1ft + dcfsnz menupos,F + bra divemode_menu_simulator_m1ft ; Adjust -1ft + dcfsnz menupos,F + bra divemode_menu_simulator_p10ft ; Adjust +10ft + dcfsnz menupos,F + bra divemode_menu_simulator_m10ft ; Adjust -10ft + bra divemode_menu_simulator4 + +divemode_menu_simulator3: dcfsnz menupos,F bra divemode_menu_simulator_p1 ; Adjust +1m dcfsnz menupos,F @@ -359,6 +373,8 @@ bra divemode_menu_simulator_p10 ; Adjust +10m dcfsnz menupos,F bra divemode_menu_simulator_m10 ; Adjust -10m + +divemode_menu_simulator4: dcfsnz menupos,F bra divemode_menu_simulator_quit; Adjust to zero m bra timeout_divemenu2 ; quit underwater menu! @@ -413,6 +429,25 @@ movwf menupos ; reset cursor bra divemode_menu_simulator_common +divemode_menu_simulator_m10ft: + movlw LOW d'305' + subwf sim_pressure+0,F + movlw HIGH d'305' + subwfb sim_pressure+1,F + movlw d'5' + movwf menupos ; reset cursor + bra divemode_menu_simulator_common + +divemode_menu_simulator_p10ft: + movlw LOW d'305' + addwf sim_pressure+0,F + movlw HIGH d'305' + addwfc sim_pressure+1,F + + movlw d'4' + movwf menupos ; reset cursor + bra divemode_menu_simulator_common + divemode_menu_simulator_quit: movlw LOW d'1000' movwf sim_pressure+0 @@ -438,6 +473,24 @@ movwf menupos ; reset cursor bra divemode_menu_simulator_common +divemode_menu_simulator_p1ft: + movlw d'30' + addwf sim_pressure+0,F + movlw d'0' + addwfc sim_pressure+1,F + movlw d'2' + movwf menupos ; reset cursor + bra divemode_menu_simulator_common + +divemode_menu_simulator_m1ft: + movlw d'30' + subwf sim_pressure+0,F + movlw d'0' + subwfb sim_pressure+1,F + movlw d'3' + movwf menupos ; reset cursor + bra divemode_menu_simulator_common + divemenu_see_decoplan: bsf display_see_deco ; set flag call PLED_clear_divemode_menu ; Clear Menu
--- a/code_part1/OSTC_code_asm_part1/english_text.asm Mon Dec 05 14:31:31 2011 +0100 +++ b/code_part1/OSTC_code_asm_part1/english_text.asm Mon Dec 05 20:40:10 2011 +0100 @@ -68,7 +68,10 @@ #DEFINE TXT_METER5 "m " ; "m " #DEFINE TXT_METER3 "m " ; "m " #DEFINE TXT_METER2 "m " ; "m " -#DEFINE TXT_METER1 "m" ; "m" +#DEFINE TXT_METER1 "m" ; "m" +#DEFINE TXT_FOOT_C 'f' ; 'f' +#DEFINE TXT_FOOT4 "ft " ; "ft " +#DEFINE TXT_FOOT2 "ft" ; "ft" #DEFINE TXT_MBAR7 " mbar " ; " mbar " #DEFINE TXT_MBAR5 "mbar " ; "mbar " #DEFINE TXT_BAR4 "bar " ; "bar " @@ -314,7 +317,7 @@ TCODE .40, .35, "Graph. Velocity" ;182 Graph. Velocity (Show a graphical representation of the ascend speed) TCODE .40, .35, "not used " ;183 not used TCODE .40, .35, "not used " ;184 not used - TCODE .40, .35, "not used " ;185 not used + TCODE .40, .35, "Imperial units " ;185 Show depth in feet and temperature in Fahrenheit ; End of function descriptor II ; TCODE .13, .2, "Custom Functions II" ;186 Custom Functions II @@ -470,4 +473,11 @@ ; OLED Brightness settings TCODE .103, .155, "Eco " ;312 Eco (Same length as #313!) TCODE .103, .155, "High" ;313 High (Same length as #312!) +; Simulator menu with imperial units + TCODE .100, .25, "+ 1ft" ;314 +1ft + TCODE .100, .50, "- 1ft" ;315 -1ft + TCODE .100, .75, "+ 10ft" ;316 +10ft + TCODE .100, .100, "- 10ft" ;317 -10ft + + TCODE .0, .0, "ft/min" ;318 ft/min ;=============================================================================
--- a/code_part1/OSTC_code_asm_part1/menu_reset.asm Mon Dec 05 14:31:31 2011 +0100 +++ b/code_part1/OSTC_code_asm_part1/menu_reset.asm Mon Dec 05 20:40:10 2011 +0100 @@ -187,7 +187,7 @@ CF_DEFAULT CF_INT15, 0, 0, 0 ; UNUSED CF_DEFAULT CF_INT15, 0, 0, 0 ; UNUSED - CF_DEFAULT CF_INT15, 0, 0, 0 ; UNUSED + CF_DEFAULT CF_BOOL, d'0', 0, 0 ; CF63 Imperial units (feet,fahrenheit) CF_DEFAULT CF_INT15, 0, 0, 0 ; UNUSED cf_default_table2:
--- a/code_part1/OSTC_code_asm_part1/pled_outputs.asm Mon Dec 05 14:31:31 2011 +0100 +++ b/code_part1/OSTC_code_asm_part1/pled_outputs.asm Mon Dec 05 20:40:10 2011 +0100 @@ -463,19 +463,43 @@ ostc_debug 'y' ; Sends debug-information to screen if debugmode active WIN_TOP .80 - WIN_LEFT .94 WIN_FONT FT_MEDIUM WIN_INVERT .0 ; Init new Wordprocessor PLED_color_code warn_ceiling ; Color-code Output lfsr FSR2,letter movff char_O_first_deco_depth,lo ; Ceiling in m + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfss WREG,0 ; Enabled ? + bra PLED_display_deko3 ; NO + WIN_LEFT .80 + clrf hi + call convert_meters_to_feet2 ; converts meters to feet, don't check CF#63 + output_16_3 + call word_processor + + WIN_TOP .91 + WIN_LEFT .115 + WIN_FONT FT_SMALL + lfsr FSR2,letter + STRCPY_PRINT TXT_FOOT2 ; Print 'ft' in small font + + WIN_TOP .80 + WIN_LEFT .130 + WIN_FONT FT_MEDIUM + lfsr FSR2,letter + bra PLED_display_deko4 + +PLED_display_deko3: + WIN_LEFT .94 output_99 PUTC TXT_METER_C - movff char_O_first_deco_time,lo ; length of first stop in m + +PLED_display_deko4: + movff char_O_first_deco_time,lo ; length of first stop in min output_99 STRCAT_PRINT "'" WIN_FONT FT_SMALL - + ;PLED_display_deko1: ostc_debug 'x' ; Sends debug-information to screen if debugmode active @@ -561,6 +585,17 @@ movff sim_btm_depth,lo bsf leftbind + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfss WREG,0 ; Enabled ? + bra PLED_simulator_data_3 ; NO + clrf hi + call convert_meters_to_feet2 ; converts meters to feet, don't check CF#63 + output_16_3 + STRCAT_PRINT TXT_FOOT4 + bcf leftbind + return + +PLED_simulator_data_3: output_8 STRCAT_PRINT TXT_METER3 @@ -699,9 +734,21 @@ movlw '+' movwf POSTINC2 movff divA+0,lo + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfss WREG,0 ; Enabled ? + bra PLED_display_velocity2 ; NO + clrf hi + call convert_meters_to_feet2 ; converts meters to feet, don't check CF#63 + output_16_3 + OUTPUTTEXTH d'318' ; ft/min + bra PLED_display_velocity3 + +PLED_display_velocity2: output_99 OUTPUTTEXT d'83' ; m/min - call word_processor + +PLED_display_velocity3: + call word_processor call PLED_standard_color bsf pled_velocity_display return @@ -715,7 +762,7 @@ WIN_BOX_BLACK .20, .90, .65, .75 ; Clear graphic display PLED_display_velocity_clear1: - movlw d'8' + movlw d'10' movwf temp1 WIN_TOP .90 WIN_LEFT .0 @@ -834,6 +881,17 @@ GETCUSTOM8 d'29' movwf lo bsf leftbind + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfss WREG,0 ; Enabled ? + bra PLED_show_cf11_cf12_cf29_3 ; NO + clrf hi + call convert_meters_to_feet2 + output_16 + STRCAT_PRINT TXT_FOOT2 + bcf leftbind + return + +PLED_show_cf11_cf12_cf29_3: output_8 STRCAT_PRINT TXT_METER1 @@ -997,6 +1055,7 @@ WIN_TOP .177 STRCPY "temp:" SAFE_2BYTE_COPY temperature, lo + call convert_celsius_to_fahrenheit call PLED_convert_signed_temperature ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required output_16 call word_processor @@ -1108,12 +1167,19 @@ movff last_temperature+1,hi movff last_temperature+0,lo lfsr FSR2,letter + call convert_celsius_to_fahrenheit call PLED_convert_signed_temperature ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required movlw d'3' movwf ignore_digits bsf leftbind ; left orientated output output_16dp d'2' bcf leftbind + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfss WREG,0 ; Enabled ? + bra PLED_show_C ; NO + STRCAT_PRINT "°F " + return +PLED_show_C: STRCAT_PRINT "°C " return @@ -1133,6 +1199,7 @@ movff last_temperature+0,lo lfsr FSR2,letter + call convert_celsius_to_fahrenheit call PLED_convert_signed_temperature ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required movlw d'3' movwf ignore_digits @@ -1696,15 +1763,16 @@ PLED_depth: ostc_debug 'r' ; Sends debug-information to screen if debugmode active SAFE_2BYTE_COPY rel_pressure, lo - call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] + call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] + call convert_meters_to_feet ; converts meters to feet movlw .039 cpfslt hi - bra depth_greater_99_84mtr - - btfsc depth_greater_100m ; Was depth>100m during last call + bra pled_depth_full_units_only + + btfsc depth_greater_100 ; Was depth>100 during last call call PLED_clear_depth ; Yes, clear depth area - bcf depth_greater_100m ; Do this once only... + bcf depth_greater_100 ; Do this once only... lfsr FSR2,letter @@ -1718,8 +1786,8 @@ movlw d'0' addwfc sub_b+1,F ; Add 1mbar offset call sub16 ; sub_c = sub_a - sub_b - btfss neg_flag ; Depth lower then 10m? - rcall depth_less_10mtr ; Yes, add extra space + btfss neg_flag ; Depth lower then 10? + rcall depth_less_10 ; Yes, add extra space WIN_TOP .24 WIN_LEFT .0 @@ -1734,7 +1802,7 @@ movff hi,sub_b+1 movff lo,sub_b+0 call sub16 ; sub_c = sub_a - sub_b - btfss neg_flag ; Depth lower then 1m? + btfss neg_flag ; Depth lower then 1? bra pled_depth2 ; Yes, display manual Zero bsf leftbind @@ -1750,6 +1818,10 @@ call word_processor bcf ignore_digit4 + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfsc WREG,0 ; Enabled ? + bra pled_depth6 ; YES, don't print any fractions + WIN_FONT FT_MEDIUM WIN_TOP .50 WIN_LEFT .40 @@ -1782,14 +1854,16 @@ pled_depth5: call word_processor ; decimeters in medium font bcf ignore_digit5 + +pled_depth6: WIN_FONT FT_SMALL return -depth_greater_99_84mtr: ; Display only in full meters - btfss depth_greater_100m ; Is depth>100m already? +pled_depth_full_units_only: ; Display only in full meters or feet + btfss depth_greater_100 ; Is depth>100 already? call PLED_clear_depth ; No, clear depth area and set flag ; Depth is already in hi:lo - ; Show depth in Full meters + ; Show depth in Full units ; That means ignore figure 4 and 5 lfsr FSR2,letter WIN_TOP .24 @@ -1807,13 +1881,13 @@ WIN_FONT FT_SMALL return -depth_less_10mtr: +depth_less_10: PUTC ' ' return PLED_clear_depth ; No, clear depth area and set flag WIN_BOX_BLACK .24, .90, .0, .90 ;top, bottom, left, right - bsf depth_greater_100m ; Set Flag + bsf depth_greater_100 ; Set Flag return PLED_desaturation_time: @@ -2177,10 +2251,15 @@ movff max_pressure+0,lo movff max_pressure+1,hi call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] + call convert_meters_to_feet ; converts meters to feet + + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfsc WREG,0 ; Enabled ? + bra PLED_maxdepth_full_units_only ; YES, don't print any feet fractions movlw .039 cpfslt hi - bra maxdepth_greater_99_84mtr + bra PLED_maxdepth_full_units_only ; Display normal "xx.y" lfsr FSR2,letter @@ -2198,11 +2277,11 @@ WIN_FONT FT_SMALL return -maxdepth_greater_99_84mtr: ; Display only in full meters - btfss maxdepth_greater_100m ; Is max.depth>100m already? +PLED_maxdepth_full_units_only: ; Display only in full units (meters or feet) + btfss maxdepth_greater_100 ; Is max.depth>100 already? call PLED_clear_maxdepth ; No, clear maxdepth area and set flag ; max Depth is already in hi:lo - ; Show max depth in Full meters + ; Show max depth in Full units ; That means ignore figure 4 and 5 lfsr FSR2,letter call PLED_standard_color @@ -2222,7 +2301,7 @@ PLED_clear_maxdepth: WIN_BOX_BLACK .184, .215, .0, .41 ;top, bottom, left, right - bsf maxdepth_greater_100m ; Set Flag + bsf maxdepth_greater_100 ; Set Flag return PLED_divemins: @@ -2376,7 +2455,6 @@ ostc_debug 'U' ; Sends debug-information to screen if debugmode active WIN_TOP .216 - WIN_LEFT .110 WIN_FONT FT_SMALL call PLED_standard_color @@ -2384,6 +2462,20 @@ movff avr_rel_pressure+0,lo movff avr_rel_pressure+1,hi call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfss WREG,0 ; Enabled ? + bra PLED_stopwatch_show3 ; NO + WIN_LEFT .124 + call convert_meters_to_feet2 ; converts meters to feet, don't check CF#63 + bsf ignore_digit4 ; do not display feet fractions + output_16 + bcf ignore_digit4 + bcf leftbind + STRCAT_PRINT TXT_FOOT2 + return + +PLED_stopwatch_show3: + WIN_LEFT .110 bsf ignore_digit5 ; do not display 1cm depth output_16dp d'3' bcf leftbind @@ -2425,14 +2517,33 @@ call word_processor ostc_debug 'U' ; Sends debug-information to screen if debugmode active - WIN_TOP .136 - WIN_LEFT .90 + WIN_TOP .137 WIN_FONT FT_MEDIUM call PLED_standard_color lfsr FSR2,letter movff avr_rel_pressure+0,lo movff avr_rel_pressure+1,hi call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfss WREG,0 ; Enabled ? + bra PLED_stopwatch_show_gauge2 ; NO + WIN_LEFT .110 + call convert_meters_to_feet2 ; converts meters to feet, don't check CF#63 + bsf ignore_digit4 ; do not display feet fractions + output_16 + bcf ignore_digit4 + bcf leftbind + call word_processor + + WIN_TOP .149 + WIN_LEFT .145 + WIN_FONT FT_SMALL + lfsr FSR2,letter + STRCPY_PRINT TXT_FOOT2 + return + +PLED_stopwatch_show_gauge2: + WIN_LEFT .90 bsf ignore_digit5 ; do not display 1cm depth output_16dp d'3' bcf leftbind @@ -2447,8 +2558,7 @@ DISPLAYTEXTH d'281' ; Avr.Depth PLED_total_average_show2: - WIN_TOP .192 - WIN_LEFT .110 + WIN_TOP .193 WIN_FONT FT_SMALL call PLED_standard_color @@ -2456,6 +2566,20 @@ movff avr_rel_pressure_total+0,lo movff avr_rel_pressure_total+1,hi call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfss WREG,0 ; Enabled ? + bra PLED_total_average_show3 ; NO + WIN_LEFT .124 + call convert_meters_to_feet2 ; converts meters to feet, don't check CF#63 + bsf ignore_digit4 ; do not display feet fractions + bcf leftbind + output_16 + bcf ignore_digit4 + STRCAT_PRINT TXT_FOOT2 + return + +PLED_total_average_show3: + WIN_LEFT .110 bsf ignore_digit5 ; do not display 1cm depth bcf leftbind output_16dp d'3' @@ -2572,6 +2696,17 @@ PLED_divemode_simulator_mask: call PLED_standard_color DISPLAYTEXT .254 ; Close + GETCUSTOM8 d'63' ; Check CF#63 Conversion to imperial units + btfss WREG,0 ; Enabled ? + bra PLED_divemode_simulator_mask2 ; NO + DISPLAYTEXTH .314 ; + 1ft + DISPLAYTEXTH .315 ; - 1ft + DISPLAYTEXTH .316 ; + 10ft + DISPLAYTEXTH .317 ; - 10ft + DISPLAYTEXTH .306 ; Quit Sim + return + +PLED_divemode_simulator_mask2: DISPLAYTEXT .250 ; + 1m DISPLAYTEXT .251 ; - 1m DISPLAYTEXT .252 ; +10m @@ -2591,7 +2726,7 @@ PLED_decoplan_show_stop: ;---- Print depth ---------------------------------------------------- WIN_LEFT .100 - + btfss lo,7 ; Bit set ? bra PLED_decoplan_std_stop ; No : Just an usual stop. @@ -2606,9 +2741,22 @@ PLED_decoplan_nstd_stop: lfsr FSR2,letter bsf leftbind + GETCUSTOM8 d'63' ; Check CF#63 + btfss WREG,0 ; Enabled ? + bra PLED_decoplan_nstd_stop2 ; NO + movff hi,temp11 ; save hi + clrf hi ; + call convert_meters_to_feet2 ; converts meters to feet, don't check CF#63 + output_16_3 + STRCAT_PRINT " " + movff temp11,hi ; restore hi + bra PLED_decoplan_nstd_stop3 + +PLED_decoplan_nstd_stop2: output_8 ; outputs into Postinc2! STRCAT_PRINT TXT_METER2 +PLED_decoplan_nstd_stop3: ;---- Print duration ------------------------------------------------- WIN_LEFT .140 lfsr FSR2,letter @@ -2950,7 +3098,7 @@ return ; no, return PLED_clear_divemode_menu: - WIN_BOX_BLACK .0, .168, .85, .160 ;top, bottom, left, right + WIN_BOX_BLACK .0, .168, .82, .160 ;top, bottom, left, right return PLED_divemenu_cursor: @@ -3337,6 +3485,27 @@ lfsr FSR2,letter movff char_O_EAD,lo bsf leftbind + GETCUSTOM8 d'63' ; Check CF#63 + btfss WREG,0 ; Enabled ? + bra PLED_show_end_ead_divemode2 ; NO: return + clrf hi ; clear hi + call convert_meters_to_feet2 ; converts meters to feet, don't check CF#63 + output_16 ; Print EAD w/o leading space. + bcf leftbind + STRCAT_PRINT TXT_FOOT2 + + WIN_TOP .216 + lfsr FSR2,letter + movff char_O_END,lo + clrf hi ; clear hi + call convert_meters_to_feet2 ; converts meters to feet, don't check CF#63 + bsf leftbind + output_16 ; Print END w/o leading space. + bcf leftbind + STRCAT_PRINT TXT_FOOT2 + bra PLED_show_end_ead_divemode3 + +PLED_show_end_ead_divemode2: output_8 ; Print EAD w/o leading space. STRCAT_PRINT TXT_METER2 @@ -3347,6 +3516,7 @@ bcf leftbind STRCAT_PRINT TXT_METER2 +PLED_show_end_ead_divemode3: ; Show ppO2[Flush] iff in CCR mode & not in Bailout: btfsc is_bailout ; In bailout mode? return ; Yes: done. @@ -3859,4 +4029,71 @@ movff xC+0,lo movff xC+1,hi ; restore lo and hi with updated value - return \ No newline at end of file + return + + +convert_meters_to_feet: ; convert value in lo:hi from meters to feet + + GETCUSTOM8 d'63' ; Check CF#63 + btfss WREG,0 ; Enabled ? + return ; NO: return + +convert_meters_to_feet2: + movff lo,xA+0 + movff hi,xA+1 + + movlw LOW d'328' ; 328feet/100m + movwf xB+0 + movlw HIGH d'328' + movwf xB+1 + + call mult16x16 ; xA*xB=xC (lo:hi * 328) + + movlw d'50' ; round up + addwf xC+0,F + movlw 0 + addwfc xC+1,F + addwfc xC+2,F + addwfc xC+3,F + + movlw d'100' + movwf xB+0 + clrf xB+1 + + call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder + + movff xC+0,lo + movff xC+1,hi ; restore lo and hi with updated value + + return + +convert_celsius_to_fahrenheit: ; convert value in lo:hi from celsius to fahrenheit + + GETCUSTOM8 d'63' ; Check CF#63 + btfss WREG,0 ; Enabled ? + return ; NO: return + + movff lo,xA+0 + movff hi,xA+1 + + movlw d'18' ; 1C = 1.8F + movwf xB+0 + clrf xB+1 + + call mult16x16 ;xA*xB=xC (lo:hi * 18) + + movlw d'10' + movwf xB+0 + clrf xB+1 + + call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder + + movlw LOW d'320' ; 0C = 32F + addwf xC+0,F + movlw HIGH d'320' + addwfc xC+1,F + + movff xC+0,lo + movff xC+1,hi ; restore lo and hi with updated value + + return