diff src/ghostwriter.asm @ 582:b455b31ce022

work on 2.97 stable
author heinrichsweikamp
date Mon, 26 Feb 2018 16:40:28 +0100
parents b7eb98dbd800
children 08a0162d3ca1
line wrap: on
line diff
--- a/src/ghostwriter.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/ghostwriter.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File ghostwriter.asm							REFACTORED VERSION 2.94
+;   File ghostwriter.asm							REFACTORED VERSION 2.98
 ;
 ;   Ghostwriter (Log profile recorder)
 ;
@@ -9,204 +9,253 @@
 ; HISTORY
 ;  2011-11-27 : [mH] Creation
 
-#include    "hwos.inc"                  ; Mandatory header
-#include 	"shared_definitions.h"         ; Mailbox from/to p2_deco.c
-#include	"external_flash.inc"
-#include	"surfmode.inc"
-#include    "eeprom_rs232.inc"
-#include 	"strings.inc"
-#include	"isr.inc"
-#include	"tft_outputs.inc"
-#include	"divemode.inc"
-#include    "rtc.inc"
+#include "hwos.inc"						; Mandatory header
+#include "shared_definitions.h"			; Mailbox from/to p2_deco.c
+#include "external_flash.inc"
+#include "surfmode.inc"
+#include "eeprom_rs232.inc"
+#include "strings.inc"
+#include "isr.inc"
+#include "tft_outputs.inc"
+#include "divemode.inc"
+#include "rtc.inc"
+
+
+	;---- Private local variables -------------------------------------------------
+
+	CBLOCK	local2						; max size is 16 Byte !!!
+		divisor_temperature				; divisor used to time the sampling of dive data
+		divisor_deco					; divisor used to time the sampling of dive data
+		divisor_gf						; divisor used to time the sampling of dive data
+		divisor_ppo2_sensors			; divisor used to time the sampling of dive data
+		divisor_decoplan				; divisor used to time the sampling of dive data
+		divisor_cns						; divisor used to time the sampling of dive data
+		divisor_tank					; divisor used to time the sampling of dive data
+		ProfileFlagByte					; used to store events
+	ENDC								; used: 8 byte, remaining: 8 byte
+
+
+ghostwriter		CODE
+
+;=============================================================================
+
 
-ghostwriter	CODE
+	global	init_recording_params		; Initialize profile recording parameters
+init_recording_params:
+	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
+	btfss	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		init_recording_params_1		; NO
+	movlw	samplingrate_apnoe			; YES - overwrite some parameters in Apnoe mode
+	movwf	samplesecs_value			;       to avoid EEPROM access in the ISR
+init_recording_params_1:
+	btfsc	FLAG_ccr_mode				; in CCR mode?
+	bra		init_recording_params_2		; YES
+	btfsc	FLAG_pscr_mode				; in pSCR mode?
+	bra		init_recording_params_2		; YES
+	; in OC Mode, disable ppO2 logging
+	movlw	.0
+	movwf	divisor_ppo2_sensors
+init_recording_params_2:
+	return
+
 
 	global	store_dive_data
 store_dive_data:
-	bcf		store_sample		; clear flag
+	bcf		store_sample				; clear flag
 
-    ifndef __DEBUG
-    	btfsc	simulatormode_active    ; Are we in simulator mode?
-    	return                          ; Yes, discard everything
-    endif
+	ifndef __DEBUG
+		btfsc	simulatormode_active	; Are we in simulator mode?
+		return							; Yes, discard everything
+	endif
 
-    btfsc	FLAG_apnoe_mode             ; In Apnoe mode?
-    return                              ; Yes, discard everything
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	return								; Yes, discard everything
 
-    SAFE_2BYTE_COPY rel_pressure, lo
-	movf	lo,W				        ; store depth with every sample
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
+	SAFE_2BYTE_COPY rel_pressure, lo
+	movf	lo,W						; store depth with every sample
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movf	hi,W
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-;First, find out how many bytes will append to this sample....
-	clrf	ProfileFlagByte					; clear number of bytes to append
+; First, find out how many bytes will append to this sample....
+	clrf	ProfileFlagByte				; clear number of bytes to append
 
-; Check Extented informations
-	decfsz	divisor_temperature,W	; Check divisor
-	bra		check_extended1		
+; Check Extended informations
+	decfsz	divisor_temperature,W		; Check divisor
+	bra		check_extended1
 	movlw	infolength_temperature
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended1:
-	decfsz	divisor_deco,W		; Check divisor
-	bra		check_extended2		
+	decfsz	divisor_deco,W				; Check divisor
+	bra		check_extended2
 	movlw	infolength_deco
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended2:
-	decfsz	divisor_gf,W		; Check divisor
-	bra		check_extended3		
+	decfsz	divisor_gf,W				; Check divisor
+	bra		check_extended3
 	movlw	infolength_gf
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended3:
 	decfsz	divisor_ppo2_sensors,W		; Check divisor
-	bra		check_extended4		
+	bra		check_extended4
 	movlw	infolength_ppo2_sensors
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended4:
-	decfsz	divisor_decoplan,W     ; Check divisor
-	bra		check_extended5		
+	decfsz	divisor_decoplan,W			; Check divisor
+	bra		check_extended5
 	movlw	infolength_decoplan
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended5:
-	decfsz	divisor_cns,W		; Check divisor
-	bra		check_extended6		
+	decfsz	divisor_cns,W				; Check divisor
+	bra		check_extended6
 	movlw	infolength_cns
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended6:
-	decfsz	divisor_tank,W		; Check divisor
+	decfsz	divisor_tank,W				; Check divisor
 	bra		check_extended7
 	movlw	infolength_tank
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
 check_extended7:
 
 ; Second, check global event flag
-	btfss	event_occured		; Check global event flag
-	bra		store_dive_data3	; No Event
+	btfss	event_occured				; Check global event flag
+	bra		store_dive_data3			; No Event
 
-	incf    ProfileFlagByte,F	; add one byte (The EventByte)
+	incf	ProfileFlagByte,F			; add one byte (The EventByte1)
 
-	clrf	EventByte			; reset EventByte
-    clrf	EventByte2			; reset EventByte2
+	clrf	EventByte1					; reset EventByte1
+	clrf	EventByte2					; reset EventByte2
 
-	movf	AlarmType,W			; Type of Alarm Bit 0-3
-	addwf	EventByte,F			; Copy to EventByte Bit 0-3
-	clrf	AlarmType			; Reset AlarmType
-	
+	movf	AlarmType,W					; Type of Alarm Bit 0-3
+	addwf	EventByte1,F				; Copy to EventByte1 Bit 0-3
+	clrf	AlarmType					; Reset AlarmType
+
 ; Third, check events and add additional bytes
-	btfss	gas6_changed    	; Check flag
+	btfss	gas6_changed				; Check flag
 	bra		check_event2
-	movlw	d'2'				; Information length
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
-	bsf		EventByte,4			; Also set Flag in EventByte!
+	movlw	d'2'						; Information length
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
+	bsf		EventByte1,4				; Also set Flag in EventByte1!
 check_event2:
-	btfss	stored_gas_changed	; Check flag
+	btfss	stored_gas_changed			; Check flag
 	bra		check_event3
-	movlw	d'1'				; Information length
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
-	bsf		EventByte,5			; Also set Flag in EventByte!
+	movlw	d'1'						; Information length
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
+	bsf		EventByte1,5				; Also set Flag in EventByte1!
 check_event3:
-    btfss	setpoint_changed	; Check flag
+	btfss	setpoint_changed			; Check flag
 	bra		check_event4
-	movlw	d'1'				; Information length
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
-	bsf		EventByte,6			; Also set Flag in EventByte!
+	movlw	d'1'						; Information length
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
+	bsf		EventByte1,6				; Also set Flag in EventByte1!
 check_event4:
