diff src/menu_tree.asm @ 582:b455b31ce022

work on 2.97 stable
author heinrichsweikamp
date Mon, 26 Feb 2018 16:40:28 +0100
parents 8b7ea27ea1fa
children cb59872ad53d
line wrap: on
line diff
--- a/src/menu_tree.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/menu_tree.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File menu_tree.asm								REFACTORED VERSION V2.95
+;   File menu_tree.asm								REFACTORED VERSION V2.98
 ;
 ;   OSTC menus
 ;
@@ -9,750 +9,797 @@
 ; HISTORY
 ;   2011-07-11 : [jDG] Creation.
 
-#include    "hwos.inc"					; Mandatory header
-#include    "gaslist.inc"
-#include    "menu_processor.inc"
-#include    "start.inc"
-#include    "comm.inc"
-#include    "logbook.inc"
-#include    "tft.inc"
-#include    "eeprom_rs232.inc"
-#include    "external_flash.inc"
-#include    "shared_definitions.h"		; Mailbox from/to p2_deco.c
-#include    "isr.inc"
-#include    "ghostwriter.inc"
-#include    "adc_lightsensor.inc"
-#include    "wait.inc"
-#include    "i2c.inc"
+#include "hwos.inc"						; Mandatory header
+#include "gaslist.inc"
+#include "menu_processor.inc"
+#include "start.inc"
+#include "comm.inc"
+#include "logbook.inc"
+#include "tft.inc"
+#include "eeprom_rs232.inc"
+#include "external_flash.inc"
+#include "shared_definitions.h"			; Mailbox from/to p2_deco.c
+#include "isr.inc"
+#include "ghostwriter.inc"
+#include "adc_lightsensor.inc"
+#include "wait.inc"
+#include "i2c.inc"
+
 
-	CBLOCK  tmp+0x40					; Keep space for menu processor
-		gaslist_gas						; Check ram position in gaslist.asm, too!
-	ENDC
+	extern	do_demo_divemode
+	extern	restart
+	extern	option_save_all
+	extern	option_reset
+	extern	do_demo_planner
+	extern	calibrate_mix
+	extern	comm_mode0
+	extern	piezo_config
+	extern	compass_calibration_loop
+	extern	option_reset_all
+	extern	rtc_set_rtc
+	extern	surfloop
+	extern	oColorSetDive
 
-gui		CODE
+
+gui	CODE
+
 ;=============================================================================
 ; Main Menu
-        global  do_main_menu,do_main_menu2
+
+do_return_main_menu:
+	call	menu_processor_double_pop		; drop exit line and back to last line
+	bra		do_main_menu_common
+
+	global	do_main_menu
 do_main_menu:
-        movff   menupos3,customview_surfmode; save last customview
-do_main_menu2:
-    call        TFT_boot
-		bcf		sleepmode				; for timeout
-		call    menu_processor_reset    ; restart from first icon.
-
-do_continue_main_menu:
-	rcall	menu_tree_double_pop	; drop exit line and back to last line
+	movff	menupos3,customview_surfmode ; save last customview
 
-        extern  do_demo_divemode, restart
-    MENU_BEGIN  tMainMenu, .7
-        MENU_CALL   tLogbook,       logbook
-        MENU_CALL   tGasSetup,      do_gas_menu
-        MENU_CALL   tCCRSetup,      do_ccr_menu
-        MENU_CALL   tPlan,          do_planner_menu_reset
-        MENU_CALL   tDiveModeMenu,  do_divemode_menu
-        MENU_CALL   tSystSets,      do_settings_menu
-        MENU_CALL   tExit,          restart
-    MENU_END
+	global	do_main_menu2
+do_main_menu2:							; entry point used by logbook.asm
+	call	TFT_boot
+	bcf		sleepmode					; for timeout
+	call	menu_processor_reset		; restart from first icon
 
-do_info_menu:
-	MENU_BEGIN  tInfoMenu, .6
-	    MENU_DYNAMIC    info_menu_serial,       0
-	    MENU_DYNAMIC    info_menu_firmware,     0
-	    MENU_DYNAMIC    info_menu_battery_volts,0
-		MENU_DYNAMIC    info_menu_uptime,		0
-		MENU_DYNAMIC    info_menu_total_dives,  0
-        MENU_CALL       tExit,                  do_return_settings
-    MENU_END
+do_main_menu_common:
+	MENU_BEGIN	tMainMenu, .7
+		MENU_CALL		tLogbook,					logbook
+		MENU_CALL		tGasSetup,					do_gas_menu
+		MENU_CALL		tCCRSetup,					do_ccr_menu
+		MENU_CALL		tPlan,						do_planner_menu
+		MENU_CALL		tDiveModeMenu,				do_divemode_menu
+		MENU_CALL		tSystSets,					do_settings_menu
+		MENU_CALL		tExit,						restart
+	MENU_END
+
 
 ;=============================================================================
 ; CCR Setup
 
-return_ccr_menu:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
+do_return_ccr_menu:
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_ccr_menu:
-    bcf     menu_show_sensors2          ; Clear flag
-    btfsc   analog_o2_input
-    bra     do_ccr_menu_cR
+	bcf		menu_show_sensors2			; stop imprinting of live sensor values
 
-	; COMMENT OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu
-	; btfss   optical_input
-    ; bra     do_ccr_menu_ostc2
+	btfsc	analog_o2_input
+	bra		do_ccr_menu_cR
+
+	; COMMENTED OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu
+	; btfss	optical_input
+	; bra	do_ccr_menu_ostc2
 
-    MENU_BEGIN  tCCRSetup, .6          ; OSTC3 menu (and currently also the OSTC2 menu)
-        MENU_OPTION     tCCRMode,				oCCRMode,		0
-        MENU_CALL       tDiluentSetup,			do_diluent_setup
-        MENU_CALL       tFixedSetpoints,		do_fixed_setpoints
-		MENU_CALL		tPSCRMenu,				do_PSCR_menu
-		MENU_OPTION     tCCmaxFracO2,			oCCmaxFracO2,	0		
-        MENU_CALL       tExit,					do_continue_main_menu
-    MENU_END
+	MENU_BEGIN	tCCRSetup, .6			; OSTC3 menu (and currently also the OSTC2 menu)
+		MENU_OPTION		tCCRMode,					oCCRMode,				0
+		MENU_CALL		tDiluentSetup,				do_diluent_setup
+		MENU_CALL		tFixedSetpoints,			do_fixed_setpoints
+		MENU_CALL		tPSCRMenu,					do_PSCR_menu
+		MENU_OPTION		tCCmaxFracO2,				oCCmaxFracO2,			0
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
+
 
-do_ccr_menu_cR:                         ; cR menu
-    MENU_BEGIN  tCCRSetup, .7
-        MENU_OPTION     tCCRMode,				oCCRMode,		0
-        MENU_CALL       tCalibrateMenu,			do_calibrate_menu
-        MENU_CALL       tDiluentSetup,			do_diluent_setup
-        MENU_CALL       tFixedSetpoints,		do_fixed_setpoints
-		MENU_CALL		tPSCRMenu,				do_PSCR_menu
-		MENU_OPTION     tCCmaxFracO2,			oCCmaxFracO2,	0
-        MENU_CALL       tExit,					do_continue_main_menu
-    MENU_END
+do_ccr_menu_cR:							; cR menu
+	MENU_BEGIN	tCCRSetup, .7
+		MENU_OPTION		tCCRMode,					oCCRMode,				0
+		MENU_CALL		tCalibrateMenu,				do_calibrate_menu
+		MENU_CALL		tDiluentSetup,				do_diluent_setup
+		MENU_CALL		tFixedSetpoints,			do_fixed_setpoints
+		MENU_CALL		tPSCRMenu,					do_PSCR_menu
+		MENU_OPTION		tCCmaxFracO2,				oCCmaxFracO2,			0
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
 
-; COMMENT OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu
+; COMMENTED OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu
 ;do_ccr_menu_ostc2:
-;    MENU_BEGIN  tCCRSetup, .6           ; ostc2 menu
-;        MENU_OPTION     tCCRMode,				oCCRMode,		0
-;        MENU_CALL       tDiluentSetup,			do_diluent_setup
-;        MENU_CALL       tFixedSetpoints,		do_fixed_setpoints
-;        MENU_CALL       tPSCRMenu,				do_PSCR_menu
-;        MENU_OPTION     tCCmaxFracO2,			oCCmaxFracO2,	0
-;        MENU_CALL       tExit,					do_continue_main_menu
-;    MENU_END
+;	MENU_BEGIN	tCCRSetup, .6			; ostc2 menu
+;		MENU_OPTION		tCCRMode,					oCCRMode,				0
+;		MENU_CALL		tDiluentSetup,				do_diluent_setup
+;		MENU_CALL		tFixedSetpoints,			do_fixed_setpoints
+;		MENU_CALL		tPSCRMenu,					do_PSCR_menu
+;		MENU_OPTION		tCCmaxFracO2,				oCCmaxFracO2,			0
+;		MENU_CALL		tExit,						do_return_main_menu
+;	MENU_END
 
-do_PSCR_menu:
-    MENU_BEGIN  tPSCRMenu, .3			; PSCR Menu
-		MENU_OPTION     tPSCR_O2_drop,			oPSCR_drop,			0
-		MENU_OPTION     tPSCR_lungratio,		oPSCR_lungratio,	0
-		MENU_CALL       tExit,					return_ccr_menu
-    MENU_END
 
 do_calibrate_menu:
-    call    enable_ir_s8                ; Enable IR/S8-Port
-    bsf     menu_show_sensors2          ; Set flag
+	call	enable_ir_s8				; Enable IR/S8-Port
+	bsf		menu_show_sensors2			; start imprinting of live sensor values
+
 do_calibrate_menu2:
-	MENU_BEGIN  tCalibrateMenu, .6
-	    MENU_CALL       tDiveHudMask1,				0
-        MENU_CALL       tDiveHudMask2,				0
-        MENU_CALL       tDiveHudMask3,				0
-        MENU_OPTION     tCalibrationGas,oCalGasO2,	0
-        MENU_CALL       tCalibrate,				do_calibrate_mix
-        MENU_CALL       tExit,					return_ccr_menu
-    MENU_END
+	MENU_BEGIN	tCalibrateMenu, .6
+		MENU_CALL		tDiveHudMask1,				0
+		MENU_CALL		tDiveHudMask2,				0
+		MENU_CALL		tDiveHudMask3,				0
+		MENU_OPTION		tCalibrationGas,oCalGasO2,	0
+		MENU_CALL		tCalibrate,					do_calibrate_mix
+		MENU_CALL		tExit,						do_return_ccr_menu
+	MENU_END
+
 
 do_calibrate_mix:
-    extern  calibrate_mix
-    call    calibrate_mix               ; Calibrate with opt_calibration_O2_ratio, also calibrate S8 HUD if connected
-    WAITMS  d'250'                      ; Wait for HUD v3
-    movlw   .9 
-    movwf   customview_surfmode			; show sensor mV custom view after restart
-    goto    restart                     ; Restart into surface mode
+	call	calibrate_mix				; Calibrate with opt_calibration_O2_ratio, also calibrate S8 HUD if connected
+	WAITMS	d'250'						; Wait for HUD v3
+	movlw	.9
+	movff	WREG,customview_surfmode	; show sensor mV custom view after restart
+	goto	restart						; Restart into surface mode
 
 
 do_diluent_setup:
-       bsf     ccr_diluent_setup       ; =1: Setting up Diluents ("Gas6-10")
-       bcf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-       call    gaslist_cleanup_list    ; Takes care that only one gas can be first and first has 0m change depth
-     MENU_BEGIN  tDiluentSetup, .6
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_CALL       tExit,                  return_ccr_menu
-    MENU_END
+	bsf		ccr_diluent_setup			; =1: Setting up Diluents ("Gas6-10")
+	bcf		short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+	call	gaslist_cleanup_list		; Takes care that only one gas can be first and first has 0m change depth
+
+	MENU_BEGIN	tDiluentSetup, .6
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_CALL		tExit,						do_return_ccr_menu
+	MENU_END
+
 
 do_return_fixed_setpoints:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_fixed_setpoints:
-        bcf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-	MENU_BEGIN  tFixedSetpoints, .6
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
-        MENU_DYNAMIC    gaslist_strcat_setpoint, do_edit_sp_menu
-        MENU_CALL       tExit,                   return_ccr_menu
-    MENU_END
+	bcf		short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+
+	MENU_BEGIN	tFixedSetpoints, .6
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_edit_sp_menu
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_edit_sp_menu
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_edit_sp_menu
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_edit_sp_menu
+		MENU_DYNAMIC	gaslist_strcat_setpoint,	do_edit_sp_menu
+		MENU_CALL		tExit,						do_return_ccr_menu
+	MENU_END
+
 
 do_edit_sp_menu:
-        call    gaslist_setSP              ; Save current item.
-    MENU_BEGIN  tFixedSetpoints, .5
-        MENU_DYNAMIC    gaslist_strcat_setpoint_0,0
-        MENU_CALL       tSPPlus,                gaslist_spplus
-        MENU_CALL       tDepthPlus,             gaslist_spdepthplus
-        MENU_CALL       tDepthMinus,            gaslist_spdepthminus
-        MENU_CALL       tExit,                  do_return_fixed_setpoints
-    MENU_END
+	call	gaslist_setSP				; Save current item.
+
+	MENU_BEGIN	tFixedSetpoints, .5
+		MENU_DYNAMIC	gaslist_strcat_setpoint_0,	0
+		MENU_CALL		tSPPlus,					gaslist_spplus
+		MENU_CALL		tDepthPlus,					gaslist_spdepthplus
+		MENU_CALL		tDepthMinus,				gaslist_spdepthminus
+		MENU_CALL		tExit,						do_return_fixed_setpoints
+	MENU_END
+
+
+do_PSCR_menu:
+	MENU_BEGIN	tPSCRMenu, .3			; PSCR Menu
+		MENU_OPTION		tPSCR_O2_drop,				oPSCR_drop,				0
+		MENU_OPTION		tPSCR_lungratio,			oPSCR_lungratio,		0
+		MENU_CALL		tExit,						do_return_ccr_menu
+	MENU_END
 
 ;=============================================================================
 ; OC Gas Setup
 
-return_gas_menu:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
+do_return_gas_menu:
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
-        btfsc   ccr_diluent_setup       ; Return to CCR-Menu?
-        bra     do_diluent_setup        ; Yes.
+	btfsc	ccr_diluent_setup			; Return to CCR-Menu?
+	bra		do_diluent_setup			; Yes.
+
 do_gas_menu:
-        bcf     ccr_diluent_setup       ; =1: Setting up Diluents ("Gas6-10")
-        bcf     short_gas_decriptions   ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
-        call    gaslist_cleanup_list    ; Takes care that only one gas can be first and first has 0m change depth
-    MENU_BEGIN  tGaslist, .6
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_edit_gas_menu
-        MENU_CALL       tExit,                  do_continue_main_menu
-    MENU_END
+	bcf		ccr_diluent_setup			; =1: Setting up Diluents ("Gas6-10")
+	bcf		short_gas_decriptions		; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
+	call	gaslist_cleanup_list		; Takes care that only one gas can be first and first has 0m change depth
 
-return_gas_depth:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
-        bra     do_edit_gas_menu_1
+	MENU_BEGIN	tGaslist, .6
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_DYNAMIC	gaslist_strcat_gas_mod,		do_edit_gas_menu
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
+
+
+do_return_edit_gas_menu:
+	call	menu_processor_pop			; drop exit line and ...
+do_abort_gas_depth_menu:
+	call	menu_processor_pop			; back to last line
+	bra		do_edit_gas_menu_common
 
 do_edit_gas_menu:
-    call    gaslist_setgas              ; Save current item.
-do_edit_gas_menu_1:                     ; Keep current gas.
-	MENU_BEGIN          tGasEdit, .6
-        MENU_DYNAMIC    gaslist_gastitle,       0
-        MENU_DYNAMIC    gaslist_MOD_END,        0
-        MENU_DYNAMIC    gaslist_show_type,      gaslist_toggle_type
-        MENU_CALL       tSetup_mix,             do_setup_mix
-        MENU_CALL       tGasDepth,              do_gas_depth_menu
-        MENU_CALL       tExit,                  return_gas_menu
-    MENU_END
+	call	gaslist_setgas				; set gaslist_gas
+
+do_edit_gas_menu_common:				; keep current gas
+	MENU_BEGIN	tGasEdit, .6
+		MENU_DYNAMIC	gaslist_gastitle,			0
+		MENU_DYNAMIC	gaslist_MOD_END,			0
+		MENU_DYNAMIC	gaslist_show_type,			gaslist_toggle_type
+		MENU_CALL		tSetup_mix,					do_setup_mix
+		MENU_CALL		tGasDepth,					do_gas_depth_menu
+		MENU_CALL		tExit,						do_return_gas_menu
+	MENU_END
+
 
 do_setup_mix:
-    MENU_BEGIN          tGasEdit, .7
-        MENU_DYNAMIC    gaslist_gastitle,       0
-        MENU_DYNAMIC    gaslist_MOD_END,        0
-        MENU_CALL       tO2Plus,                gaslist_pO2
-        MENU_CALL       tO2Minus,               gaslist_mO2
-        MENU_CALL       tHePlus,                gaslist_pHe
-        MENU_CALL       tHeMinus,               gaslist_mHe
-        MENU_CALL       tExit,                  return_gas_depth
-    MENU_END
-
-menu_tree_double_pop:    
-        call    menu_processor_pop      ; drop exit line.
-        goto	menu_processor_pop      ; back to last gas and return
+	MENU_BEGIN	tGasEdit, .7
+		MENU_DYNAMIC	gaslist_gastitle,			0
+		MENU_DYNAMIC	gaslist_MOD_END,			0
+		MENU_CALL		tO2Plus,					gaslist_pO2
+		MENU_CALL		tO2Minus,					gaslist_mO2
+		MENU_CALL		tHePlus,					gaslist_pHe
+		MENU_CALL		tHeMinus,					gaslist_mHe
+		MENU_CALL		tExit,						do_return_edit_gas_menu
+	MENU_END
 
 
-    global  do_gas_depth_menu
 do_gas_depth_menu:
-    movff   gaslist_gas,WREG
-    lfsr    FSR1,opt_gas_type       ; Read opt_gas_type[WREG]
-    movff   PLUSW1,lo               ; Used as temp
-    movlw   .3                      ; 3=Deco
-    btfsc   ccr_diluent_setup       ; =1: Setting up Diluents ("Gas6-10")
-    movlw   .2                      ; 2=Normal
-    cpfseq  lo
-    bra     return_gas_depth        ; Non-Deco gas or "Normal" Diluent, Return!
+	movff	gaslist_gas,WREG
+	lfsr	FSR1,opt_gas_type			; Read opt_gas_type[WREG]
+	movff	PLUSW1,lo					; Used as temp
+	movlw	.3							; 3=Deco
+	btfsc	ccr_diluent_setup			; =1: Setting up Diluents ("Gas6-10")
+	movlw	.2							; 2=Normal
+	cpfseq	lo
+	bra		do_abort_gas_depth_menu		; Non-Deco gas or "Normal" Diluent, abort!
 
-    MENU_BEGIN  tGasEdit, .7
-        MENU_DYNAMIC    gaslist_gastitle,       0
-        MENU_DYNAMIC    gaslist_MOD_END,        0
-        MENU_DYNAMIC    gaslist_ppo2,           0               ; ppO2 at change depth
-        MENU_CALL       tDepthPlus,             gaslist_pDepth
-        MENU_CALL       tDepthMinus,            gaslist_mDepth
-        MENU_DYNAMIC    gaslist_reset_mod_title,gaslist_reset_mod
-        MENU_CALL       tExit,                  return_gas_depth
-    MENU_END
+	MENU_BEGIN	tGasEdit, .7
+		MENU_DYNAMIC	gaslist_gastitle,			0
+		MENU_DYNAMIC	gaslist_MOD_END,			0
+		MENU_DYNAMIC	gaslist_ppo2,				0					; ppO2 at change depth
+		MENU_CALL		tDepthPlus,					gaslist_pDepth
+		MENU_CALL		tDepthMinus,				gaslist_mDepth
+		MENU_DYNAMIC	gaslist_reset_mod_title,	gaslist_reset_mod
+		MENU_CALL		tExit,						do_return_edit_gas_menu
+	MENU_END
 
-	
+
 ;=============================================================================
 ; Simulator menus
 
-        global  do_planner_menu
+do_return_planner_menu:
+	call	menu_processor_pop			; drop exit line and ...
 
-do_planner_menu_reset:
-	extern	option_save_all
-	call	option_save_all
-	call	restart_set_modes_and_flags	; To have correct simulator results for mode changes without prior surfacemode call
-        ;---- Reset dive time/depth to default values
-        extern  option_reset
-        lfsr    FSR0,odiveInterval
-        call    option_reset
-        lfsr    FSR0,obottomTime
-        call    option_reset
-        lfsr    FSR0,obottomDepth
-        call    option_reset
+	global	do_return_demo_planner
+do_return_demo_planner:
+	call	menu_processor_pop			; back to last line
+	bra		do_planner_common
 
 do_planner_menu:
-    extern  do_demo_planner
-    MENU_BEGIN  tPlan, .7
-        MENU_OPTION     tIntvl, odiveInterval,  0
-        MENU_OPTION     tBtDep, obottomDepth,   0
-		MENU_CALL       tInter,                 do_demo_divemode
-        MENU_OPTION     tBtTm,  obottomTime,    0
-        MENU_CALL       tDecoSetup,             do_planner_config
-        MENU_CALL       tDeco,                  do_demo_planner
-        MENU_CALL       tExit,                  do_continue_main_menu
-    MENU_END
+	; to have correct simulator results after mode changes without prior excursion to surfacemode
+	call	option_save_all
+	call	restart_set_modes_and_flags
+	; Reset dive time/depth to default values
+	lfsr	FSR0,odiveInterval
+	call	option_reset
+	lfsr	FSR0,obottomTime
+	call	option_reset
+	lfsr	FSR0,obottomDepth
+	call	option_reset
+
+do_planner_common:
+	MENU_BEGIN	tPlan, .7
+		MENU_OPTION		tIntvl,						odiveInterval,			0
+		MENU_OPTION		tBtDep,						obottomDepth,			0
+		MENU_CALL		tInter,						do_demo_divemode
+		MENU_OPTION		tBtTm,						obottomTime,			0
+		MENU_CALL		tDecoSetup,					do_planner_config
+		MENU_CALL		tDeco,						do_demo_planner
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
 
 
 do_planner_config:
-    MENU_BEGIN  tPlan, .3
-		MENU_OPTION		tSelectSetpoint,oSimSetpoint,	0
-		MENU_OPTION		tuseAGF, 		oSimAGF,		0
-        MENU_CALL       tExit,							do_planner_menu
-    MENU_END
+	MENU_BEGIN	tPlan, .3
+		MENU_OPTION		tSelectSetpoint,			oSimSetpoint,			0
+		MENU_OPTION		tuseAGF,					oSimAGF,				0
+		MENU_CALL		tExit,						do_return_planner_menu
+	MENU_END
 
 
 ;=============================================================================
 ; Divemode menu
 
 do_return_divemode_menu:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_divemode_menu:
-    MENU_BEGIN  tDiveModeMenu, .7
-        MENU_OPTION  tDvMode,    oDiveMode,     0
-        MENU_OPTION  tDkMode,    oDecoMode,     0
-        MENU_CALL    tppO2settings,          	do_ppo2_menu
-        MENU_OPTION	 tsafetystopmenu,oSafetyStop,    0
-		MENU_CALL    t2ndDecoPlanMenu,			do_2nd_deco_plan_menu
-        MENU_CALL    tDecoparameters,          	do_decoparameters_menu
-        MENU_CALL    tExit,                  	do_continue_main_menu
-    MENU_END
+	MENU_BEGIN	tDiveModeMenu, .7
+		MENU_OPTION		tDvMode,					oDiveMode,				0
+		MENU_OPTION		tDkMode,					oDecoMode,				0
+		MENU_CALL		tppO2settings,				do_ppo2_menu
+		MENU_OPTION		tsafetystopmenu,			oSafetyStop,			0
+		MENU_CALL		t2ndDecoPlanMenu,			do_2nd_deco_plan_menu
+		MENU_CALL		tDecoparameters,			do_decoparameters_menu
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
+
 
 do_ppo2_menu:
-	MENU_BEGIN  tppO2settings, .6
-	
-		MENU_DYNAMIC divesets_ppo2_max,         do_toggle_ppo2_max
-		MENU_DYNAMIC divesets_ppo2_max_deco,    do_toggle_ppo2_max_deco
-		MENU_DYNAMIC divesets_ppo2_min,         do_toggle_ppo2_min
-		MENU_DYNAMIC divesets_ppo2_min_cc,      do_toggle_ppo2_min_cc
-        MENU_OPTION  tShowppO2, oShowppO2,      0
-        MENU_CALL    tExit,                  	do_return_divemode_menu
-    MENU_END
+	MENU_BEGIN	tppO2settings, .6
+		MENU_DYNAMIC	divesets_ppo2_max,			do_toggle_ppo2_max
+		MENU_DYNAMIC	divesets_ppo2_max_deco,		do_toggle_ppo2_max_deco
+		MENU_DYNAMIC	divesets_ppo2_min,			do_toggle_ppo2_min
+		MENU_DYNAMIC	divesets_ppo2_min_cc,		do_toggle_ppo2_min_cc
+		MENU_OPTION		tShowppO2,					oShowppO2,				0
+		MENU_CALL		tExit,						do_return_divemode_menu
+	MENU_END
+
 
 do_return_decoparameters_menu:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
-do_decoparameters_menu: 
-    movff   char_I_deco_model,lo           ; 0 = ZH-L16, 1 = ZH-L16-GF
-    tstfsz  lo
-    bra	    do_decoparameters_menugf	   ; <> 0 -> GF menu!
-    ; NON-GF menu
-    MENU_BEGIN  tDecoparameters, .4
-        MENU_OPTION  tSaturationMult,osatmult,  0
-        MENU_OPTION  tDesaturationMult,odesatmult,0
-        MENU_OPTION  tLastDecostop,oLastDeco,   0
-        MENU_CALL    tExit,                  	do_return_divemode_menu
-    MENU_END
-    
+	call	menu_processor_double_pop	; drop exit line and back to last line
+
+do_decoparameters_menu:
+	movff	char_I_deco_model,lo		; 0 = ZH-L16, 1 = ZH-L16-GF
+	tstfsz	lo
+	bra		do_decoparameters_menugf	; <> 0 -> GF menu!
+	; NON-GF menu
+	MENU_BEGIN	tDecoparameters, .4
+		MENU_OPTION		tSaturationMult,			osatmult,				0
+		MENU_OPTION		tDesaturationMult,			odesatmult,				0
+		MENU_OPTION		tLastDecostop,				oLastDeco,				0
+		MENU_CALL		tExit,						do_return_divemode_menu
+	MENU_END
+
 do_decoparameters_menugf:
-    ; GF menu
-    MENU_BEGIN  tDecoparameters, .7
-        MENU_OPTION  tGF_low,   oGF_low,        0
-        MENU_OPTION  tGF_high,  oGF_high,       0
-        MENU_CALL    taGFMenu,                  do_aGF_menu
-        MENU_OPTION  tSaturationMult,osatmultgf,  0
-        MENU_OPTION  tDesaturationMult,odesatmultgf,0
-        MENU_OPTION  tLastDecostop,oLastDeco,   0
-        MENU_CALL    tExit,                  	do_return_divemode_menu
-    MENU_END
+	; GF menu
+	MENU_BEGIN	tDecoparameters, .7
+		MENU_OPTION		tGF_low,					oGF_low,				0
+		MENU_OPTION		tGF_high,					oGF_high,				0
+		MENU_CALL		taGFMenu,					do_aGF_menu
+		MENU_OPTION		tSaturationMult,			osatmultgf,				0
+		MENU_OPTION		tDesaturationMult,			odesatmultgf,			0
+		MENU_OPTION		tLastDecostop,				oLastDeco,				0
+		MENU_CALL		tExit,						do_return_divemode_menu
+	MENU_END
 
