diff src/menu_processor.asm @ 582:b455b31ce022

work on 2.97 stable
author heinrichsweikamp
date Mon, 26 Feb 2018 16:40:28 +0100
parents b7eb98dbd800
children ca4556fb60b9
line wrap: on
line diff
--- a/src/menu_processor.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/menu_processor.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File menu_processor.asm							REFACTORED VERSION V2.91
+;   File menu_processor.asm							REFACTORED VERSION V2.98
 ;
 ;   Routines to handle all hwOS graphic/text menus.
 ;
@@ -8,7 +8,7 @@
 ;=============================================================================
 ; HISTORY
 ;   2012-11-02 : [jDG] Cleanup for hwOS: removed icons. Added scrolling.
-;                      But need a font with lower/upper alpha chars...
+;                But need a font with lower/upper alpha chars...
 
 #include "convert.inc"
 #include "hwos.inc"
@@ -24,205 +24,187 @@
 #include "adc_lightsensor.inc"
 
 
-;NOTE: should be identic in .inc and .asm !
-#define MENU_LINES_MAX  .7              ; Number of lines per screen?
-#define MENU_TITLE_FONT WIN_STD         ; Font should contains lower/UPPER alpha
-#define MENU_LINE_FONT  WIN_SMALL       ; Font should contains lower/UPPER alpha
-#define MENU_LEFT       .20             ; Position of first menu item
-#define MENU_HEIGHT     .27             ; Spacing between menu lines.
-#define MENU_VCENTER    .125            ; Position on screen.
-#define MENU_LINE_MAX_LENGTH    .20     ; Length in characters
+;NOTE: should be identical in .inc and .asm !
+#define MENU_LINES_MAX			.7			; Number of lines per screen?
+#define MENU_TITLE_FONT			WIN_STD		; Font should contains lower/UPPER alpha
+#define MENU_LINE_FONT			WIN_SMALL	; Font should contains lower/UPPER alpha
+#define MENU_LEFT				.20			; Position of first menu item
+#define MENU_HEIGHT				.27			; Spacing between menu lines.
+#define MENU_VCENTER			.125		; Position on screen.
+#define MENU_LINE_MAX_LENGTH	.20			; Length in characters
+#define option_item				proc_item
 
 ; Other needed references
-    extern  aa_wordprocessor,option_inc,option_draw,comm_mode
+	extern	aa_wordprocessor
+	extern	option_inc
+	extern	option_draw
+	extern	comm_mode
+	extern	TFT_clear_divemode_menu
+	extern	TFT_divemask_color
+	extern	rtc_set_rtc
+	extern	divemode_option0_return
+	extern	TFT_fillup_with_spaces
 
 
-;=============================================================================
-; Temporary data.
+basic	CODE
 
-        CBLOCK  tmp+0x20                ; Reserved space for options.asm
-            menu_flags                  ; Various flags for menu:
-                                        ;   bit 0 :dynamic menu
-            menu_item                   ; Index of the current item.
-            start_item                  ; Index of the first item (scrolling)
-            item_max                    ; Number of items in menu.
-            selected_item               ; Index of the current item.
-            value_type                  ; Type for vertical menu.
-            dynamic_item:3              ; Callback addr
-            menu_block:3                ; Address of the menu block (ie. item 0)
-            menu_title:3                ; text or proc for dynamic menu.
-            menu_center                 ; centering for line menu.
-            proc_item:3                 ; Address of the current proc.
-            text_item:2                 ; Address of the current text.
-        ; Reserved to tmp+0x35
-        ENDC
-
-#define option_item proc_item
-
-basic       CODE
 ;=============================================================================
 ; menu handler.
 ;
 ; Input:    TBLPTR = addr of menu block.
-        global  menu_processor
+	global	menu_processor
 menu_processor:
-        banksel common                  ; Bank1
-        btfss   divemode                ; Not in divemode
-        call    speed_fastest           ; Make it quick !
-		
-		;---- Read menu block ------------------------------------------------
-        VARARGS_BEGIN                   ; Read inline PROM data
-		clrf	STKPTR                  ; Never return, anyway...
-        VARARGS_GET8    item_max        ; Get number of items
-        VARARGS_GET8    menu_flags      ; Get flags
-        VARARGS_GET24   menu_title      ; Get pointer to menu title
-        VARARGS_GET8    menu_center     ; Vertical position
-        movff   TBLPTRL, menu_block+0   ; Save base address for menu_read_item
-        movff   TBLPTRH, menu_block+1
-        movff   TBLPTRU, menu_block+2
+	banksel	common							; Bank1
+	btfss	divemode						; Not in divemode
+	call	speed_fastest					; Make it quick !
+	;---- Read menu block ------------------------------------------------
+	VARARGS_BEGIN							; Read inline PROM data
+	clrf	STKPTR							; Never return, anyway...
+	VARARGS_GET8	item_max				; Get number of items
+	VARARGS_GET8	menu_flags				; Get flags
+	VARARGS_GET24	menu_title				; Get pointer to menu title
+	VARARGS_GET8	menu_center				; Vertical position
+	movff	TBLPTRL, menu_block+0			; Save base address for menu_read_item
+	movff	TBLPTRH, menu_block+1
+	movff	TBLPTRU, menu_block+2
+	btfss	divemode						; In divemode?
+	bra		menu_processor0					; No
+	; Required for menus with less entries then the calling menu but not so nice when setting up gas 6.... mH
+	movlw	.1
+	cpfsgt	menupos1						; only if menupos1 = 1...
+	call	TFT_clear_divemode_menu			; ... Clear the menu!
+	; Draw one frame around the divemode menu
+	call	TFT_divemask_color
+	WIN_FRAME_COLOR16 dm_menu_row, dm_menu_lower, dm_menu_left ,dm_menu_right	; top, bottom, left, right
+	call	TFT_standard_color
 