-    btfss   bailoutgas_event    ; =1: bailout was selected or a gaschange during bailout
-    bra     check_event5
-	movlw	d'2'				; Information length
-	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
-	bsf		EventByte2,0		; set flag in EventByte2!
-    bsf     EventByte,7			; =1: Another Eventbyte is available
+	btfss	bailoutgas_event			; =1: bailout was selected or a gas change during bailout
+	bra		check_event5
+	movlw	d'2'						; Information length
+	addwf	ProfileFlagByte,F			; add to ProfileFlagByte
+	bsf		EventByte2,0				; set flag in EventByte2!
+	bsf		EventByte1,7				; =1: Another EventByte1 is available
 
 check_event5:
 	; more events?
 
 store_dive_data3:
-    btfsc   EventByte,7                 ; =1: Another Eventbyte is available
-    incf    ProfileFlagByte,F           ; add one byte (The EventByte2)
+	btfsc	EventByte1,7				; =1: Another EventByte1 is available
+	incf	ProfileFlagByte,F			; add one byte (The EventByte2)
 
-    btfsc	event_occured               ; Check global event flag
-	bsf		ProfileFlagByte,7           ; Set EventByte Flag in ProfileFlagByte
+	btfsc	event_occured				; Check global event flag
+	bsf		ProfileFlagByte,7			; Set EventByte1 Flag in ProfileFlagByte
 
-	movf	ProfileFlagByte,W           ; finally, write ProfileFlagByte!
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
+	movf	ProfileFlagByte,W			; finally, write ProfileFlagByte!
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-	btfss	event_occured               ; Check global event flag (again)
-	bra		store_dive_data4            ; No Event
+	btfss	event_occured				; Check global event flag (again)
+	bra		store_dive_data4			; No Event
 
 ; Store the EventByte(s) + additional bytes now
-	movf	EventByte,W		
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
+	movf	EventByte1,W
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-    movf    EventByte2,W                ; Write second event byte...
-    btfsc   EventByte,7                 ; =1: Another Eventbyte is available
-    rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
+	movf	EventByte2,W				; Write second event byte...
+	btfsc	EventByte1,7				; =1: Another EventByte1 is available
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-	btfss	gas6_changed                ; Check flag
+	btfss	gas6_changed				; Check flag
 	bra		store_dive_data3b
-    movff   char_I_O2_ratio,WREG
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
-    movff   char_I_He_ratio,WREG
-	rcall   ghostwrite_byte_profile     ; WREG -> Profile in ext. Flash
-	bcf		gas6_changed    	; Clear this event
+	movff	char_I_O2_ratio,WREG		; store gas 6 o2 ratio
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movff	char_I_He_ratio,WREG		; store gas 6 He ratio
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	bcf		gas6_changed				; Clear this event
 store_dive_data3b:
-	btfss	stored_gas_changed	; Check flag
+	btfss	stored_gas_changed			; Check flag
 	bra		store_dive_data3c
-	movf	active_gas,W		; Store active gas
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-	bcf		stored_gas_changed	; Clear this event
+	movf	active_gas,W				; Store active gas
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	bcf		stored_gas_changed			; Clear this event
 store_dive_data3c:
-	btfss	setpoint_changed	; Check flag
+	btfss	setpoint_changed			; Check flag
 	bra		store_dive_data3d
-	movff	char_I_const_ppO2,WREG
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-	bcf		setpoint_changed	; Clear this event
+	movff	char_I_const_ppO2,WREG		; store setpoint
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	bcf		setpoint_changed			; Clear this event
 store_dive_data3d:
-	btfss	bailoutgas_event	; Check flag
-	bra		store_dive_data3e
-    movff   char_I_O2_ratio,WREG
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    movff   char_I_He_ratio,WREG
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-	bcf		bailoutgas_event	; Clear this event
-store_dive_data3e:
+	btfss	bailoutgas_event			; Check flag
+	bra		store_dive_data4
+	movff	char_I_O2_ratio,WREG		; store O2 ratio of bailout gas
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movff	char_I_He_ratio,WREG		; store He ratio of bailout gas
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	bcf		bailoutgas_event			; Clear this event
 
 store_dive_data4:
-
 ; Store extended informations
-	decfsz	divisor_temperature,F	; Check divisor
+	decfsz	divisor_temperature,F		; Check divisor
 	bra		store_extended1	
 	rcall	store_dive_temperature
 store_extended1:
-	decfsz	divisor_deco,F			; Check divisor
+	decfsz	divisor_deco,F				; Check divisor
 	bra		store_extended2	
 	rcall	store_dive_decodata
 store_extended2:
-	decfsz	divisor_gf,F			; Check divisor
-	bra		store_extended3	
+	decfsz	divisor_gf,F				; Check divisor
+	bra		store_extended3
 	rcall	store_dive_gf
 store_extended3:
-	decfsz	divisor_ppo2_sensors,F	; Check divisor
-	bra		store_extended4	
+	decfsz	divisor_ppo2_sensors,F		; Check divisor
+	bra		store_extended4
 	rcall	store_dive_ppO2_sensors
 store_extended4:
-	decfsz	divisor_decoplan,F		; Check divisor
-	bra		store_extended5	
+	decfsz	divisor_decoplan,F			; Check divisor
+	bra		store_extended5
 	rcall	store_dive_decoplan
 store_extended5:
-	decfsz	divisor_cns,F			; Check divisor
-	bra		store_extended6	
+	decfsz	divisor_cns,F				; Check divisor
+	bra		store_extended6
 	rcall	store_dive_cns
 store_extended6:
-	decfsz	divisor_tank,F			; Check divisor
+	decfsz	divisor_tank,F				; Check divisor
 	bra		store_extended7
 	rcall	store_dive_tank
 store_extended7:
 
 ; The next block is required to take care of "store never"
-	btfsc	divisor_temperature,7	; Test highest Bit (Register must have been zero before the "decfsz" command!)
-	clrf	divisor_temperature		; And clear register again, so it will never reach zero...
+	btfsc	divisor_temperature,7		; Test highest Bit (Register must have been zero before the "decfsz" command!)
+	clrf	divisor_temperature			; And clear register again, so it will never reach zero...
 	btfsc	divisor_deco,7
 	clrf	divisor_deco
 	btfsc	divisor_gf,7
@@ -221,101 +270,114 @@
 	clrf	divisor_tank
 
 store_dive_data5:
-	bcf		event_occured		; Clear the global event flag
-	clrf	EventByte			; reset EventByte
-    clrf	EventByte2			; reset EventByte2
-	return						; Done. (Sample with all informations written to external flash)
-	
+	bcf		event_occured				; Clear the global event flag
+	clrf	EventByte1					; reset EventByte1
+	clrf	EventByte2					; reset EventByte2
+	return								; Done. (Sample with all informations written to external flash)
+
 store_dive_cns:
 	movff	int_O_CNS_fraction+0,WREG
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movff	int_O_CNS_fraction+1,WREG
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movlw	div_cns
-	movwf	divisor_cns						; Reload divisor from CF
+	movwf	divisor_cns					; Reload divisor from CF
 	return
 
 store_dive_tank:
 	movlw	div_tank
-	movwf	divisor_tank						; Reload divisor from CF
+	movwf	divisor_tank				; Reload divisor from CF
 	return
 
 store_dive_decoplan:
-    ; Store the decoplan
-    lfsr    FSR1,char_O_deco_time_for_log+.0
-    movlw   .15
-    movwf   lo
+	; Store the deco plan
+	lfsr	FSR1,char_O_deco_time_for_log+.0
+	movlw	.15
+	movwf	lo
 store_dive_decoplan_loop:
-    movf    POSTINC1,W
-    rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    decfsz  lo,F
-    bra     store_dive_decoplan_loop
+	movf	POSTINC1,W
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	decfsz	lo,F
+	bra		store_dive_decoplan_loop
 	movlw	div_decoplan
-	movwf	divisor_decoplan             ; Reload divisor from CF
+	movwf	divisor_decoplan			; Reload divisor from CF
 	return
 
 store_dive_ppO2_sensors:
-    movf    o2_ppo2_sensor1,W            ; Sensor1 ppO2 (in 0.01bar steps)
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    SAFE_2BYTE_COPY o2_mv_sensor1,lo     ; o2_mv_sensor may be modified via ISR during the two writes here...
-    movf    lo,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    movf    hi,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	movf	o2_ppo2_sensor1,W			; Sensor1 ppO2 (in 0.01bar steps)
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	SAFE_2BYTE_COPY o2_mv_sensor1,lo	; o2_mv_sensor may be modified via ISR during the two writes here...
+	movf	lo,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movf	hi,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-    movf    o2_ppo2_sensor2,W            ; Sensor2 ppO2 (in 0.01bar steps)
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    SAFE_2BYTE_COPY o2_mv_sensor2,lo     ; o2_mv_sensor may be modified via ISR during the two writes here...
-    movf    lo,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    movf    hi,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	movf	o2_ppo2_sensor2,W			; Sensor2 ppO2 (in 0.01bar steps)
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	SAFE_2BYTE_COPY o2_mv_sensor2,lo	; o2_mv_sensor may be modified via ISR during the two writes here...
+	movf	lo,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movf	hi,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
-    movf    o2_ppo2_sensor3,W            ; Sensor3 ppO2 (in 0.01bar steps)
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    SAFE_2BYTE_COPY o2_mv_sensor3,lo     ; o2_mv_sensor may be modified via ISR during the two writes here...
-    movf    lo,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-    movf    hi,W                         ; in 0.1mV steps
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	movf	o2_ppo2_sensor3,W			; Sensor3 ppO2 (in 0.01bar steps)
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	SAFE_2BYTE_COPY o2_mv_sensor3,lo	; o2_mv_sensor may be modified via ISR during the two writes here...
+	movf	lo,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movf	hi,W						; in 0.1mV steps
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 
 	movlw	div_ppo2_sensors
-	movwf	divisor_ppo2_sensors        ; Reload divisor
+	movwf	divisor_ppo2_sensors		; Reload divisor
 	return
 
 store_dive_gf:
-	movff	int_O_gradient_factor+0,WREG	; gradient factor absolute (range is limited to 255, only lower byte used for value)
-	rcall   ghostwrite_byte_profile			; WREG -> Profile in ext. Flash
+	movff	int_O_gradient_factor+0,WREG; gradient factor absolute (range is limited to 255, only lower byte used for value)
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movlw	div_gf
-	movwf	divisor_gf						; Reload divisor
+	movwf	divisor_gf					; Reload divisor
 	return
 
 store_dive_decodata:
-	movf	decodata+0,W					; =0:no stop dive, if in deco mode: ceiling in m
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
-	movf	decodata+1,W					; no stop time of length of first stop
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	; Check if deco stops are necessary
+	movff	char_O_first_deco_depth,WREG; get ceiling
+	tstfsz	WREG						; ceiling < 0m (aka in deco) ?
+	bra		store_dive_decodata_deco	; YES
+	; NO - within NDL
+	clrf	WREG						; =0: no stop dive
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movff	char_O_nullzeit,WREG		; remaining NDL time
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	bra		store_dive_decodata_common
+store_dive_decodata_deco:
+	; YES - in deco
+	movff	char_O_first_deco_depth,WREG; ceiling in m
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+	movff	char_O_first_deco_time,WREG	; length of first stop in minutes
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
+store_dive_decodata_common:
 	movlw	div_deco
-	movwf	divisor_deco					; Reload divisor
+	movwf	divisor_deco				; Reload divisor
 	return
 
 store_dive_temperature:
-    SAFE_2BYTE_COPY temperature,lo
-	movf	lo,W			            	; append temperature to current sample!
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	SAFE_2BYTE_COPY temperature,lo
+	movf	lo,W						; append temperature to current sample!
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movf	hi,W
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	rcall	ghostwrite_byte_profile		; WREG -> Profile in ext. Flash
 	movlw	div_temperature
-	movwf	divisor_temperature				; Reload divisor
+	movwf	divisor_temperature			; Reload divisor
 	return
 
 ghostwrite_byte_header:
-	goto	write_byte_ext_flash_plus_header	; (This call will also delete the 4kB TOC entry first)
-    ; returns...
+	goto	write_byte_ext_flash_plus_header ; (This call will also delete the 4kB TOC entry first)
+	; returns...
 
 ghostwrite_byte_profile:
-    goto    write_byte_ext_flash_plus	; writes byte and increases address with banking at 0x200000
-    ; returns...
+	goto	write_byte_ext_flash_plus	; writes byte and increases address with banking at 0x200000
+	; returns...
 
 	global	ghostwriter_end_dive
 ghostwriter_end_dive:
@@ -323,53 +385,52 @@
 	movff	ext_flash_address+1,ext_flash_log_pointer+1
 	movff	ext_flash_address+2,ext_flash_log_pointer+2	; Save end-of-profile pointer to store in header
 
-    movff   menupos3,customview_divemode            ; store last customview
+	movff	menupos3,customview_divemode ; store last custom view
 
 	btfss	realdive					; dive longer then one minute
-	goto	ghostwriter_end_dive_common				; No, discard everything
+	goto	ghostwriter_end_dive_common	; No, discard everything
 
 ; In DEBUG compile, keep all simulated dives in logbook, Desat time, nofly, etc...
-    ifndef __DEBUG
-    	btfsc	simulatormode_active		; Are we in simulator mode?
-    	goto	ghostwriter_end_dive_common_sim		; Yes, discard everything
-    endif
+	ifndef __DEBUG
+		btfsc	simulatormode_active			; Are we in simulator mode?
+		goto	ghostwriter_end_dive_common_sim	; Yes, discard everything
+	endif
 
-    btfsc	FLAG_apnoe_mode                         ; In Apnoe mode?
-    goto	ghostwriter_end_dive_common				; Yes, discard everything
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	goto	ghostwriter_end_dive_common	; Yes, discard everything
 
 	; Dive finished (and longer then one minute)
 
-	btfsc	FLAG_apnoe_mode					; Calc max. depth (again) for very short apnoe dives
+	btfsc	FLAG_apnoe_mode				; Calc max. depth (again) for very short apnoe dives
 	call	apnoe_calc_maxdepth
 
 	; calculate desaturation time
-	movff	last_surfpressure_30min+0,int_I_pres_surface+0          ; Pass surface to desat routine !
+	movff	last_surfpressure_30min+0,int_I_pres_surface+0	; Pass surface to desat routine !
 	movff	last_surfpressure_30min+1,int_I_pres_surface+1
 
-	call	deco_calc_wo_deco_step_1_min						; calculate deco in surface mode
-	
-	call	deco_calc_desaturation_time							; calculate desaturation time
-	movlb	b'00000001'											; select ram bank 1
-	
-	movlw	0xFD						; .... End-of-Profile Bytes
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	call	deco_calc_dive_interval_1min	; calculate deco in surface mode
+	call	deco_calc_desaturation_time		; calculate desaturation time
+	banksel	common							; select ram bank 1
+
+	movlw	0xFD							; .... End-of-Profile Bytes
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. Flash
 	movlw	0xFD
-	rcall   ghostwrite_byte_profile      ; WREG -> Profile in ext. Flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. Flash
 	movff	ext_flash_address+0,ext_flash_log_pointer+0
 	movff	ext_flash_address+1,ext_flash_log_pointer+1
 	movff	ext_flash_address+2,ext_flash_log_pointer+2	; Save end-of-profile pointer to store in header
 
-    ; Set to first address again to store dive length ext_flash_dive_counter:3
-    rcall   ghostwriter_load_pointer        ; Load ext_flash_address:3 from EEPROM .4-.6
+	; Set to first address again to store dive length ext_flash_dive_counter:3
+	rcall	ghostwriter_load_pointer		; Load ext_flash_address:3 from EEPROM .4-.6
 