-    
-    
 
 do_return_2nd_deco_plan_menu:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
-
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_2nd_deco_plan_menu
-    MENU_BEGIN  t2ndDecoPlanMenu, .7
-        MENU_OPTION  tFTTSMenu,		oExtraTime,		0
-		MENU_OPTION  tCalcAscGas,	oCalcAscGas,	0
-        MENU_OPTION  tSetBotUse,	obottom_usage,	0
-        MENU_OPTION  tSetDecoUse,	odeco_usage,	0
-		MENU_CALL	 tTankSizes,				do_tank_sizes_menu
-		MENU_CALL	 tTankFillPress,			do_tank_fill_press_menu
-		MENU_CALL    tExit,                  	do_return_divemode_menu
-    MENU_END
+	MENU_BEGIN	t2ndDecoPlanMenu, .7
+		MENU_OPTION		tFTTSMenu,					oExtraTime,				0
+		MENU_OPTION		tCalcAscGas,				oCalcAscGas,			0
+		MENU_OPTION		tSetBotUse,					obottom_usage,			0
+		MENU_OPTION		tSetDecoUse,				odeco_usage,			0
+		MENU_CALL		tTankSizes,					do_tank_sizes_menu
+		MENU_CALL		tTankFillPress,				do_tank_fill_press_menu
+		MENU_CALL		tExit,						do_return_divemode_menu
+	MENU_END
 
-	
 
 do_tank_sizes_menu:
-    MENU_BEGIN  tTankSizes, .6
-        MENU_OPTION  tGas1,	oTankSize1,			0
-        MENU_OPTION  tGas2,	oTankSize2,			0
-        MENU_OPTION  tGas3,	oTankSize3,			0
-        MENU_OPTION  tGas4,	oTankSize4,			0
-        MENU_OPTION  tGas5,	oTankSize5,			0
-        MENU_CALL    tExit,                  	do_return_2nd_deco_plan_menu
-    MENU_END
+	MENU_BEGIN	tTankSizes, .6
+		MENU_OPTION		tGas1,						oTankSize1,				0
+		MENU_OPTION		tGas2,						oTankSize2,				0
+		MENU_OPTION		tGas3,						oTankSize3,				0
+		MENU_OPTION		tGas4,						oTankSize4,				0
+		MENU_OPTION		tGas5,						oTankSize5,				0
+		MENU_CALL		tExit,						do_return_2nd_deco_plan_menu
+	MENU_END
 
-	
 
 do_tank_fill_press_menu:
-    MENU_BEGIN  tTankFillPress, .6
-        MENU_OPTION  tGas1,	oTankFillPres1,		0
-        MENU_OPTION  tGas2,	oTankFillPres2,		0
-        MENU_OPTION  tGas3,	oTankFillPres3,		0
-        MENU_OPTION  tGas4,	oTankFillPres4,		0
-        MENU_OPTION  tGas5,	oTankFillPres5,		0
-        MENU_CALL    tExit,                  	do_return_2nd_deco_plan_menu
-    MENU_END
+	MENU_BEGIN	tTankFillPress, .6
+		MENU_OPTION		tGas1,						oTankFillPres1,			0
+		MENU_OPTION		tGas2,						oTankFillPres2,			0
+		MENU_OPTION		tGas3,						oTankFillPres3,			0
+		MENU_OPTION		tGas4,						oTankFillPres4,			0
+		MENU_OPTION		tGas5,						oTankFillPres5,			0
+		MENU_CALL		tExit,						do_return_2nd_deco_plan_menu
+	MENU_END
 
-	
+
 do_aGF_menu:
-    MENU_BEGIN  taGFMenu, .4
-        MENU_OPTION  taGF_enable,oEnable_aGF,    0
-        MENU_OPTION  taGF_low,   oaGF_low,       0
-        MENU_OPTION  taGF_high,  oaGF_high,      0
-        MENU_CALL    tExit,                  	do_return_decoparameters_menu
-    MENU_END
+	MENU_BEGIN	taGFMenu, .4
+		MENU_OPTION		taGF_enable,				oEnable_aGF,			0
+		MENU_OPTION		taGF_low,					oaGF_low,				0
+		MENU_OPTION		taGF_high,					oaGF_high,				0
+		MENU_CALL		tExit,						do_return_decoparameters_menu
+	MENU_END
 
 
 ;=============================================================================
 ; Setup Menu
 
+do_return_settings_deeper:				; entry point for return from set time/date sub-menu
+	bcf		settime_setdate				; clear flag
+	call	menu_processor_pop			; drop one more stack entry
+
 do_return_settings:
-	bcf		settime_setdate			; Clear flag
-	rcall	menu_tree_double_pop	; drop exit line and back to last line
-        
-	extern  compass_calibration_loop
+	call	menu_processor_double_pop	; drop exit line and back to last line
+
 do_settings_menu:
-    btfsc   ble_available           ; ble available
-    bra     do_settings_menu_ble    ; Yes.
-    MENU_BEGIN  tSystSets, .6
-        MENU_CALL   tInfoMenu,      do_info_menu
-        MENU_CALL   tSetTimeDate,   do_date_time_menu
-        MENU_CALL   tDispSets,      do_dispsets_menu
-	MENU_OPTION tLanguage,      oLanguage,			0
-        MENU_CALL   tMore,          do_settings_menu_more
-        MENU_CALL   tExit,          do_continue_main_menu
-    MENU_END
+	btfsc	ble_available				; ble available?
+	bra		do_settings_menu_ble		; YES
+
+	MENU_BEGIN	tSystSets, .6
+		MENU_CALL		tInfoMenu,					do_info_menu
+		MENU_CALL		tSetTimeDate,				do_date_time_menu
+		MENU_CALL		tDispSets,					do_dispsets_menu
+		MENU_OPTION		tLanguage,					oLanguage,				0
+		MENU_CALL		tMore,						do_settings_menu_more
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
 
 do_settings_menu_ble:
-	MENU_BEGIN  tSystSets, .7
-        MENU_CALL   tInfoMenu,      do_info_menu
-        MENU_CALL   tBleTitle,      comm_mode0
-        MENU_CALL   tSetTimeDate,   do_date_time_menu
-        MENU_CALL   tDispSets,      do_dispsets_menu
-	MENU_OPTION tLanguage,      oLanguage,			0
-        MENU_CALL   tMore,          do_settings_menu_more
-        MENU_CALL   tExit,          do_continue_main_menu
-    MENU_END
+	MENU_BEGIN	tSystSets, .7
+		MENU_CALL		tInfoMenu,					do_info_menu
+		MENU_CALL		tBleTitle,					comm_mode0
+		MENU_CALL		tSetTimeDate,				do_date_time_menu
+		MENU_CALL		tDispSets,					do_dispsets_menu
+		MENU_OPTION		tLanguage,					oLanguage,				0
+		MENU_CALL		tMore,						do_settings_menu_more
+		MENU_CALL		tExit,						do_return_main_menu
+	MENU_END
+
+do_info_menu:
+	MENU_BEGIN	tInfoMenu, .6
+		MENU_DYNAMIC	info_menu_serial,			0
+		MENU_DYNAMIC	info_menu_firmware,			0
+		MENU_DYNAMIC	info_menu_battery_volts,	0
+		MENU_DYNAMIC	info_menu_uptime,			0
+		MENU_DYNAMIC	info_menu_total_dives,		0
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
+
+
+do_return_settings_more_deeper:			; entry point for returns from reset sub-menu
+	call	menu_processor_pop			; drop one more stack entry
 
 do_return_settings_more:
-    	rcall	menu_tree_double_pop	; drop exit line and back to last line
-    
+	call	menu_processor_double_pop	; drop exit line and back to last line
+
 do_settings_menu_more:
-    btfsc   battery_gauge_available		; piezo buttons available
-    bra     do_settings_menu_more_piezo
-    btfsc   ble_available				; ble available
-    bra     do_settings_menu_more_ostc3p
-    MENU_BEGIN  tSystSets, .7
-		MENU_CALL   tCompassMenu,   do_compass_menu
-		MENU_CALL	tLogOffset,		do_log_offset_menu
-		MENU_OPTION tUnits,    		oUnits,				0
-		MENU_OPTION tAltMode,	    oAltMode,	    0		
-		MENU_OPTION tDvSalinity,	oDiveSalinity,		0
-		MENU_CALL   tResetMenu,     do_reset_menu
-		MENU_CALL   tExit,          do_return_settings
-    MENU_END
+	btfsc	battery_gauge_available		; piezo buttons available
+	bra		do_settings_menu_more_piezo
+	btfsc	ble_available				; ble available
+	bra		do_settings_menu_more_ostc3p
+																				; All MENU_CALLs that are
+	MENU_BEGIN	tSystSets, .6													; in all of this 3 menus
+		MENU_CALL		tCompassMenu,				do_compass_menu				; need to stay together
+		MENU_CALL		tLogOffset,					do_log_offset_menu			; on this menu level in
+		MENU_OPTION		tAltMode,					oAltMode,				0	; oder to not mass up the
+		MENU_OPTION		tDvSalinity,				oDiveSalinity,			0	; menu stack on doing the
+		MENU_CALL		tResetMenu,					do_reset_menu				; do_return_settings !
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
 
