diff src/tft_outputs.asm @ 256:5b4ef0b9090d

place compass display code into compass_ops.asm
author heinrichsweikamp
date Mon, 23 Mar 2015 18:02:40 +0100
parents ad62dff7739a
children e1cd6848863d
line wrap: on
line diff
--- a/src/tft_outputs.asm	Mon Mar 23 17:07:57 2015 +0100
+++ b/src/tft_outputs.asm	Mon Mar 23 18:02:40 2015 +0100
@@ -1297,57 +1297,6 @@
 	STRCAT_PRINT ""
 	return
 
-    global  TFT_compass_fast
-TFT_compass_fast:
-	WIN_TINY	.20,.50
-	STRCPY  "X:"
-    movff	compass_DX+0,lo
-    movff	compass_DX+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    output_16
-	STRCAT  " Y:"
-    movff	compass_DY+0,lo
-    movff	compass_DY+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    output_16
-	STRCAT  " Z:"
-    movff	compass_DZ+0,lo
-    movff	compass_DZ+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    output_16
-	STRCAT_PRINT "  "
-    return
-
-    global  TFT_show_timeout_testmode
-TFT_show_timeout_testmode:              ; With timeout in WREG...
-    movwf   hi
-    WIN_TINY	.20,.68
-    STRCPY  "T:"
-    movf    timeout_counter2,W          ; current timeout
-    subwf   hi,W                        ; subtract from timeout value
-    addlw   .1                          ; +1
-    movwf   lo
-    bsf     leftbind
-    output_8                            ; Display timeout
-    bcf     leftbind
-    STRCAT_PRINT "s "
-    return
-
-
-    global  TFT_compass_show_gain
-TFT_compass_show_gain:       ; Show the current compass gain
-    movff   opt_compass_gain,lo    ; 0-7 (230LSB/Gauss to 1370LSB/Gaus)
-    tstfsz  lo
-    return                         ; Do not show unless gain=0
-	WIN_TINY	.20,.86
-    STRCPY_TEXT  tCompassGain
-    movff   opt_compass_gain,lo    ; 0-7 (230LSB/Gauss to 1370LSB/Gaus)
-    bsf     leftbind
-    output_8
-    bcf     leftbind
-    STRCAT_PRINT "!"
-    return
-
     global  TFT_surface_decosettings    ; Show all deco settings
 TFT_surface_decosettings:
    ; Deco Mode
@@ -1406,1031 +1355,6 @@
     STRCAT_TEXT_PRINT   tPercent
     return                          ; Done.
 