-    incf_ext_flash_address_0x20	d'6'        ; Skip internal "0xFA 0xFA #Divenumber:2 0xFA 0xFA" Header
-    ; Store dive length
-    movf   ext_flash_dive_counter+0,W
-	call    write_byte_ext_flash_plus_nodel ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
-    movf   ext_flash_dive_counter+1,W
-	call    write_byte_ext_flash_plus_nodel ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
-    movf   ext_flash_dive_counter+2,W
-	call    write_byte_ext_flash_plus_nodel ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
+	incf_ext_flash_address_0x20	d'6'		; Skip internal "0xFA 0xFA #Divenumber:2 0xFA 0xFA" Header
+	; Store dive length
+	movf	ext_flash_dive_counter+0,W
+	call	write_byte_ext_flash_plus_nodel	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
+	movf	ext_flash_dive_counter+1,W
+	call	write_byte_ext_flash_plus_nodel	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
+	movf	ext_flash_dive_counter+2,W
+	call	write_byte_ext_flash_plus_nodel	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase) and does NOT delete 4kB page
 
 ; profile recording done.
 
@@ -378,16 +439,17 @@
 	movff	EEDATA,lo
 	read_int_eeprom .3
 	movff	EEDATA,hi
-	; +1                        increase total dive counter
-    infsnz  lo,F
+	; +1									; increase total dive counter
+	infsnz	lo,F
 	incf	hi,F
 	; Store new number in EEPROM
 	movff	lo,EEDATA
-	write_int_eeprom	.2
+	write_int_eeprom .2
 	movff	hi,EEDATA
-	write_int_eeprom	.3
+	write_int_eeprom .3
 
-	decf	lo,F		; -1
+	decf	lo,F							; -1
+
 	; Set ext_flash_address:3 to TOC entry of this dive
 	; 1st: 200000h-200FFFh -> lo=0
 	; 2nd: 201000h-201FFFh -> lo=1
@@ -399,382 +461,382 @@
 	movlw	0x20
 	movwf	ext_flash_address+2
 	movlw	.16
-	mulwf	lo							; lo*16 = offset to 0x2000 (up:hi)
+	mulwf	lo								; lo*16 = offset to 0x2000 (up:hi)
 	movf	PRODL,W
 	addwf	ext_flash_address+1,F
 	movf	PRODH,W
 	addwfc	ext_flash_address+2,F
-	
+
 ; Now, write header
 
-	movlw	0xFA						; Header start
-    rcall   ghostwrite_byte_header  ; (This call will also delete the 4kB TOC entry first)
+	movlw	0xFA							; Header start
+	rcall	ghostwrite_byte_header			; (This call will also delete the 4kB TOC entry first)
 	movlw	0xFA
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-	; store pointer to begin of diveprofile
-	read_int_eeprom	.4
+	; store pointer to begin of dive profile
+	read_int_eeprom .4
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	read_int_eeprom	.5
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	read_int_eeprom .5
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	read_int_eeprom	.6
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	read_int_eeprom .6
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-	; store pointer to end of diveprofile
+	; store pointer to end of dive profile
 	movf	ext_flash_log_pointer+0,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movf	ext_flash_log_pointer+1,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movf	ext_flash_log_pointer+2,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 	; write rest of header
-	movlw	logbook_profile_version     ; Defined in hwos.inc
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	movlw	logbook_profile_version			; Defined in hwos.inc
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Store dive length
-    movf    ext_flash_dive_counter+0,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movf    ext_flash_dive_counter+1,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movf    ext_flash_dive_counter+2,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	; Store dive length
+	movf	ext_flash_dive_counter+0,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movf	ext_flash_dive_counter+1,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movf	ext_flash_dive_counter+2,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-	movff	start_year,WREG         ; Date
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	movff	start_year,WREG					; Date
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	start_month,WREG
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	start_day,WREG
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	movff	start_hours,WREG    	; Start of dive time
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	start_hours,WREG				; Start of dive time
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	start_mins,WREG
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-	btfss	FLAG_apnoe_mode				; Store apnoe max or normal max (Which is only max from the last descent)
-	bra		end_dive1					; Store normal depth
+	btfss	FLAG_apnoe_mode					; Store apnoe max or normal max (Which is only max from the last descent)
+	bra		end_dive1						; Store normal depth
 
 	movff	apnoe_max_pressure+0,lo
 	movff	apnoe_max_pressure+1,hi
-	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
 	movff	lo,apnoe_max_pressure+0
 	movff	hi,apnoe_max_pressure+1
 	
-	movf	apnoe_max_pressure+0,W		; Max. depth
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	movf	apnoe_max_pressure+0,W			; Max. depth
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movf	apnoe_max_pressure+1,W
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-	bra		end_dive2					; skip normal max. depth
-		
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	bra		end_dive2						; skip normal max. depth
+
 end_dive1:
 	movff	max_pressure+0,lo
 	movff	max_pressure+1,hi
-	call	adjust_depth_with_salinity	; computes salinity setting into lo:hi [mbar]
+	call	adjust_depth_with_salinity		; computes salinity setting into lo:hi [mbar]
 	movff	lo,max_pressure+0
 	movff	hi,max_pressure+1
-	
+
 	movff	max_pressure+0,WREG				; Max. depth
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	max_pressure+1,WREG
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 end_dive2:
-	movf	divemins+0,W            		; divetime minutes
+	movf	divemins+0,W					; dive time minutes
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movf	divemins+1,W
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
-	movf	divesecs,W						; divetime seconds
+	movf	divesecs,W						; dive time seconds
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	minimum_temperature+0,WREG		; minimum temperature
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
-	movff	minimum_temperature+1,WREG		
+	movff	minimum_temperature+1,WREG
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
-	movff	last_surfpressure_30min+0,WREG	; airpressure before dive
+	movff	last_surfpressure_30min+0,WREG	; air pressure before dive
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
-	movff	last_surfpressure_30min+1,WREG		
+	movff	last_surfpressure_30min+1,WREG
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	int_O_desaturation_time+0,WREG	; desaturation time in minutes
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	int_O_desaturation_time+1,WREG
 	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    btfss   FLAG_ccr_mode           ; In CCR mode...
-    bra     end_dive_oc_gaslist     ; No, write OC gases
-    ; Write Diluents...
+	btfss	FLAG_ccr_mode					; In CCR mode...
+	bra		end_dive_oc_gaslist				; No, write OC gases
+	; Write Diluents...
 	movff	opt_dil_O2_ratio+0,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_dil_He_ratio+0,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	char_I_dil_change+0,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_dil_type+0,WREG                   
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2=Normal
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_dil_type+0,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2=Normal
 
 	movff	opt_dil_O2_ratio+1,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_dil_He_ratio+1,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	char_I_dil_change+1,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_dil_type+1,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2=Normal
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_dil_type+1,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2=Normal
 
 	movff	opt_dil_O2_ratio+2,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_dil_He_ratio+2,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	char_I_dil_change+2,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_dil_type+2,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2=Normal
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_dil_type+2,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2=Normal
 
 	movff	opt_dil_O2_ratio+3,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_dil_He_ratio+3,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	char_I_dil_change+3,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_dil_type+3,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2=Normal
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_dil_type+3,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2=Normal
 
 	movff	opt_dil_O2_ratio+4,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_dil_He_ratio+4,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	char_I_dil_change+4,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_dil_type+4,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2=Normal
-    bra     end_dive_oc_cc_common
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_dil_type+4,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2=Normal
+	bra		end_dive_oc_cc_common
 
-end_dive_oc_gaslist:            	; OC Gases...
+end_dive_oc_gaslist:						; OC Gases...
 	movff	opt_gas_O2_ratio+0,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_gas_He_ratio+0,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	opt_OC_bail_gas_change+0,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_gas_type+0,WREG                   
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2= Travel, 3= Deco
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_gas_type+0,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2= Travel, 3= Deco
 
 	movff	opt_gas_O2_ratio+1,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_gas_He_ratio+1,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	opt_OC_bail_gas_change+1,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_gas_type+1,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2= Travel, 3= Deco
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_gas_type+1,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2= Travel, 3= Deco
 
 	movff	opt_gas_O2_ratio+2,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_gas_He_ratio+2,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	opt_OC_bail_gas_change+2,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_gas_type+2,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2= Travel, 3= Deco
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_gas_type+2,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2= Travel, 3= Deco
 
 	movff	opt_gas_O2_ratio+3,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_gas_He_ratio+3,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	opt_OC_bail_gas_change+3,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_gas_type+3,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2= Travel, 3= Deco
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_gas_type+3,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2= Travel, 3= Deco
 
 	movff	opt_gas_O2_ratio+4,WREG