-do_settings_menu_more_piezo_exit:
+
+do_return_settings_menu_more_pz:
 	call	TFT_ClearScreen
-    extern  piezo_config
-    call    piezo_config                ; Configure buttons
+	call	piezo_config				; Configure buttons
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_settings_menu_more_piezo:
-    MENU_BEGIN  tSystSets, .7
-        MENU_CALL   tCompassMenu,	do_compass_menu
-		MENU_CALL	tLogOffset,		do_log_offset_menu
-        MENU_OPTION tUnits,			oUnits,				0
-       	MENU_OPTION tAltMode,	    oAltMode,	    0		
-        MENU_OPTION tDvSalinity,	oDiveSalinity,		0
-        MENU_CALL   tMore,			do_settings_piezo_menu
-        MENU_CALL   tExit,			do_return_settings
-    MENU_END
+	MENU_BEGIN	tSystSets, .7
+		MENU_CALL		tCompassMenu,				do_compass_menu
+		MENU_CALL		tLogOffset,					do_log_offset_menu
+		MENU_OPTION		tAltMode,					oAltMode,				0
+		MENU_OPTION		tDvSalinity,				oDiveSalinity,			0
+		MENU_CALL		tResetMenu,					do_reset_menu
+		MENU_CALL		tMore,						do_settings_piezo_menu
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
 
-    extern  comm_mode0
+do_settings_menu_more_ostc3p:			; Menu with BLE feature
+	MENU_BEGIN	tSystSets, .6
+		MENU_CALL		tCompassMenu,				do_compass_menu
+		MENU_CALL		tLogOffset,					do_log_offset_menu
+		MENU_OPTION		tAltMode,					oAltMode,				0
+		MENU_OPTION		tDvSalinity,				oDiveSalinity,			0
+		MENU_CALL		tResetMenu,					do_reset_menu
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
+
 
 do_settings_piezo_menu:
-    ; Menu with features only available in piezo button hardware
-    MENU_BEGIN  tSystSets, .4
-        MENU_CALL   tResetMenu,		do_reset_menu
-        MENU_OPTION tButtonleft,	ocR_button_left,	0  ; left button sensitivity
-        MENU_OPTION tButtonright,	ocR_button_right,	0  ; right button sensitivity
-        MENU_CALL   tExit,          do_settings_menu_more_piezo_exit
-    MENU_END
+	; Menu with features only available in piezo button hardware
+	MENU_BEGIN	tSystSets, .3
+		MENU_OPTION		tButtonleft,				ocR_button_left,		0		; left button sensitivity
+		MENU_OPTION		tButtonright,				ocR_button_right,		0		; right button sensitivity
+		MENU_CALL		tExit,						do_return_settings_menu_more_pz
+	MENU_END
 
-do_settings_menu_more_ostc3p:  ; Menu with BLE feature
-    MENU_BEGIN  tSystSets, .7
-        MENU_CALL   tCompassMenu,	do_compass_menu
-		MENU_CALL	tLogOffset,		do_log_offset_menu
-        MENU_OPTION tUnits,			oUnits,				0
-       	MENU_OPTION tAltMode,	    oAltMode,	    0		
-        MENU_OPTION tDvSalinity,	oDiveSalinity,		0
-        MENU_CALL   tResetMenu,     do_reset_menu
-        MENU_CALL   tExit,          do_return_settings
-    MENU_END
 
 do_compass_menu:
-    MENU_BEGIN  tSystSets, .5
-        MENU_CALL   tCompassMenu,   compass_calibration_loop
-;       MENU_OPTION		tCompassGain,   oCompassGain,	0
-		MENU_DYNAMIC    menu_cal_x,						0
-		MENU_DYNAMIC    menu_cal_y,						0
-		MENU_DYNAMIC    menu_cal_z,						0
-        MENU_CALL		tExit,			do_return_settings_more
-    MENU_END
+	MENU_BEGIN	tSystSets, .5
+		MENU_CALL		tCompassMenu,				compass_calibration_loop		; exits to surfloop
+;		MENU_OPTION		tCompassGain,				oCompassGain,	0
+		MENU_DYNAMIC	menu_cal_x,					0
+		MENU_DYNAMIC	menu_cal_y,					0
+		MENU_DYNAMIC	menu_cal_z,					0
+		MENU_CALL		tExit,						do_return_settings_more
+	MENU_END
+
 
 ;=============================================================================
 ; Reset and confirmation menu.
 
 do_reset_menu:
-    MENU_BEGIN  tResetMenu, .6
-        MENU_CALL       tExit,			do_return_settings
-        MENU_CALL       tReboot,		do_reset_menu2		; Confirm
-		MENU_CALL       tResetDeco,		do_reset_menu3		; Confirm
-		MENU_CALL       tResetSettings,	do_reset_menu4		; Confirm
-        MENU_CALL       tResetLogbook,	do_reset_menu5		; Confirm
-        MENU_CALL       tResetBattery,	new_battery_menu	; New Battery sub menu
-    MENU_END
+	MENU_BEGIN	tResetMenu, .6
+		MENU_CALL		tExit,						do_return_settings_more
+		MENU_CALL		tReboot,					do_reset_menu2			; Confirm
+		MENU_CALL		tResetDeco,					do_reset_menu3			; Confirm
+		MENU_CALL		tResetSettings,				do_reset_menu4			; Confirm
+		MENU_CALL		tResetLogbook,				do_reset_menu5			; Confirm
+		MENU_CALL		tResetBattery,				do_new_battery_menu		; Confirm
+	MENU_END
 
 do_reset_menu2:
-    MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,			do_continue_menu_3stack
-        MENU_CALL       tReboot,		do_reboot               ; Reboot
-    MENU_END
+	MENU_BEGIN	tResetMenu2, .2
+		MENU_CALL		tAbort,						do_return_settings_more_deeper
+		MENU_CALL		tReboot,					do_reboot				; Reboot
+	MENU_END
 
 do_reset_menu3:
-    MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,			do_continue_menu_3stack
-        MENU_CALL       tResetDeco,		do_reset_deco			; Reset Deco
-    MENU_END
+	MENU_BEGIN	tResetMenu2, .2
+		MENU_CALL		tAbort,						do_return_settings_more_deeper
+		MENU_CALL		tResetDeco,					do_reset_deco			; Reset Deco
+	MENU_END
 
 do_reset_menu4:
-    MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,			do_continue_menu_3stack
-        MENU_CALL       tResetSettings,	do_reset_settings		; Reset all settings
-    MENU_END
+	MENU_BEGIN	tResetMenu2, .2
+		MENU_CALL		tAbort,						do_return_settings_more_deeper
+		MENU_CALL		tResetSettings,				do_reset_settings		; Reset all settings
+	MENU_END
 
 do_reset_menu5:
-    MENU_BEGIN  tResetMenu2, .2
-        MENU_CALL       tAbort,			do_continue_menu_3stack
-        MENU_CALL       tResetLogbook,	do_reset_logbook		; Reset logbook
-    MENU_END
+	MENU_BEGIN	tResetMenu2, .2
+		MENU_CALL		tAbort,						do_return_settings_more_deeper
+		MENU_CALL		tResetLogbook,				do_reset_logbook		; Reset logbook
+	MENU_END
+
 
 do_reset_logbook:
-	clrf    EEADRH                      ; Make sure to select eeprom bank 0
+	clrf	EEADRH						; Make sure to select EEPROM bank 0
+	clrf	EEDATA
+	read_int_eeprom  .2
+	write_int_eeprom .16
+	read_int_eeprom  .3
+	write_int_eeprom .17				; Copy number of dives
 	clrf	EEDATA
-    read_int_eeprom     .2
-    write_int_eeprom    .16
-    read_int_eeprom     .3
-    write_int_eeprom    .17             ; Copy number of dives
-    clrf	EEDATA
-    write_int_eeprom    .2
-    write_int_eeprom    .3              ; Clear total dives
-	write_int_eeprom	.4
-	write_int_eeprom	.5
-	write_int_eeprom	.6              ; Reset logbook pointers
+	write_int_eeprom .2
+	write_int_eeprom .3					; Clear total dives
+	write_int_eeprom .4
+	write_int_eeprom .5
+	write_int_eeprom .6					; Reset logbook pointers
 	call	ext_flash_erase_logbook		; And complete logbook (!)
-    goto	do_continue_main_menu		; back to menu
+
+	goto	do_return_settings_more_deeper
 
 
 do_reset_deco:
 	SAFE_2BYTE_COPY last_surfpressure_30min,int_I_pres_respiration	; copy surface pressure to deco routine
 	SAFE_2BYTE_COPY last_surfpressure_30min,int_I_pres_surface		; copy surface pressure to deco routine
-	
-    call    deco_clear_tissue       		; set all tissues to Pamb * N2_ratio (C-Code)
-    banksel common							; back to bank 1, needed after every return from C code
-	
-	call	deco_calc_wo_deco_step_1_min	; calculate deco in surface mode
-	call	deco_calc_desaturation_time		; calculate desaturation and no-fly time
-	banksel	common	
-	
-	goto	do_return_settings				; back to menu
+
+	call	deco_clear_tissue			; set all tissues to Pamb * N2_ratio (C-Code)
+	call	deco_calc_dive_interval_1min; calculate deco in surface mode
+	call	deco_calc_desaturation_time	; calculate desaturation and no-fly time
+	banksel	common
+
+	goto	do_return_settings_more_deeper
+
 
 do_reset_settings:
-    call		TFT_ClearScreen				; Clear screen    
-    banksel common
-	extern	option_reset_all
-    call	option_reset_all				; Reset all options to factory default.
-	goto	restart							; Restart into surfacemode
-
-do_continue_menu_3stack:					; Return three levels deep
-    call    menu_processor_pop
-	goto	do_return_settings
+	call	TFT_ClearScreen				; Clear screen
+	banksel	common						; (probably not needed)
+	call	option_reset_all			; Reset all options to factory default.
+	goto	restart						; Restart into surfacemode
 
 do_reboot:
-	call	ext_flash_enable_protection		; Enables write protection
+	call	ext_flash_enable_protection	; Enables write protection
 	reset
 
 
 do_date_time_menu:
-    MENU_BEGIN  tSetTimeDate, .4
-        MENU_CALL	tSetTime,               do_time_menu
-        MENU_CALL   tSetDate,	            do_date_menu
-		MENU_OPTION tDateFormat,oDateFormat,    0
-        MENU_CALL   tExit,                  do_return_settings
-    MENU_END
+	MENU_BEGIN	tSetTimeDate, .4
+		MENU_CALL		tSetTime,					do_time_menu
+		MENU_CALL		tSetDate,					do_date_menu
+		MENU_OPTION		tDateFormat,oDateFormat,	0
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
+
 
 do_date_menu:
 	bsf		settime_setdate
-    MENU_BEGIN  tSetDate, .4
-        MENU_OPTION tSetDay,	oSetDay,		0
-		MENU_OPTION	tSetMonth,	oSetMonth,  	0
-        MENU_OPTION tSetYear,	oSetYear,		0
-        MENU_CALL   tExit,					do_continue_menu_3stack
-    MENU_END
+
+	MENU_BEGIN	tSetDate, .4
+		MENU_OPTION		tSetDay,					oSetDay,				0
+		MENU_OPTION		tSetMonth,					oSetMonth,				0
+		MENU_OPTION		tSetYear,					oSetYear,				0
+		MENU_CALL		tExit,						do_return_settings_deeper
+	MENU_END
 
 
 do_reset_seconds:
 	clrf	secs
-	extern	rtc_set_rtc
-	call	rtc_set_rtc			; writes mins,sec,hours,day,month and year to rtc module
+	call	rtc_set_rtc					; writes mins, sec, hours, day, month and year to RTC module
+	call	menu_processor_pop			; clear the MENU_CALL for do_reset_seconds from the stack
+	;bra	do_time_menu				; direct jump-back into the menu
+
 do_time_menu:
 	bsf		settime_setdate
-    MENU_BEGIN  tSetTime, .4
-        MENU_OPTION tSetHours,	oSetHours,		0
-		MENU_OPTION	tSetMinutes,oSetMinutes,	0
-		MENU_CALL   tSetSeconds,                do_reset_seconds
-        MENU_CALL   tExit,                      do_continue_menu_3stack
-    MENU_END
+
+	MENU_BEGIN	tSetTime, .4
+		MENU_OPTION		tSetHours,					oSetHours,				0
+		MENU_OPTION		tSetMinutes,				oSetMinutes,			0
+		MENU_CALL		tSetSeconds,				do_reset_seconds
+		MENU_CALL		tExit,						do_return_settings_deeper
+	MENU_END
 
 
-do_toggle_ppo2_max:				; add 0.1bar, with hard-coded max.
-    movff   char_I_ppO2_max,lo	; banksafe
-    movlw	.10
+do_toggle_ppo2_max:						; add 0.1bar, with hard-coded max.
+	movff	char_I_ppO2_max,lo			; banksafe
+	movlw	.10
 	addwf	lo,F
-	movlw	ppo2_highest_setting
+	movlw	ppo2_warning_high_highest
 	cpfsgt	lo
-    bra     do_toggle_ppo2_max2
-	movlw	.120
+	bra		do_toggle_ppo2_max2
+	movlw	ppo2_warning_high_lowest
 	movwf	lo
 do_toggle_ppo2_max2:
-    movff   lo,char_I_ppO2_max
-    return
+	movff	lo,char_I_ppO2_max
+	return
 
-do_toggle_ppo2_max_deco:		 ; add 0.1bar, with hard-coded max.
-    movff   char_I_ppO2_max_deco,lo ; banksafe
-    movlw	.10
+do_toggle_ppo2_max_deco:				; add 0.1bar, with hard-coded max.
+	movff	char_I_ppO2_max_deco,lo		; banksafe
+	movlw	.10
 	addwf	lo,F
-	movlw	ppo2_highest_setting_deco
+	movlw	ppo2_warning_deco_highest
 	cpfsgt	lo
-    bra     do_toggle_ppo2_max_deco2
-	movlw	.120
+	bra		do_toggle_ppo2_max_deco2
+	movlw	ppo2_warning_deco_lowest
 	movwf	lo
 do_toggle_ppo2_max_deco2:
-    movff   lo,char_I_ppO2_max_deco
-    return
-    
-do_toggle_ppo2_min:             ; sub 0.1bar, with hard-coded min.
-    movff   char_I_ppO2_min,lo     ; banksafe
-    incf    lo,F
-	movlw	.21
+	movff	lo,char_I_ppO2_max_deco
+	return
+
+do_toggle_ppo2_min:						; sub 0.1bar, with hard-coded min.
+	movff	char_I_ppO2_min,lo			; banksafe
+	incf	lo,F
+	movlw	ppo2_warning_low_highest
 	cpfsgt	lo
-    bra     do_toggle_ppo2_min2
-	movlw	ppo2_lowest_setting
+	bra		do_toggle_ppo2_min2
+	movlw	ppo2_warning_low_lowest
 	movwf	lo
 do_toggle_ppo2_min2:
-    movff   lo,char_I_ppO2_min
-    return
+	movff	lo,char_I_ppO2_min
+	return
 
-do_toggle_ppo2_min_cc:			; sub 0.1bar, with hard-coded min.
-    movff   char_I_ppO2_min_loop,lo	; banksafe
-    incf    lo,F
-	movlw	ppo2_warning_low_cc_max
+do_toggle_ppo2_min_cc:					; sub 0.1bar, with hard-coded min.
+	movff	char_I_ppO2_min_loop,lo		; banksafe
+	incf	lo,F
+	movlw	ppo2_warning_loop_highest
 	cpfsgt	lo
-    bra     do_toggle_ppo2_min_cc2
-	movlw	ppo2_warning_low_cc_min
+	bra		do_toggle_ppo2_min_cc2
+	movlw	ppo2_warning_loop_lowest
 	movwf	lo
 do_toggle_ppo2_min_cc2:
-    movff   lo,char_I_ppO2_min_loop
-    return
-	
+	movff	lo,char_I_ppO2_min_loop
+	return
+
 
 	; Logbook offset sub-menu
 do_log_offset_menu:
-	MENU_BEGIN  tLogOffset, .6
-        MENU_DYNAMIC    TFT_LogOffset_Logtitle,      0
-		MENU_CALL       tLogOffsetp1,				do_logoffset_plus1
-		MENU_CALL       tLogOffsetp10,				do_logoffset_plus10
-		MENU_CALL       tLogOffsetm1,				do_logoffset_minus1
-		MENU_CALL       tLogOffsetm10,				do_logoffset_minus10
-        MENU_CALL       tExit,                  	do_return_settings_more
-    MENU_END
+	MENU_BEGIN	tLogOffset, .6
+		MENU_DYNAMIC	TFT_LogOffset_Logtitle,		0
+		MENU_CALL		tLogOffsetp1,				do_logoffset_plus1
+		MENU_CALL		tLogOffsetp10,				do_logoffset_plus10
+		MENU_CALL		tLogOffsetm1,				do_logoffset_minus1
+		MENU_CALL		tLogOffsetm10,				do_logoffset_minus10
+		MENU_CALL		tExit,						do_return_settings_more
+	MENU_END
 
 
 do_logoffset_minus1:
-	call	do_logoffset_common_read			; Read into lo:hi
-	movlw	d'1'
+	call	do_logoffset_common_read	; Read into lo:hi
+	movlw	.1
 	subwf	lo
-	movlw	d'0'
+	movlw	.0
 	subwfb	hi
-	btfss	hi,7								; <0?
-	goto	do_logoffset_common_write			; Store and return
+	btfss	hi,7						; <0?
+	goto	do_logoffset_common_write	; Store and return
 	clrf	lo
 	clrf	hi
-	goto	do_logoffset_common_write			; Store and return
+	goto	do_logoffset_common_write	; Store and return
 
 do_logoffset_minus10:
-	call	do_logoffset_common_read			; Read into lo:hi
-	movlw	d'10'
+	call	do_logoffset_common_read	; Read into lo:hi
+	movlw	.10
 	subwf	lo
-	movlw	d'0'
+	movlw	.0
 	subwfb	hi
-	btfss	hi,7								; <0?
-	goto	do_logoffset_common_write			; Store and return
+	btfss	hi,7						; <0?
+	goto	do_logoffset_common_write	; Store and return
 	clrf	lo
 	clrf	hi