-    global  TFT_surface_compass_mask
-TFT_surface_compass_mask:
-    WIN_SMALL   surf_compass_mask_column,surf_compass_mask_row
-	call	TFT_standard_color
-    STRCPY_TEXT_PRINT   tHeading            ; Heading:
-    return
-
-    global  TFT_dive_compass_mask
-TFT_dive_compass_mask:
-    WIN_FRAME_STD   dive_compass_graph_row, dive_compass_graph_row+dive_compass_graph_height, .0, .159
-    return
-
-    global  TFT_surface_compass_heading
-TFT_surface_compass_heading:
-    rcall   compass_heading_common
-    WIN_STD   surf_compass_head_column,surf_compass_head_row
-	call	TFT_standard_color
-TFT_surface_compass_heading_com:     ; Show "000° N"
-    movff	compass_heading+0,lo
-    movff	compass_heading+1,hi
-    call    TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-
-    ; Shown and actual identical?
-    movff   compass_heading_shown+0,WREG
-    cpfseq  lo
-    bra     TFT_surface_compass_heading_com1    ; Not equal
-    movff   compass_heading_shown+1,WREG
-    cpfseq  hi
-    bra     TFT_surface_compass_heading_com1    ; Not equal
-    bra     TFT_surface_compass_heading_com3    ; equal, skip smoothing
-
-TFT_surface_compass_heading_com1:
-    movff   lo,sub_a+0
-    movff   hi,sub_a+1
-    movff   compass_heading_shown+0,sub_b+0
-    movff   compass_heading_shown+1,sub_b+1
-    call    subU16
-    btfsc   neg_flag
-    bra     TFT_surface_compass_heading_com2        ; shown > actual
-    ; shown < actual
-    banksel compass_heading_shown
-    infsnz  compass_heading_shown+0,F
-    incf    compass_heading_shown+1,F               ; +1
-    bra     TFT_surface_compass_heading_com3
-
-TFT_surface_compass_heading_com2:
-    banksel compass_heading_shown
-    movlw	d'1'
-	subwf	compass_heading_shown+0,F
-	movlw	d'0'
-	subwfb	compass_heading_shown+1,F               ; -1
-
-TFT_surface_compass_heading_com3:
-    banksel common
-    movff   compass_heading_shown+0,lo
-    movff   compass_heading_shown+1,hi
-    bsf     leftbind
-    output_16dp .2      ; Result is "0.000"
-    bcf     leftbind
-    ; rearrange figures to "000"
-    movff   buffer+2,buffer+0
-    movff   buffer+3,buffer+1
-    movff   buffer+4,buffer+2
-    lfsr	FSR2,buffer+3
-    STRCAT  "° "
-    rcall   tft_compass_cardinal        ; Add cardinal and ordinal to POSTINC2
-    clrf    WREG
-    movff   WREG,buffer+.7              ; limit to 7 chars
-    STRCAT_PRINT ""
-    return
-
-    global  TFT_dive_compass_heading
-TFT_dive_compass_heading:
-    rcall   compass_heading_common
-;    ; ToDo - these are for development only, hardcoding the bearing position
-;    ; 244° : SW - W
-;    movlw   low(d'244')
-;    movff   WREG,compass_bearing+0
-;    movlw   high(d'244')
-;    movff   WREG,compass_bearing+1
-
-    movff   compass_heading_shown+0,xA+0
-    movff   compass_heading_shown+1,xA+1
-    ; xRD and xRDlft
-    ; 1.  160° viewing angle: +360 offset if xA<=292; for non-negative scale
-    movlw   high(d'292')
-    movff   WREG,sub_a+1
-    movlw   low(d'292')
-    movff   WREG,sub_a+0
-    movff   xA+1,sub_b+1
-    movff   xA+0,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; xA>292
-    bra     TFT_dive_compass_heading_1  ;yes
-    ; no, xA<=292
-    movlw   high(d'360')
-    addwf   xA+1,1
-    movlw   low(d'360')
-    addwf   xA+0,1
-    btfsc   STATUS,C
-    incf    xA+1
-TFT_dive_compass_heading_1:
-    ; 2. -80: left pixel offset from the center
-    movlw   low( d'80' )
-    subwf   xA+0,1
-    btfss   STATUS,C
-    decf    xA+1
-    ; 3. save it to xRD
-    movff   xA+0,xRD+0
-    movff   xA+1,xRD+1
-    ; 4. add 160 (display px width)
-    movlw   high(d'160')
-    addwf   xA+1,1
-    movlw   low(d'160')
-    addwf   xA+0,1
-    btfsc   STATUS,C
-    incf    xA+1
-    ; 5. save it to xRDr
-    movff   xA+0,xRDr+0
-    movff   xA+1,xRDr+1
-
-;    ; Bearing ?
-;    ; We can skip this xRD180 calculation if no bearing is set
-;    bcf     compass_bearing_set
-;    movff   compass_bearing+0,sub_a+0
-;    movff   compass_bearing+1,sub_a+1
-;    movlw   d'0'
-;    cpfseq  sub_a+1
-;    bra     TFT_dive_compass_bearing  ; something set, calculate xRD180
-;    movlw   d'0'
-;    cpfseq  sub_a+0
-;    bra     TFT_dive_compass_bearing  ; something set, calculate xRD180
-;    bra     TFT_dive_compass_ruler      ; no value in the bearing, skip calc
-;
-;TFT_dive_compass_bearing:
-;    bsf     compass_bearing_set
-
-    btfss   compass_bearing_set
-    bra     TFT_dive_compass_ruler      ; no value in the bearing, skip calc
-
-    ; we have bearing set, we will need xRD180 calculated
-    ; xRD180  is xRDr-180
-    movff   xRDr+1,sub_a+1
-    movff   xRDr+0,sub_a+0
-    movlw   high(d'180')
-    movff   WREG,sub_b+1
-    movlw   low(d'180')
-    movff   WREG,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    movff   sub_c+1,xRD180+1
-    movff   sub_c+0,xRD180+0
-
-    ; get the bearing virtual display offset, store it to divA
-    movff   compass_bearing+0,xA+0
-    movff   compass_bearing+1,xA+1
-    ; divA =IF (U10>292;U10;U10+360)
-    movlw   high(d'292')
-    movff   WREG,sub_a+1
-    movlw   low(d'292')
-    movff   WREG,sub_a+0
-    movff   xA+1,sub_b+1
-    movff   xA+0,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; xA>292
-    bra     TFT_dive_compass_bearing_1  ;yes
-    ; no, xA<=292
-    movlw   high(d'360')
-    addwf   xA+1,1
-    movlw   low(d'360')
-    addwf   xA+0,1
-    btfsc   STATUS,C
-    incf    xA+1
-    ; save it for the direction (<< or >>) calculation
-    movff   xA+1,divA+1
-    movff   xA+0,divA+0
-
-TFT_dive_compass_bearing_1:
-    ; calculate bearing position and visibility (ahead or behind)
-    bcf     compass_bearing_vis     ; default is not-visibly
-    bcf     compass_bearing_ahd     ; default is behind
-    ; check if it's ahead
-    ; load the bearing offset into sub_a
-    movff   divA+1,sub_a+1
-    movff   divA+0,sub_a+0
-    ; load the display offset back to sub_b
-    movff   xRD+0,sub_b+0
-    movff   xRD+1,sub_b+1
-    rcall    TFT_dive_compass_bearing_ap
-    ;test if we found it
-    btfsc   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_dir
-
-    ; check if it's ahead with a furr turn
-    ; load the bearing offset into sub_a
-    movff   divA+1,sub_a+1
-    movff   divA+0,sub_a+0
-    ; load the display offset back to sub_b
-    movff   xRD+0,sub_b+0
-    movff   xRD+1,sub_b+1
-    movlw   high(d'360')
-    addwf   sub_b+1,1
-    movlw   low(d'360')
-    addwf   sub_b+0,1
-    btfsc   STATUS,C
-    incf    sub_b+1
-    rcall    TFT_dive_compass_bearing_ap
-    ;test if we found it
-    btfsc   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_dir
-
-    ; marker is not ahead of us, check if it's behind us
-    ; use the (160 - (xRD180 - xCM)) formula to see if it's on the display
-    ; load the display offset back to sub_a
-    movff   xRD180+0,sub_a+0
-    movff   xRD180+1,sub_a+1
-    ; load the marker's offset into sub_b
-    movff   divA+0,sub_b+0
-    movff   divA+1,sub_b+1
-    rcall    TFT_dive_compass_bearing_bp
-    ;test if we found it
-    btfsc   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_dir
-
-    ;check if it's behind with the lower turn
-    movff   xRD180+0,sub_a+0
-    movff   xRD180+1,sub_a+1
-    movlw   high(d'360')
-    addwf   sub_a+1,1
-    movlw   low(d'360')
-    addwf   sub_a+0,1
-    btfsc   STATUS,C
-    incf    sub_a+1
-    ; load the marker's offset into sub_b
-    movff   divA+0,sub_b+0
-    movff   divA+1,sub_b+1
-    rcall    TFT_dive_compass_bearing_bp
-    ;test if we found it
-    btfsc   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_dir
-
-    ; check if it's behind with the upper turn
-    movff   divA+1,sub_b+1
-    movff   divA+0,sub_b+0
-    movlw   high(d'360')
-    addwf   sub_b+1,1
-    movlw   low(d'360')
-    addwf   sub_b+0,1
-    btfsc   STATUS,C
-    incf    sub_b+1
-    rcall    TFT_dive_compass_bearing_bp
-    bra     TFT_dive_compass_bearing_dir
-
-TFT_dive_compass_bearing_ap:
-    ; xCM received in sub_a
-    ; xRD received in sub_b
-    ; 1/a. check if it's viewable from the left side
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; xRD>divA
-    return  ;no,
-    ; yes, store the RO=RP-RD for drawing
-    movff   sub_c+0,xC+0
-    movff   sub_c+1,xC+1
-    ; 1/b. check if it's viewable from the right side?
-    movlw   d'2'        ;   avoid thin mess on the side of the display
-    addwf   sub_a+0,1
-    btfsc   STATUS, C
-    incf    sub_a+1
-    ; load the display offset right side into sub_b
-    movlw   high(d'160')
-    addwf   sub_b+1,1
-    movlw   low(d'160')
-    addwf   sub_b+0,1
-    btfsc   STATUS,C
-    incf    sub_b+1
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfss   neg_flag    ; xRDr>xA(+2)
-    return ; no,
-    ; print the bearing lines on the screen
-    movff   xC+0,xCM
-    bsf     compass_bearing_vis     ; set visible
-    bsf     compass_bearing_ahd     ; set ahead
-    return    ; done,
-
-TFT_dive_compass_bearing_bp:
-    ; use the (160 - (xRD180 - xCM)) formula to see if it's on the display
-    ; the marker's offset received in sub_b
-    ; the xRD180 display offset received in sub_a
-    ; xRD180 - xCM
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; CM>xRD180
-    return  ; no, not on screen
-    ; 160 - (X)
-    movlw   high(d'160')
-    movff   WREG,sub_a+1
-    movlw   low(d'160')
-    movff   WREG,sub_a+0
-    movff   sub_c+1,sub_b+1
-    movff   sub_c+0,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; X>160
-    return  ; no, not on screen
-    ; check if not overflow - this sounds a double check...
-    movlw   d'1'
-    cpfslt  sub_c+1
-    return  ; high set, >160
-    movlw   d'160'
-    cpfslt  sub_c+0
-    return  ; low >160
-    ; print the bearing lines on the screen
-    movff   sub_c+0,xCM
-    bsf     compass_bearing_vis
-    return    ; done
-
-TFT_dive_compass_bearing_dir:
-    ; check if bearing to heading, and calculate the direction
-    bcf     compass_bearing_eq
-    btfss   compass_bearing_vis
-    bra     TFT_dive_compass_bearing_lr
-    btfss   compass_bearing_ahd
-    bra     TFT_dive_compass_bearing_lr
-    movff   xCM,xA+0
-    movlw   d'80'
-    cpfseq  xA+0
-    bra     TFT_dive_compass_bearing_lr
-    bsf     compass_bearing_eq
-    bra     TFT_dive_compass_ruler  ; bearing points to heading, no signs are required, go to the ruler
-
-TFT_dive_compass_bearing_lr:
-    ; 1. calculate whether bearing is to left or to right
-    bsf     compass_bearing_lft   ; to the left by default
-    ; get the bearing offset back
-    movff   divA+1,xA+1
-    movff   divA+0,xA+0
-    ; xC: save center value to compare the direction to front value
-    movff   xA+1,xC+1
-    movff   xA+0,xC+0
-    ; xB: we need the left side for comparism... left = -180
-    movff   xA+1,sub_a+1
-    movff   xA+0,sub_a+0
-    movlw   high(d'180')
-    movff   WREG,sub_b+1
-    movlw   low(d'180')
-    movff   WREG,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    movff   sub_c+1,xB+1    ; xB has the left side of the 180° distance center
-    movff   sub_c+0,xB+0
-    ; xA = IF(xRD>(xC+100);xRD-280;xRD+80)
-    movff   xC+1,sub_a+1
-    movff   xC+0,sub_a+0
-    movlw   d'100'
-    addwf   sub_a+0,1
-    btfsc   STATUS,C
-    incf    sub_a+1
-    movff   xRD+1,sub_b+1
-    movff   xRD+0,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; xRD>xC+100
-    bra     TFT_dive_compass_bearing_lr_2   ; yes, xA=xRD-280
-    ; no, xA = xRD+80
-    movff   xRD+1,xA+1
-    movff   xRD+0,xA+0
-    movlw   d'80'
-    addwf   xA+0,1
-    btfsc   STATUS,C
-    incf    xA+1
-    bra     TFT_dive_compass_bearing_lr_c
-
-TFT_dive_compass_bearing_lr_2:
-    ; xA=xRD-280
-    movff   xRD+1,sub_a+1
-    movff   xRD+0,sub_a+0
-    movlw   high(d'280')
-    movff   WREG,sub_b+1
-    movlw   low(d'280')
-    movff   WREG,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    movff   sub_c+1,xA+1
-    movff   sub_c+0,xA+0
-    ;bra     TFT_dive_compass_bearing_lr_c
-
-TFT_dive_compass_bearing_lr_c:
-   ; xB < xA < xC => right, otherwise left (default)
-    movff   xA+1,sub_b+1
-    movff   xA+0,sub_b+0
-    movff   xB+1,sub_a+1
-    movff   xB+0,sub_a+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfss   neg_flag    ; xA>xB ?
-    bra     TFT_dive_compass_ruler     ; No, xB >= xA, keep default left
-    movff   xA+1,sub_a+1
-    movff   xA+0,sub_a+0
-    movff   xC+1,sub_b+1
-    movff   xC+0,sub_b+0
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfss   neg_flag    ; xC>xA ?
-    bra     TFT_dive_compass_ruler     ; No, xA >= xC, keep default left
-    bcf     compass_bearing_lft
-
-TFT_dive_compass_ruler:
-    ; calculate mod15 for the ticks
-    movff   xRD+0,xA+0
-    movff   xRD+1,xA+1
-	movlw	d'15'
-	movwf	xB+0
-	clrf	xB+1
-	call	div16x16  				;xA/xB=xC with xA+0 as remainder
-    ; check xA+0, it has the remainder
-    movlw   d'0'
-    cpfsgt  xA+0                        ; mod15 > 0
-    bra     TFT_dive_compass_ruler_1  ; no, RM = 0
-    ; yes RM = 15 - RDmod15
-    movlw   d'15'
-    subfwb  xA+0,1
-TFT_dive_compass_ruler_1:
-    ; xA+0 holds the RM, store it to 'lo'
-    movff    xA+0,lo
-    ; init DD to zero, store it to 'hi'
-    movlw   d'0'
-    movff   WREG,hi
-
-TFT_dive_compass_ruler_loop:
-    ; 1. check if we run of from the display
-    movlw   d'160'    ; Looks like 160 works because TFT_box limits the dispay
-    cpfslt  lo,1
-    bra     TFT_dive_compass_ruler_lend    ; xRM >= W
-    ; 2. Clear the tick area from DD to RM - in segments to avoid blinking
-    ;    don't do a clear if we are at 0 (zero) otherwise it will blink
-    ;    because of the width underflow
-    movlw   d'0'
-    cpfsgt  lo,1
-    bra     TFT_dive_compass_ruler_loop_zz
-    rcall    TFT_dive_compass_clr_ruler
-TFT_dive_compass_ruler_loop_zz:
-    ; 3. Draw the markers @ RM
-    rcall    TFT_dive_compass_ruler_print
-    ; 4. If D<82 and RM>79: means we put something over the center line
-    ;    redraw the center line
-    movlw   d'82'
-    cpfslt  hi,1
-    bra     TFT_dive_compass_ruler_loop_zz2
-    movlw   d'79'
-    cpfsgt  lo,1
-    bra     TFT_dive_compass_ruler_loop_zz2
-    rcall    TFT_dive_compass_c_mk
-TFT_dive_compass_ruler_loop_zz2:
-    ; 5. set D = RM + 2 : position after the 2px tick
-    movff   lo,hi
-    movlw   d'2'
-    addwf   hi,1
-    ; 6. set RM = RM + 15 : position to the next tick
-    movlw   d'15'
-    addwf   lo,1
-    ; 7. loop
-    bra     TFT_dive_compass_ruler_loop
-
-TFT_dive_compass_ruler_lend:    ; loop end
-    ; 8. clear the rest of the tick area if D<160
-    movlw   d'160'
-    cpfslt  hi,1
-    bra     TFT_dive_compass_ruler_lend2    ; D >= W
-    ; 9. position left to end of display to clear the remaining area
-    movlw   d'160'
-    movwf   lo
-    ; 10. clear it
-    rcall TFT_dive_compass_clr_ruler
-
-TFT_dive_compass_ruler_lend2:
-    rcall TFT_dive_compass_c_mk
-    ; done with the compass ruler, put the labels on the screen
-    ; get the RD abck to sub_b
-    movff   xRD+0,sub_b+0
-    movff   xRD+1,sub_b+1
-    ; hi stores the display position
-    movlw   d'0'
-    movwf   hi
-    ; lo stores the last item's display position
-    movlw   d'0'
-    movwf   lo
-    bcf     print_compass_label
-
-    movlw   d'14'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'219' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'219' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_1
-    STRCPY_TEXT_PRINT     tSW                 ; yes - print it
-dcr_1:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'7'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'267' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'267' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_2
-    STRCPY_TEXT_PRINT     tW                 ; yes - print it
-dcr_2:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'14'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'309' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'309' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_3
-    STRCPY_TEXT_PRINT     tNW                 ; yes - print it
-dcr_3:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'6'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'358' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'358' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_4
-    STRCPY_TEXT_PRINT     tN                 ; yes - print it
-dcr_4:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'13'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'399' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'399' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_5
-    STRCPY_TEXT_PRINT     tNE                 ; yes - print it
-dcr_5:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'6'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'448' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'448' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_6
-    STRCPY_TEXT_PRINT     tE                 ; yes - print it
-dcr_6:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'13'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'489' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'489' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_7
-    STRCPY_TEXT_PRINT     tSE                 ; yes - print it
-dcr_7:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'6'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'538' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'538' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_8
-    STRCPY_TEXT_PRINT     tS                 ; yes - print it
-dcr_8:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'14'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'579' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'579' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_9
-    STRCPY_TEXT_PRINT     tSW                 ; yes - print it
-dcr_9:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'7'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'627' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'627' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_10
-    STRCPY_TEXT_PRINT     tW                 ; yes - print it
-dcr_10:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'14'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'669' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'669' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_11
-    STRCPY_TEXT_PRINT     tNW                 ; yes - print it
-dcr_11:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-    movlw   d'6'
-    movwf   up                  ; up stores the width of hte label
-    movlw   low( d'718' )       ; position of the label
-    movwf   sub_a+0
-    movlw   high( d'718' )
-    movwf   sub_a+1
-    rcall    TFT_dive_compass_label_proc     ; check if the label should be on screen
-    btfss   print_compass_label             ; Yes?
-    bra     dcr_12
-    STRCPY_TEXT_PRINT     tN                 ; yes - print it
-dcr_12:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-
-TFT_dive_compass_label_end:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-    ; restore lo and hi for the final cleanup
-    movff   xLO,lo
-    movff   xHI,hi
-    ; clear the rest of the SQ area if there are more space
-    movlw   d'160'
-    cpfslt  hi
-    bra     TFT_dive_compass_label_end2    ; D >= 160, no more space
-    ; position left to end of display to clear the remaining area
-    movlw   d'160'
-    movff   WREG,lo
-    ; clear it
-    rcall    TFT_dive_compass_clr_label
-TFT_dive_compass_label_end2:
-    rcall    TFT_dive_compass_c_mk           ; check if label is on the center line or the marker
-    ; do we have bearing set?
-    btfsc   compass_bearing_set
-    bra     TFT_dive_compass_dir_text   ; bearing_set=1 - go and print the dir (<< or >>)
-    rcall    TFT_dive_compass_dir_lclr     ; no, clear the area (e.g. we had but removed)
-    rcall    TFT_dive_compass_dir_rclr
-    bra     TFT_dive_compass_text
-
-TFT_dive_compass_dir_text:
-    ; bearing set, but does it point to heading?
-    btfss   compass_bearing_eq
-    bra     TFT_dive_compass_dir_text_2   ; bearing != heading - go and print the dir
-    rcall    TFT_dive_compass_dir_lclr     ; bearing = heading, no need for direction markers
-    rcall    TFT_dive_compass_dir_rclr
-    bra     TFT_dive_compass_text
-
-TFT_dive_compass_dir_text_2:
-    btfsc   compass_bearing_lft
-    bra     TFT_dive_compass_dir_ldir      ; bearing_lft=1, print the left marker
-;TFT_dive_compass_text_rdir:
-    movlw   color_green
-    call    TFT_set_color
-    WIN_SMALL   dive_compass_rdir_column,dive_compass_head_row
-    STRCPY_PRINT    ">>"
-    ; do not forget to clear the left
-    rcall    TFT_dive_compass_dir_lclr
-    bra     TFT_dive_compass_text
-
-TFT_dive_compass_dir_ldir:
-    movlw   color_green
-    call    TFT_set_color
-    WIN_SMALL   dive_compass_ldir_column,dive_compass_head_row
-    STRCPY_PRINT    "<<"
-    ; do not forget to clear the right
-    rcall    TFT_dive_compass_dir_rclr
-    ;bra     TFT_dive_compass_text
-
-TFT_dive_compass_text:
-    ; Text output
-    call    TFT_standard_color
-    WIN_SMALL   dive_compass_head_column,dive_compass_head_row
-    rcall   TFT_surface_compass_heading_com  ; Show "000° N"
-    return
-
-TFT_dive_compass_dir_lclr:
-    WIN_SMALL   dive_compass_ldir_column,dive_compass_head_row
-    STRCPY_PRINT    "  "
-    return
-
-TFT_dive_compass_dir_rclr:
-    WIN_SMALL   dive_compass_rdir_column,dive_compass_head_row
-    STRCPY_PRINT    "  "
-    return
-
-TFT_dive_compass_label_proc:
-    ; Input:
-    ;   xHI:   DD  - display'a current position
-    ;   xRD:   RD  - ruler display offset
-    ;   sub_a: RP  - item's ruler display offset
-    ; get the RD abck to sub_b
-    movff   xHI,hi
-    bcf     print_compass_label
-    ; 1/a. check if it's viewable ? sub_a(RP) >= sub_b(RD) ?
-    ;    set the carry flag if sub_b(xRD) is equal to or greater than sub_a(xRP):
-    movff   xRD+0,sub_b+0
-    movff   xRD+1,sub_b+1
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfsc   neg_flag    ; >=0?
-    return              ; No
-    ; store the RO=RP-RD for drawing
-    movff   sub_c+0,xC+0
-    movff   sub_c+1,xC+1
-
-    ; 1/b. check if it's viewable ? sub_a(RP)+up(width) < sub_b(RD)+160
-    ;      if already above, no need to process the rest of the labels
-    ;movff   up,WREG    ; don't worry about the width, low level call prevents overload
-    movlw   d'2'        ;   .. but still avoid thin mess on the side of the display
-    addwf   sub_a+0,1
-    btfsc   STATUS, C
-    incf    sub_a+1
-
-    movff   xRDr+0,sub_b+0
-    movff   xRDr+1,sub_b+1
-    call    subU16      ;  sub_c = sub_a - sub_b
-    btfss   neg_flag    ; ? <0
-    bra     TFT_dive_compass_label_end      ; No
-
-    ; 2. restore RO=RP-RD from 1/a.
-    movff   xC+0,lo
-
-    ; 3. Clear the segment from DD(hi) to lo
-    ; don't do a clear if we are at 0 (zero) otherwise it will blink
-    ;   ?because of the width underflow?
-    movlw   d'0'
-    cpfsgt  lo
-    bra     TFT_dive_compass_label_proc_p
-    rcall    TFT_dive_compass_clr_label
-TFT_dive_compass_label_proc_p:
-    ; 4. print the SQ on the screen
-    call    TFT_standard_color
-    bsf     print_compass_label
-    rcall    TFT_dive_compass_label_print
-    ; 6. retain the new display positions
-    movff   hi,divB     ; old-hi will be used by the c_mk : clear+marker printing
-    movff   lo,hi
-    movff   up,WREG
-    addwf   hi,1
-    movff   lo,xLO
-    movff   hi,xHI
-    return
-
-TFT_dive_compass_label_print:
-    movlw   dive_compass_label_row
-    movff   WREG,win_top
-    movff   lo,win_leftx2
-    movlw   FT_SMALL
-    movff   WREG,win_font
-    return
-
-TFT_dive_compass_c_mk:
-    ; Common task to draw center line and marker
-    ;    until a proper implementation make it simple:
-    rcall    TFT_dive_compass_mk
-    rcall    TFT_dive_compass_cline
-    return
-
-TFT_dive_compass_mk:
-    ; draw the bearing on the screen if visible and if we just put something over it
-    btfss   compass_bearing_set
-    return  ; bearing_set=0 nothing to display
-
-    btfss   compass_bearing_vis
-    return  ; bearing set but not visible
-
-    ; save lo/hi from trashing
-    movff   lo,xA+0
-    movff   hi,xA+1
-
-    ; did we just update the marker's position?
-    ;                       DD.......DD
-    ;          CM+2>=DD(old)    or     CM-2<=DD
-    ; ToDo
-
-    btfss   compass_bearing_ahd
-    bra     TFT_dive_compass_mk_rear
-;TFT_dive_compass_mk_front:
-    clrf    lo
-    movff   xCM,lo
-    bsf     print_compass_label ; set=green marker
-    rcall    TFT_dive_compass_mk_print
-    bcf     print_compass_label
-    bra     TFT_dive_compass_mk_end
-
-TFT_dive_compass_mk_rear:
-    clrf    lo
-    movff   xCM,lo
-    bcf     print_compass_label ; set=red marker
-    rcall    TFT_dive_compass_mk_print
-
-TFT_dive_compass_mk_end:
-    movff   xA+0,lo
-    movff   xA+1,hi
-    return
-
-TFT_dive_compass_mk_print:
-    movlw   d'1'
-    cpfsgt  lo
-    bra     TFT_dive_compass_mk_print_2 ; lo<1, skip the first line
-    movlw   d'2'
-    subwf   lo,0
-    movff   WREG,win_leftx2
-    rcall    TFT_dive_compass_mk_print_3
-TFT_dive_compass_mk_print_2:
-    movlw   d'2'
-    addwf   lo,0
-    movff   WREG,win_leftx2
-    rcall    TFT_dive_compass_mk_print_3
-    return
-TFT_dive_compass_mk_print_3:
-    movlw   dive_compass_label_row
-    movff   WREG,win_top
-    movlw   dive_compass_label_height-.2
-    movff   WREG,win_height
-    movlw   d'2'
-    movff   WREG,win_width
-    movlw   d'2'
-    movff   WREG,win_bargraph
-    movlw   color_green
-    btfss   print_compass_label
-    movlw   color_red
-    call    TFT_set_color
-    call    TFT_box
-    return
-
-TFT_dive_compass_clr_label:
-    movlw   dive_compass_label_row-.2     ; set top & height
-    movff   WREG,win_top
-    movlw   dive_compass_label_height+.2
-    movff   WREG,win_height
-    rcall    TFT_dive_compass_clear
-    return
-
-TFT_dive_compass_clr_ruler:
-    ; top tick
-    movlw   dive_compass_tick_top_top     ; set top & height
-    movff   WREG,win_top
-    movlw   dive_compass_tick_height
-    movff   WREG,win_height
-    rcall    TFT_dive_compass_clear
-    ;bottom tick
-    movlw   dive_compass_tick_bot_top     ; set top & height
-    movff   WREG,win_top
-    movlw   dive_compass_tick_height
-    movff   WREG,win_height
-    rcall    TFT_dive_compass_clear
-    return
-
-TFT_dive_compass_clear:
-    ; we receive RM in lo and DD in hi
-    ; calculate width = RM-D
-    movff   hi,WREG
-    subwf   lo,0
-    movff   WREG,win_width         ; RM-DD
-    movff   WREG,win_bargraph
-    movff   hi,win_leftx2
-    movlw   color_black
-    call    TFT_set_color
-    call    TFT_box
-    return
-
-TFT_dive_compass_ruler_print:
-    ; we receive RM in lo and DD in hi
-    movlw   dive_compass_tick_top_top
-    movff   WREG,win_top
-    movlw   dive_compass_tick_height
-    movff   WREG,win_height
-    movlw   d'2'
-    movff   WREG,win_width
-    movlw   d'2'
-    movff   WREG,win_bargraph
-    movff   lo,win_leftx2          ; 0..159
-    call    TFT_standard_color
-    call    TFT_box
-    movlw   dive_compass_tick_bot_top
-    movff   WREG,win_top
-    movlw   dive_compass_tick_height
-    movff   WREG,win_height
-    call    TFT_standard_color
-    call    TFT_box
-    return
-
-TFT_dive_compass_cline:
-   	movlw   color_yellow
-    WIN_BOX_COLOR     dive_compass_tick_top_top,dive_compass_tick_bot_bot,.80,.81
-    return
-
-tft_compass_cardinal:
-    btfsc  hi,0          ; Heading >255°?
-    bra     tft_compass_cardinal2   ; Yes must be W, NW or N
-    ; No, Must be W, SW, S, SE, E, NE or N
-    movlw   .23
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_N
-    movlw   .68
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_NE
-    movlw   .113
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_E
-    movlw   .158
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_SE
-    movlw   .203
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_S
-    movlw   .248
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_SW
-    bra     tft_compass_cardinal_W
-
-tft_compass_cardinal2:
-    movlw   .37
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_W
-    movlw   .82
-    subwf   lo,W
-    btfss   STATUS,C
-    bra     tft_compass_cardinal_NW
-;    bra     tft_compass_cardinal_N
-tft_compass_cardinal_N:
-    STRCAT_TEXT     tN
-    return
-tft_compass_cardinal_NE:
-    STRCAT_TEXT     tNE
-    return
-tft_compass_cardinal_E:
-    STRCAT_TEXT     tE
-    return
-tft_compass_cardinal_SE:
-    STRCAT_TEXT     tSE
-    return
-tft_compass_cardinal_S:
-    STRCAT_TEXT     tS
-    return
-tft_compass_cardinal_SW:
-    STRCAT_TEXT     tSW
-    return
-tft_compass_cardinal_W:
-    STRCAT_TEXT     tW
-    return
-tft_compass_cardinal_NW:
-    STRCAT_TEXT     tNW
-    return
-
-compass_heading_common:
-	call	speed_normal
-    movlw   compass_averaging           ; numbers of extra averaging
-    movwf   up
-compass_heading_common2:
-    rcall   TFT_get_compass
-    decfsz  up,F
-    bra     compass_heading_common2
-    extern  compass
-    call    compass                     ; Do compass corrections.
-    banksel common
-  
-    ; More then compass_fast_treshold?
-    movff   compass_heading_old+0,sub_a+0
-    movff   compass_heading_old+1,sub_a+1
-    movff   compass_heading+0,sub_b+0
-    movff   compass_heading+1,sub_b+1
-    call    sub16
-    btfss   neg_flag                        ; <0?
-    bra     compass_heading_common3         ; No, test for threshold
-    ; Yes, subtract the other way round
-    movff   compass_heading+0,sub_a+0
-    movff   compass_heading+1,sub_a+1
-    movff   compass_heading_old+0,sub_b+0
-    movff   compass_heading_old+1,sub_b+1
-    call    sub16
-compass_heading_common3:
-    movff   compass_heading+0,compass_heading_old+0 ; copy new "old"
-    movff   compass_heading+1,compass_heading_old+1
-
-    bcf     compass_fast_mode
-    movlw   compass_fast_treshold
-    cpfslt  sub_c+0                             ; > compass_fast_treshold?
-    bsf     compass_fast_mode                   ; Yes!
-
-    btfss   compass_fast_mode               ; In fast mode?
-    return                                  ; No.
-    ; Yes.
-    movff	compass_heading+0,lo
-    movff	compass_heading+1,hi
-    rcall   TFT_convert_signed_16bit	; converts lo:hi into signed-short and adds '-' to POSTINC2 if required
-    movff   lo,compass_heading_shown+0
-    movff   hi,compass_heading_shown+1
-    return
-
-TFT_get_compass:
-    call    I2C_RX_compass              ; Test Compass
-    call    I2C_RX_accelerometer        ; Test Accelerometer
-    extern  compass_filter
-    call    compass_filter              ; Filter Raw compass + accel readings.
-    banksel common
-    return
-
 	global	TFT_debug_output
 TFT_debug_output:
     return