-	rcall	ghostwrite_byte_header	; %O2
+	rcall	ghostwrite_byte_header			; %O2
 	movff	opt_gas_He_ratio+4,WREG
-	rcall	ghostwrite_byte_header	; %He
+	rcall	ghostwrite_byte_header			; %He
 	movff	opt_OC_bail_gas_change+4,WREG
-	rcall	ghostwrite_byte_header	; Configured change depth in m
-    movff   opt_gas_type+4,WREG
-    rcall	ghostwrite_byte_header	; 0=Disabled, 1=First, 2= Travel, 3= Deco
-;    bra     end_dive_oc_cc_common
+	rcall	ghostwrite_byte_header			; Configured change depth in m
+	movff	opt_gas_type+4,WREG
+	rcall	ghostwrite_byte_header			; 0=Disabled, 1=First, 2= Travel, 3= Deco
+;	bra	 end_dive_oc_cc_common
 
 end_dive_oc_cc_common:
-	movlw	softwareversion_x		; Firmware version
+	movlw	softwareversion_x				; Firmware version
 	rcall	ghostwrite_byte_header
 	movlw	softwareversion_y
 	rcall	ghostwrite_byte_header
-	movf	batt_voltage+0,W		; Battery voltage 
+	movf	batt_voltage+0,W				; Battery voltage 
 	rcall	ghostwrite_byte_header
 	movf	batt_voltage+1,W
 	rcall	ghostwrite_byte_header
 
-	movf    samplingrate,W			; Sampling rate
-    btfsc	FLAG_apnoe_mode         ; Apnoe mode?
-	movlw	samplingrate_apnoe		; Apnoe sampling rate
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	movf	samplingrate,W					; Sampling rate
+	btfsc	FLAG_apnoe_mode					; Apnoe mode?
+	movlw	samplingrate_apnoe				; Apnoe sampling rate
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; CNS at beginning of dive
+	; CNS at beginning of dive
 	movff	CNS_start+0,WREG
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movff	CNS_start+1,WREG
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    ; Gradient factor
-    movff	GF_start,WREG
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movff	int_O_gradient_factor+0,WREG	; value limited to 255, only lower byte in use
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	CNS_start+1,WREG
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	; Gradient factor
+	movff	GF_start,WREG
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	int_O_gradient_factor+0,WREG	; value limited to 255, only lower byte in use
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Logbook offset
-    call    do_logoffset_common_read; Read into lo:hi
-    movf    lo,W
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    movf    hi,W
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	; Logbook offset
+	call	do_logoffset_common_read		; Read into lo:hi
+	movf	lo,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movf	hi,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Battery info at Byte 59
-    movf    batt_percent,W		; 0-100
-    rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
-    ; Store 5 Setpoints
-    movff   char_I_setpoint_cbar+0,WREG
-    rcall	ghostwrite_byte_header	; Setpoint in cbar
-    movff   char_I_setpoint_change+0,WREG
-    rcall	ghostwrite_byte_header	; Change depth
-    movff   char_I_setpoint_cbar+1,WREG
-    rcall	ghostwrite_byte_header	; Setpoint in cbar
-    movff   char_I_setpoint_change+1,WREG
-    rcall	ghostwrite_byte_header	; Change depth
-    movff   char_I_setpoint_cbar+2,WREG
-    rcall	ghostwrite_byte_header	; Setpoint in cbar
-    movff   char_I_setpoint_change+2,WREG
-    rcall	ghostwrite_byte_header	; Change depth
-    movff   char_I_setpoint_cbar+3,WREG
-    rcall	ghostwrite_byte_header	; Setpoint in cbar
-    movff   char_I_setpoint_change+3,WREG
-    rcall	ghostwrite_byte_header	; Change depth
-    movff   char_I_setpoint_cbar+4,WREG
-    rcall	ghostwrite_byte_header	; Setpoint in cbar
-    movff   char_I_setpoint_change+4,WREG
-    rcall	ghostwrite_byte_header	; Change depth
+	; Battery info at Byte 59
+	movf	batt_percent,W					; 0-100
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	; Store 5 Setpoints
+	movff	char_I_setpoint_cbar+0,WREG
+	rcall	ghostwrite_byte_header			; Setpoint in cbar
+	movff	char_I_setpoint_change+0,WREG
+	rcall	ghostwrite_byte_header			; Change depth
+	movff	char_I_setpoint_cbar+1,WREG
+	rcall	ghostwrite_byte_header			; Setpoint in cbar
+	movff	char_I_setpoint_change+1,WREG
+	rcall	ghostwrite_byte_header			; Change depth
+	movff	char_I_setpoint_cbar+2,WREG
+	rcall	ghostwrite_byte_header			; Setpoint in cbar
+	movff	char_I_setpoint_change+2,WREG
+	rcall	ghostwrite_byte_header			; Change depth
+	movff	char_I_setpoint_cbar+3,WREG
+	rcall	ghostwrite_byte_header			; Setpoint in cbar
+	movff	char_I_setpoint_change+3,WREG
+	rcall	ghostwrite_byte_header			; Change depth
+	movff	char_I_setpoint_cbar+4,WREG
+	rcall	ghostwrite_byte_header			; Setpoint in cbar
+	movff	char_I_setpoint_change+4,WREG
+	rcall	ghostwrite_byte_header			; Change depth
 
-    movff   opt_salinity,WREG       ; Salinity (0-4%)
-	rcall	ghostwrite_byte_header	; Store Salinity to Dive
+	movff	opt_salinity,WREG				; Salinity (0-4%)
+	rcall	ghostwrite_byte_header			; Store Salinity to Dive
 
 	movff	int_O_CNS_fraction+0,WREG		; copy into bank1
-    rcall	ghostwrite_byte_header; Stores CNS%
-    movff	int_O_CNS_fraction+1,WREG		; copy into bank1
-	rcall	ghostwrite_byte_header; Stores CNS%
+	rcall	ghostwrite_byte_header			; Stores CNS%
+	movff	int_O_CNS_fraction+1,WREG		; copy into bank1
+	rcall	ghostwrite_byte_header			; Stores CNS%
 
 	movff	avg_rel_pressure_total+0,WREG	; Average Depth
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	avg_rel_pressure_total+1,WREG	; Average Depth
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 	movff	total_divetime_seconds+0,WREG	; Total dive time (Regardless of start_dive_threshold)
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movff	total_divetime_seconds+1,WREG	; Total dive time (Regardless of start_dive_threshold)
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 	movff	char_I_GF_Low_percentage,WREG	; GF_lo
 	movff	char_I_deco_model,lo
 	decfsz	lo,F							; jump over next line if char_I_deco_model == 1
 	movff	char_I_saturation_multiplier,WREG ; Saturation Multiplier
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 	movff	char_I_GF_High_percentage,WREG	; GF_hi
 	movff	char_I_deco_model,lo
 	decfsz	lo,F							; jump over next line if char_I_deco_model == 1
 	movff	char_I_desaturation_multiplier,WREG ; Desaturation Multiplier
-	rcall	ghostwrite_byte_header	; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
 	movff	char_I_deco_model,WREG			; 0 = ZH-L16, 1 = ZH-L16-GF
-	rcall	ghostwrite_byte_header; writes byte and increases address (no banking)
+	rcall	ghostwrite_byte_header			; writes byte and increases address (no banking)
 
