diff src/divemode.asm @ 582:b455b31ce022

work on 2.97 stable
author heinrichsweikamp
date Mon, 26 Feb 2018 16:40:28 +0100
parents 54346c651b6a
children 6636cbe64c6d
line wrap: on
line diff
--- a/src/divemode.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/divemode.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File divemode.asm								REFACTORED VERSION V2.96a
+;   File divemode.asm								REFACTORED VERSION V2.98
 ;
 ;   Divemode
 ;
@@ -9,99 +9,119 @@
 ; HISTORY
 ;  2011-08-15 : [mH] moving from OSTC code
 
-#include    "hwos.inc"					; Mandatory header
-#include    "shared_definitions.h"		; Mailbox from/to p2_deco.c
-#include    "tft_outputs.inc"
-#include    "strings.inc"
-#include    "tft.inc"
-#include    "eeprom_rs232.inc"
-#include    "isr.inc"
-#include    "math.inc"
-#include    "wait.inc"
-#include    "customview.inc"
-#include    "start.inc"
-#include    "adc_lightsensor.inc"
-#include    "ghostwriter.inc"
-#include    "i2c.inc"
-#include    "calibrate.inc"
-#include    "convert.inc"
+#include "hwos.inc"						; Mandatory header
+#include "shared_definitions.h"			; Mailbox from/to p2_deco.c
+#include "tft_outputs.inc"
+#include "strings.inc"
+#include "tft.inc"
+#include "eeprom_rs232.inc"
+#include "isr.inc"
+#include "math.inc"
+#include "wait.inc"
+#include "customview.inc"
+#include "start.inc"
+#include "adc_lightsensor.inc"
+#include "ghostwriter.inc"
+#include "i2c.inc"
+#include "calibrate.inc"
+#include "convert.inc"
+
 
-gui     CODE
+	extern	TFT_dive_compass_heading
+	extern	do_line_menu
+	extern	do_main_divemenu
+	extern	option_save_all
+	extern	init_recording_params
+
+
+	;---- Private local variables -------------------------------------------------
+
+	CBLOCK	local1						; max size is 16 Byte !!!
+		apnoe_timeout_counter			; timeout counter for apnoe mode
+		average_depth_hold:4			; used in calculation of the average depth
+		sensor_setpoint					; sensor ppo2 in 0.01bar for deco routine
+		active_diluent					; backup of diluent gas for when switching back from bailout to CCR/pSCR loop
+		average_depth_hold_total:4		; used to calculate the average depth
+	ENDC								; used: 11 byte, remaining: 5 byte
+
+gui		CODE
+
+;=============================================================================
 
 	global	diveloop
 diveloop:
-    banksel common
-    call    speed_normal
-    call    diveloop_boot				; Boot tasks for all modes
+	banksel common
+	call	speed_normal
+	call	diveloop_boot				; Boot tasks for all modes
 
-    ; Startup Tasks for all modes
-    call    TFT_boot                	; Initialize TFT (includes clear screen)
-    bsf	    FLAG_TFT_divemode_mask		; Display mask
-    movff   customview_divemode,menupos3; Reload last customview
-    call    customview_mask         	; Redraw last custom view
+	; Startup Tasks for all modes
+	call	TFT_boot					; Initialize TFT (includes clear screen)
+	bsf		FLAG_TFT_divemode_mask		; Display mask
+	movff	customview_divemode,menupos3; Reload last customview
+	call	customview_mask				; Redraw last custom view
 
-    btfsc   FLAG_apnoe_mode
-    bsf	    realdive					; Set Realdive flag in Apnoe mode
+	btfsc	FLAG_apnoe_mode
+	bsf		realdive					; Set Realdive flag in Apnoe mode
 
-    btfsc   FLAG_apnoe_mode             ; Done for Apnoe or Gauge mode
-    bra     diveloop_loop_start
-    btfsc   FLAG_gauge_mode             ; Done for Apnoe or Gauge mode
-    bra     diveloop_loop_start
+	btfsc	FLAG_apnoe_mode				; Done for Apnoe or Gauge mode
+	bra		diveloop_loop_start
+	btfsc	FLAG_gauge_mode				; Done for Apnoe or Gauge mode
+	bra		diveloop_loop_start
 
-    bsf	    FLAG_TFT_display_ndl_mask	; display "NDL"
+	bsf		FLAG_TFT_display_ndl_mask	; display "NDL"
 
 	; +@5 init
-    clrf    WREG                    	; WAIT marker: display "---"
-    movff   WREG,char_I_sim_advance_time; bank safe clrf
-    movff   WREG,int_O_alternate_ascenttime+0
+	clrf	WREG						; WAIT marker: display "---"
+	movff	WREG,char_I_sim_advance_time
+	movff	WREG,int_O_alternate_ascenttime+0
 	bsf		WREG,int_not_yet_computed
 	bsf		WREG,int_invalid_flag
-    movff   WREG,int_O_alternate_ascenttime+1
+	movff	WREG,int_O_alternate_ascenttime+1
 
 diveloop_loop_start:
-    btfsc   FLAG_TFT_display_ndl_mask
-    call    TFT_display_ndl_mask
+	btfsc	FLAG_TFT_display_ndl_mask
+	call	TFT_display_ndl_mask
 
 
 diveloop_loop:							; The diveloop starts here
-    btfss   quarter_second_update
-    bra     diveloop_loop4a
+	btfss	quarter_second_update
+	bra		diveloop_loop1
+
+	; tasks any 1/4 second, any mode
+	bcf		quarter_second_update		; clear flag
 
-    ; tasks any 1/4 second, any mode
-    bcf     quarter_second_update		; clear flag
-    
-    movlw   .6
-    cpfseq  menupos3                    ; in compass view?
-    bra     diveloop_loop4a				; No, done.
+	movlw	.6
+	cpfseq	menupos3					; in compass view?
+	bra		diveloop_loop1				; No, done.
 
-    btfsc   alternative_divelayout		; In alternative layout mode?
-    bra	    diveloop_loop4a				; Yes, done. No Compass.
+	btfsc	alternative_divelayout		; In alternative layout mode?
+	bra		diveloop_loop1				; Yes, done. No Compass.
 
-; TFT Output routines	
-    extern  TFT_dive_compass_heading
-    call    TFT_dive_compass_heading    ; Yes, update compass heading value
-    bsf	    FLAG_TFT_temp_divemode		; Redraw temperature (Is slighty affected from compass heading arrow)
-; TFT Output routines	
+; TFT Output routines
+	call	TFT_dive_compass_heading	; Yes, update compass heading value
+	bsf		FLAG_TFT_temp_divemode		; Redraw temperature (is slightly affected from compass heading arrow)
+; TFT Output routines
 
-diveloop_loop4a:
-	btfss	onesecupdate					
+diveloop_loop1:
+	btfss	onesecupdate
 	bra		diveloop_loop3
-	
+
 ; tasks any new second...
-    bcf     onesecupdate				; one seconds update, clear flag here in case it's set again in ISR before all tasks are done.
+	bcf		onesecupdate				; one seconds update, clear flag here in case it's set again in ISR before all tasks are done.
 
-	;bsf	LEDg	; ### DEBUG - used to measure the time used by all deco code to see if there is enough margin each second ###	
+	;bsf	LEDg	; ### USE FOR DEBUG ONLY - RESETS RX CIRCUITRY ###
 
 	; display depth based on full seconds interval (nicer blinking)
-    btfss   alternative_divelayout
-    rcall   TFT_output4_normal
-    btfsc   alternative_divelayout
-    rcall   TFT_output4_alternative
-	
+	btfss	alternative_divelayout
+	rcall	TFT_output4_normal
+	btfsc	alternative_divelayout
+	rcall	TFT_output4_alternative
+
 	btfsc	FLAG_apnoe_mode				; Only in apnoe mode
-	bra		diveloop_loop1b				; One Second Tasks in Apnoe mode
-	
+	bra		diveloop_loop1_nonedeco		; One Second Tasks in Apnoe mode
+
 ; tasks any new second - only for deco modes
+diveloop_loop1_decomodes:
 	bsf		FLAG_TFT_divemins			; Display (new) divetime!
 	btfsc	show_safety_stop			; Show the safety stop?
 	bsf		FLAG_TFT_show_safety_stop	; Yes, show/delete if done.
@@ -111,9 +131,9 @@
 	btfsc	alternative_divelayout
 	rcall	TFT_output1_alternative
 
-	btfsc   FLAG_ccr_mode				; In CCR mode...
-	call    check_dive_autosp			; ...check for Auto-SP
-	
+	btfsc	FLAG_ccr_mode				; in CCR mode...
+	call	check_dive_autosp			; ...check for Auto-SP
+
 	call	calc_deko_divemode			; calculate decompression and set resulting display flags
 
 	btfss	alternative_divelayout
@@ -123,20 +143,19 @@
 
 	call	divemode_check_for_warnings	; Check for any warnings
 
-	bra		diveloop_loop1x				; Common Tasks
+	bra		diveloop_loop2				; Common Tasks
+
 
-	
 ; tasks any new second - only for apnoe mode
-diveloop_loop1b:
+diveloop_loop1_nonedeco:
 	rcall	divemode_apnoe_tasks		; 1 sec. Apnoe tasks
 	call	customview_second			; Do every-second tasks for the custom view area
-
-	;bra	diveloop_loop1x				; Common Tasks
+	;bra	diveloop_loop2				; Common Tasks
 
 ; continue tasks any new second, any mode
-diveloop_loop1x:
+diveloop_loop2:
 	rcall	timeout_divemode			; ** menu timeout? ** This routine sets the required flags
-	rcall	set_dive_modes				; tests if depth>threshold
+	rcall	set_dive_modes				; tests if depth > threshold
 	rcall	set_min_temp				; store min. temp if required (Future hardware will need this to be checked 1/second...)
 
 	btfsc	oneminupdate				; one minute tasks
@@ -147,75 +166,78 @@
 	btfsc	alternative_divelayout
 	rcall	TFT_output3_alternative
 
-	;bcf	LEDg	; ### DEBUG - used to measure the time used by all deco code to see if there is enough margin each second ###
+	;bcf	LEDg	; ### USE FOR DEBUG ONLY - RESETS RX CIRCUITRY ###
 
 ; tasks any round, any mode
 diveloop_loop3:
-    call	test_switches_divemode		; Check switches in divemode
-	
-    global  diveloop_loop4
+	call	test_switches_divemode		; Check switches in divemode
+
+	global	diveloop_loop4
 diveloop_loop4:							; Menu-Exit returns here...
 	btfsc	divemode_menu				; in the big divemode menu?
 	bra		diveloop_loop4b				; YES - no space for CCR/pSCR info
 	btfsc	menuview					; NO  - in the small yellow menu?
-	bra		diveloop_loop4b				; 		YES - no space for CCR/pSCR info
-	btfsc	alternative_divelayout		; 		NO  - in the alternative layout?
-	bra		diveloop_loop4b				; 			  YES - no space for CCR/pSCR info
-	call	TFT_show_mode_divemode		; 			  NO  - (re)write CCR/pSCR mode info to display
+	bra		diveloop_loop4b				;       YES - no space for CCR/pSCR info
+	btfsc	alternative_divelayout		;       NO  - in the alternative layout?
+	bra		diveloop_loop4b				;             YES - no space for CCR/pSCR info
+	call	TFT_show_mode_divemode		;             NO  - (re)write CCR/pSCR mode info to display
 diveloop_loop4b:
-    btfsc   toggle_customview			; Next view?
-    call    customview_toggle			; Yes, show next customview (and delete this flag)
+	btfsc	toggle_customview			; Next view?
+	call	customview_toggle			; Yes, show next customview (and delete this flag)
 
-    btfsc   store_sample				; store new sample?
-    call    store_dive_data				; Store profile data
+	btfsc	divemode_gaschange			; Gas switch flag set?
+	call	gas_switched_common			; YES
 
-    btfss   divemode					; Dive finished?
-    goto    ghostwriter_end_dive    	; Dive finished!
+	btfsc	toggle_gf					; Toggle GF/aGF?
+	rcall	divemodemode_togglegf		; YES
 
-    btfsc   divemode_gaschange			; Gas switch flag set?
-    call    gas_switched_common			; Yes
+	btfsc	FLAG_set_marker				; shall a marker be set?
+	call	set_logbook_marker			; YES
+
+	btfsc	store_sample				; store new sample?
+	call	store_dive_data				; Store profile data
+
+	btfss	divemode					; Dive finished?
+	goto	ghostwriter_end_dive		; Dive finished!
 
-    btfsc   toggle_gf					; =1: Toggle GF/aGF
-    rcall   divemodemode_togglegf		; Toggle aGF/GF
-    
-    btfsc   pressure_refresh			; new pressure available?	
-    rcall   set_max_depth				; update max. depth if required
-    btfsc   pressure_refresh			; new pressure available?	
-    bsf	    FLAG_TFT_depth				; Yes, update depth asap
-    bcf	    pressure_refresh			; clear flag
+	btfsc	pressure_refresh			; new pressure available?
+	rcall	set_max_depth				; update max. depth if required
+	btfsc	pressure_refresh			; new pressure available?
+	bsf		FLAG_TFT_depth				; Yes, update depth
+	bcf		pressure_refresh			; clear flag
 
-    btfsc   temp_changed
-    bsf	    FLAG_TFT_temp_divemode		; Displays temperature
+	btfsc	temp_changed
+	bsf		FLAG_TFT_temp_divemode		; Displays temperature
 
 	; display depth based on as-fast-as-possible (no nice blinking)
-    ;btfss   alternative_divelayout
-    ;rcall   TFT_output4_normal
-    ;btfsc   alternative_divelayout
-    ;rcall   TFT_output4_alternative
-    
-    btfsc   enable_screen_dumps			; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-    bra     diveloop_loop5
-    bra     diveloop_loop6
+	;btfss	alternative_divelayout
+	;rcall	TFT_output4_normal
+	;btfsc	alternative_divelayout
+	;rcall	TFT_output4_alternative
+
+	btfsc	enable_screen_dumps			; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	bra		diveloop_loop5
+	bra		diveloop_loop6
 
 diveloop_loop5:
-    btfss   vusb_in						; USB (still) plugged in?
-    bcf     enable_screen_dumps			; No, clear flag
-    call    rs232_get_byte
-    btfsc   rs232_recieve_overflow
-    bra     diveloop_loop6
-    movlw   "l"
-    cpfseq	RCREG1
-    bra     diveloop_loop6
-    call    TFT_dump_screen				; Dump the screen contents
-	
+	btfss	vusb_in						; USB (still) plugged in?
+	bcf		enable_screen_dumps			; No, clear flag
+	call	rs232_get_byte
+	btfsc	rs232_receive_overflow
+	bra		diveloop_loop6
+	movlw	"l"
+	cpfseq	RCREG1
+	bra		diveloop_loop6
+	call	TFT_dump_screen				; Dump the screen contents
+
 diveloop_loop6:
 	bra		diveloop_loop				; Loop the divemode
-	
+
 ;--------------------------------------------------------------------------------------------------------	
-	
-TFT_output1_normal:	    				; beginning of any new second - only for deco modes
-	btfsc   FLAG_TFT_divemode_mask
-	call    TFT_divemode_mask
+
+TFT_output1_normal:						; beginning of any new second - only for deco modes
+	btfsc	FLAG_TFT_divemode_mask
+	call	TFT_divemode_mask
 	btfsc	FLAG_TFT_divemins
 	call	TFT_divemins				; Display (new) divetime!
 	call	customview_second			; Do every-second tasks for the custom view area (In sync with the divetime) mH
@@ -224,20 +246,20 @@
 	btfsc	FLAG_TFT_clear_safety_stop
 	call	TFT_clear_safety_stop		; Clear safety stop
 	return
-	
+
 TFT_output1_alternative:				; beginning of any new second - only for deco modes
 	btfsc	FLAG_TFT_divemins
 	call	TFT_divemins_alternative	; Display (new) divetime!
 	btfsc	FLAG_TFT_divemode_mask_alt
-	call    TFT_divemode_mask_alternative	; Alt. mask
-	call	customview_alternative_second	; Do every-second tasks for the custom view area (In sync with the divetime) mH
+	call	TFT_divemode_mask_alternative ; Alt. mask
+	call	customview_alternative_second ; Do every-second tasks for the custom view area (In sync with the divetime) mH
 	return
-	
-TFT_output2_normal:	    				; any new second - only for deco modes
-	btfsc   FLAG_TFT_display_ndl_mask
-	call    TFT_display_ndl_mask
-	btfsc   FLAG_TFT_display_ndl
-	call    TFT_display_ndl
+
+TFT_output2_normal:						; any new second - only for deco modes
+	btfsc	FLAG_TFT_display_ndl_mask
+	call	TFT_display_ndl_mask
+	btfsc	FLAG_TFT_display_ndl
+	call	TFT_display_ndl
 	btfsc	FLAG_TFT_display_deko_mask
 	call	TFT_display_deko_mask
 	btfsc	FLAG_TFT_display_deko
@@ -246,10 +268,10 @@
 	call	TFT_display_tts
 	return
 
-TFT_output2_alternative:    			; any new second - only for deco modes
+TFT_output2_alternative:				; any new second - only for deco modes
 	return
-	
-TFT_output3_normal:	    				; tasks any new second, any mode
+
+TFT_output3_normal:						; tasks any new second, any mode
 	btfsc	FLAG_TFT_max_depth
 	call	TFT_max_depth				; use normal max. depth
 	btfsc	FLAG_TFT_divemode_warning
@@ -257,14 +279,14 @@
 	btfsc	FLAG_TFT_divemode_warning_clear
 	call	TFT_divemode_warning_clear
 	btfsc	FLAG_TFT_active_gas_divemode
-	call	TFT_active_gas_divemode			; Display gas/Setpoint
+	call	TFT_active_gas_divemode		; Display gas/Setpoint
 	btfsc	FLAG_TFT_dive_warning_text_clear
-	call	TFT_clear_warning_text          ; clear complete warnings area
-	btfsc   FLAG_TFT_dive_warning_text_clr2
-	call    TFT_clear_warning_text_2nd_row	; clear 2nd row of warnings
+	call	TFT_clear_warning_text		; clear complete warnings area
+	btfsc	FLAG_TFT_dive_warning_text_clr2
+	call	TFT_clear_warning_text_2nd_row; clear 2nd row of warnings
 	return
-	
-TFT_output3_alternative:    			; tasks any new second, any mode
+
+TFT_output3_alternative:				; tasks any new second, any mode
 	btfsc	FLAG_TFT_max_depth_alt
 	call	TFT_max_depth_alternative	; big max. depth
 	btfsc	FLAG_TFT_dive_warning_text_clear
@@ -276,16 +298,16 @@
 TFT_output4_normal:						; tasks any round, any mode
 	btfsc	FLAG_TFT_depth
 	call	TFT_depth					; Displays new depth
-	btfsc	FLAG_TFT_temp_divemode		
+	btfsc	FLAG_TFT_temp_divemode
 	call	TFT_temp_divemode			; Update temperature
 	return
-	
-TFT_output4_alternative:    			; tasks any round, any mode
-    btfsc	FLAG_TFT_depth
+
+TFT_output4_alternative:				; tasks any round, any mode
+	btfsc	FLAG_TFT_depth
 	call	TFT_depth					; Displays new depth
 	return
-	
-	
+
+
 ;--------------------------------------------------------------------------------------------------------
 
 divemode_apnoe_tasks:					; 1 sec. Apnoe tasks
@@ -305,11 +327,11 @@
 	clrf	apnoe_surface_secs
 	incf	apnoe_surface_mins,F
 
-divemode_apnoe_tasks1:	
-	bcf	FLAG_active_descent				; Clear flag
+divemode_apnoe_tasks1:
+	bcf		FLAG_active_descent			; Clear flag
 	btfsc	divemode2					; Time running?
 	return								; Yes, return
-	bsf	FLAG_active_descent				; Set Flag
+	bsf		FLAG_active_descent			; Set Flag
 	return
 
 divemode_apnoe_tasks2:
@@ -337,7 +359,7 @@
 	call	subU16						; sub_c = sub_a - sub_b
 										; apnoe_max_pressure<max_pressure -> neg_flag=1
 										; max_pressure<=apnoe_max_pressure -> neg_flag=0
-	btfss	neg_flag	
+	btfss	neg_flag
 	return
 										;apnoe_max_pressure<max_pressure
 	movff	max_pressure+0,apnoe_max_pressure+0
@@ -352,10 +374,10 @@
 	bra		calc_deko_divemode1
 	bsf		twosecupdate
 	return
-	
+
 calc_deko_divemode1:					; the following code is invoked every 2 seconds
 	bcf		twosecupdate
-	
+
 	call	calc_average_depth			; calculate average depth
 	call	calc_velocity				; calculate vertical velocity and display if > threshold (every two seconds)
 	call	set_reset_safety_stop		; Set flags for safety stop and/or reset safety stop
@@ -369,7 +391,7 @@
 ; Check for a gas change
 	goto	check_gas_change			; Checks if a better gas should be selected (by user) and return...
 
-	
+
 calc_deko_divemode2:
 	btfsc	FLAG_gauge_mode				; Done for Apnoe or Gauge mode
 	return
@@ -377,23 +399,23 @@
 	btfsc	FLAG_ccr_mode				; In CCR mode?
 	rcall	calc_deko_divemode_sensor	; do sensor data acquisition if applicable by OSTC model
 
-    btfsc   FLAG_pscr_mode				; In PSCR mode?
-    rcall   calc_deko_divemode_sensor	; do sensor data acquisition if applicable by OSTC model
-    
+	btfsc	FLAG_pscr_mode				; In PSCR mode?
+	rcall	calc_deko_divemode_sensor	; do sensor data acquisition if applicable by OSTC model
+
 	SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; transfer ambient pressure to deco engine
 
 
 	; check deco engine state and switch between normal and alternative plan calculations
 	;
 	; Remark: Any reconfigurations done here do only affect the ascent & deco calculation settings,
-	;         not the settings for the calculations done on the real tissues. The later ones are only
-	;         altered in case of a gas change, or in case of a real bailout or switchback to setpoint
-	;         or sensor, respectively.
-	;         In case of a gas change or real bailout/switchback, the settings for the deco calculations
-	;         are also changed to match the settings for the real tissues. This is done on signal through
-	;         'divemode_gaschange' and will also leave the deco engine status in state as if having done
-	;         the alternative plan last.
-	
+	;		not the settings for the calculations done on the real tissues. The later ones are only
+	;		altered in case of a gas change, or in case of a real bailout or switchback to setpoint
+	;		or sensor, respectively.
+	;		In case of a gas change or real bailout/switchback, the settings for the deco calculations
+	;		are also changed to match the settings for the real tissues. This is done on signal through
+	;		'divemode_gaschange' and will also leave the deco engine status in state as if having done
+	;		the alternative plan last.
+
 	; check state of ascent/deco calculations
 	movff	char_O_deco_status,lo		; get a working copy of char_O_deco_status into bank common
 	movlw	DECO_STATUS_MASK			; load bit mask covering the deco status bits
@@ -405,7 +427,7 @@
 
 	; The PLAN bit is set, i.e. an alternative plan was computed in the last cycle, or the deco engine has
 	; been restarted because of a gas change etc. --> Reconfigure to normal plan for next computation cycle.
-	
+
 	; reset flags for special calculations
 	bcf		lo,DECO_PLAN_FLAG			; clear flag for alternative plan
 	bcf		lo,DECO_ASCENT_FLAG			; clear flag for delayed ascent calculation
@@ -428,75 +450,67 @@
 	btfsc	is_bailout					; YES - check if a real bailout situation is present
 	bra		calc_deko_divemode2e		; YES - OC gases have been set by bailout action then, start normal plan
 	movff	active_gas,WREG				; NO  - switch back to loop calculation: get current (diluent) gas, ...
-	call	deco_setup_cc_diluents		;       ... set up deco calculations in CCR/pSCR mode with diluents,
-	bra		calc_deko_divemode2e		;       ... and start in normal plan mode
+	call	deco_setup_cc_diluents		;     ... set up deco calculations in CCR/pSCR mode with diluents,
+	bra		calc_deko_divemode2e		;     ... and start in normal plan mode
 
 	; The PLAN bit was cleared, i.e. a normal plan was computed in the last cycle. For the next
 	; computation cycle the mode may be switched to alternative plan, or stay in normal mode...
-	
+
 calc_deko_divemode2b:
 	bcf		lo,DECO_ASCENT_FLAG			; clear flag for delayed ascent calculation (for safety only)
 	btfsc	is_bailout					; check if a real bailout situation is present
 	bra		calc_deko_divemode2c		; YES - stay in normal plan mode and preclude delayed ascent calculation
 	movff	char_I_extra_time,hi		; NO  -	get the delayed ascent setting