-	goto	do_logoffset_common_write			; Store and return
+	goto	do_logoffset_common_write	; Store and return
 
 do_logoffset_plus1:
-	call	do_logoffset_common_read			; Read into lo:hi
-    infsnz  lo,F
-    incf    hi,F
-	goto	do_logoffset_common_write			; Store and return
+	call	do_logoffset_common_read	; Read into lo:hi
+	infsnz	lo,F
+	incf	hi,F
+	goto	do_logoffset_common_write	; Store and return
 
 do_logoffset_plus10:
-	call	do_logoffset_common_read			; Read into lo:hi
-	movlw	d'10'
+	call	do_logoffset_common_read	; Read into lo:hi
+	movlw	.10
 	addwf	lo
-	movlw	d'0'
+	movlw	.0
 	addwfc	hi
-	goto	do_logoffset_common_write			; Store and return
+	goto	do_logoffset_common_write	; Store and return
 
-do_dispsets_menu_3stack:
-    bcf		in_color_menu
-    call	menu_tree_double_pop	; drop exit line and back to last line
+do_return_dispsets_menu:
+	bcf		in_color_menu
+	call	menu_processor_double_pop	; drop exit line and back to last line
 
 do_dispsets_menu:
-	MENU_BEGIN  tDispSets, .5
-        MENU_OPTION tBright,       oBrightness,   0
-        MENU_CALL   tColorScheme,                 do_color_scheme
-        MENU_OPTION tFlip,         oFlipScreen,   0
-        MENU_CALL   tMore,                        do_dispsets_menu_more
-        MENU_CALL   tExit,                        do_return_settings
-    MENU_END
+	MENU_BEGIN	tDispSets, .5
+		MENU_OPTION		tBright,					oBrightness,			0
+		MENU_CALL		tColorScheme,				do_color_scheme
+		MENU_OPTION		tFlip,						oFlipScreen,			0
+		MENU_CALL		tMore,						do_dispsets_menu_more
+		MENU_CALL		tExit,						do_return_settings
+	MENU_END
+
 
 do_dispsets_menu_more:
-    MENU_BEGIN  tDispSets, .6
-        MENU_OPTION tMODwarning,   oMODwarning,   	0
-		MENU_OPTION tIBCDwarning,  oEnable_IBCD,	0
-        MENU_OPTION tVSItext2,     oVSItextv2,    	0
-        MENU_OPTION tVSIgraph,     oVSIgraph,     	0
-		MENU_OPTION tTimeoutDive,  oDiveTimeout,  	0
-        MENU_CALL   tExit,                        do_dispsets_menu_3stack
-    MENU_END
+	MENU_BEGIN	tDispSets, .7
+		MENU_OPTION		tMODwarning,				oMODwarning,			0
+		MENU_OPTION		tIBCDwarning,				oEnable_IBCD,			0
+		MENU_OPTION		tVSItext2,					oVSItextv2,				0
+		MENU_OPTION		tVSIgraph,					oVSIgraph,				0
+		MENU_OPTION		tTimeoutDive,				oDiveTimeout,			0
+		MENU_OPTION		tUnits,						oUnits,					0
+		MENU_CALL		tExit,						do_return_dispsets_menu
+	MENU_END
 
-    extern  oColorSetDive
+
 do_color_scheme:
-    bsf		in_color_menu
-	MENU_BEGIN  tColorScheme, .2
-        MENU_OPTION     tColorSetDive,oColorSetDive,  0
-        MENU_CALL       tExit,                  	do_dispsets_menu_3stack
-    MENU_END
+	bsf		in_color_menu
+
+	MENU_BEGIN	tColorScheme, .2
+		MENU_OPTION		tColorSetDive,				oColorSetDive,			0
+		MENU_CALL		tExit,						do_return_dispsets_menu
+	MENU_END
 
 
 ;=============================================================================
 
-	global	new_battery_menu
-	extern	surfloop
-new_battery_menu:
-    bsf     enable_screen_dumps     ; To prevent exiting into COMM mode immediately
-	call	TFT_boot                ; Initialize TFT (includes clear screen)
-	call    TFT_Display_FadeIn      ; Show splash
-    movlw   .100
-    movwf   batt_percent            ; make sure to reset batt_percent
-    
-    ; Default (In cases of timeout or USB): Use old battery
+do_new_battery_menu:
+	MENU_BEGIN	tNewBattTitle, .2
+		MENU_CALL		tAbort,						do_return_settings_more_deeper
+		MENU_CALL		tYes,						do_new_battery_select
+	MENU_END
+
+	global	do_new_battery_select
+do_new_battery_select:
+	bsf		enable_screen_dumps			; To prevent exiting into COMM mode immediately
+	call	TFT_boot					; Initialize TFT (includes clear screen)
+	call	TFT_Display_FadeIn			; Show splash
+	movlw	.100
+	movwf	batt_percent				; make sure to reset batt_percent
+
+	; Default (In cases of timeout or USB): Use old battery
 	clrf	EEADRH
 	read_int_eeprom 0x07
 	movff	EEDATA,battery_gauge+0
@@ -767,85 +814,84 @@
 	read_int_eeprom 0x0C
 	movff	EEDATA,battery_gauge+5
 
-	call    menu_processor_reset    ; restart from first icon.
- 
-	MENU_BEGIN tNewBattTitle, .1
-		MENU_CALL   tEnter, new_battery_menu2
-        MENU_END
-	
-new_battery_menu2:
-    ; hardware_flag:
-    ; 3: 0x0A or 0x13 (2016)
-    ; cR: 0x05
-    ; 2 with BLE: 0x11
-    ; Sport: 0x12
-    ; 3 with BLE: 0x1A 
+	call	menu_processor_reset		; restart from first icon.
+
+	; hardware_flag:
+	; 3: 0x0A or 0x13 (2016)
+	; cR: 0x05
+	; 2 with BLE: 0x11
+	; Sport: 0x12
+	; 3 with BLE: 0x1A 
 
-    movlw   0x0A
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_AA
-    movlw   0x13
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_AA_16650
-    movlw   0x12
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_AA
-    movlw   0x1A
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_AA
-    movlw   0x11
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_18650
-    movlw   0x05
-    cpfseq  hardware_flag
-    bra	    $+4
-    bra	    menu_new_battery_18650
-    bra	    use_old_batteries		; any unsupported value
-    
+	movlw	0x0A
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_AA
+	movlw	0x13
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_AA_16650
+	movlw	0x12
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_AA
+	movlw	0x1A
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_AA
+	movlw	0x11
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_18650
+	movlw	0x05
+	cpfseq	hardware_flag
+	bra		$+4
+	bra		menu_new_battery_18650
+	bra		use_old_batteries			; any unsupported value
+
+
 menu_new_battery_AA_16650:
-    MENU_BEGIN tNewBattTitle, .5
-		MENU_CALL   tNewBattOld,		use_old_batteries
-		MENU_CALL   tNewBattNew36,		use_new_36V_batteries
-		MENU_CALL   tNewBattNew15,		use_new_15V_batteries
-		MENU_CALL   tNewBattAccu,		use_36V_rechargeable
-		MENU_CALL   tNew16650,			use_16650_battery
-    MENU_END
-    
+	MENU_BEGIN	tNewBattTitle, .5
+		MENU_CALL		tNewBattOld,				use_old_batteries
+		MENU_CALL		tNewBattNew36,				use_new_36V_batteries
+		MENU_CALL		tNewBattNew15,				use_new_15V_batteries
+		MENU_CALL		tNewBattAccu,				use_36V_rechargeable
+		MENU_CALL		tNew16650,					use_16650_battery
+	MENU_END
+
+
 menu_new_battery_AA:
-    MENU_BEGIN tNewBattTitle, .4
-		MENU_CALL   tNewBattOld,		use_old_batteries
-		MENU_CALL   tNewBattNew36,		use_new_36V_batteries
-		MENU_CALL   tNewBattNew15,		use_new_15V_batteries
-		MENU_CALL   tNewBattAccu,		use_36V_rechargeable
-    MENU_END
+	MENU_BEGIN	tNewBattTitle, .4
+		MENU_CALL		tNewBattOld,				use_old_batteries
+		MENU_CALL		tNewBattNew36,				use_new_36V_batteries
+		MENU_CALL		tNewBattNew15,				use_new_15V_batteries
+		MENU_CALL		tNewBattAccu,				use_36V_rechargeable
+	MENU_END
+
 
 menu_new_battery_18650:
-    MENU_BEGIN tNewBattTitle, .2
-		MENU_CALL   tNewBattOld,		use_old_batteries
-		MENU_CALL   tNew18650,			use_18650_battery
-    MENU_END
+	MENU_BEGIN	tNewBattTitle, .2
+		MENU_CALL		tNewBattOld,				use_old_batteries
+		MENU_CALL		tNew18650,					use_18650_battery
+	MENU_END
 
-    
+
 	global	use_old_prior_209
 use_old_prior_209:
 	clrf	EEADRH
-	read_int_eeprom 0x0F	    	; =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
-	incfsz	EEDATA,F	    		; Was 0xFF?
-	return			    			; No, done.
+	read_int_eeprom 0x0F				; =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
+	incfsz	EEDATA,F					; Was 0xFF?
+	return								; No, done.
 