-	read_int_eeprom	.2
+	read_int_eeprom .2
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_header  ; Total dive counter, low
-	read_int_eeprom	.3
+	rcall	ghostwrite_byte_header			; Total dive counter, low
+	read_int_eeprom .3
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_header  ; Total dive counter, high
+	rcall	ghostwrite_byte_header			; Total dive counter, high
 
-    movff   opt_dive_mode,WREG
-	rcall	ghostwrite_byte_header  ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
+	movff	opt_dive_mode,WREG
+	rcall	ghostwrite_byte_header			; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR
 
-;   Store all tissue data available
-    movlw   .16
-    movwf   lo
-    lfsr    FSR1,char_O_tissue_N2_saturation+0
+; Store all tissue data available
+	movlw	.16
+	movwf	lo
+	lfsr	FSR1,char_O_tissue_N2_saturation+0
 end_dive_store_tissues_N2:
-    movf    POSTINC1,W
-	bcf		WREG,7						; clear flag bit for ongassing/offgassing
-    rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    decfsz  lo,F
-    bra     end_dive_store_tissues_N2   ; No
+	movf	POSTINC1,W
+	bcf		WREG,7							; clear flag bit for ongassing/offgassing
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	decfsz	lo,F
+	bra		end_dive_store_tissues_N2		; No
 
-    movlw   .64
-    movwf   lo
-    lfsr    FSR1,0x700;pres_tissue_N2+0 ; 16*4Byte Float = 64Bytes
+	movlw	.64
+	movwf	lo
+	lfsr	FSR1,0x700						; pres_tissue_N2+0 ; 16*4Byte Float = 64Bytes
 end_dive_store_tissues_N2_2:
-    movf    POSTINC1,W
-    rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    decfsz  lo,F
-    bra     end_dive_store_tissues_N2_2 ; No
+	movf	POSTINC1,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	decfsz	lo,F
+	bra		end_dive_store_tissues_N2_2		; No
 
-    movlw   .16
-    movwf   lo
-    lfsr    FSR1,char_O_tissue_He_saturation+0
+	movlw	.16
+	movwf	lo
+	lfsr	FSR1,char_O_tissue_He_saturation+0
 end_dive_store_tissues_He:
-    movf    POSTINC1,W
-	bcf		WREG,7						; clear flag bit for ongassing/offgassing
-    rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    decfsz  lo,F
-    bra     end_dive_store_tissues_He   ; No
+	movf	POSTINC1,W
+	bcf		WREG,7							; clear flag bit for ongassing/offgassing
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	decfsz	lo,F
+	bra		end_dive_store_tissues_He		; No
 
-    movlw   .64
-    movwf   lo
-    lfsr    FSR1,0x740;pres_tissue_He+0 ; 16*4Byte Float = 64Bytes
+	movlw	.64
+	movwf	lo
+	lfsr	FSR1,0x740						; pres_tissue_He+0 ; 16*4Byte Float = 64Bytes
 end_dive_store_tissues_He_2:
-    movf    POSTINC1,W
-    rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    decfsz  lo,F
-    bra     end_dive_store_tissues_He_2 ; No
+	movf	POSTINC1,W
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	decfsz	lo,F
+	bra		end_dive_store_tissues_He_2		; No
 
-    ; Some deco stuff
-    movff   char_I_depth_last_deco,WREG ; last stop [m]
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   char_I_deco_distance,WREG   ; assumed distance to shown stop
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
+	; Some deco stuff
+	movff	char_I_depth_last_deco,WREG		; last stop [m]
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	char_I_deco_distance,WREG		; assumed distance to shown stop
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Last HUD data
-    movff   hud_battery_mv+0,WREG       ; Last HUD battery value
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   hud_battery_mv+1,WREG       ; Last HUD battery value
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   hud_status_byte,WREG        ; Last HUD status
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
+	; Last HUD data
+	movff	hud_battery_mv+0,WREG			; Last HUD battery value
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	hud_battery_mv+1,WREG			; Last HUD battery value
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	hud_status_byte,WREG			; Last HUD status
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Battery gauge registers [nAs]
-    movff   battery_gauge+0,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   battery_gauge+1,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   battery_gauge+2,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   battery_gauge+3,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   battery_gauge+4,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
-    movff   battery_gauge+5,WREG        ; Battery gauge register
-	rcall	ghostwrite_byte_header      ; WREG -> Header in ext. flash
+	; Battery gauge registers [nAs]
+	movff	battery_gauge+0,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	battery_gauge+1,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	battery_gauge+2,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	battery_gauge+3,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	battery_gauge+4,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+	movff	battery_gauge+5,WREG			; Battery gauge register
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 
-    ; Header stop
+	; Header stop
 	movlw	0xFB
-	rcall	ghostwrite_byte_header		; WREG -> Header in ext. flash
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
 	movlw	0xFB
-	rcall	ghostwrite_byte_header		; WREG -> Header in ext. flash
-	
-	call	divemode_store_statistics	; Store/update statistics for this unit
+	rcall	ghostwrite_byte_header			; WREG -> Header in ext. flash
+
+	call	divemode_store_statistics		; Store/update statistics for this unit
 
 	clrf	surface_interval+0
-	clrf	surface_interval+1			; Clear surface interval timer
+	clrf	surface_interval+1				; Clear surface interval timer
 
 ghostwriter_end_dive_common:
 ; Update ext_flash_log_pointer into EEPROM
@@ -786,191 +848,194 @@
 	movff	ext_flash_log_pointer+2,EEDATA
 	write_int_eeprom .6
 
-	bcf		simulatormode_active		; if we were in simulator mode
+	bcf		simulatormode_active			; if we were in simulator mode
 
 ; In DEBUG compile, keep all simulated dives in logbook, Desat time, nofly, etc...
-    ifndef __DEBUG
-	extern	deco_pull_tissues_from_vault
-	btfsc	restore_deco_data					; Restore decodata?
-    call    deco_pull_tissues_from_vault
-	banksel common                  			; Bank1
+	ifndef __DEBUG
+		extern	deco_pull_tissues_from_vault
+		btfsc	restore_deco_data				; Restore decodata?
+		call	deco_pull_tissues_from_vault
+		banksel common							; Bank1
 	endif
 	call	update_battery_registers			; update battery registers into EEPROM
-	goto	surfloop							; and return to surfaceloop
+	goto	surfloop							; and return to surface loop
 
 ghostwriter_end_dive_common_sim:
-    tstfsz  surface_interval+0              	; Was interval zero?
-    bra     ghostwriter_end_dive_common_sim2    ; No
-    tstfsz  surface_interval+1              	; Was interval zero?
-    bra     ghostwriter_end_dive_common_sim2    ; No
-    bra     ghostwriter_end_dive_common     	; Yes, done.
+	tstfsz	surface_interval+0					; Was interval zero?
+	bra		ghostwriter_end_dive_common_sim2	; No
+	tstfsz	surface_interval+1					; Was interval zero?
+	bra		ghostwriter_end_dive_common_sim2	; No
+	bra		ghostwriter_end_dive_common			; Yes, done.
 
 ghostwriter_end_dive_common_sim2:
-    movf    divemins+0,W
-    addwf   surface_interval+0,F
-    movf    divemins+1,W
-	addwfc  surface_interval+1			; Add simulated divetime to surface interval
-    bra     ghostwriter_end_dive_common
+	movf	divemins+0,W
+	addwf	surface_interval+0,F
+	movf	divemins+1,W
+	addwfc	surface_interval+1				; Add simulated dive time to surface interval
+	bra		ghostwriter_end_dive_common
 
-ghostwriter_load_pointer:               ; Load ext_flash_address:3 from EEPROM .4-.6
-	clrf    EEADRH                      ; Make sure to select eeprom bank 0
+ghostwriter_load_pointer:					; Load ext_flash_address:3 from EEPROM .4-.6
+	clrf	EEADRH							; Make sure to select EEPROM bank 0
 	read_int_eeprom	.4
 	movff	EEDATA,ext_flash_address+0
 	read_int_eeprom	.5
 	movff	EEDATA,ext_flash_address+1
 	read_int_eeprom	.6
 	movff	EEDATA,ext_flash_address+2