-	tstfsz	hi							; 		check if delayed ascent calculation is enabled
-	bsf		lo,DECO_ASCENT_FLAG			; 		YES - set flag for delayed ascent calculation
-	tstfsz	hi							; 		check if delayed ascent calculation is enabled (again)
-	bsf		lo,DECO_PLAN_FLAG			; 		YES - set flag for alternative plan
+	tstfsz	hi							;       check if delayed ascent calculation is enabled
+	bsf		lo,DECO_ASCENT_FLAG			;       YES - set flag for delayed ascent calculation
+	tstfsz	hi							;       check if delayed ascent calculation is enabled (again)
+	bsf		lo,DECO_PLAN_FLAG			;       YES - set flag for alternative plan
 
 	; check if a gas needs calculation shall be done
 calc_deko_divemode2c:					
 	bsf		lo,DECO_VOLUME_FLAG			; set gas needs calculation flag (may be cleared again next)
-	TSTOSS  opt_calc_asc_gasvolume		; check if gas needs calculation is enabled
+	TSTOSS	opt_calc_asc_gasvolume		; check if gas needs calculation is enabled
 	bcf		lo,DECO_VOLUME_FLAG			; NO  - reset flag again
 	movff	lo,char_O_deco_status		; write-back char_O_deco_status to deco engine interface
-	TSTOSS  opt_calc_asc_gasvolume		; check if gas volume calculation is enabled (again)
+	TSTOSS	opt_calc_asc_gasvolume		; check if gas volume calculation is enabled (again)
 	bra		calc_deko_divemode2e		; NO  - no volume calculation, no simulated bailout plan in no case
-	
+
 	; check if conditions are met to calculate a bailout plan
 	btfsc	is_bailout					; check if a real bailout situation is present
 	bra		calc_deko_divemode2e		; YES - normal plan already does bailout (OC) calculation "for real"
 	btfss	lo,DECO_MODE_LOOP_FLAG		; NO  - have loop mode calculation been done during the normal plan?
 	bra		calc_deko_divemode2e		; NO  - when not in loop mode, no simulated bailout to be done
 	bsf		lo,DECO_PLAN_FLAG			; YES - set flag for alternative plan
-	movff	lo,char_O_deco_status		; 		write-back char_O_deco_status to deco engine interface
-	call    get_first_gas_to_WREG		; 		get first OC gas, ...
+	movff	lo,char_O_deco_status		;       write-back char_O_deco_status to deco engine interface
+	call	get_first_gas_to_WREG		;       get first OC gas, ...
 	call	deco_setup_oc_gases			;       ... set up deco calculations in OC mode with OC gases,
 	;bra	calc_deko_divemode2e		;       ... and start in alternative plan mode
 
 
 calc_deko_divemode2e:
-    clrf    TMR5L
-    clrf    TMR5H                       ; 30,51757813µs/bit in TMR5L:TMR5H
+	clrf	TMR5L
+	clrf	TMR5H						; 30,51757813µs/bit in TMR5L:TMR5H
 	call	deco_calc_hauptroutine		; calc_tissue
-	banksel common
-
-    ; Check if deco stops are necessary ?
-	movff	char_O_first_deco_depth,wait_temp	; copy ceiling to temp register
-	tstfsz	wait_temp							; Ceiling<0m?
-	bra		calc_deko_divemode3					; Yes!
+	banksel	common
 
-	btfsc	decostop_active             		; Already in nodeco mode ?
-	bsf		FLAG_TFT_display_ndl_mask       	; No, Clear deco data, display nostop time
-	bcf		decostop_active						; clear flag (again)
-
-	; Copy for profile recording
-	clrf	decodata+0
-	movff	char_O_nullzeit,decodata+1 			; NDL
-	
-	bsf		FLAG_TFT_display_ndl				; display no deco limit
+	; Check if deco stops are necessary
+	movff	char_O_first_deco_depth,WREG; get ceiling
+	tstfsz	WREG						; ceiling < 0m (aka in deco) ?
+	bra		calc_deko_divemode3			; YES
+	; NO - within NDL
+	btfsc	decostop_active				; already in no deco mode ?
+	bsf		FLAG_TFT_display_ndl_mask	; NO - clear deco data, display NDL time
+	bsf		FLAG_TFT_display_ndl		; display NDL time
+	bcf		decostop_active				; clear flag (again)
 	return
 
 calc_deko_divemode3:
-	btfss	decostop_active						; Already in deco mode ?
-	bsf		FLAG_TFT_display_deko_mask			; No, clear nostop time, display decodata
-	bsf		decostop_active						; Set flag (again)
-
-	; Copy for profile recording
-	movff	char_O_first_deco_depth,decodata+0	; ceiling
-	movff	char_O_first_deco_time,decodata+1	; length of first stop in minutes
-	bsf		FLAG_TFT_display_deko				; display decodata
-	bsf		FLAG_TFT_display_tts				; display TTS
+	; YES - in deco
+	btfss	decostop_active				; already in deco mode ?
+	bsf		FLAG_TFT_display_deko_mask	; NO - clear NDL time, display deco data
+	bsf		FLAG_TFT_display_deko		; display deco data
+	bsf		FLAG_TFT_display_tts		; display TTS
+	bsf		decostop_active				; set flag (again)
 	return
 
 	; --------------------------------------------------------------------------------------
@@ -504,48 +518,50 @@
 	global	calc_deko_divemode_sensor
 calc_deko_divemode_sensor:
 	; sensor acquisition code
-	btfss   s8_digital				; check if we have digital interface to the sensors
-	bra     calc_deko_divemode_sensor_analog	; NO  - use analog interface
-	btfss   new_s8_data_available			; YES - check if a new data frame was received
-	bra	calc_deko_divemode_sensor_common	; NO  - use old values
-	call	compute_mvolts_for_all_sensors		; YES - compute mV values from digital data
-	bra	calc_deko_divemode_sensor_common
+	btfss	s8_digital						 ; check if we have a digital interface to the sensors
+	bra		calc_deko_divemode_sensor_analog ; NO  - check if we have an analog interface
+	btfss	new_s8_data_available			 ; YES - check if a new data frame was received
+	bra		calc_deko_divemode_sensor_common ; NO  - use old values -- TODO: add timeout for no new data
+	call	compute_mvolts_for_all_sensors	 ; YES - compute mV values from digital data
+	bra		calc_deko_divemode_sensor_common
 
 calc_deko_divemode_sensor_analog:
-	call    get_analog_inputs					; TODO: abort when OSTC model does not have analog inputs
+	btfss	analog_o2_input				; do we have an analog input?
+	return								; NO  - return
+	call	get_analog_inputs			; YES - get the analog voltages and continue with the common part
 
 calc_deko_divemode_sensor_common:
 	; Check for each sensor if it is calibrated and if its mv value is within min_mv and max_mv limits.
-	; If     ok: compute o2_ppo2_sensorX := o2_mv_sensorX * opt_x_sX / 1000.
-	; If not ok: reset o2_ppo2_sensorX, reset use_O2_sensorX and show the customview 1 in case the sensor was ok before.
+	; If     ok: compute o2_ppo2_sensorX := o2_mv_sensorX * opt_x_sX / 1000
+	; If not ok: reset   o2_ppo2_sensorX, reset use_O2_sensorX and show the customview 1 in case the sensor was ok before
 
 	; Check min_mv of sensor 1
-	btfss	sensor1_calibrated_ok			; check if sensor is usable at all
-	bra		check_sensor_1_fail				; NO  - handle it as failed
-	movff	o2_mv_sensor1+0, sub_a+0		; load sensor mV value
+	btfss	sensor1_calibrated_ok		; check if sensor is usable at all
+	bra		check_sensor_1_fail			; NO  - handle it as failed
+	movff	o2_mv_sensor1+0, sub_a+0	; load sensor mV value
 	movff	o2_mv_sensor1+1, sub_a+1
-	movlw	LOW		min_mv					; load minimum mV value
+	movlw	LOW  min_mv					; load minimum mV value
 	movwf	sub_b+0
-	movlw	HIGH	min_mv
+	movlw	HIGH min_mv
 	movwf	sub_b+1
-	call	sub16							; sub_c = sensor_mv - min_mv
-    btfsc	neg_flag						; check if result is negative, i.e. sensor_mv < min_mv
-	bra		check_sensor_1_fail				; YES - declare sensor as failed
-	; Check max_mv of sensor 1				  NO  - continue with next check
+	call	sub16						; sub_c = sensor_mv - min_mv
+	btfsc	neg_flag					; check if result is negative, i.e. sensor_mv < min_mv
+	bra		check_sensor_1_fail			; YES - declare sensor as failed
+	; Check max_mv of sensor 1			; NO  - continue with next check
 	movff	o2_mv_sensor1+0, sub_a+0
 	movff	o2_mv_sensor1+1, sub_a+1
-	movlw	LOW		max_mv
+	movlw	LOW  max_mv
 	movwf	sub_b+0
-	movlw	HIGH	max_mv
+	movlw	HIGH max_mv
 	movwf	sub_b+1
-	call	sub16							;  sub_c = sensor_mv - max_mv
-	btfss	neg_flag						; check if result is negative, i.e. sensor_mv < max_mv
-	bra		check_sensor_1_fail				; NO  - declare sensor as failed
-	; Check HUD data, if available			  YES - continue with next check
-	btfss   hud_connection_ok				; check if there is a HUD connected
-    bra     check_sensor_1_ok				; NO  - all checks done then and positive
-	btfss   sensor1_active					; YES - check HUD report on sensor
-	bra		check_sensor_1_fail				; HUD reports a fail
+	call	sub16						; sub_c = sensor_mv - max_mv
+	btfss	neg_flag					; check if result is negative, i.e. sensor_mv < max_mv
+	bra		check_sensor_1_fail			; NO  - declare sensor as failed
+	; Check HUD data, if available		; YES - continue with next check
+	btfss	hud_connection_ok			; check if there is a HUD connected
+	bra		check_sensor_1_ok			; NO  - all checks done then and positive
+	btfss	sensor1_active				; YES - check HUD report on sensor
+	bra		check_sensor_1_fail			; HUD reports a fail
 
 check_sensor_1_ok:
 	; o2_ppo2_sensor1 := o2_mv_sensor1:2 * opt_x_s1:2 / 1000
@@ -554,46 +570,46 @@
 	movff	opt_x_s1+0,xB+0
 	movff	opt_x_s1+1,xB+1
 	rcall	compute_ppo2_helper
-	movff	xC+0,o2_ppo2_sensor1			; result in 0.01bar
-	bra	check_sensor_2						; continue with next sensor
+	movff	xC+0,o2_ppo2_sensor1		; result in 0.01bar
+	bra		check_sensor_2				; continue with next sensor
 
 check_sensor_1_fail:
 	clrf	WREG
-	movff	WREG,o2_ppo2_sensor1			; set ppO2 reading to zero
-	btfss	use_O2_sensor1					; check if sensor was in use before
-	bra		check_sensor_1_fail_1			; NO  - no new news then
-	call	check_sensor_custview_helper	; YES - show customview 1 (sensor values) on further conditions met
+	movff	WREG,o2_ppo2_sensor1		; set ppO2 reading to zero
+	btfss	use_O2_sensor1				; check if sensor was in use before
+	bra		check_sensor_1_fail_1		; NO  - no new news then
+	call	check_sensor_custview_helper; YES - show customview 1 (sensor values) on further conditions met
 check_sensor_1_fail_1:
-	bcf		use_O2_sensor1					; revoke sensor from usage
-	;bra	check_sensor_2					; continue with next sensor
+	bcf		use_O2_sensor1				; revoke sensor from usage
+	;bra	check_sensor_2				; continue with next sensor
 
-check_sensor_2:								; Check min_mv of sensor 2
-	btfss	sensor2_calibrated_ok			; check if sensor is usable at all
-	bra		check_sensor_2_fail				; NO  - handle it as failed
-	movff	o2_mv_sensor2+0, sub_a+0		; load sensor mV value
+check_sensor_2:							; Check min_mv of sensor 2
+	btfss	sensor2_calibrated_ok		; check if sensor is usable at all
+	bra		check_sensor_2_fail			; NO  - handle it as failed
+	movff	o2_mv_sensor2+0, sub_a+0	; load sensor mV value
 	movff	o2_mv_sensor2+1, sub_a+1
-	movlw	LOW		min_mv					; load minimum mV value
+	movlw	LOW  min_mv					; load minimum mV value
 	movwf	sub_b+0
-	movlw	HIGH	min_mv
+	movlw	HIGH min_mv
 	movwf	sub_b+1
-	call	sub16							; sub_c = sensor_mv - min_mv
-    btfsc	neg_flag						; check if result is negative, i.e. sensor_mv < min_mv
-	bra		check_sensor_2_fail				; YES - declare sensor as failed
-	; Check max_mv of sensor 2				  NO  - continue with next check
+	call	sub16						; sub_c = sensor_mv - min_mv
+	btfsc	neg_flag					; check if result is negative, i.e. sensor_mv < min_mv
+	bra		check_sensor_2_fail			; YES - declare sensor as failed
+	; Check max_mv of sensor 2			; NO  - continue with next check
 	movff	o2_mv_sensor2+0, sub_a+0
 	movff	o2_mv_sensor2+1, sub_a+1
-	movlw	LOW		max_mv
+	movlw	LOW  max_mv
 	movwf	sub_b+0
-	movlw	HIGH	max_mv
+	movlw	HIGH max_mv
 	movwf	sub_b+1
-	call	sub16							;  sub_c = sensor_mv - max_mv
-	btfss	neg_flag						; check if result is nagative, i.e. sensor_mv < max_mv
-	bra		check_sensor_2_fail				; NO  - declare sensor as failed
-	; Check HUD data, if available			  YES - continue with next check
-	btfss   hud_connection_ok				; check if there is a HUD connected
-    bra     check_sensor_2_ok				; NO  - all checks done then and positive
-	btfss   sensor2_active					; YES - check HUD report on sensor
-	bra		check_sensor_2_fail				; HUD reports a fail
+	call	sub16						; sub_c = sensor_mv - max_mv
+	btfss	neg_flag					; check if result is nagative, i.e. sensor_mv < max_mv
+	bra		check_sensor_2_fail			; NO  - declare sensor as failed
+	; Check HUD data, if available		; YES - continue with next check
+	btfss	hud_connection_ok			; check if there is a HUD connected
+	bra		check_sensor_2_ok			; NO  - all checks done then and positive
+	btfss	sensor2_active				; YES - check HUD report on sensor
+	bra		check_sensor_2_fail			; HUD reports a fail
 
 check_sensor_2_ok:
 	; o2_ppo2_sensor2 := o2_mv_sensor2:2 * opt_x_s2:2 / 1000
@@ -602,46 +618,46 @@
 	movff	opt_x_s2+0,xB+0
 	movff	opt_x_s2+1,xB+1
 	rcall	compute_ppo2_helper
-	movff	xC+0,o2_ppo2_sensor2			; result in 0.01bar
-	bra	check_sensor_3						; continue with next sensor
+	movff	xC+0,o2_ppo2_sensor2		; result in 0.01bar
+	bra		check_sensor_3				; continue with next sensor
 
 check_sensor_2_fail:
 	clrf	WREG
-	movff	WREG,o2_ppo2_sensor2			; set ppO2 reading to zero
-	btfss	use_O2_sensor2					; check if sensor was in use before
-	bra		check_sensor_2_fail_1			; NO  - no new news then
-	call	check_sensor_custview_helper	; YES - show customview 1 (sensor values) on further conditions met
+	movff	WREG,o2_ppo2_sensor2		; set ppO2 reading to zero
+	btfss	use_O2_sensor2				; check if sensor was in use before
+	bra		check_sensor_2_fail_1		; NO  - no new news then
+	call	check_sensor_custview_helper; YES - show customview 1 (sensor values) on further conditions met
 check_sensor_2_fail_1:
-	bcf		use_O2_sensor2					; revoke sensor from usage
-	;bra	check_sensor_3					; continue with next sensor	
+	bcf		use_O2_sensor2				; revoke sensor from usage
+	;bra	check_sensor_3				; continue with next sensor	
 
-check_sensor_3:								; Check min_mv of sensor 2
-	btfss	sensor3_calibrated_ok			; check if sensor is usable at all
-	bra		check_sensor_3_fail				; NO  - handle it as failed
-	movff	o2_mv_sensor3+0, sub_a+0		; load sensor mV value
+check_sensor_3:							; Check min_mv of sensor 2
+	btfss	sensor3_calibrated_ok		; check if sensor is usable at all
+	bra		check_sensor_3_fail			; NO  - handle it as failed
+	movff	o2_mv_sensor3+0, sub_a+0	; load sensor mV value
 	movff	o2_mv_sensor3+1, sub_a+1
-	movlw	LOW		min_mv					; load minimum mV value
+	movlw	LOW  min_mv					; load minimum mV value
 	movwf	sub_b+0
-	movlw	HIGH	min_mv
+	movlw	HIGH min_mv
 	movwf	sub_b+1
-	call	sub16							; sub_c = sensor_mv - min_mv
-    btfsc	neg_flag						; check if result is negative, i.e. sensor_mv < min_mv
-	bra		check_sensor_3_fail				; YES - declare sensor as failed
-	; Check max_mv of sensor 2				  NO  - continue with next check
+	call	sub16						; sub_c = sensor_mv - min_mv
+	btfsc	neg_flag					; check if result is negative, i.e. sensor_mv < min_mv
+	bra		check_sensor_3_fail			; YES - declare sensor as failed
+	; Check max_mv of sensor 2			; NO  - continue with next check
 	movff	o2_mv_sensor3+0, sub_a+0
 	movff	o2_mv_sensor3+1, sub_a+1
-	movlw	LOW		max_mv
+	movlw	LOW  max_mv
 	movwf	sub_b+0
-	movlw	HIGH	max_mv
+	movlw	HIGH max_mv
 	movwf	sub_b+1
-	call	sub16							;  sub_c = sensor_mv - max_mv
-	btfss	neg_flag						; check if result is nagative, i.e. sensor_mv < max_mv
-	bra		check_sensor_3_fail				; NO  - declare sensor as failed
-	; Check HUD data, if available			  YES - continue with next check
-	btfss   hud_connection_ok				; check if there is a HUD connected
-    bra     check_sensor_3_ok				; NO  - all checks done then and positive
-	btfss   sensor3_active					; YES - check HUD report on sensor
-	bra		check_sensor_3_fail				; HUD reports a fail
+	call	sub16						; sub_c = sensor_mv - max_mv
+	btfss	neg_flag					; check if result is negative, i.e. sensor_mv < max_mv
+	bra		check_sensor_3_fail			; NO  - declare sensor as failed
+	; Check HUD data, if available		; YES - continue with next check
+	btfss	hud_connection_ok			; check if there is a HUD connected
+	bra		check_sensor_3_ok			; NO  - all checks done then and positive
+	btfss	sensor3_active				; YES - check HUD report on sensor
+	bra		check_sensor_3_fail			; HUD reports a fail
 
 check_sensor_3_ok:
 	; o2_ppo2_sensor3 := o2_mv_sensor3:2 * opt_x_s1:2 / 1000
@@ -650,420 +666,423 @@
 	movff	opt_x_s3+0,xB+0
 	movff	opt_x_s3+1,xB+1
 	rcall	compute_ppo2_helper
-	movff	xC+0,o2_ppo2_sensor3			; result in 0.01bar
-	bra		calc_deko_divemode_sensor1		; continue with calculating sensor average
+	movff	xC+0,o2_ppo2_sensor3		; result in 0.01bar
+	bra		calc_deko_divemode_sensor1	; continue with calculating sensor average
 
 check_sensor_3_fail:
 	clrf	WREG
-	movff	WREG,o2_ppo2_sensor3			; set ppO2 reading to zero
-	btfss	use_O2_sensor3					; check if sensor was in use before
-	bra		check_sensor_3_fail_1			; NO  - no new news then
-	call	check_sensor_custview_helper	; YES - show customview 1 (sensor values) on further conditions met
+	movff	WREG,o2_ppo2_sensor3		; set ppO2 reading to zero
+	btfss	use_O2_sensor3				; check if sensor was in use before
+	bra		check_sensor_3_fail_1		; NO  - no new news then
+	call	check_sensor_custview_helper; YES - show customview 1 (sensor values) on further conditions met
 check_sensor_3_fail_1:
-	bcf		use_O2_sensor3					; revoke sensor from usage
-	;bra	calc_deko_divemode_sensor1		; continue with calculating sensor average
-	
-calc_deko_divemode_sensor1:					; calculate sensor average
+	bcf		use_O2_sensor3				; revoke sensor from usage
+	;bra	calc_deko_divemode_sensor1	; continue with calculating sensor average
+
+calc_deko_divemode_sensor1:				; calculate sensor average
 	; exit here if not in divemode
 	btfss	divemode
 	return
 
 	; compute sensor_setpoint := average of all o2_ppo2_sensorX of those sensors that have use_O2_sensorX == true
-    ; sum up sensor values (in xA:2) and active sensors in (xB:2)
-    clrf    xB+0
-    clrf    xB+1
-    clrf    xA+0
-    clrf    xA+1
-    btfss   use_O2_sensor1                  ; Sensor1 active?
-    bra     divemode_setup_sensor_values2   ; No
-    movf    o2_ppo2_sensor1,W
-    addwf   xA+0
-    movlw   .0
-    addwfc  xA+1                            ; Add into xA:2
-    incf    xB+0,F                          ; Add a sensor
+	; sum up sensor values (in xA:2) and active sensors in (xB:2)
+	clrf	xB+0
+	clrf	xB+1
+	clrf	xA+0
+	clrf	xA+1
+	btfss	use_O2_sensor1				; Sensor1 active?
+	bra		divemode_setup_sensor_values2 ; No
+	movf	o2_ppo2_sensor1,W
+	addwf	xA+0
+	movlw	.0
+	addwfc	xA+1						; Add into xA:2
+	incf	xB+0,F						; Add a sensor
 divemode_setup_sensor_values2:
-    btfss   use_O2_sensor2                  ; Sensor2 active?
-    bra     divemode_setup_sensor_values3   ; No
-    movf    o2_ppo2_sensor2,W
-    addwf   xA+0
-    movlw   .0
-    addwfc  xA+1                            ; Add into xA:2
-    incf    xB+0,F                          ; Add a sensor
+	btfss	use_O2_sensor2				; Sensor2 active?
+	bra		divemode_setup_sensor_values3 ; No
+	movf	o2_ppo2_sensor2,W
+	addwf	xA+0
+	movlw	.0
+	addwfc	xA+1						; Add into xA:2
+	incf	xB+0,F						; Add a sensor
 divemode_setup_sensor_values3:
-    btfss   use_O2_sensor3                  ; Sensor3 active?
-    bra     divemode_setup_sensor_values4   ; No
-    movf    o2_ppo2_sensor3,W
-    addwf   xA+0
-    movlw   .0
-    addwfc  xA+1                            ; Add into xA:2
-    incf    xB+0,F                          ; Add a sensor
+	btfss	use_O2_sensor3				; Sensor3 active?
+	bra		divemode_setup_sensor_values4 ; No
+	movf	o2_ppo2_sensor3,W
+	addwf	xA+0
+	movlw	.0
+	addwfc	xA+1						; Add into xA:2
+	incf	xB+0,F						; Add a sensor
 
 	; Divide sum of sensor values by number of active sensors found.
 divemode_setup_sensor_values4:
-    call    div16x16						; xA/xB=xC with xA+0 as remainder
-    movff   xC+0,sensor_setpoint            ; copy result
-	
+	call	div16x16					; xA/xB=xC with xA+0 as remainder
+	movff	xC+0,sensor_setpoint		; copy result
+
 	; set default value for pSCR mode: 0 = let p2_deco.c compute the ppO2 based on current dil gas and depth
 	; will be overwritten later in case we are in sensor mode and have at least one usable sensor
-	clrf	WREG							; preload a zero
-	btfsc	FLAG_pscr_mode					; check if we are in pSCR mode
-	movff	WREG,char_I_const_ppO2			; YES - write 0 to char_I_const_ppo2,
-											;		it will be overwritten if we have a usable sensor reading
-	
-	btfsc	is_bailout						; check if we are in bailout
-	bra		calc_deko_divemode_sensor2		; YES - no sensor data transfer to char_I_const_ppO2 in this case
-	movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
-    bnz     calc_deko_divemode_sensor2		; not in sensor mode - no transfer of sensor data to char_I_const_ppO2
-	tstfsz	xB+0							; check if we have found at least one usable sensor
-	bra		calc_deko_divemode_sensor1a		; YES - we have at least one usable sensor
-	bsf		setpoint_fallback				; NO  - we have NO usable sensors -> initiate fallback
-	btfss	FLAG_ccr_mode					; check if we are in CCR mode
-	bra		calc_deko_divemode_sensor2		; NO  - continue with voting logic flags
+	clrf	WREG						; preload a zero
+	btfsc	FLAG_pscr_mode				; check if we are in pSCR mode
+	movff	WREG,char_I_const_ppO2		; YES - write 0 to char_I_const_ppo2,
+										;		it will be overwritten if we have a usable sensor reading
+
+	btfsc	is_bailout					; check if we are in bailout
+	bra		calc_deko_divemode_sensor2	; YES - no sensor data transfer to char_I_const_ppO2 in this case
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor, =2: Auto SP
+	sublw	.1							; opt_ccr_mode = 1 (Sensor)?
+	bnz		calc_deko_divemode_sensor2	; not in sensor mode - no transfer of sensor data to char_I_const_ppO2
+	tstfsz	xB+0						; check if we have found at least one usable sensor
+	bra		calc_deko_divemode_sensor1a	; YES - we have at least one usable sensor
+	bsf		setpoint_fallback			; NO  - we have NO usable sensors -> initiate fallback
+	btfss	FLAG_ccr_mode				; check if we are in CCR mode
+	bra		calc_deko_divemode_sensor2	; NO  - continue with voting logic flags
 	movff	char_I_setpoint_cbar+0,char_I_const_ppO2	; YES - select fixed setpoint no. 1 for fallback