-	call    lt2942_get_status   	; Check for gauge IC
-	movlw   .3						; Assume a 18650
-	btfss   battery_gauge_available ; cR/2 hardware?
-	movlw   .1						; Assume a Saft
-        movwf	EEDATA
-	write_int_eeprom 0x0F			; Store the new battery type into EEPROM
+	call	lt2942_get_status			; Check for gauge IC
+	movlw	.3							; Assume a 18650
+	btfss	battery_gauge_available		; cR/2 hardware?
+	movlw	.1							; Assume a Saft
+	movwf	EEDATA
+	write_int_eeprom 0x0F				; Store the new battery type into EEPROM
 	return
-	
+
+
 	global	use_old_batteries
 use_old_batteries:
 	clrf	EEADRH
@@ -862,130 +908,136 @@
 	read_int_eeprom 0x0C
 	movff	EEDATA,battery_gauge+5
 	read_int_eeprom 0x0F
-	movff	EEDATA,battery_type	; =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
+	movff	EEDATA,battery_type			; =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
 
-	rcall	setup_new_saft	    ; Any other value
-	incf	EEDATA,F	    	; 1 ... 5
+	rcall	setup_new_saft				; Any other value
+	incf	EEDATA,F					; 1 ... 5
 	dcfsnz	EEDATA,F
-	rcall	setup_new_15v	    ;=0
+	rcall	setup_new_15v				;=0
 	dcfsnz	EEDATA,F
-	rcall	setup_new_saft	    ;=1
+	rcall	setup_new_saft				;=1
 	dcfsnz	EEDATA,F
-	rcall	setup_new_panasonic ;=2
-	dcfsnz	EEDATA,F		   
-	rcall	setup_new_18650	    ;=3
-	dcfsnz	EEDATA,F		   
-	rcall	setup_new_16650	    ;=4
-	
-	bcf	use_old_batt_flag		; clear flag
-	goto	surfloop			; Jump to Surfaceloop!
+	rcall	setup_new_panasonic			;=2
+	dcfsnz	EEDATA,F
+	rcall	setup_new_18650				;=3
+	dcfsnz	EEDATA,F
+	rcall	setup_new_16650				;=4
+
+	bcf		use_old_batt_flag			; clear flag
+	goto	surfloop					; Jump to Surfaceloop!
+
 
 setup_new_15v:
-    bsf	    charge_disable
-    bcf	    TRISE,2
-    movlw   .100
-    movwf   batt_percent		; To have 1,5V batteries right after firmware update
-    movlw   .0
-    movff   WREG,battery_type
-    return
-    
+	bsf		charge_disable
+	bcf		TRISE,2
+	movlw	.100
+	movwf	batt_percent				; To have 1,5V batteries right after firmware update
+	movlw	.0
+	movff	WREG,battery_type
+	return
+
+
 setup_new_saft:
-    banksel battery_capacity
-    movlw   LOW	    internal_saft_capacity
-    movwf   internal_battery_capacity+0
-    movlw   HIGH    internal_saft_capacity
-    movwf   internal_battery_capacity+1
-    movlw   LOW	    saft_capacity
-    movwf   battery_capacity+0
-    movlw   HIGH    saft_capacity
-    movwf   battery_capacity+1
-    movlw   LOW	    saft_offset
-    movwf   battery_offset+0
-    movlw   HIGH    saft_offset
-    movwf   battery_offset+1
-    banksel common
-    bsf	    charge_disable
-    bcf	    TRISE,2
-    movlw   .1
-    movff   WREG,battery_type
-    return
+	banksel	battery_capacity
+	movlw	LOW		internal_saft_capacity
+	movwf	internal_battery_capacity+0
+	movlw	HIGH	internal_saft_capacity
+	movwf	internal_battery_capacity+1
+	movlw	LOW		saft_capacity
+	movwf	battery_capacity+0
+	movlw	HIGH	saft_capacity
+	movwf	battery_capacity+1
+	movlw	LOW		saft_offset
+	movwf	battery_offset+0
+	movlw	HIGH	saft_offset
+	movwf	battery_offset+1
+	banksel	common
+	bsf		charge_disable
+	bcf		TRISE,2
+	movlw	.1
+	movff	WREG,battery_type
+	return
+
 
-setup_new_panasonic:    
-    banksel battery_capacity
-    movlw   LOW	    internal_panasonic_capacity
-    movwf   internal_battery_capacity+0
-    movlw   HIGH    internal_panasonic_capacity
-    movwf   internal_battery_capacity+1
-    movlw   LOW	    panasonic_capacity
-    movwf   battery_capacity+0
-    movlw   HIGH    panasonic_capacity
-    movwf   battery_capacity+1
-    movlw   LOW	    panasonic_offset
-    movwf   battery_offset+0
-    movlw   HIGH    panasonic_offset
-    movwf   battery_offset+1
-    banksel common
-    bcf	    charge_disable
-    bsf	    TRISE,2
-    movlw   .2
-    movff   WREG,battery_type
-    return    
+setup_new_panasonic:
+	banksel battery_capacity
+	movlw	LOW		internal_panasonic_capacity
+	movwf	internal_battery_capacity+0
+	movlw	HIGH	internal_panasonic_capacity
+	movwf	internal_battery_capacity+1
+	movlw	LOW		panasonic_capacity
+	movwf	battery_capacity+0
+	movlw	HIGH	panasonic_capacity
+	movwf	battery_capacity+1
+	movlw	LOW		panasonic_offset
+	movwf	battery_offset+0
+	movlw	HIGH	panasonic_offset
+	movwf	battery_offset+1
+	banksel	common
+	bcf		charge_disable
+	bsf		TRISE,2
+	movlw	.2
+	movff	WREG,battery_type
+	return
 
-setup_new_18650:    
-    banksel battery_capacity
-    clrf    internal_battery_capacity+0
-    clrf    internal_battery_capacity+1
-    movlw   LOW	    ncr18650_capacity
-    movwf   battery_capacity+0
-    movlw   HIGH    ncr18650_capacity
-    movwf   battery_capacity+1
-    movlw   LOW	    ncr18650_offset
-    movwf   battery_offset+0
-    movlw   HIGH    ncr18650_offset
-    movwf   battery_offset+1
-    banksel common
-    bcf	    charge_disable
-    bsf	    TRISE,2
-    movlw   .3
-    movff   WREG,battery_type
-    return
+
+setup_new_18650:
+	banksel	battery_capacity
+	clrf	internal_battery_capacity+0
+	clrf	internal_battery_capacity+1
+	movlw	LOW		ncr18650_capacity
+	movwf	battery_capacity+0
+	movlw	HIGH	ncr18650_capacity
+	movwf	battery_capacity+1
+	movlw	LOW		ncr18650_offset
+	movwf	battery_offset+0
+	movlw	HIGH	ncr18650_offset
+	movwf	battery_offset+1
+	banksel	common
+	bcf		charge_disable
+	bsf		TRISE,2
+	movlw	.3
+	movff	WREG,battery_type
+	return
+
 
 setup_new_16650:
-    banksel battery_capacity
-    clrf    internal_battery_capacity+0
-    clrf    internal_battery_capacity+1
-    movlw   LOW	    ur16650_capacity
-    movwf   battery_capacity+0
-    movlw   HIGH    ur16650_capacity
-    movwf   battery_capacity+1
-    movlw   LOW	    ur16650_offset
-    movwf   battery_offset+0
-    movlw   HIGH    ur16650_offset
-    movwf   battery_offset+1
-    banksel common
-    bcf	    charge_disable
-    bsf	    TRISE,2
-    movlw   .4
-    movff   WREG,battery_type
-    return
+	banksel	battery_capacity
+	clrf	internal_battery_capacity+0
+	clrf	internal_battery_capacity+1
+	movlw	LOW		ur16650_capacity
+	movwf	battery_capacity+0
+	movlw	HIGH	ur16650_capacity
+	movwf	battery_capacity+1
+	movlw	LOW		ur16650_offset
+	movwf	battery_offset+0
+	movlw	HIGH	ur16650_offset
+	movwf	battery_offset+1
+	banksel	common
+	bcf		charge_disable
+	bsf		TRISE,2
+	movlw	.4
+	movff	WREG,battery_type
+	return
+
 
 use_16650_battery:
-    rcall   setup_new_16650
-    bra	    use_new_36V_2
+	rcall	setup_new_16650
+	bra		use_new_36V_2
 use_18650_battery:
-    rcall   setup_new_18650
-    bra	    use_new_36V_2
+	rcall	setup_new_18650
+	bra		use_new_36V_2
 use_new_36V_batteries:
-    rcall   setup_new_saft
-    bra	    use_new_36V_2
+	rcall	setup_new_saft
+	bra		use_new_36V_2
 use_new_15V_batteries:
-    rcall   setup_new_15v
+	rcall	setup_new_15v
 use_new_36V_2:
-    call    reset_battery_pointer	; Resets battery pointer 0x07-0x0C and battery_gauge:5
-    goto    surfloop				; Jump to Surface loop!
+	call	reset_battery_pointer		; Resets battery pointer 0x07-0x0C and battery_gauge:5
+	goto	surfloop					; Jump to Surface loop!
 use_36V_rechargeable:
-    rcall   setup_new_panasonic
-    call    reset_battery_internal_only
-    goto    surfloop				; Jump to Surface loop!
+	rcall	setup_new_panasonic
+	call	reset_battery_internal_only
+	goto	surfloop					; Jump to Surface loop!
 
-    END
\ No newline at end of file
+	END
\ No newline at end of file