-    return
+	return
 
-ghostwriter_short_header_init:          ; Proceed one page forward
-    clrf    EEDATA
-    write_int_eeprom .4                 ; ext_flash_address+0 = 0
-    movlw   .16
-    addwf   ext_flash_address+1,F
-    movlw   .0
-    addwfc  ext_flash_address+2,F
-    movlw	0x20
-	cpfseq	ext_flash_address+2			; at address 0x200000?
-	bra     ghostwriter_short_header_init2  ; No
-	clrf	ext_flash_address+2			; Yes, rollover to 0x000000
+ghostwriter_short_header_init:				; Proceed one page forward
+	clrf	EEDATA
+	write_int_eeprom .4						; ext_flash_address+0 = 0
+	movlw	.16
+	addwf	ext_flash_address+1,F
+	movlw	.0
+	addwfc	ext_flash_address+2,F
+	movlw	0x20
+	cpfseq	ext_flash_address+2				; at address 0x200000?
+	bra		ghostwriter_short_header_init2	; No
+	clrf	ext_flash_address+2				; Yes, rollover to 0x000000
 ghostwriter_short_header_init2:
-    movlw   0xF0
-    andwf   ext_flash_address+1,F       ; keep higher nibble, set lower nibble to 0
+	movlw	0xF0
+	andwf	ext_flash_address+1,F			; keep higher nibble, set lower nibble to 0
 
-    movff   ext_flash_address+1,EEDATA
-    write_int_eeprom .5                 ; Write new pointer
-    movff   ext_flash_address+2,EEDATA
-    write_int_eeprom .6                 ; Write new pointer
-    bra     ghostwriter_short_header2   ; Done.
+	movff	ext_flash_address+1,EEDATA
+	write_int_eeprom .5						; Write new pointer
+	movff	ext_flash_address+2,EEDATA
+	write_int_eeprom .6						; Write new pointer
+	bra		ghostwriter_short_header2		; Done.
 
 	global	ghostwriter_short_header
-ghostwriter_short_header:	; Write short header with divenumber into profile memory
+ghostwriter_short_header:					; Write short header with dive number into profile memory
 	; load pointer for profile storing into RAM (Updated in EEPROM after the dive)
-    rcall   ghostwriter_load_pointer        ; Load ext_flash_address:3 from EEPROM .4-.6
+	rcall	ghostwriter_load_pointer		; Load ext_flash_address:3 from EEPROM .4-.6
 
-    ; The following code is used to write a clean new dive after the previous hasn't been
-    ; stored correctly. e.g. after a battery fail during the dive
-    call    ext_flash_byte_read_plus_0x20   ; Into temp1
-    incfsz  temp1,F
-    bra     ghostwriter_short_header_init   ; Not 0xFF -> init page
-    call    ext_flash_byte_read_plus_0x20   ; Into temp1
-    incfsz  temp1,F
-    bra     ghostwriter_short_header_init   ; Not 0xFF -> init page
+	; The following code is used to write a clean new dive after the previous hasn't been
+	; stored correctly. e.g. after a battery fail during the dive
+	call	ext_flash_byte_read_plus_0x20	; Into ext_flash_rw
+	incfsz	ext_flash_rw,F
+	bra		ghostwriter_short_header_init	; Not 0xFF -> init page
+	call	ext_flash_byte_read_plus_0x20	; Into ext_flash_rw
+	incfsz	ext_flash_rw,F
+	bra		ghostwriter_short_header_init	; Not 0xFF -> init page
 
 ghostwriter_short_header2:
-    ; All ok, reload the pointer and start
-    rcall   ghostwriter_load_pointer        ; Load ext_flash_address:3 from EEPROM .4-.6
+	; All ok, reload the pointer and start
+	rcall	ghostwriter_load_pointer		; Load ext_flash_address:3 from EEPROM .4-.6
 
-    ; Clear dive length counter
-    clrf    ext_flash_dive_counter+0
-    clrf    ext_flash_dive_counter+1
-    clrf    ext_flash_dive_counter+2
+	; Clear dive length counter
+	clrf	ext_flash_dive_counter+0
+	clrf	ext_flash_dive_counter+1
+	clrf	ext_flash_dive_counter+2
 
-	; Write short header with divenumber into profile memory
+	; Write short header with dive number into profile memory
 	movlw	0xFA
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	0xFA
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	; Load total number of dives (low byte only)
 	read_int_eeprom .2
-	incf	EEDATA,W							;+1	
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	incf	EEDATA,W						;+1	
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	read_int_eeprom .3
 	movf	EEDATA,W
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	0xFA
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	0xFA
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    ; Keep room for dive length ext_flash_dive_counter:3 (Stored at the end of the dive)
-    ; Writing 0xFF three times here is mandatory
-    ; - 0xFF can be overwritten after the dive
-    ; - ghostwrite_byte_profile takes care of 4kB Page switching
-    ; - fixes an issue when we are at exactly 0xXXX000 here...
+	; Keep room for dive length ext_flash_dive_counter:3 (Stored at the end of the dive)
+	; Writing 0xFF three times here is mandatory
+	; - 0xFF can be overwritten after the dive
+	; - ghostwrite_byte_profile takes care of 4kB Page switching
+	; - fixes an issue when we are at exactly 0xXXX000 here...
 
-    movlw   0xFF
-    call    write_byte_ext_flash_plus_nocnt ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
-    movlw   0xFF
-    call    write_byte_ext_flash_plus_nocnt ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
-    movlw   0xFF
-    call    write_byte_ext_flash_plus_nocnt ; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
+	movlw	0xFF
+	call	write_byte_ext_flash_plus_nocnt	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
+	movlw	0xFF
+	call	write_byte_ext_flash_plus_nocnt	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
+	movlw	0xFF
+	call	write_byte_ext_flash_plus_nocnt	; WREG -> Profile in ext. flash (No ext_flash_dive_counter:3 increase)
 
-	movf	samplingrate,W  			; Sampling rate
-	btfsc	FLAG_apnoe_mode				; Apnoe mode?
-	movlw	samplingrate_apnoe			; Apnoe sampling rate
-	rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movf	samplingrate,W					; Sampling rate
+	btfsc	FLAG_apnoe_mode					; Apnoe mode?
+	movlw	samplingrate_apnoe				; Apnoe sampling rate
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .7                          ; Number of divisors
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.7								; Number of divisors
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .0                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.0								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_temperature
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_temperature             ; Divisor temperature
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_temperature					; Divisor temperature
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .1                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.1								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_deco
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_deco                    ; Divisor decodata
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_deco						; Divisor deco data
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .2                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.2								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_gf
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_gf                      ; Divisor gf
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_gf							; Divisor gf
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .3                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.3								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_ppo2_sensors
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_ppo2_sensors            ; Divisor ppO2
-    btfss   FLAG_ccr_mode               ; =1: CCR mode (Fixed ppO2 or Sensor) active
-    movlw   .0                          ; No ppO2 data in OC mode
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_ppo2_sensors				; Divisor ppO2
+	btfss	FLAG_ccr_mode					; =1: CCR mode (Fixed ppO2 or Sensor) active
+	movlw	.0								; No ppO2 data in OC mode
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .4                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.4								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_decoplan
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_decoplan                ; Divisor debug
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_decoplan					; Divisor debug
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .5                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.5								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_cns
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_cns                     ; Divisor CNS
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_cns							; Divisor CNS
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
-    movlw   .6                          ; Type
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	movlw	.6								; Type
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 	movlw	infolength_tank
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
-	movlw	div_tank                    ; Divisor Tank
-    rcall	ghostwrite_byte_profile 	; WREG -> Profile in ext. flash
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
+	movlw	div_tank						; Divisor Tank
+	rcall	ghostwrite_byte_profile			; WREG -> Profile in ext. flash
 
 	return