-	bra		calc_deko_divemode_sensor2		; done - continue with voting logic flags
-calc_deko_divemode_sensor1a:				; we have at least one usable sensor with a value > 0
-	bcf		setpoint_fallback				; clear fallback condition
+	bra		calc_deko_divemode_sensor2	; done - continue with voting logic flags
+calc_deko_divemode_sensor1a:			; we have at least one usable sensor with a value > 0
+	bcf		setpoint_fallback			; clear fallback condition
 	movff	sensor_setpoint,char_I_const_ppO2	; transfer average sensor value to p2_deco.c code
-	; bra	calc_deko_divemode_sensor2
+	;bra	calc_deko_divemode_sensor2
 
 calc_deko_divemode_sensor2:
-    bsf     voting_logic_sensor1
-    movff   o2_ppo2_sensor1,temp1
-    rcall   check_sensor_voting_helper
-    incfsz  WREG                    		; Was Wreg=255?
-    bcf     voting_logic_sensor1    		; No, ignore this sensor
+	bsf		voting_logic_sensor1
+	movff	o2_ppo2_sensor1,lo
+	rcall	check_sensor_voting_helper
+	incfsz	WREG						; Was WREG = 255?
+	bcf		voting_logic_sensor1		; No, ignore this sensor
 
-    bsf     voting_logic_sensor2
-    movff   o2_ppo2_sensor2,temp1
-    rcall   check_sensor_voting_helper
-    incfsz  WREG                    		; Was Wreg=255?
-    bcf     voting_logic_sensor2    		; No, ignore this sensor
+	bsf		voting_logic_sensor2
+	movff	o2_ppo2_sensor2,lo
+	rcall	check_sensor_voting_helper
+	incfsz	WREG						; Was WREG=255?
+	bcf		voting_logic_sensor2		; No, ignore this sensor
 
-    bsf     voting_logic_sensor3
-    movff   o2_ppo2_sensor3,temp1
-    rcall   check_sensor_voting_helper
-    incfsz  WREG                    		; Was Wreg=255?
-    bcf     voting_logic_sensor3    		; No, ignore this sensor
-	
+	bsf		voting_logic_sensor3
+	movff	o2_ppo2_sensor3,lo
+	rcall	check_sensor_voting_helper
+	incfsz	WREG						; Was WREG=255?
+	bcf		voting_logic_sensor3		; No, ignore this sensor
+
 	; check if a warning shall be issued on sensor disagreement
 
-	btfsc	FLAG_ccr_mode					; check if we are in CCR mode
-	bra 	check_warn_sensor_1				; YES - continue with further checks
-	btfsc	FLAG_pscr_mode					; check if we are in pSCR mode
-	bra		check_warn_sensor_1				; YES - continue with further checks
-	bra 	check_warn_sensor_agree			; not in CCR and not in pSCR, so no warning
-check_warn_sensor_1:						; we are in CCR or pSCR mode
-	btfsc	is_bailout						; check if we are in bailout
-	bra		check_warn_sensor_agree			; YES - no warning in this case
-	movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensor)?
-    bnz     check_warn_sensor_agree			; not in sensor mode - no warning in this case
-											; check sensor 1
-	btfss	sensor1_calibrated_ok			; check if sensor has a valid calibration
-	bra		check_warn_sensor_2				; NO  - sensor can not cause a warning then
-	btfss	use_O2_sensor1					; YES - check if sensor is in use
-	bra		check_warn_sensor_2				; NO  - sensor can not cause a warning then
-	btfsc	voting_logic_sensor1			; YES - check if sensor value is within agreement range
-	bra		check_warn_sensor_2				; YES - continue with next sensor
-	bcf		sensors_agree					; NO  - issue a warning
+	btfsc	FLAG_ccr_mode				; check if we are in CCR mode
+	bra		check_warn_sensor_1			; YES - continue with further checks
+	btfsc	FLAG_pscr_mode				; check if we are in pSCR mode
+	bra		check_warn_sensor_1			; YES - continue with further checks
+	bra		check_warn_sensor_agree		; not in CCR and not in pSCR, so no warning
+check_warn_sensor_1:					; we are in CCR or pSCR mode
+	btfsc	is_bailout					; check if we are in bailout
+	bra		check_warn_sensor_agree		; YES - no warning in this case
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor, =2: Auto SP
+	sublw	.1							; opt_ccr_mode = 1 (Sensor)?
+	bnz		check_warn_sensor_agree		; not in sensor mode - no warning in this case
+										; check sensor 1
+	btfss	sensor1_calibrated_ok		; check if sensor has a valid calibration
+	bra		check_warn_sensor_2			; NO  - sensor can not cause a warning then
+	btfss	use_O2_sensor1				; YES - check if sensor is in use
+	bra		check_warn_sensor_2			; NO  - sensor can not cause a warning then
+	btfsc	voting_logic_sensor1		; YES - check if sensor value is within agreement range
+	bra		check_warn_sensor_2			; YES - continue with next sensor
+	bcf		sensors_agree				; NO  - issue a warning
 	return
 
-check_warn_sensor_2:						; check sensor 2
-	btfss	sensor2_calibrated_ok			; check if sensor has a valid calibration
-	bra		check_warn_sensor_3				; NO  - sensor can not cause a warning then
-	btfss	use_O2_sensor2					; YES - check if sensor is in use
-	bra		check_warn_sensor_3				; NO  - sensor can not cause a warning then
-	btfsc	voting_logic_sensor2			; YES - check if sensor value is within agreement range
-	bra		check_warn_sensor_3				; YES - continue with next sensor
-	bcf		sensors_agree					; NO  - issue a warning
+check_warn_sensor_2:					; check sensor 2
+	btfss	sensor2_calibrated_ok		; check if sensor has a valid calibration
+	bra		check_warn_sensor_3			; NO  - sensor can not cause a warning then
+	btfss	use_O2_sensor2				; YES - check if sensor is in use
+	bra		check_warn_sensor_3			; NO  - sensor can not cause a warning then
+	btfsc	voting_logic_sensor2		; YES - check if sensor value is within agreement range
+	bra		check_warn_sensor_3			; YES - continue with next sensor
+	bcf		sensors_agree				; NO  - issue a warning
 	return
-	
-check_warn_sensor_3:						; check sensor 2
-	btfss	sensor3_calibrated_ok			; check if sensor has a valid calibration
-	bra		check_warn_sensor_agree			; NO  - sensor can not cause a warning then
-	btfss	use_O2_sensor3					; YES - check if sensor is in use
-	bra		check_warn_sensor_agree			; NO  - sensor can not cause a warning then
-	btfsc	voting_logic_sensor3			; YES - check if sensor value is within agreement range
-	bra		check_warn_sensor_agree			; YES - continue with next sensor
-	bcf		sensors_agree					; NO  - issue a warning
+
+check_warn_sensor_3:					; check sensor 2
+	btfss	sensor3_calibrated_ok		; check if sensor has a valid calibration
+	bra		check_warn_sensor_agree		; NO  - sensor can not cause a warning then
+	btfss	use_O2_sensor3				; YES - check if sensor is in use
+	bra		check_warn_sensor_agree		; NO  - sensor can not cause a warning then
+	btfsc	voting_logic_sensor3		; YES - check if sensor value is within agreement range
+	bra		check_warn_sensor_agree		; YES - continue with next sensor
+	bcf		sensors_agree				; NO  - issue a warning
 	return
-					
+
 check_warn_sensor_agree:
 	bsf		sensors_agree
 	return
 
 compute_ppo2_helper:
-	call	mult16x16						;xA:2*xB:2=xC:4
-	movlw	LOW		.1000
+	call	mult16x16					; xA:2*xB:2=xC:4
+	movlw	LOW  .1000
 	movwf	xB+0
-	movlw	HIGH	.1000
+	movlw	HIGH .1000
 	movwf	xB+1
-	call	div32x16						; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movlw	d'1'
-	addwf	xC+0,W							; we are just interessed in the carry flag
+	addwf	xC+0,W						; we are just interested in the carry flag
 	movlw	d'0'
-	addwfc	xC+1,W							; we are still just interessed in the carry flag
-    tstfsz  WREG							; ppO2 is higher than 2.55bar?
-    setf    xC+0							; Yes.
-    return
+	addwfc	xC+1,W						; we are still just interested in the carry flag
+	tstfsz	WREG						; ppO2 is higher than 2.55bar?
+	setf	xC+0						; Yes.
+	return
 
 check_sensor_custview_helper:
-	btfss	divemode						; check if we are in divemode
-	return									; NO  - not in dive mode, return
-    movff   opt_ccr_mode,WREG               ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .1                              ; opt_ccr_mode = 1 (Sensors)?
-    bnz		check_sensor_helper_1			; NO  - not using the sensors in the moment
-	clrf	menupos3						; YES - arm customview 1 (sensor values)
-	bsf		toggle_customview				;       and request a customview toggle
+	btfss	divemode					; check if we are in divemode
+	return								; NO  - not in dive mode, return
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor, =2: Auto SP
+	sublw	.1							; opt_ccr_mode = 1 (Sensors)?
+	bnz		check_sensor_helper_1		; NO  - not using the sensors in the moment
+	clrf	menupos3					; YES - arm customview 1 (sensor values)
+	bsf		toggle_customview			;       and request a customview toggle
 check_sensor_helper_1:
 	return
 
-	
+
 check_sensor_voting_helper:
-    movf    temp1,W
-    cpfsgt  sensor_setpoint
-    bra     check_sensor_voting_common2		; temp1<sensor_setpoint
-    ; temp1>sensor_setpoint
-    movf    temp1,W
-    subwf   sensor_setpoint,W
-    movwf   temp1
+	movf	lo,W
+	cpfsgt	sensor_setpoint
+	bra		check_sensor_voting_common2	; lo < sensor_setpoint
+	; lo > sensor_setpoint
+	movf	lo,W
+	subwf	sensor_setpoint,W
+	movwf	lo
 check_sensor_voting_common1:
-    movlw	sensor_voting_logic_threshold	; Threshold in 0.01 bar
-    cpfsgt  temp1
-    retlw   .255							; Within range
-    retlw   .0								; Out of range
+	movlw	sensor_voting_logic_threshold ; Threshold in 0.01 bar
+	cpfsgt	lo
+	retlw	.255						; Within range
+	retlw	.0							; Out of range
 check_sensor_voting_common2:
-    ; temp1<sensor_setpoint
-    movf    sensor_setpoint,W
-    subwf   temp1,F
-    bra     check_sensor_voting_common1
-		
+	; lo<sensor_setpoint
+	movf	sensor_setpoint,W
+	subwf	lo,F
+	bra		check_sensor_voting_common1
+
 ;-----------------------------------------------------------------------------
 
-divemodemode_togglegf:						; Toggle aGF/GF
-    bcf     toggle_gf						; clear flag    
-    btg     use_agf							; toggle GF
+divemodemode_togglegf:								; Toggle aGF/GF
+	bcf		toggle_gf								; clear flag
+	btg		use_agf									; toggle GF
 
-	movff	opt_GF_low,char_I_GF_Low_percentage
-	movff	opt_GF_high,char_I_GF_High_percentage
+	btfsc	use_agf									; switch to aGF?
+	bra		divemodemode_togglegf_1					; YES - branch to using aGF
+	movff	opt_GF_low,char_I_GF_Low_percentage		; NO  - use normal GF factors
+	movff	opt_GF_high,char_I_GF_High_percentage	;
+	bra		divemodemode_togglegf_2					;       continue with common part
 
-	; Overwrite GF if aGF is wanted
-	btfsc	use_agf							; =1: Use aGF
+divemodemode_togglegf_1:							; use alternative GF factors
 	movff	opt_aGF_low,char_I_GF_Low_percentage
-	btfsc	use_agf							; =1: Use aGF
 	movff	opt_aGF_high,char_I_GF_High_percentage
 
-    call    TFT_gf_mask						; Setup Mask
-	goto	restart_deco_engine				; ...and return
+divemodemode_togglegf_2:
+	call	TFT_gf_mask								; update customview mask to show which one is in use
+													; the customview itself has been called from divemenu_tree before
+	goto	restart_deco_engine						; ...and return
 
 
-calc_velocity:								; called every two seconds
-    btfsc   display_velocity                
-    bra     calc_velocity1                  ; Always update if already displayed
-	btfss	divemode2						
-	return                      			; display velocity only if deepter then 1m (Not at the surface after the dive)
+calc_velocity:									; called every two seconds
+	btfsc	display_velocity
+	bra		calc_velocity1						; Always update if already displayed
+	btfss	divemode2
+	return										; display velocity only if deeper then 1m (Not at the surface after the dive)
 calc_velocity1:
-    SAFE_2BYTE_COPY amb_pressure, sub_a
+	SAFE_2BYTE_COPY amb_pressure, sub_a
 	movff	last_pressure_velocity+0,sub_b+0
 	movff	last_pressure_velocity+1,sub_b+1
 	movff	sub_a+0,last_pressure_velocity+0	; store old value for velocity
 	movff	sub_a+1,last_pressure_velocity+1
 
-	call	subU16							; sub_c = amb_pressure - last_pressure
+	call	subU16								; sub_c = amb_pressure - last_pressure
 
-    bcf     neg_flag_velocity
-    btfsc   neg_flag
-    bsf     neg_flag_velocity
+	bcf		neg_flag_velocity
+	btfsc	neg_flag
+	bsf		neg_flag_velocity
 
 	movff	sub_c+0,xA+0
 	movff	sub_c+1,xA+1
-	movlw	d'39'							; 77 when called every second....
+	movlw	d'39'						; 77 when called every second....
 	movwf	xB+0
 	clrf	xB+1
-	call	mult16x16						; differential pressure in mbar*77...
+	call	mult16x16					; differential pressure in mbar*77...
 	movff	xC+0,divA+0
 	movff	xC+1,divA+1
 	movlw	d'7'
 	movwf	divB+0
-	call	div16							; devided by 2^7 equals velocity in m/min
+	call	div16						; divided by 2^7 equals velocity in m/min
 
 	movlw	d'99'
-	cpfsgt	divA+0                      	; limit to 99m/min
+	cpfsgt	divA+0						; limit to 99m/min
 	bra		calc_velocity3
-	movwf	divA+0							; divA=99
+	movwf	divA+0						; divA=99
 
 calc_velocity3:
-    ; Copy old speeds
-    movff   old_velocity+2,old_velocity+3
-    movff   old_velocity+1,old_velocity+2
-    movff   old_velocity+0,old_velocity+1
-    movff   divA+0,old_velocity+0
-    
-;    movff   old_velocity+3,WREG
-;    addwf   divA+0,F                    	; add old speed
-;    bcf     STATUS,C
-;    rrcf    divA+0,F                    	; /2
-;    movff   old_velocity+2,WREG
-;    addwf   divA+0,F                    	; add old speed
-;    bcf     STATUS,C
-;    rrcf    divA+0,F                    	; /2
-;    movff   old_velocity+1,WREG
-;    addwf   divA+0,F                    	; add old speed
-;    bcf     STATUS,C
-;    rrcf    divA+0,F                    	; /2
-;    movff   old_velocity+0,WREG
-;    addwf   divA+0,F                    	; add old speed
-;    bcf     STATUS,C
-;    rrcf    divA+0,F                    	; /2
-	goto	TFT_display_velocity			; With divA+0 = m/min..., and return...
+	; Copy old speeds
+	movff	old_velocity+2,old_velocity+3
+	movff	old_velocity+1,old_velocity+2
+	movff	old_velocity+0,old_velocity+1
+	movff	divA+0,old_velocity+0
+
+;	movff	old_velocity+3,WREG
+;	addwf	divA+0,F					; add old speed
+;	bcf		STATUS,C
+;	rrcf	divA+0,F					; /2
+;	movff	old_velocity+2,WREG
+;	addwf	divA+0,F					; add old speed
+;	bcf		STATUS,C
+;	rrcf	divA+0,F					; /2
+;	movff	old_velocity+1,WREG
+;	addwf	divA+0,F					; add old speed
+;	bcf		STATUS,C
+;	rrcf	divA+0,F					; /2
+;	movff	old_velocity+0,WREG
+;	addwf	divA+0,F					; add old speed
+;	bcf		STATUS,C
+;	rrcf	divA+0,F					; /2
+	goto	TFT_display_velocity		; With divA+0 = m/min..., and return...
 
 
 ;=============================================================================
 
-set_reset_safety_stop:						; Set flags for safety stop and/or reset safety stop
-    TSTOSS  opt_enable_safetystop           ; =1: A safety stop is shown
-    bra		delete_safety_stop              ; No, don't show safety stop
+set_reset_safety_stop:					; Set flags for safety stop and/or reset safety stop
+	TSTOSS	opt_enable_safetystop		; =1: A safety stop is shown
+	bra		delete_safety_stop			; No, don't show safety stop
 
-	btfsc	decostop_active					; Is a deco stop displayed?
-	bra		delete_safety_stop				; Yes, don't show safety stop
+	btfsc	decostop_active				; Is a deco stop displayed?
+	bra		delete_safety_stop			; Yes, don't show safety stop
 
 	; Below "opt_safety_stop_reset"? Set flag and reset count-down timer
-    SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
+	SAFE_2BYTE_COPY rel_pressure, lo
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
 	movff	lo,sub_a+0
 	movff	hi,sub_a+1
-    movff   opt_safety_stop_reset,WREG      ; [cbar]
-    mullw   .10                             ; mbar in PRODL:H
-    movff   PRODL,sub_b+0
-    movff   PRODH,sub_b+1
-	call	subU16							; sub_c = sub_a - sub_b
+	movff	opt_safety_stop_reset,WREG	; [cbar]
+	mullw	.10							; mbar in PRODL:H
+	movff	PRODL,sub_b+0
+	movff	PRODH,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
 	btfss	neg_flag
-	bra		reset_safety_stop				; Below 10m, reset safety stop
+	bra		reset_safety_stop			; Below 10m, reset safety stop
 
 	; Above "opt_safety_stop_end"? Clear flag.
-    SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
+	SAFE_2BYTE_COPY rel_pressure, lo
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
 	movff	lo,sub_a+0
 	movff	hi,sub_a+1
-    movff   opt_safety_stop_end,WREG      	; [cbar]
-    mullw   .10                             ; mbar in PRODL:H
-    movff   PRODL,sub_b+0
-    movff   PRODH,sub_b+1
-	call	subU16							; sub_c = sub_a - sub_b
+	movff	opt_safety_stop_end,WREG	; [cbar]
+	mullw	.10							; mbar in PRODL:H
+	movff	PRODL,sub_b+0
+	movff	PRODH,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
 	btfsc	neg_flag
-	bra		delete_safety_stop				; Above 3m, remove safety stop
+	bra		delete_safety_stop			; Above 3m, remove safety stop
 
 	; Above "opt_safety_stop_start"? Activate safety stop
-    SAFE_2BYTE_COPY rel_pressure, lo
-	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
+	SAFE_2BYTE_COPY rel_pressure, lo
+	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
 	movff	lo,sub_a+0
 	movff	hi,sub_a+1
-    movff   opt_safety_stop_start,WREG      ; [cbar]
-    mullw   .10                             ; mbar in PRODL:H
-    movff   PRODL,sub_b+0
-    movff   PRODH,sub_b+1
-	call	subU16							;  sub_c = sub_a - sub_b
+	movff	opt_safety_stop_start,WREG	; [cbar]
+	mullw	.10							; mbar in PRODL:H
+	movff	PRODL,sub_b+0
+	movff	PRODH,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
 	btfsc	neg_flag
-	bra		acivate_safety_stop				; Above 5m, activate safety stop
-	bra		reset_safety_stop2				; Pause safety stop
+	bra		acivate_safety_stop			; Above 5m, activate safety stop
+	bra		reset_safety_stop2			; Pause safety stop
 
 acivate_safety_stop:
-	tstfsz	safety_stop_countdown			; Countdown at zero?
-	bsf		show_safety_stop				; No, Set flag!
+	tstfsz	safety_stop_countdown		; Countdown at zero?
+	bsf		show_safety_stop			; No, Set flag!
 	return
 
 delete_safety_stop:
-	clrf	safety_stop_countdown			; reset timer
-	bra		reset_safety_stop2				; Remove safety stop from display
+	clrf	safety_stop_countdown		; reset timer
+	bra		reset_safety_stop2			; Remove safety stop from display
 
 reset_safety_stop:
-    movff   opt_safety_stop_length,safety_stop_countdown	; reset timer
+	movff	opt_safety_stop_length,safety_stop_countdown ; reset timer
 reset_safety_stop2:
-	bcf		show_safety_stop				; Clear flag
-	btfss	safety_stop_active				; Safety stop shown
-	return									; No, don't delete it
-	bcf		safety_stop_active				; Clear flag
-    bsf	    FLAG_TFT_clear_safety_stop		; Clear safety stop
-    return
+	bcf		show_safety_stop			; Clear flag
+	btfss	safety_stop_active			; Safety stop shown
+	return								; No, don't delete it
+	bcf		safety_stop_active			; Clear flag
+	bsf		FLAG_TFT_clear_safety_stop	; Clear safety stop
+	return
 
 
 ;=============================================================================
 
 timeout_menuview:
-    decfsz  timeout_counter3,F          ; timeout for menuview
-    return                              ; No timeout, return
-    ; Timeout, clear e.g. "Menu?"
-    goto    menuview_toggle_reset       ; "returns"
+	decfsz	timeout_counter2,F			; timeout for menuview
+	return								; No timeout, return
+	; Timeout, clear e.g. "Menu?"
+	goto	menuview_toggle_reset		; "returns"
 
 timeout_divemode_menu:
-    decfsz  timeout_counter3,F          ; timeout for divemode menu
-    return
+	decfsz	timeout_counter2,F			; timeout for divemode menu
+	return
 
-    global  timeout_divemode_menu2
-timeout_divemode_menu2:                 ; Called from divemenu_tree.asm
-    bcf     divemode_menu               ; Timeout! Clear flag
-    call    TFT_clear_divemode_menu     ; Clear menu
-    bsf	    FLAG_TFT_active_gas_divemode; Redraw gas/setpoint/diluent
-    bcf     blinking_better_gas         ; Clear flag to have temperature updated once
-    bsf	    FLAG_TFT_temp_divemode		; Displays temperature
-    call    TFT_draw_gassep_line        ; Gas separator grid in spec mode only
+	global	timeout_divemode_menu2
+timeout_divemode_menu2:					; Called from divemenu_tree.asm
+	bcf		divemode_menu				; Timeout! Clear flag
+	call	TFT_clear_divemode_menu		; Clear menu
+	bsf		FLAG_TFT_active_gas_divemode; Redraw gas/setpoint/diluent
+	bcf		blinking_better_gas			; Clear flag to have temperature updated once
+	bsf		FLAG_TFT_temp_divemode		; Displays temperature
+	call	TFT_draw_gassep_line		; Gas separator grid in spec mode only
 
-    btfss   decostop_active             ; In deco mode ?
-    bra     timeout_divemode_menu_ndl   ; No, show NDL again
-    ; Show deco
-    bsf	    FLAG_TFT_display_deko_mask
-    bsf	    FLAG_TFT_display_deko
-    bsf	    FLAG_TFT_display_tts
-    return
-    
-timeout_divemode_menu_ndl:              
-    ; Show NDL
-    bsf	    FLAG_TFT_display_ndl_mask
-    bsf	    FLAG_TFT_display_ndl
-    return
+	btfss	decostop_active				; In deco mode ?
+	bra		timeout_divemode_menu_ndl	; No, show NDL again
+	; Show deco
+	bsf		FLAG_TFT_display_deko_mask
+	bsf		FLAG_TFT_display_deko
+	bsf		FLAG_TFT_display_tts
+	return
+
+timeout_divemode_menu_ndl:
+	; Show NDL
+	bsf		FLAG_TFT_display_ndl_mask
+	bsf		FLAG_TFT_display_ndl
+	return
 
 timeout_divemode:
-    btfsc   divemode_menu               ; Divemode menu active?
-    rcall   timeout_divemode_menu       ; Yes, check the timeout for it...
+	btfsc	divemode_menu				; Divemode menu active?
+	rcall	timeout_divemode_menu		; Yes, check the timeout for it...
 
-    btfsc   menuview                    ; is a menuview shown?
-    rcall   timeout_menuview            ; Yes, check the timeout for it...
+	btfsc	menuview					; is a menuview shown?
+	rcall	timeout_menuview			; Yes, check the timeout for it...
 
 	btfss	realdive					; Dive longer then one minute
 	return
-	
+
 	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
 	bra		timeout_divemode2			; Yes, use apnoe_timeout [min] for timeout
 