-        btfss   divemode                ; In divemode?
-        bra     menu_processor0         ; No
-
-	; Required for menus with less entries then the calling menu but not so nice when setting up gas 6.... mH
-	extern  TFT_clear_divemode_menu
-        movlw   .1
-        cpfsgt  menupos                 ; only if menupos=1...
-        call    TFT_clear_divemode_menu ; ... Clear the menu!
-
-        ; Draw one frame around the divemode menu
-        extern  TFT_divemask_color
-        call    TFT_divemask_color
-    	WIN_FRAME_COLOR16 dm_menu_row, dm_menu_lower, dm_menu_left ,dm_menu_right	; top, bottom, left, right
-        call    TFT_standard_color
-
-        bra     menu_processor1         ; Yes, skip some lines here
+	bra		menu_processor1					; Yes, skip some lines here
 
 menu_processor0:
-        ;---- draw menu title ------------------------------------------------
-		clrf	CCP1CON					; stop PWM
-		bcf		PORTC,2					; Pull PWM out to GND
-		call    TFT_ClearScreen
-        rcall   menu_processor_title
-        rcall   menu_processor_bottom_line
+	;---- draw menu title ------------------------------------------------
+	clrf	CCP1CON							; stop PWM
+	bcf		PORTC,2							; Pull PWM out to GND
+	call	TFT_ClearScreen
+	rcall	menu_processor_title
+	rcall	menu_processor_bottom_line
 
 menu_processor1:
-		movlw	FT_SMALL
-        movff	WREG, win_font    
-        
-        ;---- Select menu type -----------------------------------------------
-        bra     menu_vertical
+	movlw	FT_SMALL
+	movff	WREG, win_font
 
-    global menu_processor_bottom_line
-menu_processor_bottom_line:
-        ;---- Draw bottomline ------------------------------------------------
-        TEXT_TINY 	.5,       .240-.16, tNext
-        TEXT_TINY	.160-.6*.6, .240-.16, tEnter
+	;---- Select menu type -----------------------------------------------
+	bra		menu_vertical
 
-        WIN_COLOR   color_greenish
-        ; Serial and Firmware Version
-        WIN_TINY	.57,.240-.16
-        STRCPY  "#"
-        call    TFT_cat_serial
-        STRCAT  " v"
-        call    TFT_cat_firmware
-        STRCAT_PRINT ""
-        call    TFT_standard_color
-		bcf		win_invert
-        return
+	global	menu_processor_bottom_line
+menu_processor_bottom_line:
+	;---- Draw bottom line -----------------------------------------------
+	TEXT_TINY .5,         .240-.16, tNext
+	TEXT_TINY .160-.6*.6, .240-.16, tEnter
+	WIN_COLOR color_greenish
+	; Serial and Firmware Version
+	WIN_TINY .57,.240-.16
+	STRCPY	"#"
+	call	TFT_cat_serial
+	STRCAT	" v"
+	call	TFT_cat_firmware
+	STRCAT_PRINT ""
+	call	TFT_standard_color
+	bcf		win_invert
+	return
 
 ;=============================================================================
 ; (re-)draw menu title.
 ;
-menu_processor_title:        
-        WIN_BOX_BLACK  .2,.23,.0,.159	; Clear Menu title
-        MENU_TITLE_FONT	.0, .2        	; Menu title positionning
-
-        btfss   menu_flags,0            ; Static or dynmic title ?
-        bra     menu_processor_static_title
+menu_processor_title:
+	WIN_BOX_BLACK   .2,.23,.0,.159			; Clear Menu title
+	MENU_TITLE_FONT .0, .2					; Menu title positioning
+	btfss	menu_flags,0					; Static or dynamic title ?
+	bra		menu_processor_static_title
+	rcall	menu_processor_call_title		; add gas, detail and color.
+	bra		menu_processor_title_1
 
-        rcall   menu_processor_call_title ; add gas, detail and color.
-        bra     menu_processor_title_1
-
-menu_processor_static_title:                
-        movff   menu_title+0,FSR1L      ; Just copy string.
-        movff   menu_title+1,FSR1H
-        call    strcpy_text
+menu_processor_static_title:
+	movff	menu_title+0,FSR1L				; Just copy string.
+	movff	menu_title+1,FSR1H
+	call	strcpy_text
 
 menu_processor_title_1:
-        WIN_COLOR   color_greenish
-        movf    FSR2L,W                 ; Get title length
-        mullw   .9                      ; Convert to half pixels
-		bcf		STATUS,C				; Clear carry
-		rrcf	PRODL					; /2
-        movf    PRODL,W                 ; Back to WREG
-        sublw   .80                    	; 80 - width
-        movwf   win_leftx2              ; Aligned to center.
-
-        movlw   .0
-        movff   WREG,buffer+.17         ; limit to 17chars (Std font max.)
-
-        call    aa_wordprocessor
-        call    TFT_standard_color
-        return
+	WIN_COLOR color_greenish
+	movf	FSR2L,W							; Get title length
+	mullw	.9								; Convert to half pixels
+	bcf		STATUS,C						; Clear carry
+	rrcf	PRODL							; /2
+	movf	PRODL,W							; Back to WREG
+	sublw	.80								; 80 - width
+	movwf	win_leftx2						; Aligned to center.
+	movlw	.0
+	movff	WREG,buffer+.17					; limit to 17chars (Std font max.)
+	call	aa_wordprocessor
+	call	TFT_standard_color
+	return
 
 ;=============================================================================
 ; Call dynamic proc for menu title:
 
 menu_processor_call_title:
-        movff   menu_title+2,PCLATU     ; Just execute computed goto.
-        movff   menu_title+1,PCLATH
-        movf    menu_title+0,W
-        movwf   PCL
-        
+	movff	menu_title+2,PCLATU				; Just execute computed goto.
+	movff	menu_title+1,PCLATH
+	movf	menu_title+0,W
+	movwf	PCL
+
 ;=============================================================================
 ; Restart with first icon/line selected.
-        global  menu_processor_reset
+	global	menu_processor_reset
 menu_processor_reset:
-        banksel common
-        lfsr    FSR2,menustack
-        clrf    POSTINC2
-        clrf    POSTINC2
-        clrf    POSTINC2
-        clrf    POSTINC2
-        clrf    POSTINC2
-        clrf    selected_item
-        return
+	banksel	menustack
+	lfsr	FSR2,menustack
+	clrf	POSTINC2
+	clrf	POSTINC2
+	clrf	POSTINC2
+	clrf	POSTINC2
+	clrf	POSTINC2
+	banksel	common
+	clrf	selected_item
+	return
 
-        global  menu_processor_pop
+	global	menu_processor_pop
 menu_processor_pop:
-        movff   menustack+0,selected_item
-        movff   menustack+1,menustack+0
-        movff   menustack+2,menustack+1
-        movff   menustack+3,menustack+2
-        movff   menustack+4,menustack+3
-        return
+	movff	menustack+0,selected_item
+	movff	menustack+1,menustack+0
+	movff	menustack+2,menustack+1
+	movff	menustack+3,menustack+2
+	movff	menustack+4,menustack+3
+	return
+
+	global	menu_processor_double_pop
+menu_processor_double_pop:
+	movff	menustack+1,selected_item
+	movff	menustack+2,menustack+0
+	movff	menustack+3,menustack+1
+	movff	menustack+4,menustack+2
+	return
 
 menu_processor_push:
-        movff   menustack+3,menustack+4
-        movff   menustack+2,menustack+3
-        movff   menustack+1,menustack+2
-        movff   menustack+0,menustack+1
-        movff   selected_item,menustack+0
-        clrf    selected_item
-        return
+	movff	menustack+3,menustack+4
+	movff	menustack+2,menustack+3
+	movff	menustack+1,menustack+2
+	movff	menustack+0,menustack+1
+	movff	selected_item,menustack+0
+	clrf	selected_item
+	return
 
 ;---- Execute menu selection -------------------------------------------------
 do_menu_item:
-        bcf     switch_right            ; Avoid loops.
-        call    speed_normal            ; Back to normal speed.
-        
-        movf    selected_item,W         ; Reread proc address from table.
-        rcall   menu_read_item          ; (destroy PROD)
-    
-        movff   selected_item,PRODL     ; Pass along selected line
-    
-        rcall   menu_processor_push     ; Remember where we get from. (clears selected_item)
-    
-        movff   proc_item+2,PCLATU      ; Then execute computed goto.
-        movff   proc_item+1,PCLATH
-        movf    proc_item+0,W
-        movwf   PCL
+	bcf		switch_right					; Avoid loops.
+	call	speed_normal					; Back to normal speed.
+	movf	selected_item,W					; Reread proc address from table.
+	rcall	menu_read_item					; (destroy PROD)
+	movff	selected_item,PRODL				; Pass along selected line
+	rcall	menu_processor_push				; Remember where we get from. (clears selected_item)
+	movff	proc_item+2,PCLATU				; Then execute computed goto.
+	movff	proc_item+1,PCLATH
+	movf	proc_item+0,W
+	movwf	PCL
 
 ;=============================================================================
 ; Get current item from table.
@@ -233,379 +215,335 @@
 ;
 ; Trashed: PROD, WREG
 menu_read_item:
-        mullw   .10                     ; 10 bytes per item.
-        movf    PRODL,W                 ; Then do a 24bits add
-        addwf   menu_block+0,W          ; with menu_block, and
-        movwf   TBLPTRL                 ; setup TBLPTR
-        movf    PRODH,W
-        addwfc  menu_block+1,W
-        movwf   TBLPTRH
-        movlw   0
-        addwfc  menu_block+2,W
-        movwf   TBLPTRU
+	mullw	.10								; 10 bytes per item.
+	movf	PRODL,W							; Then do a 24bits add
+	addwf	menu_block+0,W					; with menu_block, and
+	movwf	TBLPTRL							; setup TBLPTR
+	movf	PRODH,W
+	addwfc	menu_block+1,W
+	movwf	TBLPTRH
+	movlw	0
+	addwfc	menu_block+2,W
+	movwf	TBLPTRU
+	VARARGS_GET8	value_type				; Read 10 bytes of item data
+	VARARGS_GET24	dynamic_item
+	VARARGS_GET24	proc_item
+	VARARGS_GET8	WREG					; Skip dummy byte
+	VARARGS_GET16	text_item
 
-        VARARGS_GET8    value_type      ; Read 10 bytes of item data
-        VARARGS_GET24   dynamic_item
-        VARARGS_GET24   proc_item
-        VARARGS_GET8    WREG            ; Skip dummy byte
-        VARARGS_GET16   text_item
-
-        return
+	return
 
 ;=============================================================================
 ; Vertical menu : set of line/value to choose from.
 ; Entry point to update lines already shown.
 ;
-        global   menu_vertical
+	global	menu_vertical
 menu_vertical:
-        btfss   divemode                ; Not in divemode
-		clrf	timeout_counter2		; Reset timeout
+	btfss	divemode						; Not in divemode
+	clrf	timeout_counter2				; Reset timeout
 
 menu_vertical_2:
-        rcall   menu_draw_lines			; Always re-draw whole menu
-
-		movlw	CCP1CON_VALUE			; See hwos.inc
-        btfss   divemode                ; Not in divemode
-		movwf	CCP1CON                 ; Power-on backlight
+	rcall	menu_draw_lines					; Always re-draw whole menu
+	movlw	CCP1CON_VALUE					; See hwos.inc
+	btfss	divemode						; Not in divemode
+	movwf	CCP1CON							; Power-on backlight
 
 menu_vertical_1:
-        movf    selected_item,W         ; Get current item data
-        rcall   menu_read_item
-        movf    proc_item+0,W           ; Check if pro address is NULL ?
-        iorwf   proc_item+1,W
-        bz      next_line_menu          ; YES: not selectable !
-
-        btfss   divemode                ; Not in divemode
-        rcall   menu_draw_selected_line
-
-        btfsc   in_color_menu           ; =1: In the color scheme menu
-        call    TFT_show_color_schemes  ; Yes, update the color schemes
-
-		extern	rtc_set_rtc
-		btfss	settime_setdate			; In the Set Time or Set Date menu?
-		bra		menu_line_loop_pre2		; no, skip all following
-		
-		movff	month,lo		; new month
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.28
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.30
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.30
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.30
-		dcfsnz	lo,F
-		movlw	.31
-		dcfsnz	lo,F
-		movlw	.30
-		dcfsnz	lo,F
-		movlw	.31
-		cpfsgt	day						; day ok?
-		bra		menu_line_loop_pre1		; OK!
-		movlw	.1						; not OK, set to 1st
-		movwf	day
+	movf	selected_item,W					; Get current item data
+	rcall	menu_read_item
+	movf	proc_item+0,W					; Check if pro address is NULL ?
+	iorwf	proc_item+1,W
+	bz		next_line_menu					; YES: not selectable !
+	btfss	divemode						; Not in divemode
+	rcall	menu_draw_selected_line
+	btfsc	in_color_menu					; =1: In the color scheme menu
+	call	TFT_show_color_schemes			; Yes, update the color schemes
+	btfss	settime_setdate					; In the Set Time or Set Date menu?
+	bra		menu_line_loop_pre2				; no, skip all following
+	movff	month,lo						; new month
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.28
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	cpfsgt	day								; day ok?
+	bra		menu_line_loop_pre1				; OK!
+	movlw	.1								; not OK, set to 1st
+	movwf	day
 
 menu_line_loop_pre1:
-		btfsc	switch_right			; Enter pressed?
-		call	rtc_set_rtc				; Yes, update mins,sec,hours,day,month and year to rtc module
-		call	TFT_show_time_date_menu	; Update clock
+	btfsc	switch_right					; Enter pressed?
+	call	rtc_set_rtc						; Yes, update mins,sec,hours,day,month and year to RTC module
+	call	TFT_show_time_date_menu			; Update clock
 
 menu_line_loop_pre2:
-        bcf     switch_right
-        bcf     switch_left
-        btfss   divemode                ; Not in Divemode
-        call    speed_normal
+	bcf		switch_right
+	bcf		switch_left
+	btfss	divemode						; Not in divemode
+	call	speed_normal
 
 menu_line_loop_pre3:
-    extern  divemode_option0_return
-        btfsc   divemode                ; In divemode?
-        goto    divemode_option0_return ; Yes, return to it
+	btfsc	divemode						; In divemode?
+	goto	divemode_option0_return			; Yes, return to it
 
 menu_line_loop:
-        btfsc   switch_right
-        bra     do_line_menu            ; Type dependent
-        btfsc   switch_left
-        bra     next_line_menu
-
-        btfss	quarter_second_update   ; 1/4 second?
-        bra     menu_line_loop1         ; Not yet...
-
-        btfsc   menu_show_sensors2      ; In the "Calibrate" menu?
-        call    TFT_menu_calibrate      ; Yes, update mV data
-        bcf     quarter_second_update   ; Clear flag
+	btfsc	switch_right
+	bra		do_line_menu					; Type dependent
+	btfsc	switch_left
+	bra		next_line_menu
+	btfss	quarter_second_update			; 1/4 second?
+	bra		menu_line_loop1					; Not yet...
+	btfsc	menu_show_sensors2				; In the "Calibrate" menu?
+	call	TFT_menu_calibrate				; Yes, update mV data
+	bcf		quarter_second_update			; Clear flag
 
 menu_line_loop1:
-		btfss	onesecupdate			; New second
-		bra		menu_line_loop2			; not yet...
-
-		call	timeout_surfmode		; timeout
-		call	set_dive_modes			; check, if divemode must be entered
-        call	get_battery_voltage		; gets battery voltage
-		
-		btfsc	settime_setdate			; In the Set Time or Set Date menu?
-		call	TFT_show_time_date_menu	; Yes, update clock
-
-		; DELETE - menu has been deleted	## memory
-        ; btfsc   menu_show_sensors       ; In the "Sensors" menu?
-        ; call    TFT_menu_hud            ; Yes, update HUD data
-
-		bcf		onesecupdate			; one second updates done
+	btfss	onesecupdate					; New second
+	bra		menu_line_loop2					; not yet...
+	call	timeout_surfmode				; timeout on timeout_counter2
+	call	set_dive_modes					; check, if divemode must be entered
+	call	get_battery_voltage				; gets battery voltage
+	btfsc	settime_setdate					; In the Set Time or Set Date menu?
+	call	TFT_show_time_date_menu			; Yes, update clock
+	bcf		onesecupdate					; one second updates done
 
 menu_line_loop2:
-		btfsc	sleepmode				; Timeout?
-		goto	restart					; Yes, back to surfacemode
-		btfsc	divemode
-		goto	restart					; Enter Divemode if required
-
-        btfsc   enable_screen_dumps     ; =1: Ignore vin_usb, wait for "l" command (Screen dump)
-        bra     menu_line_loop3
-        btfsc   vusb_in                 ; USB plugged in?
-        call    comm_mode               ; Start COMM mode
-        bra     menu_line_loop4
+	btfsc	sleepmode						; Timeout?
+	goto	restart							; Yes, back to surfacemode
+	btfsc	divemode
+	goto	restart							; Enter divemode if required
+	btfsc	enable_screen_dumps				; =1: Ignore vin_usb, wait for "l" command (Screen dump)
+	bra		menu_line_loop3
+	btfsc	vusb_in							; USB plugged in?
+	call	comm_mode						; Start COMM mode
+	bra		menu_line_loop4
 menu_line_loop3:
-        btfss   vusb_in                 ; USB (still) plugged in?
-        bcf     enable_screen_dumps     ; No, clear flag
-        call    rs232_get_byte
-        btfsc   rs232_recieve_overflow
-        bra     menu_line_loop4
-        movlw   "l"
-        cpfseq	RCREG1
-        bra     menu_line_loop4
-        call    TFT_dump_screen         ; Dump the screen contents
+	btfss	vusb_in							; USB (still) plugged in?
+	bcf		enable_screen_dumps				; No, clear flag
+	call	rs232_get_byte
+	btfsc	rs232_receive_overflow
+	bra		menu_line_loop4
+	movlw	"l"
+	cpfseq	RCREG1
+	bra		menu_line_loop4
+	call	TFT_dump_screen					; Dump the screen contents
 menu_line_loop4:
-
-        bra     menu_line_loop
+	bra		menu_line_loop
 
 ;---- Move to menu's next line
 next_line_menu:
-        btfss   divemode                ; not in divemode
-        call    speed_fastest
-        bcf     switch_left             ; Avoid looping.
+	btfss	divemode						; not in divemode
+	call	speed_fastest
+	bcf		switch_left						; Avoid looping.
+	incf	selected_item,F					; Select next item.
+	movf	selected_item,W					; Index == max ?
+	cpfseq	item_max
+	bra		menu_vertical_1					; NO: redraw cursor.
+	clrf	selected_item					; YES: restart for item 0.
+	bra	menu_vertical_1						; Then redraw cursor.
 
-        incf    selected_item,F         ; Select next item.
-        movf    selected_item,W         ; Index == max ?
-        cpfseq  item_max
-        bra     menu_vertical_1         ; NO: redraw cursor.
-
-        clrf    selected_item           ; YES: restart for item 0.
-        bra     menu_vertical_1         ; Then redraw cursor.
-
-        global  do_line_menu
+	global	do_line_menu
 do_line_menu:
-        btfss   divemode                ; not in divemode
-        call    speed_fastest
-;        bcf     switch_right            ; Avoid looping.
-
-        decf    menupos,W               ; menu_processor needs 0-5...
-        btfsc   divemode                ; only in divemode
-        movwf   selected_item
-
-        movf    selected_item,W         ; Read selected descriptor
-        rcall   menu_read_item
-
-        movf    value_type,W            ; Switch on data type
-        bz      menu_do_line_call       ; CALL
-        dcfsnz  WREG
-        bra     menu_do_line_call       ; STRING: do as call
-        dcfsnz  WREG
-        bra     menu_do_line_option     ; OPTION
-        dcfsnz  WREG
-        bra     menu_do_line_call       ; DYNAMIC: do as call
-        bra     menu_line_loop_pre3     ; else do nothing...
+	btfss	divemode						; not in divemode
+	call	speed_fastest
+;	bcf		switch_right					; Avoid looping.
+	decf	menupos1,W						; menu_processor needs 0-5...
+	btfsc	divemode						; only in divemode
+	movwf	selected_item
+	movf	selected_item,W					; Read selected descriptor
+	rcall	menu_read_item
+	movf	value_type,W					; Switch on data type
+	bz		menu_do_line_call				; CALL
+	dcfsnz	WREG
+	bra		menu_do_line_call				; STRING: do as call
+	dcfsnz	WREG
+	bra		menu_do_line_option				; OPTION
+	dcfsnz	WREG
+	bra		menu_do_line_call				; DYNAMIC: do as call
+	bra		menu_line_loop_pre3				; else do nothing...
 
 ;---- CALL
 menu_do_line_call:
-        rcall   do_menu_item            ; Same as icon menu: calculated goto.
-        rcall   menu_processor_pop      ; Back to same line,
-        bra     menu_vertical           ; Then continue into menu...
+	rcall	do_menu_item					; Same as icon menu: calculated goto.
+	rcall	menu_processor_pop				; Back to same line,
+	bra		menu_vertical					; Then continue into menu...
 
 ;---- Call option specific increment subroutine
 menu_do_line_option:
-        movff   option_item+0,FSR0L     ; Get option handle
-        movff   option_item+1,FSR0H
-        call    option_inc              ; increment
-        
-        movff   selected_item,PRODL     ; Pass selection to callback.
-        rcall   menu_text_call        
-        bra     menu_vertical_2         ; redraw all lines...
+	movff	option_item+0,FSR0L				; Get option handle
+	movff	option_item+1,FSR0H
+	call	option_inc						; increment
+	movff	selected_item,PRODL				; Pass selection to callback.
+	rcall	menu_text_call
+	bra		menu_vertical_2					; redraw all lines...
 
 ;-----------------------------------------------------------------------------
 
 menu_draw_lines_divemode:
-        movlw   dm_menu_item1_row
-        movff   WREG,win_top
-        movlw   dm_menu_item1_column
-        movff   WREG,win_leftx2
-        clrf    start_item
-        movff   item_max,menupos4       ; Copy item_max for divemode cursor routine
-        bra     menu_draw_lines_2
+	movlw	dm_menu_item1_row
+	movff	WREG,win_top
+	movlw	dm_menu_item1_column
+	movff	WREG,win_leftx2
+	clrf	start_item
+	movff	item_max,menupos4				; Copy item_max for divemode cursor routine
+	bra		menu_draw_lines_2
 
 menu_draw_lines:
-        btfsc   divemode                ; in divemode?
-        bra     menu_draw_lines_divemode; Yes
-
-        btfsc   menu_flags,0            ; Dynamic title ?
-        rcall   menu_processor_title    ; YES: redraw it then.
+	btfsc	divemode						; in divemode?
+	bra		menu_draw_lines_divemode		; Yes
+	btfsc	menu_flags,0					; Dynamic title ?
+	rcall	menu_processor_title			; YES: redraw it then.
+	MENU_LINE_FONT MENU_LEFT, 0				; Init start position/font
+	movff	menu_center,win_top				; computed in menu block.
 
-        MENU_LINE_FONT  MENU_LEFT, 0    ; Init start position/font
-        movff   menu_center,win_top     ; computed in menu block.
-
-        ; Does the menu have more than 6 lines ?
-        movf    item_max,W
-        addlw   -(MENU_LINES_MAX+1)     ; (max - 7)
-        bnn     menu_draw_long_menu     ; bra if (max >= 7)
-
-        clrf    start_item
-        bra     menu_draw_lines_2
+	; Does the menu have more than 6 lines ?
+	movf	item_max,W
+	addlw	-(MENU_LINES_MAX+1)				; (max - 7)
+	bnn		menu_draw_long_menu				; bra if (max >= 7)
+	clrf	start_item
+	bra		menu_draw_lines_2
 
 menu_draw_long_menu:
-        movf    selected_item,W         ; Start at selected-6
-        addlw   -(MENU_LINES_MAX-1)
-        btfsc   STATUS,N                ; This is <0 ?
-        clrf    WREG                    ; YES: start from top instead.
-        movwf   start_item
+	movf	selected_item,W					; Start at selected-6
+	addlw	-(MENU_LINES_MAX-1)
+	btfsc	STATUS,N						; This is <0 ?
+	clrf	WREG							; YES: start from top instead.
+	movwf	start_item
 
 menu_draw_lines_2:
-        movff   start_item, menu_item
+	movff	start_item, menu_item
 
 menu_draw_lines_1:
-        call    TFT_standard_color     	; Restore color after disabled lines.
-        
-        movf    menu_item,W
-        rcall   menu_read_item
-        
-        movf    value_type,W            ; Switch on data type
-        bz      menu_draw_line_call
-        dcfsnz  WREG
-        bra     menu_draw_line_string
-        dcfsnz  WREG
-        bra     menu_draw_line_option
-        dcfsnz  WREG
-        bra     menu_draw_line_dynamic
-        bra     menu_draw_line_none
+	call	TFT_standard_color				; Restore color after disabled lines.
+	movf	menu_item,W
+	rcall	menu_read_item
+	movf	value_type,W					; Switch on data type
+	bz		menu_draw_line_call
+	dcfsnz	WREG
+	bra		menu_draw_line_string
+	dcfsnz	WREG
+	bra		menu_draw_line_option
+	dcfsnz	WREG
+	bra		menu_draw_line_dynamic
+	bra		menu_draw_line_none
 
 menu_draw_line_string:
-        movff   text_item+0,TBLPTRL     ; Read not-translated string from PROM.
-        movff   text_item+1,TBLPTRH
-        call    strcpy_prom             ; Copy in buffer
-        bra     menu_draw_line_none
-        
-menu_draw_line_call:
-        movff   text_item+0,FSR1L       ; Read string from PROM.
-        movff   text_item+1,FSR1H
-        call    strcpy_text             ; Copy in buffer
+	movff	text_item+0,TBLPTRL				; Read not-translated string from PROM.
+	movff	text_item+1,TBLPTRH
+	call	strcpy_prom						; Copy in buffer
+	bra		menu_draw_line_none
 
-        bra     menu_draw_line_none
-        
+menu_draw_line_call:
+	movff	text_item+0,FSR1L				; Read string from PROM.
+	movff	text_item+1,FSR1H
+	call	strcpy_text						; Copy in buffer
+	bra		menu_draw_line_none
+
 menu_draw_line_option:
-        movff   text_item+0,FSR1L       ; Read string from PROM.
-        movff   text_item+1,FSR1H
-        call    strcpy_text             ; Copy in buffer
-
-        movff   option_item+0,FSR0L     ; Retrieve option handle.
-        movff   option_item+1,FSR0H
-        btfss   settime_setdate         ; Not in Time/Date menu...
-        call    option_draw
-        bra     menu_draw_line_none
+	movff	text_item+0,FSR1L				; Read string from PROM.
+	movff	text_item+1,FSR1H
+	call	strcpy_text						; Copy in buffer
+	movff	option_item+0,FSR0L				; Retrieve option handle.
+	movff	option_item+1,FSR0H
+	btfss	settime_setdate					; Not in Time/Date menu...
+	call	option_draw
+	bra		menu_draw_line_none
 
 menu_draw_line_dynamic:
-        lfsr    FSR2,buffer
-        movff   menu_item,PRODL         ; Pass item to callback.
-        rcall   menu_text_call          ; Push return address.
-        bra     menu_draw_line_none
+	lfsr	FSR2,buffer
+	movff	menu_item,PRODL					; Pass item to callback.
+	rcall	menu_text_call					; Push return address.
+	bra		menu_draw_line_none
 
 ; Computed goto to pointer inside dynamic_item:
 menu_text_call:
-        movf    dynamic_item+0,W        ; Check if callback is NULL
-        iorwf   dynamic_item+1,W
-        iorwf   dynamic_item+2,W
-        btfsc   STATUS,Z
-        return                          ; YES: don't call it.
-
-        movff   dynamic_item+2,PCLATU   ; Prepare...
-        movff   dynamic_item+1,PCLATH
-        movf    dynamic_item+0,W
-        movwf   PCL                     ; And jump !
+	movf	dynamic_item+0,W				; Check if callback is NULL
+	iorwf	dynamic_item+1,W
+	iorwf	dynamic_item+2,W
+	btfsc	STATUS,Z
+	return									; YES: don't call it.
+	movff	dynamic_item+2,PCLATU			; Prepare...
+	movff	dynamic_item+1,PCLATH
+	movf	dynamic_item+0,W
+	movwf	PCL								; And jump !
 
 menu_draw_line_none:
-        extern  TFT_fillup_with_spaces
-
-        btfsc   divemode                        ; In divemode?
-        bra     menu_draw_line_none_divemode    ; Yes
-        
-        movlw   MENU_LINE_MAX_LENGTH
-        call    TFT_fillup_with_spaces  ; Fillup FSR2 with spaces (Total string length in #WREG)
-        clrf    WREG
-        movff   WREG,buffer+MENU_LINE_MAX_LENGTH;No   ; Make sure won't be longer than MENU_LINE_MAX_LENGTH ch
-        call    aa_wordprocessor
-        movlw   MENU_HEIGHT             ; No, Move to next line
-        addwf   win_top,F
-        incf    menu_item,F             ; inc loop counter
-
-        movf    start_item,W            ; First line (scrolled)
-        subwf   menu_item,W             ; current - first
-        xorlw   MENU_LINES_MAX          ; Already done 6 lines ?
-        btfsc   STATUS,Z
-        return                          ; YES
+	btfsc	divemode						; In divemode?
+	bra	menu_draw_line_none_divemode		; Yes
+	movlw	MENU_LINE_MAX_LENGTH
+	call	TFT_fillup_with_spaces			; Fillup FSR2 with spaces (Total string length in #WREG)
+	clrf	WREG
+	movff	WREG,buffer+MENU_LINE_MAX_LENGTH ; No - make sure won't be longer than MENU_LINE_MAX_LENGTH ch
+	call	aa_wordprocessor
+	movlw	MENU_HEIGHT						; No, Move to next line
+	addwf	win_top,F
+	incf	menu_item,F						; inc loop counter
+	movf	start_item,W					; First line (scrolled)
+	subwf	menu_item,W						; current - first
+	xorlw	MENU_LINES_MAX					; Already done 6 lines ?
+	btfsc	STATUS,Z
+	return									; YES
 menu_draw_line_none2:
-        movf    menu_item,W             ; Done item_max lines ?
-        xorwf   item_max,W
-        btfss   STATUS,Z
-        bra     menu_draw_lines_1       ; No: loop...
-        return
+	movf	menu_item,W						; Done item_max lines ?
+	xorwf	item_max,W
+	btfss	STATUS,Z
+	bra	menu_draw_lines_1					; No: loop...
+	return
 
 menu_draw_line_none_divemode:
-        movlw   .10
-        call    TFT_fillup_with_spaces  ; Fillup FSR2 with spaces (Total string length in #WREG)
-        clrf    WREG
-        movff   WREG,buffer+.10
-
-        call    aa_wordprocessor        ; Draw the line!
-
-        banksel common
-        bcf     win_invert              ; Reset invert flag
-        banksel win_top
-
-        movlw   .24                     ; Divemode menu spacing
-        addwf   win_top,F
-        incf    menu_item,F             ; inc loop counter
-
-        movlw   .3
-        cpfseq  menu_item               ; At pos 4?
-        bra     menu_draw_line_none2    ; No
-
-        movlw   dm_menu_item4_row
-        movff   WREG,win_top            ; Reset row
-        movlw   dm_menu_item4_column
-        movff   WREG,win_leftx2         ; New column
-        bra     menu_draw_line_none2    ; Done.
+	movlw	.10
+	call	TFT_fillup_with_spaces			; Fill up FSR2 with spaces (Total string length in #WREG)
+	clrf	WREG
+	movff	WREG,buffer+.10
+	call	aa_wordprocessor				; Draw the line!
+	banksel	common
+	bcf		win_invert						; Reset invert flag
+	banksel	win_top
+	movlw	.24								; divemode menu spacing
+	addwf	win_top,F
+	incf	menu_item,F						; inc loop counter
+	movlw	.3
+	cpfseq	menu_item						; At pos 4?
+	bra		menu_draw_line_none2			; No
+	movlw	dm_menu_item4_row
+	movff	WREG,win_top					; Reset row
+	movlw	dm_menu_item4_column
+	movff	WREG,win_leftx2					; New column
+	bra		menu_draw_line_none2			; Done.
 
 ;-----------------------------------------------------------------------------
 ; Put a mark in front of the current line
 menu_draw_selected_line:
-		clrf	timeout_counter2		; Reset timeout
-        WIN_BOX_BLACK .34,.221,MENU_LEFT-8,MENU_LEFT-2  ; Clear left column
-        
-        call    TFT_standard_color
-        WIN_SMALL  MENU_LEFT-8, 0       ; Arrow symbol only in small font
-        movf    start_item,W            ; First line (scrolled)
-        subwf   selected_item,W         ; selected - first
-        mullw   MENU_HEIGHT             ; 30 pixel by line
-        movf    PRODL,W                 ; result
-        addwf   menu_center,W           ; added to first line
-        movwf   win_top                 ; and stored to pos.
-        STRCPY_PRINT    "\xb7"          ; print cursor
+	clrf	timeout_counter2				; Reset timeout
+	WIN_BOX_BLACK .34,.221,MENU_LEFT-8,MENU_LEFT-2 ; Clear left column
+	call	TFT_standard_color
+	WIN_SMALL MENU_LEFT-8, 0				; Arrow symbol only in small font
+	movf	start_item,W					; First line (scrolled)
+	subwf	selected_item,W					; selected - first
+	mullw	MENU_HEIGHT						; 30 pixel by line
+	movf	PRODL,W							; result
+	addwf	menu_center,W					; added to first line
+	movwf	win_top							; and stored to pos.
+	STRCPY_PRINT "\xb7"						; print cursor
+	return
 
-        return
-
-        END
+	END
\ No newline at end of file