-divemode_store_statistics:	; Store/update statistics for this unit
-    rcall   vault_decodata_into_eeprom  ; update deco data
-	rcall	do_logoffset_common_read	; Existing logbook offset into lo:hi
-	
-	tstfsz	lo							; lo=0?
-	bra		change_logbook_offset1		; No, adjust offset	
-	tstfsz	hi							; hi=0?
-	bra		change_logbook_offset1		; No, adjust offset
-	bra		change_logbook_offset2		; lo=0 and hi=0 -> skip Offset routine
+
+divemode_store_statistics:					; Store/update statistics for this unit
+	call	vault_decodata_into_eeprom		; update deco data
+	call	do_logoffset_common_read		; Existing logbook offset into lo:hi
+
+	tstfsz	lo								; lo=0?
+	bra		change_logbook_offset1			; No, adjust offset	
+	tstfsz	hi								; hi=0?
+	bra		change_logbook_offset1			; No, adjust offset
+	bra		change_logbook_offset2			; lo=0 and hi=0 -> skip Offset routine
+
 change_logbook_offset1:
 	movlw	d'1'
 	addwf	lo
 	movlw	d'0'
 	addwfc	hi
-	rcall	do_logoffset_common_write	; lo:hi -> EEPROM
+	call	do_logoffset_common_write		; lo:hi -> EEPROM
+
 change_logbook_offset2:
 	; Clear lastdive:4
 	banksel	lastdive_time+0
@@ -980,172 +1045,12 @@
 	clrf	lastdive_time+3
 	movff	divemins+0,lastdive_duration+0
 	movff	divemins+1,lastdive_duration+1
-	movff	divesecs,lastdive_duration+2
+	movff	divesecs,  lastdive_duration+2
 	movff	max_pressure+0,lastdive_maxdepth+0
 	movff	max_pressure+1,lastdive_maxdepth+1
 	banksel	common
 
 	; Add more here...
-	return	
-
-	global	do_logoffset_common_write
-do_logoffset_common_write:
-	; TODO: limit [lo:hi] to 9999 ? may arrive here as >= 10000 because of +10 increment option 
-	; SIMPLER WAY: return without writing to eeprom if hi == 0x27 -> 0x2700 = 9984, this is within 
-	; the save range for a +10 increment, shall do it...
-	; mH
-    
-	movff	lo,EEDATA
-	write_int_eeprom	0x0D
-	movff	hi,EEDATA
-	write_int_eeprom	0x0E
-	return
-
-	global	do_logoffset_common_read
-do_logoffset_common_read:
-	clrf	EEADRH
-	read_int_eeprom		0x0D
-	movff	EEDATA,lo
-	read_int_eeprom		0x0E
-	movff	EEDATA,hi					; Existing logbook offset into lo:hi
-	return
-
-
-	global		update_battery_registers
-update_battery_registers:
-	; save battery_gauge:6 into EEPROM 0x07-0x0C
-	clrf	EEADRH
-	movff	battery_gauge+0,EEDATA
-	write_int_eeprom 0x07
-	movff	battery_gauge+1,EEDATA
-	write_int_eeprom 0x08
-	movff	battery_gauge+2,EEDATA
-	write_int_eeprom 0x09
-	movff	battery_gauge+3,EEDATA
-	write_int_eeprom 0x0A
-	movff	battery_gauge+4,EEDATA
-	write_int_eeprom 0x0B
-	movff	battery_gauge+5,EEDATA
-	write_int_eeprom 0x0C
-	movff	battery_type,EEDATA	; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah
-	write_int_eeprom 0x0F
 	return
 
-
-    global  vault_decodata_into_eeprom
-vault_decodata_into_eeprom:
-    ; Vault in EEPROM 512...1023
-    ; Write 0xAA at 512 to indicate valid data in vault
-    ; Store last time/date
-    ; Store 0x700 to 0x780 (pres_tissue_N2 and pres_tissue_He)
-    movlw   HIGH .512           ; =2
-    movwf   EEADRH
-    movlw   0xAA
-    movwf   EEDATA
-    write_int_eeprom .0
-    ; Store date/time
-    movff   year,EEDATA
-    write_int_eeprom .1
-    movff   month,EEDATA
-    write_int_eeprom .2
-    movff   day,EEDATA
-    write_int_eeprom .3
-    movff   hours,EEDATA
-    write_int_eeprom .4
-    movff   mins,EEDATA
-    write_int_eeprom .5
-    movff   secs,EEDATA
-    write_int_eeprom .6
-
-    movff   int_O_CNS_fraction+0,EEDATA
-    write_int_eeprom .7
-    movff   int_O_CNS_fraction+1,EEDATA
-    write_int_eeprom .8
-    movff   int_O_desaturation_time+0,EEDATA
-    write_int_eeprom .9
-    movff   int_O_desaturation_time+1,EEDATA
-    write_int_eeprom .10
-    movff   surface_interval+0,EEDATA
-    write_int_eeprom .11
-    movff   surface_interval+1,EEDATA
-    write_int_eeprom .12
-    movff   int_O_gradient_factor+0,EEDATA		; value limited to 255, only lower byte in use for value
-    write_int_eeprom .13
-    movff   int_O_nofly_time+0,EEDATA
-    write_int_eeprom .14
-    movff   int_O_nofly_time+1,EEDATA
-    write_int_eeprom .15
-
-    ; Tissue data from 16 to 144
-    movlw   .16
-    movwf   EEADR
-    movlw   .128
-    movwf   lo
-    lfsr    FSR1,0x700;pres_tissue_N2+0 ; 32*4Byte Float = 128Bytes
-vault_decodata_into_eeprom2:
-    movff   POSTINC1,EEDATA
-    call    write_eeprom                ; EEDATA into EEPROM@EEADR
-    incf    EEADR,F
-    decfsz  lo,F                        ; All done?
-    bra     vault_decodata_into_eeprom2 ; No
-    clrf    EEADRH
-    return
-
-    global  restore_decodata_from_eeprom
-restore_decodata_from_eeprom:
-    movlw   LOW  .512           ; =0
-    movwf   EEADR
-    movlw   HIGH .512           ; =2
-    movwf   EEADRH
-
-    ; Restore date/time
-    read_int_eeprom .1
-    movff   EEDATA,year
-    read_int_eeprom .2
-    movff   EEDATA,month
-    read_int_eeprom .3
-    movff   EEDATA,day
-    read_int_eeprom .4
-    movff   EEDATA,hours
-    read_int_eeprom .5
-    movff   EEDATA,mins
-    read_int_eeprom .6
-    movff   EEDATA,secs
-    call    rtc_set_rtc
-
-    read_int_eeprom .7
-    movff   EEDATA,int_O_CNS_fraction+0
-    read_int_eeprom .8
-    movff   EEDATA,int_O_CNS_fraction+1
-    read_int_eeprom .9
-    movff   EEDATA,int_O_desaturation_time+0
-    read_int_eeprom .10
-    movff   EEDATA,int_O_desaturation_time+1
-    read_int_eeprom .11
-    movff   EEDATA,surface_interval+0
-    read_int_eeprom .12
-    movff   EEDATA,surface_interval+1
-    read_int_eeprom .13
-    movff   EEDATA,int_O_gradient_factor+0
-    read_int_eeprom .14
-    movff   EEDATA,int_O_nofly_time+0
-    read_int_eeprom .15
-    movff   EEDATA,int_O_nofly_time+1
-
-    ; Tissue data from 16 to 144
-    movlw   .16
-    movwf   EEADR
-    movlw   .128
-    movwf   lo
-    lfsr    FSR1,0x700;pres_tissue_N2+0		; 32*4Byte Float = 128Bytes
-restore_decodata_from_eeprom2:
-    call    read_eeprom						; EEPROM@EEADR into EEDATA
-    movff   EEDATA,POSTINC1
-    incf    EEADR,F
-    decfsz  lo,F                        	; All done?
-    bra     restore_decodata_from_eeprom2   ; No
-    clrf    EEADRH
-    return
-
-
- END
\ No newline at end of file
+	END