-    ifndef __DEBUG
-    	btfsc	simulatormode_active    ; In Simulator mode?
-    	bra		timeout_divemode3       ; Yes, use simulator timeout
-    endif
-	
+	ifndef __DEBUG
+		btfsc	simulatormode_active	; In Simulator mode?
+		bra		timeout_divemode3		; Yes, use simulator timeout
+	endif
+
 	bcf		divemode
-	infsnz  timeout_counter,F
-    incf    timeout_counter2,F			; timeout is 15bits
+	infsnz	timeout_counter1+0,F
+	incf	timeout_counter1+1,F		; timeout is 16 bit counter
 
-	movff	opt_diveTimeout,WREG	    ; in [min]
+	movff	opt_diveTimeout,WREG		; in [min]
 	mullw	.60
 	movff	PRODL,sub_a+0
-	movff	PRODH,sub_a+1		    	; in [s]
+	movff	PRODH,sub_a+1				; in [s]
 
-	movff	timeout_counter, sub_b+0
-	movff	timeout_counter2, sub_b+1
-	call	subU16						;  sub_c = sub_a - sub_b
+	movff	timeout_counter1+0,sub_b+0
+	movff	timeout_counter1+1,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b
 	btfss	neg_flag					; Result negative?
 	bsf		divemode					; No, set flag
 	return
 
 timeout_divemode2:
-	incf	timeout_counter,F			; seconds...
+	incf	timeout_counter1+0,F		; seconds...
 	movlw	d'60'
-	cpfseq	timeout_counter				; timeout_counter=60?
-	return								; No.
-; One minute timeout done.
-	clrf	timeout_counter
+	cpfseq	timeout_counter1+0			; timeout_counter1+0 = 60 ?
+	return								; No
+	; one minute timeout done
+	clrf	timeout_counter1+0
 	bcf		divemode
 	incf	apnoe_timeout_counter,F
 	movlw	apnoe_timeout				; apnoe timeout [min]
@@ -1073,54 +1092,56 @@
 
 timeout_divemode3:
 	bcf		divemode
-	incf	timeout_counter,F
-	movlw	simulator_timeout   		; simulator timeout
-	cpfsgt	timeout_counter
+	incf	timeout_counter1+0,F
+	movlw	simulator_timeout			; simulator timeout
+	cpfsgt	timeout_counter1+0
 	bsf		divemode
 	return
 
-update_divemode60:                      ; update any minute
+update_divemode60:						; update any minute
 	call	get_battery_voltage			; gets battery voltage
 	rcall	set_powersafe				; Battery low?
 	call	customview_minute			; Do every-minute tasks for the custom view area
-	bcf	oneminupdate
+	bcf		oneminupdate
 
-    btfss   simulatormode_active        ; in simulator mode?
-	return                              ; No
+	btfss	simulatormode_active		; in simulator mode?
+	return								; No
 	; Yes, quite dive mode simulation after 21*256s=89min:36s
 	movlw	.20
 	cpfsgt	total_divetime_seconds+1	; Timeout?
-	return                              ; No
-    ifdef __DEBUG
-    return                              ; No simulator timeout in debug mode
-    endif
-	bra		divemode_option1            ; Yes, set to 0m and "return"
+	return								; No
+
+	ifdef __DEBUG
+		return							; No simulator timeout in debug mode
+	endif
+
+	bra		divemode_option1			; Yes, set to 0m and "return"
 
 set_max_depth:
 	movff	max_pressure+0,sub_a+0
 	movff	max_pressure+1,sub_a+1
-    SAFE_2BYTE_COPY rel_pressure, sub_b
-	call	subU16                      ; sub_c = sub_a - sub_b
-                                        ; max_pressure<rel_pressure -> neg_flag=1
-                                        ; rel_pressure<=max_pressure -> neg_flag=0
-	btfss	neg_flag	
+	SAFE_2BYTE_COPY rel_pressure, sub_b
+	call	subU16						; sub_c = sub_a - sub_b
+										; max_pressure<rel_pressure -> neg_flag=1
+										; rel_pressure<=max_pressure -> neg_flag=0
+	btfss	neg_flag
 	return
-                                        ; max_pressure<rel_pressure
+										; max_pressure<rel_pressure
 	movff	sub_b+0,max_pressure+0
 	movff	sub_b+1,max_pressure+1
-	bsf	FLAG_TFT_max_depth				; Set flag
+	bsf		FLAG_TFT_max_depth			; Set flag
 	return
 
 set_min_temp:
 	movff	minimum_temperature+0,sub_a+0
 	movff	minimum_temperature+1,sub_a+1
-    SAFE_2BYTE_COPY temperature,sub_b
-	call	sub16                       ; sub_c = sub_a - sub_b
-                                        ; minimum_temperature<T -> neg_flag=1
-                                        ; T<=minimum_temperature -> neg_flag=0
-	btfsc	neg_flag	
+	SAFE_2BYTE_COPY temperature,sub_b
+	call	sub16						; sub_c = sub_a - sub_b
+										; minimum_temperature<T -> neg_flag=1
+										; T<=minimum_temperature -> neg_flag=0
+	btfsc	neg_flag
 	return
-                                        ; minimum_temperature>=T
+	; minimum_temperature >= T
 	movff	sub_b+0,minimum_temperature+0
 	movff	sub_b+1,minimum_temperature+1
 	return
@@ -1131,20 +1152,20 @@
 	bra		set_dive_modes3				; Yes!
 
 set_dive_modes0:
-	movlw	LOW		start_dive_threshold
+	movlw	LOW  start_dive_threshold
 	movwf	sub_a+0						; dive_treshold is in cm
-	movlw	HIGH	start_dive_threshold
+	movlw	HIGH start_dive_threshold
 	movwf	sub_a+1						; dive_treshold is in cm
 
 set_dive_modes1:
-    SAFE_2BYTE_COPY rel_pressure, sub_b
+	SAFE_2BYTE_COPY rel_pressure, sub_b
 	call	subU16						; sub_c = sub_a - sub_b
 
-	btfss	neg_flag	
-	bra		set_dive_modes2				; too shallow (rel_pressure<dive_threshold)
+	btfss	neg_flag
+	bra		set_dive_modes2				; too shallow (rel_pressure < dive_threshold)
 
 	btfsc	realdive					; Dive longer than one minute?
-	clrf 	timeout_counter				; Yes, reset timout counter
+	clrf	timeout_counter1+0			; Yes, reset timeout counter +++
 
 	bsf		divemode					; (Re-)Set divemode flag
 	bsf		divemode2					; displayed divetime is running
@@ -1161,22 +1182,22 @@
 	btfsc	realdive					; dive longer then one minute?
 	bra		set_dive_modes0				; Yes -> this is a real dive -> Use start_dive_threshold or ascend
 
-	movlw	HIGH	high_altitude_dive_threshold
+	movlw	LOW  high_altitude_dive_threshold
+	movwf	sub_a+0
+	movlw	HIGH high_altitude_dive_threshold
 	movwf	sub_a+1
-	movlw	LOW		high_altitude_dive_threshold
-	movwf	sub_a+0
 	bra		set_dive_modes1
 
 set_powersafe:
-    movlw   color_code_battery_low+1; [%]
-    cpfslt  batt_percent
+	movlw	color_code_battery_low+1; [%]
+	cpfslt	batt_percent
 	return
 
 	movlw	d'7'						; Type of Alarm (Battery Low)
 	movwf	AlarmType					; Copy to Alarm Register
-	bsf		event_occured				; Set Event Flag
-    movlw   .0
-    movff   WREG,opt_brightness     	; Set Brightness to ECO
+	bsf		event_occured				; set event flag
+	movlw	.0
+	movff	WREG,opt_brightness			; Set Brightness to ECO
 	return								; return
 
 calc_average_depth:
@@ -1184,10 +1205,10 @@
 	rcall	reset_average1				; Reset the resettable average depth
 
 	; 1. Add new 2xdepth to the Sum of depths registers
-    SAFE_2BYTE_COPY rel_pressure, xB	; Buffer...
-    bcf     STATUS,C
-    rlcf    xB+0,F
-    rlcf    xB+1,F                  	; x2
+	SAFE_2BYTE_COPY rel_pressure,xB		; Buffer...
+	bcf		STATUS,C
+	rlcf	xB+0,F
+	rlcf	xB+1,F						; x2
 
 	movf	xB+0,w
 	addwf	average_depth_hold+0,F
@@ -1195,7 +1216,7 @@
 	addwfc	average_depth_hold+1,F
 	movlw	d'0'
 	addwfc	average_depth_hold+2,F
-	addwfc	average_depth_hold+3,F 		; Will work up to 9999mbar*60*60*24=863913600mbar
+	addwfc	average_depth_hold+3,F		; Will work up to 9999mbar*60*60*24=863913600mbar
 
 	; Do the same for the _total registers (Non-Resettable)
 	movf	xB+0,w
@@ -1204,7 +1225,7 @@
 	addwfc	average_depth_hold_total+1,F
 	movlw	d'0'
 	addwfc	average_depth_hold_total+2,F
-	addwfc	average_depth_hold_total+3,F ; Will work up to 9999mbar*60*60*24=863913600mbar
+	addwfc	average_depth_hold_total+3,F; Will work up to 9999mbar*60*60*24=863913600mbar
 
 	; 2. Compute Average Depth on base of average_divesecs:2
 	movff	average_divesecs+0,xB+0
@@ -1214,21 +1235,21 @@
 	movff	average_depth_hold+2,xC+2
 	movff	average_depth_hold+3,xC+3
 
-	call	div32x16 					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+0,avg_rel_pressure+0
 	movff	xC+1,avg_rel_pressure+1
 
-    btfss   divemode2                   ; displayed divetime is running?
-	return                              ; No (e.g. too shallow)
+	btfss	divemode2					; displayed divetime is running?
+	return								; No (e.g. too shallow)
 
 	; 3. Compute Total Average Depth on base of total_divetime_seconds:2
 	movff	total_divetime_seconds+0,xB+0
-	movff	total_divetime_seconds+1,xB+1		; Copy
+	movff	total_divetime_seconds+1,xB+1	; Copy
 	movff	average_depth_hold_total+0,xC+0
 	movff	average_depth_hold_total+1,xC+1
 	movff	average_depth_hold_total+2,xC+2
 	movff	average_depth_hold_total+3,xC+3
-	call	div32x16 					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	call	div32x16					; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
 	movff	xC+0,avg_rel_pressure_total+0
 	movff	xC+1,avg_rel_pressure_total+1
 	return
@@ -1245,53 +1266,52 @@
 	return
 
 test_switches_divemode:					; checks switches in divemode
-    btfsc   divemode_menu               ; Divemode menu shown?
-    bra     test_switches_divemode_menu ; Yes, use menu processor
+	btfsc	divemode_menu				; Divemode menu shown?
+	bra		test_switches_divemode_menu	; Yes, use menu processor
 	btfsc	switch_left
-	; bra	test_switches_divemode2		; Enter button pressed, check if we need to do something
-	goto    menuview_toggle         	; Menu or Simulator tasks; and return...
+	;bra	test_switches_divemode2		; Enter button pressed, check if we need to do something
+	goto	menuview_toggle				; Menu or Simulator tasks; and return...
 	btfss	switch_right
-	return                              ; No button press
-    tstfsz  menupos2                    ; any option shown?
-    bra     test_switches_divemode1     ; Yes, do option tasks
-	bsf		toggle_customview           ; No, toggle custom view
-    return
+	return								; No button press
+	tstfsz	menupos2					; any option shown?
+	bra		test_switches_divemode1		; Yes, do option tasks
+	bsf		toggle_customview			; No, toggle custom view
+	return
 
 test_switches_divemode_menu:
 	btfsc	switch_left
-	bra		test_switches_divemode_menu2    ; Move cursor
+	bra		test_switches_divemode_menu2; Move cursor
 	btfsc	switch_right
-    bra		test_switches_divemode_menu3    ; Enter submenu or do something
-    return                                  ; No button press
+	bra		test_switches_divemode_menu3; Enter submenu or do something
+	return								; No button press
 
 test_switches_divemode_menu1:
-    clrf    menupos
+	clrf	menupos1
 test_switches_divemode_menu2:
-    incf    menupos,F
-    incf    menupos4,W                  ; menupos4+1 -> WREG
-    cpfslt  menupos                     ; >menupos4 (Set in menu_processor.asm)?
-    bra     test_switches_divemode_menu1; > Yes, set to 1
-    call    TFT_divemode_menu_cursor    ; Update the cursor
-    bcf     switch_left
-	movlw	divemode_menu_timeout       ; Reload timeout
-	movwf	timeout_counter3            ; timeout for divemode menu
-    return
+	incf	menupos1,F
+	incf	menupos4,W					; menupos4+1 -> WREG
+	cpfslt	menupos1					; > menupos4 (Set in menu_processor.asm)?
+	bra		test_switches_divemode_menu1; > Yes, set to 1
+	call	TFT_divemode_menu_cursor	; Update the cursor
+	bcf		switch_left
+	movlw	divemode_menu_timeout		; Reload timeout
+	movwf	timeout_counter2			; timeout for divemode menu
+	return
 
-test_switches_divemode_menu3:           ; Enter submenu or do something
-    bcf     switch_right
-;    decf    menupos,F					; menu_processor needs 0-5...
-    extern  do_line_menu
-    goto    do_line_menu                ; Warning! Trashes STKPTR and returns to diveloop_loop4:
+test_switches_divemode_menu3:			; Enter submenu or do something
+	bcf		switch_right
+;	decf	menupos1,F					; menu_processor needs 0-5...
+	goto	do_line_menu				; Warning! Trashes STKPTR and returns to diveloop_loop4:
 
 test_switches_divemode1:
 	bcf		switch_right
-    movlw   divemode_menuview_timeout
-    movwf   timeout_counter3            ; Reload timeout
-	movff	menupos2,WREG               ; menupos2 holds number of customview/divemode menu function
+	movlw	divemode_menuview_timeout
+	movwf	timeout_counter2			; Reload timeout
+	movff	menupos2,WREG				; menupos2 holds number of customview/divemode menu function
 	dcfsnz	WREG,F
-    bra		divemode_option_gaschange	; Switch to the indicated "better gas"
+	bra		divemode_option_gaschange	; Switch to the indicated "better gas"
 	dcfsnz	WREG,F
-    bra		divemode_option0			; Start/Setup Divemode menu
+	bra		divemode_option0			; Start/Setup Divemode menu
 	dcfsnz	WREG,F
 	bra		divemode_option1			; Quit Simulation?
 	dcfsnz	WREG,F
@@ -1308,89 +1328,95 @@
 	bra		divemode_option7			; Store heading
 	dcfsnz	WREG,F
 	bra		divemode_option8			; Switch to alt. layout
-    return
+	return
 
 gas_switched_common:
-    bcf     divemode_gaschange			; Clear flag
-    tstfsz  menupos						; menupos=0?
-    bra     gas_switched_common1		; No
-    return								; Yes, do not switch gas (there is no Gas #0 !)
+	bcf		divemode_gaschange			; Clear flag
+	btfss	FLAG_back_to_loop			; check if it is a switchback from OC bailout to loop
+	bra		gas_switched_common0		; NO  - continue with checking if selected gas is valid
+	bcf		FLAG_back_to_loop			; YES - clear flag
+	movff	active_diluent,menupos1		;       reload last diluent
+	bra		gas_switched_common1		;       continue with common part
+gas_switched_common0:
+	tstfsz	menupos1					; menupos1=0?
+	bra		gas_switched_common1		; NO  - valid gas
+	return								; YES - something went wrong, invalid gas, abort
 gas_switched_common1:
-	movf	menupos,W					; get selected gas into WREG (1-6)
+	movf	menupos1,W					; get selected gas into WREG (1-6)
 
-    btfsc   FLAG_ccr_mode				; in CCR mode?
+	btfsc	FLAG_ccr_mode				; in CCR mode?
 	bra		gas_switched_common2		; YES - configure diluent or bailout
-	btfsc   FLAG_pscr_mode				; in pSCR mode?
+	btfsc	FLAG_pscr_mode				; in pSCR mode?
 	bra		gas_switched_common2		; YES - configure diluent or bailout
-	
+
 	; OC
 	rcall	setup_gas_registers			; With WREG = Gas 1-6
-    rcall	deco_setup_oc_gases			; With WREG = Gas 1-6
+	rcall	deco_setup_oc_gases			; With WREG = Gas 1-6
 	bra		gas_switched_common3
 
-	; Loop or Bailout
+	; loop or bailout
 gas_switched_common2:
-    rcall   setup_dil_registers			; With WREG = diluent 1-6, in case of is_bailout reverts to OC gases
-    rcall	deco_setup_cc_diluents		; With WREG = diluent 1-6, in case of is_bailout reverts to OC gases
- 
+	rcall	setup_dil_registers			; With WREG = diluent 1-6, in case of is_bailout reverts to OC gases
+	rcall	deco_setup_cc_diluents		; With WREG = diluent 1-6, in case of is_bailout reverts to OC gases
+
 gas_switched_common3:
-    bsf		FLAG_TFT_active_gas_divemode	; Redraw gas/setpoint/diluent
-    call	restart_deco_engine_wo_ceiling	; abort any running deco calculations and restart the deco engine
+	bsf		FLAG_TFT_active_gas_divemode	; Redraw gas/setpoint/diluent
+	call	restart_deco_engine_wo_ceiling	; abort any running deco calculations and restart the deco engine
 
-    ; Set flags for profile recording
-	bsf		event_occured				; Set global event byte
-    btfsc   is_bailout					; Choose OC Bailouts (OC Gases)
-    bsf     bailoutgas_event			; Bailout gas change
-    btfss   is_bailout					; Choose OC Bailouts (OC Gases)
+	; Set flags for profile recording
+	bsf		event_occured				; set event flag
+	btfsc	is_bailout					; Choose OC Bailouts (OC Gases)
+	bsf		bailoutgas_event			; Bailout gas change
+	btfss	is_bailout					; Choose OC Bailouts (OC Gases)
 	bsf		stored_gas_changed			; OC gas change
 	return
 
 
 ; Code to pass all parameters to the C code
 
-	global  get_first_gas_to_WREG
+	global	get_first_gas_to_WREG
 get_first_gas_to_WREG:					; Gets first gas (1-5) into WREG
-	lfsr    FSR1,opt_gas_type			; Point to gas types
-	clrf    lo							; start with Gas0
+	lfsr	FSR1,opt_gas_type			; Point to gas types
+	clrf	lo							; start with Gas0
 get_first_gas_to_WREG2:
-	movf    lo,W
-	movf    PLUSW1,W					; Get Type of Gas #lo
-	sublw   .1							; it is = 1 (First Gas)
-	bz      get_first_gas_to_WREG3		; Found the first gas!
-	incf    lo,F						; ++
-	movlw   NUM_GAS+1
-	cpfseq  lo							; All done?
-	bra     get_first_gas_to_WREG2		; Not yet
+	movf	lo,W
+	movf	PLUSW1,W					; Get Type of Gas #lo
+	sublw	.1							; it is = 1 (First Gas)
+	bz		get_first_gas_to_WREG3		; Found the first gas!
+	incf	lo,F						; ++
+	movlw	NUM_GAS+1
+	cpfseq	lo							; All done?
+	bra		get_first_gas_to_WREG2		; Not yet
 	; No first gas found, use #1
-	movlw   .0
-	movff   WREG,opt_gas_type+0			; Set Gas1 to First
+	movlw	.0
+	movff	WREG,opt_gas_type+0			; Set Gas1 to First
 	incf	WREG,W						; 0 -> 1
 	return
 get_first_gas_to_WREG3:
-	movf    lo,W						; Put into Wreg
+	movf	lo,W						; Put into Wreg
 	incf	WREG,W						; 0-4 -> 1-5
 	return								; Done
 
-	global  get_first_dil_to_WREG
+	global	get_first_dil_to_WREG
 get_first_dil_to_WREG:					; Gets first dil (1-5) into WREG
-	lfsr    FSR1,opt_dil_type			; Point to dil types
-	clrf    lo							; start with Gas0
+	lfsr	FSR1,opt_dil_type			; Point to dil types
+	clrf	lo							; start with Gas0
 get_first_dil_to_WREG2:
-	movf    lo,W
-	movf    PLUSW1,W					; Get Type of Dil #lo
-	sublw   .1							; it is = 1 (First Dil)
-	bz      get_first_dil_to_WREG3		; Found the first dil!
-	incf    lo,F						; ++
-	movlw   NUM_GAS+1
-	cpfseq  lo							; All done?
-	bra     get_first_dil_to_WREG2		; Not yet
+	movf	lo,W
+	movf	PLUSW1,W					; Get Type of Dil #lo
+	sublw	.1							; it is = 1 (First Dil)
+	bz		get_first_dil_to_WREG3		; Found the first dil!
+	incf	lo,F						; ++
+	movlw	NUM_GAS+1
+	cpfseq	lo							; All done?
+	bra		get_first_dil_to_WREG2		; Not yet
 	; No first dil found, use #1
-	movlw   .0
-	movff   WREG,opt_dil_type+0			; Set Dil1 to First
+	movlw	.0
+	movff	WREG,opt_dil_type+0			; Set Dil1 to First
 	incf	WREG,W						; 0 -> 1
 	return
 get_first_dil_to_WREG3:
-	movf    lo,W						; Put into Wreg
+	movf	lo,W						; Put into Wreg
 	incf	WREG,W						; 0-4 -> 1-5
 	return								; Done
 
@@ -1398,110 +1424,105 @@
 deco_setup_oc_gases:					; with currently breathed gas in WREG (1-5 or 6)
 	movff	WREG,char_I_current_gas		; gas to start with when doing the deco calculations
 
-	movff   opt_gas_He_ratio+0,char_I_deco_He_ratio+0
-	movff   opt_gas_O2_ratio+0,char_I_deco_O2_ratio+0
-	banksel opt_gas_type+0
-	movlw   .3							; 3=Deco
-	cpfseq  opt_gas_type+0				; Gas is deco type?
-	clrf    opt_OC_bail_gas_change+0	; No, clear depth for 0=Disabled, 1=First and 2=Travel
-	banksel common
+	banksel	opt_gas_type				; opt_gas_type[] and opt_OC_bail_gas_change[] are together in bank common2
+
+	movff	opt_gas_He_ratio+0,char_I_deco_He_ratio+0
+	movff	opt_gas_O2_ratio+0,char_I_deco_O2_ratio+0
 
-	movff   opt_gas_He_ratio+1,char_I_deco_He_ratio+1
-	movff   opt_gas_O2_ratio+1,char_I_deco_O2_ratio+1
-	banksel opt_gas_type+1
-	movlw   .3							; 3=Deco
-	cpfseq  opt_gas_type+1				; Gas is deco type?
-	clrf    opt_OC_bail_gas_change+1	; No, clear depth for 0=Disabled, 1=First and 2=Travel
-	banksel common
+	movlw	.3							; 3=Deco
+	cpfseq	opt_gas_type+0				; Gas is deco type?
+	clrf	opt_OC_bail_gas_change+0	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+
+	movff	opt_gas_He_ratio+1,char_I_deco_He_ratio+1
+	movff	opt_gas_O2_ratio+1,char_I_deco_O2_ratio+1
+	movlw	.3							; 3=Deco
+	cpfseq	opt_gas_type+1				; Gas is deco type?
+	clrf	opt_OC_bail_gas_change+1	; No, clear depth for 0=Disabled, 1=First and 2=Travel
 
-	movff   opt_gas_He_ratio+2,char_I_deco_He_ratio+2
-	movff   opt_gas_O2_ratio+2,char_I_deco_O2_ratio+2
-	banksel opt_gas_type+2
-	movlw   .3							; 3=Deco
-	cpfseq  opt_gas_type+2				; Gas is deco type?
-	clrf    opt_OC_bail_gas_change+2	; No, clear depth for 0=Disabled, 1=First and 2=Travel
-	banksel common
+	movff	opt_gas_He_ratio+2,char_I_deco_He_ratio+2
+	movff	opt_gas_O2_ratio+2,char_I_deco_O2_ratio+2
+	movlw	.3							; 3=Deco
+	cpfseq	opt_gas_type+2				; Gas is deco type?
+	clrf	opt_OC_bail_gas_change+2	; No, clear depth for 0=Disabled, 1=First and 2=Travel
 
-	movff   opt_gas_He_ratio+3,char_I_deco_He_ratio+3
-	movff   opt_gas_O2_ratio+3,char_I_deco_O2_ratio+3
-	banksel opt_gas_type+3
-	movlw   .3							; 3=Deco
-	cpfseq  opt_gas_type+3				; Gas is deco type?
-	clrf    opt_OC_bail_gas_change+3	; No, clear depth for 0=Disabled, 1=First and 2=Travel
-	banksel common
+	movff	opt_gas_He_ratio+3,char_I_deco_He_ratio+3
+	movff	opt_gas_O2_ratio+3,char_I_deco_O2_ratio+3
+	movlw	.3							; 3=Deco
+	cpfseq	opt_gas_type+3				; Gas is deco type?
+	clrf	opt_OC_bail_gas_change+3	; No, clear depth for 0=Disabled, 1=First and 2=Travel
 
-	movff   opt_gas_He_ratio+4,char_I_deco_He_ratio+4
-	movff   opt_gas_O2_ratio+4,char_I_deco_O2_ratio+4
-	banksel opt_gas_type+4
-	movlw   .3							; 3=Deco
-	cpfseq  opt_gas_type+4				; Gas is deco type?
-	clrf    opt_OC_bail_gas_change+4	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+	movff	opt_gas_He_ratio+4,char_I_deco_He_ratio+4
+	movff	opt_gas_O2_ratio+4,char_I_deco_O2_ratio+4
+	movlw	.3							; 3=Deco
+	cpfseq	opt_gas_type+4				; Gas is deco type?
+	clrf	opt_OC_bail_gas_change+4	; No, clear depth for 0=Disabled, 1=First and 2=Travel
+
 	banksel common
 
 	; Setup char_I_deco_gas_change array
-	movff   opt_OC_bail_gas_change+0, char_I_deco_gas_change+0
-	movff   opt_OC_bail_gas_change+1, char_I_deco_gas_change+1
-	movff   opt_OC_bail_gas_change+2, char_I_deco_gas_change+2
-	movff   opt_OC_bail_gas_change+3, char_I_deco_gas_change+3
-	movff   opt_OC_bail_gas_change+4, char_I_deco_gas_change+4
+	movff	opt_OC_bail_gas_change+0, char_I_deco_gas_change+0
+	movff	opt_OC_bail_gas_change+1, char_I_deco_gas_change+1
+	movff	opt_OC_bail_gas_change+2, char_I_deco_gas_change+2
+	movff	opt_OC_bail_gas_change+3, char_I_deco_gas_change+3
+	movff	opt_OC_bail_gas_change+4, char_I_deco_gas_change+4
 
 	; switch to oc mode
 	movff	char_O_deco_status,lo		; working copy of char_O_deco_status in bank common
 	bcf		lo,DECO_MODE_PSCR_FLAG		; clear the pSCR-mode flag (may not be set, but never mind)
 	bcf		lo,DECO_MODE_LOOP_FLAG		; clear the loop/CCR-mode flag
 	movff	lo,char_O_deco_status		; bank safe write-back of char_O_deco_status
-		
+
 	return
 
-		
+
 	global	deco_setup_cc_diluents
 deco_setup_cc_diluents:					; with currently breathed gas in WREG (1-5 or 6)
 	btfsc	is_bailout					; check if in bailout condition
 	bra		deco_setup_oc_gases			; revert to setting up OC gases in bailout condition
-	
+
 	movff	WREG,char_I_current_gas		; gas to start with when doing the deco calculations
 
-	movff   opt_dil_He_ratio+0,char_I_deco_He_ratio+0
-	movff   opt_dil_O2_ratio+0,char_I_deco_O2_ratio+0
-	movff   opt_dil_type+0,WREG			; 0=Disabled, 1=First, 2=Normal
-	tstfsz  WREG						; Disabled?
-	bra     $+4							; No
-	movff   WREG,char_I_dil_change+0	; Yes, clear char_I_deco_gas_change (Bank safe)
+	movff	opt_dil_He_ratio+0,char_I_deco_He_ratio+0
+	movff	opt_dil_O2_ratio+0,char_I_deco_O2_ratio+0
+	movff	opt_dil_type+0,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	WREG						; Disabled?
+	bra		$+4							; No
+	movff	WREG,char_I_dil_change+0	; Yes, clear char_I_deco_gas_change (Bank safe)
 
-	movff   opt_dil_He_ratio+1,char_I_deco_He_ratio+1
-	movff   opt_dil_O2_ratio+1,char_I_deco_O2_ratio+1
-	movff   opt_dil_type+1,WREG			; 0=Disabled, 1=First, 2=Normal
-	tstfsz  WREG						; Disabled?
-	bra     $+4							; No
-	movff   WREG,char_I_dil_change+1	; Yes, clear char_I_dil_change
+	movff	opt_dil_He_ratio+1,char_I_deco_He_ratio+1
+	movff	opt_dil_O2_ratio+1,char_I_deco_O2_ratio+1
+	movff	opt_dil_type+1,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	WREG						; Disabled?
+	bra		$+4							; No
+	movff	WREG,char_I_dil_change+1	; Yes, clear char_I_dil_change
 
-	movff   opt_dil_He_ratio+2,char_I_deco_He_ratio+2
-	movff   opt_dil_O2_ratio+2,char_I_deco_O2_ratio+2
-	movff   opt_dil_type+2,WREG			; 0=Disabled, 1=First, 2=Normal
-	tstfsz  WREG						; Disabled?
-	bra     $+4							; No
-	movff   WREG,char_I_dil_change+2	; Yes, clear char_I_dil_change
+	movff	opt_dil_He_ratio+2,char_I_deco_He_ratio+2
+	movff	opt_dil_O2_ratio+2,char_I_deco_O2_ratio+2
+	movff	opt_dil_type+2,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	WREG						; Disabled?
+	bra		$+4							; No
+	movff	WREG,char_I_dil_change+2	; Yes, clear char_I_dil_change
 
-	movff   opt_dil_He_ratio+3,char_I_deco_He_ratio+3
-	movff   opt_dil_O2_ratio+3,char_I_deco_O2_ratio+3
-	movff   opt_dil_type+3,WREG			; 0=Disabled, 1=First, 2=Normal
-	tstfsz  WREG						; Disabled?
-	bra     $+4							; No
-	movff   WREG,char_I_dil_change+3	; Yes, clear char_I_dil_change
+	movff	opt_dil_He_ratio+3,char_I_deco_He_ratio+3
+	movff	opt_dil_O2_ratio+3,char_I_deco_O2_ratio+3
+	movff	opt_dil_type+3,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	WREG						; Disabled?
+	bra		$+4							; No
+	movff	WREG,char_I_dil_change+3	; Yes, clear char_I_dil_change
 
-	movff   opt_dil_He_ratio+4,char_I_deco_He_ratio+4
-	movff   opt_dil_O2_ratio+4,char_I_deco_O2_ratio+4
-	movff   opt_dil_type+4,WREG			; 0=Disabled, 1=First, 2=Normal
-	tstfsz  WREG						; Disabled?
-	bra     $+4							; No
-	movff   WREG,char_I_dil_change+4	; Yes, clear char_I_dil_change
+	movff	opt_dil_He_ratio+4,char_I_deco_He_ratio+4
+	movff	opt_dil_O2_ratio+4,char_I_deco_O2_ratio+4
+	movff	opt_dil_type+4,WREG			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	WREG						; Disabled?
+	bra		$+4							; No
+	movff	WREG,char_I_dil_change+4	; Yes, clear char_I_dil_change
 
 	; Setup char_I_deco_gas_change array
-	movff   char_I_dil_change+0, char_I_deco_gas_change+0
-	movff   char_I_dil_change+1, char_I_deco_gas_change+1
-	movff   char_I_dil_change+2, char_I_deco_gas_change+2
-	movff   char_I_dil_change+3, char_I_deco_gas_change+3
-	movff   char_I_dil_change+4, char_I_deco_gas_change+4
+	movff	char_I_dil_change+0, char_I_deco_gas_change+0
+	movff	char_I_dil_change+1, char_I_deco_gas_change+1
+	movff	char_I_dil_change+2, char_I_deco_gas_change+2
+	movff	char_I_dil_change+3, char_I_deco_gas_change+3
+	movff	char_I_dil_change+4, char_I_deco_gas_change+4
 
 	; switch to CCR / pSCR mode
 	movff	char_O_deco_status,lo		; working copy of char_O_deco_status in bank common
@@ -1510,159 +1531,158 @@
 	btfsc	FLAG_pscr_mode				; check if we are in pSCR mode
 	bsf		lo,DECO_MODE_PSCR_FLAG		; YES - set additional flag for pSCR mode
 	movff	lo,char_O_deco_status		; bank safe write-back of char_O_deco_status	
-		
+
 	return
 
-	global  setup_gas_registers
-setup_gas_registers:						; with currently breathed gas in WREG (1-5 or 6)
-	movwf	active_gas						; set as current gas
+	global	setup_gas_registers
+setup_gas_registers:					; with currently breathed gas in WREG (1-5 or 6)
+	movwf	active_gas					; set as current gas
 	movlw	.6
-	cpfseq	active_gas						; gas = gas6 ?
-	bra		setup_gas_registers_15			; NO - load gas 1-5
-	movff	gas6_O2_ratio,char_I_O2_ratio	; copy gas6 O2 ratio to deco engine
-	movff	gas6_He_ratio,char_I_He_ratio	; copy gas6 H2 ratio to deco engine	
-	bra		setup_gas_registers_com			; continue with common part
+	cpfseq	active_gas					; gas = gas6 ?
+	bra		setup_gas_registers_15		; NO - load gas 1-5
+	movff	gas6_O2_ratio,char_I_O2_ratio ; copy gas6 O2 ratio to deco engine
+	movff	gas6_He_ratio,char_I_He_ratio ; copy gas6 H2 ratio to deco engine	
+	bra		setup_gas_registers_com		; continue with common part
 setup_gas_registers_15:
-	decf	active_gas,W					; 1-5 -> 0-4
+	decf	active_gas,W				; 1-5 -> 0-4
 	lfsr	FSR1,opt_gas_O2_ratio+0
-	movff	PLUSW1,char_I_O2_ratio			; copy gas 1-5 O2 ratio to deco engine
+	movff	PLUSW1,char_I_O2_ratio		; copy gas 1-5 O2 ratio to deco engine
 	lfsr	FSR1,opt_gas_He_ratio+0
-	movff	PLUSW1,char_I_He_ratio			; copy gas 1-5 He ratio to deco engine
+	movff	PLUSW1,char_I_He_ratio		; copy gas 1-5 He ratio to deco engine
 setup_gas_registers_com:	
-	;lfsr	FSR1,opt_gas_type				; commented out - currently not used anywhere
-	;movff	PLUSW1,active_gas_type			; 0=Disabled, 1=First, 2=Travel, 3=Deco
-	movff	char_O_main_status,lo			; working copy of char_O_main_status in bank common
-	bcf		lo,DECO_MODE_PSCR_FLAG			; clear the pSCR-mode flag (may not be set, but never mind)
-	bcf		lo,DECO_MODE_LOOP_FLAG			; clear the loop/CCR-mode flag
-	movff	lo,char_O_main_status			; bank safe write-back of char_O_main_status
-	movf	active_gas,W					; reload WREG with diluent 1-5 or 6 (important!)
+	;lfsr	FSR1,opt_gas_type			; commented out - currently not used anywhere
+	;movff	PLUSW1,active_gas_type		; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	char_O_main_status,lo		; working copy of char_O_main_status in bank common
+	bcf		lo,DECO_MODE_PSCR_FLAG		; clear the pSCR-mode flag (may not be set, but never mind)
+	bcf		lo,DECO_MODE_LOOP_FLAG		; clear the loop/CCR-mode flag
+	movff	lo,char_O_main_status		; bank safe write-back of char_O_main_status
+	movf	active_gas,W				; reload WREG with diluent 1-5 or 6 (important!)
 	return
 
-	global  setup_dil_registers
-setup_dil_registers:						; with currently breathed gas in WREG (1-5 or 6)
-	btfsc	is_bailout						; check if in bailout condition
-	bra		setup_gas_registers				; revert to setting up OC gases in bailout condition
-	movwf	active_gas						; set as current gas
-	movff	WREG,active_diluent				; remember for when switching back from bailout to loop
+	global	setup_dil_registers
+setup_dil_registers:					; with currently breathed gas in WREG (1-5 or 6)
+	btfsc	is_bailout					; check if in bailout condition
+	bra		setup_gas_registers			; revert to setting up OC gases in bailout condition
+	movwf	active_gas					; set as current gas
+	movff	WREG,active_diluent			; remember for when switching back from bailout to loop
 	movlw	.6
-	cpfseq	active_gas						; diluent = gas6 ?
-	bra		setup_dil_registers_15			; NO - load diluent 1-5
-	movff	gas6_O2_ratio,char_I_O2_ratio	; copy gas6 O2 ratio to deco engine
-	movff	gas6_He_ratio,char_I_He_ratio	; copy gas6 H2 ratio to deco engine
-	bra		setup_dil_registers_com			; continue with common part
+	cpfseq	active_gas					; diluent = gas6 ?
+	bra		setup_dil_registers_15		; NO - load diluent 1-5
+	movff	gas6_O2_ratio,char_I_O2_ratio ; copy gas6 O2 ratio to deco engine
+	movff	gas6_He_ratio,char_I_He_ratio ; copy gas6 H2 ratio to deco engine
+	bra		setup_dil_registers_com		; continue with common part
 setup_dil_registers_15:
-	decf	active_gas,W					; 1-5 -> 0-4
+	decf	active_gas,W				; 1-5 -> 0-4
 	lfsr	FSR1,opt_dil_O2_ratio+0
-	movff	PLUSW1,char_I_O2_ratio			; copy diluent 1-5 O2 ratio to deco engine
+	movff	PLUSW1,char_I_O2_ratio		; copy diluent 1-5 O2 ratio to deco engine
 	lfsr	FSR1,opt_dil_He_ratio+0
-	movff	PLUSW1,char_I_He_ratio			; copy diluent 1-5 He ratio to deco engine
+	movff	PLUSW1,char_I_He_ratio		; copy diluent 1-5 He ratio to deco engine
 setup_dil_registers_com:
-	;lfsr	FSR1,opt_dil_type				; commented out - currently not used anywhere
-	;movff	PLUSW1,active_gas_type			; 0=Disabled, 1=First, 2=Normal (there is no type 3 for diluents)
-	movff	char_O_main_status,lo			; working copy of char_O_main_status in bank common
-	bsf		lo,DECO_MODE_LOOP_FLAG			; loop flag is set in both, CCR and pSCR mode
-	bcf		lo,DECO_MODE_PSCR_FLAG			; clear pSCR mode flag by default
-	btfsc	FLAG_pscr_mode					; check if we are in pSCR mode
-	bsf		lo,DECO_MODE_PSCR_FLAG			; YES - set additional flag for pSCR mode
-	movff	lo,char_O_main_status			; bank safe write-back of char_O_main_status
-	movf	active_gas,W					; reload WREG with diluent 1-5 or 6 (important!)
+	;lfsr	FSR1,opt_dil_type			; commented out - currently not used anywhere
+	;movff	PLUSW1,active_gas_type		; 0=Disabled, 1=First, 2=Normal (there is no type 3 for diluents)
+	movff	char_O_main_status,lo		; working copy of char_O_main_status in bank common
+	bsf		lo,DECO_MODE_LOOP_FLAG		; loop flag is set in both, CCR and pSCR mode
+	bcf		lo,DECO_MODE_PSCR_FLAG		; clear pSCR mode flag by default
+	btfsc	FLAG_pscr_mode				; check if we are in pSCR mode
+	bsf		lo,DECO_MODE_PSCR_FLAG		; YES - set additional flag for pSCR mode
+	movff	lo,char_O_main_status		; bank safe write-back of char_O_main_status
+	movf	active_gas,W				; reload WREG with diluent 1-5 or 6 (important!)
 	return
 
-divemode_option_gaschange:					; Switch to the better gas
-	movff	better_gas_number,menupos		; 1-5
-	bsf		divemode_gaschange				; Change the gas in the dive mode loop...
-	call	menuview_toggle_reset			; Reset to zero (Zero=no menuview)
-	bcf		better_gas_available			; Clear flag immediately
+divemode_option_gaschange:				; Switch to the better gas
+	movff	better_gas_number,menupos1	; 1-5
+	bsf		divemode_gaschange			; Change the gas in the dive mode loop...
+	call	menuview_toggle_reset		; Reset to zero (Zero=no menuview)
+	bcf		better_gas_available		; Clear flag immediately
 	return
 
-divemode_option0:							; Start/Setup Divemode menu
-	call	TFT_clear_divemode_menu			; Clear menu area
-	bcf	menuview
-	extern	do_main_divemenu
+divemode_option0:						; Start/Setup Divemode menu
+	call	TFT_clear_divemode_menu		; Clear menu area
+	bcf		menuview
 	call	do_main_divemenu
 
-    global  divemode_option0_return
+	global	divemode_option0_return
 divemode_option0_return:
-;    movlw   .1
-;    movwf   menupos                 ; Set to first option in divemode menu
-    call    TFT_divemode_menu_cursor; Show the cursor
+;	movlw	.1
+;	movwf	menupos1					; Set to first option in divemode menu
+	call	TFT_divemode_menu_cursor	; Show the cursor
 	movlw	divemode_menu_timeout
-	movwf	timeout_counter3        ; timeout for divemode menu
-    bsf     divemode_menu           ; Set flag
-    clrf    menupos2                ; Clear option counter
-    goto	diveloop_loop4          ; Goto back to diveloop (Menuprocessor trashes STKPTR!)
+	movwf	timeout_counter2			; timeout for divemode menu
+	bsf		divemode_menu				; Set flag
+	clrf	menupos2					; Clear option counter
+	goto	diveloop_loop4				; Goto back to diveloop (menu processor trashes STKPTR!)
 
 divemode_option4:
-	movlw	d'58'					; two seconds left
-	movwf	timeout_counter
-	movlw	apnoe_timeout-1			; apnoe timeout [min]
+	movlw	d'58'						; two seconds left
+	movwf	timeout_counter1+0
+	movlw	apnoe_timeout-1				; apnoe timeout [min]
 	movwf	apnoe_timeout_counter
-    btfss   simulatormode_active	; in simulator mode?
-	return							; No
-divemode_option1:					; Quit simulation mode
+	btfss	simulatormode_active		; in simulator mode?
+	return								; No
+divemode_option1:						; Quit simulation mode
 	banksel	isr_backup
-    movlw   low     .1000
-    movwf	sim_pressure+0
-    movlw   high    .1000
-	movwf   sim_pressure+1			; Set to 0m -> End of Dive
-	banksel common
-    call    menuview_toggle_reset   ; Reset to zero (Zero=no menuview)
-	
-	btfss	FLAG_apnoe_mode			; In Apnoe mode?
-	return							; No
-	movlw	d'58'					; two seconds left
-	movwf	timeout_counter
-	movlw	apnoe_timeout-1			; apnoe timeout [min]
+	movlw	LOW  .1000
+	movwf	sim_pressure+0
+	movlw	HIGH .1000
+	movwf	sim_pressure+1				; Set to 0m -> End of Dive
+	banksel	common
+	call	menuview_toggle_reset		; Reset to zero (Zero=no menuview)
+
+	btfss	FLAG_apnoe_mode				; In Apnoe mode?
+	return								; No
+	movlw	d'58'						; two seconds left
+	movwf	timeout_counter1+0
+	movlw	apnoe_timeout-1				; apnoe timeout [min]
 	movwf	apnoe_timeout_counter
 	return
 
-divemode_option3:					; minus 1m
+divemode_option3:						; minus 1m
 	banksel	isr_backup
 	movlw	d'100'
 	subwf	sim_pressure+0
 	movlw	.0
 	subwfb	sim_pressure+1
 	rcall	divemode_simulator_check_limits
-	banksel common
+	banksel	common
 	return
 
-divemode_option2:					; plus 1m
+divemode_option2:						; plus 1m
 	banksel	isr_backup
 	movlw	d'100'
 	addwf	sim_pressure+0
 	movlw	.0
 	addwfc	sim_pressure+1
 	rcall	divemode_simulator_check_limits
-	banksel common
+	banksel	common
 	return
 
 divemode_option5:
-    call    menuview_toggle_reset   ; Reset to zero (Zero=no menuview)
-    bsf     reset_average_depth     ; Set Flag
-    return
+	call	menuview_toggle_reset		; Reset to zero (Zero=no menuview)
+	bsf		reset_average_depth			; Set Flag
+	return
 
 divemode_option6:
-    bcf     divemode2                   ; Stop divetime
-    movlw   .5
-    addwf   divemins+0,F
-    movlw   .0
-    addwfc  divemins+1,F                ; Add 5 mins
-    movlw   LOW     (.5*.60)
-    addwf   average_divesecs+0,F
-    movlw   HIGH    (.5*.60)
-    addwfc  average_divesecs+1,F        ; Add 5*60 seconds
-    movlw   LOW     (.5*.60)
-    addwf   total_divetime_seconds+0,F
-    movlw   HIGH    (.5*.60)
-    addwfc  total_divetime_seconds+1,F  ; Add 5*60 seconds
+	bcf		divemode2					; Stop divetime
+	movlw	.5
+	addwf	divemins+0,F
+	movlw	.0
+	addwfc	divemins+1,F				; Add 5 mins
+	movlw	LOW  (.5*.60)
+	addwf	average_divesecs+0,F
+	movlw	HIGH (.5*.60)
+	addwfc	average_divesecs+1,F		; Add 5*60 seconds
+	movlw	LOW  (.5*.60)
+	addwf	total_divetime_seconds+0,F
+	movlw	HIGH (.5*.60)
+	addwfc	total_divetime_seconds+1,F	; Add 5*60 seconds
 
-	; 1. Add 300xdepth to the Sum of depths registers
-    SAFE_2BYTE_COPY rel_pressure, xB	; Buffer...
-    movlw   LOW     (.5*.60)
-    movwf   xA+0
-    movlw   HIGH    (.5*.60)
-    movwf   xA+1
-    call    mult16x16           		; xA*xB=xC
+	; 1. Add 300xdepth to the sum of depths registers
+	SAFE_2BYTE_COPY rel_pressure, xB	; Buffer...
+	movlw	LOW  (.5*.60)
+	movwf	xA+0
+	movlw	HIGH (.5*.60)
+	movwf	xA+1
+	call	mult16x16					; xA*xB=xC
 
 	movf	xC+0,w
 	addwf	average_depth_hold+0,F
@@ -1670,7 +1690,7 @@
 	addwfc	average_depth_hold+1,F
 	movf	xC+2,w
 	addwfc	average_depth_hold+2,F
-    movf	xC+3,w
+	movf	xC+3,w
 	addwfc	average_depth_hold+3,F		; Will work up to 9999mbar*60*60*24=863913600mbar
 
 	; Do the same for the _total registers (Non-Resettable)
@@ -1685,50 +1705,50 @@
 
 	movlw	.5							; + 5 minutes
 	movff	WREG,char_I_sim_advance_time; copy to mailbox
-	bsf     divemode2                   ; continue divetime
+	bsf		divemode2					; continue divetime
 	call	restart_deco_engine
-    goto    menuview_toggle_reset		; and return...
+	goto	menuview_toggle_reset		; and return...
 
 divemode_option7:
-    ; Store heading for compass view
-    movff   compass_heading_shown+0,compass_bearing+0
-    movff   compass_heading_shown+1,compass_bearing+1
-    bsf     compass_bearing_set         ; set flag
-    goto    menuview_toggle_reset       ; Done and return...
-    
+	; Store heading for compass view
+	movff	compass_heading_shown+0,compass_bearing+0
+	movff	compass_heading_shown+1,compass_bearing+1
+	bsf		compass_bearing_set			; set flag
+	goto	menuview_toggle_reset		; Done and return...
+	
 divemode_option8:
-    bsf	    alternative_divelayout		; Set flag for mode
-    bsf	    FLAG_TFT_divemode_mask_alt	; Set flag for mask
-    movlw   .1
-    movwf   menupos3					; For the customviews...
-    call    TFT_ClearScreen				; Clear screen
-    goto    menuview_toggle_reset       ; Done and return...
+	bsf		alternative_divelayout		; Set flag for mode
+	bsf		FLAG_TFT_divemode_mask_alt	; Set flag for mask
+	movlw	.1
+	movwf	menupos3					; For the customviews...
+	call	TFT_ClearScreen				; Clear screen
+	goto	menuview_toggle_reset		; Done and return...
 
 divemode_simulator_check_limits:
 	; Check limits (150m and 0m)
-	movlw	LOW		d'16000'            ; Compare to 16bar=16000mbar (150m).
-	subwf   sim_pressure+0,W
-	movlw	HIGH	d'16000'
-	subwfb  sim_pressure+1,W
-	bnc     divemode_simulator_check_limits2 ; No-carry = borrow = not deeper
+	movlw	LOW  d'16000'			; Compare to 16bar=16000mbar (150m).
+	subwf	sim_pressure+0,W
+	movlw	HIGH d'16000'
+	subwfb	sim_pressure+1,W
+	bnc		divemode_simulator_check_limits2 ; No-carry = borrow = not deeper
 
 	; Too deep, limit to 150m
-	movlw	LOW		d'16000'
+	movlw	LOW  d'16000'
 	movwf	sim_pressure+0
-	movlw	HIGH	d'16000'
+	movlw	HIGH d'16000'
 	movwf	sim_pressure+1
 	return
 divemode_simulator_check_limits2:
-	movlw	LOW		d'1000'             ; Compare to 1bar == 0m == 1000 mbar.
-	subwf   sim_pressure+0,W
-	movlw	HIGH	d'1000'
-	subwfb  sim_pressure+1,W
-	btfsc   STATUS,C                    ; No-carry = borrow = not deeper.
-	return                              ; Deeper than 0m == Ok.
+	movlw	LOW  d'1000'				; Compare to 1bar == 0m == 1000 mbar.
+	subwf	sim_pressure+0,W
+	movlw	HIGH d'1000'
+	subwfb	sim_pressure+1,W
+	btfsc	STATUS,C					; No-carry = borrow = not deeper.
+	return								; Deeper than 0m == Ok.
 	; Too shallow, limit to 0m
-	movlw	LOW		d'1000'
+	movlw	LOW  d'1000'
 	movwf	sim_pressure+0
-	movlw	HIGH	d'1000'
+	movlw	HIGH d'1000'
 	movwf	sim_pressure+1
 	return
 
@@ -1737,277 +1757,286 @@
 ;
 ; Output: better_gas_available, better_gas_number
 ;
-check_gas_change:					; Checks if a better gas should be selected (by user)
-	bcf		better_gas_available    ;=1: A better gas is available and a gas change is advised in divemode
-	clrf	better_gas_number       ; Clear better gas register
+check_gas_change:						; Checks if a better gas should be selected (by user)
+	bcf		better_gas_available		; =1: A better gas is available and a gas change is advised in divemode
+	clrf	WREG
+	movff	WREG,better_gas_number		; clear better gas register
 
-    SAFE_2BYTE_COPY rel_pressure,xA
+	SAFE_2BYTE_COPY rel_pressure,xA
 	movlw	d'100'
 	movwf	xB+0
 	clrf	xB+1
-	call	div16x16				; compute depth in full m -> result in xC+0
+	call	div16x16					; compute depth in full m -> result in xC+0
 
-    btfsc   FLAG_pscr_mode          ; In PSCR mode...
-    bra     check_gas_change2	    ; Yes, check for diluents
-    btfss   FLAG_ccr_mode           ; In CCR mode...
-    bra     check_gas_change_OC_bail; No, check for OC or bailout
+	btfsc	FLAG_pscr_mode				; in PSCR mode?
+	bra		check_gas_change2			; YES - check for diluents
+	btfss	FLAG_ccr_mode				; in CCR mode?
+	bra		check_gas_change_OC_bail	; NO - check for OC
 check_gas_change2:
-    btfsc   is_bailout              ; Bailout?
-    bra     check_gas_change_OC_bail; Yes, check for OC or bailout
+	btfsc	is_bailout					; in bailout?
+	bra		check_gas_change_OC_bail	; YES - check for OC
 
-    ; Check Diluents
-    movlw   .0
-    rcall   check_dil_common        ; With Gas 0-4 in WREG
-    movlw   .1
-    rcall   check_dil_common        ; With Gas 0-4 in WREG
-    movlw   .2
-    rcall   check_dil_common        ; With Gas 0-4 in WREG
-    movlw   .3
-    rcall   check_dil_common        ; With Gas 0-4 in WREG
-    movlw   .4
-    rcall   check_dil_common        ; With Gas 0-4 in WREG
-    bra     check_gas_change_exit
+	; Check Diluents
+	movlw	.0
+	rcall	check_dil_common			; With Gas 0-4 in WREG
+	movlw	.1
+	rcall	check_dil_common			; With Gas 0-4 in WREG
+	movlw	.2
+	rcall	check_dil_common			; With Gas 0-4 in WREG
+	movlw	.3
+	rcall	check_dil_common			; With Gas 0-4 in WREG
+	movlw	.4
+	rcall	check_dil_common			; With Gas 0-4 in WREG
+	bra		check_gas_change_exit
 
 check_gas_change_OC_bail:
-    movlw   .0
-    rcall   check_gas_common        ; With Gas 0-4 in WREG
-    movlw   .1
-    rcall   check_gas_common        ; With Gas 0-4 in WREG
-    movlw   .2
-    rcall   check_gas_common        ; With Gas 0-4 in WREG
-    movlw   .3
-    rcall   check_gas_common        ; With Gas 0-4 in WREG
-    movlw   .4
-    rcall   check_gas_common        ; With Gas 0-4 in WREG
-;    bra     check_gas_change_exit
+	movlw	.0
+	rcall	check_gas_common			; With Gas 0-4 in WREG
+	movlw	.1
+	rcall	check_gas_common			; With Gas 0-4 in WREG
+	movlw	.2
+	rcall	check_gas_common			; With Gas 0-4 in WREG
+	movlw	.3
+	rcall	check_gas_common			; With Gas 0-4 in WREG
+	movlw	.4
+	rcall	check_gas_common			; With Gas 0-4 in WREG
+	;bra	check_gas_change_exit
 
 check_gas_change_exit:
-    btfss   better_gas_available	; Is a better gas available
-    bcf     blinking_better_gas		; No, Clear blinking flag
-    btfss   better_gas_available	; Is a better gas available
-    clrf    better_gas_number		; No, Clear better_gas_number (For gaslist display)
-    bsf	    FLAG_TFT_active_gas_divemode; Redraw gas/setpoint/diluent
-    return
+	bsf		FLAG_TFT_active_gas_divemode; redraw gas/setpoint/diluent
+	btfss	better_gas_available		; is a better gas available?
+	bcf		blinking_better_gas			; NO - clear blinking flag
+	btfsc	better_gas_available		; is a better gas available?
+	return								; YES
+	clrf	WREG						; NO  - clear better_gas_number (for gaslist display)
+	movff	WREG,better_gas_number
+	return
 
-check_gas_common:                   ; With Gas 0-4 in WREG
-    btfsc   better_gas_available	; Better Gas already found?
-    return                          ; Yes, return
-    lfsr    FSR1,opt_gas_type       ; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    btfss   PLUSW1,0                ; Test for Bit0 and 1 -> type=3 -> Deco
-    return                          ; No
-    btfss   PLUSW1,1                ; Test for Bit0 and 1 -> type=3 -> Deco
-    return                          ; No
-    incf    WREG,W                  ; 1-5
-    cpfseq  active_gas				; is this gas current gas?
-    bra     check_gas_common2       ; No
-    return                          ; Yes, skip test for active gas
+check_gas_common:						; With Gas 0-4 in WREG
+	btfsc	better_gas_available		; Better Gas already found?
+	return								; Yes, return
+	lfsr	FSR1,opt_gas_type			; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	btfss	PLUSW1,0					; Test for Bit0 and 1 -> type=3 -> Deco
+	return								; No
+	btfss	PLUSW1,1					; Test for Bit0 and 1 -> type=3 -> Deco
+	return								; No
+	incf	WREG,W						; 1-5
+	cpfseq	active_gas					; is this gas current gas?
+	bra		check_gas_common2			; No
+	return								; Yes, skip test for active gas
 check_gas_common2:
-    decf    WREG,W                  ; 0-4
-    movwf   hi                      ; Save tested gas 0-4
-    lfsr    FSR1,opt_OC_bail_gas_change
-    movff   PLUSW1,lo               ; Change depth into lo
+	decf	WREG,W						; 0-4
+	movwf	hi							; Save tested gas 0-4
+	lfsr	FSR1,opt_OC_bail_gas_change
+	movff	PLUSW1,lo					; Change depth into lo
 	movlw	minimum_change_depth
-	cpfsgt	lo  					; Change depth>minimum_change_depth?
-	return                          ; No, Change depth not deep enough, skip!
-	movf	xC+0,W					; load depth in m into WREG
-	cpfsgt	lo  					; gas_change_depth < current depth?
-    bra     check_gas_common3       ; No, check if we are within the better_gas_window_pos window
-	incf    hi,W                    ; 1-5
-	movwf	better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
+	cpfsgt	lo							; Change depth>minimum_change_depth?
+	return								; No, Change depth not deep enough, skip!
+	movf	xC+0,W						; load depth in m into WREG
+	cpfsgt	lo							; gas_change_depth < current depth?
+	bra		check_gas_common3			; No, check if we are within the better_gas_window_pos window
+	incf	hi,W						; 1-5
+	movff	WREG,better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
 	movlw	better_gas_window_neg
-	subwf	lo,W                    ; Change depth-better_gas_window_neg
-	cpfslt	xC+0					; current depth<Change depth-better_gas_window_neg?
-    bra     check_gas_common4       ; Ok, now check the better gas ppO2<char_I_ppO2_max
-    return
-
+	subwf	lo,W						; Change depth-better_gas_window_neg
+	cpfslt	xC+0						; current depth<Change depth-better_gas_window_neg?
+	bra		check_gas_common4			; Ok, now check the better gas ppO2<char_I_ppO2_max
+	return
 check_gas_common3:
-	incf    hi,W                    ; 1-5
-	movwf	better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
+	incf	hi,W						; 1-5
+	movff	WREG,better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
 	movlw	better_gas_window_pos
-	addwf	lo,W                    ; Change depth+better_gas_window_pos
-	cpfsgt	xC+0					; current depth>Change depth+better_gas_window_pos?
-    bra     check_gas_common4       ; Ok, now check the better gas ppO2<char_I_ppO2_max
-    return
-
+	addwf	lo,W						; Change depth+better_gas_window_pos
+	cpfsgt	xC+0						; current depth>Change depth+better_gas_window_pos?
+	bra		check_gas_common4			; Ok, now check the better gas ppO2<char_I_ppO2_max
+	return
 check_gas_common4:
-    movf    hi,W                    	; gas 0-4 into WREG
-    lfsr    FSR1,char_I_deco_O2_ratio	; load base address char_I_deco_O2_ratio array
-    movff   PLUSW1,lo               	; read O2 ratio from array into lo
+	movf	hi,W						; gas 0-4 into WREG
+	lfsr	FSR1,char_I_deco_O2_ratio	; load base address char_I_deco_O2_ratio array
+	movff	PLUSW1,lo					; read O2 ratio from array into lo
 
-    SAFE_2BYTE_COPY amb_pressure, xA
+	SAFE_2BYTE_COPY amb_pressure, xA
 	movlw	d'10'
 	movwf	xB+0
 	clrf	xB+1
-	call	div16x16				; xC=p_amb/10
+	call	div16x16					; xC=p_amb/10
 	movff	xC+0,xA+0
 	movff	xC+1,xA+1
-    movff   lo,xB+0                 ; =O2 ratio
+	movff	lo,xB+0						; =O2 ratio
 	clrf	xB+1
-	call	mult16x16               ; lo * p_amb/10
+	call	mult16x16					; lo * p_amb/10
 
-    ; Check very high ppO2 manually
-	tstfsz	xC+2					; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
-	return                      	; Done.
-    ; Check if ppO2>3,30bar
-	btfsc   xC+1,7
-	return                      	; Done.
+	; Check very high ppO2 manually
+	tstfsz	xC+2						; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar?
+	return								; Done.
+	; Check if ppO2>3,30bar
+	btfsc	xC+1,7
+	return								; Done.
 
-    ; Check for low ppo2
+	; Check for low ppo2
 	movff	xC+0,sub_b+0
 	movff	xC+1,sub_b+1
-	movff   char_I_ppO2_min,WREG
-	mullw	d'100'		    		; char_I_ppO2_min*100
+	movff	char_I_ppO2_min,WREG
+	mullw	d'100'						; char_I_ppO2_min*100
 	movff	PRODL,sub_a+0
 	movff	PRODH,sub_a+1
-	call	subU16		    		; sub_c = sub_a - sub_b
+	call	subU16						; sub_c = sub_a - sub_b
 	btfss	neg_flag
-	return                      	; Done (Too low).
+	return								; Done (Too low).
 
 	;check if we are within our warning thresholds!
 	movff	xC+0,sub_a+0
 	movff	xC+1,sub_a+1
 	movff	char_I_ppO2_max_deco,WREG	; ppO2 max for MOD calculation and color coding in divemode
-	addlw   .1                  	; e.g. >1.60
-	mullw	d'100'		    		; char_I_ppO2_max*100
+	addlw	.1							; e.g. >1.60
+	mullw	d'100'						; char_I_ppO2_max*100
 	movff	PRODL,sub_b+0
 	movff	PRODH,sub_b+1
-	call	subU16		    		; sub_c = sub_a - sub_b
+	call	subU16						; sub_c = sub_a - sub_b
 	btfsc	neg_flag
-	bsf		better_gas_available	;=1: A better gas is available and a gas change is advised in divemode
-	return                      	; Done.
+	bsf		better_gas_available		;=1: A better gas is available and a gas change is advised in divemode
+	return								; Done.
+
 
-check_dil_common:                   ; With Dil 0-4 in WREG
-    btfsc   better_gas_available	; Better Diluent already found?
-    return                          ; Yes, return
-    lfsr    FSR1,opt_dil_type       ; 0=Disabled, 1=First, 2=Normal
-    tstfsz  PLUSW1                  ; =0?
-    bra     check_dil_common1       ; No
-    return                          ; Yes, skip inactive diluents for test
+check_dil_common:						; With Dil 0-4 in WREG
+	btfsc	better_gas_available		; Better Diluent already found?
+	return								; Yes, return
+	lfsr	FSR1,opt_dil_type			; 0=Disabled, 1=First, 2=Normal
+	tstfsz	PLUSW1						; =0?
+	bra		check_dil_common1			; No
+	return								; Yes, skip inactive diluents for test
 check_dil_common1:
-    incf    WREG,W                  ; 1-5
-    cpfseq  active_gas				; is this the current diluent?
-    bra     check_dil_common2       ; No
-    return                          ; Yes, skip test for active diluent
+	incf	WREG,W						; 1-5
+	cpfseq	active_gas					; is this the current diluent?
+	bra		check_dil_common2			; No
+	return								; Yes, skip test for active diluent
 check_dil_common2:
-    decf    WREG,W                  ; 0-4
-    movwf   hi                      ; Save tested diluent 0-4
-    lfsr    FSR1,char_I_dil_change
-    movff   PLUSW1,lo               ; Change depth into lo
+	decf	WREG,W						; 0-4
+	movwf	hi							; Save tested diluent 0-4
+	lfsr	FSR1,char_I_dil_change
+	movff	PLUSW1,lo					; Change depth into lo
 	movlw	minimum_change_depth
-	cpfsgt	lo  					; Change depth>minimum_change_depth?
-	return                          ; No, Change depth not deep enough, skip!
-	movf	xC+0,W					; load depth in m into WREG
-	cpfsgt	lo  					; gas_change_depth < current depth?
-    return                          ; No, check next gas
-	incf    hi,W                    ; 1-5
-	movwf	better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
+	cpfsgt	lo							; Change depth>minimum_change_depth?
+	return								; No, Change depth not deep enough, skip!
+	movf	xC+0,W						; load depth in m into WREG
+	cpfsgt	lo							; gas_change_depth < current depth?
+	return								; No, check next gas
+	incf	hi,W						; 1-5
+	movff	WREG,better_gas_number		; number (1-5) of the "better gas" in divemode, =0: no better gas available
 	movlw	better_gas_window_neg
-	subwf	lo,W                    ; Change depth-better_gas_window_neg
-	cpfslt	xC+0					; current depth<Change depth-better_gas_window_neg?
-	bsf		better_gas_available	;=1: A better gas is available and a gas change is advised in divemode
-    return
+	subwf	lo,W						; Change depth-better_gas_window_neg
+	cpfslt	xC+0						; current depth<Change depth-better_gas_window_neg?
+	bsf		better_gas_available		;=1: A better gas is available and a gas change is advised in divemode
+	return
 
 
 ;=============================================================================
 ; Check for Auto-SP
 ;
-check_dive_autosp:               	; Check for Auto-SP
-    movff   opt_ccr_mode,WREG       ; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .2                      ; opt_ccr_mode = 2 (Auto SP)?
-    bz      check_dive_autosp2      ; Yes, check
-    return                          ; No, return for Sensor or Fixed mode
+check_dive_autosp:						; Check for Auto-SP
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP, =1: Sensor, =2: Auto SP
+	sublw	.2							; opt_ccr_mode = 2 (Auto SP)?
+	bz		check_dive_autosp2			; Yes, check
+	return								; No, return for Sensor or Fixed mode
 check_dive_autosp2:
-    SAFE_2BYTE_COPY rel_pressure,xA
+	SAFE_2BYTE_COPY rel_pressure,xA
 	movlw	d'100'
 	movwf	xB+0
 	clrf	xB+1
-	call	div16x16				; compute depth in full m -> result in xC+0
-    ; Check SP2
-    btfsc   sp2_switched            ; =1: This setpoint has been autoselected already
-    bra     check_dive_autosp3      ; Skip check
-    movff   char_I_setpoint_change+1,lo ; Get depth in m
-    tstfsz  lo                      ; =0?
-    bra     check_dive_autosp2a     ; No, continue
-    bra     check_dive_autosp3      ; Skip check
+	call	div16x16					; compute depth in full m -> result in xC+0
+	; Check SP2
+	btfsc	sp2_switched				; =1: This setpoint has been autoselected already
+	bra		check_dive_autosp3			; Skip check
+	movff	char_I_setpoint_change+1,lo	; Get depth in m
+	tstfsz	lo							; =0?
+	bra		check_dive_autosp2a			; No, continue
+	bra		check_dive_autosp3			; Skip check
 check_dive_autosp2a:
-    decf    lo,W                    ; -1 -> WREG
-    cpfsgt  xC+0                    ; Compare with depth
-    bra     check_dive_autosp3      ; lower depth, do not switch
-    ; auto switch to SP2
+	decf	lo,W						; -1 -> WREG
+	cpfsgt	xC+0						; Compare with depth
+	bra		check_dive_autosp3			; lower depth, do not switch
+	; auto switch to SP2
 	movff	char_I_setpoint_cbar+1,char_I_const_ppO2	; Use SetPoint
-    rcall   xmit_sp_set_flag
-    bsf     sp2_switched            ; Set flag
+	rcall	xmit_sp_set_flag
+	bsf		sp2_switched				; Set flag
 check_dive_autosp3:
-    ; Check SP3
-    btfsc   sp3_switched            ;=1: This setpoint has been autoselected already
-    bra     check_dive_autosp4      ; Skip check
-    movff   char_I_setpoint_change+2,lo ; Get depth in m
-    tstfsz  lo                      ; =0?
-    bra     check_dive_autosp3a      ; No, continue
-    bra     check_dive_autosp4      ; Skip check
+	; Check SP3
+	btfsc	sp3_switched				;=1: This setpoint has been autoselected already
+	bra		check_dive_autosp4			; Skip check
+	movff	char_I_setpoint_change+2,lo	; Get depth in m
+	tstfsz	lo							; =0?
+	bra		check_dive_autosp3a			; No, continue
+	bra		check_dive_autosp4			; Skip check
 check_dive_autosp3a:
-    decf    lo,W                    ; -1 -> WREG
-    cpfsgt  xC+0                    ; Compare with depth
-    bra     check_dive_autosp4      ; lower depth, do not switch
-    ; auto switch to SP3
+	decf	lo,W						; -1 -> WREG
+	cpfsgt	xC+0						; Compare with depth
+	bra		check_dive_autosp4			; lower depth, do not switch
+	; auto switch to SP3
 	movff	char_I_setpoint_cbar+2,char_I_const_ppO2	; Use SetPoint
-    rcall   xmit_sp_set_flag
-    bsf     sp3_switched            ; Set flag
+	rcall	xmit_sp_set_flag
+	bsf		sp3_switched				; Set flag
 check_dive_autosp4:
-    ; Check SP4
-    btfsc   sp4_switched            ;=1: This setpoint has been autoselected already
-    bra     check_dive_autosp5      ; Skip check
-    movff   char_I_setpoint_change+3,lo ; Get depth in m
-    tstfsz  lo                      ; =0?
-    bra     check_dive_autosp4a     ; No, continue
-    bra     check_dive_autosp5      ; Skip check
+	; Check SP4
+	btfsc	sp4_switched				;=1: This setpoint has been autoselected already
+	bra		check_dive_autosp5			; Skip check
+	movff	char_I_setpoint_change+3,lo ; Get depth in m
+	tstfsz	lo							; =0?
+	bra		check_dive_autosp4a			; No, continue
+	bra		check_dive_autosp5			; Skip check
 check_dive_autosp4a:
-    decf    lo,W                    ; -1 -> WREG
-    cpfsgt  xC+0                    ; Compare with depth
-    bra     check_dive_autosp5      ; lower depth, do not switch
-    ; auto switch to SP4
-	movff	char_I_setpoint_cbar+3,char_I_const_ppO2	; Use SetPoint
-    rcall   xmit_sp_set_flag
-    bsf     sp4_switched            ; Set flag
+	decf	lo,W						; -1 -> WREG
+	cpfsgt	xC+0						; Compare with depth
+	bra		check_dive_autosp5			; lower depth, do not switch
+	; auto switch to SP4
+	movff	char_I_setpoint_cbar+3,char_I_const_ppO2 ; Use SetPoint
+	rcall	xmit_sp_set_flag
+	bsf		sp4_switched				; Set flag
 check_dive_autosp5:
-    ; Check SP5
-    btfsc   sp5_switched            ;=1: This setpoint has been autoselected already
-    bra     check_dive_autosp6      ; Skip check
-    movff   char_I_setpoint_change+4,lo ; Get depth in m
-    tstfsz  lo                      ; =0?
-    bra     check_dive_autosp5a     ; No, continue
-    bra     check_dive_autosp6      ; Skip check
+	; Check SP5
+	btfsc	sp5_switched				;=1: This setpoint has been autoselected already
+	bra		check_dive_autosp6			; Skip check
+	movff	char_I_setpoint_change+4,lo	; Get depth in m
+	tstfsz	lo							; =0?
+	bra		check_dive_autosp5a			; No, continue
+	bra		check_dive_autosp6			; Skip check
 check_dive_autosp5a:
-    decf    lo,W                    ; -1 -> WREG
-    cpfsgt  xC+0                    ; Compare with depth
-    bra     check_dive_autosp6      ; lower depth, do not switch
-    ; auto switch to SP5
-	movff	char_I_setpoint_cbar+4,char_I_const_ppO2	; Use SetPoint
-    rcall   xmit_sp_set_flag
-    bsf     sp5_switched            ; Set flag
+	decf	lo,W						; -1 -> WREG
+	cpfsgt	xC+0						; Compare with depth
+	bra		check_dive_autosp6			; lower depth, do not switch
+	; auto switch to SP5
+	movff	char_I_setpoint_cbar+4,char_I_const_ppO2 ; Use SetPoint
+	rcall	xmit_sp_set_flag
+	bsf		sp5_switched				; Set flag
 check_dive_autosp6:
-    return
+	return
 
 xmit_sp_set_flag:
-    movff   char_I_const_ppO2,WREG
-    call    transmit_setpoint       ; Transmit current setpoint from WREG (in cbar) to external electronics
-    bsf     setpoint_changed        ; Set flag (For profile)
-    bsf		event_occured			; Set global event byte
-    return
+	movff	char_I_const_ppO2,WREG
+	call	transmit_setpoint			; Transmit current setpoint from WREG (in cbar) to external electronics
+	bsf		setpoint_changed			; Set flag (for profile)
+	bsf		event_occured				; Set event flag
+	return
+
+set_logbook_marker:
+	bcf		FLAG_set_marker				; clear flag
+	movlw	d'6'						; set type of Alarm (manual marker)
+	movwf	AlarmType					; copy to Alarm Register
+	bsf		event_occured				; Set event flag
+	return
 
 ;=============================================================================
 ; Setup everything to enter divemode.
 ;
 dive_boot_oc:
-    rcall   get_first_gas_to_WREG			; Gets first gas (1-5) into WREG
-	rcall	setup_gas_registers				; set-up of gas parameters of currently breathed gas (with WREG = gas 1-5)
-	rcall	deco_setup_oc_gases				; set-up of gas list for deco calculations (with WREG = gas 1-5)
-    return
+	rcall	get_first_gas_to_WREG		; Gets first gas (1-5) into WREG
+	rcall	setup_gas_registers			; set-up of gas parameters of currently breathed gas (with WREG = gas 1-5)
+	rcall	deco_setup_oc_gases			; set-up of gas list for deco calculations (with WREG = gas 1-5)
+	return
 
 dive_boot_cc:
-    bcf     is_bailout                      ; =1: Bailout
-    bcf     setpoint_fallback               ; =1: Fallback to SP1 due to external O2 sensor failure
-    bcf		blinking_setpoint               ; Reset blinking SP flag
+	bcf		is_bailout					; =1: Bailout
+	bcf		setpoint_fallback			; =1: Fallback to SP1 due to external O2 sensor failure
+	bcf		blinking_setpoint			; Reset blinking SP flag
 
 	; revoke sensors from usage if they do not have a valid calibration
 	bsf		use_O2_sensor1
@@ -2019,363 +2048,337 @@
 	bcf		use_O2_sensor2
 	btfss	sensor3_calibrated_ok
 	bcf		use_O2_sensor3
-	
+
 	; In pSCR mode, only settings 0 (calculated ppO2) and 1 (ppO2 from sensors) are defined.
 	; In case we still have 3 (auto SP) selected out of previous ccr mode, we reset to 0.
 	btfss	FLAG_pscr_mode
 	bra		dive_boot_cc_1
-	movff   opt_ccr_mode,WREG				; =0: Fixed SP, =1: Sensor,  =2: Auto SP
-    sublw   .2								; opt_ccr_mode = 1 (Auto SP)?
-    bnz     dive_boot_cc_1
+	movff	opt_ccr_mode,WREG			; =0: Fixed SP (CCR) / calculated SP (pSCR), =1: Sensor, =2: Auto SP
+	sublw	.2							; opt_ccr_mode = 1 (Auto SP)?
+	bnz		dive_boot_cc_1
 	movlw	.0
 	movff	WREG,opt_ccr_mode
 
 dive_boot_cc_1:
-    bsf     setpoint_changed                ; Set flag (For profile)
-    bcf     sp2_switched                    ; =1: This setpoint has been autoselected already
-    bcf     sp3_switched                    ; =1: This setpoint has been autoselected already
-    bcf     sp4_switched                    ; =1: This setpoint has been autoselected already
-    bcf     sp5_switched                    ; =1: This setpoint has been autoselected already
+	bsf		setpoint_changed			; set flag (for profile)
+	bcf		sp2_switched				; =1: This setpoint has been auto-selected already
+	bcf		sp3_switched				; =1: This setpoint has been auto-selected already
+	bcf		sp4_switched				; =1: This setpoint has been auto-selected already
+	bcf		sp5_switched				; =1: This setpoint has been auto-selected already
 
-    rcall   get_first_dil_to_WREG           ; get first gas (1-5) into WREG
-    rcall   setup_dil_registers				; set-up of gas parameters for currently breathed gas (with WREG = current gas 1-5)
-	rcall	deco_setup_cc_diluents			; set-up of gas list for deco calculations (with WREG = current gas 1-5)
+	rcall	get_first_dil_to_WREG		; get first gas (1-5) into WREG
+	rcall	setup_dil_registers			; set-up of gas parameters for currently breathed gas (with WREG = current gas 1-5)
+	rcall	deco_setup_cc_diluents		; set-up of gas list for deco calculations (with WREG = current gas 1-5)
 
 	; Start with SP1 (CCR) or 0 (pSCR) as default.
 	; If in sensor mode, this value will be overwritten by calc_deko_divemode_sensor
-	clrf	WREG							; preload WREG with setpoint value 0 for pSCR calculated
-	btfss	FLAG_ccr_mode					; are we in CCR mode?
-	bra		dive_boot_cc_2					; NO  - keep preloaded value
-	movff	char_I_setpoint_cbar+0,WREG		; YES - get value of setpoint 1
+	clrf	WREG						; preload WREG with setpoint value 0 for pSCR calculated
+	btfss	FLAG_ccr_mode				; are we in CCR mode?
+	bra		dive_boot_cc_2				; NO  - keep preloaded value
+	movff	char_I_setpoint_cbar+0,WREG	; YES - get value of setpoint 1
 dive_boot_cc_2:
-	movff	WREG,char_I_const_ppO2			; write setpoint to deco engine
-	call	transmit_setpoint				; transmit current setpoint from WREG (in cbar) to external electronics
-	goto	calc_deko_divemode_sensor		; read & process sensor data (and return)
+	movff	WREG,char_I_const_ppO2		; write setpoint to deco engine
+	call	transmit_setpoint			; transmit current setpoint from WREG (in cbar) to external electronics
+	goto	calc_deko_divemode_sensor	; read & process sensor data (and return)
 
 diveloop_boot:
 	call	restart_set_modes_and_flags
 
-    call    I2C_sleep_accelerometer          ; Stop accelerometer
-    call    I2C_sleep_compass                ; Stop compass
+	call	I2C_sleep_accelerometer		; stop accelerometer
+	call	I2C_sleep_compass			; stop compass
 
 	clrf	WREG
-	movff	WREG,max_pressure+0				; clear some variables
+	movff	WREG,max_pressure+0			; clear some variables
 	movff	WREG,max_pressure+1
-	
+
 	; init in invalid data state
-	clrf	WREG							; set WREG to 0
-	bsf		WREG,int_invalid_flag			; set invalid flag
-	bsf		WREG,int_is_zero				; set zero flag
-	movff	WREG,int_O_tank_pres_need+1		; Set flags for tank pressure needs = 0 before p2_deco.c
-	movff	WREG,int_O_tank_pres_need+3		; can do it. If this is not done here and the gas needs
-	movff	WREG,int_O_tank_pres_need+5		; custom view is shown before p2_deco.c completes the first
-	movff	WREG,int_O_tank_pres_need+7		; deco calculation, some rubbish numbers from last dive of
-	movff	WREG,int_O_tank_pres_need+9		; simulation may be shown
-	
+	clrf	WREG						; set WREG to 0
+	bsf		WREG,int_invalid_flag		; set invalid flag
+	bsf		WREG,int_is_zero			; set zero flag
+	movff	WREG,int_O_tank_pres_need+1	; Set flags for tank pressure needs = 0 before p2_deco.c
+	movff	WREG,int_O_tank_pres_need+3	; can do it. If this is not done here and the gas needs
+	movff	WREG,int_O_tank_pres_need+5	; custom view is shown before p2_deco.c completes the first
+	movff	WREG,int_O_tank_pres_need+7	; deco calculation, some rubbish numbers from last dive of
+	movff	WREG,int_O_tank_pres_need+9	; simulation may be shown
+
 	; configure the deco engine:
-	movff	char_O_deco_status,WREG			; bank-safe copy
-	bsf		WREG,DECO_STATUS_0_FLAG			; configure init ...
-	bsf		WREG,DECO_STATUS_1_FLAG			; ... state,
-	bcf		WREG,DECO_PLAN_FLAG				; normal plan mode,
-	bsf		WREG,DECO_CNS_FLAG				; enable CNS calculation (CNS at end of dive),
-	bcf		WREG,DECO_VOLUME_FLAG			; disable gas volume calculation, and
-	bcf		WREG,DECO_ASCENT_FLAG			; disable delayed ascent calculation
-	movff	WREG,char_O_deco_status			; bank-safe copy back
-	
+	movff	char_O_deco_status,WREG		; bank-safe copy
+	bsf		WREG,DECO_STATUS_0_FLAG		; configure init ...
+	bsf		WREG,DECO_STATUS_1_FLAG		; ... state,
+	bcf		WREG,DECO_PLAN_FLAG			; normal plan mode,
+	bsf		WREG,DECO_CNS_FLAG			; enable CNS calculation (CNS at end of dive),
+	bcf		WREG,DECO_VOLUME_FLAG		; disable gas volume calculation, and
+	bcf		WREG,DECO_ASCENT_FLAG		; disable delayed ascent calculation
+	movff	WREG,char_O_deco_status		; bank-safe copy back
+
 	clrf	WREG
-	movff	WREG,char_O_main_status			; reset char_O_main_status
+	movff	WREG,char_O_main_status		; reset char_O_main_status
 
 	movlw	deco_distance
 	movff	WREG,char_I_deco_distance
 	movff	opt_last_stop,char_I_depth_last_deco
 	movff	opt_GF_low,char_I_GF_Low_percentage
 	movff	opt_GF_high,char_I_GF_High_percentage
-	
-    bcf     use_agf                         ; Start with normal GF set
-    bcf     divemode_menu                   ; clear divemode menu flag
-    
-    bcf	    alternative_divelayout			; Start with default layout
-	
-	bcf		blinking_depth_prev				; clear flag for blinking depth	## NEW BUGFIX
-	bcf		blinking_depth_warning			; clear flag for blinking depth	## NEW BUGFIX
-	bcf		blinking_depth_toggle			; clear flag for blinking depth	## NEW BUGFIX
-	
+
+	bcf		use_agf						; Start with normal GF set
+	bcf		divemode_menu				; clear divemode menu flag
+
+	bcf		alternative_divelayout		; Start with default layout
+
+	bcf		blinking_depth_prev			; clear flag for blinking depth
+	bcf		blinking_depth_warning		; clear flag for blinking depth
+	bcf		blinking_depth_toggle		; clear flag for blinking depth
+
 	movlw	d'1'
 	movwf	apnoe_max_pressure+0
 	clrf	apnoe_max_pressure+1
 ;	clrf	apnoe_surface_mins
-;	clrf	apnoe_surface_secs		
+;	clrf	apnoe_surface_secs
 	clrf	apnoe_mins
 	clrf	divemins+0
 	clrf	divemins+1
-    
+
 	; Copy date and time for logbook
-    movff   year,start_year
-    movff   month,start_month
-    movff   day,start_day
-    movff   hours,start_hours
-    movff   mins,start_mins
-    
-    movff   int_O_CNS_fraction+0,CNS_start+0	; save CNS value at beginning of dive
-    movff   int_O_CNS_fraction+1,WREG			; get high byte to WREG
-	bcf		WREG,int_warning_flag				; clear warning flag bit
-	movff	WREG,CNS_start+1					; move high byte on
-    movff   int_O_gradient_factor+0,GF_start	; save GF value at beginning of dive (only lower byte used for value)
+	movff	year,start_year
+	movff	month,start_month
+	movff	day,start_day
+	movff	hours,start_hours
+	movff	mins,start_mins
+
+	movff	int_O_CNS_fraction+0,CNS_start+0 ; save CNS value at beginning of dive
+	movff	int_O_CNS_fraction+1,WREG		 ; get high byte to WREG
+	bcf		WREG,int_warning_flag			 ; clear warning flag bit
+	movff	WREG,CNS_start+1				 ; move high byte on
+	movff	int_O_gradient_factor+0,GF_start ; save GF value at beginning of dive (only lower byte used for value)
 
-    bcf     no_more_divesecs            		; =1: do no longer show seconds in divemode
+	bcf		no_more_divesecs				 ; =1: do no longer show seconds in divemode
 	bcf		divemode_menu_active
-    clrf    menupos
-    clrf    menupos2                    		; Reset to zero (Zero=no premenu or simulator task)
-	bsf		sensors_agree						; init of sensors disagree warning system
-	
-    btfsc   FLAG_ccr_mode
-    bra	    diveloop_boot_cc
-    btfsc   FLAG_pscr_mode
-    bra	    diveloop_boot_cc
-    rcall   dive_boot_oc
-    bra	    diveloop_boot_cont
+	clrf	menupos1
+	clrf	menupos2						 ; Reset to zero (Zero=no premenu or simulator task)
+	bsf		sensors_agree					 ; init of sensors disagree warning system
+
+	btfsc	FLAG_ccr_mode
+	bra		diveloop_boot_cc
+	btfsc	FLAG_pscr_mode
+	bra		diveloop_boot_cc
+	rcall	dive_boot_oc
+	bra		diveloop_boot_cont
 
 diveloop_boot_cc:
-    rcall	dive_boot_cc
-	
+	rcall	dive_boot_cc
+
 diveloop_boot_cont:
-    ; Copy opt_dil_types into backup (For "lost gas" feature)
-    movff   opt_dil_type+0,opt_dil_type_backup+0    				; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+1,opt_dil_type_backup+1    				; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+2,opt_dil_type_backup+2    				; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+3,opt_dil_type_backup+3    				; 0=Disabled, 1=First, 2=Normal
-    movff   opt_dil_type+4,opt_dil_type_backup+4    				; 0=Disabled, 1=First, 2=Normal
-    ; Copy opt_gas_types into backup (For "lost gas" feature)
-    movff   opt_gas_type+0,opt_gas_type_backup+0    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+1,opt_gas_type_backup+1    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+2,opt_gas_type_backup+2    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+3,opt_gas_type_backup+3    				; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    movff   opt_gas_type+4,opt_gas_type_backup+4   					; 0=Disabled, 1=First, 2=Travel, 3=Deco
-    ; Also copy change depths into backup (For "lost gas" feature)
-    movff   char_I_dil_change+0,opt_dil_change_backup+0				; Gas change depths Diluents
-    movff   char_I_dil_change+1,opt_dil_change_backup+1				; Gas change depths Diluents
-    movff   char_I_dil_change+2,opt_dil_change_backup+2				; Gas change depths Diluents
-    movff   char_I_dil_change+3,opt_dil_change_backup+3				; Gas change depths Diluents
-    movff   char_I_dil_change+4,opt_dil_change_backup+4				; Gas change depths Diluents
-    ; Also copy change depths into backup (For "lost gas" feature)
-    movff   opt_OC_bail_gas_change+0,opt_OC_bail_gas_change_backup+0; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+1,opt_OC_bail_gas_change_backup+1; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+2,opt_OC_bail_gas_change_backup+2; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+3,opt_OC_bail_gas_change_backup+3; Gas change depths OC/Bailout
-    movff   opt_OC_bail_gas_change+4,opt_OC_bail_gas_change_backup+4; Gas change depths OC/Bailout
+	; Copy opt_dil_types into backup (For "lost gas" feature)
+	movff	opt_dil_type+0,opt_dil_type_backup+0					; 0=Disabled, 1=First, 2=Normal
+	movff	opt_dil_type+1,opt_dil_type_backup+1					; 0=Disabled, 1=First, 2=Normal
+	movff	opt_dil_type+2,opt_dil_type_backup+2					; 0=Disabled, 1=First, 2=Normal
+	movff	opt_dil_type+3,opt_dil_type_backup+3					; 0=Disabled, 1=First, 2=Normal
+	movff	opt_dil_type+4,opt_dil_type_backup+4					; 0=Disabled, 1=First, 2=Normal
+	; Copy opt_gas_types into backup (For "lost gas" feature)
+	movff	opt_gas_type+0,opt_gas_type_backup+0					; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	opt_gas_type+1,opt_gas_type_backup+1					; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	opt_gas_type+2,opt_gas_type_backup+2					; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	opt_gas_type+3,opt_gas_type_backup+3					; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	movff	opt_gas_type+4,opt_gas_type_backup+4						; 0=Disabled, 1=First, 2=Travel, 3=Deco
+	; Also copy change depths into backup (For "lost gas" feature)
+	movff	char_I_dil_change+0,opt_dil_change_backup+0				; Gas change depths Diluents
+	movff	char_I_dil_change+1,opt_dil_change_backup+1				; Gas change depths Diluents
+	movff	char_I_dil_change+2,opt_dil_change_backup+2				; Gas change depths Diluents
+	movff	char_I_dil_change+3,opt_dil_change_backup+3				; Gas change depths Diluents
+	movff	char_I_dil_change+4,opt_dil_change_backup+4				; Gas change depths Diluents
+	; Also copy change depths into backup (For "lost gas" feature)
+	movff	opt_OC_bail_gas_change+0,opt_OC_bail_gas_change_backup+0; Gas change depths OC/Bailout
+	movff	opt_OC_bail_gas_change+1,opt_OC_bail_gas_change_backup+1; Gas change depths OC/Bailout
+	movff	opt_OC_bail_gas_change+2,opt_OC_bail_gas_change_backup+2; Gas change depths OC/Bailout
+	movff	opt_OC_bail_gas_change+3,opt_OC_bail_gas_change_backup+3; Gas change depths OC/Bailout
+	movff	opt_OC_bail_gas_change+4,opt_OC_bail_gas_change_backup+4; Gas change depths OC/Bailout
 
-	clrf	better_gas_number           ; Clear better gas register
+	clrf	WREG
+	movff	WREG,better_gas_number		; clear better gas register
 
 	bcf		show_safety_stop			; =1: Show the safety stop
 	clrf	safety_stop_countdown		; Clear count-down
 
- 	clrf	samplesecs
+	clrf	samplesecs
 	clrf	apnoe_timeout_counter		; timeout in minutes
-	clrf 	timeout_counter				; takes care of the timeout (Low byte)
-	clrf 	timeout_counter2			; takes care of the timeout (High byte)
+	clrf	timeout_counter1+0			; takes care of the timeout (low  byte)
+	clrf	timeout_counter1+1			; takes care of the timeout (high byte)
 	clrf	AlarmType					; Clear all alarms
 	bcf		event_occured				; clear flag
 	clrf	average_depth_hold_total+0
 	clrf	average_depth_hold_total+1
 	clrf	average_depth_hold_total+2
 	clrf	average_depth_hold_total+3	; Clear Non-Resettable Average
-    rcall	reset_average1				; Reset the resettable average depth
-    bcf		decostop_active
-	bcf		better_gas_available        ; =1: A better gas is available and a gas change is advised in divemode
+	rcall	reset_average1				; Reset the resettable average depth
+	bcf		decostop_active
+	bcf		better_gas_available		; =1: A better gas is available and a gas change is advised in divemode
 	call	ghostwriter_short_header	; Write short header with divenumber into profile memory
 
-    btfsc   simulatormode_active
-    bra     diveloop_boot_1
-    ; Normal mode = Surface pressure is the pressure 30mn before dive.
+	btfsc	simulatormode_active
+	bra		diveloop_boot_1
+	; Normal mode = Surface pressure is the pressure 30mn before dive.
 	SAFE_2BYTE_COPY last_surfpressure_30min, int_I_pres_surface	;copy surfacepressure to deco routine
 	SAFE_2BYTE_COPY last_surfpressure_30min, last_surfpressure	;copy surfacepressure to last_surfpressure for correct depth
-    bra     diveloop_boot_2
+	bra		diveloop_boot_2
 
 diveloop_boot_1:
-    ; Simulator mode: Surface pressure is 1bar.
-    movlw   LOW .1000
-	movff	WREG,int_I_pres_surface+0   	; LOW copy surfacepressure to deco routine
-    movlw   HIGH .1000
-	movff	WREG,int_I_pres_surface+1   	; HIGH copy surfacepressure to deco routine
+	; Simulator mode: Surface pressure is 1bar.
+	movlw	LOW .1000
+	movff	WREG,int_I_pres_surface+0	; LOW copy surface pressure to deco routine
+	movlw	HIGH .1000
+	movff	WREG,int_I_pres_surface+1	; HIGH copy surface pressure to deco routine
 
 diveloop_boot_2:
-	SAFE_2BYTE_COPY	temperature,minimum_temperature ; Reset Min-Temp registers
+	SAFE_2BYTE_COPY temperature,minimum_temperature ; Reset Min-Temp registers
 
-; Init profile recording parameters	
-	movff	samplingrate,samplesecs_value	; to avoid EEPROM access in the ISR
-	movlw	div_temperature
-	movwf	divisor_temperature         	; load divisors for profile storage
-	movlw	div_deco
-	movwf	divisor_deco				
-	movlw	div_gf
-	movwf	divisor_gf
-	movlw	div_ppo2_sensors
-	movwf	divisor_ppo2_sensors
-	movlw	div_decoplan
-	movwf	divisor_decoplan
-	movlw	div_cns
-	movwf	divisor_cns
-	movlw	div_tank
-	movwf	divisor_tank
+	call	init_recording_params		; set up all the divisors
 
-	btfss	FLAG_apnoe_mode					; In Apnoe mode?
-	bra		divemode_boot1
-
-	; Overwrite some parameters in Apnoe mode....
-	movlw	samplingrate_apnoe
-	movwf	samplesecs_value				; to avoid EEPROM access in the ISR
-
-divemode_boot1:
-    bsf     ccr_diluent_setup				; For CCR mode (Required to have better gas working)
-    btfsc   FLAG_ccr_mode               	; =1: CCR mode (Fixed ppO2 or Sensor) active
-    bra     divemode_boot2
-    btfsc   FLAG_pscr_mode
-    bra     divemode_boot2
-    
-    ; in OC Mode, disable ppO2 logging
-    movlw   .0
-    movwf   divisor_ppo2_sensors
-    
-    bcf     ccr_diluent_setup				; For OC mode (Required to have better gas working)
+	bsf		ccr_diluent_setup			; For CCR mode (Required to have better gas working)
+	btfsc	FLAG_ccr_mode				; =1: CCR mode (Fixed ppO2 or Sensor) active
+	bra		divemode_boot2
+	btfsc	FLAG_pscr_mode
+	bra		divemode_boot2
+	bcf		ccr_diluent_setup			; For OC mode (Required to have better gas working)
 
 divemode_boot2:
-	bcf		LEDg
-	bcf		LEDr
+	bcf		LEDg						; switch off green LED / release reset to RX circuitry
+	bcf		LEDr						; switch off red LED
 	bcf		realdive
-	btfss	simulatormode_active			; do not disable in simulator mode!					
-	call	disable_rs232					; Disable RS232
-    btfsc   enable_screen_dumps         	; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-    call	enable_rs232					; Also sets to speed_normal ...
-    ; Reset divetime seconds
-    movlw   .2                          	; Start at 2seconds
-    movwf   total_divetime_seconds+0
-    clrf    total_divetime_seconds+1
-    movwf   divesecs
-    movwf   apnoe_secs
-    bsf	    divemode2                   	; displayed divetime is running (Divetime starts HERE)
-    return									; Done with divemode boot
+	btfss	simulatormode_active		; do not disable in simulator mode!					
+	call	disable_rs232				; Disable RS232
+	btfsc	enable_screen_dumps			; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	call	enable_rs232				; Also sets to speed_normal ...
+	; Reset divetime seconds
+	movlw	.2							; Start at 2seconds
+	movwf	total_divetime_seconds+0
+	clrf	total_divetime_seconds+1
+	movwf	divesecs
+	movwf	apnoe_secs
+	bsf		divemode2					; displayed divetime is running (Divetime starts HERE)
+	return								; Done with divemode boot
+
 
 divemode_check_for_warnings:
-    movlw   .1				    			; One warning at a time in alt. layout mode
-    btfss   alternative_divelayout  
-    movlw   .2				    			; Two warnings at a time in default layout mode
-    cpfsgt  warning_counter		    		; only one (or two) warnings active?
-    bra     divemode_check_for_warnings1    ; Yes, update every second
+	movlw	.1							; One warning at a time in alt. layout mode
+	btfss	alternative_divelayout
+	movlw	.2							; Two warnings at a time in default layout mode
+	cpfsgt	warning_counter				; only one (or two) warnings active?
+	bra		divemode_check_for_warnings1 ; Yes, update every second
 
-    btfss   secs,0                      	; Every two seconds...
-    return
-    btfss   secs,1                      	; Every four seconds...
-    return
+	btfss	secs,0						; Every two seconds...
+	return
+	btfss	secs,1						; Every four seconds...
+	return
 
 divemode_check_for_warnings1:
-	bcf		warning_active						; Clear flag
-	clrf	warning_counter						; Clear counter
+	bcf		warning_active				; Clear flag
+	clrf	warning_counter				; Clear counter
 
 	; warnings sorted by severity, highest severity first
-	
-    ; Warnings for all modes
-    call	check_warn_battery                  ; Check if the battery level should be displayed/warned
-    call    check_divetimeout                   ; Not actually a warning. Check and show the divemode timeout
+
+	; Warnings for all modes
+	call	check_warn_battery			; Check if the battery level should be displayed/warned
+	call	check_divetimeout			; Not actually a warning. Check and show the divemode timeout
+
+	btfsc	FLAG_apnoe_mode				; Done for Apnoe or Gauge mode
+	bra		divemode_check_for_warnings2
+	btfsc	FLAG_gauge_mode				; Done for Apnoe or Gauge mode
+	bra		divemode_check_for_warnings2
 
-	btfsc	FLAG_apnoe_mode             		; Done for Apnoe or Gauge mode
-    bra     divemode_check_for_warnings2
-	btfsc	FLAG_gauge_mode             		; Done for Apnoe or Gauge mode
-	bra     divemode_check_for_warnings2
+	; Warnings only in deco modes
+	rcall	check_ppO2					; check ppO2 and displays warning, if required
 
-    ; Warnings only in deco modes
-    rcall	check_ppO2							; check ppO2 and displays warning, if required
-	
-	btfss	sensors_agree						; are the sensor values within the threshold range?
-	rcall	check_warn_sensors_disagree			; NO  - further evaluate
-	btfsc	sensors_agree						; are the sensor values within the threshold range?
-	bcf		sensor_warning						; YES - revoke memorized sensor warning
+	btfss	sensors_agree				; are the sensor values within the threshold range?
+	rcall	check_warn_sensors_disagree	; NO  - further evaluate
+	btfsc	sensors_agree				; are the sensor values within the threshold range?
+	bcf		sensor_warning				; YES - revoke memorized sensor warning
+
+	movff	char_O_deco_warnings,WREG	; bank-safe copy for deco warnings
+	btfsc	WREG,outside_warning_lock	; are we outside of the ZH-L16 model?
+	rcall	warn_outside				; YES
 
-	movff	char_O_deco_warnings,WREG			; bank-safe copy for deco warnings
-	btfsc	WREG,outside_warning_lock			; are we outside of the ZH-L16 model?
-	rcall	warn_outside						; YES
-	
-	rcall	check_IBCD							; check for IBCD attention or warning
-	
-	btfsc	decostop_active						; In deco mode?
-	rcall	check_and_store_gf_violation		; Yes, sets warnings, if required
+	rcall	check_IBCD					; check for IBCD attention or warning
+
+	btfsc	decostop_active				; In deco mode?
+	rcall	check_and_store_gf_violation; Yes, sets warnings, if required
+
+	movff	char_O_deco_warnings,WREG	; bank-safe copy for deco warnings
+	btfsc	WREG,mbubble_warning_lock	; do we have a microbubbles warning?
+	rcall	warn_mbubbles				; YES
+
+	rcall	check_cns_violation			; Check CNS value and display it, if required
 
-	movff	char_O_deco_warnings,WREG			; bank-safe copy for deco warnings
-	btfsc	WREG,mbubble_warning_lock			; do we have a microbubbles warning?
-	rcall	warn_mbubbles						; YES
-	
-	rcall	check_cns_violation					; Check CNS value and display it, if required	
-	
-	;btfsc	decostop_active						; In deco mode?
-	rcall	check_gas_needs						; show gas needs warning if any gas need is > threshold
+	;btfsc	decostop_active				; In deco mode?
+	rcall	check_gas_needs				; show gas needs warning if any gas need is > threshold
+
+	rcall	check_eod_cns_violation		; Check CNS values for end-of-dive and display warning, if required
+
+	call	TFT_display_ftts			; Show @+x time
 
-	rcall	check_eod_cns_violation				; Check CNS values for end-of-dive and display warning, if required
-	
-    call    TFT_display_ftts					; Show @+x time
-	
-    btfsc   use_agf                             ; In aGF mode?
-    rcall   warn_agf                            ; Yes, show a warning for it
+	btfsc	use_agf						; In aGF mode?
+	rcall	warn_agf					; Yes, show a warning for it
 
-    btfsc   setpoint_fallback                   ; =1: Fallback to SP1 due to external O2 sensor failure
-    rcall   warn_fallback                       ; Show the warning
-	
+	btfsc	setpoint_fallback			; =1: Fallback to SP1 due to external O2 sensor failure
+	rcall	warn_fallback				; Show the warning
+
 divemode_check_for_warnings2:
 ; Display the warning icon?
-	btfsc	warning_active						; Any warning active?
-	bsf	FLAG_TFT_divemode_warning				; Yes
-	btfss	warning_active						; Any warning active?
-	bsf	FLAG_TFT_divemode_warning_clear			; No, clear warning icon
+	btfsc	warning_active				; Any warning active?
+	bsf		FLAG_TFT_divemode_warning	; Yes
+	btfss	warning_active				; Any warning active?
+	bsf		FLAG_TFT_divemode_warning_clear ; No, clear warning icon
 
 ; Setup warning_page number
-    incf    warning_page,F
-    movf    warning_page,W
-    bcf     STATUS,C
-    btfss   alternative_divelayout
-    rlcf    warning_page,W                      ; *2 (But only in standard layout mode)
-    cpfsgt  warning_counter                     ; > warning_counter
-    clrf    warning_page                        ; No, clear
-	
+	incf	warning_page,F
+	movf	warning_page,W
+	bcf		STATUS,C
+	btfss	alternative_divelayout
+	rlcf	warning_page,W				; *2 (But only in standard layout mode)
+	cpfsgt	warning_counter				; > warning_counter
+	clrf	warning_page				; No, clear
+
 ; Clear both rows of warnings if there is nothing to show at all
-	tstfsz	warning_counter						; any warnings?
-	bra	divemode_check_for_warnings3			; YES - look if second row needs to be cleared
-	bsf	FLAG_TFT_dive_warning_text_clear		; Set flag
+	tstfsz	warning_counter				; any warnings?
+	bra		divemode_check_for_warnings3 ; YES - look if second row needs to be cleared
+	bsf		FLAG_TFT_dive_warning_text_clear ; Set flag
 	return
 divemode_check_for_warnings3:
-	
-	
+
+
 ; Clear 2nd row of warnings if there is nothing to show (on this page)
-    btfss   second_row_warning                  ; =1: The second row contains a warning
-    bsf	    FLAG_TFT_dive_warning_text_clr2	; Set flag for 2nd row
-    return                                      ; Done.
+	btfss	second_row_warning			; =1: The second row contains a warning
+	bsf		FLAG_TFT_dive_warning_text_clr2	; Set flag for 2nd row
+	return								; Done.
 
-    global  check_warn_battery
+	global	check_warn_battery
 check_warn_battery:
-    movff   batt_percent,lo
-    movlw	battery_show_level+1
-    cpfslt	lo
-    return                              		; No Display, no warning
-    ; Display Battery, but warn?
-    movff	batt_percent,lo
-    movlw	color_code_battery_low+1
-    cpfsgt	lo                          		;
-    bsf		warning_active						; Set Warning flag
-    
-    movlw   .4
-    cpfseq  menupos3            				; battery shown in Custom View 4?
-    bra     check_warn_battery2					; No
-    return                     					; Yes, do not show twice (in custom view and in warning area)
+	movff	batt_percent,lo
+	movlw	battery_show_level+1
+	cpfslt	lo
+	return								; No Display, no warning
+	; Display Battery, but warn?
+	movff	batt_percent,lo
+	movlw	color_code_battery_low+1
+	cpfsgt	lo
+	bsf		warning_active				; Set Warning flag
+
+	movlw	.4
+	cpfseq	menupos3					; battery shown in Custom View 4?
+	bra		check_warn_battery2			; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 check_warn_battery2:
-    incf	warning_counter,F					; increase counter
-    goto	TFT_update_batt_percent_divemode	; Show percent (And return)
+	incf	warning_counter,F			; increase counter
+	goto	TFT_update_batt_percent_divemode ; Show percent (And return)
 
 check_divetimeout:
-    btfsc		divemode2				
-    return										; displayed divetime is not running
-	incf	warning_counter,F					; increase counter
-    goto    TFT_divetimeout						; Show timeout counter  (and return)
+	btfsc	divemode2
+	return								; displayed divetime is not running
+	incf	warning_counter,F			; increase counter
+	goto	TFT_divetimeout				; Show timeout counter (and return)
 
 
 check_ppO2:
-	btfsc   FLAG_ccr_mode 				; are we in CCR mode?
+	btfsc	FLAG_ccr_mode				; are we in CCR mode?
 	bra		check_ppO2_loop				; YES
 	btfsc	FLAG_pscr_mode				; are we in pSCR mode?
 	bra		check_ppO2_loop				; YES
@@ -2384,12 +2387,14 @@
 	btfsc	is_bailout					; in bailout?
 	bra		check_ppO2_oc_1				; YES - continue with OC
 	movff	int_O_pure_ppO2+1,hi		; NO  - get upper part of int_O_pure_ppO2
-	btfsc	hi,int_warning_flag			; 		ppO2 of the pure diluent to low or high? 
-	rcall	check_ppO2_d				; 		YES - show warning and return on next line
-	bra		check_ppO2_oc_2				;		      skip pre-warning threshold test on breathed ppO2
+	btfsc	hi,int_warning_flag			;       ppO2 of the pure diluent to low or high?
+	rcall	check_ppo2_display				;       YES - show warning and return on next line
+	btfsc	hi,int_attention_flag		;       ppO2 of the pure diluent close to setpoint?
+	rcall	check_ppo2_display				;       YES - show warning and return on next line
+	bra		check_ppO2_oc_2				;             skip attention threshold test on breathed ppO2
 check_ppO2_oc_1:
 	movff	int_O_breathed_ppO2+1,WREG	; get upper part of int_O_breathed_ppO2
-	btfsc	WREG,int_prewarning_flag	; breathed ppO2 just above pre-warning threshold?
+	btfsc	WREG,int_attention_flag		; breathed ppO2 just above attention threshold?
 	bra		check_ppo2_display			; YES - show ppO2
 check_ppO2_oc_2:
 	movff	int_O_breathed_ppO2+1,WREG	; get upper part of int_O_breathed_ppO2 (perhaps again)
@@ -2397,193 +2402,192 @@
 	bra		check_ppO2_low				; YES - record the warning and show ppO2
 	btfsc	WREG,int_high_flag			; breathed ppO2 to high?
 	bra		check_ppO2_high				; YES - record the warning and show ppO2
-	TSTOSS  opt_showppo2				; show ppO2 anyhow? (0 = no, 1 = show always)
+	TSTOSS	opt_showppo2				; show ppO2 anyhow? (0 = no, 1 = show always)
 	return								; NO  - no warnings, no show
 	bra		check_ppo2_display			; YES - just show ppO2
 check_ppO2_low:
-    movlw	d'4'						; set type of alarm (ppO2 low)
-	bra		check_ppO2_common  			; continue with common part
+	movlw	d'4'						; set type of alarm (ppO2 low)
+	bra		check_ppO2_common			; continue with common part
 check_ppO2_high:
 	movlw	d'5'						; set type of alarm (ppO2 high)
 check_ppO2_common:
 	movwf	AlarmType					; copy alarm type to alarm register
-	bsf		event_occured				; set event   flag
+	bsf		event_occured				; set event flag
 	bsf		warning_active				; set warning flag
 	btfsc	is_bailout					; are we in bailout?
 	bra		check_ppo2_display			; YES - skip CCR/pSCR checks
-	btfsc   FLAG_ccr_mode 				; are we in CCR mode?
+	btfsc	FLAG_ccr_mode				; are we in CCR mode?
 	return								; YES - no extra warning required
 	btfsc	FLAG_pscr_mode				; are we in pSCR mode?
 	return								; YES - no extra warning required
 check_ppo2_display:						; display warning if ppO2 is not already shown in custom view
-    movlw   .9
-    cpfseq  menupos3            		; ppO2 shown in Custom View 9?
-    bra     check_ppO2_a        		; No
-    return                      		; Yes, do not show twice (in custom view and in warning area)
+	movlw	.9
+	cpfseq	menupos3					; ppO2 shown in Custom View 9?
+	bra		check_ppO2_a				; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 check_ppO2_a:
-    movlw   .11
-    cpfseq  menupos3            		; ppO2 shown in Custom View 11?
-    bra     check_ppO2_b        		; No
-    return                      		; Yes, do not show twice (in custom view and in warning area)
+	movlw	.11
+	cpfseq	menupos3					; ppO2 shown in Custom View 11?
+	bra		check_ppO2_b				; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 check_ppO2_b:
-    movlw   .12
-    cpfseq  menupos3            		; ppO2 shown in Custom View 12?
-    bra     check_ppO2_c        		; No
-    return                      		; Yes, do not show twice (in custom view and in warning area)
+	movlw	.12
+	cpfseq	menupos3					; ppO2 shown in Custom View 12?
+	bra		check_ppO2_c				; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 check_ppO2_c:
-    movlw   .10
-    cpfseq  menupos3            		; ppO2 shown in Custom View 10?
-    bra     check_ppO2_d				; No
-    return                      		; Yes, do not show twice (in custom view and in warning area)
-check_ppO2_d:    
-    incf	warning_counter,F			; increase counter
-    goto    TFT_display_ppo2			; show breathed gas or diluent ppO2 warning (and return)
-	
+	movlw	.10
+	cpfseq	menupos3					; ppO2 shown in Custom View 10?
+	bra		check_ppO2_d				; No
+	return								; Yes, do not show twice (in custom view and in warning area)
+check_ppO2_d:
+	incf	warning_counter,F			; increase counter
+	goto	TFT_display_ppo2			; show breathed gas or diluent ppO2 warning (and return)
+
 
-    global  check_cns_violation
+	global	check_cns_violation
 check_cns_violation:
-    ; Check if CNS should be displayed
-    movff   int_O_CNS_fraction+1,WREG	; get high byte
-    btfsc	WREG,int_warning_flag		; warning flag set?
-    bra     check_cns_violation2		; Yes - issue warning
-	btfsc	WREG,int_prewarning_flag	; pre-warning flag set?
+	; Check if CNS should be displayed
+	movff	int_O_CNS_fraction+1,WREG	; get high byte
+	btfsc	WREG,int_warning_flag		; warning flag set?
+	bra		check_cns_violation2		; Yes - issue warning
+	btfsc	WREG,int_attention_flag		; attention flag set?
 	bra		display_cns_violation		; YES - just display CNS
-	return                              ; No  - no display, no warning
+	return								; No  - no display, no warning
 check_cns_violation2:
 	bsf		warning_active				; Set Warning flag
 display_cns_violation:					; Show CNS if not shown in the custom view
-	movlw   .11
-	cpfseq  menupos3					; CNS shown in Custom View?
-	bra     display_cns_violation2      ; No
-    return								; Yes, do not show twice (in custom view and in warning area)
+	movlw	.11
+	cpfseq	menupos3					; CNS shown in Custom View?
+	bra		display_cns_violation2		; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 display_cns_violation2:
-	movlw   .8
-	cpfseq  menupos3					; CNS shown through Custom View 8 right now?
-	bra     display_cns_violation3      ; No
-    return								; Yes, do not show twice (in custom view and in warning area)
+	movlw	.8
+	cpfseq	menupos3					; CNS shown through Custom View 8 right now?
+	bra		display_cns_violation3		; No
+	return								; Yes, do not show twice (in custom view and in warning area)
 display_cns_violation3:
-	incf	warning_counter,F	    	; increase counter
-    goto	TFT_display_cns				; Show CNS  (and return)
+	incf	warning_counter,F			; increase counter
+	goto	TFT_display_cns				; Show CNS (and return)
+
 
-	
-    global  check_eod_cns_violation		; check end-of-dive CNS values
+	global	check_eod_cns_violation		; check end-of-dive CNS values
 check_eod_cns_violation:
-	movff   int_O_CNS_fraction+1,WREG	; get high-byte of current CNS value
-    btfsc	WREG,int_warning_flag       ; current CNS value in warning state?
-    return								; YES - inhibit eod warning if current CNS is already in warning
-    movff   int_O_normal_CNS_fraction+1,WREG
+	movff	int_O_CNS_fraction+1,WREG	; get high-byte of current CNS value
+	btfsc	WREG,int_warning_flag		; current CNS value in warning state?
+	return								; YES - inhibit eod warning if current CNS is already in warning
+	movff	int_O_normal_CNS_fraction+1,WREG
 	btfsc	WREG,int_invalid_flag		; flag for invalid value set?
 	bra		check_eod_cns_violation1	; YES - continue with checking the other CNS value
-    btfsc	WREG,int_warning_flag		; NO  - flag for warning set?
-    bra     check_eod_cns_violation2	; 		YES - issue warning
-check_eod_cns_violation1:				; 		NO  - continue with checking the other CNS value
-    movff   int_O_alternate_CNS_fraction+1,WREG
+	btfsc	WREG,int_warning_flag		; NO  - flag for warning set?
+	bra		check_eod_cns_violation2	;       YES - issue warning
+check_eod_cns_violation1:				;       NO  - continue with checking the other CNS value
+	movff	int_O_alternate_CNS_fraction+1,WREG
 	btfsc	WREG,int_invalid_flag		; flag for invalid value set?
 	return								; YES - done with CNS checking
 	btfsc	WREG,int_warning_flag		; NO  - flag for warning set?
-    bra     check_eod_cns_violation2	; 		Yes - issue warning
-	return								; 		NO  - done with CNS checking
+	bra		check_eod_cns_violation2	;       Yes - issue warning
+	return								;       NO  - done with CNS checking
 check_eod_cns_violation2:				; YES - issue warning
 	bsf		warning_active				; set Warning flag
-	movlw   .8							; issue textual warning if CNS values are not shown in the custom view right now
-	cpfseq  menupos3					; CNS values shown through Custom View 8 right now?
-	bra     display_eod_cns_violation	; NO  - issue textual warning
+	movlw	.8							; issue textual warning if CNS values are not shown in the custom view right now
+	cpfseq	menupos3					; CNS values shown through Custom View 8 right now?
+	bra		display_eod_cns_violation	; NO  - issue textual warning
 	return								; YES - do not show twice (in custom view and in warning area)
 display_eod_cns_violation:
-	incf	warning_counter,F	    	; increase counter
-    goto	TFT_display_eod_cns			; issue CNS at end-of-dive warning (and return)
+	incf	warning_counter,F			; increase counter
+	goto	TFT_display_eod_cns			; issue CNS at end-of-dive warning (and return)
 
 
-    global  check_and_store_gf_violation
+	global	check_and_store_gf_violation
 check_and_store_gf_violation:
 	movff	int_O_gradient_factor+1,WREG	; get upper byte of gradient factor
 	btfss	WREG,int_warning_flag			; check if the warning flag is set
-	bra     check_and_store_gf_violation2   ; NO  - continue with checking for pre-warning
-	movlw	d'2'                        	; YES - set type of alarm
-	movwf	AlarmType                   	; 		copy to alarm register
-	bsf		event_occured               	; 		set event   flag
-	bsf		warning_active              	; 		set warning flag
+	bra		check_and_store_gf_violation2	; NO  - continue with checking for attention flag
+	movlw	d'2'							; YES - set type of alarm
+	movwf	AlarmType						;		copy to alarm register
+	bsf		event_occured					;		set event   flag
+	bsf		warning_active					;		set warning flag
 	bra		check_and_store_gf_violation3	;		show gf warning
 check_and_store_gf_violation2:
-	btfsc	WREG,int_prewarning_flag		; check if the pre-warning flag is set
-    bra		check_and_store_gf_violation3	; YES - show gf
+	btfsc	WREG,int_attention_flag			; check if the attention flag is set
+	bra		check_and_store_gf_violation3	; YES - show gf
 	TSTOSS	opt_enable_IBCD					; NO  - IBCD warning activated?
-	bra		check_and_store_gf_violation4	; 		NO  - continue checking of deco info
-	movff	char_O_deco_warnings,WREG		; 		YES - get the deco warnings vector
-	btfss	WREG,IBCD_warning				; 			  is the IBCD warning flag set?
-	bra		check_and_store_gf_violation4	; 			  NO  - continue checking for deco info
-check_and_store_gf_violation3:				;			  YES - show gf
+	bra		check_and_store_gf_violation4	;		NO  - continue checking of deco info
+	movff	char_O_deco_warnings,WREG		;		YES - get the deco warnings vector
+	btfss	WREG,IBCD_warning				;			 is the IBCD warning flag set?
+	bra		check_and_store_gf_violation4	;			 NO  - continue checking for deco info
+check_and_store_gf_violation3:				;			 YES - show gf
 	bsf		warning_active					; set Warning flag
 	incf	warning_counter,F				; increase counter
-    goto    TFT_warning_gf              	; show GF (and return)
+	goto	TFT_warning_gf					; show GF (and return)
 check_and_store_gf_violation4:				; check for deco info
 	btfss	divemode						; in divemode?
 	return									; NO  - done, return
 	movff	char_O_deco_warnings,WREG		; YES - get the deco warnings vector
-	btfss	WREG,deco_flag					; 		check if the deco flag is set
-    return									; 		NO  - all done, return
-	incf	warning_counter,F				; 		YES - increase counter
-    goto    TFT_info_deco	             	; 			  show deco info
-	
-	
+	btfss	WREG,deco_flag					;       check if the deco flag is set
+	return									;       NO  - all done, return
+	incf	warning_counter,F				;       YES - increase counter
+	goto	TFT_info_deco					;             show deco info
+
+
 warn_outside:
 	incf	warning_counter,F			; increase counter
-	bsf		warning_active              ; Set Warning flag
-    goto    TFT_warning_outside			; show microbubbles warning (and return)
+	bsf		warning_active				; Set Warning flag
+	goto	TFT_warning_outside			; show outside warning (and return)
 
-	
+
 	global	warn_mbubbles
 warn_mbubbles:
 	incf	warning_counter,F			; increase counter
-	bsf		warning_active              ; Set Warning flag
-    goto    TFT_warning_mbubbles		; show microbubbles warning (and return)
+	bsf		warning_active				; Set Warning flag
+	goto	TFT_warning_mbubbles		; show microbubbles warning (and return)
 	
 warn_agf:
 	incf	warning_counter,F			; increase counter
-	goto    TFT_warning_agf             ; Show aGF warning  (and return)
+	goto	TFT_warning_agf				; Show aGF warning (and return)
 
 warn_fallback:
-    incf	warning_counter,F			; increase counter
-    bsf		warning_active              ; Set Warning flag
-	goto    TFT_warning_fallback        ; Show fallback warning  (and return)
+	incf	warning_counter,F			; increase counter
+	bsf		warning_active				; Set Warning flag
+	goto	TFT_warning_fallback		; Show fallback warning (and return)
 
-	
+
 check_gas_needs:
 	banksel	int_O_tank_pres_need
-	movf	int_O_tank_pres_need+1,w	; get 				HIGH(pres need of 1st tank)
+	movf	int_O_tank_pres_need+1,w	; get               HIGH(pres need of 1st tank)
 	iorwf	int_O_tank_pres_need+3,w	; inclusive or with HIGH(pres need of 2nd tank)
 	iorwf	int_O_tank_pres_need+5,w	; inclusive or with HIGH(pres need of 3rd tank)
 	iorwf	int_O_tank_pres_need+7,w	; inclusive or with HIGH(pres need of 4th tank)
 	iorwf	int_O_tank_pres_need+9,w	; inclusive or with HIGH(pres need of 5th tank)
 	banksel	common
-	btfsc	WREG,int_invalid_flag						; check if invalid flag is set
+	btfsc	WREG,int_invalid_flag		; check if invalid flag is set
 	return								; YES - no further checking required
 	btfsc	WREG,int_warning_flag		; NO  - check if any gas has a pres_need >= pres_fill
 	bsf		warning_active				; YES - set warning flag
 	btfsc	WREG,int_warning_flag		; NO  - check if any gas has a pres_need >= pres_fill
 	goto	TFT_warning_gas_needs_warn	; Yes - show a warning
-	btfsc	WREG,int_prewarning_flag	; NO  - check if any gas has a pres_need >= pres_fill * threshold
+	btfsc	WREG,int_attention_flag		; NO  - check if any gas has a pres_need >= pres_fill * threshold
 	goto	TFT_warning_gas_needs_att	; YES - show an attention
 	bcf		gas_needs_attention			; NO  - clear flag for a new attention
 	bcf		gas_needs_warning			;       clear flag for a new warning
 	return
 
-	
+
 check_warn_sensors_disagree:
-    incf	warning_counter,F			; increase counter
+	incf	warning_counter,F			; increase counter
 	bsf		warning_active				; YES - set Warning flag
-	goto	TFT_warning_sensor_disagree	; 		show sensor disagree warning (and return)
+	goto	TFT_warning_sensor_disagree	;       show sensor disagree warning (and return)
 
 
 check_IBCD:
 	TSTOSS	opt_enable_IBCD				; IBCD warning activated?
 	return								; NO  - done
 	movff	char_O_deco_warnings,WREG	; YES - get deco warnings vector
-	btfss	WREG,IBCD_warning			; 		IBCD warning flag set?
-	return								; 		NO  - return
-	incf	warning_counter,F			; 		YES - increase counter
-	goto	TFT_warning_IBCD			;			  write warning to display
-	
+	btfss	WREG,IBCD_warning			;       IBCD warning flag set?
+	return								;       NO  - return
+	incf	warning_counter,F			;       YES - increase counter
+	goto	TFT_warning_IBCD			;             write warning to display
 
 
 	global	restart_deco_engine
@@ -2619,15 +2623,51 @@
 	movff	int_O_tank_pres_need+1,WREG
 	bsf		WREG,int_invalid_flag
 	movff	WREG,int_O_tank_pres_need+1
-	
+
 	; restart deco engine
-	movff	char_O_deco_status,WREG			; get current deco engine configuration
-	bcf		WREG,DECO_STATUS_0_FLAG			; set status flags to...
-	bcf		WREG,DECO_STATUS_1_FLAG			; ... DECO_STATUS_START
-	bsf		WREG,DECO_PLAN_FLAG				; fake we came from alternative plan to force normal plan to be done next
-	movff   WREG,char_O_deco_status 		; write back new configuration to restart deco computations
+	movff	char_O_deco_status,WREG		; get current deco engine configuration
+	bcf		WREG,DECO_STATUS_0_FLAG		; set status flags to...
+	bcf		WREG,DECO_STATUS_1_FLAG		; ... DECO_STATUS_START
+	bsf		WREG,DECO_PLAN_FLAG			; fake we came from alternative plan to force normal plan to be done next
+	movff	WREG,char_O_deco_status		; write back new configuration to restart deco computations
+
+	return
+
+;=============================================================================
+; simulator mode
+;
+
+	global	do_demo_divemode
+do_demo_divemode:
+	call	option_save_all					; Save all settings into EEPROM before starting simulation
+	call	deco_push_tissues_to_vault		; C-code: back-up status of the real tissues
+	banksel	common							; Bank1
+
+	; +++ COMMENTED OUT FOR TESTING PURPOSE ONLY !!! +++
+	; +++ DO NOT COMMENT OUT IN OPERATIONAL USE  !!! +++
+	;
+	bsf		restore_deco_data			; Restore tissue and CNS after simulator use
 
-    return
-	
-	
- END
\ No newline at end of file
+	bcf		pressure_refresh
+	btfss	pressure_refresh				; Wait for sensor
+	bra		$-2
+
+	bsf		simulatormode_active			; Set Flag
+	; Compute dive ambient conditions
+	banksel	char_I_bottom_depth
+	movf	char_I_bottom_depth,W
+	mullw	.100
+	movff	PRODL,rel_pressure+0
+	movff	PRODH,rel_pressure+1
+	movlw	LOW  (.1000)
+	addwf	PRODL,W
+	movff	WREG,sim_pressure+0
+	movlw	HIGH (.1000)
+	addwfc	PRODH,W
+	movff	WREG,sim_pressure+1
+	banksel common							; Bank1
+
+	bsf		divemode
+	goto	diveloop						; Switch into Divemode!
+
+	END
\ No newline at end of file